看板 DFBSD_submit 關於我們 聯絡資訊
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--