From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: [PATCH v2 3/5] tools/libxendevicemodel: extract functions and add a compat layer Date: Wed, 22 Feb 2017 13:27:36 +0000 Message-ID: <1487770058-21040-4-git-send-email-paul.durrant@citrix.com> References: <1487770058-21040-1-git-send-email-paul.durrant@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cgWxz-0001yi-G4 for xen-devel@lists.xenproject.org; Wed, 22 Feb 2017 13:28:23 +0000 In-Reply-To: <1487770058-21040-1-git-send-email-paul.durrant@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Wei Liu , Paul Durrant , Ian Jackson List-Id: xen-devel@lists.xenproject.org VGhpcyBwYXRjaCBleHRyYWN0cyBhbGwgZnVuY3Rpb25zIHJlc3VsdGluZyBpbiBhIGRtX29wIGh5 cGVyY2FsbCBmcm9tCmxpYnhlbmN0cmwgYW5kIG1vdmVzIHRoZW0gaW50byBsaWJ4ZW5kZXZpY2Vt b2RlbC4gSXQgYWxzbyBhZGRzIGEgY29tcGF0CmxheWVyIGludG8gbGlieGVuY3RybCwgd2hpY2gg Y2FuIGJlIHNlbGVjdGVkIGJ5IGRlZmluaW5nClhDX1dBTlRfQ09NUEFUX0RFVklDRU1PREVMX0FQ SSB0byAxIGJlZm9yZSBpbmNsdWRpbmcgeGVuY3RybC5oLgoKV2l0aCB0aGlzIHBhdGNoIHRoZSBj b3JlIG9mIGxpYnhlbmRldmljZW1vZGVsIHN0aWxsIHVzZXMgbGlieGVuY2FsbCB0bwppc3N1ZSB0 aGUgZG1fb3AgaHlwZXJjYWxscywgYnV0IHRoaXMgaXMgZG9uZSBieSBjYWxsaW5nIHRocm91Z2gg Y29kZSB0aGF0CmNhbiBiZSBtb2RpZmllZCBvbiBhIHBlci1PUyBiYXNpcy4gQSBzdWJzZXF1ZW50 IHBhdGNoIHdpbGwgYWRkIGEgTGludXgtCnNwZWNpZmljIHZhcmlhbnQuCgpTaWduZWQtb2ZmLWJ5 OiBQYXVsIER1cnJhbnQgPHBhdWwuZHVycmFudEBjaXRyaXguY29tPgotLS0KQ2M6IElhbiBKYWNr c29uIDxpYW4uamFja3NvbkBldS5jaXRyaXguY29tPgpDYzogV2VpIExpdSA8d2VpLmxpdTJAY2l0 cml4LmNvbT4KCnYyOgotIFJlLWJhc2VkIG9uIDc4ZGEwYzJhICJsaWJ4YzogZG9uJ3QgcGFzcyB1 bmluaXRpYWxpemVkIGRhdGEgdG8KICBkb19kbV9vcCgpIiBhbmQgY29ycmVjdGVkIGltcGxlbWVu dGF0aW9uIG9mCiAgeGVuZGV2aWNlbW9kZWxfdHJhY2tfZGlydHlfdnJhbSgpIGFjY29yZGluZ2x5 LgotLS0KIHRvb2xzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAxICsKIHRvb2xzL1J1bGVzLm1rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAyICstCiB0b29scy9saWJzL2RldmljZW1vZGVsL01ha2VmaWxlICAgICAgICAgICAgICAgICB8 ICAxMCArLQogdG9vbHMvbGlicy9kZXZpY2Vtb2RlbC9jb21wYXQuYyAgICAgICAgICAgICAgICAg fCAgNDUgKysrCiB0b29scy9saWJzL2RldmljZW1vZGVsL2NvcmUuYyAgICAgICAgICAgICAgICAg ICB8IDQzNSArKysrKysrKysrKysrKysrKysrKysrKysKIHRvb2xzL2xpYnMvZGV2aWNlbW9kZWwv aW5jbHVkZS94ZW5kZXZpY2Vtb2RlbC5oIHwgMjU4ICsrKysrKysrKysrKysrCiB0b29scy9saWJz L2RldmljZW1vZGVsL2xpYnhlbmRldmljZW1vZGVsLm1hcCAgICB8ICAxNiArCiB0b29scy9saWJz L2RldmljZW1vZGVsL3ByaXZhdGUuaCAgICAgICAgICAgICAgICB8ICAxOSArKwogdG9vbHMvbGli eGMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogdG9vbHMvbGli eGMvaW5jbHVkZS94ZW5jdHJsLmggICAgICAgICAgICAgICAgICAgfCAxOTcgLS0tLS0tLS0tLS0K IHRvb2xzL2xpYnhjL2luY2x1ZGUveGVuY3RybF9jb21wYXQuaCAgICAgICAgICAgIHwgIDQ3ICsr KwogdG9vbHMvbGlieGMveGNfZGV2aWNlbW9kZWxfY29tcGF0LmMgICAgICAgICAgICAgfCAxMzkg KysrKysrKysKIHRvb2xzL2xpYnhjL3hjX2RvbWFpbi5jICAgICAgICAgICAgICAgICAgICAgICAg IHwgMjAxIC0tLS0tLS0tLS0tCiB0b29scy9saWJ4Yy94Y19taXNjLmMgICAgICAgICAgICAgICAg ICAgICAgICAgICB8IDE1NCAtLS0tLS0tLS0KIHRvb2xzL2xpYnhjL3hjX3ByaXZhdGUuYyAgICAg ICAgICAgICAgICAgICAgICAgIHwgIDczIC0tLS0KIDE1IGZpbGVzIGNoYW5nZWQsIDk3MCBpbnNl cnRpb25zKCspLCA2MjggZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvbGli cy9kZXZpY2Vtb2RlbC9jb21wYXQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2xpYnhjL3hj X2RldmljZW1vZGVsX2NvbXBhdC5jCgpkaWZmIC0tZ2l0IGEvdG9vbHMvTWFrZWZpbGUgYi90b29s cy9NYWtlZmlsZQppbmRleCAwODkwY2M5Li5lNmMwY2M1IDEwMDY0NAotLS0gYS90b29scy9NYWtl ZmlsZQorKysgYi90b29scy9NYWtlZmlsZQpAQCAtMjYyLDYgKzI2Miw3IEBAIHN1YmRpci1hbGwt cWVtdS14ZW4tZGlyOiBxZW11LXhlbi1kaXItZmluZAogCQktLWV4dHJhLWNmbGFncz0iLURYQ19X QU5UX0NPTVBBVF9FVlRDSE5fQVBJPTEgXAogCQktRFhDX1dBTlRfQ09NUEFUX0dOVFRBQl9BUEk9 MSBcCiAJCS1EWENfV0FOVF9DT01QQVRfTUFQX0ZPUkVJR05fQVBJPTEgXAorCQktRFhDX1dBTlRf Q09NUEFUX0RFVklDRU1PREVMX0FQST0xIFwKIAkJLUkkKFhFTl9ST09UKS90b29scy9pbmNsdWRl IFwKIAkJLUkkKFhFTl9ST09UKS90b29scy9saWJzL3Rvb2xsb2cvaW5jbHVkZSBcCiAJCS1JJChY RU5fUk9PVCkvdG9vbHMvbGlicy9ldnRjaG4vaW5jbHVkZSBcCmRpZmYgLS1naXQgYS90b29scy9S dWxlcy5tayBiL3Rvb2xzL1J1bGVzLm1rCmluZGV4IGUzNDE1ZjAuLjhlYTM5MDEgMTAwNjQ0Ci0t LSBhL3Rvb2xzL1J1bGVzLm1rCisrKyBiL3Rvb2xzL1J1bGVzLm1rCkBAIC0xMTksNyArMTE5LDcg QEAgTERMSUJTX2xpYnhlbmZvcmVpZ25tZW1vcnkgPSAkKFhFTl9MSUJYRU5GT1JFSUdOTUVNT1JZ KS9saWJ4ZW5mb3JlaWdubWVtb3J5JChsaWIKIFNITElCX2xpYnhlbmZvcmVpZ25tZW1vcnkgID0g LVdsLC1ycGF0aC1saW5rPSQoWEVOX0xJQlhFTkZPUkVJR05NRU1PUlkpCiAKIENGTEFHU19saWJ4 ZW5kZXZpY2Vtb2RlbCA9IC1JJChYRU5fTElCWEVOREVWSUNFTU9ERUwpL2luY2x1ZGUgJChDRkxB R1NfeGVuaW5jbHVkZSkKLVNIREVQU19saWJ4ZW5kZXZpY2Vtb2RlbCA9ICQoU0hMSUJfbGlieGVu dG9vbGxvZykKK1NIREVQU19saWJ4ZW5kZXZpY2Vtb2RlbCA9ICQoU0hMSUJfbGlieGVudG9vbGxv ZykgJChTSExJQl94ZW5jYWxsKQogTERMSUJTX2xpYnhlbmRldmljZW1vZGVsID0gJChYRU5fTElC WEVOREVWSUNFTU9ERUwpL2xpYnhlbmRldmljZW1vZGVsJChsaWJleHRlbnNpb24pCiBTSExJQl9s aWJ4ZW5kZXZpY2Vtb2RlbCAgPSAtV2wsLXJwYXRoLWxpbms9JChYRU5fTElCWEVOREVWSUNFTU9E RUwpCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnMvZGV2aWNlbW9kZWwvTWFrZWZpbGUgYi90b29s cy9saWJzL2RldmljZW1vZGVsL01ha2VmaWxlCmluZGV4IDRmMWU2MTYuLmI4N2JmODQgMTAwNjQ0 Ci0tLSBhL3Rvb2xzL2xpYnMvZGV2aWNlbW9kZWwvTWFrZWZpbGUKKysrIGIvdG9vbHMvbGlicy9k ZXZpY2Vtb2RlbC9NYWtlZmlsZQpAQCAtOCw4ICs4LDE0IEBAIFNITElCX0xERkxBR1MgKz0gLVds LC0tdmVyc2lvbi1zY3JpcHQ9bGlieGVuZGV2aWNlbW9kZWwubWFwCiBDRkxBR1MgICArPSAtV2Vy cm9yIC1XbWlzc2luZy1wcm90b3R5cGVzCiBDRkxBR1MgICArPSAtSS4vaW5jbHVkZSAkKENGTEFH U194ZW5pbmNsdWRlKQogQ0ZMQUdTICAgKz0gJChDRkxBR1NfbGlieGVudG9vbGxvZykKLQotU1JD Uy15ICAgKz0gY29yZS5jCitDRkxBR1MgICArPSAkKENGTEFHU19saWJ4ZW5jYWxsKQorCitTUkNT LXkgICAgICAgICAgICAgICAgICs9IGNvcmUuYworU1JDUy0kKENPTkZJR19MaW51eCkgICArPSBj b21wYXQuYworU1JDUy0kKENPTkZJR19GcmVlQlNEKSArPSBjb21wYXQuYworU1JDUy0kKENPTkZJ R19TdW5PUykgICArPSBjb21wYXQuYworU1JDUy0kKENPTkZJR19OZXRCU0QpICArPSBjb21wYXQu YworU1JDUy0kKENPTkZJR19NaW5pT1MpICArPSBjb21wYXQuYwogCiBMSUJfT0JKUyA6PSAkKHBh dHN1YnN0ICUuYywlLm8sJChTUkNTLXkpKQogUElDX09CSlMgOj0gJChwYXRzdWJzdCAlLmMsJS5v cGljLCQoU1JDUy15KSkKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnMvZGV2aWNlbW9kZWwvY29tcGF0 LmMgYi90b29scy9saWJzL2RldmljZW1vZGVsL2NvbXBhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjI0NWU5MDcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9saWJzL2Rl dmljZW1vZGVsL2NvbXBhdC5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp IDIwMTcgQ2l0cml4IFN5c3RlbXMgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiB2ZXJzaW9u IDIuMSBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgInBy aXZhdGUuaCIKKworaW50IG9zZGVwX3hlbmRldmljZW1vZGVsX29wZW4oeGVuZGV2aWNlbW9kZWxf aGFuZGxlICpkbW9kKQoreworICAgIHJldHVybiAwOworfQorCitpbnQgb3NkZXBfeGVuZGV2aWNl bW9kZWxfY2xvc2UoeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kKQoreworICAgIHJldHVybiAw OworfQorCitpbnQgb3NkZXBfeGVuZGV2aWNlbW9kZWxfb3AoeGVuZGV2aWNlbW9kZWxfaGFuZGxl ICpkbW9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWlkX3QgZG9taWQsIHVuc2ln bmVkIGludCBucl9idWZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ZW5k ZXZpY2Vtb2RlbF9idWYgYnVmc1tdKQoreworICAgIHJldHVybiB4ZW5kZXZpY2Vtb2RlbF94Y2Fs bChkbW9kLCBkb21pZCwgbnJfYnVmcywgYnVmcyk7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJs ZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNl dDogNAorICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoK KyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlicy9kZXZpY2Vtb2RlbC9jb3JlLmMgYi90b29scy9s aWJzL2RldmljZW1vZGVsL2NvcmUuYwppbmRleCBlYzE4MTQyLi4zM2VlMTU3IDEwMDY0NAotLS0g YS90b29scy9saWJzL2RldmljZW1vZGVsL2NvcmUuYworKysgYi90b29scy9saWJzL2RldmljZW1v ZGVsL2NvcmUuYwpAQCAtMTYsNiArMTYsOCBAQAogICovCiAKICNpbmNsdWRlIDxzdGRsaWIuaD4K KyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgogCiAjaW5jbHVkZSAicHJp dmF0ZS5oIgogCkBAIC0yMyw2ICsyNSw3IEBAIHhlbmRldmljZW1vZGVsX2hhbmRsZSAqeGVuZGV2 aWNlbW9kZWxfb3Blbih4ZW50b29sbG9nX2xvZ2dlciAqbG9nZ2VyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9wZW5fZmxhZ3MpCiB7CiAgICAg eGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kID0gbWFsbG9jKHNpemVvZigqZG1vZCkpOworICAg IGludCByYzsKIAogICAgIGlmICghZG1vZCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zOSw2 ICs0MiwxNCBAQCB4ZW5kZXZpY2Vtb2RlbF9oYW5kbGUgKnhlbmRldmljZW1vZGVsX29wZW4oeGVu dG9vbGxvZ19sb2dnZXIgKmxvZ2dlciwKICAgICAgICAgICAgIGdvdG8gZXJyOwogICAgIH0KIAor ICAgIGRtb2QtPnhjYWxsID0geGVuY2FsbF9vcGVuKGRtb2QtPmxvZ2dlciwgMCk7CisgICAgaWYg KCFkbW9kLT54Y2FsbCkKKyAgICAgICAgZ290byBlcnI7CisKKyAgICByYyA9IG9zZGVwX3hlbmRl dmljZW1vZGVsX29wZW4oZG1vZCk7CisgICAgaWYgKHJjKQorICAgICAgICBnb3RvIGVycjsKKwog ICAgIHJldHVybiBkbW9kOwogCiBlcnI6CkBAIC00OSwxNCArNjAsNDM4IEBAIGVycjoKIAogaW50 IHhlbmRldmljZW1vZGVsX2Nsb3NlKHhlbmRldmljZW1vZGVsX2hhbmRsZSAqZG1vZCkKIHsKKyAg ICBpbnQgcmM7CisKICAgICBpZiAoIWRtb2QpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgcmMg PSBvc2RlcF94ZW5kZXZpY2Vtb2RlbF9jbG9zZShkbW9kKTsKKworICAgIHhlbmNhbGxfY2xvc2Uo ZG1vZC0+eGNhbGwpOwogICAgIHh0bF9sb2dnZXJfZGVzdHJveShkbW9kLT5sb2dnZXJfdG9mcmVl KTsKICAgICBmcmVlKGRtb2QpOworICAgIHJldHVybiByYzsKK30KKworaW50IHhlbmRldmljZW1v ZGVsX3hjYWxsKHhlbmRldmljZW1vZGVsX2hhbmRsZSAqZG1vZCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICBkb21pZF90IGRvbWlkLCB1bnNpZ25lZCBpbnQgbnJfYnVmcywKKyAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgeGVuZGV2aWNlbW9kZWxfYnVmIGJ1ZnNbXSkKK3sKKyAgICBp bnQgcmV0ID0gLTE7CisgICAgdm9pZCAqKnhjYWxsX2J1ZnM7CisgICAgeGVuX2RtX29wX2J1Zl90 ICpvcF9idWZzOworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgeGNhbGxfYnVmcyA9IGNhbGxv Yyhucl9idWZzLCBzaXplb2YoKnhjYWxsX2J1ZnMpKTsKKyAgICBpZiAoeGNhbGxfYnVmcyA9PSBO VUxMKQorICAgICAgICBnb3RvIG91dDsKKworICAgIG9wX2J1ZnMgPSB4ZW5jYWxsX2FsbG9jX2J1 ZmZlcihkbW9kLT54Y2FsbCwgc2l6ZW9mKHhlbl9kbV9vcF9idWZfdCkgKgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBucl9idWZzKTsKKyAgICBpZiAob3BfYnVmcyA9PSBOVUxM KQorICAgICAgICBnb3RvIG91dDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBucl9idWZzOyBpKysp ICB7CisgICAgICAgIHhjYWxsX2J1ZnNbaV0gPSB4ZW5jYWxsX2FsbG9jX2J1ZmZlcihkbW9kLT54 Y2FsbCwgYnVmc1tpXS5zaXplKTsKKyAgICAgICAgaWYgKCB4Y2FsbF9idWZzW2ldID09IE5VTEwg KQorICAgICAgICAgICAgZ290byBvdXQ7CisKKyAgICAgICAgbWVtY3B5KHhjYWxsX2J1ZnNbaV0s IGJ1ZnNbaV0ucHRyLCBidWZzW2ldLnNpemUpOworICAgICAgICBzZXRfeGVuX2d1ZXN0X2hhbmRs ZV9yYXcob3BfYnVmc1tpXS5oLCB4Y2FsbF9idWZzW2ldKTsKKworICAgICAgICBvcF9idWZzW2ld LnNpemUgPSBidWZzW2ldLnNpemU7CisgICAgfQorCisgICAgcmV0ID0geGVuY2FsbDMoZG1vZC0+ eGNhbGwsIF9fSFlQRVJWSVNPUl9kbV9vcCwKKyAgICAgICAgICAgICAgICAgICBkb21pZCwgbnJf YnVmcywgKHVuc2lnbmVkIGxvbmcpb3BfYnVmcyk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAg IGdvdG8gb3V0OworCisgICAgZm9yIChpID0gMDsgaSA8IG5yX2J1ZnM7IGkrKykKKyAgICAgICAg bWVtY3B5KGJ1ZnNbaV0ucHRyLCB4Y2FsbF9idWZzW2ldLCBidWZzW2ldLnNpemUpOworCitvdXQ6 CisgICAgaWYgKHhjYWxsX2J1ZnMpCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBucl9idWZzOyBp KyspCisgICAgICAgICAgICB4ZW5jYWxsX2ZyZWVfYnVmZmVyKGRtb2QtPnhjYWxsLCB4Y2FsbF9i dWZzW2ldKTsKKworICAgIHhlbmNhbGxfZnJlZV9idWZmZXIoZG1vZC0+eGNhbGwsIG9wX2J1ZnMp OworICAgIGZyZWUoeGNhbGxfYnVmcyk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMg aW50IHhlbmRldmljZW1vZGVsX29wKAorICAgIHhlbmRldmljZW1vZGVsX2hhbmRsZSAqZG1vZCwg ZG9taWRfdCBkb21pZCwgIHVuc2lnbmVkIGludCBucl9idWZzLCAuLi4pCit7CisgICAgc3RydWN0 IHhlbmRldmljZW1vZGVsX2J1ZiAqYnVmczsKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdW5zaWdu ZWQgaW50IGk7CisgICAgaW50IHJldDsKKworICAgIGJ1ZnMgPSBjYWxsb2MobnJfYnVmcywgc2l6 ZW9mKCpidWZzKSk7CisgICAgaWYgKCFidWZzKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICB2 YV9zdGFydChhcmdzLCBucl9idWZzKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnJfYnVmczsgaSsr KSB7CisgICAgICAgIGJ1ZnNbaV0ucHRyID0gdmFfYXJnKGFyZ3MsIHZvaWQgKik7CisgICAgICAg IGJ1ZnNbaV0uc2l6ZSA9IHZhX2FyZyhhcmdzLCBzaXplX3QpOworICAgIH0KKyAgICB2YV9lbmQo YXJncyk7CisKKyAgICByZXQgPSBvc2RlcF94ZW5kZXZpY2Vtb2RlbF9vcChkbW9kLCBkb21pZCwg bnJfYnVmcywgYnVmcyk7CisKKyAgICBmcmVlKGJ1ZnMpOworCisgICAgcmV0dXJuIHJldDsKK30K KworaW50IHhlbmRldmljZW1vZGVsX2NyZWF0ZV9pb3JlcV9zZXJ2ZXIoCisgICAgeGVuZGV2aWNl bW9kZWxfaGFuZGxlICpkbW9kLCBkb21pZF90IGRvbWlkLCBpbnQgaGFuZGxlX2J1ZmlvcmVxLAor ICAgIGlvc2VydmlkX3QgKmlkKQoreworICAgIHN0cnVjdCB4ZW5fZG1fb3Agb3A7CisgICAgc3Ry dWN0IHhlbl9kbV9vcF9jcmVhdGVfaW9yZXFfc2VydmVyICpkYXRhOworICAgIGludCByYzsKKwor ICAgIG1lbXNldCgmb3AsIDAsIHNpemVvZihvcCkpOworCisgICAgb3Aub3AgPSBYRU5fRE1PUF9j cmVhdGVfaW9yZXFfc2VydmVyOworICAgIGRhdGEgPSAmb3AudS5jcmVhdGVfaW9yZXFfc2VydmVy OworCisgICAgZGF0YS0+aGFuZGxlX2J1ZmlvcmVxID0gaGFuZGxlX2J1ZmlvcmVxOworCisgICAg cmMgPSB4ZW5kZXZpY2Vtb2RlbF9vcChkbW9kLCBkb21pZCwgMSwgJm9wLCBzaXplb2Yob3ApKTsK KyAgICBpZiAocmMpCisgICAgICAgIHJldHVybiByYzsKKworICAgICppZCA9IGRhdGEtPmlkOwor CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCB4ZW5kZXZpY2Vtb2RlbF9nZXRfaW9yZXFfc2VydmVy X2luZm8oCisgICAgeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kLCBkb21pZF90IGRvbWlkLCBp b3NlcnZpZF90IGlkLAorICAgIHhlbl9wZm5fdCAqaW9yZXFfcGZuLCB4ZW5fcGZuX3QgKmJ1Zmlv cmVxX3BmbiwKKyAgICBldnRjaG5fcG9ydF90ICpidWZpb3JlcV9wb3J0KQoreworICAgIHN0cnVj dCB4ZW5fZG1fb3Agb3A7CisgICAgc3RydWN0IHhlbl9kbV9vcF9nZXRfaW9yZXFfc2VydmVyX2lu Zm8gKmRhdGE7CisgICAgaW50IHJjOworCisgICAgbWVtc2V0KCZvcCwgMCwgc2l6ZW9mKG9wKSk7 CisKKyAgICBvcC5vcCA9IFhFTl9ETU9QX2dldF9pb3JlcV9zZXJ2ZXJfaW5mbzsKKyAgICBkYXRh ID0gJm9wLnUuZ2V0X2lvcmVxX3NlcnZlcl9pbmZvOworCisgICAgZGF0YS0+aWQgPSBpZDsKKwor ICAgIHJjID0geGVuZGV2aWNlbW9kZWxfb3AoZG1vZCwgZG9taWQsIDEsICZvcCwgc2l6ZW9mKG9w KSk7CisgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICBpZiAoaW9yZXFfcGZu KQorICAgICAgICAqaW9yZXFfcGZuID0gZGF0YS0+aW9yZXFfcGZuOworCisgICAgaWYgKGJ1Zmlv cmVxX3BmbikKKyAgICAgICAgKmJ1ZmlvcmVxX3BmbiA9IGRhdGEtPmJ1ZmlvcmVxX3BmbjsKKwor ICAgIGlmIChidWZpb3JlcV9wb3J0KQorICAgICAgICAqYnVmaW9yZXFfcG9ydCA9IGRhdGEtPmJ1 ZmlvcmVxX3BvcnQ7CisKICAgICByZXR1cm4gMDsKIH0KIAoraW50IHhlbmRldmljZW1vZGVsX21h cF9pb19yYW5nZV90b19pb3JlcV9zZXJ2ZXIoCisgICAgeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpk bW9kLCBkb21pZF90IGRvbWlkLCBpb3NlcnZpZF90IGlkLCBpbnQgaXNfbW1pbywKKyAgICB1aW50 NjRfdCBzdGFydCwgdWludDY0X3QgZW5kKQoreworICAgIHN0cnVjdCB4ZW5fZG1fb3Agb3A7Cisg ICAgc3RydWN0IHhlbl9kbV9vcF9pb3JlcV9zZXJ2ZXJfcmFuZ2UgKmRhdGE7CisKKyAgICBtZW1z ZXQoJm9wLCAwLCBzaXplb2Yob3ApKTsKKworICAgIG9wLm9wID0gWEVOX0RNT1BfbWFwX2lvX3Jh bmdlX3RvX2lvcmVxX3NlcnZlcjsKKyAgICBkYXRhID0gJm9wLnUubWFwX2lvX3JhbmdlX3RvX2lv cmVxX3NlcnZlcjsKKworICAgIGRhdGEtPmlkID0gaWQ7CisgICAgZGF0YS0+dHlwZSA9IGlzX21t aW8gPyBYRU5fRE1PUF9JT19SQU5HRV9NRU1PUlkgOiBYRU5fRE1PUF9JT19SQU5HRV9QT1JUOwor ICAgIGRhdGEtPnN0YXJ0ID0gc3RhcnQ7CisgICAgZGF0YS0+ZW5kID0gZW5kOworCisgICAgcmV0 dXJuIHhlbmRldmljZW1vZGVsX29wKGRtb2QsIGRvbWlkLCAxLCAmb3AsIHNpemVvZihvcCkpOwor fQorCitpbnQgeGVuZGV2aWNlbW9kZWxfdW5tYXBfaW9fcmFuZ2VfZnJvbV9pb3JlcV9zZXJ2ZXIo CisgICAgeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kLCBkb21pZF90IGRvbWlkLCBpb3NlcnZp ZF90IGlkLCBpbnQgaXNfbW1pbywKKyAgICB1aW50NjRfdCBzdGFydCwgdWludDY0X3QgZW5kKQor eworICAgIHN0cnVjdCB4ZW5fZG1fb3Agb3A7CisgICAgc3RydWN0IHhlbl9kbV9vcF9pb3JlcV9z ZXJ2ZXJfcmFuZ2UgKmRhdGE7CisKKyAgICBtZW1zZXQoJm9wLCAwLCBzaXplb2Yob3ApKTsKKwor ICAgIG9wLm9wID0gWEVOX0RNT1BfdW5tYXBfaW9fcmFuZ2VfZnJvbV9pb3JlcV9zZXJ2ZXI7Cisg ICAgZGF0YSA9ICZvcC51LnVubWFwX2lvX3JhbmdlX2Zyb21faW9yZXFfc2VydmVyOworCisgICAg ZGF0YS0+aWQgPSBpZDsKKyAgICBkYXRhLT50eXBlID0gaXNfbW1pbyA/IFhFTl9ETU9QX0lPX1JB TkdFX01FTU9SWSA6IFhFTl9ETU9QX0lPX1JBTkdFX1BPUlQ7CisgICAgZGF0YS0+c3RhcnQgPSBz dGFydDsKKyAgICBkYXRhLT5lbmQgPSBlbmQ7CisKKyAgICByZXR1cm4geGVuZGV2aWNlbW9kZWxf b3AoZG1vZCwgZG9taWQsIDEsICZvcCwgc2l6ZW9mKG9wKSk7Cit9CisKK2ludCB4ZW5kZXZpY2Vt b2RlbF9tYXBfcGNpZGV2X3RvX2lvcmVxX3NlcnZlcigKKyAgICB4ZW5kZXZpY2Vtb2RlbF9oYW5k bGUgKmRtb2QsIGRvbWlkX3QgZG9taWQsIGlvc2VydmlkX3QgaWQsCisgICAgdWludDE2X3Qgc2Vn bWVudCwgdWludDhfdCBidXMsIHVpbnQ4X3QgZGV2aWNlLCB1aW50OF90IGZ1bmN0aW9uKQorewor ICAgIHN0cnVjdCB4ZW5fZG1fb3Agb3A7CisgICAgc3RydWN0IHhlbl9kbV9vcF9pb3JlcV9zZXJ2 ZXJfcmFuZ2UgKmRhdGE7CisKKyAgICBpZiAoZGV2aWNlID4gMHgxZiB8fCBmdW5jdGlvbiA+IDB4 NykgeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0K KworICAgIG1lbXNldCgmb3AsIDAsIHNpemVvZihvcCkpOworCisgICAgb3Aub3AgPSBYRU5fRE1P UF9tYXBfaW9fcmFuZ2VfdG9faW9yZXFfc2VydmVyOworICAgIGRhdGEgPSAmb3AudS5tYXBfaW9f cmFuZ2VfdG9faW9yZXFfc2VydmVyOworCisgICAgZGF0YS0+aWQgPSBpZDsKKyAgICBkYXRhLT50 eXBlID0gWEVOX0RNT1BfSU9fUkFOR0VfUENJOworCisgICAgLyoKKyAgICAgKiBUaGUgdW5kZXJs eWluZyBoeXBlcmNhbGwgd2lsbCBkZWFsIHdpdGggcmFuZ2VzIG9mIFBDSSBTQkRGCisgICAgICog YnV0LCBmb3Igc2ltcGxpY2l0eSwgdGhlIEFQSSBvbmx5IHVzZXMgc2luZ2xldG9ucy4KKyAgICAg Ki8KKyAgICBkYXRhLT5zdGFydCA9IGRhdGEtPmVuZCA9IFhFTl9ETU9QX1BDSV9TQkRGKCh1aW50 NjRfdClzZWdtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKHVpbnQ2NF90KWJ1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICh1aW50NjRfdClkZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpZnVuY3Rpb24pOworCisgICAgcmV0dXJu IHhlbmRldmljZW1vZGVsX29wKGRtb2QsIGRvbWlkLCAxLCAmb3AsIHNpemVvZihvcCkpOworfQor CitpbnQgeGVuZGV2aWNlbW9kZWxfdW5tYXBfcGNpZGV2X2Zyb21faW9yZXFfc2VydmVyKAorICAg IHhlbmRldmljZW1vZGVsX2hhbmRsZSAqZG1vZCwgZG9taWRfdCBkb21pZCwgaW9zZXJ2aWRfdCBp ZCwKKyAgICB1aW50MTZfdCBzZWdtZW50LCB1aW50OF90IGJ1cywgdWludDhfdCBkZXZpY2UsIHVp bnQ4X3QgZnVuY3Rpb24pCit7CisgICAgc3RydWN0IHhlbl9kbV9vcCBvcDsKKyAgICBzdHJ1Y3Qg eGVuX2RtX29wX2lvcmVxX3NlcnZlcl9yYW5nZSAqZGF0YTsKKworICAgIGlmIChkZXZpY2UgPiAw eDFmIHx8IGZ1bmN0aW9uID4gMHg3KSB7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAg ICByZXR1cm4gLTE7CisgICAgfQorCisgICAgbWVtc2V0KCZvcCwgMCwgc2l6ZW9mKG9wKSk7CisK KyAgICBvcC5vcCA9IFhFTl9ETU9QX3VubWFwX2lvX3JhbmdlX2Zyb21faW9yZXFfc2VydmVyOwor ICAgIGRhdGEgPSAmb3AudS51bm1hcF9pb19yYW5nZV9mcm9tX2lvcmVxX3NlcnZlcjsKKworICAg IGRhdGEtPmlkID0gaWQ7CisgICAgZGF0YS0+dHlwZSA9IFhFTl9ETU9QX0lPX1JBTkdFX1BDSTsK KworICAgIC8qCisgICAgICogVGhlIHVuZGVybHlpbmcgaHlwZXJjYWxsIHdpbGwgZGVhbCB3aXRo IHJhbmdlcyBvZiBQQ0kgU0JERgorICAgICAqIGJ1dCwgZm9yIHNpbXBsaWNpdHksIHRoZSBBUEkg b25seSB1c2VzIHNpbmdsZXRvbnMuCisgICAgICovCisgICAgZGF0YS0+c3RhcnQgPSBkYXRhLT5l bmQgPSBYRU5fRE1PUF9QQ0lfU0JERigodWludDY0X3Qpc2VnbWVudCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50NjRfdClidXMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpZGV2aWNl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2 NF90KWZ1bmN0aW9uKTsKKworICAgIHJldHVybiB4ZW5kZXZpY2Vtb2RlbF9vcChkbW9kLCBkb21p ZCwgMSwgJm9wLCBzaXplb2Yob3ApKTsKK30KKworaW50IHhlbmRldmljZW1vZGVsX2Rlc3Ryb3lf aW9yZXFfc2VydmVyKAorICAgIHhlbmRldmljZW1vZGVsX2hhbmRsZSAqZG1vZCwgZG9taWRfdCBk b21pZCwgaW9zZXJ2aWRfdCBpZCkKK3sKKyAgICBzdHJ1Y3QgeGVuX2RtX29wIG9wOworICAgIHN0 cnVjdCB4ZW5fZG1fb3BfZGVzdHJveV9pb3JlcV9zZXJ2ZXIgKmRhdGE7CisKKyAgICBtZW1zZXQo Jm9wLCAwLCBzaXplb2Yob3ApKTsKKworICAgIG9wLm9wID0gWEVOX0RNT1BfZGVzdHJveV9pb3Jl cV9zZXJ2ZXI7CisgICAgZGF0YSA9ICZvcC51LmRlc3Ryb3lfaW9yZXFfc2VydmVyOworCisgICAg ZGF0YS0+aWQgPSBpZDsKKworICAgIHJldHVybiB4ZW5kZXZpY2Vtb2RlbF9vcChkbW9kLCBkb21p ZCwgMSwgJm9wLCBzaXplb2Yob3ApKTsKK30KKworaW50IHhlbmRldmljZW1vZGVsX3NldF9pb3Jl cV9zZXJ2ZXJfc3RhdGUoCisgICAgeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kLCBkb21pZF90 IGRvbWlkLCBpb3NlcnZpZF90IGlkLCBpbnQgZW5hYmxlZCkKK3sKKyAgICBzdHJ1Y3QgeGVuX2Rt X29wIG9wOworICAgIHN0cnVjdCB4ZW5fZG1fb3Bfc2V0X2lvcmVxX3NlcnZlcl9zdGF0ZSAqZGF0 YTsKKworICAgIG1lbXNldCgmb3AsIDAsIHNpemVvZihvcCkpOworCisgICAgb3Aub3AgPSBYRU5f RE1PUF9zZXRfaW9yZXFfc2VydmVyX3N0YXRlOworICAgIGRhdGEgPSAmb3AudS5zZXRfaW9yZXFf c2VydmVyX3N0YXRlOworCisgICAgZGF0YS0+aWQgPSBpZDsKKyAgICBkYXRhLT5lbmFibGVkID0g ISFlbmFibGVkOworCisgICAgcmV0dXJuIHhlbmRldmljZW1vZGVsX29wKGRtb2QsIGRvbWlkLCAx LCAmb3AsIHNpemVvZihvcCkpOworfQorCitpbnQgeGVuZGV2aWNlbW9kZWxfc2V0X3BjaV9pbnR4 X2xldmVsKAorICAgIHhlbmRldmljZW1vZGVsX2hhbmRsZSAqZG1vZCwgZG9taWRfdCBkb21pZCwg dWludDE2X3Qgc2VnbWVudCwKKyAgICB1aW50OF90IGJ1cywgdWludDhfdCBkZXZpY2UsIHVpbnQ4 X3QgaW50eCwgdW5zaWduZWQgaW50IGxldmVsKQoreworICAgIHN0cnVjdCB4ZW5fZG1fb3Agb3A7 CisgICAgc3RydWN0IHhlbl9kbV9vcF9zZXRfcGNpX2ludHhfbGV2ZWwgKmRhdGE7CisKKyAgICBt ZW1zZXQoJm9wLCAwLCBzaXplb2Yob3ApKTsKKworICAgIG9wLm9wID0gWEVOX0RNT1Bfc2V0X3Bj aV9pbnR4X2xldmVsOworICAgIGRhdGEgPSAmb3AudS5zZXRfcGNpX2ludHhfbGV2ZWw7CisKKyAg ICBkYXRhLT5kb21haW4gPSBzZWdtZW50OworICAgIGRhdGEtPmJ1cyA9IGJ1czsKKyAgICBkYXRh LT5kZXZpY2UgPSBkZXZpY2U7CisgICAgZGF0YS0+aW50eCA9IGludHg7CisgICAgZGF0YS0+bGV2 ZWwgPSBsZXZlbDsKKworICAgIHJldHVybiB4ZW5kZXZpY2Vtb2RlbF9vcChkbW9kLCBkb21pZCwg MSwgJm9wLCBzaXplb2Yob3ApKTsKK30KKworaW50IHhlbmRldmljZW1vZGVsX3NldF9pc2FfaXJx X2xldmVsKAorICAgIHhlbmRldmljZW1vZGVsX2hhbmRsZSAqZG1vZCwgZG9taWRfdCBkb21pZCwg dWludDhfdCBpcnEsCisgICAgdW5zaWduZWQgaW50IGxldmVsKQoreworICAgIHN0cnVjdCB4ZW5f ZG1fb3Agb3A7CisgICAgc3RydWN0IHhlbl9kbV9vcF9zZXRfaXNhX2lycV9sZXZlbCAqZGF0YTsK KworICAgIG1lbXNldCgmb3AsIDAsIHNpemVvZihvcCkpOworCisgICAgb3Aub3AgPSBYRU5fRE1P UF9zZXRfaXNhX2lycV9sZXZlbDsKKyAgICBkYXRhID0gJm9wLnUuc2V0X2lzYV9pcnFfbGV2ZWw7 CisKKyAgICBkYXRhLT5pc2FfaXJxID0gaXJxOworICAgIGRhdGEtPmxldmVsID0gbGV2ZWw7CisK KyAgICByZXR1cm4geGVuZGV2aWNlbW9kZWxfb3AoZG1vZCwgZG9taWQsIDEsICZvcCwgc2l6ZW9m KG9wKSk7Cit9CisKK2ludCB4ZW5kZXZpY2Vtb2RlbF9zZXRfcGNpX2xpbmtfcm91dGUoCisgICAg eGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kLCBkb21pZF90IGRvbWlkLCB1aW50OF90IGxpbmss IHVpbnQ4X3QgaXJxKQoreworICAgIHN0cnVjdCB4ZW5fZG1fb3Agb3A7CisgICAgc3RydWN0IHhl bl9kbV9vcF9zZXRfcGNpX2xpbmtfcm91dGUgKmRhdGE7CisKKyAgICBtZW1zZXQoJm9wLCAwLCBz aXplb2Yob3ApKTsKKworICAgIG9wLm9wID0gWEVOX0RNT1Bfc2V0X3BjaV9saW5rX3JvdXRlOwor ICAgIGRhdGEgPSAmb3AudS5zZXRfcGNpX2xpbmtfcm91dGU7CisKKyAgICBkYXRhLT5saW5rID0g bGluazsKKyAgICBkYXRhLT5pc2FfaXJxID0gaXJxOworCisgICAgcmV0dXJuIHhlbmRldmljZW1v ZGVsX29wKGRtb2QsIGRvbWlkLCAxLCAmb3AsIHNpemVvZihvcCkpOworfQorCitpbnQgeGVuZGV2 aWNlbW9kZWxfaW5qZWN0X21zaSgKKyAgICB4ZW5kZXZpY2Vtb2RlbF9oYW5kbGUgKmRtb2QsIGRv bWlkX3QgZG9taWQsIHVpbnQ2NF90IG1zaV9hZGRyLAorICAgIHVpbnQzMl90IG1zaV9kYXRhKQor eworICAgIHN0cnVjdCB4ZW5fZG1fb3Agb3A7CisgICAgc3RydWN0IHhlbl9kbV9vcF9pbmplY3Rf bXNpICpkYXRhOworCisgICAgbWVtc2V0KCZvcCwgMCwgc2l6ZW9mKG9wKSk7CisKKyAgICBvcC5v cCA9IFhFTl9ETU9QX2luamVjdF9tc2k7CisgICAgZGF0YSA9ICZvcC51LmluamVjdF9tc2k7CisK KyAgICBkYXRhLT5hZGRyID0gbXNpX2FkZHI7CisgICAgZGF0YS0+ZGF0YSA9IG1zaV9kYXRhOwor CisgICAgcmV0dXJuIHhlbmRldmljZW1vZGVsX29wKGRtb2QsIGRvbWlkLCAxLCAmb3AsIHNpemVv ZihvcCkpOworfQorCitpbnQgeGVuZGV2aWNlbW9kZWxfdHJhY2tfZGlydHlfdnJhbSgKKyAgICB4 ZW5kZXZpY2Vtb2RlbF9oYW5kbGUgKmRtb2QsIGRvbWlkX3QgZG9taWQsIHVpbnQ2NF90IGZpcnN0 X3BmbiwKKyAgICB1aW50MzJfdCBuciwgdW5zaWduZWQgbG9uZyAqZGlydHlfYml0bWFwKQorewor ICAgIHN0cnVjdCB4ZW5fZG1fb3Agb3A7CisgICAgc3RydWN0IHhlbl9kbV9vcF90cmFja19kaXJ0 eV92cmFtICpkYXRhOworCisgICAgbWVtc2V0KCZvcCwgMCwgc2l6ZW9mKG9wKSk7CisKKyAgICBv cC5vcCA9IFhFTl9ETU9QX3RyYWNrX2RpcnR5X3ZyYW07CisgICAgZGF0YSA9ICZvcC51LnRyYWNr X2RpcnR5X3ZyYW07CisKKyAgICBkYXRhLT5maXJzdF9wZm4gPSBmaXJzdF9wZm47CisgICAgZGF0 YS0+bnIgPSBucjsKKworICAgIHJldHVybiB4ZW5kZXZpY2Vtb2RlbF9vcChkbW9kLCBkb21pZCwg MiwgJm9wLCBzaXplb2Yob3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJ0eV9i aXRtYXAsIChzaXplX3QpKG5yICsgNykgLyA4KTsKK30KKworaW50IHhlbmRldmljZW1vZGVsX21v ZGlmaWVkX21lbW9yeSgKKyAgICB4ZW5kZXZpY2Vtb2RlbF9oYW5kbGUgKmRtb2QsIGRvbWlkX3Qg ZG9taWQsIHVpbnQ2NF90IGZpcnN0X3BmbiwKKyAgICB1aW50MzJfdCBucikKK3sKKyAgICBzdHJ1 Y3QgeGVuX2RtX29wIG9wOworICAgIHN0cnVjdCB4ZW5fZG1fb3BfbW9kaWZpZWRfbWVtb3J5ICpk YXRhOworCisgICAgbWVtc2V0KCZvcCwgMCwgc2l6ZW9mKG9wKSk7CisKKyAgICBvcC5vcCA9IFhF Tl9ETU9QX21vZGlmaWVkX21lbW9yeTsKKyAgICBkYXRhID0gJm9wLnUubW9kaWZpZWRfbWVtb3J5 OworCisgICAgZGF0YS0+Zmlyc3RfcGZuID0gZmlyc3RfcGZuOworICAgIGRhdGEtPm5yID0gbnI7 CisKKyAgICByZXR1cm4geGVuZGV2aWNlbW9kZWxfb3AoZG1vZCwgZG9taWQsIDEsICZvcCwgc2l6 ZW9mKG9wKSk7Cit9CisKK2ludCB4ZW5kZXZpY2Vtb2RlbF9zZXRfbWVtX3R5cGUoCisgICAgeGVu ZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kLCBkb21pZF90IGRvbWlkLCBodm1tZW1fdHlwZV90IG1l bV90eXBlLAorICAgIHVpbnQ2NF90IGZpcnN0X3BmbiwgdWludDMyX3QgbnIpCit7CisgICAgc3Ry dWN0IHhlbl9kbV9vcCBvcDsKKyAgICBzdHJ1Y3QgeGVuX2RtX29wX3NldF9tZW1fdHlwZSAqZGF0 YTsKKworICAgIG1lbXNldCgmb3AsIDAsIHNpemVvZihvcCkpOworCisgICAgb3Aub3AgPSBYRU5f RE1PUF9zZXRfbWVtX3R5cGU7CisgICAgZGF0YSA9ICZvcC51LnNldF9tZW1fdHlwZTsKKworICAg IGRhdGEtPm1lbV90eXBlID0gbWVtX3R5cGU7CisgICAgZGF0YS0+Zmlyc3RfcGZuID0gZmlyc3Rf cGZuOworICAgIGRhdGEtPm5yID0gbnI7CisKKyAgICByZXR1cm4geGVuZGV2aWNlbW9kZWxfb3Ao ZG1vZCwgZG9taWQsIDEsICZvcCwgc2l6ZW9mKG9wKSk7Cit9CisKK2ludCB4ZW5kZXZpY2Vtb2Rl bF9pbmplY3RfZXZlbnQoCisgICAgeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kLCBkb21pZF90 IGRvbWlkLCBpbnQgdmNwdSwgdWludDhfdCB2ZWN0b3IsCisgICAgdWludDhfdCB0eXBlLCB1aW50 MzJfdCBlcnJvcl9jb2RlLCB1aW50OF90IGluc25fbGVuLCB1aW50NjRfdCBjcjIpCit7CisgICAg c3RydWN0IHhlbl9kbV9vcCBvcDsKKyAgICBzdHJ1Y3QgeGVuX2RtX29wX2luamVjdF9ldmVudCAq ZGF0YTsKKworICAgIG1lbXNldCgmb3AsIDAsIHNpemVvZihvcCkpOworCisgICAgb3Aub3AgPSBY RU5fRE1PUF9pbmplY3RfZXZlbnQ7CisgICAgZGF0YSA9ICZvcC51LmluamVjdF9ldmVudDsKKwor ICAgIGRhdGEtPnZjcHVpZCA9IHZjcHU7CisgICAgZGF0YS0+dmVjdG9yID0gdmVjdG9yOworICAg IGRhdGEtPnR5cGUgPSB0eXBlOworICAgIGRhdGEtPmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOwor ICAgIGRhdGEtPmluc25fbGVuID0gaW5zbl9sZW47CisgICAgZGF0YS0+Y3IyID0gY3IyOworCisg ICAgcmV0dXJuIHhlbmRldmljZW1vZGVsX29wKGRtb2QsIGRvbWlkLCAxLCAmb3AsIHNpemVvZihv cCkpOworfQorCiAvKgogICogTG9jYWwgdmFyaWFibGVzOgogICogbW9kZTogQwpkaWZmIC0tZ2l0 IGEvdG9vbHMvbGlicy9kZXZpY2Vtb2RlbC9pbmNsdWRlL3hlbmRldmljZW1vZGVsLmggYi90b29s cy9saWJzL2RldmljZW1vZGVsL2luY2x1ZGUveGVuZGV2aWNlbW9kZWwuaAppbmRleCBmOTc3YjBl Li5lMDBmOGRhIDEwMDY0NAotLS0gYS90b29scy9saWJzL2RldmljZW1vZGVsL2luY2x1ZGUveGVu ZGV2aWNlbW9kZWwuaAorKysgYi90b29scy9saWJzL2RldmljZW1vZGVsL2luY2x1ZGUveGVuZGV2 aWNlbW9kZWwuaApAQCAtMTcsNiArMTcsMTQgQEAKICNpZm5kZWYgWEVOREVWSUNFTU9ERUxfSAog I2RlZmluZSBYRU5ERVZJQ0VNT0RFTF9ICiAKKyNpZmRlZiBfX1hFTl9UT09MU19fCisKKyNpbmNs dWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPHhlbi94ZW4uaD4KKyNpbmNsdWRlIDx4ZW4vaHZt L2RtX29wLmg+CisjaW5jbHVkZSA8eGVuL2h2bS9odm1fb3AuaD4KKwogLyogQ2FsbGVycyB3aG8g ZG9uJ3QgY2FyZSBkb24ndCBuZWVkIHRvICNpbmNsdWRlIDx4ZW50b29sbG9nLmg+ICovCiBzdHJ1 Y3QgeGVudG9vbGxvZ19sb2dnZXI7CiAKQEAgLTI3LDYgKzM1LDI1NiBAQCB4ZW5kZXZpY2Vtb2Rl bF9oYW5kbGUgKnhlbmRldmljZW1vZGVsX29wZW4oc3RydWN0IHhlbnRvb2xsb2dfbG9nZ2VyICps b2dnZXIsCiAKIGludCB4ZW5kZXZpY2Vtb2RlbF9jbG9zZSh4ZW5kZXZpY2Vtb2RlbF9oYW5kbGUg KmRtb2QpOwogCisvKgorICogSU9SRVEgU2VydmVyIEFQSS4gKFNlZSBzZWN0aW9uIG9uIElPUkVR IFNlcnZlcnMgaW4gcHVibGljL2h2bV9vcC5oKS4KKyAqLworCisvKioKKyAqIFRoaXMgZnVuY3Rp b24gaW5zdGFudGlhdGVzIGFuIElPUkVRIFNlcnZlci4KKyAqCisgKiBAcGFybSBkbW9kIGEgaGFu ZGxlIHRvIGFuIG9wZW4gZGV2aWNlbW9kZWwgaW50ZXJmYWNlLgorICogQHBhcm0gZG9taWQgdGhl IGRvbWFpbiBpZCB0byBiZSBzZXJ2aWNlZAorICogQHBhcm0gaGFuZGxlX2J1ZmlvcmVxIGhvdyBz aG91bGQgdGhlIElPUkVRIFNlcnZlciBoYW5kbGUgYnVmZmVyZWQKKyAqICAgICAgICAgICAgICAg ICAgICAgICByZXF1ZXN0cyAoSFZNX0lPUkVRU1JWX0JVRklPUkVRXyopPworICogQHBhcm0gaWQg cG9pbnRlciB0byBhbiBpb3NlcnZpZF90IHRvIHJlY2VpdmUgdGhlIElPUkVRIFNlcnZlciBpZC4K KyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICovCitpbnQgeGVuZGV2 aWNlbW9kZWxfY3JlYXRlX2lvcmVxX3NlcnZlcigKKyAgICB4ZW5kZXZpY2Vtb2RlbF9oYW5kbGUg KmRtb2QsIGRvbWlkX3QgZG9taWQsIGludCBoYW5kbGVfYnVmaW9yZXEsCisgICAgaW9zZXJ2aWRf dCAqaWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBuZWNlc3Nhcnkg aW5mb3JtYXRpb24gdG8gYWxsb3cgYW4KKyAqIGVtdWxhdG9yIHRvIHVzZSBhbiBJT1JFUSBTZXJ2 ZXIuCisgKgorICogQHBhcm0gZG1vZCBhIGhhbmRsZSB0byBhbiBvcGVuIGRldmljZW1vZGVsIGlu dGVyZmFjZS4KKyAqIEBwYXJtIGRvbWlkIHRoZSBkb21haW4gaWQgdG8gYmUgc2VydmljZWQKKyAq IEBwYXJtIGlkIHRoZSBJT1JFUSBTZXJ2ZXIgaWQuCisgKiBAcGFybSBpb3JlcV9wZm4gcG9pbnRl ciB0byBhIHhlbl9wZm5fdCB0byByZWNlaXZlIHRoZSBzeW5jaHJvbm91cyBpb3JlcQorICogICAg ICAgICAgICAgICAgICBnbWZuCisgKiBAcGFybSBidWZpb3JlcV9wZm4gcG9pbnRlciB0byBhIHhl bl9wZm5fdCB0byByZWNlaXZlIHRoZSBidWZmZXJlZCBpb3JlcQorICogICAgICAgICAgICAgICAg ICAgIGdtZm4KKyAqIEBwYXJtIGJ1ZmlvcmVxX3BvcnQgcG9pbnRlciB0byBhIGV2dGNobl9wb3J0 X3QgdG8gcmVjZWl2ZSB0aGUgYnVmZmVyZWQKKyAqICAgICAgICAgICAgICAgICAgICAgaW9yZXEg ZXZlbnQgY2hhbm5lbAorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCisg Ki8KK2ludCB4ZW5kZXZpY2Vtb2RlbF9nZXRfaW9yZXFfc2VydmVyX2luZm8oCisgICAgeGVuZGV2 aWNlbW9kZWxfaGFuZGxlICpkbW9kLCBkb21pZF90IGRvbWlkLCBpb3NlcnZpZF90IGlkLAorICAg IHhlbl9wZm5fdCAqaW9yZXFfcGZuLCB4ZW5fcGZuX3QgKmJ1ZmlvcmVxX3BmbiwKKyAgICBldnRj aG5fcG9ydF90ICpidWZpb3JlcV9wb3J0KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJlZ2lz dGVycyBhIHJhbmdlIG9mIG1lbW9yeSBvciBJL08gcG9ydHMgZm9yIGVtdWxhdGlvbi4KKyAqCisg KiBAcGFybSBkbW9kIGEgaGFuZGxlIHRvIGFuIG9wZW4gZGV2aWNlbW9kZWwgaW50ZXJmYWNlLgor ICogQHBhcm0gZG9taWQgdGhlIGRvbWFpbiBpZCB0byBiZSBzZXJ2aWNlZAorICogQHBhcm0gaWQg dGhlIElPUkVRIFNlcnZlciBpZC4KKyAqIEBwYXJtIGlzX21taW8gaXMgdGhpcyBhIHJhbmdlIG9m IHBvcnRzIG9yIG1lbW9yeQorICogQHBhcm0gc3RhcnQgc3RhcnQgb2YgcmFuZ2UKKyAqIEBwYXJt IGVuZCBlbmQgb2YgcmFuZ2UgKGluY2x1c2l2ZSkuCisgKiBAcmV0dXJuIDAgb24gc3VjY2Vzcywg LTEgb24gZmFpbHVyZS4KKyAqLworaW50IHhlbmRldmljZW1vZGVsX21hcF9pb19yYW5nZV90b19p b3JlcV9zZXJ2ZXIoCisgICAgeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kLCBkb21pZF90IGRv bWlkLCBpb3NlcnZpZF90IGlkLCBpbnQgaXNfbW1pbywKKyAgICB1aW50NjRfdCBzdGFydCwgdWlu dDY0X3QgZW5kKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGRlcmVnaXN0ZXJzIGEgcmFuZ2Ug b2YgbWVtb3J5IG9yIEkvTyBwb3J0cyBmb3IgZW11bGF0aW9uLgorICoKKyAqIEBwYXJtIGRtb2Qg YSBoYW5kbGUgdG8gYW4gb3BlbiBkZXZpY2Vtb2RlbCBpbnRlcmZhY2UuCisgKiBAcGFybSBkb21p ZCB0aGUgZG9tYWluIGlkIHRvIGJlIHNlcnZpY2VkCisgKiBAcGFybSBpZCB0aGUgSU9SRVEgU2Vy dmVyIGlkLgorICogQHBhcm0gaXNfbW1pbyBpcyB0aGlzIGEgcmFuZ2Ugb2YgcG9ydHMgb3IgbWVt b3J5CisgKiBAcGFybSBzdGFydCBzdGFydCBvZiByYW5nZQorICogQHBhcm0gZW5kIGVuZCBvZiBy YW5nZSAoaW5jbHVzaXZlKS4KKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJl LgorICovCitpbnQgeGVuZGV2aWNlbW9kZWxfdW5tYXBfaW9fcmFuZ2VfZnJvbV9pb3JlcV9zZXJ2 ZXIoCisgICAgeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kLCBkb21pZF90IGRvbWlkLCBpb3Nl cnZpZF90IGlkLCBpbnQgaXNfbW1pbywKKyAgICB1aW50NjRfdCBzdGFydCwgdWludDY0X3QgZW5k KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhIFBDSSBkZXZpY2UgZm9yIGNv bmZpZyBzcGFjZSBlbXVsYXRpb24uCisgKgorICogQHBhcm0gZG1vZCBhIGhhbmRsZSB0byBhbiBv cGVuIGRldmljZW1vZGVsIGludGVyZmFjZS4KKyAqIEBwYXJtIGRvbWlkIHRoZSBkb21haW4gaWQg dG8gYmUgc2VydmljZWQKKyAqIEBwYXJtIGlkIHRoZSBJT1JFUSBTZXJ2ZXIgaWQuCisgKiBAcGFy bSBzZWdtZW50IHRoZSBQQ0kgc2VnbWVudCBvZiB0aGUgZGV2aWNlCisgKiBAcGFybSBidXMgdGhl IFBDSSBidXMgb2YgdGhlIGRldmljZQorICogQHBhcm0gZGV2aWNlIHRoZSAnc2xvdCcgbnVtYmVy IG9mIHRoZSBkZXZpY2UKKyAqIEBwYXJtIGZ1bmN0aW9uIHRoZSBmdW5jdGlvbiBudW1iZXIgb2Yg dGhlIGRldmljZQorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCisgKi8K K2ludCB4ZW5kZXZpY2Vtb2RlbF9tYXBfcGNpZGV2X3RvX2lvcmVxX3NlcnZlcigKKyAgICB4ZW5k ZXZpY2Vtb2RlbF9oYW5kbGUgKmRtb2QsIGRvbWlkX3QgZG9taWQsIGlvc2VydmlkX3QgaWQsCisg ICAgdWludDE2X3Qgc2VnbWVudCwgdWludDhfdCBidXMsIHVpbnQ4X3QgZGV2aWNlLCB1aW50OF90 IGZ1bmN0aW9uKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGRlcmVnaXN0ZXJzIGEgUENJIGRl dmljZSBmb3IgY29uZmlnIHNwYWNlIGVtdWxhdGlvbi4KKyAqCisgKiBAcGFybSBkbW9kIGEgaGFu ZGxlIHRvIGFuIG9wZW4gZGV2aWNlbW9kZWwgaW50ZXJmYWNlLgorICogQHBhcm0gZG9taWQgdGhl IGRvbWFpbiBpZCB0byBiZSBzZXJ2aWNlZAorICogQHBhcm0gaWQgdGhlIElPUkVRIFNlcnZlciBp ZC4KKyAqIEBwYXJtIHNlZ21lbnQgdGhlIFBDSSBzZWdtZW50IG9mIHRoZSBkZXZpY2UKKyAqIEBw YXJtIGJ1cyB0aGUgUENJIGJ1cyBvZiB0aGUgZGV2aWNlCisgKiBAcGFybSBkZXZpY2UgdGhlICdz bG90JyBudW1iZXIgb2YgdGhlIGRldmljZQorICogQHBhcm0gZnVuY3Rpb24gdGhlIGZ1bmN0aW9u IG51bWJlciBvZiB0aGUgZGV2aWNlCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZmFp bHVyZS4KKyAqLworaW50IHhlbmRldmljZW1vZGVsX3VubWFwX3BjaWRldl9mcm9tX2lvcmVxX3Nl cnZlcigKKyAgICB4ZW5kZXZpY2Vtb2RlbF9oYW5kbGUgKmRtb2QsIGRvbWlkX3QgZG9taWQsIGlv c2VydmlkX3QgaWQsCisgICAgdWludDE2X3Qgc2VnbWVudCwgdWludDhfdCBidXMsIHVpbnQ4X3Qg ZGV2aWNlLCB1aW50OF90IGZ1bmN0aW9uKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGRlc3Ry b3lzIGFuIElPUkVRIFNlcnZlci4KKyAqCisgKiBAcGFybSBkbW9kIGEgaGFuZGxlIHRvIGFuIG9w ZW4gZGV2aWNlbW9kZWwgaW50ZXJmYWNlLgorICogQHBhcm0gZG9taWQgdGhlIGRvbWFpbiBpZCB0 byBiZSBzZXJ2aWNlZAorICogQHBhcm0gaWQgdGhlIElPUkVRIFNlcnZlciBpZC4KKyAqIEByZXR1 cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICovCitpbnQgeGVuZGV2aWNlbW9kZWxf ZGVzdHJveV9pb3JlcV9zZXJ2ZXIoCisgICAgeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kLCBk b21pZF90IGRvbWlkLCBpb3NlcnZpZF90IGlkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNl dHMgSU9SRVEgU2VydmVyIHN0YXRlLiBBbiBJT1JFUSBTZXJ2ZXIKKyAqIHdpbGwgbm90IGJlIHBh c3NlZCBlbXVsYXRpb24gcmVxdWVzdHMgdW50aWwgaXQgaXMgaW4KKyAqIHRoZSBlbmFibGVkIHN0 YXRlLgorICogTm90ZSB0aGF0IHRoZSBjb250ZW50cyBvZiB0aGUgaW9yZXFfcGZuIGFuZCBidWZp b3JlcV9wZm4gYXJlCisgKiBub3QgbWVhbmluZ2Z1bCB1bnRpbCB0aGUgSU9SRVEgU2VydmVyIGlz IGluIHRoZSBlbmFibGVkIHN0YXRlLgorICoKKyAqIEBwYXJtIGRtb2QgYSBoYW5kbGUgdG8gYW4g b3BlbiBkZXZpY2Vtb2RlbCBpbnRlcmZhY2UuCisgKiBAcGFybSBkb21pZCB0aGUgZG9tYWluIGlk IHRvIGJlIHNlcnZpY2VkCisgKiBAcGFybSBpZCB0aGUgSU9SRVEgU2VydmVyIGlkLgorICogQHBh cm0gZW5hYmxlZCB0aGUgc3RhdGUuCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZmFp bHVyZS4KKyAqLworaW50IHhlbmRldmljZW1vZGVsX3NldF9pb3JlcV9zZXJ2ZXJfc3RhdGUoCisg ICAgeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kLCBkb21pZF90IGRvbWlkLCBpb3NlcnZpZF90 IGlkLCBpbnQgZW5hYmxlZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBsZXZl bCBvZiBJTlR4IHBpbiBvZiBhbiBlbXVsYXRlZCBQQ0kgZGV2aWNlLgorICoKKyAqIEBwYXJtIGRt b2QgYSBoYW5kbGUgdG8gYW4gb3BlbiBkZXZpY2Vtb2RlbCBpbnRlcmZhY2UuCisgKiBAcGFybSBk b21pZCB0aGUgZG9tYWluIGlkIHRvIGJlIHNlcnZpY2VkCisgKiBAcGFybSBzZWdtZW50IHRoZSBQ Q0kgc2VnbWVudCBudW1iZXIgb2YgdGhlIGVtdWxhdGVkIGRldmljZQorICogQHBhcm0gYnVzIHRo ZSBQQ0kgYnVzIG51bWJlciBvZiB0aGUgZW11bGF0ZWQgZGV2aWNlCisgKiBAcGFybSBkZXZpY2Ug dGhlIFBDSSBkZXZpY2UgbnVtYmVyIG9mIHRoZSBlbXVsYXRlZCBkZXZpY2UKKyAqIEBwYXJtIGlu dHggdGhlIElOVHggcGluIHRvIG1vZGlmeSAoMCA9PiBBIC4uIDMgPT4gRCkKKyAqIEBwYXJtIGxl dmVsIHRoZSBsZXZlbCAoMSBmb3IgYXNzZXJ0ZWQsIDAgZm9yIGRlLWFzc2VydGVkKQorICogQHJl dHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCisgKi8KK2ludCB4ZW5kZXZpY2Vtb2Rl bF9zZXRfcGNpX2ludHhfbGV2ZWwoCisgICAgeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kLCBk b21pZF90IGRvbWlkLCB1aW50MTZfdCBzZWdtZW50LAorICAgIHVpbnQ4X3QgYnVzLCB1aW50OF90 IGRldmljZSwgdWludDhfdCBpbnR4LCB1bnNpZ25lZCBpbnQgbGV2ZWwpOworCisvKioKKyAqIFRo aXMgZnVuY3Rpb24gc2V0cyB0aGUgbGV2ZWwgb2YgYW4gSVNBIElSUSBsaW5lLgorICoKKyAqIEBw YXJtIGRtb2QgYSBoYW5kbGUgdG8gYW4gb3BlbiBkZXZpY2Vtb2RlbCBpbnRlcmZhY2UuCisgKiBA cGFybSBkb21pZCB0aGUgZG9tYWluIGlkIHRvIGJlIHNlcnZpY2VkCisgKiBAcGFybSBpcnEgdGhl IElSUSBudW1iZXIgKDAgLSAxNSkKKyAqIEBwYXJtIGxldmVsIHRoZSBsZXZlbCAoMSBmb3IgYXNz ZXJ0ZWQsIDAgZm9yIGRlLWFzc2VydGVkKQorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9u IGZhaWx1cmUuCisgKi8KK2ludCB4ZW5kZXZpY2Vtb2RlbF9zZXRfaXNhX2lycV9sZXZlbCgKKyAg ICB4ZW5kZXZpY2Vtb2RlbF9oYW5kbGUgKmRtb2QsIGRvbWlkX3QgZG9taWQsIHVpbnQ4X3QgaXJx LAorICAgIHVuc2lnbmVkIGludCBsZXZlbCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBtYXBz IGEgUENJIElOVHggbGluZSB0byBhIGFuIElSUSBsaW5lLgorICoKKyAqIEBwYXJtIGRtb2QgYSBo YW5kbGUgdG8gYW4gb3BlbiBkZXZpY2Vtb2RlbCBpbnRlcmZhY2UuCisgKiBAcGFybSBkb21pZCB0 aGUgZG9tYWluIGlkIHRvIGJlIHNlcnZpY2VkCisgKiBAcGFybSBsaW5lIHRoZSBJTlR4IGxpbmUg KDAgPT4gQSAuLiAzID0+IEIpCisgKiBAcGFybSBpcnEgdGhlIElSUSBudW1iZXIgKDAgLSAxNSkK KyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICovCitpbnQgeGVuZGV2 aWNlbW9kZWxfc2V0X3BjaV9saW5rX3JvdXRlKAorICAgIHhlbmRldmljZW1vZGVsX2hhbmRsZSAq ZG1vZCwgZG9taWRfdCBkb21pZCwgdWludDhfdCBsaW5rLCB1aW50OF90IGlycSk7CisKKy8qKgor ICogVGhpcyBmdW5jdGlvbiBpbmplY3RzIGFuIE1TSSBpbnRvIGEgZ3Vlc3QuCisgKgorICogQHBh cm0gZG1vZCBhIGhhbmRsZSB0byBhbiBvcGVuIGRldmljZW1vZGVsIGludGVyZmFjZS4KKyAqIEBw YXJtIGRvbWlkIHRoZSBkb21haW4gaWQgdG8gYmUgc2VydmljZWQKKyAqIEBwYXJtIG1zaV9hZGRy IHRoZSBNU0kgYWRkcmVzcyAoMHhmZWV4eHh4eCkKKyAqIEBwYXJtIG1zaV9kYXRhIHRoZSBNU0kg ZGF0YQorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCisqLworaW50IHhl bmRldmljZW1vZGVsX2luamVjdF9tc2koCisgICAgeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9k LCBkb21pZF90IGRvbWlkLCB1aW50NjRfdCBtc2lfYWRkciwKKyAgICB1aW50MzJfdCBtc2lfZGF0 YSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRyYWNraW5nIG9mIGNoYW5nZXMg aW4gdGhlIFZSQU0gYXJlYS4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGlzIGRvbmUgYXRvbWljYWxs eToKKyAqIC0gZ2V0IHRoZSBkaXJ0eSBiaXRtYXAgc2luY2UgdGhlIGxhc3QgY2FsbC4KKyAqIC0g c2V0IHVwIGRpcnR5IHRyYWNraW5nIGFyZWEgZm9yIHBlcmlvZCB1cCB0byB0aGUgbmV4dCBjYWxs LgorICogLSBjbGVhciB0aGUgZGlydHkgdHJhY2tpbmcgYXJlYS4KKyAqCisgKiBAcGFybSBkbW9k IGEgaGFuZGxlIHRvIGFuIG9wZW4gZGV2aWNlbW9kZWwgaW50ZXJmYWNlLgorICogQHBhcm0gZG9t aWQgdGhlIGRvbWFpbiBpZCB0byBiZSBzZXJ2aWNlZAorICogQHBhcm0gZmlyc3RfcGZuIHRoZSBz dGFydCBvZiB0aGUgYXJlYSB0byB0cmFjaworICogQHBhcm0gbnIgdGhlIG51bWJlciBvZiBwYWdl cyB0byB0cmFjaworICogQHBhcm0gZGlydHlfYml0bWFsIGEgcG9pbnRlciB0byB0aGUgYml0bWFw IHRvIGJlIHVwZGF0ZWQKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgor ICovCitpbnQgeGVuZGV2aWNlbW9kZWxfdHJhY2tfZGlydHlfdnJhbSgKKyAgICB4ZW5kZXZpY2Vt b2RlbF9oYW5kbGUgKmRtb2QsIGRvbWlkX3QgZG9taWQsIHVpbnQ2NF90IGZpcnN0X3BmbiwKKyAg ICB1aW50MzJfdCBuciwgdW5zaWduZWQgbG9uZyAqZGlydHlfYml0bWFwKTsKKworLyoqCisgKiBU aGlzIGZ1bmN0aW9uIG5vdGlmaWVzIHRoZSBoeXBlcnZpc29yIHRoYXQgYSBzZXQgb2YgZG9tYWlu IHBhZ2VzCisgKiBoYXZlIGJlZW4gbW9kaWZpZWQuCisgKgorICogQHBhcm0gZG1vZCBhIGhhbmRs ZSB0byBhbiBvcGVuIGRldmljZW1vZGVsIGludGVyZmFjZS4KKyAqIEBwYXJtIGRvbWlkIHRoZSBk b21haW4gaWQgdG8gYmUgc2VydmljZWQKKyAqIEBwYXJtIGZpcnN0X3BmbiB0aGUgc3RhcnQgb2Yg dGhlIG1vZGlmaWVkIGFyZWEKKyAqIEBwYXJtIG5yIHRoZSBudW1iZXIgb2YgcGFnZXMgbW9kaWZp ZWQKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICovCitpbnQgeGVu ZGV2aWNlbW9kZWxfbW9kaWZpZWRfbWVtb3J5KAorICAgIHhlbmRldmljZW1vZGVsX2hhbmRsZSAq ZG1vZCwgZG9taWRfdCBkb21pZCwgdWludDY0X3QgZmlyc3RfcGZuLAorICAgIHVpbnQzMl90IG5y KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIG5vdGlmaWVzIHRoZSBoeXBlcnZpc29yIHRoYXQg YSBzZXQgb2YgZG9tYWluIHBhZ2VzCisgKiBhcmUgdG8gYmUgdHJlYXRlZCBpbiBhIHNwZWNpZmlj IHdheS4gKFNlZSB0aGUgZGVmaW5pdGlvbiBvZgorICogaHZtbWVtX3R5cGVfdCkuCisgKgorICog QHBhcm0gZG1vZCBhIGhhbmRsZSB0byBhbiBvcGVuIGRldmljZW1vZGVsIGludGVyZmFjZS4KKyAq IEBwYXJtIGRvbWlkIHRoZSBkb21haW4gaWQgdG8gYmUgc2VydmljZWQKKyAqIEBwYXJtIG1lbV90 eXBlIGRldGVybWluZXMgaG93IHRoZSBzZXQgaXMgdG8gYmUgdHJlYXRlZAorICogQHBhcm0gZmly c3RfcGZuIHRoZSBzdGFydCBvZiB0aGUgc2V0CisgKiBAcGFybSBuciB0aGUgbnVtYmVyIG9mIHBh Z2VzIGluIHRoZSBzZXQKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgor ICovCitpbnQgeGVuZGV2aWNlbW9kZWxfc2V0X21lbV90eXBlKAorICAgIHhlbmRldmljZW1vZGVs X2hhbmRsZSAqZG1vZCwgZG9taWRfdCBkb21pZCwgaHZtbWVtX3R5cGVfdCBtZW1fdHlwZSwKKyAg ICB1aW50NjRfdCBmaXJzdF9wZm4sIHVpbnQzMl90IG5yKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0 aW9uIGluamVjdHMgYW4gZXZlbnQgaW50byBhIHZDUFUgdG8gdGFrZSBlZmZlY3QgdGhlIG5leHQK KyAqIHRpbWUgaXQgcmVzdW1lcy4KKyAqCisgKiBAcGFybSBkbW9kIGEgaGFuZGxlIHRvIGFuIG9w ZW4gZGV2aWNlbW9kZWwgaW50ZXJmYWNlLgorICogQHBhcm0gZG9taWQgdGhlIGRvbWFpbiBpZCB0 byBiZSBzZXJ2aWNlZAorICogQHBhcm0gdmNwdSB0aGUgdmNwdSBpZAorICogQHBhcm0gdmVjdG9y IHRoZSBpbnRlcnJ1cHQgdmVjdG9yCisgKiBAcGFybSB0eXBlIHRoZSBldmVudCB0eXBlIChzZWUg dGhlIGRlZmluaXRpb24gb2YgZW51bSB4ODZfZXZlbnRfdHlwZSkKKyAqIEBwYXJtIGVycm9yX2Nv ZGUgdGhlIGVycm9yIGNvZGUgb3IgfjAgdG8gc2tpcAorICogQHBhcm0gaW5zbl9sZW4gdGhlIGlu c3RydWN0aW9uIGxlbmd0aAorICogQHBhcm0gY3IyIHRoZSB2YWx1ZSBvZiBDUjIgZm9yIHBhZ2Ug ZmF1bHRzCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KKyAqLworaW50 IHhlbmRldmljZW1vZGVsX2luamVjdF9ldmVudCgKKyAgICB4ZW5kZXZpY2Vtb2RlbF9oYW5kbGUg KmRtb2QsIGRvbWlkX3QgZG9taWQsIGludCB2Y3B1LCB1aW50OF90IHZlY3RvciwKKyAgICB1aW50 OF90IHR5cGUsIHVpbnQzMl90IGVycm9yX2NvZGUsIHVpbnQ4X3QgaW5zbl9sZW4sIHVpbnQ2NF90 IGNyMik7CisKKyNlbmRpZiAvKiBfX1hFTl9UT09MU19fICovCisKICNlbmRpZiAvKiBYRU5ERVZJ Q0VNT0RFTF9IICovCiAKIC8qCmRpZmYgLS1naXQgYS90b29scy9saWJzL2RldmljZW1vZGVsL2xp YnhlbmRldmljZW1vZGVsLm1hcCBiL3Rvb2xzL2xpYnMvZGV2aWNlbW9kZWwvbGlieGVuZGV2aWNl bW9kZWwubWFwCmluZGV4IDk4MGM0MjkuLmFiYzZkMDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnMv ZGV2aWNlbW9kZWwvbGlieGVuZGV2aWNlbW9kZWwubWFwCisrKyBiL3Rvb2xzL2xpYnMvZGV2aWNl bW9kZWwvbGlieGVuZGV2aWNlbW9kZWwubWFwCkBAIC0xLDYgKzEsMjIgQEAKIFZFUlNfMS4wIHsK IAlnbG9iYWw6CiAJCXhlbmRldmljZW1vZGVsX29wZW47CisJCXhlbmRldmljZW1vZGVsX2NyZWF0 ZV9pb3JlcV9zZXJ2ZXI7CisJCXhlbmRldmljZW1vZGVsX2dldF9pb3JlcV9zZXJ2ZXJfaW5mbzsK KwkJeGVuZGV2aWNlbW9kZWxfbWFwX2lvX3JhbmdlX3RvX2lvcmVxX3NlcnZlcjsKKwkJeGVuZGV2 aWNlbW9kZWxfdW5tYXBfaW9fcmFuZ2VfZnJvbV9pb3JlcV9zZXJ2ZXI7CisJCXhlbmRldmljZW1v ZGVsX21hcF9wY2lkZXZfdG9faW9yZXFfc2VydmVyOworCQl4ZW5kZXZpY2Vtb2RlbF91bm1hcF9w Y2lkZXZfZnJvbV9pb3JlcV9zZXJ2ZXI7CisJCXhlbmRldmljZW1vZGVsX2Rlc3Ryb3lfaW9yZXFf c2VydmVyOworCQl4ZW5kZXZpY2Vtb2RlbF9zZXRfaW9yZXFfc2VydmVyX3N0YXRlOworCQl4ZW5k ZXZpY2Vtb2RlbF9zZXRfcGNpX2ludHhfbGV2ZWw7CisJCXhlbmRldmljZW1vZGVsX3NldF9pc2Ff aXJxX2xldmVsOworCQl4ZW5kZXZpY2Vtb2RlbF9zZXRfcGNpX2xpbmtfcm91dGU7CisJCXhlbmRl dmljZW1vZGVsX2luamVjdF9tc2k7CisJCXhlbmRldmljZW1vZGVsX3RyYWNrX2RpcnR5X3ZyYW07 CisJCXhlbmRldmljZW1vZGVsX21vZGlmaWVkX21lbW9yeTsKKwkJeGVuZGV2aWNlbW9kZWxfc2V0 X21lbV90eXBlOworCQl4ZW5kZXZpY2Vtb2RlbF9pbmplY3RfZXZlbnQ7CiAJCXhlbmRldmljZW1v ZGVsX2Nsb3NlOwogCWxvY2FsOiAqOyAvKiBEbyBub3QgZXhwb3NlIGFueXRoaW5nIGJ5IGRlZmF1 bHQgKi8KIH07CmRpZmYgLS1naXQgYS90b29scy9saWJzL2RldmljZW1vZGVsL3ByaXZhdGUuaCBi L3Rvb2xzL2xpYnMvZGV2aWNlbW9kZWwvcHJpdmF0ZS5oCmluZGV4IGNmMWU0YjAuLjdjN2FjZjIg MTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnMvZGV2aWNlbW9kZWwvcHJpdmF0ZS5oCisrKyBiL3Rvb2xz L2xpYnMvZGV2aWNlbW9kZWwvcHJpdmF0ZS5oCkBAIC0xLDE0ICsxLDMzIEBACiAjaWZuZGVmIFhF TkRFVklDRU1PREVMX1BSSVZBVEVfSAogI2RlZmluZSBYRU5ERVZJQ0VNT0RFTF9QUklWQVRFX0gK IAorI2RlZmluZSBfX1hFTl9UT09MU19fIDEKKwogI2luY2x1ZGUgPHhlbnRvb2xsb2cuaD4KICNp bmNsdWRlIDx4ZW5kZXZpY2Vtb2RlbC5oPgorI2luY2x1ZGUgPHhlbmNhbGwuaD4KIAogc3RydWN0 IHhlbmRldmljZW1vZGVsX2hhbmRsZSB7CiAgICAgeGVudG9vbGxvZ19sb2dnZXIgKmxvZ2dlciwg KmxvZ2dlcl90b2ZyZWU7CiAgICAgdW5zaWduZWQgaW50IGZsYWdzOworICAgIHhlbmNhbGxfaGFu ZGxlICp4Y2FsbDsKK307CisKK3N0cnVjdCB4ZW5kZXZpY2Vtb2RlbF9idWYgeworICAgIHZvaWQg KnB0cjsKKyAgICBzaXplX3Qgc2l6ZTsKIH07CiAKK2ludCB4ZW5kZXZpY2Vtb2RlbF94Y2FsbCh4 ZW5kZXZpY2Vtb2RlbF9oYW5kbGUgKmRtb2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgZG9t aWRfdCBkb21pZCwgdW5zaWduZWQgaW50IG5yX2J1ZnMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHhlbmRldmljZW1vZGVsX2J1ZiBidWZzW10pOworCitpbnQgb3NkZXBfeGVuZGV2 aWNlbW9kZWxfb3Blbih4ZW5kZXZpY2Vtb2RlbF9oYW5kbGUgKmRtb2QpOworaW50IG9zZGVwX3hl bmRldmljZW1vZGVsX2Nsb3NlKHhlbmRldmljZW1vZGVsX2hhbmRsZSAqZG1vZCk7CitpbnQgb3Nk ZXBfeGVuZGV2aWNlbW9kZWxfb3AoeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRvbWlkX3QgZG9taWQsIHVuc2lnbmVkIGludCBucl9idWZz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ZW5kZXZpY2Vtb2RlbF9idWYg YnVmc1tdKTsKKwogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS90b29scy9saWJ4Yy9NYWtlZmls ZSBiL3Rvb2xzL2xpYnhjL01ha2VmaWxlCmluZGV4IGFmNWU0OWMuLmRhNjg5YzQgMTAwNjQ0Ci0t LSBhL3Rvb2xzL2xpYnhjL01ha2VmaWxlCisrKyBiL3Rvb2xzL2xpYnhjL01ha2VmaWxlCkBAIC01 MCw2ICs1MCw3IEBAIENUUkxfU1JDUy0kKENPTkZJR19OZXRCU0RSdW1wKSArPSB4Y19uZXRic2Qu YwogQ1RSTF9TUkNTLSQoQ09ORklHX01pbmlPUykgKz0geGNfbWluaW9zLmMKIENUUkxfU1JDUy15 ICAgICAgICs9IHhjX2V2dGNobl9jb21wYXQuYwogQ1RSTF9TUkNTLXkgICAgICAgKz0geGNfZ250 dGFiX2NvbXBhdC5jCitDVFJMX1NSQ1MteSAgICAgICArPSB4Y19kZXZpY2Vtb2RlbF9jb21wYXQu YwogCiBHVUVTVF9TUkNTLXkgOj0KIEdVRVNUX1NSQ1MteSArPSB4Z19wcml2YXRlLmMgeGNfc3Vz cGVuZC5jCmRpZmYgLS1naXQgYS90b29scy9saWJ4Yy9pbmNsdWRlL3hlbmN0cmwuaCBiL3Rvb2xz L2xpYnhjL2luY2x1ZGUveGVuY3RybC5oCmluZGV4IDkyN2UzNzMuLmE0ODk4MWEgMTAwNjQ0Ci0t LSBhL3Rvb2xzL2xpYnhjL2luY2x1ZGUveGVuY3RybC5oCisrKyBiL3Rvb2xzL2xpYnhjL2luY2x1 ZGUveGVuY3RybC5oCkBAIC0xNTk0LDU5ICsxNTk0LDYgQEAgaW50IHhjX3BoeXNkZXZfdW5tYXBf cGlycSh4Y19pbnRlcmZhY2UgKnhjaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRv bWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGlycSk7CiAKLWludCB4Y19odm1f c2V0X3BjaV9pbnR4X2xldmVsKAotICAgIHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbSwK LSAgICB1aW50MTZfdCBkb21haW4sIHVpbnQ4X3QgYnVzLCB1aW50OF90IGRldmljZSwgdWludDhf dCBpbnR4LAotICAgIHVuc2lnbmVkIGludCBsZXZlbCk7Ci1pbnQgeGNfaHZtX3NldF9pc2FfaXJx X2xldmVsKAotICAgIHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbSwKLSAgICB1aW50OF90 IGlzYV9pcnEsCi0gICAgdW5zaWduZWQgaW50IGxldmVsKTsKLQotaW50IHhjX2h2bV9zZXRfcGNp X2xpbmtfcm91dGUoCi0gICAgeGNfaW50ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9tLCB1aW50OF90 IGxpbmssIHVpbnQ4X3QgaXNhX2lycSk7Ci0KLWludCB4Y19odm1faW5qZWN0X21zaSgKLSAgICB4 Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb20sIHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IGRh dGEpOwotCi0vKgotICogVHJhY2sgZGlydHkgYml0IGNoYW5nZXMgaW4gdGhlIFZSQU0gYXJlYQot ICoKLSAqIEFsbCBvZiB0aGlzIGlzIGRvbmUgYXRvbWljYWxseToKLSAqIC0gZ2V0IHRoZSBkaXJ0 eSBiaXRtYXAgc2luY2UgdGhlIGxhc3QgY2FsbAotICogLSBzZXQgdXAgZGlydHkgdHJhY2tpbmcg YXJlYSBmb3IgcGVyaW9kIHVwIHRvIHRoZSBuZXh0IGNhbGwKLSAqIC0gY2xlYXIgdGhlIGRpcnR5 IHRyYWNraW5nIGFyZWEuCi0gKgotICogUmV0dXJucyAtRU5PREFUQSBhbmQgZG9lcyBub3QgZmls bCBiaXRtYXAgaWYgdGhlIGFyZWEgaGFzIGNoYW5nZWQgc2luY2UgdGhlCi0gKiBsYXN0IGNhbGwu Ci0gKi8KLWludCB4Y19odm1fdHJhY2tfZGlydHlfdnJhbSgKLSAgICB4Y19pbnRlcmZhY2UgKnhj aCwgZG9taWRfdCBkb20sCi0gICAgdWludDY0X3QgZmlyc3RfcGZuLCB1aW50MzJfdCBuciwKLSAg ICB1bnNpZ25lZCBsb25nICpiaXRtYXApOwotCi0vKgotICogTm90aWZ5IHRoYXQgc29tZSBwYWdl cyBnb3QgbW9kaWZpZWQgYnkgdGhlIERldmljZSBNb2RlbAotICovCi1pbnQgeGNfaHZtX21vZGlm aWVkX21lbW9yeSgKLSAgICB4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb20sIHVpbnQ2NF90 IGZpcnN0X3BmbiwgdWludDMyX3QgbnIpOwotCi0vKgotICogU2V0IGEgcmFuZ2Ugb2YgbWVtb3J5 IHRvIGEgc3BlY2lmaWMgdHlwZS4KLSAqIEFsbG93ZWQgdHlwZXMgYXJlIEhWTU1FTV9yYW1fcncs IEhWTU1FTV9yYW1fcm8sIEhWTU1FTV9tbWlvX2RtCi0gKi8KLWludCB4Y19odm1fc2V0X21lbV90 eXBlKAotICAgIHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbSwgaHZtbWVtX3R5cGVfdCBt ZW10eXBlLCB1aW50NjRfdCBmaXJzdF9wZm4sIHVpbnQzMl90IG5yKTsKLQotLyoKLSAqIEluamVj dHMgYSBoYXJkd2FyZS9zb2Z0d2FyZSBDUFUgdHJhcCwgdG8gdGFrZSBlZmZlY3QgdGhlIG5leHQg dGltZSB0aGUgSFZNIAotICogcmVzdW1lcy4gCi0gKi8KLWludCB4Y19odm1faW5qZWN0X3RyYXAo Ci0gICAgeGNfaW50ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9tLCBpbnQgdmNwdSwgdWludDhfdCB2 ZWN0b3IsCi0gICAgdWludDhfdCB0eXBlLCB1aW50MzJfdCBlcnJvcl9jb2RlLCB1aW50OF90IGlu c25fbGVuLAotICAgIHVpbnQ2NF90IGNyMik7Ci0KIC8qCiAgKiAgTE9HR0lORyBBTkQgRVJST1Ig UkVQT1JUSU5HCiAgKi8KQEAgLTE2OTEsMTUwICsxNjM4LDYgQEAgaW50IHhjX2h2bV9wYXJhbV9n ZXQoeGNfaW50ZXJmYWNlICpoYW5kbGUsIGRvbWlkX3QgZG9tLCB1aW50MzJfdCBwYXJhbSwgdWlu dDY0X3QKIGludCB4Y19zZXRfaHZtX3BhcmFtKHhjX2ludGVyZmFjZSAqaGFuZGxlLCBkb21pZF90 IGRvbSwgaW50IHBhcmFtLCB1bnNpZ25lZCBsb25nIHZhbHVlKTsKIGludCB4Y19nZXRfaHZtX3Bh cmFtKHhjX2ludGVyZmFjZSAqaGFuZGxlLCBkb21pZF90IGRvbSwgaW50IHBhcmFtLCB1bnNpZ25l ZCBsb25nICp2YWx1ZSk7CiAKLS8qCi0gKiBJT1JFUSBTZXJ2ZXIgQVBJLiAoU2VlIHNlY3Rpb24g b24gSU9SRVEgU2VydmVycyBpbiBwdWJsaWMvaHZtX29wLmgpLgotICovCi0KLS8qKgotICogVGhp cyBmdW5jdGlvbiBpbnN0YW50aWF0ZXMgYW4gSU9SRVEgU2VydmVyLgotICoKLSAqIEBwYXJtIHhj aCBhIGhhbmRsZSB0byBhbiBvcGVuIGh5cGVydmlzb3IgaW50ZXJmYWNlLgotICogQHBhcm0gZG9t aWQgdGhlIGRvbWFpbiBpZCB0byBiZSBzZXJ2aWNlZAotICogQHBhcm0gaGFuZGxlX2J1ZmlvcmVx IGhvdyBzaG91bGQgdGhlIElPUkVRIFNlcnZlciBoYW5kbGUgYnVmZmVyZWQgcmVxdWVzdHMKLSAq ICAgICAgICAgICAgICAgICAgICAgICAoSFZNX0lPUkVRU1JWX0JVRklPUkVRXyopPwotICogQHBh cm0gaWQgcG9pbnRlciB0byBhbiBpb3NlcnZpZF90IHRvIHJlY2VpdmUgdGhlIElPUkVRIFNlcnZl ciBpZC4KLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgotICovCi1pbnQg eGNfaHZtX2NyZWF0ZV9pb3JlcV9zZXJ2ZXIoeGNfaW50ZXJmYWNlICp4Y2gsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZG9taWRfdCBkb21pZCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgaGFuZGxlX2J1ZmlvcmVxLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlvc2VydmlkX3QgKmlkKTsKLQotLyoqCi0gKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZl cyB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGFsbG93IGFuCi0gKiBlbXVsYXRvciB0byB1 c2UgYW4gSU9SRVEgU2VydmVyLgotICoKLSAqIEBwYXJtIHhjaCBhIGhhbmRsZSB0byBhbiBvcGVu IGh5cGVydmlzb3IgaW50ZXJmYWNlLgotICogQHBhcm0gZG9taWQgdGhlIGRvbWFpbiBpZCB0byBi ZSBzZXJ2aWNlZAotICogQHBhcm0gaWQgdGhlIElPUkVRIFNlcnZlciBpZC4KLSAqIEBwYXJtIGlv cmVxX3BmbiBwb2ludGVyIHRvIGEgeGVuX3Bmbl90IHRvIHJlY2VpdmUgdGhlIHN5bmNocm9ub3Vz IGlvcmVxIGdtZm4KLSAqIEBwYXJtIGJ1ZmlvcmVxX3BmbiBwb2ludGVyIHRvIGEgeGVuX3Bmbl90 IHRvIHJlY2VpdmUgdGhlIGJ1ZmZlcmVkIGlvcmVxIGdtZm4KLSAqIEBwYXJtIGJ1ZmlvcmVxX3Bv cnQgcG9pbnRlciB0byBhIGV2dGNobl9wb3J0X3QgdG8gcmVjZWl2ZSB0aGUgYnVmZmVyZWQgaW9y ZXEgZXZlbnQgY2hhbm5lbAotICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUu Ci0gKi8KLWludCB4Y19odm1fZ2V0X2lvcmVxX3NlcnZlcl9pbmZvKHhjX2ludGVyZmFjZSAqeGNo LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9taWRfdCBkb21pZCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc2VydmlkX3QgaWQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB4ZW5fcGZuX3QgKmlvcmVxX3BmbiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHhlbl9wZm5fdCAqYnVmaW9yZXFfcGZuLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZXZ0Y2huX3BvcnRfdCAqYnVmaW9yZXFfcG9ydCk7Ci0KLS8q KgotICogVGhpcyBmdW5jdGlvbiBzZXRzIElPUkVRIFNlcnZlciBzdGF0ZS4gQW4gSU9SRVEgU2Vy dmVyCi0gKiB3aWxsIG5vdCBiZSBwYXNzZWQgZW11bGF0aW9uIHJlcXVlc3RzIHVudGlsIGl0IGlz IGluCi0gKiB0aGUgZW5hYmxlZCBzdGF0ZS4KLSAqIE5vdGUgdGhhdCB0aGUgY29udGVudHMgb2Yg dGhlIGlvcmVxX3BmbiBhbmQgYnVmaW9yZXFfcGZuIGFyZQotICogbm90IG1lYW5pbmdmdWwgdW50 aWwgdGhlIElPUkVRIFNlcnZlciBpcyBpbiB0aGUgZW5hYmxlZCBzdGF0ZS4KLSAqCi0gKiBAcGFy bSB4Y2ggYSBoYW5kbGUgdG8gYW4gb3BlbiBoeXBlcnZpc29yIGludGVyZmFjZS4KLSAqIEBwYXJt IGRvbWlkIHRoZSBkb21haW4gaWQgdG8gYmUgc2VydmljZWQKLSAqIEBwYXJtIGlkIHRoZSBJT1JF USBTZXJ2ZXIgaWQuCi0gKiBAcGFybSBlbmFibGVkIHRoZSBzdGF0ZS4KLSAqIEByZXR1cm4gMCBv biBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgotICovCi1pbnQgeGNfaHZtX3NldF9pb3JlcV9zZXJ2 ZXJfc3RhdGUoeGNfaW50ZXJmYWNlICp4Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZG9taWRfdCBkb21pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp b3NlcnZpZF90IGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbmFi bGVkKTsKLQotLyoqCi0gKiBUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhIHJhbmdlIG9mIG1lbW9y eSBvciBJL08gcG9ydHMgZm9yIGVtdWxhdGlvbi4KLSAqCi0gKiBAcGFybSB4Y2ggYSBoYW5kbGUg dG8gYW4gb3BlbiBoeXBlcnZpc29yIGludGVyZmFjZS4KLSAqIEBwYXJtIGRvbWlkIHRoZSBkb21h aW4gaWQgdG8gYmUgc2VydmljZWQKLSAqIEBwYXJtIGlkIHRoZSBJT1JFUSBTZXJ2ZXIgaWQuCi0g KiBAcGFybSBpc19tbWlvIGlzIHRoaXMgYSByYW5nZSBvZiBwb3J0cyBvciBtZW1vcnkKLSAqIEBw YXJtIHN0YXJ0IHN0YXJ0IG9mIHJhbmdlCi0gKiBAcGFybSBlbmQgZW5kIG9mIHJhbmdlIChpbmNs dXNpdmUpLgotICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCi0gKi8KLWlu dCB4Y19odm1fbWFwX2lvX3JhbmdlX3RvX2lvcmVxX3NlcnZlcih4Y19pbnRlcmZhY2UgKnhjaCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21pZF90IGRvbWlkLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc2VydmlkX3QgaWQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlzX21taW8sCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qgc3RhcnQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgZW5kKTsKLQotLyoq Ci0gKiBUaGlzIGZ1bmN0aW9uIGRlcmVnaXN0ZXJzIGEgcmFuZ2Ugb2YgbWVtb3J5IG9yIEkvTyBw b3J0cyBmb3IgZW11bGF0aW9uLgotICoKLSAqIEBwYXJtIHhjaCBhIGhhbmRsZSB0byBhbiBvcGVu IGh5cGVydmlzb3IgaW50ZXJmYWNlLgotICogQHBhcm0gZG9taWQgdGhlIGRvbWFpbiBpZCB0byBi ZSBzZXJ2aWNlZAotICogQHBhcm0gaWQgdGhlIElPUkVRIFNlcnZlciBpZC4KLSAqIEBwYXJtIGlz X21taW8gaXMgdGhpcyBhIHJhbmdlIG9mIHBvcnRzIG9yIG1lbW9yeQotICogQHBhcm0gc3RhcnQg c3RhcnQgb2YgcmFuZ2UKLSAqIEBwYXJtIGVuZCBlbmQgb2YgcmFuZ2UgKGluY2x1c2l2ZSkuCi0g KiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KLSAqLwotaW50IHhjX2h2bV91 bm1hcF9pb19yYW5nZV9mcm9tX2lvcmVxX3NlcnZlcih4Y19pbnRlcmZhY2UgKnhjaCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9taWRfdCBkb21pZCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zZXJ2aWRfdCBpZCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlzX21taW8s Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHN0 YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRf dCBlbmQpOwotCi0vKioKLSAqIFRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGEgUENJIGRldmljZSBm b3IgY29uZmlnIHNwYWNlIGVtdWxhdGlvbi4KLSAqCi0gKiBAcGFybSB4Y2ggYSBoYW5kbGUgdG8g YW4gb3BlbiBoeXBlcnZpc29yIGludGVyZmFjZS4KLSAqIEBwYXJtIGRvbWlkIHRoZSBkb21haW4g aWQgdG8gYmUgc2VydmljZWQKLSAqIEBwYXJtIGlkIHRoZSBJT1JFUSBTZXJ2ZXIgaWQuCi0gKiBA cGFybSBzZWdtZW50IHRoZSBQQ0kgc2VnbWVudCBvZiB0aGUgZGV2aWNlCi0gKiBAcGFybSBidXMg dGhlIFBDSSBidXMgb2YgdGhlIGRldmljZQotICogQHBhcm0gZGV2aWNlIHRoZSAnc2xvdCcgbnVt YmVyIG9mIHRoZSBkZXZpY2UKLSAqIEBwYXJtIGZ1bmN0aW9uIHRoZSBmdW5jdGlvbiBudW1iZXIg b2YgdGhlIGRldmljZQotICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCi0g Ki8KLWludCB4Y19odm1fbWFwX3BjaWRldl90b19pb3JlcV9zZXJ2ZXIoeGNfaW50ZXJmYWNlICp4 Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWlkX3QgZG9taWQs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc2VydmlkX3QgaWQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNlZ21lbnQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYnVzLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGRldmljZSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBmdW5jdGlvbik7Ci0KLS8qKgot ICogVGhpcyBmdW5jdGlvbiBkZXJlZ2lzdGVycyBhIFBDSSBkZXZpY2UgZm9yIGNvbmZpZyBzcGFj ZSBlbXVsYXRpb24uCi0gKgotICogQHBhcm0geGNoIGEgaGFuZGxlIHRvIGFuIG9wZW4gaHlwZXJ2 aXNvciBpbnRlcmZhY2UuCi0gKiBAcGFybSBkb21pZCB0aGUgZG9tYWluIGlkIHRvIGJlIHNlcnZp Y2VkCi0gKiBAcGFybSBpZCB0aGUgSU9SRVEgU2VydmVyIGlkLgotICogQHBhcm0gc2VnbWVudCB0 aGUgUENJIHNlZ21lbnQgb2YgdGhlIGRldmljZQotICogQHBhcm0gYnVzIHRoZSBQQ0kgYnVzIG9m IHRoZSBkZXZpY2UKLSAqIEBwYXJtIGRldmljZSB0aGUgJ3Nsb3QnIG51bWJlciBvZiB0aGUgZGV2 aWNlCi0gKiBAcGFybSBmdW5jdGlvbiB0aGUgZnVuY3Rpb24gbnVtYmVyIG9mIHRoZSBkZXZpY2UK LSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgotICovCi1pbnQgeGNfaHZt X3VubWFwX3BjaWRldl9mcm9tX2lvcmVxX3NlcnZlcih4Y19pbnRlcmZhY2UgKnhjaCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWlkX3QgZG9taWQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NlcnZpZF90IGlkLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2VnbWVudCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYnVzLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBkZXZpY2Us Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGZ1bmN0 aW9uKTsKLQotLyoqCi0gKiBUaGlzIGZ1bmN0aW9uIGRlc3Ryb3lzIGFuIElPUkVRIFNlcnZlci4K LSAqCi0gKiBAcGFybSB4Y2ggYSBoYW5kbGUgdG8gYW4gb3BlbiBoeXBlcnZpc29yIGludGVyZmFj ZS4KLSAqIEBwYXJtIGRvbWlkIHRoZSBkb21haW4gaWQgdG8gYmUgc2VydmljZWQKLSAqIEBwYXJt IGlkIHRoZSBJT1JFUSBTZXJ2ZXIgaWQuCi0gKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24g ZmFpbHVyZS4KLSAqLwotaW50IHhjX2h2bV9kZXN0cm95X2lvcmVxX3NlcnZlcih4Y19pbnRlcmZh Y2UgKnhjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9taWRfdCBkb21pZCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zZXJ2aWRfdCBpZCk7Ci0KIC8qIEhW TSBndWVzdCBwYXNzLXRocm91Z2ggKi8KIGludCB4Y19hc3NpZ25fZGV2aWNlKHhjX2ludGVyZmFj ZSAqeGNoLAogICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZG9taWQsCmRpZmYgLS1naXQg YS90b29scy9saWJ4Yy9pbmNsdWRlL3hlbmN0cmxfY29tcGF0LmggYi90b29scy9saWJ4Yy9pbmNs dWRlL3hlbmN0cmxfY29tcGF0LmgKaW5kZXggOTNjY2FkYi4uMDQwZTdiMiAxMDA2NDQKLS0tIGEv dG9vbHMvbGlieGMvaW5jbHVkZS94ZW5jdHJsX2NvbXBhdC5oCisrKyBiL3Rvb2xzL2xpYnhjL2lu Y2x1ZGUveGVuY3RybF9jb21wYXQuaApAQCAtMTIwLDYgKzEyMCw1MyBAQCBpbnQgeGNfZ250c2hy X211bm1hcCh4Y19nbnRzaHIgKnhjZywgdm9pZCAqc3RhcnRfYWRkcmVzcywgdWludDMyX3QgY291 bnQpOwogCiAjZW5kaWYgLyogWENfV0FOVF9DT01QQVRfR05UVEFCX0FQSSAqLwogCisjaWZkZWYg WENfV0FOVF9DT01QQVRfREVWSUNFTU9ERUxfQVBJCisKK2ludCB4Y19odm1fY3JlYXRlX2lvcmVx X3NlcnZlcigKKyAgICB4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb21pZCwgaW50IGhhbmRs ZV9idWZpb3JlcSwKKyAgICBpb3NlcnZpZF90ICppZCk7CitpbnQgeGNfaHZtX2dldF9pb3JlcV9z ZXJ2ZXJfaW5mbygKKyAgICB4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb21pZCwgaW9zZXJ2 aWRfdCBpZCwgeGVuX3Bmbl90ICppb3JlcV9wZm4sCisgICAgeGVuX3Bmbl90ICpidWZpb3JlcV9w Zm4sIGV2dGNobl9wb3J0X3QgKmJ1ZmlvcmVxX3BvcnQpOworaW50IHhjX2h2bV9tYXBfaW9fcmFu Z2VfdG9faW9yZXFfc2VydmVyKAorICAgIHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbWlk LCBpb3NlcnZpZF90IGlkLCBpbnQgaXNfbW1pbywKKyAgICB1aW50NjRfdCBzdGFydCwgdWludDY0 X3QgZW5kKTsKK2ludCB4Y19odm1fdW5tYXBfaW9fcmFuZ2VfZnJvbV9pb3JlcV9zZXJ2ZXIoCisg ICAgeGNfaW50ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9taWQsIGlvc2VydmlkX3QgaWQsIGludCBp c19tbWlvLAorICAgIHVpbnQ2NF90IHN0YXJ0LCB1aW50NjRfdCBlbmQpOworaW50IHhjX2h2bV9t YXBfcGNpZGV2X3RvX2lvcmVxX3NlcnZlcigKKyAgICB4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRf dCBkb21pZCwgaW9zZXJ2aWRfdCBpZCwgdWludDE2X3Qgc2VnbWVudCwKKyAgICB1aW50OF90IGJ1 cywgdWludDhfdCBkZXZpY2UsIHVpbnQ4X3QgZnVuY3Rpb24pOworaW50IHhjX2h2bV91bm1hcF9w Y2lkZXZfZnJvbV9pb3JlcV9zZXJ2ZXIoCisgICAgeGNfaW50ZXJmYWNlICp4Y2gsIGRvbWlkX3Qg ZG9taWQsIGlvc2VydmlkX3QgaWQsIHVpbnQxNl90IHNlZ21lbnQsCisgICAgdWludDhfdCBidXMs IHVpbnQ4X3QgZGV2aWNlLCB1aW50OF90IGZ1bmN0aW9uKTsKK2ludCB4Y19odm1fZGVzdHJveV9p b3JlcV9zZXJ2ZXIoCisgICAgeGNfaW50ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9taWQsIGlvc2Vy dmlkX3QgaWQpOworaW50IHhjX2h2bV9zZXRfaW9yZXFfc2VydmVyX3N0YXRlKAorICAgIHhjX2lu dGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbWlkLCBpb3NlcnZpZF90IGlkLCBpbnQgZW5hYmxlZCk7 CitpbnQgeGNfaHZtX3NldF9wY2lfaW50eF9sZXZlbCgKKyAgICB4Y19pbnRlcmZhY2UgKnhjaCwg ZG9taWRfdCBkb21pZCwgdWludDE2X3Qgc2VnbWVudCwgdWludDhfdCBidXMsCisgICAgdWludDhf dCBkZXZpY2UsIHVpbnQ4X3QgaW50eCwgdW5zaWduZWQgaW50IGxldmVsKTsKK2ludCB4Y19odm1f c2V0X2lzYV9pcnFfbGV2ZWwoCisgICAgeGNfaW50ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9taWQs IHVpbnQ4X3QgaXJxLCB1bnNpZ25lZCBpbnQgbGV2ZWwpOworaW50IHhjX2h2bV9zZXRfcGNpX2xp bmtfcm91dGUoCisgICAgeGNfaW50ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9taWQsIHVpbnQ4X3Qg bGluaywgdWludDhfdCBpcnEpOworaW50IHhjX2h2bV9pbmplY3RfbXNpKAorICAgIHhjX2ludGVy ZmFjZSAqeGNoLCBkb21pZF90IGRvbWlkLCB1aW50NjRfdCBtc2lfYWRkciwgdWludDMyX3QgbXNp X2RhdGEpOworaW50IHhjX2h2bV90cmFja19kaXJ0eV92cmFtKAorICAgIHhjX2ludGVyZmFjZSAq eGNoLCBkb21pZF90IGRvbWlkLCB1aW50NjRfdCBmaXJzdF9wZm4sIHVpbnQzMl90IG5yLAorICAg IHVuc2lnbmVkIGxvbmcgKmRpcnR5X2JpdG1hcCk7CitpbnQgeGNfaHZtX21vZGlmaWVkX21lbW9y eSgKKyAgICB4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb21pZCwgdWludDY0X3QgZmlyc3Rf cGZuLCB1aW50MzJfdCBucik7CitpbnQgeGNfaHZtX3NldF9tZW1fdHlwZSgKKyAgICB4Y19pbnRl cmZhY2UgKnhjaCwgZG9taWRfdCBkb21pZCwgaHZtbWVtX3R5cGVfdCB0eXBlLAorICAgIHVpbnQ2 NF90IGZpcnN0X3BmbiwgdWludDMyX3QgbnIpOworaW50IHhjX2h2bV9pbmplY3RfdHJhcCgKKyAg ICB4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb21pZCwgaW50IHZjcHUsIHVpbnQ4X3QgdmVj dG9yLAorICAgIHVpbnQ4X3QgdHlwZSwgdWludDMyX3QgZXJyb3JfY29kZSwgdWludDhfdCBpbnNu X2xlbiwgdWludDY0X3QgY3IyKTsKKworI2VuZGlmIC8qIFhDX1dBTlRfQ09NUEFUX0RFVklDRU1P REVMX0FQSSAqLworCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhjL3hjX2Rl dmljZW1vZGVsX2NvbXBhdC5jIGIvdG9vbHMvbGlieGMveGNfZGV2aWNlbW9kZWxfY29tcGF0LmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRlZGVlYQotLS0gL2Rldi9udWxs CisrKyBiL3Rvb2xzL2xpYnhjL3hjX2RldmljZW1vZGVsX2NvbXBhdC5jCkBAIC0wLDAgKzEsMTM5 IEBACisvKgorICogQ29tcGF0IHNoaW1zIGZvciB1c2Ugb2YgM3JkIHBhcnR5IGNvbnN1bWVycyBv ZiBsaWJ4ZW5jdHJsIGRldmljZSBtb2RlbAorICogZnVuY3Rpb25hbGl0eSB3aGljaCBoYXMgYmVl biBzcGxpdCBpbnRvIHNlcGFyYXRlIGxpYnJhcmllcy4KKyAqLworCisjZGVmaW5lIFhDX1dBTlRf Q09NUEFUX0RFVklDRU1PREVMX0FQSQorI2luY2x1ZGUgInhjX3ByaXZhdGUuaCIKKworaW50IHhj X2h2bV9jcmVhdGVfaW9yZXFfc2VydmVyKAorICAgIHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90 IGRvbWlkLCBpbnQgaGFuZGxlX2J1ZmlvcmVxLAorICAgIGlvc2VydmlkX3QgKmlkKQoreworICAg IHJldHVybiB4ZW5kZXZpY2Vtb2RlbF9jcmVhdGVfaW9yZXFfc2VydmVyKHhjaC0+ZG1vZCwgZG9t aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxl X2J1ZmlvcmVxLCBpZCk7Cit9CisKK2ludCB4Y19odm1fZ2V0X2lvcmVxX3NlcnZlcl9pbmZvKAor ICAgIHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbWlkLCBpb3NlcnZpZF90IGlkLCB4ZW5f cGZuX3QgKmlvcmVxX3BmbiwKKyAgICB4ZW5fcGZuX3QgKmJ1ZmlvcmVxX3BmbiwgZXZ0Y2huX3Bv cnRfdCAqYnVmaW9yZXFfcG9ydCkKK3sKKyAgICByZXR1cm4geGVuZGV2aWNlbW9kZWxfZ2V0X2lv cmVxX3NlcnZlcl9pbmZvKHhjaC0+ZG1vZCwgZG9taWQsIGlkLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9yZXFfcGZuLCBidWZpb3JlcV9wZm4sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZpb3JlcV9w b3J0KTsKK30KKworaW50IHhjX2h2bV9tYXBfaW9fcmFuZ2VfdG9faW9yZXFfc2VydmVyKAorICAg IHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbWlkLCBpb3NlcnZpZF90IGlkLCBpbnQgaXNf bW1pbywKKyAgICB1aW50NjRfdCBzdGFydCwgdWludDY0X3QgZW5kKQoreworICAgIHJldHVybiB4 ZW5kZXZpY2Vtb2RlbF9tYXBfaW9fcmFuZ2VfdG9faW9yZXFfc2VydmVyKHhjaC0+ZG1vZCwgZG9t aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWQsIGlzX21taW8sIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVuZCk7Cit9CisKK2ludCB4Y19odm1fdW5tYXBfaW9fcmFu Z2VfZnJvbV9pb3JlcV9zZXJ2ZXIoCisgICAgeGNfaW50ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9t aWQsIGlvc2VydmlkX3QgaWQsIGludCBpc19tbWlvLAorICAgIHVpbnQ2NF90IHN0YXJ0LCB1aW50 NjRfdCBlbmQpCit7CisgICAgcmV0dXJuIHhlbmRldmljZW1vZGVsX3VubWFwX2lvX3JhbmdlX2Zy b21faW9yZXFfc2VydmVyKHhjaC0+ZG1vZCwgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkLCBpc19tbWlvLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFy dCwgZW5kKTsKK30KKworaW50IHhjX2h2bV9tYXBfcGNpZGV2X3RvX2lvcmVxX3NlcnZlcigKKyAg ICB4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb21pZCwgaW9zZXJ2aWRfdCBpZCwgdWludDE2 X3Qgc2VnbWVudCwKKyAgICB1aW50OF90IGJ1cywgdWludDhfdCBkZXZpY2UsIHVpbnQ4X3QgZnVu Y3Rpb24pCit7CisgICAgcmV0dXJuIHhlbmRldmljZW1vZGVsX21hcF9wY2lkZXZfdG9faW9yZXFf c2VydmVyKHhjaC0+ZG1vZCwgZG9taWQsIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50LCBidXMsIGRldmljZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24pOwor fQorCitpbnQgeGNfaHZtX3VubWFwX3BjaWRldl9mcm9tX2lvcmVxX3NlcnZlcigKKyAgICB4Y19p bnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb21pZCwgaW9zZXJ2aWRfdCBpZCwgdWludDE2X3Qgc2Vn bWVudCwKKyAgICB1aW50OF90IGJ1cywgdWludDhfdCBkZXZpY2UsIHVpbnQ4X3QgZnVuY3Rpb24p Cit7CisgICAgcmV0dXJuIHhlbmRldmljZW1vZGVsX3VubWFwX3BjaWRldl9mcm9tX2lvcmVxX3Nl cnZlcih4Y2gtPmRtb2QsIGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWQsIHNlZ21lbnQsIGJ1cywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSwgZnVuY3Rp b24pOworfQorCitpbnQgeGNfaHZtX2Rlc3Ryb3lfaW9yZXFfc2VydmVyKAorICAgIHhjX2ludGVy ZmFjZSAqeGNoLCBkb21pZF90IGRvbWlkLCBpb3NlcnZpZF90IGlkKQoreworICAgIHJldHVybiB4 ZW5kZXZpY2Vtb2RlbF9kZXN0cm95X2lvcmVxX3NlcnZlcih4Y2gtPmRtb2QsIGRvbWlkLCBpZCk7 Cit9CisKK2ludCB4Y19odm1fc2V0X2lvcmVxX3NlcnZlcl9zdGF0ZSgKKyAgICB4Y19pbnRlcmZh Y2UgKnhjaCwgZG9taWRfdCBkb21pZCwgaW9zZXJ2aWRfdCBpZCwgaW50IGVuYWJsZWQpCit7Cisg ICAgcmV0dXJuIHhlbmRldmljZW1vZGVsX3NldF9pb3JlcV9zZXJ2ZXJfc3RhdGUoeGNoLT5kbW9k LCBkb21pZCwgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZW5hYmxlZCk7Cit9CisKK2ludCB4Y19odm1fc2V0X3BjaV9pbnR4X2xldmVsKAorICAg IHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbWlkLCB1aW50MTZfdCBzZWdtZW50LCB1aW50 OF90IGJ1cywKKyAgICB1aW50OF90IGRldmljZSwgdWludDhfdCBpbnR4LCB1bnNpZ25lZCBpbnQg bGV2ZWwpCit7CisgICAgcmV0dXJuIHhlbmRldmljZW1vZGVsX3NldF9wY2lfaW50eF9sZXZlbCh4 Y2gtPmRtb2QsIGRvbWlkLCBzZWdtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYnVzLCBkZXZpY2UsIGludHgsIGxldmVsKTsKK30KKworaW50IHhjX2h2 bV9zZXRfaXNhX2lycV9sZXZlbCgKKyAgICB4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb21p ZCwgdWludDhfdCBpcnEsIHVuc2lnbmVkIGludCBsZXZlbCkKK3sKKyAgICByZXR1cm4geGVuZGV2 aWNlbW9kZWxfc2V0X2lzYV9pcnFfbGV2ZWwoeGNoLT5kbW9kLCBkb21pZCwgaXJxLCBsZXZlbCk7 Cit9CisKK2ludCB4Y19odm1fc2V0X3BjaV9saW5rX3JvdXRlKAorICAgIHhjX2ludGVyZmFjZSAq eGNoLCBkb21pZF90IGRvbWlkLCB1aW50OF90IGxpbmssIHVpbnQ4X3QgaXJxKQoreworICAgIHJl dHVybiB4ZW5kZXZpY2Vtb2RlbF9zZXRfcGNpX2xpbmtfcm91dGUoeGNoLT5kbW9kLCBkb21pZCwg bGluaywgaXJxKTsKK30KKworaW50IHhjX2h2bV9pbmplY3RfbXNpKAorICAgIHhjX2ludGVyZmFj ZSAqeGNoLCBkb21pZF90IGRvbWlkLCB1aW50NjRfdCBtc2lfYWRkciwgdWludDMyX3QgbXNpX2Rh dGEpCit7CisgICAgcmV0dXJuIHhlbmRldmljZW1vZGVsX2luamVjdF9tc2koeGNoLT5kbW9kLCBk b21pZCwgbXNpX2FkZHIsIG1zaV9kYXRhKTsKK30KKworaW50IHhjX2h2bV90cmFja19kaXJ0eV92 cmFtKAorICAgIHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbWlkLCB1aW50NjRfdCBmaXJz dF9wZm4sIHVpbnQzMl90IG5yLAorICAgIHVuc2lnbmVkIGxvbmcgKmRpcnR5X2JpdG1hcCkKK3sK KyAgICByZXR1cm4geGVuZGV2aWNlbW9kZWxfdHJhY2tfZGlydHlfdnJhbSh4Y2gtPmRtb2QsIGRv bWlkLCBmaXJzdF9wZm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnIsIGRpcnR5X2JpdG1hcCk7Cit9CisKK2ludCB4Y19odm1fbW9kaWZpZWRfbWVtb3J5KAor ICAgIHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbWlkLCB1aW50NjRfdCBmaXJzdF9wZm4s IHVpbnQzMl90IG5yKQoreworICAgIHJldHVybiB4ZW5kZXZpY2Vtb2RlbF9tb2RpZmllZF9tZW1v cnkoeGNoLT5kbW9kLCBkb21pZCwgZmlyc3RfcGZuLCBucik7Cit9CisKK2ludCB4Y19odm1fc2V0 X21lbV90eXBlKAorICAgIHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbWlkLCBodm1tZW1f dHlwZV90IHR5cGUsCisgICAgdWludDY0X3QgZmlyc3RfcGZuLCB1aW50MzJfdCBucikKK3sKKyAg ICByZXR1cm4geGVuZGV2aWNlbW9kZWxfc2V0X21lbV90eXBlKHhjaC0+ZG1vZCwgZG9taWQsIHR5 cGUsIGZpcnN0X3BmbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5y KTsKK30KKworaW50IHhjX2h2bV9pbmplY3RfdHJhcCgKKyAgICB4Y19pbnRlcmZhY2UgKnhjaCwg ZG9taWRfdCBkb21pZCwgaW50IHZjcHUsIHVpbnQ4X3QgdmVjdG9yLAorICAgIHVpbnQ4X3QgdHlw ZSwgdWludDMyX3QgZXJyb3JfY29kZSwgdWludDhfdCBpbnNuX2xlbiwgdWludDY0X3QgY3IyKQor eworICAgIHJldHVybiB4ZW5kZXZpY2Vtb2RlbF9pbmplY3RfZXZlbnQoeGNoLT5kbW9kLCBkb21p ZCwgdmNwdSwgdmVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dHlwZSwgZXJyb3JfY29kZSwgaW5zbl9sZW4sIGNyMik7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJp YWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9m ZnNldDogNAorICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVu ZDoKKyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGMveGNfZG9tYWluLmMgYi90b29scy9saWJ4 Yy94Y19kb21haW4uYwppbmRleCBmYTFkYWViLi5kODYyZTUzIDEwMDY0NAotLS0gYS90b29scy9s aWJ4Yy94Y19kb21haW4uYworKysgYi90b29scy9saWJ4Yy94Y19kb21haW4uYwpAQCAtMTQxMiwy MDcgKzE0MTIsNiBAQCBpbnQgeGNfZ2V0X2h2bV9wYXJhbSh4Y19pbnRlcmZhY2UgKmhhbmRsZSwg ZG9taWRfdCBkb20sIGludCBwYXJhbSwgdW5zaWduZWQgbG9uZwogICAgIHJldHVybiAwOwogfQog Ci1pbnQgeGNfaHZtX2NyZWF0ZV9pb3JlcV9zZXJ2ZXIoeGNfaW50ZXJmYWNlICp4Y2gsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9taWRfdCBkb21pZCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgaGFuZGxlX2J1ZmlvcmVxLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlvc2VydmlkX3QgKmlkKQotewotICAgIHN0cnVjdCB4ZW5fZG1fb3Agb3A7 Ci0gICAgc3RydWN0IHhlbl9kbV9vcF9jcmVhdGVfaW9yZXFfc2VydmVyICpkYXRhOwotICAgIGlu dCByYzsKLQotICAgIG1lbXNldCgmb3AsIDAsIHNpemVvZihvcCkpOwotCi0gICAgb3Aub3AgPSBY RU5fRE1PUF9jcmVhdGVfaW9yZXFfc2VydmVyOwotICAgIGRhdGEgPSAmb3AudS5jcmVhdGVfaW9y ZXFfc2VydmVyOwotCi0gICAgZGF0YS0+aGFuZGxlX2J1ZmlvcmVxID0gaGFuZGxlX2J1ZmlvcmVx OwotCi0gICAgcmMgPSBkb19kbV9vcCh4Y2gsIGRvbWlkLCAxLCAmb3AsIHNpemVvZihvcCkpOwot ICAgIGlmICggcmMgKQotICAgICAgICByZXR1cm4gcmM7Ci0KLSAgICAqaWQgPSBkYXRhLT5pZDsK LQotICAgIHJldHVybiAwOwotfQotCi1pbnQgeGNfaHZtX2dldF9pb3JlcV9zZXJ2ZXJfaW5mbyh4 Y19pbnRlcmZhY2UgKnhjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWlk X3QgZG9taWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NlcnZpZF90IGlk LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGVuX3Bmbl90ICppb3JlcV9wZm4s Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ZW5fcGZuX3QgKmJ1ZmlvcmVxX3Bm biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2dGNobl9wb3J0X3QgKmJ1Zmlv cmVxX3BvcnQpCi17Ci0gICAgc3RydWN0IHhlbl9kbV9vcCBvcDsKLSAgICBzdHJ1Y3QgeGVuX2Rt X29wX2dldF9pb3JlcV9zZXJ2ZXJfaW5mbyAqZGF0YTsKLSAgICBpbnQgcmM7Ci0KLSAgICBtZW1z ZXQoJm9wLCAwLCBzaXplb2Yob3ApKTsKLQotICAgIG9wLm9wID0gWEVOX0RNT1BfZ2V0X2lvcmVx X3NlcnZlcl9pbmZvOwotICAgIGRhdGEgPSAmb3AudS5nZXRfaW9yZXFfc2VydmVyX2luZm87Ci0K LSAgICBkYXRhLT5pZCA9IGlkOwotCi0gICAgcmMgPSBkb19kbV9vcCh4Y2gsIGRvbWlkLCAxLCAm b3AsIHNpemVvZihvcCkpOwotICAgIGlmICggcmMgKQotICAgICAgICByZXR1cm4gcmM7Ci0KLSAg ICBpZiAoIGlvcmVxX3BmbiApCi0gICAgICAgICppb3JlcV9wZm4gPSBkYXRhLT5pb3JlcV9wZm47 Ci0KLSAgICBpZiAoIGJ1ZmlvcmVxX3BmbiApCi0gICAgICAgICpidWZpb3JlcV9wZm4gPSBkYXRh LT5idWZpb3JlcV9wZm47Ci0KLSAgICBpZiAoIGJ1ZmlvcmVxX3BvcnQgKQotICAgICAgICAqYnVm aW9yZXFfcG9ydCA9IGRhdGEtPmJ1ZmlvcmVxX3BvcnQ7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQot aW50IHhjX2h2bV9tYXBfaW9fcmFuZ2VfdG9faW9yZXFfc2VydmVyKHhjX2ludGVyZmFjZSAqeGNo LCBkb21pZF90IGRvbWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlvc2VydmlkX3QgaWQsIGludCBpc19tbWlvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVpbnQ2NF90IHN0YXJ0LCB1aW50NjRfdCBlbmQpCi17Ci0gICAgc3RydWN0 IHhlbl9kbV9vcCBvcDsKLSAgICBzdHJ1Y3QgeGVuX2RtX29wX2lvcmVxX3NlcnZlcl9yYW5nZSAq ZGF0YTsKLQotICAgIG1lbXNldCgmb3AsIDAsIHNpemVvZihvcCkpOwotCi0gICAgb3Aub3AgPSBY RU5fRE1PUF9tYXBfaW9fcmFuZ2VfdG9faW9yZXFfc2VydmVyOwotICAgIGRhdGEgPSAmb3AudS5t YXBfaW9fcmFuZ2VfdG9faW9yZXFfc2VydmVyOwotCi0gICAgZGF0YS0+aWQgPSBpZDsKLSAgICBk YXRhLT50eXBlID0gaXNfbW1pbyA/IFhFTl9ETU9QX0lPX1JBTkdFX01FTU9SWSA6IFhFTl9ETU9Q X0lPX1JBTkdFX1BPUlQ7Ci0gICAgZGF0YS0+c3RhcnQgPSBzdGFydDsKLSAgICBkYXRhLT5lbmQg PSBlbmQ7Ci0KLSAgICByZXR1cm4gZG9fZG1fb3AoeGNoLCBkb21pZCwgMSwgJm9wLCBzaXplb2Yo b3ApKTsKLX0KLQotaW50IHhjX2h2bV91bm1hcF9pb19yYW5nZV9mcm9tX2lvcmVxX3NlcnZlcih4 Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb21pZCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW9zZXJ2aWRfdCBpZCwgaW50IGlzX21taW8sCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHN0YXJ0LCB1aW50 NjRfdCBlbmQpCi17Ci0gICAgc3RydWN0IHhlbl9kbV9vcCBvcDsKLSAgICBzdHJ1Y3QgeGVuX2Rt X29wX2lvcmVxX3NlcnZlcl9yYW5nZSAqZGF0YTsKLQotICAgIG1lbXNldCgmb3AsIDAsIHNpemVv ZihvcCkpOwotCi0gICAgb3Aub3AgPSBYRU5fRE1PUF91bm1hcF9pb19yYW5nZV9mcm9tX2lvcmVx X3NlcnZlcjsKLSAgICBkYXRhID0gJm9wLnUudW5tYXBfaW9fcmFuZ2VfZnJvbV9pb3JlcV9zZXJ2 ZXI7Ci0KLSAgICBkYXRhLT5pZCA9IGlkOwotICAgIGRhdGEtPnR5cGUgPSBpc19tbWlvID8gWEVO X0RNT1BfSU9fUkFOR0VfTUVNT1JZIDogWEVOX0RNT1BfSU9fUkFOR0VfUE9SVDsKLSAgICBkYXRh LT5zdGFydCA9IHN0YXJ0OwotICAgIGRhdGEtPmVuZCA9IGVuZDsKLQotICAgIHJldHVybiBkb19k bV9vcCh4Y2gsIGRvbWlkLCAxLCAmb3AsIHNpemVvZihvcCkpOwotfQotCi1pbnQgeGNfaHZtX21h cF9wY2lkZXZfdG9faW9yZXFfc2VydmVyKHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbWlk LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NlcnZpZF90IGlkLCB1 aW50MTZfdCBzZWdtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 aW50OF90IGJ1cywgdWludDhfdCBkZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQ4X3QgZnVuY3Rpb24pCi17Ci0gICAgc3RydWN0IHhlbl9kbV9vcCBvcDsK LSAgICBzdHJ1Y3QgeGVuX2RtX29wX2lvcmVxX3NlcnZlcl9yYW5nZSAqZGF0YTsKLQotICAgIGlm IChkZXZpY2UgPiAweDFmIHx8IGZ1bmN0aW9uID4gMHg3KSB7Ci0gICAgICAgIGVycm5vID0gRUlO VkFMOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgbWVtc2V0KCZvcCwgMCwgc2l6 ZW9mKG9wKSk7Ci0KLSAgICBvcC5vcCA9IFhFTl9ETU9QX21hcF9pb19yYW5nZV90b19pb3JlcV9z ZXJ2ZXI7Ci0gICAgZGF0YSA9ICZvcC51Lm1hcF9pb19yYW5nZV90b19pb3JlcV9zZXJ2ZXI7Ci0K LSAgICBkYXRhLT5pZCA9IGlkOwotICAgIGRhdGEtPnR5cGUgPSBYRU5fRE1PUF9JT19SQU5HRV9Q Q0k7Ci0KLSAgICAvKgotICAgICAqIFRoZSB1bmRlcmx5aW5nIGh5cGVyY2FsbCB3aWxsIGRlYWwg d2l0aCByYW5nZXMgb2YgUENJIFNCREYKLSAgICAgKiBidXQsIGZvciBzaW1wbGljaXR5LCB0aGUg QVBJIG9ubHkgdXNlcyBzaW5nbGV0b25zLgotICAgICAqLwotICAgIGRhdGEtPnN0YXJ0ID0gZGF0 YS0+ZW5kID0gWEVOX0RNT1BfUENJX1NCREYoKHVpbnQ2NF90KXNlZ21lbnQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpYnVzLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KWRl dmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1 aW50NjRfdClmdW5jdGlvbik7Ci0KLSAgICByZXR1cm4gZG9fZG1fb3AoeGNoLCBkb21pZCwgMSwg Jm9wLCBzaXplb2Yob3ApKTsKLX0KLQotaW50IHhjX2h2bV91bm1hcF9wY2lkZXZfZnJvbV9pb3Jl cV9zZXJ2ZXIoeGNfaW50ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9taWQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NlcnZpZF90IGlkLCB1aW50MTZfdCBzZWdt ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBi dXMsIHVpbnQ4X3QgZGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludDhfdCBmdW5jdGlvbikKLXsKLSAgICBzdHJ1Y3QgeGVuX2RtX29wIG9wOwotICAg IHN0cnVjdCB4ZW5fZG1fb3BfaW9yZXFfc2VydmVyX3JhbmdlICpkYXRhOwotCi0gICAgaWYgKGRl dmljZSA+IDB4MWYgfHwgZnVuY3Rpb24gPiAweDcpIHsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7 Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBtZW1zZXQoJm9wLCAwLCBzaXplb2Yo b3ApKTsKLQotICAgIG9wLm9wID0gWEVOX0RNT1BfdW5tYXBfaW9fcmFuZ2VfZnJvbV9pb3JlcV9z ZXJ2ZXI7Ci0gICAgZGF0YSA9ICZvcC51LnVubWFwX2lvX3JhbmdlX2Zyb21faW9yZXFfc2VydmVy OwotCi0gICAgZGF0YS0+aWQgPSBpZDsKLSAgICBkYXRhLT50eXBlID0gWEVOX0RNT1BfSU9fUkFO R0VfUENJOwotCi0gICAgLyoKLSAgICAgKiBUaGUgdW5kZXJseWluZyBoeXBlcmNhbGwgd2lsbCBk ZWFsIHdpdGggcmFuZ2VzIG9mIFBDSSBTQkRGCi0gICAgICogYnV0LCBmb3Igc2ltcGxpY2l0eSwg dGhlIEFQSSBvbmx5IHVzZXMgc2luZ2xldG9ucy4KLSAgICAgKi8KLSAgICBkYXRhLT5zdGFydCA9 IGRhdGEtPmVuZCA9IFhFTl9ETU9QX1BDSV9TQkRGKCh1aW50NjRfdClzZWdtZW50LAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KWJ1cywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50NjRf dClkZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAodWludDY0X3QpZnVuY3Rpb24pOwotCi0gICAgcmV0dXJuIGRvX2RtX29wKHhjaCwgZG9taWQs IDEsICZvcCwgc2l6ZW9mKG9wKSk7Ci19Ci0KLWludCB4Y19odm1fZGVzdHJveV9pb3JlcV9zZXJ2 ZXIoeGNfaW50ZXJmYWNlICp4Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRv bWlkX3QgZG9taWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc2VydmlkX3Qg aWQpCi17Ci0gICAgc3RydWN0IHhlbl9kbV9vcCBvcDsKLSAgICBzdHJ1Y3QgeGVuX2RtX29wX2Rl c3Ryb3lfaW9yZXFfc2VydmVyICpkYXRhOwotCi0gICAgbWVtc2V0KCZvcCwgMCwgc2l6ZW9mKG9w KSk7Ci0KLSAgICBvcC5vcCA9IFhFTl9ETU9QX2Rlc3Ryb3lfaW9yZXFfc2VydmVyOwotICAgIGRh dGEgPSAmb3AudS5kZXN0cm95X2lvcmVxX3NlcnZlcjsKLQotICAgIGRhdGEtPmlkID0gaWQ7Ci0K LSAgICByZXR1cm4gZG9fZG1fb3AoeGNoLCBkb21pZCwgMSwgJm9wLCBzaXplb2Yob3ApKTsKLX0K LQotaW50IHhjX2h2bV9zZXRfaW9yZXFfc2VydmVyX3N0YXRlKHhjX2ludGVyZmFjZSAqeGNoLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWlkX3QgZG9taWQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zZXJ2aWRfdCBpZCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgZW5hYmxlZCkKLXsKLSAgICBzdHJ1Y3QgeGVuX2RtX29w IG9wOwotICAgIHN0cnVjdCB4ZW5fZG1fb3Bfc2V0X2lvcmVxX3NlcnZlcl9zdGF0ZSAqZGF0YTsK LQotICAgIG1lbXNldCgmb3AsIDAsIHNpemVvZihvcCkpOwotCi0gICAgb3Aub3AgPSBYRU5fRE1P UF9zZXRfaW9yZXFfc2VydmVyX3N0YXRlOwotICAgIGRhdGEgPSAmb3AudS5zZXRfaW9yZXFfc2Vy dmVyX3N0YXRlOwotCi0gICAgZGF0YS0+aWQgPSBpZDsKLSAgICBkYXRhLT5lbmFibGVkID0gISFl bmFibGVkOwotCi0gICAgcmV0dXJuIGRvX2RtX29wKHhjaCwgZG9taWQsIDEsICZvcCwgc2l6ZW9m KG9wKSk7Ci19Ci0KIGludCB4Y19kb21haW5fc2V0ZGVidWdnaW5nKHhjX2ludGVyZmFjZSAqeGNo LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZG9taWQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZW5hYmxlKQpkaWZmIC0tZ2l0IGEvdG9vbHMv bGlieGMveGNfbWlzYy5jIGIvdG9vbHMvbGlieGMveGNfbWlzYy5jCmluZGV4IDUxNTk0NzUuLjg4 MDg0ZmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhjL3hjX21pc2MuYworKysgYi90b29scy9saWJ4 Yy94Y19taXNjLmMKQEAgLTQ2NywxNjAgKzQ2Nyw2IEBAIGludCB4Y19nZXRjcHVpbmZvKHhjX2lu dGVyZmFjZSAqeGNoLCBpbnQgbWF4X2NwdXMsCiAgICAgcmV0dXJuIHJjOwogfQogCi0KLWludCB4 Y19odm1fc2V0X3BjaV9pbnR4X2xldmVsKAotICAgIHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90 IGRvbSwKLSAgICB1aW50MTZfdCBkb21haW4sIHVpbnQ4X3QgYnVzLCB1aW50OF90IGRldmljZSwg dWludDhfdCBpbnR4LAotICAgIHVuc2lnbmVkIGludCBsZXZlbCkKLXsKLSAgICBzdHJ1Y3QgeGVu X2RtX29wIG9wOwotICAgIHN0cnVjdCB4ZW5fZG1fb3Bfc2V0X3BjaV9pbnR4X2xldmVsICpkYXRh OwotCi0gICAgbWVtc2V0KCZvcCwgMCwgc2l6ZW9mKG9wKSk7Ci0KLSAgICBvcC5vcCA9IFhFTl9E TU9QX3NldF9wY2lfaW50eF9sZXZlbDsKLSAgICBkYXRhID0gJm9wLnUuc2V0X3BjaV9pbnR4X2xl dmVsOwotCi0gICAgZGF0YS0+ZG9tYWluID0gZG9tYWluOwotICAgIGRhdGEtPmJ1cyA9IGJ1czsK LSAgICBkYXRhLT5kZXZpY2UgPSBkZXZpY2U7Ci0gICAgZGF0YS0+aW50eCA9IGludHg7Ci0gICAg ZGF0YS0+bGV2ZWwgPSBsZXZlbDsKLQotICAgIHJldHVybiBkb19kbV9vcCh4Y2gsIGRvbSwgMSwg Jm9wLCBzaXplb2Yob3ApKTsKLX0KLQotaW50IHhjX2h2bV9zZXRfaXNhX2lycV9sZXZlbCgKLSAg ICB4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb20sCi0gICAgdWludDhfdCBpc2FfaXJxLAot ICAgIHVuc2lnbmVkIGludCBsZXZlbCkKLXsKLSAgICBzdHJ1Y3QgeGVuX2RtX29wIG9wOwotICAg IHN0cnVjdCB4ZW5fZG1fb3Bfc2V0X2lzYV9pcnFfbGV2ZWwgKmRhdGE7Ci0KLSAgICBtZW1zZXQo Jm9wLCAwLCBzaXplb2Yob3ApKTsKLQotICAgIG9wLm9wID0gWEVOX0RNT1Bfc2V0X2lzYV9pcnFf bGV2ZWw7Ci0gICAgZGF0YSA9ICZvcC51LnNldF9pc2FfaXJxX2xldmVsOwotCi0gICAgZGF0YS0+ aXNhX2lycSA9IGlzYV9pcnE7Ci0gICAgZGF0YS0+bGV2ZWwgPSBsZXZlbDsKLQotICAgIHJldHVy biBkb19kbV9vcCh4Y2gsIGRvbSwgMSwgJm9wLCBzaXplb2Yob3ApKTsKLX0KLQotaW50IHhjX2h2 bV9zZXRfcGNpX2xpbmtfcm91dGUoCi0gICAgeGNfaW50ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9t LCB1aW50OF90IGxpbmssIHVpbnQ4X3QgaXNhX2lycSkKLXsKLSAgICBzdHJ1Y3QgeGVuX2RtX29w IG9wOwotICAgIHN0cnVjdCB4ZW5fZG1fb3Bfc2V0X3BjaV9saW5rX3JvdXRlICpkYXRhOwotCi0g ICAgbWVtc2V0KCZvcCwgMCwgc2l6ZW9mKG9wKSk7Ci0KLSAgICBvcC5vcCA9IFhFTl9ETU9QX3Nl dF9wY2lfbGlua19yb3V0ZTsKLSAgICBkYXRhID0gJm9wLnUuc2V0X3BjaV9saW5rX3JvdXRlOwot Ci0gICAgZGF0YS0+bGluayA9IGxpbms7Ci0gICAgZGF0YS0+aXNhX2lycSA9IGlzYV9pcnE7Ci0K LSAgICByZXR1cm4gZG9fZG1fb3AoeGNoLCBkb20sIDEsICZvcCwgc2l6ZW9mKG9wKSk7Ci19Ci0K LWludCB4Y19odm1faW5qZWN0X21zaSgKLSAgICB4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBk b20sIHVpbnQ2NF90IG1zaV9hZGRyLCB1aW50MzJfdCBtc2lfZGF0YSkKLXsKLSAgICBzdHJ1Y3Qg eGVuX2RtX29wIG9wOwotICAgIHN0cnVjdCB4ZW5fZG1fb3BfaW5qZWN0X21zaSAqZGF0YTsKLQot ICAgIG1lbXNldCgmb3AsIDAsIHNpemVvZihvcCkpOwotCi0gICAgb3Aub3AgPSBYRU5fRE1PUF9p bmplY3RfbXNpOwotICAgIGRhdGEgPSAmb3AudS5pbmplY3RfbXNpOwotCi0gICAgZGF0YS0+YWRk ciA9IG1zaV9hZGRyOwotICAgIGRhdGEtPmRhdGEgPSBtc2lfZGF0YTsKLQotICAgIHJldHVybiBk b19kbV9vcCh4Y2gsIGRvbSwgMSwgJm9wLCBzaXplb2Yob3ApKTsKLX0KLQotaW50IHhjX2h2bV90 cmFja19kaXJ0eV92cmFtKAotICAgIHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbSwKLSAg ICB1aW50NjRfdCBmaXJzdF9wZm4sIHVpbnQzMl90IG5yLAotICAgIHVuc2lnbmVkIGxvbmcgKmRp cnR5X2JpdG1hcCkKLXsKLSAgICBzdHJ1Y3QgeGVuX2RtX29wIG9wOwotICAgIHN0cnVjdCB4ZW5f ZG1fb3BfdHJhY2tfZGlydHlfdnJhbSAqZGF0YTsKLQotICAgIG1lbXNldCgmb3AsIDAsIHNpemVv ZihvcCkpOwotCi0gICAgb3Aub3AgPSBYRU5fRE1PUF90cmFja19kaXJ0eV92cmFtOwotICAgIGRh dGEgPSAmb3AudS50cmFja19kaXJ0eV92cmFtOwotCi0gICAgZGF0YS0+Zmlyc3RfcGZuID0gZmly c3RfcGZuOwotICAgIGRhdGEtPm5yID0gbnI7Ci0KLSAgICByZXR1cm4gZG9fZG1fb3AoeGNoLCBk b20sIDIsICZvcCwgc2l6ZW9mKG9wKSwKLSAgICAgICAgICAgICAgICAgICAgZGlydHlfYml0bWFw LCAoc2l6ZV90KSgobnIgKyA3KSAvIDgpKTsKLX0KLQotaW50IHhjX2h2bV9tb2RpZmllZF9tZW1v cnkoCi0gICAgeGNfaW50ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9tLCB1aW50NjRfdCBmaXJzdF9w Zm4sIHVpbnQzMl90IG5yKQotewotICAgIHN0cnVjdCB4ZW5fZG1fb3Agb3A7Ci0gICAgc3RydWN0 IHhlbl9kbV9vcF9tb2RpZmllZF9tZW1vcnkgKmRhdGE7Ci0KLSAgICBtZW1zZXQoJm9wLCAwLCBz aXplb2Yob3ApKTsKLQotICAgIG9wLm9wID0gWEVOX0RNT1BfbW9kaWZpZWRfbWVtb3J5OwotICAg IGRhdGEgPSAmb3AudS5tb2RpZmllZF9tZW1vcnk7Ci0KLSAgICBkYXRhLT5maXJzdF9wZm4gPSBm aXJzdF9wZm47Ci0gICAgZGF0YS0+bnIgPSBucjsKLQotICAgIHJldHVybiBkb19kbV9vcCh4Y2gs IGRvbSwgMSwgJm9wLCBzaXplb2Yob3ApKTsKLX0KLQotaW50IHhjX2h2bV9zZXRfbWVtX3R5cGUo Ci0gICAgeGNfaW50ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9tLCBodm1tZW1fdHlwZV90IG1lbV90 eXBlLCB1aW50NjRfdCBmaXJzdF9wZm4sIHVpbnQzMl90IG5yKQotewotICAgIHN0cnVjdCB4ZW5f ZG1fb3Agb3A7Ci0gICAgc3RydWN0IHhlbl9kbV9vcF9zZXRfbWVtX3R5cGUgKmRhdGE7Ci0KLSAg ICBtZW1zZXQoJm9wLCAwLCBzaXplb2Yob3ApKTsKLQotICAgIG9wLm9wID0gWEVOX0RNT1Bfc2V0 X21lbV90eXBlOwotICAgIGRhdGEgPSAmb3AudS5zZXRfbWVtX3R5cGU7Ci0KLSAgICBkYXRhLT5t ZW1fdHlwZSA9IG1lbV90eXBlOwotICAgIGRhdGEtPmZpcnN0X3BmbiA9IGZpcnN0X3BmbjsKLSAg ICBkYXRhLT5uciA9IG5yOwotCi0gICAgcmV0dXJuIGRvX2RtX29wKHhjaCwgZG9tLCAxLCAmb3As IHNpemVvZihvcCkpOwotfQotCi1pbnQgeGNfaHZtX2luamVjdF90cmFwKAotICAgIHhjX2ludGVy ZmFjZSAqeGNoLCBkb21pZF90IGRvbSwgaW50IHZjcHUsIHVpbnQ4X3QgdmVjdG9yLAotICAgIHVp bnQ4X3QgdHlwZSwgdWludDMyX3QgZXJyb3JfY29kZSwgdWludDhfdCBpbnNuX2xlbiwKLSAgICB1 aW50NjRfdCBjcjIpCi17Ci0gICAgc3RydWN0IHhlbl9kbV9vcCBvcDsKLSAgICBzdHJ1Y3QgeGVu X2RtX29wX2luamVjdF9ldmVudCAqZGF0YTsKLQotICAgIG1lbXNldCgmb3AsIDAsIHNpemVvZihv cCkpOwotCi0gICAgb3Aub3AgPSBYRU5fRE1PUF9pbmplY3RfZXZlbnQ7Ci0gICAgZGF0YSA9ICZv cC51LmluamVjdF9ldmVudDsKLQotICAgIGRhdGEtPnZjcHVpZCA9IHZjcHU7Ci0gICAgZGF0YS0+ dmVjdG9yID0gdmVjdG9yOwotICAgIGRhdGEtPnR5cGUgPSB0eXBlOwotICAgIGRhdGEtPmVycm9y X2NvZGUgPSBlcnJvcl9jb2RlOwotICAgIGRhdGEtPmluc25fbGVuID0gaW5zbl9sZW47Ci0gICAg ZGF0YS0+Y3IyID0gY3IyOwotCi0gICAgcmV0dXJuIGRvX2RtX29wKHhjaCwgZG9tLCAxLCAmb3As IHNpemVvZihvcCkpOwotfQotCiBpbnQgeGNfbGl2ZXBhdGNoX3VwbG9hZCh4Y19pbnRlcmZhY2Ug KnhjaCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwYXlsb2FkLApkaWZmIC0tZ2l0IGEvdG9vbHMvbGli eGMveGNfcHJpdmF0ZS5jIGIvdG9vbHMvbGlieGMveGNfcHJpdmF0ZS5jCmluZGV4IGJjZTc3OTcu LjcyZTYyNDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhjL3hjX3ByaXZhdGUuYworKysgYi90b29s cy9saWJ4Yy94Y19wcml2YXRlLmMKQEAgLTc4Myw3OSArNzgzLDYgQEAgaW50IHhjX2ZmczY0KHVp bnQ2NF90IHgpCiAgICAgcmV0dXJuIGwgPyB4Y19mZnMzMihsKSA6IGggPyB4Y19mZnMzMihoKSAr IDMyIDogMDsKIH0KIAotaW50IGRvX2RtX29wKHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRv bWlkLCB1bnNpZ25lZCBpbnQgbnJfYnVmcywgLi4uKQotewotICAgIGludCByZXQgPSAtMTsKLSAg ICBzdHJ1Y3QgIHsKLSAgICAgICAgdm9pZCAqdTsKLSAgICAgICAgdm9pZCAqaDsKLSAgICB9ICpi b3VuY2U7Ci0gICAgREVDTEFSRV9IWVBFUkNBTExfQlVGRkVSKHhlbl9kbV9vcF9idWZfdCwgYnVm cyk7Ci0gICAgdmFfbGlzdCBhcmdzOwotICAgIHVuc2lnbmVkIGludCBpZHg7Ci0KLSAgICBib3Vu Y2UgPSBjYWxsb2MobnJfYnVmcywgc2l6ZW9mKCpib3VuY2UpKTsKLSAgICBpZiAoIGJvdW5jZSA9 PSBOVUxMICkKLSAgICAgICAgZ290byBmYWlsMTsKLQotICAgIGJ1ZnMgPSB4Y19oeXBlcmNhbGxf YnVmZmVyX2FsbG9jKHhjaCwgYnVmcywgc2l6ZW9mKCpidWZzKSAqIG5yX2J1ZnMpOwotICAgIGlm ICggYnVmcyA9PSBOVUxMICkKLSAgICAgICAgZ290byBmYWlsMjsKLQotICAgIHZhX3N0YXJ0KGFy Z3MsIG5yX2J1ZnMpOwotICAgIGZvciAoIGlkeCA9IDA7IGlkeCA8IG5yX2J1ZnM7IGlkeCsrICkK LSAgICB7Ci0gICAgICAgIHZvaWQgKnUgPSB2YV9hcmcoYXJncywgdm9pZCAqKTsKLSAgICAgICAg c2l6ZV90IHNpemUgPSB2YV9hcmcoYXJncywgc2l6ZV90KTsKLQotICAgICAgICBib3VuY2VbaWR4 XS5oID0geGVuY2FsbF9hbGxvY19idWZmZXIoeGNoLT54Y2FsbCwgc2l6ZSk7Ci0gICAgICAgIGlm ICggYm91bmNlW2lkeF0uaCA9PSBOVUxMICkKLSAgICAgICAgICAgIGJyZWFrOyAvKiBFcnJvciBw YXRoIGhhbmRsZWQgYWZ0ZXIgdmFfZW5kKCkuICovCi0KLSAgICAgICAgbWVtY3B5KGJvdW5jZVtp ZHhdLmgsIHUsIHNpemUpOwotICAgICAgICBib3VuY2VbaWR4XS51ID0gdTsKLQotICAgICAgICBz ZXRfeGVuX2d1ZXN0X2hhbmRsZV9yYXcoYnVmc1tpZHhdLmgsIGJvdW5jZVtpZHhdLmgpOwotICAg ICAgICBidWZzW2lkeF0uc2l6ZSA9IHNpemU7Ci0gICAgfQotICAgIHZhX2VuZChhcmdzKTsKLQot ICAgIGlmICggaWR4ICE9IG5yX2J1ZnMgKQotICAgICAgICBnb3RvIGZhaWwzOwotCi0gICAgcmV0 ID0geGVuY2FsbDMoeGNoLT54Y2FsbCwgX19IWVBFUlZJU09SX2RtX29wLAotICAgICAgICAgICAg ICAgICAgIGRvbWlkLCBucl9idWZzLCBIWVBFUkNBTExfQlVGRkVSX0FTX0FSRyhidWZzKSk7Ci0g ICAgaWYgKCByZXQgPCAwICkKLSAgICAgICAgZ290byBmYWlsNDsKLQotICAgIHdoaWxlICggaWR4 LS0gIT0gMCApCi0gICAgewotICAgICAgICBtZW1jcHkoYm91bmNlW2lkeF0udSwgYm91bmNlW2lk eF0uaCwgYnVmc1tpZHhdLnNpemUpOwotICAgICAgICB4ZW5jYWxsX2ZyZWVfYnVmZmVyKHhjaC0+ eGNhbGwsIGJvdW5jZVtpZHhdLmgpOwotICAgIH0KLQotICAgIHhjX2h5cGVyY2FsbF9idWZmZXJf ZnJlZSh4Y2gsIGJ1ZnMpOwotCi0gICAgZnJlZShib3VuY2UpOwotCi0gICAgcmV0dXJuIDA7Ci0K LSBmYWlsNDoKLSAgICBpZHggPSBucl9idWZzOwotCi0gZmFpbDM6Ci0gICAgd2hpbGUgKCBpZHgt LSAhPSAwICkKLSAgICAgICAgeGVuY2FsbF9mcmVlX2J1ZmZlcih4Y2gtPnhjYWxsLCBib3VuY2Vb aWR4XS5oKTsKLQotICAgIHhjX2h5cGVyY2FsbF9idWZmZXJfZnJlZSh4Y2gsIGJ1ZnMpOwotCi0g ZmFpbDI6Ci0gICAgZnJlZShib3VuY2UpOwotCi0gZmFpbDE6Ci0gICAgcmV0dXJuIHJldDsKLX0K LQogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqIG1vZGU6IEMKLS0gCjIuMS40CgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxp bmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVu LWRldmVsCg==