porting tmpfs
--0016368e1b105cfbfc04785264f4
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: quoted-printable
Hi.
In July, I=92ve fixed file truncating bug. The problem was the lack of
a call to vtruncbuf() in tmpfs_reg_resize(). Now tmpfs survives
testing with fsx and fsstress. But also I found some bug at
fsstress.c: in function creat_f() line 1684 "add_to_flist(type, id,
parid);" must be after the following line "#endif". Without this
change fsstress does not remember files that it is created and no
reading/writing is performed. (=93no filename=94 error is displayed in
verbose mode.)
Also I don=92t understand why Alex Hornung has removed tmpfs_spec_vnops.
Without adding this ops call to mknod() ends with panic. (I have to
run fsstress with option =93=96f mknod=3D0=94.)
Next I tried to use objcache instead of plain kmalloc() to allocate
tmpfs nodes and direntries. But when objcache is destroyed during
unmount, there is a crit_panic "td_pri is/would-go negative! -26"
caused by mag_purge() calling crit_exit() at objcache.c. It seems that
mag_purge() is not called from the critical section as it is expected.
tmpfs now really takes double memory space. I tried to implement page
moving between VM objects but I=92ve never seen buffer passed to
tmpfs_strategy() with B_RELBUF set. All my attempts to modify buffer
flags in tmpfs_read() end with global deadlock.
2 diffs to Alex Hornung's tree are attached: first uses kmalloc(),
second uses objcache.
--0016368e1b105cfbfc04785264f4
Content-Type: application/octet-stream; name="tmpfs.diff"
Content-Disposition: attachment; filename="tmpfs.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_g2084zzz0
ZGlmZiAtLWdpdCBhL3N5cy92ZnMvdG1wZnMvdG1wZnMuaCBiL3N5cy92ZnMvdG1wZnMvdG1wZnMu
aAppbmRleCAyOTRjMTg3Li45YWRiMjkzCi0tLSBhL3N5cy92ZnMvdG1wZnMvdG1wZnMuaAorKysg
Yi9zeXMvdmZzL3RtcGZzL3RtcGZzLmgKQEAgLTcwLDE2ICs3MCwxNiBAQCBNQUxMT0NfREVDTEFS
RShNX1RNUEZTKTsKICNkZWZpbmUga211dGV4X3QJCXN0cnVjdCBsb2NrCiAKICNkZWZpbmUgbXV0
ZXhfaW5pdChtdHgsIGEsIGIpCWxvY2tpbml0KG10eCwgIm11dGV4IiwgMCwgMCkKLSNkZWZpbmUg
bXV0ZXhfZGVzdHJveShtdHgpCQlsb2NrdW5pbml0KG10eCkKLSNkZWZpbmUgbXV0ZXhfZW50ZXIo
bXR4KQkJbG9ja21ncihtdHgsIExLX0VYQ0xVU0lWRSkKLSNkZWZpbmUgbXV0ZXhfZXhpdChtdHgp
CQkJbG9ja21ncihtdHgsIExLX1JFTEVBU0UpCisjZGVmaW5lIG11dGV4X2Rlc3Ryb3kobXR4KQls
b2NrdW5pbml0KG10eCkKKyNkZWZpbmUgbXV0ZXhfZW50ZXIobXR4KQlsb2NrbWdyKG10eCwgTEtf
RVhDTFVTSVZFKQorI2RlZmluZSBtdXRleF9leGl0KG10eCkJCWxvY2ttZ3IobXR4LCBMS19SRUxF
QVNFKQogCi0jZGVmaW5lIE1OVF9HRVRBUkdTIDAKLSNkZWZpbmUgSU5UX01BWAkJMHhmZmZmZmZm
ZgotI2RlZmluZSBNQVhOQU1MRU4JTU5BTUVMRU4KLSNkZWZpbmUgSU1OVF9NUFNBRkUJMAorI2Rl
ZmluZSBNTlRfR0VUQVJHUwkJMAorI2RlZmluZSBJTlRfTUFYCQkJMHhmZmZmZmZmZgorI2RlZmlu
ZSBNQVhOQU1MRU4JCU1OQU1FTEVOCisjZGVmaW5lIElNTlRfTVBTQUZFCQkwCiAKLSNkZWZpbmUg
dl9pbnRlcmxvY2sJdl9sb2NrCisjZGVmaW5lIHZfaW50ZXJsb2NrCQl2X2xvY2sKIAogI2RlZmlu
ZSBVUERBVEVfQ0xPU0UJCTAKIApAQCAtOTIsMTcgKzkyLDcgQEAgTUFMTE9DX0RFQ0xBUkUoTV9U
TVBGUyk7CiAjZGVmaW5lIHZtX3BhZ2VfbG9ja19xdWV1ZXMoKQogI2RlZmluZSB2bV9wYWdlX3Vu
bG9ja19xdWV1ZXMoKQogCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogRm9yIHRoZSBrZXJuZWwg
YW5kIGFueW9uZSB3aG8gbGlrZXMgcGVla2luZyBpbnRvIGtlcm5lbCBtZW1vcnkgICAgICAgICov
Ci0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoX0tFUk5FTCkKICNpbmNsdWRlIDx2
ZnMvdG1wZnMvdG1wZnNfcG9vbC5oPgotI2VuZGlmIC8qIGRlZmluZWQoX0tFUk5FTCkgKi8KLQot
LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tICovCi0KIC8qCiAgKiBJbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBh
IHRtcGZzIGRpcmVjdG9yeSBlbnRyeS4KICAqLwpkaWZmIC0tZ2l0IGEvc3lzL3Zmcy90bXBmcy90
bXBmc19wb29sLmMgYi9zeXMvdmZzL3RtcGZzL3RtcGZzX3Bvb2wuYwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNmE0YzEyZC4uMDAwMDAwMAotLS0gYS9zeXMvdmZzL3RtcGZzL3RtcGZz
X3Bvb2wuYworKysgL2Rldi9udWxsCkBAIC0xLDI4NSArMCwwIEBACi0vKgkkTmV0QlNEOiB0bXBm
c19wb29sLmMsdiAxLjE0IDIwMDgvMDQvMjggMjA6MjQ6MDIgbWFydGluIEV4cCAkCSovCi0KLS8q
Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYsIDIwMDcgVGhlIE5ldEJTRCBGb3VuZGF0aW9u
LCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJp
dmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCi0g
KiBieSBKdWxpbyBNLiBNZXJpbm8gVmlkYWwsIGRldmVsb3BlZCBhcyBwYXJ0IG9mIEdvb2dsZSdz
IFN1bW1lciBvZiBDb2RlCi0gKiAyMDA1IHByb2dyYW0uCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENP
TlRSSUJVVE9SUwotICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi0gKiBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFU
SU9OIE9SIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRQotICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLyoKLSAqIFBvb2wgYWxsb2NhdG9yIGFuZCBjb252ZW5pZW5jZSByb3V0aW5lcyBmb3IgdG1w
ZnMuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19LRVJORUxfUkNTSUQoMCwgIiRO
ZXRCU0Q6IHRtcGZzX3Bvb2wuYyx2IDEuMTQgMjAwOC8wNC8yOCAyMDoyNDowMiBtYXJ0aW4gRXhw
ICQiKTsKLQotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy9wb29sLmg+Ci0j
aW5jbHVkZSA8c3lzL2F0b21pYy5oPgotCi0jaW5jbHVkZSA8dXZtL3V2bS5oPgotCi0jaW5jbHVk
ZSA8ZnMvdG1wZnMvdG1wZnMuaD4KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXZvaWQgKgl0bXBm
c19wb29sX3BhZ2VfYWxsb2Moc3RydWN0IHBvb2wgKiwgaW50KTsKLXZvaWQJdG1wZnNfcG9vbF9w
YWdlX2ZyZWUoc3RydWN0IHBvb2wgKiwgdm9pZCAqKTsKLQotLyogWFhYOiBXaWxsIGdvIGF3YXkg
d2hlbiBvdXIgcG9vbCBhbGxvY2F0b3IgZG9lcyB3aGF0IGl0IGhhcyB0byBkbyBieQotICogaXRz
ZWxmLiAqLwotZXh0ZXJuIHZvaWQqCXBvb2xfcGFnZV9hbGxvY19ub2ludHIoc3RydWN0IHBvb2wg
KiwgaW50KTsKLWV4dGVybiB2b2lkCXBvb2xfcGFnZV9mcmVlX25vaW50cihzdHJ1Y3QgcG9vbCAq
LCB2b2lkICopOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIHRtcGZzIHByb3ZpZGVz
IGEgY3VzdG9tIHBvb2wgYWxsb2NhdG9yIG1vc3RseSB0byBleGFjdGx5IGtlZXAgdHJhY2sgb2YK
LSAqIGhvdyBtYW55IG1lbW9yeSBpcyB1c2VkIGZvciBlYWNoIGZpbGUgc3lzdGVtIGluc3RhbmNl
LiAgVGhlc2UgcG9vbHMgYXJlCi0gKiBuZXZlciBzaGFyZWQgYWNyb3NzIG11bHRpcGxlIG1vdW50
IHBvaW50cyBmb3IgdGhlIHJlYXNvbnMgZGVzY3JpYmVkCi0gKiBiZWxvdzoKLSAqCi0gKiAtIEl0
IGlzIHZlcnkgZWFzeSB0byBjb250cm9sIGhvdyBtYW55IG1lbW9yeSBpcyBhc3NvY2lhdGVkIHdp
dGggYQotICogICBnaXZlbiBmaWxlIHN5c3RlbS4gIHRtcGZzIHByb3ZpZGVzIGEgY3VzdG9tIHBv
b2wgYWxsb2NhdG9yIHRoYXQKLSAqICAgY29udHJvbHMgbWVtb3J5IHVzYWdlIGFjY29yZGluZyB0
byBwcmV2aW91c2x5IHNwZWNpZmllZCB1c2FnZQotICogICBsaW1pdHMsIGJ5IHNpbXBseSBpbmNy
ZWFzaW5nIG9yIGRlY3JlYXNpbmcgYSBjb3VudGVyIHdoZW4gcGFnZXMKLSAqICAgYXJlIGFsbG9j
YXRlZCBvciByZWxlYXNlZCwgcmVzcGVjdGl2ZWx5LgotICoKLSAqICAgSWYgdGhlIHBvb2xzIHdl
cmUgc2hhcmVkLCB3ZSBjb3VsZCBlYXNpbHkgZW5kIHVwIHdpdGggdW5hY2NvdW50ZWQKLSAqICAg
bWVtb3J5LCB0aHVzIHRha2luZyBpbmNvcnJlY3QgZGVjaXNpb25zIG9uIHRoZSBhbW91bnQgb2Yg
bWVtb3J5Ci0gKiAgIHVzZS4gIEFzIGFuIGV4YW1wbGUgdG8gcHJvdmUgdGhpcyBwb2ludCwgY29u
c2lkZXIgdHdvIG1vdW50ZWQKLSAqICAgaW5zdGFuY2VzIG9mIHRtcGZzLCBvbmUgbW91bnRlZCBv
biBBIGFuZCBhbm90aGVyIG9uZSBvbiBCLiBBc3N1bWUKLSAqICAgdGhhdCBlYWNoIG1lbW9yeSBw
YWdlIGNhbiBob2xkIHVwIHRvIGZvdXIgZGlyZWN0b3J5IGVudHJpZXMgYW5kCi0gKiAgIHRoYXQs
IGZvciBlYWNoIGVudHJ5IHlvdSBjcmVhdGUgb24gQSwgeW91IGNyZWF0ZSB0aHJlZSBvbiBCCi0g
KiAgIGFmdGVyd2FyZHMuICBBZnRlciBkb2luZyB0aGlzLCBlYWNoIG1lbW9yeSBwYWdlIHdpbGwg
YmUgaG9sZGluZyBhbgotICogICBlbnRyeSBmcm9tIEEgYW5kIHRocmVlIGZvciBCLiAgSWYgeW91
IHN1bSB1cCBhbGwgdGhlIHNwYWNlIHRha2VuIGJ5Ci0gKiAgIHRoZSB0b3RhbCBhbW91bnQgb2Yg
YWxsb2NhdGVkIGVudHJpZXMsIHJvdW5kZWQgdXAgdG8gYSBwYWdlCi0gKiAgIGJvdW5kYXJ5LCB0
aGF0IG51bWJlciB3aWxsIG1hdGNoIHRoZSBudW1iZXIgb2YgYWxsb2NhdGVkIHBhZ2VzLCBzbwot
ICogICBldmVyeXRoaW5nIGlzIGZpbmUuCi0gKgotICogICBOb3cgc3VwcG9zZSB3ZSB1bm1vdW50
IEIuICBHaXZlbiB0aGF0IHRoZSBmaWxlIHN5c3RlbSBoYXMgdG8KLSAqICAgZGlzYXBwZWFyLCB3
ZSBoYXZlIHRvIGRlbGV0ZSBhbGwgdGhlIGRpcmVjdG9yeSBlbnRyaWVzIGF0dGFjaGVkIHRvCi0g
KiAgIGl0LiAgQnV0IHRoZSBwcm9ibGVtIGlzIHRoYXQgZnJlZWluZyB0aG9zZSBlbnRyaWVzIHdp
bGwgbm90IHJlbGVhc2UKLSAqICAgYW55IG1lbW9yeSBwYWdlLiAgSW5zdGVhZCwgZWFjaCBwYWdl
IHdpbGwgYmUgZmlsbGVkIHVwIHRvIGEgMjUlLAotICogICBhbmQgdGhlIHJlc3QsIGEgNzUlLCB3
aWxsIGJlIGxvc3QuICBOb3QgbG9zdCBpbiBhIHN0cmljdCB0ZXJtLAotICogICBiZWNhdXNlIHRo
ZSBtZW1vcnkgY2FuIGJlIHJldXNlZCBieSBuZXcgZW50cmllcywgYnV0IGxvc3QgaW4gdGhlCi0g
KiAgIHNlbnNlIHRoYXQgaXQgaXMgbm90IGFjY291bnRlZCBieSBhbnkgZmlsZSBzeXN0ZW0uICBE
ZXNwaXRlIEEgd2lsbAotICogICB0aGluayBpdCBpcyB1c2luZyBhbiBhbW91bnQgJ1gnIG9mIG1l
bW9yeSwgaXQgd2lsbCBiZSByZWFsbHkgdXNpbmcKLSAqICAgZm91cnRoIHRpbWVzIHRoYXQgbnVt
YmVyLCB0aHVzIGNhdXNpbmcgbWlzdGFrZXMgd2hlbiBpdCBjb21lcyB0bwotICogICBkZWNpZGUg
aWYgdGhlcmUgaXMgbW9yZSBmcmVlIHNwYWNlIGZvciB0aGF0IHNwZWNpZmljIGluc3RhbmNlIG9m
Ci0gKiAgIHRtcGZzLgotICoKLSAqIC0gVGhlIG51bWJlciBvZiBwYWdlIGZhdWx0cyBhbmQgY2Fj
aGUgbWlzc2VzIGlzIHJlZHVjZWQgZ2l2ZW4gdGhhdCBhbGwKLSAqICAgZW50cmllcyBvZiBhIGdp
dmVuIGZpbGUgc3lzdGVtIGFyZSBzdG9yZWQgaW4gbGVzcyBwYWdlcy4gIE5vdGUgdGhhdAotICog
ICB0aGlzIGlzIHRydWUgYmVjYXVzZSBpdCBpcyBjb21tb24gdG8gYWxsb2NhdGUgYW5kL29yIGFj
Y2VzcyBtYW55Ci0gKiAgIGVudHJpZXMgYXQgb25jZSBvbiBhIHNwZWNpZmljIGZpbGUgc3lzdGVt
LgotICoKLSAqICAgRm9sbG93aW5nIHRoZSBleGFtcGxlIGdpdmVuIGFib3ZlLCBsaXN0aW5nIGEg
ZGlyZWN0b3J5IG9uIGZpbGUgc3lzdGVtCi0gKiAgIEEgY291bGQgcmVzdWx0LCBpbiB0aGUgd29y
c3QgY2FzZSBzY2VuYXJpbywgaW4gZm91cnRoIHRpbWVzIG1vcmUgcGFnZQotICogICBmYXVsdHMg
aWYgd2Ugc2hhcmVkIHRoZSBwb29scy4KLSAqLwotc3RydWN0IHBvb2xfYWxsb2NhdG9yIHRtcGZz
X3Bvb2xfYWxsb2NhdG9yID0gewotCS5wYV9hbGxvYyA9IHRtcGZzX3Bvb2xfcGFnZV9hbGxvYywK
LQkucGFfZnJlZSA9IHRtcGZzX3Bvb2xfcGFnZV9mcmVlLAotfTsKLQotLyogLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
ICovCi0KLS8qCi0gKiBJbml0aWFsaXplcyB0aGUgcG9vbCBwb2ludGVkIHRvIGJ5IHRwcCBhbmQg
YXNzb2NpYXRlcyBpdCB0byB0aGUgbW91bnQKLSAqIHBvaW50IHRtcC4gIFRoZSBzaXplIG9mIGl0
cyBlbGVtZW50cyBpcyBzZXQgdG8gc2l6ZS4gIEl0cyB3YWl0IGNoYW5uZWwKLSAqIGlzIGRlcml2
ZWQgZnJvbSB0aGUgc3RyaW5nIGdpdmVuIGluIHdoYXQgYW5kIHRoZSBtb3VudCBwb2ludCBnaXZl
biBpbgotICogJ3RtcCcsIHdoaWNoIHNob3VsZCByZXN1bHQgaW4gYSB1bmlxdWUgc3RyaW5nIGFt
b25nIGFsbCBleGlzdGluZyBwb29scy4KLSAqLwotdm9pZAotdG1wZnNfcG9vbF9pbml0KHN0cnVj
dCB0bXBmc19wb29sICp0cHAsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICp3aGF0LAotICAgIHN0
cnVjdCB0bXBmc19tb3VudCAqdG1wKQotewotCWludCBjbnQ7Ci0KLQljbnQgPSBzbnByaW50Zih0
cHAtPnRwX25hbWUsIHNpemVvZih0cHAtPnRwX25hbWUpLAotCSAgICAiJXNfdG1wZnNfJXAiLCB3
aGF0LCB0bXApOwotCUtBU1NFUlQoY250IDwgc2l6ZW9mKHRwcC0+dHBfbmFtZSkpOwotCi0JcG9v
bF9pbml0KCZ0cHAtPnRwX3Bvb2wsIHNpemUsIDAsIDAsIDAsIHRwcC0+dHBfbmFtZSwKLQkgICAg
JnRtcGZzX3Bvb2xfYWxsb2NhdG9yLCBJUExfTk9ORSk7Ci0JdHBwLT50cF9tb3VudCA9IHRtcDsK
LX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBEZXN0cm95cyB0aGUgcG9vbCBwb2lu
dGVkIHRvIGJ5ICd0cHAnLgotICovCi12b2lkCi10bXBmc19wb29sX2Rlc3Ryb3koc3RydWN0IHRt
cGZzX3Bvb2wgKnRwcCkKLXsKLQotCXBvb2xfZGVzdHJveSgoc3RydWN0IHBvb2wgKil0cHApOwot
fQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotdm9pZCAqCi10bXBmc19wb29sX3BhZ2VfYWxsb2Mo
c3RydWN0IHBvb2wgKnBwLCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IHRtcGZzX3Bvb2wgKnRwcDsK
LQlzdHJ1Y3QgdG1wZnNfbW91bnQgKnRtcDsKLQl1bnNpZ25lZCBpbnQgcGFnZXM7Ci0Jdm9pZCAq
cGFnZTsKLQotCXRwcCA9IChzdHJ1Y3QgdG1wZnNfcG9vbCAqKXBwOwotCXRtcCA9IHRwcC0+dHBf
bW91bnQ7Ci0KLQlwYWdlcyA9IGF0b21pY19pbmNfdWludF9udigmdG1wLT50bV9wYWdlc191c2Vk
KTsKLQlpZiAocGFnZXMgPj0gVE1QRlNfUEFHRVNfTUFYKHRtcCkpIHsKLQkJYXRvbWljX2RlY191
aW50KCZ0bXAtPnRtX3BhZ2VzX3VzZWQpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JLyoKLQkgKiB0
bXBmcyBuZXZlciBzcGVjaWZpZXMgUFJfV0FJVE9LIGFzIHdlIGVuZm9yY2UgbG9jYWwgbGltaXRz
Ci0JICogb24gbWVtb3J5IGFsbG9jYXRpb24uICBIb3dldmVyLCB3ZSBzaG91bGQgd2FpdCBmb3Ig
bWVtb3J5Ci0JICogdG8gYmVjb21lIGF2YWlsYWJsZSBpZiB1bmRlciBvdXIgbGltaXQuICBYWFgg
VGhlIHJlc3VsdCBvZgotCSAqIHRoZSBUTVBGU19QQUdFU19NQVgoKSBjaGVjayBpcyBzdGFsZS4K
LQkgKi8KLQlwYWdlID0gcG9vbF9wYWdlX2FsbG9jX25vaW50cihwcCwgZmxhZ3MgfCBQUl9XQUlU
T0spOwotCWlmIChwYWdlID09IE5VTEwpIHsKLQkJYXRvbWljX2RlY191aW50KCZ0bXAtPnRtX3Bh
Z2VzX3VzZWQpOwotCX0KLQotCXJldHVybiBwYWdlOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K
LQotdm9pZAotdG1wZnNfcG9vbF9wYWdlX2ZyZWUoc3RydWN0IHBvb2wgKnBwLCB2b2lkICp2KQot
ewotCXN0cnVjdCB0bXBmc19wb29sICp0cHA7Ci0Jc3RydWN0IHRtcGZzX21vdW50ICp0bXA7Ci0K
LQl0cHAgPSAoc3RydWN0IHRtcGZzX3Bvb2wgKilwcDsKLQl0bXAgPSB0cHAtPnRwX21vdW50Owot
Ci0JYXRvbWljX2RlY191aW50KCZ0bXAtPnRtX3BhZ2VzX3VzZWQpOwotCXBvb2xfcGFnZV9mcmVl
X25vaW50cihwcCwgdik7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogSW5pdGlh
bGl6ZSB0aGUgc3RyaW5nIHBvb2wgcG9pbnRlZCB0byBieSAndHNwJyBhbmQgYXR0YWNoIGl0IHRv
IHRoZQotICogJ3RtcCcgbW91bnQgcG9pbnQuCi0gKi8KLXZvaWQKLXRtcGZzX3N0cl9wb29sX2lu
aXQoc3RydWN0IHRtcGZzX3N0cl9wb29sICp0c3AsIHN0cnVjdCB0bXBmc19tb3VudCAqdG1wKQot
ewotCi0JdG1wZnNfcG9vbF9pbml0KCZ0c3AtPnRzcF9wb29sXzE2LCAgIDE2LCAgICJzdHIiLCB0
bXApOwotCXRtcGZzX3Bvb2xfaW5pdCgmdHNwLT50c3BfcG9vbF8zMiwgICAzMiwgICAic3RyIiwg
dG1wKTsKLQl0bXBmc19wb29sX2luaXQoJnRzcC0+dHNwX3Bvb2xfNjQsICAgNjQsICAgInN0ciIs
IHRtcCk7Ci0JdG1wZnNfcG9vbF9pbml0KCZ0c3AtPnRzcF9wb29sXzEyOCwgIDEyOCwgICJzdHIi
LCB0bXApOwotCXRtcGZzX3Bvb2xfaW5pdCgmdHNwLT50c3BfcG9vbF8yNTYsICAyNTYsICAic3Ry
IiwgdG1wKTsKLQl0bXBmc19wb29sX2luaXQoJnRzcC0+dHNwX3Bvb2xfNTEyLCAgNTEyLCAgInN0
ciIsIHRtcCk7Ci0JdG1wZnNfcG9vbF9pbml0KCZ0c3AtPnRzcF9wb29sXzEwMjQsIDEwMjQsICJz
dHIiLCB0bXApOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIERlc3Ryb3kgdGhl
IGdpdmVuIHN0cmluZyBwb29sLgotICovCi12b2lkCi10bXBmc19zdHJfcG9vbF9kZXN0cm95KHN0
cnVjdCB0bXBmc19zdHJfcG9vbCAqdHNwKQotewotCi0JdG1wZnNfcG9vbF9kZXN0cm95KCZ0c3At
PnRzcF9wb29sXzE2KTsKLQl0bXBmc19wb29sX2Rlc3Ryb3koJnRzcC0+dHNwX3Bvb2xfMzIpOwot
CXRtcGZzX3Bvb2xfZGVzdHJveSgmdHNwLT50c3BfcG9vbF82NCk7Ci0JdG1wZnNfcG9vbF9kZXN0
cm95KCZ0c3AtPnRzcF9wb29sXzEyOCk7Ci0JdG1wZnNfcG9vbF9kZXN0cm95KCZ0c3AtPnRzcF9w
b29sXzI1Nik7Ci0JdG1wZnNfcG9vbF9kZXN0cm95KCZ0c3AtPnRzcF9wb29sXzUxMik7Ci0JdG1w
ZnNfcG9vbF9kZXN0cm95KCZ0c3AtPnRzcF9wb29sXzEwMjQpOwotfQotCi0vKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gKi8KLQotLyoKLSAqIEFsbG9jYXRlIGEgbmV3IHN0cmluZyB3aXRoIGEgbWluaW11bSBsZW5n
dGggb2YgbGVuIGZyb20gdGhlICd0c3AnCi0gKiBzdHJpbmcgcG9vbC4gIFRoZSBwb29sIGNhbiBy
ZXR1cm4gYSBiaWdnZXIgc3RyaW5nLCBidXQgdGhlIGNhbGxlciBtdXN0Ci0gKiBub3QgbWFrZSBh
bnkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJlYWwgb2JqZWN0IHNpemUuCi0gKi8KLWNoYXIgKgot
dG1wZnNfc3RyX3Bvb2xfZ2V0KHN0cnVjdCB0bXBmc19zdHJfcG9vbCAqdHNwLCBzaXplX3QgbGVu
LCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IHRtcGZzX3Bvb2wgKnA7Ci0KLQlLQVNTRVJUKGxlbiA8
PSAxMDI0KTsKLQotCWlmICAgICAgKGxlbiA8PSAxNikgICBwID0gJnRzcC0+dHNwX3Bvb2xfMTY7
Ci0JZWxzZSBpZiAobGVuIDw9IDMyKSAgIHAgPSAmdHNwLT50c3BfcG9vbF8zMjsKLQllbHNlIGlm
IChsZW4gPD0gNjQpICAgcCA9ICZ0c3AtPnRzcF9wb29sXzY0OwotCWVsc2UgaWYgKGxlbiA8PSAx
MjgpICBwID0gJnRzcC0+dHNwX3Bvb2xfMTI4OwotCWVsc2UgaWYgKGxlbiA8PSAyNTYpICBwID0g
JnRzcC0+dHNwX3Bvb2xfMjU2OwotCWVsc2UgaWYgKGxlbiA8PSA1MTIpICBwID0gJnRzcC0+dHNw
X3Bvb2xfNTEyOwotCWVsc2UgaWYgKGxlbiA8PSAxMDI0KSBwID0gJnRzcC0+dHNwX3Bvb2xfMTAy
NDsKLQllbHNlIHsKLQkJS0FTU0VSVCgwKTsKLQkJcCA9IE5VTEw7IC8qIFNpbGVuY2UgY29tcGls
ZXIgd2FybmluZ3MgKi8KLQl9Ci0KLQlyZXR1cm4gKGNoYXIgKilUTVBGU19QT09MX0dFVChwLCBm
bGFncyk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogRGVzdHJveSB0aGUgc3Ry
IHN0cmluZywgd2hpY2ggd2FzIGFsbG9jYXRlZCBmcm9tIHRoZSAndHNwJyBzdHJpbmcgcG9vbAot
ICogd2l0aCBhIGxlbmd0aCBvZiAnbGVuJy4gIFRoZSBsZW5ndGggbXVzdCBtYXRjaCB0aGUgb25l
IGdpdmVuIGR1cmluZwotICogYWxsb2NhdGlvbi4KLSAqLwotdm9pZAotdG1wZnNfc3RyX3Bvb2xf
cHV0KHN0cnVjdCB0bXBmc19zdHJfcG9vbCAqdHNwLCBjaGFyICpzdHIsIHNpemVfdCBsZW4pCi17
Ci0Jc3RydWN0IHRtcGZzX3Bvb2wgKnA7Ci0KLQlLQVNTRVJUKGxlbiA8PSAxMDI0KTsKLQotCWlm
ICAgICAgKGxlbiA8PSAxNikgICBwID0gJnRzcC0+dHNwX3Bvb2xfMTY7Ci0JZWxzZSBpZiAobGVu
IDw9IDMyKSAgIHAgPSAmdHNwLT50c3BfcG9vbF8zMjsKLQllbHNlIGlmIChsZW4gPD0gNjQpICAg
cCA9ICZ0c3AtPnRzcF9wb29sXzY0OwotCWVsc2UgaWYgKGxlbiA8PSAxMjgpICBwID0gJnRzcC0+
dHNwX3Bvb2xfMTI4OwotCWVsc2UgaWYgKGxlbiA8PSAyNTYpICBwID0gJnRzcC0+dHNwX3Bvb2xf
MjU2OwotCWVsc2UgaWYgKGxlbiA8PSA1MTIpICBwID0gJnRzcC0+dHNwX3Bvb2xfNTEyOwotCWVs
c2UgaWYgKGxlbiA8PSAxMDI0KSBwID0gJnRzcC0+dHNwX3Bvb2xfMTAyNDsKLQllbHNlIHsKLQkJ
S0FTU0VSVCgwKTsKLQkJcCA9IE5VTEw7IC8qIFNpbGVuY2UgY29tcGlsZXIgd2FybmluZ3MgKi8K
LQl9Ci0KLQlUTVBGU19QT09MX1BVVChwLCBzdHIpOwotfQpkaWZmIC0tZ2l0IGEvc3lzL3Zmcy90
bXBmcy90bXBmc19wb29sLmggYi9zeXMvdmZzL3RtcGZzL3RtcGZzX3Bvb2wuaAppbmRleCAwMTdj
N2Q4Li5mNDQ0NDUyCi0tLSBhL3N5cy92ZnMvdG1wZnMvdG1wZnNfcG9vbC5oCisrKyBiL3N5cy92
ZnMvdG1wZnMvdG1wZnNfcG9vbC5oCkBAIC00Myw2ICs0Myw3IEBAIHN0cnVjdCBwb29sCiB2b2lk
ICpwb29sX2dldChzdHJ1Y3QgcG9vbCogcHAsIGludCBmbGFncyk7CiB2b2lkICBwb29sX3B1dChz
dHJ1Y3QgcG9vbCogcHAsIHZvaWQgKnApOwogCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKgpA
QCAtMTA3LDYgKzEwOCw3IEBAIHZvaWQJdG1wZnNfcG9vbF9kZXN0cm95KHN0cnVjdCB0bXBmc19w
b29sICp0cHApOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorCiAvKgogICogRnVuY3Rpb25zIHRv
IG1hbmlwdWxhdGUgYSB0bXBmc19zdHJfcG9vbC4KICAqLwpkaWZmIC0tZ2l0IGEvc3lzL3Zmcy90
bXBmcy90bXBmc19zdWJyLmMgYi9zeXMvdmZzL3RtcGZzL3RtcGZzX3N1YnIuYwppbmRleCBiYTA2
MzNlLi4zZTliOGE0Ci0tLSBhL3N5cy92ZnMvdG1wZnMvdG1wZnNfc3Vici5jCisrKyBiL3N5cy92
ZnMvdG1wZnMvdG1wZnNfc3Vici5jCkBAIC04NjEsMTQgKzg2MSwxOCBAQCB0bXBmc19yZWdfcmVz
aXplKHN0cnVjdCB2bm9kZSAqdnAsIG9mZl90IG5ld3NpemUpCiAJc3RydWN0IHRtcGZzX21vdW50
ICp0bXA7CiAJc3RydWN0IHRtcGZzX25vZGUgKm5vZGU7CiAJb2ZmX3Qgb2xkc2l6ZTsKKwlpbnQg
dHJ1bmNhdGluZzsKKwlvZmZfdCBhbGlnbmVkX3NpemU7CiAKLQlEUCgidG1wZnNfcmVnX3Jlc2l6
ZSB2cCAlcCBuZXdzaXplICVkXG4iLCB2cCwgKGludCluZXdzaXplKTsKIAlLS0FTU0VSVCh2cC0+
dl90eXBlID09IFZSRUcpOwogCUtLQVNTRVJUKG5ld3NpemUgPj0gMCk7CiAKIAlub2RlID0gVlBf
VE9fVE1QRlNfTk9ERSh2cCk7CiAJdG1wID0gVkZTX1RPX1RNUEZTKHZwLT52X21vdW50KTsKIAor
CURQKCJ0bXBmc19yZWdfcmVzaXplIHZwICVwIG9sZHNpemUgJWQgbmV3c2l6ZSAlZFxuIiwKKwkJ
dnAsIChpbnQpIG5vZGUtPnRuX3NpemUsIChpbnQpIG5ld3NpemUpOworCiAJLyogQ29udmVydCB0
aGUgb2xkIGFuZCBuZXcgc2l6ZXMgdG8gdGhlIG51bWJlciBvZiBwYWdlcyBuZWVkZWQgdG8KIAkg
KiBzdG9yZSB0aGVtLiAgSXQgbWF5IGhhcHBlbiB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvIGRvIGFu
eXRoaW5nCiAJICogYmVjYXVzZSB0aGUgbGFzdCBhbGxvY2F0ZWQgcGFnZSBjYW4gYWNjb21tb2Rh
dGUgdGhlIGNoYW5nZSBvbgpAQCAtODkwLDggKzg5NCw1MyBAQCB0bXBmc19yZWdfcmVzaXplKHN0
cnVjdCB2bm9kZSAqdnAsIG9mZl90IG5ld3NpemUpCiAJdG1wLT50bV9wYWdlc191c2VkICs9IChu
ZXdwYWdlcyAtIG9sZHBhZ2VzKTsKIAlUTVBGU19VTkxPQ0sodG1wKTsKIAorCS8qCisJICogWFhY
IGJyZWFrIGF0b21pY3ksIHdlIGNhbiBkZWFkbG9jayB0aGUgYmFja2VuZAorCSAqIGlmIHdlIGRv
IG5vdCByZWxlYXNlIHRoZSBsb2NrLiAgUHJvYmFibHkgbm90IGEKKwkgKiBiaWcgZGVhbCBoZXJl
LgorCSAqLworCisKKy8vCXZub2RlX3BhZ2VyX3NldHNpemUodnAsIG5ld3NpemUpOworCisJaWYg
KG5ld3NpemUgPCBub2RlLT50bl9zaXplKSB7CisJCXZ0cnVuY2J1Zih2cCwgbmV3c2l6ZSwgUEFH
RV9TSVpFKTsKKwkJdHJ1bmNhdGluZyA9IDE7CisJfSBlbHNlIHsKKwkJdm5vZGVfcGFnZXJfc2V0
c2l6ZSh2cCwgbmV3c2l6ZSk7CisJCXRydW5jYXRpbmcgPSAwOworCX0KIAlub2RlLT50bl9zaXpl
ID0gbmV3c2l6ZTsKLQl2bm9kZV9wYWdlcl9zZXRzaXplKHZwLCBuZXdzaXplKTsKKy8vI2lmIDAK
Ky8vCW1vZGZsYWdzIHw9IEhBTU1FUl9JTk9ERV9ERElSVFk7CisKKwkvKgorCSAqIElmIHRydW5j
YXRpbmcgd2UgaGF2ZSB0byBjbGVhbiBvdXQgYSBwb3J0aW9uIG9mCisJICogdGhlIGxhc3QgYmxv
Y2sgb24tZGlzay4gIFdlIGRvIHRoaXMgaW4gdGhlCisJICogZnJvbnQtZW5kIGJ1ZmZlciBjYWNo
ZS4KKwkgKi8KKyNpZiAwCisJYWxpZ25lZF9zaXplID0gcm91bmRfcGFnZShuZXdzaXplKTsKKwlp
ZiAodHJ1bmNhdGluZyAmJiBuZXdzaXplIDwgYWxpZ25lZF9zaXplKSB7CisJCXN0cnVjdCBidWYg
KmJwOworCQlpbnQgb2Zmc2V0OworCisJCWFsaWduZWRfc2l6ZSAtPSBQQUdFX1NJWkU7CisKKwkJ
b2Zmc2V0ID0gKGludCkgbmV3c2l6ZSAmIFBBR0VfTUFTSzsKKwkJZXJyb3IgPSBicmVhZCh2cCwg
YWxpZ25lZF9zaXplLCBQQUdFX1NJWkUsICZicCk7CisJCS8vaGFtbWVyX2lwX2Zyb250ZW5kX3Ry
dW5jKGlwLCBhbGlnbmVkX3NpemUpOworCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJYnplcm8oYnAt
PmJfZGF0YSArIG9mZnNldCwgUEFHRV9TSVpFIC0gb2Zmc2V0KTsKKwkJCS8qIG11c3QgZGUtY2Fj
aGUgZGlyZWN0LWlvIG9mZnNldCAqLworCQkJYnAtPmJfYmlvMi5iaW9fb2Zmc2V0ID0gTk9PRkZT
RVQ7CisJCQliZHdyaXRlKGJwKTsKKwkJfSBlbHNlIHsKKwkJCWtwcmludGYoInRtcGZzX3JlZ19y
ZXNpemUgRVJST1IgJWRcbiIsIGVycm9yKTsKKwkJCWJyZWxzZShicCk7CisJCX0KKwl9CisjZW5k
aWYKIAlpZiAobmV3c2l6ZSA8IG9sZHNpemUpIHsKIAkJc2l6ZV90IHplcm9sZW4gPSByb3VuZF9w
YWdlKG5ld3NpemUpIC0gbmV3c2l6ZTsKIAkJdm1fb2JqZWN0X3QgdW9iaiA9IG5vZGUtPnRuX3Nw
ZWMudG5fcmVnLnRuX2FvYmo7CkBAIC04OTksNiArOTQ4LDcgQEAgdG1wZnNfcmVnX3Jlc2l6ZShz
dHJ1Y3Qgdm5vZGUgKnZwLCBvZmZfdCBuZXdzaXplKQogCiAJCS8qICBmcmVlICJiYWNraW5nIHN0
b3JlIiAqLwogCQkvKiBYWFggKi8KKwogCQljcml0X2VudGVyKCk7CiAJCWlmIChuZXdwYWdlcyA8
IG9sZHBhZ2VzKSB7CiAJCQlzd2FwX3BhZ2VyX2ZyZWVzcGFjZSh1b2JqLApAQCAtOTA2LDE2ICs5
NTYsMTggQEAgdG1wZnNfcmVnX3Jlc2l6ZShzdHJ1Y3Qgdm5vZGUgKnZwLCBvZmZfdCBuZXdzaXpl
KQogCQkJdm1fb2JqZWN0X3BhZ2VfcmVtb3ZlKHVvYmosCiAJCQkJT0ZGX1RPX0lEWChuZXdzaXpl
ICsgUEFHRV9NQVNLKSwgMCwgRkFMU0UpOwogCQl9Ci0KKyNpZiAwCiAJCS8qIHplcm8gb3V0IHRo
ZSB0cnVuY2F0ZWQgcGFydCBvZiB0aGUgbGFzdCBwYWdlLiAqLwotCQlpZiAoemVyb2xlbiA+IDAp
IHsKKwkJaWYgKHplcm9sZW4gPj0gMCkgewogCQkJbSA9IHZtX3BhZ2VfZ3JhYih1b2JqLCBPRkZf
VE9fSURYKG5ld3NpemUpLAogCQkJCQlWTV9BTExPQ19OT1JNQUwgfCBWTV9BTExPQ19SRVRSWSk7
CiAJCQlwbWFwX3plcm9fcGFnZV9hcmVhKCh2bV9wYWRkcl90KSh2bV9vZmZzZXRfdCltLAogCQkJ
ICAgIFBBR0VfU0laRSAtIHplcm9sZW4sIHplcm9sZW4pOwogCQkJdm1fcGFnZV93YWtldXAobSk7
CiAJCX0KKyNlbmRpZgogCQljcml0X2V4aXQoKTsKKwogCX0KIAllcnJvciA9IDA7CiBvdXQ6CkBA
IC0xMzQ4LDE0ICsxNDAwLDE0IEBAIHRtcGZzX3Bvb2xfZGVzdHJveShzdHJ1Y3QgdG1wZnNfcG9v
bCAqdHBwKQogfQogCiB2b2lkICoKLXBvb2xfZ2V0KHN0cnVjdCBwb29sKiBwcCwgaW50IGZsYWdz
KQorcG9vbF9nZXQoc3RydWN0IHBvb2wgKnBwLCBpbnQgZmxhZ3MpCiB7CiAJcHAtPnBfbmFsbG9j
cysrOwogCXJldHVybiBrbWFsbG9jKHBwLT5wX3NpemUsIE1fVE1QRlMsIE1fV0FJVE9LIHwgTV9a
RVJPKTsKIH0KIAogdm9pZAotcG9vbF9wdXQoc3RydWN0IHBvb2wqIHBwLCB2b2lkICpwKQorcG9v
bF9wdXQoc3RydWN0IHBvb2wgKnBwLCB2b2lkICpwKQogewogCXBwLT5wX25mcmVlcysrOwogCWtm
cmVlKHAsIE1fVE1QRlMpOwpkaWZmIC0tZ2l0IGEvc3lzL3Zmcy90bXBmcy90bXBmc192bm9wcy5j
IGIvc3lzL3Zmcy90bXBmcy90bXBmc192bm9wcy5jCmluZGV4IDVlNmNhZmQuLjRiMWRjNDUKLS0t
IGEvc3lzL3Zmcy90bXBmcy90bXBmc192bm9wcy5jCisrKyBiL3N5cy92ZnMvdG1wZnMvdG1wZnNf
dm5vcHMuYwpAQCAtMTc5LDEwICsxNzksNiBAQCBzdHJ1Y3Qgdm9wX29wcyB0bXBmc19maWZvX3Zv
cHMgPSB7CiAJLyogWFhYIC52b3Bfa3FmaWx0ZXIgPQkJCXRtcGZzX2ZpZm9fa3FmaWx0ZXIgKi8K
IH07CiAKLWludCB0bXBmc19zcGVjX3dyaXRlKHN0cnVjdCB2b3Bfd3JpdGVfYXJncyAqYXApOwot
aW50IHRtcGZzX3NwZWNfcmVhZChzdHJ1Y3Qgdm9wX3JlYWRfYXJncyAqYXApOwotaW50IHRtcGZz
X3NwZWNfY2xvc2Uoc3RydWN0IHZvcF9jbG9zZV9hcmdzICphcCk7Ci0KIGludAogdG1wZnNfbnJl
c29sdmUoc3RydWN0IHZvcF9ucmVzb2x2ZV9hcmdzICphcCkKIHsKQEAgLTEyNTMsMTMgKzEyNDks
MTIgQEAgdG1wZnNfc3RyYXRlZ3lfcmVhZChzdHJ1Y3Qgdm9wX3N0cmF0ZWd5X2FyZ3MgKmFwKQog
CX0KIAogCXNmID0gc2ZfYnVmX2FsbG9jKG0sIFNGQl9DUFVQUklWQVRFKTsKLQl2YSA9IChjYWRk
cl90KXNmX2J1Zl9rdmEoc2YpOworCXZhID0gKGNhZGRyX3QpIHNmX2J1Zl9rdmEoc2YpOwogCWJj
b3B5KHZhLCBicC0+Yl9kYXRhLCBQQUdFX1NJWkUpOwogCXNmX2J1Zl9mcmVlKHNmKTsKIG91dDoK
IAl2bV9wYWdlX3Vud2lyZShtLCAwKTsKIAl2bV9wYWdlX2FjdGl2YXRlKG0pOwotCiAJdm1fcGFn
ZV93YWtldXAobSk7CiAJdm1fb2JqZWN0X3BpcF9zdWJ0cmFjdCh0b2JqLCAxKTsKIApAQCAtMTI5
MSw3ICsxMjg2LDcgQEAgdG1wZnNfc3RyYXRlZ3lfd3JpdGUoc3RydWN0IHZvcF9zdHJhdGVneV9h
cmdzICphcCkKIAlzdHJ1Y3QgdG1wZnNfbm9kZSAqbm9kZTsKIAogCURQKCJ0bXBmc19zdHJhdGVn
eV93cml0ZSBidWYgJXAgYm9mZiAleCByZXNpZCAleCBiY250ICV4ICV4XG4iLAotCQkJYnAsIGJp
by0+YmlvX29mZnNldCwgYnAtPmJfcmVzaWQsIGJwLT5iX2Jjb3VudCwgYnAtPmJfYnVmc2l6ZSk7
CisJCWJwLCBiaW8tPmJpb19vZmZzZXQsIGJwLT5iX3Jlc2lkLCBicC0+Yl9iY291bnQsIGJwLT5i
X2J1ZnNpemUpOwogCiAJbm9kZSA9IFZQX1RPX1RNUEZTX05PREUoYXAtPmFfdnApOwogCWFkZHIg
PSBiaW8tPmJpb19vZmZzZXQ7CkBAIC0xMzI0LDcgKzEzMTksNyBAQCB0bXBmc19zdHJhdGVneV93
cml0ZShzdHJ1Y3Qgdm9wX3N0cmF0ZWd5X2FyZ3MgKmFwKQogCiBvdXQ6CiAJaWYgKCFlcnJvcikg
ewotCQl2bV9wYWdlX3NldF92YWxpZGNsZWFuKHRwZywgMCwgUEFHRV9TSVpFKTsKKwkJdm1fcGFn
ZV9zZXRfdmFsaWRjbGVhbih0cGcsIDAsIFBBR0VfU0laRSk7LyogWFhYICovCiAJCXZtX3BhZ2Vf
emVyb19pbnZhbGlkKHRwZywgVFJVRSk7CiAJCXZtX3BhZ2VfZGlydHkodHBnKTsKIAl9CkBAIC0y
MDYwLDMgKzIwNTUsNSBAQCB0bXBmc19maWZvX3dyaXRlKHN0cnVjdCB2b3Bfd3JpdGVfYXJncyAq
YXApCiAJaW50IGVycm9yID0gVk9DQUxMKCZmaWZvX3Zub2RlX3ZvcHMsICZhcC0+YV9oZWFkKTsK
IAlyZXR1cm4gZXJyb3I7CiB9CisKKwo=
--0016368e1b105cfbfc04785264f4
Content-Type: application/octet-stream; name="tmpfs-objcache.diff"
Content-Disposition: attachment; filename="tmpfs-objcache.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_g20855hq1
ZGlmZiAtLWdpdCBhL3N5cy92ZnMvdG1wZnMvdG1wZnMuaCBiL3N5cy92ZnMvdG1wZnMvdG1wZnMu
aAppbmRleCAyOTRjMTg3Li45YWRiMjkzCi0tLSBhL3N5cy92ZnMvdG1wZnMvdG1wZnMuaAorKysg
Yi9zeXMvdmZzL3RtcGZzL3RtcGZzLmgKQEAgLTcwLDE2ICs3MCwxNiBAQCBNQUxMT0NfREVDTEFS
RShNX1RNUEZTKTsKICNkZWZpbmUga211dGV4X3QJCXN0cnVjdCBsb2NrCiAKICNkZWZpbmUgbXV0
ZXhfaW5pdChtdHgsIGEsIGIpCWxvY2tpbml0KG10eCwgIm11dGV4IiwgMCwgMCkKLSNkZWZpbmUg
bXV0ZXhfZGVzdHJveShtdHgpCQlsb2NrdW5pbml0KG10eCkKLSNkZWZpbmUgbXV0ZXhfZW50ZXIo
bXR4KQkJbG9ja21ncihtdHgsIExLX0VYQ0xVU0lWRSkKLSNkZWZpbmUgbXV0ZXhfZXhpdChtdHgp
CQkJbG9ja21ncihtdHgsIExLX1JFTEVBU0UpCisjZGVmaW5lIG11dGV4X2Rlc3Ryb3kobXR4KQls
b2NrdW5pbml0KG10eCkKKyNkZWZpbmUgbXV0ZXhfZW50ZXIobXR4KQlsb2NrbWdyKG10eCwgTEtf
RVhDTFVTSVZFKQorI2RlZmluZSBtdXRleF9leGl0KG10eCkJCWxvY2ttZ3IobXR4LCBMS19SRUxF
QVNFKQogCi0jZGVmaW5lIE1OVF9HRVRBUkdTIDAKLSNkZWZpbmUgSU5UX01BWAkJMHhmZmZmZmZm
ZgotI2RlZmluZSBNQVhOQU1MRU4JTU5BTUVMRU4KLSNkZWZpbmUgSU1OVF9NUFNBRkUJMAorI2Rl
ZmluZSBNTlRfR0VUQVJHUwkJMAorI2RlZmluZSBJTlRfTUFYCQkJMHhmZmZmZmZmZgorI2RlZmlu
ZSBNQVhOQU1MRU4JCU1OQU1FTEVOCisjZGVmaW5lIElNTlRfTVBTQUZFCQkwCiAKLSNkZWZpbmUg
dl9pbnRlcmxvY2sJdl9sb2NrCisjZGVmaW5lIHZfaW50ZXJsb2NrCQl2X2xvY2sKIAogI2RlZmlu
ZSBVUERBVEVfQ0xPU0UJCTAKIApAQCAtOTIsMTcgKzkyLDcgQEAgTUFMTE9DX0RFQ0xBUkUoTV9U
TVBGUyk7CiAjZGVmaW5lIHZtX3BhZ2VfbG9ja19xdWV1ZXMoKQogI2RlZmluZSB2bV9wYWdlX3Vu
bG9ja19xdWV1ZXMoKQogCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogRm9yIHRoZSBrZXJuZWwg
YW5kIGFueW9uZSB3aG8gbGlrZXMgcGVla2luZyBpbnRvIGtlcm5lbCBtZW1vcnkgICAgICAgICov
Ci0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoX0tFUk5FTCkKICNpbmNsdWRlIDx2
ZnMvdG1wZnMvdG1wZnNfcG9vbC5oPgotI2VuZGlmIC8qIGRlZmluZWQoX0tFUk5FTCkgKi8KLQot
LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tICovCi0KIC8qCiAgKiBJbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBh
IHRtcGZzIGRpcmVjdG9yeSBlbnRyeS4KICAqLwpkaWZmIC0tZ2l0IGEvc3lzL3Zmcy90bXBmcy90
bXBmc19wb29sLmMgYi9zeXMvdmZzL3RtcGZzL3RtcGZzX3Bvb2wuYwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNmE0YzEyZC4uMDAwMDAwMAotLS0gYS9zeXMvdmZzL3RtcGZzL3RtcGZz
X3Bvb2wuYworKysgL2Rldi9udWxsCkBAIC0xLDI4NSArMCwwIEBACi0vKgkkTmV0QlNEOiB0bXBm
c19wb29sLmMsdiAxLjE0IDIwMDgvMDQvMjggMjA6MjQ6MDIgbWFydGluIEV4cCAkCSovCi0KLS8q
Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYsIDIwMDcgVGhlIE5ldEJTRCBGb3VuZGF0aW9u
LCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJp
dmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCi0g
KiBieSBKdWxpbyBNLiBNZXJpbm8gVmlkYWwsIGRldmVsb3BlZCBhcyBwYXJ0IG9mIEdvb2dsZSdz
IFN1bW1lciBvZiBDb2RlCi0gKiAyMDA1IHByb2dyYW0uCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENP
TlRSSUJVVE9SUwotICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi0gKiBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFU
SU9OIE9SIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRQotICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLyoKLSAqIFBvb2wgYWxsb2NhdG9yIGFuZCBjb252ZW5pZW5jZSByb3V0aW5lcyBmb3IgdG1w
ZnMuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19LRVJORUxfUkNTSUQoMCwgIiRO
ZXRCU0Q6IHRtcGZzX3Bvb2wuYyx2IDEuMTQgMjAwOC8wNC8yOCAyMDoyNDowMiBtYXJ0aW4gRXhw
ICQiKTsKLQotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy9wb29sLmg+Ci0j
aW5jbHVkZSA8c3lzL2F0b21pYy5oPgotCi0jaW5jbHVkZSA8dXZtL3V2bS5oPgotCi0jaW5jbHVk
ZSA8ZnMvdG1wZnMvdG1wZnMuaD4KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXZvaWQgKgl0bXBm
c19wb29sX3BhZ2VfYWxsb2Moc3RydWN0IHBvb2wgKiwgaW50KTsKLXZvaWQJdG1wZnNfcG9vbF9w
YWdlX2ZyZWUoc3RydWN0IHBvb2wgKiwgdm9pZCAqKTsKLQotLyogWFhYOiBXaWxsIGdvIGF3YXkg
d2hlbiBvdXIgcG9vbCBhbGxvY2F0b3IgZG9lcyB3aGF0IGl0IGhhcyB0byBkbyBieQotICogaXRz
ZWxmLiAqLwotZXh0ZXJuIHZvaWQqCXBvb2xfcGFnZV9hbGxvY19ub2ludHIoc3RydWN0IHBvb2wg
KiwgaW50KTsKLWV4dGVybiB2b2lkCXBvb2xfcGFnZV9mcmVlX25vaW50cihzdHJ1Y3QgcG9vbCAq
LCB2b2lkICopOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIHRtcGZzIHByb3ZpZGVz
IGEgY3VzdG9tIHBvb2wgYWxsb2NhdG9yIG1vc3RseSB0byBleGFjdGx5IGtlZXAgdHJhY2sgb2YK
LSAqIGhvdyBtYW55IG1lbW9yeSBpcyB1c2VkIGZvciBlYWNoIGZpbGUgc3lzdGVtIGluc3RhbmNl
LiAgVGhlc2UgcG9vbHMgYXJlCi0gKiBuZXZlciBzaGFyZWQgYWNyb3NzIG11bHRpcGxlIG1vdW50
IHBvaW50cyBmb3IgdGhlIHJlYXNvbnMgZGVzY3JpYmVkCi0gKiBiZWxvdzoKLSAqCi0gKiAtIEl0
IGlzIHZlcnkgZWFzeSB0byBjb250cm9sIGhvdyBtYW55IG1lbW9yeSBpcyBhc3NvY2lhdGVkIHdp
dGggYQotICogICBnaXZlbiBmaWxlIHN5c3RlbS4gIHRtcGZzIHByb3ZpZGVzIGEgY3VzdG9tIHBv
b2wgYWxsb2NhdG9yIHRoYXQKLSAqICAgY29udHJvbHMgbWVtb3J5IHVzYWdlIGFjY29yZGluZyB0
byBwcmV2aW91c2x5IHNwZWNpZmllZCB1c2FnZQotICogICBsaW1pdHMsIGJ5IHNpbXBseSBpbmNy
ZWFzaW5nIG9yIGRlY3JlYXNpbmcgYSBjb3VudGVyIHdoZW4gcGFnZXMKLSAqICAgYXJlIGFsbG9j
YXRlZCBvciByZWxlYXNlZCwgcmVzcGVjdGl2ZWx5LgotICoKLSAqICAgSWYgdGhlIHBvb2xzIHdl
cmUgc2hhcmVkLCB3ZSBjb3VsZCBlYXNpbHkgZW5kIHVwIHdpdGggdW5hY2NvdW50ZWQKLSAqICAg
bWVtb3J5LCB0aHVzIHRha2luZyBpbmNvcnJlY3QgZGVjaXNpb25zIG9uIHRoZSBhbW91bnQgb2Yg
bWVtb3J5Ci0gKiAgIHVzZS4gIEFzIGFuIGV4YW1wbGUgdG8gcHJvdmUgdGhpcyBwb2ludCwgY29u
c2lkZXIgdHdvIG1vdW50ZWQKLSAqICAgaW5zdGFuY2VzIG9mIHRtcGZzLCBvbmUgbW91bnRlZCBv
biBBIGFuZCBhbm90aGVyIG9uZSBvbiBCLiBBc3N1bWUKLSAqICAgdGhhdCBlYWNoIG1lbW9yeSBw
YWdlIGNhbiBob2xkIHVwIHRvIGZvdXIgZGlyZWN0b3J5IGVudHJpZXMgYW5kCi0gKiAgIHRoYXQs
IGZvciBlYWNoIGVudHJ5IHlvdSBjcmVhdGUgb24gQSwgeW91IGNyZWF0ZSB0aHJlZSBvbiBCCi0g
KiAgIGFmdGVyd2FyZHMuICBBZnRlciBkb2luZyB0aGlzLCBlYWNoIG1lbW9yeSBwYWdlIHdpbGwg
YmUgaG9sZGluZyBhbgotICogICBlbnRyeSBmcm9tIEEgYW5kIHRocmVlIGZvciBCLiAgSWYgeW91
IHN1bSB1cCBhbGwgdGhlIHNwYWNlIHRha2VuIGJ5Ci0gKiAgIHRoZSB0b3RhbCBhbW91bnQgb2Yg
YWxsb2NhdGVkIGVudHJpZXMsIHJvdW5kZWQgdXAgdG8gYSBwYWdlCi0gKiAgIGJvdW5kYXJ5LCB0
aGF0IG51bWJlciB3aWxsIG1hdGNoIHRoZSBudW1iZXIgb2YgYWxsb2NhdGVkIHBhZ2VzLCBzbwot
ICogICBldmVyeXRoaW5nIGlzIGZpbmUuCi0gKgotICogICBOb3cgc3VwcG9zZSB3ZSB1bm1vdW50
IEIuICBHaXZlbiB0aGF0IHRoZSBmaWxlIHN5c3RlbSBoYXMgdG8KLSAqICAgZGlzYXBwZWFyLCB3
ZSBoYXZlIHRvIGRlbGV0ZSBhbGwgdGhlIGRpcmVjdG9yeSBlbnRyaWVzIGF0dGFjaGVkIHRvCi0g
KiAgIGl0LiAgQnV0IHRoZSBwcm9ibGVtIGlzIHRoYXQgZnJlZWluZyB0aG9zZSBlbnRyaWVzIHdp
bGwgbm90IHJlbGVhc2UKLSAqICAgYW55IG1lbW9yeSBwYWdlLiAgSW5zdGVhZCwgZWFjaCBwYWdl
IHdpbGwgYmUgZmlsbGVkIHVwIHRvIGEgMjUlLAotICogICBhbmQgdGhlIHJlc3QsIGEgNzUlLCB3
aWxsIGJlIGxvc3QuICBOb3QgbG9zdCBpbiBhIHN0cmljdCB0ZXJtLAotICogICBiZWNhdXNlIHRo
ZSBtZW1vcnkgY2FuIGJlIHJldXNlZCBieSBuZXcgZW50cmllcywgYnV0IGxvc3QgaW4gdGhlCi0g
KiAgIHNlbnNlIHRoYXQgaXQgaXMgbm90IGFjY291bnRlZCBieSBhbnkgZmlsZSBzeXN0ZW0uICBE
ZXNwaXRlIEEgd2lsbAotICogICB0aGluayBpdCBpcyB1c2luZyBhbiBhbW91bnQgJ1gnIG9mIG1l
bW9yeSwgaXQgd2lsbCBiZSByZWFsbHkgdXNpbmcKLSAqICAgZm91cnRoIHRpbWVzIHRoYXQgbnVt
YmVyLCB0aHVzIGNhdXNpbmcgbWlzdGFrZXMgd2hlbiBpdCBjb21lcyB0bwotICogICBkZWNpZGUg
aWYgdGhlcmUgaXMgbW9yZSBmcmVlIHNwYWNlIGZvciB0aGF0IHNwZWNpZmljIGluc3RhbmNlIG9m
Ci0gKiAgIHRtcGZzLgotICoKLSAqIC0gVGhlIG51bWJlciBvZiBwYWdlIGZhdWx0cyBhbmQgY2Fj
aGUgbWlzc2VzIGlzIHJlZHVjZWQgZ2l2ZW4gdGhhdCBhbGwKLSAqICAgZW50cmllcyBvZiBhIGdp
dmVuIGZpbGUgc3lzdGVtIGFyZSBzdG9yZWQgaW4gbGVzcyBwYWdlcy4gIE5vdGUgdGhhdAotICog
ICB0aGlzIGlzIHRydWUgYmVjYXVzZSBpdCBpcyBjb21tb24gdG8gYWxsb2NhdGUgYW5kL29yIGFj
Y2VzcyBtYW55Ci0gKiAgIGVudHJpZXMgYXQgb25jZSBvbiBhIHNwZWNpZmljIGZpbGUgc3lzdGVt
LgotICoKLSAqICAgRm9sbG93aW5nIHRoZSBleGFtcGxlIGdpdmVuIGFib3ZlLCBsaXN0aW5nIGEg
ZGlyZWN0b3J5IG9uIGZpbGUgc3lzdGVtCi0gKiAgIEEgY291bGQgcmVzdWx0LCBpbiB0aGUgd29y
c3QgY2FzZSBzY2VuYXJpbywgaW4gZm91cnRoIHRpbWVzIG1vcmUgcGFnZQotICogICBmYXVsdHMg
aWYgd2Ugc2hhcmVkIHRoZSBwb29scy4KLSAqLwotc3RydWN0IHBvb2xfYWxsb2NhdG9yIHRtcGZz
X3Bvb2xfYWxsb2NhdG9yID0gewotCS5wYV9hbGxvYyA9IHRtcGZzX3Bvb2xfcGFnZV9hbGxvYywK
LQkucGFfZnJlZSA9IHRtcGZzX3Bvb2xfcGFnZV9mcmVlLAotfTsKLQotLyogLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
ICovCi0KLS8qCi0gKiBJbml0aWFsaXplcyB0aGUgcG9vbCBwb2ludGVkIHRvIGJ5IHRwcCBhbmQg
YXNzb2NpYXRlcyBpdCB0byB0aGUgbW91bnQKLSAqIHBvaW50IHRtcC4gIFRoZSBzaXplIG9mIGl0
cyBlbGVtZW50cyBpcyBzZXQgdG8gc2l6ZS4gIEl0cyB3YWl0IGNoYW5uZWwKLSAqIGlzIGRlcml2
ZWQgZnJvbSB0aGUgc3RyaW5nIGdpdmVuIGluIHdoYXQgYW5kIHRoZSBtb3VudCBwb2ludCBnaXZl
biBpbgotICogJ3RtcCcsIHdoaWNoIHNob3VsZCByZXN1bHQgaW4gYSB1bmlxdWUgc3RyaW5nIGFt
b25nIGFsbCBleGlzdGluZyBwb29scy4KLSAqLwotdm9pZAotdG1wZnNfcG9vbF9pbml0KHN0cnVj
dCB0bXBmc19wb29sICp0cHAsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICp3aGF0LAotICAgIHN0
cnVjdCB0bXBmc19tb3VudCAqdG1wKQotewotCWludCBjbnQ7Ci0KLQljbnQgPSBzbnByaW50Zih0
cHAtPnRwX25hbWUsIHNpemVvZih0cHAtPnRwX25hbWUpLAotCSAgICAiJXNfdG1wZnNfJXAiLCB3
aGF0LCB0bXApOwotCUtBU1NFUlQoY250IDwgc2l6ZW9mKHRwcC0+dHBfbmFtZSkpOwotCi0JcG9v
bF9pbml0KCZ0cHAtPnRwX3Bvb2wsIHNpemUsIDAsIDAsIDAsIHRwcC0+dHBfbmFtZSwKLQkgICAg
JnRtcGZzX3Bvb2xfYWxsb2NhdG9yLCBJUExfTk9ORSk7Ci0JdHBwLT50cF9tb3VudCA9IHRtcDsK
LX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBEZXN0cm95cyB0aGUgcG9vbCBwb2lu
dGVkIHRvIGJ5ICd0cHAnLgotICovCi12b2lkCi10bXBmc19wb29sX2Rlc3Ryb3koc3RydWN0IHRt
cGZzX3Bvb2wgKnRwcCkKLXsKLQotCXBvb2xfZGVzdHJveSgoc3RydWN0IHBvb2wgKil0cHApOwot
fQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotdm9pZCAqCi10bXBmc19wb29sX3BhZ2VfYWxsb2Mo
c3RydWN0IHBvb2wgKnBwLCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IHRtcGZzX3Bvb2wgKnRwcDsK
LQlzdHJ1Y3QgdG1wZnNfbW91bnQgKnRtcDsKLQl1bnNpZ25lZCBpbnQgcGFnZXM7Ci0Jdm9pZCAq
cGFnZTsKLQotCXRwcCA9IChzdHJ1Y3QgdG1wZnNfcG9vbCAqKXBwOwotCXRtcCA9IHRwcC0+dHBf
bW91bnQ7Ci0KLQlwYWdlcyA9IGF0b21pY19pbmNfdWludF9udigmdG1wLT50bV9wYWdlc191c2Vk
KTsKLQlpZiAocGFnZXMgPj0gVE1QRlNfUEFHRVNfTUFYKHRtcCkpIHsKLQkJYXRvbWljX2RlY191
aW50KCZ0bXAtPnRtX3BhZ2VzX3VzZWQpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JLyoKLQkgKiB0
bXBmcyBuZXZlciBzcGVjaWZpZXMgUFJfV0FJVE9LIGFzIHdlIGVuZm9yY2UgbG9jYWwgbGltaXRz
Ci0JICogb24gbWVtb3J5IGFsbG9jYXRpb24uICBIb3dldmVyLCB3ZSBzaG91bGQgd2FpdCBmb3Ig
bWVtb3J5Ci0JICogdG8gYmVjb21lIGF2YWlsYWJsZSBpZiB1bmRlciBvdXIgbGltaXQuICBYWFgg
VGhlIHJlc3VsdCBvZgotCSAqIHRoZSBUTVBGU19QQUdFU19NQVgoKSBjaGVjayBpcyBzdGFsZS4K
LQkgKi8KLQlwYWdlID0gcG9vbF9wYWdlX2FsbG9jX25vaW50cihwcCwgZmxhZ3MgfCBQUl9XQUlU
T0spOwotCWlmIChwYWdlID09IE5VTEwpIHsKLQkJYXRvbWljX2RlY191aW50KCZ0bXAtPnRtX3Bh
Z2VzX3VzZWQpOwotCX0KLQotCXJldHVybiBwYWdlOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K
LQotdm9pZAotdG1wZnNfcG9vbF9wYWdlX2ZyZWUoc3RydWN0IHBvb2wgKnBwLCB2b2lkICp2KQot
ewotCXN0cnVjdCB0bXBmc19wb29sICp0cHA7Ci0Jc3RydWN0IHRtcGZzX21vdW50ICp0bXA7Ci0K
LQl0cHAgPSAoc3RydWN0IHRtcGZzX3Bvb2wgKilwcDsKLQl0bXAgPSB0cHAtPnRwX21vdW50Owot
Ci0JYXRvbWljX2RlY191aW50KCZ0bXAtPnRtX3BhZ2VzX3VzZWQpOwotCXBvb2xfcGFnZV9mcmVl
X25vaW50cihwcCwgdik7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogSW5pdGlh
bGl6ZSB0aGUgc3RyaW5nIHBvb2wgcG9pbnRlZCB0byBieSAndHNwJyBhbmQgYXR0YWNoIGl0IHRv
IHRoZQotICogJ3RtcCcgbW91bnQgcG9pbnQuCi0gKi8KLXZvaWQKLXRtcGZzX3N0cl9wb29sX2lu
aXQoc3RydWN0IHRtcGZzX3N0cl9wb29sICp0c3AsIHN0cnVjdCB0bXBmc19tb3VudCAqdG1wKQot
ewotCi0JdG1wZnNfcG9vbF9pbml0KCZ0c3AtPnRzcF9wb29sXzE2LCAgIDE2LCAgICJzdHIiLCB0
bXApOwotCXRtcGZzX3Bvb2xfaW5pdCgmdHNwLT50c3BfcG9vbF8zMiwgICAzMiwgICAic3RyIiwg
dG1wKTsKLQl0bXBmc19wb29sX2luaXQoJnRzcC0+dHNwX3Bvb2xfNjQsICAgNjQsICAgInN0ciIs
IHRtcCk7Ci0JdG1wZnNfcG9vbF9pbml0KCZ0c3AtPnRzcF9wb29sXzEyOCwgIDEyOCwgICJzdHIi
LCB0bXApOwotCXRtcGZzX3Bvb2xfaW5pdCgmdHNwLT50c3BfcG9vbF8yNTYsICAyNTYsICAic3Ry
IiwgdG1wKTsKLQl0bXBmc19wb29sX2luaXQoJnRzcC0+dHNwX3Bvb2xfNTEyLCAgNTEyLCAgInN0
ciIsIHRtcCk7Ci0JdG1wZnNfcG9vbF9pbml0KCZ0c3AtPnRzcF9wb29sXzEwMjQsIDEwMjQsICJz
dHIiLCB0bXApOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIERlc3Ryb3kgdGhl
IGdpdmVuIHN0cmluZyBwb29sLgotICovCi12b2lkCi10bXBmc19zdHJfcG9vbF9kZXN0cm95KHN0
cnVjdCB0bXBmc19zdHJfcG9vbCAqdHNwKQotewotCi0JdG1wZnNfcG9vbF9kZXN0cm95KCZ0c3At
PnRzcF9wb29sXzE2KTsKLQl0bXBmc19wb29sX2Rlc3Ryb3koJnRzcC0+dHNwX3Bvb2xfMzIpOwot
CXRtcGZzX3Bvb2xfZGVzdHJveSgmdHNwLT50c3BfcG9vbF82NCk7Ci0JdG1wZnNfcG9vbF9kZXN0
cm95KCZ0c3AtPnRzcF9wb29sXzEyOCk7Ci0JdG1wZnNfcG9vbF9kZXN0cm95KCZ0c3AtPnRzcF9w
b29sXzI1Nik7Ci0JdG1wZnNfcG9vbF9kZXN0cm95KCZ0c3AtPnRzcF9wb29sXzUxMik7Ci0JdG1w
ZnNfcG9vbF9kZXN0cm95KCZ0c3AtPnRzcF9wb29sXzEwMjQpOwotfQotCi0vKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gKi8KLQotLyoKLSAqIEFsbG9jYXRlIGEgbmV3IHN0cmluZyB3aXRoIGEgbWluaW11bSBsZW5n
dGggb2YgbGVuIGZyb20gdGhlICd0c3AnCi0gKiBzdHJpbmcgcG9vbC4gIFRoZSBwb29sIGNhbiBy
ZXR1cm4gYSBiaWdnZXIgc3RyaW5nLCBidXQgdGhlIGNhbGxlciBtdXN0Ci0gKiBub3QgbWFrZSBh
bnkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJlYWwgb2JqZWN0IHNpemUuCi0gKi8KLWNoYXIgKgot
dG1wZnNfc3RyX3Bvb2xfZ2V0KHN0cnVjdCB0bXBmc19zdHJfcG9vbCAqdHNwLCBzaXplX3QgbGVu
LCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IHRtcGZzX3Bvb2wgKnA7Ci0KLQlLQVNTRVJUKGxlbiA8
PSAxMDI0KTsKLQotCWlmICAgICAgKGxlbiA8PSAxNikgICBwID0gJnRzcC0+dHNwX3Bvb2xfMTY7
Ci0JZWxzZSBpZiAobGVuIDw9IDMyKSAgIHAgPSAmdHNwLT50c3BfcG9vbF8zMjsKLQllbHNlIGlm
IChsZW4gPD0gNjQpICAgcCA9ICZ0c3AtPnRzcF9wb29sXzY0OwotCWVsc2UgaWYgKGxlbiA8PSAx
MjgpICBwID0gJnRzcC0+dHNwX3Bvb2xfMTI4OwotCWVsc2UgaWYgKGxlbiA8PSAyNTYpICBwID0g
JnRzcC0+dHNwX3Bvb2xfMjU2OwotCWVsc2UgaWYgKGxlbiA8PSA1MTIpICBwID0gJnRzcC0+dHNw
X3Bvb2xfNTEyOwotCWVsc2UgaWYgKGxlbiA8PSAxMDI0KSBwID0gJnRzcC0+dHNwX3Bvb2xfMTAy
NDsKLQllbHNlIHsKLQkJS0FTU0VSVCgwKTsKLQkJcCA9IE5VTEw7IC8qIFNpbGVuY2UgY29tcGls
ZXIgd2FybmluZ3MgKi8KLQl9Ci0KLQlyZXR1cm4gKGNoYXIgKilUTVBGU19QT09MX0dFVChwLCBm
bGFncyk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogRGVzdHJveSB0aGUgc3Ry
IHN0cmluZywgd2hpY2ggd2FzIGFsbG9jYXRlZCBmcm9tIHRoZSAndHNwJyBzdHJpbmcgcG9vbAot
ICogd2l0aCBhIGxlbmd0aCBvZiAnbGVuJy4gIFRoZSBsZW5ndGggbXVzdCBtYXRjaCB0aGUgb25l
IGdpdmVuIGR1cmluZwotICogYWxsb2NhdGlvbi4KLSAqLwotdm9pZAotdG1wZnNfc3RyX3Bvb2xf
cHV0KHN0cnVjdCB0bXBmc19zdHJfcG9vbCAqdHNwLCBjaGFyICpzdHIsIHNpemVfdCBsZW4pCi17
Ci0Jc3RydWN0IHRtcGZzX3Bvb2wgKnA7Ci0KLQlLQVNTRVJUKGxlbiA8PSAxMDI0KTsKLQotCWlm
ICAgICAgKGxlbiA8PSAxNikgICBwID0gJnRzcC0+dHNwX3Bvb2xfMTY7Ci0JZWxzZSBpZiAobGVu
IDw9IDMyKSAgIHAgPSAmdHNwLT50c3BfcG9vbF8zMjsKLQllbHNlIGlmIChsZW4gPD0gNjQpICAg
cCA9ICZ0c3AtPnRzcF9wb29sXzY0OwotCWVsc2UgaWYgKGxlbiA8PSAxMjgpICBwID0gJnRzcC0+
dHNwX3Bvb2xfMTI4OwotCWVsc2UgaWYgKGxlbiA8PSAyNTYpICBwID0gJnRzcC0+dHNwX3Bvb2xf
MjU2OwotCWVsc2UgaWYgKGxlbiA8PSA1MTIpICBwID0gJnRzcC0+dHNwX3Bvb2xfNTEyOwotCWVs
c2UgaWYgKGxlbiA8PSAxMDI0KSBwID0gJnRzcC0+dHNwX3Bvb2xfMTAyNDsKLQllbHNlIHsKLQkJ
S0FTU0VSVCgwKTsKLQkJcCA9IE5VTEw7IC8qIFNpbGVuY2UgY29tcGlsZXIgd2FybmluZ3MgKi8K
LQl9Ci0KLQlUTVBGU19QT09MX1BVVChwLCBzdHIpOwotfQpkaWZmIC0tZ2l0IGEvc3lzL3Zmcy90
bXBmcy90bXBmc19wb29sLmggYi9zeXMvdmZzL3RtcGZzL3RtcGZzX3Bvb2wuaAppbmRleCAwMTdj
N2Q4Li41Y2E0MzQxCi0tLSBhL3N5cy92ZnMvdG1wZnMvdG1wZnNfcG9vbC5oCisrKyBiL3N5cy92
ZnMvdG1wZnMvdG1wZnNfcG9vbC5oCkBAIC0zMywxNSArMzMsMTkgQEAKICNpZm5kZWYgX0ZTX1RN
UEZTX1RNUEZTX1BPT0xfSF8KICNkZWZpbmUgX0ZTX1RNUEZTX1RNUEZTX1BPT0xfSF8KIAorI2lu
Y2x1ZGUgPHN5cy9vYmpjYWNoZS5oPgorCiBzdHJ1Y3QgcG9vbAogeworCXN0cnVjdCBvYmpjYWNo
ZSAqcF9vYmpjYWNoZTsKIAlpbnQgcF9zaXplOwogCWludCBwX25hbGxvY3M7CiAJaW50IHBfbmZy
ZWVzOwogfTsKIAotdm9pZCAqcG9vbF9nZXQoc3RydWN0IHBvb2wqIHBwLCBpbnQgZmxhZ3MpOwot
dm9pZCAgcG9vbF9wdXQoc3RydWN0IHBvb2wqIHBwLCB2b2lkICpwKTsKK3ZvaWQgKnBvb2xfZ2V0
KHN0cnVjdCBwb29sICpwcCwgaW50IGZsYWdzKTsKK3ZvaWQgIHBvb2xfcHV0KHN0cnVjdCBwb29s
ICpwcCwgdm9pZCAqcCk7CisKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTk4LDcgKzEwMiw4
IEBAIHN0cnVjdCB0bXBmc19zdHJfcG9vbCB7CiAgKiBDb252ZW5pZW5jZSBmdW5jdGlvbnMgYW5k
IG1hY3JvcyB0byBtYW5pcHVsYXRlIGEgdG1wZnNfcG9vbC4KICAqLwogCi12b2lkCXRtcGZzX3Bv
b2xfaW5pdChzdHJ1Y3QgdG1wZnNfcG9vbCAqdHBwLCBzaXplX3Qgc2l6ZSwKK3ZvaWQJdG1wZnNf
cG9vbF9pbml0KHN0cnVjdCB0bXBmc19wb29sICp0cHAsCisJICAgIHN0cnVjdCBvYmpjYWNoZV9t
YWxsb2NfYXJncyAqLCAvKiBzaXplX3Qgc2l6ZSwgKi8gCiAJICAgIGNvbnN0IGNoYXIgKndoYXQs
IHN0cnVjdCB0bXBmc19tb3VudCAqdG1wKTsKIHZvaWQJdG1wZnNfcG9vbF9kZXN0cm95KHN0cnVj
dCB0bXBmc19wb29sICp0cHApOwogCkBAIC0xMDcsNiArMTEyLDcgQEAgdm9pZAl0bXBmc19wb29s
X2Rlc3Ryb3koc3RydWN0IHRtcGZzX3Bvb2wgKnRwcCk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwog
CisKIC8qCiAgKiBGdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSBhIHRtcGZzX3N0cl9wb29sLgogICov
CmRpZmYgLS1naXQgYS9zeXMvdmZzL3RtcGZzL3RtcGZzX3N1YnIuYyBiL3N5cy92ZnMvdG1wZnMv
dG1wZnNfc3Vici5jCmluZGV4IGJhMDYzM2UuLmIwYTU2Y2QKLS0tIGEvc3lzL3Zmcy90bXBmcy90
bXBmc19zdWJyLmMKKysrIGIvc3lzL3Zmcy90bXBmcy90bXBmc19zdWJyLmMKQEAgLTE0MCw3ICsx
NDAsOCBAQCB0bXBmc19hbGxvY19ub2RlKHN0cnVjdCB0bXBmc19tb3VudCAqdG1wLCBlbnVtIHZ0
eXBlIHR5cGUsCiAJCXJldHVybiBFTk9TUEM7CiAJfQogCi0Jbm5vZGUgPSAoc3RydWN0IHRtcGZz
X25vZGUgKilUTVBGU19QT09MX0dFVCgmdG1wLT50bV9ub2RlX3Bvb2wsIDApOworCW5ub2RlID0g
KHN0cnVjdCB0bXBmc19ub2RlICopIFRNUEZTX1BPT0xfR0VUKAorCQkJCSZ0bXAtPnRtX25vZGVf
cG9vbCwgTV9XQUlUT0spOwogCWlmIChubm9kZSA9PSBOVUxMKSB7CiAJCWF0b21pY19zdWJ0cmFj
dF9pbnQoJnRtcC0+dG1fbm9kZXNfY250LCAxKTsKIAkJcmV0dXJuIEVOT1NQQzsKQEAgLTI5Niw3
ICsyOTcsOCBAQCB0bXBmc19hbGxvY19kaXJlbnQoc3RydWN0IHRtcGZzX21vdW50ICp0bXAsIHN0
cnVjdCB0bXBmc19ub2RlICpub2RlLAogewogCXN0cnVjdCB0bXBmc19kaXJlbnQgKm5kZTsKIAlE
UCgidG1wZnNfYWxsb2NfZGlyZW50IHRtcCAlcCBuICVwICUqLipzXG4iLHRtcCxub2RlLGxlbixs
ZW4sbmFtZSk7Ci0JbmRlID0gKHN0cnVjdCB0bXBmc19kaXJlbnQgKikgVE1QRlNfUE9PTF9HRVQo
JnRtcC0+dG1fZGlyZW50X3Bvb2wsIDApOworCW5kZSA9IChzdHJ1Y3QgdG1wZnNfZGlyZW50ICop
IFRNUEZTX1BPT0xfR0VUKAorCQkJJnRtcC0+dG1fZGlyZW50X3Bvb2wsIE1fV0FJVE9LKTsKIAlp
ZiAobmRlID09IE5VTEwpCiAJCXJldHVybiBFTk9TUEM7CiAKQEAgLTg2MSwxNCArODYzLDE4IEBA
IHRtcGZzX3JlZ19yZXNpemUoc3RydWN0IHZub2RlICp2cCwgb2ZmX3QgbmV3c2l6ZSkKIAlzdHJ1
Y3QgdG1wZnNfbW91bnQgKnRtcDsKIAlzdHJ1Y3QgdG1wZnNfbm9kZSAqbm9kZTsKIAlvZmZfdCBv
bGRzaXplOworCWludCB0cnVuY2F0aW5nOworCW9mZl90IGFsaWduZWRfc2l6ZTsKIAotCURQKCJ0
bXBmc19yZWdfcmVzaXplIHZwICVwIG5ld3NpemUgJWRcbiIsIHZwLCAoaW50KW5ld3NpemUpOwog
CUtLQVNTRVJUKHZwLT52X3R5cGUgPT0gVlJFRyk7CiAJS0tBU1NFUlQobmV3c2l6ZSA+PSAwKTsK
IAogCW5vZGUgPSBWUF9UT19UTVBGU19OT0RFKHZwKTsKIAl0bXAgPSBWRlNfVE9fVE1QRlModnAt
PnZfbW91bnQpOwogCisJRFAoInRtcGZzX3JlZ19yZXNpemUgdnAgJXAgb2xkc2l6ZSAlZCBuZXdz
aXplICVkXG4iLAorCQl2cCwgKGludCkgbm9kZS0+dG5fc2l6ZSwgKGludCkgbmV3c2l6ZSk7CisK
IAkvKiBDb252ZXJ0IHRoZSBvbGQgYW5kIG5ldyBzaXplcyB0byB0aGUgbnVtYmVyIG9mIHBhZ2Vz
IG5lZWRlZCB0bwogCSAqIHN0b3JlIHRoZW0uICBJdCBtYXkgaGFwcGVuIHRoYXQgd2UgZG8gbm90
IG5lZWQgdG8gZG8gYW55dGhpbmcKIAkgKiBiZWNhdXNlIHRoZSBsYXN0IGFsbG9jYXRlZCBwYWdl
IGNhbiBhY2NvbW1vZGF0ZSB0aGUgY2hhbmdlIG9uCkBAIC04OTAsOCArODk2LDUzIEBAIHRtcGZz
X3JlZ19yZXNpemUoc3RydWN0IHZub2RlICp2cCwgb2ZmX3QgbmV3c2l6ZSkKIAl0bXAtPnRtX3Bh
Z2VzX3VzZWQgKz0gKG5ld3BhZ2VzIC0gb2xkcGFnZXMpOwogCVRNUEZTX1VOTE9DSyh0bXApOwog
CisJLyoKKwkgKiBYWFggYnJlYWsgYXRvbWljeSwgd2UgY2FuIGRlYWRsb2NrIHRoZSBiYWNrZW5k
CisJICogaWYgd2UgZG8gbm90IHJlbGVhc2UgdGhlIGxvY2suICBQcm9iYWJseSBub3QgYQorCSAq
IGJpZyBkZWFsIGhlcmUuCisJICovCisKKworLy8Jdm5vZGVfcGFnZXJfc2V0c2l6ZSh2cCwgbmV3
c2l6ZSk7CisKKwlpZiAobmV3c2l6ZSA8IG5vZGUtPnRuX3NpemUpIHsKKwkJdnRydW5jYnVmKHZw
LCBuZXdzaXplLCBQQUdFX1NJWkUpOworCQl0cnVuY2F0aW5nID0gMTsKKwl9IGVsc2UgeworCQl2
bm9kZV9wYWdlcl9zZXRzaXplKHZwLCBuZXdzaXplKTsKKwkJdHJ1bmNhdGluZyA9IDA7CisJfQog
CW5vZGUtPnRuX3NpemUgPSBuZXdzaXplOwotCXZub2RlX3BhZ2VyX3NldHNpemUodnAsIG5ld3Np
emUpOworLy8jaWYgMAorLy8JbW9kZmxhZ3MgfD0gSEFNTUVSX0lOT0RFX0RESVJUWTsKKworCS8q
CisJICogSWYgdHJ1bmNhdGluZyB3ZSBoYXZlIHRvIGNsZWFuIG91dCBhIHBvcnRpb24gb2YKKwkg
KiB0aGUgbGFzdCBibG9jayBvbi1kaXNrLiAgV2UgZG8gdGhpcyBpbiB0aGUKKwkgKiBmcm9udC1l
bmQgYnVmZmVyIGNhY2hlLgorCSAqLworI2lmIDAKKwlhbGlnbmVkX3NpemUgPSByb3VuZF9wYWdl
KG5ld3NpemUpOworCWlmICh0cnVuY2F0aW5nICYmIG5ld3NpemUgPCBhbGlnbmVkX3NpemUpIHsK
KwkJc3RydWN0IGJ1ZiAqYnA7CisJCWludCBvZmZzZXQ7CisKKwkJYWxpZ25lZF9zaXplIC09IFBB
R0VfU0laRTsKKworCQlvZmZzZXQgPSAoaW50KSBuZXdzaXplICYgUEFHRV9NQVNLOworCQllcnJv
ciA9IGJyZWFkKHZwLCBhbGlnbmVkX3NpemUsIFBBR0VfU0laRSwgJmJwKTsKKwkJLy9oYW1tZXJf
aXBfZnJvbnRlbmRfdHJ1bmMoaXAsIGFsaWduZWRfc2l6ZSk7CisJCWlmIChlcnJvciA9PSAwKSB7
CisJCQliemVybyhicC0+Yl9kYXRhICsgb2Zmc2V0LCBQQUdFX1NJWkUgLSBvZmZzZXQpOworCQkJ
LyogbXVzdCBkZS1jYWNoZSBkaXJlY3QtaW8gb2Zmc2V0ICovCisJCQlicC0+Yl9iaW8yLmJpb19v
ZmZzZXQgPSBOT09GRlNFVDsKKwkJCWJkd3JpdGUoYnApOworCQl9IGVsc2UgeworCQkJa3ByaW50
ZigidG1wZnNfcmVnX3Jlc2l6ZSBFUlJPUiAlZFxuIiwgZXJyb3IpOworCQkJYnJlbHNlKGJwKTsK
KwkJfQorCX0KKyNlbmRpZgogCWlmIChuZXdzaXplIDwgb2xkc2l6ZSkgewogCQlzaXplX3QgemVy
b2xlbiA9IHJvdW5kX3BhZ2UobmV3c2l6ZSkgLSBuZXdzaXplOwogCQl2bV9vYmplY3RfdCB1b2Jq
ID0gbm9kZS0+dG5fc3BlYy50bl9yZWcudG5fYW9iajsKQEAgLTg5OSw2ICs5NTAsNyBAQCB0bXBm
c19yZWdfcmVzaXplKHN0cnVjdCB2bm9kZSAqdnAsIG9mZl90IG5ld3NpemUpCiAKIAkJLyogIGZy
ZWUgImJhY2tpbmcgc3RvcmUiICovCiAJCS8qIFhYWCAqLworCiAJCWNyaXRfZW50ZXIoKTsKIAkJ
aWYgKG5ld3BhZ2VzIDwgb2xkcGFnZXMpIHsKIAkJCXN3YXBfcGFnZXJfZnJlZXNwYWNlKHVvYmos
CkBAIC05MDYsMTYgKzk1OCwxOCBAQCB0bXBmc19yZWdfcmVzaXplKHN0cnVjdCB2bm9kZSAqdnAs
IG9mZl90IG5ld3NpemUpCiAJCQl2bV9vYmplY3RfcGFnZV9yZW1vdmUodW9iaiwKIAkJCQlPRkZf
VE9fSURYKG5ld3NpemUgKyBQQUdFX01BU0spLCAwLCBGQUxTRSk7CiAJCX0KLQorI2lmIDAKIAkJ
LyogemVybyBvdXQgdGhlIHRydW5jYXRlZCBwYXJ0IG9mIHRoZSBsYXN0IHBhZ2UuICovCi0JCWlm
ICh6ZXJvbGVuID4gMCkgeworCQlpZiAoemVyb2xlbiA+PSAwKSB7CiAJCQltID0gdm1fcGFnZV9n
cmFiKHVvYmosIE9GRl9UT19JRFgobmV3c2l6ZSksCiAJCQkJCVZNX0FMTE9DX05PUk1BTCB8IFZN
X0FMTE9DX1JFVFJZKTsKIAkJCXBtYXBfemVyb19wYWdlX2FyZWEoKHZtX3BhZGRyX3QpKHZtX29m
ZnNldF90KW0sCiAJCQkgICAgUEFHRV9TSVpFIC0gemVyb2xlbiwgemVyb2xlbik7CiAJCQl2bV9w
YWdlX3dha2V1cChtKTsKIAkJfQorI2VuZGlmCiAJCWNyaXRfZXhpdCgpOworCiAJfQogCWVycm9y
ID0gMDsKIG91dDoKQEAgLTEzMzAsMTEgKzEzODQsMjAgQEAgb3V0OgogLyogLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
ICovCiAKIHZvaWQKLXRtcGZzX3Bvb2xfaW5pdChzdHJ1Y3QgdG1wZnNfcG9vbCAqdHBwLCBzaXpl
X3Qgc2l6ZSwKLQkgICAgY29uc3QgY2hhciAqd2hhdCwgc3RydWN0IHRtcGZzX21vdW50ICp0bXAp
Cit0bXBmc19wb29sX2luaXQoc3RydWN0IHRtcGZzX3Bvb2wgKnRwcCwKKwkJc3RydWN0IG9iamNh
Y2hlX21hbGxvY19hcmdzICphcmdzLCAvKiBzaXplX3Qgc2l6ZSwgKi8KKwkJY29uc3QgY2hhciAq
d2hhdCwgc3RydWN0IHRtcGZzX21vdW50ICp0bXApCiB7CiAJRFAoInRtcGZzX3Bvb2xfaW5pdCBw
b29sICVwIHNpemUgJWRcbiIsIHRwcCwgc2l6ZSk7Ci0JdHBwLT50cF9wb29sLnBfc2l6ZSA9IHNp
emU7CisKKworCXRwcC0+dHBfcG9vbC5wX29iamNhY2hlID0gb2JqY2FjaGVfY3JlYXRlKCJ0bXBm
cy1vYmpjYWNoZSIsIDAsIDAsCisJCQlOVUxMLCBOVUxMLCBOVUxMLAorCQkJb2JqY2FjaGVfbWFs
bG9jX2FsbG9jLAorCQkJb2JqY2FjaGVfbWFsbG9jX2ZyZWUsCisJCQlhcmdzKTsKKwkJCQorCXRw
cC0+dHBfcG9vbC5wX3NpemUgPSBhcmdzLT5vYmpzaXplOwogCXRwcC0+dHBfcG9vbC5wX25hbGxv
Y3MgPSAwOwogCXRwcC0+dHBfcG9vbC5wX25mcmVlcyA9IDA7CiB9CkBAIC0xMzQ1LDIwICsxNDA4
LDIzIEBAIHRtcGZzX3Bvb2xfZGVzdHJveShzdHJ1Y3QgdG1wZnNfcG9vbCAqdHBwKQogCURQKCJ0
bXBmc19wb29sX2Rlc3Ryb3kgcG9vbCAlcCBhbGxvY3MgJWQgZnJlZXMgJWRcbiIsIHRwcCwKIAkJ
dHBwLT50cF9wb29sLnBfbmFsbG9jcywKIAkJdHBwLT50cF9wb29sLnBfbmZyZWVzKTsKKwlvYmpj
YWNoZV9kZXN0cm95KHRwcC0+dHBfcG9vbC5wX29iamNhY2hlKTsKIH0KIAogdm9pZCAqCi1wb29s
X2dldChzdHJ1Y3QgcG9vbCogcHAsIGludCBmbGFncykKK3Bvb2xfZ2V0KHN0cnVjdCBwb29sICpw
cCwgaW50IGZsYWdzKQogewogCXBwLT5wX25hbGxvY3MrKzsKLQlyZXR1cm4ga21hbGxvYyhwcC0+
cF9zaXplLCBNX1RNUEZTLCBNX1dBSVRPSyB8IE1fWkVSTyk7CisJLyogcmV0dXJuIGttYWxsb2Mo
cHAtPnBfc2l6ZSwgTV9UTVBGUywgTV9XQUlUT0sgfCBNX1pFUk8pOyAqLworCXJldHVybiBvYmpj
YWNoZV9nZXQocHAtPnBfb2JqY2FjaGUsIGZsYWdzKTsKIH0KIAogdm9pZAotcG9vbF9wdXQoc3Ry
dWN0IHBvb2wqIHBwLCB2b2lkICpwKQorcG9vbF9wdXQoc3RydWN0IHBvb2wgKnBwLCB2b2lkICpw
KQogewogCXBwLT5wX25mcmVlcysrOwotCWtmcmVlKHAsIE1fVE1QRlMpOworCS8qIGtmcmVlKHAs
IE1fVE1QRlMpOyAqLworCW9iamNhY2hlX3B1dChwcC0+cF9vYmpjYWNoZSwgcCk7CiB9CiAKIHZv
aWQgdG1wZnNfc3RyX3Bvb2xfaW5pdChzdHJ1Y3QgdG1wZnNfc3RyX3Bvb2wgKmEsIHN0cnVjdCB0
bXBmc19tb3VudCAqYikKZGlmZiAtLWdpdCBhL3N5cy92ZnMvdG1wZnMvdG1wZnNfdmZzb3BzLmMg
Yi9zeXMvdmZzL3RtcGZzL3RtcGZzX3Zmc29wcy5jCmluZGV4IDhlOTczNWIuLjE1ZTEwNDIKLS0t
IGEvc3lzL3Zmcy90bXBmcy90bXBmc192ZnNvcHMuYworKysgYi9zeXMvdmZzL3RtcGZzL3RtcGZz
X3Zmc29wcy5jCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSA8c3lzL3Byb2MuaD4KICNpbmNs
dWRlIDxzeXMvbW9kdWxlLmg+CiAjaW5jbHVkZSA8c3lzL2ZpbGUuaD4KKyNpbmNsdWRlIDxzeXMv
b2JqY2FjaGUuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2F0b21pYy5oPgogCiAjaW5jbHVkZSA8dmZz
L3RtcGZzL3RtcGZzLmg+CkBAIC03Nyw2ICs3OCwxMiBAQCBzdGF0aWMgaW50CXRtcGZzX2luaXQo
c3RydWN0IHZmc2NvbmYgKmNvbmYpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorc3RydWN0IG9i
amNhY2hlX21hbGxvY19hcmdzIHRtcGZzX25vZGVfbWFsbG9jX2FyZ3MgPSB7CisJCXNpemVvZihz
dHJ1Y3QgdG1wZnNfbm9kZSksIE1fVE1QRlMgfTsKKworc3RydWN0IG9iamNhY2hlX21hbGxvY19h
cmdzIHRtcGZzX2RpcmVudF9tYWxsb2NfYXJncyA9IHsKKwkJc2l6ZW9mKHN0cnVjdCB0bXBmc19k
aXJlbnQpLCBNX1RNUEZTIH07CisKIHN0YXRpYyBpbnQKIHRtcGZzX21vdW50KHN0cnVjdCBtb3Vu
dCAqbXAsIGNoYXIgKnBhdGgsIGNhZGRyX3QgZGF0YSwgc3RydWN0IHVjcmVkICpjcmVkKQogewpA
QCAtMTY5LDkgKzE3NiwxMSBAQCB0bXBmc19tb3VudChzdHJ1Y3QgbW91bnQgKm1wLCBjaGFyICpw
YXRoLCBjYWRkcl90IGRhdGEsIHN0cnVjdCB1Y3JlZCAqY3JlZCkKIAogCXRtcC0+dG1fcGFnZXNf
bWF4ID0gcGFnZXM7CiAJdG1wLT50bV9wYWdlc191c2VkID0gMDsKLQl0bXBmc19wb29sX2luaXQo
JnRtcC0+dG1fZGlyZW50X3Bvb2wsIHNpemVvZihzdHJ1Y3QgdG1wZnNfZGlyZW50KSwKKwl0bXBm
c19wb29sX2luaXQoJnRtcC0+dG1fZGlyZW50X3Bvb2wsCisJICAgICZ0bXBmc19kaXJlbnRfbWFs
bG9jX2FyZ3MsIC8qIHNpemVvZihzdHJ1Y3QgdG1wZnNfZGlyZW50KSwgKi8KIAkgICAgImRpcmVu
dCIsIHRtcCk7Ci0JdG1wZnNfcG9vbF9pbml0KCZ0bXAtPnRtX25vZGVfcG9vbCwgc2l6ZW9mKHN0
cnVjdCB0bXBmc19ub2RlKSwKKwl0bXBmc19wb29sX2luaXQoJnRtcC0+dG1fbm9kZV9wb29sLAor
CSAgICAmdG1wZnNfbm9kZV9tYWxsb2NfYXJncywgLyogc2l6ZW9mKHN0cnVjdCB0bXBmc19ub2Rl
KSwgKi8KIAkgICAgIm5vZGUiLCB0bXApOwogCXRtcGZzX3N0cl9wb29sX2luaXQoJnRtcC0+dG1f
c3RyX3Bvb2wsIHRtcCk7CiAKZGlmZiAtLWdpdCBhL3N5cy92ZnMvdG1wZnMvdG1wZnNfdm5vcHMu
YyBiL3N5cy92ZnMvdG1wZnMvdG1wZnNfdm5vcHMuYwppbmRleCA1ZTZjYWZkLi40YjFkYzQ1Ci0t
LSBhL3N5cy92ZnMvdG1wZnMvdG1wZnNfdm5vcHMuYworKysgYi9zeXMvdmZzL3RtcGZzL3RtcGZz
X3Zub3BzLmMKQEAgLTE3OSwxMCArMTc5LDYgQEAgc3RydWN0IHZvcF9vcHMgdG1wZnNfZmlmb192
b3BzID0gewogCS8qIFhYWCAudm9wX2txZmlsdGVyID0JCQl0bXBmc19maWZvX2txZmlsdGVyICov
CiB9OwogCi1pbnQgdG1wZnNfc3BlY193cml0ZShzdHJ1Y3Qgdm9wX3dyaXRlX2FyZ3MgKmFwKTsK
LWludCB0bXBmc19zcGVjX3JlYWQoc3RydWN0IHZvcF9yZWFkX2FyZ3MgKmFwKTsKLWludCB0bXBm
c19zcGVjX2Nsb3NlKHN0cnVjdCB2b3BfY2xvc2VfYXJncyAqYXApOwotCiBpbnQKIHRtcGZzX25y
ZXNvbHZlKHN0cnVjdCB2b3BfbnJlc29sdmVfYXJncyAqYXApCiB7CkBAIC0xMjUzLDEzICsxMjQ5
LDEyIEBAIHRtcGZzX3N0cmF0ZWd5X3JlYWQoc3RydWN0IHZvcF9zdHJhdGVneV9hcmdzICphcCkK
IAl9CiAKIAlzZiA9IHNmX2J1Zl9hbGxvYyhtLCBTRkJfQ1BVUFJJVkFURSk7Ci0JdmEgPSAoY2Fk
ZHJfdClzZl9idWZfa3ZhKHNmKTsKKwl2YSA9IChjYWRkcl90KSBzZl9idWZfa3ZhKHNmKTsKIAli
Y29weSh2YSwgYnAtPmJfZGF0YSwgUEFHRV9TSVpFKTsKIAlzZl9idWZfZnJlZShzZik7CiBvdXQ6
CiAJdm1fcGFnZV91bndpcmUobSwgMCk7CiAJdm1fcGFnZV9hY3RpdmF0ZShtKTsKLQogCXZtX3Bh
Z2Vfd2FrZXVwKG0pOwogCXZtX29iamVjdF9waXBfc3VidHJhY3QodG9iaiwgMSk7CiAKQEAgLTEy
OTEsNyArMTI4Niw3IEBAIHRtcGZzX3N0cmF0ZWd5X3dyaXRlKHN0cnVjdCB2b3Bfc3RyYXRlZ3lf
YXJncyAqYXApCiAJc3RydWN0IHRtcGZzX25vZGUgKm5vZGU7CiAKIAlEUCgidG1wZnNfc3RyYXRl
Z3lfd3JpdGUgYnVmICVwIGJvZmYgJXggcmVzaWQgJXggYmNudCAleCAleFxuIiwKLQkJCWJwLCBi
aW8tPmJpb19vZmZzZXQsIGJwLT5iX3Jlc2lkLCBicC0+Yl9iY291bnQsIGJwLT5iX2J1ZnNpemUp
OworCQlicCwgYmlvLT5iaW9fb2Zmc2V0LCBicC0+Yl9yZXNpZCwgYnAtPmJfYmNvdW50LCBicC0+
Yl9idWZzaXplKTsKIAogCW5vZGUgPSBWUF9UT19UTVBGU19OT0RFKGFwLT5hX3ZwKTsKIAlhZGRy
ID0gYmlvLT5iaW9fb2Zmc2V0OwpAQCAtMTMyNCw3ICsxMzE5LDcgQEAgdG1wZnNfc3RyYXRlZ3lf
d3JpdGUoc3RydWN0IHZvcF9zdHJhdGVneV9hcmdzICphcCkKIAogb3V0OgogCWlmICghZXJyb3Ip
IHsKLQkJdm1fcGFnZV9zZXRfdmFsaWRjbGVhbih0cGcsIDAsIFBBR0VfU0laRSk7CisJCXZtX3Bh
Z2Vfc2V0X3ZhbGlkY2xlYW4odHBnLCAwLCBQQUdFX1NJWkUpOy8qIFhYWCAqLwogCQl2bV9wYWdl
X3plcm9faW52YWxpZCh0cGcsIFRSVUUpOwogCQl2bV9wYWdlX2RpcnR5KHRwZyk7CiAJfQpAQCAt
MjA2MCwzICsyMDU1LDUgQEAgdG1wZnNfZmlmb193cml0ZShzdHJ1Y3Qgdm9wX3dyaXRlX2FyZ3Mg
KmFwKQogCWludCBlcnJvciA9IFZPQ0FMTCgmZmlmb192bm9kZV92b3BzLCAmYXAtPmFfaGVhZCk7
CiAJcmV0dXJuIGVycm9yOwogfQorCisK
--0016368e1b105cfbfc04785264f4--
討論串 (同標題文章)