All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v7] Add new mac80211 driver mwlwifi.
@ 2015-11-12  3:51 David Lin
  2015-11-12 19:47 ` Jes Sorensen
                   ` (6 more replies)
  0 siblings, 7 replies; 26+ messages in thread
From: David Lin @ 2015-11-12  3:51 UTC (permalink / raw)
  To: Kalle Valo; +Cc: Johannes Berg, linux-wireless, Chor Teck Law, Pete Hsieh

VGhpcyBwYXRjaCBwcm92aWRlcyB0aGUgbXdsd2lmaSBkcml2ZXIgZm9yIE1hcnZlbGwgODg2Mywg
ODg2NCBhbmQgODg5Nw0KY2hpcHNldHMuDQpUaGlzIGRyaXZlciB3YXMgZGV2ZWxvcGVkIGFzIHBh
cnQgb2YgdGhlIG9wZW53cnQub3JnIHByb2plY3QgdG8gc3VwcG9ydA0KTGlua3N5cyBXUlQxOTAw
QUMgYW5kIGlzIG1haW50YWluZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2thbG96L213bHdpZmku
DQoNClRoZSBtd2x3aWZpIGRyaXZlciBkaWZmZXJzIGZyb20gZXhpc3RpbmcgbXdpZmlleCBkcml2
ZXI6DQpvIG13bHdpZmkgaXMgYSAic29mdG1hYyBkcml2ZXIiIHVzaW5nIHRoZSBrZXJuZWw/7qiD
IG1hYzgwMi4xMSBzdWJzeXN0ZW0NCnRvIHByb3ZpZGUgZnVsbCBBUC9XaXJlbGVzcyBCcmlkZ2Ug
ZnVuY3Rpb25hbGl0eSAocm91dGVycykuDQpvIG13aWZpZXggaXMgYSAiZnVsbG1hYyBkcml2ZXIi
IHdoaWNoIHByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSBzZXQgb2YNCmNsaWVudCBmdW5jdGlvbnMg
KGxhcHRvcHMvZW1iZWRkZWQgZGV2aWNlcykNCm8gb25seSBtd2x3aWZpIHN1cHBvcnRzIE1hcnZl
bGwgQVAgY2hpcCA4ODZYIHNlcmllcw0KDQpOT1RFOiBVc2VycyB3aXRoIE1hcnZlbGwgODhXODg5
NyBjaGlwc2V0cyBjdXJyZW50bHkgc2hvdWxkIGVuYWJsZQ0KKENPTkZJRz1ZIG9yIE0pIGVpdGhl
ciBDT05GSUdfTVdJRklFWCBvciBDT05GSUdfTVdMV0lGSSwgTk9UIEJPVEguDQoNCm13bHdpZmkg
ZHJpdmVyIGxldmVyYWdlZCBjb2RlIGZyb20gZXhpc3RpbmcgTVdMOEsgZHJpdmVyIGluIHRoZQ0K
Zm9sbG93aW5nIGFyZWFzOg0KLSA4MDIuMTFuIHNldHRpbmcgZm9yIG1hYzgwMjExDQotIEZ1bmN0
aW9ucyBuZWVkZWQgdG8gaG9vayB1cCB0byBtYWM4MDIxMQ0KLSBJbnRlcmFjdGlvbnMgd2l0aCBt
YWM4MDIxMSB0byBlc3RhYmxpc2ggQkEgc3RyZWFtcw0KLSBQYXJ0aWFsIGZpcm13YXJlIEFQSXMs
IHNvbWUgZGF0YSBmaWVsZHMNCi0gTWV0aG9kIHRvIHBhc3MgUnggcGFja2V0cyB0byBtYWM4MDIx
MSBleGNlcHQgMTFhYyByYXRlcw0KDQpJbiBhZGRpdGlvbiwgbXdsd2lmaSBkcml2ZXIgc3VwcG9y
dHM6DQotIGZ1dHVyZSBzY2FsYWJpbGl0eSBhbmQgZnV0dXJlIGRldmVsb3BtZW50IChyZWZhY3Rv
cmVkIHNvdXJjZSBjb2RlKQ0KLSBNYXJ2ZWxsIDgwMi4xMWFjIGNoaXBzZXRzLCBpbmNsdWRpbmcg
Y29tYm8gQlQgZGV2aWNlcw0KLSA4MDIuMTFhYyByZWxhdGVkIHNldHRpbmdzIGFuZCBmdW5jdGlv
bnMNCi0gY29uY3VycmVudCBBUCtTVEEgZnVuY3Rpb25hbGl0aWVzIHdpdGggc2luZ2xlIGZpcm13
YXJlIHBlciBjaGlwDQotIGZpcm13YXJlIEFQSXMgZm9yIHRoZSBzdXBwb3J0ZWQgY2hpcHNldA0K
LSBjb21tdW5pY2F0aW5nIG5ldyBtYWM4MDIxMSBzZXR0aW5ncyB0byBmaXJtd2FyZQ0KLSBEaWZm
ZXJlbnQgVFgvUlggZGF0YXBhdGggd2hlcmUgYXBwbGljYWJsZQ0KLSBBLU1TRFUgYW5kIEEtTVBE
VQ0KLSBtYWM4MDIxMS1iYXNlZCBNRVNIICh3b3JrIGluIHByb2dyZXNzKQ0KLSBSZWZpbmVkIHRo
ZSBjb2RlIHRvIGVzdGFibGlzaCBCQSBzdHJlYW1zDQoNCk5PVEU6IE1XTFdJRkkgd2lsbCBiZSBv
cmdhbml6ZWQgdW5kZXIgbmV3IHZlbmRvciBzcGVjaWZpYyBmb2xkZXIvbWFydmVsbCwNCmFzIHBl
ciByZXF1ZXN0IG9mIHRoZSBnYXRlIGtlZXBlciBhbmQgY29tbXVuaXR5Lg0KDQpTaWduZWQtb2Zm
LWJ5OiBEYXZpZCBMaW4gPGRsaW5AbWFydmVsbC5jb20+DQotLS0NCiBNQUlOVEFJTkVSUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKw0KIGRyaXZlcnMvbmV0L3dp
cmVsZXNzL0tjb25maWcgICAgICAgICAgICAgICAgICAgIHwgICAgMSArDQogZHJpdmVycy9uZXQv
d2lyZWxlc3MvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgfCAgICAyICsNCiBkcml2ZXJzL25l
dC93aXJlbGVzcy9tYXJ2ZWxsL0tjb25maWcgICAgICAgICAgICB8ICAgIDggKw0KIGRyaXZlcnMv
bmV0L3dpcmVsZXNzL21hcnZlbGwvTWFrZWZpbGUgICAgICAgICAgIHwgICAgMSArDQogZHJpdmVy
cy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL0tjb25maWcgICAgfCAgIDIzICsNCiBkcml2
ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvTWFrZWZpbGUgICB8ICAgMTIgKw0KIGRy
aXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9kZWJ1Z2ZzLmMgIHwgIDQzMyArKysr
DQogZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL2RlYnVnZnMuaCAgfCAgIDI0
ICsNCiBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvZGV2LmggICAgICB8ICA0
NzcgKysrKysNCiBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvZndjbWQuYyAg
ICB8IDI0MjEgKysrKysrKysrKysrKysrKysrKysrKysNCiBkcml2ZXJzL25ldC93aXJlbGVzcy9t
YXJ2ZWxsL213bHdpZmkvZndjbWQuaCAgICB8ICAxOTggKysNCiBkcml2ZXJzL25ldC93aXJlbGVz
cy9tYXJ2ZWxsL213bHdpZmkvZndkbC5jICAgICB8ICAxOTkgKysNCiBkcml2ZXJzL25ldC93aXJl
bGVzcy9tYXJ2ZWxsL213bHdpZmkvZndkbC5oICAgICB8ICAgMjUgKw0KIGRyaXZlcnMvbmV0L3dp
cmVsZXNzL21hcnZlbGwvbXdsd2lmaS9ob3N0Y21kLmggIHwgIDc4NiArKysrKysrKw0KIGRyaXZl
cnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9pc3IuYyAgICAgIHwgIDE1MCArKw0KIGRy
aXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9pc3IuaCAgICAgIHwgICAyNiArDQog
ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL21hYzgwMjExLmMgfCAgNjk5ICsr
KysrKysNCiBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvbWFpbi5jICAgICB8
ICA3MzkgKysrKysrKw0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9yeC5j
ICAgICAgIHwgIDYyNCArKysrKysNCiBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdp
ZmkvcnguaCAgICAgICB8ICAgMjUgKw0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXds
d2lmaS9zeXNhZHB0LmggIHwgICA3MyArDQogZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9t
d2x3aWZpL3R4LmMgICAgICAgfCAxMjUxICsrKysrKysrKysrKw0KIGRyaXZlcnMvbmV0L3dpcmVs
ZXNzL21hcnZlbGwvbXdsd2lmaS90eC5oICAgICAgIHwgICAzNiArDQogMjQgZmlsZXMgY2hhbmdl
ZCwgODIzOSBpbnNlcnRpb25zKCspDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dp
cmVsZXNzL21hcnZlbGwvS2NvbmZpZw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93
aXJlbGVzcy9tYXJ2ZWxsL01ha2VmaWxlDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0
L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9LY29uZmlnDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy
aXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9NYWtlZmlsZQ0KIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvZGVidWdmcy5jDQog
Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9k
ZWJ1Z2ZzLmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVs
bC9td2x3aWZpL2Rldi5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNz
L21hcnZlbGwvbXdsd2lmaS9md2NtZC5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0
L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9md2NtZC5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy
aXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9md2RsLmMNCiBjcmVhdGUgbW9kZSAx
MDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL2Z3ZGwuaA0KIGNyZWF0
ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvaG9zdGNt
ZC5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXds
d2lmaS9pc3IuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2
ZWxsL213bHdpZmkvaXNyLmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxl
c3MvbWFydmVsbC9td2x3aWZpL21hYzgwMjExLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy
cy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL21haW4uYw0KIGNyZWF0ZSBtb2RlIDEwMDY0
NCBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvcnguYw0KIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvcnguaA0KIGNyZWF0
ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvc3lzYWRw
dC5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXds
d2lmaS90eC5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZl
bGwvbXdsd2lmaS90eC5oDQoNCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJT
DQppbmRleCAyN2IyN2MwLi43YzMyZjBhIDEwMDY0NA0KLS0tIGEvTUFJTlRBSU5FUlMNCisrKyBi
L01BSU5UQUlORVJTDQpAQCAtNjYyOSw2ICs2NjI5LDEyIEBAIEw6CWxpbnV4LXdpcmVsZXNzQHZn
ZXIua2VybmVsLm9yZw0KIFM6CU9kZCBGaXhlcw0KIEY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL213
bDhrLmMNCiANCitNQVJWRUxMIE1XTFdJRkkgV0lSRUxFU1MgRFJJVkVSDQorTToJRGF2aWQgTGlu
IDxkbGluQG1hcnZlbGwuY29tPg0KK0w6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZw0K
K1M6CU1haW50YWluZWQNCitGOglkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkN
CisNCiBNQVJWRUxMIFNPQyBNTUMvU0QvU0RJTyBDT05UUk9MTEVSIERSSVZFUg0KIE06CU5pY29s
YXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+DQogUzoJT2RkIEZpeGVzDQpkaWZmIC0tZ2l0IGEv
ZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25m
aWcNCmluZGV4IGY5Zjk0MjIuLmQ1OTliMzUgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL25ldC93aXJl
bGVzcy9LY29uZmlnDQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnDQpAQCAtMjg1
LDUgKzI4NSw2IEBAIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvS2NvbmZp
ZyINCiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvS2NvbmZpZyINCiBzb3Vy
Y2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL2N3MTIwMC9LY29uZmlnIg0KIHNvdXJjZSAiZHJpdmVy
cy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWciDQorc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVz
cy9tYXJ2ZWxsL0tjb25maWciDQogDQogZW5kaWYgIyBXTEFODQpkaWZmIC0tZ2l0IGEvZHJpdmVy
cy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZQ0K
aW5kZXggNzQwZmRkMy4uNzE1MDRhNyAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNz
L01ha2VmaWxlDQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZQ0KQEAgLTYwLDMg
KzYwLDUgQEAgb2JqLSQoQ09ORklHX0JSQ01TTUFDKQkrPSBicmNtODAyMTEvDQogDQogb2JqLSQo
Q09ORklHX0NXMTIwMCkJKz0gY3cxMjAwLw0KIG9iai0kKENPTkZJR19SU0lfOTFYKQkrPSByc2kv
DQorDQorb2JqLSQoQ09ORklHX1dMX01BUlZFTEwpCSs9IG1hcnZlbGwvDQpkaWZmIC0tZ2l0IGEv
ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxl
c3MvbWFydmVsbC9LY29uZmlnDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4u
ZDczZTY0Mg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVs
bC9LY29uZmlnDQpAQCAtMCwwICsxLDggQEANCittZW51Y29uZmlnIFdMX01BUlZFTEwNCisJYm9v
bCAiTWFydmVsbCBXaXJlbGVzcyBMQU4gc3VwcG9ydCINCisJLS0taGVscC0tLQ0KKwkgIEVuYWJs
ZSBjb21tdW5pdHkgZHJpdmVycyBmb3IgTWFydmVsbCBXaS1GaSBkZXZpY2VzLg0KKw0KK2lmIFdM
X01BUlZFTEwNCitzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9L
Y29uZmlnIg0KK2VuZGlmICMgV0xfTUFSVkVMTA0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dp
cmVsZXNzL21hcnZlbGwvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL01h
a2VmaWxlDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uNzBkMWIzZg0KLS0t
IC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9NYWtlZmlsZQ0K
QEAgLTAsMCArMSBAQA0KK29iai0kKENPTkZJR19NV0xXSUZJKQkrPSBtd2x3aWZpLw0KZGlmZiAt
LWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9LY29uZmlnIGIvZHJp
dmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL0tjb25maWcNCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0DQppbmRleCAwMDAwMDAwLi5hOWJjYjljDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2
ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvS2NvbmZpZw0KQEAgLTAsMCArMSwyMyBA
QA0KK2NvbmZpZyBNV0xXSUZJDQorCXRyaXN0YXRlICJNYXJ2ZWxsIEF2YXN0YXIgODhXODg2NC84
OFc4ODk3IFBDSWUgZHJpdmVyIChtYWM4MDIxMSBjb21wYXRpYmxlKSINCisJZGVwZW5kcyBvbiBQ
Q0kgJiYgTUFDODAyMTENCisJc2VsZWN0IEZXX0xPQURFUg0KKwktLS1oZWxwLS0tDQorCQlTZWxl
Y3QgdG8gYnVpbGQgdGhlIGRyaXZlciBzdXBwb3J0aW5nIHRoZToNCisNCisJCU1hcnZlbGwgV2ly
ZWxlc3MgV2ktRmkgODhXODg2NCBtb2R1bGVzDQorCQlNYXJ2ZWxsIFdpcmVsZXNzIFdpLUZpIDg4
Vzg4OTcgbW9kdWxlcw0KKw0KKwkJVGhpcyBkcml2ZXIgdXNlcyB0aGUga2VybmVsJ3MgbWFjODAy
MTEgc3Vic3lzdGVtLg0KKw0KKwkJSWYgeW91IHdhbnQgdG8gY29tcGlsZSB0aGUgZHJpdmVyIGFz
IGEgbW9kdWxlICg9IGNvZGUgd2hpY2ggY2FuIGJlDQorCQlpbnNlcnRlZCBpbiBhbmQgcmVtb3Zl
ZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3Ugd2FudCksDQorCQlzYXkgTSBo
ZXJlIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0Pi4gIFRo
ZQ0KKwkJbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG13bHdpZmkuDQorDQorCQlOT1RFOiBTZWxlY3Rp
bmcgdGhpcyBkcml2ZXIgbWF5IGNhdXNlIGNvbmZsaWN0IHdpdGggTVdJRklFWCBkcml2ZXINCisJ
CXRoYXQgYWxzbyBvcGVyYXRlcyBvbiB0aGUgc2FtZSBwYXJ0IG51bWJlciA4OFc4ODk3LiBVc2Vy
cyBzaG91bGQNCisJCXNlbGVjdCBlaXRoZXIgTVdJRklFWCBvciBNV0xXSUZJLCBub3QgYm90aC4g
TVdJRklFWCBpcyBmdWxsbWFjLA0KKwkJc3VwcG9ydGluZyBtb3JlIGNvbXByZWhlbnNpdmUgY2xp
ZW50IGZ1bmN0aW9ucyBmb3IgbGFwdG9wcy9lbWJlZGRlZA0KKwkJZGV2aWNlcy4gTVdMV0lGSSBp
cyBtYWM4MDIxMS1iYXNlZCBmb3IgZnVsbCBBUC9XaXJlbGVzcyBCcmlkZ2UuDQorDQpkaWZmIC0t
Z2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL01ha2VmaWxlIGIvZHJp
dmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL01ha2VmaWxlDQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uODhmN2VmZA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJp
dmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL01ha2VmaWxlDQpAQCAtMCwwICsxLDEy
IEBADQorb2JqLSQoQ09ORklHX01XTFdJRkkpCSs9IG13bHdpZmkubw0KKw0KK213bHdpZmktb2Jq
cwkJKz0gbWFpbi5vDQorbXdsd2lmaS1vYmpzCQkrPSBtYWM4MDIxMS5vDQorbXdsd2lmaS1vYmpz
CQkrPSBmd2RsLm8NCittd2x3aWZpLW9ianMJCSs9IGZ3Y21kLm8NCittd2x3aWZpLW9ianMJCSs9
IHR4Lm8NCittd2x3aWZpLW9ianMJCSs9IHJ4Lm8NCittd2x3aWZpLW9ianMJCSs9IGlzci5vDQor
bXdsd2lmaS0kKENPTkZJR19ERUJVR19GUykgKz0gZGVidWdmcy5vDQorDQorY2NmbGFncy15ICs9
IC1EX19DSEVDS19FTkRJQU5fXw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21h
cnZlbGwvbXdsd2lmaS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213
bHdpZmkvZGVidWdmcy5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uOTk3
NDYxYQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9t
d2x3aWZpL2RlYnVnZnMuYw0KQEAgLTAsMCArMSw0MzMgQEANCisvKg0KKyAqIENvcHlyaWdodCAo
QykgMjAwNi0yMDE1LCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLg0KKyAqDQorICogVGhpcyBz
b2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVy
bmF0aW9uYWwNCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTENCisgKiAodGhlICJMaWNlbnNlIikuICBZ
b3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluDQorICog
YWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwg
YSBjb3B5IG9mIHdoaWNoDQorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KKyAqDQorICogVEhFIEZJTEUgSVMgRElTVFJJQlVU
RUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUNCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFDQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2Ug
cHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0DQorICogdGhpcyB3YXJyYW50eSBkaXNj
bGFpbWVyLg0KKyAqLw0KKw0KKy8qIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGltcGxlbWVudHMg
ZGVidWcgZnMgcmVsYXRlZCBmdW5jdGlvbnMuICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2RlYnVn
ZnMuaD4NCisNCisjaW5jbHVkZSAic3lzYWRwdC5oIg0KKyNpbmNsdWRlICJkZXYuaCINCisjaW5j
bHVkZSAiaG9zdGNtZC5oIg0KKyNpbmNsdWRlICJmd2NtZC5oIg0KKyNpbmNsdWRlICJkZWJ1Z2Zz
LmgiDQorDQorI2RlZmluZSBNV0xXSUZJX0RFQlVHRlNfQUREX0ZJTEUobmFtZSkgZG8geyBcDQor
CWlmICghZGVidWdmc19jcmVhdGVfZmlsZSgjbmFtZSwgMDY0NCwgcHJpdi0+ZGVidWdmc19waHks
IFwNCisJCQkJIHByaXYsICZtd2xfZGVidWdmc18jI25hbWUjI19mb3BzKSkgXA0KKwkJcmV0dXJu
OyBcDQorfSB3aGlsZSAoMCkNCisNCisjZGVmaW5lIE1XTFdJRklfREVCVUdGU19GSUxFX09QUyhu
YW1lKSBcDQorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbXdsX2RlYnVnZnNf
IyNuYW1lIyNfZm9wcyA9IHsgXA0KKwkucmVhZCA9IG13bF9kZWJ1Z2ZzXyMjbmFtZSMjX3JlYWQs
IFwNCisJLndyaXRlID0gbXdsX2RlYnVnZnNfIyNuYW1lIyNfd3JpdGUsIFwNCisJLm9wZW4gPSBz
aW1wbGVfb3BlbiwgXA0KK30NCisNCisjZGVmaW5lIE1XTFdJRklfREVCVUdGU19GSUxFX1JFQURf
T1BTKG5hbWUpIFwNCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtd2xfZGVi
dWdmc18jI25hbWUjI19mb3BzID0geyBcDQorCS5yZWFkID0gbXdsX2RlYnVnZnNfIyNuYW1lIyNf
cmVhZCwgXA0KKwkub3BlbiA9IHNpbXBsZV9vcGVuLCBcDQorfQ0KKw0KKyNkZWZpbmUgTVdMV0lG
SV9ERUJVR0ZTX0ZJTEVfV1JJVEVfT1BTKG5hbWUpIFwNCitzdGF0aWMgY29uc3Qgc3RydWN0IGZp
bGVfb3BlcmF0aW9ucyBtd2xfZGVidWdmc18jI25hbWUjI19mb3BzID0geyBcDQorCS53cml0ZSA9
IG13bF9kZWJ1Z2ZzXyMjbmFtZSMjX3dyaXRlLCBcDQorCS5vcGVuID0gc2ltcGxlX29wZW4sIFwN
Cit9DQorDQorc3RhdGljIGludCBwcmludF9tYWNfYWRkcihjaGFyICpwLCB1OCAqbWFjX2FkZHIp
DQorew0KKwlpbnQgaTsNCisJY2hhciAqc3RyID0gcDsNCisNCisJc3RyICs9IHNwcmludGYoc3Ry
LCAibWFjIGFkZHJlc3M6ICUwMngiLCBtYWNfYWRkclswXSk7DQorCWZvciAoaSA9IDE7IGkgPCBF
VEhfQUxFTjsgaSsrKQ0KKwkJc3RyICs9IHNwcmludGYoc3RyLCAiOiUwMngiLCBtYWNfYWRkcltp
XSk7DQorCXN0ciArPSBzcHJpbnRmKHN0ciwgIlxuIik7DQorDQorCXJldHVybiAoc3RyIC0gcCk7
DQorfQ0KKw0KK3N0YXRpYyBpbnQgZHVtcF9kYXRhKGNoYXIgKnAsIHU4ICpkYXRhLCBpbnQgbGVu
LCBjaGFyICp0aXRsZSkNCit7DQorCWNoYXIgKnN0ciA9IHA7DQorCWludCBjdXJfYnl0ZSA9IDA7
DQorCWludCBpOw0KKw0KKwlzdHIgKz0gc3ByaW50ZihzdHIsICIlc1xuIiwgdGl0bGUpOw0KKwlm
b3IgKGN1cl9ieXRlID0gMDsgY3VyX2J5dGUgPCBsZW47IGN1cl9ieXRlICs9IDgpIHsNCisJCWlm
ICgoY3VyX2J5dGUgKyA4KSA8IGxlbikgew0KKwkJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspDQor
CQkJCXN0ciArPSBzcHJpbnRmKHN0ciwgIjB4JTAyeCAiLA0KKwkJCQkJICAgICAgICooZGF0YSAr
IGN1cl9ieXRlICsgaSkpOw0KKwkJCXN0ciArPSBzcHJpbnRmKHN0ciwgIlxuIik7DQorCQl9IGVs
c2Ugew0KKwkJCWZvciAoaSA9IDA7IGkgPCAobGVuIC0gY3VyX2J5dGUpOyBpKyspDQorCQkJCXN0
ciArPSBzcHJpbnRmKHN0ciwgIjB4JTAyeCAiLA0KKwkJCQkJICAgICAgICooZGF0YSArIGN1cl9i
eXRlICsgaSkpOw0KKwkJCXN0ciArPSBzcHJpbnRmKHN0ciwgIlxuIik7DQorCQkJYnJlYWs7DQor
CQl9DQorCX0NCisNCisJcmV0dXJuIChzdHIgLSBwKTsNCit9DQorDQorc3RhdGljIHNzaXplX3Qg
bXdsX2RlYnVnZnNfaW5mb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdWJ1
ZiwNCisJCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykNCit7DQorCXN0cnVjdCBt
d2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgbXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7DQor
CXVuc2lnbmVkIGxvbmcgcGFnZSA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsNCisJY2hh
ciAqcCA9IChjaGFyICopcGFnZTsNCisJc3NpemVfdCByZXQ7DQorDQorCWlmICghcCkNCisJCXJl
dHVybiAtRU5PTUVNOw0KKw0KKwlwICs9IHNwcmludGYocCwgIlxuIik7DQorCXAgKz0gc3ByaW50
ZihwLCAiZHJpdmVyIG5hbWU6ICVzXG4iLCBNV0xfRFJWX05BTUUpOw0KKwlwICs9IHNwcmludGYo
cCwgImNoaXAgdHlwZTogJXNcbiIsDQorCQkgICAgIChwcml2LT5jaGlwX3R5cGUgPT0gTVdMODg2
NCkgPyAiODhXODg2NCIgOiAiODhXODg5NyIpOw0KKwlwICs9IHNwcmludGYocCwgImh3IHZlcnNp
b246ICVYXG4iLCBwcml2LT5od19kYXRhLmh3X3ZlcnNpb24pOw0KKwlwICs9IHNwcmludGYocCwg
ImRyaXZlciB2ZXJzaW9uOiAlc1xuIiwgTVdMX0RSVl9WRVJTSU9OKTsNCisJcCArPSBzcHJpbnRm
KHAsICJmaXJtd2FyZSB2ZXJzaW9uOiAweCUwOHhcbiIsDQorCQkgICAgIHByaXYtPmh3X2RhdGEu
ZndfcmVsZWFzZV9udW0pOw0KKwlwICs9IHByaW50X21hY19hZGRyKHAsIHByaXYtPmh3X2RhdGEu
bWFjX2FkZHIpOw0KKwlwICs9IHNwcmludGYocCwgIjJnOiAlc1xuIiwgcHJpdi0+ZGlzYWJsZV8y
ZyA/ICJkaXNhYmxlIiA6ICJlbmFibGUiKTsNCisJcCArPSBzcHJpbnRmKHAsICI1ZzogJXNcbiIs
IHByaXYtPmRpc2FibGVfNWcgPyAiZGlzYWJsZSIgOiAiZW5hYmxlIik7DQorCXAgKz0gc3ByaW50
ZihwLCAiYW50ZW5uYTogJWQgJWRcbiIsDQorCQkgICAgIChwcml2LT5hbnRlbm5hX3R4ID09IEFO
VEVOTkFfVFhfNF9BVVRPKSA/IDQgOiAyLA0KKwkJICAgICAocHJpdi0+YW50ZW5uYV9yeCA9PSBB
TlRFTk5BX1RYXzRfQVVUTykgPyA0IDogMik7DQorCXAgKz0gc3ByaW50ZihwLCAiaXJxIG51bWJl
cjogJWRcbiIsIHByaXYtPmlycSk7DQorCXAgKz0gc3ByaW50ZihwLCAiaW9iYXNlMDogJXBcbiIs
IHByaXYtPmlvYmFzZTApOw0KKwlwICs9IHNwcmludGYocCwgImlvYmFzZTE6ICVwXG4iLCBwcml2
LT5pb2Jhc2UxKTsNCisJcCArPSBzcHJpbnRmKHAsICJ0eCBsaW1pdDogJWRcbiIsIHByaXYtPnR4
cV9saW1pdCk7DQorCXAgKz0gc3ByaW50ZihwLCAicnggbGltaXQ6ICVkXG4iLCBwcml2LT5yZWN2
X2xpbWl0KTsNCisJcCArPSBzcHJpbnRmKHAsICJhcCBtYWNpZCBzdXBwb3J0OiAlMDh4XG4iLA0K
KwkJICAgICBwcml2LT5hcF9tYWNpZHNfc3VwcG9ydGVkKTsNCisJcCArPSBzcHJpbnRmKHAsICJz
dGEgbWFjaWQgc3VwcG9ydDogJTA4eFxuIiwNCisJCSAgICAgcHJpdi0+c3RhX21hY2lkc19zdXBw
b3J0ZWQpOw0KKwlwICs9IHNwcmludGYocCwgIm1hY2lkIHVzZWQ6ICUwOHhcbiIsIHByaXYtPm1h
Y2lkc191c2VkKTsNCisJcCArPSBzcHJpbnRmKHAsICJtZmcgbW9kZTogJXNcbiIsIHByaXYtPm1m
Z19tb2RlID8gInRydWUiIDogImZhbHNlIik7DQorCXAgKz0gc3ByaW50ZihwLCAiXG4iKTsNCisN
CisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY291bnQsIHBwb3MsIChjaGFy
ICopcGFnZSwNCisJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcpcCAtIHBhZ2UpOw0KKwlmcmVlX3Bh
Z2UocGFnZSk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBzc2l6ZV90IG13bF9k
ZWJ1Z2ZzX3ZpZl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdWJ1ZiwNCisJ
CQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQ0KK3sNCisJc3RydWN0IG13bF9wcml2
ICpwcml2ID0gKHN0cnVjdCBtd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsNCisJdW5zaWdu
ZWQgbG9uZyBwYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOw0KKwljaGFyICpwID0g
KGNoYXIgKilwYWdlOw0KKwlzdHJ1Y3QgbXdsX3ZpZiAqbXdsX3ZpZjsNCisJc3RydWN0IGllZWU4
MDIxMV92aWYgKnZpZjsNCisJY2hhciBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU4gKyAxXTsN
CisJc3NpemVfdCByZXQ7DQorDQorCWlmICghcCkNCisJCXJldHVybiAtRU5PTUVNOw0KKw0KKwlw
ICs9IHNwcmludGYocCwgIlxuIik7DQorCXNwaW5fbG9ja19iaCgmcHJpdi0+dmlmX2xvY2spOw0K
KwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG13bF92aWYsICZwcml2LT52aWZfbGlzdCwgbGlzdCkgew0K
KwkJdmlmID0gY29udGFpbmVyX29mKChjaGFyICopbXdsX3ZpZiwgc3RydWN0IGllZWU4MDIxMV92
aWYsDQorCQkJCSAgIGRydl9wcml2WzBdKTsNCisJCXAgKz0gc3ByaW50ZihwLCAibWFjaWQ6ICVk
XG4iLCBtd2xfdmlmLT5tYWNpZCk7DQorCQlzd2l0Y2ggKHZpZi0+dHlwZSkgew0KKwkJY2FzZSBO
TDgwMjExX0lGVFlQRV9BUDoNCisJCQlwICs9IHNwcmludGYocCwgInR5cGU6IGFwXG4iKTsNCisJ
CQltZW1jcHkoc3NpZCwgdmlmLT5ic3NfY29uZi5zc2lkLA0KKwkJCSAgICAgICB2aWYtPmJzc19j
b25mLnNzaWRfbGVuKTsNCisJCQlzc2lkW3ZpZi0+YnNzX2NvbmYuc3NpZF9sZW5dID0gMDsNCisJ
CQlwICs9IHNwcmludGYocCwgInNzaWQ6ICVzXG4iLCBzc2lkKTsNCisJCQlwICs9IHByaW50X21h
Y19hZGRyKHAsIG13bF92aWYtPmJzc2lkKTsNCisJCQlicmVhazsNCisJCWNhc2UgTkw4MDIxMV9J
RlRZUEVfTUVTSF9QT0lOVDoNCisJCQlwICs9IHNwcmludGYocCwgInR5cGU6IG1lc2hcbiIpOw0K
KwkJCXAgKz0gcHJpbnRfbWFjX2FkZHIocCwgbXdsX3ZpZi0+YnNzaWQpOw0KKwkJCWJyZWFrOw0K
KwkJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOg0KKwkJCXAgKz0gc3ByaW50ZihwLCAidHlw
ZTogc3RhXG4iKTsNCisJCQlwICs9IHByaW50X21hY19hZGRyKHAsIG13bF92aWYtPnN0YV9tYWMp
Ow0KKwkJCWJyZWFrOw0KKwkJZGVmYXVsdDoNCisJCQlwICs9IHNwcmludGYocCwgInR5cGU6IHVu
a25vd25cbiIpOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKwkJcCArPSBzcHJpbnRmKHAsICJod19jcnlw
dG9fZW5hYmxlZDogJXNcbiIsDQorCQkJICAgICBtd2xfdmlmLT5pc19od19jcnlwdG9fZW5hYmxl
ZCA/ICJ0cnVlIiA6ICJmYWxzZSIpOw0KKwkJcCArPSBzcHJpbnRmKHAsICJrZXkgaWR4OiAlZFxu
IiwgbXdsX3ZpZi0+a2V5aWR4KTsNCisJCXAgKz0gc3ByaW50ZihwLCAiSVY6ICUwOHglMDR4XG4i
LCBtd2xfdmlmLT5pdjMyLCBtd2xfdmlmLT5pdjE2KTsNCisJCXAgKz0gZHVtcF9kYXRhKHAsIG13
bF92aWYtPmJlYWNvbl9pbmZvLmllX3dtbV9wdHIsDQorCQkJICAgICAgIG13bF92aWYtPmJlYWNv
bl9pbmZvLmllX3dtbV9sZW4sICJXTU06Iik7DQorCQlwICs9IGR1bXBfZGF0YShwLCBtd2xfdmlm
LT5iZWFjb25faW5mby5pZV9yc25fcHRyLA0KKwkJCSAgICAgICBtd2xfdmlmLT5iZWFjb25faW5m
by5pZV9yc25fbGVuLCAiUlNOOiIpOw0KKwkJcCArPSBkdW1wX2RhdGEocCwgbXdsX3ZpZi0+YmVh
Y29uX2luZm8uaWVfcnNuNDhfcHRyLA0KKwkJCSAgICAgICBtd2xfdmlmLT5iZWFjb25faW5mby5p
ZV9yc240OF9sZW4sICJSU040ODoiKTsNCisJCXAgKz0gZHVtcF9kYXRhKHAsIG13bF92aWYtPmJl
YWNvbl9pbmZvLmllX2h0X3B0ciwNCisJCQkgICAgICAgbXdsX3ZpZi0+YmVhY29uX2luZm8uaWVf
aHRfbGVuLCAiSFQ6Iik7DQorCQlwICs9IGR1bXBfZGF0YShwLCBtd2xfdmlmLT5iZWFjb25faW5m
by5pZV92aHRfcHRyLA0KKwkJCSAgICAgICBtd2xfdmlmLT5iZWFjb25faW5mby5pZV92aHRfbGVu
LCAiVkhUOiIpOw0KKwkJcCArPSBzcHJpbnRmKHAsICJcbiIpOw0KKwl9DQorCXNwaW5fdW5sb2Nr
X2JoKCZwcml2LT52aWZfbG9jayk7DQorDQorCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVy
KHVidWYsIGNvdW50LCBwcG9zLCAoY2hhciAqKXBhZ2UsDQorCQkJCSAgICAgICh1bnNpZ25lZCBs
b25nKXAgLSBwYWdlKTsNCisJZnJlZV9wYWdlKHBhZ2UpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30N
CisNCitzdGF0aWMgc3NpemVfdCBtd2xfZGVidWdmc19zdGFfcmVhZChzdHJ1Y3QgZmlsZSAqZmls
ZSwgY2hhciBfX3VzZXIgKnVidWYsDQorCQkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBv
cykNCit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgbXdsX3ByaXYgKilmaWxl
LT5wcml2YXRlX2RhdGE7DQorCXVuc2lnbmVkIGxvbmcgcGFnZSA9IGdldF96ZXJvZWRfcGFnZShH
RlBfS0VSTkVMKTsNCisJY2hhciAqcCA9IChjaGFyICopcGFnZTsNCisJc3RydWN0IG13bF9zdGEg
KnN0YV9pbmZvOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOw0KKwlzc2l6ZV90IHJldDsN
CisNCisJaWYgKCFwKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCXAgKz0gc3ByaW50ZihwLCAi
XG4iKTsNCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5zdGFfbG9jayk7DQorCWxpc3RfZm9yX2VhY2hf
ZW50cnkoc3RhX2luZm8sICZwcml2LT5zdGFfbGlzdCwgbGlzdCkgew0KKwkJc3RhID0gY29udGFp
bmVyX29mKChjaGFyICopc3RhX2luZm8sIHN0cnVjdCBpZWVlODAyMTFfc3RhLA0KKwkJCQkgICBk
cnZfcHJpdlswXSk7DQorCQlwICs9IHByaW50X21hY19hZGRyKHAsIHN0YS0+YWRkcik7DQorCQlw
ICs9IHNwcmludGYocCwgImFpZDogJXVcbiIsIHN0YS0+YWlkKTsNCisJCXAgKz0gc3ByaW50Zihw
LCAiYW1wZHU6ICVzXG4iLA0KKwkJCSAgICAgc3RhX2luZm8tPmlzX2FtcGR1X2FsbG93ZWQgPyAi
dHJ1ZSIgOiAiZmFsc2UiKTsNCisJCXAgKz0gc3ByaW50ZihwLCAiYW1zZHU6ICVzXG4iLA0KKwkJ
CSAgICAgc3RhX2luZm8tPmlzX2Ftc2R1X2FsbG93ZWQgPyAidHJ1ZSIgOiAiZmFsc2UiKTsNCisJ
CWlmIChzdGFfaW5mby0+aXNfYW1zZHVfYWxsb3dlZCkgew0KKwkJCXAgKz0gc3ByaW50ZihwLCAi
YW1zZHUgY2FwOiAweCUwMnhcbiIsDQorCQkJCSAgICAgc3RhX2luZm8tPmFtc2R1X2N0cmwuY2Fw
KTsNCisJCX0NCisJCXAgKz0gc3ByaW50ZihwLCAiSVY6ICUwOHglMDR4XG4iLA0KKwkJCSAgICAg
c3RhX2luZm8tPml2MzIsIHN0YV9pbmZvLT5pdjE2KTsNCisJCXAgKz0gc3ByaW50ZihwLCAiXG4i
KTsNCisJfQ0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+c3RhX2xvY2spOw0KKw0KKwlyZXQgPSBz
aW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjb3VudCwgcHBvcywgKGNoYXIgKilwYWdlLA0K
KwkJCQkgICAgICAodW5zaWduZWQgbG9uZylwIC0gcGFnZSk7DQorCWZyZWVfcGFnZShwYWdlKTsN
CisNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIHNzaXplX3QgbXdsX2RlYnVnZnNfYW1w
ZHVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVidWYsDQorCQkJCSAgICAg
IHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2
ID0gKHN0cnVjdCBtd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsNCisJdW5zaWduZWQgbG9u
ZyBwYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOw0KKwljaGFyICpwID0gKGNoYXIg
KilwYWdlOw0KKwlzdHJ1Y3QgbXdsX2FtcGR1X3N0cmVhbSAqc3RyZWFtOw0KKwlpbnQgaTsNCisJ
c3NpemVfdCByZXQ7DQorDQorCWlmICghcCkNCisJCXJldHVybiAtRU5PTUVNOw0KKw0KKwlwICs9
IHNwcmludGYocCwgIlxuIik7DQorCXNwaW5fbG9ja19iaCgmcHJpdi0+c3RyZWFtX2xvY2spOw0K
Kwlmb3IgKGkgPSAwOyBpIDwgU1lTQURQVF9UWF9BTVBEVV9RVUVVRVM7IGkrKykgew0KKwkJc3Ry
ZWFtID0gJnByaXYtPmFtcGR1W2ldOw0KKwkJcCArPSBzcHJpbnRmKHAsICJzdHJlYW06ICVkXG4i
LCBpKTsNCisJCXAgKz0gc3ByaW50ZihwLCAiaWR4OiAldVxuIiwgc3RyZWFtLT5pZHgpOw0KKwkJ
cCArPSBzcHJpbnRmKHAsICJzdGF0ZTogJXVcbiIsIHN0cmVhbS0+c3RhdGUpOw0KKwkJaWYgKHN0
cmVhbS0+c3RhKSB7DQorCQkJcCArPSBwcmludF9tYWNfYWRkcihwLCBzdHJlYW0tPnN0YS0+YWRk
cik7DQorCQkJcCArPSBzcHJpbnRmKHAsICJ0aWQ6ICV1XG4iLCBzdHJlYW0tPnRpZCk7DQorCQl9
DQorCX0NCisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnN0cmVhbV9sb2NrKTsNCisJcCArPSBzcHJp
bnRmKHAsICJcbiIpOw0KKw0KKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBj
b3VudCwgcHBvcywgKGNoYXIgKilwYWdlLA0KKwkJCQkgICAgICAodW5zaWduZWQgbG9uZylwIC0g
cGFnZSk7DQorCWZyZWVfcGFnZShwYWdlKTsNCisNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3Rh
dGljIGludCBtd2xfZGVidWdmc19yZWdfYWNjZXNzKHN0cnVjdCBtd2xfcHJpdiAqcHJpdiwgYm9v
bCB3cml0ZSkNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcHJpdi0+aHc7DQorCXU4
IHNldDsNCisJdTMyICphZGRyX3ZhbDsNCisJaW50IHJldCA9IDA7DQorDQorCXNldCA9IHdyaXRl
ID8gV0xfU0VUIDogV0xfR0VUOw0KKw0KKwlzd2l0Y2ggKHByaXYtPnJlZ190eXBlKSB7DQorCWNh
c2UgTVdMX0FDQ0VTU19BRERSMDoNCisJCWlmIChzZXQgPT0gV0xfR0VUKQ0KKwkJCXByaXYtPnJl
Z192YWx1ZSA9DQorCQkJCXJlYWRsKHByaXYtPmlvYmFzZTAgKyBwcml2LT5yZWdfb2Zmc2V0KTsN
CisJCWVsc2UNCisJCQl3cml0ZWwocHJpdi0+cmVnX3ZhbHVlLA0KKwkJCSAgICAgICBwcml2LT5p
b2Jhc2UwICsgcHJpdi0+cmVnX29mZnNldCk7DQorCQlicmVhazsNCisJY2FzZSBNV0xfQUNDRVNT
X0FERFIxOg0KKwkJaWYgKHNldCA9PSBXTF9HRVQpDQorCQkJcHJpdi0+cmVnX3ZhbHVlID0NCisJ
CQkJcmVhZGwocHJpdi0+aW9iYXNlMSArIHByaXYtPnJlZ19vZmZzZXQpOw0KKwkJZWxzZQ0KKwkJ
CXdyaXRlbChwcml2LT5yZWdfdmFsdWUsDQorCQkJICAgICAgIHByaXYtPmlvYmFzZTEgKyBwcml2
LT5yZWdfb2Zmc2V0KTsNCisJCWJyZWFrOw0KKwljYXNlIE1XTF9BQ0NFU1NfQUREUjoNCisJCWFk
ZHJfdmFsID0ga21hbGxvYyg2NCAqIHNpemVvZih1MzIpLCBHRlBfS0VSTkVMKTsNCisJCWlmIChh
ZGRyX3ZhbCkgew0KKwkJCW1lbXNldChhZGRyX3ZhbCwgMCwgNjQgKiBzaXplb2YodTMyKSk7DQor
CQkJYWRkcl92YWxbMF0gPSBwcml2LT5yZWdfdmFsdWU7DQorCQkJcmV0ID0gbXdsX2Z3Y21kX2dl
dF9hZGRyX3ZhbHVlKGh3LCBwcml2LT5yZWdfb2Zmc2V0LA0KKwkJCQkJCSAgICAgICA0LCBhZGRy
X3ZhbCwgc2V0KTsNCisJCQlpZiAoKCFyZXQpICYmIChzZXQgPT0gV0xfR0VUKSkNCisJCQkJcHJp
di0+cmVnX3ZhbHVlID0gYWRkcl92YWxbMF07DQorCQkJa2ZyZWUoYWRkcl92YWwpOw0KKwkJfSBl
bHNlIHsNCisJCQlyZXQgPSAtRU5PTUVNOw0KKwkJfQ0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQor
CQlyZXQgPSAtRUlOVkFMOw0KKwkJYnJlYWs7DQorCX0NCisNCisJcmV0dXJuIHJldDsNCit9DQor
DQorc3RhdGljIHNzaXplX3QgbXdsX2RlYnVnZnNfcmVncmR3cl9yZWFkKHN0cnVjdCBmaWxlICpm
aWxlLCBjaGFyIF9fdXNlciAqdWJ1ZiwNCisJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9z
KQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gKHN0cnVjdCBtd2xfcHJpdiAqKWZpbGUt
PnByaXZhdGVfZGF0YTsNCisJdW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X3plcm9lZF9wYWdlKEdG
UF9LRVJORUwpOw0KKwljaGFyICpidWYgPSAoY2hhciAqKWFkZHI7DQorCWludCBwb3MgPSAwLCBy
ZXQgPSAwOw0KKw0KKwlpZiAoIWJ1ZikNCisJCXJldHVybiAtRU5PTUVNOw0KKw0KKwlpZiAoIXBy
aXYtPnJlZ190eXBlKSB7DQorCQkvKiBObyBjb21tYW5kIGhhcyBiZWVuIGdpdmVuICovDQorCQlw
b3MgKz0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIwIik7DQorCQlnb3RvIG5vbmU7DQorCX0N
CisNCisJLyogU2V0IGNvbW1hbmQgaGFzIGJlZW4gZ2l2ZW4gKi8NCisJaWYgKHByaXYtPnJlZ192
YWx1ZSAhPSBVSU5UX01BWCkgew0KKwkJcmV0ID0gbXdsX2RlYnVnZnNfcmVnX2FjY2Vzcyhwcml2
LCB0cnVlKTsNCisJCWdvdG8gZG9uZTsNCisJfQ0KKwkvKiBHZXQgY29tbWFuZCBoYXMgYmVlbiBn
aXZlbiAqLw0KKwlyZXQgPSBtd2xfZGVidWdmc19yZWdfYWNjZXNzKHByaXYsIGZhbHNlKTsNCisN
Citkb25lOg0KKwlpZiAoIXJldCkNCisJCXBvcyArPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwg
IiV1IDB4JTA4eCAweCUwOHhcbiIsDQorCQkJCXByaXYtPnJlZ190eXBlLCBwcml2LT5yZWdfb2Zm
c2V0LA0KKwkJCQlwcml2LT5yZWdfdmFsdWUpOw0KKwllbHNlDQorCQlwb3MgKz0gc25wcmludGYo
YnVmLCBQQUdFX1NJWkUsICJlcnJvcjogJWQoJXUgMHglMDh4IDB4JTA4eClcbiIsDQorCQkJCXJl
dCwgcHJpdi0+cmVnX3R5cGUsIHByaXYtPnJlZ19vZmZzZXQsDQorCQkJCXByaXYtPnJlZ192YWx1
ZSk7DQorDQorCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNvdW50LCBwcG9z
LCBidWYsIHBvcyk7DQorDQorbm9uZToNCisNCisJZnJlZV9wYWdlKGFkZHIpOw0KKwlyZXR1cm4g
cmV0Ow0KK30NCisNCitzdGF0aWMgc3NpemVfdCBtd2xfZGVidWdmc19yZWdyZHdyX3dyaXRlKHN0
cnVjdCBmaWxlICpmaWxlLA0KKwkJCQkJIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLA0KKwkJCQkJ
IHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2
ID0gKHN0cnVjdCBtd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsNCisJdW5zaWduZWQgbG9u
ZyBhZGRyID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOw0KKwljaGFyICpidWYgPSAoY2hh
ciAqKWFkZHI7DQorCXNpemVfdCBidWZfc2l6ZSA9IG1pbl90KHNpemVfdCwgY291bnQsIFBBR0Vf
U0laRSAtIDEpOw0KKwlpbnQgcmV0Ow0KKwl1MzIgcmVnX3R5cGUgPSAwLCByZWdfb2Zmc2V0ID0g
MCwgcmVnX3ZhbHVlID0gVUlOVF9NQVg7DQorDQorCWlmICghYnVmKQ0KKwkJcmV0dXJuIC1FTk9N
RU07DQorDQorCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVidWYsIGJ1Zl9zaXplKSkgew0KKwkJ
cmV0ID0gLUVGQVVMVDsNCisJCWdvdG8gZG9uZTsNCisJfQ0KKw0KKwlyZXQgPSBzc2NhbmYoYnVm
LCAiJXUgJXggJXgiLCAmcmVnX3R5cGUsICZyZWdfb2Zmc2V0LCAmcmVnX3ZhbHVlKTsNCisNCisJ
aWYgKCFyZWdfdHlwZSkgew0KKwkJcmV0ID0gLUVJTlZBTDsNCisJCWdvdG8gZG9uZTsNCisJfSBl
bHNlIHsNCisJCXByaXYtPnJlZ190eXBlID0gcmVnX3R5cGU7DQorCQlwcml2LT5yZWdfb2Zmc2V0
ID0gcmVnX29mZnNldDsNCisJCXByaXYtPnJlZ192YWx1ZSA9IHJlZ192YWx1ZTsNCisJCXJldCA9
IGNvdW50Ow0KKwl9DQorZG9uZToNCisNCisJZnJlZV9wYWdlKGFkZHIpOw0KKwlyZXR1cm4gcmV0
Ow0KK30NCisNCitNV0xXSUZJX0RFQlVHRlNfRklMRV9SRUFEX09QUyhpbmZvKTsNCitNV0xXSUZJ
X0RFQlVHRlNfRklMRV9SRUFEX09QUyh2aWYpOw0KK01XTFdJRklfREVCVUdGU19GSUxFX1JFQURf
T1BTKHN0YSk7DQorTVdMV0lGSV9ERUJVR0ZTX0ZJTEVfUkVBRF9PUFMoYW1wZHUpOw0KK01XTFdJ
RklfREVCVUdGU19GSUxFX09QUyhyZWdyZHdyKTsNCisNCit2b2lkIG13bF9kZWJ1Z2ZzX2luaXQo
c3RydWN0IGllZWU4MDIxMV9odyAqaHcpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBo
dy0+cHJpdjsNCisNCisJaWYgKCFwcml2LT5kZWJ1Z2ZzX3BoeSkNCisJCXByaXYtPmRlYnVnZnNf
cGh5ID0gZGVidWdmc19jcmVhdGVfZGlyKCJtd2x3aWZpIiwNCisJCQkJCQkgICAgICAgaHctPndp
cGh5LT5kZWJ1Z2ZzZGlyKTsNCisNCisJaWYgKCFwcml2LT5kZWJ1Z2ZzX3BoeSkNCisJCXJldHVy
bjsNCisNCisJTVdMV0lGSV9ERUJVR0ZTX0FERF9GSUxFKGluZm8pOw0KKwlNV0xXSUZJX0RFQlVH
RlNfQUREX0ZJTEUodmlmKTsNCisJTVdMV0lGSV9ERUJVR0ZTX0FERF9GSUxFKHN0YSk7DQorCU1X
TFdJRklfREVCVUdGU19BRERfRklMRShhbXBkdSk7DQorCU1XTFdJRklfREVCVUdGU19BRERfRklM
RShyZWdyZHdyKTsNCit9DQorDQordm9pZCBtd2xfZGVidWdmc19yZW1vdmUoc3RydWN0IGllZWU4
MDIxMV9odyAqaHcpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisN
CisJZGVidWdmc19yZW1vdmUocHJpdi0+ZGVidWdmc19waHkpOw0KKwlwcml2LT5kZWJ1Z2ZzX3Bo
eSA9IE5VTEw7DQorfQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwv
bXdsd2lmaS9kZWJ1Z2ZzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkv
ZGVidWdmcy5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uZGZjMmEzYw0K
LS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZp
L2RlYnVnZnMuaA0KQEAgLTAsMCArMSwyNCBAQA0KKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDA2
LTIwMTUsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuDQorICoNCisgKiBUaGlzIHNvZnR3YXJl
IGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25h
bA0KKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQ0KKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkg
dXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4NCisgKiBhY2NvcmRh
bmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkg
b2Ygd2hpY2gNCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuDQorICoNCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1J
UywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQ0KKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UNCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRl
cyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQNCisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIu
DQorICovDQorDQorLyogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgZGVmaW5lcyBkZWJ1ZyBmcyBy
ZWxhdGVkIGZ1bmN0aW9ucy4gKi8NCisNCisjaWZuZGVmIF9kZWJ1Z2ZzX2hfDQorI2RlZmluZSBf
ZGVidWdmc19oXw0KKw0KK3ZvaWQgbXdsX2RlYnVnZnNfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3
ICpodyk7DQordm9pZCBtd2xfZGVidWdmc19yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcp
Ow0KKw0KKyNlbmRpZiAvKiBfZGVidWdmc19oXyAqLw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0
L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21h
cnZlbGwvbXdsd2lmaS9kZXYuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAu
LjM3MGQzYzANCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZl
bGwvbXdsd2lmaS9kZXYuaA0KQEAgLTAsMCArMSw0NzcgQEANCisvKg0KKyAqIENvcHlyaWdodCAo
QykgMjAwNi0yMDE1LCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLg0KKyAqDQorICogVGhpcyBz
b2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVy
bmF0aW9uYWwNCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTENCisgKiAodGhlICJMaWNlbnNlIikuICBZ
b3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluDQorICog
YWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwg
YSBjb3B5IG9mIHdoaWNoDQorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KKyAqDQorICogVEhFIEZJTEUgSVMgRElTVFJJQlVU
RUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUNCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFDQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2Ug
cHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0DQorICogdGhpcyB3YXJyYW50eSBkaXNj
bGFpbWVyLg0KKyAqLw0KKw0KKy8qIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGRlZmluZXMgZGV2
aWNlIHJlbGF0ZWQgaW5mb3JtYXRpb24uICovDQorDQorI2lmbmRlZiBfZGV2X2hfDQorI2RlZmlu
ZSBfZGV2X2hfDQorDQorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4NCisjaW5jbHVkZSA8bGlu
dXgvaW50ZXJydXB0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPg0KKyNpbmNsdWRlIDxsaW51
eC9maXJtd2FyZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KKyNpbmNsdWRlIDxsaW51
eC9iaXRvcHMuaD4NCisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+DQorDQorI2RlZmluZSBNV0xf
RFJWX05BTUUgICAgIEtCVUlMRF9NT0ROQU1FDQorI2RlZmluZSBNV0xfRFJWX1ZFUlNJT04JICIx
MC4zLjAuMTQiDQorDQorLyogTWFwIHRvIDB4ODAwMDAwMDAgKEJ1cyBjb250cm9sKSBvbiBCQVIw
ICovDQorI2RlZmluZSBNQUNSRUdfUkVHX0gyQV9JTlRFUlJVUFRfRVZFTlRTICAgICAgMHgwMDAw
MEMxOCAvKiAoRnJvbSBob3N0IHRvIEFSTSkgKi8NCisjZGVmaW5lIE1BQ1JFR19SRUdfSDJBX0lO
VEVSUlVQVF9DQVVTRSAgICAgICAweDAwMDAwQzFDIC8qIChGcm9tIGhvc3QgdG8gQVJNKSAqLw0K
KyNkZWZpbmUgTUFDUkVHX1JFR19IMkFfSU5URVJSVVBUX01BU0sgICAgICAgIDB4MDAwMDBDMjAg
LyogKEZyb20gaG9zdCB0byBBUk0pICovDQorI2RlZmluZSBNQUNSRUdfUkVHX0gyQV9JTlRFUlJV
UFRfQ0xFQVJfU0VMICAgMHgwMDAwMEMyNCAvKiAoRnJvbSBob3N0IHRvIEFSTSkgKi8NCisjZGVm
aW5lIE1BQ1JFR19SRUdfSDJBX0lOVEVSUlVQVF9TVEFUVVNfTUFTSyAweDAwMDAwQzI4IC8qIChG
cm9tIGhvc3QgdG8gQVJNKSAqLw0KKw0KKyNkZWZpbmUgTUFDUkVHX1JFR19BMkhfSU5URVJSVVBU
X0VWRU5UUyAgICAgIDB4MDAwMDBDMkMgLyogKEZyb20gQVJNIHRvIGhvc3QpICovDQorI2RlZmlu
ZSBNQUNSRUdfUkVHX0EySF9JTlRFUlJVUFRfQ0FVU0UgICAgICAgMHgwMDAwMEMzMCAvKiAoRnJv
bSBBUk0gdG8gaG9zdCkgKi8NCisjZGVmaW5lIE1BQ1JFR19SRUdfQTJIX0lOVEVSUlVQVF9NQVNL
ICAgICAgICAweDAwMDAwQzM0IC8qIChGcm9tIEFSTSB0byBob3N0KSAqLw0KKyNkZWZpbmUgTUFD
UkVHX1JFR19BMkhfSU5URVJSVVBUX0NMRUFSX1NFTCAgIDB4MDAwMDBDMzggLyogKEZyb20gQVJN
IHRvIGhvc3QpICovDQorI2RlZmluZSBNQUNSRUdfUkVHX0EySF9JTlRFUlJVUFRfU1RBVFVTX01B
U0sgMHgwMDAwMEMzQyAvKiAoRnJvbSBBUk0gdG8gaG9zdCkgKi8NCisNCisvKiBNYXAgdG8gMHg4
MDAwMDAwMCBvbiBCQVIxICovDQorI2RlZmluZSBNQUNSRUdfUkVHX0dFTl9QVFIgICAgICAgICAg
ICAgICAgICAweDAwMDAwQzEwDQorI2RlZmluZSBNQUNSRUdfUkVHX0lOVF9DT0RFICAgICAgICAg
ICAgICAgICAweDAwMDAwQzE0DQorDQorLyogQml0IGRlZmluaXRpb24gZm9yIE1BQ1JFR19SRUdf
QTJIX0lOVEVSUlVQVF9DQVVTRSAoQTJIUklDKSAqLw0KKyNkZWZpbmUgTUFDUkVHX0EySFJJQ19C
SVRfVFhfRE9ORSAgICAgICAgICAgQklUKDApDQorI2RlZmluZSBNQUNSRUdfQTJIUklDX0JJVF9S
WF9SRFkgICAgICAgICAgICBCSVQoMSkNCisjZGVmaW5lIE1BQ1JFR19BMkhSSUNfQklUX09QQ19E
T05FICAgICAgICAgIEJJVCgyKQ0KKyNkZWZpbmUgTUFDUkVHX0EySFJJQ19CSVRfTUFDX0VWRU5U
ICAgICAgICAgQklUKDMpDQorI2RlZmluZSBNQUNSRUdfQTJIUklDX0JJVF9SWF9QUk9CTEVNICAg
ICAgICBCSVQoNCkNCisjZGVmaW5lIE1BQ1JFR19BMkhSSUNfQklUX1JBRElPX09GRiAgICAgICAg
IEJJVCg1KQ0KKyNkZWZpbmUgTUFDUkVHX0EySFJJQ19CSVRfUkFESU9fT04gICAgICAgICAgQklU
KDYpDQorI2RlZmluZSBNQUNSRUdfQTJIUklDX0JJVF9SQURBUl9ERVRFQ1QgICAgICBCSVQoNykN
CisjZGVmaW5lIE1BQ1JFR19BMkhSSUNfQklUX0lDVl9FUlJPUiAgICAgICAgIEJJVCg4KQ0KKyNk
ZWZpbmUgTUFDUkVHX0EySFJJQ19CSVRfV0VBS0lWX0VSUk9SICAgICAgQklUKDkpDQorI2RlZmlu
ZSBNQUNSRUdfQTJIUklDX0JJVF9RVUVfRU1QVFkgICAgICAgICBCSVQoMTApDQorI2RlZmluZSBN
QUNSRUdfQTJIUklDX0JJVF9RVUVfRlVMTCAgICAgICAgICBCSVQoMTEpDQorI2RlZmluZSBNQUNS
RUdfQTJIUklDX0JJVF9DSEFOX1NXSVRDSCAgICAgICBCSVQoMTIpDQorI2RlZmluZSBNQUNSRUdf
QTJIUklDX0JJVF9UWF9XQVRDSERPRyAgICAgICBCSVQoMTMpDQorI2RlZmluZSBNQUNSRUdfQTJI
UklDX0JBX1dBVENIRE9HICAgICAgICAgICBCSVQoMTQpDQorLyogMTUgdGFrZW4gYnkgSVNSX1RY
QUNLICovDQorI2RlZmluZSBNQUNSRUdfQTJIUklDX0JJVF9TU1VfRE9ORSAgICAgICAgICBCSVQo
MTYpDQorI2RlZmluZSBNQUNSRUdfQTJIUklDX0NPTlNFQ19UWEZBSUwgICAgICAgICBCSVQoMTcp
DQorDQorI2RlZmluZSBJU1JfU1JDX0JJVFMgICAgICAgIChNQUNSRUdfQTJIUklDX0JJVF9SWF9S
RFkgfCBcDQorCQkJICAgICBNQUNSRUdfQTJIUklDX0JJVF9UWF9ET05FIHwgXA0KKwkJCSAgICAg
TUFDUkVHX0EySFJJQ19CSVRfT1BDX0RPTkUgfCBcDQorCQkJICAgICBNQUNSRUdfQTJIUklDX0JJ
VF9NQUNfRVZFTlQgfCBcDQorCQkJICAgICBNQUNSRUdfQTJIUklDX0JJVF9XRUFLSVZfRVJST1Ig
fCBcDQorCQkJICAgICBNQUNSRUdfQTJIUklDX0JJVF9JQ1ZfRVJST1IgfCBcDQorCQkJICAgICBN
QUNSRUdfQTJIUklDX0JJVF9TU1VfRE9ORSB8IFwNCisJCQkgICAgIE1BQ1JFR19BMkhSSUNfQklU
X1JBREFSX0RFVEVDVCB8IFwNCisJCQkgICAgIE1BQ1JFR19BMkhSSUNfQklUX0NIQU5fU1dJVENI
IHwgXA0KKwkJCSAgICAgTUFDUkVHX0EySFJJQ19CSVRfVFhfV0FUQ0hET0cgfCBcDQorCQkJICAg
ICBNQUNSRUdfQTJIUklDX0JJVF9RVUVfRU1QVFkgfCBcDQorCQkJICAgICBNQUNSRUdfQTJIUklD
X0JBX1dBVENIRE9HIHwgXA0KKwkJCSAgICAgTUFDUkVHX0EySFJJQ19DT05TRUNfVFhGQUlMKQ0K
Kw0KKyNkZWZpbmUgTUFDUkVHX0EySFJJQ19CSVRfTUFTSyAgICAgIElTUl9TUkNfQklUUw0KKw0K
Ky8qIEJpdCBkZWZpbml0aW9uIGZvciBNQUNSRUdfUkVHX0gyQV9JTlRFUlJVUFRfQ0FVU0UgKEgy
QVJJQykgKi8NCisjZGVmaW5lIE1BQ1JFR19IMkFSSUNfQklUX1BQQV9SRUFEWSAgICAgICAgIEJJ
VCgwKQ0KKyNkZWZpbmUgTUFDUkVHX0gyQVJJQ19CSVRfRE9PUl9CRUxMICAgICAgICAgQklUKDEp
DQorI2RlZmluZSBNQUNSRUdfSDJBUklDX0JJVF9QUyAgICAgICAgICAgICAgICBCSVQoMikNCisj
ZGVmaW5lIE1BQ1JFR19IMkFSSUNfQklUX1BTUE9MTCAgICAgICAgICAgIEJJVCgzKQ0KKyNkZWZp
bmUgSVNSX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDE1KQ0KKyNkZWZpbmUg
SVNSX1JFU0VUX0FQMzMgICAgICAgICAgICAgICAgICAgICAgQklUKDI2KQ0KKw0KKy8qIERhdGEg
ZGVzY3JpcHRvciByZWxhdGVkIGNvbnN0YW50cyAqLw0KKyNkZWZpbmUgRUFHTEVfUlhEX0NUUkxf
RFJJVkVSX09XTiAgICAgICAgICAgMHgwMA0KKyNkZWZpbmUgRUFHTEVfUlhEX0NUUkxfRE1BX09X
TiAgICAgICAgICAgICAgMHg4MA0KKw0KKyNkZWZpbmUgRUFHTEVfUlhEX1NUQVRVU19PSyAgICAg
ICAgICAgICAgICAgMHgwMQ0KKw0KKyNkZWZpbmUgRUFHTEVfVFhEX1NUQVRVU19JRExFICAgICAg
ICAgICAgICAgMHgwMDAwMDAwMA0KKyNkZWZpbmUgRUFHTEVfVFhEX1NUQVRVU19PSyAgICAgICAg
ICAgICAgICAgMHgwMDAwMDAwMQ0KKyNkZWZpbmUgRUFHTEVfVFhEX1NUQVRVU19GV19PV05FRCAg
ICAgICAgICAgMHg4MDAwMDAwMA0KKw0KKy8qIEFudGVubmEgY29udHJvbCAqLw0KKyNkZWZpbmUg
QU5URU5OQV9UWF80X0FVVE8gICAgICAgICAgICAgICAgICAgMA0KKyNkZWZpbmUgQU5URU5OQV9U
WF8yICAgICAgICAgICAgICAgICAgICAgICAgMw0KKyNkZWZpbmUgQU5URU5OQV9SWF80X0FVVE8g
ICAgICAgICAgICAgICAgICAgMA0KKyNkZWZpbmUgQU5URU5OQV9SWF8yICAgICAgICAgICAgICAg
ICAgICAgICAgMg0KKw0KKy8qIEJhbmQgcmVsYXRlZCBjb25zdGFudHMgKi8NCisjZGVmaW5lIEJB
TkRfMjRfQ0hBTk5FTF9OVU0gICAgICAgICAgICAgICAgIDE0DQorI2RlZmluZSBCQU5EXzI0X1JB
VEVfTlVNICAgICAgICAgICAgICAgICAgICAxMw0KKyNkZWZpbmUgQkFORF81MF9DSEFOTkVMX05V
TSAgICAgICAgICAgICAgICAgMjQNCisjZGVmaW5lIEJBTkRfNTBfUkFURV9OVU0gICAgICAgICAg
ICAgICAgICAgIDgNCisNCisvKiB2aWYgYW5kIHN0YXRpb24gKi8NCisjZGVmaW5lIE5VTV9XRVBf
S0VZUyAgICAgICAgICAgICAgICAgICAgICAgIDQNCisjZGVmaW5lIE1XTF9NQVhfVElEICAgICAg
ICAgICAgICAgICAgICAgICAgIDgNCisjZGVmaW5lIE1XTF9BTVNEVV9TSVpFXzRLICAgICAgICAg
ICAgICAgICAgIDANCisjZGVmaW5lIE1XTF9BTVNEVV9TSVpFXzhLICAgICAgICAgICAgICAgICAg
IDENCisNCisvKiBwb3dlciBpbml0ICovDQorI2RlZmluZSBNV0xfUE9XRVJfSU5JVF8xICAgICAg
ICAgICAgICAgICAgICAxDQorI2RlZmluZSBNV0xfUE9XRVJfSU5JVF8yICAgICAgICAgICAgICAg
ICAgICAyDQorDQorZW51bSB7DQorCU1XTDg4NjQgPSAwLA0KKwlNV0w4ODk3LA0KKwlNV0xVTktO
T1dOLA0KK307DQorDQorZW51bSB7DQorCUFQX01PREVfMTFBQyA9IDB4MTAsICAgICAgICAgLyog
Z2VuZXJpYyAxMWFjIGluZGljYXRpb24gbW9kZSAqLw0KKwlBUF9NT0RFXzJfNEdIWl8xMUFDX01J
WEVEID0gMHgxNywNCit9Ow0KKw0KK2VudW0gew0KKwlBTVBEVV9OT19TVFJFQU0sDQorCUFNUERV
X1NUUkVBTV9ORVcsDQorCUFNUERVX1NUUkVBTV9JTl9QUk9HUkVTUywNCisJQU1QRFVfU1RSRUFN
X0FDVElWRSwNCit9Ow0KKw0KK3N0cnVjdCBtd2xfY2hpcF9pbmZvIHsNCisJY29uc3QgY2hhciAq
cGFydF9uYW1lOw0KKwljb25zdCBjaGFyICpmd19pbWFnZTsNCisJaW50IGFudGVubmFfdHg7DQor
CWludCBhbnRlbm5hX3J4Ow0KK307DQorDQorc3RydWN0IG13bF90eF9wd3JfdGJsIHsNCisJdTgg
Y2hhbm5lbDsNCisJdTggc2V0Y2FwOw0KKwl1MTYgdHhhbnRlbm5hMjsNCisJdTE2IHR4X3Bvd2Vy
W1NZU0FEUFRfVFhfUE9XRVJfTEVWRUxfVE9UQUxdOw0KKwlib29sIGNkZDsNCit9Ow0KKw0KK3N0
cnVjdCBtd2xfaHdfZGF0YSB7DQorCXUzMiBmd19yZWxlYXNlX251bTsgICAgICAgICAgLyogTWFq
TmJyOk1pbk5icjpTdWJNaW46UGF0Y2hMZXZlbCAqLw0KKwl1OCBod192ZXJzaW9uOyAgICAgICAg
ICAgICAgIC8qIHBsYWluIG51bWJlciBpbmRpY2F0aW5nIHZlcnNpb24gKi8NCisJdTggaG9zdF9p
bnRlcmZhY2U7ICAgICAgICAgICAvKiBwbGFpbiBudW1iZXIgb2YgaW50ZXJmYWNlICAgICAgICov
DQorCXUxNiBtYXhfbnVtX3R4X2Rlc2M7ICAgICAgICAgLyogbWF4IG51bWJlciBvZiBUWCBkZXNj
cmlwdG9ycyAgICAqLw0KKwl1MTYgbWF4X251bV9tY19hZGRyOyAgICAgICAgIC8qIG1heCBudW1i
ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyAgKi8NCisJdTE2IG51bV9hbnRlbm5hczsgICAgICAgICAg
ICAvKiBudW1iZXIgYW50ZW5uYXMgdXNlZCAgICAgICAgICAgICovDQorCXUxNiByZWdpb25fY29k
ZTsgICAgICAgICAgICAgLyogcmVnaW9uIChlZy4gMHgxMCBmb3IgVVNBIEZDQykgICAqLw0KKwl1
bnNpZ25lZCBjaGFyIG1hY19hZGRyW0VUSF9BTEVOXTsgLyogd2VsbCBrbm93biAtPiBBQTpCQjpD
QzpERDpFRTpGRiAqLw0KK307DQorDQorI2RlZmluZSBNV0xfVFhfUkFURV9GT1JNQVRfTUFTSyAg
ICAgICAweDAwMDAwMDAzDQorI2RlZmluZSBNV0xfVFhfUkFURV9CQU5EV0lEVEhfTUFTSyAgICAw
eDAwMDAwMDMwDQorI2RlZmluZSBNV0xfVFhfUkFURV9CQU5EV0lEVEhfU0hJRlQgICA0DQorI2Rl
ZmluZSBNV0xfVFhfUkFURV9TSE9SVEdJX01BU0sgICAgICAweDAwMDAwMDQwDQorI2RlZmluZSBN
V0xfVFhfUkFURV9TSE9SVEdJX1NISUZUICAgICA2DQorI2RlZmluZSBNV0xfVFhfUkFURV9SQVRF
SURNQ1NfTUFTSyAgICAweDAwMDA3RjAwDQorI2RlZmluZSBNV0xfVFhfUkFURV9SQVRFSURNQ1Nf
U0hJRlQgICA4DQorDQorc3RydWN0IG13bF90eF9kZXNjIHsNCisJdTggZGF0YV9yYXRlOw0KKwl1
OCB0eF9wcmlvcml0eTsNCisJX19sZTE2IHFvc19jdHJsOw0KKwlfX2xlMzIgcGt0X3B0cjsNCisJ
X19sZTE2IHBrdF9sZW47DQorCXU4IGRlc3RfYWRkcltFVEhfQUxFTl07DQorCV9fbGUzMiBwcGh5
c19uZXh0Ow0KKwlfX2xlMzIgc2FwX3BrdF9pbmZvOw0KKwlfX2xlMzIgcmF0ZV9pbmZvOw0KKwl1
OCB0eXBlOw0KKwl1OCB4bWl0X2NvbnRyb2w7ICAgICAvKiBiaXQgMDogdXNlIHJhdGVpbmZvLCBi
aXQgMTogZGlzYWJsZSBhbXBkdSAqLw0KKwlfX2xlMTYgcmVzZXJ2ZWQ7DQorCV9fbGUzMiB0Y3Bh
Y2tfc247DQorCV9fbGUzMiB0Y3BhY2tfc3JjX2RzdDsNCisJX19sZTMyIHJlc2VydmVkMTsNCisJ
X19sZTMyIHJlc2VydmVkMjsNCisJdTggcmVzZXJ2ZWQzWzJdOw0KKwl1OCBwYWNrZXRfaW5mbzsN
CisJdTggcGFja2V0X2lkOw0KKwlfX2xlMTYgcGFja2V0X2xlbl9hbmRfcmV0cnk7DQorCV9fbGUx
NiBwYWNrZXRfcmF0ZV9pbmZvOw0KKwlfX2xlMzIgcmVzZXJ2ZWQ0Ow0KKwlfX2xlMzIgc3RhdHVz
Ow0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IG13bF90eF9obmRsIHsNCisJc3RydWN0IHNrX2J1
ZmYgKnBza19idWZmOw0KKwlzdHJ1Y3QgbXdsX3R4X2Rlc2MgKnBkZXNjOw0KKwlzdHJ1Y3QgbXds
X3R4X2huZGwgKnBuZXh0Ow0KK307DQorDQorI2RlZmluZSBNV0xfUlhfUkFURV9GT1JNQVRfTUFT
SyAgICAgICAweDAwMDcNCisjZGVmaW5lIE1XTF9SWF9SQVRFX05TU19NQVNLICAgICAgICAgIDB4
MDAxOA0KKyNkZWZpbmUgTVdMX1JYX1JBVEVfTlNTX1NISUZUICAgICAgICAgMw0KKyNkZWZpbmUg
TVdMX1JYX1JBVEVfQldfTUFTSyAgICAgICAgICAgMHgwMDYwDQorI2RlZmluZSBNV0xfUlhfUkFU
RV9CV19TSElGVCAgICAgICAgICA1DQorI2RlZmluZSBNV0xfUlhfUkFURV9HSV9NQVNLICAgICAg
ICAgICAweDAwODANCisjZGVmaW5lIE1XTF9SWF9SQVRFX0dJX1NISUZUICAgICAgICAgIDcNCisj
ZGVmaW5lIE1XTF9SWF9SQVRFX1JUX01BU0sgICAgICAgICAgIDB4RkYwMA0KKyNkZWZpbmUgTVdM
X1JYX1JBVEVfUlRfU0hJRlQgICAgICAgICAgOA0KKw0KK3N0cnVjdCBtd2xfcnhfZGVzYyB7DQor
CV9fbGUxNiBwa3RfbGVuOyAgICAgICAgICAgICAgLyogdG90YWwgbGVuZ3RoIG9mIHJlY2VpdmVk
IGRhdGEgICAgICAqLw0KKwlfX2xlMTYgcmF0ZTsgICAgICAgICAgICAgICAgIC8qIHJlY2VpdmUg
cmF0ZSBpbmZvcm1hdGlvbiAgICAgICAgICAgKi8NCisJX19sZTMyIHBwaHlzX2J1ZmZfZGF0YTsg
ICAgICAvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIHBheWxvYWQgZGF0YSAgICovDQorCV9fbGUzMiBw
cGh5c19uZXh0OyAgICAgICAgICAgLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBuZXh0IFJYIGRlc2Mg
ICAqLw0KKwlfX2xlMTYgcW9zX2N0cmw7ICAgICAgICAgICAgIC8qIHJlY2VpdmVkIFFvc0N0cmwg
ZmllbGQgdmFyaWFibGUgICAgKi8NCisJX19sZTE2IGh0X3NpZzI7ICAgICAgICAgICAgICAvKiBs
aWtlIG5hbWUgc3RhdGVzICAgICAgICAgICAgICAgICAgICovDQorCV9fbGUzMiBod19yc3NpX2lu
Zm87DQorCV9fbGUzMiBod19ub2lzZV9mbG9vcl9pbmZvOw0KKwl1OCBub2lzZV9mbG9vcjsNCisJ
dTggcmVzZXJ2ZWRbM107DQorCXU4IHJzc2k7ICAgICAgICAgICAgICAgICAgICAgLyogcmVjZWl2
ZWQgc2lnbmFsIHN0cmVuZ3QgaW5kaWNhdGlvbiAqLw0KKwl1OCBzdGF0dXM7ICAgICAgICAgICAg
ICAgICAgIC8qIHN0YXR1cyBmaWVsZCBjb250YWluaW5nIFVTRUQgYml0ICAgKi8NCisJdTggY2hh
bm5lbDsgICAgICAgICAgICAgICAgICAvKiBjaGFubmVsIHRoaXMgcGt0IHdhcyByZWNlaXZlZCBv
biAgICovDQorCXU4IHJ4X2NvbnRyb2w7ICAgICAgICAgICAgICAgLyogdGhlIGNvbnRyb2wgZWxl
bWVudCBvZiB0aGUgZGVzYyAgICAqLw0KKwlfX2xlMzIgcmVzZXJ2ZWQxWzNdOw0KK30gX19wYWNr
ZWQ7DQorDQorc3RydWN0IG13bF9yeF9obmRsIHsNCisJc3RydWN0IHNrX2J1ZmYgKnBza19idWZm
OyAgICAvKiBhc3NvY2lhdGVkIHNrX2J1ZmYgZm9yIExpbnV4ICAgICAgICovDQorCXN0cnVjdCBt
d2xfcnhfZGVzYyAqcGRlc2M7DQorCXN0cnVjdCBtd2xfcnhfaG5kbCAqcG5leHQ7DQorfTsNCisN
CitzdHJ1Y3QgbXdsX2Rlc2NfZGF0YSB7DQorCWRtYV9hZGRyX3QgcHBoeXNfdHhfcmluZzsgICAg
ICAgICAgLyogcHRyIHRvIGZpcnN0IFRYIGRlc2MgKHBoeXMuKSAgICAqLw0KKwlzdHJ1Y3QgbXds
X3R4X2Rlc2MgKnB0eF9yaW5nOyAgICAgIC8qIHB0ciB0byBmaXJzdCBUWCBkZXNjICh2aXJ0Likg
ICAgKi8NCisJc3RydWN0IG13bF90eF9obmRsICp0eF9obmRsOw0KKwlzdHJ1Y3QgbXdsX3R4X2hu
ZGwgKnBuZXh0X3R4X2huZGw7IC8qIG5leHQgVFggaGFuZGxlIHRoYXQgY2FuIGJlIHVzZWQgKi8N
CisJc3RydWN0IG13bF90eF9obmRsICpwc3RhbGVfdHhfaG5kbDsvKiB0aGUgc3RhbGVkIFRYIGhh
bmRsZSAgICAgICAgICAgICovDQorCWRtYV9hZGRyX3QgcHBoeXNfcnhfcmluZzsgICAgICAgICAg
LyogcHRyIHRvIGZpcnN0IFJYIGRlc2MgKHBoeXMuKSAgICAqLw0KKwlzdHJ1Y3QgbXdsX3J4X2Rl
c2MgKnByeF9yaW5nOyAgICAgIC8qIHB0ciB0byBmaXJzdCBSWCBkZXNjICh2aXJ0LikgICAgKi8N
CisJc3RydWN0IG13bF9yeF9obmRsICpyeF9obmRsOw0KKwlzdHJ1Y3QgbXdsX3J4X2huZGwgKnBu
ZXh0X3J4X2huZGw7IC8qIG5leHQgUlggaGFuZGxlIHRoYXQgY2FuIGJlIHVzZWQgKi8NCisJdTMy
IHdjYl9iYXNlOyAgICAgICAgICAgICAgICAgICAgICAvKiBGVyBiYXNlIG9mZnNldCBmb3IgcmVn
aXN0ZXJzICAgICovDQorCXUzMiByeF9kZXNjX3dyaXRlOyAgICAgICAgICAgICAgICAgLyogRlcg
ZGVzY3JpcHRvciB3cml0ZSBwb3NpdGlvbiAgICAqLw0KKwl1MzIgcnhfZGVzY19yZWFkOyAgICAg
ICAgICAgICAgICAgIC8qIEZXIGRlc2NyaXB0b3IgcmVhZCBwb3NpdGlvbiAgICAgKi8NCisJdTMy
IHJ4X2J1Zl9zaXplOyAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgdGhlIFJYIGJ1ZmZl
cnMgICAgICAgICovDQorfTsNCisNCitzdHJ1Y3QgbXdsX2FtcGR1X3N0cmVhbSB7DQorCXN0cnVj
dCBpZWVlODAyMTFfc3RhICpzdGE7DQorCXU4IHRpZDsNCisJdTggc3RhdGU7DQorCXU4IGlkeDsN
Cit9Ow0KKw0KKyNpZmRlZiBDT05GSUdfREVCVUdfRlMNCisjZGVmaW5lIE1BQ19SRUdfQUREUl9Q
Q0kob2Zmc2V0KSAgICAgICgocHJpdi0+aW9iYXNlMSArIDB4QTAwMCkgKyBvZmZzZXQpDQorDQor
I2RlZmluZSBNV0xfQUNDRVNTX01BQyAgICAgICAgICAgICAgICAxDQorI2RlZmluZSBNV0xfQUND
RVNTX1JGICAgICAgICAgICAgICAgICAyDQorI2RlZmluZSBNV0xfQUNDRVNTX0JCUCAgICAgICAg
ICAgICAgICAzDQorI2RlZmluZSBNV0xfQUNDRVNTX0NBVSAgICAgICAgICAgICAgICA0DQorI2Rl
ZmluZSBNV0xfQUNDRVNTX0FERFIwICAgICAgICAgICAgICA1DQorI2RlZmluZSBNV0xfQUNDRVNT
X0FERFIxICAgICAgICAgICAgICA2DQorI2RlZmluZSBNV0xfQUNDRVNTX0FERFIgICAgICAgICAg
ICAgICA3DQorI2VuZGlmDQorDQorc3RydWN0IG13bF9wcml2IHsNCisJc3RydWN0IGllZWU4MDIx
MV9odyAqaHc7DQorCXN0cnVjdCBmaXJtd2FyZSAqZndfdWNvZGU7DQorCWludCBjaGlwX3R5cGU7
DQorDQorCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHRfbm9kZTsNCisJc3RydWN0IGRldmljZV9ub2Rl
ICpwd3Jfbm9kZTsNCisJYm9vbCBkaXNhYmxlXzJnOw0KKwlib29sIGRpc2FibGVfNWc7DQorCWlu
dCBhbnRlbm5hX3R4Ow0KKwlpbnQgYW50ZW5uYV9yeDsNCisNCisJc3RydWN0IG13bF90eF9wd3Jf
dGJsIHR4X3B3cl90YmxbU1lTQURQVF9NQVhfTlVNX0NIQU5ORUxTXTsNCisJYm9vbCBjZGQ7DQor
CXUxNiB0eGFudGVubmEyOw0KKwl1OCBwb3dpbml0ZWQ7DQorCXUxNiBtYXhfdHhfcG93W1NZU0FE
UFRfVFhfUE9XRVJfTEVWRUxfVE9UQUxdOyAvKiBtYXggdHggcG93ZXIgKGRCbSkgKi8NCisJdTE2
IHRhcmdldF9wb3dlcnNbU1lTQURQVF9UWF9QT1dFUl9MRVZFTF9UT1RBTF07IC8qIHRhcmdldCBw
b3dlcnMgICAqLw0KKwl1OCBjYWxfdGJsWzIwMF07DQorDQorCXN0cnVjdCBwY2lfZGV2ICpwZGV2
Ow0KKwl2b2lkIF9faW9tZW0gKmlvYmFzZTA7IC8qIE1FTSBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIg
MCAgKi8NCisJdm9pZCBfX2lvbWVtICppb2Jhc2UxOyAvKiBNRU0gQmFzZSBBZGRyZXNzIFJlZ2lz
dGVyIDEgICovDQorCXUzMiBuZXh0X2Jhcl9udW07DQorDQorCXNwaW5sb2NrX3QgZndjbWRfbG9j
azsgICAgICAgLyogZm9yIGZpcm13YXJlIGNvbW1hbmQgICAgICAgICAqLw0KKwl1bnNpZ25lZCBz
aG9ydCAqcGNtZF9idWY7ICAgIC8qIHBvaW50ZXIgdG8gQ21kQnVmICh2aXJ0dWFsKSAgKi8NCisJ
ZG1hX2FkZHJfdCBwcGh5c19jbWRfYnVmOyAgICAvKiBwb2ludGVyIHRvIENtZEJ1ZiAocGh5c2lj
YWwpICovDQorCWJvb2wgaW5fc2VuZF9jbWQ7DQorDQorCWludCBpcnE7DQorCXN0cnVjdCBtd2xf
aHdfZGF0YSBod19kYXRhOyAgLyogQWRhcHRlciBIVyBzcGVjaWZpYyBpbmZvICAgICAqLw0KKw0K
KwkvKiB2YXJpb3VzIGRlc2NyaXB0b3IgZGF0YSAqLw0KKwlzcGlubG9ja190IHR4X2Rlc2NfbG9j
azsgICAgIC8qIGZvciB0eCBkZXNjcmlwdG9yIGRhdGEgICAgICAgKi8NCisJc3BpbmxvY2tfdCBy
eF9kZXNjX2xvY2s7ICAgICAvKiBmb3IgcnggZGVzY3JpcHRvciBkYXRhICAgICAgICovDQorCXN0
cnVjdCBtd2xfZGVzY19kYXRhIGRlc2NfZGF0YVtTWVNBRFBUX05VTV9PRl9ERVNDX0RBVEFdOw0K
KwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4cVtTWVNBRFBUX05VTV9PRl9ERVNDX0RBVEFdOw0KKwlz
dHJ1Y3Qgc2tfYnVmZl9oZWFkIGRlbGF5X3E7DQorCS8qIG51bWJlciBvZiBkZXNjcmlwdG9ycyBv
d25lZCBieSBmdyBhdCBhbnkgb25lIHRpbWUgKi8NCisJaW50IGZ3X2Rlc2NfY250W1NZU0FEUFRf
TlVNX09GX0RFU0NfREFUQV07DQorDQorCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0eF90YXNrOw0K
KwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcnhfdGFzazsNCisJc3RydWN0IHRhc2tsZXRfc3RydWN0
IHFlX3Rhc2s7DQorCWludCB0eHFfbGltaXQ7DQorCWJvb2wgaXNfdHhfc2NoZWR1bGU7DQorCWlu
dCByZWN2X2xpbWl0Ow0KKwlib29sIGlzX3J4X3NjaGVkdWxlOw0KKwlib29sIGlzX3FlX3NjaGVk
dWxlOw0KKwlzOCBub2lzZTsgICAgICAgICAgICAgICAgICAgIC8qIE1vc3QgcmVjZW50bHkgcmVw
b3J0ZWQgbm9pc2UgaW4gZEJtICovDQorCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQg
YmFuZF8yNDsNCisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzXzI0W0JBTkRfMjRf
Q0hBTk5FTF9OVU1dOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcmF0ZXNfMjRbQkFORF8yNF9S
QVRFX05VTV07DQorCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZF81MDsNCisJ
c3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzXzUwW0JBTkRfNTBfQ0hBTk5FTF9OVU1d
Ow0KKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcmF0ZXNfNTBbQkFORF81MF9SQVRFX05VTV07DQor
DQorCXUzMiBhcF9tYWNpZHNfc3VwcG9ydGVkOw0KKwl1MzIgc3RhX21hY2lkc19zdXBwb3J0ZWQ7
DQorCXUzMiBtYWNpZHNfdXNlZDsNCisJc3BpbmxvY2tfdCB2aWZfbG9jazsgICAgICAgICAvKiBm
b3IgcHJpdmF0ZSBpbnRlcmZhY2UgaW5mbyAgICovDQorCXN0cnVjdCBsaXN0X2hlYWQgdmlmX2xp
c3Q7ICAgLyogTGlzdCBvZiBpbnRlcmZhY2VzLiAgICAgICAgICAqLw0KKwl1MzIgcnVubmluZ19i
c3NlczsgICAgICAgICAgIC8qIGJpdG1hcCBvZiBydW5uaW5nIEJTU2VzICAgICAgKi8NCisNCisJ
c3BpbmxvY2tfdCBzdGFfbG9jazsgICAgICAgICAvKiBmb3IgcHJpdmF0ZSBzdGEgaW5mbyAgICAg
ICAgICovDQorCXN0cnVjdCBsaXN0X2hlYWQgc3RhX2xpc3Q7ICAgLyogTGlzdCBvZiBzdGF0aW9u
cyAgICAgICAgICAgICAqLw0KKw0KKwlib29sIHJhZGlvX29uOw0KKwlib29sIHJhZGlvX3Nob3J0
X3ByZWFtYmxlOw0KKwlib29sIHdtbV9lbmFibGVkOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1
ZXVlX3BhcmFtcyB3bW1fcGFyYW1zW1NZU0FEUFRfVFhfV01NX1FVRVVFU107DQorDQorCS8qIEFt
cGR1IHN0cmVhbSBpbmZvcm1hdGlvbiAqLw0KKwl1OCBudW1fYW1wZHVfcXVldWVzOw0KKwlzcGlu
bG9ja190IHN0cmVhbV9sb2NrOyAgICAgIC8qIGZvciBhbXBkdSBzdHJlYW0gICAgICAgICAgICAg
Ki8NCisJc3RydWN0IG13bF9hbXBkdV9zdHJlYW0gYW1wZHVbU1lTQURQVF9UWF9BTVBEVV9RVUVV
RVNdOw0KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2F0Y2hkb2dfYmFfaGFuZGxlOw0KKw0KKwlib29s
IG1mZ19tb2RlOw0KKw0KKyNpZmRlZiBDT05GSUdfREVCVUdfRlMNCisJc3RydWN0IGRlbnRyeSAq
ZGVidWdmc19waHk7DQorCXUzMiByZWdfdHlwZTsNCisJdTMyIHJlZ19vZmZzZXQ7DQorCXUzMiBy
ZWdfdmFsdWU7DQorI2VuZGlmDQorfTsNCisNCitzdHJ1Y3QgYmVhY29uX2luZm8gew0KKwlib29s
IHZhbGlkOw0KKwl1MTYgY2FwX2luZm87DQorCXU4IGJfcmF0ZV9zZXRbU1lTQURQVF9NQVhfREFU
QV9SQVRFU19HXTsNCisJdTggb3BfcmF0ZV9zZXRbU1lTQURQVF9NQVhfREFUQV9SQVRFU19HXTsN
CisJdTggaWVfbGlzdF9odFsxNDhdOw0KKwl1OCBpZV9saXN0X3ZodFsyNF07DQorCXU4ICppZV93
bW1fcHRyOw0KKwl1OCAqaWVfcnNuX3B0cjsNCisJdTggKmllX3JzbjQ4X3B0cjsNCisJdTggKmll
X2h0X3B0cjsNCisJdTggKmllX3ZodF9wdHI7DQorI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNI
DQorCXU4ICppZV9tZXNoaWRfcHRyOw0KKwl1OCAqaWVfbWVzaGNmZ19wdHI7DQorCXU4ICppZV9t
ZXNoY2hzd19wdHI7DQorI2VuZGlmDQorCXU4IGllX3dtbV9sZW47DQorCXU4IGllX3Jzbl9sZW47
DQorCXU4IGllX3JzbjQ4X2xlbjsNCisJdTggaWVfaHRfbGVuOw0KKwl1OCBpZV92aHRfbGVuOw0K
KyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSA0KKwl1OCBpZV9tZXNoaWRfbGVuOw0KKwl1OCBp
ZV9tZXNoY2ZnX2xlbjsNCisJdTggaWVfbWVzaGNoc3dfbGVuOw0KKyNlbmRpZg0KK307DQorDQor
c3RydWN0IG13bF92aWYgew0KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7DQorCWludCBtYWNpZDsg
ICAgICAgLyogRmlybXdhcmUgbWFjaWQgZm9yIHRoaXMgdmlmLiAgKi8NCisJdTE2IHNlcW5vOyAg
ICAgICAvKiBOb24gQU1QRFUgc2VxdWVuY2UgbnVtYmVyIGFzc2lnbmVkIGJ5IGRyaXZlci4gICov
DQorCXN0cnVjdCB7ICAgICAgICAgLyogU2F2ZWQgV0VQIGtleXMgKi8NCisJCXU4IGVuYWJsZWQ7
DQorCQl1OCBrZXlbc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYpICsgV0xBTl9LRVlf
TEVOX1dFUDEwNF07DQorCX0gd2VwX2tleV9jb25mW05VTV9XRVBfS0VZU107DQorCXU4IGJzc2lk
W0VUSF9BTEVOXTsgICAgICAgICAgLyogQlNTSUQgKi8NCisJdTggc3RhX21hY1tFVEhfQUxFTl07
ICAgICAgICAvKiBTdGF0aW9uIG1hYyBhZGRyZXNzICovDQorCS8qIEEgZmxhZyB0byBpbmRpY2F0
ZSBpcyBIVyBjcnlwdG8gaXMgZW5hYmxlZCBmb3IgdGhpcyBic3NpZCAqLw0KKwlib29sIGlzX2h3
X2NyeXB0b19lbmFibGVkOw0KKwkvKiBJbmRpY2F0ZSBpZiB0aGlzIGlzIHN0YXRpb24gbW9kZSAq
Lw0KKwlzdHJ1Y3QgYmVhY29uX2luZm8gYmVhY29uX2luZm87DQorCXUxNiBpdjE2Ow0KKwl1MzIg
aXYzMjsNCisJczgga2V5aWR4Ow0KK307DQorDQorc3RydWN0IG13bF90eF9pbmZvIHsNCisJdW5z
aWduZWQgbG9uZyBzdGFydF90aW1lOw0KKwl1MzIgcGt0czsNCit9Ow0KKw0KK3N0cnVjdCBtd2xf
YW1zZHVfZnJhZyB7DQorCXN0cnVjdCBza19idWZmICpza2I7DQorCXU4ICpjdXJfcG9zOw0KKwl1
bnNpZ25lZCBsb25nIGppZmZpZXM7DQorCXU4IHBhZDsNCisJdTggbnVtOw0KK307DQorDQorc3Ry
dWN0IG13bF9hbXNkdV9jdHJsIHsNCisJc3RydWN0IG13bF9hbXNkdV9mcmFnIGZyYWdbU1lTQURQ
VF9UWF9XTU1fUVVFVUVTXTsNCisJdTggY2FwOw0KK307DQorDQorc3RydWN0IG13bF9zdGEgew0K
KwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7DQorCWJvb2wgaXNfbWVzaF9ub2RlOw0KKwlib29sIGlz
X2FtcGR1X2FsbG93ZWQ7DQorCXN0cnVjdCBtd2xfdHhfaW5mbyB0eF9zdGF0c1tNV0xfTUFYX1RJ
RF07DQorCWJvb2wgaXNfYW1zZHVfYWxsb3dlZDsNCisJc3BpbmxvY2tfdCBhbXNkdV9sb2NrOyAg
ICAgIC8qIGZvciBhbXNkdSBhZ2dyZWdhdGlvbiAgICAgICAqLw0KKwlzdHJ1Y3QgbXdsX2Ftc2R1
X2N0cmwgYW1zZHVfY3RybDsNCisJdTE2IGl2MTY7DQorCXUzMiBpdjMyOw0KK307DQorDQorLyog
RE1BIGhlYWRlciB1c2VkIGJ5IGZpcm13YXJlIGFuZCBoYXJkd2FyZS4gKi8NCitzdHJ1Y3QgbXds
X2RtYV9kYXRhIHsNCisJX19sZTE2IGZ3bGVuOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciB3aDsN
CisJY2hhciBkYXRhWzBdOw0KK30gX19wYWNrZWQ7DQorDQorLyogVHJhbnNtaXNzaW9uIGluZm9y
bWF0aW9uIHRvIHRyYW5zbWl0IGEgc29ja2V0IGJ1ZmZlci4gKi8NCitzdHJ1Y3QgbXdsX3R4X2N0
cmwgew0KKwl2b2lkICp2aWY7DQorCXZvaWQgKnN0YTsNCisJdm9pZCAqa19jb25mOw0KKwl2b2lk
ICphbXNkdV9wa3RzOw0KKwl1OCB0eF9wcmlvcml0eTsNCisJdTggdHlwZTsNCisJdTE2IHFvc19j
dHJsOw0KKwl1OCB4bWl0X2NvbnRyb2w7DQorfTsNCisNCitzdGF0aWMgaW5saW5lIHN0cnVjdCBt
d2xfdmlmICptd2xfZGV2X2dldF92aWYoY29uc3Qgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikN
Cit7DQorCXJldHVybiAoc3RydWN0IG13bF92aWYgKikmdmlmLT5kcnZfcHJpdjsNCit9DQorDQor
c3RhdGljIGlubGluZSBzdHJ1Y3QgbXdsX3N0YSAqbXdsX2Rldl9nZXRfc3RhKGNvbnN0IHN0cnVj
dCBpZWVlODAyMTFfc3RhICpzdGEpDQorew0KKwlyZXR1cm4gKHN0cnVjdCBtd2xfc3RhICopJnN0
YS0+ZHJ2X3ByaXY7DQorfQ0KKw0KKy8qIERlZmluZWQgaW4gbWFjODAyMTEuYy4gKi8NCitleHRl
cm4gY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbXdsX21hYzgwMjExX29wczsNCisNCisjZW5k
aWYgLyogX2Rldl9oXyAqLw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZl
bGwvbXdsd2lmaS9md2NtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZp
L2Z3Y21kLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi45M2MwYTAzDQot
LS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkv
ZndjbWQuYw0KQEAgLTAsMCArMSwyNDIxIEBADQorLyoNCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYt
MjAxNSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4NCisgKg0KKyAqIFRoaXMgc29mdHdhcmUg
ZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFs
DQorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxDQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1
c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbg0KKyAqIGFjY29yZGFu
Y2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBv
ZiB3aGljaA0KKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4NCisgKg0KKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlT
LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFDQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQ0KKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVz
IGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dA0KKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4N
CisgKi8NCisNCisvKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGZpcm13YXJl
IGhvc3QgY29tbWFuZCByZWxhdGVkDQorICogZnVuY3Rpb25zLg0KKyAqLw0KKw0KKyNpbmNsdWRl
IDxsaW51eC9ldGhlcmRldmljZS5oPg0KKw0KKyNpbmNsdWRlICJzeXNhZHB0LmgiDQorI2luY2x1
ZGUgImRldi5oIg0KKyNpbmNsdWRlICJmd2NtZC5oIg0KKyNpbmNsdWRlICJob3N0Y21kLmgiDQor
DQorI2RlZmluZSBNQVhfV0FJVF9GV19DT01QTEVURV9JVEVSQVRJT05TICAgICAgICAgMjAwMA0K
KyNkZWZpbmUgTUFYX1dBSVRfR0VUX0hXX1NQRUNTX0lURVJBVE9OUyAgICAgICAgIDMNCisNCitz
dHJ1Y3QgY21kX2hlYWRlciB7DQorCV9fbGUxNiBjb21tYW5kOw0KKwlfX2xlMTYgbGVuOw0KK30g
X19wYWNrZWQ7DQorDQorc3RhdGljIGJvb2wgbXdsX2Z3Y21kX2Noa19hZGFwdGVyKHN0cnVjdCBt
d2xfcHJpdiAqcHJpdikNCit7DQorCXUzMiByZWd2YWw7DQorDQorCXJlZ3ZhbCA9IHJlYWRsKHBy
aXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVHX0lOVF9DT0RFKTsNCisNCisJaWYgKHJlZ3ZhbCA9PSAw
eGZmZmZmZmZmKSB7DQorCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LCAiYWRhcHRlciBkb2Vz
IG5vdCBleGlzdFxuIik7DQorCQlyZXR1cm4gZmFsc2U7DQorCX0NCisNCisJcmV0dXJuIHRydWU7
DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG13bF9md2NtZF9zZW5kX2NtZChzdHJ1Y3QgbXdsX3ByaXYg
KnByaXYpDQorew0KKwlpZiAocHJpdi0+bWZnX21vZGUpIHsNCisJCXN0cnVjdCBjbWRfaGVhZGVy
ICpjbWRfaGRyID0NCisJCQkoc3RydWN0IGNtZF9oZWFkZXIgKikmcHJpdi0+cGNtZF9idWZbMl07
DQorCQl1MTYgbGVuID0gbGUxNl90b19jcHUoY21kX2hkci0+bGVuKTsNCisNCisJCXdyaXRlbChw
cml2LT5wcGh5c19jbWRfYnVmLCBwcml2LT5pb2Jhc2UxICsgMHhjZDApOw0KKwkJd3JpdGVsKDB4
MDAsIHByaXYtPmlvYmFzZTEgKyAweGNkNCk7DQorCQl3cml0ZWwoMHgwMCwgcHJpdi0+aW9iYXNl
MSArIE1BQ1JFR19SRUdfSU5UX0NPREUpOw0KKwkJd3JpdGVsKGxlbiArIDQsIHByaXYtPmlvYmFz
ZTEgKyAweGM0MCk7DQorCX0NCisJd3JpdGVsKHByaXYtPnBwaHlzX2NtZF9idWYsIHByaXYtPmlv
YmFzZTEgKyBNQUNSRUdfUkVHX0dFTl9QVFIpOw0KKwl3cml0ZWwoTUFDUkVHX0gyQVJJQ19CSVRf
RE9PUl9CRUxMLA0KKwkgICAgICAgcHJpdi0+aW9iYXNlMSArIE1BQ1JFR19SRUdfSDJBX0lOVEVS
UlVQVF9FVkVOVFMpOw0KK30NCisNCitzdGF0aWMgY2hhciAqbXdsX2Z3Y21kX2dldF9jbWRfc3Ry
aW5nKHVuc2lnbmVkIHNob3J0IGNtZCkNCit7DQorCWludCBtYXhfZW50cmllcyA9IDA7DQorCWlu
dCBjdXJyX2NtZCA9IDA7DQorDQorCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgew0KKwkJdTE2IGNtZDsN
CisJCWNoYXIgKmNtZF9zdHJpbmc7DQorCX0gY21kc1tdID0gew0KKwkJeyBIT1NUQ01EX0NNRF9H
RVRfSFdfU1BFQywgIkdldEh3U3BlY2lmaWNhdGlvbnMiIH0sDQorCQl7IEhPU1RDTURfQ01EX1NF
VF9IV19TUEVDLCAiU2V0SHdTZXBjaWZpY2F0aW9ucyIgfSwNCisJCXsgSE9TVENNRF9DTURfODAy
XzExX0dFVF9TVEFULCAiODAyMTFHZXRTdGF0IiB9LA0KKwkJeyBIT1NUQ01EX0NNRF84MDJfMTFf
UkFESU9fQ09OVFJPTCwgIjgwMjExUmFkaW9Db250cm9sIiB9LA0KKwkJeyBIT1NUQ01EX0NNRF9N
RU1fQUREUl9BQ0NFU1MsICJNRU1BZGRyQWNjZXNzIiB9LA0KKwkJeyBIT1NUQ01EX0NNRF84MDJf
MTFfVFhfUE9XRVIsICI4MDIxMVR4UG93ZXIiIH0sDQorCQl7IEhPU1RDTURfQ01EXzgwMl8xMV9S
Rl9BTlRFTk5BLCAiODAyMTFSZkFudGVubmEiIH0sDQorCQl7IEhPU1RDTURfQ01EX0JST0FEQ0FT
VF9TU0lEX0VOQUJMRSwgImJyb2FkY2FzdF9zc2lkX2VuYWJsZSIgfSwNCisJCXsgSE9TVENNRF9D
TURfU0VUX1JGX0NIQU5ORUwsICJTZXRSZkNoYW5uZWwiIH0sDQorCQl7IEhPU1RDTURfQ01EX1NF
VF9BSUQsICJTZXRBaWQiIH0sDQorCQl7IEhPU1RDTURfQ01EX1NFVF9JTkZSQV9NT0RFLCAiU2V0
SW5mcmFNb2RlIiB9LA0KKwkJeyBIT1NUQ01EX0NNRF84MDJfMTFfUlRTX1RIU0QsICI4MDIxMVJ0
c1RocmVzaG9sZCIgfSwNCisJCXsgSE9TVENNRF9DTURfU0VUX0VEQ0FfUEFSQU1TLCAiU2V0RURD
QVBhcmFtcyIgfSwNCisJCXsgSE9TVENNRF9DTURfU0VUX1dNTV9NT0RFLCAiU2V0V01NTW9kZSIg
fSwNCisJCXsgSE9TVENNRF9DTURfSFRfR1VBUkRfSU5URVJWQUwsICJIdEd1YXJkSW50ZXJ2YWwi
IH0sDQorCQl7IEhPU1RDTURfQ01EX1NFVF9GSVhFRF9SQVRFLCAiU2V0Rml4ZWRSYXRlIiB9LA0K
KwkJeyBIT1NUQ01EX0NNRF9TRVRfSUVTLCAiU2V0SW5mb3JtYXRpb25FbGVtZW50cyIgfSwNCisJ
CXsgSE9TVENNRF9DTURfU0VUX0xJTktBREFQVF9DU19NT0RFLCAiTGlua0FkYXB0Q3NNb2RlIiB9
LA0KKwkJeyBIT1NUQ01EX0NNRF9TRVRfTUFDX0FERFIsICJTZXRNYWNBZGRyIiB9LA0KKwkJeyBI
T1NUQ01EX0NNRF9TRVRfUkFURV9BREFQVF9NT0RFLCAiU2V0UmF0ZUFkYXB0YXRpb25Nb2RlIiB9
LA0KKwkJeyBIT1NUQ01EX0NNRF9HRVRfV0FUQ0hET0dfQklUTUFQLCAiR2V0V2F0Y2hkb2dCaXRN
YXAiIH0sDQorCQl7IEhPU1RDTURfQ01EX0RFTF9NQUNfQUREUiwgIkRlbE1hY0FkZHIiIH0sDQor
CQl7IEhPU1RDTURfQ01EX0JTU19TVEFSVCwgIkJzc1N0YXJ0IiB9LA0KKwkJeyBIT1NUQ01EX0NN
RF9BUF9CRUFDT04sICJTZXRBcEJlYWNvbiIgfSwNCisJCXsgSE9TVENNRF9DTURfU0VUX05FV19T
VE4sICJTZXROZXdTdGF0aW9uIiB9LA0KKwkJeyBIT1NUQ01EX0NNRF9TRVRfQVBNT0RFLCAiU2V0
QXBNb2RlIiB9LA0KKwkJeyBIT1NUQ01EX0NNRF9VUERBVEVfRU5DUllQVElPTiwgIlVwZGF0ZUVu
Y3J5cHRpb24iIH0sDQorCQl7IEhPU1RDTURfQ01EX0JBU1RSRUFNLCAiQkFTdHJlYW0iIH0sDQor
CQl7IEhPU1RDTURfQ01EX1NFVF9PUFRJTUlaQVRJT05fTEVWRUwsICJTZXRPcHRpbWl6YXRpb25M
ZXZlbCJ9LA0KKwkJeyBIT1NUQ01EX0NNRF9EV0RTX0VOQUJMRSwgIkR3ZHNFbmFibGUiIH0sDQor
CQl7IEhPU1RDTURfQ01EX0ZXX0ZMVVNIX1RJTUVSLCAiRndGbHVzaFRpbWVyIiB9LA0KKwkJeyBI
T1NUQ01EX0NNRF9TRVRfQ0RELCAiU2V0Q0REIiB9LA0KKwl9Ow0KKw0KKwltYXhfZW50cmllcyA9
IEFSUkFZX1NJWkUoY21kcyk7DQorDQorCWZvciAoY3Vycl9jbWQgPSAwOyBjdXJyX2NtZCA8IG1h
eF9lbnRyaWVzOyBjdXJyX2NtZCsrKQ0KKwkJaWYgKChjbWQgJiAweDdmZmYpID09IGNtZHNbY3Vy
cl9jbWRdLmNtZCkNCisJCQlyZXR1cm4gY21kc1tjdXJyX2NtZF0uY21kX3N0cmluZzsNCisNCisJ
cmV0dXJuICJ1bmtub3duIjsNCit9DQorDQorc3RhdGljIGludCBtd2xfZndjbWRfd2FpdF9jb21w
bGV0ZShzdHJ1Y3QgbXdsX3ByaXYgKnByaXYsIHVuc2lnbmVkIHNob3J0IGNtZCkNCit7DQorCXVu
c2lnbmVkIGludCBjdXJyX2l0ZXJhdGlvbiA9IE1BWF9XQUlUX0ZXX0NPTVBMRVRFX0lURVJBVElP
TlM7DQorCXVuc2lnbmVkIHNob3J0IGludF9jb2RlID0gMDsNCisNCisJZG8gew0KKwkJaWYgKHBy
aXYtPm1mZ19tb2RlKQ0KKwkJCWludF9jb2RlID0gbGUxNl90b19jcHUoKigoX19sZTE2ICopJnBy
aXYtPnBjbWRfYnVmWzJdKSk7DQorCQllbHNlDQorCQkJaW50X2NvZGUgPSBsZTE2X3RvX2NwdSgq
KChfX2xlMTYgKikmcHJpdi0+cGNtZF9idWZbMF0pKTsNCisJCW1kZWxheSgxKTsNCisJfSB3aGls
ZSAoKGludF9jb2RlICE9IGNtZCkgJiYgKC0tY3Vycl9pdGVyYXRpb24pKTsNCisNCisJaWYgKGN1
cnJfaXRlcmF0aW9uID09IDApIHsNCisJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksICJjbWQg
MHglMDR4PSVzIHRpbWVkIG91dFxuIiwNCisJCQkgIGNtZCwgbXdsX2Z3Y21kX2dldF9jbWRfc3Ry
aW5nKGNtZCkpOw0KKwkJd2lwaHlfZXJyKHByaXYtPmh3LT53aXBoeSwgInJldHVybiBjb2RlOiAw
eCUwNHhcbiIsIGludF9jb2RlKTsNCisJCXJldHVybiAtRUlPOw0KKwl9DQorDQorCW1kZWxheSgz
KTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXdsX2Z3Y21kX2V4ZWNfY21k
KHN0cnVjdCBtd2xfcHJpdiAqcHJpdiwgdW5zaWduZWQgc2hvcnQgY21kKQ0KK3sNCisJYm9vbCBi
dXN5ID0gZmFsc2U7DQorDQorCWlmICghbXdsX2Z3Y21kX2Noa19hZGFwdGVyKHByaXYpKSB7DQor
CQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LCAiYWRhcHRlciBkb2VzIG5vdCBleGlzdFxuIik7
DQorCQlwcml2LT5pbl9zZW5kX2NtZCA9IGZhbHNlOw0KKwkJcmV0dXJuIC1FSU87DQorCX0NCisN
CisJaWYgKCFwcml2LT5pbl9zZW5kX2NtZCkgew0KKwkJcHJpdi0+aW5fc2VuZF9jbWQgPSB0cnVl
Ow0KKwkJbXdsX2Z3Y21kX3NlbmRfY21kKHByaXYpOw0KKwkJaWYgKG13bF9md2NtZF93YWl0X2Nv
bXBsZXRlKHByaXYsIDB4ODAwMCB8IGNtZCkpIHsNCisJCQl3aXBoeV9lcnIocHJpdi0+aHctPndp
cGh5LCAidGltZW91dDogMHglMDR4XG4iLCBjbWQpOw0KKwkJCXByaXYtPmluX3NlbmRfY21kID0g
ZmFsc2U7DQorCQkJcmV0dXJuIC1FSU87DQorCQl9DQorCX0gZWxzZSB7DQorCQl3aXBoeV93YXJu
KHByaXYtPmh3LT53aXBoeSwNCisJCQkgICAicHJldmlvdXMgY29tbWFuZCBpcyBzdGlsbCBydW5u
aW5nXG4iKTsNCisJCWJ1c3kgPSB0cnVlOw0KKwl9DQorDQorCWlmICghYnVzeSkNCisJCXByaXYt
PmluX3NlbmRfY21kID0gZmFsc2U7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50
IG13bF9md2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChzdHJ1Y3QgbXdsX3ByaXYgKnByaXYsDQor
CQkJCQkgIGJvb2wgZW5hYmxlLCBib29sIGZvcmNlKQ0KK3sNCisJc3RydWN0IGhvc3RjbWRfY21k
XzgwMl8xMV9yYWRpb19jb250cm9sICpwY21kOw0KKw0KKwlpZiAoZW5hYmxlID09IHByaXYtPnJh
ZGlvX29uICYmICFmb3JjZSkNCisJCXJldHVybiAwOw0KKw0KKwlwY21kID0gKHN0cnVjdCBob3N0
Y21kX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbCAqKSZwcml2LT5wY21kX2J1ZlswXTsNCisNCisJ
c3Bpbl9sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJbWVtc2V0KHBjbWQsIDB4MDAs
IHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5jbWRfaGRyLmNtZCA9IGNwdV90b19sZTE2KEhPU1RD
TURfQ01EXzgwMl8xMV9SQURJT19DT05UUk9MKTsNCisJcGNtZC0+Y21kX2hkci5sZW4gPSBjcHVf
dG9fbGUxNihzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoV0xf
U0VUKTsNCisJcGNtZC0+Y29udHJvbCA9IGNwdV90b19sZTE2KHByaXYtPnJhZGlvX3Nob3J0X3By
ZWFtYmxlID8NCisJCVdMX0FVVE9fUFJFQU1CTEUgOiBXTF9MT05HX1BSRUFNQkxFKTsNCisJcGNt
ZC0+cmFkaW9fb24gPSBjcHVfdG9fbGUxNihlbmFibGUgPyBXTF9FTkFCTEUgOiBXTF9ESVNBQkxF
KTsNCisNCisJaWYgKG13bF9md2NtZF9leGVjX2NtZChwcml2LCBIT1NUQ01EX0NNRF84MDJfMTFf
UkFESU9fQ09OVFJPTCkpIHsNCisJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsN
CisJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksICJmYWlsZWQgZXhlY3V0aW9uXG4iKTsNCisJ
CXJldHVybiAtRUlPOw0KKwl9DQorDQorCXByaXYtPnJhZGlvX29uID0gZW5hYmxlOw0KKw0KKwlz
cGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCXJldHVybiAwOw0KK30NCisN
CitzdGF0aWMgaW50IG13bF9md2NtZF9nZXRfdHhfcG93ZXJzKHN0cnVjdCBtd2xfcHJpdiAqcHJp
diwgdTE2ICpwb3dsaXN0LCB1MTYgY2gsDQorCQkJCSAgIHUxNiBiYW5kLCB1MTYgd2lkdGgsIHUx
NiBzdWJfY2gpDQorew0KKwlzdHJ1Y3QgaG9zdGNtZF9jbWRfODAyXzExX3R4X3Bvd2VyICpwY21k
Ow0KKwlpbnQgaTsNCisNCisJcGNtZCA9IChzdHJ1Y3QgaG9zdGNtZF9jbWRfODAyXzExX3R4X3Bv
d2VyICopJnByaXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21k
X2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwgMHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQt
PmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURfODAyXzExX1RYX1BPV0VSKTsN
CisJcGNtZC0+Y21kX2hkci5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsNCisJcGNt
ZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoSE9TVENNRF9BQ1RfR0VOX0dFVF9MSVNUKTsNCisJcGNt
ZC0+Y2ggPSBjcHVfdG9fbGUxNihjaCk7DQorCXBjbWQtPmJ3ID0gY3B1X3RvX2xlMTYod2lkdGgp
Ow0KKwlwY21kLT5iYW5kID0gY3B1X3RvX2xlMTYoYmFuZCk7DQorCXBjbWQtPnN1Yl9jaCA9IGNw
dV90b19sZTE2KHN1Yl9jaCk7DQorDQorCWlmIChtd2xfZndjbWRfZXhlY19jbWQocHJpdiwgSE9T
VENNRF9DTURfODAyXzExX1RYX1BPV0VSKSkgew0KKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3
Y21kX2xvY2spOw0KKwkJd2lwaHlfZXJyKHByaXYtPmh3LT53aXBoeSwgImZhaWxlZCBleGVjdXRp
b25cbiIpOw0KKwkJcmV0dXJuIC1FSU87DQorCX0NCisNCisJZm9yIChpID0gMDsgaSA8IFNZU0FE
UFRfVFhfUE9XRVJfTEVWRUxfVE9UQUw7IGkrKykNCisJCXBvd2xpc3RbaV0gPSBsZTE2X3RvX2Nw
dShwY21kLT5wb3dlcl9sZXZlbF9saXN0W2ldKTsNCisNCisJc3Bpbl91bmxvY2tfYmgoJnByaXYt
PmZ3Y21kX2xvY2spOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBtd2xfZndj
bWRfc2V0X3R4X3Bvd2VycyhzdHJ1Y3QgbXdsX3ByaXYgKnByaXYsIHUxNiB0eHBvd1tdLA0KKwkJ
CQkgICB1OCBhY3Rpb24sIHUxNiBjaCwgdTE2IGJhbmQsDQorCQkJCSAgIHUxNiB3aWR0aCwgdTE2
IHN1Yl9jaCkNCit7DQorCXN0cnVjdCBob3N0Y21kX2NtZF84MDJfMTFfdHhfcG93ZXIgKnBjbWQ7
DQorCWludCBpOw0KKw0KKwlwY21kID0gKHN0cnVjdCBob3N0Y21kX2NtZF84MDJfMTFfdHhfcG93
ZXIgKikmcHJpdi0+cGNtZF9idWZbMF07DQorDQorCXNwaW5fbG9ja19iaCgmcHJpdi0+ZndjbWRf
bG9jayk7DQorDQorCW1lbXNldChwY21kLCAweDAwLCBzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+
Y21kX2hkci5jbWQgPSBjcHVfdG9fbGUxNihIT1NUQ01EX0NNRF84MDJfMTFfVFhfUE9XRVIpOw0K
KwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkpOw0KKwlwY21k
LT5hY3Rpb24gPSBjcHVfdG9fbGUxNihhY3Rpb24pOw0KKwlwY21kLT5jaCA9IGNwdV90b19sZTE2
KGNoKTsNCisJcGNtZC0+YncgPSBjcHVfdG9fbGUxNih3aWR0aCk7DQorCXBjbWQtPmJhbmQgPSBj
cHVfdG9fbGUxNihiYW5kKTsNCisJcGNtZC0+c3ViX2NoID0gY3B1X3RvX2xlMTYoc3ViX2NoKTsN
CisNCisJZm9yIChpID0gMDsgaSA8IFNZU0FEUFRfVFhfUE9XRVJfTEVWRUxfVE9UQUw7IGkrKykN
CisJCXBjbWQtPnBvd2VyX2xldmVsX2xpc3RbaV0gPSBjcHVfdG9fbGUxNih0eHBvd1tpXSk7DQor
DQorCWlmIChtd2xfZndjbWRfZXhlY19jbWQocHJpdiwgSE9TVENNRF9DTURfODAyXzExX1RYX1BP
V0VSKSkgew0KKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJd2lwaHlf
ZXJyKHByaXYtPmh3LT53aXBoeSwgImZhaWxlZCBleGVjdXRpb25cbiIpOw0KKwkJcmV0dXJuIC1F
SU87DQorCX0NCisNCisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwly
ZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHU4IG13bF9md2NtZF9nZXRfODBtX3ByaV9jaG5sX29m
ZnNldCh1OCBjaGFubmVsKQ0KK3sNCisJdTggYWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFO
XzA7DQorDQorCXN3aXRjaCAoY2hhbm5lbCkgew0KKwljYXNlIDM2Og0KKwkJYWN0X3ByaW1hcnkg
PSBBQ1RfUFJJTUFSWV9DSEFOXzA7DQorCQlicmVhazsNCisJY2FzZSA0MDoNCisJCWFjdF9wcmlt
YXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8xOw0KKwkJYnJlYWs7DQorCWNhc2UgNDQ6DQorCQlhY3Rf
cHJpbWFyeSA9IEFDVF9QUklNQVJZX0NIQU5fMjsNCisJCWJyZWFrOw0KKwljYXNlIDQ4Og0KKwkJ
YWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzM7DQorCQlicmVhazsNCisJY2FzZSA1MjoN
CisJCWFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8wOw0KKwkJYnJlYWs7DQorCWNhc2Ug
NTY6DQorCQlhY3RfcHJpbWFyeSA9IEFDVF9QUklNQVJZX0NIQU5fMTsNCisJCWJyZWFrOw0KKwlj
YXNlIDYwOg0KKwkJYWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzI7DQorCQlicmVhazsN
CisJY2FzZSA2NDoNCisJCWFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8zOw0KKwkJYnJl
YWs7DQorCWNhc2UgMTAwOg0KKwkJYWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzA7DQor
CQlicmVhazsNCisJY2FzZSAxMDQ6DQorCQlhY3RfcHJpbWFyeSA9IEFDVF9QUklNQVJZX0NIQU5f
MTsNCisJCWJyZWFrOw0KKwljYXNlIDEwODoNCisJCWFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllf
Q0hBTl8yOw0KKwkJYnJlYWs7DQorCWNhc2UgMTEyOg0KKwkJYWN0X3ByaW1hcnkgPSBBQ1RfUFJJ
TUFSWV9DSEFOXzM7DQorCQlicmVhazsNCisJY2FzZSAxMTY6DQorCQlhY3RfcHJpbWFyeSA9IEFD
VF9QUklNQVJZX0NIQU5fMDsNCisJCWJyZWFrOw0KKwljYXNlIDEyMDoNCisJCWFjdF9wcmltYXJ5
ID0gQUNUX1BSSU1BUllfQ0hBTl8xOw0KKwkJYnJlYWs7DQorCWNhc2UgMTI0Og0KKwkJYWN0X3By
aW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzI7DQorCQlicmVhazsNCisJY2FzZSAxMjg6DQorCQlh
Y3RfcHJpbWFyeSA9IEFDVF9QUklNQVJZX0NIQU5fMzsNCisJCWJyZWFrOw0KKwljYXNlIDEzMjoN
CisJCWFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8wOw0KKwkJYnJlYWs7DQorCWNhc2Ug
MTM2Og0KKwkJYWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzE7DQorCQlicmVhazsNCisJ
Y2FzZSAxNDA6DQorCQlhY3RfcHJpbWFyeSA9IEFDVF9QUklNQVJZX0NIQU5fMjsNCisJCWJyZWFr
Ow0KKwljYXNlIDE0NDoNCisJCWFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8zOw0KKwkJ
YnJlYWs7DQorCWNhc2UgMTQ5Og0KKwkJYWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzA7
DQorCQlicmVhazsNCisJY2FzZSAxNTM6DQorCQlhY3RfcHJpbWFyeSA9IEFDVF9QUklNQVJZX0NI
QU5fMTsNCisJCWJyZWFrOw0KKwljYXNlIDE1NzoNCisJCWFjdF9wcmltYXJ5ID0gQUNUX1BSSU1B
UllfQ0hBTl8yOw0KKwkJYnJlYWs7DQorCWNhc2UgMTYxOg0KKwkJYWN0X3ByaW1hcnkgPSBBQ1Rf
UFJJTUFSWV9DSEFOXzM7DQorCQlicmVhazsNCisJfQ0KKw0KKwlyZXR1cm4gYWN0X3ByaW1hcnk7
DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG13bF9md2NtZF9wYXJzZV9iZWFjb24oc3RydWN0IG13bF9w
cml2ICpwcml2LA0KKwkJCQkgICBzdHJ1Y3QgbXdsX3ZpZiAqdmlmLCB1OCAqYmVhY29uLCBpbnQg
bGVuKQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210Ow0KKwlzdHJ1Y3QgYmVhY29u
X2luZm8gKmJlYWNvbl9pbmZvOw0KKwlpbnQgYmFzZWxlbjsNCisJdTggKnBvczsNCisJc2l6ZV90
IGxlZnQ7DQorCWJvb2wgZWxlbV9wYXJzZV9mYWlsZWQ7DQorDQorCW1nbXQgPSAoc3RydWN0IGll
ZWU4MDIxMV9tZ210ICopYmVhY29uOw0KKw0KKwliYXNlbGVuID0gKHU4ICopbWdtdC0+dS5iZWFj
b24udmFyaWFibGUgLSAodTggKiltZ210Ow0KKwlpZiAoYmFzZWxlbiA+IGxlbikNCisJCXJldHVy
bjsNCisNCisJYmVhY29uX2luZm8gPSAmdmlmLT5iZWFjb25faW5mbzsNCisJbWVtc2V0KGJlYWNv
bl9pbmZvLCAwLCBzaXplb2Yoc3RydWN0IGJlYWNvbl9pbmZvKSk7DQorCWJlYWNvbl9pbmZvLT52
YWxpZCA9IGZhbHNlOw0KKwliZWFjb25faW5mby0+aWVfaHRfcHRyID0gJmJlYWNvbl9pbmZvLT5p
ZV9saXN0X2h0WzBdOw0KKwliZWFjb25faW5mby0+aWVfdmh0X3B0ciA9ICZiZWFjb25faW5mby0+
aWVfbGlzdF92aHRbMF07DQorDQorCWJlYWNvbl9pbmZvLT5jYXBfaW5mbyA9IGxlMTZfdG9fY3B1
KG1nbXQtPnUuYmVhY29uLmNhcGFiX2luZm8pOw0KKw0KKwlwb3MgPSAodTggKiltZ210LT51LmJl
YWNvbi52YXJpYWJsZTsNCisJbGVmdCA9IGxlbiAtIGJhc2VsZW47DQorDQorCWVsZW1fcGFyc2Vf
ZmFpbGVkID0gZmFsc2U7DQorDQorCXdoaWxlIChsZWZ0ID49IDIpIHsNCisJCXU4IGlkLCBlbGVu
Ow0KKw0KKwkJaWQgPSAqcG9zKys7DQorCQllbGVuID0gKnBvcysrOw0KKwkJbGVmdCAtPSAyOw0K
Kw0KKwkJaWYgKGVsZW4gPiBsZWZ0KSB7DQorCQkJZWxlbV9wYXJzZV9mYWlsZWQgPSB0cnVlOw0K
KwkJCWJyZWFrOw0KKwkJfQ0KKw0KKwkJc3dpdGNoIChpZCkgew0KKwkJY2FzZSBXTEFOX0VJRF9T
VVBQX1JBVEVTOg0KKwkJY2FzZSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzoNCisJCQl7DQorCQkJ
aW50IGlkeCwgYmksIG9pOw0KKwkJCXU4IHJhdGU7DQorDQorCQkJZm9yIChiaSA9IDA7IGJpIDwg
U1lTQURQVF9NQVhfREFUQV9SQVRFU19HOw0KKwkJCSAgICAgYmkrKykgew0KKwkJCQlpZiAoYmVh
Y29uX2luZm8tPmJfcmF0ZV9zZXRbYmldID09IDApDQorCQkJCQlicmVhazsNCisJCQl9DQorDQor
CQkJZm9yIChvaSA9IDA7IG9pIDwgU1lTQURQVF9NQVhfREFUQV9SQVRFU19HOw0KKwkJCSAgICAg
b2krKykgew0KKwkJCQlpZiAoYmVhY29uX2luZm8tPm9wX3JhdGVfc2V0W29pXSA9PSAwKQ0KKwkJ
CQkJYnJlYWs7DQorCQkJfQ0KKw0KKwkJCWZvciAoaWR4ID0gMDsgaWR4IDwgZWxlbjsgaWR4Kysp
IHsNCisJCQkJcmF0ZSA9IHBvc1tpZHhdOw0KKwkJCQlpZiAoKHJhdGUgJiAweDgwKSAhPSAwKSB7
DQorCQkJCQlpZiAoYmkgPCBTWVNBRFBUX01BWF9EQVRBX1JBVEVTX0cpDQorCQkJCQkJYmVhY29u
X2luZm8tPmJfcmF0ZV9zZXRbYmkrK10NCisJCQkJCQkJPSByYXRlICYgMHg3ZjsNCisJCQkJCWVs
c2Ugew0KKwkJCQkJCWVsZW1fcGFyc2VfZmFpbGVkID0gdHJ1ZTsNCisJCQkJCQlicmVhazsNCisJ
CQkJCX0NCisJCQkJfQ0KKwkJCQlpZiAob2kgPCBTWVNBRFBUX01BWF9EQVRBX1JBVEVTX0cpDQor
CQkJCQliZWFjb25faW5mby0+b3BfcmF0ZV9zZXRbb2krK10gPQ0KKwkJCQkJCXJhdGUgJiAweDdm
Ow0KKwkJCQllbHNlIHsNCisJCQkJCWVsZW1fcGFyc2VfZmFpbGVkID0gdHJ1ZTsNCisJCQkJCWJy
ZWFrOw0KKwkJCQl9DQorCQkJfQ0KKwkJCX0NCisJCQlicmVhazsNCisJCWNhc2UgV0xBTl9FSURf
UlNOOg0KKwkJCWJlYWNvbl9pbmZvLT5pZV9yc240OF9sZW4gPSAoZWxlbiArIDIpOw0KKwkJCWJl
YWNvbl9pbmZvLT5pZV9yc240OF9wdHIgPSAocG9zIC0gMik7DQorCQkJYnJlYWs7DQorCQljYXNl
IFdMQU5fRUlEX0hUX0NBUEFCSUxJVFk6DQorCQljYXNlIFdMQU5fRUlEX0hUX09QRVJBVElPTjoN
CisJCWNhc2UgV0xBTl9FSURfT1ZFUkxBUF9CU1NfU0NBTl9QQVJBTToNCisJCWNhc2UgV0xBTl9F
SURfRVhUX0NBUEFCSUxJVFk6DQorCQkJYmVhY29uX2luZm8tPmllX2h0X2xlbiArPSAoZWxlbiAr
IDIpOw0KKwkJCWlmIChiZWFjb25faW5mby0+aWVfaHRfbGVuID4NCisJCQkgICAgc2l6ZW9mKGJl
YWNvbl9pbmZvLT5pZV9saXN0X2h0KSkgew0KKwkJCQllbGVtX3BhcnNlX2ZhaWxlZCA9IHRydWU7
DQorCQkJfSBlbHNlIHsNCisJCQkJKmJlYWNvbl9pbmZvLT5pZV9odF9wdHIrKyA9IGlkOw0KKwkJ
CQkqYmVhY29uX2luZm8tPmllX2h0X3B0cisrID0gZWxlbjsNCisJCQkJbWVtY3B5KGJlYWNvbl9p
bmZvLT5pZV9odF9wdHIsIHBvcywgZWxlbik7DQorCQkJCWJlYWNvbl9pbmZvLT5pZV9odF9wdHIg
Kz0gZWxlbjsNCisJCQl9DQorCQkJYnJlYWs7DQorI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNI
DQorCQljYXNlIFdMQU5fRUlEX01FU0hfQ09ORklHOg0KKwkJCWJlYWNvbl9pbmZvLT5pZV9tZXNo
Y2ZnX2xlbiA9IChlbGVuICsgMik7DQorCQkJYmVhY29uX2luZm8tPmllX21lc2hjZmdfcHRyID0g
KHBvcyAtIDIpOw0KKwkJCWJyZWFrOw0KKwkJY2FzZSBXTEFOX0VJRF9NRVNIX0lEOg0KKwkJCWJl
YWNvbl9pbmZvLT5pZV9tZXNoaWRfbGVuID0gKGVsZW4gKyAyKTsNCisJCQliZWFjb25faW5mby0+
aWVfbWVzaGlkX3B0ciA9IChwb3MgLSAyKTsNCisJCQlicmVhazsNCisJCWNhc2UgV0xBTl9FSURf
Q0hBTl9TV0lUQ0hfUEFSQU06DQorCQkJYmVhY29uX2luZm8tPmllX21lc2hjaHN3X2xlbiA9IChl
bGVuICsgMik7DQorCQkJYmVhY29uX2luZm8tPmllX21lc2hjaHN3X3B0ciA9IChwb3MgLSAyKTsN
CisJCQlicmVhazsNCisjZW5kaWYNCisJCWNhc2UgV0xBTl9FSURfVkhUX0NBUEFCSUxJVFk6DQor
CQljYXNlIFdMQU5fRUlEX1ZIVF9PUEVSQVRJT046DQorCQljYXNlIFdMQU5fRUlEX09QTU9ERV9O
T1RJRjoNCisJCQliZWFjb25faW5mby0+aWVfdmh0X2xlbiArPSAoZWxlbiArIDIpOw0KKwkJCWlm
IChiZWFjb25faW5mby0+aWVfdmh0X2xlbiA+DQorCQkJICAgIHNpemVvZihiZWFjb25faW5mby0+
aWVfbGlzdF92aHQpKSB7DQorCQkJCWVsZW1fcGFyc2VfZmFpbGVkID0gdHJ1ZTsNCisJCQl9IGVs
c2Ugew0KKwkJCQkqYmVhY29uX2luZm8tPmllX3ZodF9wdHIrKyA9IGlkOw0KKwkJCQkqYmVhY29u
X2luZm8tPmllX3ZodF9wdHIrKyA9IGVsZW47DQorCQkJCW1lbWNweShiZWFjb25faW5mby0+aWVf
dmh0X3B0ciwgcG9zLCBlbGVuKTsNCisJCQkJYmVhY29uX2luZm8tPmllX3ZodF9wdHIgKz0gZWxl
bjsNCisJCQl9DQorCQkJYnJlYWs7DQorCQljYXNlIFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQzoN
CisJCQlpZiAoKHBvc1swXSA9PSAweDAwKSAmJiAocG9zWzFdID09IDB4NTApICYmDQorCQkJICAg
IChwb3NbMl0gPT0gMHhmMikpIHsNCisJCQkJaWYgKHBvc1szXSA9PSAweDAxKSB7DQorCQkJCQli
ZWFjb25faW5mby0+aWVfcnNuX2xlbiA9IChlbGVuICsgMik7DQorCQkJCQliZWFjb25faW5mby0+
aWVfcnNuX3B0ciA9IChwb3MgLSAyKTsNCisJCQkJfQ0KKw0KKwkJCQlpZiAocG9zWzNdID09IDB4
MDIpIHsNCisJCQkJCWJlYWNvbl9pbmZvLT5pZV93bW1fbGVuID0gKGVsZW4gKyAyKTsNCisJCQkJ
CWJlYWNvbl9pbmZvLT5pZV93bW1fcHRyID0gKHBvcyAtIDIpOw0KKwkJCQl9DQorCQkJfQ0KKwkJ
CWJyZWFrOw0KKwkJZGVmYXVsdDoNCisJCQlicmVhazsNCisJCX0NCisNCisJCWxlZnQgLT0gZWxl
bjsNCisJCXBvcyArPSBlbGVuOw0KKwl9DQorDQorCWlmICghZWxlbV9wYXJzZV9mYWlsZWQpIHsN
CisJCWJlYWNvbl9pbmZvLT5pZV9odF9wdHIgPSAmYmVhY29uX2luZm8tPmllX2xpc3RfaHRbMF07
DQorCQliZWFjb25faW5mby0+aWVfdmh0X3B0ciA9ICZiZWFjb25faW5mby0+aWVfbGlzdF92aHRb
MF07DQorCQliZWFjb25faW5mby0+dmFsaWQgPSB0cnVlOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBp
bnQgbXdsX2Z3Y21kX3NldF9pZXMoc3RydWN0IG13bF9wcml2ICpwcml2LCBzdHJ1Y3QgbXdsX3Zp
ZiAqbXdsX3ZpZikNCit7DQorCXN0cnVjdCBob3N0Y21kX2NtZF9zZXRfaWVzICpwY21kOw0KKwlz
dHJ1Y3QgYmVhY29uX2luZm8gKmJlYWNvbiA9ICZtd2xfdmlmLT5iZWFjb25faW5mbzsNCisJdTE2
IGllX2xpc3RfbGVuX3Byb3ByaWV0YXJ5ID0gMDsNCisNCisJaWYgKCFiZWFjb24tPnZhbGlkKQ0K
KwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWlmIChiZWFjb24tPmllX2h0X2xlbiA+IHNpemVvZihw
Y21kLT5pZV9saXN0X2h0KSkNCisJCWdvdG8gZWludmFsOw0KKw0KKwlpZiAoYmVhY29uLT5pZV92
aHRfbGVuID4gc2l6ZW9mKHBjbWQtPmllX2xpc3Rfdmh0KSkNCisJCWdvdG8gZWludmFsOw0KKw0K
KwlwY21kID0gKHN0cnVjdCBob3N0Y21kX2NtZF9zZXRfaWVzICopJnByaXYtPnBjbWRfYnVmWzBd
Ow0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwltZW1zZXQocGNt
ZCwgMHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3RvX2xl
MTYoSE9TVENNRF9DTURfU0VUX0lFUyk7DQorCXBjbWQtPmNtZF9oZHIubGVuID0gY3B1X3RvX2xl
MTYoc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIubWFjaWQgPSBtd2xfdmlmLT5tYWNp
ZDsNCisNCisJcGNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoSE9TVENNRF9BQ1RfR0VOX1NFVCk7
DQorDQorCW1lbWNweShwY21kLT5pZV9saXN0X2h0LCBiZWFjb24tPmllX2h0X3B0ciwgYmVhY29u
LT5pZV9odF9sZW4pOw0KKwlwY21kLT5pZV9saXN0X2xlbl9odCA9IGNwdV90b19sZTE2KGJlYWNv
bi0+aWVfaHRfbGVuKTsNCisNCisJbWVtY3B5KHBjbWQtPmllX2xpc3Rfdmh0LCBiZWFjb24tPmll
X3ZodF9wdHIsIGJlYWNvbi0+aWVfdmh0X2xlbik7DQorCXBjbWQtPmllX2xpc3RfbGVuX3ZodCA9
IGNwdV90b19sZTE2KGJlYWNvbi0+aWVfdmh0X2xlbik7DQorDQorI2lmZGVmIENPTkZJR19NQUM4
MDIxMV9NRVNIDQorCW1lbWNweShwY21kLT5pZV9saXN0X3Byb3ByaWV0YXJ5LCBiZWFjb24tPmll
X21lc2hpZF9wdHIsDQorCSAgICAgICBiZWFjb24tPmllX21lc2hpZF9sZW4pOw0KKwlpZV9saXN0
X2xlbl9wcm9wcmlldGFyeSA9IGJlYWNvbi0+aWVfbWVzaGlkX2xlbjsNCisJbWVtY3B5KHBjbWQt
PmllX2xpc3RfcHJvcHJpZXRhcnkgKyBpZV9saXN0X2xlbl9wcm9wcmlldGFyeSwNCisJICAgICAg
IGJlYWNvbi0+aWVfbWVzaGNmZ19wdHIsIGJlYWNvbi0+aWVfbWVzaGNmZ19sZW4pOw0KKwlpZV9s
aXN0X2xlbl9wcm9wcmlldGFyeSArPSBiZWFjb24tPmllX21lc2hjZmdfbGVuOw0KKwltZW1jcHko
cGNtZC0+aWVfbGlzdF9wcm9wcmlldGFyeSArIGllX2xpc3RfbGVuX3Byb3ByaWV0YXJ5LA0KKwkg
ICAgICAgYmVhY29uLT5pZV9tZXNoY2hzd19wdHIsIGJlYWNvbi0+aWVfbWVzaGNoc3dfbGVuKTsN
CisJaWVfbGlzdF9sZW5fcHJvcHJpZXRhcnkgKz0gYmVhY29uLT5pZV9tZXNoY2hzd19sZW47DQor
I2VuZGlmDQorDQorCWlmIChwcml2LT5jaGlwX3R5cGUgPT0gTVdMODg5Nykgew0KKwkJbWVtY3B5
KHBjbWQtPmllX2xpc3RfcHJvcHJpZXRhcnkgKyBpZV9saXN0X2xlbl9wcm9wcmlldGFyeSwNCisJ
CSAgICAgICBiZWFjb24tPmllX3dtbV9wdHIsIGJlYWNvbi0+aWVfd21tX2xlbik7DQorCQlpZV9s
aXN0X2xlbl9wcm9wcmlldGFyeSArPSBtd2xfdmlmLT5iZWFjb25faW5mby5pZV93bW1fbGVuOw0K
Kwl9DQorDQorCXBjbWQtPmllX2xpc3RfbGVuX3Byb3ByaWV0YXJ5ID0gY3B1X3RvX2xlMTYoaWVf
bGlzdF9sZW5fcHJvcHJpZXRhcnkpOw0KKw0KKwlpZiAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYs
IEhPU1RDTURfQ01EX1NFVF9JRVMpKSB7DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRf
bG9jayk7DQorCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LCAiZmFpbGVkIGV4ZWN1dGlvblxu
Iik7DQorCQlyZXR1cm4gLUVJTzsNCisJfQ0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+Zndj
bWRfbG9jayk7DQorDQorCXJldHVybiAwOw0KKw0KK2VpbnZhbDoNCisNCisJd2lwaHlfZXJyKHBy
aXYtPmh3LT53aXBoeSwgImxlbmd0aCBvZiBJRSBpcyB0b28gbG9uZ1xuIik7DQorDQorCXJldHVy
biAtRUlOVkFMOw0KK30NCisNCitzdGF0aWMgaW50IG13bF9md2NtZF9zZXRfYXBfYmVhY29uKHN0
cnVjdCBtd2xfcHJpdiAqcHJpdiwNCisJCQkJICAgc3RydWN0IG13bF92aWYgKm13bF92aWYsDQor
CQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mKQ0KK3sNCisJc3RydWN0
IGhvc3RjbWRfY21kX2FwX2JlYWNvbiAqcGNtZDsNCisJc3RydWN0IGRzX3BhcmFtcyAqcGh5X2Rz
X3BhcmFtX3NldDsNCisNCisJaWYgKCFtd2xfdmlmLT5iZWFjb25faW5mby52YWxpZCkNCisJCXJl
dHVybiAtRUlOVkFMOw0KKw0KKwkvKiB3bW0gc3RydWN0dXJlIG9mIHN0YXJ0IGNvbW1hbmQgaXMg
ZGVmaW5lZCBsZXNzIG9uZSBieXRlLA0KKwkgKiBkdWUgdG8gZm9sbG93aW5nIGZpZWxkIGNvdW50
cnkgaXMgbm90IHVzZWQsIGFkZCBieXRlIG9uZQ0KKwkgKiB0byBieXBhc3MgdGhlIGNoZWNrLg0K
KwkgKi8NCisJaWYgKG13bF92aWYtPmJlYWNvbl9pbmZvLmllX3dtbV9sZW4gPg0KKwkgICAgKHNp
emVvZihwY21kLT5zdGFydF9jbWQud21tX3BhcmFtKSArIDEpKQ0KKwkJZ290byBpZWxlbmVycjsN
CisNCisJaWYgKG13bF92aWYtPmJlYWNvbl9pbmZvLmllX3Jzbl9sZW4gPiBzaXplb2YocGNtZC0+
c3RhcnRfY21kLnJzbl9pZSkpDQorCQlnb3RvIGllbGVuZXJyOw0KKw0KKwlpZiAobXdsX3ZpZi0+
YmVhY29uX2luZm8uaWVfcnNuNDhfbGVuID4NCisJICAgIHNpemVvZihwY21kLT5zdGFydF9jbWQu
cnNuNDhfaWUpKQ0KKwkJZ290byBpZWxlbmVycjsNCisNCisJcGNtZCA9IChzdHJ1Y3QgaG9zdGNt
ZF9jbWRfYXBfYmVhY29uICopJnByaXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlzcGluX2xvY2tfYmgo
JnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwgMHgwMCwgc2l6ZW9mKCpwY21k
KSk7DQorCXBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURfQVBfQkVB
Q09OKTsNCisJcGNtZC0+Y21kX2hkci5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsN
CisJcGNtZC0+Y21kX2hkci5tYWNpZCA9IG13bF92aWYtPm1hY2lkOw0KKw0KKwlldGhlcl9hZGRy
X2NvcHkocGNtZC0+c3RhcnRfY21kLnN0YV9tYWNfYWRkciwgbXdsX3ZpZi0+YnNzaWQpOw0KKwlt
ZW1jcHkocGNtZC0+c3RhcnRfY21kLnNzaWQsIGJzc19jb25mLT5zc2lkLCBic3NfY29uZi0+c3Np
ZF9sZW4pOw0KKwlwY21kLT5zdGFydF9jbWQuYnNzX3R5cGUgPSAxOw0KKwlwY21kLT5zdGFydF9j
bWQuYmNuX3BlcmlvZCAgPSBjcHVfdG9fbGUxNihic3NfY29uZi0+YmVhY29uX2ludCk7DQorCXBj
bWQtPnN0YXJ0X2NtZC5kdGltX3BlcmlvZCA9IGJzc19jb25mLT5kdGltX3BlcmlvZDsgLyogOGJp
dCAqLw0KKw0KKwlwaHlfZHNfcGFyYW1fc2V0ID0gJnBjbWQtPnN0YXJ0X2NtZC5waHlfcGFyYW1f
c2V0LmRzX3BhcmFtX3NldDsNCisJcGh5X2RzX3BhcmFtX3NldC0+ZWxlbV9pZCA9IFdMQU5fRUlE
X0RTX1BBUkFNUzsNCisJcGh5X2RzX3BhcmFtX3NldC0+bGVuID0gc2l6ZW9mKHBoeV9kc19wYXJh
bV9zZXQtPmN1cnJlbnRfY2hubCk7DQorCXBoeV9kc19wYXJhbV9zZXQtPmN1cnJlbnRfY2hubCA9
IGJzc19jb25mLT5jaGFuZGVmLmNoYW4tPmh3X3ZhbHVlOw0KKw0KKwlwY21kLT5zdGFydF9jbWQu
cHJvYmVfZGVsYXkgPSBjcHVfdG9fbGUxNigxMCk7DQorCXBjbWQtPnN0YXJ0X2NtZC5jYXBfaW5m
byA9IGNwdV90b19sZTE2KG13bF92aWYtPmJlYWNvbl9pbmZvLmNhcF9pbmZvKTsNCisNCisJbWVt
Y3B5KCZwY21kLT5zdGFydF9jbWQud21tX3BhcmFtLCBtd2xfdmlmLT5iZWFjb25faW5mby5pZV93
bW1fcHRyLA0KKwkgICAgICAgbXdsX3ZpZi0+YmVhY29uX2luZm8uaWVfd21tX2xlbik7DQorDQor
CW1lbWNweSgmcGNtZC0+c3RhcnRfY21kLnJzbl9pZSwgbXdsX3ZpZi0+YmVhY29uX2luZm8uaWVf
cnNuX3B0ciwNCisJICAgICAgIG13bF92aWYtPmJlYWNvbl9pbmZvLmllX3Jzbl9sZW4pOw0KKw0K
KwltZW1jcHkoJnBjbWQtPnN0YXJ0X2NtZC5yc240OF9pZSwgbXdsX3ZpZi0+YmVhY29uX2luZm8u
aWVfcnNuNDhfcHRyLA0KKwkgICAgICAgbXdsX3ZpZi0+YmVhY29uX2luZm8uaWVfcnNuNDhfbGVu
KTsNCisNCisJbWVtY3B5KHBjbWQtPnN0YXJ0X2NtZC5iX3JhdGVfc2V0LCBtd2xfdmlmLT5iZWFj
b25faW5mby5iX3JhdGVfc2V0LA0KKwkgICAgICAgU1lTQURQVF9NQVhfREFUQV9SQVRFU19HKTsN
CisNCisJbWVtY3B5KHBjbWQtPnN0YXJ0X2NtZC5vcF9yYXRlX3NldCwgbXdsX3ZpZi0+YmVhY29u
X2luZm8ub3BfcmF0ZV9zZXQsDQorCSAgICAgICBTWVNBRFBUX01BWF9EQVRBX1JBVEVTX0cpOw0K
Kw0KKwlpZiAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01EX0FQX0JFQUNPTikp
IHsNCisJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisJCXdpcGh5X2Vycihw
cml2LT5ody0+d2lwaHksICJmYWlsZWQgZXhlY3V0aW9uXG4iKTsNCisJCXJldHVybiAtRUlPOw0K
Kwl9DQorDQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJcmV0dXJu
IDA7DQorDQoraWVsZW5lcnI6DQorDQorCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksICJsZW5n
dGggb2YgSUUgaXMgdG9vIGxvbmdcbiIpOw0KKw0KKwlyZXR1cm4gLUVJTlZBTDsNCit9DQorDQor
c3RhdGljIGludCBtd2xfZndjbWRfZW5jcnlwdGlvbl9zZXRfY21kX2luZm8oc3RydWN0IGhvc3Rj
bWRfY21kX3NldF9rZXkgKmNtZCwNCisJCQkJCSAgICAgdTggKmFkZHIsDQorCQkJCQkgICAgIHN0
cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkNCit7DQorCWNtZC0+Y21kX2hkci5jbWQgPSBj
cHVfdG9fbGUxNihIT1NUQ01EX0NNRF9VUERBVEVfRU5DUllQVElPTik7DQorCWNtZC0+Y21kX2hk
ci5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOw0KKwljbWQtPmtleV9wYXJhbS5sZW5n
dGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkgLQ0KKwkJb2Zmc2V0b2Yoc3RydWN0IGhvc3Rj
bWRfY21kX3NldF9rZXksIGtleV9wYXJhbSkpOw0KKwljbWQtPmtleV9wYXJhbS5rZXlfaW5kZXgg
PSBjcHVfdG9fbGUzMihrZXktPmtleWlkeCk7DQorCWNtZC0+a2V5X3BhcmFtLmtleV9sZW4gPSBj
cHVfdG9fbGUxNihrZXktPmtleWxlbik7DQorCWV0aGVyX2FkZHJfY29weShjbWQtPmtleV9wYXJh
bS5tYWNfYWRkciwgYWRkcik7DQorDQorCXN3aXRjaCAoa2V5LT5jaXBoZXIpIHsNCisJY2FzZSBX
TEFOX0NJUEhFUl9TVUlURV9XRVA0MDoNCisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6
DQorCQljbWQtPmtleV9wYXJhbS5rZXlfdHlwZV9pZCA9IGNwdV90b19sZTE2KEtFWV9UWVBFX0lE
X1dFUCk7DQorCQlpZiAoa2V5LT5rZXlpZHggPT0gMCkNCisJCQljbWQtPmtleV9wYXJhbS5rZXlf
aW5mbyA9DQorCQkJCWNwdV90b19sZTMyKEVOQ1JfS0VZX0ZMQUdfV0VQX1RYS0VZKTsNCisJCWJy
ZWFrOw0KKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA6DQorCQljbWQtPmtleV9wYXJhbS5r
ZXlfdHlwZV9pZCA9IGNwdV90b19sZTE2KEtFWV9UWVBFX0lEX1RLSVApOw0KKwkJY21kLT5rZXlf
cGFyYW0ua2V5X2luZm8gPQ0KKwkJCShrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BB
SVJXSVNFKSA/DQorCQkJY3B1X3RvX2xlMzIoRU5DUl9LRVlfRkxBR19QQUlSV0lTRSkgOg0KKwkJ
CWNwdV90b19sZTMyKEVOQ1JfS0VZX0ZMQUdfVFhHUk9VUEtFWSk7DQorCQljbWQtPmtleV9wYXJh
bS5rZXlfaW5mbyB8PQ0KKwkJCWNwdV90b19sZTMyKEVOQ1JfS0VZX0ZMQUdfTUlDS0VZX1ZBTElE
IHwNCisJCQkJICAgICAgRU5DUl9LRVlfRkxBR19UU0NfVkFMSUQpOw0KKwkJYnJlYWs7DQorCWNh
c2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoNCisJCWNtZC0+a2V5X3BhcmFtLmtleV90eXBlX2lk
ID0gY3B1X3RvX2xlMTYoS0VZX1RZUEVfSURfQUVTKTsNCisJCWNtZC0+a2V5X3BhcmFtLmtleV9p
bmZvID0NCisJCQkoa2V5LT5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSkgPw0K
KwkJCWNwdV90b19sZTMyKEVOQ1JfS0VZX0ZMQUdfUEFJUldJU0UpIDoNCisJCQljcHVfdG9fbGUz
MihFTkNSX0tFWV9GTEFHX1RYR1JPVVBLRVkpOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQly
ZXR1cm4gLUVOT1RTVVBQOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCit2b2lkIG13bF9m
d2NtZF9yZXNldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykNCit7DQorCXN0cnVjdCBtd2xfcHJp
diAqcHJpdiA9IGh3LT5wcml2Ow0KKw0KKwlpZiAobXdsX2Z3Y21kX2Noa19hZGFwdGVyKHByaXYp
KQ0KKwkJd3JpdGVsKElTUl9SRVNFVCwNCisJCSAgICAgICBwcml2LT5pb2Jhc2UxICsgTUFDUkVH
X1JFR19IMkFfSU5URVJSVVBUX0VWRU5UUyk7DQorfQ0KKw0KK3ZvaWQgbXdsX2Z3Y21kX2ludF9l
bmFibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnBy
aXYgPSBody0+cHJpdjsNCisNCisJaWYgKG13bF9md2NtZF9jaGtfYWRhcHRlcihwcml2KSkgew0K
KwkJd3JpdGVsKDB4MDAsDQorCQkgICAgICAgcHJpdi0+aW9iYXNlMSArIE1BQ1JFR19SRUdfQTJI
X0lOVEVSUlVQVF9NQVNLKTsNCisJCXdyaXRlbCgoTUFDUkVHX0EySFJJQ19CSVRfTUFTSyksDQor
CQkgICAgICAgcHJpdi0+aW9iYXNlMSArIE1BQ1JFR19SRUdfQTJIX0lOVEVSUlVQVF9NQVNLKTsN
CisJfQ0KK30NCisNCit2b2lkIG13bF9md2NtZF9pbnRfZGlzYWJsZShzdHJ1Y3QgaWVlZTgwMjEx
X2h3ICpodykNCit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKw0KKwlp
ZiAobXdsX2Z3Y21kX2Noa19hZGFwdGVyKHByaXYpKQ0KKwkJd3JpdGVsKDB4MDAsDQorCQkgICAg
ICAgcHJpdi0+aW9iYXNlMSArIE1BQ1JFR19SRUdfQTJIX0lOVEVSUlVQVF9NQVNLKTsNCit9DQor
DQoraW50IG13bF9md2NtZF9nZXRfaHdfc3BlY3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcpDQor
ew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJc3RydWN0IGhvc3RjbWRf
Y21kX2dldF9od19zcGVjICpwY21kOw0KKwlpbnQgcmV0cnk7DQorCWludCBpOw0KKw0KKwlpZiAo
cHJpdi0+bWZnX21vZGUpDQorCQlyZXR1cm4gMDsNCisNCisJcGNtZCA9IChzdHJ1Y3QgaG9zdGNt
ZF9jbWRfZ2V0X2h3X3NwZWMgKikmcHJpdi0+cGNtZF9idWZbMF07DQorDQorCXNwaW5fbG9ja19i
aCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCXdpcGh5X2RlYnVnKGh3LT53aXBoeSwgInBjbWQg
PSAlcFxuIiwgcGNtZCk7DQorCW1lbXNldChwY21kLCAweDAwLCBzaXplb2YoKnBjbWQpKTsNCisJ
ZXRoX2Jyb2FkY2FzdF9hZGRyKHBjbWQtPnBlcm1hbmVudF9hZGRyKTsNCisJcGNtZC0+Y21kX2hk
ci5jbWQgPSBjcHVfdG9fbGUxNihIT1NUQ01EX0NNRF9HRVRfSFdfU1BFQyk7DQorCXBjbWQtPmNt
ZF9oZHIubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmZ3X2F3YWtl
X2Nvb2tpZSA9IGNwdV90b19sZTMyKHByaXYtPnBwaHlzX2NtZF9idWYgKyAyMDQ4KTsNCisNCisJ
cmV0cnkgPSAwOw0KKwl3aGlsZSAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01E
X0dFVF9IV19TUEVDKSkgew0KKwkJaWYgKHJldHJ5KysgPiBNQVhfV0FJVF9HRVRfSFdfU1BFQ1Nf
SVRFUkFUT05TKSB7DQorCQkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImNhbid0IGdldCBodyBzcGVj
c1xuIik7DQorCQkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJCXJldHVy
biAtRUlPOw0KKwkJfQ0KKw0KKwkJbWRlbGF5KDEwMDApOw0KKwkJd2lwaHlfZGVidWcoaHctPndp
cGh5LA0KKwkJCSAgICAicmVwZWF0IGNvbW1hbmQgPSAlcFxuIiwgcGNtZCk7DQorCX0NCisNCisJ
ZXRoZXJfYWRkcl9jb3B5KCZwcml2LT5od19kYXRhLm1hY19hZGRyWzBdLCBwY21kLT5wZXJtYW5l
bnRfYWRkcik7DQorCXByaXYtPmRlc2NfZGF0YVswXS53Y2JfYmFzZSA9DQorCQlsZTMyX3RvX2Nw
dShwY21kLT53Y2JfYmFzZTApICYgMHgwMDAwZmZmZjsNCisJZm9yIChpID0gMTsgaSA8IFNZU0FE
UFRfVE9UQUxfVFhfUVVFVUVTOyBpKyspDQorCQlwcml2LT5kZXNjX2RhdGFbaV0ud2NiX2Jhc2Ug
PQ0KKwkJCWxlMzJfdG9fY3B1KHBjbWQtPndjYl9iYXNlW2kgLSAxXSkgJiAweDAwMDBmZmZmOw0K
Kwlwcml2LT5kZXNjX2RhdGFbMF0ucnhfZGVzY19yZWFkID0NCisJCWxlMzJfdG9fY3B1KHBjbWQt
PnJ4cGRfcmRfcHRyKSAmIDB4MDAwMGZmZmY7DQorCXByaXYtPmRlc2NfZGF0YVswXS5yeF9kZXNj
X3dyaXRlID0NCisJCWxlMzJfdG9fY3B1KHBjbWQtPnJ4cGRfd3JfcHRyKSAmIDB4MDAwMGZmZmY7
DQorCXByaXYtPmh3X2RhdGEucmVnaW9uX2NvZGUgPSBsZTE2X3RvX2NwdShwY21kLT5yZWdpb25f
Y29kZSkgJiAweDAwZmY7DQorCXByaXYtPmh3X2RhdGEuZndfcmVsZWFzZV9udW0gPSBsZTMyX3Rv
X2NwdShwY21kLT5md19yZWxlYXNlX251bSk7DQorCXByaXYtPmh3X2RhdGEubWF4X251bV90eF9k
ZXNjID0gbGUxNl90b19jcHUocGNtZC0+bnVtX3djYik7DQorCXByaXYtPmh3X2RhdGEubWF4X251
bV9tY19hZGRyID0gbGUxNl90b19jcHUocGNtZC0+bnVtX21jYXN0X2FkZHIpOw0KKwlwcml2LT5o
d19kYXRhLm51bV9hbnRlbm5hcyA9IGxlMTZfdG9fY3B1KHBjbWQtPm51bV9hbnRlbm5hKTsNCisJ
cHJpdi0+aHdfZGF0YS5od192ZXJzaW9uID0gcGNtZC0+dmVyc2lvbjsNCisJcHJpdi0+aHdfZGF0
YS5ob3N0X2ludGVyZmFjZSA9IHBjbWQtPmhvc3RfaWY7DQorDQorCXNwaW5fdW5sb2NrX2JoKCZw
cml2LT5md2NtZF9sb2NrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtd2xfZndjbWRf
c2V0X2h3X3NwZWNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQ0KK3sNCisJc3RydWN0IG13bF9w
cml2ICpwcml2ID0gaHctPnByaXY7DQorCXN0cnVjdCBob3N0Y21kX2NtZF9zZXRfaHdfc3BlYyAq
cGNtZDsNCisJaW50IGk7DQorDQorCWlmIChwcml2LT5tZmdfbW9kZSkNCisJCXJldHVybiAwOw0K
Kw0KKwlwY21kID0gKHN0cnVjdCBob3N0Y21kX2NtZF9zZXRfaHdfc3BlYyAqKSZwcml2LT5wY21k
X2J1ZlswXTsNCisNCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJbWVt
c2V0KHBjbWQsIDB4MDAsIHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5jbWRfaGRyLmNtZCA9IGNw
dV90b19sZTE2KEhPU1RDTURfQ01EX1NFVF9IV19TUEVDKTsNCisJcGNtZC0+Y21kX2hkci5sZW4g
PSBjcHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+d2NiX2Jhc2VbMF0gPSBjcHVf
dG9fbGUzMihwcml2LT5kZXNjX2RhdGFbMF0ucHBoeXNfdHhfcmluZyk7DQorCWZvciAoaSA9IDE7
IGkgPCBTWVNBRFBUX1RPVEFMX1RYX1FVRVVFUzsgaSsrKQ0KKwkJcGNtZC0+d2NiX2Jhc2VbaV0g
PQ0KKwkJCWNwdV90b19sZTMyKHByaXYtPmRlc2NfZGF0YVtpXS5wcGh5c190eF9yaW5nKTsNCisJ
cGNtZC0+dHhfd2NiX251bV9wZXJfcXVldWUgPSBjcHVfdG9fbGUzMihTWVNBRFBUX01BWF9OVU1f
VFhfREVTQyk7DQorCXBjbWQtPm51bV90eF9xdWV1ZXMgPSBjcHVfdG9fbGUzMihTWVNBRFBUX05V
TV9PRl9ERVNDX0RBVEEpOw0KKwlwY21kLT50b3RhbF9yeF93Y2IgPSBjcHVfdG9fbGUzMihTWVNB
RFBUX01BWF9OVU1fUlhfREVTQyk7DQorCXBjbWQtPnJ4cGRfd3JfcHRyID0gY3B1X3RvX2xlMzIo
cHJpdi0+ZGVzY19kYXRhWzBdLnBwaHlzX3J4X3JpbmcpOw0KKwlwY21kLT5mZWF0dXJlcyA9IDA7
DQorDQorCWlmIChtd2xfZndjbWRfZXhlY19jbWQocHJpdiwgSE9TVENNRF9DTURfU0VUX0hXX1NQ
RUMpKSB7DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorCQl3aXBoeV9l
cnIoaHctPndpcGh5LCAiZmFpbGVkIGV4ZWN1dGlvblxuIik7DQorCQlyZXR1cm4gLUVJTzsNCisJ
fQ0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCXJldHVybiAw
Ow0KK30NCisNCitpbnQgbXdsX2Z3Y21kX2dldF9zdGF0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3
LA0KKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykNCit7
DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgaG9zdGNtZF9j
bWRfODAyXzExX2dldF9zdGF0ICpwY21kOw0KKw0KKwlwY21kID0gKHN0cnVjdCBob3N0Y21kX2Nt
ZF84MDJfMTFfZ2V0X3N0YXQgKikmcHJpdi0+cGNtZF9idWZbMF07DQorDQorCXNwaW5fbG9ja19i
aCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCW1lbXNldChwY21kLCAweDAwLCBzaXplb2YoKnBj
bWQpKTsNCisJcGNtZC0+Y21kX2hkci5jbWQgPSBjcHVfdG9fbGUxNihIT1NUQ01EX0NNRF84MDJf
MTFfR0VUX1NUQVQpOw0KKwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigq
cGNtZCkpOw0KKw0KKwlpZiAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01EXzgw
Ml8xMV9HRVRfU1RBVCkpIHsNCisJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsN
CisJCXdpcGh5X2Vycihody0+d2lwaHksICJmYWlsZWQgZXhlY3V0aW9uXG4iKTsNCisJCXJldHVy
biAtRUlPOw0KKwl9DQorDQorCXN0YXRzLT5kb3QxMUFDS0ZhaWx1cmVDb3VudCA9DQorCQlsZTMy
X3RvX2NwdShwY21kLT5hY2tfZmFpbHVyZXMpOw0KKwlzdGF0cy0+ZG90MTFSVFNGYWlsdXJlQ291
bnQgPQ0KKwkJbGUzMl90b19jcHUocGNtZC0+cnRzX2ZhaWx1cmVzKTsNCisJc3RhdHMtPmRvdDEx
RkNTRXJyb3JDb3VudCA9DQorCQlsZTMyX3RvX2NwdShwY21kLT5yeF9mY3NfZXJyb3JzKTsNCisJ
c3RhdHMtPmRvdDExUlRTU3VjY2Vzc0NvdW50ID0NCisJCWxlMzJfdG9fY3B1KHBjbWQtPnJ0c19z
dWNjZXNzZXMpOw0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQor
CXJldHVybiAwOw0KK30NCisNCitpbnQgbXdsX2Z3Y21kX3JhZGlvX2VuYWJsZShzdHJ1Y3QgaWVl
ZTgwMjExX2h3ICpodykNCit7DQorCXJldHVybiBtd2xfZndjbWRfODAyXzExX3JhZGlvX2NvbnRy
b2woaHctPnByaXYsIHRydWUsIGZhbHNlKTsNCit9DQorDQoraW50IG13bF9md2NtZF9yYWRpb19k
aXNhYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQ0KK3sNCisJcmV0dXJuIG13bF9md2NtZF84
MDJfMTFfcmFkaW9fY29udHJvbChody0+cHJpdiwgZmFsc2UsIGZhbHNlKTsNCit9DQorDQoraW50
IG13bF9md2NtZF9zZXRfcmFkaW9fcHJlYW1ibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJv
b2wgc2hvcnRfcHJlYW1ibGUpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJp
djsNCisJaW50IHJjOw0KKw0KKwlpZiAocHJpdi0+bWZnX21vZGUpDQorCQlyZXR1cm4gMDsNCisN
CisJcHJpdi0+cmFkaW9fc2hvcnRfcHJlYW1ibGUgPSBzaG9ydF9wcmVhbWJsZTsNCisJcmMgPSBt
d2xfZndjbWRfODAyXzExX3JhZGlvX2NvbnRyb2wocHJpdiwgdHJ1ZSwgdHJ1ZSk7DQorDQorCXJl
dHVybiByYzsNCit9DQorDQoraW50IG13bF9md2NtZF9nZXRfYWRkcl92YWx1ZShzdHJ1Y3QgaWVl
ZTgwMjExX2h3ICpodywgdTMyIGFkZHIsIHUzMiBsZW4sDQorCQkJICAgICB1MzIgKnZhbCwgdTE2
IHNldCkNCit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3Qg
aG9zdGNtZF9jbWRfbWVtX2FkZHJfYWNjZXNzICpwY21kOw0KKwlpbnQgaTsNCisNCisJcGNtZCA9
IChzdHJ1Y3QgaG9zdGNtZF9jbWRfbWVtX2FkZHJfYWNjZXNzICopJnByaXYtPnBjbWRfYnVmWzBd
Ow0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwltZW1zZXQocGNt
ZCwgMHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3RvX2xl
MTYoSE9TVENNRF9DTURfTUVNX0FERFJfQUNDRVNTKTsNCisJcGNtZC0+Y21kX2hkci5sZW4gPSBj
cHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+YWRkcmVzcyA9IGNwdV90b19sZTMy
KGFkZHIpOw0KKwlwY21kLT5sZW5ndGggPSBjcHVfdG9fbGUxNihsZW4pOw0KKwlwY21kLT52YWx1
ZVswXSA9IGNwdV90b19sZTMyKCp2YWwpOw0KKwlwY21kLT5yZXNlcnZlZCA9IGNwdV90b19sZTE2
KHNldCk7DQorDQorCWlmIChtd2xfZndjbWRfZXhlY19jbWQocHJpdiwgSE9TVENNRF9DTURfTUVN
X0FERFJfQUNDRVNTKSkgew0KKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0K
KwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZCBleGVjdXRpb25cbiIpOw0KKwkJcmV0dXJu
IC1FSU87DQorCX0NCisNCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQ0KKwkJdmFsW2ldID0g
bGUzMl90b19jcHUocGNtZC0+dmFsdWVbaV0pOw0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+
ZndjbWRfbG9jayk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitpbnQgbXdsX2Z3Y21kX21heF90
eF9wb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjEx
X2NvbmYgKmNvbmYsIHU4IGZyYWN0aW9uKQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVs
ICpjaGFubmVsID0gY29uZi0+Y2hhbmRlZi5jaGFuOw0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYg
PSBody0+cHJpdjsNCisJaW50IHJlZHVjZV92YWwgPSAwOw0KKwl1MTYgYmFuZCA9IDAsIHdpZHRo
ID0gMCwgc3ViX2NoID0gMDsNCisJdTE2IG1heHR4cG93W1NZU0FEUFRfVFhfUE9XRVJfTEVWRUxf
VE9UQUxdOw0KKwlpbnQgaSwgdG1wOw0KKwlpbnQgcmM7DQorDQorCXN3aXRjaCAoZnJhY3Rpb24p
IHsNCisJY2FzZSAwOg0KKwkJcmVkdWNlX3ZhbCA9IDA7ICAgIC8qIE1heCAqLw0KKwkJYnJlYWs7
DQorCWNhc2UgMToNCisJCXJlZHVjZV92YWwgPSAyOyAgICAvKiA3NSUgLTEuMjVkYiAqLw0KKwkJ
YnJlYWs7DQorCWNhc2UgMjoNCisJCXJlZHVjZV92YWwgPSAzOyAgICAvKiA1MCUgLTNkYiAqLw0K
KwkJYnJlYWs7DQorCWNhc2UgMzoNCisJCXJlZHVjZV92YWwgPSA2OyAgICAvKiAyNSUgLTZkYiAq
Lw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQkvKiBsYXJnZXIgdGhhbiBjYXNlIDMsICBwQ21k
LT5NYXhQb3dlckxldmVsIGlzIG1pbiAqLw0KKwkJcmVkdWNlX3ZhbCA9IDB4ZmY7DQorCQlicmVh
azsNCisJfQ0KKw0KKwlpZiAoY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQ0K
KwkJYmFuZCA9IEZSRVFfQkFORF8yRE9UNEdIWjsNCisJZWxzZSBpZiAoY2hhbm5lbC0+YmFuZCA9
PSBJRUVFODAyMTFfQkFORF81R0haKQ0KKwkJYmFuZCA9IEZSRVFfQkFORF81R0haOw0KKw0KKwlz
d2l0Y2ggKGNvbmYtPmNoYW5kZWYud2lkdGgpIHsNCisJY2FzZSBOTDgwMjExX0NIQU5fV0lEVEhf
MjBfTk9IVDoNCisJY2FzZSBOTDgwMjExX0NIQU5fV0lEVEhfMjA6DQorCQl3aWR0aCA9IENIXzIw
X01IWl9XSURUSDsNCisJCXN1Yl9jaCA9IE5PX0VYVF9DSEFOTkVMOw0KKwkJYnJlYWs7DQorCWNh
c2UgTkw4MDIxMV9DSEFOX1dJRFRIXzQwOg0KKwkJd2lkdGggPSBDSF80MF9NSFpfV0lEVEg7DQor
CQlpZiAoY29uZi0+Y2hhbmRlZi5jZW50ZXJfZnJlcTEgPiBjaGFubmVsLT5jZW50ZXJfZnJlcSkN
CisJCQlzdWJfY2ggPSBFWFRfQ0hfQUJPVkVfQ1RSTF9DSDsNCisJCWVsc2UNCisJCQlzdWJfY2gg
PSBFWFRfQ0hfQkVMT1dfQ1RSTF9DSDsNCisJCWJyZWFrOw0KKwljYXNlIE5MODAyMTFfQ0hBTl9X
SURUSF84MDoNCisJCXdpZHRoID0gQ0hfODBfTUhaX1dJRFRIOw0KKwkJaWYgKGNvbmYtPmNoYW5k
ZWYuY2VudGVyX2ZyZXExID4gY2hhbm5lbC0+Y2VudGVyX2ZyZXEpDQorCQkJc3ViX2NoID0gRVhU
X0NIX0FCT1ZFX0NUUkxfQ0g7DQorCQllbHNlDQorCQkJc3ViX2NoID0gRVhUX0NIX0JFTE9XX0NU
UkxfQ0g7DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQor
DQorCWlmICgocHJpdi0+cG93aW5pdGVkICYgTVdMX1BPV0VSX0lOSVRfMikgPT0gMCkgew0KKwkJ
bXdsX2Z3Y21kX2dldF90eF9wb3dlcnMocHJpdiwgcHJpdi0+bWF4X3R4X3BvdywNCisJCQkJCWNo
YW5uZWwtPmh3X3ZhbHVlLCBiYW5kLCB3aWR0aCwgc3ViX2NoKTsNCisJCXByaXYtPnBvd2luaXRl
ZCB8PSBNV0xfUE9XRVJfSU5JVF8yOw0KKwl9DQorDQorCWlmICgocHJpdi0+cG93aW5pdGVkICYg
TVdMX1BPV0VSX0lOSVRfMSkgPT0gMCkgew0KKwkJbXdsX2Z3Y21kX2dldF90eF9wb3dlcnMocHJp
diwgcHJpdi0+dGFyZ2V0X3Bvd2VycywNCisJCQkJCWNoYW5uZWwtPmh3X3ZhbHVlLCBiYW5kLCB3
aWR0aCwgc3ViX2NoKTsNCisJCXByaXYtPnBvd2luaXRlZCB8PSBNV0xfUE9XRVJfSU5JVF8xOw0K
Kwl9DQorDQorCWZvciAoaSA9IDA7IGkgPCBTWVNBRFBUX1RYX1BPV0VSX0xFVkVMX1RPVEFMOyBp
KyspIHsNCisJCWlmIChwcml2LT50YXJnZXRfcG93ZXJzW2ldID4gcHJpdi0+bWF4X3R4X3Bvd1tp
XSkNCisJCQl0bXAgPSBwcml2LT5tYXhfdHhfcG93W2ldOw0KKwkJZWxzZQ0KKwkJCXRtcCA9IHBy
aXYtPnRhcmdldF9wb3dlcnNbaV07DQorCQltYXh0eHBvd1tpXSA9ICgodG1wIC0gcmVkdWNlX3Zh
bCkgPiAwKSA/ICh0bXAgLSByZWR1Y2VfdmFsKSA6IDA7DQorCX0NCisNCisJcmMgPSBtd2xfZndj
bWRfc2V0X3R4X3Bvd2Vycyhwcml2LCBtYXh0eHBvdywgSE9TVENNRF9BQ1RfR0VOX1NFVCwNCisJ
CQkJICAgICBjaGFubmVsLT5od192YWx1ZSwgYmFuZCwgd2lkdGgsIHN1Yl9jaCk7DQorDQorCXJl
dHVybiByYzsNCit9DQorDQoraW50IG13bF9md2NtZF90eF9wb3dlcihzdHJ1Y3QgaWVlZTgwMjEx
X2h3ICpodywNCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYsIHU4IGZyYWN0
aW9uKQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gY29uZi0+Y2hh
bmRlZi5jaGFuOw0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJaW50IHJl
ZHVjZV92YWwgPSAwOw0KKwl1MTYgYmFuZCA9IDAsIHdpZHRoID0gMCwgc3ViX2NoID0gMDsNCisJ
dTE2IHR4cG93W1NZU0FEUFRfVFhfUE9XRVJfTEVWRUxfVE9UQUxdOw0KKwlpbnQgaW5kZXgsIGZv
dW5kID0gMDsNCisJaW50IGksIHRtcDsNCisJaW50IHJjOw0KKw0KKwlzd2l0Y2ggKGZyYWN0aW9u
KSB7DQorCWNhc2UgMDoNCisJCXJlZHVjZV92YWwgPSAwOyAgICAvKiBNYXggKi8NCisJCWJyZWFr
Ow0KKwljYXNlIDE6DQorCQlyZWR1Y2VfdmFsID0gMjsgICAgLyogNzUlIC0xLjI1ZGIgKi8NCisJ
CWJyZWFrOw0KKwljYXNlIDI6DQorCQlyZWR1Y2VfdmFsID0gMzsgICAgLyogNTAlIC0zZGIgKi8N
CisJCWJyZWFrOw0KKwljYXNlIDM6DQorCQlyZWR1Y2VfdmFsID0gNjsgICAgLyogMjUlIC02ZGIg
Ki8NCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJLyogbGFyZ2VyIHRoYW4gY2FzZSAzLCAgcENt
ZC0+TWF4UG93ZXJMZXZlbCBpcyBtaW4gKi8NCisJCXJlZHVjZV92YWwgPSAweGZmOw0KKwkJYnJl
YWs7DQorCX0NCisNCisJaWYgKGNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikN
CisJCWJhbmQgPSBGUkVRX0JBTkRfMkRPVDRHSFo7DQorCWVsc2UgaWYgKGNoYW5uZWwtPmJhbmQg
PT0gSUVFRTgwMjExX0JBTkRfNUdIWikNCisJCWJhbmQgPSBGUkVRX0JBTkRfNUdIWjsNCisNCisJ
c3dpdGNoIChjb25mLT5jaGFuZGVmLndpZHRoKSB7DQorCWNhc2UgTkw4MDIxMV9DSEFOX1dJRFRI
XzIwX05PSFQ6DQorCWNhc2UgTkw4MDIxMV9DSEFOX1dJRFRIXzIwOg0KKwkJd2lkdGggPSBDSF8y
MF9NSFpfV0lEVEg7DQorCQlzdWJfY2ggPSBOT19FWFRfQ0hBTk5FTDsNCisJCWJyZWFrOw0KKwlj
YXNlIE5MODAyMTFfQ0hBTl9XSURUSF80MDoNCisJCXdpZHRoID0gQ0hfNDBfTUhaX1dJRFRIOw0K
KwkJaWYgKGNvbmYtPmNoYW5kZWYuY2VudGVyX2ZyZXExID4gY2hhbm5lbC0+Y2VudGVyX2ZyZXEp
DQorCQkJc3ViX2NoID0gRVhUX0NIX0FCT1ZFX0NUUkxfQ0g7DQorCQllbHNlDQorCQkJc3ViX2No
ID0gRVhUX0NIX0JFTE9XX0NUUkxfQ0g7DQorCQlicmVhazsNCisJY2FzZSBOTDgwMjExX0NIQU5f
V0lEVEhfODA6DQorCQl3aWR0aCA9IENIXzgwX01IWl9XSURUSDsNCisJCWlmIChjb25mLT5jaGFu
ZGVmLmNlbnRlcl9mcmVxMSA+IGNoYW5uZWwtPmNlbnRlcl9mcmVxKQ0KKwkJCXN1Yl9jaCA9IEVY
VF9DSF9BQk9WRV9DVFJMX0NIOw0KKwkJZWxzZQ0KKwkJCXN1Yl9jaCA9IEVYVF9DSF9CRUxPV19D
VFJMX0NIOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0K
Kw0KKwkvKiBzZWFyY2ggdHggcG93ZXIgdGFibGUgaWYgZXhpc3QgKi8NCisJZm9yIChpbmRleCA9
IDA7IGluZGV4IDwgU1lTQURQVF9NQVhfTlVNX0NIQU5ORUxTOyBpbmRleCsrKSB7DQorCQlzdHJ1
Y3QgbXdsX3R4X3B3cl90YmwgKnR4X3B3cjsNCisNCisJCXR4X3B3ciA9ICZwcml2LT50eF9wd3Jf
dGJsW2luZGV4XTsNCisNCisJCS8qIGRvIG5vdGhpbmcgaWYgdGFibGUgaXMgbm90IGxvYWRlZCAq
Lw0KKwkJaWYgKHR4X3B3ci0+Y2hhbm5lbCA9PSAwKQ0KKwkJCWJyZWFrOw0KKw0KKwkJaWYgKHR4
X3B3ci0+Y2hhbm5lbCA9PSBjaGFubmVsLT5od192YWx1ZSkgew0KKwkJCXByaXYtPmNkZCA9IHR4
X3B3ci0+Y2RkOw0KKwkJCXByaXYtPnR4YW50ZW5uYTIgPSB0eF9wd3ItPnR4YW50ZW5uYTI7DQor
DQorCQkJaWYgKHR4X3B3ci0+c2V0Y2FwKQ0KKwkJCQlwcml2LT5wb3dpbml0ZWQgPSBNV0xfUE9X
RVJfSU5JVF8xOw0KKwkJCWVsc2UNCisJCQkJcHJpdi0+cG93aW5pdGVkID0gTVdMX1BPV0VSX0lO
SVRfMjsNCisNCisJCQlmb3IgKGkgPSAwOyBpIDwgU1lTQURQVF9UWF9QT1dFUl9MRVZFTF9UT1RB
TDsgaSsrKSB7DQorCQkJCWlmICh0eF9wd3ItPnNldGNhcCkNCisJCQkJCXByaXYtPm1heF90eF9w
b3dbaV0gPQ0KKwkJCQkJCXR4X3B3ci0+dHhfcG93ZXJbaV07DQorCQkJCWVsc2UNCisJCQkJCXBy
aXYtPnRhcmdldF9wb3dlcnNbaV0gPQ0KKwkJCQkJCXR4X3B3ci0+dHhfcG93ZXJbaV07DQorCQkJ
fQ0KKw0KKwkJCWZvdW5kID0gMTsNCisJCQlicmVhazsNCisJCX0NCisJfQ0KKw0KKwlpZiAoKHBy
aXYtPnBvd2luaXRlZCAmIE1XTF9QT1dFUl9JTklUXzIpID09IDApIHsNCisJCW13bF9md2NtZF9n
ZXRfdHhfcG93ZXJzKHByaXYsIHByaXYtPm1heF90eF9wb3csDQorCQkJCQljaGFubmVsLT5od192
YWx1ZSwgYmFuZCwgd2lkdGgsIHN1Yl9jaCk7DQorDQorCQlwcml2LT5wb3dpbml0ZWQgfD0gTVdM
X1BPV0VSX0lOSVRfMjsNCisJfQ0KKw0KKwlpZiAoKHByaXYtPnBvd2luaXRlZCAmIE1XTF9QT1dF
Ul9JTklUXzEpID09IDApIHsNCisJCW13bF9md2NtZF9nZXRfdHhfcG93ZXJzKHByaXYsIHByaXYt
PnRhcmdldF9wb3dlcnMsDQorCQkJCQljaGFubmVsLT5od192YWx1ZSwgYmFuZCwgd2lkdGgsIHN1
Yl9jaCk7DQorDQorCQlwcml2LT5wb3dpbml0ZWQgfD0gTVdMX1BPV0VSX0lOSVRfMTsNCisJfQ0K
Kw0KKwlmb3IgKGkgPSAwOyBpIDwgU1lTQURQVF9UWF9QT1dFUl9MRVZFTF9UT1RBTDsgaSsrKSB7
DQorCQlpZiAoZm91bmQpIHsNCisJCQlpZiAoKHByaXYtPnR4X3B3cl90YmxbaW5kZXhdLnNldGNh
cCkgJiYNCisJCQkgICAgKHByaXYtPnR4X3B3cl90YmxbaW5kZXhdLnR4X3Bvd2VyW2ldID4NCisJ
CQkgICAgcHJpdi0+bWF4X3R4X3Bvd1tpXSkpDQorCQkJCXRtcCA9IHByaXYtPm1heF90eF9wb3db
aV07DQorCQkJZWxzZQ0KKwkJCQl0bXAgPSBwcml2LT50eF9wd3JfdGJsW2luZGV4XS50eF9wb3dl
cltpXTsNCisJCX0gZWxzZSB7DQorCQkJaWYgKHByaXYtPnRhcmdldF9wb3dlcnNbaV0gPiBwcml2
LT5tYXhfdHhfcG93W2ldKQ0KKwkJCQl0bXAgPSBwcml2LT5tYXhfdHhfcG93W2ldOw0KKwkJCWVs
c2UNCisJCQkJdG1wID0gcHJpdi0+dGFyZ2V0X3Bvd2Vyc1tpXTsNCisJCX0NCisNCisJCXR4cG93
W2ldID0gKCh0bXAgLSByZWR1Y2VfdmFsKSA+IDApID8gKHRtcCAtIHJlZHVjZV92YWwpIDogMDsN
CisJfQ0KKw0KKwlyYyA9IG13bF9md2NtZF9zZXRfdHhfcG93ZXJzKHByaXYsIHR4cG93LCBIT1NU
Q01EX0FDVF9HRU5fU0VUX0xJU1QsDQorCQkJCSAgICAgY2hhbm5lbC0+aHdfdmFsdWUsIGJhbmQs
IHdpZHRoLCBzdWJfY2gpOw0KKw0KKwlyZXR1cm4gcmM7DQorfQ0KKw0KK2ludCBtd2xfZndjbWRf
cmZfYW50ZW5uYShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGRpciwgaW50IGFudGVubmEp
DQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJc3RydWN0IGhvc3Rj
bWRfY21kXzgwMl8xMV9yZl9hbnRlbm5hICpwY21kOw0KKw0KKwlpZiAocHJpdi0+bWZnX21vZGUp
DQorCQlyZXR1cm4gMDsNCisNCisJcGNtZCA9IChzdHJ1Y3QgaG9zdGNtZF9jbWRfODAyXzExX3Jm
X2FudGVubmEgKikmcHJpdi0+cGNtZF9idWZbMF07DQorDQorCXNwaW5fbG9ja19iaCgmcHJpdi0+
ZndjbWRfbG9jayk7DQorDQorCW1lbXNldChwY21kLCAweDAwLCBzaXplb2YoKnBjbWQpKTsNCisJ
cGNtZC0+Y21kX2hkci5jbWQgPSBjcHVfdG9fbGUxNihIT1NUQ01EX0NNRF84MDJfMTFfUkZfQU5U
RU5OQSk7DQorCXBjbWQtPmNtZF9oZHIubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpwY21kKSk7
DQorDQorCXBjbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KGRpcik7DQorDQorCWlmIChkaXIgPT0g
V0xfQU5URU5OQVRZUEVfUlgpIHsNCisJCXU4IHJ4X2FudGVubmEgPSA0OyAvKiBpZiBhdXRvLCBz
ZXQgNCByeCBhbnRlbm5hcyBpbiBTQzIgKi8NCisNCisJCWlmIChhbnRlbm5hICE9IDApDQorCQkJ
cGNtZC0+YW50ZW5uYV9tb2RlID0gY3B1X3RvX2xlMTYoYW50ZW5uYSk7DQorCQllbHNlDQorCQkJ
cGNtZC0+YW50ZW5uYV9tb2RlID0gY3B1X3RvX2xlMTYocnhfYW50ZW5uYSk7DQorCX0gZWxzZSB7
DQorCQl1OCB0eF9hbnRlbm5hID0gMHhmOyAvKiBpZiBhdXRvLCBzZXQgNCB0eCBhbnRlbm5hcyBp
biBTQzIgKi8NCisNCisJCWlmIChhbnRlbm5hICE9IDApDQorCQkJcGNtZC0+YW50ZW5uYV9tb2Rl
ID0gY3B1X3RvX2xlMTYoYW50ZW5uYSk7DQorCQllbHNlDQorCQkJcGNtZC0+YW50ZW5uYV9tb2Rl
ID0gY3B1X3RvX2xlMTYodHhfYW50ZW5uYSk7DQorCX0NCisNCisJaWYgKG13bF9md2NtZF9leGVj
X2NtZChwcml2LCBIT1NUQ01EX0NNRF84MDJfMTFfUkZfQU5URU5OQSkpIHsNCisJCXNwaW5fdW5s
b2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisJCXdpcGh5X2Vycihody0+d2lwaHksICJmYWls
ZWQgZXhlY3V0aW9uXG4iKTsNCisJCXJldHVybiAtRUlPOw0KKwl9DQorDQorCXNwaW5fdW5sb2Nr
X2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtd2xf
ZndjbWRfYnJvYWRjYXN0X3NzaWRfZW5hYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJ
CQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgYm9vbCBlbmFibGUpDQorew0KKwlzdHJ1
Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJc3RydWN0IG13bF92aWYgKm13bF92aWY7
DQorCXN0cnVjdCBob3N0Y21kX2NtZF9icm9hZGNhc3Rfc3NpZF9lbmFibGUgKnBjbWQ7DQorDQor
CW13bF92aWYgPSBtd2xfZGV2X2dldF92aWYodmlmKTsNCisNCisJcGNtZCA9IChzdHJ1Y3QgaG9z
dGNtZF9jbWRfYnJvYWRjYXN0X3NzaWRfZW5hYmxlICopJnByaXYtPnBjbWRfYnVmWzBdOw0KKw0K
KwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwgMHgw
MCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9T
VENNRF9DTURfQlJPQURDQVNUX1NTSURfRU5BQkxFKTsNCisJcGNtZC0+Y21kX2hkci5sZW4gPSBj
cHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+Y21kX2hkci5tYWNpZCA9IG13bF92
aWYtPm1hY2lkOw0KKwlwY21kLT5lbmFibGUgPSBjcHVfdG9fbGUzMihlbmFibGUpOw0KKw0KKwlp
ZiAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01EX0JST0FEQ0FTVF9TU0lEX0VO
QUJMRSkpIHsNCisJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisJCXdpcGh5
X2Vycihody0+d2lwaHksICJmYWlsZWQgZXhlY3V0aW9uXG4iKTsNCisJCXJldHVybiAtRUlPOw0K
Kwl9DQorDQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJcmV0dXJu
IDA7DQorfQ0KKw0KK2ludCBtd2xfZndjbWRfc2V0X3JmX2NoYW5uZWwoc3RydWN0IGllZWU4MDIx
MV9odyAqaHcsDQorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpDQorew0KKwlz
dHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBjb25mLT5jaGFuZGVmLmNoYW47DQor
CXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgaG9zdGNtZF9jbWRf
c2V0X3JmX2NoYW5uZWwgKnBjbWQ7DQorCXUzMiBjaG5sX2ZsYWdzLCBmcmVxX2JhbmQsIGNobmxf
d2lkdGgsIGFjdF9wcmltYXJ5Ow0KKw0KKwlwY21kID0gKHN0cnVjdCBob3N0Y21kX2NtZF9zZXRf
cmZfY2hhbm5lbCAqKSZwcml2LT5wY21kX2J1ZlswXTsNCisNCisJc3Bpbl9sb2NrX2JoKCZwcml2
LT5md2NtZF9sb2NrKTsNCisNCisJbWVtc2V0KHBjbWQsIDB4MDAsIHNpemVvZigqcGNtZCkpOw0K
KwlwY21kLT5jbWRfaGRyLmNtZCA9IGNwdV90b19sZTE2KEhPU1RDTURfQ01EX1NFVF9SRl9DSEFO
TkVMKTsNCisJcGNtZC0+Y21kX2hkci5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsN
CisJcGNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoV0xfU0VUKTsNCisJcGNtZC0+Y3Vycl9jaG5s
ID0gY2hhbm5lbC0+aHdfdmFsdWU7DQorDQorCWlmIChjaGFubmVsLT5iYW5kID09IElFRUU4MDIx
MV9CQU5EXzJHSFopIHsNCisJCWZyZXFfYmFuZCA9IEZSRVFfQkFORF8yRE9UNEdIWjsNCisJfSBl
bHNlIGlmIChjaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsNCisJCWZyZXFf
YmFuZCA9IEZSRVFfQkFORF81R0haOw0KKwl9IGVsc2Ugew0KKwkJc3Bpbl91bmxvY2tfYmgoJnBy
aXYtPmZ3Y21kX2xvY2spOw0KKwkJcmV0dXJuIC1FSU5WQUw7DQorCX0NCisNCisJc3dpdGNoIChj
b25mLT5jaGFuZGVmLndpZHRoKSB7DQorCWNhc2UgTkw4MDIxMV9DSEFOX1dJRFRIXzIwX05PSFQ6
DQorCWNhc2UgTkw4MDIxMV9DSEFOX1dJRFRIXzIwOg0KKwkJY2hubF93aWR0aCA9IENIXzIwX01I
Wl9XSURUSDsNCisJCWFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8wOw0KKwkJYnJlYWs7
DQorCWNhc2UgTkw4MDIxMV9DSEFOX1dJRFRIXzQwOg0KKwkJY2hubF93aWR0aCA9IENIXzQwX01I
Wl9XSURUSDsNCisJCWlmIChjb25mLT5jaGFuZGVmLmNlbnRlcl9mcmVxMSA+IGNoYW5uZWwtPmNl
bnRlcl9mcmVxKQ0KKwkJCWFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8wOw0KKwkJZWxz
ZQ0KKwkJCWFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8xOw0KKwkJYnJlYWs7DQorCWNh
c2UgTkw4MDIxMV9DSEFOX1dJRFRIXzgwOg0KKwkJY2hubF93aWR0aCA9IENIXzgwX01IWl9XSURU
SDsNCisJCWFjdF9wcmltYXJ5ID0NCisJCQltd2xfZndjbWRfZ2V0XzgwbV9wcmlfY2hubF9vZmZz
ZXQocGNtZC0+Y3Vycl9jaG5sKTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJc3Bpbl91bmxv
Y2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJcmV0dXJuIC1FSU5WQUw7DQorCX0NCisNCisJ
Y2hubF9mbGFncyA9IChmcmVxX2JhbmQgJiBGUkVRX0JBTkRfTUFTSykgfA0KKwkJKChjaG5sX3dp
ZHRoIDw8IENITkxfV0lEVEhfU0hJRlQpICYgQ0hOTF9XSURUSF9NQVNLKSB8DQorCQkoKGFjdF9w
cmltYXJ5IDw8IEFDVF9QUklNQVJZX1NISUZUKSAmIEFDVF9QUklNQVJZX01BU0spOw0KKw0KKwlw
Y21kLT5jaG5sX2ZsYWdzID0gY3B1X3RvX2xlMzIoY2hubF9mbGFncyk7DQorDQorCWlmIChtd2xf
ZndjbWRfZXhlY19jbWQocHJpdiwgSE9TVENNRF9DTURfU0VUX1JGX0NIQU5ORUwpKSB7DQorCQlz
cGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorCQl3aXBoeV9lcnIoaHctPndpcGh5
LCAiZmFpbGVkIGV4ZWN1dGlvblxuIik7DQorCQlyZXR1cm4gLUVJTzsNCisJfQ0KKw0KKwlzcGlu
X3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitp
bnQgbXdsX2Z3Y21kX3NldF9haWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkgICAgICBz
dHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCB1OCAqYnNzaWQsIHUxNiBhaWQpDQorew0KKwlzdHJ1
Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJc3RydWN0IG13bF92aWYgKm13bF92aWY7
DQorCXN0cnVjdCBob3N0Y21kX2NtZF9zZXRfYWlkICpwY21kOw0KKw0KKwltd2xfdmlmID0gbXds
X2Rldl9nZXRfdmlmKHZpZik7DQorDQorCXBjbWQgPSAoc3RydWN0IGhvc3RjbWRfY21kX3NldF9h
aWQgKikmcHJpdi0+cGNtZF9idWZbMF07DQorDQorCXNwaW5fbG9ja19iaCgmcHJpdi0+ZndjbWRf
bG9jayk7DQorDQorCW1lbXNldChwY21kLCAweDAwLCBzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+
Y21kX2hkci5jbWQgPSBjcHVfdG9fbGUxNihIT1NUQ01EX0NNRF9TRVRfQUlEKTsNCisJcGNtZC0+
Y21kX2hkci5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+Y21kX2hk
ci5tYWNpZCA9IG13bF92aWYtPm1hY2lkOw0KKwlwY21kLT5haWQgPSBjcHVfdG9fbGUxNihhaWQp
Ow0KKwlldGhlcl9hZGRyX2NvcHkocGNtZC0+bWFjX2FkZHIsIGJzc2lkKTsNCisNCisJaWYgKG13
bF9md2NtZF9leGVjX2NtZChwcml2LCBIT1NUQ01EX0NNRF9TRVRfQUlEKSkgew0KKwkJc3Bpbl91
bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZh
aWxlZCBleGVjdXRpb25cbiIpOw0KKwkJcmV0dXJuIC1FSU87DQorCX0NCisNCisJc3Bpbl91bmxv
Y2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IG13
bF9md2NtZF9zZXRfaW5mcmFfbW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkgICAg
IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYg
PSBody0+cHJpdjsNCisJc3RydWN0IG13bF92aWYgKm13bF92aWY7DQorCXN0cnVjdCBob3N0Y21k
X2NtZF9zZXRfaW5mcmFfbW9kZSAqcGNtZDsNCisNCisJbXdsX3ZpZiA9IG13bF9kZXZfZ2V0X3Zp
Zih2aWYpOw0KKw0KKwlwY21kID0gKHN0cnVjdCBob3N0Y21kX2NtZF9zZXRfaW5mcmFfbW9kZSAq
KSZwcml2LT5wY21kX2J1ZlswXTsNCisNCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5md2NtZF9sb2Nr
KTsNCisNCisJbWVtc2V0KHBjbWQsIDB4MDAsIHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5jbWRf
aGRyLmNtZCA9IGNwdV90b19sZTE2KEhPU1RDTURfQ01EX1NFVF9JTkZSQV9NT0RFKTsNCisJcGNt
ZC0+Y21kX2hkci5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+Y21k
X2hkci5tYWNpZCA9IG13bF92aWYtPm1hY2lkOw0KKw0KKwlpZiAobXdsX2Z3Y21kX2V4ZWNfY21k
KHByaXYsIEhPU1RDTURfQ01EX1NFVF9JTkZSQV9NT0RFKSkgew0KKwkJc3Bpbl91bmxvY2tfYmgo
JnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZCBleGVj
dXRpb25cbiIpOw0KKwkJcmV0dXJuIC1FSU87DQorCX0NCisNCisJc3Bpbl91bmxvY2tfYmgoJnBy
aXYtPmZ3Y21kX2xvY2spOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IG13bF9md2NtZF9z
ZXRfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IHRocmVzaG9sZCkN
Cit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgaG9zdGNt
ZF9jbWRfODAyXzExX3J0c190aHNkICpwY21kOw0KKw0KKwlwY21kID0gKHN0cnVjdCBob3N0Y21k
X2NtZF84MDJfMTFfcnRzX3Roc2QgKikmcHJpdi0+cGNtZF9idWZbMF07DQorDQorCXNwaW5fbG9j
a19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCW1lbXNldChwY21kLCAweDAwLCBzaXplb2Yo
KnBjbWQpKTsNCisJcGNtZC0+Y21kX2hkci5jbWQgPSBjcHVfdG9fbGUxNihIT1NUQ01EX0NNRF84
MDJfMTFfUlRTX1RIU0QpOw0KKwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVv
ZigqcGNtZCkpOw0KKwlwY21kLT5hY3Rpb24gID0gY3B1X3RvX2xlMTYoV0xfU0VUKTsNCisJcGNt
ZC0+dGhyZXNob2xkID0gY3B1X3RvX2xlMTYodGhyZXNob2xkKTsNCisNCisJaWYgKG13bF9md2Nt
ZF9leGVjX2NtZChwcml2LCBIT1NUQ01EX0NNRF84MDJfMTFfUlRTX1RIU0QpKSB7DQorCQlzcGlu
X3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorCQl3aXBoeV9lcnIoaHctPndpcGh5LCAi
ZmFpbGVkIGV4ZWN1dGlvblxuIik7DQorCQlyZXR1cm4gLUVJTzsNCisJfQ0KKw0KKwlzcGluX3Vu
bG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitpbnQg
bXdsX2Z3Y21kX3NldF9lZGNhX3BhcmFtcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggaW5k
ZXgsDQorCQkJICAgICAgdTE2IGN3X21pbiwgdTE2IGN3X21heCwgdTggYWlmcywgdTE2IHR4b3Ap
DQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJc3RydWN0IGhvc3Rj
bWRfY21kX3NldF9lZGNhX3BhcmFtcyAqcGNtZDsNCisNCisJcGNtZCA9IChzdHJ1Y3QgaG9zdGNt
ZF9jbWRfc2V0X2VkY2FfcGFyYW1zICopJnByaXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlzcGluX2xv
Y2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwgMHgwMCwgc2l6ZW9m
KCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURf
U0VUX0VEQ0FfUEFSQU1TKTsNCisJcGNtZC0+Y21kX2hkci5sZW4gPSBjcHVfdG9fbGUxNihzaXpl
b2YoKnBjbWQpKTsNCisNCisJcGNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoMHhmZmZmKTsNCisJ
cGNtZC0+dHhvcCA9IGNwdV90b19sZTE2KHR4b3ApOw0KKwlwY21kLT5jd19tYXggPSBjcHVfdG9f
bGUzMihpbG9nMihjd19tYXggKyAxKSk7DQorCXBjbWQtPmN3X21pbiA9IGNwdV90b19sZTMyKGls
b2cyKGN3X21pbiArIDEpKTsNCisJcGNtZC0+YWlmc24gPSBhaWZzOw0KKwlwY21kLT50eHFfbnVt
ID0gaW5kZXg7DQorDQorCS8qIFRoZSBhcnJheSBpbmRleCBkZWZpbmVkIGluIHFvcy5oIGhhcyBh
IHJldmVyc2VkIGJrIGFuZCBiZS4NCisJICogVGhlIEhXIHF1ZXVlIHdhcyBub3QgdXNlZCB0aGlz
IHdheTsgdGhlIHFvcyBjb2RlIG5lZWRzIHRvDQorCSAqIGJlIGNoYW5nZWQgb3IgY2hlY2tlZA0K
KwkgKi8NCisJaWYgKGluZGV4ID09IDApDQorCQlwY21kLT50eHFfbnVtID0gMTsNCisJZWxzZSBp
ZiAoaW5kZXggPT0gMSkNCisJCXBjbWQtPnR4cV9udW0gPSAwOw0KKw0KKwlpZiAobXdsX2Z3Y21k
X2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01EX1NFVF9FRENBX1BBUkFNUykpIHsNCisJCXNwaW5f
dW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisJCXdpcGh5X2Vycihody0+d2lwaHksICJm
YWlsZWQgZXhlY3V0aW9uXG4iKTsNCisJCXJldHVybiAtRUlPOw0KKwl9DQorDQorCXNwaW5fdW5s
b2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBt
d2xfZndjbWRfc2V0X3dtbV9tb2RlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGVuYWJs
ZSkNCit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgaG9z
dGNtZF9jbWRfc2V0X3dtbV9tb2RlICpwY21kOw0KKw0KKwlwY21kID0gKHN0cnVjdCBob3N0Y21k
X2NtZF9zZXRfd21tX21vZGUgKikmcHJpdi0+cGNtZF9idWZbMF07DQorDQorCXNwaW5fbG9ja19i
aCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCW1lbXNldChwY21kLCAweDAwLCBzaXplb2YoKnBj
bWQpKTsNCisJcGNtZC0+Y21kX2hkci5jbWQgPSBjcHVfdG9fbGUxNihIT1NUQ01EX0NNRF9TRVRf
V01NX01PREUpOw0KKwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNt
ZCkpOw0KKwlwY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihlbmFibGUgPyBXTF9FTkFCTEUgOiBX
TF9ESVNBQkxFKTsNCisNCisJaWYgKG13bF9md2NtZF9leGVjX2NtZChwcml2LCBIT1NUQ01EX0NN
RF9TRVRfV01NX01PREUpKSB7DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7
DQorCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiZmFpbGVkIGV4ZWN1dGlvblxuIik7DQorCQlyZXR1
cm4gLUVJTzsNCisJfQ0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQor
DQorCXJldHVybiAwOw0KK30NCisNCitpbnQgbXdsX2Z3Y21kX2h0X2d1YXJkX2ludGVydmFsKHN0
cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgZ2lfdHlwZSkNCit7DQorCXN0cnVjdCBtd2xfcHJp
diAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgaG9zdGNtZF9jbWRfaHRfZ3VhcmRfaW50ZXJ2
YWwgKnBjbWQ7DQorDQorCXBjbWQgPSAoc3RydWN0IGhvc3RjbWRfY21kX2h0X2d1YXJkX2ludGVy
dmFsICopJnByaXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21k
X2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwgMHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQt
PmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURfSFRfR1VBUkRfSU5URVJWQUwp
Ow0KKwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkpOw0KKwlw
Y21kLT5hY3Rpb24gPSBjcHVfdG9fbGUzMihXTF9TRVQpOw0KKwlwY21kLT5naV90eXBlID0gY3B1
X3RvX2xlMzIoZ2lfdHlwZSk7DQorDQorCWlmIChtd2xfZndjbWRfZXhlY19jbWQocHJpdiwgSE9T
VENNRF9DTURfSFRfR1VBUkRfSU5URVJWQUwpKSB7DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+
ZndjbWRfbG9jayk7DQorCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiZmFpbGVkIGV4ZWN1dGlvblxu
Iik7DQorCQlyZXR1cm4gLUVJTzsNCisJfQ0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+Zndj
bWRfbG9jayk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitpbnQgbXdsX2Z3Y21kX3VzZV9maXhl
ZF9yYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgbWNhc3QsIGludCBtZ210KQ0KK3sN
CisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHctPnByaXY7DQorCXN0cnVjdCBob3N0Y21kX2Nt
ZF9zZXRfZml4ZWRfcmF0ZSAqcGNtZDsNCisNCisJcGNtZCA9IChzdHJ1Y3QgaG9zdGNtZF9jbWRf
c2V0X2ZpeGVkX3JhdGUgKikmcHJpdi0+cGNtZF9idWZbMF07DQorDQorCXNwaW5fbG9ja19iaCgm
cHJpdi0+ZndjbWRfbG9jayk7DQorDQorCW1lbXNldChwY21kLCAweDAwLCBzaXplb2YoKnBjbWQp
KTsNCisJcGNtZC0+Y21kX2hkci5jbWQgPSBjcHVfdG9fbGUxNihIT1NUQ01EX0NNRF9TRVRfRklY
RURfUkFURSk7DQorCXBjbWQtPmNtZF9oZHIubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpwY21k
KSk7DQorDQorCXBjbWQtPmFjdGlvbiA9IGNwdV90b19sZTMyKEhPU1RDTURfQUNUX05PVF9VU0Vf
RklYRURfUkFURSk7DQorCXBjbWQtPm11bHRpY2FzdF9yYXRlID0gbWNhc3Q7DQorCXBjbWQtPm1h
bmFnZW1lbnRfcmF0ZSA9IG1nbXQ7DQorDQorCWlmIChtd2xfZndjbWRfZXhlY19jbWQocHJpdiwg
SE9TVENNRF9DTURfU0VUX0ZJWEVEX1JBVEUpKSB7DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+
ZndjbWRfbG9jayk7DQorCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiZmFpbGVkIGV4ZWN1dGlvblxu
Iik7DQorCQlyZXR1cm4gLUVJTzsNCisJfQ0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+Zndj
bWRfbG9jayk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitpbnQgbXdsX2Z3Y21kX3NldF9saW5r
YWRhcHRfY3NfbW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IGNzX21vZGUpDQorew0K
KwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJc3RydWN0IGhvc3RjbWRfY21k
X3NldF9saW5rYWRhcHRfY3NfbW9kZSAqcGNtZDsNCisNCisJcGNtZCA9IChzdHJ1Y3QgaG9zdGNt
ZF9jbWRfc2V0X2xpbmthZGFwdF9jc19tb2RlICopJnByaXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlz
cGluX2xvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwgMHgwMCwg
c2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9TVENN
RF9DTURfU0VUX0xJTktBREFQVF9DU19NT0RFKTsNCisJcGNtZC0+Y21kX2hkci5sZW4gPSBjcHVf
dG9fbGUxNihzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+YWN0aW9uICA9IGNwdV90b19sZTE2KEhP
U1RDTURfQUNUX0dFTl9TRVQpOw0KKwlwY21kLT5jc19tb2RlID0gY3B1X3RvX2xlMTYoY3NfbW9k
ZSk7DQorDQorCWlmIChtd2xfZndjbWRfZXhlY19jbWQocHJpdiwgSE9TVENNRF9DTURfU0VUX0xJ
TktBREFQVF9DU19NT0RFKSkgew0KKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2sp
Ow0KKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZCBleGVjdXRpb25cbiIpOw0KKwkJcmV0
dXJuIC1FSU87DQorCX0NCisNCisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0K
Kw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IG13bF9md2NtZF9zZXRfcmF0ZV9hZGFwdF9tb2Rl
KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgbW9kZSkNCit7DQorCXN0cnVjdCBtd2xfcHJp
diAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgaG9zdGNtZF9jbWRfc2V0X3JhdGVfYWRhcHRf
bW9kZSAqcGNtZDsNCisNCisJcGNtZCA9IChzdHJ1Y3QgaG9zdGNtZF9jbWRfc2V0X3JhdGVfYWRh
cHRfbW9kZSAqKSZwcml2LT5wY21kX2J1ZlswXTsNCisNCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5m
d2NtZF9sb2NrKTsNCisNCisJbWVtc2V0KHBjbWQsIDB4MDAsIHNpemVvZigqcGNtZCkpOw0KKwlw
Y21kLT5jbWRfaGRyLmNtZCA9IGNwdV90b19sZTE2KEhPU1RDTURfQ01EX1NFVF9SQVRFX0FEQVBU
X01PREUpOw0KKwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkp
Ow0KKwlwY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihXTF9TRVQpOw0KKwlwY21kLT5yYXRlX2Fk
YXB0X21vZGUgPSBjcHVfdG9fbGUxNihtb2RlKTsNCisNCisJaWYgKG13bF9md2NtZF9leGVjX2Nt
ZChwcml2LCBIT1NUQ01EX0NNRF9TRVRfUkFURV9BREFQVF9NT0RFKSkgew0KKwkJc3Bpbl91bmxv
Y2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxl
ZCBleGVjdXRpb25cbiIpOw0KKwkJcmV0dXJuIC1FSU87DQorCX0NCisNCisJc3Bpbl91bmxvY2tf
YmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IG13bF9m
d2NtZF9zZXRfbWFjX2FkZHJfY2xpZW50KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCQkg
IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICptYWNfYWRkcikNCit7DQorCXN0cnVjdCBt
d2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgbXdsX3ZpZiAqbXdsX3ZpZjsNCisJ
c3RydWN0IGhvc3RjbWRfY21kX3NldF9tYWNfYWRkciAqcGNtZDsNCisNCisJbXdsX3ZpZiA9IG13
bF9kZXZfZ2V0X3ZpZih2aWYpOw0KKw0KKwlwY21kID0gKHN0cnVjdCBob3N0Y21kX2NtZF9zZXRf
bWFjX2FkZHIgKikmcHJpdi0+cGNtZF9idWZbMF07DQorDQorCXNwaW5fbG9ja19iaCgmcHJpdi0+
ZndjbWRfbG9jayk7DQorDQorCW1lbXNldChwY21kLCAweDAwLCBzaXplb2YoKnBjbWQpKTsNCisJ
cGNtZC0+Y21kX2hkci5jbWQgPSBjcHVfdG9fbGUxNihIT1NUQ01EX0NNRF9TRVRfTUFDX0FERFIp
Ow0KKwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkpOw0KKwlw
Y21kLT5jbWRfaGRyLm1hY2lkID0gbXdsX3ZpZi0+bWFjaWQ7DQorCXBjbWQtPm1hY190eXBlID0g
Y3B1X3RvX2xlMTYoV0xfTUFDX1RZUEVfU0VDT05EQVJZX0NMSUVOVCk7DQorCWV0aGVyX2FkZHJf
Y29weShwY21kLT5tYWNfYWRkciwgbWFjX2FkZHIpOw0KKw0KKwlpZiAobXdsX2Z3Y21kX2V4ZWNf
Y21kKHByaXYsIEhPU1RDTURfQ01EX1NFVF9NQUNfQUREUikpIHsNCisJCXNwaW5fdW5sb2NrX2Jo
KCZwcml2LT5md2NtZF9sb2NrKTsNCisJCXdpcGh5X2Vycihody0+d2lwaHksICJmYWlsZWQgZXhl
Y3V0aW9uXG4iKTsNCisJCXJldHVybiAtRUlPOw0KKwl9DQorDQorCXNwaW5fdW5sb2NrX2JoKCZw
cml2LT5md2NtZF9sb2NrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtd2xfZndjbWRf
Z2V0X3dhdGNoZG9nX2JpdG1hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKmJpdG1hcCkN
Cit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgaG9zdGNt
ZF9jbWRfZ2V0X3dhdGNoZG9nX2JpdG1hcCAqcGNtZDsNCisNCisJcGNtZCA9IChzdHJ1Y3QgaG9z
dGNtZF9jbWRfZ2V0X3dhdGNoZG9nX2JpdG1hcCAqKSZwcml2LT5wY21kX2J1ZlswXTsNCisNCisJ
c3Bpbl9sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJbWVtc2V0KHBjbWQsIDB4MDAs
IHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5jbWRfaGRyLmNtZCA9IGNwdV90b19sZTE2KEhPU1RD
TURfQ01EX0dFVF9XQVRDSERPR19CSVRNQVApOw0KKwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90
b19sZTE2KHNpemVvZigqcGNtZCkpOw0KKw0KKwlpZiAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYs
IEhPU1RDTURfQ01EX0dFVF9XQVRDSERPR19CSVRNQVApKSB7DQorCQlzcGluX3VubG9ja19iaCgm
cHJpdi0+ZndjbWRfbG9jayk7DQorCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiZmFpbGVkIGV4ZWN1
dGlvblxuIik7DQorCQlyZXR1cm4gLUVJTzsNCisJfQ0KKw0KKwkqYml0bWFwID0gcGNtZC0+d2F0
Y2hkb2dfYml0bWFwOw0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQor
DQorCXJldHVybiAwOw0KK30NCisNCitpbnQgbXdsX2Z3Y21kX3JlbW92ZV9tYWNfYWRkcihzdHJ1
Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlm
LCB1OCAqbWFjX2FkZHIpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsN
CisJc3RydWN0IG13bF92aWYgKm13bF92aWY7DQorCXN0cnVjdCBob3N0Y21kX2NtZF9zZXRfbWFj
X2FkZHIgKnBjbWQ7DQorDQorCW13bF92aWYgPSBtd2xfZGV2X2dldF92aWYodmlmKTsNCisNCisJ
cGNtZCA9IChzdHJ1Y3QgaG9zdGNtZF9jbWRfc2V0X21hY19hZGRyICopJnByaXYtPnBjbWRfYnVm
WzBdOw0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwltZW1zZXQo
cGNtZCwgMHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3Rv
X2xlMTYoSE9TVENNRF9DTURfREVMX01BQ19BRERSKTsNCisJcGNtZC0+Y21kX2hkci5sZW4gPSBj
cHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+Y21kX2hkci5tYWNpZCA9IG13bF92
aWYtPm1hY2lkOw0KKwlldGhlcl9hZGRyX2NvcHkocGNtZC0+bWFjX2FkZHIsIG1hY19hZGRyKTsN
CisNCisJaWYgKG13bF9md2NtZF9leGVjX2NtZChwcml2LCBIT1NUQ01EX0NNRF9ERUxfTUFDX0FE
RFIpKSB7DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorCQl3aXBoeV9l
cnIoaHctPndpcGh5LCAiZmFpbGVkIGV4ZWN1dGlvblxuIik7DQorCQlyZXR1cm4gLUVJTzsNCisJ
fQ0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCXJldHVybiAw
Ow0KK30NCisNCitpbnQgbXdsX2Z3Y21kX2Jzc19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo
dywNCisJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBib29sIGVuYWJsZSkNCit7DQorCXN0
cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgbXdsX3ZpZiAqbXdsX3Zp
ZjsNCisJc3RydWN0IGhvc3RjbWRfY21kX2Jzc19zdGFydCAqcGNtZDsNCisNCisJbXdsX3ZpZiA9
IG13bF9kZXZfZ2V0X3ZpZih2aWYpOw0KKw0KKwlpZiAoZW5hYmxlICYmIChwcml2LT5ydW5uaW5n
X2Jzc2VzICYgKDEgPDwgbXdsX3ZpZi0+bWFjaWQpKSkNCisJCXJldHVybiAwOw0KKw0KKwlpZiAo
IWVuYWJsZSAmJiAhKHByaXYtPnJ1bm5pbmdfYnNzZXMgJiAoMSA8PCBtd2xfdmlmLT5tYWNpZCkp
KQ0KKwkJcmV0dXJuIDA7DQorDQorCXBjbWQgPSAoc3RydWN0IGhvc3RjbWRfY21kX2Jzc19zdGFy
dCAqKSZwcml2LT5wY21kX2J1ZlswXTsNCisNCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5md2NtZF9s
b2NrKTsNCisNCisJbWVtc2V0KHBjbWQsIDB4MDAsIHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5j
bWRfaGRyLmNtZCA9IGNwdV90b19sZTE2KEhPU1RDTURfQ01EX0JTU19TVEFSVCk7DQorCXBjbWQt
PmNtZF9oZHIubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9o
ZHIubWFjaWQgPSBtd2xfdmlmLT5tYWNpZDsNCisNCisJaWYgKGVuYWJsZSkgew0KKwkJcGNtZC0+
ZW5hYmxlID0gY3B1X3RvX2xlMzIoV0xfRU5BQkxFKTsNCisJfSBlbHNlIHsNCisJCWlmIChtd2xf
dmlmLT5tYWNpZCA9PSAwKQ0KKwkJCXBjbWQtPmVuYWJsZSA9IGNwdV90b19sZTMyKFdMX0RJU0FC
TEUpOw0KKwkJZWxzZQ0KKwkJCXBjbWQtPmVuYWJsZSA9IGNwdV90b19sZTMyKFdMX0RJU0FCTEVf
Vk1BQyk7DQorCX0NCisNCisJaWYgKG13bF9md2NtZF9leGVjX2NtZChwcml2LCBIT1NUQ01EX0NN
RF9CU1NfU1RBUlQpKSB7DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQor
CQl3aXBoeV9lcnIoaHctPndpcGh5LCAiZmFpbGVkIGV4ZWN1dGlvblxuIik7DQorCQlyZXR1cm4g
LUVJTzsNCisJfQ0KKw0KKwlpZiAoZW5hYmxlKQ0KKwkJcHJpdi0+cnVubmluZ19ic3NlcyB8PSAo
MSA8PCBtd2xfdmlmLT5tYWNpZCk7DQorCWVsc2UNCisJCXByaXYtPnJ1bm5pbmdfYnNzZXMgJj0g
figxIDw8IG13bF92aWYtPm1hY2lkKTsNCisNCisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21k
X2xvY2spOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IG13bF9md2NtZF9zZXRfYmVhY29u
KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlm
LCB1OCAqYmVhY29uLCBpbnQgbGVuKQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHct
PnByaXY7DQorCXN0cnVjdCBtd2xfdmlmICptd2xfdmlmOw0KKw0KKwltd2xfdmlmID0gbXdsX2Rl
dl9nZXRfdmlmKHZpZik7DQorDQorCW13bF9md2NtZF9wYXJzZV9iZWFjb24ocHJpdiwgbXdsX3Zp
ZiwgYmVhY29uLCBsZW4pOw0KKw0KKwlpZiAobXdsX2Z3Y21kX3NldF9pZXMocHJpdiwgbXdsX3Zp
ZikpDQorCQlnb3RvIGVycjsNCisNCisJaWYgKG13bF9md2NtZF9zZXRfYXBfYmVhY29uKHByaXYs
IG13bF92aWYsICZ2aWYtPmJzc19jb25mKSkNCisJCWdvdG8gZXJyOw0KKw0KKwltd2xfdmlmLT5i
ZWFjb25faW5mby52YWxpZCA9IGZhbHNlOw0KKw0KKwlyZXR1cm4gMDsNCisNCitlcnI6DQorDQor
CW13bF92aWYtPmJlYWNvbl9pbmZvLnZhbGlkID0gZmFsc2U7DQorDQorCXJldHVybiAtRUlPOw0K
K30NCisNCitpbnQgbXdsX2Z3Y21kX3NldF9uZXdfc3RuX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3
ICpodywNCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCSAgICAgIHN0
cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBo
dy0+cHJpdjsNCisJc3RydWN0IG13bF92aWYgKm13bF92aWY7DQorCXN0cnVjdCBob3N0Y21kX2Nt
ZF9zZXRfbmV3X3N0biAqcGNtZDsNCisJdTMyIHJhdGVzOw0KKw0KKwltd2xfdmlmID0gbXdsX2Rl
dl9nZXRfdmlmKHZpZik7DQorDQorCXBjbWQgPSAoc3RydWN0IGhvc3RjbWRfY21kX3NldF9uZXdf
c3RuICopJnByaXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21k
X2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwgMHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQt
PmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURfU0VUX05FV19TVE4pOw0KKwlw
Y21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5j
bWRfaGRyLm1hY2lkID0gbXdsX3ZpZi0+bWFjaWQ7DQorDQorCXBjbWQtPmFjdGlvbiA9IGNwdV90
b19sZTE2KEhPU1RDTURfQUNUX1NUQV9BQ1RJT05fQUREKTsNCisJaWYgKHZpZi0+dHlwZSA9PSBO
TDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7DQorCQlwY21kLT5haWQgPSAwOw0KKwkJcGNtZC0+c3Ru
X2lkID0gMDsNCisJfSBlbHNlIHsNCisJCXBjbWQtPmFpZCA9IGNwdV90b19sZTE2KHN0YS0+YWlk
KTsNCisJCXBjbWQtPnN0bl9pZCA9IGNwdV90b19sZTE2KHN0YS0+YWlkKTsNCisJfQ0KKwlldGhl
cl9hZGRyX2NvcHkocGNtZC0+bWFjX2FkZHIsIHN0YS0+YWRkcik7DQorDQorCWlmIChody0+Y29u
Zi5jaGFuZGVmLmNoYW4tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikNCisJCXJhdGVzID0g
c3RhLT5zdXBwX3JhdGVzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOw0KKwllbHNlDQorCQlyYXRlcyA9
IHN0YS0+c3VwcF9yYXRlc1tJRUVFODAyMTFfQkFORF81R0haXSA8PCA1Ow0KKwlwY21kLT5wZWVy
X2luZm8ubGVnYWN5X3JhdGVfYml0bWFwID0gY3B1X3RvX2xlMzIocmF0ZXMpOw0KKw0KKwlpZiAo
c3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKSB7DQorCQlwY21kLT5wZWVyX2luZm8uaHRfcmF0ZXNb
MF0gPSBzdGEtPmh0X2NhcC5tY3MucnhfbWFza1swXTsNCisJCXBjbWQtPnBlZXJfaW5mby5odF9y
YXRlc1sxXSA9IHN0YS0+aHRfY2FwLm1jcy5yeF9tYXNrWzFdOw0KKwkJcGNtZC0+cGVlcl9pbmZv
Lmh0X3JhdGVzWzJdID0gc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMl07DQorCQlwY21kLT5wZWVy
X2luZm8uaHRfcmF0ZXNbM10gPSBzdGEtPmh0X2NhcC5tY3MucnhfbWFza1szXTsNCisJCXBjbWQt
PnBlZXJfaW5mby5odF9jYXBfaW5mbyA9IGNwdV90b19sZTE2KHN0YS0+aHRfY2FwLmNhcCk7DQor
CQlwY21kLT5wZWVyX2luZm8ubWFjX2h0X3BhcmFtX2luZm8gPQ0KKwkJCShzdGEtPmh0X2NhcC5h
bXBkdV9mYWN0b3IgJiAzKSB8DQorCQkJKChzdGEtPmh0X2NhcC5hbXBkdV9kZW5zaXR5ICYgNykg
PDwgMik7DQorCX0NCisNCisJaWYgKHN0YS0+dmh0X2NhcC52aHRfc3VwcG9ydGVkKSB7DQorCQlw
Y21kLT5wZWVyX2luZm8udmh0X21heF9yeF9tY3MgPQ0KKwkJCWNwdV90b19sZTMyKCooKHUzMiAq
KQ0KKwkJCSZzdGEtPnZodF9jYXAudmh0X21jcy5yeF9tY3NfbWFwKSk7DQorCQlwY21kLT5wZWVy
X2luZm8udmh0X2NhcCA9IGNwdV90b19sZTMyKHN0YS0+dmh0X2NhcC5jYXApOw0KKwkJcGNtZC0+
cGVlcl9pbmZvLnZodF9yeF9jaGFubmVsX3dpZHRoID0gc3RhLT5iYW5kd2lkdGg7DQorCX0NCisN
CisJcGNtZC0+aXNfcW9zX3N0YSA9IHN0YS0+d21lOw0KKwlwY21kLT5xb3NfaW5mbyA9ICgoc3Rh
LT51YXBzZF9xdWV1ZXMgPDwgNCkgfCAoc3RhLT5tYXhfc3AgPDwgMSkpOw0KKw0KKwlpZiAobXds
X2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01EX1NFVF9ORVdfU1ROKSkgew0KKwkJc3Bp
bl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwg
ImZhaWxlZCBleGVjdXRpb25cbiIpOw0KKwkJcmV0dXJuIC1FSU87DQorCX0NCisNCisJaWYgKHZp
Zi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7DQorCQlldGhlcl9hZGRyX2NvcHko
cGNtZC0+bWFjX2FkZHIsIG13bF92aWYtPnN0YV9tYWMpOw0KKw0KKwkJaWYgKG13bF9md2NtZF9l
eGVjX2NtZChwcml2LCBIT1NUQ01EX0NNRF9TRVRfTkVXX1NUTikpIHsNCisJCQlzcGluX3VubG9j
a19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorCQkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxl
ZCBleGVjdXRpb25cbiIpOw0KKwkJCXJldHVybiAtRUlPOw0KKwkJfQ0KKwl9DQorDQorCXNwaW5f
dW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2lu
dCBtd2xfZndjbWRfc2V0X25ld19zdG5fYWRkX3NlbGYoc3RydWN0IGllZWU4MDIxMV9odyAqaHcs
DQorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpDQorew0KKwlzdHJ1Y3QgbXdsX3By
aXYgKnByaXYgPSBody0+cHJpdjsNCisJc3RydWN0IG13bF92aWYgKm13bF92aWY7DQorCXN0cnVj
dCBob3N0Y21kX2NtZF9zZXRfbmV3X3N0biAqcGNtZDsNCisNCisJbXdsX3ZpZiA9IG13bF9kZXZf
Z2V0X3ZpZih2aWYpOw0KKw0KKwlwY21kID0gKHN0cnVjdCBob3N0Y21kX2NtZF9zZXRfbmV3X3N0
biAqKSZwcml2LT5wY21kX2J1ZlswXTsNCisNCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5md2NtZF9s
b2NrKTsNCisNCisJbWVtc2V0KHBjbWQsIDB4MDAsIHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5j
bWRfaGRyLmNtZCA9IGNwdV90b19sZTE2KEhPU1RDTURfQ01EX1NFVF9ORVdfU1ROKTsNCisJcGNt
ZC0+Y21kX2hkci5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+Y21k
X2hkci5tYWNpZCA9IG13bF92aWYtPm1hY2lkOw0KKw0KKwlwY21kLT5hY3Rpb24gPSBjcHVfdG9f
bGUxNihIT1NUQ01EX0FDVF9TVEFfQUNUSU9OX0FERCk7DQorCWV0aGVyX2FkZHJfY29weShwY21k
LT5tYWNfYWRkciwgdmlmLT5hZGRyKTsNCisNCisJaWYgKG13bF9md2NtZF9leGVjX2NtZChwcml2
LCBIT1NUQ01EX0NNRF9TRVRfTkVXX1NUTikpIHsNCisJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5m
d2NtZF9sb2NrKTsNCisJCXdpcGh5X2Vycihody0+d2lwaHksICJmYWlsZWQgZXhlY3V0aW9uXG4i
KTsNCisJCXJldHVybiAtRUlPOw0KKwl9DQorDQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2Nt
ZF9sb2NrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtd2xfZndjbWRfc2V0X25ld19z
dG5fZGVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCSAgICAgIHN0cnVjdCBpZWVlODAy
MTFfdmlmICp2aWYsIHU4ICphZGRyKQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHct
PnByaXY7DQorCXN0cnVjdCBtd2xfdmlmICptd2xfdmlmOw0KKwlzdHJ1Y3QgaG9zdGNtZF9jbWRf
c2V0X25ld19zdG4gKnBjbWQ7DQorDQorCW13bF92aWYgPSBtd2xfZGV2X2dldF92aWYodmlmKTsN
CisNCisJcGNtZCA9IChzdHJ1Y3QgaG9zdGNtZF9jbWRfc2V0X25ld19zdG4gKikmcHJpdi0+cGNt
ZF9idWZbMF07DQorDQorCXNwaW5fbG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCW1l
bXNldChwY21kLCAweDAwLCBzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+Y21kX2hkci5jbWQgPSBj
cHVfdG9fbGUxNihIT1NUQ01EX0NNRF9TRVRfTkVXX1NUTik7DQorCXBjbWQtPmNtZF9oZHIubGVu
ID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIubWFjaWQgPSBt
d2xfdmlmLT5tYWNpZDsNCisNCisJcGNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoSE9TVENNRF9B
Q1RfU1RBX0FDVElPTl9SRU1PVkUpOw0KKwlldGhlcl9hZGRyX2NvcHkocGNtZC0+bWFjX2FkZHIs
IGFkZHIpOw0KKw0KKwlpZiAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01EX1NF
VF9ORVdfU1ROKSkgew0KKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJ
d2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZCBleGVjdXRpb25cbiIpOw0KKwkJcmV0dXJuIC1F
SU87DQorCX0NCisNCisJaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7
DQorCQlldGhlcl9hZGRyX2NvcHkocGNtZC0+bWFjX2FkZHIsIG13bF92aWYtPnN0YV9tYWMpOw0K
Kw0KKwkJaWYgKG13bF9md2NtZF9leGVjX2NtZChwcml2LCBIT1NUQ01EX0NNRF9TRVRfTkVXX1NU
TikpIHsNCisJCQlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorCQkJd2lwaHlf
ZXJyKGh3LT53aXBoeSwgImZhaWxlZCBleGVjdXRpb25cbiIpOw0KKwkJCXJldHVybiAtRUlPOw0K
KwkJfQ0KKwl9DQorDQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJ
cmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtd2xfZndjbWRfc2V0X2FwbW9kZShzdHJ1Y3QgaWVlZTgw
MjExX2h3ICpodywgdTggYXBtb2RlKQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHct
PnByaXY7DQorCXN0cnVjdCBob3N0Y21kX2NtZF9zZXRfYXBtb2RlICpwY21kOw0KKw0KKwlwY21k
ID0gKHN0cnVjdCBob3N0Y21kX2NtZF9zZXRfYXBtb2RlICopJnByaXYtPnBjbWRfYnVmWzBdOw0K
Kw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwg
MHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYo
SE9TVENNRF9DTURfU0VUX0FQTU9ERSk7DQorCXBjbWQtPmNtZF9oZHIubGVuID0gY3B1X3RvX2xl
MTYoc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmFwbW9kZSA9IGFwbW9kZTsNCisNCisJaWYgKG13
bF9md2NtZF9leGVjX2NtZChwcml2LCBIT1NUQ01EX0NNRF9TRVRfQVBNT0RFKSkgew0KKwkJc3Bp
bl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwg
ImZhaWxlZCBleGVjdXRpb25cbiIpOw0KKwkJcmV0dXJuIC1FSU87DQorCX0NCisNCisJc3Bpbl91
bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50
IG13bF9md2NtZF91cGRhdGVfZW5jcnlwdGlvbl9lbmFibGUoc3RydWN0IGllZWU4MDIxMV9odyAq
aHcsDQorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCQkgICAgICAg
dTggKmFkZHIsIHU4IGVuY3JfdHlwZSkNCit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3
LT5wcml2Ow0KKwlzdHJ1Y3QgbXdsX3ZpZiAqbXdsX3ZpZjsNCisJc3RydWN0IGhvc3RjbWRfY21k
X3VwZGF0ZV9lbmNyeXB0aW9uICpwY21kOw0KKw0KKwltd2xfdmlmID0gbXdsX2Rldl9nZXRfdmlm
KHZpZik7DQorDQorCXBjbWQgPSAoc3RydWN0IGhvc3RjbWRfY21kX3VwZGF0ZV9lbmNyeXB0aW9u
ICopJnByaXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21kX2xv
Y2spOw0KKw0KKwltZW1zZXQocGNtZCwgMHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNt
ZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURfVVBEQVRFX0VOQ1JZUFRJT04pOw0K
KwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkpOw0KKwlwY21k
LT5jbWRfaGRyLm1hY2lkID0gbXdsX3ZpZi0+bWFjaWQ7DQorDQorCXBjbWQtPmFjdGlvbl90eXBl
ID0gY3B1X3RvX2xlMzIoRU5DUl9BQ1RJT05fRU5BQkxFX0hXX0VOQ1IpOw0KKwlldGhlcl9hZGRy
X2NvcHkocGNtZC0+bWFjX2FkZHIsIGFkZHIpOw0KKwlwY21kLT5hY3Rpb25fZGF0YVswXSA9IGVu
Y3JfdHlwZTsNCisNCisJaWYgKG13bF9md2NtZF9leGVjX2NtZChwcml2LCBIT1NUQ01EX0NNRF9V
UERBVEVfRU5DUllQVElPTikpIHsNCisJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2Nr
KTsNCisJCXdpcGh5X2Vycihody0+d2lwaHksICJmYWlsZWQgZXhlY3V0aW9uXG4iKTsNCisJCXJl
dHVybiAtRUlPOw0KKwl9DQorDQorCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RB
VElPTikgew0KKwkJaWYgKGV0aGVyX2FkZHJfZXF1YWwobXdsX3ZpZi0+YnNzaWQsIGFkZHIpKQ0K
KwkJCWV0aGVyX2FkZHJfY29weShwY21kLT5tYWNfYWRkciwgbXdsX3ZpZi0+c3RhX21hYyk7DQor
CQllbHNlDQorCQkJZXRoZXJfYWRkcl9jb3B5KHBjbWQtPm1hY19hZGRyLCBtd2xfdmlmLT5ic3Np
ZCk7DQorDQorCQlpZiAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01EX1VQREFU
RV9FTkNSWVBUSU9OKSkgew0KKwkJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsN
CisJCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiZmFpbGVkIGV4ZWN1dGlvblxuIik7DQorCQkJcmV0
dXJuIC1FSU87DQorCQl9DQorCX0NCisNCisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xv
Y2spOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IG13bF9md2NtZF9lbmNyeXB0aW9uX3Nl
dF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3Zp
ZiAqdmlmLCB1OCAqYWRkciwNCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkN
Cit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgbXdsX3Zp
ZiAqbXdsX3ZpZjsNCisJc3RydWN0IGhvc3RjbWRfY21kX3NldF9rZXkgKnBjbWQ7DQorCWludCBy
YzsNCisJaW50IGtleW1sZW47DQorCXUzMiBhY3Rpb247DQorCXU4IGlkeDsNCisNCisJbXdsX3Zp
ZiA9IG13bF9kZXZfZ2V0X3ZpZih2aWYpOw0KKw0KKwlwY21kID0gKHN0cnVjdCBob3N0Y21kX2Nt
ZF9zZXRfa2V5ICopJnByaXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYt
PmZ3Y21kX2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwgMHgwMCwgc2l6ZW9mKCpwY21kKSk7DQor
CXBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURfVVBEQVRFX0VOQ1JZ
UFRJT04pOw0KKwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkp
Ow0KKwlwY21kLT5jbWRfaGRyLm1hY2lkID0gbXdsX3ZpZi0+bWFjaWQ7DQorDQorCXJjID0gbXds
X2Z3Y21kX2VuY3J5cHRpb25fc2V0X2NtZF9pbmZvKHBjbWQsIGFkZHIsIGtleSk7DQorCWlmIChy
Yykgew0KKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJd2lwaHlfZXJy
KGh3LT53aXBoeSwgImVuY3J5cHRpb24gbm90IHN1cHBvcnRcbiIpOw0KKwkJcmV0dXJuIHJjOw0K
Kwl9DQorDQorCWlkeCA9IGtleS0+a2V5aWR4Ow0KKw0KKwlpZiAoa2V5LT5mbGFncyAmIElFRUU4
MDIxMV9LRVlfRkxBR19QQUlSV0lTRSkNCisJCWFjdGlvbiA9IEVOQ1JfQUNUSU9OX1RZUEVfU0VU
X0tFWTsNCisJZWxzZQ0KKwkJYWN0aW9uID0gRU5DUl9BQ1RJT05fVFlQRV9TRVRfR1JPVVBfS0VZ
Ow0KKw0KKwlzd2l0Y2ggKGtleS0+Y2lwaGVyKSB7DQorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVf
V0VQNDA6DQorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0Og0KKwkJaWYgKCFtd2xfdmlm
LT53ZXBfa2V5X2NvbmZbaWR4XS5lbmFibGVkKSB7DQorCQkJbWVtY3B5KG13bF92aWYtPndlcF9r
ZXlfY29uZltpZHhdLmtleSwga2V5LA0KKwkJCSAgICAgICBzaXplb2YoKmtleSkgKyBrZXktPmtl
eWxlbik7DQorCQkJbXdsX3ZpZi0+d2VwX2tleV9jb25mW2lkeF0uZW5hYmxlZCA9IDE7DQorCQl9
DQorDQorCQlrZXltbGVuID0ga2V5LT5rZXlsZW47DQorCQlhY3Rpb24gPSBFTkNSX0FDVElPTl9U
WVBFX1NFVF9LRVk7DQorCQlicmVhazsNCisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOg0K
KwkJa2V5bWxlbiA9IE1BWF9FTkNSX0tFWV9MRU5HVEggKyAyICogTUlDX0tFWV9MRU5HVEg7DQor
CQlicmVhazsNCisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOg0KKwkJa2V5bWxlbiA9IGtl
eS0+a2V5bGVuOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlzcGluX3VubG9ja19iaCgmcHJp
di0+ZndjbWRfbG9jayk7DQorCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiZW5jcnlwdGlvbiBub3Qg
c3VwcG9ydFxuIik7DQorCQlyZXR1cm4gLUVOT1RTVVBQOw0KKwl9DQorDQorCW1lbWNweSgodm9p
ZCAqKSZwY21kLT5rZXlfcGFyYW0ua2V5LCBrZXktPmtleSwga2V5bWxlbik7DQorCXBjbWQtPmFj
dGlvbl90eXBlID0gY3B1X3RvX2xlMzIoYWN0aW9uKTsNCisNCisJaWYgKG13bF9md2NtZF9leGVj
X2NtZChwcml2LCBIT1NUQ01EX0NNRF9VUERBVEVfRU5DUllQVElPTikpIHsNCisJCXNwaW5fdW5s
b2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisJCXdpcGh5X2Vycihody0+d2lwaHksICJmYWls
ZWQgZXhlY3V0aW9uXG4iKTsNCisJCXJldHVybiAtRUlPOw0KKwl9DQorDQorCWlmICh2aWYtPnR5
cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgew0KKwkJaWYgKGV0aGVyX2FkZHJfZXF1YWwo
bXdsX3ZpZi0+YnNzaWQsIGFkZHIpKQ0KKwkJCWV0aGVyX2FkZHJfY29weShwY21kLT5rZXlfcGFy
YW0ubWFjX2FkZHIsDQorCQkJCQltd2xfdmlmLT5zdGFfbWFjKTsNCisJCWVsc2UNCisJCQlldGhl
cl9hZGRyX2NvcHkocGNtZC0+a2V5X3BhcmFtLm1hY19hZGRyLA0KKwkJCQkJbXdsX3ZpZi0+YnNz
aWQpOw0KKw0KKwkJaWYgKG13bF9md2NtZF9leGVjX2NtZChwcml2LCBIT1NUQ01EX0NNRF9VUERB
VEVfRU5DUllQVElPTikpIHsNCisJCQlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7
DQorCQkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZCBleGVjdXRpb25cbiIpOw0KKwkJCXJl
dHVybiAtRUlPOw0KKwkJfQ0KKwl9DQorDQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2NtZF9s
b2NrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtd2xfZndjbWRfZW5jcnlwdGlvbl9y
ZW1vdmVfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCQkgICAgc3RydWN0IGllZWU4
MDIxMV92aWYgKnZpZiwgdTggKmFkZHIsDQorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9j
b25mICprZXkpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJc3Ry
dWN0IG13bF92aWYgKm13bF92aWY7DQorCXN0cnVjdCBob3N0Y21kX2NtZF9zZXRfa2V5ICpwY21k
Ow0KKwlpbnQgcmM7DQorDQorCW13bF92aWYgPSBtd2xfZGV2X2dldF92aWYodmlmKTsNCisNCisJ
cGNtZCA9IChzdHJ1Y3QgaG9zdGNtZF9jbWRfc2V0X2tleSAqKSZwcml2LT5wY21kX2J1ZlswXTsN
CisNCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJbWVtc2V0KHBjbWQs
IDB4MDAsIHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5jbWRfaGRyLmNtZCA9IGNwdV90b19sZTE2
KEhPU1RDTURfQ01EX1VQREFURV9FTkNSWVBUSU9OKTsNCisJcGNtZC0+Y21kX2hkci5sZW4gPSBj
cHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+Y21kX2hkci5tYWNpZCA9IG13bF92
aWYtPm1hY2lkOw0KKw0KKwlyYyA9IG13bF9md2NtZF9lbmNyeXB0aW9uX3NldF9jbWRfaW5mbyhw
Y21kLCBhZGRyLCBrZXkpOw0KKwlpZiAocmMpIHsNCisJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5m
d2NtZF9sb2NrKTsNCisJCXdpcGh5X2Vycihody0+d2lwaHksICJlbmNyeXB0aW9uIG5vdCBzdXBw
b3J0XG4iKTsNCisJCXJldHVybiByYzsNCisJfQ0KKw0KKwlwY21kLT5hY3Rpb25fdHlwZSA9IGNw
dV90b19sZTMyKEVOQ1JfQUNUSU9OX1RZUEVfUkVNT1ZFX0tFWSk7DQorDQorCWlmIChrZXktPmNp
cGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCB8fA0KKwkgICAga2V5LT5jaXBoZXIgPT0g
V0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0KQ0KKwkJbXdsX3ZpZi0+d2VwX2tleV9jb25mW2tleS0+
a2V5aWR4XS5lbmFibGVkID0gMDsNCisNCisJaWYgKG13bF9md2NtZF9leGVjX2NtZChwcml2LCBI
T1NUQ01EX0NNRF9VUERBVEVfRU5DUllQVElPTikpIHsNCisJCXNwaW5fdW5sb2NrX2JoKCZwcml2
LT5md2NtZF9sb2NrKTsNCisJCXdpcGh5X2Vycihody0+d2lwaHksICJmYWlsZWQgZXhlY3V0aW9u
XG4iKTsNCisJCXJldHVybiAtRUlPOw0KKwl9DQorDQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5m
d2NtZF9sb2NrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtd2xfZndjbWRfY2hlY2tf
YmEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkgICAgICAgc3RydWN0IG13bF9hbXBkdV9z
dHJlYW0gKnN0cmVhbSwNCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQ0KK3sN
CisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHctPnByaXY7DQorCXN0cnVjdCBtd2xfdmlmICpt
d2xfdmlmOw0KKwlzdHJ1Y3QgaG9zdGNtZF9jbWRfYmFzdHJlYW0gKnBjbWQ7DQorCXUzMiBiYV9m
bGFncywgYmFfdHlwZSwgYmFfZGlyZWN0aW9uOw0KKw0KKwltd2xfdmlmID0gbXdsX2Rldl9nZXRf
dmlmKHZpZik7DQorDQorCXBjbWQgPSAoc3RydWN0IGhvc3RjbWRfY21kX2Jhc3RyZWFtICopJnBy
aXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0K
Kw0KKwltZW1zZXQocGNtZCwgMHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIu
Y21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURfQkFTVFJFQU0pOw0KKwlwY21kLT5jbWRfaGRy
LmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5jbWRfaGRyLm1hY2lk
ID0gbXdsX3ZpZi0+bWFjaWQ7DQorCXBjbWQtPmNtZF9oZHIucmVzdWx0ID0gY3B1X3RvX2xlMTYo
MHhmZmZmKTsNCisNCisJcGNtZC0+YWN0aW9uX3R5cGUgPSBjcHVfdG9fbGUzMihCQV9DSEVDS19T
VFJFQU0pOw0KKwlldGhlcl9hZGRyX2NvcHkoJnBjbWQtPmJhX2luZm8uY3JlYXRlX3BhcmFtcy5w
ZWVyX21hY19hZGRyWzBdLA0KKwkJCXN0cmVhbS0+c3RhLT5hZGRyKTsNCisJcGNtZC0+YmFfaW5m
by5jcmVhdGVfcGFyYW1zLnRpZCA9IHN0cmVhbS0+dGlkOw0KKwliYV90eXBlID0gQkFTVFJFQU1f
RkxBR19JTU1FRElBVEVfVFlQRTsNCisJYmFfZGlyZWN0aW9uID0gQkFTVFJFQU1fRkxBR19ESVJF
Q1RJT05fVVBTVFJFQU07DQorCWJhX2ZsYWdzID0gKGJhX3R5cGUgJiBCQV9UWVBFX01BU0spIHwN
CisJCSgoYmFfZGlyZWN0aW9uIDw8IEJBX0RJUkVDVElPTl9TSElGVCkgJiBCQV9ESVJFQ1RJT05f
TUFTSyk7DQorCXBjbWQtPmJhX2luZm8uY3JlYXRlX3BhcmFtcy5mbGFncyA9IGNwdV90b19sZTMy
KGJhX2ZsYWdzKTsNCisJcGNtZC0+YmFfaW5mby5jcmVhdGVfcGFyYW1zLnF1ZXVlX2lkID0gc3Ry
ZWFtLT5pZHg7DQorDQorCWlmIChtd2xfZndjbWRfZXhlY19jbWQocHJpdiwgSE9TVENNRF9DTURf
QkFTVFJFQU0pKSB7DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorCQl3
aXBoeV9lcnIoaHctPndpcGh5LCAiY2hlY2sgYmEgZmFpbGVkIGV4ZWN1dGlvblxuIik7DQorCQly
ZXR1cm4gLUVJTzsNCisJfQ0KKw0KKwlpZiAocGNtZC0+Y21kX2hkci5yZXN1bHQgIT0gMCkgew0K
KwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJd2lwaHlfZXJyKGh3LT53
aXBoeSwgImNoZWNrIGJhIHJlc3VsdCBlcnJvciAlZFxuIiwNCisJCQkgIGxlMTZfdG9fY3B1KHBj
bWQtPmNtZF9oZHIucmVzdWx0KSk7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlzcGlu
X3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitp
bnQgbXdsX2Z3Y21kX2NyZWF0ZV9iYShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQlzdHJ1
Y3QgbXdsX2FtcGR1X3N0cmVhbSAqc3RyZWFtLA0KKwkJCXU4IGJ1Zl9zaXplLCBzdHJ1Y3QgaWVl
ZTgwMjExX3ZpZiAqdmlmKQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHctPnByaXY7
DQorCXN0cnVjdCBtd2xfdmlmICptd2xfdmlmOw0KKwlzdHJ1Y3QgaG9zdGNtZF9jbWRfYmFzdHJl
YW0gKnBjbWQ7DQorCXUzMiBiYV9mbGFncywgYmFfdHlwZSwgYmFfZGlyZWN0aW9uOw0KKw0KKwlt
d2xfdmlmID0gbXdsX2Rldl9nZXRfdmlmKHZpZik7DQorDQorCXBjbWQgPSAoc3RydWN0IGhvc3Rj
bWRfY21kX2Jhc3RyZWFtICopJnByaXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlzcGluX2xvY2tfYmgo
JnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwgMHgwMCwgc2l6ZW9mKCpwY21k
KSk7DQorCXBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURfQkFTVFJF
QU0pOw0KKwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkpOw0K
KwlwY21kLT5jbWRfaGRyLm1hY2lkID0gbXdsX3ZpZi0+bWFjaWQ7DQorCXBjbWQtPmNtZF9oZHIu
cmVzdWx0ID0gY3B1X3RvX2xlMTYoMHhmZmZmKTsNCisNCisJcGNtZC0+YWN0aW9uX3R5cGUgPSBj
cHVfdG9fbGUzMihCQV9DUkVBVEVfU1RSRUFNKTsNCisJcGNtZC0+YmFfaW5mby5jcmVhdGVfcGFy
YW1zLmJhcl90aHJzID0gY3B1X3RvX2xlMzIoYnVmX3NpemUpOw0KKwlwY21kLT5iYV9pbmZvLmNy
ZWF0ZV9wYXJhbXMud2luZG93X3NpemUgPSBjcHVfdG9fbGUzMihidWZfc2l6ZSk7DQorCWV0aGVy
X2FkZHJfY29weSgmcGNtZC0+YmFfaW5mby5jcmVhdGVfcGFyYW1zLnBlZXJfbWFjX2FkZHJbMF0s
DQorCQkJc3RyZWFtLT5zdGEtPmFkZHIpOw0KKwlwY21kLT5iYV9pbmZvLmNyZWF0ZV9wYXJhbXMu
dGlkID0gc3RyZWFtLT50aWQ7DQorCWJhX3R5cGUgPSBCQVNUUkVBTV9GTEFHX0lNTUVESUFURV9U
WVBFOw0KKwliYV9kaXJlY3Rpb24gPSBCQVNUUkVBTV9GTEFHX0RJUkVDVElPTl9VUFNUUkVBTTsN
CisJYmFfZmxhZ3MgPSAoYmFfdHlwZSAmIEJBX1RZUEVfTUFTSykgfA0KKwkJKChiYV9kaXJlY3Rp
b24gPDwgQkFfRElSRUNUSU9OX1NISUZUKSAmIEJBX0RJUkVDVElPTl9NQVNLKTsNCisJcGNtZC0+
YmFfaW5mby5jcmVhdGVfcGFyYW1zLmZsYWdzID0gY3B1X3RvX2xlMzIoYmFfZmxhZ3MpOw0KKwlw
Y21kLT5iYV9pbmZvLmNyZWF0ZV9wYXJhbXMucXVldWVfaWQgPSBzdHJlYW0tPmlkeDsNCisJcGNt
ZC0+YmFfaW5mby5jcmVhdGVfcGFyYW1zLnBhcmFtX2luZm8gPQ0KKwkJKHN0cmVhbS0+c3RhLT5o
dF9jYXAuYW1wZHVfZmFjdG9yICYNCisJCSBJRUVFODAyMTFfSFRfQU1QRFVfUEFSTV9GQUNUT1Ip
IHwNCisJCSgoc3RyZWFtLT5zdGEtPmh0X2NhcC5hbXBkdV9kZW5zaXR5IDw8IDIpICYNCisJCSBJ
RUVFODAyMTFfSFRfQU1QRFVfUEFSTV9ERU5TSVRZKTsNCisJcGNtZC0+YmFfaW5mby5jcmVhdGVf
cGFyYW1zLnJlc2V0X3NlcV9ubyA9IDE7DQorCXBjbWQtPmJhX2luZm8uY3JlYXRlX3BhcmFtcy5j
dXJyZW50X3NlcSA9IGNwdV90b19sZTE2KDApOw0KKw0KKwlpZiAobXdsX2Z3Y21kX2V4ZWNfY21k
KHByaXYsIEhPU1RDTURfQ01EX0JBU1RSRUFNKSkgew0KKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYt
PmZ3Y21kX2xvY2spOw0KKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImNyZWF0ZSBiYSBmYWlsZWQg
ZXhlY3V0aW9uXG4iKTsNCisJCXJldHVybiAtRUlPOw0KKwl9DQorDQorCWlmIChwY21kLT5jbWRf
aGRyLnJlc3VsdCAhPSAwKSB7DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7
DQorCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiY3JlYXRlIGJhIHJlc3VsdCBlcnJvciAlZFxuIiwN
CisJCQkgIGxlMTZfdG9fY3B1KHBjbWQtPmNtZF9oZHIucmVzdWx0KSk7DQorCQlyZXR1cm4gLUVJ
TlZBTDsNCisJfQ0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQor
CXJldHVybiAwOw0KK30NCisNCitpbnQgbXdsX2Z3Y21kX2Rlc3Ryb3lfYmEoc3RydWN0IGllZWU4
MDIxMV9odyAqaHcsDQorCQkJIHU4IGlkeCkNCit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9
IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgaG9zdGNtZF9jbWRfYmFzdHJlYW0gKnBjbWQ7DQorCXUzMiBi
YV9mbGFncywgYmFfdHlwZSwgYmFfZGlyZWN0aW9uOw0KKw0KKwlwY21kID0gKHN0cnVjdCBob3N0
Y21kX2NtZF9iYXN0cmVhbSAqKSZwcml2LT5wY21kX2J1ZlswXTsNCisNCisJc3Bpbl9sb2NrX2Jo
KCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJbWVtc2V0KHBjbWQsIDB4MDAsIHNpemVvZigqcGNt
ZCkpOw0KKwlwY21kLT5jbWRfaGRyLmNtZCA9IGNwdV90b19sZTE2KEhPU1RDTURfQ01EX0JBU1RS
RUFNKTsNCisJcGNtZC0+Y21kX2hkci5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsN
CisNCisJcGNtZC0+YWN0aW9uX3R5cGUgPSBjcHVfdG9fbGUzMihCQV9ERVNUUk9ZX1NUUkVBTSk7
DQorCWJhX3R5cGUgPSBCQVNUUkVBTV9GTEFHX0lNTUVESUFURV9UWVBFOw0KKwliYV9kaXJlY3Rp
b24gPSBCQVNUUkVBTV9GTEFHX0RJUkVDVElPTl9VUFNUUkVBTTsNCisJYmFfZmxhZ3MgPSAoYmFf
dHlwZSAmIEJBX1RZUEVfTUFTSykgfA0KKwkJKChiYV9kaXJlY3Rpb24gPDwgQkFfRElSRUNUSU9O
X1NISUZUKSAmIEJBX0RJUkVDVElPTl9NQVNLKTsNCisJcGNtZC0+YmFfaW5mby5kZXN0cm95X3Bh
cmFtcy5mbGFncyA9IGNwdV90b19sZTMyKGJhX2ZsYWdzKTsNCisJcGNtZC0+YmFfaW5mby5kZXN0
cm95X3BhcmFtcy5md19iYV9jb250ZXh0LmNvbnRleHQgPSBjcHVfdG9fbGUzMihpZHgpOw0KKw0K
KwlpZiAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01EX0JBU1RSRUFNKSkgew0K
KwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJd2lwaHlfZXJyKGh3LT53
aXBoeSwgImRlc3Ryb3kgYmEgZmFpbGVkIGV4ZWN1dGlvblxuIik7DQorCQlyZXR1cm4gLUVJTzsN
CisJfQ0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCXJldHVy
biAwOw0KK30NCisNCisvKiBjYWxsZXIgbXVzdCBob2xkIHByaXYtPnN0cmVhbV9sb2NrIHdoZW4g
Y2FsbGluZyB0aGUgc3RyZWFtIGZ1bmN0aW9ucyAqLw0KK3N0cnVjdCBtd2xfYW1wZHVfc3RyZWFt
ICptd2xfZndjbWRfYWRkX3N0cmVhbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkJCSAg
ICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsDQorCQkJCQkgICAgICB1OCB0aWQpDQorew0K
KwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJc3RydWN0IG13bF9hbXBkdV9z
dHJlYW0gKnN0cmVhbTsNCisJaW50IGk7DQorDQorCWZvciAoaSA9IDA7IGkgPCBTWVNBRFBUX1RY
X0FNUERVX1FVRVVFUzsgaSsrKSB7DQorCQlzdHJlYW0gPSAmcHJpdi0+YW1wZHVbaV07DQorDQor
CQlpZiAoc3RyZWFtLT5zdGF0ZSA9PSBBTVBEVV9OT19TVFJFQU0pIHsNCisJCQlzdHJlYW0tPnN0
YSA9IHN0YTsNCisJCQlzdHJlYW0tPnN0YXRlID0gQU1QRFVfU1RSRUFNX05FVzsNCisJCQlzdHJl
YW0tPnRpZCA9IHRpZDsNCisJCQlzdHJlYW0tPmlkeCA9IGk7DQorCQkJcmV0dXJuIHN0cmVhbTsN
CisJCX0NCisJfQ0KKw0KKwlyZXR1cm4gTlVMTDsNCit9DQorDQordm9pZCBtd2xfZndjbWRfZGVs
X3N0YV9zdHJlYW1zKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCSAgICAgICBzdHJ1Y3Qg
aWVlZTgwMjExX3N0YSAqc3RhKQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHctPnBy
aXY7DQorCXN0cnVjdCBtd2xfYW1wZHVfc3RyZWFtICpzdHJlYW07DQorCWludCBpOw0KKw0KKwlm
b3IgKGkgPSAwOyBpIDwgU1lTQURQVF9UWF9BTVBEVV9RVUVVRVM7IGkrKykgew0KKwkJc3RyZWFt
ID0gJnByaXYtPmFtcGR1W2ldOw0KKw0KKwkJaWYgKHN0cmVhbS0+c3RhID09IHN0YSkgew0KKwkJ
CW13bF9md2NtZF9kZXN0cm95X2JhKGh3LCBzdHJlYW0tPmlkeCk7DQorCQkJbXdsX2Z3Y21kX3Jl
bW92ZV9zdHJlYW0oaHcsIHN0cmVhbSk7DQorCQl9DQorCX0NCit9DQorDQoraW50IG13bF9md2Nt
ZF9zdGFydF9zdHJlYW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJICAgc3RydWN0IG13
bF9hbXBkdV9zdHJlYW0gKnN0cmVhbSkNCit7DQorCS8qIGlmIHRoZSBzdHJlYW0gaGFzIGFscmVh
ZHkgYmVlbiBzdGFydGVkLCBkb24ndCBzdGFydCBpdCBhZ2FpbiAqLw0KKwlpZiAoc3RyZWFtLT5z
dGF0ZSAhPSBBTVBEVV9TVFJFQU1fTkVXKQ0KKwkJcmV0dXJuIDA7DQorDQorCXJldHVybiBpZWVl
ODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzdHJlYW0tPnN0YSwgc3RyZWFtLT50aWQsIDApOw0K
K30NCisNCit2b2lkIG13bF9md2NtZF9yZW1vdmVfc3RyZWFtKHN0cnVjdCBpZWVlODAyMTFfaHcg
Kmh3LA0KKwkJCSAgICAgc3RydWN0IG13bF9hbXBkdV9zdHJlYW0gKnN0cmVhbSkNCit7DQorCW1l
bXNldChzdHJlYW0sIDAsIHNpemVvZigqc3RyZWFtKSk7DQorfQ0KKw0KK3N0cnVjdCBtd2xfYW1w
ZHVfc3RyZWFtICptd2xfZndjbWRfbG9va3VwX3N0cmVhbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo
dywNCisJCQkJCQkgdTggKmFkZHIsIHU4IHRpZCkNCit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJp
diA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgbXdsX2FtcGR1X3N0cmVhbSAqc3RyZWFtOw0KKwlpbnQg
aTsNCisNCisJZm9yIChpID0gMDsgaSA8IFNZU0FEUFRfVFhfQU1QRFVfUVVFVUVTOyBpKyspIHsN
CisJCXN0cmVhbSA9ICZwcml2LT5hbXBkdVtpXTsNCisNCisJCWlmIChzdHJlYW0tPnN0YXRlID09
IEFNUERVX05PX1NUUkVBTSkNCisJCQljb250aW51ZTsNCisNCisJCWlmIChldGhlcl9hZGRyX2Vx
dWFsKHN0cmVhbS0+c3RhLT5hZGRyLCBhZGRyKSAmJg0KKwkJICAgIHN0cmVhbS0+dGlkID09IHRp
ZCkNCisJCQlyZXR1cm4gc3RyZWFtOw0KKwl9DQorDQorCXJldHVybiBOVUxMOw0KK30NCisNCiti
b29sIG13bF9md2NtZF9hbXBkdV9hbGxvd2VkKHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4
IHRpZCkNCit7DQorCXN0cnVjdCBtd2xfc3RhICpzdGFfaW5mbzsNCisJc3RydWN0IG13bF90eF9p
bmZvICp0eF9zdGF0czsNCisNCisJaWYgKFdBUk5fT04odGlkID49IFNZU0FEUFRfTUFYX1RJRCkp
DQorCQlyZXR1cm4gZmFsc2U7DQorDQorCXN0YV9pbmZvID0gbXdsX2Rldl9nZXRfc3RhKHN0YSk7
DQorDQorCXR4X3N0YXRzID0gJnN0YV9pbmZvLT50eF9zdGF0c1t0aWRdOw0KKw0KKwlyZXR1cm4g
KHN0YV9pbmZvLT5pc19hbXBkdV9hbGxvd2VkICYmDQorCQl0eF9zdGF0cy0+cGt0cyA+IFNZU0FE
UFRfQU1QRFVfUEFDS0VUX1RIUkVTSE9MRCk7DQorfQ0KKw0KK2ludCBtd2xfZndjbWRfc2V0X29w
dGltaXphdGlvbl9sZXZlbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggb3B0X2xldmVsKQ0K
K3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHctPnByaXY7DQorCXN0cnVjdCBob3N0Y21k
X2NtZF9zZXRfb3B0aW1pemF0aW9uX2xldmVsICpwY21kOw0KKw0KKwlwY21kID0gKHN0cnVjdCBo
b3N0Y21kX2NtZF9zZXRfb3B0aW1pemF0aW9uX2xldmVsICopJnByaXYtPnBjbWRfYnVmWzBdOw0K
Kw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwg
MHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYo
SE9TVENNRF9DTURfU0VUX09QVElNSVpBVElPTl9MRVZFTCk7DQorCXBjbWQtPmNtZF9oZHIubGVu
ID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPm9wdF9sZXZlbCA9IG9wdF9s
ZXZlbDsNCisNCisJaWYgKG13bF9md2NtZF9leGVjX2NtZChwcml2LCBIT1NUQ01EX0NNRF9TRVRf
T1BUSU1JWkFUSU9OX0xFVkVMKSkgew0KKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xv
Y2spOw0KKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZCBleGVjdXRpb25cbiIpOw0KKwkJ
cmV0dXJuIC1FSU87DQorCX0NCisNCisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2sp
Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IG13bF9md2NtZF9zZXRfZHdkc19zdGFtb2Rl
KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGVuYWJsZSkNCit7DQorCXN0cnVjdCBtd2xf
cHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgaG9zdGNtZF9jbWRfZHdkc19lbmFibGUg
KnBjbWQ7DQorDQorCXBjbWQgPSAoc3RydWN0IGhvc3RjbWRfY21kX2R3ZHNfZW5hYmxlICopJnBy
aXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0K
Kw0KKwltZW1zZXQocGNtZCwgMHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIu
Y21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURfRFdEU19FTkFCTEUpOw0KKwlwY21kLT5jbWRf
aGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5lbmFibGUgPSBj
cHVfdG9fbGUzMihlbmFibGUpOw0KKw0KKwlpZiAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhP
U1RDTURfQ01EX0RXRFNfRU5BQkxFKSkgew0KKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21k
X2xvY2spOw0KKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZCBleGVjdXRpb25cbiIpOw0K
KwkJcmV0dXJuIC1FSU87DQorCX0NCisNCisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xv
Y2spOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IG13bF9md2NtZF9zZXRfZndfZmx1c2hf
dGltZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSkNCit7DQorCXN0cnVjdCBt
d2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgaG9zdGNtZF9jbWRfZndfZmx1c2hf
dGltZXIgKnBjbWQ7DQorDQorCXBjbWQgPSAoc3RydWN0IGhvc3RjbWRfY21kX2Z3X2ZsdXNoX3Rp
bWVyICopJnByaXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21k
X2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwgMHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQt
PmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURfRldfRkxVU0hfVElNRVIpOw0K
KwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkpOw0KKwlwY21k
LT52YWx1ZSA9IGNwdV90b19sZTMyKHZhbHVlKTsNCisNCisJaWYgKG13bF9md2NtZF9leGVjX2Nt
ZChwcml2LCBIT1NUQ01EX0NNRF9GV19GTFVTSF9USU1FUikpIHsNCisJCXNwaW5fdW5sb2NrX2Jo
KCZwcml2LT5md2NtZF9sb2NrKTsNCisJCXdpcGh5X2Vycihody0+d2lwaHksICJmYWlsZWQgZXhl
Y3V0aW9uXG4iKTsNCisJCXJldHVybiAtRUlPOw0KKwl9DQorDQorCXNwaW5fdW5sb2NrX2JoKCZw
cml2LT5md2NtZF9sb2NrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtd2xfZndjbWRf
c2V0X2NkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykNCit7DQorCXN0cnVjdCBtd2xfcHJpdiAq
cHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgaG9zdGNtZF9jbWRfc2V0X2NkZCAqcGNtZDsNCisN
CisJcGNtZCA9IChzdHJ1Y3QgaG9zdGNtZF9jbWRfc2V0X2NkZCAqKSZwcml2LT5wY21kX2J1Zlsw
XTsNCisNCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJbWVtc2V0KHBj
bWQsIDB4MDAsIHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5jbWRfaGRyLmNtZCA9IGNwdV90b19s
ZTE2KEhPU1RDTURfQ01EX1NFVF9DREQpOw0KKwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19s
ZTE2KHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5lbmFibGUgPSBjcHVfdG9fbGUzMihwcml2LT5j
ZGQpOw0KKw0KKwlpZiAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01EX1NFVF9D
REQpKSB7DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorCQl3aXBoeV9l
cnIoaHctPndpcGh5LCAiZmFpbGVkIGV4ZWN1dGlvblxuIik7DQorCQlyZXR1cm4gLUVJTzsNCisJ
fQ0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCXJldHVybiAw
Ow0KK30NCisNCitpbnQgbXdsX2Z3Y21kX3NlbmRfbWZnX2NtZChzdHJ1Y3QgbXdsX3ByaXYgKnBy
aXYsIGNoYXIgKm1mZ2NtZCkNCit7DQorCXN0cnVjdCBob3N0Y21kX2hlYWRlciAqcGNtZDsNCisJ
c3RydWN0IGNtZF9oZWFkZXIgKmNtZF9oZCA9IChzdHJ1Y3QgY21kX2hlYWRlciAqKShtZmdjbWQg
KyA0KTsNCisJdTE2IGxlbjsNCisJdTE2IGNtZDsNCisNCisJcGNtZCA9IChzdHJ1Y3QgaG9zdGNt
ZF9oZWFkZXIgKikmcHJpdi0+cGNtZF9idWZbMF07DQorDQorCXNwaW5fbG9ja19iaCgmcHJpdi0+
ZndjbWRfbG9jayk7DQorDQorCWxlbiA9IGxlMTZfdG9fY3B1KGNtZF9oZC0+bGVuKTsNCisJbWVt
c2V0KHBjbWQsIDB4MDAsIGxlbiArIDQpOw0KKwltZW1jcHkoKGNoYXIgKilwY21kLCBtZmdjbWQs
IGxlbiArIDQpOw0KKwljbWQgPSBsZTE2X3RvX2NwdShjbWRfaGQtPmNvbW1hbmQpOw0KKwlpZiAo
bXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIGNtZCkpIHsNCisJCXNwaW5fdW5sb2NrX2JoKCZwcml2
LT5md2NtZF9sb2NrKTsNCisJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksICJmYWlsZWQgZXhl
Y3V0aW9uIik7DQorCQlyZXR1cm4gLUVJTzsNCisJfQ0KKwljbWRfaGQgPSAoc3RydWN0IGNtZF9o
ZWFkZXIgKikmcHJpdi0+cGNtZF9idWZbMl07DQorCWxlbiA9IGxlMTZfdG9fY3B1KGNtZF9oZC0+
bGVuKTsNCisJbWVtY3B5KG1mZ2NtZCwgKGNoYXIgKikmcHJpdi0+cGNtZF9idWZbMl0sIGxlbik7
DQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJcmV0dXJuIDA7DQor
fQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9md2Nt
ZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL2Z3Y21kLmgNCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi43MjZiMTY5DQotLS0gL2Rldi9udWxsDQor
KysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvZndjbWQuaA0KQEAgLTAs
MCArMSwxOTggQEANCisvKg0KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBNYXJ2ZWxsIElu
dGVybmF0aW9uYWwgTHRkLg0KKyAqDQorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUi
KSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwNCisgKiBMdGQuIHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBK
dW5lIDE5OTENCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRl
IGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluDQorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJt
cyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoDQorICogaXMg
YXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
Lg0KKyAqDQorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFO
VFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFDQorICogQVJFIEVY
UFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRh
aWxzIGFib3V0DQorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLg0KKyAqLw0KKw0KKy8qIERl
c2NyaXB0aW9uOiAgVGhpcyBmaWxlIGRlZmluZXMgZmlybXdhcmUgaG9zdCBjb21tYW5kIHJlbGF0
ZWQNCisgKiBmdW5jdGlvbnMuDQorICovDQorDQorI2lmbmRlZiBfZndjbWRfaF8NCisjZGVmaW5l
IF9md2NtZF9oXw0KKw0KKy8qICBEZWZpbmUgT3BNb2RlIGZvciBTb2Z0QVAvU3RhdGlvbiBtb2Rl
DQorICoNCisgKiAgVGhlIGZvbGxvd2luZyBtb2RlIHNpZ25hdHVyZSBoYXMgdG8gYmUgd3JpdHRl
biB0byBQQ0kgc2NyYXRjaCByZWdpc3RlciMwDQorICogIHJpZ2h0IGFmdGVyIHN1Y2Nlc3NmdWxs
eSBkb3dubG9hZGluZyB0aGUgbGFzdCBibG9jayBvZiBmaXJtd2FyZSBhbmQNCisgKiAgYmVmb3Jl
IHdhaXRpbmcgZm9yIGZpcm13YXJlIHJlYWR5IHNpZ25hdHVyZQ0KKyAqLw0KKw0KKyNkZWZpbmUg
SE9TVENNRF9TVEFfTU9ERSAgICAgICAgICAgICAgICAweDVBDQorI2RlZmluZSBIT1NUQ01EX1NP
RlRBUF9NT0RFICAgICAgICAgICAgIDB4QTUNCisNCisjZGVmaW5lIEhPU1RDTURfU1RBX0ZXUkRZ
X1NJR05BVFVSRSAgICAgMHhGMEYxRjJGNA0KKyNkZWZpbmUgSE9TVENNRF9TT0ZUQVBfRldSRFlf
U0lHTkFUVVJFICAweEYxRjJGNEE1DQorDQorI2RlZmluZSBHVUFSRF9JTlRFUlZBTF9TVEFOREFS
RCAgICAgICAgIDENCisjZGVmaW5lIEdVQVJEX0lOVEVSVkFMX1NIT1JUICAgICAgICAgICAgMg0K
KyNkZWZpbmUgR1VBUkRfSU5URVJWQUxfQVVUTyAgICAgICAgICAgICAzDQorDQorI2RlZmluZQlM
SU5LX0NTX1NUQVRFX0NPTlNFUlYgICAgICAgICAgIDANCisjZGVmaW5lCUxJTktfQ1NfU1RBVEVf
QUdHUiAgICAgICAgICAgICAgMQ0KKyNkZWZpbmUJTElOS19DU19TVEFURV9BVVRPICAgICAgICAg
ICAgICAyDQorI2RlZmluZQlMSU5LX0NTX1NUQVRFX0FVVE9fRElTQUJMRUQgICAgIDMNCisNCitl
bnVtIHsNCisJV0xfQU5URU5OQVRZUEVfUlggPSAxLA0KKwlXTF9BTlRFTk5BVFlQRV9UWCA9IDIs
DQorfTsNCisNCitlbnVtIGVuY3JfdHlwZSB7DQorCUVOQ1JfVFlQRV9XRVAgPSAwLA0KKwlFTkNS
X1RZUEVfRElTQUJMRSA9IDEsDQorCUVOQ1JfVFlQRV9US0lQID0gNCwNCisJRU5DUl9UWVBFX0FF
UyA9IDYsDQorCUVOQ1JfVFlQRV9NSVggPSA3LA0KK307DQorDQordm9pZCBtd2xfZndjbWRfcmVz
ZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOw0KKw0KK3ZvaWQgbXdsX2Z3Y21kX2ludF9lbmFi
bGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOw0KKw0KK3ZvaWQgbXdsX2Z3Y21kX2ludF9kaXNh
YmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsNCisNCitpbnQgbXdsX2Z3Y21kX2dldF9od19z
cGVjcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7DQorDQoraW50IG13bF9md2NtZF9zZXRfaHdf
c3BlY3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOw0KKw0KK2ludCBtd2xfZndjbWRfZ2V0X3N0
YXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9s
b3dfbGV2ZWxfc3RhdHMgKnN0YXRzKTsNCisNCitpbnQgbXdsX2Z3Y21kX3JhZGlvX2VuYWJsZShz
dHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7DQorDQoraW50IG13bF9md2NtZF9yYWRpb19kaXNhYmxl
KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsNCisNCitpbnQgbXdsX2Z3Y21kX3NldF9yYWRpb19w
cmVhbWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkJIGJvb2wgc2hvcnRfcHJlYW1i
bGUpOw0KKw0KK2ludCBtd2xfZndjbWRfZ2V0X2FkZHJfdmFsdWUoc3RydWN0IGllZWU4MDIxMV9o
dyAqaHcsIHUzMiBhZGRyLCB1MzIgbGVuLA0KKwkJCSAgICAgdTMyICp2YWwsIHUxNiBzZXQpOw0K
Kw0KK2ludCBtd2xfZndjbWRfbWF4X3R4X3Bvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0K
KwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiwgdTggZnJhY3Rpb24pOw0KKw0KK2lu
dCBtd2xfZndjbWRfdHhfcG93ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkgICAgICAg
c3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mLCB1OCBmcmFjdGlvbik7DQorDQoraW50IG13bF9m
d2NtZF9yZl9hbnRlbm5hKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgZGlyLCBpbnQgYW50
ZW5uYSk7DQorDQoraW50IG13bF9md2NtZF9icm9hZGNhc3Rfc3NpZF9lbmFibGUoc3RydWN0IGll
ZWU4MDIxMV9odyAqaHcsDQorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBib29s
IGVuYWJsZSk7DQorDQoraW50IG13bF9md2NtZF9zZXRfcmZfY2hhbm5lbChzdHJ1Y3QgaWVlZTgw
MjExX2h3ICpodywNCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZik7DQorDQor
aW50IG13bF9md2NtZF9zZXRfYWlkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJICAgICAg
c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgdTggKmJzc2lkLCB1MTYgYWlkKTsNCisNCitpbnQg
bXdsX2Z3Y21kX3NldF9pbmZyYV9tb2RlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCSAg
ICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7DQorDQoraW50IG13bF9md2NtZF9zZXRfcnRz
X3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkJaW50IHRocmVzaG9sZCk7
DQorDQoraW50IG13bF9md2NtZF9zZXRfZWRjYV9wYXJhbXMoc3RydWN0IGllZWU4MDIxMV9odyAq
aHcsIHU4IGluZGV4LA0KKwkJCSAgICAgIHUxNiBjd19taW4sIHUxNiBjd19tYXgsIHU4IGFpZnMs
IHUxNiB0eG9wKTsNCisNCitpbnQgbXdsX2Z3Y21kX3NldF93bW1fbW9kZShzdHJ1Y3QgaWVlZTgw
MjExX2h3ICpodywgYm9vbCBlbmFibGUpOw0KKw0KK2ludCBtd2xfZndjbWRfaHRfZ3VhcmRfaW50
ZXJ2YWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBnaV90eXBlKTsNCisNCitpbnQgbXds
X2Z3Y21kX3VzZV9maXhlZF9yYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCSAgICAg
aW50IG1jYXN0LCBpbnQgbWdtdCk7DQorDQoraW50IG13bF9md2NtZF9zZXRfbGlua2FkYXB0X2Nz
X21vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJCSAgICB1MTYgY3NfbW9kZSk7DQor
DQoraW50IG13bF9md2NtZF9zZXRfcmF0ZV9hZGFwdF9tb2RlKHN0cnVjdCBpZWVlODAyMTFfaHcg
Kmh3LA0KKwkJCQkgIHUxNiBtb2RlKTsNCisNCitpbnQgbXdsX2Z3Y21kX3NldF9tYWNfYWRkcl9j
bGllbnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJCSAgc3RydWN0IGllZWU4MDIxMV92
aWYgKnZpZiwgdTggKm1hY19hZGRyKTsNCisNCitpbnQgbXdsX2Z3Y21kX2dldF93YXRjaGRvZ19i
aXRtYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJCSAgdTggKmJpdG1hcCk7DQorDQor
aW50IG13bF9md2NtZF9yZW1vdmVfbWFjX2FkZHIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQor
CQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgdTggKm1hY19hZGRyKTsNCisNCitp
bnQgbXdsX2Z3Y21kX2Jzc19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQlzdHJ1
Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBib29sIGVuYWJsZSk7DQorDQoraW50IG13bF9md2NtZF9z
ZXRfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCSBzdHJ1Y3QgaWVlZTgwMjEx
X3ZpZiAqdmlmLCB1OCAqYmVhY29uLCBpbnQgbGVuKTsNCisNCitpbnQgbXdsX2Z3Y21kX3NldF9u
ZXdfc3RuX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkgICAgICBzdHJ1Y3QgaWVl
ZTgwMjExX3ZpZiAqdmlmLA0KKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpOw0K
Kw0KK2ludCBtd2xfZndjbWRfc2V0X25ld19zdG5fYWRkX3NlbGYoc3RydWN0IGllZWU4MDIxMV9o
dyAqaHcsDQorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOw0KKw0KK2ludCBtd2xf
ZndjbWRfc2V0X25ld19zdG5fZGVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCSAgICAg
IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICphZGRyKTsNCisNCitpbnQgbXdsX2Z3Y21k
X3NldF9hcG1vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFwbW9kZSk7DQorDQoraW50
IG13bF9md2NtZF91cGRhdGVfZW5jcnlwdGlvbl9lbmFibGUoc3RydWN0IGllZWU4MDIxMV9odyAq
aHcsDQorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCQkgICAgICAg
dTggKmFkZHIsIHU4IGVuY3JfdHlwZSk7DQorDQoraW50IG13bF9md2NtZF9lbmNyeXB0aW9uX3Nl
dF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3Zp
ZiAqdmlmLCB1OCAqYWRkciwNCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7
DQorDQoraW50IG13bF9md2NtZF9lbmNyeXB0aW9uX3JlbW92ZV9rZXkoc3RydWN0IGllZWU4MDIx
MV9odyAqaHcsDQorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCB1OCAqYWRkciwN
CisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7DQorDQoraW50IG13bF9m
d2NtZF9jaGVja19iYShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCSAgICAgICBzdHJ1Y3Qg
bXdsX2FtcGR1X3N0cmVhbSAqc3RyZWFtLA0KKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlm
ICp2aWYpOw0KKw0KK2ludCBtd2xfZndjbWRfY3JlYXRlX2JhKHN0cnVjdCBpZWVlODAyMTFfaHcg
Kmh3LA0KKwkJCXN0cnVjdCBtd2xfYW1wZHVfc3RyZWFtICpzdHJlYW0sDQorCQkJdTggYnVmX3Np
emUsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOw0KKw0KK2ludCBtd2xfZndjbWRfZGVzdHJv
eV9iYShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkgdTggaWR4KTsNCisNCitzdHJ1Y3Qg
bXdsX2FtcGR1X3N0cmVhbSAqbXdsX2Z3Y21kX2FkZF9zdHJlYW0oc3RydWN0IGllZWU4MDIxMV9o
dyAqaHcsDQorCQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLA0KKwkJCQkJICAg
ICAgdTggdGlkKTsNCisNCit2b2lkIG13bF9md2NtZF9kZWxfc3RhX3N0cmVhbXMoc3RydWN0IGll
ZWU4MDIxMV9odyAqaHcsDQorCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpOw0K
Kw0KK2ludCBtd2xfZndjbWRfc3RhcnRfc3RyZWFtKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0K
KwkJCSAgIHN0cnVjdCBtd2xfYW1wZHVfc3RyZWFtICpzdHJlYW0pOw0KKw0KK3ZvaWQgbXdsX2Z3
Y21kX3JlbW92ZV9zdHJlYW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJICAgICBzdHJ1
Y3QgbXdsX2FtcGR1X3N0cmVhbSAqc3RyZWFtKTsNCisNCitzdHJ1Y3QgbXdsX2FtcGR1X3N0cmVh
bSAqbXdsX2Z3Y21kX2xvb2t1cF9zdHJlYW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJ
CQkJIHU4ICphZGRyLCB1OCB0aWQpOw0KKw0KK2Jvb2wgbXdsX2Z3Y21kX2FtcGR1X2FsbG93ZWQo
c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggdGlkKTsNCisNCitpbnQgbXdsX2Z3Y21kX3Nl
dF9vcHRpbWl6YXRpb25fbGV2ZWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IG9wdF9sZXZl
bCk7DQorDQoraW50IG13bF9md2NtZF9zZXRfZHdkc19zdGFtb2RlKHN0cnVjdCBpZWVlODAyMTFf
aHcgKmh3LCBib29sIGVuYWJsZSk7DQorDQoraW50IG13bF9md2NtZF9zZXRfZndfZmx1c2hfdGlt
ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSk7DQorDQoraW50IG13bF9md2Nt
ZF9zZXRfY2RkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsNCisNCitpbnQgbXdsX2Z3Y21kX3Nl
bmRfbWZnX2NtZChzdHJ1Y3QgbXdsX3ByaXYgKnByaXYsIGNoYXIgKm1mZ2NtZCk7DQorDQorI2Vu
ZGlmIC8qIF9md2NtZF9oXyAqLw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21h
cnZlbGwvbXdsd2lmaS9md2RsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdp
ZmkvZndkbC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uZWM0NGFhNA0K
LS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZp
L2Z3ZGwuYw0KQEAgLTAsMCArMSwxOTkgQEANCisvKg0KKyAqIENvcHlyaWdodCAoQykgMjAwNi0y
MDE1LCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLg0KKyAqDQorICogVGhpcyBzb2Z0d2FyZSBm
aWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwN
CisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgVmVyc2lvbiAyLCBKdW5lIDE5OTENCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVz
ZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluDQorICogYWNjb3JkYW5j
ZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9m
IHdoaWNoDQorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLg0KKyAqDQorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMs
IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUNCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFDQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMg
YWRkaXRpb25hbCBkZXRhaWxzIGFib3V0DQorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLg0K
KyAqLw0KKw0KKy8qIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGltcGxlbWVudHMgZmlybXdhcmUg
ZG93bmxvYWQgcmVsYXRlZA0KKyAqIGZ1bmN0aW9ucy4NCisgKi8NCisNCisjaW5jbHVkZSA8bGlu
dXgvaW8uaD4NCisNCisjaW5jbHVkZSAic3lzYWRwdC5oIg0KKyNpbmNsdWRlICJkZXYuaCINCisj
aW5jbHVkZSAiZndjbWQuaCINCisjaWZkZWYgQ09ORklHX1NVUFBPUlRfTUZHDQorI2luY2x1ZGUg
Im1mZy5oIg0KKyNlbmRpZg0KKyNpbmNsdWRlICJmd2RsLmgiDQorDQorI2RlZmluZSBGV19ET1dO
TE9BRF9CTE9DS19TSVpFICAgICAgICAgIDI1Ng0KKyNkZWZpbmUgRldfQ0hFQ0tfTVNFQ1MgICAg
ICAgICAgICAgICAgICAzDQorDQorI2RlZmluZSBGV19NQVhfTlVNX0NIRUNLUyAgICAgICAgICAg
ICAgIDB4ZmZmZg0KKw0KK3N0YXRpYyB2b2lkIG13bF9md2RsX3RyaWdfcGNpY21kKHN0cnVjdCBt
d2xfcHJpdiAqcHJpdikNCit7DQorCXdyaXRlbChwcml2LT5wcGh5c19jbWRfYnVmLCBwcml2LT5p
b2Jhc2UxICsgTUFDUkVHX1JFR19HRU5fUFRSKTsNCisNCisJd3JpdGVsKDB4MDAsIHByaXYtPmlv
YmFzZTEgKyBNQUNSRUdfUkVHX0lOVF9DT0RFKTsNCisNCisJd3JpdGVsKE1BQ1JFR19IMkFSSUNf
QklUX0RPT1JfQkVMTCwNCisJICAgICAgIHByaXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVHX0gyQV9J
TlRFUlJVUFRfRVZFTlRTKTsNCit9DQorDQorc3RhdGljIHZvaWQgbXdsX2Z3ZGxfdHJpZ19wY2lj
bWRfYm9vdGNvZGUoc3RydWN0IG13bF9wcml2ICpwcml2KQ0KK3sNCisJd3JpdGVsKHByaXYtPnBw
aHlzX2NtZF9idWYsIHByaXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVHX0dFTl9QVFIpOw0KKw0KKwl3
cml0ZWwoMHgwMCwgcHJpdi0+aW9iYXNlMSArIE1BQ1JFR19SRUdfSU5UX0NPREUpOw0KKw0KKwl3
cml0ZWwoTUFDUkVHX0gyQVJJQ19CSVRfRE9PUl9CRUxMLA0KKwkgICAgICAgcHJpdi0+aW9iYXNl
MSArIE1BQ1JFR19SRUdfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOw0KK30NCisNCitpbnQgbXdsX2Z3
ZGxfZG93bmxvYWRfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpDQorew0KKwlzdHJ1
Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpm
dzsNCisJdTMyIGN1cnJfaXRlcmF0aW9uID0gMDsNCisJdTMyIHNpemVfZndfZG93bmxvYWRlZCA9
IDA7DQorCXUzMiBpbnRfY29kZSA9IDA7DQorCXUzMiBsZW4gPSAwOw0KKyNpZmRlZiBDT05GSUdf
U1VQUE9SVF9NRkcNCisJdTMyIGZ3cmVhZHlzaWduYXR1cmUgPSBwcml2LT5tZmdfbW9kZSA/DQor
CQlNRkdfRldfUkVBRFlfU0lHTkFUVVJFIDogSE9TVENNRF9TT0ZUQVBfRldSRFlfU0lHTkFUVVJF
Ow0KKyNlbHNlDQorCXUzMiBmd3JlYWR5c2lnbmF0dXJlID0gSE9TVENNRF9TT0ZUQVBfRldSRFlf
U0lHTkFUVVJFOw0KKyNlbmRpZg0KKw0KKwlmdyA9IHByaXYtPmZ3X3Vjb2RlOw0KKw0KKwltd2xf
ZndjbWRfcmVzZXQoaHcpOw0KKw0KKwkvKiBGVyBiZWZvcmUganVtcGluZyB0byBib290IHJvbSwg
aXQgd2lsbCBlbmFibGUgUENJZSB0cmFuc2FjdGlvbiByZXRyeSwNCisJICogd2FpdCBmb3IgYm9v
dCBjb2RlIHRvIHN0b3AgaXQuDQorCSAqLw0KKwltZGVsYXkoRldfQ0hFQ0tfTVNFQ1MpOw0KKw0K
Kwl3cml0ZWwoTUFDUkVHX0EySFJJQ19CSVRfTUFTSywNCisJICAgICAgIHByaXYtPmlvYmFzZTEg
KyBNQUNSRUdfUkVHX0EySF9JTlRFUlJVUFRfQ0xFQVJfU0VMKTsNCisJd3JpdGVsKDB4MDAsIHBy
aXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVHX0EySF9JTlRFUlJVUFRfQ0FVU0UpOw0KKwl3cml0ZWwo
MHgwMCwgcHJpdi0+aW9iYXNlMSArIE1BQ1JFR19SRUdfQTJIX0lOVEVSUlVQVF9NQVNLKTsNCisJ
d3JpdGVsKE1BQ1JFR19BMkhSSUNfQklUX01BU0ssDQorCSAgICAgICBwcml2LT5pb2Jhc2UxICsg
TUFDUkVHX1JFR19BMkhfSU5URVJSVVBUX1NUQVRVU19NQVNLKTsNCisNCisJLyogdGhpcyByb3V0
aW5lIGludGVyYWN0cyB3aXRoIFNDMiBib290cm9tIHRvIGRvd25sb2FkIGZpcm13YXJlIGJpbmFy
eQ0KKwkgKiB0byB0aGUgZGV2aWNlLiBBZnRlciBETUEnZCB0byBTQzIsIHRoZSBmaXJtd2FyZSBj
b3VsZCBiZSBkZWZsYXRlZCB0bw0KKwkgKiByZXNpZGUgb24gaXRzIHJlc3BlY3RpdmUgYmxvY2tz
IHN1Y2ggYXMgSVRDTSwgRFRDTSwgU1FSQU0sDQorCSAqIChvciBldmVuIEREUiwgQUZURVIgRERS
IGlzIGluaXQnZCBiZWZvcmUgZncgZG93bmxvYWQNCisJICovDQorCXdpcGh5X2luZm8oaHctPndp
cGh5LCAiZncgZG93bmxvYWQgc3RhcnQgODhcbiIpOw0KKw0KKwkvKiBEaXNhYmxlIFBGVSBiZWZv
cmUgRldETCAqLw0KKwl3cml0ZWwoMHgxMDAsIHByaXYtPmlvYmFzZTEgKyAweEUwRTQpOw0KKw0K
KwkvKiBtYWtlIHN1cmUgU0NSQVRDSDIgQzQwIGlzIGNsZWFyLCBpbiBjYXNlIHdlIGFyZSB0b28g
cXVpY2sgKi8NCisJd2hpbGUgKHJlYWRsKHByaXYtPmlvYmFzZTEgKyAweGM0MCkgPT0gMCkNCisJ
CTsNCisNCisJd2hpbGUgKHNpemVfZndfZG93bmxvYWRlZCA8IGZ3LT5zaXplKSB7DQorCQlsZW4g
PSByZWFkbChwcml2LT5pb2Jhc2UxICsgMHhjNDApOw0KKw0KKwkJaWYgKCFsZW4pDQorCQkJYnJl
YWs7DQorDQorCQkvKiB0aGlzIGNvcGllcyB0aGUgbmV4dCBjaHVuayBvZiBmdyBiaW5hcnkgdG8g
YmUgZGVsaXZlcmVkICovDQorCQltZW1jcHkoKGNoYXIgKikmcHJpdi0+cGNtZF9idWZbMF0sDQor
CQkgICAgICAgKGZ3LT5kYXRhICsgc2l6ZV9md19kb3dubG9hZGVkKSwgbGVuKTsNCisNCisJCS8q
IHRoaXMgZnVuY3Rpb24gd3JpdGVzIHBkYXRhIHRvIGMxMCwgdGhlbiB3cml0ZSAyIHRvIGMxOCAq
Lw0KKwkJbXdsX2Z3ZGxfdHJpZ19wY2ljbWRfYm9vdGNvZGUocHJpdik7DQorDQorCQkvKiB0aGlz
IGlzIGFyYml0cmFyeSBwZXIgeW91ciBwbGF0Zm9ybTsgd2UgdXNlIDB4ZmZmZiAqLw0KKwkJY3Vy
cl9pdGVyYXRpb24gPSBGV19NQVhfTlVNX0NIRUNLUzsNCisNCisJCS8qIE5PVEU6IHRoZSBmb2xs
b3dpbmcgYmFjayB0byBiYWNrIGNoZWNrcyBvbiBDMUMgaXMgdGltZQ0KKwkJICogc2Vuc2l0aXZl
LCBoZW5jZSBtYXkgbmVlZCB0byBiZSB0d2Vha2VkIGRlcGVuZGVudCBvbiBob3N0DQorCQkgKiBw
cm9jZXNzb3IuIFRpbWUgZm9yIFNDMiB0byBnbyBmcm9tIHRoZSB3cml0ZSBvZiBldmVudCAyIHRv
DQorCQkgKiBDMUMgPT0gMiBpcyB+MTMwMCBuU2VjLiBIZW5jZSB0aGUgY2hlY2tpbmdzIG9uIGhv
c3QgaGFzIHRvDQorCQkgKiBjb25zaWRlciBob3cgZWZmaWNpZW50IHlvdXIgY29kZSBjYW4gYmUg
dG8gbWVldCB0aGlzIHRpbWluZywNCisJCSAqIG9yIHlvdSBjYW4gYWx0ZXJuYXRpdmVseSB0d2Vh
ayB0aGlzIHJvdXRpbmVzIHRvIGZpdCB5b3VyDQorCQkgKiBwbGF0Zm9ybQ0KKwkJICovDQorCQlk
byB7DQorCQkJaW50X2NvZGUgPSByZWFkbChwcml2LT5pb2Jhc2UxICsgMHhjMWMpOw0KKwkJCWlm
IChpbnRfY29kZSAhPSAwKQ0KKwkJCQlicmVhazsNCisJCQljdXJyX2l0ZXJhdGlvbi0tOw0KKwkJ
fSB3aGlsZSAoY3Vycl9pdGVyYXRpb24pOw0KKw0KKwkJZG8gew0KKwkJCWludF9jb2RlID0gcmVh
ZGwocHJpdi0+aW9iYXNlMSArIDB4YzFjKTsNCisJCQlpZiAoKGludF9jb2RlICYgTUFDUkVHX0gy
QVJJQ19CSVRfRE9PUl9CRUxMKSAhPQ0KKwkJCSAgICBNQUNSRUdfSDJBUklDX0JJVF9ET09SX0JF
TEwpDQorCQkJCWJyZWFrOw0KKwkJCWN1cnJfaXRlcmF0aW9uLS07DQorCQl9IHdoaWxlIChjdXJy
X2l0ZXJhdGlvbik7DQorDQorCQlpZiAoY3Vycl9pdGVyYXRpb24gPT0gMCkgew0KKwkJCS8qIFRo
aXMgbGltaXRlZCBsb29wIGNoZWNrIGFsbG93cyB5b3UgdG8gZXhpdCBncmFjZWZ1bGx5DQorCQkJ
ICogd2l0aG91dCBsb2NraW5nIHVwIHlvdXIgZW50aXJlIHN5c3RlbSBqdXN0IGJlY2F1c2UgZncN
CisJCQkgKiBkb3dubG9hZCBmYWlsZWQNCisJCQkgKi8NCisJCQl3aXBoeV9lcnIoaHctPndpcGh5
LA0KKwkJCQkgICJFeGhhdXN0ZWQgY3Vycl9pdGVyYXRpb24gZm9yIGZ3IGRvd25sb2FkXG4iKTsN
CisJCQlnb3RvIGVycl9kb3dubG9hZDsNCisJCX0NCisNCisJCXNpemVfZndfZG93bmxvYWRlZCAr
PSBsZW47DQorCX0NCisNCisJd2lwaHlfaW5mbyhody0+d2lwaHksDQorCQkgICAiRndTaXplID0g
JWQgZG93bmxvYWRlZCBTaXplID0gJWQgY3Vycl9pdGVyYXRpb24gJWRcbiIsDQorCQkgICAoaW50
KWZ3LT5zaXplLCBzaXplX2Z3X2Rvd25sb2FkZWQsIGN1cnJfaXRlcmF0aW9uKTsNCisNCisJLyog
Tm93IGZpcndhcmUgaXMgZG93bmxvYWRlZCBzdWNjZXNzZnVsbHksIHNvIHRoaXMgcGFydCBpcyB0
byBjaGVjaw0KKwkgKiB3aGV0aGVyIGZ3IGNhbiBwcm9wZXJseSBleGVjdXRlIHRvIGFuIGV4dGVu
dCB0aGF0IHdyaXRlIGJhY2sNCisJICogc2lnbmF0dXJlIHRvIGluZGljYXRlIGl0cyByZWFkaW5l
c3MgdG8gdGhlIGhvc3QuIE5PVEU6IGlmIHlvdXINCisJICogZG93bmxvYWRlZCBmdyBjcmFzaGVz
LCB0aGlzIHNpZ25hdHVyZSBjaGVja2luZyB3aWxsIGZhaWwuIFRoaXMNCisJICogcGFydCBpcyBz
aW1pbGFyIGFzIFNDMQ0KKwkgKi8NCisJKigodTMyICopJnByaXYtPnBjbWRfYnVmWzFdKSA9IDA7
DQorCW13bF9md2RsX3RyaWdfcGNpY21kKHByaXYpOw0KKwljdXJyX2l0ZXJhdGlvbiA9IEZXX01B
WF9OVU1fQ0hFQ0tTOw0KKwlpZiAocHJpdi0+bWZnX21vZGUpDQorCQl3cml0ZWwoZndyZWFkeXNp
Z25hdHVyZSwgcHJpdi0+aW9iYXNlMSArIDB4Y2YwKTsNCisJZG8gew0KKwkJY3Vycl9pdGVyYXRp
b24tLTsNCisJCWlmICghcHJpdi0+bWZnX21vZGUpIHsNCisJCQl3cml0ZWwoSE9TVENNRF9TT0ZU
QVBfTU9ERSwNCisJCQkgICAgICAgcHJpdi0+aW9iYXNlMSArIE1BQ1JFR19SRUdfR0VOX1BUUik7
DQorCQkJbWRlbGF5KEZXX0NIRUNLX01TRUNTKTsNCisJCQlpbnRfY29kZSA9IHJlYWRsKHByaXYt
PmlvYmFzZTEgKyBNQUNSRUdfUkVHX0lOVF9DT0RFKTsNCisJCX0gZWxzZSB7DQorCQkJbWRlbGF5
KEZXX0NIRUNLX01TRUNTKTsNCisJCQlpbnRfY29kZSA9IHJlYWRsKHByaXYtPmlvYmFzZTEgKyAw
eGM0NCk7DQorCQl9DQorCQlpZiAoIShjdXJyX2l0ZXJhdGlvbiAlIDB4ZmYpKQ0KKwkJCXdpcGh5
X2Vycihody0+d2lwaHksICIleDsiLCBpbnRfY29kZSk7DQorCX0gd2hpbGUgKChjdXJyX2l0ZXJh
dGlvbikgJiYNCisJCSAoaW50X2NvZGUgIT0gZndyZWFkeXNpZ25hdHVyZSkpOw0KKw0KKwlpZiAo
Y3Vycl9pdGVyYXRpb24gPT0gMCkgew0KKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwNCisJCQkgICJF
eGhhdXN0ZWQgY3Vycl9pdGVyYXRpb24gZm9yIGZ3IHNpZ25hdHVyZVxuIik7DQorCQlnb3RvIGVy
cl9kb3dubG9hZDsNCisJfQ0KKw0KKwl3aXBoeV9pbmZvKGh3LT53aXBoeSwgImNvbXBsZXRlXG4i
KTsNCisJd3JpdGVsKDB4MDAsIHByaXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVHX0lOVF9DT0RFKTsN
CisNCisJcmV0dXJuIDA7DQorDQorZXJyX2Rvd25sb2FkOg0KKw0KKwltd2xfZndjbWRfcmVzZXQo
aHcpOw0KKw0KKwlyZXR1cm4gLUVJTzsNCit9DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ly
ZWxlc3MvbWFydmVsbC9td2x3aWZpL2Z3ZGwuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZl
bGwvbXdsd2lmaS9md2RsLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi5i
MTE3MTQyDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxs
L213bHdpZmkvZndkbC5oDQpAQCAtMCwwICsxLDI1IEBADQorLyoNCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYtMjAxNSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4NCisgKg0KKyAqIFRoaXMgc29m
dHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5h
dGlvbmFsDQorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxDQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91
IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbg0KKyAqIGFj
Y29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEg
Y29weSBvZiB3aGljaA0KKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisgKg0KKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVE
IEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFDQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQ0KKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHBy
b3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dA0KKyAqIHRoaXMgd2FycmFudHkgZGlzY2xh
aW1lci4NCisgKi8NCisNCisvKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBkZWZpbmVzIGZpcm13
YXJlIGRvd25sb2FkIHJlbGF0ZWQNCisgKiBmdW5jdGlvbnMuDQorICovDQorDQorI2lmbmRlZiBf
ZndkbF9oXw0KKyNkZWZpbmUgX2Z3ZGxfaF8NCisNCitpbnQgbXdsX2Z3ZGxfZG93bmxvYWRfZmly
bXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOw0KKw0KKyNlbmRpZiAvKiBfZndkbF9oXyAq
Lw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9ob3N0
Y21kLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvaG9zdGNtZC5oDQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uMWZkNGJkZg0KLS0tIC9kZXYvbnVs
bA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL2hvc3RjbWQuaA0K
QEAgLTAsMCArMSw3ODYgQEANCisvKg0KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBNYXJ2
ZWxsIEludGVybmF0aW9uYWwgTHRkLg0KKyAqDQorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUg
IkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwNCisgKiBMdGQu
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lv
biAyLCBKdW5lIDE5OTENCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0
cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluDQorICogYWNjb3JkYW5jZSB3aXRoIHRo
ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoDQor
ICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLg0KKyAqDQorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQg
V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFDQorICog
QVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25h
bCBkZXRhaWxzIGFib3V0DQorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLg0KKyAqLw0KKw0K
Ky8qIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGRlZmluZXMgZmlybXdhcmUgaG9zdCBjb21tYW5k
IHJlbGF0ZWQNCisgKiBzdHJ1Y3R1cmUuDQorICovDQorDQorI2lmbmRlZiBfaG9zdGNtZF9oXw0K
KyNkZWZpbmUgX2hvc3RjbWRfaF8NCisNCisvKiAxNiBiaXQgaG9zdCBjb21tYW5kIGNvZGUgKi8N
CisjZGVmaW5lIEhPU1RDTURfQ01EX0dFVF9IV19TUEVDICAgICAgICAgICAgICAgICAweDAwMDMN
CisjZGVmaW5lIEhPU1RDTURfQ01EX1NFVF9IV19TUEVDICAgICAgICAgICAgICAgICAweDAwMDQN
CisjZGVmaW5lIEhPU1RDTURfQ01EXzgwMl8xMV9HRVRfU1RBVCAgICAgICAgICAgICAweDAwMTQN
CisjZGVmaW5lIEhPU1RDTURfQ01EXzgwMl8xMV9SQURJT19DT05UUk9MICAgICAgICAweDAwMWMN
CisjZGVmaW5lIEhPU1RDTURfQ01EX01FTV9BRERSX0FDQ0VTUyAgICAgICAgICAgICAweDAwMWQN
CisjZGVmaW5lIEhPU1RDTURfQ01EXzgwMl8xMV9UWF9QT1dFUiAgICAgICAgICAgICAweDAwMWYN
CisjZGVmaW5lIEhPU1RDTURfQ01EXzgwMl8xMV9SRl9BTlRFTk5BICAgICAgICAgICAweDAwMjAN
CisjZGVmaW5lIEhPU1RDTURfQ01EX0JST0FEQ0FTVF9TU0lEX0VOQUJMRSAgICAgICAweDAwNTAg
LyogcGVyLXZpZiAqLw0KKyNkZWZpbmUgSE9TVENNRF9DTURfU0VUX1JGX0NIQU5ORUwgICAgICAg
ICAgICAgIDB4MDEwYQ0KKyNkZWZpbmUgSE9TVENNRF9DTURfU0VUX0FJRCAgICAgICAgICAgICAg
ICAgICAgIDB4MDEwZCAvKiBwZXItdmlmICovDQorI2RlZmluZSBIT1NUQ01EX0NNRF9TRVRfSU5G
UkFfTU9ERSAgICAgICAgICAgICAgMHgwMTBlIC8qIHBlci12aWYgKi8NCisjZGVmaW5lIEhPU1RD
TURfQ01EXzgwMl8xMV9SVFNfVEhTRCAgICAgICAgICAgICAweDAxMTMNCisjZGVmaW5lIEhPU1RD
TURfQ01EX1NFVF9FRENBX1BBUkFNUyAgICAgICAgICAgICAweDAxMTUNCisjZGVmaW5lIEhPU1RD
TURfQ01EX1NFVF9XTU1fTU9ERSAgICAgICAgICAgICAgICAweDAxMjMNCisjZGVmaW5lIEhPU1RD
TURfQ01EX0hUX0dVQVJEX0lOVEVSVkFMICAgICAgICAgICAweDAxMjQNCisjZGVmaW5lIEhPU1RD
TURfQ01EX1NFVF9GSVhFRF9SQVRFICAgICAgICAgICAgICAweDAxMjYNCisjZGVmaW5lIEhPU1RD
TURfQ01EX1NFVF9JRVMgICAgICAgICAgICAgICAgICAgICAweDAxMjcNCisjZGVmaW5lIEhPU1RD
TURfQ01EX1NFVF9MSU5LQURBUFRfQ1NfTU9ERSAgICAgICAweDAxMjkNCisjZGVmaW5lIEhPU1RD
TURfQ01EX1NFVF9NQUNfQUREUiAgICAgICAgICAgICAgICAweDAyMDIgLyogcGVyLXZpZiAqLw0K
KyNkZWZpbmUgSE9TVENNRF9DTURfU0VUX1JBVEVfQURBUFRfTU9ERSAgICAgICAgIDB4MDIwMw0K
KyNkZWZpbmUgSE9TVENNRF9DTURfR0VUX1dBVENIRE9HX0JJVE1BUCAgICAgICAgIDB4MDIwNQ0K
KyNkZWZpbmUgSE9TVENNRF9DTURfREVMX01BQ19BRERSICAgICAgICAgICAgICAgIDB4MDIwNiAv
KiBwZXItdmlmICovDQorI2RlZmluZSBIT1NUQ01EX0NNRF9CU1NfU1RBUlQgICAgICAgICAgICAg
ICAgICAgMHgxMTAwIC8qIHBlci12aWYgKi8NCisjZGVmaW5lIEhPU1RDTURfQ01EX0FQX0JFQUNP
TiAgICAgICAgICAgICAgICAgICAweDExMDEgLyogcGVyLXZpZiAqLw0KKyNkZWZpbmUgSE9TVENN
RF9DTURfU0VUX05FV19TVE4gICAgICAgICAgICAgICAgIDB4MTExMSAvKiBwZXItdmlmICovDQor
I2RlZmluZSBIT1NUQ01EX0NNRF9TRVRfQVBNT0RFICAgICAgICAgICAgICAgICAgMHgxMTE0DQor
I2RlZmluZSBIT1NUQ01EX0NNRF9VUERBVEVfRU5DUllQVElPTiAgICAgICAgICAgMHgxMTIyIC8q
IHBlci12aWYgKi8NCisjZGVmaW5lIEhPU1RDTURfQ01EX0JBU1RSRUFNICAgICAgICAgICAgICAg
ICAgICAweDExMjUNCisjZGVmaW5lIEhPU1RDTURfQ01EX1NFVF9PUFRJTUlaQVRJT05fTEVWRUwg
ICAgICAweDExMzMNCisjZGVmaW5lIEhPU1RDTURfQ01EX0RXRFNfRU5BQkxFICAgICAgICAgICAg
ICAgICAweDExNDQNCisjZGVmaW5lIEhPU1RDTURfQ01EX0ZXX0ZMVVNIX1RJTUVSICAgICAgICAg
ICAgICAweDExNDgNCisjZGVmaW5lIEhPU1RDTURfQ01EX1NFVF9DREQgICAgICAgICAgICAgICAg
ICAgICAweDExNTANCisNCisvKiBEZWZpbmUgZ2VuZXJhbCByZXN1bHQgY29kZSBmb3IgZWFjaCBj
b21tYW5kICovDQorI2RlZmluZSBIT1NUQ01EX1JFU1VMVF9PSyAgICAgICAgICAgICAgICAgICAg
ICAgMHgwMDAwDQorLyogR2VuZXJhbCBlcnJvciAqLw0KKyNkZWZpbmUgSE9TVENNRF9SRVNVTFRf
RVJST1IgICAgICAgICAgICAgICAgICAgIDB4MDAwMQ0KKy8qIENvbW1hbmQgaXMgbm90IHZhbGlk
ICovDQorI2RlZmluZSBIT1NUQ01EX1JFU1VMVF9OT1RfU1VQUE9SVCAgICAgICAgICAgICAgMHgw
MDAyDQorLyogQ29tbWFuZCBpcyBwZW5kaW5nICh3aWxsIGJlIHByb2Nlc3NlZCkgKi8NCisjZGVm
aW5lIEhPU1RDTURfUkVTVUxUX1BFTkRJTkcgICAgICAgICAgICAgICAgICAweDAwMDMNCisvKiBT
eXN0ZW0gaXMgYnVzeSAoY29tbWFuZCBpZ25vcmVkKSAqLw0KKyNkZWZpbmUgSE9TVENNRF9SRVNV
TFRfQlVTWSAgICAgICAgICAgICAgICAgICAgIDB4MDAwNA0KKy8qIERhdGEgYnVmZmVyIGlzIG5v
dCBiaWcgZW5vdWdoICovDQorI2RlZmluZSBIT1NUQ01EX1JFU1VMVF9QQVJUSUFMX0RBVEEgICAg
ICAgICAgICAgMHgwMDA1DQorDQorLyogRGVmaW5lIGNoYW5uZWwgcmVsYXRlZCBjb25zdGFudHMg
Ki8NCisjZGVmaW5lIEZSRVFfQkFORF8yRE9UNEdIWiAgICAgICAgICAgICAgICAgICAgICAweDEN
CisjZGVmaW5lIEZSRVFfQkFORF80RE9UOUdIWiAgICAgICAgICAgICAgICAgICAgICAweDINCisj
ZGVmaW5lIEZSRVFfQkFORF81R0haICAgICAgICAgICAgICAgICAgICAgICAgICAweDQNCisjZGVm
aW5lIEZSRVFfQkFORF81RE9UMkdIWiAgICAgICAgICAgICAgICAgICAgICAweDgNCisjZGVmaW5l
IENIX0FVVE9fV0lEVEgJICAgICAgICAgICAgICAgICAgICAgICAgMA0KKyNkZWZpbmUgQ0hfMTBf
TUhaX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDB4MQ0KKyNkZWZpbmUgQ0hfMjBfTUha
X1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mg0KKyNkZWZpbmUgQ0hfNDBfTUhaX1dJ
RFRIICAgICAgICAgICAgICAgICAgICAgICAgIDB4NA0KKyNkZWZpbmUgQ0hfODBfTUhaX1dJRFRI
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4NQ0KKyNkZWZpbmUgRVhUX0NIX0FCT1ZFX0NUUkxf
Q0ggICAgICAgICAgICAgICAgICAgIDB4MQ0KKyNkZWZpbmUgRVhUX0NIX0FVVE8gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4Mg0KKyNkZWZpbmUgRVhUX0NIX0JFTE9XX0NUUkxfQ0ggICAg
ICAgICAgICAgICAgICAgIDB4Mw0KKyNkZWZpbmUgTk9fRVhUX0NIQU5ORUwgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MA0KKw0KKyNkZWZpbmUgQUNUX1BSSU1BUllfQ0hBTl8wICAgICAgICAg
ICAgICAgICAgICAgIDANCisjZGVmaW5lIEFDVF9QUklNQVJZX0NIQU5fMSAgICAgICAgICAgICAg
ICAgICAgICAxDQorI2RlZmluZSBBQ1RfUFJJTUFSWV9DSEFOXzIgICAgICAgICAgICAgICAgICAg
ICAgMg0KKyNkZWZpbmUgQUNUX1BSSU1BUllfQ0hBTl8zICAgICAgICAgICAgICAgICAgICAgIDMN
CisNCisvKiBEZWZpbmUgcmF0ZSByZWxhdGVkIGNvbnN0YW50cyAqLw0KKyNkZWZpbmUgSE9TVENN
RF9BQ1RfTk9UX1VTRV9GSVhFRF9SQVRFICAgICAgICAgIDB4MDAwMg0KKw0KKy8qIERlZmluZSBz
dGF0aW9uIHJlbGF0ZWQgY29uc3RhbnRzICovDQorI2RlZmluZSBIT1NUQ01EX0FDVF9TVEFfQUNU
SU9OX0FERCAgICAgICAgICAgICAgMA0KKyNkZWZpbmUgSE9TVENNRF9BQ1RfU1RBX0FDVElPTl9S
RU1PVkUgICAgICAgICAgIDINCisNCisvKiBEZWZpbmUga2V5IHJlbGF0ZWQgY29uc3RhbnRzICov
DQorI2RlZmluZSBNQVhfRU5DUl9LRVlfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgMTYNCisj
ZGVmaW5lIE1JQ19LRVlfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgICAgICA4DQorDQorI2Rl
ZmluZSBLRVlfVFlQRV9JRF9XRVAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMA0KKyNkZWZp
bmUgS0VZX1RZUEVfSURfVEtJUCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDENCisjZGVmaW5l
IEtFWV9UWVBFX0lEX0FFUwkgICAgICAgICAgICAgICAgICAgICAgICAweDAyDQorDQorI2RlZmlu
ZSBFTkNSX0tFWV9GTEFHX1RYR1JPVVBLRVkgICAgICAgICAgICAgICAgMHgwMDAwMDAwNA0KKyNk
ZWZpbmUgRU5DUl9LRVlfRkxBR19QQUlSV0lTRSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgN
CisjZGVmaW5lIEVOQ1JfS0VZX0ZMQUdfVFNDX1ZBTElEICAgICAgICAgICAgICAgICAweDAwMDAw
MDQwDQorI2RlZmluZSBFTkNSX0tFWV9GTEFHX1dFUF9UWEtFWSAgICAgICAgICAgICAgICAgMHgw
MTAwMDAwMA0KKyNkZWZpbmUgRU5DUl9LRVlfRkxBR19NSUNLRVlfVkFMSUQgICAgICAgICAgICAg
IDB4MDIwMDAwMDANCisNCisvKiBEZWZpbmUgYmxvY2sgYWNrIHJlbGF0ZWQgY29uc3RhbnRzICov
DQorI2RlZmluZSBCQVNUUkVBTV9GTEFHX0lNTUVESUFURV9UWVBFICAgICAgICAgICAgMQ0KKyNk
ZWZpbmUgQkFTVFJFQU1fRkxBR19ESVJFQ1RJT05fVVBTVFJFQU0gICAgICAgIDANCisNCisvKiBE
ZWZpbmUgZ2VuZXJhbCBwdXJwb3NlIGFjdGlvbiAqLw0KKyNkZWZpbmUgSE9TVENNRF9BQ1RfR0VO
X1NFVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQ0KKyNkZWZpbmUgSE9TVENNRF9BQ1RfR0VO
X1NFVF9MSVNUICAgICAgICAgICAgICAgIDB4MDAwMg0KKyNkZWZpbmUgSE9TVENNRF9BQ1RfR0VO
X0dFVF9MSVNUICAgICAgICAgICAgICAgIDB4MDAwMw0KKw0KKy8qIE1pc2MgKi8NCisjZGVmaW5l
IE1BWF9FTkNSX0tFWV9MRU5HVEggICAgICAgICAgICAgICAgICAgICAxNg0KKyNkZWZpbmUgTUlD
X0tFWV9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgIDgNCisNCitlbnVtIHsNCisJV0xf
RElTQUJMRSA9IDAsDQorCVdMX0VOQUJMRSA9IDEsDQorCVdMX0RJU0FCTEVfVk1BQyA9IDB4ODAs
DQorfTsNCisNCitlbnVtIHsNCisJV0xfR0VUID0gMCwNCisJV0xfU0VUID0gMSwNCisJV0xfUkVT
RVQgPSAyLA0KK307DQorDQorZW51bSB7DQorCVdMX0xPTkdfUFJFQU1CTEUgPSAxLA0KKwlXTF9T
SE9SVF9QUkVBTUJMRSA9IDMsDQorCVdMX0FVVE9fUFJFQU1CTEUgPSA1LA0KK307DQorDQorZW51
bSBlbmNyX2FjdGlvbl90eXBlIHsNCisJLyogcmVxdWVzdCB0byBlbmFibGUvZGlzYWJsZSBIVyBl
bmNyeXB0aW9uICovDQorCUVOQ1JfQUNUSU9OX0VOQUJMRV9IV19FTkNSLA0KKwkvKiByZXF1ZXN0
IHRvIHNldCBlbmNyeXB0aW9uIGtleSAqLw0KKwlFTkNSX0FDVElPTl9UWVBFX1NFVF9LRVksDQor
CS8qIHJlcXVlc3QgdG8gcmVtb3ZlIG9uZSBvciBtb3JlIGtleXMgKi8NCisJRU5DUl9BQ1RJT05f
VFlQRV9SRU1PVkVfS0VZLA0KKwlFTkNSX0FDVElPTl9UWVBFX1NFVF9HUk9VUF9LRVksDQorfTsN
CisNCitlbnVtIGJhX2FjdGlvbl90eXBlIHsNCisJQkFfQ1JFQVRFX1NUUkVBTSwNCisJQkFfVVBE
QVRFX1NUUkVBTSwNCisJQkFfREVTVFJPWV9TVFJFQU0sDQorCUJBX0ZMVVNIX1NUUkVBTSwNCisJ
QkFfQ0hFQ0tfU1RSRUFNLA0KK307DQorDQorZW51bSBtYWNfdHlwZSB7DQorCVdMX01BQ19UWVBF
X1BSSU1BUllfQ0xJRU5ULA0KKwlXTF9NQUNfVFlQRV9TRUNPTkRBUllfQ0xJRU5ULA0KKwlXTF9N
QUNfVFlQRV9QUklNQVJZX0FQLA0KKwlXTF9NQUNfVFlQRV9TRUNPTkRBUllfQVAsDQorfTsNCisN
CisvKiBHZW5lcmFsIGhvc3QgY29tbWFuZCBoZWFkZXIgKi8NCitzdHJ1Y3QgaG9zdGNtZF9oZWFk
ZXIgew0KKwlfX2xlMTYgY21kOw0KKwlfX2xlMTYgbGVuOw0KKwl1OCBzZXFfbnVtOw0KKwl1OCBt
YWNpZDsNCisJX19sZTE2IHJlc3VsdDsNCit9IF9fcGFja2VkOw0KKw0KKy8qIEhPU1RDTURfQ01E
X0dFVF9IV19TUEVDICovDQorc3RydWN0IGhvc3RjbWRfY21kX2dldF9od19zcGVjIHsNCisJc3Ry
dWN0IGhvc3RjbWRfaGVhZGVyIGNtZF9oZHI7DQorCXU4IHZlcnNpb247ICAgICAgICAgICAgICAg
ICAgLyogdmVyc2lvbiBvZiB0aGUgSFcgICAgICAgICAgICAgICAgICAgICovDQorCXU4IGhvc3Rf
aWY7ICAgICAgICAgICAgICAgICAgLyogaG9zdCBpbnRlcmZhY2UgICAgICAgICAgICAgICAgICAg
ICAgICovDQorCV9fbGUxNiBudW1fd2NiOyAgICAgICAgICAgICAgLyogTWF4LiBudW1iZXIgb2Yg
V0NCIEZXIGNhbiBoYW5kbGUgICAgICovDQorCV9fbGUxNiBudW1fbWNhc3RfYWRkcjsgICAgICAg
LyogTWF4TmJyIG9mIE1DIGFkZHJlc3NlcyBGVyBjYW4gaGFuZGxlICovDQorCXU4IHBlcm1hbmVu
dF9hZGRyW0VUSF9BTEVOXTsgLyogTUFDIGFkZHJlc3MgcHJvZ3JhbW1lZCBpbiBIVyAgICAgICAg
ICovDQorCV9fbGUxNiByZWdpb25fY29kZTsNCisJX19sZTE2IG51bV9hbnRlbm5hOyAgICAgICAg
ICAvKiBOdW1iZXIgb2YgYW50ZW5uYSB1c2VkICAgICAgKi8NCisJX19sZTMyIGZ3X3JlbGVhc2Vf
bnVtOyAgICAgICAvKiA0IGJ5dGUgb2YgRlcgcmVsZWFzZSBudW1iZXIgKi8NCisJX19sZTMyIHdj
Yl9iYXNlMDsNCisJX19sZTMyIHJ4cGRfd3JfcHRyOw0KKwlfX2xlMzIgcnhwZF9yZF9wdHI7DQor
CV9fbGUzMiBmd19hd2FrZV9jb29raWU7DQorCV9fbGUzMiB3Y2JfYmFzZVtTWVNBRFBUX1RPVEFM
X1RYX1FVRVVFUyAtIDFdOw0KK30gX19wYWNrZWQ7DQorDQorLyogSE9TVENNRF9DTURfU0VUX0hX
X1NQRUMgKi8NCitzdHJ1Y3QgaG9zdGNtZF9jbWRfc2V0X2h3X3NwZWMgew0KKwlzdHJ1Y3QgaG9z
dGNtZF9oZWFkZXIgY21kX2hkcjsNCisJLyogSFcgcmV2aXNpb24gKi8NCisJdTggdmVyc2lvbjsN
CisJLyogSG9zdCBpbnRlcmZhY2UgKi8NCisJdTggaG9zdF9pZjsNCisJLyogTWF4LiBudW1iZXIg
b2YgTXVsdGljYXN0IGFkZHJlc3MgRlcgY2FuIGhhbmRsZSAqLw0KKwlfX2xlMTYgbnVtX21jYXN0
X2FkZHI7DQorCS8qIE1BQyBhZGRyZXNzICovDQorCXU4IHBlcm1hbmVudF9hZGRyW0VUSF9BTEVO
XTsNCisJLyogUmVnaW9uIENvZGUgKi8NCisJX19sZTE2IHJlZ2lvbl9jb2RlOw0KKwkvKiA0IGJ5
dGUgb2YgRlcgcmVsZWFzZSBudW1iZXIsIGV4YW1wbGUgMHgxMjM0PTEuMi4zLjQgKi8NCisJX19s
ZTMyIGZ3X3JlbGVhc2VfbnVtOw0KKwkvKiBGaXJtd2FyZSBhd2FrZSBjb29raWUgLSB1c2VkIHRv
IGVuc3VyZSB0aGF0IHRoZSBkZXZpY2UNCisJICogaXMgbm90IGluIHNsZWVwIG1vZGUNCisJICov
DQorCV9fbGUzMiBmd19hd2FrZV9jb29raWU7DQorCS8qIERldmljZSBjYXBhYmlsaXRpZXMgKHNl
ZSBhYm92ZSkgKi8NCisJX19sZTMyIGRldmljZV9jYXBzOw0KKwkvKiBSeCBzaGFyZWQgbWVtb3J5
IHF1ZXVlICovDQorCV9fbGUzMiByeHBkX3dyX3B0cjsNCisJLyogQWN0dWFsIG51bWJlciBvZiBU
WCBxdWV1ZXMgaW4gV2NiQmFzZSBhcnJheSAqLw0KKwlfX2xlMzIgbnVtX3R4X3F1ZXVlczsNCisJ
LyogVFggV0NCIFJpbmdzICovDQorCV9fbGUzMiB3Y2JfYmFzZVtTWVNBRFBUX05VTV9PRl9ERVND
X0RBVEFdOw0KKwkvKiBNYXggQU1TRFUgc2l6ZSAoMDAgLSBBTVNEVSBEaXNhYmxlZCwNCisJICog
MDEgLSA0SywgMTAgLSA4SywgMTEgLSBub3QgZGVmaW5lZCkNCisJICovDQorCV9fbGUzMiBmZWF0
dXJlczsNCisJX19sZTMyIHR4X3djYl9udW1fcGVyX3F1ZXVlOw0KKwlfX2xlMzIgdG90YWxfcnhf
d2NiOw0KK30gX19wYWNrZWQ7DQorDQorLyogSE9TVENNRF9DTURfODAyXzExX0dFVF9TVEFUICov
DQorc3RydWN0IGhvc3RjbWRfY21kXzgwMl8xMV9nZXRfc3RhdCB7DQorCXN0cnVjdCBob3N0Y21k
X2hlYWRlciBjbWRfaGRyOw0KKwlfX2xlMzIgdHhfcmV0cnlfc3VjY2Vzc2VzOw0KKwlfX2xlMzIg
dHhfbXVsdGlwbGVfcmV0cnlfc3VjY2Vzc2VzOw0KKwlfX2xlMzIgdHhfZmFpbHVyZXM7DQorCV9f
bGUzMiBydHNfc3VjY2Vzc2VzOw0KKwlfX2xlMzIgcnRzX2ZhaWx1cmVzOw0KKwlfX2xlMzIgYWNr
X2ZhaWx1cmVzOw0KKwlfX2xlMzIgcnhfZHVwbGljYXRlX2ZyYW1lczsNCisJX19sZTMyIHJ4X2Zj
c19lcnJvcnM7DQorCV9fbGUzMiB0eF93YXRjaGRvZ190aW1lb3V0czsNCisJX19sZTMyIHJ4X292
ZXJmbG93czsNCisJX19sZTMyIHJ4X2ZyYWdfZXJyb3JzOw0KKwlfX2xlMzIgcnhfbWVtX2Vycm9y
czsNCisJX19sZTMyIHBvaW50ZXJfZXJyb3JzOw0KKwlfX2xlMzIgdHhfdW5kZXJmbG93czsNCisJ
X19sZTMyIHR4X2RvbmU7DQorCV9fbGUzMiB0eF9kb25lX2J1Zl90cnlfcHV0Ow0KKwlfX2xlMzIg
dHhfZG9uZV9idWZfcHV0Ow0KKwkvKiBQdXQgc2l6ZSBvZiByZXF1ZXN0ZWQgYnVmZmVyIGluIGhl
cmUgKi8NCisJX19sZTMyIHdhaXRfZm9yX3R4X2J1ZjsNCisJX19sZTMyIHR4X2F0dGVtcHRzOw0K
KwlfX2xlMzIgdHhfc3VjY2Vzc2VzOw0KKwlfX2xlMzIgdHhfZnJhZ21lbnRzOw0KKwlfX2xlMzIg
dHhfbXVsdGljYXN0czsNCisJX19sZTMyIHJ4X25vbl9jdGxfcGt0czsNCisJX19sZTMyIHJ4X211
bHRpY2FzdHM7DQorCV9fbGUzMiByeF91bmRlY3J5cHRhYmxlX2ZyYW1lczsNCisJX19sZTMyIHJ4
X2ljdl9lcnJvcnM7DQorCV9fbGUzMiByeF9leGNsdWRlZF9mcmFtZXM7DQorCV9fbGUzMiByeF93
ZWFrX2l2X2NvdW50Ow0KKwlfX2xlMzIgcnhfdW5pY2FzdHM7DQorCV9fbGUzMiByeF9ieXRlczsN
CisJX19sZTMyIHJ4X2Vycm9yczsNCisJX19sZTMyIHJ4X3J0c19jb3VudDsNCisJX19sZTMyIHR4
X2N0c19jb3VudDsNCit9IF9fcGFja2VkOw0KKw0KKy8qIEhPU1RDTURfQ01EXzgwMl8xMV9SQURJ
T19DT05UUk9MICovDQorc3RydWN0IGhvc3RjbWRfY21kXzgwMl8xMV9yYWRpb19jb250cm9sIHsN
CisJc3RydWN0IGhvc3RjbWRfaGVhZGVyIGNtZF9oZHI7DQorCV9fbGUxNiBhY3Rpb247DQorCS8q
IEBiaXQwOiAxLzAsb24vb2ZmLCBAYml0MTogMS8wLCBsb25nL3Nob3J0IEBiaXQyOiAxLzAsYXV0
by9maXggKi8NCisJX19sZTE2IGNvbnRyb2w7DQorCV9fbGUxNiByYWRpb19vbjsNCit9IF9fcGFj
a2VkOw0KKw0KKy8qIEhPU1RDTURfQ01EX01FTV9BRERSX0FDQ0VTUyAqLw0KK3N0cnVjdCBob3N0
Y21kX2NtZF9tZW1fYWRkcl9hY2Nlc3Mgew0KKwlzdHJ1Y3QgaG9zdGNtZF9oZWFkZXIgY21kX2hk
cjsNCisJX19sZTMyIGFkZHJlc3M7DQorCV9fbGUxNiBsZW5ndGg7DQorCV9fbGUxNiByZXNlcnZl
ZDsNCisJX19sZTMyIHZhbHVlWzY0XTsNCit9IF9fcGFja2VkOw0KKw0KKy8qIEhPU1RDTURfQ01E
XzgwMl8xMV9UWF9QT1dFUiAqLw0KK3N0cnVjdCBob3N0Y21kX2NtZF84MDJfMTFfdHhfcG93ZXIg
ew0KKwlzdHJ1Y3QgaG9zdGNtZF9oZWFkZXIgY21kX2hkcjsNCisJX19sZTE2IGFjdGlvbjsNCisJ
X19sZTE2IGJhbmQ7DQorCV9fbGUxNiBjaDsNCisJX19sZTE2IGJ3Ow0KKwlfX2xlMTYgc3ViX2No
Ow0KKwlfX2xlMTYgcG93ZXJfbGV2ZWxfbGlzdFtTWVNBRFBUX1RYX1BPV0VSX0xFVkVMX1RPVEFM
XTsNCit9IF9fcGFja2VkOw0KKw0KKy8qIEhPU1RDTURfQ01EXzgwMl8xMV9SRl9BTlRFTk5BICov
DQorc3RydWN0IGhvc3RjbWRfY21kXzgwMl8xMV9yZl9hbnRlbm5hIHsNCisJc3RydWN0IGhvc3Rj
bWRfaGVhZGVyIGNtZF9oZHI7DQorCV9fbGUxNiBhY3Rpb247DQorCV9fbGUxNiBhbnRlbm5hX21v
ZGU7ICAgICAvKiBOdW1iZXIgb2YgYW50ZW5uYXMgb3IgMHhmZmZmKGRpdmVyc2l0eSkgKi8NCit9
IF9fcGFja2VkOw0KKw0KKy8qIEhPU1RDTURfQ01EX0JST0FEQ0FTVF9TU0lEX0VOQUJMRSAqLw0K
K3N0cnVjdCBob3N0Y21kX2NtZF9icm9hZGNhc3Rfc3NpZF9lbmFibGUgew0KKwlzdHJ1Y3QgaG9z
dGNtZF9oZWFkZXIgY21kX2hkcjsNCisJX19sZTMyIGVuYWJsZTsNCit9IF9fcGFja2VkOw0KKw0K
Ky8qIEhPU1RDTURfQ01EX1NFVF9SRl9DSEFOTkVMICovDQorI2RlZmluZSBGUkVRX0JBTkRfTUFT
SyAgICAgMHgwMDAwMDAzZg0KKyNkZWZpbmUgQ0hOTF9XSURUSF9NQVNLICAgIDB4MDAwMDA3YzAN
CisjZGVmaW5lIENITkxfV0lEVEhfU0hJRlQgICA2DQorI2RlZmluZSBBQ1RfUFJJTUFSWV9NQVNL
ICAgMHgwMDAwMzgwMA0KKyNkZWZpbmUgQUNUX1BSSU1BUllfU0hJRlQgIDExDQorDQorc3RydWN0
IGhvc3RjbWRfY21kX3NldF9yZl9jaGFubmVsIHsNCisJc3RydWN0IGhvc3RjbWRfaGVhZGVyIGNt
ZF9oZHI7DQorCV9fbGUxNiBhY3Rpb247DQorCXU4IGN1cnJfY2hubDsNCisJX19sZTMyIGNobmxf
ZmxhZ3M7DQorfSBfX3BhY2tlZDsNCisNCisvKiBIT1NUQ01EX0NNRF9TRVRfQUlEICovDQorc3Ry
dWN0IGhvc3RjbWRfY21kX3NldF9haWQgew0KKwlzdHJ1Y3QgaG9zdGNtZF9oZWFkZXIgY21kX2hk
cjsNCisJX19sZTE2IGFpZDsNCisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOyAgICAgICAvKiBBUCdz
IE1hYyBBZGRyZXNzKEJTU0lEKSAqLw0KKwlfX2xlMzIgZ3Byb3RlY3Q7DQorCXU4IGFwX3JhdGVz
W1NZU0FEUFRfTUFYX0RBVEFfUkFURVNfR107DQorfSBfX3BhY2tlZDsNCisNCisvKiBIT1NUQ01E
X0NNRF9TRVRfSU5GUkFfTU9ERSAqLw0KK3N0cnVjdCBob3N0Y21kX2NtZF9zZXRfaW5mcmFfbW9k
ZSB7DQorCXN0cnVjdCBob3N0Y21kX2hlYWRlciBjbWRfaGRyOw0KK30gX19wYWNrZWQ7DQorDQor
LyogSE9TVENNRF9DTURfODAyXzExX1JUU19USFNEICovDQorc3RydWN0IGhvc3RjbWRfY21kXzgw
Ml8xMV9ydHNfdGhzZCB7DQorCXN0cnVjdCBob3N0Y21kX2hlYWRlciBjbWRfaGRyOw0KKwlfX2xl
MTYgYWN0aW9uOw0KKwlfX2xlMTYJdGhyZXNob2xkOw0KK30gX19wYWNrZWQ7DQorDQorLyogSE9T
VENNRF9DTURfU0VUX0VEQ0FfUEFSQU1TICovDQorc3RydWN0IGhvc3RjbWRfY21kX3NldF9lZGNh
X3BhcmFtcyB7DQorCXN0cnVjdCBob3N0Y21kX2hlYWRlciBjbWRfaGRyOw0KKwkvKiAwID0gZ2V0
IGFsbCwgMHgxID1zZXQgQ1dNaW4vTWF4LCAgMHgyID0gc2V0IFRYT1AgLCAweDQgPXNldCBBSUZT
TiAqLw0KKwlfX2xlMTYgYWN0aW9uOw0KKwlfX2xlMTYgdHhvcDsgICAgICAgICAgICAgICAgIC8q
IGluIHVuaXQgb2YgMzIgdXMgKi8NCisJX19sZTMyIGN3X21heDsgICAgICAgICAgICAgICAvKiAw
fjE1ICovDQorCV9fbGUzMiBjd19taW47ICAgICAgICAgICAgICAgLyogMH4xNSAqLw0KKwl1OCBh
aWZzbjsNCisJdTggdHhxX251bTsgICAgICAgICAgICAgICAgICAvKiBUeCBRdWV1ZSBudW1iZXIu
ICovDQorfSBfX3BhY2tlZDsNCisNCisvKiBIT1NUQ01EX0NNRF9TRVRfV01NX01PREUgKi8NCitz
dHJ1Y3QgaG9zdGNtZF9jbWRfc2V0X3dtbV9tb2RlIHsNCisJc3RydWN0IGhvc3RjbWRfaGVhZGVy
IGNtZF9oZHI7DQorCV9fbGUxNiBhY3Rpb247ICAgICAgICAgICAgICAgLyogMC0+dW5zZXQsIDEt
PnNldCAqLw0KK30gX19wYWNrZWQ7DQorDQorLyogSE9TVENNRF9DTURfSFRfR1VBUkRfSU5URVJW
QUwgKi8NCitzdHJ1Y3QgaG9zdGNtZF9jbWRfaHRfZ3VhcmRfaW50ZXJ2YWwgew0KKwlzdHJ1Y3Qg
aG9zdGNtZF9oZWFkZXIgY21kX2hkcjsNCisJX19sZTMyIGFjdGlvbjsNCisJX19sZTMyIGdpX3R5
cGU7DQorfSBfX3BhY2tlZDsNCisNCisvKiBIT1NUQ01EX0NNRF9TRVRfRklYRURfUkFURSAqLw0K
K3N0cnVjdCBmaXhfcmF0ZV9mbGFnIHsgICAgICAgICAgIC8qIGxvd2VyIHJhdGUgYWZ0ZXIgdGhl
IHJldHJ5IGNvdW50ICovDQorCS8qIDA6IGxlZ2FjeSwgMTogSFQgKi8NCisJX19sZTMyIGZpeF9y
YXRlX3R5cGU7DQorCS8qIDA6IHJldHJ5IGNvdW50IGlzIG5vdCB2YWxpZCwgMTogdXNlIHJldHJ5
IGNvdW50IHNwZWNpZmllZCAqLw0KKwlfX2xlMzIgcmV0cnlfY291bnRfdmFsaWQ7DQorfSBfX3Bh
Y2tlZDsNCisNCitzdHJ1Y3QgZml4X3JhdGVfZW50cnkgew0KKwlzdHJ1Y3QgZml4X3JhdGVfZmxh
ZyBmaXhfcmF0ZV90eXBlX2ZsYWdzOw0KKwkvKiBkZXBlbmRpbmcgb24gdGhlIGZsYWdzIGFib3Zl
LCB0aGlzIGNhbiBiZSBlaXRoZXIgYSBsZWdhY3kNCisJICogcmF0ZShub3QgaW5kZXgpIG9yIGFu
IE1DUyBjb2RlLg0KKwkgKi8NCisJX19sZTMyIGZpeGVkX3JhdGU7DQorCV9fbGUzMiByZXRyeV9j
b3VudDsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBob3N0Y21kX2NtZF9zZXRfZml4ZWRfcmF0
ZSB7DQorCXN0cnVjdCBob3N0Y21kX2hlYWRlciBjbWRfaGRyOw0KKwkvKiBIT1NUQ01EX0FDVF9O
T1RfVVNFX0ZJWEVEX1JBVEUgMHgwMDAyICovDQorCV9fbGUzMiBhY3Rpb247DQorCS8qIHVzZSBm
aXhlZCByYXRlIHNwZWNpZmllZCBidXQgZmlybXdhcmUgY2FuIGRyb3AgdG8gKi8NCisJX19sZTMy
IGFsbG93X3JhdGVfZHJvcDsNCisJX19sZTMyIGVudHJ5X2NvdW50Ow0KKwlzdHJ1Y3QgZml4X3Jh
dGVfZW50cnkgZml4ZWRfcmF0ZV90YWJsZVs0XTsNCisJdTggbXVsdGljYXN0X3JhdGU7DQorCXU4
IG11bHRpX3JhdGVfdHhfdHlwZTsNCisJdTggbWFuYWdlbWVudF9yYXRlOw0KK30gX19wYWNrZWQ7
DQorDQorLyogSE9TVENNRF9DTURfU0VUX0lFUyAqLw0KK3N0cnVjdCBob3N0Y21kX2NtZF9zZXRf
aWVzIHsNCisJc3RydWN0IGhvc3RjbWRfaGVhZGVyIGNtZF9oZHI7DQorCV9fbGUxNiBhY3Rpb247
ICAgICAgICAgICAgICAgLyogMC0+dW5zZXQsIDEtPnNldCAqLw0KKwlfX2xlMTYgaWVfbGlzdF9s
ZW5faHQ7DQorCV9fbGUxNiBpZV9saXN0X2xlbl92aHQ7DQorCV9fbGUxNiBpZV9saXN0X2xlbl9w
cm9wcmlldGFyeTsNCisJLypCdWZmZXIgc2l6ZSBzYW1lIGFzIEdlbmVyaWNfQmVhY29uKi8NCisJ
dTggaWVfbGlzdF9odFsxNDhdOw0KKwl1OCBpZV9saXN0X3ZodFsyNF07DQorCXU4IGllX2xpc3Rf
cHJvcHJpZXRhcnlbMTEyXTsNCit9IF9fcGFja2VkOw0KKw0KKy8qIEhPU1RDTURfQ01EX1NFVF9M
SU5LQURBUFRfQ1NfTU9ERSAqLw0KK3N0cnVjdCBob3N0Y21kX2NtZF9zZXRfbGlua2FkYXB0X2Nz
X21vZGUgew0KKwlzdHJ1Y3QgaG9zdGNtZF9oZWFkZXIgY21kX2hkcjsNCisJX19sZTE2IGFjdGlv
bjsNCisJX19sZTE2IGNzX21vZGU7DQorfSBfX3BhY2tlZDsNCisNCisvKiBIT1NUQ01EX0NNRF9T
RVRfTUFDX0FERFIsIEhPU1RDTURfQ01EX0RFTF9NQUNfQUREUiAqLw0KK3N0cnVjdCBob3N0Y21k
X2NtZF9zZXRfbWFjX2FkZHIgew0KKwlzdHJ1Y3QgaG9zdGNtZF9oZWFkZXIgY21kX2hkcjsNCisJ
X19sZTE2IG1hY190eXBlOw0KKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07DQorfSBfX3BhY2tlZDsN
CisNCisvKiBIT1NUQ01EX0NNRF9TRVRfUkFURV9BREFQVF9NT0RFICovDQorc3RydWN0IGhvc3Rj
bWRfY21kX3NldF9yYXRlX2FkYXB0X21vZGUgew0KKwlzdHJ1Y3QgaG9zdGNtZF9oZWFkZXIgY21k
X2hkcjsNCisJX19sZTE2IGFjdGlvbjsNCisJX19sZTE2IHJhdGVfYWRhcHRfbW9kZTsgICAgICAv
KiAwOkluZG9vciwgMTpPdXRkb29yICovDQorfSBfX3BhY2tlZDsNCisNCisvKiBIT1NUQ01EX0NN
RF9HRVRfV0FUQ0hET0dfQklUTUFQICovDQorc3RydWN0IGhvc3RjbWRfY21kX2dldF93YXRjaGRv
Z19iaXRtYXAgew0KKwlzdHJ1Y3QgaG9zdGNtZF9oZWFkZXIgY21kX2hkcjsNCisJdTggd2F0Y2hk
b2dfYml0bWFwOyAgICAgICAgICAvKiBmb3IgU1cvQkEgKi8NCit9IF9fcGFja2VkOw0KKw0KKy8q
IEhPU1RDTURfQ01EX0JTU19TVEFSVCAqLw0KK3N0cnVjdCBob3N0Y21kX2NtZF9ic3Nfc3RhcnQg
ew0KKwlzdHJ1Y3QgaG9zdGNtZF9oZWFkZXIgY21kX2hkcjsNCisJX19sZTMyIGVuYWJsZTsgICAg
ICAgICAgICAgICAgICAvKiBGQUxTRTogRGlzYWJsZSBvciBUUlVFOiBFbmFibGUgKi8NCit9IF9f
cGFja2VkOw0KKw0KKy8qIEhPU1RDTURfQ01EX0FQX0JFQUNPTiAqLw0KK3N0cnVjdCBjZl9wYXJh
bXMgew0KKwl1OCBlbGVtX2lkOw0KKwl1OCBsZW47DQorCXU4IGNmcF9jbnQ7DQorCXU4IGNmcF9w
ZXJpb2Q7DQorCV9fbGUxNiBjZnBfbWF4X2R1cmF0aW9uOw0KKwlfX2xlMTYgY2ZwX2R1cmF0aW9u
X3JlbWFpbmluZzsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBpYnNzX3BhcmFtcyB7DQorCXU4
IGVsZW1faWQ7DQorCXU4IGxlbjsNCisJX19sZTE2CWF0aW1fd2luZG93Ow0KK30gX19wYWNrZWQ7
DQorDQordW5pb24gc3NfcGFyYW1zIHsNCisJc3RydWN0IGNmX3BhcmFtcyBjZl9wYXJhbV9zZXQ7
DQorCXN0cnVjdCBpYnNzX3BhcmFtcyBpYnNzX3BhcmFtX3NldDsNCit9IF9fcGFja2VkOw0KKw0K
K3N0cnVjdCBmaF9wYXJhbXMgew0KKwl1OCBlbGVtX2lkOw0KKwl1OCBsZW47DQorCV9fbGUxNiBk
d2VsbF90aW1lOw0KKwl1OCBob3Bfc2V0Ow0KKwl1OCBob3BfcGF0dGVybjsNCisJdTggaG9wX2lu
ZGV4Ow0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IGRzX3BhcmFtcyB7DQorCXU4IGVsZW1faWQ7
DQorCXU4IGxlbjsNCisJdTggY3VycmVudF9jaG5sOw0KK30gX19wYWNrZWQ7DQorDQordW5pb24g
cGh5X3BhcmFtcyB7DQorCXN0cnVjdCBmaF9wYXJhbXMgZmhfcGFyYW1fc2V0Ow0KKwlzdHJ1Y3Qg
ZHNfcGFyYW1zIGRzX3BhcmFtX3NldDsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCByc25faWUg
ew0KKwl1OCBlbGVtX2lkOw0KKwl1OCBsZW47DQorCXU4IG91aV90eXBlWzRdOyAgICAgICAgICAg
ICAgLyogMDA6NTA6ZjI6MDEgKi8NCisJdTggdmVyWzJdOw0KKwl1OCBncnBfa2V5X2NpcGhlcls0
XTsNCisJdTggcHdzX2tleV9jbnRbMl07DQorCXU4IHB3c19rZXlfY2lwaGVyX2xpc3RbNF07DQor
CXU4IGF1dGhfa2V5X2NudFsyXTsNCisJdTggYXV0aF9rZXlfbGlzdFs0XTsNCit9IF9fcGFja2Vk
Ow0KKw0KK3N0cnVjdCByc240OF9pZSB7DQorCXU4IGVsZW1faWQ7DQorCXU4IGxlbjsNCisJdTgg
dmVyWzJdOw0KKwl1OCBncnBfa2V5X2NpcGhlcls0XTsNCisJdTggcHdzX2tleV9jbnRbMl07DQor
CXU4IHB3c19rZXlfY2lwaGVyX2xpc3RbNF07DQorCXU4IGF1dGhfa2V5X2NudFsyXTsNCisJdTgg
YXV0aF9rZXlfbGlzdFs0XTsNCisJdTggcnNuX2NhcFsyXTsNCisJdTggcG1rX2lkX2NudFsyXTsN
CisJdTggcG1rX2lkX2xpc3RbMTZdOyAgICAgICAgICAvKiBTaG91bGQgbW9kaWZ5IHRvIDE2ICog
UyAqLw0KKwl1OCByZXNlcnZlZFs4XTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBhY19wYXJh
bV9yY2Qgew0KKwl1OCBhY2lfYWlmc247DQorCXU4IGVjd19taW5fbWF4Ow0KKwlfX2xlMTYgdHhv
cF9saW07DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3Qgd21tX3BhcmFtX2VsZW0gew0KKwl1OCBl
bGVtX2lkOw0KKwl1OCBsZW47DQorCXU4IG91aVszXTsNCisJdTggdHlwZTsNCisJdTggc3ViX3R5
cGU7DQorCXU4IHZlcnNpb247DQorCXU4IHJzdmQ7DQorCXN0cnVjdCBhY19wYXJhbV9yY2QgYWNf
YmU7DQorCXN0cnVjdCBhY19wYXJhbV9yY2QgYWNfYms7DQorCXN0cnVjdCBhY19wYXJhbV9yY2Qg
YWNfdmk7DQorCXN0cnVjdCBhY19wYXJhbV9yY2QgYWNfdm87DQorfSBfX3BhY2tlZDsNCisNCitz
dHJ1Y3QgY2hhbm5lbF9pbmZvIHsNCisJdTggZmlyc3RfY2hhbm5lbF9udW07DQorCXU4IG51bV9j
aGFubmVsczsNCisJdTggbWF4X3R4X3B3cl9sZXZlbDsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVj
dCBjb3VudHJ5IHsNCisJdTggZWxlbV9pZDsNCisJdTggbGVuOw0KKwl1OCBjb3VudHJ5X3N0clsz
XTsNCisJc3RydWN0IGNoYW5uZWxfaW5mbyBjaGFubmVsX2luZm9bNDBdOw0KK30gX19wYWNrZWQ7
DQorDQorc3RydWN0IHN0YXJ0X2NtZCB7DQorCXU4IHN0YV9tYWNfYWRkcltFVEhfQUxFTl07DQor
CXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07DQorCXU4IGJzc190eXBlOw0KKwlfX2xl
MTYgYmNuX3BlcmlvZDsNCisJdTggZHRpbV9wZXJpb2Q7DQorCXVuaW9uIHNzX3BhcmFtcyBzc19w
YXJhbV9zZXQ7DQorCXVuaW9uIHBoeV9wYXJhbXMgcGh5X3BhcmFtX3NldDsNCisJX19sZTE2IHBy
b2JlX2RlbGF5Ow0KKwlfX2xlMTYgY2FwX2luZm87DQorCXU4IGJfcmF0ZV9zZXRbU1lTQURQVF9N
QVhfREFUQV9SQVRFU19HXTsNCisJdTggb3BfcmF0ZV9zZXRbU1lTQURQVF9NQVhfREFUQV9SQVRF
U19HXTsNCisJc3RydWN0IHJzbl9pZSByc25faWU7DQorCXN0cnVjdCByc240OF9pZSByc240OF9p
ZTsNCisJc3RydWN0IHdtbV9wYXJhbV9lbGVtIHdtbV9wYXJhbTsNCisJc3RydWN0IGNvdW50cnkg
Y291bnRyeTsNCisJX19sZTMyIGFwX3JmX3R5cGU7ICAgICAgICAgICAvKiAwLT5CLCAxLT5HLCAy
LT5NaXhlZCwgMy0+QSwgNC0+MTFKICovDQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3QgaG9zdGNt
ZF9jbWRfYXBfYmVhY29uIHsNCisJc3RydWN0IGhvc3RjbWRfaGVhZGVyIGNtZF9oZHI7DQorCXN0
cnVjdCBzdGFydF9jbWQgc3RhcnRfY21kOw0KK30gX19wYWNrZWQ7DQorDQorLyogSE9TVENNRF9D
TURfU0VUX05FV19TVE4gKi8NCitzdHJ1Y3QgYWRkX2h0X2luZm8gew0KKwl1OCBjb250cm9sX2No
bmw7DQorCXU4IGFkZF9jaG5sOw0KKwlfX2xlMTYgb3BfbW9kZTsNCisJX19sZTE2IHN0YmM7DQor
fSBfX3BhY2tlZDsNCisNCitzdHJ1Y3QgcGVlcl9pbmZvIHsNCisJX19sZTMyIGxlZ2FjeV9yYXRl
X2JpdG1hcDsNCisJdTggaHRfcmF0ZXNbNF07DQorCV9fbGUxNiBjYXBfaW5mbzsNCisJX19sZTE2
IGh0X2NhcF9pbmZvOw0KKwl1OCBtYWNfaHRfcGFyYW1faW5mbzsNCisJdTggbXJ2bF9zdGE7DQor
CXN0cnVjdCBhZGRfaHRfaW5mbyBhZGRfaHRfaW5mbzsNCisJX19sZTMyIHR4X2JmX2NhcGFiaWxp
dGllczsgICAvKiBFWEJGX1NVUFBPUlQgKi8NCisJX19sZTMyIHZodF9tYXhfcnhfbWNzOw0KKwlf
X2xlMzIgdmh0X2NhcDsNCisJLyogMDoyME1oeiwgMTo0ME1oeiwgMjo4ME1oeiwgMzoxNjAgb3Ig
ODArODBNaHogKi8NCisJdTggdmh0X3J4X2NoYW5uZWxfd2lkdGg7DQorfSBfX3BhY2tlZDsNCisN
CitzdHJ1Y3QgaG9zdGNtZF9jbWRfc2V0X25ld19zdG4gew0KKwlzdHJ1Y3QgaG9zdGNtZF9oZWFk
ZXIgY21kX2hkcjsNCisJX19sZTE2IGFpZDsNCisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOw0KKwlf
X2xlMTYgc3RuX2lkOw0KKwlfX2xlMTYgYWN0aW9uOw0KKwlfX2xlMTYgcmVzZXJ2ZWQ7DQorCXN0
cnVjdCBwZWVyX2luZm8gcGVlcl9pbmZvOw0KKwkvKiBVQVBTRF9TVVBQT1JUICovDQorCXU4IHFv
c19pbmZvOw0KKwl1OCBpc19xb3Nfc3RhOw0KKwlfX2xlMzIgZndfc3RhX3B0cjsNCit9IF9fcGFj
a2VkOw0KKw0KKy8qIEhPU1RDTURfQ01EX1NFVF9BUE1PREUgKi8NCitzdHJ1Y3QgaG9zdGNtZF9j
bWRfc2V0X2FwbW9kZSB7DQorCXN0cnVjdCBob3N0Y21kX2hlYWRlciBjbWRfaGRyOw0KKwl1OCBh
cG1vZGU7DQorfSBfX3BhY2tlZDsNCisNCisvKiBIT1NUQ01EX0NNRF9VUERBVEVfRU5DUllQVElP
TiAqLw0KK3N0cnVjdCBob3N0Y21kX2NtZF91cGRhdGVfZW5jcnlwdGlvbiB7DQorCXN0cnVjdCBo
b3N0Y21kX2hlYWRlciBjbWRfaGRyOw0KKwkvKiBBY3Rpb24gdHlwZSAtIHNlZSBlbmNyX2FjdGlv
bl90eXBlICovDQorCV9fbGUzMiBhY3Rpb25fdHlwZTsgICAgICAgICAgLyogZW5jcl9hY3Rpb25f
dHlwZSAqLw0KKwkvKiBzaXplIG9mIHRoZSBkYXRhIGJ1ZmZlciBhdHRhY2hlZC4gKi8NCisJX19s
ZTMyIGRhdGFfbGVuZ3RoOw0KKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07DQorCXU4IGFjdGlvbl9k
YXRhWzFdOw0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IHdlcF90eXBlX2tleSB7DQorCS8qIFdF
UCBrZXkgbWF0ZXJpYWwgKG1heCAxMjhiaXQpICovDQorCXU4IGtleV9tYXRlcmlhbFtNQVhfRU5D
Ul9LRVlfTEVOR1RIXTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBlbmNyX3RraXBfc2VxY250
IHsNCisJX19sZTE2IGxvdzsNCisJX19sZTMyIGhpZ2g7DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1
Y3QgdGtpcF90eXBlX2tleSB7DQorCS8qIFRLSVAgS2V5IG1hdGVyaWFsLiBLZXkgdHlwZSAoZ3Jv
dXAgb3IgcGFpcndpc2Uga2V5KSBpcw0KKwkgKiBkZXRlcm1pbmVkIGJ5IGZsYWdzDQorCSAqLw0K
KwkvKiBpbiBLRVlfUEFSQU1fU0VUIHN0cnVjdHVyZS4gKi8NCisJdTgga2V5X21hdGVyaWFsW01B
WF9FTkNSX0tFWV9MRU5HVEhdOw0KKwkvKiBNSUMga2V5cyAqLw0KKwl1OCB0a2lwX3R4X21pY19r
ZXlbTUlDX0tFWV9MRU5HVEhdOw0KKwl1OCB0a2lwX3J4X21pY19rZXlbTUlDX0tFWV9MRU5HVEhd
Ow0KKwlzdHJ1Y3QgZW5jcl90a2lwX3NlcWNudAl0a2lwX3JzYzsNCisJc3RydWN0IGVuY3JfdGtp
cF9zZXFjbnQJdGtpcF90c2M7DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3QgYWVzX3R5cGVfa2V5
IHsNCisJLyogQUVTIEtleSBtYXRlcmlhbCAqLw0KKwl1OCBrZXlfbWF0ZXJpYWxbTUFYX0VOQ1Jf
S0VZX0xFTkdUSF07DQorfSBfX3BhY2tlZDsNCisNCit1bmlvbiBtd2xfa2V5X3R5cGUgew0KKwlz
dHJ1Y3Qgd2VwX3R5cGVfa2V5ICB3ZXBfa2V5Ow0KKwlzdHJ1Y3QgdGtpcF90eXBlX2tleSB0a2lw
X2tleTsNCisJc3RydWN0IGFlc190eXBlX2tleSAgYWVzX2tleTsNCit9IF9fcGFja2VkOw0KKw0K
K3N0cnVjdCBrZXlfcGFyYW1fc2V0IHsNCisJLyogVG90YWwgbGVuZ3RoIG9mIHRoaXMgc3RydWN0
dXJlIChLZXkgaXMgdmFyaWFibGUgc2l6ZSBhcnJheSkgKi8NCisJX19sZTE2IGxlbmd0aDsNCisJ
LyogS2V5IHR5cGUgLSBXRVAsIFRLSVAgb3IgQUVTLUNDTVAuICovDQorCS8qIFNlZSBkZWZpbml0
aW9ucyBhYm92ZSAqLw0KKwlfX2xlMTYga2V5X3R5cGVfaWQ7DQorCS8qIGtleSBmbGFncyAoRU5D
Ul9LRVlfRkxBR19YWFhfICovDQorCV9fbGUzMiBrZXlfaW5mbzsNCisJLyogRm9yIFdFUCBvbmx5
IC0gYWN0dWFsIGtleSBpbmRleCAqLw0KKwlfX2xlMzIga2V5X2luZGV4Ow0KKwkvKiBTaXplIG9m
IHRoZSBrZXkgKi8NCisJX19sZTE2IGtleV9sZW47DQorCS8qIEtleSBtYXRlcmlhbCAodmFyaWFi
bGUgc2l6ZSBhcnJheSkgKi8NCisJdW5pb24gbXdsX2tleV90eXBlIGtleTsNCisJdTggbWFjX2Fk
ZHJbRVRIX0FMRU5dOw0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IGhvc3RjbWRfY21kX3NldF9r
ZXkgew0KKwlzdHJ1Y3QgaG9zdGNtZF9oZWFkZXIgY21kX2hkcjsNCisJLyogQWN0aW9uIHR5cGUg
LSBzZWUgZW5jcl9hY3Rpb25fdHlwZSAqLw0KKwlfX2xlMzIgYWN0aW9uX3R5cGU7ICAgICAgICAg
IC8qIGVuY3JfYWN0aW9uX3R5cGUgKi8NCisJLyogc2l6ZSBvZiB0aGUgZGF0YSBidWZmZXIgYXR0
YWNoZWQuICovDQorCV9fbGUzMiBkYXRhX2xlbmd0aDsNCisJLyogZGF0YSBidWZmZXIgLSBtYXBz
IHRvIG9uZSBLRVlfUEFSQU1fU0VUIHN0cnVjdHVyZSAqLw0KKwlzdHJ1Y3Qga2V5X3BhcmFtX3Nl
dCBrZXlfcGFyYW07DQorfSBfX3BhY2tlZDsNCisNCisvKiBIT1NUQ01EX0NNRF9CQVNUUkVBTSAq
Lw0KKyNkZWZpbmUgQkFfVFlQRV9NQVNLICAgICAgIDB4MDAwMDAwMDENCisjZGVmaW5lIEJBX0RJ
UkVDVElPTl9NQVNLICAweDAwMDAwMDA2DQorI2RlZmluZSBCQV9ESVJFQ1RJT05fU0hJRlQgMQ0K
Kw0KK3N0cnVjdCBiYV9jb250ZXh0IHsNCisJX19sZTMyIGNvbnRleHQ7DQorfSBfX3BhY2tlZDsN
CisNCisvKiBwYXJhbWV0ZXJzIGZvciBibG9jayBhY2sgY3JlYXRpb24gKi8NCitzdHJ1Y3QgY3Jl
YXRlX2JhX3BhcmFtcyB7DQorCS8qIEJBIENyZWF0aW9uIGZsYWdzIC0gc2VlIGFib3ZlICovDQor
CV9fbGUzMiBmbGFnczsNCisJLyogaWRsZSB0aHJlc2hvbGQgKi8NCisJX19sZTMyIGlkbGVfdGhy
czsNCisJLyogYmxvY2sgYWNrIHRyYW5zbWl0IHRocmVzaG9sZCAoYWZ0ZXIgaG93IG1hbnkgcGt0
cyBzaG91bGQgd2UNCisJICogc2VuZCBCQVI/KQ0KKwkgKi8NCisJX19sZTMyIGJhcl90aHJzOw0K
KwkvKiByZWNlaXZlciB3aW5kb3cgc2l6ZSAqLw0KKwlfX2xlMzIgd2luZG93X3NpemU7DQorCS8q
IE1BQyBBZGRyZXNzIG9mIHRoZSBCQSBwYXJ0bmVyICovDQorCXU4IHBlZXJfbWFjX2FkZHJbRVRI
X0FMRU5dOw0KKwkvKiBEaWFsb2cgVG9rZW4gKi8NCisJdTggZGlhbG9nX3Rva2VuOw0KKwkvKiBU
SUQgZm9yIHRoZSB0cmFmZmljIHN0cmVhbSBpbiB0aGlzIEJBICovDQorCXU4IHRpZDsNCisJLyog
c2hhcmVkIG1lbW9yeSBxdWV1ZSBJRCAobm90IHN1cmUgaWYgdGhpcyBpcyByZXF1aXJlZCkgKi8N
CisJdTggcXVldWVfaWQ7DQorCXU4IHBhcmFtX2luZm87DQorCS8qIHJldHVybmVkIGJ5IGZpcm13
YXJlIC0gZmlybXdhcmUgY29udGV4dCBwb2ludGVyLiAqLw0KKwkvKiB0aGlzIGNvbnRleHQgcG9p
bnRlciB3aWxsIGJlIHBhc3NlZCB0byBmaXJtd2FyZSBmb3IgYWxsDQorCSAqIGZ1dHVyZSBjb21t
YW5kcy4NCisJICovDQorCXN0cnVjdCBiYV9jb250ZXh0IGZ3X2JhX2NvbnRleHQ7DQorCXU4IHJl
c2V0X3NlcV9ubzsgICAgICAgICAgICAgLyoqIDAgb3IgMSoqLw0KKwlfX2xlMTYgY3VycmVudF9z
ZXE7DQorCS8qIFRoaXMgaXMgZm9yIHZpcnR1YWwgc3RhdGlvbiBpbiBTdGEgcHJveHkgbW9kZSBm
b3IgVjZGVyAqLw0KKwl1OCBzdGFfc3JjX21hY19hZGRyW0VUSF9BTEVOXTsNCit9IF9fcGFja2Vk
Ow0KKw0KKy8qIG5ldyB0cmFuc21pdCBzZXF1ZW5jZSBudW1iZXIgaW5mb3JtYXRpb24gKi8NCitz
dHJ1Y3QgYmFfdXBkYXRlX3NlcV9udW0gew0KKwkvKiBCQSBmbGFncyAtIHNlZSBhYm92ZSAqLw0K
KwlfX2xlMzIgZmxhZ3M7DQorCS8qIHJldHVybmVkIGJ5IGZpcm13YXJlIGluIHRoZSBjcmVhdGUg
YmEgc3RyZWFtIHJlc3BvbnNlICovDQorCXN0cnVjdCBiYV9jb250ZXh0IGZ3X2JhX2NvbnRleHQ7
DQorCS8qIG5ldyBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgYmxvY2sgYWNrIHN0cmVhbSAqLw0K
KwlfX2xlMTYgYmFfc2VxX251bTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBiYV9zdHJlYW1f
Y29udGV4dCB7DQorCS8qIEJBIFN0cmVhbSBmbGFncyAqLw0KKwlfX2xlMzIgZmxhZ3M7DQorCS8q
IHJldHVybmVkIGJ5IGZpcm13YXJlIGluIHRoZSBjcmVhdGUgYmEgc3RyZWFtIHJlc3BvbnNlICov
DQorCXN0cnVjdCBiYV9jb250ZXh0IGZ3X2JhX2NvbnRleHQ7DQorfSBfX3BhY2tlZDsNCisNCit1
bmlvbiBiYV9pbmZvIHsNCisJLyogaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gY3JlYXRlIEJBIFN0
cmVhbS4uLiAqLw0KKwlzdHJ1Y3QgY3JlYXRlX2JhX3BhcmFtcwljcmVhdGVfcGFyYW1zOw0KKwkv
KiB1cGRhdGUgc3RhcnRpbmcvbmV3IHNlcXVlbmNlIG51bWJlciBldGMuICovDQorCXN0cnVjdCBi
YV91cGRhdGVfc2VxX251bSB1cGR0X3NlcV9udW07DQorCS8qIGRlc3Ryb3kgYW4gZXhpc3Rpbmcg
c3RyZWFtLi4uICovDQorCXN0cnVjdCBiYV9zdHJlYW1fY29udGV4dCBkZXN0cm95X3BhcmFtczsN
CisJLyogZGVzdHJveSBhbiBleGlzdGluZyBzdHJlYW0uLi4gKi8NCisJc3RydWN0IGJhX3N0cmVh
bV9jb250ZXh0IGZsdXNoX3BhcmFtczsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBob3N0Y21k
X2NtZF9iYXN0cmVhbSB7DQorCXN0cnVjdCBob3N0Y21kX2hlYWRlciBjbWRfaGRyOw0KKwlfX2xl
MzIgYWN0aW9uX3R5cGU7DQorCXVuaW9uIGJhX2luZm8gYmFfaW5mbzsNCit9IF9fcGFja2VkOw0K
Kw0KKy8qIEhPU1RDTURfQ01EX1NFVF9PUFRJTUlaQVRJT05fTEVWRUwgKi8NCitzdHJ1Y3QgaG9z
dGNtZF9jbWRfc2V0X29wdGltaXphdGlvbl9sZXZlbCB7DQorCXN0cnVjdCBob3N0Y21kX2hlYWRl
ciBjbWRfaGRyOw0KKwl1OCBvcHRfbGV2ZWw7DQorfSBfX3BhY2tlZDsNCisNCisvKiBIT1NUQ01E
X0NNRF9EV0RTX0VOQUJMRSAqLw0KK3N0cnVjdCBob3N0Y21kX2NtZF9kd2RzX2VuYWJsZSB7DQor
CXN0cnVjdCBob3N0Y21kX2hlYWRlciBjbWRfaGRyOw0KKwlfX2xlMzIgZW5hYmxlOyAgICAgICAg
ICAgICAgIC8qIDAgLS0gRGlzYWJsZS4gb3IgMSAtLSBFbmFibGUuICovDQorfSBfX3BhY2tlZDsN
CisNCisvKiBIT1NUQ01EX0NNRF9GV19GTFVTSF9USU1FUiAqLw0KK3N0cnVjdCBob3N0Y21kX2Nt
ZF9md19mbHVzaF90aW1lciB7DQorCXN0cnVjdCBob3N0Y21kX2hlYWRlciBjbWRfaGRyOw0KKwkv
KiAwIC0tIERpc2FibGUuID4gMCAtLSBob2xkcyB0aW1lIHZhbHVlIGluIHVzZWNzLiAqLw0KKwlf
X2xlMzIgdmFsdWU7DQorfSBfX3BhY2tlZDsNCisNCisvKiBIT1NUQ01EX0NNRF9TRVRfQ0REICov
DQorc3RydWN0IGhvc3RjbWRfY21kX3NldF9jZGQgew0KKwlzdHJ1Y3QgaG9zdGNtZF9oZWFkZXIg
Y21kX2hkcjsNCisJX19sZTMyIGVuYWJsZTsNCit9IF9fcGFja2VkOw0KKw0KKyNlbmRpZiAvKiBf
aG9zdGNtZF9oXyAqLw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwv
bXdsd2lmaS9pc3IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9pc3Iu
Yw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjIwYjYwODgNCi0tLSAvZGV2
L251bGwNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9pc3IuYw0K
QEAgLTAsMCArMSwxNTAgQEANCisvKg0KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBNYXJ2
ZWxsIEludGVybmF0aW9uYWwgTHRkLg0KKyAqDQorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUg
IkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwNCisgKiBMdGQu
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lv
biAyLCBKdW5lIDE5OTENCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0
cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluDQorICogYWNjb3JkYW5jZSB3aXRoIHRo
ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoDQor
ICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLg0KKyAqDQorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQg
V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFDQorICog
QVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25h
bCBkZXRhaWxzIGFib3V0DQorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLg0KKyAqLw0KKw0K
Ky8qIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGltcGxlbWVudHMgaW50ZXJydXB0IHJlbGF0ZWQg
ZnVuY3Rpb25zLiAqLw0KKw0KKyNpbmNsdWRlICJzeXNhZHB0LmgiDQorI2luY2x1ZGUgImRldi5o
Ig0KKyNpbmNsdWRlICJmd2NtZC5oIg0KKyNpbmNsdWRlICJpc3IuaCINCisNCisjZGVmaW5lIElO
VkFMSURfV0FUQ0hET0cgMHhBQQ0KKw0KK2lycXJldHVybl90IG13bF9pc3IoaW50IGlycSwgdm9p
ZCAqZGV2X2lkKQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBkZXZfaWQ7DQorCXN0
cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwl2b2lkIF9faW9tZW0gKmludF9zdGF0
dXNfbWFzazsNCisJdW5zaWduZWQgaW50IGludF9zdGF0dXMsIGNscl9zdGF0dXM7DQorCXUzMiBz
dGF0dXM7DQorDQorCWludF9zdGF0dXNfbWFzayA9IHByaXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVH
X0EySF9JTlRFUlJVUFRfU1RBVFVTX01BU0s7DQorDQorCWludF9zdGF0dXMgPSByZWFkbChwcml2
LT5pb2Jhc2UxICsgTUFDUkVHX1JFR19BMkhfSU5URVJSVVBUX0NBVVNFKTsNCisNCisJaWYgKGlu
dF9zdGF0dXMgPT0gMHgwMDAwMDAwMCkNCisJCXJldHVybiBJUlFfTk9ORTsNCisNCisJaWYgKGlu
dF9zdGF0dXMgPT0gMHhmZmZmZmZmZikgew0KKwkJd2lwaHlfd2Fybihody0+d2lwaHksICJjYXJk
IHVucGx1Z2dlZD9cbiIpOw0KKwl9IGVsc2Ugew0KKwkJY2xyX3N0YXR1cyA9IGludF9zdGF0dXM7
DQorDQorCQlpZiAoaW50X3N0YXR1cyAmIE1BQ1JFR19BMkhSSUNfQklUX1RYX0RPTkUpIHsNCisJ
CQlpbnRfc3RhdHVzICY9IH5NQUNSRUdfQTJIUklDX0JJVF9UWF9ET05FOw0KKw0KKwkJCWlmICgh
cHJpdi0+aXNfdHhfc2NoZWR1bGUpIHsNCisJCQkJc3RhdHVzID0gcmVhZGwoaW50X3N0YXR1c19t
YXNrKTsNCisJCQkJd3JpdGVsKChzdGF0dXMgJiB+TUFDUkVHX0EySFJJQ19CSVRfVFhfRE9ORSks
DQorCQkJCSAgICAgICBpbnRfc3RhdHVzX21hc2spOw0KKwkJCQl0YXNrbGV0X3NjaGVkdWxlKCZw
cml2LT50eF90YXNrKTsNCisJCQkJcHJpdi0+aXNfdHhfc2NoZWR1bGUgPSB0cnVlOw0KKwkJCX0N
CisJCX0NCisNCisJCWlmIChpbnRfc3RhdHVzICYgTUFDUkVHX0EySFJJQ19CSVRfUlhfUkRZKSB7
DQorCQkJaW50X3N0YXR1cyAmPSB+TUFDUkVHX0EySFJJQ19CSVRfUlhfUkRZOw0KKw0KKwkJCWlm
ICghcHJpdi0+aXNfcnhfc2NoZWR1bGUpIHsNCisJCQkJc3RhdHVzID0gcmVhZGwoaW50X3N0YXR1
c19tYXNrKTsNCisJCQkJd3JpdGVsKChzdGF0dXMgJiB+TUFDUkVHX0EySFJJQ19CSVRfUlhfUkRZ
KSwNCisJCQkJICAgICAgIGludF9zdGF0dXNfbWFzayk7DQorCQkJCXRhc2tsZXRfc2NoZWR1bGUo
JnByaXYtPnJ4X3Rhc2spOw0KKwkJCQlwcml2LT5pc19yeF9zY2hlZHVsZSA9IHRydWU7DQorCQkJ
fQ0KKwkJfQ0KKw0KKwkJaWYgKGludF9zdGF0dXMgJiBNQUNSRUdfQTJIUklDX0JJVF9RVUVfRU1Q
VFkpIHsNCisJCQlpbnRfc3RhdHVzICY9IH5NQUNSRUdfQTJIUklDX0JJVF9RVUVfRU1QVFk7DQor
DQorCQkJaWYgKCFwcml2LT5pc19xZV9zY2hlZHVsZSkgew0KKwkJCQlzdGF0dXMgPSByZWFkbChp
bnRfc3RhdHVzX21hc2spOw0KKwkJCQl3cml0ZWwoKHN0YXR1cyAmIH5NQUNSRUdfQTJIUklDX0JJ
VF9RVUVfRU1QVFkpLA0KKwkJCQkgICAgICAgaW50X3N0YXR1c19tYXNrKTsNCisJCQkJdGFza2xl
dF9zY2hlZHVsZSgmcHJpdi0+cWVfdGFzayk7DQorCQkJCXByaXYtPmlzX3FlX3NjaGVkdWxlID0g
dHJ1ZTsNCisJCQl9DQorCQl9DQorDQorCQlpZiAoaW50X3N0YXR1cyAmIE1BQ1JFR19BMkhSSUNf
QkFfV0FUQ0hET0cpIHsNCisJCQlzdGF0dXMgPSByZWFkbChpbnRfc3RhdHVzX21hc2spOw0KKwkJ
CXdyaXRlbCgoc3RhdHVzICYgfk1BQ1JFR19BMkhSSUNfQkFfV0FUQ0hET0cpLA0KKwkJCSAgICAg
ICBpbnRfc3RhdHVzX21hc2spOw0KKwkJCWludF9zdGF0dXMgJj0gfk1BQ1JFR19BMkhSSUNfQkFf
V0FUQ0hET0c7DQorCQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoaHcsICZwcml2LT53YXRjaGRvZ19i
YV9oYW5kbGUpOw0KKwkJfQ0KKw0KKwkJd3JpdGVsKH5jbHJfc3RhdHVzLA0KKwkJICAgICAgIHBy
aXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVHX0EySF9JTlRFUlJVUFRfQ0FVU0UpOw0KKwl9DQorDQor
CXJldHVybiBJUlFfSEFORExFRDsNCit9DQorDQordm9pZCBtd2xfd2F0Y2hkb2dfYmFfZXZlbnRz
KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCit7DQorCWludCByYzsNCisJdTggYml0bWFwID0g
MCwgc3RyZWFtX2luZGV4Ow0KKwlzdHJ1Y3QgbXdsX2FtcGR1X3N0cmVhbSAqc3RyZWFtczsNCisJ
c3RydWN0IG13bF9wcml2ICpwcml2ID0NCisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXds
X3ByaXYsIHdhdGNoZG9nX2JhX2hhbmRsZSk7DQorCXUzMiBzdGF0dXM7DQorDQorCXJjID0gbXds
X2Z3Y21kX2dldF93YXRjaGRvZ19iaXRtYXAocHJpdi0+aHcsICZiaXRtYXApOw0KKw0KKwlpZiAo
cmMpDQorCQlnb3RvIGRvbmU7DQorDQorCXNwaW5fbG9ja19iaCgmcHJpdi0+c3RyZWFtX2xvY2sp
Ow0KKw0KKwkvKiB0aGUgYml0bWFwIGlzIHRoZSBodyBxdWV1ZSBudW1iZXIuICBNYXAgaXQgdG8g
dGhlIGFtcGR1IHF1ZXVlLiAqLw0KKwlpZiAoYml0bWFwICE9IElOVkFMSURfV0FUQ0hET0cpIHsN
CisJCWlmIChiaXRtYXAgPT0gU1lTQURQVF9UWF9BTVBEVV9RVUVVRVMpDQorCQkJc3RyZWFtX2lu
ZGV4ID0gMDsNCisJCWVsc2UgaWYgKGJpdG1hcCA+IFNZU0FEUFRfVFhfQU1QRFVfUVVFVUVTKQ0K
KwkJCXN0cmVhbV9pbmRleCA9IGJpdG1hcCAtIFNZU0FEUFRfVFhfQU1QRFVfUVVFVUVTOw0KKwkJ
ZWxzZQ0KKwkJCXN0cmVhbV9pbmRleCA9IGJpdG1hcCArIDM7IC8qKiBxdWV1ZSAwIGlzIHN0cmVh
bSAzKi8NCisNCisJCWlmIChiaXRtYXAgIT0gMHhGRikgew0KKwkJCS8qIENoZWNrIGlmIHRoZSBz
dHJlYW0gaXMgaW4gdXNlIGJlZm9yZSBkaXNhYmxpbmcgaXQgKi8NCisJCQlzdHJlYW1zID0gJnBy
aXYtPmFtcGR1W3N0cmVhbV9pbmRleF07DQorDQorCQkJaWYgKHN0cmVhbXMtPnN0YXRlID09IEFN
UERVX1NUUkVBTV9BQ1RJVkUpDQorCQkJCWllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3Ry
ZWFtcy0+c3RhLA0KKwkJCQkJCQkgICAgIHN0cmVhbXMtPnRpZCk7DQorCQl9IGVsc2Ugew0KKwkJ
CWZvciAoc3RyZWFtX2luZGV4ID0gMDsNCisJCQkgICAgIHN0cmVhbV9pbmRleCA8IFNZU0FEUFRf
VFhfQU1QRFVfUVVFVUVTOw0KKwkJCSAgICAgc3RyZWFtX2luZGV4KyspIHsNCisJCQkJc3RyZWFt
cyA9ICZwcml2LT5hbXBkdVtzdHJlYW1faW5kZXhdOw0KKw0KKwkJCQlpZiAoc3RyZWFtcy0+c3Rh
dGUgIT0gQU1QRFVfU1RSRUFNX0FDVElWRSkNCisJCQkJCWNvbnRpbnVlOw0KKw0KKwkJCQlpZWVl
ODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0cmVhbXMtPnN0YSwNCisJCQkJCQkJICAgICBzdHJl
YW1zLT50aWQpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+
c3RyZWFtX2xvY2spOw0KKw0KK2RvbmU6DQorDQorCXN0YXR1cyA9IHJlYWRsKHByaXYtPmlvYmFz
ZTEgKyBNQUNSRUdfUkVHX0EySF9JTlRFUlJVUFRfU1RBVFVTX01BU0spOw0KKwl3cml0ZWwoc3Rh
dHVzIHwgTUFDUkVHX0EySFJJQ19CQV9XQVRDSERPRywNCisJICAgICAgIHByaXYtPmlvYmFzZTEg
KyBNQUNSRUdfUkVHX0EySF9JTlRFUlJVUFRfU1RBVFVTX01BU0spOw0KK30NCmRpZmYgLS1naXQg
YS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvaXNyLmggYi9kcml2ZXJzL25l
dC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvaXNyLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQpp
bmRleCAwMDAwMDAwLi4yNTk4MTE1DQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL25ldC93
aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvaXNyLmgNCkBAIC0wLDAgKzEsMjYgQEANCisvKg0KKyAq
IENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLg0KKyAq
DQorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBN
YXJ2ZWxsIEludGVybmF0aW9uYWwNCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTENCisgKiAodGhlICJM
aWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBG
aWxlIGluDQorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0
aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoDQorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcg
dG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KKyAqDQorICogVEhFIEZJTEUg
SVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBU
SEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFDQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAg
VGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0DQorICogdGhpcyB3
YXJyYW50eSBkaXNjbGFpbWVyLg0KKyAqLw0KKw0KKy8qIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxl
IGRlZmluZXMgaW50ZXJydXB0IHJlbGF0ZWQgZnVuY3Rpb25zLiAqLw0KKw0KKyNpZm5kZWYgX2lz
cl9oXw0KKyNkZWZpbmUgX2lzcl9oXw0KKw0KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4N
CisNCitpcnFyZXR1cm5fdCBtd2xfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7DQordm9pZCBt
d2xfd2F0Y2hkb2dfYmFfZXZlbnRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7DQorDQorI2Vu
ZGlmIC8qIF9pc3JfaF8gKi8NCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2
ZWxsL213bHdpZmkvbWFjODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXds
d2lmaS9tYWM4MDIxMS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uZmY5
MzM1Nw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9t
d2x3aWZpL21hYzgwMjExLmMNCkBAIC0wLDAgKzEsNjk5IEBADQorLyoNCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYtMjAxNSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4NCisgKg0KKyAqIFRoaXMg
c29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRl
cm5hdGlvbmFsDQorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxDQorICogKHRoZSAiTGljZW5zZSIpLiAg
WW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbg0KKyAq
IGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2Us
IGEgY29weSBvZiB3aGljaA0KKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisgKg0KKyAqIFRIRSBGSUxFIElTIERJU1RSSUJV
VEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFDQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQ0KKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNl
IHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dA0KKyAqIHRoaXMgd2FycmFudHkgZGlz
Y2xhaW1lci4NCisgKi8NCisNCisvKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBpbXBsZW1lbnRz
IG1hYzgwMjExIHJlbGF0ZWQgZnVuY3Rpb25zLiAqLw0KKw0KKyNpbmNsdWRlIDxsaW51eC9ldGhl
cmRldmljZS5oPg0KKw0KKyNpbmNsdWRlICJzeXNhZHB0LmgiDQorI2luY2x1ZGUgImRldi5oIg0K
KyNpbmNsdWRlICJmd2NtZC5oIg0KKyNpbmNsdWRlICJ0eC5oIg0KKw0KKyNkZWZpbmUgTVdMX0RS
Vl9OQU1FICAgICAgICBLQlVJTERfTU9ETkFNRQ0KKw0KKyNkZWZpbmUgTUFYX0FNUERVX0FUVEVN
UFRTICA1DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBtd2xfcmF0ZXNf
MjRbXSA9IHsNCisJeyAuYml0cmF0ZSA9IDEwLCAuaHdfdmFsdWUgPSAyLCB9LA0KKwl7IC5iaXRy
YXRlID0gMjAsIC5od192YWx1ZSA9IDQsIH0sDQorCXsgLmJpdHJhdGUgPSA1NSwgLmh3X3ZhbHVl
ID0gMTEsIH0sDQorCXsgLmJpdHJhdGUgPSAxMTAsIC5od192YWx1ZSA9IDIyLCB9LA0KKwl7IC5i
aXRyYXRlID0gMjIwLCAuaHdfdmFsdWUgPSA0NCwgfSwNCisJeyAuYml0cmF0ZSA9IDYwLCAuaHdf
dmFsdWUgPSAxMiwgfSwNCisJeyAuYml0cmF0ZSA9IDkwLCAuaHdfdmFsdWUgPSAxOCwgfSwNCisJ
eyAuYml0cmF0ZSA9IDEyMCwgLmh3X3ZhbHVlID0gMjQsIH0sDQorCXsgLmJpdHJhdGUgPSAxODAs
IC5od192YWx1ZSA9IDM2LCB9LA0KKwl7IC5iaXRyYXRlID0gMjQwLCAuaHdfdmFsdWUgPSA0OCwg
fSwNCisJeyAuYml0cmF0ZSA9IDM2MCwgLmh3X3ZhbHVlID0gNzIsIH0sDQorCXsgLmJpdHJhdGUg
PSA0ODAsIC5od192YWx1ZSA9IDk2LCB9LA0KKwl7IC5iaXRyYXRlID0gNTQwLCAuaHdfdmFsdWUg
PSAxMDgsIH0sDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlIG13
bF9yYXRlc181MFtdID0gew0KKwl7IC5iaXRyYXRlID0gNjAsIC5od192YWx1ZSA9IDEyLCB9LA0K
Kwl7IC5iaXRyYXRlID0gOTAsIC5od192YWx1ZSA9IDE4LCB9LA0KKwl7IC5iaXRyYXRlID0gMTIw
LCAuaHdfdmFsdWUgPSAyNCwgfSwNCisJeyAuYml0cmF0ZSA9IDE4MCwgLmh3X3ZhbHVlID0gMzYs
IH0sDQorCXsgLmJpdHJhdGUgPSAyNDAsIC5od192YWx1ZSA9IDQ4LCB9LA0KKwl7IC5iaXRyYXRl
ID0gMzYwLCAuaHdfdmFsdWUgPSA3MiwgfSwNCisJeyAuYml0cmF0ZSA9IDQ4MCwgLmh3X3ZhbHVl
ID0gOTYsIH0sDQorCXsgLmJpdHJhdGUgPSA1NDAsIC5od192YWx1ZSA9IDEwOCwgfSwNCit9Ow0K
Kw0KK3N0YXRpYyB2b2lkIG13bF9tYWM4MDIxMV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywN
CisJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLA0KKwkJCSAgICBz
dHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHctPnBy
aXY7DQorDQorCWlmICghcHJpdi0+cmFkaW9fb24pIHsNCisJCXdpcGh5X3dhcm4oaHctPndpcGh5
LA0KKwkJCSAgICJkcm9wcGVkIFRYIGZyYW1lIHNpbmNlIHJhZGlvIGlzIGRpc2FibGVkXG4iKTsN
CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7DQorCQlyZXR1cm47DQorCX0NCisNCisJbXdsX3R4
X3htaXQoaHcsIGNvbnRyb2wsIHNrYik7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXdsX21hYzgwMjEx
X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpw
cml2ID0gaHctPnByaXY7DQorCWludCByYzsNCisNCisJLyogRW5hYmxlIFRYIHJlY2xhaW0gYW5k
IFJYIHRhc2tsZXRzLiAqLw0KKwl0YXNrbGV0X2VuYWJsZSgmcHJpdi0+dHhfdGFzayk7DQorCXRh
c2tsZXRfZW5hYmxlKCZwcml2LT5yeF90YXNrKTsNCisJdGFza2xldF9lbmFibGUoJnByaXYtPnFl
X3Rhc2spOw0KKw0KKwkvKiBFbmFibGUgaW50ZXJydXB0cyAqLw0KKwltd2xfZndjbWRfaW50X2Vu
YWJsZShodyk7DQorDQorCXJjID0gbXdsX2Z3Y21kX3JhZGlvX2VuYWJsZShodyk7DQorCWlmIChy
YykNCisJCWdvdG8gZndjbWRfZmFpbDsNCisJcmMgPSBtd2xfZndjbWRfc2V0X3JhdGVfYWRhcHRf
bW9kZShodywgMCk7DQorCWlmIChyYykNCisJCWdvdG8gZndjbWRfZmFpbDsNCisJcmMgPSBtd2xf
ZndjbWRfc2V0X3dtbV9tb2RlKGh3LCB0cnVlKTsNCisJaWYgKHJjKQ0KKwkJZ290byBmd2NtZF9m
YWlsOw0KKwlyYyA9IG13bF9md2NtZF9odF9ndWFyZF9pbnRlcnZhbChodywgR1VBUkRfSU5URVJW
QUxfQVVUTyk7DQorCWlmIChyYykNCisJCWdvdG8gZndjbWRfZmFpbDsNCisJcmMgPSBtd2xfZndj
bWRfc2V0X2R3ZHNfc3RhbW9kZShodywgdHJ1ZSk7DQorCWlmIChyYykNCisJCWdvdG8gZndjbWRf
ZmFpbDsNCisJcmMgPSBtd2xfZndjbWRfc2V0X2Z3X2ZsdXNoX3RpbWVyKGh3LCBTWVNBRFBUX0FN
U0RVX0ZMVVNIX1RJTUUpOw0KKwlpZiAocmMpDQorCQlnb3RvIGZ3Y21kX2ZhaWw7DQorCXJjID0g
bXdsX2Z3Y21kX3NldF9vcHRpbWl6YXRpb25fbGV2ZWwoaHcsIDEpOw0KKwlpZiAocmMpDQorCQln
b3RvIGZ3Y21kX2ZhaWw7DQorDQorCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhodyk7DQorCXJldHVy
biAwOw0KKw0KK2Z3Y21kX2ZhaWw6DQorCW13bF9md2NtZF9pbnRfZGlzYWJsZShodyk7DQorCXRh
c2tsZXRfZGlzYWJsZSgmcHJpdi0+dHhfdGFzayk7DQorCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+
cnhfdGFzayk7DQorCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+cWVfdGFzayk7DQorDQorCXJldHVy
biByYzsNCit9DQorDQorc3RhdGljIHZvaWQgbXdsX21hYzgwMjExX3N0b3Aoc3RydWN0IGllZWU4
MDIxMV9odyAqaHcpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisN
CisJbXdsX2Z3Y21kX3JhZGlvX2Rpc2FibGUoaHcpOw0KKw0KKwlpZWVlODAyMTFfc3RvcF9xdWV1
ZXMoaHcpOw0KKw0KKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8NCisJbXdsX2Z3Y21kX2ludF9k
aXNhYmxlKGh3KTsNCisNCisJLyogRGlzYWJsZSBUWCByZWNsYWltIGFuZCBSWCB0YXNrbGV0cy4g
Ki8NCisJdGFza2xldF9kaXNhYmxlKCZwcml2LT50eF90YXNrKTsNCisJdGFza2xldF9kaXNhYmxl
KCZwcml2LT5yeF90YXNrKTsNCisJdGFza2xldF9kaXNhYmxlKCZwcml2LT5xZV90YXNrKTsNCisN
CisJLyogUmV0dXJuIGFsbCBza2JzIHRvIG1hYzgwMjExICovDQorCW13bF90eF9kb25lKCh1bnNp
Z25lZCBsb25nKWh3KTsNCit9DQorDQorc3RhdGljIGludCBtd2xfbWFjODAyMTFfYWRkX2ludGVy
ZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIx
MV92aWYgKnZpZikNCit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlz
dHJ1Y3QgbXdsX3ZpZiAqbXdsX3ZpZjsNCisJdTMyIG1hY2lkc19zdXBwb3J0ZWQ7DQorCWludCBt
YWNpZDsNCisNCisJc3dpdGNoICh2aWYtPnR5cGUpIHsNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9B
UDoNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOg0KKwkJbWFjaWRzX3N1cHBvcnRl
ZCA9IHByaXYtPmFwX21hY2lkc19zdXBwb3J0ZWQ7DQorCQlicmVhazsNCisJY2FzZSBOTDgwMjEx
X0lGVFlQRV9TVEFUSU9OOg0KKwkJbWFjaWRzX3N1cHBvcnRlZCA9IHByaXYtPnN0YV9tYWNpZHNf
c3VwcG9ydGVkOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJ
fQ0KKw0KKwltYWNpZCA9IGZmcyhtYWNpZHNfc3VwcG9ydGVkICYgfnByaXYtPm1hY2lkc191c2Vk
KTsNCisNCisJaWYgKCFtYWNpZCkgew0KKwkJd2lwaHlfd2Fybihody0+d2lwaHksICJubyBtYWNp
ZCBjYW4gYmUgYWxsb2NhdGVkXG4iKTsNCisJCXJldHVybiAtRUJVU1k7DQorCX0NCisJbWFjaWQt
LTsNCisNCisJLyogU2V0dXAgZHJpdmVyIHByaXZhdGUgYXJlYS4gKi8NCisJbXdsX3ZpZiA9IG13
bF9kZXZfZ2V0X3ZpZih2aWYpOw0KKwltZW1zZXQobXdsX3ZpZiwgMCwgc2l6ZW9mKCptd2xfdmlm
KSk7DQorCW13bF92aWYtPm1hY2lkID0gbWFjaWQ7DQorCW13bF92aWYtPnNlcW5vID0gMDsNCisJ
bXdsX3ZpZi0+aXNfaHdfY3J5cHRvX2VuYWJsZWQgPSBmYWxzZTsNCisJbXdsX3ZpZi0+YmVhY29u
X2luZm8udmFsaWQgPSBmYWxzZTsNCisJbXdsX3ZpZi0+aXYxNiA9IDE7DQorCW13bF92aWYtPml2
MzIgPSAwOw0KKwltd2xfdmlmLT5rZXlpZHggPSAwOw0KKw0KKwlzd2l0Y2ggKHZpZi0+dHlwZSkg
ew0KKwljYXNlIE5MODAyMTFfSUZUWVBFX0FQOg0KKwkJZXRoZXJfYWRkcl9jb3B5KG13bF92aWYt
PmJzc2lkLCB2aWYtPmFkZHIpOw0KKwkJbXdsX2Z3Y21kX3NldF9uZXdfc3RuX2FkZF9zZWxmKGh3
LCB2aWYpOw0KKwkJYnJlYWs7DQorCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoNCisJ
CWV0aGVyX2FkZHJfY29weShtd2xfdmlmLT5ic3NpZCwgdmlmLT5hZGRyKTsNCisJCW13bF9md2Nt
ZF9zZXRfbmV3X3N0bl9hZGRfc2VsZihodywgdmlmKTsNCisJCWJyZWFrOw0KKwljYXNlIE5MODAy
MTFfSUZUWVBFX1NUQVRJT046DQorCQlldGhlcl9hZGRyX2NvcHkobXdsX3ZpZi0+c3RhX21hYywg
dmlmLT5hZGRyKTsNCisJCW13bF9md2NtZF9ic3Nfc3RhcnQoaHcsIHZpZiwgdHJ1ZSk7DQorCQlt
d2xfZndjbWRfc2V0X2luZnJhX21vZGUoaHcsIHZpZik7DQorCQltd2xfZndjbWRfc2V0X21hY19h
ZGRyX2NsaWVudChodywgdmlmLCB2aWYtPmFkZHIpOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQor
CQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlwcml2LT5tYWNpZHNfdXNlZCB8PSAxIDw8IG13
bF92aWYtPm1hY2lkOw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPnZpZl9sb2NrKTsNCisJbGlzdF9h
ZGRfdGFpbCgmbXdsX3ZpZi0+bGlzdCwgJnByaXYtPnZpZl9saXN0KTsNCisJc3Bpbl91bmxvY2tf
YmgoJnByaXYtPnZpZl9sb2NrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lk
IG13bF9tYWM4MDIxMV9yZW1vdmVfdmlmKHN0cnVjdCBtd2xfcHJpdiAqcHJpdiwNCisJCQkJICAg
IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpDQorew0KKwlzdHJ1Y3QgbXdsX3ZpZiAqbXdsX3Zp
ZiA9IG13bF9kZXZfZ2V0X3ZpZih2aWYpOw0KKw0KKwlpZiAoIXByaXYtPm1hY2lkc191c2VkKQ0K
KwkJcmV0dXJuOw0KKw0KKwltd2xfdHhfZGVsX3BrdHNfdmlhX3ZpZihwcml2LT5odywgdmlmKTsN
CisNCisJcHJpdi0+bWFjaWRzX3VzZWQgJj0gfigxIDw8IG13bF92aWYtPm1hY2lkKTsNCisJc3Bp
bl9sb2NrX2JoKCZwcml2LT52aWZfbG9jayk7DQorCWxpc3RfZGVsKCZtd2xfdmlmLT5saXN0KTsN
CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnZpZl9sb2NrKTsNCit9DQorDQorc3RhdGljIHZvaWQg
bXdsX21hYzgwMjExX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQor
CQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYg
KnByaXYgPSBody0+cHJpdjsNCisNCisJc3dpdGNoICh2aWYtPnR5cGUpIHsNCisJY2FzZSBOTDgw
MjExX0lGVFlQRV9BUDoNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOg0KKwkJbXds
X2Z3Y21kX3NldF9uZXdfc3RuX2RlbChodywgdmlmLCB2aWYtPmFkZHIpOw0KKwkJYnJlYWs7DQor
CWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoNCisJCW13bF9md2NtZF9yZW1vdmVfbWFjX2Fk
ZHIoaHcsIHZpZiwgdmlmLT5hZGRyKTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJYnJlYWs7
DQorCX0NCisNCisJbXdsX21hYzgwMjExX3JlbW92ZV92aWYocHJpdiwgdmlmKTsNCit9DQorDQor
c3RhdGljIGludCBtd2xfbWFjODAyMTFfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0K
KwkJCSAgICAgICB1MzIgY2hhbmdlZCkNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29u
ZiA9ICZody0+Y29uZjsNCisJaW50IHJjOw0KKw0KKwl3aXBoeV9kZWJ1Zyhody0+d2lwaHksICJj
aGFuZ2U6IDB4JXhcbiIsIGNoYW5nZWQpOw0KKw0KKwlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAy
MTFfQ09ORl9JRExFKQ0KKwkJcmMgPSBtd2xfZndjbWRfcmFkaW9fZGlzYWJsZShodyk7DQorCWVs
c2UNCisJCXJjID0gbXdsX2Z3Y21kX3JhZGlvX2VuYWJsZShodyk7DQorDQorCWlmIChyYykNCisJ
CWdvdG8gb3V0Ow0KKw0KKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFO
TkVMKSB7DQorCQlpbnQgcmF0ZSA9IDA7DQorDQorCQlpZiAoY29uZi0+Y2hhbmRlZi5jaGFuLT5i
YW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsNCisJCQltd2xfZndjbWRfc2V0X2FwbW9kZSho
dywgQVBfTU9ERV8yXzRHSFpfMTFBQ19NSVhFRCk7DQorCQkJbXdsX2Z3Y21kX3NldF9saW5rYWRh
cHRfY3NfbW9kZShodywNCisJCQkJCQkJTElOS19DU19TVEFURV9DT05TRVJWKTsNCisJCQlyYXRl
ID0gbXdsX3JhdGVzXzI0WzBdLmh3X3ZhbHVlOw0KKwkJfSBlbHNlIGlmIChjb25mLT5jaGFuZGVm
LmNoYW4tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgew0KKwkJCW13bF9md2NtZF9zZXRf
YXBtb2RlKGh3LCBBUF9NT0RFXzExQUMpOw0KKwkJCW13bF9md2NtZF9zZXRfbGlua2FkYXB0X2Nz
X21vZGUoaHcsDQorCQkJCQkJCUxJTktfQ1NfU1RBVEVfQVVUTyk7DQorCQkJcmF0ZSA9IG13bF9y
YXRlc181MFswXS5od192YWx1ZTsNCisJCX0NCisNCisJCXJjID0gbXdsX2Z3Y21kX3NldF9yZl9j
aGFubmVsKGh3LCBjb25mKTsNCisJCWlmIChyYykNCisJCQlnb3RvIG91dDsNCisJCXJjID0gbXds
X2Z3Y21kX3VzZV9maXhlZF9yYXRlKGh3LCByYXRlLCByYXRlKTsNCisJCWlmIChyYykNCisJCQln
b3RvIG91dDsNCisJCXJjID0gbXdsX2Z3Y21kX21heF90eF9wb3dlcihodywgY29uZiwgMCk7DQor
CQlpZiAocmMpDQorCQkJZ290byBvdXQ7DQorCQlyYyA9IG13bF9md2NtZF90eF9wb3dlcihodywg
Y29uZiwgMCk7DQorCQlpZiAocmMpDQorCQkJZ290byBvdXQ7DQorCQlyYyA9IG13bF9md2NtZF9z
ZXRfY2RkKGh3KTsNCisJfQ0KKw0KK291dDoNCisNCisJcmV0dXJuIHJjOw0KK30NCisNCitzdGF0
aWMgdm9pZCBtd2xfbWFjODAyMTFfYnNzX2luZm9fY2hhbmdlZF9zdGEoc3RydWN0IGllZWU4MDIx
MV9odyAqaHcsDQorCQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCQkJ
ICAgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywNCisJCQkJCSAgICAgIHUzMiBj
aGFuZ2VkKQ0KK3sNCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEUpDQor
CQltd2xfZndjbWRfc2V0X3JhZGlvX3ByZWFtYmxlKGh3LA0KKwkJCQkJICAgICB2aWYtPmJzc19j
b25mLnVzZV9zaG9ydF9wcmVhbWJsZSk7DQorDQorCWlmICgoY2hhbmdlZCAmIEJTU19DSEFOR0VE
X0FTU09DKSAmJiB2aWYtPmJzc19jb25mLmFzc29jKQ0KKwkJbXdsX2Z3Y21kX3NldF9haWQoaHcs
IHZpZiwgKHU4ICopdmlmLT5ic3NfY29uZi5ic3NpZCwNCisJCQkJICB2aWYtPmJzc19jb25mLmFp
ZCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG13bF9tYWM4MDIxMV9ic3NfaW5mb19jaGFuZ2VkX2Fw
KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3Zp
ZiAqdmlmLA0KKwkJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvLA0KKwkJ
CQkJICAgICB1MzIgY2hhbmdlZCkNCit7DQorCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQ
X1BSRUFNQkxFKQ0KKwkJbXdsX2Z3Y21kX3NldF9yYWRpb19wcmVhbWJsZShodywNCisJCQkJCSAg
ICAgdmlmLT5ic3NfY29uZi51c2Vfc2hvcnRfcHJlYW1ibGUpOw0KKw0KKwlpZiAoY2hhbmdlZCAm
IEJTU19DSEFOR0VEX0JBU0lDX1JBVEVTKSB7DQorCQlpbnQgaWR4Ow0KKwkJaW50IHJhdGU7DQor
DQorCQkvKiBVc2UgbG93ZXN0IHN1cHBvcnRlZCBiYXNpYyByYXRlIGZvciBtdWx0aWNhc3RzDQor
CQkgKiBhbmQgbWFuYWdlbWVudCBmcmFtZXMgKHN1Y2ggYXMgcHJvYmUgcmVzcG9uc2VzIC0tDQor
CQkgKiBiZWFjb25zIHdpbGwgYWx3YXlzIGdvIG91dCBhdCAxIE1iL3MpLg0KKwkJICovDQorCQlp
ZHggPSBmZnModmlmLT5ic3NfY29uZi5iYXNpY19yYXRlcyk7DQorCQlpZiAoaWR4KQ0KKwkJCWlk
eC0tOw0KKw0KKwkJaWYgKGh3LT5jb25mLmNoYW5kZWYuY2hhbi0+YmFuZCA9PSBJRUVFODAyMTFf
QkFORF8yR0haKQ0KKwkJCXJhdGUgPSBtd2xfcmF0ZXNfMjRbaWR4XS5od192YWx1ZTsNCisJCWVs
c2UNCisJCQlyYXRlID0gbXdsX3JhdGVzXzUwW2lkeF0uaHdfdmFsdWU7DQorDQorCQltd2xfZndj
bWRfdXNlX2ZpeGVkX3JhdGUoaHcsIHJhdGUsIHJhdGUpOw0KKwl9DQorDQorCWlmIChjaGFuZ2Vk
ICYgKEJTU19DSEFOR0VEX0JFQUNPTl9JTlQgfCBCU1NfQ0hBTkdFRF9CRUFDT04pKSB7DQorCQlz
dHJ1Y3Qgc2tfYnVmZiAqc2tiOw0KKw0KKwkJc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcs
IHZpZik7DQorDQorCQlpZiAoc2tiKSB7DQorCQkJbXdsX2Z3Y21kX3NldF9iZWFjb24oaHcsIHZp
Ziwgc2tiLT5kYXRhLCBza2ItPmxlbik7DQorCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsNCisJ
CX0NCisNCisJCWlmICgoaW5mby0+c3NpZFswXSAhPSAnXDAnKSAmJg0KKwkJICAgIChpbmZvLT5z
c2lkX2xlbiAhPSAwKSAmJg0KKwkJICAgICghaW5mby0+aGlkZGVuX3NzaWQpKQ0KKwkJCW13bF9m
d2NtZF9icm9hZGNhc3Rfc3NpZF9lbmFibGUoaHcsIHZpZiwgdHJ1ZSk7DQorCQllbHNlDQorCQkJ
bXdsX2Z3Y21kX2Jyb2FkY2FzdF9zc2lkX2VuYWJsZShodywgdmlmLCBmYWxzZSk7DQorCX0NCisN
CisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCkNCisJCW13bF9md2Nt
ZF9ic3Nfc3RhcnQoaHcsIHZpZiwgaW5mby0+ZW5hYmxlX2JlYWNvbik7DQorfQ0KKw0KK3N0YXRp
YyB2b2lkIG13bF9tYWM4MDIxMV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcg
Kmh3LA0KKwkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCQkJICBzdHJ1Y3Qg
aWVlZTgwMjExX2Jzc19jb25mICppbmZvLA0KKwkJCQkJICB1MzIgY2hhbmdlZCkNCit7DQorCXN3
aXRjaCAodmlmLT50eXBlKSB7DQorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6DQorCWNhc2UgTkw4
MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoNCisJCW13bF9tYWM4MDIxMV9ic3NfaW5mb19jaGFuZ2Vk
X2FwKGh3LCB2aWYsIGluZm8sIGNoYW5nZWQpOw0KKwkJYnJlYWs7DQorCWNhc2UgTkw4MDIxMV9J
RlRZUEVfU1RBVElPTjoNCisJCW13bF9tYWM4MDIxMV9ic3NfaW5mb19jaGFuZ2VkX3N0YShodywg
dmlmLCBpbmZvLCBjaGFuZ2VkKTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJYnJlYWs7DQor
CX0NCit9DQorDQorc3RhdGljIHZvaWQgbXdsX21hYzgwMjExX2NvbmZpZ3VyZV9maWx0ZXIoc3Ry
dWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJCQkgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdz
LA0KKwkJCQkJICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLA0KKwkJCQkJICB1NjQgbXVsdGlj
YXN0KQ0KK3sNCisJLyogQVAgZmlybXdhcmUgZG9lc24ndCBhbGxvdyBmaW5lLWdyYWluZWQgY29u
dHJvbCBvdmVyDQorCSAqIHRoZSByZWNlaXZlIGZpbHRlci4NCisJICovDQorCSp0b3RhbF9mbGFn
cyAmPSBGSUZfQUxMTVVMVEkgfCBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQzsNCit9DQorDQorc3Rh
dGljIGludCBtd2xfbWFjODAyMTFfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJ
CQkJZW51bSBzZXRfa2V5X2NtZCBjbWRfcGFyYW0sDQorCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlm
ICp2aWYsDQorCQkJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsDQorCQkJCXN0cnVjdCBpZWVl
ODAyMTFfa2V5X2NvbmYgKmtleSkNCit7DQorCXN0cnVjdCBtd2xfdmlmICptd2xfdmlmOw0KKwlp
bnQgcmMgPSAwOw0KKwl1OCBlbmNyX3R5cGU7DQorCXU4ICphZGRyOw0KKw0KKwltd2xfdmlmID0g
bXdsX2Rldl9nZXRfdmlmKHZpZik7DQorDQorCWlmICghc3RhKSB7DQorCQlhZGRyID0gdmlmLT5h
ZGRyOw0KKwl9IGVsc2Ugew0KKwkJYWRkciA9IHN0YS0+YWRkcjsNCisJCWlmICh2aWYtPnR5cGUg
PT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikNCisJCQlldGhlcl9hZGRyX2NvcHkobXdsX3ZpZi0+
YnNzaWQsIGFkZHIpOw0KKwl9DQorDQorCWlmIChjbWRfcGFyYW0gPT0gU0VUX0tFWSkgew0KKwkJ
cmMgPSBtd2xfZndjbWRfZW5jcnlwdGlvbl9zZXRfa2V5KGh3LCB2aWYsIGFkZHIsIGtleSk7DQor
DQorCQlpZiAocmMpDQorCQkJZ290byBvdXQ7DQorDQorCQlpZiAoKGtleS0+Y2lwaGVyID09IFdM
QU5fQ0lQSEVSX1NVSVRFX1dFUDQwKSB8fA0KKwkJICAgIChrZXktPmNpcGhlciA9PSBXTEFOX0NJ
UEhFUl9TVUlURV9XRVAxMDQpKSB7DQorCQkJZW5jcl90eXBlID0gRU5DUl9UWVBFX1dFUDsNCisJ
CX0gZWxzZSBpZiAoa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUCkgew0KKwkJ
CWVuY3JfdHlwZSA9IEVOQ1JfVFlQRV9BRVM7DQorCQkJaWYgKChrZXktPmZsYWdzICYgSUVFRTgw
MjExX0tFWV9GTEFHX1BBSVJXSVNFKSA9PSAwKSB7DQorCQkJCWlmICh2aWYtPnR5cGUgIT0gTkw4
MDIxMV9JRlRZUEVfU1RBVElPTikNCisJCQkJCW13bF92aWYtPmtleWlkeCA9IGtleS0+a2V5aWR4
Ow0KKwkJCX0NCisJCX0gZWxzZSBpZiAoa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVf
VEtJUCkgew0KKwkJCWVuY3JfdHlwZSA9IEVOQ1JfVFlQRV9US0lQOw0KKwkJfSBlbHNlIHsNCisJ
CQllbmNyX3R5cGUgPSBFTkNSX1RZUEVfRElTQUJMRTsNCisJCX0NCisNCisJCXJjID0gbXdsX2Z3
Y21kX3VwZGF0ZV9lbmNyeXB0aW9uX2VuYWJsZShodywgdmlmLCBhZGRyLA0KKwkJCQkJCQllbmNy
X3R5cGUpOw0KKwkJaWYgKHJjKQ0KKwkJCWdvdG8gb3V0Ow0KKw0KKwkJbXdsX3ZpZi0+aXNfaHdf
Y3J5cHRvX2VuYWJsZWQgPSB0cnVlOw0KKwl9IGVsc2Ugew0KKwkJcmMgPSBtd2xfZndjbWRfZW5j
cnlwdGlvbl9yZW1vdmVfa2V5KGh3LCB2aWYsIGFkZHIsIGtleSk7DQorCQlpZiAocmMpDQorCQkJ
Z290byBvdXQ7DQorCX0NCisNCitvdXQ6DQorDQorCXJldHVybiByYzsNCit9DQorDQorc3RhdGlj
IGludCBtd2xfbWFjODAyMTFfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAq
aHcsDQorCQkJCQkgIHUzMiB2YWx1ZSkNCit7DQorCXJldHVybiBtd2xfZndjbWRfc2V0X3J0c190
aHJlc2hvbGQoaHcsIHZhbHVlKTsNCit9DQorDQorc3RhdGljIGludCBtd2xfbWFjODAyMTFfc3Rh
X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkJc3RydWN0IGllZWU4MDIxMV92aWYg
KnZpZiwNCisJCQkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkNCit7DQorCXN0cnVjdCBtd2xf
cHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgbXdsX3ZpZiAqbXdsX3ZpZjsNCisJc3Ry
dWN0IG13bF9zdGEgKnN0YV9pbmZvOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXk7
DQorCWludCByYzsNCisJaW50IGk7DQorDQorCW13bF92aWYgPSBtd2xfZGV2X2dldF92aWYodmlm
KTsNCisJc3RhX2luZm8gPSBtd2xfZGV2X2dldF9zdGEoc3RhKTsNCisNCisJbWVtc2V0KHN0YV9p
bmZvLCAwLCBzaXplb2YoKnN0YV9pbmZvKSk7DQorCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9J
RlRZUEVfTUVTSF9QT0lOVCkNCisJCXN0YV9pbmZvLT5pc19tZXNoX25vZGUgPSB0cnVlOw0KKwlp
ZiAoc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKSB7DQorCQlzdGFfaW5mby0+aXNfYW1wZHVfYWxs
b3dlZCA9IHRydWU7DQorCQlzdGFfaW5mby0+aXNfYW1zZHVfYWxsb3dlZCA9IGZhbHNlOw0KKwkJ
aWYgKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfTUFYX0FNU0RVKQ0KKwkJCXN0
YV9pbmZvLT5hbXNkdV9jdHJsLmNhcCA9IE1XTF9BTVNEVV9TSVpFXzhLOw0KKwkJZWxzZQ0KKwkJ
CXN0YV9pbmZvLT5hbXNkdV9jdHJsLmNhcCA9IE1XTF9BTVNEVV9TSVpFXzRLOw0KKwl9DQorCXN0
YV9pbmZvLT5pdjE2ID0gMTsNCisJc3RhX2luZm8tPml2MzIgPSAwOw0KKwlzcGluX2xvY2tfaW5p
dCgmc3RhX2luZm8tPmFtc2R1X2xvY2spOw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPnN0YV9sb2Nr
KTsNCisJbGlzdF9hZGRfdGFpbCgmc3RhX2luZm8tPmxpc3QsICZwcml2LT5zdGFfbGlzdCk7DQor
CXNwaW5fdW5sb2NrX2JoKCZwcml2LT5zdGFfbG9jayk7DQorDQorCWlmICh2aWYtPnR5cGUgPT0g
Tkw4MDIxMV9JRlRZUEVfU1RBVElPTikNCisJCW13bF9md2NtZF9zZXRfbmV3X3N0bl9kZWwoaHcs
IHZpZiwgc3RhLT5hZGRyKTsNCisNCisJcmMgPSBtd2xfZndjbWRfc2V0X25ld19zdG5fYWRkKGh3
LCB2aWYsIHN0YSk7DQorDQorCWZvciAoaSA9IDA7IGkgPCBOVU1fV0VQX0tFWVM7IGkrKykgew0K
KwkJa2V5ID0gKHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKiltd2xfdmlmLT53ZXBfa2V5X2Nv
bmZbaV0ua2V5Ow0KKw0KKwkJaWYgKG13bF92aWYtPndlcF9rZXlfY29uZltpXS5lbmFibGVkKQ0K
KwkJCW13bF9tYWM4MDIxMV9zZXRfa2V5KGh3LCBTRVRfS0VZLCB2aWYsIHN0YSwga2V5KTsNCisJ
fQ0KKw0KKwlyZXR1cm4gcmM7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXdsX21hYzgwMjExX3N0YV9y
ZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFf
dmlmICp2aWYsDQorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpDQorew0KKwlzdHJ1
Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJaW50IHJjOw0KKwlzdHJ1Y3QgbXdsX3N0
YSAqc3RhX2luZm8gPSBtd2xfZGV2X2dldF9zdGEoc3RhKTsNCisNCisJbXdsX3R4X2RlbF9zdGFf
YW1zZHVfcGt0cyhzdGEpOw0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPnN0cmVhbV9sb2NrKTsN
CisJbXdsX2Z3Y21kX2RlbF9zdGFfc3RyZWFtcyhodywgc3RhKTsNCisJc3Bpbl91bmxvY2tfYmgo
JnByaXYtPnN0cmVhbV9sb2NrKTsNCisNCisJbXdsX3R4X2RlbF9wa3RzX3ZpYV9zdGEoaHcsIHN0
YSk7DQorDQorCXJjID0gbXdsX2Z3Y21kX3NldF9uZXdfc3RuX2RlbChodywgdmlmLCBzdGEtPmFk
ZHIpOw0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPnN0YV9sb2NrKTsNCisJbGlzdF9kZWwoJnN0
YV9pbmZvLT5saXN0KTsNCisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnN0YV9sb2NrKTsNCisNCisJ
cmV0dXJuIHJjOw0KK30NCisNCitzdGF0aWMgaW50IG13bF9tYWM4MDIxMV9jb25mX3R4KHN0cnVj
dCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJ
CQl1MTYgcXVldWUsDQorCQkJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1z
ICpwYXJhbXMpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJaW50
IHJjID0gMDsNCisNCisJaWYgKFdBUk5fT04ocXVldWUgPiBTWVNBRFBUX1RYX1dNTV9RVUVVRVMg
LSAxKSkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwltZW1jcHkoJnByaXYtPndtbV9wYXJhbXNb
cXVldWVdLCBwYXJhbXMsIHNpemVvZigqcGFyYW1zKSk7DQorDQorCWlmICghcHJpdi0+d21tX2Vu
YWJsZWQpIHsNCisJCXJjID0gbXdsX2Z3Y21kX3NldF93bW1fbW9kZShodywgdHJ1ZSk7DQorCQlw
cml2LT53bW1fZW5hYmxlZCA9IHRydWU7DQorCX0NCisNCisJaWYgKCFyYykgew0KKwkJaW50IHEg
PSBTWVNBRFBUX1RYX1dNTV9RVUVVRVMgLSAxIC0gcXVldWU7DQorDQorCQlyYyA9IG13bF9md2Nt
ZF9zZXRfZWRjYV9wYXJhbXMoaHcsIHEsDQorCQkJCQkgICAgICAgcGFyYW1zLT5jd19taW4sIHBh
cmFtcy0+Y3dfbWF4LA0KKwkJCQkJICAgICAgIHBhcmFtcy0+YWlmcywgcGFyYW1zLT50eG9wKTsN
CisJfQ0KKw0KKwlyZXR1cm4gcmM7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXdsX21hYzgwMjExX2dl
dF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjEx
X2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpDQorew0KKwlyZXR1cm4gbXdsX2Z3Y21kX2dldF9zdGF0
KGh3LCBzdGF0cyk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXdsX21hYzgwMjExX2dldF9zdXJ2ZXko
c3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJCSAgIGludCBpZHgsDQorCQkJCSAgIHN0cnVj
dCBzdXJ2ZXlfaW5mbyAqc3VydmV5KQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHct
PnByaXY7DQorCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsNCisNCisJ
aWYgKGlkeCAhPSAwKQ0KKwkJcmV0dXJuIC1FTk9FTlQ7DQorDQorCXN1cnZleS0+Y2hhbm5lbCA9
IGNvbmYtPmNoYW5kZWYuY2hhbjsNCisJc3VydmV5LT5maWxsZWQgPSBTVVJWRVlfSU5GT19OT0lT
RV9EQk07DQorCXN1cnZleS0+bm9pc2UgPSBwcml2LT5ub2lzZTsNCisNCisJcmV0dXJuIDA7DQor
fQ0KKw0KK3N0YXRpYyBpbnQgbXdsX21hYzgwMjExX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgw
MjExX2h3ICpodywNCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCQkg
ICAgIGVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwNCisJCQkJICAgICBz
dHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLA0KKwkJCQkgICAgIHUxNiB0aWQsIHUxNiAqc3NuLCB1
OCBidWZfc2l6ZSwgYm9vbCBhbXNkdSkNCit7DQorCWludCByYyA9IDA7DQorCXN0cnVjdCBtd2xf
cHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgbXdsX2FtcGR1X3N0cmVhbSAqc3RyZWFt
Ow0KKwl1OCAqYWRkciA9IHN0YS0+YWRkciwgaWR4Ow0KKwlzdHJ1Y3QgbXdsX3N0YSAqc3RhX2lu
Zm87DQorDQorCXN0YV9pbmZvID0gbXdsX2Rldl9nZXRfc3RhKHN0YSk7DQorDQorCXNwaW5fbG9j
a19iaCgmcHJpdi0+c3RyZWFtX2xvY2spOw0KKw0KKwlzdHJlYW0gPSBtd2xfZndjbWRfbG9va3Vw
X3N0cmVhbShodywgYWRkciwgdGlkKTsNCisNCisJc3dpdGNoIChhY3Rpb24pIHsNCisJY2FzZSBJ
RUVFODAyMTFfQU1QRFVfUlhfU1RBUlQ6DQorCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUT1A6
DQorCQlicmVhazsNCisJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQ6DQorCQlpZiAoIXN0
YV9pbmZvLT5pc19hbXBkdV9hbGxvd2VkKSB7DQorCQkJd2lwaHlfd2Fybihody0+d2lwaHksICJh
bXBkdSBub3QgYWxsb3dlZFxuIik7DQorCQkJcmMgPSAtRVBFUk07DQorCQkJYnJlYWs7DQorCQl9
DQorDQorCQlpZiAoIXN0cmVhbSkgew0KKwkJCXN0cmVhbSA9IG13bF9md2NtZF9hZGRfc3RyZWFt
KGh3LCBzdGEsIHRpZCk7DQorCQkJaWYgKCFzdHJlYW0pIHsNCisJCQkJd2lwaHlfd2Fybihody0+
d2lwaHksICJubyBzdHJlYW0gZm91bmRcbiIpOw0KKwkJCQlyYyA9IC1FUEVSTTsNCisJCQkJYnJl
YWs7DQorCQkJfQ0KKwkJfQ0KKw0KKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnN0cmVhbV9sb2Nr
KTsNCisJCXJjID0gbXdsX2Z3Y21kX2NoZWNrX2JhKGh3LCBzdHJlYW0sIHZpZik7DQorCQlzcGlu
X2xvY2tfYmgoJnByaXYtPnN0cmVhbV9sb2NrKTsNCisJCWlmIChyYykgew0KKwkJCW13bF9md2Nt
ZF9yZW1vdmVfc3RyZWFtKGh3LCBzdHJlYW0pOw0KKwkJCXdpcGh5X2Vycihody0+d2lwaHksDQor
CQkJCSAgImFtcGR1IHN0YXJ0IGVycm9yIGNvZGU6ICVkXG4iLCByYyk7DQorCQkJcmMgPSAtRVBF
Uk07DQorCQkJYnJlYWs7DQorCQl9DQorCQlzdHJlYW0tPnN0YXRlID0gQU1QRFVfU1RSRUFNX0lO
X1BST0dSRVNTOw0KKwkJKnNzbiA9IDA7DQorCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJx
c2FmZSh2aWYsIGFkZHIsIHRpZCk7DQorCQlicmVhazsNCisJY2FzZSBJRUVFODAyMTFfQU1QRFVf
VFhfU1RPUF9DT05UOg0KKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QX0ZMVVNIOg0KKwlj
YXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QX0ZMVVNIX0NPTlQ6DQorCQlpZiAoc3RyZWFtKSB7
DQorCQkJaWYgKHN0cmVhbS0+c3RhdGUgPT0gQU1QRFVfU1RSRUFNX0FDVElWRSkgew0KKwkJCQlt
d2xfdHhfZGVsX2FtcGR1X3BrdHMoaHcsIHN0YSwgdGlkKTsNCisJCQkJaWR4ID0gc3RyZWFtLT5p
ZHg7DQorCQkJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5zdHJlYW1fbG9jayk7DQorCQkJCW13bF9m
d2NtZF9kZXN0cm95X2JhKGh3LCBpZHgpOw0KKwkJCQlzcGluX2xvY2tfYmgoJnByaXYtPnN0cmVh
bV9sb2NrKTsNCisJCQl9DQorDQorCQkJbXdsX2Z3Y21kX3JlbW92ZV9zdHJlYW0oaHcsIHN0cmVh
bSk7DQorCQkJaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZSh2aWYsIGFkZHIsIHRpZCk7
DQorCQl9IGVsc2Ugew0KKwkJCXJjID0gLUVQRVJNOw0KKwkJfQ0KKwkJYnJlYWs7DQorCWNhc2Ug
SUVFRTgwMjExX0FNUERVX1RYX09QRVJBVElPTkFMOg0KKwkJaWYgKHN0cmVhbSkgew0KKwkJCWlm
IChXQVJOX09OKHN0cmVhbS0+c3RhdGUgIT0NCisJCQkJICAgIEFNUERVX1NUUkVBTV9JTl9QUk9H
UkVTUykpIHsNCisJCQkJcmMgPSAtRVBFUk07DQorCQkJCWJyZWFrOw0KKwkJCX0NCisJCQlzcGlu
X3VubG9ja19iaCgmcHJpdi0+c3RyZWFtX2xvY2spOw0KKwkJCXJjID0gbXdsX2Z3Y21kX2NyZWF0
ZV9iYShodywgc3RyZWFtLCBidWZfc2l6ZSwgdmlmKTsNCisJCQlzcGluX2xvY2tfYmgoJnByaXYt
PnN0cmVhbV9sb2NrKTsNCisNCisJCQlpZiAoIXJjKSB7DQorCQkJCXN0cmVhbS0+c3RhdGUgPSBB
TVBEVV9TVFJFQU1fQUNUSVZFOw0KKwkJCX0gZWxzZSB7DQorCQkJCWlkeCA9IHN0cmVhbS0+aWR4
Ow0KKwkJCQlzcGluX3VubG9ja19iaCgmcHJpdi0+c3RyZWFtX2xvY2spOw0KKwkJCQltd2xfZndj
bWRfZGVzdHJveV9iYShodywgaWR4KTsNCisJCQkJc3Bpbl9sb2NrX2JoKCZwcml2LT5zdHJlYW1f
bG9jayk7DQorCQkJCW13bF9md2NtZF9yZW1vdmVfc3RyZWFtKGh3LCBzdHJlYW0pOw0KKwkJCQl3
aXBoeV9lcnIoaHctPndpcGh5LA0KKwkJCQkJICAiYW1wZHUgb3BlcmF0aW9uIGVycm9yIGNvZGU6
ICVkXG4iLA0KKwkJCQkJICByYyk7DQorCQkJfQ0KKwkJfSBlbHNlIHsNCisJCQlyYyA9IC1FUEVS
TTsNCisJCX0NCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJcmMgPSAtRU5PVFNVUFA7DQorCQli
cmVhazsNCisJfQ0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+c3RyZWFtX2xvY2spOw0KKw0K
KwlyZXR1cm4gcmM7DQorfQ0KKw0KK2NvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIG13bF9tYWM4
MDIxMV9vcHMgPSB7DQorCS50eCAgICAgICAgICAgICAgICAgPSBtd2xfbWFjODAyMTFfdHgsDQor
CS5zdGFydCAgICAgICAgICAgICAgPSBtd2xfbWFjODAyMTFfc3RhcnQsDQorCS5zdG9wICAgICAg
ICAgICAgICAgPSBtd2xfbWFjODAyMTFfc3RvcCwNCisJLmFkZF9pbnRlcmZhY2UgICAgICA9IG13
bF9tYWM4MDIxMV9hZGRfaW50ZXJmYWNlLA0KKwkucmVtb3ZlX2ludGVyZmFjZSAgID0gbXdsX21h
YzgwMjExX3JlbW92ZV9pbnRlcmZhY2UsDQorCS5jb25maWcgICAgICAgICAgICAgPSBtd2xfbWFj
ODAyMTFfY29uZmlnLA0KKwkuYnNzX2luZm9fY2hhbmdlZCAgID0gbXdsX21hYzgwMjExX2Jzc19p
bmZvX2NoYW5nZWQsDQorCS5jb25maWd1cmVfZmlsdGVyICAgPSBtd2xfbWFjODAyMTFfY29uZmln
dXJlX2ZpbHRlciwNCisJLnNldF9rZXkgICAgICAgICAgICA9IG13bF9tYWM4MDIxMV9zZXRfa2V5
LA0KKwkuc2V0X3J0c190aHJlc2hvbGQgID0gbXdsX21hYzgwMjExX3NldF9ydHNfdGhyZXNob2xk
LA0KKwkuc3RhX2FkZCAgICAgICAgICAgID0gbXdsX21hYzgwMjExX3N0YV9hZGQsDQorCS5zdGFf
cmVtb3ZlICAgICAgICAgPSBtd2xfbWFjODAyMTFfc3RhX3JlbW92ZSwNCisJLmNvbmZfdHggICAg
ICAgICAgICA9IG13bF9tYWM4MDIxMV9jb25mX3R4LA0KKwkuZ2V0X3N0YXRzICAgICAgICAgID0g
bXdsX21hYzgwMjExX2dldF9zdGF0cywNCisJLmdldF9zdXJ2ZXkgICAgICAgICA9IG13bF9tYWM4
MDIxMV9nZXRfc3VydmV5LA0KKwkuYW1wZHVfYWN0aW9uICAgICAgID0gbXdsX21hYzgwMjExX2Ft
cGR1X2FjdGlvbiwNCit9Ow0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZl
bGwvbXdsd2lmaS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkv
bWFpbi5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uZGM3NTlkMw0KLS0t
IC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL21h
aW4uYw0KQEAgLTAsMCArMSw3MzkgQEANCisvKg0KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE1
LCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLg0KKyAqDQorICogVGhpcyBzb2Z0d2FyZSBmaWxl
ICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwNCisg
KiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
VmVyc2lvbiAyLCBKdW5lIDE5OTENCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwg
cmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluDQorICogYWNjb3JkYW5jZSB3
aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdo
aWNoDQorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLg0KKyAqDQorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJ
VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
DQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRk
aXRpb25hbCBkZXRhaWxzIGFib3V0DQorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLg0KKyAq
Lw0KKw0KKy8qIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGltcGxlbWVudHMgbWFpbiBmdW5jdGlv
bnMgb2YgdGhpcyBtb2R1bGUuICovDQorDQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KKyNp
ZmRlZiBDT05GSUdfT0YNCisjaW5jbHVkZSA8bGludXgvb2YuaD4NCisjZW5kaWYNCisNCisjaW5j
bHVkZSAic3lzYWRwdC5oIg0KKyNpbmNsdWRlICJkZXYuaCINCisjaW5jbHVkZSAiZndkbC5oIg0K
KyNpbmNsdWRlICJmd2NtZC5oIg0KKyNpbmNsdWRlICJ0eC5oIg0KKyNpbmNsdWRlICJyeC5oIg0K
KyNpbmNsdWRlICJpc3IuaCINCisjaWZkZWYgQ09ORklHX1NVUFBPUlRfTUZHDQorI2luY2x1ZGUg
Im1mZy5oIg0KKyNlbmRpZg0KKyNpZmRlZiBDT05GSUdfREVCVUdfRlMNCisjaW5jbHVkZSAiZGVi
dWdmcy5oIg0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgTVdMX0RFU0MgICAgICAgICAiTWFydmVsbCA4
MDIuMTFhYyBXaXJlbGVzcyBOZXR3b3JrIERyaXZlciINCisjZGVmaW5lIE1XTF9ERVZfTkFNRSAg
ICAgIk1hcnZlbGwgODAyLjExYWMgQWRhcHRlciINCisNCisjZGVmaW5lIEZJTEVfUEFUSF9MRU4g
ICAgNjQNCisjZGVmaW5lIENNRF9CVUZfU0laRSAgICAgMHg0MDAwDQorDQorc3RhdGljIHN0cnVj
dCBwY2lfZGV2aWNlX2lkIG13bF9wY2lfaWRfdGJsW10gPSB7DQorCXsgUENJX1ZERVZJQ0UoTUFS
VkVMTCwgMHgyYTU1KSwgLmRyaXZlcl9kYXRhID0gTVdMODg2NCwgfSwNCisJeyBQQ0lfVkRFVklD
RShNQVJWRUxMLCAweDJiMzgpLCAuZHJpdmVyX2RhdGEgPSBNV0w4ODk3LCB9LA0KKwl7IH0sDQor
fTsNCisNCitzdGF0aWMgc3RydWN0IG13bF9jaGlwX2luZm8gbXdsX2NoaXBfdGJsW10gPSB7DQor
CVtNV0w4ODY0XSA9IHsNCisJCS5wYXJ0X25hbWUJPSAiODhXODg2NCIsDQorCQkuZndfaW1hZ2UJ
PSAibXdsd2lmaS84OFc4ODY0LmJpbiIsDQorCQkuYW50ZW5uYV90eAk9IEFOVEVOTkFfVFhfNF9B
VVRPLA0KKwkJLmFudGVubmFfcngJPSBBTlRFTk5BX1JYXzRfQVVUTywNCisJfSwNCisJW01XTDg4
OTddID0gew0KKwkJLnBhcnRfbmFtZQk9ICI4OFc4ODk3IiwNCisJCS5md19pbWFnZQk9ICJtd2x3
aWZpLzg4Vzg4OTcuYmluIiwNCisJCS5hbnRlbm5hX3R4CT0gQU5URU5OQV9UWF8yLA0KKwkJLmFu
dGVubmFfcngJPSBBTlRFTk5BX1JYXzIsDQorCX0sDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3Ry
dWN0IGllZWU4MDIxMV9jaGFubmVsIG13bF9jaGFubmVsc18yNFtdID0gew0KKwl7IC5iYW5kID0g
SUVFRTgwMjExX0JBTkRfMkdIWiwgLmNlbnRlcl9mcmVxID0gMjQxMiwgLmh3X3ZhbHVlID0gMSwg
fSwNCisJeyAuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFosIC5jZW50ZXJfZnJlcSA9IDI0MTcs
IC5od192YWx1ZSA9IDIsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haLCAuY2Vu
dGVyX2ZyZXEgPSAyNDIyLCAuaHdfdmFsdWUgPSAzLCB9LA0KKwl7IC5iYW5kID0gSUVFRTgwMjEx
X0JBTkRfMkdIWiwgLmNlbnRlcl9mcmVxID0gMjQyNywgLmh3X3ZhbHVlID0gNCwgfSwNCisJeyAu
YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFosIC5jZW50ZXJfZnJlcSA9IDI0MzIsIC5od192YWx1
ZSA9IDUsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haLCAuY2VudGVyX2ZyZXEg
PSAyNDM3LCAuaHdfdmFsdWUgPSA2LCB9LA0KKwl7IC5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdI
WiwgLmNlbnRlcl9mcmVxID0gMjQ0MiwgLmh3X3ZhbHVlID0gNywgfSwNCisJeyAuYmFuZCA9IElF
RUU4MDIxMV9CQU5EXzJHSFosIC5jZW50ZXJfZnJlcSA9IDI0NDcsIC5od192YWx1ZSA9IDgsIH0s
DQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haLCAuY2VudGVyX2ZyZXEgPSAyNDUyLCAu
aHdfdmFsdWUgPSA5LCB9LA0KKwl7IC5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWiwgLmNlbnRl
cl9mcmVxID0gMjQ1NywgLmh3X3ZhbHVlID0gMTAsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFf
QkFORF8yR0haLCAuY2VudGVyX2ZyZXEgPSAyNDYyLCAuaHdfdmFsdWUgPSAxMSwgfSwNCisJeyAu
YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFosIC5jZW50ZXJfZnJlcSA9IDI0NjcsIC5od192YWx1
ZSA9IDEyLCB9LA0KKwl7IC5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWiwgLmNlbnRlcl9mcmVx
ID0gMjQ3MiwgLmh3X3ZhbHVlID0gMTMsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF8y
R0haLCAuY2VudGVyX2ZyZXEgPSAyNDg0LCAuaHdfdmFsdWUgPSAxNCwgfSwNCit9Ow0KKw0KK3N0
YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgbXdsX3JhdGVzXzI0W10gPSB7DQorCXsg
LmJpdHJhdGUgPSAxMCwgLmh3X3ZhbHVlID0gMiwgfSwNCisJeyAuYml0cmF0ZSA9IDIwLCAuaHdf
dmFsdWUgPSA0LCB9LA0KKwl7IC5iaXRyYXRlID0gNTUsIC5od192YWx1ZSA9IDExLCB9LA0KKwl7
IC5iaXRyYXRlID0gMTEwLCAuaHdfdmFsdWUgPSAyMiwgfSwNCisJeyAuYml0cmF0ZSA9IDIyMCwg
Lmh3X3ZhbHVlID0gNDQsIH0sDQorCXsgLmJpdHJhdGUgPSA2MCwgLmh3X3ZhbHVlID0gMTIsIH0s
DQorCXsgLmJpdHJhdGUgPSA5MCwgLmh3X3ZhbHVlID0gMTgsIH0sDQorCXsgLmJpdHJhdGUgPSAx
MjAsIC5od192YWx1ZSA9IDI0LCB9LA0KKwl7IC5iaXRyYXRlID0gMTgwLCAuaHdfdmFsdWUgPSAz
NiwgfSwNCisJeyAuYml0cmF0ZSA9IDI0MCwgLmh3X3ZhbHVlID0gNDgsIH0sDQorCXsgLmJpdHJh
dGUgPSAzNjAsIC5od192YWx1ZSA9IDcyLCB9LA0KKwl7IC5iaXRyYXRlID0gNDgwLCAuaHdfdmFs
dWUgPSA5NiwgfSwNCisJeyAuYml0cmF0ZSA9IDU0MCwgLmh3X3ZhbHVlID0gMTA4LCB9LA0KK307
DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBtd2xfY2hhbm5lbHNf
NTBbXSA9IHsNCisJeyAuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFosIC5jZW50ZXJfZnJlcSA9
IDUxODAsIC5od192YWx1ZSA9IDM2LCB9LA0KKwl7IC5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdI
WiwgLmNlbnRlcl9mcmVxID0gNTIwMCwgLmh3X3ZhbHVlID0gNDAsIH0sDQorCXsgLmJhbmQgPSBJ
RUVFODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1MjIwLCAuaHdfdmFsdWUgPSA0NCwg
fSwNCisJeyAuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFosIC5jZW50ZXJfZnJlcSA9IDUyNDAs
IC5od192YWx1ZSA9IDQ4LCB9LA0KKwl7IC5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWiwgLmNl
bnRlcl9mcmVxID0gNTI2MCwgLmh3X3ZhbHVlID0gNTIsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAy
MTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1MjgwLCAuaHdfdmFsdWUgPSA1NiwgfSwNCisJ
eyAuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFosIC5jZW50ZXJfZnJlcSA9IDUzMDAsIC5od192
YWx1ZSA9IDYwLCB9LA0KKwl7IC5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWiwgLmNlbnRlcl9m
cmVxID0gNTMyMCwgLmh3X3ZhbHVlID0gNjQsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFO
RF81R0haLCAuY2VudGVyX2ZyZXEgPSA1NTAwLCAuaHdfdmFsdWUgPSAxMDAsIH0sDQorCXsgLmJh
bmQgPSBJRUVFODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1NTIwLCAuaHdfdmFsdWUg
PSAxMDQsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEg
PSA1NTQwLCAuaHdfdmFsdWUgPSAxMDgsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF81
R0haLCAuY2VudGVyX2ZyZXEgPSA1NTYwLCAuaHdfdmFsdWUgPSAxMTIsIH0sDQorCXsgLmJhbmQg
PSBJRUVFODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1NTgwLCAuaHdfdmFsdWUgPSAx
MTYsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1
NjAwLCAuaHdfdmFsdWUgPSAxMjAsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0ha
LCAuY2VudGVyX2ZyZXEgPSA1NjIwLCAuaHdfdmFsdWUgPSAxMjQsIH0sDQorCXsgLmJhbmQgPSBJ
RUVFODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1NjQwLCAuaHdfdmFsdWUgPSAxMjgs
IH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1NjYw
LCAuaHdfdmFsdWUgPSAxMzIsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haLCAu
Y2VudGVyX2ZyZXEgPSA1NjgwLCAuaHdfdmFsdWUgPSAxMzYsIH0sDQorCXsgLmJhbmQgPSBJRUVF
ODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1NzAwLCAuaHdfdmFsdWUgPSAxNDAsIH0s
DQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1NzIwLCAu
aHdfdmFsdWUgPSAxNDQsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haLCAuY2Vu
dGVyX2ZyZXEgPSA1NzQ1LCAuaHdfdmFsdWUgPSAxNDksIH0sDQorCXsgLmJhbmQgPSBJRUVFODAy
MTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1NzY1LCAuaHdfdmFsdWUgPSAxNTMsIH0sDQor
CXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1Nzg1LCAuaHdf
dmFsdWUgPSAxNTcsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haLCAuY2VudGVy
X2ZyZXEgPSA1ODA1LCAuaHdfdmFsdWUgPSAxNjEsIH0sDQorfTsNCisNCitzdGF0aWMgY29uc3Qg
c3RydWN0IGllZWU4MDIxMV9yYXRlIG13bF9yYXRlc181MFtdID0gew0KKwl7IC5iaXRyYXRlID0g
NjAsIC5od192YWx1ZSA9IDEyLCB9LA0KKwl7IC5iaXRyYXRlID0gOTAsIC5od192YWx1ZSA9IDE4
LCB9LA0KKwl7IC5iaXRyYXRlID0gMTIwLCAuaHdfdmFsdWUgPSAyNCwgfSwNCisJeyAuYml0cmF0
ZSA9IDE4MCwgLmh3X3ZhbHVlID0gMzYsIH0sDQorCXsgLmJpdHJhdGUgPSAyNDAsIC5od192YWx1
ZSA9IDQ4LCB9LA0KKwl7IC5iaXRyYXRlID0gMzYwLCAuaHdfdmFsdWUgPSA3MiwgfSwNCisJeyAu
Yml0cmF0ZSA9IDQ4MCwgLmh3X3ZhbHVlID0gOTYsIH0sDQorCXsgLmJpdHJhdGUgPSA1NDAsIC5o
d192YWx1ZSA9IDEwOCwgfSwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjEx
X2lmYWNlX2xpbWl0IGFwX2lmX2xpbWl0c1tdID0gew0KKwl7IC5tYXggPSBTWVNBRFBUX05VTV9P
Rl9BUCwJLnR5cGVzID0gQklUKE5MODAyMTFfSUZUWVBFX0FQKSB9LA0KKyNpZmRlZiBDT05GSUdf
TUFDODAyMTFfTUVTSA0KKwl7IC5tYXggPSAxLAkudHlwZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVf
TUVTSF9QT0lOVCkgfSwNCisjZW5kaWYNCisJeyAubWF4ID0gMSwJLnR5cGVzID0gQklUKE5MODAy
MTFfSUZUWVBFX1NUQVRJT04pIH0sDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4
MDIxMV9pZmFjZV9jb21iaW5hdGlvbiBhcF9pZl9jb21iID0gew0KKwkubGltaXRzID0gYXBfaWZf
bGltaXRzLA0KKwkubl9saW1pdHMgPSBBUlJBWV9TSVpFKGFwX2lmX2xpbWl0cyksDQorCS5tYXhf
aW50ZXJmYWNlcyA9IFNZU0FEUFRfTlVNX09GX0FQLA0KKwkubnVtX2RpZmZlcmVudF9jaGFubmVs
cyA9IDEsDQorfTsNCisNCitzdGF0aWMgaW50IG13bF9hbGxvY19wY2lfcmVzb3VyY2Uoc3RydWN0
IG13bF9wcml2ICpwcml2KQ0KK3sNCisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBwcml2LT5wZGV2
Ow0KKwl2b2lkIF9faW9tZW0gKmFkZHI7DQorDQorCXByaXYtPm5leHRfYmFyX251bSA9IDE7CS8q
IDMyLWJpdCAqLw0KKwlpZiAocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDApICYgMHgwNCkNCisJ
CXByaXYtPm5leHRfYmFyX251bSA9IDI7CS8qIDY0LWJpdCAqLw0KKw0KKwlhZGRyID0gZGV2bV9p
b3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsICZwZGV2LT5yZXNvdXJjZVswXSk7DQorCWlmIChJ
U19FUlIoYWRkcikpIHsNCisJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksDQorCQkJICAiJXM6
IGNhbm5vdCByZXNlcnZlIFBDSSBtZW1vcnkgcmVnaW9uIDBcbiIsDQorCQkJICBNV0xfRFJWX05B
TUUpOw0KKwkJZ290byBlcnI7DQorCX0NCisJcHJpdi0+aW9iYXNlMCA9IGFkZHI7DQorCXdpcGh5
X2RlYnVnKHByaXYtPmh3LT53aXBoeSwgInByaXYtPmlvYmFzZTAgPSAlcFxuIiwgcHJpdi0+aW9i
YXNlMCk7DQorDQorCWFkZHIgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwNCisJ
CQkJICAgICAmcGRldi0+cmVzb3VyY2VbcHJpdi0+bmV4dF9iYXJfbnVtXSk7DQorCWlmIChJU19F
UlIoYWRkcikpIHsNCisJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksDQorCQkJICAiJXM6IGNh
bm5vdCByZXNlcnZlIFBDSSBtZW1vcnkgcmVnaW9uIDFcbiIsDQorCQkJICBNV0xfRFJWX05BTUUp
Ow0KKwkJZ290byBlcnI7DQorCX0NCisJcHJpdi0+aW9iYXNlMSA9IGFkZHI7DQorCXdpcGh5X2Rl
YnVnKHByaXYtPmh3LT53aXBoeSwgInByaXYtPmlvYmFzZTEgPSAlcFxuIiwgcHJpdi0+aW9iYXNl
MSk7DQorDQorCXByaXYtPnBjbWRfYnVmID0NCisJCSh1bnNpZ25lZCBzaG9ydCAqKWRtYW1fYWxs
b2NfY29oZXJlbnQoJnByaXYtPnBkZXYtPmRldiwNCisJCQkJCQkgICAgICBDTURfQlVGX1NJWkUs
DQorCQkJCQkJICAgICAgJnByaXYtPnBwaHlzX2NtZF9idWYsDQorCQkJCQkJICAgICAgR0ZQX0tF
Uk5FTCk7DQorCWlmICghcHJpdi0+cGNtZF9idWYpIHsNCisJCXdpcGh5X2Vycihwcml2LT5ody0+
d2lwaHksDQorCQkJICAiJXM6IGNhbm5vdCBhbGxvYyBtZW1vcnkgZm9yIGNvbW1hbmQgYnVmZmVy
XG4iLA0KKwkJCSAgTVdMX0RSVl9OQU1FKTsNCisJCWdvdG8gZXJyOw0KKwl9DQorCXdpcGh5X2Rl
YnVnKHByaXYtPmh3LT53aXBoeSwNCisJCSAgICAicHJpdi0+cGNtZF9idWYgPSAlcCAgcHJpdi0+
cHBoeXNfY21kX2J1ZiA9ICVwXG4iLA0KKwkJICAgIHByaXYtPnBjbWRfYnVmLA0KKwkJICAgICh2
b2lkICopcHJpdi0+cHBoeXNfY21kX2J1Zik7DQorCW1lbXNldChwcml2LT5wY21kX2J1ZiwgMHgw
MCwgQ01EX0JVRl9TSVpFKTsNCisNCisJcmV0dXJuIDA7DQorDQorZXJyOg0KKwl3aXBoeV9lcnIo
cHJpdi0+aHctPndpcGh5LCAicGNpIGFsbG9jIGZhaWxcbiIpOw0KKw0KKwlyZXR1cm4gLUVJTzsN
Cit9DQorDQorc3RhdGljIGludCBtd2xfaW5pdF9maXJtd2FyZShzdHJ1Y3QgbXdsX3ByaXYgKnBy
aXYsIGNvbnN0IGNoYXIgKmZ3X25hbWUpDQorew0KKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsNCisJ
aW50IHJjID0gMDsNCisNCisJcGRldiA9IHByaXYtPnBkZXY7DQorDQorI2lmZGVmIENPTkZJR19T
VVBQT1JUX01GRw0KKwlpZiAocHJpdi0+bWZnX21vZGUpDQorCQlyYyA9IG13bF9tZmdfcmVxdWVz
dF9maXJtd2FyZShwcml2KTsNCisJZWxzZQ0KKyNlbmRpZg0KKwkJcmMgPSByZXF1ZXN0X2Zpcm13
YXJlKChjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKiopJnByaXYtPmZ3X3Vjb2RlLA0KKwkJCQkgICAg
ICBmd19uYW1lLCAmcHJpdi0+cGRldi0+ZGV2KTsNCisNCisJaWYgKHJjKSB7DQorCQlpZiAocHJp
di0+bWZnX21vZGUpDQorCQkJd2lwaHlfZXJyKHByaXYtPmh3LT53aXBoeSwgImNhbm5vdCBmaW5k
IGZpcm13YXJlXG4iKTsNCisJCWVsc2UNCisJCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LA0K
KwkJCQkgICIlczogY2Fubm90IGZpbmQgZmlybXdhcmUgaW1hZ2UgPCVzPlxuIiwNCisJCQkJICBN
V0xfRFJWX05BTUUsIGZ3X25hbWUpOw0KKwkJZ290byBlcnJfbG9hZF9mdzsNCisJfQ0KKw0KKwly
YyA9IG13bF9md2RsX2Rvd25sb2FkX2Zpcm13YXJlKHByaXYtPmh3KTsNCisJaWYgKHJjKSB7DQor
CQlpZiAocHJpdi0+bWZnX21vZGUpDQorCQkJd2lwaHlfZXJyKHByaXYtPmh3LT53aXBoeSwgImRv
d25sb2FkIGZpcm13YXJlIGZhaWxcbiIpOw0KKwkJZWxzZQ0KKwkJCXdpcGh5X2Vycihwcml2LT5o
dy0+d2lwaHksDQorCQkJCSAgIiVzOiBjYW5ub3QgZG93bmxvYWQgZmlybXdhcmUgaW1hZ2UgPCVz
PlxuIiwNCisJCQkJICBNV0xfRFJWX05BTUUsIGZ3X25hbWUpOw0KKwkJZ290byBlcnJfZG93bmxv
YWRfZnc7DQorCX0NCisNCisJcmV0dXJuIHJjOw0KKw0KK2Vycl9kb3dubG9hZF9mdzoNCisNCisj
aWZkZWYgQ09ORklHX1NVUFBPUlRfTUZHDQorCWlmIChwcml2LT5tZmdfbW9kZSkNCisJCW13bF9t
ZmdfcmVsZWFzZV9maXJtd2FyZShwcml2KTsNCisJZWxzZQ0KKyNlbmRpZg0KKwkJcmVsZWFzZV9m
aXJtd2FyZShwcml2LT5md191Y29kZSk7DQorDQorZXJyX2xvYWRfZnc6DQorDQorCXdpcGh5X2Vy
cihwcml2LT5ody0+d2lwaHksICJmaXJtd2FyZSBpbml0IGZhaWxcbiIpOw0KKw0KKwlyZXR1cm4g
cmM7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG13bF9wcm9jZXNzX29mX2R0cyhzdHJ1Y3QgbXdsX3By
aXYgKnByaXYpDQorew0KKyNpZmRlZiBDT05GSUdfT0YNCisJc3RydWN0IHByb3BlcnR5ICpwcm9w
Ow0KKwl1MzIgcHJvcF92YWx1ZTsNCisNCisJcHJpdi0+ZHRfbm9kZSA9DQorCQlvZl9maW5kX25v
ZGVfYnlfbmFtZShwY2lfYnVzX3RvX09GX25vZGUocHJpdi0+cGRldi0+YnVzKSwNCisJCQkJICAg
ICAibXdsd2lmaSIpOw0KKwlpZiAoIXByaXYtPmR0X25vZGUpDQorCQlyZXR1cm47DQorDQorCS8q
IGxvb2sgZm9yIGFsbCBtYXRjaGluZyBwcm9wZXJ0eSBuYW1lcyAqLw0KKwlmb3JfZWFjaF9wcm9w
ZXJ0eV9vZl9ub2RlKHByaXYtPmR0X25vZGUsIHByb3ApIHsNCisJCWlmIChzdHJjbXAocHJvcC0+
bmFtZSwgIm1hcnZlbGwsMmdoeiIpID09IDApDQorCQkJcHJpdi0+ZGlzYWJsZV8yZyA9IHRydWU7
DQorCQlpZiAoc3RyY21wKHByb3AtPm5hbWUsICJtYXJ2ZWxsLDVnaHoiKSA9PSAwKQ0KKwkJCXBy
aXYtPmRpc2FibGVfNWcgPSB0cnVlOw0KKwkJaWYgKHN0cmNtcChwcm9wLT5uYW1lLCAibWFydmVs
bCxjaGFpbm1hc2siKSA9PSAwKSB7DQorCQkJcHJvcF92YWx1ZSA9IGJlMzJfdG9fY3B1KCooKF9f
YmUzMiAqKXByb3AtPnZhbHVlKSk7DQorCQkJaWYgKHByb3BfdmFsdWUgPT0gMikNCisJCQkJcHJp
di0+YW50ZW5uYV90eCA9IEFOVEVOTkFfVFhfMjsNCisNCisJCQlwcm9wX3ZhbHVlID0gYmUzMl90
b19jcHUoKigoX19iZTMyICopDQorCQkJCQkJIChwcm9wLT52YWx1ZSArIDQpKSk7DQorCQkJaWYg
KHByb3BfdmFsdWUgPT0gMikNCisJCQkJcHJpdi0+YW50ZW5uYV9yeCA9IEFOVEVOTkFfUlhfMjsN
CisJCX0NCisJfQ0KKw0KKwlwcml2LT5wd3Jfbm9kZSA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKHBy
aXYtPmR0X25vZGUsDQorCQkJCQkgICAgICAibWFydmVsbCxwb3dlcnRhYmxlIik7DQorI2VuZGlm
DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG13bF9zZXRfaHRfY2FwcyhzdHJ1Y3QgbXdsX3ByaXYgKnBy
aXYsDQorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmJhbmQpDQorew0K
KwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsNCisNCisJaHcgPSBwcml2LT5odzsNCisNCisJYmFu
ZC0+aHRfY2FwLmh0X3N1cHBvcnRlZCA9IDE7DQorDQorCWJhbmQtPmh0X2NhcC5jYXAgfD0gSUVF
RTgwMjExX0hUX0NBUF9MRFBDX0NPRElORzsNCisJYmFuZC0+aHRfY2FwLmNhcCB8PSBJRUVFODAy
MTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsNCisJYmFuZC0+aHRfY2FwLmNhcCB8PSBJRUVFODAy
MTFfSFRfQ0FQX1NNX1BTOw0KKwliYW5kLT5odF9jYXAuY2FwIHw9IElFRUU4MDIxMV9IVF9DQVBf
U0dJXzIwOw0KKwliYW5kLT5odF9jYXAuY2FwIHw9IElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOw0K
Kw0KKwlpZWVlODAyMTFfaHdfc2V0KGh3LCBBTVBEVV9BR0dSRUdBVElPTik7DQorCWJhbmQtPmh0
X2NhcC5hbXBkdV9mYWN0b3IgPSBJRUVFODAyMTFfSFRfTUFYX0FNUERVXzY0SzsNCisJYmFuZC0+
aHRfY2FwLmFtcGR1X2RlbnNpdHkgPSBJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZXzQ7DQorDQor
CWJhbmQtPmh0X2NhcC5tY3MucnhfbWFza1swXSA9IDB4ZmY7DQorCWJhbmQtPmh0X2NhcC5tY3Mu
cnhfbWFza1sxXSA9IDB4ZmY7DQorCWlmIChwcml2LT5hbnRlbm5hX3J4ID09IEFOVEVOTkFfUlhf
NF9BVVRPKQ0KKwkJYmFuZC0+aHRfY2FwLm1jcy5yeF9tYXNrWzJdID0gMHhmZjsNCisJYmFuZC0+
aHRfY2FwLm1jcy5yeF9tYXNrWzRdID0gMHgwMTsNCisNCisJYmFuZC0+aHRfY2FwLm1jcy50eF9w
YXJhbXMgPSBJRUVFODAyMTFfSFRfTUNTX1RYX0RFRklORUQ7DQorfQ0KKw0KK3N0YXRpYyB2b2lk
IG13bF9zZXRfdmh0X2NhcHMoc3RydWN0IG13bF9wcml2ICpwcml2LA0KKwkJCSAgICAgc3RydWN0
IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqYmFuZCkNCit7DQorCWJhbmQtPnZodF9jYXAudmh0
X3N1cHBvcnRlZCA9IDE7DQorDQorCWJhbmQtPnZodF9jYXAuY2FwIHw9IElFRUU4MDIxMV9WSFRf
Q0FQX01BWF9NUERVX0xFTkdUSF83OTkxOw0KKwliYW5kLT52aHRfY2FwLmNhcCB8PSBJRUVFODAy
MTFfVkhUX0NBUF9SWExEUEM7DQorCWJhbmQtPnZodF9jYXAuY2FwIHw9IElFRUU4MDIxMV9WSFRf
Q0FQX1NIT1JUX0dJXzgwOw0KKwliYW5kLT52aHRfY2FwLmNhcCB8PSBJRUVFODAyMTFfVkhUX0NB
UF9SWFNUQkNfMTsNCisJYmFuZC0+dmh0X2NhcC5jYXAgfD0gSUVFRTgwMjExX1ZIVF9DQVBfU1Vf
QkVBTUZPUk1FUl9DQVBBQkxFOw0KKwliYW5kLT52aHRfY2FwLmNhcCB8PSBJRUVFODAyMTFfVkhU
X0NBUF9TVV9CRUFNRk9STUVFX0NBUEFCTEU7DQorCWJhbmQtPnZodF9jYXAuY2FwIHw9IElFRUU4
MDIxMV9WSFRfQ0FQX01BWF9BX01QRFVfTEVOR1RIX0VYUE9ORU5UX01BU0s7DQorCWJhbmQtPnZo
dF9jYXAuY2FwIHw9IElFRUU4MDIxMV9WSFRfQ0FQX1JYX0FOVEVOTkFfUEFUVEVSTjsNCisJYmFu
ZC0+dmh0X2NhcC5jYXAgfD0gSUVFRTgwMjExX1ZIVF9DQVBfVFhfQU5URU5OQV9QQVRURVJOOw0K
Kw0KKwlpZiAocHJpdi0+YW50ZW5uYV9yeCA9PSBBTlRFTk5BX1JYXzIpDQorCQliYW5kLT52aHRf
Y2FwLnZodF9tY3MucnhfbWNzX21hcCA9IGNwdV90b19sZTE2KDB4ZmZmYSk7DQorCWVsc2UNCisJ
CWJhbmQtPnZodF9jYXAudmh0X21jcy5yeF9tY3NfbWFwID0gY3B1X3RvX2xlMTYoMHhmZmVhKTsN
CisNCisJaWYgKHByaXYtPmFudGVubmFfdHggPT0gQU5URU5OQV9UWF8yKQ0KKwkJYmFuZC0+dmh0
X2NhcC52aHRfbWNzLnR4X21jc19tYXAgPSBjcHVfdG9fbGUxNigweGZmZmEpOw0KKwllbHNlDQor
CQliYW5kLT52aHRfY2FwLnZodF9tY3MudHhfbWNzX21hcCA9IGNwdV90b19sZTE2KDB4ZmZlYSk7
DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG13bF9zZXRfY2FwcyhzdHJ1Y3QgbXdsX3ByaXYgKnByaXYp
DQorew0KKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsNCisNCisJaHcgPSBwcml2LT5odzsNCisN
CisJLyogc2V0IHVwIGJhbmQgaW5mb3JtYXRpb24gZm9yIDIuNEcgKi8NCisJaWYgKCFwcml2LT5k
aXNhYmxlXzJnKSB7DQorCQlCVUlMRF9CVUdfT04oc2l6ZW9mKHByaXYtPmNoYW5uZWxzXzI0KSAh
PQ0KKwkJCSAgICAgc2l6ZW9mKG13bF9jaGFubmVsc18yNCkpOw0KKwkJbWVtY3B5KHByaXYtPmNo
YW5uZWxzXzI0LCBtd2xfY2hhbm5lbHNfMjQsDQorCQkgICAgICAgc2l6ZW9mKG13bF9jaGFubmVs
c18yNCkpOw0KKw0KKwkJQlVJTERfQlVHX09OKHNpemVvZihwcml2LT5yYXRlc18yNCkgIT0gc2l6
ZW9mKG13bF9yYXRlc18yNCkpOw0KKwkJbWVtY3B5KHByaXYtPnJhdGVzXzI0LCBtd2xfcmF0ZXNf
MjQsIHNpemVvZihtd2xfcmF0ZXNfMjQpKTsNCisNCisJCXByaXYtPmJhbmRfMjQuYmFuZCA9IElF
RUU4MDIxMV9CQU5EXzJHSFo7DQorCQlwcml2LT5iYW5kXzI0LmNoYW5uZWxzID0gcHJpdi0+Y2hh
bm5lbHNfMjQ7DQorCQlwcml2LT5iYW5kXzI0Lm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG13bF9j
aGFubmVsc18yNCk7DQorCQlwcml2LT5iYW5kXzI0LmJpdHJhdGVzID0gcHJpdi0+cmF0ZXNfMjQ7
DQorCQlwcml2LT5iYW5kXzI0Lm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKG13bF9yYXRlc18yNCk7
DQorDQorCQltd2xfc2V0X2h0X2NhcHMocHJpdiwgJnByaXYtPmJhbmRfMjQpOw0KKwkJbXdsX3Nl
dF92aHRfY2Fwcyhwcml2LCAmcHJpdi0+YmFuZF8yNCk7DQorDQorCQlody0+d2lwaHktPmJhbmRz
W0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJnByaXYtPmJhbmRfMjQ7DQorCX0NCisNCisJLyogc2V0
IHVwIGJhbmQgaW5mb3JtYXRpb24gZm9yIDVHICovDQorCWlmICghcHJpdi0+ZGlzYWJsZV81Zykg
ew0KKwkJQlVJTERfQlVHX09OKHNpemVvZihwcml2LT5jaGFubmVsc181MCkgIT0NCisJCQkgICAg
IHNpemVvZihtd2xfY2hhbm5lbHNfNTApKTsNCisJCW1lbWNweShwcml2LT5jaGFubmVsc181MCwg
bXdsX2NoYW5uZWxzXzUwLA0KKwkJICAgICAgIHNpemVvZihtd2xfY2hhbm5lbHNfNTApKTsNCisN
CisJCUJVSUxEX0JVR19PTihzaXplb2YocHJpdi0+cmF0ZXNfNTApICE9IHNpemVvZihtd2xfcmF0
ZXNfNTApKTsNCisJCW1lbWNweShwcml2LT5yYXRlc181MCwgbXdsX3JhdGVzXzUwLCBzaXplb2Yo
bXdsX3JhdGVzXzUwKSk7DQorDQorCQlwcml2LT5iYW5kXzUwLmJhbmQgPSBJRUVFODAyMTFfQkFO
RF81R0haOw0KKwkJcHJpdi0+YmFuZF81MC5jaGFubmVscyA9IHByaXYtPmNoYW5uZWxzXzUwOw0K
KwkJcHJpdi0+YmFuZF81MC5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShtd2xfY2hhbm5lbHNfNTAp
Ow0KKwkJcHJpdi0+YmFuZF81MC5iaXRyYXRlcyA9IHByaXYtPnJhdGVzXzUwOw0KKwkJcHJpdi0+
YmFuZF81MC5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShtd2xfcmF0ZXNfNTApOw0KKw0KKwkJbXds
X3NldF9odF9jYXBzKHByaXYsICZwcml2LT5iYW5kXzUwKTsNCisJCW13bF9zZXRfdmh0X2NhcHMo
cHJpdiwgJnByaXYtPmJhbmRfNTApOw0KKw0KKwkJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFf
QkFORF81R0haXSA9ICZwcml2LT5iYW5kXzUwOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXds
X3dsX2luaXQoc3RydWN0IG13bF9wcml2ICpwcml2KQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV9o
dyAqaHc7DQorCWludCByYzsNCisJaW50IGk7DQorDQorCWh3ID0gcHJpdi0+aHc7DQorDQorCWh3
LT5leHRyYV90eF9oZWFkcm9vbSA9IFNZU0FEUFRfTUlOX0JZVEVTX0hFQURST09NOw0KKwlody0+
cXVldWVzID0gU1lTQURQVF9UWF9XTU1fUVVFVUVTOw0KKw0KKwkvKiBTZXQgcnNzaSB2YWx1ZXMg
dG8gZEJtICovDQorCWllZWU4MDIxMV9od19zZXQoaHcsIFNJR05BTF9EQk0pOw0KKwlpZWVlODAy
MTFfaHdfc2V0KGh3LCBIQVNfUkFURV9DT05UUk9MKTsNCisNCisJLyogQXNrIG1hYzgwMjExIG5v
dCB0byB0cmlnZ2VyIFBTIG1vZGUNCisJICogYmFzZWQgb24gUE0gYml0IG9mIGluY29taW5nIGZy
YW1lcy4NCisJICovDQorCWllZWU4MDIxMV9od19zZXQoaHcsIEFQX0xJTktfUFMpOw0KKw0KKwlo
dy0+dmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXdsX3ZpZik7DQorCWh3LT5zdGFfZGF0
YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBtd2xfc3RhKTsNCisNCisJcHJpdi0+YXBfbWFjaWRzX3N1
cHBvcnRlZCA9IDB4MDAwMGZmZmY7DQorCXByaXYtPnN0YV9tYWNpZHNfc3VwcG9ydGVkID0gMHgw
MDAxMDAwMDsNCisJcHJpdi0+bWFjaWRzX3VzZWQgPSAwOw0KKwlJTklUX0xJU1RfSEVBRCgmcHJp
di0+dmlmX2xpc3QpOw0KKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+c3RhX2xpc3QpOw0KKw0KKwkv
KiBTZXQgZGVmYXVsdCByYWRpbyBzdGF0ZSwgcHJlYW1ibGUgYW5kIHdtbSAqLw0KKwlwcml2LT5y
YWRpb19vbiA9IGZhbHNlOw0KKwlwcml2LT5yYWRpb19zaG9ydF9wcmVhbWJsZSA9IGZhbHNlOw0K
Kwlwcml2LT53bW1fZW5hYmxlZCA9IGZhbHNlOw0KKw0KKwlwcml2LT5wb3dpbml0ZWQgPSAwOw0K
Kw0KKwkvKiBIYW5kbGUgd2F0Y2hkb2cgYmEgZXZlbnRzICovDQorCUlOSVRfV09SSygmcHJpdi0+
d2F0Y2hkb2dfYmFfaGFuZGxlLCBtd2xfd2F0Y2hkb2dfYmFfZXZlbnRzKTsNCisNCisJdGFza2xl
dF9pbml0KCZwcml2LT50eF90YXNrLCAodm9pZCAqKW13bF90eF9kb25lLCAodW5zaWduZWQgbG9u
Zylodyk7DQorCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+dHhfdGFzayk7DQorCXRhc2tsZXRfaW5p
dCgmcHJpdi0+cnhfdGFzaywgKHZvaWQgKiltd2xfcnhfcmVjdiwgKHVuc2lnbmVkIGxvbmcpaHcp
Ow0KKwl0YXNrbGV0X2Rpc2FibGUoJnByaXYtPnJ4X3Rhc2spOw0KKwl0YXNrbGV0X2luaXQoJnBy
aXYtPnFlX3Rhc2ssDQorCQkgICAgICh2b2lkICopbXdsX3R4X2ZsdXNoX2Ftc2R1LCAodW5zaWdu
ZWQgbG9uZylodyk7DQorCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+cWVfdGFzayk7DQorCXByaXYt
PnR4cV9saW1pdCA9IFNZU0FEUFRfVFhfUVVFVUVfTElNSVQ7DQorCXByaXYtPmlzX3R4X3NjaGVk
dWxlID0gZmFsc2U7DQorCXByaXYtPnJlY3ZfbGltaXQgPSBTWVNBRFBUX1JFQ0VJVkVfTElNSVQ7
DQorCXByaXYtPmlzX3J4X3NjaGVkdWxlID0gZmFsc2U7DQorCXByaXYtPmlzX3FlX3NjaGVkdWxl
ID0gZmFsc2U7DQorDQorCXNwaW5fbG9ja19pbml0KCZwcml2LT50eF9kZXNjX2xvY2spOw0KKwlz
cGluX2xvY2tfaW5pdCgmcHJpdi0+cnhfZGVzY19sb2NrKTsNCisJc3Bpbl9sb2NrX2luaXQoJnBy
aXYtPmZ3Y21kX2xvY2spOw0KKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+dmlmX2xvY2spOw0KKwlz
cGluX2xvY2tfaW5pdCgmcHJpdi0+c3RhX2xvY2spOw0KKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+
c3RyZWFtX2xvY2spOw0KKw0KKwlyYyA9IG13bF90eF9pbml0KGh3KTsNCisJaWYgKHJjKSB7DQor
CQl3aXBoeV9lcnIoaHctPndpcGh5LCAiJXM6IGZhaWwgdG8gaW5pdGlhbGl6ZSBUWFxuIiwNCisJ
CQkgIE1XTF9EUlZfTkFNRSk7DQorCQlnb3RvIGVycl9td2xfdHhfaW5pdDsNCisJfQ0KKw0KKwly
YyA9IG13bF9yeF9pbml0KGh3KTsNCisJaWYgKHJjKSB7DQorCQl3aXBoeV9lcnIoaHctPndpcGh5
LCAiJXM6IGZhaWwgdG8gaW5pdGlhbGl6ZSBSWFxuIiwNCisJCQkgIE1XTF9EUlZfTkFNRSk7DQor
CQlnb3RvIGVycl9td2xfcnhfaW5pdDsNCisJfQ0KKw0KKwlyYyA9IG13bF9md2NtZF9nZXRfaHdf
c3BlY3MoaHcpOw0KKwlpZiAocmMpIHsNCisJCXdpcGh5X2Vycihody0+d2lwaHksICIlczogZmFp
bCB0byBnZXQgSFcgc3BlY2lmaWNhdGlvbnNcbiIsDQorCQkJICBNV0xfRFJWX05BTUUpOw0KKwkJ
Z290byBlcnJfZ2V0X2h3X3NwZWNzOw0KKwl9DQorDQorCVNFVF9JRUVFODAyMTFfUEVSTV9BRERS
KGh3LCBwcml2LT5od19kYXRhLm1hY19hZGRyKTsNCisNCisJd3JpdGVsKHByaXYtPmRlc2NfZGF0
YVswXS5wcGh5c190eF9yaW5nLA0KKwkgICAgICAgcHJpdi0+aW9iYXNlMCArIHByaXYtPmRlc2Nf
ZGF0YVswXS53Y2JfYmFzZSk7DQorCWZvciAoaSA9IDE7IGkgPCBTWVNBRFBUX1RPVEFMX1RYX1FV
RVVFUzsgaSsrKQ0KKwkJd3JpdGVsKHByaXYtPmRlc2NfZGF0YVtpXS5wcGh5c190eF9yaW5nLA0K
KwkJICAgICAgIHByaXYtPmlvYmFzZTAgKyBwcml2LT5kZXNjX2RhdGFbaV0ud2NiX2Jhc2UpOw0K
Kwl3cml0ZWwocHJpdi0+ZGVzY19kYXRhWzBdLnBwaHlzX3J4X3JpbmcsDQorCSAgICAgICBwcml2
LT5pb2Jhc2UwICsgcHJpdi0+ZGVzY19kYXRhWzBdLnJ4X2Rlc2NfcmVhZCk7DQorCXdyaXRlbChw
cml2LT5kZXNjX2RhdGFbMF0ucHBoeXNfcnhfcmluZywNCisJICAgICAgIHByaXYtPmlvYmFzZTAg
KyBwcml2LT5kZXNjX2RhdGFbMF0ucnhfZGVzY193cml0ZSk7DQorDQorCXJjID0gbXdsX2Z3Y21k
X3NldF9od19zcGVjcyhodyk7DQorCWlmIChyYykgew0KKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwg
IiVzOiBmYWlsIHRvIHNldCBIVyBzcGVjaWZpY2F0aW9uc1xuIiwNCisJCQkgIE1XTF9EUlZfTkFN
RSk7DQorCQlnb3RvIGVycl9zZXRfaHdfc3BlY3M7DQorCX0NCisNCisJd2lwaHlfaW5mbyhody0+
d2lwaHksDQorCQkgICAiZmlybXdhcmUgdmVyc2lvbjogMHgleFxuIiwgcHJpdi0+aHdfZGF0YS5m
d19yZWxlYXNlX251bSk7DQorDQorCW13bF9md2NtZF9yYWRpb19kaXNhYmxlKGh3KTsNCisNCisJ
bXdsX2Z3Y21kX3JmX2FudGVubmEoaHcsIFdMX0FOVEVOTkFUWVBFX1RYLCBwcml2LT5hbnRlbm5h
X3R4KTsNCisNCisJbXdsX2Z3Y21kX3JmX2FudGVubmEoaHcsIFdMX0FOVEVOTkFUWVBFX1JYLCBw
cml2LT5hbnRlbm5hX3J4KTsNCisNCisJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSAwOw0K
Kwlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfQVApOw0K
KyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSA0KKwlody0+d2lwaHktPmludGVyZmFjZV9tb2Rl
cyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCk7DQorI2VuZGlmDQorCWh3LT53aXBo
eS0+aW50ZXJmYWNlX21vZGVzIHw9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTsNCisJaHct
PndpcGh5LT5pZmFjZV9jb21iaW5hdGlvbnMgPSAmYXBfaWZfY29tYjsNCisJaHctPndpcGh5LT5u
X2lmYWNlX2NvbWJpbmF0aW9ucyA9IDE7DQorDQorCW13bF9zZXRfY2Fwcyhwcml2KTsNCisNCisJ
cmMgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoaHcpOw0KKwlpZiAocmMpIHsNCisJCXdpcGh5X2Vy
cihody0+d2lwaHksICIlczogZmFpbCB0byByZWdpc3RlciBkZXZpY2VcbiIsDQorCQkJICBNV0xf
RFJWX05BTUUpOw0KKwkJZ290byBlcnJfcmVnaXN0ZXJfaHc7DQorCX0NCisNCisJcmMgPSByZXF1
ZXN0X2lycShwcml2LT5wZGV2LT5pcnEsIG13bF9pc3IsDQorCQkJIElSUUZfU0hBUkVELCBNV0xf
RFJWX05BTUUsIGh3KTsNCisJaWYgKHJjKSB7DQorCQlwcml2LT5pcnEgPSAtMTsNCisJCXdpcGh5
X2Vycihody0+d2lwaHksICJmYWlsIHRvIHJlZ2lzdGVyIElSUSBoYW5kbGVyXG4iKTsNCisJCWdv
dG8gZXJyX3JlZ2lzdGVyX2lycTsNCisJfQ0KKwlwcml2LT5pcnEgPSBwcml2LT5wZGV2LT5pcnE7
DQorDQorCXJldHVybiByYzsNCisNCitlcnJfcmVnaXN0ZXJfaXJxOg0KK2Vycl9yZWdpc3Rlcl9o
dzoNCitlcnJfc2V0X2h3X3NwZWNzOg0KK2Vycl9nZXRfaHdfc3BlY3M6DQorDQorCW13bF9yeF9k
ZWluaXQoaHcpOw0KKw0KK2Vycl9td2xfcnhfaW5pdDoNCisNCisJbXdsX3R4X2RlaW5pdChodyk7
DQorDQorZXJyX213bF90eF9pbml0Og0KKw0KKwl3aXBoeV9lcnIoaHctPndpcGh5LCAiaW5pdCBm
YWlsXG4iKTsNCisNCisJcmV0dXJuIHJjOw0KK30NCisNCitzdGF0aWMgdm9pZCBtd2xfd2xfZGVp
bml0KHN0cnVjdCBtd2xfcHJpdiAqcHJpdikNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3
Ow0KKw0KKwlodyA9IHByaXYtPmh3Ow0KKw0KKwlpZiAocHJpdi0+aXJxICE9IC0xKSB7DQorCQlm
cmVlX2lycShwcml2LT5wZGV2LT5pcnEsIGh3KTsNCisJCXByaXYtPmlycSA9IC0xOw0KKwl9DQor
DQorCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGh3KTsNCisJbXdsX3J4X2RlaW5pdChodyk7DQor
CW13bF90eF9kZWluaXQoaHcpOw0KKwl0YXNrbGV0X2tpbGwoJnByaXYtPnFlX3Rhc2spOw0KKwl0
YXNrbGV0X2tpbGwoJnByaXYtPnJ4X3Rhc2spOw0KKwl0YXNrbGV0X2tpbGwoJnByaXYtPnR4X3Rh
c2spOw0KKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT53YXRjaGRvZ19iYV9oYW5kbGUpOw0KKwlt
d2xfZndjbWRfcmVzZXQoaHcpOw0KK30NCisNCitzdGF0aWMgaW50IG13bF9wcm9iZShzdHJ1Y3Qg
cGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQ0KK3sNCisJc3Rh
dGljIGJvb2wgcHJpbnRlZF92ZXJzaW9uOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsNCisJ
c3RydWN0IG13bF9wcml2ICpwcml2Ow0KKwljb25zdCBjaGFyICpmd19uYW1lOw0KKwlpbnQgcmMg
PSAwOw0KKw0KKwlpZiAoaWQtPmRyaXZlcl9kYXRhID49IE1XTFVOS05PV04pDQorCQlyZXR1cm4g
LUVOT0RFVjsNCisNCisJaWYgKCFwcmludGVkX3ZlcnNpb24pIHsNCisJCXByX2luZm8oIjw8JXMg
dmVyc2lvbiAlcz4+IiwNCisJCQlNV0xfREVTQywgTVdMX0RSVl9WRVJTSU9OKTsNCisJCXByaW50
ZWRfdmVyc2lvbiA9IHRydWU7DQorCX0NCisNCisJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2
KTsNCisJaWYgKHJjKSB7DQorCQlwcl9lcnIoIiVzOiBjYW5ub3QgZW5hYmxlIG5ldyBQQ0kgZGV2
aWNlIiwNCisJCSAgICAgICBNV0xfRFJWX05BTUUpOw0KKwkJcmV0dXJuIHJjOw0KKwl9DQorDQor
CXJjID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsNCisJaWYgKHJj
KSB7DQorCQlwcl9lcnIoIiVzOiAzMi1iaXQgUENJIERNQSBub3Qgc3VwcG9ydGVkIiwNCisJCSAg
ICAgICBNV0xfRFJWX05BTUUpOw0KKwkJZ290byBlcnJfcGNpX2Rpc2FibGVfZGV2aWNlOw0KKwl9
DQorDQorCXBjaV9zZXRfbWFzdGVyKHBkZXYpOw0KKw0KKwlodyA9IGllZWU4MDIxMV9hbGxvY19o
dyhzaXplb2YoKnByaXYpLCAmbXdsX21hYzgwMjExX29wcyk7DQorCWlmICghaHcpIHsNCisJCXBy
X2VycigiJXM6IGllZWU4MDIxMSBhbGxvYyBmYWlsZWQiLA0KKwkJICAgICAgIE1XTF9EUlZfTkFN
RSk7DQorCQlyYyA9IC1FTk9NRU07DQorCQlnb3RvIGVycl9wY2lfZGlzYWJsZV9kZXZpY2U7DQor
CX0NCisNCisJU0VUX0lFRUU4MDIxMV9ERVYoaHcsICZwZGV2LT5kZXYpOw0KKwlwY2lfc2V0X2Ry
dmRhdGEocGRldiwgaHcpOw0KKw0KKwlwcml2ID0gaHctPnByaXY7DQorCXByaXYtPmh3ID0gaHc7
DQorCXByaXYtPnBkZXYgPSBwZGV2Ow0KKwlwcml2LT5jaGlwX3R5cGUgPSBpZC0+ZHJpdmVyX2Rh
dGE7DQorCXByaXYtPmRpc2FibGVfMmcgPSBmYWxzZTsNCisJcHJpdi0+ZGlzYWJsZV81ZyA9IGZh
bHNlOw0KKwlwcml2LT5hbnRlbm5hX3R4ID0gbXdsX2NoaXBfdGJsW3ByaXYtPmNoaXBfdHlwZV0u
YW50ZW5uYV90eDsNCisJcHJpdi0+YW50ZW5uYV9yeCA9IG13bF9jaGlwX3RibFtwcml2LT5jaGlw
X3R5cGVdLmFudGVubmFfcng7DQorDQorCXJjID0gbXdsX2FsbG9jX3BjaV9yZXNvdXJjZShwcml2
KTsNCisJaWYgKHJjKQ0KKwkJZ290byBlcnJfYWxsb2NfcGNpX3Jlc291cmNlOw0KKw0KKwlmd19u
YW1lID0gbXdsX2NoaXBfdGJsW3ByaXYtPmNoaXBfdHlwZV0uZndfaW1hZ2U7DQorDQorI2lmZGVm
IENPTkZJR19TVVBQT1JUX01GRw0KKwlpZiAobWZnX21vZGUpDQorCQltd2xfbWZnX2hhbmRsZXJf
aW5pdChwcml2KTsNCisjZW5kaWYNCisNCisJcmMgPSBtd2xfaW5pdF9maXJtd2FyZShwcml2LCBm
d19uYW1lKTsNCisNCisJaWYgKHJjKSB7DQorCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiJXM6IGZh
aWwgdG8gaW5pdGlhbGl6ZSBmaXJtd2FyZVxuIiwNCisJCQkgIE1XTF9EUlZfTkFNRSk7DQorCQln
b3RvIGVycl9pbml0X2Zpcm13YXJlOw0KKwl9DQorDQorCS8qIGZpcm13YXJlIGlzIGxvYWRlZCB0
byBIL1csIGl0IGNhbiBiZSByZWxlYXNlZCBub3cgKi8NCisjaWZkZWYgQ09ORklHX1NVUFBPUlRf
TUZHDQorCWlmIChwcml2LT5tZmdfbW9kZSkNCisJCW13bF9tZmdfcmVsZWFzZV9maXJtd2FyZShw
cml2KTsNCisJZWxzZQ0KKyNlbmRpZg0KKwkJcmVsZWFzZV9maXJtd2FyZShwcml2LT5md191Y29k
ZSk7DQorDQorCW13bF9wcm9jZXNzX29mX2R0cyhwcml2KTsNCisNCisJcmMgPSBtd2xfd2xfaW5p
dChwcml2KTsNCisJaWYgKHJjKSB7DQorCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiJXM6IGZhaWwg
dG8gaW5pdGlhbGl6ZSB3aXJlbGVzcyBsYW5cbiIsDQorCQkJICBNV0xfRFJWX05BTUUpOw0KKwkJ
Z290byBlcnJfd2xfaW5pdDsNCisJfQ0KKw0KKwl3aXBoeV9pbmZvKHByaXYtPmh3LT53aXBoeSwN
CisJCSAgICIyRzogJXNcbiIsIHByaXYtPmRpc2FibGVfMmcgPyAiZGlzYWJsZSIgOiAiZW5hYmxl
Iik7DQorCXdpcGh5X2luZm8ocHJpdi0+aHctPndpcGh5LA0KKwkJICAgIjVHOiAlc1xuIiwgcHJp
di0+ZGlzYWJsZV81ZyA/ICJkaXNhYmxlIiA6ICJlbmFibGUiKTsNCisNCisJaWYgKHByaXYtPmFu
dGVubmFfdHggPT0gQU5URU5OQV9UWF80X0FVVE8pDQorCQl3aXBoeV9pbmZvKHByaXYtPmh3LT53
aXBoeSwgIlRYOiA0IGFudGVubmFzXG4iKTsNCisJZWxzZSBpZiAocHJpdi0+YW50ZW5uYV90eCA9
PSBBTlRFTk5BX1RYXzIpDQorCQl3aXBoeV9pbmZvKHByaXYtPmh3LT53aXBoeSwgIlRYOiAyIGFu
dGVubmFzXG4iKTsNCisJZWxzZQ0KKwkJd2lwaHlfaW5mbyhwcml2LT5ody0+d2lwaHksICJUWDog
dW5rbm93blxuIik7DQorCWlmIChwcml2LT5hbnRlbm5hX3J4ID09IEFOVEVOTkFfUlhfNF9BVVRP
KQ0KKwkJd2lwaHlfaW5mbyhwcml2LT5ody0+d2lwaHksICJSWDogNCBhbnRlbm5hc1xuIik7DQor
CWVsc2UgaWYgKHByaXYtPmFudGVubmFfcnggPT0gQU5URU5OQV9SWF8yKQ0KKwkJd2lwaHlfaW5m
byhwcml2LT5ody0+d2lwaHksICJSWDogMiBhbnRlbm5hc1xuIik7DQorCWVsc2UNCisJCXdpcGh5
X2luZm8ocHJpdi0+aHctPndpcGh5LCAiUlg6IHVua25vd25cbiIpOw0KKw0KKyNpZmRlZiBDT05G
SUdfREVCVUdfRlMNCisJbXdsX2RlYnVnZnNfaW5pdChodyk7DQorI2VuZGlmDQorDQorCXJldHVy
biByYzsNCisNCitlcnJfd2xfaW5pdDoNCitlcnJfaW5pdF9maXJtd2FyZToNCisNCisJbXdsX2Z3
Y21kX3Jlc2V0KGh3KTsNCisNCitlcnJfYWxsb2NfcGNpX3Jlc291cmNlOg0KKw0KKwlwY2lfc2V0
X2RydmRhdGEocGRldiwgTlVMTCk7DQorCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsNCisNCitlcnJf
cGNpX2Rpc2FibGVfZGV2aWNlOg0KKw0KKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7DQorDQor
CXJldHVybiByYzsNCit9DQorDQorc3RhdGljIHZvaWQgbXdsX3JlbW92ZShzdHJ1Y3QgcGNpX2Rl
diAqcGRldikNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRh
KHBkZXYpOw0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXY7DQorDQorCWlmICghaHcpDQorCQlyZXR1
cm47DQorDQorCXByaXYgPSBody0+cHJpdjsNCisNCisJbXdsX3dsX2RlaW5pdChwcml2KTsNCisJ
cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOw0KKwlpZWVlODAyMTFfZnJlZV9odyhodyk7DQor
CXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsNCisNCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTDQor
CW13bF9kZWJ1Z2ZzX3JlbW92ZShodyk7DQorI2VuZGlmDQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3Qg
cGNpX2RyaXZlciBtd2xfcGNpX2RyaXZlciA9IHsNCisJLm5hbWUgICAgID0gTVdMX0RSVl9OQU1F
LA0KKwkuaWRfdGFibGUgPSBtd2xfcGNpX2lkX3RibCwNCisJLnByb2JlICAgID0gbXdsX3Byb2Jl
LA0KKwkucmVtb3ZlICAgPSBtd2xfcmVtb3ZlDQorfTsNCisNCittb2R1bGVfcGNpX2RyaXZlciht
d2xfcGNpX2RyaXZlcik7DQorDQorTU9EVUxFX0RFU0NSSVBUSU9OKE1XTF9ERVNDKTsNCitNT0RV
TEVfVkVSU0lPTihNV0xfRFJWX1ZFUlNJT04pOw0KK01PRFVMRV9BVVRIT1IoIk1hcnZlbGwgU2Vt
aWNvbmR1Y3RvciwgSW5jLiIpOw0KK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsNCitNT0RVTEVf
U1VQUE9SVEVEX0RFVklDRShNV0xfREVWX05BTUUpOw0KK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNp
LCBtd2xfcGNpX2lkX3RibCk7DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFy
dmVsbC9td2x3aWZpL3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkv
cnguYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjQzMDgxMDcNCi0tLSAv
ZGV2L251bGwNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9yeC5j
DQpAQCAtMCwwICsxLDYyNCBAQA0KKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIE1h
cnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuDQorICoNCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRo
ZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbA0KKyAqIEx0
ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJz
aW9uIDIsIEp1bmUgMTk5MQ0KKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRp
c3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4NCisgKiBhY2NvcmRhbmNlIHdpdGgg
dGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gN
CisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuDQorICoNCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9V
VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQ0KKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UNCisg
KiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlv
bmFsIGRldGFpbHMgYWJvdXQNCisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuDQorICovDQor
DQorLyogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgaW1wbGVtZW50cyByZWNlaXZlIHJlbGF0ZWQg
ZnVuY3Rpb25zLiAqLw0KKw0KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPg0KKyNpbmNs
dWRlIDxsaW51eC9za2J1ZmYuaD4NCisNCisjaW5jbHVkZSAic3lzYWRwdC5oIg0KKyNpbmNsdWRl
ICJkZXYuaCINCisjaW5jbHVkZSAicnguaCINCisNCisjZGVmaW5lIE1BWF9OVU1fUlhfUklOR19C
WVRFUyAgKFNZU0FEUFRfTUFYX05VTV9SWF9ERVNDICogXA0KKwkJCQlzaXplb2Yoc3RydWN0IG13
bF9yeF9kZXNjKSkNCisNCisjZGVmaW5lIE1BWF9OVU1fUlhfSE5ETF9CWVRFUyAgKFNZU0FEUFRf
TUFYX05VTV9SWF9ERVNDICogXA0KKwkJCQlzaXplb2Yoc3RydWN0IG13bF9yeF9obmRsKSkNCisN
CisjZGVmaW5lIERFQ1JZUFRfRVJSX01BU0sgICAgICAgIDB4ODANCisjZGVmaW5lIEdFTkVSQUxf
REVDUllQVF9FUlIgICAgIDB4RkYNCisjZGVmaW5lIFRLSVBfREVDUllQVF9NSUNfRVJSICAgIDB4
MDINCisjZGVmaW5lIFdFUF9ERUNSWVBUX0lDVl9FUlIgICAgIDB4MDQNCisjZGVmaW5lIFRLSVBf
REVDUllQVF9JQ1ZfRVJSICAgIDB4MDgNCisNCisjZGVmaW5lIFc4MzZYX1JTU0lfT0ZGU0VUICAg
ICAgIDgNCisNCisvKiBSZWNlaXZlIHJhdGUgaW5mb3JtYXRpb24gY29uc3RhbnRzICovDQorI2Rl
ZmluZSBSWF9SQVRFX0lORk9fRk9STUFUXzExQSAgICAgICAwDQorI2RlZmluZSBSWF9SQVRFX0lO
Rk9fRk9STUFUXzExQiAgICAgICAxDQorI2RlZmluZSBSWF9SQVRFX0lORk9fRk9STUFUXzExTiAg
ICAgICAyDQorI2RlZmluZSBSWF9SQVRFX0lORk9fRk9STUFUXzExQUMgICAgICA0DQorDQorI2Rl
ZmluZSBSWF9SQVRFX0lORk9fSFQyMCAgICAgICAgICAgICAwDQorI2RlZmluZSBSWF9SQVRFX0lO
Rk9fSFQ0MCAgICAgICAgICAgICAxDQorI2RlZmluZSBSWF9SQVRFX0lORk9fSFQ4MCAgICAgICAg
ICAgICAyDQorDQorI2RlZmluZSBSWF9SQVRFX0lORk9fTE9OR19JTlRFUlZBTCAgICAwDQorI2Rl
ZmluZSBSWF9SQVRFX0lORk9fU0hPUlRfSU5URVJWQUwgICAxDQorDQorc3RhdGljIGludCBtd2xf
cnhfcmluZ19hbGxvYyhzdHJ1Y3QgbXdsX3ByaXYgKnByaXYpDQorew0KKwlzdHJ1Y3QgbXdsX2Rl
c2NfZGF0YSAqZGVzYzsNCisNCisJZGVzYyA9ICZwcml2LT5kZXNjX2RhdGFbMF07DQorDQorCWRl
c2MtPnByeF9yaW5nID0gKHN0cnVjdCBtd2xfcnhfZGVzYyAqKQ0KKwkJZG1hX2FsbG9jX2NvaGVy
ZW50KCZwcml2LT5wZGV2LT5kZXYsDQorCQkJCSAgIE1BWF9OVU1fUlhfUklOR19CWVRFUywNCisJ
CQkJICAgJmRlc2MtPnBwaHlzX3J4X3JpbmcsDQorCQkJCSAgIEdGUF9LRVJORUwpOw0KKw0KKwlp
ZiAoIWRlc2MtPnByeF9yaW5nKSB7DQorCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LCAiY2Fu
bm90IGFsbG9jIG1lbVxuIik7DQorCQlyZXR1cm4gLUVOT01FTTsNCisJfQ0KKw0KKwltZW1zZXQo
ZGVzYy0+cHJ4X3JpbmcsIDB4MDAsIE1BWF9OVU1fUlhfUklOR19CWVRFUyk7DQorDQorCWRlc2Mt
PnJ4X2huZGwgPSBrbWFsbG9jKE1BWF9OVU1fUlhfSE5ETF9CWVRFUywgR0ZQX0tFUk5FTCk7DQor
DQorCWlmICghZGVzYy0+cnhfaG5kbCkgew0KKwkJZG1hX2ZyZWVfY29oZXJlbnQoJnByaXYtPnBk
ZXYtPmRldiwNCisJCQkJICBNQVhfTlVNX1JYX1JJTkdfQllURVMsDQorCQkJCSAgZGVzYy0+cHJ4
X3JpbmcsDQorCQkJCSAgZGVzYy0+cHBoeXNfcnhfcmluZyk7DQorCQlyZXR1cm4gLUVOT01FTTsN
CisJfQ0KKw0KKwltZW1zZXQoZGVzYy0+cnhfaG5kbCwgMHgwMCwgTUFYX05VTV9SWF9ITkRMX0JZ
VEVTKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXdsX3J4X3JpbmdfaW5p
dChzdHJ1Y3QgbXdsX3ByaXYgKnByaXYpDQorew0KKwlzdHJ1Y3QgbXdsX2Rlc2NfZGF0YSAqZGVz
YzsNCisJaW50IGk7DQorCXN0cnVjdCBtd2xfcnhfaG5kbCAqcnhfaG5kbDsNCisJZG1hX2FkZHJf
dCBkbWE7DQorCXUzMiB2YWw7DQorDQorCWRlc2MgPSAmcHJpdi0+ZGVzY19kYXRhWzBdOw0KKw0K
KwlpZiAoZGVzYy0+cHJ4X3JpbmcpIHsNCisJCWRlc2MtPnJ4X2J1Zl9zaXplID0gU1lTQURQVF9N
QVhfQUdHUl9TSVpFOw0KKw0KKwkJZm9yIChpID0gMDsgaSA8IFNZU0FEUFRfTUFYX05VTV9SWF9E
RVNDOyBpKyspIHsNCisJCQlyeF9obmRsID0gJmRlc2MtPnJ4X2huZGxbaV07DQorCQkJcnhfaG5k
bC0+cHNrX2J1ZmYgPQ0KKwkJCQlkZXZfYWxsb2Nfc2tiKGRlc2MtPnJ4X2J1Zl9zaXplKTsNCisN
CisJCQlpZiAoIXJ4X2huZGwtPnBza19idWZmKSB7DQorCQkJCXdpcGh5X2Vycihwcml2LT5ody0+
d2lwaHksDQorCQkJCQkgICJyeGRlc2MgJWk6IG5vIHNrYnVmZiBhdmFpbGFibGVcbiIsDQorCQkJ
CQkgIGkpOw0KKwkJCQlyZXR1cm4gLUVOT01FTTsNCisJCQl9DQorDQorCQkJc2tiX3Jlc2VydmUo
cnhfaG5kbC0+cHNrX2J1ZmYsDQorCQkJCSAgICBTWVNBRFBUX01JTl9CWVRFU19IRUFEUk9PTSk7
DQorCQkJZGVzYy0+cHJ4X3JpbmdbaV0ucnhfY29udHJvbCA9DQorCQkJCUVBR0xFX1JYRF9DVFJM
X0RSSVZFUl9PV047DQorCQkJZGVzYy0+cHJ4X3JpbmdbaV0uc3RhdHVzID0gRUFHTEVfUlhEX1NU
QVRVU19PSzsNCisJCQlkZXNjLT5wcnhfcmluZ1tpXS5xb3NfY3RybCA9IDB4MDAwMDsNCisJCQlk
ZXNjLT5wcnhfcmluZ1tpXS5jaGFubmVsID0gMHgwMDsNCisJCQlkZXNjLT5wcnhfcmluZ1tpXS5y
c3NpID0gMHgwMDsNCisJCQlkZXNjLT5wcnhfcmluZ1tpXS5wa3RfbGVuID0NCisJCQkJY3B1X3Rv
X2xlMTYoU1lTQURQVF9NQVhfQUdHUl9TSVpFKTsNCisJCQlkbWEgPSBwY2lfbWFwX3NpbmdsZShw
cml2LT5wZGV2LA0KKwkJCQkJICAgICByeF9obmRsLT5wc2tfYnVmZi0+ZGF0YSwNCisJCQkJCSAg
ICAgZGVzYy0+cnhfYnVmX3NpemUsDQorCQkJCQkgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7DQor
CQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwcml2LT5wZGV2LCBkbWEpKSB7DQorCQkJCXdp
cGh5X2Vycihwcml2LT5ody0+d2lwaHksDQorCQkJCQkgICJmYWlsZWQgdG8gbWFwIHBjaSBtZW1v
cnkhXG4iKTsNCisJCQkJcmV0dXJuIC1FTk9NRU07DQorCQkJfQ0KKwkJCWRlc2MtPnByeF9yaW5n
W2ldLnBwaHlzX2J1ZmZfZGF0YSA9IGNwdV90b19sZTMyKGRtYSk7DQorCQkJdmFsID0gKHUzMilk
ZXNjLT5wcGh5c19yeF9yaW5nICsNCisJCQkgICAgICAoKGkgKyAxKSAqIHNpemVvZihzdHJ1Y3Qg
bXdsX3J4X2Rlc2MpKTsNCisJCQlkZXNjLT5wcnhfcmluZ1tpXS5wcGh5c19uZXh0ID0gY3B1X3Rv
X2xlMzIodmFsKTsNCisJCQlyeF9obmRsLT5wZGVzYyA9ICZkZXNjLT5wcnhfcmluZ1tpXTsNCisJ
CQlpZiAoaSA8IChTWVNBRFBUX01BWF9OVU1fUlhfREVTQyAtIDEpKQ0KKwkJCQlyeF9obmRsLT5w
bmV4dCA9ICZkZXNjLT5yeF9obmRsW2kgKyAxXTsNCisJCX0NCisJCWRlc2MtPnByeF9yaW5nW1NZ
U0FEUFRfTUFYX05VTV9SWF9ERVNDIC0gMV0ucHBoeXNfbmV4dCA9DQorCQkJY3B1X3RvX2xlMzIo
KHUzMilkZXNjLT5wcGh5c19yeF9yaW5nKTsNCisJCWRlc2MtPnJ4X2huZGxbU1lTQURQVF9NQVhf
TlVNX1JYX0RFU0MgLSAxXS5wbmV4dCA9DQorCQkJJmRlc2MtPnJ4X2huZGxbMF07DQorCQlkZXNj
LT5wbmV4dF9yeF9obmRsID0gJmRlc2MtPnJ4X2huZGxbMF07DQorDQorCQlyZXR1cm4gMDsNCisJ
fQ0KKw0KKwl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LCAibm8gdmFsaWQgUlggbWVtXG4iKTsN
CisNCisJcmV0dXJuIC1FTk9NRU07DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG13bF9yeF9yaW5nX2Ns
ZWFudXAoc3RydWN0IG13bF9wcml2ICpwcml2KQ0KK3sNCisJc3RydWN0IG13bF9kZXNjX2RhdGEg
KmRlc2M7DQorCWludCBpOw0KKwlzdHJ1Y3QgbXdsX3J4X2huZGwgKnJ4X2huZGw7DQorDQorCWRl
c2MgPSAmcHJpdi0+ZGVzY19kYXRhWzBdOw0KKw0KKwlpZiAoZGVzYy0+cHJ4X3JpbmcpIHsNCisJ
CWZvciAoaSA9IDA7IGkgPCBTWVNBRFBUX01BWF9OVU1fUlhfREVTQzsgaSsrKSB7DQorCQkJcnhf
aG5kbCA9ICZkZXNjLT5yeF9obmRsW2ldOw0KKwkJCWlmICghcnhfaG5kbC0+cHNrX2J1ZmYpDQor
CQkJCWNvbnRpbnVlOw0KKw0KKwkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwNCisJCQkJ
CSBsZTMyX3RvX2NwdQ0KKwkJCQkJIChyeF9obmRsLT5wZGVzYy0+cHBoeXNfYnVmZl9kYXRhKSwN
CisJCQkJCSBkZXNjLT5yeF9idWZfc2l6ZSwNCisJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOw0K
Kw0KKwkJCWRldl9rZnJlZV9za2JfYW55KHJ4X2huZGwtPnBza19idWZmKTsNCisNCisJCQl3aXBo
eV9pbmZvKHByaXYtPmh3LT53aXBoeSwNCisJCQkJICAgInVubWFwcGVkK2ZyZWUnZCAlaSAweCVw
IDB4JXggJWlcbiIsDQorCQkJCSAgIGksIHJ4X2huZGwtPnBza19idWZmLT5kYXRhLA0KKwkJCQkg
ICBsZTMyX3RvX2NwdShyeF9obmRsLT5wZGVzYy0+cHBoeXNfYnVmZl9kYXRhKSwNCisJCQkJICAg
ZGVzYy0+cnhfYnVmX3NpemUpOw0KKw0KKwkJCXJ4X2huZGwtPnBza19idWZmID0gTlVMTDsNCisJ
CX0NCisJfQ0KK30NCisNCitzdGF0aWMgdm9pZCBtd2xfcnhfcmluZ19mcmVlKHN0cnVjdCBtd2xf
cHJpdiAqcHJpdikNCit7DQorCXN0cnVjdCBtd2xfZGVzY19kYXRhICpkZXNjOw0KKw0KKwlkZXNj
ID0gJnByaXYtPmRlc2NfZGF0YVswXTsNCisNCisJaWYgKGRlc2MtPnByeF9yaW5nKSB7DQorCQlt
d2xfcnhfcmluZ19jbGVhbnVwKHByaXYpOw0KKw0KKwkJZG1hX2ZyZWVfY29oZXJlbnQoJnByaXYt
PnBkZXYtPmRldiwNCisJCQkJICBNQVhfTlVNX1JYX1JJTkdfQllURVMsDQorCQkJCSAgZGVzYy0+
cHJ4X3JpbmcsDQorCQkJCSAgZGVzYy0+cHBoeXNfcnhfcmluZyk7DQorDQorCQlkZXNjLT5wcnhf
cmluZyA9IE5VTEw7DQorCX0NCisNCisJa2ZyZWUoZGVzYy0+cnhfaG5kbCk7DQorDQorCWRlc2Mt
PnBuZXh0X3J4X2huZGwgPSBOVUxMOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgbXdsX3J4
X3ByZXBhcmVfc3RhdHVzKHN0cnVjdCBtd2xfcnhfZGVzYyAqcGRlc2MsDQorCQkJCQkgc3RydWN0
IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cykNCit7DQorCXUxNiByYXRlLCBmb3JtYXQsIG5z
cywgYncsIGdpLCBydDsNCisNCisJbWVtc2V0KHN0YXR1cywgMCwgc2l6ZW9mKCpzdGF0dXMpKTsN
CisNCisJc3RhdHVzLT5zaWduYWwgPSAtKHBkZXNjLT5yc3NpICsgVzgzNlhfUlNTSV9PRkZTRVQp
Ow0KKw0KKwlyYXRlID0gbGUxNl90b19jcHUocGRlc2MtPnJhdGUpOw0KKwlmb3JtYXQgPSByYXRl
ICYgTVdMX1JYX1JBVEVfRk9STUFUX01BU0s7DQorCW5zcyA9IChyYXRlICYgTVdMX1JYX1JBVEVf
TlNTX01BU0spID4+IE1XTF9SWF9SQVRFX05TU19TSElGVDsNCisJYncgPSAocmF0ZSAmIE1XTF9S
WF9SQVRFX0JXX01BU0spID4+IE1XTF9SWF9SQVRFX0JXX1NISUZUOw0KKwlnaSA9IChyYXRlICYg
TVdMX1JYX1JBVEVfR0lfTUFTSykgPj4gTVdMX1JYX1JBVEVfR0lfU0hJRlQ7DQorCXJ0ID0gKHJh
dGUgJiBNV0xfUlhfUkFURV9SVF9NQVNLKSA+PiBNV0xfUlhfUkFURV9SVF9TSElGVDsNCisNCisJ
c3dpdGNoIChmb3JtYXQpIHsNCisJY2FzZSBSWF9SQVRFX0lORk9fRk9STUFUXzExTjoNCisJCXN0
YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0hUOw0KKwkJaWYgKGJ3ID09IFJYX1JBVEVfSU5GT19IVDQw
KQ0KKwkJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHXzQwTUhaOw0KKwkJaWYgKGdpID09IFJYX1JB
VEVfSU5GT19TSE9SVF9JTlRFUlZBTCkNCisJCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19TSE9S
VF9HSTsNCisJCWJyZWFrOw0KKwljYXNlIFJYX1JBVEVfSU5GT19GT1JNQVRfMTFBQzoNCisJCXN0
YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX1ZIVDsNCisJCWlmIChidyA9PSBSWF9SQVRFX0lORk9fSFQ0
MCkNCisJCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR180ME1IWjsNCisJCWlmIChidyA9PSBSWF9S
QVRFX0lORk9fSFQ4MCkNCisJCQlzdGF0dXMtPnZodF9mbGFnIHw9IFJYX1ZIVF9GTEFHXzgwTUha
Ow0KKwkJaWYgKGdpID09IFJYX1JBVEVfSU5GT19TSE9SVF9JTlRFUlZBTCkNCisJCQlzdGF0dXMt
PmZsYWcgfD0gUlhfRkxBR19TSE9SVF9HSTsNCisJCXN0YXR1cy0+dmh0X25zcyA9IChuc3MgKyAx
KTsNCisJCWJyZWFrOw0KKwl9DQorDQorCXN0YXR1cy0+cmF0ZV9pZHggPSBydDsNCisNCisJaWYg
KHBkZXNjLT5jaGFubmVsID4gQkFORF8yNF9DSEFOTkVMX05VTSkgew0KKwkJc3RhdHVzLT5iYW5k
ID0gSUVFRTgwMjExX0JBTkRfNUdIWjsNCisJCWlmICgoIShzdGF0dXMtPmZsYWcgJiBSWF9GTEFH
X0hUKSkgJiYNCisJCSAgICAoIShzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX1ZIVCkpKSB7DQorCQkJ
c3RhdHVzLT5yYXRlX2lkeCAtPSA1Ow0KKwkJCWlmIChzdGF0dXMtPnJhdGVfaWR4ID49IEJBTkRf
NTBfUkFURV9OVU0pDQorCQkJCXN0YXR1cy0+cmF0ZV9pZHggPSBCQU5EXzUwX1JBVEVfTlVNIC0g
MTsNCisJCX0NCisJfSBlbHNlIHsNCisJCXN0YXR1cy0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJH
SFo7DQorCQlpZiAoKCEoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19IVCkpICYmDQorCQkgICAgKCEo
c3RhdHVzLT5mbGFnICYgUlhfRkxBR19WSFQpKSkgew0KKwkJCWlmIChzdGF0dXMtPnJhdGVfaWR4
ID49IEJBTkRfMjRfUkFURV9OVU0pDQorCQkJCXN0YXR1cy0+cmF0ZV9pZHggPSBCQU5EXzI0X1JB
VEVfTlVNIC0gMTsNCisJCX0NCisJfQ0KKw0KKwlzdGF0dXMtPmZyZXEgPSBpZWVlODAyMTFfY2hh
bm5lbF90b19mcmVxdWVuY3kocGRlc2MtPmNoYW5uZWwsDQorCQkJCQkJICAgICAgc3RhdHVzLT5i
YW5kKTsNCisNCisJLyogY2hlY2sgaWYgc3RhdHVzIGhhcyBhIHNwZWNpZmljIGVycm9yIGJpdCAo
Yml0IDcpIHNldCBvciBpbmRpY2F0ZXMNCisJICogYSBnZW5lcmFsIGRlY3J5cHQgZXJyb3INCisJ
ICovDQorCWlmICgocGRlc2MtPnN0YXR1cyA9PSBHRU5FUkFMX0RFQ1JZUFRfRVJSKSB8fA0KKwkg
ICAgKHBkZXNjLT5zdGF0dXMgJiBERUNSWVBUX0VSUl9NQVNLKSkgew0KKwkJLyogY2hlY2sgaWYg
c3RhdHVzIGlzIG5vdCBlcXVhbCB0byAweEZGDQorCQkgKiB0aGUgMHhGRiBjaGVjayBpcyBmb3Ig
YmFja3dhcmQgY29tcGF0aWJpbGl0eQ0KKwkJICovDQorCQlpZiAocGRlc2MtPnN0YXR1cyAhPSBH
RU5FUkFMX0RFQ1JZUFRfRVJSKSB7DQorCQkJaWYgKCgocGRlc2MtPnN0YXR1cyAmICh+REVDUllQ
VF9FUlJfTUFTSykpICYNCisJCQkgICAgVEtJUF9ERUNSWVBUX01JQ19FUlIpICYmICEoKHBkZXNj
LT5zdGF0dXMgJg0KKwkJCSAgICAoV0VQX0RFQ1JZUFRfSUNWX0VSUiB8IFRLSVBfREVDUllQVF9J
Q1ZfRVJSKSkpKSB7DQorCQkJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX01NSUNfRVJST1I7DQor
CQkJfQ0KKwkJfQ0KKwl9DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBtd2xfcnhfZW5hYmxl
X3N0YV9hbXNkdShzdHJ1Y3QgbXdsX3ByaXYgKnByaXYsDQorCQkJCQkgICB1OCAqc3RhX2FkZHIp
DQorew0KKwlzdHJ1Y3QgbXdsX3N0YSAqc3RhX2luZm87DQorCXN0cnVjdCBpZWVlODAyMTFfc3Rh
ICpzdGE7DQorDQorCXNwaW5fbG9ja19iaCgmcHJpdi0+c3RhX2xvY2spOw0KKwlsaXN0X2Zvcl9l
YWNoX2VudHJ5KHN0YV9pbmZvLCAmcHJpdi0+c3RhX2xpc3QsIGxpc3QpIHsNCisJCXN0YSA9IGNv
bnRhaW5lcl9vZigoY2hhciAqKXN0YV9pbmZvLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSwNCisJCQkJ
ICAgZHJ2X3ByaXZbMF0pOw0KKwkJaWYgKGV0aGVyX2FkZHJfZXF1YWwoc3RhLT5hZGRyLCBzdGFf
YWRkcikpIHsNCisJCQlzdGFfaW5mby0+aXNfYW1zZHVfYWxsb3dlZCA9IHRydWU7DQorCQkJYnJl
YWs7DQorCQl9DQorCX0NCisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnN0YV9sb2NrKTsNCit9DQor
DQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbXdsX3ZpZiAqbXdsX3J4X2ZpbmRfdmlmX2JzcyhzdHJ1
Y3QgbXdsX3ByaXYgKnByaXYsDQorCQkJCQkJICB1OCAqYnNzaWQpDQorew0KKwlzdHJ1Y3QgbXds
X3ZpZiAqbXdsX3ZpZjsNCisNCisJc3Bpbl9sb2NrX2JoKCZwcml2LT52aWZfbG9jayk7DQorCWxp
c3RfZm9yX2VhY2hfZW50cnkobXdsX3ZpZiwgJnByaXYtPnZpZl9saXN0LCBsaXN0KSB7DQorCQlp
ZiAoZXRoZXJfYWRkcl9lcXVhbChic3NpZCwgbXdsX3ZpZi0+YnNzaWQpKSB7DQorCQkJc3Bpbl91
bmxvY2tfYmgoJnByaXYtPnZpZl9sb2NrKTsNCisJCQlyZXR1cm4gbXdsX3ZpZjsNCisJCX0NCisJ
fQ0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dmlmX2xvY2spOw0KKw0KKwlyZXR1cm4gTlVMTDsN
Cit9DQorDQorc3RhdGljIGlubGluZSB2b2lkIG13bF9yeF9yZW1vdmVfZG1hX2hlYWRlcihzdHJ1
Y3Qgc2tfYnVmZiAqc2tiLCBfX2xlMTYgcW9zKQ0KK3sNCisJc3RydWN0IG13bF9kbWFfZGF0YSAq
dHI7DQorCWludCBoZHJsZW47DQorDQorCXRyID0gKHN0cnVjdCBtd2xfZG1hX2RhdGEgKilza2It
PmRhdGE7DQorCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4odHItPndoLmZyYW1lX2NvbnRyb2wp
Ow0KKw0KKwlpZiAoaGRybGVuICE9IHNpemVvZih0ci0+d2gpKSB7DQorCQlpZiAoaWVlZTgwMjEx
X2lzX2RhdGFfcW9zKHRyLT53aC5mcmFtZV9jb250cm9sKSkgew0KKwkJCW1lbW1vdmUodHItPmRh
dGEgLSBoZHJsZW4sICZ0ci0+d2gsIGhkcmxlbiAtIDIpOw0KKwkJCSooKF9fbGUxNiAqKSh0ci0+
ZGF0YSAtIDIpKSA9IHFvczsNCisJCX0gZWxzZSB7DQorCQkJbWVtbW92ZSh0ci0+ZGF0YSAtIGhk
cmxlbiwgJnRyLT53aCwgaGRybGVuKTsNCisJCX0NCisJfQ0KKw0KKwlpZiAoaGRybGVuICE9IHNp
emVvZigqdHIpKQ0KKwkJc2tiX3B1bGwoc2tiLCBzaXplb2YoKnRyKSAtIGhkcmxlbik7DQorfQ0K
Kw0KK3N0YXRpYyBpbmxpbmUgYm9vbCBtd2xfcnhfcHJvY2Vzc19tZXNoX2Ftc2R1KHN0cnVjdCBt
d2xfcHJpdiAqcHJpdiwNCisJCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwNCisJCQkJCSAg
ICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cykNCit7DQorCXN0cnVjdCBpZWVl
ODAyMTFfaGRyICp3aDsNCisJc3RydWN0IG13bF9zdGEgKnN0YV9pbmZvOw0KKwlzdHJ1Y3QgaWVl
ZTgwMjExX3N0YSAqc3RhOw0KKwl1OCAqcWM7DQorCWludCB3aF9sZW47DQorCWludCBsZW47DQor
CXU4IHBhZDsNCisJdTggKmRhdGE7DQorCXUxNiBmcmFtZV9sZW47DQorCXN0cnVjdCBza19idWZm
ICpuZXdza2I7DQorDQorCXdoID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOw0K
Kw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPnN0YV9sb2NrKTsNCisJbGlzdF9mb3JfZWFjaF9lbnRy
eShzdGFfaW5mbywgJnByaXYtPnN0YV9saXN0LCBsaXN0KSB7DQorCQlzdGEgPSBjb250YWluZXJf
b2YoKGNoYXIgKilzdGFfaW5mbywgc3RydWN0IGllZWU4MDIxMV9zdGEsDQorCQkJCSAgIGRydl9w
cml2WzBdKTsNCisJCWlmIChldGhlcl9hZGRyX2VxdWFsKHN0YS0+YWRkciwgd2gtPmFkZHIyKSkg
ew0KKwkJCWlmICghc3RhX2luZm8tPmlzX21lc2hfbm9kZSkgew0KKwkJCQlzcGluX3VubG9ja19i
aCgmcHJpdi0+c3RhX2xvY2spOw0KKwkJCQlyZXR1cm4gZmFsc2U7DQorCQkJfQ0KKwkJfQ0KKwl9
DQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5zdGFfbG9jayk7DQorDQorCXFjID0gaWVlZTgwMjEx
X2dldF9xb3NfY3RsKHdoKTsNCisJKnFjICY9IH5JRUVFODAyMTFfUU9TX0NUTF9BX01TRFVfUFJF
U0VOVDsNCisNCisJd2hfbGVuID0gaWVlZTgwMjExX2hkcmxlbih3aC0+ZnJhbWVfY29udHJvbCk7
DQorCWxlbiA9IHdoX2xlbjsNCisJZGF0YSA9IHNrYi0+ZGF0YTsNCisNCisJd2hpbGUgKGxlbiA8
IHNrYi0+bGVuKSB7DQorCQlmcmFtZV9sZW4gPSAqKHU4ICopKGRhdGEgKyBsZW4gKyBFVEhfSExF
TiAtIDEpIHwNCisJCQkoKih1OCAqKShkYXRhICsgbGVuICsgRVRIX0hMRU4gLSAyKSA8PCA4KTsN
CisNCisJCWlmICgobGVuICsgRVRIX0hMRU4gKyBmcmFtZV9sZW4pID4gc2tiLT5sZW4pDQorCQkJ
YnJlYWs7DQorDQorCQluZXdza2IgPSBkZXZfYWxsb2Nfc2tiKHdoX2xlbiArIGZyYW1lX2xlbik7
DQorCQlpZiAoIW5ld3NrYikNCisJCQlicmVhazsNCisNCisJCWV0aGVyX2FkZHJfY29weSh3aC0+
YWRkcjMsIGRhdGEgKyBsZW4pOw0KKwkJZXRoZXJfYWRkcl9jb3B5KHdoLT5hZGRyNCwgZGF0YSAr
IGxlbiArIEVUSF9BTEVOKTsNCisJCW1lbWNweShuZXdza2ItPmRhdGEsIHdoLCB3aF9sZW4pOw0K
KwkJbWVtY3B5KG5ld3NrYi0+ZGF0YSArIHdoX2xlbiwgZGF0YSArIGxlbiArIEVUSF9ITEVOLCBm
cmFtZV9sZW4pOw0KKwkJc2tiX3B1dChuZXdza2IsIHdoX2xlbiArIGZyYW1lX2xlbik7DQorDQor
CQlwYWQgPSAoKEVUSF9ITEVOICsgZnJhbWVfbGVuKSAlIDQpID8NCisJCQkoNCAtIChFVEhfSExF
TiArIGZyYW1lX2xlbikgJSA0KSA6IDA7DQorCQlsZW4gKz0gKEVUSF9ITEVOICsgZnJhbWVfbGVu
ICsgcGFkKTsNCisJCWlmIChsZW4gPCBza2ItPmxlbikNCisJCQlzdGF0dXMtPmZsYWcgfD0gUlhf
RkxBR19BTVNEVV9NT1JFOw0KKwkJZWxzZQ0KKwkJCXN0YXR1cy0+ZmxhZyAmPSB+UlhfRkxBR19B
TVNEVV9NT1JFOw0KKwkJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihuZXdza2IpLCBzdGF0dXMs
IHNpemVvZigqc3RhdHVzKSk7DQorCQlpZWVlODAyMTFfcngocHJpdi0+aHcsIG5ld3NrYik7DQor
CX0NCisNCisJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsNCisNCisJcmV0dXJuIHRydWU7DQorfQ0K
Kw0KK3N0YXRpYyBpbnQgbXdsX3J4X3JlZmlsbChzdHJ1Y3QgbXdsX3ByaXYgKnByaXYsIHN0cnVj
dCBtd2xfcnhfaG5kbCAqcnhfaG5kbCkNCit7DQorCXN0cnVjdCBtd2xfZGVzY19kYXRhICpkZXNj
Ow0KKwlkbWFfYWRkcl90IGRtYTsNCisNCisJZGVzYyA9ICZwcml2LT5kZXNjX2RhdGFbMF07DQor
DQorCXJ4X2huZGwtPnBza19idWZmID0gZGV2X2FsbG9jX3NrYihkZXNjLT5yeF9idWZfc2l6ZSk7
DQorDQorCWlmICghcnhfaG5kbC0+cHNrX2J1ZmYpDQorCQlyZXR1cm4gLUVOT01FTTsNCisNCisJ
c2tiX3Jlc2VydmUocnhfaG5kbC0+cHNrX2J1ZmYsIFNZU0FEUFRfTUlOX0JZVEVTX0hFQURST09N
KTsNCisNCisJcnhfaG5kbC0+cGRlc2MtPnN0YXR1cyA9IEVBR0xFX1JYRF9TVEFUVVNfT0s7DQor
CXJ4X2huZGwtPnBkZXNjLT5xb3NfY3RybCA9IDB4MDAwMDsNCisJcnhfaG5kbC0+cGRlc2MtPmNo
YW5uZWwgPSAweDAwOw0KKwlyeF9obmRsLT5wZGVzYy0+cnNzaSA9IDB4MDA7DQorCXJ4X2huZGwt
PnBkZXNjLT5wa3RfbGVuID0gY3B1X3RvX2xlMTYoZGVzYy0+cnhfYnVmX3NpemUpOw0KKw0KKwlk
bWEgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LA0KKwkJCSAgICAgcnhfaG5kbC0+cHNrX2J1
ZmYtPmRhdGEsDQorCQkJICAgICBkZXNjLT5yeF9idWZfc2l6ZSwNCisJCQkgICAgIFBDSV9ETUFf
RlJPTURFVklDRSk7DQorCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocHJpdi0+cGRldiwgZG1h
KSkgew0KKwkJZGV2X2tmcmVlX3NrYl9hbnkocnhfaG5kbC0+cHNrX2J1ZmYpOw0KKwkJd2lwaHlf
ZXJyKHByaXYtPmh3LT53aXBoeSwNCisJCQkgICJmYWlsZWQgdG8gbWFwIHBjaSBtZW1vcnkhXG4i
KTsNCisJCXJldHVybiAtRU5PTUVNOw0KKwl9DQorDQorCXJ4X2huZGwtPnBkZXNjLT5wcGh5c19i
dWZmX2RhdGEgPSBjcHVfdG9fbGUzMihkbWEpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50
IG13bF9yeF9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQ0KK3sNCisJc3RydWN0IG13bF9w
cml2ICpwcml2ID0gaHctPnByaXY7DQorCWludCByYzsNCisNCisJcmMgPSBtd2xfcnhfcmluZ19h
bGxvYyhwcml2KTsNCisJaWYgKHJjKSB7DQorCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiYWxsb2Nh
dGluZyBSWCByaW5nIGZhaWxlZFxuIik7DQorCQlyZXR1cm4gcmM7DQorCX0NCisNCisJcmMgPSBt
d2xfcnhfcmluZ19pbml0KHByaXYpOw0KKwlpZiAocmMpIHsNCisJCW13bF9yeF9yaW5nX2ZyZWUo
cHJpdik7DQorCQl3aXBoeV9lcnIoaHctPndpcGh5LA0KKwkJCSAgImluaXRpYWxpemluZyBSWCBy
aW5nIGZhaWxlZFxuIik7DQorCQlyZXR1cm4gcmM7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0K
Kw0KK3ZvaWQgbXdsX3J4X2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykNCit7DQorCXN0
cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKw0KKwltd2xfcnhfcmluZ19jbGVhbnVw
KHByaXYpOw0KKwltd2xfcnhfcmluZ19mcmVlKHByaXYpOw0KK30NCisNCit2b2lkIG13bF9yeF9y
ZWN2KHVuc2lnbmVkIGxvbmcgZGF0YSkNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0g
KHN0cnVjdCBpZWVlODAyMTFfaHcgKilkYXRhOw0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBo
dy0+cHJpdjsNCisJc3RydWN0IG13bF9kZXNjX2RhdGEgKmRlc2M7DQorCXN0cnVjdCBtd2xfcnhf
aG5kbCAqY3Vycl9obmRsOw0KKwlpbnQgd29ya19kb25lID0gMDsNCisJc3RydWN0IHNrX2J1ZmYg
KnByeF9za2IgPSBOVUxMOw0KKwlpbnQgcGt0X2xlbjsNCisJc3RydWN0IGllZWU4MDIxMV9yeF9z
dGF0dXMgc3RhdHVzOw0KKwlzdHJ1Y3QgbXdsX3ZpZiAqbXdsX3ZpZiA9IE5VTEw7DQorCXN0cnVj
dCBpZWVlODAyMTFfaGRyICp3aDsNCisJdTMyIHN0YXR1c19tYXNrOw0KKw0KKwlzcGluX2xvY2so
JnByaXYtPnJ4X2Rlc2NfbG9jayk7DQorCWRlc2MgPSAmcHJpdi0+ZGVzY19kYXRhWzBdOw0KKwlj
dXJyX2huZGwgPSBkZXNjLT5wbmV4dF9yeF9obmRsOw0KKw0KKwlpZiAoIWN1cnJfaG5kbCkgew0K
KwkJc3RhdHVzX21hc2sgPSByZWFkbChwcml2LT5pb2Jhc2UxICsNCisJCQkJICAgIE1BQ1JFR19S
RUdfQTJIX0lOVEVSUlVQVF9TVEFUVVNfTUFTSyk7DQorCQl3cml0ZWwoc3RhdHVzX21hc2sgfCBN
QUNSRUdfQTJIUklDX0JJVF9SWF9SRFksDQorCQkgICAgICAgcHJpdi0+aW9iYXNlMSArIE1BQ1JF
R19SRUdfQTJIX0lOVEVSUlVQVF9TVEFUVVNfTUFTSyk7DQorDQorCQlwcml2LT5pc19yeF9zY2hl
ZHVsZSA9IGZhbHNlOw0KKwkJd2lwaHlfd2Fybihody0+d2lwaHksICJidXN5IG9yIG5vIHJlY2Vp
dmluZyBwYWNrZXRzXG4iKTsNCisJCXNwaW5fdW5sb2NrKCZwcml2LT5yeF9kZXNjX2xvY2spOw0K
KwkJcmV0dXJuOw0KKwl9DQorDQorCXdoaWxlICgoY3Vycl9obmRsLT5wZGVzYy0+cnhfY29udHJv
bCA9PSBFQUdMRV9SWERfQ1RSTF9ETUFfT1dOKSAmJg0KKwkgICAgICAgKHdvcmtfZG9uZSA8IHBy
aXYtPnJlY3ZfbGltaXQpKSB7DQorCQlwcnhfc2tiID0gY3Vycl9obmRsLT5wc2tfYnVmZjsNCisJ
CWlmICghcHJ4X3NrYikNCisJCQlnb3RvIG91dDsNCisJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+
cGRldiwNCisJCQkJIGxlMzJfdG9fY3B1KGN1cnJfaG5kbC0+cGRlc2MtPnBwaHlzX2J1ZmZfZGF0
YSksDQorCQkJCSBkZXNjLT5yeF9idWZfc2l6ZSwNCisJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7
DQorCQlwa3RfbGVuID0gbGUxNl90b19jcHUoY3Vycl9obmRsLT5wZGVzYy0+cGt0X2xlbik7DQor
DQorCQlpZiAoc2tiX3RhaWxyb29tKHByeF9za2IpIDwgcGt0X2xlbikgew0KKwkJCWRldl9rZnJl
ZV9za2JfYW55KHByeF9za2IpOw0KKwkJCWdvdG8gb3V0Ow0KKwkJfQ0KKw0KKwkJaWYgKGN1cnJf
aG5kbC0+cGRlc2MtPmNoYW5uZWwgIT0NCisJCSAgICBody0+Y29uZi5jaGFuZGVmLmNoYW4tPmh3
X3ZhbHVlKSB7DQorCQkJZGV2X2tmcmVlX3NrYl9hbnkocHJ4X3NrYik7DQorCQkJZ290byBvdXQ7
DQorCQl9DQorDQorCQltd2xfcnhfcHJlcGFyZV9zdGF0dXMoY3Vycl9obmRsLT5wZGVzYywgJnN0
YXR1cyk7DQorDQorCQlwcml2LT5ub2lzZSA9IC1jdXJyX2huZGwtPnBkZXNjLT5ub2lzZV9mbG9v
cjsNCisNCisJCXdoID0gJigoc3RydWN0IG13bF9kbWFfZGF0YSAqKXByeF9za2ItPmRhdGEpLT53
aDsNCisNCisJCWlmIChpZWVlODAyMTFfaGFzX3Byb3RlY3RlZCh3aC0+ZnJhbWVfY29udHJvbCkp
IHsNCisJCQkvKiBDaGVjayBpZiBodyBjcnlwdG8gaGFzIGJlZW4gZW5hYmxlZCBmb3INCisJCQkg
KiB0aGlzIGJzcy4gSWYgeWVzLCBzZXQgdGhlIHN0YXR1cyBmbGFncw0KKwkJCSAqIGFjY29yZGlu
Z2x5DQorCQkJICovDQorCQkJaWYgKGllZWU4MDIxMV9oYXNfdG9kcyh3aC0+ZnJhbWVfY29udHJv
bCkpDQorCQkJCW13bF92aWYgPSBtd2xfcnhfZmluZF92aWZfYnNzKHByaXYsIHdoLT5hZGRyMSk7
DQorCQkJZWxzZQ0KKwkJCQltd2xfdmlmID0gbXdsX3J4X2ZpbmRfdmlmX2Jzcyhwcml2LCB3aC0+
YWRkcjIpOw0KKw0KKwkJCWlmIChtd2xfdmlmICYmIG13bF92aWYtPmlzX2h3X2NyeXB0b19lbmFi
bGVkKSB7DQorCQkJCS8qIFdoZW4gTU1JQyBFUlJPUiBpcyBlbmNvdW50ZXJlZA0KKwkJCQkgKiBi
eSB0aGUgZmlybXdhcmUsIHBheWxvYWQgaXMNCisJCQkJICogZHJvcHBlZCBhbmQgb25seSAzMiBi
eXRlcyBvZg0KKwkJCQkgKiBtd2x3aWZpIEZpcm13YXJlIGhlYWRlciBpcyBzZW50DQorCQkJCSAq
IHRvIHRoZSBob3N0Lg0KKwkJCQkgKg0KKwkJCQkgKiBXZSBuZWVkIHRvIGFkZCBmb3VyIGJ5dGVz
IG9mDQorCQkJCSAqIGtleSBpbmZvcm1hdGlvbi4gIEluIGl0DQorCQkJCSAqIE1BQzgwMjExIGV4
cGVjdHMga2V5aWR4IHNldCB0bw0KKwkJCQkgKiAwIGZvciB0cmlnZ2VyaW5nIENvdW50ZXINCisJ
CQkJICogTWVhc3VyZSBvZiBNTUlDIGZhaWx1cmUuDQorCQkJCSAqLw0KKwkJCQlpZiAoc3RhdHVz
LmZsYWcgJiBSWF9GTEFHX01NSUNfRVJST1IpIHsNCisJCQkJCXN0cnVjdCBtd2xfZG1hX2RhdGEg
KnRyOw0KKw0KKwkJCQkJdHIgPSAoc3RydWN0IG13bF9kbWFfZGF0YSAqKQ0KKwkJCQkJICAgICBw
cnhfc2tiLT5kYXRhOw0KKwkJCQkJbWVtc2V0KCh2b2lkICopJnRyLT5kYXRhLCAwLCA0KTsNCisJ
CQkJCXBrdF9sZW4gKz0gNDsNCisJCQkJfQ0KKw0KKwkJCQlpZiAoIWllZWU4MDIxMV9pc19hdXRo
KHdoLT5mcmFtZV9jb250cm9sKSkNCisJCQkJCXN0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfSVZfU1RS
SVBQRUQgfA0KKwkJCQkJCSAgICAgICBSWF9GTEFHX0RFQ1JZUFRFRCB8DQorCQkJCQkJICAgICAg
IFJYX0ZMQUdfTU1JQ19TVFJJUFBFRDsNCisJCQl9DQorCQl9DQorDQorCQlza2JfcHV0KHByeF9z
a2IsIHBrdF9sZW4pOw0KKwkJbXdsX3J4X3JlbW92ZV9kbWFfaGVhZGVyKHByeF9za2IsIGN1cnJf
aG5kbC0+cGRlc2MtPnFvc19jdHJsKTsNCisNCisJCXdoID0gKHN0cnVjdCBpZWVlODAyMTFfaGRy
ICopcHJ4X3NrYi0+ZGF0YTsNCisNCisJCWlmIChpZWVlODAyMTFfaXNfbWdtdCh3aC0+ZnJhbWVf
Y29udHJvbCkpIHsNCisJCQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7DQorCQkJX19sZTE2
IGNhcGFiOw0KKw0KKwkJCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopcHJ4X3NrYi0+
ZGF0YTsNCisNCisJCQlpZiAodW5saWtlbHkoaWVlZTgwMjExX2lzX2FjdGlvbih3aC0+ZnJhbWVf
Y29udHJvbCkgJiYNCisJCQkJICAgICBtZ210LT51LmFjdGlvbi5jYXRlZ29yeSA9PQ0KKwkJCQkg
ICAgIFdMQU5fQ0FURUdPUllfQkFDSyAmJg0KKwkJCQkgICAgIG1nbXQtPnUuYWN0aW9uLnUuYWRk
YmFfcmVzcC5hY3Rpb25fY29kZSA9PQ0KKwkJCQkgICAgIFdMQU5fQUNUSU9OX0FEREJBX1JFU1Ap
KSB7DQorCQkJCWNhcGFiID0gbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmNhcGFiOw0KKwkJ
CQlpZiAobGUxNl90b19jcHUoY2FwYWIpICYgMSkNCisJCQkJCW13bF9yeF9lbmFibGVfc3RhX2Ft
c2R1KHByaXYsIG1nbXQtPnNhKTsNCisJCQl9DQorCQl9DQorDQorCQlpZiAoaWVlZTgwMjExX2lz
X2RhdGFfcW9zKHdoLT5mcmFtZV9jb250cm9sKSAmJg0KKwkJICAgIGllZWU4MDIxMV9oYXNfYTQo
d2gtPmZyYW1lX2NvbnRyb2wpKSB7DQorCQkJdTggKnFjID0gaWVlZTgwMjExX2dldF9xb3NfY3Rs
KHdoKTsNCisNCisJCQlpZiAoKnFjICYgSUVFRTgwMjExX1FPU19DVExfQV9NU0RVX1BSRVNFTlQp
DQorCQkJCWlmIChtd2xfcnhfcHJvY2Vzc19tZXNoX2Ftc2R1KHByaXYsIHByeF9za2IsDQorCQkJ
CQkJCSAgICAgICZzdGF0dXMpKQ0KKwkJCQkJZ290byBvdXQ7DQorCQl9DQorDQorCQltZW1jcHko
SUVFRTgwMjExX1NLQl9SWENCKHByeF9za2IpLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7DQor
CQlpZWVlODAyMTFfcngoaHcsIHByeF9za2IpOw0KK291dDoNCisJCW13bF9yeF9yZWZpbGwocHJp
diwgY3Vycl9obmRsKTsNCisJCWN1cnJfaG5kbC0+cGRlc2MtPnJ4X2NvbnRyb2wgPSBFQUdMRV9S
WERfQ1RSTF9EUklWRVJfT1dOOw0KKwkJY3Vycl9obmRsLT5wZGVzYy0+cW9zX2N0cmwgPSAwOw0K
KwkJY3Vycl9obmRsID0gY3Vycl9obmRsLT5wbmV4dDsNCisJCXdvcmtfZG9uZSsrOw0KKwl9DQor
DQorCWRlc2MtPnBuZXh0X3J4X2huZGwgPSBjdXJyX2huZGw7DQorDQorCXN0YXR1c19tYXNrID0g
cmVhZGwocHJpdi0+aW9iYXNlMSArDQorCQkJICAgIE1BQ1JFR19SRUdfQTJIX0lOVEVSUlVQVF9T
VEFUVVNfTUFTSyk7DQorCXdyaXRlbChzdGF0dXNfbWFzayB8IE1BQ1JFR19BMkhSSUNfQklUX1JY
X1JEWSwNCisJICAgICAgIHByaXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVHX0EySF9JTlRFUlJVUFRf
U1RBVFVTX01BU0spOw0KKw0KKwlwcml2LT5pc19yeF9zY2hlZHVsZSA9IGZhbHNlOw0KKw0KKwlz
cGluX3VubG9jaygmcHJpdi0+cnhfZGVzY19sb2NrKTsNCit9DQpkaWZmIC0tZ2l0IGEvZHJpdmVy
cy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL3J4LmggYi9kcml2ZXJzL25ldC93aXJlbGVz
cy9tYXJ2ZWxsL213bHdpZmkvcnguaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAw
MDAuLmQzMmM1NTgNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21h
cnZlbGwvbXdsd2lmaS9yeC5oDQpAQCAtMCwwICsxLDI1IEBADQorLyoNCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYtMjAxNSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4NCisgKg0KKyAqIFRoaXMg
c29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRl
cm5hdGlvbmFsDQorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxDQorICogKHRoZSAiTGljZW5zZSIpLiAg
WW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbg0KKyAq
IGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2Us
IGEgY29weSBvZiB3aGljaA0KKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisgKg0KKyAqIFRIRSBGSUxFIElTIERJU1RSSUJV
VEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFDQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQ0KKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNl
IHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dA0KKyAqIHRoaXMgd2FycmFudHkgZGlz
Y2xhaW1lci4NCisgKi8NCisNCisvKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBkZWZpbmVzIHJl
Y2VpdmUgcmVsYXRlZCBmdW5jdGlvbnMuICovDQorDQorI2lmbmRlZiBfcnhfaF8NCisjZGVmaW5l
IF9yeF9oXw0KKw0KK2ludCBtd2xfcnhfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7DQor
dm9pZCBtd2xfcnhfZGVpbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsNCit2b2lkIG13bF9y
eF9yZWN2KHVuc2lnbmVkIGxvbmcgZGF0YSk7DQorDQorI2VuZGlmIC8qIF9yeF9oXyAqLw0KZGlm
ZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9zeXNhZHB0Lmgg
Yi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvc3lzYWRwdC5oDQpuZXcgZmls
ZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uOGExNzA2YQ0KLS0tIC9kZXYvbnVsbA0KKysr
IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL3N5c2FkcHQuaA0KQEAgLTAs
MCArMSw3MyBAQA0KKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIE1hcnZlbGwgSW50
ZXJuYXRpb25hbCBMdGQuDQorICoNCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIp
IGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbA0KKyAqIEx0ZC4gdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1
bmUgMTk5MQ0KKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUg
YW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4NCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1z
IGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gNCisgKiBpcyBh
dmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
DQorICoNCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5U
WSBPRiBBTlkgS0lORCwgQU5EIFRIRQ0KKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UNCisgKiBBUkUgRVhQ
UkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFp
bHMgYWJvdXQNCisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuDQorICovDQorDQorLyogRGVz
Y3JpcHRpb246ICBUaGlzIGZpbGUgZGVmaW5lcyBzeXN0ZW0gYWRhcHRhdGlvbiByZWxhdGVkIGlu
Zm9ybWF0aW9uLiAqLw0KKw0KKyNpZm5kZWYgX213bF9zeXNhZHB0X2hfDQorI2RlZmluZSBfbXds
X3N5c2FkcHRfaF8NCisNCisjZGVmaW5lIFNZU0FEUFRfTUFYX05VTV9DSEFOTkVMUyAgICAgICA2
NA0KKw0KKyNkZWZpbmUgU1lTQURQVF9NQVhfREFUQV9SQVRFU19HICAgICAgIDE0DQorDQorI2Rl
ZmluZSBTWVNBRFBUX1RYX1BPV0VSX0xFVkVMX1RPVEFMICAgMTYNCisNCisjZGVmaW5lIFNZU0FE
UFRfVFhfV01NX1FVRVVFUyAgICAgICAgICA0DQorDQorI2RlZmluZSBTWVNBRFBUX1RYX0FNUERV
X1FVRVVFUyAgICAgICAgNA0KKw0KKyNkZWZpbmUgU1lTQURQVF9OVU1fT0ZfQVAgICAgICAgICAg
ICAgIDE2DQorDQorI2RlZmluZSBTWVNBRFBUX1RPVEFMX1RYX1FVRVVFUyAgICAgICAgKFNZU0FE
UFRfVFhfV01NX1FVRVVFUyArIFwNCisJCQkJCVNZU0FEUFRfTlVNX09GX0FQKQ0KKw0KKyNkZWZp
bmUgU1lTQURQVF9UT1RBTF9IV19RVUVVRVMgICAgICAgIChTWVNBRFBUX1RYX1dNTV9RVUVVRVMg
KyBcDQorCQkJCQlTWVNBRFBUX1RYX0FNUERVX1FVRVVFUykNCisNCisjZGVmaW5lIFNZU0FEUFRf
TlVNX09GX0RFU0NfREFUQSAgICAgICAoNCArIFNZU0FEUFRfTlVNX09GX0FQKQ0KKw0KKyNkZWZp
bmUgU1lTQURQVF9NQVhfTlVNX1RYX0RFU0MgICAgICAgIDI1Ng0KKw0KKyNkZWZpbmUgU1lTQURQ
VF9UWF9RVUVVRV9MSU1JVCAgICAgICAgICgzICogU1lTQURQVF9NQVhfTlVNX1RYX0RFU0MpDQor
DQorI2RlZmluZSBTWVNBRFBUX1RYX1dBS0VfUV9USFJFU0hPTEQgICAgKDIgKiBTWVNBRFBUX01B
WF9OVU1fVFhfREVTQykNCisNCisjZGVmaW5lIFNZU0FEUFRfREVMQVlfRlJFRV9RX0xJTUlUICAg
ICBTWVNBRFBUX01BWF9OVU1fVFhfREVTQw0KKw0KKyNkZWZpbmUgU1lTQURQVF9NQVhfTlVNX1JY
X0RFU0MgICAgICAgIDI1Ng0KKw0KKyNkZWZpbmUgU1lTQURQVF9SRUNFSVZFX0xJTUlUICAgICAg
ICAgIDY0DQorDQorI2RlZmluZSBTWVNBRFBUX01BWF9BR0dSX1NJWkUgICAgICAgICAgODE5Mg0K
Kw0KKyNkZWZpbmUgU1lTQURQVF9NSU5fQllURVNfSEVBRFJPT00gICAgIDY0DQorDQorI2RlZmlu
ZSBTWVNBRFBUX0FNUERVX1BBQ0tFVF9USFJFU0hPTEQgNjQNCisNCisjZGVmaW5lIFNZU0FEUFRf
QU1TRFVfRldfTUFYX1NJWkUgICAgICAzMzAwDQorDQorI2RlZmluZSBTWVNBRFBUX0FNU0RVXzRL
X01BWF9TSVpFICAgICAgU1lTQURQVF9BTVNEVV9GV19NQVhfU0laRQ0KKw0KKyNkZWZpbmUgU1lT
QURQVF9BTVNEVV84S19NQVhfU0laRSAgICAgIFNZU0FEUFRfQU1TRFVfRldfTUFYX1NJWkUNCisN
CisjZGVmaW5lIFNZU0FEUFRfQU1TRFVfQUxMT1dfU0laRSAgICAgICAxNjAwDQorDQorI2RlZmlu
ZSBTWVNBRFBUX0FNU0RVX0ZMVVNIX1RJTUUgICAgICAgNTAwDQorDQorI2RlZmluZSBTWVNBRFBU
X0FNU0RVX1BBQ0tFVF9USFJFU0hPTEQgMTANCisNCisjZGVmaW5lIFNZU0FEUFRfTUFYX1RJRCAg
ICAgICAgICAgICAgICA4DQorDQorI2VuZGlmIC8qIF9td2xfc3lzYWRwdF9oXyAqLw0KZGlmZiAt
LWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS90eC5jIGIvZHJpdmVy
cy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL3R4LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
DQppbmRleCAwMDAwMDAwLi42OGE5OTRkDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL25l
dC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvdHguYw0KQEAgLTAsMCArMSwxMjUxIEBADQorLyoN
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4N
CisgKg0KKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQg
YnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsDQorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxDQorICogKHRo
ZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRo
aXMgRmlsZSBpbg0KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMg
b2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaA0KKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0
aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisgKg0KKyAqIFRIRSBG
SUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBB
TkQgVEhFDQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQ0KKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1F
RC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dA0KKyAqIHRo
aXMgd2FycmFudHkgZGlzY2xhaW1lci4NCisgKi8NCisNCisvKiBEZXNjcmlwdGlvbjogIFRoaXMg
ZmlsZSBpbXBsZW1lbnRzIHRyYW5zbWl0IHJlbGF0ZWQgZnVuY3Rpb25zLiAqLw0KKw0KKyNpbmNs
dWRlIDxsaW51eC9ldGhlcmRldmljZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4NCisN
CisjaW5jbHVkZSAic3lzYWRwdC5oIg0KKyNpbmNsdWRlICJkZXYuaCINCisjaW5jbHVkZSAiZndj
bWQuaCINCisjaW5jbHVkZSAidHguaCINCisNCisjZGVmaW5lIE1BWF9OVU1fVFhfUklOR19CWVRF
UyAgKFNZU0FEUFRfTUFYX05VTV9UWF9ERVNDICogXA0KKwkJCQlzaXplb2Yoc3RydWN0IG13bF90
eF9kZXNjKSkNCisNCisjZGVmaW5lIE1BWF9OVU1fVFhfSE5ETF9CWVRFUyAgIChTWVNBRFBUX01B
WF9OVU1fVFhfREVTQyAqIFwNCisJCQkJc2l6ZW9mKHN0cnVjdCBtd2xfdHhfaG5kbCkpDQorDQor
I2RlZmluZSBFQUdMRV9UWERfWE1JVENUUkxfVVNFX01DX1JBVEUgICAgIDB4OCAgICAgLyogVXNl
IG11bHRpY2FzdCBkYXRhIHJhdGUgKi8NCisNCisjZGVmaW5lIE1XTF9RT1NfQUNLX1BPTElDWV9N
QVNLCSAgICAgICAgICAgMHgwMDYwDQorI2RlZmluZSBNV0xfUU9TX0FDS19QT0xJQ1lfTk9STUFM
ICAgICAgICAgIDB4MDAwMA0KKyNkZWZpbmUgTVdMX1FPU19BQ0tfUE9MSUNZX0JMT0NLQUNLICAg
ICAgICAweDAwNjANCisNCisjZGVmaW5lIEVYVF9JViAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHgyMA0KKyNkZWZpbmUgSU5DUkVBU0VfSVYoaXYxNiwgaXYzMikgXA0KK3sgXA0KKwkoaXYx
NikrKzsgXA0KKwlpZiAoKGl2MTYpID09IDApIFwNCisJCShpdjMyKSsrOyBcDQorfQ0KKw0KKy8q
IFRyYW5zbWl0IHJhdGUgaW5mb3JtYXRpb24gY29uc3RhbnRzICovDQorI2RlZmluZSBUWF9SQVRF
X0ZPUk1BVF9MRUdBQ1kgICAgICAgICAwDQorI2RlZmluZSBUWF9SQVRFX0ZPUk1BVF8xMU4gICAg
ICAgICAgICAxDQorI2RlZmluZSBUWF9SQVRFX0ZPUk1BVF8xMUFDICAgICAgICAgICAyDQorDQor
I2RlZmluZSBUWF9SQVRFX0JBTkRXSURUSF8yMCAgICAgICAgICAwDQorI2RlZmluZSBUWF9SQVRF
X0JBTkRXSURUSF80MCAgICAgICAgICAxDQorI2RlZmluZSBUWF9SQVRFX0JBTkRXSURUSF84MCAg
ICAgICAgICAyDQorDQorI2RlZmluZSBUWF9SQVRFX0lORk9fU1REX0dJICAgICAgICAgICAwDQor
I2RlZmluZSBUWF9SQVRFX0lORk9fU0hPUlRfR0kgICAgICAgICAxDQorDQorZW51bSB7DQorCUlF
RUVfVFlQRV9NQU5BR0VNRU5UID0gMCwNCisJSUVFRV9UWVBFX0NPTlRST0wsDQorCUlFRUVfVFlQ
RV9EQVRBDQorfTsNCisNCitzdHJ1Y3QgY2NtcF9oZHIgew0KKwlfX2xlMTYgaXYxNjsNCisJdTgg
cnN2ZDsNCisJdTgga2V5X2lkOw0KKwlfX2xlMzIgaXYzMjsNCit9IF9fcGFja2VkOw0KKw0KK3N0
YXRpYyBpbnQgbXdsX3R4X3JpbmdfYWxsb2Moc3RydWN0IG13bF9wcml2ICpwcml2KQ0KK3sNCisJ
c3RydWN0IG13bF9kZXNjX2RhdGEgKmRlc2M7DQorCWludCBudW07DQorCXU4ICptZW07DQorDQor
CWRlc2MgPSAmcHJpdi0+ZGVzY19kYXRhWzBdOw0KKw0KKwltZW0gPSBkbWFfYWxsb2NfY29oZXJl
bnQoJnByaXYtPnBkZXYtPmRldiwNCisJCQkJIE1BWF9OVU1fVFhfUklOR19CWVRFUyAqDQorCQkJ
CSBTWVNBRFBUX05VTV9PRl9ERVNDX0RBVEEsDQorCQkJCSAmZGVzYy0+cHBoeXNfdHhfcmluZywN
CisJCQkJIEdGUF9LRVJORUwpOw0KKw0KKwlpZiAoIW1lbSkgew0KKwkJd2lwaHlfZXJyKHByaXYt
Pmh3LT53aXBoeSwgImNhbm5vdCBhbGxvYyBtZW1cbiIpOw0KKwkJcmV0dXJuIC1FTk9NRU07DQor
CX0NCisNCisJZm9yIChudW0gPSAwOyBudW0gPCBTWVNBRFBUX05VTV9PRl9ERVNDX0RBVEE7IG51
bSsrKSB7DQorCQlkZXNjID0gJnByaXYtPmRlc2NfZGF0YVtudW1dOw0KKw0KKwkJZGVzYy0+cHR4
X3JpbmcgPSAoc3RydWN0IG13bF90eF9kZXNjICopDQorCQkJKG1lbSArIG51bSAqIE1BWF9OVU1f
VFhfUklOR19CWVRFUyk7DQorDQorCQlkZXNjLT5wcGh5c190eF9yaW5nID0gKGRtYV9hZGRyX3Qp
DQorCQkJKCh1MzIpcHJpdi0+ZGVzY19kYXRhWzBdLnBwaHlzX3R4X3JpbmcgKw0KKwkJCW51bSAq
IE1BWF9OVU1fVFhfUklOR19CWVRFUyk7DQorDQorCQltZW1zZXQoZGVzYy0+cHR4X3JpbmcsIDB4
MDAsDQorCQkgICAgICAgTUFYX05VTV9UWF9SSU5HX0JZVEVTKTsNCisJfQ0KKw0KKwltZW0gPSBr
bWFsbG9jKE1BWF9OVU1fVFhfSE5ETF9CWVRFUyAqIFNZU0FEUFRfTlVNX09GX0RFU0NfREFUQSwN
CisJCSAgICAgIEdGUF9LRVJORUwpOw0KKw0KKwlpZiAoIW1lbSkgew0KKwkJd2lwaHlfZXJyKHBy
aXYtPmh3LT53aXBoeSwgImNhbm5vdCBhbGxvYyBtZW1cbiIpOw0KKwkJZG1hX2ZyZWVfY29oZXJl
bnQoJnByaXYtPnBkZXYtPmRldiwNCisJCQkJICBNQVhfTlVNX1RYX1JJTkdfQllURVMgKg0KKwkJ
CQkgIFNZU0FEUFRfTlVNX09GX0RFU0NfREFUQSwNCisJCQkJICBwcml2LT5kZXNjX2RhdGFbMF0u
cHR4X3JpbmcsDQorCQkJCSAgcHJpdi0+ZGVzY19kYXRhWzBdLnBwaHlzX3R4X3JpbmcpOw0KKwkJ
cmV0dXJuIC1FTk9NRU07DQorCX0NCisNCisJZm9yIChudW0gPSAwOyBudW0gPCBTWVNBRFBUX05V
TV9PRl9ERVNDX0RBVEE7IG51bSsrKSB7DQorCQlkZXNjID0gJnByaXYtPmRlc2NfZGF0YVtudW1d
Ow0KKw0KKwkJZGVzYy0+dHhfaG5kbCA9IChzdHJ1Y3QgbXdsX3R4X2huZGwgKikNCisJCQkobWVt
ICsgbnVtICogTUFYX05VTV9UWF9ITkRMX0JZVEVTKTsNCisNCisJCW1lbXNldChkZXNjLT50eF9o
bmRsLCAweDAwLA0KKwkJICAgICAgIE1BWF9OVU1fVFhfSE5ETF9CWVRFUyk7DQorCX0NCisNCisJ
cmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXdsX3R4X3JpbmdfaW5pdChzdHJ1Y3QgbXds
X3ByaXYgKnByaXYpDQorew0KKwlpbnQgbnVtLCBpOw0KKwlzdHJ1Y3QgbXdsX2Rlc2NfZGF0YSAq
ZGVzYzsNCisNCisJZm9yIChudW0gPSAwOyBudW0gPCBTWVNBRFBUX05VTV9PRl9ERVNDX0RBVEE7
IG51bSsrKSB7DQorCQlza2JfcXVldWVfaGVhZF9pbml0KCZwcml2LT50eHFbbnVtXSk7DQorCQlw
cml2LT5md19kZXNjX2NudFtudW1dID0gMDsNCisNCisJCWRlc2MgPSAmcHJpdi0+ZGVzY19kYXRh
W251bV07DQorDQorCQlpZiAoZGVzYy0+cHR4X3JpbmcpIHsNCisJCQlmb3IgKGkgPSAwOyBpIDwg
U1lTQURQVF9NQVhfTlVNX1RYX0RFU0M7IGkrKykgew0KKwkJCQlkZXNjLT5wdHhfcmluZ1tpXS5z
dGF0dXMgPQ0KKwkJCQkJY3B1X3RvX2xlMzIoRUFHTEVfVFhEX1NUQVRVU19JRExFKTsNCisJCQkJ
ZGVzYy0+cHR4X3JpbmdbaV0ucHBoeXNfbmV4dCA9DQorCQkJCQljcHVfdG9fbGUzMigodTMyKWRl
c2MtPnBwaHlzX3R4X3JpbmcgKw0KKwkJCQkJKChpICsgMSkgKiBzaXplb2Yoc3RydWN0IG13bF90
eF9kZXNjKSkpOw0KKwkJCQlkZXNjLT50eF9obmRsW2ldLnBkZXNjID0NCisJCQkJCSZkZXNjLT5w
dHhfcmluZ1tpXTsNCisJCQkJaWYgKGkgPCBTWVNBRFBUX01BWF9OVU1fVFhfREVTQyAtIDEpDQor
CQkJCQlkZXNjLT50eF9obmRsW2ldLnBuZXh0ID0NCisJCQkJCQkmZGVzYy0+dHhfaG5kbFtpICsg
MV07DQorCQkJfQ0KKwkJCWRlc2MtPnB0eF9yaW5nW1NZU0FEUFRfTUFYX05VTV9UWF9ERVNDIC0g
MV0ucHBoeXNfbmV4dCA9DQorCQkJCWNwdV90b19sZTMyKCh1MzIpZGVzYy0+cHBoeXNfdHhfcmlu
Zyk7DQorCQkJZGVzYy0+dHhfaG5kbFtTWVNBRFBUX01BWF9OVU1fVFhfREVTQyAtIDFdLnBuZXh0
ID0NCisJCQkJJmRlc2MtPnR4X2huZGxbMF07DQorDQorCQkJZGVzYy0+cHN0YWxlX3R4X2huZGwg
PSAmZGVzYy0+dHhfaG5kbFswXTsNCisJCQlkZXNjLT5wbmV4dF90eF9obmRsICA9ICZkZXNjLT50
eF9obmRsWzBdOw0KKwkJfSBlbHNlIHsNCisJCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LCAi
bm8gdmFsaWQgVFggbWVtXG4iKTsNCisJCQlyZXR1cm4gLUVOT01FTTsNCisJCX0NCisJfQ0KKw0K
KwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgbXdsX3R4X3JpbmdfY2xlYW51cChzdHJ1
Y3QgbXdsX3ByaXYgKnByaXYpDQorew0KKwlpbnQgY2xlYW5lZF90eF9kZXNjID0gMDsNCisJaW50
IG51bSwgaTsNCisJc3RydWN0IG13bF9kZXNjX2RhdGEgKmRlc2M7DQorDQorCWZvciAobnVtID0g
MDsgbnVtIDwgU1lTQURQVF9OVU1fT0ZfREVTQ19EQVRBOyBudW0rKykgew0KKwkJc2tiX3F1ZXVl
X3B1cmdlKCZwcml2LT50eHFbbnVtXSk7DQorCQlwcml2LT5md19kZXNjX2NudFtudW1dID0gMDsN
CisNCisJCWRlc2MgPSAmcHJpdi0+ZGVzY19kYXRhW251bV07DQorDQorCQlpZiAoZGVzYy0+cHR4
X3JpbmcpIHsNCisJCQlmb3IgKGkgPSAwOyBpIDwgU1lTQURQVF9NQVhfTlVNX1RYX0RFU0M7IGkr
Kykgew0KKwkJCQlpZiAoIWRlc2MtPnR4X2huZGxbaV0ucHNrX2J1ZmYpDQorCQkJCQljb250aW51
ZTsNCisNCisJCQkJd2lwaHlfaW5mbyhwcml2LT5ody0+d2lwaHksDQorCQkJCQkgICAidW5tYXBw
ZWQgYW5kIGZyZWUnZCAlaSAweCVwIDB4JXhcbiIsDQorCQkJCQkgICBpLA0KKwkJCQkJICAgZGVz
Yy0+dHhfaG5kbFtpXS5wc2tfYnVmZi0+ZGF0YSwNCisJCQkJCSAgIGxlMzJfdG9fY3B1KA0KKwkJ
CQkJICAgZGVzYy0+cHR4X3JpbmdbaV0ucGt0X3B0cikpOw0KKwkJCQlwY2lfdW5tYXBfc2luZ2xl
KHByaXYtPnBkZXYsDQorCQkJCQkJIGxlMzJfdG9fY3B1KA0KKwkJCQkJCSBkZXNjLT5wdHhfcmlu
Z1tpXS5wa3RfcHRyKSwNCisJCQkJCQkgZGVzYy0+dHhfaG5kbFtpXS5wc2tfYnVmZi0+bGVuLA0K
KwkJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsNCisJCQkJZGV2X2tmcmVlX3NrYl9hbnkoZGVzYy0+
dHhfaG5kbFtpXS5wc2tfYnVmZik7DQorCQkJCWRlc2MtPnB0eF9yaW5nW2ldLnN0YXR1cyA9DQor
CQkJCQljcHVfdG9fbGUzMihFQUdMRV9UWERfU1RBVFVTX0lETEUpOw0KKwkJCQlkZXNjLT5wdHhf
cmluZ1tpXS5wa3RfcHRyID0gMDsNCisJCQkJZGVzYy0+cHR4X3JpbmdbaV0ucGt0X2xlbiA9IDA7
DQorCQkJCWRlc2MtPnR4X2huZGxbaV0ucHNrX2J1ZmYgPSBOVUxMOw0KKwkJCQljbGVhbmVkX3R4
X2Rlc2MrKzsNCisJCQl9DQorCQl9DQorCX0NCisNCisJd2lwaHlfaW5mbyhwcml2LT5ody0+d2lw
aHksICJjbGVhbmVkICVpIFRYIGRlc2NyXG4iLCBjbGVhbmVkX3R4X2Rlc2MpOw0KK30NCisNCitz
dGF0aWMgdm9pZCBtd2xfdHhfcmluZ19mcmVlKHN0cnVjdCBtd2xfcHJpdiAqcHJpdikNCit7DQor
CWludCBudW07DQorDQorCWlmIChwcml2LT5kZXNjX2RhdGFbMF0ucHR4X3JpbmcpIHsNCisJCWRt
YV9mcmVlX2NvaGVyZW50KCZwcml2LT5wZGV2LT5kZXYsDQorCQkJCSAgTUFYX05VTV9UWF9SSU5H
X0JZVEVTICoNCisJCQkJICBTWVNBRFBUX05VTV9PRl9ERVNDX0RBVEEsDQorCQkJCSAgcHJpdi0+
ZGVzY19kYXRhWzBdLnB0eF9yaW5nLA0KKwkJCQkgIHByaXYtPmRlc2NfZGF0YVswXS5wcGh5c190
eF9yaW5nKTsNCisJfQ0KKw0KKwlmb3IgKG51bSA9IDA7IG51bSA8IFNZU0FEUFRfTlVNX09GX0RF
U0NfREFUQTsgbnVtKyspIHsNCisJCWlmIChwcml2LT5kZXNjX2RhdGFbbnVtXS5wdHhfcmluZykN
CisJCQlwcml2LT5kZXNjX2RhdGFbbnVtXS5wdHhfcmluZyA9IE5VTEw7DQorCQlwcml2LT5kZXNj
X2RhdGFbbnVtXS5wc3RhbGVfdHhfaG5kbCA9IE5VTEw7DQorCQlwcml2LT5kZXNjX2RhdGFbbnVt
XS5wbmV4dF90eF9obmRsID0gTlVMTDsNCisJfQ0KKw0KKwlrZnJlZShwcml2LT5kZXNjX2RhdGFb
MF0udHhfaG5kbCk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBtd2xfdHhfYWRkX2RtYV9o
ZWFkZXIoc3RydWN0IG13bF9wcml2ICpwcml2LA0KKwkJCQkJIHN0cnVjdCBza19idWZmICpza2Is
DQorCQkJCQkgaW50IGhlYWRfcGFkLA0KKwkJCQkJIGludCB0YWlsX3BhZCkNCit7DQorCXN0cnVj
dCBpZWVlODAyMTFfaGRyICp3aDsNCisJaW50IGhkcmxlbjsNCisJaW50IHJlcWRfaGRybGVuOw0K
KwlzdHJ1Y3QgbXdsX2RtYV9kYXRhICp0cjsNCisNCisJLyogQWRkIGEgZmlybXdhcmUgRE1BIGhl
YWRlcjsgdGhlIGZpcm13YXJlIHJlcXVpcmVzIHRoYXQgd2UNCisJICogcHJlc2VudCBhIDItYnl0
ZSBwYXlsb2FkIGxlbmd0aCBmb2xsb3dlZCBieSBhIDQtYWRkcmVzcw0KKwkgKiBoZWFkZXIgKHdp
dGhvdXQgUW9TIGZpZWxkKSwgZm9sbG93ZWQgKG9wdGlvbmFsbHkpIGJ5IGFueQ0KKwkgKiBXRVAv
RXh0SVYgaGVhZGVyIChidXQgb25seSBmaWxsZWQgaW4gZm9yIENDTVApLg0KKwkgKi8NCisJd2gg
PSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7DQorDQorCWhkcmxlbiA9IGllZWU4
MDIxMV9oZHJsZW4od2gtPmZyYW1lX2NvbnRyb2wpOw0KKw0KKwlyZXFkX2hkcmxlbiA9IHNpemVv
ZigqdHIpICsgaGVhZF9wYWQ7DQorDQorCWlmIChoZHJsZW4gIT0gcmVxZF9oZHJsZW4pDQorCQlz
a2JfcHVzaChza2IsIHJlcWRfaGRybGVuIC0gaGRybGVuKTsNCisNCisJaWYgKGllZWU4MDIxMV9p
c19kYXRhX3Fvcyh3aC0+ZnJhbWVfY29udHJvbCkpDQorCQloZHJsZW4gLT0gSUVFRTgwMjExX1FP
U19DVExfTEVOOw0KKw0KKwl0ciA9IChzdHJ1Y3QgbXdsX2RtYV9kYXRhICopc2tiLT5kYXRhOw0K
Kw0KKwlpZiAod2ggIT0gJnRyLT53aCkNCisJCW1lbW1vdmUoJnRyLT53aCwgd2gsIGhkcmxlbik7
DQorDQorCWlmIChoZHJsZW4gIT0gc2l6ZW9mKHRyLT53aCkpDQorCQltZW1zZXQoKCh2b2lkICop
JnRyLT53aCkgKyBoZHJsZW4sIDAsIHNpemVvZih0ci0+d2gpIC0gaGRybGVuKTsNCisNCisJLyog
RmlybXdhcmUgbGVuZ3RoIGlzIHRoZSBsZW5ndGggb2YgdGhlIGZ1bGx5IGZvcm1lZCAiODAyLjEx
DQorCSAqIHBheWxvYWQiLiAgVGhhdCBpcywgZXZlcnl0aGluZyBleGNlcHQgZm9yIHRoZSA4MDIu
MTEgaGVhZGVyLg0KKwkgKiBUaGlzIGluY2x1ZGVzIGFsbCBjcnlwdG8gbWF0ZXJpYWwgaW5jbHVk
aW5nIHRoZSBNSUMuDQorCSAqLw0KKwl0ci0+ZndsZW4gPSBjcHVfdG9fbGUxNihza2ItPmxlbiAt
IHNpemVvZigqdHIpICsgdGFpbF9wYWQpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgbXds
X3R4X2VuY2Fwc3VsYXRlX2ZyYW1lKHN0cnVjdCBtd2xfcHJpdiAqcHJpdiwNCisJCQkJCSAgICBz
dHJ1Y3Qgc2tfYnVmZiAqc2tiLA0KKwkJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYg
KmtfY29uZiwNCisJCQkJCSAgICBib29sICpjY21wKQ0KK3sNCisJaW50IGhlYWRfcGFkID0gMDsN
CisJaW50IGRhdGFfcGFkID0gMDsNCisNCisJLyogTWFrZSBzdXJlIHRoZSBwYWNrZXQgaGVhZGVy
IGlzIGluIHRoZSBETUEgaGVhZGVyIGZvcm1hdCAoNC1hZGRyZXNzDQorCSAqIHdpdGhvdXQgUW9T
KSwgYW5kIGFkZCBoZWFkICYgdGFpbCBwYWRkaW5nIHdoZW4gSFcgY3J5cHRvIGlzIGVuYWJsZWQu
DQorCSAqDQorCSAqIFdlIGhhdmUgdGhlIGZvbGxvd2luZyB0cmFpbGVyIHBhZGRpbmcgcmVxdWly
ZW1lbnRzOg0KKwkgKiAtIFdFUDogNCB0cmFpbGVyIGJ5dGVzIChJQ1YpDQorCSAqIC0gVEtJUDog
MTIgdHJhaWxlciBieXRlcyAoOCBNSUMgKyA0IElDVikNCisJICogLSBDQ01QOiA4IHRyYWlsZXIg
Ynl0ZXMgKE1JQykNCisJICovDQorDQorCWlmIChrX2NvbmYpIHsNCisJCWhlYWRfcGFkID0ga19j
b25mLT5pdl9sZW47DQorDQorCQlzd2l0Y2ggKGtfY29uZi0+Y2lwaGVyKSB7DQorCQljYXNlIFdM
QU5fQ0lQSEVSX1NVSVRFX1dFUDQwOg0KKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6
DQorCQkJZGF0YV9wYWQgPSA0Ow0KKwkJCWJyZWFrOw0KKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlU
RV9US0lQOg0KKwkJCWRhdGFfcGFkID0gMTI7DQorCQkJYnJlYWs7DQorCQljYXNlIFdMQU5fQ0lQ
SEVSX1NVSVRFX0NDTVA6DQorCQkJZGF0YV9wYWQgPSA4Ow0KKwkJCSpjY21wID0gdHJ1ZTsNCisJ
CQlicmVhazsNCisJCX0NCisJfQ0KKw0KKwltd2xfdHhfYWRkX2RtYV9oZWFkZXIocHJpdiwgc2ti
LCBoZWFkX3BhZCwgZGF0YV9wYWQpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgbXdsX3R4
X2luc2VydF9jY21wX2hkcih1OCAqcGNjbXBfaGRyLA0KKwkJCQkJICB1OCBrZXlfaWQsIHUxNiBp
djE2LCB1MzIgaXYzMikNCit7DQorCXN0cnVjdCBjY21wX2hkciAqY2NtcF9oID0gKHN0cnVjdCBj
Y21wX2hkciAqKXBjY21wX2hkcjsNCisNCisJY2NtcF9oLT5pdjE2ID0gY3B1X3RvX2xlMTYoaXYx
Nik7DQorCWNjbXBfaC0+cnN2ZCA9IDA7DQorCWNjbXBfaC0+a2V5X2lkID0gRVhUX0lWIHwgKGtl
eV9pZCA8PCA2KTsNCisJY2NtcF9oLT5pdjMyID0gY3B1X3RvX2xlMzIoaXYzMik7DQorfQ0KKw0K
K3N0YXRpYyBpbmxpbmUgaW50IG13bF90eF90aWRfcXVldWVfbWFwcGluZyh1OCB0aWQpDQorew0K
Kwlzd2l0Y2ggKHRpZCkgew0KKwljYXNlIDA6DQorCWNhc2UgMzoNCisJCXJldHVybiBJRUVFODAy
MTFfQUNfQkU7DQorCWNhc2UgMToNCisJY2FzZSAyOg0KKwkJcmV0dXJuIElFRUU4MDIxMV9BQ19C
SzsNCisJY2FzZSA0Og0KKwljYXNlIDU6DQorCQlyZXR1cm4gSUVFRTgwMjExX0FDX1ZJOw0KKwlj
YXNlIDY6DQorCWNhc2UgNzoNCisJCXJldHVybiBJRUVFODAyMTFfQUNfVk87DQorCWRlZmF1bHQ6
DQorCQlicmVhazsNCisJfQ0KKw0KKwlyZXR1cm4gLTE7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUg
dm9pZCBtd2xfdHhfY291bnRfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4IHRp
ZCkNCit7DQorCXN0cnVjdCBtd2xfc3RhICpzdGFfaW5mbzsNCisJc3RydWN0IG13bF90eF9pbmZv
ICp0eF9zdGF0czsNCisNCisJaWYgKFdBUk5fT04odGlkID49IFNZU0FEUFRfTUFYX1RJRCkpDQor
CQlyZXR1cm47DQorDQorCXN0YV9pbmZvID0gbXdsX2Rldl9nZXRfc3RhKHN0YSk7DQorDQorCXR4
X3N0YXRzID0gJnN0YV9pbmZvLT50eF9zdGF0c1t0aWRdOw0KKw0KKwlpZiAodHhfc3RhdHMtPnN0
YXJ0X3RpbWUgPT0gMCkNCisJCXR4X3N0YXRzLT5zdGFydF90aW1lID0gamlmZmllczsNCisNCisJ
LyogcmVzZXQgdGhlIHBhY2tldCBjb3VudCBhZnRlciBlYWNoIHNlY29uZCBlbGFwc2VzLiAgSWYg
dGhlIG51bWJlciBvZg0KKwkgKiBwYWNrZXRzIGV2ZXIgZXhjZWVkcyB0aGUgYW1wZHVfbWluX3Ry
YWZmaWMgdGhyZXNob2xkLCB3ZSB3aWxsIGFsbG93DQorCSAqIGFuIGFtcGR1IHN0cmVhbSB0byBi
ZSBzdGFydGVkLg0KKwkgKi8NCisJaWYgKGppZmZpZXMgLSB0eF9zdGF0cy0+c3RhcnRfdGltZSA+
IEhaKSB7DQorCQl0eF9zdGF0cy0+cGt0cyA9IDA7DQorCQl0eF9zdGF0cy0+c3RhcnRfdGltZSA9
IDA7DQorCX0gZWxzZSB7DQorCQl0eF9zdGF0cy0+cGt0cysrOw0KKwl9DQorfQ0KKw0KK3N0YXRp
YyBpbmxpbmUgYm9vbCBtd2xfdHhfYXZhaWxhYmxlKHN0cnVjdCBtd2xfcHJpdiAqcHJpdiwgaW50
IGRlc2NfbnVtKQ0KK3sNCisJc3RydWN0IG13bF90eF9obmRsICp0eF9obmRsOw0KKw0KKwl0eF9o
bmRsID0gcHJpdi0+ZGVzY19kYXRhW2Rlc2NfbnVtXS5wbmV4dF90eF9obmRsOw0KKw0KKwlpZiAo
IXR4X2huZGwtPnBkZXNjKQ0KKwkJcmV0dXJuIGZhbHNlOw0KKw0KKwlpZiAodHhfaG5kbC0+cGRl
c2MtPnN0YXR1cyAhPSBFQUdMRV9UWERfU1RBVFVTX0lETEUpIHsNCisJCS8qIEludGVycnVwdCBG
L1cgYW55d2F5ICovDQorCQlpZiAodHhfaG5kbC0+cGRlc2MtPnN0YXR1cyAmDQorCQkgICAgY3B1
X3RvX2xlMzIoRUFHTEVfVFhEX1NUQVRVU19GV19PV05FRCkpDQorCQkJd3JpdGVsKE1BQ1JFR19I
MkFSSUNfQklUX1BQQV9SRUFEWSwNCisJCQkgICAgICAgcHJpdi0+aW9iYXNlMSArDQorCQkJICAg
ICAgIE1BQ1JFR19SRUdfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOw0KKwkJcmV0dXJuIGZhbHNlOw0K
Kwl9DQorDQorCXJldHVybiB0cnVlOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgbXdsX3R4
X3NrYihzdHJ1Y3QgbXdsX3ByaXYgKnByaXYsIGludCBkZXNjX251bSwNCisJCQkgICAgICBzdHJ1
Y3Qgc2tfYnVmZiAqdHhfc2tiKQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9p
bmZvOw0KKwlzdHJ1Y3QgbXdsX3R4X2N0cmwgKnR4X2N0cmw7DQorCXN0cnVjdCBtd2xfdHhfaG5k
bCAqdHhfaG5kbDsNCisJc3RydWN0IG13bF90eF9kZXNjICp0eF9kZXNjOw0KKwlzdHJ1Y3QgaWVl
ZTgwMjExX3N0YSAqc3RhOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOw0KKwlzdHJ1Y3Qg
bXdsX3ZpZiAqbXdsX3ZpZjsNCisJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa19jb25mOw0K
Kwlib29sIGNjbXAgPSBmYWxzZTsNCisJc3RydWN0IG13bF9kbWFfZGF0YSAqZG1hX2RhdGE7DQor
CXN0cnVjdCBpZWVlODAyMTFfaGRyICp3aDsNCisJZG1hX2FkZHJfdCBkbWE7DQorDQorCWlmIChX
QVJOX09OKCF0eF9za2IpKQ0KKwkJcmV0dXJuOw0KKw0KKwl0eF9pbmZvID0gSUVFRTgwMjExX1NL
Ql9DQih0eF9za2IpOw0KKwl0eF9jdHJsID0gKHN0cnVjdCBtd2xfdHhfY3RybCAqKSZ0eF9pbmZv
LT5zdGF0dXM7DQorCXN0YSA9IChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqKXR4X2N0cmwtPnN0YTsN
CisJdmlmID0gKHN0cnVjdCBpZWVlODAyMTFfdmlmICopdHhfY3RybC0+dmlmOw0KKwltd2xfdmlm
ID0gbXdsX2Rldl9nZXRfdmlmKHZpZik7DQorCWtfY29uZiA9IChzdHJ1Y3QgaWVlZTgwMjExX2tl
eV9jb25mICopdHhfY3RybC0+a19jb25mOw0KKw0KKwltd2xfdHhfZW5jYXBzdWxhdGVfZnJhbWUo
cHJpdiwgdHhfc2tiLCBrX2NvbmYsICZjY21wKTsNCisNCisJZG1hX2RhdGEgPSAoc3RydWN0IG13
bF9kbWFfZGF0YSAqKXR4X3NrYi0+ZGF0YTsNCisJd2ggPSAmZG1hX2RhdGEtPndoOw0KKw0KKwlp
ZiAoaWVlZTgwMjExX2lzX2RhdGEod2gtPmZyYW1lX2NvbnRyb2wpKSB7DQorCQlpZiAoaXNfbXVs
dGljYXN0X2V0aGVyX2FkZHIod2gtPmFkZHIxKSkgew0KKwkJCWlmIChjY21wKSB7DQorCQkJCW13
bF90eF9pbnNlcnRfY2NtcF9oZHIoZG1hX2RhdGEtPmRhdGEsDQorCQkJCQkJICAgICAgIG13bF92
aWYtPmtleWlkeCwNCisJCQkJCQkgICAgICAgbXdsX3ZpZi0+aXYxNiwNCisJCQkJCQkgICAgICAg
bXdsX3ZpZi0+aXYzMik7DQorCQkJCUlOQ1JFQVNFX0lWKG13bF92aWYtPml2MTYsIG13bF92aWYt
Pml2MzIpOw0KKwkJCX0NCisJCX0gZWxzZSB7DQorCQkJaWYgKGNjbXApIHsNCisJCQkJaWYgKHZp
Zi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7DQorCQkJCQltd2xfdHhfaW5zZXJ0
X2NjbXBfaGRyKGRtYV9kYXRhLT5kYXRhLA0KKwkJCQkJCQkgICAgICAgbXdsX3ZpZi0+a2V5aWR4
LA0KKwkJCQkJCQkgICAgICAgbXdsX3ZpZi0+aXYxNiwNCisJCQkJCQkJICAgICAgIG13bF92aWYt
Pml2MzIpOw0KKwkJCQkJSU5DUkVBU0VfSVYobXdsX3ZpZi0+aXYxNiwNCisJCQkJCQkgICAgbXds
X3ZpZi0+aXYzMik7DQorCQkJCX0gZWxzZSB7DQorCQkJCQlzdHJ1Y3QgbXdsX3N0YSAqc3RhX2lu
Zm87DQorDQorCQkJCQlzdGFfaW5mbyA9IG13bF9kZXZfZ2V0X3N0YShzdGEpOw0KKw0KKwkJCQkJ
bXdsX3R4X2luc2VydF9jY21wX2hkcihkbWFfZGF0YS0+ZGF0YSwNCisJCQkJCQkJICAgICAgIDAs
DQorCQkJCQkJCSAgICAgICBzdGFfaW5mby0+aXYxNiwNCisJCQkJCQkJICAgICAgIHN0YV9pbmZv
LT5pdjMyKTsNCisJCQkJCUlOQ1JFQVNFX0lWKHN0YV9pbmZvLT5pdjE2LA0KKwkJCQkJCSAgICBz
dGFfaW5mby0+aXYzMik7DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisNCisJdHhfaG5kbCA9
IHByaXYtPmRlc2NfZGF0YVtkZXNjX251bV0ucG5leHRfdHhfaG5kbDsNCisJdHhfaG5kbC0+cHNr
X2J1ZmYgPSB0eF9za2I7DQorCXR4X2Rlc2MgPSB0eF9obmRsLT5wZGVzYzsNCisJdHhfZGVzYy0+
dHhfcHJpb3JpdHkgPSB0eF9jdHJsLT50eF9wcmlvcml0eTsNCisJdHhfZGVzYy0+cW9zX2N0cmwg
PSBjcHVfdG9fbGUxNih0eF9jdHJsLT5xb3NfY3RybCk7DQorCXR4X2Rlc2MtPnBrdF9sZW4gPSBj
cHVfdG9fbGUxNih0eF9za2ItPmxlbik7DQorCXR4X2Rlc2MtPnBhY2tldF9pbmZvID0gMDsNCisJ
dHhfZGVzYy0+ZGF0YV9yYXRlID0gMDsNCisJdHhfZGVzYy0+dHlwZSA9IHR4X2N0cmwtPnR5cGU7
DQorCXR4X2Rlc2MtPnhtaXRfY29udHJvbCA9IHR4X2N0cmwtPnhtaXRfY29udHJvbDsNCisJdHhf
ZGVzYy0+c2FwX3BrdF9pbmZvID0gMDsNCisJZG1hID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRl
diwgdHhfc2tiLT5kYXRhLA0KKwkJCSAgICAgdHhfc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0Up
Ow0KKwlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHByaXYtPnBkZXYsIGRtYSkpIHsNCisJCWRl
dl9rZnJlZV9za2JfYW55KHR4X3NrYik7DQorCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LA0K
KwkJCSAgImZhaWxlZCB0byBtYXAgcGNpIG1lbW9yeSFcbiIpOw0KKwkJcmV0dXJuOw0KKwl9DQor
CXR4X2Rlc2MtPnBrdF9wdHIgPSBjcHVfdG9fbGUzMihkbWEpOw0KKwl0eF9kZXNjLT5zdGF0dXMg
PSBjcHVfdG9fbGUzMihFQUdMRV9UWERfU1RBVFVTX0ZXX09XTkVEKTsNCisJLyogbWFrZSBzdXJl
IGFsbCB0aGUgbWVtb3J5IHRyYW5zYWN0aW9ucyBkb25lIGJ5IGNwdSB3ZXJlIGNvbXBsZXRlZCAq
Lw0KKwl3bWIoKTsJLypEYXRhIE1lbW9yeSBCYXJyaWVyKi8NCisJd3JpdGVsKE1BQ1JFR19IMkFS
SUNfQklUX1BQQV9SRUFEWSwNCisJICAgICAgIHByaXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVHX0gy
QV9JTlRFUlJVUFRfRVZFTlRTKTsNCisJcHJpdi0+ZGVzY19kYXRhW2Rlc2NfbnVtXS5wbmV4dF90
eF9obmRsID0gdHhfaG5kbC0+cG5leHQ7DQorCXByaXYtPmZ3X2Rlc2NfY250W2Rlc2NfbnVtXSsr
Ow0KK30NCisNCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICptd2xfdHhfZG9fYW1zZHUo
c3RydWN0IG13bF9wcml2ICpwcml2LA0KKwkJCQkJICAgICAgaW50IGRlc2NfbnVtLA0KKwkJCQkJ
ICAgICAgc3RydWN0IHNrX2J1ZmYgKnR4X3NrYiwNCisJCQkJCSAgICAgIHN0cnVjdCBpZWVlODAy
MTFfdHhfaW5mbyAqdHhfaW5mbykNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7DQor
CXN0cnVjdCBtd2xfc3RhICpzdGFfaW5mbzsNCisJc3RydWN0IG13bF90eF9jdHJsICp0eF9jdHJs
ID0gKHN0cnVjdCBtd2xfdHhfY3RybCAqKSZ0eF9pbmZvLT5zdGF0dXM7DQorCXN0cnVjdCBpZWVl
ODAyMTFfdHhfaW5mbyAqYW1zZHVfaW5mbzsNCisJc3RydWN0IHNrX2J1ZmZfaGVhZCAqYW1zZHVf
cGt0czsNCisJc3RydWN0IG13bF9hbXNkdV9mcmFnICphbXNkdTsNCisJaW50IGFtc2R1X2FsbG93
X3NpemU7DQorCXN0cnVjdCBpZWVlODAyMTFfaGRyICp3aDsNCisJaW50IHdoX2xlbjsNCisJdTE2
IGxlbjsNCisJdTggKmRhdGE7DQorDQorCXN0YSA9IChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqKXR4
X2N0cmwtPnN0YTsNCisJc3RhX2luZm8gPSBtd2xfZGV2X2dldF9zdGEoc3RhKTsNCisNCisJaWYg
KCFzdGFfaW5mby0+aXNfYW1zZHVfYWxsb3dlZCkNCisJCXJldHVybiB0eF9za2I7DQorDQorCXdo
ID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopdHhfc2tiLT5kYXRhOw0KKwlpZiAoc3RhX2luZm8t
PmlzX21lc2hfbm9kZSAmJiBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcih3aC0+YWRkcjMpKQ0KKwkJ
cmV0dXJuIHR4X3NrYjsNCisNCisJaWYgKHN0YV9pbmZvLT5hbXNkdV9jdHJsLmNhcCA9PSBNV0xf
QU1TRFVfU0laRV80SykNCisJCWFtc2R1X2FsbG93X3NpemUgPSBTWVNBRFBUX0FNU0RVXzRLX01B
WF9TSVpFOw0KKwllbHNlIGlmIChzdGFfaW5mby0+YW1zZHVfY3RybC5jYXAgPT0gTVdMX0FNU0RV
X1NJWkVfOEspDQorCQlhbXNkdV9hbGxvd19zaXplID0gU1lTQURQVF9BTVNEVV84S19NQVhfU0la
RTsNCisJZWxzZQ0KKwkJcmV0dXJuIHR4X3NrYjsNCisNCisJc3Bpbl9sb2NrX2JoKCZzdGFfaW5m
by0+YW1zZHVfbG9jayk7DQorCWFtc2R1ID0gJnN0YV9pbmZvLT5hbXNkdV9jdHJsLmZyYWdbZGVz
Y19udW1dOw0KKw0KKwlpZiAodHhfc2tiLT5sZW4gPiBTWVNBRFBUX0FNU0RVX0FMTE9XX1NJWkUp
IHsNCisJCWlmIChhbXNkdS0+bnVtKSB7DQorCQkJbXdsX3R4X3NrYihwcml2LCBkZXNjX251bSwg
YW1zZHUtPnNrYik7DQorCQkJYW1zZHUtPm51bSA9IDA7DQorCQkJYW1zZHUtPmN1cl9wb3MgPSBO
VUxMOw0KKw0KKwkJCWlmICghbXdsX3R4X2F2YWlsYWJsZShwcml2LCBkZXNjX251bSkpIHsNCisJ
CQkJc2tiX3F1ZXVlX2hlYWQoJnByaXYtPnR4cVtkZXNjX251bV0sIHR4X3NrYik7DQorCQkJCXNw
aW5fdW5sb2NrX2JoKCZzdGFfaW5mby0+YW1zZHVfbG9jayk7DQorCQkJCXJldHVybiBOVUxMOw0K
KwkJCX0NCisJCX0NCisJCXNwaW5fdW5sb2NrX2JoKCZzdGFfaW5mby0+YW1zZHVfbG9jayk7DQor
CQlyZXR1cm4gdHhfc2tiOw0KKwl9DQorDQorCS8qIHBvdGVudGlhbCBhbXNkdSBzaXplLCBzaG91
bGQgYWRkIGFtc2R1IGhlYWRlciAxNCBieXRlcyArDQorCSAqIG1heGltdW0gcGFkZGluZyAzLg0K
KwkgKi8NCisJd2hfbGVuID0gaWVlZTgwMjExX2hkcmxlbih3aC0+ZnJhbWVfY29udHJvbCk7DQor
CWxlbiA9IHR4X3NrYi0+bGVuIC0gd2hfbGVuICsgMTc7DQorDQorCWlmIChhbXNkdS0+bnVtKSB7
DQorCQlpZiAoKGFtc2R1LT5za2ItPmxlbiArIGxlbikgPiBhbXNkdV9hbGxvd19zaXplKSB7DQor
CQkJbXdsX3R4X3NrYihwcml2LCBkZXNjX251bSwgYW1zZHUtPnNrYik7DQorCQkJYW1zZHUtPm51
bSA9IDA7DQorCQkJYW1zZHUtPmN1cl9wb3MgPSBOVUxMOw0KKwkJfQ0KKwl9DQorDQorCWFtc2R1
LT5qaWZmaWVzID0gamlmZmllczsNCisJbGVuID0gdHhfc2tiLT5sZW4gLSB3aF9sZW47DQorDQor
CWlmIChhbXNkdS0+bnVtID09IDApIHsNCisJCXN0cnVjdCBza19idWZmICpuZXdza2I7DQorDQor
CQlhbXNkdV9wa3RzID0gKHN0cnVjdCBza19idWZmX2hlYWQgKikNCisJCQlrbWFsbG9jKHNpemVv
ZigqYW1zZHVfcGt0cyksIEdGUF9LRVJORUwpOw0KKwkJaWYgKCFhbXNkdV9wa3RzKSB7DQorCQkJ
c3Bpbl91bmxvY2tfYmgoJnN0YV9pbmZvLT5hbXNkdV9sb2NrKTsNCisJCQlyZXR1cm4gdHhfc2ti
Ow0KKwkJfQ0KKwkJbmV3c2tiID0gZGV2X2FsbG9jX3NrYihhbXNkdV9hbGxvd19zaXplICsNCisJ
CQkJICAgICAgIFNZU0FEUFRfTUlOX0JZVEVTX0hFQURST09NKTsNCisJCWlmICghbmV3c2tiKSB7
DQorCQkJc3Bpbl91bmxvY2tfYmgoJnN0YV9pbmZvLT5hbXNkdV9sb2NrKTsNCisJCQlrZnJlZShh
bXNkdV9wa3RzKTsNCisJCQlyZXR1cm4gdHhfc2tiOw0KKwkJfQ0KKw0KKwkJZGF0YSA9IG5ld3Nr
Yi0+ZGF0YTsNCisJCW1lbWNweShkYXRhLCB0eF9za2ItPmRhdGEsIHdoX2xlbik7DQorCQlpZiAo
c3RhX2luZm8tPmlzX21lc2hfbm9kZSkgew0KKwkJCWV0aGVyX2FkZHJfY29weShkYXRhICsgd2hf
bGVuLCB3aC0+YWRkcjMpOw0KKwkJCWV0aGVyX2FkZHJfY29weShkYXRhICsgd2hfbGVuICsgRVRI
X0FMRU4sIHdoLT5hZGRyNCk7DQorCQl9IGVsc2Ugew0KKwkJCWV0aGVyX2FkZHJfY29weShkYXRh
ICsgd2hfbGVuLA0KKwkJCQkJaWVlZTgwMjExX2dldF9EQSh3aCkpOw0KKwkJCWV0aGVyX2FkZHJf
Y29weShkYXRhICsgd2hfbGVuICsgRVRIX0FMRU4sDQorCQkJCQlpZWVlODAyMTFfZ2V0X1NBKHdo
KSk7DQorCQl9DQorCQkqKHU4ICopKGRhdGEgKyB3aF9sZW4gKyBFVEhfSExFTiAtIDEpID0gbGVu
ICYgMHhmZjsNCisJCSoodTggKikoZGF0YSArIHdoX2xlbiArIEVUSF9ITEVOIC0gMikgPSAobGVu
ID4+IDgpICYgMHhmZjsNCisJCW1lbWNweShkYXRhICsgd2hfbGVuICsgRVRIX0hMRU4sIHR4X3Nr
Yi0+ZGF0YSArIHdoX2xlbiwgbGVuKTsNCisNCisJCXNrYl9wdXQobmV3c2tiLCB0eF9za2ItPmxl
biArIEVUSF9ITEVOKTsNCisJCXR4X2N0cmwtPnFvc19jdHJsIHw9IElFRUU4MDIxMV9RT1NfQ1RM
X0FfTVNEVV9QUkVTRU5UOw0KKwkJYW1zZHVfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IobmV3c2ti
KTsNCisJCW1lbWNweShhbXNkdV9pbmZvLCB0eF9pbmZvLCBzaXplb2YoKnR4X2luZm8pKTsNCisJ
CXNrYl9xdWV1ZV9oZWFkX2luaXQoYW1zZHVfcGt0cyk7DQorCQkoKHN0cnVjdCBtd2xfdHhfY3Ry
bCAqKSZhbXNkdV9pbmZvLT5zdGF0dXMpLT5hbXNkdV9wa3RzID0NCisJCQkodm9pZCAqKWFtc2R1
X3BrdHM7DQorCQlhbXNkdS0+c2tiID0gbmV3c2tiOw0KKwl9IGVsc2Ugew0KKwkJYW1zZHUtPmN1
cl9wb3MgKz0gYW1zZHUtPnBhZDsNCisJCWRhdGEgPSBhbXNkdS0+Y3VyX3BvczsNCisNCisJCWlm
IChzdGFfaW5mby0+aXNfbWVzaF9ub2RlKSB7DQorCQkJZXRoZXJfYWRkcl9jb3B5KGRhdGEsIHdo
LT5hZGRyMyk7DQorCQkJZXRoZXJfYWRkcl9jb3B5KGRhdGEgKyBFVEhfQUxFTiwgd2gtPmFkZHI0
KTsNCisJCX0gZWxzZSB7DQorCQkJZXRoZXJfYWRkcl9jb3B5KGRhdGEsIGllZWU4MDIxMV9nZXRf
REEod2gpKTsNCisJCQlldGhlcl9hZGRyX2NvcHkoZGF0YSArIEVUSF9BTEVOLCBpZWVlODAyMTFf
Z2V0X1NBKHdoKSk7DQorCQl9DQorCQkqKHU4ICopKGRhdGEgKyBFVEhfSExFTiAtIDEpID0gbGVu
ICYgMHhmZjsNCisJCSoodTggKikoZGF0YSArIEVUSF9ITEVOIC0gMikgPSAobGVuID4+IDgpICYg
MHhmZjsNCisJCW1lbWNweShkYXRhICsgRVRIX0hMRU4sIHR4X3NrYi0+ZGF0YSArIHdoX2xlbiwg
bGVuKTsNCisNCisJCXNrYl9wdXQoYW1zZHUtPnNrYiwgbGVuICsgRVRIX0hMRU4gKyBhbXNkdS0+
cGFkKTsNCisJCWFtc2R1X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKGFtc2R1LT5za2IpOw0KKwkJ
YW1zZHVfcGt0cyA9IChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICopDQorCQkJKChzdHJ1Y3QgbXdsX3R4
X2N0cmwgKikmYW1zZHVfaW5mby0+c3RhdHVzKS0+YW1zZHVfcGt0czsNCisJfQ0KKw0KKwlhbXNk
dS0+bnVtKys7DQorCWFtc2R1LT5wYWQgPSAoKGxlbiArIEVUSF9ITEVOKSAlIDQpID8gKDQgLSAo
bGVuICsgRVRIX0hMRU4pICUgNCkgOiAwOw0KKwlhbXNkdS0+Y3VyX3BvcyA9IGFtc2R1LT5za2It
PmRhdGEgKyBhbXNkdS0+c2tiLT5sZW47DQorCXNrYl9xdWV1ZV90YWlsKGFtc2R1X3BrdHMsIHR4
X3NrYik7DQorDQorCWlmIChhbXNkdS0+bnVtID4gU1lTQURQVF9BTVNEVV9QQUNLRVRfVEhSRVNI
T0xEKSB7DQorCQlhbXNkdS0+bnVtID0gMDsNCisJCWFtc2R1LT5jdXJfcG9zID0gTlVMTDsNCisJ
CXNwaW5fdW5sb2NrX2JoKCZzdGFfaW5mby0+YW1zZHVfbG9jayk7DQorCQlyZXR1cm4gYW1zZHUt
PnNrYjsNCisJfQ0KKw0KKwlzcGluX3VubG9ja19iaCgmc3RhX2luZm8tPmFtc2R1X2xvY2spOw0K
KwlyZXR1cm4gTlVMTDsNCit9DQorDQorc3RhdGljIGlubGluZSB2b2lkIG13bF90eF9za2JzKHN0
cnVjdCBpZWVlODAyMTFfaHcgKmh3KQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHct
PnByaXY7DQorCWludCBudW0gPSBTWVNBRFBUX1RYX1dNTV9RVUVVRVM7DQorCXN0cnVjdCBza19i
dWZmICp0eF9za2I7DQorDQorCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfZGVzY19sb2NrKTsNCisJ
d2hpbGUgKG51bS0tKSB7DQorCQl3aGlsZSAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+dHhxW251bV0p
ID4gMCkgew0KKwkJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbzsNCisJCQlzdHJ1
Y3QgbXdsX3R4X2N0cmwgKnR4X2N0cmw7DQorDQorCQkJaWYgKCFtd2xfdHhfYXZhaWxhYmxlKHBy
aXYsIG51bSkpDQorCQkJCWJyZWFrOw0KKw0KKwkJCXR4X3NrYiA9IHNrYl9kZXF1ZXVlKCZwcml2
LT50eHFbbnVtXSk7DQorCQkJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHhfc2tiKTsNCisJ
CQl0eF9jdHJsID0gKHN0cnVjdCBtd2xfdHhfY3RybCAqKSZ0eF9pbmZvLT5zdGF0dXM7DQorDQor
CQkJaWYgKCh0eF9za2ItPnByb3RvY29sICE9IGNwdV90b19iZTE2KEVUSF9QX1BBRSkpICYmDQor
CQkJICAgICh0eF9jdHJsLT50eF9wcmlvcml0eSA+PSBTWVNBRFBUX1RYX1dNTV9RVUVVRVMpKSB7
DQorCQkJCXR4X3NrYiA9IG13bF90eF9kb19hbXNkdShwcml2LCBudW0sDQorCQkJCQkJCSB0eF9z
a2IsIHR4X2luZm8pOw0KKwkJCX0NCisNCisJCQlpZiAodHhfc2tiKQ0KKwkJCQltd2xfdHhfc2ti
KHByaXYsIG51bSwgdHhfc2tiKTsNCisJCX0NCisNCisJCWlmIChza2JfcXVldWVfbGVuKCZwcml2
LT50eHFbbnVtXSkgPA0KKwkJICAgIFNZU0FEUFRfVFhfV0FLRV9RX1RIUkVTSE9MRCkgew0KKwkJ
CWludCBxdWV1ZTsNCisNCisJCQlxdWV1ZSA9IFNZU0FEUFRfVFhfV01NX1FVRVVFUyAtIG51bSAt
IDE7DQorCQkJaWYgKGllZWU4MDIxMV9xdWV1ZV9zdG9wcGVkKGh3LCBxdWV1ZSkpDQorCQkJCWll
ZWU4MDIxMV93YWtlX3F1ZXVlKGh3LCBxdWV1ZSk7DQorCQl9DQorCX0NCisJc3Bpbl91bmxvY2tf
YmgoJnByaXYtPnR4X2Rlc2NfbG9jayk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBtd2xf
dHhfcHJlcGFyZV9pbmZvKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgcmF0ZSwNCisJCQkJ
ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbykNCit7DQorCXUzMiBmb3JtYXQs
IGJhbmR3aWR0aCwgc2hvcnRfZ2ksIHJhdGVfaWQ7DQorDQorCWllZWU4MDIxMV90eF9pbmZvX2Ns
ZWFyX3N0YXR1cyhpbmZvKTsNCisNCisJaW5mby0+c3RhdHVzLnJhdGVzWzBdLmlkeCA9IC0xOw0K
KwlpbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQgPSAwOw0KKwlpbmZvLT5zdGF0dXMucmF0ZXNb
MF0uZmxhZ3MgPSAwOw0KKw0KKwlpZiAocmF0ZSkgew0KKwkJLyogUHJlcGFyZSByYXRlIGluZm9y
bWF0aW9uICovDQorCQlmb3JtYXQgPSByYXRlICYgTVdMX1RYX1JBVEVfRk9STUFUX01BU0s7DQor
CQliYW5kd2lkdGggPQ0KKwkJCShyYXRlICYgTVdMX1RYX1JBVEVfQkFORFdJRFRIX01BU0spID4+
DQorCQkJTVdMX1RYX1JBVEVfQkFORFdJRFRIX1NISUZUOw0KKwkJc2hvcnRfZ2kgPSAocmF0ZSAm
IE1XTF9UWF9SQVRFX1NIT1JUR0lfTUFTSykgPj4NCisJCQlNV0xfVFhfUkFURV9TSE9SVEdJX1NI
SUZUOw0KKwkJcmF0ZV9pZCA9IChyYXRlICYgTVdMX1RYX1JBVEVfUkFURUlETUNTX01BU0spID4+
DQorCQkJTVdMX1RYX1JBVEVfUkFURUlETUNTX1NISUZUOw0KKw0KKwkJaW5mby0+c3RhdHVzLnJh
dGVzWzBdLmlkeCA9IHJhdGVfaWQ7DQorCQlpZiAoZm9ybWF0ID09IFRYX1JBVEVfRk9STUFUX0xF
R0FDWSkgew0KKwkJCWlmIChody0+Y29uZi5jaGFuZGVmLmNoYW4tPmh3X3ZhbHVlID4NCisJCQkg
ICAgQkFORF8yNF9DSEFOTkVMX05VTSkgew0KKwkJCQlpbmZvLT5zdGF0dXMucmF0ZXNbMF0uaWR4
IC09IDU7DQorCQkJfQ0KKwkJfQ0KKwkJaWYgKGZvcm1hdCA9PSBUWF9SQVRFX0ZPUk1BVF8xMU4p
DQorCQkJaW5mby0+c3RhdHVzLnJhdGVzWzBdLmZsYWdzIHw9DQorCQkJCUlFRUU4MDIxMV9UWF9S
Q19NQ1M7DQorCQlpZiAoZm9ybWF0ID09IFRYX1JBVEVfRk9STUFUXzExQUMpDQorCQkJaW5mby0+
c3RhdHVzLnJhdGVzWzBdLmZsYWdzIHw9DQorCQkJCUlFRUU4MDIxMV9UWF9SQ19WSFRfTUNTOw0K
KwkJaWYgKGJhbmR3aWR0aCA9PSBUWF9SQVRFX0JBTkRXSURUSF80MCkNCisJCQlpbmZvLT5zdGF0
dXMucmF0ZXNbMF0uZmxhZ3MgfD0NCisJCQkJSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSDsN
CisJCWlmIChiYW5kd2lkdGggPT0gVFhfUkFURV9CQU5EV0lEVEhfODApDQorCQkJaW5mby0+c3Rh
dHVzLnJhdGVzWzBdLmZsYWdzIHw9DQorCQkJCUlFRUU4MDIxMV9UWF9SQ184MF9NSFpfV0lEVEg7
DQorCQlpZiAoc2hvcnRfZ2kgPT0gVFhfUkFURV9JTkZPX1NIT1JUX0dJKQ0KKwkJCWluZm8tPnN0
YXR1cy5yYXRlc1swXS5mbGFncyB8PQ0KKwkJCQlJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0k7DQor
CQlpbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQgPSAxOw0KKwkJaW5mby0+c3RhdHVzLnJhdGVz
WzFdLmlkeCA9IC0xOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBtd2xfdHhfYWNr
X2Ftc2R1X3BrdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiByYXRlLA0KKwkJCQkJIHN0
cnVjdCBza19idWZmX2hlYWQgKmFtc2R1X3BrdHMpDQorew0KKwlzdHJ1Y3Qgc2tfYnVmZiAqYW1z
ZHVfcGt0Ow0KKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87DQorDQorCXdoaWxlIChz
a2JfcXVldWVfbGVuKGFtc2R1X3BrdHMpID4gMCkgew0KKwkJYW1zZHVfcGt0ID0gc2tiX2RlcXVl
dWUoYW1zZHVfcGt0cyk7DQorCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihhbXNkdV9wa3QpOw0K
KwkJbXdsX3R4X3ByZXBhcmVfaW5mbyhodywgcmF0ZSwgaW5mbyk7DQorCQlpbmZvLT5mbGFncyAm
PSB+SUVFRTgwMjExX1RYX0NUTF9BTVBEVTsNCisJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9U
WF9TVEFUX0FDSzsNCisJCWllZWU4MDIxMV90eF9zdGF0dXMoaHcsIGFtc2R1X3BrdCk7DQorCX0N
CisNCisJa2ZyZWUoYW1zZHVfcGt0cyk7DQorfQ0KKw0KK2ludCBtd2xfdHhfaW5pdChzdHJ1Y3Qg
aWVlZTgwMjExX2h3ICpodykNCit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2
Ow0KKwlpbnQgcmM7DQorDQorCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPmRlbGF5X3EpOw0K
Kw0KKwlyYyA9IG13bF90eF9yaW5nX2FsbG9jKHByaXYpOw0KKwlpZiAocmMpIHsNCisJCXdpcGh5
X2Vycihody0+d2lwaHksICJhbGxvY2F0aW5nIFRYIHJpbmcgZmFpbGVkXG4iKTsNCisJCXJldHVy
biByYzsNCisJfQ0KKw0KKwlyYyA9IG13bF90eF9yaW5nX2luaXQocHJpdik7DQorCWlmIChyYykg
ew0KKwkJbXdsX3R4X3JpbmdfZnJlZShwcml2KTsNCisJCXdpcGh5X2Vycihody0+d2lwaHksICJp
bml0aWFsaXppbmcgVFggcmluZyBmYWlsZWRcbiIpOw0KKwkJcmV0dXJuIHJjOw0KKwl9DQorDQor
CXJldHVybiAwOw0KK30NCisNCit2b2lkIG13bF90eF9kZWluaXQoc3RydWN0IGllZWU4MDIxMV9o
dyAqaHcpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisNCisJc2ti
X3F1ZXVlX3B1cmdlKCZwcml2LT5kZWxheV9xKTsNCisNCisJbXdsX3R4X3JpbmdfY2xlYW51cChw
cml2KTsNCisJbXdsX3R4X3JpbmdfZnJlZShwcml2KTsNCit9DQorDQordm9pZCBtd2xfdHhfeG1p
dChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCSBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRy
b2wgKmNvbnRyb2wsDQorCQkgc3RydWN0IHNrX2J1ZmYgKnNrYikNCit7DQorCXN0cnVjdCBtd2xf
cHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlpbnQgaW5kZXg7DQorCXN0cnVjdCBpZWVlODAyMTFf
c3RhICpzdGE7DQorCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbzsNCisJc3RydWN0
IG13bF92aWYgKm13bF92aWY7DQorCXN0cnVjdCBpZWVlODAyMTFfaGRyICp3aDsNCisJdTggeG1p
dGNvbnRyb2w7DQorCXUxNiBxb3M7DQorCWludCB0eHByaW9yaXR5Ow0KKwl1OCB0aWQgPSAwOw0K
KwlzdHJ1Y3QgbXdsX2FtcGR1X3N0cmVhbSAqc3RyZWFtID0gTlVMTDsNCisJYm9vbCBzdGFydF9i
YV9zZXNzaW9uID0gZmFsc2U7DQorCWJvb2wgbWdtdGZyYW1lID0gZmFsc2U7DQorCXN0cnVjdCBp
ZWVlODAyMTFfbWdtdCAqbWdtdDsNCisJYm9vbCBlYXBvbF9mcmFtZSA9IGZhbHNlOw0KKwlzdHJ1
Y3QgbXdsX3R4X2N0cmwgKnR4X2N0cmw7DQorCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtf
Y29uZiA9IE5VTEw7DQorDQorCWluZGV4ID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7DQor
CXN0YSA9IGNvbnRyb2wtPnN0YTsNCisNCisJd2ggPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilz
a2ItPmRhdGE7DQorDQorCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3Mod2gtPmZyYW1lX2NvbnRy
b2wpKQ0KKwkJcW9zID0gKigodTE2ICopaWVlZTgwMjExX2dldF9xb3NfY3RsKHdoKSk7DQorCWVs
c2UNCisJCXFvcyA9IDA7DQorDQorCWlmIChza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVU
SF9QX1BBRSkpIHsNCisJCWluZGV4ID0gSUVFRTgwMjExX0FDX1ZPOw0KKwkJZWFwb2xfZnJhbWUg
PSB0cnVlOw0KKwl9DQorDQorCWlmIChpZWVlODAyMTFfaXNfbWdtdCh3aC0+ZnJhbWVfY29udHJv
bCkpIHsNCisJCW1nbXRmcmFtZSA9IHRydWU7DQorCQltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFf
bWdtdCAqKXNrYi0+ZGF0YTsNCisJfQ0KKw0KKwl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihz
a2IpOw0KKwltd2xfdmlmID0gbXdsX2Rldl9nZXRfdmlmKHR4X2luZm8tPmNvbnRyb2wudmlmKTsN
CisNCisJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BU1NJR05fU0VRKSB7
DQorCQl3aC0+c2VxX2N0cmwgJj0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NDVExfRlJBRyk7DQor
CQl3aC0+c2VxX2N0cmwgfD0gY3B1X3RvX2xlMTYobXdsX3ZpZi0+c2Vxbm8pOw0KKwkJbXdsX3Zp
Zi0+c2Vxbm8gKz0gMHgxMDsNCisJfQ0KKw0KKwkvKiBTZXR1cCBmaXJtd2FyZSBjb250cm9sIGJp
dCBmaWVsZHMgZm9yIGVhY2ggZnJhbWUgdHlwZS4gKi8NCisJeG1pdGNvbnRyb2wgPSAwOw0KKw0K
KwlpZiAobWdtdGZyYW1lIHx8IGllZWU4MDIxMV9pc19jdGwod2gtPmZyYW1lX2NvbnRyb2wpKSB7
DQorCQlxb3MgPSAwOw0KKwl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19kYXRhKHdoLT5mcmFtZV9j
b250cm9sKSkgew0KKwkJcW9zICY9IH5NV0xfUU9TX0FDS19QT0xJQ1lfTUFTSzsNCisNCisJCWlm
ICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsNCisJCQl4bWl0Y29u
dHJvbCAmPSAweGZiOw0KKwkJCXFvcyB8PSBNV0xfUU9TX0FDS19QT0xJQ1lfQkxPQ0tBQ0s7DQor
CQl9IGVsc2Ugew0KKwkJCXhtaXRjb250cm9sIHw9IDB4NDsNCisJCQlxb3MgfD0gTVdMX1FPU19B
Q0tfUE9MSUNZX05PUk1BTDsNCisJCX0NCisNCisJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRk
cih3aC0+YWRkcjEpKQ0KKwkJCXhtaXRjb250cm9sIHw9IEVBR0xFX1RYRF9YTUlUQ1RSTF9VU0Vf
TUNfUkFURTsNCisNCisJCWtfY29uZiA9IHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5Ow0KKwl9DQor
DQorCS8qIFF1ZXVlIEFEREJBIHJlcXVlc3QgaW4gdGhlIHJlc3BlY3RpdmUgZGF0YSBxdWV1ZS4g
IFdoaWxlIHNldHRpbmcgdXANCisJICogdGhlIGFtcGR1IHN0cmVhbSwgbWFjODAyMTEgcXVldWVz
IGZ1cnRoZXIgcGFja2V0cyBmb3IgdGhhdA0KKwkgKiBwYXJ0aWN1bGFyIHJhL3RpZCBwYWlyLiAg
SG93ZXZlciwgcGFja2V0cyBwaWxlZCB1cCBpbiB0aGUgaGFyZHdhcmUNCisJICogZm9yIHRoYXQg
cmEvdGlkIHBhaXIgd2lsbCBzdGlsbCBnbyBvdXQuIEFEREJBIHJlcXVlc3QgYW5kIHRoZQ0KKwkg
KiByZWxhdGVkIGRhdGEgcGFja2V0cyBnb2luZyBvdXQgZnJvbSBkaWZmZXJlbnQgcXVldWVzIGFz
eW5jaHJvbm91c2x5DQorCSAqIHdpbGwgY2F1c2UgYSBzaGlmdCBpbiB0aGUgcmVjZWl2ZXIgd2lu
ZG93IHdoaWNoIG1pZ2h0IHJlc3VsdCBpbg0KKwkgKiBhbXBkdSBwYWNrZXRzIGdldHRpbmcgZHJv
cHBlZCBhdCB0aGUgcmVjZWl2ZXIgYWZ0ZXIgdGhlIHN0cmVhbSBoYXMNCisJICogYmVlbiBzZXR1
cC4NCisJICovDQorCWlmIChtZ210ZnJhbWUpIHsNCisJCXUxNiBjYXBhYjsNCisNCisJCWlmICh1
bmxpa2VseShpZWVlODAyMTFfaXNfYWN0aW9uKHdoLT5mcmFtZV9jb250cm9sKSAmJg0KKwkJCSAg
ICAgbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPT0gV0xBTl9DQVRFR09SWV9CQUNLICYmDQorCQkJ
ICAgICBtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5hY3Rpb25fY29kZSA9PQ0KKwkJCSAgICAg
V0xBTl9BQ1RJT05fQUREQkFfUkVRKSkgew0KKwkJCWNhcGFiID0gbGUxNl90b19jcHUobWdtdC0+
dS5hY3Rpb24udS5hZGRiYV9yZXEuY2FwYWIpOw0KKwkJCXRpZCA9IChjYXBhYiAmIElFRUU4MDIx
MV9BRERCQV9QQVJBTV9USURfTUFTSykgPj4gMjsNCisJCQlpbmRleCA9IG13bF90eF90aWRfcXVl
dWVfbWFwcGluZyh0aWQpOw0KKwkJCWNhcGFiIHw9IDE7DQorCQkJbWdtdC0+dS5hY3Rpb24udS5h
ZGRiYV9yZXEuY2FwYWIgPSBjcHVfdG9fbGUxNihjYXBhYik7DQorCQl9DQorDQorCQlpZiAodW5s
aWtlbHkoaWVlZTgwMjExX2lzX2FjdGlvbih3aC0+ZnJhbWVfY29udHJvbCkgJiYNCisJCQkgICAg
IG1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID09IFdMQU5fQ0FURUdPUllfQkFDSyAmJg0KKwkJCSAg
ICAgbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmFjdGlvbl9jb2RlID09DQorCQkJICAgICBX
TEFOX0FDVElPTl9BRERCQV9SRVNQKSkgew0KKwkJCWNhcGFiID0gbGUxNl90b19jcHUobWdtdC0+
dS5hY3Rpb24udS5hZGRiYV9yZXNwLmNhcGFiKTsNCisJCQljYXBhYiB8PSAxOw0KKwkJCW1nbXQt
PnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5jYXBhYiA9IGNwdV90b19sZTE2KGNhcGFiKTsNCisJCX0N
CisJfQ0KKw0KKwlpbmRleCA9IFNZU0FEUFRfVFhfV01NX1FVRVVFUyAtIGluZGV4IC0gMTsNCisJ
dHhwcmlvcml0eSA9IGluZGV4Ow0KKw0KKwlpZiAoc3RhICYmIHN0YS0+aHRfY2FwLmh0X3N1cHBv
cnRlZCAmJiAhZWFwb2xfZnJhbWUgJiYNCisJICAgIGllZWU4MDIxMV9pc19kYXRhX3Fvcyh3aC0+
ZnJhbWVfY29udHJvbCkpIHsNCisJCXRpZCA9IHFvcyAmIDB4ZjsNCisJCW13bF90eF9jb3VudF9w
YWNrZXQoc3RhLCB0aWQpOw0KKw0KKwkJc3Bpbl9sb2NrX2JoKCZwcml2LT5zdHJlYW1fbG9jayk7
DQorCQlzdHJlYW0gPSBtd2xfZndjbWRfbG9va3VwX3N0cmVhbShodywgc3RhLT5hZGRyLCB0aWQp
Ow0KKw0KKwkJaWYgKHN0cmVhbSkgew0KKwkJCWlmIChzdHJlYW0tPnN0YXRlID09IEFNUERVX1NU
UkVBTV9BQ1RJVkUpIHsNCisJCQkJaWYgKFdBUk5fT04oIShxb3MgJg0KKwkJCQkJICAgIE1XTF9R
T1NfQUNLX1BPTElDWV9CTE9DS0FDSykpKSB7DQorCQkJCQlzcGluX3VubG9ja19iaCgmcHJpdi0+
c3RyZWFtX2xvY2spOw0KKwkJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsNCisJCQkJCXJldHVy
bjsNCisJCQkJfQ0KKw0KKwkJCQl0eHByaW9yaXR5ID0NCisJCQkJCShTWVNBRFBUX1RYX1dNTV9R
VUVVRVMgKyBzdHJlYW0tPmlkeCkgJQ0KKwkJCQkJU1lTQURQVF9UT1RBTF9IV19RVUVVRVM7DQor
CQkJfSBlbHNlIGlmIChzdHJlYW0tPnN0YXRlID09IEFNUERVX1NUUkVBTV9ORVcpIHsNCisJCQkJ
LyogV2UgZ2V0IGhlcmUgaWYgdGhlIGRyaXZlciBzZW5kcyB1cyBwYWNrZXRzDQorCQkJCSAqIGFm
dGVyIHdlJ3ZlIGluaXRpYXRlZCBhIHN0cmVhbSwgYnV0IGJlZm9yZQ0KKwkJCQkgKiBvdXIgYW1w
ZHVfYWN0aW9uIHJvdXRpbmUgaGFzIGJlZW4gY2FsbGVkDQorCQkJCSAqIHdpdGggSUVFRTgwMjEx
X0FNUERVX1RYX1NUQVJUIHRvIGdldCB0aGUgU1NODQorCQkJCSAqIGZvciB0aGUgQUREQkEgcmVx
dWVzdC4gIFNvIHRoaXMgcGFja2V0IGNhbg0KKwkJCQkgKiBnbyBvdXQgd2l0aCBubyByaXNrIG9m
IHNlcXVlbmNlIG51bWJlcg0KKwkJCQkgKiBtaXNtYXRjaC4gIE5vIHNwZWNpYWwgaGFuZGxpbmcg
aXMgcmVxdWlyZWQuDQorCQkJCSAqLw0KKwkJCX0gZWxzZSB7DQorCQkJCS8qIERyb3AgcGFja2V0
cyB0aGF0IHdvdWxkIGdvIG91dCBhZnRlciB0aGUNCisJCQkJICogQUREQkEgcmVxdWVzdCB3YXMg
c2VudCBidXQgYmVmb3JlIHRoZSBBRERCQQ0KKwkJCQkgKiByZXNwb25zZSBpcyByZWNlaXZlZC4g
IElmIHdlIGRvbid0IGRvIHRoaXMsDQorCQkJCSAqIHRoZSByZWNpcGllbnQgd291bGQgcHJvYmFi
bHkgcmVjZWl2ZSBpdA0KKwkJCQkgKiBhZnRlciB0aGUgQUREQkEgcmVxdWVzdCB3aXRoIFNTTiAw
LiAgVGhpcw0KKwkJCQkgKiB3aWxsIGNhdXNlIHRoZSByZWNpcGllbnQncyBCQSByZWNlaXZlIHdp
bmRvdw0KKwkJCQkgKiB0byBzaGlmdCwgd2hpY2ggd291bGQgY2F1c2UgdGhlIHN1YnNlcXVlbnQN
CisJCQkJICogcGFja2V0cyBpbiB0aGUgQkEgc3RyZWFtIHRvIGJlIGRpc2NhcmRlZC4NCisJCQkJ
ICogbWFjODAyMTEgcXVldWVzIG91ciBwYWNrZXRzIGZvciB1cyBpbiB0aGlzDQorCQkJCSAqIGNh
c2UsIHNvIHRoaXMgaXMgcmVhbGx5IGp1c3QgYSBzYWZldHkgY2hlY2suDQorCQkJCSAqLw0KKwkJ
CQl3aXBoeV93YXJuKGh3LT53aXBoeSwNCisJCQkJCSAgICJjYW4ndCBzZW5kIHBhY2tldCBkdXJp
bmcgQUREQkFcbiIpOw0KKwkJCQlzcGluX3VubG9ja19iaCgmcHJpdi0+c3RyZWFtX2xvY2spOw0K
KwkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOw0KKwkJCQlyZXR1cm47DQorCQkJfQ0KKwkJfSBl
bHNlIHsNCisJCQlpZiAobXdsX2Z3Y21kX2FtcGR1X2FsbG93ZWQoc3RhLCB0aWQpKSB7DQorCQkJ
CXN0cmVhbSA9IG13bF9md2NtZF9hZGRfc3RyZWFtKGh3LCBzdGEsIHRpZCk7DQorDQorCQkJCWlm
IChzdHJlYW0pDQorCQkJCQlzdGFydF9iYV9zZXNzaW9uID0gdHJ1ZTsNCisJCQl9DQorCQl9DQor
DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+c3RyZWFtX2xvY2spOw0KKwl9IGVsc2Ugew0KKwkJ
cW9zICY9IH5NV0xfUU9TX0FDS19QT0xJQ1lfTUFTSzsNCisJCXFvcyB8PSBNV0xfUU9TX0FDS19Q
T0xJQ1lfTk9STUFMOw0KKwl9DQorDQorCXR4X2N0cmwgPSAoc3RydWN0IG13bF90eF9jdHJsICop
JnR4X2luZm8tPnN0YXR1czsNCisJdHhfY3RybC0+dmlmID0gKHZvaWQgKil0eF9pbmZvLT5jb250
cm9sLnZpZjsNCisJdHhfY3RybC0+c3RhID0gKHZvaWQgKilzdGE7DQorCXR4X2N0cmwtPmtfY29u
ZiA9ICh2b2lkICopa19jb25mOw0KKwl0eF9jdHJsLT5hbXNkdV9wa3RzID0gTlVMTDsNCisJdHhf
Y3RybC0+dHhfcHJpb3JpdHkgPSB0eHByaW9yaXR5Ow0KKwl0eF9jdHJsLT50eXBlID0gKG1nbXRm
cmFtZSA/IElFRUVfVFlQRV9NQU5BR0VNRU5UIDogSUVFRV9UWVBFX0RBVEEpOw0KKwl0eF9jdHJs
LT5xb3NfY3RybCA9IHFvczsNCisJdHhfY3RybC0+eG1pdF9jb250cm9sID0geG1pdGNvbnRyb2w7
DQorDQorCWlmIChza2JfcXVldWVfbGVuKCZwcml2LT50eHFbaW5kZXhdKSA+IHByaXYtPnR4cV9s
aW1pdCkNCisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGh3LCBTWVNBRFBUX1RYX1dNTV9RVUVVRVMg
LSBpbmRleCAtIDEpOw0KKw0KKwlza2JfcXVldWVfdGFpbCgmcHJpdi0+dHhxW2luZGV4XSwgc2ti
KTsNCisNCisJbXdsX3R4X3NrYnMoaHcpOw0KKw0KKwkvKiBJbml0aWF0ZSB0aGUgYW1wZHUgc2Vz
c2lvbiBoZXJlICovDQorCWlmIChzdGFydF9iYV9zZXNzaW9uKSB7DQorCQlzcGluX2xvY2tfYmgo
JnByaXYtPnN0cmVhbV9sb2NrKTsNCisJCWlmIChtd2xfZndjbWRfc3RhcnRfc3RyZWFtKGh3LCBz
dHJlYW0pKQ0KKwkJCW13bF9md2NtZF9yZW1vdmVfc3RyZWFtKGh3LCBzdHJlYW0pOw0KKwkJc3Bp
bl91bmxvY2tfYmgoJnByaXYtPnN0cmVhbV9sb2NrKTsNCisJfQ0KK30NCisNCit2b2lkIG13bF90
eF9kZWxfcGt0c192aWFfdmlmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCSAgICAgc3Ry
dWN0IGllZWU4MDIxMV92aWYgKnZpZikNCit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3
LT5wcml2Ow0KKwlpbnQgbnVtOw0KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wOw0KKwlzdHJ1
Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87DQorCXN0cnVjdCBtd2xfdHhfY3RybCAqdHhf
Y3RybDsNCisJc3RydWN0IHNrX2J1ZmZfaGVhZCAqYW1zZHVfcGt0czsNCisNCisJZm9yIChudW0g
PSAxOyBudW0gPCBTWVNBRFBUX05VTV9PRl9ERVNDX0RBVEE7IG51bSsrKSB7DQorCQlzcGluX2xv
Y2tfYmgoJnByaXYtPnR4cVtudW1dLmxvY2spOw0KKwkJc2tiX3F1ZXVlX3dhbGtfc2FmZSgmcHJp
di0+dHhxW251bV0sIHNrYiwgdG1wKSB7DQorCQkJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Io
c2tiKTsNCisJCQl0eF9jdHJsID0gKHN0cnVjdCBtd2xfdHhfY3RybCAqKSZ0eF9pbmZvLT5zdGF0
dXM7DQorCQkJaWYgKHR4X2N0cmwtPnZpZiA9PSB2aWYpIHsNCisJCQkJYW1zZHVfcGt0cyA9IChz
dHJ1Y3Qgc2tfYnVmZl9oZWFkICopDQorCQkJCQl0eF9jdHJsLT5hbXNkdV9wa3RzOw0KKwkJCQlp
ZiAoYW1zZHVfcGt0cykgew0KKwkJCQkJc2tiX3F1ZXVlX3B1cmdlKGFtc2R1X3BrdHMpOw0KKwkJ
CQkJa2ZyZWUoYW1zZHVfcGt0cyk7DQorCQkJCX0NCisJCQkJX19za2JfdW5saW5rKHNrYiwgJnBy
aXYtPnR4cVtudW1dKTsNCisJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsNCisJCQl9DQorCQl9
DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhxW251bV0ubG9jayk7DQorCX0NCit9DQorDQor
dm9pZCBtd2xfdHhfZGVsX3BrdHNfdmlhX3N0YShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJ
CQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYg
KnByaXYgPSBody0+cHJpdjsNCisJaW50IG51bTsNCisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnRt
cDsNCisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOw0KKwlzdHJ1Y3QgbXdsX3R4
X2N0cmwgKnR4X2N0cmw7DQorCXN0cnVjdCBza19idWZmX2hlYWQgKmFtc2R1X3BrdHM7DQorDQor
CWZvciAobnVtID0gMTsgbnVtIDwgU1lTQURQVF9OVU1fT0ZfREVTQ19EQVRBOyBudW0rKykgew0K
KwkJc3Bpbl9sb2NrX2JoKCZwcml2LT50eHFbbnVtXS5sb2NrKTsNCisJCXNrYl9xdWV1ZV93YWxr
X3NhZmUoJnByaXYtPnR4cVtudW1dLCBza2IsIHRtcCkgew0KKwkJCXR4X2luZm8gPSBJRUVFODAy
MTFfU0tCX0NCKHNrYik7DQorCQkJdHhfY3RybCA9IChzdHJ1Y3QgbXdsX3R4X2N0cmwgKikmdHhf
aW5mby0+c3RhdHVzOw0KKwkJCWlmICh0eF9jdHJsLT5zdGEgPT0gc3RhKSB7DQorCQkJCWFtc2R1
X3BrdHMgPSAoc3RydWN0IHNrX2J1ZmZfaGVhZCAqKQ0KKwkJCQkJdHhfY3RybC0+YW1zZHVfcGt0
czsNCisJCQkJaWYgKGFtc2R1X3BrdHMpIHsNCisJCQkJCXNrYl9xdWV1ZV9wdXJnZShhbXNkdV9w
a3RzKTsNCisJCQkJCWtmcmVlKGFtc2R1X3BrdHMpOw0KKwkJCQl9DQorCQkJCV9fc2tiX3VubGlu
ayhza2IsICZwcml2LT50eHFbbnVtXSk7DQorCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7DQor
CQkJfQ0KKwkJfQ0KKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4cVtudW1dLmxvY2spOw0KKwl9
DQorfQ0KKw0KK3ZvaWQgbXdsX3R4X2RlbF9hbXBkdV9wa3RzKHN0cnVjdCBpZWVlODAyMTFfaHcg
Kmh3LA0KKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4IHRpZCkNCit7DQorCXN0
cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgbXdsX3N0YSAqc3RhX2lu
Zm8gPSBtd2xfZGV2X2dldF9zdGEoc3RhKTsNCisJaW50IGRlc2NfbnVtID0gU1lTQURQVF9UWF9X
TU1fUVVFVUVTIC0gdGlkIC0gMTsNCisJc3RydWN0IG13bF9hbXNkdV9mcmFnICphbXNkdV9mcmFn
Ow0KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2lu
Zm8gKnR4X2luZm87DQorCXN0cnVjdCBtd2xfdHhfY3RybCAqdHhfY3RybDsNCisJc3RydWN0IHNr
X2J1ZmZfaGVhZCAqYW1zZHVfcGt0czsNCisNCisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eHFbZGVz
Y19udW1dLmxvY2spOw0KKwlza2JfcXVldWVfd2Fsa19zYWZlKCZwcml2LT50eHFbZGVzY19udW1d
LCBza2IsIHRtcCkgew0KKwkJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsNCisJCXR4
X2N0cmwgPSAoc3RydWN0IG13bF90eF9jdHJsICopJnR4X2luZm8tPnN0YXR1czsNCisJCWlmICh0
eF9jdHJsLT5zdGEgPT0gc3RhKSB7DQorCQkJYW1zZHVfcGt0cyA9IChzdHJ1Y3Qgc2tfYnVmZl9o
ZWFkICopDQorCQkJCXR4X2N0cmwtPmFtc2R1X3BrdHM7DQorCQkJaWYgKGFtc2R1X3BrdHMpIHsN
CisJCQkJc2tiX3F1ZXVlX3B1cmdlKGFtc2R1X3BrdHMpOw0KKwkJCQlrZnJlZShhbXNkdV9wa3Rz
KTsNCisJCQl9DQorCQkJX19za2JfdW5saW5rKHNrYiwgJnByaXYtPnR4cVtkZXNjX251bV0pOw0K
KwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7DQorCQl9DQorCX0NCisJc3Bpbl91bmxvY2tfYmgo
JnByaXYtPnR4cVtkZXNjX251bV0ubG9jayk7DQorDQorCXNwaW5fbG9ja19iaCgmc3RhX2luZm8t
PmFtc2R1X2xvY2spOw0KKwlhbXNkdV9mcmFnID0gJnN0YV9pbmZvLT5hbXNkdV9jdHJsLmZyYWdb
ZGVzY19udW1dOw0KKwlpZiAoYW1zZHVfZnJhZy0+bnVtKSB7DQorCQlhbXNkdV9mcmFnLT5udW0g
PSAwOw0KKwkJYW1zZHVfZnJhZy0+Y3VyX3BvcyA9IE5VTEw7DQorCQlpZiAoYW1zZHVfZnJhZy0+
c2tiKSB7DQorCQkJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoYW1zZHVfZnJhZy0+c2tiKTsN
CisJCQl0eF9jdHJsID0gKHN0cnVjdCBtd2xfdHhfY3RybCAqKSZ0eF9pbmZvLT5zdGF0dXM7DQor
CQkJYW1zZHVfcGt0cyA9IChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICopDQorCQkJCXR4X2N0cmwtPmFt
c2R1X3BrdHM7DQorCQkJaWYgKGFtc2R1X3BrdHMpIHsNCisJCQkJc2tiX3F1ZXVlX3B1cmdlKGFt
c2R1X3BrdHMpOw0KKwkJCQlrZnJlZShhbXNkdV9wa3RzKTsNCisJCQl9DQorCQkJZGV2X2tmcmVl
X3NrYl9hbnkoYW1zZHVfZnJhZy0+c2tiKTsNCisJCX0NCisJfQ0KKwlzcGluX3VubG9ja19iaCgm
c3RhX2luZm8tPmFtc2R1X2xvY2spOw0KK30NCisNCit2b2lkIG13bF90eF9kb25lKHVuc2lnbmVk
IGxvbmcgZGF0YSkNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gKHN0cnVjdCBpZWVl
ODAyMTFfaHcgKilkYXRhOw0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJ
aW50IG51bTsNCisJc3RydWN0IG13bF9kZXNjX2RhdGEgKmRlc2M7DQorCXN0cnVjdCBtd2xfdHhf
aG5kbCAqdHhfaG5kbDsNCisJc3RydWN0IG13bF90eF9kZXNjICp0eF9kZXNjOw0KKwlzdHJ1Y3Qg
c2tfYnVmZiAqZG9uZV9za2I7DQorCXUzMiByYXRlOw0KKwlzdHJ1Y3QgbXdsX2RtYV9kYXRhICp0
cjsNCisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOw0KKwlzdHJ1Y3QgbXdsX3R4X2N0
cmwgKnR4X2N0cmw7DQorCXN0cnVjdCBza19idWZmX2hlYWQgKmFtc2R1X3BrdHM7DQorCWludCBo
ZHJsZW47DQorDQorCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfZGVzY19sb2NrKTsNCisJZm9yIChu
dW0gPSAwOyBudW0gPCBTWVNBRFBUX1RYX1dNTV9RVUVVRVM7IG51bSsrKSB7DQorCQlkZXNjID0g
JnByaXYtPmRlc2NfZGF0YVtudW1dOw0KKwkJdHhfaG5kbCA9IGRlc2MtPnBzdGFsZV90eF9obmRs
Ow0KKwkJdHhfZGVzYyA9IHR4X2huZGwtPnBkZXNjOw0KKw0KKwkJd2hpbGUgKHR4X2huZGwgJiYN
CisJCSAgICAgICAodHhfZGVzYy0+c3RhdHVzICYgY3B1X3RvX2xlMzIoRUFHTEVfVFhEX1NUQVRV
U19PSykpICYmDQorCQkgICAgICAgKCEodHhfZGVzYy0+c3RhdHVzICYNCisJCSAgICAgICBjcHVf
dG9fbGUzMihFQUdMRV9UWERfU1RBVFVTX0ZXX09XTkVEKSkpKSB7DQorCQkJcGNpX3VubWFwX3Np
bmdsZShwcml2LT5wZGV2LA0KKwkJCQkJIGxlMzJfdG9fY3B1KHR4X2Rlc2MtPnBrdF9wdHIpLA0K
KwkJCQkJIGxlMTZfdG9fY3B1KHR4X2Rlc2MtPnBrdF9sZW4pLA0KKwkJCQkJIFBDSV9ETUFfVE9E
RVZJQ0UpOw0KKwkJCWRvbmVfc2tiID0gdHhfaG5kbC0+cHNrX2J1ZmY7DQorCQkJcmF0ZSA9IGxl
MzJfdG9fY3B1KHR4X2Rlc2MtPnJhdGVfaW5mbyk7DQorCQkJdHhfZGVzYy0+cGt0X2xlbiA9IDA7
DQorCQkJdHhfZGVzYy0+c3RhdHVzID0NCisJCQkJY3B1X3RvX2xlMzIoRUFHTEVfVFhEX1NUQVRV
U19JRExFKTsNCisJCQl0eF9obmRsLT5wc2tfYnVmZiA9IE5VTEw7DQorCQkJd21iKCk7IC8qIG1l
bW9yeSBiYXJyaWVyICovDQorDQorCQkJc2tiX2dldChkb25lX3NrYik7DQorCQkJc2tiX3F1ZXVl
X3RhaWwoJnByaXYtPmRlbGF5X3EsIGRvbmVfc2tiKTsNCisJCQlpZiAoc2tiX3F1ZXVlX2xlbigm
cHJpdi0+ZGVsYXlfcSkgPg0KKwkJCSAgICBTWVNBRFBUX0RFTEFZX0ZSRUVfUV9MSU1JVCkNCisJ
CQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiX2RlcXVldWUoJnByaXYtPmRlbGF5X3EpKTsNCisNCisJ
CQl0ciA9IChzdHJ1Y3QgbXdsX2RtYV9kYXRhICopZG9uZV9za2ItPmRhdGE7DQorCQkJaW5mbyA9
IElFRUU4MDIxMV9TS0JfQ0IoZG9uZV9za2IpOw0KKw0KKwkJCWlmIChpZWVlODAyMTFfaXNfZGF0
YSh0ci0+d2guZnJhbWVfY29udHJvbCkgfHwNCisJCQkgICAgaWVlZTgwMjExX2lzX2RhdGFfcW9z
KHRyLT53aC5mcmFtZV9jb250cm9sKSkgew0KKwkJCQl0eF9jdHJsID0gKHN0cnVjdCBtd2xfdHhf
Y3RybCAqKSZpbmZvLT5zdGF0dXM7DQorCQkJCWFtc2R1X3BrdHMgPSAoc3RydWN0IHNrX2J1ZmZf
aGVhZCAqKQ0KKwkJCQkJdHhfY3RybC0+YW1zZHVfcGt0czsNCisJCQkJaWYgKGFtc2R1X3BrdHMp
IHsNCisJCQkJCW13bF90eF9hY2tfYW1zZHVfcGt0cyhodywgcmF0ZSwNCisJCQkJCQkJICAgICAg
YW1zZHVfcGt0cyk7DQorCQkJCQlkZXZfa2ZyZWVfc2tiX2FueShkb25lX3NrYik7DQorCQkJCQlk
b25lX3NrYiA9IE5VTEw7DQorCQkJCX0gZWxzZSB7DQorCQkJCQltd2xfdHhfcHJlcGFyZV9pbmZv
KGh3LCByYXRlLCBpbmZvKTsNCisJCQkJfQ0KKwkJCX0gZWxzZSB7DQorCQkJCW13bF90eF9wcmVw
YXJlX2luZm8oaHcsIDAsIGluZm8pOw0KKwkJCX0NCisNCisJCQlpZiAoZG9uZV9za2IpIHsNCisJ
CQkJLyogUmVtb3ZlIEgvVyBkbWEgaGVhZGVyICovDQorCQkJCWhkcmxlbiA9IGllZWU4MDIxMV9o
ZHJsZW4odHItPndoLmZyYW1lX2NvbnRyb2wpOw0KKwkJCQltZW1tb3ZlKHRyLT5kYXRhIC0gaGRy
bGVuLCAmdHItPndoLCBoZHJsZW4pOw0KKwkJCQlza2JfcHVsbChkb25lX3NrYiwgc2l6ZW9mKCp0
cikgLSBoZHJsZW4pOw0KKwkJCQlpbmZvLT5mbGFncyAmPSB+SUVFRTgwMjExX1RYX0NUTF9BTVBE
VTsNCisJCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOw0KKwkJCQlpZWVl
ODAyMTFfdHhfc3RhdHVzKGh3LCBkb25lX3NrYik7DQorCQkJfQ0KKw0KKwkJCXR4X2huZGwgPSB0
eF9obmRsLT5wbmV4dDsNCisJCQl0eF9kZXNjID0gdHhfaG5kbC0+cGRlc2M7DQorCQkJcHJpdi0+
ZndfZGVzY19jbnRbbnVtXS0tOw0KKwkJfQ0KKw0KKwkJZGVzYy0+cHN0YWxlX3R4X2huZGwgPSB0
eF9obmRsOw0KKwl9DQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9kZXNjX2xvY2spOw0KKw0K
KwlpZiAocHJpdi0+aXJxICE9IC0xKSB7DQorCQl1MzIgc3RhdHVzX21hc2s7DQorDQorCQlzdGF0
dXNfbWFzayA9IHJlYWRsKHByaXYtPmlvYmFzZTEgKw0KKwkJCQkgICAgTUFDUkVHX1JFR19BMkhf
SU5URVJSVVBUX1NUQVRVU19NQVNLKTsNCisJCXdyaXRlbChzdGF0dXNfbWFzayB8IE1BQ1JFR19B
MkhSSUNfQklUX1RYX0RPTkUsDQorCQkgICAgICAgcHJpdi0+aW9iYXNlMSArIE1BQ1JFR19SRUdf
QTJIX0lOVEVSUlVQVF9TVEFUVVNfTUFTSyk7DQorDQorCQltd2xfdHhfc2ticyhodyk7DQorCX0N
CisNCisJcHJpdi0+aXNfdHhfc2NoZWR1bGUgPSBmYWxzZTsNCit9DQorDQordm9pZCBtd2xfdHhf
Zmx1c2hfYW1zZHUodW5zaWduZWQgbG9uZyBkYXRhKQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV9o
dyAqaHcgPSAoc3RydWN0IGllZWU4MDIxMV9odyAqKWRhdGE7DQorCXN0cnVjdCBtd2xfcHJpdiAq
cHJpdiA9IGh3LT5wcml2Ow0KKwl1MzIgc3RhdHVzX21hc2s7DQorCXN0cnVjdCBtd2xfc3RhICpz
dGFfaW5mbzsNCisJaW50IGk7DQorCXN0cnVjdCBtd2xfYW1zZHVfZnJhZyAqYW1zZHVfZnJhZzsN
CisNCisJc3Bpbl9sb2NrKCZwcml2LT5zdGFfbG9jayk7DQorCWxpc3RfZm9yX2VhY2hfZW50cnko
c3RhX2luZm8sICZwcml2LT5zdGFfbGlzdCwgbGlzdCkgew0KKwkJc3Bpbl9sb2NrKCZwcml2LT50
eF9kZXNjX2xvY2spOw0KKwkJc3Bpbl9sb2NrKCZzdGFfaW5mby0+YW1zZHVfbG9jayk7DQorCQlm
b3IgKGkgPSAwOyBpIDwgU1lTQURQVF9UWF9XTU1fUVVFVUVTOyBpKyspIHsNCisJCQlhbXNkdV9m
cmFnID0gJnN0YV9pbmZvLT5hbXNkdV9jdHJsLmZyYWdbaV07DQorCQkJaWYgKGFtc2R1X2ZyYWct
Pm51bSkgew0KKwkJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLA0KKwkJCQkJICAgICAgIChhbXNk
dV9mcmFnLT5qaWZmaWVzICsgMSkpKSB7DQorCQkJCQlpZiAobXdsX3R4X2F2YWlsYWJsZShwcml2
LCBpKSkgew0KKwkJCQkJCW13bF90eF9za2IocHJpdiwgaSwNCisJCQkJCQkJICAgYW1zZHVfZnJh
Zy0+c2tiKTsNCisJCQkJCQlhbXNkdV9mcmFnLT5udW0gPSAwOw0KKwkJCQkJCWFtc2R1X2ZyYWct
PmN1cl9wb3MgPSBOVUxMOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwkJc3Bpbl91
bmxvY2soJnN0YV9pbmZvLT5hbXNkdV9sb2NrKTsNCisJCXNwaW5fdW5sb2NrKCZwcml2LT50eF9k
ZXNjX2xvY2spOw0KKwl9DQorCXNwaW5fdW5sb2NrKCZwcml2LT5zdGFfbG9jayk7DQorDQorCXN0
YXR1c19tYXNrID0gcmVhZGwocHJpdi0+aW9iYXNlMSArDQorCQkJICAgIE1BQ1JFR19SRUdfQTJI
X0lOVEVSUlVQVF9TVEFUVVNfTUFTSyk7DQorCXdyaXRlbChzdGF0dXNfbWFzayB8IE1BQ1JFR19B
MkhSSUNfQklUX1FVRV9FTVBUWSwNCisJICAgICAgIHByaXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVH
X0EySF9JTlRFUlJVUFRfU1RBVFVTX01BU0spOw0KKw0KKwlwcml2LT5pc19xZV9zY2hlZHVsZSA9
IGZhbHNlOw0KK30NCisNCit2b2lkIG13bF90eF9kZWxfc3RhX2Ftc2R1X3BrdHMoc3RydWN0IGll
ZWU4MDIxMV9zdGEgKnN0YSkNCit7DQorCXN0cnVjdCBtd2xfc3RhICpzdGFfaW5mbyA9IG13bF9k
ZXZfZ2V0X3N0YShzdGEpOw0KKwlpbnQgbnVtOw0KKwlzdHJ1Y3QgbXdsX2Ftc2R1X2ZyYWcgKmFt
c2R1X2ZyYWc7DQorCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbzsNCisJc3RydWN0
IG13bF90eF9jdHJsICp0eF9jdHJsOw0KKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICphbXNkdV9wa3Rz
Ow0KKw0KKwlzcGluX2xvY2tfYmgoJnN0YV9pbmZvLT5hbXNkdV9sb2NrKTsNCisJZm9yIChudW0g
PSAwOyBudW0gPCBTWVNBRFBUX1RYX1dNTV9RVUVVRVM7IG51bSsrKSB7DQorCQlhbXNkdV9mcmFn
ID0gJnN0YV9pbmZvLT5hbXNkdV9jdHJsLmZyYWdbbnVtXTsNCisJCWlmIChhbXNkdV9mcmFnLT5u
dW0pIHsNCisJCQlhbXNkdV9mcmFnLT5udW0gPSAwOw0KKwkJCWFtc2R1X2ZyYWctPmN1cl9wb3Mg
PSBOVUxMOw0KKwkJCWlmIChhbXNkdV9mcmFnLT5za2IpIHsNCisJCQkJdHhfaW5mbyA9IElFRUU4
MDIxMV9TS0JfQ0IoYW1zZHVfZnJhZy0+c2tiKTsNCisJCQkJdHhfY3RybCA9IChzdHJ1Y3QgbXds
X3R4X2N0cmwgKikNCisJCQkJCSZ0eF9pbmZvLT5zdGF0dXM7DQorCQkJCWFtc2R1X3BrdHMgPSAo
c3RydWN0IHNrX2J1ZmZfaGVhZCAqKQ0KKwkJCQkJdHhfY3RybC0+YW1zZHVfcGt0czsNCisJCQkJ
aWYgKGFtc2R1X3BrdHMpIHsNCisJCQkJCXNrYl9xdWV1ZV9wdXJnZShhbXNkdV9wa3RzKTsNCisJ
CQkJCWtmcmVlKGFtc2R1X3BrdHMpOw0KKwkJCQl9DQorCQkJCWRldl9rZnJlZV9za2JfYW55KGFt
c2R1X2ZyYWctPnNrYik7DQorCQkJfQ0KKwkJfQ0KKwl9DQorCXNwaW5fdW5sb2NrX2JoKCZzdGFf
aW5mby0+YW1zZHVfbG9jayk7DQorfQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNz
L21hcnZlbGwvbXdsd2lmaS90eC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3
aWZpL3R4LmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi5lZjFjN2M1DQot
LS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkv
dHguaA0KQEAgLTAsMCArMSwzNiBAQA0KKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUs
IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuDQorICoNCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUg
KHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbA0KKyAq
IEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBW
ZXJzaW9uIDIsIEp1bmUgMTk5MQ0KKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCBy
ZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4NCisgKiBhY2NvcmRhbmNlIHdp
dGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hp
Y2gNCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuDQorICoNCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lU
SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQ0KKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UN
CisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRp
dGlvbmFsIGRldGFpbHMgYWJvdXQNCisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuDQorICov
DQorDQorLyogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgZGVmaW5lcyB0cmFuc21pdCByZWxhdGVk
IGZ1bmN0aW9ucy4gKi8NCisNCisjaWZuZGVmIF90eF9oXw0KKyNkZWZpbmUgX3R4X2hfDQorDQor
aW50IG13bF90eF9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsNCit2b2lkIG13bF90eF9k
ZWluaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOw0KK3ZvaWQgbXdsX3R4X3htaXQoc3RydWN0
IGllZWU4MDIxMV9odyAqaHcsDQorCQkgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250
cm9sLA0KKwkJIHN0cnVjdCBza19idWZmICpza2IpOw0KK3ZvaWQgbXdsX3R4X2RlbF9wa3RzX3Zp
YV92aWYoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjEx
X3ZpZiAqdmlmKTsNCit2b2lkIG13bF90eF9kZWxfcGt0c192aWFfc3RhKHN0cnVjdCBpZWVlODAy
MTFfaHcgKmh3LA0KKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSk7DQordm9pZCBt
d2xfdHhfZGVsX2FtcGR1X3BrdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJICAgc3Ry
dWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggdGlkKTsNCit2b2lkIG13bF90eF9kb25lKHVuc2ln
bmVkIGxvbmcgZGF0YSk7DQordm9pZCBtd2xfdHhfZmx1c2hfYW1zZHUodW5zaWduZWQgbG9uZyBk
YXRhKTsNCit2b2lkIG13bF90eF9kZWxfc3RhX2Ftc2R1X3BrdHMoc3RydWN0IGllZWU4MDIxMV9z
dGEgKnN0YSk7DQorDQorI2VuZGlmIC8qIF90eF9oXyAqLw0KLS0gDQoxLjkuMQ0KDQo=

^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2016-04-15 12:40 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-12  3:51 [PATCH v7] Add new mac80211 driver mwlwifi David Lin
2015-11-12 19:47 ` Jes Sorensen
2015-11-26  8:34   ` David Lin
2015-11-20 11:22 ` Johannes Berg
2015-11-26  8:27   ` David Lin
2015-11-26  9:40     ` Johannes Berg
2015-11-27  2:00       ` David Lin
2015-11-27  8:27         ` Johannes Berg
2015-12-10 14:57         ` Kalle Valo
2015-12-15  7:54           ` David Lin
2015-12-10 14:06     ` Kalle Valo
     [not found]   ` <CANEJEGv7ENTJu4YHz1x2_ve2M6-3Nn8X-0aC2hA3o1mUs3tQ1g@mail.gmail.com>
2015-12-12  0:47     ` Grant Grundler
2015-12-14 11:47     ` Kalle Valo
2015-12-10 14:03 ` Kalle Valo
2015-12-10 14:39 ` Kalle Valo
2015-12-15  7:55   ` David Lin
2015-12-14 21:32 ` Kan Yan
2015-12-15  5:47   ` David Lin
2015-12-15  7:40 ` Emmanuel Grumbach
2015-12-15  7:53   ` David Lin
2016-03-16 23:24 ` Julian Calaby
2016-03-17  1:23   ` David Lin
2016-03-17  1:32     ` Julian Calaby
2016-03-17  2:10       ` David Lin
2016-04-03 12:05         ` Bjørn Mork
2016-04-15 12:40           ` Kalle Valo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.