From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 17845 invoked from network); 11 May 2020 17:10:45 -0000 Received: from localhost (HELO inbox.vuxu.org) (::1) by localhost with ESMTPUTF8; 11 May 2020 17:10:45 -0000 Content-Type: multipart/mixed; boundary="===============7273225197720723900==" MIME-Version: 1.0 Subject: =?utf8?q?=5BPR_PATCH=5D_ulatencyd=3A_remove_package?= To: ml@inbox.vuxu.org From: ericonr Reply-to: ml@inbox.vuxu.org Message-ID: Date: Mon, 11 May 2020 19:10:44 +0200 List-Id: GitHub notification mails are now in MIME to allow UTF8. --===============7273225197720723900== Content-Type: text/plain; charset="utf8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 VGhlcmUgaXMgYSBuZXcgcHVsbCByZXF1ZXN0IGJ5IGVyaWNvbnIgYWdhaW5zdCBtYXN0ZXIgb24g dGhlIHZvaWQtcGFja2FnZXMgcmVwb3NpdG9yeQoKaHR0cHM6Ly9naXRodWIuY29tL2VyaWNvbnIv dm9pZC1wYWNrYWdlcyByZW1vdmUtdWxhdGVuY3lkCmh0dHBzOi8vZ2l0aHViLmNvbS92b2lkLWxp bnV4L3ZvaWQtcGFja2FnZXMvcHVsbC8yMTg0MwoKdWxhdGVuY3lkOiByZW1vdmUgcGFja2FnZQpV cHN0cmVhbSBpcyBhYmFuZG9uZWQsIGJ1aWxkIGlzIGN1cnJlbnRseSBicm9rZW4sIGFuZCBzZXJ2 aWNlIGZpbGVzIGRlcGVuZCBvbiBDb25zb2xlS2l0Miwgd2hpY2ggaGFzIGFsc28gYmVlbiByZW1v dmVkLg0KDQpGaXhlcyAjMjE0ODIKCkEgcGF0Y2ggZmlsZSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNv bS92b2lkLWxpbnV4L3ZvaWQtcGFja2FnZXMvcHVsbC8yMTg0My5wYXRjaCBpcyBhdHRhY2hlZA== --===============7273225197720723900== Content-Type: text/x-diff MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="github-pr-remove-ulatencyd-21843.patch" RnJvbSBlZjhiNTY2NDQxMjdhODE1YzEzMzVjNzNmMDhkZWNhMWZmZjgzZDZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/PUMzPTg5cmljbz0yMFJvbGltPz0gPGVyaWNv LmVyY0BnbWFpbC5jb20+CkRhdGU6IE1vbiwgMTEgTWF5IDIwMjAgMTQ6MDk6MTkgLTAzMDAKU3Vi amVjdDogW1BBVENIXSB1bGF0ZW5jeWQ6IHJlbW92ZSBwYWNrYWdlCgpVcHN0cmVhbSBpcyBhYmFu ZG9uZWQsIGJ1aWxkIGlzIGN1cnJlbnRseSBicm9rZW4sIGFuZCBzZXJ2aWNlIGZpbGVzIGRlcGVu ZCBvbiBDb25zb2xlS2l0Miwgd2hpY2ggaGFzIGFsc28gYmVlbiByZW1vdmVkLgoKRml4ZXMgIzIx NDgyCi0tLQogc3JjcGtncy91bGF0ZW5jeWQvZmlsZXMvc3VidGxlLmNvbmYgICAgICAgICAgIHwg ICAgMyAtCiBzcmNwa2dzL3VsYXRlbmN5ZC9maWxlcy9zdWJ0bGUubHVhICAgICAgICAgICAgfCAg IDMwIC0KIHNyY3BrZ3MvdWxhdGVuY3lkL2ZpbGVzL3VsYXRlbmN5ZC9ydW4gICAgICAgICB8ICAg IDMgLQogLi4ucy5jbWFrZS1maW5kLXBhY2thZ2Utd2l0aC1wa2ctY29uZmlnLnBhdGNoIHwgICAy NiAtCiAuLi4wMDItdWxhdGVuY3kuaC1yZW1vdmUtUFJPQ19GSUxMV0NIQU4ucGF0Y2ggfCAgIDI2 IC0KIC4uLnVhX2JpbmRpbmctLmMtcmVtb3ZlZC11bnVzZWQtaGVhZGVycy5wYXRjaCB8ICAgNDUg LQogLi4uLzAwMDQtZnRzLWFkZC1ic2QtaW1wbGVtZW50YXRpb24ucGF0Y2ggICAgIHwgMTQ0NiAt LS0tLS0tLS0tLS0tLS0tLQogc3JjcGtncy91bGF0ZW5jeWQvdGVtcGxhdGUgICAgICAgICAgICAg ICAgICAgIHwgICA4MyAtCiA4IGZpbGVzIGNoYW5nZWQsIDE2NjIgZGVsZXRpb25zKC0pCiBkZWxl dGUgbW9kZSAxMDA2NDQgc3JjcGtncy91bGF0ZW5jeWQvZmlsZXMvc3VidGxlLmNvbmYKIGRlbGV0 ZSBtb2RlIDEwMDY0NCBzcmNwa2dzL3VsYXRlbmN5ZC9maWxlcy9zdWJ0bGUubHVhCiBkZWxldGUg bW9kZSAxMDA2NDQgc3JjcGtncy91bGF0ZW5jeWQvZmlsZXMvdWxhdGVuY3lkL3J1bgogZGVsZXRl IG1vZGUgMTAwNjQ0IHNyY3BrZ3MvdWxhdGVuY3lkL3BhdGNoZXMvMDAwMS1GaW5kUHJvY3BzLmNt YWtlLWZpbmQtcGFja2FnZS13aXRoLXBrZy1jb25maWcucGF0Y2gKIGRlbGV0ZSBtb2RlIDEwMDY0 NCBzcmNwa2dzL3VsYXRlbmN5ZC9wYXRjaGVzLzAwMDItdWxhdGVuY3kuaC1yZW1vdmUtUFJPQ19G SUxMV0NIQU4ucGF0Y2gKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzcmNwa2dzL3VsYXRlbmN5ZC9wYXRj aGVzLzAwMDMtdWxhdGVuY3lkLWx1YV9iaW5kaW5nLS5jLXJlbW92ZWQtdW51c2VkLWhlYWRlcnMu cGF0Y2gKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzcmNwa2dzL3VsYXRlbmN5ZC9wYXRjaGVzLzAwMDQt ZnRzLWFkZC1ic2QtaW1wbGVtZW50YXRpb24ucGF0Y2gKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzcmNw a2dzL3VsYXRlbmN5ZC90ZW1wbGF0ZQoKZGlmZiAtLWdpdCBhL3NyY3BrZ3MvdWxhdGVuY3lkL2Zp bGVzL3N1YnRsZS5jb25mIGIvc3JjcGtncy91bGF0ZW5jeWQvZmlsZXMvc3VidGxlLmNvbmYKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyZTAyNThiYjExLi4wMDAwMDAwMDAwMAotLS0g YS9zcmNwa2dzL3VsYXRlbmN5ZC9maWxlcy9zdWJ0bGUuY29uZgorKysgL2Rldi9udWxsCkBAIC0x LDMgKzAsMCBAQAotIyBzdWJ0bGUKLQotc3VidGxlICAgICAgICAgICAgICAgICAgICAgICB1c2Vy LnVpCmRpZmYgLS1naXQgYS9zcmNwa2dzL3VsYXRlbmN5ZC9maWxlcy9zdWJ0bGUubHVhIGIvc3Jj cGtncy91bGF0ZW5jeWQvZmlsZXMvc3VidGxlLmx1YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMGU1MjY0NDYzNzUuLjAwMDAwMDAwMDAwCi0tLSBhL3NyY3BrZ3MvdWxhdGVuY3lkL2Zp bGVzL3N1YnRsZS5sdWEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0tLVtbCi0gICAg Q29weXJpZ2h0IDIwMTAsMjAxMSwyMDEyIHVsYXRlbmN5ZCBkZXZlbG9wZXJzCi0KLSAgICBUaGlz IGZpbGUgaXMgcGFydCBvZiB1bGF0ZW5jeWQuCi0KLSAgICBMaWNlbnNlOiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSAzIG9yIGxhdGVyCi1dXS0tCi0KLVN1YnRsZVdNID0gewotCW5hbWUgPSAi U3VidGxlV00iLAotCXJlX2Jhc2VuYW1lID0gInN1YnRsZSIsCi0JY2hlY2sgPSBmdW5jdGlvbihz ZWxmLCBwcm9jKQotCSBsb2NhbCBmbGFnID0gdWxhdGVuY3kubmV3X2ZsYWd7bmFtZT0idXNlci51 aSJ9Ci0JIHByb2M6YWRkX2ZsYWcoZmxhZykKLQkgcHJvYzpzZXRfb29tX3Njb3JlKC00MDApCi0J IHJ2ID0gdWxhdGVuY3kuZmlsdGVyX3J2KHVsYXRlbmN5LkZJTFRFUl9TVE9QKQotCSByZXR1cm4g cnYKLQllbmQKLX0KLQotU3VidGxlRml4ID0gUnVubmVyRml4Lm5ldygiU3VidGxlV00iLCB7InN1 YnRsZSJ9KQotCi0tLSBvbiBzdGFydCB3ZSBoYXZlIHRvIGZpeCBhbGwgcHJvY2Vzc2VzIHRoYXQg aGF2ZSBkZXNjZW50ZWQgZnJvbSBrZGUKLWxvY2FsIGZ1bmN0aW9uIGNsZWFudXBfYXdlc29tZV9t ZXNzKCkKLSAgY2xlYW51cF9kZXNrdG9wX21lc3MoeyJzdWJ0bGUifSkKLSAgcmV0dXJuIGZhbHNl Ci1lbmQKLQotdWxhdGVuY3kuYWRkX3RpbWVvdXQoY2xlYW51cF9hd2Vzb21lX21lc3MsIDEwMDAp Ci11bGF0ZW5jeS5yZWdpc3Rlcl9maWx0ZXIoU3VidGxlV00pCmRpZmYgLS1naXQgYS9zcmNwa2dz L3VsYXRlbmN5ZC9maWxlcy91bGF0ZW5jeWQvcnVuIGIvc3JjcGtncy91bGF0ZW5jeWQvZmlsZXMv dWxhdGVuY3lkL3J1bgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODYxODYzYmM3ZmYu LjAwMDAwMDAwMDAwCi0tLSBhL3NyY3BrZ3MvdWxhdGVuY3lkL2ZpbGVzL3VsYXRlbmN5ZC9ydW4K KysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMhL2Jpbi9zaAotc3YgY2hlY2sgY29uc29s ZWtpdCA+L2Rldi9udWxsIHx8IGV4aXQgMQotZXhlYyB1bGF0ZW5jeWQgMT4mMgpkaWZmIC0tZ2l0 IGEvc3JjcGtncy91bGF0ZW5jeWQvcGF0Y2hlcy8wMDAxLUZpbmRQcm9jcHMuY21ha2UtZmluZC1w YWNrYWdlLXdpdGgtcGtnLWNvbmZpZy5wYXRjaCBiL3NyY3BrZ3MvdWxhdGVuY3lkL3BhdGNoZXMv MDAwMS1GaW5kUHJvY3BzLmNtYWtlLWZpbmQtcGFja2FnZS13aXRoLXBrZy1jb25maWcucGF0Y2gK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNjhhNjI1MmQ2Li4wMDAwMDAwMDAwMAot LS0gYS9zcmNwa2dzL3VsYXRlbmN5ZC9wYXRjaGVzLzAwMDEtRmluZFByb2Nwcy5jbWFrZS1maW5k LXBhY2thZ2Utd2l0aC1wa2ctY29uZmlnLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAs MCBAQAotRnJvbSBlYjAzNmM2NGEyYTk5OWRlMGVlYmI2ZjBiMjg1ZGNkNjdlMzM2NmIxIE1vbiBT ZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQW5kcmVhIEJyYW5jYWxlb25pIDxtaXdheGVAZ21h aWwuY29tPgotRGF0ZTogRnJpLCAyMSBBdWcgMjAxNSAxMTozMDozNiArMDIwMAotU3ViamVjdDog W1BBVENIIDcvN10gRmluZFByb2Nwcy5jbWFrZTogZmluZCBwYWNrYWdlIHdpdGggcGtnLWNvbmZp ZwotCi0tLS0KLSBjbWFrZS9Nb2R1bGVzL0ZpbmRQcm9jcHMuY21ha2UgfCAzICstLQotIDEgZmls ZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBh L2NtYWtlL01vZHVsZXMvRmluZFByb2Nwcy5jbWFrZSBiL2NtYWtlL01vZHVsZXMvRmluZFByb2Nw cy5jbWFrZQotaW5kZXggOTM3NDdmZC4uZjFjM2E0MyAxMDA2NDQKLS0tLSBhL2NtYWtlL01vZHVs ZXMvRmluZFByb2Nwcy5jbWFrZQotKysrIGIvY21ha2UvTW9kdWxlcy9GaW5kUHJvY3BzLmNtYWtl Ci1AQCAtNjI3LDggKzYyNyw3IEBAIGlmKGZvdW5kX2xpYikKLSAgIHVuc2V0KFBST0NQU18ke2xp YnR5cGV9X1ZFUlNJT05fU1RSSU5HIENBQ0hFKSAjIGNoZWNrIGVhY2h0aW1lCi0gCi0gICBleGVj dXRlX3Byb2Nlc3MoCi0tICAgICAgICAgICAgICBDT01NQU5EICJzdHJpbmdzIiAiJHtQUk9DUFNf JHtsaWJ0eXBlfV9MSUJSQVJZfSIKLS0gICAgICAgICAgICAgIENPTU1BTkQgInNlZCIgIi1uIiAi JHt2ZXJfcmV4cH0iCi0rICAgICAgICAgICAgICBDT01NQU5EICJwa2ctY29uZmlnIiAiLS1tb2R2 ZXJzaW9uIiAibGlicHJvY3BzIgotICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIFBST0NQ U18ke2xpYnR5cGV9X1ZFUlNJT05fU1RSSU5HCi0gICAgICAgICAgICAgICBFUlJPUl9RVUlFVCAp Ci0gCi0tLSAKLTIuNS4wCi0KZGlmZiAtLWdpdCBhL3NyY3BrZ3MvdWxhdGVuY3lkL3BhdGNoZXMv MDAwMi11bGF0ZW5jeS5oLXJlbW92ZS1QUk9DX0ZJTExXQ0hBTi5wYXRjaCBiL3NyY3BrZ3MvdWxh dGVuY3lkL3BhdGNoZXMvMDAwMi11bGF0ZW5jeS5oLXJlbW92ZS1QUk9DX0ZJTExXQ0hBTi5wYXRj aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTcwOTkzZDk0N2UuLjAwMDAwMDAwMDAw Ci0tLSBhL3NyY3BrZ3MvdWxhdGVuY3lkL3BhdGNoZXMvMDAwMi11bGF0ZW5jeS5oLXJlbW92ZS1Q Uk9DX0ZJTExXQ0hBTi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLUZyb20g ZjM5YjZiYWUyYWVjNWVmNjI0MDYxYzliNTc5ZGI4ZWQ4YjI5YWZjZSBNb24gU2VwIDE3IDAwOjAw OjAwIDIwMDEKLUZyb206IEFuZHJlYSBCcmFuY2FsZW9uaSA8bWl3YXhlQGdtYWlsLmNvbT4KLURh dGU6IEZyaSwgMjEgQXVnIDIwMTUgMTA6Mjc6MjUgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAyLzJd IHVsYXRlbmN5Lmg6IHJlbW92ZSBQUk9DX0ZJTExXQ0hBTgotCi0tLS0KLSBzcmMvdWxhdGVuY3ku aCB8IDMgKy0tCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAyIGRlbGV0aW9ucygt KQotCi1kaWZmIC0tZ2l0IGEvc3JjL3VsYXRlbmN5LmggYi9zcmMvdWxhdGVuY3kuaAotaW5kZXgg NjRmZjg4Zi4uMzg3NDlhNyAxMDA2NDQKLS0tLSBhL3NyYy91bGF0ZW5jeS5oCi0rKysgYi9zcmMv dWxhdGVuY3kuaAotQEAgLTYzLDggKzYzLDcgQEAgZXh0ZXJuIGdpbnQgVV9sb2dfbGV2ZWw7IC8v ITwgQ3VycmVudCBsb2cgbGV2ZWwKLSAvL0ZJWE1FIGVuYWJsZSBQUk9DX0ZJTExTVVBHUlAgb25j ZSBhZGFwdGVkIHRvIHRoZSBuZXcgbGlicHJvY3BzCi0gCi0gI2RlZmluZSBPUEVOUFJPQ19GTEFH UyAoUFJPQ19GSUxMTUVNIHwgXAotLSAgUFJPQ19GSUxMVVNSIHwgUFJPQ19GSUxMR1JQIHwgUFJP Q19GSUxMU1RBVFVTIHwgUFJPQ19GSUxMU1RBVCB8IFwKLS0gIFBST0NfRklMTFdDSEFOIC8qfCBQ Uk9DX0ZJTExTVVBHUlAqLykKLSsgIFBST0NfRklMTFVTUiB8IFBST0NfRklMTEdSUCB8IFBST0Nf RklMTFNUQVRVUyB8IFBST0NfRklMTFNUQVQpCi0gCi0gI2RlZmluZSBPUEVOUFJPQ19GTEFHU19N SU5JTUFMIChQUk9DX0ZJTExTVEFUVVMpCi0gCi0tLSAKLTIuNS4wCi0KZGlmZiAtLWdpdCBhL3Ny Y3BrZ3MvdWxhdGVuY3lkL3BhdGNoZXMvMDAwMy11bGF0ZW5jeWQtbHVhX2JpbmRpbmctLmMtcmVt b3ZlZC11bnVzZWQtaGVhZGVycy5wYXRjaCBiL3NyY3BrZ3MvdWxhdGVuY3lkL3BhdGNoZXMvMDAw My11bGF0ZW5jeWQtbHVhX2JpbmRpbmctLmMtcmVtb3ZlZC11bnVzZWQtaGVhZGVycy5wYXRjaApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM0ZmUxMGRlM2YuLjAwMDAwMDAwMDAwCi0t LSBhL3NyY3BrZ3MvdWxhdGVuY3lkL3BhdGNoZXMvMDAwMy11bGF0ZW5jeWQtbHVhX2JpbmRpbmct LmMtcmVtb3ZlZC11bnVzZWQtaGVhZGVycy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICsw LDAgQEAKLUZyb20gZGUwNDEyNjUyNDFmMTIzMDQ5Njk1NDZhMGY2YmVjZjdlM2VkZjc4YyBNb24g U2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEFuZHJlYSBCcmFuY2FsZW9uaSA8bWl3YXhlQGdt YWlsLmNvbT4KLURhdGU6IFNhdCwgMjIgQXVnIDIwMTUgMDA6NDA6NDUgKzAyMDAKLVN1YmplY3Q6 IFtQQVRDSCAzLzRdIHt1bGF0ZW5jeWQsbHVhX2JpbmRpbmd9LmM6IHJlbW92ZWQgdW51c2VkIGhl YWRlcnMKLQotLS0tCi0gc3JjL2x1YV9iaW5kaW5nLmMgfCAxIC0KLSBzcmMvdWxhdGVuY3lkLmMg ICB8IDIgLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDMgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQg YS9zcmMvbHVhX2JpbmRpbmcuYyBiL3NyYy9sdWFfYmluZGluZy5jCi1pbmRleCBhYWIxMThlLi5h OGZiODgyIDEwMDY0NAotLS0tIGEvc3JjL2x1YV9iaW5kaW5nLmMKLSsrKyBiL3NyYy9sdWFfYmlu ZGluZy5jCi1AQCAtMzQsNyArMzQsNiBAQAotICNpbmNsdWRlIDxnbGliLmg+Ci0gI2luY2x1ZGUg PHNpZ25hbC5oPgotICNpbmNsdWRlIDx0aW1lLmg+Ci0tI2luY2x1ZGUgPGJpdHMvc2lnbnVtLmg+ Ci0gLy8jaW5jbHVkZSA8ZXJybm8uaD4KLSAjaW5jbHVkZSA8c2NoZWQuaD4KLSAjaW5jbHVkZSA8 bGludXgvc2NoZWQuaD4KLWRpZmYgLS1naXQgYS9zcmMvdWxhdGVuY3lkLmMgYi9zcmMvdWxhdGVu Y3lkLmMKLWluZGV4IGZmODk3MmIuLjE5NjZkOTQgMTAwNjQ0Ci0tLS0gYS9zcmMvdWxhdGVuY3lk LmMKLSsrKyBiL3NyYy91bGF0ZW5jeWQuYwotQEAgLTI3LDcgKzI3LDYgQEAKLSAjaW5jbHVkZSA8 c3lzL3R5cGVzLmg+Ci0gI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0gI2luY2x1ZGUgPGRpcmVudC5o PgotLSNpbmNsdWRlIDxlcnJuby5oPgotICNpbmNsdWRlIDxnbGliLmg+Ci0gI2luY2x1ZGUgPHN0 ZGxpYi5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLUBAIC01MSw3ICs1MCw2IEBAIERCdXNHQ29u bmVjdGlvbiAqVV9kYnVzX2Nvbm5lY3Rpb25fc3lzdGVtOwotICNpbmNsdWRlIDxwcm9jL3N5c2lu Zm8uaD4KLSAjaW5jbHVkZSA8cHJvYy9yZWFkcHJvYy5oPgotICNpbmNsdWRlIDxzeXMvbW1hbi5o PgotLSNpbmNsdWRlIDxlcnJvci5oPgotIAotIHN0YXRpYyBnY2hhciAqY29uZmlnX2ZpbGUgPSBR VU9URU1FKENPTkZJR19QQVRIKSIvdWxhdGVuY3lkLmNvbmYiOwotIHN0YXRpYyBnY2hhciAqcnVs ZXNfZGlyZWN0b3J5ID0gUVVPVEVNRShSVUxFU19ESVJFQ1RPUlkpOwotLS0gCi0yLjUuMAotCmRp ZmYgLS1naXQgYS9zcmNwa2dzL3VsYXRlbmN5ZC9wYXRjaGVzLzAwMDQtZnRzLWFkZC1ic2QtaW1w bGVtZW50YXRpb24ucGF0Y2ggYi9zcmNwa2dzL3VsYXRlbmN5ZC9wYXRjaGVzLzAwMDQtZnRzLWFk ZC1ic2QtaW1wbGVtZW50YXRpb24ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IGY5ZTlkMTI1NzZkLi4wMDAwMDAwMDAwMAotLS0gYS9zcmNwa2dzL3VsYXRlbmN5ZC9wYXRjaGVz LzAwMDQtZnRzLWFkZC1ic2QtaW1wbGVtZW50YXRpb24ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAt MSwxNDQ2ICswLDAgQEAKLUZyb20gZDgwMzVjNjM0NmM0MjQ2YWIxYWU3NTVjOTEwY2ZmMDI5ZWUz NDk5NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEFuZHJlYSBCcmFuY2FsZW9uaSA8 bWl3YXhlQGdtYWlsLmNvbT4KLURhdGU6IFNhdCwgMjIgQXVnIDIwMTUgMDE6MDA6MTUgKzAyMDAK LVN1YmplY3Q6IFtQQVRDSCA0LzRdIGZ0czogYWRkIGJzZCBpbXBsZW1lbnRhdGlvbgotCi0tLS0K LSBzcmMvQ01ha2VMaXN0cy50eHQgfCAgICAyICstCi0gc3JjL2Z0cy5jICAgICAgICAgIHwgMTIz NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCi0g c3JjL2Z0cy5oICAgICAgICAgIHwgIDE1NSArKysrKysrCi0gc3JjL3Rvb2xzLmMgICAgICAgIHwg ICAgMiArLQotIDQgZmlsZXMgY2hhbmdlZCwgMTM5MyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9u cygtKQotIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvZnRzLmMKLSBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL2Z0cy5oCi0KLWRpZmYgLS1naXQgYS9zcmMvQ01ha2VMaXN0cy50eHQgYi9zcmMvQ01ha2VM aXN0cy50eHQKLWluZGV4IDA1NDFhYmIuLjI2NmMwMzEgMTAwNjQ0Ci0tLS0gYS9zcmMvQ01ha2VM aXN0cy50eHQKLSsrKyBiL3NyYy9DTWFrZUxpc3RzLnR4dAotQEAgLTE5LDcgKzE5LDcgQEAgRU5E SUYoREJVU19GT1VORCBBTkQgRU5BQkxFX0RCVVMpCi0gYWRkX2V4ZWN1dGFibGUodWxhdGVuY3lk IGNvcmUuYyB1bGF0ZW5jeWQuYyBzeXNpbmZvLmMgc3lzY3RsLmMKLSAgICAgICAgICAgICAgICBs aW51eF9uZXRsaW5rLmMgdW1vZHVsZS5jIHVob29rLmMKLSAgICAgICAgICAgICAgICB1c2Vzc2lv bi5jIHVmb2N1c3N0YWNrLmMgdWFzc2VydC5jCi0tICAgICAgICAgICAgICAgJHtFWFRSQV9DfSBs dWFfYmluZGluZy5jIHRvb2xzLmMpCi0rICAgICAgICAgICAgICAgJHtFWFRSQV9DfSBsdWFfYmlu ZGluZy5jIHRvb2xzLmMgZnRzLmMpCi0gCi0gdGFyZ2V0X2xpbmtfbGlicmFyaWVzICh1bGF0ZW5j eWQgZGwgJHtNWV9MVUFfTElCUkFSSUVTfQotICAgICAgICAgICAgICAgICAgICAgICAgJHtEQlVT X0xJQlJBUklFU30KLWRpZmYgLS1naXQgYS9zcmMvZnRzLmMgYi9zcmMvZnRzLmMKLW5ldyBmaWxl IG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi42Mjg1ODU1Ci0tLS0gL2Rldi9udWxsCi0rKysg Yi9zcmMvZnRzLmMKLUBAIC0wLDAgKzEsMTIzNiBAQAotKy8qCSROZXRCU0Q6IGZ0cy5jLHYgMS40 OCAyMDE1LzAxLzI5IDE1OjU1OjIxIG1hbnUgRXhwICQJKi8KLSsKLSsvKi0KLSsgKiBDb3B5cmln aHQgKGMpIDE5OTAsIDE5OTMsIDE5OTQKLSsgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0 eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu Ci0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0rICogICAgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K LSsgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMg b2YgaXRzIGNvbnRyaWJ1dG9ycwotKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotKyAqICAgIHdpdGhvdXQg c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotKyAqCi0rICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB TkQKLSsgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotKyAqIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJF IExJQUJMRQotKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0rICogREFNQUdFUyAoSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSsgKiBP UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotKyAqIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK LSsgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg VEhFIFBPU1NJQklMSVRZIE9GCi0rICogU1VDSCBEQU1BR0UuCi0rICovCi0rCi0rI2lmIGRlZmlu ZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotKyNpZiAwCi0rc3RhdGljIGNoYXIgc2Nj c2lkW10gPSAiQCgjKWZ0cy5jCTguNiAoQmVya2VsZXkpIDgvMTQvOTQiOwotKyNlbHNlCi0rX19S Q1NJRCgiJE5ldEJTRDogZnRzLmMsdiAxLjQ4IDIwMTUvMDEvMjkgMTU6NTU6MjEgbWFudSBFeHAg JCIpOwotKyNlbmRpZgotKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0rCi0r I2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgotKwotKyNpbmNs dWRlIDxhc3NlcnQuaD4KLSsjZGVmaW5lIF9ESUFHQVNTRVJUKGUpCi0rI2luY2x1ZGUgPGRpcmVu dC5oPgotKyNpbmNsdWRlIDxlcnJuby5oPgotKyNpbmNsdWRlIDxmY250bC5oPgotKyNpbmNsdWRl IDxmdHMuaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNp bmNsdWRlIDx1bmlzdGQuaD4KLSsKLStzdGF0aWMgRlRTRU5UCSpmdHNfYWxsb2MoRlRTICosIGNv bnN0IGNoYXIgKiwgc2l6ZV90KTsKLStzdGF0aWMgRlRTRU5UCSpmdHNfYnVpbGQoRlRTICosIGlu dCk7Ci0rc3RhdGljIHZvaWQJIGZ0c19mcmVlKEZUU0VOVCAqKTsKLStzdGF0aWMgdm9pZAkgZnRz X2xmcmVlKEZUU0VOVCAqKTsKLStzdGF0aWMgdm9pZAkgZnRzX2xvYWQoRlRTICosIEZUU0VOVCAq KTsKLStzdGF0aWMgc2l6ZV90CSBmdHNfbWF4YXJnbGVuKGNoYXIgKiBjb25zdCAqKTsKLStzdGF0 aWMgc2l6ZV90CSBmdHNfcG93MihzaXplX3QpOwotK3N0YXRpYyBpbnQJIGZ0c19wYWxsb2MoRlRT ICosIHNpemVfdCk7Ci0rc3RhdGljIHZvaWQJIGZ0c19wYWRqdXN0KEZUUyAqLCBGVFNFTlQgKik7 Ci0rc3RhdGljIEZUU0VOVAkqZnRzX3NvcnQoRlRTICosIEZUU0VOVCAqLCBzaXplX3QpOwotK3N0 YXRpYyB1bnNpZ25lZCBzaG9ydCBmdHNfc3RhdChGVFMgKiwgRlRTRU5UICosIGludCk7Ci0rc3Rh dGljIGludAkgZnRzX3NhZmVfY2hhbmdlZGlyKGNvbnN0IEZUUyAqLCBjb25zdCBGVFNFTlQgKiwg aW50LAotKyAgICBjb25zdCBjaGFyICopOwotKwotKyNpZiBkZWZpbmVkKEFMSUdOQllURVMpICYm IGRlZmluZWQoQUxJR04pCi0rI2RlZmluZQlGVFNfQUxMT0NfQUxJR05FRAkxCi0rI2Vsc2UKLSsj dW5kZWYJRlRTX0FMTE9DX0FMSUdORUQKLSsjZW5kaWYKLSsKLSsjaWZuZGVmIGZ0c2VudF9uYW1l bGVuX3RydW5jYXRlCi0rI2RlZmluZSBmdHNlbnRfbmFtZWxlbl90cnVuY2F0ZShhKQlcCi0rICAg ICgoYSkgPiBVSU5UX01BWCA/IFVJTlRfTUFYIDogKHVuc2lnbmVkIGludCkoYSkpCi0rI2VuZGlm Ci0rI2lmbmRlZiBmdHNlbnRfcGF0aGxlbl90cnVuY2F0ZQotKyNkZWZpbmUgZnRzZW50X3BhdGhs ZW5fdHJ1bmNhdGUoYSkgXAotKyAgICAoKGEpID4gVUlOVF9NQVggPyBVSU5UX01BWCA6ICh1bnNp Z25lZCBpbnQpKGEpKQotKyNlbmRpZgotKyNpZm5kZWYgZnRzX3BhdGhsZW5fdHJ1bmNhdGUKLSsj ZGVmaW5lIGZ0c19wYXRobGVuX3RydW5jYXRlKGEpCVwKLSsgICAgKChhKSA+IFVJTlRfTUFYID8g VUlOVF9NQVggOiAodW5zaWduZWQgaW50KShhKSkKLSsjZW5kaWYKLSsjaWZuZGVmIGZ0c19uaXRl bXNfdHJ1bmNhdGUKLSsjZGVmaW5lIGZ0c19uaXRlbXNfdHJ1bmNhdGUoYSkgXAotKyAgICAoKGEp ID4gVUlOVF9NQVggPyBVSU5UX01BWCA6ICh1bnNpZ25lZCBpbnQpKGEpKQotKyNlbmRpZgotKwot KyNkZWZpbmUJSVNET1QoYSkJKGFbMF0gPT0gJy4nICYmICghYVsxXSB8fCAoYVsxXSA9PSAnLicg JiYgIWFbMl0pKSkKLSsKLSsjZGVmaW5lCUNMUihvcHQpCShzcC0+ZnRzX29wdGlvbnMgJj0gfihv cHQpKQotKyNkZWZpbmUJSVNTRVQob3B0KQkoc3AtPmZ0c19vcHRpb25zICYgKG9wdCkpCi0rI2Rl ZmluZQlTRVQob3B0KQkoc3AtPmZ0c19vcHRpb25zIHw9IChvcHQpKQotKwotKyNkZWZpbmUJQ0hE SVIoc3AsIHBhdGgpCSghSVNTRVQoRlRTX05PQ0hESVIpICYmIGNoZGlyKHBhdGgpKQotKyNkZWZp bmUJRkNIRElSKHNwLCBmZCkJKCFJU1NFVChGVFNfTk9DSERJUikgJiYgZmNoZGlyKGZkKSkKLSsK LSsvKiBmdHNfYnVpbGQgZmxhZ3MgKi8KLSsjZGVmaW5lCUJDSElMRAkJMQkJLyogZnRzX2NoaWxk cmVuICovCi0rI2RlZmluZQlCTkFNRVMJCTIJCS8qIGZ0c19jaGlsZHJlbiwgbmFtZXMgb25seSAq LwotKyNkZWZpbmUJQlJFQUQJCTMJCS8qIGZ0c19yZWFkICovCi0rCi0rI2lmbmRlZiBEVEZfSElE RVcKLSsjdW5kZWYgRlRTX1dISVRFT1VUCi0rI2VuZGlmCi0rCi0rRlRTICoKLStmdHNfb3Blbihj aGFyICogY29uc3QgKmFyZ3YsIGludCBvcHRpb25zLAotKyAgICBpbnQgKCpjb21wYXIpKGNvbnN0 IEZUU0VOVCAqKiwgY29uc3QgRlRTRU5UICoqKSkKLSt7Ci0rCUZUUyAqc3A7Ci0rCUZUU0VOVCAq cCwgKnJvb3Q7Ci0rCXNpemVfdCBuaXRlbXM7Ci0rCUZUU0VOVCAqcGFyZW50LCAqdG1wID0gTlVM TDsJLyogcGFjaWZ5IGdjYyAqLwotKwlzaXplX3QgbGVuOwotKwotKwlfRElBR0FTU0VSVChhcmd2 ICE9IE5VTEwpOwotKwotKwkvKiBPcHRpb25zIGNoZWNrLiAqLwotKwlpZiAob3B0aW9ucyAmIH5G VFNfT1BUSU9OTUFTSykgewotKwkJZXJybm8gPSBFSU5WQUw7Ci0rCQlyZXR1cm4gKE5VTEwpOwot Kwl9Ci0rCi0rCS8qIEFsbG9jYXRlL2luaXRpYWxpemUgdGhlIHN0cmVhbSAqLwotKwlpZiAoKHNw ID0gbWFsbG9jKHNpemVvZihGVFMpKSkgPT0gTlVMTCkKLSsJCXJldHVybiAoTlVMTCk7Ci0rCW1l bXNldChzcCwgMCwgc2l6ZW9mKEZUUykpOwotKwlzcC0+ZnRzX2NvbXBhciA9IGNvbXBhcjsKLSsJ c3AtPmZ0c19vcHRpb25zID0gb3B0aW9uczsKLSsKLSsJLyogTG9naWNhbCB3YWxrcyB0dXJuIG9u IE5PQ0hESVI7IHN5bWJvbGljIGxpbmtzIGFyZSB0b28gaGFyZC4gKi8KLSsJaWYgKElTU0VUKEZU U19MT0dJQ0FMKSkKLSsJCVNFVChGVFNfTk9DSERJUik7Ci0rCi0rCS8qCi0rCSAqIFN0YXJ0IG91 dCB3aXRoIDFLIG9mIHBhdGggc3BhY2UsIGFuZCBlbm91Z2gsIGluIGFueSBjYXNlLAotKwkgKiB0 byBob2xkIHRoZSB1c2VyJ3MgcGF0aHMuCi0rCSAqLwotKwlpZiAoZnRzX3BhbGxvYyhzcCwgTUFY KGZ0c19tYXhhcmdsZW4oYXJndiksIE1BWFBBVEhMRU4pKSkKLSsJCWdvdG8gbWVtMTsKLSsKLSsJ LyogQWxsb2NhdGUvaW5pdGlhbGl6ZSByb290J3MgcGFyZW50LiAqLwotKwlpZiAoKHBhcmVudCA9 IGZ0c19hbGxvYyhzcCwgIiIsIDApKSA9PSBOVUxMKQotKwkJZ290byBtZW0yOwotKwlwYXJlbnQt PmZ0c19sZXZlbCA9IEZUU19ST09UUEFSRU5UTEVWRUw7Ci0rCi0rCS8qIEFsbG9jYXRlL2luaXRp YWxpemUgcm9vdChzKS4gKi8KLSsJZm9yIChyb290ID0gTlVMTCwgbml0ZW1zID0gMDsgKmFyZ3Y7 ICsrYXJndiwgKytuaXRlbXMpIHsKLSsJCS8qIERvbid0IGFsbG93IHplcm8tbGVuZ3RoIHBhdGhz LiAqLwotKwkJaWYgKChsZW4gPSBzdHJsZW4oKmFyZ3YpKSA9PSAwKSB7Ci0rCQkJZXJybm8gPSBF Tk9FTlQ7Ci0rCQkJZ290byBtZW0zOwotKwkJfQotKwotKwkJaWYgKChwID0gZnRzX2FsbG9jKHNw LCAqYXJndiwgbGVuKSkgPT0gTlVMTCkKLSsJCQlnb3RvIG1lbTM7Ci0rCQlwLT5mdHNfbGV2ZWwg PSBGVFNfUk9PVExFVkVMOwotKwkJcC0+ZnRzX3BhcmVudCA9IHBhcmVudDsKLSsJCXAtPmZ0c19h Y2NwYXRoID0gcC0+ZnRzX25hbWU7Ci0rCQlwLT5mdHNfaW5mbyA9IGZ0c19zdGF0KHNwLCBwLCBJ U1NFVChGVFNfQ09NRk9MTE9XKSk7Ci0rCi0rCQkvKiBDb21tYW5kLWxpbmUgIi4iIGFuZCAiLi4i IGFyZSByZWFsIGRpcmVjdG9yaWVzLiAqLwotKwkJaWYgKHAtPmZ0c19pbmZvID09IEZUU19ET1Qp Ci0rCQkJcC0+ZnRzX2luZm8gPSBGVFNfRDsKLSsKLSsJCS8qCi0rCQkgKiBJZiBjb21wYXJpc29u IHJvdXRpbmUgc3VwcGxpZWQsIHRyYXZlcnNlIGluIHNvcnRlZAotKwkJICogb3JkZXI7IG90aGVy d2lzZSB0cmF2ZXJzZSBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkLgotKwkJICovCi0rCQlpZiAoY29t cGFyKSB7Ci0rCQkJcC0+ZnRzX2xpbmsgPSByb290OwotKwkJCXJvb3QgPSBwOwotKwkJfSBlbHNl IHsKLSsJCQlwLT5mdHNfbGluayA9IE5VTEw7Ci0rCQkJaWYgKHJvb3QgPT0gTlVMTCkKLSsJCQkJ dG1wID0gcm9vdCA9IHA7Ci0rCQkJZWxzZSB7Ci0rCQkJCXRtcC0+ZnRzX2xpbmsgPSBwOwotKwkJ CQl0bXAgPSBwOwotKwkJCX0KLSsJCX0KLSsJfQotKwlpZiAoY29tcGFyICYmIG5pdGVtcyA+IDEp Ci0rCQlyb290ID0gZnRzX3NvcnQoc3AsIHJvb3QsIG5pdGVtcyk7Ci0rCi0rCS8qCi0rCSAqIEFs bG9jYXRlIGEgZHVtbXkgcG9pbnRlciBhbmQgbWFrZSBmdHNfcmVhZCB0aGluayB0aGF0IHdlJ3Zl IGp1c3QKLSsJICogZmluaXNoZWQgdGhlIG5vZGUgYmVmb3JlIHRoZSByb290KHMpOyBzZXQgcC0+ ZnRzX2luZm8gdG8gRlRTX0lOSVQKLSsJICogc28gdGhhdCBldmVyeXRoaW5nIGFib3V0IHRoZSAi Y3VycmVudCIgbm9kZSBpcyBpZ25vcmVkLgotKwkgKi8KLSsJaWYgKChzcC0+ZnRzX2N1ciA9IGZ0 c19hbGxvYyhzcCwgIiIsIDApKSA9PSBOVUxMKQotKwkJZ290byBtZW0zOwotKwlzcC0+ZnRzX2N1 ci0+ZnRzX2xpbmsgPSByb290OwotKwlzcC0+ZnRzX2N1ci0+ZnRzX2luZm8gPSBGVFNfSU5JVDsK LSsKLSsJLyoKLSsJICogSWYgdXNpbmcgY2hkaXIoMiksIGdyYWIgYSBmaWxlIGRlc2NyaXB0b3Ig cG9pbnRpbmcgdG8gZG90IHRvIGVuc3VyZQotKwkgKiB0aGF0IHdlIGNhbiBnZXQgYmFjayBoZXJl OyB0aGlzIGNvdWxkIGJlIGF2b2lkZWQgZm9yIHNvbWUgcGF0aHMsCi0rCSAqIGJ1dCBhbG1vc3Qg Y2VydGFpbmx5IG5vdCB3b3J0aCB0aGUgZWZmb3J0LiAgU2xhc2hlcywgc3ltYm9saWMgbGlua3Ms Ci0rCSAqIGFuZCAiLi4iIGFyZSBhbGwgZmFpcmx5IG5hc3R5IHByb2JsZW1zLiAgTm90ZSwgaWYg d2UgY2FuJ3QgZ2V0IHRoZQotKwkgKiBkZXNjcmlwdG9yIHdlIHJ1biBhbnl3YXksIGp1c3QgbW9y ZSBzbG93bHkuCi0rCSAqLwotKyNpZm5kZWYgT19DTE9FWEVDCi0rI2RlZmluZSBPX0NMT0VYRUMg MAotKyNlbmRpZgotKwlpZiAoIUlTU0VUKEZUU19OT0NIRElSKSkgewotKwkJaWYgKChzcC0+ZnRz X3JmZCA9IG9wZW4oIi4iLCBPX1JET05MWSB8IE9fQ0xPRVhFQywgMCkpID09IC0xKQotKwkJCVNF VChGVFNfTk9DSERJUik7Ci0rCX0KLSsKLSsJaWYgKG5pdGVtcyA9PSAwKQotKwkJZnRzX2ZyZWUo cGFyZW50KTsKLSsKLSsJcmV0dXJuIChzcCk7Ci0rCi0rbWVtMzoJZnRzX2xmcmVlKHJvb3QpOwot KwlmdHNfZnJlZShwYXJlbnQpOwotK21lbTI6CWZyZWUoc3AtPmZ0c19wYXRoKTsKLSttZW0xOglm cmVlKHNwKTsKLSsJcmV0dXJuIChOVUxMKTsKLSt9Ci0rCi0rc3RhdGljIHZvaWQKLStmdHNfbG9h ZChGVFMgKnNwLCBGVFNFTlQgKnApCi0rewotKwlzaXplX3QgbGVuOwotKwljaGFyICpjcDsKLSsK LSsJX0RJQUdBU1NFUlQoc3AgIT0gTlVMTCk7Ci0rCV9ESUFHQVNTRVJUKHAgIT0gTlVMTCk7Ci0r Ci0rCS8qCi0rCSAqIExvYWQgdGhlIHN0cmVhbSBzdHJ1Y3R1cmUgZm9yIHRoZSBuZXh0IHRyYXZl cnNhbC4gIFNpbmNlIHdlIGRvbid0Ci0rCSAqIGFjdHVhbGx5IGVudGVyIHRoZSBkaXJlY3Rvcnkg dW50aWwgYWZ0ZXIgdGhlIHByZW9yZGVyIHZpc2l0LCBzZXQKLSsJICogdGhlIGZ0c19hY2NwYXRo IGZpZWxkIHNwZWNpYWxseSBzbyB0aGUgY2hkaXIgZ2V0cyBkb25lIHRvIHRoZSByaWdodAotKwkg KiBwbGFjZSBhbmQgdGhlIHVzZXIgY2FuIGFjY2VzcyB0aGUgZmlyc3Qgbm9kZS4gIEZyb20gZnRz X29wZW4gaXQncwotKwkgKiBrbm93biB0aGF0IHRoZSBwYXRoIHdpbGwgZml0LgotKwkgKi8KLSsJ bGVuID0gcC0+ZnRzX3BhdGhsZW4gPSBwLT5mdHNfbmFtZWxlbjsKLSsJbWVtbW92ZShzcC0+ZnRz X3BhdGgsIHAtPmZ0c19uYW1lLCBsZW4gKyAxKTsKLSsJaWYgKChjcCA9IHN0cnJjaHIocC0+ZnRz X25hbWUsICcvJykpICYmIChjcCAhPSBwLT5mdHNfbmFtZSB8fCBjcFsxXSkpIHsKLSsJCWxlbiA9 IHN0cmxlbigrK2NwKTsKLSsJCW1lbW1vdmUocC0+ZnRzX25hbWUsIGNwLCBsZW4gKyAxKTsKLSsJ CXAtPmZ0c19uYW1lbGVuID0gZnRzZW50X25hbWVsZW5fdHJ1bmNhdGUobGVuKTsKLSsJfQotKwlw LT5mdHNfYWNjcGF0aCA9IHAtPmZ0c19wYXRoID0gc3AtPmZ0c19wYXRoOwotKwlzcC0+ZnRzX2Rl diA9IHAtPmZ0c19kZXY7Ci0rfQotKwotK2ludAotK2Z0c19jbG9zZShGVFMgKnNwKQotK3sKLSsJ RlRTRU5UICpmcmVlcCwgKnA7Ci0rCWludCBzYXZlZF9lcnJubyA9IDA7Ci0rCi0rCV9ESUFHQVNT RVJUKHNwICE9IE5VTEwpOwotKwotKwkvKgotKwkgKiBUaGlzIHN0aWxsIHdvcmtzIGlmIHdlIGhh dmVuJ3QgcmVhZCBhbnl0aGluZyAtLSB0aGUgZHVtbXkgc3RydWN0dXJlCi0rCSAqIHBvaW50cyB0 byB0aGUgcm9vdCBsaXN0LCBzbyB3ZSBzdGVwIHRocm91Z2ggdG8gdGhlIGVuZCBvZiB0aGUgcm9v dAotKwkgKiBsaXN0IHdoaWNoIGhhcyBhIHZhbGlkIHBhcmVudCBwb2ludGVyLgotKwkgKi8KLSsJ aWYgKHNwLT5mdHNfY3VyKSB7Ci0rCQlpZiAoc3AtPmZ0c19jdXItPmZ0c19mbGFncyAmIEZUU19T WU1GT0xMT1cpCi0rCQkJKHZvaWQpY2xvc2Uoc3AtPmZ0c19jdXItPmZ0c19zeW1mZCk7Ci0rCQlm b3IgKHAgPSBzcC0+ZnRzX2N1cjsgcC0+ZnRzX2xldmVsID49IEZUU19ST09UTEVWRUw7KSB7Ci0r CQkJZnJlZXAgPSBwOwotKwkJCXAgPSBwLT5mdHNfbGluayA/IHAtPmZ0c19saW5rIDogcC0+ZnRz X3BhcmVudDsKLSsJCQlmdHNfZnJlZShmcmVlcCk7Ci0rCQl9Ci0rCQlmdHNfZnJlZShwKTsKLSsJ fQotKwotKwkvKiBGcmVlIHVwIGNoaWxkIGxpbmtlZCBsaXN0LCBzb3J0IGFycmF5LCBwYXRoIGJ1 ZmZlci4gKi8KLSsJaWYgKHNwLT5mdHNfY2hpbGQpCi0rCQlmdHNfbGZyZWUoc3AtPmZ0c19jaGls ZCk7Ci0rCWlmIChzcC0+ZnRzX2FycmF5KQotKwkJZnJlZShzcC0+ZnRzX2FycmF5KTsKLSsJZnJl ZShzcC0+ZnRzX3BhdGgpOwotKwotKwkvKiBSZXR1cm4gdG8gb3JpZ2luYWwgZGlyZWN0b3J5LCBz YXZlIGVycm5vIGlmIG5lY2Vzc2FyeS4gKi8KLSsJaWYgKCFJU1NFVChGVFNfTk9DSERJUikpIHsK LSsJCWlmIChmY2hkaXIoc3AtPmZ0c19yZmQpID09IC0xKQotKwkJCXNhdmVkX2Vycm5vID0gZXJy bm87Ci0rCQkodm9pZCljbG9zZShzcC0+ZnRzX3JmZCk7Ci0rCX0KLSsKLSsJLyogRnJlZSB1cCB0 aGUgc3RyZWFtIHBvaW50ZXIuICovCi0rCWZyZWUoc3ApOwotKwlpZiAoc2F2ZWRfZXJybm8pIHsK LSsJCWVycm5vID0gc2F2ZWRfZXJybm87Ci0rCQlyZXR1cm4gLTE7Ci0rCX0KLSsKLSsJcmV0dXJu IDA7Ci0rfQotKwotKyNpZiAhZGVmaW5lZChfX0ZUU19DT01QQVRfVEFJTElOR1NMQVNIKQotKwot Ky8qCi0rICogU3BlY2lhbCBjYXNlIG9mICIvIiBhdCB0aGUgZW5kIG9mIHRoZSBwYXRoIHNvIHRo YXQgc2xhc2hlcyBhcmVuJ3QKLSsgKiBhcHBlbmRlZCB3aGljaCB3b3VsZCBjYXVzZSBwYXRocyB0 byBiZSB3cml0dGVuIGFzICIuLi4uLy9mb28iLgotKyAqLwotKyNkZWZpbmUJTkFQUEVORChwKQkJ CQkJCQlcCi0rCShwLT5mdHNfcGF0aFtwLT5mdHNfcGF0aGxlbiAtIDFdID09ICcvJwkJCQlcCi0r CSAgICA/IHAtPmZ0c19wYXRobGVuIC0gMSA6IHAtPmZ0c19wYXRobGVuKQotKwotKyNlbHNlIC8q ICFkZWZpbmVkKF9fRlRTX0NPTVBBVF9UQUlMSU5HU0xBU0gpICovCi0rCi0rLyoKLSsgKiBjb21w YXRpYmlsaXR5IHdpdGggdGhlIG9sZCBiZWhhdmlvdXIuCi0rICoKLSsgKiBTcGVjaWFsIGNhc2Ug YSByb290IG9mICIvIiBzbyB0aGF0IHNsYXNoZXMgYXJlbid0IGFwcGVuZGVkIHdoaWNoIHdvdWxk Ci0rICogY2F1c2UgcGF0aHMgdG8gYmUgd3JpdHRlbiBhcyAiLy9mb28iLgotKyAqLwotKwotKyNk ZWZpbmUJTkFQUEVORChwKQkJCQkJCQlcCi0rCShwLT5mdHNfbGV2ZWwgPT0gRlRTX1JPT1RMRVZF TCAmJiBwLT5mdHNfcGF0aGxlbiA9PSAxICYmCVwKLSsJICAgIHAtPmZ0c19wYXRoWzBdID09ICcv JyA/IDAgOiBwLT5mdHNfcGF0aGxlbikKLSsKLSsjZW5kaWYgLyogIWRlZmluZWQoX19GVFNfQ09N UEFUX1RBSUxJTkdTTEFTSCkgKi8KLSsKLStGVFNFTlQgKgotK2Z0c19yZWFkKEZUUyAqc3ApCi0r ewotKwlGVFNFTlQgKnAsICp0bXA7Ci0rCWludCBpbnN0cjsKLSsJY2hhciAqdDsKLSsJaW50IHNh dmVkX2Vycm5vOwotKwotKwlfRElBR0FTU0VSVChzcCAhPSBOVUxMKTsKLSsKLSsJLyogSWYgZmlu aXNoZWQgb3IgdW5yZWNvdmVyYWJsZSBlcnJvciwgcmV0dXJuIE5VTEwuICovCi0rCWlmIChzcC0+ ZnRzX2N1ciA9PSBOVUxMIHx8IElTU0VUKEZUU19TVE9QKSkKLSsJCXJldHVybiAoTlVMTCk7Ci0r Ci0rCS8qIFNldCBjdXJyZW50IG5vZGUgcG9pbnRlci4gKi8KLSsJcCA9IHNwLT5mdHNfY3VyOwot KwotKwkvKiBTYXZlIGFuZCB6ZXJvIG91dCB1c2VyIGluc3RydWN0aW9ucy4gKi8KLSsJaW5zdHIg PSBwLT5mdHNfaW5zdHI7Ci0rCXAtPmZ0c19pbnN0ciA9IEZUU19OT0lOU1RSOwotKwotKwkvKiBB bnkgdHlwZSBvZiBmaWxlIG1heSBiZSByZS12aXNpdGVkOyByZS1zdGF0IGFuZCByZS10dXJuLiAq LwotKwlpZiAoaW5zdHIgPT0gRlRTX0FHQUlOKSB7Ci0rCQlwLT5mdHNfaW5mbyA9IGZ0c19zdGF0 KHNwLCBwLCAwKTsKLSsJCXJldHVybiAocCk7Ci0rCX0KLSsKLSsJLyoKLSsJICogRm9sbG93aW5n IGEgc3ltbGluayAtLSBTTE5PTkUgdGVzdCBhbGxvd3MgYXBwbGljYXRpb24gdG8gc2VlCi0rCSAq IFNMTk9ORSBhbmQgcmVjb3Zlci4gIElmIGluZGlyZWN0aW5nIHRocm91Z2ggYSBzeW1saW5rLCBo YXZlCi0rCSAqIGtlZXAgYSBwb2ludGVyIHRvIGN1cnJlbnQgbG9jYXRpb24uICBJZiB1bmFibGUg dG8gZ2V0IHRoYXQKLSsJICogcG9pbnRlciwgZm9sbG93IGZhaWxzLgotKwkgKi8KLSsJaWYgKGlu c3RyID09IEZUU19GT0xMT1cgJiYKLSsJICAgIChwLT5mdHNfaW5mbyA9PSBGVFNfU0wgfHwgcC0+ ZnRzX2luZm8gPT0gRlRTX1NMTk9ORSkpIHsKLSsJCXAtPmZ0c19pbmZvID0gZnRzX3N0YXQoc3As IHAsIDEpOwotKwkJaWYgKHAtPmZ0c19pbmZvID09IEZUU19EICYmICFJU1NFVChGVFNfTk9DSERJ UikpIHsKLSsJCQlpZiAoKHAtPmZ0c19zeW1mZCA9IG9wZW4oIi4iLCBPX1JET05MWSB8IE9fQ0xP RVhFQywgMCkpCi0rCQkJICAgID09IC0xKSB7Ci0rCQkJCXAtPmZ0c19lcnJubyA9IGVycm5vOwot KwkJCQlwLT5mdHNfaW5mbyA9IEZUU19FUlI7Ci0rCQkJfSBlbHNlCi0rCQkJCXAtPmZ0c19mbGFn cyB8PSBGVFNfU1lNRk9MTE9XOwotKwkJfQotKwkJcmV0dXJuIChwKTsKLSsJfQotKwotKwkvKiBE aXJlY3RvcnkgaW4gcHJlLW9yZGVyLiAqLwotKwlpZiAocC0+ZnRzX2luZm8gPT0gRlRTX0QpIHsK LSsJCS8qIElmIHNraXBwZWQgb3IgY3Jvc3NlZCBtb3VudCBwb2ludCwgZG8gcG9zdC1vcmRlciB2 aXNpdC4gKi8KLSsJCWlmIChpbnN0ciA9PSBGVFNfU0tJUCB8fAotKwkJICAgIChJU1NFVChGVFNf WERFVikgJiYgcC0+ZnRzX2RldiAhPSBzcC0+ZnRzX2RldikpIHsKLSsJCQlpZiAocC0+ZnRzX2Zs YWdzICYgRlRTX1NZTUZPTExPVykKLSsJCQkJKHZvaWQpY2xvc2UocC0+ZnRzX3N5bWZkKTsKLSsJ CQlpZiAoc3AtPmZ0c19jaGlsZCkgewotKwkJCQlmdHNfbGZyZWUoc3AtPmZ0c19jaGlsZCk7Ci0r CQkJCXNwLT5mdHNfY2hpbGQgPSBOVUxMOwotKwkJCX0KLSsJCQlwLT5mdHNfaW5mbyA9IEZUU19E UDsKLSsJCQlyZXR1cm4gKHApOwotKwkJfQotKwotKwkJLyogUmVidWlsZCBpZiBvbmx5IHJlYWQg dGhlIG5hbWVzIGFuZCBub3cgdHJhdmVyc2luZy4gKi8KLSsJCWlmIChzcC0+ZnRzX2NoaWxkICYm IElTU0VUKEZUU19OQU1FT05MWSkpIHsKLSsJCQlDTFIoRlRTX05BTUVPTkxZKTsKLSsJCQlmdHNf bGZyZWUoc3AtPmZ0c19jaGlsZCk7Ci0rCQkJc3AtPmZ0c19jaGlsZCA9IE5VTEw7Ci0rCQl9Ci0r Ci0rCQkvKgotKwkJICogQ2QgdG8gdGhlIHN1YmRpcmVjdG9yeS4KLSsJCSAqCi0rCQkgKiBJZiBo YXZlIGFscmVhZHkgcmVhZCBhbmQgbm93IGZhaWwgdG8gY2hkaXIsIHdoYWNrIHRoZSBsaXN0Ci0r CQkgKiB0byBtYWtlIHRoZSBuYW1lcyBjb21lIG91dCByaWdodCwgYW5kIHNldCB0aGUgcGFyZW50 IGVycm5vCi0rCQkgKiBzbyB0aGUgYXBwbGljYXRpb24gd2lsbCBldmVudHVhbGx5IGdldCBhbiBl cnJvciBjb25kaXRpb24uCi0rCQkgKiBTZXQgdGhlIEZUU19ET05UQ0hESVIgZmxhZyBzbyB0aGF0 IHdoZW4gd2UgbG9naWNhbGx5IGNoYW5nZQotKwkJICogZGlyZWN0b3JpZXMgYmFjayB0byB0aGUg cGFyZW50IHdlIGRvbid0IGRvIGEgY2hkaXIuCi0rCQkgKgotKwkJICogSWYgaGF2ZW4ndCByZWFk IGRvIHNvLiAgSWYgdGhlIHJlYWQgZmFpbHMsIGZ0c19idWlsZCBzZXRzCi0rCQkgKiBGVFNfU1RP UCBvciB0aGUgZnRzX2luZm8gZmllbGQgb2YgdGhlIG5vZGUuCi0rCQkgKi8KLSsJCWlmIChzcC0+ ZnRzX2NoaWxkKSB7Ci0rCQkJaWYgKGZ0c19zYWZlX2NoYW5nZWRpcihzcCwgcCwgLTEsIHAtPmZ0 c19hY2NwYXRoKSkgewotKwkJCQlwLT5mdHNfZXJybm8gPSBlcnJubzsKLSsJCQkJcC0+ZnRzX2Zs YWdzIHw9IEZUU19ET05UQ0hESVI7Ci0rCQkJCWZvciAocCA9IHNwLT5mdHNfY2hpbGQ7IHA7IHAg PSBwLT5mdHNfbGluaykKLSsJCQkJCXAtPmZ0c19hY2NwYXRoID0KLSsJCQkJCSAgICBwLT5mdHNf cGFyZW50LT5mdHNfYWNjcGF0aDsKLSsJCQl9Ci0rCQl9IGVsc2UgaWYgKChzcC0+ZnRzX2NoaWxk ID0gZnRzX2J1aWxkKHNwLCBCUkVBRCkpID09IE5VTEwpIHsKLSsJCQlpZiAoSVNTRVQoRlRTX1NU T1ApKQotKwkJCQlyZXR1cm4gKE5VTEwpOwotKwkJCXJldHVybiAocCk7Ci0rCQl9Ci0rCQlwID0g c3AtPmZ0c19jaGlsZDsKLSsJCXNwLT5mdHNfY2hpbGQgPSBOVUxMOwotKwkJZ290byBuYW1lOwot Kwl9Ci0rCi0rbmV4dDoJCi0rCS8qIE1vdmUgdG8gdGhlIG5leHQgbm9kZSBvbiB0aGlzIGxldmVs LiAqLwotKwl0bXAgPSBwOwotKwotKwkvKiAKLSsJICogV2UgYXJlIGdvaW5nIHRvIGZyZWUgc3At PmZ0c19jdXIsIHNldCBpdCB0byBOVUxMIHNvIAotKwkgKiB0aGF0IGZ0c19jbG9zZSgpIGRvZXMg bm90IGF0dGVtcHQgdG8gZnJlZSBpdCBhZ2FpbiAKLSsJICogaWYgd2UgZXhpdCB3aXRob3V0IHNl dHRpbmcgaXQgdG8gYSBuZXcgdmFsdWUgYmVjYXVzZQotKwkgKiBGQ0hESVIoKSBmYWlsZWQgYmVs b3cuCi0rCSAqLwotKwlhc3NlcnQodG1wID09IHNwLT5mdHNfY3VyKTsKLSsJc3AtPmZ0c19jdXIg PSBOVUxMOwotKwkKLSsJaWYgKChwID0gcC0+ZnRzX2xpbmspICE9IE5VTEwpIHsKLSsJCWZ0c19m cmVlKHRtcCk7Ci0rCi0rCQkvKgotKwkJICogSWYgcmVhY2hlZCB0aGUgdG9wLCByZXR1cm4gdG8g dGhlIG9yaWdpbmFsIGRpcmVjdG9yeSwgYW5kCi0rCQkgKiBsb2FkIHRoZSBwYXRocyBmb3IgdGhl IG5leHQgcm9vdC4KLSsJCSAqLwotKwkJaWYgKHAtPmZ0c19sZXZlbCA9PSBGVFNfUk9PVExFVkVM KSB7Ci0rCQkJaWYgKEZDSERJUihzcCwgc3AtPmZ0c19yZmQpKSB7Ci0rCQkJCVNFVChGVFNfU1RP UCk7Ci0rCQkJCXJldHVybiAoTlVMTCk7Ci0rCQkJfQotKwkJCWZ0c19sb2FkKHNwLCBwKTsKLSsJ CQlyZXR1cm4gKHNwLT5mdHNfY3VyID0gcCk7Ci0rCQl9Ci0rCi0rCQkvKgotKwkJICogVXNlciBt YXkgaGF2ZSBjYWxsZWQgZnRzX3NldCBvbiB0aGUgbm9kZS4gIElmIHNraXBwZWQsCi0rCQkgKiBp Z25vcmUuICBJZiBmb2xsb3dlZCwgZ2V0IGEgZmlsZSBkZXNjcmlwdG9yIHNvIHdlIGNhbgotKwkJ ICogZ2V0IGJhY2sgaWYgbmVjZXNzYXJ5LgotKwkJICovCi0rCQlpZiAocC0+ZnRzX2luc3RyID09 IEZUU19TS0lQKQotKwkJCWdvdG8gbmV4dDsKLSsJCWlmIChwLT5mdHNfaW5zdHIgPT0gRlRTX0ZP TExPVykgewotKwkJCXAtPmZ0c19pbmZvID0gZnRzX3N0YXQoc3AsIHAsIDEpOwotKwkJCWlmIChw LT5mdHNfaW5mbyA9PSBGVFNfRCAmJiAhSVNTRVQoRlRTX05PQ0hESVIpKSB7Ci0rCQkJCWlmICgo cC0+ZnRzX3N5bWZkID0KLSsJCQkJICAgIG9wZW4oIi4iLCBPX1JET05MWSB8IE9fQ0xPRVhFQywg MCkpID09IC0xKSB7Ci0rCQkJCQlwLT5mdHNfZXJybm8gPSBlcnJubzsKLSsJCQkJCXAtPmZ0c19p bmZvID0gRlRTX0VSUjsKLSsJCQkJfSBlbHNlCi0rCQkJCQlwLT5mdHNfZmxhZ3MgfD0gRlRTX1NZ TUZPTExPVzsKLSsJCQl9Ci0rCQkJcC0+ZnRzX2luc3RyID0gRlRTX05PSU5TVFI7Ci0rCQl9Ci0r Ci0rbmFtZToJCXQgPSBzcC0+ZnRzX3BhdGggKyBOQVBQRU5EKHAtPmZ0c19wYXJlbnQpOwotKwkJ KnQrKyA9ICcvJzsKLSsJCW1lbW1vdmUodCwgcC0+ZnRzX25hbWUsIChzaXplX3QpKHAtPmZ0c19u YW1lbGVuICsgMSkpOwotKwkJcmV0dXJuIChzcC0+ZnRzX2N1ciA9IHApOwotKwl9Ci0rCi0rCS8q IE1vdmUgdXAgdG8gdGhlIHBhcmVudCBub2RlLiAqLwotKwlwID0gdG1wLT5mdHNfcGFyZW50Owot KwlmdHNfZnJlZSh0bXApOwotKwotKwlpZiAocC0+ZnRzX2xldmVsID09IEZUU19ST09UUEFSRU5U TEVWRUwpIHsKLSsJCS8qCi0rCQkgKiBEb25lOyBmcmVlIGV2ZXJ5dGhpbmcgdXAgYW5kIHNldCBl cnJubyB0byAwIHNvIHRoZSB1c2VyCi0rCQkgKiBjYW4gZGlzdGluZ3Vpc2ggYmV0d2VlbiBlcnJv ciBhbmQgRU9GLgotKwkJICovCi0rCQlmdHNfZnJlZShwKTsKLSsJCWVycm5vID0gMDsKLSsJCXJl dHVybiAoc3AtPmZ0c19jdXIgPSBOVUxMKTsKLSsJfQotKwotKwkvKiBOVUwgdGVybWluYXRlIHRo ZSBwYXRobmFtZS4gKi8KLSsJc3AtPmZ0c19wYXRoW3AtPmZ0c19wYXRobGVuXSA9ICdcMCc7Ci0r Ci0rCS8qCi0rCSAqIFJldHVybiB0byB0aGUgcGFyZW50IGRpcmVjdG9yeS4gIElmIGF0IGEgcm9v dCBub2RlIG9yIGNhbWUgdGhyb3VnaAotKwkgKiBhIHN5bWxpbmssIGdvIGJhY2sgdGhyb3VnaCB0 aGUgZmlsZSBkZXNjcmlwdG9yLiAgT3RoZXJ3aXNlLCBjZCB1cAotKwkgKiBvbmUgZGlyZWN0b3J5 LgotKwkgKi8KLSsJaWYgKHAtPmZ0c19sZXZlbCA9PSBGVFNfUk9PVExFVkVMKSB7Ci0rCQlpZiAo RkNIRElSKHNwLCBzcC0+ZnRzX3JmZCkpIHsKLSsJCQlTRVQoRlRTX1NUT1ApOwotKwkJCXJldHVy biAoTlVMTCk7Ci0rCQl9Ci0rCX0gZWxzZSBpZiAocC0+ZnRzX2ZsYWdzICYgRlRTX1NZTUZPTExP VykgewotKwkJaWYgKEZDSERJUihzcCwgcC0+ZnRzX3N5bWZkKSkgewotKwkJCXNhdmVkX2Vycm5v ID0gZXJybm87Ci0rCQkJKHZvaWQpY2xvc2UocC0+ZnRzX3N5bWZkKTsKLSsJCQllcnJubyA9IHNh dmVkX2Vycm5vOwotKwkJCVNFVChGVFNfU1RPUCk7Ci0rCQkJcmV0dXJuIChOVUxMKTsKLSsJCX0K LSsJCSh2b2lkKWNsb3NlKHAtPmZ0c19zeW1mZCk7Ci0rCX0gZWxzZSBpZiAoIShwLT5mdHNfZmxh Z3MgJiBGVFNfRE9OVENIRElSKSAmJgotKwkgICAgZnRzX3NhZmVfY2hhbmdlZGlyKHNwLCBwLT5m dHNfcGFyZW50LCAtMSwgIi4uIikpIHsKLSsJCVNFVChGVFNfU1RPUCk7Ci0rCQlyZXR1cm4gKE5V TEwpOwotKwl9Ci0rCXAtPmZ0c19pbmZvID0gcC0+ZnRzX2Vycm5vID8gRlRTX0VSUiA6IEZUU19E UDsKLSsJcmV0dXJuIChzcC0+ZnRzX2N1ciA9IHApOwotK30KLSsKLSsvKgotKyAqIEZ0c19zZXQg dGFrZXMgdGhlIHN0cmVhbSBhcyBhbiBhcmd1bWVudCBhbHRob3VnaCBpdCdzIG5vdCB1c2VkIGlu IHRoaXMKLSsgKiBpbXBsZW1lbnRhdGlvbjsgaXQgd291bGQgYmUgbmVjZXNzYXJ5IGlmIGFueW9u ZSB3YW50ZWQgdG8gYWRkIGdsb2JhbAotKyAqIHNlbWFudGljcyB0byBmdHMgdXNpbmcgZnRzX3Nl dC4gIEFuIGVycm9yIHJldHVybiBpcyBhbGxvd2VkIGZvciBzaW1pbGFyCi0rICogcmVhc29ucy4K LSsgKi8KLSsvKiBBUkdTVVNFRCAqLwotK2ludAotK2Z0c19zZXQoRlRTICpzcCwgRlRTRU5UICpw LCBpbnQgaW5zdHIpCi0rewotKwotKwlfRElBR0FTU0VSVChzcCAhPSBOVUxMKTsKLSsJX0RJQUdB U1NFUlQocCAhPSBOVUxMKTsKLSsKLSsJaWYgKGluc3RyICYmIGluc3RyICE9IEZUU19BR0FJTiAm JiBpbnN0ciAhPSBGVFNfRk9MTE9XICYmCi0rCSAgICBpbnN0ciAhPSBGVFNfTk9JTlNUUiAmJiBp bnN0ciAhPSBGVFNfU0tJUCkgewotKwkJZXJybm8gPSBFSU5WQUw7Ci0rCQlyZXR1cm4gKDEpOwot Kwl9Ci0rCXAtPmZ0c19pbnN0ciA9IGluc3RyOwotKwlyZXR1cm4gKDApOwotK30KLSsKLStGVFNF TlQgKgotK2Z0c19jaGlsZHJlbihGVFMgKnNwLCBpbnQgaW5zdHIpCi0rewotKwlGVFNFTlQgKnA7 Ci0rCWludCBmZDsKLSsKLSsJX0RJQUdBU1NFUlQoc3AgIT0gTlVMTCk7Ci0rCi0rCWlmIChpbnN0 ciAmJiBpbnN0ciAhPSBGVFNfTkFNRU9OTFkpIHsKLSsJCWVycm5vID0gRUlOVkFMOwotKwkJcmV0 dXJuIChOVUxMKTsKLSsJfQotKwotKwkvKiBTZXQgY3VycmVudCBub2RlIHBvaW50ZXIuICovCi0r CXAgPSBzcC0+ZnRzX2N1cjsKLSsKLSsJLyoKLSsJICogRXJybm8gc2V0IHRvIDAgc28gdXNlciBj YW4gZGlzdGluZ3Vpc2ggZW1wdHkgZGlyZWN0b3J5IGZyb20KLSsJICogYW4gZXJyb3IuCi0rCSAq LwotKwllcnJubyA9IDA7Ci0rCi0rCS8qIEZhdGFsIGVycm9ycyBzdG9wIGhlcmUuICovCi0rCWlm IChJU1NFVChGVFNfU1RPUCkpCi0rCQlyZXR1cm4gKE5VTEwpOwotKwotKwkvKiBSZXR1cm4gbG9n aWNhbCBoaWVyYXJjaHkgb2YgdXNlcidzIGFyZ3VtZW50cy4gKi8KLSsJaWYgKHAtPmZ0c19pbmZv ID09IEZUU19JTklUKQotKwkJcmV0dXJuIChwLT5mdHNfbGluayk7Ci0rCi0rCS8qCi0rCSAqIElm IG5vdCBhIGRpcmVjdG9yeSBiZWluZyB2aXNpdGVkIGluIHByZS1vcmRlciwgc3RvcCBoZXJlLiAg Q291bGQKLSsJICogYWxsb3cgRlRTX0ROUiwgYXNzdW1pbmcgdGhlIHVzZXIgaGFzIGZpeGVkIHRo ZSBwcm9ibGVtLCBidXQgdGhlCi0rCSAqIHNhbWUgZWZmZWN0IGlzIGF2YWlsYWJsZSB3aXRoIEZU U19BR0FJTi4KLSsJICovCi0rCWlmIChwLT5mdHNfaW5mbyAhPSBGVFNfRCAvKiAmJiBwLT5mdHNf aW5mbyAhPSBGVFNfRE5SICovKQotKwkJcmV0dXJuIChOVUxMKTsKLSsKLSsJLyogRnJlZSB1cCBh bnkgcHJldmlvdXMgY2hpbGQgbGlzdC4gKi8KLSsJaWYgKHNwLT5mdHNfY2hpbGQpCi0rCQlmdHNf bGZyZWUoc3AtPmZ0c19jaGlsZCk7Ci0rCi0rCWlmIChpbnN0ciA9PSBGVFNfTkFNRU9OTFkpIHsK LSsJCVNFVChGVFNfTkFNRU9OTFkpOwotKwkJaW5zdHIgPSBCTkFNRVM7Ci0rCX0gZWxzZQotKwkJ aW5zdHIgPSBCQ0hJTEQ7Ci0rCi0rCS8qCi0rCSAqIElmIHVzaW5nIGNoZGlyIG9uIGEgcmVsYXRp dmUgcGF0aCBhbmQgY2FsbGVkIEJFRk9SRSBmdHNfcmVhZCBkb2VzCi0rCSAqIGl0cyBjaGRpciB0 byB0aGUgcm9vdCBvZiBhIHRyYXZlcnNhbCwgd2UgY2FuIGxvc2UgLS0gd2UgbmVlZCB0bwotKwkg KiBjaGRpciBpbnRvIHRoZSBzdWJkaXJlY3RvcnksIGFuZCB3ZSBkb24ndCBrbm93IHdoZXJlIHRo ZSBjdXJyZW50Ci0rCSAqIGRpcmVjdG9yeSBpcywgc28gd2UgY2FuJ3QgZ2V0IGJhY2sgc28gdGhh dCB0aGUgdXBjb21pbmcgY2hkaXIgYnkKLSsJICogZnRzX3JlYWQgd2lsbCB3b3JrLgotKwkgKi8K LSsJaWYgKHAtPmZ0c19sZXZlbCAhPSBGVFNfUk9PVExFVkVMIHx8IHAtPmZ0c19hY2NwYXRoWzBd ID09ICcvJyB8fAotKwkgICAgSVNTRVQoRlRTX05PQ0hESVIpKQotKwkJcmV0dXJuIChzcC0+ZnRz X2NoaWxkID0gZnRzX2J1aWxkKHNwLCBpbnN0cikpOwotKwotKwlpZiAoKGZkID0gb3BlbigiLiIs IE9fUkRPTkxZIHwgT19DTE9FWEVDLCAwKSkgPT0gLTEpCi0rCQlyZXR1cm4gKHNwLT5mdHNfY2hp bGQgPSBOVUxMKTsKLSsJc3AtPmZ0c19jaGlsZCA9IGZ0c19idWlsZChzcCwgaW5zdHIpOwotKwlp ZiAoZmNoZGlyKGZkKSkgewotKwkJKHZvaWQpY2xvc2UoZmQpOwotKwkJcmV0dXJuIChOVUxMKTsK LSsJfQotKwkodm9pZCljbG9zZShmZCk7Ci0rCXJldHVybiAoc3AtPmZ0c19jaGlsZCk7Ci0rfQot KwotKy8qCi0rICogVGhpcyBpcyB0aGUgdHJpY2t5IHBhcnQgLS0gZG8gbm90IGNhc3VhbGx5IGNo YW5nZSAqYW55dGhpbmcqIGluIGhlcmUuICBUaGUKLSsgKiBpZGVhIGlzIHRvIGJ1aWxkIHRoZSBs aW5rZWQgbGlzdCBvZiBlbnRyaWVzIHRoYXQgYXJlIHVzZWQgYnkgZnRzX2NoaWxkcmVuCi0rICog YW5kIGZ0c19yZWFkLiAgVGhlcmUgYXJlIGxvdHMgb2Ygc3BlY2lhbCBjYXNlcy4KLSsgKgotKyAq IFRoZSByZWFsIHNsb3dkb3duIGluIHdhbGtpbmcgdGhlIHRyZWUgaXMgdGhlIHN0YXQgY2FsbHMu ICBJZiBGVFNfTk9TVEFUIGlzCi0rICogc2V0IGFuZCBpdCdzIGEgcGh5c2ljYWwgd2FsayAoc28g dGhhdCBzeW1ib2xpYyBsaW5rcyBjYW4ndCBiZSBkaXJlY3RvcmllcyksCi0rICogd2UgY2FuIGRv IHRoaW5ncyBxdWlja2x5LiAgRmlyc3QsIGlmIGl0J3MgYSA0LjRCU0QgZmlsZSBzeXN0ZW0sIHRo ZSB0eXBlCi0rICogb2YgdGhlIGZpbGUgaXMgaW4gdGhlIGRpcmVjdG9yeSBlbnRyeS4gIE90aGVy d2lzZSwgd2UgYXNzdW1lIHRoYXQgdGhlIG51bWJlcgotKyAqIG9mIHN1YmRpcmVjdG9yaWVzIGlu IGEgbm9kZSBpcyBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIGxpbmtzIHRvIHRoZSBwYXJlbnQuCi0r ICogVGhlIGZvcm1lciBza2lwcyBhbGwgc3RhdCBjYWxscy4gIFRoZSBsYXR0ZXIgc2tpcHMgc3Rh dCBjYWxscyBpbiBhbnkgbGVhZgotKyAqIGRpcmVjdG9yaWVzIGFuZCBmb3IgYW55IGZpbGVzIGFm dGVyIHRoZSBzdWJkaXJlY3RvcmllcyBpbiB0aGUgZGlyZWN0b3J5IGhhdmUKLSsgKiBiZWVuIGZv dW5kLCBjdXR0aW5nIHRoZSBzdGF0IGNhbGxzIGJ5IGFib3V0IDIvMy4KLSsgKi8KLStzdGF0aWMg RlRTRU5UICoKLStmdHNfYnVpbGQoRlRTICpzcCwgaW50IHR5cGUpCi0rewotKwlzdHJ1Y3QgZGly ZW50ICpkcDsKLSsJRlRTRU5UICpwLCAqaGVhZDsKLSsJc2l6ZV90IG5pdGVtczsKLSsJRlRTRU5U ICpjdXIsICp0YWlsOwotKwlESVIgKmRpcnA7Ci0rCXZvaWQgKm9sZGFkZHI7Ci0rCXNpemVfdCBk bmFtbGVuOwotKwlpbnQgY2RlcnJubywgZGVzY2VuZCwgbGV2ZWwsIG5saW5rcywgc2F2ZWRfZXJy bm8sIG5vc3RhdCwgZG9hZGp1c3Q7Ci0rCXNpemVfdCBsZW4sIG1heGxlbjsKLSsjaWZkZWYgRlRT X1dISVRFT1VUCi0rCWludCBvZmxhZzsKLSsjZW5kaWYKLSsJY2hhciAqY3AgPSBOVUxMOwkvKiBw YWNpZnkgZ2NjICovCi0rCi0rCV9ESUFHQVNTRVJUKHNwICE9IE5VTEwpOwotKwotKwkvKiBTZXQg Y3VycmVudCBub2RlIHBvaW50ZXIuICovCi0rCWN1ciA9IHNwLT5mdHNfY3VyOwotKwotKwkvKgot KwkgKiBPcGVuIHRoZSBkaXJlY3RvcnkgZm9yIHJlYWRpbmcuICBJZiB0aGlzIGZhaWxzLCB3ZSdy ZSBkb25lLgotKwkgKiBJZiBiZWluZyBjYWxsZWQgZnJvbSBmdHNfcmVhZCwgc2V0IHRoZSBmdHNf aW5mbyBmaWVsZC4KLSsJICovCi0rI2lmZGVmIEZUU19XSElURU9VVAotKwlpZiAoSVNTRVQoRlRT X1dISVRFT1VUKSkKLSsJCW9mbGFnID0gRFRGX05PRFVQfERURl9SRVdJTkQ7Ci0rCWVsc2UKLSsJ CW9mbGFnID0gRFRGX0hJREVXfERURl9OT0RVUHxEVEZfUkVXSU5EOwotKyNlbHNlCi0rI2RlZmlu ZQlfX29wZW5kaXIyKHBhdGgsIGZsYWcpIG9wZW5kaXIocGF0aCkKLSsjZW5kaWYKLSsJaWYgKChk aXJwID0gX19vcGVuZGlyMihjdXItPmZ0c19hY2NwYXRoLCBvZmxhZykpID09IE5VTEwpIHsKLSsJ CWlmICh0eXBlID09IEJSRUFEKSB7Ci0rCQkJY3VyLT5mdHNfaW5mbyA9IEZUU19ETlI7Ci0rCQkJ Y3VyLT5mdHNfZXJybm8gPSBlcnJubzsKLSsJCX0KLSsJCXJldHVybiAoTlVMTCk7Ci0rCX0KLSsK LSsJLyoKLSsJICogTmxpbmtzIGlzIHRoZSBudW1iZXIgb2YgcG9zc2libGUgZW50cmllcyBvZiB0 eXBlIGRpcmVjdG9yeSBpbiB0aGUKLSsJICogZGlyZWN0b3J5IGlmIHdlJ3JlIGNoZWF0aW5nIG9u IHN0YXQgY2FsbHMsIDAgaWYgd2UncmUgbm90IGRvaW5nCi0rCSAqIGFueSBzdGF0IGNhbGxzIGF0 IGFsbCwgLTEgaWYgd2UncmUgZG9pbmcgc3RhdHMgb24gZXZlcnl0aGluZy4KLSsJICovCi0rCWlm ICh0eXBlID09IEJOQU1FUykgewotKwkJbmxpbmtzID0gMDsKLSsJCW5vc3RhdCA9IDE7Ci0rCX0g ZWxzZSBpZiAoSVNTRVQoRlRTX05PU1RBVCkgJiYgSVNTRVQoRlRTX1BIWVNJQ0FMKSkgewotKwkJ bmxpbmtzID0gY3VyLT5mdHNfbmxpbmsgLSAoSVNTRVQoRlRTX1NFRURPVCkgPyAwIDogMik7Ci0r CQlub3N0YXQgPSAxOwotKwl9IGVsc2UgewotKwkJbmxpbmtzID0gLTE7Ci0rCQlub3N0YXQgPSAw OwotKwl9Ci0rCi0rI2lmZGVmIG5vdGRlZgotKwkodm9pZClwcmludGYoIm5saW5rcyA9PSAlZCAo Y3VyOiAlZClcbiIsIG5saW5rcywgY3VyLT5mdHNfbmxpbmspOwotKwkodm9pZClwcmludGYoIk5P U1RBVCAlZCBQSFlTSUNBTCAlZCBTRUVET1QgJWRcbiIsCi0rCSAgICBJU1NFVChGVFNfTk9TVEFU KSwgSVNTRVQoRlRTX1BIWVNJQ0FMKSwgSVNTRVQoRlRTX1NFRURPVCkpOwotKyNlbmRpZgotKwkv KgotKwkgKiBJZiB3ZSdyZSBnb2luZyB0byBuZWVkIHRvIHN0YXQgYW55dGhpbmcgb3Igd2Ugd2Fu dCB0byBkZXNjZW5kCi0rCSAqIGFuZCBzdGF5IGluIHRoZSBkaXJlY3RvcnksIGNoZGlyLiAgSWYg dGhpcyBmYWlscyB3ZSBrZWVwIGdvaW5nLAotKwkgKiBidXQgc2V0IGEgZmxhZyBzbyB3ZSBkb24n dCBjaGRpciBhZnRlciB0aGUgcG9zdC1vcmRlciB2aXNpdC4KLSsJICogV2Ugd29uJ3QgYmUgYWJs ZSB0byBzdGF0IGFueXRoaW5nLCBidXQgd2UgY2FuIHN0aWxsIHJldHVybiB0aGUKLSsJICogbmFt ZXMgdGhlbXNlbHZlcy4gIE5vdGUsIHRoYXQgc2luY2UgZnRzX3JlYWQgd29uJ3QgYmUgYWJsZSB0 bwotKwkgKiBjaGRpciBpbnRvIHRoZSBkaXJlY3RvcnksIGl0IHdpbGwgaGF2ZSB0byByZXR1cm4g ZGlmZmVyZW50IHBhdGgKLSsJICogbmFtZXMgdGhhbiBiZWZvcmUsIGkuZS4gImEvYiIgaW5zdGVh ZCBvZiAiYiIuICBTaW5jZSB0aGUgbm9kZQotKwkgKiBoYXMgYWxyZWFkeSBiZWVuIHZpc2l0ZWQg aW4gcHJlLW9yZGVyLCBoYXZlIHRvIHdhaXQgdW50aWwgdGhlCi0rCSAqIHBvc3Qtb3JkZXIgdmlz aXQgdG8gcmV0dXJuIHRoZSBlcnJvci4gIFRoZXJlIGlzIGEgc3BlY2lhbCBjYXNlCi0rCSAqIGhl cmUsIGlmIHRoZXJlIHdhcyBub3RoaW5nIHRvIHN0YXQgdGhlbiBpdCdzIG5vdCBhbiBlcnJvciB0 bwotKwkgKiBub3QgYmUgYWJsZSB0byBzdGF0LiAgVGhpcyBpcyBhbGwgZmFpcmx5IG5hc3R5LiAg SWYgYSBwcm9ncmFtCi0rCSAqIG5lZWRlZCBzb3J0ZWQgZW50cmllcyBvciBzdGF0IGluZm9ybWF0 aW9uLCB0aGV5IGhhZCBiZXR0ZXIgYmUKLSsJICogY2hlY2tpbmcgRlRTX05TIG9uIHRoZSByZXR1 cm5lZCBub2Rlcy4KLSsJICovCi0rCWNkZXJybm8gPSAwOwotKwlpZiAobmxpbmtzIHx8IHR5cGUg PT0gQlJFQUQpIHsKLSsJCWlmIChmdHNfc2FmZV9jaGFuZ2VkaXIoc3AsIGN1ciwgZGlyZmQoZGly cCksIE5VTEwpKSB7Ci0rCQkJaWYgKG5saW5rcyAmJiB0eXBlID09IEJSRUFEKQotKwkJCQljdXIt PmZ0c19lcnJubyA9IGVycm5vOwotKwkJCWN1ci0+ZnRzX2ZsYWdzIHw9IEZUU19ET05UQ0hESVI7 Ci0rCQkJZGVzY2VuZCA9IDA7Ci0rCQkJY2RlcnJubyA9IGVycm5vOwotKwkJfSBlbHNlCi0rCQkJ ZGVzY2VuZCA9IDE7Ci0rCX0gZWxzZQotKwkJZGVzY2VuZCA9IDA7Ci0rCi0rCS8qCi0rCSAqIEZp Z3VyZSBvdXQgdGhlIG1heCBmaWxlIG5hbWUgbGVuZ3RoIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiB0 aGUKLSsJICogY3VycmVudCBwYXRoIC0tIHRoZSBpbm5lciBsb29wIGFsbG9jYXRlcyBtb3JlIHBh dGggYXMgbmVjZXNzYXJ5LgotKwkgKiBXZSByZWFsbHkgd291bGRuJ3QgaGF2ZSB0byBkbyB0aGUg bWF4bGVuIGNhbGN1bGF0aW9ucyBoZXJlLCB3ZQotKwkgKiBjb3VsZCBkbyB0aGVtIGluIGZ0c19y ZWFkIGJlZm9yZSByZXR1cm5pbmcgdGhlIHBhdGgsIGJ1dCBpdCdzIGEKLSsJICogbG90IGVhc2ll ciBoZXJlIHNpbmNlIHRoZSBsZW5ndGggaXMgcGFydCBvZiB0aGUgZGlyZW50IHN0cnVjdHVyZS4K LSsJICoKLSsJICogSWYgbm90IGNoYW5naW5nIGRpcmVjdG9yaWVzIHNldCBhIHBvaW50ZXIgc28g dGhhdCBjYW4ganVzdCBhcHBlbmQKLSsJICogZWFjaCBuZXcgbmFtZSBpbnRvIHRoZSBwYXRoLgot KwkgKi8KLSsJbGVuID0gTkFQUEVORChjdXIpOwotKwlpZiAoSVNTRVQoRlRTX05PQ0hESVIpKSB7 Ci0rCQljcCA9IHNwLT5mdHNfcGF0aCArIGxlbjsKLSsJCSpjcCsrID0gJy8nOwotKwl9Ci0rCWxl bisrOwotKwltYXhsZW4gPSBzcC0+ZnRzX3BhdGhsZW4gLSBsZW47Ci0rCi0rI2lmIGRlZmluZWQo X19GVFNfQ09NUEFUX0xFVkVMKQotKwlpZiAoY3VyLT5mdHNfbGV2ZWwgPT0gU0hSVF9NQVgpIHsK LSsJCSh2b2lkKWNsb3NlZGlyKGRpcnApOwotKwkJY3VyLT5mdHNfaW5mbyA9IEZUU19FUlI7Ci0r CQlTRVQoRlRTX1NUT1ApOwotKwkJZXJybm8gPSBFTkFNRVRPT0xPTkc7Ci0rCQlyZXR1cm4gKE5V TEwpOwotKwl9Ci0rI2VuZGlmCi0rCi0rCWxldmVsID0gY3VyLT5mdHNfbGV2ZWwgKyAxOwotKwot KwkvKiBSZWFkIHRoZSBkaXJlY3RvcnksIGF0dGFjaGluZyBlYWNoIGVudHJ5IHRvIHRoZSBgbGlu aycgcG9pbnRlci4gKi8KLSsJZG9hZGp1c3QgPSAwOwotKwlmb3IgKGhlYWQgPSB0YWlsID0gTlVM TCwgbml0ZW1zID0gMDsgKGRwID0gcmVhZGRpcihkaXJwKSkgIT0gTlVMTDspIHsKLSsKLSsJCWlm ICghSVNTRVQoRlRTX1NFRURPVCkgJiYgSVNET1QoZHAtPmRfbmFtZSkpCi0rCQkJY29udGludWU7 Ci0rCi0rI2lmIGRlZmluZWQoSEFWRV9TVFJVQ1RfRElSRU5UX0RfTkFNTEVOKQotKwkJZG5hbWxl biA9IGRwLT5kX25hbWxlbjsKLSsjZWxzZQotKwkJZG5hbWxlbiA9IHN0cmxlbihkcC0+ZF9uYW1l KTsKLSsjZW5kaWYKLSsJCWlmICgocCA9IGZ0c19hbGxvYyhzcCwgZHAtPmRfbmFtZSwgZG5hbWxl bikpID09IE5VTEwpCi0rCQkJZ290byBtZW0xOwotKwkJaWYgKGRuYW1sZW4gPj0gbWF4bGVuKSB7 CS8qIGluY2x1ZGUgc3BhY2UgZm9yIE5VTCAqLwotKwkJCW9sZGFkZHIgPSBzcC0+ZnRzX3BhdGg7 Ci0rCQkJaWYgKGZ0c19wYWxsb2Moc3AsIGRuYW1sZW4gKyBsZW4gKyAxKSkgewotKwkJCQkvKgot KwkJCQkgKiBObyBtb3JlIG1lbW9yeSBmb3IgcGF0aCBvciBzdHJ1Y3R1cmVzLiAgU2F2ZQotKwkJ CQkgKiBlcnJubywgZnJlZSB1cCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgYW5kIHRoZQotKwkJCQkg KiBzdHJ1Y3R1cmVzIGFscmVhZHkgYWxsb2NhdGVkLgotKwkJCQkgKi8KLSttZW0xOgkJCQlzYXZl ZF9lcnJubyA9IGVycm5vOwotKwkJCQlpZiAocCkKLSsJCQkJCWZ0c19mcmVlKHApOwotKwkJCQlm dHNfbGZyZWUoaGVhZCk7Ci0rCQkJCSh2b2lkKWNsb3NlZGlyKGRpcnApOwotKwkJCQllcnJubyA9 IHNhdmVkX2Vycm5vOwotKwkJCQljdXItPmZ0c19pbmZvID0gRlRTX0VSUjsKLSsJCQkJU0VUKEZU U19TVE9QKTsKLSsJCQkJcmV0dXJuIChOVUxMKTsKLSsJCQl9Ci0rCQkJLyogRGlkIHJlYWxsb2Mo KSBjaGFuZ2UgdGhlIHBvaW50ZXI/ICovCi0rCQkJaWYgKG9sZGFkZHIgIT0gc3AtPmZ0c19wYXRo KSB7Ci0rCQkJCWRvYWRqdXN0ID0gMTsKLSsJCQkJaWYgKElTU0VUKEZUU19OT0NIRElSKSkKLSsJ CQkJCWNwID0gc3AtPmZ0c19wYXRoICsgbGVuOwotKwkJCX0KLSsJCQltYXhsZW4gPSBzcC0+ZnRz X3BhdGhsZW4gLSBsZW47Ci0rCQl9Ci0rCi0rI2lmIGRlZmluZWQoX19GVFNfQ09NUEFUX0xFTkdU SCkKLSsJCWlmIChsZW4gKyBkbmFtbGVuID49IFVTSFJUX01BWCkgewotKwkJCS8qCi0rCQkJICog SW4gYW4gRlRTRU5ULCBmdHNfcGF0aGxlbiBpcyBhbiB1bnNpZ25lZCBzaG9ydAotKwkJCSAqIHNv IGl0IGlzIHBvc3NpYmxlIHRvIHdyYXBhcm91bmQgaGVyZS4KLSsJCQkgKiBJZiB3ZSBkbywgZnJl ZSB1cCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgYW5kIHRoZQotKwkJCSAqIHN0cnVjdHVyZXMgYWxy ZWFkeSBhbGxvY2F0ZWQsIHRoZW4gZXJyb3Igb3V0Ci0rCQkJICogd2l0aCBFTkFNRVRPT0xPTkcu Ci0rCQkJICovCi0rCQkJZnRzX2ZyZWUocCk7Ci0rCQkJZnRzX2xmcmVlKGhlYWQpOwotKwkJCSh2 b2lkKWNsb3NlZGlyKGRpcnApOwotKwkJCWN1ci0+ZnRzX2luZm8gPSBGVFNfRVJSOwotKwkJCVNF VChGVFNfU1RPUCk7Ci0rCQkJZXJybm8gPSBFTkFNRVRPT0xPTkc7Ci0rCQkJcmV0dXJuIChOVUxM KTsKLSsJCX0KLSsjZW5kaWYKLSsJCXAtPmZ0c19sZXZlbCA9IGxldmVsOwotKwkJcC0+ZnRzX3Bh dGhsZW4gPSBmdHNlbnRfcGF0aGxlbl90cnVuY2F0ZShsZW4gKyBkbmFtbGVuKTsKLSsJCXAtPmZ0 c19wYXJlbnQgPSBzcC0+ZnRzX2N1cjsKLSsKLSsjaWZkZWYgRlRTX1dISVRFT1VUCi0rCQlpZiAo ZHAtPmRfdHlwZSA9PSBEVF9XSFQpCi0rCQkJcC0+ZnRzX2ZsYWdzIHw9IEZUU19JU1c7Ci0rI2Vu ZGlmCi0rCi0rCQlpZiAoY2RlcnJubykgewotKwkJCWlmIChubGlua3MpIHsKLSsJCQkJcC0+ZnRz X2luZm8gPSBGVFNfTlM7Ci0rCQkJCXAtPmZ0c19lcnJubyA9IGNkZXJybm87Ci0rCQkJfSBlbHNl Ci0rCQkJCXAtPmZ0c19pbmZvID0gRlRTX05TT0s7Ci0rCQkJcC0+ZnRzX2FjY3BhdGggPSBjdXIt PmZ0c19hY2NwYXRoOwotKwkJfSBlbHNlIGlmIChubGlua3MgPT0gMAotKyNpZmRlZiBEVF9ESVIK LSsJCSAgICB8fCAobm9zdGF0ICYmCi0rCQkgICAgZHAtPmRfdHlwZSAhPSBEVF9ESVIgJiYgZHAt PmRfdHlwZSAhPSBEVF9VTktOT1dOKQotKyNlbmRpZgotKwkJICAgICkgewotKwkJCXAtPmZ0c19h Y2NwYXRoID0KLSsJCQkgICAgSVNTRVQoRlRTX05PQ0hESVIpID8gcC0+ZnRzX3BhdGggOiBwLT5m dHNfbmFtZTsKLSsJCQlwLT5mdHNfaW5mbyA9IEZUU19OU09LOwotKwkJfSBlbHNlIHsKLSsJCQkv KiBCdWlsZCBhIGZpbGUgbmFtZSBmb3IgZnRzX3N0YXQgdG8gc3RhdC4gKi8KLSsJCQlpZiAoSVNT RVQoRlRTX05PQ0hESVIpKSB7Ci0rCQkJCXAtPmZ0c19hY2NwYXRoID0gcC0+ZnRzX3BhdGg7Ci0r CQkJCW1lbW1vdmUoY3AsIHAtPmZ0c19uYW1lLAotKwkJCQkgICAgICAgIChzaXplX3QpKHAtPmZ0 c19uYW1lbGVuICsgMSkpOwotKwkJCX0gZWxzZQotKwkJCQlwLT5mdHNfYWNjcGF0aCA9IHAtPmZ0 c19uYW1lOwotKwkJCS8qIFN0YXQgaXQuICovCi0rCQkJcC0+ZnRzX2luZm8gPSBmdHNfc3RhdChz cCwgcCwgMCk7Ci0rCi0rCQkJLyogRGVjcmVtZW50IGxpbmsgY291bnQgaWYgYXBwbGljYWJsZS4g Ki8KLSsJCQlpZiAobmxpbmtzID4gMCAmJiAocC0+ZnRzX2luZm8gPT0gRlRTX0QgfHwKLSsJCQkg ICAgcC0+ZnRzX2luZm8gPT0gRlRTX0RDIHx8IHAtPmZ0c19pbmZvID09IEZUU19ET1QpKQotKwkJ CQktLW5saW5rczsKLSsJCX0KLSsKLSsJCS8qIFdlIHdhbGsgaW4gZGlyZWN0b3J5IG9yZGVyIHNv ICJscyAtZiIgZG9lc24ndCBnZXQgdXBzZXQuICovCi0rCQlwLT5mdHNfbGluayA9IE5VTEw7Ci0r CQlpZiAoaGVhZCA9PSBOVUxMKQotKwkJCWhlYWQgPSB0YWlsID0gcDsKLSsJCWVsc2UgewotKwkJ CXRhaWwtPmZ0c19saW5rID0gcDsKLSsJCQl0YWlsID0gcDsKLSsJCX0KLSsJCSsrbml0ZW1zOwot Kwl9Ci0rCSh2b2lkKWNsb3NlZGlyKGRpcnApOwotKwotKwkvKgotKwkgKiBJZiBoYWQgdG8gcmVh bGxvYyB0aGUgcGF0aCwgYWRqdXN0IHRoZSBhZGRyZXNzZXMgZm9yIHRoZSByZXN0Ci0rCSAqIG9m IHRoZSB0cmVlLgotKwkgKi8KLSsJaWYgKGRvYWRqdXN0KQotKwkJZnRzX3BhZGp1c3Qoc3AsIGhl YWQpOwotKwotKwkvKgotKwkgKiBJZiBub3QgY2hhbmdpbmcgZGlyZWN0b3JpZXMsIHJlc2V0IHRo ZSBwYXRoIGJhY2sgdG8gb3JpZ2luYWwKLSsJICogc3RhdGUuCi0rCSAqLwotKwlpZiAoSVNTRVQo RlRTX05PQ0hESVIpKSB7Ci0rCQlpZiAobGVuID09IHNwLT5mdHNfcGF0aGxlbiB8fCBuaXRlbXMg PT0gMCkKLSsJCQktLWNwOwotKwkJKmNwID0gJ1wwJzsKLSsJfQotKwotKwkvKgotKwkgKiBJZiBk ZXNjZW5kZWQgYWZ0ZXIgY2FsbGVkIGZyb20gZnRzX2NoaWxkcmVuIG9yIGFmdGVyIGNhbGxlZCBm cm9tCi0rCSAqIGZ0c19yZWFkIGFuZCBub3RoaW5nIGZvdW5kLCBnZXQgYmFjay4gIEF0IHRoZSBy b290IGxldmVsIHdlIHVzZQotKwkgKiB0aGUgc2F2ZWQgZmQ7IGlmIG9uZSBvZiBmdHNfb3Blbigp J3MgYXJndW1lbnRzIGlzIGEgcmVsYXRpdmUgcGF0aAotKwkgKiB0byBhbiBlbXB0eSBkaXJlY3Rv cnksIHdlIHdpbmQgdXAgaGVyZSB3aXRoIG5vIG90aGVyIHdheSBiYWNrLiAgSWYKLSsJICogY2Fu J3QgZ2V0IGJhY2ssIHdlJ3JlIGRvbmUuCi0rCSAqLwotKwlpZiAoZGVzY2VuZCAmJiAodHlwZSA9 PSBCQ0hJTEQgfHwgIW5pdGVtcykgJiYKLSsJICAgIChjdXItPmZ0c19sZXZlbCA9PSBGVFNfUk9P VExFVkVMID8KLSsJICAgIEZDSERJUihzcCwgc3AtPmZ0c19yZmQpIDoKLSsJICAgIGZ0c19zYWZl X2NoYW5nZWRpcihzcCwgY3VyLT5mdHNfcGFyZW50LCAtMSwgIi4uIikpKSB7Ci0rCQljdXItPmZ0 c19pbmZvID0gRlRTX0VSUjsKLSsJCVNFVChGVFNfU1RPUCk7Ci0rCQlyZXR1cm4gKE5VTEwpOwot Kwl9Ci0rCi0rCS8qIElmIGRpZG4ndCBmaW5kIGFueXRoaW5nLCByZXR1cm4gTlVMTC4gKi8KLSsJ aWYgKCFuaXRlbXMpIHsKLSsJCWlmICh0eXBlID09IEJSRUFEKQotKwkJCWN1ci0+ZnRzX2luZm8g PSBGVFNfRFA7Ci0rCQlyZXR1cm4gKE5VTEwpOwotKwl9Ci0rCi0rCS8qIFNvcnQgdGhlIGVudHJp ZXMuICovCi0rCWlmIChzcC0+ZnRzX2NvbXBhciAmJiBuaXRlbXMgPiAxKQotKwkJaGVhZCA9IGZ0 c19zb3J0KHNwLCBoZWFkLCBuaXRlbXMpOwotKwlyZXR1cm4gKGhlYWQpOwotK30KLSsKLStzdGF0 aWMgdW5zaWduZWQgc2hvcnQKLStmdHNfc3RhdChGVFMgKnNwLCBGVFNFTlQgKnAsIGludCBmb2xs b3cpCi0rewotKwlGVFNFTlQgKnQ7Ci0rCWRldl90IGRldjsKLSsJX19mdHNfaW5vX3QgaW5vOwot KwlfX2Z0c19zdGF0X3QgKnNicCwgc2I7Ci0rCWludCBzYXZlZF9lcnJubzsKLSsKLSsJX0RJQUdB U1NFUlQoc3AgIT0gTlVMTCk7Ci0rCV9ESUFHQVNTRVJUKHAgIT0gTlVMTCk7Ci0rCi0rCS8qIElm IHVzZXIgbmVlZHMgc3RhdCBpbmZvLCBzdGF0IGJ1ZmZlciBhbHJlYWR5IGFsbG9jYXRlZC4gKi8K LSsJc2JwID0gSVNTRVQoRlRTX05PU1RBVCkgPyAmc2IgOiBwLT5mdHNfc3RhdHA7Ci0rCi0rI2lm ZGVmIEZUU19XSElURU9VVAotKwkvKiBjaGVjayBmb3Igd2hpdGVvdXQgKi8KLSsJaWYgKHAtPmZ0 c19mbGFncyAmIEZUU19JU1cpIHsKLSsJCWlmIChzYnAgIT0gJnNiKSB7Ci0rCQkJbWVtc2V0KHNi cCwgJ1wwJywgc2l6ZW9mICgqc2JwKSk7Ci0rCQkJc2JwLT5zdF9tb2RlID0gU19JRldIVDsKLSsJ CX0KLSsJCXJldHVybiAoRlRTX1cpOwotKwl9Ci0rI2VuZGlmCi0rCi0rCS8qCi0rCSAqIElmIGRv aW5nIGEgbG9naWNhbCB3YWxrLCBvciBhcHBsaWNhdGlvbiByZXF1ZXN0ZWQgRlRTX0ZPTExPVywg ZG8KLSsJICogYSBzdGF0KDIpLiAgSWYgdGhhdCBmYWlscywgY2hlY2sgZm9yIGEgbm9uLWV4aXN0 ZW50IHN5bWxpbmsuICBJZgotKwkgKiBmYWlsLCBzZXQgdGhlIGVycm5vIGZyb20gdGhlIHN0YXQg Y2FsbC4KLSsJICovCi0rCWlmIChJU1NFVChGVFNfTE9HSUNBTCkgfHwgZm9sbG93KSB7Ci0rCQlp ZiAoc3RhdChwLT5mdHNfYWNjcGF0aCwgc2JwKSkgewotKwkJCXNhdmVkX2Vycm5vID0gZXJybm87 Ci0rCQkJaWYgKCFsc3RhdChwLT5mdHNfYWNjcGF0aCwgc2JwKSkgewotKwkJCQllcnJubyA9IDA7 Ci0rCQkJCXJldHVybiAoRlRTX1NMTk9ORSk7Ci0rCQkJfQotKwkJCXAtPmZ0c19lcnJubyA9IHNh dmVkX2Vycm5vOwotKwkJCWdvdG8gZXJyOwotKwkJfQotKwl9IGVsc2UgaWYgKGxzdGF0KHAtPmZ0 c19hY2NwYXRoLCBzYnApKSB7Ci0rCQlwLT5mdHNfZXJybm8gPSBlcnJubzsKLStlcnI6CQltZW1z ZXQoc2JwLCAwLCBzaXplb2YoKnNicCkpOwotKwkJcmV0dXJuIChGVFNfTlMpOwotKwl9Ci0rCi0r CWlmIChTX0lTRElSKHNicC0+c3RfbW9kZSkpIHsKLSsJCS8qCi0rCQkgKiBTZXQgdGhlIGRldmlj ZS9pbm9kZS4gIFVzZWQgdG8gZmluZCBjeWNsZXMgYW5kIGNoZWNrIGZvcgotKwkJICogY3Jvc3Np bmcgbW91bnQgcG9pbnRzLiAgQWxzbyByZW1lbWJlciB0aGUgbGluayBjb3VudCwgdXNlZAotKwkJ ICogaW4gZnRzX2J1aWxkIHRvIGxpbWl0IHRoZSBudW1iZXIgb2Ygc3RhdCBjYWxscy4gIEl0IGlz Ci0rCQkgKiB1bmRlcnN0b29kIHRoYXQgdGhlc2UgZmllbGRzIGFyZSBvbmx5IHJlZmVyZW5jZWQg aWYgZnRzX2luZm8KLSsJCSAqIGlzIHNldCB0byBGVFNfRC4KLSsJCSAqLwotKwkJZGV2ID0gcC0+ ZnRzX2RldiA9IHNicC0+c3RfZGV2OwotKwkJaW5vID0gcC0+ZnRzX2lubyA9IHNicC0+c3RfaW5v OwotKwkJcC0+ZnRzX25saW5rID0gc2JwLT5zdF9ubGluazsKLSsKLSsJCWlmIChJU0RPVChwLT5m dHNfbmFtZSkpCi0rCQkJcmV0dXJuIChGVFNfRE9UKTsKLSsKLSsJCS8qCi0rCQkgKiBDeWNsZSBk ZXRlY3Rpb24gaXMgZG9uZSBieSBicnV0ZSBmb3JjZSB3aGVuIHRoZSBkaXJlY3RvcnkKLSsJCSAq IGlzIGZpcnN0IGVuY291bnRlcmVkLiAgSWYgdGhlIHRyZWUgZ2V0cyBkZWVwIGVub3VnaCBvciB0 aGUKLSsJCSAqIG51bWJlciBvZiBzeW1ib2xpYyBsaW5rcyB0byBkaXJlY3RvcmllcyBpcyBoaWdo IGVub3VnaCwKLSsJCSAqIHNvbWV0aGluZyBmYXN0ZXIgbWlnaHQgYmUgd29ydGh3aGlsZS4KLSsJ CSAqLwotKwkJZm9yICh0ID0gcC0+ZnRzX3BhcmVudDsKLSsJCSAgICB0LT5mdHNfbGV2ZWwgPj0g RlRTX1JPT1RMRVZFTDsgdCA9IHQtPmZ0c19wYXJlbnQpCi0rCQkJaWYgKGlubyA9PSB0LT5mdHNf aW5vICYmIGRldiA9PSB0LT5mdHNfZGV2KSB7Ci0rCQkJCXAtPmZ0c19jeWNsZSA9IHQ7Ci0rCQkJ CXJldHVybiAoRlRTX0RDKTsKLSsJCQl9Ci0rCQlyZXR1cm4gKEZUU19EKTsKLSsJfQotKwlpZiAo U19JU0xOSyhzYnAtPnN0X21vZGUpKQotKwkJcmV0dXJuIChGVFNfU0wpOwotKwlpZiAoU19JU1JF RyhzYnAtPnN0X21vZGUpKQotKwkJcmV0dXJuIChGVFNfRik7Ci0rCXJldHVybiAoRlRTX0RFRkFV TFQpOwotK30KLSsKLStzdGF0aWMgRlRTRU5UICoKLStmdHNfc29ydChGVFMgKnNwLCBGVFNFTlQg KmhlYWQsIHNpemVfdCBuaXRlbXMpCi0rewotKwlGVFNFTlQgKiphcCwgKnA7Ci0rCi0rCV9ESUFH QVNTRVJUKHNwICE9IE5VTEwpOwotKwlfRElBR0FTU0VSVChoZWFkICE9IE5VTEwpOwotKwotKwkv KgotKwkgKiBDb25zdHJ1Y3QgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gdGhlIHN0cnVjdHVyZXMg YW5kIGNhbGwgcXNvcnQoMykuCi0rCSAqIFJlYXNzZW1ibGUgdGhlIGFycmF5IGluIHRoZSBvcmRl ciByZXR1cm5lZCBieSBxc29ydC4gIElmIHVuYWJsZSB0bwotKwkgKiBzb3J0IGZvciBtZW1vcnkg cmVhc29ucywgcmV0dXJuIHRoZSBkaXJlY3RvcnkgZW50cmllcyBpbiB0aGVpcgotKwkgKiBjdXJy ZW50IG9yZGVyLiAgQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciB0aGUgY3VycmVudCBuZWVkcyBw bHVzCi0rCSAqIDQwIHNvIGRvbid0IHJlYWxsb2Mgb25lIGVudHJ5IGF0IGEgdGltZS4KLSsJICov Ci0rCWlmIChuaXRlbXMgPiBzcC0+ZnRzX25pdGVtcykgewotKwkJRlRTRU5UICoqbmV3OwotKwot KwkJbmV3ID0gcmVhbGxvYyhzcC0+ZnRzX2FycmF5LCBzaXplb2YoRlRTRU5UICopICogKG5pdGVt cyArIDQwKSk7Ci0rCQlpZiAobmV3ID09IDApCi0rCQkJcmV0dXJuIChoZWFkKTsKLSsJCXNwLT5m dHNfYXJyYXkgPSBuZXc7Ci0rCQlzcC0+ZnRzX25pdGVtcyA9IGZ0c19uaXRlbXNfdHJ1bmNhdGUo bml0ZW1zICsgNDApOwotKwl9Ci0rCWZvciAoYXAgPSBzcC0+ZnRzX2FycmF5LCBwID0gaGVhZDsg cDsgcCA9IHAtPmZ0c19saW5rKQotKwkJKmFwKysgPSBwOwotKwlxc29ydCgodm9pZCAqKXNwLT5m dHNfYXJyYXksIG5pdGVtcywgc2l6ZW9mKEZUU0VOVCAqKSwKLSsJCShpbnQgKCopKGNvbnN0IHZv aWQgKiwgY29uc3Qgdm9pZCAqKSlzcC0+ZnRzX2NvbXBhcik7Ci0rCWZvciAoaGVhZCA9ICooYXAg PSBzcC0+ZnRzX2FycmF5KTsgLS1uaXRlbXM7ICsrYXApCi0rCQlhcFswXS0+ZnRzX2xpbmsgPSBh cFsxXTsKLSsJYXBbMF0tPmZ0c19saW5rID0gTlVMTDsKLSsJcmV0dXJuIChoZWFkKTsKLSt9Ci0r Ci0rc3RhdGljIEZUU0VOVCAqCi0rZnRzX2FsbG9jKEZUUyAqc3AsIGNvbnN0IGNoYXIgKm5hbWUs IHNpemVfdCBuYW1lbGVuKQotK3sKLSsJRlRTRU5UICpwOwotKyNpZiBkZWZpbmVkKEZUU19BTExP Q19BTElHTkVEKQotKwlzaXplX3QgbGVuOwotKyNlbmRpZgotKwotKwlfRElBR0FTU0VSVChzcCAh PSBOVUxMKTsKLSsJX0RJQUdBU1NFUlQobmFtZSAhPSBOVUxMKTsKLSsKLSsjaWYgZGVmaW5lZChG VFNfQUxMT0NfQUxJR05FRCkKLSsJLyoKLSsJICogVGhlIGZpbGUgbmFtZSBpcyBhIHZhcmlhYmxl IGxlbmd0aCBhcnJheSBhbmQgbm8gc3RhdCBzdHJ1Y3R1cmUgaXMKLSsJICogbmVjZXNzYXJ5IGlm IHRoZSB1c2VyIGhhcyBzZXQgdGhlIG5vc3RhdCBiaXQuICBBbGxvY2F0ZSB0aGUgRlRTRU5UCi0r CSAqIHN0cnVjdHVyZSwgdGhlIGZpbGUgbmFtZSBhbmQgdGhlIHN0YXQgc3RydWN0dXJlIGluIG9u ZSBjaHVuaywgYnV0Ci0rCSAqIGJlIGNhcmVmdWwgdGhhdCB0aGUgc3RhdCBzdHJ1Y3R1cmUgaXMg cmVhc29uYWJseSBhbGlnbmVkLiAgU2luY2UgdGhlCi0rCSAqIGZ0c19uYW1lIGZpZWxkIGlzIGRl Y2xhcmVkIHRvIGJlIG9mIHNpemUgMSwgdGhlIGZ0c19uYW1lIHBvaW50ZXIgaXMKLSsJICogbmFt ZWxlbiArIDIgYmVmb3JlIHRoZSBmaXJzdCBwb3NzaWJsZSBhZGRyZXNzIG9mIHRoZSBzdGF0IHN0 cnVjdHVyZS4KLSsJICovCi0rCWxlbiA9IHNpemVvZihGVFNFTlQpICsgbmFtZWxlbjsKLSsJaWYg KCFJU1NFVChGVFNfTk9TVEFUKSkKLSsJCWxlbiArPSBzaXplb2YoKihwLT5mdHNfc3RhdHApKSAr IEFMSUdOQllURVM7Ci0rCWlmICgocCA9IG1hbGxvYyhsZW4pKSA9PSBOVUxMKQotKwkJcmV0dXJu IChOVUxMKTsKLSsKLSsJaWYgKCFJU1NFVChGVFNfTk9TVEFUKSkKLSsJCXAtPmZ0c19zdGF0cCA9 IChfX2Z0c19zdGF0X3QgKilBTElHTigKLSsJCSAgICAodW5zaWduZWQgbG9uZykocC0+ZnRzX25h bWUgKyBuYW1lbGVuICsgMikpOwotKyNlbHNlCi0rCWlmICgocCA9IG1hbGxvYyhzaXplb2YoRlRT RU5UKSArIG5hbWVsZW4pKSA9PSBOVUxMKQotKwkJcmV0dXJuIChOVUxMKTsKLSsKLSsJaWYgKCFJ U1NFVChGVFNfTk9TVEFUKSkKLSsJCWlmICgocC0+ZnRzX3N0YXRwID0gbWFsbG9jKHNpemVvZigq KHAtPmZ0c19zdGF0cCkpKSkgPT0gTlVMTCkgewotKwkJCWZyZWUocCk7Ci0rCQkJcmV0dXJuIChO VUxMKTsKLSsJCX0KLSsjZW5kaWYKLSsKLSsgICAgICAgIGlmIChJU1NFVChGVFNfTk9TVEFUKSkK LSsgICAgICAgICAgICAgICAgcC0+ZnRzX3N0YXRwID0gTlVMTDsKLSsKLSsJLyogQ29weSB0aGUg bmFtZSBwbHVzIHRoZSB0cmFpbGluZyBOVUxMLiAqLwotKwltZW1tb3ZlKHAtPmZ0c19uYW1lLCBu YW1lLCBuYW1lbGVuICsgMSk7Ci0rCi0rCXAtPmZ0c19uYW1lbGVuID0gZnRzZW50X25hbWVsZW5f dHJ1bmNhdGUobmFtZWxlbik7Ci0rCXAtPmZ0c19wYXRoID0gc3AtPmZ0c19wYXRoOwotKwlwLT5m dHNfZXJybm8gPSAwOwotKwlwLT5mdHNfZmxhZ3MgPSAwOwotKwlwLT5mdHNfaW5zdHIgPSBGVFNf Tk9JTlNUUjsKLSsJcC0+ZnRzX251bWJlciA9IDA7Ci0rCXAtPmZ0c19wb2ludGVyID0gTlVMTDsK LSsJcmV0dXJuIChwKTsKLSt9Ci0rCi0rc3RhdGljIHZvaWQKLStmdHNfZnJlZShGVFNFTlQgKnAp Ci0rewotKyNpZiAhZGVmaW5lZChGVFNfQUxMT0NfQUxJR05FRCkKLSsJaWYgKHAtPmZ0c19zdGF0 cCkKLSsJCWZyZWUocC0+ZnRzX3N0YXRwKTsKLSsjZW5kaWYKLSsJZnJlZShwKTsKLSt9Ci0rCi0r c3RhdGljIHZvaWQKLStmdHNfbGZyZWUoRlRTRU5UICpoZWFkKQotK3sKLSsJRlRTRU5UICpwOwot KwotKwkvKiBYWFg6IGhlYWQgbWF5IGJlIE5VTEwgPyAqLwotKwotKwkvKiBGcmVlIGEgbGlua2Vk IGxpc3Qgb2Ygc3RydWN0dXJlcy4gKi8KLSsJd2hpbGUgKChwID0gaGVhZCkgIT0gTlVMTCkgewot KwkJaGVhZCA9IGhlYWQtPmZ0c19saW5rOwotKwkJZnRzX2ZyZWUocCk7Ci0rCX0KLSt9Ci0rCi0r c3RhdGljIHNpemVfdAotK2Z0c19wb3cyKHNpemVfdCB4KQotK3sKLSsKLSsJeC0tOwotKwl4IHw9 IHg+PjE7Ci0rCXggfD0geD4+MjsKLSsJeCB8PSB4Pj40OwotKwl4IHw9IHg+Pjg7Ci0rCXggfD0g eD4+MTY7Ci0rI2lmIExPTkdfQklUID4gMzIKLSsJeCB8PSB4Pj4zMjsKLSsjZW5kaWYKLSsjaWYg TE9OR19CSVQgPiA2NAotKwl4IHw9IHg+PjY0OwotKyNlbmRpZgotKwl4Kys7Ci0rCXJldHVybiAo eCk7Ci0rfQotKwotKy8qCi0rICogQWxsb3cgZXNzZW50aWFsbHkgdW5saW1pdGVkIHBhdGhzOyBm aW5kLCBybSwgbHMgc2hvdWxkIGFsbCB3b3JrIG9uIGFueSB0cmVlLgotKyAqIE1vc3Qgc3lzdGVt cyB3aWxsIGFsbG93IGNyZWF0aW9uIG9mIHBhdGhzIG11Y2ggbG9uZ2VyIHRoYW4gTUFYUEFUSExF TiwgZXZlbgotKyAqIHRob3VnaCB0aGUga2VybmVsIHdvbid0IHJlc29sdmUgdGhlbS4gIFJvdW5k IHVwIHRoZSBuZXcgc2l6ZSB0byBhIHBvd2VyIG9mIDIsCi0rICogc28gd2UgZG9uJ3QgcmVhbGxv YyB0aGUgcGF0aCAyIGJ5dGVzIGF0IGEgdGltZS4KLSsgKi8KLStzdGF0aWMgaW50Ci0rZnRzX3Bh bGxvYyhGVFMgKnNwLCBzaXplX3Qgc2l6ZSkKLSt7Ci0rCWNoYXIgKm5ldzsKLSsKLSsJX0RJQUdB U1NFUlQoc3AgIT0gTlVMTCk7Ci0rCi0rI2lmZGVmIF9fRlRTX0NPTVBBVF9MRU5HVEgKLSsJLyog UHJvdGVjdCBhZ2FpbnN0IGZ0c19wYXRobGVuIG92ZXJmbG93LiAqLwotKwlpZiAoc2l6ZSA+IFVT SFJUX01BWCArIDEpIHsKLSsJCWVycm5vID0gRU5BTUVUT09MT05HOwotKwkJcmV0dXJuICgxKTsK LSsJfQotKyNlbmRpZgotKwlzaXplID0gZnRzX3BvdzIoc2l6ZSk7Ci0rCW5ldyA9IHJlYWxsb2Mo c3AtPmZ0c19wYXRoLCBzaXplKTsKLSsJaWYgKG5ldyA9PSAwKQotKwkJcmV0dXJuICgxKTsKLSsJ c3AtPmZ0c19wYXRoID0gbmV3OwotKwlzcC0+ZnRzX3BhdGhsZW4gPSBmdHNfcGF0aGxlbl90cnVu Y2F0ZShzaXplKTsKLSsJcmV0dXJuICgwKTsKLSt9Ci0rCi0rLyoKLSsgKiBXaGVuIHRoZSBwYXRo IGlzIHJlYWxsb2MnZCwgaGF2ZSB0byBmaXggYWxsIG9mIHRoZSBwb2ludGVycyBpbiBzdHJ1Y3R1 cmVzCi0rICogYWxyZWFkeSByZXR1cm5lZC4KLSsgKi8KLStzdGF0aWMgdm9pZAotK2Z0c19wYWRq dXN0KEZUUyAqc3AsIEZUU0VOVCAqaGVhZCkKLSt7Ci0rCUZUU0VOVCAqcDsKLSsJY2hhciAqYWRk cjsKLSsKLSsJX0RJQUdBU1NFUlQoc3AgIT0gTlVMTCk7Ci0rCi0rI2RlZmluZQlBREpVU1QocCkg ZG8gewkJCQkJCQlcCi0rCWlmICgocCktPmZ0c19hY2NwYXRoICE9IChwKS0+ZnRzX25hbWUpCQkJ CVwKLSsJCShwKS0+ZnRzX2FjY3BhdGggPQkJCQkJXAotKwkJICAgIGFkZHIgKyAoKHApLT5mdHNf YWNjcGF0aCAtIChwKS0+ZnRzX3BhdGgpOwkJXAotKwkocCktPmZ0c19wYXRoID0gYWRkcjsJCQkJ CQlcCi0rfSB3aGlsZSAoLypDT05TVENPTkQqLzApCi0rCi0rCWFkZHIgPSBzcC0+ZnRzX3BhdGg7 Ci0rCi0rCS8qIEFkanVzdCB0aGUgY3VycmVudCBzZXQgb2YgY2hpbGRyZW4uICovCi0rCWZvciAo cCA9IHNwLT5mdHNfY2hpbGQ7IHA7IHAgPSBwLT5mdHNfbGluaykKLSsJCUFESlVTVChwKTsKLSsK LSsJLyogQWRqdXN0IHRoZSByZXN0IG9mIHRoZSB0cmVlLCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQg bGV2ZWwuICovCi0rCWZvciAocCA9IGhlYWQ7IHAtPmZ0c19sZXZlbCA+PSBGVFNfUk9PVExFVkVM OykgewotKwkJQURKVVNUKHApOwotKwkJcCA9IHAtPmZ0c19saW5rID8gcC0+ZnRzX2xpbmsgOiBw LT5mdHNfcGFyZW50OwotKwl9Ci0rfQotKwotK3N0YXRpYyBzaXplX3QKLStmdHNfbWF4YXJnbGVu KGNoYXIgKiBjb25zdCAqYXJndikKLSt7Ci0rCXNpemVfdCBsZW4sIG1heDsKLSsKLSsJX0RJQUdB U1NFUlQoYXJndiAhPSBOVUxMKTsKLSsKLSsJZm9yIChtYXggPSAwOyAqYXJndjsgKythcmd2KQot KwkJaWYgKChsZW4gPSBzdHJsZW4oKmFyZ3YpKSA+IG1heCkKLSsJCQltYXggPSBsZW47Ci0rCXJl dHVybiAobWF4ICsgMSk7Ci0rfQotKwotKy8qCi0rICogQ2hhbmdlIHRvIGRpciBzcGVjaWZpZWQg YnkgZmQgb3IgcC0+ZnRzX2FjY3BhdGggd2l0aG91dCBnZXR0aW5nCi0rICogdHJpY2tlZCBieSBz b21lb25lIGNoYW5naW5nIHRoZSB3b3JsZCBvdXQgZnJvbSB1bmRlcm5lYXRoIHVzLgotKyAqIEFz c3VtZXMgcC0+ZnRzX2RldiBhbmQgcC0+ZnRzX2lubyBhcmUgZmlsbGVkIGluLgotKyAqLwotK3N0 YXRpYyBpbnQKLStmdHNfc2FmZV9jaGFuZ2VkaXIoY29uc3QgRlRTICpzcCwgY29uc3QgRlRTRU5U ICpwLCBpbnQgZmQsIGNvbnN0IGNoYXIgKnBhdGgpCi0rewotKwlpbnQgb2xkZmQgPSBmZCwgcmV0 ID0gLTE7Ci0rCV9fZnRzX3N0YXRfdCBzYjsKLSsKLSsJaWYgKElTU0VUKEZUU19OT0NIRElSKSkK LSsJCXJldHVybiAwOwotKwotKwlpZiAob2xkZmQgPCAwICYmIChmZCA9IG9wZW4ocGF0aCwgT19S RE9OTFkgfCBPX0NMT0VYRUMpKSA9PSAtMSkKLSsJCXJldHVybiAtMTsKLSsKLSsJaWYgKGZzdGF0 KGZkLCAmc2IpID09IC0xKQotKwkJZ290byBiYWlsOwotKwotKwlpZiAoc2Iuc3RfaW5vICE9IHAt PmZ0c19pbm8gfHwgc2Iuc3RfZGV2ICE9IHAtPmZ0c19kZXYpIHsKLSsJCWVycm5vID0gRU5PRU5U OwotKwkJZ290byBiYWlsOwotKwl9Ci0rCi0rCXJldCA9IGZjaGRpcihmZCk7Ci0rCi0rYmFpbDoK LSsJaWYgKG9sZGZkIDwgMCkgewotKwkJaW50IHNhdmVfZXJybm8gPSBlcnJubzsKLSsJCSh2b2lk KWNsb3NlKGZkKTsKLSsJCWVycm5vID0gc2F2ZV9lcnJubzsKLSsJfQotKwlyZXR1cm4gcmV0Owot K30KLWRpZmYgLS1naXQgYS9zcmMvZnRzLmggYi9zcmMvZnRzLmgKLW5ldyBmaWxlIG1vZGUgMTAw NjQ0Ci1pbmRleCAwMDAwMDAwLi5hZWY5ZTAwCi0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvZnRz LmgKLUBAIC0wLDAgKzEsMTU1IEBACi0rLyoJJE5ldEJTRDogZnRzLmgsdiAxLjE5IDIwMDkvMDgv MTYgMTk6MzM6MzggY2hyaXN0b3MgRXhwICQJKi8KLSsKLSsvKgotKyAqIENvcHlyaWdodCAoYykg MTk4OSwgMTk5MwotKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3Ju aWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCi0rICogYXJlIG1ldDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIE5laXRo ZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp YnV0b3JzCi0rICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0rICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotKyAqIEFOWSBF WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0rICogQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0rICog Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwKLSsgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotKyAqIE9SIFNFUlZJQ0VTOyBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQot KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwgU1RSSUNUCi0rICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotKyAqIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YKLSsgKiBTVUNIIERBTUFHRS4KLSsgKgotKyAqCUAoIylmdHMuaAk4LjMgKEJlcmtlbGV5 KSA4LzE0Lzk0Ci0rICovCi0rCi0rI2lmbmRlZglfRlRTX0hfCi0rI2RlZmluZQlfRlRTX0hfCi0r Ci0rI2luY2x1ZGUgPHN0ZGludC5oPgotKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSsKLSsjaWZu ZGVmCV9fZnRzX3N0YXRfdAotKyNkZWZpbmUJX19mdHNfc3RhdF90CXN0cnVjdCBzdGF0Ci0rI2Vu ZGlmCi0rI2lmbmRlZglfX2Z0c19ubGlua190Ci0rI2RlZmluZQlfX2Z0c19ubGlua190CW5saW5r X3QKLSsjZW5kaWYKLSsjaWZuZGVmCV9fZnRzX2lub190Ci0rI2RlZmluZQlfX2Z0c19pbm9fdAlp bm9fdAotKyNlbmRpZgotKyNpZm5kZWYJX19mdHNfbGVuZ3RoX3QKLSsjZGVmaW5lCV9fZnRzX2xl bmd0aF90CXVuc2lnbmVkIGludAotKyNlbmRpZgotKyNpZm5kZWYJX19mdHNfbnVtYmVyX3QKLSsj ZGVmaW5lCV9fZnRzX251bWJlcl90CWludDY0X3QKLSsjZW5kaWYKLSsjaWZuZGVmCV9fZnRzX2Rl dl90Ci0rI2RlZmluZQlfX2Z0c19kZXZfdAlkZXZfdAotKyNlbmRpZgotKyNpZm5kZWYJX19mdHNf bGV2ZWxfdAotKyNkZWZpbmUJX19mdHNfbGV2ZWxfdAlpbnQKLSsjZW5kaWYKLSsKLSt0eXBlZGVm IHN0cnVjdCB7Ci0rCXN0cnVjdCBfZnRzZW50ICpmdHNfY3VyOwkvKiBjdXJyZW50IG5vZGUgKi8K LSsJc3RydWN0IF9mdHNlbnQgKmZ0c19jaGlsZDsJLyogbGlua2VkIGxpc3Qgb2YgY2hpbGRyZW4g Ki8KLSsJc3RydWN0IF9mdHNlbnQgKipmdHNfYXJyYXk7CS8qIHNvcnQgYXJyYXkgKi8KLSsJZGV2 X3QgZnRzX2RldjsJCQkvKiBzdGFydGluZyBkZXZpY2UgIyAqLwotKwljaGFyICpmdHNfcGF0aDsJ CQkvKiBwYXRoIGZvciB0aGlzIGRlc2NlbnQgKi8KLSsJaW50IGZ0c19yZmQ7CQkJLyogZmQgZm9y IHJvb3QgKi8KLSsJdW5zaWduZWQgaW50IGZ0c19wYXRobGVuOwkvKiBzaXplb2YocGF0aCkgKi8K LSsJdW5zaWduZWQgaW50IGZ0c19uaXRlbXM7CS8qIGVsZW1lbnRzIGluIHRoZSBzb3J0IGFycmF5 ICovCi0rCWludCAoKmZ0c19jb21wYXIpCQkvKiBjb21wYXJlIGZ1bmN0aW9uICovCi0rCQkoY29u c3Qgc3RydWN0IF9mdHNlbnQgKiosIGNvbnN0IHN0cnVjdCBfZnRzZW50ICoqKTsKLSsKLSsjZGVm aW5lCUZUU19DT01GT0xMT1cJMHgwMDEJCS8qIGZvbGxvdyBjb21tYW5kIGxpbmUgc3ltbGlua3Mg Ki8KLSsjZGVmaW5lCUZUU19MT0dJQ0FMCTB4MDAyCQkvKiBsb2dpY2FsIHdhbGsgKi8KLSsjZGVm aW5lCUZUU19OT0NIRElSCTB4MDA0CQkvKiBkb24ndCBjaGFuZ2UgZGlyZWN0b3JpZXMgKi8KLSsj ZGVmaW5lCUZUU19OT1NUQVQJMHgwMDgJCS8qIGRvbid0IGdldCBzdGF0IGluZm8gKi8KLSsjZGVm aW5lCUZUU19QSFlTSUNBTAkweDAxMAkJLyogcGh5c2ljYWwgd2FsayAqLwotKyNkZWZpbmUJRlRT X1NFRURPVAkweDAyMAkJLyogcmV0dXJuIGRvdCBhbmQgZG90LWRvdCAqLwotKyNkZWZpbmUJRlRT X1hERVYJMHgwNDAJCS8qIGRvbid0IGNyb3NzIGRldmljZXMgKi8KLSsjZGVmaW5lCUZUU19XSElU RU9VVAkweDA4MAkJLyogcmV0dXJuIHdoaXRlb3V0IGluZm9ybWF0aW9uICovCi0rI2RlZmluZQlG VFNfT1BUSU9OTUFTSwkweDBmZgkJLyogdmFsaWQgdXNlciBvcHRpb24gbWFzayAqLwotKwotKyNk ZWZpbmUJRlRTX05BTUVPTkxZCTB4MTAwCQkvKiAocHJpdmF0ZSkgY2hpbGQgbmFtZXMgb25seSAq LwotKyNkZWZpbmUJRlRTX1NUT1AJMHgyMDAJCS8qIChwcml2YXRlKSB1bnJlY292ZXJhYmxlIGVy cm9yICovCi0rCWludCBmdHNfb3B0aW9uczsJCS8qIGZ0c19vcGVuIG9wdGlvbnMsIGdsb2JhbCBm bGFncyAqLwotK30gRlRTOwotKwotK3R5cGVkZWYgc3RydWN0IF9mdHNlbnQgewotKwlzdHJ1Y3Qg X2Z0c2VudCAqZnRzX2N5Y2xlOwkvKiBjeWNsZSBub2RlICovCi0rCXN0cnVjdCBfZnRzZW50ICpm dHNfcGFyZW50OwkvKiBwYXJlbnQgZGlyZWN0b3J5ICovCi0rCXN0cnVjdCBfZnRzZW50ICpmdHNf bGluazsJLyogbmV4dCBmaWxlIGluIGRpcmVjdG9yeSAqLwotKwlfX2Z0c19udW1iZXJfdCBmdHNf bnVtYmVyOyAgICAgIC8qIGxvY2FsIG51bWVyaWMgdmFsdWUgKi8KLSsJdm9pZCAqZnRzX3BvaW50 ZXI7CSAgICAgICAgLyogbG9jYWwgYWRkcmVzcyB2YWx1ZSAqLwotKwljaGFyICpmdHNfYWNjcGF0 aDsJCS8qIGFjY2VzcyBwYXRoICovCi0rCWNoYXIgKmZ0c19wYXRoOwkJCS8qIHJvb3QgcGF0aCAq LwotKwlpbnQgZnRzX2Vycm5vOwkJCS8qIGVycm5vIGZvciB0aGlzIG5vZGUgKi8KLSsJaW50IGZ0 c19zeW1mZDsJCQkvKiBmZCBmb3Igc3ltbGluayAqLwotKwlfX2Z0c19sZW5ndGhfdCBmdHNfcGF0 aGxlbjsJLyogc3RybGVuKGZ0c19wYXRoKSAqLwotKwlfX2Z0c19sZW5ndGhfdCBmdHNfbmFtZWxl bjsJLyogc3RybGVuKGZ0c19uYW1lKSAqLwotKwotKwlfX2Z0c19pbm9fdCBmdHNfaW5vOwkJLyog aW5vZGUgKi8KLSsJX19mdHNfZGV2X3QgZnRzX2RldjsJCS8qIGRldmljZSAqLwotKwlfX2Z0c19u bGlua190IGZ0c19ubGluazsJLyogbGluayBjb3VudCAqLwotKwotKyNkZWZpbmUJRlRTX1JPT1RQ QVJFTlRMRVZFTAktMQotKyNkZWZpbmUJRlRTX1JPT1RMRVZFTAkJIDAKLSsJX19mdHNfbGV2ZWxf dCBmdHNfbGV2ZWw7CQkvKiBkZXB0aCAoLTEgdG8gTikgKi8KLSsKLSsjZGVmaW5lCUZUU19ECQkg MQkJLyogcHJlb3JkZXIgZGlyZWN0b3J5ICovCi0rI2RlZmluZQlGVFNfREMJCSAyCQkvKiBkaXJl Y3RvcnkgdGhhdCBjYXVzZXMgY3ljbGVzICovCi0rI2RlZmluZQlGVFNfREVGQVVMVAkgMwkJLyog bm9uZSBvZiB0aGUgYWJvdmUgKi8KLSsjZGVmaW5lCUZUU19ETlIJCSA0CQkvKiB1bnJlYWRhYmxl IGRpcmVjdG9yeSAqLwotKyNkZWZpbmUJRlRTX0RPVAkJIDUJCS8qIGRvdCBvciBkb3QtZG90ICov Ci0rI2RlZmluZQlGVFNfRFAJCSA2CQkvKiBwb3N0b3JkZXIgZGlyZWN0b3J5ICovCi0rI2RlZmlu ZQlGVFNfRVJSCQkgNwkJLyogZXJyb3I7IGVycm5vIGlzIHNldCAqLwotKyNkZWZpbmUJRlRTX0YJ CSA4CQkvKiByZWd1bGFyIGZpbGUgKi8KLSsjZGVmaW5lCUZUU19JTklUCSA5CQkvKiBpbml0aWFs aXplZCBvbmx5ICovCi0rI2RlZmluZQlGVFNfTlMJCTEwCQkvKiBzdGF0KDIpIGZhaWxlZCAqLwot KyNkZWZpbmUJRlRTX05TT0sJMTEJCS8qIG5vIHN0YXQoMikgcmVxdWVzdGVkICovCi0rI2RlZmlu ZQlGVFNfU0wJCTEyCQkvKiBzeW1ib2xpYyBsaW5rICovCi0rI2RlZmluZQlGVFNfU0xOT05FCTEz CQkvKiBzeW1ib2xpYyBsaW5rIHdpdGhvdXQgdGFyZ2V0ICovCi0rI2RlZmluZQlGVFNfVwkJMTQJ CS8qIHdoaXRlb3V0IG9iamVjdCAqLwotKwl1bnNpZ25lZCBzaG9ydCBmdHNfaW5mbzsJLyogdXNl ciBmbGFncyBmb3IgRlRTRU5UIHN0cnVjdHVyZSAqLwotKwotKyNkZWZpbmUJRlRTX0RPTlRDSERJ UgkgMHgwMQkJLyogZG9uJ3QgY2hkaXIgLi4gdG8gdGhlIHBhcmVudCAqLwotKyNkZWZpbmUJRlRT X1NZTUZPTExPVwkgMHgwMgkJLyogZm9sbG93ZWQgYSBzeW1saW5rIHRvIGdldCBoZXJlICovCi0r I2RlZmluZQlGVFNfSVNXCQkgMHgwNAkJLyogdGhpcyBpcyBhIHdoaXRlb3V0IG9iamVjdCAqLwot Kwl1bnNpZ25lZCBzaG9ydCBmdHNfZmxhZ3M7CS8qIHByaXZhdGUgZmxhZ3MgZm9yIEZUU0VOVCBz dHJ1Y3R1cmUgKi8KLSsKLSsjZGVmaW5lCUZUU19BR0FJTgkgMQkJLyogcmVhZCBub2RlIGFnYWlu ICovCi0rI2RlZmluZQlGVFNfRk9MTE9XCSAyCQkvKiBmb2xsb3cgc3ltYm9saWMgbGluayAqLwot KyNkZWZpbmUJRlRTX05PSU5TVFIJIDMJCS8qIG5vIGluc3RydWN0aW9ucyAqLwotKyNkZWZpbmUJ RlRTX1NLSVAJIDQJCS8qIGRpc2NhcmQgbm9kZSAqLwotKwl1bnNpZ25lZCBzaG9ydCBmdHNfaW5z dHI7CS8qIGZ0c19zZXQoKSBpbnN0cnVjdGlvbnMgKi8KLSsKLSsJX19mdHNfc3RhdF90ICpmdHNf c3RhdHA7CS8qIHN0YXQoMikgaW5mb3JtYXRpb24gKi8KLSsJY2hhciBmdHNfbmFtZVsxXTsJCS8q IGZpbGUgbmFtZSAqLwotK30gRlRTRU5UOwotKwotKyNpZmRlZiBfX2NwbHVzcGx1cwotK2V4dGVy biAiQyIgewotKyNlbmRpZgotK0ZUU0VOVAkqZnRzX2NoaWxkcmVuKEZUUyAqLCBpbnQpOwotK2lu dAkgZnRzX2Nsb3NlKEZUUyAqKTsKLStGVFMJKmZ0c19vcGVuKGNoYXIgKiBjb25zdCAqLCBpbnQs Ci0rICAgIGludCAoKikoY29uc3QgRlRTRU5UICoqLCBjb25zdCBGVFNFTlQgKiopKTsKLStGVFNF TlQJKmZ0c19yZWFkKEZUUyAqKTsKLStpbnQJIGZ0c19zZXQoRlRTICosIEZUU0VOVCAqLCBpbnQp OwotKyNpZmRlZiBfX2NwbHVzcGx1cwotK30KLSsjZW5kaWYKLSsKLSsKLSsjZW5kaWYgLyogIV9G VFNfSF8gKi8KLWRpZmYgLS1naXQgYS9zcmMvdG9vbHMuYyBiL3NyYy90b29scy5jCi1pbmRleCA5 NWNjZWVkLi43MzM5MmE5IDEwMDY0NAotLS0tIGEvc3JjL3Rvb2xzLmMKLSsrKyBiL3NyYy90b29s cy5jCi1AQCAtMSw3ICsxLDcgQEAKLSAjaW5jbHVkZSAiY29uZmlnLmgiCi0gI2luY2x1ZGUgInVs YXRlbmN5LmgiCi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0tI2luY2x1ZGUgPGZ0cy5oPgotKyNpbmNs dWRlICJmdHMuaCIKLSAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0gI2luY2x1ZGUgPGdsaWIuaD4KLSAK LS0tIAotMi41LjAKLQpkaWZmIC0tZ2l0IGEvc3JjcGtncy91bGF0ZW5jeWQvdGVtcGxhdGUgYi9z cmNwa2dzL3VsYXRlbmN5ZC90ZW1wbGF0ZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDc1NDMxZmNjMWEuLjAwMDAwMDAwMDAwCi0tLSBhL3NyY3BrZ3MvdWxhdGVuY3lkL3RlbXBsYXRl CisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotIyBUZW1wbGF0ZSBmaWxlIGZvciAndWxh dGVuY3lkJwotcGtnbmFtZT11bGF0ZW5jeWQKLXZlcnNpb249MC42LjAKLXJldmlzaW9uPTcKLV9z dWJyZWxlYXNlPWFscGhhLjIuMQotd3Jrc3JjPSIke3BrZ25hbWV9LSR7dmVyc2lvbn0tJHtfc3Vi cmVsZWFzZX0iCi1idWlsZF9zdHlsZT1jbWFrZQotaG9zdG1ha2VkZXBlbmRzPSJwa2ctY29uZmln IgotbWFrZWRlcGVuZHM9InByb2Nwcy1uZy1kZXZlbCBnbGliLWRldmVsIGRidXMtZ2xpYi1kZXZl bCBsdWE1MS1kZXZlbCBsaWJ4Y2ItZGV2ZWwiCi1kZXBlbmRzPSJsdWFwb3NpeDUxIgotc2hvcnRf ZGVzYz0iRGFlbW9uIHRvIG1pbmltaXplIGxhdGVuY3kgb24gYSBsaW51eCBzeXN0ZW0gdXNpbmcg Y2dyb3VwcyIKLW1haW50YWluZXI9IkFuZHJlYSBCcmFuY2FsZW9uaSA8YWJjQHBvbXBlbC5tZT4i Ci1saWNlbnNlPSJHUEwtMyIKLWhvbWVwYWdlPSJodHRwczovL2dpdGh1Yi5jb20vcG9lbHppLyR7 cGtnbmFtZX0iCi1kaXN0ZmlsZXM9IiR7aG9tZXBhZ2V9L2FyY2hpdmUvJHt2ZXJzaW9ufS0ke19z dWJyZWxlYXNlfS50YXIuZ3oiCi1jaGVja3N1bT1lZmFmMGNmODE0ZWYzNmI5ZDYzZjZhNTg4NDgy YTJmMWFjNDM1MTYzZmY1ZTlkOGQyMGNlMDdkZTU4ZWZiZjJlCi1weXRob25fdmVyc2lvbj0yICN1 bnZlcmlmaWVkCi1icm9rZW49Im1pc3Npbmcgc3ltYm9scyBpbiBwcm9jcHMtbmcgKHVzZXJfZnJv bV91aWQsIGdyb3VwX2Zyb21fZ2lkKSIKLW5vcGllPXllcwotCi1MREZMQUdTKz0iIC1XbCwtQmR5 bmFtaWMgLWxtIC1sZGwiCi0KLWNvbmZpZ3VyZV9hcmdzPSItRERFVkVMT1BfTU9ERT1mYWxzZSAt RENNQUtFX0JVSUxEX1RZUEU9UmVsV2l0aERlYkluZm8gLURTWVNURU1EX0RJUj0nJyIKLWNvbmZf ZmlsZXM9IgotL2V0Yy9kYnVzLTEvc3lzdGVtLmQvb3JnLnF1YW1xdWFtLnVsYXRlbmN5ZC5jb25m Ci0vZXRjL3VsYXRlbmN5ZC9zaW1wbGUuY29uZgotL2V0Yy91bGF0ZW5jeWQvY2dyb3Vwcy5jb25m Ci0vZXRjL3VsYXRlbmN5ZC9zY2hlZHVsZXIvMjAtZGVza3RvcC5sdWEKLS9ldGMvdWxhdGVuY3lk L3NjaGVkdWxlci8zMC1zaW5nbGUtdGFzay5sdWEKLS9ldGMvdWxhdGVuY3lkL3NjaGVkdWxlci8z MC1nYW1lLmx1YQotL2V0Yy91bGF0ZW5jeWQvc2NoZWR1bGVyLzUwLXZpZGVvX3BsYXliYWNrLmx1 YQotL2V0Yy91bGF0ZW5jeWQvc2NoZWR1bGVyLzk5LWNsZWFudXAubHVhCi0vZXRjL3VsYXRlbmN5 ZC9zY2hlZHVsZXIvMDAtY29tbW9uLmx1YQotL2V0Yy91bGF0ZW5jeWQvc2NoZWR1bGVyLzIwLW9u ZS1zZWF0LWRlc2t0b3AubHVhCi0vZXRjL3VsYXRlbmN5ZC9ydWxlcy9zdWJ0bGUubHVhCi0vZXRj L3VsYXRlbmN5ZC9ydWxlcy96el9pc29sYXRlLmx1YQotL2V0Yy91bGF0ZW5jeWQvcnVsZXMvcHJv dGVjdG9ycy5sdWEKLS9ldGMvdWxhdGVuY3lkL3J1bGVzL2F3ZXNvbWUubHVhCi0vZXRjL3VsYXRl bmN5ZC9ydWxlcy9kZXNrdG9wLmx1YQotL2V0Yy91bGF0ZW5jeWQvcnVsZXMvZ25vbWUubHVhCi0v ZXRjL3VsYXRlbmN5ZC9ydWxlcy8wMC1maXhlcnMubHVhCi0vZXRjL3VsYXRlbmN5ZC9ydWxlcy9s eGRlLmx1YQotL2V0Yy91bGF0ZW5jeWQvcnVsZXMvenpfZml4ZXJzLmx1YQotL2V0Yy91bGF0ZW5j eWQvcnVsZXMvc3lzdGVtLmx1YQotL2V0Yy91bGF0ZW5jeWQvcnVsZXMva2RlLmx1YQotL2V0Yy91 bGF0ZW5jeWQvcnVsZXMvc2NoZWR1bGVyLmx1YQotL2V0Yy91bGF0ZW5jeWQvcnVsZXMveGZjZS5s dWEKLS9ldGMvdWxhdGVuY3lkL3J1bGVzL2lvLmx1YQotL2V0Yy91bGF0ZW5jeWQvdWxhdGVuY3lk LmNvbmYKLS9ldGMvdWxhdGVuY3lkL3NpbXBsZS5kL3N1YnRsZS5jb25mCi0vZXRjL3VsYXRlbmN5 ZC9zaW1wbGUuZC9pc29sYXRlLmNvbmYKLS9ldGMvdWxhdGVuY3lkL3NpbXBsZS5kL2dhbWVzLmNv bmYKLS9ldGMvdWxhdGVuY3lkL3NpbXBsZS5kL2x4ZGUuY29uZgotL2V0Yy91bGF0ZW5jeWQvc2lt cGxlLmQvYXBwbGljYXRpb25zLmNvbmYKLS9ldGMvdWxhdGVuY3lkL3NpbXBsZS5kL2F1ZGlvLmNv bmYKLS9ldGMvdWxhdGVuY3lkL3NpbXBsZS5kL2lkbGUuY29uZgotL2V0Yy91bGF0ZW5jeWQvc2lt cGxlLmQvc2Vzc2lvbnMuY29uZgotL2V0Yy91bGF0ZW5jeWQvc2ltcGxlLmQvZGJ1cy5jb25mCi0v ZXRjL3VsYXRlbmN5ZC9zaW1wbGUuZC94ZmNlLmNvbmYKLS9ldGMvdWxhdGVuY3lkL3NpbXBsZS5k L2Npbm5hbW9uLmNvbmYKLS9ldGMvdWxhdGVuY3lkL3NpbXBsZS5kL3NjcmVlbmNhc3RlcnMuY29u ZgotL2V0Yy91bGF0ZW5jeWQvc2ltcGxlLmQvdWkuY29uZgotL2V0Yy91bGF0ZW5jeWQvc2ltcGxl LmQvcGFudGhlb24uY29uZgotL2V0Yy91bGF0ZW5jeWQvc2ltcGxlLmQvcG9ydGFnZS5jb25mCi0v ZXRjL3VsYXRlbmN5ZC9zaW1wbGUuZC9maXhlcy5jb25mCi0vZXRjL3VsYXRlbmN5ZC9zaW1wbGUu ZC91YnVudHUuY29uZgotL2V0Yy91bGF0ZW5jeWQvc2ltcGxlLmQvYml0dG9ycmVudC5jb25mCi0v ZXRjL3VsYXRlbmN5ZC9zaW1wbGUuZC92aWRlby5jb25mCi0vZXRjL3VsYXRlbmN5ZC9zaW1wbGUu ZC91bml0eS5jb25mCi0vZXRjL3VsYXRlbmN5ZC9zaW1wbGUuZC9tZWRpYS5jb25mIgotCi1wYXRj aF9hcmdzPSctTnAxJwotCi1wb3N0X2luc3RhbGwoKSB7Ci0JdnN2IHVsYXRlbmN5ZAotCi0Jdmlu c3RhbGwgJHtGSUxFU0RJUn0vc3VidGxlLmx1YSA2NDQgZXRjL3VsYXRlbmN5ZC9ydWxlcwotCXZp bnN0YWxsICR7RklMRVNESVJ9L3N1YnRsZS5jb25mIDY0NCBldGMvdWxhdGVuY3lkL3NpbXBsZS5k Ci0KLQl2bWtkaXIgdXNyL3NoYXJlCi0JbXYgJHtERVNURElSfS91c3IvbWFuICR7REVTVERJUn0v dXNyL3NoYXJlCi0JbXYgJHtERVNURElSfS91c3Ivc2Jpbi8qICR7REVTVERJUn0vdXNyL2Jpbgot fQo= --===============7273225197720723900==--