[PR] swscale/ops: add SWS_OP_LUT_3D and add gamut/tone mapping support for SwsOpList (PR #23925)

Niklas Haas via ffmpeg-devel <[email protected]> Mon, 27 Jul 2026 14:20:04 -0000
Newsgroups gmane.comp.video.ffmpeg.devel
Message-ID <178516201791.59.5492067518148016756@29965ddac10e>
UFIgIzIzOTI1IG9wZW5lZCBieSBOaWtsYXMgSGFhcyAoaGFhc24pClVSTDogaHR0cHM6Ly9jb2Rl
LmZmbXBlZy5vcmcvRkZtcGVnL0ZGbXBlZy9wdWxscy8yMzkyNQpQYXRjaCBVUkw6IGh0dHBzOi8v
Y29kZS5mZm1wZWcub3JnL0ZGbXBlZy9GRm1wZWcvcHVsbHMvMjM5MjUucGF0Y2gKClRoaXMgYnJl
YWtzIHRoZSBkZXNpZ24gcGhpbG9zb3BoeSBvZiBTd3NPcCBqdXN0IGEgbGl0dGxlIGJpdCwgaW4g
dGhhdCBpdCdzIGEgZmFpcmx5IGNvbXBsZXggbm9uLWF0b21pYyBvcGVyYXRpb24gaW52b2x2aW5n
IG11bHRpcGxlIHN0ZXBzLiBIb3dldmVyLCB0aGUgc2VtYW50aWNzIGFyZSBzbyB0aWdodGx5IG1h
cnJpZWQgdG8gdGhlIGV4YWN0IGBsdXQzZC5oYCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCB0aGF0
IEkgZG9uJ3QgdGhpbmsgaXQncyB3b3J0aCBpbnRlbnRpb25hbGx5IG9ic2N1cmluZyB0aGF0IHJl
bGF0aW9uc2hpcCBqdXN0IGZvciB0aGUgc2FrZSBvZiBjb25jZXB0dWFsIHB1cml0eS4NCg0KSW4g
dGhlb3J5LCB3ZSBjb3VsZCB0cmVhdCB0aGVzZSBhcyB0aHJlZSBzZXBhcmF0ZSBtZXRhLXVvcHMg
ZS5nLiBTV1NfVU9QX0xVVF9URVRSQUhFRFJBTCwgU1dTX1VPUF9UT05FX01BUCwgYW5kIFNXU19V
T1BfTFVUX1RSSUxJTkVBUjsgd2l0aCBhbiBleHBsaWNpdCBTV1NfVU9QX1NDQUxFIGluIGJldHdl
ZW4gZm9yIHRoZSBpbnRlcm1lZGlhdGUgc3RlcCBiZXR3ZWVuIHRoZSB0b25lIG1hcHBpbmcgYW5k
IHRyaWxpbmVhciBzdGVwLCBidXQgdGhhdCBwcmV2ZW50cyBzb21lIGZ1c2lvbiAoZS5nLiBmdXNp
bmcgdGhlIHNjYWxlIGFkanVzdG1lbnQgZGlyZWN0bHkgaW50byB0aGUgYGJpYXNgIGFuZCBgc2Nh
bGVgIHZhbHVlcyBmb3IgdGhlIFBUIGNoYW5uZWwgZGVzYXR1cmF0aW9uKS4gSWYgaXQgZXZlciBj
b21lcyB0byBpdCwgd2UgY2FuIHN0aWxsIHJvbGwgdGhpcyBkZWNpc2lvbiBiYWNrIGFuZCBnZW5l
cmFsaXplIHRoaXMgdW9wIHNvbWUgbW9yZS4NCg0KVGhpcyBQUiBvbmx5IGltcGxlbWVudHMgdGhl
IEMgcmVmZXJlbmNlLiBJIHN1c3BlY3QgdGhhdCBhIHByb3Blcmx5IHZlY3Rvcml6ZWQgU0lNRCBz
b2x1dGlvbiBpcyBtdWNoIGZhc3RlciwgYnV0IEkgd2lsbCBmb2xsb3cgdXAgd2l0aCB0aGF0IGlu
IGEgc2VwYXJhdGUgUFIgYXMgaXQgaXMgcXVpdGUgYW4gdW5kZXJ0YWtpbmcuCgoKRnJvbSA0NTJm
NTJiMTA2NjI0NmQ5YTQ2NGRkYzQ1MGRhYjk2NDc1MTIzYjIwIE1vbiBTZXAgMTcgMDA6MDA6MDAg
MjAwMQpGcm9tOiBOaWtsYXMgSGFhcyA8Z2l0QGhhYXNuLmRldj4KRGF0ZTogU3VuLCAyMSBKdW4g
MjAyNiAxNjo1MTowMyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMDEvMThdIHN3c2NhbGUvb3BzOiBm
aXggbWVyZ2VfY29tcF9mbGFncygpIGZvcgogU1dTX0NPTVBfU1dBUFBFRAoKVGhpcyB2aW9sYXRl
cyB0aGUgZG9jdW1lbnRhdGlvbiAobW9ub2lkIHByb3BlcnR5KS4KCkl0J3MgYSBiaXQgYXJiaXRy
YXJ5IHdoZXRoZXIgdG8gY29uc2lkZXIgdGhpcyBhbiBPUi10eXBlIG9yIEFORC10eXBlIGZsYWcs
CnNpbmNlIG1peGluZyBzd2FwcGVkIGFuZCBub24tc3dhcHBlZCBjb21wb25lbnRzIGlzIGFsbW9z
dCBzdXJlbHkgYSBidWcsIGJ1dAprZWVwaW5nIGl0IGFzIGFuIE9SLXR5cGUgbWFrZXMgc3VyZSBz
dWNoIGNhc2VzIGF0IGxlYXN0IHNob3cgdXAgaW4gdGhlCnJlc3VsdC4KClNwb25zb3JlZC1ieTog
U292ZXJlaWduIFRlY2ggRnVuZApTaWduZWQtb2ZmLWJ5OiBOaWtsYXMgSGFhcyA8Z2l0QGhhYXNu
LmRldj4KLS0tCiBsaWJzd3NjYWxlL29wcy5jIHwgMiArLQogMSBmaWxlIGNoYW5nZWQsIDEgaW5z
ZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvbGlic3dzY2FsZS9vcHMuYyBi
L2xpYnN3c2NhbGUvb3BzLmMKaW5kZXggMDU4MmEzMjM0NS4uMWY1NTVlOTQ3OSAxMDA2NDQKLS0t
IGEvbGlic3dzY2FsZS9vcHMuYworKysgYi9saWJzd3NjYWxlL29wcy5jCkBAIC0yODEsNyArMjgx
LDcgQEAgZW51bSB7CiAvKiBtZXJnZV9jb21wX2ZsYWdzKCkgZm9ybXMgYSBtb25vaWQgd2l0aCBT
V1NfQ09NUF9JREVOVElUWSBhcyB0aGUgbnVsbCBlbGVtZW50ICovCiBzdGF0aWMgU3dzQ29tcEZs
YWdzIG1lcmdlX2NvbXBfZmxhZ3MoU3dzQ29tcEZsYWdzIGEsIFN3c0NvbXBGbGFncyBiKQogewot
ICAgIGNvbnN0IFN3c0NvbXBGbGFncyBmbGFnc19vciAgPSBTV1NfQ09NUF9HQVJCQUdFOworICAg
IGNvbnN0IFN3c0NvbXBGbGFncyBmbGFnc19vciAgPSBTV1NfQ09NUF9HQVJCQUdFIHwgU1dTX0NP
TVBfU1dBUFBFRDsKICAgICBjb25zdCBTd3NDb21wRmxhZ3MgZmxhZ3NfYW5kID0gU1dTX0NPTVBf
SURFTlRJVFk7CiAgICAgcmV0dXJuICgoYSAmIGIpICYgZmxhZ3NfYW5kKSB8ICgoYSB8IGIpICYg
ZmxhZ3Nfb3IpOwogfQotLSAKMi41Mi4wCgoKRnJvbSAxNzNhNmQ3MmM3MzdhZDdlOWJmZDBjMjVl
M2VlMjgwODNlODY2MWM2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtsYXMgSGFh
cyA8Z2l0QGhhYXNuLmRldj4KRGF0ZTogVGh1LCAyNSBKdW4gMjAyNiAxODozMToxMyArMDIwMApT
dWJqZWN0OiBbUEFUQ0ggMDIvMThdIHN3c2NhbGUvb3BzOiByZWZhY3RvciBjb21wIGZsYWdzIHBy
b3BhZ2F0aW9uIHNsaWdodGx5CgpJbnRyb2R1Y2UgYSB1bmlmaWVkIEZPUldBUkQoKSBoZWxwZXIg
bWFjcm8gdGhhdCBjYW4gYmUgdXNlZCBmb3IgYW55IHR5cGUgb2YKb3AsIHdoZXRoZXIgaXQgaXMg
aW5kZXBlbmRlbnQgcGVyIGNvbXBvbmVudCBvciBtb3JlIGNvbXBsZXguIEJ5IGluaXRpYWxpemlu
ZwpldmVyeSBvcCB0byB0aGUgc2FtZSBJREVOVElUWSBzdGF0ZSwgd2UgY2FuIGxldmVyYWdlIHRo
ZSBtb25vaWQgcHJvcGVydHkgdG8KbWFrZSB0aGlzIHdvcmsgZm9yIG5haXZlIHByb3BhZ2F0aW9u
cyBhcyB3ZWxsLgoKQXMgYW4gYXNpZGUsIHdlIGFsc28gcHJvcGVybHkgemVybyBvdXQgdGhlIHVu
cmVsYXRlZCBmaWVsZHMgd2hlbiBkaXNjYXJkaW5nCmEgY29tcG9uZW50IChpLmUuIG1hcmtpbmcg
aXQgYXMgR0FSQkFHRSkuCgpUaGlzIHdpbGwgbWFrZSBhIGNvdXBsZSBvZiB1cC1jb21pbmcgcmVm
YWN0b3JzIGEgYml0IGVhc2llci4KClNwb25zb3JlZC1ieTogU292ZXJlaWduIFRlY2ggRnVuZApT
aWduZWQtb2ZmLWJ5OiBOaWtsYXMgSGFhcyA8Z2l0QGhhYXNuLmRldj4KLS0tCiBsaWJzd3NjYWxl
L29wcy5jIHwgNzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAxIGZpbGUgY2hhbmdlZCwgNDIgaW5zZXJ0aW9ucygrKSwgMzEgZGVsZXRpb25zKC0pCgpk
aWZmIC0tZ2l0IGEvbGlic3dzY2FsZS9vcHMuYyBiL2xpYnN3c2NhbGUvb3BzLmMKaW5kZXggMWY1
NTVlOTQ3OS4uYmUzZTk4NTNhOSAxMDA2NDQKLS0tIGEvbGlic3dzY2FsZS9vcHMuYworKysgYi9s
aWJzd3NjYWxlL29wcy5jCkBAIC0zMzEsNiArMzMxLDE5IEBAIHZvaWQgZmZfc3dzX29wX2xpc3Rf
dXBkYXRlX2NvbXBzKFN3c09wTGlzdCAqb3BzKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIAorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKKyAgICAgICAgICAgIG9w
LT5jb21wcy5mbGFnc1tpXSA9IFNXU19DT01QX0lERU5USVRZOworCisgICAgICAgICNkZWZpbmUg
Rk9SV0FSRChJLCBKLCBFWFBSKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIFN3c0NvbXBGbGFncyBmbGFncyA9IHByZXYuZmxhZ3NbSl07
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgb3AtPmNvbXBz
LmZsYWdzW0ldID0gbWVyZ2VfY29tcF9mbGFncyhvcC0+Y29tcHMuZmxhZ3NbSV0sIChFWFBSKSk7
ICBcCisgICAgICAgIH0gd2hpbGUgKDApCisKKyAgICAgICAgI2RlZmluZSBSRVNFVChJKSBkbyB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgb3AtPmNvbXBzLmZsYWdzW0ldID0gU1dTX0NPTVBfR0FSQkFHRTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBvcC0+Y29tcHMubWluW0ldID0gb3At
PmNvbXBzLm1heFtJXSA9IChBVlJhdGlvbmFsNjQpIHswfTsgICAgICAgICAgIFwKKyAgICAgICAg
fSB3aGlsZSAoMCkKKwogICAgICAgICBzd2l0Y2ggKG9wLT5vcCkgewogICAgICAgICBjYXNlIFNX
U19PUF9SRUFEOgogICAgICAgICAgICAgLyogQWN0aXZlIGNvbXBvbmVudHMgYXJlIHRha2VuIGZy
b20gdGhlIHVzZXItcHJvdmlkZWQgdmFsdWVzLApAQCAtMzY2LDI3ICszNzksMjcgQEAgdm9pZCBm
Zl9zd3Nfb3BfbGlzdF91cGRhdGVfY29tcHMoU3dzT3BMaXN0ICpvcHMpCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBTV1NfT1BfU1dBUF9CWVRFUzoKICAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgb3AtPmNvbXBzLmZsYWdz
W2ldID0gKHByZXYuZmxhZ3NbaV0gXiBTV1NfQ09NUF9TV0FQUEVEKSAmIFNXU19DT01QX0RJUlRZ
OwotICAgICAgICAgICAgICAgIG9wLT5jb21wcy5taW5baV0gICA9IHByZXYubWluW2ldOwotICAg
ICAgICAgICAgICAgIG9wLT5jb21wcy5tYXhbaV0gICA9IHByZXYubWF4W2ldOworICAgICAgICAg
ICAgICAgIEZPUldBUkQoaSwgaSwgKGZsYWdzIF4gU1dTX0NPTVBfU1dBUFBFRCkgJiBTV1NfQ09N
UF9ESVJUWSk7CisgICAgICAgICAgICAgICAgb3AtPmNvbXBzLm1pbltpXSA9IHByZXYubWluW2ld
OworICAgICAgICAgICAgICAgIG9wLT5jb21wcy5tYXhbaV0gPSBwcmV2Lm1heFtpXTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNXU19PUF9XUklURToK
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3AtPnJ3LmVsZW1zOyBpKyspCiAgICAg
ICAgICAgICAgICAgYXZfYXNzZXJ0MSghKHByZXYuZmxhZ3NbaV0gJiBTV1NfQ09NUF9HQVJCQUdF
KSk7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKLSAgICAgICAgICAg
ICAgICBvcC0+Y29tcHMuZmxhZ3NbaV0gPSBwcmV2LmZsYWdzW2ldOworICAgICAgICAgICAgICAg
IEZPUldBUkQoaSwgaSwgZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
U1dTX09QX0xTSElGVDoKICAgICAgICAgY2FzZSBTV1NfT1BfUlNISUZUOgogICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspCi0gICAgICAgICAgICAgICAgb3AtPmNvbXBzLmZs
YWdzW2ldID0gcHJldi5mbGFnc1tpXSAmIFNXU19DT01QX0RJUlRZOworICAgICAgICAgICAgICAg
IEZPUldBUkQoaSwgaSwgZmxhZ3MgJiBTV1NfQ09NUF9ESVJUWSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBTV1NfT1BfTUlOOgogICAgICAgICBjYXNlIFNXU19PUF9NQVg6IHsK
ICAgICAgICAgICAgIEFWUmF0aW9uYWw2NCAqYm91bmQgPSBvcC0+b3AgPT0gU1dTX09QX01JTiA/
IG9wLT5jb21wcy5tYXggOiBvcC0+Y29tcHMubWluOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCA0OyBpKyspIHsKLSAgICAgICAgICAgICAgICBvcC0+Y29tcHMuZmxhZ3NbaV0gPSBw
cmV2LmZsYWdzW2ldOworICAgICAgICAgICAgICAgIEZPUldBUkQoaSwgaSwgZmxhZ3MpOwogICAg
ICAgICAgICAgICAgIGlmIChvcC0+Y2xhbXAubGltaXRbaV0uZGVuKQogICAgICAgICAgICAgICAg
ICAgICBvcC0+Y29tcHMuZmxhZ3NbaV0gJj0gU1dTX0NPTVBfRElSVFk7CiAgICAgICAgICAgICAg
ICAgaWYgKCFib3VuZFtpXS5kZW4pIC8qIHJlc2V0IHVuZGVmaW5lZCBib3VuZHMgdG8ga25vd24g
cmFuZ2UgKi8KQEAgLTM5Niw5ICs0MDksOSBAQCB2b2lkIGZmX3N3c19vcF9saXN0X3VwZGF0ZV9j
b21wcyhTd3NPcExpc3QgKm9wcykKICAgICAgICAgfQogICAgICAgICBjYXNlIFNXU19PUF9ESVRI
RVI6CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewotICAgICAgICAg
ICAgICAgIG9wLT5jb21wcy5mbGFnc1tpXSA9IHByZXYuZmxhZ3NbaV07Ci0gICAgICAgICAgICAg
ICAgb3AtPmNvbXBzLm1pbltpXSAgID0gcHJldi5taW5baV07Ci0gICAgICAgICAgICAgICAgb3At
PmNvbXBzLm1heFtpXSAgID0gcHJldi5tYXhbaV07CisgICAgICAgICAgICAgICAgRk9SV0FSRChp
LCBpLCBmbGFncyk7CisgICAgICAgICAgICAgICAgb3AtPmNvbXBzLm1pbltpXSA9IHByZXYubWlu
W2ldOworICAgICAgICAgICAgICAgIG9wLT5jb21wcy5tYXhbaV0gPSBwcmV2Lm1heFtpXTsKICAg
ICAgICAgICAgICAgICBpZiAob3AtPmRpdGhlci55X29mZnNldFtpXSA8IDApCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIC8qIFN0cmlwIHplcm8gZmxhZyBi
ZWNhdXNlIG9mIHRoZSBub256ZXJvIGRpdGhlcmluZyBvZmZzZXQgKi8KQEAgLTQxMiwyNCArNDI1
LDIxIEBAIHZvaWQgZmZfc3dzX29wX2xpc3RfdXBkYXRlX2NvbXBzKFN3c09wTGlzdCAqb3BzKQog
ICAgICAgICAgICAgICAgIGNvbnN0IGludCBwYXR0ZXJuID0gb3AtPnBhY2sucGF0dGVybltpXTsK
ICAgICAgICAgICAgICAgICBpZiAocGF0dGVybikgewogICAgICAgICAgICAgICAgICAgICBhdl9h
c3NlcnQxKHBhdHRlcm4gPCAzMik7Ci0gICAgICAgICAgICAgICAgICAgIG9wLT5jb21wcy5mbGFn
c1tpXSA9IHByZXYuZmxhZ3NbMF0gJiBTV1NfQ09NUF9ESVJUWTsKLSAgICAgICAgICAgICAgICAg
ICAgb3AtPmNvbXBzLm1pbltpXSAgID0gUSgwKTsKLSAgICAgICAgICAgICAgICAgICAgb3AtPmNv
bXBzLm1heFtpXSAgID0gUSgoMVVMTCA8PCBwYXR0ZXJuKSAtIDEpOworICAgICAgICAgICAgICAg
ICAgICBGT1JXQVJEKGksIDAsIGZsYWdzICYgU1dTX0NPTVBfRElSVFkpOworICAgICAgICAgICAg
ICAgICAgICBvcC0+Y29tcHMubWluW2ldID0gUSgwKTsKKyAgICAgICAgICAgICAgICAgICAgb3At
PmNvbXBzLm1heFtpXSA9IFEoKDFVTEwgPDwgcGF0dGVybikgLSAxKTsKICAgICAgICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgb3AtPmNvbXBzLmZsYWdzW2ldID0gU1dTX0NP
TVBfR0FSQkFHRTsKKyAgICAgICAgICAgICAgICAgICAgUkVTRVQoaSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTV1NfT1BfUEFDSzogewotICAgICAg
ICAgICAgU3dzQ29tcEZsYWdzIGZsYWdzID0gU1dTX0NPTVBfSURFTlRJVFk7CisgICAgICAgIGNh
c2UgU1dTX09QX1BBQ0s6CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykg
ewogICAgICAgICAgICAgICAgIGlmIChvcC0+cGFjay5wYXR0ZXJuW2ldKQotICAgICAgICAgICAg
ICAgICAgICBmbGFncyA9IG1lcmdlX2NvbXBfZmxhZ3MoZmxhZ3MsIHByZXYuZmxhZ3NbaV0pOwor
ICAgICAgICAgICAgICAgICAgICBGT1JXQVJEKDAsIGksIGZsYWdzICYgU1dTX0NPTVBfRElSVFkp
OwogICAgICAgICAgICAgICAgIGlmIChpID4gMCkgLyogY2xlYXIgcmVtYWluaW5nIGNvbXBzIGZv
ciBzYW5pdHkgKi8KLSAgICAgICAgICAgICAgICAgICAgb3AtPmNvbXBzLmZsYWdzW2ldID0gU1dT
X0NPTVBfR0FSQkFHRTsKKyAgICAgICAgICAgICAgICAgICAgUkVTRVQoaSk7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBvcC0+Y29tcHMuZmxhZ3NbMF0gPSBmbGFncyAmIFNXU19DT01QX0RJ
UlRZOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgY2FzZSBTV1NfT1Bf
Q0xFQVI6CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewogICAgICAg
ICAgICAgICAgIGlmIChTV1NfQ09NUF9URVNUKG9wLT5jbGVhci5tYXNrLCBpKSkgewpAQCAtNDM5
LDE3ICs0NDksMTcgQEAgdm9pZCBmZl9zd3Nfb3BfbGlzdF91cGRhdGVfY29tcHMoU3dzT3BMaXN0
ICpvcHMpCiAgICAgICAgICAgICAgICAgICAgIGlmIChvcC0+Y2xlYXIudmFsdWVbaV0uZGVuID09
IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICBvcC0+Y29tcHMuZmxhZ3NbaV0gfD0gU1dTX0NP
TVBfRVhBQ1Q7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
b3AtPmNvbXBzLmZsYWdzW2ldID0gcHJldi5mbGFnc1tpXTsKKyAgICAgICAgICAgICAgICAgICAg
Rk9SV0FSRChpLCBpLCBmbGFncyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU1dTX09QX1NXSVpaTEU6CiAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKLSAgICAgICAgICAgICAgICBvcC0+Y29t
cHMuZmxhZ3NbaV0gPSBwcmV2LmZsYWdzW29wLT5zd2l6emxlLmluW2ldXTsKKyAgICAgICAgICAg
ICAgICBGT1JXQVJEKGksIG9wLT5zd2l6emxlLmluW2ldLCBmbGFncyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBTV1NfT1BfQ09OVkVSVDoKICAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgb3AtPmNvbXBzLmZsYWdzW2ld
ID0gcHJldi5mbGFnc1tpXTsKKyAgICAgICAgICAgICAgICBGT1JXQVJEKGksIGksIGZsYWdzKTsK
ICAgICAgICAgICAgICAgICBpZiAoIShwcmV2LmZsYWdzW2ldICYgU1dTX0NPTVBfRVhBQ1QpIHx8
IG9wLT5jb252ZXJ0LmV4cGFuZCkKICAgICAgICAgICAgICAgICAgICAgb3AtPmNvbXBzLmZsYWdz
W2ldICY9IFNXU19DT01QX0RJUlRZOwogICAgICAgICAgICAgICAgIGlmIChmZl9zd3NfcGl4ZWxf
dHlwZV9pc19pbnQob3AtPmNvbnZlcnQudG8pKQpAQCAtNDU4LDcgKzQ2OCw2IEBAIHZvaWQgZmZf
c3dzX29wX2xpc3RfdXBkYXRlX2NvbXBzKFN3c09wTGlzdCAqb3BzKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgU1dTX09QX0xJTkVBUjoKICAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgNDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgU3dzQ29tcEZsYWdzIGZsYWdzID0g
U1dTX0NPTVBfSURFTlRJVFk7CiAgICAgICAgICAgICAgICAgQVZSYXRpb25hbDY0IG1pbiA9IFEo
MCksIG1heCA9IFEoMCk7CiAgICAgICAgICAgICAgICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyBqKyspIHsKQEAgLTQ2NiwzMyArNDc1
LDMyIEBAIHZvaWQgZmZfc3dzX29wX2xpc3RfdXBkYXRlX2NvbXBzKFN3c09wTGlzdCAqb3BzKQog
ICAgICAgICAgICAgICAgICAgICBBVlJhdGlvbmFsNjQgbWluayA9IGF2X211bF9xNjQocHJldi5t
aW5bal0sIGspOwogICAgICAgICAgICAgICAgICAgICBBVlJhdGlvbmFsNjQgbWF4ayA9IGF2X211
bF9xNjQocHJldi5tYXhbal0sIGspOwogICAgICAgICAgICAgICAgICAgICBpZiAoay5udW0pIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gbWVyZ2VfY29tcF9mbGFncyhmbGFncywg
cHJldi5mbGFnc1tqXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBGT1JXQVJEKGksIGosIGZs
YWdzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrLmRlbiAhPSAxKSAvKiBmcmFjdGlv
bmFsIGNvZWZmaWNpZW50ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgJj0g
flNXU19DT01QX0VYQUNUOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wLT5jb21wcy5m
bGFnc1tpXSAmPSB+U1dTX0NPTVBfRVhBQ1Q7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ay5udW0gPCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGU1dBUChBVlJhdGlvbmFs
NjQsIG1pbmssIG1heGspOwogICAgICAgICAgICAgICAgICAgICAgICAgbWluID0gYXZfYWRkX3E2
NChtaW4sIG1pbmspOwogICAgICAgICAgICAgICAgICAgICAgICAgbWF4ID0gYXZfYWRkX3E2NCht
YXgsIG1heGspOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdCB8fCBhdl9jbXBf
cTY0KGssIFEoMSkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICY9IFNXU19D
T01QX0RJUlRZOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wLT5jb21wcy5mbGFnc1tp
XSAmPSBTV1NfQ09NUF9ESVJUWTsKICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgaWYgKG9wLT5saW4ubVtpXVs0XS5udW0pIHsgLyogbm9uemVybyBvZmZzZXQgKi8KLSAg
ICAgICAgICAgICAgICAgICAgZmxhZ3MgJj0gflNXU19DT01QX1pFUk8gJiBTV1NfQ09NUF9ESVJU
WTsKKyAgICAgICAgICAgICAgICAgICAgb3AtPmNvbXBzLmZsYWdzW2ldICY9IH5TV1NfQ09NUF9a
RVJPICYgU1dTX0NPTVBfRElSVFk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChvcC0+bGluLm1b
aV1bNF0uZGVuICE9IDEpIC8qIGZyYWN0aW9uYWwgb2Zmc2V0ICovCi0gICAgICAgICAgICAgICAg
ICAgICAgICBmbGFncyAmPSB+U1dTX0NPTVBfRVhBQ1Q7CisgICAgICAgICAgICAgICAgICAgICAg
ICBvcC0+Y29tcHMuZmxhZ3NbaV0gJj0gflNXU19DT01QX0VYQUNUOwogICAgICAgICAgICAgICAg
ICAgICBtaW4gPSBhdl9hZGRfcTY0KG1pbiwgb3AtPmxpbi5tW2ldWzRdKTsKICAgICAgICAgICAg
ICAgICAgICAgbWF4ID0gYXZfYWRkX3E2NChtYXgsIG9wLT5saW4ubVtpXVs0XSk7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9wLT5jb21wcy5mbGFnc1tpXSA9IGZsYWdzOwog
ICAgICAgICAgICAgICAgIG9wLT5jb21wcy5taW5baV0gPSBtaW47CiAgICAgICAgICAgICAgICAg
b3AtPmNvbXBzLm1heFtpXSA9IG1heDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFNXU19PUF9TQ0FMRToKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgNDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgb3AtPmNvbXBzLmZsYWdzW2ldID0gcHJl
di5mbGFnc1tpXSAmIFNXU19DT01QX0RJUlRZOworICAgICAgICAgICAgICAgIEZPUldBUkQoaSwg
aSwgZmxhZ3MgJiBTV1NfQ09NUF9ESVJUWSk7CiAgICAgICAgICAgICAgICAgaWYgKG9wLT5zY2Fs
ZS5mYWN0b3IuZGVuICE9IDEpIC8qIGZyYWN0aW9uYWwgc2NhbGUgKi8KICAgICAgICAgICAgICAg
ICAgICAgb3AtPmNvbXBzLmZsYWdzW2ldICY9IH5TV1NfQ09NUF9FWEFDVDsKICAgICAgICAgICAg
ICAgICBpZiAob3AtPnNjYWxlLmZhY3Rvci5udW0gPCAwKQpAQCAtNTIxLDcgKzUyOSw3IEBAIHZv
aWQgZmZfc3dzX29wX2xpc3RfdXBkYXRlX2NvbXBzKFN3c09wTGlzdCAqb3BzKQogCiAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoIW5lZWRfb3V0
W2ldKQotICAgICAgICAgICAgICAgIG9wLT5jb21wcy5mbGFnc1tpXSA9IFNXU19DT01QX0dBUkJB
R0U7CisgICAgICAgICAgICAgICAgUkVTRVQoaSk7CiAgICAgICAgIH0KIAogICAgICAgICBzd2l0
Y2ggKG9wLT5vcCkgewpAQCAtNTc1LDYgKzU4Myw5IEBAIHZvaWQgZmZfc3dzX29wX2xpc3RfdXBk
YXRlX2NvbXBzKFN3c09wTGlzdCAqb3BzKQogCiAgICAgICAgIG1lbWNweShuZWVkX291dCwgbmVl
ZF9pbiwgc2l6ZW9mKG5lZWRfaW4pKTsKICAgICB9CisKKyAgICAjdW5kZWYgRk9SV0FSRAorICAg
ICN1bmRlZiBSRVNFVAogfQogCiBzdGF0aWMgdm9pZCBvcF91bmluaXQoU3dzT3AgKm9wKQotLSAK
Mi41Mi4wCgoKRnJvbSAzMWZiYjJlNWI1MDY5OWUyMjYwZDNjOTNlM2ViNDM1ZjZkZGIyYmQzIE1v
biBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtsYXMgSGFhcyA8Z2l0QGhhYXNuLmRldj4K
RGF0ZTogVGh1LCAyNSBKdW4gMjAyNiAxODozNjo0NCArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMDMv
MThdIHN3c2NhbGUvb3BzOiBzb2x2ZSBmb3IgY29tcG9uZW50IGRlcGVuZGVuY2llcwoKTmVlZGVk
IHRvIGRldGVybWluZSByZXZlcnNlIGRlcGVuZGVuY2llcyBvZiBkaWZmZXJlbnQgaW5wdXQgcGxh
bmVzLCBmb3IKYXBwcm9wcmlhdGVseSBzcGxpdHRpbmcgb3AgbGlzdHMgaW52b2x2aW5nIHN1YnNh
bXBsZWQgcGxhbmVzLgoKR2VuZXJhdGVzIGJlbmlnbiBkaWZmcyB0aGF0IGp1c3QgcmVmbGVjdCB0
aGUgbmV3IGFkZGl0aW9uLCBlLmcuOgoKIHl1dmE0NDRwIDE2eDE2IC0+IHJnYjI0IDE2eDE2Ogog
ICBbIHU4ID09PVhdIFNXU19PUF9SRUFEICAgICAgICAgOiAzIGVsZW0ocykgcGxhbmFyID4+IDAK
ICAgICBtaW46IHswIDAgMCBffSwgbWF4OiB7MjU1IDI1NSAyNTUgX30KKyAgICBpbnB1dHM6IHt4
IHkgeiBffSwgb3V0cHV0czoge3h5eiB5eiB4eSBffQogICBbIHU4ID09PVhdIFNXU19PUF9DT05W
RVJUICAgICAgOiB1OCAtPiBmMzIKICAgICBtaW46IHswIDAgMCBffSwgbWF4OiB7MjU1IDI1NSAy
NTUgX30KKyAgICBpbnB1dHM6IHt4IHkgeiBffSwgb3V0cHV0czoge3h5eiB5eiB4eSBffQogICBb
ZjMyIC4uLlhdIFNXU19PUF9MSU5FQVIgICAgICAgOiBtYXRyaXgzK29mZjMgW1s4NS83MyAwIDEu
NTk2MDI3IDAgLTIyMi45MjE1NjZdIFs4NS83MyAtMC4zOTE3NjIgLTAuODEyOTY4IDAgMTM1LjU3
NTI5NV0gWzg1LzczIDIuMDE3MjMyIDAgMCAtMjc2LjgzNTg1MV0gWzAgMCAwIDEgMF1dCiAgICAg
bWluOiB7LTIyMi45MjE1NjYgLTE3MS42MzA4MzkgLTI3Ni44MzU4NTEgX30sIG1heDogezQ4MC45
ODMwNzMgNDMyLjQ5MzEwMyA1MzQuNDc2MTUzIF99CisgICAgaW5wdXRzOiB7eHogeHl6IHh5IF99
LCBvdXRwdXRzOiB7eCB5IHogX30KICAgW2YzMiAuLi5YXSBTV1NfT1BfRElUSEVSICAgICAgIDog
MTZ4MTYgbWF0cml4ICsgezAgMyAyIC0xfQogICAgIG1pbjogey0yMjIuOTE5NjEyIC0xNzEuNjI4
ODg2IC0yNzYuODMzODk4IF99LCBtYXg6IHs0ODEuOTgxMTIwIDQzMy40OTExNTAgNTM1LjQ3NDIw
MCBffQorICAgIGlucHV0czoge3h6IHh5eiB4eSBffSwgb3V0cHV0czoge3ggeSB6IF99CiAgIFtm
MzIgLi4uWF0gU1dTX09QX01BWCAgICAgICAgICA6IHswIDAgMCBffSA8PSB4CiAgICAgbWluOiB7
MCAwIDAgX30sIG1heDogezQ4MS45ODExMjAgNDMzLjQ5MTE1MCA1MzUuNDc0MjAwIF99CisgICAg
aW5wdXRzOiB7eHogeHl6IHh5IF99LCBvdXRwdXRzOiB7eCB5IHogX30KICAgW2YzMiAuLi5YXSBT
V1NfT1BfTUlOICAgICAgICAgIDogeCA8PSB7MjU1IDI1NSAyNTUgX30KICAgICBtaW46IHswIDAg
MCBffSwgbWF4OiB7MjU1IDI1NSAyNTUgX30KKyAgICBpbnB1dHM6IHt4eiB4eXogeHkgX30sIG91
dHB1dHM6IHt4IHkgeiBffQogICBbZjMyICsrK1hdIFNXU19PUF9DT05WRVJUICAgICAgOiBmMzIg
LT4gdTgKICAgICBtaW46IHswIDAgMCBffSwgbWF4OiB7MjU1IDI1NSAyNTUgX30KKyAgICBpbnB1
dHM6IHt4eiB4eXogeHkgX30sIG91dHB1dHM6IHt4IHkgeiBffQogICBbIHU4IFhYWFhdIFNXU19P
UF9XUklURSAgICAgICAgOiAzIGVsZW0ocykgcGFja2VkID4+IDAKICAgICAoJ1gnIHVudXNlZCwg
J3onIGJ5dGVzd2FwcGVkLCAnPScgY29waWVkLCAnJCcgY29uc3QsICcrJyBpbnRlZ2VyLCAnMCcg
emVybykKClNwb25zb3JlZC1ieTogU292ZXJlaWduIFRlY2ggRnVuZApTaWduZWQtb2ZmLWJ5OiBO
aWtsYXMgSGFhcyA8Z2l0QGhhYXNuLmRldj4KLS0tCiBsaWJzd3NjYWxlL29wcy5jICAgICAgICAg
ICAgfCA0NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tCiBsaWJzd3NjYWxl
L29wcy5oICAgICAgICAgICAgfCAgMyArKysKIHRlc3RzL3JlZi9mYXRlL3N3cy1vcHMtbGlzdCB8
ICAyICstCiAzIGZpbGVzIGNoYW5nZWQsIDQzIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0p
CgpkaWZmIC0tZ2l0IGEvbGlic3dzY2FsZS9vcHMuYyBiL2xpYnN3c2NhbGUvb3BzLmMKaW5kZXgg
YmUzZTk4NTNhOS4uMjE0NjJkZjM4NiAxMDA2NDQKLS0tIGEvbGlic3dzY2FsZS9vcHMuYworKysg
Yi9saWJzd3NjYWxlL29wcy5jCkBAIC0yOTIsNyArMjkyLDggQEAgc3RhdGljIHZvaWQgYXBwbHlf
ZmlsdGVyX3dlaWdodHMoU3dzQ29tcHMgKmNvbXBzLCBjb25zdCBTd3NDb21wcyAqcHJldiwKICAg
ICBjb25zdCBBVlJhdGlvbmFsNjQgcG9zdyA9IHsgd2VpZ2h0cy0+c3VtX3Bvc2l0aXZlLCBTV1Nf
RklMVEVSX1NDQUxFIH07CiAgICAgY29uc3QgQVZSYXRpb25hbDY0IG5lZ3cgPSB7IHdlaWdodHMt
PnN1bV9uZWdhdGl2ZSwgU1dTX0ZJTFRFUl9TQ0FMRSB9OwogICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgNDsgaSsrKSB7Ci0gICAgICAgIGNvbXBzLT5mbGFnc1tpXSA9IHByZXYtPmZsYWdzW2ldICYg
U1dTX0NPTVBfRElSVFk7CisgICAgICAgIGNvbXBzLT5mbGFnc1tpXSAgPSBwcmV2LT5mbGFnc1tp
XSAmIFNXU19DT01QX0RJUlRZOworICAgICAgICBjb21wcy0+ZGVwX2luW2ldID0gcHJldi0+ZGVw
X2luW2ldOwogICAgICAgICAvKiBPbmx5IHBvaW50IHNhbXBsaW5nIHByZXNlcnZlcyBleGFjdG5l
c3MgKi8KICAgICAgICAgaWYgKHdlaWdodHMtPmZpbHRlcl9zaXplICE9IDEpCiAgICAgICAgICAg
ICBjb21wcy0+ZmxhZ3NbaV0gJj0gflNXU19DT01QX0VYQUNUOwpAQCAtMzMxLDE3ICszMzIsMjEg
QEAgdm9pZCBmZl9zd3Nfb3BfbGlzdF91cGRhdGVfY29tcHMoU3dzT3BMaXN0ICpvcHMpCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
NDsgaSsrKQotICAgICAgICAgICAgb3AtPmNvbXBzLmZsYWdzW2ldID0gU1dTX0NPTVBfSURFTlRJ
VFk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAgICAgICBv
cC0+Y29tcHMuZmxhZ3NbaV0gID0gU1dTX0NPTVBfSURFTlRJVFk7CisgICAgICAgICAgICBvcC0+
Y29tcHMuZGVwX2luW2ldID0gU1dTX0NPTVBfTk9ORTsKKyAgICAgICAgfQogCiAgICAgICAgICNk
ZWZpbmUgRk9SV0FSRChJLCBKLCBFWFBSKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgICAgICAgICAgIFN3c0NvbXBGbGFncyBmbGFncyA9IHByZXYuZmxh
Z3NbSl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgb3At
PmNvbXBzLmZsYWdzW0ldID0gbWVyZ2VfY29tcF9mbGFncyhvcC0+Y29tcHMuZmxhZ3NbSV0sIChF
WFBSKSk7ICBcCisgICAgICAgICAgICBvcC0+Y29tcHMuZGVwX2luW0ldIHw9IHByZXYuZGVwX2lu
W0pdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgfSB3aGlsZSAoMCkK
IAogICAgICAgICAjZGVmaW5lIFJFU0VUKEkpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBvcC0+Y29tcHMuZmxhZ3Nb
SV0gPSBTV1NfQ09NUF9HQVJCQUdFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICAgICAgICAgIG9wLT5jb21wcy5taW5bSV0gPSBvcC0+Y29tcHMubWF4W0ldID0gKEFWUmF0aW9u
YWw2NCkgezB9OyAgICAgICAgICAgXAorICAgICAgICAgICAgb3AtPmNvbXBzLmRlcF9pbltJXSA9
IFNXU19DT01QX05PTkU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAg
IH0gd2hpbGUgKDApCiAKICAgICAgICAgc3dpdGNoIChvcC0+b3ApIHsKQEAgLTM2MCw2ICszNjUs
NyBAQCB2b2lkIGZmX3N3c19vcF9saXN0X3VwZGF0ZV9jb21wcyhTd3NPcExpc3QgKm9wcykKICAg
ICAgICAgICAgICAgICBvcC0+Y29tcHMuZmxhZ3NbaV0gPSBvcHMtPmNvbXBzX3NyYy5mbGFnc1tp
ZHhdICYgU1dTX0NPTVBfRElSVFk7CiAgICAgICAgICAgICAgICAgb3AtPmNvbXBzLm1pbltpXSAg
ID0gb3BzLT5jb21wc19zcmMubWluW2lkeF07CiAgICAgICAgICAgICAgICAgb3AtPmNvbXBzLm1h
eFtpXSAgID0gb3BzLT5jb21wc19zcmMubWF4W2lkeF07CisgICAgICAgICAgICAgICAgb3AtPmNv
bXBzLmRlcF9pbltpXSA9IFNXU19DT01QKGlkeCk7CiAKICAgICAgICAgICAgICAgICAvKioKICAg
ICAgICAgICAgICAgICAgKiBEb24ndCBtYXJrIHBhY2tlZCBvciBmcmFjdGlvbmFsIHJlYWRzIGFz
IGEgY29weSwgYmVjYXVzZSB0aGUKQEAgLTUyMSwxMyArNTI3LDE1IEBAIHZvaWQgZmZfc3dzX29w
X2xpc3RfdXBkYXRlX2NvbXBzKFN3c09wTGlzdCAqb3BzKQogICAgICAgICBwcmV2ID0gb3AtPmNv
bXBzOwogICAgIH0KIAotICAgIC8qIEJhY2t3YXJkcyBwYXNzLCBzb2x2ZXMgZm9yIGNvbXBvbmVu
dCBkZXBlbmRlbmNpZXMgKi8KLSAgICBib29sIG5lZWRfb3V0WzRdID0geyBmYWxzZSwgZmFsc2Us
IGZhbHNlLCBmYWxzZSB9OworICAgIC8qIEJhY2t3YXJkcyBwYXNzLCBzb2x2ZXMgZm9yIG91dHB1
dCBjb21wb25lbnQgZGVwZW5kZW5jaWVzICovCisgICAgU3dzQ29tcE1hc2sgbmVlZF9vdXRbNF0g
PSB7MH07CisKICAgICBmb3IgKGludCBuID0gb3BzLT5udW1fb3BzIC0gMTsgbiA+PSAwOyBuLS0p
IHsKICAgICAgICAgU3dzT3AgKm9wID0gJm9wcy0+b3BzW25dOwotICAgICAgICBib29sIG5lZWRf
aW5bNF0gPSB7IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlIH07CisgICAgICAgIFN3c0NvbXBN
YXNrIG5lZWRfaW5bNF0gPSB7MH07CiAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBp
KyspIHsKKyAgICAgICAgICAgIG9wLT5jb21wcy5kZXBfb3V0W2ldID0gbmVlZF9vdXRbaV07CiAg
ICAgICAgICAgICBpZiAoIW5lZWRfb3V0W2ldKQogICAgICAgICAgICAgICAgIFJFU0VUKGkpOwog
ICAgICAgICB9CkBAIC01MzYsNyArNTQ0LDcgQEAgdm9pZCBmZl9zd3Nfb3BfbGlzdF91cGRhdGVf
Y29tcHMoU3dzT3BMaXN0ICpvcHMpCiAgICAgICAgIGNhc2UgU1dTX09QX1JFQUQ6CiAgICAgICAg
IGNhc2UgU1dTX09QX1dSSVRFOgogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcC0+
cncuZWxlbXM7IGkrKykKLSAgICAgICAgICAgICAgICBuZWVkX2luW2ldID0gb3AtPm9wID09IFNX
U19PUF9XUklURTsKKyAgICAgICAgICAgICAgICBuZWVkX2luW2ldID0gKG9wLT5vcCA9PSBTV1Nf
T1BfV1JJVEUpID8gU1dTX0NPTVAoaSkgOiAwOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IG9w
LT5ydy5lbGVtczsgaSA8IDQ7IGkrKykKICAgICAgICAgICAgICAgICBuZWVkX2luW2ldID0gbmVl
ZF9vdXRbaV07CiAgICAgICAgICAgICBicmVhazsKQEAgLTc4OSw2ICs3OTcsMTcgQEAgc3RhdGlj
IGNoYXIgZGVzY3JpYmVfY29tcF9mbGFncyhTd3NDb21wRmxhZ3MgZmxhZ3MpCiAgICAgICAgIHJl
dHVybiAnLic7CiB9CiAKK3N0YXRpYyB2b2lkIHByaW50X2RlcHMoQVZCUHJpbnQgKmJwLCBjb25z
dCBTd3NDb21wTWFzayAqZGVwcykKK3sKKyAgICBhdl9icHJpbnRmKGJwLCAieyIpOworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAgIGlmIChpKQorICAgICAgICAgICAg
YXZfYnByaW50ZihicCwgIiAiKTsKKyAgICAgICAgYXZfYnByaW50ZihicCwgIiVzIiwgZGVwc1tp
XSA/IGZmX3N3c19jb21wX21hc2tfc3RyKGRlcHNbaV0pIDogIl8iKTsKKyAgICB9CisgICAgYXZf
YnByaW50ZihicCwgIn0iKTsKK30KKwogc3RhdGljIHZvaWQgcHJpbnRfcShBVkJQcmludCAqYnAs
IGNvbnN0IEFWUmF0aW9uYWw2NCBxKQogewogICAgIGlmICghcS5kZW4pIHsKQEAgLTk3Niw2ICs5
OTUsMTkgQEAgdm9pZCBmZl9zd3Nfb3BfbGlzdF9wcmludCh2b2lkICpsb2csIGludCBsZXYsIGlu
dCBsZXZfZXh0cmEsCiAgICAgICAgICAgICBhdl9sb2cobG9nLCBsZXZfZXh0cmEsICIlc1xuIiwg
YnAuc3RyKTsKICAgICAgICAgfQogCisgICAgICAgIGJvb2wgaGFzX2RlcHMgPSBmYWxzZTsKKyAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspCisgICAgICAgICAgICBoYXNfZGVwcyB8
PSBvcC0+Y29tcHMuZGVwX2luW2ldIHx8IG9wLT5jb21wcy5kZXBfb3V0W2ldOworICAgICAgICBp
ZiAoaGFzX2RlcHMpIHsKKyAgICAgICAgICAgIGF2X2JwcmludF9jbGVhcigmYnApOworICAgICAg
ICAgICAgYXZfYnByaW50ZigmYnAsICIgICAgaW5wdXRzOiAiKTsKKyAgICAgICAgICAgIHByaW50
X2RlcHMoJmJwLCBvcC0+Y29tcHMuZGVwX2luKTsKKyAgICAgICAgICAgIGF2X2JwcmludGYoJmJw
LCAiLCBvdXRwdXRzOiAiKTsKKyAgICAgICAgICAgIHByaW50X2RlcHMoJmJwLCBvcC0+Y29tcHMu
ZGVwX291dCk7CisgICAgICAgICAgICBhdl9hc3NlcnQwKGF2X2JwcmludF9pc19jb21wbGV0ZSgm
YnApKTsKKyAgICAgICAgICAgIGF2X2xvZyhsb2csIGxldl9leHRyYSwgIiVzXG4iLCBicC5zdHIp
OworICAgICAgICB9CisKICAgICB9CiAKICAgICBhdl9sb2cobG9nLCBsZXYsICIgICAgKCdYJyB1
bnVzZWQsICd6JyBieXRlc3dhcHBlZCwgJz0nIGNvcGllZCwgJyQnIGNvbnN0LCAnKycgaW50ZWdl
ciwgJzAnIHplcm8pXG4iKTsKZGlmZiAtLWdpdCBhL2xpYnN3c2NhbGUvb3BzLmggYi9saWJzd3Nj
YWxlL29wcy5oCmluZGV4IDY3ZGQwNGQyMjcuLjAyYzEyMjY1NWEgMTAwNjQ0Ci0tLSBhL2xpYnN3
c2NhbGUvb3BzLmgKKysrIGIvbGlic3dzY2FsZS9vcHMuaApAQCAtODUsNiArODUsOSBAQCB0eXBl
ZGVmIHN0cnVjdCBTd3NDb21wcyB7CiAgICAgLyogS2VlcHMgdHJhY2sgb2YgdGhlIGtub3duIHBv
c3NpYmxlIHZhbHVlIHJhbmdlLCBvciB7MCwgMH0gZm9yIHVuZGVmaW5lZAogICAgICAqIG9yICh1
bmtub3duIHJhbmdlKSBmbG9hdGluZyBwb2ludCBpbnB1dHMgKi8KICAgICBBVlJhdGlvbmFsNjQg
bWluWzRdLCBtYXhbNF07CisKKyAgICAvKiBLZWVwcyB0cmFjayBvZiBpbnB1dCAoZm9yd2FyZCkg
YW5kIG91dHB1dCAocmV2ZXJzZSkgZGVwZW5kZW5jaWVzICovCisgICAgU3dzQ29tcE1hc2sgZGVw
X2luWzRdLCBkZXBfb3V0WzRdOwogfSBTd3NDb21wczsKIAogdHlwZWRlZiBlbnVtIFN3c1JlYWRX
cml0ZU1vZGUgewpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVmL2ZhdGUvc3dzLW9wcy1saXN0IGIvdGVz
dHMvcmVmL2ZhdGUvc3dzLW9wcy1saXN0CmluZGV4IDBmYjg4ZDY1ZGEuLjhiOTJmZjYwYjYgMTAw
NjQ0Ci0tLSBhL3Rlc3RzL3JlZi9mYXRlL3N3cy1vcHMtbGlzdAorKysgYi90ZXN0cy9yZWYvZmF0
ZS9zd3Mtb3BzLWxpc3QKQEAgLTEgKzEgQEAKLTNhOGYzYmNjZDdjMWY4NDA3ZWU3YzQwZmQyNmQ4
NmNjCis2MzQ0OGE5ZDczNDVhYzYxYmVkY2I0NzkwNDUzNThmMwotLSAKMi41Mi4wCgoKRnJvbSA1
ZDMwMWU1ZDgxMWQ0NTMwYTM5OWNjMjUwNTUxNjIyZDI0MmI5N2Q0IE1vbiBTZXAgMTcgMDA6MDA6
MDAgMjAwMQpGcm9tOiBOaWtsYXMgSGFhcyA8Z2l0QGhhYXNuLmRldj4KRGF0ZTogRnJpLCAxNyBK
dWwgMjAyNiAxMjo0MTo0MyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMDQvMThdIHN3c2NhbGUvb3Bz
OiByZW1vdmUgU3dzTGluZWFyT3AubWFzawoKVGhpcyB3YXMgb3JpZ2luYWxseSBpbnRyb2R1Y2Vk
IHRvIG1ha2UgbWF0Y2hpbmcgbGluZWFyIG9wcyBhZ2FpbnN0CmltcGxlbWVudGF0aW9ucyBmYXN0
ZXIuIEhvd2V2ZXIsIHNpbmNlIHRoaXMgaXMgbm93IGhhbmRsZWQgb24gdGhlIHVvcHMKbGV2ZWws
IHRoZXJlIGlzIG5vIG1vcmUgcmVhc29uIHRvIGNhcnJ5IHRoaXMgbWV0YWRhdGEgb24gdGhlIG9w
cyBsZXZlbC4KClNpbXBsaWZpZXMgYSBsb3Qgb2YgcGxhY2VzIGluIHRoZSBjb2RlLiBJdCB3aWxs
IHNpbXBsaWZ5IGV2ZW4gbW9yZSwgb25jZQp0aGUgbGluZWFyIG9wdGltaXphdGlvbnMgYXJlIG1v
dmVkIHRvIHRoZSB1b3BzIGxldmVsLgoKU3BvbnNvcmVkLWJ5OiBTb3ZlcmVpZ24gVGVjaCBGdW5k
ClNpZ25lZC1vZmYtYnk6IE5pa2xhcyBIYWFzIDxnaXRAaGFhc24uZGV2PgotLS0KIGxpYnN3c2Nh
bGUvYWFyY2g2NC9vcHNfaW1wbF9jb252LmMgfCAgMyArKy0KIGxpYnN3c2NhbGUvZm9ybWF0LmMg
ICAgICAgICAgICAgICAgfCAgNyArLS0tLS0tCiBsaWJzd3NjYWxlL29wcy5oICAgICAgICAgICAg
ICAgICAgIHwgIDggKy0tLS0tLS0KIGxpYnN3c2NhbGUvb3BzX29wdGltaXplci5jICAgICAgICAg
fCAxNyArKysrKysrLS0tLS0tLS0tLQogbGlic3dzY2FsZS91b3BzLmMgICAgICAgICAgICAgICAg
ICB8ICAzICsrLQogNSBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAyNSBkZWxldGlv
bnMoLSkKCmRpZmYgLS1naXQgYS9saWJzd3NjYWxlL2FhcmNoNjQvb3BzX2ltcGxfY29udi5jIGIv
bGlic3dzY2FsZS9hYXJjaDY0L29wc19pbXBsX2NvbnYuYwppbmRleCAyMTM2MGU1MWM3Li5kYWVi
YWM5ZjA5IDEwMDY0NAotLS0gYS9saWJzd3NjYWxlL2FhcmNoNjQvb3BzX2ltcGxfY29udi5jCisr
KyBiL2xpYnN3c2NhbGUvYWFyY2g2NC9vcHNfaW1wbF9jb252LmMKQEAgLTI2OCw4ICsyNjgsOSBA
QCBzdGF0aWMgaW50IGNvbnZlcnRfdG9fYWFyY2g2NF9pbXBsKFN3c0NvbnRleHQgKmN0eCwgY29u
c3QgU3dzT3BMaXN0ICpvcHMsIGludCBuLAogICAgIGNhc2UgU1dTX1VPUF9MSU5FQVI6CiAgICAg
Y2FzZSBTV1NfVU9QX0xJTkVBUl9GTUE6CiAgICAgICAgIG91dC0+bWFzayA9IDA7CisgICAgICAg
IGNvbnN0IHVpbnQzMl90IGxpbl9tYXNrID0gZmZfc3dzX2xpbmVhcl9tYXNrKCZvcC0+bGluKTsK
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSAgICAgICAgICAgIGlmICgh
U1dTX09QX05FRURFRChvcCwgaSkgfHwgIShvcC0+bGluLm1hc2sgJiBTV1NfTUFTS19ST1coaSkp
KSB7CisgICAgICAgICAgICBpZiAoIVNXU19PUF9ORUVERUQob3AsIGkpIHx8ICEobGluX21hc2sg
JiBTV1NfTUFTS19ST1coaSkpKSB7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog
PCA1OyBqKyspCiAgICAgICAgICAgICAgICAgICAgIG91dC0+cGFyLmxpbi56ZXJvIHw9IFNXU19N
QVNLKGksIGopOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvbGlic3dz
Y2FsZS9mb3JtYXQuYyBiL2xpYnN3c2NhbGUvZm9ybWF0LmMKaW5kZXggNzBjYzgxM2RkNy4uMjUz
MTQzNWRhZSAxMDA2NDQKLS0tIGEvbGlic3dzY2FsZS9mb3JtYXQuYworKysgYi9saWJzd3NjYWxl
L2Zvcm1hdC5jCkBAIC0xMjgzLDcgKzEyODMsNiBAQCBzdGF0aWMgU3dzTGluZWFyT3AgZm10X2Vu
Y29kZV9yYW5nZShjb25zdCBTd3NGb3JtYXQgKmZtdCwgYm9vbCAqaW5jb21wbGV0ZSkKICAgICAg
ICAgYy5tWzBdWzBdID0gYXZfbmVnX3E2NChjLm1bMF1bMF0pOwogICAgIH0KIAotICAgIGMubWFz
ayA9IGZmX3N3c19saW5lYXJfbWFzaygmYyk7CiAgICAgcmV0dXJuIGM7CiB9CiAKQEAgLTEzMDIs
NyArMTMwMSw2IEBAIHN0YXRpYyBTd3NMaW5lYXJPcCBmbXRfZGVjb2RlX3JhbmdlKGNvbnN0IFN3
c0Zvcm1hdCAqZm10LCBib29sICppbmNvbXBsZXRlKQogICAgIGlmICghKGZtdC0+ZGVzYy0+Zmxh
Z3MgJiBBVl9QSVhfRk1UX0ZMQUdfQUxQSEEpKQogICAgICAgICBjLm1bM11bNF0gPSBRKDEpOwog
Ci0gICAgYy5tYXNrID0gZmZfc3dzX2xpbmVhcl9tYXNrKCZjKTsKICAgICByZXR1cm4gYzsKIH0K
IApAQCAtMTQ2NCwxNSArMTQ2MiwxMiBAQCBsaW5lYXJfbWF0Myhjb25zdCBBVlJhdGlvbmFsIG0w
MCwgY29uc3QgQVZSYXRpb25hbCBtMDEsIGNvbnN0IEFWUmF0aW9uYWwgbTAyLAogICAgICAgICAg
ICAgY29uc3QgQVZSYXRpb25hbCBtMTAsIGNvbnN0IEFWUmF0aW9uYWwgbTExLCBjb25zdCBBVlJh
dGlvbmFsIG0xMiwKICAgICAgICAgICAgIGNvbnN0IEFWUmF0aW9uYWwgbTIwLCBjb25zdCBBVlJh
dGlvbmFsIG0yMSwgY29uc3QgQVZSYXRpb25hbCBtMjIpCiB7Ci0gICAgU3dzTGluZWFyT3AgYyA9
IHt7CisgICAgcmV0dXJuIChTd3NMaW5lYXJPcCkge3sKICAgICAgICAgeyBRNjQobTAwKSwgUTY0
KG0wMSksIFE2NChtMDIpLCBRKDApLCBRKDApIH0sCiAgICAgICAgIHsgUTY0KG0xMCksIFE2NCht
MTEpLCBRNjQobTEyKSwgUSgwKSwgUSgwKSB9LAogICAgICAgICB7IFE2NChtMjApLCBRNjQobTIx
KSwgUTY0KG0yMiksIFEoMCksIFEoMCkgfSwKICAgICAgICAgeyAgICAgUSgwKSwgICAgIFEoMCks
ICAgICBRKDApLCBRKDEpLCBRKDApIH0sCiAgICAgfX07Ci0KLSAgICBjLm1hc2sgPSBmZl9zd3Nf
bGluZWFyX21hc2soJmMpOwotICAgIHJldHVybiBjOwogfQogCiBpbnQgZmZfc3dzX2RlY29kZV9j
b2xvcnMoU3dzQ29udGV4dCAqY3R4LCBTd3NQaXhlbFR5cGUgdHlwZSwKZGlmZiAtLWdpdCBhL2xp
YnN3c2NhbGUvb3BzLmggYi9saWJzd3NjYWxlL29wcy5oCmluZGV4IDAyYzEyMjY1NWEuLjgzZWYy
YjQ5ZGYgMTAwNjQ0Ci0tLSBhL2xpYnN3c2NhbGUvb3BzLmgKKysrIGIvbGlic3dzY2FsZS9vcHMu
aApAQCAtMTkyLDE3ICsxOTIsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgU3dzTGluZWFyT3AgewogICAg
ICAqICAgWyBPdXQueSBdID0gWyBGIEcgSCBJIEogXSAqIFsgeCB5IHogdyAxIF0KICAgICAgKiAg
IFsgT3V0LnogXSA9IFsgSyBMIE0gTiBPIF0KICAgICAgKiAgIFsgT3V0LncgXSA9IFsgUCBRIFIg
UyBUIF0KLSAgICAgKgotICAgICAqIFRoZSBtYXNrIGtlZXBzIHRyYWNrIG9mIHdoaWNoIGNvbXBv
bmVudHMgZGlmZmVyIGZyb20gYW4gaWRlbnRpdHkgbWF0cml4LgotICAgICAqIFRoZXJlIG1heSBi
ZSBtb3JlIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbnMgb2YgcGFydGljdWxhciBzdWJzZXRzLCBm
b3IKLSAgICAgKiBleGFtcGxlIHRoZSBjb21tb24gc3Vic2V0IG9mIHtBLCBFLCBHLCBKLCBNLCBP
fSBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aAotICAgICAqIGp1c3QgdGhyZWUgZnVzZWQgbXVsdGlw
bHktYWRkIG9wZXJhdGlvbnMuCiAgICAgICovCiAgICAgQVZSYXRpb25hbDY0IG1bNF1bNV07Ci0g
ICAgdWludDMyX3QgbWFzazsgLyogbVtpXVtqXSA8LT4gMSA8PCAoNSAqIGkgKyBqKSAqLwogfSBT
d3NMaW5lYXJPcDsKIAotLyogSGVscGVyIGZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlIGNvcnJlY3Qg
bWFzayAqLworLyogbVtpXVtqXSA8LT4gMSA8PCAoNSAqIGkgKyBqKSAqLwogdWludDMyX3QgZmZf
c3dzX2xpbmVhcl9tYXNrKGNvbnN0IFN3c0xpbmVhck9wICpjKTsKIAogdHlwZWRlZiBzdHJ1Y3Qg
U3dzRmlsdGVyT3AgewpkaWZmIC0tZ2l0IGEvbGlic3dzY2FsZS9vcHNfb3B0aW1pemVyLmMgYi9s
aWJzd3NjYWxlL29wc19vcHRpbWl6ZXIuYwppbmRleCA1YjIyZjNiMzg3Li4zNTQ2ZDhiYzllIDEw
MDY0NAotLS0gYS9saWJzd3NjYWxlL29wc19vcHRpbWl6ZXIuYworKysgYi9saWJzd3NjYWxlL29w
c19vcHRpbWl6ZXIuYwpAQCAtMjM4LDcgKzIzOCw3IEBAIHN0YXRpYyBib29sIGV4dHJhY3Rfc2Nh
bGFyKGNvbnN0IFN3c0xpbmVhck9wICpjLAogICAgIFN3c1NjYWxlT3Agc2NhbGUgPSB7MH07CiAK
ICAgICAvKiBUaGVyZSBhcmUgY29tcG9uZW50cyBub3Qgb24gdGhlIG1haW4gZGlhZ29uYWwgKi8K
LSAgICBpZiAoYy0+bWFzayAmIH5TV1NfTUFTS19ESUFHNCkKKyAgICBpZiAoZmZfc3dzX2xpbmVh
cl9tYXNrKGMpICYgflNXU19NQVNLX0RJQUc0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewpAQCAtMjYwLDYgKzI2MCw3IEBAIHN0YXRp
YyBib29sIGV4dHJhY3Rfc2NhbGFyKGNvbnN0IFN3c0xpbmVhck9wICpjLAogc3RhdGljIGJvb2wg
ZXh0cmFjdF9jb25zdGFudF9yb3dzKFN3c0xpbmVhck9wICpjLCBjb25zdCBTd3NDb21wcyAqcHJl
diwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTd3NDbGVhck9wICpvdXRfY2xl
YXIpCiB7CisgICAgY29uc3QgdWludDMyX3QgbWFzayA9IGZmX3N3c19saW5lYXJfbWFzayhjKTsK
ICAgICBTd3NDbGVhck9wIGNsZWFyID0gezB9OwogICAgIGJvb2wgcmV0ID0gZmFsc2U7CiAKQEAg
LTI2OSwxMiArMjcwLDExIEBAIHN0YXRpYyBib29sIGV4dHJhY3RfY29uc3RhbnRfcm93cyhTd3NM
aW5lYXJPcCAqYywgY29uc3QgU3dzQ29tcHMgKnByZXYsCiAgICAgICAgICAgICBjb25zdF9yb3cg
Jj0gYy0+bVtpXVtqXS5udW0gPT0gMCB8fCAvKiBzY2FsYXIgaXMgemVybyAqLwogICAgICAgICAg
ICAgICAgICAgICAgICAgIChwcmV2LT5mbGFnc1tqXSAmIFNXU19DT01QX1pFUk8pOyAvKiBpbnB1
dCBpcyB6ZXJvICovCiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNvbnN0X3JvdyAmJiAoYy0+bWFz
ayAmIFNXU19NQVNLX1JPVyhpKSkpIHsKKyAgICAgICAgaWYgKGNvbnN0X3JvdyAmJiAobWFzayAm
IFNXU19NQVNLX1JPVyhpKSkpIHsKICAgICAgICAgICAgIGNsZWFyLm1hc2sgfD0gU1dTX0NPTVAo
aSk7CiAgICAgICAgICAgICBjbGVhci52YWx1ZVtpXSA9IGMtPm1baV1bNF07CiAgICAgICAgICAg
ICBmb3IgKGludCBqID0gMDsgaiA8IDU7IGorKykKICAgICAgICAgICAgICAgICBjLT5tW2ldW2pd
ID0gUShpID09IGopOwotICAgICAgICAgICAgYy0+bWFzayAmPSB+U1dTX01BU0tfUk9XKGkpOwog
ICAgICAgICAgICAgcmV0ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTMyMSw3ICszMjEs
NiBAQCBzdGF0aWMgYm9vbCBleHRyYWN0X3N3aXp6bGUoU3dzTGluZWFyT3AgKm9wLCBjb25zdCBT
d3NDb21wcyAqcHJldiwKICAgICBpZiAoc3dpei5tYXNrID09IFNXU19TV0laWkxFKDAsIDEsIDIs
IDMpLm1hc2spCiAgICAgICAgIHJldHVybiBmYWxzZTsgLyogbm8gc3dpenpsZSB3YXMgaWRlbnRp
ZmllZCAqLwogCi0gICAgYy5tYXNrID0gZmZfc3dzX2xpbmVhcl9tYXNrKCZjKTsKICAgICAqb3V0
X3N3aXogPSBzd2l6OwogICAgICpvcCA9IGM7CiAgICAgcmV0dXJuIHRydWU7CkBAIC02MjIsMTIg
KzYyMSwxMyBAQCByZXRyeToKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgU1dT
X09QX0xJTkVBUjogeworICAgICAgICAgICAgY29uc3QgdWludDMyX3QgbWFzayA9IGZmX3N3c19s
aW5lYXJfbWFzaygmb3AtPmxpbik7CiAgICAgICAgICAgICBTd3NTd2l6emxlT3Agc3dpenpsZTsK
ICAgICAgICAgICAgIFN3c0NsZWFyT3AgY2xlYXI7CiAgICAgICAgICAgICBTd3NTY2FsZU9wIHNj
YWxlOwogCiAgICAgICAgICAgICAvKiBOby1vcCAoaWRlbnRpdHkpIGxpbmVhciBvcGVyYXRpb24g
Ki8KLSAgICAgICAgICAgIGlmICghb3AtPmxpbi5tYXNrKSB7CisgICAgICAgICAgICBpZiAoIW1h
c2spIHsKICAgICAgICAgICAgICAgICBmZl9zd3Nfb3BfbGlzdF9yZW1vdmVfYXQob3BzLCBuLCAx
KTsKICAgICAgICAgICAgICAgICBnb3RvIHJldHJ5OwogICAgICAgICAgICAgfQpAQCAtNjQ2LDcg
KzY0Niw2IEBAIHJldHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgb3AtPmxpbi5tW2ldW2pd
ID0gc3VtOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIG9wLT5saW4ubWFzayA9IGZmX3N3c19saW5lYXJfbWFzaygmb3AtPmxpbik7CiAg
ICAgICAgICAgICAgICAgZmZfc3dzX29wX2xpc3RfcmVtb3ZlX2F0KG9wcywgbiArIDEsIDEpOwog
ICAgICAgICAgICAgICAgIGdvdG8gcmV0cnk7CiAgICAgICAgICAgICB9CkBAIC02NTQsMjIgKzY1
MywyMCBAQCByZXRyeToKICAgICAgICAgICAgIC8qIE9wdGltaXplIGF3YXkgemVybyBjb2x1bW5z
ICovCiAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7IGorKykgewogICAgICAgICAg
ICAgICAgIGNvbnN0IHVpbnQzMl90IGNvbCA9IFNXU19NQVNLX0NPTChqKTsKLSAgICAgICAgICAg
ICAgICBpZiAoIShwcmV2LT5jb21wcy5mbGFnc1tqXSAmIFNXU19DT01QX1pFUk8pIHx8ICEob3At
Pmxpbi5tYXNrICYgY29sKSkKKyAgICAgICAgICAgICAgICBpZiAoIShwcmV2LT5jb21wcy5mbGFn
c1tqXSAmIFNXU19DT01QX1pFUk8pIHx8ICEobWFzayAmIGNvbCkpCiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsr
KQogICAgICAgICAgICAgICAgICAgICBvcC0+bGluLm1baV1bal0gPSBRKGkgPT0gaik7Ci0gICAg
ICAgICAgICAgICAgb3AtPmxpbi5tYXNrICY9IH5jb2w7CiAgICAgICAgICAgICAgICAgZ290byBy
ZXRyeTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLyogT3B0aW1pemUgYXdheSB1bnVz
ZWQgcm93cyAqLwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKICAg
ICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCByb3cgPSBTV1NfTUFTS19ST1coaSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKFNXU19PUF9ORUVERUQob3AsIGkpIHx8ICEob3AtPmxpbi5tYXNrICYg
cm93KSkKKyAgICAgICAgICAgICAgICBpZiAoU1dTX09QX05FRURFRChvcCwgaSkgfHwgIShtYXNr
ICYgcm93KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaiA9IDA7IGogPCA1OyBqKyspCiAgICAgICAgICAgICAgICAgICAgIG9wLT5saW4u
bVtpXVtqXSA9IFEoaSA9PSBqKTsKLSAgICAgICAgICAgICAgICBvcC0+bGluLm1hc2sgJj0gfnJv
dzsKICAgICAgICAgICAgICAgICBnb3RvIHJldHJ5OwogICAgICAgICAgICAgfQogCmRpZmYgLS1n
aXQgYS9saWJzd3NjYWxlL3VvcHMuYyBiL2xpYnN3c2NhbGUvdW9wcy5jCmluZGV4IDQ0MDAwYjM1
ZjEuLmZjOWQ2MDk2MzYgMTAwNjQ0Ci0tLSBhL2xpYnN3c2NhbGUvdW9wcy5jCisrKyBiL2xpYnN3
c2NhbGUvdW9wcy5jCkBAIC01MDYsMTEgKzUwNiwxMiBAQCBzdGF0aWMgaW50IHRyYW5zbGF0ZV9s
aW5lYXJfb3AoU3dzQ29udGV4dCAqY3R4LCBTd3NVT3BMaXN0ICpvcHMsCiAgICAgICAgIC51b3Ag
ID0gU1dTX1VPUF9MSU5FQVIsCiAgICAgfTsKIAorICAgIGNvbnN0IHVpbnQzMl90IG1hc2sgPSBm
Zl9zd3NfbGluZWFyX21hc2soJm9wLT5saW4pOwogICAgIGNvbnN0IGJvb2wgYml0ZXhhY3QgPSBj
dHgtPmZsYWdzICYgU1dTX0JJVEVYQUNUOwogICAgIHVpbnQzMl90IGV4YWN0ID0gMDsKIAogICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0gICAgICAgIGlmICghU1dTX09QX05FRURF
RChvcCwgaSkgfHwgIShvcC0+bGluLm1hc2sgJiBTV1NfTUFTS19ST1coaSkpKSB7CisgICAgICAg
IGlmICghU1dTX09QX05FRURFRChvcCwgaSkgfHwgIShtYXNrICYgU1dTX01BU0tfUk9XKGkpKSkg
ewogICAgICAgICAgICAgdW9wLnBhci5saW4uemVybyB8PSBTV1NfTUFTS19ST1coaSk7CiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotLSAKMi41Mi4wCgoKRnJvbSBkMDMwMzI1ZTRk
MDRmYmQ4ZGQxYzFmMmZkOWM2MGQ0YmM2OGZhZGIzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpG
cm9tOiBOaWtsYXMgSGFhcyA8Z2l0QGhhYXNuLmRldj4KRGF0ZTogVGh1LCAyMyBKdWwgMjAyNiAx
NzoyMTo0MyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMDUvMThdIHN3c2NhbGUvY3NwdXRpbHM6IHJl
bW92ZSB1bnVzZWQgc3RydWN0CgpTcG9uc29yZWQtYnk6IFNvdmVyZWlnbiBUZWNoIEZ1bmQKU2ln
bmVkLW9mZi1ieTogTmlrbGFzIEhhYXMgPGdpdEBoYWFzbi5kZXY+Ci0tLQogbGlic3dzY2FsZS9j
c3B1dGlscy5oIHwgNCAtLS0tCiAxIGZpbGUgY2hhbmdlZCwgNCBkZWxldGlvbnMoLSkKCmRpZmYg
LS1naXQgYS9saWJzd3NjYWxlL2NzcHV0aWxzLmggYi9saWJzd3NjYWxlL2NzcHV0aWxzLmgKaW5k
ZXggYzI4ZTRhYzdhZS4uODJlYjBiNjhmNCAxMDA2NDQKLS0tIGEvbGlic3dzY2FsZS9jc3B1dGls
cy5oCisrKyBiL2xpYnN3c2NhbGUvY3NwdXRpbHMuaApAQCAtNjUsMTAgKzY1LDYgQEAgU3dzTWF0
cml4M3gzIGZmX3N3c19nZXRfYWRhcHRhdGlvbihjb25zdCBBVlByaW1hcnlDb2VmZmljaWVudHMg
KnByaW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWV2hpdGVwb2ludENv
ZWZmaWNpZW50cyB0byk7CiAKIC8qIEludGVnZXIgbWF0aCBkZWZpbml0aW9ucyAvIGhlbHBlcnMg
Ki8KLXR5cGVkZWYgc3RydWN0IHYzdThfdCB7Ci0gICAgdWludDhfdCB4LCB5LCB6OwotfSB2M3U4
X3Q7Ci0KIHR5cGVkZWYgc3RydWN0IHYydTE2X3QgewogICAgIHVpbnQxNl90IHgsIHk7CiB9IHYy
dTE2X3Q7Ci0tIAoyLjUyLjAKCgpGcm9tIGY2MjM1MWIwYTYyOGJjMDBmOGRjNDYyYjU1NGQ1YWM4
MDkxNzgzNWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IE5pa2xhcyBIYWFzIDxnaXRA
aGFhc24uZGV2PgpEYXRlOiBXZWQsIDIyIEp1bCAyMDI2IDE3OjIzOjE5ICswMjAwClN1YmplY3Q6
IFtQQVRDSCAwNi8xOF0gc3dzY2FsZS9hYXJjaDY0OiByZWplY3QgdW5rbm93biBvcHMgYnkgZGVm
YXVsdAoKU3BvbnNvcmVkLWJ5OiBTb3ZlcmVpZ24gVGVjaCBGdW5kClNpZ25lZC1vZmYtYnk6IE5p
a2xhcyBIYWFzIDxnaXRAaGFhc24uZGV2PgotLS0KIGxpYnN3c2NhbGUvYWFyY2g2NC9vcHNfaW1w
bF9jb252LmMgfCAzICstLQogMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAyIGRlbGV0
aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYnN3c2NhbGUvYWFyY2g2NC9vcHNfaW1wbF9jb252LmMg
Yi9saWJzd3NjYWxlL2FhcmNoNjQvb3BzX2ltcGxfY29udi5jCmluZGV4IGRhZWJhYzlmMDkuLmZi
ZDY5YzljODcgMTAwNjQ0Ci0tLSBhL2xpYnN3c2NhbGUvYWFyY2g2NC9vcHNfaW1wbF9jb252LmMK
KysrIGIvbGlic3dzY2FsZS9hYXJjaDY0L29wc19pbXBsX2NvbnYuYwpAQCAtMTk5LDggKzE5OSw3
IEBAIHN0YXRpYyBpbnQgY29udmVydF90b19hYXJjaDY0X2ltcGwoU3dzQ29udGV4dCAqY3R4LCBj
b25zdCBTd3NPcExpc3QgKm9wcywgaW50IG4sCiAgICAgICAgICAgICAgICAgIDogU1dTX1VPUF9M
SU5FQVJfRk1BOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNXU19PUF9ESVRIRVI6ICAgICBv
dXQtPnVvcCA9IFNXU19VT1BfRElUSEVSOyAgICAgYnJlYWs7Ci0gICAgY2FzZSBTV1NfT1BfRklM
VEVSX0g6Ci0gICAgY2FzZSBTV1NfT1BfRklMVEVSX1Y6CisgICAgZGVmYXVsdDoKICAgICAgICAg
cmV0dXJuIEFWRVJST1IoRU5PVFNVUCk7CiAgICAgfQogCi0tIAoyLjUyLjAKCgpGcm9tIGZhYzZi
MjY0NjZiNGFmMWRlOWM2NzkxMDExMGRjZGYwNGE1N2NhMDQgTW9uIFNlcCAxNyAwMDowMDowMCAy
MDAxCkZyb206IE5pa2xhcyBIYWFzIDxnaXRAaGFhc24uZGV2PgpEYXRlOiBUaHUsIDIzIEp1bCAy
MDI2IDE3OjIxOjU2ICswMjAwClN1YmplY3Q6IFtQQVRDSCAwNy8xOF0gc3dzY2FsZS9sdXQzZDog
YWxpZ25tZW50IChjb3NtZXRpYykKClNwb25zb3JlZC1ieTogU292ZXJlaWduIFRlY2ggRnVuZApT
aWduZWQtb2ZmLWJ5OiBOaWtsYXMgSGFhcyA8Z2l0QGhhYXNuLmRldj4KLS0tCiBsaWJzd3NjYWxl
L2x1dDNkLmMgfCA4ICsrKystLS0tCiAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0
IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYnN3c2NhbGUvbHV0M2QuYyBiL2xpYnN3c2Nh
bGUvbHV0M2QuYwppbmRleCBkNzAxY2EyYmE1Li42OTRiNDU1ZGJjIDEwMDY0NAotLS0gYS9saWJz
d3NjYWxlL2x1dDNkLmMKKysrIGIvbGlic3dzY2FsZS9sdXQzZC5jCkBAIC0yMjEsOSArMjIxLDkg
QEAgaW50IGZmX3N3c19sdXQzZF9nZW5lcmF0ZShTd3NMdXQzRCAqbHV0M2QsIGVudW0gQVZQaXhl
bEZvcm1hdCBmbXRfaW4sCiAKICAgICBpZiAobHV0M2QtPmR5bmFtaWMpIHsKICAgICAgICAgcmV0
ID0gZmZfc3dzX2NvbG9yX21hcF9nZW5lcmF0ZV9keW5hbWljKCZsdXQzZC0+aW5wdXRbMF1bMF1b
MF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHV0M2Qt
Pm91dHB1dFswXVswXVswXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIElOUFVUX0xVVF9TSVpFLCBPVVRQVVRfTFVUX1NJWkVfSSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9MVVRfU0laRV9QVCwgbWFwKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsdXQzZC0+
b3V0cHV0WzBdWzBdWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSU5QVVRfTFVUX1NJWkUsIE9VVFBVVF9MVVRfU0laRV9JLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX0xVVF9TSVpFX1BULCBt
YXApOwogICAgICAgICBpZiAocmV0IDwgMCkKICAgICAgICAgICAgIHJldHVybiByZXQ7CiAKQEAg
LTIzMiw3ICsyMzIsNyBAQCBpbnQgZmZfc3dzX2x1dDNkX2dlbmVyYXRlKFN3c0x1dDNEICpsdXQz
ZCwgZW51bSBBVlBpeGVsRm9ybWF0IGZtdF9pbiwKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgcmV0dXJuIGZmX3N3c19jb2xvcl9tYXBfZ2VuZXJhdGVfc3RhdGljKCZs
dXQzZC0+aW5wdXRbMF1bMF1bMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJTlBVVF9MVVRfU0laRSwgbWFwKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIElOUFVUX0xVVF9TSVpFLCBtYXApOwogICAgIH0KIH0K
IAotLSAKMi41Mi4wCgoKRnJvbSBhMTc2YjE3NTRhYjU1NjVhYjRlZWE4YWJmYzIwOWRiZGYxMjEx
MDU2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtsYXMgSGFhcyA8Z2l0QGhhYXNu
LmRldj4KRGF0ZTogVGh1LCAyMyBKdWwgMjAyNiAxOToyMToyMSArMDIwMApTdWJqZWN0OiBbUEFU
Q0ggMDgvMThdIHN3c2NhbGUvbHV0M2Q6IHBhZCAzRExVVCB0byBlbGltaW5hdGUgb3Zlci1yZWFk
CgpJbnN0ZWFkIG9mIGNsYW1waW5nIGluIHRoZSBhcHBsaWNhdGlvbiBmdW5jdGlvbi4gVHJpdmlh
bCBzaW1wbGljaXR5IGdhaW4KZm9yIHRoZSBTSU1EIGNvZGUuCgpTcG9uc29yZWQtYnk6IFNvdmVy
ZWlnbiBUZWNoIEZ1bmQKU2lnbmVkLW9mZi1ieTogTmlrbGFzIEhhYXMgPGdpdEBoYWFzbi5kZXY+
Ci0tLQogbGlic3dzY2FsZS9sdXQzZC5jIHwgNCArKy0tCiBsaWJzd3NjYWxlL2x1dDNkLmggfCAy
ICstCiAyIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRp
ZmYgLS1naXQgYS9saWJzd3NjYWxlL2x1dDNkLmMgYi9saWJzd3NjYWxlL2x1dDNkLmMKaW5kZXgg
Njk0YjQ1NWRiYy4uZTUyMWJjNDQzOSAxMDA2NDQKLS0tIGEvbGlic3dzY2FsZS9sdXQzZC5jCisr
KyBiL2xpYnN3c2NhbGUvbHV0M2QuYwpAQCAtMTk1LDEwICsxOTUsOSBAQCBzdGF0aWMgYXZfYWx3
YXlzX2lubGluZSB2M3UxNl90IGFwcGx5X3RvbmVfbWFwKGNvbnN0IFN3c0x1dDNEICpsdXQzZCwg
djN1MTZfdCBpcAogICAgIGNvbnN0IGludCBzaGlmdCA9IDE2IC0gVE9ORV9MVVRfQklUUzsKICAg
ICBjb25zdCBpbnQgSXggPSBpcHQueCA+PiBzaGlmdDsKICAgICBjb25zdCBpbnQgSWYgPSBpcHQu
eCAmICgoMSA8PCBzaGlmdCkgLSAxKTsKLSAgICBjb25zdCBpbnQgSW4gPSBGRk1JTihJeCArIDEs
IFRPTkVfTFVUX1NJWkUgLSAxKTsKIAogICAgIGNvbnN0IHYydTE2X3QgdzAgPSBsdXQzZC0+dG9u
ZV9tYXBbSXhdOwotICAgIGNvbnN0IHYydTE2X3QgdzEgPSBsdXQzZC0+dG9uZV9tYXBbSW5dOwor
ICAgIGNvbnN0IHYydTE2X3QgdzEgPSBsdXQzZC0+dG9uZV9tYXBbSXggKyAxXTsKICAgICBjb25z
dCB2MnUxNl90IHcgID0gbGVycDJ1MTYodzAsIHcxLCBJZiwgc2hpZnQpOwogICAgIGNvbnN0IGlu
dCBiYXNlICAgPSAoMSA8PCAxNSkgLSB3Lnk7CiAKQEAgLTI0NSw2ICsyNDQsNyBAQCB2b2lkIGZm
X3N3c19sdXQzZF91cGRhdGUoU3dzTHV0M0QgKmx1dDNkLCBjb25zdCBTd3NDb2xvciAqbmV3X3Ny
YykKICAgICBsdXQzZC0+bWFwLnNyYy5mcmFtZV9hdmcgID0gbmV3X3NyYy0+ZnJhbWVfYXZnOwog
CiAgICAgZmZfc3dzX3RvbmVfbWFwX2dlbmVyYXRlKGx1dDNkLT50b25lX21hcCwgVE9ORV9MVVRf
U0laRSwgJmx1dDNkLT5tYXApOworICAgIGx1dDNkLT50b25lX21hcFtUT05FX0xVVF9TSVpFXSA9
IGx1dDNkLT50b25lX21hcFtUT05FX0xVVF9TSVpFIC0gMV07CiB9CiAKIHZvaWQgZmZfc3dzX2x1
dDNkX2FwcGx5KGNvbnN0IFN3c0x1dDNEICpsdXQzZCwgY29uc3QgdWludDhfdCAqaW4sIGludCBp
bl9zdHJpZGUsCmRpZmYgLS1naXQgYS9saWJzd3NjYWxlL2x1dDNkLmggYi9saWJzd3NjYWxlL2x1
dDNkLmgKaW5kZXggZDJkZTg1MTYwNC4uOWU4MzgxYTJjMCAxMDA2NDQKLS0tIGEvbGlic3dzY2Fs
ZS9sdXQzZC5oCisrKyBiL2xpYnN3c2NhbGUvbHV0M2QuaApAQCAtNTYsNyArNTYsNyBAQCB0eXBl
ZGVmIHN0cnVjdCBTd3NMdXQzRCB7CiAgICAgdjN1MTZfdCBvdXRwdXRbT1VUUFVUX0xVVF9TSVpF
X1BUXVtPVVRQVVRfTFVUX1NJWkVfUFRdW09VVFBVVF9MVVRfU0laRV9JXTsKIAogICAgIC8qIFNw
bGl0IHRvbmUgbWFwcGluZyBMVVQgKGZvciBkeW5hbWljIHRvbmUgbWFwcGluZykgKi8KLSAgICB2
MnUxNl90IHRvbmVfbWFwW1RPTkVfTFVUX1NJWkVdOyAvKiBuZXcgbHVtYSwgZGVzYXR1cmF0aW9u
ICovCisgICAgdjJ1MTZfdCB0b25lX21hcFtUT05FX0xVVF9TSVpFICsgMV07IC8qIG5ldyBsdW1h
LCBkZXNhdHVyYXRpb24gKi8KIH0gU3dzTHV0M0Q7CiAKIFN3c0x1dDNEICpmZl9zd3NfbHV0M2Rf
YWxsb2Modm9pZCk7Ci0tIAoyLjUyLjAKCgpGcm9tIDgwNDdjMDExMDA1NDViYmZiNjYyYWY4ZmUy
YzIxNDZjOWM0OTkyMWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IE5pa2xhcyBIYWFz
IDxnaXRAaGFhc24uZGV2PgpEYXRlOiBGcmksIDI0IEp1bCAyMDI2IDE0OjM0OjQ2ICswMjAwClN1
YmplY3Q6IFtQQVRDSCAwOS8xOF0gc3dzY2FsZS9sdXQzZDogdXNlIHJlZnN0cnVjdCBmb3IgM0Qg
TFVUIGFsbG9jYXRpb25zCgpOZWVkZWQgYW55d2F5cyBmb3IgdGhlIHVwY29taW5nIFNXU19PUF9M
VVRfM0QuCgpTcG9uc29yZWQtYnk6IFNvdmVyZWlnbiBUZWNoIEZ1bmQKU2lnbmVkLW9mZi1ieTog
TmlrbGFzIEhhYXMgPGdpdEBoYWFzbi5kZXY+Ci0tLQogbGlic3dzY2FsZS9ncmFwaC5jIHwgIDYg
KysrLS0tCiBsaWJzd3NjYWxlL2x1dDNkLmMgfCAxMCArKysrLS0tLS0tCiBsaWJzd3NjYWxlL2x1
dDNkLmggfCAgNCArKystCiAzIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEwIGRl
bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYnN3c2NhbGUvZ3JhcGguYyBiL2xpYnN3c2NhbGUv
Z3JhcGguYwppbmRleCBiOWQ1ZGYzYjQ4Li40Y2ZlODdlYTMxIDEwMDY0NAotLS0gYS9saWJzd3Nj
YWxlL2dyYXBoLmMKKysrIGIvbGlic3dzY2FsZS9ncmFwaC5jCkBAIC02ODIsNyArNjgyLDcgQEAg
c3RhdGljIGludCBhZGRfY29udmVydF9wYXNzKFN3c0dyYXBoICpncmFwaCwgY29uc3QgU3dzRm9y
bWF0ICpzcmMsCiBzdGF0aWMgdm9pZCBmcmVlX2x1dDNkKHZvaWQgKnByaXYpCiB7CiAgICAgU3dz
THV0M0QgKmx1dCA9IHByaXY7Ci0gICAgZmZfc3dzX2x1dDNkX2ZyZWUoJmx1dCk7CisgICAgYXZf
cmVmc3RydWN0X3VucmVmKCZsdXQpOwogfQogCiBzdGF0aWMgaW50IHNldHVwX2x1dDNkKGNvbnN0
IFN3c0ZyYW1lICpvdXQsIGNvbnN0IFN3c0ZyYW1lICppbiwgY29uc3QgU3dzUGFzcyAqcGFzcykK
QEAgLTc1MywxNCArNzUzLDE0IEBAIHN0YXRpYyBpbnQgYWRhcHRfY29sb3JzKFN3c0dyYXBoICpn
cmFwaCwgY29uc3QgU3dzRm9ybWF0ICpzcmNfZm10LAogICAgICAgICB0bXAuZm9ybWF0ID0gZm10
X2luOwogICAgICAgICByZXQgPSBhZGRfY29udmVydF9wYXNzKGdyYXBoLCAmc3JjLCAmdG1wLCBp
bnB1dCwgJmlucHV0KTsKICAgICAgICAgaWYgKHJldCA8IDApIHsKLSAgICAgICAgICAgIGZmX3N3
c19sdXQzZF9mcmVlKCZsdXQpOworICAgICAgICAgICAgYXZfcmVmc3RydWN0X3VucmVmKCZsdXQp
OwogICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgfQogICAgIH0KIAogICAgIHJldCA9
IGZmX3N3c19sdXQzZF9nZW5lcmF0ZShsdXQsIGZtdF9pbiwgZm10X291dCwgJm1hcCk7CiAgICAg
aWYgKHJldCA8IDApIHsKLSAgICAgICAgZmZfc3dzX2x1dDNkX2ZyZWUoJmx1dCk7CisgICAgICAg
IGF2X3JlZnN0cnVjdF91bnJlZigmbHV0KTsKICAgICAgICAgcmV0dXJuIHJldDsKICAgICB9CiAK
ZGlmZiAtLWdpdCBhL2xpYnN3c2NhbGUvbHV0M2QuYyBiL2xpYnN3c2NhbGUvbHV0M2QuYwppbmRl
eCBlNTIxYmM0NDM5Li4xYjFiMTFhYTRjIDEwMDY0NAotLS0gYS9saWJzd3NjYWxlL2x1dDNkLmMK
KysrIGIvbGlic3dzY2FsZS9sdXQzZC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAibGli
YXZ1dGlsL2F0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKICNp
bmNsdWRlICJsaWJhdnV0aWwvbWVtLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL3JlZnN0cnVjdC5o
IgogCiAjaW5jbHVkZSAiY21zLmgiCiAjaW5jbHVkZSAiY3NwdXRpbHMuaCIKQEAgLTMxLDE5ICsz
MiwxNiBAQAogCiBTd3NMdXQzRCAqZmZfc3dzX2x1dDNkX2FsbG9jKHZvaWQpCiB7Ci0gICAgU3dz
THV0M0QgKmx1dDNkID0gYXZfbWFsbG9jKHNpemVvZigqbHV0M2QpKTsKKyAgICBjb25zdCBpbnQg
ZmxhZ3MgPSBBVl9SRUZTVFJVQ1RfRkxBR19OT19aRVJPSU5HOworICAgIFN3c0x1dDNEICpsdXQz
ZCA9IGF2X3JlZnN0cnVjdF9hbGxvY19leHQoc2l6ZW9mKCpsdXQzZCksIGZsYWdzLCBOVUxMLCBO
VUxMKTsKICAgICBpZiAoIWx1dDNkKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIGx1dDNk
LT5tYXAgPSAoU3dzQ29sb3JNYXApIHswfTsKICAgICBsdXQzZC0+ZHluYW1pYyA9IGZhbHNlOwog
ICAgIHJldHVybiBsdXQzZDsKIH0KIAotdm9pZCBmZl9zd3NfbHV0M2RfZnJlZShTd3NMdXQzRCAq
KnBsdXQzZCkKLXsKLSAgICBhdl9mcmVlcChwbHV0M2QpOwotfQotCiBib29sIGZmX3N3c19sdXQz
ZF90ZXN0X2ZtdChlbnVtIEFWUGl4ZWxGb3JtYXQgZm10LCBpbnQgb3V0cHV0KQogewogICAgIHJl
dHVybiBmbXQgPT0gQVZfUElYX0ZNVF9SR0JBNjQ7CmRpZmYgLS1naXQgYS9saWJzd3NjYWxlL2x1
dDNkLmggYi9saWJzd3NjYWxlL2x1dDNkLmgKaW5kZXggOWU4MzgxYTJjMC4uNjYwZGMwOGYyNiAx
MDA2NDQKLS0tIGEvbGlic3dzY2FsZS9sdXQzZC5oCisrKyBiL2xpYnN3c2NhbGUvbHV0M2QuaApA
QCAtNTksOCArNTksMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgU3dzTHV0M0QgewogICAgIHYydTE2X3Qg
dG9uZV9tYXBbVE9ORV9MVVRfU0laRSArIDFdOyAvKiBuZXcgbHVtYSwgZGVzYXR1cmF0aW9uICov
CiB9IFN3c0x1dDNEOwogCisvKioKKyAqIEFsbG9jYXRlcyBhIHJlZnN0cnVjdC4gTm90ZSB0aGF0
IHRoZSBMVVQgY29udGVudHMgYXJlIG5vdCBpbml0aWFsaXplZC4KKyAqLwogU3dzTHV0M0QgKmZm
X3N3c19sdXQzZF9hbGxvYyh2b2lkKTsKLXZvaWQgZmZfc3dzX2x1dDNkX2ZyZWUoU3dzTHV0M0Qg
KipsdXQzZCk7CiAKIC8qKgogICogVGVzdCB0byBzZWUgaWYgYSBnaXZlbiBmb3JtYXQgaXMgc3Vw
cG9ydGVkIGJ5IHRoZSAzRExVVCBpbnB1dC9vdXRwdXQgY29kZS4KLS0gCjIuNTIuMAoKCkZyb20g
YTYzYThlMjlmOGM0Zjc0ZTM0MmIwODllYjU1YjQ3NzVmZjY1MDEwYSBNb24gU2VwIDE3IDAwOjAw
OjAwIDIwMDEKRnJvbTogTmlrbGFzIEhhYXMgPGdpdEBoYWFzbi5kZXY+CkRhdGU6IEZyaSwgMjQg
SnVsIDIwMjYgMTQ6NDE6NTggKzAyMDAKU3ViamVjdDogW1BBVENIIDEwLzE4XSBzd3NjYWxlL2x1
dDNkOiBzaW1wbGlmeSBhbmQgaGFyZC1jb2RlIDNETFVUIGZvcm1hdAoKVGhlIG9wcy1iYXNlZCAz
RExVVCBhcHByb2FjaCB3aWxsIHRha2UgY2FyZSBvZiBhcHByb3ByaWF0ZWx5IG5vcm1hbGl6aW5n
CnRoZSBpbnB1dCB0byB0aGUgZXhwZWN0ZWQgZG9tYWluOyBzbyB0aGUgZm9ybWF0IGNob2ljZSBu
byBsb25nZXIgbWF0dGVycyBoZXJlCmV4Y2VwdCBmb3IgdGhlIGx1dDNkX2FwcGx5KCkgZnVuY3Rp
b24sIHdoaWNoIHdpbGwgb25seSBiZSB1c2VkIGJ5IHRoZSBsZWdhY3kKcmVmZXJlbmNlIGNvZGUg
cGF0aC4gU28gd2UgY2FuIGp1c3QgY29udGludWUgaGFyZC1jb2RpbmcgdGhlIGZvcm1hdCB0aGVy
ZS4KClNwb25zb3JlZC1ieTogU292ZXJlaWduIFRlY2ggRnVuZApTaWduZWQtb2ZmLWJ5OiBOaWts
YXMgSGFhcyA8Z2l0QGhhYXNuLmRldj4KLS0tCiBsaWJzd3NjYWxlL2dyYXBoLmMgfCAyNiArKysr
KysrKysrKystLS0tLS0tLS0tLS0tLQogbGlic3dzY2FsZS9sdXQzZC5jIHwgMjEgKysrKy0tLS0t
LS0tLS0tLS0tLS0tCiBsaWJzd3NjYWxlL2x1dDNkLmggfCAyMSArKysrKy0tLS0tLS0tLS0tLS0t
LS0KIDMgZmlsZXMgY2hhbmdlZCwgMjEgaW5zZXJ0aW9ucygrKSwgNDcgZGVsZXRpb25zKC0pCgpk
aWZmIC0tZ2l0IGEvbGlic3dzY2FsZS9ncmFwaC5jIGIvbGlic3dzY2FsZS9ncmFwaC5jCmluZGV4
IDRjZmU4N2VhMzEuLjFjM2ZhMTg4ZDUgMTAwNjQ0Ci0tLSBhL2xpYnN3c2NhbGUvZ3JhcGguYwor
KysgYi9saWJzd3NjYWxlL2dyYXBoLmMKQEAgLTcwMiw4ICs3MDIsOCBAQCBzdGF0aWMgdm9pZCBy
dW5fbHV0M2QoY29uc3QgU3dzRnJhbWUgKm91dCwgY29uc3QgU3dzRnJhbWUgKmluLCBpbnQgeSwg
aW50IGgsCiAgICAgZnJhbWVfc2hpZnQoaW4sICB5LCBpbl9kYXRhKTsKICAgICBmcmFtZV9zaGlm
dChvdXQsIHksIG91dF9kYXRhKTsKIAotICAgIGZmX3N3c19sdXQzZF9hcHBseShsdXQsIGluX2Rh
dGFbMF0sIGluLT5saW5lc2l6ZVswXSwgb3V0X2RhdGFbMF0sCi0gICAgICAgICAgICAgICAgICAg
ICAgIG91dC0+bGluZXNpemVbMF0sIG91dC0+d2lkdGgsIGgpOworICAgIGZmX3N3c19sdXQzZF9h
cHBseV9yZ2JhNjQobHV0LCBpbl9kYXRhWzBdLCBpbi0+bGluZXNpemVbMF0sIG91dF9kYXRhWzBd
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LT5saW5lc2l6ZVswXSwgb3V0LT53
aWR0aCwgaCk7CiB9CiAKIHN0YXRpYyBpbnQgYWRhcHRfY29sb3JzKFN3c0dyYXBoICpncmFwaCwg
Y29uc3QgU3dzRm9ybWF0ICpzcmNfZm10LApAQCAtNzEyLDcgKzcxMiw2IEBAIHN0YXRpYyBpbnQg
YWRhcHRfY29sb3JzKFN3c0dyYXBoICpncmFwaCwgY29uc3QgU3dzRm9ybWF0ICpzcmNfZm10LAog
ewogICAgIFN3c0Zvcm1hdCBzcmMgPSAqc3JjX2ZtdDsKICAgICBTd3NGb3JtYXQgZHN0ID0gKmRz
dF9mbXQ7Ci0gICAgZW51bSBBVlBpeGVsRm9ybWF0IGZtdF9pbiwgZm10X291dDsKICAgICBTd3ND
b2xvck1hcCBtYXAgPSB7MH07CiAgICAgU3dzTHV0M0QgKmx1dDsKICAgICBpbnQgcmV0OwpAQCAt
NzQ2LDExICs3NDUsMTYgQEAgc3RhdGljIGludCBhZGFwdF9jb2xvcnMoU3dzR3JhcGggKmdyYXBo
LCBjb25zdCBTd3NGb3JtYXQgKnNyY19mbXQsCiAgICAgaWYgKCFsdXQpCiAgICAgICAgIHJldHVy
biBBVkVSUk9SKEVOT01FTSk7CiAKLSAgICBmbXRfaW4gID0gZmZfc3dzX2x1dDNkX3BpY2tfcGl4
Zm10KCZzcmMsIDApOwotICAgIGZtdF9vdXQgPSBmZl9zd3NfbHV0M2RfcGlja19waXhmbXQoJmRz
dCwgMSk7Ci0gICAgaWYgKGZtdF9pbiAhPSBzcmMuZm9ybWF0KSB7CisgICAgcmV0ID0gZmZfc3dz
X2x1dDNkX2dlbmVyYXRlKGx1dCwgJm1hcCk7CisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAg
YXZfcmVmc3RydWN0X3VucmVmKCZsdXQpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKwor
ICAgIGNvbnN0IGVudW0gQVZQaXhlbEZvcm1hdCBmbXQgPSBBVl9QSVhfRk1UX1JHQkE2NDsKKyAg
ICBpZiAoc3JjLmZvcm1hdCAhPSBmbXQpIHsKICAgICAgICAgU3dzRm9ybWF0IHRtcCA9IHNyYzsK
LSAgICAgICAgdG1wLmZvcm1hdCA9IGZtdF9pbjsKKyAgICAgICAgdG1wLmZvcm1hdCA9IGZtdDsK
ICAgICAgICAgcmV0ID0gYWRkX2NvbnZlcnRfcGFzcyhncmFwaCwgJnNyYywgJnRtcCwgaW5wdXQs
ICZpbnB1dCk7CiAgICAgICAgIGlmIChyZXQgPCAwKSB7CiAgICAgICAgICAgICBhdl9yZWZzdHJ1
Y3RfdW5yZWYoJmx1dCk7CkBAIC03NTgsMTMgKzc2Miw3IEBAIHN0YXRpYyBpbnQgYWRhcHRfY29s
b3JzKFN3c0dyYXBoICpncmFwaCwgY29uc3QgU3dzRm9ybWF0ICpzcmNfZm10LAogICAgICAgICB9
CiAgICAgfQogCi0gICAgcmV0ID0gZmZfc3dzX2x1dDNkX2dlbmVyYXRlKGx1dCwgZm10X2luLCBm
bXRfb3V0LCAmbWFwKTsKLSAgICBpZiAocmV0IDwgMCkgewotICAgICAgICBhdl9yZWZzdHJ1Y3Rf
dW5yZWYoJmx1dCk7Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZm
X3N3c19ncmFwaF9hZGRfcGFzcyhncmFwaCwgZm10X291dCwgc3JjLndpZHRoLCBzcmMuaGVpZ2h0
LAorICAgIHJldHVybiBmZl9zd3NfZ3JhcGhfYWRkX3Bhc3MoZ3JhcGgsIGZtdCwgc3JjLndpZHRo
LCBzcmMuaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsIDAs
IDEsIHJ1bl9sdXQzZCwgc2V0dXBfbHV0M2QsIGx1dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZyZWVfbHV0M2QsIG91dHB1dCk7CiB9CmRpZmYgLS1naXQgYS9saWJzd3NjYWxl
L2x1dDNkLmMgYi9saWJzd3NjYWxlL2x1dDNkLmMKaW5kZXggMWIxYjExYWE0Yy4uOTczNTc1ZTFk
ZiAxMDA2NDQKLS0tIGEvbGlic3dzY2FsZS9sdXQzZC5jCisrKyBiL2xpYnN3c2NhbGUvbHV0M2Qu
YwpAQCAtNDIsMTYgKzQyLDYgQEAgU3dzTHV0M0QgKmZmX3N3c19sdXQzZF9hbGxvYyh2b2lkKQog
ICAgIHJldHVybiBsdXQzZDsKIH0KIAotYm9vbCBmZl9zd3NfbHV0M2RfdGVzdF9mbXQoZW51bSBB
VlBpeGVsRm9ybWF0IGZtdCwgaW50IG91dHB1dCkKLXsKLSAgICByZXR1cm4gZm10ID09IEFWX1BJ
WF9GTVRfUkdCQTY0OwotfQotCi1lbnVtIEFWUGl4ZWxGb3JtYXQgZmZfc3dzX2x1dDNkX3BpY2tf
cGl4Zm10KGNvbnN0IFN3c0Zvcm1hdCAqZm10LCBpbnQgb3V0cHV0KQotewotICAgIHJldHVybiBB
Vl9QSVhfRk1UX1JHQkE2NDsKLX0KLQogLyoqCiAgKiB2MCBhbmQgdjEgYXJlICdibGFjaycgYW5k
ICd3aGl0ZScKICAqIHYyIGFuZCB2MyBhcmUgY2xvc2VzdCBSR0IvQ01ZIHZlcnRpY2VzCkBAIC0y
MDUsMTQgKzE5NSwxMCBAQCBzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB2M3UxNl90IGFwcGx5X3Rv
bmVfbWFwKGNvbnN0IFN3c0x1dDNEICpsdXQzZCwgdjN1MTZfdCBpcAogICAgIHJldHVybiBpcHQ7
CiB9CiAKLWludCBmZl9zd3NfbHV0M2RfZ2VuZXJhdGUoU3dzTHV0M0QgKmx1dDNkLCBlbnVtIEFW
UGl4ZWxGb3JtYXQgZm10X2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEFWUGl4
ZWxGb3JtYXQgZm10X291dCwgY29uc3QgU3dzQ29sb3JNYXAgKm1hcCkKK2ludCBmZl9zd3NfbHV0
M2RfZ2VuZXJhdGUoU3dzTHV0M0QgKmx1dDNkLCBjb25zdCBTd3NDb2xvck1hcCAqbWFwKQogewog
ICAgIGludCByZXQ7CiAKLSAgICBpZiAoIWZmX3N3c19sdXQzZF90ZXN0X2ZtdChmbXRfaW4sIDAp
IHx8ICFmZl9zd3NfbHV0M2RfdGVzdF9mbXQoZm10X291dCwgMSkpCi0gICAgICAgIHJldHVybiBB
VkVSUk9SKEVJTlZBTCk7Ci0KICAgICBsdXQzZC0+ZHluYW1pYyA9IG1hcC0+c3JjLmZyYW1lX3Bl
YWsubnVtID4gMDsKICAgICBsdXQzZC0+bWFwID0gKm1hcDsKIApAQCAtMjQ1LDggKzIzMSw5IEBA
IHZvaWQgZmZfc3dzX2x1dDNkX3VwZGF0ZShTd3NMdXQzRCAqbHV0M2QsIGNvbnN0IFN3c0NvbG9y
ICpuZXdfc3JjKQogICAgIGx1dDNkLT50b25lX21hcFtUT05FX0xVVF9TSVpFXSA9IGx1dDNkLT50
b25lX21hcFtUT05FX0xVVF9TSVpFIC0gMV07CiB9CiAKLXZvaWQgZmZfc3dzX2x1dDNkX2FwcGx5
KGNvbnN0IFN3c0x1dDNEICpsdXQzZCwgY29uc3QgdWludDhfdCAqaW4sIGludCBpbl9zdHJpZGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpvdXQsIGludCBvdXRfc3RyaWRlLCBp
bnQgdywgaW50IGgpCit2b2lkIGZmX3N3c19sdXQzZF9hcHBseV9yZ2JhNjQoY29uc3QgU3dzTHV0
M0QgKmx1dDNkLCBjb25zdCB1aW50OF90ICppbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5fc3RyaWRlLCB1aW50OF90ICpvdXQsIGludCBvdXRfc3RyaWRlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3LCBpbnQgaCkKIHsKICAgICB3aGlsZSAoaC0t
KSB7CiAgICAgICAgIGNvbnN0IHVpbnQxNl90ICppbjE2ID0gKGNvbnN0IHVpbnQxNl90ICopIGlu
OwpkaWZmIC0tZ2l0IGEvbGlic3dzY2FsZS9sdXQzZC5oIGIvbGlic3dzY2FsZS9sdXQzZC5oCmlu
ZGV4IDY2MGRjMDhmMjYuLjAyZTExMjJjZmEgMTAwNjQ0Ci0tLSBhL2xpYnN3c2NhbGUvbHV0M2Qu
aAorKysgYi9saWJzd3NjYWxlL2x1dDNkLmgKQEAgLTY0LDE2ICs2NCw2IEBAIHR5cGVkZWYgc3Ry
dWN0IFN3c0x1dDNEIHsKICAqLwogU3dzTHV0M0QgKmZmX3N3c19sdXQzZF9hbGxvYyh2b2lkKTsK
IAotLyoqCi0gKiBUZXN0IHRvIHNlZSBpZiBhIGdpdmVuIGZvcm1hdCBpcyBzdXBwb3J0ZWQgYnkg
dGhlIDNETFVUIGlucHV0L291dHB1dCBjb2RlLgotICovCi1ib29sIGZmX3N3c19sdXQzZF90ZXN0
X2ZtdChlbnVtIEFWUGl4ZWxGb3JtYXQgZm10LCBpbnQgb3V0cHV0KTsKLQotLyoqCi0gKiBQaWNr
IHRoZSBiZXN0IGNvbXBhdGlibGUgcGl4Zm10IGZvciBhIGdpdmVuIFN3c0Zvcm1hdC4KLSAqLwot
ZW51bSBBVlBpeGVsRm9ybWF0IGZmX3N3c19sdXQzZF9waWNrX3BpeGZtdChjb25zdCBTd3NGb3Jt
YXQgKmZtdCwgaW50IG91dHB1dCk7Ci0KIC8qKgogICogUmVjYWxjdWxhdGUgdGhlIChzdGF0aWMp
IDNETFVUIHN0YXRlIHdpdGggbmV3IHNldHRpbmdzLiBUaGlzIHdpbGwgcmVjb21wdXRlCiAgKiBl
dmVyeXRoaW5nLiBUbyBvbmx5IHVwZGF0ZSBwZXItZnJhbWUgdG9uZSBtYXBwaW5nIHN0YXRlLCBp
bnN0ZWFkIGNhbGwKQEAgLTgxLDggKzcxLDcgQEAgZW51bSBBVlBpeGVsRm9ybWF0IGZmX3N3c19s
dXQzZF9waWNrX3BpeGZtdChjb25zdCBTd3NGb3JtYXQgKmZtdCwgaW50IG91dHB1dCk7CiAgKgog
ICogUmV0dXJucyAwIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KICAqLwotaW50IGZmX3N3c19s
dXQzZF9nZW5lcmF0ZShTd3NMdXQzRCAqbHV0M2QsIGVudW0gQVZQaXhlbEZvcm1hdCBmbXRfaW4s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZQaXhlbEZvcm1hdCBmbXRfb3V0LCBj
b25zdCBTd3NDb2xvck1hcCAqbWFwKTsKK2ludCBmZl9zd3NfbHV0M2RfZ2VuZXJhdGUoU3dzTHV0
M0QgKmx1dDNkLCBjb25zdCBTd3NDb2xvck1hcCAqbWFwKTsKIAogLyoqCiAgKiBVcGRhdGUgdGhl
IHRvbmUgbWFwcGluZyBzdGF0ZS4gVGhpcyB3aWxsIG9ubHkgdXNlIHBlci1mcmFtZSBtZXRhZGF0
YS4gVGhlCkBAIC05MSwxMCArODAsMTAgQEAgaW50IGZmX3N3c19sdXQzZF9nZW5lcmF0ZShTd3NM
dXQzRCAqbHV0M2QsIGVudW0gQVZQaXhlbEZvcm1hdCBmbXRfaW4sCiB2b2lkIGZmX3N3c19sdXQz
ZF91cGRhdGUoU3dzTHV0M0QgKmx1dDNkLCBjb25zdCBTd3NDb2xvciAqbmV3X3NyYyk7CiAKIC8q
KgotICogQXBwbGllcyBhIGNvbG9yIHRyYW5zZm9ybWF0aW9uIHRvIGEgcGxhbmUuIFRoZSBmb3Jt
YXQgbXVzdCBtYXRjaCB0aGUgZm9ybWF0Ci0gKiBwcm92aWRlZCBkdXJpbmcgZmZfc3dzX2x1dDNk
X3VwZGF0ZSgpLgorICogQXBwbGllcyBhIGNvbG9yIHRyYW5zZm9ybWF0aW9uIHRvIGEgcGxhbmUg
aW4gUkdCQTY0IGZvcm1hdC4KICAqLwotdm9pZCBmZl9zd3NfbHV0M2RfYXBwbHkoY29uc3QgU3dz
THV0M0QgKmx1dDNkLCBjb25zdCB1aW50OF90ICppbiwgaW50IGluX3N0cmlkZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQ4X3QgKm91dCwgaW50IG91dF9zdHJpZGUsIGludCB3LCBpbnQg
aCk7Cit2b2lkIGZmX3N3c19sdXQzZF9hcHBseV9yZ2JhNjQoY29uc3QgU3dzTHV0M0QgKmx1dDNk
LCBjb25zdCB1aW50OF90ICppbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5fc3RyaWRlLCB1aW50OF90ICpvdXQsIGludCBvdXRfc3RyaWRlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCB3LCBpbnQgaCk7CiAKICNlbmRpZiAvKiBTV1NDQUxFX0xVVDNE
X0ggKi8KLS0gCjIuNTIuMAoKCkZyb20gNDE4ZGYyZGVmODA2ZTJlZDE5OTVlMDk3ZjBjYWY1Y2Q5
ZmNiMTVhZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogTmlrbGFzIEhhYXMgPGdpdEBo
YWFzbi5kZXY+CkRhdGU6IE1vbiwgMjcgSnVsIDIwMjYgMTM6NTE6MTAgKzAyMDAKU3ViamVjdDog
W1BBVENIIDExLzE4XSBzd3NjYWxlL2NtczogZml4IElQVCByb3VuZGluZyBlcnJvcgoKYXZfcm91
bmQxNmYoKSB3YXMgaW5jb3JyZWN0bHkgc2NhbGluZyB0byA2NTUzNCwgd2hpY2ggd291bGQgY29y
cmVzcG9uZCB0bwphIG5ldXRyYWwgUFQgb2Zmc2V0IG9mIDMyNzY3ID0gKDEgPDwgMTUpIC0gMSwg
YnV0IHRoZSBjb2RlIHdhcyBhc3N1bWluZyBhCnZhbHVlIG9mICgxIDw8IDE1KS4gVG8gZml4IGl0
LCBhbmQgbWFrZSB0aGUgUFQgY2hhbm5lbCBjb3JyZWN0bHkgc3ltbWV0cmljCmFyb3VuZCB0aGUg
aW50ZW5kZWQgbmV1dHJhbCB2YWx1ZSwgd2UgaGF2ZSB0byBtYXAgUFQgPSArMC41IHRvIDY1NTM2
LCBhbgp1bnJlcHJlc2VudGFibGUgdmFsdWUuIFRoaXMgaXMgbm90IGFuIGlzc3VlIGJlY2F1c2Ug
dGhlIFBUIGNoYW5uZWwgdmFsdWVzIGFyZQpzdHJpY3RseSBpbnNpZGUgc29tZSBzdWJzZXQgb2Yg
Wy0wLjUsIDAuNV0gaW4gcHJhY3RpY2UsIGZvciByZWFsIGluLWdhbXV0CmNvbG9yIHZhbHVlcyAt
IGl0J3MgYWxyZWFkeSBhbiBlbnZlbG9wZSB0aGF0IGluY2x1ZGVzIHF1aXRlIGEgYml0IG9mIHNh
ZmV0eQptYXJnaW4uCgpTaW1pbGFybHksIGF2X3JvdW5kMTZmKCkgaXMgYWxzbyB0aGUgd3Jvbmcg
dG9vbCBmb3IgdGhlIEkvUkdCIGNoYW5uZWxzLApiZWNhdXNlIGl0IGluY29ycmVjdGx5IHNjYWxl
ZCB0aG9zZSB0byA2NTUzNCwgYW4gb2ZmIGJ5IG9uZSBvZiB0aGUgaW50ZW5kZWQKdW5vcm0xNiBm
dWxsIHJhbmdlIHBlYWsgb2YgNjU1MzUuIFRoaXMgc2lsZW50bHkgcmVzdWx0ZWQgaW4gZS5nLiBS
R0JBNjQKdHJ1ZSB3aGl0ZSAoNjU1MzUpIG5vdCByb3VuZC10cmlwcGluZyB0aHJvdWdoIHRoZSAz
RExVVC4KCkZpeCBib3RoIGJ5IHNwbGl0dGluZyB0aGlzIGhlbHBlciBpbnRvIHR3byBzZXBhcmF0
ZSBoZWxwZXJzLCBlYWNoIG9mIHRoZW0KZml4ZWQgdG8gdGhlIGNvcnJlY3QsIGludGVuZGVkIHZh
bHVlIHJhbmdlLgoKU3BvbnNvcmVkLWJ5OiBTb3ZlcmVpZ24gVGVjaCBGdW5kClNpZ25lZC1vZmYt
Ynk6IE5pa2xhcyBIYWFzIDxnaXRAaGFhc24uZGV2PgotLS0KIGxpYnN3c2NhbGUvY21zLmMgfCAz
NCArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTkg
aW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGlic3dzY2FsZS9j
bXMuYyBiL2xpYnN3c2NhbGUvY21zLmMKaW5kZXggMWM5Yzg3NGE1NS4uNzM0NDhlY2ViYyAxMDA2
NDQKLS0tIGEvbGlic3dzY2FsZS9jbXMuYworKysgYi9saWJzd3NjYWxlL2Ntcy5jCkBAIC01NjIs
OSArNTYyLDE0IEBAIHN0YXRpYyBJUFQgc2F0dXJhdGlvbihjb25zdCBDbXNDdHggKiBjdHgsIElQ
VCBpcHQpCiAgICAgcmV0dXJuIHJnYjJpcHQocmdiLCBjdHgtPmRzdC5jb250ZW50Mmxtcyk7CiB9
CiAKLXN0YXRpYyBhdl9hbHdheXNfaW5saW5lIGF2X2NvbnN0IHVpbnQxNl90IGF2X3JvdW5kMTZm
KGZsb2F0IHgpCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBhdl9jb25zdCB1aW50MTZfdCByb3Vu
ZF91bm9ybTE2KGZsb2F0IHgpCiB7Ci0gICAgcmV0dXJuIGF2X2NsaXBfdWludDE2KHggKiAoVUlO
VDE2X01BWCAtIDEpICsgMC41Zik7CisgICAgcmV0dXJuIGF2X2NsaXBfdWludDE2KHggKiBVSU5U
MTZfTUFYICsgMC41Zik7Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIGF2X2NvbnN0IHVp
bnQxNl90IHJvdW5kX3B0MTYoZmxvYXQgeCkKK3sKKyAgICByZXR1cm4gYXZfY2xpcF91aW50MTYo
eCAqICgxIDw8IDE2KSArIDAuNWYpOwogfQogCiAvKiBDYWxsIHRoaXMgd2hlbmV2ZXIgdGhlIGh1
ZSBjaGFuZ2VzIGluc2lkZSB0aGUgbG9vcCBib2R5ICovCkBAIC02MDIsNyArNjA3LDYgQEAgc3Rh
dGljIHZvaWQgZ2VuZXJhdGVfc2xpY2Uodm9pZCAqcHJpdiwgaW50IGpvYm5yLCBpbnQgdGhyZWFk
bnIsIGludCBuYl9qb2JzLAogCiAgICAgY29uc3QgZmxvYXQgSV9zY2FsZSAgID0gMS4wZiAvIChj
dHguc3JjLkltYXggLSBjdHguc3JjLkltaW4pOwogICAgIGNvbnN0IGZsb2F0IElfb2Zmc2V0ICA9
IC1jdHguc3JjLkltaW4gKiBJX3NjYWxlOwotICAgIGNvbnN0IGZsb2F0IFBUX29mZnNldCA9IChm
bG9hdCkgKDEgPDwgMTUpIC8gKFVJTlQxNl9NQVggLSAxKTsKIAogICAgIGNvbnN0IGZsb2F0IGlu
cHV0X3NjYWxlICAgICA9IDEuMGYgLyAoY3R4LnNpemVfaW5wdXQgLSAxKTsKICAgICBjb25zdCBm
bG9hdCBvdXRwdXRfc2NhbGVfUFQgPSAxLjBmIC8gKGN0eC5zaXplX291dHB1dF9QVCAtIDEpOwpA
QCAtNjI1LDkgKzYyOSw5IEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlX3NsaWNlKHZvaWQgKnByaXYs
IGludCBqb2JuciwgaW50IHRocmVhZG5yLCBpbnQgbmJfam9icywKICAgICAgICAgICAgICAgICBp
ZiAob3V0cHV0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8qIFNhdmUgaW50ZXJtZWRpYXRlIHZh
bHVlIHRvIDNETFVUICovCiAgICAgICAgICAgICAgICAgICAgICppbnB1dCsrID0gKHYzdTE2X3Qp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF2X3JvdW5kMTZmKElfc2NhbGUgKiBpcHQuSSAr
IElfb2Zmc2V0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGF2X3JvdW5kMTZmKGlwdC5QICsg
UFRfb2Zmc2V0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGF2X3JvdW5kMTZmKGlwdC5UICsg
UFRfb2Zmc2V0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kX3Vub3JtMTYoSV9zY2Fs
ZSAqIGlwdC5JICsgSV9vZmZzZXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRfcHQx
NihpcHQuUCArIDAuNWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRfcHQxNihpcHQu
VCArIDAuNWYpLAogICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZV9odWVfcGVha3MoJmN0eCwgaXB0LlAsIGlw
dC5UKTsKQEAgLTY0MSw5ICs2NDUsOSBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZV9zbGljZSh2b2lk
ICpwcml2LCBpbnQgam9ibnIsIGludCB0aHJlYWRuciwgaW50IG5iX2pvYnMsCiAgICAgICAgICAg
ICAgICAgICAgIGNbMl0gPSByZ2IuQjsKICAgICAgICAgICAgICAgICAgICAgY3R4LmRzdC5lb3Rm
X2ludihjdHguZHN0Lkx3LCBjdHguZHN0LkxiLCBjKTsKICAgICAgICAgICAgICAgICAgICAgKmlu
cHV0KysgPSAodjN1MTZfdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYXZfcm91bmQxNmYo
Y1swXSksCi0gICAgICAgICAgICAgICAgICAgICAgICBhdl9yb3VuZDE2ZihjWzFdKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGF2X3JvdW5kMTZmKGNbMl0pLAorICAgICAgICAgICAgICAgICAg
ICAgICAgcm91bmRfdW5vcm0xNihjWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5k
X3Vub3JtMTYoY1sxXSksCisgICAgICAgICAgICAgICAgICAgICAgICByb3VuZF91bm9ybTE2KGNb
Ml0pLAogICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KQEAgLTY1NSw5ICs2NTksOSBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZV9zbGljZSh2b2lk
ICpwcml2LCBpbnQgam9ibnIsIGludCB0aHJlYWRuciwgaW50IG5iX2pvYnMsCiAKICAgICAvKiBH
ZW5lcmF0ZSBzcGxpdCBnYW11dCBtYXBwaW5nIExVVCAqLwogICAgIGZvciAoaW50IFR4ID0gb3V0
cHV0X3N0YXJ0OyBUeCA8IG91dHB1dF9lbmQ7IFR4KyspIHsKLSAgICAgICAgY29uc3QgZmxvYXQg
VCA9IG91dHB1dF9zY2FsZV9QVCAqIFR4IC0gUFRfb2Zmc2V0OworICAgICAgICBjb25zdCBmbG9h
dCBUID0gb3V0cHV0X3NjYWxlX1BUICogVHggLSAwLjVmOwogICAgICAgICBmb3IgKGludCBQeCA9
IDA7IFB4IDwgY3R4LnNpemVfb3V0cHV0X1BUOyBQeCsrKSB7Ci0gICAgICAgICAgICBjb25zdCBm
bG9hdCBQID0gb3V0cHV0X3NjYWxlX1BUICogUHggLSBQVF9vZmZzZXQ7CisgICAgICAgICAgICBj
b25zdCBmbG9hdCBQID0gb3V0cHV0X3NjYWxlX1BUICogUHggLSAwLjVmOwogICAgICAgICAgICAg
dXBkYXRlX2h1ZV9wZWFrcygmY3R4LCBQLCBUKTsKIAogICAgICAgICAgICAgZm9yIChpbnQgSXgg
PSAwOyBJeCA8IGN0eC5zaXplX291dHB1dF9JOyBJeCsrKSB7CkBAIC02NjcsOSArNjcxLDkgQEAg
c3RhdGljIHZvaWQgZ2VuZXJhdGVfc2xpY2Uodm9pZCAqcHJpdiwgaW50IGpvYm5yLCBpbnQgdGhy
ZWFkbnIsIGludCBuYl9qb2JzLAogICAgICAgICAgICAgICAgIGRvdWJsZSBjWzNdID0geyByZ2Iu
UiwgcmdiLkcsIHJnYi5CIH07CiAgICAgICAgICAgICAgICAgY3R4LmRzdC5lb3RmX2ludihjdHgu
ZHN0Lkx3LCBjdHguZHN0LkxiLCBjKTsKICAgICAgICAgICAgICAgICAqb3V0cHV0KysgPSAodjN1
MTZfdCkgewotICAgICAgICAgICAgICAgICAgICBhdl9yb3VuZDE2ZihjWzBdKSwKLSAgICAgICAg
ICAgICAgICAgICAgYXZfcm91bmQxNmYoY1sxXSksCi0gICAgICAgICAgICAgICAgICAgIGF2X3Jv
dW5kMTZmKGNbMl0pLAorICAgICAgICAgICAgICAgICAgICByb3VuZF91bm9ybTE2KGNbMF0pLAor
ICAgICAgICAgICAgICAgICAgICByb3VuZF91bm9ybTE2KGNbMV0pLAorICAgICAgICAgICAgICAg
ICAgICByb3VuZF91bm9ybTE2KGNbMl0pLAogICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTc1OSw3ICs3NjMsNyBAQCB2b2lkIGZmX3N3c190b25lX21hcF9n
ZW5lcmF0ZSh2MnUxNl90ICpsdXQsIGludCBzaXplLCBjb25zdCBTd3NDb2xvck1hcCAqbWFwKQog
ICAgICAgICBjb25zdCBmbG9hdCBJID0gc3JjX3NjYWxlICogaSArIHNyY19vZmZzZXQ7CiAgICAg
ICAgIElQVCBpcHQgPSB0b25lX21hcF9hcHBseSgmY3R4LCAoSVBUKSB7IEksIDEuMGYgfSk7CiAg
ICAgICAgIGx1dFtpXSA9ICh2MnUxNl90KSB7Ci0gICAgICAgICAgICBhdl9yb3VuZDE2Zihkc3Rf
c2NhbGUgKiBpcHQuSSArIGRzdF9vZmZzZXQpLAorICAgICAgICAgICAgcm91bmRfdW5vcm0xNihk
c3Rfc2NhbGUgKiBpcHQuSSArIGRzdF9vZmZzZXQpLAogICAgICAgICAgICAgYXZfY2xpcF91aW50
MTYoaXB0LlAgKiAoMSA8PCAxNSkgKyAwLjVmKSwKICAgICAgICAgfTsKICAgICB9Ci0tIAoyLjUy
LjAKCgpGcm9tIDI3YzRkZWUxMzQ3ZDY4NjIzOTAyZDFlNzE0NzMzNmM0M2ZkZjhiYjYgTW9uIFNl
cCAxNyAwMDowMDowMCAyMDAxCkZyb206IE5pa2xhcyBIYWFzIDxnaXRAaGFhc24uZGV2PgpEYXRl
OiBUaHUsIDIzIEp1bCAyMDI2IDE5OjQ4OjI0ICswMjAwClN1YmplY3Q6IFtQQVRDSCAxMi8xOF0g
c3dzY2FsZS9vcHM6IGFkZCBTV1NfT1BfTFVUXzNEIGFuZCBzdXBwb3J0aW5nIGNvZGUKCkFmdGVy
IGV4dGVuc2l2ZSB0ZXN0aW5nLCBwcm90b3R5cGluZyBhbmQgYmVuY2htYXJraW5nIGFjcm9zcyBh
IHJhbmdlIG9mCnN5c3RlbXMsIEkgZGV0ZXJtaW5lZCB0aGF0IHRoZSBvcHRpbWFsIGRhdGEgbGF5
b3V0IGZvciB0aGUgU0lNRCAzRExVVCBpcwplc3NlbnRpYWxseSBleGFjdGx5IHRoZSBvbmUgd2Ug
aGF2ZS4gMTYtYml0IGludGVnZXJzIGFyZSBuZWFyIG9wdGltYWwgZm9yCnF1YWxpdHkgdnMgY29t
cGFjdG5lc3MsIGFuZCBjcnVjaWFsbHksIHg4NiBsZXRzIHVzIGxvYWQgdGhlIGVudGlyZSBwYWNr
ZWQKM0RMVVQgZW50cnkgd2l0aCBhIHNpbmdsZSBgdnBnYXRoZXJkcWAgaW5zdHJ1Y3Rpb24uCgpU
aGlzIGR3YXJmcyB0aGUgbG9zcyBmcm9tIG5lZWRpbmcgdG8gY2FzdCB0aGUgcmVzdWx0aW5nIDE2
LWJpdCBpbnRlZ2VycwpiYWNrIHRvIGYzMiBhbmQgcmVub3JtYWxpemUuCgpTcG9uc29yZWQtYnk6
IFNvdmVyZWlnbiBUZWNoIEZ1bmQKU2lnbmVkLW9mZi1ieTogTmlrbGFzIEhhYXMgPGdpdEBoYWFz
bi5kZXY+Ci0tLQogbGlic3dzY2FsZS9vcHMuYyAgICAgICAgICAgfCAzNyArKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKystCiBsaWJzd3NjYWxlL29wcy5oICAgICAgICAgICB8IDMx
ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxpYnN3c2NhbGUvb3BzX29wdGltaXpl
ci5jIHwgMTEgKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNzggaW5zZXJ0aW9ucygrKSwg
MSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL2xpYnN3c2NhbGUvb3BzLmMgYi9saWJzd3NjYWxl
L29wcy5jCmluZGV4IDIxNDYyZGYzODYuLjg0ODJmN2M1ZWMgMTAwNjQ0Ci0tLSBhL2xpYnN3c2Nh
bGUvb3BzLmMKKysrIGIvbGlic3dzY2FsZS9vcHMuYwpAQCAtODgsNiArODgsNyBAQCBjb25zdCBj
aGFyICpmZl9zd3Nfb3BfdHlwZV9uYW1lKFN3c09wVHlwZSBvcCkKICAgICBjYXNlIFNXU19PUF9E
SVRIRVI6ICAgICAgcmV0dXJuICJTV1NfT1BfRElUSEVSIjsKICAgICBjYXNlIFNXU19PUF9GSUxU
RVJfSDogICAgcmV0dXJuICJTV1NfT1BfRklMVEVSX0giOwogICAgIGNhc2UgU1dTX09QX0ZJTFRF
Ul9WOiAgICByZXR1cm4gIlNXU19PUF9GSUxURVJfViI7CisgICAgY2FzZSBTV1NfT1BfTFVUXzNE
OiAgICAgIHJldHVybiAiU1dTX09QX0xVVF8zRCI7CiAgICAgY2FzZSBTV1NfT1BfSU5WQUxJRDog
ICAgIHJldHVybiAiU1dTX09QX0lOVkFMSUQiOwogICAgIGNhc2UgU1dTX09QX1RZUEVfTkI6IGJy
ZWFrOwogICAgIH0KQEAgLTI2Niw2ICsyNjcsMTEgQEAgdm9pZCBmZl9zd3NfYXBwbHlfb3BfcShj
b25zdCBTd3NPcCAqb3AsIEFWUmF0aW9uYWw2NCB4WzRdKQogICAgICAgICAvKiBGaWx0ZXJzIGhh
dmUgbm9ybWFsaXplZCBlbmVyZ3kgYnkgZGVmaW5pdGlvbiwgc28gdGhleSBkb24ndAogICAgICAg
ICAgKiBjb25jZXB0dWFsbHkgbW9kaWZ5IGluZGl2aWR1YWwgY29tcG9uZW50cyAqLwogICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBTV1NfT1BfTFVUXzNEOgorICAgICAgICAvKiAzRCBMVVRzIGFy
ZSB0cmVhdGVkIGFzIGEgYmxhY2sgYm94LCBzbyBzZXQgdGhvc2UgdmFsdWVzIHRvIE5hTiAqLwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykKKyAgICAgICAgICAgIHhbaV0gPSAo
QVZSYXRpb25hbDY0KSB7MH07CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdl91bnJl
YWNoYWJsZSgiSW52YWxpZCBvcGVyYXRpb24gdHlwZSEiKTsKQEAgLTMyMyw2ICszMjksNyBAQCB2
b2lkIGZmX3N3c19vcF9saXN0X3VwZGF0ZV9jb21wcyhTd3NPcExpc3QgKm9wcykKICAgICAgICAg
Y2FzZSBTV1NfT1BfVU5QQUNLOgogICAgICAgICBjYXNlIFNXU19PUF9GSUxURVJfSDoKICAgICAg
ICAgY2FzZSBTV1NfT1BfRklMVEVSX1Y6CisgICAgICAgIGNhc2UgU1dTX09QX0xVVF8zRDoKICAg
ICAgICAgICAgIGJyZWFrOyAvKiBzcGVjaWFsIGNhc2VzLCBoYW5kbGVkIGJlbG93ICovCiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBtZW1jcHkob3AtPmNvbXBzLm1pbiwgcHJldi5taW4s
IHNpemVvZihwcmV2Lm1pbikpOwpAQCAtNTE4LDcgKzUyNSwyMSBAQCB2b2lkIGZmX3N3c19vcF9s
aXN0X3VwZGF0ZV9jb21wcyhTd3NPcExpc3QgKm9wcykKICAgICAgICAgICAgIGFwcGx5X2ZpbHRl
cl93ZWlnaHRzKCZvcC0+Y29tcHMsICZwcmV2LCBvcC0+ZmlsdGVyLmtlcm5lbCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotCisgICAgICAgIGNhc2UgU1dTX09QX0xVVF8zRDoKKyAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgICAgICAgICAgICAg
LyogM3gzIGRlcGVuZGVuY3kgbWF0cml4OyBzdHJpcCBhbGwgaW5mb3JtYXRpb24gZXhjZXB0Cisg
ICAgICAgICAgICAgICAgICogU1dTX0NPTVBfR0FSQkFHRSAoZm9yIGNvcnJlY3RuZXNzIHZhbGlk
YXRpb24pICovCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzOyBqKyspCisg
ICAgICAgICAgICAgICAgICAgIEZPUldBUkQoaSwgaiwgZmxhZ3MgJiBTV1NfQ09NUF9HQVJCQUdF
KTsKKyAgICAgICAgICAgICAgICAvKiBMVVQgb3V0cHV0IGRvbWFpbiBpcyBhbHdheXMgc2NhbGVk
IHRvIGZ1bGwgMTYtYml0IHJhbmdlICovCisgICAgICAgICAgICAgICAgb3AtPmNvbXBzLm1pbltp
XSA9IFEoMCk7CisgICAgICAgICAgICAgICAgb3AtPmNvbXBzLm1heFtpXSA9IFEoVUlOVDE2X01B
WCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBQYXNzIHRocm91Z2ggYWxwaGEgY2hh
bm5lbCB1bnRvdWNoZWQgKi8KKyAgICAgICAgICAgIEZPUldBUkQoMywgMywgZmxhZ3MpOworICAg
ICAgICAgICAgb3AtPmNvbXBzLm1pblszXSA9IHByZXYubWluWzNdOworICAgICAgICAgICAgb3At
PmNvbXBzLm1heFszXSA9IHByZXYubWF4WzNdOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgU1dTX09QX0lOVkFMSUQ6CiAgICAgICAgIGNhc2UgU1dTX09QX1RZUEVfTkI6CiAgICAg
ICAgICAgICBhdl91bnJlYWNoYWJsZSgiSW52YWxpZCBvcGVyYXRpb24gdHlwZSEiKTsKQEAgLTU4
Nyw2ICs2MDgsMTEgQEAgdm9pZCBmZl9zd3Nfb3BfbGlzdF91cGRhdGVfY29tcHMoU3dzT3BMaXN0
ICpvcHMpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgU1dTX09QX0xVVF8zRDoKKyAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgMzsgaSsrKQorICAgICAgICAgICAgICAgIG5lZWRfaW5baV0gPSBuZWVkX291dFsw
XSB8IG5lZWRfb3V0WzFdIHwgbmVlZF9vdXRbMl07CisgICAgICAgICAgICBuZWVkX2luWzNdID0g
bmVlZF9vdXRbM107CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIG1l
bWNweShuZWVkX291dCwgbmVlZF9pbiwgc2l6ZW9mKG5lZWRfaW4pKTsKQEAgLTYwOSw2ICs2MzUs
OSBAQCBzdGF0aWMgdm9pZCBvcF91bmluaXQoU3dzT3AgKm9wKQogICAgIGNhc2UgU1dTX09QX0ZJ
TFRFUl9WOgogICAgICAgICBhdl9yZWZzdHJ1Y3RfdW5yZWYoJm9wLT5maWx0ZXIua2VybmVsKTsK
ICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTV1NfT1BfTFVUXzNEOgorICAgICAgICBhdl9yZWZz
dHJ1Y3RfdW5yZWYoJm9wLT5sdXQzZC5sdXQpOworICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICAqb3AgPSAoU3dzT3ApIHswfTsKQEAgLTY3Miw2ICs3MDEsOSBAQCBTd3NPcExpc3QgKmZmX3N3
c19vcF9saXN0X2R1cGxpY2F0ZShjb25zdCBTd3NPcExpc3QgKm9wcykKICAgICAgICAgY2FzZSBT
V1NfT1BfRklMVEVSX1Y6CiAgICAgICAgICAgICBhdl9yZWZzdHJ1Y3RfcmVmKG9wLT5maWx0ZXIu
a2VybmVsKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNXU19PUF9MVVRfM0Q6
CisgICAgICAgICAgICBhdl9yZWZzdHJ1Y3RfcmVmX2Mob3AtPmx1dDNkLmx1dCk7CisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIApAQCAtOTMwLDYgKzk2Miw5IEBAIHZvaWQg
ZmZfc3dzX29wX2Rlc2MoQVZCUHJpbnQgKmJwLCBjb25zdCBTd3NPcCAqb3ApCiAgICAgICAgICAg
ICAgICAgICAga2VybmVsLT5uYW1lLCBrZXJuZWwtPmZpbHRlcl9zaXplKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQorICAgIGNhc2UgU1dTX09QX0xVVF8zRDoKKyAgICAgICAgYXZfYnByaW50Zihi
cCwgIiUtMjBzOiAlcyIsIG5hbWUsIG9wLT5sdXQzZC5keW5hbWljID8gImR5bmFtaWMiIDogInN0
YXRpYyIpOworICAgICAgICBicmVhazsKICAgICBjYXNlIFNXU19PUF9UWVBFX05COgogICAgICAg
ICBicmVhazsKICAgICB9CmRpZmYgLS1naXQgYS9saWJzd3NjYWxlL29wcy5oIGIvbGlic3dzY2Fs
ZS9vcHMuaAppbmRleCA4M2VmMmI0OWRmLi4wMDhlOGM1YjMxIDEwMDY0NAotLS0gYS9saWJzd3Nj
YWxlL29wcy5oCisrKyBiL2xpYnN3c2NhbGUvb3BzLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2lu
Y2x1ZGUgImdyYXBoLmgiCiAjaW5jbHVkZSAiZmlsdGVycy5oIgorI2luY2x1ZGUgImx1dDNkLmgi
CiAjaW5jbHVkZSAicmF0aW9uYWw2NC5oIgogI2luY2x1ZGUgInVvcHMuaCIKIApAQCAtNjIsNiAr
NjMsOSBAQCB0eXBlZGVmIGVudW0gU3dzT3BUeXBlIHsKICAgICBTV1NfT1BfRklMVEVSX0gsICAg
ICAgICAvKiBob3Jpem9udGFsIGZpbHRlcmluZyAqLwogICAgIFNXU19PUF9GSUxURVJfViwgICAg
ICAgIC8qIHZlcnRpY2FsIGZpbHRlcmluZyAqLwogCisgICAgLyogVGFibGUtYmFzZWQgb3BlcmF0
aW9ucy4gRGVmaW5lZCBmb3IgZmxvYXRpbmcgcG9pbnQgdHlwZXMgb25seS4gKi8KKyAgICBTV1Nf
T1BfTFVUXzNELCAgICAgICAgICAvKiBhcHBseSBhIFN3c0x1dDNEICovCisKICAgICBTV1NfT1Bf
VFlQRV9OQiwKIH0gU3dzT3BUeXBlOwogCkBAIC0yMDQsNiArMjA4LDMyIEBAIHR5cGVkZWYgc3Ry
dWN0IFN3c0ZpbHRlck9wIHsKICAgICBTd3NQaXhlbFR5cGUgdHlwZTsgICAgICAgIC8qIHBpeGVs
IHR5cGUgdG8gc3RvcmUgcmVzdWx0IGFzICovCiB9IFN3c0ZpbHRlck9wOwogCit0eXBlZGVmIHN0
cnVjdCBTd3NMdXQzZE9wIHsKKyAgICAvKioKKyAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIGV4dGVy
bmFsIExVVDNEIHRvIGFwcGx5LiBUaGlzIGlzIG1hbmFnZWQgYnkgdGhlIGNhbGxlciwKKyAgICAg
KiBhbmQgbXVzdCByZW1haW4gdmFsaWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgU3dzT3AgYW5k
IGFueSBjb21waWxlZAorICAgICAqIGZ1bmN0aW9ucyBkZXJpdmVkIGZyb20gaXQuCisgICAgICoK
KyAgICAgKiAqbHV0IGlzIG5ldmVyIGRlcmVmZXJlbmNlZCBieSB0aGUgU3dzT3AgY29kZSBpdHNl
bGYsIG9ubHkgYXQgcnVudGltZSBieQorICAgICAqIHRoZSBhY3R1YWwgZGlzcGF0Y2hlZCBpbXBs
ZW1lbnRhdGlvbiwgYW5kIG1heSBiZSBmcmVlbHkgbW9kaWZpZWQgZXZlbgorICAgICAqIGFmdGVy
IG9wIGNvbXBpbGF0aW9uIHRvIHBsYWNlIG5ldyB2YWx1ZXMgZm9yIGR5bmFtaWMgdG9uZS1tYXBw
aW5nLgorICAgICAqCisgICAgICogVGhlIHJlZmVyZW5jZSBhbGdvcml0aG0gZm9yIHRoaXMgb3Bl
cmF0aW9uIGxpdmVzIGluIGx1dDNkLmMsIGFuZAorICAgICAqIGluY2x1ZGVzIGEgdGV0cmFoZWRy
YWwgaW50ZXJwb2xhdGlvbiBjb21wb25lbnQgZm9yIHRoZSBpbnB1dCBMVVQsIGFuZAorICAgICAq
IHRoZW4gYW4gb3B0aW9uYWwgbGluZWFyIHRvbmUgbWFwcGluZyBMVVQgcGx1cyB0cmlsaW5lYXIg
b3V0cHV0IExVVAorICAgICAqICh3aGVuIGx1dC0+ZHluYW1pYyBpcyB0cnVlKS4KKyAgICAgKgor
ICAgICAqIEFsbCBsaW5lYXIgaW50ZXJwb2xhdGlvbnMgYXJlIHBlcmZvcm1lZCBpbiB0aGUgcGl4
ZWwgdmFsdWUncyBuYXRpdmUKKyAgICAgKiByZXByZXNlbnRhdGlvbiwgZXZlbiB0aG91Z2ggdGhl
IExVVHMgdGhlbXNlbHZlcyBhcmUgc3RvcmVkIGFzIHVuc2lnbmVkCisgICAgICogcGFja2VkIDE2
LWJpdCBpbnRlZ2Vycy4gVGhlIGlucHV0IHZhbHVlIHJhbmdlIGlzIGFzc3VtZWQgdG8gYmUgc2Nh
bGVkCisgICAgICogYW5kIGNsYW1wZWQgdG8gdGhlIExVVCdzIGRvbWFpbiAoaS5lLiBbMCwgSU5Q
VVRfTFVUX1NJWkUgLSAxXSksIGFuZCB0aGUKKyAgICAgKiBvdXRwdXQgdmFsdWUgcmFuZ2Ugd2ls
bCBiZSBbMCwgMl4xNi0xXSwgZXhjZXB0IGZvciB0aGUgYWxwaGEgY2hhbm5lbCwKKyAgICAgKiB3
aGljaCBpcyBwYXNzZWQgdGhyb3VnaCB1bnRvdWNoZWQuCisgICAgICovCisgICAgY29uc3QgU3dz
THV0M0QgKmx1dDsgLyogcmVmc3RydWN0ICovCisgICAgYm9vbCBkeW5hbWljOworfSBTd3NMdXQz
ZE9wOworCiB0eXBlZGVmIHN0cnVjdCBTd3NPcCB7CiAgICAgU3dzT3BUeXBlIG9wOyAgICAgIC8q
IG9wZXJhdGlvbiB0byBwZXJmb3JtICovCiAgICAgU3dzUGl4ZWxUeXBlIHR5cGU7IC8qIHBpeGVs
IHR5cGUgdG8gb3BlcmF0ZSBvbiAqLwpAQCAtMjE5LDYgKzI0OSw3IEBAIHR5cGVkZWYgc3RydWN0
IFN3c09wIHsKICAgICAgICAgU3dzU2NhbGVPcCAgICAgIHNjYWxlOwogICAgICAgICBTd3NEaXRo
ZXJPcCAgICAgZGl0aGVyOwogICAgICAgICBTd3NGaWx0ZXJPcCAgICAgZmlsdGVyOworICAgICAg
ICBTd3NMdXQzZE9wICAgICAgbHV0M2Q7CiAgICAgfTsKIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEv
bGlic3dzY2FsZS9vcHNfb3B0aW1pemVyLmMgYi9saWJzd3NjYWxlL29wc19vcHRpbWl6ZXIuYwpp
bmRleCAzNTQ2ZDhiYzllLi5mZDNiNzBkZWVkIDEwMDY0NAotLS0gYS9saWJzd3NjYWxlL29wc19v
cHRpbWl6ZXIuYworKysgYi9saWJzd3NjYWxlL29wc19vcHRpbWl6ZXIuYwpAQCAtNzcsNiArNzcs
NyBAQCBzdGF0aWMgYm9vbCBvcF9jb21tdXRlX2NsZWFyKFN3c09wICpvcCwgU3dzT3AgKm5leHQp
CiAgICAgY2FzZSBTV1NfT1BfUEFDSzoKICAgICBjYXNlIFNXU19PUF9VTlBBQ0s6CiAgICAgY2Fz
ZSBTV1NfT1BfQ0xFQVI6CisgICAgY2FzZSBTV1NfT1BfTFVUXzNEOgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgY2FzZSBTV1NfT1BfVFlQRV9OQjoKICAgICAgICAgYnJlYWs7CkBAIC0xNTcs
NiArMTU4LDcgQEAgc3RhdGljIGJvb2wgb3BfY29tbXV0ZV9zd2l6emxlKFN3c09wICpvcCwgU3dz
T3AgKm5leHQpCiAgICAgY2FzZSBTV1NfT1BfTElORUFSOgogICAgIGNhc2UgU1dTX09QX1BBQ0s6
CiAgICAgY2FzZSBTV1NfT1BfVU5QQUNLOgorICAgIGNhc2UgU1dTX09QX0xVVF8zRDoKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgU1dTX09QX1RZUEVfTkI6CiAgICAgICAgIGJyZWFr
OwpAQCAtMTk4LDYgKzIwMCw3IEBAIHN0YXRpYyBib29sIG9wX2NvbW11dGVfZmlsdGVyKFN3c09w
ICpvcCwgU3dzT3AgKnByZXYpCiAgICAgY2FzZSBTV1NfT1BfTUFYOgogICAgIGNhc2UgU1dTX09Q
X0ZJTFRFUl9IOgogICAgIGNhc2UgU1dTX09QX0ZJTFRFUl9WOgorICAgIGNhc2UgU1dTX09QX0xV
VF8zRDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgU1dTX09QX1RZUEVfTkI6CiAg
ICAgICAgIGJyZWFrOwpAQCAtNzM3LDYgKzc0MCwxNCBAQCByZXRyeToKICAgICAgICAgICAgICAg
ICBnb3RvIHJldHJ5OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY2FzZSBTV1NfT1BfTFVUXzNEOgorICAgICAgICAgICAgLyogRWxpbWluYXRlIHVubmVjZXNz
YXJ5IDNETFVUICovCisgICAgICAgICAgICBpZiAoIShuZWVkZWQgJiBTV1NfQ09NUF9FTEVNUygz
KSkpIHsKKyAgICAgICAgICAgICAgICBmZl9zd3Nfb3BfbGlzdF9yZW1vdmVfYXQob3BzLCBuLCAx
KTsKKyAgICAgICAgICAgICAgICBnb3RvIHJldHJ5OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKLS0gCjIuNTIuMAoKCkZyb20gYzU1MDUwMjMw
NDU5ZTIzOTM4ZWM3MjNlYzBlNWNmN2RhOTJlOTc2MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEK
RnJvbTogTmlrbGFzIEhhYXMgPGdpdEBoYWFzbi5kZXY+CkRhdGU6IFRodSwgMjMgSnVsIDIwMjYg
MjE6MjY6NTIgKzAyMDAKU3ViamVjdDogW1BBVENIIDEzLzE4XSBzd3NjYWxlL3VvcHM6IGFkZCBT
V1NfVU9QX0xVVF8zRCByZWZlcmVuY2UKIGltcGxlbWVudGF0aW9uCgpUaGUgc3RydWN0dXJlIGZv
ciB0aGUgdGV0cmFoZWRyYWwgaW50ZXJwb2xhdGlvbiBkZXZpYXRlcyBzbGlnaHRseSBmcm9tIHRo
ZQpuYWl2ZSBmb3JtdWxhdGlvbiBpbiBsdXQzZC5jOyBpbnN0ZWFkIG9mIGJyYW5jaGluZyBpbnRv
IGV2ZXJ5IHNlcGFyYXRlIGNhc2UsCndlIHNvcnQgdGhlIHdlaWdodHMgYW5kIG9mZnNldHMgdXNp
bmcgYSBzZXJpZXMgb2YgY29uZGl0aW9uYWwgc3dhcHMuIFRoaXMKYWN0dWFsbHkgcGVyZm9ybXMg
aWRlbnRpY2FsbHkgb24gbXkgZW5kLCBidXQgcmVzdWx0cyBpbiBjb2RlIHRoYXQgaXMgbXVjaApj
bG9zZXIgdG8gd2hhdCBTSU1EIHdpbGwgYmUgZG9pbmcuIFRoYXQgc2hvdWxkIGhvcGVmdWxseSBz
ZXJ2ZSBhcyBhIGJldHRlcgpyZWZlcmVuY2UgZm9yIGZ1dHVyZSBTSU1EIGltcGxlbWVudG9ycy4g
KE15c2VsZiBpbmNsdWRlZCkKCkkgYWxzbyByZW9yZGVyZWQgdGhlIGR5bmFtaWMgdG9uZS1tYXBw
aW5nIGNvZGUgYSBiaXQgdG8gYmV0dGVyIGluZGljYXRlIHRoZQpzb3VyY2VzIG9mIGxpdmUgcmVn
aXN0ZXIgcHJlc3N1cmUgdGhhdCB3aWxsIG1hbmlmZXN0IGluIHRoZSByZWFsIFNJTUQga2VybmVs
LgoKU3BvbnNvcmVkLWJ5OiBTb3ZlcmVpZ24gVGVjaCBGdW5kClNpZ25lZC1vZmYtYnk6IE5pa2xh
cyBIYWFzIDxnaXRAaGFhc24uZGV2PgotLS0KIGxpYnN3c2NhbGUvY3NwdXRpbHMuaCAgICAgfCAg
IDQgKwogbGlic3dzY2FsZS91b3BzLmMgICAgICAgICB8ICAxMSArKysKIGxpYnN3c2NhbGUvdW9w
cy5oICAgICAgICAgfCAgIDggKysKIGxpYnN3c2NhbGUvdW9wc19iYWNrZW5kLmMgfCAgIDEgKwog
bGlic3dzY2FsZS91b3BzX2xpc3QuaCAgICB8ICAgMSArCiBsaWJzd3NjYWxlL3VvcHNfbWFjcm9z
LmggIHwgICA4ICsrCiBsaWJzd3NjYWxlL3VvcHNfdG1wbC5jICAgIHwgMTU5ICsrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKystCiA3IGZpbGVzIGNoYW5nZWQsIDE5MSBpbnNlcnRp
b25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvbGlic3dzY2FsZS9jc3B1dGlscy5o
IGIvbGlic3dzY2FsZS9jc3B1dGlscy5oCmluZGV4IDgyZWIwYjY4ZjQuLjU0MzcyNzZlYWQgMTAw
NjQ0Ci0tLSBhL2xpYnN3c2NhbGUvY3NwdXRpbHMuaAorKysgYi9saWJzd3NjYWxlL2NzcHV0aWxz
LmgKQEAgLTczLDYgKzczLDEwIEBAIHR5cGVkZWYgc3RydWN0IHYzdTE2X3QgewogICAgIHVpbnQx
Nl90IHgsIHksIHo7CiB9IHYzdTE2X3Q7CiAKK3R5cGVkZWYgc3RydWN0IHYzZjMyX3QgeworICAg
IGZsb2F0IHgsIHksIHo7Cit9IHYzZjMyX3Q7CisKIC8qIEZhc3QgcGVyY2VwdHVhbCBxdWFudGl6
ZXIgKi8KIHN0YXRpYyBjb25zdCBmbG9hdCBQUV9NMSA9IDI2MTAuLzQwOTYgKiAxLi80LAogICAg
ICAgICAgICAgICAgICAgIFBRX00yID0gMjUyMy4vNDA5NiAqIDEyOCwKZGlmZiAtLWdpdCBhL2xp
YnN3c2NhbGUvdW9wcy5jIGIvbGlic3dzY2FsZS91b3BzLmMKaW5kZXggZmM5ZDYwOTYzNi4uOTVj
ZTZjNzE5ZCAxMDA2NDQKLS0tIGEvbGlic3dzY2FsZS91b3BzLmMKKysrIGIvbGlic3dzY2FsZS91
b3BzLmMKQEAgLTE1OSw2ICsxNTksOSBAQCB2b2lkIGZmX3N3c191b3BfbmFtZShjb25zdCBTd3NV
T3AgKm9wLCBjaGFyIGJ1ZltTV1NfVU9QX05BTUVfTUFYXSkKICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgc2l6ZSA9IDF1IDw8IHBhci0+ZGl0aGVyLnNpemVfbG9nMjsKICAgICAgICAgYXZfYnByaW50
ZigmYnAsICJfJXV4JXUiLCBzaXplLCBzaXplKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBT
V1NfVU9QX0xVVF8zRDoKKyAgICAgICAgYXZfYnByaW50ZigmYnAsICJfJXMiLCBwYXItPmx1dDNk
LmR5bmFtaWMgPyAiZHluYW1pYyIgOiAic3RhdGljIik7CisgICAgICAgIGJyZWFrOwogICAgIH0K
IAogICAgIGF2X2Fzc2VydDAoYXZfYnByaW50X2lzX2NvbXBsZXRlKCZicCkpOwpAQCAtMTc1LDYg
KzE3OCw5IEBAIHN0YXRpYyB2b2lkIHVvcF91bmluaXQoU3dzVU9wICp1b3ApCiAgICAgY2FzZSBT
V1NfVU9QX1JFQURfUExBTkFSX0ZWX0ZNQToKICAgICAgICAgYXZfcmVmc3RydWN0X3VucmVmKCZ1
b3AtPmRhdGEua2VybmVsKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTV1NfVU9QX0xVVF8z
RDoKKyAgICAgICAgYXZfcmVmc3RydWN0X3VucmVmKCZ1b3AtPmRhdGEubHV0M2QpOworICAgICAg
ICBicmVhazsKICAgICB9CiAKICAgICAqdW9wID0gKFN3c1VPcCkgezB9OwpAQCAtNjU1LDYgKzY2
MSwxMSBAQCBzdGF0aWMgaW50IHRyYW5zbGF0ZV9vcChTd3NDb250ZXh0ICpjdHgsIFN3c1VPcExp
c3QgKnVvcHMsIFN3c1VPcEZsYWdzIGZsYWdzLAogICAgICAgICB1b3AudW9wID0gU1dTX1VPUF9T
V0FQX0JZVEVTOwogICAgICAgICB1b3AudHlwZSA9IHBpeGVsX3R5cGVfdG9faW50KG9wLT50eXBl
KTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTV1NfT1BfTFVUXzNEOgorICAgICAgICB1b3Au
dW9wID0gU1dTX1VPUF9MVVRfM0Q7CisgICAgICAgIHVvcC5wYXIubHV0M2QuZHluYW1pYyA9IG9w
LT5sdXQzZC5keW5hbWljOworICAgICAgICB1b3AuZGF0YS5sdXQzZCA9IGF2X3JlZnN0cnVjdF9y
ZWZfYyhvcC0+bHV0M2QubHV0KTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAg
ICAgcmV0dXJuIEFWRVJST1IoRU5PVFNVUCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvbGlic3dzY2Fs
ZS91b3BzLmggYi9saWJzd3NjYWxlL3VvcHMuaAppbmRleCAxOThlNmNhZWE5Li5mZWI4NzQ0ODY1
IDEwMDY0NAotLS0gYS9saWJzd3NjYWxlL3VvcHMuaAorKysgYi9saWJzd3NjYWxlL3VvcHMuaApA
QCAtMzMsNiArMzMsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCBTd3NDb250ZXh0ICAgICAgIFN3c0Nv
bnRleHQ7CiB0eXBlZGVmIHN0cnVjdCBTd3NGaWx0ZXJXZWlnaHRzIFN3c0ZpbHRlcldlaWdodHM7
Cit0eXBlZGVmIHN0cnVjdCBTd3NMdXQzRCAgICAgICAgIFN3c0x1dDNEOwogdHlwZWRlZiBzdHJ1
Y3QgU3dzT3BMaXN0ICAgICAgICBTd3NPcExpc3Q7CiAKIHR5cGVkZWYgZW51bSBTd3NQaXhlbFR5
cGUgewpAQCAtMTc1LDYgKzE3Niw3IEBAIHR5cGVkZWYgZW51bSBTd3NVT3BUeXBlIHsKICAgICBT
V1NfVU9QX0xJTkVBUiwgICAgICAgICAgLyogbWFzayA9IG5vbi10cml2aWFsIG91dHB1dCByb3dz
ICovCiAgICAgU1dTX1VPUF9MSU5FQVJfRk1BLCAgICAgIC8qIHdpdGggU1dTX1VPUF9GTEFHX0ZN
QSAqLwogICAgIFNXU19VT1BfRElUSEVSLCAgICAgICAgICAvKiBtYXNrID0gY29tcG9uZW50cyB0
byBkaXRoZXIgKi8KKyAgICBTV1NfVU9QX0xVVF8zRCwgICAgICAgICAgLyogbWFzayA9IG5lZWRl
ZCBvdXRwdXQgY29tcG9uZW50cyAqLwogCiAgICAgLyogUGxhdGZvcm0tc3BlY2lmaWMgdW9wcyB3
b3VsZCBnbyBoZXJlICovCiAgICAgU1dTX1VPUF9UWVBFX05CLApAQCAtMjM3LDYgKzIzOSwxMCBA
QCB0eXBlZGVmIHN0cnVjdCBTd3NEaXRoZXJVT3AgewogICAgIHVpbnQ4X3Qgc2l6ZV9sb2cyOwog
fSBTd3NEaXRoZXJVT3A7CiAKK3R5cGVkZWYgc3RydWN0IFN3c0x1dDNEVU9wIHsKKyAgICBpbnQg
ZHluYW1pYzsKK30gU3dzTHV0M0RVT3A7CisKIC8qKgogICogQ29tcHV0ZXMgKDEgPDwgc2l6ZV9s
b2cyKSArIE1BWCh5X29mZnNldCkuIFRoZSBkaXRoZXIgbWF0cml4IGF0dGFjaGVkIHRvCiAgKiB0
aGUgU3dzVU9wIGlzIGFsd2F5cyBwcmUtcGFkZGVkIHRvIHRoaXMgbnVtYmVyIG9mIGxpbmVzLgpA
QCAtMjUyLDYgKzI1OCw3IEBAIHR5cGVkZWYgdW5pb24gU3dzVU9wUGFyYW1zIHsKICAgICBTd3ND
bGVhclVPcCAgICAgY2xlYXI7CiAgICAgU3dzTGluZWFyVU9wICAgIGxpbjsKICAgICBTd3NEaXRo
ZXJVT3AgICAgZGl0aGVyOworICAgIFN3c0x1dDNEVU9wICAgICBsdXQzZDsKIH0gU3dzVU9wUGFy
YW1zOwogCiB0eXBlZGVmIHN0cnVjdCBTd3NVT3AgewpAQCAtMjY5LDYgKzI3Niw3IEBAIHR5cGVk
ZWYgc3RydWN0IFN3c1VPcCB7CiAgICAgICAgIFN3c1BpeGVsIHZlYzRbNF07CiAgICAgICAgIFN3
c1BpeGVsIG1hdDRbNF1bNV07ICAgICAgICAvKiByb3cgbWFqb3IgKi8KICAgICAgICAgU3dzU2h1
ZmZsZU1hc2sgc2h1ZmZsZTsgICAgIC8qIGZvciBTV1NfVU9QX1JXX1NIVUZGTEUgKi8KKyAgICAg
ICAgY29uc3QgU3dzTHV0M0QgKmx1dDNkOyAgICAgIC8qIGZvciBTV1NfVU9QX0xVVF8zRDsgcmVm
c3RydWN0ICovCiAgICAgICAgIHZvaWQgKm9wYXF1ZTsgICAgICAgICAgICAgICAvKiByZXNlcnZl
ZCBmb3IgaW50ZXJuYWwgdXNlICovCiAgICAgfSBkYXRhOwogfSBTd3NVT3A7CmRpZmYgLS1naXQg
YS9saWJzd3NjYWxlL3VvcHNfYmFja2VuZC5jIGIvbGlic3dzY2FsZS91b3BzX2JhY2tlbmQuYwpp
bmRleCBkMGQwNWVlNDJmLi41YjM1YzFiNTg1IDEwMDY0NAotLS0gYS9saWJzd3NjYWxlL3VvcHNf
YmFja2VuZC5jCisrKyBiL2xpYnN3c2NhbGUvdW9wc19iYWNrZW5kLmMKQEAgLTkyLDYgKzkyLDcg
QEAKICAgICBTV1NfRk9SKFRZUEUsIENMRUFSLCAgICAgICAgICBSRUZfRU5UUlkpICAgICAgICAg
ICAgICAgIFwKICAgICBTV1NfRk9SKFRZUEUsIExJTkVBUiwgICAgICAgICBSRUZfRU5UUlkpICAg
ICAgICAgICAgICAgIFwKICAgICBTV1NfRk9SKFRZUEUsIERJVEhFUiwgICAgICAgICBSRUZfRU5U
UlkpICAgICAgICAgICAgICAgIFwKKyAgICBTV1NfRk9SKFRZUEUsIExVVF8zRCwgICAgICAgICBS
RUZfRU5UUlkpICAgICAgICAgICAgICAgIFwKICAgICAvKiBlbmQgb2YgbWFjcm8gKi8KIAogc3Rh
dGljIGNvbnN0IFN3c1VPcFRhYmxlIHVvcF90YWJsZSA9IHsKZGlmZiAtLWdpdCBhL2xpYnN3c2Nh
bGUvdW9wc19saXN0LmggYi9saWJzd3NjYWxlL3VvcHNfbGlzdC5oCmluZGV4IGEzNWFmOTAzNjAu
LjMxNjMyZGZjYzAgMTAwNjQ0Ci0tLSBhL2xpYnN3c2NhbGUvdW9wc19saXN0LmgKKysrIGIvbGli
c3dzY2FsZS91b3BzX2xpc3QuaApAQCAtNTcsNSArNTcsNiBAQAogICAgIEVOVFJZKFNXU19VT1Bf
UlNISUZULCAgICAgICAgICAgICAgICJyc2hpZnQiKSAgICAgICAgICAgICAgICAgICAgXAogICAg
IEVOVFJZKFNXU19VT1BfQ0xFQVIsICAgICAgICAgICAgICAgICJjbGVhciIpICAgICAgICAgICAg
ICAgICAgICAgXAogICAgIEVOVFJZKFNXU19VT1BfRElUSEVSLCAgICAgICAgICAgICAgICJkaXRo
ZXIiKSAgICAgICAgICAgICAgICAgICAgXAorICAgIEVOVFJZKFNXU19VT1BfTFVUXzNELCAgICAg
ICAgICAgICAgICJsdXRfM2QiKSAgICAgICAgICAgICAgICAgICAgXAogCiAjZW5kaWYgLyogU1dT
Q0FMRV9VT1BTX0xJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvbGlic3dzY2FsZS91b3BzX21hY3Jvcy5o
IGIvbGlic3dzY2FsZS91b3BzX21hY3Jvcy5oCmluZGV4IDZkNWM4ZmFjZjkuLjNhMjFlZmUyMDYg
MTAwNjQ0Ci0tLSBhL2xpYnN3c2NhbGUvdW9wc19tYWNyb3MuaAorKysgYi9saWJzd3NjYWxlL3Vv
cHNfbWFjcm9zLmgKQEAgLTM0Myw2ICszNDMsOCBAQAogI2RlZmluZSBTV1NfRk9SX1NUUlVDVF9V
OF9MSU5FQVJfRk1BKE1BQ1JPLCAuLi4pCiAjZGVmaW5lIFNXU19GT1JfVThfRElUSEVSKE1BQ1JP
LCAuLi4pCiAjZGVmaW5lIFNXU19GT1JfU1RSVUNUX1U4X0RJVEhFUihNQUNSTywgLi4uKQorI2Rl
ZmluZSBTV1NfRk9SX1U4X0xVVF8zRChNQUNSTywgLi4uKQorI2RlZmluZSBTV1NfRk9SX1NUUlVD
VF9VOF9MVVRfM0QoTUFDUk8sIC4uLikKICNkZWZpbmUgU1dTX0ZPUl9VMTZfUkVBRF9QTEFOQVIo
TUFDUk8sIC4uLikgXAogICAgIE1BQ1JPKF9fVkFfQVJHU19fLCB1MTZfcmVhZF9wbGFuYXJfeCAg
ICAgICAgICAgICAgICAgICAgICAgLCBTV1NfUElYRUxfVTE2LCBTV1NfVU9QX1JFQURfUExBTkFS
ICAgICAsIDB4MSkgXAogICAgIE1BQ1JPKF9fVkFfQVJHU19fLCB1MTZfcmVhZF9wbGFuYXJfeHkg
ICAgICAgICAgICAgICAgICAgICAgLCBTV1NfUElYRUxfVTE2LCBTV1NfVU9QX1JFQURfUExBTkFS
ICAgICAsIDB4MykgXApAQCAtNjI1LDYgKzYyNyw4IEBACiAjZGVmaW5lIFNXU19GT1JfU1RSVUNU
X1UxNl9MSU5FQVJfRk1BKE1BQ1JPLCAuLi4pCiAjZGVmaW5lIFNXU19GT1JfVTE2X0RJVEhFUihN
QUNSTywgLi4uKQogI2RlZmluZSBTV1NfRk9SX1NUUlVDVF9VMTZfRElUSEVSKE1BQ1JPLCAuLi4p
CisjZGVmaW5lIFNXU19GT1JfVTE2X0xVVF8zRChNQUNSTywgLi4uKQorI2RlZmluZSBTV1NfRk9S
X1NUUlVDVF9VMTZfTFVUXzNEKE1BQ1JPLCAuLi4pCiAjZGVmaW5lIFNXU19GT1JfVTMyX1JFQURf
UExBTkFSKE1BQ1JPLCAuLi4pIFwKICAgICBNQUNSTyhfX1ZBX0FSR1NfXywgdTMyX3JlYWRfcGxh
bmFyX3ggICAgICAgICAgICAgICAgICAgICAgICwgU1dTX1BJWEVMX1UzMiwgU1dTX1VPUF9SRUFE
X1BMQU5BUiAgICAgLCAweDEpIFwKICAgICBNQUNSTyhfX1ZBX0FSR1NfXywgdTMyX3JlYWRfcGxh
bmFyX3h5eiAgICAgICAgICAgICAgICAgICAgICwgU1dTX1BJWEVMX1UzMiwgU1dTX1VPUF9SRUFE
X1BMQU5BUiAgICAgLCAweDcpIFwKQEAgLTg0NSw2ICs4NDksOCBAQAogI2RlZmluZSBTV1NfRk9S
X1NUUlVDVF9VMzJfTElORUFSX0ZNQShNQUNSTywgLi4uKQogI2RlZmluZSBTV1NfRk9SX1UzMl9E
SVRIRVIoTUFDUk8sIC4uLikKICNkZWZpbmUgU1dTX0ZPUl9TVFJVQ1RfVTMyX0RJVEhFUihNQUNS
TywgLi4uKQorI2RlZmluZSBTV1NfRk9SX1UzMl9MVVRfM0QoTUFDUk8sIC4uLikKKyNkZWZpbmUg
U1dTX0ZPUl9TVFJVQ1RfVTMyX0xVVF8zRChNQUNSTywgLi4uKQogI2RlZmluZSBTV1NfRk9SX0Yz
Ml9SRUFEX1BMQU5BUihNQUNSTywgLi4uKQogI2RlZmluZSBTV1NfRk9SX1NUUlVDVF9GMzJfUkVB
RF9QTEFOQVIoTUFDUk8sIC4uLikKICNkZWZpbmUgU1dTX0ZPUl9GMzJfUkVBRF9QTEFOQVJfRkgo
TUFDUk8sIC4uLikgXApAQCAtMTE1Nyw1ICsxMTYzLDcgQEAKICAgICBNQUNSTyhfX1ZBX0FSR1Nf
XywgZjMyX2RpdGhlcl94eXp3XzNfMl8wXzVfMTZ4MTYgICAgICAgICAgICwgLnR5cGUgPSBTV1Nf
UElYRUxfRjMyLCAudW9wID0gU1dTX1VPUF9ESVRIRVIgICAgICAgICAgLCAubWFzayA9IDB4Ziwg
LnBhci5kaXRoZXIgPSB7IC55X29mZnNldCA9IHszLCAyLCAwLCA1fSwgLnNpemVfbG9nMiA9IDQg
fSkgXAogICAgIE1BQ1JPKF9fVkFfQVJHU19fLCBmMzJfZGl0aGVyX3h5endfNV8wXzNfMl8xNngx
NiAgICAgICAgICAgLCAudHlwZSA9IFNXU19QSVhFTF9GMzIsIC51b3AgPSBTV1NfVU9QX0RJVEhF
UiAgICAgICAgICAsIC5tYXNrID0gMHhmLCAucGFyLmRpdGhlciA9IHsgLnlfb2Zmc2V0ID0gezUs
IDAsIDMsIDJ9LCAuc2l6ZV9sb2cyID0gNCB9KSBcCiAgICAgTUFDUk8oX19WQV9BUkdTX18sIGYz
Ml9kaXRoZXJfeHl6d181XzJfM18wXzE2eDE2ICAgICAgICAgICAsIC50eXBlID0gU1dTX1BJWEVM
X0YzMiwgLnVvcCA9IFNXU19VT1BfRElUSEVSICAgICAgICAgICwgLm1hc2sgPSAweGYsIC5wYXIu
ZGl0aGVyID0geyAueV9vZmZzZXQgPSB7NSwgMiwgMywgMH0sIC5zaXplX2xvZzIgPSA0IH0pCisj
ZGVmaW5lIFNXU19GT1JfRjMyX0xVVF8zRChNQUNSTywgLi4uKQorI2RlZmluZSBTV1NfRk9SX1NU
UlVDVF9GMzJfTFVUXzNEKE1BQ1JPLCAuLi4pCiAKICNlbmRpZiAvKiBTV1NDQUxFX1VPUFNfTUFD
Uk9TX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnN3c2NhbGUvdW9wc190bXBsLmMgYi9saWJzd3NjYWxl
L3VvcHNfdG1wbC5jCmluZGV4IDE3MmI3ZmIwNmIuLjUyMTUyYmNkZDUgMTAwNjQ0Ci0tLSBhL2xp
YnN3c2NhbGUvdW9wc190bXBsLmMKKysrIGIvbGlic3dzY2FsZS91b3BzX3RtcGwuYwpAQCAtMzAs
NiArMzAsNyBAQAogIyAgZGVmaW5lIFBJWEVMX1RZUEUgU1dTX1BJWEVMX0YzMgogIyAgZGVmaW5l
IHBpeGVsX3QgICAgZmxvYXQKICMgIGRlZmluZSBpbnRlcl90ICAgIGZsb2F0CisjICBkZWZpbmUg
dmVjM190ICAgICB2M2YzMl90CiAjICBkZWZpbmUgUFggICAgICAgICBGMzIKICMgIGRlZmluZSBw
eCAgICAgICAgIGYzMgogI2VsaWYgQklUX0RFUFRIID09IDMyCkBAIC04MzksMTAgKzg0MCwxNjYg
QEAgREVDTF9GVU5DKGxpbmVhciwgY29uc3QgU3dzQ29tcE1hc2sgbWFzaywgY29uc3QgdWludDMy
X3Qgb25lLCBjb25zdCB1aW50MzJfdCB6ZXIKIFNXU19GT1IoUFgsIExJTkVBUiwgREVDTF9JTVBM
LCBsaW5lYXIpCiBTV1NfRk9SX1NUUlVDVChQWCwgTElORUFSLCBERUNMX0VOVFJZLCAuc2V0dXAg
PSBmbihzZXR1cF9saW5lYXIpICkKIAorLyoqKioqKioqKioqKioqKioqKgorICogTG9vay11cCB0
YWJsZXMgKgorICoqKioqKioqKioqKioqKioqKi8KKworREVDTF9TRVRVUChzZXR1cF9sdXQzZCwg
cGFyYW1zLCBvdXQpCit7CisgICAgY29uc3QgU3dzTHV0M0QgKmx1dCA9IHBhcmFtcy0+dW9wLT5k
YXRhLmx1dDNkOworICAgIG91dC0+cHJpdi5wdHIgPSAodm9pZCAqKSBhdl9yZWZzdHJ1Y3RfcmVm
X2MobHV0KTsKKyAgICBvdXQtPmZyZWUgPSBmZl9vcF9wcml2X3VucmVmOworICAgIHJldHVybiAw
OworfQorCisjaWYgSVNfRkxPQVQKK2F2X2Fsd2F5c19pbmxpbmUgc3RhdGljIHZlYzNfdCBmbih2
ZWMzKSh2M3UxNl90IHYpCit7CisgICAgcmV0dXJuICh2ZWMzX3QpIHsgdi54LCB2LnksIHYueiB9
OworfQorCisjZGVmaW5lIGxlcnAoYSwgYiwgdykgKChhKSArICh3KSAqICgocGl4ZWxfdCkgKGIp
IC0gKGEpKSkKKworYXZfYWx3YXlzX2lubGluZSBzdGF0aWMKK3ZlYzNfdCBmbihsZXJwMykodmVj
M190IGEsIHZlYzNfdCBiLCBwaXhlbF90IHcpCit7CisgICAgcmV0dXJuICh2ZWMzX3QpIHsKKyAg
ICAgICAgbGVycChhLngsIGIueCwgdyksCisgICAgICAgIGxlcnAoYS55LCBiLnksIHcpLAorICAg
ICAgICBsZXJwKGEueiwgYi56LCB3KSwKKyAgICB9OworfQorCithdl9hbHdheXNfaW5saW5lIHN0
YXRpYwordmVjM190IGZuKGx1dDNkX3N0YXRpYykoY29uc3QgU3dzTHV0M0QgKnJlc3RyaWN0IGx1
dDNkLCB2ZWMzX3QgcmdiKQoreworICAgIGNvbnN0IGludCByX2Jhc2UgPSAoaW50KSByZ2IueDsK
KyAgICBjb25zdCBpbnQgZ19iYXNlID0gKGludCkgcmdiLnk7CisgICAgY29uc3QgaW50IGJfYmFz
ZSA9IChpbnQpIHJnYi56OworCisgICAgaW50IG9mZjAgPSAocl9iYXNlIDwgSU5QVVRfTFVUX1NJ
WkUgLSAxKTsKKyAgICBpbnQgb2ZmMSA9IChnX2Jhc2UgPCBJTlBVVF9MVVRfU0laRSAtIDEpICog
SU5QVVRfTFVUX1NJWkU7CisgICAgaW50IG9mZjIgPSAoYl9iYXNlIDwgSU5QVVRfTFVUX1NJWkUg
LSAxKSAqIElOUFVUX0xVVF9TSVpFICogSU5QVVRfTFVUX1NJWkU7CisgICAgcGl4ZWxfdCBmMCA9
IHJnYi54IC0gcl9iYXNlOworICAgIHBpeGVsX3QgZjEgPSByZ2IueSAtIGdfYmFzZTsKKyAgICBw
aXhlbF90IGYyID0gcmdiLnogLSBiX2Jhc2U7CisKKyAgICAvKiBTb3J0IG9mZnNldHMgZGVzY2Vu
ZGluZyBieSByZWxhdGl2ZSB3ZWlnaHQgKi8KKyAgICBpZiAoZjAgPCBmMSkgeworICAgICAgICBG
RlNXQVAocGl4ZWxfdCwgZjAsIGYxKTsKKyAgICAgICAgRkZTV0FQKGludCwgb2ZmMCwgb2ZmMSk7
CisgICAgfQorICAgIGlmIChmMCA8IGYyKSB7CisgICAgICAgIEZGU1dBUChwaXhlbF90LCBmMCwg
ZjIpOworICAgICAgICBGRlNXQVAoaW50LCBvZmYwLCBvZmYyKTsKKyAgICB9CisgICAgaWYgKGYx
IDwgZjIpIHsKKyAgICAgICAgRkZTV0FQKHBpeGVsX3QsIGYxLCBmMik7CisgICAgICAgIEZGU1dB
UChpbnQsIG9mZjEsIG9mZjIpOworICAgIH0KKworICAgIC8qIFRldHJhaGVkcmFsIGludGVycG9s
YXRpb24gKi8KKyAgICBjb25zdCBwaXhlbF90IHcwID0gMSAtIGYwOworICAgIGNvbnN0IHBpeGVs
X3QgdzEgPSBmMCAtIGYxOworICAgIGNvbnN0IHBpeGVsX3QgdzIgPSBmMSAtIGYyOworICAgIGNv
bnN0IHBpeGVsX3QgdzMgPSBmMjsKKworICAgIGNvbnN0IHYzdTE2X3QgKnJlc3RyaWN0IGJhc2Ug
PSAmbHV0M2QtPmlucHV0W2JfYmFzZV1bZ19iYXNlXVtyX2Jhc2VdOworICAgIGNvbnN0IHZlYzNf
dCB2MCA9IGZuKHZlYzMpKGJhc2VbMF0pOworICAgIGNvbnN0IHZlYzNfdCB2MSA9IGZuKHZlYzMp
KGJhc2Vbb2ZmMF0pOworICAgIGNvbnN0IHZlYzNfdCB2MiA9IGZuKHZlYzMpKGJhc2Vbb2ZmMCAr
IG9mZjFdKTsKKyAgICBjb25zdCB2ZWMzX3QgdjMgPSBmbih2ZWMzKShiYXNlW29mZjAgKyBvZmYx
ICsgb2ZmMl0pOworCisgICAgcmV0dXJuICh2ZWMzX3QpIHsKKyAgICAgICAgdzAgKiB2MC54ICsg
dzEgKiB2MS54ICsgdzIgKiB2Mi54ICsgdzMgKiB2My54LAorICAgICAgICB3MCAqIHYwLnkgKyB3
MSAqIHYxLnkgKyB3MiAqIHYyLnkgKyB3MyAqIHYzLnksCisgICAgICAgIHcwICogdjAueiArIHcx
ICogdjEueiArIHcyICogdjIueiArIHczICogdjMueiwKKyAgICB9OworfQorCithdl9hbHdheXNf
aW5saW5lIHN0YXRpYwordmVjM190IGZuKGx1dDNkX2R5bmFtaWMpKGNvbnN0IFN3c0x1dDNEICpy
ZXN0cmljdCBsdXQzZCwgdmVjM190IHJnYikKK3sKKyAgICByZ2IueCAqPSAoVE9ORV9MVVRfU0la
RSAtIDEpIC8gKHBpeGVsX3QpIFVJTlQxNl9NQVg7CisKKyAgICAvKiBMaW5lYXIgaW50ZXJwb2xh
dGlvbiAqLworICAgIGNvbnN0IGludCAgICAgSXggPSAoaW50KSByZ2IueDsKKyAgICBjb25zdCBw
aXhlbF90IElmID0gcmdiLnggLSBJeDsKKworICAgIGNvbnN0IHYydTE2X3QgYSA9IGx1dDNkLT50
b25lX21hcFtJeF07CisgICAgY29uc3QgdjJ1MTZfdCBiID0gbHV0M2QtPnRvbmVfbWFwW0l4ICsg
MV07CisKKyAgICBjb25zdCBwaXhlbF90IGsgICAgID0gbGVycChhLnksIGIueSwgSWYpOworICAg
IGNvbnN0IHBpeGVsX3QgYmlhcyAgPSAoMSA8PCAxNSkgLSBrOworICAgIGNvbnN0IHBpeGVsX3Qg
c2NhbGUgPSBrIC8gKHBpeGVsX3QpICgxIDw8IDE1KTsKKworICAgIHJnYi54ID0gbGVycChhLngs
IGIueCwgSWYpOworICAgIHJnYi55ID0gYmlhcyArIHNjYWxlICogcmdiLnk7CisgICAgcmdiLnog
PSBiaWFzICsgc2NhbGUgKiByZ2IuejsKKworICAgIC8qIFJlLXNjYWxlIHRvIG91dHB1dCBMVVQg
c2l6ZSAqLworICAgIHJnYi54ICo9IChPVVRQVVRfTFVUX1NJWkVfSSAgLSAxKSAvIChwaXhlbF90
KSBVSU5UMTZfTUFYOworICAgIHJnYi55ICo9IChPVVRQVVRfTFVUX1NJWkVfUFQgLSAxKSAvIChw
aXhlbF90KSBVSU5UMTZfTUFYOworICAgIHJnYi56ICo9IChPVVRQVVRfTFVUX1NJWkVfUFQgLSAx
KSAvIChwaXhlbF90KSBVSU5UMTZfTUFYOworCisgICAgLyogVHJpbGluZWFyIGludGVycG9sYXRp
b24gKi8KKyAgICBjb25zdCBpbnQgbG8wID0gKGludCkgcmdiLng7CisgICAgY29uc3QgaW50IGxv
MSA9IChpbnQpIHJnYi55OworICAgIGNvbnN0IGludCBsbzIgPSAoaW50KSByZ2IuejsKKworICAg
IGNvbnN0IGludCBoaTAgPSBGRk1JTihsbzAgKyAxLCBPVVRQVVRfTFVUX1NJWkVfSSAgLSAxKTsK
KyAgICBjb25zdCBpbnQgaGkxID0gRkZNSU4obG8xICsgMSwgT1VUUFVUX0xVVF9TSVpFX1BUIC0g
MSk7CisgICAgY29uc3QgaW50IGhpMiA9IEZGTUlOKGxvMiArIDEsIE9VVFBVVF9MVVRfU0laRV9Q
VCAtIDEpOworCisgICAgY29uc3QgcGl4ZWxfdCB3MCAgPSByZ2IueCAtIGxvMDsKKyAgICBjb25z
dCB2ZWMzX3QgYzAwMCA9IGZuKHZlYzMpKGx1dDNkLT5vdXRwdXRbbG8yXVtsbzFdW2xvMF0pOwor
ICAgIGNvbnN0IHZlYzNfdCBjMDAxID0gZm4odmVjMykobHV0M2QtPm91dHB1dFtsbzJdW2xvMV1b
aGkwXSk7CisgICAgY29uc3QgdmVjM190IGMwMCAgPSBmbihsZXJwMykoYzAwMCwgYzAwMSwgdzAp
OworICAgIGNvbnN0IHZlYzNfdCBjMDEwID0gZm4odmVjMykobHV0M2QtPm91dHB1dFtsbzJdW2hp
MV1bbG8wXSk7CisgICAgY29uc3QgdmVjM190IGMwMTEgPSBmbih2ZWMzKShsdXQzZC0+b3V0cHV0
W2xvMl1baGkxXVtoaTBdKTsKKyAgICBjb25zdCB2ZWMzX3QgYzAxICA9IGZuKGxlcnAzKShjMDEw
LCBjMDExLCB3MCk7CisgICAgY29uc3QgdmVjM190IGMxMDAgPSBmbih2ZWMzKShsdXQzZC0+b3V0
cHV0W2hpMl1bbG8xXVtsbzBdKTsKKyAgICBjb25zdCB2ZWMzX3QgYzEwMSA9IGZuKHZlYzMpKGx1
dDNkLT5vdXRwdXRbaGkyXVtsbzFdW2hpMF0pOworICAgIGNvbnN0IHZlYzNfdCBjMTAgID0gZm4o
bGVycDMpKGMxMDAsIGMxMDEsIHcwKTsKKyAgICBjb25zdCB2ZWMzX3QgYzExMCA9IGZuKHZlYzMp
KGx1dDNkLT5vdXRwdXRbaGkyXVtoaTFdW2xvMF0pOworICAgIGNvbnN0IHZlYzNfdCBjMTExID0g
Zm4odmVjMykobHV0M2QtPm91dHB1dFtoaTJdW2hpMV1baGkwXSk7CisgICAgY29uc3QgdmVjM190
IGMxMSAgPSBmbihsZXJwMykoYzExMCwgYzExMSwgdzApOworCisgICAgY29uc3QgcGl4ZWxfdCB3
MSA9IHJnYi55IC0gbG8xOworICAgIGNvbnN0IHZlYzNfdCBjMCAgPSBmbihsZXJwMykoYzAwLCBj
MDEsIHcxKTsKKyAgICBjb25zdCB2ZWMzX3QgYzEgID0gZm4obGVycDMpKGMxMCwgYzExLCB3MSk7
CisKKyAgICBjb25zdCBwaXhlbF90IHcyID0gcmdiLnogLSBsbzI7CisgICAgcmV0dXJuIGZuKGxl
cnAzKShjMCwgYzEsIHcyKTsKK30KKworREVDTF9GVU5DKGx1dDNkLCBjb25zdCBTd3NDb21wTWFz
ayBtYXNrLCBjb25zdCBpbnQgZHluYW1pYykKK3sKKyAgICBjb25zdCBTd3NMdXQzRCAqcmVzdHJp
Y3QgbHV0M2QgPSBpbXBsLT5wcml2LnB0cjsKKworICAgIFNXU19MT09QCisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBTV1NfQkxPQ0tfU0laRTsgaSsrKSB7CisgICAgICAgIHZlYzNfdCBjID0geyB4
W2ldLCB5W2ldLCB6W2ldIH07CisgICAgICAgIGMgPSBmbihsdXQzZF9zdGF0aWMpKGx1dDNkLCBj
KTsKKyAgICAgICAgaWYgKGR5bmFtaWMpCisgICAgICAgICAgICBjID0gZm4obHV0M2RfZHluYW1p
YykobHV0M2QsIGMpOworCisgICAgICAgIHhbaV0gPSBjLng7CisgICAgICAgIHlbaV0gPSBjLnk7
CisgICAgICAgIHpbaV0gPSBjLno7CisgICAgfQorCisgICAgQ09OVElOVUUoeCwgeSwgeiwgdyk7
Cit9CisjZW5kaWYgLyogSVNfRkxPQVQgKi8KKworU1dTX0ZPUihQWCwgTFVUXzNELCBERUNMX0lN
UEwsIGx1dDNkKQorU1dTX0ZPUl9TVFJVQ1QoUFgsIExVVF8zRCwgREVDTF9FTlRSWSwgLnNldHVw
ID0gZm4oc2V0dXBfbHV0M2QpICkKKwogI3VuZGVmIFBJWEVMX01BWAogI3VuZGVmIFBJWEVMX1NX
QVAKICN1bmRlZiBwaXhlbF90CiAjdW5kZWYgaW50ZXJfdAotI3VuZGVmIGJsb2NrX3QKKyN1bmRl
ZiB2ZWMzX3QKICN1bmRlZiBQWAogI3VuZGVmIHB4Ci0tIAoyLjUyLjAKCgpGcm9tIDE4NDM0NjU5
NjEzZTc2NTQwMmExNjI1MmZiZTIxZTQ2NjYyYmFlNzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAx
CkZyb206IE5pa2xhcyBIYWFzIDxnaXRAaGFhc24uZGV2PgpEYXRlOiBGcmksIDI0IEp1bCAyMDI2
IDE1OjQxOjI4ICswMjAwClN1YmplY3Q6IFtQQVRDSCAxNC8xOF0gc3dzY2FsZS9ncmFwaDogbGlm
dCBTd3NMdXQzRCB0byBTd3NHcmFwaCB0b3AgbGV2ZWwKClNpbmNlIHRoaXMgZGVwZW5kcyBvbiB0
aGUgb3ZlcmFsbCBwaWN0dXJlIHBhcmFtZXRlcnMgYW55d2F5cywgdXBkYXRpbmcgaXQKZGlyZWN0
bHkgZnJvbSB0aGUgcHJpdmF0ZSBzZXR1cCgpIGZ1bmN0aW9uIHdhcyBhbHdheXMgYSBiaXQgaGFj
a3kuIE1vcmUKaW1wb3J0YW50bHksIHRoaXMgbmVlZGVkIGZvciB0aGUgb3BzLWJhc2VkIDNETFVU
IGltcGxlbWVudGF0aW9uLCB3aGljaCBpcwphbHJlYWR5IHVzaW5nIHRoZSBwYXNzIHByaXYgcG9p
bnRlciB0byBzdG9yZSB0aGUgY29tcGlsZWQgZnVuY3Rpb24uCgpPdmVyYWxsLCBzaW1wbGVyIHRv
IGp1c3QgbGlmdCBpdCB0byB0aGUgdG9wIGxldmVsIGFuZCB1cGRhdGUgaXQgZGlyZWN0bHkgYXMK
bmVlZGVkLgoKU3BvbnNvcmVkLWJ5OiBTb3ZlcmVpZ24gVGVjaCBGdW5kClNpZ25lZC1vZmYtYnk6
IE5pa2xhcyBIYWFzIDxnaXRAaGFhc24uZGV2PgotLS0KIGxpYnN3c2NhbGUvZ3JhcGguYyB8IDQw
ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGxpYnN3c2NhbGUvZ3Jh
cGguaCB8ICA2ICsrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCAyOCBk
ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWJzd3NjYWxlL2dyYXBoLmMgYi9saWJzd3NjYWxl
L2dyYXBoLmMKaW5kZXggMWMzZmExODhkNS4uMTUxNDI3MmM5NSAxMDA2NDQKLS0tIGEvbGlic3dz
Y2FsZS9ncmFwaC5jCisrKyBiL2xpYnN3c2NhbGUvZ3JhcGguYwpAQCAtNjc5LDI1ICs2NzksMTAg
QEAgc3RhdGljIGludCBhZGRfY29udmVydF9wYXNzKFN3c0dyYXBoICpncmFwaCwgY29uc3QgU3dz
Rm9ybWF0ICpzcmMsCiAgKiBHYW11dCBhbmQgdG9uZSBtYXBwaW5nICoKICAqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgZnJlZV9sdXQzZCh2b2lkICpwcml2KQotewot
ICAgIFN3c0x1dDNEICpsdXQgPSBwcml2OwotICAgIGF2X3JlZnN0cnVjdF91bnJlZigmbHV0KTsK
LX0KLQotc3RhdGljIGludCBzZXR1cF9sdXQzZChjb25zdCBTd3NGcmFtZSAqb3V0LCBjb25zdCBT
d3NGcmFtZSAqaW4sIGNvbnN0IFN3c1Bhc3MgKnBhc3MpCi17Ci0gICAgU3dzTHV0M0QgKmx1dCA9
IHBhc3MtPnByaXY7Ci0KLSAgICAvKiBVcGRhdGUgZHluYW1pYyBmcmFtZSBtZXRhZGF0YSBmcm9t
IHRoZSBvcmlnaW5hbCBzb3VyY2UgZnJhbWUgKi8KLSAgICBmZl9zd3NfbHV0M2RfdXBkYXRlKGx1
dCwgJnBhc3MtPmdyYXBoLT5zcmMuY29sb3IpOwotICAgIHJldHVybiAwOwotfQotCiBzdGF0aWMg
dm9pZCBydW5fbHV0M2QoY29uc3QgU3dzRnJhbWUgKm91dCwgY29uc3QgU3dzRnJhbWUgKmluLCBp
bnQgeSwgaW50IGgsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3dzUGFzcyAqcGFzcykK
IHsKLSAgICBTd3NMdXQzRCAqbHV0ID0gcGFzcy0+cHJpdjsKKyAgICBjb25zdCBTd3NMdXQzRCAq
bHV0ID0gcGFzcy0+Z3JhcGgtPmx1dDNkOwogICAgIHVpbnQ4X3QgKmluX2RhdGFbNF0sICpvdXRf
ZGF0YVs0XTsKICAgICBmcmFtZV9zaGlmdChpbiwgIHksIGluX2RhdGEpOwogICAgIGZyYW1lX3No
aWZ0KG91dCwgeSwgb3V0X2RhdGEpOwpAQCAtNzEzLDcgKzY5OCw2IEBAIHN0YXRpYyBpbnQgYWRh
cHRfY29sb3JzKFN3c0dyYXBoICpncmFwaCwgY29uc3QgU3dzRm9ybWF0ICpzcmNfZm10LAogICAg
IFN3c0Zvcm1hdCBzcmMgPSAqc3JjX2ZtdDsKICAgICBTd3NGb3JtYXQgZHN0ID0gKmRzdF9mbXQ7
CiAgICAgU3dzQ29sb3JNYXAgbWFwID0gezB9OwotICAgIFN3c0x1dDNEICpsdXQ7CiAgICAgaW50
IHJldDsKIAogICAgIC8qKgpAQCAtNzQxLDMwICs3MjUsMjUgQEAgc3RhdGljIGludCBhZGFwdF9j
b2xvcnMoU3dzR3JhcGggKmdyYXBoLCBjb25zdCBTd3NGb3JtYXQgKnNyY19mbXQsCiAgICAgaWYg
KHNyYy5od19mb3JtYXQgIT0gQVZfUElYX0ZNVF9OT05FIHx8IGRzdC5od19mb3JtYXQgIT0gQVZf
UElYX0ZNVF9OT05FKQogICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9UU1VQKTsKIAotICAgIGx1
dCA9IGZmX3N3c19sdXQzZF9hbGxvYygpOwotICAgIGlmICghbHV0KQorICAgIGdyYXBoLT5sdXQz
ZCA9IGZmX3N3c19sdXQzZF9hbGxvYygpOworICAgIGlmICghZ3JhcGgtPmx1dDNkKQogICAgICAg
ICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwogCi0gICAgcmV0ID0gZmZfc3dzX2x1dDNkX2dlbmVy
YXRlKGx1dCwgJm1hcCk7Ci0gICAgaWYgKHJldCA8IDApIHsKLSAgICAgICAgYXZfcmVmc3RydWN0
X3VucmVmKCZsdXQpOworICAgIHJldCA9IGZmX3N3c19sdXQzZF9nZW5lcmF0ZShncmFwaC0+bHV0
M2QsICZtYXApOworICAgIGlmIChyZXQgPCAwKQogICAgICAgICByZXR1cm4gcmV0OwotICAgIH0K
IAogICAgIGNvbnN0IGVudW0gQVZQaXhlbEZvcm1hdCBmbXQgPSBBVl9QSVhfRk1UX1JHQkE2NDsK
ICAgICBpZiAoc3JjLmZvcm1hdCAhPSBmbXQpIHsKICAgICAgICAgU3dzRm9ybWF0IHRtcCA9IHNy
YzsKICAgICAgICAgdG1wLmZvcm1hdCA9IGZtdDsKICAgICAgICAgcmV0ID0gYWRkX2NvbnZlcnRf
cGFzcyhncmFwaCwgJnNyYywgJnRtcCwgaW5wdXQsICZpbnB1dCk7Ci0gICAgICAgIGlmIChyZXQg
PCAwKSB7Ci0gICAgICAgICAgICBhdl9yZWZzdHJ1Y3RfdW5yZWYoJmx1dCk7CisgICAgICAgIGlm
IChyZXQgPCAwKQogICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfQogICAgIH0KIAog
ICAgIHJldHVybiBmZl9zd3NfZ3JhcGhfYWRkX3Bhc3MoZ3JhcGgsIGZtdCwgc3JjLndpZHRoLCBz
cmMuaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsIDAsIDEs
IHJ1bl9sdXQzZCwgc2V0dXBfbHV0M2QsIGx1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZyZWVfbHV0M2QsIG91dHB1dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnB1dCwgMCwgMSwgcnVuX2x1dDNkLCBOVUxMLCBOVUxMLCBOVUxMLCBvdXRwdXQpOwog
fQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC04MjUsNiAr
ODA0LDggQEAgc3RhdGljIHZvaWQgZ3JhcGhfdW5pbml0KFN3c0dyYXBoICpncmFwaCkKICAgICAg
ICAgcGFzc19mcmVlKGdyYXBoLT5wYXNzZXNbaV0pOwogICAgIGF2X2ZyZWUoZ3JhcGgtPnBhc3Nl
cyk7CiAKKyAgICBhdl9yZWZzdHJ1Y3RfdW5yZWYoJmdyYXBoLT5sdXQzZCk7CisKICAgICBtZW1z
ZXQoZ3JhcGgsIDAsIHNpemVvZigqZ3JhcGgpKTsKIH0KIApAQCAtOTM2LDYgKzkxNyw5IEBAIHZv
aWQgZmZfc3dzX2dyYXBoX3VwZGF0ZV9tZXRhZGF0YShTd3NHcmFwaCAqZ3JhcGgsIGNvbnN0IFN3
c0NvbG9yICpjb2xvcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgZmZfY29sb3JfdXBkYXRlX2R5
bmFtaWMoJmdyYXBoLT5zcmMuY29sb3IsIGNvbG9yKTsKKworICAgIGlmIChncmFwaC0+bHV0M2Qp
CisgICAgICAgIGZmX3N3c19sdXQzZF91cGRhdGUoZ3JhcGgtPmx1dDNkLCAmZ3JhcGgtPnNyYy5j
b2xvcik7CiB9CiAKIHN0YXRpYyB2b2lkIGdldF9maWVsZChTd3NHcmFwaCAqZ3JhcGgsIGNvbnN0
IFN3c0Zvcm1hdCAqZm10LApkaWZmIC0tZ2l0IGEvbGlic3dzY2FsZS9ncmFwaC5oIGIvbGlic3dz
Y2FsZS9ncmFwaC5oCmluZGV4IDY4YzZhMGI5ZWIuLjQzOTkzNDZkNDYgMTAwNjQ0Ci0tLSBhL2xp
YnN3c2NhbGUvZ3JhcGguaAorKysgYi9saWJzd3NjYWxlL2dyYXBoLmgKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2luY2x1ZGUgInN3c2NhbGUuaCIKICNpbmNsdWRlICJmb3JtYXQuaCIKKyNpbmNsdWRl
ICJsdXQzZC5oIgogCiBzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBhdl9jb25zdCBpbnQgZmZfZm10
X3ZzaGlmdChlbnVtIEFWUGl4ZWxGb3JtYXQgZm10LCBpbnQgcGxhbmUpCiB7CkBAIC0xNDQsNiAr
MTQ1LDExIEBAIHR5cGVkZWYgc3RydWN0IFN3c0dyYXBoIHsKICAgICAgKi8KICAgICBTd3NGb3Jt
YXQgc3JjLCBkc3Q7CiAKKyAgICAvKioKKyAgICAgKiAzRExVVCBzdGF0ZSB1c2VkIGZvciBnYW11
dC90b25lIG1hcHBpbmcuIChPcHRpb25hbCkKKyAgICAgKi8KKyAgICBTd3NMdXQzRCAqbHV0M2Q7
IC8qIHJlZnN0cnVjdCAqLworCiAgICAgLyoqCiAgICAgICogVGVtcG9yYXJ5IGV4ZWN1dGlvbiBz
dGF0ZSBpbnNpZGUgZmZfc3dzX2dyYXBoX3J1bigpOyB1c2VkIHRvIHBhc3MKICAgICAgKiBkYXRh
IHRvIHdvcmtlciB0aHJlYWRzLgotLSAKMi41Mi4wCgoKRnJvbSA3MzY5NmRkYmNkYzRjYzVjMmYy
M2E5MmVlZTQ4OWE1OWEzZWRiNGY4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWts
YXMgSGFhcyA8Z2l0QGhhYXNuLmRldj4KRGF0ZTogRnJpLCAyNCBKdWwgMjAyNiAxNjo0ODowNyAr
MDIwMApTdWJqZWN0OiBbUEFUQ0ggMTUvMThdIHN3c2NhbGUvZ3JhcGg6IG1vdmUgM0RMVVQgcGFz
cyB0byB0aGUgbGVnYWN5IHN3cwogd3JhcHBlcgoKSW5zdGVhZCBvZiBnZW5lcmF0aW5nIHRoZSAz
RExVVCBhbmQgYXBwbHlpbmcgaXQgcmlnaHQgYXdheSwgaW5pdF9wYXNzZXMoKQpub3cganVzdCBn
ZW5lcmF0ZXMgaXQgYW5kIHBhc3NlcyBpdCBhcyBhIHBhcmFtZXRlciB0byBhZGRfY29udmVydF9w
YXNzKCksCndoaWNoIHdpbGwgZm9yd2FyZCBpdCB0byB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRh
dGlvbi4KCkZvciB0aGUgZXhpc3RpbmcgZmZfc3dzX2x1dDNkX2FwcGx5X3JnYmE2NCgpIGZhbGxi
YWNrLCB3ZSByZWxlZ2F0ZSB0aGlzIHRvCnRoZSBsZWdhY3kgc3dzIHdyYXBwZXIgZXhwbGljaXRs
eS4gVGhpcyBkb2VzIHJlcXVpcmUgYSB0ZW1wb3JhcnkgZml4IHRvCmZvcmNlIHRoZSB1c2Ugb2Yg
dGhlIGxlZ2FjeSBiYWNrZW5kIHdoZW4gdXNpbmcgYSBMVVQzRCwgb3RoZXJ3aXNlIHRoaXMKd291
bGQgcmVncmVzcyB0aGUgdW5zdGFibGUgYmFja2VuZC4KClRoYXQgc2FpZCwgdGhlIHVuc3RhYmxl
IGJhY2tlbmQgd2FzIGFscmVhZHkgbm90IGhhbmRsaW5nIDNETFVUcyBjb3JyZWN0bHksIGFzCml0
IGZhaWxlZCB0byBub3JtYWxpemUgdGhlIFN3c0Zvcm1hdCBhdHRyaWJ1dGVzIGFmdGVyIHRoZSBj
b252ZXJzaW9uIHRvClJHQkE2NCwgbGVhZGluZyB0byBlLmcuIGRvdWJsZSBhcHBsaWNhdGlvbiBv
ZiB0aGUgWVVWLT5SR0IgbWF0cml4LCBzbyB0aGlzCmNvbW1pdCBpbiBpc29sYXRpb24gaXMgdGVj
aG5pY2FsbHkgYSBidWcgZml4LgoKKEluIHRoZW9yeSwgdGhlcmUgaXMgdGhlIGVkZ2UgY2FzZSBo
ZXJlIG9mIHByZXZpb3VzbHktdW5zdXBwb3J0ZWQgcGl4ZWwKZm9ybWF0cyB3aGljaCBvbmx5IHRo
ZSBvcHMgYmFja2VuZCBoYW5kbGVzLCB0aGF0IHdpbGwgbm93IG5ldmVyIHNlZSB0aGUKTFVUM0Qg
YXBwbGljYXRpb24sIGJ1dCBJIGRvbid0IHRoaW5rIGl0J3MgZXZlbiBwb3NzaWJsZSB0byBjb21i
aW5lIHN1Y2gKZm9ybWF0cyB3aXRoIEhEUiBjb2xvcnNwYWNlcywgc28gSSB0aGluayB0aGlzIGlz
IGEgbW9vdCBwb2ludC4gRWl0aGVyIHdheSwKd2UncmUgc3RpbGwgY293YXJkbHkgaGlkaW5nIGJl
aGluZGUgU1dTX1VOU1RBQkxFIHNvIGEgYml0IG9mIHRlbXBvcmFyeQpicmVha2FnZSBpcyBmaW5l
LiBUaGUgbmV4dCBjb21taXQgd2lsbCBjbGVhbiBpdCB1cCBwcm9wZXJseS4pCgpTcG9uc29yZWQt
Ynk6IFNvdmVyZWlnbiBUZWNoIEZ1bmQKU2lnbmVkLW9mZi1ieTogTmlrbGFzIEhhYXMgPGdpdEBo
YWFzbi5kZXY+Ci0tLQogbGlic3dzY2FsZS9ncmFwaC5jIHwgMTI3ICsrKysrKysrKysrKysrKysr
KysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDc0IGluc2VydGlv
bnMoKyksIDUzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYnN3c2NhbGUvZ3JhcGguYyBi
L2xpYnN3c2NhbGUvZ3JhcGguYwppbmRleCAxNTE0MjcyYzk1Li5jY2UxMWQ2ZDBhIDEwMDY0NAot
LS0gYS9saWJzd3NjYWxlL2dyYXBoLmMKKysrIGIvbGlic3dzY2FsZS9ncmFwaC5jCkBAIC0zOTEs
NiArMzkxLDE4IEBAIHN0YXRpYyB2b2lkIHJ1bl9sZWdhY3lfc3dzY2FsZShjb25zdCBTd3NGcmFt
ZSAqb3V0LCBjb25zdCBTd3NGcmFtZSAqaW4sCiAgICAgICAgICAgICAgICBzd3MtPnNyY19oLCBv
dXRfZGF0YSwgb3V0LT5saW5lc2l6ZSwgeSwgaCk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ1bl9sZWdh
Y3lfbHV0M2QoY29uc3QgU3dzRnJhbWUgKm91dCwgY29uc3QgU3dzRnJhbWUgKmluLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgeSwgaW50IGgsIGNvbnN0IFN3c1Bhc3MgKnBhc3Mp
Cit7CisgICAgY29uc3QgU3dzTHV0M0QgKmx1dCA9IHBhc3MtPmdyYXBoLT5sdXQzZDsKKyAgICB1
aW50OF90ICppbl9kYXRhWzRdLCAqb3V0X2RhdGFbNF07CisgICAgZnJhbWVfc2hpZnQoaW4sICB5
LCBpbl9kYXRhKTsKKyAgICBmcmFtZV9zaGlmdChvdXQsIHksIG91dF9kYXRhKTsKKworICAgIGZm
X3N3c19sdXQzZF9hcHBseV9yZ2JhNjQobHV0LCBpbl9kYXRhWzBdLCBpbi0+bGluZXNpemVbMF0s
IG91dF9kYXRhWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LT5saW5lc2l6
ZVswXSwgb3V0LT53aWR0aCwgaCk7Cit9CisKIHN0YXRpYyB2b2lkIGxlZ2FjeV9jaHJfcG9zKFN3
c0dyYXBoICpncmFwaCwgaW50ICpjaHJfcG9zLCBpbnQgb3ZlcnJpZGUsIGludCAqd2FybmVkKQog
ewogICAgIGlmIChvdmVycmlkZSA9PSAtNTEzIHx8IG92ZXJyaWRlID09ICpjaHJfcG9zKQpAQCAt
NTE4LDkgKzUzMCwxMiBAQCBzdGF0aWMgaW50IGluaXRfbGVnYWN5X3N1YnBhc3MoU3dzR3JhcGgg
KmdyYXBoLCBTd3NDb250ZXh0ICpzd3MsCiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQg
YWRkX2xlZ2FjeV8zZGx1dF9wYXNzKFN3c0dyYXBoICpncmFwaCwgY29uc3QgU3dzRm9ybWF0ICpz
cmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTd3NQYXNzICppbnB1dCwgU3dz
UGFzcyAqKm91dHB1dCk7CisKIHN0YXRpYyBpbnQgYWRkX2xlZ2FjeV9zd3NfcGFzcyhTd3NHcmFw
aCAqZ3JhcGgsIGNvbnN0IFN3c0Zvcm1hdCAqc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN3c0Zvcm1hdCAqZHN0LCBTd3NQYXNzICppbnB1dCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTd3NQYXNzICoqb3V0cHV0KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFN3c0Zvcm1hdCAqZHN0LCBjb25zdCBTd3NMdXQzRCAqbHV0M2Qs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3dzUGFzcyAqaW5wdXQsIFN3c1Bhc3Mg
KipvdXRwdXQpCiB7CiAgICAgaW50IHJldCwgd2FybmVkID0gMDsKICAgICBTd3NDb250ZXh0ICpj
b25zdCBjdHggPSBncmFwaC0+Y3R4OwpAQCAtNTM1LDYgKzU1MCwxOCBAQCBzdGF0aWMgaW50IGFk
ZF9sZWdhY3lfc3dzX3Bhc3MoU3dzR3JhcGggKmdyYXBoLCBjb25zdCBTd3NGb3JtYXQgKnNyYywK
ICAgICBpZiAoIXN3c19pc1N1cHBvcnRlZElucHV0KHNyYy0+Zm9ybWF0KSB8fCAhc3dzX2lzU3Vw
cG9ydGVkT3V0cHV0KGRzdC0+Zm9ybWF0KSkKICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PVFNV
UCk7CiAKKyAgICAvKiBJZiB3ZSBuZWVkIHRvIGFwcGx5IGEgM0QgTFVULCBhZGQgaXQgYXMgYW4g
ZXhwbGljaXQgaW5wdXQgcHJlcGFzcyAqLworICAgIGlmIChsdXQzZCkgeworICAgICAgICByZXQg
PSBhZGRfbGVnYWN5XzNkbHV0X3Bhc3MoZ3JhcGgsIHNyYywgaW5wdXQsICZpbnB1dCk7CisgICAg
ICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAgICAgICBTd3NG
b3JtYXQgdG1wID0gKnNyYzsKKyAgICAgICAgdG1wLmZvcm1hdCA9IGlucHV0LT5mb3JtYXQ7Cisg
ICAgICAgIHRtcC5jb2xvciAgPSBsdXQzZC0+bWFwLmRzdDsKKyAgICAgICAgcmV0dXJuIGFkZF9s
ZWdhY3lfc3dzX3Bhc3MoZ3JhcGgsICZ0bXAsIGRzdCwgTlVMTCwgaW5wdXQsIG91dHB1dCk7Cisg
ICAgfQorCiAgICAgU3dzQ29udGV4dCAqc3dzID0gc3dzX2FsbG9jX2NvbnRleHQoKTsKICAgICBp
ZiAoIXN3cykKICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKQEAgLTYwOSw2ICs2MzYs
MzMgQEAgc3RhdGljIGludCBhZGRfbGVnYWN5X3N3c19wYXNzKFN3c0dyYXBoICpncmFwaCwgY29u
c3QgU3dzRm9ybWF0ICpzcmMsCiAgICAgcmV0dXJuIGluaXRfbGVnYWN5X3N1YnBhc3MoZ3JhcGgs
IHN3cywgaW5wdXQsIG91dHB1dCk7CiB9CiAKK3N0YXRpYyBpbnQgYWRkX2xlZ2FjeV8zZGx1dF9w
YXNzKFN3c0dyYXBoICpncmFwaCwgY29uc3QgU3dzRm9ybWF0ICpzcmMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTd3NQYXNzICppbnB1dCwgU3dzUGFzcyAqKm91dHB1dCkKK3sK
KyAgICBpbnQgcmV0OworCisgICAgY29uc3QgU3dzTHV0M0QgKmx1dDNkID0gZ3JhcGgtPmx1dDNk
OworICAgIGlmICghbHV0M2QpCisgICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgZW51bSBB
VlBpeGVsRm9ybWF0IGZtdCA9IEFWX1BJWF9GTVRfUkdCQTY0OworICAgIGlmIChzcmMtPmZvcm1h
dCAhPSBmbXQpIHsKKyAgICAgICAgU3dzRm9ybWF0IHRtcCA9ICpzcmM7CisgICAgICAgIHRtcC5m
b3JtYXQgPSBmbXQ7CisgICAgICAgIHJldCA9IGFkZF9sZWdhY3lfc3dzX3Bhc3MoZ3JhcGgsIHNy
YywgJnRtcCwgTlVMTCwgaW5wdXQsICZpbnB1dCk7CisgICAgICAgIGlmIChyZXQgPCAwKQorICAg
ICAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICByZXQgPSBmZl9zd3NfZ3JhcGhfYWRk
X3Bhc3MoZ3JhcGgsIGZtdCwgc3JjLT53aWR0aCwgc3JjLT5oZWlnaHQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlucHV0LCAwLCAxLCBydW5fbGVnYWN5X2x1dDNkLCBOVUxMLCBO
VUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQpOworICAg
IGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgcmV0dXJuIDA7Cit9CisK
IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEZvcm1hdCBjb252ZXJzaW9u
IGFuZCBzY2FsaW5nICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC02
NTYsMTggKzcxMCwxOCBAQCBzdGF0aWMgYm9vbCBwcmVmZXJfb3BzX2JhY2tlbmQoU3dzQ29udGV4
dCAqY3R4LCBjb25zdCBTd3NGb3JtYXQgKnNyYywgY29uc3QgU3dzRgogfQogCiBzdGF0aWMgaW50
IGFkZF9jb252ZXJ0X3Bhc3MoU3dzR3JhcGggKmdyYXBoLCBjb25zdCBTd3NGb3JtYXQgKnNyYywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTd3NGb3JtYXQgKmRzdCwgU3dzUGFz
cyAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3dzUGFzcyAqKm91dHB1dCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTd3NGb3JtYXQgKmRzdCwgY29uc3Qg
U3dzTHV0M0QgKmx1dDNkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN3c1Bhc3MgKmlu
cHV0LCBTd3NQYXNzICoqb3V0cHV0KQogewogICAgIFN3c0NvbnRleHQgKmN0eCA9IGdyYXBoLT5j
dHg7CiAgICAgaW50IHJldDsKIAotICAgIGlmIChwcmVmZXJfb3BzX2JhY2tlbmQoY3R4LCBzcmMs
IGRzdCkpIHsKKyAgICBpZiAocHJlZmVyX29wc19iYWNrZW5kKGN0eCwgc3JjLCBkc3QpICYmICFs
dXQzZCkgewogICAgICAgICByZXQgPSBhZGRfb3BzX2NvbnZlcnRfcGFzcyhncmFwaCwgc3JjLCBk
c3QsIGlucHV0LCBvdXRwdXQpOwogICAgICAgICBpZiAocmV0ID09IEFWRVJST1IoRU5PVFNVUCkp
Ci0gICAgICAgICAgICByZXQgPSBhZGRfbGVnYWN5X3N3c19wYXNzKGdyYXBoLCBzcmMsIGRzdCwg
aW5wdXQsIG91dHB1dCk7CisgICAgICAgICAgICByZXQgPSBhZGRfbGVnYWN5X3N3c19wYXNzKGdy
YXBoLCBzcmMsIGRzdCwgbHV0M2QsIGlucHV0LCBvdXRwdXQpOwogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHJldCA9IGFkZF9sZWdhY3lfc3dzX3Bhc3MoZ3JhcGgsIHNyYywgZHN0LCBpbnB1dCwgb3V0
cHV0KTsKKyAgICAgICAgcmV0ID0gYWRkX2xlZ2FjeV9zd3NfcGFzcyhncmFwaCwgc3JjLCBkc3Qs
IGx1dDNkLCBpbnB1dCwgb3V0cHV0KTsKICAgICAgICAgaWYgKHJldCA9PSBBVkVSUk9SKEVOT1RT
VVApKQogICAgICAgICAgICAgcmV0ID0gYWRkX29wc19jb252ZXJ0X3Bhc3MoZ3JhcGgsIHNyYywg
ZHN0LCBpbnB1dCwgb3V0cHV0KTsKICAgICB9CkBAIC02NzksMjYgKzczMyw5IEBAIHN0YXRpYyBp
bnQgYWRkX2NvbnZlcnRfcGFzcyhTd3NHcmFwaCAqZ3JhcGgsIGNvbnN0IFN3c0Zvcm1hdCAqc3Jj
LAogICogR2FtdXQgYW5kIHRvbmUgbWFwcGluZyAqCiAgKioqKioqKioqKioqKioqKioqKioqKioq
KiovCiAKLXN0YXRpYyB2b2lkIHJ1bl9sdXQzZChjb25zdCBTd3NGcmFtZSAqb3V0LCBjb25zdCBT
d3NGcmFtZSAqaW4sIGludCB5LCBpbnQgaCwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
d3NQYXNzICpwYXNzKQorc3RhdGljIGludCBnZW5lcmF0ZV8zZGx1dChTd3NHcmFwaCAqZ3JhcGgs
IFN3c0Zvcm1hdCAqc3JjLCBTd3NGb3JtYXQgKmRzdCkKIHsKLSAgICBjb25zdCBTd3NMdXQzRCAq
bHV0ID0gcGFzcy0+Z3JhcGgtPmx1dDNkOwotICAgIHVpbnQ4X3QgKmluX2RhdGFbNF0sICpvdXRf
ZGF0YVs0XTsKLSAgICBmcmFtZV9zaGlmdChpbiwgIHksIGluX2RhdGEpOwotICAgIGZyYW1lX3No
aWZ0KG91dCwgeSwgb3V0X2RhdGEpOwotCi0gICAgZmZfc3dzX2x1dDNkX2FwcGx5X3JnYmE2NChs
dXQsIGluX2RhdGFbMF0sIGluLT5saW5lc2l6ZVswXSwgb3V0X2RhdGFbMF0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQtPmxpbmVzaXplWzBdLCBvdXQtPndpZHRoLCBoKTsKLX0K
LQotc3RhdGljIGludCBhZGFwdF9jb2xvcnMoU3dzR3JhcGggKmdyYXBoLCBjb25zdCBTd3NGb3Jt
YXQgKnNyY19mbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTd3NGb3JtYXQgKmRz
dF9mbXQsIFN3c1Bhc3MgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgU3dzUGFzcyAq
Km91dHB1dCkKLXsKLSAgICBTd3NGb3JtYXQgc3JjID0gKnNyY19mbXQ7Ci0gICAgU3dzRm9ybWF0
IGRzdCA9ICpkc3RfZm10OwogICAgIFN3c0NvbG9yTWFwIG1hcCA9IHswfTsKLSAgICBpbnQgcmV0
OwogCiAgICAgLyoqCiAgICAgICogR3JheXNwYWNlIGRvZXMgbm90IHJlYWxseSBoYXZlIHByaW1h
cmllcywgc28ganVzdCBmb3JjZSB0aGUgdXNlIG9mCkBAIC03MDYsNDQgKzc0MywzMCBAQCBzdGF0
aWMgaW50IGFkYXB0X2NvbG9ycyhTd3NHcmFwaCAqZ3JhcGgsIGNvbnN0IFN3c0Zvcm1hdCAqc3Jj
X2ZtdCwKICAgICAgKiB0aGlzIGRvZXMgYWZmZWN0IHRoZSB3ZWlnaHRzIHVzZWQgZm9yIHRoZSBH
cmF5c2NhbGUgY29udmVyc2lvbiwgYnV0CiAgICAgICogaW4gcHJhY3Rpc2UsIHRoYXQgc2hvdWxk
IGdpdmUgdGhlIGV4cGVjdGVkIHJlc3VsdHMgbW9yZSBvZnRlbiB0aGFuIG5vdC4KICAgICAgKi8K
LSAgICBpZiAoaXNHcmF5KGRzdC5mb3JtYXQpKSB7Ci0gICAgICAgIGRzdC5jb2xvciA9IHNyYy5j
b2xvcjsKLSAgICB9IGVsc2UgaWYgKGlzR3JheShzcmMuZm9ybWF0KSkgewotICAgICAgICBzcmMu
Y29sb3IgPSBkc3QuY29sb3I7CisgICAgaWYgKGlzR3JheShkc3QtPmZvcm1hdCkpIHsKKyAgICAg
ICAgZHN0LT5jb2xvciA9IHNyYy0+Y29sb3I7CisgICAgfSBlbHNlIGlmIChpc0dyYXkoc3JjLT5m
b3JtYXQpKSB7CisgICAgICAgIHNyYy0+Y29sb3IgPSBkc3QtPmNvbG9yOwogICAgIH0KIAogICAg
IC8qIEZ1bGx5IGluZmVyIGNvbG9yIHNwYWNlcyBiZWZvcmUgY29sb3IgbWFwcGluZyBsb2dpYyAq
LwotICAgIGdyYXBoLT5pbmNvbXBsZXRlIHw9IGZmX2luZmVyX2NvbG9ycygmc3JjLmNvbG9yLCAm
ZHN0LmNvbG9yKTsKKyAgICBncmFwaC0+aW5jb21wbGV0ZSB8PSBmZl9pbmZlcl9jb2xvcnMoJnNy
Yy0+Y29sb3IsICZkc3QtPmNvbG9yKTsKIAogICAgIG1hcC5pbnRlbnQgPSBncmFwaC0+Y3R4LT5p
bnRlbnQ7Ci0gICAgbWFwLnNyYyAgICA9IHNyYy5jb2xvcjsKLSAgICBtYXAuZHN0ICAgID0gZHN0
LmNvbG9yOworICAgIG1hcC5zcmMgICAgPSBzcmMtPmNvbG9yOworICAgIG1hcC5kc3QgICAgPSBk
c3QtPmNvbG9yOwogCiAgICAgaWYgKGZmX3N3c19jb2xvcl9tYXBfbm9vcCgmbWFwKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKLSAgICBpZiAoc3JjLmh3X2Zvcm1hdCAhPSBBVl9QSVhfRk1UX05PTkUg
fHwgZHN0Lmh3X2Zvcm1hdCAhPSBBVl9QSVhfRk1UX05PTkUpCisgICAgaWYgKHNyYy0+aHdfZm9y
bWF0ICE9IEFWX1BJWF9GTVRfTk9ORSB8fCBkc3QtPmh3X2Zvcm1hdCAhPSBBVl9QSVhfRk1UX05P
TkUpCiAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT1RTVVApOwogCiAgICAgZ3JhcGgtPmx1dDNk
ID0gZmZfc3dzX2x1dDNkX2FsbG9jKCk7CiAgICAgaWYgKCFncmFwaC0+bHV0M2QpCiAgICAgICAg
IHJldHVybiBBVkVSUk9SKEVOT01FTSk7CiAKLSAgICByZXQgPSBmZl9zd3NfbHV0M2RfZ2VuZXJh
dGUoZ3JhcGgtPmx1dDNkLCAmbWFwKTsKLSAgICBpZiAocmV0IDwgMCkKLSAgICAgICAgcmV0dXJu
IHJldDsKLQotICAgIGNvbnN0IGVudW0gQVZQaXhlbEZvcm1hdCBmbXQgPSBBVl9QSVhfRk1UX1JH
QkE2NDsKLSAgICBpZiAoc3JjLmZvcm1hdCAhPSBmbXQpIHsKLSAgICAgICAgU3dzRm9ybWF0IHRt
cCA9IHNyYzsKLSAgICAgICAgdG1wLmZvcm1hdCA9IGZtdDsKLSAgICAgICAgcmV0ID0gYWRkX2Nv
bnZlcnRfcGFzcyhncmFwaCwgJnNyYywgJnRtcCwgaW5wdXQsICZpbnB1dCk7Ci0gICAgICAgIGlm
IChyZXQgPCAwKQotICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZmZfc3dzX2dyYXBoX2FkZF9wYXNzKGdyYXBoLCBmbXQsIHNyYy53aWR0aCwgc3JjLmhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LCAwLCAxLCBydW5fbHV0M2Qs
IE5VTEwsIE5VTEwsIE5VTEwsIG91dHB1dCk7CisgICAgcmV0dXJuIGZmX3N3c19sdXQzZF9nZW5l
cmF0ZShncmFwaC0+bHV0M2QsICZtYXApOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqCkBAIC03NTcsMTQgKzc4MCwxMiBAQCBzdGF0aWMgaW50IGluaXRfcGFz
c2VzKFN3c0dyYXBoICpncmFwaCkKICAgICBTd3NQYXNzICpwYXNzID0gTlVMTDsgLyogcmVhZCBm
cm9tIG1haW4gaW5wdXQgaW1hZ2UgKi8KICAgICBpbnQgcmV0OwogCi0gICAgcmV0ID0gYWRhcHRf
Y29sb3JzKGdyYXBoLCAmc3JjLCAmZHN0LCBwYXNzLCAmcGFzcyk7CisgICAgcmV0ID0gZ2VuZXJh
dGVfM2RsdXQoZ3JhcGgsICZzcmMsICZkc3QpOwogICAgIGlmIChyZXQgPCAwKQogICAgICAgICBy
ZXR1cm4gcmV0OwotICAgIHNyYy5mb3JtYXQgPSBwYXNzID8gcGFzcy0+Zm9ybWF0IDogc3JjLmZv
cm1hdDsKLSAgICBzcmMuY29sb3IgID0gZHN0LmNvbG9yOwogCi0gICAgaWYgKCFmZl9mbXRfZXF1
YWwoJnNyYywgJmRzdCkpIHsKLSAgICAgICAgcmV0ID0gYWRkX2NvbnZlcnRfcGFzcyhncmFwaCwg
JnNyYywgJmRzdCwgcGFzcywgJnBhc3MpOworICAgIGlmICghZmZfZm10X2VxdWFsKCZzcmMsICZk
c3QpIHx8IGdyYXBoLT5sdXQzZCkgeworICAgICAgICByZXQgPSBhZGRfY29udmVydF9wYXNzKGdy
YXBoLCAmc3JjLCAmZHN0LCBncmFwaC0+bHV0M2QsIHBhc3MsICZwYXNzKTsKICAgICAgICAgaWYg
KHJldCA8IDApCiAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgIH0KLS0gCjIuNTIuMAoKCkZy
b20gNGE4ZTM2MjA1ZDgyYjNkODNhNjlhOWIzZDYwMzJkMzllODUwZTkxZiBNb24gU2VwIDE3IDAw
OjAwOjAwIDIwMDEKRnJvbTogTmlrbGFzIEhhYXMgPGdpdEBoYWFzbi5kZXY+CkRhdGU6IEZyaSwg
MjQgSnVsIDIwMjYgMTY6NTQ6MDIgKzAyMDAKU3ViamVjdDogW1BBVENIIDE2LzE4XSBzd3NjYWxl
L2Zvcm1hdDogYWRkIFN3c0x1dDNEIHN1cHBvcnQgdG8gdGhlIG9wcyBsaXN0CiBnZW5lcmF0b3IK
ClRoZSB2YWx1ZSByYW5nZSBub3JtYWxpemF0aW9uIGFuZCBpbnB1dCByYW5nZSBjbGFtcCB3aWxs
IG5vcm1hbGx5IGJlCm9wdGltaXplZCBhd2F5LgoKU3BvbnNvcmVkLWJ5OiBTb3ZlcmVpZ24gVGVj
aCBGdW5kClNpZ25lZC1vZmYtYnk6IE5pa2xhcyBIYWFzIDxnaXRAaGFhc24uZGV2PgotLS0KIGxp
YnN3c2NhbGUvZm9ybWF0LmMgICAgICAgICAgICAgICB8IDYyICsrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKy0KIGxpYnN3c2NhbGUvZm9ybWF0LmggICAgICAgICAgICAgICB8IDE4ICsrKysr
KystLQogbGlic3dzY2FsZS9ncmFwaC5jICAgICAgICAgICAgICAgIHwgMTIgKysrLS0tCiBsaWJz
d3NjYWxlL29wX2xpc3RfZ2VuX3RlbXBsYXRlLmMgfCAgMiArLQogNCBmaWxlcyBjaGFuZ2VkLCA4
MiBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWJzd3NjYWxl
L2Zvcm1hdC5jIGIvbGlic3dzY2FsZS9mb3JtYXQuYwppbmRleCAyNTMxNDM1ZGFlLi5jYmQ3ZTAy
NjNlIDEwMDY0NAotLS0gYS9saWJzd3NjYWxlL2Zvcm1hdC5jCisrKyBiL2xpYnN3c2NhbGUvZm9y
bWF0LmMKQEAgLTE3NDUsOSArMTc0NSw2MiBAQCBpbnQgZmZfc3dzX2FkZF9maWx0ZXJzKFN3c0Nv
bnRleHQgKmN0eCwgU3dzUGl4ZWxUeXBlIHR5cGUsIFN3c09wTGlzdCAqb3BzLAogICAgIHJldHVy
biBhZGRfZmlsdGVyKGN0eCwgdHlwZSwgb3BzLCBTV1NfT1BfRklMVEVSX1YsIHNyYy0+aGVpZ2h0
LCBkc3QtPmhlaWdodCk7CiB9CiAKK2ludCBmZl9zd3NfYXBwbHlfbHV0M2QoU3dzQ29udGV4dCAq
Y3R4LCBTd3NQaXhlbFR5cGUgdHlwZSwgU3dzT3BMaXN0ICpvcHMsCisgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN3c0x1dDNEICpsdXQzZCkKK3sKKyAgICAvKiBVbm5vcm1hbGl6ZSB0byBM
VVQgaW5wdXQgZG9tYWluIGFuZCBjbGFtcCAqLworICAgIGNvbnN0IEFWUmF0aW9uYWw2NCBkb21h
aW4gPSBRKElOUFVUX0xVVF9TSVpFIC0gMSk7CisKKyAgICBSRVQoZmZfc3dzX29wX2xpc3RfYXBw
ZW5kKG9wcywgJihTd3NPcCkgeworICAgICAgICAudHlwZSAgID0gdHlwZSwKKyAgICAgICAgLm9w
ICAgICA9IFNXU19PUF9MSU5FQVIsCisgICAgICAgIC5saW4gICAgPSB7eworICAgICAgICAgICAg
eyBkb21haW4sICAgUSgwKSwgICBRKDApLCBRKDApLCBRKDApIH0sCisgICAgICAgICAgICB7ICAg
USgwKSwgZG9tYWluLCAgIFEoMCksIFEoMCksIFEoMCkgfSwKKyAgICAgICAgICAgIHsgICBRKDAp
LCAgIFEoMCksIGRvbWFpbiwgUSgwKSwgUSgwKSB9LAorICAgICAgICAgICAgeyAgIFEoMCksICAg
USgwKSwgICBRKDApLCBRKDEpLCBRKDApIH0sCisgICAgICAgIH19LAorICAgIH0pKTsKKworICAg
IFJFVChmZl9zd3Nfb3BfbGlzdF9hcHBlbmQob3BzLCAmKFN3c09wKSB7CisgICAgICAgIC5vcCAg
ICAgPSBTV1NfT1BfTUFYLAorICAgICAgICAudHlwZSAgID0gdHlwZSwKKyAgICAgICAgLmNsYW1w
ICA9IHt7IFEoMCksIFEoMCksIFEoMCkgfX0sCisgICAgfSkpOworCisgICAgUkVUKGZmX3N3c19v
cF9saXN0X2FwcGVuZChvcHMsICYoU3dzT3ApIHsKKyAgICAgICAgLm9wICAgICA9IFNXU19PUF9N
SU4sCisgICAgICAgIC50eXBlICAgPSB0eXBlLAorICAgICAgICAuY2xhbXAgID0ge3sgZG9tYWlu
LCBkb21haW4sIGRvbWFpbiB9fSwKKyAgICB9KSk7CisKKyAgICAvKiBBcHBseSB0aGUgM0RMVVQg
aXRzZWxmICovCisgICAgUkVUKGZmX3N3c19vcF9saXN0X2FwcGVuZChvcHMsICYoU3dzT3ApIHsK
KyAgICAgICAgLm9wICAgICA9IFNXU19PUF9MVVRfM0QsCisgICAgICAgIC50eXBlICAgPSB0eXBl
LAorICAgICAgICAubHV0M2QubHV0ICAgICA9IGF2X3JlZnN0cnVjdF9yZWZfYyhsdXQzZCksCisg
ICAgICAgIC5sdXQzZC5keW5hbWljID0gbHV0M2QtPmR5bmFtaWMsCisgICAgfSkpOworCisgICAg
LyogTm9ybWFsaXplIGJhY2sgdG8gWzAsIDFdICovCisgICAgY29uc3QgQVZSYXRpb25hbDY0IGlu
diA9IGF2X2ludl9xNjQoUShVSU5UMTZfTUFYKSk7CisgICAgUkVUKGZmX3N3c19vcF9saXN0X2Fw
cGVuZChvcHMsICYoU3dzT3ApIHsKKyAgICAgICAgLnR5cGUgICA9IHR5cGUsCisgICAgICAgIC5v
cCAgICAgPSBTV1NfT1BfTElORUFSLAorICAgICAgICAubGluICAgID0ge3sKKyAgICAgICAgICAg
IHsgIGludiwgUSgwKSwgUSgwKSwgUSgwKSwgUSgwKSB9LAorICAgICAgICAgICAgeyBRKDApLCAg
aW52LCBRKDApLCBRKDApLCBRKDApIH0sCisgICAgICAgICAgICB7IFEoMCksIFEoMCksICBpbnYs
IFEoMCksIFEoMCkgfSwKKyAgICAgICAgICAgIHsgUSgwKSwgUSgwKSwgUSgwKSwgUSgxKSwgUSgw
KSB9LAorICAgICAgICB9fSwKKyAgICB9KSk7CisKKyAgICByZXR1cm4gMDsKK30KKwogaW50IGZm
X3N3c19vcF9saXN0X2dlbmVyYXRlKFN3c0NvbnRleHQgKmN0eCwgY29uc3QgU3dzRm9ybWF0ICpz
cmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3dzRm9ybWF0ICpkc3QsIFN3
c09wTGlzdCAqKm91dF9vcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqaW5j
b21wbGV0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTd3NGb3JtYXQgKmRz
dCwgY29uc3QgU3dzTHV0M0QgKmx1dDNkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN3
c09wTGlzdCAqKm91dF9vcHMsIGJvb2wgKmluY29tcGxldGUpCiB7CiAgICAgLyogVGhlIG5ldyBj
b2RlIGRvZXMgbm90IHlldCBzdXBwb3J0IGFscGhhIGJsZW5kaW5nICovCiAgICAgaWYgKHNyYy0+
ZGVzYy0+ZmxhZ3MgJiBBVl9QSVhfRk1UX0ZMQUdfQUxQSEEgJiYKQEAgLTE3NzAsNiArMTgyMywx
MSBAQCBpbnQgZmZfc3dzX29wX2xpc3RfZ2VuZXJhdGUoU3dzQ29udGV4dCAqY3R4LCBjb25zdCBT
d3NGb3JtYXQgKnNyYywKICAgICByZXQgPSBmZl9zd3NfYWRkX2ZpbHRlcnMoY3R4LCB0eXBlLCBv
cHMsIHNyYywgZHN0KTsKICAgICBpZiAocmV0IDwgMCkKICAgICAgICAgZ290byBmYWlsOworICAg
IGlmIChsdXQzZCkgeworICAgICAgICByZXQgPSBmZl9zd3NfYXBwbHlfbHV0M2QoY3R4LCB0eXBl
LCBvcHMsIGx1dDNkKTsKKyAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICBnb3RvIGZh
aWw7CisgICAgfQogICAgIHJldCA9IGZmX3N3c19lbmNvZGVfY29sb3JzKGN0eCwgdHlwZSwgb3Bz
LCBzcmMsIGRzdCwgaW5jb21wbGV0ZSk7CiAgICAgaWYgKHJldCA8IDApCiAgICAgICAgIGdvdG8g
ZmFpbDsKZGlmZiAtLWdpdCBhL2xpYnN3c2NhbGUvZm9ybWF0LmggYi9saWJzd3NjYWxlL2Zvcm1h
dC5oCmluZGV4IGVhMmFiN2RjNDEuLjM1ZTkzZmFmN2IgMTAwNjQ0Ci0tLSBhL2xpYnN3c2NhbGUv
Zm9ybWF0LmgKKysrIGIvbGlic3dzY2FsZS9mb3JtYXQuaApAQCAtMjAxLDEzICsyMDEsMjUgQEAg
aW50IGZmX3N3c19hZGRfZmlsdGVycyhTd3NDb250ZXh0ICpjdHgsIFN3c1BpeGVsVHlwZSB0eXBl
LCBTd3NPcExpc3QgKm9wcywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3dzRm9ybWF0
ICpzcmMsIGNvbnN0IFN3c0Zvcm1hdCAqZHN0KTsKIAogLyoqCi0gKiBHZW5lcmF0ZSBhbiBTd3NP
cExpc3QgZGVmaW5pbmcgYSBjb252ZXJzaW9uIGZyb20gYHNyY2AgdG8gYGRzdGAuCisgKiBBcHBl
bmQgYSBzZXQgb2Ygb3BlcmF0aW9ucyBmb3IgYXBwbHlpbmcgYSBnYW11dC90b25lIG1hcHBpbmcg
M0QgTFVUIHRvCisgKiB0aGUgcGl4ZWxzLiBUaGUgaW5wdXQgYW5kIG91dHB1dCBkb21haW4gYXJl
IGFzc3VtZWQgdG8gYmUgbm9ybWFsaXplZAorICogZmxvYXRpbmcgcG9pbnQgUkdCQSBpbiB0aGUg
cmFuZ2UgWzAsIDFdLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZl
IGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU3dzTHV0M0QgU3dz
THV0M0Q7CitpbnQgZmZfc3dzX2FwcGx5X2x1dDNkKFN3c0NvbnRleHQgKmN0eCwgU3dzUGl4ZWxU
eXBlIHR5cGUsIFN3c09wTGlzdCAqb3BzLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
d3NMdXQzRCAqbHV0M2QpOworCisvKioKKyAqIEdlbmVyYXRlIGFuIFN3c09wTGlzdCBkZWZpbmlu
ZyBhIGNvbnZlcnNpb24gZnJvbSBgc3JjYCB0byBgZHN0YCwgd2l0aCBhbgorICogb3B0aW9uYWwg
M0RMVVQgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBnYW11dHMuCiAgKgogICogUmV0dXJucyAwIG9u
IHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICovCiBpbnQg
ZmZfc3dzX29wX2xpc3RfZ2VuZXJhdGUoU3dzQ29udGV4dCAqY3R4LCBjb25zdCBTd3NGb3JtYXQg
KnNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTd3NGb3JtYXQgKmRzdCwg
U3dzT3BMaXN0ICoqb3V0X29wcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpp
bmNvbXBsZXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTd3NGb3JtYXQg
KmRzdCwgY29uc3QgU3dzTHV0M0QgKmx1dDNkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFN3c09wTGlzdCAqKm91dF9vcHMsIGJvb2wgKmluY29tcGxldGUpOwogCiAvKioKICAqIFJlcHJl
c2VudHMgYSB2aWV3IGludG8gYSBzaW5nbGUgZmllbGQgb2YgZnJhbWUgZGF0YS4KZGlmZiAtLWdp
dCBhL2xpYnN3c2NhbGUvZ3JhcGguYyBiL2xpYnN3c2NhbGUvZ3JhcGguYwppbmRleCBjY2UxMWQ2
ZDBhLi40MzYzODYyZDFlIDEwMDY0NAotLS0gYS9saWJzd3NjYWxlL2dyYXBoLmMKKysrIGIvbGli
c3dzY2FsZS9ncmFwaC5jCkBAIC02NjgsOCArNjY4LDggQEAgc3RhdGljIGludCBhZGRfbGVnYWN5
XzNkbHV0X3Bhc3MoU3dzR3JhcGggKmdyYXBoLCBjb25zdCBTd3NGb3JtYXQgKnNyYywKICAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBpbnQgYWRkX29wc19jb252
ZXJ0X3Bhc3MoU3dzR3JhcGggKmdyYXBoLCBjb25zdCBTd3NGb3JtYXQgKnNyYywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3dzRm9ybWF0ICpkc3QsIFN3c1Bhc3MgKmlu
cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTd3NQYXNzICoqb3V0cHV0KQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTd3NGb3JtYXQgKmRzdCwgY29u
c3QgU3dzTHV0M0QgKmx1dDNkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTd3NQ
YXNzICppbnB1dCwgU3dzUGFzcyAqKm91dHB1dCkKIHsKICNpZiBDT05GSUdfVU5TVEFCTEUKICAg
ICBTd3NDb250ZXh0ICpjdHggPSBncmFwaC0+Y3R4OwpAQCAtNjgzLDcgKzY4Myw3IEBAIHN0YXRp
YyBpbnQgYWRkX29wc19jb252ZXJ0X3Bhc3MoU3dzR3JhcGggKmdyYXBoLCBjb25zdCBTd3NGb3Jt
YXQgKnNyYywKICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PVFNVUCk7CiAKICAgICBTd3NPcExp
c3QgKm9wczsKLSAgICBpbnQgcmV0ID0gZmZfc3dzX29wX2xpc3RfZ2VuZXJhdGUoY3R4LCBzcmMs
IGRzdCwgJm9wcywgJmdyYXBoLT5pbmNvbXBsZXRlKTsKKyAgICBpbnQgcmV0ID0gZmZfc3dzX29w
X2xpc3RfZ2VuZXJhdGUoY3R4LCBzcmMsIGRzdCwgbHV0M2QsICZvcHMsICZncmFwaC0+aW5jb21w
bGV0ZSk7CiAgICAgaWYgKHJldCA8IDApCiAgICAgICAgIHJldHVybiByZXQ7CiAKQEAgLTcxNiwx
NCArNzE2LDE0IEBAIHN0YXRpYyBpbnQgYWRkX2NvbnZlcnRfcGFzcyhTd3NHcmFwaCAqZ3JhcGgs
IGNvbnN0IFN3c0Zvcm1hdCAqc3JjLAogICAgIFN3c0NvbnRleHQgKmN0eCA9IGdyYXBoLT5jdHg7
CiAgICAgaW50IHJldDsKIAotICAgIGlmIChwcmVmZXJfb3BzX2JhY2tlbmQoY3R4LCBzcmMsIGRz
dCkgJiYgIWx1dDNkKSB7Ci0gICAgICAgIHJldCA9IGFkZF9vcHNfY29udmVydF9wYXNzKGdyYXBo
LCBzcmMsIGRzdCwgaW5wdXQsIG91dHB1dCk7CisgICAgaWYgKHByZWZlcl9vcHNfYmFja2VuZChj
dHgsIHNyYywgZHN0KSkgeworICAgICAgICByZXQgPSBhZGRfb3BzX2NvbnZlcnRfcGFzcyhncmFw
aCwgc3JjLCBkc3QsIGx1dDNkLCBpbnB1dCwgb3V0cHV0KTsKICAgICAgICAgaWYgKHJldCA9PSBB
VkVSUk9SKEVOT1RTVVApKQogICAgICAgICAgICAgcmV0ID0gYWRkX2xlZ2FjeV9zd3NfcGFzcyhn
cmFwaCwgc3JjLCBkc3QsIGx1dDNkLCBpbnB1dCwgb3V0cHV0KTsKICAgICB9IGVsc2UgewogICAg
ICAgICByZXQgPSBhZGRfbGVnYWN5X3N3c19wYXNzKGdyYXBoLCBzcmMsIGRzdCwgbHV0M2QsIGlu
cHV0LCBvdXRwdXQpOwogICAgICAgICBpZiAocmV0ID09IEFWRVJST1IoRU5PVFNVUCkpCi0gICAg
ICAgICAgICByZXQgPSBhZGRfb3BzX2NvbnZlcnRfcGFzcyhncmFwaCwgc3JjLCBkc3QsIGlucHV0
LCBvdXRwdXQpOworICAgICAgICAgICAgcmV0ID0gYWRkX29wc19jb252ZXJ0X3Bhc3MoZ3JhcGgs
IHNyYywgZHN0LCBsdXQzZCwgaW5wdXQsIG91dHB1dCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJl
dDsKZGlmZiAtLWdpdCBhL2xpYnN3c2NhbGUvb3BfbGlzdF9nZW5fdGVtcGxhdGUuYyBiL2xpYnN3
c2NhbGUvb3BfbGlzdF9nZW5fdGVtcGxhdGUuYwppbmRleCAwMDMwZmRkZWMyLi5iYzc2OTZjNTFl
IDEwMDY0NAotLS0gYS9saWJzd3NjYWxlL29wX2xpc3RfZ2VuX3RlbXBsYXRlLmMKKysrIGIvbGli
c3dzY2FsZS9vcF9saXN0X2dlbl90ZW1wbGF0ZS5jCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyBp
bnQgZW51bV9vcHNfZm10KFN3c0NvbnRleHQgKmN0eCwgdm9pZCAqb3BhcXVlLAogICAgICAgICBk
c3Qud2lkdGggID0gZHN0X3NpemVzW2ldWzBdOwogICAgICAgICBkc3QuaGVpZ2h0ID0gZHN0X3Np
emVzW2ldWzFdOwogCi0gICAgICAgIHJldCA9IGZmX3N3c19vcF9saXN0X2dlbmVyYXRlKGN0eCwg
JnNyYywgJmRzdCwgJm9wcywgJmluY29tcGxldGUpOworICAgICAgICByZXQgPSBmZl9zd3Nfb3Bf
bGlzdF9nZW5lcmF0ZShjdHgsICZzcmMsICZkc3QsIE5VTEwsICZvcHMsICZpbmNvbXBsZXRlKTsK
ICAgICAgICAgaWYgKHJldCA9PSBBVkVSUk9SKEVOT1RTVVApKQogICAgICAgICAgICAgcmV0dXJu
IDA7IC8qIHNpbGVudGx5IHNraXAgdW5zdXBwb3J0ZWQgZm9ybWF0cyAqLwogICAgICAgICBlbHNl
IGlmIChyZXQgPCAwKQotLSAKMi41Mi4wCgoKRnJvbSA5MTk2ZWRmNDA1NjIwNTUxMTZkMWU4YmJm
YmZmMTI4NTc3YWFkY2UxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtsYXMgSGFh
cyA8Z2l0QGhhYXNuLmRldj4KRGF0ZTogRnJpLCAyNCBKdWwgMjAyNiAxNzoxMjo0OCArMDIwMApT
dWJqZWN0OiBbUEFUQ0ggMTcvMThdIHN3c2NhbGUvdW9wc19tYWNyb3M6IGFsc28gZ2VuZXJhdGUg
b3AgbGlzdHMgaW52b2x2aW5nCiAzRExVVHMKClRoZXNlIG1heSBkaWZmZXIgZnJvbSB0aGUgcmVn
dWxhciBvcCBsaXN0cyBpbiBub250cml2aWFsIHdheXMsIGR1ZSB0byBlLmcuCmRpZmZlcmVudCBv
cHRpbWl6YXRpb24gc3RlcHMgYmVpbmcgdGFrZW4uCgpJbiBwcmFjdGljZSwgaXQgc2VlbXMgdGhp
cyBqdXN0IGFkZHMgdGhlIGV4dHJhIExVVF8zRCB1b3BzLCBidXQgd2UgZG9uJ3QKa25vdyB0aGF0
IGZvciBzdXJlLCBzbyBiZXR0ZXIgdG8gYnJ1dGUgZm9yY2UgdGhlIGxpc3QuIFRoYXQgc2FpZCwg
SSBkbwp0aGluayB3ZSBjYW4gc2FmZWx5IHNraXAgdGhlIGV4dHJhIGJhY2tlbmQgZmxhZ3MgaW4g
dGhpcyBjYXNlLCBhdCBsZWFzdC4KCkV2ZW4gaW4gdGhlIHdvcnN0IGNhc2Ugc2NlbmFyaW8sIHRo
YXQgd291bGQganVzdCBmb3JjZSBhIGZhbGxiYWNrIHRvIHRoZQpDIHJlZmVyZW5jZSBiYWNrZW5k
LgoKU3BvbnNvcmVkLWJ5OiBTb3ZlcmVpZ24gVGVjaCBGdW5kClNpZ25lZC1vZmYtYnk6IE5pa2xh
cyBIYWFzIDxnaXRAaGFhc24uZGV2PgotLS0KIGxpYnN3c2NhbGUvb3BfbGlzdF9nZW5fdGVtcGxh
dGUuYyAgfCAgOCArKysrLS0tLQogbGlic3dzY2FsZS90ZXN0cy9zd3Nfb3BzLmMgICAgICAgICB8
ICAyICstCiBsaWJzd3NjYWxlL3Rlc3RzL3N3c19vcHNfYWFyY2g2NC5jIHwgIDIgKy0KIGxpYnN3
c2NhbGUvdW9wc19tYWNyb3MuaCAgICAgICAgICAgfCAxMiArKysrKysrKysrLS0KIGxpYnN3c2Nh
bGUvdW9wc19tYWNyb3NfZ2VuLmMgICAgICAgfCAyNiArKysrKysrKysrKysrKysrKysrKysrKyst
LQogNSBmaWxlcyBjaGFuZ2VkLCA0MCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKCmRp
ZmYgLS1naXQgYS9saWJzd3NjYWxlL29wX2xpc3RfZ2VuX3RlbXBsYXRlLmMgYi9saWJzd3NjYWxl
L29wX2xpc3RfZ2VuX3RlbXBsYXRlLmMKaW5kZXggYmM3Njk2YzUxZS4uMTlkMDdmYmEwYSAxMDA2
NDQKLS0tIGEvbGlic3dzY2FsZS9vcF9saXN0X2dlbl90ZW1wbGF0ZS5jCisrKyBiL2xpYnN3c2Nh
bGUvb3BfbGlzdF9nZW5fdGVtcGxhdGUuYwpAQCAtMjksNyArMjksNyBAQAogCiAjZGVmaW5lIERV
TU1ZX1NJWkUgMTYKIAotc3RhdGljIGludCBlbnVtX29wc19mbXQoU3dzQ29udGV4dCAqY3R4LCB2
b2lkICpvcGFxdWUsCitzdGF0aWMgaW50IGVudW1fb3BzX2ZtdChTd3NDb250ZXh0ICpjdHgsIHZv
aWQgKm9wYXF1ZSwgY29uc3QgU3dzTHV0M0QgKmx1dDNkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgZW51bSBBVlBpeGVsRm9ybWF0IHNyY19mbXQsIGVudW0gQVZQaXhlbEZvcm1hdCBkc3RfZm10
LAogICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqY2IpKFN3c0NvbnRleHQgKmN0eCwgdm9p
ZCAqb3BhcXVlLCBTd3NPcExpc3QgKm9wcykpCiB7CkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyBp
bnQgZW51bV9vcHNfZm10KFN3c0NvbnRleHQgKmN0eCwgdm9pZCAqb3BhcXVlLAogICAgICAgICBk
c3Qud2lkdGggID0gZHN0X3NpemVzW2ldWzBdOwogICAgICAgICBkc3QuaGVpZ2h0ID0gZHN0X3Np
emVzW2ldWzFdOwogCi0gICAgICAgIHJldCA9IGZmX3N3c19vcF9saXN0X2dlbmVyYXRlKGN0eCwg
JnNyYywgJmRzdCwgTlVMTCwgJm9wcywgJmluY29tcGxldGUpOworICAgICAgICByZXQgPSBmZl9z
d3Nfb3BfbGlzdF9nZW5lcmF0ZShjdHgsICZzcmMsICZkc3QsIGx1dDNkLCAmb3BzLCAmaW5jb21w
bGV0ZSk7CiAgICAgICAgIGlmIChyZXQgPT0gQVZFUlJPUihFTk9UU1VQKSkKICAgICAgICAgICAg
IHJldHVybiAwOyAvKiBzaWxlbnRseSBza2lwIHVuc3VwcG9ydGVkIGZvcm1hdHMgKi8KICAgICAg
ICAgZWxzZSBpZiAocmV0IDwgMCkKQEAgLTg2LDcgKzg2LDcgQEAgZmFpbDoKICAqIEBub3RlIGBv
cHNgIGJlbG9uZ3MgdG8gc3dzX2VudW1fb3BfbGlzdHMoKSwgYnV0IG1heSBiZSBtdXRhdGVkIGJ5
IGBjYmAuCiAgKi8KIHN0YXRpYyBpbmxpbmUKLWludCBmZl9zd3NfZW51bV9vcF9saXN0cyhTd3ND
b250ZXh0ICpjdHgsIHZvaWQgKm9wYXF1ZSwKK2ludCBmZl9zd3NfZW51bV9vcF9saXN0cyhTd3ND
b250ZXh0ICpjdHgsIHZvaWQgKm9wYXF1ZSwgY29uc3QgU3dzTHV0M0QgKmx1dDNkLAogICAgICAg
ICAgICAgICAgICAgICAgICAgIGVudW0gQVZQaXhlbEZvcm1hdCBzcmNfZm10LCBlbnVtIEFWUGl4
ZWxGb3JtYXQgZHN0X2ZtdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpjYikoU3dz
Q29udGV4dCAqY3R4LCB2b2lkICpvcGFxdWUsIFN3c09wTGlzdCAqb3BzKSkKIHsKQEAgLTEwMiw3
ICsxMDIsNyBAQCBpbnQgZmZfc3dzX2VudW1fb3BfbGlzdHMoU3dzQ29udGV4dCAqY3R4LCB2b2lk
ICpvcGFxdWUsCiAgICAgICAgIGNvbnN0IGVudW0gQVZQaXhlbEZvcm1hdCBzcmNfZiA9IGF2X3Bp
eF9mbXRfZGVzY19nZXRfaWQoc3JjKTsKICAgICAgICAgZm9yIChkc3QgPSBkc3Rfc3RhcnQ7IGRz
dDsgZHN0ID0gYXZfcGl4X2ZtdF9kZXNjX25leHQoZHN0KSkgewogICAgICAgICAgICAgY29uc3Qg
ZW51bSBBVlBpeGVsRm9ybWF0IGRzdF9mID0gYXZfcGl4X2ZtdF9kZXNjX2dldF9pZChkc3QpOwot
ICAgICAgICAgICAgaW50IHJldCA9IGVudW1fb3BzX2ZtdChjdHgsIG9wYXF1ZSwgc3JjX2YsIGRz
dF9mLCBjYik7CisgICAgICAgICAgICBpbnQgcmV0ID0gZW51bV9vcHNfZm10KGN0eCwgb3BhcXVl
LCBsdXQzZCwgc3JjX2YsIGRzdF9mLCBjYik7CiAgICAgICAgICAgICBpZiAocmV0IDwgMCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICAgICAgaWYgKGRzdF9mbXQgIT0gQVZf
UElYX0ZNVF9OT05FKQpkaWZmIC0tZ2l0IGEvbGlic3dzY2FsZS90ZXN0cy9zd3Nfb3BzLmMgYi9s
aWJzd3NjYWxlL3Rlc3RzL3N3c19vcHMuYwppbmRleCBiYjQ5NGIxZjRlLi42NzdkYzRkYjZlIDEw
MDY0NAotLS0gYS9saWJzd3NjYWxlL3Rlc3RzL3N3c19vcHMuYworKysgYi9saWJzd3NjYWxlL3Rl
c3RzL3N3c19vcHMuYwpAQCAtMTczLDcgKzE3Myw3IEBAIGJhZF9vcHRpb246CiAKICAgICBhdl9s
b2dfc2V0X2NhbGxiYWNrKGxvZ19zdGRvdXQpOwogCi0gICAgcmV0ID0gZmZfc3dzX2VudW1fb3Bf
bGlzdHMoY3R4LCBncmFwaCwgc3JjX2ZtdCwgZHN0X2ZtdCwgcHJpbnRfcGFzc2VzKTsKKyAgICBy
ZXQgPSBmZl9zd3NfZW51bV9vcF9saXN0cyhjdHgsIGdyYXBoLCBOVUxMLCBzcmNfZm10LCBkc3Rf
Zm10LCBwcmludF9wYXNzZXMpOwogICAgIGlmIChyZXQgPCAwKQogICAgICAgICBnb3RvIGZhaWw7
CiAKZGlmZiAtLWdpdCBhL2xpYnN3c2NhbGUvdGVzdHMvc3dzX29wc19hYXJjaDY0LmMgYi9saWJz
d3NjYWxlL3Rlc3RzL3N3c19vcHNfYWFyY2g2NC5jCmluZGV4IGNiNDdmNDIwMzcuLjIxNTUzMTlh
MzMgMTAwNjQ0Ci0tLSBhL2xpYnN3c2NhbGUvdGVzdHMvc3dzX29wc19hYXJjaDY0LmMKKysrIGIv
bGlic3dzY2FsZS90ZXN0cy9zd3Nfb3BzX2FhcmNoNjQuYwpAQCAtNDYwLDcgKzQ2MCw3IEBAIGlu
dCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAgICAgZ3JhcGgtPmN0eCA9IGN0eDsKICAg
ICBjdHgtPm9wYXF1ZSA9ICZyb290OwogCi0gICAgcmV0ID0gZmZfc3dzX2VudW1fb3BfbGlzdHMo
Y3R4LCBncmFwaCwgQVZfUElYX0ZNVF9OT05FLCBBVl9QSVhfRk1UX05PTkUsCisgICAgcmV0ID0g
ZmZfc3dzX2VudW1fb3BfbGlzdHMoY3R4LCBncmFwaCwgTlVMTCwgQVZfUElYX0ZNVF9OT05FLCBB
Vl9QSVhfRk1UX05PTkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJf
b3ApOwogCiAgICAgLyoqCmRpZmYgLS1naXQgYS9saWJzd3NjYWxlL3VvcHNfbWFjcm9zLmggYi9s
aWJzd3NjYWxlL3VvcHNfbWFjcm9zLmgKaW5kZXggM2EyMWVmZTIwNi4uODRmYmQzYjA3MyAxMDA2
NDQKLS0tIGEvbGlic3dzY2FsZS91b3BzX21hY3Jvcy5oCisrKyBiL2xpYnN3c2NhbGUvdW9wc19t
YWNyb3MuaApAQCAtMTE2Myw3ICsxMTYzLDE1IEBACiAgICAgTUFDUk8oX19WQV9BUkdTX18sIGYz
Ml9kaXRoZXJfeHl6d18zXzJfMF81XzE2eDE2ICAgICAgICAgICAsIC50eXBlID0gU1dTX1BJWEVM
X0YzMiwgLnVvcCA9IFNXU19VT1BfRElUSEVSICAgICAgICAgICwgLm1hc2sgPSAweGYsIC5wYXIu
ZGl0aGVyID0geyAueV9vZmZzZXQgPSB7MywgMiwgMCwgNX0sIC5zaXplX2xvZzIgPSA0IH0pIFwK
ICAgICBNQUNSTyhfX1ZBX0FSR1NfXywgZjMyX2RpdGhlcl94eXp3XzVfMF8zXzJfMTZ4MTYgICAg
ICAgICAgICwgLnR5cGUgPSBTV1NfUElYRUxfRjMyLCAudW9wID0gU1dTX1VPUF9ESVRIRVIgICAg
ICAgICAgLCAubWFzayA9IDB4ZiwgLnBhci5kaXRoZXIgPSB7IC55X29mZnNldCA9IHs1LCAwLCAz
LCAyfSwgLnNpemVfbG9nMiA9IDQgfSkgXAogICAgIE1BQ1JPKF9fVkFfQVJHU19fLCBmMzJfZGl0
aGVyX3h5endfNV8yXzNfMF8xNngxNiAgICAgICAgICAgLCAudHlwZSA9IFNXU19QSVhFTF9GMzIs
IC51b3AgPSBTV1NfVU9QX0RJVEhFUiAgICAgICAgICAsIC5tYXNrID0gMHhmLCAucGFyLmRpdGhl
ciA9IHsgLnlfb2Zmc2V0ID0gezUsIDIsIDMsIDB9LCAuc2l6ZV9sb2cyID0gNCB9KQotI2RlZmlu
ZSBTV1NfRk9SX0YzMl9MVVRfM0QoTUFDUk8sIC4uLikKLSNkZWZpbmUgU1dTX0ZPUl9TVFJVQ1Rf
RjMyX0xVVF8zRChNQUNSTywgLi4uKQorI2RlZmluZSBTV1NfRk9SX0YzMl9MVVRfM0QoTUFDUk8s
IC4uLikgXAorICAgIE1BQ1JPKF9fVkFfQVJHU19fLCBmMzJfbHV0XzNkX3h5el9zdGF0aWMgICAg
ICAgICAgICAgICAgICAgLCBTV1NfUElYRUxfRjMyLCBTV1NfVU9QX0xVVF8zRCAgICAgICAgICAs
IDB4NywgMCkgXAorICAgIE1BQ1JPKF9fVkFfQVJHU19fLCBmMzJfbHV0XzNkX3h5el9keW5hbWlj
ICAgICAgICAgICAgICAgICAgLCBTV1NfUElYRUxfRjMyLCBTV1NfVU9QX0xVVF8zRCAgICAgICAg
ICAsIDB4NywgMSkgXAorICAgIE1BQ1JPKF9fVkFfQVJHU19fLCBmMzJfbHV0XzNkX3h5endfc3Rh
dGljICAgICAgICAgICAgICAgICAgLCBTV1NfUElYRUxfRjMyLCBTV1NfVU9QX0xVVF8zRCAgICAg
ICAgICAsIDB4ZiwgMCkgXAorICAgIE1BQ1JPKF9fVkFfQVJHU19fLCBmMzJfbHV0XzNkX3h5endf
ZHluYW1pYyAgICAgICAgICAgICAgICAgLCBTV1NfUElYRUxfRjMyLCBTV1NfVU9QX0xVVF8zRCAg
ICAgICAgICAsIDB4ZiwgMSkKKyNkZWZpbmUgU1dTX0ZPUl9TVFJVQ1RfRjMyX0xVVF8zRChNQUNS
TywgLi4uKSBcCisgICAgTUFDUk8oX19WQV9BUkdTX18sIGYzMl9sdXRfM2RfeHl6X3N0YXRpYyAg
ICAgICAgICAgICAgICAgICAsIC50eXBlID0gU1dTX1BJWEVMX0YzMiwgLnVvcCA9IFNXU19VT1Bf
TFVUXzNEICAgICAgICAgICwgLm1hc2sgPSAweDcsIC5wYXIubHV0M2QuZHluYW1pYyA9IDApIFwK
KyAgICBNQUNSTyhfX1ZBX0FSR1NfXywgZjMyX2x1dF8zZF94eXpfZHluYW1pYyAgICAgICAgICAg
ICAgICAgICwgLnR5cGUgPSBTV1NfUElYRUxfRjMyLCAudW9wID0gU1dTX1VPUF9MVVRfM0QgICAg
ICAgICAgLCAubWFzayA9IDB4NywgLnBhci5sdXQzZC5keW5hbWljID0gMSkgXAorICAgIE1BQ1JP
KF9fVkFfQVJHU19fLCBmMzJfbHV0XzNkX3h5endfc3RhdGljICAgICAgICAgICAgICAgICAgLCAu
dHlwZSA9IFNXU19QSVhFTF9GMzIsIC51b3AgPSBTV1NfVU9QX0xVVF8zRCAgICAgICAgICAsIC5t
YXNrID0gMHhmLCAucGFyLmx1dDNkLmR5bmFtaWMgPSAwKSBcCisgICAgTUFDUk8oX19WQV9BUkdT
X18sIGYzMl9sdXRfM2RfeHl6d19keW5hbWljICAgICAgICAgICAgICAgICAsIC50eXBlID0gU1dT
X1BJWEVMX0YzMiwgLnVvcCA9IFNXU19VT1BfTFVUXzNEICAgICAgICAgICwgLm1hc2sgPSAweGYs
IC5wYXIubHV0M2QuZHluYW1pYyA9IDEpCiAKICNlbmRpZiAvKiBTV1NDQUxFX1VPUFNfTUFDUk9T
X0ggKi8KZGlmZiAtLWdpdCBhL2xpYnN3c2NhbGUvdW9wc19tYWNyb3NfZ2VuLmMgYi9saWJzd3Nj
YWxlL3VvcHNfbWFjcm9zX2dlbi5jCmluZGV4IDJkZjlhOWMyYzIuLmFkNzcwNTBmMGMgMTAwNjQ0
Ci0tLSBhL2xpYnN3c2NhbGUvdW9wc19tYWNyb3NfZ2VuLmMKKysrIGIvbGlic3dzY2FsZS91b3Bz
X21hY3Jvc19nZW4uYwpAQCAtMTE3LDYgKzExNyw5IEBAIHN0YXRpYyBpbnQgZ2VuZXJhdGVfZW50
cnlfc3RydWN0KHZvaWQgKm9wYXF1ZSwgdm9pZCAqa2V5KQogICAgICAgICAgICAgICAgICAgIHBh
ci0+ZGl0aGVyLnlfb2Zmc2V0WzJdLCBwYXItPmRpdGhlci55X29mZnNldFszXSwKICAgICAgICAg
ICAgICAgICAgICBwYXItPmRpdGhlci5zaXplX2xvZzIpOwogICAgICAgICBicmVhazsKKyAgICBj
YXNlIFNXU19VT1BfTFVUXzNEOgorICAgICAgICBhdl9icHJpbnRmKGJwLCAiLCAucGFyLmx1dDNk
LmR5bmFtaWMgPSAlZCIsIHBhci0+bHV0M2QuZHluYW1pYyk7CisgICAgICAgIGJyZWFrOwogICAg
IH0KIAogICAgIGF2X2JwcmludGYoYnAsICIpIik7CkBAIC0xNzksNiArMTgyLDkgQEAgc3RhdGlj
IGludCBnZW5lcmF0ZV9lbnRyeV9hcmdzKHZvaWQgKm9wYXF1ZSwgdm9pZCAqa2V5KQogICAgICAg
ICAgICAgICAgICAgIHBhci0+ZGl0aGVyLnlfb2Zmc2V0WzJdLCBwYXItPmRpdGhlci55X29mZnNl
dFszXSwKICAgICAgICAgICAgICAgICAgICBwYXItPmRpdGhlci5zaXplX2xvZzIpOwogICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFNXU19VT1BfTFVUXzNEOgorICAgICAgICBhdl9icHJpbnRmKGJw
LCAiLCAlZCIsIHBhci0+bHV0M2QuZHluYW1pYyk7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAog
ICAgIGF2X2JwcmludGYoYnAsICIpIik7CkBAIC0zMjAsMTEgKzMyNiwyNyBAQCBzdGF0aWMgaW50
IHN3c191b3BzX21hY3Jvc19nZW4oY2hhciAqKm91dF9zdHIpCiAgICAgY3R4LT5vcGFxdWUgPSAm
cm9vdDsKICAgICBjdHgtPnNjYWxlciA9IFNXU19TQ0FMRV9CSUxJTkVBUjsgLyogY2hlYXBlciB0
byBnZW5lcmF0ZSBmaWx0ZXIga2VybmVscyAqLwogCisgICAgLyogQWxsb2NhdGUgZHVtbXkgM0RM
VVQgdG8gZm9yY2UgZ2VuZXJhdGlvbiBvZiBTV1NfVU9QX0xVVF8zRCAqLworICAgIFN3c0x1dDNE
ICpsdXQzZCA9IGZmX3N3c19sdXQzZF9hbGxvYygpOworICAgIHJldCA9IGZmX3N3c19lbnVtX29w
X2xpc3RzKGN0eCwgZ3JhcGgsIGx1dDNkLCBBVl9QSVhfRk1UX05PTkUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQVZfUElYX0ZNVF9OT05FLCByZWdpc3Rlcl9hbGxfdW9wcyk7Cisg
ICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgYXZfcmVmc3RydWN0X3VucmVmKCZsdXQzZCk7Cisg
ICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBsdXQzZC0+ZHluYW1pYyA9IHRydWU7Cisg
ICAgcmV0ID0gZmZfc3dzX2VudW1fb3BfbGlzdHMoY3R4LCBncmFwaCwgbHV0M2QsIEFWX1BJWF9G
TVRfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVl9QSVhfRk1UX05PTkUs
IHJlZ2lzdGVyX2FsbF91b3BzKTsKKyAgICBhdl9yZWZzdHJ1Y3RfdW5yZWYoJmx1dDNkKTsKKyAg
ICBpZiAocmV0IDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCiAgICAgLyogUmVnaXN0ZXIgYWxs
IHVuaXF1ZSB1b3BzIG92ZXIgZXZlcnkgcmVsZXZhbnQgY29tYmluYXRpb24gb2YgZmxhZ3MgKi8K
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKGZsYWdzX2xpc3QpOyBpKysp
IHsKICAgICAgICAgY3R4LT5mbGFncyA9IGZsYWdzX2xpc3RbaV07Ci0gICAgICAgIHJldCA9IGZm
X3N3c19lbnVtX29wX2xpc3RzKGN0eCwgZ3JhcGgsIEFWX1BJWF9GTVRfTk9ORSwgQVZfUElYX0ZN
VF9OT05FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Rlcl9hbGxf
dW9wcyk7CisgICAgICAgIHJldCA9IGZmX3N3c19lbnVtX29wX2xpc3RzKGN0eCwgZ3JhcGgsIE5V
TEwsIEFWX1BJWF9GTVRfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QVZfUElYX0ZNVF9OT05FLCByZWdpc3Rlcl9hbGxfdW9wcyk7CiAgICAgICAgIGlmIChyZXQgPCAw
KQogICAgICAgICAgICAgZ290byBmYWlsOwogICAgIH0KLS0gCjIuNTIuMAoKCkZyb20gMDI3ZWZk
MjM3MmMwZjlmODA4NTdjN2YwY2M1ZDQ0MmJmYWMyYTI3YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIw
MDEKRnJvbTogTmlrbGFzIEhhYXMgPGdpdEBoYWFzbi5kZXY+CkRhdGU6IFN1biwgMjYgSnVsIDIw
MjYgMDA6MDQ6NTkgKzAyMDAKU3ViamVjdDogW1BBVENIIDE4LzE4XSBjaGVja2FzbS9zd19vcHM6
IGFkZCBTV1NfVU9QX0xVVF8zRCB0ZXN0Ck1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTog
dGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0
CgpjaGVja2FzbToKIC0gQ1BVOiBBTUQgUnl6ZW4gOSA5OTUwWDNEIDE2LUNvcmUgUHJvY2Vzc29y
ICgwMEI0MEY0MCkKIC0gVGltaW5nIHNvdXJjZTogeDg2IChyZHRzYykKIC0gQmVuY2ggZHVyYXRp
b246IDEwMDAwMCDCtXMgcGVyIGZ1bmN0aW9uICg0NDg2Njc3OTMgY3ljbGVzKQogLSBSYW5kb20g
c2VlZDogMzc3Mzg4MzM5MwpCZW5jaG1hcmsgcmVzdWx0czoKICBuYW1lICAgICAgICAgICAgICAg
ICAgICAgICAgIGN5Y2xlcyAodnMgcmVmKQogIGYzMl9sdXRfM2RfeHl6X2R5bmFtaWNfYzogIDEy
NTE5My45CiAgZjMyX2x1dF8zZF94eXpfc3RhdGljX2M6ICAgIDI1NzkyLjEKICBmMzJfbHV0XzNk
X3h5endfZHluYW1pY19jOiAxMjM4MDcuMQogIGYzMl9sdXRfM2RfeHl6d19zdGF0aWNfYzogICAy
NTczOS4wCgpUaGlzIGlzIHJvdWdobHkgfjUwJSBmYXN0ZXIgdGhhbiB0aGUgZXhpc3RpbmcgY29k
ZSBpbiBsdXQzZC5jLCBmcm9tIGEgcXVpY2sKdGVzdC4KClNwb25zb3JlZC1ieTogU292ZXJlaWdu
IFRlY2ggRnVuZApTaWduZWQtb2ZmLWJ5OiBOaWtsYXMgSGFhcyA8Z2l0QGhhYXNuLmRldj4KLS0t
CiB0ZXN0cy9jaGVja2FzbS9zd19vcHMuYyB8IDIyICsrKysrKysrKysrKysrKysrKysrKysKIDEg
ZmlsZSBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2th
c20vc3dfb3BzLmMgYi90ZXN0cy9jaGVja2FzbS9zd19vcHMuYwppbmRleCBkZjgxY2FmNDY5Li4x
ZTRjMWFiZjdhIDEwMDY0NAotLS0gYS90ZXN0cy9jaGVja2FzbS9zd19vcHMuYworKysgYi90ZXN0
cy9jaGVja2FzbS9zd19vcHMuYwpAQCAtNjM0LDYgKzYzNCwyNyBAQCBzdGF0aWMgdm9pZCBjaGVj
a19kaXRoZXIoY29uc3QgY2hhciAqbmFtZSwgU3dzVU9wICp1b3ApCiAgICAgYXZfcmVmc3RydWN0
X3VucmVmKCZtYXRyaXgpOwogfQogCitzdGF0aWMgdm9pZCBjaGVja19sdXRfM2QoY29uc3QgY2hh
ciAqbmFtZSwgU3dzVU9wICp1b3ApCit7CisgICAgU3dzTHV0M0QgKmx1dDNkID0gZmZfc3dzX2x1
dDNkX2FsbG9jKCk7CisgICAgY2hlY2thc21faW5pdCgmbHV0M2QtPmlucHV0LCBzaXplb2YobHV0
M2QtPmlucHV0KSk7CisKKyAgICBpZiAodW9wLT5wYXIubHV0M2QuZHluYW1pYykgeworICAgICAg
ICBjaGVja2FzbV9pbml0KCZsdXQzZC0+dG9uZV9tYXAsIHNpemVvZihsdXQzZC0+dG9uZV9tYXAp
KTsKKyAgICAgICAgY2hlY2thc21faW5pdCgmbHV0M2QtPm91dHB1dCwgICBzaXplb2YobHV0M2Qt
Pm91dHB1dCkpOworICAgICAgICBsdXQzZC0+ZHluYW1pYyA9IHRydWU7CisKKyAgICAgICAgLyog
UHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWQgZnJvbSBJUFQgdmFsdWVzIHdpdGggYWJzKFBUKSA+
IDAuNSAqLworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKGx1dDNk
LT50b25lX21hcCk7IGkrKykKKyAgICAgICAgICAgIGx1dDNkLT50b25lX21hcFtpXS55ID0gRkZN
SU4obHV0M2QtPnRvbmVfbWFwW2ldLnksIDEgPDwgMTUpOworICAgIH0KKworICAgIHVvcC0+ZGF0
YS5sdXQzZCA9IGx1dDNkOworICAgIGNoZWNrX3JhbmdlKG5hbWUsIHVvcCwgTUtfUkFOR0VTKElO
UFVUX0xVVF9TSVpFIC0gMSkpOworCisgICAgYXZfcmVmc3RydWN0X3VucmVmKCZsdXQzZCk7Cit9
CisKICNkZWZpbmUgQ0hFQ0tfRlVOQ1RJT04oQ0hFQ0ssIE5BTUUsIC4uLikgXAogICAgIENIRUNL
KCNOQU1FLCAmKFN3c1VPcCkgeyBfX1ZBX0FSR1NfXyB9KTsKIApAQCAtNjc4LDQgKzY5OSw1IEBA
IHZvaWQgY2hlY2thc21fY2hlY2tfc3dfb3BzKHZvaWQpCiAgICAgQ0hFQ0tfRk9SKENMRUFSLCAg
ICAgICAgICAgIGNoZWNrX3ZlYzQpOwogICAgIENIRUNLX0ZPUihMSU5FQVIsICAgICAgICAgICBj
aGVja19saW5lYXIpOwogICAgIENIRUNLX0ZPUihESVRIRVIsICAgICAgICAgICBjaGVja19kaXRo
ZXIpOworICAgIENIRUNLX0ZPUihMVVRfM0QsICAgICAgICAgICBjaGVja19sdXRfM2QpOwogfQot
LSAKMi41Mi4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0IC0tIGZmbXBlZy1kZXZlbEBmZm1wZWcub3JnClRv
IHVuc3Vic2NyaWJlIHNlbmQgYW4gZW1haWwgdG8gZmZtcGVnLWRldmVsLWxlYXZlQGZmbXBlZy5v
cmcK