From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: [PATCH 2/4] tools/libxendevicemodel: extract functions and add a compat layer Date: Fri, 17 Feb 2017 10:27:07 +0000 Message-ID: <1487327229-14641-2-git-send-email-paul.durrant@citrix.com> References: <1487327229-14641-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.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cefl0-00086t-5s for xen-devel@lists.xenproject.org; Fri, 17 Feb 2017 10:27:18 +0000 In-Reply-To: <1487327229-14641-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 IHBhdGNoIHdpbGwgYWRkIGEgTGludXgtCnNwZWNpZmljIHZhcmlhbnQuCgpOT1RFOiBBZnRlciBh cHBseWluZyB0aGlzIHBhdGNoIHRoZSBjb21wYXQgbGF5ZXIgd2lsbCBuZWVkIHRvIGJlIGVuYWJs ZWQKICAgICAgaW4gcWVtdS14ZW4tdHJhZGl0aW9uYWwgYnkgYXBwbHlpbmcgcGF0Y2ggWzFdLgoK WzFdIGh0dHA6Ly94ZW5iaXRzLnhlbi5vcmcvZ2l0d2ViLz9wPXBlb3BsZS9wYXVsZHUvcWVtdS14 ZW4tdHJhZGl0aW9uYWwuZ2l0O2E9Y29tbWl0O2g9ODJkMTViZDcKClNpZ25lZC1vZmYtYnk6IFBh dWwgRHVycmFudCA8cGF1bC5kdXJyYW50QGNpdHJpeC5jb20+Ci0tLQpDYzogSWFuIEphY2tzb24g PGlhbi5qYWNrc29uQGV1LmNpdHJpeC5jb20+CkNjOiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXgu Y29tPgotLS0KIHRvb2xzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAxICsKIHRvb2xzL1J1bGVzLm1rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAyICstCiB0b29scy9saWJzL2RldmljZW1vZGVsL01ha2VmaWxlICAgICAgICAgICAgICAg ICB8ICAxMCArLQogdG9vbHMvbGlicy9kZXZpY2Vtb2RlbC9jb21wYXQuYyAgICAgICAgICAgICAg ICAgfCAgNDUgKysrCiB0b29scy9saWJzL2RldmljZW1vZGVsL2NvcmUuYyAgICAgICAgICAgICAg ICAgICB8IDQzNSArKysrKysrKysrKysrKysrKysrKysrKysKIHRvb2xzL2xpYnMvZGV2aWNlbW9k ZWwvaW5jbHVkZS94ZW5kZXZpY2Vtb2RlbC5oIHwgMjU4ICsrKysrKysrKysrKysrCiB0b29scy9s aWJzL2RldmljZW1vZGVsL2xpYnhlbmRldmljZW1vZGVsLm1hcCAgICB8ICAxNiArCiB0b29scy9s aWJzL2RldmljZW1vZGVsL3ByaXZhdGUuaCAgICAgICAgICAgICAgICB8ICAxOSArKwogdG9vbHMv bGlieGMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogdG9vbHMv bGlieGMvaW5jbHVkZS94ZW5jdHJsLmggICAgICAgICAgICAgICAgICAgfCAxOTcgLS0tLS0tLS0t LS0KIHRvb2xzL2xpYnhjL2luY2x1ZGUveGVuY3RybF9jb21wYXQuaCAgICAgICAgICAgIHwgIDQ3 ICsrKwogdG9vbHMvbGlieGMveGNfZGV2aWNlbW9kZWxfY29tcGF0LmMgICAgICAgICAgICAgfCAx MzkgKysrKysrKysKIHRvb2xzL2xpYnhjL3hjX2RvbWFpbi5jICAgICAgICAgICAgICAgICAgICAg ICAgIHwgMjAxIC0tLS0tLS0tLS0tCiB0b29scy9saWJ4Yy94Y19taXNjLmMgICAgICAgICAgICAg ICAgICAgICAgICAgICB8IDE1NCAtLS0tLS0tLS0KIHRvb2xzL2xpYnhjL3hjX3ByaXZhdGUuYyAg ICAgICAgICAgICAgICAgICAgICAgIHwgIDczIC0tLS0KIDE1IGZpbGVzIGNoYW5nZWQsIDk3MCBp bnNlcnRpb25zKCspLCA2MjggZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMv bGlicy9kZXZpY2Vtb2RlbC9jb21wYXQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2xpYnhj L3hjX2RldmljZW1vZGVsX2NvbXBhdC5jCgpkaWZmIC0tZ2l0IGEvdG9vbHMvTWFrZWZpbGUgYi90 b29scy9NYWtlZmlsZQppbmRleCAwODkwY2M5Li5lNmMwY2M1IDEwMDY0NAotLS0gYS90b29scy9N YWtlZmlsZQorKysgYi90b29scy9NYWtlZmlsZQpAQCAtMjYyLDYgKzI2Miw3IEBAIHN1YmRpci1h bGwtcWVtdS14ZW4tZGlyOiBxZW11LXhlbi1kaXItZmluZAogCQktLWV4dHJhLWNmbGFncz0iLURY Q19XQU5UX0NPTVBBVF9FVlRDSE5fQVBJPTEgXAogCQktRFhDX1dBTlRfQ09NUEFUX0dOVFRBQl9B UEk9MSBcCiAJCS1EWENfV0FOVF9DT01QQVRfTUFQX0ZPUkVJR05fQVBJPTEgXAorCQktRFhDX1dB TlRfQ09NUEFUX0RFVklDRU1PREVMX0FQST0xIFwKIAkJLUkkKFhFTl9ST09UKS90b29scy9pbmNs dWRlIFwKIAkJLUkkKFhFTl9ST09UKS90b29scy9saWJzL3Rvb2xsb2cvaW5jbHVkZSBcCiAJCS1J JChYRU5fUk9PVCkvdG9vbHMvbGlicy9ldnRjaG4vaW5jbHVkZSBcCmRpZmYgLS1naXQgYS90b29s cy9SdWxlcy5tayBiL3Rvb2xzL1J1bGVzLm1rCmluZGV4IGUzNDE1ZjAuLjhlYTM5MDEgMTAwNjQ0 Ci0tLSBhL3Rvb2xzL1J1bGVzLm1rCisrKyBiL3Rvb2xzL1J1bGVzLm1rCkBAIC0xMTksNyArMTE5 LDcgQEAgTERMSUJTX2xpYnhlbmZvcmVpZ25tZW1vcnkgPSAkKFhFTl9MSUJYRU5GT1JFSUdOTUVN T1JZKS9saWJ4ZW5mb3JlaWdubWVtb3J5JChsaWIKIFNITElCX2xpYnhlbmZvcmVpZ25tZW1vcnkg ID0gLVdsLC1ycGF0aC1saW5rPSQoWEVOX0xJQlhFTkZPUkVJR05NRU1PUlkpCiAKIENGTEFHU19s aWJ4ZW5kZXZpY2Vtb2RlbCA9IC1JJChYRU5fTElCWEVOREVWSUNFTU9ERUwpL2luY2x1ZGUgJChD RkxBR1NfeGVuaW5jbHVkZSkKLVNIREVQU19saWJ4ZW5kZXZpY2Vtb2RlbCA9ICQoU0hMSUJfbGli eGVudG9vbGxvZykKK1NIREVQU19saWJ4ZW5kZXZpY2Vtb2RlbCA9ICQoU0hMSUJfbGlieGVudG9v bGxvZykgJChTSExJQl94ZW5jYWxsKQogTERMSUJTX2xpYnhlbmRldmljZW1vZGVsID0gJChYRU5f TElCWEVOREVWSUNFTU9ERUwpL2xpYnhlbmRldmljZW1vZGVsJChsaWJleHRlbnNpb24pCiBTSExJ Ql9saWJ4ZW5kZXZpY2Vtb2RlbCAgPSAtV2wsLXJwYXRoLWxpbms9JChYRU5fTElCWEVOREVWSUNF TU9ERUwpCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnMvZGV2aWNlbW9kZWwvTWFrZWZpbGUgYi90 b29scy9saWJzL2RldmljZW1vZGVsL01ha2VmaWxlCmluZGV4IDRmMWU2MTYuLmI4N2JmODQgMTAw NjQ0Ci0tLSBhL3Rvb2xzL2xpYnMvZGV2aWNlbW9kZWwvTWFrZWZpbGUKKysrIGIvdG9vbHMvbGli cy9kZXZpY2Vtb2RlbC9NYWtlZmlsZQpAQCAtOCw4ICs4LDE0IEBAIFNITElCX0xERkxBR1MgKz0g LVdsLC0tdmVyc2lvbi1zY3JpcHQ9bGlieGVuZGV2aWNlbW9kZWwubWFwCiBDRkxBR1MgICArPSAt V2Vycm9yIC1XbWlzc2luZy1wcm90b3R5cGVzCiBDRkxBR1MgICArPSAtSS4vaW5jbHVkZSAkKENG TEFHU194ZW5pbmNsdWRlKQogQ0ZMQUdTICAgKz0gJChDRkxBR1NfbGlieGVudG9vbGxvZykKLQot U1JDUy15ICAgKz0gY29yZS5jCitDRkxBR1MgICArPSAkKENGTEFHU19saWJ4ZW5jYWxsKQorCitT UkNTLXkgICAgICAgICAgICAgICAgICs9IGNvcmUuYworU1JDUy0kKENPTkZJR19MaW51eCkgICAr PSBjb21wYXQuYworU1JDUy0kKENPTkZJR19GcmVlQlNEKSArPSBjb21wYXQuYworU1JDUy0kKENP TkZJR19TdW5PUykgICArPSBjb21wYXQuYworU1JDUy0kKENPTkZJR19OZXRCU0QpICArPSBjb21w YXQuYworU1JDUy0kKENPTkZJR19NaW5pT1MpICArPSBjb21wYXQuYwogCiBMSUJfT0JKUyA6PSAk KHBhdHN1YnN0ICUuYywlLm8sJChTUkNTLXkpKQogUElDX09CSlMgOj0gJChwYXRzdWJzdCAlLmMs JS5vcGljLCQoU1JDUy15KSkKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnMvZGV2aWNlbW9kZWwvY29t cGF0LmMgYi90b29scy9saWJzL2RldmljZW1vZGVsL2NvbXBhdC5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjI0NWU5MDcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9saWJz L2RldmljZW1vZGVsL2NvbXBhdC5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQg KGMpIDIwMTcgQ2l0cml4IFN5c3RlbXMgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiB2ZXJz aW9uIDIuMSBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBJZiBu b3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUg InByaXZhdGUuaCIKKworaW50IG9zZGVwX3hlbmRldmljZW1vZGVsX29wZW4oeGVuZGV2aWNlbW9k ZWxfaGFuZGxlICpkbW9kKQoreworICAgIHJldHVybiAwOworfQorCitpbnQgb3NkZXBfeGVuZGV2 aWNlbW9kZWxfY2xvc2UoeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kKQoreworICAgIHJldHVy biAwOworfQorCitpbnQgb3NkZXBfeGVuZGV2aWNlbW9kZWxfb3AoeGVuZGV2aWNlbW9kZWxfaGFu ZGxlICpkbW9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWlkX3QgZG9taWQsIHVu c2lnbmVkIGludCBucl9idWZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4 ZW5kZXZpY2Vtb2RlbF9idWYgYnVmc1tdKQoreworICAgIHJldHVybiB4ZW5kZXZpY2Vtb2RlbF94 Y2FsbChkbW9kLCBkb21pZCwgbnJfYnVmcywgYnVmcyk7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJp YWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9m ZnNldDogNAorICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVu ZDoKKyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlicy9kZXZpY2Vtb2RlbC9jb3JlLmMgYi90b29s cy9saWJzL2RldmljZW1vZGVsL2NvcmUuYwppbmRleCBlYzE4MTQyLi43ZTlmODkzIDEwMDY0NAot LS0gYS90b29scy9saWJzL2RldmljZW1vZGVsL2NvcmUuYworKysgYi90b29scy9saWJzL2Rldmlj ZW1vZGVsL2NvcmUuYwpAQCAtMTYsNiArMTYsOCBAQAogICovCiAKICNpbmNsdWRlIDxzdGRsaWIu aD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgogCiAjaW5jbHVkZSAi cHJpdmF0ZS5oIgogCkBAIC0yMyw2ICsyNSw3IEBAIHhlbmRldmljZW1vZGVsX2hhbmRsZSAqeGVu ZGV2aWNlbW9kZWxfb3Blbih4ZW50b29sbG9nX2xvZ2dlciAqbG9nZ2VyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9wZW5fZmxhZ3MpCiB7CiAg ICAgeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kID0gbWFsbG9jKHNpemVvZigqZG1vZCkpOwor ICAgIGludCByYzsKIAogICAgIGlmICghZG1vZCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0z OSw2ICs0MiwxNCBAQCB4ZW5kZXZpY2Vtb2RlbF9oYW5kbGUgKnhlbmRldmljZW1vZGVsX29wZW4o eGVudG9vbGxvZ19sb2dnZXIgKmxvZ2dlciwKICAgICAgICAgICAgIGdvdG8gZXJyOwogICAgIH0K IAorICAgIGRtb2QtPnhjYWxsID0geGVuY2FsbF9vcGVuKGRtb2QtPmxvZ2dlciwgMCk7CisgICAg aWYgKCFkbW9kLT54Y2FsbCkKKyAgICAgICAgZ290byBlcnI7CisKKyAgICByYyA9IG9zZGVwX3hl bmRldmljZW1vZGVsX29wZW4oZG1vZCk7CisgICAgaWYgKHJjKQorICAgICAgICBnb3RvIGVycjsK KwogICAgIHJldHVybiBkbW9kOwogCiBlcnI6CkBAIC00OSwxNCArNjAsNDM4IEBAIGVycjoKIAog aW50IHhlbmRldmljZW1vZGVsX2Nsb3NlKHhlbmRldmljZW1vZGVsX2hhbmRsZSAqZG1vZCkKIHsK KyAgICBpbnQgcmM7CisKICAgICBpZiAoIWRtb2QpCiAgICAgICAgIHJldHVybiAwOwogCisgICAg cmMgPSBvc2RlcF94ZW5kZXZpY2Vtb2RlbF9jbG9zZShkbW9kKTsKKworICAgIHhlbmNhbGxfY2xv c2UoZG1vZC0+eGNhbGwpOwogICAgIHh0bF9sb2dnZXJfZGVzdHJveShkbW9kLT5sb2dnZXJfdG9m cmVlKTsKICAgICBmcmVlKGRtb2QpOworICAgIHJldHVybiByYzsKK30KKworaW50IHhlbmRldmlj ZW1vZGVsX3hjYWxsKHhlbmRldmljZW1vZGVsX2hhbmRsZSAqZG1vZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICBkb21pZF90IGRvbWlkLCB1bnNpZ25lZCBpbnQgbnJfYnVmcywKKyAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgeGVuZGV2aWNlbW9kZWxfYnVmIGJ1ZnNbXSkKK3sKKyAg ICBpbnQgcmV0ID0gLTE7CisgICAgdm9pZCAqKnhjYWxsX2J1ZnM7CisgICAgeGVuX2RtX29wX2J1 Zl90ICpvcF9idWZzOworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgeGNhbGxfYnVmcyA9IGNh bGxvYyhucl9idWZzLCBzaXplb2YoKnhjYWxsX2J1ZnMpKTsKKyAgICBpZiAoeGNhbGxfYnVmcyA9 PSBOVUxMKQorICAgICAgICBnb3RvIG91dDsKKworICAgIG9wX2J1ZnMgPSB4ZW5jYWxsX2FsbG9j X2J1ZmZlcihkbW9kLT54Y2FsbCwgc2l6ZW9mKHhlbl9kbV9vcF9idWZfdCkgKgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBucl9idWZzKTsKKyAgICBpZiAob3BfYnVmcyA9PSBO VUxMKQorICAgICAgICBnb3RvIG91dDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBucl9idWZzOyBp KyspICB7CisgICAgICAgIHhjYWxsX2J1ZnNbaV0gPSB4ZW5jYWxsX2FsbG9jX2J1ZmZlcihkbW9k LT54Y2FsbCwgYnVmc1tpXS5zaXplKTsKKyAgICAgICAgaWYgKCB4Y2FsbF9idWZzW2ldID09IE5V TEwgKQorICAgICAgICAgICAgZ290byBvdXQ7CisKKyAgICAgICAgbWVtY3B5KHhjYWxsX2J1ZnNb aV0sIGJ1ZnNbaV0ucHRyLCBidWZzW2ldLnNpemUpOworICAgICAgICBzZXRfeGVuX2d1ZXN0X2hh bmRsZV9yYXcob3BfYnVmc1tpXS5oLCB4Y2FsbF9idWZzW2ldKTsKKworICAgICAgICBvcF9idWZz W2ldLnNpemUgPSBidWZzW2ldLnNpemU7CisgICAgfQorCisgICAgcmV0ID0geGVuY2FsbDMoZG1v ZC0+eGNhbGwsIF9fSFlQRVJWSVNPUl9kbV9vcCwKKyAgICAgICAgICAgICAgICAgICBkb21pZCwg bnJfYnVmcywgKHVuc2lnbmVkIGxvbmcpb3BfYnVmcyk7CisgICAgaWYgKHJldCA8IDApCisgICAg ICAgIGdvdG8gb3V0OworCisgICAgZm9yIChpID0gMDsgaSA8IG5yX2J1ZnM7IGkrKykKKyAgICAg ICAgbWVtY3B5KGJ1ZnNbaV0ucHRyLCB4Y2FsbF9idWZzW2ldLCBidWZzW2ldLnNpemUpOworCitv dXQ6CisgICAgaWYgKHhjYWxsX2J1ZnMpCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBucl9idWZz OyBpKyspCisgICAgICAgICAgICB4ZW5jYWxsX2ZyZWVfYnVmZmVyKGRtb2QtPnhjYWxsLCB4Y2Fs bF9idWZzW2ldKTsKKworICAgIHhlbmNhbGxfZnJlZV9idWZmZXIoZG1vZC0+eGNhbGwsIG9wX2J1 ZnMpOworICAgIGZyZWUoeGNhbGxfYnVmcyk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0 aWMgaW50IHhlbmRldmljZW1vZGVsX29wKAorICAgIHhlbmRldmljZW1vZGVsX2hhbmRsZSAqZG1v ZCwgZG9taWRfdCBkb21pZCwgIHVuc2lnbmVkIGludCBucl9idWZzLCAuLi4pCit7CisgICAgc3Ry dWN0IHhlbmRldmljZW1vZGVsX2J1ZiAqYnVmczsKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdW5z aWduZWQgaW50IGk7CisgICAgaW50IHJldDsKKworICAgIGJ1ZnMgPSBjYWxsb2MobnJfYnVmcywg c2l6ZW9mKCpidWZzKSk7CisgICAgaWYgKCFidWZzKQorICAgICAgICByZXR1cm4gLTE7CisKKyAg ICB2YV9zdGFydChhcmdzLCBucl9idWZzKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnJfYnVmczsg aSsrKSB7CisgICAgICAgIGJ1ZnNbaV0ucHRyID0gdmFfYXJnKGFyZ3MsIHZvaWQgKik7CisgICAg ICAgIGJ1ZnNbaV0uc2l6ZSA9IHZhX2FyZyhhcmdzLCBzaXplX3QpOworICAgIH0KKyAgICB2YV9l bmQoYXJncyk7CisKKyAgICByZXQgPSBvc2RlcF94ZW5kZXZpY2Vtb2RlbF9vcChkbW9kLCBkb21p ZCwgbnJfYnVmcywgYnVmcyk7CisKKyAgICBmcmVlKGJ1ZnMpOworCisgICAgcmV0dXJuIHJldDsK K30KKworaW50IHhlbmRldmljZW1vZGVsX2NyZWF0ZV9pb3JlcV9zZXJ2ZXIoCisgICAgeGVuZGV2 aWNlbW9kZWxfaGFuZGxlICpkbW9kLCBkb21pZF90IGRvbWlkLCBpbnQgaGFuZGxlX2J1ZmlvcmVx LAorICAgIGlvc2VydmlkX3QgKmlkKQoreworICAgIHN0cnVjdCB4ZW5fZG1fb3Agb3A7CisgICAg c3RydWN0IHhlbl9kbV9vcF9jcmVhdGVfaW9yZXFfc2VydmVyICpkYXRhOworICAgIGludCByYzsK KworICAgIG1lbXNldCgmb3AsIDAsIHNpemVvZihvcCkpOworCisgICAgb3Aub3AgPSBYRU5fRE1P UF9jcmVhdGVfaW9yZXFfc2VydmVyOworICAgIGRhdGEgPSAmb3AudS5jcmVhdGVfaW9yZXFfc2Vy dmVyOworCisgICAgZGF0YS0+aGFuZGxlX2J1ZmlvcmVxID0gaGFuZGxlX2J1ZmlvcmVxOworCisg ICAgcmMgPSB4ZW5kZXZpY2Vtb2RlbF9vcChkbW9kLCBkb21pZCwgMSwgJm9wLCBzaXplb2Yob3Ap KTsKKyAgICBpZiAocmMpCisgICAgICAgIHJldHVybiByYzsKKworICAgICppZCA9IGRhdGEtPmlk OworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCB4ZW5kZXZpY2Vtb2RlbF9nZXRfaW9yZXFfc2Vy dmVyX2luZm8oCisgICAgeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kLCBkb21pZF90IGRvbWlk LCBpb3NlcnZpZF90IGlkLAorICAgIHhlbl9wZm5fdCAqaW9yZXFfcGZuLCB4ZW5fcGZuX3QgKmJ1 ZmlvcmVxX3BmbiwKKyAgICBldnRjaG5fcG9ydF90ICpidWZpb3JlcV9wb3J0KQoreworICAgIHN0 cnVjdCB4ZW5fZG1fb3Agb3A7CisgICAgc3RydWN0IHhlbl9kbV9vcF9nZXRfaW9yZXFfc2VydmVy X2luZm8gKmRhdGE7CisgICAgaW50IHJjOworCisgICAgbWVtc2V0KCZvcCwgMCwgc2l6ZW9mKG9w KSk7CisKKyAgICBvcC5vcCA9IFhFTl9ETU9QX2dldF9pb3JlcV9zZXJ2ZXJfaW5mbzsKKyAgICBk YXRhID0gJm9wLnUuZ2V0X2lvcmVxX3NlcnZlcl9pbmZvOworCisgICAgZGF0YS0+aWQgPSBpZDsK KworICAgIHJjID0geGVuZGV2aWNlbW9kZWxfb3AoZG1vZCwgZG9taWQsIDEsICZvcCwgc2l6ZW9m KG9wKSk7CisgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICBpZiAoaW9yZXFf cGZuKQorICAgICAgICAqaW9yZXFfcGZuID0gZGF0YS0+aW9yZXFfcGZuOworCisgICAgaWYgKGJ1 ZmlvcmVxX3BmbikKKyAgICAgICAgKmJ1ZmlvcmVxX3BmbiA9IGRhdGEtPmJ1ZmlvcmVxX3BmbjsK KworICAgIGlmIChidWZpb3JlcV9wb3J0KQorICAgICAgICAqYnVmaW9yZXFfcG9ydCA9IGRhdGEt PmJ1ZmlvcmVxX3BvcnQ7CisKICAgICByZXR1cm4gMDsKIH0KIAoraW50IHhlbmRldmljZW1vZGVs X21hcF9pb19yYW5nZV90b19pb3JlcV9zZXJ2ZXIoCisgICAgeGVuZGV2aWNlbW9kZWxfaGFuZGxl ICpkbW9kLCBkb21pZF90IGRvbWlkLCBpb3NlcnZpZF90IGlkLCBpbnQgaXNfbW1pbywKKyAgICB1 aW50NjRfdCBzdGFydCwgdWludDY0X3QgZW5kKQoreworICAgIHN0cnVjdCB4ZW5fZG1fb3Agb3A7 CisgICAgc3RydWN0IHhlbl9kbV9vcF9pb3JlcV9zZXJ2ZXJfcmFuZ2UgKmRhdGE7CisKKyAgICBt ZW1zZXQoJm9wLCAwLCBzaXplb2Yob3ApKTsKKworICAgIG9wLm9wID0gWEVOX0RNT1BfbWFwX2lv X3JhbmdlX3RvX2lvcmVxX3NlcnZlcjsKKyAgICBkYXRhID0gJm9wLnUubWFwX2lvX3JhbmdlX3Rv X2lvcmVxX3NlcnZlcjsKKworICAgIGRhdGEtPmlkID0gaWQ7CisgICAgZGF0YS0+dHlwZSA9IGlz X21taW8gPyBYRU5fRE1PUF9JT19SQU5HRV9NRU1PUlkgOiBYRU5fRE1PUF9JT19SQU5HRV9QT1JU OworICAgIGRhdGEtPnN0YXJ0ID0gc3RhcnQ7CisgICAgZGF0YS0+ZW5kID0gZW5kOworCisgICAg cmV0dXJuIHhlbmRldmljZW1vZGVsX29wKGRtb2QsIGRvbWlkLCAxLCAmb3AsIHNpemVvZihvcCkp OworfQorCitpbnQgeGVuZGV2aWNlbW9kZWxfdW5tYXBfaW9fcmFuZ2VfZnJvbV9pb3JlcV9zZXJ2 ZXIoCisgICAgeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kLCBkb21pZF90IGRvbWlkLCBpb3Nl cnZpZF90IGlkLCBpbnQgaXNfbW1pbywKKyAgICB1aW50NjRfdCBzdGFydCwgdWludDY0X3QgZW5k KQoreworICAgIHN0cnVjdCB4ZW5fZG1fb3Agb3A7CisgICAgc3RydWN0IHhlbl9kbV9vcF9pb3Jl cV9zZXJ2ZXJfcmFuZ2UgKmRhdGE7CisKKyAgICBtZW1zZXQoJm9wLCAwLCBzaXplb2Yob3ApKTsK KworICAgIG9wLm9wID0gWEVOX0RNT1BfdW5tYXBfaW9fcmFuZ2VfZnJvbV9pb3JlcV9zZXJ2ZXI7 CisgICAgZGF0YSA9ICZvcC51LnVubWFwX2lvX3JhbmdlX2Zyb21faW9yZXFfc2VydmVyOworCisg ICAgZGF0YS0+aWQgPSBpZDsKKyAgICBkYXRhLT50eXBlID0gaXNfbW1pbyA/IFhFTl9ETU9QX0lP X1JBTkdFX01FTU9SWSA6IFhFTl9ETU9QX0lPX1JBTkdFX1BPUlQ7CisgICAgZGF0YS0+c3RhcnQg PSBzdGFydDsKKyAgICBkYXRhLT5lbmQgPSBlbmQ7CisKKyAgICByZXR1cm4geGVuZGV2aWNlbW9k ZWxfb3AoZG1vZCwgZG9taWQsIDEsICZvcCwgc2l6ZW9mKG9wKSk7Cit9CisKK2ludCB4ZW5kZXZp Y2Vtb2RlbF9tYXBfcGNpZGV2X3RvX2lvcmVxX3NlcnZlcigKKyAgICB4ZW5kZXZpY2Vtb2RlbF9o YW5kbGUgKmRtb2QsIGRvbWlkX3QgZG9taWQsIGlvc2VydmlkX3QgaWQsCisgICAgdWludDE2X3Qg c2VnbWVudCwgdWludDhfdCBidXMsIHVpbnQ4X3QgZGV2aWNlLCB1aW50OF90IGZ1bmN0aW9uKQor eworICAgIHN0cnVjdCB4ZW5fZG1fb3Agb3A7CisgICAgc3RydWN0IHhlbl9kbV9vcF9pb3JlcV9z ZXJ2ZXJfcmFuZ2UgKmRhdGE7CisKKyAgICBpZiAoZGV2aWNlID4gMHgxZiB8fCBmdW5jdGlvbiA+ IDB4NykgeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIC0xOworICAg IH0KKworICAgIG1lbXNldCgmb3AsIDAsIHNpemVvZihvcCkpOworCisgICAgb3Aub3AgPSBYRU5f RE1PUF9tYXBfaW9fcmFuZ2VfdG9faW9yZXFfc2VydmVyOworICAgIGRhdGEgPSAmb3AudS5tYXBf aW9fcmFuZ2VfdG9faW9yZXFfc2VydmVyOworCisgICAgZGF0YS0+aWQgPSBpZDsKKyAgICBkYXRh LT50eXBlID0gWEVOX0RNT1BfSU9fUkFOR0VfUENJOworCisgICAgLyoKKyAgICAgKiBUaGUgdW5k ZXJseWluZyBoeXBlcmNhbGwgd2lsbCBkZWFsIHdpdGggcmFuZ2VzIG9mIFBDSSBTQkRGCisgICAg ICogYnV0LCBmb3Igc2ltcGxpY2l0eSwgdGhlIEFQSSBvbmx5IHVzZXMgc2luZ2xldG9ucy4KKyAg ICAgKi8KKyAgICBkYXRhLT5zdGFydCA9IGRhdGEtPmVuZCA9IFhFTl9ETU9QX1BDSV9TQkRGKCh1 aW50NjRfdClzZWdtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHVpbnQ2NF90KWJ1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICh1aW50NjRfdClkZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpZnVuY3Rpb24pOworCisgICAgcmV0 dXJuIHhlbmRldmljZW1vZGVsX29wKGRtb2QsIGRvbWlkLCAxLCAmb3AsIHNpemVvZihvcCkpOwor fQorCitpbnQgeGVuZGV2aWNlbW9kZWxfdW5tYXBfcGNpZGV2X2Zyb21faW9yZXFfc2VydmVyKAor ICAgIHhlbmRldmljZW1vZGVsX2hhbmRsZSAqZG1vZCwgZG9taWRfdCBkb21pZCwgaW9zZXJ2aWRf dCBpZCwKKyAgICB1aW50MTZfdCBzZWdtZW50LCB1aW50OF90IGJ1cywgdWludDhfdCBkZXZpY2Us IHVpbnQ4X3QgZnVuY3Rpb24pCit7CisgICAgc3RydWN0IHhlbl9kbV9vcCBvcDsKKyAgICBzdHJ1 Y3QgeGVuX2RtX29wX2lvcmVxX3NlcnZlcl9yYW5nZSAqZGF0YTsKKworICAgIGlmIChkZXZpY2Ug PiAweDFmIHx8IGZ1bmN0aW9uID4gMHg3KSB7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAg ICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgbWVtc2V0KCZvcCwgMCwgc2l6ZW9mKG9wKSk7 CisKKyAgICBvcC5vcCA9IFhFTl9ETU9QX3VubWFwX2lvX3JhbmdlX2Zyb21faW9yZXFfc2VydmVy OworICAgIGRhdGEgPSAmb3AudS51bm1hcF9pb19yYW5nZV9mcm9tX2lvcmVxX3NlcnZlcjsKKwor ICAgIGRhdGEtPmlkID0gaWQ7CisgICAgZGF0YS0+dHlwZSA9IFhFTl9ETU9QX0lPX1JBTkdFX1BD STsKKworICAgIC8qCisgICAgICogVGhlIHVuZGVybHlpbmcgaHlwZXJjYWxsIHdpbGwgZGVhbCB3 aXRoIHJhbmdlcyBvZiBQQ0kgU0JERgorICAgICAqIGJ1dCwgZm9yIHNpbXBsaWNpdHksIHRoZSBB UEkgb25seSB1c2VzIHNpbmdsZXRvbnMuCisgICAgICovCisgICAgZGF0YS0+c3RhcnQgPSBkYXRh LT5lbmQgPSBYRU5fRE1PUF9QQ0lfU0JERigodWludDY0X3Qpc2VnbWVudCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50NjRfdClidXMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpZGV2 aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVp bnQ2NF90KWZ1bmN0aW9uKTsKKworICAgIHJldHVybiB4ZW5kZXZpY2Vtb2RlbF9vcChkbW9kLCBk b21pZCwgMSwgJm9wLCBzaXplb2Yob3ApKTsKK30KKworaW50IHhlbmRldmljZW1vZGVsX2Rlc3Ry b3lfaW9yZXFfc2VydmVyKAorICAgIHhlbmRldmljZW1vZGVsX2hhbmRsZSAqZG1vZCwgZG9taWRf dCBkb21pZCwgaW9zZXJ2aWRfdCBpZCkKK3sKKyAgICBzdHJ1Y3QgeGVuX2RtX29wIG9wOworICAg IHN0cnVjdCB4ZW5fZG1fb3BfZGVzdHJveV9pb3JlcV9zZXJ2ZXIgKmRhdGE7CisKKyAgICBtZW1z ZXQoJm9wLCAwLCBzaXplb2Yob3ApKTsKKworICAgIG9wLm9wID0gWEVOX0RNT1BfZGVzdHJveV9p b3JlcV9zZXJ2ZXI7CisgICAgZGF0YSA9ICZvcC51LmRlc3Ryb3lfaW9yZXFfc2VydmVyOworCisg ICAgZGF0YS0+aWQgPSBpZDsKKworICAgIHJldHVybiB4ZW5kZXZpY2Vtb2RlbF9vcChkbW9kLCBk b21pZCwgMSwgJm9wLCBzaXplb2Yob3ApKTsKK30KKworaW50IHhlbmRldmljZW1vZGVsX3NldF9p b3JlcV9zZXJ2ZXJfc3RhdGUoCisgICAgeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kLCBkb21p ZF90IGRvbWlkLCBpb3NlcnZpZF90IGlkLCBpbnQgZW5hYmxlZCkKK3sKKyAgICBzdHJ1Y3QgeGVu X2RtX29wIG9wOworICAgIHN0cnVjdCB4ZW5fZG1fb3Bfc2V0X2lvcmVxX3NlcnZlcl9zdGF0ZSAq ZGF0YTsKKworICAgIG1lbXNldCgmb3AsIDAsIHNpemVvZihvcCkpOworCisgICAgb3Aub3AgPSBY RU5fRE1PUF9zZXRfaW9yZXFfc2VydmVyX3N0YXRlOworICAgIGRhdGEgPSAmb3AudS5zZXRfaW9y ZXFfc2VydmVyX3N0YXRlOworCisgICAgZGF0YS0+aWQgPSBpZDsKKyAgICBkYXRhLT5lbmFibGVk ID0gISFlbmFibGVkOworCisgICAgcmV0dXJuIHhlbmRldmljZW1vZGVsX29wKGRtb2QsIGRvbWlk LCAxLCAmb3AsIHNpemVvZihvcCkpOworfQorCitpbnQgeGVuZGV2aWNlbW9kZWxfc2V0X3BjaV9p bnR4X2xldmVsKAorICAgIHhlbmRldmljZW1vZGVsX2hhbmRsZSAqZG1vZCwgZG9taWRfdCBkb21p ZCwgdWludDE2X3Qgc2VnbWVudCwKKyAgICB1aW50OF90IGJ1cywgdWludDhfdCBkZXZpY2UsIHVp bnQ4X3QgaW50eCwgdW5zaWduZWQgaW50IGxldmVsKQoreworICAgIHN0cnVjdCB4ZW5fZG1fb3Ag b3A7CisgICAgc3RydWN0IHhlbl9kbV9vcF9zZXRfcGNpX2ludHhfbGV2ZWwgKmRhdGE7CisKKyAg ICBtZW1zZXQoJm9wLCAwLCBzaXplb2Yob3ApKTsKKworICAgIG9wLm9wID0gWEVOX0RNT1Bfc2V0 X3BjaV9pbnR4X2xldmVsOworICAgIGRhdGEgPSAmb3AudS5zZXRfcGNpX2ludHhfbGV2ZWw7CisK KyAgICBkYXRhLT5kb21haW4gPSBzZWdtZW50OworICAgIGRhdGEtPmJ1cyA9IGJ1czsKKyAgICBk YXRhLT5kZXZpY2UgPSBkZXZpY2U7CisgICAgZGF0YS0+aW50eCA9IGludHg7CisgICAgZGF0YS0+ bGV2ZWwgPSBsZXZlbDsKKworICAgIHJldHVybiB4ZW5kZXZpY2Vtb2RlbF9vcChkbW9kLCBkb21p ZCwgMSwgJm9wLCBzaXplb2Yob3ApKTsKK30KKworaW50IHhlbmRldmljZW1vZGVsX3NldF9pc2Ff aXJxX2xldmVsKAorICAgIHhlbmRldmljZW1vZGVsX2hhbmRsZSAqZG1vZCwgZG9taWRfdCBkb21p ZCwgdWludDhfdCBpcnEsCisgICAgdW5zaWduZWQgaW50IGxldmVsKQoreworICAgIHN0cnVjdCB4 ZW5fZG1fb3Agb3A7CisgICAgc3RydWN0IHhlbl9kbV9vcF9zZXRfaXNhX2lycV9sZXZlbCAqZGF0 YTsKKworICAgIG1lbXNldCgmb3AsIDAsIHNpemVvZihvcCkpOworCisgICAgb3Aub3AgPSBYRU5f RE1PUF9zZXRfaXNhX2lycV9sZXZlbDsKKyAgICBkYXRhID0gJm9wLnUuc2V0X2lzYV9pcnFfbGV2 ZWw7CisKKyAgICBkYXRhLT5pc2FfaXJxID0gaXJxOworICAgIGRhdGEtPmxldmVsID0gbGV2ZWw7 CisKKyAgICByZXR1cm4geGVuZGV2aWNlbW9kZWxfb3AoZG1vZCwgZG9taWQsIDEsICZvcCwgc2l6 ZW9mKG9wKSk7Cit9CisKK2ludCB4ZW5kZXZpY2Vtb2RlbF9zZXRfcGNpX2xpbmtfcm91dGUoCisg ICAgeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kLCBkb21pZF90IGRvbWlkLCB1aW50OF90IGxp bmssIHVpbnQ4X3QgaXJxKQoreworICAgIHN0cnVjdCB4ZW5fZG1fb3Agb3A7CisgICAgc3RydWN0 IHhlbl9kbV9vcF9zZXRfcGNpX2xpbmtfcm91dGUgKmRhdGE7CisKKyAgICBtZW1zZXQoJm9wLCAw LCBzaXplb2Yob3ApKTsKKworICAgIG9wLm9wID0gWEVOX0RNT1Bfc2V0X3BjaV9saW5rX3JvdXRl OworICAgIGRhdGEgPSAmb3AudS5zZXRfcGNpX2xpbmtfcm91dGU7CisKKyAgICBkYXRhLT5saW5r ID0gbGluazsKKyAgICBkYXRhLT5pc2FfaXJxID0gaXJxOworCisgICAgcmV0dXJuIHhlbmRldmlj ZW1vZGVsX29wKGRtb2QsIGRvbWlkLCAxLCAmb3AsIHNpemVvZihvcCkpOworfQorCitpbnQgeGVu ZGV2aWNlbW9kZWxfaW5qZWN0X21zaSgKKyAgICB4ZW5kZXZpY2Vtb2RlbF9oYW5kbGUgKmRtb2Qs IGRvbWlkX3QgZG9taWQsIHVpbnQ2NF90IG1zaV9hZGRyLAorICAgIHVpbnQzMl90IG1zaV9kYXRh KQoreworICAgIHN0cnVjdCB4ZW5fZG1fb3Agb3A7CisgICAgc3RydWN0IHhlbl9kbV9vcF9pbmpl Y3RfbXNpICpkYXRhOworCisgICAgbWVtc2V0KCZvcCwgMCwgc2l6ZW9mKG9wKSk7CisKKyAgICBv cC5vcCA9IFhFTl9ETU9QX2luamVjdF9tc2k7CisgICAgZGF0YSA9ICZvcC51LmluamVjdF9tc2k7 CisKKyAgICBkYXRhLT5hZGRyID0gbXNpX2FkZHI7CisgICAgZGF0YS0+ZGF0YSA9IG1zaV9kYXRh OworCisgICAgcmV0dXJuIHhlbmRldmljZW1vZGVsX29wKGRtb2QsIGRvbWlkLCAxLCAmb3AsIHNp emVvZihvcCkpOworfQorCitpbnQgeGVuZGV2aWNlbW9kZWxfdHJhY2tfZGlydHlfdnJhbSgKKyAg ICB4ZW5kZXZpY2Vtb2RlbF9oYW5kbGUgKmRtb2QsIGRvbWlkX3QgZG9taWQsIHVpbnQ2NF90IGZp cnN0X3BmbiwKKyAgICB1aW50MzJfdCBuciwgdW5zaWduZWQgbG9uZyAqZGlydHlfYml0bWFwKQor eworICAgIHN0cnVjdCB4ZW5fZG1fb3Agb3A7CisgICAgc3RydWN0IHhlbl9kbV9vcF90cmFja19k aXJ0eV92cmFtICpkYXRhOworCisgICAgbWVtc2V0KCZvcCwgMCwgc2l6ZW9mKG9wKSk7CisKKyAg ICBvcC5vcCA9IFhFTl9ETU9QX3RyYWNrX2RpcnR5X3ZyYW07CisgICAgZGF0YSA9ICZvcC51LnRy YWNrX2RpcnR5X3ZyYW07CisKKyAgICBkYXRhLT5maXJzdF9wZm4gPSBmaXJzdF9wZm47CisgICAg ZGF0YS0+bnIgPSBucjsKKworICAgIHJldHVybiB4ZW5kZXZpY2Vtb2RlbF9vcChkbW9kLCBkb21p ZCwgMiwgJm9wLCBzaXplb2Yob3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJ0 eV9iaXRtYXAsIChuciArIDcpIC8gOCk7Cit9CisKK2ludCB4ZW5kZXZpY2Vtb2RlbF9tb2RpZmll ZF9tZW1vcnkoCisgICAgeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kLCBkb21pZF90IGRvbWlk LCB1aW50NjRfdCBmaXJzdF9wZm4sCisgICAgdWludDMyX3QgbnIpCit7CisgICAgc3RydWN0IHhl bl9kbV9vcCBvcDsKKyAgICBzdHJ1Y3QgeGVuX2RtX29wX21vZGlmaWVkX21lbW9yeSAqZGF0YTsK KworICAgIG1lbXNldCgmb3AsIDAsIHNpemVvZihvcCkpOworCisgICAgb3Aub3AgPSBYRU5fRE1P UF9tb2RpZmllZF9tZW1vcnk7CisgICAgZGF0YSA9ICZvcC51Lm1vZGlmaWVkX21lbW9yeTsKKwor ICAgIGRhdGEtPmZpcnN0X3BmbiA9IGZpcnN0X3BmbjsKKyAgICBkYXRhLT5uciA9IG5yOworCisg ICAgcmV0dXJuIHhlbmRldmljZW1vZGVsX29wKGRtb2QsIGRvbWlkLCAxLCAmb3AsIHNpemVvZihv cCkpOworfQorCitpbnQgeGVuZGV2aWNlbW9kZWxfc2V0X21lbV90eXBlKAorICAgIHhlbmRldmlj ZW1vZGVsX2hhbmRsZSAqZG1vZCwgZG9taWRfdCBkb21pZCwgaHZtbWVtX3R5cGVfdCBtZW1fdHlw ZSwKKyAgICB1aW50NjRfdCBmaXJzdF9wZm4sIHVpbnQzMl90IG5yKQoreworICAgIHN0cnVjdCB4 ZW5fZG1fb3Agb3A7CisgICAgc3RydWN0IHhlbl9kbV9vcF9zZXRfbWVtX3R5cGUgKmRhdGE7CisK KyAgICBtZW1zZXQoJm9wLCAwLCBzaXplb2Yob3ApKTsKKworICAgIG9wLm9wID0gWEVOX0RNT1Bf c2V0X21lbV90eXBlOworICAgIGRhdGEgPSAmb3AudS5zZXRfbWVtX3R5cGU7CisKKyAgICBkYXRh LT5tZW1fdHlwZSA9IG1lbV90eXBlOworICAgIGRhdGEtPmZpcnN0X3BmbiA9IGZpcnN0X3BmbjsK KyAgICBkYXRhLT5uciA9IG5yOworCisgICAgcmV0dXJuIHhlbmRldmljZW1vZGVsX29wKGRtb2Qs IGRvbWlkLCAxLCAmb3AsIHNpemVvZihvcCkpOworfQorCitpbnQgeGVuZGV2aWNlbW9kZWxfaW5q ZWN0X2V2ZW50KAorICAgIHhlbmRldmljZW1vZGVsX2hhbmRsZSAqZG1vZCwgZG9taWRfdCBkb21p ZCwgaW50IHZjcHUsIHVpbnQ4X3QgdmVjdG9yLAorICAgIHVpbnQ4X3QgdHlwZSwgdWludDMyX3Qg ZXJyb3JfY29kZSwgdWludDhfdCBpbnNuX2xlbiwgdWludDY0X3QgY3IyKQoreworICAgIHN0cnVj dCB4ZW5fZG1fb3Agb3A7CisgICAgc3RydWN0IHhlbl9kbV9vcF9pbmplY3RfZXZlbnQgKmRhdGE7 CisKKyAgICBtZW1zZXQoJm9wLCAwLCBzaXplb2Yob3ApKTsKKworICAgIG9wLm9wID0gWEVOX0RN T1BfaW5qZWN0X2V2ZW50OworICAgIGRhdGEgPSAmb3AudS5pbmplY3RfZXZlbnQ7CisKKyAgICBk YXRhLT52Y3B1aWQgPSB2Y3B1OworICAgIGRhdGEtPnZlY3RvciA9IHZlY3RvcjsKKyAgICBkYXRh LT50eXBlID0gdHlwZTsKKyAgICBkYXRhLT5lcnJvcl9jb2RlID0gZXJyb3JfY29kZTsKKyAgICBk YXRhLT5pbnNuX2xlbiA9IGluc25fbGVuOworICAgIGRhdGEtPmNyMiA9IGNyMjsKKworICAgIHJl dHVybiB4ZW5kZXZpY2Vtb2RlbF9vcChkbW9kLCBkb21pZCwgMSwgJm9wLCBzaXplb2Yob3ApKTsK K30KKwogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqIG1vZGU6IEMKZGlmZiAtLWdpdCBhL3Rv b2xzL2xpYnMvZGV2aWNlbW9kZWwvaW5jbHVkZS94ZW5kZXZpY2Vtb2RlbC5oIGIvdG9vbHMvbGli cy9kZXZpY2Vtb2RlbC9pbmNsdWRlL3hlbmRldmljZW1vZGVsLmgKaW5kZXggZjk3N2IwZS4uZTAw ZjhkYSAxMDA2NDQKLS0tIGEvdG9vbHMvbGlicy9kZXZpY2Vtb2RlbC9pbmNsdWRlL3hlbmRldmlj ZW1vZGVsLmgKKysrIGIvdG9vbHMvbGlicy9kZXZpY2Vtb2RlbC9pbmNsdWRlL3hlbmRldmljZW1v ZGVsLmgKQEAgLTE3LDYgKzE3LDE0IEBACiAjaWZuZGVmIFhFTkRFVklDRU1PREVMX0gKICNkZWZp bmUgWEVOREVWSUNFTU9ERUxfSAogCisjaWZkZWYgX19YRU5fVE9PTFNfXworCisjaW5jbHVkZSA8 c3RkaW50Lmg+CisKKyNpbmNsdWRlIDx4ZW4veGVuLmg+CisjaW5jbHVkZSA8eGVuL2h2bS9kbV9v cC5oPgorI2luY2x1ZGUgPHhlbi9odm0vaHZtX29wLmg+CisKIC8qIENhbGxlcnMgd2hvIGRvbid0 IGNhcmUgZG9uJ3QgbmVlZCB0byAjaW5jbHVkZSA8eGVudG9vbGxvZy5oPiAqLwogc3RydWN0IHhl bnRvb2xsb2dfbG9nZ2VyOwogCkBAIC0yNyw2ICszNSwyNTYgQEAgeGVuZGV2aWNlbW9kZWxfaGFu ZGxlICp4ZW5kZXZpY2Vtb2RlbF9vcGVuKHN0cnVjdCB4ZW50b29sbG9nX2xvZ2dlciAqbG9nZ2Vy LAogCiBpbnQgeGVuZGV2aWNlbW9kZWxfY2xvc2UoeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9k KTsKIAorLyoKKyAqIElPUkVRIFNlcnZlciBBUEkuIChTZWUgc2VjdGlvbiBvbiBJT1JFUSBTZXJ2 ZXJzIGluIHB1YmxpYy9odm1fb3AuaCkuCisgKi8KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGlu c3RhbnRpYXRlcyBhbiBJT1JFUSBTZXJ2ZXIuCisgKgorICogQHBhcm0gZG1vZCBhIGhhbmRsZSB0 byBhbiBvcGVuIGRldmljZW1vZGVsIGludGVyZmFjZS4KKyAqIEBwYXJtIGRvbWlkIHRoZSBkb21h aW4gaWQgdG8gYmUgc2VydmljZWQKKyAqIEBwYXJtIGhhbmRsZV9idWZpb3JlcSBob3cgc2hvdWxk IHRoZSBJT1JFUSBTZXJ2ZXIgaGFuZGxlIGJ1ZmZlcmVkCisgKiAgICAgICAgICAgICAgICAgICAg ICAgcmVxdWVzdHMgKEhWTV9JT1JFUVNSVl9CVUZJT1JFUV8qKT8KKyAqIEBwYXJtIGlkIHBvaW50 ZXIgdG8gYW4gaW9zZXJ2aWRfdCB0byByZWNlaXZlIHRoZSBJT1JFUSBTZXJ2ZXIgaWQuCisgKiBA cmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KKyAqLworaW50IHhlbmRldmljZW1v ZGVsX2NyZWF0ZV9pb3JlcV9zZXJ2ZXIoCisgICAgeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9k LCBkb21pZF90IGRvbWlkLCBpbnQgaGFuZGxlX2J1ZmlvcmVxLAorICAgIGlvc2VydmlkX3QgKmlk KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgbmVjZXNzYXJ5IGluZm9y bWF0aW9uIHRvIGFsbG93IGFuCisgKiBlbXVsYXRvciB0byB1c2UgYW4gSU9SRVEgU2VydmVyLgor ICoKKyAqIEBwYXJtIGRtb2QgYSBoYW5kbGUgdG8gYW4gb3BlbiBkZXZpY2Vtb2RlbCBpbnRlcmZh Y2UuCisgKiBAcGFybSBkb21pZCB0aGUgZG9tYWluIGlkIHRvIGJlIHNlcnZpY2VkCisgKiBAcGFy bSBpZCB0aGUgSU9SRVEgU2VydmVyIGlkLgorICogQHBhcm0gaW9yZXFfcGZuIHBvaW50ZXIgdG8g YSB4ZW5fcGZuX3QgdG8gcmVjZWl2ZSB0aGUgc3luY2hyb25vdXMgaW9yZXEKKyAqICAgICAgICAg ICAgICAgICAgZ21mbgorICogQHBhcm0gYnVmaW9yZXFfcGZuIHBvaW50ZXIgdG8gYSB4ZW5fcGZu X3QgdG8gcmVjZWl2ZSB0aGUgYnVmZmVyZWQgaW9yZXEKKyAqICAgICAgICAgICAgICAgICAgICBn bWZuCisgKiBAcGFybSBidWZpb3JlcV9wb3J0IHBvaW50ZXIgdG8gYSBldnRjaG5fcG9ydF90IHRv IHJlY2VpdmUgdGhlIGJ1ZmZlcmVkCisgKiAgICAgICAgICAgICAgICAgICAgIGlvcmVxIGV2ZW50 IGNoYW5uZWwKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICovCitp bnQgeGVuZGV2aWNlbW9kZWxfZ2V0X2lvcmVxX3NlcnZlcl9pbmZvKAorICAgIHhlbmRldmljZW1v ZGVsX2hhbmRsZSAqZG1vZCwgZG9taWRfdCBkb21pZCwgaW9zZXJ2aWRfdCBpZCwKKyAgICB4ZW5f cGZuX3QgKmlvcmVxX3BmbiwgeGVuX3Bmbl90ICpidWZpb3JlcV9wZm4sCisgICAgZXZ0Y2huX3Bv cnRfdCAqYnVmaW9yZXFfcG9ydCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMg YSByYW5nZSBvZiBtZW1vcnkgb3IgSS9PIHBvcnRzIGZvciBlbXVsYXRpb24uCisgKgorICogQHBh cm0gZG1vZCBhIGhhbmRsZSB0byBhbiBvcGVuIGRldmljZW1vZGVsIGludGVyZmFjZS4KKyAqIEBw YXJtIGRvbWlkIHRoZSBkb21haW4gaWQgdG8gYmUgc2VydmljZWQKKyAqIEBwYXJtIGlkIHRoZSBJ T1JFUSBTZXJ2ZXIgaWQuCisgKiBAcGFybSBpc19tbWlvIGlzIHRoaXMgYSByYW5nZSBvZiBwb3J0 cyBvciBtZW1vcnkKKyAqIEBwYXJtIHN0YXJ0IHN0YXJ0IG9mIHJhbmdlCisgKiBAcGFybSBlbmQg ZW5kIG9mIHJhbmdlIChpbmNsdXNpdmUpLgorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9u IGZhaWx1cmUuCisgKi8KK2ludCB4ZW5kZXZpY2Vtb2RlbF9tYXBfaW9fcmFuZ2VfdG9faW9yZXFf c2VydmVyKAorICAgIHhlbmRldmljZW1vZGVsX2hhbmRsZSAqZG1vZCwgZG9taWRfdCBkb21pZCwg aW9zZXJ2aWRfdCBpZCwgaW50IGlzX21taW8sCisgICAgdWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90 IGVuZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBkZXJlZ2lzdGVycyBhIHJhbmdlIG9mIG1l bW9yeSBvciBJL08gcG9ydHMgZm9yIGVtdWxhdGlvbi4KKyAqCisgKiBAcGFybSBkbW9kIGEgaGFu ZGxlIHRvIGFuIG9wZW4gZGV2aWNlbW9kZWwgaW50ZXJmYWNlLgorICogQHBhcm0gZG9taWQgdGhl IGRvbWFpbiBpZCB0byBiZSBzZXJ2aWNlZAorICogQHBhcm0gaWQgdGhlIElPUkVRIFNlcnZlciBp ZC4KKyAqIEBwYXJtIGlzX21taW8gaXMgdGhpcyBhIHJhbmdlIG9mIHBvcnRzIG9yIG1lbW9yeQor ICogQHBhcm0gc3RhcnQgc3RhcnQgb2YgcmFuZ2UKKyAqIEBwYXJtIGVuZCBlbmQgb2YgcmFuZ2Ug KGluY2x1c2l2ZSkuCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KKyAq LworaW50IHhlbmRldmljZW1vZGVsX3VubWFwX2lvX3JhbmdlX2Zyb21faW9yZXFfc2VydmVyKAor ICAgIHhlbmRldmljZW1vZGVsX2hhbmRsZSAqZG1vZCwgZG9taWRfdCBkb21pZCwgaW9zZXJ2aWRf dCBpZCwgaW50IGlzX21taW8sCisgICAgdWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGVuZCk7CisK Ky8qKgorICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSBQQ0kgZGV2aWNlIGZvciBjb25maWcg c3BhY2UgZW11bGF0aW9uLgorICoKKyAqIEBwYXJtIGRtb2QgYSBoYW5kbGUgdG8gYW4gb3BlbiBk ZXZpY2Vtb2RlbCBpbnRlcmZhY2UuCisgKiBAcGFybSBkb21pZCB0aGUgZG9tYWluIGlkIHRvIGJl IHNlcnZpY2VkCisgKiBAcGFybSBpZCB0aGUgSU9SRVEgU2VydmVyIGlkLgorICogQHBhcm0gc2Vn bWVudCB0aGUgUENJIHNlZ21lbnQgb2YgdGhlIGRldmljZQorICogQHBhcm0gYnVzIHRoZSBQQ0kg YnVzIG9mIHRoZSBkZXZpY2UKKyAqIEBwYXJtIGRldmljZSB0aGUgJ3Nsb3QnIG51bWJlciBvZiB0 aGUgZGV2aWNlCisgKiBAcGFybSBmdW5jdGlvbiB0aGUgZnVuY3Rpb24gbnVtYmVyIG9mIHRoZSBk ZXZpY2UKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICovCitpbnQg eGVuZGV2aWNlbW9kZWxfbWFwX3BjaWRldl90b19pb3JlcV9zZXJ2ZXIoCisgICAgeGVuZGV2aWNl bW9kZWxfaGFuZGxlICpkbW9kLCBkb21pZF90IGRvbWlkLCBpb3NlcnZpZF90IGlkLAorICAgIHVp bnQxNl90IHNlZ21lbnQsIHVpbnQ4X3QgYnVzLCB1aW50OF90IGRldmljZSwgdWludDhfdCBmdW5j dGlvbik7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBkZXJlZ2lzdGVycyBhIFBDSSBkZXZpY2Ug Zm9yIGNvbmZpZyBzcGFjZSBlbXVsYXRpb24uCisgKgorICogQHBhcm0gZG1vZCBhIGhhbmRsZSB0 byBhbiBvcGVuIGRldmljZW1vZGVsIGludGVyZmFjZS4KKyAqIEBwYXJtIGRvbWlkIHRoZSBkb21h aW4gaWQgdG8gYmUgc2VydmljZWQKKyAqIEBwYXJtIGlkIHRoZSBJT1JFUSBTZXJ2ZXIgaWQuCisg KiBAcGFybSBzZWdtZW50IHRoZSBQQ0kgc2VnbWVudCBvZiB0aGUgZGV2aWNlCisgKiBAcGFybSBi dXMgdGhlIFBDSSBidXMgb2YgdGhlIGRldmljZQorICogQHBhcm0gZGV2aWNlIHRoZSAnc2xvdCcg bnVtYmVyIG9mIHRoZSBkZXZpY2UKKyAqIEBwYXJtIGZ1bmN0aW9uIHRoZSBmdW5jdGlvbiBudW1i ZXIgb2YgdGhlIGRldmljZQorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUu CisgKi8KK2ludCB4ZW5kZXZpY2Vtb2RlbF91bm1hcF9wY2lkZXZfZnJvbV9pb3JlcV9zZXJ2ZXIo CisgICAgeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kLCBkb21pZF90IGRvbWlkLCBpb3NlcnZp ZF90IGlkLAorICAgIHVpbnQxNl90IHNlZ21lbnQsIHVpbnQ4X3QgYnVzLCB1aW50OF90IGRldmlj ZSwgdWludDhfdCBmdW5jdGlvbik7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBkZXN0cm95cyBh biBJT1JFUSBTZXJ2ZXIuCisgKgorICogQHBhcm0gZG1vZCBhIGhhbmRsZSB0byBhbiBvcGVuIGRl dmljZW1vZGVsIGludGVyZmFjZS4KKyAqIEBwYXJtIGRvbWlkIHRoZSBkb21haW4gaWQgdG8gYmUg c2VydmljZWQKKyAqIEBwYXJtIGlkIHRoZSBJT1JFUSBTZXJ2ZXIgaWQuCisgKiBAcmV0dXJuIDAg b24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KKyAqLworaW50IHhlbmRldmljZW1vZGVsX2Rlc3Ry b3lfaW9yZXFfc2VydmVyKAorICAgIHhlbmRldmljZW1vZGVsX2hhbmRsZSAqZG1vZCwgZG9taWRf dCBkb21pZCwgaW9zZXJ2aWRfdCBpZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIElP UkVRIFNlcnZlciBzdGF0ZS4gQW4gSU9SRVEgU2VydmVyCisgKiB3aWxsIG5vdCBiZSBwYXNzZWQg ZW11bGF0aW9uIHJlcXVlc3RzIHVudGlsIGl0IGlzIGluCisgKiB0aGUgZW5hYmxlZCBzdGF0ZS4K KyAqIE5vdGUgdGhhdCB0aGUgY29udGVudHMgb2YgdGhlIGlvcmVxX3BmbiBhbmQgYnVmaW9yZXFf cGZuIGFyZQorICogbm90IG1lYW5pbmdmdWwgdW50aWwgdGhlIElPUkVRIFNlcnZlciBpcyBpbiB0 aGUgZW5hYmxlZCBzdGF0ZS4KKyAqCisgKiBAcGFybSBkbW9kIGEgaGFuZGxlIHRvIGFuIG9wZW4g ZGV2aWNlbW9kZWwgaW50ZXJmYWNlLgorICogQHBhcm0gZG9taWQgdGhlIGRvbWFpbiBpZCB0byBi ZSBzZXJ2aWNlZAorICogQHBhcm0gaWQgdGhlIElPUkVRIFNlcnZlciBpZC4KKyAqIEBwYXJtIGVu YWJsZWQgdGhlIHN0YXRlLgorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUu CisgKi8KK2ludCB4ZW5kZXZpY2Vtb2RlbF9zZXRfaW9yZXFfc2VydmVyX3N0YXRlKAorICAgIHhl bmRldmljZW1vZGVsX2hhbmRsZSAqZG1vZCwgZG9taWRfdCBkb21pZCwgaW9zZXJ2aWRfdCBpZCwg aW50IGVuYWJsZWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgbGV2ZWwgb2Yg SU5UeCBwaW4gb2YgYW4gZW11bGF0ZWQgUENJIGRldmljZS4KKyAqCisgKiBAcGFybSBkbW9kIGEg aGFuZGxlIHRvIGFuIG9wZW4gZGV2aWNlbW9kZWwgaW50ZXJmYWNlLgorICogQHBhcm0gZG9taWQg dGhlIGRvbWFpbiBpZCB0byBiZSBzZXJ2aWNlZAorICogQHBhcm0gc2VnbWVudCB0aGUgUENJIHNl Z21lbnQgbnVtYmVyIG9mIHRoZSBlbXVsYXRlZCBkZXZpY2UKKyAqIEBwYXJtIGJ1cyB0aGUgUENJ IGJ1cyBudW1iZXIgb2YgdGhlIGVtdWxhdGVkIGRldmljZQorICogQHBhcm0gZGV2aWNlIHRoZSBQ Q0kgZGV2aWNlIG51bWJlciBvZiB0aGUgZW11bGF0ZWQgZGV2aWNlCisgKiBAcGFybSBpbnR4IHRo ZSBJTlR4IHBpbiB0byBtb2RpZnkgKDAgPT4gQSAuLiAzID0+IEQpCisgKiBAcGFybSBsZXZlbCB0 aGUgbGV2ZWwgKDEgZm9yIGFzc2VydGVkLCAwIGZvciBkZS1hc3NlcnRlZCkKKyAqIEByZXR1cm4g MCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICovCitpbnQgeGVuZGV2aWNlbW9kZWxfc2V0 X3BjaV9pbnR4X2xldmVsKAorICAgIHhlbmRldmljZW1vZGVsX2hhbmRsZSAqZG1vZCwgZG9taWRf dCBkb21pZCwgdWludDE2X3Qgc2VnbWVudCwKKyAgICB1aW50OF90IGJ1cywgdWludDhfdCBkZXZp Y2UsIHVpbnQ4X3QgaW50eCwgdW5zaWduZWQgaW50IGxldmVsKTsKKworLyoqCisgKiBUaGlzIGZ1 bmN0aW9uIHNldHMgdGhlIGxldmVsIG9mIGFuIElTQSBJUlEgbGluZS4KKyAqCisgKiBAcGFybSBk bW9kIGEgaGFuZGxlIHRvIGFuIG9wZW4gZGV2aWNlbW9kZWwgaW50ZXJmYWNlLgorICogQHBhcm0g ZG9taWQgdGhlIGRvbWFpbiBpZCB0byBiZSBzZXJ2aWNlZAorICogQHBhcm0gaXJxIHRoZSBJUlEg bnVtYmVyICgwIC0gMTUpCisgKiBAcGFybSBsZXZlbCB0aGUgbGV2ZWwgKDEgZm9yIGFzc2VydGVk LCAwIGZvciBkZS1hc3NlcnRlZCkKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWls dXJlLgorICovCitpbnQgeGVuZGV2aWNlbW9kZWxfc2V0X2lzYV9pcnFfbGV2ZWwoCisgICAgeGVu ZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kLCBkb21pZF90IGRvbWlkLCB1aW50OF90IGlycSwKKyAg ICB1bnNpZ25lZCBpbnQgbGV2ZWwpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gbWFwcyBhIFBD SSBJTlR4IGxpbmUgdG8gYSBhbiBJUlEgbGluZS4KKyAqCisgKiBAcGFybSBkbW9kIGEgaGFuZGxl IHRvIGFuIG9wZW4gZGV2aWNlbW9kZWwgaW50ZXJmYWNlLgorICogQHBhcm0gZG9taWQgdGhlIGRv bWFpbiBpZCB0byBiZSBzZXJ2aWNlZAorICogQHBhcm0gbGluZSB0aGUgSU5UeCBsaW5lICgwID0+ IEEgLi4gMyA9PiBCKQorICogQHBhcm0gaXJxIHRoZSBJUlEgbnVtYmVyICgwIC0gMTUpCisgKiBA cmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KKyAqLworaW50IHhlbmRldmljZW1v ZGVsX3NldF9wY2lfbGlua19yb3V0ZSgKKyAgICB4ZW5kZXZpY2Vtb2RlbF9oYW5kbGUgKmRtb2Qs IGRvbWlkX3QgZG9taWQsIHVpbnQ4X3QgbGluaywgdWludDhfdCBpcnEpOworCisvKioKKyAqIFRo aXMgZnVuY3Rpb24gaW5qZWN0cyBhbiBNU0kgaW50byBhIGd1ZXN0LgorICoKKyAqIEBwYXJtIGRt b2QgYSBoYW5kbGUgdG8gYW4gb3BlbiBkZXZpY2Vtb2RlbCBpbnRlcmZhY2UuCisgKiBAcGFybSBk b21pZCB0aGUgZG9tYWluIGlkIHRvIGJlIHNlcnZpY2VkCisgKiBAcGFybSBtc2lfYWRkciB0aGUg TVNJIGFkZHJlc3MgKDB4ZmVleHh4eHgpCisgKiBAcGFybSBtc2lfZGF0YSB0aGUgTVNJIGRhdGEK KyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorKi8KK2ludCB4ZW5kZXZp Y2Vtb2RlbF9pbmplY3RfbXNpKAorICAgIHhlbmRldmljZW1vZGVsX2hhbmRsZSAqZG1vZCwgZG9t aWRfdCBkb21pZCwgdWludDY0X3QgbXNpX2FkZHIsCisgICAgdWludDMyX3QgbXNpX2RhdGEpOwor CisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0cmFja2luZyBvZiBjaGFuZ2VzIGluIHRo ZSBWUkFNIGFyZWEuCisgKgorICogVGhlIGZvbGxvd2luZyBpcyBkb25lIGF0b21pY2FsbHk6Cisg KiAtIGdldCB0aGUgZGlydHkgYml0bWFwIHNpbmNlIHRoZSBsYXN0IGNhbGwuCisgKiAtIHNldCB1 cCBkaXJ0eSB0cmFja2luZyBhcmVhIGZvciBwZXJpb2QgdXAgdG8gdGhlIG5leHQgY2FsbC4KKyAq IC0gY2xlYXIgdGhlIGRpcnR5IHRyYWNraW5nIGFyZWEuCisgKgorICogQHBhcm0gZG1vZCBhIGhh bmRsZSB0byBhbiBvcGVuIGRldmljZW1vZGVsIGludGVyZmFjZS4KKyAqIEBwYXJtIGRvbWlkIHRo ZSBkb21haW4gaWQgdG8gYmUgc2VydmljZWQKKyAqIEBwYXJtIGZpcnN0X3BmbiB0aGUgc3RhcnQg b2YgdGhlIGFyZWEgdG8gdHJhY2sKKyAqIEBwYXJtIG5yIHRoZSBudW1iZXIgb2YgcGFnZXMgdG8g dHJhY2sKKyAqIEBwYXJtIGRpcnR5X2JpdG1hbCBhIHBvaW50ZXIgdG8gdGhlIGJpdG1hcCB0byBi ZSB1cGRhdGVkCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KKyAqLwor aW50IHhlbmRldmljZW1vZGVsX3RyYWNrX2RpcnR5X3ZyYW0oCisgICAgeGVuZGV2aWNlbW9kZWxf aGFuZGxlICpkbW9kLCBkb21pZF90IGRvbWlkLCB1aW50NjRfdCBmaXJzdF9wZm4sCisgICAgdWlu dDMyX3QgbnIsIHVuc2lnbmVkIGxvbmcgKmRpcnR5X2JpdG1hcCk7CisKKy8qKgorICogVGhpcyBm dW5jdGlvbiBub3RpZmllcyB0aGUgaHlwZXJ2aXNvciB0aGF0IGEgc2V0IG9mIGRvbWFpbiBwYWdl cworICogaGF2ZSBiZWVuIG1vZGlmaWVkLgorICoKKyAqIEBwYXJtIGRtb2QgYSBoYW5kbGUgdG8g YW4gb3BlbiBkZXZpY2Vtb2RlbCBpbnRlcmZhY2UuCisgKiBAcGFybSBkb21pZCB0aGUgZG9tYWlu IGlkIHRvIGJlIHNlcnZpY2VkCisgKiBAcGFybSBmaXJzdF9wZm4gdGhlIHN0YXJ0IG9mIHRoZSBt b2RpZmllZCBhcmVhCisgKiBAcGFybSBuciB0aGUgbnVtYmVyIG9mIHBhZ2VzIG1vZGlmaWVkCisg KiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KKyAqLworaW50IHhlbmRldmlj ZW1vZGVsX21vZGlmaWVkX21lbW9yeSgKKyAgICB4ZW5kZXZpY2Vtb2RlbF9oYW5kbGUgKmRtb2Qs IGRvbWlkX3QgZG9taWQsIHVpbnQ2NF90IGZpcnN0X3BmbiwKKyAgICB1aW50MzJfdCBucik7CisK Ky8qKgorICogVGhpcyBmdW5jdGlvbiBub3RpZmllcyB0aGUgaHlwZXJ2aXNvciB0aGF0IGEgc2V0 IG9mIGRvbWFpbiBwYWdlcworICogYXJlIHRvIGJlIHRyZWF0ZWQgaW4gYSBzcGVjaWZpYyB3YXku IChTZWUgdGhlIGRlZmluaXRpb24gb2YKKyAqIGh2bW1lbV90eXBlX3QpLgorICoKKyAqIEBwYXJt IGRtb2QgYSBoYW5kbGUgdG8gYW4gb3BlbiBkZXZpY2Vtb2RlbCBpbnRlcmZhY2UuCisgKiBAcGFy bSBkb21pZCB0aGUgZG9tYWluIGlkIHRvIGJlIHNlcnZpY2VkCisgKiBAcGFybSBtZW1fdHlwZSBk ZXRlcm1pbmVzIGhvdyB0aGUgc2V0IGlzIHRvIGJlIHRyZWF0ZWQKKyAqIEBwYXJtIGZpcnN0X3Bm biB0aGUgc3RhcnQgb2YgdGhlIHNldAorICogQHBhcm0gbnIgdGhlIG51bWJlciBvZiBwYWdlcyBp biB0aGUgc2V0CisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KKyAqLwor aW50IHhlbmRldmljZW1vZGVsX3NldF9tZW1fdHlwZSgKKyAgICB4ZW5kZXZpY2Vtb2RlbF9oYW5k bGUgKmRtb2QsIGRvbWlkX3QgZG9taWQsIGh2bW1lbV90eXBlX3QgbWVtX3R5cGUsCisgICAgdWlu dDY0X3QgZmlyc3RfcGZuLCB1aW50MzJfdCBucik7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBp bmplY3RzIGFuIGV2ZW50IGludG8gYSB2Q1BVIHRvIHRha2UgZWZmZWN0IHRoZSBuZXh0CisgKiB0 aW1lIGl0IHJlc3VtZXMuCisgKgorICogQHBhcm0gZG1vZCBhIGhhbmRsZSB0byBhbiBvcGVuIGRl dmljZW1vZGVsIGludGVyZmFjZS4KKyAqIEBwYXJtIGRvbWlkIHRoZSBkb21haW4gaWQgdG8gYmUg c2VydmljZWQKKyAqIEBwYXJtIHZjcHUgdGhlIHZjcHUgaWQKKyAqIEBwYXJtIHZlY3RvciB0aGUg aW50ZXJydXB0IHZlY3RvcgorICogQHBhcm0gdHlwZSB0aGUgZXZlbnQgdHlwZSAoc2VlIHRoZSBk ZWZpbml0aW9uIG9mIGVudW0geDg2X2V2ZW50X3R5cGUpCisgKiBAcGFybSBlcnJvcl9jb2RlIHRo ZSBlcnJvciBjb2RlIG9yIH4wIHRvIHNraXAKKyAqIEBwYXJtIGluc25fbGVuIHRoZSBpbnN0cnVj dGlvbiBsZW5ndGgKKyAqIEBwYXJtIGNyMiB0aGUgdmFsdWUgb2YgQ1IyIGZvciBwYWdlIGZhdWx0 cworICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCisgKi8KK2ludCB4ZW5k ZXZpY2Vtb2RlbF9pbmplY3RfZXZlbnQoCisgICAgeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9k LCBkb21pZF90IGRvbWlkLCBpbnQgdmNwdSwgdWludDhfdCB2ZWN0b3IsCisgICAgdWludDhfdCB0 eXBlLCB1aW50MzJfdCBlcnJvcl9jb2RlLCB1aW50OF90IGluc25fbGVuLCB1aW50NjRfdCBjcjIp OworCisjZW5kaWYgLyogX19YRU5fVE9PTFNfXyAqLworCiAjZW5kaWYgLyogWEVOREVWSUNFTU9E RUxfSCAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlicy9kZXZpY2Vtb2RlbC9saWJ4ZW5k ZXZpY2Vtb2RlbC5tYXAgYi90b29scy9saWJzL2RldmljZW1vZGVsL2xpYnhlbmRldmljZW1vZGVs Lm1hcAppbmRleCA5ODBjNDI5Li5hYmM2ZDA2IDEwMDY0NAotLS0gYS90b29scy9saWJzL2Rldmlj ZW1vZGVsL2xpYnhlbmRldmljZW1vZGVsLm1hcAorKysgYi90b29scy9saWJzL2RldmljZW1vZGVs L2xpYnhlbmRldmljZW1vZGVsLm1hcApAQCAtMSw2ICsxLDIyIEBACiBWRVJTXzEuMCB7CiAJZ2xv YmFsOgogCQl4ZW5kZXZpY2Vtb2RlbF9vcGVuOworCQl4ZW5kZXZpY2Vtb2RlbF9jcmVhdGVfaW9y ZXFfc2VydmVyOworCQl4ZW5kZXZpY2Vtb2RlbF9nZXRfaW9yZXFfc2VydmVyX2luZm87CisJCXhl bmRldmljZW1vZGVsX21hcF9pb19yYW5nZV90b19pb3JlcV9zZXJ2ZXI7CisJCXhlbmRldmljZW1v ZGVsX3VubWFwX2lvX3JhbmdlX2Zyb21faW9yZXFfc2VydmVyOworCQl4ZW5kZXZpY2Vtb2RlbF9t YXBfcGNpZGV2X3RvX2lvcmVxX3NlcnZlcjsKKwkJeGVuZGV2aWNlbW9kZWxfdW5tYXBfcGNpZGV2 X2Zyb21faW9yZXFfc2VydmVyOworCQl4ZW5kZXZpY2Vtb2RlbF9kZXN0cm95X2lvcmVxX3NlcnZl cjsKKwkJeGVuZGV2aWNlbW9kZWxfc2V0X2lvcmVxX3NlcnZlcl9zdGF0ZTsKKwkJeGVuZGV2aWNl bW9kZWxfc2V0X3BjaV9pbnR4X2xldmVsOworCQl4ZW5kZXZpY2Vtb2RlbF9zZXRfaXNhX2lycV9s ZXZlbDsKKwkJeGVuZGV2aWNlbW9kZWxfc2V0X3BjaV9saW5rX3JvdXRlOworCQl4ZW5kZXZpY2Vt b2RlbF9pbmplY3RfbXNpOworCQl4ZW5kZXZpY2Vtb2RlbF90cmFja19kaXJ0eV92cmFtOworCQl4 ZW5kZXZpY2Vtb2RlbF9tb2RpZmllZF9tZW1vcnk7CisJCXhlbmRldmljZW1vZGVsX3NldF9tZW1f dHlwZTsKKwkJeGVuZGV2aWNlbW9kZWxfaW5qZWN0X2V2ZW50OwogCQl4ZW5kZXZpY2Vtb2RlbF9j bG9zZTsKIAlsb2NhbDogKjsgLyogRG8gbm90IGV4cG9zZSBhbnl0aGluZyBieSBkZWZhdWx0ICov CiB9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlicy9kZXZpY2Vtb2RlbC9wcml2YXRlLmggYi90b29s cy9saWJzL2RldmljZW1vZGVsL3ByaXZhdGUuaAppbmRleCBjZjFlNGIwLi43YzdhY2YyIDEwMDY0 NAotLS0gYS90b29scy9saWJzL2RldmljZW1vZGVsL3ByaXZhdGUuaAorKysgYi90b29scy9saWJz L2RldmljZW1vZGVsL3ByaXZhdGUuaApAQCAtMSwxNCArMSwzMyBAQAogI2lmbmRlZiBYRU5ERVZJ Q0VNT0RFTF9QUklWQVRFX0gKICNkZWZpbmUgWEVOREVWSUNFTU9ERUxfUFJJVkFURV9ICiAKKyNk ZWZpbmUgX19YRU5fVE9PTFNfXyAxCisKICNpbmNsdWRlIDx4ZW50b29sbG9nLmg+CiAjaW5jbHVk ZSA8eGVuZGV2aWNlbW9kZWwuaD4KKyNpbmNsdWRlIDx4ZW5jYWxsLmg+CiAKIHN0cnVjdCB4ZW5k ZXZpY2Vtb2RlbF9oYW5kbGUgewogICAgIHhlbnRvb2xsb2dfbG9nZ2VyICpsb2dnZXIsICpsb2dn ZXJfdG9mcmVlOwogICAgIHVuc2lnbmVkIGludCBmbGFnczsKKyAgICB4ZW5jYWxsX2hhbmRsZSAq eGNhbGw7Cit9OworCitzdHJ1Y3QgeGVuZGV2aWNlbW9kZWxfYnVmIHsKKyAgICB2b2lkICpwdHI7 CisgICAgc2l6ZV90IHNpemU7CiB9OwogCitpbnQgeGVuZGV2aWNlbW9kZWxfeGNhbGwoeGVuZGV2 aWNlbW9kZWxfaGFuZGxlICpkbW9kLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWlkX3Qg ZG9taWQsIHVuc2lnbmVkIGludCBucl9idWZzLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCB4ZW5kZXZpY2Vtb2RlbF9idWYgYnVmc1tdKTsKKworaW50IG9zZGVwX3hlbmRldmljZW1v ZGVsX29wZW4oeGVuZGV2aWNlbW9kZWxfaGFuZGxlICpkbW9kKTsKK2ludCBvc2RlcF94ZW5kZXZp Y2Vtb2RlbF9jbG9zZSh4ZW5kZXZpY2Vtb2RlbF9oYW5kbGUgKmRtb2QpOworaW50IG9zZGVwX3hl bmRldmljZW1vZGVsX29wKHhlbmRldmljZW1vZGVsX2hhbmRsZSAqZG1vZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkb21pZF90IGRvbWlkLCB1bnNpZ25lZCBpbnQgbnJfYnVmcywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeGVuZGV2aWNlbW9kZWxfYnVmIGJ1ZnNb XSk7CisKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGMvTWFrZWZpbGUgYi90 b29scy9saWJ4Yy9NYWtlZmlsZQppbmRleCBhZjVlNDljLi5kYTY4OWM0IDEwMDY0NAotLS0gYS90 b29scy9saWJ4Yy9NYWtlZmlsZQorKysgYi90b29scy9saWJ4Yy9NYWtlZmlsZQpAQCAtNTAsNiAr NTAsNyBAQCBDVFJMX1NSQ1MtJChDT05GSUdfTmV0QlNEUnVtcCkgKz0geGNfbmV0YnNkLmMKIENU UkxfU1JDUy0kKENPTkZJR19NaW5pT1MpICs9IHhjX21pbmlvcy5jCiBDVFJMX1NSQ1MteSAgICAg ICArPSB4Y19ldnRjaG5fY29tcGF0LmMKIENUUkxfU1JDUy15ICAgICAgICs9IHhjX2dudHRhYl9j b21wYXQuYworQ1RSTF9TUkNTLXkgICAgICAgKz0geGNfZGV2aWNlbW9kZWxfY29tcGF0LmMKIAog R1VFU1RfU1JDUy15IDo9CiBHVUVTVF9TUkNTLXkgKz0geGdfcHJpdmF0ZS5jIHhjX3N1c3BlbmQu YwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGMvaW5jbHVkZS94ZW5jdHJsLmggYi90b29scy9saWJ4 Yy9pbmNsdWRlL3hlbmN0cmwuaAppbmRleCA4NWQ3ZmU1Li45MGNhNmFkIDEwMDY0NAotLS0gYS90 b29scy9saWJ4Yy9pbmNsdWRlL3hlbmN0cmwuaAorKysgYi90b29scy9saWJ4Yy9pbmNsdWRlL3hl bmN0cmwuaApAQCAtMTU5Miw1OSArMTU5Miw2IEBAIGludCB4Y19waHlzZGV2X3VubWFwX3BpcnEo eGNfaW50ZXJmYWNlICp4Y2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkb21pZCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBpcnEpOwogCi1pbnQgeGNfaHZtX3NldF9w Y2lfaW50eF9sZXZlbCgKLSAgICB4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb20sCi0gICAg dWludDE2X3QgZG9tYWluLCB1aW50OF90IGJ1cywgdWludDhfdCBkZXZpY2UsIHVpbnQ4X3QgaW50 eCwKLSAgICB1bnNpZ25lZCBpbnQgbGV2ZWwpOwotaW50IHhjX2h2bV9zZXRfaXNhX2lycV9sZXZl bCgKLSAgICB4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb20sCi0gICAgdWludDhfdCBpc2Ff aXJxLAotICAgIHVuc2lnbmVkIGludCBsZXZlbCk7Ci0KLWludCB4Y19odm1fc2V0X3BjaV9saW5r X3JvdXRlKAotICAgIHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbSwgdWludDhfdCBsaW5r LCB1aW50OF90IGlzYV9pcnEpOwotCi1pbnQgeGNfaHZtX2luamVjdF9tc2koCi0gICAgeGNfaW50 ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9tLCB1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBkYXRhKTsK LQotLyoKLSAqIFRyYWNrIGRpcnR5IGJpdCBjaGFuZ2VzIGluIHRoZSBWUkFNIGFyZWEKLSAqCi0g KiBBbGwgb2YgdGhpcyBpcyBkb25lIGF0b21pY2FsbHk6Ci0gKiAtIGdldCB0aGUgZGlydHkgYml0 bWFwIHNpbmNlIHRoZSBsYXN0IGNhbGwKLSAqIC0gc2V0IHVwIGRpcnR5IHRyYWNraW5nIGFyZWEg Zm9yIHBlcmlvZCB1cCB0byB0aGUgbmV4dCBjYWxsCi0gKiAtIGNsZWFyIHRoZSBkaXJ0eSB0cmFj a2luZyBhcmVhLgotICoKLSAqIFJldHVybnMgLUVOT0RBVEEgYW5kIGRvZXMgbm90IGZpbGwgYml0 bWFwIGlmIHRoZSBhcmVhIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZQotICogbGFzdCBjYWxsLgotICov Ci1pbnQgeGNfaHZtX3RyYWNrX2RpcnR5X3ZyYW0oCi0gICAgeGNfaW50ZXJmYWNlICp4Y2gsIGRv bWlkX3QgZG9tLAotICAgIHVpbnQ2NF90IGZpcnN0X3BmbiwgdWludDMyX3QgbnIsCi0gICAgdW5z aWduZWQgbG9uZyAqYml0bWFwKTsKLQotLyoKLSAqIE5vdGlmeSB0aGF0IHNvbWUgcGFnZXMgZ290 IG1vZGlmaWVkIGJ5IHRoZSBEZXZpY2UgTW9kZWwKLSAqLwotaW50IHhjX2h2bV9tb2RpZmllZF9t ZW1vcnkoCi0gICAgeGNfaW50ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9tLCB1aW50NjRfdCBmaXJz dF9wZm4sIHVpbnQzMl90IG5yKTsKLQotLyoKLSAqIFNldCBhIHJhbmdlIG9mIG1lbW9yeSB0byBh IHNwZWNpZmljIHR5cGUuCi0gKiBBbGxvd2VkIHR5cGVzIGFyZSBIVk1NRU1fcmFtX3J3LCBIVk1N RU1fcmFtX3JvLCBIVk1NRU1fbW1pb19kbQotICovCi1pbnQgeGNfaHZtX3NldF9tZW1fdHlwZSgK LSAgICB4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb20sIGh2bW1lbV90eXBlX3QgbWVtdHlw ZSwgdWludDY0X3QgZmlyc3RfcGZuLCB1aW50MzJfdCBucik7Ci0KLS8qCi0gKiBJbmplY3RzIGEg aGFyZHdhcmUvc29mdHdhcmUgQ1BVIHRyYXAsIHRvIHRha2UgZWZmZWN0IHRoZSBuZXh0IHRpbWUg dGhlIEhWTSAKLSAqIHJlc3VtZXMuIAotICovCi1pbnQgeGNfaHZtX2luamVjdF90cmFwKAotICAg IHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbSwgaW50IHZjcHUsIHVpbnQ4X3QgdmVjdG9y LAotICAgIHVpbnQ4X3QgdHlwZSwgdWludDMyX3QgZXJyb3JfY29kZSwgdWludDhfdCBpbnNuX2xl biwKLSAgICB1aW50NjRfdCBjcjIpOwotCiAvKgogICogIExPR0dJTkcgQU5EIEVSUk9SIFJFUE9S VElORwogICovCkBAIC0xNjg5LDE1MCArMTYzNiw2IEBAIGludCB4Y19odm1fcGFyYW1fZ2V0KHhj X2ludGVyZmFjZSAqaGFuZGxlLCBkb21pZF90IGRvbSwgdWludDMyX3QgcGFyYW0sIHVpbnQ2NF90 CiBpbnQgeGNfc2V0X2h2bV9wYXJhbSh4Y19pbnRlcmZhY2UgKmhhbmRsZSwgZG9taWRfdCBkb20s IGludCBwYXJhbSwgdW5zaWduZWQgbG9uZyB2YWx1ZSk7CiBpbnQgeGNfZ2V0X2h2bV9wYXJhbSh4 Y19pbnRlcmZhY2UgKmhhbmRsZSwgZG9taWRfdCBkb20sIGludCBwYXJhbSwgdW5zaWduZWQgbG9u ZyAqdmFsdWUpOwogCi0vKgotICogSU9SRVEgU2VydmVyIEFQSS4gKFNlZSBzZWN0aW9uIG9uIElP UkVRIFNlcnZlcnMgaW4gcHVibGljL2h2bV9vcC5oKS4KLSAqLwotCi0vKioKLSAqIFRoaXMgZnVu Y3Rpb24gaW5zdGFudGlhdGVzIGFuIElPUkVRIFNlcnZlci4KLSAqCi0gKiBAcGFybSB4Y2ggYSBo YW5kbGUgdG8gYW4gb3BlbiBoeXBlcnZpc29yIGludGVyZmFjZS4KLSAqIEBwYXJtIGRvbWlkIHRo ZSBkb21haW4gaWQgdG8gYmUgc2VydmljZWQKLSAqIEBwYXJtIGhhbmRsZV9idWZpb3JlcSBob3cg c2hvdWxkIHRoZSBJT1JFUSBTZXJ2ZXIgaGFuZGxlIGJ1ZmZlcmVkIHJlcXVlc3RzCi0gKiAgICAg ICAgICAgICAgICAgICAgICAgKEhWTV9JT1JFUVNSVl9CVUZJT1JFUV8qKT8KLSAqIEBwYXJtIGlk IHBvaW50ZXIgdG8gYW4gaW9zZXJ2aWRfdCB0byByZWNlaXZlIHRoZSBJT1JFUSBTZXJ2ZXIgaWQu Ci0gKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KLSAqLwotaW50IHhjX2h2 bV9jcmVhdGVfaW9yZXFfc2VydmVyKHhjX2ludGVyZmFjZSAqeGNoLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRvbWlkX3QgZG9taWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IGhhbmRsZV9idWZpb3JlcSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpb3NlcnZpZF90ICppZCk7Ci0KLS8qKgotICogVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhl IG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBhbGxvdyBhbgotICogZW11bGF0b3IgdG8gdXNlIGFu IElPUkVRIFNlcnZlci4KLSAqCi0gKiBAcGFybSB4Y2ggYSBoYW5kbGUgdG8gYW4gb3BlbiBoeXBl cnZpc29yIGludGVyZmFjZS4KLSAqIEBwYXJtIGRvbWlkIHRoZSBkb21haW4gaWQgdG8gYmUgc2Vy dmljZWQKLSAqIEBwYXJtIGlkIHRoZSBJT1JFUSBTZXJ2ZXIgaWQuCi0gKiBAcGFybSBpb3JlcV9w Zm4gcG9pbnRlciB0byBhIHhlbl9wZm5fdCB0byByZWNlaXZlIHRoZSBzeW5jaHJvbm91cyBpb3Jl cSBnbWZuCi0gKiBAcGFybSBidWZpb3JlcV9wZm4gcG9pbnRlciB0byBhIHhlbl9wZm5fdCB0byBy ZWNlaXZlIHRoZSBidWZmZXJlZCBpb3JlcSBnbWZuCi0gKiBAcGFybSBidWZpb3JlcV9wb3J0IHBv aW50ZXIgdG8gYSBldnRjaG5fcG9ydF90IHRvIHJlY2VpdmUgdGhlIGJ1ZmZlcmVkIGlvcmVxIGV2 ZW50IGNoYW5uZWwKLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgotICov Ci1pbnQgeGNfaHZtX2dldF9pb3JlcV9zZXJ2ZXJfaW5mbyh4Y19pbnRlcmZhY2UgKnhjaCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWlkX3QgZG9taWQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpb3NlcnZpZF90IGlkLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgeGVuX3Bmbl90ICppb3JlcV9wZm4sCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB4ZW5fcGZuX3QgKmJ1ZmlvcmVxX3BmbiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGV2dGNobl9wb3J0X3QgKmJ1ZmlvcmVxX3BvcnQpOwotCi0vKioKLSAq IFRoaXMgZnVuY3Rpb24gc2V0cyBJT1JFUSBTZXJ2ZXIgc3RhdGUuIEFuIElPUkVRIFNlcnZlcgot ICogd2lsbCBub3QgYmUgcGFzc2VkIGVtdWxhdGlvbiByZXF1ZXN0cyB1bnRpbCBpdCBpcyBpbgot ICogdGhlIGVuYWJsZWQgc3RhdGUuCi0gKiBOb3RlIHRoYXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBp b3JlcV9wZm4gYW5kIGJ1ZmlvcmVxX3BmbiBhcmUKLSAqIG5vdCBtZWFuaW5nZnVsIHVudGlsIHRo ZSBJT1JFUSBTZXJ2ZXIgaXMgaW4gdGhlIGVuYWJsZWQgc3RhdGUuCi0gKgotICogQHBhcm0geGNo IGEgaGFuZGxlIHRvIGFuIG9wZW4gaHlwZXJ2aXNvciBpbnRlcmZhY2UuCi0gKiBAcGFybSBkb21p ZCB0aGUgZG9tYWluIGlkIHRvIGJlIHNlcnZpY2VkCi0gKiBAcGFybSBpZCB0aGUgSU9SRVEgU2Vy dmVyIGlkLgotICogQHBhcm0gZW5hYmxlZCB0aGUgc3RhdGUuCi0gKiBAcmV0dXJuIDAgb24gc3Vj Y2VzcywgLTEgb24gZmFpbHVyZS4KLSAqLwotaW50IHhjX2h2bV9zZXRfaW9yZXFfc2VydmVyX3N0 YXRlKHhjX2ludGVyZmFjZSAqeGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRvbWlkX3QgZG9taWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zZXJ2 aWRfdCBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW5hYmxlZCk7 Ci0KLS8qKgotICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSByYW5nZSBvZiBtZW1vcnkgb3Ig SS9PIHBvcnRzIGZvciBlbXVsYXRpb24uCi0gKgotICogQHBhcm0geGNoIGEgaGFuZGxlIHRvIGFu IG9wZW4gaHlwZXJ2aXNvciBpbnRlcmZhY2UuCi0gKiBAcGFybSBkb21pZCB0aGUgZG9tYWluIGlk IHRvIGJlIHNlcnZpY2VkCi0gKiBAcGFybSBpZCB0aGUgSU9SRVEgU2VydmVyIGlkLgotICogQHBh cm0gaXNfbW1pbyBpcyB0aGlzIGEgcmFuZ2Ugb2YgcG9ydHMgb3IgbWVtb3J5Ci0gKiBAcGFybSBz dGFydCBzdGFydCBvZiByYW5nZQotICogQHBhcm0gZW5kIGVuZCBvZiByYW5nZSAoaW5jbHVzaXZl KS4KLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgotICovCi1pbnQgeGNf aHZtX21hcF9pb19yYW5nZV90b19pb3JlcV9zZXJ2ZXIoeGNfaW50ZXJmYWNlICp4Y2gsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9taWRfdCBkb21pZCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NlcnZpZF90IGlkLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpc19tbWlvLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHN0YXJ0LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGVuZCk7Ci0KLS8qKgotICog VGhpcyBmdW5jdGlvbiBkZXJlZ2lzdGVycyBhIHJhbmdlIG9mIG1lbW9yeSBvciBJL08gcG9ydHMg Zm9yIGVtdWxhdGlvbi4KLSAqCi0gKiBAcGFybSB4Y2ggYSBoYW5kbGUgdG8gYW4gb3BlbiBoeXBl cnZpc29yIGludGVyZmFjZS4KLSAqIEBwYXJtIGRvbWlkIHRoZSBkb21haW4gaWQgdG8gYmUgc2Vy dmljZWQKLSAqIEBwYXJtIGlkIHRoZSBJT1JFUSBTZXJ2ZXIgaWQuCi0gKiBAcGFybSBpc19tbWlv IGlzIHRoaXMgYSByYW5nZSBvZiBwb3J0cyBvciBtZW1vcnkKLSAqIEBwYXJtIHN0YXJ0IHN0YXJ0 IG9mIHJhbmdlCi0gKiBAcGFybSBlbmQgZW5kIG9mIHJhbmdlIChpbmNsdXNpdmUpLgotICogQHJl dHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCi0gKi8KLWludCB4Y19odm1fdW5tYXBf aW9fcmFuZ2VfZnJvbV9pb3JlcV9zZXJ2ZXIoeGNfaW50ZXJmYWNlICp4Y2gsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWlkX3QgZG9taWQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc2VydmlkX3QgaWQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpc19tbWlvLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBzdGFydCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgZW5k KTsKLQotLyoqCi0gKiBUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhIFBDSSBkZXZpY2UgZm9yIGNv bmZpZyBzcGFjZSBlbXVsYXRpb24uCi0gKgotICogQHBhcm0geGNoIGEgaGFuZGxlIHRvIGFuIG9w ZW4gaHlwZXJ2aXNvciBpbnRlcmZhY2UuCi0gKiBAcGFybSBkb21pZCB0aGUgZG9tYWluIGlkIHRv IGJlIHNlcnZpY2VkCi0gKiBAcGFybSBpZCB0aGUgSU9SRVEgU2VydmVyIGlkLgotICogQHBhcm0g c2VnbWVudCB0aGUgUENJIHNlZ21lbnQgb2YgdGhlIGRldmljZQotICogQHBhcm0gYnVzIHRoZSBQ Q0kgYnVzIG9mIHRoZSBkZXZpY2UKLSAqIEBwYXJtIGRldmljZSB0aGUgJ3Nsb3QnIG51bWJlciBv ZiB0aGUgZGV2aWNlCi0gKiBAcGFybSBmdW5jdGlvbiB0aGUgZnVuY3Rpb24gbnVtYmVyIG9mIHRo ZSBkZXZpY2UKLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgotICovCi1p bnQgeGNfaHZtX21hcF9wY2lkZXZfdG9faW9yZXFfc2VydmVyKHhjX2ludGVyZmFjZSAqeGNoLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21pZF90IGRvbWlkLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NlcnZpZF90IGlkLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzZWdtZW50LAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGJ1cywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBkZXZpY2UsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZnVuY3Rpb24pOwotCi0vKioKLSAqIFRo aXMgZnVuY3Rpb24gZGVyZWdpc3RlcnMgYSBQQ0kgZGV2aWNlIGZvciBjb25maWcgc3BhY2UgZW11 bGF0aW9uLgotICoKLSAqIEBwYXJtIHhjaCBhIGhhbmRsZSB0byBhbiBvcGVuIGh5cGVydmlzb3Ig aW50ZXJmYWNlLgotICogQHBhcm0gZG9taWQgdGhlIGRvbWFpbiBpZCB0byBiZSBzZXJ2aWNlZAot ICogQHBhcm0gaWQgdGhlIElPUkVRIFNlcnZlciBpZC4KLSAqIEBwYXJtIHNlZ21lbnQgdGhlIFBD SSBzZWdtZW50IG9mIHRoZSBkZXZpY2UKLSAqIEBwYXJtIGJ1cyB0aGUgUENJIGJ1cyBvZiB0aGUg ZGV2aWNlCi0gKiBAcGFybSBkZXZpY2UgdGhlICdzbG90JyBudW1iZXIgb2YgdGhlIGRldmljZQot ICogQHBhcm0gZnVuY3Rpb24gdGhlIGZ1bmN0aW9uIG51bWJlciBvZiB0aGUgZGV2aWNlCi0gKiBA cmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KLSAqLwotaW50IHhjX2h2bV91bm1h cF9wY2lkZXZfZnJvbV9pb3JlcV9zZXJ2ZXIoeGNfaW50ZXJmYWNlICp4Y2gsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21pZF90IGRvbWlkLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zZXJ2aWRfdCBpZCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNlZ21lbnQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGJ1cywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZGV2aWNlLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBmdW5jdGlvbik7 Ci0KLS8qKgotICogVGhpcyBmdW5jdGlvbiBkZXN0cm95cyBhbiBJT1JFUSBTZXJ2ZXIuCi0gKgot ICogQHBhcm0geGNoIGEgaGFuZGxlIHRvIGFuIG9wZW4gaHlwZXJ2aXNvciBpbnRlcmZhY2UuCi0g KiBAcGFybSBkb21pZCB0aGUgZG9tYWluIGlkIHRvIGJlIHNlcnZpY2VkCi0gKiBAcGFybSBpZCB0 aGUgSU9SRVEgU2VydmVyIGlkLgotICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1 cmUuCi0gKi8KLWludCB4Y19odm1fZGVzdHJveV9pb3JlcV9zZXJ2ZXIoeGNfaW50ZXJmYWNlICp4 Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWlkX3QgZG9taWQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc2VydmlkX3QgaWQpOwotCiAvKiBIVk0gZ3Vl c3QgcGFzcy10aHJvdWdoICovCiBpbnQgeGNfYXNzaWduX2RldmljZSh4Y19pbnRlcmZhY2UgKnhj aCwKICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRvbWlkLApkaWZmIC0tZ2l0IGEvdG9v bHMvbGlieGMvaW5jbHVkZS94ZW5jdHJsX2NvbXBhdC5oIGIvdG9vbHMvbGlieGMvaW5jbHVkZS94 ZW5jdHJsX2NvbXBhdC5oCmluZGV4IDkzY2NhZGIuLjA0MGU3YjIgMTAwNjQ0Ci0tLSBhL3Rvb2xz L2xpYnhjL2luY2x1ZGUveGVuY3RybF9jb21wYXQuaAorKysgYi90b29scy9saWJ4Yy9pbmNsdWRl L3hlbmN0cmxfY29tcGF0LmgKQEAgLTEyMCw2ICsxMjAsNTMgQEAgaW50IHhjX2dudHNocl9tdW5t YXAoeGNfZ250c2hyICp4Y2csIHZvaWQgKnN0YXJ0X2FkZHJlc3MsIHVpbnQzMl90IGNvdW50KTsK IAogI2VuZGlmIC8qIFhDX1dBTlRfQ09NUEFUX0dOVFRBQl9BUEkgKi8KIAorI2lmZGVmIFhDX1dB TlRfQ09NUEFUX0RFVklDRU1PREVMX0FQSQorCitpbnQgeGNfaHZtX2NyZWF0ZV9pb3JlcV9zZXJ2 ZXIoCisgICAgeGNfaW50ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9taWQsIGludCBoYW5kbGVfYnVm aW9yZXEsCisgICAgaW9zZXJ2aWRfdCAqaWQpOworaW50IHhjX2h2bV9nZXRfaW9yZXFfc2VydmVy X2luZm8oCisgICAgeGNfaW50ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9taWQsIGlvc2VydmlkX3Qg aWQsIHhlbl9wZm5fdCAqaW9yZXFfcGZuLAorICAgIHhlbl9wZm5fdCAqYnVmaW9yZXFfcGZuLCBl dnRjaG5fcG9ydF90ICpidWZpb3JlcV9wb3J0KTsKK2ludCB4Y19odm1fbWFwX2lvX3JhbmdlX3Rv X2lvcmVxX3NlcnZlcigKKyAgICB4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb21pZCwgaW9z ZXJ2aWRfdCBpZCwgaW50IGlzX21taW8sCisgICAgdWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGVu ZCk7CitpbnQgeGNfaHZtX3VubWFwX2lvX3JhbmdlX2Zyb21faW9yZXFfc2VydmVyKAorICAgIHhj X2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbWlkLCBpb3NlcnZpZF90IGlkLCBpbnQgaXNfbW1p bywKKyAgICB1aW50NjRfdCBzdGFydCwgdWludDY0X3QgZW5kKTsKK2ludCB4Y19odm1fbWFwX3Bj aWRldl90b19pb3JlcV9zZXJ2ZXIoCisgICAgeGNfaW50ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9t aWQsIGlvc2VydmlkX3QgaWQsIHVpbnQxNl90IHNlZ21lbnQsCisgICAgdWludDhfdCBidXMsIHVp bnQ4X3QgZGV2aWNlLCB1aW50OF90IGZ1bmN0aW9uKTsKK2ludCB4Y19odm1fdW5tYXBfcGNpZGV2 X2Zyb21faW9yZXFfc2VydmVyKAorICAgIHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbWlk LCBpb3NlcnZpZF90IGlkLCB1aW50MTZfdCBzZWdtZW50LAorICAgIHVpbnQ4X3QgYnVzLCB1aW50 OF90IGRldmljZSwgdWludDhfdCBmdW5jdGlvbik7CitpbnQgeGNfaHZtX2Rlc3Ryb3lfaW9yZXFf c2VydmVyKAorICAgIHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbWlkLCBpb3NlcnZpZF90 IGlkKTsKK2ludCB4Y19odm1fc2V0X2lvcmVxX3NlcnZlcl9zdGF0ZSgKKyAgICB4Y19pbnRlcmZh Y2UgKnhjaCwgZG9taWRfdCBkb21pZCwgaW9zZXJ2aWRfdCBpZCwgaW50IGVuYWJsZWQpOworaW50 IHhjX2h2bV9zZXRfcGNpX2ludHhfbGV2ZWwoCisgICAgeGNfaW50ZXJmYWNlICp4Y2gsIGRvbWlk X3QgZG9taWQsIHVpbnQxNl90IHNlZ21lbnQsIHVpbnQ4X3QgYnVzLAorICAgIHVpbnQ4X3QgZGV2 aWNlLCB1aW50OF90IGludHgsIHVuc2lnbmVkIGludCBsZXZlbCk7CitpbnQgeGNfaHZtX3NldF9p c2FfaXJxX2xldmVsKAorICAgIHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbWlkLCB1aW50 OF90IGlycSwgdW5zaWduZWQgaW50IGxldmVsKTsKK2ludCB4Y19odm1fc2V0X3BjaV9saW5rX3Jv dXRlKAorICAgIHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbWlkLCB1aW50OF90IGxpbmss IHVpbnQ4X3QgaXJxKTsKK2ludCB4Y19odm1faW5qZWN0X21zaSgKKyAgICB4Y19pbnRlcmZhY2Ug KnhjaCwgZG9taWRfdCBkb21pZCwgdWludDY0X3QgbXNpX2FkZHIsIHVpbnQzMl90IG1zaV9kYXRh KTsKK2ludCB4Y19odm1fdHJhY2tfZGlydHlfdnJhbSgKKyAgICB4Y19pbnRlcmZhY2UgKnhjaCwg ZG9taWRfdCBkb21pZCwgdWludDY0X3QgZmlyc3RfcGZuLCB1aW50MzJfdCBuciwKKyAgICB1bnNp Z25lZCBsb25nICpkaXJ0eV9iaXRtYXApOworaW50IHhjX2h2bV9tb2RpZmllZF9tZW1vcnkoCisg ICAgeGNfaW50ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9taWQsIHVpbnQ2NF90IGZpcnN0X3Bmbiwg dWludDMyX3QgbnIpOworaW50IHhjX2h2bV9zZXRfbWVtX3R5cGUoCisgICAgeGNfaW50ZXJmYWNl ICp4Y2gsIGRvbWlkX3QgZG9taWQsIGh2bW1lbV90eXBlX3QgdHlwZSwKKyAgICB1aW50NjRfdCBm aXJzdF9wZm4sIHVpbnQzMl90IG5yKTsKK2ludCB4Y19odm1faW5qZWN0X3RyYXAoCisgICAgeGNf aW50ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9taWQsIGludCB2Y3B1LCB1aW50OF90IHZlY3RvciwK KyAgICB1aW50OF90IHR5cGUsIHVpbnQzMl90IGVycm9yX2NvZGUsIHVpbnQ4X3QgaW5zbl9sZW4s IHVpbnQ2NF90IGNyMik7CisKKyNlbmRpZiAvKiBYQ19XQU5UX0NPTVBBVF9ERVZJQ0VNT0RFTF9B UEkgKi8KKwogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS90b29scy9saWJ4Yy94Y19kZXZpY2Vt b2RlbF9jb21wYXQuYyBiL3Rvb2xzL2xpYnhjL3hjX2RldmljZW1vZGVsX2NvbXBhdC5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZWRlZWEKLS0tIC9kZXYvbnVsbAorKysg Yi90b29scy9saWJ4Yy94Y19kZXZpY2Vtb2RlbF9jb21wYXQuYwpAQCAtMCwwICsxLDEzOSBAQAor LyoKKyAqIENvbXBhdCBzaGltcyBmb3IgdXNlIG9mIDNyZCBwYXJ0eSBjb25zdW1lcnMgb2YgbGli eGVuY3RybCBkZXZpY2UgbW9kZWwKKyAqIGZ1bmN0aW9uYWxpdHkgd2hpY2ggaGFzIGJlZW4gc3Bs aXQgaW50byBzZXBhcmF0ZSBsaWJyYXJpZXMuCisgKi8KKworI2RlZmluZSBYQ19XQU5UX0NPTVBB VF9ERVZJQ0VNT0RFTF9BUEkKKyNpbmNsdWRlICJ4Y19wcml2YXRlLmgiCisKK2ludCB4Y19odm1f Y3JlYXRlX2lvcmVxX3NlcnZlcigKKyAgICB4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb21p ZCwgaW50IGhhbmRsZV9idWZpb3JlcSwKKyAgICBpb3NlcnZpZF90ICppZCkKK3sKKyAgICByZXR1 cm4geGVuZGV2aWNlbW9kZWxfY3JlYXRlX2lvcmVxX3NlcnZlcih4Y2gtPmRtb2QsIGRvbWlkLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9idWZp b3JlcSwgaWQpOworfQorCitpbnQgeGNfaHZtX2dldF9pb3JlcV9zZXJ2ZXJfaW5mbygKKyAgICB4 Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb21pZCwgaW9zZXJ2aWRfdCBpZCwgeGVuX3Bmbl90 ICppb3JlcV9wZm4sCisgICAgeGVuX3Bmbl90ICpidWZpb3JlcV9wZm4sIGV2dGNobl9wb3J0X3Qg KmJ1ZmlvcmVxX3BvcnQpCit7CisgICAgcmV0dXJuIHhlbmRldmljZW1vZGVsX2dldF9pb3JlcV9z ZXJ2ZXJfaW5mbyh4Y2gtPmRtb2QsIGRvbWlkLCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlvcmVxX3BmbiwgYnVmaW9yZXFfcGZuLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmaW9yZXFfcG9ydCk7 Cit9CisKK2ludCB4Y19odm1fbWFwX2lvX3JhbmdlX3RvX2lvcmVxX3NlcnZlcigKKyAgICB4Y19p bnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb21pZCwgaW9zZXJ2aWRfdCBpZCwgaW50IGlzX21taW8s CisgICAgdWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGVuZCkKK3sKKyAgICByZXR1cm4geGVuZGV2 aWNlbW9kZWxfbWFwX2lvX3JhbmdlX3RvX2lvcmVxX3NlcnZlcih4Y2gtPmRtb2QsIGRvbWlkLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlk LCBpc19tbWlvLCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlbmQpOworfQorCitpbnQgeGNfaHZtX3VubWFwX2lvX3JhbmdlX2Zy b21faW9yZXFfc2VydmVyKAorICAgIHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbWlkLCBp b3NlcnZpZF90IGlkLCBpbnQgaXNfbW1pbywKKyAgICB1aW50NjRfdCBzdGFydCwgdWludDY0X3Qg ZW5kKQoreworICAgIHJldHVybiB4ZW5kZXZpY2Vtb2RlbF91bm1hcF9pb19yYW5nZV9mcm9tX2lv cmVxX3NlcnZlcih4Y2gtPmRtb2QsIGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCwgaXNfbW1pbywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIGVu ZCk7Cit9CisKK2ludCB4Y19odm1fbWFwX3BjaWRldl90b19pb3JlcV9zZXJ2ZXIoCisgICAgeGNf aW50ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9taWQsIGlvc2VydmlkX3QgaWQsIHVpbnQxNl90IHNl Z21lbnQsCisgICAgdWludDhfdCBidXMsIHVpbnQ4X3QgZGV2aWNlLCB1aW50OF90IGZ1bmN0aW9u KQoreworICAgIHJldHVybiB4ZW5kZXZpY2Vtb2RlbF9tYXBfcGNpZGV2X3RvX2lvcmVxX3NlcnZl cih4Y2gtPmRtb2QsIGRvbWlkLCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2VnbWVudCwgYnVzLCBkZXZpY2UsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKTsKK30KKwor aW50IHhjX2h2bV91bm1hcF9wY2lkZXZfZnJvbV9pb3JlcV9zZXJ2ZXIoCisgICAgeGNfaW50ZXJm YWNlICp4Y2gsIGRvbWlkX3QgZG9taWQsIGlvc2VydmlkX3QgaWQsIHVpbnQxNl90IHNlZ21lbnQs CisgICAgdWludDhfdCBidXMsIHVpbnQ4X3QgZGV2aWNlLCB1aW50OF90IGZ1bmN0aW9uKQorewor ICAgIHJldHVybiB4ZW5kZXZpY2Vtb2RlbF91bm1hcF9wY2lkZXZfZnJvbV9pb3JlcV9zZXJ2ZXIo eGNoLT5kbW9kLCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlkLCBzZWdtZW50LCBidXMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UsIGZ1bmN0aW9uKTsK K30KKworaW50IHhjX2h2bV9kZXN0cm95X2lvcmVxX3NlcnZlcigKKyAgICB4Y19pbnRlcmZhY2Ug KnhjaCwgZG9taWRfdCBkb21pZCwgaW9zZXJ2aWRfdCBpZCkKK3sKKyAgICByZXR1cm4geGVuZGV2 aWNlbW9kZWxfZGVzdHJveV9pb3JlcV9zZXJ2ZXIoeGNoLT5kbW9kLCBkb21pZCwgaWQpOworfQor CitpbnQgeGNfaHZtX3NldF9pb3JlcV9zZXJ2ZXJfc3RhdGUoCisgICAgeGNfaW50ZXJmYWNlICp4 Y2gsIGRvbWlkX3QgZG9taWQsIGlvc2VydmlkX3QgaWQsIGludCBlbmFibGVkKQoreworICAgIHJl dHVybiB4ZW5kZXZpY2Vtb2RlbF9zZXRfaW9yZXFfc2VydmVyX3N0YXRlKHhjaC0+ZG1vZCwgZG9t aWQsIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGVuYWJsZWQpOworfQorCitpbnQgeGNfaHZtX3NldF9wY2lfaW50eF9sZXZlbCgKKyAgICB4Y19p bnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb21pZCwgdWludDE2X3Qgc2VnbWVudCwgdWludDhfdCBi dXMsCisgICAgdWludDhfdCBkZXZpY2UsIHVpbnQ4X3QgaW50eCwgdW5zaWduZWQgaW50IGxldmVs KQoreworICAgIHJldHVybiB4ZW5kZXZpY2Vtb2RlbF9zZXRfcGNpX2ludHhfbGV2ZWwoeGNoLT5k bW9kLCBkb21pZCwgc2VnbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJ1cywgZGV2aWNlLCBpbnR4LCBsZXZlbCk7Cit9CisKK2ludCB4Y19odm1fc2V0 X2lzYV9pcnFfbGV2ZWwoCisgICAgeGNfaW50ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9taWQsIHVp bnQ4X3QgaXJxLCB1bnNpZ25lZCBpbnQgbGV2ZWwpCit7CisgICAgcmV0dXJuIHhlbmRldmljZW1v ZGVsX3NldF9pc2FfaXJxX2xldmVsKHhjaC0+ZG1vZCwgZG9taWQsIGlycSwgbGV2ZWwpOworfQor CitpbnQgeGNfaHZtX3NldF9wY2lfbGlua19yb3V0ZSgKKyAgICB4Y19pbnRlcmZhY2UgKnhjaCwg ZG9taWRfdCBkb21pZCwgdWludDhfdCBsaW5rLCB1aW50OF90IGlycSkKK3sKKyAgICByZXR1cm4g eGVuZGV2aWNlbW9kZWxfc2V0X3BjaV9saW5rX3JvdXRlKHhjaC0+ZG1vZCwgZG9taWQsIGxpbmss IGlycSk7Cit9CisKK2ludCB4Y19odm1faW5qZWN0X21zaSgKKyAgICB4Y19pbnRlcmZhY2UgKnhj aCwgZG9taWRfdCBkb21pZCwgdWludDY0X3QgbXNpX2FkZHIsIHVpbnQzMl90IG1zaV9kYXRhKQor eworICAgIHJldHVybiB4ZW5kZXZpY2Vtb2RlbF9pbmplY3RfbXNpKHhjaC0+ZG1vZCwgZG9taWQs IG1zaV9hZGRyLCBtc2lfZGF0YSk7Cit9CisKK2ludCB4Y19odm1fdHJhY2tfZGlydHlfdnJhbSgK KyAgICB4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb21pZCwgdWludDY0X3QgZmlyc3RfcGZu LCB1aW50MzJfdCBuciwKKyAgICB1bnNpZ25lZCBsb25nICpkaXJ0eV9iaXRtYXApCit7CisgICAg cmV0dXJuIHhlbmRldmljZW1vZGVsX3RyYWNrX2RpcnR5X3ZyYW0oeGNoLT5kbW9kLCBkb21pZCwg Zmlyc3RfcGZuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5y LCBkaXJ0eV9iaXRtYXApOworfQorCitpbnQgeGNfaHZtX21vZGlmaWVkX21lbW9yeSgKKyAgICB4 Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb21pZCwgdWludDY0X3QgZmlyc3RfcGZuLCB1aW50 MzJfdCBucikKK3sKKyAgICByZXR1cm4geGVuZGV2aWNlbW9kZWxfbW9kaWZpZWRfbWVtb3J5KHhj aC0+ZG1vZCwgZG9taWQsIGZpcnN0X3BmbiwgbnIpOworfQorCitpbnQgeGNfaHZtX3NldF9tZW1f dHlwZSgKKyAgICB4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb21pZCwgaHZtbWVtX3R5cGVf dCB0eXBlLAorICAgIHVpbnQ2NF90IGZpcnN0X3BmbiwgdWludDMyX3QgbnIpCit7CisgICAgcmV0 dXJuIHhlbmRldmljZW1vZGVsX3NldF9tZW1fdHlwZSh4Y2gtPmRtb2QsIGRvbWlkLCB0eXBlLCBm aXJzdF9wZm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucik7Cit9 CisKK2ludCB4Y19odm1faW5qZWN0X3RyYXAoCisgICAgeGNfaW50ZXJmYWNlICp4Y2gsIGRvbWlk X3QgZG9taWQsIGludCB2Y3B1LCB1aW50OF90IHZlY3RvciwKKyAgICB1aW50OF90IHR5cGUsIHVp bnQzMl90IGVycm9yX2NvZGUsIHVpbnQ4X3QgaW5zbl9sZW4sIHVpbnQ2NF90IGNyMikKK3sKKyAg ICByZXR1cm4geGVuZGV2aWNlbW9kZWxfaW5qZWN0X2V2ZW50KHhjaC0+ZG1vZCwgZG9taWQsIHZj cHUsIHZlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUs IGVycm9yX2NvZGUsIGluc25fbGVuLCBjcjIpOworfQorCisvKgorICogTG9jYWwgdmFyaWFibGVz OgorICogbW9kZTogQworICogYy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6 IDQKKyAqIHRhYi13aWR0aDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6Cisg Ki8KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhjL3hjX2RvbWFpbi5jIGIvdG9vbHMvbGlieGMveGNf ZG9tYWluLmMKaW5kZXggZmExZGFlYi4uZDg2MmU1MyAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGMv eGNfZG9tYWluLmMKKysrIGIvdG9vbHMvbGlieGMveGNfZG9tYWluLmMKQEAgLTE0MTIsMjA3ICsx NDEyLDYgQEAgaW50IHhjX2dldF9odm1fcGFyYW0oeGNfaW50ZXJmYWNlICpoYW5kbGUsIGRvbWlk X3QgZG9tLCBpbnQgcGFyYW0sIHVuc2lnbmVkIGxvbmcKICAgICByZXR1cm4gMDsKIH0KIAotaW50 IHhjX2h2bV9jcmVhdGVfaW9yZXFfc2VydmVyKHhjX2ludGVyZmFjZSAqeGNoLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRvbWlkX3QgZG9taWQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IGhhbmRsZV9idWZpb3JlcSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpb3NlcnZpZF90ICppZCkKLXsKLSAgICBzdHJ1Y3QgeGVuX2RtX29wIG9wOwotICAg IHN0cnVjdCB4ZW5fZG1fb3BfY3JlYXRlX2lvcmVxX3NlcnZlciAqZGF0YTsKLSAgICBpbnQgcmM7 Ci0KLSAgICBtZW1zZXQoJm9wLCAwLCBzaXplb2Yob3ApKTsKLQotICAgIG9wLm9wID0gWEVOX0RN T1BfY3JlYXRlX2lvcmVxX3NlcnZlcjsKLSAgICBkYXRhID0gJm9wLnUuY3JlYXRlX2lvcmVxX3Nl cnZlcjsKLQotICAgIGRhdGEtPmhhbmRsZV9idWZpb3JlcSA9IGhhbmRsZV9idWZpb3JlcTsKLQot ICAgIHJjID0gZG9fZG1fb3AoeGNoLCBkb21pZCwgMSwgJm9wLCBzaXplb2Yob3ApKTsKLSAgICBp ZiAoIHJjICkKLSAgICAgICAgcmV0dXJuIHJjOwotCi0gICAgKmlkID0gZGF0YS0+aWQ7Ci0KLSAg ICByZXR1cm4gMDsKLX0KLQotaW50IHhjX2h2bV9nZXRfaW9yZXFfc2VydmVyX2luZm8oeGNfaW50 ZXJmYWNlICp4Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21pZF90IGRv bWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zZXJ2aWRfdCBpZCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhlbl9wZm5fdCAqaW9yZXFfcGZuLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGVuX3Bmbl90ICpidWZpb3JlcV9wZm4sCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldnRjaG5fcG9ydF90ICpidWZpb3JlcV9w b3J0KQotewotICAgIHN0cnVjdCB4ZW5fZG1fb3Agb3A7Ci0gICAgc3RydWN0IHhlbl9kbV9vcF9n ZXRfaW9yZXFfc2VydmVyX2luZm8gKmRhdGE7Ci0gICAgaW50IHJjOwotCi0gICAgbWVtc2V0KCZv cCwgMCwgc2l6ZW9mKG9wKSk7Ci0KLSAgICBvcC5vcCA9IFhFTl9ETU9QX2dldF9pb3JlcV9zZXJ2 ZXJfaW5mbzsKLSAgICBkYXRhID0gJm9wLnUuZ2V0X2lvcmVxX3NlcnZlcl9pbmZvOwotCi0gICAg ZGF0YS0+aWQgPSBpZDsKLQotICAgIHJjID0gZG9fZG1fb3AoeGNoLCBkb21pZCwgMSwgJm9wLCBz aXplb2Yob3ApKTsKLSAgICBpZiAoIHJjICkKLSAgICAgICAgcmV0dXJuIHJjOwotCi0gICAgaWYg KCBpb3JlcV9wZm4gKQotICAgICAgICAqaW9yZXFfcGZuID0gZGF0YS0+aW9yZXFfcGZuOwotCi0g ICAgaWYgKCBidWZpb3JlcV9wZm4gKQotICAgICAgICAqYnVmaW9yZXFfcGZuID0gZGF0YS0+YnVm aW9yZXFfcGZuOwotCi0gICAgaWYgKCBidWZpb3JlcV9wb3J0ICkKLSAgICAgICAgKmJ1ZmlvcmVx X3BvcnQgPSBkYXRhLT5idWZpb3JlcV9wb3J0OwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCB4 Y19odm1fbWFwX2lvX3JhbmdlX3RvX2lvcmVxX3NlcnZlcih4Y19pbnRlcmZhY2UgKnhjaCwgZG9t aWRfdCBkb21pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3Nl cnZpZF90IGlkLCBpbnQgaXNfbW1pbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1aW50NjRfdCBzdGFydCwgdWludDY0X3QgZW5kKQotewotICAgIHN0cnVjdCB4ZW5f ZG1fb3Agb3A7Ci0gICAgc3RydWN0IHhlbl9kbV9vcF9pb3JlcV9zZXJ2ZXJfcmFuZ2UgKmRhdGE7 Ci0KLSAgICBtZW1zZXQoJm9wLCAwLCBzaXplb2Yob3ApKTsKLQotICAgIG9wLm9wID0gWEVOX0RN T1BfbWFwX2lvX3JhbmdlX3RvX2lvcmVxX3NlcnZlcjsKLSAgICBkYXRhID0gJm9wLnUubWFwX2lv X3JhbmdlX3RvX2lvcmVxX3NlcnZlcjsKLQotICAgIGRhdGEtPmlkID0gaWQ7Ci0gICAgZGF0YS0+ dHlwZSA9IGlzX21taW8gPyBYRU5fRE1PUF9JT19SQU5HRV9NRU1PUlkgOiBYRU5fRE1PUF9JT19S QU5HRV9QT1JUOwotICAgIGRhdGEtPnN0YXJ0ID0gc3RhcnQ7Ci0gICAgZGF0YS0+ZW5kID0gZW5k OwotCi0gICAgcmV0dXJuIGRvX2RtX29wKHhjaCwgZG9taWQsIDEsICZvcCwgc2l6ZW9mKG9wKSk7 Ci19Ci0KLWludCB4Y19odm1fdW5tYXBfaW9fcmFuZ2VfZnJvbV9pb3JlcV9zZXJ2ZXIoeGNfaW50 ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9taWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlvc2VydmlkX3QgaWQsIGludCBpc19tbWlvLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBzdGFydCwgdWludDY0X3Qg ZW5kKQotewotICAgIHN0cnVjdCB4ZW5fZG1fb3Agb3A7Ci0gICAgc3RydWN0IHhlbl9kbV9vcF9p b3JlcV9zZXJ2ZXJfcmFuZ2UgKmRhdGE7Ci0KLSAgICBtZW1zZXQoJm9wLCAwLCBzaXplb2Yob3Ap KTsKLQotICAgIG9wLm9wID0gWEVOX0RNT1BfdW5tYXBfaW9fcmFuZ2VfZnJvbV9pb3JlcV9zZXJ2 ZXI7Ci0gICAgZGF0YSA9ICZvcC51LnVubWFwX2lvX3JhbmdlX2Zyb21faW9yZXFfc2VydmVyOwot Ci0gICAgZGF0YS0+aWQgPSBpZDsKLSAgICBkYXRhLT50eXBlID0gaXNfbW1pbyA/IFhFTl9ETU9Q X0lPX1JBTkdFX01FTU9SWSA6IFhFTl9ETU9QX0lPX1JBTkdFX1BPUlQ7Ci0gICAgZGF0YS0+c3Rh cnQgPSBzdGFydDsKLSAgICBkYXRhLT5lbmQgPSBlbmQ7Ci0KLSAgICByZXR1cm4gZG9fZG1fb3Ao eGNoLCBkb21pZCwgMSwgJm9wLCBzaXplb2Yob3ApKTsKLX0KLQotaW50IHhjX2h2bV9tYXBfcGNp ZGV2X3RvX2lvcmVxX3NlcnZlcih4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb21pZCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zZXJ2aWRfdCBpZCwgdWludDE2 X3Qgc2VnbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhf dCBidXMsIHVpbnQ4X3QgZGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1aW50OF90IGZ1bmN0aW9uKQotewotICAgIHN0cnVjdCB4ZW5fZG1fb3Agb3A7Ci0gICAg c3RydWN0IHhlbl9kbV9vcF9pb3JlcV9zZXJ2ZXJfcmFuZ2UgKmRhdGE7Ci0KLSAgICBpZiAoZGV2 aWNlID4gMHgxZiB8fCBmdW5jdGlvbiA+IDB4NykgewotICAgICAgICBlcnJubyA9IEVJTlZBTDsK LSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIG1lbXNldCgmb3AsIDAsIHNpemVvZihv cCkpOwotCi0gICAgb3Aub3AgPSBYRU5fRE1PUF9tYXBfaW9fcmFuZ2VfdG9faW9yZXFfc2VydmVy OwotICAgIGRhdGEgPSAmb3AudS5tYXBfaW9fcmFuZ2VfdG9faW9yZXFfc2VydmVyOwotCi0gICAg ZGF0YS0+aWQgPSBpZDsKLSAgICBkYXRhLT50eXBlID0gWEVOX0RNT1BfSU9fUkFOR0VfUENJOwot Ci0gICAgLyoKLSAgICAgKiBUaGUgdW5kZXJseWluZyBoeXBlcmNhbGwgd2lsbCBkZWFsIHdpdGgg cmFuZ2VzIG9mIFBDSSBTQkRGCi0gICAgICogYnV0LCBmb3Igc2ltcGxpY2l0eSwgdGhlIEFQSSBv bmx5IHVzZXMgc2luZ2xldG9ucy4KLSAgICAgKi8KLSAgICBkYXRhLT5zdGFydCA9IGRhdGEtPmVu ZCA9IFhFTl9ETU9QX1BDSV9TQkRGKCh1aW50NjRfdClzZWdtZW50LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KWJ1cywKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50NjRfdClkZXZpY2Us Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDY0 X3QpZnVuY3Rpb24pOwotCi0gICAgcmV0dXJuIGRvX2RtX29wKHhjaCwgZG9taWQsIDEsICZvcCwg c2l6ZW9mKG9wKSk7Ci19Ci0KLWludCB4Y19odm1fdW5tYXBfcGNpZGV2X2Zyb21faW9yZXFfc2Vy dmVyKHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbWlkLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW9zZXJ2aWRfdCBpZCwgdWludDE2X3Qgc2VnbWVudCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYnVzLCB1 aW50OF90IGRldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQ4X3QgZnVuY3Rpb24pCi17Ci0gICAgc3RydWN0IHhlbl9kbV9vcCBvcDsKLSAgICBzdHJ1 Y3QgeGVuX2RtX29wX2lvcmVxX3NlcnZlcl9yYW5nZSAqZGF0YTsKLQotICAgIGlmIChkZXZpY2Ug PiAweDFmIHx8IGZ1bmN0aW9uID4gMHg3KSB7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAg ICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgbWVtc2V0KCZvcCwgMCwgc2l6ZW9mKG9wKSk7 Ci0KLSAgICBvcC5vcCA9IFhFTl9ETU9QX3VubWFwX2lvX3JhbmdlX2Zyb21faW9yZXFfc2VydmVy OwotICAgIGRhdGEgPSAmb3AudS51bm1hcF9pb19yYW5nZV9mcm9tX2lvcmVxX3NlcnZlcjsKLQot ICAgIGRhdGEtPmlkID0gaWQ7Ci0gICAgZGF0YS0+dHlwZSA9IFhFTl9ETU9QX0lPX1JBTkdFX1BD STsKLQotICAgIC8qCi0gICAgICogVGhlIHVuZGVybHlpbmcgaHlwZXJjYWxsIHdpbGwgZGVhbCB3 aXRoIHJhbmdlcyBvZiBQQ0kgU0JERgotICAgICAqIGJ1dCwgZm9yIHNpbXBsaWNpdHksIHRoZSBB UEkgb25seSB1c2VzIHNpbmdsZXRvbnMuCi0gICAgICovCi0gICAgZGF0YS0+c3RhcnQgPSBkYXRh LT5lbmQgPSBYRU5fRE1PUF9QQ0lfU0JERigodWludDY0X3Qpc2VnbWVudCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50NjRfdClidXMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpZGV2 aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVp bnQ2NF90KWZ1bmN0aW9uKTsKLQotICAgIHJldHVybiBkb19kbV9vcCh4Y2gsIGRvbWlkLCAxLCAm b3AsIHNpemVvZihvcCkpOwotfQotCi1pbnQgeGNfaHZtX2Rlc3Ryb3lfaW9yZXFfc2VydmVyKHhj X2ludGVyZmFjZSAqeGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21pZF90 IGRvbWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NlcnZpZF90IGlkKQot ewotICAgIHN0cnVjdCB4ZW5fZG1fb3Agb3A7Ci0gICAgc3RydWN0IHhlbl9kbV9vcF9kZXN0cm95 X2lvcmVxX3NlcnZlciAqZGF0YTsKLQotICAgIG1lbXNldCgmb3AsIDAsIHNpemVvZihvcCkpOwot Ci0gICAgb3Aub3AgPSBYRU5fRE1PUF9kZXN0cm95X2lvcmVxX3NlcnZlcjsKLSAgICBkYXRhID0g Jm9wLnUuZGVzdHJveV9pb3JlcV9zZXJ2ZXI7Ci0KLSAgICBkYXRhLT5pZCA9IGlkOwotCi0gICAg cmV0dXJuIGRvX2RtX29wKHhjaCwgZG9taWQsIDEsICZvcCwgc2l6ZW9mKG9wKSk7Ci19Ci0KLWlu dCB4Y19odm1fc2V0X2lvcmVxX3NlcnZlcl9zdGF0ZSh4Y19pbnRlcmZhY2UgKnhjaCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21pZF90IGRvbWlkLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlvc2VydmlkX3QgaWQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IGVuYWJsZWQpCi17Ci0gICAgc3RydWN0IHhlbl9kbV9vcCBvcDsK LSAgICBzdHJ1Y3QgeGVuX2RtX29wX3NldF9pb3JlcV9zZXJ2ZXJfc3RhdGUgKmRhdGE7Ci0KLSAg ICBtZW1zZXQoJm9wLCAwLCBzaXplb2Yob3ApKTsKLQotICAgIG9wLm9wID0gWEVOX0RNT1Bfc2V0 X2lvcmVxX3NlcnZlcl9zdGF0ZTsKLSAgICBkYXRhID0gJm9wLnUuc2V0X2lvcmVxX3NlcnZlcl9z dGF0ZTsKLQotICAgIGRhdGEtPmlkID0gaWQ7Ci0gICAgZGF0YS0+ZW5hYmxlZCA9ICEhZW5hYmxl ZDsKLQotICAgIHJldHVybiBkb19kbV9vcCh4Y2gsIGRvbWlkLCAxLCAmb3AsIHNpemVvZihvcCkp OwotfQotCiBpbnQgeGNfZG9tYWluX3NldGRlYnVnZ2luZyh4Y19pbnRlcmZhY2UgKnhjaCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRvbWlkLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IGVuYWJsZSkKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhj L3hjX21pc2MuYyBiL3Rvb2xzL2xpYnhjL3hjX21pc2MuYwppbmRleCAwZmM2YzIyLi44ODA4NGZk IDEwMDY0NAotLS0gYS90b29scy9saWJ4Yy94Y19taXNjLmMKKysrIGIvdG9vbHMvbGlieGMveGNf bWlzYy5jCkBAIC00NjcsMTYwICs0NjcsNiBAQCBpbnQgeGNfZ2V0Y3B1aW5mbyh4Y19pbnRlcmZh Y2UgKnhjaCwgaW50IG1heF9jcHVzLAogICAgIHJldHVybiByYzsKIH0KIAotCi1pbnQgeGNfaHZt X3NldF9wY2lfaW50eF9sZXZlbCgKLSAgICB4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb20s Ci0gICAgdWludDE2X3QgZG9tYWluLCB1aW50OF90IGJ1cywgdWludDhfdCBkZXZpY2UsIHVpbnQ4 X3QgaW50eCwKLSAgICB1bnNpZ25lZCBpbnQgbGV2ZWwpCi17Ci0gICAgc3RydWN0IHhlbl9kbV9v cCBvcDsKLSAgICBzdHJ1Y3QgeGVuX2RtX29wX3NldF9wY2lfaW50eF9sZXZlbCAqZGF0YTsKLQot ICAgIG1lbXNldCgmb3AsIDAsIHNpemVvZihvcCkpOwotCi0gICAgb3Aub3AgPSBYRU5fRE1PUF9z ZXRfcGNpX2ludHhfbGV2ZWw7Ci0gICAgZGF0YSA9ICZvcC51LnNldF9wY2lfaW50eF9sZXZlbDsK LQotICAgIGRhdGEtPmRvbWFpbiA9IGRvbWFpbjsKLSAgICBkYXRhLT5idXMgPSBidXM7Ci0gICAg ZGF0YS0+ZGV2aWNlID0gZGV2aWNlOwotICAgIGRhdGEtPmludHggPSBpbnR4OwotICAgIGRhdGEt PmxldmVsID0gbGV2ZWw7Ci0KLSAgICByZXR1cm4gZG9fZG1fb3AoeGNoLCBkb20sIDEsICZvcCwg c2l6ZW9mKG9wKSk7Ci19Ci0KLWludCB4Y19odm1fc2V0X2lzYV9pcnFfbGV2ZWwoCi0gICAgeGNf aW50ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9tLAotICAgIHVpbnQ4X3QgaXNhX2lycSwKLSAgICB1 bnNpZ25lZCBpbnQgbGV2ZWwpCi17Ci0gICAgc3RydWN0IHhlbl9kbV9vcCBvcDsKLSAgICBzdHJ1 Y3QgeGVuX2RtX29wX3NldF9pc2FfaXJxX2xldmVsICpkYXRhOwotCi0gICAgbWVtc2V0KCZvcCwg MCwgc2l6ZW9mKG9wKSk7Ci0KLSAgICBvcC5vcCA9IFhFTl9ETU9QX3NldF9pc2FfaXJxX2xldmVs OwotICAgIGRhdGEgPSAmb3AudS5zZXRfaXNhX2lycV9sZXZlbDsKLQotICAgIGRhdGEtPmlzYV9p cnEgPSBpc2FfaXJxOwotICAgIGRhdGEtPmxldmVsID0gbGV2ZWw7Ci0KLSAgICByZXR1cm4gZG9f ZG1fb3AoeGNoLCBkb20sIDEsICZvcCwgc2l6ZW9mKG9wKSk7Ci19Ci0KLWludCB4Y19odm1fc2V0 X3BjaV9saW5rX3JvdXRlKAotICAgIHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbSwgdWlu dDhfdCBsaW5rLCB1aW50OF90IGlzYV9pcnEpCi17Ci0gICAgc3RydWN0IHhlbl9kbV9vcCBvcDsK LSAgICBzdHJ1Y3QgeGVuX2RtX29wX3NldF9wY2lfbGlua19yb3V0ZSAqZGF0YTsKLQotICAgIG1l bXNldCgmb3AsIDAsIHNpemVvZihvcCkpOwotCi0gICAgb3Aub3AgPSBYRU5fRE1PUF9zZXRfcGNp X2xpbmtfcm91dGU7Ci0gICAgZGF0YSA9ICZvcC51LnNldF9wY2lfbGlua19yb3V0ZTsKLQotICAg IGRhdGEtPmxpbmsgPSBsaW5rOwotICAgIGRhdGEtPmlzYV9pcnEgPSBpc2FfaXJxOwotCi0gICAg cmV0dXJuIGRvX2RtX29wKHhjaCwgZG9tLCAxLCAmb3AsIHNpemVvZihvcCkpOwotfQotCi1pbnQg eGNfaHZtX2luamVjdF9tc2koCi0gICAgeGNfaW50ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9tLCB1 aW50NjRfdCBtc2lfYWRkciwgdWludDMyX3QgbXNpX2RhdGEpCi17Ci0gICAgc3RydWN0IHhlbl9k bV9vcCBvcDsKLSAgICBzdHJ1Y3QgeGVuX2RtX29wX2luamVjdF9tc2kgKmRhdGE7Ci0KLSAgICBt ZW1zZXQoJm9wLCAwLCBzaXplb2Yob3ApKTsKLQotICAgIG9wLm9wID0gWEVOX0RNT1BfaW5qZWN0 X21zaTsKLSAgICBkYXRhID0gJm9wLnUuaW5qZWN0X21zaTsKLQotICAgIGRhdGEtPmFkZHIgPSBt c2lfYWRkcjsKLSAgICBkYXRhLT5kYXRhID0gbXNpX2RhdGE7Ci0KLSAgICByZXR1cm4gZG9fZG1f b3AoeGNoLCBkb20sIDEsICZvcCwgc2l6ZW9mKG9wKSk7Ci19Ci0KLWludCB4Y19odm1fdHJhY2tf ZGlydHlfdnJhbSgKLSAgICB4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb20sCi0gICAgdWlu dDY0X3QgZmlyc3RfcGZuLCB1aW50MzJfdCBuciwKLSAgICB1bnNpZ25lZCBsb25nICpkaXJ0eV9i aXRtYXApCi17Ci0gICAgc3RydWN0IHhlbl9kbV9vcCBvcDsKLSAgICBzdHJ1Y3QgeGVuX2RtX29w X3RyYWNrX2RpcnR5X3ZyYW0gKmRhdGE7Ci0KLSAgICBtZW1zZXQoJm9wLCAwLCBzaXplb2Yob3Ap KTsKLQotICAgIG9wLm9wID0gWEVOX0RNT1BfdHJhY2tfZGlydHlfdnJhbTsKLSAgICBkYXRhID0g Jm9wLnUudHJhY2tfZGlydHlfdnJhbTsKLQotICAgIGRhdGEtPmZpcnN0X3BmbiA9IGZpcnN0X3Bm bjsKLSAgICBkYXRhLT5uciA9IG5yOwotCi0gICAgcmV0dXJuIGRvX2RtX29wKHhjaCwgZG9tLCAy LCAmb3AsIHNpemVvZihvcCksCi0gICAgICAgICAgICAgICAgICAgIGRpcnR5X2JpdG1hcCwgKG5y ICsgNykgLyA4KTsKLX0KLQotaW50IHhjX2h2bV9tb2RpZmllZF9tZW1vcnkoCi0gICAgeGNfaW50 ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9tLCB1aW50NjRfdCBmaXJzdF9wZm4sIHVpbnQzMl90IG5y KQotewotICAgIHN0cnVjdCB4ZW5fZG1fb3Agb3A7Ci0gICAgc3RydWN0IHhlbl9kbV9vcF9tb2Rp ZmllZF9tZW1vcnkgKmRhdGE7Ci0KLSAgICBtZW1zZXQoJm9wLCAwLCBzaXplb2Yob3ApKTsKLQot ICAgIG9wLm9wID0gWEVOX0RNT1BfbW9kaWZpZWRfbWVtb3J5OwotICAgIGRhdGEgPSAmb3AudS5t b2RpZmllZF9tZW1vcnk7Ci0KLSAgICBkYXRhLT5maXJzdF9wZm4gPSBmaXJzdF9wZm47Ci0gICAg ZGF0YS0+bnIgPSBucjsKLQotICAgIHJldHVybiBkb19kbV9vcCh4Y2gsIGRvbSwgMSwgJm9wLCBz aXplb2Yob3ApKTsKLX0KLQotaW50IHhjX2h2bV9zZXRfbWVtX3R5cGUoCi0gICAgeGNfaW50ZXJm YWNlICp4Y2gsIGRvbWlkX3QgZG9tLCBodm1tZW1fdHlwZV90IG1lbV90eXBlLCB1aW50NjRfdCBm aXJzdF9wZm4sIHVpbnQzMl90IG5yKQotewotICAgIHN0cnVjdCB4ZW5fZG1fb3Agb3A7Ci0gICAg c3RydWN0IHhlbl9kbV9vcF9zZXRfbWVtX3R5cGUgKmRhdGE7Ci0KLSAgICBtZW1zZXQoJm9wLCAw LCBzaXplb2Yob3ApKTsKLQotICAgIG9wLm9wID0gWEVOX0RNT1Bfc2V0X21lbV90eXBlOwotICAg IGRhdGEgPSAmb3AudS5zZXRfbWVtX3R5cGU7Ci0KLSAgICBkYXRhLT5tZW1fdHlwZSA9IG1lbV90 eXBlOwotICAgIGRhdGEtPmZpcnN0X3BmbiA9IGZpcnN0X3BmbjsKLSAgICBkYXRhLT5uciA9IG5y OwotCi0gICAgcmV0dXJuIGRvX2RtX29wKHhjaCwgZG9tLCAxLCAmb3AsIHNpemVvZihvcCkpOwot fQotCi1pbnQgeGNfaHZtX2luamVjdF90cmFwKAotICAgIHhjX2ludGVyZmFjZSAqeGNoLCBkb21p ZF90IGRvbSwgaW50IHZjcHUsIHVpbnQ4X3QgdmVjdG9yLAotICAgIHVpbnQ4X3QgdHlwZSwgdWlu dDMyX3QgZXJyb3JfY29kZSwgdWludDhfdCBpbnNuX2xlbiwKLSAgICB1aW50NjRfdCBjcjIpCi17 Ci0gICAgc3RydWN0IHhlbl9kbV9vcCBvcDsKLSAgICBzdHJ1Y3QgeGVuX2RtX29wX2luamVjdF9l dmVudCAqZGF0YTsKLQotICAgIG1lbXNldCgmb3AsIDAsIHNpemVvZihvcCkpOwotCi0gICAgb3Au b3AgPSBYRU5fRE1PUF9pbmplY3RfZXZlbnQ7Ci0gICAgZGF0YSA9ICZvcC51LmluamVjdF9ldmVu dDsKLQotICAgIGRhdGEtPnZjcHVpZCA9IHZjcHU7Ci0gICAgZGF0YS0+dmVjdG9yID0gdmVjdG9y OwotICAgIGRhdGEtPnR5cGUgPSB0eXBlOwotICAgIGRhdGEtPmVycm9yX2NvZGUgPSBlcnJvcl9j b2RlOwotICAgIGRhdGEtPmluc25fbGVuID0gaW5zbl9sZW47Ci0gICAgZGF0YS0+Y3IyID0gY3Iy OwotCi0gICAgcmV0dXJuIGRvX2RtX29wKHhjaCwgZG9tLCAxLCAmb3AsIHNpemVvZihvcCkpOwot fQotCiBpbnQgeGNfbGl2ZXBhdGNoX3VwbG9hZCh4Y19pbnRlcmZhY2UgKnhjaCwKICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBjaGFyICpwYXlsb2FkLApkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGMveGNfcHJpdmF0ZS5j IGIvdG9vbHMvbGlieGMveGNfcHJpdmF0ZS5jCmluZGV4IDMyMzc5YjYuLmRjOGExZTcgMTAwNjQ0 Ci0tLSBhL3Rvb2xzL2xpYnhjL3hjX3ByaXZhdGUuYworKysgYi90b29scy9saWJ4Yy94Y19wcml2 YXRlLmMKQEAgLTc4NSw3OSArNzg1LDYgQEAgaW50IHhjX2ZmczY0KHVpbnQ2NF90IHgpCiAgICAg cmV0dXJuIGwgPyB4Y19mZnMzMihsKSA6IGggPyB4Y19mZnMzMihoKSArIDMyIDogMDsKIH0KIAot aW50IGRvX2RtX29wKHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbWlkLCB1bnNpZ25lZCBp bnQgbnJfYnVmcywgLi4uKQotewotICAgIGludCByZXQgPSAtMTsKLSAgICBzdHJ1Y3QgIHsKLSAg ICAgICAgdm9pZCAqdTsKLSAgICAgICAgdm9pZCAqaDsKLSAgICB9ICpib3VuY2U7Ci0gICAgREVD TEFSRV9IWVBFUkNBTExfQlVGRkVSKHhlbl9kbV9vcF9idWZfdCwgYnVmcyk7Ci0gICAgdmFfbGlz dCBhcmdzOwotICAgIHVuc2lnbmVkIGludCBpZHg7Ci0KLSAgICBib3VuY2UgPSBjYWxsb2MobnJf YnVmcywgc2l6ZW9mKCpib3VuY2UpKTsKLSAgICBpZiAoIGJvdW5jZSA9PSBOVUxMICkKLSAgICAg ICAgZ290byBmYWlsMTsKLQotICAgIGJ1ZnMgPSB4Y19oeXBlcmNhbGxfYnVmZmVyX2FsbG9jKHhj aCwgYnVmcywgc2l6ZW9mKCpidWZzKSAqIG5yX2J1ZnMpOwotICAgIGlmICggYnVmcyA9PSBOVUxM ICkKLSAgICAgICAgZ290byBmYWlsMjsKLQotICAgIHZhX3N0YXJ0KGFyZ3MsIG5yX2J1ZnMpOwot ICAgIGZvciAoIGlkeCA9IDA7IGlkeCA8IG5yX2J1ZnM7IGlkeCsrICkKLSAgICB7Ci0gICAgICAg IHZvaWQgKnUgPSB2YV9hcmcoYXJncywgdm9pZCAqKTsKLSAgICAgICAgc2l6ZV90IHNpemUgPSB2 YV9hcmcoYXJncywgc2l6ZV90KTsKLQotICAgICAgICBib3VuY2VbaWR4XS5oID0geGVuY2FsbF9h bGxvY19idWZmZXIoeGNoLT54Y2FsbCwgc2l6ZSk7Ci0gICAgICAgIGlmICggYm91bmNlW2lkeF0u aCA9PSBOVUxMICkKLSAgICAgICAgICAgIGJyZWFrOyAvKiBFcnJvciBwYXRoIGhhbmRsZWQgYWZ0 ZXIgdmFfZW5kKCkuICovCi0KLSAgICAgICAgbWVtY3B5KGJvdW5jZVtpZHhdLmgsIHUsIHNpemUp OwotICAgICAgICBib3VuY2VbaWR4XS51ID0gdTsKLQotICAgICAgICBzZXRfeGVuX2d1ZXN0X2hh bmRsZV9yYXcoYnVmc1tpZHhdLmgsIGJvdW5jZVtpZHhdLmgpOwotICAgICAgICBidWZzW2lkeF0u c2l6ZSA9IHNpemU7Ci0gICAgfQotICAgIHZhX2VuZChhcmdzKTsKLQotICAgIGlmICggaWR4ICE9 IG5yX2J1ZnMgKQotICAgICAgICBnb3RvIGZhaWwzOwotCi0gICAgcmV0ID0geGVuY2FsbDMoeGNo LT54Y2FsbCwgX19IWVBFUlZJU09SX2RtX29wLAotICAgICAgICAgICAgICAgICAgIGRvbWlkLCBu cl9idWZzLCBIWVBFUkNBTExfQlVGRkVSX0FTX0FSRyhidWZzKSk7Ci0gICAgaWYgKCByZXQgPCAw ICkKLSAgICAgICAgZ290byBmYWlsNDsKLQotICAgIHdoaWxlICggaWR4LS0gIT0gMCApCi0gICAg ewotICAgICAgICBtZW1jcHkoYm91bmNlW2lkeF0udSwgYm91bmNlW2lkeF0uaCwgYnVmc1tpZHhd LnNpemUpOwotICAgICAgICB4ZW5jYWxsX2ZyZWVfYnVmZmVyKHhjaC0+eGNhbGwsIGJvdW5jZVtp ZHhdLmgpOwotICAgIH0KLQotICAgIHhjX2h5cGVyY2FsbF9idWZmZXJfZnJlZSh4Y2gsIGJ1ZnMp OwotCi0gICAgZnJlZShib3VuY2UpOwotCi0gICAgcmV0dXJuIDA7Ci0KLSBmYWlsNDoKLSAgICBp ZHggPSBucl9idWZzOwotCi0gZmFpbDM6Ci0gICAgd2hpbGUgKCBpZHgtLSAhPSAwICkKLSAgICAg ICAgeGVuY2FsbF9mcmVlX2J1ZmZlcih4Y2gtPnhjYWxsLCBib3VuY2VbaWR4XS5oKTsKLQotICAg IHhjX2h5cGVyY2FsbF9idWZmZXJfZnJlZSh4Y2gsIGJ1ZnMpOwotCi0gZmFpbDI6Ci0gICAgZnJl ZShib3VuY2UpOwotCi0gZmFpbDE6Ci0gICAgcmV0dXJuIHJldDsKLX0KLQogLyoKICAqIExvY2Fs IHZhcmlhYmxlczoKICAqIG1vZGU6IEMKLS0gCjIuMS40CgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2 ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==