Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 23 Sep 2011 13:10:30 +0200
From:      Monthadar Al Jaberi <monthadar@gmail.com>
To:        freebsd-wireless@freebsd.org, Adrian Chadd <adrian.chadd@gmail.com>
Subject:   Re: FreeBSD net80211s HWMP code
Message-ID:  <CA%2BsBSo%2Bs1bFw3KLvf%2BTh_vdR_5ato_xhEE5saLh6aK=1Avbb=w@mail.gmail.com>
In-Reply-To: <CA%2BsBSoJwkVMTAbybPbHFdz6CHbjDzF5PRgxpXoWHVESpAfEQKg@mail.gmail.com>
References:  <CA%2BsBSoJwkVMTAbybPbHFdz6CHbjDzF5PRgxpXoWHVESpAfEQKg@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--90e6ba1efd78752b9804ad99db4f
Content-Type: text/plain; charset=ISO-8859-1

Hi again,

This diff fixed the broken parts in the last one. So it should be
usable instead of the current FreeBSD HWMP. Also this diff is updated
to draft 12.0.

I hope you could try it and let me know how it goes.

Will work with Adrian to break it into smaller commits to HEAD.

br,

On Fri, Sep 16, 2011 at 12:00 PM, Monthadar Al Jaberi
<monthadar@gmail.com> wrote:
> Hi,
>
> I am attaching my first update of the IEEE80211s HWMP code based on Draft 8.0.
>
> It is not complete, some stuff works better, others are broken and
> there are more things to todo.
>
> So I would like it if some are interesting in testing the code.
>
> Broken:
> For now only use ondemand routing and not proactive (HWMPROOTMODE=disabled).
>
> Works better:
> PERR frames: if an MP is removed PERR frames will make sure that all
> neighbour mesh nodes tables will be updated correctly.
> PREQ/PREP: had some errors in code and did not follow standard correct.
>
> Things todo:
> External address support (called Proxy in freebsd code, will change it
> to reflect standard naming)
> Lifetime of paths don't decrement (but because we have better PERR
> frames its not a big problem for now)
> And much more!!
>
> Attaching a diff of the code.
>
> In the hope it will be useful for someone.
> br,
> --
> //Monthadar Al Jaberi
>



-- 
//Monthadar Al Jaberi

--90e6ba1efd78752b9804ad99db4f
Content-Type: text/x-patch; charset=US-ASCII; name="patch0.patch"
Content-Disposition: attachment; filename="patch0.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gsx2fg3l1

