Subject: Re: toolchain/35540: GDB 6 support for pthreads
To: None <gnats-bugs@NetBSD.org>
From: Bucky Katz <bucky@picovex.com>
List: netbsd-bugs
Date: 02/02/2007 08:20:33
--=-=-=

Geoff Wing <gcw@pobox.com> writes:

> The following reply was made to PR toolchain/35540; it has been noted by GNATS.
>
> From: Geoff Wing <gcw@pobox.com>
> To: gnats-bugs@NetBSD.org
> Cc: 
> Subject: Re: toolchain/35540: GDB 6 support for pthreads
> Date: Fri, 2 Feb 2007 17:44:53 +1100
>
>  On Friday 2007-02-02 17:10 +1100, Bucky Katz output:
>  :Content-Disposition: attachment; filename=patch.gdb_pthread
>  
>  1) Where are nbsd_thread_init() & _initialize_nbsd_thread()?
>  
>  2) Where is armnbsd-regs.c?
>  
>  3) gdb6 doesn't have  nbsd-thread.c .  Where's this coming from?  gdb5.3?
>  
>  4) http://www.netbsd.org/cgi-bin/query-pr-single.pl?number=35540
>     shows how base64 is interpreted.
>  
>  Regards,
>  Geoff
>  

My mistake and my apologies. I neglected to add -N when I made the
diff.

Here is a regenerated patch. Let me see if I can attach it
appropriately.


--=-=-=
Content-Type: application/x-shar
Content-Disposition: attachment; filename=patch.gdb_pthread.try2
Content-Transfer-Encoding: base64
Content-Description: Updated patch with missing files

