This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.
---259921185-980504529-1112296292=:19966
Content-Type: TEXT/PLAIN; charset=US-ASCII
Hi,
This patch should clean up the games/trek code. It basically just removes
the warnings, with some cosmetic changes in the most messy parts. I see
that the patch got quite big; please let me know if I got a bit carried
away.
--
Haakon Schad Bergsaker
---259921185-980504529-1112296292=:19966
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="trek.warns.patch"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.58-L.0503312111320.19966@europa.uio.no>
Content-Description:
Content-Disposition: attachment; filename="trek.warns.patch"
SW5kZXg6IE1ha2VmaWxlDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1Mg
ZmlsZTogL2hvbWUvZGN2cy9zcmMvZ2FtZXMvdHJlay9NYWtlZmlsZSx2DQpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMg0KZGlmZiAtdSAtcjEuMiBNYWtlZmls
ZQ0KLS0tIE1ha2VmaWxlCTE3IEp1biAyMDAzIDA0OjI1OjI1IC0wMDAwCTEu
Mg0KKysrIE1ha2VmaWxlCTI2IE1hciAyMDA1IDE4OjIzOjE2IC0wMDAwDQpA
QCAtMTAsMTAgKzEwLDExIEBADQogCWxvc2UuYyBscnNjYW4uYyBtYWluLmMg
bW92ZS5jIG5vdmEuYyBvdXQuYyBwaGFzZXIuYyBwbGF5LmMgcmFtLmMgXA0K
IAlyYW5mLmMgcmVzdC5jIHNjaGVkdWxlLmMgc2NvcmUuYyBzZXR1cC5jIHNl
dHdhcnAuYyBcDQogCXNoaWVsZC5jIHNub3ZhLmMgc3JzY2FuLmMgc3lzdGVt
bmFtZS5jIHRvcnBlZC5jIHV0aWxpdHkuYyBcDQotCXZpc3VhbC5jIHdhcnAu
YyB3aW4uYyBjZ2V0Yy5jDQorCXZpc3VhbC5jIHdhcnAuYyB3aW4uYw0KIE1B
Tj0JdHJlay42DQogRFBBREQ9CSR7TElCTX0gJHtMSUJDT01QQVR9DQogTERB
REQ9CS1sbSAtbGNvbXBhdA0KIEhJREVHQU1FPWhpZGVnYW1lDQorV0FSTlM/
PSA2DQogDQogLmluY2x1ZGUgPGJzZC5wcm9nLm1rPg0KSW5kZXg6IGFiYW5k
b24uYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21l
L2RjdnMvc3JjL2dhbWVzL3RyZWsvYWJhbmRvbi5jLHYNCnJldHJpZXZpbmcg
cmV2aXNpb24gMS4yDQpkaWZmIC11IC1yMS4yIGFiYW5kb24uYw0KLS0tIGFi
YW5kb24uYwkxNyBKdW4gMjAwMyAwNDoyNToyNSAtMDAwMAkxLjINCisrKyBh
YmFuZG9uLmMJMjUgTWFyIDIwMDUgMTY6MTE6MDUgLTAwMDANCkBAIC0zNSw3
ICszNSw3IEBADQogICogJERyYWdvbkZseTogc3JjL2dhbWVzL3RyZWsvYWJh
bmRvbi5jLHYgMS4yIDIwMDMvMDYvMTcgMDQ6MjU6MjUgZGlsbG9uIEV4cCAk
DQogICovDQogDQotIyBpbmNsdWRlCSJ0cmVrLmgiDQorI2luY2x1ZGUgInRy
ZWsuaCINCiANCiAvKg0KICoqICBBYmFuZG9uIFNoaXANCkBAIC02MiwxOSAr
NjIsMjYgQEANCiAqKglVc2VzIHRyYWNlIGZsYWcgNDANCiAqLw0KIA0KLWFi
YW5kb24oKQ0KK3ZvaWQNCithYmFuZG9uKHZvaWQpDQogew0KIAlzdHJ1Y3Qg
cXVhZAkqcTsNCiAJaW50CQlpOw0KLQlpbnQJCQlqOw0KKwlpbnQJCWo7DQog
CXN0cnVjdCBldmVudAkqZTsNCiANCiAJaWYgKFNoaXAuc2hpcCA9PSBRVUVF
TkUpDQotCQlyZXR1cm4gKHByaW50ZigiWW91IG1heSBub3QgYWJhbmRvbiB5
ZSBGYWlyZSBRdWVlbmVcbiIpKTsNCisJew0KKwkJcHJpbnRmKCJZb3UgbWF5
IG5vdCBhYmFuZG9uIHllIEZhaXJlIFF1ZWVuZVxuIik7DQorCQlyZXR1cm47
DQorCX0NCiAJaWYgKFNoaXAuY29uZCAhPSBET0NLRUQpDQogCXsNCiAJCWlm
IChkYW1hZ2VkKFNIVVRUTEUpKQ0KLQkJCXJldHVybiAob3V0KFNIVVRUTEUp
KTsNCisJCXsNCisJCQlvdXQoU0hVVFRMRSk7DQorCQkJcmV0dXJuOw0KKwkJ
fQ0KIAkJcHJpbnRmKCJPZmZpY2VycyBlc2NhcGUgaW4gc2h1dHRsZWNyYWZ0
XG4iKTsNCiAJCS8qIGRlY2lkZSBvbiBmYXRlIG9mIGNyZXcgKi8NCiAJCXEg
PSAmUXVhZFtTaGlwLnF1YWR4XVtTaGlwLnF1YWR5XTsNCkluZGV4OiBhdHRh
Y2suYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21l
L2RjdnMvc3JjL2dhbWVzL3RyZWsvYXR0YWNrLmMsdg0KcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjINCmRpZmYgLXUgLXIxLjIgYXR0YWNrLmMNCi0tLSBhdHRh
Y2suYwkxNyBKdW4gMjAwMyAwNDoyNToyNSAtMDAwMAkxLjINCisrKyBhdHRh
Y2suYwkyNiBNYXIgMjAwNSAyMjowNToyMiAtMDAwMA0KQEAgLTM1LDcgKzM1
LDggQEANCiAgKiAkRHJhZ29uRmx5OiBzcmMvZ2FtZXMvdHJlay9hdHRhY2su
Yyx2IDEuMiAyMDAzLzA2LzE3IDA0OjI1OjI1IGRpbGxvbiBFeHAgJA0KICAq
Lw0KIA0KLSMgaW5jbHVkZQkidHJlay5oIg0KKyNpbmNsdWRlIDxtYXRoLmg+
DQorI2luY2x1ZGUgInRyZWsuaCINCiANCiAvKg0KICoqICBLbGluZ29uIEF0
dGFjayBSb3V0aW5lDQpAQCAtNjcsOCArNjgsOCBAQA0KICoqCUNhc3VhbHRp
ZXMgY2FuIGFsc28gb2NjdXIuDQogKi8NCiANCi1hdHRhY2socmVzdGluZykN
Ci1pbnQJcmVzdGluZzsJLyogc2V0IGlmIGF0dGFjayB3aGlsZSByZXN0aW5n
ICovDQordm9pZA0KK2F0dGFjayhpbnQgcmVzdGluZykNCiB7DQogCWludAkJ
aGl0LCBpLCBsOw0KIAlpbnQJCQltYXhoaXQsIHRvdGhpdCwgc2hsZGFic2I7
DQpJbmRleDogYXV0b3Zlci5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpS
Q1MgZmlsZTogL2hvbWUvZGN2cy9zcmMvZ2FtZXMvdHJlay9hdXRvdmVyLmMs
dg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjINCmRpZmYgLXUgLXIxLjIgYXV0
b3Zlci5jDQotLS0gYXV0b3Zlci5jCTE3IEp1biAyMDAzIDA0OjI1OjI1IC0w
MDAwCTEuMg0KKysrIGF1dG92ZXIuYwkyNSBNYXIgMjAwNSAxNjoxMTo1MCAt
MDAwMA0KQEAgLTM1LDcgKzM1LDcgQEANCiAgKiAkRHJhZ29uRmx5OiBzcmMv
Z2FtZXMvdHJlay9hdXRvdmVyLmMsdiAxLjIgMjAwMy8wNi8xNyAwNDoyNToy
NSBkaWxsb24gRXhwICQNCiAgKi8NCiANCi0jIGluY2x1ZGUJInRyZWsuaCIN
CisjaW5jbHVkZSAidHJlay5oIg0KIA0KIC8qDQogKiogIEF1dG9tYXRpYyBP
dmVycmlkZQ0KQEAgLTU1LDcgKzU1LDggQEANCiAqKglxdWFkcmFudHMsIHNp
bmNlIHRoYXQgaXMgYWxsIHRoYXQgaXMgbmVlZGVkLg0KICovDQogDQotYXV0
b3ZlcigpDQordm9pZA0KK2F1dG92ZXIodm9pZCkNCiB7DQogCWRvdWJsZQkJ
CWRpc3Q7DQogCWludAkJY291cnNlOw0KSW5kZXg6IGNhcHR1cmUuYw0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lL2RjdnMvc3Jj
L2dhbWVzL3RyZWsvY2FwdHVyZS5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24g
MS4yDQpkaWZmIC11IC1yMS4yIGNhcHR1cmUuYw0KLS0tIGNhcHR1cmUuYwkx
NyBKdW4gMjAwMyAwNDoyNToyNSAtMDAwMAkxLjINCisrKyBjYXB0dXJlLmMJ
MjUgTWFyIDIwMDUgMTc6MDY6NTkgLTAwMDANCkBAIC0zNSw3ICszNSwxMCBA
QA0KICAqICREcmFnb25GbHk6IHNyYy9nYW1lcy90cmVrL2NhcHR1cmUuYyx2
IDEuMiAyMDAzLzA2LzE3IDA0OjI1OjI1IGRpbGxvbiBFeHAgJA0KICAqLw0K
IA0KLSMgaW5jbHVkZQkidHJlay5oIg0KKyNpbmNsdWRlICJ0cmVrLmgiDQor
DQorDQorc3RhdGljIHN0cnVjdCBrbGluZwkqc2VsZWN0a2xpbmdvbih2b2lk
KTsNCiANCiAvKg0KICoqICBBc2sgYSBLbGluZ29uIFRvIFN1cnJlbmRlcg0K
QEAgLTUxLDEyICs1NCwxMiBAQA0KICoqCWV0Yy4NCiAqLw0KIA0KLWNhcHR1
cmUoKQ0KK3ZvaWQNCitjYXB0dXJlKHZvaWQpDQogew0KIAlpbnQJCWk7DQog
CXN0cnVjdCBrbGluZwkqazsNCiAJZG91YmxlCQkJeDsNCi0JZXh0ZXJuIHN0
cnVjdCBrbGluZwkqc2VsZWN0a2xpbmdvbigpOw0KIA0KIAkvKiBjaGVjayBm
b3Igbm90IGNsb2FrZWQgKi8NCiAJaWYgKFNoaXAuY2xvYWtlZCkNCkBAIC04
NSwxMCArODgsMTAgQEANCiAJeCAvPSBrLT5wb3dlciAqIEV0Yy5ua2xpbmc7
DQogCXggKj0gUGFyYW0uc3JuZHJwcm9iOw0KIAlpID0geDsNCi0jCWlmZGVm
IHhUUkFDRQ0KKyNpZmRlZiB4VFJBQ0UNCiAJaWYgKFRyYWNlKQ0KIAkJcHJp
bnRmKCJQcm9iID0gJWQgKCUuNGYpXG4iLCBpLCB4KTsNCi0jCWVuZGlmDQor
I2VuZGlmDQogCWlmIChpID4gcmFuZigxMDApKQ0KIAl7DQogCQkvKiBndWVz
cyB3aGF0LCBoZSBzdXJyZW5kZXJlZCEhISAqLw0KQEAgLTExNiw3ICsxMTks
OCBAQA0KICoqCUNydWRkeSwganVzdCB0YWtlcyBvbmUgYXQgcmFuZG9tLiAg
U2hvdWxkIGFzayB0aGUgY2FwdGFpbi4NCiAqLw0KIA0KLXN0cnVjdCBrbGlu
Zwkqc2VsZWN0a2xpbmdvbigpDQorc3RydWN0IGtsaW5nICoNCitzZWxlY3Rr
bGluZ29uKHZvaWQpDQogew0KIAlpbnQJCWk7DQogDQpJbmRleDogY2hlY2tf
b3V0LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvaG9t
ZS9kY3ZzL3NyYy9nYW1lcy90cmVrL2NoZWNrX291dC5jLHYNCnJldHJpZXZp
bmcgcmV2aXNpb24gMS4yDQpkaWZmIC11IC1yMS4yIGNoZWNrX291dC5jDQot
LS0gY2hlY2tfb3V0LmMJMTcgSnVuIDIwMDMgMDQ6MjU6MjUgLTAwMDAJMS4y
DQorKysgY2hlY2tfb3V0LmMJMjUgTWFyIDIwMDUgMTY6MTM6NTAgLTAwMDAN
CkBAIC0zNSw3ICszNSw3IEBADQogICogJERyYWdvbkZseTogc3JjL2dhbWVz
L3RyZWsvY2hlY2tfb3V0LmMsdiAxLjIgMjAwMy8wNi8xNyAwNDoyNToyNSBk
aWxsb24gRXhwICQNCiAgKi8NCiANCi0jIGluY2x1ZGUJInRyZWsuaCINCisj
aW5jbHVkZSAidHJlay5oIg0KIA0KIC8qDQogKiogIENIRUNLIElGIEEgREVW
SUNFIElTIE9VVA0KQEAgLTQ4LDggKzQ4LDggQEANCiAqKglJdCBwcmludHMg
YXBwcm9wcmlhdGUgbWVzc2FnZXMgdG9vLg0KICovDQogDQotY2hlY2tfb3V0
KGRldmljZSkNCi1pbnQJZGV2aWNlOw0KK2ludA0KK2NoZWNrX291dChpbnQg
ZGV2aWNlKQ0KIHsNCiAJaW50CWRldjsNCiANCkluZGV4OiBjaGVja2NvbmQu
Yw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lL2Rj
dnMvc3JjL2dhbWVzL3RyZWsvY2hlY2tjb25kLmMsdg0KcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjINCmRpZmYgLXUgLXIxLjIgY2hlY2tjb25kLmMNCi0tLSBj
aGVja2NvbmQuYwkxNyBKdW4gMjAwMyAwNDoyNToyNSAtMDAwMAkxLjINCisr
KyBjaGVja2NvbmQuYwkyNSBNYXIgMjAwNSAxNzoxMDozNCAtMDAwMA0KQEAg
LTM1LDcgKzM1LDcgQEANCiAgKiAkRHJhZ29uRmx5OiBzcmMvZ2FtZXMvdHJl
ay9jaGVja2NvbmQuYyx2IDEuMiAyMDAzLzA2LzE3IDA0OjI1OjI1IGRpbGxv
biBFeHAgJA0KICAqLw0KIA0KLSMgaW5jbHVkZQkidHJlay5oIg0KKyNpbmNs
dWRlICJ0cmVrLmgiDQogDQogLyoNCiAqKiAgQ2hlY2sgZm9yIENvbmRpdGlv
biBBZnRlciBhIE1vdmUNCkBAIC02MiwxMCArNjIsOSBAQA0KICoqCWFuZCBi
YXR0bGUgY29uZGl0aW9ucy4NCiAqLw0KIA0KLWNoZWNrY29uZCgpDQordm9p
ZA0KK2NoZWNrY29uZCh2b2lkKQ0KIHsNCi0JaW50CQlpLCBqOw0KLQ0KIAkv
KiBzZWUgaWYgd2UgYXJlIHN0aWxsIGFsaXZlIGFuZCB3ZWxsICovDQogCWlm
IChTaGlwLnJlc2VydmVzIDwgMC4wKQ0KIAkJbG9zZShMX05PTElGRSk7DQpA
QCAtMTAwLDUgKzk5LDQgQEANCiAJCXJldHVybjsNCiAJfQ0KIAlTaGlwLmNv
bmQgPSBHUkVFTjsNCi0JcmV0dXJuOw0KIH0NCkluZGV4OiBjb21wa2wuYw0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lL2RjdnMv
c3JjL2dhbWVzL3RyZWsvY29tcGtsLmMsdg0KcmV0cmlldmluZyByZXZpc2lv
biAxLjINCmRpZmYgLXUgLXIxLjIgY29tcGtsLmMNCi0tLSBjb21wa2wuYwkx
NyBKdW4gMjAwMyAwNDoyNToyNSAtMDAwMAkxLjINCisrKyBjb21wa2wuYwkz
MSBNYXIgMjAwNSAyMDo0OToxNSAtMDAwMA0KQEAgLTM1LDcgKzM1LDExIEBA
DQogICogJERyYWdvbkZseTogc3JjL2dhbWVzL3RyZWsvY29tcGtsLmMsdiAx
LjIgMjAwMy8wNi8xNyAwNDoyNToyNSBkaWxsb24gRXhwICQNCiAgKi8NCiAN
Ci0jIGluY2x1ZGUJInRyZWsuaCINCisjaW5jbHVkZSA8c3RyaW5nLmg+DQor
I2luY2x1ZGUgPG1hdGguaD4NCisjaW5jbHVkZSAidHJlay5oIg0KKw0KK3N0
YXRpYyB2b2lkCXNvcnRrbCh2b2lkKTsNCiANCiAvKg0KICoqICBjb21wdXRl
IGtsaW5nb24gZGlzdGFuY2VzDQpAQCAtNDgsOCArNTIsOCBAQA0KICoqCW1v
dmUuDQogKi8NCiANCi1jb21wa2xkaXN0KGYpDQotaW50CWY7CQkvKiBzZXQg
aWYgbmV3IHF1YWRyYW50ICovDQordm9pZA0KK2NvbXBrbGRpc3QoaW50IGYp
DQogew0KIAlpbnQJCWksIGR4LCBkeTsNCiAJZG91YmxlCQkJZDsNCkBAIC05
MCw3ICs5NCw4IEBADQogKioJYnViYmxlIHNvcnQgb24gYXNjZW5kaW5nIGRp
c3RhbmNlDQogKi8NCiANCi1zb3J0a2woKQ0KK3ZvaWQNCitzb3J0a2wodm9p
ZCkNCiB7DQogCXN0cnVjdCBrbGluZwkJdDsNCiAJaW50CQlmLCBpLCBtOw0K
QEAgLTEwMyw5ICsxMDgsOSBAQA0KIAkJZm9yIChpID0gMDsgaSA8IG07IGkr
KykNCiAJCQlpZiAoRXRjLmtsaW5nb25baV0uZGlzdCA+IEV0Yy5rbGluZ29u
W2krMV0uZGlzdCkNCiAJCQl7DQotCQkJCWJtb3ZlKCZFdGMua2xpbmdvbltp
XSwgJnQsIHNpemVvZiB0KTsNCi0JCQkJYm1vdmUoJkV0Yy5rbGluZ29uW2kr
MV0sICZFdGMua2xpbmdvbltpXSwgc2l6ZW9mIHQpOw0KLQkJCQlibW92ZSgm
dCwgJkV0Yy5rbGluZ29uW2krMV0sIHNpemVvZiB0KTsNCisJCQkJbWVtbW92
ZSgmdCwgJkV0Yy5rbGluZ29uW2ldLCBzaXplb2YgdCk7DQorCQkJCW1lbW1v
dmUoJkV0Yy5rbGluZ29uW2ldLCAmRXRjLmtsaW5nb25baSsxXSwgc2l6ZW9m
IHQpOw0KKwkJCQltZW1tb3ZlKCZFdGMua2xpbmdvbltpKzFdLCAmdCwgc2l6
ZW9mIHQpOw0KIAkJCQlmID0gMTsNCiAJCQl9DQogCX0NCkluZGV4OiBjb21w
dXRlci5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hv
bWUvZGN2cy9zcmMvZ2FtZXMvdHJlay9jb21wdXRlci5jLHYNCnJldHJpZXZp
bmcgcmV2aXNpb24gMS4yDQpkaWZmIC11IC1yMS4yIGNvbXB1dGVyLmMNCi0t
LSBjb21wdXRlci5jCTE3IEp1biAyMDAzIDA0OjI1OjI1IC0wMDAwCTEuMg0K
KysrIGNvbXB1dGVyLmMJMjYgTWFyIDIwMDUgMjI6MDc6MjAgLTAwMDANCkBA
IC0zNSw5ICszNSwxMSBAQA0KICAqICREcmFnb25GbHk6IHNyYy9nYW1lcy90
cmVrL2NvbXB1dGVyLmMsdiAxLjIgMjAwMy8wNi8xNyAwNDoyNToyNSBkaWxs
b24gRXhwICQNCiAgKi8NCiANCi0jIGluY2x1ZGUJInRyZWsuaCINCi0jIGlu
Y2x1ZGUJImdldHBhci5oIg0KLSMgaW5jbHVkZQk8c3RkaW8uaD4NCisjaW5j
bHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPG1hdGguaD4NCisjaW5jbHVk
ZSAidHJlay5oIg0KKyNpbmNsdWRlICJnZXRwYXIuaCINCisNCiAvKg0KICoq
ICBPbi1Cb2FyZCBDb21wdXRlcg0KICoqDQpAQCAtODYsMjMgKzg4LDI4IEBA
DQogDQogc3RydWN0IGN2bnRhYglDcHV0YWJbXSA9DQogew0KLQkiY2giLAkJ
CSJhcnQiLAkJCShpbnQgKCopKCkpMSwJCTAsDQotCSJ0IiwJCQkicmFqZWN0
b3J5IiwJCShpbnQgKCopKCkpMiwJCTAsDQotCSJjIiwJCQkib3Vyc2UiLAkJ
KGludCAoKikoKSkzLAkJMCwNCi0JIm0iLAkJCSJvdmUiLAkJCShpbnQgKCop
KCkpMywJCTEsDQotCSJzIiwJCQkiY29yZSIsCQkJKGludCAoKikoKSk0LAkJ
MCwNCi0JInAiLAkJCSJoZWZmIiwJCQkoaW50ICgqKSgpKTUsCQkwLA0KLQki
dyIsCQkJImFycGNvc3QiLAkJKGludCAoKikoKSk2LAkJMCwNCi0JImkiLAkJ
CSJtcGNvc3QiLAkJKGludCAoKikoKSk3LAkJMCwNCi0JImQiLAkJCSJpc3Ry
ZXNzbGlzdCIsCQkoaW50ICgqKSgpKTgsCQkwLA0KLQkwDQorCXsiY2giLAki
YXJ0IiwJCSh2b2lkICgqKSgpKTEsCTB9LA0KKwl7InQiLAkicmFqZWN0b3J5
IiwJKHZvaWQgKCopKCkpMiwJMH0sDQorCXsiYyIsCSJvdXJzZSIsCSh2b2lk
ICgqKSgpKTMsCTB9LA0KKwl7Im0iLAkib3ZlIiwJCSh2b2lkICgqKSgpKTMs
CTF9LA0KKwl7InMiLAkiY29yZSIsCQkodm9pZCAoKikoKSk0LAkwfSwNCisJ
eyJwIiwJImhlZmYiLAkJKHZvaWQgKCopKCkpNSwJMH0sDQorCXsidyIsCSJh
cnBjb3N0IiwJKHZvaWQgKCopKCkpNiwJMH0sDQorCXsiaSIsCSJtcGNvc3Qi
LAkodm9pZCAoKikoKSk3LAkwfSwNCisJeyJkIiwJImlzdHJlc3NsaXN0IiwJ
KHZvaWQgKCopKCkpOCwJMH0sDQorCXswLAkwLAkJKHZvaWQgKCopKCkpMCwJ
MH0NCiB9Ow0KIA0KLWNvbXB1dGVyKCkNCisNCitzdGF0aWMgaW50CWthbGMo
aW50IHRxeCwgaW50IHRxeSwgaW50IHRzeCwgaW50IHRzeSwgZG91YmxlICpk
aXN0KTsNCit2b2lkCQlwcmthbGMoaW50IGNvdXJzZSwgZG91YmxlIGRpc3Qp
Ow0KKw0KKw0KK3ZvaWQNCitjb21wdXRlcih2b2lkKQ0KIHsNCiAJaW50CQkJ
aXgsIGl5Ow0KIAlpbnQJCWksIGo7DQotCWludAkJCW51bW91dDsNCiAJaW50
CQkJdHF4LCB0cXk7DQogCXN0cnVjdCBjdm50YWIJCSpyOw0KIAlpbnQJCQlj
b3N0Ow0KQEAgLTI4NCw3ICsyOTEsNyBAQA0KIAkJLyogc2tpcCB0byBuZXh0
IHNlbWljb2xvbiBvciBuZXdsaW5lLiAgU2VtaWNvbG9uDQogCQkgKiBtZWFu
cyBnZXQgbmV3IGNvbXB1dGVyIHJlcXVlc3Q7IG5ld2xpbmUgbWVhbnMNCiAJ
CSAqIGV4aXQgY29tcHV0ZXIgbW9kZS4gKi8NCi0JCXdoaWxlICgoaSA9IGNn
ZXRjKDApKSAhPSAnOycpDQorCQl3aGlsZSAoKGkgPSBnZXRjaGFyKCkpICE9
ICc7JykNCiAJCXsNCiAJCQlpZiAoaSA9PSAnXDAnKQ0KIAkJCQlleGl0KDEp
Ow0KQEAgLTMwNSwxMiArMzEyLDggQEANCiAqKglzcXgsc3F5L3NzeCxzc3kg
dG8gdHF4LHRxeS90c3gsdHN5Lg0KICovDQogDQota2FsYyh0cXgsIHRxeSwg
dHN4LCB0c3ksIGRpc3QpDQotaW50CXRxeDsNCi1pbnQJdHF5Ow0KLWludAl0
c3g7DQotaW50CXRzeTsNCi1kb3VibGUJKmRpc3Q7DQoraW50DQora2FsYyhp
bnQgdHF4LCBpbnQgdHF5LCBpbnQgdHN4LCBpbnQgdHN5LCBkb3VibGUgKmRp
c3QpDQogew0KIAlkb3VibGUJCQlkeCwgZHk7DQogCWRvdWJsZQkJCXF1YWRz
aXplOw0KQEAgLTMzNCwxMCArMzM3LDggQEANCiAJcmV0dXJuIChjb3Vyc2Up
Ow0KIH0NCiANCi0NCi1wcmthbGMoY291cnNlLCBkaXN0KQ0KLWludAljb3Vy
c2U7DQotZG91YmxlCWRpc3Q7DQordm9pZA0KK3Bya2FsYyhpbnQgY291cnNl
LCBkb3VibGUgZGlzdCkNCiB7DQogCXByaW50ZigiOiBjb3Vyc2UgJWQgIGRp
c3QgJS4zZlxuIiwgY291cnNlLCBkaXN0KTsNCiB9DQpJbmRleDogZGFtYWdl
LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvaG9tZS9k
Y3ZzL3NyYy9nYW1lcy90cmVrL2RhbWFnZS5jLHYNCnJldHJpZXZpbmcgcmV2
aXNpb24gMS4yDQpkaWZmIC11IC1yMS4yIGRhbWFnZS5jDQotLS0gZGFtYWdl
LmMJMTcgSnVuIDIwMDMgMDQ6MjU6MjUgLTAwMDAJMS4yDQorKysgZGFtYWdl
LmMJMjUgTWFyIDIwMDUgMTY6MjA6NDkgLTAwMDANCkBAIC0zNSw3ICszNSw3
IEBADQogICogJERyYWdvbkZseTogc3JjL2dhbWVzL3RyZWsvZGFtYWdlLmMs
diAxLjIgMjAwMy8wNi8xNyAwNDoyNToyNSBkaWxsb24gRXhwICQNCiAgKi8N
CiANCi0jIGluY2x1ZGUJInRyZWsuaCINCisjaW5jbHVkZSAidHJlay5oIg0K
IA0KIC8qDQogKiogIFNjaGVkdWxlIFNoaXAuZGFtYWdlcyB0byBhIERldmlj
ZQ0KQEAgLTQ5LDkgKzQ5LDggQEANCiAqKgl0aGF0IHRoZSBkb2NrKCkgYW5k
IHVuZG9jaygpIGhhdmUgdG8gcmVzY2hlZHVsZSB0aGUgZXZlbnQuDQogKi8N
CiANCi1kYW1hZ2UoZGV2MSwgZGFtKQ0KLWludAlkZXYxOwkJLyogIGRldmlj
ZSBpbmRleCAqLw0KLWRvdWJsZQlkYW07CQkvKiB0aW1lIHRvIHJlcGFpciAq
Lw0KK3ZvaWQNCitkYW1hZ2UoaW50IGRldjEsIGRvdWJsZSBkYW0pDQogew0K
IAlpbnQJCWk7DQogCXN0cnVjdCBldmVudAkqZTsNCkluZGV4OiBkYW1hZ2Vk
LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvaG9tZS9k
Y3ZzL3NyYy9nYW1lcy90cmVrL2RhbWFnZWQuYyx2DQpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMg0KZGlmZiAtdSAtcjEuMiBkYW1hZ2VkLmMNCi0tLSBkYW1h
Z2VkLmMJMTcgSnVuIDIwMDMgMDQ6MjU6MjUgLTAwMDAJMS4yDQorKysgZGFt
YWdlZC5jCTI1IE1hciAyMDA1IDE2OjIxOjA4IC0wMDAwDQpAQCAtMzUsNyAr
MzUsNyBAQA0KICAqICREcmFnb25GbHk6IHNyYy9nYW1lcy90cmVrL2RhbWFn
ZWQuYyx2IDEuMiAyMDAzLzA2LzE3IDA0OjI1OjI1IGRpbGxvbiBFeHAgJA0K
ICAqLw0KIA0KLSMgaW5jbHVkZQkidHJlay5oIg0KKyNpbmNsdWRlICJ0cmVr
LmgiDQogDQogLyogIERBTUFHRUQgLS0gY2hlY2sgZm9yIGRldmljZSBkYW1h
Z2VkDQogKioNCkBAIC00NCw4ICs0NCw4IEBADQogKioJZXZlbnQgbGlzdCBm
b3IgYSAiZGV2aWNlIGZpeCIgYWN0aW9uIG9uIHRoYXQgZGV2aWNlLg0KICov
DQogDQotZGFtYWdlZChkZXYpDQotaW50CWRldjsNCitpbnQNCitkYW1hZ2Vk
KGludCBkZXYpDQogew0KIAlpbnQJCWQ7DQogCXN0cnVjdCBldmVudAkqZTsN
CkluZGV4OiBkY3JlcHQuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNT
IGZpbGU6IC9ob21lL2RjdnMvc3JjL2dhbWVzL3RyZWsvZGNyZXB0LmMsdg0K
cmV0cmlldmluZyByZXZpc2lvbiAxLjINCmRpZmYgLXUgLXIxLjIgZGNyZXB0
LmMNCi0tLSBkY3JlcHQuYwkxNyBKdW4gMjAwMyAwNDoyNToyNSAtMDAwMAkx
LjINCisrKyBkY3JlcHQuYwkyNSBNYXIgMjAwNSAxNjoyMTozOCAtMDAwMA0K
QEAgLTM1LDcgKzM1LDcgQEANCiAgKiAkRHJhZ29uRmx5OiBzcmMvZ2FtZXMv
dHJlay9kY3JlcHQuYyx2IDEuMiAyMDAzLzA2LzE3IDA0OjI1OjI1IGRpbGxv
biBFeHAgJA0KICAqLw0KIA0KLSMgaW5jbHVkZQkidHJlay5oIg0KKyNpbmNs
dWRlICJ0cmVrLmgiDQogDQogLyoNCiAqKiAgZGFtYWdlIGNvbnRyb2wgcmVw
b3J0DQpAQCAtNDksNyArNDksOCBAQA0KICoqCWZpeCB0aGluZ3MgaWYgeW91
IGFyZSBkb2NrZWQuDQogKi8NCiANCi1kY3JlcHQoKQ0KK3ZvaWQNCitkY3Jl
cHQodm9pZCkNCiB7DQogCWludAkJaSwgZjsNCiAJZG91YmxlCQkJeDsNCklu
ZGV4OiBkZXN0cnVjdC5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1Mg
ZmlsZTogL2hvbWUvZGN2cy9zcmMvZ2FtZXMvdHJlay9kZXN0cnVjdC5jLHYN
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yDQpkaWZmIC11IC1yMS4yIGRlc3Ry
dWN0LmMNCi0tLSBkZXN0cnVjdC5jCTE3IEp1biAyMDAzIDA0OjI1OjI1IC0w
MDAwCTEuMg0KKysrIGRlc3RydWN0LmMJMjYgTWFyIDIwMDUgMTg6NTk6NDEg
LTAwMDANCkBAIC0zNSw3ICszNSwxMCBAQA0KICAqICREcmFnb25GbHk6IHNy
Yy9nYW1lcy90cmVrL2Rlc3RydWN0LmMsdiAxLjIgMjAwMy8wNi8xNyAwNDoy
NToyNSBkaWxsb24gRXhwICQNCiAgKi8NCiANCi0jIGluY2x1ZGUJInRyZWsu
aCINCisjaW5jbHVkZSA8dW5pc3RkLmg+DQorI2luY2x1ZGUgPHN0cmluZy5o
Pg0KKyNpbmNsdWRlICJ0cmVrLmgiDQorI2luY2x1ZGUgImdldHBhci5oIg0K
IA0KIC8qDQogKiogIFNlbGYgRGVzdHJ1Y3QgU2VxdWVuY2UNCkBAIC01Nywx
NCArNjAsMTggQEANCiAqKglVc2VzIHRyYWNlIGZsYWcgNDENCiAqLw0KIA0K
LWRlc3RydWN0KCkNCit2b2lkDQorZGVzdHJ1Y3Qodm9pZCkNCiB7DQogCWNo
YXIJCWNoZWNrcGFzc1sxNV07DQogCWludAlpLCBqOw0KIAlkb3VibGUJCXph
cDsNCiANCiAJaWYgKGRhbWFnZWQoQ09NUFVURVIpKQ0KLQkJcmV0dXJuIChv
dXQoQ09NUFVURVIpKTsNCisJew0KKwkJb3V0KENPTVBVVEVSKTsNCisJCXJl
dHVybjsNCisJfQ0KIAlwcmludGYoIlxuXDA3IC0tLSBXT1JLSU5HIC0tLVww
N1xuIik7DQogCXNsZWVwKDMpOw0KIAkvKiBvdXRwdXQgdGhlIGNvdW50IDEw
IDkgOCA3IDYgKi8NCkBAIC03OSw4ICs4NiwxMSBAQA0KIAlza2lwdG9ubCgw
KTsNCiAJZ2V0c3RycGFyKCJFbnRlciBwYXNzd29yZCB2ZXJpZmljYXRpb24i
LCBjaGVja3Bhc3MsIDE0LCAwKTsNCiAJc2xlZXAoMik7DQotCWlmICghc2Vx
dWFsKGNoZWNrcGFzcywgR2FtZS5wYXNzd2QpKQ0KLQkJcmV0dXJuIChwcmlu
dGYoIlNlbGYgZGVzdHJ1Y3Qgc2VxdWVuY2UgYWJvcnRlZFxuIikpOw0KKwlp
ZiAoc3RyY21wKGNoZWNrcGFzcywgR2FtZS5wYXNzd2QpKQ0KKwl7DQorCQlw
cmludGYoIlNlbGYgZGVzdHJ1Y3Qgc2VxdWVuY2UgYWJvcnRlZFxuIik7DQor
CQlyZXR1cm47DQorCX0NCiAJcHJpbnRmKCJQYXNzd29yZCB2ZXJpZmllZDsg
c2VsZiBkZXN0cnVjdCBzZXF1ZW5jZSBjb250aW51ZXM6XG4iKTsNCiAJc2xl
ZXAoMik7DQogCS8qIG91dHB1dCBjb3VudCA1IDQgMyAyIDEgMCAqLw0KSW5k
ZXg6IGRvY2suYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6
IC9ob21lL2RjdnMvc3JjL2dhbWVzL3RyZWsvZG9jay5jLHYNCnJldHJpZXZp
bmcgcmV2aXNpb24gMS4yDQpkaWZmIC11IC1yMS4yIGRvY2suYw0KLS0tIGRv
Y2suYwkxNyBKdW4gMjAwMyAwNDoyNToyNSAtMDAwMAkxLjINCisrKyBkb2Nr
LmMJMjYgTWFyIDIwMDUgMTc6Mjc6NDkgLTAwMDANCkBAIC0zNSw3ICszNSw3
IEBADQogICogJERyYWdvbkZseTogc3JjL2dhbWVzL3RyZWsvZG9jay5jLHYg
MS4yIDIwMDMvMDYvMTcgMDQ6MjU6MjUgZGlsbG9uIEV4cCAkDQogICovDQog
DQotIyBpbmNsdWRlCSJ0cmVrLmgiDQorI2luY2x1ZGUgInRyZWsuaCINCiAN
CiAvKg0KICoqICBET0NLIFRPIFNUQVJCQVNFDQpAQCAtNTIsMTQgKzUyLDE4
IEBADQogKioJYXJlIGRvY2tlZC4NCiAqLw0KIA0KLWRvY2soKQ0KK3ZvaWQN
Citkb2NrKHZvaWQpDQogew0KIAlpbnQJCWksIGo7DQogCWludAkJCW9rOw0K
IAlzdHJ1Y3QgZXZlbnQJKmU7DQogDQogCWlmIChTaGlwLmNvbmQgPT0gRE9D
S0VEKQ0KLQkJcmV0dXJuIChwcmludGYoIkNoZWtvdjogQnV0IGNhcHRhaW4s
IHdlIGFyZSBhbHJlYWR5IGRvY2tlZFxuIikpOw0KKwl7DQorCQlwcmludGYo
IkNoZWtvdjogQnV0IGNhcHRhaW4sIHdlIGFyZSBhbHJlYWR5IGRvY2tlZFxu
Iik7DQorCQlyZXR1cm47DQorCX0NCiAJLyogY2hlY2sgZm9yIG9rIHRvIGRv
Y2ssIGkuZS4sIGFkamFjZW50IHRvIGEgc3RhcmJhc2UgKi8NCiAJb2sgPSAw
Ow0KIAlmb3IgKGkgPSBTaGlwLnNlY3R4IC0gMTsgaSA8PSBTaGlwLnNlY3R4
ICsgMSAmJiAhb2s7IGkrKykNCkBAIC03OCw3ICs4MiwxMCBAQA0KIAkJfQ0K
IAl9DQogCWlmICghb2spDQotCQlyZXR1cm4gKHByaW50ZigiQ2hla292OiBC
dXQgY2FwdGFpbiwgd2UgYXJlIG5vdCBhZGphY2VudCB0byBhIHN0YXJiYXNl
LlxuIikpOw0KKwl7DQorCQlwcmludGYoIkNoZWtvdjogQnV0IGNhcHRhaW4s
IHdlIGFyZSBub3QgYWRqYWNlbnQgdG8gYSBzdGFyYmFzZS5cbiIpOw0KKwkJ
cmV0dXJuOw0KKwl9DQogDQogCS8qIHJlc3RvcmUgcmVzb3VyY2VzICovDQog
CVNoaXAuZW5lcmd5ID0gUGFyYW0uZW5lcmd5Ow0KQEAgLTEwOCw3ICsxMTUs
NiBAQA0KIAkJCWNvbnRpbnVlOw0KIAkJcmVzY2hlZHVsZShlLCAoZS0+ZGF0
ZSAtIE5vdy5kYXRlKSAqIFBhcmFtLmRvY2tmYWMpOw0KIAl9DQotCXJldHVy
bjsNCiB9DQogDQogDQpAQCAtMTE5LDcgKzEyNSw4IEBADQogKioJaXMgdG8g
cmVzY2hlZHVsZSBhbnkgZGFtYWdlcyBzbyB0aGF0IHRoZXkgd2lsbCB0YWtl
IGxvbmdlci4NCiAqLw0KIA0KLXVuZG9jaygpDQordm9pZA0KK3VuZG9jayh2
b2lkKQ0KIHsNCiAJc3RydWN0IGV2ZW50CSplOw0KIAlpbnQJCWk7DQpAQCAt
MTQwLDUgKzE0Nyw0IEBADQogCQkJY29udGludWU7DQogCQlyZXNjaGVkdWxl
KGUsIChlLT5kYXRlIC0gTm93LmRhdGUpIC8gUGFyYW0uZG9ja2ZhYyk7DQog
CX0NCi0JcmV0dXJuOw0KIH0NCkluZGV4OiBkdW1wZ2FtZS5jDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hvbWUvZGN2cy9zcmMvZ2Ft
ZXMvdHJlay9kdW1wZ2FtZS5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
DQpkaWZmIC11IC1yMS4yIGR1bXBnYW1lLmMNCi0tLSBkdW1wZ2FtZS5jCTE3
IEp1biAyMDAzIDA0OjI1OjI1IC0wMDAwCTEuMg0KKysrIGR1bXBnYW1lLmMJ
MjYgTWFyIDIwMDUgMjI6MDQ6MzQgLTAwMDANCkBAIC0zNSwxMiArMzUsMTIg
QEANCiAgKiAkRHJhZ29uRmx5OiBzcmMvZ2FtZXMvdHJlay9kdW1wZ2FtZS5j
LHYgMS4yIDIwMDMvMDYvMTcgMDQ6MjU6MjUgZGlsbG9uIEV4cCAkDQogICov
DQogDQorI2luY2x1ZGUgPHVuaXN0ZC5oPg0KICNpbmNsdWRlIDxmY250bC5o
Pg0KLQ0KLSMgaW5jbHVkZQkidHJlay5oIg0KKyNpbmNsdWRlICJ0cmVrLmgi
DQogDQogLyoqKiAgVEhJUyBDT05TVEFOVCBNVVNUIENIQU5HRSBBUyBUSEUg
REFUQSBTUEFDRVMgQ0hBTkdFICoqKi8NCi0jIGRlZmluZQlWRVJTSU9OCQky
DQorI2RlZmluZQlWRVJTSU9OCQkyDQogDQogc3RydWN0IGR1bXANCiB7DQpA
QCAtNTEsMTggKzUxLDIyIEBADQogDQogc3RydWN0IGR1bXAJRHVtcF90ZW1w
bGF0ZVtdID0NCiB7DQotCShjaGFyICopJlNoaXAsCQlzaXplb2YgKFNoaXAp
LA0KLQkoY2hhciAqKSZOb3csCQlzaXplb2YgKE5vdyksDQotCShjaGFyICop
JlBhcmFtLAkJc2l6ZW9mIChQYXJhbSksDQotCShjaGFyICopJkV0YywJCXNp
emVvZiAoRXRjKSwNCi0JKGNoYXIgKikmR2FtZSwJCXNpemVvZiAoR2FtZSks
DQotCShjaGFyICopU2VjdCwJCXNpemVvZiAoU2VjdCksDQotCShjaGFyICop
UXVhZCwJCXNpemVvZiAoUXVhZCksDQotCShjaGFyICopJk1vdmUsCQlzaXpl
b2YgKE1vdmUpLA0KLQkoY2hhciAqKUV2ZW50LAkJc2l6ZW9mIChFdmVudCks
DQotCTANCisJeyhjaGFyICopJlNoaXAsCQlzaXplb2YgKFNoaXApfSwNCisJ
eyhjaGFyICopJk5vdywJCXNpemVvZiAoTm93KX0sDQorCXsoY2hhciAqKSZQ
YXJhbSwJCXNpemVvZiAoUGFyYW0pfSwNCisJeyhjaGFyICopJkV0YywJCXNp
emVvZiAoRXRjKX0sDQorCXsoY2hhciAqKSZHYW1lLAkJc2l6ZW9mIChHYW1l
KX0sDQorCXsoY2hhciAqKVNlY3QsCQlzaXplb2YgKFNlY3QpfSwNCisJeyhj
aGFyICopUXVhZCwJCXNpemVvZiAoUXVhZCl9LA0KKwl7KGNoYXIgKikmTW92
ZSwJCXNpemVvZiAoTW92ZSl9LA0KKwl7KGNoYXIgKilFdmVudCwJCXNpemVv
ZiAoRXZlbnQpfSwNCisJezAsCQkJMH0NCiB9Ow0KIA0KKw0KK3N0YXRpYyBp
bnQJcmVhZGR1bXAoaW50IGZkMSk7DQorDQorDQogLyoNCiAqKiAgRFVNUCBH
QU1FDQogKioNCkBAIC03Myw3ICs3Nyw4IEBADQogKioJb3V0cHV0IGNoYW5n
ZS4NCiAqLw0KIA0KLWR1bXBnYW1lKCkNCit2b2lkDQorZHVtcGdhbWUodm9p
ZCkNCiB7DQogCWludAkJCXZlcnNpb247DQogCWludAkJZmQ7DQpAQCAtODEs
NyArODYsMTAgQEANCiAJaW50CQlpOw0KIA0KIAlpZiAoKGZkID0gY3JlYXQo
InRyZWsuZHVtcCIsIDA2NDQpKSA8IDApDQotCQlyZXR1cm4gKHByaW50Zigi
Y2Fubm90IGR1bXBcbiIpKTsNCisJew0KKwkJcHJpbnRmKCJjYW5ub3QgZHVt
cFxuIik7DQorCQlyZXR1cm47DQorCX0NCiAJdmVyc2lvbiA9IFZFUlNJT047
DQogCXdyaXRlKGZkLCAmdmVyc2lvbiwgc2l6ZW9mIHZlcnNpb24pOw0KIA0K
QEAgLTEwOCw3ICsxMTYsOCBAQA0KICoqCVJldHVybiB2YWx1ZSBpcyB6ZXJv
IGZvciBzdWNjZXNzLCBvbmUgZm9yIGZhaWx1cmUuDQogKi8NCiANCi1yZXN0
YXJ0Z2FtZSgpDQoraW50DQorcmVzdGFydGdhbWUodm9pZCkNCiB7DQogCWlu
dAlmZDsNCiAJaW50CQl2ZXJzaW9uOw0KQEAgLTEzNyw4ICsxNDYsOCBAQA0K
ICoqCVJldHVybnMgemVybyBmb3Igc3VjY2Vzcywgb25lIGZvciBmYWlsdXJl
Lg0KICovDQogDQotcmVhZGR1bXAoZmQxKQ0KLWludAlmZDE7DQoraW50DQor
cmVhZGR1bXAoaW50IGZkMSkNCiB7DQogCWludAkJZmQ7DQogCXN0cnVjdCBk
dW1wCSpkOw0KSW5kZXg6IGR1bXBtZS5jDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQpSQ1MgZmlsZTogL2hvbWUvZGN2cy9zcmMvZ2FtZXMvdHJlay9kdW1w
bWUuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMg0KZGlmZiAtdSAtcjEu
MiBkdW1wbWUuYw0KLS0tIGR1bXBtZS5jCTE3IEp1biAyMDAzIDA0OjI1OjI1
IC0wMDAwCTEuMg0KKysrIGR1bXBtZS5jCTI2IE1hciAyMDA1IDE3OjI2OjAx
IC0wMDAwDQpAQCAtMzUsNyArMzUsNyBAQA0KICAqICREcmFnb25GbHk6IHNy
Yy9nYW1lcy90cmVrL2R1bXBtZS5jLHYgMS4yIDIwMDMvMDYvMTcgMDQ6MjU6
MjUgZGlsbG9uIEV4cCAkDQogICovDQogDQotIyBpbmNsdWRlCSJ0cmVrLmgi
DQorI2luY2x1ZGUgInRyZWsuaCINCiANCiAvKg0KICoqICBEdW1wIHRoZSBz
dGFyc2hpcCBzb21ld2hlcmUgaW4gdGhlIGdhbGF4eQ0KQEAgLTQ5LDggKzQ5
LDggQEANCiAqKglSZXBhaXIgb2YgZGV2aWNlcyBtdXN0IGJlIGRlZmVycmVk
Lg0KICovDQogDQotZHVtcG1lKGZsYWcpDQotaW50CWZsYWc7DQordm9pZA0K
K2R1bXBtZShpbnQgZmxhZykNCiB7DQogCWludAkJZjsNCiAJZG91YmxlCQkJ
eDsNCkBAIC02Miw3ICs2Miw3IEBADQogCVNoaXAucXVhZHkgPSByYW5mKE5R
VUFEUyk7DQogCVNoaXAuc2VjdHggPSByYW5mKE5TRUNUUyk7DQogCVNoaXAu
c2VjdHkgPSByYW5mKE5TRUNUUyk7DQotCXggKz0gMS41ICogZnJhbmYoKTsN
CisJeCA9IDEuNSAqIGZyYW5mKCk7DQogCU1vdmUudGltZSArPSB4Ow0KIAlp
ZiAoZikNCiAJew0KSW5kZXg6IGR1bXBzc3JhZGlvLmMNCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NClJDUyBmaWxlOiAvaG9tZS9kY3ZzL3NyYy9nYW1lcy90
cmVrL2R1bXBzc3JhZGlvLmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjIN
CmRpZmYgLXUgLXIxLjIgZHVtcHNzcmFkaW8uYw0KLS0tIGR1bXBzc3JhZGlv
LmMJMTcgSnVuIDIwMDMgMDQ6MjU6MjUgLTAwMDAJMS4yDQorKysgZHVtcHNz
cmFkaW8uYwkyNiBNYXIgMjAwNSAyMjowMzoyNyAtMDAwMA0KQEAgLTM1LDEz
ICszNSwxNCBAQA0KICAqICREcmFnb25GbHk6IHNyYy9nYW1lcy90cmVrL2R1
bXBzc3JhZGlvLmMsdiAxLjIgMjAwMy8wNi8xNyAwNDoyNToyNSBkaWxsb24g
RXhwICQNCiAgKi8NCiANCi0jIGluY2x1ZGUJInRyZWsuaCINCisjaW5jbHVk
ZSAidHJlay5oIg0KIA0KIC8qKg0KICAqKglvdXRwdXQgaGlkZGVuIGRpc3Ry
ZXNzIGNhbGxzDQogICoqLw0KIA0KLWR1bXBzc3JhZGlvKCkNCitpbnQNCitk
dW1wc3NyYWRpbyh2b2lkKQ0KIHsNCiAJc3RydWN0IGV2ZW50CSplOw0KIAlp
bnQJCWo7DQpAQCAtNTgsNyArNTksNyBAQA0KIAkJew0KIAkJCXVuc2NoZWR1
bGUoZSk7DQogCQkJcHJpbnRmKCJTdGFyc3lzdGVtICVzIGluIHF1YWRyYW50
ICVkLCVkIGlzIG5vIGxvbmdlciBkaXN0cmVzc2VkXG4iLA0KLQkJCQlzeXN0
ZW1uYW1lKGUpLCBlLT54LCBlLT55KTsNCisJCQkJc3lzdGVtbmFtZSgmUXVh
ZFtlLT54XVtlLT55XSksIGUtPngsIGUtPnkpOw0KIAkJCWNvbnRpbnVlOw0K
IAkJfQ0KIA0KQEAgLTc0LDcgKzc1LDcgQEANCiAJCSAgY2FzZSBFX0VOU0xW
Og0KIAkJICBjYXNlIEVfUkVQUk86DQogCQkJcHJpbnRmKCJTdGFyc3lzdGVt
ICVzIGluIHF1YWRyYW50ICVkLCVkIGlzIGRpc3RyZXNzZWRcbiIsDQotCQkJ
CXN5c3RlbW5hbWUoZSksIGUtPngsIGUtPnkpOw0KKwkJCQlzeXN0ZW1uYW1l
KCZRdWFkW2UtPnhdW2UtPnldKSwgZS0+eCwgZS0+eSk7DQogCQkJY2hrcmVz
dCsrOw0KIAkJCWJyZWFrOw0KIA0KSW5kZXg6IGV2ZW50cy5jDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hvbWUvZGN2cy9zcmMvZ2Ft
ZXMvdHJlay9ldmVudHMuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMg0K
ZGlmZiAtdSAtcjEuMiBldmVudHMuYw0KLS0tIGV2ZW50cy5jCTE3IEp1biAy
MDAzIDA0OjI1OjI1IC0wMDAwCTEuMg0KKysrIGV2ZW50cy5jCTMxIE1hciAy
MDA1IDIwOjM2OjU5IC0wMDAwDQpAQCAtMzUsNyArMzUsMTAgQEANCiAgKiAk
RHJhZ29uRmx5OiBzcmMvZ2FtZXMvdHJlay9ldmVudHMuYyx2IDEuMiAyMDAz
LzA2LzE3IDA0OjI1OjI1IGRpbGxvbiBFeHAgJA0KICAqLw0KIA0KLSMgaW5j
bHVkZQkidHJlay5oIg0KKyNpbmNsdWRlIDxzdHJpbmcuaD4NCisjaW5jbHVk
ZSA8bWF0aC5oPg0KKyNpbmNsdWRlICJ0cmVrLmgiDQorI2luY2x1ZGUgImdl
dHBhci5oIg0KIA0KIC8qDQogKiogIENBVVNFIFRJTUUgVE8gRUxBUFNFDQpA
QCAtNDUsOSArNDgsOCBAQA0KICoqCWFuZCBzbyBvbi4NCiAqLw0KIA0KLQ0K
LWV2ZW50cyh3YXJwKQ0KLWludAl3YXJwOwkJLyogc2V0IGlmIGNhbGxlZCBp
biBhIHRpbWUgd2FycCAqLw0KK2ludA0KK2V2ZW50cyhpbnQgX3dhcnApDQog
ew0KIAlpbnQJCWk7DQogCWludAkJCWo7DQpAQCAtNTUsMTIgKzU3LDEzIEBA
DQogCWRvdWJsZQkJCXJ0aW1lOw0KIAlkb3VibGUJCQl4ZGF0ZTsNCiAJZG91
YmxlCQkJaWRhdGU7DQotCXN0cnVjdCBldmVudAkJKmV2LCAqeHNjaGVkKCks
ICpzY2hlZHVsZSgpOw0KKwlzdHJ1Y3QgZXZlbnQJCSpldjsNCiAJaW50CQkJ
aXgsIGl5Ow0KIAlzdHJ1Y3QgcXVhZAkqcTsNCiAJc3RydWN0IGV2ZW50CSpl
Ow0KIAlpbnQJCQlldm51bTsNCiAJaW50CQkJcmVzdGNhbmNlbDsNCisJY2hh
cgkJKnA7DQogDQogCS8qIGlmIG5vdGhpbmcgaGFwcGVuZWQsIGp1c3QgYWxs
b3cgZm9yIGFueSBLbGluZ29ucyBraWxsZWQgKi8NCiAJaWYgKE1vdmUudGlt
ZSA8PSAwLjApDQpAQCAtODAsNiArODMsOCBAQA0KIAkJc2NoZWR1bGUoRV9B
VFRBQ0ssIDAuNSwgMCwgMCwgMCk7DQogDQogCS8qIHNjYW4gdGhlIGV2ZW50
IGxpc3QgKi8NCisJaiA9IDA7DQorCWV2ID0gTlVMTDsNCiAJd2hpbGUgKDEp
DQogCXsNCiAJCXJlc3RjYW5jZWwgPSAwOw0KQEAgLTExNiwxMSArMTIxLDEx
IEBADQogCQkvKiBjaGVjayBmb3Igb3V0IG9mIHRpbWUgKi8NCiAJCWlmIChO
b3cudGltZSA8PSAwLjApDQogCQkJbG9zZShMX05PVElNRSk7DQotIwkJaWZk
ZWYgeFRSQUNFDQorI2lmZGVmIHhUUkFDRQ0KIAkJaWYgKGV2bnVtID49IDAg
JiYgVHJhY2UpDQogCQkJcHJpbnRmKCJ4ZGF0ZSA9ICUuMmYsIGV2Y29kZSAl
ZCBwYXJhbXMgJWQgJWQgJWRcbiIsDQogCQkJCXhkYXRlLCBlLT5ldmNvZGUs
IGUtPngsIGUtPnksIGUtPnN5c3RlbW5hbWUpOw0KLSMJCWVuZGlmDQorI2Vu
ZGlmDQogDQogCQkvKiBpZiBldm51bSA8IDAsIG5vIGV2ZW50cyBvY2N1cnJl
ZCAgKi8NCiAJCWlmIChldm51bSA8IDApDQpAQCAtMTMyLDcgKzEzNyw3IEBA
DQogDQogCQkgIGNhc2UgRV9TTk9WQToJCQkvKiBzdXBlcm5vdmEgKi8NCiAJ
CQkvKiBjYXVzZSB0aGUgc3VwZXJub3ZhIHRvIGhhcHBlbiAqLw0KLQkJCXNu
b3ZhKC0xKTsNCisJCQlzbm92YSgtMSwgMCk7DQogCQkJLyogYW5kIHNjaGVk
dWxlIHRoZSBuZXh0IG9uZSAqLw0KIAkJCXhyZXNjaGVkKGUsIEVfU05PVkEs
IDEpOw0KIAkJCWJyZWFrOw0KQEAgLTM4MywxMCArMzg4LDEwIEBADQogDQog
CQkgIGNhc2UgRV9TTkFQOgkJLyogdGFrZSBhIHNuYXBzaG90IG9mIHRoZSBn
YWxheHkgKi8NCiAJCQl4cmVzY2hlZChlLCBFX1NOQVAsIDEpOw0KLQkJCWkg
PSAoaW50KSBFdGMuc25hcHNob3Q7DQotCQkJaSA9IGJtb3ZlKFF1YWQsIGks
IHNpemVvZiAoUXVhZCkpOw0KLQkJCWkgPSBibW92ZShFdmVudCwgaSwgc2l6
ZW9mIChFdmVudCkpOw0KLQkJCWkgPSBibW92ZSgmTm93LCBpLCBzaXplb2Yg
KE5vdykpOw0KKwkJCXAgPSBFdGMuc25hcHNob3Q7DQorCQkJbWVtbW92ZShw
LCBRdWFkLCBzaXplb2YgKFF1YWQpKTsNCisJCQltZW1tb3ZlKHAgKz0gc2l6
ZW9mKFF1YWQpLCBFdmVudCwgc2l6ZW9mIChFdmVudCkpOw0KKwkJCW1lbW1v
dmUocCArPSBzaXplb2YoRXZlbnQpLCAmTm93LCBzaXplb2YgKE5vdykpOw0K
IAkJCUdhbWUuc25hcCA9IDE7DQogCQkJYnJlYWs7DQogDQpAQCAtNDQxLDEw
ICs0NDYsMTAgQEANCiAJfQ0KIA0KIAkvKiB1bnNjaGVkdWxlIGFuIGF0dGFj
ayBkdXJpbmcgYSByZXN0IHBlcmlvZCAqLw0KLQlpZiAoZSA9IE5vdy5ldmVu
dHB0cltFX0FUVEFDS10pDQorCWlmICgoZSA9IE5vdy5ldmVudHB0cltFX0FU
VEFDS10pKQ0KIAkJdW5zY2hlZHVsZShlKTsNCiANCi0JaWYgKCF3YXJwKQ0K
KwlpZiAoIV93YXJwKQ0KIAl7DQogCQkvKiBlYXQgdXAgZW5lcmd5IGlmIGNs
b2FrZWQgKi8NCiAJCWlmIChTaGlwLmNsb2FrZWQpDQpJbmRleDogZXh0ZXJu
cy5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hvbWUv
ZGN2cy9zcmMvZ2FtZXMvdHJlay9leHRlcm5zLmMsdg0KcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjINCmRpZmYgLXUgLXIxLjIgZXh0ZXJucy5jDQotLS0gZXh0
ZXJucy5jCTE3IEp1biAyMDAzIDA0OjI1OjI1IC0wMDAwCTEuMg0KKysrIGV4
dGVybnMuYwkyNSBNYXIgMjAwNSAxOToyMzo0OSAtMDAwMA0KQEAgLTM1LDcg
KzM1LDcgQEANCiAgKiAkRHJhZ29uRmx5OiBzcmMvZ2FtZXMvdHJlay9leHRl
cm5zLmMsdiAxLjIgMjAwMy8wNi8xNyAwNDoyNToyNSBkaWxsb24gRXhwICQN
CiAgKi8NCiANCi0jIGluY2x1ZGUJInRyZWsuaCINCisjaW5jbHVkZSAidHJl
ay5oIg0KIA0KIC8qDQogKioJZ2xvYmFsIHZhcmlhYmxlIGRlZmluaXRpb25z
DQpAQCAtNDMsMjUgKzQzLDI1IEBADQogDQogc3RydWN0IGRldmljZQlEZXZp
Y2VbTkRFVl0gPQ0KIHsNCi0JIndhcnAgZHJpdmUiLAkJIlNjb3R0eSIsDQot
CSJTLlIuIHNjYW5uZXJzIiwJIlNjb3R0eSIsDQotCSJMLlIuIHNjYW5uZXJz
IiwJIlNjb3R0eSIsDQotCSJwaGFzZXJzIiwJCSJTdWx1IiwNCi0JInBob3Rv
biB0dWJlcyIsCQkiU3VsdSIsDQotCSJpbXB1bHNlIGVuZ2luZXMiLAkiU2Nv
dHR5IiwNCi0JInNoaWVsZCBjb250cm9sIiwJIlN1bHUiLA0KLQkiY29tcHV0
ZXIiLAkJIlNwb2NrIiwNCi0JInN1YnNwYWNlIHJhZGlvIiwJIlVodXJhIiwN
Ci0JImxpZmUgc3VwcG9ydCIsCQkiU2NvdHR5IiwNCi0JIm5hdmlnYXRpb24g
c3lzdGVtIiwJIkNoZWtvdiIsDQotCSJjbG9ha2luZyBkZXZpY2UiLAkiU2Nv
dHR5IiwNCi0JInRyYW5zcG9ydGVyIiwJCSJTY290dHkiLA0KLQkic2h1dHRs
ZWNyYWZ0IiwJCSJTY290dHkiLA0KLQkiKkVSUiAxNCoiLAkJIk5vYm9keSIs
DQotCSIqRVJSIDE1KiIsCQkiTm9ib2R5Ig0KKwl7IndhcnAgZHJpdmUiLAkJ
IlNjb3R0eSJ9LA0KKwl7IlMuUi4gc2Nhbm5lcnMiLAkiU2NvdHR5In0sDQor
CXsiTC5SLiBzY2FubmVycyIsCSJTY290dHkifSwNCisJeyJwaGFzZXJzIiwJ
CSJTdWx1In0sDQorCXsicGhvdG9uIHR1YmVzIiwJIlN1bHUifSwNCisJeyJp
bXB1bHNlIGVuZ2luZXMiLAkiU2NvdHR5In0sDQorCXsic2hpZWxkIGNvbnRy
b2wiLAkiU3VsdSJ9LA0KKwl7ImNvbXB1dGVyIiwJCSJTcG9jayJ9LA0KKwl7
InN1YnNwYWNlIHJhZGlvIiwJIlVodXJhIn0sDQorCXsibGlmZSBzdXBwb3J0
IiwJIlNjb3R0eSJ9LA0KKwl7Im5hdmlnYXRpb24gc3lzdGVtIiwJIkNoZWtv
diJ9LA0KKwl7ImNsb2FraW5nIGRldmljZSIsCSJTY290dHkifSwNCisJeyJ0
cmFuc3BvcnRlciIsCQkiU2NvdHR5In0sDQorCXsic2h1dHRsZWNyYWZ0IiwJ
IlNjb3R0eSJ9LA0KKwl7IipFUlIgMTQqIiwJCSJOb2JvZHkifSwNCisJeyIq
RVJSIDE1KiIsCQkiTm9ib2R5In0NCiB9Ow0KIA0KLWNoYXIJKlN5c3RlbW5h
bWVbTklOSEFCXSA9DQorY29uc3QgY2hhcgkqU3lzdGVtbmFtZVtOSU5IQUJd
ID0NCiB7DQogCSJFUlJPUiIsDQogCSJUYWxvcyBJViIsDQpJbmRleDogZ2V0
Y29kaS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hv
bWUvZGN2cy9zcmMvZ2FtZXMvdHJlay9nZXRjb2RpLmMsdg0KcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjINCmRpZmYgLXUgLXIxLjIgZ2V0Y29kaS5jDQotLS0g
Z2V0Y29kaS5jCTE3IEp1biAyMDAzIDA0OjI1OjI1IC0wMDAwCTEuMg0KKysr
IGdldGNvZGkuYwkyNSBNYXIgMjAwNSAxNjoyOTo1NCAtMDAwMA0KQEAgLTM1
LDcgKzM1LDcgQEANCiAgKiAkRHJhZ29uRmx5OiBzcmMvZ2FtZXMvdHJlay9n
ZXRjb2RpLmMsdiAxLjIgMjAwMy8wNi8xNyAwNDoyNToyNSBkaWxsb24gRXhw
ICQNCiAgKi8NCiANCi0jIGluY2x1ZGUJImdldHBhci5oIg0KKyNpbmNsdWRl
ICJnZXRwYXIuaCINCiANCiAvKg0KICoqICBnZXQgY291cnNlIGFuZCBkaXN0
YW5jZQ0KQEAgLTQ3LDkgKzQ3LDggQEANCiAqKgkobWVhbmluZyB0byBkcm9w
IHRoZSByZXF1ZXN0KS4NCiAqLw0KIA0KLWdldGNvZGkoY28sIGRpKQ0KLWlu
dAkqY287DQotZG91YmxlCSpkaTsNCitpbnQNCitnZXRjb2RpKGludCAqY28s
IGRvdWJsZSAqZGkpDQogew0KIA0KIAkqY28gPSBnZXRpbnRwYXIoIkNvdXJz
ZSIpOw0KSW5kZXg6IGdldHBhci5jDQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQpSQ1MgZmlsZTogL2hvbWUvZGN2cy9zcmMvZ2FtZXMvdHJlay9nZXRwYXIu
Yyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMg0KZGlmZiAtdSAtcjEuMiBn
ZXRwYXIuYw0KLS0tIGdldHBhci5jCTE3IEp1biAyMDAzIDA0OjI1OjI1IC0w
MDAwCTEuMg0KKysrIGdldHBhci5jCTMwIE1hciAyMDA1IDEzOjQxOjU0IC0w
MDAwDQpAQCAtMzUsMTUgKzM1LDIwIEBADQogICogJERyYWdvbkZseTogc3Jj
L2dhbWVzL3RyZWsvZ2V0cGFyLmMsdiAxLjIgMjAwMy8wNi8xNyAwNDoyNToy
NSBkaWxsb24gRXhwICQNCiAgKi8NCiANCi0jIGluY2x1ZGUJPHN0ZGlvLmg+
DQotIyBpbmNsdWRlCSJnZXRwYXIuaCINCisjaW5jbHVkZSA8c3RkaW8uaD4N
CisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPHN0cmluZy5oPg0K
KyNpbmNsdWRlICJnZXRwYXIuaCINCisNCisNCitzdGF0aWMgaW50CXRlc3R0
ZXJtKHZvaWQpOw0KIA0KIC8qKg0KICAqKglnZXQgaW50ZWdlciBwYXJhbWV0
ZXINCiAgKiovDQogDQotZ2V0aW50cGFyKHMpDQotY2hhcgkqczsNCitpbnQN
CitnZXRpbnRwYXIoY29uc3QgY2hhciAqcykNCiB7DQogCWludAlpOw0KIAlp
bnQJCW47DQpAQCAtNjAsMTcgKzY1LDE4IEBADQogCQlwcmludGYoImludmFs
aWQgaW5wdXQ7IHBsZWFzZSBlbnRlciBhbiBpbnRlZ2VyXG4iKTsNCiAJCXNr
aXB0b25sKDApOw0KIAl9DQorCS8qIE5PVFJFQUNIRUQgKi8NCiB9DQogDQog
LyoqDQogICoqCWdldCBmbG9hdGluZyBwYXJhbWV0ZXINCiAgKiovDQogDQot
ZG91YmxlIGdldGZsdHBhcihzKQ0KLWNoYXIJKnM7DQorZG91YmxlIA0KK2dl
dGZsdHBhcihjb25zdCBjaGFyICpzKQ0KIHsNCi0JaW50CQlpOw0KLQlkb3Vi
bGUJCQlkOw0KKwlpbnQJaTsNCisJZG91YmxlCWQ7DQogDQogCXdoaWxlICgx
KQ0KIAl7DQpAQCAtODQsNiArOTAsNyBAQA0KIAkJcHJpbnRmKCJpbnZhbGlk
IGlucHV0OyBwbGVhc2UgZW50ZXIgYSBkb3VibGVcbiIpOw0KIAkJc2tpcHRv
bmwoMCk7DQogCX0NCisJLyogTk9UUkVBQ0hFRCAqLw0KIH0NCiANCiAvKioN
CkBAIC05MiwxMyArOTksMTMgQEANCiANCiBzdHJ1Y3QgY3ZudGFiCVludGFi
W10gPQ0KIHsNCi0JInkiLAkiZXMiLAkoaW50ICgqKSgpKTEsCTAsDQotCSJu
IiwJIm8iLAkoaW50ICgqKSgpKTAsCTAsDQotCTANCisJeyJ5IiwJImVzIiwJ
KHZvaWQgKCopKCkpMSwJMH0sDQorCXsibiIsCSJvIiwJKHZvaWQgKCopKCkp
MCwJMH0sDQorCXswLAkwLAkodm9pZCAoKikoKSkwLAkwfQ0KIH07DQogDQot
Z2V0eW5wYXIocykNCi1jaGFyCSpzOw0KK2xvbmcNCitnZXR5bnBhcihjb25z
dCBjaGFyICpzKQ0KIHsNCiAJc3RydWN0IGN2bnRhYgkJKnI7DQogDQpAQCAt
MTExLDE2ICsxMTgsMTUgQEANCiAgKioJZ2V0IGNvZGVkIHBhcmFtZXRlcg0K
ICAqKi8NCiANCi1zdHJ1Y3QgY3ZudGFiICpnZXRjb2RwYXIocywgdGFiKQ0K
LWNoYXIJCSpzOw0KLXN0cnVjdCBjdm50YWIJdGFiW107DQorc3RydWN0IGN2
bnRhYiAqDQorZ2V0Y29kcGFyKGNvbnN0IGNoYXIgKnMsIHN0cnVjdCBjdm50
YWIgKnRhYikNCiB7DQotCWNoYXIJCQkJaW5wdXRbMTAwXTsNCi0Jc3RydWN0
IGN2bnRhYgkJKnI7DQotCWludAkJCQlmbGFnOw0KLQljaGFyCQkJKnAsICpx
Ow0KLQlpbnQJCQkJYzsNCi0JaW50CQkJCWY7DQorCWNoYXIJCWlucHV0WzEw
MF07DQorCXN0cnVjdCBjdm50YWIJKnI7DQorCWludAkJZmxhZzsNCisJY29u
c3QgY2hhcgkqcCwgKnE7DQorCWludAkJYzsNCisJaW50CQlmOw0KIA0KIAlm
bGFnID0gMDsNCiAJd2hpbGUgKDEpDQpAQCAtMTI5LDcgKzEzNSw3IEBADQog
CQlpZiAoZmxhZykNCiAJCQlwcmludGYoIiVzOiAiLCBzKTsNCiAJCWlmIChm
KQ0KLQkJCWNnZXRjKDApOwkJLyogdGhyb3cgb3V0IHRoZSBuZXdsaW5lICov
DQorCQkJZ2V0Y2hhcigpOwkJLyogdGhyb3cgb3V0IHRoZSBuZXdsaW5lICov
DQogCQlzY2FuZigiJSpbIFx0O10iKTsNCiAJCWlmICgoYyA9IHNjYW5mKCIl
W14gXHQ7XG5dIiwgaW5wdXQpKSA8IDApDQogCQkJZXhpdCgxKTsNCkBAIC0x
NDMsNyArMTQ5LDggQEANCiAJCQljID0gNDsNCiAJCQlmb3IgKHIgPSB0YWI7
IHItPmFicmV2OyByKyspDQogCQkJew0KLQkJCQljb25jYXQoci0+YWJyZXYs
IHItPmZ1bGwsIGlucHV0KTsNCisJCQkJc3RyY3B5KGlucHV0LCByLT5hYnJl
dik7DQorCQkJCXN0cmNhdChpbnB1dCwgci0+ZnVsbCk7DQogCQkJCXByaW50
ZigiJTE0LjE0cyIsIGlucHV0KTsNCiAJCQkJaWYgKC0tYyA+IDApDQogCQkJ
CQljb250aW51ZTsNCkBAIC0xODEsNiArMTg4LDcgQEANCiAJCWVsc2UNCiAJ
CQlyZXR1cm4gKHIpOw0KIAl9DQorCS8qIE5PVFJFQUNIRUQgKi8NCiB9DQog
DQogDQpAQCAtMTg4LDI1ICsxOTYsMjIgQEANCiAgKioJZ2V0IHN0cmluZyBw
YXJhbWV0ZXINCiAgKiovDQogDQotZ2V0c3RycGFyKHMsIHIsIGwsIHQpDQot
Y2hhcgkqczsNCi1jaGFyCSpyOw0KLWludAlsOw0KLWNoYXIJKnQ7DQordm9p
ZA0KK2dldHN0cnBhcihjb25zdCBjaGFyICpzLCBjaGFyICpyLCBpbnQgbCwg
Y29uc3QgY2hhciAqdCkNCiB7DQogCWludAlpOw0KLQljaGFyCQlmb3JtYXRb
MjBdOw0KKwljaGFyCWZvcm1hdFsyMF07DQogCWludAlmOw0KIA0KIAlpZiAo
dCA9PSAwKQ0KIAkJdCA9ICIgXHRcbjsiOw0KLQkodm9pZClzcHJpbnRmKGZv
cm1hdCwgIiUlJWRbXiVzXSIsIGwsIHQpOw0KKwlzbnByaW50Zihmb3JtYXQs
IDIwLCAiJSUlZFteJXNdIiwgbCwgdCk7DQogCXdoaWxlICgxKQ0KIAl7DQog
CQlpZiAoKGYgPSB0ZXN0bmwoKSkgJiYgcykNCiAJCQlwcmludGYoIiVzOiAi
LCBzKTsNCiAJCWlmIChmKQ0KLQkJCWNnZXRjKDApOw0KKwkJCWdldGNoYXIo
KTsNCiAJCXNjYW5mKCIlKltcdCA7XSIpOw0KIAkJaSA9IHNjYW5mKGZvcm1h
dCwgcik7DQogCQlpZiAoaSA8IDApDQpAQCAtMjE0LDYgKzIxOSw3IEBADQog
CQlpZiAoaSAhPSAwKQ0KIAkJCXJldHVybjsNCiAJfQ0KKwkvKiBOT1RSRUFD
SEVEICovDQogfQ0KIA0KIA0KQEAgLTIyMSwxMSArMjI3LDEyIEBADQogICoq
CXRlc3QgaWYgbmV3bGluZSBpcyBuZXh0IHZhbGlkIGNoYXJhY3Rlcg0KICAq
Ki8NCiANCi10ZXN0bmwoKQ0KK2ludA0KK3Rlc3RubCh2b2lkKQ0KIHsNCi0J
Y2hhcgkJYzsNCisJY2hhcgljOw0KIA0KLQl3aGlsZSAoKGMgPSBjZ2V0Yygw
KSkgIT0gJ1xuJykNCisJd2hpbGUgKChjID0gZ2V0Y2hhcigpKSAhPSAnXG4n
KQ0KIAkJaWYgKChjID49ICcwJyAmJiBjIDw9ICc5JykgfHwgYyA9PSAnLicg
fHwgYyA9PSAnIScgfHwNCiAJCQkJKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB8
fA0KIAkJCQkoYyA+PSAnYScgJiYgYyA8PSAneicpIHx8IGMgPT0gJy0nKQ0K
QEAgLTI0MiwxMSArMjQ5LDExIEBADQogICoqCXNjYW4gZm9yIG5ld2xpbmUN
CiAgKiovDQogDQotc2tpcHRvbmwoYykNCi1jaGFyCWM7DQordm9pZA0KK3Nr
aXB0b25sKGNoYXIgYykNCiB7DQogCXdoaWxlIChjICE9ICdcbicpDQotCQlp
ZiAoIShjID0gY2dldGMoMCkpKQ0KKwkJaWYgKCEoYyA9IGdldGNoYXIoKSkp
DQogCQkJcmV0dXJuOw0KIAl1bmdldGMoJ1xuJywgc3RkaW4pOw0KIAlyZXR1
cm47DQpAQCAtMjU3LDExICsyNjQsMTIgQEANCiAgKioJdGVzdCBmb3IgdmFs
aWQgdGVybWluYXRvcg0KICAqKi8NCiANCi10ZXN0dGVybSgpDQoraW50DQor
dGVzdHRlcm0odm9pZCkNCiB7DQotCWNoYXIJCWM7DQorCWNoYXIJYzsNCiAN
Ci0JaWYgKCEoYyA9IGNnZXRjKDApKSkNCisJaWYgKCEoYyA9IGdldGNoYXIo
KSkpDQogCQlyZXR1cm4gKDEpOw0KIAlpZiAoYyA9PSAnLicpDQogCQlyZXR1
cm4gKDApOw0KQEAgLTI3OSwxMiArMjg3LDEyIEBADQogKioJemVybyBpcyBy
ZXR1cm5lZC4NCiAqLw0KIA0KLXJlYWRkZWxpbShkKQ0KLWNoYXIJZDsNCitp
bnQNCityZWFkZGVsaW0oY2hhciBkKQ0KIHsNCiAJY2hhcgljOw0KIA0KLQl3
aGlsZSAoYyA9IGNnZXRjKDApKQ0KKwl3aGlsZSAoKGMgPSBnZXRjaGFyKCkp
KQ0KIAl7DQogCQlpZiAoYyA9PSBkKQ0KIAkJCXJldHVybiAoMSk7DQpJbmRl
eDogZ2V0cGFyLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxl
OiAvaG9tZS9kY3ZzL3NyYy9nYW1lcy90cmVrL2dldHBhci5oLHYNCnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xDQpkaWZmIC11IC1yMS4xIGdldHBhci5oDQot
LS0gZ2V0cGFyLmgJMTcgSnVuIDIwMDMgMDI6NDk6MzQgLTAwMDAJMS4xDQor
KysgZ2V0cGFyLmgJMzEgTWFyIDIwMDUgMjA6NTM6MTIgLTAwMDANCkBAIC0z
NSwxMSArMzUsMTkgQEANCiANCiBzdHJ1Y3QgY3ZudGFiCQkvKiB1c2VkIGZv
ciBnZXRjb2RwYXIoKSBwYXJhbWF0ZXIgbGlzdCAqLw0KIHsNCi0JY2hhcgkq
YWJyZXY7DQotCWNoYXIJKmZ1bGw7DQotCWludAkoKnZhbHVlKSgpOw0KKwlj
b25zdCBjaGFyICphYnJldjsNCisJY29uc3QgY2hhciAqZnVsbDsNCisJdm9p
ZAkoKnZhbHVlKShpbnQpOw0KIAlpbnQJdmFsdWUyOw0KIH07DQogDQotZXh0
ZXJuIGRvdWJsZQkJZ2V0Zmx0cGFyKCk7DQotZXh0ZXJuIHN0cnVjdCBjdm50
YWIJKmdldGNvZHBhcigpOw0KK2RvdWJsZQlnZXRmbHRwYXIoY29uc3QgY2hh
ciAqKTsNCitzdHJ1Y3QgY3ZudGFiICpnZXRjb2RwYXIoY29uc3QgY2hhciAq
LCBzdHJ1Y3QgY3ZudGFiICopOw0KK2ludAlnZXRpbnRwYXIoY29uc3QgY2hh
ciAqKTsNCit2b2lkCWdldHN0cnBhcihjb25zdCBjaGFyICosIGNoYXIgKiwg
aW50LCBjb25zdCBjaGFyICopOw0KK2xvbmcJZ2V0eW5wYXIoY29uc3QgY2hh
ciAqKTsNCitpbnQJcmVhZGRlbGltKGNoYXIpOw0KK3ZvaWQJc2tpcHRvbmwo
Y2hhcik7DQoraW50CXRlc3RubCh2b2lkKTsNCisNCitpbnQJZ2V0Y29kaShp
bnQgKiwgZG91YmxlICopOw0KSW5kZXg6IGhlbHAuYw0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lL2RjdnMvc3JjL2dhbWVzL3Ry
ZWsvaGVscC5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4yDQpkaWZmIC11
IC1yMS4yIGhlbHAuYw0KLS0tIGhlbHAuYwkxNyBKdW4gMjAwMyAwNDoyNToy
NSAtMDAwMAkxLjINCisrKyBoZWxwLmMJMjggTWFyIDIwMDUgMTU6MDA6MDkg
LTAwMDANCkBAIC0zNSw3ICszNSw5IEBADQogICogJERyYWdvbkZseTogc3Jj
L2dhbWVzL3RyZWsvaGVscC5jLHYgMS4yIDIwMDMvMDYvMTcgMDQ6MjU6MjUg
ZGlsbG9uIEV4cCAkDQogICovDQogDQotIyBpbmNsdWRlCSJ0cmVrLmgiDQor
I2luY2x1ZGUgPHVuaXN0ZC5oPg0KKyNpbmNsdWRlIDxtYXRoLmg+DQorI2lu
Y2x1ZGUgInRyZWsuaCINCiANCiAvKg0KICoqICBjYWxsIHN0YXJiYXNlIGZv
ciBoZWxwDQpAQCAtNTcsMTAgKzU5LDExIEBADQogKioJdG8gZHJvcCB5b3Uu
ICBBZnRlciB0aGF0LCBpdCdzIHlvdXIgcHJvYmxlbS4NCiAqLw0KIA0KLWNo
YXIJKkNudHZlY3RbM10gPQ0KK2NvbnN0IGNoYXIJKkNudHZlY3RbM10gPQ0K
IHsiZmlyc3QiLCAic2Vjb25kIiwgInRoaXJkIn07DQogDQotaGVscCgpDQor
dm9pZA0KK2hlbHAodm9pZCkNCiB7DQogCWludAkJaTsNCiAJZG91YmxlCQkJ
ZGlzdCwgeDsNCkBAIC02OSwxOSArNzIsMjkgQEANCiANCiAJLyogY2hlY2sg
dG8gc2VlIGlmIGNhbGxpbmcgZm9yIGhlbHAgaXMgcmVhc29uYWJsZSAuLi4g
Ki8NCiAJaWYgKFNoaXAuY29uZCA9PSBET0NLRUQpDQotCQlyZXR1cm4gKHBy
aW50ZigiVWh1cmE6IEJ1dCBDYXB0YWluLCB3ZSdyZSBhbHJlYWR5IGRvY2tl
ZFxuIikpOw0KKwl7DQorCQlwcmludGYoIlVodXJhOiBCdXQgQ2FwdGFpbiwg
d2UncmUgYWxyZWFkeSBkb2NrZWRcbiIpOw0KKwkJcmV0dXJuOw0KKwl9DQog
DQogCS8qIG9yIHBvc3NpYmxlICovDQogCWlmIChkYW1hZ2VkKFNTUkFESU8p
KQ0KLQkJcmV0dXJuIChvdXQoU1NSQURJTykpOw0KKwl7DQorCQlvdXQoU1NS
QURJTyk7DQorCQlyZXR1cm47DQorCX0NCiAJaWYgKE5vdy5iYXNlcyA8PSAw
KQ0KLQkJcmV0dXJuIChwcmludGYoIlVodXJhOiBJJ20gbm90IGdldHRpbmcg
YW55IHJlc3BvbnNlIGZyb20gc3RhcmJhc2VcbiIpKTsNCisJew0KKwkJcHJp
bnRmKCJVaHVyYTogSSdtIG5vdCBnZXR0aW5nIGFueSByZXNwb25zZSBmcm9t
IHN0YXJiYXNlXG4iKTsNCisJCXJldHVybjsNCisJfQ0KIA0KIAkvKiB0dXQg
dHV0LCB0aGVyZSBnb2VzIHRoZSBzY29yZSAqLw0KIAlHYW1lLmhlbHBzICs9
IDE7DQogDQogCS8qIGZpbmQgdGhlIGNsb3Nlc3QgYmFzZSAqLw0KIAlkaXN0
ID0gMWU1MDsNCisJbCA9IDA7DQogCWlmIChRdWFkW1NoaXAucXVhZHhdW1No
aXAucXVhZHldLmJhc2VzIDw9IDApDQogCXsNCiAJCS8qIHRoZXJlIGlzbid0
IG9uZSBpbiB0aGlzIHF1YWRyYW50ICovDQpJbmRleDogaW1wdWxzZS5jDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hvbWUvZGN2cy9z
cmMvZ2FtZXMvdHJlay9pbXB1bHNlLmMsdg0KcmV0cmlldmluZyByZXZpc2lv
biAxLjINCmRpZmYgLXUgLXIxLjIgaW1wdWxzZS5jDQotLS0gaW1wdWxzZS5j
CTE3IEp1biAyMDAzIDA0OjI1OjI1IC0wMDAwCTEuMg0KKysrIGltcHVsc2Uu
YwkyOCBNYXIgMjAwNSAxNTowMDo0MSAtMDAwMA0KQEAgLTM1LDI0ICszNSwz
MSBAQA0KICAqICREcmFnb25GbHk6IHNyYy9nYW1lcy90cmVrL2ltcHVsc2Uu
Yyx2IDEuMiAyMDAzLzA2LzE3IDA0OjI1OjI1IGRpbGxvbiBFeHAgJA0KICAq
Lw0KIA0KLSMgaW5jbHVkZQkidHJlay5oIg0KKyNpbmNsdWRlICJ0cmVrLmgi
DQorI2luY2x1ZGUgImdldHBhci5oIg0KIA0KIC8qKg0KICAqKgltb3ZlIHVu
ZGVyIGltcHVsc2UgcG93ZXINCiAgKiovDQogDQotaW1wdWxzZSgpDQordm9p
ZA0KK2ltcHVsc2Uodm9pZCkNCiB7DQogCWludAkJCWNvdXJzZTsNCiAJaW50
CQlwb3dlcjsNCiAJZG91YmxlCQkJZGlzdCwgdGltZTsNCiAJaW50CQlwZXJj
ZW50Ow0KLQlleHRlcm4gZG91YmxlCQltb3ZlKCk7DQogDQogCWlmIChTaGlw
LmNvbmQgPT0gRE9DS0VEKQ0KLQkJcmV0dXJuIChwcmludGYoIlNjb3R0eTog
U29ycnkgY2FwdGFpbiwgYnV0IHdlIGFyZSBzdGlsbCBkb2NrZWQuXG4iKSk7
DQorCXsNCisJCXByaW50ZigiU2NvdHR5OiBTb3JyeSBjYXB0YWluLCBidXQg
d2UgYXJlIHN0aWxsIGRvY2tlZC5cbiIpOw0KKwkJcmV0dXJuOw0KKwl9DQog
CWlmIChkYW1hZ2VkKElNUFVMU0UpKQ0KLQkJcmV0dXJuIChvdXQoSU1QVUxT
RSkpOw0KKwl7DQorCQlvdXQoSU1QVUxTRSk7DQorCQlyZXR1cm47DQorCX0N
CiAJaWYgKGdldGNvZGkoJmNvdXJzZSwgJmRpc3QpKQ0KIAkJcmV0dXJuOw0K
IAlwb3dlciA9IDIwICsgMTAwICogZGlzdDsNCkluZGV4OiBpbml0cXVhZC5j
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hvbWUvZGN2
cy9zcmMvZ2FtZXMvdHJlay9pbml0cXVhZC5jLHYNCnJldHJpZXZpbmcgcmV2
aXNpb24gMS4yDQpkaWZmIC11IC1yMS4yIGluaXRxdWFkLmMNCi0tLSBpbml0
cXVhZC5jCTE3IEp1biAyMDAzIDA0OjI1OjI1IC0wMDAwCTEuMg0KKysrIGlu
aXRxdWFkLmMJMjUgTWFyIDIwMDUgMTY6MzY6MDcgLTAwMDANCkBAIC0zNSw3
ICszNSw3IEBADQogICogJERyYWdvbkZseTogc3JjL2dhbWVzL3RyZWsvaW5p
dHF1YWQuYyx2IDEuMiAyMDAzLzA2LzE3IDA0OjI1OjI1IGRpbGxvbiBFeHAg
JA0KICAqLw0KIA0KLSMgaW5jbHVkZQkidHJlay5oIg0KKyNpbmNsdWRlICJ0
cmVrLmgiDQogDQogLyoNCiAqKiAgUGFyYW1pemUgUXVhZHJhbnQgVXBvbiBF
bnRlcmluZw0KQEAgLTU0LDggKzU0LDggQEANCiAqKgl0byBiZSBkb2NrZWQs
IGkuZS4sIGFiYW5kb24oKSBhbmQgaGVscCgpLg0KICovDQogDQotaW5pdHF1
YWQoZikNCi1pbnQJZjsNCit2b2lkDQoraW5pdHF1YWQoaW50IGYpDQogew0K
IAlpbnQJCWksIGo7DQogCWludAkJCXJ4LCByeTsNCkBAIC0xMzYsOCArMTM2
LDggQEANCiB9DQogDQogDQotc2VjdG9yKHgsIHkpDQotaW50CSp4LCAqeTsN
Cit2b2lkDQorc2VjdG9yKGludCAqeCwgaW50ICp5KQ0KIHsNCiAJaW50CQlp
LCBqOw0KIA0KSW5kZXg6IGtpbGwuYw0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KUkNTIGZpbGU6IC9ob21lL2RjdnMvc3JjL2dhbWVzL3RyZWsva2lsbC5j
LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4yDQpkaWZmIC11IC1yMS4yIGtp
bGwuYw0KLS0tIGtpbGwuYwkxNyBKdW4gMjAwMyAwNDoyNToyNSAtMDAwMAkx
LjINCisrKyBraWxsLmMJMzEgTWFyIDIwMDUgMjA6NTE6MTAgLTAwMDANCkBA
IC0zNSw3ICszNSw4IEBADQogICogJERyYWdvbkZseTogc3JjL2dhbWVzL3Ry
ZWsva2lsbC5jLHYgMS4yIDIwMDMvMDYvMTcgMDQ6MjU6MjUgZGlsbG9uIEV4
cCAkDQogICovDQogDQotIyBpbmNsdWRlCSJ0cmVrLmgiDQorI2luY2x1ZGUg
PHN0cmluZy5oPg0KKyNpbmNsdWRlICJ0cmVrLmgiDQogDQogLyoNCiAqKiAg
S0lMTCBLSUxMIEtJTEwgISEhDQpAQCAtNTMsMTAgKzU0LDEwIEBADQogKioJ
YW5kIHRoZSBnYW1lIGlzIHdvbiBpZiB0aGF0IHdhcyB0aGUgbGFzdCBrbGlu
Z29uLg0KICovDQogDQota2lsbGsoaXgsIGl5KQ0KLWludAlpeCwgaXk7DQor
dm9pZA0KK2tpbGxrKGludCBpeCwgaW50IGl5KQ0KIHsNCi0JaW50CQlpLCBq
Ow0KKwlpbnQJCWk7DQogDQogCXByaW50ZigiICAgKioqIEtsaW5nb24gYXQg
JWQsJWQgZGVzdHJveWVkICoqKlxuIiwgaXgsIGl5KTsNCiANCkBAIC03NSw3
ICs3Niw3IEBADQogCQkJLyogcHVyZ2UgaGltIGZyb20gdGhlIGxpc3QgKi8N
CiAJCQlFdGMubmtsaW5nIC09IDE7DQogCQkJZm9yICg7IGkgPCBFdGMubmts
aW5nOyBpKyspDQotCQkJCWJtb3ZlKCZFdGMua2xpbmdvbltpKzFdLCAmRXRj
LmtsaW5nb25baV0sIHNpemVvZiBFdGMua2xpbmdvbltpXSk7DQorCQkJCW1l
bW1vdmUoJkV0Yy5rbGluZ29uW2ldLCAmRXRjLmtsaW5nb25baSsxXSwgc2l6
ZW9mIEV0Yy5rbGluZ29uW2ldKTsNCiAJCQlicmVhazsNCiAJCX0NCiANCkBA
IC04NSw3ICs4Niw2IEBADQogDQogCS8qIHJlY29tcHV0ZSB0aW1lIGxlZnQg
Ki8NCiAJTm93LnRpbWUgPSBOb3cucmVzb3VyY2UgLyBOb3cua2xpbmdzOw0K
LQlyZXR1cm47DQogfQ0KIA0KIA0KQEAgLTkzLDggKzkzLDggQEANCiAqKiAg
aGFuZGxlIGEgc3RhcmJhc2UncyBkZWF0aA0KICovDQogDQota2lsbGIocXgs
IHF5KQ0KLWludAlxeCwgcXk7DQordm9pZA0KK2tpbGxiKGludCBxeCwgaW50
IHF5KQ0KIHsNCiAJc3RydWN0IHF1YWQJKnE7DQogCXN0cnVjdCB4eQkqYjsN
CkBAIC0xMDQsMTggKzEwNCwyMCBAQA0KIAlpZiAocS0+YmFzZXMgPD0gMCkN
CiAJCXJldHVybjsNCiAJaWYgKCFkYW1hZ2VkKFNTUkFESU8pKQ0KKwl7DQog
CQkvKiB0aGVuIHVwZGF0ZSBzdGFyY2hhcnQgKi8NCiAJCWlmIChxLT5zY2Fu
bmVkIDwgMTAwMCkNCiAJCQlxLT5zY2FubmVkIC09IDEwOw0KIAkJZWxzZQ0K
IAkJCWlmIChxLT5zY2FubmVkID4gMTAwMCkNCiAJCQkJcS0+c2Nhbm5lZCA9
IC0xOw0KKwl9DQogCXEtPmJhc2VzID0gMDsNCiAJTm93LmJhc2VzIC09IDE7
DQogCWZvciAoYiA9IE5vdy5iYXNlOyA7IGIrKykNCiAJCWlmIChxeCA9PSBi
LT54ICYmIHF5ID09IGItPnkpDQogCQkJYnJlYWs7DQotCWJtb3ZlKCZOb3cu
YmFzZVtOb3cuYmFzZXNdLCBiLCBzaXplb2YgKmIpOw0KKwltZW1tb3ZlKGIs
ICZOb3cuYmFzZVtOb3cuYmFzZXNdLCBzaXplb2YgKmIpOw0KIAlpZiAocXgg
PT0gU2hpcC5xdWFkeCAmJiBxeSA9PSBTaGlwLnF1YWR5KQ0KIAl7DQogCQlT
ZWN0W0V0Yy5zdGFyYmFzZS54XVtFdGMuc3RhcmJhc2UueV0gPSBFTVBUWTsN
CkBAIC0xNDAsMTQgKzE0MiwxMiBAQA0KICAqKglraWxsIGFuIGluaGFiaXRl
ZCBzdGFyc3lzdGVtDQogICoqLw0KIA0KLWtpbGxzKHgsIHksIGYpDQotaW50
CXgsIHk7CS8qIHF1YWQgY29vcmRzIGlmIGYgPT0gMCwgZWxzZSBzZWN0b3Ig
Y29vcmRzICovDQotaW50CWY7CS8qIGYgIT0gMCAtLSB0aGlzIHF1YWQ7ICBm
IDwgMCAtLSBFbnRlcnByaXNlJ3MgZmF1bHQgKi8NCit2b2lkDQora2lsbHMo
aW50IHgsIGludCB5LCBpbnQgZikNCiB7DQogCXN0cnVjdCBxdWFkCSpxOw0K
IAlzdHJ1Y3QgZXZlbnQJKmU7DQotCWNoYXIJCSpuYW1lOw0KLQljaGFyCQkJ
KnN5c3RlbW5hbWUoKTsNCisJY29uc3QgY2hhcgkqbmFtZTsNCiANCiAJaWYg
KGYpDQogCXsNCkBAIC0xODQsOSArMTg0LDggQEANCiAgKioJImtpbGwiIGEg
ZGlzdHJlc3MgY2FsbA0KICAqKi8NCiANCi1raWxsZCh4LCB5LCBmKQ0KLWlu
dAl4LCB5OwkJLyogcXVhZHJhbnQgY29vcmRpbmF0ZXMgKi8NCi1pbnQJZjsJ
CS8qIHNldCBpZiB1c2VyIGlzIHRvIGJlIGluZm9ybWVkICovDQordm9pZA0K
K2tpbGxkKGludCB4LCBpbnQgeSwgaW50IGYpDQogew0KIAlzdHJ1Y3QgZXZl
bnQJKmU7DQogCWludAkJaTsNCkluZGV4OiBrbG1vdmUuYw0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lL2RjdnMvc3JjL2dhbWVz
L3RyZWsva2xtb3ZlLmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjINCmRp
ZmYgLXUgLXIxLjIga2xtb3ZlLmMNCi0tLSBrbG1vdmUuYwkxNyBKdW4gMjAw
MyAwNDoyNToyNSAtMDAwMAkxLjINCisrKyBrbG1vdmUuYwkzMSBNYXIgMjAw
NSAyMDozNDozNyAtMDAwMA0KQEAgLTM1LDcgKzM1LDggQEANCiAgKiAkRHJh
Z29uRmx5OiBzcmMvZ2FtZXMvdHJlay9rbG1vdmUuYyx2IDEuMiAyMDAzLzA2
LzE3IDA0OjI1OjI1IGRpbGxvbiBFeHAgJA0KICAqLw0KIA0KLSMgaW5jbHVk
ZQkidHJlay5oIg0KKyNpbmNsdWRlIDxzdHJpbmcuaD4NCisjaW5jbHVkZSAi
dHJlay5oIg0KIA0KIC8qDQogKiogIE1vdmUgS2xpbmdvbnMgQXJvdW5kDQpA
QCAtNjAsOCArNjEsOCBAQA0KICoqCWNvdXJzZSBhcm91bmQgc3RhcnMuDQog
Ki8NCiANCi1rbG1vdmUoZmwpDQotaW50CWZsOw0KK3ZvaWQNCitrbG1vdmUo
aW50IGZsKQ0KIHsNCiAJaW50CQkJbjsNCiAJc3RydWN0IGtsaW5nCSprOw0K
QEAgLTc0LDEwICs3NSwxMCBAQA0KIAlkb3VibGUJCQliaWdnZXI7DQogCWlu
dAkJCWk7DQogDQotIwlpZmRlZiB4VFJBQ0UNCisjaWZkZWYgeFRSQUNFDQog
CWlmIChUcmFjZSkNCiAJCXByaW50Zigia2xtb3ZlOiBmbCA9ICVkLCBFdGMu
bmtsaW5nID0gJWRcbiIsIGZsLCBFdGMubmtsaW5nKTsNCi0jCWVuZGlmDQor
I2VuZGlmDQogCWZvciAobiA9IDA7IG4gPCBFdGMubmtsaW5nOyBrICYmIG4r
KykNCiAJew0KIAkJayA9ICZFdGMua2xpbmdvbltuXTsNCkBAIC0xNDUsNyAr
MTQ2LDcgQEANCiAJCQkJU2VjdFtrLT54XVtrLT55XSA9IEVNUFRZOw0KIAkJ
CQlRdWFkW3F4XVtxeV0ua2xpbmdzICs9IDE7DQogCQkJCUV0Yy5ua2xpbmcg
LT0gMTsNCi0JCQkJYm1vdmUoJkV0Yy5rbGluZ29uW0V0Yy5ua2xpbmddLCBr
LCBzaXplb2YgKmspOw0KKwkJCQltZW1tb3ZlKGssICZFdGMua2xpbmdvbltF
dGMubmtsaW5nXSwgc2l6ZW9mICprKTsNCiAJCQkJUXVhZFtTaGlwLnF1YWR4
XVtTaGlwLnF1YWR5XS5rbGluZ3MgLT0gMTsNCiAJCQkJayA9IDA7DQogCQkJ
CWJyZWFrOw0KSW5kZXg6IGxvc2UuYw0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KUkNTIGZpbGU6IC9ob21lL2RjdnMvc3JjL2dhbWVzL3RyZWsvbG9zZS5j
LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4yDQpkaWZmIC11IC1yMS4yIGxv
c2UuYw0KLS0tIGxvc2UuYwkxNyBKdW4gMjAwMyAwNDoyNToyNSAtMDAwMAkx
LjINCisrKyBsb3NlLmMJMjYgTWFyIDIwMDUgMTk6MDA6MDggLTAwMDANCkBA
IC0zNSw4ICszNSw5IEBADQogICogJERyYWdvbkZseTogc3JjL2dhbWVzL3Ry
ZWsvbG9zZS5jLHYgMS4yIDIwMDMvMDYvMTcgMDQ6MjU6MjUgZGlsbG9uIEV4
cCAkDQogICovDQogDQotIyBpbmNsdWRlCSJ0cmVrLmgiDQotIyBpbmNsdWRl
CTxzZXRqbXAuaD4NCisjaW5jbHVkZSA8dW5pc3RkLmg+DQorI2luY2x1ZGUg
InRyZWsuaCINCisjaW5jbHVkZSAiZ2V0cGFyLmgiDQogDQogLyoNCiAqKiAg
UFJJTlQgT1VUIExPU0VSIE1FU1NBR0VTDQpAQCAtNDYsNyArNDcsNyBAQA0K
ICoqCWFjdGlvbnMgd2hpY2ggbmVlZCBiZSB0YWtlbiBhcmUgdGFrZW4uDQog
Ki8NCiANCi1jaGFyCSpMb3NlbXNnW10gPQ0KK2NvbnN0IGNoYXIgKkxvc2Vt
c2dbXSA9DQogew0KIAkiWW91IHJhbiBvdXQgb2YgdGltZSIsDQogCSJZb3Ug
cmFuIG91dCBvZiBlbmVyZ3kiLA0KQEAgLTYzLDExICs2NCw5IEBADQogCSJZ
b3VyIGxhc3QgY3JldyBtZW1iZXIgZGllZCIsDQogfTsNCiANCi1sb3NlKHdo
eSkNCi1pbnQJd2h5Ow0KK3ZvaWQNCitsb3NlKGludCB3aHkpDQogew0KLQll
eHRlcm4gam1wX2J1ZgllbnY7DQotDQogCUdhbWUua2lsbGVkID0gMTsNCiAJ
c2xlZXAoMSk7DQogCXByaW50ZigiXG4lc1xuIiwgTG9zZW1zZ1t3aHkgLSAx
XSk7DQpJbmRleDogbHJzY2FuLmMNCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
ClJDUyBmaWxlOiAvaG9tZS9kY3ZzL3NyYy9nYW1lcy90cmVrL2xyc2Nhbi5j
LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4yDQpkaWZmIC11IC1yMS4yIGxy
c2Nhbi5jDQotLS0gbHJzY2FuLmMJMTcgSnVuIDIwMDMgMDQ6MjU6MjUgLTAw
MDAJMS4yDQorKysgbHJzY2FuLmMJMjUgTWFyIDIwMDUgMTY6NDE6NTQgLTAw
MDANCkBAIC0zNSw3ICszNSw3IEBADQogICogJERyYWdvbkZseTogc3JjL2dh
bWVzL3RyZWsvbHJzY2FuLmMsdiAxLjIgMjAwMy8wNi8xNyAwNDoyNToyNSBk
aWxsb24gRXhwICQNCiAgKi8NCiANCi0jIGluY2x1ZGUJInRyZWsuaCINCisj
aW5jbHVkZSAidHJlay5oIg0KIA0KIC8qDQogKiogIExPTkcgUkFOR0UgT0Yg
U0NBTk5FUlMNCkBAIC00OSw3ICs0OSw4IEBADQogKioJZm9yIGZ1dHVyZSB1
c2UgYnkgdGhlICJjaGFydCIgb3B0aW9uIG9mIHRoZSBjb21wdXRlci4NCiAq
Lw0KIA0KLWxyc2NhbigpDQordm9pZA0KK2xyc2Nhbih2b2lkKQ0KIHsNCiAJ
aW50CQkJaSwgajsNCiAJc3RydWN0IHF1YWQJCSpxOw0KQEAgLTEwMyw1ICsx
MDQsNCBAQA0KIAkJfQ0KIAl9DQogCXByaW50ZigiXG4gIC0tLS0tLS0tLS0t
LS0tLS0tLS1cbiIpOw0KLQlyZXR1cm47DQogfQ0KSW5kZXg6IG1haW4uYw0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lL2RjdnMv
c3JjL2dhbWVzL3RyZWsvbWFpbi5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24g
MS4yDQpkaWZmIC11IC1yMS4yIG1haW4uYw0KLS0tIG1haW4uYwkxNyBKdW4g
MjAwMyAwNDoyNToyNSAtMDAwMAkxLjINCisrKyBtYWluLmMJMjggTWFyIDIw
MDUgMTQ6NDk6MTUgLTAwMDANCkBAIC0zNiwxNSArMzYsMTggQEANCiAgKiAk
RHJhZ29uRmx5OiBzcmMvZ2FtZXMvdHJlay9tYWluLmMsdiAxLjIgMjAwMy8w
Ni8xNyAwNDoyNToyNSBkaWxsb24gRXhwICQNCiAgKi8NCiANCi0jIGluY2x1
ZGUJInRyZWsuaCINCi0jIGluY2x1ZGUJPHN0ZGlvLmg+DQotIyBpbmNsdWRl
CTxzZ3R0eS5oPg0KLSMgaW5jbHVkZQk8c2V0am1wLmg+DQotIyBpbmNsdWRl
ICAgICAgIDxzdGRsaWIuaD4NCisjZGVmaW5lIFVTRV9PTERfVFRZDQogDQot
IyBkZWZpbmUJUFJJTwkJMDAJLyogZGVmYXVsdCBwcmlvcml0eSAqLw0KKyNp
bmNsdWRlIDxzeXMvaW9jdGwuaD4NCisjaW5jbHVkZSA8c3RkbGliLmg+DQor
I2luY2x1ZGUgPHVuaXN0ZC5oPg0KKyNpbmNsdWRlICJ0cmVrLmgiDQorI2lu
Y2x1ZGUgImdldHBhci5oIg0KIA0KLWludAlNb3RoZXIJPSA1MSArICg1MSA8
PCA4KTsNCisNCisjZGVmaW5lCVBSSU8JCTAwCS8qIGRlZmF1bHQgcHJpb3Jp
dHkgKi8NCisNCit1bnNpZ25lZCBpbnQJTW90aGVyCT0gNTEgKyAoNTEgPDwg
OCk7DQogDQogLyoNCiAqKgkgIyMjIyAgIyMjIyMgICAgIyAgICAjIyMjICAg
ICAgICAgICMjIyMjICAjIyMjICAgIyMjIyMgICMgICAjDQpAQCAtMTQ1LDkg
KzE0OCw4IEBADQogDQogam1wX2J1ZiBlbnY7DQogDQotbWFpbihhcmdjLCBh
cmd2KQ0KLWludAlhcmdjOw0KLWNoYXIJKiphcmd2Ow0KK2ludA0KK21haW4o
aW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIHsNCiAJLyogZXh0ZXJuIEZJTEUJ
CSpmX2xvZzsgKi8NCiAJY2hhcgkJb3BlbmNvZGU7DQpAQCAtMTY1LDcgKzE2
Nyw3IEBADQogCXNyYW5kb21kZXYoKTsNCiAJb3BlbmNvZGUgPSAndyc7DQog
CXByaW8gPSBQUklPOw0KLQlpZiAoZ3R0eSgxLCAmYXJncCkgPT0gMCkNCisJ
aWYgKGlvY3RsKDEsIFRJT0NHRVRQLCAmYXJncCkgIT0gLTEpDQogCXsNCiAJ
CWlmICgoYXJncC5zZ19pc3BlZWQgKSA8IEIxMjAwKQ0KIAkJCUV0Yy5mYXN0
Kys7DQpAQCAtMTg2LDEzICsxODgsMTMgQEANCiAJCQlFdGMuZmFzdCA9IDA7
DQogCQkJYnJlYWs7DQogDQotIwkJaWZkZWYgeFRSQUNFDQorI2lmZGVmIHhU
UkFDRQ0KIAkJICBjYXNlICd0JzoJLyogdHJhY2UgKi8NCiAJCQlpZiAoZ2V0
dWlkKCkgIT0gTW90aGVyKQ0KIAkJCQlnb3RvIGJhZGZsYWc7DQogCQkJVHJh
Y2UrKzsNCiAJCQlicmVhazsNCi0jCQllbmRpZg0KKyNlbmRpZg0KIA0KIAkJ
ICBjYXNlICdwJzoJLyogc2V0IHByaW9yaXR5ICovDQogCQkJaWYgKGdldHVp
ZCgpICE9IE1vdGhlcikNCkBAIC0yMjksNCArMjMxLDUgQEANCiAJfSB3aGls
ZSAoZ2V0eW5wYXIoIkFub3RoZXIgZ2FtZSIpKTsNCiANCiAJZmZsdXNoKHN0
ZG91dCk7DQorCXJldHVybigwKTsNCiB9DQpJbmRleDogbW92ZS5jDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hvbWUvZGN2cy9zcmMv
Z2FtZXMvdHJlay9tb3ZlLmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjIN
CmRpZmYgLXUgLXIxLjIgbW92ZS5jDQotLS0gbW92ZS5jCTE3IEp1biAyMDAz
IDA0OjI1OjI1IC0wMDAwCTEuMg0KKysrIG1vdmUuYwkzMSBNYXIgMjAwNSAy
MDo1MjowMSAtMDAwMA0KQEAgLTM1LDcgKzM1LDggQEANCiAgKiAkRHJhZ29u
Rmx5OiBzcmMvZ2FtZXMvdHJlay9tb3ZlLmMsdiAxLjIgMjAwMy8wNi8xNyAw
NDoyNToyNSBkaWxsb24gRXhwICQNCiAgKi8NCiANCi0jIGluY2x1ZGUJInRy
ZWsuaCINCisjaW5jbHVkZSA8bWF0aC5oPg0KKyNpbmNsdWRlICJ0cmVrLmgi
DQogDQogLyoNCiAqKiAgTW92ZSBVbmRlciBXYXJwIG9yIEltcHVsc2UgUG93
ZXINCkBAIC03MiwxMSArNzMsOCBAQA0KICoqCVVzZXMgdHJhY2UgZmxhZyA0
Lg0KICovDQogDQotZG91YmxlIG1vdmUocmFtZmxhZywgY291cnNlLCB0aW1l
LCBzcGVlZCkNCi1pbnQJcmFtZmxhZzsNCi1pbnQJY291cnNlOw0KLWRvdWJs
ZQl0aW1lOw0KLWRvdWJsZQlzcGVlZDsNCitkb3VibGUgDQorbW92ZShpbnQg
cmFtZmxhZywgaW50IGNvdXJzZSwgZG91YmxlIHRpbWUsIGRvdWJsZSBzcGVl
ZCkNCiB7DQogCWRvdWJsZQkJCWFuZ2xlOw0KIAlkb3VibGUJCQl4LCB5LCBk
eCwgZHk7DQpAQCAtODksMTEgKzg3LDExIEBADQogCWRvdWJsZQkJCXhuOw0K
IAlkb3VibGUJCQlldnRpbWU7DQogDQotIwlpZmRlZiB4VFJBQ0UNCisjaWZk
ZWYgeFRSQUNFDQogCWlmIChUcmFjZSkNCiAJCXByaW50ZigibW92ZTogcmFt
ZmxhZyAlZCBjb3Vyc2UgJWQgdGltZSAlLjJmIHNwZWVkICUuMmZcbiIsDQog
CQkJcmFtZmxhZywgY291cnNlLCB0aW1lLCBzcGVlZCk7DQotIwllbmRpZg0K
KyNlbmRpZg0KIAlzZWN0c2l6ZSA9IE5TRUNUUzsNCiAJLyogaW5pdGlhbGl6
ZSBkZWx0YSBmYWN0b3JzIGZvciBtb3ZlICovDQogCWFuZ2xlID0gY291cnNl
ICogMC4wMTc0NTMyOTI1Ow0KQEAgLTExNCwxMyArMTEyLDEzIEBADQogCS8q
IGNoZWNrIGZvciBsb25nIHJhbmdlIHRyYWN0b3IgYmVhbXMgKi8NCiAJLyoq
KiogIFRFTVBPUkFSWSBDT0RFID09IERFQlVHR0lORyAgKioqKi8NCiAJZXZ0
aW1lID0gTm93LmV2ZW50cHRyW0VfTFJUQl0tPmRhdGUgLSBOb3cuZGF0ZTsN
Ci0jCWlmZGVmIHhUUkFDRQ0KKyNpZmRlZiB4VFJBQ0UNCiAJaWYgKFRyYWNl
KQ0KIAkJcHJpbnRmKCJFLmVwID0gJXAsIC0+ZXZjb2RlID0gJWQsIC0+ZGF0
ZSA9ICUuMmYsIGV2dGltZSA9ICUuMmZcbiIsDQogCQkJKHZvaWQgKilOb3cu
ZXZlbnRwdHJbRV9MUlRCXSwNCiAJCQlOb3cuZXZlbnRwdHJbRV9MUlRCXS0+
ZXZjb2RlLA0KIAkJCU5vdy5ldmVudHB0cltFX0xSVEJdLT5kYXRlLCBldnRp
bWUpOw0KLSMJZW5kaWYNCisjZW5kaWYNCiAJaWYgKHRpbWUgPiBldnRpbWUg
JiYgRXRjLm5rbGluZyA8IDMpDQogCXsNCiAJCS8qIHRoZW4gd2UgZ290IGEg
TFJUQiAqLw0KQEAgLTEzNywyMCArMTM1LDIxIEBADQogCXkgPSBTaGlwLnNl
Y3R5ICsgMC41Ow0KIAl4biA9IE5TRUNUUyAqIGRpc3QgKiBiaWdnZXI7DQog
CW4gPSB4biArIDAuNTsNCi0jCWlmZGVmIHhUUkFDRQ0KKyNpZmRlZiB4VFJB
Q0UNCiAJaWYgKFRyYWNlKQ0KIAkJcHJpbnRmKCJkeCA9ICUuMmYsIGR5ID0g
JS4yZiwgeG4gPSAlLjJmLCBuID0gJWRcbiIsIGR4LCBkeSwgeG4sIG4pOw0K
LSMJZW5kaWYNCisjZW5kaWYNCiAJTW92ZS5mcmVlID0gMDsNCiANCisJaXgg
PSBpeSA9IDA7DQogCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspDQogCXsNCiAJ
CWl4ID0gKHggKz0gZHgpOw0KIAkJaXkgPSAoeSArPSBkeSk7DQotIwkJaWZk
ZWYgeFRSQUNFDQorI2lmZGVmIHhUUkFDRQ0KIAkJaWYgKFRyYWNlKQ0KIAkJ
CXByaW50ZigiaXggPSAlZCwgeCA9ICUuMmYsIGl5ID0gJWQsIHkgPSAlLjJm
XG4iLCBpeCwgeCwgaXksIHkpOw0KLSMJCWVuZGlmDQorI2VuZGlmDQogCQlp
ZiAoeCA8IDAuMCB8fCB5IDwgMC4wIHx8IHggPj0gc2VjdHNpemUgfHwgeSA+
PSBzZWN0c2l6ZSkNCiAJCXsNCiAJCQkvKiBlbnRlciBuZXcgcXVhZHJhbnQg
Ki8NCkBAIC0xNjQsMTAgKzE2MywxMCBAQA0KIAkJCQlpeSA9IC0xOw0KIAkJ
CWVsc2UNCiAJCQkJaXkgPSBkeSArIDAuNTsNCi0jCQkJaWZkZWYgeFRSQUNF
DQorI2lmZGVmIHhUUkFDRQ0KIAkJCWlmIChUcmFjZSkNCiAJCQkJcHJpbnRm
KCJOZXcgcXVhZDogaXggPSAlZCwgaXkgPSAlZFxuIiwgaXgsIGl5KTsNCi0j
CQkJZW5kaWYNCisjZW5kaWYNCiAJCQlTaGlwLnNlY3R4ID0geDsNCiAJCQlT
aGlwLnNlY3R5ID0geTsNCiAJCQljb21wa2xkaXN0KDApOw0KSW5kZXg6IG5v
dmEuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21l
L2RjdnMvc3JjL2dhbWVzL3RyZWsvbm92YS5jLHYNCnJldHJpZXZpbmcgcmV2
aXNpb24gMS4yDQpkaWZmIC11IC1yMS4yIG5vdmEuYw0KLS0tIG5vdmEuYwkx
NyBKdW4gMjAwMyAwNDoyNToyNSAtMDAwMAkxLjINCisrKyBub3ZhLmMJMjgg
TWFyIDIwMDUgMTQ6NDU6MzIgLTAwMDANCkBAIC0zNSw3ICszNSw3IEBADQog
ICogJERyYWdvbkZseTogc3JjL2dhbWVzL3RyZWsvbm92YS5jLHYgMS4yIDIw
MDMvMDYvMTcgMDQ6MjU6MjUgZGlsbG9uIEV4cCAkDQogICovDQogDQotIyBp
bmNsdWRlCSJ0cmVrLmgiDQorI2luY2x1ZGUgInRyZWsuaCINCiANCiAvKg0K
ICoqICBDQVVTRSBBIE5PVkEgVE8gT0NDVVINCkBAIC01MSw4ICs1MSw4IEBA
DQogKioJSWYgdGhlIHphcCBpcyB0b28gbXVjaCwgaXQgZ2V0cyBkZXN0cm95
ZWQuDQogKi8NCiANCi1ub3ZhKHgsIHkpDQotaW50CXgsIHk7DQordm9pZA0K
K25vdmEoaW50IHgsIGludCB5KQ0KIHsNCiAJaW50CQlpLCBqOw0KIAlpbnQJ
CXNlOw0KQEAgLTY1LDcgKzY1LDEwIEBADQogCQlyZXR1cm47DQogCX0NCiAJ
aWYgKHJhbmYoMTAwKSA8IDUpDQotCQlyZXR1cm4gKHNub3ZhKHgsIHkpKTsN
CisJew0KKwkJc25vdmEoeCwgeSk7DQorCQlyZXR1cm47DQorCX0NCiAJcHJp
bnRmKCJTcG9jazogU3RhciBhdCAlZCwlZCBnb25lIG5vdmFcbiIsIHgsIHkp
Ow0KIA0KIAlpZiAocmFuZig0KSAhPSAwKQ0KQEAgLTExNCw2ICsxMTcsNyBA
QA0KIAkJCSAgY2FzZSBRVUVFTkU6DQogCQkJCXNlID0gMjAwMDsNCiAJCQkJ
aWYgKFNoaXAuc2hsZHVwKQ0KKwkJCQl7DQogCQkJCQlpZiAoU2hpcC5zaGll
bGQgPj0gc2UpDQogCQkJCQl7DQogCQkJCQkJU2hpcC5zaGllbGQgLT0gc2U7
DQpAQCAtMTI0LDYgKzEyOCw3IEBADQogCQkJCQkJc2UgLT0gU2hpcC5zaGll
bGQ7DQogCQkJCQkJU2hpcC5zaGllbGQgPSAwOw0KIAkJCQkJfQ0KKwkJCQl9
DQogCQkJCVNoaXAuZW5lcmd5IC09IHNlOw0KIAkJCQlpZiAoU2hpcC5lbmVy
Z3kgPD0gMCkNCiAJCQkJCWxvc2UoTF9TVUlDSUQpOw0KQEAgLTEzNyw1ICsx
NDIsNCBAQA0KIAkJCX0NCiAJCX0NCiAJfQ0KLQlyZXR1cm47DQogfQ0KSW5k
ZXg6IG91dC5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTog
L2hvbWUvZGN2cy9zcmMvZ2FtZXMvdHJlay9vdXQuYyx2DQpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMg0KZGlmZiAtdSAtcjEuMiBvdXQuYw0KLS0tIG91dC5j
CTE3IEp1biAyMDAzIDA0OjI1OjI1IC0wMDAwCTEuMg0KKysrIG91dC5jCTI2
IE1hciAyMDA1IDE5OjA2OjUyIC0wMDAwDQpAQCAtMzUsMjAgKzM1LDIxIEBA
DQogICogJERyYWdvbkZseTogc3JjL2dhbWVzL3RyZWsvb3V0LmMsdiAxLjIg
MjAwMy8wNi8xNyAwNDoyNToyNSBkaWxsb24gRXhwICQNCiAgKi8NCiANCi0j
IGluY2x1ZGUJInRyZWsuaCINCisjaW5jbHVkZSA8c3RyaW5nLmg+DQorI2lu
Y2x1ZGUgInRyZWsuaCINCiANCiAvKg0KICoqICBBbm5vdW5jZSBEZXZpY2Ug
T3V0DQogKi8NCiANCi1vdXQoZGV2KQ0KLWludAlkZXY7DQordm9pZA0KK291
dChpbnQgZGV2KQ0KIHsNCiAJc3RydWN0IGRldmljZQkqZDsNCiANCiAJZCA9
ICZEZXZpY2VbZGV2XTsNCiAJcHJpbnRmKCIlcyByZXBvcnRzICVzICIsIGQt
PnBlcnNvbiwgZC0+bmFtZSk7DQotCWlmIChkLT5uYW1lW2xlbmd0aChkLT5u
YW1lKSAtIDFdID09ICdzJykNCisJaWYgKGQtPm5hbWVbc3RybGVuKGQtPm5h
bWUpIC0gMV0gPT0gJ3MnKQ0KIAkJcHJpbnRmKCJhcmUiKTsNCiAJZWxzZQ0K
IAkJcHJpbnRmKCJpcyIpOw0KSW5kZXg6IHBoYXNlci5jDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hvbWUvZGN2cy9zcmMvZ2FtZXMv
dHJlay9waGFzZXIuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMg0KZGlm
ZiAtdSAtcjEuMiBwaGFzZXIuYw0KLS0tIHBoYXNlci5jCTE3IEp1biAyMDAz
IDA0OjI1OjI1IC0wMDAwCTEuMg0KKysrIHBoYXNlci5jCTI4IE1hciAyMDA1
YWdvbkZseTogc3JjL2dhbWVzL3RyZWsvcGhhc2VyLmMsdiAxLjIgMjAwMy8w
Ni8xNyAwNDoyNToyNSBkaWxsb24gRXhwICQNCiAgKi8NCiANCi0jIGluY2x1
ZGUJInRyZWsuaCINCi0jIGluY2x1ZGUJImdldHBhci5oIg0KKyNpbmNsdWRl
IDxtYXRoLmg+DQorI2luY2x1ZGUgInRyZWsuaCINCisjaW5jbHVkZSAiZ2V0
cGFyLmgiDQogDQogLyogZmFjdG9ycyBmb3IgcGhhc2VyIGhpdHM7IHNlZSBk
ZXNjcmlwdGlvbiBiZWxvdyAqLw0KIA0KLSMgZGVmaW5lCUFMUEhBCQkzLjAJ
CS8qIHNwcmVhZCAqLw0KLSMgZGVmaW5lCUJFVEEJCTMuMAkJLyogZnJhbmYo
KSAqLw0KLSMgZGVmaW5lCUdBTU1BCQkwLjMwCQkvKiBjb3MoYW5nbGUpICov
DQotIyBkZWZpbmUJRVBTSUxPTgkJMTUwLjAJCS8qIGRpc3QgKiogMiAqLw0K
LSMgZGVmaW5lCU9NRUdBCQkxMC41OTYJCS8qIG92ZXJhbGwgc2NhbGluZyBm
YWN0b3IgKi8NCisjZGVmaW5lCUFMUEhBCQkzLjAJCS8qIHNwcmVhZCAqLw0K
KyNkZWZpbmUJQkVUQQkJMy4wCQkvKiBmcmFuZigpICovDQorI2RlZmluZQlH
QU1NQQkJMC4zMAkJLyogY29zKGFuZ2xlKSAqLw0KKyNkZWZpbmUJRVBTSUxP
TgkJMTUwLjAJCS8qIGRpc3QgKiogMiAqLw0KKyNkZWZpbmUJT01FR0EJCTEw
LjU5NgkJLyogb3ZlcmFsbCBzY2FsaW5nIGZhY3RvciAqLw0KIA0KIC8qIE9N
RUdBIH49IDEwMCAqIChBTFBIQSArIDEpICogKEJFVEEgKyAxKSAvIChFUFNJ
TE9OICsgMSkgKi8NCiANCkBAIC03Myw5ICs3NCw5IEBADQogDQogc3RydWN0
IGN2bnRhYglNYXRhYltdID0NCiB7DQotCSJtIiwJCSJhbnVhbCIsCQkoaW50
ICgqKSgpKTEsCQkwLA0KLQkiYSIsCQkidXRvbWF0aWMiLAkJMCwJCTAsDQot
CTANCisJeyJtIiwJImFudWFsIiwJKHZvaWQgKCopKCkpMSwJMH0sDQorCXsi
YSIsCSJ1dG9tYXRpYyIsCTAsCQkwfSwNCisJezAsCTAsCQkwLAkJMH0NCiB9
Ow0KIA0KIHN0cnVjdCBiYW5rcw0KQEAgLTg2LDggKzg3LDggQEANCiB9Ow0K
IA0KIA0KLQ0KLXBoYXNlcigpDQordm9pZA0KK3BoYXNlcih2b2lkKQ0KIHsN
CiAJaW50CQlpOw0KIAlpbnQJCQlqOw0KQEAgLTEwNCwxMSArMTA1LDIwIEBA
DQogCXN0cnVjdCBjdm50YWIJCSpwdHI7DQogDQogCWlmIChTaGlwLmNvbmQg
PT0gRE9DS0VEKQ0KLQkJcmV0dXJuKHByaW50ZigiUGhhc2VycyBjYW5ub3Qg
ZmlyZSB0aHJvdWdoIHN0YXJiYXNlIHNoaWVsZHNcbiIpKTsNCisJew0KKwkJ
cHJpbnRmKCJQaGFzZXJzIGNhbm5vdCBmaXJlIHRocm91Z2ggc3RhcmJhc2Ug
c2hpZWxkc1xuIik7DQorCQlyZXR1cm47DQorCX0NCiAJaWYgKGRhbWFnZWQo
UEhBU0VSKSkNCi0JCXJldHVybiAob3V0KFBIQVNFUikpOw0KKwl7DQorCQlv
dXQoUEhBU0VSKTsNCisJCXJldHVybjsNCisJfQ0KIAlpZiAoU2hpcC5zaGxk
dXApDQotCQlyZXR1cm4gKHByaW50ZigiU3VsdTogQ2FwdGFpbiwgd2UgY2Fu
bm90IGZpcmUgdGhyb3VnaCBzaGllbGRzLlxuIikpOw0KKwl7DQorCQlwcmlu
dGYoIlN1bHU6IENhcHRhaW4sIHdlIGNhbm5vdCBmaXJlIHRocm91Z2ggc2hp
ZWxkcy5cbiIpOw0KKwkJcmV0dXJuOw0KKwl9DQogCWlmIChTaGlwLmNsb2Fr
ZWQpDQogCXsNCiAJCXByaW50ZigiU3VsdTogQ2FwdGFpbiwgc3VyZWx5IHlv
dSBtdXN0IHJlYWxpemUgdGhhdCB3ZSBjYW5ub3QgZmlyZVxuIik7DQpAQCAt
MTQ4LDYgKzE1OCw3IEBADQogCX0NCiANCiAJLyogaW5pdGlhbGl6ZSB0aGUg
YmFua1tdIGFycmF5ICovDQorCWV4dHJhID0gMDsNCiAJZmxhZyA9IDE7DQog
CWZvciAoaSA9IDA7IGkgPCBOQkFOS1M7IGkrKykNCiAJCWJhbmtbaV0udW5p
dHMgPSAwOw0KQEAgLTE5Myw3ICsyMDQsMTAgQEANCiAJew0KIAkJLyogYXV0
b21hdGljIGRpc3RyaWJ1dGlvbiBvZiBwb3dlciAqLw0KIAkJaWYgKEV0Yy5u
a2xpbmcgPD0gMCkNCi0JCQlyZXR1cm4gKHByaW50ZigiU3VsdTogQnV0IHRo
ZXJlIGFyZSBubyBLbGluZ29ucyBpbiB0aGlzIHF1YWRyYW50XG4iKSk7DQor
CQl7DQorCQkJcHJpbnRmKCJTdWx1OiBCdXQgdGhlcmUgYXJlIG5vIEtsaW5n
b25zIGluIHRoaXMgcXVhZHJhbnRcbiIpOw0KKwkJCXJldHVybjsNCisJCX0N
CiAJCXByaW50ZigiUGhhc2VycyBsb2NrZWQgb24gdGFyZ2V0LiAgIik7DQog
CQl3aGlsZSAoZmxhZykNCiAJCXsNCkBAIC0yMjksMTQgKzI0MywxNCBAQA0K
IAkJCQliLT5hbmdsZSA9IGF0YW4yKGR5LCBkeCk7DQogCQkJCWItPnNwcmVh
ZCA9IDAuMDsNCiAJCQkJYi0+dW5pdHMgPSAoKG4gLSBpKSAvIHRvdCkgKiBl
eHRyYTsNCi0jCQkJCWlmZGVmIHhUUkFDRQ0KKyNpZmRlZiB4VFJBQ0UNCiAJ
CQkJaWYgKFRyYWNlKQ0KIAkJCQl7DQogCQkJCQlwcmludGYoImIlZCBociVk
IHUlZCBkZiUuMmYgYWYlLjJmXG4iLA0KIAkJCQkJCWksIGhpdHJlcWRbaV0s
IGItPnVuaXRzLA0KIAkJCQkJCWRpc3RmYWN0b3IsIGFuZ2xlZmFjdG9yKTsN
CiAJCQkJfQ0KLSMJCQkJZW5kaWYNCisjZW5kaWYNCiAJCQkJZXh0cmEgLT0g
Yi0+dW5pdHM7DQogCQkJCWhpdCA9IGItPnVuaXRzIC0gaGl0cmVxZFtpXTsN
CiAJCQkJaWYgKGhpdCA+IDApDQpAQCAtMjcwLDcgKzI4NCw3IEBADQogCQl9
DQogCX0NCiANCi0jCWlmZGVmIHhUUkFDRQ0KKyNpZmRlZiB4VFJBQ0UNCiAJ
aWYgKFRyYWNlKQ0KIAl7DQogCQlmb3IgKGkgPSAwOyBpIDwgTkJBTktTOyBp
KyspDQpAQCAtMjgzLDcgKzI5Nyw3IEBADQogCQkJCXByaW50ZigiXG4iKTsN
CiAJCX0NCiAJfQ0KLSMJZW5kaWYNCisjZW5kaWYNCiANCiAJLyogYWN0dWFs
bHkgZmlyZSB0aGUgc2hvdHMgKi8NCiAJTW92ZS5mcmVlID0gMDsNCkluZGV4
OiBwbGF5LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAv
aG9tZS9kY3ZzL3NyYy9nYW1lcy90cmVrL3BsYXkuYyx2DQpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMg0KZGlmZiAtdSAtcjEuMiBwbGF5LmMNCi0tLSBwbGF5
LmMJMTcgSnVuIDIwMDMgMDQ6MjU6MjUgLTAwMDAJMS4yDQorKysgcGxheS5j
CTMwIE1hciAyMDA1IDEzOjMwOjM1IC0wMDAwDQpAQCAtMzUsOSArMzUsOSBA
QA0KICAqICREcmFnb25GbHk6IHNyYy9nYW1lcy90cmVrL3BsYXkuYyx2IDEu
MiAyMDAzLzA2LzE3IDA0OjI1OjI1IGRpbGxvbiBFeHAgJA0KICAqLw0KIA0K
LSMgaW5jbHVkZQkidHJlay5oIg0KLSMgaW5jbHVkZQkiZ2V0cGFyLmgiDQot
IyBpbmNsdWRlCTxzZXRqbXAuaD4NCisjaW5jbHVkZSAidHJlay5oIg0KKyNp
bmNsdWRlICJnZXRwYXIuaCINCisNCiANCiAvKg0KICoqICBJTlNUUlVDVElP
TiBSRUFEIEFORCBNQUlOIFBMQVkgTE9PUA0KQEAgLTQ5LDQ3ICs0OSw0NSBA
QA0KICoqCWF0dGFjayBpZiB0aGUgbW92ZSB3YXMgbm90IGZyZWUsIGFuZCBj
aGVja2NvbmQoKSB0byBjaGVjayB1cA0KICoqCW9uIGhvdyB3ZSBhcmUgZG9p
bmcgYWZ0ZXIgdGhlIG1vdmUuDQogKi8NCi1leHRlcm4gaW50CWFiYW5kb24o
KSwgY2FwdHVyZSgpLCBzaGllbGQoKSwgY29tcHV0ZXIoKSwgZGNyZXB0KCks
DQotCQlkZXN0cnVjdCgpLCBkb2NrKCksIGhlbHAoKSwgaW1wdWxzZSgpLCBs
cnNjYW4oKSwNCi0JCXdhcnAoKSwgZHVtcGdhbWUoKSwgcmVzdCgpLCBzcnNj
YW4oKSwNCi0JCW15cmVzZXQoKSwgdG9ycGVkKCksIHZpc3VhbCgpLCBzZXR3
YXJwKCksIHVuZG9jaygpLCBwaGFzZXIoKTsNCisNCitzdGF0aWMgdm9pZAlt
eXJlc2V0KHZvaWQpOw0KIA0KIHN0cnVjdCBjdm50YWIJQ29tdGFiW10gPQ0K
IHsNCi0JImFiYW5kb24iLAkJIiIsCQkJYWJhbmRvbiwJMCwNCi0JImNhIiwJ
CQkicHR1cmUiLAkJY2FwdHVyZSwJMCwNCi0JImNsIiwJCQkib2FrIiwJCQlz
aGllbGQsCS0xLA0KLQkiYyIsCQkJIm9tcHV0ZXIiLAkJY29tcHV0ZXIsCTAs
DQotCSJkYSIsCQkJIm1hZ2VzIiwJCWRjcmVwdCwJMCwNCi0JImRlc3RydWN0
IiwJCSIiLAkJCWRlc3RydWN0LAkwLA0KLQkiZG8iLAkJCSJjayIsCQkJZG9j
aywJCTAsDQotCSJoZWxwIiwJCQkiIiwJCQloZWxwLAkJMCwNCi0JImkiLAkJ
CSJtcHVsc2UiLAkJaW1wdWxzZSwJMCwNCi0JImwiLAkJCSJyc2NhbiIsCQls
cnNjYW4sCTAsDQotCSJtIiwJCQkib3ZlIiwJCQl3YXJwLAkJMCwNCi0JInAi
LAkJCSJoYXNlcnMiLAkJcGhhc2VyLAkwLA0KLQkicmFtIiwJCQkiIiwJCQl3
YXJwLAkJMSwNCi0JImR1bXAiLAkJCSIiLAkJCWR1bXBnYW1lLAkwLA0KLQki
ciIsCQkJImVzdCIsCQkJcmVzdCwJCTAsDQotCSJzaCIsCQkJImllbGQiLAkJ
CXNoaWVsZCwJMCwNCi0JInMiLAkJCSJyc2NhbiIsCQlzcnNjYW4sCTAsDQot
CSJzdCIsCQkJImF0dXMiLAkJCXNyc2NhbiwJLTEsDQotCSJ0ZXJtaW5hdGUi
LAkJIiIsCQkJbXlyZXNldCwJMCwNCi0JInQiLAkJCSJvcnBlZG8iLAkJdG9y
cGVkLAkwLA0KLQkidSIsCQkJIm5kb2NrIiwJCXVuZG9jaywJMCwNCi0JInYi
LAkJCSJpc3VhbCIsCQl2aXN1YWwsCTAsDQotCSJ3IiwJCQkiYXJwIiwJCQlz
ZXR3YXJwLAkwLA0KLQkwDQorCXsiYWJhbmRvbiIsCQkiIiwJCSh2b2lkICgq
KShpbnQpKWFiYW5kb24sCTB9LA0KKwl7ImNhIiwJCQkicHR1cmUiLAkodm9p
ZCAoKikoaW50KSljYXB0dXJlLAkwfSwNCisJeyJjbCIsCQkJIm9hayIsCQko
dm9pZCAoKikoaW50KSlzaGllbGQsCS0xfSwNCisJeyJjIiwJCQkib21wdXRl
ciIsCSh2b2lkICgqKShpbnQpKWNvbXB1dGVyLDB9LA0KKwl7ImRhIiwJCQki
bWFnZXMiLAkodm9pZCAoKikoaW50KSlkY3JlcHQsCTB9LA0KKwl7ImRlc3Ry
dWN0IiwJCSIiLAkJKHZvaWQgKCopKGludCkpZGVzdHJ1Y3QsMH0sDQorCXsi
ZG8iLAkJCSJjayIsCQkodm9pZCAoKikoaW50KSlkb2NrLAkwfSwNCisJeyJo
ZWxwIiwJCSIiLAkJKHZvaWQgKCopKGludCkpaGVscCwJMH0sDQorCXsiaSIs
CQkJIm1wdWxzZSIsCSh2b2lkICgqKShpbnQpKWltcHVsc2UsCTB9LA0KKwl7
ImwiLAkJCSJyc2NhbiIsCSh2b2lkICgqKShpbnQpKWxyc2NhbiwJMH0sDQor
CXsibSIsCQkJIm92ZSIsCQkodm9pZCAoKikoaW50KSl3YXJwLAkwfSwNCisJ
eyJwIiwJCQkiaGFzZXJzIiwJKHZvaWQgKCopKGludCkpcGhhc2VyLAkwfSwN
CisJeyJyYW0iLAkJCSIiLAkJKHZvaWQgKCopKGludCkpd2FycCwJMX0sDQor
CXsiZHVtcCIsCQkiIiwJCSh2b2lkICgqKShpbnQpKWR1bXBnYW1lLDB9LA0K
Kwl7InIiLAkJCSJlc3QiLAkJKHZvaWQgKCopKGludCkpcmVzdCwJMH0sDQor
CXsic2giLAkJCSJpZWxkIiwJCSh2b2lkICgqKShpbnQpKXNoaWVsZCwJMH0s
DQorCXsicyIsCQkJInJzY2FuIiwJKHZvaWQgKCopKGludCkpc3JzY2FuLAkw
fSwNCisJeyJzdCIsCQkJImF0dXMiLAkJKHZvaWQgKCopKGludCkpc3JzY2Fu
LAktMX0sDQorCXsidGVybWluYXRlIiwJCSIiLAkJKHZvaWQgKCopKGludCkp
bXlyZXNldCwJMH0sDQorCXsidCIsCQkJIm9ycGVkbyIsCSh2b2lkICgqKShp
bnQpKXRvcnBlZCwJMH0sDQorCXsidSIsCQkJIm5kb2NrIiwJKHZvaWQgKCop
KGludCkpdW5kb2NrLAkwfSwNCisJeyJ2IiwJCQkiaXN1YWwiLAkodm9pZCAo
KikoaW50KSl2aXN1YWwsCTB9LA0KKwl7InciLAkJCSJhcnAiLAkJKHZvaWQg
KCopKGludCkpc2V0d2FycCwJMH0sDQorCXswLAkJCTAsCQkodm9pZCAoKiko
aW50KSkwLAkwfQ0KIH07DQogDQotbXlyZXNldCgpDQordm9pZA0KK215cmVz
ZXQodm9pZCkNCiB7DQotCWV4dGVybiBqbXBfYnVmIGVudjsNCi0NCiAJbG9u
Z2ptcChlbnYsIDEpOw0KIH0NCiANCi1wbGF5KCkNCit2b2lkDQorcGxheSh2
b2lkKQ0KIHsNCiAJc3RydWN0IGN2bnRhYgkJKnI7DQogDQpJbmRleDogcmFt
LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvaG9tZS9k
Y3ZzL3NyYy9nYW1lcy90cmVrL3JhbS5jLHYNCnJldHJpZXZpbmcgcmV2aXNp
b24gMS4yDQpkaWZmIC11IC1yMS4yIHJhbS5jDQotLS0gcmFtLmMJMTcgSnVu
IDIwMDMgMDQ6MjU6MjUgLTAwMDAJMS4yDQorKysgcmFtLmMJMjYgTWFyIDIw
MDUgMTk6MDA6MjIgLTAwMDANCkBAIC0zNSw3ICszNSw4IEBADQogICogJERy
YWdvbkZseTogc3JjL2dhbWVzL3RyZWsvcmFtLmMsdiAxLjIgMjAwMy8wNi8x
NyAwNDoyNToyNSBkaWxsb24gRXhwICQNCiAgKi8NCiANCi0jIGluY2x1ZGUJ
InRyZWsuaCINCisjaW5jbHVkZSA8dW5pc3RkLmg+DQorI2luY2x1ZGUgInRy
ZWsuaCINCiANCiAvKg0KICoqICBSQU0gU09NRSBPQkpFQ1QNCkBAIC00OCw4
ICs0OSw4IEBADQogKioJYWxzbyByYWNrIHVwIGluY3JlZGlibGUgZGFtYWdl
cy4NCiAqLw0KIA0KLXJhbShpeCwgaXkpDQotaW50CWl4LCBpeTsNCit2b2lk
DQorcmFtKGludCBpeCwgaW50IGl5KQ0KIHsNCiAJaW50CQlpOw0KIAljaGFy
CQljOw0KSW5kZXg6IHJhbmYuYw0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
UkNTIGZpbGU6IC9ob21lL2RjdnMvc3JjL2dhbWVzL3RyZWsvcmFuZi5jLHYN
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yDQpkaWZmIC11IC1yMS4yIHJhbmYu
Yw0KLS0tIHJhbmYuYwkxNyBKdW4gMjAwMyAwNDoyNToyNSAtMDAwMAkxLjIN
CisrKyByYW5mLmMJMjYgTWFyIDIwMDUgMTk6MDU6MTIgLTAwMDANCkBAIC0z
NSwxMSArMzUsMTEgQEANCiAgKiAkRHJhZ29uRmx5OiBzcmMvZ2FtZXMvdHJl
ay9yYW5mLmMsdiAxLjIgMjAwMy8wNi8xNyAwNDoyNToyNSBkaWxsb24gRXhw
ICQNCiAgKi8NCiANCi0jIGluY2x1ZGUJPHN0ZGlvLmg+DQotIyBpbmNsdWRl
ICAgICAgIDxzdGRsaWIuaD4NCisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2lu
Y2x1ZGUgInRyZWsuaCINCiANCi1yYW5mKG1heCkNCi1pbnQJbWF4Ow0KK2lu
dA0KK3JhbmYoaW50IG1heCkNCiB7DQogCWlmIChtYXggPD0gMCkNCiAJCXJl
dHVybiAoMCk7DQpAQCAtNDcsNyArNDcsOCBAQA0KIH0NCiANCiANCi1kb3Vi
bGUgZnJhbmYoKQ0KK2RvdWJsZSANCitmcmFuZih2b2lkKQ0KIHsNCiAJZG91
YmxlCQl0Ow0KIAl0ID0gcmFuZG9tKCkgJiAwNzc3Nzc7DQpJbmRleDogcmVz
dC5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hvbWUv
ZGN2cy9zcmMvZ2FtZXMvdHJlay9yZXN0LmMsdg0KcmV0cmlldmluZyByZXZp
c2lvbiAxLjINCmRpZmYgLXUgLXIxLjIgcmVzdC5jDQotLS0gcmVzdC5jCTE3
IEp1biAyMDAzIDA0OjI1OjI1IC0wMDAwCTEuMg0KKysrIHJlc3QuYwkyNSBN
YXIgMjAwNSAxNjo1MToyNCAtMDAwMA0KQEAgLTM1LDggKzM1LDggQEANCiAg
KiAkRHJhZ29uRmx5OiBzcmMvZ2FtZXMvdHJlay9yZXN0LmMsdiAxLjIgMjAw
My8wNi8xNyAwNDoyNToyNSBkaWxsb24gRXhwICQNCiAgKi8NCiANCi0jIGlu
Y2x1ZGUJInRyZWsuaCINCi0jIGluY2x1ZGUJImdldHBhci5oIg0KKyNpbmNs
dWRlICJ0cmVrLmgiDQorI2luY2x1ZGUgImdldHBhci5oIg0KIA0KIC8qDQog
KiogIFJFU1QgRk9SIFJFUEFJUlMNCkBAIC01Miw3ICs1Miw4IEBADQogKioJ
cmVzdCBwZXJpb2QgaWYgYW55dGhpbmcgbW9tZW50b3VzIGhhcHBlbnMuDQog
Ki8NCiANCi1yZXN0KCkNCit2b2lkDQorcmVzdCh2b2lkKQ0KIHsNCiAJZG91
YmxlCQkJdDsNCiAJaW50CQlwZXJjZW50Ow0KSW5kZXg6IHNjaGVkdWxlLmMN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvaG9tZS9kY3Zz
L3NyYy9nYW1lcy90cmVrL3NjaGVkdWxlLmMsdg0KcmV0cmlldmluZyByZXZp
c2lvbiAxLjINCmRpZmYgLXUgLXIxLjIgc2NoZWR1bGUuYw0KLS0tIHNjaGVk
dWxlLmMJMTcgSnVuIDIwMDMgMDQ6MjU6MjUgLTAwMDAJMS4yDQorKysgc2No
ZWR1bGUuYwkyOCBNYXIgMjAwNSAxNDoyODowMSAtMDAwMA0KQEAgLTM1LDcg
KzM1LDggQEANCiAgKiAkRHJhZ29uRmx5OiBzcmMvZ2FtZXMvdHJlay9zY2hl
ZHVsZS5jLHYgMS4yIDIwMDMvMDYvMTcgMDQ6MjU6MjUgZGlsbG9uIEV4cCAk
DQogICovDQogDQotIyBpbmNsdWRlCSJ0cmVrLmgiDQorI2luY2x1ZGUgPG1h
dGguaD4NCisjaW5jbHVkZSAidHJlay5oIg0KIA0KIC8qDQogKiogIFNDSEVE
VUxFIEFOIEVWRU5UDQpAQCAtNDcsMTEgKzQ4LDggQEANCiAqKglUaGUgYWRk
cmVzcyBvZiB0aGUgc2xvdCBpcyByZXR1cm5lZC4NCiAqLw0KIA0KLXN0cnVj
dCBldmVudCAqc2NoZWR1bGUodHlwZSwgb2Zmc2V0LCB4LCB5LCB6KQ0KLWlu
dAl0eXBlOw0KLWRvdWJsZQlvZmZzZXQ7DQotY2hhcgl4LCB5Ow0KLWNoYXIJ
ejsNCitzdHJ1Y3QgZXZlbnQgKg0KK3NjaGVkdWxlKGludCB0eXBlLCBkb3Vi
bGUgb2Zmc2V0LCBjaGFyIHgsIGNoYXIgeSwgY2hhciB6KQ0KIHsNCiAJc3Ry
dWN0IGV2ZW50CSplOw0KIAlpbnQJCWk7DQpAQCAtNjQsMTEgKzYyLDExIEBA
DQogCQlpZiAoZS0+ZXZjb2RlKQ0KIAkJCWNvbnRpbnVlOw0KIAkJLyogZ290
IGEgc2xvdCAqLw0KLSMJCWlmZGVmIHhUUkFDRQ0KKyNpZmRlZiB4VFJBQ0UN
CiAJCWlmIChUcmFjZSkNCiAJCQlwcmludGYoInNjaGVkdWxlOiB0eXBlICVk
IEAgJS4yZiBzbG90ICVkIHBhcm0gJWQgJWQgJWRcbiIsDQogCQkJCXR5cGUs
IGRhdGUsIGksIHgsIHksIHopOw0KLSMJCWVuZGlmDQorI2VuZGlmDQogCQll
LT5ldmNvZGUgPSB0eXBlOw0KIAkJZS0+ZGF0ZSA9IGRhdGU7DQogCQllLT54
ID0geDsNCkBAIC03OCw2ICs3Niw3IEBADQogCQlyZXR1cm4gKGUpOw0KIAl9
DQogCXN5c2VycigiQ2Fubm90IHNjaGVkdWxlIGV2ZW50ICVkIHBhcm0gJWQg
JWQgJWQiLCB0eXBlLCB4LCB5LCB6KTsNCisJcmV0dXJuIE5VTEw7DQogfQ0K
IA0KIA0KQEAgLTg4LDkgKzg3LDggQEANCiAqKgl0aW1lIHBsdXMgJ29mZnNl
dCcuDQogKi8NCiANCi1yZXNjaGVkdWxlKGUxLCBvZmZzZXQpDQotc3RydWN0
IGV2ZW50CSplMTsNCi1kb3VibGUJCW9mZnNldDsNCit2b2lkDQorcmVzY2hl
ZHVsZShzdHJ1Y3QgZXZlbnQgKmUxLCBkb3VibGUgb2Zmc2V0KQ0KIHsNCiAJ
ZG91YmxlCQkJZGF0ZTsNCiAJc3RydWN0IGV2ZW50CSplOw0KQEAgLTk5LDEy
ICs5NywxMSBAQA0KIA0KIAlkYXRlID0gTm93LmRhdGUgKyBvZmZzZXQ7DQog
CWUtPmRhdGUgPSBkYXRlOw0KLSMJaWZkZWYgeFRSQUNFDQorI2lmZGVmIHhU
UkFDRQ0KIAlpZiAoVHJhY2UpDQogCQlwcmludGYoInJlc2NoZWR1bGU6IHR5
cGUgJWQgcGFybSAlZCAlZCAlZCBAICUuMmZcbiIsDQogCQkJZS0+ZXZjb2Rl
LCBlLT54LCBlLT55LCBlLT5zeXN0ZW1uYW1lLCBkYXRlKTsNCi0jCWVuZGlm
DQotCXJldHVybjsNCisjZW5kaWYNCiB9DQogDQogDQpAQCAtMTE0LDIyICsx
MTEsMjEgQEANCiAqKglUaGUgZXZlbnQgYXQgc2xvdCAnZScgaXMgZGVsZXRl
ZC4NCiAqLw0KIA0KLXVuc2NoZWR1bGUoZTEpDQotc3RydWN0IGV2ZW50CSpl
MTsNCit2b2lkDQordW5zY2hlZHVsZShzdHJ1Y3QgZXZlbnQgKmUxKQ0KIHsN
CiAJc3RydWN0IGV2ZW50CSplOw0KIA0KIAllID0gZTE7DQogDQotIwlpZmRl
ZiB4VFJBQ0UNCisjaWZkZWYgeFRSQUNFDQogCWlmIChUcmFjZSkNCiAJCXBy
aW50ZigidW5zY2hlZHVsZTogdHlwZSAlZCBAICUuMmYgcGFybSAlZCAlZCAl
ZFxuIiwNCiAJCQllLT5ldmNvZGUsIGUtPmRhdGUsIGUtPngsIGUtPnksIGUt
PnN5c3RlbW5hbWUpOw0KLSMJZW5kaWYNCisjZW5kaWYNCiAJTm93LmV2ZW50
cHRyW2UtPmV2Y29kZSAmIEVfRVZFTlRdID0gMDsNCiAJZS0+ZGF0ZSA9IDFl
NTA7DQogCWUtPmV2Y29kZSA9IDA7DQotCXJldHVybjsNCiB9DQogDQogDQpA
QCAtMTQwLDEwICsxMzYsOCBAQA0KICoqCWZpZ3VyZS4NCiAqLw0KIA0KLXN0
cnVjdCBldmVudCAqeHNjaGVkKGV2MSwgZmFjdG9yLCB4LCB5LCB6KQ0KLWlu
dAlldjE7DQotaW50CWZhY3RvcjsNCi1pbnQJeCwgeSwgejsNCitzdHJ1Y3Qg
ZXZlbnQgKg0KK3hzY2hlZChpbnQgZXYxLCBpbnQgZmFjdG9yLCBpbnQgeCwg
aW50IHksIGludCB6KQ0KIHsNCiAJaW50CWV2Ow0KIA0KQEAgLTE1OSwxMCAr
MTUzLDggQEANCiAqKglkaXZpc2lvbiBmYWN0b3IuICBMb29rIGF0IHRoZSBj
b2RlIHRvIHNlZSB3aGF0IHJlYWxseSBoYXBwZW5zLg0KICovDQogDQoteHJl
c2NoZWQoZTEsIGV2MSwgZmFjdG9yKQ0KLXN0cnVjdCBldmVudAkqZTE7DQot
aW50CQlldjE7DQotaW50CQlmYWN0b3I7DQordm9pZA0KK3hyZXNjaGVkKHN0
cnVjdCBldmVudCAqZTEsIGludCBldjEsIGludCBmYWN0b3IpDQogew0KIAlp
bnQJCWV2Ow0KIAlzdHJ1Y3QgZXZlbnQJKmU7DQpJbmRleDogc2NvcmUuYw0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lL2RjdnMv
c3JjL2dhbWVzL3RyZWsvc2NvcmUuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMg0KZGlmZiAtdSAtcjEuMiBzY29yZS5jDQotLS0gc2NvcmUuYwkxNyBK
dW4gMjAwMyAwNDoyNToyNSAtMDAwMAkxLjINCisrKyBzY29yZS5jCTI2IE1h
ciAyMDA1IDE4OjQyOjI2IC0wMDAwDQpAQCAtMzUsMjAgKzM1LDIwIEBADQog
ICogJERyYWdvbkZseTogc3JjL2dhbWVzL3RyZWsvc2NvcmUuYyx2IDEuMiAy
MDAzLzA2LzE3IDA0OjI1OjI1IGRpbGxvbiBFeHAgJA0KICAqLw0KIA0KLSMg
aW5jbHVkZQkidHJlay5oIg0KLSMgaW5jbHVkZQkiZ2V0cGFyLmgiDQorI2lu
Y2x1ZGUgInRyZWsuaCINCisjaW5jbHVkZSAiZ2V0cGFyLmgiDQogDQogLyoN
CiAqKiAgUFJJTlQgT1VUIFRIRSBDVVJSRU5UIFNDT1JFDQogKi8NCiANCi1s
b25nIHNjb3JlKCkNCitsb25nIA0KK3Njb3JlKHZvaWQpDQogew0KIAlpbnQJ
CXU7DQogCWludAkJdDsNCiAJbG9uZwkJCXM7DQogCWRvdWJsZQkJCXI7DQot
CWV4dGVybiBzdHJ1Y3QgY3ZudGFiCVNraXRhYltdOw0KIA0KIAlwcmludGYo
IlxuKioqIFlvdXIgc2NvcmU6XG4iKTsNCiAJcyA9IHQgPSBQYXJhbS5rbGlu
Z3B3ciAvIDQgKiAodSA9IEdhbWUua2lsbGspOw0KSW5kZXg6IHNldHVwLmMN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvaG9tZS9kY3Zz
L3NyYy9nYW1lcy90cmVrL3NldHVwLmMsdg0KcmV0cmlldmluZyByZXZpc2lv
biAxLjINCmRpZmYgLXUgLXIxLjIgc2V0dXAuYw0KLS0tIHNldHVwLmMJMTcg
SnVuIDIwMDMgMDQ6MjU6MjUgLTAwMDAJMS4yDQorKysgc2V0dXAuYwkyNiBN
YXIgMjAwNSAxOTowNzo0MCAtMDAwMA0KQEAgLTM1LDkgKzM1LDExIEBADQog
ICogJERyYWdvbkZseTogc3JjL2dhbWVzL3RyZWsvc2V0dXAuYyx2IDEuMiAy
MDAzLzA2LzE3IDA0OjI1OjI1IGRpbGxvbiBFeHAgJA0KICAqLw0KIA0KLSMg
aW5jbHVkZSAgICAgICA8c3RkbGliLmg+DQotIyBpbmNsdWRlCSJ0cmVrLmgi
DQotIyBpbmNsdWRlCSJnZXRwYXIuaCINCisjaW5jbHVkZSA8c3RkbGliLmg+
DQorI2luY2x1ZGUgPHN0cmluZy5oPg0KKyNpbmNsdWRlIDxtYXRoLmg+DQor
I2luY2x1ZGUgInRyZWsuaCINCisjaW5jbHVkZSAiZ2V0cGFyLmgiDQogDQog
LyoNCiAqKiAgSU5JVElBTElaRSBUSEUgR0FNRQ0KQEAgLTUyLDMxICs1NCwz
MSBAQA0KIA0KIHN0cnVjdCBjdm50YWIJTGVudGFiW10gPQ0KIHsNCi0JInMi
LAkJImhvcnQiLAkJCShpbnQgKCopKCkpMSwJCTAsDQotCSJtIiwJCSJlZGl1
bSIsCQkoaW50ICgqKSgpKTIsCQkwLA0KLQkibCIsCQkib25nIiwJCQkoaW50
ICgqKSgpKTQsCQkwLA0KLQkicmVzdGFydCIsCSIiLAkJCTAsCQkwLA0KLQkw
DQorCXsicyIsCQkiaG9ydCIsCQkodm9pZCAoKikoKSkxLAkwfSwNCisJeyJt
IiwJCSJlZGl1bSIsCSh2b2lkICgqKSgpKTIsCTB9LA0KKwl7ImwiLAkJIm9u
ZyIsCQkodm9pZCAoKikoKSk0LAkwfSwNCisJeyJyZXN0YXJ0IiwJIiIsCQkw
LAkJMH0sDQorCXswLAkJMCwJCTAsCQkwfQ0KIH07DQogDQogc3RydWN0IGN2
bnRhYglTa2l0YWJbXSA9DQogew0KLQkibiIsCQkib3ZpY2UiLAkJKGludCAo
KikoKSkxLAkJMCwNCi0JImYiLAkJImFpciIsCQkJKGludCAoKikoKSkyLAkJ
MCwNCi0JImciLAkJIm9vZCIsCQkJKGludCAoKikoKSkzLAkJMCwNCi0JImUi
LAkJInhwZXJ0IiwJCShpbnQgKCopKCkpNCwJCTAsDQotCSJjIiwJCSJvbW1v
ZG9yZSIsCQkoaW50ICgqKSgpKTUsCQkwLA0KLQkiaSIsCQkibXBvc3NpYmxl
IiwJCShpbnQgKCopKCkpNiwJCTAsDQotCTANCisJeyJuIiwJCSJvdmljZSIs
CSh2b2lkICgqKSgpKTEsCTB9LA0KKwl7ImYiLAkJImFpciIsCQkodm9pZCAo
KikoKSkyLAkwfSwNCisJeyJnIiwJCSJvb2QiLAkJKHZvaWQgKCopKCkpMywJ
MH0sDQorCXsiZSIsCQkieHBlcnQiLAkodm9pZCAoKikoKSk0LAkwfSwNCisJ
eyJjIiwJCSJvbW1vZG9yZSIsCSh2b2lkICgqKSgpKTUsCTB9LA0KKwl7Imki
LAkJIm1wb3NzaWJsZSIsCSh2b2lkICgqKSgpKTYsCTB9LA0KKwl7MCwJCTAs
CQkwLAkJMH0NCiB9Ow0KIA0KLXNldHVwKCkNCit2b2lkDQorc2V0dXAodm9p
ZCkNCiB7DQogCXN0cnVjdCBjdm50YWIJCSpyOw0KIAlpbnQJCWksIGo7DQog
CWRvdWJsZQkJCWY7DQogCWludAkJCWQ7DQotCWludAkJCWZkOw0KIAlpbnQJ
CQlrbHVtcDsNCiAJaW50CQkJaXgsIGl5Ow0KIAlzdHJ1Y3QgcXVhZAkqcTsN
CkBAIC05OCw3ICsxMDAsNyBAQA0KIAlHYW1lLnNraWxsID0gKGxvbmcpIHIt
PnZhbHVlOw0KIAlHYW1lLnRvdXJuID0gMDsNCiAJZ2V0c3RycGFyKCJFbnRl
ciBhIHBhc3N3b3JkIiwgR2FtZS5wYXNzd2QsIDE0LCAwKTsNCi0JaWYgKHNl
cXVhbChHYW1lLnBhc3N3ZCwgInRvdXJuYW1lbnQiKSkNCisJaWYgKHN0cmNt
cChHYW1lLnBhc3N3ZCwgInRvdXJuYW1lbnQiKSA9PSAwKQ0KIAl7DQogCQln
ZXRzdHJwYXIoIkVudGVyIHRvdXJuYW1lbnQgY29kZSIsIEdhbWUucGFzc3dk
LCAxNCwgMCk7DQogCQlHYW1lLnRvdXJuID0gMTsNCkluZGV4OiBzZXR3YXJw
LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvaG9tZS9k
Y3ZzL3NyYy9nYW1lcy90cmVrL3NldHdhcnAuYyx2DQpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMg0KZGlmZiAtdSAtcjEuMiBzZXR3YXJwLmMNCi0tLSBzZXR3
YXJwLmMJMTcgSnVuIDIwMDMgMDQ6MjU6MjUgLTAwMDAJMS4yDQorKysgc2V0
d2FycC5jCTI4IE1hciAyMDA1IDE0OjQxOjU5IC0wMDAwDQpAQCAtMzUsOCAr
MzUsOCBAQA0KICAqICREcmFnb25GbHk6IHNyYy9nYW1lcy90cmVrL3NldHdh
cnAuYyx2IDEuMiAyMDAzLzA2LzE3IDA0OjI1OjI1IGRpbGxvbiBFeHAgJA0K
ICAqLw0KIA0KLSMgaW5jbHVkZQkidHJlay5oIg0KLSMgaW5jbHVkZQkiZ2V0
cGFyLmgiDQorI2luY2x1ZGUgInRyZWsuaCINCisjaW5jbHVkZSAiZ2V0cGFy
LmgiDQogDQogLyoNCiAqKiAgU0VUIFdBUlAgRkFDVE9SDQpAQCAtNDUsNyAr
NDUsOCBAQA0KICoqCWNoZWNrZWQgZm9yIGNvbnNpc3RhbmN5Lg0KICovDQog
DQotc2V0d2FycCgpDQordm9pZA0KK3NldHdhcnAodm9pZCkNCiB7DQogCWRv
dWJsZQl3YXJwZmFjOw0KIA0KQEAgLTUzLDkgKzU0LDE1IEBADQogCWlmICh3
YXJwZmFjIDwgMC4wKQ0KIAkJcmV0dXJuOw0KIAlpZiAod2FycGZhYyA8IDEu
MCkNCi0JCXJldHVybiAocHJpbnRmKCJNaW5pbXVtIHdhcnAgc3BlZWQgaXMg
MS4wXG4iKSk7DQorCXsNCisJCXByaW50ZigiTWluaW11bSB3YXJwIHNwZWVk
IGlzIDEuMFxuIik7DQorCQlyZXR1cm47DQorCX0NCiAJaWYgKHdhcnBmYWMg
PiAxMC4wKQ0KLQkJcmV0dXJuIChwcmludGYoIk1heGltdW0gc3BlZWQgaXMg
d2FycCAxMC4wXG4iKSk7DQorCXsNCisJCXByaW50ZigiTWF4aW11bSBzcGVl
ZCBpcyB3YXJwIDEwLjBcbiIpOw0KKwkJcmV0dXJuOw0KKwl9DQogCWlmICh3
YXJwZmFjID4gNi4wKQ0KIAkJcHJpbnRmKCJEYW1hZ2UgdG8gd2FycCBlbmdp
bmVzIG1heSBvY2N1ciBhYm92ZSB3YXJwIDYuMFxuIik7DQogCVNoaXAud2Fy
cCA9IHdhcnBmYWM7DQpJbmRleDogc2hpZWxkLmMNCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NClJDUyBmaWxlOiAvaG9tZS9kY3ZzL3NyYy9nYW1lcy90cmVr
L3NoaWVsZC5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4yDQpkaWZmIC11
IC1yMS4yIHNoaWVsZC5jDQotLS0gc2hpZWxkLmMJMTcgSnVuIDIwMDMgMDQ6
MjU6MjUgLTAwMDAJMS4yDQorKysgc2hpZWxkLmMJMjggTWFyIDIwMDUgMTQ6
NDA6NTAgLTAwMDANCkBAIC0zNSw4ICszNSw4IEBADQogICogJERyYWdvbkZs
eTogc3JjL2dhbWVzL3RyZWsvc2hpZWxkLmMsdiAxLjIgMjAwMy8wNi8xNyAw
NDoyNToyNSBkaWxsb24gRXhwICQNCiAgKi8NCiANCi0jIGluY2x1ZGUJInRy
ZWsuaCINCi0jIGluY2x1ZGUJImdldHBhci5oIg0KKyNpbmNsdWRlICJ0cmVr
LmgiDQorI2luY2x1ZGUgImdldHBhci5oIg0KIA0KIC8qDQogKiogIFNISUVM
RCBBTkQgQ0xPQUtJTkcgREVWSUNFIENPTlRST0wNCkBAIC01NywxOSArNTcs
MTggQEANCiANCiBzdHJ1Y3QgY3ZudGFiIFVkdGFiW10gPQ0KIHsNCi0JInUi
LAkJInAiLAkJCShpbnQgKCopKCkpMSwJCTAsDQotCSJkIiwJCSJvd24iLAkJ
CTAsCQkwLA0KLQkwDQorCXsidSIsCSJwIiwJKHZvaWQgKCopKCkpMSwJMH0s
DQorCXsiZCIsCSJvd24iLAkwLAkJMH0sDQorCXswLAkwLAkwLAkJMH0NCiB9
Ow0KIA0KLXNoaWVsZChmKQ0KLWludAlmOw0KK3ZvaWQNCitzaGllbGQoaW50
IGYpDQogew0KIAlpbnQJCWk7DQotCWNoYXIJCQljOw0KIAlzdHJ1Y3QgY3Zu
dGFiCQkqcjsNCiAJY2hhcgkJCXNbMTAwXTsNCi0JY2hhcgkJCSpkZXZpY2Us
ICpkZXYyLCAqZGV2MzsNCisJY29uc3QgY2hhcgkJKmRldmljZSwgKmRldjIs
ICpkZXYzOw0KIAlpbnQJCQlpbmQ7DQogCWNoYXIJCQkqc3RhdDsNCiANCkBA
IC03OSw3ICs3OCwxMCBAQA0KIAl7DQogCQkvKiBjbG9ha2luZyBkZXZpY2Ug
Ki8NCiAJCWlmIChTaGlwLnNoaXAgPT0gUVVFRU5FKQ0KLQkJCXJldHVybiAo
cHJpbnRmKCJZZSBGYWlyZSBRdWVlbmUgZG9lcyBub3QgaGF2ZSB0aGUgY2xv
YWtpbmcgZGV2aWNlLlxuIikpOw0KKwkJew0KKwkJCXByaW50ZigiWWUgRmFp
cmUgUXVlZW5lIGRvZXMgbm90IGhhdmUgdGhlIGNsb2FraW5nIGRldmljZS5c
biIpOw0KKwkJCXJldHVybjsNCisJCX0NCiAJCWRldmljZSA9ICJDbG9ha2lu
ZyBkZXZpY2UiOw0KIAkJZGV2MiA9ICJpcyI7DQogCQlpbmQgPSBDTE9BSzsN
CkBAIC0xMTQsOSArMTE2LDkgQEANCiAJZWxzZQ0KIAl7DQogCQlpZiAoKnN0
YXQpDQotCQkJKHZvaWQpc3ByaW50ZihzLCAiJXMgJXMgdXAuICBEbyB5b3Ug
d2FudCAlcyBkb3duIiwgZGV2aWNlLCBkZXYyLCBkZXYzKTsNCisJCQlzbnBy
aW50ZihzLCAxMDAsICIlcyAlcyB1cC4gIERvIHlvdSB3YW50ICVzIGRvd24i
LCBkZXZpY2UsIGRldjIsIGRldjMpOw0KIAkJZWxzZQ0KLQkJCSh2b2lkKXNw
cmludGYocywgIiVzICVzIGRvd24uICBEbyB5b3Ugd2FudCAlcyB1cCIsIGRl
dmljZSwgZGV2MiwgZGV2Myk7DQorCQkJc25wcmludGYocywgMTAwLCAiJXMg
JXMgZG93bi4gIERvIHlvdSB3YW50ICVzIHVwIiwgZGV2aWNlLCBkZXYyLCBk
ZXYzKTsNCiAJCWlmICghZ2V0eW5wYXIocykpDQogCQkJcmV0dXJuOw0KIAkJ
aSA9ICEqc3RhdDsNCkBAIC0xMzEsMTMgKzEzMywxNCBAQA0KIAkJcmV0dXJu
Ow0KIAl9DQogCWlmIChpKQ0KKwl7CQ0KIAkJaWYgKGYgPj0gMCkNCiAJCQlT
aGlwLmVuZXJneSAtPSBQYXJhbS5zaHVwZW5neTsNCiAJCWVsc2UNCiAJCQlT
aGlwLmNsb2FrZ29vZCA9IDA7DQorCX0NCiAJTW92ZS5mcmVlID0gMDsNCiAJ
aWYgKGYgPj0gMCkNCiAJCU1vdmUuc2hsZGNoZyA9IDE7DQogCSpzdGF0ID0g
aTsNCi0JcmV0dXJuOw0KIH0NCkluZGV4OiBzbm92YS5jDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hvbWUvZGN2cy9zcmMvZ2FtZXMv
dHJlay9zbm92YS5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4yDQpkaWZm
IC11IC1yMS4yIHNub3ZhLmMNCi0tLSBzbm92YS5jCTE3IEp1biAyMDAzIDA0
OjI1OjI1IC0wMDAwCTEuMg0KKysrIHNub3ZhLmMJMjYgTWFyIDIwMDUgMTk6
MDA6MzQgLTAwMDANCkBAIC0zNSw3ICszNSw4IEBADQogICogJERyYWdvbkZs
eTogc3JjL2dhbWVzL3RyZWsvc25vdmEuYyx2IDEuMiAyMDAzLzA2LzE3IDA0
OjI1OjI1IGRpbGxvbiBFeHAgJA0KICAqLw0KIA0KLSMgaW5jbHVkZQkidHJl
ay5oIg0KKyNpbmNsdWRlIDx1bmlzdGQuaD4NCisjaW5jbHVkZSAidHJlay5o
Ig0KIA0KIC8qDQogKiogIENBVVNFIFNVUEVSTk9WQSBUTyBPQ0NVUg0KQEAg
LTU4LDggKzU5LDggQEANCiAqKglvdmVycmlkZSBtb2RlLg0KICovDQogDQot
c25vdmEoeCwgeSkNCi1pbnQJeCwgeTsNCit2b2lkDQorc25vdmEoaW50IHgs
IGludCB5KQ0KIHsNCiAJaW50CQkJcXgsIHF5Ow0KIAlpbnQJCWl4LCBpeTsN
CkBAIC03MCw2ICs3MSw3IEBADQogDQogCWYgPSAwOw0KIAlpeCA9IHg7DQor
CWl5ID0geTsNCiAJaWYgKGl4IDwgMCkNCiAJew0KIAkJLyogY2hvb3NlIGEg
cXVhZHJhbnQgKi8NCkBAIC0xMDAsNyArMTAyLDYgQEANCiAJZWxzZQ0KIAl7
DQogCQkvKiBjdXJyZW50IHF1YWRyYW50ICovDQotCQlpeSA9IHk7DQogCQlx
eCA9IFNoaXAucXVhZHg7DQogCQlxeSA9IFNoaXAucXVhZHk7DQogCQlxID0g
JlF1YWRbcXhdW3F5XTsNCkBAIC0xNDAsMTIgKzE0MSwxMiBAQA0KIAkJLyog
RW50ZXJwcmlzZSBjYXVzZWQgc3VwZXJub3ZhICovDQogCQlHYW1lLmtpbGxz
ICs9IGR5Ow0KIAkJaWYgKHEtPmJhc2VzKQ0KLQkJCWtpbGxiKHF4LCBxeSwg
LTEpOw0KKwkJCWtpbGxiKHF4LCBxeSk7DQogCQlHYW1lLmtpbGxrICs9IGR4
Ow0KIAl9DQogCWVsc2UNCiAJCWlmIChxLT5iYXNlcykNCi0JCQlraWxsYihx
eCwgcXksIDApOw0KKwkJCWtpbGxiKHF4LCBxeSk7DQogCWtpbGxkKHF4LCBx
eSwgKHggPj0gMCkpOw0KIAlxLT5zdGFycyA9IC0xOw0KIAlxLT5rbGluZ3Mg
PSAwOw0KQEAgLTE1NCw1ICsxNTUsNCBAQA0KIAkJcHJpbnRmKCJMdWNreSBk
ZXZpbCwgdGhhdCBzdXBlcm5vdmEgZGVzdHJveWVkIHRoZSBsYXN0IGtsaW5n
b25cbiIpOw0KIAkJd2luKCk7DQogCX0NCi0JcmV0dXJuOw0KIH0NCkluZGV4
OiBzcnNjYW4uYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6
IC9ob21lL2RjdnMvc3JjL2dhbWVzL3RyZWsvc3JzY2FuLmMsdg0KcmV0cmll
dmluZyByZXZpc2lvbiAxLjINCmRpZmYgLXUgLXIxLjIgc3JzY2FuLmMNCi0t
LSBzcnNjYW4uYwkxNyBKdW4gMjAwMyAwNDoyNToyNSAtMDAwMAkxLjINCisr
KyBzcnNjYW4uYwkyOCBNYXIgMjAwNSAxNDoyNzowMCAtMDAwMA0KQEAgLTM1
LDggKzM1LDggQEANCiAgKiAkRHJhZ29uRmx5OiBzcmMvZ2FtZXMvdHJlay9z
cnNjYW4uYyx2IDEuMiAyMDAzLzA2LzE3IDA0OjI1OjI1IGRpbGxvbiBFeHAg
JA0KICAqLw0KIA0KLSMgaW5jbHVkZQkidHJlay5oIg0KLSMgaW5jbHVkZQki
Z2V0cGFyLmgiDQorI2luY2x1ZGUgInRyZWsuaCINCisjaW5jbHVkZSAiZ2V0
cGFyLmgiDQogDQogLyoNCiAqKiAgU0hPUlQgUkFOR0UgU0VOU09SIFNDQU4N
CkBAIC01Myw3ICs1Myw3IEBADQogKioJVGhlIGN1cnJlbnQgcXVhZHJhbnQg
aXMgZmlsbGVkIGluIG9uIHRoZSBjb21wdXRlciBjaGFydC4NCiAqLw0KIA0K
LWNoYXIJKkNvbG9yWzRdID0NCitjb25zdCBjaGFyICpDb2xvcls0XSA9DQog
ew0KIAkiR1JFRU4iLA0KIAkiRE9DS0VEIiwNCkBAIC02MSwxNiArNjEsMTQg
QEANCiAJIlJFRCINCiB9Ow0KIA0KLXNyc2NhbihmKQ0KLWludAlmOw0KK3Zv
aWQNCitzcnNjYW4oaW50IGYpDQogew0KIAlpbnQJCWksIGo7DQogCWludAkJ
c3RhdGluZm87DQotCWNoYXIJCQkqczsNCisJY29uc3QgY2hhcgkJKnM7DQog
CWludAkJCXBlcmNlbnQ7DQogCXN0cnVjdCBxdWFkCQkqcTsNCi0JZXh0ZXJu
IHN0cnVjdCBjdm50YWIJU2tpdGFiW107DQotCWV4dGVybiBzdHJ1Y3QgY3Zu
dGFiCUxlbnRhYltdOw0KIAlzdHJ1Y3QgY3ZudGFiCQkqcDsNCiANCiAJaWYg
KGYgPj0gMCAmJiBjaGVja19vdXQoU1JTQ0FOKSkNCkBAIC05MSwxMCArODks
MTEgQEANCiAJCWlmICghRXRjLmZhc3QpDQogCQkJcmV0dXJuOw0KIAl9DQor
CQ0KKwlxID0gJlF1YWRbU2hpcC5xdWFkeF1bU2hpcC5xdWFkeV07DQogCWlm
IChmID49IDApDQogCXsNCiAJCXByaW50ZigiXG5TaG9ydCByYW5nZSBzZW5z
b3Igc2NhblxuIik7DQotCQlxID0gJlF1YWRbU2hpcC5xdWFkeF1bU2hpcC5x
dWFkeV07DQogCQlxLT5zY2FubmVkID0gcS0+a2xpbmdzICogMTAwICsgcS0+
YmFzZXMgKiAxMCArIHEtPnN0YXJzOw0KIAkJcHJpbnRmKCIgICIpOw0KIAkJ
Zm9yIChpID0gMDsgaSA8IE5TRUNUUzsgaSsrKQ0KSW5kZXg6IHN5c3RlbW5h
bWUuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21l
L2RjdnMvc3JjL2dhbWVzL3RyZWsvc3lzdGVtbmFtZS5jLHYNCnJldHJpZXZp
bmcgcmV2aXNpb24gMS4yDQpkaWZmIC11IC1yMS4yIHN5c3RlbW5hbWUuYw0K
LS0tIHN5c3RlbW5hbWUuYwkxNyBKdW4gMjAwMyAwNDoyNToyNSAtMDAwMAkx
LjINCisrKyBzeXN0ZW1uYW1lLmMJMjggTWFyIDIwMDUgMTQ6NDA6MDggLTAw
MDANCkBAIC0zNSw3ICszNSw3IEBADQogICogJERyYWdvbkZseTogc3JjL2dh
bWVzL3RyZWsvc3lzdGVtbmFtZS5jLHYgMS4yIDIwMDMvMDYvMTcgMDQ6MjU6
MjUgZGlsbG9uIEV4cCAkDQogICovDQogDQotIyBpbmNsdWRlCSJ0cmVrLmgi
DQorI2luY2x1ZGUgInRyZWsuaCINCiANCiAvKg0KICoqICBSRVRSSUVWRSBU
SEUgU1RBUlNZU1RFTSBOQU1FDQpAQCAtNDgsOCArNDgsOCBAQA0KICoqCXN0
YXJzeXN0ZW1zLCBldGMuDQogKi8NCiANCi1jaGFyICpzeXN0ZW1uYW1lKHEx
KQ0KLXN0cnVjdCBxdWFkCSpxMTsNCitjb25zdCBjaGFyICoNCitzeXN0ZW1u
YW1lKHN0cnVjdCBxdWFkICpxMSkNCiB7DQogCXN0cnVjdCBxdWFkCSpxOw0K
IAlpbnQJCWk7DQpJbmRleDogdG9ycGVkLmMNCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NClJDUyBmaWxlOiAvaG9tZS9kY3ZzL3NyYy9nYW1lcy90cmVrL3Rv
cnBlZC5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4yDQpkaWZmIC11IC1y
MS4yIHRvcnBlZC5jDQotLS0gdG9ycGVkLmMJMTcgSnVuIDIwMDMgMDQ6MjU6
MjUgLTAwMDAJMS4yDQorKysgdG9ycGVkLmMJMjYgTWFyIDIwMDUgMTk6MDU6
NTIgLTAwMDANCkBAIC0zNSw4ICszNSwxMiBAQA0KICAqICREcmFnb25GbHk6
IHNyYy9nYW1lcy90cmVrL3RvcnBlZC5jLHYgMS4yIDIwMDMvMDYvMTcgMDQ6
MjU6MjUgZGlsbG9uIEV4cCAkDQogICovDQogDQotIyBpbmNsdWRlCTxzdGRp
by5oPg0KLSMgaW5jbHVkZQkidHJlay5oIg0KKyNpbmNsdWRlIDxzdGRsaWIu
aD4NCisjaW5jbHVkZSA8bWF0aC5oPg0KKyNpbmNsdWRlICJ0cmVrLmgiDQor
I2luY2x1ZGUgImdldHBhci5oIg0KKw0KK3N0YXRpYyBpbnQgcmFuZGNvdXJz
ZShpbnQgbik7DQogDQogLyoNCiAqKiAgUEhPVE9OIFRPUlBFRE8gQ09OVFJP
TA0KQEAgLTU3LDggKzYxLDggQEANCiAqKgl0aGUgbWlzZmlyZSBkYW1hZ2Vz
IHlvdXIgdG9ycGVkbyB0dWJlcy4NCiAqLw0KIA0KLQ0KLXRvcnBlZCgpDQor
dm9pZA0KK3RvcnBlZCh2b2lkKQ0KIHsNCiAJaW50CQlpeCwgaXk7DQogCWRv
dWJsZQkJCXgsIHksIGR4LCBkeTsNCkBAIC03MiwxMyArNzYsMTUgQEANCiAN
CiAJaWYgKFNoaXAuY2xvYWtlZCkNCiAJew0KLQkJcmV0dXJuIChwcmludGYo
IkZlZGVyYXRpb24gcmVndWxhdGlvbnMgZG8gbm90IHBlcm1pdCBhdHRhY2sg
d2hpbGUgY2xvYWtlZC5cbiIpKTsNCisJCXByaW50ZigiRmVkZXJhdGlvbiBy
ZWd1bGF0aW9ucyBkbyBub3QgcGVybWl0IGF0dGFjayB3aGlsZSBjbG9ha2Vk
LlxuIik7DQorCQlyZXR1cm47DQogCX0NCiAJaWYgKGNoZWNrX291dChUT1JQ
RUQpKQ0KIAkJcmV0dXJuOw0KIAlpZiAoU2hpcC50b3JwZWQgPD0gMCkNCiAJ
ew0KLQkJcmV0dXJuIChwcmludGYoIkFsbCBwaG90b24gdG9ycGVkb3MgZXhw
ZW5kZWRcbiIpKTsNCisJCXByaW50ZigiQWxsIHBob3RvbiB0b3JwZWRvcyBl
eHBlbmRlZFxuIik7DQorCQlyZXR1cm47DQogCX0NCiANCiAJLyogZ2V0IHRo
ZSBjb3Vyc2UgKi8NCkBAIC05OCw3ICsxMDQsNyBAQA0KIAkJLyogc2VlIGlm
IHRoZSB1c2VyIHdhbnRzIG9uZSAqLw0KIAkJaWYgKCF0ZXN0bmwoKSkNCiAJ
CXsNCi0JCQlrID0gdW5nZXRjKGNnZXRjKDApLCBzdGRpbik7DQorCQkJayA9
IHVuZ2V0YyhnZXRjaGFyKCksIHN0ZGluKTsNCiAJCQlpZiAoayA+PSAnMCcg
JiYgayA8PSAnOScpDQogCQkJCWJ1cnN0ID0gMTsNCiAJCX0NCkBAIC0xMTMs
NyArMTE5LDEwIEBADQogCQlpZiAoYnVyc3QgPD0gMCkNCiAJCQlyZXR1cm47
DQogCQlpZiAoYnVyc3QgPiAxNSkNCi0JCQlyZXR1cm4gKHByaW50ZigiTWF4
aW11bSBidXJzdCBhbmdsZSBpcyAxNSBkZWdyZWVzXG4iKSk7DQorCQl7DQor
CQkJcHJpbnRmKCJNYXhpbXVtIGJ1cnN0IGFuZ2xlIGlzIDE1IGRlZ3JlZXNc
biIpOw0KKwkJCXJldHVybjsNCisJCX0NCiAJfQ0KIAlzZWN0c2l6ZSA9IE5T
RUNUUzsNCiAJbiA9IC0xOw0KQEAgLTIxNSw4ICsyMjQsOCBAQA0KICoqCXRv
IHRoZSB0dWJlcywgZXRjLg0KICovDQogDQotcmFuZGNvdXJzZShuKQ0KLWlu
dAluOw0KK2ludA0KK3JhbmRjb3Vyc2UoaW50IG4pDQogew0KIAlkb3VibGUJ
CQlyOw0KIAlpbnQJCWQ7DQpJbmRleDogdHJlay5oDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQpSQ1MgZmlsZTogL2hvbWUvZGN2cy9zcmMvZ2FtZXMvdHJl
ay90cmVrLmgsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjENCmRpZmYgLXUg
LXIxLjEgdHJlay5oDQotLS0gdHJlay5oCTE3IEp1biAyMDAzIDAyOjQ5OjM2
IC0wMDAwCTEuMQ0KKysrIHRyZWsuaAkzMSBNYXIgMjAwNSAyMDo1MjozMSAt
MDAwMA0KQEAgLTUxLDIyICs1MSwxNSBAQA0KICoqCWFjdHVhbGx5IGFsbG9j
YXRlIHN0dWZmIGluICJleHRlcm5zLmMiDQogKi8NCiANCi0vKiBleHRlcm5h
bCBmdW5jdGlvbiBkZWZpbml0aW9ucyAqLw0KLWV4dGVybiBkb3VibGUJZnJh
bmYoKTsJLyogZmxvYXRpbmcgcmFuZG9tIG51bWJlciBmdW5jdGlvbiAqLw0K
LWV4dGVybiBkb3VibGUJc3FydCgpOwkJLyogc3F1YXJlIHJvb3QgKi8NCi1l
eHRlcm4gZG91YmxlCXNpbigpLCBjb3MoKTsJLyogdHJpZyBmdW5jdGlvbnMg
Ki8NCi1leHRlcm4gZG91YmxlCWF0YW4yKCk7CS8qIGZhbmN5IGFyYyB0YW5n
ZW50IGZ1bmN0aW9uICovDQotZXh0ZXJuIGRvdWJsZQlsb2coKTsJCS8qIGxv
ZyBiYXNlIGUgKi8NCi1leHRlcm4gZG91YmxlCXBvdygpOwkJLyogcG93ZXIg
ZnVuY3Rpb24gKi8NCi1leHRlcm4gZG91YmxlCWZhYnMoKTsJCS8qIGFic29s
dXRlIHZhbHVlIGZ1bmN0aW9uICovDQotZXh0ZXJuIGRvdWJsZQlleHAoKTsJ
CS8qIGV4cG9uZW50aWFsIGZ1bmN0aW9uICovDQorI2luY2x1ZGUgPHN0ZGlv
Lmg+DQorI2luY2x1ZGUgPHNldGptcC5oPg0KIA0KIC8qKioqKioqKioqKioq
KioqKioqKiogIEdBTEFYWSAgKioqKioqKioqKioqKioqKioqKioqKioqKiov
DQogDQogLyogZ2FsYWN0aWMgcGFyYW1ldGVycyAqLw0KLSMgZGVmaW5lCU5T
RUNUUwkJMTAJLyogZGltZW5zaW9ucyBvZiBxdWFkcmFudCBpbiBzZWN0b3Jz
ICovDQotIyBkZWZpbmUJTlFVQURTCQk4CS8qIGRpbWVuc2lvbiBvZiBnYWxh
enkgaW4gcXVhZHJhbnRzICovDQotIyBkZWZpbmUJTklOSEFCCQkzMgkvKiBu
dW1iZXIgb2YgcXVhZHJhbnRzIHdoaWNoIGFyZSBpbmhhYml0ZWQgKi8NCisj
ZGVmaW5lCU5TRUNUUwkJMTAJLyogZGltZW5zaW9ucyBvZiBxdWFkcmFudCBp
biBzZWN0b3JzICovDQorI2RlZmluZQlOUVVBRFMJCTgJLyogZGltZW5zaW9u
IG9mIGdhbGF6eSBpbiBxdWFkcmFudHMgKi8NCisjZGVmaW5lCU5JTkhBQgkJ
MzIJLyogbnVtYmVyIG9mIHF1YWRyYW50cyB3aGljaCBhcmUgaW5oYWJpdGVk
ICovDQogDQogc3RydWN0IHF1YWQJCS8qIGRlZmluaXRpb24gZm9yIGVhY2gg
cXVhZHJhbnQgKi8NCiB7DQpAQCAtNzgsOCArNzEsOCBAQA0KIAljaGFyCXFz
eXN0ZW1uYW1lOwkvKiBzdGFyc3lzdGVtIG5hbWUgKHNlZSBiZWxvdykgKi8N
CiB9Ow0KIA0KLSMgZGVmaW5lCVFfRElTVFJFU1NFRAkwMjAwDQotIyBkZWZp
bmUJUV9TWVNURU0JMDc3DQorI2RlZmluZQlRX0RJU1RSRVNTRUQJMDIwMA0K
KyNkZWZpbmUJUV9TWVNURU0JMDc3DQogDQogLyogIHN5c3RlbW5hbWUgY29u
dmVudGlvbnM6DQogICoJMSAtPiBOSU5IQUIJaW5kZXggaW50byBTeXN0ZW1u
YW1lIHRhYmxlIGZvciBsaXZlIHN5c3RlbS4NCkBAIC05NiwyMCArODksMjAg
QEANCiAqLw0KIA0KIC8qIGFzY2lpIG5hbWVzIG9mIHN5c3RlbXMgKi8NCi1l
eHRlcm4gY2hhcgkqU3lzdGVtbmFtZVtOSU5IQUJdOw0KK2V4dGVybiBjb25z
dCBjaGFyCSpTeXN0ZW1uYW1lW05JTkhBQl07DQogDQogLyogcXVhZHJhbnQg
ZGVmaW5pdGlvbiAqLw0KIHN0cnVjdCBxdWFkCVF1YWRbTlFVQURTXVtOUVVB
RFNdOw0KIA0KIC8qIGRlZmluZXMgZm9yIHNlY3RvciBtYXAgIChiZWxvdykg
Ki8NCi0jIGRlZmluZQlFTVBUWQkJJy4nDQotIyBkZWZpbmUJU1RBUgkJJyon
DQotIyBkZWZpbmUJQkFTRQkJJyMnDQotIyBkZWZpbmUJRU5URVJQUklTRQkn
RScNCi0jIGRlZmluZQlRVUVFTkUJCSdRJw0KLSMgZGVmaW5lCUtMSU5HT04J
CSdLJw0KLSMgZGVmaW5lCUlOSEFCSVQJCSdAJw0KLSMgZGVmaW5lCUhPTEUJ
CScgJw0KKyNkZWZpbmUJRU1QVFkJCScuJw0KKyNkZWZpbmUJU1RBUgkJJyon
DQorI2RlZmluZQlCQVNFCQknIycNCisjZGVmaW5lCUVOVEVSUFJJU0UJJ0Un
DQorI2RlZmluZQlRVUVFTkUJCSdRJw0KKyNkZWZpbmUJS0xJTkdPTgkJJ0sn
DQorI2RlZmluZQlJTkhBQklUCQknQCcNCisjZGVmaW5lCUhPTEUJCScgJw0K
IA0KIC8qIGN1cnJlbnQgc2VjdG9yIG1hcCAqLw0KIGNoYXIJU2VjdFtOU0VD
VFNdW05TRUNUU107DQpAQCAtMTE3LDU4ICsxMTAsNTggQEANCiANCiAvKioq
KioqKioqKioqKioqKioqKioqKioqIERFVklDRVMgKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLw0KIA0KLSMgZGVmaW5lCU5ERVYJCTE2CS8qIG1h
eCBudW1iZXIgb2YgZGV2aWNlcyAqLw0KKyNkZWZpbmUJTkRFVgkJMTYJLyog
bWF4IG51bWJlciBvZiBkZXZpY2VzICovDQogDQogLyogZGV2aWNlIHRva2Vu
cyAqLw0KLSMgZGVmaW5lCVdBUlAJCTAJLyogd2FycCBlbmdpbmVzICovDQot
IyBkZWZpbmUJU1JTQ0FOCQkxCS8qIHNob3J0IHJhbmdlIHNjYW5uZXJzICov
DQotIyBkZWZpbmUJTFJTQ0FOCQkyCS8qIGxvbmcgcmFuZ2Ugc2Nhbm5lcnMg
Ki8NCi0jIGRlZmluZQlQSEFTRVIJCTMJLyogcGhhc2VyIGNvbnRyb2wgKi8N
Ci0jIGRlZmluZQlUT1JQRUQJCTQJLyogcGhvdG9uIHRvcnBlZG8gY29udHJv
bCAqLw0KLSMgZGVmaW5lCUlNUFVMU0UJCTUJLyogaW1wdWxzZSBlbmdpbmVz
ICovDQotIyBkZWZpbmUJU0hJRUxECQk2CS8qIHNoaWVsZCBjb250cm9sICov
DQotIyBkZWZpbmUJQ09NUFVURVIJNwkvKiBvbiBib2FyZCBjb21wdXRlciAq
Lw0KLSMgZGVmaW5lCVNTUkFESU8JCTgJLyogc3Vic3BhY2UgcmFkaW8gKi8N
Ci0jIGRlZmluZQlMSUZFU1VQCQk5CS8qIGxpZmUgc3VwcG9ydCBzeXN0ZW1z
ICovDQotIyBkZWZpbmUJU0lOUwkJMTAJLyogU3BhY2UgSW5lcnRpYWwgTmF2
aWdhdGlvbiBTeXN0ZW0gKi8NCi0jIGRlZmluZQlDTE9BSwkJMTEJLyogY2xv
YWtpbmcgZGV2aWNlICovDQotIyBkZWZpbmUJWFBPUlRFUgkJMTIJLyogdHJh
bnNwb3J0ZXIgKi8NCi0jIGRlZmluZQlTSFVUVExFCQkxMwkvKiBzaHV0dGxl
Y3JhZnQgKi8NCisjZGVmaW5lCVdBUlAJCTAJLyogd2FycCBlbmdpbmVzICov
DQorI2RlZmluZQlTUlNDQU4JCTEJLyogc2hvcnQgcmFuZ2Ugc2Nhbm5lcnMg
Ki8NCisjZGVmaW5lCUxSU0NBTgkJMgkvKiBsb25nIHJhbmdlIHNjYW5uZXJz
ICovDQorI2RlZmluZQlQSEFTRVIJCTMJLyogcGhhc2VyIGNvbnRyb2wgKi8N
CisjZGVmaW5lCVRPUlBFRAkJNAkvKiBwaG90b24gdG9ycGVkbyBjb250cm9s
ICovDQorI2RlZmluZQlJTVBVTFNFCQk1CS8qIGltcHVsc2UgZW5naW5lcyAq
Lw0KKyNkZWZpbmUJU0hJRUxECQk2CS8qIHNoaWVsZCBjb250cm9sICovDQor
I2RlZmluZQlDT01QVVRFUgk3CS8qIG9uIGJvYXJkIGNvbXB1dGVyICovDQor
I2RlZmluZQlTU1JBRElPCQk4CS8qIHN1YnNwYWNlIHJhZGlvICovDQorI2Rl
ZmluZQlMSUZFU1VQCQk5CS8qIGxpZmUgc3VwcG9ydCBzeXN0ZW1zICovDQor
I2RlZmluZQlTSU5TCQkxMAkvKiBTcGFjZSBJbmVydGlhbCBOYXZpZ2F0aW9u
IFN5c3RlbSAqLw0KKyNkZWZpbmUJQ0xPQUsJCTExCS8qIGNsb2FraW5nIGRl
dmljZSAqLw0KKyNkZWZpbmUJWFBPUlRFUgkJMTIJLyogdHJhbnNwb3J0ZXIg
Ki8NCisjZGVmaW5lCVNIVVRUTEUJCTEzCS8qIHNodXR0bGVjcmFmdCAqLw0K
IA0KIC8qIGRldmljZSBuYW1lcyAqLw0KIHN0cnVjdCBkZXZpY2UNCiB7DQot
CWNoYXIJKm5hbWU7CQkvKiBkZXZpY2UgbmFtZSAqLw0KLQljaGFyCSpwZXJz
b247CS8qIHRoZSBwZXJzb24gd2hvIGZpeGVzIGl0ICovDQorCWNvbnN0IGNo
YXIJKm5hbWU7CQkvKiBkZXZpY2UgbmFtZSAqLw0KKwljb25zdCBjaGFyCSpw
ZXJzb247CS8qIHRoZSBwZXJzb24gd2hvIGZpeGVzIGl0ICovDQogfTsNCiAN
Ci1zdHJ1Y3QgZGV2aWNlCURldmljZVtOREVWXTsNCitleHRlcm4gc3RydWN0
IGRldmljZQlEZXZpY2VbTkRFVl07DQogDQogLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKiAgRVZFTlRTICAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLw0KIA0KLSMgZGVmaW5lCU5FVkVOVFMJCTEyCS8qIG51bWJlciBvZiBk
aWZmZXJlbnQgZXZlbnQgdHlwZXMgKi8NCisjZGVmaW5lCU5FVkVOVFMJCTEy
CS8qIG51bWJlciBvZiBkaWZmZXJlbnQgZXZlbnQgdHlwZXMgKi8NCiANCi0j
IGRlZmluZQlFX0xSVEIJCTEJLyogbG9uZyByYW5nZSB0cmFjdG9yIGJlYW0g
Ki8NCi0jIGRlZmluZQlFX0tBVFNCCQkyCS8qIEtsaW5nb24gYXR0YWNrcyBz
dGFyYmFzZSAqLw0KLSMgZGVmaW5lCUVfS0RFU0IJCTMJLyogS2xpbmdvbiBk
ZXN0cm95cyBzdGFyYmFzZSAqLw0KLSMgZGVmaW5lCUVfSVNTVUUJCTQJLyog
ZGlzdHJlc3MgY2FsbCBpcyBpc3N1ZWQgKi8NCi0jIGRlZmluZQlFX0VOU0xW
CQk1CS8qIEtsaW5nb25zIGVuc2xhdmUgYSBxdWFkcmFudCAqLw0KLSMgZGVm
aW5lCUVfUkVQUk8JCTYJLyogYSBLbGluZ29uIGlzIHJlcHJvZHVjZWQgKi8N
Ci0jIGRlZmluZQlFX0ZJWERWCQk3CS8qIGZpeCBhIGRldmljZSAqLw0KLSMg
ZGVmaW5lCUVfQVRUQUNLCTgJLyogS2xpbmdvbiBhdHRhY2sgZHVyaW5nIHJl
c3QgcGVyaW9kICovDQotIyBkZWZpbmUJRV9TTkFQCQk5CS8qIHRha2UgYSBz
bmFwc2hvdCBmb3IgdGltZSB3YXJwICovDQotIyBkZWZpbmUJRV9TTk9WQQkJ
MTAJLyogc3VwZXJub3ZhIG9jY3VycyAqLw0KLQ0KLSMgZGVmaW5lCUVfR0hP
U1QJCTAxMDAJLyogZ2hvc3Qgb2YgYSBkaXN0cmVzcyBjYWxsIGlmIHNzcmFk
aW8gb3V0ICovDQotIyBkZWZpbmUJRV9ISURERU4JMDIwMAkvKiBldmVudCB0
aGF0IGlzIHVucmVwb3J0YWJsZSBiZWNhdXNlIHNzcmFkaW8gb3V0ICovDQot
IyBkZWZpbmUJRV9FVkVOVAkJMDc3CS8qIG1hc2sgdG8gZ2V0IGV2ZW50IGNv
ZGUgKi8NCisjZGVmaW5lCUVfTFJUQgkJMQkvKiBsb25nIHJhbmdlIHRyYWN0
b3IgYmVhbSAqLw0KKyNkZWZpbmUJRV9LQVRTQgkJMgkvKiBLbGluZ29uIGF0
dGFja3Mgc3RhcmJhc2UgKi8NCisjZGVmaW5lCUVfS0RFU0IJCTMJLyogS2xp
bmdvbiBkZXN0cm95cyBzdGFyYmFzZSAqLw0KKyNkZWZpbmUJRV9JU1NVRQkJ
NAkvKiBkaXN0cmVzcyBjYWxsIGlzIGlzc3VlZCAqLw0KKyNkZWZpbmUJRV9F
TlNMVgkJNQkvKiBLbGluZ29ucyBlbnNsYXZlIGEgcXVhZHJhbnQgKi8NCisj
ZGVmaW5lCUVfUkVQUk8JCTYJLyogYSBLbGluZ29uIGlzIHJlcHJvZHVjZWQg
Ki8NCisjZGVmaW5lCUVfRklYRFYJCTcJLyogZml4IGEgZGV2aWNlICovDQor
I2RlZmluZQlFX0FUVEFDSwk4CS8qIEtsaW5nb24gYXR0YWNrIGR1cmluZyBy
ZXN0IHBlcmlvZCAqLw0KKyNkZWZpbmUJRV9TTkFQCQk5CS8qIHRha2UgYSBz
bmFwc2hvdCBmb3IgdGltZSB3YXJwICovDQorI2RlZmluZQlFX1NOT1ZBCQkx
MAkvKiBzdXBlcm5vdmEgb2NjdXJzICovDQorDQorI2RlZmluZQlFX0dIT1NU
CQkwMTAwCS8qIGdob3N0IG9mIGEgZGlzdHJlc3MgY2FsbCBpZiBzc3JhZGlv
IG91dCAqLw0KKyNkZWZpbmUJRV9ISURERU4JMDIwMAkvKiBldmVudCB0aGF0
IGlzIHVucmVwb3J0YWJsZSBiZWNhdXNlIHNzcmFkaW8gb3V0ICovDQorI2Rl
ZmluZQlFX0VWRU5UCQkwNzcJLyogbWFzayB0byBnZXQgZXZlbnQgY29kZSAq
Lw0KIA0KIHN0cnVjdCBldmVudA0KIHsNCi0JY2hhcgl4LCB5OwkJCS8qIGNv
b3JkaW5hdGVzICovDQorCWludAl4LCB5OwkJCS8qIGNvb3JkaW5hdGVzICov
DQogCWRvdWJsZQlkYXRlOwkJCS8qIHRyYXAgc3RhcmRhdGUgKi8NCiAJY2hh
cglldmNvZGU7CQkJLyogZXZlbnQgdHlwZSAqLw0KLQljaGFyCXN5c3RlbW5h
bWU7CQkvKiBzdGFyc3lzdGVtIG5hbWUgKi8NCisJaW50CXN5c3RlbW5hbWU7
CQkvKiBzdGFyc3lzdGVtIG5hbWUgKi8NCiB9Ow0KIC8qIHN5c3RlbW5hbWUg
Y29udmVudGlvbnM6DQogICoJMSAtPiBOSU5IQUIJaW5kZXggaW50byBTeXN0
ZW1uYW1lIHRhYmxlIGZvciByZXBvcnRlZCBkaXN0cmVzcyBjYWxscw0KQEAg
LTE4MCw3ICsxNzMsNyBAQA0KICAqCTAJCXVuYWxsb2NhdGVkDQogICovDQog
DQotIyBkZWZpbmUJTUFYRVZFTlRTCTI1CS8qIG1heCBudW1iZXIgb2YgY29u
Y3VycmVudGx5IHBlbmRpbmcgZXZlbnRzICovDQorI2RlZmluZQlNQVhFVkVO
VFMJMjUJLyogbWF4IG51bWJlciBvZiBjb25jdXJyZW50bHkgcGVuZGluZyBl
dmVudHMgKi8NCiANCiBzdHJ1Y3QgZXZlbnQJRXZlbnRbTUFYRVZFTlRTXTsJ
LyogZHluYW1pYyBldmVudCBsaXN0OyBvbmUgZW50cnkgcGVyIHBlbmRpbmcg
ZXZlbnQgKi8NCiANCkBAIC0xODgsMzUgKzE4MSwzNSBAQA0KIA0KIHN0cnVj
dCBrbGluZw0KIHsNCi0JY2hhcgl4LCB5OwkJLyogY29vcmRpbmF0ZXMgKi8N
CisJdW5zaWduZWQgY2hhciB4LCB5OwkvKiBjb29yZGluYXRlcyAqLw0KIAlp
bnQJcG93ZXI7CQkvKiBwb3dlciBsZWZ0ICovDQogCWRvdWJsZQlkaXN0OwkJ
LyogZGlzdGFuY2UgdG8gRW50ZXJwcmlzZSAqLw0KIAlkb3VibGUJYXZnZGlz
dDsJLyogYXZlcmFnZSBvdmVyIHRoaXMgbW92ZSAqLw0KIAljaGFyCXNybmRy
ZXE7CS8qIHNldCBpZiBzdXJyZW5kZXIgaGFzIGJlZW4gcmVxdWVzdGVkICov
DQogfTsNCiANCi0jIGRlZmluZQlNQVhLTFFVQUQJOQkvKiBtYXhpbXVtIGts
aW5nb25zIHBlciBxdWFkcmFudCAqLw0KKyNkZWZpbmUJTUFYS0xRVUFECTkJ
LyogbWF4aW11bSBrbGluZ29ucyBwZXIgcXVhZHJhbnQgKi8NCiANCiAvKioq
KioqKioqKioqKioqKioqKioqKiBNSVNDRUxMQU5FT1VTICoqKioqKioqKioq
KioqKioqKioqKioqKioqKi8NCiANCiAvKiBjb25kaXRpb24gY29kZXMgKi8N
Ci0jIGRlZmluZQlHUkVFTgkJMA0KLSMgZGVmaW5lCURPQ0tFRAkJMQ0KLSMg
ZGVmaW5lCVlFTExPVwkJMg0KLSMgZGVmaW5lCVJFRAkJMw0KKyNkZWZpbmUJ
R1JFRU4JCTANCisjZGVmaW5lCURPQ0tFRAkJMQ0KKyNkZWZpbmUJWUVMTE9X
CQkyDQorI2RlZmluZQlSRUQJCTMNCiANCiAvKiBzdGFyYmFzZSBjb29yZGlu
YXRlcyAqLw0KLSMgZGVmaW5lCU1BWEJBU0VTCTkJLyogbWF4aW11bSBudW1i
ZXIgb2Ygc3RhcmJhc2VzIGluIGdhbGF4eSAqLw0KKyNkZWZpbmUJTUFYQkFT
RVMJOQkvKiBtYXhpbXVtIG51bWJlciBvZiBzdGFyYmFzZXMgaW4gZ2FsYXh5
ICovDQogDQogLyogIGRpc3RyZXNzIGNhbGxzICAqLw0KLSMgZGVmaW5lCU1B
WERJU1RSCTUJLyogbWF4aW11bSBjb25jdXJyZW50IGRpc3RyZXNzIGNhbGxz
ICovDQorI2RlZmluZQlNQVhESVNUUgk1CS8qIG1heGltdW0gY29uY3VycmVu
dCBkaXN0cmVzcyBjYWxscyAqLw0KIA0KIC8qIHBoYXNlciBiYW5rcyAqLw0K
LSMgZGVmaW5lCU5CQU5LUwkJNgkvKiBudW1iZXIgb2YgcGhhc2VyIGJhbmtz
ICovDQorI2RlZmluZQlOQkFOS1MJCTYJLyogbnVtYmVyIG9mIHBoYXNlciBi
YW5rcyAqLw0KIA0KIHN0cnVjdCB4eQ0KIHsNCi0JY2hhcgl4LCB5OwkJLyog
Y29vcmRpbmF0ZXMgKi8NCisJdW5zaWduZWQgY2hhcgl4LCB5OwkvKiBjb29y
ZGluYXRlcyAqLw0KIH07DQogDQogDQpAQCAtMjQ1LDkgKzIzOCw5IEBADQog
CWludAlxdWFkeTsJCS8qIHF1YWRyYW50IHkgY29vcmQgKi8NCiAJaW50CXNl
Y3R4OwkJLyogc2VjdG9yIHggY29vcmQgKi8NCiAJaW50CXNlY3R5OwkJLyog
c2VjdG9yIHkgY29vcmQgKi8NCi0JY2hhcgljb25kOwkJLyogY29uZGl0aW9u
IGNvZGUgKi8NCisJdW5zaWduZWQgY2hhciBjb25kOwkvKiBjb25kaXRpb24g
Y29kZSAqLw0KIAljaGFyCXNpbnNiYWQ7CS8qIFNwYWNlIEluZXJ0aWFsIE5h
dmlnYXRpb24gU3lzdGVtIGNvbmRpdGlvbiAqLw0KLQljaGFyCSpzaGlwbmFt
ZTsJLyogbmFtZSBvZiBjdXJyZW50IHN0YXJzaGlwICovDQorCWNvbnN0IGNo
YXIgKnNoaXBuYW1lOwkvKiBuYW1lIG9mIGN1cnJlbnQgc3RhcnNoaXAgKi8N
CiAJY2hhcglzaGlwOwkJLyogY3VycmVudCBzdGFyc2hpcCAqLw0KIAlpbnQJ
ZGlzdHJlc3NlZDsJLyogbnVtYmVyIG9mIGRpc3RyZXNzIGNhbGxzICovDQog
fQlTaGlwOw0KQEAgLTMyMyw3ICszMTYsNyBAQA0KIC8qIG90aGVyIGluZm9y
bWF0aW9uIGtlcHQgaW4gYSBzbmFwc2hvdCAqLw0KIHN0cnVjdA0KIHsNCi0J
Y2hhcgliYXNlczsJCS8qIG51bWJlciBvZiBzdGFyYmFzZXMgKi8NCisJdW5z
aWduZWQgY2hhciBiYXNlczsJLyogbnVtYmVyIG9mIHN0YXJiYXNlcyAqLw0K
IAljaGFyCWtsaW5nczsJCS8qIG51bWJlciBvZiBrbGluZ29ucyAqLw0KIAlk
b3VibGUJZGF0ZTsJCS8qIHN0YXJkYXRlICovDQogCWRvdWJsZQl0aW1lOwkJ
LyogdGltZSBsZWZ0ICovDQpAQCAtMzM3LDcgKzMzMCw3IEBADQogc3RydWN0
DQogew0KIAlzdHJ1Y3Qga2xpbmcJa2xpbmdvbltNQVhLTFFVQURdOwkvKiBz
b3J0ZWQgS2xpbmdvbiBsaXN0ICovDQotCWNoYXIJCW5rbGluZzsJCQkvKiBu
dW1iZXIgb2YgS2xpbmdvbnMgaW4gdGhpcyBzZWN0b3IgKi8NCisJaW50CQlu
a2xpbmc7CQkJLyogbnVtYmVyIG9mIEtsaW5nb25zIGluIHRoaXMgc2VjdG9y
ICovDQogCQkJCQkJLyogPCAwIG1lYW5zIGF1dG9tYXRpYyBvdmVycmlkZSBt
b2RlICovDQogCWNoYXIJCWZhc3Q7CQkJLyogc2V0IGlmIHNwZWVkID4gMzAw
IGJhdWQgKi8NCiAJc3RydWN0IHh5CXN0YXJiYXNlOwkvKiBzdGFyYmFzZSBp
biBjdXJyZW50IHF1YWRyYW50ICovDQpAQCAtMzUxLDMyICszNDQsOTEgQEAN
CiAgKi8NCiANCiAvKiBLbGluZ29uIG1vdmUgaW5kaWNpZXMgKi8NCi0jIGRl
ZmluZQlLTV9PQgkJMAkvKiBPbGQgcXVhZHJhbnQsIEJlZm9yZSBhdHRhY2sg
Ki8NCi0jIGRlZmluZQlLTV9PQQkJMQkvKiBPbGQgcXVhZHJhbnQsIEFmdGVy
IGF0dGFjayAqLw0KLSMgZGVmaW5lCUtNX0VCCQkyCS8qIEVudGVyIHF1YWRy
YW50LCBCZWZvcmUgYXR0YWNrICovDQotIyBkZWZpbmUJS01fRUEJCTMJLyog
RW50ZXIgcXVhZHJhbnQsIEFmdGVyIGF0dGFjayAqLw0KLSMgZGVmaW5lCUtN
X0xCCQk0CS8qIExlYXZlIHF1YWRyYW50LCBCZWZvcmUgYXR0YWNrICovDQot
IyBkZWZpbmUJS01fTEEJCTUJLyogTGVhdmUgcXVhZHJhbnQsIEFmdGVyIGF0
dGFjayAqLw0KKyNkZWZpbmUJS01fT0IJCTAJLyogT2xkIHF1YWRyYW50LCBC
ZWZvcmUgYXR0YWNrICovDQorI2RlZmluZQlLTV9PQQkJMQkvKiBPbGQgcXVh
ZHJhbnQsIEFmdGVyIGF0dGFjayAqLw0KKyNkZWZpbmUJS01fRUIJCTIJLyog
RW50ZXIgcXVhZHJhbnQsIEJlZm9yZSBhdHRhY2sgKi8NCisjZGVmaW5lCUtN
X0VBCQkzCS8qIEVudGVyIHF1YWRyYW50LCBBZnRlciBhdHRhY2sgKi8NCisj
ZGVmaW5lCUtNX0xCCQk0CS8qIExlYXZlIHF1YWRyYW50LCBCZWZvcmUgYXR0
YWNrICovDQorI2RlZmluZQlLTV9MQQkJNQkvKiBMZWF2ZSBxdWFkcmFudCwg
QWZ0ZXIgYXR0YWNrICovDQogDQogLyogeW91IGxvc2UgY29kZXMgKi8NCi0j
IGRlZmluZQlMX05PVElNRQkxCS8qIHJhbiBvdXQgb2YgdGltZSAqLw0KLSMg
ZGVmaW5lCUxfTk9FTkdZCTIJLyogcmFuIG91dCBvZiBlbmVyZ3kgKi8NCi0j
IGRlZmluZQlMX0RTVFJZRAkzCS8qIGRlc3Ryb3llZCBieSBhIEtsaW5nb24g
Ki8NCi0jIGRlZmluZQlMX05FR0VOQgk0CS8qIHJhbiBpbnRvIHRoZSBuZWdh
dGl2ZSBlbmVyZ3kgYmFycmllciAqLw0KLSMgZGVmaW5lCUxfU1VJQ0lECTUJ
LyogZGVzdHJveWVkIGluIGEgbm92YSAqLw0KLSMgZGVmaW5lCUxfU05PVkEJ
CTYJLyogZGVzdHJveWVkIGluIGEgc3VwZXJub3ZhICovDQotIyBkZWZpbmUJ
TF9OT0xJRkUJNwkvKiBsaWZlIHN1cHBvcnQgZGllZCAoc28gZGlkIHlvdSkg
Ki8NCi0jIGRlZmluZQlMX05PSEVMUAk4CS8qIHlvdSBjb3VsZCBub3QgYmUg
cmVtYXRlcmlhbGl6ZWQgKi8NCi0jIGRlZmluZQlMX1RPT0ZBU1QJOQkvKiBw
cmV0dHkgc3R1cGlkIGdvaW5nIGF0IHdhcnAgMTAgKi8NCi0jIGRlZmluZQlM
X1NUQVIJCTEwCS8qIHJhbiBpbnRvIGEgc3RhciAqLw0KLSMgZGVmaW5lCUxf
RFNUUkNUCTExCS8qIHNlbGYgZGVzdHJ1Y3RlZCAqLw0KLSMgZGVmaW5lCUxf
Q0FQVFVSRUQJMTIJLyogY2FwdHVyZWQgYnkgS2xpbmdvbnMgKi8NCi0jIGRl
ZmluZQlMX05PQ1JFVwkxMwkvKiB5b3UgcmFuIG91dCBvZiBjcmV3ICovDQor
I2RlZmluZQlMX05PVElNRQkxCS8qIHJhbiBvdXQgb2YgdGltZSAqLw0KKyNk
ZWZpbmUJTF9OT0VOR1kJMgkvKiByYW4gb3V0IG9mIGVuZXJneSAqLw0KKyNk
ZWZpbmUJTF9EU1RSWUQJMwkvKiBkZXN0cm95ZWQgYnkgYSBLbGluZ29uICov
DQorI2RlZmluZQlMX05FR0VOQgk0CS8qIHJhbiBpbnRvIHRoZSBuZWdhdGl2
ZSBlbmVyZ3kgYmFycmllciAqLw0KKyNkZWZpbmUJTF9TVUlDSUQJNQkvKiBk
ZXN0cm95ZWQgaW4gYSBub3ZhICovDQorI2RlZmluZQlMX1NOT1ZBCQk2CS8q
IGRlc3Ryb3llZCBpbiBhIHN1cGVybm92YSAqLw0KKyNkZWZpbmUJTF9OT0xJ
RkUJNwkvKiBsaWZlIHN1cHBvcnQgZGllZCAoc28gZGlkIHlvdSkgKi8NCisj
ZGVmaW5lCUxfTk9IRUxQCTgJLyogeW91IGNvdWxkIG5vdCBiZSByZW1hdGVy
aWFsaXplZCAqLw0KKyNkZWZpbmUJTF9UT09GQVNUCTkJLyogcHJldHR5IHN0
dXBpZCBnb2luZyBhdCB3YXJwIDEwICovDQorI2RlZmluZQlMX1NUQVIJCTEw
CS8qIHJhbiBpbnRvIGEgc3RhciAqLw0KKyNkZWZpbmUJTF9EU1RSQ1QJMTEJ
Lyogc2VsZiBkZXN0cnVjdGVkICovDQorI2RlZmluZQlMX0NBUFRVUkVECTEy
CS8qIGNhcHR1cmVkIGJ5IEtsaW5nb25zICovDQorI2RlZmluZQlMX05PQ1JF
VwkxMwkvKiB5b3UgcmFuIG91dCBvZiBjcmV3ICovDQogDQogLyoqKioqKioq
KioqKioqKioqKiAgQ09NUElMRSBPUFRJT05TICAqKioqKioqKioqKioqKioq
KioqKioqKi8NCiANCiAvKiBUcmFjZSBpbmZvICovDQotIyBkZWZpbmUJeFRS
QUNFCQkxDQorI2RlZmluZQl4VFJBQ0UJCTENCiBpbnQJVHJhY2U7DQogDQot
ZXh0ZXJuIGNoYXIJKnN5c3RlbW5hbWUoKTsNCitleHRlcm4gam1wX2J1ZiAJ
CWVudjsNCitleHRlcm4gc3RydWN0IGN2bnRhYglTa2l0YWJbXTsNCitleHRl
cm4gc3RydWN0IGN2bnRhYglMZW50YWJbXTsNCisNCit2b2lkCWFiYW5kb24o
dm9pZCk7DQordm9pZAlhdHRhY2soaW50KTsNCit2b2lkCWF1dG92ZXIodm9p
ZCk7DQordm9pZAljYXB0dXJlKHZvaWQpOw0KK2ludAljaGVja19vdXQoaW50
KTsNCit2b2lkCWNoZWNrY29uZCh2b2lkKTsNCit2b2lkCWNvbXBrbGRpc3Qo
aW50KTsNCit2b2lkCWNvbXB1dGVyKHZvaWQpOw0KK3ZvaWQJZGFtYWdlKGlu
dCwgZG91YmxlKTsNCitpbnQJZGFtYWdlZChpbnQpOw0KK3ZvaWQJZGNyZXB0
KHZvaWQpOw0KK3ZvaWQJZGVzdHJ1Y3Qodm9pZCk7DQordm9pZAlkb2NrKHZv
aWQpOw0KK3ZvaWQJZHVtcGdhbWUodm9pZCk7DQordm9pZAlkdW1wbWUoaW50
KTsNCitpbnQJZHVtcHNzcmFkaW8odm9pZCk7DQoraW50CWV2ZW50cyhpbnQp
Ow0KK2RvdWJsZQlmcmFuZih2b2lkKTsNCit2b2lkCWhlbHAodm9pZCk7DQor
dm9pZAlpbXB1bHNlKHZvaWQpOw0KK3ZvaWQJaW5pdHF1YWQoaW50KTsNCit2
b2lkCWtpbGxrKGludCwgaW50KTsNCit2b2lkCWtpbGxiKGludCwgaW50KTsN
Cit2b2lkCWtpbGxzKGludCwgaW50LCBpbnQpOw0KK3ZvaWQJa2lsbGQoaW50
LCBpbnQsIGludCk7DQordm9pZAlrbG1vdmUoaW50KTsNCit2b2lkCWxvc2Uo
aW50KTsNCit2b2lkCWxyc2Nhbih2b2lkKTsNCitkb3VibGUJbW92ZShpbnQs
IGludCwgZG91YmxlLCBkb3VibGUpOw0KK3ZvaWQJbm92YShpbnQsIGludCk7
DQordm9pZAlvdXQoaW50KTsNCit2b2lkCXBoYXNlcih2b2lkKTsNCit2b2lk
CXBsYXkodm9pZCk7DQordm9pZAlyYW0oaW50LCBpbnQpOw0KK2ludAlyYW5m
KGludCk7DQordm9pZAlyZXNjaGVkdWxlKHN0cnVjdCBldmVudCAqLCBkb3Vi
bGUpOw0KK3ZvaWQJcmVzdCh2b2lkKTsNCitpbnQJcmVzdGFydGdhbWUodm9p
ZCk7DQorc3RydWN0IGV2ZW50ICpzY2hlZHVsZShpbnQsIGRvdWJsZSwgY2hh
ciwgY2hhciwgY2hhcik7DQorbG9uZwlzY29yZSh2b2lkKTsNCit2b2lkCXNl
Y3RvcihpbnQgKiwgaW50ICopOw0KK3ZvaWQJc2V0dXAodm9pZCk7DQordm9p
ZAlzZXR3YXJwKHZvaWQpOw0KK3ZvaWQJc2hpZWxkKGludCk7DQordm9pZAlz
bm92YShpbnQsIGludCk7DQordm9pZAlzcnNjYW4oaW50KTsNCit2b2lkCXN5
c2Vycihjb25zdCBjaGFyICosIC4uLik7DQorY29uc3QgY2hhciAqc3lzdGVt
bmFtZShzdHJ1Y3QgcXVhZCAqKTsNCit2b2lkCXRvcnBlZCh2b2lkKTsNCit2
b2lkCXVuZG9jayh2b2lkKTsNCit2b2lkCXVuc2NoZWR1bGUoc3RydWN0IGV2
ZW50ICopOw0KK3ZvaWQJdmlzdWFsKHZvaWQpOw0KK3ZvaWQJd2FycChpbnQs
IGludCwgZG91YmxlKTsNCit2b2lkCXdpbih2b2lkKTsNCit2b2lkCXhyZXNj
aGVkKHN0cnVjdCBldmVudCAqLCBpbnQsIGludCk7DQorc3RydWN0IGV2ZW50
ICp4c2NoZWQoaW50LCBpbnQsIGludCwgaW50LCBpbnQpOw0KSW5kZXg6IHV0
aWxpdHkuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9o
b21lL2RjdnMvc3JjL2dhbWVzL3RyZWsvdXRpbGl0eS5jLHYNCnJldHJpZXZp
bmcgcmV2aXNpb24gMS4yDQpkaWZmIC11IC1yMS4yIHV0aWxpdHkuYw0KLS0t
IHV0aWxpdHkuYwkxNyBKdW4gMjAwMyAwNDoyNToyNSAtMDAwMAkxLjINCisr
KyB1dGlsaXR5LmMJMzEgTWFyIDIwMDUgMjA6Mjk6MTkgLTAwMDANCkBAIC0z
NSwxMTYgKzM1LDI3IEBADQogICogJERyYWdvbkZseTogc3JjL2dhbWVzL3Ry
ZWsvdXRpbGl0eS5jLHYgMS4yIDIwMDMvMDYvMTcgMDQ6MjU6MjUgZGlsbG9u
IEV4cCAkDQogICovDQogDQotLyoNCi0qKiAgQVNTT1JURUQgVVRJTElUWSBS
T1VUSU5FUw0KLSovDQotDQotLyoNCi0qKiAgQkxPQ0sgTU9WRQ0KLSoqDQot
KioJTW92ZXMgYSBibG9jayBvZiBzdG9yYWdlIG9mIGxlbmd0aCBgbCcgYnl0
ZXMgZnJvbSB0aGUgZGF0YQ0KLSoqCWFyZWEgcG9pbnRlZCB0byBieSBgYScg
dG8gdGhlIGFyZWEgcG9pbnRlZCB0byBieSBgYicuDQotKioJUmV0dXJucyB0
aGUgYWRkcmVzcyBvZiB0aGUgYnl0ZSBmb2xsb3dpbmcgdGhlIGBiJyBmaWVs
ZC4NCi0qKglPdmVyZmxvdyBvZiBgYicgaXMgbm90IHRlc3RlZC4NCi0qLw0K
LQ0KLWNoYXIgKmJtb3ZlKGEsIGIsIGwpDQotY2hhcgkqYSwgKmI7DQotaW50
CWw7DQotew0KLQlpbnQJCW47DQotCWNoYXIJCSpwLCAqcTsNCi0NCi0JcCA9
IGE7DQotCXEgPSBiOw0KLQluID0gbDsNCi0Jd2hpbGUgKG4tLSkNCi0JCSpx
KysgPSAqcCsrOw0KLQlyZXR1cm4gKHEpOw0KLX0NCi0NCi0NCi0vKg0KLSoq
ICBTVFJJTkcgRVFVQUxJVFkgVEVTVA0KLSoqCW51bGwtdGVybWluYXRlZCBz
dHJpbmdzIGBhJyBhbmQgYGInIGFyZSB0ZXN0ZWQgZm9yDQotKioJYWJzb2x1
dGUgZXF1YWxpdHkuDQotKioJcmV0dXJucyBvbmUgaWYgZXF1YWwsIHplcm8g
b3RoZXJ3aXNlLg0KLSovDQotDQotc2VxdWFsKGEsIGIpDQotY2hhcgkqYSwg
KmI7DQotew0KLQljaGFyCQkqcCwgKnE7DQotDQotCXAgPSBhOw0KLQlxID0g
YjsNCi0Jd2hpbGUgKCpwIHx8ICpxKQ0KLQkJaWYgKCpwKysgIT0gKnErKykN
Ci0JCQlyZXR1cm4oMCk7DQotCXJldHVybigxKTsNCi19DQotDQotDQotLyoN
Ci0qKiAgU1RSSU5HIENPTkNBVEVOQVRFDQotKioNCi0qKglUaGUgc3RyaW5n
cyBgczEnIGFuZCBgczInIGFyZSBjb25jYXRlbmF0ZWQgYW5kIHN0b3JlZCBp
bnRvDQotKioJYHMzJy4gIEl0IGlzIG9rIGZvciBgczEnIHRvIGVxdWFsIGBz
MycsIGJ1dCB0ZXJyaWJsZSB0aGluZ3MNCi0qKgl3aWxsIGhhcHBlbiBpZiBg
czInIGVxdWFscyBgczMnLiAgVGhlIHJldHVybiB2YWx1ZSBpcyBpcyBhDQot
KioJcG9pbnRlciB0byB0aGUgZW5kIG9mIGBzMycgZmllbGQuDQotKi8NCi0N
Ci1jaGFyICpjb25jYXQoczEsIHMyLCBzMykNCi1jaGFyCSpzMSwgKnMyLCAq
czM7DQotew0KLQljaGFyCQkqcDsNCi0JY2hhcgkJKnE7DQotDQotCXAgPSBz
MzsNCi0JcSA9IHMxOw0KLQl3aGlsZSAoKnEpDQotCQkqcCsrID0gKnErKzsN
Ci0JcSA9IHMyOw0KLQl3aGlsZSAoKnEpDQotCQkqcCsrID0gKnErKzsNCi0J
KnAgPSAwOw0KLQlyZXR1cm4gKHApOw0KLX0NCi0NCi0NCi0vKg0KLSoqICBG
SU5EIFNUUklORyBMRU5HVEgNCi0qKg0KLSoqCVRoZSBsZW5ndGggb2Ygc3Ry
aW5nIGBzJyAoZXhjbHVkaW5nIHRoZSBudWxsIGJ5dGUgd2hpY2gNCi0qKgkJ
dGVybWluYXRlcyB0aGUgc3RyaW5nKSBpcyByZXR1cm5lZC4NCi0qLw0KLQ0K
LWxlbmd0aChzKQ0KLWNoYXIJKnM7DQotew0KLQlpbnQJbDsNCi0JY2hhcgkq
cDsNCi0NCi0JbCA9IDA7DQotCXAgPSBzOw0KLQl3aGlsZSAoKnArKykNCi0J
CWwrKzsNCi0JcmV0dXJuKGwpOw0KLX0NCisjaW5jbHVkZSA8c3RkbGliLmg+
DQorI2luY2x1ZGUgPHN0ZGFyZy5oPg0KKyNpbmNsdWRlIDxlcnJuby5oPg0K
KyNpbmNsdWRlICJ0cmVrLmgiDQogDQogDQogLyoNCiAqKiAgU1lTVEVNIEVS
Uk9SDQogKi8NCiANCi1zeXNlcnIocDAsIHAxLCBwMiwgcDMsIHA0LCBwNSkN
Cit2b2lkDQorc3lzZXJyKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQ0KIHsNCi0J
ZXh0ZXJuIGludAllcnJubzsNCisJdmFfbGlzdAl2YTsNCiANCisJdmFfc3Rh
cnQodmEsIGZtdCk7DQogCXByaW50ZigiXG5cMDdUUkVLIFNZU0VSUjogIik7
DQotCXByaW50ZihwMCwgcDEsIHAyLCBwMywgcDQsIHA1KTsNCisJdnByaW50
ZihmbXQsIHZhKTsNCiAJcHJpbnRmKCJcbiIpOw0KIAlpZiAoZXJybm8pDQog
CQlwcmludGYoIlx0c3lzdGVtIGVycm9yICVkXG4iLCBlcnJubyk7DQorCXZh
X2VuZCh2YSk7DQogCWV4aXQoMSk7DQogfQ0KSW5kZXg6IHZpc3VhbC5jDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hvbWUvZGN2cy9z
cmMvZ2FtZXMvdHJlay92aXN1YWwuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMg0KZGlmZiAtdSAtcjEuMiB2aXN1YWwuYw0KLS0tIHZpc3VhbC5jCTE3
IEp1biAyMDAzIDA0OjI1OjI1IC0wMDAwCTEuMg0KKysrIHZpc3VhbC5jCTI2
IE1hciAyMDA1IDE4OjI2OjM4IC0wMDAwDQpAQCAtMzUsNyArMzUsOCBAQA0K
ICAqICREcmFnb25GbHk6IHNyYy9nYW1lcy90cmVrL3Zpc3VhbC5jLHYgMS4y
IDIwMDMvMDYvMTcgMDQ6MjU6MjUgZGlsbG9uIEV4cCAkDQogICovDQogDQot
IyBpbmNsdWRlCSJ0cmVrLmgiDQorI2luY2x1ZGUgInRyZWsuaCINCisjaW5j
bHVkZSAiZ2V0cGFyLmgiDQogDQogLyoNCiAqKiAgVklTVUFMIFNDQU4NCkBA
IC00OSwyMCArNTAsMjEgQEANCiAvKiBUaGlzIHN0cnVjdFtdIGhhcyB0aGUg
ZGVsdGEgeCwgZGVsdGEgeSBmb3IgcGFydGljdWxhciBkaXJlY3Rpb25zICov
DQogc3RydWN0IHh5CVZpc2RlbHRhWzExXSA9DQogew0KLQktMSwJLTEsDQot
CS0xLAkgMCwNCi0JLTEsCSAxLA0KLQkgMCwJIDEsDQotCSAxLAkgMSwNCi0J
IDEsCSAwLA0KLQkgMSwJLTEsDQotCSAwLAktMSwNCi0JLTEsCS0xLA0KLQkt
MSwJIDAsDQotCS0xLAkgMQ0KKwl7LTEsCS0xfSwNCisJey0xLAkgMH0sDQor
CXstMSwJIDF9LA0KKwl7IDAsCSAxfSwNCisJeyAxLAkgMX0sDQorCXsgMSwJ
IDB9LA0KKwl7IDEsCS0xfSwNCisJeyAwLAktMX0sDQorCXstMSwJLTF9LA0K
Kwl7LTEsCSAwfSwNCisJey0xLAkgMX0NCiB9Ow0KIA0KLXZpc3VhbCgpDQor
dm9pZA0KK3Zpc3VhbCh2b2lkKQ0KIHsNCiAJaW50CQlpeCwgaXk7DQogCWlu
dAkJCWNvOw0KSW5kZXg6IHdhcnAuYw0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KUkNTIGZpbGU6IC9ob21lL2RjdnMvc3JjL2dhbWVzL3RyZWsvd2FycC5j
LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4yDQpkaWZmIC11IC1yMS4yIHdh
cnAuYw0KLS0tIHdhcnAuYwkxNyBKdW4gMjAwMyAwNDoyNToyNSAtMDAwMAkx
LjINCisrKyB3YXJwLmMJMzEgTWFyIDIwMDUgMjA6NTM6NDAgLTAwMDANCkBA
IC0zNSw3ICszNSwxMCBAQA0KICAqICREcmFnb25GbHk6IHNyYy9nYW1lcy90
cmVrL3dhcnAuYyx2IDEuMiAyMDAzLzA2LzE3IDA0OjI1OjI1IGRpbGxvbiBF
eHAgJA0KICAqLw0KIA0KLSMgaW5jbHVkZQkidHJlay5oIg0KKyNpbmNsdWRl
IDx1bmlzdGQuaD4NCisjaW5jbHVkZSA8c3RyaW5nLmg+DQorI2luY2x1ZGUg
InRyZWsuaCINCisjaW5jbHVkZSAiZ2V0cGFyLmgiDQogDQogLyoNCiAqKiAg
TU9WRSBVTkRFUiBXQVJQIFBPV0VSDQpAQCAtNTMsOSArNTYsOCBAQA0KICoq
CWNhc2UsIHRoZXJlIGlzIGNvZGUgdG8gaGFuZGxlIHRpbWUgd2FycHMsIGV0
Yy4NCiAqLw0KIA0KLXdhcnAoZmwsIGMsIGQpDQotaW50CWZsLCBjOw0KLWRv
dWJsZQlkOw0KK3ZvaWQNCit3YXJwKGludCBmbCwgaW50IGMsIGRvdWJsZSBk
KQ0KIHsNCiAJaW50CQkJY291cnNlOw0KIAlkb3VibGUJCQlwb3dlcjsNCkBA
IC02NSwxMyArNjcsMTcgQEANCiAJZG91YmxlCQkJZnJhYzsNCiAJaW50CQlw
ZXJjZW50Ow0KIAlpbnQJCWk7DQotCWV4dGVybiBkb3VibGUJCW1vdmUoKTsN
CisJY2hhcgkJKnA7DQogDQogCWlmIChTaGlwLmNvbmQgPT0gRE9DS0VEKQ0K
LQkJcmV0dXJuIChwcmludGYoIiVzIGlzIGRvY2tlZFxuIiwgU2hpcC5zaGlw
bmFtZSkpOw0KKwl7DQorCQlwcmludGYoIiVzIGlzIGRvY2tlZFxuIiwgU2hp
cC5zaGlwbmFtZSk7DQorCQlyZXR1cm47DQorCX0NCiAJaWYgKGRhbWFnZWQo
V0FSUCkpDQogCXsNCi0JCXJldHVybiAob3V0KFdBUlApKTsNCisJCW91dChX
QVJQKTsNCisJCXJldHVybjsNCiAJfQ0KIAlpZiAoZmwgPCAwKQ0KIAl7DQpA
QCAtMTM0LDcgKzE0MCw4IEBADQogCXNsZWVwKDQpOw0KIAlpZiAocmFuZigx
MDApID49IDEwMCAqIGRpc3QpDQogCXsNCi0JCXJldHVybiAocHJpbnRmKCJF
cXVpbGlicml1bSByZXN0b3JlZCAtLSBhbGwgc3lzdGVtcyBub3JtYWxcbiIp
KTsNCisJCXByaW50ZigiRXF1aWxpYnJpdW0gcmVzdG9yZWQgLS0gYWxsIHN5
c3RlbXMgbm9ybWFsXG4iKTsNCisJCXJldHVybjsNCiAJfQ0KIA0KIAkvKiBz
ZWxlY3QgYSBiaXp6YXJlIHRoaW5nIHRvIGhhcHBlbiB0byB1cyAqLw0KQEAg
LTE2MCwxMCArMTY3LDEwIEBADQogDQogCQkvKiBzL2hlIGdvdCBsdWNreTog
YSBuZWdhdGl2ZSB0aW1lIHBvcnRhbCAqLw0KIAkJdGltZSA9IE5vdy5kYXRl
Ow0KLQkJaSA9IChpbnQpIEV0Yy5zbmFwc2hvdDsNCi0JCWJtb3ZlKGksIFF1
YWQsIHNpemVvZiBRdWFkKTsNCi0JCWJtb3ZlKGkgKz0gc2l6ZW9mIFF1YWQs
IEV2ZW50LCBzaXplb2YgRXZlbnQpOw0KLQkJYm1vdmUoaSArPSBzaXplb2Yg
RXZlbnQsICZOb3csIHNpemVvZiBOb3cpOw0KKwkJcCA9IEV0Yy5zbmFwc2hv
dDsNCisJCW1lbW1vdmUoUXVhZCwgcCwgc2l6ZW9mKFF1YWQpKTsNCisJCW1l
bW1vdmUoRXZlbnQsIHAgKz0gc2l6ZW9mKFF1YWQpLCBzaXplb2YoRXZlbnQp
KTsNCisJCW1lbW1vdmUoJk5vdywgcCArPSBzaXplb2YoRXZlbnQpLCBzaXpl
b2YoTm93KSk7DQogCQlwcmludGYoIk5lZ2F0aXZlIHRpbWUgcG9ydGFsIGVu
dGVyZWQgLS0gaXQgaXMgbm93IFN0YXJkYXRlICUuMmZcbiIsDQogCQkJTm93
LmRhdGUpOw0KIAkJZm9yIChpID0gMDsgaSA8IE1BWEVWRU5UUzsgaSsrKQ0K
SW5kZXg6IHdpbi5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmls
ZTogL2hvbWUvZGN2cy9zcmMvZ2FtZXMvdHJlay93aW4uYyx2DQpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMg0KZGlmZiAtdSAtcjEuMiB3aW4uYw0KLS0tIHdp
bi5jCTE3IEp1biAyMDAzIDA0OjI1OjI1IC0wMDAwCTEuMg0KKysrIHdpbi5j
CTI2IE1hciAyMDA1IDE5OjAxOjAwIC0wMDAwDQpAQCAtMzUsOSArMzUsOSBA
QA0KICAqICREcmFnb25GbHk6IHNyYy9nYW1lcy90cmVrL3dpbi5jLHYgMS4y
IDIwMDMvMDYvMTcgMDQ6MjU6MjUgZGlsbG9uIEV4cCAkDQogICovDQogDQot
IyBpbmNsdWRlCSJ0cmVrLmgiDQotIyBpbmNsdWRlCSJnZXRwYXIuaCINCi0j
IGluY2x1ZGUJPHNldGptcC5oPg0KKyNpbmNsdWRlIDx1bmlzdGQuaD4NCisj
aW5jbHVkZSAidHJlay5oIg0KKyNpbmNsdWRlICJnZXRwYXIuaCINCiANCiAv
Kg0KICoqICBTaWduYWwgZ2FtZSB3b24NCkBAIC01MiwxMiArNTIsMTEgQEAN
CiAqKglwcmV0dHkgb2ZmIHRoZSB3YWxsLg0KICovDQogDQotd2luKCkNCit2
b2lkDQord2luKHZvaWQpDQogew0KLQlsb25nCQkJczsNCi0JZXh0ZXJuIGpt
cF9idWYJCWVudjsNCi0JZXh0ZXJuIGxvbmcJCXNjb3JlKCk7DQotCWV4dGVy
biBzdHJ1Y3QgY3ZudGFiCVNraXRhYltdOw0KKwlsb25nCQlzOw0KKw0KIAlz
dHJ1Y3QgY3ZudGFiCSpwOw0KIA0KIAlzbGVlcCgxKTsNCg==
---259921185-980504529-1112296292=:19966--