ZGlmZiAtLWdpdCBhL3N5cy9uZXQvaWZfZXRoZXJzdWJyLmMgYi9zeXMvbmV0L2lmX2V0aGVyc3Vi
ci5jCmluZGV4IDFkMTZhZTYuLmU3M2RiNDAgMTAwNjQ0Ci0tLSBhL3N5cy9uZXQvaWZfZXRoZXJz
dWJyLmMKKysrIGIvc3lzL25ldC9pZl9ldGhlcnN1YnIuYwpAQCAtOTY4LDkgKzk2OCwxMyBAQCBk
aXNjYXJkOgogY2hhciAqCiBldGhlcl9zcHJpbnRmKGNvbnN0IHVfY2hhciAqYXApCiB7Ci0Jc3Rh
dGljIGNoYXIgZXRoZXJidWZbMThdOwotCXNucHJpbnRmKGV0aGVyYnVmLCBzaXplb2YgKGV0aGVy
YnVmKSwgIiU2RCIsIGFwLCAiOiIpOwotCXJldHVybiAoZXRoZXJidWYpOworCXN0YXRpYyBjaGFy
IGV0aGVyYnVmWzZdWzE4XTsKKwlzdGF0aWMgaW50IGkgPSAwOworCWNoYXIgKmJ1ZjsKKwlzbnBy
aW50ZihldGhlcmJ1ZltpXSwgc2l6ZW9mIChldGhlcmJ1ZlswXSksICIlNkQiLCBhcCwgIjoiKTsK
KwlidWYgPSBldGhlcmJ1ZltpXTsKKwlpID0gKGkrMSklNjsKKwlyZXR1cm4gKGJ1Zik7CiB9CiAK
IC8qCmRpZmYgLS1naXQgYS9zeXMvbmV0ODAyMTEvaWVlZTgwMjExX2h3bXAuYyBiL3N5cy9uZXQ4
MDIxMS9pZWVlODAyMTFfaHdtcC5jCmluZGV4IDc4NzI5ZmMuLjBmNTAyMDMgMTAwNjQ0Ci0tLSBh
L3N5cy9uZXQ4MDIxMS9pZWVlODAyMTFfaHdtcC5jCisrKyBiL3N5cy9uZXQ4MDIxMS9pZWVlODAy
MTFfaHdtcC5jCkBAIC0xLDYgKzEsNyBAQAogLyotIAogICogQ29weXJpZ2h0IChjKSAyMDA5IFRo
ZSBGcmVlQlNEIEZvdW5kYXRpb24gCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAKKyAqIENvcHly
aWdodCAoYykgMjAxMSBNb250aGFkYXIgQWwgSmFiZXJpLCBUZXJyYU5ldCBBQi4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiAKICAqIFRoaXMgc29mdHdhcmUgd2FzIGRldmVsb3BlZCBieSBS
dWkgUGF1bG8gdW5kZXIgc3BvbnNvcnNoaXAgZnJvbSB0aGUKICAqIEZyZWVCU0QgRm91bmRhdGlv
bi4gCkBAIC00MCw4ICs0MSw4IEBAIF9fRkJTRElEKCIkRnJlZUJTRCQiKTsKICNpbmNsdWRlICJv
cHRfd2xhbi5oIgogCiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL3N5c3Rt
Lmg+IAotI2luY2x1ZGUgPHN5cy9tYnVmLmg+ICAgCisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+Cisj
aW5jbHVkZSA8c3lzL21idWYuaD4KICNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CiAjaW5jbHVkZSA8
c3lzL2tlcm5lbC5oPgogCkBAIC0xMTgsNiArMTE5LDEyIEBAIHN0YXRpYyB2b2lkCWh3bXBfcGVl
cmRvd24oc3RydWN0IGllZWU4MDIxMV9ub2RlICopOwogCiBzdGF0aWMgc3RydWN0IHRpbWV2YWwg
aWVlZTgwMjExX2h3bXBfcHJlcW1pbmludCA9IHsgMCwgMTAwMDAwIH07CiBzdGF0aWMgc3RydWN0
IHRpbWV2YWwgaWVlZTgwMjExX2h3bXBfcGVycm1pbmludCA9IHsgMCwgMTAwMDAwIH07CitzdGF0
aWMgc3RydWN0IHRpbWV2YWwgaWVlZTgwMjExX2h3bXBfcm9vdG1pbl9jb25maW50OworCitNQUxM
T0NfREVGSU5FKE1fODAyMTFfSFdNUF9SQU5OLCAiODAyMTFyYW5uIiwgIjgwMi4xMSBIV01QIFJv
b3QgQW5ub3VuY21lbnQgZnJhbWUiKTsKK01BTExPQ19ERUZJTkUoTV84MDIxMV9IV01QX1BSRVEs
ICI4MDIxMXByZXEiLCAiODAyLjExIEhXTVAgUGF0aCBSZXF1ZXN0IGZyYW1lIik7CitNQUxMT0Nf
REVGSU5FKE1fODAyMTFfSFdNUF9QUkVQLCAiODAyMTFwcmVwIiwgIjgwMi4xMSBIV01QIFBhdGgg
UmVwbHkgZnJhbWUiKTsKK01BTExPQ19ERUZJTkUoTV84MDIxMV9IV01QX1BFUlIsICI4MDIxMXBl
cnIiLCAiODAyLjExIEhXTVAgUGF0aCBFcnJvciBmcmFtZSIpOwogCiAvKiB1bmFsbGlnbmVkIGxp
dHRsZSBlbmRpYW4gYWNjZXNzICovCiAjZGVmaW5lIExFX1dSSVRFXzIocCwgdikgZG8gewkJCQlc
CkBAIC0xMzksOSArMTQ2LDE3IEBAIHN0YXRpYyBjb25zdCB1aW50OF90CWJyb2FkY2FzdGFkZHJb
SUVFRTgwMjExX0FERFJfTEVOXSA9CiB0eXBlZGVmIHVpbnQzMl90IGllZWU4MDIxMV9od21wX3Nl
cTsKICNkZWZpbmUJSFdNUF9TRVFfTFQoYSwgYikJKChpbnQzMl90KSgoYSktKGIpKSA8IDApCiAj
ZGVmaW5lCUhXTVBfU0VRX0xFUShhLCBiKQkoKGludDMyX3QpKChhKS0oYikpIDw9IDApCisjZGVm
aW5lCUhXTVBfU0VRX0VRKGEsIGIpCSgoaW50MzJfdCkoKGEpLShiKSkgPT0gMCkKICNkZWZpbmUJ
SFdNUF9TRVFfR1QoYSwgYikJKChpbnQzMl90KSgoYSktKGIpKSA+IDApCiAjZGVmaW5lCUhXTVBf
U0VRX0dFUShhLCBiKQkoKGludDMyX3QpKChhKS0oYikpID49IDApCiAKKy8qIFRoZSBsb25nZXIg
b25lIG9mIHRoZSBsaWZldGltZSBzaG91bGQgYmUgc3RvcmVkIGFzIG5ldyBsaWZldGltZSAqLwor
I2RlZmluZSBNRVNIX1JPVVRFX0xJRkVUSU1FX01BWChhLCBiKQkoYSA+IGIgPyBhIDogYikKKwor
I2RlZmluZQlNRVNIX1JUX0xPQ0sobXMpCW10eF9sb2NrKCYobXMpLT5tc19ydF9sb2NrKQorI2Rl
ZmluZQlNRVNIX1JUX0xPQ0tfQVNTRVJUKG1zKQltdHhfYXNzZXJ0KCYobXMpLT5tc19ydF9sb2Nr
LCBNQV9PV05FRCkKKyNkZWZpbmUJTUVTSF9SVF9VTkxPQ0sobXMpCW10eF91bmxvY2soJihtcykt
Pm1zX3J0X2xvY2spCisKIC8qCiAgKiBQcml2YXRlIGV4dGVuc2lvbiBvZiBpZWVlODAyMTFfbWVz
aF9yb3V0ZS4KICAqLwpAQCAtMTUwLDEyICsxNjUsMTUgQEAgc3RydWN0IGllZWU4MDIxMV9od21w
X3JvdXRlIHsKIAlpZWVlODAyMTFfaHdtcF9zZXEJaHJfcHJlcWlkOwkvKiBsYXN0IFBSRVEgSUQg
c2VlbiBmcm9tIGRzdCAqLwogCWllZWU4MDIxMV9od21wX3NlcQlocl9vcmlnc2VxOwkvKiBzZXEu
IG5vLiBvbiBvdXIgbGF0ZXN0IFBSRVEqLwogCWludAkJCWhyX3ByZXFyZXRyaWVzOworCWludAkJ
CWhyX3Byb19wcmVwOwkvKiB3aGV0aGVyIG1lc2ggZ2VuZXJhdGVzIFByb2FjdGl2ZSBQUkVQICov
CisJaW50CQkJaHJfc2VudF9wcmVwOwkvKiB3aGV0aGVyIG1lc2ggaGFzIHNlbnQgYSBQcm9hY3Rp
dmUgUFJFUCAqLwogfTsKIHN0cnVjdCBpZWVlODAyMTFfaHdtcF9zdGF0ZSB7CiAJaWVlZTgwMjEx
X2h3bXBfc2VxCWhzX3NlcTsJCS8qIG5leHQgc2VxIHRvIGJlIHVzZWQgKi8KIAlpZWVlODAyMTFf
aHdtcF9zZXEJaHNfcHJlcWlkOwkvKiBuZXh0IFBSRVEgSUQgdG8gYmUgdXNlZCAqLwogCXN0cnVj
dCB0aW1ldmFsCQloc19sYXN0cHJlcTsJLyogbGFzdCB0aW1lIHdlIHNlbnQgYSBQUkVRICovCiAJ
c3RydWN0IHRpbWV2YWwJCWhzX2xhc3RwZXJyOwkvKiBsYXN0IHRpbWUgd2Ugc2VudCBhIFBFUlIg
Ki8KKwlzdHJ1Y3QgdGltZXZhbAkJaHNfbGFzdHJvb3Rjb25mOy8qIGxhc3QgdGltZSB3ZSBzZW50
IGEgUFJFUSB0byByb290ICovCiAJaW50CQkJaHNfcm9vdG1vZGU7CS8qIHByb2FjdGl2ZSBIV01Q
ICovCiAJc3RydWN0IGNhbGxvdXQJCWhzX3Jvb3R0aW1lcjsKIAl1aW50OF90CQkJaHNfbWF4aG9w
czsJLyogbWF4IGhvcCBjb3VudCAqLwpAQCAtMTY2LDE3ICsxODQsMjIgQEAgU1lTQ1RMX05PREUo
X25ldF93bGFuLCBPSURfQVVUTywgaHdtcCwgQ1RMRkxBR19SRCwgMCwKIHN0YXRpYyBpbnQJaWVl
ZTgwMjExX2h3bXBfdGFyZ2V0b25seSA9IDA7CiBTWVNDVExfSU5UKF9uZXRfd2xhbl9od21wLCBP
SURfQVVUTywgdGFyZ2V0b25seSwgQ1RMVFlQRV9JTlQgfCBDVExGTEFHX1JXLAogICAgICZpZWVl
ODAyMTFfaHdtcF90YXJnZXRvbmx5LCAwLCAiU2V0IFRPIGJpdCBvbiBnZW5lcmF0ZWQgUFJFUXMi
KTsKLXN0YXRpYyBpbnQJaWVlZTgwMjExX2h3bXBfcmVwbHlmb3J3YXJkID0gMTsKLVNZU0NUTF9J
TlQoX25ldF93bGFuX2h3bXAsIE9JRF9BVVRPLCByZXBseWZvcndhcmQsIENUTFRZUEVfSU5UIHwg
Q1RMRkxBR19SVywKLSAgICAmaWVlZTgwMjExX2h3bXBfcmVwbHlmb3J3YXJkLCAwLCAiU2V0IFJG
IGJpdCBvbiBnZW5lcmF0ZWQgUFJFUXMiKTsKIHN0YXRpYyBpbnQJaWVlZTgwMjExX2h3bXBfcGF0
aHRpbWVvdXQgPSAtMTsKIFNZU0NUTF9QUk9DKF9uZXRfd2xhbl9od21wLCBPSURfQVVUTywgcGF0
aGxpZmV0aW1lLCBDVExUWVBFX0lOVCB8IENUTEZMQUdfUlcsCiAgICAgJmllZWU4MDIxMV9od21w
X3BhdGh0aW1lb3V0LCAwLCBpZWVlODAyMTFfc3lzY3RsX21zZWNzX3RpY2tzLCAiSSIsCiAgICAg
InBhdGggZW50cnkgbGlmZXRpbWUgKG1zKSIpOworc3RhdGljIGludAlpZWVlODAyMTFfaHdtcF9y
b290Y29uZmludCA9IC0xOworU1lTQ1RMX1BST0MoX25ldF93bGFuX2h3bXAsIE9JRF9BVVRPLCBy
b290Y29uZmludCwgQ1RMVFlQRV9JTlQgfCBDVExGTEFHX1JXLAorICAgICZpZWVlODAyMTFfaHdt
cF9yb290Y29uZmludCwgMCwgaWVlZTgwMjExX3N5c2N0bF9tc2Vjc190aWNrcywgIkkiLAorICAg
ICJyb290IGNvbmZpcm1hdGlvbiBpbnRlcnZhbCAobXMpIik7CiBzdGF0aWMgaW50CWllZWU4MDIx
MV9od21wX3Jvb3R0aW1lb3V0ID0gLTE7CiBTWVNDVExfUFJPQyhfbmV0X3dsYW5faHdtcCwgT0lE
X0FVVE8sIHJvb3R0aW1lb3V0LCBDVExUWVBFX0lOVCB8IENUTEZMQUdfUlcsCiAgICAgJmllZWU4
MDIxMV9od21wX3Jvb3R0aW1lb3V0LCAwLCBpZWVlODAyMTFfc3lzY3RsX21zZWNzX3RpY2tzLCAi
SSIsCiAgICAgInJvb3QgUFJFUSB0aW1lb3V0IChtcykiKTsKK3N0YXRpYyBpbnQJaWVlZTgwMjEx
X2h3bXBfcmFubnRpbWVvdXQgPSAtMTsKK1NZU0NUTF9QUk9DKF9uZXRfd2xhbl9od21wLCBPSURf
QVVUTywgcmFubnRpbWVvdXQsIENUTFRZUEVfSU5UIHwgQ1RMRkxBR19SVywKKyAgICAmaWVlZTgw
MjExX2h3bXBfcmFubnRpbWVvdXQsIDAsIGllZWU4MDIxMV9zeXNjdGxfbXNlY3NfdGlja3MsICJJ
IiwKKyAgICAiUkFOTiBQUkVRIHRpbWVvdXQgKG1zKSIpOwogc3RhdGljIGludAlpZWVlODAyMTFf
aHdtcF9yb290aW50ID0gLTE7CiBTWVNDVExfUFJPQyhfbmV0X3dsYW5faHdtcCwgT0lEX0FVVE8s
IHJvb3RpbnQsIENUTFRZUEVfSU5UIHwgQ1RMRkxBR19SVywKICAgICAmaWVlZTgwMjExX2h3bXBf
cm9vdGludCwgMCwgaWVlZTgwMjExX3N5c2N0bF9tc2Vjc190aWNrcywgIkkiLApAQCAtMTg3LDYg
KzIxMCw3IEBAIFNZU0NUTF9QUk9DKF9uZXRfd2xhbl9od21wLCBPSURfQVVUTywgcmFubmludCwg
Q1RMVFlQRV9JTlQgfCBDVExGTEFHX1JXLAogICAgICJyb290IGFubm91bmNlbWVudCBpbnRlcnZh
bCAobXMpIik7CiAKICNkZWZpbmUJSUVFRTgwMjExX0hXTVBfREVGQVVMVF9NQVhIT1BTCTMxCisj
ZGVmaW5lCUlFRUU4MDIxMV9IV01QX1BFUlJfTUFYREVTVAkxMAogCiBzdGF0aWMJaWVlZTgwMjEx
X3JlY3ZfYWN0aW9uX2Z1bmMgaHdtcF9yZWN2X2FjdGlvbl9tZXNocGF0aDsKIApAQCAtMjA4LDEw
ICsyMzIsMTUgQEAgU1lTQ1RMX1BST0MoX25ldF93bGFuX2h3bXAsIE9JRF9BVVRPLCBpbmFjdCwg
Q1RMVFlQRV9JTlQgfCBDVExGTEFHX1JXLAogc3RhdGljIHZvaWQKIGllZWU4MDIxMV9od21wX2lu
aXQodm9pZCkKIHsKKwlpZWVlODAyMTFfaHdtcF9yb290Y29uZmludCA9IG1zZWNzX3RvX3RpY2tz
KDUqMTAwMCk7CiAJaWVlZTgwMjExX2h3bXBfcGF0aHRpbWVvdXQgPSBtc2Vjc190b190aWNrcyg1
KjEwMDApOwogCWllZWU4MDIxMV9od21wX3Jvb3R0aW1lb3V0ID0gbXNlY3NfdG9fdGlja3MoNSox
MDAwKTsKKwlpZWVlODAyMTFfaHdtcF9yYW5udGltZW91dCA9IG1zZWNzX3RvX3RpY2tzKDUqMTAw
MCk7CiAJaWVlZTgwMjExX2h3bXBfcm9vdGludCA9IG1zZWNzX3RvX3RpY2tzKDIqMTAwMCk7CiAJ
aWVlZTgwMjExX2h3bXBfcmFubmludCA9IG1zZWNzX3RvX3RpY2tzKDEqMTAwMCk7CisJCisJaWVl
ZTgwMjExX2h3bXBfcm9vdG1pbl9jb25maW50LnR2X3NlYyA9IHRpY2tzX3RvX3NlY3MoaWVlZTgw
MjExX2h3bXBfcm9vdGNvbmZpbnQpOworCWllZWU4MDIxMV9od21wX3Jvb3RtaW5fY29uZmludC50
dl91c2VjID0gMDsKIAogCS8qCiAJICogUmVnaXN0ZXIgYWN0aW9uIGZyYW1lIGhhbmRsZXIuCkBA
IC0yNDMsNiArMjcyLDcgQEAgaHdtcF92YXR0YWNoKHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCkK
IAkJcHJpbnRmKCIlczogY291bGRuJ3QgYWxsb2MgSFdNUCBzdGF0ZVxuIiwgX19mdW5jX18pOwog
CQlyZXR1cm47CiAJfQorCQogCWhzLT5oc19tYXhob3BzID0gSUVFRTgwMjExX0hXTVBfREVGQVVM
VF9NQVhIT1BTOwogCWNhbGxvdXRfaW5pdCgmaHMtPmhzX3Jvb3R0aW1lciwgQ0FMTE9VVF9NUFNB
RkUpOwogCXZhcC0+aXZfaHdtcCA9IGhzOwpAQCAtMjU2LDcgKzI4Niw3IEBAIGh3bXBfdmRldGFj
aChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXApCiAJY2FsbG91dF9kcmFpbigmaHMtPmhzX3Jvb3R0
aW1lcik7CiAJZnJlZSh2YXAtPml2X2h3bXAsIE1fODAyMTFfVkFQKTsKIAl2YXAtPml2X2h3bXAg
PSBOVUxMOwotfSAKK30KIAogaW50CiBod21wX25ld3N0YXRlKHN0cnVjdCBpZWVlODAyMTF2YXAg
KnZhcCwgZW51bSBpZWVlODAyMTFfc3RhdGUgb3N0YXRlLCBpbnQgYXJnKQpAQCAtMjgxLDEwICsz
MTEsMTAgQEAgaHdtcF9yZWN2X2FjdGlvbl9tZXNocGF0aChzdHJ1Y3QgaWVlZTgwMjExX25vZGUg
Km5pLAogCWNvbnN0IHVpbnQ4X3QgKmZybSwgY29uc3QgdWludDhfdCAqZWZybSkKIHsKIAlzdHJ1
Y3QgaWVlZTgwMjExdmFwICp2YXAgPSBuaS0+bmlfdmFwOwotCXN0cnVjdCBpZWVlODAyMTFfbWVz
aHByZXFfaWUgcHJlcTsKLQlzdHJ1Y3QgaWVlZTgwMjExX21lc2hwcmVwX2llIHByZXA7Ci0Jc3Ry
dWN0IGllZWU4MDIxMV9tZXNocGVycl9pZSBwZXJyOwotCXN0cnVjdCBpZWVlODAyMTFfbWVzaHJh
bm5faWUgcmFubjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21lc2hwcmVxX2llICpwcmVxOworCXN0cnVj
dCBpZWVlODAyMTFfbWVzaHByZXBfaWUgKnByZXA7CisJc3RydWN0IGllZWU4MDIxMV9tZXNocGVy
cl9pZSAqcGVycjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21lc2hyYW5uX2llICpyYW5uOwogCWNvbnN0
IHVpbnQ4X3QgKmllZnJtID0gZnJtICsgMjsgLyogYWN0aW9uICsgY29kZSAqLwogCWludCBmb3Vu
ZCA9IDA7CiAKQEAgLTI5Myw5MCArMzIzLDE1NiBAQCBod21wX3JlY3ZfYWN0aW9uX21lc2hwYXRo
KHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksCiAJCXN3aXRjaCAoKmllZnJtKSB7CiAJCWNhc2Ug
SUVFRTgwMjExX0VMRU1JRF9NRVNIUFJFUToKIAkJewotCQkJY29uc3Qgc3RydWN0IGllZWU4MDIx
MV9tZXNocHJlcV9pZSAqbXByZXEgPQotCQkJICAgIChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX21l
c2hwcmVxX2llICopIGllZnJtOwotCQkJLyogWFhYID4gMSB0YXJnZXQgKi8KLQkJCWlmIChtcHJl
cS0+cHJlcV9sZW4gIT0KLQkJCSAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZXNocHJlcV9p
ZSkgLSAyKSB7CisJCQlpbnQgaSA9IDA7CisJCQlwcmVxID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qg
aWVlZTgwMjExX21lc2hwcmVxX2llKSArCisJCQkgICAgKGllZnJtWzI3XS0xKSpzaXplb2YoKnBy
ZXEtPnByZXFfdGFyZ2V0cyksCisJCQkgICAgTV84MDIxMV9IV01QX1BSRVEsIE1fTk9XQUlUIHwg
TV9aRVJPKTsKKwkJCUtBU1NFUlQocHJlcSAhPSBOVUxMLCAoInByZXEgPT0gTlVMTCIpKTsKKwor
CQkJcHJlcS0+cHJlcV9pZSA9ICppZWZybSsrOworCQkJcHJlcS0+cHJlcV9sZW4gPSAqaWVmcm0r
KzsKKwkJCXByZXEtPnByZXFfZmxhZ3MgPSAqaWVmcm0rKzsKKwkJCXByZXEtPnByZXFfaG9wY291
bnQgPSAqaWVmcm0rKzsKKwkJCXByZXEtPnByZXFfdHRsID0gKmllZnJtKys7CisJCQlwcmVxLT5w
cmVxX2lkID0gTEVfUkVBRF80KGllZnJtKTsgaWVmcm0gKz0gNDsKKwkJCUlFRUU4MDIxMV9BRERS
X0NPUFkocHJlcS0+cHJlcV9vcmlnYWRkciwgaWVmcm0pOworCQkJaWVmcm0gKz0gNjsKKwkJCXBy
ZXEtPnByZXFfb3JpZ3NlcSA9IExFX1JFQURfNChpZWZybSk7IGllZnJtICs9IDQ7CisJCQkvKiBO
QjogbWF5IGhhdmUgT3JpZ2luYXRvciBQcm94aWVkIEFkZHJlc3MgKi8KKwkJCXByZXEtPnByZXFf
bGlmZXRpbWUgPSBMRV9SRUFEXzQoaWVmcm0pOyBpZWZybSArPSA0OworCQkJcHJlcS0+cHJlcV9t
ZXRyaWMgPSBMRV9SRUFEXzQoaWVmcm0pOyBpZWZybSArPSA0OworCQkJcHJlcS0+cHJlcV90Y291
bnQgPSAqaWVmcm0rKzsKKwkJCQorCQkJaWYgKHByZXEtPnByZXFfbGVuICE9IElFRUU4MDIxMV9N
RVNIUFJFUV9CQVNFX1NaICsKKwkJCSAgICBwcmVxLT5wcmVxX3Rjb3VudCAqIElFRUU4MDIxMV9N
RVNIUFJFUV9UUkdUX1NaKSB7CiAJCQkJSUVFRTgwMjExX0RJU0NBUkQodmFwLAogCQkJCSAgICBJ
RUVFODAyMTFfTVNHX0FDVElPTiB8IElFRUU4MDIxMV9NU0dfSFdNUCwKIAkJCQkgICAgd2gsIE5V
TEwsICIlcyIsICJQUkVRIHdpdGggd3JvbmcgbGVuIik7CiAJCQkJdmFwLT5pdl9zdGF0cy5pc19y
eF9tZ3RkaXNjYXJkKys7CisJCQkJZnJlZShwcmVxLCBNXzgwMjExX0hXTVBfUFJFUSk7CiAJCQkJ
YnJlYWs7CiAJCQl9Ci0JCQltZW1jcHkoJnByZXEsIG1wcmVxLCBzaXplb2YocHJlcSkpOwotCQkJ
cHJlcS5wcmVxX2lkID0gTEVfUkVBRF80KCZtcHJlcS0+cHJlcV9pZCk7Ci0JCQlwcmVxLnByZXFf
b3JpZ3NlcSA9IExFX1JFQURfNCgmbXByZXEtPnByZXFfb3JpZ3NlcSk7Ci0JCQlwcmVxLnByZXFf
bGlmZXRpbWUgPSBMRV9SRUFEXzQoJm1wcmVxLT5wcmVxX2xpZmV0aW1lKTsKLQkJCXByZXEucHJl
cV9tZXRyaWMgPSBMRV9SRUFEXzQoJm1wcmVxLT5wcmVxX21ldHJpYyk7Ci0JCQlwcmVxLnByZXFf
dGFyZ2V0c1swXS50YXJnZXRfc2VxID0KLQkJCSAgICBMRV9SRUFEXzQoJm1wcmVxLT5wcmVxX3Rh
cmdldHNbMF0udGFyZ2V0X3NlcSk7Ci0JCQlod21wX3JlY3ZfcHJlcSh2YXAsIG5pLCB3aCwgJnBy
ZXEpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgcHJlcS0+cHJlcV90Y291bnQ7IGkrKykgeworCQkJ
CXByZXEtPnByZXFfdGFyZ2V0c1tpXS50YXJnZXRfZmxhZ3MgPSAqaWVmcm0rKzsKKwkJCQlJRUVF
ODAyMTFfQUREUl9DT1BZKAorCQkJCSAgICBwcmVxLT5wcmVxX3RhcmdldHNbaV0udGFyZ2V0X2Fk
ZHIsIGllZnJtKTsKKwkJCQlpZWZybSArPSA2OworCQkJCXByZXEtPnByZXFfdGFyZ2V0c1tpXS50
YXJnZXRfc2VxID0KKwkJCQkgICAgTEVfUkVBRF80KGllZnJtKTsgaWVmcm0gKz0gNDsKKwkJCX0K
KworCQkJaHdtcF9yZWN2X3ByZXEodmFwLCBuaSwgd2gsIHByZXEpOworCQkJZnJlZShwcmVxLCBN
XzgwMjExX0hXTVBfUFJFUSk7CiAJCQlmb3VuZCsrOwotCQkJYnJlYWs7CQorCQkJYnJlYWs7CiAJ
CX0KIAkJY2FzZSBJRUVFODAyMTFfRUxFTUlEX01FU0hQUkVQOgogCQl7Ci0JCQljb25zdCBzdHJ1
Y3QgaWVlZTgwMjExX21lc2hwcmVwX2llICptcHJlcCA9Ci0JCQkgICAgKGNvbnN0IHN0cnVjdCBp
ZWVlODAyMTFfbWVzaHByZXBfaWUgKikgaWVmcm07Ci0JCQlpZiAobXByZXAtPnByZXBfbGVuICE9
Ci0JCQkgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbWVzaHByZXBfaWUpIC0gMikgeworCQkJ
cHJlcCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZXNocHJlcF9pZSksCisJCQkg
ICAgTV84MDIxMV9IV01QX1BSRVAsIE1fTk9XQUlUIHwgTV9aRVJPKTsKKwkJCUtBU1NFUlQocHJl
cCAhPSBOVUxMLCAoInByZXAgPT0gTlVMTCIpKTsKKworCQkJcHJlcC0+cHJlcF9pZSA9ICppZWZy
bSsrOworCQkJcHJlcC0+cHJlcF9sZW4gPSAqaWVmcm0rKzsKKworCQkJaWYgKHByZXAtPnByZXBf
bGVuICE9IElFRUU4MDIxMV9NRVNIUFJFUF9CQVNFX1NaKSB7CiAJCQkJSUVFRTgwMjExX0RJU0NB
UkQodmFwLAogCQkJCSAgICBJRUVFODAyMTFfTVNHX0FDVElPTiB8IElFRUU4MDIxMV9NU0dfSFdN
UCwKIAkJCQkgICAgd2gsIE5VTEwsICIlcyIsICJQUkVQIHdpdGggd3JvbmcgbGVuIik7CiAJCQkJ
dmFwLT5pdl9zdGF0cy5pc19yeF9tZ3RkaXNjYXJkKys7CisJCQkJZnJlZShwcmVwLCBNXzgwMjEx
X0hXTVBfUFJFUCk7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQltZW1jcHkoJnByZXAsIG1wcmVwLCBz
aXplb2YocHJlcCkpOwotCQkJcHJlcC5wcmVwX3RhcmdldHNlcSA9IExFX1JFQURfNCgmbXByZXAt
PnByZXBfdGFyZ2V0c2VxKTsKLQkJCXByZXAucHJlcF9saWZldGltZSA9IExFX1JFQURfNCgmbXBy
ZXAtPnByZXBfbGlmZXRpbWUpOwotCQkJcHJlcC5wcmVwX21ldHJpYyA9IExFX1JFQURfNCgmbXBy
ZXAtPnByZXBfbWV0cmljKTsKLQkJCXByZXAucHJlcF9vcmlnc2VxID0gTEVfUkVBRF80KCZtcHJl
cC0+cHJlcF9vcmlnc2VxKTsKLQkJCWh3bXBfcmVjdl9wcmVwKHZhcCwgbmksIHdoLCAmcHJlcCk7
CisKKwkJCXByZXAtPnByZXBfZmxhZ3MgPSAqaWVmcm0rKzsKKwkJCXByZXAtPnByZXBfaG9wY291
bnQgPSAqaWVmcm0rKzsKKwkJCXByZXAtPnByZXBfdHRsID0gKmllZnJtKys7CisJCQlJRUVFODAy
MTFfQUREUl9DT1BZKHByZXAtPnByZXBfdGFyZ2V0YWRkciwgaWVmcm0pOworCQkJaWVmcm0gKz0g
NjsKKwkJCXByZXAtPnByZXBfdGFyZ2V0c2VxID0gTEVfUkVBRF80KGllZnJtKTsgaWVmcm0gKz0g
NDsKKwkJCS8qIE5COiBNYXkgaGF2ZSBUYXJnZXQgUHJveGllZCBBZGRyZXNzICovCisJCQlwcmVw
LT5wcmVwX2xpZmV0aW1lID0gTEVfUkVBRF80KGllZnJtKTsgaWVmcm0gKz0gNDsKKwkJCXByZXAt
PnByZXBfbWV0cmljID0gTEVfUkVBRF80KGllZnJtKTsgaWVmcm0gKz0gNDsKKwkJCUlFRUU4MDIx
MV9BRERSX0NPUFkocHJlcC0+cHJlcF9vcmlnYWRkciwgaWVmcm0pOworCQkJaWVmcm0gKz0gNjsK
KwkJCXByZXAtPnByZXBfb3JpZ3NlcSA9IExFX1JFQURfNChpZWZybSk7IGllZnJtICs9IDQ7CisK
KwkJCWh3bXBfcmVjdl9wcmVwKHZhcCwgbmksIHdoLCBwcmVwKTsKKwkJCWZyZWUocHJlcCwgTV84
MDIxMV9IV01QX1BSRVApOwogCQkJZm91bmQrKzsKIAkJCWJyZWFrOwogCQl9CiAJCWNhc2UgSUVF
RTgwMjExX0VMRU1JRF9NRVNIUEVSUjoKIAkJewotCQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9t
ZXNocGVycl9pZSAqbXBlcnIgPQotCQkJICAgIChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX21lc2hw
ZXJyX2llICopIGllZnJtOwotCQkJLyogWFhYID4gMSB0YXJnZXQgKi8KLQkJCWlmIChtcGVyci0+
cGVycl9sZW4gIT0KLQkJCSAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZXNocGVycl9pZSkg
LSAyKSB7CisJCQlpbnQgaSA9IDA7CisJCQlwZXJyID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgaWVl
ZTgwMjExX21lc2hwZXJyX2llKSArCisJCQkgICAgKGllZnJtWzNdLTEpKnNpemVvZigqcGVyci0+
cGVycl9kZXN0cyksCisJCQkgICAgTV84MDIxMV9IV01QX1BFUlIsIE1fTk9XQUlUIHwgTV9aRVJP
KTsKKwkJCUtBU1NFUlQocGVyciAhPSBOVUxMLCAoInBlcnIgPT0gTlVMTCIpKTsKKwkJCXBlcnIt
PnBlcnJfaWUgPSAqaWVmcm0rKzsKKwkJCXBlcnItPnBlcnJfbGVuID0gKmllZnJtKys7CisJCQlw
ZXJyLT5wZXJyX3R0bCA9ICppZWZybSsrOworCQkJcGVyci0+cGVycl9uZGVzdHMgPSAqaWVmcm0r
KzsKKworCQkJaWYgKHBlcnItPnBlcnJfbGVuICE9IChJRUVFODAyMTFfTUVTSFBFUlJfQkFTRV9T
WiArCisJCQkgICAgcGVyci0+cGVycl9uZGVzdHMgKiBJRUVFODAyMTFfTUVTSFBFUlJfREVTVF9T
WikpIHsKIAkJCQlJRUVFODAyMTFfRElTQ0FSRCh2YXAsCiAJCQkJICAgIElFRUU4MDIxMV9NU0df
QUNUSU9OIHwgSUVFRTgwMjExX01TR19IV01QLAotCQkJCSAgICB3aCwgTlVMTCwgIiVzIiwgIlBF
UlIgd2l0aCB3cm9uZyBsZW4iKTsKKwkJCQkgICAgd2gsIE5VTEwsICIlcyIsICJQRVJSIHdpdGgg
d3JvbmcgbGVuLCAlcyIsCisJCQkJICAgIHBlcnItPnBlcnJfbGVuKTsKIAkJCQl2YXAtPml2X3N0
YXRzLmlzX3J4X21ndGRpc2NhcmQrKzsKKwkJCQlmcmVlKHBlcnIsIE1fODAyMTFfSFdNUF9QRVJS
KTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCW1lbWNweSgmcGVyciwgbXBlcnIsIHNpemVvZihwZXJy
KSk7Ci0JCQlwZXJyLnBlcnJfZGVzdHNbMF0uZGVzdF9zZXEgPQotCQkJICAgIExFX1JFQURfNCgm
bXBlcnItPnBlcnJfZGVzdHNbMF0uZGVzdF9zZXEpOwotCQkJaHdtcF9yZWN2X3BlcnIodmFwLCBu
aSwgd2gsICZwZXJyKTsKKworCQkJZm9yKGkgPSAwOyBpPHBlcnItPnBlcnJfbmRlc3RzOyBpKysp
IHsKKwkJCQlwZXJyLT5wZXJyX2Rlc3RzW2ldLmRlc3RfZmxhZ3MgPSAqaWVmcm0rKzsKKwkJCQlJ
RUVFODAyMTFfQUREUl9DT1BZKAorCQkJCSAgICBwZXJyLT5wZXJyX2Rlc3RzW2ldLmRlc3RfYWRk
ciwgaWVmcm0pOworCQkJCWllZnJtICs9IDY7CisJCQkJcGVyci0+cGVycl9kZXN0c1tpXS5kZXN0
X3NlcSA9IExFX1JFQURfNChpZWZybSk7CisJCQkJaWVmcm0gKz0gNDsKKwkJCQkvKiBOQjogTWF5
IGhhdmUgVGFyZ2V0IFByb3hpZWQgQWRkcmVzcyAqLworCQkJCXBlcnItPnBlcnJfZGVzdHNbaV0u
ZGVzdF9yY29kZSA9CisJCQkJICAgIExFX1JFQURfMihpZWZybSk7CisJCQkJaWVmcm0gKz0gMjsK
KwkJCX0KKworCQkJaHdtcF9yZWN2X3BlcnIodmFwLCBuaSwgd2gsIHBlcnIpOworCQkJZnJlZShw
ZXJyLCBNXzgwMjExX0hXTVBfUEVSUik7CiAJCQlmb3VuZCsrOwogCQkJYnJlYWs7CiAJCX0KIAkJ
Y2FzZSBJRUVFODAyMTFfRUxFTUlEX01FU0hSQU5OOgogCQl7Ci0JCQljb25zdCBzdHJ1Y3QgaWVl
ZTgwMjExX21lc2hyYW5uX2llICptcmFubiA9Ci0JCQkgICAgKGNvbnN0IHN0cnVjdCBpZWVlODAy
MTFfbWVzaHJhbm5faWUgKikgaWVmcm07Ci0JCQlpZiAobXJhbm4tPnJhbm5fbGVuICE9Ci0JCQkg
ICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbWVzaHJhbm5faWUpIC0gMikgeworCQkJcmFubiA9
IG1hbGxvYyhzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZXNocmFubl9pZSksCisJCQkgICAgTV84
MDIxMV9IV01QX1JBTk4sIE1fTk9XQUlUIHwgTV9aRVJPKTsKKwkJCUtBU1NFUlQocmFubiAhPSBO
VUxMLCAoInBlcnIgPT0gTlVMTCIpKTsKKwkJCWlmIChpZWZybVsxXSAhPSBJRUVFODAyMTFfTUVT
SFJBTk5fQkFTRV9TWikgewogCQkJCUlFRUU4MDIxMV9ESVNDQVJEKHZhcCwKIAkJCQkgICAgSUVF
RTgwMjExX01TR19BQ1RJT04gfCBJRUVFODAyMTFfTVNHX0hXTVAsCi0JCQkJICAgIHdoLCBOVUxM
LCAiJXMiLCAiUkFOIHdpdGggd3JvbmcgbGVuIik7CisJCQkJICAgIHdoLCBOVUxMLCAiUkFOTiB3
aXRoIHdyb25nIGxlbj0lZCIsCisJCQkJICAgIGllZnJtWzFdKTsKIAkJCQl2YXAtPml2X3N0YXRz
LmlzX3J4X21ndGRpc2NhcmQrKzsKLQkJCQlyZXR1cm4gMTsKKwkJCQlmcmVlKHJhbm4sIE1fODAy
MTFfSFdNUF9SQU5OKTsKKwkJCQlicmVhazsKIAkJCX0KLQkJCW1lbWNweSgmcmFubiwgbXJhbm4s
IHNpemVvZihyYW5uKSk7Ci0JCQlyYW5uLnJhbm5fc2VxID0gTEVfUkVBRF80KCZtcmFubi0+cmFu
bl9zZXEpOwotCQkJcmFubi5yYW5uX21ldHJpYyA9IExFX1JFQURfNCgmbXJhbm4tPnJhbm5fbWV0
cmljKTsKLQkJCWh3bXBfcmVjdl9yYW5uKHZhcCwgbmksIHdoLCAmcmFubik7CisJCQlyYW5uLT5y
YW5uX2llID0gKmllZnJtKys7CisJCQlyYW5uLT5yYW5uX2xlbiA9ICppZWZybSsrOzsKKwkJCXJh
bm4tPnJhbm5fZmxhZ3MgPSAqaWVmcm0rKzsKKwkJCXJhbm4tPnJhbm5faG9wY291bnQgPSAqaWVm
cm0rKzsKKwkJCXJhbm4tPnJhbm5fdHRsID0gKmllZnJtKys7CisJCQlJRUVFODAyMTFfQUREUl9D
T1BZKHJhbm4tPnJhbm5fYWRkciwgaWVmcm0pOyBpZWZybSArPSA2OworCQkJcmFubi0+cmFubl9z
ZXEgPSBMRV9SRUFEXzQoaWVmcm0pOyBpZWZybSArPSA0OworCQkJcmFubi0+cmFubl9pbnRlcnZh
bCA9IExFX1JFQURfNChpZWZybSk7IGllZnJtICs9IDQ7CisJCQlyYW5uLT5yYW5uX21ldHJpYyA9
IExFX1JFQURfNChpZWZybSk7IGllZnJtICs9IDQ7CisJCQlod21wX3JlY3ZfcmFubih2YXAsIG5p
LCB3aCwgcmFubik7CisJCQlmcmVlKHJhbm4sIE1fODAyMTFfSFdNUF9SQU5OKTsKIAkJCWZvdW5k
Kys7CiAJCQlicmVhazsKIAkJfQogCQl9Ci0JCWllZnJtICs9IGllZnJtWzFdICsgMjsKIAl9CiAJ
aWYgKCFmb3VuZCkgewogCQlJRUVFODAyMTFfRElTQ0FSRCh2YXAsCkBAIC00OTMsOSArNTg5LDgg
QEAgaHdtcF9hZGRfbWVzaHByZXEodWludDhfdCAqZnJtLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjEx
X21lc2hwcmVxX2llICpwcmVxKQogewogCWludCBpOwogCi0JKmZybSsrID0gSUVFRTgwMjExX0VM
RU1JRF9NRVNIUFJFUTsKLQkqZnJtKysgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZXNocHJl
cV9pZSkgLSAyICsKLQkgICAgKHByZXEtPnByZXFfdGNvdW50IC0gMSkgKiBzaXplb2YoKnByZXEt
PnByZXFfdGFyZ2V0cyk7CisJKmZybSsrID0gcHJlcS0+cHJlcV9pZTsKKwkqZnJtKysgPSBwcmVx
LT5wcmVxX2xlbjsKIAkqZnJtKysgPSBwcmVxLT5wcmVxX2ZsYWdzOwogCSpmcm0rKyA9IHByZXEt
PnByZXFfaG9wY291bnQ7CiAJKmZybSsrID0gcHJlcS0+cHJlcV90dGw7CkBAIC01MjAsOCArNjE1
LDggQEAgaHdtcF9hZGRfbWVzaHByZXEodWludDhfdCAqZnJtLCBjb25zdCBzdHJ1Y3QgaWVlZTgw
MjExX21lc2hwcmVxX2llICpwcmVxKQogc3RhdGljIHVpbnQ4X3QgKgogaHdtcF9hZGRfbWVzaHBy
ZXAodWludDhfdCAqZnJtLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX21lc2hwcmVwX2llICpwcmVw
KQogewotCSpmcm0rKyA9IElFRUU4MDIxMV9FTEVNSURfTUVTSFBSRVA7Ci0JKmZybSsrID0gc2l6
ZW9mKHN0cnVjdCBpZWVlODAyMTFfbWVzaHByZXBfaWUpIC0gMjsKKwkqZnJtKysgPSBwcmVwLT5w
cmVwX2llOworCSpmcm0rKyA9IHByZXAtPnByZXBfbGVuOwogCSpmcm0rKyA9IHByZXAtPnByZXBf
ZmxhZ3M7CiAJKmZybSsrID0gcHJlcC0+cHJlcF9ob3Bjb3VudDsKIAkqZnJtKysgPSBwcmVwLT5w
cmVwX3R0bDsKQEAgLTU0Miw5ICs2MzcsOCBAQCBod21wX2FkZF9tZXNocGVycih1aW50OF90ICpm
cm0sIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbWVzaHBlcnJfaWUgKnBlcnIpCiB7CiAJaW50IGk7
CiAKLQkqZnJtKysgPSBJRUVFODAyMTFfRUxFTUlEX01FU0hQRVJSOwotCSpmcm0rKyA9IHNpemVv
ZihzdHJ1Y3QgaWVlZTgwMjExX21lc2hwZXJyX2llKSAtIDIgKwotCSAgICAocGVyci0+cGVycl9u
ZGVzdHMgLSAxKSAqIHNpemVvZigqcGVyci0+cGVycl9kZXN0cyk7CisJKmZybSsrID0gcGVyci0+
cGVycl9pZTsKKwkqZnJtKysgPSBwZXJyLT5wZXJyX2xlbjsKIAkqZnJtKysgPSBwZXJyLT5wZXJy
X3R0bDsKIAkqZnJtKysgPSBwZXJyLT5wZXJyX25kZXN0czsKIAlmb3IgKGkgPSAwOyBpIDwgcGVy
ci0+cGVycl9uZGVzdHM7IGkrKykgewpAQCAtNTYzLDEzICs2NTcsMTQgQEAgaHdtcF9hZGRfbWVz
aHBlcnIodWludDhfdCAqZnJtLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX21lc2hwZXJyX2llICpw
ZXJyKQogc3RhdGljIHVpbnQ4X3QgKgogaHdtcF9hZGRfbWVzaHJhbm4odWludDhfdCAqZnJtLCBj
b25zdCBzdHJ1Y3QgaWVlZTgwMjExX21lc2hyYW5uX2llICpyYW5uKQogewotCSpmcm0rKyA9IElF
RUU4MDIxMV9FTEVNSURfTUVTSFJBTk47Ci0JKmZybSsrID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAy
MTFfbWVzaHJhbm5faWUpIC0gMjsKKwkqZnJtKysgPSByYW5uLT5yYW5uX2llOworCSpmcm0rKyA9
IHJhbm4tPnJhbm5fbGVuOwogCSpmcm0rKyA9IHJhbm4tPnJhbm5fZmxhZ3M7CiAJKmZybSsrID0g
cmFubi0+cmFubl9ob3Bjb3VudDsKIAkqZnJtKysgPSByYW5uLT5yYW5uX3R0bDsKIAlJRUVFODAy
MTFfQUREUl9DT1BZKGZybSwgcmFubi0+cmFubl9hZGRyKTsgZnJtICs9IDY7CiAJQUREV09SRChm
cm0sIHJhbm4tPnJhbm5fc2VxKTsKKwlBRERXT1JEKGZybSwgcmFubi0+cmFubl9pbnRlcnZhbCk7
CiAJQUREV09SRChmcm0sIHJhbm4tPnJhbm5fbWV0cmljKTsKIAlyZXR1cm4gZnJtOwogfQpAQCAt
NjI4LDcgKzcyMyw3IEBAIGh3bXBfcm9vdG1vZGVfY2Iodm9pZCAqYXJnKQogCXByZXEucHJlcV90
Y291bnQgPSAxOwogCUlFRUU4MDIxMV9BRERSX0NPUFkoUFJFUV9UQUREUigwKSwgYnJvYWRjYXN0
YWRkcik7CiAJUFJFUV9URkxBR1MoMCkgPSBJRUVFODAyMTFfTUVTSFBSRVFfVEZMQUdTX1RPIHwK
LQkgICAgSUVFRTgwMjExX01FU0hQUkVRX1RGTEFHU19SRjsKKwkgICAgSUVFRTgwMjExX01FU0hQ
UkVRX1RGTEFHU19VU047CiAJUFJFUV9UU0VRKDApID0gMDsKIAl2YXAtPml2X3N0YXRzLmlzX2h3
bXBfcm9vdHJlcXMrKzsKIAlod21wX3NlbmRfcHJlcSh2YXAtPml2X2JzcywgdmFwLT5pdl9teWFk
ZHIsIGJyb2FkY2FzdGFkZHIsICZwcmVxKTsKQEAgLTY3NSw5ICs3NzAsMTAgQEAgaHdtcF9yZWN2
X3ByZXEoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5p
LAogICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZnJhbWUgKndoLCBjb25zdCBzdHJ1Y3QgaWVl
ZTgwMjExX21lc2hwcmVxX2llICpwcmVxKQogewogCXN0cnVjdCBpZWVlODAyMTFfbWVzaF9zdGF0
ZSAqbXMgPSB2YXAtPml2X21lc2g7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZXNoX3JvdXRlICpydCA9
IE5VTEw7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZXNoX3JvdXRlICpydG9yaWcgPSBOVUxMOwotCXN0
cnVjdCBpZWVlODAyMTFfaHdtcF9yb3V0ZSAqaHJvcmlnOworCXN0cnVjdCBpZWVlODAyMTFfbWVz
aF9yb3V0ZSAqcnQgPSBOVUxMOyAvLyBUYXJnZXQgcm91dGUKKwlzdHJ1Y3QgaWVlZTgwMjExX21l
c2hfcm91dGUgKnJ0b3JpZyA9IE5VTEw7IC8vIE9yaWdpbmF0b3Igcm91dGUKKwlzdHJ1Y3QgaWVl
ZTgwMjExX2h3bXBfcm91dGUgKmhyb3JpZyA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV9od21w
X3JvdXRlICpociA9IE5VTEw7CiAJc3RydWN0IGllZWU4MDIxMV9od21wX3N0YXRlICpocyA9IHZh
cC0+aXZfaHdtcDsKIAlzdHJ1Y3QgaWVlZTgwMjExX21lc2hwcmVwX2llIHByZXA7CiAKQEAgLTY5
MiwxNjkgKzc4OCwxNzMgQEAgaHdtcF9yZWN2X3ByZXEoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFw
LCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLAogCQlyZXR1cm47CiAKIAlJRUVFODAyMTFfTk9U
RSh2YXAsIElFRUU4MDIxMV9NU0dfSFdNUCwgbmksCi0JICAgICJyZWNlaXZlZCBQUkVRLCBzb3Vy
Y2UgJXMiLCBldGhlcl9zcHJpbnRmKHByZXEtPnByZXFfb3JpZ2FkZHIpKTsKKwkgICAgInJlY2Vp
dmVkIFBSRVEsIG9yaWdpbmF0b3IgJXMsIHRhcmdldCAlcyIsCisJICAgIGV0aGVyX3NwcmludGYo
cHJlcS0+cHJlcV9vcmlnYWRkciksIGV0aGVyX3NwcmludGYoUFJFUV9UQUREUigwKSkpOwogCiAJ
LyoKLQkgKiBBY2NlcHRhbmNlIGNyaXRlcmlhOiBpZiB0aGUgUFJFUSBpcyBub3QgZm9yIHVzIGFu
ZAotCSAqIGZvcndhcmRpbmcgaXMgZGlzYWJsZWQsIGRpc2NhcmQgdGhpcyBQUkVRLgorCSAqIEFj
Y2VwdGFuY2UgY3JpdGVyaWE6IGlmIHRoZSBQUkVRIGlzIG5vdCBmb3IgdXMgb3Igbm90IGJyb2Fk
Y2FzdAorCSAqIEFORCBmb3J3YXJkaW5nIGlzIGRpc2FibGVkLCBkaXNjYXJkIHRoaXMgUFJFUS4K
IAkgKi8KLQlpZiAoIUlFRUU4MDIxMV9BRERSX0VRKHZhcC0+aXZfbXlhZGRyLCBQUkVRX1RBRERS
KDApKSAmJgorCWlmICgoIUlFRUU4MDIxMV9BRERSX0VRKHZhcC0+aXZfbXlhZGRyLCBQUkVRX1RB
RERSKDApKSB8fCAvKiBYWFg6IHRlc3QgZm9yIHByb3h5IGFkZHJlc3MqLworCSAgICAhSUVFRTgw
MjExX0lTX01VTFRJQ0FTVChQUkVRX1RBRERSKDApKSkgJiYKIAkgICAgIShtcy0+bXNfZmxhZ3Mg
JiBJRUVFODAyMTFfTUVTSEZMQUdTX0ZXRCkpIHsKIAkJSUVFRTgwMjExX0RJU0NBUkRfTUFDKHZh
cCwgSUVFRTgwMjExX01TR19IV01QLAotCQkgICAgcHJlcS0+cHJlcV9vcmlnYWRkciwgTlVMTCwg
IiVzIiwgIm5vdCBhY2NlcHRpbmcgUFJFUSIpOworCQkgICAgbmktPm5pX21hY2FkZHIsIE5VTEws
ICJub3QgYWNjZXB0aW5nIFBSRVEsIG9yaWdpbmF0b3IgJXMiLAorCQkgICAgZXRoZXJfc3ByaW50
ZihwcmVxLT5wcmVxX29yaWdhZGRyKSk7CisJCXJldHVybjsKKwl9CisJLyoKKwkgKiBBY2NlcHRh
bmNlIGNyaXRlcmlhOiBpZiB1bmljYXN0IGFkZHJlc3NlZCAKKwkgKiBBTkQgbm8gdmFsaWQgZm9y
d2FyZGluZyBmb3IgVGFyZ2V0IG9mIFBSRVEsIGRpc2NhcmQgdGhpcyBQUkVRLgorCSAqLworCXJ0
ID0gaWVlZTgwMjExX21lc2hfcnRfZmluZCh2YXAsIFBSRVFfVEFERFIoMCkpOworCWlmKHJ0ICE9
IE5VTEwpCisJCWhyID0gSUVFRTgwMjExX01FU0hfUk9VVEVfUFJJVihydCwgc3RydWN0IGllZWU4
MDIxMV9od21wX3JvdXRlKTsKKwlpZigocHJlcS0+cHJlcV9mbGFncyAmIElFRUU4MDIxMV9NRVNI
UFJFUV9GTEFHU19BTSkgPT0gMCAmJiAvKiBhZGRyZXNzIG1vZGU6IHVjYXN0ICovCisJICAgIHJ0
ID09IE5VTEwgJiYKKwkgICAgIUlFRUU4MDIxMV9BRERSX0VRKHZhcC0+aXZfbXlhZGRyLCBQUkVR
X1RBRERSKDApKSkgeworCQlJRUVFODAyMTFfRElTQ0FSRF9NQUModmFwLCBJRUVFODAyMTFfTVNH
X0hXTVAsIG5pLT5uaV9tYWNhZGRyLAorCQkgICAgTlVMTCwgInVuaWNhc3QgYWRkcmVzc2VkIFBS
RVEsIG9yaWdpbmF0b3IgJXMsIHVua25vd24gdGFyZ2V0ICVzIiwKKwkJICAgICAgZXRoZXJfc3By
aW50ZihwcmVxLT5wcmVxX29yaWdhZGRyKSwKKwkJICAgICAgZXRoZXJfc3ByaW50ZihQUkVRX1RB
RERSKDApKSk7CiAJCXJldHVybjsKIAl9CisKKwkvKiBQUkVRIEFDQ0VQVEVEICovCisKIAlydG9y
aWcgPSBpZWVlODAyMTFfbWVzaF9ydF9maW5kKHZhcCwgcHJlcS0+cHJlcV9vcmlnYWRkcik7Ci0J
aWYgKHJ0b3JpZyA9PSBOVUxMKQorCWlmIChydG9yaWcgPT0gTlVMTCl7CiAJCXJ0b3JpZyA9IGll
ZWU4MDIxMV9tZXNoX3J0X2FkZCh2YXAsIHByZXEtPnByZXFfb3JpZ2FkZHIpOworCQlJRUVFODAy
MTFfTk9URSh2YXAsIElFRUU4MDIxMV9NU0dfSFdNUCwgbmksCisJCQkiYWRkaW5nIG9yaWdpbmF0
b3IgJXMiLAorCQkJZXRoZXJfc3ByaW50ZihwcmVxLT5wcmVxX29yaWdhZGRyKSk7CisJfQogCWlm
IChydG9yaWcgPT0gTlVMTCkgewogCQkvKiBYWFggc3RhdCAqLwogCQlyZXR1cm47CiAJfQogCWhy
b3JpZyA9IElFRUU4MDIxMV9NRVNIX1JPVVRFX1BSSVYocnRvcmlnLCBzdHJ1Y3QgaWVlZTgwMjEx
X2h3bXBfcm91dGUpOwotCS8qCi0JICogU2VxdWVuY2UgbnVtYmVyIHZhbGlkYXRpb24uCi0JICov
Ci0JaWYgKEhXTVBfU0VRX0xFUShwcmVxLT5wcmVxX2lkLCBocm9yaWctPmhyX3ByZXFpZCkgJiYK
LQkgICAgSFdNUF9TRVFfTEVRKHByZXEtPnByZXFfb3JpZ3NlcSwgaHJvcmlnLT5ocl9zZXEpKSB7
Ci0JCUlFRUU4MDIxMV9OT1RFKHZhcCwgSUVFRTgwMjExX01TR19IV01QLCBuaSwKLQkJICAgICJk
aXNjYXJkIFBSRVEgZnJvbSAlcywgb2xkIHNlcSBubyAldSA8PSAldSIsCi0JCSAgICBldGhlcl9z
cHJpbnRmKHByZXEtPnByZXFfb3JpZ2FkZHIpLAotCQkgICAgcHJlcS0+cHJlcV9vcmlnc2VxLCBo
cm9yaWctPmhyX3NlcSk7Ci0JCXJldHVybjsKLQl9Ci0JaHJvcmlnLT5ocl9wcmVxaWQgPSBwcmVx
LT5wcmVxX2lkOwotCWhyb3JpZy0+aHJfc2VxID0gcHJlcS0+cHJlcV9vcmlnc2VxOwogCi0JLyoK
LQkgKiBDaGVjayBpZiB0aGUgUFJFUSBpcyBhZGRyZXNzZWQgdG8gdXMuCi0JICovCi0JaWYgKElF
RUU4MDIxMV9BRERSX0VRKHZhcC0+aXZfbXlhZGRyLCBQUkVRX1RBRERSKDApKSkgewotCQlJRUVF
ODAyMTFfTk9URSh2YXAsIElFRUU4MDIxMV9NU0dfSFdNUCwgbmksCi0JCSAgICAicmVwbHkgdG8g
JXMiLCBldGhlcl9zcHJpbnRmKHByZXEtPnByZXFfb3JpZ2FkZHIpKTsKKwlpZihIV01QX1NFUV9H
VChwcmVxLT5wcmVxX29yaWdzZXEsIGhyb3JpZy0+aHJfc2VxKSB8fAorCSAgICAoSFdNUF9TRVFf
RVEocHJlcS0+cHJlcV9vcmlnc2VxLCBocm9yaWctPmhyX3NlcSkgJiYKKwkgICAgcHJlcS0+cHJl
cV9tZXRyaWMgPCBydG9yaWctPnJ0X21ldHJpYykpewogCQkvKgotCQkgKiBCdWlsZCBhbmQgc2Vu
ZCBhIFBSRVAgZnJhbWUuCisJCSAqIERhdGEgY3JlYXRpb24gYW5kIHVwZGF0ZSBvZiBmb3J3YXJk
aW5nIGluZm9ybWF0aW9uCisJCSAqIGFjY29yZGluZyB0byBUYWJsZSAxMUMtOCBmb3Igb3JpZ2lu
YXRvciBtZXNoIFNUQS4KIAkJICovCi0JCXByZXAucHJlcF9mbGFncyA9IDA7Ci0JCXByZXAucHJl
cF9ob3Bjb3VudCA9IDA7Ci0JCXByZXAucHJlcF90dGwgPSBtcy0+bXNfdHRsOwotCQlJRUVFODAy
MTFfQUREUl9DT1BZKHByZXAucHJlcF90YXJnZXRhZGRyLCB2YXAtPml2X215YWRkcik7Ci0JCXBy
ZXAucHJlcF90YXJnZXRzZXEgPSArK2hzLT5oc19zZXE7Ci0JCXByZXAucHJlcF9saWZldGltZSA9
IHByZXEtPnByZXFfbGlmZXRpbWU7Ci0JCXByZXAucHJlcF9tZXRyaWMgPSBJRUVFODAyMTFfTUVT
SExNRVRSSUNfSU5JVElBTFZBTDsKLQkJSUVFRTgwMjExX0FERFJfQ09QWShwcmVwLnByZXBfb3Jp
Z2FkZHIsIHByZXEtPnByZXFfb3JpZ2FkZHIpOwotCQlwcmVwLnByZXBfb3JpZ3NlcSA9IHByZXEt
PnByZXFfb3JpZ3NlcTsKLQkJaHdtcF9zZW5kX3ByZXAobmksIHZhcC0+aXZfbXlhZGRyLCB3aC0+
aV9hZGRyMiwgJnByZXApOworCQlocm9yaWctPmhyX3NlcSA9IHByZXEtPnByZXFfb3JpZ3NlcTsK
KwkJSUVFRTgwMjExX0FERFJfQ09QWShydG9yaWctPnJ0X25leHRob3AsIHdoLT5pX2FkZHIyKTsK
KwkJcnRvcmlnLT5ydF9tZXRyaWMgPSBwcmVxLT5wcmVxX21ldHJpYyArCisJCSAgICBtcy0+bXNf
cG1ldHJpYy0+bXBtX21ldHJpYyhuaSk7CisJCXJ0b3JpZy0+cnRfbmhvcHMgID0gcHJlcS0+cHJl
cV9ob3Bjb3VudCArIDE7CisJCXJ0b3JpZy0+cnRfbGlmZXRpbWUgID0gTUVTSF9ST1VURV9MSUZF
VElNRV9NQVgoCisJCSAgICBwcmVxLT5wcmVxX2xpZmV0aW1lLCBydG9yaWctPnJ0X2xpZmV0aW1l
KTsKKwkJLyogcGF0aCB0byBvcmlnIGlzIHZhbGlkIG5vdyAqLworCQlydG9yaWctPnJ0X2ZsYWdz
IHw9IElFRUU4MDIxMV9NRVNIUlRfRkxBR1NfVkFMSUQ7CisJCQogCQkvKgotCQkgKiBCdWlsZCB0
aGUgcmV2ZXJzZSBwYXRoLCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHkuCisJCSAqIERhdGEg
Y3JlYXRpb24gYW5kIHVwZGF0ZSBvZiBmb3J3YXJkaW5nIGluZm9ybWF0aW9uCisJCSAqIGZvciB0
cmFuc21pdHRlciBtZXNoIFNUQSBbT1BUSU9OQUw6IGlmIG1ldHJpYyBpbXByb3ZlZF0uCiAJCSAq
LwotCQlydCA9IGllZWU4MDIxMV9tZXNoX3J0X2ZpbmQodmFwLCBwcmVxLT5wcmVxX29yaWdhZGRy
KTsKLQkJaWYgKHJ0ID09IE5VTEwpCi0JCQlod21wX2Rpc2NvdmVyKHZhcCwgcHJlcS0+cHJlcV9v
cmlnYWRkciwgTlVMTCk7Ci0JCWVsc2UgaWYgKChydC0+cnRfZmxhZ3MgJiBJRUVFODAyMTFfTUVT
SFJUX0ZMQUdTX1ZBTElEKSA9PSAwKQotCQkJaHdtcF9kaXNjb3Zlcih2YXAsIHJ0LT5ydF9kZXN0
LCBOVUxMKTsKKwl9ZWxzZSBpZihociAhPSBOVUxMICYmCisJICAgIEhXTVBfU0VRX0VRKGhyLT5o
cl9zZXEsIFBSRVFfVFNFUSgwKSkgJiYKKwkgICAgSFdNUF9TRVFfR1QoaHJvcmlnLT5ocl9wcmVx
aWQsIHByZXEtPnByZXFfaWQpICYmCisJICAgIChydG9yaWctPnJ0X2ZsYWdzICYgSUVFRTgwMjEx
X01FU0hSVF9GTEFHU19WQUxJRCkgPT0gMCl7CisJCS8qCisJCSAqIFRhcmdldCBpcyBrbm93biwg
VGFyZ2V0IEhXTVAgc2VxIGlzIGVxdWFsIGFuZAorCQkgKiBvcmlnaW5hdG9yL1ByZXEgSUQgdW5r
b3duLgorCQkgKiBYWFg6IHRoaXMgaXMgdHJpY2t5LCBoaWdoIHByb2JhYmlsaXR5IHRoYXQKKwkJ
ICogaXQgaXMgbm90IGludGVwcmV0ZWQgY29ycmVjdGx5LgorCQkgKi8KKwkJSUVFRTgwMjExX05P
VEUodmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsIG5pLAorCQkgICAgInJlY2VpdmVkIFBSRVEsIG9y
aWdpbmF0b3IgJXMiLCAidW5rbm93biIpOworCX1lbHNleworCQlJRUVFODAyMTFfRElTQ0FSRF9N
QUModmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsIG5pLT5uaV9tYWNhZGRyLAorCQkgICAgTlVMTCwg
IlBSRVEsIG9yaWdpbmF0b3IgJXMsIGxhc3Qgc2VlbiBvcmlnLnNlcSAlZCwiCisJCSAgICAicHJl
cSBvcmlnLnNlcSAlZCIsCisJCSAgICBldGhlcl9zcHJpbnRmKHByZXEtPnByZXFfb3JpZ2FkZHIp
LCBocm9yaWctPmhyX3NlcSwKKwkJICAgIHByZXEtPnByZXFfb3JpZ3NlcSk7CiAJCXJldHVybjsK
IAl9CisKKwlocm9yaWctPmhyX3ByZXFpZCA9IHByZXEtPnByZXFfaWQ7IC8qIFJlY29yZCBsYXN0
IHNlZW4gUHJlcSBJRCAqLworCiAJLyoKLQkgKiBQcm9hY3RpdmUgUFJFUTogcmVwbHkgd2l0aCBh
IHByb2FjdGl2ZSBQUkVQIHRvIHRoZQotCSAqIHJvb3QgU1RBIGlmIHJlcXVlc3RlZC4KKwkgKiBQ
cm9jZXNzaW5nIG9mIFBSRVFzIHdpdGggdGFyZ2V0IGNvdW50ID0gMS4KIAkgKi8KLQlpZiAoSUVF
RTgwMjExX0FERFJfRVEoUFJFUV9UQUREUigwKSwgYnJvYWRjYXN0YWRkcikgJiYKLQkgICAgKFBS
RVFfVEZMQUdTKDApICYKLQkgICAgKChJRUVFODAyMTFfTUVTSFBSRVFfVEZMQUdTX1RPfElFRUU4
MDIxMV9NRVNIUFJFUV9URkxBR1NfUkYpID09Ci0JICAgIChJRUVFODAyMTFfTUVTSFBSRVFfVEZM
QUdTX1RPfElFRUU4MDIxMV9NRVNIUFJFUV9URkxBR1NfUkYpKSkpIHsKLQkJdWludDhfdCByb290
bWFjW0lFRUU4MDIxMV9BRERSX0xFTl07Ci0KLQkJSUVFRTgwMjExX0FERFJfQ09QWShyb290bWFj
LCBwcmVxLT5wcmVxX29yaWdhZGRyKTsKLQkJcnQgPSBpZWVlODAyMTFfbWVzaF9ydF9maW5kKHZh
cCwgcm9vdG1hYyk7Ci0JCWlmIChydCA9PSBOVUxMKSB7Ci0JCQlydCA9IGllZWU4MDIxMV9tZXNo
X3J0X2FkZCh2YXAsIHJvb3RtYWMpOwotCQkJaWYgKHJ0ID09IE5VTEwpIHsKLQkJCQlJRUVFODAy
MTFfTk9URSh2YXAsIElFRUU4MDIxMV9NU0dfSFdNUCwgbmksCi0JCQkJICAgICJ1bmFibGUgdG8g
YWRkIHJvb3QgbWVzaCBwYXRoIHRvICVzIiwKLQkJCQkgICAgZXRoZXJfc3ByaW50Zihyb290bWFj
KSk7Ci0JCQkJdmFwLT5pdl9zdGF0cy5pc19tZXNoX3J0YWRkZmFpbGVkKys7Ci0JCQkJcmV0dXJu
OwotCQkJfQotCQl9Ci0JCUlFRUU4MDIxMV9OT1RFKHZhcCwgSUVFRTgwMjExX01TR19IV01QLCBu
aSwKLQkJICAgICJyb290IG1lc2ggc3RhdGlvbiBAICVzIiwgZXRoZXJfc3ByaW50Zihyb290bWFj
KSk7Ci0KKwlpZiAocHJlcS0+cHJlcV90Y291bnQgPT0gMSkgeworCQlzdHJ1Y3QgaWVlZTgwMjEx
X21lc2hwcmVxX2llIHBwcmVxOyAvKiBwcm9wYWdhdGVkIFBSRVEgKi8KKwkJY29uc3QgdWludDhf
dCAqcHJlcV90cmFuc21pdF9hZGRyID0gYnJvYWRjYXN0YWRkcjsgCisJCQogCQkvKgotCQkgKiBS
ZXBseSB3aXRoIGEgUFJFUCBpZiB3ZSBkb24ndCBoYXZlIGEgcGF0aCB0byB0aGUgcm9vdAotCQkg
KiBvciBpZiB0aGUgcm9vdCBzZW50IHVzIGEgcHJvYWN0aXZlIFBSRVEuCisJCSAqIENoZWNrIGlm
IHRoZSBQUkVRIGlzIGFkZHJlc3NlZCB0byB1cy4KKwkJICogVE9ETzogYWxzbyBjaGVjayBpZiB3
ZSBhcmUgdGhlIHByb3h5IG9mIHRoZSB0YXJnZXQgTUFDLgogCQkgKi8KLQkJaWYgKChydC0+cnRf
ZmxhZ3MgJiBJRUVFODAyMTFfTUVTSFJUX0ZMQUdTX1ZBTElEKSA9PSAwIHx8Ci0JCSAgICAocHJl
cS0+cHJlcV9mbGFncyAmIElFRUU4MDIxMV9NRVNIUFJFUV9GTEFHU19QUCkpIHsKKwkJaWYgKElF
RUU4MDIxMV9BRERSX0VRKHZhcC0+aXZfbXlhZGRyLCBQUkVRX1RBRERSKDApKSkgeworCQkJSUVF
RTgwMjExX05PVEUodmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsIG5pLAorCQkJICAgICJyZXBseSBQ
UkVQLCBvcmlnaW5hdG9yICVzIiwKKwkJCSAgICBldGhlcl9zcHJpbnRmKHByZXEtPnByZXFfb3Jp
Z2FkZHIpKTsKKwkJCS8qCisJCQkqIEJ1aWxkIGFuZCBzZW5kIGEgUFJFUCBmcmFtZS4KKwkJCSov
CiAJCQlwcmVwLnByZXBfZmxhZ3MgPSAwOwogCQkJcHJlcC5wcmVwX2hvcGNvdW50ID0gMDsKIAkJ
CXByZXAucHJlcF90dGwgPSBtcy0+bXNfdHRsOwotCQkJSUVFRTgwMjExX0FERFJfQ09QWShwcmVw
LnByZXBfb3JpZ2FkZHIsIHJvb3RtYWMpOwotCQkJcHJlcC5wcmVwX29yaWdzZXEgPSBwcmVxLT5w
cmVxX29yaWdzZXE7Ci0JCQlwcmVwLnByZXBfbGlmZXRpbWUgPSBwcmVxLT5wcmVxX2xpZmV0aW1l
OwotCQkJcHJlcC5wcmVwX21ldHJpYyA9IElFRUU4MDIxMV9NRVNITE1FVFJJQ19JTklUSUFMVkFM
OwogCQkJSUVFRTgwMjExX0FERFJfQ09QWShwcmVwLnByZXBfdGFyZ2V0YWRkciwKIAkJCSAgICB2
YXAtPml2X215YWRkcik7CiAJCQlwcmVwLnByZXBfdGFyZ2V0c2VxID0gKytocy0+aHNfc2VxOwot
CQkJaHdtcF9zZW5kX3ByZXAodmFwLT5pdl9ic3MsIHZhcC0+aXZfbXlhZGRyLAotCQkJICAgIGJy
b2FkY2FzdGFkZHIsICZwcmVwKTsKKwkJCXByZXAucHJlcF9saWZldGltZSA9IHByZXEtPnByZXFf
bGlmZXRpbWU7CisJCQlwcmVwLnByZXBfbWV0cmljID0gSUVFRTgwMjExX01FU0hMTUVUUklDX0lO
SVRJQUxWQUw7CisJCQlJRUVFODAyMTFfQUREUl9DT1BZKHByZXAucHJlcF9vcmlnYWRkciwKKwkJ
CSAgICBwcmVxLT5wcmVxX29yaWdhZGRyKTsKKwkJCXByZXAucHJlcF9vcmlnc2VxID0gcHJlcS0+
cHJlcV9vcmlnc2VxOworCQkJaHdtcF9zZW5kX3ByZXAobmksIHZhcC0+aXZfbXlhZGRyLCB3aC0+
aV9hZGRyMiwgJnByZXApOworCQkJcmV0dXJuOworCQkvKgorCQkgKiBQUkVRIGlzIG5vdCBmb3Ig
dXMsIGJ1dCBoYXMgQUUgZmxhZyBzZXQuIFVwZGF0ZSBwcm94eQorCQkgKiBmb3J3YXJkaW5nIGlu
Zm9ybWF0aW9uIGZvciBvcmlnaW5hdG9yIGV4dGVybmFsIGFkZHJlc3MuCisJCSAqLworCQl9IGVs
c2UgaWYgKChwcmVxLT5wcmVxX2ZsYWdzICYgSUVFRTgwMjExX01FU0hQUkVRX0ZMQUdTX0FFKSkg
eworCQkJSUVFRTgwMjExX05PVEUodmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsIG5pLAorCQkJICAg
ICIlcyIsICJQcm94eSBVcGRhdGUgKFBYVSkiKTsKKwkJCS8qCisJCQkgKiBOQjogZmFsbCB0aHJv
dWdoIHRvIHRlc3QgZm9yIHZhbGlkIHJvdXRlIAorCQkJICogYW5kIHByby1hY3RpdmUgUFJFUS4K
KwkJCSAqLwogCQl9Ci0JCWh3bXBfZGlzY292ZXIodmFwLCByb290bWFjLCBOVUxMKTsKLQkJcmV0
dXJuOwotCX0KLQlydCA9IGllZWU4MDIxMV9tZXNoX3J0X2ZpbmQodmFwLCBQUkVRX1RBRERSKDAp
KTsKIAotCS8qCi0JICogRm9yd2FyZGluZyBhbmQgSW50ZXJtZWRpYXRlIHJlcGx5IGZvciBQUkVR
cyB3aXRoIDEgdGFyZ2V0LgotCSAqLwotCWlmIChwcmVxLT5wcmVxX3Rjb3VudCA9PSAxKSB7Ci0J
CXN0cnVjdCBpZWVlODAyMTFfbWVzaHByZXFfaWUgcHByZXE7IC8qIHByb3BhZ2F0ZWQgUFJFUSAq
LworCQltZW1jcHkoJnBwcmVxLCBwcmVxLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZXNocHJl
cV9pZSkpOwogCi0JCW1lbWNweSgmcHByZXEsIHByZXEsIHNpemVvZihwcHJlcSkpOwogCQkvKgog
CQkgKiBXZSBoYXZlIGEgdmFsaWQgcm91dGUgdG8gdGhpcyBub2RlLgogCQkgKi8KIAkJaWYgKHJ0
ICE9IE5VTEwgJiYKIAkJICAgIChydC0+cnRfZmxhZ3MgJiBJRUVFODAyMTFfTUVTSFJUX0ZMQUdT
X1ZBTElEKSkgewotCQkJaWYgKHByZXEtPnByZXFfdHRsID4gMSAmJgotCQkJICAgIHByZXEtPnBy
ZXFfaG9wY291bnQgPCBocy0+aHNfbWF4aG9wcykgeworCQkJLyoKKwkJCSAqIENoZWNrIGlmIHdl
IGNhbiBzZW5kIGFuIGludGVybWVkaWF0ZSBQYXRoIFJlcGx5LAorCQkJICogaS5lLiwgVGFyZ2V0
IE9ubHkgYml0IGlzIG5vdC4KKwkJCSAqLworCQkJaWYgKCEoUFJFUV9URkxBR1MoMCkgJiBJRUVF
ODAyMTFfTUVTSFBSRVFfVEZMQUdTX1RPKSAmJgorCQkJCUhXTVBfU0VRX0dFUShoci0+aHJfc2Vx
LCBQUkVRX1RTRVEoMCkpKSB7CisJCQkJc3RydWN0IGllZWU4MDIxMV9tZXNocHJlcF9pZSBwcmVw
OworCiAJCQkJSUVFRTgwMjExX05PVEUodmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsIG5pLAotCQkJ
CSAgICAiZm9yd2FyZCBQUkVRIGZyb20gJXMiLAotCQkJCSAgICBldGhlcl9zcHJpbnRmKHByZXEt
PnByZXFfb3JpZ2FkZHIpKTsKKwkJCQkgICAgImludGVybWVkaWF0ZSBQUkVQLCBvcmlnaW5hdG9y
ICVzLCB0YXJnZXQgJXMiLAorCQkJCSAgICBldGhlcl9zcHJpbnRmKHByZXEtPnByZXFfb3JpZ2Fk
ZHIpLAorCQkJCSAgICBldGhlcl9zcHJpbnRmKFBSRVFfVEFERFIoMCkpKTsKIAkJCQkvKgotCQkJ
CSAqIFByb3BhZ2F0ZSB0aGUgb3JpZ2luYWwgUFJFUS4KLQkJCQkgKi8KLQkJCQlwcHJlcS5wcmVx
X2hvcGNvdW50ICs9IDE7Ci0JCQkJcHByZXEucHJlcV90dGwgLT0gMTsKLQkJCQlwcHJlcS5wcmVx
X21ldHJpYyArPQotCQkJCSAgICBtcy0+bXNfcG1ldHJpYy0+bXBtX21ldHJpYyhuaSk7Ci0JCQkJ
LyoKLQkJCQkgKiBTZXQgVE8gYW5kIHVuc2V0IFJGIGJpdHMgYmVjYXVzZSB3ZSBhcmUgZ29pbmcK
KwkJCQkgKiBTZXQgVE8gYml0IGJlY2F1c2Ugd2UgYXJlIGdvaW5nCiAJCQkJICogdG8gc2VuZCBh
IFBSRVAgbmV4dC4KIAkJCQkgKi8KIAkJCQlwcHJlcS5wcmVxX3RhcmdldHNbMF0udGFyZ2V0X2Zs
YWdzIHw9CiAJCQkJICAgIElFRUU4MDIxMV9NRVNIUFJFUV9URkxBR1NfVE87Ci0JCQkJcHByZXEu
cHJlcV90YXJnZXRzWzBdLnRhcmdldF9mbGFncyAmPQotCQkJCSAgICB+SUVFRTgwMjExX01FU0hQ
UkVRX1RGTEFHU19SRjsKLQkJCQlod21wX3NlbmRfcHJlcShuaSwgdmFwLT5pdl9teWFkZHIsCi0J
CQkJICAgIGJyb2FkY2FzdGFkZHIsICZwcHJlcSk7Ci0JCQl9Ci0JCQkvKgotCQkJICogQ2hlY2sg
aWYgd2UgY2FuIHNlbmQgYW4gaW50ZXJtZWRpYXRlIFBhdGggUmVwbHksCi0JCQkgKiBpLmUuLCBU
YXJnZXQgT25seSBiaXQgaXMgbm90IHNldC4KLQkJCSAqLwotCSAgICAJCWlmICghKFBSRVFfVEZM
QUdTKDApICYgSUVFRTgwMjExX01FU0hQUkVRX1RGTEFHU19UTykpIHsKLQkJCQlzdHJ1Y3QgaWVl
ZTgwMjExX21lc2hwcmVwX2llIHByZXA7CiAKLQkJCQlJRUVFODAyMTFfTk9URSh2YXAsIElFRUU4
MDIxMV9NU0dfSFdNUCwgbmksCi0JCQkJICAgICJpbnRlcm1lZGlhdGUgcmVwbHkgZm9yIFBSRVEg
ZnJvbSAlcyIsCi0JCQkJICAgIGV0aGVyX3NwcmludGYocHJlcS0+cHJlcV9vcmlnYWRkcikpOwog
CQkJCXByZXAucHJlcF9mbGFncyA9IDA7Ci0JCQkJcHJlcC5wcmVwX2hvcGNvdW50ID0gcnQtPnJ0
X25ob3BzICsgMTsKKwkJCQlwcmVwLnByZXBfaG9wY291bnQgPSBydC0+cnRfbmhvcHM7CiAJCQkJ
cHJlcC5wcmVwX3R0bCA9IG1zLT5tc190dGw7CiAJCQkJSUVFRTgwMjExX0FERFJfQ09QWSgmcHJl
cC5wcmVwX3RhcmdldGFkZHIsCiAJCQkJICAgIFBSRVFfVEFERFIoMCkpOwotCQkJCXByZXAucHJl
cF90YXJnZXRzZXEgPSBocm9yaWctPmhyX3NlcTsKKwkJCQlwcmVwLnByZXBfdGFyZ2V0c2VxID0g
aHItPmhyX3NlcTsKIAkJCQlwcmVwLnByZXBfbGlmZXRpbWUgPSBwcmVxLT5wcmVxX2xpZmV0aW1l
OwogCQkJCXByZXAucHJlcF9tZXRyaWMgPSBydC0+cnRfbWV0cmljICsKIAkJCQkgICAgbXMtPm1z
X3BtZXRyaWMtPm1wbV9tZXRyaWMobmkpOwpAQCAtODYyLDQyICs5NjIsNzUgQEAgaHdtcF9yZWN2
X3ByZXEoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5p
LAogCQkJCSAgICBwcmVxLT5wcmVxX29yaWdhZGRyKTsKIAkJCQlwcmVwLnByZXBfb3JpZ3NlcSA9
IGhyb3JpZy0+aHJfc2VxOwogCQkJCWh3bXBfc2VuZF9wcmVwKG5pLCB2YXAtPml2X215YWRkciwK
LQkJCQkgICAgYnJvYWRjYXN0YWRkciwgJnByZXApOworCQkJCSAgICB3aC0+aV9hZGRyMiwgJnBy
ZXApOworCQkJfQorCQkJCisJCQkvKgorCQkJICogVGhpcyBpcyBhIHVuaWNhc3QgUFJFUSwgdXNl
ZCBlLmcuIHdoZW4gcmVxdWVzdGluZworCQkJICogYSBwYXRoIHRvIGEgcm9vdCBtZXNoIHdpdGgg
UkFOTiBtb2RlLgorCQkJICovCisJCQlpZighKHByZXEtPnByZXFfZmxhZ3MgJiBJRUVFODAyMTFf
TUVTSFBSRVFfRkxBR1NfQU0pKXsKKwkJCQlwcmVxX3RyYW5zbWl0X2FkZHIgPSBydC0+cnRfbmV4
dGhvcDsKIAkJCX0KIAkJLyoKLQkJICogV2UgaGF2ZSBubyBpbmZvcm1hdGlvbiBhYm91dCB0aGlz
IHBhdGgsCi0JCSAqIHByb3BhZ2F0ZSB0aGUgUFJFUS4KKwkJICogUHJvYWN0aXZlIFBSRVE6IHJl
cGx5IHdpdGggYSBwcm9hY3RpdmUgUFJFUCB0byB0aGUKKwkJICogcm9vdCBTVEEgaWYgcmVxdWVz
dGVkLgorCQkgKiBOQjogcHJlcS0+cHJlcV9vcmlnYWRkciBpcyB0aGUgcm9vdG1hYy4KIAkJICov
Ci0JCX0gZWxzZSBpZiAocHJlcS0+cHJlcV90dGwgPiAxICYmCi0JCSAgICBwcmVxLT5wcmVxX2hv
cGNvdW50IDwgaHMtPmhzX21heGhvcHMpIHsKLQkJCWlmIChydCA9PSBOVUxMKSB7Ci0JCQkJcnQg
PSBpZWVlODAyMTFfbWVzaF9ydF9hZGQodmFwLCBQUkVRX1RBRERSKDApKTsKLQkJCQlpZiAocnQg
PT0gTlVMTCkgewotCQkJCQlJRUVFODAyMTFfTk9URSh2YXAsIElFRUU4MDIxMV9NU0dfSFdNUCwK
LQkJCQkJICAgIG5pLCAidW5hYmxlIHRvIGFkZCBQUkVRIHBhdGggdG8gJXMiLAotCQkJCQkgICAg
ZXRoZXJfc3ByaW50ZihQUkVRX1RBRERSKDApKSk7Ci0JCQkJCXZhcC0+aXZfc3RhdHMuaXNfbWVz
aF9ydGFkZGZhaWxlZCsrOwotCQkJCQlyZXR1cm47Ci0JCQkJfQorCQl9IGVsc2UgaWYgKElFRUU4
MDIxMV9BRERSX0VRKFBSRVFfVEFERFIoMCksIGJyb2FkY2FzdGFkZHIpICYmCisJCSAgICAoUFJF
UV9URkxBR1MoMCkgJiBJRUVFODAyMTFfTUVTSFBSRVFfVEZMQUdTX1RPKSkgeworCQkJSUVFRTgw
MjExX05PVEUodmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsIG5pLAorCQkJICAgICJyb290IG1lc2gg
c3RhdGlvbiBAICVzIiwKKwkJCSAgICBldGhlcl9zcHJpbnRmKHByZXEtPnByZXFfb3JpZ2FkZHIp
KTsKKworCQkJLyoKKwkJCSAqIFJlcGx5IHdpdGggYSBQUkVQIGlmIHdlIGRvbid0IGhhdmUgYSBw
YXRoIHRvIHRoZSByb290CisJCQkgKiBvciBpZiB0aGUgcm9vdCBzZW50IHVzIGEgcHJvYWN0aXZl
IFBSRVEuCisJCQkgKiBYWFg6IEZvciBub3cgd2UgYXNzdW1lIHdlIGFsd2F5cyBuZWVkIHRvIHNl
bmQgZGF0YSB0bworCQkJICogcm9vdCBldmVuIGlmIGl0IHdhcyBub3QgcmVxdWVzdGVkIGJ5IHJv
b3QuCisJCQkgKi8KKwkJCWlmICgocnRvcmlnLT5ydF9mbGFncyAmIElFRUU4MDIxMV9NRVNIUlRf
RkxBR1NfVkFMSUQpID09IDAgfHwKKwkJCSAgICBwcmVxLT5wcmVxX2ZsYWdzICYgSUVFRTgwMjEx
X01FU0hQUkVRX0ZMQUdTX1BQKSB7CisJCQkJSUVFRTgwMjExX05PVEUodmFwLCBJRUVFODAyMTFf
TVNHX0hXTVAsIG5pLAorCQkJCSAgICAicmVwbHkgcHJvYWN0aXZlIFBSRVAsIHJvb3QgJXMsIHRv
ICVzIiwKKwkJCQkgICAgZXRoZXJfc3ByaW50ZihwcmVxLT5wcmVxX29yaWdhZGRyKSwKKwkJCQkg
ICAgZXRoZXJfc3ByaW50ZihydG9yaWctPnJ0X25leHRob3ApKTsKKwkJCQlwcmVwLnByZXBfZmxh
Z3MgPSAwOworCQkJCXByZXAucHJlcF9ob3Bjb3VudCA9IDA7CisJCQkJcHJlcC5wcmVwX3R0bCA9
IG1zLT5tc190dGw7CisJCQkJSUVFRTgwMjExX0FERFJfQ09QWShwcmVwLnByZXBfb3JpZ2FkZHIs
CisJCQkJICAgIHByZXEtPnByZXFfb3JpZ2FkZHIpOworCQkJCXByZXAucHJlcF9vcmlnc2VxID0g
cHJlcS0+cHJlcV9vcmlnc2VxOworCQkJCXByZXAucHJlcF9saWZldGltZSA9IHByZXEtPnByZXFf
bGlmZXRpbWU7CisJCQkJcHJlcC5wcmVwX21ldHJpYyA9CisJCQkJICAgIElFRUU4MDIxMV9NRVNI
TE1FVFJJQ19JTklUSUFMVkFMOworCQkJCUlFRUU4MDIxMV9BRERSX0NPUFkocHJlcC5wcmVwX3Rh
cmdldGFkZHIsCisJCQkJICAgIHZhcC0+aXZfbXlhZGRyKTsKKwkJCQlwcmVwLnByZXBfdGFyZ2V0
c2VxID0gKytocy0+aHNfc2VxOworCQkJCWh3bXBfc2VuZF9wcmVwKHZhcC0+aXZfYnNzLCB2YXAt
Pml2X215YWRkciwKKwkJCQkgICAgcnRvcmlnLT5ydF9uZXh0aG9wLCAmcHJlcCk7CiAJCQl9Ci0J
CQlydC0+cnRfbWV0cmljID0gcHJlcS0+cHJlcV9tZXRyaWM7Ci0JCQlydC0+cnRfbGlmZXRpbWUg
PSBwcmVxLT5wcmVxX2xpZmV0aW1lOwotCQkJaHJvcmlnID0gSUVFRTgwMjExX01FU0hfUk9VVEVf
UFJJVihydCwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2h3bXBfcm91dGUpOwotCQkJaHJvcmln
LT5ocl9zZXEgPSBwcmVxLT5wcmVxX29yaWdzZXE7Ci0JCQlocm9yaWctPmhyX3ByZXFpZCA9IHBy
ZXEtPnByZXFfaWQ7CisJCX0KIAorCQkvKiBQcm9wYWdhdGUgYSBQUkVRLiAqLworCQlpZiAocHJl
cS0+cHJlcV90dGwgPiAxICYmCisJCSAgICBwcmVxLT5wcmVxX2hvcGNvdW50IDwgaHMtPmhzX21h
eGhvcHMpIHsKIAkJCUlFRUU4MDIxMV9OT1RFKHZhcCwgSUVFRTgwMjExX01TR19IV01QLCBuaSwK
LQkJCSAgICAiZm9yd2FyZCBQUkVRIGZyb20gJXMiLAotCQkJICAgIGV0aGVyX3NwcmludGYocHJl
cS0+cHJlcV9vcmlnYWRkcikpOworCQkJICAgICJwcm9wYWdhdGUgUFJFUSwgb3JpZ2luYXRvciAl
cywgdGFyZ2V0ICVzLCBuZXh0aG9wICVzIiwKKwkJCSAgICBldGhlcl9zcHJpbnRmKHByZXEtPnBy
ZXFfb3JpZ2FkZHIpLAorCQkJICAgIGV0aGVyX3NwcmludGYoUFJFUV9UQUREUigwKSksCisJCQkg
ICAgZXRoZXJfc3ByaW50ZihwcmVxX3RyYW5zbWl0X2FkZHIpKTsKKwkJCXBwcmVxLnByZXFfZmxh
Z3MgfD0gSUVFRTgwMjExX01FU0hQUkVRX0ZMQUdTX0FNOwogCQkJcHByZXEucHJlcV9ob3Bjb3Vu
dCArPSAxOwogCQkJcHByZXEucHJlcV90dGwgLT0gMTsKIAkJCXBwcmVxLnByZXFfbWV0cmljICs9
IG1zLT5tc19wbWV0cmljLT5tcG1fbWV0cmljKG5pKTsKLQkJCWh3bXBfc2VuZF9wcmVxKG5pLCB2
YXAtPml2X215YWRkciwgYnJvYWRjYXN0YWRkciwKKwkJCWh3bXBfc2VuZF9wcmVxKG5pLCB2YXAt
Pml2X215YWRkciwgcHJlcV90cmFuc21pdF9hZGRyLAogCQkJICAgICZwcHJlcSk7CiAJCX0KKwl9
ZWxzZXsKKwkJSUVFRTgwMjExX0RJU0NBUkRfTUFDKHZhcCwgSUVFRTgwMjExX01TR19IV01QLCBu
aS0+bmlfbWFjYWRkciwgCisJCSAgICBOVUxMLCAiUFJFUSwgd2l0aCB0YXJnZXQgY291bnQgPSAl
ZCIsIHByZXEtPnByZXFfdGNvdW50KTsKIAl9Ci0KIH0KICN1bmRlZglQUkVRX1RGTEFHUwogI3Vu
ZGVmCVBSRVFfVEFERFIKQEAgLTkxNCwyMiArMTA0NywyOCBAQCBod21wX3NlbmRfcHJlcShzdHJ1
Y3QgaWVlZTgwMjExX25vZGUgKm5pLAogCS8qCiAJICogRW5mb3JjZSBQUkVRIGludGVydmFsLgog
CSAqLwotCWlmIChyYXRlY2hlY2soJmhzLT5oc19sYXN0cHJlcSwgJmllZWU4MDIxMV9od21wX3By
ZXFtaW5pbnQpID09IDApCisJaWYgKHJhdGVjaGVjaygmaHMtPmhzX2xhc3RwcmVxLCAmaWVlZTgw
MjExX2h3bXBfcHJlcW1pbmludCkgPT0gMCl7CisJCUlFRUU4MDIxMV9ESVNDQVJEX01BQyhuaS0+
bmlfdmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsIAorCQkgICAgbmktPm5pX21hY2FkZHIsIE5VTEws
ICJQUkVRIHJhdGUgbGltaXQsIHNhICVzLCBkYSAlcyIsCisJCSAgICBldGhlcl9zcHJpbnRmKHNh
KSwKKwkJICAgIGV0aGVyX3NwcmludGYoZGEpKTsKIAkJcmV0dXJuIEVBTFJFQURZOworCX0KIAln
ZXRtaWNyb3VwdGltZSgmaHMtPmhzX2xhc3RwcmVxKTsKIAogCS8qCiAJICogbWVzaCBwcmVxIGFj
dGlvbiBmcmFtZSBmb3JtYXQKIAkgKiAgICAgWzZdIGRhCi0JICogICAgIFs2XSBzYSAKKwkgKiAg
ICAgWzZdIHNhCiAJICogICAgIFs2XSBhZGRyMyA9IHNhCiAJICogICAgIFsxXSBhY3Rpb24KIAkg
KiAgICAgWzFdIGNhdGVnb3J5CiAJICogICAgIFt0bHZdIG1lc2ggcGF0aCByZXF1ZXN0CiAJICov
CiAJcHJlcS0+cHJlcV9pZSA9IElFRUU4MDIxMV9FTEVNSURfTUVTSFBSRVE7Ci0JcmV0dXJuIGh3
bXBfc2VuZF9hY3Rpb24obmksIHNhLCBkYSwgKHVpbnQ4X3QgKilwcmVxLAotCSAgICBzaXplb2Yo
c3RydWN0IGllZWU4MDIxMV9tZXNocHJlcV9pZSkpOworCXByZXEtPnByZXFfbGVuID0gSUVFRTgw
MjExX01FU0hQUkVRX0JBU0VfU1ogKworCSAgICBwcmVxLT5wcmVxX3Rjb3VudCAqIElFRUU4MDIx
MV9NRVNIUFJFUV9UUkdUX1NaOworCXJldHVybiBod21wX3NlbmRfYWN0aW9uKG5pLCBzYSwgZGEs
ICh1aW50OF90ICopcHJlcSwgcHJlcS0+cHJlcV9sZW4rMik7CiB9CiAKIHN0YXRpYyB2b2lkCkBA
IC05MzksODEgKzEwNzgsMTE1IEBAIGh3bXBfcmVjdl9wcmVwKHN0cnVjdCBpZWVlODAyMTF2YXAg
KnZhcCwgc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwKIAlzdHJ1Y3QgaWVlZTgwMjExX21lc2hf
c3RhdGUgKm1zID0gdmFwLT5pdl9tZXNoOwogCXN0cnVjdCBpZWVlODAyMTFfaHdtcF9zdGF0ZSAq
aHMgPSB2YXAtPml2X2h3bXA7CiAJc3RydWN0IGllZWU4MDIxMV9tZXNoX3JvdXRlICpydCA9IE5V
TEw7CisJc3RydWN0IGllZWU4MDIxMV9tZXNoX3JvdXRlICpydG9yaWcgPSBOVUxMOwogCXN0cnVj
dCBpZWVlODAyMTFfaHdtcF9yb3V0ZSAqaHI7CiAJc3RydWN0IGllZWU4MDIxMWNvbSAqaWMgPSB2
YXAtPml2X2ljOwogCXN0cnVjdCBpZm5ldCAqaWZwID0gdmFwLT5pdl9pZnA7CiAJc3RydWN0IG1i
dWYgKm0sICpuZXh0OworCXVpbnQzMl90IG1ldHJpYyA9IDA7CiAKIAkvKgotCSAqIEFjY2VwdGFu
Y2UgY3JpdGVyaWE6IGlmIHRoZSBjb3JyZXNwb25kaW5nIFBSRVEgd2FzIG5vdCBnZW5lcmF0ZWQK
KwkgKiBBY2NlcHRhbmNlIGNyaXRlcmlhOiBpZiB0aGUgY29ycmVzcG9uZGluZyBQUkVQIHdhcyBu
b3QgZ2VuZXJhdGVkCiAJICogYnkgdXMgYW5kIGZvcndhcmRpbmcgaXMgZGlzYWJsZWQsIGRpc2Nh
cmQgdGhpcyBQUkVQLgogCSAqLwogCWlmIChuaSA9PSB2YXAtPml2X2JzcyB8fAogCSAgICBuaS0+
bmlfbWxzdGF0ZSAhPSBJRUVFODAyMTFfTk9ERV9NRVNIX0VTVEFCTElTSEVEKQogCQlyZXR1cm47
Ci0JaWYgKCFJRUVFODAyMTFfQUREUl9FUSh2YXAtPml2X215YWRkciwgcHJlcC0+cHJlcF9vcmln
YWRkcikgJiYKLQkgICAgIShtcy0+bXNfZmxhZ3MgJiBJRUVFODAyMTFfTUVTSEZMQUdTX0ZXRCkp
CisJLyogWFhYOiB0ZXN0IGZvciBwcm94eSBhZGRyZXNzICovCisJaWYgKCFJRUVFODAyMTFfQURE
Ul9FUSh2YXAtPml2X215YWRkciwgcHJlcC0+cHJlcF9vcmlnYWRkcikgJiYgCisJICAgICEobXMt
Pm1zX2ZsYWdzICYgSUVFRTgwMjExX01FU0hGTEFHU19GV0QpKXsKKwkJSUVFRTgwMjExX0RJU0NB
UkRfTUFDKHZhcCwgSUVFRTgwMjExX01TR19IV01QLAorCQkgICAgbmktPm5pX21hY2FkZHIsIE5V
TEwsCisJCSAgICAibm90IGFjY2VwdGluZyBQUkVQLCBvcmlnaW5hdG9yICVzLCBmb3J3YXJkaW5n
IGRpc2FibGVkIiwKKwkJICAgIGV0aGVyX3NwcmludGYocHJlcC0+cHJlcF9vcmlnYWRkcikpOwog
CQlyZXR1cm47CisJfQorCisJLyogUFJFUCBBQ0NFUFRFRCAqLwogCiAJSUVFRTgwMjExX05PVEUo
dmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsIG5pLAotCSAgICAicmVjZWl2ZWQgUFJFUCBmcm9tICVz
IiwgZXRoZXJfc3ByaW50ZihwcmVwLT5wcmVwX3RhcmdldGFkZHIpKTsKKwkgICAgInJlY2VpdmVk
IFBSRVAsIG9yaWdpbmF0b3IgJXMsIHRhcmdldCAlcyIsCisJICAgIGV0aGVyX3NwcmludGYocHJl
cC0+cHJlcF9vcmlnYWRkciksCisJICAgIGV0aGVyX3NwcmludGYocHJlcC0+cHJlcF90YXJnZXRh
ZGRyKSk7CiAKIAlydCA9IGllZWU4MDIxMV9tZXNoX3J0X2ZpbmQodmFwLCBwcmVwLT5wcmVwX3Rh
cmdldGFkZHIpOwogCWlmIChydCA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIElmIHdlIGhhdmUgbm8g
ZW50cnkgdGhpcyBjb3VsZCBiZSBhIHJlcGx5IHRvIGEgcm9vdCBQUkVRLgotCQkgKi8KLQkJaWYg
KGhzLT5oc19yb290bW9kZSAhPSBJRUVFODAyMTFfSFdNUF9ST09UTU9ERV9ESVNBQkxFRCkgewot
CQkJcnQgPSBpZWVlODAyMTFfbWVzaF9ydF9hZGQodmFwLCBwcmVwLT5wcmVwX3RhcmdldGFkZHIp
OwotCQkJaWYgKHJ0ID09IE5VTEwpIHsKLQkJCQlJRUVFODAyMTFfTk9URSh2YXAsIElFRUU4MDIx
MV9NU0dfSFdNUCwKLQkJCQkgICAgbmksICJ1bmFibGUgdG8gYWRkIFBSRVAgcGF0aCB0byAlcyIs
Ci0JCQkJICAgIGV0aGVyX3NwcmludGYocHJlcC0+cHJlcF90YXJnZXRhZGRyKSk7Ci0JCQkJdmFw
LT5pdl9zdGF0cy5pc19tZXNoX3J0YWRkZmFpbGVkKys7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJ
SUVFRTgwMjExX0FERFJfQ09QWShydC0+cnRfbmV4dGhvcCwgd2gtPmlfYWRkcjIpOwotCQkJcnQt
PnJ0X25ob3BzID0gcHJlcC0+cHJlcF9ob3Bjb3VudDsKLQkJCXJ0LT5ydF9saWZldGltZSA9IHBy
ZXAtPnByZXBfbGlmZXRpbWU7Ci0JCQlydC0+cnRfbWV0cmljID0gcHJlcC0+cHJlcF9tZXRyaWM7
Ci0JCQlydC0+cnRfZmxhZ3MgfD0gSUVFRTgwMjExX01FU0hSVF9GTEFHU19WQUxJRDsKLQkJCUlF
RUU4MDIxMV9OT1RFKHZhcCwgSUVFRTgwMjExX01TR19IV01QLCBuaSwKLQkJCSAgICAiYWRkIHJv
b3QgcGF0aCB0byAlcyBuaG9wcyAlZCBtZXRyaWMgJWQgKFBSRVApIiwKLQkJCSAgICBldGhlcl9z
cHJpbnRmKHByZXAtPnByZXBfdGFyZ2V0YWRkciksCi0JCQkgICAgcnQtPnJ0X25ob3BzLCBydC0+
cnRfbWV0cmljKTsKKwkJcnQgPSBpZWVlODAyMTFfbWVzaF9ydF9hZGQodmFwLCBwcmVwLT5wcmVw
X3RhcmdldGFkZHIpOworCQlJRUVFODAyMTFfTk9URSh2YXAsIElFRUU4MDIxMV9NU0dfSFdNUCwg
bmksCisJCQkiYWRkaW5nIHRhcmdldCAlcyIsCisJCQlldGhlcl9zcHJpbnRmKHByZXAtPnByZXBf
dGFyZ2V0YWRkcikpOworCQlpZiAocnQgPT0gTlVMTCkgeworCQkJSUVFRTgwMjExX05PVEUodmFw
LCBJRUVFODAyMTFfTVNHX0hXTVAsCisJCQkJbmksICJ1bmFibGUgdG8gYWRkIFBSRVAgcGF0aCB0
byAlcyIsCisJCQkJZXRoZXJfc3ByaW50ZihwcmVwLT5wcmVwX3RhcmdldGFkZHIpKTsKKwkJCXZh
cC0+aXZfc3RhdHMuaXNfbWVzaF9ydGFkZGZhaWxlZCsrOwogCQkJcmV0dXJuOwotCQl9IAotCQly
ZXR1cm47CisJCX0KIAl9CisKIAkvKgotCSAqIFNlcXVlbmNlIG51bWJlciB2YWxpZGF0aW9uLgor
CSAqIERhdGEgY3JlYXRpb24gYW5kIHVwZGF0ZSBvZiBmb3J3YXJkaW5nIGluZm9ybWF0aW9uCisJ
ICogYWNjb3JkaW5nIHRvIFRhYmxlIDExQy04IGZvciBvcmlnaW5hdG9yIG1lc2ggU1RBLgogCSAq
LwogCWhyID0gSUVFRTgwMjExX01FU0hfUk9VVEVfUFJJVihydCwgc3RydWN0IGllZWU4MDIxMV9o
d21wX3JvdXRlKTsKLQlpZiAoSFdNUF9TRVFfTEVRKHByZXAtPnByZXBfdGFyZ2V0c2VxLCBoci0+
aHJfc2VxKSkgewotCQlJRUVFODAyMTFfTk9URSh2YXAsIElFRUU4MDIxMV9NU0dfSFdNUCwgbmks
Ci0JCSAgICAiZGlzY2FyZCBQUkVQIGZyb20gJXMsIG9sZCBzZXEgbm8gJXUgPD0gJXUiLAotCQkg
ICAgZXRoZXJfc3ByaW50ZihwcmVwLT5wcmVwX3RhcmdldGFkZHIpLAotCQkgICAgcHJlcC0+cHJl
cF90YXJnZXRzZXEsIGhyLT5ocl9zZXEpOworCWlmKEhXTVBfU0VRX0dUKHByZXAtPnByZXBfdGFy
Z2V0c2VxLCBoci0+aHJfc2VxKSB8fAorCQkoSFdNUF9TRVFfRVEocHJlcC0+cHJlcF90YXJnZXRz
ZXEsIGhyLT5ocl9zZXEpICYmCisJCSAgICBwcmVwLT5wcmVwX21ldHJpYyA8IHJ0LT5ydF9tZXRy
aWMpKXsKKwkJbWV0cmljID0gcHJlcC0+cHJlcF9tZXRyaWMgKyBtcy0+bXNfcG1ldHJpYy0+bXBt
X21ldHJpYyhuaSk7CisJCWlmKChydC0+cnRfZmxhZ3MgJiBJRUVFODAyMTFfTUVTSFJUX0ZMQUdT
X1ZBTElEKSA9PSAwKXsKKwkJCUlFRUU4MDIxMV9OT1RFKHZhcCwgSUVFRTgwMjExX01TR19IV01Q
LCBuaSwKKwkJCSAgICAiY3JlYXRlIHBhdGggdG8gJXMsIGhvcGNvdW50ICVkIG1ldHJpYyAlZCIs
CisJCQkgICAgZXRoZXJfc3ByaW50ZihwcmVwLT5wcmVwX3RhcmdldGFkZHIpLAorCQkJICAgIHBy
ZXAtPnByZXBfaG9wY291bnQgKyAxLAorCQkJICAgIG1ldHJpYyk7CisJCX1lbHNleworCQkJSUVF
RTgwMjExX05PVEUodmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsIG5pLAorCQkJICAgICJwcmVmZXIg
cGF0aCB0byAlcywgaG9wY291bnQgJWQ6WyVkXSIKKwkJCSAgICAibWV0cmljICVkOlslZF0iLAor
CQkJICAgIGV0aGVyX3NwcmludGYocHJlcC0+cHJlcF90YXJnZXRhZGRyKSwKKwkJCSAgICBwcmVw
LT5wcmVwX2hvcGNvdW50ICsgMSwgcnQtPnJ0X25ob3BzLAorCQkJICAgIG1ldHJpYywgcnQtPnJ0
X21ldHJpYyk7CisJCX0KKwkJaHItPmhyX3NlcSA9IHByZXAtPnByZXBfdGFyZ2V0c2VxOworCQlJ
RUVFODAyMTFfQUREUl9DT1BZKHJ0LT5ydF9uZXh0aG9wLCB3aC0+aV9hZGRyMik7CisJCXJ0LT5y
dF9tZXRyaWMgPSBtZXRyaWM7CisJCXJ0LT5ydF9uaG9wcyAgPSBwcmVwLT5wcmVwX2hvcGNvdW50
ICsgMTsKKwkJcnQtPnJ0X2xpZmV0aW1lICA9IE1FU0hfUk9VVEVfTElGRVRJTUVfTUFYKHByZXAt
PnByZXBfbGlmZXRpbWUsCisJCSAgICBydC0+cnRfbGlmZXRpbWUpOworCQkvKiBwYXRoIHRhcmdl
dCBpcyB2YWxpZCBub3cgKi8KKwkJcnQtPnJ0X2ZsYWdzIHw9IElFRUU4MDIxMV9NRVNIUlRfRkxB
R1NfVkFMSUQ7CisJfWVsc2V7CisJCUlFRUU4MDIxMV9ESVNDQVJEX01BQyh2YXAsIElFRUU4MDIx
MV9NU0dfSFdNUCwgbmktPm5pX21hY2FkZHIsCisJCQlOVUxMLCAiUFJFUCwgb3JpZ2luYXRvciAl
cywgbGFzdCBzZWVuIG9yaWcuc2VxICVkLCIKKwkJCSJwcmVwIG9yaWcuc2VxICVkIiwgZXRoZXJf
c3ByaW50ZihwcmVwLT5wcmVwX29yaWdhZGRyKSwKKwkJCWhyLT5ocl9zZXEsIHByZXAtPnByZXBf
b3JpZ3NlcSk7CiAJCXJldHVybjsKIAl9Ci0JaHItPmhyX3NlcSA9IHByZXAtPnByZXBfdGFyZ2V0
c2VxOworCiAJLyoKIAkgKiBJZiBpdCdzIE5PVCBmb3IgdXMsIHByb3BhZ2F0ZSB0aGUgUFJFUC4K
IAkgKi8KIAlpZiAoIUlFRUU4MDIxMV9BRERSX0VRKHZhcC0+aXZfbXlhZGRyLCBwcmVwLT5wcmVw
X29yaWdhZGRyKSAmJgogCSAgICBwcmVwLT5wcmVwX3R0bCA+IDEgJiYgcHJlcC0+cHJlcF9ob3Bj
b3VudCA8IGhzLT5oc19tYXhob3BzKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfbWVzaHByZXBfaWUg
cHByZXA7IC8qIHByb3BhZ2F0ZWQgUFJFUCAqLwotCisJCXJ0b3JpZyA9IGllZWU4MDIxMV9tZXNo
X3J0X2ZpbmQodmFwLCBwcmVwLT5wcmVwX29yaWdhZGRyKTsKKwkJaWYocnRvcmlnID09IE5VTEwp
eworCQkJSUVFRTgwMjExX0RJU0NBUkRfTUFDKHZhcCwgSUVFRTgwMjExX01TR19IV01QLAorCQkJ
ICAgIG5pLT5uaV9tYWNhZGRyLCBOVUxMLCAiUFJFUCwgb3JpZ2luYXRvciAlcyB1bmtub3duIiwK
KwkJCSAgICBldGhlcl9zcHJpbnRmKHByZXAtPnByZXBfb3JpZ2FkZHIpKTsKKwkJCXJldHVybjsK
KwkJfQogCQlJRUVFODAyMTFfTk9URSh2YXAsIElFRUU4MDIxMV9NU0dfSFdNUCwgbmksCi0JCSAg
ICAicHJvcGFnYXRlIFBSRVAgZnJvbSAlcyIsCi0JCSAgICBldGhlcl9zcHJpbnRmKHByZXAtPnBy
ZXBfdGFyZ2V0YWRkcikpOworCQkgICAgInByb3BhZ2F0ZSBQUkVQLCBvcmlnaW5hdG9yICVzLCB0
YXJnZXQgJXMsIHRvICVzIiwKKwkJICAgIGV0aGVyX3NwcmludGYocHJlcC0+cHJlcF9vcmlnYWRk
ciksCisJCSAgICBldGhlcl9zcHJpbnRmKHByZXAtPnByZXBfdGFyZ2V0YWRkciksCisJCSAgICBl
dGhlcl9zcHJpbnRmKHJ0b3JpZy0+cnRfbmV4dGhvcCkpOwogCi0JCW1lbWNweSgmcHByZXAsIHBy
ZXAsIHNpemVvZihwcHJlcCkpOworCQltZW1jcHkoJnBwcmVwLCBwcmVwLCBzaXplb2Yoc3RydWN0
IGllZWU4MDIxMV9tZXNocHJlcF9pZSkpOwogCQlwcHJlcC5wcmVwX2hvcGNvdW50ICs9IDE7CiAJ
CXBwcmVwLnByZXBfdHRsIC09IDE7CiAJCXBwcmVwLnByZXBfbWV0cmljICs9IG1zLT5tc19wbWV0
cmljLT5tcG1fbWV0cmljKG5pKTsKLQkJSUVFRTgwMjExX0FERFJfQ09QWShwcHJlcC5wcmVwX3Rh
cmdldGFkZHIsIHZhcC0+aXZfbXlhZGRyKTsKLQkJaHdtcF9zZW5kX3ByZXAobmksIHZhcC0+aXZf
bXlhZGRyLCBicm9hZGNhc3RhZGRyLCAmcHByZXApOworCQlod21wX3NlbmRfcHJlcChuaSwgdmFw
LT5pdl9teWFkZHIsIHJ0b3JpZy0+cnRfbmV4dGhvcCwgJnBwcmVwKTsKIAl9CiAJaHIgPSBJRUVF
ODAyMTFfTUVTSF9ST1VURV9QUklWKHJ0LCBzdHJ1Y3QgaWVlZTgwMjExX2h3bXBfcm91dGUpOwog
CWlmIChydC0+cnRfZmxhZ3MgJiBJRUVFODAyMTFfTUVTSFJUX0ZMQUdTX1BST1hZKSB7CkBAIC0x
MDIyLDQxICsxMTk1LDcgQEAgaHdtcF9yZWN2X3ByZXAoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFw
LCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLAogCQkgICAgImRpc2NhcmQgUFJFUCBmb3IgJXMs
IHJvdXRlIGlzIG1hcmtlZCBQUk9YWSIsCiAJCSAgICBldGhlcl9zcHJpbnRmKHByZXAtPnByZXBf
dGFyZ2V0YWRkcikpOwogCQl2YXAtPml2X3N0YXRzLmlzX2h3bXBfcHJveHkrKzsKLQl9IGVsc2Ug
aWYgKHByZXAtPnByZXBfb3JpZ3NlcSA9PSBoci0+aHJfb3JpZ3NlcSkgewotCQkvKgotCQkgKiBD
aGVjayBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBwYXRoIHRvIHRoaXMgbm9kZS4KLQkJICogSWYgd2Ug
ZG8sIGNoZWNrIGlmIHRoaXMgcGF0aCByZXBseSBjb250YWlucyBhCi0JCSAqIGJldHRlciByb3V0
ZS4KLQkJICovCi0JCWlmICgocnQtPnJ0X2ZsYWdzICYgSUVFRTgwMjExX01FU0hSVF9GTEFHU19W
QUxJRCkgPT0gMCB8fAotCQkgICAgKHByZXAtPnByZXBfaG9wY291bnQgPCBydC0+cnRfbmhvcHMg
fHwKLQkJICAgICBwcmVwLT5wcmVwX21ldHJpYyA8IHJ0LT5ydF9tZXRyaWMpKSB7Ci0JCQlJRUVF
ODAyMTFfTk9URSh2YXAsIElFRUU4MDIxMV9NU0dfSFdNUCwgbmksCi0JCQkgICAgIiVzIHBhdGgg
dG8gJXMsIGhvcGNvdW50ICVkOiVkIG1ldHJpYyAlZDolZCIsCi0JCQkgICAgcnQtPnJ0X2ZsYWdz
ICYgSUVFRTgwMjExX01FU0hSVF9GTEFHU19WQUxJRCA/Ci0JCQkJInByZWZlciIgOiAidXBkYXRl
IiwKLQkJCSAgICBldGhlcl9zcHJpbnRmKHByZXAtPnByZXBfb3JpZ2FkZHIpLAotCQkJICAgIHJ0
LT5ydF9uaG9wcywgcHJlcC0+cHJlcF9ob3Bjb3VudCwKLQkJCSAgICBydC0+cnRfbWV0cmljLCBw
cmVwLT5wcmVwX21ldHJpYyk7Ci0JCQlJRUVFODAyMTFfQUREUl9DT1BZKHJ0LT5ydF9uZXh0aG9w
LCB3aC0+aV9hZGRyMik7Ci0JCQlydC0+cnRfbmhvcHMgPSBwcmVwLT5wcmVwX2hvcGNvdW50Owot
CQkJcnQtPnJ0X2xpZmV0aW1lID0gcHJlcC0+cHJlcF9saWZldGltZTsKLQkJCXJ0LT5ydF9tZXRy
aWMgPSBwcmVwLT5wcmVwX21ldHJpYzsKLQkJCXJ0LT5ydF9mbGFncyB8PSBJRUVFODAyMTFfTUVT
SFJUX0ZMQUdTX1ZBTElEOwotCQl9IGVsc2UgewotCQkJSUVFRTgwMjExX05PVEUodmFwLCBJRUVF
ODAyMTFfTVNHX0hXTVAsIG5pLAotCQkJICAgICJpZ25vcmUgUFJFUCBmb3IgJXMsIGhvcGNvdW50
ICVkOiVkIG1ldHJpYyAlZDolZCIsCi0JCQkgICAgZXRoZXJfc3ByaW50ZihwcmVwLT5wcmVwX3Rh
cmdldGFkZHIpLAotCQkJICAgIHJ0LT5ydF9uaG9wcywgcHJlcC0+cHJlcF9ob3Bjb3VudCwKLQkJ
CSAgICBydC0+cnRfbWV0cmljLCBwcmVwLT5wcmVwX21ldHJpYyk7Ci0JCX0KLQl9IGVsc2Ugewot
CQlJRUVFODAyMTFfTk9URSh2YXAsIElFRUU4MDIxMV9NU0dfSFdNUCwgbmksCi0JCSAgICAiZGlz
Y2FyZCBQUkVQIGZvciAlcywgd3Jvbmcgc2Vxbm8gJXUgIT0gJXUiLAotCQkgICAgZXRoZXJfc3By
aW50ZihwcmVwLT5wcmVwX3RhcmdldGFkZHIpLCBwcmVwLT5wcmVwX29yaWdzZXEsCi0JCSAgICBo
ci0+aHJfc2VxKTsKLQkJdmFwLT5pdl9zdGF0cy5pc19od21wX3dyb25nc2VxKys7Ci0JfSAKKwl9
CiAJLyoKIAkgKiBDaGVjayBmb3IgZnJhbWVzIHF1ZXVlZCBhd2FpdGluZyBwYXRoIGRpc2NvdmVy
eS4KIAkgKiBYWFggcHJvYmFibHkgY2FuIHRlbGwgZXhhY3RseSBhbmQgYXZvaWQgcmVtb3ZlIGNh
bGwKQEAgLTEwNjQsOSArMTIwMyw5IEBAIGh3bXBfcmVjdl9wcmVwKHN0cnVjdCBpZWVlODAyMTF2
YXAgKnZhcCwgc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwKIAkgKiAgICAgc3R1Y2sgYmFjayBv
biB0aGUgc3RhZ2VxIGJlY2F1c2UgdGhlcmUgd29uJ3QgYmUKIAkgKiAgICAgYSBwYXRoLgogCSAq
LwotCW0gPSBpZWVlODAyMTFfYWdlcV9yZW1vdmUoJmljLT5pY19zdGFnZXEsIAorCW0gPSBpZWVl
ODAyMTFfYWdlcV9yZW1vdmUoJmljLT5pY19zdGFnZXEsCiAJICAgIChzdHJ1Y3QgaWVlZTgwMjEx
X25vZGUgKikodWludHB0cl90KQotCQlpZWVlODAyMTFfbWFjX2hhc2goaWMsIHJ0LT5ydF9kZXN0
KSk7CisJICAgIGllZWU4MDIxMV9tYWNfaGFzaChpYywgcnQtPnJ0X2Rlc3QpKTsKIAlmb3IgKDsg
bSAhPSBOVUxMOyBtID0gbmV4dCkgewogCQluZXh0ID0gbS0+bV9uZXh0cGt0OwogCQltLT5tX25l
eHRwa3QgPSBOVUxMOwpAQCAtMTA5NCwyMiArMTIzMywyOCBAQCBod21wX3NlbmRfcHJlcChzdHJ1
Y3QgaWVlZTgwMjExX25vZGUgKm5pLAogCSAqICAgICBbdGx2XSBtZXNoIHBhdGggcmVwbHkKIAkg
Ki8KIAlwcmVwLT5wcmVwX2llID0gSUVFRTgwMjExX0VMRU1JRF9NRVNIUFJFUDsKLQlyZXR1cm4g
aHdtcF9zZW5kX2FjdGlvbihuaSwgc2EsIGRhLCAodWludDhfdCAqKXByZXAsCi0JICAgIHNpemVv
ZihzdHJ1Y3QgaWVlZTgwMjExX21lc2hwcmVwX2llKSk7CisJcHJlcC0+cHJlcF9sZW4gPSBJRUVF
ODAyMTFfTUVTSFBSRVBfQkFTRV9TWjsKKwlyZXR1cm4gaHdtcF9zZW5kX2FjdGlvbihuaSwgc2Es
IGRhLCAodWludDhfdCAqKXByZXAsIHByZXAtPnByZXBfbGVuICsgMik7CiB9CiAKLSNkZWZpbmUJ
UEVSUl9ERkxBR1MobikJcGVyci5wZXJyX2Rlc3RzW25dLmRlc3RfZmxhZ3MKLSNkZWZpbmUJUEVS
Ul9EQUREUihuKQlwZXJyLnBlcnJfZGVzdHNbbl0uZGVzdF9hZGRyCi0jZGVmaW5lCVBFUlJfRFNF
UShuKQlwZXJyLnBlcnJfZGVzdHNbbl0uZGVzdF9zZXEKLSNkZWZpbmUJUEVSUl9EUkNPREUobikJ
cGVyci5wZXJyX2Rlc3RzW25dLmRlc3RfcmNvZGUKKyNkZWZpbmUJUEVSUl9ERkxBR1MobikJcGVy
ci0+cGVycl9kZXN0c1tuXS5kZXN0X2ZsYWdzCisjZGVmaW5lCVBFUlJfREFERFIobikJcGVyci0+
cGVycl9kZXN0c1tuXS5kZXN0X2FkZHIKKyNkZWZpbmUJUEVSUl9EU0VRKG4pCXBlcnItPnBlcnJf
ZGVzdHNbbl0uZGVzdF9zZXEKKyNkZWZpbmUJUEVSUl9EUkNPREUobikJcGVyci0+cGVycl9kZXN0
c1tuXS5kZXN0X3Jjb2RlCiBzdGF0aWMgdm9pZAogaHdtcF9wZWVyZG93bihzdHJ1Y3QgaWVlZTgw
MjExX25vZGUgKm5pKQogewogCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92YXA7
CiAJc3RydWN0IGllZWU4MDIxMV9tZXNoX3N0YXRlICptcyA9IHZhcC0+aXZfbWVzaDsKLQlzdHJ1
Y3QgaWVlZTgwMjExX21lc2hwZXJyX2llIHBlcnI7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZXNoX3Jv
dXRlICpydDsKKwlzdHJ1Y3QgaWVlZTgwMjExX21lc2hwZXJyX2llICpwZXJyOworCXN0cnVjdCBp
ZWVlODAyMTFfbWVzaF9yb3V0ZSAqcnQsICpuZXh0OwogCXN0cnVjdCBpZWVlODAyMTFfaHdtcF9y
b3V0ZSAqaHI7CisJaW50IGkgPSAwOworCQorCXBlcnIgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBp
ZWVlODAyMTFfbWVzaHBlcnJfaWUpICsgCisJCQlJRUVFODAyMTFfSFdNUF9QRVJSX01BWERFU1Qq
c2l6ZW9mKCpwZXJyLT5wZXJyX2Rlc3RzKSwKKwkJCU1fODAyMTFfSFdNUF9QRVJSLCBNX05PV0FJ
VCB8IE1fWkVSTyk7CisJS0FTU0VSVChwZXJyICE9IE5VTEwsICgiZXJyb3IgYWxsb2NhdGlvbmcg
UEVSUiIpKTsKIAogCXJ0ID0gaWVlZTgwMjExX21lc2hfcnRfZmluZCh2YXAsIG5pLT5uaV9tYWNh
ZGRyKTsKIAlpZiAocnQgPT0gTlVMTCkKQEAgLTExMTcsMTggKzEyNjIsMzUgQEAgaHdtcF9wZWVy
ZG93bihzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pKQogCWhyID0gSUVFRTgwMjExX01FU0hfUk9V
VEVfUFJJVihydCwgc3RydWN0IGllZWU4MDIxMV9od21wX3JvdXRlKTsKIAlJRUVFODAyMTFfTk9U
RSh2YXAsIElFRUU4MDIxMV9NU0dfSFdNUCwgbmksCiAJICAgICIlcyIsICJkZWxldGUgcm91dGUg
ZW50cnkiKTsKLQlwZXJyLnBlcnJfdHRsID0gbXMtPm1zX3R0bDsKLQlwZXJyLnBlcnJfbmRlc3Rz
ID0gMTsKLQlQRVJSX0RGTEFHUygwKSA9IDA7Ci0JaWYgKGhyLT5ocl9zZXEgPT0gMCkKLQkJUEVS
Ul9ERkxBR1MoMCkgfD0gSUVFRTgwMjExX01FU0hQRVJSX0RGTEFHU19VU047Ci0JUEVSUl9ERkxB
R1MoMCkgfD0gSUVFRTgwMjExX01FU0hQRVJSX0RGTEFHU19SQzsKLQlJRUVFODAyMTFfQUREUl9D
T1BZKFBFUlJfREFERFIoMCksIHJ0LT5ydF9kZXN0KTsKLQlQRVJSX0RTRVEoMCkgPSBoci0+aHJf
c2VxOwotCVBFUlJfRFJDT0RFKDApID0gSUVFRTgwMjExX1JFQVNPTl9NRVNIX1BFUlJfREVTVF9V
TlJFQUNIOworCXBlcnItPnBlcnJfdHRsID0gbXMtPm1zX3R0bDsKKwkKKwkvKiBmaW5kIGFsbCBk
ZXN0aW5hdGlvbnMgdGhhdCBoYXZlIG5pLT5uaV9tYWNhZGRyIGFzIG5leHRob3AgYW5kIGFkZCB0
byBQRVJSKi8KKwlNRVNIX1JUX0xPQ0sobXMpOworCVRBSUxRX0ZPUkVBQ0hfU0FGRShydCwgJm1z
LT5tc19yb3V0ZXMsIHJ0X25leHQsIG5leHQpIHsKKwkJaWYgKChydC0+cnRfZmxhZ3MgJiBJRUVF
ODAyMTFfTUVTSFJUX0ZMQUdTX1ZBTElEKSAmJgorCQkgICAgSUVFRTgwMjExX0FERFJfRVEocnQt
PnJ0X25leHRob3AsIG5pLT5uaV9tYWNhZGRyKSl7CisJCQlociA9IElFRUU4MDIxMV9NRVNIX1JP
VVRFX1BSSVYocnQsIHN0cnVjdCBpZWVlODAyMTFfaHdtcF9yb3V0ZSk7CisJCQlLQVNTRVJUKGkg
PCBJRUVFODAyMTFfSFdNUF9QRVJSX01BWERFU1QsICgiUEVSUiBtYXggZGVzdGluYXRpb24gb3Zl
cmZsb3ciKSk7CisJCQlQRVJSX0RGTEFHUyhpKSA9IDA7CisJCQlpZiAoaHItPmhyX3NlcSA9PSAw
KQorCQkJCVBFUlJfREZMQUdTKGkpIHw9IElFRUU4MDIxMV9NRVNIUEVSUl9ERkxBR1NfVVNOOwor
CQkJSUVFRTgwMjExX0FERFJfQ09QWShQRVJSX0RBRERSKGkpLCBydC0+cnRfZGVzdCk7CisJCQlQ
RVJSX0RTRVEoaSkgPSArK2hyLT5ocl9zZXE7CisJCQlQRVJSX0RSQ09ERShpKSA9IElFRUU4MDIx
MV9SRUFTT05fTUVTSF9QRVJSX0RFU1RfVU5SRUFDSDsKKwkJCUlFRUU4MDIxMV9OT1RFKHZhcCwg
SUVFRTgwMjExX01TR19IV01QLCBuaSwKKwkJCSAgICAiUEVSUjogZm91bmQgdW5yZWNoYWJsZSBk
ZXN0aW5hdGlvbiAlcyIsCisJCQkgICAgZXRoZXJfc3ByaW50ZihQRVJSX0RBRERSKGkpKSk7CisJ
CQkrK2k7CisJCX0KKwl9CisJTUVTSF9SVF9VTkxPQ0sobXMpOworCQorCXBlcnItPnBlcnJfbmRl
c3RzID0gaTsKKwkKIAkvKiBOQjogZmx1c2ggZXZlcnl0aGluZyBwYXNzaW5nIHRocm91Z2ggcGVl
ciAqLwogCWllZWU4MDIxMV9tZXNoX3J0X2ZsdXNoX3BlZXIodmFwLCBuaS0+bmlfbWFjYWRkcik7
Ci0JaHdtcF9zZW5kX3BlcnIodmFwLT5pdl9ic3MsIHZhcC0+aXZfbXlhZGRyLCBicm9hZGNhc3Rh
ZGRyLCAmcGVycik7CisJaHdtcF9zZW5kX3BlcnIodmFwLT5pdl9ic3MsIHZhcC0+aXZfbXlhZGRy
LCBicm9hZGNhc3RhZGRyLCBwZXJyKTsKKwlmcmVlKHBlcnIsIE1fODAyMTFfSFdNUF9QRVJSKTsK
IH0KICN1bmRlZglQRVJSX0RGTEFHUwogI3VuZGVmCVBFUlJfREFERFIKQEAgLTExNDYsNDQgKzEz
MDgsMTAxIEBAIGh3bXBfcmVjdl9wZXJyKHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwgc3RydWN0
IGllZWU4MDIxMV9ub2RlICpuaSwKIAlzdHJ1Y3QgaWVlZTgwMjExX21lc2hfc3RhdGUgKm1zID0g
dmFwLT5pdl9tZXNoOwogCXN0cnVjdCBpZWVlODAyMTFfbWVzaF9yb3V0ZSAqcnQgPSBOVUxMOwog
CXN0cnVjdCBpZWVlODAyMTFfaHdtcF9yb3V0ZSAqaHI7Ci0gCXN0cnVjdCBpZWVlODAyMTFfbWVz
aHBlcnJfaWUgcHBlcnI7Ci0JaW50IGksIGZvcndhcmQgPSAwOworCXN0cnVjdCBpZWVlODAyMTFf
bWVzaHBlcnJfaWUgKnBwZXJyOworCWludCBpLCBrLCBmb3J3YXJkID0gMDsKKwlpbnQgbnVtX3Vu
cmNoYmxfZGVzdCA9IDA7IC8qIFVucmVhY2hhYmxlIGRlc3RpbmF0aW9uIHJlbGV2YW50IHRvIHVz
LiAqLworCWludCB1bnJjaGJsX2Rlc3RbSUVFRTgwMjExX0hXTVBfUEVSUl9NQVhERVNUXTsKIAog
CS8qCiAJICogQWNjZXB0YW5jZSBjcml0ZXJpYTogY2hlY2sgaWYgd2UgcmVjZWl2ZWQgYSBQRVJS
IGZyb20gYQotCSAqIG5laWdoYm9yIGFuZCBmb3J3YXJkaW5nIGlzIGVuYWJsZWQuCisJICogbmVp
Z2hib3IuCiAJICovCiAJaWYgKG5pID09IHZhcC0+aXZfYnNzIHx8Ci0JICAgIG5pLT5uaV9tbHN0
YXRlICE9IElFRUU4MDIxMV9OT0RFX01FU0hfRVNUQUJMSVNIRUQgfHwKLQkgICAgIShtcy0+bXNf
ZmxhZ3MgJiBJRUVFODAyMTFfTUVTSEZMQUdTX0ZXRCkpCisJICAgIG5pLT5uaV9tbHN0YXRlICE9
IElFRUU4MDIxMV9OT0RFX01FU0hfRVNUQUJMSVNIRUQpCiAJCXJldHVybjsKKwkJCiAJLyoKLQkg
KiBGaW5kIGFsbCByb3V0aW5nIGVudHJpZXMgdGhhdCBtYXRjaCBhbmQgZGVsZXRlIHRoZW0uCisJ
ICogQWNjZXB0YW5jZSBjcml0ZXJpYTogY2hlY2sgaWYgb25lIG9mIHRoZSBkZXN0aW5hdGlvbiBh
ZGRyZXNzZXMKKwkgKiBpbiBQRVJSIGlzIGluIGZvcndhcmRpbmcgaW5mb3JtYXRpb24gd2l0aCBu
ZXh0IGhvcCBlcXVhbHMgdG8KKwkgKiB0cmFuc21pdHRlciBhZGRyZXNzLgorCSAqIEFsc28gYnVp
bGQgYSBsaXN0IG9mIHVucmVhY2hibGUgZGVzdGluYXRpb24gcmVsYXZhbnQgZm9yIHVzLAorCSAq
IGlmIFBFUlIgZ2V0cyBhY2NlcHRlZC4KIAkgKi8KKwlrID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwg
cGVyci0+cGVycl9uZGVzdHM7IGkrKykgewogCQlydCA9IGllZWU4MDIxMV9tZXNoX3J0X2ZpbmQo
dmFwLCBQRVJSX0RBRERSKGkpKTsKIAkJaWYgKHJ0ID09IE5VTEwpCiAJCQljb250aW51ZTsKKwkJ
aWYoKHJ0LT5ydF9mbGFncyAmIElFRUU4MDIxMV9NRVNIUlRfRkxBR1NfVkFMSUQpICYmCisJCQlJ
RUVFODAyMTFfQUREUl9FUShydC0+cnRfbmV4dGhvcCwgd2gtPmlfYWRkcjIpKXsKKwkJCXVucmNo
YmxfZGVzdFtrKytdID0gaTsKKwkJCSsrbnVtX3VucmNoYmxfZGVzdDsKKwkJfQorCX0KKwlpZigh
bnVtX3VucmNoYmxfZGVzdCl7CisJCUlFRUU4MDIxMV9ESVNDQVJEX01BQyh2YXAsIElFRUU4MDIx
MV9NU0dfSFdNUCwgbmktPm5pX21hY2FkZHIsIAorCQkJCU5VTEwsICIlcyIsICJQRVJSIHVucmVs
ZXZhbnQiKTsKKwkJcmV0dXJuOworCX0KKwkKKwkvKiBQRVJSIEFDQ0VQVEVEICovCisJCisJSUVF
RTgwMjExX05PVEUodmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsIG5pLAorCSAgICAicmVjZWl2ZWQg
UEVSUiwgbnVtYmVyIG9mIGRlc3RpbmF0aW9ucyAlZCwgdW5yZWFjaGFibGUgJWQiLAorCSAgICBw
ZXJyLT5wZXJyX25kZXN0cywgbnVtX3VucmNoYmxfZGVzdCk7CisJCisJZm9yKGkgPSAwOyBpPG51
bV91bnJjaGJsX2Rlc3Q7IGkrKykgeworCQlydCA9IGllZWU4MDIxMV9tZXNoX3J0X2ZpbmQodmFw
LCBQRVJSX0RBRERSKGkpKTsKKwkJaWYgKHJ0ID09IE5VTEwpIC8vWFhYOiB3ZSAga25vdyBpdCBp
cyBub3QgbnVsbCEKKwkJCWNvbnRpbnVlOwogCQlociA9IElFRUU4MDIxMV9NRVNIX1JPVVRFX1BS
SVYocnQsIHN0cnVjdCBpZWVlODAyMTFfaHdtcF9yb3V0ZSk7Ci0JCWlmICghKFBFUlJfREZMQUdT
KDApICYgSUVFRTgwMjExX01FU0hQRVJSX0RGTEFHU19VU04pICYmIAotCQkgICAgSFdNUF9TRVFf
R0VRKFBFUlJfRFNFUShpKSwgaHItPmhyX3NlcSkpIHsKLQkJCWllZWU4MDIxMV9tZXNoX3J0X2Rl
bCh2YXAsIHJ0LT5ydF9kZXN0KTsKLQkJCWllZWU4MDIxMV9tZXNoX3J0X2ZsdXNoX3BlZXIodmFw
LCBydC0+cnRfZGVzdCk7Ci0JCQlydCA9IE5VTEw7Ci0JCQlmb3J3YXJkID0gMTsKKwkJCisJCWlm
KChQRVJSX0RSQ09ERShpKSAmIElFRUU4MDIxMV9SRUFTT05fTUVTSF9QRVJSX05PX0ZJKSAmJgor
CQkJUEVSUl9EU0VRKGkpID09IDApeworCQkJSUVFRTgwMjExX05PVEUodmFwLCBJRUVFODAyMTFf
TVNHX0hXTVAsIG5pLAorCQkJICAgICJQRVJSOiBubyBmb3J3YXJkaW5nIGluZm9ybWF0aW9uIGZv
ciBkZXN0aW5hdGlvbiAlcyIsCisJCQkgICAgZXRoZXJfc3ByaW50ZihQRVJSX0RBRERSKHVucmNo
YmxfZGVzdFtpXSkpKTsKKwkJCWhyLT5ocl9zZXErKzsgLy8gMTFDLjkuMTEuNC4zIGVmZmVjdCBv
ZiByZWNlaXB0IGNhc2UgYikKKwkJfWVsc2UgaWYoKChQRVJSX0RSQ09ERShpKSAmIElFRUU4MDIx
MV9SRUFTT05fTUVTSF9QRVJSX05PX0ZJKSAmJgorCQkgICAgUEVSUl9EU0VRKGkpICE9IDApCisJ
CSAgICB8fAorCQkgICAgKChQRVJSX0RSQ09ERShpKSAmIElFRUU4MDIxMV9SRUFTT05fTUVTSF9Q
RVJSX0RFU1RfVU5SRUFDSCkKKwkJICAgICYmIChIV01QX1NFUV9HVChQRVJSX0RTRVEoaSksIGhy
LT5ocl9zZXEpKSkpeyAvL2Nhc2UgYykKKwkJCUlFRUU4MDIxMV9OT1RFKHZhcCwgSUVFRTgwMjEx
X01TR19IV01QLCBuaSwKKwkJCSAgICAiUEVSUjogdW5yZWNoYWJsZSBkZXN0aW5hdGlvbiAlcyB3
aXRoIgorCQkJICAgICJwZXJyIHNlcSAlZCA+IHN0b3JlZCBzZXEgJWQiLAorCQkJICAgIGV0aGVy
X3NwcmludGYoUEVSUl9EQUREUih1bnJjaGJsX2Rlc3RbaV0pKSwKKwkJCSAgICBQRVJSX0RTRVEo
aSksIGhyLT5ocl9zZXEpOworCQkJaHItPmhyX3NlcSA9IFBFUlJfRFNFUShpKTsKKwkJCS8qIGlu
dmxpZGF0ZSBmb3J3YXJkaW5nIGluZm9ybWF0aW9uICovCisJCQlydC0+cnRfZmxhZ3MgJj0gfklF
RUU4MDIxMV9NRVNIUlRfRkxBR1NfVkFMSUQ7CisJCQkrK2ZvcndhcmQ7CisJCX1lbHNleworCQkJ
SUVFRTgwMjExX05PVEUodmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsIG5pLAorCQkJICAgICJQRVJS
OiB1bnJlY2hhYmxlIGRlc3RpbmF0aW9uICVzIHdpdGgiCisJCQkgICAgInBlcnIgc2VxICVkIDwg
c3RvcmVkIHNlcSAlZCIsCisJCQkgICAgZXRoZXJfc3ByaW50ZihQRVJSX0RBRERSKHVucmNoYmxf
ZGVzdFtpXSkpLAorCQkJICAgIFBFUlJfRFNFUShpKSwgaHItPmhyX3NlcSk7CiAJCX0KIAl9CisK
IAkvKgogCSAqIFByb3BhZ2F0ZSB0aGUgUEVSUiBpZiB3ZSBwcmV2aW91c2x5IGZvdW5kIGl0IG9u
IG91ciByb3V0aW5nIHRhYmxlLgotCSAqIFhYWCBoYW5kbGUgbmRlc3QgPiAxCiAJICovCi0JaWYg
KGZvcndhcmQgJiYgcGVyci0+cGVycl90dGwgPiAxKSB7CisJaWYgKGZvcndhcmQgPiAxMDAgJiYg
cGVyci0+cGVycl90dGwgPiAxICYmCisJICAgIChtcy0+bXNfZmxhZ3MgJiBJRUVFODAyMTFfTUVT
SEZMQUdTX0ZXRCkpIHsKKwkJcHBlcnIgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFf
bWVzaHBlcnJfaWUpICsKKwkJICAgIChwZXJyLT5wZXJyX25kZXN0cy0xKSpzaXplb2YoKnBlcnIt
PnBlcnJfZGVzdHMpLAorCQkgICAgTV84MDIxMV9IV01QX1BFUlIsIE1fTk9XQUlUIHwgTV9aRVJP
KTsKKwkJS0FTU0VSVChwcGVyciAhPSBOVUxMLCAoImVycm9yIGFsbG9jYXRpb25nIFBFUlIiKSk7
CisJCW1lbWNweShwcGVyciwgcGVyciwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbWVzaHBlcnJf
aWUpICsKKwkJICAgIChwZXJyLT5wZXJyX25kZXN0cy0xKSpzaXplb2YoKnBlcnItPnBlcnJfZGVz
dHMpKTsKIAkJSUVFRTgwMjExX05PVEUodmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsIG5pLAogCQkg
ICAgInByb3BhZ2F0ZSBQRVJSIGZyb20gJXMiLCBldGhlcl9zcHJpbnRmKHdoLT5pX2FkZHIyKSk7
Ci0JCW1lbWNweSgmcHBlcnIsIHBlcnIsIHNpemVvZigqcGVycikpOwotCQlwcGVyci5wZXJyX3R0
bC0tOwotCQlod21wX3NlbmRfcGVycih2YXAtPml2X2JzcywgdmFwLT5pdl9teWFkZHIsIGJyb2Fk
Y2FzdGFkZHIsCi0JCSAgICAmcHBlcnIpOworCQlwcGVyci0+cGVycl90dGwtLTsKKwkJaHdtcF9z
ZW5kX3BlcnIodmFwLT5pdl9ic3MsIHZhcC0+aXZfbXlhZGRyLAorCQkgICAgYnJvYWRjYXN0YWRk
ciwgcHBlcnIpOworCQlmcmVlKHBwZXJyLCBNXzgwMjExX0hXTVBfUEVSUik7CiAJfQogfQogI3Vu
ZGVmCVBFRVJfREFERFIKQEAgLTEyMTQsMTAgKzE0MzMsMTQgQEAgaHdtcF9zZW5kX3BlcnIoc3Ry
dWN0IGllZWU4MDIxMV9ub2RlICpuaSwKIAkgKiAgICAgW3Rsdl0gbWVzaCBwYXRoIGVycm9yCiAJ
ICovCiAJcGVyci0+cGVycl9pZSA9IElFRUU4MDIxMV9FTEVNSURfTUVTSFBFUlI7Ci0JcmV0dXJu
IGh3bXBfc2VuZF9hY3Rpb24obmksIHNhLCBkYSwgKHVpbnQ4X3QgKilwZXJyLAotCSAgICBzaXpl
b2Yoc3RydWN0IGllZWU4MDIxMV9tZXNocGVycl9pZSkpOworCXBlcnItPnBlcnJfbGVuID0gSUVF
RTgwMjExX01FU0hQRVJSX0JBU0VfU1ogKworCSAgICBwZXJyLT5wZXJyX25kZXN0cyAqIElFRUU4
MDIxMV9NRVNIUEVSUl9ERVNUX1NaOworCXJldHVybiBod21wX3NlbmRfYWN0aW9uKG5pLCBzYSwg
ZGEsICh1aW50OF90ICopcGVyciwgcGVyci0+cGVycl9sZW4rMik7CiB9CiAKKyNkZWZpbmUJUFJF
UV9URkxBR1MobikJcHJlcS5wcmVxX3RhcmdldHNbbl0udGFyZ2V0X2ZsYWdzCisjZGVmaW5lCVBS
RVFfVEFERFIobikJcHJlcS5wcmVxX3RhcmdldHNbbl0udGFyZ2V0X2FkZHIKKyNkZWZpbmUJUFJF
UV9UU0VRKG4pCXByZXEucHJlcV90YXJnZXRzW25dLnRhcmdldF9zZXEKIHN0YXRpYyB2b2lkCiBo
d21wX3JlY3ZfcmFubihzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsIHN0cnVjdCBpZWVlODAyMTFf
bm9kZSAqbmksCiAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9mcmFtZSAqd2gsIGNvbnN0IHN0
cnVjdCBpZWVlODAyMTFfbWVzaHJhbm5faWUgKnJhbm4pCkBAIC0xMjI2LDcgKzE0NDksOSBAQCBo
d21wX3JlY3ZfcmFubihzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsIHN0cnVjdCBpZWVlODAyMTFf
bm9kZSAqbmksCiAJc3RydWN0IGllZWU4MDIxMV9od21wX3N0YXRlICpocyA9IHZhcC0+aXZfaHdt
cDsKIAlzdHJ1Y3QgaWVlZTgwMjExX21lc2hfcm91dGUgKnJ0ID0gTlVMTDsKIAlzdHJ1Y3QgaWVl
ZTgwMjExX2h3bXBfcm91dGUgKmhyOworCXN0cnVjdCBpZWVlODAyMTFfbWVzaHByZXFfaWUgcHJl
cTsKIAlzdHJ1Y3QgaWVlZTgwMjExX21lc2hyYW5uX2llIHByYW5uOworCXVpbnQzMl90IG1ldHJp
YyA9IDA7CiAKIAlpZiAobmkgPT0gdmFwLT5pdl9ic3MgfHwKIAkgICAgbmktPm5pX21sc3RhdGUg
IT0gSUVFRTgwMjExX05PREVfTUVTSF9FU1RBQkxJU0hFRCB8fApAQCAtMTIzOSwyNCArMTQ2NCw4
NSBAQCBod21wX3JlY3ZfcmFubihzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsIHN0cnVjdCBpZWVl
ODAyMTFfbm9kZSAqbmksCiAJICogSWYgd2UgYWxyZWFkeSBrbm93IGl0LCBwcm9wYWdhdGUgdGhl
IFJBTk4gZWxlbWVudC4KIAkgKi8KIAlpZiAocnQgPT0gTlVMTCkgeworCQlJRUVFODAyMTFfTk9U
RSh2YXAsIElFRUU4MDIxMV9NU0dfSFdNUCwgbmksCisJCSAgICAicmVjZWl2ZWQgUkFOTiwgbmV3
IHJvb3RtYWMgJXMiLAorCQkgICAgZXRoZXJfc3ByaW50ZihyYW5uLT5yYW5uX2FkZHIpKTsKIAkJ
aHdtcF9kaXNjb3Zlcih2YXAsIHJhbm4tPnJhbm5fYWRkciwgTlVMTCk7CiAJCXJldHVybjsKIAl9
CiAJaHIgPSBJRUVFODAyMTFfTUVTSF9ST1VURV9QUklWKHJ0LCBzdHJ1Y3QgaWVlZTgwMjExX2h3
bXBfcm91dGUpOwotCWlmIChIV01QX1NFUV9HVChyYW5uLT5yYW5uX3NlcSwgaHItPmhyX3NlcSkp
IHsKLQkJaHItPmhyX3NlcSA9IHJhbm4tPnJhbm5fc2VxOwotCQlpZiAocmFubi0+cmFubl90dGwg
PiAxICYmCi0JCSAgICByYW5uLT5yYW5uX2hvcGNvdW50IDwgaHMtPmhzX21heGhvcHMgJiYKLQkJ
ICAgIChtcy0+bXNfZmxhZ3MgJiBJRUVFODAyMTFfTUVTSEZMQUdTX0ZXRCkpIHsKLQkJCW1lbWNw
eSgmcHJhbm4sIHJhbm4sIHNpemVvZihwcmFubikpOwotCQkJcHJhbm4ucmFubl9ob3Bjb3VudCAr
PSAxOwotCQkJcHJhbm4ucmFubl90dGwgLT0gMTsKLQkJCXByYW5uLnJhbm5fbWV0cmljICs9IG1z
LT5tc19wbWV0cmljLT5tcG1fbWV0cmljKG5pKTsKLQkJCWh3bXBfc2VuZF9yYW5uKHZhcC0+aXZf
YnNzLCB2YXAtPml2X215YWRkciwKLQkJCSAgICBicm9hZGNhc3RhZGRyLCAmcHJhbm4pOwotCQl9
CisKKwkvKgorCSAqIEFjY2VwdGFuY2UgY3JpdGVyaWE6IGlmIFJBTk4gaGFzIG9sZCBzZXF1ZW5j
ZSBudW1iZXIKKwkgKiBvciBzYW1lIHNlcXVlbmNlIG51bWJlciBidXQgd29yc2UgbWV0cmljIHRo
YW4gaW4KKwkgKiBmb3J3YXJkaW5nIGluZm9ybWF0aW9uLCBkaXNjYXJkIHRoaXMgUkFOTi4KKwkg
Ki8KKwlpZiAoSFdNUF9TRVFfTFQocmFubi0+cmFubl9zZXEsIGhyLT5ocl9zZXEpIHx8CisJICAg
IChIV01QX1NFUV9FUShyYW5uLT5yYW5uX3NlcSwgaHItPmhyX3NlcSkgJiYKKwkgICAgcmFubi0+
cmFubl9tZXRyaWMgPiBydC0+cnRfbWV0cmljKSkgeworCQlJRUVFODAyMTFfRElTQ0FSRF9NQUMo
dmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsIG5pLT5uaV9tYWNhZGRyLAorCQkgICAgTlVMTCwgIlJB
Tk4sIHJvb3RtYWMgJXMsIGxhc3Qgc2VlbiBvcmlnLnNlcSAlZCwgcmFubi5zZXEgJWQiLAorCQkg
ICAgZXRoZXJfc3ByaW50ZihyYW5uLT5yYW5uX2FkZHIpLCBoci0+aHJfc2VxLCByYW5uLT5yYW5u
X3NlcSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBSQU5OIEFDQ0VQVEVEICovCisJSUVFRTgwMjEx
X05PVEUodmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsIG5pLAorCSAgICAicmVjZWl2ZWQgUkFOTiwg
cm9vdG1hYyAlcyIsCisJICAgIGV0aGVyX3NwcmludGYocmFubi0+cmFubl9hZGRyKSk7CisKKy8v
IAlpZWVlODAyMTFfaHdtcF9yYW5uaW50ID0gcmFubi0+cmFubl9pbnRlcnZhbDsKKworCS8qCisJ
ICogTWVzaCBTVEEgbWF5IGluaXRpYXRlIGEgUFJFUS9QUkVQIGV4Y2hhbmdlIHdpdGggcm9vdC4K
KwkgKiBTZWUgMTFDLjkuOS4zIChjb25kaXRpb24gZm9yIGdlbmVyYXRpbmcgYW5kIHNlbmRpbmcg
YSBQUkVRKSBDYXNlIEQuCisJICovCisJbWV0cmljID0gcmFubi0+cmFubl9tZXRyaWMgKyBtcy0+
bXNfcG1ldHJpYy0+bXBtX21ldHJpYyhuaSk7CisJaWYobWV0cmljIDwgcnQtPnJ0X21ldHJpYyB8
fAorCSAgICByYXRlY2hlY2soJmhzLT5oc19sYXN0cm9vdGNvbmYsICZpZWVlODAyMTFfaHdtcF9y
b290bWluX2NvbmZpbnQpKXsKKwkJZ2V0bWljcm91cHRpbWUoJmhzLT5oc19sYXN0cm9vdGNvbmYp
OworCQlJRUVFODAyMTFfTk9URSh2YXAsIElFRUU4MDIxMV9NU0dfSFdNUCwgbmksCisJCSJQUkVR
L1BSRVAgZXhjaGFuZ2Ugd2l0aCByb290ICVzLCBuZXh0aG9wICVzIiwKKwkJZXRoZXJfc3ByaW50
ZihyYW5uLT5yYW5uX2FkZHIpLAorCQlldGhlcl9zcHJpbnRmKHJ0LT5ydF9uZXh0aG9wKSk7CisJ
CXByZXEucHJlcV9mbGFncyA9IDA7IC8qIHVuaWNhc3QgUFJFUSAqLworCQlwcmVxLnByZXFfaG9w
Y291bnQgPSAwOworCQlwcmVxLnByZXFfdHRsID0gbXMtPm1zX3R0bDsKKwkJcHJlcS5wcmVxX2lk
ID0gMDsgLyogTkI6IG5vdCB1c2VkICovCisJCUlFRUU4MDIxMV9BRERSX0NPUFkocHJlcS5wcmVx
X29yaWdhZGRyLCB2YXAtPml2X215YWRkcik7CisJCXByZXEucHJlcV9vcmlnc2VxID0gKytocy0+
aHNfc2VxOworCQlwcmVxLnByZXFfbGlmZXRpbWUgPSBpZWVlODAyMTFfaHdtcF9yYW5udGltZW91
dDsKKwkJcHJlcS5wcmVxX21ldHJpYyA9IElFRUU4MDIxMV9NRVNITE1FVFJJQ19JTklUSUFMVkFM
OworCQlwcmVxLnByZXFfdGNvdW50ID0gMTsKKwkJUFJFUV9URkxBR1MoMCkgPSBJRUVFODAyMTFf
TUVTSFBSRVFfVEZMQUdTX1RPOworCQlJRUVFODAyMTFfQUREUl9DT1BZKFBSRVFfVEFERFIoMCks
IHJhbm4tPnJhbm5fYWRkcik7CisJCVBSRVFfVFNFUSgwKSA9IHJhbm4tPnJhbm5fc2VxOworCQlo
d21wX3NlbmRfcHJlcSh2YXAtPml2X2JzcywgdmFwLT5pdl9teWFkZHIsCisJCQkJcnQtPnJ0X25l
eHRob3AsICZwcmVxKTsKKwl9CisKKwkvKiBNYXkgdXBkYXRlIGZvcndhcmRpbmcgaWZvcm1hdGlv
biB0byByb290LiAqLworCWhyLT5ocl9zZXEgPSByYW5uLT5yYW5uX3NlcTsKKwlydC0+cnRfbmhv
cHMgPSByYW5uLT5yYW5uX2hvcGNvdW50KzE7CisJcnQtPnJ0X21ldHJpYyA9IG1ldHJpYzsKKwor
CWlmIChyYW5uLT5yYW5uX3R0bCA+IDEgJiYKKwkgICAgcmFubi0+cmFubl9ob3Bjb3VudCA8IGhz
LT5oc19tYXhob3BzICYmCisJICAgIChtcy0+bXNfZmxhZ3MgJiBJRUVFODAyMTFfTUVTSEZMQUdT
X0ZXRCkpIHsKKwkJbWVtY3B5KCZwcmFubiwgcmFubiwgc2l6ZW9mKHByYW5uKSk7CisJCXByYW5u
LnJhbm5faG9wY291bnQgKz0gMTsKKwkJcHJhbm4ucmFubl90dGwgLT0gMTsKKwkJcHJhbm4ucmFu
bl9tZXRyaWMgKz0gbXMtPm1zX3BtZXRyaWMtPm1wbV9tZXRyaWMobmkpOworCQlJRUVFODAyMTFf
Tk9URSh2YXAsIElFRUU4MDIxMV9NU0dfSFdNUCwgbmksCisJCSAgICAicHJvcGFnYXRlIFJBTk4s
IHJvb3RtYWMgJXMiLAorCQkgICAgZXRoZXJfc3ByaW50ZihyYW5uLT5yYW5uX2FkZHIpKTsKKwkJ
aHdtcF9zZW5kX3Jhbm4odmFwLT5pdl9ic3MsIHZhcC0+aXZfbXlhZGRyLAorCQkgICAgYnJvYWRj
YXN0YWRkciwgJnByYW5uKTsKIAl9CiB9CisjdW5kZWYJUFJFUV9URkxBR1MKKyN1bmRlZglQUkVR
X1RBRERSCisjdW5kZWYJUFJFUV9UU0VRCiAKIHN0YXRpYyBpbnQKIGh3bXBfc2VuZF9yYW5uKHN0
cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksCkBAIC0xMjc0LDggKzE1NjAsOSBAQCBod21wX3NlbmRf
cmFubihzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLAogCSAqICAgICBbdGx2XSByb290IGFubm91
Y2VtZW50CiAJICovCiAJcmFubi0+cmFubl9pZSA9IElFRUU4MDIxMV9FTEVNSURfTUVTSFJBTk47
CisJcmFubi0+cmFubl9sZW4gPSBJRUVFODAyMTFfTUVTSFJBTk5fQkFTRV9TWjsKIAlyZXR1cm4g
aHdtcF9zZW5kX2FjdGlvbihuaSwgc2EsIGRhLCAodWludDhfdCAqKXJhbm4sCi0JICAgIHNpemVv
ZihzdHJ1Y3QgaWVlZTgwMjExX21lc2hyYW5uX2llKSk7CisJICAgIHJhbm4tPnJhbm5fbGVuICsg
Mik7CiB9CiAKICNkZWZpbmUJUFJFUV9URkxBR1MobikJcHJlcS5wcmVxX3RhcmdldHNbbl0udGFy
Z2V0X2ZsYWdzCkBAIC0xMzIzLDE4ICsxNjEwLDE5IEBAIGh3bXBfZGlzY292ZXIoc3RydWN0IGll
ZWU4MDIxMXZhcCAqdmFwLAogCQkJLyogWFhYIGNoZWNrIHByZXEgcmV0cmllcyAqLwogCQkJc2Vu
ZHByZXEgPSAxOwogCQkJSUVFRTgwMjExX05PVEVfTUFDKHZhcCwgSUVFRTgwMjExX01TR19IV01Q
LCBkZXN0LAotCQkJICAgICJzdGFydCBwYXRoIGRpc2NvdmVyeSAoc3JjICVzKSIsCisJCQkgICAg
InN0YXJ0IHBhdGggZGlzY292ZXJ5IChzcmMgJXMpLCB0YXJnZXQgc2VxICV1IiwKIAkJCSAgICBt
ID09IE5VTEwgPyAiPG5vbmU+IiA6IGV0aGVyX3NwcmludGYoCi0JCQkJbXRvZChtLCBzdHJ1Y3Qg
ZXRoZXJfaGVhZGVyICopLT5ldGhlcl9zaG9zdCkpOworCQkJICAgIG10b2QobSwgc3RydWN0IGV0
aGVyX2hlYWRlciAqKS0+ZXRoZXJfc2hvc3QpLAorCQkJICAgIGhyLT5ocl9zZXEpOwogCQkJLyoK
IAkJCSAqIFRyeSB0byBkaXNjb3ZlciB0aGUgcGF0aCBmb3IgdGhpcyBub2RlLgogCQkJICovCi0J
CQlwcmVxLnByZXFfZmxhZ3MgPSAwOworCQkJcHJlcS5wcmVxX2ZsYWdzID0gSUVFRTgwMjExX01F
U0hQUkVRX0ZMQUdTX0FNOwogCQkJcHJlcS5wcmVxX2hvcGNvdW50ID0gMDsKIAkJCXByZXEucHJl
cV90dGwgPSBtcy0+bXNfdHRsOwogCQkJcHJlcS5wcmVxX2lkID0gKytocy0+aHNfcHJlcWlkOwog
CQkJSUVFRTgwMjExX0FERFJfQ09QWShwcmVxLnByZXFfb3JpZ2FkZHIsIHZhcC0+aXZfbXlhZGRy
KTsKLQkJCXByZXEucHJlcV9vcmlnc2VxID0gaHItPmhyX29yaWdzZXE7CisJCQlwcmVxLnByZXFf
b3JpZ3NlcSA9ICsraHMtPmhzX3NlcTsKIAkJCXByZXEucHJlcV9saWZldGltZSA9IHJ0LT5ydF9s
aWZldGltZTsKIAkJCXByZXEucHJlcV9tZXRyaWMgPSBydC0+cnRfbWV0cmljOwogCQkJcHJlcS5w
cmVxX3Rjb3VudCA9IDE7CkBAIC0xMzQyLDEwICsxNjMwLDggQEAgaHdtcF9kaXNjb3ZlcihzdHJ1
Y3QgaWVlZTgwMjExdmFwICp2YXAsCiAJCQlQUkVRX1RGTEFHUygwKSA9IDA7CiAJCQlpZiAoaWVl
ZTgwMjExX2h3bXBfdGFyZ2V0b25seSkKIAkJCQlQUkVRX1RGTEFHUygwKSB8PSBJRUVFODAyMTFf
TUVTSFBSRVFfVEZMQUdTX1RPOwotCQkJaWYgKGllZWU4MDIxMV9od21wX3JlcGx5Zm9yd2FyZCkK
LQkJCQlQUkVRX1RGTEFHUygwKSB8PSBJRUVFODAyMTFfTUVTSFBSRVFfVEZMQUdTX1JGOwogCQkJ
UFJFUV9URkxBR1MoMCkgfD0gSUVFRTgwMjExX01FU0hQUkVRX1RGTEFHU19VU047Ci0JCQlQUkVR
X1RTRVEoMCkgPSAwOworCQkJUFJFUV9UU0VRKDApID0gaHItPmhyX3NlcTsKIAkJCS8qIFhYWCBj
aGVjayByZXR1cm4gdmFsdWUgKi8KIAkJCWh3bXBfc2VuZF9wcmVxKHZhcC0+aXZfYnNzLCB2YXAt
Pml2X215YWRkciwKIAkJCSAgICBicm9hZGNhc3RhZGRyLCAmcHJlcSk7CmRpZmYgLS1naXQgYS9z
eXMvbmV0ODAyMTEvaWVlZTgwMjExX21lc2guaCBiL3N5cy9uZXQ4MDIxMS9pZWVlODAyMTFfbWVz
aC5oCmluZGV4IGFkMWIwMmEuLmNlOTIwOTYgMTAwNjQ0Ci0tLSBhL3N5cy9uZXQ4MDIxMS9pZWVl
ODAyMTFfbWVzaC5oCisrKyBiL3N5cy9uZXQ4MDIxMS9pZWVlODAyMTFfbWVzaC5oCkBAIC0xNzAs
NiArMTcwLDcgQEAgc3RydWN0IGllZWU4MDIxMV9tZXNocGFubl9pZSB7CiB9IF9fcGFja2VkOwog
CiAvKiBSb290IChNUCkgQW5ub3VjZW1lbnQgKi8KKyNkZWZpbmUgSUVFRTgwMjExX01FU0hSQU5O
X0JBU0VfU1ogCSgyMSkKIHN0cnVjdCBpZWVlODAyMTFfbWVzaHJhbm5faWUgewogCXVpbnQ4X3QJ
CXJhbm5faWU7CQkvKiBJRUVFODAyMTFfRUxFTUlEX01FU0hSQU5OICovCiAJdWludDhfdAkJcmFu
bl9sZW47CkBAIC0xNzksMTAgKzE4MCwxNSBAQCBzdHJ1Y3QgaWVlZTgwMjExX21lc2hyYW5uX2ll
IHsKIAl1aW50OF90CQlyYW5uX3R0bDsKIAl1aW50OF90CQlyYW5uX2FkZHJbSUVFRTgwMjExX0FE
RFJfTEVOXTsKIAl1aW50MzJfdAlyYW5uX3NlcTsJCS8qIEhXTVAgU2VxdWVuY2UgTnVtYmVyICov
CisJdWludDMyX3QJcmFubl9pbnRlcnZhbDsKIAl1aW50MzJfdAlyYW5uX21ldHJpYzsKIH0gX19w
YWNrZWQ7CitNQUxMT0NfREVDTEFSRShNXzgwMjExX0hXTVBfUkFOTik7CiAKIC8qIE1lc2ggUGF0
aCBSZXF1ZXN0ICovCisjZGVmaW5lIElFRUU4MDIxMV9NRVNIUFJFUV9CQVNFX1NaIAkoMjYpCisj
ZGVmaW5lIElFRUU4MDIxMV9NRVNIUFJFUV9CQVNFX1NaX0FFIAkoMzIpCisjZGVmaW5lIElFRUU4
MDIxMV9NRVNIUFJFUV9UUkdUX1NaIAkoMTEpCiBzdHJ1Y3QgaWVlZTgwMjExX21lc2hwcmVxX2ll
IHsKIAl1aW50OF90CQlwcmVxX2llOwkvKiBJRUVFODAyMTFfRUxFTUlEX01FU0hQUkVRICovCiAJ
dWludDhfdAkJcHJlcV9sZW47CkBAIC0xOTYsMjEgKzIwMiwyNCBAQCBzdHJ1Y3QgaWVlZTgwMjEx
X21lc2hwcmVxX2llIHsKIAl1aW50MzJfdAlwcmVxX2lkOwogCXVpbnQ4X3QJCXByZXFfb3JpZ2Fk
ZHJbSUVFRTgwMjExX0FERFJfTEVOXTsKIAl1aW50MzJfdAlwcmVxX29yaWdzZXE7CS8qIEhXTVAg
U2VxdWVuY2UgTnVtYmVyICovCi0JLyogTkI6IG1heSBoYXZlIE9yaWdpbmF0b3IgUHJveGllZCBB
ZGRyZXNzICovCisJLyogTkI6IG1heSBoYXZlIE9yaWdpbmF0b3IgRXh0ZXJuYWwgQWRkcmVzcyAq
LworCXVpbnQ4X3QJCXByZXFfb3JpZ19leHRfYWRkcltJRUVFODAyMTFfQUREUl9MRU5dOwogCXVp
bnQzMl90CXByZXFfbGlmZXRpbWU7CiAJdWludDMyX3QJcHJlcV9tZXRyaWM7CiAJdWludDhfdAkJ
cHJlcV90Y291bnQ7CS8qIHRhcmdldCBjb3VudCAqLwogCXN0cnVjdCB7CiAJCXVpbnQ4X3QJCXRh
cmdldF9mbGFnczsKICNkZWZpbmUJSUVFRTgwMjExX01FU0hQUkVRX1RGTEFHU19UTwkweDAxCS8q
IFRhcmdldCBPbmx5ICovCi0jZGVmaW5lCUlFRUU4MDIxMV9NRVNIUFJFUV9URkxBR1NfUkYJMHgw
MgkvKiBSZXBseSBhbmQgRm9yd2FyZCAqLwogI2RlZmluZQlJRUVFODAyMTFfTUVTSFBSRVFfVEZM
QUdTX1VTTgkweDA0CS8qIFVua25vd24gSFdNUCBzZXEgbnVtYmVyICovCiAJCXVpbnQ4X3QJCXRh
cmdldF9hZGRyW0lFRUU4MDIxMV9BRERSX0xFTl07CiAJCXVpbnQzMl90CXRhcmdldF9zZXE7CS8q
IEhXTVAgU2VxdWVuY2UgTnVtYmVyICovCiAJfSBfX3BhY2tlZCBwcmVxX3RhcmdldHNbMV07CQkv
KiBOQjogdmFyaWFibGUgc2l6ZSAqLwogfSBfX3BhY2tlZDsKK01BTExPQ19ERUNMQVJFKE1fODAy
MTFfSFdNUF9QUkVRKTsKIAogLyogTWVzaCBQYXRoIFJlcGx5ICovCisjZGVmaW5lIElFRUU4MDIx
MV9NRVNIUFJFUF9CQVNFX1NaIAkoMzEpCisjZGVmaW5lIElFRUU4MDIxMV9NRVNIUFJFUF9CQVNF
X1NaX0FFIAkoMzcpCiBzdHJ1Y3QgaWVlZTgwMjExX21lc2hwcmVwX2llIHsKIAl1aW50OF90CQlw
cmVwX2llOwkvKiBJRUVFODAyMTFfRUxFTUlEX01FU0hQUkVQICovCiAJdWludDhfdAkJcHJlcF9s
ZW47CkBAIC0yMTksMTQgKzIyOCwxOSBAQCBzdHJ1Y3QgaWVlZTgwMjExX21lc2hwcmVwX2llIHsK
IAl1aW50OF90CQlwcmVwX3R0bDsKIAl1aW50OF90CQlwcmVwX3RhcmdldGFkZHJbSUVFRTgwMjEx
X0FERFJfTEVOXTsKIAl1aW50MzJfdAlwcmVwX3RhcmdldHNlcTsKLQkvKiBOQjogTWF5IGhhdmUg
VGFyZ2V0IFByb3hpZWQgQWRkcmVzcyAqLworCS8qIE5COiBNYXkgaGF2ZSBUYXJnZXQgRXh0ZXJu
YWwgQWRkcmVzcyAqLworCXVpbnQ4X3QJCXByZXBfdGFyZ2V0X2V4dF9hZGRyW0lFRUU4MDIxMV9B
RERSX0xFTl07CiAJdWludDMyX3QJcHJlcF9saWZldGltZTsKIAl1aW50MzJfdAlwcmVwX21ldHJp
YzsKIAl1aW50OF90CQlwcmVwX29yaWdhZGRyW0lFRUU4MDIxMV9BRERSX0xFTl07CiAJdWludDMy
X3QJcHJlcF9vcmlnc2VxOwkvKiBIV01QIFNlcXVlbmNlIE51bWJlciAqLwogfSBfX3BhY2tlZDsK
K01BTExPQ19ERUNMQVJFKE1fODAyMTFfSFdNUF9QUkVQKTsKIAogLyogTWVzaCBQYXRoIEVycm9y
ICovCisjZGVmaW5lIElFRUU4MDIxMV9NRVNIUEVSUl9CQVNFX1NaIAkoMikKKyNkZWZpbmUgSUVF
RTgwMjExX01FU0hQRVJSX0RFU1RfU1ogCSgxMykKKyNkZWZpbmUgSUVFRTgwMjExX01FU0hQRVJS
X0RFU1RfU1pfQUUgCSgxOSkKIHN0cnVjdCBpZWVlODAyMTFfbWVzaHBlcnJfaWUgewogCXVpbnQ4
X3QJCXBlcnJfaWU7CS8qIElFRUU4MDIxMV9FTEVNSURfTUVTSFBFUlIgKi8KIAl1aW50OF90CQlw
ZXJyX2xlbjsKQEAgLTIzOCw5ICsyNTIsMTIgQEAgc3RydWN0IGllZWU4MDIxMV9tZXNocGVycl9p
ZSB7CiAjZGVmaW5lCUlFRUU4MDIxMV9NRVNIUEVSUl9ERkxBR1NfUkMJMHgwMgogCQl1aW50OF90
CQlkZXN0X2FkZHJbSUVFRTgwMjExX0FERFJfTEVOXTsKIAkJdWludDMyX3QJZGVzdF9zZXE7CS8q
IEhXTVAgU2VxdWVuY2UgTnVtYmVyICovCisJCS8qIE5COiBNYXkgaGF2ZSBEZXN0aW5hdGlvbiBF
eHRlcm5hbCBBZGRyZXNzICovCisJCXVpbnQ4X3QJCWRlc3RfZXh0X2FkZHJbSUVFRTgwMjExX0FE
RFJfTEVOXTsKIAkJdWludDE2X3QJZGVzdF9yY29kZTsKIAl9IF9fcGFja2VkIHBlcnJfZGVzdHNb
MV07CQkvKiBOQjogdmFyaWFibGUgc2l6ZSAqLwogfSBfX3BhY2tlZDsKK01BTExPQ19ERUNMQVJF
KE1fODAyMTFfSFdNUF9QRVJSKTsKIAogI2lmZGVmIG5vdHlldAogLyogTWVzaCBQcm94eSBVcGRh
dGUgKi8KIAo=
--90e6ba1efd78752b9804ad99db4f--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CA%2BsBSo%2Bs1bFw3KLvf%2BTh_vdR_5ato_xhEE5saLh6aK=1Avbb=w>