LS0tIDA3MDEyOS9zcmMvZ251L2Rpc3QvZ2RiNi9nZGIvYXJtbmJzZC1uYXQuYwkyMDA2LTA3LTAy
IDIwOjAxOjI1LjAwMDAwMDAwMCAtMDcwMAorKysgbmV3L3NyYy9nbnUvZGlzdC9nZGI2L2dkYi9h
cm1uYnNkLW5hdC5jCTIwMDYtMTAtMjUgMTU6NDQ6NTIuMDAwMDAwMDAwIC0wNzAwCkBAIC00ODYs
MTIgKzQ4NiwyMCBAQAogX2luaXRpYWxpemVfYXJtX25ldGJzZF9uYXQgKHZvaWQpCiB7CiAgIHN0
cnVjdCB0YXJnZXRfb3BzICp0OworICBleHRlcm4gdm9pZCBuYnNkX3RocmVhZF9pbml0IChzdHJ1
Y3QgdGFyZ2V0X29wcyAqKTsKIAogICB0ID0gaW5mX3B0cmFjZV90YXJnZXQgKCk7CiAgIHQtPnRv
X2ZldGNoX3JlZ2lzdGVycyA9IGFybW5ic2RfZmV0Y2hfcmVnaXN0ZXJzOwogICB0LT50b19zdG9y
ZV9yZWdpc3RlcnMgPSBhcm1uYnNkX3N0b3JlX3JlZ2lzdGVyczsKICAgYWRkX3RhcmdldCAodCk7
CiAKKy8qCisqcnBvcGFsaW46CisqZGVwcmVjYXRlZF9jaGlsZF9vcHMgZG9uJ3Qgd29yayB2ZXJ5
IHdlbGwgCisqd2UgbmVlZCB0byBwYXNzIHRoZSBjdXJyZW50IHRhcmdldF9vcHMgdG8gbmJzZF90
aHJlYWQKKyovCisgIG5ic2RfdGhyZWFkX2luaXQgKHQpOworIAogICBkZXByZWNhdGVkX2FkZF9j
b3JlX2ZucyAoJmFybV9uZXRic2RfY29yZV9mbnMpOwogICBkZXByZWNhdGVkX2FkZF9jb3JlX2Zu
cyAoJmFybV9uZXRic2RfZWxmY29yZV9mbnMpOwogfQotLS0gMDcwMTI5L3NyYy9nbnUvZGlzdC9n
ZGI2L2dkYi9hcm1uYnNkLXJlZ3MuYwkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgw
MAorKysgbmV3L3NyYy9nbnUvZGlzdC9nZGI2L2dkYi9hcm1uYnNkLXJlZ3MuYwkyMDA2LTEwLTI1
IDE1OjQ0OjUyLjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDEyMSBAQAorLyoKKypycG9wYWxp
bjoKKypzdXBwbHlfZ3JlZ3NldCBhbmQgZnJpZW5kcyBmb3IgbmV0YnNkIHRocmVhZCBkZWJ1Z2dp
bmcKKypUaGUgZnVuY3Rpb25zIGJlbG93IGFyZSBuZWVkZWQgYnkgcHRocmVhZF9kYmcgcHJvY18q
IGZ1bmN0aW9ucworKih0aGV5IG5lZWQgdG8gYmUgYWJsZSB0byBjaG9vc2UgYmV0d2VlbiBncmVn
c2V0IGFuZCBmcHJlZ3NldCkKKyovCisKKyNpbmNsdWRlICJkZWZzLmgiCisjaW5jbHVkZSAiZ2Ri
Y29yZS5oIgorI2luY2x1ZGUgImluZmVyaW9yLmgiCisjaW5jbHVkZSAicmVnY2FjaGUuaCIKKyNp
bmNsdWRlICJ0YXJnZXQuaCIKKworI2luY2x1ZGUgImdkYl9zdHJpbmcuaCIKKyNpbmNsdWRlIDxz
eXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CisjaW5jbHVkZSA8bWFjaGluZS9y
ZWcuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2ZyYW1lLmg+CisKKyNpbmNsdWRlICJhcm0tdGRlcC5o
IgorI2luY2x1ZGUgImluZi1wdHJhY2UuaCIKKworI2lmbmRlZiBIQVZFX0dSRUdTRVRfVAordHlw
ZWRlZiBzdHJ1Y3QgcmVnIGdyZWdzZXRfdDsKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfRlBSRUdT
RVRfVAordHlwZWRlZiBzdHJ1Y3QgZnByZWcgZnByZWdzZXRfdDsKKyNlbmRpZgorCisjaW5jbHVk
ZSAiZ3JlZ3NldC5oIgorCitleHRlcm4gaW50IGFybV9hcGNzXzMyOworCit2b2lkCitzdXBwbHlf
Z3JlZ3NldCAoZ3JlZ3NldF90ICpncmVnc2V0KQoreworICBpbnQgcmVnbm87CisgIENPUkVfQURE
UiByX3BjOworCisgIGZvciAocmVnbm8gPSBBUk1fQTFfUkVHTlVNOyByZWdubyA8IEFSTV9TUF9S
RUdOVU07IHJlZ25vKyspCisgICAgcmVnY2FjaGVfcmF3X3N1cHBseSAoY3VycmVudF9yZWdjYWNo
ZSwgcmVnbm8sIChjaGFyICopICZncmVnc2V0LT5yW3JlZ25vXSk7CisKKyAgcmVnY2FjaGVfcmF3
X3N1cHBseSAoY3VycmVudF9yZWdjYWNoZSwgQVJNX1NQX1JFR05VTSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgKGNoYXIgKikgJmdyZWdzZXQtPnJfc3ApOworICByZWdjYWNoZV9yYXdfc3VwcGx5
IChjdXJyZW50X3JlZ2NhY2hlLCBBUk1fTFJfUkVHTlVNLAorICAgICAgICAgICAgICAgICAgICAg
ICAoY2hhciAqKSAmZ3JlZ3NldC0+cl9scik7CisKKyAgcl9wYyA9IEFERFJfQklUU19SRU1PVkUg
KGdyZWdzZXQtPnJfcGMpOworICByZWdjYWNoZV9yYXdfc3VwcGx5IChjdXJyZW50X3JlZ2NhY2hl
LCBBUk1fUENfUkVHTlVNLCAoY2hhciAqKSAmcl9wYyk7CisKKyAgaWYgKGFybV9hcGNzXzMyKQor
ICAgIHJlZ2NhY2hlX3Jhd19zdXBwbHkgKGN1cnJlbnRfcmVnY2FjaGUsIEFSTV9QU19SRUdOVU0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgJmdyZWdzZXQtPnJfY3Bzcik7Cisg
IGVsc2UKKyAgICByZWdjYWNoZV9yYXdfc3VwcGx5IChjdXJyZW50X3JlZ2NhY2hlLCBBUk1fUFNf
UkVHTlVNLAorICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopICZncmVnc2V0LT5yX3Bj
KTsKKworfQorCit2b2lkCitzdXBwbHlfZnByZWdzZXQgKGZwcmVnc2V0X3QgKmZwYXJlZ3NldCkK
K3sKKyAgaW50IHJlZ25vOworCisgIGZvciAocmVnbm8gPSBBUk1fRjBfUkVHTlVNOyByZWdubyA8
PSBBUk1fRjdfUkVHTlVNOyByZWdubysrKQorICAgIHJlZ2NhY2hlX3Jhd19zdXBwbHkgKGN1cnJl
bnRfcmVnY2FjaGUsIHJlZ25vLAorICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopICZm
cGFyZWdzZXQtPmZwcltyZWdubyAtIEFSTV9GMF9SRUdOVU1dKTsKKworCisgIHJlZ2NhY2hlX3Jh
d19zdXBwbHkgKGN1cnJlbnRfcmVnY2FjaGUsIEFSTV9GUFNfUkVHTlVNLAorICAgICAgICAgICAg
ICAgICAgICAgICAoY2hhciAqKSAmZnBhcmVnc2V0LT5mcHJfZnBzcik7Cit9CisKK3ZvaWQKK2Zp
bGxfZ3JlZ3NldCAoZ3JlZ3NldF90ICpncmVnc2V0cCwgaW50IHJlZ25vKQoreworICBpZiAoLTEg
PT0gcmVnbm8pCisgICAgeworICAgICAgaW50IHJlZ251bTsKKyAgICAgIGZvciAocmVnbnVtID0g
QVJNX0ExX1JFR05VTTsgcmVnbnVtIDwgQVJNX1NQX1JFR05VTTsgcmVnbnVtKyspIAorCXJlZ2Nh
Y2hlX3Jhd19jb2xsZWN0IChjdXJyZW50X3JlZ2NhY2hlLCByZWdudW0sIChjaGFyICopICZncmVn
c2V0cC0+cltyZWdudW1dKTsKKyAgICB9CisgIGVsc2UgaWYgKHJlZ25vID49IEFSTV9BMV9SRUdO
VU0gJiYgcmVnbm8gPCBBUk1fU1BfUkVHTlVNKQorICAgIHJlZ2NhY2hlX3Jhd19jb2xsZWN0IChj
dXJyZW50X3JlZ2NhY2hlLCByZWdubywgKGNoYXIgKikgJmdyZWdzZXRwLT5yW3JlZ25vXSk7CisK
KyAgaWYgKEFSTV9TUF9SRUdOVU0gPT0gcmVnbm8gfHwgLTEgPT0gcmVnbm8pCisgICAgcmVnY2Fj
aGVfcmF3X2NvbGxlY3QgKGN1cnJlbnRfcmVnY2FjaGUsIEFSTV9TUF9SRUdOVU0sIChjaGFyICop
ICZncmVnc2V0cC0+cl9zcCk7CisKKyAgaWYgKEFSTV9MUl9SRUdOVU0gPT0gcmVnbm8gfHwgLTEg
PT0gcmVnbm8pCisgICAgcmVnY2FjaGVfcmF3X2NvbGxlY3QgKGN1cnJlbnRfcmVnY2FjaGUsIEFS
TV9MUl9SRUdOVU0sIChjaGFyICopICZncmVnc2V0cC0+cl9scik7CisKKworICBpZiAoQVJNX1BD
X1JFR05VTSA9PSByZWdubyB8fCAtMSA9PSByZWdubykKKyAgICByZWdjYWNoZV9yYXdfY29sbGVj
dCAoY3VycmVudF9yZWdjYWNoZSwgQVJNX1BDX1JFR05VTSwgKGNoYXIgKikgJmdyZWdzZXRwLT5y
X3BjKTsKKworICBpZiAoQVJNX1BTX1JFR05VTSA9PSByZWdubyB8fCAtMSA9PSByZWdubykKKyAg
ICB7CisgICAgICBpZiAoYXJtX2FwY3NfMzIpCisJcmVnY2FjaGVfcmF3X2NvbGxlY3QgKGN1cnJl
bnRfcmVnY2FjaGUsIEFSTV9QU19SRUdOVU0sIChjaGFyICopICZncmVnc2V0cC0+cl9jcHNyKTsK
KyAgICAgIGVsc2UKKwlyZWdjYWNoZV9yYXdfY29sbGVjdCAoY3VycmVudF9yZWdjYWNoZSwgQVJN
X1BTX1JFR05VTSwgKGNoYXIgKikgJmdyZWdzZXRwLT5yX3BjKTsKKyAgICB9Cit9CisKK3ZvaWQK
K2ZpbGxfZnByZWdzZXQgKGZwcmVnc2V0X3QgKmZwcmVnc2V0cCwgaW50IHJlZ25vKQoreworICBp
ZiAoLTEgPT0gcmVnbm8pCisgICAgeworICAgICAgIGludCByZWdudW07CisgICAgICAgZm9yIChy
ZWdudW0gPSBBUk1fRjBfUkVHTlVNOyByZWdudW0gPD0gQVJNX0Y3X1JFR05VTTsgcmVnbnVtKysp
CisgICAgICAgICByZWdjYWNoZV9yYXdfY29sbGVjdChjdXJyZW50X3JlZ2NhY2hlLCByZWdudW0s
IChjaGFyICopICZmcHJlZ3NldHAtPmZwcltyZWdudW0gLSBBUk1fRjBfUkVHTlVNXSk7CisgICAg
fQorICBlbHNlIGlmIChyZWdubyA+PSBBUk1fRjBfUkVHTlVNICYmIHJlZ25vIDw9IEFSTV9GN19S
RUdOVU0pCisgICAgcmVnY2FjaGVfcmF3X2NvbGxlY3QoY3VycmVudF9yZWdjYWNoZSwgcmVnbm8s
IChjaGFyICopICZmcHJlZ3NldHAtPmZwcltyZWdubyAtIEFSTV9GMF9SRUdOVU1dKTsKKworICBp
ZiAoQVJNX0ZQU19SRUdOVU0gPT0gcmVnbm8gfHwgLTEgPT0gcmVnbm8pCisgICAgcmVnY2FjaGVf
cmF3X2NvbGxlY3QgKGN1cnJlbnRfcmVnY2FjaGUsIEFSTV9GUFNfUkVHTlVNLCAoY2hhciAqKSAm
ZnByZWdzZXRwLT5mcHJfZnBzcik7Cit9CisKLS0tIDA3MDEyOS9zcmMvZ251L2Rpc3QvZ2RiNi9n
ZGIvYnJlYWtwb2ludC5jCTIwMDYtMDctMDIgMjA6MDE6MjUuMDAwMDAwMDAwIC0wNzAwCisrKyBu
ZXcvc3JjL2dudS9kaXN0L2dkYjYvZ2RiL2JyZWFrcG9pbnQuYwkyMDA2LTEwLTI1IDE1OjQ0OjUz
LjAwMDAwMDAwMCAtMDcwMApAQCAtNTI5OSw2ICs1Mjk5LDE2IEBACiAJCSAgdG9rID0gZW5kX3Rv
ayArIDE7CiAJCSAgdG1wdG9rID0gdG9rOwogCQkgIHRocmVhZCA9IHN0cnRvbCAodG9rLCAmdG9r
LCAwKTsKKworCQkvKgorCQkqcnBvcGFsaW46CisJCSp3ZSBuZWVkIHRvIGZpbmQgYWxsIHRocmVh
ZHMgaGVyZQorCQkqYmVjYXVzZSB3ZSBhcmUgbm90IGludGVyY2VwdGluZyB0aHJlYWQgY3JlYXRp
b24KKwkJKihsaW51eCBnZXQncyB0byBrbm93IHRocmVhZHMgd2hlbiB0aGV5IGFyZSBjcmVhdGVk
CisJCSpieSBob29raW5nIHB0aHJlYWRfY3JlYXRlKQorCQkqLworCQl0YXJnZXRfZmluZF9uZXdf
dGhyZWFkcyAoKTsKKwogCQkgIGlmICh0b2sgPT0gdG1wdG9rKQogCQkgICAgZXJyb3IgKF8oIkp1
bmsgYWZ0ZXIgdGhyZWFkIGtleXdvcmQuIikpOwogCQkgIGlmICghdmFsaWRfdGhyZWFkX2lkICh0
aHJlYWQpKQotLS0gMDcwMTI5L3NyYy9nbnUvZGlzdC9nZGI2L2dkYi9uYnNkLXRocmVhZC5jCTE5
NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyBuZXcvc3JjL2dudS9kaXN0L2dk
YjYvZ2RiL25ic2QtdGhyZWFkLmMJMjAwNi0xMi0yOSAxNjo1NTo1OC4wMDAwMDAwMDAgLTA4MDAK
QEAgLTAsMCArMSwxMDM4IEBACisvKiBUaHJlYWQgZGVidWdnaW5nIGJhY2stZW5kIGNvZGUgZm9y
IE5ldEJTRCwgZm9yIEdEQi4KKyAgIENvcHlyaWdodCAyMDAyCisgICBXYXNhYmkgU3lzdGVtcywg
SW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg
ICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9u
ZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgQm9z
dG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisKKyNpbmNsdWRlICJkZWZzLmgiCisKKyNp
bmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CisKKyNpbmNsdWRl
IDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8cHRocmVhZF9kYmcuaD4KKworI2luY2x1ZGUgInN5bXRh
Yi5oIgorI2luY2x1ZGUgInN5bWZpbGUuaCIKKyNpbmNsdWRlICJvYmpmaWxlcy5oIgorI2luY2x1
ZGUgInNvbGliLmgiCisjaW5jbHVkZSAiZ2RidGhyZWFkLmgiCisjaW5jbHVkZSAiYmZkLmgiCisj
aW5jbHVkZSAiZWxmLWJmZC5oIgorI2luY2x1ZGUgInRhcmdldC5oIgorI2luY2x1ZGUgImluZmVy
aW9yLmgiCisjaW5jbHVkZSAiZ2RiY21kLmgiCisjaW5jbHVkZSAiZ2RiY29yZS5oIgorCisjaW5j
bHVkZSA8bWFjaGluZS9yZWcuaD4KKworI2lmbmRlZiBIQVZFX0dSRUdTRVRfVAordHlwZWRlZiBz
dHJ1Y3QgcmVnIGdyZWdzZXRfdDsKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfRlBSRUdTRVRfVAor
dHlwZWRlZiBzdHJ1Y3QgZnByZWcgZnByZWdzZXRfdDsKKyNlbmRpZgorCisjaW5jbHVkZSAiZ3Jl
Z3NldC5oIgorI2luY2x1ZGUgInJlZ2NhY2hlLmgiCisKKyNpbmNsdWRlICJqYXZhLmgiCisKKy8q
IG5ic2RfdGhyZWFkX3ByZXNlbnQgaW5kaWNhdGVzIHRoYXQgbmV3X29iamZpbGUgaGFzIHNwb3R0
ZWQKKyAgIGxpYnB0aHJlYWQgYW5kIHRoYXQgcG9zdF9hdHRhY2goKSBvciBjcmVhdGVfaW5mZXJp
b3IoKSBzaG91bGQgZmlyZQorICAgdXAgdGhyZWFkIGRlYnVnZ2luZyBpZiBpdCBpc24ndCBhbHJl
YWR5IGFjdGl2ZS4gKi8KK3N0YXRpYyBpbnQgbmJzZF90aHJlYWRfcHJlc2VudCA9IDA7CisKKy8q
IG5ic2RfdGhyZWFkX2FjdGl2ZSBpbmRpY2F0ZXMgdGhhdCB0aHJlYWQgZGVidWdnaW5nIGlzIHVw
IGFuZCBydW5uaW5nLCBhbmQKKyAgIGluIHBhcnRpY3VsYXIgdGhhdCBtYWluX3RhIGFuZCBtYWlu
X3B0aWQgYXJlIHZhbGlkLiAqLworc3RhdGljIGludCBuYnNkX3RocmVhZF9hY3RpdmUgPSAwOwor
CisKK3N0YXRpYyBwdGlkX3QgbWFpbl9wdGlkOyAgICAgICAgICAgICAgICAvKiBSZWFsIHByb2Nl
c3MgSUQgKi8KKworc3RhdGljIHB0aWRfdCBjYWNoZWRfdGhyZWFkOworCitzdHJ1Y3QgdGFyZ2V0
X29wcyBuYnNkX3RocmVhZF9vcHM7CitzdGF0aWMgc3RydWN0IHRhcmdldF9vcHMgKnRhcmdldF9i
ZW5lYXRoOworCitzdHJ1Y3QgdGRfcHJvY19jYWxsYmFja3NfdCBuYnNkX3RocmVhZF9jYWxsYmFj
a3M7CisKK3N0YXRpYyBpbnQgY2hpbGRfc3VwcHJlc3NfcnVuPTA7CisKK3N0YXRpYyBwdGlkX3Qg
ZmluZF9hY3RpdmVfdGhyZWFkIFBBUkFNUyAoKHZvaWQpKTsKK3N0YXRpYyB2b2lkIG5ic2RfZmlu
ZF9uZXdfdGhyZWFkcyBQQVJBTVMgKCh2b2lkKSk7CisKKyNkZWZpbmUgR0VUX1BJRChwdGlkKSAg
ICAgICAgICAgcHRpZF9nZXRfcGlkIChwdGlkKQorI2RlZmluZSBHRVRfTFdQKHB0aWQpICAgICAg
ICAgICBwdGlkX2dldF9sd3AgKHB0aWQpCisjZGVmaW5lIEdFVF9USFJFQUQocHRpZCkgICAgICAg
IHB0aWRfZ2V0X3RpZCAocHRpZCkKKworI2RlZmluZSBJU19MV1AocHRpZCkgICAgICAgICAgICAo
R0VUX0xXUCAocHRpZCkgIT0gMCkKKyNkZWZpbmUgSVNfVEhSRUFEKHB0aWQpICAgICAgICAgKEdF
VF9USFJFQUQgKHB0aWQpICE9IDApCisKKyNkZWZpbmUgQlVJTERfTFdQKGx3cCwgcHRpZCkgICAg
cHRpZF9idWlsZCAoR0VUX1BJRChwdGlkKSwgbHdwLCAwKQorI2RlZmluZSBCVUlMRF9USFJFQUQo
dGlkLCBwdGlkKSBwdGlkX2J1aWxkIChHRVRfUElEKHB0aWQpLCAwLCB0aWQpCisKK3N0YXRpYyB0
ZF9wcm9jX3QgKm1haW5fdGE7CisKK3N0cnVjdCBzdHJpbmdfbWFwCisgIHsKKyAgICBpbnQgbnVt
OworICAgIGNoYXIgKnN0cjsKKyAgfTsKKworc3RhdGljIGNoYXIgKgordGRfZXJyX3N0cmluZyAo
aW50IGVycmNvZGUpCit7CisgIHN0YXRpYyBzdHJ1Y3Qgc3RyaW5nX21hcAorICAgIHRkX2Vycl90
YWJsZVtdID0KKyAgeworICAgIHtURF9FUlJfT0ssICJnZW5lcmljIFwiY2FsbCBzdWNjZWVkZWRc
IiJ9LAorICAgIHtURF9FUlJfRVJSLCAiZ2VuZXJpYyBlcnJvci4ifSwKKyAgICB7VERfRVJSX05P
U1lNLCAic3ltYm9sIG5vdCBmb3VuZCJ9LAorICAgIHtURF9FUlJfTk9PQkosICJubyBvYmplY3Qg
Y2FuIGJlIGZvdW5kIHRvIHNhdGlzZnkgcXVlcnkifSwKKyAgICB7VERfRVJSX0JBRFRIUkVBRCwg
InRocmVhZCBjYW4gbm90IGFuc3dlciByZXF1ZXN0In0sCisgICAge1REX0VSUl9JTlVTRSwgImRl
YnVnZ2luZyBpbnRlcmZhY2UgYWxyZWFkeSBpbiB1c2UgZm9yIHRoaXMgcHJvY2VzcyJ9LAorICAg
IHtURF9FUlJfTk9MSUIsICJwcm9jZXNzIGlzIG5vdCB1c2luZyBsaWJwdGhyZWFkIn0sCisgICAg
e1REX0VSUl9OT01FTSwgIm91dCBvZiBtZW1vcnkifSwKKyAgICB7VERfRVJSX0lPLCAicHJvY2Vz
cyBjYWxsYmFjayBlcnJvciJ9LAorICAgIHtURF9FUlJfSU5WQUwsICJpbnZhbGlkIGFyZ3VtZW50
In0sCisgIH07CisgIGNvbnN0IGludCB0ZF9lcnJfc2l6ZSA9IHNpemVvZiB0ZF9lcnJfdGFibGUg
LyBzaXplb2YgKHN0cnVjdCBzdHJpbmdfbWFwKTsKKyAgaW50IGk7CisgIHN0YXRpYyBjaGFyIGJ1
Zls5MF07CisKKyAgZm9yIChpID0gMDsgaSA8IHRkX2Vycl9zaXplOyBpKyspCisgICAgaWYgKHRk
X2Vycl90YWJsZVtpXS5udW0gPT0gZXJyY29kZSkKKyAgICAgIHJldHVybiB0ZF9lcnJfdGFibGVb
aV0uc3RyOworCisgIHNwcmludGYgKGJ1ZiwgIlVua25vd24gdGhyZWFkX2RiIGVycm9yIGNvZGU6
ICVkIiwgZXJyY29kZSk7CisKKyAgcmV0dXJuIGJ1ZjsKK30KKworLyoKKyAqcnBvcGFsaW46Cisg
KnVzZSB0YXJnZXRfYmVuZWF0aCBpbnN0ZWFkIG9mIGRlcHJlY2F0ZWRfY2hpbGRfb3BzCisgKi8K
K3ZvaWQKK25ic2RfdGhyZWFkX2luaXQgKHN0cnVjdCB0YXJnZXRfb3BzICp0YXJnZXQpCit7Cisg
IHRhcmdldF9iZW5lYXRoID0gdGFyZ2V0OworfQorCitzdGF0aWMgdm9pZAorbmJzZF90aHJlYWRf
YWN0aXZhdGUgKHZvaWQpCit7CisgIG5ic2RfdGhyZWFkX2FjdGl2ZSA9IDE7CisgIG1haW5fcHRp
ZCA9IGluZmVyaW9yX3B0aWQ7CisgIGNhY2hlZF90aHJlYWQgPSBtaW51c19vbmVfcHRpZDsKKyAg
bmJzZF9maW5kX25ld190aHJlYWRzICgpOworICBpbmZlcmlvcl9wdGlkID0gZmluZF9hY3RpdmVf
dGhyZWFkICgpOworfQorCitzdGF0aWMgdm9pZAorbmJzZF90aHJlYWRfZGVhY3RpdmF0ZSAodm9p
ZCkKK3sKKyAgdGRfY2xvc2UgKG1haW5fdGEpOworCisgIGluZmVyaW9yX3B0aWQgPSBtYWluX3B0
aWQ7CisgIG1haW5fcHRpZCA9IG1pbnVzX29uZV9wdGlkOworICBjYWNoZWRfdGhyZWFkID0gbWFp
bl9wdGlkOworICBuYnNkX3RocmVhZF9hY3RpdmUgPSAwOworICBuYnNkX3RocmVhZF9wcmVzZW50
ID0gMDsKKyAgaW5pdF90aHJlYWRfbGlzdCAoKTsKK30KKworc3RhdGljIHZvaWQKK25ic2RfdGhy
ZWFkX2F0dGFjaCAoY2hhciAqYXJncywgaW50IGZyb21fdHR5KQoreworCisgIGlmIChuYnNkX3Ro
cmVhZF9wcmVzZW50ICYmICFuYnNkX3RocmVhZF9hY3RpdmUpCisgICAgcHVzaF90YXJnZXQoJm5i
c2RfdGhyZWFkX29wcyk7CisKKyAgdGFyZ2V0X2JlbmVhdGgtPnRvX2F0dGFjaCAoYXJncywgZnJv
bV90dHkpOworCisgIC8qIHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIGFjdGl2YXRlLCBidXQg
aXNuJ3QuIExldCBpdCBoYXBwZW4gaW4KKyAgICAgbmJzZF90aHJlYWRfcG9zdF9hdHRhY2goKSwg
YWZ0ZXIgYSB3YWl0IGhhcyBvY2N1cnJlZC4gKi8KK30KKworc3RhdGljIHZvaWQKK25ic2RfdGhy
ZWFkX3Bvc3RfYXR0YWNoIChpbnQgcGlkKQoreworICB0YXJnZXRfYmVuZWF0aC0+dG9fcG9zdF9h
dHRhY2ggKHBpZCk7CisKKyAgaWYgKG5ic2RfdGhyZWFkX3ByZXNlbnQgJiYgIW5ic2RfdGhyZWFk
X2FjdGl2ZSkKKyAgICBuYnNkX3RocmVhZF9hY3RpdmF0ZSAoKTsKK30KKworCisvKiBUYWtlIGEg
cHJvZ3JhbSBwcmV2aW91c2x5IGF0dGFjaGVkIHRvIGFuZCBkZXRhY2hlcyBpdC4KKyAgIFRoZSBw
cm9ncmFtIHJlc3VtZXMgZXhlY3V0aW9uIGFuZCB3aWxsIG5vIGxvbmdlciBzdG9wCisgICBvbiBz
aWduYWxzLCBldGMuICBXZSdkIGJldHRlciBub3QgaGF2ZSBsZWZ0IGFueSBicmVha3BvaW50cwor
ICAgaW4gdGhlIHByb2dyYW0gb3IgaXQnbGwgZGllIHdoZW4gaXQgaGl0cyBvbmUuICBGb3IgdGhp
cworICAgdG8gd29yaywgaXQgbWF5IGJlIG5lY2Vzc2FyeSBmb3IgdGhlIHByb2Nlc3MgdG8gaGF2
ZSBiZWVuCisgICBwcmV2aW91c2x5IGF0dGFjaGVkLiAgSXQgKm1pZ2h0KiB3b3JrIGlmIHRoZSBw
cm9ncmFtIHdhcworICAgc3RhcnRlZCB2aWEgdGhlIG5vcm1hbCBwdHJhY2UgKFBUUkFDRV9UUkFD
RU1FKS4gICovCisKK3N0YXRpYyB2b2lkCituYnNkX3RocmVhZF9kZXRhY2ggKGNoYXIgKmFyZ3Ms
IGludCBmcm9tX3R0eSkKK3sKKyAgbmJzZF90aHJlYWRfZGVhY3RpdmF0ZSAoKTsKKyAgdW5wdXNo
X3RhcmdldCAoJm5ic2RfdGhyZWFkX29wcyk7CisgIC8qIE9yZGluYWlybHksIGdkYiBjYWNoZXMg
c29saWIgaW5mb3JtYXRpb24sIGJ1dCB0aGlzIG1lYW5zIHRoYXQgaXQKKyAgICAgd29uJ3QgY2Fs
bCB0aGUgbmV3X29iZmlsZSBob29rIG9uIGEgcmVhdHRhY2guIENsZWFyIHRoZSBzeW1ib2wgZmls
ZQorICAgICBjYWNoZSBzbyB0aGF0IGF0dGFjaCAtPiBkZXRhY2ggLT4gYXR0YWNoIHdvcmtzLiAq
LworICBjbGVhcl9zb2xpYigpOworICBzeW1ib2xfZmlsZV9jbGVhcigwKTsKKyAgdGFyZ2V0X2Jl
bmVhdGgtPnRvX2RldGFjaCAoYXJncywgZnJvbV90dHkpOworfQorc3RhdGljIGludCBuc3VzcDsK
K3N0YXRpYyBpbnQgbnN1c3BhbGxvYzsKK3N0YXRpYyB0ZF90aHJlYWRfdCAqKnN1c3A7CisKK3N0
YXRpYyBpbnQKK3RocmVhZF9yZXN1bWVfc3VzcGVuZF9jYiAodGRfdGhyZWFkX3QgKnRoLCB2b2lk
ICphcmcpCit7CisgIGludCB2YWw7CisgIHB0aWRfdCAqcHQgPSBhcmc7CisgIHRkX3RocmVhZF9p
bmZvX3QgdGk7CisKKyAgaWYgKHRkX3Rocl9pbmZvICh0aCwgJnRpKSAhPSAwKQorICAgICAgcmV0
dXJuIC0xOworCisgIGlmICgodGkudGhyZWFkX2lkICE9IEdFVF9USFJFQUQgKCpwdCkpICYmCisg
ICAgICAodGkudGhyZWFkX3R5cGUgPT0gVERfVFlQRV9VU0VSKSAmJgorICAgICAgKHRpLnRocmVh
ZF9zdGF0ZSAhPSBURF9TVEFURV9TVVNQRU5ERUQpICYmCisgICAgICAodGkudGhyZWFkX3N0YXRl
ICE9IFREX1NUQVRFX1pPTUJJRSkpCisgICAgeworICAgICAgdmFsID0gdGRfdGhyX3N1c3BlbmQo
dGgpOworICAgICAgaWYgKHZhbCAhPSAwKQorICAgICAgICBlcnJvciAoInRocmVhZF9yZXN1bWVf
c3VzcGVuZF9jYjogdGRfdGhyX3N1c3BlbmQoJXApOiAlcyIsIHRoLAorICAgICAgICAgICAgICAg
dGRfZXJyX3N0cmluZyAodmFsKSk7CisKKyAgICAgIGlmIChuc3VzcCA9PSBuc3VzcGFsbG9jKQor
ICAgICAgICB7CisgICAgICAgICAgaWYgKG5zdXNwYWxsb2MgPT0gMCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgbnN1c3BhbGxvYyA9IDMyOworICAgICAgICAgICAgICBzdXNwID0gbWFs
bG9jIChuc3VzcGFsbG9jICogc2l6ZW9mKHRkX3RocmVhZF90ICopKTsKKyAgICAgICAgICAgICAg
aWYgKHN1c3AgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBlcnJvciAoInRocmVhZF9yZXN1bWVf
c3VzcGVuZF9jYjogb3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzdGF0aWMgdGRfdGhyZWFkX3QgKipu
ZXdzdXNwOworICAgICAgICAgICAgICBuc3VzcGFsbG9jICo9IDI7CisgICAgICAgICAgICAgIG5l
d3N1c3AgPSByZWFsbG9jIChzdXNwLCBuc3VzcGFsbG9jICogc2l6ZW9mKHRkX3RocmVhZF90ICop
KTsKKyAgICAgICAgICAgICAgaWYgKG5ld3N1c3AgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBl
cnJvciAoInRocmVhZF9yZXN1bWVfc3VzcGVuZF9jYjogb3V0IG9mIG1lbW9yeVxuIik7CisgICAg
ICAgICAgICAgIHN1c3AgPSBuZXdzdXNwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICBzdXNwW25zdXNwXSA9IHRoOworICAgICAgbnN1c3ArKzsKKyAgICB9CisKKyAgcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyB2b2lkCituYnNkX3RocmVhZF9yZXN1bWUgKHB0aWRfdCBwdGlkLCBpbnQg
c3RlcCwgZW51bSB0YXJnZXRfc2lnbmFsIHNpZ25vKQoreworICAvKiBJZiBhIHBhcnRpY3VsYXIg
dGhyZWFkIGlzIHNwZWNpZmllZCwgdGhlbiBnZGIgd2FudHMgdG8gcmVzdW1lIG9yCisgICAgIHN0
ZXAganVzdCB0aGF0IHRocmVhZC4gSWYgaXQgaXNuJ3Qgb24gYSBwcm9jZXNzb3IsIHRoZW4gaXQg
bmVlZHMKKyAgICAgdG8gYmUgcHV0IG9uIG9uZSwgYW5kIG5vdGhpbmcgZWxzZSBjYW4gYmUgb24g
dGhlIHJ1bm5hYmxlIGxpc3QuCisgICAgIFhYWCBJZiBHREIgYXNrcyB1cyB0byBzdGVwIGEgTFdQ
IHJhdGhlciB0aGFuIGEgdGhyZWFkLCB0aGVyZQorICAgICBpc24ndCBhbnl0aGluZyB3ZSBjYW4g
ZG8gYnV0IHBhc3MgaXQgZG93biB0byB0aGUgcHRyYWNlIGNhbGw7CisgICAgIGdpdmVuIHRoZSBm
bGV4aWJpbGl0eSBvZiB0aGUgTFdQLXRvLXRocmVhZCBtYXBwaW5nLCB0aGlzIG1pZ2h0IG9yCisg
ICAgIG1pZ2h0IG5vdCBhY2NvbXBsaXNoIHdoYXQgdGhlIHVzZXIgd2FudGVkLiAqLworICAgICAg
CisvKnJwb3BhbGluOiBmbGF3ZWQgcGVyLXRocmVhZCBzdXNwZW5kLXJlc3VtZSovCisjaWYgMAor
ICBpZiAoR0VUX1BJRCAocHRpZCkgIT0gLTEgJiYgSVNfVEhSRUFEIChwdGlkKSkKKyAgICB7Cisg
ICAgICBpbnQgdmFsOworCXZhbCA9IHRkX3Rocl9pdGVyIChtYWluX3RhLCB0aHJlYWRfcmVzdW1l
X3N1c3BlbmRfY2IsICZwdGlkKTsKKyAgICAgIGlmICh2YWwgIT0gMCkKKyAgICAgICAgZXJyb3Ig
KCJuYnNkX3RocmVhZF9yZXN1bWUgdGRfdGhyX2l0ZXI6ICVzIiwgdGRfZXJyX3N0cmluZyAodmFs
KSk7CisKKyAgICAgICAgdGFyZ2V0X2JlbmVhdGgtPnRvX3Jlc3VtZSAocHRpZCwgc3RlcCwgc2ln
bm8pOworCisgICAgICAvKiBjYW4ndCB1bi1zdXNwZW5kIGp1c3QgeWV0LCBjaGlsZCBtYXkgbm90
IGJlIHN0b3BwZWQgKi8KKyAgICB9CisgIGVsc2UKKyNlbmRpZgorICAgdGFyZ2V0X2JlbmVhdGgt
PnRvX3Jlc3VtZSAocHRpZCwgc3RlcCwgc2lnbm8pOworCisgIGNhY2hlZF90aHJlYWQgPSBtaW51
c19vbmVfcHRpZDsKK30KKworCitzdGF0aWMgdm9pZAorbmJzZF90aHJlYWRfdW5zdXNwZW5kKHZv
aWQpCit7CisgIGludCBpLCB2YWw7CisKKyAgZm9yIChpID0gMDsgaSA8IG5zdXNwOyBpKyspCisg
ICAgeworICAgICAgdmFsID0gdGRfdGhyX3Jlc3VtZShzdXNwW2ldKTsKKyAgICAgIGlmICh2YWwg
IT0gMCkKKyAgICAgICAgZXJyb3IgKCJuYnNkX3RocmVhZF91bnN1c3BlbmQ6IHRkX3Rocl9yZXN1
bWUoJXApOiAlcyIsIHN1c3BbaV0sCisgICAgICAgICAgICAgICB0ZF9lcnJfc3RyaW5nICh2YWwp
KTsKKyAgICB9CisgIG5zdXNwID0gMDsKK30KKworc3RhdGljIHB0aWRfdAorZmluZF9hY3RpdmVf
dGhyZWFkICh2b2lkKQoreworICBpbnQgdmFsOworICB0ZF90aHJlYWRfdCAqdGhyZWFkOworICB0
ZF90aHJlYWRfaW5mb190IHRpOworICB0ZF90aHJlYWRfdCAqdGhyZWFkcDsKKyAgc3RydWN0IHB0
cmFjZV9sd3BpbmZvIHBsOworCisgIGlmICghcHRpZF9lcXVhbCAoY2FjaGVkX3RocmVhZCwgbWlu
dXNfb25lX3B0aWQpKQorICAgIHJldHVybiBjYWNoZWRfdGhyZWFkOworCisgICAgICBwbC5wbF9s
d3BpZCA9IDA7CisgICAgICB2YWwgPSBwdHJhY2UgKFBUX0xXUElORk8sIEdFVF9QSUQoaW5mZXJp
b3JfcHRpZCksICh2b2lkICopJnBsLCBzaXplb2YocGwpKTsKKyAgICAgIHdoaWxlICgodmFsICE9
IC0xKSAmJiAocGwucGxfbHdwaWQgIT0gMCkgJiYKKyAgICAgICAgICAgICAocGwucGxfZXZlbnQg
IT0gUExfRVZFTlRfU0lHTkFMKSkKKyAgICAgICAgdmFsID0gcHRyYWNlIChQVF9MV1BJTkZPLCBH
RVRfUElEKGluZmVyaW9yX3B0aWQpLCAodm9pZCAqKSZwbCwgc2l6ZW9mKHBsKSk7CisKKy8qCisg
KnJwb3BhbGluOgorICpvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBkaWRuJ3Qgc2hvdyB0aGUgY29y
cmVjdAorICpjdXJyZW50IHRocmVhZCBiZWNhdXNlIG9mIHRoaXM7IGZpeCBpdCBieSBidWlsZGlu
ZyAKKyAqYSBwdGlkIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgdGhyZWFkIGlkIAorICovCisKKyAg
aWYgKHRkX21hcF9sd3AydGhyIChtYWluX3RhLCBwbC5wbF9sd3BpZCwgJnRocmVhZHApID09IDAp
CisgICAgIGlmICh0ZF90aHJfaW5mbyAodGhyZWFkcCwgJnRpKSA9PSAwKQorICAgICAgICByZXR1
cm4gKGNhY2hlZF90aHJlYWQgPSBCVUlMRF9USFJFQUQgKHRpLnRocmVhZF9pZCwgaW5mZXJpb3Jf
cHRpZCkpOworCisgIHJldHVybiBjYWNoZWRfdGhyZWFkID0gQlVJTERfTFdQIChwbC5wbF9sd3Bp
ZCwgbWFpbl9wdGlkKTsKK30KKworCisvKiBXYWl0IGZvciBhbnkgdGhyZWFkcyB0byBzdG9wLiAg
V2UgbWF5IGhhdmUgdG8gY29udmVydCBQSUQgZnJvbSBhIHRocmVhZCBpZAorICAgdG8gYSBMV1Ag
aWQsIGFuZCB2aWNlIHZlcnNhIG9uIHRoZSB3YXkgb3V0LiAgKi8KK3N0YXRpYyBwdGlkX3QKK25i
c2RfdGhyZWFkX3dhaXQgKHB0aWRfdCBwdGlkLCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKm91
cnN0YXR1cykKK3sKKyAgcHRpZF90IHJ0bnZhbDsKKyAgcnRudmFsID0gdGFyZ2V0X2JlbmVhdGgt
PnRvX3dhaXQgKHB0aWQsIG91cnN0YXR1cyk7CisvKnJwb3BhbGluOiBubyBuZWVkIGZvciBub3cq
LworIC8vIG5ic2RfdGhyZWFkX3Vuc3VzcGVuZCgpOworCisgIGlmIChuYnNkX3RocmVhZF9hY3Rp
dmUgJiYgKG91cnN0YXR1cy0+a2luZCAhPSBUQVJHRVRfV0FJVEtJTkRfRVhJVEVEKSkKKyAgICB7
CisgICAgICBydG52YWwgPSBmaW5kX2FjdGl2ZV90aHJlYWQgKCk7CisgICAgICBpZiAocHRpZF9l
cXVhbCAocnRudmFsLCBtaW51c19vbmVfcHRpZCkpCisgICAgICAgIGVycm9yICgiTm8gYWN0aXZl
IHRocmVhZCFcbiIpOworICAgICAgaWYgKCFpbl90aHJlYWRfbGlzdCAocnRudmFsKSkKKyAgICAg
ICAgYWRkX3RocmVhZCAocnRudmFsKTsKKyAgICB9CisgIHJldHVybiBydG52YWw7Cit9Cit2b2lk
CituYnNkX3RocmVhZF9mZXRjaF9yZWdpc3RlcnMgKGludCByZWdubykKK3sKKyAgdGRfdGhyZWFk
X3QgKnRocmVhZDsKKyAgZ3JlZ3NldF90IGdyZWdzOworICBmcHJlZ3NldF90IGZwcmVnczsKKyAg
aW50IHZhbDsKKyAgc3RydWN0IGNsZWFudXAgKm9sZF9jaGFpbjsKKyAgb2xkX2NoYWluID0gc2F2
ZV9pbmZlcmlvcl9wdGlkICgpOworCisgIGlmIChuYnNkX3RocmVhZF9hY3RpdmUgJiYgSVNfVEhS
RUFEIChpbmZlcmlvcl9wdGlkKSkKKyAgICB7CisgICAgICBpZiAoKHZhbCA9IHRkX21hcF9pZDJ0
aHIgKG1haW5fdGEsIEdFVF9USFJFQUQgKGluZmVyaW9yX3B0aWQpLCAmdGhyZWFkKSkgIT0gMCkK
KyAgICAgICAgZXJyb3IgKCJuYnNkX3RocmVhZF9mZXRjaF9yZWdpc3RlcnM6IHRkX21hcF9pZDJ0
aHI6ICVzXG4iLAorICAgICAgICAgICAgICAgdGRfZXJyX3N0cmluZyAodmFsKSk7CisgICAgICBp
ZiAoKHZhbCA9IHRkX3Rocl9nZXRyZWdzICh0aHJlYWQsIDAsICZncmVncykpICE9IDApCisgICAg
ICAgIGVycm9yICgibmJzZF90aHJlYWRfZmV0Y2hfcmVnaXN0ZXJzOiB0ZF90aHJfZ2V0cmVnczog
JXNcbiIsCisgICAgICAgICAgICAgICB0ZF9lcnJfc3RyaW5nICh2YWwpKTsKKwlzdXBwbHlfZ3Jl
Z3NldCAoJmdyZWdzKTsKKyAgICAgIGlmICgodmFsID0gdGRfdGhyX2dldHJlZ3MgKHRocmVhZCwg
MSwgJmZwcmVncykpID09IDApOworCSAgICAgIHN1cHBseV9mcHJlZ3NldCAoJmZwcmVncyk7CisK
KyAgICB9CisgIGVsc2UKKyAgICAgICAgdGFyZ2V0X2JlbmVhdGgtPnRvX2ZldGNoX3JlZ2lzdGVy
cyAocmVnbm8pOworCisgIGRvX2NsZWFudXBzIChvbGRfY2hhaW4pOworfQorCit2b2lkCituYnNk
X3RocmVhZF9zdG9yZV9yZWdpc3RlcnMgKGludCByZWdubykKK3sKKyAgdGRfdGhyZWFkX3QgKnRo
cmVhZDsKKyAgZ3JlZ3NldF90IGdyZWdzOworICBmcHJlZ3NldF90IGZwcmVnczsKKyAgaW50IHZh
bDsKKworICBpZiAobmJzZF90aHJlYWRfYWN0aXZlICYmIElTX1RIUkVBRCAoaW5mZXJpb3JfcHRp
ZCkpCisgICAgeworICAgICAgdmFsID0gdGRfbWFwX2lkMnRociAobWFpbl90YSwgR0VUX1RIUkVB
RCAoaW5mZXJpb3JfcHRpZCksICZ0aHJlYWQpOworICAgICAgaWYgKHZhbCAhPSAwKQorICAgICAg
ICBlcnJvciAoIm5ic2RfdGhyZWFkX3N0b3JlX3JlZ2lzdGVyczogdGRfbWFwX2lkMnRocjogJXNc
biIsCisgICAgICAgICAgICAgIHRkX2Vycl9zdHJpbmcgKHZhbCkpOworCisgICAgIGZpbGxfZ3Jl
Z3NldCAoJmdyZWdzLCAtMSk7CisgICAgIGZpbGxfZnByZWdzZXQgKCZmcHJlZ3MsIC0xKTsKKwor
CisgICAgICB2YWwgPSB0ZF90aHJfc2V0cmVncyAodGhyZWFkLCAwLCAmZ3JlZ3MpOworICAgICAg
aWYgKHZhbCAhPSAwKQorICAgICAgICBlcnJvciAoIm5ic2RfdGhyZWFkX3N0b3JlX3JlZ2lzdGVy
czogdGRfdGhyX3NldHJlZ3M6ICVzXG4iLAorICAgICAgICAgICAgICB0ZF9lcnJfc3RyaW5nICh2
YWwpKTsKKyAgICAgIHZhbCA9IHRkX3Rocl9zZXRyZWdzICh0aHJlYWQsIDEsICZmcHJlZ3MpOwor
ICAgICAgaWYgKHZhbCAhPSAwKQorICAgICAgICBlcnJvciAoIm5ic2RfdGhyZWFkX3N0b3JlX3Jl
Z2lzdGVyczogdGRfdGhyX3NldHJlZ3M6ICVzXG4iLAorICAgICAgICAgICAgICB0ZF9lcnJfc3Ry
aW5nICh2YWwpKTsKKyAgICB9CisgIGVsc2UKKyAgICAgICAgdGFyZ2V0X2JlbmVhdGgtPnRvX3N0
b3JlX3JlZ2lzdGVycyAocmVnbm8pOworfQorCisvKgorICpycG9wYWxpbjoKKyAqbmV3IGdkYiBh
cmNoaXRlY3R1cmUgbmVlZHMgdG9feGZlcl9wYXJ0aWFsCisgKi8KK3N0YXRpYyBMT05HRVNUCitu
YnNkX3hmZXJfcGFydGlhbCAoc3RydWN0IHRhcmdldF9vcHMgKm9wcywgZW51bSB0YXJnZXRfb2Jq
ZWN0IG9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFubmV4LCBn
ZGJfYnl0ZSAqcmVhZGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdkYl9ieXRl
ICp3cml0ZWJ1ZiwgVUxPTkdFU1Qgb2Zmc2V0LCBMT05HRVNUIGxlbikKK3sKKworICByZXR1cm4g
dGFyZ2V0X2JlbmVhdGgtPnRvX3hmZXJfcGFydGlhbCAob3BzLCBvYmplY3QsIGFubmV4LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGJ1Ziwgd3JpdGVidWYs
IG9mZnNldCwgbGVuKTsKKworfQorCisvKiBDbGVhbiB1cCBhZnRlciB0aGUgaW5mZXJpb3IgZGll
cy4gICovCisKK3N0YXRpYyB2b2lkCituYnNkX3RocmVhZF9tb3Vybl9pbmZlcmlvciAodm9pZCkK
K3sKKworICBpZiAobmJzZF90aHJlYWRfYWN0aXZlKQorICAgIG5ic2RfdGhyZWFkX2RlYWN0aXZh
dGUgKCk7CisKKyAgdW5wdXNoX3RhcmdldCAoJm5ic2RfdGhyZWFkX29wcyk7CisgIHRhcmdldF9i
ZW5lYXRoLT50b19tb3Vybl9pbmZlcmlvciAoKTsKKworfQorCisKKworLyogQ29udmVydCBhIHB0
aWQgdG8gcHJpbnRhYmxlIGZvcm0uICovCisKK2NoYXIgKgorbmJzZF9waWRfdG9fc3RyIChwdGlk
X3QgcHRpZCkKK3sKKyAgc3RhdGljIGNoYXIgYnVmWzEwMF07CisgIHRkX3RocmVhZF90ICp0aDsK
KyAgY2hhciBuYW1lWzMyXTsKKyAgaWYgKChHRVRfVEhSRUFEKHB0aWQpID09IDApICYmCisgICAg
ICAoR0VUX0xXUChwdGlkKSA9PSAwKSAmJgorICAgICAgKG5ic2RfdGhyZWFkX2FjdGl2ZSA9PSAw
KSkKKyAgICBzcHJpbnRmIChidWYsICJwcm9jZXNzICVkIiwgR0VUX1BJRCAocHRpZCkpOworICBl
bHNlIGlmIChJU19USFJFQUQgKHB0aWQpKQorICAgIHsKKyAgICAgIGlmICgodGRfbWFwX2lkMnRo
ciAobWFpbl90YSwgR0VUX1RIUkVBRCAocHRpZCksICZ0aCkgPT0gMCkgJiYKKyAgICAgICAgICAo
dGRfdGhyX2dldG5hbWUgKHRoLCBuYW1lLCAzMikgPT0gMCkpCisgICAgICAgIHNwcmludGYgKGJ1
ZiwgIlRocmVhZCAlbGQgKCVzKSIsIEdFVF9USFJFQUQgKHB0aWQpLCBuYW1lKTsKKyAgICAgIGVs
c2UKKyAgICAgICAgc3ByaW50ZiAoYnVmLCAiVGhyZWFkICVsZCIsIEdFVF9USFJFQUQgKHB0aWQp
KTsKKyAgICB9CisgIGVsc2UKKyAgaWYgKHRhcmdldF9iZW5lYXRoLT50b19waWRfdG9fc3RyIChw
dGlkKSkKKyAgICAgIHJldHVybiB0YXJnZXRfYmVuZWF0aC0+dG9fcGlkX3RvX3N0ciAocHRpZCk7
CisKKyAgcmV0dXJuIGJ1ZjsKK30KKworLyogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuZXZl
ciBhIG5ldyBzeW1ib2wgdGFibGUgaXMgcmVhZCBpbiwgb3Igd2hlbiBhbGwKKyAgIHN5bWJvbCB0
YWJsZXMgYXJlIHJlbW92ZWQuICBsaWJ0aHJlYWRfZGIgY2FuIG9ubHkgYmUgaW5pdGlhbGl6ZWQg
d2hlbiBpdAorICAgZmluZHMgdGhlIHJpZ2h0IHZhcmlhYmxlcyBpbiBsaWJ0aHJlYWQuc28uICBT
aW5jZSBpdCdzIGEgc2hhcmVkIGxpYnJhcnksCisgICB0aG9zZSB2YXJpYWJsZXMgZG9uJ3Qgc2hv
dyB1cCB1bnRpbCB0aGUgbGlicmFyeSBnZXRzIG1hcHBlZCBhbmQgdGhlIHN5bWJvbAorICAgdGFi
bGUgaXMgcmVhZCBpbi4gICovCisKKy8qIFRoaXMgbmV3X29iamZpbGUgZXZlbnQgaXMgbm93IG1h
bmFnZWQgYnkgYSBjaGFpbmVkIGZ1bmN0aW9uIHBvaW50ZXIuCisgKiBJdCBpcyB0aGUgY2FsbGVl
J3MgcmVzcG9uc2FiaWxpdHkgdG8gY2FsbCB0aGUgbmV4dCBjbGllbnQgb24gdGhlIGNoYWluLgor
ICovCisKKy8qIFNhdmVkIHBvaW50ZXIgdG8gcHJldmlvdXMgb3duZXIgb2YgdGhlIG5ld19vYmpm
aWxlIGV2ZW50LiAqLworc3RhdGljIHZvaWQgKCp0YXJnZXRfbmV3X29iamZpbGVfY2hhaW4pIFBB
UkFNUyAoKHN0cnVjdCBvYmpmaWxlICopKTsKKwordm9pZAorbmJzZF90aHJlYWRfbmV3X29iamZp
bGUgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKQoreworICBpbnQgdmFsOworCisgIGlmICghb2Jq
ZmlsZSkKKyAgICB7CisgICAgICBuYnNkX3RocmVhZF9hY3RpdmUgPSAwOworICAgICAgZ290byBx
dWl0OworICAgIH0KKworICAvKiBkb24ndCBkbyBhbnl0aGluZyBpZiBpbml0IGZhaWxlZCAqLwor
ICBpZiAoIWNoaWxkX3N1cHByZXNzX3J1bikKKyAgICBnb3RvIHF1aXQ7CisKKyAgLyogRG9uJ3Qg
ZG8gYW55dGhpbmcgaWYgd2UndmUgYWxyZWFkeSBmaXJlZCB1cCB0aGUgZGVidWdnaW5nIGxpYnJh
cnkgKi8KKyAgaWYgKG5ic2RfdGhyZWFkX2FjdGl2ZSkKKyAgICBnb3RvIHF1aXQ7CisKKyAgLyog
Tm93LCBpbml0aWFsaXplIHRoZSB0aHJlYWQgZGVidWdnaW5nIGxpYnJhcnkuICBUaGlzIG5lZWRz
IHRvIGJlCisgICAgIGRvbmUgYWZ0ZXIgdGhlIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvY2F0ZWQg
YmVjYXVzZSBpdCBuZWVkcworICAgICBpbmZvcm1hdGlvbiBmcm9tIHRoZSB1c2VyJ3MgdGhyZWFk
IGxpYnJhcnkuICAqLworICB2YWwgPSB0ZF9vcGVuICgmbmJzZF90aHJlYWRfY2FsbGJhY2tzLCBO
VUxMLCAmbWFpbl90YSk7CisgIGlmICh2YWwgPT0gVERfRVJSX05PTElCKQorICAgIGdvdG8gcXVp
dDsKKyAgZWxzZSBpZiAodmFsICE9IDApCisgICAgeworICAgICAgd2FybmluZyAoIm5ic2RfdGhy
ZWFkX25ld19vYmpmaWxlOiB0ZF9vcGVuOiAlcyIsIHRkX2Vycl9zdHJpbmcgKHZhbCkpOworICAg
ICAgZ290byBxdWl0OworICAgIH0KKworICBuYnNkX3RocmVhZF9wcmVzZW50ID0gMTsKKworICBp
ZiAoIXB0aWRfZXF1YWwgKGluZmVyaW9yX3B0aWQsIG51bGxfcHRpZCkpCisgICAgeworICAgICAg
cHVzaF90YXJnZXQgKCZuYnNkX3RocmVhZF9vcHMpOworICAgICAgbmJzZF90aHJlYWRfYWN0aXZh
dGUoKTsKKyAgICB9CisKKyBxdWl0OgorICAvKiBDYWxsIHByZWRlY2Vzc29yIG9uIGNoYWluLCBp
ZiBhbnkuICovCisgIGlmICh0YXJnZXRfbmV3X29iamZpbGVfY2hhaW4pCisgICAgdGFyZ2V0X25l
d19vYmpmaWxlX2NoYWluIChvYmpmaWxlKTsKK30KKworc3RhdGljIGludAorbmJzZF90aHJlYWRf
YWxpdmUgKHB0aWRfdCBwdGlkKQoreworICB0ZF90aHJlYWRfdCAqdGg7CisgIHRkX3RocmVhZF9p
bmZvX3QgdGk7CisKKyAgaWYgKG5ic2RfdGhyZWFkX2FjdGl2ZSkKKyAgICB7CisgICAgICBpZiAo
SVNfVEhSRUFEIChwdGlkKSkKKyAgICAgICAgeworICAgICAgICAgIGlmICh0ZF9tYXBfaWQydGhy
IChtYWluX3RhLCBHRVRfVEhSRUFEIChwdGlkKSwgJnRoKSA9PSAwKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAvKiBUaHJlYWQgZm91bmQgKi8KKyAgICAgICAgICAgICAgaWYgKCh0ZF90
aHJfaW5mbyAodGgsICZ0aSkgPT0gMCkgJiYKKyAgICAgICAgICAgICAgICAgICh0aS50aHJlYWRf
c3RhdGUgIT0gVERfU1RBVEVfWk9NQklFKSAmJgorICAgICAgICAgICAgICAgICAgKHRpLnRocmVh
ZF90eXBlICE9IFREX1RZUEVfU1lTVEVNKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoSVNfTFdQIChwdGlkKSkKKyAg
ICAgICAgeworICAgICAgICAgIHN0cnVjdCBwdHJhY2VfbHdwaW5mbyBwbDsKKyAgICAgICAgICBw
bC5wbF9sd3BpZCA9IEdFVF9MV1AgKHB0aWQpOworICAgICAgICAgIGlmIChwdHJhY2UgKFBUX0xX
UElORk8sIEdFVF9QSUQgKHB0aWQpLCAodm9pZCAqKSZwbCwgc2l6ZW9mKHBsKSkgPT0gLTEpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4g
MTsKKyAgICAgICAgfQorICAgIH0KKworICBpZiAodGFyZ2V0X2JlbmVhdGgtPnRvX3RocmVhZF9h
bGl2ZSkKKyAgICByZXR1cm4gdGFyZ2V0X2JlbmVhdGgtPnRvX3RocmVhZF9hbGl2ZShwdGlkKTsK
KyAgcmV0dXJuIDA7CisKK30KKworCisvKiBXb3JrZXIgYmVlIGZvciBmaW5kX25ld190aHJlYWRz
CisgICBDYWxsYmFjayBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIG9uY2UgcGVyIFVTRVIgdGhy
ZWFkIChpLmUuLCBub3QKKyAgIGtlcm5lbCkgdGhyZWFkLiAqLworCitzdGF0aWMgaW50CituYnNk
X2ZpbmRfbmV3X3RocmVhZHNfY2FsbGJhY2sgKHRkX3RocmVhZF90ICp0aCwgdm9pZCAqaWdub3Jl
ZCkKK3sKKyAgdGRfdGhyZWFkX2luZm9fdCB0aTsKKyAgcHRpZF90IHB0aWQ7CisKKyAgaWYgKHRk
X3Rocl9pbmZvICh0aCwgJnRpKSAhPSAwKQorICAgICAgcmV0dXJuIC0xOworCisgIHB0aWQgPSBC
VUlMRF9USFJFQUQgKHRpLnRocmVhZF9pZCwgbWFpbl9wdGlkKTsKKyAgaWYgKHRpLnRocmVhZF90
eXBlID09IFREX1RZUEVfVVNFUiAmJgorICAgICAgdGkudGhyZWFkX3N0YXRlICE9IFREX1NUQVRF
X0JMT0NLRUQgJiYKKyAgICAgIHRpLnRocmVhZF9zdGF0ZSAhPSBURF9TVEFURV9aT01CSUUgJiYK
KyAgICAgICFpbl90aHJlYWRfbGlzdCAocHRpZCkpCisgICAgYWRkX3RocmVhZCAocHRpZCk7CisK
KyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCituYnNkX2ZpbmRfbmV3X3RocmVhZHMgKHZv
aWQpCit7CisgIGludCByZXR2YWw7CisgIHB0aWRfdCBwdGlkOworICB0ZF90aHJlYWRfdCAqdGhy
ZWFkOworICBzdHJ1Y3QgcHRyYWNlX2x3cGluZm8gcGw7CisKKyAgaWYgKG5ic2RfdGhyZWFkX2Fj
dGl2ZSA9PSAwKQorICAgICAgICAgIHJldHVybjsKKworICAvKiBkb24ndCBkbyBhbnl0aGluZyBp
ZiBpbml0IGZhaWxlZCB0byByZXNvbHZlIHRoZSBsaWJ0aHJlYWRfZGIgbGlicmFyeSAqLworICBp
ZiAoIWNoaWxkX3N1cHByZXNzX3J1bikKKyAgICByZXR1cm47CisKKyAgaWYgKHB0aWRfZXF1YWwg
KGluZmVyaW9yX3B0aWQsIG1pbnVzX29uZV9wdGlkKSkKKyAgICB7CisgICAgICBwcmludGZfZmls
dGVyZWQgKCJObyBwcm9jZXNzLlxuIik7CisgICAgICByZXR1cm47CisgICAgfQorCisvKnJwb3Bh
bGluOgorICp3ZSBuZWVkIHRvIGNsZWFuIHVwIHRocmVhZCBsaXN0IGhlcmUKKyAqLworCisgIGlu
aXRfdGhyZWFkX2xpc3QgKCk7CisKKyAgcGwucGxfbHdwaWQgPSAwOworICByZXR2YWwgPSBwdHJh
Y2UgKFBUX0xXUElORk8sIEdFVF9QSUQoaW5mZXJpb3JfcHRpZCksICh2b2lkICopJnBsLCBzaXpl
b2YocGwpKTsKKyAgd2hpbGUgKChyZXR2YWwgIT0gLTEpICYmIHBsLnBsX2x3cGlkICE9IDApCisg
ICAgICAgIHsKKyAgICAgICAgICBwdGlkID0gQlVJTERfTFdQIChwbC5wbF9sd3BpZCwgbWFpbl9w
dGlkKTsKKyAgICAgICAgICB0ZF9tYXBfbHdwMnRociAobWFpbl90YSwgcGwucGxfbHdwaWQsICZ0
aHJlYWQpOworICAgICAgICAgIGlmICghaW5fdGhyZWFkX2xpc3QgKHB0aWQpKQorICAgICAgICAg
ICAgYWRkX3RocmVhZCAocHRpZCk7CisgICAgICAgICAgcmV0dmFsID0gcHRyYWNlIChQVF9MV1BJ
TkZPLCBHRVRfUElEKGluZmVyaW9yX3B0aWQpLCAodm9pZCAqKSZwbCwgc2l6ZW9mKHBsKSk7Cisg
ICAgICAgIH0KKyAgcmV0dmFsID0gdGRfdGhyX2l0ZXIgKG1haW5fdGEsIG5ic2RfZmluZF9uZXdf
dGhyZWFkc19jYWxsYmFjaywgKHZvaWQgKikgMCk7CisgIGlmIChyZXR2YWwgIT0gMCkKKyAgICBl
cnJvciAoIm5ic2RfZmluZF9uZXdfdGhyZWFkczogdGRfdGhyX2l0ZXI6ICVzIiwKKyAgICAgICAg
ICAgdGRfZXJyX3N0cmluZyAocmV0dmFsKSk7Cit9CisKKworLyogRm9yayBhbiBpbmZlcmlvciBw
cm9jZXNzLCBhbmQgc3RhcnQgZGVidWdnaW5nIGl0IHdpdGggL3Byb2MuICAqLworCitzdGF0aWMg
dm9pZAorbmJzZF90aHJlYWRfY3JlYXRlX2luZmVyaW9yIChjaGFyICpleGVjX2ZpbGUsIGNoYXIg
KmFsbGFyZ3MsIGNoYXIgKiplbnYsaW50IGZyb210dHkpCit7CisKKyAgaWYgKG5ic2RfdGhyZWFk
X3ByZXNlbnQgJiYgIW5ic2RfdGhyZWFkX2FjdGl2ZSkKKyAgICBwdXNoX3RhcmdldCgmbmJzZF90
aHJlYWRfb3BzKTsKKworICB0YXJnZXRfYmVuZWF0aC0+dG9fY3JlYXRlX2luZmVyaW9yIChleGVj
X2ZpbGUsIGFsbGFyZ3MsIGVudiwgZnJvbXR0eSk7CisKKyAgaWYgKG5ic2RfdGhyZWFkX3ByZXNl
bnQgJiYgIW5ic2RfdGhyZWFkX2FjdGl2ZSkKKyAgICBuYnNkX3RocmVhZF9hY3RpdmF0ZSgpOwor
fQorCisKK3N0YXRpYyBpbnQKK25ic2RfdGhyZWFkX3Byb2NfcmVhZCAodm9pZCAqYXJnLCBjYWRk
cl90IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisgIGludCB2YWw7CisKKyAgdmFs
ID0gdGFyZ2V0X3JlYWRfbWVtb3J5ICgoQ09SRV9BRERSKWFkZHIsIGJ1Ziwgc2l6ZSk7CisKKyAg
aWYgKHZhbCA9PSAwKQorICAgIHJldHVybiAwOworICBlbHNlCisgICAgcmV0dXJuIFREX0VSUl9J
TzsKK30KKworCitzdGF0aWMgaW50CituYnNkX3RocmVhZF9wcm9jX3dyaXRlICh2b2lkICphcmcs
IGNhZGRyX3QgYWRkciwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKyAgaW50IHZhbDsKKwor
ICB2YWwgPSB0YXJnZXRfd3JpdGVfbWVtb3J5ICgoQ09SRV9BRERSKWFkZHIsIGJ1Ziwgc2l6ZSk7
CisKKyAgaWYgKHZhbCA9PSAwKQorICAgIHJldHVybiAwOworICBlbHNlCisgICAgcmV0dXJuIFRE
X0VSUl9JTzsKK30KKworc3RhdGljIGludAorbmJzZF90aHJlYWRfcHJvY19sb29rdXAgKHZvaWQg
KmFyZywgY2hhciAqc3ltLCBjYWRkcl90ICphZGRyKQoreworICBzdHJ1Y3QgbWluaW1hbF9zeW1i
b2wgKm1zOworCisgIG1zID0gbG9va3VwX21pbmltYWxfc3ltYm9sIChzeW0sIE5VTEwsIE5VTEwp
OworCisgIGlmICghbXMpCisgICAgcmV0dXJuIFREX0VSUl9OT1NZTTsKKworICAqYWRkciA9IChj
YWRkcl90KSBTWU1CT0xfVkFMVUVfQUREUkVTUyAobXMpOworCisgIHJldHVybiAwOworCit9CisK
K3N0YXRpYyBpbnQKK25ic2RfdGhyZWFkX3Byb2NfcmVnc2l6ZSAodm9pZCAqYXJnLCBpbnQgcmVn
c2V0LCBzaXplX3QgKnNpemUpCit7CisgIHN3aXRjaCAocmVnc2V0KQorICAgIHsKKyAgICBjYXNl
IDA6CisgICAgICAqc2l6ZSA9IHNpemVvZiAoZ3JlZ3NldF90KTsKKyAgICAgIGJyZWFrOworICAg
IGNhc2UgMToKKyAgICAgICpzaXplID0gc2l6ZW9mIChmcHJlZ3NldF90KTsKKyAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gVERfRVJSX0lOVkFMOworICAgIH0KKworICBy
ZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbmJzZF90aHJlYWRfcHJvY19nZXRyZWdzICh2b2lk
ICphcmcsIGludCByZWdzZXQsIGludCBsd3AsIHZvaWQgKmJ1ZikKK3sKKyAgc3RydWN0IGNsZWFu
dXAgKm9sZF9jaGFpbjsKKyAgaW50IHJldDsKKworICBvbGRfY2hhaW4gPSBzYXZlX2luZmVyaW9y
X3B0aWQgKCk7CisKKyAgICAgIC8qIEZldGNoaW5nIHJlZ2lzdGVycyBmcm9tIGEgbGl2ZSBwcm9j
ZXNzIHJlcXVpcmVzIHRoYXQKKyAgICAgICAgIGluZmVyaW9yX3B0aWQgaXMgYSBMV1AgdmFsdWUg
cmF0aGVyIHRoYW4gYSB0aHJlYWQgdmFsdWUuICovCisgIGluZmVyaW9yX3B0aWQgPSBCVUlMRF9M
V1AgKGx3cCwgbWFpbl9wdGlkKTsKKyAgdGFyZ2V0X2JlbmVhdGgtPnRvX2ZldGNoX3JlZ2lzdGVy
cyAoLTEpOworCisgIHJldCA9IDA7CisgIHN3aXRjaCAocmVnc2V0KQorICAgIHsKKyAgICBjYXNl
IDA6CisJZmlsbF9ncmVnc2V0ICgoZ3JlZ3NldF90ICopYnVmLCAtMSk7ICAgICAgCisJYnJlYWs7
CisgICAgY2FzZSAxOgorICAgICAgICBmaWxsX2ZwcmVnc2V0ICgoZnByZWdzZXRfdCAqKWJ1Ziwg
LTEpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogLyogWFhYIG5lZWQgdG8gaGFuZGxlIG90
aGVyIHJlZyBzZXRzOiBTU0UsIEFsdGlWZWMsIGV0Yy4gKi8KKyAgICAgIHJldCA9IFREX0VSUl9J
TlZBTDsKKyAgICB9CisKKyAgZG9fY2xlYW51cHMgKG9sZF9jaGFpbik7CisKKyAgcmV0dXJuIHJl
dDsKK30KKworc3RhdGljIGludAorbmJzZF90aHJlYWRfcHJvY19zZXRyZWdzICh2b2lkICphcmcs
IGludCByZWdzZXQsIGludCBsd3AsIHZvaWQgKmJ1ZikKK3sKKyAgc3RydWN0IGNsZWFudXAgKm9s
ZF9jaGFpbjsKKyAgaW50IHJldDsKKworICByZXQgPSAwOworICBvbGRfY2hhaW4gPSBzYXZlX2lu
ZmVyaW9yX3B0aWQgKCk7CisKKyAgc3dpdGNoIChyZWdzZXQpCisgICAgeworICAgIGNhc2UgMDoK
KyAgICAgIHN1cHBseV9ncmVnc2V0KChncmVnc2V0X3QgKilidWYpOworICAgICAgYnJlYWs7Cisg
ICAgY2FzZSAxOgorICAgICAgc3VwcGx5X2ZwcmVnc2V0KChmcHJlZ3NldF90ICopYnVmKTsKKyAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IC8qIFhYWCBuZWVkIHRvIGhhbmRsZSBvdGhlciByZWcg
c2V0czogU1NFLCBBbHRpVmVjLCBldGMuICovCisgICAgICByZXQgPSBURF9FUlJfSU5WQUw7Cisg
ICAgfQorCisgIC8qIFN0b3JpbmcgcmVnaXN0ZXJzIHJlcXVpcmVzIHRoYXQgaW5mZXJpb3JfcHRp
ZCBpcyBhIExXUCB2YWx1ZQorICAgICByYXRoZXIgdGhhbiBhIHRocmVhZCB2YWx1ZS4gKi8KKyAg
aW5mZXJpb3JfcHRpZCA9IEJVSUxEX0xXUCAobHdwLCBtYWluX3B0aWQpOworICB0YXJnZXRfYmVu
ZWF0aC0+dG9fc3RvcmVfcmVnaXN0ZXJzICgtMSk7CisgIGRvX2NsZWFudXBzIChvbGRfY2hhaW4p
OworCisgIHJldHVybiByZXQ7Cit9CisKKworc3RhdGljIHZvaWQKK2luaXRfbmJzZF9wcm9jX2Nh
bGxiYWNrcyAodm9pZCkKK3sKKyAgbmJzZF90aHJlYWRfY2FsbGJhY2tzLnByb2NfcmVhZCA9IG5i
c2RfdGhyZWFkX3Byb2NfcmVhZDsKKyAgbmJzZF90aHJlYWRfY2FsbGJhY2tzLnByb2Nfd3JpdGUg
PSBuYnNkX3RocmVhZF9wcm9jX3dyaXRlOworICBuYnNkX3RocmVhZF9jYWxsYmFja3MucHJvY19s
b29rdXAgPSBuYnNkX3RocmVhZF9wcm9jX2xvb2t1cDsKKyAgbmJzZF90aHJlYWRfY2FsbGJhY2tz
LnByb2NfcmVnc2l6ZSA9IG5ic2RfdGhyZWFkX3Byb2NfcmVnc2l6ZTsKKyAgbmJzZF90aHJlYWRf
Y2FsbGJhY2tzLnByb2NfZ2V0cmVncyA9IG5ic2RfdGhyZWFkX3Byb2NfZ2V0cmVnczsKKyAgbmJz
ZF90aHJlYWRfY2FsbGJhY2tzLnByb2Nfc2V0cmVncyA9IG5ic2RfdGhyZWFkX3Byb2Nfc2V0cmVn
czsKK30KKworc3RhdGljIHZvaWQKK2luaXRfbmJzZF90aHJlYWRfb3BzICh2b2lkKQoreworICBu
YnNkX3RocmVhZF9vcHMudG9fc2hvcnRuYW1lID0gIm5ldGJzZC10aHJlYWRzIjsKKyAgbmJzZF90
aHJlYWRfb3BzLnRvX2xvbmduYW1lID0gIk5ldEJTRCBwdGhyZWFkLiI7CisgIG5ic2RfdGhyZWFk
X29wcy50b19kb2MgPSAiTmV0QlNEIHB0aHJlYWQgc3VwcG9ydC4iOworICBuYnNkX3RocmVhZF9v
cHMudG9fYXR0YWNoID0gbmJzZF90aHJlYWRfYXR0YWNoOworICBuYnNkX3RocmVhZF9vcHMudG9f
ZGV0YWNoID0gbmJzZF90aHJlYWRfZGV0YWNoOworICBuYnNkX3RocmVhZF9vcHMudG9fbWFnaWMg
PSBPUFNfTUFHSUM7CisgIG5ic2RfdGhyZWFkX29wcy50b19wb3N0X2F0dGFjaCA9IG5ic2RfdGhy
ZWFkX3Bvc3RfYXR0YWNoOworICBuYnNkX3RocmVhZF9vcHMudG9fZmV0Y2hfcmVnaXN0ZXJzID0g
bmJzZF90aHJlYWRfZmV0Y2hfcmVnaXN0ZXJzOworICBuYnNkX3RocmVhZF9vcHMudG9fc3RvcmVf
cmVnaXN0ZXJzID0gbmJzZF90aHJlYWRfc3RvcmVfcmVnaXN0ZXJzOworICBuYnNkX3RocmVhZF9v
cHMudG9feGZlcl9wYXJ0aWFsID0gbmJzZF94ZmVyX3BhcnRpYWw7CisgIG5ic2RfdGhyZWFkX29w
cy50b19maW5kX25ld190aHJlYWRzID0gbmJzZF9maW5kX25ld190aHJlYWRzOworICBuYnNkX3Ro
cmVhZF9vcHMudG9fcGlkX3RvX3N0ciA9IG5ic2RfcGlkX3RvX3N0cjsKKyAgbmJzZF90aHJlYWRf
b3BzLnRvX3RocmVhZF9hbGl2ZSA9IG5ic2RfdGhyZWFkX2FsaXZlOworICBuYnNkX3RocmVhZF9v
cHMudG9faGFzX3RocmVhZF9jb250cm9sID0gdGNfbm9uZTsKKyAgbmJzZF90aHJlYWRfb3BzLnRv
X21vdXJuX2luZmVyaW9yID0gbmJzZF90aHJlYWRfbW91cm5faW5mZXJpb3I7CisgIG5ic2RfdGhy
ZWFkX29wcy50b19jcmVhdGVfaW5mZXJpb3IgPSBuYnNkX3RocmVhZF9jcmVhdGVfaW5mZXJpb3I7
CisgIG5ic2RfdGhyZWFkX29wcy50b19yZXN1bWUgPSBuYnNkX3RocmVhZF9yZXN1bWU7CisgIG5i
c2RfdGhyZWFkX29wcy50b193YWl0ID0gbmJzZF90aHJlYWRfd2FpdDsKKyAgbmJzZF90aHJlYWRf
b3BzLnRvX3N0cmF0dW0gPSB0aHJlYWRfc3RyYXR1bTsKK30KKworI2RlZmluZSBOQlNEX0RCRyAw
CisjZGVmaW5lIE1BWF9GUkFNRVMgMTAwCit2b2lkIGphdmFfYnQoamZyYW1lICpjdHh0KQorewor
CWludCBpbmphdmEgPSAwOworCXVuc2lnbmVkIGludCBmcCA9IDEsIGkgPSAwOworCWdyZWdzZXRf
dCBncmVnczsKKwlpbnQgdmFsOworCXRkX3RocmVhZF90ICp0aHJlYWQ7CisJCisJaWYgKGN0eHQg
PT0gTlVMTCkKKwl7CisJI2lmIE5CU0RfREJHCisJCXByaW50ZigiU3RvcHBlZCBpbiBqYXZhLiBQ
cmludCBmcmFtZSBpbiByZWdpc3RlcnMgZmlyc3QuXG4iKTsKKwkjZW5kaWYKKwkJaW5qYXZhID0g
MTsKKyAgCQlpZiAobmJzZF90aHJlYWRfYWN0aXZlICYmIElTX1RIUkVBRCAoaW5mZXJpb3JfcHRp
ZCkpCisgICAJCXsKKwkJCWlmICgodmFsID0gdGRfbWFwX2lkMnRociAobWFpbl90YSwgR0VUX1RI
UkVBRCAoaW5mZXJpb3JfcHRpZCksICZ0aHJlYWQpKSAhPSAwKQorCQkJCWVycm9yICgibmJzZF90
aHJlYWRfZmV0Y2hfcmVnaXN0ZXJzOiB0ZF9tYXBfaWQydGhyOiAlc1xuIiwgdGRfZXJyX3N0cmlu
ZyAodmFsKSk7CisJCQlpZiAoKHZhbCA9IHRkX3Rocl9nZXRyZWdzICh0aHJlYWQsIDAsICZncmVn
cykpICE9IDApCisJIAkJCWVycm9yICgibmJzZF90aHJlYWRfZmV0Y2hfcmVnaXN0ZXJzOiB0ZF90
aHJfZ2V0cmVnczogJXNcbiIsIHRkX2Vycl9zdHJpbmcgKHZhbCkpOworCQl9CisJfQorCQorCSNp
ZiBOQlNEX0RCRworCXByaW50Zl9maWx0ZXJlZCgiQ3VycmVudCBjb250ZXh0IGF0OiAweCV4XG4i
LCBjdHh0KTsKKwkjZW5kaWYKKwkKKwl3aGlsZSAoZnAgIT0gMCAmJiBpIDwgTUFYX0ZSQU1FUykg
CisJeworCQlqbWV0aG9kIG07CisJCWpidW5kbGUgYjsKKwkJamhhbmRsZSBjaCwga2g7CisJCWNo
YXIgZnVsbF9uYW1lWzI1Nl07CisJCWNoYXIgKm5hbWU7CisJCWNoYXIgbmFtZTJbMjU2XTsKKwkJ
Y2hhciBrZXluYW1lWzI1Nl07CisKKwkJdW5zaWduZWQgaW50IHRtcCwgcGMsIHBvb2w7CisKKwkJ
aWYgKGluamF2YSAmJiBpID09IDApCisJCXsKKwkJCXRtcCA9IGdyZWdzLnJbX1JFR19SN107CisJ
CX0gZWxzZQorCQl7CisJCQlpZiAocmVhZF9tZW0oKHZvaWQqKSgodW5zaWduZWQgaW50KWN0eHQg
KyBvZmZzZXRvZihzdHJ1Y3QgamZyYW1lLCBtcCkpLCAoY2hhciopJnRtcCwgc2l6ZW9mKHRtcCkp
ID09IC0xKQorCQkJewkKKwkJCSNpZiBOQlNEX0RCRworCQkJCXByaW50Zl9maWx0ZXJlZCgiVW5h
YmxlIHRvIHJldHJpZXZlIG1ldGhvZCBwb2ludGVyXG4iKTsKKwkJCSNlbmRpZgorCQkJCWdvdG8g
bmV4dGZwOworCQkJfQorCQl9CisKKwkJaWYgKHJlYWRfbWVtKCh2b2lkKil0bXAsIChjaGFyKikm
bSwgc2l6ZW9mKG0pKSA9PSAtMSkKKwkJeworCQkjaWYgTkJTRF9EQkcKKwkJCXByaW50Zl9maWx0
ZXJlZCgiVW5hYmxlIHRvIHJldHJpZXZlIG1ldGhvZFxuIik7CisJCSNlbmRpZgorCQkJZ290byBu
ZXh0ZnA7CisJCX0KKwkKKwkJaWYgKG1ldGhvZF9nZXRfYnVuZGxlKCZtLCAmYikgPT0gLTEpCisJ
CXsKKwkJI2lmIE5CU0RfREJHCisJCQlwcmludGZfZmlsdGVyZWQoIlVuYWJsZSB0byByZXRyaWV2
ZSBidW5kbGVcbiIpOworCQkjZW5kaWYKKwkJCWdvdG8gbmV4dGZwOworCQl9CisKKwkJaWYgKG1l
dGhvZF9nZXRfY2xhc3MoJm0sICZjaCkgPT0gLTEpCisJCXsKKwkJI2lmIE5CU0RfREJHCisJCQlw
cmludGZfZmlsdGVyZWQoIlVuYWJsZSB0byByZXRyaWV2ZSBjbGFzc1xuIik7CisJCSNlbmRpZgor
CQkJZ290byBuZXh0ZnA7CisJCX0KKworCQlpZiAoZ2V0X25hbWVfaGFuZGxlKCZjaCwgJmtoKSA9
PSAtMSkKKwkJeworCQkjaWYgTkJTRF9EQkcKKwkJCXByaW50Zl9maWx0ZXJlZCgiVW5hYmxlIHRv
IHJldHJpZXZlIGhhbmRsZVxuIik7CisJCSNlbmRpZgorCQkJZ290byBuZXh0ZnA7ICAgICAgICAg
ICAgICAgICAgICAgICAgIAorCQl9CisKKwkJbWVtc2V0KGtleW5hbWUsIDAsIHNpemVvZihrZXlu
YW1lKSk7CQkJCisKKwkJaWYgKGtleV90b191dGY4KCZraCwga2V5bmFtZSwgc2l6ZW9mKGtleW5h
bWUpKSA9PSAtMSkKKwkJeworCQkjaWYgTkJTRF9EQkcKKwkJCXByaW50Zl9maWx0ZXJlZCgiVW5h
YmxlIHRvIHJldHJpZXZlIGhhbmRsZSBuYW1lXG4iKTsKKwkJI2VuZGlmCisJCQlnb3RvIG5leHRm
cDsKKwkJfQorCisJCXRtcCArPSBzaXplb2Yoam1ldGhvZCk7CisKKwkJaWYgKGluamF2YSAmJiBp
ID09IDApCisJCXsKKwkJCXBjID0gZ3JlZ3MucltfUkVHX1I0XTsKKwkJfSBlbHNlCisJCXsKKwkJ
CWlmIChyZWFkX21lbSgodm9pZCopKCh1bnNpZ25lZCBpbnQpY3R4dCArIG9mZnNldG9mKHN0cnVj
dCBqZnJhbWUsIHBjKSksIChjaGFyKikmcGMsIHNpemVvZihwYykpID09IC0xKQorCQkJeworCQkJ
I2lmIE5CU0RfREJHCisJCQkJcHJpbnRmX2ZpbHRlcmVkKCJVbmFibGUgdG8gcmV0cmlldmUgY3Vy
cmVudCBwY1xuIik7CisJCQkjZW5kaWYKKwkJCQlnb3RvIG5leHRmcDsKKwkJCX0KKwkJfQorCisJ
CXBjIC09IHRtcCArIDE7CisKKwkJcG9vbCA9IG1ldGhvZF9nZXRfYnVuZGxlX2FkZHIoJm0pOwor
CisJCWlmIChwb29sID09IC0xKQorCQkJZ290byBuZXh0ZnA7CisKKwkJcG9vbCArPSBvZmZzZXRv
ZihqYnVuZGxlLCBwb29sKTsKKworCQltZW1zZXQoZnVsbF9uYW1lLCAwICwgc2l6ZW9mKGZ1bGxf
bmFtZSkpOworCQkJCisJCWlmIChidW5kbGVfZ2V0X3N0cmluZygmYiwgbS5uYW1lX2lkeCwgcG9v
bCwgZnVsbF9uYW1lLCBzaXplb2YoZnVsbF9uYW1lKSkgPT0gLTEpCisJCXsKKwkJI2lmIE5CU0Rf
REJHCisJCQlwcmludGZfZmlsdGVyZWQoIlVuYWJsZSB0byByZXRyaWV2ZSBidW5kbGUgZnVsbCBu
YW1lXG4iKTsKKwkJI2VuZGlmCisJCQlnb3RvIG5leHRmcDsKKwkJfQorCisJCW5hbWUgPSBzdHJj
aHIoZnVsbF9uYW1lLCAnOicpOworCQluYW1lID0gKG5hbWUgPT0gTlVMTCkgPyBmdWxsX25hbWUg
OiAobmFtZSArIDEpOworCisJCW1lbXNldChuYW1lMiwgMCwgc2l6ZW9mKG5hbWUyKSk7CisKKwkJ
aWYgKGJ1bmRsZV9nZXRfc3RyaW5nKCZiLCBtLnR5cGVfaWR4LCBwb29sLCBuYW1lMiwgc2l6ZW9m
KG5hbWUyKSkgPT0gLTEpCisJCXsKKwkJI2lmIE5CU0RfREJHCisJCQlwcmludGZfZmlsdGVyZWQo
IlVuYWJsZSB0byByZXRyaWV2ZSBtZXRob2QgbmFtZVxuIik7CisJCSNlbmRpZgorCQkJZ290byBu
ZXh0ZnA7CisJCX0KKworCQlwcmludGZfZmlsdGVyZWQoIiMlLTNkIHBjPSUwNWQgJXMuJXMlc1xu
IiwKKwkJCQlpLCBwYywgCisJCQkJa2V5bmFtZSwgbmFtZSwgCisJCQkJbmFtZTIpOworCisJCW5l
eHRmcDoKKworCQlpZiAoaW5qYXZhICYmIGkgPT0gMCkKKwkJeworCQkJZnAgPSBncmVncy5yW19S
RUdfUjVdOworCQkjaWYgTkJTRF9EQkcKKwkJCXByaW50ZigiUHJpbnQgZnJhbWVzIG9uIHN0YWNr
cyBmcm9tIDB4JXhcbiIsIGZwKTsKKwkJI2VuZGlmCisJCX0gZWxzZQorCQl7CisJCQlpZiAocmVh
ZF9tZW0oKHZvaWQqKSgodW5zaWduZWQgaW50KWN0eHQgKyBvZmZzZXRvZihzdHJ1Y3QgamZyYW1l
LCBmcCkpLCAoY2hhciopJmZwLCBzaXplb2YoZnApKSA9PSAtMSkKKwkJCXsKKwkJCSNpZiBOQlNE
X0RCRworCQkJCXByaW50Zl9maWx0ZXJlZCgiVW5hYmxlIHRvIHJldHJpZXZlIG5leHQgZnJhbWUg
cG9pbnRlclxuIik7CisJCQkjZW5kaWYKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWN0eHQg
PSAoamZyYW1lKilmcDsKKwkJaSsrOworCX0KKworfQorCitzdGF0aWMgdm9pZCBuYnNkX2phdmEo
Y2hhciAqZXhwLCBpbnQgZnJvbV90dHkpCit7CisgIGludCB2YWw7CisgIHRkX3RocmVhZF90ICp0
aHJlYWQ7CisgIHN0cnVjdCBwdHJhY2VfbHdwaW5mbyBwbDsKKyAgY2FkZHJfdCB0bXA7CisKKwlp
ZiAoIW5ic2RfdGhyZWFkX2FjdGl2ZSkKKwl7CisJCXByaW50Zl9maWx0ZXJlZCgiUHJvZ3JhbSBu
b3Qgc3RhcnRlZFxuIik7CQorCQlyZXR1cm47CisJfQorCisgICAgICBwbC5wbF9sd3BpZCA9IDA7
CisgICAgICB2YWwgPSBwdHJhY2UgKFBUX0xXUElORk8sIEdFVF9QSUQoaW5mZXJpb3JfcHRpZCks
ICh2b2lkICopJnBsLCBzaXplb2YocGwpKTsKKyAgICAgIHdoaWxlICgodmFsICE9IC0xKSAmJiAo
cGwucGxfbHdwaWQgIT0gMCkgJiYKKyAgICAgICAgICAgICAocGwucGxfZXZlbnQgIT0gUExfRVZF
TlRfU0lHTkFMKSkKKyAgICAgICAgdmFsID0gcHRyYWNlIChQVF9MV1BJTkZPLCBHRVRfUElEKGlu
ZmVyaW9yX3B0aWQpLCAodm9pZCAqKSZwbCwgc2l6ZW9mKHBsKSk7CisKKwlpZiAodGRfbWFwX2lk
MnRociAobWFpbl90YSwgR0VUX1RIUkVBRChpbmZlcmlvcl9wdGlkKSwgJnRocmVhZCkgIT0gMCkK
KwkJcmV0dXJuOworICAKKwl0bXAgPSB0ZF90aHJfZ2V0c3BlY2lmaWModGhyZWFkKTsKKwkKKyNp
ZiBOQlNEX0RCRworCXByaW50Zl9maWx0ZXJlZCgic3BlY2lmaWMgdmFsdWU6IDB4JXhcbiIsIHRt
cCk7CisjZW5kaWYKKwkKKwlyZWFkX21lbSgodm9pZCopKHRtcCsxNiksIChjaGFyKikmdmFsLCBz
aXplb2YodmFsKSk7CisJamF2YV9idCgoamZyYW1lKil2YWwpOworfQorCisKK3ZvaWQKK19pbml0
aWFsaXplX25ic2RfdGhyZWFkICh2b2lkKQoreworICBpbml0X25ic2RfdGhyZWFkX29wcyAoKTsK
KyAgaW5pdF9uYnNkX3Byb2NfY2FsbGJhY2tzICgpOworCisgIGFkZF90YXJnZXQgKCZuYnNkX3Ro
cmVhZF9vcHMpOworIAorICBhZGRfY21kICggImphdmEiLCBjbGFzc19pbmZvLCBuYnNkX2phdmEs
CisJICAgICJwcmludCBqYXZhIGJhY2t0cmFjZVxuIiwKKwkgICAgJmluZm9saXN0KTsKKyAgCisK
KyAgY2hpbGRfc3VwcHJlc3NfcnVuID0gMTsKKworICAvKiBIb29rIGludG8gbmV3X29iamZpbGUg
bm90aWZpY2F0aW9uLiAqLworICB0YXJnZXRfbmV3X29iamZpbGVfY2hhaW4gPSBkZXByZWNhdGVk
X3RhcmdldF9uZXdfb2JqZmlsZV9ob29rOworICBkZXByZWNhdGVkX3RhcmdldF9uZXdfb2JqZmls
ZV9ob29rICA9IG5ic2RfdGhyZWFkX25ld19vYmpmaWxlOworfQorCi0tLSAwNzAxMjkvc3JjL2du
dS91c3IuYmluL2dkYjYvYXJjaC9hcm0vZGVmcy5tawkyMDA2LTEyLTA2IDE5OjAxOjIwLjAwMDAw
MDAwMCAtMDgwMAorKysgbmV3L3NyYy9nbnUvdXNyLmJpbi9nZGI2L2FyY2gvYXJtL2RlZnMubWsJ
MjAwNi0xMi0zMCAwOToxNzo1MC4wMDAwMDAwMDAgLTA4MDAKQEAgLTMsNSArMyw2IEBACiAjIEdl
bmVyYXRlZCBmcm9tOiBOZXRCU0Q6IG1rbmF0aXZlLmNvbW1vbix2IDEuOCAyMDA2LzA1LzI2IDE5
OjE3OjIxIG1yZyBFeHAgCiAjCiBHX0lOVEVSTkFMX0NGTEFHUz0gICAgIC1JLiAtSSR7R05VSE9T
VERJU1R9L2dkYiAtSSR7R05VSE9TVERJU1R9L2dkYi9jb25maWcgLURMT0NBTEVESVI9IlwiL3Vz
ci9zaGFyZS9sb2NhbGVcIiIgLURIQVZFX0NPTkZJR19IIC1JJHtHTlVIT1NURElTVH0vZ2RiLy4u
L2luY2x1ZGUvb3Bjb2RlIC1JJHtHTlVIT1NURElTVH0vZ2RiLy4uL3JlYWRsaW5lLy4uICAtSS4u
L2JmZCAtSSR7R05VSE9TVERJU1R9L2dkYi8uLi9iZmQgLUkke0dOVUhPU1RESVNUfS9nZGIvLi4v
aW5jbHVkZSAgLUkuLi9pbnRsIC1JJHtHTlVIT1NURElTVH0vZ2RiLy4uL2ludGwgIC1ETUlfT1VU
PTEgLURUVUk9MSAtV2ltcGxpY2l0IC1XcmV0dXJuLXR5cGUgLVdjb21tZW50IC1XdHJpZ3JhcGhz
IC1XZm9ybWF0IC1XcGFyZW50aGVzZXMgLVdwb2ludGVyLWFyaXRoIC1XZm9ybWF0LW5vbmxpdGVy
YWwgLVd1bnVzZWQtbGFiZWwgLVd1bnVzZWQtZnVuY3Rpb24gLVduby1wb2ludGVyLXNpZ24gCi1H
X0xJQkdEQl9PQlM9YXJtLXRkZXAubyBhcm1uYnNkLXRkZXAubyBzb2xpYi5vIHNvbGliLXN2cjQu
byBuYnNkLXRkZXAubyBzZXItYmFzZS5vIHNlci11bml4Lm8gc2VyLXBpcGUubyBzZXItdGNwLm8g
Zm9yay1jaGlsZC5vIGluZi1wdHJhY2UubyBjb3JlbG93Lm8gbmJzZC1uYXQubyBhcm1uYnNkLW5h
dC5vICByZW1vdGUubyBkY2FjaGUubyByZW1vdGUtdXRpbHMubyB0cmFjZXBvaW50Lm8gYXgtZ2Vu
ZXJhbC5vIGF4LWdkYi5vIHJlbW90ZS1maWxlaW8ubyAgY2xpLWR1bXAubyAgY2xpLWRlY29kZS5v
IGNsaS1zY3JpcHQubyBjbGktY21kcy5vIGNsaS1zZXRzaG93Lm8gY2xpLXV0aWxzLm8gIGNsaS1s
b2dnaW5nLm8gIGNsaS1pbnRlcnAubyBtaS1vdXQubyBtaS1jb25zb2xlLm8gIG1pLWNtZHMubyBt
aS1jbWQtZW52Lm8gbWktY21kLXZhci5vIG1pLWNtZC1icmVhay5vIG1pLWNtZC1zdGFjay5vICBt
aS1jbWQtZmlsZS5vIG1pLWNtZC1kaXNhcy5vIG1pLXN5bWJvbC1jbWRzLm8gIG1pLWludGVycC5v
ICBtaS1tYWluLm8gbWktcGFyc2UubyBtaS1nZXRvcHQubyBtaS1jb21tb24ubyBwb3NpeC1oZGVw
Lm8gdHVpLWNvbW1hbmQubyAgdHVpLWRhdGEubyAgdHVpLWRpc2FzbS5vICB0dWktZmlsZS5vIHR1
aS5vICB0dWktaG9va3MubyAgdHVpLWludGVycC5vICB0dWktaW8ubyAgdHVpLWxheW91dC5vICB0
dWktb3V0Lm8gIHR1aS1yZWdzLm8gIHR1aS1zb3VyY2UubyAgdHVpLXN0YWNrLm8gIHR1aS13aW4u
byAgdHVpLXdpbmRhdGEubyAgdHVpLXdpbmdlbmVyYWwubyAgdHVpLXdpbnNvdXJjZS5vIGMtZXhw
Lm8gIGNwLW5hbWUtcGFyc2VyLm8gIG9iamMtZXhwLm8gIGFkYS1leHAubyAganYtZXhwLm8gIGYt
ZXhwLm8gbTItZXhwLm8gcC1leHAubyAgdmVyc2lvbi5vICBhbm5vdGF0ZS5vICBhdXh2Lm8gIGJm
ZC10YXJnZXQubyAgYmxvY2tmcmFtZS5vIGJyZWFrcG9pbnQubyBmaW5kdmFyLm8gcmVnY2FjaGUu
byAgY2hhcnNldC5vIGRpc2FzbS5vIGR1bW15LWZyYW1lLm8gIHNvdXJjZS5vIHZhbHVlLm8gZXZh
bC5vIHZhbG9wcy5vIHZhbGFyaXRoLm8gdmFscHJpbnQubyBwcmludGNtZC5vICBibG9jay5vIHN5
bXRhYi5vIHN5bWZpbGUubyBzeW1taXNjLm8gbGluZXNwZWMubyBkaWN0aW9uYXJ5Lm8gIGluZmNh
bGwubyAgaW5mY21kLm8gaW5mcnVuLm8gIGV4cHByaW50Lm8gZW52aXJvbi5vIHN0YWNrLm8gdGhy
ZWFkLm8gIGV4Y2VwdGlvbnMubyAgaW5mLWNoaWxkLm8gIGludGVycHMubyAgbWFpbi5vICBtYWNy
b3RhYi5vIG1hY3JvY21kLm8gbWFjcm9leHAubyBtYWNyb3Njb3BlLm8gIGV2ZW50LWxvb3AubyBl
dmVudC10b3AubyBpbmYtbG9vcC5vIGNvbXBsZXRlci5vICBnZGJhcmNoLm8gYXJjaC11dGlscy5v
IGdkYnR5cGVzLm8gb3NhYmkubyBjb3B5aW5nLm8gIG1lbWF0dHIubyBtZW0tYnJlYWsubyB0YXJn
ZXQubyBwYXJzZS5vIGxhbmd1YWdlLm8gYnVpbGRzeW0ubyAgc3RkLXJlZ3MubyAgc2lnbmFscy5v
ICBrb2QubyBrb2QtY2lzY28ubyAgZ2RiLWV2ZW50cy5vICBleGVjLm8gYmNhY2hlLm8gb2JqZmls
ZXMubyBvYnNlcnZlci5vIG1pbnN5bXMubyBtYWludC5vIGRlbWFuZ2xlLm8gIGRieHJlYWQubyBj
b2ZmcmVhZC5vIGNvZmYtcGUtcmVhZC5vIGVsZnJlYWQubyAgZHdhcmZyZWFkLm8gZHdhcmYycmVh
ZC5vIG1pcHNyZWFkLm8gc3RhYnNyZWFkLm8gY29yZWZpbGUubyAgZHdhcmYyZXhwci5vIGR3YXJm
MmxvYy5vIGR3YXJmMi1mcmFtZS5vICBhZGEtbGFuZy5vIGMtbGFuZy5vIGYtbGFuZy5vIG9iamMt
bGFuZy5vICB1aS1vdXQubyBjbGktb3V0Lm8gIHZhcm9iai5vIHdyYXBwZXIubyAganYtbGFuZy5v
IGp2LXZhbHByaW50Lm8ganYtdHlwZXByaW50Lm8gIG0yLWxhbmcubyBwLWxhbmcubyBwLXR5cGVw
cmludC5vIHAtdmFscHJpbnQubyAgc2NtLWV4cC5vIHNjbS1sYW5nLm8gc2NtLXZhbHByaW50Lm8g
IHNlbnRpbmVsLWZyYW1lLm8gIGNvbXBsYWludHMubyB0eXBlcHJpbnQubyAgYWRhLXR5cGVwcmlu
dC5vIGMtdHlwZXByaW50Lm8gZi10eXBlcHJpbnQubyBtMi10eXBlcHJpbnQubyAgYWRhLXZhbHBy
aW50Lm8gYy12YWxwcmludC5vIGNwLXZhbHByaW50Lm8gZi12YWxwcmludC5vIG0yLXZhbHByaW50
Lm8gIG5sbXJlYWQubyBzZXJpYWwubyBtZGVidWdyZWFkLm8gdG9wLm8gdXRpbHMubyAgdWktZmls
ZS5vICB1c2VyLXJlZ3MubyAgZnJhbWUubyBmcmFtZS11bndpbmQubyBkb3VibGVzdC5vICBmcmFt
ZS1iYXNlLm8gIGdudS12Mi1hYmkubyBnbnUtdjMtYWJpLm8gaHBhY2MtYWJpLm8gY3AtYWJpLm8g
Y3Atc3VwcG9ydC5vICBjcC1uYW1lc3BhY2UubyAgcmVnZ3JvdXBzLm8gcmVnc2V0Lm8gIHRyYWQt
ZnJhbWUubyAgdHJhbXAtZnJhbWUubyAgc29saWIubyBzb2xpYi1udWxsLm8gIHByb2xvZ3VlLXZh
bHVlLm8gaW5mbG93Lm8gICAgaW5pdC5vCitHX0xJQkdEQl9PQlM9YXJtbmJzZC1yZWdzLm8gbmJz
ZC10aHJlYWQubyBhcm0tdGRlcC5vIGFybW5ic2QtdGRlcC5vIHNvbGliLm8gc29saWItc3ZyNC5v
IG5ic2QtdGRlcC5vIHNlci1iYXNlLm8gc2VyLXVuaXgubyBzZXItcGlwZS5vIHNlci10Y3AubyBm
b3JrLWNoaWxkLm8gaW5mLXB0cmFjZS5vIGNvcmVsb3cubyBuYnNkLW5hdC5vIGFybW5ic2QtbmF0
Lm8gIHJlbW90ZS5vIGRjYWNoZS5vIHJlbW90ZS11dGlscy5vIHRyYWNlcG9pbnQubyBheC1nZW5l
cmFsLm8gYXgtZ2RiLm8gcmVtb3RlLWZpbGVpby5vICBjbGktZHVtcC5vICBjbGktZGVjb2RlLm8g
Y2xpLXNjcmlwdC5vIGNsaS1jbWRzLm8gY2xpLXNldHNob3cubyBjbGktdXRpbHMubyAgY2xpLWxv
Z2dpbmcubyAgY2xpLWludGVycC5vIG1pLW91dC5vIG1pLWNvbnNvbGUubyAgbWktY21kcy5vIG1p
LWNtZC1lbnYubyBtaS1jbWQtdmFyLm8gbWktY21kLWJyZWFrLm8gbWktY21kLXN0YWNrLm8gIG1p
LWNtZC1maWxlLm8gbWktY21kLWRpc2FzLm8gbWktc3ltYm9sLWNtZHMubyAgbWktaW50ZXJwLm8g
IG1pLW1haW4ubyBtaS1wYXJzZS5vIG1pLWdldG9wdC5vIG1pLWNvbW1vbi5vIHBvc2l4LWhkZXAu
byB0dWktY29tbWFuZC5vICB0dWktZGF0YS5vICB0dWktZGlzYXNtLm8gIHR1aS1maWxlLm8gdHVp
Lm8gIHR1aS1ob29rcy5vICB0dWktaW50ZXJwLm8gIHR1aS1pby5vICB0dWktbGF5b3V0Lm8gIHR1
aS1vdXQubyAgdHVpLXJlZ3MubyAgdHVpLXNvdXJjZS5vICB0dWktc3RhY2subyAgdHVpLXdpbi5v
ICB0dWktd2luZGF0YS5vICB0dWktd2luZ2VuZXJhbC5vICB0dWktd2luc291cmNlLm8gYy1leHAu
byAgY3AtbmFtZS1wYXJzZXIubyAgb2JqYy1leHAubyAgYWRhLWV4cC5vICBqdi1leHAubyAgZi1l
eHAubyBtMi1leHAubyBwLWV4cC5vICB2ZXJzaW9uLm8gIGFubm90YXRlLm8gIGF1eHYubyAgYmZk
LXRhcmdldC5vICBibG9ja2ZyYW1lLm8gYnJlYWtwb2ludC5vIGZpbmR2YXIubyByZWdjYWNoZS5v
ICBjaGFyc2V0Lm8gZGlzYXNtLm8gZHVtbXktZnJhbWUubyAgc291cmNlLm8gdmFsdWUubyBldmFs
Lm8gdmFsb3BzLm8gdmFsYXJpdGgubyB2YWxwcmludC5vIHByaW50Y21kLm8gIGJsb2NrLm8gc3lt
dGFiLm8gc3ltZmlsZS5vIHN5bW1pc2MubyBsaW5lc3BlYy5vIGRpY3Rpb25hcnkubyAgaW5mY2Fs
bC5vICBpbmZjbWQubyBpbmZydW4ubyAgZXhwcHJpbnQubyBlbnZpcm9uLm8gc3RhY2subyB0aHJl
YWQubyAgZXhjZXB0aW9ucy5vICBpbmYtY2hpbGQubyAgaW50ZXJwcy5vICBtYWluLm8gIG1hY3Jv
dGFiLm8gbWFjcm9jbWQubyBtYWNyb2V4cC5vIG1hY3Jvc2NvcGUubyAgZXZlbnQtbG9vcC5vIGV2
ZW50LXRvcC5vIGluZi1sb29wLm8gY29tcGxldGVyLm8gIGdkYmFyY2gubyBhcmNoLXV0aWxzLm8g
Z2RidHlwZXMubyBvc2FiaS5vIGNvcHlpbmcubyAgbWVtYXR0ci5vIG1lbS1icmVhay5vIHRhcmdl
dC5vIHBhcnNlLm8gbGFuZ3VhZ2UubyBidWlsZHN5bS5vICBzdGQtcmVncy5vICBzaWduYWxzLm8g
IGtvZC5vIGtvZC1jaXNjby5vICBnZGItZXZlbnRzLm8gIGV4ZWMubyBiY2FjaGUubyBvYmpmaWxl
cy5vIG9ic2VydmVyLm8gbWluc3ltcy5vIG1haW50Lm8gZGVtYW5nbGUubyAgZGJ4cmVhZC5vIGNv
ZmZyZWFkLm8gY29mZi1wZS1yZWFkLm8gZWxmcmVhZC5vICBkd2FyZnJlYWQubyBkd2FyZjJyZWFk
Lm8gbWlwc3JlYWQubyBzdGFic3JlYWQubyBjb3JlZmlsZS5vICBkd2FyZjJleHByLm8gZHdhcmYy
bG9jLm8gZHdhcmYyLWZyYW1lLm8gIGFkYS1sYW5nLm8gYy1sYW5nLm8gZi1sYW5nLm8gb2JqYy1s
YW5nLm8gIHVpLW91dC5vIGNsaS1vdXQubyAgdmFyb2JqLm8gd3JhcHBlci5vICBqdi1sYW5nLm8g
anYtdmFscHJpbnQubyBqdi10eXBlcHJpbnQubyAgbTItbGFuZy5vIHAtbGFuZy5vIHAtdHlwZXBy
aW50Lm8gcC12YWxwcmludC5vICBzY20tZXhwLm8gc2NtLWxhbmcubyBzY20tdmFscHJpbnQubyAg
c2VudGluZWwtZnJhbWUubyAgY29tcGxhaW50cy5vIHR5cGVwcmludC5vICBhZGEtdHlwZXByaW50
Lm8gYy10eXBlcHJpbnQubyBmLXR5cGVwcmludC5vIG0yLXR5cGVwcmludC5vICBhZGEtdmFscHJp
bnQubyBjLXZhbHByaW50Lm8gY3AtdmFscHJpbnQubyBmLXZhbHByaW50Lm8gbTItdmFscHJpbnQu
byAgbmxtcmVhZC5vIHNlcmlhbC5vIG1kZWJ1Z3JlYWQubyB0b3AubyB1dGlscy5vICB1aS1maWxl
Lm8gIHVzZXItcmVncy5vICBmcmFtZS5vIGZyYW1lLXVud2luZC5vIGRvdWJsZXN0Lm8gIGZyYW1l
LWJhc2UubyAgZ251LXYyLWFiaS5vIGdudS12My1hYmkubyBocGFjYy1hYmkubyBjcC1hYmkubyBj
cC1zdXBwb3J0Lm8gIGNwLW5hbWVzcGFjZS5vICByZWdncm91cHMubyByZWdzZXQubyAgdHJhZC1m
cmFtZS5vICB0cmFtcC1mcmFtZS5vICBzb2xpYi5vIHNvbGliLW51bGwubyAgcHJvbG9ndWUtdmFs
dWUubyBpbmZsb3cubyAgICBpbml0Lm8KIEdfU0lNX09CUz0KK0xEQUREKz0JLWxwdGhyZWFkX2Ri
ZwotLS0gMDcwMTI5L3NyYy9nbnUvdXNyLmJpbi9nZGI2L2FyY2gvYXJtL2luaXQuYwkyMDA2LTA1
LTI5IDEyOjUwOjAyLjAwMDAwMDAwMCAtMDcwMAorKysgbmV3L3NyYy9nbnUvdXNyLmJpbi9nZGI2
L2FyY2gvYXJtL2luaXQuYwkyMDA2LTEwLTI1IDE1OjQ0OjUzLjAwMDAwMDAwMCAtMDcwMApAQCAt
OSw2ICs5LDcgQEAKIGV4dGVybiBpbml0aWFsaXplX2ZpbGVfZnR5cGUgX2luaXRpYWxpemVfZ2Ri
dHlwZXM7CiBleHRlcm4gaW5pdGlhbGl6ZV9maWxlX2Z0eXBlIF9pbml0aWFsaXplX2FybV90ZGVw
OwogZXh0ZXJuIGluaXRpYWxpemVfZmlsZV9mdHlwZSBfaW5pdGlhbGl6ZV9hcm1fbmV0YnNkX3Rk
ZXA7CitleHRlcm4gaW5pdGlhbGl6ZV9maWxlX2Z0eXBlIF9pbml0aWFsaXplX25ic2RfdGhyZWFk
OwogZXh0ZXJuIGluaXRpYWxpemVfZmlsZV9mdHlwZSBfaW5pdGlhbGl6ZV9zb2xpYjsKIGV4dGVy
biBpbml0aWFsaXplX2ZpbGVfZnR5cGUgX2luaXRpYWxpemVfc3ZyNF9zb2xpYjsKIGV4dGVybiBp
bml0aWFsaXplX2ZpbGVfZnR5cGUgX2luaXRpYWxpemVfc2VyX2hhcmR3aXJlOwpAQCAtMTIyLDYg
KzEyMyw3IEBACiAgIF9pbml0aWFsaXplX2dkYnR5cGVzICgpOwogICBfaW5pdGlhbGl6ZV9hcm1f
dGRlcCAoKTsKICAgX2luaXRpYWxpemVfYXJtX25ldGJzZF90ZGVwICgpOworICBfaW5pdGlhbGl6
ZV9uYnNkX3RocmVhZCAoKTsKICAgX2luaXRpYWxpemVfc29saWIgKCk7CiAgIF9pbml0aWFsaXpl
X3N2cjRfc29saWIgKCk7CiAgIF9pbml0aWFsaXplX3Nlcl9oYXJkd2lyZSAoKTsKLS0tIDA3MDEy
OS9zcmMvbGliL2xpYnB0aHJlYWRfZGJnL3B0aHJlYWRfZGJnLmMJMjAwNi0xMi0yNCAxOTowMTo0
NC4wMDAwMDAwMDAgLTA4MDAKKysrIG5ldy9zcmMvbGliL2xpYnB0aHJlYWRfZGJnL3B0aHJlYWRf
ZGJnLmMJMjAwNy0wMS0zMSAxNDowNTo0Ny4wMDAwMDAwMDAgLTA4MDAKQEAgLTM2Nyw2ICszNjcs
MTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorY2FkZHJfdCB0ZF90aHJfZ2V0c3BlY2lmaWModGRfdGhy
ZWFkX3QgKnRocmVhZCkKK3sKK2NhZGRyX3QgdmFsOworCisJUkVBRCh0aHJlYWQtPnByb2MsIHRo
cmVhZC0+YWRkciArIG9mZnNldG9mKHN0cnVjdCBfX3B0aHJlYWRfc3QsIHB0X3NwZWNpZmljKSwg
JnZhbCwgc2l6ZW9mKHZhbCkpOworCXJldHVybiB2YWw7Cit9CisKIGludAogdGRfdGhyX2dldG5h
bWUodGRfdGhyZWFkX3QgKnRocmVhZCwgY2hhciAqbmFtZSwgaW50IGxlbikKIHsKQEAgLTEwOTks
NiArMTEwNyw3IEBACiAJdGRfdGhyZWFkX3QgKm50aHJlYWQgPSBOVUxMOyAvKiBYWFg6IEdDQyAq
LwogCXVjb250ZXh0X3QgdWMsICp1Y3A7CiAJc3RydWN0IHB0aHJlYWRfcXVldWVfdCBxaGVhZDsK
KwlpbnQgcHJpb3JpdHk7CiAKIAkvKiB2YWxpZGF0ZSB0aGUgdGhyZWFkICovCiAJdmFsID0gUkVB
RCh0aHJlYWQtPnByb2MsIHRocmVhZC0+YWRkciwgJnRtcCwgc2l6ZW9mKHRtcCkpOwpAQCAtMTEx
Nyw2ICsxMTI2LDE2IEBACiAJCXJldHVybiBURF9FUlJfQkFEVEhSRUFEOwogI2VuZGlmCiAKKwkv
KnJwb3BhbGluOiByZWFkIHRocmVhZCBwcmlvcml0eSovCisKKwlpZiAoKHZhbCA9IFJFQUQodGhy
ZWFkLT5wcm9jLCAKKwkgICAgdGhyZWFkLT5hZGRyICsgb2Zmc2V0b2Yoc3RydWN0IF9fcHRocmVh
ZF9zdCwgcHRfcHJpb3JpdHkpLCAKKwkgICAgJnByaW9yaXR5LCBzaXplb2YocHJpb3JpdHkpKSkg
IT0gMCkKKwkJcmV0dXJuIHZhbDsKKworCQorCWlmICgocHJpb3JpdHk8UFRfUFJJT1JJVFlfTE9X
RVNUKXx8KHByaW9yaXR5PlBUX1BSSU9SSVRZX0hJR0hFU1QpKQorCQlyZXR1cm4gVERfRVJSX0JB
RFRIUkVBRDsKIAkvKiBmaW5kIHRoZSB0aHJlYWQncyBjdXJyZW50IHN0YXRlICovCiAJaWYgKCh2
YWwgPSBSRUFEKHRocmVhZC0+cHJvYywgCiAJICAgIHRocmVhZC0+YWRkciArIG9mZnNldG9mKHN0
cnVjdCBfX3B0aHJlYWRfc3QsIHB0X2Jsb2NrZ2VuKSwgCkBAIC0xMTg2LDcgKzEyMDUsMTIgQEAK
IAkJICAgICZzcCwgc2l6ZW9mKHNwKSk7CiAJCQogCQkvKiBnZXQgYSB0aHJlYWQgZnJvbSB0aGUg
cnVucSBvciBpZGxlcSBhbmQgcHV0IGl0IG9uIHRoZSBjcHUgKi8KLQkJcWFkZHIgPSB0aHJlYWQt
PnByb2MtPnJ1bnFhZGRyOworCQkKKworCQlxYWRkciA9IChjYWRkcl90KSh0aHJlYWQtPnByb2Mt
PnJ1bnFhZGRyK3ByaW9yaXR5KnNpemVvZihzdHJ1Y3QgcHRocmVhZF9xdWV1ZV90KSk7CisKKwkJ
CisKIAkJdmFsID0gUkVBRCh0aHJlYWQtPnByb2MsIHFhZGRyLCAmcWhlYWQsIHNpemVvZihxaGVh
ZCkpOwogCQlpZiAodmFsICE9IDApCiAJCQlyZXR1cm4gdmFsOwpAQCAtMTIzNiw3ICsxMjYwLDgg
QEAKICNpZmRlZiBQVEhSRUFEX1NBCiAJY2FzZSBQVF9TVEFURV9SVU5OQUJMRToKIAkJLyogcmVt
b3ZlIGZyb20gcnVucSAqLwotCQlEUFRRX1JFTU9WRSh0aHJlYWQtPnByb2MtPnJ1bnFhZGRyLCB0
aHJlYWQtPmFkZHIsIHB0X3J1bnEpOworCQlxYWRkcj0oY2FkZHJfdCkodGhyZWFkLT5wcm9jLT5y
dW5xYWRkcitwcmlvcml0eSpzaXplb2Yoc3RydWN0IHB0aHJlYWRfcXVldWVfdCkpOworCQlEUFRR
X1JFTU9WRShxYWRkciwgdGhyZWFkLT5hZGRyLCBwdF9ydW5xKTsKIAkJYnJlYWs7CiAJY2FzZSBQ
VF9TVEFURV9CTE9DS0VEX1FVRVVFOgogCQkvKiByZW1vdmUgZnJvbSB0aGUgcGFydGljdWxhciBz
bGVlcHEgKi8KQEAgLTEyODcsNyArMTMxMiw4IEBACiBpbnQKIHRkX3Rocl9yZXN1bWUodGRfdGhy
ZWFkX3QgKnRocmVhZCkKIHsKLQlpbnQgdG1wLCB0bXAxLCB2YWw7CisJaW50IHRtcCwgdG1wMSwg
dmFsLCBwcmlvcml0eTsKKwljYWRkcl90IHFhZGRyOwogCiAJLyogdmFsaWRhdGUgdGhlIHRocmVh
ZCAqLwogCXZhbCA9IFJFQUQodGhyZWFkLT5wcm9jLCB0aHJlYWQtPmFkZHIsICZ0bXAsIHNpemVv
Zih0bXApKTsKQEAgLTEyOTYsNiArMTMyMiwxNSBAQAogCWlmICh0bXAgIT0gUFRfTUFHSUMpCiAJ
CXJldHVybiBURF9FUlJfQkFEVEhSRUFEOwogCisJaWYgKCh2YWwgPSBSRUFEKHRocmVhZC0+cHJv
YywgCisJICAgIHRocmVhZC0+YWRkciArIG9mZnNldG9mKHN0cnVjdCBfX3B0aHJlYWRfc3QsIHB0
X3ByaW9yaXR5KSwgCisJICAgICZwcmlvcml0eSwgc2l6ZW9mKHByaW9yaXR5KSkpICE9IDApCisJ
CXJldHVybiB2YWw7CisKKwkKKwlpZiAoKHByaW9yaXR5PFBUX1BSSU9SSVRZX0xPV0VTVCl8fChw
cmlvcml0eT5QVF9QUklPUklUWV9ISUdIRVNUKSkKKwkJcmV0dXJuIFREX0VSUl9CQURUSFJFQUQ7
CisKIAkvKiBjbGVhciBmbGFnICovCiAJdmFsID0gUkVBRCh0aHJlYWQtPnByb2MsIHRocmVhZC0+
YWRkciArCiAJICAgIG9mZnNldG9mKHN0cnVjdCBfX3B0aHJlYWRfc3QsIHB0X2ZsYWdzKSwKQEAg
LTEzMzQsNyArMTM2OSw4IEBACiAJCXZhbCA9IFdSSVRFKHRocmVhZC0+cHJvYywgCiAJCSAgICB0
aHJlYWQtPmFkZHIgKyBvZmZzZXRvZihzdHJ1Y3QgX19wdGhyZWFkX3N0LCBwdF9zdGF0ZSksIAog
CQkgICAgJnRtcCwgc2l6ZW9mKHRtcCkpOwotCQlEUFRRX0lOU0VSVF9UQUlMKHRocmVhZC0+cHJv
Yy0+cnVucWFkZHIsIHRocmVhZC0+YWRkciwgcHRfcnVucSk7CisJCXFhZGRyPShjYWRkcl90KSAo
dGhyZWFkLT5wcm9jLT5ydW5xYWRkcitwcmlvcml0eSpzaXplb2Yoc3RydWN0IHB0aHJlYWRfcXVl
dWVfdCkpOworCQlEUFRRX0lOU0VSVF9UQUlMKHFhZGRyLCB0aHJlYWQtPmFkZHIsIHB0X3J1bnEp
OwogCX0KICNlbmRpZgkKIAkJCg==
--=-=-=--