From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v4,1/3] usb: gadget: ccid: add support for USB CCID Gadget Device From: Marcus Folkesson Message-Id: <20180626081422.19237-1-marcus.folkesson@gmail.com> Date: Tue, 26 Jun 2018 10:14:20 +0200 To: Greg Kroah-Hartman , Jonathan Corbet , Felipe Balbi , davem@davemloft.net, Mauro Carvalho Chehab , Andrew Morton , Randy Dunlap , Ruslan Bilovol , Thomas Gleixner , Kate Stewart Cc: linux-usb@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Marcus Folkesson List-ID: Q2hpcCBDYXJkIEludGVyZmFjZSBEZXZpY2UgKENDSUQpIHByb3RvY29sIGlzIGEgVVNCIHByb3Rv Y29sIHRoYXQKYWxsb3dzIGEgc21hcnRjYXJkIGRldmljZSB0byBiZSBjb25uZWN0ZWQgdG8gYSBj b21wdXRlciB2aWEgYSBjYXJkCnJlYWRlciB1c2luZyBhIHN0YW5kYXJkIFVTQiBpbnRlcmZhY2Us IHdpdGhvdXQgdGhlIG5lZWQgZm9yIGVhY2ggbWFudWZhY3R1cmVyCm9mIHNtYXJ0Y2FyZHMgdG8g cHJvdmlkZSBpdHMgb3duIHJlYWRlciBvciBwcm90b2NvbC4KClRoaXMgZ2FkZ2V0IGRyaXZlciBt YWtlcyBMaW51eCBzaG93IHVwIGFzIGEgQ0NJRCBkZXZpY2UgdG8gdGhlIGhvc3QgYW5kIGxldCBh CnVzZXJzcGFjZSBkYWVtb24gYWN0IGFzIHRoZSBzbWFydGNhcmQuCgpUaGlzIGlzIHVzZWZ1bCB3 aGVuIHRoZSBMaW51eCBnYWRnZXQgaXRzZWxmIHNob3VsZCBhY3QgYXMgYSBjcnlwdG9ncmFwaGlj CmRldmljZSBvciBmb3J3YXJkIEFQRFVzIHRvIGFuIGVtYmVkZGVkIHNtYXJ0Y2FyZCBkZXZpY2Uu CgpTaWduZWQtb2ZmLWJ5OiBNYXJjdXMgRm9sa2Vzc29uIDxtYXJjdXMuZm9sa2Vzc29uQGdtYWls LmNvbT4KLS0tCgpOb3RlczoKICAgIHY0OgogICAgCS0gZml4IGNvbW1lbnRzIGZyb20gQW5keSwg VGhhbmtzIQogICAgCS0gYWRkICJXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSIgaW4gdGhlIFNQRFgg aWRlbnRpZmllciBmb3IgdWFwaS1oZWFkZXIKICAgIHYzOgogICAgCS0gZml4IHNwYXJzZSB3YXJu aW5ncyByZXBvcnRlZCBieSBrYnVpbGQgdGVzdCByb2JvdAogICAgdjI6CiAgICAJLSBhZGQgdGhl IG1pc3NpbmcgY2hhbmdlbG9nIHRleHQKCiBkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyAgICAg ICAgICAgfCAgMTcgKwogZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlIHwgICAx ICsKIGRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX2NjaWQuYyB8IDk4OSArKysrKysrKysr KysrKysrKysrKysrKysrKysKIGRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX2NjaWQuaCB8 ICA5MSArKysKIGluY2x1ZGUvdWFwaS9saW51eC91c2IvY2NpZC5oICAgICAgICB8ICA5MyArKysK IDUgZmlsZXMgY2hhbmdlZCwgMTE5MSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfY2NpZC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfY2NpZC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg aW5jbHVkZS91YXBpL2xpbnV4L3VzYi9jY2lkLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9n YWRnZXQvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCmluZGV4IDMxY2NlNzgw NWViMi4uYmRlYmRmMWZmYTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZp ZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtMTQ5LDYgKzE0OSw5IEBAIGNv bmZpZyBVU0JfTElCQ09NUE9TSVRFCiBjb25maWcgVVNCX0ZfQUNNCiAJdHJpc3RhdGUKIAorY29u ZmlnIFVTQl9GX0NDSUQKKwl0cmlzdGF0ZQorCiBjb25maWcgVVNCX0ZfU1NfTEIKIAl0cmlzdGF0 ZQogCkBAIC0yNDgsNiArMjUxLDIwIEBAIGNvbmZpZyBVU0JfQ09ORklHRlNfQUNNCiAJICBBQ00g c2VyaWFsIGxpbmsuICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGludGVyb3BlcmF0ZSB3 aXRoCiAJICBNUy1XaW5kb3dzIGhvc3RzIG9yIHdpdGggdGhlIExpbnV4LVVTQiAiY2RjLWFjbSIg ZHJpdmVyLgogCitjb25maWcgVVNCX0NPTkZJR0ZTX0NDSUQKKwlib29sICJDaGlwIENhcmQgSW50 ZXJmYWNlIERldmljZSAoQ0NJRCkiCisJZGVwZW5kcyBvbiBVU0JfQ09ORklHRlMKKwlzZWxlY3Qg VVNCX0ZfQ0NJRAorCWhlbHAKKwkgIFRoZSBDQ0lEIGZ1bmN0aW9uIGRyaXZlciBwcm92aWRlcyBn ZW5lcmljIGVtdWxhdGlvbiBvZiBhCisJICBDaGlwIENhcmQgSW50ZXJmYWNlIERldmljZSAoQ0NJ RCkuCisKKwkgIFlvdSB3aWxsIG5lZWQgYSB1c2VyIHNwYWNlIHNlcnZlciB0YWxraW5nIHRvIC9k ZXYvY2NpZGcqLAorCSAgc2luY2UgdGhlIGtlcm5lbCBpdHNlbGYgZG9lcyBub3QgaW1wbGVtZW50 IENDSUQvVFBEVS9BUERVCisJICBwcm90b2NvbC4KKworCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24s IHNlZSBEb2N1bWVudGF0aW9uL3VzYi9nYWRnZXRfY2NpZC5yc3QuCisKIGNvbmZpZyBVU0JfQ09O RklHRlNfT0JFWAogCWJvb2wgIk9iamVjdCBFeGNoYW5nZSBNb2RlbCAoQ0RDIE9CRVgpIgogCWRl cGVuZHMgb24gVVNCX0NPTkZJR0ZTCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVu Y3Rpb24vTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGUKaW5k ZXggNWQzYTZjZjAyMjE4Li42Mjk4NTEwMDllMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dh ZGdldC9mdW5jdGlvbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24v TWFrZWZpbGUKQEAgLTksNiArOSw3IEBAIGNjZmxhZ3MteQkJCSs9IC1JJChzcmN0cmVlKS9kcml2 ZXJzL3VzYi9nYWRnZXQvdWRjLwogIyBVU0IgRnVuY3Rpb25zCiB1c2JfZl9hY20teQkJCTo9IGZf YWNtLm8KIG9iai0kKENPTkZJR19VU0JfRl9BQ00pCQkrPSB1c2JfZl9hY20ubworb2JqLSQoQ09O RklHX1VTQl9GX0NDSUQpCSs9IGZfY2NpZC5vCiB1c2JfZl9zc19sYi15CQkJOj0gZl9sb29wYmFj ay5vIGZfc291cmNlc2luay5vCiBvYmotJChDT05GSUdfVVNCX0ZfU1NfTEIpCSs9IHVzYl9mX3Nz X2xiLm8KIG9iai0kKENPTkZJR19VU0JfVV9TRVJJQUwpCSs9IHVfc2VyaWFsLm8KZGlmZiAtLWdp dCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX2NjaWQuYyBiL2RyaXZlcnMvdXNiL2dh ZGdldC9mdW5jdGlvbi9mX2NjaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLjJhODkwZGNhMzFlMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdl dC9mdW5jdGlvbi9mX2NjaWQuYwpAQCAtMCwwICsxLDk4OSBAQAorLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBmX2NjaWQuYyAtLSBDaGlwIENhcmQgSW50ZXJmYWNl IERldmljZSAoQ0NJRCkgZnVuY3Rpb24gRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE4 IE1hcmN1cyBGb2xrZXNzb24gPG1hcmN1cy5mb2xrZXNzb25AZ21haWwuY29tPgorICovCisKKyNp bmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgorI2luY2x1 ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGlu dXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgv cG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNz Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2NvbXBvc2l0ZS5oPgorI2luY2x1ZGUgPHVhcGkvbGlu dXgvdXNiL2NjaWQuaD4KKworI2luY2x1ZGUgImZfY2NpZC5oIgorI2luY2x1ZGUgInVfZi5oIgor CisvKiBOdW1iZXIgb2YgdHggcmVxdWVzdHMgdG8gYWxsb2NhdGUgKi8KKyNkZWZpbmUgTl9UWF9S RVFTIDQKKworLyogTWF4aW11bSBudW1iZXIgb2YgZGV2aWNlcyAqLworI2RlZmluZSBDQ0lEX01J Tk9SUyA0CisKK3N0cnVjdCBjY2lkZ19idWxrX2RldiB7CisJYXRvbWljX3QgaXNfb3BlbjsKKwlh dG9taWNfdCByeF9yZXFfYnVzeTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCByZWFkX3dxOworCXdhaXRf cXVldWVfaGVhZF90IHdyaXRlX3dxOworCXN0cnVjdCB1c2JfcmVxdWVzdCAqcnhfcmVxOworCWF0 b21pY190IHJ4X2RvbmU7CisJc3RydWN0IGxpc3RfaGVhZCB0eF9pZGxlOworfTsKKworc3RydWN0 IGZfY2NpZGcgeworCXN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UJZnVuY19pbnN0OworCXN0 cnVjdCB1c2JfZnVuY3Rpb24gZnVuY3Rpb247CisJc3BpbmxvY2tfdCBsb2NrOworCWF0b21pY190 IG9ubGluZTsKKworCS8qIENoYXJhY3RlciBkZXZpY2UgKi8KKwlzdHJ1Y3QgY2RldiBjZGV2Owor CWludCBtaW5vcjsKKworCS8qIER5bmFtaWMgYXR0cmlidXRlcyAqLworCXUzMiBmZWF0dXJlczsK Kwl1MzIgcHJvdG9jb2xzOworCXU4IHBpbnN1cHBvcnQ7CisJdTggbnNsb3RzOworCXU4IGxjZGxh eW91dDsKKworCS8qIEVuZHBvaW50cyAqLworCXN0cnVjdCB1c2JfZXAgKmluOworCXN0cnVjdCB1 c2JfZXAgKm91dDsKKwlzdHJ1Y3QgY2NpZGdfYnVsa19kZXYgYnVsa19kZXY7Cit9OworCisvKiBJ bnRlcmZhY2UgRGVzY3JpcHRvcjogKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNj cmlwdG9yIGNjaWRfaW50ZXJmYWNlX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0lOVEVS RkFDRV9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAorCS5iTnVt RW5kcG9pbnRzID0JMiwKKwkuYkludGVyZmFjZUNsYXNzID0JVVNCX0NMQVNTX0NTQ0lELAorCS5i SW50ZXJmYWNlU3ViQ2xhc3MgPQkwLAorCS5iSW50ZXJmYWNlUHJvdG9jb2wgPQkwLAorfTsKKwor LyogQ0NJRCBDbGFzcyBEZXNjcmlwdG9yICovCitzdGF0aWMgc3RydWN0IGNjaWRfY2xhc3NfZGVz Y3JpcHRvciBjY2lkX2NsYXNzX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mKGNjaWRfY2xh c3NfZGVzYyksCisJLmJEZXNjcmlwdG9yVHlwZSA9CUNDSURfREVDUklQVE9SX1RZUEUsCisJLmJj ZENDSUQgPQkJY3B1X3RvX2xlMTYoQ0NJRDFfMTApLAorCS8qIC5iTWF4U2xvdEluZGV4ID0JRFlO QU1JQyAqLworCS5iVm9sdGFnZVN1cHBvcnQgPQlDQ0lEX1ZPTFRTXzNfMCwKKwkvKiAuZHdQcm90 b2NvbHMgPQlEWU5BTUlDICovCisJLmR3RGVmYXVsdENsb2NrID0JY3B1X3RvX2xlMzIoMzU4MCks CisJLmR3TWF4aW11bUNsb2NrID0JY3B1X3RvX2xlMzIoMzU4MCksCisJLmJOdW1DbG9ja1N1cHBv cnRlZCA9CTAsCisJLmR3RGF0YVJhdGUgPQkJY3B1X3RvX2xlMzIoOTYwMCksCisJLmR3TWF4RGF0 YVJhdGUgPQljcHVfdG9fbGUzMig5NjAwKSwKKwkuYk51bURhdGFSYXRlc1N1cHBvcnRlZCA9IDAs CisJLmR3TWF4SUZTRCA9CQkwLAorCS5kd1N5bmNoUHJvdG9jb2xzID0JMCwKKwkuZHdNZWNoYW5p Y2FsID0JCTAsCisJLyogLmR3RmVhdHVyZXMgPQlEWU5BTUlDICovCisKKwkvKiBleHRlbmRlZCBB UERVIGxldmVsIE1lc3NhZ2UgTGVuZ3RoICovCisJLmR3TWF4Q0NJRE1lc3NhZ2VMZW5ndGggPSBj cHVfdG9fbGUzMigweDIwMCksCisJLmJDbGFzc0dldFJlc3BvbnNlID0JMHgwLAorCS5iQ2xhc3NF bnZlbG9wZSA9CTB4MCwKKwkvKiAud0xjZExheW91dCA9CURZTkFNSUMgKi8KKwkvKiAuYlBJTlN1 cHBvcnQgPQlEWU5BTUlDICovCisJLmJNYXhDQ0lEQnVzeVNsb3RzID0JMQorfTsKKworLyogRnVs bCBzcGVlZCBzdXBwb3J0OiAqLworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRv ciBjY2lkX2ZzX2luX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUs CisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKwkuYkVuZHBvaW50QWRkcmVz cyA9CVVTQl9ESVJfSU4sCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxL LAorCS53TWF4UGFja2V0U2l6ZSAgID0JY3B1X3RvX2xlMTYoNjQpLAorfTsKKworc3RhdGljIHN0 cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBjY2lkX2ZzX291dF9kZXNjID0geworCS5iTGVu Z3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRf RU5EUE9JTlQsCisJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX09VVCwKKwkuYm1BdHRyaWJ1 dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLndNYXhQYWNrZXRTaXplICAgPQkgY3B1 X3RvX2xlMTYoNjQpLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIg KmNjaWRfZnNfZGVzY3NbXSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAm Y2NpZF9pbnRlcmZhY2VfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAm Y2NpZF9jbGFzc19kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZjY2lk X2ZzX2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmNjaWRfZnNf b3V0X2Rlc2MsCisJTlVMTCwKK307CisKKy8qIEhpZ2ggc3BlZWQgc3VwcG9ydDogKi8KK3N0YXRp YyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgY2NpZF9oc19pbl9kZXNjID0geworCS5i TGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0Jf RFRfRU5EUE9JTlQsCisJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAorCS5ibUF0dHJp YnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkud01heFBhY2tldFNpemUgPQljcHVf dG9fbGUxNig1MTIpLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRv ciBjY2lkX2hzX291dF9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpF LAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisJLmJFbmRwb2ludEFkZHJl c3MgPQlVU0JfRElSX09VVCwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JV TEssCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKK307CisKK3N0YXRpYyBz dHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpjY2lkX2hzX2Rlc2NzW10gPSB7CisJKHN0cnVj dCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmNjaWRfaW50ZXJmYWNlX2Rlc2MsCisJKHN0cnVj dCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmNjaWRfY2xhc3NfZGVzYywKKwkoc3RydWN0IHVz Yl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmY2NpZF9oc19pbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rl c2NyaXB0b3JfaGVhZGVyICopICZjY2lkX2hzX291dF9kZXNjLAorCU5VTEwsCit9OworCitzdGF0 aWMgREVGSU5FX0lEQShjY2lkZ19pZGEpOworc3RhdGljIGludCBtYWpvcjsKK3N0YXRpYyBERUZJ TkVfTVVURVgoY2NpZGdfaWRhX2xvY2spOyAvKiBwcm90ZWN0cyBhY2Nlc3MgdG8gY2NpZGdfaWRh ICovCitzdGF0aWMgc3RydWN0IGNsYXNzICpjY2lkZ19jbGFzczsKKworc3RhdGljIGlubGluZSBz dHJ1Y3QgZl9jY2lkZ19vcHRzICp0b19mX2NjaWRnX29wdHMoc3RydWN0IGNvbmZpZ19pdGVtICpp dGVtKQoreworCXJldHVybiBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLCBzdHJ1 Y3QgZl9jY2lkZ19vcHRzLAorCQkJICAgIGZ1bmNfaW5zdC5ncm91cCk7Cit9CisKK3N0YXRpYyBp bmxpbmUgc3RydWN0IGZfY2NpZGcgKmZ1bmNfdG9fY2NpZGcoc3RydWN0IHVzYl9mdW5jdGlvbiAq ZikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGYsIHN0cnVjdCBmX2NjaWRnLCBmdW5jdGlvbik7 Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNjaWRnX2dldF9taW5vcih2b2lkKQoreworCWludCBy ZXQ7CisKKwlyZXQgPSBpZGFfc2ltcGxlX2dldCgmY2NpZGdfaWRhLCAwLCAwLCBHRlBfS0VSTkVM KTsKKwlpZiAocmV0ID49IENDSURfTUlOT1JTKSB7CisJCWlkYV9zaW1wbGVfcmVtb3ZlKCZjY2lk Z19pZGEsIHJldCk7CisJCXJldCA9IC1FTk9ERVY7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGlubGluZSB2b2lkIGNjaWRnX3B1dF9taW5vcihpbnQgbWlub3IpCit7CisJaWRhX3Np bXBsZV9yZW1vdmUoJmNjaWRnX2lkYSwgbWlub3IpOworfQorCitzdGF0aWMgaW50IGNjaWRnX3Nl dHVwKHZvaWQpCit7CisJaW50IHJldDsKKwlkZXZfdCBkZXY7CisKKwljY2lkZ19jbGFzcyA9IGNs YXNzX2NyZWF0ZShUSElTX01PRFVMRSwgImNjaWRnIik7CisJaWYgKElTX0VSUihjY2lkZ19jbGFz cykpIHsKKwkJcmV0ID0gUFRSX0VSUihjY2lkZ19jbGFzcyk7CisJCWNjaWRnX2NsYXNzID0gTlVM TDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZkZXYs IDAsIENDSURfTUlOT1JTLCAiY2NpZGciKTsKKwlpZiAocmV0KSB7CisJCWNsYXNzX2Rlc3Ryb3ko Y2NpZGdfY2xhc3MpOworCQljY2lkZ19jbGFzcyA9IE5VTEw7CisJCXJldHVybiByZXQ7CisJfQor CisJbWFqb3IgPSBNQUpPUihkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNj aWRnX2NsZWFudXAodm9pZCkKK3sKKwlpZiAobWFqb3IpIHsKKwkJdW5yZWdpc3Rlcl9jaHJkZXZf cmVnaW9uKE1LREVWKG1ham9yLCAwKSwgQ0NJRF9NSU5PUlMpOworCQltYWpvciA9IDA7CisJfQor CisJY2xhc3NfZGVzdHJveShjY2lkZ19jbGFzcyk7CisJY2NpZGdfY2xhc3MgPSBOVUxMOworCWlk YV9kZXN0cm95KCZjY2lkZ19pZGEpOworfQorCitzdGF0aWMgdm9pZCBjY2lkZ19hdHRyX3JlbGVh c2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQoreworCXN0cnVjdCBmX2NjaWRnX29wdHMgKm9w dHMgPSB0b19mX2NjaWRnX29wdHMoaXRlbSk7CisKKwl1c2JfcHV0X2Z1bmN0aW9uX2luc3RhbmNl KCZvcHRzLT5mdW5jX2luc3QpOworfQorCitzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2l0ZW1fb3Bl cmF0aW9ucyBjY2lkZ19pdGVtX29wcyA9IHsKKwkucmVsZWFzZQk9IGNjaWRnX2F0dHJfcmVsZWFz ZSwKK307CisKKyNkZWZpbmUgRl9DQ0lER19PUFQobmFtZSwgcHJlYywgbGltaXQpCQkJCQlcCitz dGF0aWMgc3NpemVfdCBmX2NjaWRnX29wdHNfIyNuYW1lIyNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0 ZW0gKml0ZW0sIGNoYXIgKnBhZ2UpXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgZl9jY2lkZ19vcHRz ICpvcHRzID0gdG9fZl9jY2lkZ19vcHRzKGl0ZW0pOwkJXAorCWludCByZXN1bHQ7CQkJCQkJCVwK KwkJCQkJCQkJCVwKKwltdXRleF9sb2NrKCZvcHRzLT5sb2NrKTsJCQkJCVwKKwlyZXN1bHQgPSBz cHJpbnRmKHBhZ2UsICIleFxuIiwgb3B0cy0+bmFtZSk7CQkJXAorCW11dGV4X3VubG9jaygmb3B0 cy0+bG9jayk7CQkJCQlcCisJCQkJCQkJCQlcCisJcmV0dXJuIHJlc3VsdDsJCQkJCQkJXAorfQkJ CQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBzc2l6ZV90IGZfY2NpZGdfb3B0c18jI25hbWUj I19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCVwKKwkJCQkJIGNvbnN0IGNoYXIgKnBh Z2UsIHNpemVfdCBsZW4pCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IGZfY2NpZGdfb3B0cyAqb3B0 cyA9IHRvX2ZfY2NpZGdfb3B0cyhpdGVtKTsJCVwKKwlpbnQgcmV0OwkJCQkJCQlcCisJdSMjcHJl YyBudW07CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwltdXRleF9sb2NrKCZvcHRzLT5sb2NrKTsJCQkJ CVwKKwlpZiAob3B0cy0+cmVmY250KSB7CQkJCQkJXAorCQlyZXQgPSAtRUJVU1k7CQkJCQkJXAor CQlnb3RvIGVuZDsJCQkJCQlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCXJldCA9IGtzdHJ0 b3UjI3ByZWMocGFnZSwgMCwgJm51bSk7CQkJCVwKKwlpZiAocmV0KQkJCQkJCQlcCisJCWdvdG8g ZW5kOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAobnVtID4gbGltaXQpIHsJCQkJCQlcCisJCXJl dCA9IC1FSU5WQUw7CQkJCQkJXAorCQlnb3RvIGVuZDsJCQkJCQlcCisJfQkJCQkJCQkJXAorCW9w dHMtPm5hbWUgPSBudW07CQkJCQkJXAorCXJldCA9IGxlbjsJCQkJCQkJXAorCQkJCQkJCQkJXAor ZW5kOgkJCQkJCQkJCVwKKwltdXRleF91bmxvY2soJm9wdHMtPmxvY2spOwkJCQkJXAorCXJldHVy biByZXQ7CQkJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitDT05GSUdGU19BVFRSKGZf Y2NpZGdfb3B0c18sIG5hbWUpCisKK0ZfQ0NJREdfT1BUKGZlYXR1cmVzLCAzMiwgMHhmZmZmZmZm Zik7CitGX0NDSURHX09QVChwcm90b2NvbHMsIDMyLCAweDAzKTsKK0ZfQ0NJREdfT1BUKHBpbnN1 cHBvcnQsIDgsIDB4MDMpOworRl9DQ0lER19PUFQobGNkbGF5b3V0LCAxNiwgMHhmZmZmKTsKK0Zf Q0NJREdfT1BUKG5zbG90cywgOCwgMHhmZik7CisKK3N0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0 cmlidXRlICpjY2lkZ19hdHRyc1tdID0geworCSZmX2NjaWRnX29wdHNfYXR0cl9mZWF0dXJlcywK KwkmZl9jY2lkZ19vcHRzX2F0dHJfcHJvdG9jb2xzLAorCSZmX2NjaWRnX29wdHNfYXR0cl9waW5z dXBwb3J0LAorCSZmX2NjaWRnX29wdHNfYXR0cl9sY2RsYXlvdXQsCisJJmZfY2NpZGdfb3B0c19h dHRyX25zbG90cywKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBjb25maWdfaXRlbV90eXBl IGNjaWRnX2Z1bmNfdHlwZSA9IHsKKwkuY3RfaXRlbV9vcHMJPSAmY2NpZGdfaXRlbV9vcHMsCisJ LmN0X2F0dHJzCT0gY2NpZGdfYXR0cnMsCisJLmN0X293bmVyCT0gVEhJU19NT0RVTEUsCit9Owor CitzdGF0aWMgdm9pZCBjY2lkZ19yZXFfcHV0KHN0cnVjdCBmX2NjaWRnICpjY2lkZywgc3RydWN0 IGxpc3RfaGVhZCAqaGVhZCwKKwkJc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJdW5zaWdu ZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjY2lkZy0+bG9jaywgZmxhZ3Mp OworCWxpc3RfYWRkX3RhaWwoJnJlcS0+bGlzdCwgaGVhZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmY2NpZGctPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfcmVxdWVz dCAqY2NpZGdfcmVxX2dldChzdHJ1Y3QgZl9jY2lkZyAqY2NpZGcsCisJCQkJCXN0cnVjdCBsaXN0 X2hlYWQgKmhlYWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdXNiX3JlcXVl c3QgKnJlcSA9IE5VTEw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2NpZGctPmxvY2ssIGZsYWdz KTsKKwlyZXEgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoaGVhZCwgc3RydWN0IHVzYl9yZXF1 ZXN0LCBsaXN0KTsKKwlpZiAocmVxKQorCQlsaXN0X2RlbCgmcmVxLT5saXN0KTsKKwlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZjY2lkZy0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJlcTsKK30K Kworc3RhdGljIHZvaWQgY2NpZGdfYnVsa19jb21wbGV0ZV90eChzdHJ1Y3QgdXNiX2VwICplcCwg c3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGZfY2NpZGcgKmNjaWRnID0gKHN0 cnVjdCBmX2NjaWRnICopZXAtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBjY2lkZ19idWxrX2RldiAq YnVsa19kZXYgPSAmY2NpZGctPmJ1bGtfZGV2OworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAq Y2Rldgk9IGNjaWRnLT5mdW5jdGlvbi5jb25maWctPmNkZXY7CisKKwlzd2l0Y2ggKHJlcS0+c3Rh dHVzKSB7CisJZGVmYXVsdDoKKwkJVkRCRyhjZGV2LCAiY2NpZDogdHggZXJyICVkXG4iLCByZXEt PnN0YXR1cyk7CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSAtRUNPTk5SRVNFVDoJCS8qIHVu bGluayAqLworCWNhc2UgLUVTSFVURE9XTjoJCS8qIGRpc2Nvbm5lY3QgZXRjICovCisJCWJyZWFr OworCWNhc2UgMDoKKwkJYnJlYWs7CisJfQorCisJY2NpZGdfcmVxX3B1dChjY2lkZywgJmJ1bGtf ZGV2LT50eF9pZGxlLCByZXEpOworCXdha2VfdXAoJmJ1bGtfZGV2LT53cml0ZV93cSk7Cit9CisK K3N0YXRpYyB2b2lkIGNjaWRnX2J1bGtfY29tcGxldGVfcngoc3RydWN0IHVzYl9lcCAqZXAsIHN0 cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBmX2NjaWRnICpjY2lkZyA9IChzdHJ1 Y3QgZl9jY2lkZyAqKWVwLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgY2NpZGdfYnVsa19kZXYgKmJ1 bGtfZGV2ID0gJmNjaWRnLT5idWxrX2RldjsKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNk ZXYJPSBjY2lkZy0+ZnVuY3Rpb24uY29uZmlnLT5jZGV2OworCisJc3dpdGNoIChyZXEtPnN0YXR1 cykgeworCisJLyogbm9ybWFsIGNvbXBsZXRpb24gKi8KKwljYXNlIDA6CisJCS8qIFdlIG9ubHkg Y2FyZXMgYWJvdXQgcGFja2V0cyB3aXRoIG5vbnplcm8gbGVuZ3RoICovCisJCWlmIChyZXEtPmFj dHVhbCA+IDApCisJCQlhdG9taWNfc2V0KCZidWxrX2Rldi0+cnhfZG9uZSwgMSk7CisJCWJyZWFr OworCisJLyogc29mdHdhcmUtZHJpdmVuIGludGVyZmFjZSBzaHV0ZG93biAqLworCWNhc2UgLUVD T05OUkVTRVQ6CQkvKiB1bmxpbmsgKi8KKwljYXNlIC1FU0hVVERPV046CQkvKiBkaXNjb25uZWN0 IGV0YyAqLworCQlWREJHKGNkZXYsICJjY2lkOiByeCBzaHV0ZG93biwgY29kZSAlZFxuIiwgcmVx LT5zdGF0dXMpOworCQlicmVhazsKKworCS8qIGZvciBoYXJkd2FyZSBhdXRvbWFnaWMgKHN1Y2gg YXMgcHhhKSAqLworCWNhc2UgLUVDT05OQUJPUlRFRDoJCS8qIGVuZHBvaW50IHJlc2V0ICovCisJ CURCRyhjZGV2LCAiY2NpZDogcnggJXMgcmVzZXRcbiIsIGVwLT5uYW1lKTsKKwkJYnJlYWs7CisK KwkvKiBkYXRhIG92ZXJydW4gKi8KKwljYXNlIC1FT1ZFUkZMT1c6CisJCS8qIEZBTExUSFJPVUdI ICovCisJZGVmYXVsdDoKKwkJREJHKGNkZXYsICJjY2lkOiByeCBzdGF0dXMgJWRcbiIsIHJlcS0+ c3RhdHVzKTsKKwkJYnJlYWs7CisJfQorCisJd2FrZV91cCgmYnVsa19kZXYtPnJlYWRfd3EpOwor fQorCitzdGF0aWMgc3RydWN0IHVzYl9yZXF1ZXN0ICoKK2NjaWRnX3JlcXVlc3RfYWxsb2Moc3Ry dWN0IHVzYl9lcCAqZXAsIHVuc2lnbmVkIGludCBsZW4pCit7CisJc3RydWN0IHVzYl9yZXF1ZXN0 ICpyZXE7CisKKwlyZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdChlcCwgR0ZQX0FUT01JQyk7CisJ aWYgKCFyZXEpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJcmVxLT5idWYgPSBrbWFs bG9jKGxlbiwgR0ZQX0FUT01JQyk7CisJaWYgKCFyZXEtPmJ1ZikgeworCQl1c2JfZXBfZnJlZV9y ZXF1ZXN0KGVwLCByZXEpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisJcmVxLT5s ZW5ndGggPSBsZW47CisKKwlyZXR1cm4gcmVxOworfQorCitzdGF0aWMgdm9pZCBjY2lkZ19yZXF1 ZXN0X2ZyZWUoc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEsIHN0cnVjdCB1c2JfZXAgKmVwKQorewor CWlmICghcmVxKQorCQlyZXR1cm47CisKKwlrZnJlZShyZXEtPmJ1Zik7CisJdXNiX2VwX2ZyZWVf cmVxdWVzdChlcCwgcmVxKTsKK30KKworc3RhdGljIGludCBjY2lkZ19mdW5jdGlvbl9zZXR1cChz dHJ1Y3QgdXNiX2Z1bmN0aW9uICpmLAorCQljb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpj dHJsKQoreworCXN0cnVjdCBmX2NjaWRnICpjY2lkZyA9IGNvbnRhaW5lcl9vZihmLCBzdHJ1Y3Qg Zl9jY2lkZywgZnVuY3Rpb24pOworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2Rldgk9IGYt PmNvbmZpZy0+Y2RldjsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcQkJPSBjZGV2LT5yZXE7CisJ aW50IHJldAkJCQk9IC1FT1BOT1RTVVBQOworCXUxNiB3X2luZGV4CQkJPSBsZTE2X3RvX2NwdShj dHJsLT53SW5kZXgpOworCXUxNiB3X3ZhbHVlCQkJPSBsZTE2X3RvX2NwdShjdHJsLT53VmFsdWUp OworCXUxNiB3X2xlbmd0aAkJCT0gbGUxNl90b19jcHUoY3RybC0+d0xlbmd0aCk7CisKKwlpZiAo IWF0b21pY19yZWFkKCZjY2lkZy0+b25saW5lKSkKKwkJcmV0dXJuIC1FTk9UQ09OTjsKKworCXN3 aXRjaCAoY3RybC0+YlJlcXVlc3RUeXBlICYgVVNCX1RZUEVfTUFTSykgeworCWNhc2UgVVNCX1RZ UEVfQ0xBU1M6CisJCXN3aXRjaCAoY3RybC0+YlJlcXVlc3QpIHsKKwkJY2FzZSBDQ0lER0VORVJJ Q1JFUV9HRVRfQ0xPQ0tfRlJFUVVFTkNJRVM6CisJCQlpZiAod19sZW5ndGggPiBzaXplb2YoY2Np ZF9jbGFzc19kZXNjLmR3RGVmYXVsdENsb2NrKSkKKwkJCQlicmVhazsKKworCQkJcHV0X3VuYWxp Z25lZChjY2lkX2NsYXNzX2Rlc2MuZHdEZWZhdWx0Q2xvY2ssIHJlcS0+YnVmKTsKKwkJCXJldCA9 IHNpemVvZihjY2lkX2NsYXNzX2Rlc2MuZHdEZWZhdWx0Q2xvY2spOworCQkJYnJlYWs7CisKKwkJ Y2FzZSBDQ0lER0VORVJJQ1JFUV9HRVRfREFUQV9SQVRFUzoKKwkJCWlmICh3X2xlbmd0aCA+IHNp emVvZihjY2lkX2NsYXNzX2Rlc2MuZHdEYXRhUmF0ZSkpCisJCQkJYnJlYWs7CisKKwkJCXB1dF91 bmFsaWduZWQoY2NpZF9jbGFzc19kZXNjLmR3RGF0YVJhdGUsIHJlcS0+YnVmKTsKKwkJCXJldCA9 IHNpemVvZihjY2lkX2NsYXNzX2Rlc2MuZHdEYXRhUmF0ZSk7CisJCQlicmVhazsKKworCQlkZWZh dWx0OgorCQkJVkRCRyhmLT5jb25maWctPmNkZXYsCisJCQkJImNjaWQ6IGludmFsaWQgY29udHJv bCByZXElMDJ4LiUwMnggdiUwNHggaSUwNHggbCVkXG4iLAorCQkJCWN0cmwtPmJSZXF1ZXN0VHlw ZSwgY3RybC0+YlJlcXVlc3QsCisJCQkJd192YWx1ZSwgd19pbmRleCwgd19sZW5ndGgpOworCQl9 CisJfQorCisJLyogcmVzcG9uZGVkIHdpdGggZGF0YSB0cmFuc2ZlciBvciBzdGF0dXMgcGhhc2U/ ICovCisJaWYgKHJldCA+PSAwKSB7CisJCVZEQkcoZi0+Y29uZmlnLT5jZGV2LCAiY2NpZDogcmVx JTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwlZFxuIiwKKwkJCWN0cmwtPmJSZXF1ZXN0VHlwZSwgY3Ry bC0+YlJlcXVlc3QsCisJCQl3X3ZhbHVlLCB3X2luZGV4LCB3X2xlbmd0aCk7CisKKwkJcmVxLT5s ZW5ndGggPSByZXQ7CisJCXJldCA9IHVzYl9lcF9xdWV1ZShjZGV2LT5nYWRnZXQtPmVwMCwgcmVx LCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJldCA8IDApCisJCQlFUlJPUihmLT5jb25maWctPmNkZXYs CisJCQkJImNjaWQ6IGVwMCBlbnF1ZXVlIGVyciAlZFxuIiwgcmV0KTsKKwl9CisKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgdm9pZCBjY2lkZ19mdW5jdGlvbl9kaXNhYmxlKHN0cnVjdCB1c2Jf ZnVuY3Rpb24gKmYpCit7CisJc3RydWN0IGZfY2NpZGcgKmNjaWRnID0gZnVuY190b19jY2lkZyhm KTsKKwlzdHJ1Y3QgY2NpZGdfYnVsa19kZXYgKmJ1bGtfZGV2ID0gJmNjaWRnLT5idWxrX2RldjsK KwlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcTsKKworCS8qIERpc2FibGUgZW5kcG9pbnRzICovCisJ dXNiX2VwX2Rpc2FibGUoY2NpZGctPmluKTsKKwl1c2JfZXBfZGlzYWJsZShjY2lkZy0+b3V0KTsK KworCS8qIEZyZWUgZW5kcG9pbnQgcmVsYXRlZCByZXF1ZXN0cyAqLworCWlmICghYXRvbWljX3Jl YWQoJmJ1bGtfZGV2LT5yeF9yZXFfYnVzeSkpCisJCWNjaWRnX3JlcXVlc3RfZnJlZShidWxrX2Rl di0+cnhfcmVxLCBjY2lkZy0+b3V0KTsKKwl3aGlsZSAoKHJlcSA9IGNjaWRnX3JlcV9nZXQoY2Np ZGcsICZidWxrX2Rldi0+dHhfaWRsZSkpKQorCQljY2lkZ19yZXF1ZXN0X2ZyZWUocmVxLCBjY2lk Zy0+aW4pOworCisJYXRvbWljX3NldCgmY2NpZGctPm9ubGluZSwgMCk7CisKKwkvKiBXYWtlIHVw IHRocmVhZHMgKi8KKwl3YWtlX3VwKCZidWxrX2Rldi0+d3JpdGVfd3EpOworCXdha2VfdXAoJmJ1 bGtfZGV2LT5yZWFkX3dxKTsKK30KKworc3RhdGljIGludCBjY2lkZ19zdGFydF9lcChzdHJ1Y3Qg Zl9jY2lkZyAqY2NpZGcsIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYsCisJCQlzdHJ1Y3QgdXNiX2Vw ICplcCkKK3sKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBmLT5jb25maWctPmNk ZXY7CisJaW50IHJldDsKKworCXVzYl9lcF9kaXNhYmxlKGVwKTsKKworCXJldCA9IGNvbmZpZ19l cF9ieV9zcGVlZChjZGV2LT5nYWRnZXQsIGYsIGVwKTsKKwlpZiAocmV0KSB7CisJCUVSUk9SKGNk ZXYsICJjY2lkOiBjYW4ndCBjb25maWd1cmUgJXM6ICVkXG4iLCBlcC0+bmFtZSwgcmV0KTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSB1c2JfZXBfZW5hYmxlKGVwKTsKKwlpZiAocmV0KSB7 CisJCUVSUk9SKGNkZXYsICJjY2lkOiBjYW4ndCBzdGFydCAlczogJWRcbiIsIGVwLT5uYW1lLCBy ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWVwLT5kcml2ZXJfZGF0YSA9IGNjaWRnOworCisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjY2lkZ19mdW5jdGlvbl9zZXRfYWx0KHN0cnVj dCB1c2JfZnVuY3Rpb24gKmYsCisJCXVuc2lnbmVkIGludCBpbnRmLCB1bnNpZ25lZCBpbnQgYWx0 KQoreworCXN0cnVjdCBmX2NjaWRnICpjY2lkZwkJPSBmdW5jX3RvX2NjaWRnKGYpOworCXN0cnVj dCB1c2JfY29tcG9zaXRlX2RldiAqY2Rldgk9IGYtPmNvbmZpZy0+Y2RldjsKKwlzdHJ1Y3QgY2Np ZGdfYnVsa19kZXYgKmJ1bGtfZGV2CT0gJmNjaWRnLT5idWxrX2RldjsKKwlzdHJ1Y3QgdXNiX3Jl cXVlc3QgKnJlcTsKKwlpbnQgcmV0OworCWludCBpOworCisJLyogQWxsb2NhdGUgcmVxdWVzdHMg Zm9yIG91ciBlbmRwb2ludHMgKi8KKwlyZXEgPSBjY2lkZ19yZXF1ZXN0X2FsbG9jKGNjaWRnLT5v dXQsCisJCQlzaXplb2Yoc3RydWN0IGNjaWRnX2J1bGtfb3V0X2hlYWRlcikpOworCWlmIChJU19F UlIocmVxKSkgeworCQlFUlJPUihjZGV2LCAiY2NpZDogdW5hbWUgdG8gYWxsb2NhdGUgbWVtb3J5 IGZvciBvdXQgcmVxXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKKwl9CisJcmVxLT5jb21w bGV0ZSA9IGNjaWRnX2J1bGtfY29tcGxldGVfcng7CisJcmVxLT5jb250ZXh0ID0gY2NpZGc7CisJ YnVsa19kZXYtPnJ4X3JlcSA9IHJlcTsKKworCS8qIEFsbG9jYXRlIGJ1bmNoIG9mIGluIHJlcXVl c3RzICovCisJZm9yIChpID0gMDsgaSA8IE5fVFhfUkVRUzsgaSsrKSB7CisJCXJlcSA9IGNjaWRn X3JlcXVlc3RfYWxsb2MoY2NpZGctPmluLAorCQkJCXNpemVvZihzdHJ1Y3QgY2NpZGdfYnVsa19p bl9oZWFkZXIpKTsKKworCQlpZiAoSVNfRVJSKHJlcSkpIHsKKwkJCXJldCA9IFBUUl9FUlIocmVx KTsKKwkJCUVSUk9SKGNkZXYsCisJCQkJImNjaWQ6IHVuYW1lIHRvIGFsbG9jYXRlIG1lbW9yeSBm b3IgaW4gcmVxXG4iKTsKKwkJCWdvdG8gZnJlZV9idWxrX291dDsKKwkJfQorCQlyZXEtPmNvbXBs ZXRlID0gY2NpZGdfYnVsa19jb21wbGV0ZV90eDsKKwkJcmVxLT5jb250ZXh0ID0gY2NpZGc7CisJ CWNjaWRnX3JlcV9wdXQoY2NpZGcsICZidWxrX2Rldi0+dHhfaWRsZSwgcmVxKTsKKwl9CisKKwkv KiBjaG9vc2UgdGhlIGRlc2NyaXB0b3JzIGFuZCBlbmFibGUgZW5kcG9pbnRzICovCisJcmV0ID0g Y2NpZGdfc3RhcnRfZXAoY2NpZGcsIGYsIGNjaWRnLT5pbik7CisJaWYgKHJldCkKKwkJZ290byBm cmVlX2J1bGtfaW47CisKKwlyZXQgPSBjY2lkZ19zdGFydF9lcChjY2lkZywgZiwgY2NpZGctPm91 dCk7CisJaWYgKHJldCkKKwkJZ290byBkaXNhYmxlX2VwX2luOworCisJYXRvbWljX3NldCgmY2Np ZGctPm9ubGluZSwgMSk7CisJcmV0dXJuIDA7CisKK2Rpc2FibGVfZXBfaW46CisJdXNiX2VwX2Rp c2FibGUoY2NpZGctPmluKTsKK2ZyZWVfYnVsa19pbjoKKwl3aGlsZSAoKHJlcSA9IGNjaWRnX3Jl cV9nZXQoY2NpZGcsICZidWxrX2Rldi0+dHhfaWRsZSkpKQorCQljY2lkZ19yZXF1ZXN0X2ZyZWUo cmVxLCBjY2lkZy0+aW4pOworZnJlZV9idWxrX291dDoKKwljY2lkZ19yZXF1ZXN0X2ZyZWUoYnVs a19kZXYtPnJ4X3JlcSwgY2NpZGctPm91dCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu dCBjY2lkZ19idWxrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUp Cit7CisJc3RydWN0IGNjaWRnX2J1bGtfZGV2ICpidWxrX2RldjsKKwlzdHJ1Y3QgZl9jY2lkZyAq Y2NpZGcgPSBjb250YWluZXJfb2YoaW5vZGUtPmlfY2RldiwKKwkJCXN0cnVjdCBmX2NjaWRnLCBj ZGV2KTsKKworCWJ1bGtfZGV2ID0gJmNjaWRnLT5idWxrX2RldjsKKworCWlmICghYXRvbWljX3Jl YWQoJmNjaWRnLT5vbmxpbmUpKSB7CisJCURCRyhjY2lkZy0+ZnVuY3Rpb24uY29uZmlnLT5jZGV2 LCAiY2NpZDogZGV2aWNlIG5vdCBvbmxpbmVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisK KwlpZiAoYXRvbWljX3JlYWQoJmJ1bGtfZGV2LT5pc19vcGVuKSkgeworCQlEQkcoY2NpZGctPmZ1 bmN0aW9uLmNvbmZpZy0+Y2RldiwKKwkJCQkiY2NpZDogZGV2aWNlIGFscmVhZHkgb3BlbmVkXG4i KTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlhdG9taWNfc2V0KCZidWxrX2Rldi0+aXNfb3Bl biwgMSk7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBjY2lkZzsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IGNjaWRnX2J1bGtfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1 Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZl9jY2lkZyAqY2NpZGcgPSAgZmlsZS0+cHJpdmF0 ZV9kYXRhOworCXN0cnVjdCBjY2lkZ19idWxrX2RldiAqYnVsa19kZXYgPSAmY2NpZGctPmJ1bGtf ZGV2OworCisJYXRvbWljX3NldCgmYnVsa19kZXYtPmlzX29wZW4sIDApOworCXJldHVybiAwOwor fQorCitzdGF0aWMgc3NpemVfdCBjY2lkZ19idWxrX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNo YXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1 Y3QgZl9jY2lkZyAqY2NpZGcgPSAgZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjY2lkZ19i dWxrX2RldiAqYnVsa19kZXYgPSAmY2NpZGctPmJ1bGtfZGV2OworCXN0cnVjdCB1c2JfcmVxdWVz dCAqcmVxOworCXNpemVfdCAgeGZlcjsKKwlpbnQgcmV0OworCisJLyogTWFrZSBzdXJlIHdlIGhh dmUgZW5vdWdoIHNwYWNlIGZvciBhIHdob2xlIHBhY2thZ2UgKi8KKwlpZiAoY291bnQgPCBzaXpl b2Yoc3RydWN0IGNjaWRnX2J1bGtfb3V0X2hlYWRlcikpIHsKKwkJREJHKGNjaWRnLT5mdW5jdGlv bi5jb25maWctPmNkZXYsCisJCQkJImNjaWQ6IHRvbyBzbWFsbCBidWZmZXIgc2l6ZS4gJXp1IHBy b3ZpZGVkLCBuZWVkIGF0IGxlYXN0ICV6dVxuIiwKKwkJCQljb3VudCwgc2l6ZW9mKHN0cnVjdCBj Y2lkZ19idWxrX291dF9oZWFkZXIpKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKCFh dG9taWNfcmVhZCgmY2NpZGctPm9ubGluZSkpCisJCXJldHVybiAtRU5PREVWOworCisJLyogcXVl dWUgYSByZXF1ZXN0ICovCisJcmVxID0gYnVsa19kZXYtPnJ4X3JlcTsKKwlyZXEtPmxlbmd0aCA9 IGNvdW50OworCWF0b21pY19zZXQoJmJ1bGtfZGV2LT5yeF9kb25lLCAwKTsKKworCXJldCA9IHVz Yl9lcF9xdWV1ZShjY2lkZy0+b3V0LCByZXEsIEdGUF9LRVJORUwpOworCWlmIChyZXQgPCAwKSB7 CisJCUVSUk9SKGNjaWRnLT5mdW5jdGlvbi5jb25maWctPmNkZXYsCisJCQkJImNjaWQ6IHVzYiBl cCBxdWV1ZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoIWF0b21pY19y ZWFkKCZidWxrX2Rldi0+cnhfZG9uZSkgJiYKKwkJCWZpbGUtPmZfZmxhZ3MgJiAoT19OT05CTE9D SyB8IE9fTkRFTEFZKSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwkvKiB3YWl0IGZvciBhIHJlcXVl c3QgdG8gY29tcGxldGUgKi8KKwlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoYnVsa19k ZXYtPnJlYWRfd3EsCisJCQlhdG9taWNfcmVhZCgmYnVsa19kZXYtPnJ4X2RvbmUpIHx8CisJCQkh YXRvbWljX3JlYWQoJmNjaWRnLT5vbmxpbmUpKTsKKwlpZiAocmV0IDwgMCkgeworCQl1c2JfZXBf ZGVxdWV1ZShjY2lkZy0+b3V0LCByZXEpOworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKwor CS8qIFN0aWxsIG9ubGluZT8gKi8KKwlpZiAoIWF0b21pY19yZWFkKCZjY2lkZy0+b25saW5lKSkK KwkJcmV0dXJuIC1FTk9ERVY7CisKKwlhdG9taWNfc2V0KCZidWxrX2Rldi0+cnhfcmVxX2J1c3ks IDEpOworCXhmZXIgPSBtaW5fdChzaXplX3QsIHJlcS0+YWN0dWFsLCBjb3VudCk7CisKKwlpZiAo Y29weV90b191c2VyKGJ1ZiwgcmVxLT5idWYsIHhmZXIpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwor CWF0b21pY19zZXQoJmJ1bGtfZGV2LT5yeF9yZXFfYnVzeSwgMCk7CisJaWYgKCFhdG9taWNfcmVh ZCgmY2NpZGctPm9ubGluZSkpIHsKKwkJY2NpZGdfcmVxdWVzdF9mcmVlKGJ1bGtfZGV2LT5yeF9y ZXEsIGNjaWRnLT5vdXQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4geGZlcjsK K30KKworc3RhdGljIHNzaXplX3QgY2NpZGdfYnVsa193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwg Y29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykK K3sKKwlzdHJ1Y3QgZl9jY2lkZyAqY2NpZGcgPSAgZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVj dCBjY2lkZ19idWxrX2RldiAqYnVsa19kZXYgPSAmY2NpZGctPmJ1bGtfZGV2OworCXN0cnVjdCB1 c2JfcmVxdWVzdCAqcmVxID0gTlVMTDsKKwlpbnQgcmV0OworCisJLyogQXJlIHdlIG9ubGluZT8g Ki8KKwlpZiAoIWF0b21pY19yZWFkKCZjY2lkZy0+b25saW5lKSkKKwkJcmV0dXJuIC1FTk9ERVY7 CisKKwkvKiBBdm9pZCBaZXJvIExlbmd0aCBQYWNrZXRzIChaTFApICovCisJaWYgKCFjb3VudCkK KwkJcmV0dXJuIDA7CisKKwkvKiBNYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgZm9yIGEg d2hvbGUgcGFja2FnZSAqLworCWlmIChjb3VudCA+IHNpemVvZihzdHJ1Y3QgY2NpZGdfYnVsa19v dXRfaGVhZGVyKSkgeworCQlEQkcoY2NpZGctPmZ1bmN0aW9uLmNvbmZpZy0+Y2RldiwKKwkJCQki Y2NpZDogdG9vIG11Y2ggZGF0YS4gJXp1IHByb3ZpZGVkLCBidXQgd2UgY2FuIG9ubHkgaGFuZGxl ICV6dVxuIiwKKwkJCQljb3VudCwgc2l6ZW9mKHN0cnVjdCBjY2lkZ19idWxrX291dF9oZWFkZXIp KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKGxpc3RfZW1wdHkoJmJ1bGtfZGV2LT50 eF9pZGxlKSAmJgorCQkJZmlsZS0+Zl9mbGFncyAmIChPX05PTkJMT0NLIHwgT19OREVMQVkpKQor CQlyZXR1cm4gLUVBR0FJTjsKKworCS8qIGdldCBhbiBpZGxlIHR4IHJlcXVlc3QgdG8gdXNlICov CisJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGJ1bGtfZGV2LT53cml0ZV93cSwKKwkJ KChyZXEgPSBjY2lkZ19yZXFfZ2V0KGNjaWRnLCAmYnVsa19kZXYtPnR4X2lkbGUpKSkpOworCWlm IChyZXQgPCAwKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJaWYgKGNvcHlfZnJvbV91c2Vy KHJlcS0+YnVmLCBidWYsIGNvdW50KSkgeworCQlpZiAoIWF0b21pY19yZWFkKCZjY2lkZy0+b25s aW5lKSkgeworCQkJY2NpZGdfcmVxdWVzdF9mcmVlKHJlcSwgY2NpZGctPmluKTsKKwkJCXJldHVy biAtRU5PREVWOworCQl9IGVsc2UgeworCQkJY2NpZGdfcmVxX3B1dChjY2lkZywgJmJ1bGtfZGV2 LT50eF9pZGxlLCByZXEpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwl9CisKKwlyZXEtPmxl bmd0aCA9IGNvdW50OworCXJldCA9IHVzYl9lcF9xdWV1ZShjY2lkZy0+aW4sIHJlcSwgR0ZQX0tF Uk5FTCk7CisJaWYgKHJldCA8IDApIHsKKwkJY2NpZGdfcmVxX3B1dChjY2lkZywgJmJ1bGtfZGV2 LT50eF9pZGxlLCByZXEpOworCisJCWlmICghYXRvbWljX3JlYWQoJmNjaWRnLT5vbmxpbmUpKSB7 CisJCQkvKiBGcmVlIHVwIGFsbCByZXF1ZXN0cyBpZiB3ZSBhcmUgbm90IG9ubGluZSAqLworCQkJ d2hpbGUgKChyZXEgPSBjY2lkZ19yZXFfZ2V0KGNjaWRnLCAmYnVsa19kZXYtPnR4X2lkbGUpKSkK KwkJCQljY2lkZ19yZXF1ZXN0X2ZyZWUocmVxLCBjY2lkZy0+aW4pOworCisJCQlyZXR1cm4gLUVO T0RFVjsKKwkJfQorCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0 YXRpYyBfX3BvbGxfdCBjY2lkZ19idWxrX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFi bGUgKiB3YWl0KQoreworCXN0cnVjdCBmX2NjaWRnICpjY2lkZyA9ICBmaWxlLT5wcml2YXRlX2Rh dGE7CisJc3RydWN0IGNjaWRnX2J1bGtfZGV2ICpidWxrX2RldiA9ICZjY2lkZy0+YnVsa19kZXY7 CisJX19wb2xsX3QJcmV0ID0gMDsKKworCXBvbGxfd2FpdChmaWxlLCAmYnVsa19kZXYtPnJlYWRf d3EsIHdhaXQpOworCXBvbGxfd2FpdChmaWxlLCAmYnVsa19kZXYtPndyaXRlX3dxLCB3YWl0KTsK KworCWlmIChsaXN0X2VtcHR5KCZidWxrX2Rldi0+dHhfaWRsZSkpCisJCXJldCB8PSBFUE9MTE9V VCB8IEVQT0xMV1JOT1JNOworCisJaWYgKGF0b21pY19yZWFkKCZidWxrX2Rldi0+cnhfZG9uZSkp CisJCXJldCB8PSBFUE9MTElOIHwgRVBPTExSRE5PUk07CisKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmX2NjaWRnX2ZvcHMgPSB7CisJLm93 bmVyID0gVEhJU19NT0RVTEUsCisJLnJlYWQgPSBjY2lkZ19idWxrX3JlYWQsCisJLndyaXRlID0g Y2NpZGdfYnVsa193cml0ZSwKKwkub3BlbiA9IGNjaWRnX2J1bGtfb3BlbiwKKwkucG9sbCA9IGNj aWRnX2J1bGtfcG9sbCwKKwkucmVsZWFzZSA9IGNjaWRnX2J1bGtfcmVsZWFzZSwKK307CisKK3N0 YXRpYyBpbnQgY2NpZGdfYnVsa19kZXZpY2VfaW5pdChzdHJ1Y3QgZl9jY2lkZyAqZGV2KQorewor CXN0cnVjdCBjY2lkZ19idWxrX2RldiAqYnVsa19kZXYgPSAmZGV2LT5idWxrX2RldjsKKworCWlu aXRfd2FpdHF1ZXVlX2hlYWQoJmJ1bGtfZGV2LT5yZWFkX3dxKTsKKwlpbml0X3dhaXRxdWV1ZV9o ZWFkKCZidWxrX2Rldi0+d3JpdGVfd3EpOworCUlOSVRfTElTVF9IRUFEKCZidWxrX2Rldi0+dHhf aWRsZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2NpZGdfZnVuY3Rpb25fZnJl ZShzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQoreworCXN0cnVjdCBmX2NjaWRnICpjY2lkZyA9IGZ1 bmNfdG9fY2NpZGcoZik7CisJc3RydWN0IGZfY2NpZGdfb3B0cyAqb3B0cyA9IGNvbnRhaW5lcl9v ZihmLT5maSwgc3RydWN0IGZfY2NpZGdfb3B0cywKKwkJCQkJCWZ1bmNfaW5zdCk7CisKKwlrZnJl ZShjY2lkZyk7CisJbXV0ZXhfbG9jaygmb3B0cy0+bG9jayk7CisJb3B0cy0+cmVmY250LS07CisJ bXV0ZXhfdW5sb2NrKCZvcHRzLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgY2NpZGdfZnVuY3Rp b25fdW5iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywKKwkJCQkJc3RydWN0IHVzYl9m dW5jdGlvbiAqZikKK3sKKwlzdHJ1Y3QgZl9jY2lkZyAqY2NpZGcgPSBmdW5jX3RvX2NjaWRnKGYp OworCisJZGV2aWNlX2Rlc3Ryb3koY2NpZGdfY2xhc3MsIE1LREVWKG1ham9yLCBjY2lkZy0+bWlu b3IpKTsKKwljZGV2X2RlbCgmY2NpZGctPmNkZXYpOworCisJLyogZGlzYWJsZS9mcmVlIHJlcXVl c3QgYW5kIGVuZCBwb2ludCAqLworCXVzYl9mcmVlX2FsbF9kZXNjcmlwdG9ycyhmKTsKK30KKwor c3RhdGljIGludCBjY2lkZ19mdW5jdGlvbl9iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAq YywKKwkJCQkJc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlzdHJ1Y3QgZl9jY2lkZyAqY2Np ZGcgPSBmdW5jX3RvX2NjaWRnKGYpOworCXN0cnVjdCB1c2JfZXAgKmVwOworCXN0cnVjdCB1c2Jf Y29tcG9zaXRlX2RldiAqY2RldiA9IGMtPmNkZXY7CisJc3RydWN0IGRldmljZSAqZGV2aWNlOwor CWRldl90IGRldjsKKwlpbnQgaWZjX2lkOworCWludCByZXQ7CisKKwkvKiBhbGxvY2F0ZSBpbnN0 YW5jZS1zcGVjaWZpYyBpbnRlcmZhY2UgSURzLCBhbmQgcGF0Y2ggZGVzY3JpcHRvcnMgKi8KKwlp ZmNfaWQgPSB1c2JfaW50ZXJmYWNlX2lkKGMsIGYpOworCWlmIChpZmNfaWQgPCAwKSB7CisJCUVS Uk9SKGNkZXYsICJjY2lkOiB1bmFibGUgdG8gYWxsb2NhdGUgaWZjIGlkLCBlcnI6JWRcbiIsCisJ CQkJaWZjX2lkKTsKKwkJcmV0dXJuIGlmY19pZDsKKwl9CisJY2NpZF9pbnRlcmZhY2VfZGVzYy5i SW50ZXJmYWNlTnVtYmVyID0gaWZjX2lkOworCisJLyogYWxsb2NhdGUgaW5zdGFuY2Utc3BlY2lm aWMgZW5kcG9pbnRzICovCisJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZj Y2lkX2ZzX2luX2Rlc2MpOworCWlmICghZXApIHsKKwkJRVJST1IoY2RldiwgImNjaWQ6IHVzYiBl cGluIGF1dG9jb25maWcgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcF9h dXRvX2luX2ZhaWw7CisJfQorCWNjaWRnLT5pbiA9IGVwOworCWVwLT5kcml2ZXJfZGF0YSA9IGNj aWRnOworCisJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZjY2lkX2ZzX291 dF9kZXNjKTsKKwlpZiAoIWVwKSB7CisJCUVSUk9SKGNkZXYsICJjY2lkOiB1c2IgZXBvdXQgYXV0 b2NvbmZpZyBmYWlsZWRcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVwX2F1dG9fb3V0 X2ZhaWw7CisJfQorCWNjaWRnLT5vdXQgPSBlcDsKKwllcC0+ZHJpdmVyX2RhdGEgPSBjY2lkZzsK KworCS8qIHNldCBkZXNjcmlwdG9yIGR5bmFtaWMgdmFsdWVzICovCisJY2NpZF9jbGFzc19kZXNj LmR3RmVhdHVyZXMJPSBjcHVfdG9fbGUzMihjY2lkZy0+ZmVhdHVyZXMpOworCWNjaWRfY2xhc3Nf ZGVzYy5iUElOU3VwcG9ydAk9IGNjaWRnLT5waW5zdXBwb3J0OworCWNjaWRfY2xhc3NfZGVzYy53 TGNkTGF5b3V0CT0gY3B1X3RvX2xlMTYoY2NpZGctPmxjZGxheW91dCk7CisJY2NpZF9jbGFzc19k ZXNjLmJNYXhTbG90SW5kZXgJPSBjY2lkZy0+bnNsb3RzOworCWNjaWRfY2xhc3NfZGVzYy5kd1By b3RvY29scwk9IGNwdV90b19sZTMyKGNjaWRnLT5wcm90b2NvbHMpOworCisJaWYgKGNjaWRnLT5w cm90b2NvbHMgPT0gQ0NJRF9QUk9UT0NPTF9OT1RfU0VMKSB7CisJCWNjaWRnLT5wcm90b2NvbHMg PSBDQ0lEX1BST1RPQ09MX1QwIHwgQ0NJRF9QUk9UT0NPTF9UMTsKKwkJSU5GTyhjY2lkZy0+ZnVu Y3Rpb24uY29uZmlnLT5jZGV2LAorCQkJImNjaWQ6IE5vIHByb3RvY29sIHNlbGVjdGVkLiBTdXBw b3J0IGJvdGggVDAgYW5kIFQxLlxuIik7CisJfQorCisKKwljY2lkX2hzX2luX2Rlc2MuYkVuZHBv aW50QWRkcmVzcyA9CisJCQljY2lkX2ZzX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKwljY2lk X2hzX291dF9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQorCQkJY2NpZF9mc19vdXRfZGVzYy5iRW5k cG9pbnRBZGRyZXNzOworCisJcmV0ICA9IHVzYl9hc3NpZ25fZGVzY3JpcHRvcnMoZiwgY2NpZF9m c19kZXNjcywKKwkJCWNjaWRfaHNfZGVzY3MsIE5VTEwsIE5VTEwpOworCWlmIChyZXQpCisJCWdv dG8gZXBfYXV0b19vdXRfZmFpbDsKKworCS8qIGNyZWF0ZSBjaGFyIGRldmljZSAqLworCWNkZXZf aW5pdCgmY2NpZGctPmNkZXYsICZmX2NjaWRnX2ZvcHMpOworCWRldiA9IE1LREVWKG1ham9yLCBj Y2lkZy0+bWlub3IpOworCXJldCA9IGNkZXZfYWRkKCZjY2lkZy0+Y2RldiwgZGV2LCAxKTsKKwlp ZiAocmV0KQorCQlnb3RvIGZhaWxfZnJlZV9kZXNjczsKKworCWRldmljZSA9IGRldmljZV9jcmVh dGUoY2NpZGdfY2xhc3MsIE5VTEwsIGRldiwgTlVMTCwKKwkJCSAgICAgICAiJXMlZCIsICJjY2lk ZyIsIGNjaWRnLT5taW5vcik7CisJaWYgKElTX0VSUihkZXZpY2UpKSB7CisJCXJldCA9IFBUUl9F UlIoZGV2aWNlKTsKKwkJZ290byBkZWw7CisJfQorCisJcmV0dXJuIDA7CisKK2RlbDoKKwljZGV2 X2RlbCgmY2NpZGctPmNkZXYpOworZmFpbF9mcmVlX2Rlc2NzOgorCXVzYl9mcmVlX2FsbF9kZXNj cmlwdG9ycyhmKTsKK2VwX2F1dG9fb3V0X2ZhaWw6CisJY2NpZGctPm91dC0+ZHJpdmVyX2RhdGEg PSBOVUxMOworCWNjaWRnLT5vdXQgPSBOVUxMOworZXBfYXV0b19pbl9mYWlsOgorCWNjaWRnLT5p bi0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCWNjaWRnLT5pbiA9IE5VTEw7CisJRVJST1IoZi0+Y29u ZmlnLT5jZGV2LCAiY2NpZGdfYmluZCBGQUlMRURcbiIpOworCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmNjaWRnX2FsbG9jKHN0cnVjdCB1c2JfZnVuY3Rp b25faW5zdGFuY2UgKmZpKQoreworCXN0cnVjdCBmX2NjaWRnICpjY2lkZzsKKwlzdHJ1Y3QgZl9j Y2lkZ19vcHRzICpvcHRzID0gY29udGFpbmVyX29mKGZpLCBzdHJ1Y3QgZl9jY2lkZ19vcHRzLAor CQkJCQkJZnVuY19pbnN0KTsKKwlpbnQgcmV0OworCisJY2NpZGcgPSBremFsbG9jKHNpemVvZigq Y2NpZGcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNjaWRnKQorCQlyZXR1cm4gRVJSX1BUUigtRU5P TUVNKTsKKworCXNwaW5fbG9ja19pbml0KCZjY2lkZy0+bG9jayk7CisKKwlyZXQgPSBjY2lkZ19i dWxrX2RldmljZV9pbml0KGNjaWRnKTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKGNjaWRnKTsKKwkJ cmV0dXJuIEVSUl9QVFIocmV0KTsKKwl9CisKKwltdXRleF9sb2NrKCZvcHRzLT5sb2NrKTsKKwlv cHRzLT5yZWZjbnQrKzsKKworCWNjaWRnLT5taW5vciA9IG9wdHMtPm1pbm9yOworCWNjaWRnLT5m ZWF0dXJlcyA9IG9wdHMtPmZlYXR1cmVzOworCWNjaWRnLT5wcm90b2NvbHMgPSBvcHRzLT5wcm90 b2NvbHM7CisJY2NpZGctPnBpbnN1cHBvcnQgPSBvcHRzLT5waW5zdXBwb3J0OworCWNjaWRnLT5u c2xvdHMgPSBvcHRzLT5uc2xvdHM7CisJbXV0ZXhfdW5sb2NrKCZvcHRzLT5sb2NrKTsKKworCWNj aWRnLT5mdW5jdGlvbi5uYW1lCT0gImNjaWQiOworCWNjaWRnLT5mdW5jdGlvbi5iaW5kCT0gY2Np ZGdfZnVuY3Rpb25fYmluZDsKKwljY2lkZy0+ZnVuY3Rpb24udW5iaW5kCT0gY2NpZGdfZnVuY3Rp b25fdW5iaW5kOworCWNjaWRnLT5mdW5jdGlvbi5zZXRfYWx0CT0gY2NpZGdfZnVuY3Rpb25fc2V0 X2FsdDsKKwljY2lkZy0+ZnVuY3Rpb24uZGlzYWJsZQk9IGNjaWRnX2Z1bmN0aW9uX2Rpc2FibGU7 CisJY2NpZGctPmZ1bmN0aW9uLnNldHVwCT0gY2NpZGdfZnVuY3Rpb25fc2V0dXA7CisJY2NpZGct PmZ1bmN0aW9uLmZyZWVfZnVuYyA9IGNjaWRnX2Z1bmN0aW9uX2ZyZWU7CisKKwlyZXR1cm4gJmNj aWRnLT5mdW5jdGlvbjsKK30KKworc3RhdGljIHZvaWQgY2NpZGdfZnJlZV9pbnN0KHN0cnVjdCB1 c2JfZnVuY3Rpb25faW5zdGFuY2UgKmYpCit7CisJc3RydWN0IGZfY2NpZGdfb3B0cyAqb3B0cyA9 IGNvbnRhaW5lcl9vZihmLCBzdHJ1Y3QgZl9jY2lkZ19vcHRzLAorCQkJCQkJZnVuY19pbnN0KTsK KwltdXRleF9sb2NrKCZjY2lkZ19pZGFfbG9jayk7CisKKwljY2lkZ19wdXRfbWlub3Iob3B0cy0+ bWlub3IpOworCWlmIChpZGFfaXNfZW1wdHkoJmNjaWRnX2lkYSkpCisJCWNjaWRnX2NsZWFudXAo KTsKKworCW11dGV4X3VubG9jaygmY2NpZGdfaWRhX2xvY2spOworCisJa2ZyZWUob3B0cyk7Cit9 CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2luc3RhbmNlICpjY2lkZ19hbGxvY19pbnN0 KHZvaWQpCit7CisJc3RydWN0IGZfY2NpZGdfb3B0cyAqb3B0czsKKwlzdHJ1Y3QgdXNiX2Z1bmN0 aW9uX2luc3RhbmNlICpyZXQ7CisJaW50IHN0YXR1cyA9IDA7CisKKwlvcHRzID0ga3phbGxvYyhz aXplb2YoKm9wdHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9wdHMpCisJCXJldHVybiBFUlJfUFRS KC1FTk9NRU0pOworCisJbXV0ZXhfaW5pdCgmb3B0cy0+bG9jayk7CisJb3B0cy0+ZnVuY19pbnN0 LmZyZWVfZnVuY19pbnN0ID0gY2NpZGdfZnJlZV9pbnN0OworCXJldCA9ICZvcHRzLT5mdW5jX2lu c3Q7CisKKwltdXRleF9sb2NrKCZjY2lkZ19pZGFfbG9jayk7CisKKwlpZiAoaWRhX2lzX2VtcHR5 KCZjY2lkZ19pZGEpKSB7CisJCXN0YXR1cyA9IGNjaWRnX3NldHVwKCk7CisJCWlmIChzdGF0dXMp ICB7CisJCQlyZXQgPSBFUlJfUFRSKHN0YXR1cyk7CisJCQlrZnJlZShvcHRzKTsKKwkJCWdvdG8g dW5sb2NrOworCQl9CisJfQorCisJb3B0cy0+bWlub3IgPSBjY2lkZ19nZXRfbWlub3IoKTsKKwlp ZiAob3B0cy0+bWlub3IgPCAwKSB7CisJCXJldCA9IEVSUl9QVFIob3B0cy0+bWlub3IpOworCQlr ZnJlZShvcHRzKTsKKwkJaWYgKGlkYV9pc19lbXB0eSgmY2NpZGdfaWRhKSkKKwkJCWNjaWRnX2Ns ZWFudXAoKTsKKwkJZ290byB1bmxvY2s7CisJfQorCisJY29uZmlnX2dyb3VwX2luaXRfdHlwZV9u YW1lKCZvcHRzLT5mdW5jX2luc3QuZ3JvdXAsCisJCQkiIiwgJmNjaWRnX2Z1bmNfdHlwZSk7CisK K3VubG9jazoKKwltdXRleF91bmxvY2soJmNjaWRnX2lkYV9sb2NrKTsKKwlyZXR1cm4gcmV0Owor fQorCitERUNMQVJFX1VTQl9GVU5DVElPTl9JTklUKGNjaWQsIGNjaWRnX2FsbG9jX2luc3QsIGNj aWRnX2FsbG9jKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJVU0IgQ0NJRCBHYWRnZXQgZHJpdmVy Iik7CitNT0RVTEVfQVVUSE9SKCJNYXJjdXMgRm9sa2Vzc29uIDxtYXJjdXMuZm9sa2Vzc29uQGdt YWlsLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX2NjaWQuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5j dGlvbi9mX2NjaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmYx MDUzZWM1YzRkOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlv bi9mX2NjaWQuaApAQCAtMCwwICsxLDkxIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMCAqLworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBNYXJjdXMgRm9sa2Vzc29uIDxt YXJjdXMuZm9sa2Vzc29uQGdtYWlsLmNvbT4KKyAqLworCisjaWZuZGVmIEZfQ0NJRF9ICisjZGVm aW5lIEZfQ0NJRF9ICisKKyNkZWZpbmUgQ0NJRDFfMTAgICAgICAgICAgICAgICAgMHgwMTEwCisj ZGVmaW5lIENDSURfREVDUklQVE9SX1RZUEUgICAgIDB4MjEKKyNkZWZpbmUgQUJEQVRBX1NJWkUJ CTUxMgorI2RlZmluZSBTTUFSVF9DQVJEX0RFVklDRV9DTEFTUwkweDBCCisKKy8qIENDSUQgQ2xh c3MgU3BlY2lmaWMgUmVxdWVzdCAqLworI2RlZmluZSBDQ0lER0VORVJJQ1JFUV9BQk9SVCAgICAg ICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBDQ0lER0VORVJJQ1JFUV9HRVRfQ0xPQ0tfRlJF UVVFTkNJRVMgICAgMHgwMgorI2RlZmluZSBDQ0lER0VORVJJQ1JFUV9HRVRfREFUQV9SQVRFUyAg ICAgICAgICAgMHgwMworCisvKiBTdXBwb3J0ZWQgdm9sdGFnZXMgKi8KKyNkZWZpbmUgQ0NJRF9W T0xUU19BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIENDSURf Vk9MVFNfNV8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBDQ0lE X1ZPTFRTXzNfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQ0NJ RF9WT0xUU18xXzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzCisKK3N0cnVjdCBm X2NjaWRnX29wdHMgeworCXN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgZnVuY19pbnN0Owor CWludAltaW5vcjsKKwlfX3UzMglmZWF0dXJlczsKKwlfX3UzMglwcm90b2NvbHM7CisJX191OAlw aW5zdXBwb3J0OworCV9fdTgJbnNsb3RzOworCV9fdTgJbGNkbGF5b3V0OworCisJLyoKKwkgKiBQ cm90ZWN0IHRoZSBkYXRhIGZvcm0gY29uY3VycmVudCBhY2Nlc3MgYnkgcmVhZC93cml0ZQorCSAq IGFuZCBjcmVhdGUgc3ltbGluay9yZW1vdmUgc3ltbGluay4KKwkgKi8KKwlzdHJ1Y3QgbXV0ZXgJ bG9jazsKKwlpbnQJCXJlZmNudDsKK307CisKK3N0cnVjdCBjY2lkZ19idWxrX2luX2hlYWRlciB7 CisJX191OAliTWVzc2FnZVR5cGU7CisJX19sZTMyCXdMZW5ndGg7CisJX191OAliU2xvdDsKKwlf X3U4CWJTZXE7CisJX191OAliU3RhdHVzOworCV9fdTgJYkVycm9yOworCV9fdTgJYlNwZWNpZmlj OworCV9fdTgJYWJEYXRhW0FCREFUQV9TSVpFXTsKKwlfX3U4CWJTaXplVG9TZW5kOworfSBfX3Bh Y2tlZDsKKworc3RydWN0IGNjaWRnX2J1bGtfb3V0X2hlYWRlciB7CisJX191OAkgYk1lc3NhZ2VU eXBlOworCV9fbGUzMgkgd0xlbmd0aDsKKwlfX3U4CSBiU2xvdDsKKwlfX3U4CSBiU2VxOworCV9f dTgJIGJTcGVjaWZpY18wOworCV9fdTgJIGJTcGVjaWZpY18xOworCV9fdTgJIGJTcGVjaWZpY18y OworCV9fdTgJIEFQRFVbQUJEQVRBX1NJWkVdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGNjaWRf Y2xhc3NfZGVzY3JpcHRvciB7CisJX191OAliTGVuZ3RoOworCV9fdTgJYkRlc2NyaXB0b3JUeXBl OworCV9fbGUxNgliY2RDQ0lEOworCV9fdTgJYk1heFNsb3RJbmRleDsKKwlfX3U4CWJWb2x0YWdl U3VwcG9ydDsKKwlfX2xlMzIJZHdQcm90b2NvbHM7CisJX19sZTMyCWR3RGVmYXVsdENsb2NrOwor CV9fbGUzMglkd01heGltdW1DbG9jazsKKwlfX3U4CWJOdW1DbG9ja1N1cHBvcnRlZDsKKwlfX2xl MzIJZHdEYXRhUmF0ZTsKKwlfX2xlMzIJZHdNYXhEYXRhUmF0ZTsKKwlfX3U4CWJOdW1EYXRhUmF0 ZXNTdXBwb3J0ZWQ7CisJX19sZTMyCWR3TWF4SUZTRDsKKwlfX2xlMzIJZHdTeW5jaFByb3RvY29s czsKKwlfX2xlMzIJZHdNZWNoYW5pY2FsOworCV9fbGUzMglkd0ZlYXR1cmVzOworCV9fbGUzMglk d01heENDSURNZXNzYWdlTGVuZ3RoOworCV9fdTgJYkNsYXNzR2V0UmVzcG9uc2U7CisJX191OAli Q2xhc3NFbnZlbG9wZTsKKwlfX2xlMTYJd0xjZExheW91dDsKKwlfX3U4CWJQSU5TdXBwb3J0Owor CV9fdTgJYk1heENDSURCdXN5U2xvdHM7Cit9IF9fcGFja2VkOworCisKKyNlbmRpZgpkaWZmIC0t Z2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3VzYi9jY2lkLmggYi9pbmNsdWRlL3VhcGkvbGludXgv dXNiL2NjaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmE5Zjg5 MDZmMTk0OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC91c2IvY2NpZC5o CkBAIC0wLDAgKzEsOTMgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIFdJ VEggTGludXgtc3lzY2FsbC1ub3RlICovCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1hcmN1 cyBGb2xrZXNzb24gPG1hcmN1cy5mb2xrZXNzb25AZ21haWwuY29tPgorICoKKyAqIFRoaXMgZmls ZSBob2xkcyBVU0IgY29uc3RhbnRzIGRlZmluZWQgYnkgdGhlIENDSUQgU3BlY2lmaWNhdGlvbi4K KyAqLworCisjaWZuZGVmIENDSURfSAorI2RlZmluZSBDQ0lEX0gKKworLyogU2xvdCBlcnJvciBy ZWdpc3RlciB3aGVuIGJtQ29tbWFuZFN0YXR1cyA9IDEgKi8KKyNkZWZpbmUgQ0NJRF9DTURfQUJP UlRFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGCisjZGVmaW5lIENDSURfSUNDX01V VEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRQorI2RlZmluZSBDQ0lEX1hGUl9Q QVJJVFlfRVJST1IgICAgICAgICAgICAgICAgICAgICAgIDB4RkQKKyNkZWZpbmUgQ0NJRF9YRlJf T1ZFUlJVTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZDCisjZGVmaW5lIENDSURfSFdf RVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQgorI2RlZmluZSBDQ0lEX0JB RF9BVFJfVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjgKKyNkZWZpbmUgQ0NJRF9C QURfQVRSX1RDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEY3CisjZGVmaW5lIENDSURf SUNDX1BST1RPQ09MX05PVF9TVVBQT1JURUQgICAgICAgICAgICAgMHhGNgorI2RlZmluZSBDQ0lE X0lDQ19DTEFTU19OT1RfU1VQUE9SVEVEICAgICAgICAgICAgICAgIDB4RjUKKyNkZWZpbmUgQ0NJ RF9QUk9DRURVUkVfQllURV9DT05GTElDVCAgICAgICAgICAgICAgICAweEY0CisjZGVmaW5lIEND SURfREVBQ1RJVkFURURfUFJPVE9DT0wgICAgICAgICAgICAgICAgICAgMHhGMworI2RlZmluZSBD Q0lEX0JVU1lfV0lUSF9BVVRPX1NFUVVFTkNFICAgICAgICAgICAgICAgIDB4RjIKKyNkZWZpbmUg Q0NJRF9QSU5fVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEYwCisjZGVmaW5l IENDSURfUElOX0NBTkNFTExFRCAgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRgorI2RlZmlu ZSBDQ0lEX0NNRF9TTE9UX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RTAKKworLyog UEMgdG8gUkRSIG1lc3NhZ2VzIChidWxrIG91dCkgKi8KKyNkZWZpbmUgQ0NJRF9QQ19UT19SRFJf SUNDUE9XRVJPTiAgICAgICAgICAgICAgICAgICAweDYyCisjZGVmaW5lIENDSURfUENfVE9fUkRS X0lDQ1BPV0VST0ZGICAgICAgICAgICAgICAgICAgMHg2MworI2RlZmluZSBDQ0lEX1BDX1RPX1JE Ul9HRVRTTE9UU1RBVFVTICAgICAgICAgICAgICAgIDB4NjUKKyNkZWZpbmUgQ0NJRF9QQ19UT19S RFJfWEZSQkxPQ0sgICAgICAgICAgICAgICAgICAgICAweDZGCisjZGVmaW5lIENDSURfUENfVE9f UkRSX0dFVFBBUkFNRVRFUlMgICAgICAgICAgICAgICAgMHg2QworI2RlZmluZSBDQ0lEX1BDX1RP X1JEUl9SRVNFVFBBUkFNRVRFUlMgICAgICAgICAgICAgIDB4NkQKKyNkZWZpbmUgQ0NJRF9QQ19U T19SRFJfU0VUUEFSQU1FVEVSUyAgICAgICAgICAgICAgICAweDYxCisjZGVmaW5lIENDSURfUENf VE9fUkRSX0VTQ0FQRSAgICAgICAgICAgICAgICAgICAgICAgMHg2QgorI2RlZmluZSBDQ0lEX1BD X1RPX1JEUl9JQ0NDTE9DSyAgICAgICAgICAgICAgICAgICAgIDB4NkUKKyNkZWZpbmUgQ0NJRF9Q Q19UT19SRFJfVDBBUERVICAgICAgICAgICAgICAgICAgICAgICAweDZBCisjZGVmaW5lIENDSURf UENfVE9fUkRSX1NFQ1VSRSAgICAgICAgICAgICAgICAgICAgICAgMHg2OQorI2RlZmluZSBDQ0lE X1BDX1RPX1JEUl9NRUNIQU5JQ0FMICAgICAgICAgICAgICAgICAgIDB4NzEKKyNkZWZpbmUgQ0NJ RF9QQ19UT19SRFJfQUJPUlQgICAgICAgICAgICAgICAgICAgICAgICAweDcyCisjZGVmaW5lIEND SURfUENfVE9fUkRSX1NFVERBVEFSQVRFQU5EQ0xPQ0tGUkVRVUVOQ1kgMHg3MworCisvKiBSRFIg dG8gUEMgbWVzc2FnZXMgKGJ1bGsgaW4pICovCisjZGVmaW5lIENDSURfUkRSX1RPX1BDX0RBVEFC TE9DSyAgICAgICAgICAgICAgICAgICAgMHg4MAorI2RlZmluZSBDQ0lEX1JEUl9UT19QQ19TTE9U U1RBVFVTICAgICAgICAgICAgICAgICAgIDB4ODEKKyNkZWZpbmUgQ0NJRF9SRFJfVE9fUENfUEFS QU1FVEVSUyAgICAgICAgICAgICAgICAgICAweDgyCisjZGVmaW5lIENDSURfUkRSX1RPX1BDX0VT Q0FQRSAgICAgICAgICAgICAgICAgICAgICAgMHg4MworI2RlZmluZSBDQ0lEX1JEUl9UT19QQ19E QVRBUkFURUFORENMT0NLRlJFUVVFTkNZICAgIDB4ODQKKworLyogQ2xhc3MgRmVhdHVyZXMgKi8K KworLyogTm8gc3BlY2lhbCBjaGFyYWN0ZXJpc3RpY3MgKi8KKyNkZWZpbmUgQ0NJRF9GRUFUVVJF U19OQURBICAgICAgIDB4MDAwMDAwMDAKKy8qIEF1dG9tYXRpYyBwYXJhbWV0ZXIgY29uZmlndXJh dGlvbiBiYXNlZCBvbiBBVFIgZGF0YSAqLworI2RlZmluZSBDQ0lEX0ZFQVRVUkVTX0FVVE9fUENP TkYgMHgwMDAwMDAwMgorLyogQXV0b21hdGljIGFjdGl2YXRpb24gb2YgSUNDIG9uIGluc2VydGlu ZyAqLworI2RlZmluZSBDQ0lEX0ZFQVRVUkVTX0FVVE9fQUNUSVYgMHgwMDAwMDAwNAorLyogQXV0 b21hdGljIElDQyB2b2x0YWdlIHNlbGVjdGlvbiAqLworI2RlZmluZSBDQ0lEX0ZFQVRVUkVTX0FV VE9fVk9MVCAgMHgwMDAwMDAwOAorLyogQXV0b21hdGljIElDQyBjbG9jayBmcmVxdWVuY3kgY2hh bmdlICovCisjZGVmaW5lIENDSURfRkVBVFVSRVNfQVVUT19DTE9DSyAweDAwMDAwMDEwCisvKiBB dXRvbWF0aWMgYmF1ZCByYXRlIGNoYW5nZSAqLworI2RlZmluZSBDQ0lEX0ZFQVRVUkVTX0FVVE9f QkFVRCAgMHgwMDAwMDAyMAorLypBdXRvbWF0aWMgcGFyYW1ldGVycyBuZWdvdGlhdGlvbiBtYWRl IGJ5IHRoZSBDQ0lEICovCisjZGVmaW5lIENDSURfRkVBVFVSRVNfQVVUT19QTkVHTyAweDAwMDAw MDQwCisvKiBBdXRvbWF0aWMgUFBTIG1hZGUgYnkgdGhlIENDSUQgYWNjb3JkaW5nIHRvIHRoZSBh Y3RpdmUgcGFyYW1ldGVycyAqLworI2RlZmluZSBDQ0lEX0ZFQVRVUkVTX0FVVE9fUFBTICAgMHgw MDAwMDA4MAorLyogQ0NJRCBjYW4gc2V0IElDQyBpbiBjbG9jayBzdG9wIG1vZGUgKi8KKyNkZWZp bmUgQ0NJRF9GRUFUVVJFU19JQ0NTVE9QICAgIDB4MDAwMDAxMDAKKy8qIE5BRCB2YWx1ZSBvdGhl ciB0aGFuIDAwIGFjY2VwdGVkIChUPTEgcHJvdG9jb2wgaW4gdXNlKSAqLworI2RlZmluZSBDQ0lE X0ZFQVRVUkVTX05BRCAgICAgICAgMHgwMDAwMDIwMAorLyogQXV0b21hdGljIElGU0QgZXhjaGFu Z2UgYXMgZmlyc3QgZXhjaGFuZ2UgKFQ9MSBwcm90b2NvbCBpbiB1c2UpICovCisjZGVmaW5lIEND SURfRkVBVFVSRVNfQVVUT19JRlNEICAweDAwMDAwNDAwCisvKiBUUERVIGxldmVsIGV4Y2hhbmdl cyB3aXRoIENDSUQgKi8KKyNkZWZpbmUgQ0NJRF9GRUFUVVJFU19FWENfVFBEVSAgIDB4MDAwMTAw MDAKKy8qIFNob3J0IEFQRFUgbGV2ZWwgZXhjaGFuZ2Ugd2l0aCBDQ0lEICovCisjZGVmaW5lIEND SURfRkVBVFVSRVNfRVhDX1NBUERVICAweDAwMDIwMDAwCisvKiBTaG9ydCBhbmQgRXh0ZW5kZWQg QVBEVSBsZXZlbCBleGNoYW5nZSB3aXRoIENDSUQgKi8KKyNkZWZpbmUgQ0NJRF9GRUFUVVJFU19F WENfQVBEVSAgIDB4MDAwNDAwMDAKKy8qIFVTQiBXYWtlIHVwIHNpZ25hbGluZyBzdXBwb3J0ZWQg b24gY2FyZCBpbnNlcnRpb24gYW5kIHJlbW92YWwgKi8KKyNkZWZpbmUgQ0NJRF9GRUFUVVJFU19X QUtFVVAJMHgwMDEwMDAwMAorCisvKiBTdXBwb3J0ZWQgcHJvdG9jb2xzICovCisjZGVmaW5lIEND SURfUFJPVE9DT0xfTk9UX1NFTAkweDAwCisjZGVmaW5lIENDSURfUFJPVE9DT0xfVDAJMHgwMQor I2RlZmluZSBDQ0lEX1BST1RPQ09MX1QxCTB4MDIKKworI2RlZmluZSBDQ0lEX1BJTlNVUE9PUlRf Tk9ORQkJKDAgPDwgMCkKKyNkZWZpbmUgQ0NJRF9QSU5TVVBPT1JUX1ZFUklGSUNBVElPTgkoMSA8 PCAxKQorI2RlZmluZSBDQ0lEX1BJTlNVUE9PUlRfTU9ESUZJQ0FUSU9OCSgxIDw8IDIpCisKKyNl bmRpZgo=