Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 19 Sep 2008 16:58:26 -0700
From:      "Ahrenholz, Jeffrey M" <jeffrey.m.ahrenholz@boeing.com>
To:        "Julian Elischer" <julian@elischer.org>
Cc:        antipsychic <antipsychic@gmail.com>, freebsd-virtualization@freebsd.org
Subject:   RE: natd & vimage
Message-ID:  <0DF156EE7414494187B087A3C279BDB40A94023E@XCH-NW-6V1.nw.nos.boeing.com>
In-Reply-To: <48D43A63.8080808@elischer.org>
References:  <FDDBDFB6-AE66-436C-B3A3-8D0AF9664186@gmail.com> <0DF156EE7414494187B087A3C279BDB40A93F94B@XCH-NW-6V1.nw.nos.boeing.com> <48D2F9B1.8020507@elischer.org> <0DF156EE7414494187B087A3C279BDB40A94021D@XCH-NW-6V1.nw.nos.boeing.com> <48D43A63.8080808@elischer.org>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.

------_=_NextPart_001_01C91AB3.B40A9061
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable


> can you send your diffs anyhow?
> I never completed the virtualisation of divert.
> I'll see what I can do  with them.

OK, here it is, good luck! I had divert working on a non-SMP system,
could divert packets to a userspace program that touches them.

Then the mroute part is a little bigger. Currently testing with XORP
PIM. Known bug during system reboot it crashes during ip_mroute module
unload. Haven't tested IPv6 multicast forwarding yet. (slightly
off-topic/wrong list, but you can crash a 7.0-GENERIC kernel if you
install the Xorp package from ports and set it up as a rendezvous
point!)

-Jeff

------_=_NextPart_001_01C91AB3.B40A9061
Content-Type: application/octet-stream;
	name="mroutedivert-20080908.patch"
Content-Transfer-Encoding: base64
Content-Description: mroutedivert-20080908.patch
Content-Disposition: attachment;
	filename="mroutedivert-20080908.patch"

ZGlmZiAtdXIgbmV0aW5ldDYvaXA2X2lucHV0LmMub3JpZyBuZXRpbmV0Ni9pcDZfaW5wdXQuYwot
LS0gbmV0aW5ldDYvaXA2X2lucHV0LmMub3JpZwkyMDA3LTExLTE5IDA5OjA5OjM5LjAwMDAwMDAw
MCAtMDgwMAorKysgbmV0aW5ldDYvaXA2X2lucHV0LmMJMjAwOC0wNy0yOSAxMjo1ODoyNi4wMDAw
MDAwMDAgLTA3MDAKQEAgLTE5MCw2ICsxOTAsMTkgQEAKIAluZDZfaW5pdCgpOwogCWZyYWc2X2lu
aXQoKTsKIAorCVZfaXA2X21yb3V0ZXJfdmVyID0gMDsKKwliemVybygmVl9tcnQ2c3RhdCwgc2l6
ZW9mKFZfbXJ0NnN0YXQpKTsKKwliemVybygoY2FkZHJfdClWX21mNmN0YWJsZSwgc2l6ZW9mKFZf
bWY2Y3RhYmxlKSk7CisJYnplcm8oKGNhZGRyX3QpVl9uNmV4cGlyZSwgc2l6ZW9mKFZfbjZleHBp
cmUpKTsKKwliemVybygoY2FkZHJfdClWX21pZjZ0YWJsZSwgc2l6ZW9mKFZfbWlmNnRhYmxlKSk7
CisJVl9tcnQ2ZGVidWcgPSAwOworCVZfbXVsdGljYXN0X3JlZ2lzdGVyX2lmNiA9IE5VTEw7CisJ
Vl9udW1taWZzID0gMDsKKwlWX3JlZ19taWZfbnVtID0gKG1pZmlfdCktMTsKKwliemVybygmVl9w
aW02c3RhdCwgc2l6ZW9mKFZfcGltNnN0YXQpKTsKKwlWX3BpbTYgPSAwOworCWJ6ZXJvKChjYWRk
cl90KVZfdXBjYWxsX2RhdGEsIHNpemVvZihWX3VwY2FsbF9kYXRhKSk7CisKICNpZmRlZiBWSU1B
R0UKIAkvKiBTa2lwIGdsb2JhbCBpbml0aWFsaXphdGlvbiBzdHVmZiBmb3Igbm9uLWRlZmF1bHQg
aW5zdGFuY2VzLiAqLwogCWlmICghSVNfREVGQVVMVF9WTkVUKGN1cnZuZXQpKQpkaWZmIC11ciBu
ZXRpbmV0Ni9pcDZfbXJvdXRlLmMub3JpZyBuZXRpbmV0Ni9pcDZfbXJvdXRlLmMKLS0tIG5ldGlu
ZXQ2L2lwNl9tcm91dGUuYy5vcmlnCTIwMDctMTEtMTkgMDk6MDk6MzkuMDAwMDAwMDAwIC0wODAw
CisrKyBuZXRpbmV0Ni9pcDZfbXJvdXRlLmMJMjAwOC0wNy0yOSAxMzozOTozMS4wMDAwMDAwMDAg
LTA3MDAKQEAgLTc2LDYgKzc2LDcgQEAKICAqIE1vZGlmaWVkIGJ5IFZhbiBKYWNvYnNvbiwgTEJM
LCBKYW51YXJ5IDE5OTMKICAqIE1vZGlmaWVkIGJ5IEFqaXQgVGh5YWdhcmFqYW4sIFBBUkMsIEF1
Z3VzdCAxOTkzCiAgKiBNb2RpZmllZCBieSBCaWxsIEZlbm5lciwgUEFSQywgQXByaWwgMTk5NAor
ICogTW9kaWZpZWQgYnkgSmVmZiBBaHJlbmhvbHosIEJvZWluZywgSnVseSAyMDA4LiAodmlydHVh
bGl6YXRpb24gc3VwcG9ydCkKICAqCiAgKiBNUk9VVElORyBSZXZpc2lvbjogMy41LjEuMiArIFBJ
TS1TTXYyIChwaW1kKSBTdXBwb3J0CiAgKi8KQEAgLTE1OSwxNCArMTYwLDE3IEBACiBTWVNDVExf
REVDTChfbmV0X2luZXQ2X2lwNik7CiBTWVNDVExfTk9ERShfbmV0X2luZXQ2LCBJUFBST1RPX1BJ
TSwgcGltLCBDVExGTEFHX1JXLCAwLCAiUElNIik7CiAKKyNpZm5kZWYgVklNQUdFCiBzdGF0aWMg
c3RydWN0IG1ydDZzdGF0IG1ydDZzdGF0OwotU1lTQ1RMX1NUUlVDVChfbmV0X2luZXQ2X2lwNiwg
T0lEX0FVVE8sIG1ydDZzdGF0LCBDVExGTEFHX1JXLAotICAgICZtcnQ2c3RhdCwgbXJ0NnN0YXQs
CisjZW5kaWYgLyogIVZJTUFHRSAqLworU1lTQ1RMX1ZfU1RSVUNUKFZfTkVULCB2bmV0X2luZXQ2
LCBfbmV0X2luZXQ2X2lwNiwgT0lEX0FVVE8sIG1ydDZzdGF0LAorICAgIENUTEZMQUdfUlcsIG1y
dDZzdGF0LCBtcnQ2c3RhdCwKICAgICAiTXVsdGljYXN0IFJvdXRpbmcgU3RhdGlzdGljcyAoc3Ry
dWN0IG1ydDZzdGF0LCBuZXRpbmV0Ni9pcDZfbXJvdXRlLmgpIik7CiAKICNkZWZpbmUgTk9fUlRF
X0ZPVU5ECTB4MQogI2RlZmluZSBSVEVfRk9VTkQJMHgyCiAKKyNpZm5kZWYgVklNQUdFCiBzdGF0
aWMgc3RydWN0IG1mNmMgKm1mNmN0YWJsZVtNRjZDVEJMU0laXTsKIFNZU0NUTF9PUEFRVUUoX25l
dF9pbmV0Nl9pcDYsIE9JRF9BVVRPLCBtZjZjdGFibGUsIENUTEZMQUdfUkQsCiAgICAgJm1mNmN0
YWJsZSwgc2l6ZW9mKG1mNmN0YWJsZSksICJTLCptZjZjdGFibGVbTUY2Q1RCTFNJWl0iLApAQCAt
MTc5LDYgKzE4Myw3IEBACiBTWVNDVExfT1BBUVVFKF9uZXRfaW5ldDZfaXA2LCBPSURfQVVUTywg
bWlmNnRhYmxlLCBDVExGTEFHX1JELAogICAgICZtaWY2dGFibGUsIHNpemVvZihtaWY2dGFibGUp
LCAiUyx2aWZbTUFYTUlGU10iLAogICAgICJNdWx0aWNhc3QgSW50ZXJmYWNlcyAoc3RydWN0IG1p
ZltNQVhNSUZTXSwgbmV0aW5ldDYvaXA2X21yb3V0ZS5oKSIpOworI2VuZGlmIC8qICFWSU1BR0Ug
Ki8KIAogI2lmZGVmIE1SVDZERUJVRwogI2lmbmRlZiBWSU1BR0UKQEAgLTE5OCw3ICsyMDMsOSBA
QAogCiAjaWZkZWYgSU5FVAogI2lmZGVmIE1ST1VUSU5HCisjaWZuZGVmIFZJTUFHRQogZXh0ZXJu
IHN0cnVjdCBzb2NrZXQgKmlwX21yb3V0ZXI7CisjZW5kaWYgLyogIVZJTUFHRSAqLwogI2VuZGlm
CiAjZW5kaWYKIApAQCAtMjEzLDE5ICsyMjAsMjMgQEAKICAqIG9ubHkgZXhpc3QgYXMgYSBwbGFj
ZWhvbGRlciBmb3IgbXVsdGljYXN0IHNvdXJjZQogICogdmVyaWZpY2F0aW9uLgogICovCisjaWZu
ZGVmIFZJTUFHRQogc3RhdGljIHN0cnVjdCBpZm5ldCAqbXVsdGljYXN0X3JlZ2lzdGVyX2lmNjsK
KyNlbmRpZiAvKiAhVklNQUdFICovCiAKICNkZWZpbmUgRU5DQVBfSE9QUyA2NAogCiAvKgogICog
UHJpdmF0ZSB2YXJpYWJsZXMuCiAgKi8KKyNpZm5kZWYgVklNQUdFCiBzdGF0aWMgbWlmaV90IG51
bW1pZnMgPSAwOwogc3RhdGljIG1pZmlfdCByZWdfbWlmX251bSA9IChtaWZpX3QpLTE7CiAKIHN0
YXRpYyBzdHJ1Y3QgcGltNnN0YXQgcGltNnN0YXQ7Ci1TWVNDVExfU1RSVUNUKF9uZXRfaW5ldDZf
cGltLCBQSU02Q1RMX1NUQVRTLCBzdGF0cywgQ1RMRkxBR19SRCwKLSAgICAmcGltNnN0YXQsIHBp
bTZzdGF0LAorI2VuZGlmIC8qICFWSU1BR0UgKi8KK1NZU0NUTF9WX1NUUlVDVChWX05FVCwgdm5l
dF9pbmV0NiwgX25ldF9pbmV0Nl9waW0sIFBJTTZDVExfU1RBVFMsIHN0YXRzLAorICAgIENUTEZM
QUdfUkQsIHBpbTZzdGF0LCBwaW02c3RhdCwKICAgICAiUElNIFN0YXRpc3RpY3MgKHN0cnVjdCBw
aW02c3RhdCwgbmV0aW5ldDYvcGltX3Zhci5oKSIpOwogCiAjaWZuZGVmIFZJTUFHRQpAQCAtMjQ0
LDkgKzI1NSw5IEBACiAgKiBGaW5kIGEgcm91dGUgZm9yIGEgZ2l2ZW4gb3JpZ2luIElQdjYgYWRk
cmVzcyBhbmQgTXVsdGljYXN0IGdyb3VwIGFkZHJlc3MuCiAgKi8KICNkZWZpbmUgTUY2Q0ZJTkQo
bywgZywgcnQpIGRvIHsgXAotCXN0cnVjdCBtZjZjICpfcnQgPSBtZjZjdGFibGVbTUY2Q0hBU0go
byxnKV07IFwKKwlzdHJ1Y3QgbWY2YyAqX3J0ID0gVl9tZjZjdGFibGVbTUY2Q0hBU0gobyxnKV07
IFwKIAlydCA9IE5VTEw7IFwKLQltcnQ2c3RhdC5tcnQ2c19tZmNfbG9va3VwcysrOyBcCisJVl9t
cnQ2c3RhdC5tcnQ2c19tZmNfbG9va3VwcysrOyBcCiAJd2hpbGUgKF9ydCkgeyBcCiAJCWlmIChJ
TjZfQVJFX0FERFJfRVFVQUwoJl9ydC0+bWY2Y19vcmlnaW4uc2luNl9hZGRyLCAmKG8pKSAmJiBc
CiAJCSAgICBJTjZfQVJFX0FERFJfRVFVQUwoJl9ydC0+bWY2Y19tY2FzdGdycC5zaW42X2FkZHIs
ICYoZykpICYmIFwKQEAgLTI1Nyw3ICsyNjgsNyBAQAogCQlfcnQgPSBfcnQtPm1mNmNfbmV4dDsg
XAogCX0gXAogCWlmIChydCA9PSBOVUxMKSB7IFwKLQkJbXJ0NnN0YXQubXJ0NnNfbWZjX21pc3Nl
cysrOyBcCisJCVZfbXJ0NnN0YXQubXJ0NnNfbWZjX21pc3NlcysrOyBcCiAJfSBcCiB9IHdoaWxl
ICgvKkNPTlNUQ09ORCovIDApCiAKQEAgLTI5MCw3ICszMDEsOSBAQAogCiAjaWZkZWYgVVBDQUxM
X1RJTUlORwogI2RlZmluZSBVUENBTExfTUFYCTUwCisjaWZuZGVmIFZJTUFHRQogc3RhdGljIHVf
bG9uZyB1cGNhbGxfZGF0YVtVUENBTExfTUFYICsgMV07CisjZW5kaWYgLyogIVZJTUFHRSAqLwog
c3RhdGljIHZvaWQgY29sbGF0ZSgpOwogI2VuZGlmIC8qIFVQQ0FMTF9USU1JTkcgKi8KIApAQCAt
MzEwLDYgKzMyMyw3IEBACiBpbnQgWF9pcDZfbXJvdXRlcl9nZXQoc3RydWN0IHNvY2tldCAqc28s
IHN0cnVjdCBzb2Nrb3B0ICpzb3B0KTsKIGludCBYX21ydDZfaW9jdGwoaW50IGNtZCwgY2FkZHJf
dCBkYXRhKTsKIAorCiAvKgogICogSGFuZGxlIE1SVCBzZXRzb2Nrb3B0IGNvbW1hbmRzIHRvIG1v
ZGlmeSB0aGUgbXVsdGljYXN0IHJvdXRpbmcgdGFibGVzLgogICovCkBAIC0zODQsNyArMzk4LDcg
QEAKIGludAogWF9pcDZfbXJvdXRlcl9nZXQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2Nr
b3B0ICpzb3B0KQogewotCUlOSVRfVk5FVF9JTkVUNihjdXJ2bmV0KTsKKwlJTklUX1ZORVRfSU5F
VDYoc28tPnNvX3ZuZXQpOwogCWludCBlcnJvciA9IDA7CiAKIAlpZiAoc28gIT0gaXA2X21yb3V0
ZXIpCkBAIC00MjAsNiArNDM0LDcgQEAKIHN0YXRpYyBpbnQKIGdldF9zZ19jbnQoc3RydWN0IHNp
b2Nfc2dfcmVxNiAqcmVxKQogeworCUlOSVRfVk5FVF9JTkVUNihjdXJ2bmV0KTsKIAlzdHJ1Y3Qg
bWY2YyAqcnQ7CiAJaW50IHM7CiAKQEAgLTQ0NSwxNSArNDYwLDE2IEBACiBzdGF0aWMgaW50CiBn
ZXRfbWlmNl9jbnQoc3RydWN0IHNpb2NfbWlmX3JlcTYgKnJlcSkKIHsKKwlJTklUX1ZORVRfSU5F
VDYoY3Vydm5ldCk7CiAJbWlmaV90IG1pZmkgPSByZXEtPm1pZmk7CiAKLQlpZiAobWlmaSA+PSBu
dW1taWZzKQorCWlmIChtaWZpID49IFZfbnVtbWlmcykKIAkJcmV0dXJuIChFSU5WQUwpOwogCi0J
cmVxLT5pY291bnQgPSBtaWY2dGFibGVbbWlmaV0ubTZfcGt0X2luOwotCXJlcS0+b2NvdW50ID0g
bWlmNnRhYmxlW21pZmldLm02X3BrdF9vdXQ7Ci0JcmVxLT5pYnl0ZXMgPSBtaWY2dGFibGVbbWlm
aV0ubTZfYnl0ZXNfaW47Ci0JcmVxLT5vYnl0ZXMgPSBtaWY2dGFibGVbbWlmaV0ubTZfYnl0ZXNf
b3V0OworCXJlcS0+aWNvdW50ID0gVl9taWY2dGFibGVbbWlmaV0ubTZfcGt0X2luOworCXJlcS0+
b2NvdW50ID0gVl9taWY2dGFibGVbbWlmaV0ubTZfcGt0X291dDsKKwlyZXEtPmlieXRlcyA9IFZf
bWlmNnRhYmxlW21pZmldLm02X2J5dGVzX2luOworCXJlcS0+b2J5dGVzID0gVl9taWY2dGFibGVb
bWlmaV0ubTZfYnl0ZXNfb3V0OwogCiAJcmV0dXJuICgwKTsKIH0KQEAgLTQ3Niw5ICs0OTIsMTEg
QEAKIHN0YXRpYyBpbnQKIGlwNl9tcm91dGVyX2luaXQoc3RydWN0IHNvY2tldCAqc28sIGludCB2
LCBpbnQgY21kKQogewotCUlOSVRfVk5FVF9JTkVUNihjdXJ2bmV0KTsKKwlJTklUX1ZORVRfSU5F
VDYoc28tPnNvX3ZuZXQpOwogCiAJVl9pcDZfbXJvdXRlcl92ZXIgPSAwOworCVZfbnVtbWlmcyA9
IDA7CisJVl9yZWdfbWlmX251bSA9IChtaWZpX3QpLTE7CiAKICNpZmRlZiBNUlQ2REVCVUcKIAlW
X21ydDZkZWJ1ZyA9IDA7CkBAIC01MDIsMTQgKzUyMCwyMCBAQAogCWlwNl9tcm91dGVyID0gc287
CiAJVl9pcDZfbXJvdXRlcl92ZXIgPSBjbWQ7CiAKLQliemVybygoY2FkZHJfdCltZjZjdGFibGUs
IHNpemVvZihtZjZjdGFibGUpKTsKLQliemVybygoY2FkZHJfdCluNmV4cGlyZSwgc2l6ZW9mKG42
ZXhwaXJlKSk7CisJYnplcm8oKGNhZGRyX3QpVl9tZjZjdGFibGUsIHNpemVvZihWX21mNmN0YWJs
ZSkpOworCWJ6ZXJvKChjYWRkcl90KVZfbjZleHBpcmUsIHNpemVvZihWX242ZXhwaXJlKSk7CiAK
IAlWX3BpbTYgPSAwOy8qIHVzZWQgZm9yIHN0dWJiaW5nIG91dC9pbiBwaW0gc3R1ZmYgKi8KIAot
CWNhbGxvdXRfaW5pdCgmZXhwaXJlX3VwY2FsbHNfY2gsIDApOwotCWNhbGxvdXRfcmVzZXQoJmV4
cGlyZV91cGNhbGxzX2NoLCBFWFBJUkVfVElNRU9VVCwKLQkgICAgZXhwaXJlX3VwY2FsbHMsIE5V
TEwpOworI2lmZGVmIFZJTUFHRQorCWlmIChJU19ERUZBVUxUX1ZORVQoc28tPnNvX3ZuZXQpKSB7
CisjZW5kaWYgLyogVklNQUdFICovCisJICAgIGNhbGxvdXRfaW5pdCgmZXhwaXJlX3VwY2FsbHNf
Y2gsIDApOworCSAgICBjYWxsb3V0X3Jlc2V0KCZleHBpcmVfdXBjYWxsc19jaCwgRVhQSVJFX1RJ
TUVPVVQsCisJCWV4cGlyZV91cGNhbGxzLCBOVUxMKTsKKyNpZmRlZiBWSU1BR0UKKwl9CisjZW5k
aWYgLyogVklNQUdFICovCiAKICNpZmRlZiBNUlQ2REVCVUcKIAlpZiAoVl9tcnQ2ZGVidWcpCkBA
IC01NDYsMjkgKzU3MCwzNSBAQAogCSAqIFhYWDogdGhlcmUgbWF5IGJlIGFuIGludGVyZmFjZSBp
biB3aGljaCB0aGUgSVB2NCBtdWx0aWNhc3QKIAkgKiBkYWVtb24gaXMgbm90IGludGVyZXN0ZWQu
Li4KIAkgKi8KLQlpZiAoIWlwX21yb3V0ZXIpCisJaWYgKCFWX2lwX21yb3V0ZXIpCiAjZW5kaWYK
ICNlbmRpZgogCXsKLQkJZm9yIChtaWZpID0gMDsgbWlmaSA8IG51bW1pZnM7IG1pZmkrKykgewot
CQkJaWYgKG1pZjZ0YWJsZVttaWZpXS5tNl9pZnAgJiYKLQkJCSAgICAhKG1pZjZ0YWJsZVttaWZp
XS5tNl9mbGFncyAmIE1JRkZfUkVHSVNURVIpKSB7Ci0JCQkJaWZfYWxsbXVsdGkobWlmNnRhYmxl
W21pZmldLm02X2lmcCwgMCk7CisJCWZvciAobWlmaSA9IDA7IG1pZmkgPCBWX251bW1pZnM7IG1p
ZmkrKykgeworCQkJaWYgKFZfbWlmNnRhYmxlW21pZmldLm02X2lmcCAmJgorCQkJICAgICEoVl9t
aWY2dGFibGVbbWlmaV0ubTZfZmxhZ3MgJiBNSUZGX1JFR0lTVEVSKSkgeworCQkJCWlmX2FsbG11
bHRpKFZfbWlmNnRhYmxlW21pZmldLm02X2lmcCwgMCk7CiAJCQl9CiAJCX0KIAl9Ci0JYnplcm8o
KGNhZGRyX3QpbWlmNnRhYmxlLCBzaXplb2YobWlmNnRhYmxlKSk7Ci0JbnVtbWlmcyA9IDA7CisJ
Ynplcm8oKGNhZGRyX3QpVl9taWY2dGFibGUsIHNpemVvZihWX21pZjZ0YWJsZSkpOworCVZfbnVt
bWlmcyA9IDA7CiAKIAlWX3BpbTYgPSAwOyAvKiB1c2VkIHRvIHN0dWIgb3V0L2luIHBpbSBzcGVj
aWZpYyBjb2RlICovCiAKLQljYWxsb3V0X3N0b3AoJmV4cGlyZV91cGNhbGxzX2NoKTsKKyNpZmRl
ZiBWSU1BR0UKKwlpZiAoSVNfREVGQVVMVF9WTkVUKGN1cnZuZXQpKSB7CisjZW5kaWYgLyogVklN
QUdFICovCisJICAgIGNhbGxvdXRfc3RvcCgmZXhwaXJlX3VwY2FsbHNfY2gpOworI2lmZGVmIFZJ
TUFHRQorCX0KKyNlbmRpZiAvKiBWSU1BR0UgKi8KIAogCS8qCiAJICogRnJlZSBhbGwgbXVsdGlj
YXN0IGZvcndhcmRpbmcgY2FjaGUgZW50cmllcy4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTUY2
Q1RCTFNJWjsgaSsrKSB7Ci0JCXJ0ID0gbWY2Y3RhYmxlW2ldOworCQlydCA9IFZfbWY2Y3RhYmxl
W2ldOwogCQl3aGlsZSAocnQpIHsKIAkJCXN0cnVjdCBtZjZjICpmcnQ7CiAKQEAgLTU4NSwxNiAr
NjE1LDE2IEBACiAJCX0KIAl9CiAKLQliemVybygoY2FkZHJfdCltZjZjdGFibGUsIHNpemVvZiht
ZjZjdGFibGUpKTsKKwliemVybygoY2FkZHJfdClWX21mNmN0YWJsZSwgc2l6ZW9mKFZfbWY2Y3Rh
YmxlKSk7CiAKIAkvKgogCSAqIFJlc2V0IHJlZ2lzdGVyIGludGVyZmFjZQogCSAqLwotCWlmIChy
ZWdfbWlmX251bSAhPSAobWlmaV90KS0xICYmIG11bHRpY2FzdF9yZWdpc3Rlcl9pZjYgIT0gTlVM
TCkgewotCQlpZl9kZXRhY2gobXVsdGljYXN0X3JlZ2lzdGVyX2lmNik7Ci0JCWlmX2ZyZWUobXVs
dGljYXN0X3JlZ2lzdGVyX2lmNik7Ci0JCXJlZ19taWZfbnVtID0gKG1pZmlfdCktMTsKLQkJbXVs
dGljYXN0X3JlZ2lzdGVyX2lmNiA9IE5VTEw7CisJaWYgKFZfcmVnX21pZl9udW0gIT0gKG1pZmlf
dCktMSAmJiBWX211bHRpY2FzdF9yZWdpc3Rlcl9pZjYgIT0gTlVMTCkgeworCQlpZl9kZXRhY2go
Vl9tdWx0aWNhc3RfcmVnaXN0ZXJfaWY2KTsKKwkJaWZfZnJlZShWX211bHRpY2FzdF9yZWdpc3Rl
cl9pZjYpOworCQlWX3JlZ19taWZfbnVtID0gKG1pZmlfdCktMTsKKwkJVl9tdWx0aWNhc3RfcmVn
aXN0ZXJfaWY2ID0gTlVMTDsKIAl9CiAKIAlpcDZfbXJvdXRlciA9IE5VTEw7CkBAIC02MTksMTMg
KzY0OSwxNCBAQAogYWRkX202aWYoc3RydWN0IG1pZjZjdGwgKm1pZmNwKQogewogCUlOSVRfVk5F
VF9ORVQoY3Vydm5ldCk7CisJSU5JVF9WTkVUX0lORVQ2KGN1cnZuZXQpOwogCXN0cnVjdCBtaWY2
ICptaWZwOwogCXN0cnVjdCBpZm5ldCAqaWZwOwogCWludCBlcnJvciwgczsKIAogCWlmIChtaWZj
cC0+bWlmNmNfbWlmaSA+PSBNQVhNSUZTKQogCQlyZXR1cm4gKEVJTlZBTCk7Ci0JbWlmcCA9IG1p
ZjZ0YWJsZSArIG1pZmNwLT5taWY2Y19taWZpOworCW1pZnAgPSBWX21pZjZ0YWJsZSArIG1pZmNw
LT5taWY2Y19taWZpOwogCWlmIChtaWZwLT5tNl9pZnApCiAJCXJldHVybiAoRUFERFJJTlVTRSk7
IC8qIFhYWDogaXMgaXQgYXBwcm9wcmlhdGU/ICovCiAJaWYgKG1pZmNwLT5taWY2Y19waWZpID09
IDAgfHwgbWlmY3AtPm1pZjZjX3BpZmkgPiBWX2lmX2luZGV4KQpAQCAtNjMzLDE0ICs2NjQsMTQg
QEAKIAlpZnAgPSBpZm5ldF9ieWluZGV4KG1pZmNwLT5taWY2Y19waWZpKTsKIAogCWlmIChtaWZj
cC0+bWlmNmNfZmxhZ3MgJiBNSUZGX1JFR0lTVEVSKSB7Ci0JCWlmIChyZWdfbWlmX251bSA9PSAo
bWlmaV90KS0xKSB7CisJCWlmIChWX3JlZ19taWZfbnVtID09IChtaWZpX3QpLTEpIHsKIAkJCWlm
cCA9IGlmX2FsbG9jKElGVF9PVEhFUik7CiAKIAkJCWlmX2luaXRuYW1lKGlmcCwgInJlZ2lzdGVy
X21pZiIsIDApOwogCQkJaWZwLT5pZl9mbGFncyB8PSBJRkZfTE9PUEJBQ0s7CiAJCQlpZl9hdHRh
Y2goaWZwKTsKLQkJCW11bHRpY2FzdF9yZWdpc3Rlcl9pZjYgPSBpZnA7Ci0JCQlyZWdfbWlmX251
bSA9IG1pZmNwLT5taWY2Y19taWZpOworCQkJVl9tdWx0aWNhc3RfcmVnaXN0ZXJfaWY2ID0gaWZw
OworCQkJVl9yZWdfbWlmX251bSA9IG1pZmNwLT5taWY2Y19taWZpOwogCQkJLyoKIAkJCSAqIGl0
IGlzIGltcG9zc2libGUgdG8gZ3Vlc3MgdGhlIGlmaW5kZXggb2YgdGhlCiAJCQkgKiByZWdpc3Rl
ciBpbnRlcmZhY2UuICBTbyBtaWY2Y19waWZpIGlzIGF1dG9tYXRpY2FsbHkKQEAgLTY0OCw3ICs2
NzksNyBAQAogCQkJICovCiAJCQltaWZjcC0+bWlmNmNfcGlmaSA9IGlmcC0+aWZfaW5kZXg7CiAJ
CX0gZWxzZSB7Ci0JCQlpZnAgPSBtdWx0aWNhc3RfcmVnaXN0ZXJfaWY2OworCQkJaWZwID0gVl9t
dWx0aWNhc3RfcmVnaXN0ZXJfaWY2OwogCQl9CiAKIAl9IC8qIGlmIFJFR0lTVEVSICovCkBAIC02
NzUsOSArNzA2LDkgQEAKIAltaWZwLT5tNl9ieXRlc19vdXQgPSAwOwogCXNwbHgocyk7CiAKLQkv
KiBBZGp1c3QgbnVtbWlmcyB1cCBpZiB0aGUgbWlmaSBpcyBoaWdoZXIgdGhhbiBudW1taWZzICov
Ci0JaWYgKG51bW1pZnMgPD0gbWlmY3AtPm1pZjZjX21pZmkpCi0JCW51bW1pZnMgPSBtaWZjcC0+
bWlmNmNfbWlmaSArIDE7CisJLyogQWRqdXN0IFZfbnVtbWlmcyB1cCBpZiB0aGUgbWlmaSBpcyBo
aWdoZXIgdGhhbiBWX251bW1pZnMgKi8KKwlpZiAoVl9udW1taWZzIDw9IG1pZmNwLT5taWY2Y19t
aWZpKQorCQlWX251bW1pZnMgPSBtaWZjcC0+bWlmNmNfbWlmaSArIDE7CiAKICNpZmRlZiBNUlQ2
REVCVUcKIAlpZiAoVl9tcnQ2ZGVidWcpCkBAIC02OTYsMTIgKzcyNywxMyBAQAogc3RhdGljIGlu
dAogZGVsX202aWYobWlmaV90ICptaWZpcCkKIHsKLQlzdHJ1Y3QgbWlmNiAqbWlmcCA9IG1pZjZ0
YWJsZSArICptaWZpcDsKKwlJTklUX1ZORVRfSU5FVDYoY3Vydm5ldCk7CisJc3RydWN0IG1pZjYg
Km1pZnAgPSBWX21pZjZ0YWJsZSArICptaWZpcDsKIAltaWZpX3QgbWlmaTsKIAlzdHJ1Y3QgaWZu
ZXQgKmlmcDsKIAlpbnQgczsKIAotCWlmICgqbWlmaXAgPj0gbnVtbWlmcykKKwlpZiAoKm1pZmlw
ID49IFZfbnVtbWlmcykKIAkJcmV0dXJuIChFSU5WQUwpOwogCWlmIChtaWZwLT5tNl9pZnAgPT0g
TlVMTCkKIAkJcmV0dXJuIChFSU5WQUwpOwpAQCAtNzE3LDI4ICs3NDksMjggQEAKIAogCQlpZl9h
bGxtdWx0aShpZnAsIDApOwogCX0gZWxzZSB7Ci0JCWlmIChyZWdfbWlmX251bSAhPSAobWlmaV90
KS0xICYmCi0JCSAgICBtdWx0aWNhc3RfcmVnaXN0ZXJfaWY2ICE9IE5VTEwpIHsKLQkJCWlmX2Rl
dGFjaChtdWx0aWNhc3RfcmVnaXN0ZXJfaWY2KTsKLQkJCWlmX2ZyZWUobXVsdGljYXN0X3JlZ2lz
dGVyX2lmNik7Ci0JCQlyZWdfbWlmX251bSA9IChtaWZpX3QpLTE7Ci0JCQltdWx0aWNhc3RfcmVn
aXN0ZXJfaWY2ID0gTlVMTDsKKwkJaWYgKFZfcmVnX21pZl9udW0gIT0gKG1pZmlfdCktMSAmJgor
CQkgICAgVl9tdWx0aWNhc3RfcmVnaXN0ZXJfaWY2ICE9IE5VTEwpIHsKKwkJCWlmX2RldGFjaChW
X211bHRpY2FzdF9yZWdpc3Rlcl9pZjYpOworCQkJaWZfZnJlZShWX211bHRpY2FzdF9yZWdpc3Rl
cl9pZjYpOworCQkJVl9yZWdfbWlmX251bSA9IChtaWZpX3QpLTE7CisJCQlWX211bHRpY2FzdF9y
ZWdpc3Rlcl9pZjYgPSBOVUxMOwogCQl9CiAJfQogCiAJYnplcm8oKGNhZGRyX3QpbWlmcCwgc2l6
ZW9mKCptaWZwKSk7CiAKLQkvKiBBZGp1c3QgbnVtbWlmcyBkb3duICovCi0JZm9yIChtaWZpID0g
bnVtbWlmczsgbWlmaSA+IDA7IG1pZmktLSkKLQkJaWYgKG1pZjZ0YWJsZVttaWZpIC0gMV0ubTZf
aWZwKQorCS8qIEFkanVzdCBWX251bW1pZnMgZG93biAqLworCWZvciAobWlmaSA9IFZfbnVtbWlm
czsgbWlmaSA+IDA7IG1pZmktLSkKKwkJaWYgKFZfbWlmNnRhYmxlW21pZmkgLSAxXS5tNl9pZnAp
CiAJCQlicmVhazsKLQludW1taWZzID0gbWlmaTsKKwlWX251bW1pZnMgPSBtaWZpOwogCiAJc3Bs
eChzKTsKIAogI2lmZGVmIE1SVDZERUJVRwogCWlmIChWX21ydDZkZWJ1ZykKLQkJbG9nKExPR19E
RUJVRywgImRlbF9tNmlmICVkLCBudW1taWZzICVkXG4iLCAqbWlmaXAsIG51bW1pZnMpOworCQls
b2coTE9HX0RFQlVHLCAiZGVsX202aWYgJWQsIG51bW1pZnMgJWRcbiIsICptaWZpcCwgVl9udW1t
aWZzKTsKICNlbmRpZgogCiAJcmV0dXJuICgwKTsKQEAgLTc4Niw3ICs4MTgsNyBAQAogCXMgPSBz
cGxuZXQoKTsKIAloYXNoID0gTUY2Q0hBU0gobWZjY3AtPm1mNmNjX29yaWdpbi5zaW42X2FkZHIs
CiAJCQltZmNjcC0+bWY2Y2NfbWNhc3RncnAuc2luNl9hZGRyKTsKLQlmb3IgKHJ0ID0gbWY2Y3Rh
YmxlW2hhc2hdLCBuc3RsID0gMDsgcnQ7IHJ0ID0gcnQtPm1mNmNfbmV4dCkgeworCWZvciAocnQg
PSBWX21mNmN0YWJsZVtoYXNoXSwgbnN0bCA9IDA7IHJ0OyBydCA9IHJ0LT5tZjZjX25leHQpIHsK
IAkJaWYgKElONl9BUkVfQUREUl9FUVVBTCgmcnQtPm1mNmNfb3JpZ2luLnNpbjZfYWRkciwKIAkJ
CQkgICAgICAgJm1mY2NwLT5tZjZjY19vcmlnaW4uc2luNl9hZGRyKSAmJgogCQkgICAgSU42X0FS
RV9BRERSX0VRVUFMKCZydC0+bWY2Y19tY2FzdGdycC5zaW42X2FkZHIsCkBAIC04MjQsNyArODU2
LDcgQEAKIAkJCXJ0LT5tZjZjX3dyb25nX2lmICAgPSAwOwogCiAJCQlydC0+bWY2Y19leHBpcmUg
PSAwOwkvKiBEb24ndCBjbGVhbiB0aGlzIGd1eSB1cCAqLwotCQkJbjZleHBpcmVbaGFzaF0tLTsK
KwkJCVZfbjZleHBpcmVbaGFzaF0tLTsKIAogCQkJLyogZnJlZSBwYWNrZXRzIFFlZCBhdCB0aGUg
ZW5kIG9mIHRoaXMgZW50cnkgKi8KIAkJCWZvciAocnRlID0gcnQtPm1mNmNfc3RhbGw7IHJ0ZSAh
PSBOVUxMOyApIHsKQEAgLTg1NSw3ICs4ODcsNyBAQAogCQkJbWZjY3AtPm1mNmNjX3BhcmVudCk7
CiAjZW5kaWYKIAotCQlmb3IgKHJ0ID0gbWY2Y3RhYmxlW2hhc2hdOyBydDsgcnQgPSBydC0+bWY2
Y19uZXh0KSB7CisJCWZvciAocnQgPSBWX21mNmN0YWJsZVtoYXNoXTsgcnQ7IHJ0ID0gcnQtPm1m
NmNfbmV4dCkgewogCiAJCQlpZiAoSU42X0FSRV9BRERSX0VRVUFMKCZydC0+bWY2Y19vcmlnaW4u
c2luNl9hZGRyLAogCQkJCQkgICAgICAgJm1mY2NwLT5tZjZjY19vcmlnaW4uc2luNl9hZGRyKSYm
CkBAIC04NzIsNyArOTA0LDcgQEAKIAkJCQlydC0+bWY2Y193cm9uZ19pZiAgID0gMDsKIAogCQkJ
CWlmIChydC0+bWY2Y19leHBpcmUpCi0JCQkJCW42ZXhwaXJlW2hhc2hdLS07CisJCQkJCVZfbjZl
eHBpcmVbaGFzaF0tLTsKIAkJCQlydC0+bWY2Y19leHBpcmUJICAgPSAwOwogCQkJfQogCQl9CkBA
IC04OTgsOCArOTMwLDggQEAKIAkJCXJ0LT5tZjZjX3N0YWxsID0gTlVMTDsKIAogCQkJLyogbGlu
ayBpbnRvIHRhYmxlICovCi0JCQlydC0+bWY2Y19uZXh0ICA9IG1mNmN0YWJsZVtoYXNoXTsKLQkJ
CW1mNmN0YWJsZVtoYXNoXSA9IHJ0OworCQkJcnQtPm1mNmNfbmV4dCAgPSBWX21mNmN0YWJsZVto
YXNoXTsKKwkJCVZfbWY2Y3RhYmxlW2hhc2hdID0gcnQ7CiAJCX0KIAl9CiAJc3BseChzKTsKQEAg
LTkxMyw2ICs5NDUsNyBAQAogc3RhdGljIHZvaWQKIGNvbGxhdGUoc3RydWN0IHRpbWV2YWwgKnQp
CiB7CisJSU5JVF9WTkVUX0lORVQ2KGN1cnZuZXQpOwogCXVfbG9uZyBkOwogCXN0cnVjdCB0aW1l
dmFsIHRwOwogCXVfbG9uZyBkZWx0YTsKQEAgLTkyNyw3ICs5NjAsNyBAQAogCQlpZiAoZCA+IFVQ
Q0FMTF9NQVgpCiAJCQlkID0gVVBDQUxMX01BWDsKIAotCQkrK3VwY2FsbF9kYXRhW2RdOworCQkr
K1ZfdXBjYWxsX2RhdGFbZF07CiAJfQogfQogI2VuZGlmIC8qIFVQQ0FMTF9USU1JTkcgKi8KQEAg
LTk2MSw3ICs5OTQsNyBAQAogCiAJcyA9IHNwbG5ldCgpOwogCi0JbnB0ciA9ICZtZjZjdGFibGVb
aGFzaF07CisJbnB0ciA9ICZWX21mNmN0YWJsZVtoYXNoXTsKIAl3aGlsZSAoKHJ0ID0gKm5wdHIp
ICE9IE5VTEwpIHsKIAkJaWYgKElONl9BUkVfQUREUl9FUVVBTCgmb3JpZ2luLnNpbjZfYWRkciwK
IAkJCQkgICAgICAgJnJ0LT5tZjZjX29yaWdpbi5zaW42X2FkZHIpICYmCkBAIC0xMDk2LDcgKzEx
MjksNyBAQAogCQlHRVRfVElNRSh0cCk7CiAjZW5kaWYgLyogVVBDQUxMX1RJTUlORyAqLwogCi0J
CW1ydDZzdGF0Lm1ydDZzX25vX3JvdXRlKys7CisJCVZfbXJ0NnN0YXQubXJ0NnNfbm9fcm91dGUr
KzsKICNpZmRlZiBNUlQ2REVCVUcKIAkJaWYgKFZfbXJ0NmRlYnVnICYgKERFQlVHX0ZPUldBUkQg
fCBERUJVR19NRkMpKQogCQkJbG9nKExPR19ERUJVRywgImlwNl9tZm9yd2FyZDogbm8gcnRlIHMg
JXMgZyAlc1xuIiwKQEAgLTExMzAsNyArMTE2Myw3IEBACiAKIAkJLyogaXMgdGhlcmUgYW4gdXBj
YWxsIHdhaXRpbmcgZm9yIHRoaXMgcGFja2V0PyAqLwogCQloYXNoID0gTUY2Q0hBU0goaXA2LT5p
cDZfc3JjLCBpcDYtPmlwNl9kc3QpOwotCQlmb3IgKHJ0ID0gbWY2Y3RhYmxlW2hhc2hdOyBydDsg
cnQgPSBydC0+bWY2Y19uZXh0KSB7CisJCWZvciAocnQgPSBWX21mNmN0YWJsZVtoYXNoXTsgcnQ7
IHJ0ID0gcnQtPm1mNmNfbmV4dCkgewogCQkJaWYgKElONl9BUkVfQUREUl9FUVVBTCgmaXA2LT5p
cDZfc3JjLAogCQkJCQkgICAgICAgJnJ0LT5tZjZjX29yaWdpbi5zaW42X2FkZHIpICYmCiAJCQkg
ICAgSU42X0FSRV9BRERSX0VRVUFMKCZpcDYtPmlwNl9kc3QsCkBAIC0xMjA0LDggKzEyMzcsOCBA
QAogCQkJCSAgICAiZ2V0dGluZyB0aGUgaWlmIGluZm8gaW4gdGhlIGtlcm5lbFxuIik7CiAjZW5k
aWYKIAotCQkJZm9yIChtaWZwID0gbWlmNnRhYmxlLCBtaWZpID0gMDsKLQkJCSAgICAgbWlmaSA8
IG51bW1pZnMgJiYgbWlmcC0+bTZfaWZwICE9IGlmcDsKKwkJCWZvciAobWlmcCA9IFZfbWlmNnRh
YmxlLCBtaWZpID0gMDsKKwkJCSAgICAgbWlmaSA8IFZfbnVtbWlmcyAmJiBtaWZwLT5tNl9pZnAg
IT0gaWZwOwogCQkJICAgICBtaWZwKyssIG1pZmkrKykKIAkJCQk7CiAKQEAgLTEyMjMsNyArMTI1
Niw3IEBACiAJCQlpZiAoc29ja2V0X3NlbmQoaXA2X21yb3V0ZXIsIG1tLCAmc2luNikgPCAwKSB7
CiAJCQkJbG9nKExPR19XQVJOSU5HLCAiaXA2X21mb3J3YXJkOiBpcDZfbXJvdXRlciAiCiAJCQkJ
ICAgICJzb2NrZXQgcXVldWUgZnVsbFxuIik7Ci0JCQkJbXJ0NnN0YXQubXJ0NnNfdXBxX3NvY2tm
dWxsKys7CisJCQkJVl9tcnQ2c3RhdC5tcnQ2c191cHFfc29ja2Z1bGwrKzsKIAkJCQlmcmVlKHJ0
ZSwgTV9NUlRBQkxFNik7CiAJCQkJbV9mcmVlbShtYjApOwogCQkJCWZyZWUocnQsIE1fTVJUQUJM
RTYpOwpAQCAtMTIzMSw3ICsxMjY0LDcgQEAKIAkJCQlyZXR1cm4gKEVOT0JVRlMpOwogCQkJfQog
Ci0JCQltcnQ2c3RhdC5tcnQ2c191cGNhbGxzKys7CisJCQlWX21ydDZzdGF0Lm1ydDZzX3VwY2Fs
bHMrKzsKIAogCQkJLyogaW5zZXJ0IG5ldyBlbnRyeSBhdCBoZWFkIG9mIGhhc2ggY2hhaW4gKi8K
IAkJCWJ6ZXJvKHJ0LCBzaXplb2YoKnJ0KSk7CkBAIC0xMjQyLDEyICsxMjc1LDEyIEBACiAJCQly
dC0+bWY2Y19tY2FzdGdycC5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsK
IAkJCXJ0LT5tZjZjX21jYXN0Z3JwLnNpbjZfYWRkciA9IGlwNi0+aXA2X2RzdDsKIAkJCXJ0LT5t
ZjZjX2V4cGlyZSA9IFVQQ0FMTF9FWFBJUkU7Ci0JCQluNmV4cGlyZVtoYXNoXSsrOworCQkJVl9u
NmV4cGlyZVtoYXNoXSsrOwogCQkJcnQtPm1mNmNfcGFyZW50ID0gTUY2Q19JTkNPTVBMRVRFX1BB
UkVOVDsKIAogCQkJLyogbGluayBpbnRvIHRhYmxlICovCi0JCQlydC0+bWY2Y19uZXh0ICA9IG1m
NmN0YWJsZVtoYXNoXTsKLQkJCW1mNmN0YWJsZVtoYXNoXSA9IHJ0OworCQkJcnQtPm1mNmNfbmV4
dCAgPSBWX21mNmN0YWJsZVtoYXNoXTsKKwkJCVZfbWY2Y3RhYmxlW2hhc2hdID0gcnQ7CiAJCQkv
KiBBZGQgdGhpcyBlbnRyeSB0byB0aGUgZW5kIG9mIHRoZSBxdWV1ZSAqLwogCQkJcnQtPm1mNmNf
c3RhbGwgPSBydGU7CiAJCX0gZWxzZSB7CkBAIC0xMjU3LDcgKzEyOTAsNyBAQAogCiAJCQlmb3Ig
KHAgPSAmcnQtPm1mNmNfc3RhbGw7ICpwICE9IE5VTEw7IHAgPSAmKCpwKS0+bmV4dCkKIAkJCQlp
ZiAoKytucGt0cyA+IE1BWF9VUFE2KSB7Ci0JCQkJCW1ydDZzdGF0Lm1ydDZzX3VwcV9vdmZsdysr
OworCQkJCQlWX21ydDZzdGF0Lm1ydDZzX3VwcV9vdmZsdysrOwogCQkJCQlmcmVlKHJ0ZSwgTV9N
UlRBQkxFNik7CiAJCQkJCW1fZnJlZW0obWIwKTsKIAkJCQkJc3BseChzKTsKQEAgLTEyODgsMTcg
KzEzMjEsMTggQEAKIHN0YXRpYyB2b2lkCiBleHBpcmVfdXBjYWxscyh2b2lkICp1bnVzZWQpCiB7
Ci0JSU5JVF9WTkVUX0lORVQ2KGN1cnZuZXQpOwogCXN0cnVjdCBydGRldHEgKnJ0ZTsKIAlzdHJ1
Y3QgbWY2YyAqbWZjLCAqKm5wdHI7CiAJaW50IGk7CiAJaW50IHM7CiAKIAlzID0gc3BsbmV0KCk7
CisJVk5FVF9JVEVSTE9PUF9CRUdJTigpOworCUlOSVRfVk5FVF9JTkVUNihjdXJ2bmV0KTsKIAlm
b3IgKGkgPSAwOyBpIDwgTUY2Q1RCTFNJWjsgaSsrKSB7Ci0JCWlmIChuNmV4cGlyZVtpXSA9PSAw
KQorCQlpZiAoVl9uNmV4cGlyZVtpXSA9PSAwKQogCQkJY29udGludWU7Ci0JCW5wdHIgPSAmbWY2
Y3RhYmxlW2ldOworCQlucHRyID0gJlZfbWY2Y3RhYmxlW2ldOwogCQl3aGlsZSAoKG1mYyA9ICpu
cHRyKSAhPSBOVUxMKSB7CiAJCQlydGUgPSBtZmMtPm1mNmNfc3RhbGw7CiAJCQkvKgpAQCAtMTMy
OCw4ICsxMzYyLDggQEAKIAkJCQkJZnJlZShydGUsIE1fTVJUQUJMRTYpOwogCQkJCQlydGUgPSBu
OwogCQkJCX0gd2hpbGUgKHJ0ZSAhPSBOVUxMKTsKLQkJCQltcnQ2c3RhdC5tcnQ2c19jYWNoZV9j
bGVhbnVwcysrOwotCQkJCW42ZXhwaXJlW2ldLS07CisJCQkJVl9tcnQ2c3RhdC5tcnQ2c19jYWNo
ZV9jbGVhbnVwcysrOworCQkJCVZfbjZleHBpcmVbaV0tLTsKIAogCQkJCSpucHRyID0gbWZjLT5t
ZjZjX25leHQ7CiAJCQkJZnJlZShtZmMsIE1fTVJUQUJMRTYpOwpAQCAtMTMzOCw5ICsxMzcyLDkg
QEAKIAkJCX0KIAkJfQogCX0KKwlWTkVUX0lURVJMT09QX0VORCgpOworCWNhbGxvdXRfcmVzZXQo
JmV4cGlyZV91cGNhbGxzX2NoLCBFWFBJUkVfVElNRU9VVCwgZXhwaXJlX3VwY2FsbHMsIE5VTEwp
OwogCXNwbHgocyk7Ci0JY2FsbG91dF9yZXNldCgmZXhwaXJlX3VwY2FsbHNfY2gsIEVYUElSRV9U
SU1FT1VULAotCSAgICBleHBpcmVfdXBjYWxscywgTlVMTCk7CiB9CiAKIC8qCkBAIC0xMzc2LDE2
ICsxNDEwLDE2IEBACiAJICogZm9yIGl0cyBvcmlnaW4uCiAJICovCiAJbWlmaSA9IHJ0LT5tZjZj
X3BhcmVudDsKLQlpZiAoKG1pZmkgPj0gbnVtbWlmcykgfHwgKG1pZjZ0YWJsZVttaWZpXS5tNl9p
ZnAgIT0gaWZwKSkgeworCWlmICgobWlmaSA+PSBWX251bW1pZnMpIHx8IChWX21pZjZ0YWJsZVtt
aWZpXS5tNl9pZnAgIT0gaWZwKSkgewogCQkvKiBjYW1lIGluIHRoZSB3cm9uZyBpbnRlcmZhY2Ug
Ki8KICNpZmRlZiBNUlQ2REVCVUcKIAkJaWYgKFZfbXJ0NmRlYnVnICYgREVCVUdfRk9SV0FSRCkK
IAkJCWxvZyhMT0dfREVCVUcsCiAJCQkgICAgIndyb25nIGlmOiBpZmlkICVkIG1pZmkgJWQgbWlm
aWZpZCAleFxuIiwKIAkJCSAgICBpZnAtPmlmX2luZGV4LCBtaWZpLAotCQkJICAgIG1pZjZ0YWJs
ZVttaWZpXS5tNl9pZnAtPmlmX2luZGV4KTsKKwkJCSAgICBWX21pZjZ0YWJsZVttaWZpXS5tNl9p
ZnAtPmlmX2luZGV4KTsKICNlbmRpZgotCQltcnQ2c3RhdC5tcnQ2c193cm9uZ19pZisrOworCQlW
X21ydDZzdGF0Lm1ydDZzX3dyb25nX2lmKys7CiAJCXJ0LT5tZjZjX3dyb25nX2lmKys7CiAJCS8q
CiAJCSAqIElmIHdlIGFyZSBkb2luZyBQSU0gcHJvY2Vzc2luZywgYW5kIHdlIGFyZSBmb3J3YXJk
aW5nCkBAIC0xMzkzLDcgKzE0MjcsNyBAQAogCQkgKiByb3V0aW5nIGRhZW1vbi4KIAkJICovCiAJ
CS8qIGhhdmUgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYSB2YWxpZCBtaWYgKi8KLQkJaWYgKG1pZmkg
PCBudW1taWZzICYmIG1pZjZ0YWJsZVttaWZpXS5tNl9pZnApCisJCWlmIChtaWZpIDwgVl9udW1t
aWZzICYmIFZfbWlmNnRhYmxlW21pZmldLm02X2lmcCkKIAkJCWlmIChWX3BpbTYgJiYgKG0tPm1f
ZmxhZ3MgJiBNX0xPT1ApID09IDApIHsKIAkJCQkvKgogCQkJCSAqIENoZWNrIHRoZSBNX0xPT1Ag
ZmxhZyB0byBhdm9pZCBhbgpAQCAtMTQzOSw4ICsxNDczLDggQEAKIAkJCQkJcmV0dXJuIChFSU5W
QUwpOwogCQkJCX0KIAotCQkJCWZvciAobWlmcCA9IG1pZjZ0YWJsZSwgaWlmID0gMDsKLQkJCQkg
ICAgIGlpZiA8IG51bW1pZnMgJiYgbWlmcCAmJgorCQkJCWZvciAobWlmcCA9IFZfbWlmNnRhYmxl
LCBpaWYgPSAwOworCQkJCSAgICAgaWlmIDwgVl9udW1taWZzICYmIG1pZnAgJiYKIAkJCQkJICAg
ICBtaWZwLT5tNl9pZnAgIT0gaWZwOwogCQkJCSAgICAgbWlmcCsrLCBpaWYrKykKIAkJCQkJOwpA
QCAtMTQ1OCwxNCArMTQ5MiwxNCBAQAogCQkJCQlicmVhazsKIAkJCQl9CiAKLQkJCQltcnQ2c3Rh
dC5tcnQ2c191cGNhbGxzKys7CisJCQkJVl9tcnQ2c3RhdC5tcnQ2c191cGNhbGxzKys7CiAKIAkJ
CQlpZiAoc29ja2V0X3NlbmQoaXA2X21yb3V0ZXIsIG1tLCAmc2luNikgPCAwKSB7CiAjaWZkZWYg
TVJUNkRFQlVHCiAJCQkJCWlmIChWX21ydDZkZWJ1ZykKIAkJCQkJCWxvZyhMT0dfV0FSTklORywg
Im1kcSwgaXA2X21yb3V0ZXIgc29ja2V0IHF1ZXVlIGZ1bGxcbiIpOwogI2VuZGlmCi0JCQkJCSsr
bXJ0NnN0YXQubXJ0NnNfdXBxX3NvY2tmdWxsOworCQkJCQkrK1ZfbXJ0NnN0YXQubXJ0NnNfdXBx
X3NvY2tmdWxsOwogCQkJCQlyZXR1cm4gKEVOT0JVRlMpOwogCQkJCX0JLyogaWYgc29ja2V0IFEg
ZnVsbCAqLwogCQkJfQkJLyogaWYgUElNICovCkBAIC0xNDc1LDExICsxNTA5LDExIEBACiAJLyog
SWYgSSBzb3VyY2VkIHRoaXMgcGFja2V0LCBpdCBjb3VudHMgYXMgb3V0cHV0LCBlbHNlIGl0IHdh
cyBpbnB1dC4gKi8KIAlpZiAobS0+bV9wa3RoZHIucmN2aWYgPT0gTlVMTCkgewogCQkvKiBYWFg6
IGlzIHJjdmlmIHJlYWxseSBOVUxMIHdoZW4gb3V0cHV0Pz8gKi8KLQkJbWlmNnRhYmxlW21pZmld
Lm02X3BrdF9vdXQrKzsKLQkJbWlmNnRhYmxlW21pZmldLm02X2J5dGVzX291dCArPSBwbGVuOwor
CQlWX21pZjZ0YWJsZVttaWZpXS5tNl9wa3Rfb3V0Kys7CisJCVZfbWlmNnRhYmxlW21pZmldLm02
X2J5dGVzX291dCArPSBwbGVuOwogCX0gZWxzZSB7Ci0JCW1pZjZ0YWJsZVttaWZpXS5tNl9wa3Rf
aW4rKzsKLQkJbWlmNnRhYmxlW21pZmldLm02X2J5dGVzX2luICs9IHBsZW47CisJCVZfbWlmNnRh
YmxlW21pZmldLm02X3BrdF9pbisrOworCQlWX21pZjZ0YWJsZVttaWZpXS5tNl9ieXRlc19pbiAr
PSBwbGVuOwogCX0KIAlydC0+bWY2Y19wa3RfY250Kys7CiAJcnQtPm1mNmNfYnl0ZV9jbnQgKz0g
cGxlbjsKQEAgLTE0OTUsNyArMTUyOSw3IEBACiAJCVZfaXA2c3RhdC5pcDZzX2JhZHNjb3BlKys7
CiAJCXJldHVybiAoZXJyb3IpOwogCX0KLQlmb3IgKG1pZnAgPSBtaWY2dGFibGUsIG1pZmkgPSAw
OyBtaWZpIDwgbnVtbWlmczsgbWlmcCsrLCBtaWZpKyspIHsKKwlmb3IgKG1pZnAgPSBWX21pZjZ0
YWJsZSwgbWlmaSA9IDA7IG1pZmkgPCBWX251bW1pZnM7IG1pZnArKywgbWlmaSsrKSB7CiAJCWlm
IChJRl9JU1NFVChtaWZpLCAmcnQtPm1mNmNfaWZzZXQpKSB7CiAJCQkvKgogCQkJICogY2hlY2sg
aWYgdGhlIG91dGdvaW5nIHBhY2tldCBpcyBnb2luZyB0byBicmVhawpAQCAtMTUwMywxMiArMTUz
NywxMiBAQAogCQkJICogWFhYIEZvciBwYWNrZXRzIHRocm91Z2ggUElNIHJlZ2lzdGVyIHR1bm5l
bAogCQkJICogaW50ZXJmYWNlLCB3ZSBiZWxpZXZlIGEgcm91dGluZyBkYWVtb24uCiAJCQkgKi8K
LQkJCWlmICghKG1pZjZ0YWJsZVtydC0+bWY2Y19wYXJlbnRdLm02X2ZsYWdzICYKKwkJCWlmICgh
KFZfbWlmNnRhYmxlW3J0LT5tZjZjX3BhcmVudF0ubTZfZmxhZ3MgJgogCQkJICAgICAgTUlGRl9S
RUdJU1RFUikgJiYKLQkJCSAgICAhKG1pZjZ0YWJsZVttaWZpXS5tNl9mbGFncyAmIE1JRkZfUkVH
SVNURVIpKSB7Ci0JCQkJaWYgKGluNl9zZXRzY29wZSgmc3JjMCwgbWlmNnRhYmxlW21pZmldLm02
X2lmcCwKKwkJCSAgICAhKFZfbWlmNnRhYmxlW21pZmldLm02X2ZsYWdzICYgTUlGRl9SRUdJU1RF
UikpIHsKKwkJCQlpZiAoaW42X3NldHNjb3BlKCZzcmMwLCBWX21pZjZ0YWJsZVttaWZpXS5tNl9p
ZnAsCiAJCQkJICAgICZvc3pvbmUpIHx8Ci0JCQkJICAgIGluNl9zZXRzY29wZSgmZHN0MCwgbWlm
NnRhYmxlW21pZmldLm02X2lmcCwKKwkJCQkgICAgaW42X3NldHNjb3BlKCZkc3QwLCBWX21pZjZ0
YWJsZVttaWZpXS5tNl9pZnAsCiAJCQkJICAgICZvZHpvbmUpIHx8CiAJCQkJICAgIGlzem9uZSAh
PSBvc3pvbmUgfHwKIAkJCQkgICAgaWR6b25lICE9IG9kem9uZSkgewpAQCAtMTU3NCw3ICsxNjA4
LDcgQEAKICNpZmRlZiBNUlQ2REVCVUcKIAkJaWYgKFZfbXJ0NmRlYnVnICYgREVCVUdfWE1JVCkK
IAkJCWxvZyhMT0dfREVCVUcsICJwaHlpbnRfc2VuZCBvbiBtaWYgJWQgZXJyICVkXG4iLAotCQkJ
ICAgIG1pZnAgLSBtaWY2dGFibGUsIGVycm9yKTsKKwkJCSAgICBtaWZwIC0gVl9taWY2dGFibGUs
IGVycm9yKTsKICNlbmRpZgogCQlzcGx4KHMpOwogCQlyZXR1cm47CkBAIC0xNjEwLDcgKzE2NDQs
NyBAQAogI2lmZGVmIE1SVDZERUJVRwogCQlpZiAoVl9tcnQ2ZGVidWcgJiBERUJVR19YTUlUKQog
CQkJbG9nKExPR19ERUJVRywgInBoeWludF9zZW5kIG9uIG1pZiAlZCBlcnIgJWRcbiIsCi0JCQkg
ICAgbWlmcCAtIG1pZjZ0YWJsZSwgZXJyb3IpOworCQkJICAgIG1pZnAgLSBWX21pZjZ0YWJsZSwg
ZXJyb3IpOwogI2VuZGlmCiAJfSBlbHNlIHsKIAkJLyoKQEAgLTE2NTgsNyArMTY5Miw3IEBACiAJ
CSAgICBpcDZfc3ByaW50ZihpcDZidWZkLCAmaXA2LT5pcDZfZHN0KSk7CiAJfQogI2VuZGlmCi0J
KytwaW02c3RhdC5waW02c19zbmRfcmVnaXN0ZXJzOworCSsrVl9waW02c3RhdC5waW02c19zbmRf
cmVnaXN0ZXJzOwogCiAJLyogTWFrZSBhIGNvcHkgb2YgdGhlIHBhY2tldCB0byBzZW5kIHRvIHRo
ZSB1c2VyIGxldmVsIHByb2Nlc3MgKi8KIAlNR0VUSERSKG1tLCBNX0RPTlRXQUlULCBNVF9IRUFE
RVIpOwpAQCAtMTY5MCwxMCArMTcyNCwxMCBAQAogCWltNi0+aW02X21zZ3R5cGUgICAgICA9IE1S
VDZNU0dfV0hPTEVQS1Q7CiAJaW02LT5pbTZfbWJ6ICAgICAgICAgID0gMDsKIAotCWltNi0+aW02
X21pZiA9IG1pZiAtIG1pZjZ0YWJsZTsKKwlpbTYtPmltNl9taWYgPSBtaWYgLSBWX21pZjZ0YWJs
ZTsKIAogCS8qIGlpZiBpbmZvIGlzIG5vdCBnaXZlbiBmb3IgcmVnLiBlbmNhcC5uICovCi0JbXJ0
NnN0YXQubXJ0NnNfdXBjYWxscysrOworCVZfbXJ0NnN0YXQubXJ0NnNfdXBjYWxscysrOwogCiAJ
aWYgKHNvY2tldF9zZW5kKGlwNl9tcm91dGVyLCBtbSwgJnNpbjYpIDwgMCkgewogI2lmZGVmIE1S
VDZERUJVRwpAQCAtMTcwMSw3ICsxNzM1LDcgQEAKIAkJCWxvZyhMT0dfV0FSTklORywKIAkJCSAg
ICAicmVnaXN0ZXJfc2VuZDogaXA2X21yb3V0ZXIgc29ja2V0IHF1ZXVlIGZ1bGxcbiIpOwogI2Vu
ZGlmCi0JCSsrbXJ0NnN0YXQubXJ0NnNfdXBxX3NvY2tmdWxsOworCQkrK1ZfbXJ0NnN0YXQubXJ0
NnNfdXBxX3NvY2tmdWxsOwogCQlyZXR1cm4gKEVOT0JVRlMpOwogCX0KIAlyZXR1cm4gKDApOwpA
QCAtMTcyNSw3ICsxNzU5LDcgQEAKIAlpbnQgbWlubGVuOwogCWludCBvZmYgPSAqb2ZmcDsKIAot
CSsrcGltNnN0YXQucGltNnNfcmN2X3RvdGFsOworCSsrVl9waW02c3RhdC5waW02c19yY3ZfdG90
YWw7CiAKIAlpcDYgPSBtdG9kKG0sIHN0cnVjdCBpcDZfaGRyICopOwogCXBpbWxlbiA9IG0tPm1f
cGt0aGRyLmxlbiAtICpvZmZwOwpAQCAtMTczNCw3ICsxNzY4LDcgQEAKIAkgKiBWYWxpZGF0ZSBs
ZW5ndGhzCiAJICovCiAJaWYgKHBpbWxlbiA8IFBJTV9NSU5MRU4pIHsKLQkJKytwaW02c3RhdC5w
aW02c19yY3ZfdG9vc2hvcnQ7CisJCSsrVl9waW02c3RhdC5waW02c19yY3ZfdG9vc2hvcnQ7CiAj
aWZkZWYgTVJUNkRFQlVHCiAJCWlmIChWX21ydDZkZWJ1ZyAmIERFQlVHX1BJTSkKIAkJCWxvZyhM
T0dfREVCVUcsInBpbTZfaW5wdXQ6IFBJTSBwYWNrZXQgdG9vIHNob3J0XG4iKTsKQEAgLTE3Njcs
NyArMTgwMSw3IEBACiAjZWxzZQogCUlQNl9FWFRIRFJfR0VUKHBpbSwgc3RydWN0IHBpbSAqLCBt
LCBvZmYsIG1pbmxlbik7CiAJaWYgKHBpbSA9PSBOVUxMKSB7Ci0JCXBpbTZzdGF0LnBpbTZzX3Jj
dl90b29zaG9ydCsrOworCQlWX3BpbTZzdGF0LnBpbTZzX3Jjdl90b29zaG9ydCsrOwogCQlyZXR1
cm4gKElQUFJPVE9fRE9ORSk7CiAJfQogI2VuZGlmCkBAIC0xNzg3LDcgKzE4MjEsNyBAQAogCQkJ
Y2tzdW1sZW4gPSBwaW1sZW47CiAKIAkJaWYgKGluNl9ja3N1bShtLCBJUFBST1RPX1BJTSwgb2Zm
LCBja3N1bWxlbikpIHsKLQkJCSsrcGltNnN0YXQucGltNnNfcmN2X2JhZHN1bTsKKwkJCSsrVl9w
aW02c3RhdC5waW02c19yY3ZfYmFkc3VtOwogI2lmZGVmIE1SVDZERUJVRwogCQkJaWYgKFZfbXJ0
NmRlYnVnICYgREVCVUdfUElNKQogCQkJCWxvZyhMT0dfREVCVUcsCkBAIC0xODAxLDcgKzE4MzUs
NyBAQAogCiAJLyogUElNIHZlcnNpb24gY2hlY2sgKi8KIAlpZiAocGltLT5waW1fdmVyICE9IFBJ
TV9WRVJTSU9OKSB7Ci0JCSsrcGltNnN0YXQucGltNnNfcmN2X2JhZHZlcnNpb247CisJCSsrVl9w
aW02c3RhdC5waW02c19yY3ZfYmFkdmVyc2lvbjsKICNpZmRlZiBNUlQ2REVCVUcKIAkJbG9nKExP
R19FUlIsCiAJCSAgICAicGltNl9pbnB1dDogaW5jb3JyZWN0IHZlcnNpb24gJWQsIGV4cGVjdGlu
ZyAlZFxuIiwKQEAgLTE4MjcsMTQgKzE4NjEsMTQgQEAKIAkJY2hhciBpcDZidWZzW0lORVQ2X0FE
RFJTVFJMRU5dLCBpcDZidWZkW0lORVQ2X0FERFJTVFJMRU5dOwogI2VuZGlmCiAKLQkJKytwaW02
c3RhdC5waW02c19yY3ZfcmVnaXN0ZXJzOworCQkrK1ZfcGltNnN0YXQucGltNnNfcmN2X3JlZ2lz
dGVyczsKIAotCQlpZiAoKHJlZ19taWZfbnVtID49IG51bW1pZnMpIHx8IChyZWdfbWlmX251bSA9
PSAobWlmaV90KSAtMSkpIHsKKwkJaWYgKChWX3JlZ19taWZfbnVtID49IFZfbnVtbWlmcykgfHwg
KFZfcmVnX21pZl9udW0gPT0gKG1pZmlfdCkgLTEpKSB7CiAjaWZkZWYgTVJUNkRFQlVHCiAJCQlp
ZiAoVl9tcnQ2ZGVidWcgJiBERUJVR19QSU0pCiAJCQkJbG9nKExPR19ERUJVRywKIAkJCQkgICAg
InBpbTZfaW5wdXQ6IHJlZ2lzdGVyIG1pZiBub3Qgc2V0OiAlZFxuIiwKLQkJCQkgICAgcmVnX21p
Zl9udW0pOworCQkJCSAgICBWX3JlZ19taWZfbnVtKTsKICNlbmRpZgogCQkJbV9mcmVlbShtKTsK
IAkJCXJldHVybiAoSVBQUk9UT19ET05FKTsKQEAgLTE4NDksOCArMTg4Myw4IEBACiAJCSAqIFZh
bGlkYXRlIGxlbmd0aAogCQkgKi8KIAkJaWYgKHBpbWxlbiA8IFBJTTZfUkVHX01JTkxFTikgewot
CQkJKytwaW02c3RhdC5waW02c19yY3ZfdG9vc2hvcnQ7Ci0JCQkrK3BpbTZzdGF0LnBpbTZzX3Jj
dl9iYWRyZWdpc3RlcnM7CisJCQkrK1ZfcGltNnN0YXQucGltNnNfcmN2X3Rvb3Nob3J0OworCQkJ
KytWX3BpbTZzdGF0LnBpbTZzX3Jjdl9iYWRyZWdpc3RlcnM7CiAjaWZkZWYgTVJUNkRFQlVHCiAJ
CQlsb2coTE9HX0VSUiwKIAkJCSAgICAicGltNl9pbnB1dDogcmVnaXN0ZXIgcGFja2V0IHNpemUg
dG9vICIKQEAgLTE4NzQsNyArMTkwOCw3IEBACiAKIAkJLyogdmVyaWZ5IHRoZSB2ZXJzaW9uIG51
bWJlciBvZiB0aGUgaW5uZXIgcGFja2V0ICovCiAJCWlmICgoZWlwNi0+aXA2X3ZmYyAmIElQVjZf
VkVSU0lPTl9NQVNLKSAhPSBJUFY2X1ZFUlNJT04pIHsKLQkJCSsrcGltNnN0YXQucGltNnNfcmN2
X2JhZHJlZ2lzdGVyczsKKwkJCSsrVl9waW02c3RhdC5waW02c19yY3ZfYmFkcmVnaXN0ZXJzOwog
I2lmZGVmIE1SVDZERUJVRwogCQkJbG9nKExPR19ERUJVRywgInBpbTZfaW5wdXQ6IGludmFsaWQg
SVAgdmVyc2lvbiAoJWQpICIKIAkJCSAgICAib2YgdGhlIGlubmVyIHBhY2tldFxuIiwKQEAgLTE4
ODYsNyArMTkyMCw3IEBACiAKIAkJLyogdmVyaWZ5IHRoZSBpbm5lciBwYWNrZXQgaXMgZGVzdGlu
ZWQgdG8gYSBtY2FzdCBncm91cCAqLwogCQlpZiAoIUlONl9JU19BRERSX01VTFRJQ0FTVCgmZWlw
Ni0+aXA2X2RzdCkpIHsKLQkJCSsrcGltNnN0YXQucGltNnNfcmN2X2JhZHJlZ2lzdGVyczsKKwkJ
CSsrVl9waW02c3RhdC5waW02c19yY3ZfYmFkcmVnaXN0ZXJzOwogI2lmZGVmIE1SVDZERUJVRwog
CQkJaWYgKFZfbXJ0NmRlYnVnICYgREVCVUdfUElNKQogCQkJCWxvZyhMT0dfREVCVUcsCkBAIC0x
OTIzLDExICsxOTU3LDExIEBACiAJCQkgICAgInNyYyAlcywgZHN0ICVzLCBtaWYgJWRcbiIsCiAJ
CQkgICAgaXA2X3NwcmludGYoaXA2YnVmcywgJmVpcDYtPmlwNl9zcmMpLAogCQkJICAgIGlwNl9z
cHJpbnRmKGlwNmJ1ZmQsICZlaXA2LT5pcDZfZHN0KSwKLQkJCSAgICByZWdfbWlmX251bSk7CisJ
CQkgICAgVl9yZWdfbWlmX251bSk7CiAJCX0KICNlbmRpZgogCi0JCXJjID0gaWZfc2ltbG9vcCht
aWY2dGFibGVbcmVnX21pZl9udW1dLm02X2lmcCwgbSwKKwkJcmMgPSBpZl9zaW1sb29wKFZfbWlm
NnRhYmxlW1ZfcmVnX21pZl9udW1dLm02X2lmcCwgbSwKIAkJCQlkc3Quc2luNl9mYW1pbHksIDAp
OwogCiAJCS8qIHByZXBhcmUgdGhlIHJlZ2lzdGVyIGhlYWQgdG8gc2VuZCB0byB0aGUgbXJvdXRp
bmcgZGFlbW9uICovCmRpZmYgLXVyIG5ldGluZXQ2L2lwNl9tcm91dGUuaC5vcmlnIG5ldGluZXQ2
L2lwNl9tcm91dGUuaAotLS0gbmV0aW5ldDYvaXA2X21yb3V0ZS5oLm9yaWcJMjAwNy0xMS0xOSAw
Njo0OToxNS4wMDAwMDAwMDAgLTA4MDAKKysrIG5ldGluZXQ2L2lwNl9tcm91dGUuaAkyMDA4LTA3
LTI5IDEzOjM5OjQzLjAwMDAwMDAwMCAtMDcwMApAQCAtNDAsNiArNDAsNyBAQAogICogTW9kaWZp
ZWQgYnkgQWppdCBUaHlhZ2FyYWphbiwgUEFSQywgQXVndXN0IDE5OTMuCiAgKiBNb2RpZmllZCBi
eSBBaml0IFRoeWFnYXJhamFuLCBQQVJDLCBBdWd1c3QgMTk5NC4KICAqIE1vZGlmaWVkIGJ5IEFo
bWVkIEhlbG15LCBVU0MsIFNlcHRlbWJlciAxOTk2LgorICogTW9kaWZpZWQgYnkgSmVmZiBBaHJl
bmhvbHosIEJvZWluZywgSnVseSAyMDA4LiAodmlydHVhbGl6YXRpb24gc3VwcG9ydCkKICAqCiAg
KiBNUk9VVElORyBSZXZpc2lvbjogMS4yCiAgKi8KQEAgLTI2Niw2ICsyNjcsNyBAQAogZXh0ZXJu
IGludAkoKmlwNl9tcm91dGVyX2dldCkoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2Nrb3B0
ICpzb3B0KTsKIGV4dGVybiBpbnQJKCppcDZfbXJvdXRlcl9kb25lKSh2b2lkKTsKIGV4dGVybiBp
bnQJKCptcnQ2X2lvY3RsKShpbnQsIGNhZGRyX3QpOworCiAjZW5kaWYgLyogX0tFUk5FTCAqLwog
CiAjZW5kaWYgLyogIV9ORVRJTkVUNl9JUDZfTVJPVVRFX0hfICovCmRpZmYgLXVyIG5ldGluZXQ2
L3ZpbmV0Ni5oLm9yaWcgbmV0aW5ldDYvdmluZXQ2LmgKLS0tIG5ldGluZXQ2L3ZpbmV0Ni5oLm9y
aWcJMjAwOC0wNy0yMiAxMjozOTo0MS4wMDAwMDAwMDAgLTA3MDAKKysrIG5ldGluZXQ2L3ZpbmV0
Ni5oCTIwMDgtMDctMjkgMTI6MDI6NTMuMDAwMDAwMDAwIC0wNzAwCkBAIC00Myw2ICs0Myw4IEBA
CiAjaW5jbHVkZSA8bmV0aW5ldDYvc2NvcGU2X3Zhci5oPgogI2luY2x1ZGUgPG5ldGluZXQ2L2lu
Nl9pZmF0dGFjaC5oPgogI2luY2x1ZGUgPG5ldGluZXQ2L25kNi5oPgorI2luY2x1ZGUgPG5ldGlu
ZXQ2L2lwNl9tcm91dGUuaD4KKyNpbmNsdWRlIDxuZXRpbmV0Ni9waW02X3Zhci5oPiAvKiBzdHJ1
Y3QgcGltNnN0YXQgKi8KIAogI2RlZmluZSBJTklUX1ZORVRfSU5FVDYodm5ldCkgXAogCUlOSVRf
RlJPTV9WTkVUKHZuZXQsIFZORVRfTU9EX0lORVQ2LCBcCkBAIC0xNDgsMTQgKzE1MCwyNCBAQAog
CXVfaW50MzJfdAkJCV9pcDZfdGVtcF9wcmVmZXJyZWRfbGlmZXRpbWU7CiAJdV9pbnQzMl90CQkJ
X2lwNl90ZW1wX3ZhbGlkX2xpZmV0aW1lOwogCi0JaW50CQkJCV9pcDZfbXJvdXRlcl92ZXI7Ci0J
aW50CQkJCV9waW02OwotCXVfaW50CQkJCV9tcnQ2ZGVidWc7Ci0KIAlpbnQJCQkJX2lwNl90ZW1w
X3JlZ2VuX2FkdmFuY2U7CiAJaW50CQkJCV9pcDZfdXNlX2RlZnpvbmU7CiAKIAlzdHJ1Y3QgaXA2
X3BrdG9wdHMJCV9pcDZfb3B0czsKKworCS8qIGZyb20gaXA2X21yb3V0ZS5jICovCisJaW50CQkJ
CV9pcDZfbXJvdXRlcl92ZXI7IC8qID0gMDsgKi8KKwlzdHJ1Y3QgbXJ0NnN0YXQJCQlfbXJ0NnN0
YXQ7CisJc3RydWN0IG1mNmMgKgkJCV9tZjZjdGFibGVbTUY2Q1RCTFNJWl07CisJdV9jaGFyCQkJ
CV9uNmV4cGlyZVtNRjZDVEJMU0laXTsKKwlzdHJ1Y3QgbWlmNiAJCQlfbWlmNnRhYmxlW01BWE1J
RlNdOworCXVfaW50CQkJCV9tcnQ2ZGVidWc7CisJc3RydWN0IGlmbmV0ICoJCQlfbXVsdGljYXN0
X3JlZ2lzdGVyX2lmNjsKKwltaWZpX3QgCQkJCV9udW1taWZzOyAvKiA9IDA7ICovCisJbWlmaV90
IAkJCQlfcmVnX21pZl9udW07IC8qID0gKG1pZmlfdCktMTsgKi8KKwlzdHJ1Y3QgcGltNnN0YXQJ
CQlfcGltNnN0YXQ7CisJaW50IAkJCQlfcGltNjsKKwl1X2xvbmcJCQkJX3VwY2FsbF9kYXRhWzUx
XTsKIH07CiAjZW5kaWYKIApAQCAtMjU4LDEzICsyNzAsMjMgQEAKICNkZWZpbmUgVl9pcDZfdGVt
cF9wcmVmZXJyZWRfbGlmZXRpbWUJVk5FVF9JTkVUNihpcDZfdGVtcF9wcmVmZXJyZWRfbGlmZXRp
bWUpCiAjZGVmaW5lIFZfaXA2X3RlbXBfdmFsaWRfbGlmZXRpbWUJVk5FVF9JTkVUNihpcDZfdGVt
cF92YWxpZF9saWZldGltZSkKIAotI2RlZmluZSBWX2lwNl9tcm91dGVyX3ZlcgkJVk5FVF9JTkVU
NihpcDZfbXJvdXRlcl92ZXIpCi0jZGVmaW5lIFZfcGltNgkJCQlWTkVUX0lORVQ2KHBpbTYpCi0j
ZGVmaW5lIFZfbXJ0NmRlYnVnCQkJVk5FVF9JTkVUNihtcnQ2ZGVidWcpCiAjZGVmaW5lIFZfaXA2
X3RlbXBfcmVnZW5fYWR2YW5jZQlWTkVUX0lORVQ2KGlwNl90ZW1wX3JlZ2VuX2FkdmFuY2UpCiAK
ICNkZWZpbmUgVl9pcDZfdXNlX2RlZnpvbmUJCVZORVRfSU5FVDYoaXA2X3VzZV9kZWZ6b25lKQog
CiAjZGVmaW5lIFZfaXA2X29wdHMJCQlWTkVUX0lORVQ2KGlwNl9vcHRzKQogCisjZGVmaW5lIFZf
aXA2X21yb3V0ZXJfdmVyCQlWTkVUX0lORVQ2KGlwNl9tcm91dGVyX3ZlcikKKyNkZWZpbmUgVl9t
cnQ2c3RhdAkJCVZORVRfSU5FVDYobXJ0NnN0YXQpCisjZGVmaW5lIFZfbWY2Y3RhYmxlCQkJVk5F
VF9JTkVUNihtZjZjdGFibGUpCisjZGVmaW5lIFZfbjZleHBpcmUJCQlWTkVUX0lORVQ2KG42ZXhw
aXJlKQorI2RlZmluZSBWX21pZjZ0YWJsZQkJCVZORVRfSU5FVDYobWlmNnRhYmxlKQorI2RlZmlu
ZSBWX21ydDZkZWJ1ZwkJCVZORVRfSU5FVDYobXJ0NmRlYnVnKQorI2RlZmluZSBWX211bHRpY2Fz
dF9yZWdpc3Rlcl9pZjYJVk5FVF9JTkVUNihtdWx0aWNhc3RfcmVnaXN0ZXJfaWY2KQorI2RlZmlu
ZSBWX251bW1pZnMJCQlWTkVUX0lORVQ2KG51bW1pZnMpCisjZGVmaW5lIFZfcmVnX21pZl9udW0J
CQlWTkVUX0lORVQ2KHJlZ19taWZfbnVtKQorI2RlZmluZSBWX3BpbTZzdGF0CQkJVk5FVF9JTkVU
NihwaW02c3RhdCkKKyNkZWZpbmUgVl9waW02CQkJCVZORVRfSU5FVDYocGltNikKKyNkZWZpbmUg
Vl91cGNhbGxfZGF0YQkJCVZORVRfSU5FVDYodXBjYWxsX2RhdGEpCisKICNlbmRpZiAvKiAhX05F
VElORVQ2X1ZJTkVUNl9IXyAqLwpkaWZmIC11ciBuZXRpbmV0L2lwX2lucHV0LmMub3JpZyBuZXRp
bmV0L2lwX2lucHV0LmMKZGlmZiAtdXIgbmV0aW5ldC9pcF9tcm91dGUuYy5vcmlnIG5ldGluZXQv
aXBfbXJvdXRlLmMKLS0tIG5ldGluZXQvaXBfbXJvdXRlLmMub3JpZwkyMDA4LTA3LTIxIDE1OjIy
OjI1LjAwMDAwMDAwMCAtMDcwMAorKysgbmV0aW5ldC9pcF9tcm91dGUuYwkyMDA4LTA3LTI5IDE0
OjUyOjU2LjAwMDAwMDAwMCAtMDcwMApAQCAtNDcsNiArNDcsNyBAQAogICogTW9kaWZpZWQgYnkg
UGF2bGluIFJhZG9zbGF2b3YsIFVTQy9JU0ksIE1heSAxOTk4LCBBdWd1c3QgMTk5OSwgT2N0b2Jl
ciAyMDAwCiAgKiBNb2RpZmllZCBieSBIaXRvc2hpIEFzYWVkYSwgV0lERSwgQXVndXN0IDIwMDAK
ICAqIE1vZGlmaWVkIGJ5IFBhdmxpbiBSYWRvc2xhdm92LCBJQ1NJLCBPY3RvYmVyIDIwMDIKKyAq
IE1vZGlmaWVkIGJ5IEplZmYgQWhyZW5ob2x6LCBCb2VpbmcsIEp1bHkgMjAwOC4gKHZpcnR1YWxp
emF0aW9uIHN1cHBvcnQpCiAgKgogICogTVJPVVRJTkcgUmV2aXNpb246IDMuNQogICogYW5kIFBJ
TS1TTXYyIGFuZCBQSU0tRE0gc3VwcG9ydCwgYWR2YW5jZWQgQVBJIHN1cHBvcnQsCkBAIC0xMTIs
MTYgKzExMywyMCBAQAogICogQ29udHJvbCBkZWJ1Z2dpbmcgY29kZSBmb3IgcnN2cCBhbmQgbXVs
dGljYXN0IHJvdXRpbmcgY29kZS4KICAqIENhbiBvbmx5IHNldCB0aGVtIHdpdGggdGhlIGRlYnVn
Z2VyLgogICovCisjaWZuZGVmIFZJTUFHRQogc3RhdGljIHVfaW50ICAgIHJzdnBkZWJ1ZzsJCS8q
IG5vbi16ZXJvIGVuYWJsZXMgZGVidWdnaW5nCSovCiAKIHN0YXRpYyB1X2ludAltcnRkZWJ1ZzsJ
CS8qIGFueSBzZXQgb2YgdGhlIGZsYWdzIGJlbG93CSovCisjZW5kaWYgLyogIVZJTUFHRSAqLwog
I2RlZmluZQkJREVCVUdfTUZDCTB4MDIKICNkZWZpbmUJCURFQlVHX0ZPUldBUkQJMHgwNAogI2Rl
ZmluZQkJREVCVUdfRVhQSVJFCTB4MDgKICNkZWZpbmUJCURFQlVHX1hNSVQJMHgxMAogI2RlZmlu
ZQkJREVCVUdfUElNCTB4MjAKIAorI2lmbmRlZiBWSU1BR0UKICNkZWZpbmUJCVZJRklfSU5WQUxJ
RAkoKHZpZmlfdCkgLTEpCisjZW5kaWYgLyogIVZJTUFHRSAqLwogCiAjZGVmaW5lIE1fSEFTQ0wo
bSkJKChtKS0+bV9mbGFncyAmIE1fRVhUKQogCkBAIC0xNDAsMTUgKzE0NSwxOSBAQAogICoKICAq
LwogCisjaWZuZGVmIFZJTUFHRQogc3RhdGljIHN0cnVjdCBtcnRzdGF0CW1ydHN0YXQ7Ci1TWVND
VExfU1RSVUNUKF9uZXRfaW5ldF9pcCwgT0lEX0FVVE8sIG1ydHN0YXQsIENUTEZMQUdfUlcsCi0g
ICAgJm1ydHN0YXQsIG1ydHN0YXQsCisjZW5kaWYgLyogIVZJTUFHRSAqLworU1lTQ1RMX1ZfU1RS
VUNUKFZfTkVULCB2bmV0X2luZXQsIF9uZXRfaW5ldF9pcCwgT0lEX0FVVE8sIG1ydHN0YXQsCisg
ICAgQ1RMRkxBR19SVywgbXJ0c3RhdCwgbXJ0c3RhdCwKICAgICAiTXVsdGljYXN0IFJvdXRpbmcg
U3RhdGlzdGljcyAoc3RydWN0IG1ydHN0YXQsIG5ldGluZXQvaXBfbXJvdXRlLmgpIik7Ci0KKyNp
Zm5kZWYgVklNQUdFCiBzdGF0aWMgc3RydWN0IG1mYwkqbWZjdGFibGVbTUZDVEJMU0laXTsKLVNZ
U0NUTF9PUEFRVUUoX25ldF9pbmV0X2lwLCBPSURfQVVUTywgbWZjdGFibGUsIENUTEZMQUdfUkQs
Ci0gICAgJm1mY3RhYmxlLCBzaXplb2YobWZjdGFibGUpLCAiUywqbWZjW01GQ1RCTFNJWl0iLAor
U1lTQ1RMX1ZfT0lEKFZfTkVULCB2bmV0X2luZXQsIF9uZXRfaW5ldF9pcCwgQ1RMVFlQRV9PUEFR
VUV8T0lEX0FVVE8sCisgICAgbWZjdGFibGUsIENUTEZMQUdfUkQsIG1mY3RhYmxlLCBzaXplb2Yo
bWZjdGFibGUpLCBzeXNjdGxfaGFuZGxlX29wYXF1ZSwKKyAgICAiUywqbWZjW01GQ1RCTFNJWl0i
LAogICAgICJNdWx0aWNhc3QgRm9yd2FyZGluZyBUYWJsZSAoc3RydWN0ICptZmNbTUZDVEJMU0la
XSwgbmV0aW5ldC9pcF9tcm91dGUuaCkiKTsKKyNlbmRpZiAvKiAhVklNQUdFICovCiAKIHN0YXRp
YyBzdHJ1Y3QgbXR4IG1yb3V0ZXJfbXR4OwogI2RlZmluZQlNUk9VVEVSX0xPQ0soKQkJbXR4X2xv
Y2soJm1yb3V0ZXJfbXR4KQpAQCAtMTY1LDEwICsxNzQsMTMgQEAKICNkZWZpbmUJTUZDX0xPQ0tf
SU5JVCgpCW10eF9pbml0KCZtZmNfbXR4LCAibXJvdXRlIG1mYyB0YWJsZSIsIE5VTEwsIE1UWF9E
RUYpCiAjZGVmaW5lCU1GQ19MT0NLX0RFU1RST1koKQltdHhfZGVzdHJveSgmbWZjX210eCkKIAor
I2lmbmRlZiBWSU1BR0UKIHN0YXRpYyBzdHJ1Y3QgdmlmCXZpZnRhYmxlW01BWFZJRlNdOwotU1lT
Q1RMX09QQVFVRShfbmV0X2luZXRfaXAsIE9JRF9BVVRPLCB2aWZ0YWJsZSwgQ1RMRkxBR19SRCwK
LSAgICAmdmlmdGFibGUsIHNpemVvZih2aWZ0YWJsZSksICJTLHZpZltNQVhWSUZTXSIsCitTWVND
VExfVl9PSUQoVl9ORVQsIHZuZXRfaW5ldCwgX25ldF9pbmV0X2lwLCBDVExUWVBFX09QQVFVRXxP
SURfQVVUTywgdmlmdGFibGUsCisgICAgQ1RMRkxBR19SRCwgdmlmdGFibGUsIHNpemVvZih2aWZ0
YWJsZSksIHN5c2N0bF9oYW5kbGVfb3BhcXVlLCAKKyAgICAiUyx2aWZbTUFYVklGU10iLAogICAg
ICJNdWx0aWNhc3QgVmlydHVhbCBJbnRlcmZhY2VzIChzdHJ1Y3QgdmlmW01BWFZJRlNdLCBuZXRp
bmV0L2lwX21yb3V0ZS5oKSIpOworI2VuZGlmIC8qICFWSU1BR0UgKi8KIAogc3RhdGljIHN0cnVj
dCBtdHggdmlmX210eDsKICNkZWZpbmUJVklGX0xPQ0soKQltdHhfbG9jaygmdmlmX210eCkKQEAg
LTE3Nyw5ICsxODksMTEgQEAKICNkZWZpbmUJVklGX0xPQ0tfSU5JVCgpCW10eF9pbml0KCZ2aWZf
bXR4LCAibXJvdXRlIHZpZiB0YWJsZSIsIE5VTEwsIE1UWF9ERUYpCiAjZGVmaW5lCVZJRl9MT0NL
X0RFU1RST1koKQltdHhfZGVzdHJveSgmdmlmX210eCkKIAorI2lmbmRlZiBWSU1BR0UKIHN0YXRp
YyB1X2NoYXIJCW5leHBpcmVbTUZDVEJMU0laXTsKIAogc3RhdGljIGV2ZW50aGFuZGxlcl90YWcg
aWZfZGV0YWNoX2V2ZW50X3RhZyA9IE5VTEw7CisjZW5kaWYgLyogIVZJTUFHRSAqLwogCiBzdGF0
aWMgc3RydWN0IGNhbGxvdXQgZXhwaXJlX3VwY2FsbHNfY2g7CiAKQEAgLTE5Niw4ICsyMTAsMTAg
QEAKICAqIFBlbmRpbmcgdGltZW91dHMgYXJlIHN0b3JlZCBpbiBhIGhhc2ggdGFibGUsIHRoZSBr
ZXkgYmVpbmcgdGhlCiAgKiBleHBpcmF0aW9uIHRpbWUuIFBlcmlvZGljYWxseSwgdGhlIGVudHJp
ZXMgYXJlIGFuYWx5c2VkIGFuZCBwcm9jZXNzZWQuCiAgKi8KKyNpZm5kZWYgVklNQUdFCiAjZGVm
aW5lIEJXX01FVEVSX0JVQ0tFVFMJMTAyNAogc3RhdGljIHN0cnVjdCBid19tZXRlciAqYndfbWV0
ZXJfdGltZXJzW0JXX01FVEVSX0JVQ0tFVFNdOworI2VuZGlmIC8qICFWSU1BR0UgKi8KIHN0YXRp
YyBzdHJ1Y3QgY2FsbG91dCBid19tZXRlcl9jaDsKICNkZWZpbmUgQldfTUVURVJfUEVSSU9EICho
eikJCS8qIHBlcmlvZGljYWwgaGFuZGxpbmcgb2YgYncgbWV0ZXJzICovCiAKQEAgLTIwNSwxNiAr
MjIxLDIwIEBACiAgKiBQZW5kaW5nIHVwY2FsbHMgYXJlIHN0b3JlZCBpbiBhIHZlY3RvciB3aGlj
aCBpcyBmbHVzaGVkIHdoZW4KICAqIGZ1bGwsIG9yIHBlcmlvZGljYWxseQogICovCisjaWZuZGVm
IFZJTUFHRQogc3RhdGljIHN0cnVjdCBid191cGNhbGwJYndfdXBjYWxsc1tCV19VUENBTExTX01B
WF07CiBzdGF0aWMgdV9pbnQJYndfdXBjYWxsc19uOyAvKiAjIG9mIHBlbmRpbmcgdXBjYWxscyAq
LworI2VuZGlmIC8qICFWSU1BR0UgKi8KIHN0YXRpYyBzdHJ1Y3QgY2FsbG91dCBid191cGNhbGxz
X2NoOwogI2RlZmluZSBCV19VUENBTExTX1BFUklPRCAoaHopCQkvKiBwZXJpb2RpY2FsIGZsdXNo
IG9mIGJ3IHVwY2FsbHMgKi8KIAorI2lmbmRlZiBWSU1BR0UKIHN0YXRpYyBzdHJ1Y3QgcGltc3Rh
dCBwaW1zdGF0OworI2VuZGlmIC8qICFWSU1BR0UgKi8KIAogU1lTQ1RMX05PREUoX25ldF9pbmV0
LCBJUFBST1RPX1BJTSwgcGltLCBDVExGTEFHX1JXLCAwLCAiUElNIik7Ci1TWVNDVExfU1RSVUNU
KF9uZXRfaW5ldF9waW0sIFBJTUNUTF9TVEFUUywgc3RhdHMsIENUTEZMQUdfUkQsCi0gICAgJnBp
bXN0YXQsIHBpbXN0YXQsCitTWVNDVExfVl9TVFJVQ1QoVl9ORVQsIHZuZXRfaW5ldCwgX25ldF9p
bmV0X3BpbSwgUElNQ1RMX1NUQVRTLCBzdGF0cywKKyAgICBDVExGTEFHX1JELCBwaW1zdGF0LCBw
aW1zdGF0LAogICAgICJQSU0gU3RhdGlzdGljcyAoc3RydWN0IHBpbXN0YXQsIG5ldGluZXQvcGlt
X3Zhci5oKSIpOwogCiBzdGF0aWMgdV9sb25nCXBpbV9zcXVlbGNoX3dob2xlcGt0ID0gMDsKQEAg
LTIyMiw2ICsyNDIsMTEgQEAKICAgICAmcGltX3NxdWVsY2hfd2hvbGVwa3QsIDAsCiAgICAgIkRp
c2FibGUgSUdNUF9XSE9MRVBLVCBub3RpZmljYXRpb25zIGlmIHJlbmRlenZvdXMgcG9pbnQgaXMg
dW5zcGVjaWZpZWQiKTsKIAorI2lmZGVmIFZJTUFHRQorc3RhdGljIHZvaWQgaXBfbXJvdXRlcl9y
ZXNldCh2b2lkKTsKK3N0YXRpYyB2b2lkIGlwX21yb3V0ZXJfZGVzdHJveSh2b2lkKTsKKyNlbmRp
ZiAvKiBWSU1BR0UgKi8KKwogZXh0ZXJuICBzdHJ1Y3QgZG9tYWluIGluZXRkb21haW47CiBzdHJ1
Y3QgcHJvdG9zdyBpbl9waW1fcHJvdG9zdyA9IHsKIAkucHJfdHlwZSA9CQlTT0NLX1JBVywKQEAg
LTIzMSw2ICsyNTYsMTAgQEAKIAkucHJfaW5wdXQgPQkJcGltX2lucHV0LAogCS5wcl9vdXRwdXQg
PQkJKHByX291dHB1dF90KilyaXBfb3V0cHV0LAogCS5wcl9jdGxvdXRwdXQgPQkJcmlwX2N0bG91
dHB1dCwKKyNpZmRlZiBWSU1BR0UKKwkucHJfaW5pdCA9CQlpcF9tcm91dGVyX3Jlc2V0LAorCS5w
cl9kZXN0cm95ID0JCWlwX21yb3V0ZXJfZGVzdHJveSwKKyNlbmRpZiAvKiBWSU1BR0UgKi8KIAku
cHJfdXNycmVxcyA9CQkmcmlwX3VzcnJlcXMKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IGVuY2Fw
dGFiICpwaW1fZW5jYXBfY29va2llOwpAQCAtMjkxLDEzICszMjAsMTcgQEAKICAgICAwCQkJCS8q
IGZsYWdzICovCiB9OwogCisjaWZuZGVmIFZJTUFHRQogc3RhdGljIHN0cnVjdCBpZm5ldCBtdWx0
aWNhc3RfcmVnaXN0ZXJfaWY7CiBzdGF0aWMgdmlmaV90IHJlZ192aWZfbnVtID0gVklGSV9JTlZB
TElEOworI2VuZGlmIC8qICFWSU1BR0UgKi8KIAogLyoKICAqIFByaXZhdGUgdmFyaWFibGVzLgog
ICovCisjaWZuZGVmIFZJTUFHRQogc3RhdGljIHZpZmlfdAkgICBudW12aWZzOworI2VuZGlmIC8q
ICFWSU1BR0UgKi8KIAogc3RhdGljIHVfbG9uZwlYX2lwX21jYXN0X3NyYyhpbnQgdmlmaSk7CiBz
dGF0aWMgaW50CVhfaXBfbWZvcndhcmQoc3RydWN0IGlwICppcCwgc3RydWN0IGlmbmV0ICppZnAs
CkBAIC0zNTIsNyArMzg1LDkgQEAKIC8qCiAgKiB3aGV0aGVyIG9yIG5vdCBzcGVjaWFsIFBJTSBh
c3NlcnQgcHJvY2Vzc2luZyBpcyBlbmFibGVkLgogICovCisjaWZuZGVmIFZJTUFHRQogc3RhdGlj
IGludCBwaW1fYXNzZXJ0OworI2VuZGlmIC8qICFWSU1BR0UgKi8KIC8qCiAgKiBSYXRlIGxpbWl0
IGZvciBhc3NlcnQgbm90aWZpY2F0aW9uIG1lc3NhZ2VzLCBpbiB1c2VjCiAgKi8KQEAgLTM2Nyw3
ICs0MDIsOSBAQAogCQkJCQkgTVJUX01GQ19GTEFHU19CT1JERVJfVklGIHwKIAkJCQkJIE1SVF9N
RkNfUlAgfAogCQkJCQkgTVJUX01GQ19CV19VUENBTEwpOworI2lmbmRlZiBWSU1BR0UKIHN0YXRp
YyB1aW50MzJfdCBtcnRfYXBpX2NvbmZpZyA9IDA7CisjZW5kaWYgLyogIVZJTUFHRSAqLwogCiAv
KgogICogSGFzaCBmdW5jdGlvbiBmb3IgYSBzb3VyY2UsIGdyb3VwIGVudHJ5CkBAIC0zODMsMTEg
KzQyMCwxMiBAQAogc3RhdGljIHN0cnVjdCBtZmMgKgogbWZjX2ZpbmQoaW5fYWRkcl90IG8sIGlu
X2FkZHJfdCBnKQogeworICAgIElOSVRfVk5FVF9JTkVUKGN1cnZuZXQpOwogICAgIHN0cnVjdCBt
ZmMgKnJ0OwogCiAgICAgTUZDX0xPQ0tfQVNTRVJUKCk7CiAKLSAgICBmb3IgKHJ0ID0gbWZjdGFi
bGVbTUZDSEFTSChvLGcpXTsgcnQ7IHJ0ID0gcnQtPm1mY19uZXh0KQorICAgIGZvciAocnQgPSBW
X21mY3RhYmxlW01GQ0hBU0gobyxnKV07IHJ0OyBydCA9IHJ0LT5tZmNfbmV4dCkKIAlpZiAoKHJ0
LT5tZmNfb3JpZ2luLnNfYWRkciA9PSBvKSAmJgogCQkocnQtPm1mY19tY2FzdGdycC5zX2FkZHIg
PT0gZykgJiYgKHJ0LT5tZmNfc3RhbGwgPT0gTlVMTCkpCiAJICAgIGJyZWFrOwpAQCAtNDI0LDcg
KzQ2Miw3IEBACiBzdGF0aWMgaW50CiBYX2lwX21yb3V0ZXJfc2V0KHN0cnVjdCBzb2NrZXQgKnNv
LCBzdHJ1Y3Qgc29ja29wdCAqc29wdCkKIHsKLSAgICBJTklUX1ZORVRfSU5FVChjdXJ2bmV0KTsK
KyAgICBJTklUX1ZORVRfSU5FVChzby0+c29fdm5ldCk7CiAgICAgaW50CWVycm9yLCBvcHR2YWw7
CiAgICAgdmlmaV90CXZpZmk7CiAgICAgc3RydWN0CXZpZmN0bCB2aWZjOwpAQCAtNDY4LDcgKzUw
Niw3IEBACiAJICogc2VsZWN0IGRhdGEgc2l6ZSBkZXBlbmRpbmcgb24gQVBJIHZlcnNpb24uCiAJ
ICovCiAJaWYgKHNvcHQtPnNvcHRfbmFtZSA9PSBNUlRfQUREX01GQyAmJgotCQltcnRfYXBpX2Nv
bmZpZyAmIE1SVF9BUElfRkxBR1NfQUxMKSB7CisJCVZfbXJ0X2FwaV9jb25maWcgJiBNUlRfQVBJ
X0ZMQUdTX0FMTCkgewogCSAgICBlcnJvciA9IHNvb3B0Y29weWluKHNvcHQsICZtZmMsIHNpemVv
ZihzdHJ1Y3QgbWZjY3RsMiksCiAJCQkJc2l6ZW9mKHN0cnVjdCBtZmNjdGwyKSk7CiAJfSBlbHNl
IHsKQEAgLTUyNSw2ICs1NjMsNyBAQAogc3RhdGljIGludAogWF9pcF9tcm91dGVyX2dldChzdHJ1
Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2tvcHQgKnNvcHQpCiB7CisgICAgSU5JVF9WTkVUX0lO
RVQoc28tPnNvX3ZuZXQpOwogICAgIGludCBlcnJvcjsKICAgICBzdGF0aWMgaW50IHZlcnNpb24g
PSAweDAzMDU7IC8qICEhISB3aHkgaXMgdGhpcyBoZXJlPyBYWFggKi8KIApAQCAtNTM0LDcgKzU3
Myw3IEBACiAJYnJlYWs7CiAKICAgICBjYXNlIE1SVF9BU1NFUlQ6Ci0JZXJyb3IgPSBzb29wdGNv
cHlvdXQoc29wdCwgJnBpbV9hc3NlcnQsIHNpemVvZiBwaW1fYXNzZXJ0KTsKKwllcnJvciA9IHNv
b3B0Y29weW91dChzb3B0LCAmVl9waW1fYXNzZXJ0LCBzaXplb2YgVl9waW1fYXNzZXJ0KTsKIAli
cmVhazsKIAogICAgIGNhc2UgTVJUX0FQSV9TVVBQT1JUOgpAQCAtNTQyLDcgKzU4MSw3IEBACiAJ
YnJlYWs7CiAKICAgICBjYXNlIE1SVF9BUElfQ09ORklHOgotCWVycm9yID0gc29vcHRjb3B5b3V0
KHNvcHQsICZtcnRfYXBpX2NvbmZpZywgc2l6ZW9mIG1ydF9hcGlfY29uZmlnKTsKKwllcnJvciA9
IHNvb3B0Y29weW91dChzb3B0LCAmVl9tcnRfYXBpX2NvbmZpZywgc2l6ZW9mIFZfbXJ0X2FwaV9j
b25maWcpOwogCWJyZWFrOwogCiAgICAgZGVmYXVsdDoKQEAgLTYxMiwxOCArNjUxLDE5IEBACiBz
dGF0aWMgaW50CiBnZXRfdmlmX2NudChzdHJ1Y3Qgc2lvY192aWZfcmVxICpyZXEpCiB7CisgICAg
SU5JVF9WTkVUX0lORVQoY3Vydm5ldCk7CiAgICAgdmlmaV90IHZpZmkgPSByZXEtPnZpZmk7CiAK
ICAgICBWSUZfTE9DSygpOwotICAgIGlmICh2aWZpID49IG51bXZpZnMpIHsKKyAgICBpZiAodmlm
aSA+PSBWX251bXZpZnMpIHsKIAlWSUZfVU5MT0NLKCk7CiAJcmV0dXJuIEVJTlZBTDsKICAgICB9
CiAKLSAgICByZXEtPmljb3VudCA9IHZpZnRhYmxlW3ZpZmldLnZfcGt0X2luOwotICAgIHJlcS0+
b2NvdW50ID0gdmlmdGFibGVbdmlmaV0udl9wa3Rfb3V0OwotICAgIHJlcS0+aWJ5dGVzID0gdmlm
dGFibGVbdmlmaV0udl9ieXRlc19pbjsKLSAgICByZXEtPm9ieXRlcyA9IHZpZnRhYmxlW3ZpZmld
LnZfYnl0ZXNfb3V0OworICAgIHJlcS0+aWNvdW50ID0gVl92aWZ0YWJsZVt2aWZpXS52X3BrdF9p
bjsKKyAgICByZXEtPm9jb3VudCA9IFZfdmlmdGFibGVbdmlmaV0udl9wa3Rfb3V0OworICAgIHJl
cS0+aWJ5dGVzID0gVl92aWZ0YWJsZVt2aWZpXS52X2J5dGVzX2luOworICAgIHJlcS0+b2J5dGVz
ID0gVl92aWZ0YWJsZVt2aWZpXS52X2J5dGVzX291dDsKICAgICBWSUZfVU5MT0NLKCk7CiAKICAg
ICByZXR1cm4gMDsKQEAgLTYzMiwxNiArNjcyLDI1IEBACiBzdGF0aWMgdm9pZAogaXBfbXJvdXRl
cl9yZXNldCh2b2lkKQogewotICAgIGJ6ZXJvKChjYWRkcl90KW1mY3RhYmxlLCBzaXplb2YobWZj
dGFibGUpKTsKLSAgICBiemVybygoY2FkZHJfdCluZXhwaXJlLCBzaXplb2YobmV4cGlyZSkpOwot
Ci0gICAgcGltX2Fzc2VydCA9IDA7Ci0gICAgbXJ0X2FwaV9jb25maWcgPSAwOwotCisgICAgSU5J
VF9WTkVUX0lORVQoY3Vydm5ldCk7CisgICAgYnplcm8oKGNhZGRyX3QpVl9tZmN0YWJsZSwgc2l6
ZW9mKFZfbWZjdGFibGUpKTsKKyAgICBiemVybygoY2FkZHJfdClWX25leHBpcmUsIHNpemVvZihW
X25leHBpcmUpKTsKKyAgICBpZiAoVl9yZWdfdmlmX251bSAhPSBWSUZJX0lOVkFMSUQpCisJSUZf
QUREUl9MT0NLX0RFU1RST1koJlZfbXVsdGljYXN0X3JlZ2lzdGVyX2lmKTsKKyAgICBiemVybygm
Vl9tdWx0aWNhc3RfcmVnaXN0ZXJfaWYsIHNpemVvZihWX211bHRpY2FzdF9yZWdpc3Rlcl9pZikp
OworCisgICAgVl9yZWdfdmlmX251bSA9IFZJRklfSU5WQUxJRDsKKyAgICBWX3BpbV9hc3NlcnQg
PSAwOworICAgIFZfbXJ0X2FwaV9jb25maWcgPSAwOworCisgICAgVl9id191cGNhbGxzX24gPSAw
OworICAgIGJ6ZXJvKChjYWRkcl90KVZfYndfbWV0ZXJfdGltZXJzLCBzaXplb2YoVl9id19tZXRl
cl90aW1lcnMpKTsKKyNpZmRlZiBWSU1BR0UKKyAgICBpZiAoIUlTX0RFRkFVTFRfVk5FVChjdXJ2
bmV0KSkgeworCXJldHVybjsKKyAgICB9CisjZW5kaWYgLyogVklNQUdFICovCiAgICAgY2FsbG91
dF9pbml0KCZleHBpcmVfdXBjYWxsc19jaCwgQ0FMTE9VVF9NUFNBRkUpOwotCi0gICAgYndfdXBj
YWxsc19uID0gMDsKLSAgICBiemVybygoY2FkZHJfdClid19tZXRlcl90aW1lcnMsIHNpemVvZihi
d19tZXRlcl90aW1lcnMpKTsKICAgICBjYWxsb3V0X2luaXQoJmJ3X3VwY2FsbHNfY2gsIENBTExP
VVRfTVBTQUZFKTsKICAgICBjYWxsb3V0X2luaXQoJmJ3X21ldGVyX2NoLCBDQUxMT1VUX01QU0FG
RSk7CiB9CkBAIC02NzYsMTIgKzcyNSwxMiBAQAogICAgICAqLwogICAgIFZJRl9MT0NLKCk7CiAg
ICAgTUZDX0xPQ0soKTsKLSAgICBmb3IgKHZpZmkgPSAwOyB2aWZpIDwgbnVtdmlmczsgdmlmaSsr
KSB7Ci0JaWYgKHZpZnRhYmxlW3ZpZmldLnZfaWZwICE9IGlmcCkKKyAgICBmb3IgKHZpZmkgPSAw
OyB2aWZpIDwgVl9udW12aWZzOyB2aWZpKyspIHsKKwlpZiAoVl92aWZ0YWJsZVt2aWZpXS52X2lm
cCAhPSBpZnApCiAJCWNvbnRpbnVlOwogCWZvciAoaSA9IDA7IGkgPCBNRkNUQkxTSVo7IGkrKykg
ewotCSAgICBwcG1mYyA9ICZtZmN0YWJsZVtpXTsKLQkgICAgZm9yIChtZmMgPSBtZmN0YWJsZVtp
XTsgbWZjICE9IE5VTEw7ICkgeworCSAgICBwcG1mYyA9ICZWX21mY3RhYmxlW2ldOworCSAgICBm
b3IgKG1mYyA9IFZfbWZjdGFibGVbaV07IG1mYyAhPSBOVUxMOyApIHsKIAkJbm1mYyA9IG1mYy0+
bWZjX25leHQ7CiAJCWlmIChtZmMtPm1mY19wYXJlbnQgPT0gdmlmaSkgewogCQkgICAgZm9yIChw
cSA9IG1mYy0+bWZjX3N0YWxsOyBwcSAhPSBOVUxMOyApIHsKQEAgLTcxMyw5ICs3NjIsOSBAQAog
c3RhdGljIGludAogaXBfbXJvdXRlcl9pbml0KHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgdmVyc2lv
bikKIHsKLSAgICBJTklUX1ZORVRfSU5FVChjdXJ2bmV0KTsKKyAgICBJTklUX1ZORVRfSU5FVChz
by0+c29fdm5ldCk7CiAKLSAgICBpZiAobXJ0ZGVidWcpCisgICAgaWYgKFZfbXJ0ZGVidWcpCiAJ
bG9nKExPR19ERUJVRywgImlwX21yb3V0ZXJfaW5pdDogc29fdHlwZSA9ICVkLCBwcl9wcm90b2Nv
bCA9ICVkXG4iLAogCSAgICBzby0+c29fdHlwZSwgc28tPnNvX3Byb3RvLT5wcl9wcm90b2NvbCk7
CiAKQEAgLTczMiwyNCArNzgxLDMxIEBACiAJcmV0dXJuIEVBRERSSU5VU0U7CiAgICAgfQogCi0g
ICAgaWZfZGV0YWNoX2V2ZW50X3RhZyA9IEVWRU5USEFORExFUl9SRUdJU1RFUihpZm5ldF9kZXBh
cnR1cmVfZXZlbnQsIAorICAgIFZfaWZfZGV0YWNoX2V2ZW50X3RhZyA9IEVWRU5USEFORExFUl9S
RUdJU1RFUihpZm5ldF9kZXBhcnR1cmVfZXZlbnQsIAogICAgICAgICBpZl9kZXRhY2hlZF9ldmVu
dCwgTlVMTCwgRVZFTlRIQU5ETEVSX1BSSV9BTlkpOwotICAgIGlmIChpZl9kZXRhY2hfZXZlbnRf
dGFnID09IE5VTEwpIHsKKyAgICBpZiAoVl9pZl9kZXRhY2hfZXZlbnRfdGFnID09IE5VTEwpIHsK
IAlNUk9VVEVSX1VOTE9DSygpOwogCXJldHVybiAoRU5PTUVNKTsKICAgICB9CiAKLSAgICBjYWxs
b3V0X3Jlc2V0KCZleHBpcmVfdXBjYWxsc19jaCwgRVhQSVJFX1RJTUVPVVQsIGV4cGlyZV91cGNh
bGxzLCBOVUxMKTsKLQotICAgIGNhbGxvdXRfcmVzZXQoJmJ3X3VwY2FsbHNfY2gsIEJXX1VQQ0FM
TFNfUEVSSU9ELAotCWV4cGlyZV9id191cGNhbGxzX3NlbmQsIE5VTEwpOwotICAgIGNhbGxvdXRf
cmVzZXQoJmJ3X21ldGVyX2NoLCBCV19NRVRFUl9QRVJJT0QsIGV4cGlyZV9id19tZXRlcl9wcm9j
ZXNzLCBOVUxMKTsKKyNpZmRlZiBWSU1BR0UKKyAgICBpZiAoSVNfREVGQVVMVF9WTkVUKHNvLT5z
b192bmV0KSkgeworI2VuZGlmIC8qIFZJTUFHRSAqLworCWNhbGxvdXRfcmVzZXQoJmV4cGlyZV91
cGNhbGxzX2NoLCBFWFBJUkVfVElNRU9VVCwgZXhwaXJlX3VwY2FsbHMsCisJCU5VTEwpOworCWNh
bGxvdXRfcmVzZXQoJmJ3X3VwY2FsbHNfY2gsIEJXX1VQQ0FMTFNfUEVSSU9ELAorCQlleHBpcmVf
YndfdXBjYWxsc19zZW5kLCBOVUxMKTsKKwljYWxsb3V0X3Jlc2V0KCZid19tZXRlcl9jaCwgQldf
TUVURVJfUEVSSU9ELAorCQlleHBpcmVfYndfbWV0ZXJfcHJvY2VzcywgTlVMTCk7CisjaWZkZWYg
VklNQUdFCisgICAgfQorI2VuZGlmIC8qIFZJTUFHRSAqLwogCiAgICAgVl9pcF9tcm91dGVyID0g
c287CiAKICAgICBNUk9VVEVSX1VOTE9DSygpOwogCi0gICAgaWYgKG1ydGRlYnVnKQorICAgIGlm
IChWX21ydGRlYnVnKQogCWxvZyhMT0dfREVCVUcsICJpcF9tcm91dGVyX2luaXRcbiIpOwogCiAg
ICAgcmV0dXJuIDA7CkBAIC03ODAsNDEgKzgzNiw0NyBAQAogICAgICAqIERldGFjaC9kaXNhYmxl
IGhvb2tzIHRvIHRoZSByZXNldCBvZiB0aGUgc3lzdGVtLgogICAgICAqLwogICAgIFZfaXBfbXJv
dXRlciA9IE5VTEw7Ci0gICAgbXJ0X2FwaV9jb25maWcgPSAwOworICAgIFZfbXJ0X2FwaV9jb25m
aWcgPSAwOwogCiAgICAgVklGX0xPQ0soKTsKICAgICAvKgogICAgICAqIEZvciBlYWNoIHBoeWlu
dCBpbiB1c2UsIGRpc2FibGUgcHJvbWlzY3VvdXMgcmVjZXB0aW9uIG9mIGFsbCBJUAogICAgICAq
IG11bHRpY2FzdHMuCiAgICAgICovCi0gICAgZm9yICh2aWZpID0gMDsgdmlmaSA8IG51bXZpZnM7
IHZpZmkrKykgewotCWlmICh2aWZ0YWJsZVt2aWZpXS52X2xjbF9hZGRyLnNfYWRkciAhPSAwICYm
Ci0JCSEodmlmdGFibGVbdmlmaV0udl9mbGFncyAmIChWSUZGX1RVTk5FTCB8IFZJRkZfUkVHSVNU
RVIpKSkgeworICAgIGZvciAodmlmaSA9IDA7IHZpZmkgPCBWX251bXZpZnM7IHZpZmkrKykgewor
CWlmIChWX3ZpZnRhYmxlW3ZpZmldLnZfbGNsX2FkZHIuc19hZGRyICE9IDAgJiYKKwkJIShWX3Zp
ZnRhYmxlW3ZpZmldLnZfZmxhZ3MgJiAoVklGRl9UVU5ORUwgfCBWSUZGX1JFR0lTVEVSKSkpIHsK
IAkgICAgc3RydWN0IHNvY2thZGRyX2luICpzbyA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmKGlm
ci5pZnJfYWRkcik7CiAKIAkgICAgc28tPnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luKTsKIAkgICAgc28tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwogCSAgICBzby0+c2luX2FkZHIu
c19hZGRyID0gSU5BRERSX0FOWTsKLQkgICAgaWZwID0gdmlmdGFibGVbdmlmaV0udl9pZnA7CisJ
ICAgIGlmcCA9IFZfdmlmdGFibGVbdmlmaV0udl9pZnA7CiAJICAgIGlmX2FsbG11bHRpKGlmcCwg
MCk7CiAJfQogICAgIH0KLSAgICBiemVybygoY2FkZHJfdCl2aWZ0YWJsZSwgc2l6ZW9mKHZpZnRh
YmxlKSk7Ci0gICAgbnVtdmlmcyA9IDA7Ci0gICAgcGltX2Fzc2VydCA9IDA7CisgICAgYnplcm8o
KGNhZGRyX3QpVl92aWZ0YWJsZSwgc2l6ZW9mKFZfdmlmdGFibGUpKTsKKyAgICBWX251bXZpZnMg
PSAwOworICAgIFZfcGltX2Fzc2VydCA9IDA7CiAgICAgVklGX1VOTE9DSygpOwotICAgIEVWRU5U
SEFORExFUl9ERVJFR0lTVEVSKGlmbmV0X2RlcGFydHVyZV9ldmVudCwgaWZfZGV0YWNoX2V2ZW50
X3RhZyk7CisgICAgRVZFTlRIQU5ETEVSX0RFUkVHSVNURVIoaWZuZXRfZGVwYXJ0dXJlX2V2ZW50
LCBWX2lmX2RldGFjaF9ldmVudF90YWcpOwogCiAgICAgLyoKICAgICAgKiBGcmVlIGFsbCBtdWx0
aWNhc3QgZm9yd2FyZGluZyBjYWNoZSBlbnRyaWVzLgogICAgICAqLwotICAgIGNhbGxvdXRfc3Rv
cCgmZXhwaXJlX3VwY2FsbHNfY2gpOwotICAgIGNhbGxvdXRfc3RvcCgmYndfdXBjYWxsc19jaCk7
Ci0gICAgY2FsbG91dF9zdG9wKCZid19tZXRlcl9jaCk7CisjaWZkZWYgVklNQUdFCisgICAgaWYg
KElTX0RFRkFVTFRfVk5FVChjdXJ2bmV0KSkgeworI2VuZGlmIC8qIFZJTUFHRSAqLworCWNhbGxv
dXRfc3RvcCgmZXhwaXJlX3VwY2FsbHNfY2gpOworCWNhbGxvdXRfc3RvcCgmYndfdXBjYWxsc19j
aCk7CisJY2FsbG91dF9zdG9wKCZid19tZXRlcl9jaCk7CisjaWZkZWYgVklNQUdFCisgICAgfQor
I2VuZGlmIC8qIFZJTUFHRSAqLwogCiAgICAgTUZDX0xPQ0soKTsKICAgICBmb3IgKGkgPSAwOyBp
IDwgTUZDVEJMU0laOyBpKyspIHsKLQlmb3IgKHJ0ID0gbWZjdGFibGVbaV07IHJ0ICE9IE5VTEw7
ICkgeworCWZvciAocnQgPSBWX21mY3RhYmxlW2ldOyBydCAhPSBOVUxMOyApIHsKIAkgICAgc3Ry
dWN0IG1mYyAqbnIgPSBydC0+bWZjX25leHQ7CiAKIAkgICAgZm9yIChydGUgPSBydC0+bWZjX3N0
YWxsOyBydGUgIT0gTlVMTDsgKSB7CkBAIC04MjksMTcgKzg5MSwxOSBAQAogCSAgICBydCA9IG5y
OwogCX0KICAgICB9Ci0gICAgYnplcm8oKGNhZGRyX3QpbWZjdGFibGUsIHNpemVvZihtZmN0YWJs
ZSkpOwotICAgIGJ6ZXJvKChjYWRkcl90KW5leHBpcmUsIHNpemVvZihuZXhwaXJlKSk7Ci0gICAg
YndfdXBjYWxsc19uID0gMDsKLSAgICBiemVybyhid19tZXRlcl90aW1lcnMsIHNpemVvZihid19t
ZXRlcl90aW1lcnMpKTsKKyAgICBiemVybygoY2FkZHJfdClWX21mY3RhYmxlLCBzaXplb2YoVl9t
ZmN0YWJsZSkpOworICAgIGJ6ZXJvKChjYWRkcl90KVZfbmV4cGlyZSwgc2l6ZW9mKFZfbmV4cGly
ZSkpOworICAgIFZfYndfdXBjYWxsc19uID0gMDsKKyAgICBiemVybyhWX2J3X21ldGVyX3RpbWVy
cywgc2l6ZW9mKFZfYndfbWV0ZXJfdGltZXJzKSk7CiAgICAgTUZDX1VOTE9DSygpOwogCi0gICAg
cmVnX3ZpZl9udW0gPSBWSUZJX0lOVkFMSUQ7CisgICAgaWYgKFZfcmVnX3ZpZl9udW0gIT0gVklG
SV9JTlZBTElEKQorCUlGX0FERFJfTE9DS19ERVNUUk9ZKCZWX211bHRpY2FzdF9yZWdpc3Rlcl9p
Zik7CisgICAgVl9yZWdfdmlmX251bSA9IFZJRklfSU5WQUxJRDsKIAogICAgIE1ST1VURVJfVU5M
T0NLKCk7CiAKLSAgICBpZiAobXJ0ZGVidWcpCisgICAgaWYgKFZfbXJ0ZGVidWcpCiAJbG9nKExP
R19ERUJVRywgImlwX21yb3V0ZXJfZG9uZVxuIik7CiAKICAgICByZXR1cm4gMDsKQEAgLTg1MSwx
MCArOTE1LDExIEBACiBzdGF0aWMgaW50CiBzZXRfYXNzZXJ0KGludCBpKQogeworICAgIElOSVRf
Vk5FVF9JTkVUKGN1cnZuZXQpOwogICAgIGlmICgoaSAhPSAxKSAmJiAoaSAhPSAwKSkKIAlyZXR1
cm4gRUlOVkFMOwogCi0gICAgcGltX2Fzc2VydCA9IGk7CisgICAgVl9waW1fYXNzZXJ0ID0gaTsK
IAogICAgIHJldHVybiAwOwogfQpAQCAtODY1LDYgKzkzMCw3IEBACiBpbnQKIHNldF9hcGlfY29u
ZmlnKHVpbnQzMl90ICphcGl2YWwpCiB7CisgICAgSU5JVF9WTkVUX0lORVQoY3Vydm5ldCk7CiAg
ICAgaW50IGk7CiAKICAgICAvKgpAQCAtODc0LDIzICs5NDAsMjMgQEAKICAgICAgKiAgLSBwaW1f
YXNzZXJ0IGlzIG5vdCBlbmFibGVkCiAgICAgICogIC0gdGhlIE1GQyB0YWJsZSBpcyBlbXB0eQog
ICAgICAqLwotICAgIGlmIChudW12aWZzID4gMCkgeworICAgIGlmIChWX251bXZpZnMgPiAwKSB7
CiAJKmFwaXZhbCA9IDA7CiAJcmV0dXJuIEVQRVJNOwogICAgIH0KLSAgICBpZiAocGltX2Fzc2Vy
dCkgeworICAgIGlmIChWX3BpbV9hc3NlcnQpIHsKIAkqYXBpdmFsID0gMDsKIAlyZXR1cm4gRVBF
Uk07CiAgICAgfQogICAgIGZvciAoaSA9IDA7IGkgPCBNRkNUQkxTSVo7IGkrKykgewotCWlmICht
ZmN0YWJsZVtpXSAhPSBOVUxMKSB7CisJaWYgKFZfbWZjdGFibGVbaV0gIT0gTlVMTCkgewogCSAg
ICAqYXBpdmFsID0gMDsKIAkgICAgcmV0dXJuIEVQRVJNOwogCX0KICAgICB9CiAKLSAgICBtcnRf
YXBpX2NvbmZpZyA9ICphcGl2YWwgJiBtcnRfYXBpX3N1cHBvcnQ7Ci0gICAgKmFwaXZhbCA9IG1y
dF9hcGlfY29uZmlnOworICAgIFZfbXJ0X2FwaV9jb25maWcgPSAqYXBpdmFsICYgbXJ0X2FwaV9z
dXBwb3J0OworICAgICphcGl2YWwgPSBWX21ydF9hcGlfY29uZmlnOwogCiAgICAgcmV0dXJuIDA7
CiB9CkBAIC05MDEsNyArOTY3LDggQEAKIHN0YXRpYyBpbnQKIGFkZF92aWYoc3RydWN0IHZpZmN0
bCAqdmlmY3ApCiB7Ci0gICAgc3RydWN0IHZpZiAqdmlmcCA9IHZpZnRhYmxlICsgdmlmY3AtPnZp
ZmNfdmlmaTsKKyAgICBJTklUX1ZORVRfSU5FVChjdXJ2bmV0KTsKKyAgICBzdHJ1Y3QgdmlmICp2
aWZwID0gVl92aWZ0YWJsZSArIHZpZmNwLT52aWZjX3ZpZmk7CiAgICAgc3RydWN0IHNvY2thZGRy
X2luIHNpbiA9IHtzaXplb2Ygc2luLCBBRl9JTkVUfTsKICAgICBzdHJ1Y3QgaWZhZGRyICppZmE7
CiAgICAgc3RydWN0IGlmbmV0ICppZnA7CkBAIC05NTAsMTQgKzEwMTcsMTkgQEAKIAlWSUZfVU5M
T0NLKCk7CiAJcmV0dXJuIEVPUE5PVFNVUFA7CiAgICAgfSBlbHNlIGlmICh2aWZjcC0+dmlmY19m
bGFncyAmIFZJRkZfUkVHSVNURVIpIHsKLQlpZnAgPSAmbXVsdGljYXN0X3JlZ2lzdGVyX2lmOwot
CWlmIChtcnRkZWJ1ZykKKwlpZnAgPSAmVl9tdWx0aWNhc3RfcmVnaXN0ZXJfaWY7CisJaWYgKFZf
bXJ0ZGVidWcpCiAJICAgIGxvZyhMT0dfREVCVUcsICJBZGRpbmcgYSByZWdpc3RlciB2aWYsIGlm
cDogJXBcbiIsCi0JCSAgICAodm9pZCAqKSZtdWx0aWNhc3RfcmVnaXN0ZXJfaWYpOwotCWlmIChy
ZWdfdmlmX251bSA9PSBWSUZJX0lOVkFMSUQpIHsKLQkgICAgaWZfaW5pdG5hbWUoJm11bHRpY2Fz
dF9yZWdpc3Rlcl9pZiwgInJlZ2lzdGVyX3ZpZiIsIDApOwotCSAgICBtdWx0aWNhc3RfcmVnaXN0
ZXJfaWYuaWZfZmxhZ3MgPSBJRkZfTE9PUEJBQ0s7Ci0JICAgIHJlZ192aWZfbnVtID0gdmlmY3At
PnZpZmNfdmlmaTsKKwkJICAgICh2b2lkICopJlZfbXVsdGljYXN0X3JlZ2lzdGVyX2lmKTsKKwlp
ZiAoVl9yZWdfdmlmX251bSA9PSBWSUZJX0lOVkFMSUQpIHsKKwkgICAgaWZfaW5pdG5hbWUoJlZf
bXVsdGljYXN0X3JlZ2lzdGVyX2lmLCAicmVnaXN0ZXJfdmlmIiwgMCk7CisJICAgIFZfbXVsdGlj
YXN0X3JlZ2lzdGVyX2lmLmlmX2ZsYWdzID0gSUZGX0xPT1BCQUNLOworCSAgICBWX3JlZ192aWZf
bnVtID0gdmlmY3AtPnZpZmNfdmlmaTsKKwkgICAgSUZfQUREUl9MT0NLX0lOSVQoJlZfbXVsdGlj
YXN0X3JlZ2lzdGVyX2lmKTsKKyNpZmRlZiBWSU1BR0UKKwkgICAgVl9tdWx0aWNhc3RfcmVnaXN0
ZXJfaWYuaWZfdm5ldCA9IGN1cnZuZXQ7CisJICAgIFZfbXVsdGljYXN0X3JlZ2lzdGVyX2lmLmlm
X2hvbWVfdm5ldCA9IGN1cnZuZXQ7CisjZW5kaWYgLyogVklNQUdFICovCiAJfQogICAgIH0gZWxz
ZSB7CQkvKiBNYWtlIHN1cmUgdGhlIGludGVyZmFjZSBzdXBwb3J0cyBtdWx0aWNhc3QgKi8KIAlp
ZiAoKGlmcC0+aWZfZmxhZ3MgJiBJRkZfTVVMVElDQVNUKSA9PSAwKSB7CkBAIC05ODgsMTEgKzEw
NjAsMTEgQEAKICAgICBiemVybygmdmlmcC0+dl9yb3V0ZSwgc2l6ZW9mKHZpZnAtPnZfcm91dGUp
KTsKIAogICAgIC8qIEFkanVzdCBudW12aWZzIHVwIGlmIHRoZSB2aWZpIGlzIGhpZ2hlciB0aGFu
IG51bXZpZnMgKi8KLSAgICBpZiAobnVtdmlmcyA8PSB2aWZjcC0+dmlmY192aWZpKSBudW12aWZz
ID0gdmlmY3AtPnZpZmNfdmlmaSArIDE7CisgICAgaWYgKFZfbnVtdmlmcyA8PSB2aWZjcC0+dmlm
Y192aWZpKSBWX251bXZpZnMgPSB2aWZjcC0+dmlmY192aWZpICsgMTsKIAogICAgIFZJRl9VTkxP
Q0soKTsKIAotICAgIGlmIChtcnRkZWJ1ZykKKyAgICBpZiAoVl9tcnRkZWJ1ZykKIAlsb2coTE9H
X0RFQlVHLCAiYWRkX3ZpZiAjJWQsIGxjbGFkZHIgJWx4LCAlcyAlbHgsIHRocmVzaCAleFxuIiwK
IAkgICAgdmlmY3AtPnZpZmNfdmlmaSwKIAkgICAgKHVfbG9uZyludG9obCh2aWZjcC0+dmlmY19s
Y2xfYWRkci5zX2FkZHIpLApAQCAtMTAwOSwxNCArMTA4MSwxNSBAQAogc3RhdGljIGludAogZGVs
X3ZpZl9sb2NrZWQodmlmaV90IHZpZmkpCiB7CisgICAgSU5JVF9WTkVUX0lORVQoY3Vydm5ldCk7
CiAgICAgc3RydWN0IHZpZiAqdmlmcDsKIAogICAgIFZJRl9MT0NLX0FTU0VSVCgpOwogCi0gICAg
aWYgKHZpZmkgPj0gbnVtdmlmcykgeworICAgIGlmICh2aWZpID49IFZfbnVtdmlmcykgewogCXJl
dHVybiBFSU5WQUw7CiAgICAgfQotICAgIHZpZnAgPSAmdmlmdGFibGVbdmlmaV07CisgICAgdmlm
cCA9ICZWX3ZpZnRhYmxlW3ZpZmldOwogICAgIGlmICh2aWZwLT52X2xjbF9hZGRyLnNfYWRkciA9
PSBJTkFERFJfQU5ZKSB7CiAJcmV0dXJuIEVBRERSTk9UQVZBSUw7CiAgICAgfQpAQCAtMTAyNCwx
OSArMTA5NywyMiBAQAogICAgIGlmICghKHZpZnAtPnZfZmxhZ3MgJiAoVklGRl9UVU5ORUwgfCBW
SUZGX1JFR0lTVEVSKSkpCiAJaWZfYWxsbXVsdGkodmlmcC0+dl9pZnAsIDApOwogCi0gICAgaWYg
KHZpZnAtPnZfZmxhZ3MgJiBWSUZGX1JFR0lTVEVSKQotCXJlZ192aWZfbnVtID0gVklGSV9JTlZB
TElEOworICAgIGlmICh2aWZwLT52X2ZsYWdzICYgVklGRl9SRUdJU1RFUikgeworCWlmIChWX3Jl
Z192aWZfbnVtICE9IFZJRklfSU5WQUxJRCkKKwkgICAgSUZfQUREUl9MT0NLX0RFU1RST1koJlZf
bXVsdGljYXN0X3JlZ2lzdGVyX2lmKTsKKwlWX3JlZ192aWZfbnVtID0gVklGSV9JTlZBTElEOwor
ICAgIH0KIAogICAgIGJ6ZXJvKChjYWRkcl90KXZpZnAsIHNpemVvZiAoKnZpZnApKTsKIAotICAg
IGlmIChtcnRkZWJ1ZykKLQlsb2coTE9HX0RFQlVHLCAiZGVsX3ZpZiAlZCwgbnVtdmlmcyAlZFxu
IiwgdmlmaSwgbnVtdmlmcyk7CisgICAgaWYgKFZfbXJ0ZGVidWcpCisJbG9nKExPR19ERUJVRywg
ImRlbF92aWYgJWQsIG51bXZpZnMgJWRcbiIsIHZpZmksIFZfbnVtdmlmcyk7CiAKICAgICAvKiBB
ZGp1c3QgbnVtdmlmcyBkb3duICovCi0gICAgZm9yICh2aWZpID0gbnVtdmlmczsgdmlmaSA+IDA7
IHZpZmktLSkKLQlpZiAodmlmdGFibGVbdmlmaS0xXS52X2xjbF9hZGRyLnNfYWRkciAhPSBJTkFE
RFJfQU5ZKQorICAgIGZvciAodmlmaSA9IFZfbnVtdmlmczsgdmlmaSA+IDA7IHZpZmktLSkKKwlp
ZiAoVl92aWZ0YWJsZVt2aWZpLTFdLnZfbGNsX2FkZHIuc19hZGRyICE9IElOQUREUl9BTlkpCiAJ
ICAgIGJyZWFrOwotICAgIG51bXZpZnMgPSB2aWZpOworICAgIFZfbnVtdmlmcyA9IHZpZmk7CiAK
ICAgICByZXR1cm4gMDsKIH0KQEAgLTEwNTksMTYgKzExMzUsMTcgQEAKIHN0YXRpYyB2b2lkCiB1
cGRhdGVfbWZjX3BhcmFtcyhzdHJ1Y3QgbWZjICpydCwgc3RydWN0IG1mY2N0bDIgKm1mY2NwKQog
eworICAgIElOSVRfVk5FVF9JTkVUKGN1cnZuZXQpOwogICAgIGludCBpOwogCiAgICAgcnQtPm1m
Y19wYXJlbnQgPSBtZmNjcC0+bWZjY19wYXJlbnQ7Ci0gICAgZm9yIChpID0gMDsgaSA8IG51bXZp
ZnM7IGkrKykgeworICAgIGZvciAoaSA9IDA7IGkgPCBWX251bXZpZnM7IGkrKykgewogCXJ0LT5t
ZmNfdHRsc1tpXSA9IG1mY2NwLT5tZmNjX3R0bHNbaV07Ci0JcnQtPm1mY19mbGFnc1tpXSA9IG1m
Y2NwLT5tZmNjX2ZsYWdzW2ldICYgbXJ0X2FwaV9jb25maWcgJgorCXJ0LT5tZmNfZmxhZ3NbaV0g
PSBtZmNjcC0+bWZjY19mbGFnc1tpXSAmIFZfbXJ0X2FwaV9jb25maWcgJgogCSAgICBNUlRfTUZD
X0ZMQUdTX0FMTDsKICAgICB9CiAgICAgLyogc2V0IHRoZSBSUCBhZGRyZXNzICovCi0gICAgaWYg
KG1ydF9hcGlfY29uZmlnICYgTVJUX01GQ19SUCkKKyAgICBpZiAoVl9tcnRfYXBpX2NvbmZpZyAm
IE1SVF9NRkNfUlApCiAJcnQtPm1mY19ycCA9IG1mY2NwLT5tZmNjX3JwOwogICAgIGVsc2UKIAly
dC0+bWZjX3JwLnNfYWRkciA9IElOQUREUl9BTlk7CkBAIC0xMDk5LDYgKzExNzYsNyBAQAogc3Rh
dGljIGludAogYWRkX21mYyhzdHJ1Y3QgbWZjY3RsMiAqbWZjY3ApCiB7CisgICAgSU5JVF9WTkVU
X0lORVQoY3Vydm5ldCk7CiAgICAgc3RydWN0IG1mYyAqcnQ7CiAgICAgdV9sb25nIGhhc2g7CiAg
ICAgc3RydWN0IHJ0ZGV0cSAqcnRlOwpAQCAtMTExMSw3ICsxMTg5LDcgQEAKIAogICAgIC8qIElm
IGFuIGVudHJ5IGFscmVhZHkgZXhpc3RzLCBqdXN0IHVwZGF0ZSB0aGUgZmllbGRzICovCiAgICAg
aWYgKHJ0KSB7Ci0JaWYgKG1ydGRlYnVnICYgREVCVUdfTUZDKQorCWlmIChWX21ydGRlYnVnICYg
REVCVUdfTUZDKQogCSAgICBsb2coTE9HX0RFQlVHLCJhZGRfbWZjIHVwZGF0ZSBvICVseCBnICVs
eCBwICV4XG4iLAogCQkodV9sb25nKW50b2hsKG1mY2NwLT5tZmNjX29yaWdpbi5zX2FkZHIpLAog
CQkodV9sb25nKW50b2hsKG1mY2NwLT5tZmNjX21jYXN0Z3JwLnNfYWRkciksCkBAIC0xMTI3LDcg
KzEyMDUsNyBAQAogICAgICAqIEZpbmQgdGhlIGVudHJ5IGZvciB3aGljaCB0aGUgdXBjYWxsIHdh
cyBtYWRlIGFuZCB1cGRhdGUKICAgICAgKi8KICAgICBoYXNoID0gTUZDSEFTSChtZmNjcC0+bWZj
Y19vcmlnaW4uc19hZGRyLCBtZmNjcC0+bWZjY19tY2FzdGdycC5zX2FkZHIpOwotICAgIGZvciAo
cnQgPSBtZmN0YWJsZVtoYXNoXSwgbnN0bCA9IDA7IHJ0OyBydCA9IHJ0LT5tZmNfbmV4dCkgewor
ICAgIGZvciAocnQgPSBWX21mY3RhYmxlW2hhc2hdLCBuc3RsID0gMDsgcnQ7IHJ0ID0gcnQtPm1m
Y19uZXh0KSB7CiAKIAlpZiAoKHJ0LT5tZmNfb3JpZ2luLnNfYWRkciA9PSBtZmNjcC0+bWZjY19v
cmlnaW4uc19hZGRyKSAmJgogCQkocnQtPm1mY19tY2FzdGdycC5zX2FkZHIgPT0gbWZjY3AtPm1m
Y2NfbWNhc3RncnAuc19hZGRyKSAmJgpAQCAtMTE0MCw3ICsxMjE4LDcgQEAKIAkJICAgICh1X2xv
bmcpbnRvaGwobWZjY3AtPm1mY2NfbWNhc3RncnAuc19hZGRyKSwKIAkJICAgIG1mY2NwLT5tZmNj
X3BhcmVudCwgKHZvaWQgKilydC0+bWZjX3N0YWxsKTsKIAotCSAgICBpZiAobXJ0ZGVidWcgJiBE
RUJVR19NRkMpCisJICAgIGlmIChWX21ydGRlYnVnICYgREVCVUdfTUZDKQogCQlsb2coTE9HX0RF
QlVHLCJhZGRfbWZjIG8gJWx4IGcgJWx4IHAgJXggZGJnICVwXG4iLAogCQkgICAgKHVfbG9uZylu
dG9obChtZmNjcC0+bWZjY19vcmlnaW4uc19hZGRyKSwKIAkJICAgICh1X2xvbmcpbnRvaGwobWZj
Y3AtPm1mY2NfbWNhc3RncnAuc19hZGRyKSwKQEAgLTExNDksNyArMTIyNyw3IEBACiAJICAgIGlu
aXRfbWZjX3BhcmFtcyhydCwgbWZjY3ApOwogCiAJICAgIHJ0LT5tZmNfZXhwaXJlID0gMDsJLyog
RG9uJ3QgY2xlYW4gdGhpcyBndXkgdXAgKi8KLQkgICAgbmV4cGlyZVtoYXNoXS0tOworCSAgICBW
X25leHBpcmVbaGFzaF0tLTsKIAogCSAgICAvKiBmcmVlIHBhY2tldHMgUWVkIGF0IHRoZSBlbmQg
b2YgdGhpcyBlbnRyeSAqLwogCSAgICBmb3IgKHJ0ZSA9IHJ0LT5tZmNfc3RhbGw7IHJ0ZSAhPSBO
VUxMOyApIHsKQEAgLTExNjgsMTggKzEyNDYsMTggQEAKICAgICAgKiBJdCBpcyBwb3NzaWJsZSB0
aGF0IGFuIGVudHJ5IGlzIGJlaW5nIGluc2VydGVkIHdpdGhvdXQgYW4gdXBjYWxsCiAgICAgICov
CiAgICAgaWYgKG5zdGwgPT0gMCkgewotCWlmIChtcnRkZWJ1ZyAmIERFQlVHX01GQykKKwlpZiAo
Vl9tcnRkZWJ1ZyAmIERFQlVHX01GQykKIAkgICAgbG9nKExPR19ERUJVRywiYWRkX21mYyBubyB1
cGNhbGwgaCAlbHUgbyAlbHggZyAlbHggcCAleFxuIiwKIAkJaGFzaCwgKHVfbG9uZyludG9obCht
ZmNjcC0+bWZjY19vcmlnaW4uc19hZGRyKSwKIAkJKHVfbG9uZyludG9obChtZmNjcC0+bWZjY19t
Y2FzdGdycC5zX2FkZHIpLAogCQltZmNjcC0+bWZjY19wYXJlbnQpOwogCi0JZm9yIChydCA9IG1m
Y3RhYmxlW2hhc2hdOyBydCAhPSBOVUxMOyBydCA9IHJ0LT5tZmNfbmV4dCkgeworCWZvciAocnQg
PSBWX21mY3RhYmxlW2hhc2hdOyBydCAhPSBOVUxMOyBydCA9IHJ0LT5tZmNfbmV4dCkgewogCSAg
ICBpZiAoKHJ0LT5tZmNfb3JpZ2luLnNfYWRkciA9PSBtZmNjcC0+bWZjY19vcmlnaW4uc19hZGRy
KSAmJgogCQkgICAgKHJ0LT5tZmNfbWNhc3RncnAuc19hZGRyID09IG1mY2NwLT5tZmNjX21jYXN0
Z3JwLnNfYWRkcikpIHsKIAkJaW5pdF9tZmNfcGFyYW1zKHJ0LCBtZmNjcCk7CiAJCWlmIChydC0+
bWZjX2V4cGlyZSkKLQkJICAgIG5leHBpcmVbaGFzaF0tLTsKKwkJICAgIFZfbmV4cGlyZVtoYXNo
XS0tOwogCQlydC0+bWZjX2V4cGlyZSA9IDA7CiAJCWJyZWFrOyAvKiBYWFggKi8KIAkgICAgfQpA
QCAtMTE5OCw4ICsxMjc2LDggQEAKIAogCSAgICBydC0+bWZjX2J3X21ldGVyID0gTlVMTDsKIAkg
ICAgLyogaW5zZXJ0IG5ldyBlbnRyeSBhdCBoZWFkIG9mIGhhc2ggY2hhaW4gKi8KLQkgICAgcnQt
Pm1mY19uZXh0ID0gbWZjdGFibGVbaGFzaF07Ci0JICAgIG1mY3RhYmxlW2hhc2hdID0gcnQ7CisJ
ICAgIHJ0LT5tZmNfbmV4dCA9IFZfbWZjdGFibGVbaGFzaF07CisJICAgIFZfbWZjdGFibGVbaGFz
aF0gPSBydDsKIAl9CiAgICAgfQogICAgIE1GQ19VTkxPQ0soKTsKQEAgLTEyMTMsNiArMTI5MSw3
IEBACiBzdGF0aWMgaW50CiBkZWxfbWZjKHN0cnVjdCBtZmNjdGwyICptZmNjcCkKIHsKKyAgICBJ
TklUX1ZORVRfSU5FVChjdXJ2bmV0KTsKICAgICBzdHJ1Y3QgaW5fYWRkcglvcmlnaW47CiAgICAg
c3RydWN0IGluX2FkZHIJbWNhc3RncnA7CiAgICAgc3RydWN0IG1mYwkJKnJ0OwpAQCAtMTIyMywx
NCArMTMwMiwxNCBAQAogICAgIG9yaWdpbiA9IG1mY2NwLT5tZmNjX29yaWdpbjsKICAgICBtY2Fz
dGdycCA9IG1mY2NwLT5tZmNjX21jYXN0Z3JwOwogCi0gICAgaWYgKG1ydGRlYnVnICYgREVCVUdf
TUZDKQorICAgIGlmIChWX21ydGRlYnVnICYgREVCVUdfTUZDKQogCWxvZyhMT0dfREVCVUcsImRl
bF9tZmMgb3JpZyAlbHggbWNhc3RncnAgJWx4XG4iLAogCSAgICAodV9sb25nKW50b2hsKG9yaWdp
bi5zX2FkZHIpLCAodV9sb25nKW50b2hsKG1jYXN0Z3JwLnNfYWRkcikpOwogCiAgICAgTUZDX0xP
Q0soKTsKIAogICAgIGhhc2ggPSBNRkNIQVNIKG9yaWdpbi5zX2FkZHIsIG1jYXN0Z3JwLnNfYWRk
cik7Ci0gICAgZm9yIChucHRyID0gJm1mY3RhYmxlW2hhc2hdOyAocnQgPSAqbnB0cikgIT0gTlVM
TDsgbnB0ciA9ICZydC0+bWZjX25leHQpCisgICAgZm9yIChucHRyID0gJlZfbWZjdGFibGVbaGFz
aF07IChydCA9ICpucHRyKSAhPSBOVUxMOyBucHRyID0gJnJ0LT5tZmNfbmV4dCkKIAlpZiAob3Jp
Z2luLnNfYWRkciA9PSBydC0+bWZjX29yaWdpbi5zX2FkZHIgJiYKIAkJbWNhc3RncnAuc19hZGRy
ID09IHJ0LT5tZmNfbWNhc3RncnAuc19hZGRyICYmCiAJCXJ0LT5tZmNfc3RhbGwgPT0gTlVMTCkK
QEAgLTEyOTgsNyArMTM3Nyw3IEBACiAgICAgaW50IGVycm9yOwogICAgIHZpZmlfdCB2aWZpOwog
Ci0gICAgaWYgKG1ydGRlYnVnICYgREVCVUdfRk9SV0FSRCkKKyAgICBpZiAoVl9tcnRkZWJ1ZyAm
IERFQlVHX0ZPUldBUkQpCiAJbG9nKExPR19ERUJVRywgImlwX21mb3J3YXJkOiBzcmMgJWx4LCBk
c3QgJWx4LCBpZnAgJXBcbiIsCiAJICAgICh1X2xvbmcpbnRvaGwoaXAtPmlwX3NyYy5zX2FkZHIp
LCAodV9sb25nKW50b2hsKGlwLT5pcF9kc3Quc19hZGRyKSwKIAkgICAgKHZvaWQgKilpZnApOwpA
QCAtMTMyNiwxMSArMTQwNSwxMSBAQAogCiAgICAgVklGX0xPQ0soKTsKICAgICBNRkNfTE9DSygp
OwotICAgIGlmIChpbW8gJiYgKCh2aWZpID0gaW1vLT5pbW9fbXVsdGljYXN0X3ZpZikgPCBudW12
aWZzKSkgeworICAgIGlmIChpbW8gJiYgKCh2aWZpID0gaW1vLT5pbW9fbXVsdGljYXN0X3ZpZikg
PCBWX251bXZpZnMpKSB7CiAJaWYgKGlwLT5pcF90dGwgPCBNQVhUVEwpCiAJICAgIGlwLT5pcF90
dGwrKzsJLyogY29tcGVuc2F0ZSBmb3IgLTEgaW4gKl9zZW5kIHJvdXRpbmVzICovCi0JaWYgKHJz
dnBkZWJ1ZyAmJiBpcC0+aXBfcCA9PSBJUFBST1RPX1JTVlApIHsKLQkgICAgc3RydWN0IHZpZiAq
dmlmcCA9IHZpZnRhYmxlICsgdmlmaTsKKwlpZiAoVl9yc3ZwZGVidWcgJiYgaXAtPmlwX3AgPT0g
SVBQUk9UT19SU1ZQKSB7CisJICAgIHN0cnVjdCB2aWYgKnZpZnAgPSBWX3ZpZnRhYmxlICsgdmlm
aTsKIAogCSAgICBwcmludGYoIlNlbmRpbmcgSVBQUk9UT19SU1ZQIGZyb20gJWx4IHRvICVseCBv
biB2aWYgJWQgKCVzJXMpXG4iLAogCQkobG9uZyludG9obChpcC0+aXBfc3JjLnNfYWRkciksIChs
b25nKW50b2hsKGlwLT5pcF9kc3Quc19hZGRyKSwKQEAgLTEzNDMsNyArMTQyMiw3IEBACiAJVklG
X1VOTE9DSygpOwogCXJldHVybiBlcnJvcjsKICAgICB9Ci0gICAgaWYgKHJzdnBkZWJ1ZyAmJiBp
cC0+aXBfcCA9PSBJUFBST1RPX1JTVlApIHsKKyAgICBpZiAoVl9yc3ZwZGVidWcgJiYgaXAtPmlw
X3AgPT0gSVBQUk9UT19SU1ZQKSB7CiAJcHJpbnRmKCJXYXJuaW5nOiBJUFBST1RPX1JTVlAgZnJv
bSAlbHggdG8gJWx4IHdpdGhvdXQgdmlmIG9wdGlvblxuIiwKIAkgICAgKGxvbmcpbnRvaGwoaXAt
PmlwX3NyYy5zX2FkZHIpLCAobG9uZyludG9obChpcC0+aXBfZHN0LnNfYWRkcikpOwogCWlmICgh
aW1vKQpAQCAtMTM2Myw3ICsxNDQyLDcgQEAKICAgICAvKgogICAgICAqIERldGVybWluZSBmb3J3
YXJkaW5nIHZpZnMgZnJvbSB0aGUgZm9yd2FyZGluZyBjYWNoZSB0YWJsZQogICAgICAqLwotICAg
ICsrbXJ0c3RhdC5tcnRzX21mY19sb29rdXBzOworICAgICsrVl9tcnRzdGF0Lm1ydHNfbWZjX2xv
b2t1cHM7CiAgICAgcnQgPSBtZmNfZmluZChpcC0+aXBfc3JjLnNfYWRkciwgaXAtPmlwX2RzdC5z
X2FkZHIpOwogCiAgICAgLyogRW50cnkgZXhpc3RzLCBzbyBmb3J3YXJkIGlmIG5lY2Vzc2FyeSAq
LwpAQCAtMTM4MywxMCArMTQ2MiwxMCBAQAogCXVfbG9uZyBoYXNoOwogCWludCBobGVuID0gaXAt
PmlwX2hsIDw8IDI7CiAKLQkrK21ydHN0YXQubXJ0c19tZmNfbWlzc2VzOworCSsrVl9tcnRzdGF0
Lm1ydHNfbWZjX21pc3NlczsKIAotCW1ydHN0YXQubXJ0c19ub19yb3V0ZSsrOwotCWlmIChtcnRk
ZWJ1ZyAmIChERUJVR19GT1JXQVJEIHwgREVCVUdfTUZDKSkKKwlWX21ydHN0YXQubXJ0c19ub19y
b3V0ZSsrOworCWlmIChWX21ydGRlYnVnICYgKERFQlVHX0ZPUldBUkQgfCBERUJVR19NRkMpKQog
CSAgICBsb2coTE9HX0RFQlVHLCAiaXBfbWZvcndhcmQ6IG5vIHJ0ZSBzICVseCBnICVseFxuIiwK
IAkJKHVfbG9uZyludG9obChpcC0+aXBfc3JjLnNfYWRkciksCiAJCSh1X2xvbmcpbnRvaGwoaXAt
PmlwX2RzdC5zX2FkZHIpKTsKQEAgLTE0MTQsNyArMTQ5Myw3IEBACiAKIAkvKiBpcyB0aGVyZSBh
biB1cGNhbGwgd2FpdGluZyBmb3IgdGhpcyBmbG93ID8gKi8KIAloYXNoID0gTUZDSEFTSChpcC0+
aXBfc3JjLnNfYWRkciwgaXAtPmlwX2RzdC5zX2FkZHIpOwotCWZvciAocnQgPSBtZmN0YWJsZVto
YXNoXTsgcnQ7IHJ0ID0gcnQtPm1mY19uZXh0KSB7CisJZm9yIChydCA9IFZfbWZjdGFibGVbaGFz
aF07IHJ0OyBydCA9IHJ0LT5tZmNfbmV4dCkgewogCSAgICBpZiAoKGlwLT5pcF9zcmMuc19hZGRy
ID09IHJ0LT5tZmNfb3JpZ2luLnNfYWRkcikgJiYKIAkJICAgIChpcC0+aXBfZHN0LnNfYWRkciA9
PSBydC0+bWZjX21jYXN0Z3JwLnNfYWRkcikgJiYKIAkJICAgIChydC0+bWZjX3N0YWxsICE9IE5V
TEwpKQpAQCAtMTQzMSw5ICsxNTEwLDkgQEAKIAkgICAgICogTG9jYXRlIHRoZSB2aWZpIGZvciB0
aGUgaW5jb21pbmcgaW50ZXJmYWNlIGZvciB0aGlzIHBhY2tldC4KIAkgICAgICogSWYgbm9uZSBm
b3VuZCwgZHJvcCBwYWNrZXQuCiAJICAgICAqLwotCSAgICBmb3IgKHZpZmk9MDsgdmlmaSA8IG51
bXZpZnMgJiYgdmlmdGFibGVbdmlmaV0udl9pZnAgIT0gaWZwOyB2aWZpKyspCisJICAgIGZvciAo
dmlmaT0wOyB2aWZpIDwgVl9udW12aWZzICYmIFZfdmlmdGFibGVbdmlmaV0udl9pZnAgIT0gaWZw
OyB2aWZpKyspCiAJCTsKLQkgICAgaWYgKHZpZmkgPj0gbnVtdmlmcykJLyogdmlmIG5vdCBmb3Vu
ZCwgZHJvcCBwYWNrZXQgKi8KKwkgICAgaWYgKHZpZmkgPj0gVl9udW12aWZzKQkvKiB2aWYgbm90
IGZvdW5kLCBkcm9wIHBhY2tldCAqLwogCQlnb3RvIG5vbl9mYXRhbDsKIAogCSAgICAvKiBubyB1
cGNhbGwsIHNvIG1ha2UgYSBuZXcgZW50cnkgKi8KQEAgLTE0NTUsMTIgKzE1MzQsMTIgQEAKIAkg
ICAgaW0tPmltX21ieiA9IDA7CiAJICAgIGltLT5pbV92aWYgPSB2aWZpOwogCi0JICAgIG1ydHN0
YXQubXJ0c191cGNhbGxzKys7CisJICAgIFZfbXJ0c3RhdC5tcnRzX3VwY2FsbHMrKzsKIAogCSAg
ICBrX2lnbXBzcmMuc2luX2FkZHIgPSBpcC0+aXBfc3JjOwogCSAgICBpZiAoc29ja2V0X3NlbmQo
Vl9pcF9tcm91dGVyLCBtbSwgJmtfaWdtcHNyYykgPCAwKSB7CiAJCWxvZyhMT0dfV0FSTklORywg
ImlwX21mb3J3YXJkOiBpcF9tcm91dGVyIHNvY2tldCBxdWV1ZSBmdWxsXG4iKTsKLQkJKyttcnRz
dGF0Lm1ydHNfdXBxX3NvY2tmdWxsOworCQkrK1ZfbXJ0c3RhdC5tcnRzX3VwcV9zb2NrZnVsbDsK
IGZhaWwxOgogCQlmcmVlKHJ0LCBNX01SVEFCTEUpOwogZmFpbDoKQEAgLTE0NzUsOCArMTU1NCw4
IEBACiAJICAgIHJ0LT5tZmNfb3JpZ2luLnNfYWRkciAgICAgPSBpcC0+aXBfc3JjLnNfYWRkcjsK
IAkgICAgcnQtPm1mY19tY2FzdGdycC5zX2FkZHIgICA9IGlwLT5pcF9kc3Quc19hZGRyOwogCSAg
ICBydC0+bWZjX2V4cGlyZQkgICAgICA9IFVQQ0FMTF9FWFBJUkU7Ci0JICAgIG5leHBpcmVbaGFz
aF0rKzsKLQkgICAgZm9yIChpID0gMDsgaSA8IG51bXZpZnM7IGkrKykgeworCSAgICBWX25leHBp
cmVbaGFzaF0rKzsKKwkgICAgZm9yIChpID0gMDsgaSA8IFZfbnVtdmlmczsgaSsrKSB7CiAJCXJ0
LT5tZmNfdHRsc1tpXSA9IDA7CiAJCXJ0LT5tZmNfZmxhZ3NbaV0gPSAwOwogCSAgICB9CkBAIC0x
NDg3LDggKzE1NjYsOCBAQAogCSAgICBydC0+bWZjX2J3X21ldGVyID0gTlVMTDsKIAogCSAgICAv
KiBsaW5rIGludG8gdGFibGUgKi8KLQkgICAgcnQtPm1mY19uZXh0ICAgPSBtZmN0YWJsZVtoYXNo
XTsKLQkgICAgbWZjdGFibGVbaGFzaF0gPSBydDsKKwkgICAgcnQtPm1mY19uZXh0ICAgPSBWX21m
Y3RhYmxlW2hhc2hdOworCSAgICBWX21mY3RhYmxlW2hhc2hdID0gcnQ7CiAJICAgIHJ0LT5tZmNf
c3RhbGwgPSBydGU7CiAKIAl9IGVsc2UgewpAQCAtMTUwNSw3ICsxNTg0LDcgQEAKIAkJbnBrdHMr
KzsKIAogCSAgICBpZiAobnBrdHMgPiBNQVhfVVBRKSB7Ci0JCW1ydHN0YXQubXJ0c191cHFfb3Zm
bHcrKzsKKwkJVl9tcnRzdGF0Lm1ydHNfdXBxX292Zmx3Kys7CiBub25fZmF0YWw6CiAJCWZyZWUo
cnRlLCBNX01SVEFCTEUpOwogCQltX2ZyZWVtKG1iMCk7CkBAIC0xNTQwLDEwICsxNjE5LDEyIEBA
CiAgICAgaW50IGk7CiAKICAgICBNRkNfTE9DSygpOworICAgIFZORVRfSVRFUkxPT1BfQkVHSU4o
KTsKKyAgICBJTklUX1ZORVRfSU5FVChjdXJ2bmV0KTsKICAgICBmb3IgKGkgPSAwOyBpIDwgTUZD
VEJMU0laOyBpKyspIHsKLQlpZiAobmV4cGlyZVtpXSA9PSAwKQorCWlmIChWX25leHBpcmVbaV0g
PT0gMCkKIAkgICAgY29udGludWU7Ci0JbnB0ciA9ICZtZmN0YWJsZVtpXTsKKwlucHRyID0gJlZf
bWZjdGFibGVbaV07CiAJZm9yIChtZmMgPSAqbnB0cjsgbWZjICE9IE5VTEw7IG1mYyA9ICpucHRy
KSB7CiAJICAgIC8qCiAJICAgICAqIFNraXAgcmVhbCBjYWNoZSBlbnRyaWVzCkBAIC0xNTUyLDcg
KzE2MzMsNyBAQAogCSAgICAgKi8KIAkgICAgaWYgKG1mYy0+bWZjX3N0YWxsICE9IE5VTEwgJiYg
bWZjLT5tZmNfZXhwaXJlICE9IDAgJiYKIAkJICAgIC0tbWZjLT5tZmNfZXhwaXJlID09IDApIHsK
LQkJaWYgKG1ydGRlYnVnICYgREVCVUdfRVhQSVJFKQorCQlpZiAoVl9tcnRkZWJ1ZyAmIERFQlVH
X0VYUElSRSkKIAkJICAgIGxvZyhMT0dfREVCVUcsICJleHBpcmVfdXBjYWxsczogZXhwaXJpbmcg
KCVseCAlbHgpXG4iLAogCQkJKHVfbG9uZyludG9obChtZmMtPm1mY19vcmlnaW4uc19hZGRyKSwK
IAkJCSh1X2xvbmcpbnRvaGwobWZjLT5tZmNfbWNhc3RncnAuc19hZGRyKSk7CkBAIC0xNTY3LDgg
KzE2NDgsOCBAQAogCQkgICAgZnJlZShydGUsIE1fTVJUQUJMRSk7CiAJCSAgICBydGUgPSBuOwog
CQl9Ci0JCSsrbXJ0c3RhdC5tcnRzX2NhY2hlX2NsZWFudXBzOwotCQluZXhwaXJlW2ldLS07CisJ
CSsrVl9tcnRzdGF0Lm1ydHNfY2FjaGVfY2xlYW51cHM7CisJCVZfbmV4cGlyZVtpXS0tOwogCiAJ
CS8qCiAJCSAqIGZyZWUgdGhlIGJ3X21ldGVyIGVudHJpZXMKQEAgLTE1ODcsOSArMTY2OCw5IEBA
CiAJICAgIH0KIAl9CiAgICAgfQotICAgIE1GQ19VTkxPQ0soKTsKLQorICAgIFZORVRfSVRFUkxP
T1BfRU5EKCk7CiAgICAgY2FsbG91dF9yZXNldCgmZXhwaXJlX3VwY2FsbHNfY2gsIEVYUElSRV9U
SU1FT1VULCBleHBpcmVfdXBjYWxscywgTlVMTCk7CisgICAgTUZDX1VOTE9DSygpOwogfQogCiAv
KgpAQCAtMTYxMCwxMSArMTY5MSwxMSBAQAogICAgICAqCiAgICAgICogKHNpbmNlIHZpZmlfdCBp
cyB1X3Nob3J0LCAtMSBiZWNvbWVzIE1BWFVTSE9SVCwgd2hpY2ggPiBudW12aWZzLikKICAgICAg
Ki8KLSAgICBpZiAoeG10X3ZpZiA8IG51bXZpZnMpIHsKLQlpZiAodmlmdGFibGVbeG10X3ZpZl0u
dl9mbGFncyAmIFZJRkZfUkVHSVNURVIpCi0JCXBpbV9yZWdpc3Rlcl9zZW5kKGlwLCB2aWZ0YWJs
ZSArIHhtdF92aWYsIG0sIHJ0KTsKKyAgICBpZiAoeG10X3ZpZiA8IFZfbnVtdmlmcykgeworCWlm
IChWX3ZpZnRhYmxlW3htdF92aWZdLnZfZmxhZ3MgJiBWSUZGX1JFR0lTVEVSKQorCQlwaW1fcmVn
aXN0ZXJfc2VuZChpcCwgVl92aWZ0YWJsZSArIHhtdF92aWYsIG0sIHJ0KTsKIAllbHNlCi0JCXBo
eWludF9zZW5kKGlwLCB2aWZ0YWJsZSArIHhtdF92aWYsIG0pOworCQlwaHlpbnRfc2VuZChpcCwg
Vl92aWZ0YWJsZSArIHhtdF92aWYsIG0pOwogCXJldHVybiAxOwogICAgIH0KIApAQCAtMTYyMiwx
MiArMTcwMywxMiBAQAogICAgICAqIERvbid0IGZvcndhcmQgaWYgaXQgZGlkbid0IGFycml2ZSBm
cm9tIHRoZSBwYXJlbnQgdmlmIGZvciBpdHMgb3JpZ2luLgogICAgICAqLwogICAgIHZpZmkgPSBy
dC0+bWZjX3BhcmVudDsKLSAgICBpZiAoKHZpZmkgPj0gbnVtdmlmcykgfHwgKHZpZnRhYmxlW3Zp
ZmldLnZfaWZwICE9IGlmcCkpIHsKKyAgICBpZiAoKHZpZmkgPj0gVl9udW12aWZzKSB8fCAoVl92
aWZ0YWJsZVt2aWZpXS52X2lmcCAhPSBpZnApKSB7CiAJLyogY2FtZSBpbiB0aGUgd3JvbmcgaW50
ZXJmYWNlICovCi0JaWYgKG1ydGRlYnVnICYgREVCVUdfRk9SV0FSRCkKKwlpZiAoVl9tcnRkZWJ1
ZyAmIERFQlVHX0ZPUldBUkQpCiAJICAgIGxvZyhMT0dfREVCVUcsICJ3cm9uZyBpZjogaWZwICVw
IHZpZmkgJWQgdmlmaWZwICVwXG4iLAotCQkodm9pZCAqKWlmcCwgdmlmaSwgKHZvaWQgKil2aWZ0
YWJsZVt2aWZpXS52X2lmcCk7Ci0JKyttcnRzdGF0Lm1ydHNfd3JvbmdfaWY7CisJCSh2b2lkICop
aWZwLCB2aWZpLCAodm9pZCAqKVZfdmlmdGFibGVbdmlmaV0udl9pZnApOworCSsrVl9tcnRzdGF0
Lm1ydHNfd3JvbmdfaWY7CiAJKytydC0+bWZjX3dyb25nX2lmOwogCS8qCiAJICogSWYgd2UgYXJl
IGRvaW5nIFBJTSBhc3NlcnQgcHJvY2Vzc2luZywgc2VuZCBhIG1lc3NhZ2UKQEAgLTE2MzcsMTcg
KzE3MTgsMTggQEAKIAkgKiBjYW4gY29tcGxldGUgdGhlIFNQVCBzd2l0Y2gsIHJlZ2FyZGxlc3Mg
b2YgdGhlIHR5cGUKIAkgKiBvZiB0aGUgaWlmIChicm9hZGNhc3QgbWVkaWEsIEdSRSB0dW5uZWws
IGV0YykuCiAJICovCi0JaWYgKHBpbV9hc3NlcnQgJiYgKHZpZmkgPCBudW12aWZzKSAmJiB2aWZ0
YWJsZVt2aWZpXS52X2lmcCkgeworCWlmIChWX3BpbV9hc3NlcnQgJiYgKHZpZmkgPCBWX251bXZp
ZnMpICYmIFZfdmlmdGFibGVbdmlmaV0udl9pZnApIHsKIAkgICAgc3RydWN0IHRpbWV2YWwgbm93
OwogCSAgICB1X2xvbmcgZGVsdGE7CiAKLQkgICAgaWYgKGlmcCA9PSAmbXVsdGljYXN0X3JlZ2lz
dGVyX2lmKQotCQlwaW1zdGF0LnBpbXNfcmN2X3JlZ2lzdGVyc193cm9uZ2lpZisrOworCSAgICBp
ZiAoaWZwID09ICZWX211bHRpY2FzdF9yZWdpc3Rlcl9pZikKKwkJVl9waW1zdGF0LnBpbXNfcmN2
X3JlZ2lzdGVyc193cm9uZ2lpZisrOwogCiAJICAgIC8qIEdldCB2aWZpIGZvciB0aGUgaW5jb21p
bmcgcGFja2V0ICovCi0JICAgIGZvciAodmlmaT0wOyB2aWZpIDwgbnVtdmlmcyAmJiB2aWZ0YWJs
ZVt2aWZpXS52X2lmcCAhPSBpZnA7IHZpZmkrKykKKwkgICAgZm9yICh2aWZpPTA7IHZpZmkgPCBW
X251bXZpZnMgJiYgVl92aWZ0YWJsZVt2aWZpXS52X2lmcCAhPSBpZnA7CisJCXZpZmkrKykKIAkJ
OwotCSAgICBpZiAodmlmaSA+PSBudW12aWZzKQorCSAgICBpZiAodmlmaSA+PSBWX251bXZpZnMp
CiAJCXJldHVybiAwOwkvKiBUaGUgaWlmIGlzIG5vdCBmb3VuZDogaWdub3JlIHRoZSBwYWNrZXQu
ICovCiAKIAkgICAgaWYgKHJ0LT5tZmNfZmxhZ3NbdmlmaV0gJiBNUlRfTUZDX0ZMQUdTX0RJU0FC
TEVfV1JPTkdWSUYpCkBAIC0xNjc1LDEzICsxNzU3LDEzIEBACiAJCWltLT5pbV9tYnoJCT0gMDsK
IAkJaW0tPmltX3ZpZgkJPSB2aWZpOwogCi0JCW1ydHN0YXQubXJ0c191cGNhbGxzKys7CisJCVZf
bXJ0c3RhdC5tcnRzX3VwY2FsbHMrKzsKIAogCQlrX2lnbXBzcmMuc2luX2FkZHIgPSBpbS0+aW1f
c3JjOwogCQlpZiAoc29ja2V0X3NlbmQoVl9pcF9tcm91dGVyLCBtbSwgJmtfaWdtcHNyYykgPCAw
KSB7CiAJCSAgICBsb2coTE9HX1dBUk5JTkcsCiAJCQkiaXBfbWZvcndhcmQ6IGlwX21yb3V0ZXIg
c29ja2V0IHF1ZXVlIGZ1bGxcbiIpOwotCQkgICAgKyttcnRzdGF0Lm1ydHNfdXBxX3NvY2tmdWxs
OworCQkgICAgKytWX21ydHN0YXQubXJ0c191cHFfc29ja2Z1bGw7CiAJCSAgICByZXR1cm4gRU5P
QlVGUzsKIAkJfQogCSAgICB9CkBAIC0xNjkwLDEyICsxNzcyLDEyIEBACiAgICAgfQogCiAgICAg
LyogSWYgSSBzb3VyY2VkIHRoaXMgcGFja2V0LCBpdCBjb3VudHMgYXMgb3V0cHV0LCBlbHNlIGl0
IHdhcyBpbnB1dC4gKi8KLSAgICBpZiAoaXAtPmlwX3NyYy5zX2FkZHIgPT0gdmlmdGFibGVbdmlm
aV0udl9sY2xfYWRkci5zX2FkZHIpIHsKLQl2aWZ0YWJsZVt2aWZpXS52X3BrdF9vdXQrKzsKLQl2
aWZ0YWJsZVt2aWZpXS52X2J5dGVzX291dCArPSBwbGVuOworICAgIGlmIChpcC0+aXBfc3JjLnNf
YWRkciA9PSBWX3ZpZnRhYmxlW3ZpZmldLnZfbGNsX2FkZHIuc19hZGRyKSB7CisJVl92aWZ0YWJs
ZVt2aWZpXS52X3BrdF9vdXQrKzsKKwlWX3ZpZnRhYmxlW3ZpZmldLnZfYnl0ZXNfb3V0ICs9IHBs
ZW47CiAgICAgfSBlbHNlIHsKLQl2aWZ0YWJsZVt2aWZpXS52X3BrdF9pbisrOwotCXZpZnRhYmxl
W3ZpZmldLnZfYnl0ZXNfaW4gKz0gcGxlbjsKKwlWX3ZpZnRhYmxlW3ZpZmldLnZfcGt0X2luKys7
CisJVl92aWZ0YWJsZVt2aWZpXS52X2J5dGVzX2luICs9IHBsZW47CiAgICAgfQogICAgIHJ0LT5t
ZmNfcGt0X2NudCsrOwogICAgIHJ0LT5tZmNfYnl0ZV9jbnQgKz0gcGxlbjsKQEAgLTE3MDYsMTQg
KzE3ODgsMTQgQEAKICAgICAgKgkJLSB0aGUgdHRsIGV4Y2VlZHMgdGhlIHZpZidzIHRocmVzaG9s
ZAogICAgICAqCQktIHRoZXJlIGFyZSBncm91cCBtZW1iZXJzIGRvd25zdHJlYW0gb24gaW50ZXJm
YWNlCiAgICAgICovCi0gICAgZm9yICh2aWZpID0gMDsgdmlmaSA8IG51bXZpZnM7IHZpZmkrKykK
KyAgICBmb3IgKHZpZmkgPSAwOyB2aWZpIDwgVl9udW12aWZzOyB2aWZpKyspCiAJaWYgKChydC0+
bWZjX3R0bHNbdmlmaV0gPiAwKSAmJiAoaXAtPmlwX3R0bCA+IHJ0LT5tZmNfdHRsc1t2aWZpXSkp
IHsKLQkgICAgdmlmdGFibGVbdmlmaV0udl9wa3Rfb3V0Kys7Ci0JICAgIHZpZnRhYmxlW3ZpZmld
LnZfYnl0ZXNfb3V0ICs9IHBsZW47Ci0JICAgIGlmICh2aWZ0YWJsZVt2aWZpXS52X2ZsYWdzICYg
VklGRl9SRUdJU1RFUikKLQkJcGltX3JlZ2lzdGVyX3NlbmQoaXAsIHZpZnRhYmxlICsgdmlmaSwg
bSwgcnQpOworCSAgICBWX3ZpZnRhYmxlW3ZpZmldLnZfcGt0X291dCsrOworCSAgICBWX3ZpZnRh
YmxlW3ZpZmldLnZfYnl0ZXNfb3V0ICs9IHBsZW47CisJICAgIGlmIChWX3ZpZnRhYmxlW3ZpZmld
LnZfZmxhZ3MgJiBWSUZGX1JFR0lTVEVSKQorCQlwaW1fcmVnaXN0ZXJfc2VuZChpcCwgVl92aWZ0
YWJsZSArIHZpZmksIG0sIHJ0KTsKIAkgICAgZWxzZQotCQlwaHlpbnRfc2VuZChpcCwgdmlmdGFi
bGUgKyB2aWZpLCBtKTsKKwkJcGh5aW50X3NlbmQoaXAsIFZfdmlmdGFibGUgKyB2aWZpLCBtKTsK
IAl9CiAKICAgICAvKgpAQCAtMTczOCw4ICsxODIwLDkgQEAKIHN0YXRpYyBpbnQKIFhfbGVnYWxf
dmlmX251bShpbnQgdmlmKQogeworICAgIElOSVRfVk5FVF9JTkVUKGN1cnZuZXQpOwogICAgIC8q
IFhYWCB1bmxvY2tlZCwgbWF0dGVyPyAqLwotICAgIHJldHVybiAodmlmID49IDAgJiYgdmlmIDwg
bnVtdmlmcyk7CisgICAgcmV0dXJuICh2aWYgPj0gMCAmJiB2aWYgPCBWX251bXZpZnMpOwogfQog
CiAvKgpAQCAtMTc0OCw5ICsxODMxLDEwIEBACiBzdGF0aWMgdV9sb25nCiBYX2lwX21jYXN0X3Ny
YyhpbnQgdmlmaSkKIHsKKyAgICBJTklUX1ZORVRfSU5FVChjdXJ2bmV0KTsKICAgICAvKiBYWFgg
dW5sb2NrZWQsIG1hdHRlcj8gKi8KLSAgICBpZiAodmlmaSA+PSAwICYmIHZpZmkgPCBudW12aWZz
KQotCXJldHVybiB2aWZ0YWJsZVt2aWZpXS52X2xjbF9hZGRyLnNfYWRkcjsKKyAgICBpZiAodmlm
aSA+PSAwICYmIHZpZmkgPCBWX251bXZpZnMpCisJcmV0dXJuIFZfdmlmdGFibGVbdmlmaV0udl9s
Y2xfYWRkci5zX2FkZHI7CiAgICAgZWxzZQogCXJldHVybiBJTkFERFJfQU5ZOwogfQpAQCAtMTc4
MCw2ICsxODY0LDcgQEAKIHN0YXRpYyB2b2lkCiBzZW5kX3BhY2tldChzdHJ1Y3QgdmlmICp2aWZw
LCBzdHJ1Y3QgbWJ1ZiAqbSkKIHsKKwlJTklUX1ZORVRfSU5FVChjdXJ2bmV0KTsKIAlzdHJ1Y3Qg
aXBfbW9wdGlvbnMgaW1vOwogCXN0cnVjdCBpbl9tdWx0aSAqaW1tWzJdOwogCWludCBlcnJvcjsK
QEAgLTE4MDEsMTYgKzE4ODYsMTYgQEAKIAkgKiB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlLCB0aHVz
IHByZXZlbnRpbmcgbG9vcGluZy4KIAkgKi8KIAllcnJvciA9IGlwX291dHB1dChtLCBOVUxMLCAm
dmlmcC0+dl9yb3V0ZSwgSVBfRk9SV0FSRElORywgJmltbywgTlVMTCk7Ci0JaWYgKG1ydGRlYnVn
ICYgREVCVUdfWE1JVCkgeworCWlmIChWX21ydGRlYnVnICYgREVCVUdfWE1JVCkgewogCSAgICBs
b2coTE9HX0RFQlVHLCAicGh5aW50X3NlbmQgb24gdmlmICV0ZCBlcnIgJWRcbiIsCi0JCXZpZnAg
LSB2aWZ0YWJsZSwgZXJyb3IpOworCQl2aWZwIC0gVl92aWZ0YWJsZSwgZXJyb3IpOwogCX0KIH0K
IAogc3RhdGljIGludAogWF9pcF9yc3ZwX3ZpZihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNv
Y2tvcHQgKnNvcHQpCiB7Ci0gICAgSU5JVF9WTkVUX0lORVQoY3Vydm5ldCk7CisgICAgSU5JVF9W
TkVUX0lORVQoc28tPnNvX3ZuZXQpOwogICAgIGludCBlcnJvciwgdmlmaTsKIAogICAgIGlmIChz
by0+c29fdHlwZSAhPSBTT0NLX1JBVyB8fCBzby0+c29fcHJvdG8tPnByX3Byb3RvY29sICE9IElQ
UFJPVE9fUlNWUCkKQEAgLTE4MjIsMzkgKzE5MDcsMzkgQEAKIAogICAgIFZJRl9MT0NLKCk7CiAK
LSAgICBpZiAodmlmaSA8IDAgfHwgdmlmaSA+PSBudW12aWZzKSB7CS8qIEVycm9yIGlmIHZpZiBp
cyBpbnZhbGlkICovCisgICAgaWYgKHZpZmkgPCAwIHx8IHZpZmkgPj0gVl9udW12aWZzKSB7CS8q
IEVycm9yIGlmIHZpZiBpcyBpbnZhbGlkICovCiAJVklGX1VOTE9DSygpOwogCXJldHVybiBFQURE
Uk5PVEFWQUlMOwogICAgIH0KIAogICAgIGlmIChzb3B0LT5zb3B0X25hbWUgPT0gSVBfUlNWUF9W
SUZfT04pIHsKIAkvKiBDaGVjayBpZiBzb2NrZXQgaXMgYXZhaWxhYmxlLiAqLwotCWlmICh2aWZ0
YWJsZVt2aWZpXS52X3JzdnBkICE9IE5VTEwpIHsKKwlpZiAoVl92aWZ0YWJsZVt2aWZpXS52X3Jz
dnBkICE9IE5VTEwpIHsKIAkgICAgVklGX1VOTE9DSygpOwogCSAgICByZXR1cm4gRUFERFJJTlVT
RTsKIAl9CiAKLQl2aWZ0YWJsZVt2aWZpXS52X3JzdnBkID0gc287CisJVl92aWZ0YWJsZVt2aWZp
XS52X3JzdnBkID0gc287CiAJLyogVGhpcyBtYXkgc2VlbSBzaWxseSwgYnV0IHdlIG5lZWQgdG8g
YmUgc3VyZSB3ZSBkb24ndCBvdmVyLWluY3JlbWVudAogCSAqIHRoZSBSU1ZQIGNvdW50ZXIsIGlu
IGNhc2Ugc29tZXRoaW5nIHNsaXBzIHVwLgogCSAqLwotCWlmICghdmlmdGFibGVbdmlmaV0udl9y
c3ZwX29uKSB7Ci0JICAgIHZpZnRhYmxlW3ZpZmldLnZfcnN2cF9vbiA9IDE7CisJaWYgKCFWX3Zp
ZnRhYmxlW3ZpZmldLnZfcnN2cF9vbikgeworCSAgICBWX3ZpZnRhYmxlW3ZpZmldLnZfcnN2cF9v
biA9IDE7CiAJICAgIFZfcnN2cF9vbisrOwogCX0KICAgICB9IGVsc2UgeyAvKiBtdXN0IGJlIFZJ
Rl9PRkYgKi8KIAkvKgogCSAqIFhYWCBhcyBhbiBhZGRpdGlvbmFsIGNvbnNpc3RlbmN5IGNoZWNr
LCBvbmUgY291bGQgbWFrZSBzdXJlCi0JICogdGhhdCB2aWZ0YWJsZVt2aWZpXS52X3JzdnBkID09
IHNvLCBvdGhlcndpc2UgcGFzc2luZyBzbyBhcworCSAqIHRoYXQgVl92aWZ0YWJsZVt2aWZpXS52
X3JzdnBkID09IHNvLCBvdGhlcndpc2UgcGFzc2luZyBzbyBhcwogCSAqIGZpcnN0IHBhcmFtZXRl
ciBpcyBwcmV0dHkgdXNlbGVzcy4KIAkgKi8KLQl2aWZ0YWJsZVt2aWZpXS52X3JzdnBkID0gTlVM
TDsKKwlWX3ZpZnRhYmxlW3ZpZmldLnZfcnN2cGQgPSBOVUxMOwogCS8qCiAJICogVGhpcyBtYXkg
c2VlbSBzaWxseSwgYnV0IHdlIG5lZWQgdG8gYmUgc3VyZSB3ZSBkb24ndCBvdmVyLWRlY3JlbWVu
dAogCSAqIHRoZSBSU1ZQIGNvdW50ZXIsIGluIGNhc2Ugc29tZXRoaW5nIHNsaXBzIHVwLgogCSAq
LwotCWlmICh2aWZ0YWJsZVt2aWZpXS52X3JzdnBfb24pIHsKLQkgICAgdmlmdGFibGVbdmlmaV0u
dl9yc3ZwX29uID0gMDsKKwlpZiAoVl92aWZ0YWJsZVt2aWZpXS52X3JzdnBfb24pIHsKKwkgICAg
Vl92aWZ0YWJsZVt2aWZpXS52X3JzdnBfb24gPSAwOwogCSAgICBWX3JzdnBfb24tLTsKIAl9CiAg
ICAgfQpAQCAtMTg2NSw3ICsxOTUwLDcgQEAKIHN0YXRpYyB2b2lkCiBYX2lwX3JzdnBfZm9yY2Vf
ZG9uZShzdHJ1Y3Qgc29ja2V0ICpzbykKIHsKLSAgICBJTklUX1ZORVRfSU5FVChjdXJ2bmV0KTsK
KyAgICBJTklUX1ZORVRfSU5FVChzby0+c29fdm5ldCk7CiAgICAgaW50IHZpZmk7CiAKICAgICAv
KiBEb24ndCBib3RoZXIgaWYgaXQgaXMgbm90IHRoZSByaWdodCB0eXBlIG9mIHNvY2tldC4gKi8K
QEAgLTE4NzcsMTQgKzE5NjIsMTQgQEAKICAgICAvKiBUaGUgc29ja2V0IG1heSBiZSBhdHRhY2hl
ZCB0byBtb3JlIHRoYW4gb25lIHZpZi4uLnRoaXMKICAgICAgKiBpcyBwZXJmZWN0bHkgbGVnYWwu
CiAgICAgICovCi0gICAgZm9yICh2aWZpID0gMDsgdmlmaSA8IG51bXZpZnM7IHZpZmkrKykgewot
CWlmICh2aWZ0YWJsZVt2aWZpXS52X3JzdnBkID09IHNvKSB7Ci0JICAgIHZpZnRhYmxlW3ZpZmld
LnZfcnN2cGQgPSBOVUxMOworICAgIGZvciAodmlmaSA9IDA7IHZpZmkgPCBWX251bXZpZnM7IHZp
ZmkrKykgeworCWlmIChWX3ZpZnRhYmxlW3ZpZmldLnZfcnN2cGQgPT0gc28pIHsKKwkgICAgVl92
aWZ0YWJsZVt2aWZpXS52X3JzdnBkID0gTlVMTDsKIAkgICAgLyogVGhpcyBtYXkgc2VlbSBzaWxs
eSwgYnV0IHdlIG5lZWQgdG8gYmUgc3VyZSB3ZSBkb24ndAogCSAgICAgKiBvdmVyLWRlY3JlbWVu
dCB0aGUgUlNWUCBjb3VudGVyLCBpbiBjYXNlIHNvbWV0aGluZyBzbGlwcyB1cC4KIAkgICAgICov
Ci0JICAgIGlmICh2aWZ0YWJsZVt2aWZpXS52X3JzdnBfb24pIHsKLQkJdmlmdGFibGVbdmlmaV0u
dl9yc3ZwX29uID0gMDsKKwkgICAgaWYgKFZfdmlmdGFibGVbdmlmaV0udl9yc3ZwX29uKSB7CisJ
CVZfdmlmdGFibGVbdmlmaV0udl9yc3ZwX29uID0gMDsKIAkJVl9yc3ZwX29uLS07CiAJICAgIH0K
IAl9CkBAIC0xOTAyLDcgKzE5ODcsNyBAQAogICAgIHN0cnVjdCBzb2NrYWRkcl9pbiByc3ZwX3Ny
YyA9IHsgc2l6ZW9mIHJzdnBfc3JjLCBBRl9JTkVUIH07CiAgICAgc3RydWN0IGlmbmV0ICppZnA7
CiAKLSAgICBpZiAocnN2cGRlYnVnKQorICAgIGlmIChWX3JzdnBkZWJ1ZykKIAlwcmludGYoInJz
dnBfaW5wdXQ6IHJzdnBfb24gJWRcbiIsIFZfcnN2cF9vbik7CiAKICAgICAvKiBDYW4gc3RpbGwg
Z2V0IHBhY2tldHMgd2l0aCByc3ZwX29uID0gMCBpZiB0aGVyZSBpcyBhIGxvY2FsIG1lbWJlcgpA
QCAtMTkxNCw3ICsxOTk5LDcgQEAKIAlyZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHJzdnBkZWJ1
ZykKKyAgICBpZiAoVl9yc3ZwZGVidWcpCiAJcHJpbnRmKCJyc3ZwX2lucHV0OiBjaGVjayB2aWZz
XG4iKTsKIAogI2lmZGVmIERJQUdOT1NUSUMKQEAgLTE5MjUsMTQgKzIwMTAsMTQgQEAKIAogICAg
IFZJRl9MT0NLKCk7CiAgICAgLyogRmluZCB3aGljaCB2aWYgdGhlIHBhY2tldCBhcnJpdmVkIG9u
LiAqLwotICAgIGZvciAodmlmaSA9IDA7IHZpZmkgPCBudW12aWZzOyB2aWZpKyspCi0JaWYgKHZp
ZnRhYmxlW3ZpZmldLnZfaWZwID09IGlmcCkKKyAgICBmb3IgKHZpZmkgPSAwOyB2aWZpIDwgVl9u
dW12aWZzOyB2aWZpKyspCisJaWYgKFZfdmlmdGFibGVbdmlmaV0udl9pZnAgPT0gaWZwKQogCSAg
ICBicmVhazsKIAotICAgIGlmICh2aWZpID09IG51bXZpZnMgfHwgdmlmdGFibGVbdmlmaV0udl9y
c3ZwZCA9PSBOVUxMKSB7CisgICAgaWYgKHZpZmkgPT0gVl9udW12aWZzIHx8IFZfdmlmdGFibGVb
dmlmaV0udl9yc3ZwZCA9PSBOVUxMKSB7CiAJLyoKIAkgKiBEcm9wIHRoZSBsb2NrIGhlcmUgdG8g
YXZvaWQgaG9sZGluZyBpdCBhY3Jvc3MgcmlwX2lucHV0LgotCSAqIFRoaXMgY291bGQgbWFrZSBy
c3ZwZGVidWcgcHJpbnRmcyB3cm9uZy4gIElmIHlvdSBjYXJlLAorCSAqIFRoaXMgY291bGQgbWFr
ZSBWX3JzdnBkZWJ1ZyBwcmludGZzIHdyb25nLiAgSWYgeW91IGNhcmUsCiAJICogcmVjb3JkIHRo
ZSBzdGF0ZSBvZiBzdHVmZiBiZWZvcmUgZHJvcHBpbmcgdGhlIGxvY2suCiAJICovCiAJVklGX1VO
TE9DSygpOwpAQCAtMTk0MiwxMyArMjAyNywxMyBAQAogCSAqIGlzIG5vIHNwZWNpZmljIHNvY2tl
dCBmb3IgdGhpcyB2aWYuCiAJICovCiAJaWYgKFZfaXBfcnN2cGQgIT0gTlVMTCkgewotCSAgICBp
ZiAocnN2cGRlYnVnKQorCSAgICBpZiAoVl9yc3ZwZGVidWcpCiAJCXByaW50ZigicnN2cF9pbnB1
dDogU2VuZGluZyBwYWNrZXQgdXAgb2xkLXN0eWxlIHNvY2tldFxuIik7CiAJICAgIHJpcF9pbnB1
dChtLCBvZmYpOyAgLyogeHh4ICovCiAJfSBlbHNlIHsKLQkgICAgaWYgKHJzdnBkZWJ1ZyAmJiB2
aWZpID09IG51bXZpZnMpCisJICAgIGlmIChWX3JzdnBkZWJ1ZyAmJiB2aWZpID09IFZfbnVtdmlm
cykKIAkJcHJpbnRmKCJyc3ZwX2lucHV0OiBDYW4ndCBmaW5kIHZpZiBmb3IgcGFja2V0LlxuIik7
Ci0JICAgIGVsc2UgaWYgKHJzdnBkZWJ1ZyAmJiB2aWZ0YWJsZVt2aWZpXS52X3JzdnBkID09IE5V
TEwpCisJICAgIGVsc2UgaWYgKFZfcnN2cGRlYnVnICYmIFZfdmlmdGFibGVbdmlmaV0udl9yc3Zw
ZCA9PSBOVUxMKQogCQlwcmludGYoInJzdnBfaW5wdXQ6IE5vIHNvY2tldCBkZWZpbmVkIGZvciB2
aWYgJWRcbiIsdmlmaSk7CiAJICAgIG1fZnJlZW0obSk7CiAJfQpAQCAtMTk1NiwxNSArMjA0MSwx
NSBAQAogICAgIH0KICAgICByc3ZwX3NyYy5zaW5fYWRkciA9IGlwLT5pcF9zcmM7CiAKLSAgICBp
ZiAocnN2cGRlYnVnICYmIG0pCisgICAgaWYgKFZfcnN2cGRlYnVnICYmIG0pCiAJcHJpbnRmKCJy
c3ZwX2lucHV0OiBtLT5tX2xlbiA9ICVkLCBzYnNwYWNlKCkgPSAlbGRcbiIsCi0JICAgICAgIG0t
Pm1fbGVuLHNic3BhY2UoJih2aWZ0YWJsZVt2aWZpXS52X3JzdnBkLT5zb19yY3YpKSk7CisJICAg
ICAgIG0tPm1fbGVuLHNic3BhY2UoJihWX3ZpZnRhYmxlW3ZpZmldLnZfcnN2cGQtPnNvX3Jjdikp
KTsKIAotICAgIGlmIChzb2NrZXRfc2VuZCh2aWZ0YWJsZVt2aWZpXS52X3JzdnBkLCBtLCAmcnN2
cF9zcmMpIDwgMCkgewotCWlmIChyc3ZwZGVidWcpCisgICAgaWYgKHNvY2tldF9zZW5kKFZfdmlm
dGFibGVbdmlmaV0udl9yc3ZwZCwgbSwgJnJzdnBfc3JjKSA8IDApIHsKKwlpZiAoVl9yc3ZwZGVi
dWcpCiAJICAgIHByaW50ZigicnN2cF9pbnB1dDogRmFpbGVkIHRvIGFwcGVuZCB0byBzb2NrZXRc
biIpOwogICAgIH0gZWxzZSB7Ci0JaWYgKHJzdnBkZWJ1ZykKKwlpZiAoVl9yc3ZwZGVidWcpCiAJ
ICAgIHByaW50ZigicnN2cF9pbnB1dDogc2VuZCBwYWNrZXQgdXBcbiIpOwogICAgIH0KICAgICBW
SUZfVU5MT0NLKCk7CkBAIC0yMDA0LDYgKzIwODksNyBAQAogc3RhdGljIGludAogYWRkX2J3X3Vw
Y2FsbChzdHJ1Y3QgYndfdXBjYWxsICpyZXEpCiB7CisgICAgSU5JVF9WTkVUX0lORVQoY3Vydm5l
dCk7CiAgICAgc3RydWN0IG1mYyAqbWZjOwogICAgIHN0cnVjdCB0aW1ldmFsIGRlbHRhID0geyBC
V19VUENBTExfVEhSRVNIT0xEX0lOVEVSVkFMX01JTl9TRUMsCiAJCUJXX1VQQ0FMTF9USFJFU0hP
TERfSU5URVJWQUxfTUlOX1VTRUMgfTsKQEAgLTIwMTEsNyArMjA5Nyw3IEBACiAgICAgc3RydWN0
IGJ3X21ldGVyICp4OwogICAgIHVpbnQzMl90IGZsYWdzOwogCi0gICAgaWYgKCEobXJ0X2FwaV9j
b25maWcgJiBNUlRfTUZDX0JXX1VQQ0FMTCkpCisgICAgaWYgKCEoVl9tcnRfYXBpX2NvbmZpZyAm
IE1SVF9NRkNfQldfVVBDQUxMKSkKIAlyZXR1cm4gRU9QTk9UU1VQUDsKIAogICAgIC8qIFRlc3Qg
aWYgdGhlIGZsYWdzIGFyZSB2YWxpZCAqLwpAQCAtMjA5NiwxMCArMjE4MiwxMSBAQAogc3RhdGlj
IGludAogZGVsX2J3X3VwY2FsbChzdHJ1Y3QgYndfdXBjYWxsICpyZXEpCiB7CisgICAgSU5JVF9W
TkVUX0lORVQoY3Vydm5ldCk7CiAgICAgc3RydWN0IG1mYyAqbWZjOwogICAgIHN0cnVjdCBid19t
ZXRlciAqeDsKIAotICAgIGlmICghKG1ydF9hcGlfY29uZmlnICYgTVJUX01GQ19CV19VUENBTEwp
KQorICAgIGlmICghKFZfbXJ0X2FwaV9jb25maWcgJiBNUlRfTUZDX0JXX1VQQ0FMTCkpCiAJcmV0
dXJuIEVPUE5PVFNVUFA7CiAKICAgICBNRkNfTE9DSygpOwpAQCAtMjI1Miw2ICsyMzM5LDcgQEAK
IHN0YXRpYyB2b2lkCiBid19tZXRlcl9wcmVwYXJlX3VwY2FsbChzdHJ1Y3QgYndfbWV0ZXIgKngs
IHN0cnVjdCB0aW1ldmFsICpub3dwKQogeworICAgIElOSVRfVk5FVF9JTkVUKGN1cnZuZXQpOwog
ICAgIHN0cnVjdCB0aW1ldmFsIGRlbHRhOwogICAgIHN0cnVjdCBid191cGNhbGwgKnU7CiAKQEAg
LTIyNjYsMTMgKzIzNTQsMTMgQEAKICAgICAvKgogICAgICAqIElmIHRoZXJlIGFyZSB0b28gbWFu
eSBwZW5kaW5nIHVwY2FsbHMsIGRlbGl2ZXIgdGhlbSBub3cKICAgICAgKi8KLSAgICBpZiAoYndf
dXBjYWxsc19uID49IEJXX1VQQ0FMTFNfTUFYKQorICAgIGlmIChWX2J3X3VwY2FsbHNfbiA+PSBC
V19VUENBTExTX01BWCkKIAlid191cGNhbGxzX3NlbmQoKTsKIAogICAgIC8qCiAgICAgICogU2V0
IHRoZSBid191cGNhbGwgZW50cnkKICAgICAgKi8KLSAgICB1ID0gJmJ3X3VwY2FsbHNbYndfdXBj
YWxsc19uKytdOworICAgIHUgPSAmVl9id191cGNhbGxzW1ZfYndfdXBjYWxsc19uKytdOwogICAg
IHUtPmJ1X3NyYyA9IHgtPmJtX21mYy0+bWZjX29yaWdpbjsKICAgICB1LT5idV9kc3QgPSB4LT5i
bV9tZmMtPm1mY19tY2FzdGdycDsKICAgICB1LT5idV90aHJlc2hvbGQuYl90aW1lID0geC0+Ym1f
dGhyZXNob2xkLmJfdGltZTsKQEAgLTIzMDAsNyArMjM4OCw3IEBACiB7CiAgICAgSU5JVF9WTkVU
X0lORVQoY3Vydm5ldCk7CiAgICAgc3RydWN0IG1idWYgKm07Ci0gICAgaW50IGxlbiA9IGJ3X3Vw
Y2FsbHNfbiAqIHNpemVvZihid191cGNhbGxzWzBdKTsKKyAgICBpbnQgbGVuID0gVl9id191cGNh
bGxzX24gKiBzaXplb2YoVl9id191cGNhbGxzWzBdKTsKICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4g
a19pZ21wc3JjID0geyBzaXplb2Yga19pZ21wc3JjLCBBRl9JTkVUIH07CiAgICAgc3RhdGljIHN0
cnVjdCBpZ21wbXNnIGlnbXBtc2cgPSB7IDAsCQkvKiB1bnVzZWQxICovCiAJCQkJICAgICAgMCwJ
CS8qIHVudXNlZDIgKi8KQEAgLTIzMTMsMTAgKzI0MDEsMTAgQEAKIAogICAgIE1GQ19MT0NLX0FT
U0VSVCgpOwogCi0gICAgaWYgKGJ3X3VwY2FsbHNfbiA9PSAwKQorICAgIGlmIChWX2J3X3VwY2Fs
bHNfbiA9PSAwKQogCXJldHVybjsJCQkvKiBObyBwZW5kaW5nIHVwY2FsbHMgKi8KIAotICAgIGJ3
X3VwY2FsbHNfbiA9IDA7CisgICAgVl9id191cGNhbGxzX24gPSAwOwogCiAgICAgLyoKICAgICAg
KiBBbGxvY2F0ZSBhIG5ldyBtYnVmLCBpbml0aWFsaXplIGl0IHdpdGggdGhlIGhlYWRlciBhbmQK
QEAgLTIzMzAsMTYgKzI0MTgsMTYgQEAKIAogICAgIG0tPm1fbGVuID0gbS0+bV9wa3RoZHIubGVu
ID0gMDsKICAgICBtX2NvcHliYWNrKG0sIDAsIHNpemVvZihzdHJ1Y3QgaWdtcG1zZyksIChjYWRk
cl90KSZpZ21wbXNnKTsKLSAgICBtX2NvcHliYWNrKG0sIHNpemVvZihzdHJ1Y3QgaWdtcG1zZyks
IGxlbiwgKGNhZGRyX3QpJmJ3X3VwY2FsbHNbMF0pOworICAgIG1fY29weWJhY2sobSwgc2l6ZW9m
KHN0cnVjdCBpZ21wbXNnKSwgbGVuLCAoY2FkZHJfdCkmVl9id191cGNhbGxzWzBdKTsKIAogICAg
IC8qCiAgICAgICogU2VuZCB0aGUgdXBjYWxscwogICAgICAqIFhYWCBkbyB3ZSBuZWVkIHRvIHNl
dCB0aGUgYWRkcmVzcyBpbiBrX2lnbXBzcmMgPwogICAgICAqLwotICAgIG1ydHN0YXQubXJ0c191
cGNhbGxzKys7CisgICAgVl9tcnRzdGF0Lm1ydHNfdXBjYWxscysrOwogICAgIGlmIChzb2NrZXRf
c2VuZChWX2lwX21yb3V0ZXIsIG0sICZrX2lnbXBzcmMpIDwgMCkgewogCWxvZyhMT0dfV0FSTklO
RywgImJ3X3VwY2FsbHNfc2VuZDogaXBfbXJvdXRlciBzb2NrZXQgcXVldWUgZnVsbFxuIik7Ci0J
KyttcnRzdGF0Lm1ydHNfdXBxX3NvY2tmdWxsOworCSsrVl9tcnRzdGF0Lm1ydHNfdXBxX3NvY2tm
dWxsOwogICAgIH0KIH0KIApAQCAtMjM2NCw2ICsyNDUyLDcgQEAKIHN0YXRpYyB2b2lkCiBzY2hl
ZHVsZV9id19tZXRlcihzdHJ1Y3QgYndfbWV0ZXIgKngsIHN0cnVjdCB0aW1ldmFsICpub3dwKQog
eworICAgIElOSVRfVk5FVF9JTkVUKGN1cnZuZXQpOwogICAgIGludCB0aW1lX2hhc2g7CiAKICAg
ICBNRkNfTE9DS19BU1NFUlQoKTsKQEAgLTIzODMsOCArMjQ3Miw4IEBACiAgICAgICogQ29tcHV0
ZSB0aGUgdGltZW91dCBoYXNoIHZhbHVlIGFuZCBpbnNlcnQgdGhlIGVudHJ5CiAgICAgICovCiAg
ICAgQldfTUVURVJfVElNRUhBU0goeCwgdGltZV9oYXNoKTsKLSAgICB4LT5ibV90aW1lX25leHQg
PSBid19tZXRlcl90aW1lcnNbdGltZV9oYXNoXTsKLSAgICBid19tZXRlcl90aW1lcnNbdGltZV9o
YXNoXSA9IHg7CisgICAgeC0+Ym1fdGltZV9uZXh0ID0gVl9id19tZXRlcl90aW1lcnNbdGltZV9o
YXNoXTsKKyAgICBWX2J3X21ldGVyX3RpbWVyc1t0aW1lX2hhc2hdID0geDsKICAgICB4LT5ibV90
aW1lX2hhc2ggPSB0aW1lX2hhc2g7CiB9CiAKQEAgLTIzOTUsNiArMjQ4NCw3IEBACiBzdGF0aWMg
dm9pZAogdW5zY2hlZHVsZV9id19tZXRlcihzdHJ1Y3QgYndfbWV0ZXIgKngpCiB7CisgICAgSU5J
VF9WTkVUX0lORVQoY3Vydm5ldCk7CiAgICAgaW50IHRpbWVfaGFzaDsKICAgICBzdHJ1Y3QgYndf
bWV0ZXIgKnByZXYsICp0bXA7CiAKQEAgLTI0MTAsNyArMjUwMCw3IEBACiAgICAgaWYgKHRpbWVf
aGFzaCA+PSBCV19NRVRFUl9CVUNLRVRTKQogCXJldHVybjsJCS8qIEVudHJ5IHdhcyBub3Qgc2No
ZWR1bGVkICovCiAKLSAgICBmb3IgKHByZXYgPSBOVUxMLCB0bXAgPSBid19tZXRlcl90aW1lcnNb
dGltZV9oYXNoXTsKKyAgICBmb3IgKHByZXYgPSBOVUxMLCB0bXAgPSBWX2J3X21ldGVyX3RpbWVy
c1t0aW1lX2hhc2hdOwogCSAgICAgdG1wICE9IE5VTEw7IHByZXYgPSB0bXAsIHRtcCA9IHRtcC0+
Ym1fdGltZV9uZXh0KQogCWlmICh0bXAgPT0geCkKIAkgICAgYnJlYWs7CkBAIC0yNDIxLDcgKzI1
MTEsNyBAQAogICAgIGlmIChwcmV2ICE9IE5VTEwpCiAJcHJldi0+Ym1fdGltZV9uZXh0ID0geC0+
Ym1fdGltZV9uZXh0OwogICAgIGVsc2UKLQlid19tZXRlcl90aW1lcnNbdGltZV9oYXNoXSA9IHgt
PmJtX3RpbWVfbmV4dDsKKwlWX2J3X21ldGVyX3RpbWVyc1t0aW1lX2hhc2hdID0geC0+Ym1fdGlt
ZV9uZXh0OwogCiAgICAgeC0+Ym1fdGltZV9uZXh0ID0gTlVMTDsKICAgICB4LT5ibV90aW1lX2hh
c2ggPSBCV19NRVRFUl9CVUNLRVRTOwpAQCAtMjQ0MCw2ICsyNTMwLDcgQEAKIHN0YXRpYyB2b2lk
CiBid19tZXRlcl9wcm9jZXNzKCkKIHsKKyAgICBJTklUX1ZORVRfSU5FVChjdXJ2bmV0KTsKICAg
ICBzdGF0aWMgdWludDMyX3QgbGFzdF90dl9zZWM7CS8qIGxhc3QgdGltZSB3ZSBwcm9jZXNzZWQg
dGhpcyAqLwogCiAgICAgdWludDMyX3QgbG9vcHM7CkBAIC0yNDY4LDggKzI1NTksOCBAQAogCSAg
ICBpID0gMDsKIAogCS8qIERpc2Nvbm5lY3QgdGhlIGxpc3Qgb2YgYndfbWV0ZXIgZW50cmllcyBm
cm9tIHRoZSBiaW4gKi8KLQl0bXBfbGlzdCA9IGJ3X21ldGVyX3RpbWVyc1tpXTsKLQlid19tZXRl
cl90aW1lcnNbaV0gPSBOVUxMOworCXRtcF9saXN0ID0gVl9id19tZXRlcl90aW1lcnNbaV07CisJ
Vl9id19tZXRlcl90aW1lcnNbaV0gPSBOVUxMOwogCiAJLyogUHJvY2VzcyB0aGUgbGlzdCBvZiBi
d19tZXRlciBlbnRyaWVzICovCiAJd2hpbGUgKHRtcF9saXN0ICE9IE5VTEwpIHsKQEAgLTI0OTIs
OCArMjU4Myw4IEBACiAJCSAgICBpZiAoKyt0aW1lX2hhc2ggPj0gQldfTUVURVJfQlVDS0VUUykK
IAkJCXRpbWVfaGFzaCA9IDA7CiAJCX0KLQkJeC0+Ym1fdGltZV9uZXh0ID0gYndfbWV0ZXJfdGlt
ZXJzW3RpbWVfaGFzaF07Ci0JCWJ3X21ldGVyX3RpbWVyc1t0aW1lX2hhc2hdID0geDsKKwkJeC0+
Ym1fdGltZV9uZXh0ID0gVl9id19tZXRlcl90aW1lcnNbdGltZV9oYXNoXTsKKwkJVl9id19tZXRl
cl90aW1lcnNbdGltZV9oYXNoXSA9IHg7CiAJCXgtPmJtX3RpbWVfaGFzaCA9IHRpbWVfaGFzaDsK
IAogCQljb250aW51ZTsKQEAgLTI1MzAsMTEgKzI2MjEsMTIgQEAKIGV4cGlyZV9id191cGNhbGxz
X3NlbmQodm9pZCAqdW51c2VkKQogewogICAgIE1GQ19MT0NLKCk7CisgICAgVk5FVF9JVEVSTE9P
UF9CRUdJTigpOwogICAgIGJ3X3VwY2FsbHNfc2VuZCgpOwotICAgIE1GQ19VTkxPQ0soKTsKLQor
ICAgIFZORVRfSVRFUkxPT1BfRU5EKCk7CiAgICAgY2FsbG91dF9yZXNldCgmYndfdXBjYWxsc19j
aCwgQldfVVBDQUxMU19QRVJJT0QsCiAJZXhwaXJlX2J3X3VwY2FsbHNfc2VuZCwgTlVMTCk7Cisg
ICAgTUZDX1VOTE9DSygpOwogfQogCiAvKgpAQCAtMjU0NCw4ICsyNjM2LDExIEBACiBzdGF0aWMg
dm9pZAogZXhwaXJlX2J3X21ldGVyX3Byb2Nlc3Modm9pZCAqdW51c2VkKQogewotICAgIGlmICht
cnRfYXBpX2NvbmZpZyAmIE1SVF9NRkNfQldfVVBDQUxMKQorICAgIFZORVRfSVRFUkxPT1BfQkVH
SU4oKTsKKyAgICBJTklUX1ZORVRfSU5FVChjdXJ2bmV0KTsKKyAgICBpZiAoVl9tcnRfYXBpX2Nv
bmZpZyAmIE1SVF9NRkNfQldfVVBDQUxMKQogCWJ3X21ldGVyX3Byb2Nlc3MoKTsKKyAgICBWTkVU
X0lURVJMT09QX0VORCgpOwogCiAgICAgY2FsbG91dF9yZXNldCgmYndfbWV0ZXJfY2gsIEJXX01F
VEVSX1BFUklPRCwgZXhwaXJlX2J3X21ldGVyX3Byb2Nlc3MsIE5VTEwpOwogfQpAQCAtMjU2Miwx
NiArMjY1NywxNyBAQAogcGltX3JlZ2lzdGVyX3NlbmQoc3RydWN0IGlwICppcCwgc3RydWN0IHZp
ZiAqdmlmcCwgc3RydWN0IG1idWYgKm0sCiAgICAgc3RydWN0IG1mYyAqcnQpCiB7CisgICAgSU5J
VF9WTkVUX0lORVQoY3Vydm5ldCk7CiAgICAgc3RydWN0IG1idWYgKm1iX2NvcHksICptbTsKIAot
ICAgIGlmIChtcnRkZWJ1ZyAmIERFQlVHX1BJTSkKKyAgICBpZiAoVl9tcnRkZWJ1ZyAmIERFQlVH
X1BJTSkKIAlsb2coTE9HX0RFQlVHLCAicGltX3JlZ2lzdGVyX3NlbmQ6ICIpOwogCiAgICAgLyoK
ICAgICAgKiBEbyBub3Qgc2VuZCBJR01QX1dIT0xFUEtUIG5vdGlmaWNhdGlvbnMgdG8gdXNlcmxh
bmQsIGlmIHRoZQogICAgICAqIHJlbmRlenZvdXMgcG9pbnQgd2FzIHVuc3BlY2lmaWVkLCBhbmQg
d2Ugd2VyZSB0b2xkIG5vdCB0by4KICAgICAgKi8KLSAgICBpZiAocGltX3NxdWVsY2hfd2hvbGVw
a3QgIT0gMCAmJiAobXJ0X2FwaV9jb25maWcgJiBNUlRfTUZDX1JQKSAmJgorICAgIGlmIChwaW1f
c3F1ZWxjaF93aG9sZXBrdCAhPSAwICYmIChWX21ydF9hcGlfY29uZmlnICYgTVJUX01GQ19SUCkg
JiYKIAkocnQtPm1mY19ycC5zX2FkZHIgPT0gSU5BRERSX0FOWSkpCiAJcmV0dXJuIDA7CiAKQEAg
LTI1ODksNyArMjY4NSw3IEBACiAJbW0gPSBtX3B1bGx1cChtbSwgc2l6ZW9mKHN0cnVjdCBpcCkp
OwogCWlmIChtbSAhPSBOVUxMKSB7CiAJICAgIGlwID0gbXRvZChtbSwgc3RydWN0IGlwICopOwot
CSAgICBpZiAoKG1ydF9hcGlfY29uZmlnICYgTVJUX01GQ19SUCkgJiYKKwkgICAgaWYgKChWX21y
dF9hcGlfY29uZmlnICYgTVJUX01GQ19SUCkgJiYKIAkJKHJ0LT5tZmNfcnAuc19hZGRyICE9IElO
QUREUl9BTlkpKSB7CiAJCXBpbV9yZWdpc3Rlcl9zZW5kX3JwKGlwLCB2aWZwLCBtbSwgcnQpOwog
CSAgICB9IGVsc2UgewpAQCAtMjY4NCwyNSArMjc4MCwyNSBAQAogICAgIGltID0gbXRvZChtYl9m
aXJzdCwgc3RydWN0IGlnbXBtc2cgKik7CiAgICAgaW0tPmltX21zZ3R5cGUJPSBJR01QTVNHX1dI
T0xFUEtUOwogICAgIGltLT5pbV9tYnoJCT0gMDsKLSAgICBpbS0+aW1fdmlmCQk9IHZpZnAgLSB2
aWZ0YWJsZTsKKyAgICBpbS0+aW1fdmlmCQk9IHZpZnAgLSBWX3ZpZnRhYmxlOwogICAgIGltLT5p
bV9zcmMJCT0gaXAtPmlwX3NyYzsKICAgICBpbS0+aW1fZHN0CQk9IGlwLT5pcF9kc3Q7CiAKICAg
ICBrX2lnbXBzcmMuc2luX2FkZHIJPSBpcC0+aXBfc3JjOwogCi0gICAgbXJ0c3RhdC5tcnRzX3Vw
Y2FsbHMrKzsKKyAgICBWX21ydHN0YXQubXJ0c191cGNhbGxzKys7CiAKICAgICBpZiAoc29ja2V0
X3NlbmQoVl9pcF9tcm91dGVyLCBtYl9maXJzdCwgJmtfaWdtcHNyYykgPCAwKSB7Ci0JaWYgKG1y
dGRlYnVnICYgREVCVUdfUElNKQorCWlmIChWX21ydGRlYnVnICYgREVCVUdfUElNKQogCSAgICBs
b2coTE9HX1dBUk5JTkcsCiAJCSJtY2FzdDogcGltX3JlZ2lzdGVyX3NlbmRfdXBjYWxsOiBpcF9t
cm91dGVyIHNvY2tldCBxdWV1ZSBmdWxsIik7Ci0JKyttcnRzdGF0Lm1ydHNfdXBxX3NvY2tmdWxs
OworCSsrVl9tcnRzdGF0Lm1ydHNfdXBxX3NvY2tmdWxsOwogCXJldHVybiBFTk9CVUZTOwogICAg
IH0KIAogICAgIC8qIEtlZXAgc3RhdGlzdGljcyAqLwotICAgIHBpbXN0YXQucGltc19zbmRfcmVn
aXN0ZXJzX21zZ3MrKzsKLSAgICBwaW1zdGF0LnBpbXNfc25kX3JlZ2lzdGVyc19ieXRlcyArPSBs
ZW47CisgICAgVl9waW1zdGF0LnBpbXNfc25kX3JlZ2lzdGVyc19tc2dzKys7CisgICAgVl9waW1z
dGF0LnBpbXNfc25kX3JlZ2lzdGVyc19ieXRlcyArPSBsZW47CiAKICAgICByZXR1cm4gMDsKIH0K
QEAgLTI3MjMsNyArMjgxOSw3IEBACiAKICAgICBWSUZfTE9DS19BU1NFUlQoKTsKIAotICAgIGlm
ICgodmlmaSA+PSBudW12aWZzKSB8fCAodmlmdGFibGVbdmlmaV0udl9sY2xfYWRkci5zX2FkZHIg
PT0gMCkpIHsKKyAgICBpZiAoKHZpZmkgPj0gVl9udW12aWZzKSB8fCAoVl92aWZ0YWJsZVt2aWZp
XS52X2xjbF9hZGRyLnNfYWRkciA9PSAwKSkgewogCW1fZnJlZW0obWJfY29weSk7CiAJcmV0dXJu
IEVBRERSTk9UQVZBSUw7CQkvKiBUaGUgaWlmIHZpZiBpcyBpbnZhbGlkICovCiAgICAgfQpAQCAt
Mjc0OSw3ICsyODQ1LDcgQEAKICAgICAqaXBfb3V0ZXIgPSBwaW1fZW5jYXBfaXBoZHI7CiAgICAg
aXBfb3V0ZXItPmlwX2lkID0gaXBfbmV3aWQoKTsKICAgICBpcF9vdXRlci0+aXBfbGVuID0gbGVu
ICsgc2l6ZW9mKHBpbV9lbmNhcF9pcGhkcikgKyBzaXplb2YocGltX2VuY2FwX3BpbWhkcik7Ci0g
ICAgaXBfb3V0ZXItPmlwX3NyYyA9IHZpZnRhYmxlW3ZpZmldLnZfbGNsX2FkZHI7CisgICAgaXBf
b3V0ZXItPmlwX3NyYyA9IFZfdmlmdGFibGVbdmlmaV0udl9sY2xfYWRkcjsKICAgICBpcF9vdXRl
ci0+aXBfZHN0ID0gcnQtPm1mY19ycDsKICAgICAvKgogICAgICAqIENvcHkgdGhlIGlubmVyIGhl
YWRlciBUT1MgdG8gdGhlIG91dGVyIGhlYWRlciwgYW5kIHRha2UgY2FyZSBvZiB0aGUKQEAgLTI3
NjIsNyArMjg1OCw3IEBACiAJCQkJCSArIHNpemVvZihwaW1fZW5jYXBfaXBoZHIpKTsKICAgICAq
cGltaGRyID0gcGltX2VuY2FwX3BpbWhkcjsKICAgICAvKiBJZiB0aGUgaWlmIGNyb3NzZXMgYSBi
b3JkZXIsIHNldCB0aGUgQm9yZGVyLWJpdCAqLwotICAgIGlmIChydC0+bWZjX2ZsYWdzW3ZpZmld
ICYgTVJUX01GQ19GTEFHU19CT1JERVJfVklGICYgbXJ0X2FwaV9jb25maWcpCisgICAgaWYgKHJ0
LT5tZmNfZmxhZ3NbdmlmaV0gJiBNUlRfTUZDX0ZMQUdTX0JPUkRFUl9WSUYgJiBWX21ydF9hcGlf
Y29uZmlnKQogCXBpbWhkci0+ZmxhZ3MgfD0gaHRvbmwoUElNX0JPUkRFUl9SRUdJU1RFUik7CiAK
ICAgICBtYl9maXJzdC0+bV9kYXRhICs9IHNpemVvZihwaW1fZW5jYXBfaXBoZHIpOwpAQCAtMjc3
Miw4ICsyODY4LDggQEAKICAgICBzZW5kX3BhY2tldCh2aWZwLCBtYl9maXJzdCk7CiAKICAgICAv
KiBLZWVwIHN0YXRpc3RpY3MgKi8KLSAgICBwaW1zdGF0LnBpbXNfc25kX3JlZ2lzdGVyc19tc2dz
Kys7Ci0gICAgcGltc3RhdC5waW1zX3NuZF9yZWdpc3RlcnNfYnl0ZXMgKz0gbGVuOworICAgIFZf
cGltc3RhdC5waW1zX3NuZF9yZWdpc3RlcnNfbXNncysrOworICAgIFZfcGltc3RhdC5waW1zX3Nu
ZF9yZWdpc3RlcnNfYnl0ZXMgKz0gbGVuOwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC0yODA3LDYg
KzI5MDMsNyBAQAogdm9pZAogcGltX2lucHV0KHN0cnVjdCBtYnVmICptLCBpbnQgb2ZmKQogewor
ICAgIElOSVRfVk5FVF9JTkVUKGN1cnZuZXQpOwogICAgIHN0cnVjdCBpcCAqaXAgPSBtdG9kKG0s
IHN0cnVjdCBpcCAqKTsKICAgICBzdHJ1Y3QgcGltICpwaW07CiAgICAgaW50IG1pbmxlbjsKQEAg
LTI4MTUsMTQgKzI5MTIsMTQgQEAKICAgICBpbnQgaXBobGVuID0gb2ZmOwogCiAgICAgLyogS2Vl
cCBzdGF0aXN0aWNzICovCi0gICAgcGltc3RhdC5waW1zX3Jjdl90b3RhbF9tc2dzKys7Ci0gICAg
cGltc3RhdC5waW1zX3Jjdl90b3RhbF9ieXRlcyArPSBkYXRhbGVuOworICAgIFZfcGltc3RhdC5w
aW1zX3Jjdl90b3RhbF9tc2dzKys7CisgICAgVl9waW1zdGF0LnBpbXNfcmN2X3RvdGFsX2J5dGVz
ICs9IGRhdGFsZW47CiAKICAgICAvKgogICAgICAqIFZhbGlkYXRlIGxlbmd0aHMKICAgICAgKi8K
ICAgICBpZiAoZGF0YWxlbiA8IFBJTV9NSU5MRU4pIHsKLQlwaW1zdGF0LnBpbXNfcmN2X3Rvb3No
b3J0Kys7CisJVl9waW1zdGF0LnBpbXNfcmN2X3Rvb3Nob3J0Kys7CiAJbG9nKExPR19FUlIsICJw
aW1faW5wdXQ6IHBhY2tldCBzaXplIHRvbyBzbWFsbCAlZCBmcm9tICVseFxuIiwKIAkgICAgZGF0
YWxlbiwgKHVfbG9uZylpcC0+aXBfc3JjLnNfYWRkcik7CiAJbV9mcmVlbShtKTsKQEAgLTI4NjYs
OCArMjk2Myw4IEBACiAgICAgaWYgKFBJTV9WVF9UKHBpbS0+cGltX3Z0KSA9PSBQSU1fUkVHSVNU
RVIgJiYgaW5fY2tzdW0obSwgUElNX01JTkxFTikgPT0gMCkgewogCS8qIGRvIG5vdGhpbmcsIGNo
ZWNrc3VtIG9rYXkgKi8KICAgICB9IGVsc2UgaWYgKGluX2Nrc3VtKG0sIGRhdGFsZW4pKSB7Ci0J
cGltc3RhdC5waW1zX3Jjdl9iYWRzdW0rKzsKLQlpZiAobXJ0ZGVidWcgJiBERUJVR19QSU0pCisJ
Vl9waW1zdGF0LnBpbXNfcmN2X2JhZHN1bSsrOworCWlmIChWX21ydGRlYnVnICYgREVCVUdfUElN
KQogCSAgICBsb2coTE9HX0RFQlVHLCAicGltX2lucHV0OiBpbnZhbGlkIGNoZWNrc3VtIik7CiAJ
bV9mcmVlbShtKTsKIAlyZXR1cm47CkBAIC0yODc1LDcgKzI5NzIsNyBAQAogCiAgICAgLyogUElN
IHZlcnNpb24gY2hlY2sgKi8KICAgICBpZiAoUElNX1ZUX1YocGltLT5waW1fdnQpIDwgUElNX1ZF
UlNJT04pIHsKLQlwaW1zdGF0LnBpbXNfcmN2X2JhZHZlcnNpb24rKzsKKwlWX3BpbXN0YXQucGlt
c19yY3ZfYmFkdmVyc2lvbisrOwogCWxvZyhMT0dfRVJSLCAicGltX2lucHV0OiBpbmNvcnJlY3Qg
dmVyc2lvbiAlZCwgZXhwZWN0aW5nICVkXG4iLAogCSAgICBQSU1fVlRfVihwaW0tPnBpbV92dCks
IFBJTV9WRVJTSU9OKTsKIAltX2ZyZWVtKG0pOwpAQCAtMjg5OSwyNCArMjk5NiwyNCBAQAogCXN0
cnVjdCBpZm5ldCAqdmlmcDsKIAogCVZJRl9MT0NLKCk7Ci0JaWYgKChyZWdfdmlmX251bSA+PSBu
dW12aWZzKSB8fCAocmVnX3ZpZl9udW0gPT0gVklGSV9JTlZBTElEKSkgeworCWlmICgoVl9yZWdf
dmlmX251bSA+PSBWX251bXZpZnMpIHx8IChWX3JlZ192aWZfbnVtID09IFZJRklfSU5WQUxJRCkp
IHsKIAkgICAgVklGX1VOTE9DSygpOwotCSAgICBpZiAobXJ0ZGVidWcgJiBERUJVR19QSU0pCisJ
ICAgIGlmIChWX21ydGRlYnVnICYgREVCVUdfUElNKQogCQlsb2coTE9HX0RFQlVHLAotCQkgICAg
InBpbV9pbnB1dDogcmVnaXN0ZXIgdmlmIG5vdCBzZXQ6ICVkXG4iLCByZWdfdmlmX251bSk7CisJ
CSAgICAicGltX2lucHV0OiByZWdpc3RlciB2aWYgbm90IHNldDogJWRcbiIsIFZfcmVnX3ZpZl9u
dW0pOwogCSAgICBtX2ZyZWVtKG0pOwogCSAgICByZXR1cm47CiAJfQogCS8qIFhYWCBuZWVkIHJl
ZmNudD8gKi8KLQl2aWZwID0gdmlmdGFibGVbcmVnX3ZpZl9udW1dLnZfaWZwOworCXZpZnAgPSBW
X3ZpZnRhYmxlW1ZfcmVnX3ZpZl9udW1dLnZfaWZwOwogCVZJRl9VTkxPQ0soKTsKIAogCS8qCiAJ
ICogVmFsaWRhdGUgbGVuZ3RoCiAJICovCiAJaWYgKGRhdGFsZW4gPCBQSU1fUkVHX01JTkxFTikg
ewotCSAgICBwaW1zdGF0LnBpbXNfcmN2X3Rvb3Nob3J0Kys7Ci0JICAgIHBpbXN0YXQucGltc19y
Y3ZfYmFkcmVnaXN0ZXJzKys7CisJICAgIFZfcGltc3RhdC5waW1zX3Jjdl90b29zaG9ydCsrOwor
CSAgICBWX3BpbXN0YXQucGltc19yY3ZfYmFkcmVnaXN0ZXJzKys7CiAJICAgIGxvZyhMT0dfRVJS
LAogCQkicGltX2lucHV0OiByZWdpc3RlciBwYWNrZXQgc2l6ZSB0b28gc21hbGwgJWQgZnJvbSAl
bHhcbiIsCiAJCWRhdGFsZW4sICh1X2xvbmcpaXAtPmlwX3NyYy5zX2FkZHIpOwpAQCAtMjkyNyw3
ICszMDI0LDcgQEAKIAlyZWdoZHIgPSAodV9pbnQzMl90ICopKHBpbSArIDEpOwogCWVuY2FwX2lw
ID0gKHN0cnVjdCBpcCAqKShyZWdoZHIgKyAxKTsKIAotCWlmIChtcnRkZWJ1ZyAmIERFQlVHX1BJ
TSkgeworCWlmIChWX21ydGRlYnVnICYgREVCVUdfUElNKSB7CiAJICAgIGxvZyhMT0dfREVCVUcs
CiAJCSJwaW1faW5wdXRbcmVnaXN0ZXJdLCBlbmNhcF9pcDogJWx4IC0+ICVseCwgZW5jYXBfaXAg
bGVuICVkXG4iLAogCQkodV9sb25nKW50b2hsKGVuY2FwX2lwLT5pcF9zcmMuc19hZGRyKSwKQEAg
LTI5MzcsOCArMzAzNCw4IEBACiAKIAkvKiB2ZXJpZnkgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRo
ZSBpbm5lciBwYWNrZXQgKi8KIAlpZiAoZW5jYXBfaXAtPmlwX3YgIT0gSVBWRVJTSU9OKSB7Ci0J
ICAgIHBpbXN0YXQucGltc19yY3ZfYmFkcmVnaXN0ZXJzKys7Ci0JICAgIGlmIChtcnRkZWJ1ZyAm
IERFQlVHX1BJTSkgeworCSAgICBWX3BpbXN0YXQucGltc19yY3ZfYmFkcmVnaXN0ZXJzKys7CisJ
ICAgIGlmIChWX21ydGRlYnVnICYgREVCVUdfUElNKSB7CiAJCWxvZyhMT0dfREVCVUcsICJwaW1f
aW5wdXQ6IGludmFsaWQgSVAgdmVyc2lvbiAoJWQpICIKIAkJICAgICJvZiB0aGUgaW5uZXIgcGFj
a2V0XG4iLCBlbmNhcF9pcC0+aXBfdik7CiAJICAgIH0KQEAgLTI5NDgsOCArMzA0NSw4IEBACiAK
IAkvKiB2ZXJpZnkgdGhlIGlubmVyIHBhY2tldCBpcyBkZXN0aW5lZCB0byBhIG1jYXN0IGdyb3Vw
ICovCiAJaWYgKCFJTl9NVUxUSUNBU1QobnRvaGwoZW5jYXBfaXAtPmlwX2RzdC5zX2FkZHIpKSkg
ewotCSAgICBwaW1zdGF0LnBpbXNfcmN2X2JhZHJlZ2lzdGVycysrOwotCSAgICBpZiAobXJ0ZGVi
dWcgJiBERUJVR19QSU0pCisJICAgIFZfcGltc3RhdC5waW1zX3Jjdl9iYWRyZWdpc3RlcnMrKzsK
KwkgICAgaWYgKFZfbXJ0ZGVidWcgJiBERUJVR19QSU0pCiAJCWxvZyhMT0dfREVCVUcsCiAJCSAg
ICAicGltX2lucHV0OiBpbm5lciBwYWNrZXQgb2YgcmVnaXN0ZXIgaXMgbm90ICIKIAkJICAgICJt
dWx0aWNhc3QgJWx4XG4iLApAQCAtMzAwMCwyMSArMzA5NywyMSBAQAogCiAJLyogS2VlcCBzdGF0
aXN0aWNzICovCiAJLyogWFhYOiByZWdpc3RlcnNfYnl0ZXMgaW5jbHVkZSBvbmx5IHRoZSBlbmNh
cC4gbWNhc3QgcGt0ICovCi0JcGltc3RhdC5waW1zX3Jjdl9yZWdpc3RlcnNfbXNncysrOwotCXBp
bXN0YXQucGltc19yY3ZfcmVnaXN0ZXJzX2J5dGVzICs9IG50b2hzKGVuY2FwX2lwLT5pcF9sZW4p
OworCVZfcGltc3RhdC5waW1zX3Jjdl9yZWdpc3RlcnNfbXNncysrOworCVZfcGltc3RhdC5waW1z
X3Jjdl9yZWdpc3RlcnNfYnl0ZXMgKz0gbnRvaHMoZW5jYXBfaXAtPmlwX2xlbik7CiAKIAkvKgog
CSAqIGZvcndhcmQgdGhlIGlubmVyIGlwIHBhY2tldDsgcG9pbnQgbV9kYXRhIGF0IHRoZSBpbm5l
ciBpcC4KIAkgKi8KIAltX2FkaihtLCBpcGhsZW4gKyBQSU1fTUlOTEVOKTsKIAotCWlmIChtcnRk
ZWJ1ZyAmIERFQlVHX1BJTSkgeworCWlmIChWX21ydGRlYnVnICYgREVCVUdfUElNKSB7CiAJICAg
IGxvZyhMT0dfREVCVUcsCiAJCSJwaW1faW5wdXQ6IGZvcndhcmRpbmcgZGVjYXBzdWxhdGVkIHJl
Z2lzdGVyOiAiCiAJCSJzcmMgJWx4LCBkc3QgJWx4LCB2aWYgJWRcbiIsCiAJCSh1X2xvbmcpbnRv
aGwoZW5jYXBfaXAtPmlwX3NyYy5zX2FkZHIpLAogCQkodV9sb25nKW50b2hsKGVuY2FwX2lwLT5p
cF9kc3Quc19hZGRyKSwKLQkJcmVnX3ZpZl9udW0pOworCQlWX3JlZ192aWZfbnVtKTsKIAl9CiAJ
LyogTkI6IHZpZnAgd2FzIGNvbGxlY3RlZCBhYm92ZTsgY2FuIGl0IGNoYW5nZSBvbiB1cz8gKi8K
IAlpZl9zaW1sb29wKHZpZnAsIG0sIGRzdC5zaW5fZmFtaWx5LCAwKTsKQEAgLTMwMzcsNiArMzEz
NCwxNCBAQAogICAgIHJldHVybjsKIH0KIAorI2lmZGVmIFZJTUFHRQordm9pZCAKK2lwX21yb3V0
ZXJfZGVzdHJveSgpCit7CisJWF9pcF9tcm91dGVyX2RvbmUoKTsKK30KKyNlbmRpZiAvKiBWSU1B
R0UgKi8KKwogLyoKICAqIFhYWDogVGhpcyBpcyBjb21tb24gY29kZSBmb3IgZGVhbGluZyB3aXRo
IGluaXRpYWxpemF0aW9uIGZvciBib3RoCiAgKiB0aGUgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qg
Zm9yd2FyZGluZyBwYXRocy4gSXQgY291bGQgZG8gd2l0aCBjbGVhbnVwLgpAQCAtMzA0Nyw5ICsz
MTUyLDE1IEBACiAgICAgSU5JVF9WTkVUX0lORVQoY3Vydm5ldCk7CiAgICAgc3dpdGNoICh0eXBl
KSB7CiAgICAgY2FzZSBNT0RfTE9BRDoKLQlNUk9VVEVSX0xPQ0tfSU5JVCgpOwotCU1GQ19MT0NL
X0lOSVQoKTsKLQlWSUZfTE9DS19JTklUKCk7CisjaWZkZWYgVklNQUdFCisJaWYgKElTX0RFRkFV
TFRfVk5FVChjdXJ2bmV0KSkgeworI2VuZGlmIC8qIFZJTUFHRSAqLworCSAgICBNUk9VVEVSX0xP
Q0tfSU5JVCgpOworCSAgICBNRkNfTE9DS19JTklUKCk7CisJICAgIFZJRl9MT0NLX0lOSVQoKTsK
KyNpZmRlZiBWSU1BR0UKKwl9CisjZW5kaWYgLyogVklNQUdFICovCiAJaXBfbXJvdXRlcl9yZXNl
dCgpOwogCVRVTkFCTEVfVUxPTkdfRkVUQ0goIm5ldC5pbmV0LnBpbS5zcXVlbGNoX3dob2xlcGt0
IiwKIAkgICAgJnBpbV9zcXVlbGNoX3dob2xlcGt0KTsKQEAgLTMwNTgsOSArMzE2OSwxNSBAQAog
CSAgICBwaW1fZW5jYXBjaGVjaywgJmluX3BpbV9wcm90b3N3LCBOVUxMKTsKIAlpZiAocGltX2Vu
Y2FwX2Nvb2tpZSA9PSBOVUxMKSB7CiAJCXByaW50ZigiaXBfbXJvdXRlOiB1bmFibGUgdG8gYXR0
YWNoIHBpbSBlbmNhcFxuIik7Ci0JCVZJRl9MT0NLX0RFU1RST1koKTsKLQkJTUZDX0xPQ0tfREVT
VFJPWSgpOwotCQlNUk9VVEVSX0xPQ0tfREVTVFJPWSgpOworI2lmZGVmIFZJTUFHRQorCQlpZiAo
SVNfREVGQVVMVF9WTkVUKGN1cnZuZXQpKSB7CisjZW5kaWYgLyogVklNQUdFICovCisJCSAgICBW
SUZfTE9DS19ERVNUUk9ZKCk7CisJCSAgICBNRkNfTE9DS19ERVNUUk9ZKCk7CisJCSAgICBNUk9V
VEVSX0xPQ0tfREVTVFJPWSgpOworI2lmZGVmIFZJTUFHRQorCQl9CisjZW5kaWYgLyogVklNQUdF
ICovCiAJCXJldHVybiAoRUlOVkFMKTsKIAl9CiAKQEAgLTMwNzMsOSArMzE5MCwxNSBAQAogCQkg
ICAgZW5jYXBfZGV0YWNoKHBpbV9lbmNhcF9jb29raWUpOwogCQkgICAgcGltX2VuY2FwX2Nvb2tp
ZSA9IE5VTEw7CiAJCX0KLQkJVklGX0xPQ0tfREVTVFJPWSgpOwotCQlNRkNfTE9DS19ERVNUUk9Z
KCk7Ci0JCU1ST1VURVJfTE9DS19ERVNUUk9ZKCk7CisjaWZkZWYgVklNQUdFCisJCWlmIChJU19E
RUZBVUxUX1ZORVQoY3Vydm5ldCkpIHsKKyNlbmRpZiAvKiBWSU1BR0UgKi8KKwkJICAgIFZJRl9M
T0NLX0RFU1RST1koKTsKKwkJICAgIE1GQ19MT0NLX0RFU1RST1koKTsKKwkJICAgIE1ST1VURVJf
TE9DS19ERVNUUk9ZKCk7CisjaWZkZWYgVklNQUdFCisJCX0KKyNlbmRpZiAvKiBWSU1BR0UgKi8K
IAkJcmV0dXJuIChFSU5WQUwpOwogCX0KICNlbmRpZgpAQCAtMzEzMSw2ICszMjU0LDggQEAKIAlt
cnQ2X2lvY3RsID0gTlVMTDsKICNlbmRpZgogCisJaWYgKFZfcmVnX3ZpZl9udW0gIT0gVklGSV9J
TlZBTElEKQorCSAgICBJRl9BRERSX0xPQ0tfREVTVFJPWSgmVl9tdWx0aWNhc3RfcmVnaXN0ZXJf
aWYpOwogCWlmIChwaW1fZW5jYXBfY29va2llKSB7CiAJICAgIGVuY2FwX2RldGFjaChwaW1fZW5j
YXBfY29va2llKTsKIAkgICAgcGltX2VuY2FwX2Nvb2tpZSA9IE5VTEw7CkBAIC0zMTQ5LDkgKzMy
NzQsMTUgQEAKIAltcnRfaW9jdGwgPSBOVUxMOwogCXJzdnBfaW5wdXRfcCA9IE5VTEw7CiAKLQlW
SUZfTE9DS19ERVNUUk9ZKCk7Ci0JTUZDX0xPQ0tfREVTVFJPWSgpOwotCU1ST1VURVJfTE9DS19E
RVNUUk9ZKCk7CisjaWZkZWYgVklNQUdFCisJaWYgKElTX0RFRkFVTFRfVk5FVChjdXJ2bmV0KSkg
eworI2VuZGlmIC8qIFZJTUFHRSAqLworCSAgICBWSUZfTE9DS19ERVNUUk9ZKCk7CisJICAgIE1G
Q19MT0NLX0RFU1RST1koKTsKKwkgICAgTVJPVVRFUl9MT0NLX0RFU1RST1koKTsKKyNpZmRlZiBW
SU1BR0UKKwl9CisjZW5kaWYgLyogVklNQUdFICovCiAJYnJlYWs7CiAKICAgICBkZWZhdWx0Ogpk
aWZmIC11ciBuZXRpbmV0L2lwX21yb3V0ZS5oLm9yaWcgbmV0aW5ldC9pcF9tcm91dGUuaAotLS0g
bmV0aW5ldC9pcF9tcm91dGUuaC5vcmlnCTIwMDgtMDctMjEgMTU6MzQ6MjIuMDAwMDAwMDAwIC0w
NzAwCisrKyBuZXRpbmV0L2lwX21yb3V0ZS5oCTIwMDgtMDctMjkgMTM6Mzc6NTYuMDAwMDAwMDAw
IC0wNzAwCkBAIC00Niw2ICs0Niw3IEBACiAgKiBNb2RpZmllZCBieSBBaml0IFRoeWFnYXJhamFu
LCBQQVJDLCBBdWd1c3QgMTk5NC4KICAqIE1vZGlmaWVkIGJ5IEFobWVkIEhlbG15LCBTR0ksIEp1
bmUgMTk5Ni4KICAqIE1vZGlmaWVkIGJ5IFBhdmxpbiBSYWRvc2xhdm92LCBJQ1NJLCBPY3RvYmVy
IDIwMDIuCisgKiBNb2RpZmllZCBieSBKZWZmIEFocmVuaG9seiwgQm9laW5nLCBKdWx5IDIwMDgu
ICh2aXJ0dWFsaXphdGlvbiBzdXBwb3J0KQogICoKICAqIE1ST1VUSU5HIFJldmlzaW9uOiAzLjMu
MS4zCiAgKiBhbmQgUElNLVNNdjIgYW5kIFBJTS1ETSBzdXBwb3J0LCBhZHZhbmNlZCBBUEkgc3Vw
cG9ydCwKQEAgLTgwLDYgKzgxLDkgQEAKIHR5cGVkZWYgdV9sb25nIHZpZmJpdG1hcF90OwogdHlw
ZWRlZiB1X3Nob3J0IHZpZmlfdDsJCS8qIHR5cGUgb2YgYSB2aWYgaW5kZXggKi8KICNkZWZpbmUg
QUxMX1ZJRlMgKHZpZmlfdCktMQorI2lmZGVmIFZJTUFHRQorI2RlZmluZQkJVklGSV9JTlZBTElE
CSgodmlmaV90KSAtMSkKKyNlbmRpZiAvKiBWSU1BR0UgKi8KIAogI2RlZmluZQlWSUZNX1NFVChu
LCBtKQkJKChtKSB8PSAoMSA8PCAobikpKQogI2RlZmluZQlWSUZNX0NMUihuLCBtKQkJKChtKSAm
PSB+KDEgPDwgKG4pKSkKQEAgLTIwNSw2ICsyMDksMTAgQEAKICNkZWZpbmUgQldfVVBDQUxMX1RI
UkVTSE9MRF9JTlRFUlZBTF9NSU5fU0VDCTMKICNkZWZpbmUgQldfVVBDQUxMX1RIUkVTSE9MRF9J
TlRFUlZBTF9NSU5fVVNFQwkwCiAKKyNpZmRlZiBWSU1BR0UKKyNkZWZpbmUgQldfTUVURVJfQlVD
S0VUUwkxMDI0CisjZW5kaWYgLyogVklNQUdFICovCisKIC8qCiAgKiBUaGUga2VybmVsJ3MgbXVs
dGljYXN0IHJvdXRpbmcgc3RhdGlzdGljcy4KICAqLwpkaWZmIC11ciBuZXRpbmV0L3BpbV92YXIu
aC5vcmlnIG5ldGluZXQvcGltX3Zhci5oCi0tLSBuZXRpbmV0L3BpbV92YXIuaC5vcmlnCTIwMDgt
MDctMjIgMDk6MDU6NTguMDAwMDAwMDAwIC0wNzAwCisrKyBuZXRpbmV0L3BpbV92YXIuaAkyMDA4
LTA3LTIyIDA5OjA2OjI0LjAwMDAwMDAwMCAtMDcwMApAQCAtNzMsNyArNzMsOSBAQAogI2lmZGVm
IF9LRVJORUwKIAogdm9pZCBwaW1faW5wdXQoc3RydWN0IG1idWYgKiwgaW50KTsKKyNpZmRlZiBT
WVNDVExfREVDTAogU1lTQ1RMX0RFQ0woX25ldF9pbmV0X3BpbSk7CiAjZW5kaWYKKyNlbmRpZgog
CiAjZW5kaWYgLyogX05FVElORVRfUElNX1ZBUl9IXyAqLwpkaWZmIC11ciBuZXRpbmV0L3ZpbmV0
Lmgub3JpZyBuZXRpbmV0L3ZpbmV0LmgKLS0tIG5ldGluZXQvdmluZXQuaC5vcmlnCTIwMDctMTEt
MTkgMTI6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyBuZXRpbmV0L3ZpbmV0LmgJMjAwOC0wOS0w
NCAxNjozMDoyMy4wMDAwMDAwMDAgLTA3MDAKQEAgLTUzLDYgKzUzLDkgQEAKICNpbmNsdWRlIDxu
ZXRpbmV0L3RjcF9zeW5jYWNoZS5oPgogI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CiAjaW5jbHVk
ZSA8bmV0aW5ldC91ZHBfdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pcF9tcm91dGUuaD4KKyNp
bmNsdWRlIDxuZXRpbmV0L3BpbS5oPgorI2luY2x1ZGUgPG5ldGluZXQvcGltX3Zhci5oPgogCiBz
dHJ1Y3Qgdm5ldF9pbmV0IHsKIAlzdHJ1Y3QJaW5faWZhZGRyaGFzaGhlYWQgKl9pbl9pZmFkZHJo
YXNodGJsOwpAQCAtODksNiArOTIsOCBAQAogCXN0cnVjdAl0Y3BfaG9zdGNhY2hlIF90Y3BfaG9z
dGNhY2hlOwogCXN0cnVjdCAgY2FsbG91dCBfdGNwX2hjX2NhbGxvdXQ7CiAJc3RydWN0CXRjcF9z
eW5jYWNoZSBfdGNwX3N5bmNhY2hlOworCXN0cnVjdAlpbnBjYmhlYWQgX2RpdmNiOwkvKiBpcF9k
aXZlcnQuYyAqLworCXN0cnVjdAlpbnBjYmluZm8gX2RpdmNiaW5mbzsJLyogaXBfZGl2ZXJ0LmMg
Ki8KIAlUQUlMUV9IRUFEKCwgdGNwdHcpIF90d3FfMm1zbDsKIAogCWludAlfdGNwX3NjX3JzdF9z
b2NrX2ZhaWw7CkBAIC0xNzQsNiArMTc5LDI0IEBACiAJaW50CV9pcHBvcnRfc3RvcHJhbmRvbTsK
IAlpbnQJX2lwcG9ydF90Y3BhbGxvY3M7CiAJaW50CV9pcHBvcnRfdGNwbGFzdGNvdW50OworCisJ
LyogZnJvbSBpcF9tcm91dGUuYyAqLworCXVfaW50CV9yc3ZwZGVidWc7CisJdV9pbnQJX21ydGRl
YnVnOworCXN0cnVjdCAJbXJ0c3RhdCBfbXJ0c3RhdDsKKwlzdHJ1Y3QJbWZjICpfbWZjdGFibGVb
TUZDVEJMU0laXTsKKwlzdHJ1Y3QJdmlmIF92aWZ0YWJsZVtNQVhWSUZTXTsKKwl1X2NoYXIJX25l
eHBpcmVbTUZDVEJMU0laXTsKKwlldmVudGhhbmRsZXJfdGFnIF9pZl9kZXRhY2hfZXZlbnRfdGFn
OworCXN0cnVjdAlid19tZXRlciAqX2J3X21ldGVyX3RpbWVyc1tCV19NRVRFUl9CVUNLRVRTXTsK
KwlzdHJ1Y3QJYndfdXBjYWxsIF9id191cGNhbGxzW0JXX1VQQ0FMTFNfTUFYXTsKKwl1X2ludAlf
YndfdXBjYWxsc19uOworCXN0cnVjdAlwaW1zdGF0IF9waW1zdGF0OworCXN0cnVjdAlpZm5ldCBf
bXVsdGljYXN0X3JlZ2lzdGVyX2lmOworCXZpZmlfdAlfcmVnX3ZpZl9udW07CisJdmlmaV90CV9u
dW12aWZzOworCWludAlfcGltX2Fzc2VydDsKKwl1aW50MzJfdCBfbXJ0X2FwaV9jb25maWc7CiB9
OwogI2VuZGlmCiAKQEAgLTIyMyw2ICsyNDYsOCBAQAogI2RlZmluZSBWX3RjcF9ob3N0Y2FjaGUJ
CVZORVRfSU5FVCh0Y3BfaG9zdGNhY2hlKQogI2RlZmluZSBWX3RjcF9oY19jYWxsb3V0CVZORVRf
SU5FVCh0Y3BfaGNfY2FsbG91dCkKICNkZWZpbmUgVl90Y3Bfc3luY2FjaGUJCVZORVRfSU5FVCh0
Y3Bfc3luY2FjaGUpCisjZGVmaW5lIFZfZGl2Y2IJCQlWTkVUX0lORVQoZGl2Y2IpCisjZGVmaW5l
IFZfZGl2Y2JpbmZvCQlWTkVUX0lORVQoZGl2Y2JpbmZvKQogI2RlZmluZSBWX3RjcF9zY19yc3Rf
c29ja19mYWlsCVZORVRfSU5FVCh0Y3Bfc2NfcnN0X3NvY2tfZmFpbCkKIAogI2RlZmluZSBWX3Rj
cF9tc3NkZmx0CQlWTkVUX0lORVQodGNwX21zc2RmbHQpCkBAIC0zMDgsNCArMzMzLDIxIEBACiAj
ZGVmaW5lIFZfaXBwb3J0X3RjcGFsbG9jcwlWTkVUX0lORVQoaXBwb3J0X3RjcGFsbG9jcykKICNk
ZWZpbmUgVl9pcHBvcnRfdGNwbGFzdGNvdW50CVZORVRfSU5FVChpcHBvcnRfdGNwbGFzdGNvdW50
KQogCisjZGVmaW5lIFZfcnN2cGRlYnVnCQlWTkVUX0lORVQocnN2cGRlYnVnKQorI2RlZmluZSBW
X21ydGRlYnVnCQlWTkVUX0lORVQobXJ0ZGVidWcpCisjZGVmaW5lIFZfbXJ0c3RhdAkJVk5FVF9J
TkVUKG1ydHN0YXQpCisjZGVmaW5lIFZfbWZjdGFibGUJCVZORVRfSU5FVChtZmN0YWJsZSkKKyNk
ZWZpbmUgVl92aWZ0YWJsZQkJVk5FVF9JTkVUKHZpZnRhYmxlKQorI2RlZmluZSBWX25leHBpcmUJ
CVZORVRfSU5FVChuZXhwaXJlKQorI2RlZmluZSBWX2lmX2RldGFjaF9ldmVudF90YWcJVk5FVF9J
TkVUKGlmX2RldGFjaF9ldmVudF90YWcpCisjZGVmaW5lIFZfYndfbWV0ZXJfdGltZXJzCVZORVRf
SU5FVChid19tZXRlcl90aW1lcnMpCisjZGVmaW5lIFZfYndfdXBjYWxscwkJVk5FVF9JTkVUKGJ3
X3VwY2FsbHMpCisjZGVmaW5lIFZfYndfdXBjYWxsc19uCQlWTkVUX0lORVQoYndfdXBjYWxsc19u
KQorI2RlZmluZSBWX3BpbXN0YXQJCVZORVRfSU5FVChwaW1zdGF0KQorI2RlZmluZSBWX211bHRp
Y2FzdF9yZWdpc3Rlcl9pZglWTkVUX0lORVQobXVsdGljYXN0X3JlZ2lzdGVyX2lmKQorI2RlZmlu
ZSBWX3JlZ192aWZfbnVtCQlWTkVUX0lORVQocmVnX3ZpZl9udW0pCisjZGVmaW5lIFZfbnVtdmlm
cwkJVk5FVF9JTkVUKG51bXZpZnMpCisjZGVmaW5lIFZfcGltX2Fzc2VydAkJVk5FVF9JTkVUKHBp
bV9hc3NlcnQpCisjZGVmaW5lIFZfbXJ0X2FwaV9jb25maWcJVk5FVF9JTkVUKG1ydF9hcGlfY29u
ZmlnKQorCiAjZW5kaWYgLyogIV9ORVRJTkVUX1ZJTkVUX0hfICovCmRpZmYgLXVyIG5ldC92bmV0
Lmgub3JpZyBuZXQvdm5ldC5oCmRpZmYgLXVyIHN5cy92aW1hZ2UuaC5vcmlnIHN5cy92aW1hZ2Uu
aApkaWZmIC11ciBuZXRpbmV0L2lwX2RpdmVydC5jLm9yaWcgbmV0aW5ldC9pcF9kaXZlcnQuYwot
LS0gbmV0aW5ldC9pcF9kaXZlcnQuYy5vcmlnCTIwMDgtMDktMDQgMTY6Mjk6MzYuMDAwMDAwMDAw
IC0wNzAwCisrKyBuZXRpbmV0L2lwX2RpdmVydC5jCTIwMDgtMDktMDQgMTY6MzA6MjMuMDAwMDAw
MDAwIC0wNzAwCkBAIC0yOSwxMiArMjksMTIgQEAKIAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgog
X19GQlNESUQoIiRGcmVlQlNEOiBzcmMvc3lzL25ldGluZXQvaXBfZGl2ZXJ0LmMsdiAxLjEzMCAy
MDA3LzEwLzA3IDIwOjQ0OjIyIHNpbGJ5IEV4cCAkIik7Ci0KLSNpZiAhZGVmaW5lZChLTERfTU9E
VUxFKQogI2luY2x1ZGUgIm9wdF9pbmV0LmgiCiAjaW5jbHVkZSAib3B0X2lwZncuaCIKICNpbmNs
dWRlICJvcHRfbWFjLmgiCiAjaW5jbHVkZSAib3B0X3ZpbWFnZS5oIgorCisjaWYgIWRlZmluZWQo
S0xEX01PRFVMRSkKICNpZm5kZWYgSU5FVAogI2Vycm9yICJJUERJVkVSVCByZXF1aXJlcyBJTkVU
LiIKICNlbmRpZgpAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgPHN5cy9zeC5oPgogI2luY2x1
ZGUgPHN5cy9zeXNjdGwuaD4KICNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMv
dmltYWdlLmg+CiAKICNpbmNsdWRlIDx2bS91bWEuaD4KIApAQCAtNjcsNiArNjgsNyBAQAogI2lu
Y2x1ZGUgPG5ldC9uZXRpc3IuaD4gCiAjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CiAKKyNpbmNsdWRl
IDxuZXRpbmV0L3ZpbmV0Lmg+CiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2luY2x1ZGUgPG5l
dGluZXQvaW5fcGNiLmg+CiAjaW5jbHVkZSA8bmV0aW5ldC9pbl9zeXN0bS5oPgpAQCAtMTEyLDkg
KzExNCwxMiBAQAogICogd2lsbCBjYXVzZSBpdCB0byBiZSBlZmZlY3RpdmVseSBjb25zaWRlcmVk
IGFzIGEgc3RhbmRhcmQgcGFja2V0KS4KICAqLwogCisjaWZuZGVmIFZJTUFHRQogLyogSW50ZXJu
YWwgdmFyaWFibGVzLiAqLwogc3RhdGljIHN0cnVjdCBpbnBjYmhlYWQgZGl2Y2I7CiBzdGF0aWMg
c3RydWN0IGlucGNiaW5mbyBkaXZjYmluZm87CisjZW5kaWYKK3N0YXRpYyBzdHJ1Y3QgdW1hX3pv
bmUgKmRpdmNiem9uZTsKIAogc3RhdGljIHVfbG9uZwlkaXZfc2VuZHNwYWNlID0gRElWU05EUTsJ
LyogWFhYIHN5c2N0bCA/ICovCiBzdGF0aWMgdV9sb25nCWRpdl9yZWN2c3BhY2UgPSBESVZSQ1ZR
OwkvKiBYWFggc3lzY3RsID8gKi8KQEAgLTEyNiw3ICsxMzEsNyBAQAogZGl2X3pvbmVfY2hhbmdl
KHZvaWQgKnRhZykKIHsKIAotCXVtYV96b25lX3NldF9tYXgoZGl2Y2JpbmZvLmlwaV96b25lLCBt
YXhzb2NrZXRzKTsKKwl1bWFfem9uZV9zZXRfbWF4KGRpdmNiem9uZSwgbWF4c29ja2V0cyk7CiB9
CiAKIHN0YXRpYyBpbnQKQEAgLTE0OSwyNCArMTU0LDM0IEBACiB2b2lkCiBkaXZfaW5pdCh2b2lk
KQogeworCUlOSVRfVk5FVF9JTkVUKGN1cnZuZXQpOwogCi0JSU5QX0lORk9fTE9DS19JTklUKCZk
aXZjYmluZm8sICJkaXYiKTsKLQlMSVNUX0lOSVQoJmRpdmNiKTsKLQlkaXZjYmluZm8uaXBpX2xp
c3RoZWFkID0gJmRpdmNiOworI2lmZGVmIFZJTUFHRQorCWlmIChJU19ERUZBVUxUX1ZORVQoY3Vy
dm5ldCkpIHsKKyNlbmRpZgorCS8qIFhYWCBnZXQgcmlkIG9mIFZfZGl2Y2JpbmZvLmlwaV96b25l
ICovCisJZGl2Y2J6b25lID0gdW1hX3pjcmVhdGUoImRpdmNiIiwgc2l6ZW9mKHN0cnVjdCBpbnBj
YiksCisJICAgIE5VTEwsIE5VTEwsIGRpdl9pbnBjYl9pbml0LCBkaXZfaW5wY2JfZmluaSwgVU1B
X0FMSUdOX1BUUiwKKwkgICAgVU1BX1pPTkVfTk9GUkVFKTsKKwl1bWFfem9uZV9zZXRfbWF4KGRp
dmNiem9uZSwgbWF4c29ja2V0cyk7CisJRVZFTlRIQU5ETEVSX1JFR0lTVEVSKG1heHNvY2tldHNf
Y2hhbmdlLCBkaXZfem9uZV9jaGFuZ2UsCisJCU5VTEwsIEVWRU5USEFORExFUl9QUklfQU5ZKTsK
KyNpZmRlZiBWSU1BR0UKKwl9CisJVl9kaXZjYmluZm8uaXBpX3ZuZXQgPSBjdXJ2bmV0OworI2Vu
ZGlmCisJSU5QX0lORk9fTE9DS19JTklUKCZWX2RpdmNiaW5mbywgImRpdiIpOworCUxJU1RfSU5J
VCgmVl9kaXZjYik7CisJVl9kaXZjYmluZm8uaXBpX2xpc3RoZWFkID0gJlZfZGl2Y2I7CiAJLyoK
IAkgKiBYWFggV2UgZG9uJ3QgdXNlIHRoZSBoYXNoIGxpc3QgZm9yIGRpdmVydCBJUCwgYnV0IGl0
J3MgZWFzaWVyCiAJICogdG8gYWxsb2NhdGUgYSBvbmUgZW50cnkgaGFzaCBsaXN0IHRoYW4gaXQg
aXMgdG8gY2hlY2sgYWxsCiAJICogb3ZlciB0aGUgcGxhY2UgZm9yIGhhc2hiYXNlID09IE5VTEwu
CiAJICovCi0JZGl2Y2JpbmZvLmlwaV9oYXNoYmFzZSA9IGhhc2hpbml0KDEsIE1fUENCLCAmZGl2
Y2JpbmZvLmlwaV9oYXNobWFzayk7Ci0JZGl2Y2JpbmZvLmlwaV9wb3J0aGFzaGJhc2UgPSBoYXNo
aW5pdCgxLCBNX1BDQiwKLQkgICAgJmRpdmNiaW5mby5pcGlfcG9ydGhhc2htYXNrKTsKLQlkaXZj
YmluZm8uaXBpX3pvbmUgPSB1bWFfemNyZWF0ZSgiZGl2Y2IiLCBzaXplb2Yoc3RydWN0IGlucGNi
KSwKLQkgICAgTlVMTCwgTlVMTCwgZGl2X2lucGNiX2luaXQsIGRpdl9pbnBjYl9maW5pLCBVTUFf
QUxJR05fUFRSLAotCSAgICBVTUFfWk9ORV9OT0ZSRUUpOwotCXVtYV96b25lX3NldF9tYXgoZGl2
Y2JpbmZvLmlwaV96b25lLCBtYXhzb2NrZXRzKTsKLQlFVkVOVEhBTkRMRVJfUkVHSVNURVIobWF4
c29ja2V0c19jaGFuZ2UsIGRpdl96b25lX2NoYW5nZSwKLQkJTlVMTCwgRVZFTlRIQU5ETEVSX1BS
SV9BTlkpOworCVZfZGl2Y2JpbmZvLmlwaV9oYXNoYmFzZSA9IGhhc2hpbml0KDEsIE1fUENCLAor
CSAgICAmVl9kaXZjYmluZm8uaXBpX2hhc2htYXNrKTsKKwlWX2RpdmNiaW5mby5pcGlfcG9ydGhh
c2hiYXNlID0gaGFzaGluaXQoMSwgTV9QQ0IsCisJICAgICZWX2RpdmNiaW5mby5pcGlfcG9ydGhh
c2htYXNrKTsKIH0KIAogLyoKQEAgLTE3Niw3ICsxOTEsOCBAQAogdm9pZAogZGl2X2lucHV0KHN0
cnVjdCBtYnVmICptLCBpbnQgb2ZmKQogewotCWlwc3RhdC5pcHNfbm9wcm90bysrOworCUlOSVRf
Vk5FVF9JTkVUKGN1cnZuZXQpOworCVZfaXBzdGF0Lmlwc19ub3Byb3RvKys7CiAJbV9mcmVlbSht
KTsKIH0KIApAQCAtMTg5LDYgKzIwNSw3IEBACiBzdGF0aWMgdm9pZAogZGl2ZXJ0X3BhY2tldChz
dHJ1Y3QgbWJ1ZiAqbSwgaW50IGluY29taW5nKQogeworCUlOSVRfVk5FVF9JTkVUKGN1cnZuZXQp
OwogCXN0cnVjdCBpcCAqaXA7CiAJc3RydWN0IGlucGNiICppbnA7CiAJc3RydWN0IHNvY2tldCAq
c2E7CkBAIC0yNjgsMTEgKzI4NSwxMSBAQAogCS8qIFB1dCBwYWNrZXQgb24gc29ja2V0IHF1ZXVl
LCBpZiBhbnkgKi8KIAlzYSA9IE5VTEw7CiAJbnBvcnQgPSBodG9ucygodV9pbnQxNl90KWRpdmVy
dF9pbmZvKG10YWcpKTsKLQlJTlBfSU5GT19STE9DSygmZGl2Y2JpbmZvKTsKLQlMSVNUX0ZPUkVB
Q0goaW5wLCAmZGl2Y2IsIGlucF9saXN0KSB7Ci0JCUlOUF9MT0NLKGlucCk7CisJSU5QX0lORk9f
UkxPQ0soJlZfZGl2Y2JpbmZvKTsKKwlMSVNUX0ZPUkVBQ0goaW5wLCAmVl9kaXZjYiwgaW5wX2xp
c3QpIHsKIAkJLyogWFhYIHdoeSBkb2VzIG9ubHkgb25lIHNvY2tldCBtYXRjaD8gKi8KIAkJaWYg
KGlucC0+aW5wX2xwb3J0ID09IG5wb3J0KSB7CisJCQlJTlBfTE9DSyhpbnApOwogCQkJc2EgPSBp
bnAtPmlucF9zb2NrZXQ7CiAJCQlTT0NLQlVGX0xPQ0soJnNhLT5zb19yY3YpOwogCQkJaWYgKHNi
YXBwZW5kYWRkcl9sb2NrZWQoJnNhLT5zb19yY3YsCkBAIC0yODUsMTMgKzMwMiwxMiBAQAogCQkJ
SU5QX1VOTE9DSyhpbnApOwogCQkJYnJlYWs7CiAJCX0KLQkJSU5QX1VOTE9DSyhpbnApOwogCX0K
LQlJTlBfSU5GT19SVU5MT0NLKCZkaXZjYmluZm8pOworCUlOUF9JTkZPX1JVTkxPQ0soJlZfZGl2
Y2JpbmZvKTsKIAlpZiAoc2EgPT0gTlVMTCkgewogCQltX2ZyZWVtKG0pOwotCQlpcHN0YXQuaXBz
X25vcHJvdG8rKzsKLQkJaXBzdGF0Lmlwc19kZWxpdmVyZWQtLTsKKwkJVl9pcHN0YXQuaXBzX25v
cHJvdG8rKzsKKwkJVl9pcHN0YXQuaXBzX2RlbGl2ZXJlZC0tOwogICAgICAgICB9CiB9CiAKQEAg
LTMwNiw2ICszMjIsNyBAQAogZGl2X291dHB1dChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1i
dWYgKm0sIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luLAogICAgIHN0cnVjdCBtYnVmICpjb250cm9s
KQogeworCUlOSVRfVk5FVF9JTkVUKHNvLT5zb192bmV0KTsKIAlzdHJ1Y3QgbV90YWcgKm10YWc7
CiAJc3RydWN0IGRpdmVydF90YWcgKmR0OwogCWludCBlcnJvciA9IDA7CkBAIC0zNTYsNyArMzcz
LDcgQEAKIAkJc3RydWN0IGlucGNiICppbnA7CiAKIAkJZHQtPmluZm8gfD0gSVBfRldfRElWRVJU
X09VVFBVVF9GTEFHOwotCQlJTlBfSU5GT19XTE9DSygmZGl2Y2JpbmZvKTsKKwkJSU5QX0lORk9f
V0xPQ0soJlZfZGl2Y2JpbmZvKTsKIAkJaW5wID0gc290b2lucGNiKHNvKTsKIAkJSU5QX0xPQ0so
aW5wKTsKIAkJLyoKQEAgLTM2Nyw3ICszODQsNyBAQAogCQkgICAgICgodV9zaG9ydCludG9ocyhp
cC0+aXBfbGVuKSA+IG0tPm1fcGt0aGRyLmxlbikpIHsKIAkJCWVycm9yID0gRUlOVkFMOwogCQkJ
SU5QX1VOTE9DSyhpbnApOwotCQkJSU5QX0lORk9fV1VOTE9DSygmZGl2Y2JpbmZvKTsKKwkJCUlO
UF9JTkZPX1dVTkxPQ0soJlZfZGl2Y2JpbmZvKTsKIAkJCW1fZnJlZW0obSk7CiAJCX0gZWxzZSB7
CiAJCQkvKiBDb252ZXJ0IGZpZWxkcyB0byBob3N0IG9yZGVyIGZvciBpcF9vdXRwdXQoKSAqLwpA
QCAtMzc1LDcgKzM5Miw3IEBACiAJCQlpcC0+aXBfb2ZmID0gbnRvaHMoaXAtPmlwX29mZik7CiAK
IAkJCS8qIFNlbmQgcGFja2V0IHRvIG91dHB1dCBwcm9jZXNzaW5nICovCi0JCQlpcHN0YXQuaXBz
X3Jhd291dCsrOwkJCS8qIFhYWCAqLworCQkJVl9pcHN0YXQuaXBzX3Jhd291dCsrOwkJCS8qIFhY
WCAqLwogCiAjaWZkZWYgTUFDCiAJCQltYWNfY3JlYXRlX21idWZfZnJvbV9pbnBjYihpbnAsIG0p
OwpAQCAtNDA4LDcgKzQyNSw3IEBACiAJCQkJCWVycm9yID0gRU5PQlVGUzsKIAkJCX0KIAkJCUlO
UF9VTkxPQ0soaW5wKTsKLQkJCUlOUF9JTkZPX1dVTkxPQ0soJmRpdmNiaW5mbyk7CisJCQlJTlBf
SU5GT19XVU5MT0NLKCZWX2RpdmNiaW5mbyk7CiAJCQlpZiAoZXJyb3IgPT0gRU5PQlVGUykgewog
CQkJCW1fZnJlZW0obSk7CiAJCQkJcmV0dXJuIChlcnJvcik7CkBAIC00NTgsNiArNDc1LDcgQEAK
IHN0YXRpYyBpbnQKIGRpdl9hdHRhY2goc3RydWN0IHNvY2tldCAqc28sIGludCBwcm90bywgc3Ry
dWN0IHRocmVhZCAqdGQpCiB7CisJSU5JVF9WTkVUX0lORVQoc28tPnNvX3ZuZXQpOwogCXN0cnVj
dCBpbnBjYiAqaW5wOwogCWludCBlcnJvcjsKIApAQCAtNDcxLDE0ICs0ODksMTQgQEAKIAllcnJv
ciA9IHNvcmVzZXJ2ZShzbywgZGl2X3NlbmRzcGFjZSwgZGl2X3JlY3ZzcGFjZSk7CiAJaWYgKGVy
cm9yKQogCQlyZXR1cm4gZXJyb3I7Ci0JSU5QX0lORk9fV0xPQ0soJmRpdmNiaW5mbyk7Ci0JZXJy
b3IgPSBpbl9wY2JhbGxvYyhzbywgJmRpdmNiaW5mbyk7CisJSU5QX0lORk9fV0xPQ0soJlZfZGl2
Y2JpbmZvKTsKKwllcnJvciA9IGluX3BjYmFsbG9jKHNvLCAmVl9kaXZjYmluZm8pOwogCWlmIChl
cnJvcikgewotCQlJTlBfSU5GT19XVU5MT0NLKCZkaXZjYmluZm8pOworCQlJTlBfSU5GT19XVU5M
T0NLKCZWX2RpdmNiaW5mbyk7CiAJCXJldHVybiBlcnJvcjsKIAl9CiAJaW5wID0gKHN0cnVjdCBp
bnBjYiAqKXNvLT5zb19wY2I7Ci0JSU5QX0lORk9fV1VOTE9DSygmZGl2Y2JpbmZvKTsKKwlJTlBf
SU5GT19XVU5MT0NLKCZWX2RpdmNiaW5mbyk7CiAJaW5wLT5pbnBfaXBfcCA9IHByb3RvOwogCWlu
cC0+aW5wX3ZmbGFnIHw9IElOUF9JUFY0OwogCWlucC0+aW5wX2ZsYWdzIHw9IElOUF9IRFJJTkNM
OwpAQCAtNDg5LDIwICs1MDcsMjIgQEAKIHN0YXRpYyB2b2lkCiBkaXZfZGV0YWNoKHN0cnVjdCBz
b2NrZXQgKnNvKQogeworCUlOSVRfVk5FVF9JTkVUKHNvLT5zb192bmV0KTsKIAlzdHJ1Y3QgaW5w
Y2IgKmlucDsKIAogCWlucCA9IHNvdG9pbnBjYihzbyk7CiAJS0FTU0VSVChpbnAgIT0gTlVMTCwg
KCJkaXZfZGV0YWNoOiBpbnAgPT0gTlVMTCIpKTsKLQlJTlBfSU5GT19XTE9DSygmZGl2Y2JpbmZv
KTsKKwlJTlBfSU5GT19XTE9DSygmVl9kaXZjYmluZm8pOwogCUlOUF9MT0NLKGlucCk7CiAJaW5f
cGNiZGV0YWNoKGlucCk7CiAJaW5fcGNiZnJlZShpbnApOwotCUlOUF9JTkZPX1dVTkxPQ0soJmRp
dmNiaW5mbyk7CisJSU5QX0lORk9fV1VOTE9DSygmVl9kaXZjYmluZm8pOwogfQogCiBzdGF0aWMg
aW50CiBkaXZfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICpuYW0sIHN0
cnVjdCB0aHJlYWQgKnRkKQogeworCUlOSVRfVk5FVF9JTkVUKHNvLT5zb192bmV0KTsKIAlzdHJ1
Y3QgaW5wY2IgKmlucDsKIAlpbnQgZXJyb3I7CiAKQEAgLTUxOCwxMSArNTM4LDExIEBACiAJaWYg
KG5hbS0+c2FfZmFtaWx5ICE9IEFGX0lORVQpCiAJCXJldHVybiBFQUZOT1NVUFBPUlQ7CiAJKChz
dHJ1Y3Qgc29ja2FkZHJfaW4gKiluYW0pLT5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOwot
CUlOUF9JTkZPX1dMT0NLKCZkaXZjYmluZm8pOworCUlOUF9JTkZPX1dMT0NLKCZWX2RpdmNiaW5m
byk7CiAJSU5QX0xPQ0soaW5wKTsKIAllcnJvciA9IGluX3BjYmJpbmQoaW5wLCBuYW0sIHRkLT50
ZF91Y3JlZCk7CiAJSU5QX1VOTE9DSyhpbnApOwotCUlOUF9JTkZPX1dVTkxPQ0soJmRpdmNiaW5m
byk7CisJSU5QX0lORk9fV1VOTE9DSygmVl9kaXZjYmluZm8pOwogCXJldHVybiBlcnJvcjsKIH0K
IApAQCAtNTQzLDEwICs1NjMsMTEgQEAKIGRpdl9zZW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQg
ZmxhZ3MsIHN0cnVjdCBtYnVmICptLCBzdHJ1Y3Qgc29ja2FkZHIgKm5hbSwKICAgICBzdHJ1Y3Qg
bWJ1ZiAqY29udHJvbCwgc3RydWN0IHRocmVhZCAqdGQpCiB7CisJSU5JVF9WTkVUX0lORVQoc28t
PnNvX3ZuZXQpOwogCS8qIFBhY2tldCBtdXN0IGhhdmUgYSBoZWFkZXIgKGJ1dCB0aGF0J3MgYWJv
dXQgaXQpICovCiAJaWYgKG0tPm1fbGVuIDwgc2l6ZW9mIChzdHJ1Y3QgaXApICYmCiAJICAgICht
ID0gbV9wdWxsdXAobSwgc2l6ZW9mIChzdHJ1Y3QgaXApKSkgPT0gMCkgewotCQlpcHN0YXQuaXBz
X3Rvb3NtYWxsKys7CisJCVZfaXBzdGF0Lmlwc190b29zbWFsbCsrOwogCQltX2ZyZWVtKG0pOwog
CQlyZXR1cm4gRUlOVkFMOwogCX0KQEAgLTU3MCw2ICs1OTEsNyBAQAogc3RhdGljIGludAogZGl2
X3BjYmxpc3QoU1lTQ1RMX0hBTkRMRVJfQVJHUykKIHsKKwlJTklUX1ZORVRfSU5FVChjdXJ2bmV0
KTsKIAlpbnQgZXJyb3IsIGksIG47CiAJc3RydWN0IGlucGNiICppbnAsICoqaW5wX2xpc3Q7CiAJ
aW5wX2dlbl90IGdlbmNudDsKQEAgLTU4MCw3ICs2MDIsNyBAQAogCSAqIHJlc291cmNlLWludGVu
c2l2ZSB0byByZXBlYXQgdHdpY2Ugb24gZXZlcnkgcmVxdWVzdC4KIAkgKi8KIAlpZiAocmVxLT5v
bGRwdHIgPT0gMCkgewotCQluID0gZGl2Y2JpbmZvLmlwaV9jb3VudDsKKwkJbiA9IFZfZGl2Y2Jp
bmZvLmlwaV9jb3VudDsKIAkJcmVxLT5vbGRpZHggPSAyICogKHNpemVvZiB4aWcpCiAJCQkrIChu
ICsgbi84KSAqIHNpemVvZihzdHJ1Y3QgeGlucGNiKTsKIAkJcmV0dXJuIDA7CkBAIC01OTIsMTAg
KzYxNCwxMCBAQAogCS8qCiAJICogT0ssIG5vdyB3ZSdyZSBjb21taXR0ZWQgdG8gZG9pbmcgc29t
ZXRoaW5nLgogCSAqLwotCUlOUF9JTkZPX1JMT0NLKCZkaXZjYmluZm8pOwotCWdlbmNudCA9IGRp
dmNiaW5mby5pcGlfZ2VuY250OwotCW4gPSBkaXZjYmluZm8uaXBpX2NvdW50OwotCUlOUF9JTkZP
X1JVTkxPQ0soJmRpdmNiaW5mbyk7CisJSU5QX0lORk9fUkxPQ0soJlZfZGl2Y2JpbmZvKTsKKwln
ZW5jbnQgPSBWX2RpdmNiaW5mby5pcGlfZ2VuY250OworCW4gPSBWX2RpdmNiaW5mby5pcGlfY291
bnQ7CisJSU5QX0lORk9fUlVOTE9DSygmVl9kaXZjYmluZm8pOwogCiAJZXJyb3IgPSBzeXNjdGxf
d2lyZV9vbGRfYnVmZmVyKHJlcSwKIAkgICAgMiAqIHNpemVvZih4aWcpICsgbipzaXplb2Yoc3Ry
dWN0IHhpbnBjYikpOwpAQCAtNjE0LDggKzYzNiw4IEBACiAJaWYgKGlucF9saXN0ID09IDApCiAJ
CXJldHVybiBFTk9NRU07CiAJCi0JSU5QX0lORk9fUkxPQ0soJmRpdmNiaW5mbyk7Ci0JZm9yIChp
bnAgPSBMSVNUX0ZJUlNUKGRpdmNiaW5mby5pcGlfbGlzdGhlYWQpLCBpID0gMDsgaW5wICYmIGkg
PCBuOworCUlOUF9JTkZPX1JMT0NLKCZWX2RpdmNiaW5mbyk7CisJZm9yIChpbnAgPSBMSVNUX0ZJ
UlNUKFZfZGl2Y2JpbmZvLmlwaV9saXN0aGVhZCksIGkgPSAwOyBpbnAgJiYgaSA8IG47CiAJICAg
ICBpbnAgPSBMSVNUX05FWFQoaW5wLCBpbnBfbGlzdCkpIHsKIAkJSU5QX0xPQ0soaW5wKTsKIAkJ
aWYgKGlucC0+aW5wX2dlbmNudCA8PSBnZW5jbnQgJiYKQEAgLTYyMyw3ICs2NDUsNyBAQAogCQkJ
aW5wX2xpc3RbaSsrXSA9IGlucDsKIAkJSU5QX1VOTE9DSyhpbnApOwogCX0KLQlJTlBfSU5GT19S
VU5MT0NLKCZkaXZjYmluZm8pOworCUlOUF9JTkZPX1JVTkxPQ0soJlZfZGl2Y2JpbmZvKTsKIAlu
ID0gaTsKIAogCWVycm9yID0gMDsKQEAgLTY1MSwxMSArNjczLDExIEBACiAJCSAqIHdoaWxlIHdl
IHdlcmUgcHJvY2Vzc2luZyB0aGlzIHJlcXVlc3QsIGFuZCBpdAogCQkgKiBtaWdodCBiZSBuZWNl
c3NhcnkgdG8gcmV0cnkuCiAJCSAqLwotCQlJTlBfSU5GT19STE9DSygmZGl2Y2JpbmZvKTsKLQkJ
eGlnLnhpZ19nZW4gPSBkaXZjYmluZm8uaXBpX2dlbmNudDsKKwkJSU5QX0lORk9fUkxPQ0soJlZf
ZGl2Y2JpbmZvKTsKKwkJeGlnLnhpZ19nZW4gPSBWX2RpdmNiaW5mby5pcGlfZ2VuY250OwogCQl4
aWcueGlnX3NvZ2VuID0gc29fZ2VuY250OwotCQl4aWcueGlnX2NvdW50ID0gZGl2Y2JpbmZvLmlw
aV9jb3VudDsKLQkJSU5QX0lORk9fUlVOTE9DSygmZGl2Y2JpbmZvKTsKKwkJeGlnLnhpZ19jb3Vu
dCA9IFZfZGl2Y2JpbmZvLmlwaV9jb3VudDsKKwkJSU5QX0lORk9fUlVOTE9DSygmVl9kaXZjYmlu
Zm8pOwogCQllcnJvciA9IFNZU0NUTF9PVVQocmVxLCAmeGlnLCBzaXplb2YgeGlnKTsKIAl9CiAJ
ZnJlZShpbnBfbGlzdCwgTV9URU1QKTsKQEAgLTY5NCw2ICs3MTYsNyBAQAogc3RhdGljIGludAog
ZGl2X21vZGV2ZW50KG1vZHVsZV90IG1vZCwgaW50IHR5cGUsIHZvaWQgKnVudXNlZCkKIHsKKwlJ
TklUX1ZORVRfSU5FVChjdXJ2bmV0KTsKIAlpbnQgZXJyID0gMDsKIAlpbnQgbjsKIApAQCAtNzI3
LDE4ICs3NTAsMTggQEAKIAkJICogc29ja2V0IG9wZW4gcmVxdWVzdCBjb3VsZCBiZSBzcGlubmlu
ZyBvbiB0aGUgbG9jayBhbmQgdGhlbgogCQkgKiB3ZSBkZXN0cm95IHRoZSBsb2NrLgogCQkgKi8K
LQkJSU5QX0lORk9fV0xPQ0soJmRpdmNiaW5mbyk7Ci0JCW4gPSBkaXZjYmluZm8uaXBpX2NvdW50
OworCQlJTlBfSU5GT19XTE9DSygmVl9kaXZjYmluZm8pOworCQluID0gVl9kaXZjYmluZm8uaXBp
X2NvdW50OwogCQlpZiAobiAhPSAwKSB7CiAJCQllcnIgPSBFQlVTWTsKLQkJCUlOUF9JTkZPX1dV
TkxPQ0soJmRpdmNiaW5mbyk7CisJCQlJTlBfSU5GT19XVU5MT0NLKCZWX2RpdmNiaW5mbyk7CiAJ
CQlicmVhazsKIAkJfQogCQlpcF9kaXZlcnRfcHRyID0gTlVMTDsKIAkJZXJyID0gcGZfcHJvdG9f
dW5yZWdpc3RlcihQRl9JTkVULCBJUFBST1RPX0RJVkVSVCwgU09DS19SQVcpOwotCQlJTlBfSU5G
T19XVU5MT0NLKCZkaXZjYmluZm8pOwotCQlJTlBfSU5GT19MT0NLX0RFU1RST1koJmRpdmNiaW5m
byk7Ci0JCXVtYV96ZGVzdHJveShkaXZjYmluZm8uaXBpX3pvbmUpOworCQlJTlBfSU5GT19XVU5M
T0NLKCZWX2RpdmNiaW5mbyk7CisJCUlOUF9JTkZPX0xPQ0tfREVTVFJPWSgmVl9kaXZjYmluZm8p
OworCQl1bWFfemRlc3Ryb3koZGl2Y2J6b25lKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZXJy
ID0gRU9QTk9UU1VQUDsK

------_=_NextPart_001_01C91AB3.B40A9061--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?0DF156EE7414494187B087A3C279BDB40A94023E>