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: [1/3] usb: gadget: ccid: add support for USB CCID Gadget Device From: Marcus Folkesson Message-Id: <20180526203401.16586-1-marcus.folkesson@gmail.com> Date: Sat, 26 May 2018 22:33:59 +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: U2lnbmVkLW9mZi1ieTogTWFyY3VzIEZvbGtlc3NvbiA8bWFyY3VzLmZvbGtlc3NvbkBnbWFpbC5j b20+Ci0tLQogZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgICAgICAgICAgIHwgIDE3ICsKIGRy aXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZSB8ICAgMSArCiBkcml2ZXJzL3VzYi9n YWRnZXQvZnVuY3Rpb24vZl9jY2lkLmMgfCA5ODggKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIGRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX2NjaWQuaCB8ICA5MSArKysr CiBpbmNsdWRlL3VhcGkvbGludXgvdXNiL2NjaWQuaCAgICAgICAgfCAgOTMgKysrKwogNSBmaWxl cyBjaGFuZ2VkLCAxMTkwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9jY2lkLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9jY2lkLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRl L3VhcGkvbGludXgvdXNiL2NjaWQuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9L Y29uZmlnIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKaW5kZXggMzFjY2U3ODA1ZWIyLi5i ZGViZGYxZmZhMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCisrKyBi L2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCkBAIC0xNDksNiArMTQ5LDkgQEAgY29uZmlnIFVT Ql9MSUJDT01QT1NJVEUKIGNvbmZpZyBVU0JfRl9BQ00KIAl0cmlzdGF0ZQogCitjb25maWcgVVNC X0ZfQ0NJRAorCXRyaXN0YXRlCisKIGNvbmZpZyBVU0JfRl9TU19MQgogCXRyaXN0YXRlCiAKQEAg LTI0OCw2ICsyNTEsMjAgQEAgY29uZmlnIFVTQl9DT05GSUdGU19BQ00KIAkgIEFDTSBzZXJpYWwg bGluay4gIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gaW50ZXJvcGVyYXRlIHdpdGgKIAkg IE1TLVdpbmRvd3MgaG9zdHMgb3Igd2l0aCB0aGUgTGludXgtVVNCICJjZGMtYWNtIiBkcml2ZXIu CiAKK2NvbmZpZyBVU0JfQ09ORklHRlNfQ0NJRAorCWJvb2wgIkNoaXAgQ2FyZCBJbnRlcmZhY2Ug RGV2aWNlIChDQ0lEKSIKKwlkZXBlbmRzIG9uIFVTQl9DT05GSUdGUworCXNlbGVjdCBVU0JfRl9D Q0lECisJaGVscAorCSAgVGhlIENDSUQgZnVuY3Rpb24gZHJpdmVyIHByb3ZpZGVzIGdlbmVyaWMg ZW11bGF0aW9uIG9mIGEKKwkgIENoaXAgQ2FyZCBJbnRlcmZhY2UgRGV2aWNlIChDQ0lEKS4KKwor CSAgWW91IHdpbGwgbmVlZCBhIHVzZXIgc3BhY2Ugc2VydmVyIHRhbGtpbmcgdG8gL2Rldi9jY2lk ZyosCisJICBzaW5jZSB0aGUga2VybmVsIGl0c2VsZiBkb2VzIG5vdCBpbXBsZW1lbnQgQ0NJRC9U UERVL0FQRFUKKwkgIHByb3RvY29sLgorCisJICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIERv Y3VtZW50YXRpb24vdXNiL2dhZGdldF9jY2lkLnJzdC4KKwogY29uZmlnIFVTQl9DT05GSUdGU19P QkVYCiAJYm9vbCAiT2JqZWN0IEV4Y2hhbmdlIE1vZGVsIChDREMgT0JFWCkiCiAJZGVwZW5kcyBv biBVU0JfQ09ORklHRlMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9N YWtlZmlsZSBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZQppbmRleCA1ZDNh NmNmMDIyMTguLjYyOTg1MTAwOWUxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1 bmN0aW9uL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmls ZQpAQCAtOSw2ICs5LDcgQEAgY2NmbGFncy15CQkJKz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvdXNi L2dhZGdldC91ZGMvCiAjIFVTQiBGdW5jdGlvbnMKIHVzYl9mX2FjbS15CQkJOj0gZl9hY20ubwog b2JqLSQoQ09ORklHX1VTQl9GX0FDTSkJCSs9IHVzYl9mX2FjbS5vCitvYmotJChDT05GSUdfVVNC X0ZfQ0NJRCkJKz0gZl9jY2lkLm8KIHVzYl9mX3NzX2xiLXkJCQk6PSBmX2xvb3BiYWNrLm8gZl9z b3VyY2VzaW5rLm8KIG9iai0kKENPTkZJR19VU0JfRl9TU19MQikJKz0gdXNiX2Zfc3NfbGIubwog b2JqLSQoQ09ORklHX1VTQl9VX1NFUklBTCkJKz0gdV9zZXJpYWwubwpkaWZmIC0tZ2l0IGEvZHJp dmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfY2NpZC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1 bmN0aW9uL2ZfY2NpZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u OWZmODYxNWNhMzAzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0 aW9uL2ZfY2NpZC5jCkBAIC0wLDAgKzEsOTg4IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMAorLyoKKyAqIGZfY2NpZC5jIC0tIENoaXAgQ2FyZCBJbnRlcmZhY2UgRGV2aWNl IChDQ0lEKSBmdW5jdGlvbiBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWFyY3Vz IEZvbGtlc3NvbiA8bWFyY3VzLmZvbGtlc3NvbkBnbWFpbC5jb20+CisgKgorICovCisjaW5jbHVk ZSA8bGludXgvY2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxp bnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4K KyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2NvbXBvc2l0 ZS5oPgorI2luY2x1ZGUgPHVhcGkvbGludXgvdXNiL2NjaWQuaD4KKworI2luY2x1ZGUgImZfY2Np ZC5oIgorI2luY2x1ZGUgInVfZi5oIgorCisvKiBOdW1iZXIgb2YgdHggcmVxdWVzdHMgdG8gYWxs b2NhdGUgKi8KKyNkZWZpbmUgTl9UWF9SRVFTIDQKKworLyogTWF4aW11bSBudW1iZXIgb2YgZGV2 aWNlcyAqLworI2RlZmluZSBDQ0lEX01JTk9SUyA0CisKK3N0cnVjdCBjY2lkZ19idWxrX2RldiB7 CisJYXRvbWljX3QgaXNfb3BlbjsKKwlhdG9taWNfdCByeF9yZXFfYnVzeTsKKwl3YWl0X3F1ZXVl X2hlYWRfdCByZWFkX3dxOworCXdhaXRfcXVldWVfaGVhZF90IHdyaXRlX3dxOworCXN0cnVjdCB1 c2JfcmVxdWVzdCAqcnhfcmVxOworCWF0b21pY190IHJ4X2RvbmU7CisJc3RydWN0IGxpc3RfaGVh ZCB0eF9pZGxlOworfTsKKworc3RydWN0IGZfY2NpZGcgeworCXN0cnVjdCB1c2JfZnVuY3Rpb25f aW5zdGFuY2UJZnVuY19pbnN0OworCXN0cnVjdCB1c2JfZnVuY3Rpb24gZnVuY3Rpb247CisJc3Bp bmxvY2tfdCBsb2NrOworCWF0b21pY190IG9ubGluZTsKKworCS8qIENoYXJhY3RlciBkZXZpY2Ug Ki8KKwlzdHJ1Y3QgY2RldiBjZGV2OworCWludCBtaW5vcjsKKworCS8qIER5bmFtaWMgYXR0cmli dXRlcyAqLworCXUzMiBmZWF0dXJlczsKKwl1MzIgcHJvdG9jb2xzOworCXU4IHBpbnN1cHBvcnQ7 CisJdTggbnNsb3RzOworCXU4IGxjZGxheW91dDsKKworCS8qIEVuZHBvaW50cyAqLworCXN0cnVj dCB1c2JfZXAgKmluOworCXN0cnVjdCB1c2JfZXAgKm91dDsKKwlzdHJ1Y3QgY2NpZGdfYnVsa19k ZXYgYnVsa19kZXY7Cit9OworCisvKiBJbnRlcmZhY2UgRGVzY3JpcHRvcjogKi8KK3N0YXRpYyBz dHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIGNjaWRfaW50ZXJmYWNlX2Rlc2MgPSB7CisJ LmJMZW5ndGggPQkJVVNCX0RUX0lOVEVSRkFDRV9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlV U0JfRFRfSU5URVJGQUNFLAorCS5iTnVtRW5kcG9pbnRzID0JMiwKKwkuYkludGVyZmFjZUNsYXNz ID0JVVNCX0NMQVNTX0NTQ0lELAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPQkwLAorCS5iSW50ZXJm YWNlUHJvdG9jb2wgPQkwLAorfTsKKworLyogQ0NJRCBDbGFzcyBEZXNjcmlwdG9yICovCitzdGF0 aWMgc3RydWN0IGNjaWRfY2xhc3NfZGVzY3JpcHRvciBjY2lkX2NsYXNzX2Rlc2MgPSB7CisJLmJM ZW5ndGggPQkJc2l6ZW9mKGNjaWRfY2xhc3NfZGVzYyksCisJLmJEZXNjcmlwdG9yVHlwZSA9CUND SURfREVDUklQVE9SX1RZUEUsCisJLmJjZENDSUQgPQkJQ0NJRDFfMTAsCisJLyogLmJNYXhTbG90 SW5kZXggPQlEWU5BTUlDICovCisJLmJWb2x0YWdlU3VwcG9ydCA9CUNDSURfVk9MVFNfM18wLAor CS8qIC5kd1Byb3RvY29scyA9CURZTkFNSUMgKi8KKwkuZHdEZWZhdWx0Q2xvY2sgPQkzNTgwLAor CS5kd01heGltdW1DbG9jayA9CTM1ODAsCisJLmJOdW1DbG9ja1N1cHBvcnRlZCA9CTAsCisJLmR3 RGF0YVJhdGUgPQkJOTYwMCwKKwkuZHdNYXhEYXRhUmF0ZSA9CTk2MDAsCisJLmJOdW1EYXRhUmF0 ZXNTdXBwb3J0ZWQgPSAwLAorCS5kd01heElGU0QgPQkJMCwKKwkuZHdTeW5jaFByb3RvY29scyA9 CTAsCisJLmR3TWVjaGFuaWNhbCA9CQkwLAorCS8qIC5kd0ZlYXR1cmVzID0JRFlOQU1JQyAqLwor CisJLyogZXh0ZW5kZWQgQVBEVSBsZXZlbCBNZXNzYWdlIExlbmd0aCAqLworCS5kd01heENDSURN ZXNzYWdlTGVuZ3RoID0gMHgyMDAsCisJLmJDbGFzc0dldFJlc3BvbnNlID0JMHgwLAorCS5iQ2xh c3NFbnZlbG9wZSA9CTB4MCwKKwkvKiAud0xjZExheW91dCA9CURZTkFNSUMgKi8KKwkvKiAuYlBJ TlN1cHBvcnQgPQlEWU5BTUlDICovCisJLmJNYXhDQ0lEQnVzeVNsb3RzID0JMQorfTsKKworLyog RnVsbCBzcGVlZCBzdXBwb3J0OiAqLworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3Jp cHRvciBjY2lkX2ZzX2luX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJ WkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKwkuYkVuZHBvaW50QWRk cmVzcyA9CVVTQl9ESVJfSU4sCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9C VUxLLAorCS53TWF4UGFja2V0U2l6ZSAgID0JY3B1X3RvX2xlMTYoNjQpLAorfTsKKworc3RhdGlj IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBjY2lkX2ZzX291dF9kZXNjID0geworCS5i TGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0Jf RFRfRU5EUE9JTlQsCisJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX09VVCwKKwkuYm1BdHRy aWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLndNYXhQYWNrZXRTaXplICAgPQkg Y3B1X3RvX2xlMTYoNjQpLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFk ZXIgKmNjaWRfZnNfZGVzY3NbXSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAq KSAmY2NpZF9pbnRlcmZhY2VfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAq KSAmY2NpZF9jbGFzc19kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZj Y2lkX2ZzX2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmNjaWRf ZnNfb3V0X2Rlc2MsCisJTlVMTCwKK307CisKKy8qIEhpZ2ggc3BlZWQgc3VwcG9ydDogKi8KK3N0 YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgY2NpZF9oc19pbl9kZXNjID0gewor CS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlV U0JfRFRfRU5EUE9JTlQsCisJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAorCS5ibUF0 dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkud01heFBhY2tldFNpemUgPQlj cHVfdG9fbGUxNig1MTIpLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3Jp cHRvciBjY2lkX2hzX291dF9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9T SVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisJLmJFbmRwb2ludEFk ZHJlc3MgPQlVU0JfRElSX09VVCwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVS X0JVTEssCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKK307CisKK3N0YXRp YyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpjY2lkX2hzX2Rlc2NzW10gPSB7CisJKHN0 cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmNjaWRfaW50ZXJmYWNlX2Rlc2MsCisJKHN0 cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmNjaWRfY2xhc3NfZGVzYywKKwkoc3RydWN0 IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmY2NpZF9oc19pbl9kZXNjLAorCShzdHJ1Y3QgdXNi X2Rlc2NyaXB0b3JfaGVhZGVyICopICZjY2lkX2hzX291dF9kZXNjLAorCU5VTEwsCit9OworCitz dGF0aWMgREVGSU5FX0lEQShjY2lkZ19pZGEpOworc3RhdGljIGludCBtYWpvcjsKK3N0YXRpYyBE RUZJTkVfTVVURVgoY2NpZGdfaWRhX2xvY2spOyAvKiBwcm90ZWN0cyBhY2Nlc3MgdG8gY2NpZGdf aWRhICovCitzdGF0aWMgc3RydWN0IGNsYXNzICpjY2lkZ19jbGFzczsKKworc3RhdGljIGlubGlu ZSBzdHJ1Y3QgZl9jY2lkZ19vcHRzICp0b19mX2NjaWRnX29wdHMoc3RydWN0IGNvbmZpZ19pdGVt ICppdGVtKQoreworCXJldHVybiBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLCBz dHJ1Y3QgZl9jY2lkZ19vcHRzLAorCQkJICAgIGZ1bmNfaW5zdC5ncm91cCk7Cit9CisKK3N0YXRp YyBpbmxpbmUgc3RydWN0IGZfY2NpZGcgKmZ1bmNfdG9fY2NpZGcoc3RydWN0IHVzYl9mdW5jdGlv biAqZikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGYsIHN0cnVjdCBmX2NjaWRnLCBmdW5jdGlv bik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNjaWRnX2dldF9taW5vcih2b2lkKQoreworCWlu dCByZXQ7CisKKwlyZXQgPSBpZGFfc2ltcGxlX2dldCgmY2NpZGdfaWRhLCAwLCAwLCBHRlBfS0VS TkVMKTsKKwlpZiAocmV0ID49IENDSURfTUlOT1JTKSB7CisJCWlkYV9zaW1wbGVfcmVtb3ZlKCZj Y2lkZ19pZGEsIHJldCk7CisJCXJldCA9IC1FTk9ERVY7CisJfQorCisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGlubGluZSB2b2lkIGNjaWRnX3B1dF9taW5vcihpbnQgbWlub3IpCit7CisJaWRh X3NpbXBsZV9yZW1vdmUoJmNjaWRnX2lkYSwgbWlub3IpOworfQorCitzdGF0aWMgaW50IGNjaWRn X3NldHVwKHZvaWQpCit7CisJaW50IHJldDsKKwlkZXZfdCBkZXY7CisKKwljY2lkZ19jbGFzcyA9 IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgImNjaWRnIik7CisJaWYgKElTX0VSUihjY2lkZ19j bGFzcykpIHsKKwkJY2NpZGdfY2xhc3MgPSBOVUxMOworCQlyZXR1cm4gUFRSX0VSUihjY2lkZ19j bGFzcyk7CisJfQorCisJcmV0ID0gYWxsb2NfY2hyZGV2X3JlZ2lvbigmZGV2LCAwLCBDQ0lEX01J Tk9SUywgImNjaWRnIik7CisJaWYgKHJldCkgeworCQljbGFzc19kZXN0cm95KGNjaWRnX2NsYXNz KTsKKwkJY2NpZGdfY2xhc3MgPSBOVUxMOworCQlyZXR1cm4gcmV0OworCX0KKworCW1ham9yID0g TUFKT1IoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjY2lkZ19jbGVhbnVw KHZvaWQpCit7CisJaWYgKG1ham9yKSB7CisJCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RF VihtYWpvciwgMCksIENDSURfTUlOT1JTKTsKKwkJbWFqb3IgPSAwOworCX0KKworCWNsYXNzX2Rl c3Ryb3koY2NpZGdfY2xhc3MpOworCWNjaWRnX2NsYXNzID0gTlVMTDsKK30KKworc3RhdGljIHZv aWQgY2NpZGdfYXR0cl9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKK3sKKwlzdHJ1 Y3QgZl9jY2lkZ19vcHRzICpvcHRzID0gdG9fZl9jY2lkZ19vcHRzKGl0ZW0pOworCisJdXNiX3B1 dF9mdW5jdGlvbl9pbnN0YW5jZSgmb3B0cy0+ZnVuY19pbnN0KTsKK30KKworc3RhdGljIHN0cnVj dCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgY2NpZGdfaXRlbV9vcHMgPSB7CisJLnJlbGVhc2UJ PSBjY2lkZ19hdHRyX3JlbGVhc2UsCit9OworCisjZGVmaW5lIEZfQ0NJREdfT1BUKG5hbWUsIHBy ZWMsIGxpbWl0KQkJCQkJXAorc3RhdGljIHNzaXplX3QgZl9jY2lkZ19vcHRzXyMjbmFtZSMjX3No b3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpwYWdlKVwKK3sJCQkJCQkJCQlcCisJ c3RydWN0IGZfY2NpZGdfb3B0cyAqb3B0cyA9IHRvX2ZfY2NpZGdfb3B0cyhpdGVtKTsJCVwKKwlp bnQgcmVzdWx0OwkJCQkJCQlcCisJCQkJCQkJCQlcCisJbXV0ZXhfbG9jaygmb3B0cy0+bG9jayk7 CQkJCQlcCisJcmVzdWx0ID0gc3ByaW50ZihwYWdlLCAiJXhcbiIsIG9wdHMtPm5hbWUpOwkJCVwK KwltdXRleF91bmxvY2soJm9wdHMtPmxvY2spOwkJCQkJXAorCQkJCQkJCQkJXAorCXJldHVybiBy ZXN1bHQ7CQkJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgc3NpemVfdCBm X2NjaWRnX29wdHNfIyNuYW1lIyNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLAlcCisJ CQkJCSBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKQlcCit7CQkJCQkJCQkJXAorCXN0cnVj dCBmX2NjaWRnX29wdHMgKm9wdHMgPSB0b19mX2NjaWRnX29wdHMoaXRlbSk7CQlcCisJaW50IHJl dDsJCQkJCQkJXAorCXUjI3ByZWMgbnVtOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJbXV0ZXhfbG9j aygmb3B0cy0+bG9jayk7CQkJCQlcCisJaWYgKG9wdHMtPnJlZmNudCkgewkJCQkJCVwKKwkJcmV0 ID0gLUVCVVNZOwkJCQkJCVwKKwkJZ290byBlbmQ7CQkJCQkJXAorCX0JCQkJCQkJCVwKKwkJCQkJ CQkJCVwKKwlyZXQgPSBrc3RydG91IyNwcmVjKHBhZ2UsIDAsICZudW0pOwkJCQlcCisJaWYgKHJl dCkJCQkJCQkJXAorCQlnb3RvIGVuZDsJCQkJCQlcCisJCQkJCQkJCQlcCisJaWYgKG51bSA+IGxp bWl0KSB7CQkJCQkJXAorCQlyZXQgPSAtRUlOVkFMOwkJCQkJCVwKKwkJZ290byBlbmQ7CQkJCQkJ XAorCX0JCQkJCQkJCVwKKwlvcHRzLT5uYW1lID0gbnVtOwkJCQkJCVwKKwlyZXQgPSBsZW47CQkJ CQkJCVwKKwkJCQkJCQkJCVwKK2VuZDoJCQkJCQkJCQlcCisJbXV0ZXhfdW5sb2NrKCZvcHRzLT5s b2NrKTsJCQkJCVwKKwlyZXR1cm4gcmV0OwkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJ XAorQ09ORklHRlNfQVRUUihmX2NjaWRnX29wdHNfLCBuYW1lKQorCitGX0NDSURHX09QVChmZWF0 dXJlcywgMzIsIDB4ZmZmZmZmZmYpOworRl9DQ0lER19PUFQocHJvdG9jb2xzLCAzMiwgMHgwMyk7 CitGX0NDSURHX09QVChwaW5zdXBwb3J0LCA4LCAweDAzKTsKK0ZfQ0NJREdfT1BUKGxjZGxheW91 dCwgMTYsIDB4ZmZmZik7CitGX0NDSURHX09QVChuc2xvdHMsIDgsIDB4ZmYpOworCitzdGF0aWMg c3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqY2NpZGdfYXR0cnNbXSA9IHsKKwkmZl9jY2lkZ19v cHRzX2F0dHJfZmVhdHVyZXMsCisJJmZfY2NpZGdfb3B0c19hdHRyX3Byb3RvY29scywKKwkmZl9j Y2lkZ19vcHRzX2F0dHJfcGluc3VwcG9ydCwKKwkmZl9jY2lkZ19vcHRzX2F0dHJfbGNkbGF5b3V0 LAorCSZmX2NjaWRnX29wdHNfYXR0cl9uc2xvdHMsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1 Y3QgY29uZmlnX2l0ZW1fdHlwZSBjY2lkZ19mdW5jX3R5cGUgPSB7CisJLmN0X2l0ZW1fb3BzCT0g JmNjaWRnX2l0ZW1fb3BzLAorCS5jdF9hdHRycwk9IGNjaWRnX2F0dHJzLAorCS5jdF9vd25lcgk9 IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIHZvaWQgY2NpZGdfcmVxX3B1dChzdHJ1Y3QgZl9j Y2lkZyAqY2NpZGcsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCXN0cnVjdCB1c2JfcmVxdWVz dCAqcmVxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgm Y2NpZGctPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZyZXEtPmxpc3QsIGhlYWQpOwor CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNjaWRnLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRp YyBzdHJ1Y3QgdXNiX3JlcXVlc3QgKmNjaWRnX3JlcV9nZXQoc3RydWN0IGZfY2NpZGcgKmNjaWRn LAorCQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 CisJc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEgPSBOVUxMOworCisJc3Bpbl9sb2NrX2lycXNhdmUo JmNjaWRnLT5sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CisJCXJlcSA9 IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IHVzYl9yZXF1ZXN0LCBsaXN0KTsKKwkJbGlz dF9kZWwoJnJlcS0+bGlzdCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNjaWRnLT5s b2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmVxOworfQorCitzdGF0aWMgdm9pZCBjY2lkZ19idWxr X2NvbXBsZXRlX3R4KHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkK K3sKKwlzdHJ1Y3QgZl9jY2lkZyAqY2NpZGcgPSAoc3RydWN0IGZfY2NpZGcgKillcC0+ZHJpdmVy X2RhdGE7CisJc3RydWN0IGNjaWRnX2J1bGtfZGV2ICpidWxrX2RldiA9ICZjY2lkZy0+YnVsa19k ZXY7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2CT0gY2NpZGctPmZ1bmN0aW9uLmNv bmZpZy0+Y2RldjsKKworCXN3aXRjaCAocmVxLT5zdGF0dXMpIHsKKwlkZWZhdWx0OgorCQlWREJH KGNkZXYsICJjY2lkOiB0eCBlcnIgJWRcbiIsIHJlcS0+c3RhdHVzKTsKKwkJLyogRkFMTFRIUk9V R0ggKi8KKwljYXNlIC1FQ09OTlJFU0VUOgkJLyogdW5saW5rICovCisJY2FzZSAtRVNIVVRET1dO OgkJLyogZGlzY29ubmVjdCBldGMgKi8KKwkJYnJlYWs7CisJY2FzZSAwOgorCQlicmVhazsKKwl9 CisKKwljY2lkZ19yZXFfcHV0KGNjaWRnLCAmYnVsa19kZXYtPnR4X2lkbGUsIHJlcSk7CisJd2Fr ZV91cCgmYnVsa19kZXYtPndyaXRlX3dxKTsKK30KKworc3RhdGljIHZvaWQgY2NpZGdfYnVsa19j b21wbGV0ZV9yeChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7 CisJc3RydWN0IGZfY2NpZGcgKmNjaWRnID0gKHN0cnVjdCBmX2NjaWRnICopZXAtPmRyaXZlcl9k YXRhOworCXN0cnVjdCBjY2lkZ19idWxrX2RldiAqYnVsa19kZXYgPSAmY2NpZGctPmJ1bGtfZGV2 OworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2Rldgk9IGNjaWRnLT5mdW5jdGlvbi5jb25m aWctPmNkZXY7CisKKwlzd2l0Y2ggKHJlcS0+c3RhdHVzKSB7CisKKwkvKiBub3JtYWwgY29tcGxl dGlvbiAqLworCWNhc2UgMDoKKwkJLyogV2Ugb25seSBjYXJlcyBhYm91dCBwYWNrZXRzIHdpdGgg bm9uemVybyBsZW5ndGggKi8KKwkJaWYgKHJlcS0+YWN0dWFsID4gMCkKKwkJCWF0b21pY19zZXQo JmJ1bGtfZGV2LT5yeF9kb25lLCAxKTsKKwkJYnJlYWs7CisKKwkvKiBzb2Z0d2FyZS1kcml2ZW4g aW50ZXJmYWNlIHNodXRkb3duICovCisJY2FzZSAtRUNPTk5SRVNFVDoJCS8qIHVubGluayAqLwor CWNhc2UgLUVTSFVURE9XTjoJCS8qIGRpc2Nvbm5lY3QgZXRjICovCisJCVZEQkcoY2RldiwgImNj aWQ6IHJ4IHNodXRkb3duLCBjb2RlICVkXG4iLCByZXEtPnN0YXR1cyk7CisJCWJyZWFrOworCisJ LyogZm9yIGhhcmR3YXJlIGF1dG9tYWdpYyAoc3VjaCBhcyBweGEpICovCisJY2FzZSAtRUNPTk5B Qk9SVEVEOgkJLyogZW5kcG9pbnQgcmVzZXQgKi8KKwkJREJHKGNkZXYsICJjY2lkOiByeCAlcyBy ZXNldFxuIiwgZXAtPm5hbWUpOworCQlicmVhazsKKworCS8qIGRhdGEgb3ZlcnJ1biAqLworCWNh c2UgLUVPVkVSRkxPVzoKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwlkZWZhdWx0OgorCQlEQkcoY2Rl diwgImNjaWQ6IHJ4IHN0YXR1cyAlZFxuIiwgcmVxLT5zdGF0dXMpOworCQlicmVhazsKKwl9CisK Kwl3YWtlX3VwKCZidWxrX2Rldi0+cmVhZF93cSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3Jl cXVlc3QgKgorY2NpZGdfcmVxdWVzdF9hbGxvYyhzdHJ1Y3QgdXNiX2VwICplcCwgdW5zaWduZWQg aW50IGxlbikKK3sKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcTsKKworCXJlcSA9IHVzYl9lcF9h bGxvY19yZXF1ZXN0KGVwLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIEVSUl9Q VFIoLUVOT01FTSk7CisKKwlyZXEtPmxlbmd0aCA9IGxlbjsKKwlyZXEtPmJ1ZiA9IGttYWxsb2Mo bGVuLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVxLT5idWYgPT0gTlVMTCkgeworCQl1c2JfZXBfZnJl ZV9yZXF1ZXN0KGVwLCByZXEpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwly ZXR1cm4gcmVxOworfQorCitzdGF0aWMgdm9pZCBjY2lkZ19yZXF1ZXN0X2ZyZWUoc3RydWN0IHVz Yl9yZXF1ZXN0ICpyZXEsIHN0cnVjdCB1c2JfZXAgKmVwKQoreworCWlmIChyZXEpIHsKKwkJa2Zy ZWUocmVxLT5idWYpOworCQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGVwLCByZXEpOworCX0KK30KKwor c3RhdGljIGludCBjY2lkZ19mdW5jdGlvbl9zZXR1cChzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmLAor CQljb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKQoreworCXN0cnVjdCBmX2NjaWRn ICpjY2lkZyA9IGNvbnRhaW5lcl9vZihmLCBzdHJ1Y3QgZl9jY2lkZywgZnVuY3Rpb24pOworCXN0 cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2Rldgk9IGYtPmNvbmZpZy0+Y2RldjsKKwlzdHJ1Y3Qg dXNiX3JlcXVlc3QgKnJlcQkJPSBjZGV2LT5yZXE7CisJaW50IHJldAkJCQk9IC1FT1BOT1RTVVBQ OworCXUxNiB3X2luZGV4CQkJPSBsZTE2X3RvX2NwdShjdHJsLT53SW5kZXgpOworCXUxNiB3X3Zh bHVlCQkJPSBsZTE2X3RvX2NwdShjdHJsLT53VmFsdWUpOworCXUxNiB3X2xlbmd0aAkJCT0gbGUx Nl90b19jcHUoY3RybC0+d0xlbmd0aCk7CisKKwlpZiAoIWF0b21pY19yZWFkKCZjY2lkZy0+b25s aW5lKSkKKwkJcmV0dXJuIC1FTk9UQ09OTjsKKworCXN3aXRjaCAoY3RybC0+YlJlcXVlc3RUeXBl ICYgVVNCX1RZUEVfTUFTSykgeworCWNhc2UgVVNCX1RZUEVfQ0xBU1M6CisJCXsKKwkJc3dpdGNo IChjdHJsLT5iUmVxdWVzdCkgeworCQljYXNlIENDSURHRU5FUklDUkVRX0dFVF9DTE9DS19GUkVR VUVOQ0lFUzoKKwkJCSoodTMyICopIHJlcS0+YnVmID0gY3B1X3RvX2xlMzIoY2NpZF9jbGFzc19k ZXNjLmR3RGVmYXVsdENsb2NrKTsKKwkJCXJldCA9IG1pbl90KHUzMiwgd19sZW5ndGgsCisJCQkJ CXNpemVvZihjY2lkX2NsYXNzX2Rlc2MuZHdEZWZhdWx0Q2xvY2spKTsKKwkJCWJyZWFrOworCisJ CWNhc2UgQ0NJREdFTkVSSUNSRVFfR0VUX0RBVEFfUkFURVM6CisJCQkqKHUzMiAqKSByZXEtPmJ1 ZiA9IGNwdV90b19sZTMyKGNjaWRfY2xhc3NfZGVzYy5kd0RhdGFSYXRlKTsKKwkJCXJldCA9IG1p bl90KHUzMiwgd19sZW5ndGgsIHNpemVvZihjY2lkX2NsYXNzX2Rlc2MuZHdEYXRhUmF0ZSkpOwor CQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCVZEQkcoZi0+Y29uZmlnLT5jZGV2LAorCQkJCSJj Y2lkOiBpbnZhbGlkIGNvbnRyb2wgcmVxJTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwlZFxuIiwKKwkJ CQljdHJsLT5iUmVxdWVzdFR5cGUsIGN0cmwtPmJSZXF1ZXN0LAorCQkJCXdfdmFsdWUsIHdfaW5k ZXgsIHdfbGVuZ3RoKTsKKwkJfQorCQl9CisJfQorCisJLyogcmVzcG9uZGVkIHdpdGggZGF0YSB0 cmFuc2ZlciBvciBzdGF0dXMgcGhhc2U/ICovCisJaWYgKHJldCA+PSAwKSB7CisJCVZEQkcoZi0+ Y29uZmlnLT5jZGV2LCAiY2NpZDogcmVxJTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwlZFxuIiwKKwkJ CWN0cmwtPmJSZXF1ZXN0VHlwZSwgY3RybC0+YlJlcXVlc3QsCisJCQl3X3ZhbHVlLCB3X2luZGV4 LCB3X2xlbmd0aCk7CisKKwkJcmVxLT5sZW5ndGggPSByZXQ7CisJCXJldCA9IHVzYl9lcF9xdWV1 ZShjZGV2LT5nYWRnZXQtPmVwMCwgcmVxLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJldCA8IDApCisJ CQlFUlJPUihmLT5jb25maWctPmNkZXYsCisJCQkJImNjaWQ6IGVwMCBlbnF1ZXVlIGVyciAlZFxu IiwgcmV0KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjY2lkZ19mdW5j dGlvbl9kaXNhYmxlKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCit7CisJc3RydWN0IGZfY2NpZGcg KmNjaWRnID0gZnVuY190b19jY2lkZyhmKTsKKwlzdHJ1Y3QgY2NpZGdfYnVsa19kZXYgKmJ1bGtf ZGV2ID0gJmNjaWRnLT5idWxrX2RldjsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcTsKKworCS8q IERpc2FibGUgZW5kcG9pbnRzICovCisJdXNiX2VwX2Rpc2FibGUoY2NpZGctPmluKTsKKwl1c2Jf ZXBfZGlzYWJsZShjY2lkZy0+b3V0KTsKKworCS8qIEZyZWUgZW5kcG9pbnQgcmVsYXRlZCByZXF1 ZXN0cyAqLworCWlmICghYXRvbWljX3JlYWQoJmJ1bGtfZGV2LT5yeF9yZXFfYnVzeSkpCisJCWNj aWRnX3JlcXVlc3RfZnJlZShidWxrX2Rldi0+cnhfcmVxLCBjY2lkZy0+b3V0KTsKKwl3aGlsZSAo KHJlcSA9IGNjaWRnX3JlcV9nZXQoY2NpZGcsICZidWxrX2Rldi0+dHhfaWRsZSkpKQorCQljY2lk Z19yZXF1ZXN0X2ZyZWUocmVxLCBjY2lkZy0+aW4pOworCisJYXRvbWljX3NldCgmY2NpZGctPm9u bGluZSwgMCk7CisKKwkvKiBXYWtlIHVwIHRocmVhZHMgKi8KKwl3YWtlX3VwKCZidWxrX2Rldi0+ d3JpdGVfd3EpOworCXdha2VfdXAoJmJ1bGtfZGV2LT5yZWFkX3dxKTsKK30KKworaW50IGNjaWRn X3N0YXJ0X2VwKHN0cnVjdCBmX2NjaWRnICpjY2lkZywgc3RydWN0IHVzYl9mdW5jdGlvbiAqZiwK KwkJCXN0cnVjdCB1c2JfZXAgKmVwKQoreworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2Rl diA9IGYtPmNvbmZpZy0+Y2RldjsKKwlpbnQgcmV0OworCisJdXNiX2VwX2Rpc2FibGUoZXApOwor CisJcmV0ID0gY29uZmlnX2VwX2J5X3NwZWVkKGNkZXYtPmdhZGdldCwgZiwgZXApOworCWlmIChy ZXQpIHsKKwkJRVJST1IoY2RldiwgImNjaWQ6IGNhbid0IGNvbmZpZ3VyZSAlczogJWRcbiIsIGVw LT5uYW1lLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHVzYl9lcF9lbmFibGUo ZXApOworCWlmIChyZXQpIHsKKwkJRVJST1IoY2RldiwgImNjaWQ6IGNhbid0IHN0YXJ0ICVzOiAl ZFxuIiwgZXAtPm5hbWUsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZXAtPmRyaXZlcl9k YXRhID0gY2NpZGc7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNjaWRnX2Z1bmN0 aW9uX3NldF9hbHQoc3RydWN0IHVzYl9mdW5jdGlvbiAqZiwKKwkJdW5zaWduZWQgaW50IGludGYs IHVuc2lnbmVkIGludCBhbHQpCit7CisJc3RydWN0IGZfY2NpZGcgKmNjaWRnCQk9IGZ1bmNfdG9f Y2NpZGcoZik7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2CT0gZi0+Y29uZmlnLT5j ZGV2OworCXN0cnVjdCBjY2lkZ19idWxrX2RldiAqYnVsa19kZXYJPSAmY2NpZGctPmJ1bGtfZGV2 OworCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxOworCWludCByZXQ7CisJaW50IGk7CisKKwkvKiBB bGxvY2F0ZSByZXF1ZXN0cyBmb3Igb3VyIGVuZHBvaW50cyAqLworCXJlcSA9IGNjaWRnX3JlcXVl c3RfYWxsb2MoY2NpZGctPm91dCwKKwkJCXNpemVvZihzdHJ1Y3QgY2NpZGdfYnVsa19vdXRfaGVh ZGVyKSk7CisJaWYgKElTX0VSUihyZXEpKSB7CisJCUVSUk9SKGNkZXYsICJjY2lkOiB1bmFtZSB0 byBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91dCByZXFcbiIpOworCQlyZXR1cm4gUFRSX0VSUihyZXEp OworCX0KKwlyZXEtPmNvbXBsZXRlID0gY2NpZGdfYnVsa19jb21wbGV0ZV9yeDsKKwlyZXEtPmNv bnRleHQgPSBjY2lkZzsKKwlidWxrX2Rldi0+cnhfcmVxID0gcmVxOworCisJLyogQWxsb2NhdGUg YnVuY2ggb2YgaW4gcmVxdWVzdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTl9UWF9SRVFTOyBpKysp IHsKKwkJcmVxID0gY2NpZGdfcmVxdWVzdF9hbGxvYyhjY2lkZy0+aW4sCisJCQkJc2l6ZW9mKHN0 cnVjdCBjY2lkZ19idWxrX2luX2hlYWRlcikpOworCisJCWlmIChJU19FUlIocmVxKSkgeworCQkJ cmV0ID0gUFRSX0VSUihyZXEpOworCQkJRVJST1IoY2RldiwKKwkJCQkiY2NpZDogdW5hbWUgdG8g YWxsb2NhdGUgbWVtb3J5IGZvciBpbiByZXFcbiIpOworCQkJZ290byBmcmVlX2J1bGtfb3V0Owor CQl9CisJCXJlcS0+Y29tcGxldGUgPSBjY2lkZ19idWxrX2NvbXBsZXRlX3R4OworCQlyZXEtPmNv bnRleHQgPSBjY2lkZzsKKwkJY2NpZGdfcmVxX3B1dChjY2lkZywgJmJ1bGtfZGV2LT50eF9pZGxl LCByZXEpOworCX0KKworCS8qIGNob29zZSB0aGUgZGVzY3JpcHRvcnMgYW5kIGVuYWJsZSBlbmRw b2ludHMgKi8KKwlyZXQgPSBjY2lkZ19zdGFydF9lcChjY2lkZywgZiwgY2NpZGctPmluKTsKKwlp ZiAocmV0KQorCQlnb3RvIGZyZWVfYnVsa19pbjsKKworCXJldCA9IGNjaWRnX3N0YXJ0X2VwKGNj aWRnLCBmLCBjY2lkZy0+b3V0KTsKKwlpZiAocmV0KQorCQlnb3RvIGRpc2FibGVfZXBfaW47CisK KwlhdG9taWNfc2V0KCZjY2lkZy0+b25saW5lLCAxKTsKKwlyZXR1cm4gcmV0OworCitkaXNhYmxl X2VwX2luOgorCXVzYl9lcF9kaXNhYmxlKGNjaWRnLT5pbik7CitmcmVlX2J1bGtfaW46CisJd2hp bGUgKChyZXEgPSBjY2lkZ19yZXFfZ2V0KGNjaWRnLCAmYnVsa19kZXYtPnR4X2lkbGUpKSkKKwkJ Y2NpZGdfcmVxdWVzdF9mcmVlKHJlcSwgY2NpZGctPmluKTsKK2ZyZWVfYnVsa19vdXQ6CisJY2Np ZGdfcmVxdWVzdF9mcmVlKGJ1bGtfZGV2LT5yeF9yZXEsIGNjaWRnLT5vdXQpOworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBpbnQgY2NpZGdfYnVsa19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUs IHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBmX2NjaWRnICpjY2lkZzsKKwlzdHJ1Y3Qg Y2NpZGdfYnVsa19kZXYgKmJ1bGtfZGV2OworCisJY2NpZGcgPSBjb250YWluZXJfb2YoaW5vZGUt PmlfY2Rldiwgc3RydWN0IGZfY2NpZGcsIGNkZXYpOworCWJ1bGtfZGV2ID0gJmNjaWRnLT5idWxr X2RldjsKKworCWlmICghYXRvbWljX3JlYWQoJmNjaWRnLT5vbmxpbmUpKSB7CisJCURCRyhjY2lk Zy0+ZnVuY3Rpb24uY29uZmlnLT5jZGV2LCAiY2NpZDogZGV2aWNlIG5vdCBvbmxpbmVcbiIpOwor CQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoYXRvbWljX3JlYWQoJmJ1bGtfZGV2LT5pc19v cGVuKSkgeworCQlEQkcoY2NpZGctPmZ1bmN0aW9uLmNvbmZpZy0+Y2RldiwKKwkJCQkiY2NpZDog ZGV2aWNlIGFscmVhZHkgb3BlbmVkXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlhdG9t aWNfc2V0KCZidWxrX2Rldi0+aXNfb3BlbiwgMSk7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBj Y2lkZzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNjaWRnX2J1bGtfcmVsZWFzZShz dHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZl9jY2lk ZyAqY2NpZGcgPSAgZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjY2lkZ19idWxrX2RldiAq YnVsa19kZXYgPSAmY2NpZGctPmJ1bGtfZGV2OworCisJYXRvbWljX3NldCgmYnVsa19kZXYtPmlz X29wZW4sIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBjY2lkZ19idWxrX3Jl YWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IGNvdW50 LCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgZl9jY2lkZyAqY2NpZGcgPSAgZmlsZS0+cHJpdmF0 ZV9kYXRhOworCXN0cnVjdCBjY2lkZ19idWxrX2RldiAqYnVsa19kZXYgPSAmY2NpZGctPmJ1bGtf ZGV2OworCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxOworCWludCByID0gY291bnQsIHhmZXI7CisJ aW50IHJldDsKKworCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBzcGFjZSBmb3IgYSB3aG9s ZSBwYWNrYWdlICovCisJaWYgKGNvdW50IDwgc2l6ZW9mKHN0cnVjdCBjY2lkZ19idWxrX291dF9o ZWFkZXIpKSB7CisJCURCRyhjY2lkZy0+ZnVuY3Rpb24uY29uZmlnLT5jZGV2LAorCQkJCSJjY2lk OiB0b28gc21hbGwgYnVmZmVyIHNpemUuICVpIHByb3ZpZGVkLCBuZWVkIGF0IGxlYXN0ICVpXG4i LAorCQkJCWNvdW50LCBzaXplb2Yoc3RydWN0IGNjaWRnX2J1bGtfb3V0X2hlYWRlcikpOworCQly ZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAoIWF0b21pY19yZWFkKCZjY2lkZy0+b25saW5lKSkK KwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBxdWV1ZSBhIHJlcXVlc3QgKi8KKwlyZXEgPSBidWxr X2Rldi0+cnhfcmVxOworCXJlcS0+bGVuZ3RoID0gY291bnQ7CisJYXRvbWljX3NldCgmYnVsa19k ZXYtPnJ4X2RvbmUsIDApOworCisJcmV0ID0gdXNiX2VwX3F1ZXVlKGNjaWRnLT5vdXQsIHJlcSwg R0ZQX0tFUk5FTCk7CisJaWYgKHJldCA8IDApIHsKKwkJRVJST1IoY2NpZGctPmZ1bmN0aW9uLmNv bmZpZy0+Y2RldiwKKwkJCQkiY2NpZDogdXNiIGVwIHF1ZXVlIGZhaWxlZFxuIik7CisJCXJldHVy biAtRUlPOworCX0KKworCWlmICghYXRvbWljX3JlYWQoJmJ1bGtfZGV2LT5yeF9kb25lKSAmJgor CQkJZmlsZS0+Zl9mbGFncyAmIChPX05PTkJMT0NLIHwgT19OREVMQVkpKQorCQlyZXR1cm4gLUVB R0FJTjsKKworCS8qIHdhaXQgZm9yIGEgcmVxdWVzdCB0byBjb21wbGV0ZSAqLworCXJldCA9IHdh aXRfZXZlbnRfaW50ZXJydXB0aWJsZShidWxrX2Rldi0+cmVhZF93cSwKKwkJCWF0b21pY19yZWFk KCZidWxrX2Rldi0+cnhfZG9uZSkgfHwKKwkJCSFhdG9taWNfcmVhZCgmY2NpZGctPm9ubGluZSkp OworCWlmIChyZXQgPCAwKSB7CisJCXVzYl9lcF9kZXF1ZXVlKGNjaWRnLT5vdXQsIHJlcSk7CisJ CXJldHVybiAtRVJFU1RBUlRTWVM7CisJfQorCisJLyogU3RpbGwgb25saW5lPyAqLworCWlmICgh YXRvbWljX3JlYWQoJmNjaWRnLT5vbmxpbmUpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWF0b21p Y19zZXQoJmJ1bGtfZGV2LT5yeF9yZXFfYnVzeSwgMSk7CisJeGZlciA9IChyZXEtPmFjdHVhbCA8 IGNvdW50KSA/IHJlcS0+YWN0dWFsIDogY291bnQ7CisKKwlpZiAoY29weV90b191c2VyKGJ1Ziwg cmVxLT5idWYsIHhmZXIpKQorCQlyID0gLUVGQVVMVDsKKworCWF0b21pY19zZXQoJmJ1bGtfZGV2 LT5yeF9yZXFfYnVzeSwgMCk7CisJaWYgKCFhdG9taWNfcmVhZCgmY2NpZGctPm9ubGluZSkpIHsK KwkJY2NpZGdfcmVxdWVzdF9mcmVlKGJ1bGtfZGV2LT5yeF9yZXEsIGNjaWRnLT5vdXQpOworCQly ZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4geGZlcjsKK30KKworc3RhdGljIHNzaXplX3Qg Y2NpZGdfYnVsa193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1 ZiwKKwkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgZl9jY2lkZyAq Y2NpZGcgPSAgZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjY2lkZ19idWxrX2RldiAqYnVs a19kZXYgPSAmY2NpZGctPmJ1bGtfZGV2OworCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxID0gMDsK KwlpbnQgcmV0OworCisJLyogQXJlIHdlIG9ubGluZT8gKi8KKwlpZiAoIWF0b21pY19yZWFkKCZj Y2lkZy0+b25saW5lKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBBdm9pZCBaZXJvIExlbmd0 aCBQYWNrZXRzIChaTFApICovCisJaWYgKCFjb3VudCkKKwkJcmV0dXJuIDA7CisKKwkvKiBNYWtl IHN1cmUgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgZm9yIGEgd2hvbGUgcGFja2FnZSAqLworCWlmIChj b3VudCA+IHNpemVvZihzdHJ1Y3QgY2NpZGdfYnVsa19vdXRfaGVhZGVyKSkgeworCQlEQkcoY2Np ZGctPmZ1bmN0aW9uLmNvbmZpZy0+Y2RldiwKKwkJCQkiY2NpZDogdG9vIG11Y2ggZGF0YS4gJWkg cHJvdmlkZWQsIGJ1dCB3ZSBjYW4gb25seSBoYW5kbGUgJWlcbiIsCisJCQkJY291bnQsIHNpemVv ZihzdHJ1Y3QgY2NpZGdfYnVsa19vdXRfaGVhZGVyKSk7CisJCXJldHVybiAtRU5PTUVNOworCX0K KworCWlmIChsaXN0X2VtcHR5KCZidWxrX2Rldi0+dHhfaWRsZSkgJiYKKwkJCWZpbGUtPmZfZmxh Z3MgJiAoT19OT05CTE9DSyB8IE9fTkRFTEFZKSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwkvKiBn ZXQgYW4gaWRsZSB0eCByZXF1ZXN0IHRvIHVzZSAqLworCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJy dXB0aWJsZShidWxrX2Rldi0+d3JpdGVfd3EsCisJCSgocmVxID0gY2NpZGdfcmVxX2dldChjY2lk ZywgJmJ1bGtfZGV2LT50eF9pZGxlKSkpKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gLUVS RVNUQVJUU1lTOworCisJaWYgKGNvcHlfZnJvbV91c2VyKHJlcS0+YnVmLCBidWYsIGNvdW50KSkg eworCQlpZiAoIWF0b21pY19yZWFkKCZjY2lkZy0+b25saW5lKSkgeworCQkJY2NpZGdfcmVxdWVz dF9mcmVlKHJlcSwgY2NpZGctPmluKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9IGVsc2Ugewor CQkJY2NpZGdfcmVxX3B1dChjY2lkZywgJmJ1bGtfZGV2LT50eF9pZGxlLCByZXEpOworCQkJcmV0 dXJuIC1FRkFVTFQ7CisJCX0KKwl9CisKKwlyZXEtPmxlbmd0aCA9IGNvdW50OworCXJldCA9IHVz Yl9lcF9xdWV1ZShjY2lkZy0+aW4sIHJlcSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldCA8IDApIHsK KwkJY2NpZGdfcmVxX3B1dChjY2lkZywgJmJ1bGtfZGV2LT50eF9pZGxlLCByZXEpOworCisJCWlm ICghYXRvbWljX3JlYWQoJmNjaWRnLT5vbmxpbmUpKSB7CisJCQkvKiBGcmVlIHVwIGFsbCByZXF1 ZXN0cyBpZiB3ZSBhcmUgbm90IG9ubGluZSAqLworCQkJd2hpbGUgKChyZXEgPSBjY2lkZ19yZXFf Z2V0KGNjaWRnLCAmYnVsa19kZXYtPnR4X2lkbGUpKSkKKwkJCQljY2lkZ19yZXF1ZXN0X2ZyZWUo cmVxLCBjY2lkZy0+aW4pOworCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlyZXR1cm4gLUVJ TzsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBfX3BvbGxfdCBjY2lkZ19idWxr X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKiB3YWl0KQoreworCXN0cnVjdCBm X2NjaWRnICpjY2lkZyA9ICBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGNjaWRnX2J1bGtf ZGV2ICpidWxrX2RldiA9ICZjY2lkZy0+YnVsa19kZXY7CisJX19wb2xsX3QJcmV0ID0gMDsKKwor CXBvbGxfd2FpdChmaWxlLCAmYnVsa19kZXYtPnJlYWRfd3EsIHdhaXQpOworCXBvbGxfd2FpdChm aWxlLCAmYnVsa19kZXYtPndyaXRlX3dxLCB3YWl0KTsKKworCWlmIChsaXN0X2VtcHR5KCZidWxr X2Rldi0+dHhfaWRsZSkpCisJCXJldCB8PSBFUE9MTE9VVCB8IEVQT0xMV1JOT1JNOworCisJaWYg KGF0b21pY19yZWFkKCZidWxrX2Rldi0+cnhfZG9uZSkpCisJCXJldCB8PSBFUE9MTElOIHwgRVBP TExSRE5PUk07CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVf b3BlcmF0aW9ucyBmX2NjaWRnX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLnJl YWQgPSBjY2lkZ19idWxrX3JlYWQsCisJLndyaXRlID0gY2NpZGdfYnVsa193cml0ZSwKKwkub3Bl biA9IGNjaWRnX2J1bGtfb3BlbiwKKwkucG9sbCA9IGNjaWRnX2J1bGtfcG9sbCwKKwkucmVsZWFz ZSA9IGNjaWRnX2J1bGtfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgY2NpZGdfYnVsa19kZXZp Y2VfaW5pdChzdHJ1Y3QgZl9jY2lkZyAqZGV2KQoreworCXN0cnVjdCBjY2lkZ19idWxrX2RldiAq YnVsa19kZXYgPSAmZGV2LT5idWxrX2RldjsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmJ1bGtf ZGV2LT5yZWFkX3dxKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZidWxrX2Rldi0+d3JpdGVfd3Ep OworCUlOSVRfTElTVF9IRUFEKCZidWxrX2Rldi0+dHhfaWRsZSk7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIHZvaWQgY2NpZGdfZnVuY3Rpb25fZnJlZShzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpm KQoreworCXN0cnVjdCBmX2NjaWRnICpjY2lkZzsKKwlzdHJ1Y3QgZl9jY2lkZ19vcHRzICpvcHRz OworCisJY2NpZGcgPSBmdW5jX3RvX2NjaWRnKGYpOworCW9wdHMgPSBjb250YWluZXJfb2YoZi0+ ZmksIHN0cnVjdCBmX2NjaWRnX29wdHMsIGZ1bmNfaW5zdCk7CisKKwlrZnJlZShjY2lkZyk7CisJ bXV0ZXhfbG9jaygmb3B0cy0+bG9jayk7CisJLS1vcHRzLT5yZWZjbnQ7CisJbXV0ZXhfdW5sb2Nr KCZvcHRzLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgY2NpZGdfZnVuY3Rpb25fdW5iaW5kKHN0 cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywKKwkJCQkJc3RydWN0IHVzYl9mdW5jdGlvbiAqZikK K3sKKwlzdHJ1Y3QgZl9jY2lkZyAqY2NpZGcgPSBmdW5jX3RvX2NjaWRnKGYpOworCisJZGV2aWNl X2Rlc3Ryb3koY2NpZGdfY2xhc3MsIE1LREVWKG1ham9yLCBjY2lkZy0+bWlub3IpKTsKKwljZGV2 X2RlbCgmY2NpZGctPmNkZXYpOworCisJLyogZGlzYWJsZS9mcmVlIHJlcXVlc3QgYW5kIGVuZCBw b2ludCAqLworCXVzYl9mcmVlX2FsbF9kZXNjcmlwdG9ycyhmKTsKK30KKworc3RhdGljIGludCBj Y2lkZ19mdW5jdGlvbl9iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywKKwkJCQkJc3Ry dWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlzdHJ1Y3QgZl9jY2lkZyAqY2NpZGcgPSBmdW5jX3Rv X2NjaWRnKGYpOworCXN0cnVjdCB1c2JfZXAgKmVwOworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2Rl diAqY2RldiA9IGMtPmNkZXY7CisJc3RydWN0IGRldmljZSAqZGV2aWNlOworCWRldl90IGRldjsK KwlpbnQgaWZjX2lkOworCWludCByZXQ7CisKKwkvKiBhbGxvY2F0ZSBpbnN0YW5jZS1zcGVjaWZp YyBpbnRlcmZhY2UgSURzLCBhbmQgcGF0Y2ggZGVzY3JpcHRvcnMgKi8KKwlpZmNfaWQgPSB1c2Jf aW50ZXJmYWNlX2lkKGMsIGYpOworCWlmIChpZmNfaWQgPCAwKSB7CisJCUVSUk9SKGNkZXYsICJj Y2lkOiB1bmFibGUgdG8gYWxsb2NhdGUgaWZjIGlkLCBlcnI6JWRcbiIsCisJCQkJaWZjX2lkKTsK KwkJcmV0dXJuIGlmY19pZDsKKwl9CisJY2NpZF9pbnRlcmZhY2VfZGVzYy5iSW50ZXJmYWNlTnVt YmVyID0gaWZjX2lkOworCisJLyogYWxsb2NhdGUgaW5zdGFuY2Utc3BlY2lmaWMgZW5kcG9pbnRz ICovCisJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZjY2lkX2ZzX2luX2Rl c2MpOworCWlmICghZXApIHsKKwkJRVJST1IoY2RldiwgImNjaWQ6IHVzYiBlcGluIGF1dG9jb25m aWcgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcF9hdXRvX2luX2ZhaWw7 CisJfQorCWNjaWRnLT5pbiA9IGVwOworCWVwLT5kcml2ZXJfZGF0YSA9IGNjaWRnOworCisJZXAg PSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZjY2lkX2ZzX291dF9kZXNjKTsKKwlp ZiAoIWVwKSB7CisJCUVSUk9SKGNkZXYsICJjY2lkOiB1c2IgZXBvdXQgYXV0b2NvbmZpZyBmYWls ZWRcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVwX2F1dG9fb3V0X2ZhaWw7CisJfQor CWNjaWRnLT5vdXQgPSBlcDsKKwllcC0+ZHJpdmVyX2RhdGEgPSBjY2lkZzsKKworCS8qIHNldCBk ZXNjcmlwdG9yIGR5bmFtaWMgdmFsdWVzICovCisJY2NpZF9jbGFzc19kZXNjLmR3RmVhdHVyZXMJ PSBjcHVfdG9fbGUzMihjY2lkZy0+ZmVhdHVyZXMpOworCWNjaWRfY2xhc3NfZGVzYy5iUElOU3Vw cG9ydAk9IGNjaWRnLT5waW5zdXBwb3J0OworCWNjaWRfY2xhc3NfZGVzYy53TGNkTGF5b3V0CT0g Y3B1X3RvX2xlMTYoY2NpZGctPmxjZGxheW91dCk7CisJY2NpZF9jbGFzc19kZXNjLmJNYXhTbG90 SW5kZXgJPSBjY2lkZy0+bnNsb3RzOworCWNjaWRfY2xhc3NfZGVzYy5kd1Byb3RvY29scwk9IGNw dV90b19sZTMyKGNjaWRnLT5wcm90b2NvbHMpOworCisJaWYgKGNjaWRnLT5wcm90b2NvbHMgPT0g Q0NJRF9QUk9UT0NPTF9OT1RfU0VMKSB7CisJCWNjaWRnLT5wcm90b2NvbHMgPSBDQ0lEX1BST1RP Q09MX1QwIHwgQ0NJRF9QUk9UT0NPTF9UMTsKKwkJSU5GTyhjY2lkZy0+ZnVuY3Rpb24uY29uZmln LT5jZGV2LAorCQkJImNjaWQ6IE5vIHByb3RvY29sIHNlbGVjdGVkLiBTdXBwb3J0IGJvdGggVDAg YW5kIFQxLlxuIik7CisJfQorCisKKwljY2lkX2hzX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9 CisJCQljY2lkX2ZzX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKwljY2lkX2hzX291dF9kZXNj LmJFbmRwb2ludEFkZHJlc3MgPQorCQkJY2NpZF9mc19vdXRfZGVzYy5iRW5kcG9pbnRBZGRyZXNz OworCisJcmV0ICA9IHVzYl9hc3NpZ25fZGVzY3JpcHRvcnMoZiwgY2NpZF9mc19kZXNjcywKKwkJ CWNjaWRfaHNfZGVzY3MsIE5VTEwsIE5VTEwpOworCWlmIChyZXQpCisJCWdvdG8gZXBfYXV0b19v dXRfZmFpbDsKKworCS8qIGNyZWF0ZSBjaGFyIGRldmljZSAqLworCWNkZXZfaW5pdCgmY2NpZGct PmNkZXYsICZmX2NjaWRnX2ZvcHMpOworCWRldiA9IE1LREVWKG1ham9yLCBjY2lkZy0+bWlub3Ip OworCXJldCA9IGNkZXZfYWRkKCZjY2lkZy0+Y2RldiwgZGV2LCAxKTsKKwlpZiAocmV0KQorCQln b3RvIGZhaWxfZnJlZV9kZXNjczsKKworCWRldmljZSA9IGRldmljZV9jcmVhdGUoY2NpZGdfY2xh c3MsIE5VTEwsIGRldiwgTlVMTCwKKwkJCSAgICAgICAiJXMlZCIsICJjY2lkZyIsIGNjaWRnLT5t aW5vcik7CisJaWYgKElTX0VSUihkZXZpY2UpKSB7CisJCXJldCA9IFBUUl9FUlIoZGV2aWNlKTsK KwkJZ290byBkZWw7CisJfQorCisJcmV0dXJuIDA7CisKK2RlbDoKKwljZGV2X2RlbCgmY2NpZGct PmNkZXYpOworZmFpbF9mcmVlX2Rlc2NzOgorCXVzYl9mcmVlX2FsbF9kZXNjcmlwdG9ycyhmKTsK K2VwX2F1dG9fb3V0X2ZhaWw6CisJY2NpZGctPm91dC0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCWNj aWRnLT5vdXQgPSBOVUxMOworZXBfYXV0b19pbl9mYWlsOgorCWNjaWRnLT5pbi0+ZHJpdmVyX2Rh dGEgPSBOVUxMOworCWNjaWRnLT5pbiA9IE5VTEw7CisJRVJST1IoZi0+Y29uZmlnLT5jZGV2LCAi Y2NpZGdfYmluZCBGQUlMRURcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVj dCB1c2JfZnVuY3Rpb24gKmNjaWRnX2FsbG9jKHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2Ug KmZpKQoreworCXN0cnVjdCBmX2NjaWRnICpjY2lkZzsKKwlzdHJ1Y3QgZl9jY2lkZ19vcHRzICpv cHRzOworCWludCByZXQ7CisKKwljY2lkZyA9IGt6YWxsb2Moc2l6ZW9mKCpjY2lkZyksIEdGUF9L RVJORUwpOworCWlmICghY2NpZGcpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJc3Bp bl9sb2NrX2luaXQoJmNjaWRnLT5sb2NrKTsKKworCXJldCA9IGNjaWRnX2J1bGtfZGV2aWNlX2lu aXQoY2NpZGcpOworCWlmIChyZXQpIHsKKwkJa2ZyZWUoY2NpZGcpOworCQlyZXR1cm4gRVJSX1BU UihyZXQpOworCX0KKworCW9wdHMgPSBjb250YWluZXJfb2YoZmksIHN0cnVjdCBmX2NjaWRnX29w dHMsIGZ1bmNfaW5zdCk7CisKKwltdXRleF9sb2NrKCZvcHRzLT5sb2NrKTsKKwkrK29wdHMtPnJl ZmNudDsKKworCWNjaWRnLT5taW5vciA9IG9wdHMtPm1pbm9yOworCWNjaWRnLT5mZWF0dXJlcyA9 IG9wdHMtPmZlYXR1cmVzOworCWNjaWRnLT5wcm90b2NvbHMgPSBvcHRzLT5wcm90b2NvbHM7CisJ Y2NpZGctPnBpbnN1cHBvcnQgPSBvcHRzLT5waW5zdXBwb3J0OworCWNjaWRnLT5uc2xvdHMgPSBv cHRzLT5uc2xvdHM7CisJbXV0ZXhfdW5sb2NrKCZvcHRzLT5sb2NrKTsKKworCWNjaWRnLT5mdW5j dGlvbi5uYW1lCT0gImNjaWQiOworCWNjaWRnLT5mdW5jdGlvbi5iaW5kCT0gY2NpZGdfZnVuY3Rp b25fYmluZDsKKwljY2lkZy0+ZnVuY3Rpb24udW5iaW5kCT0gY2NpZGdfZnVuY3Rpb25fdW5iaW5k OworCWNjaWRnLT5mdW5jdGlvbi5zZXRfYWx0CT0gY2NpZGdfZnVuY3Rpb25fc2V0X2FsdDsKKwlj Y2lkZy0+ZnVuY3Rpb24uZGlzYWJsZQk9IGNjaWRnX2Z1bmN0aW9uX2Rpc2FibGU7CisJY2NpZGct PmZ1bmN0aW9uLnNldHVwCT0gY2NpZGdfZnVuY3Rpb25fc2V0dXA7CisJY2NpZGctPmZ1bmN0aW9u LmZyZWVfZnVuYyA9IGNjaWRnX2Z1bmN0aW9uX2ZyZWU7CisKKwlyZXR1cm4gJmNjaWRnLT5mdW5j dGlvbjsKK30KKworc3RhdGljIHZvaWQgY2NpZGdfZnJlZV9pbnN0KHN0cnVjdCB1c2JfZnVuY3Rp b25faW5zdGFuY2UgKmYpCit7CisJc3RydWN0IGZfY2NpZGdfb3B0cyAqb3B0czsKKworCW9wdHMg PSBjb250YWluZXJfb2YoZiwgc3RydWN0IGZfY2NpZGdfb3B0cywgZnVuY19pbnN0KTsKKwltdXRl eF9sb2NrKCZjY2lkZ19pZGFfbG9jayk7CisKKwljY2lkZ19wdXRfbWlub3Iob3B0cy0+bWlub3Ip OworCWlmIChpZGFfaXNfZW1wdHkoJmNjaWRnX2lkYSkpCisJCWNjaWRnX2NsZWFudXAoKTsKKwor CW11dGV4X3VubG9jaygmY2NpZGdfaWRhX2xvY2spOworCisJa2ZyZWUob3B0cyk7Cit9CisKK3N0 YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2luc3RhbmNlICpjY2lkZ19hbGxvY19pbnN0KHZvaWQp Cit7CisJc3RydWN0IGZfY2NpZGdfb3B0cyAqb3B0czsKKwlzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2lu c3RhbmNlICpyZXQ7CisJaW50IHN0YXR1cyA9IDA7CisKKwlvcHRzID0ga3phbGxvYyhzaXplb2Yo Km9wdHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9wdHMpCisJCXJldHVybiBFUlJfUFRSKC1FTk9N RU0pOworCisJbXV0ZXhfaW5pdCgmb3B0cy0+bG9jayk7CisJb3B0cy0+ZnVuY19pbnN0LmZyZWVf ZnVuY19pbnN0ID0gY2NpZGdfZnJlZV9pbnN0OworCXJldCA9ICZvcHRzLT5mdW5jX2luc3Q7CisK KwltdXRleF9sb2NrKCZjY2lkZ19pZGFfbG9jayk7CisKKwlpZiAoaWRhX2lzX2VtcHR5KCZjY2lk Z19pZGEpKSB7CisJCXN0YXR1cyA9IGNjaWRnX3NldHVwKCk7CisJCWlmIChzdGF0dXMpICB7CisJ CQlyZXQgPSBFUlJfUFRSKHN0YXR1cyk7CisJCQlrZnJlZShvcHRzKTsKKwkJCWdvdG8gdW5sb2Nr OworCQl9CisJfQorCisJb3B0cy0+bWlub3IgPSBjY2lkZ19nZXRfbWlub3IoKTsKKwlpZiAob3B0 cy0+bWlub3IgPCAwKSB7CisJCXJldCA9IEVSUl9QVFIob3B0cy0+bWlub3IpOworCQlrZnJlZShv cHRzKTsKKwkJaWYgKGlkYV9pc19lbXB0eSgmY2NpZGdfaWRhKSkKKwkJCWNjaWRnX2NsZWFudXAo KTsKKwkJZ290byB1bmxvY2s7CisJfQorCisJY29uZmlnX2dyb3VwX2luaXRfdHlwZV9uYW1lKCZv cHRzLT5mdW5jX2luc3QuZ3JvdXAsCisJCQkiIiwgJmNjaWRnX2Z1bmNfdHlwZSk7CisKK3VubG9j azoKKwltdXRleF91bmxvY2soJmNjaWRnX2lkYV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitE RUNMQVJFX1VTQl9GVU5DVElPTl9JTklUKGNjaWQsIGNjaWRnX2FsbG9jX2luc3QsIGNjaWRnX2Fs bG9jKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJVU0IgQ0NJRCBHYWRnZXQgZHJpdmVyIik7CitN T0RVTEVfQVVUSE9SKCJNYXJjdXMgRm9sa2Vzc29uIDxtYXJjdXMuZm9sa2Vzc29uQGdtYWlsLmNv bT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNi L2dhZGdldC9mdW5jdGlvbi9mX2NjaWQuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9m X2NjaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjlkYzE4MmQx ZjgxOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX2Nj aWQuaApAQCAtMCwwICsxLDkxIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MCAqLworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBNYXJjdXMgRm9sa2Vzc29uIDxtYXJjdXMu Zm9sa2Vzc29uQGdtYWlsLmNvbT4KKyAqLworCisjaWZuZGVmIEZfQ0NJRF9ICisjZGVmaW5lIEZf Q0NJRF9ICisKKyNkZWZpbmUgQ0NJRDFfMTAgICAgICAgICAgICAgICAgMHgwMTEwCisjZGVmaW5l IENDSURfREVDUklQVE9SX1RZUEUgICAgIDB4MjEKKyNkZWZpbmUgQUJEQVRBX1NJWkUJCTUxMgor I2RlZmluZSBTTUFSVF9DQVJEX0RFVklDRV9DTEFTUwkweDBCCisKKy8qIENDSUQgQ2xhc3MgU3Bl Y2lmaWMgUmVxdWVzdCAqLworI2RlZmluZSBDQ0lER0VORVJJQ1JFUV9BQk9SVCAgICAgICAgICAg ICAgICAgICAgMHgwMQorI2RlZmluZSBDQ0lER0VORVJJQ1JFUV9HRVRfQ0xPQ0tfRlJFUVVFTkNJ RVMgICAgMHgwMgorI2RlZmluZSBDQ0lER0VORVJJQ1JFUV9HRVRfREFUQV9SQVRFUyAgICAgICAg ICAgMHgwMworCisvKiBTdXBwb3J0ZWQgdm9sdGFnZXMgKi8KKyNkZWZpbmUgQ0NJRF9WT0xUU19B VVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIENDSURfVk9MVFNf NV8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBDQ0lEX1ZPTFRT XzNfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQ0NJRF9WT0xU U18xXzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzCisKK3N0cnVjdCBmX2NjaWRn X29wdHMgeworCXN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgZnVuY19pbnN0OworCWludAlt aW5vcjsKKwlfX3UzMglmZWF0dXJlczsKKwlfX3UzMglwcm90b2NvbHM7CisJX191OAlwaW5zdXBw b3J0OworCV9fdTgJbnNsb3RzOworCV9fdTgJbGNkbGF5b3V0OworCisJLyoKKwkgKiBQcm90ZWN0 IHRoZSBkYXRhIGZvcm0gY29uY3VycmVudCBhY2Nlc3MgYnkgcmVhZC93cml0ZQorCSAqIGFuZCBj cmVhdGUgc3ltbGluay9yZW1vdmUgc3ltbGluay4KKwkgKi8KKwlzdHJ1Y3QgbXV0ZXgJbG9jazsK KwlpbnQJCXJlZmNudDsKK307CisKK3N0cnVjdCBjY2lkZ19idWxrX2luX2hlYWRlciB7CisJX191 OAliTWVzc2FnZVR5cGU7CisJX191MzIJd0xlbmd0aDsKKwlfX3U4CWJTbG90OworCV9fdTgJYlNl cTsKKwlfX3U4CWJTdGF0dXM7CisJX191OAliRXJyb3I7CisJX191OAliU3BlY2lmaWM7CisJX191 OAlhYkRhdGFbQUJEQVRBX1NJWkVdOworCV9fdTgJYlNpemVUb1NlbmQ7Cit9IF9fcGFja2VkOwor CitzdHJ1Y3QgY2NpZGdfYnVsa19vdXRfaGVhZGVyIHsKKwlfX3U4CSBiTWVzc2FnZVR5cGU7CisJ X191MzIJIHdMZW5ndGg7CisJX191OAkgYlNsb3Q7CisJX191OAkgYlNlcTsKKwlfX3U4CSBiU3Bl Y2lmaWNfMDsKKwlfX3U4CSBiU3BlY2lmaWNfMTsKKwlfX3U4CSBiU3BlY2lmaWNfMjsKKwlfX3U4 CSBBUERVW0FCREFUQV9TSVpFXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjY2lkX2NsYXNzX2Rl c2NyaXB0b3IgeworCV9fdTgJYkxlbmd0aDsKKwlfX3U4CWJEZXNjcmlwdG9yVHlwZTsKKwlfX3Ux NgliY2RDQ0lEOworCV9fdTgJYk1heFNsb3RJbmRleDsKKwlfX3U4CWJWb2x0YWdlU3VwcG9ydDsK KwlfX3UzMglkd1Byb3RvY29sczsKKwlfX3UzMglkd0RlZmF1bHRDbG9jazsKKwlfX3UzMglkd01h eGltdW1DbG9jazsKKwlfX3U4CWJOdW1DbG9ja1N1cHBvcnRlZDsKKwlfX3UzMglkd0RhdGFSYXRl OworCV9fdTMyCWR3TWF4RGF0YVJhdGU7CisJX191OAliTnVtRGF0YVJhdGVzU3VwcG9ydGVkOwor CV9fdTMyCWR3TWF4SUZTRDsKKwlfX3UzMglkd1N5bmNoUHJvdG9jb2xzOworCV9fdTMyCWR3TWVj aGFuaWNhbDsKKwlfX3UzMglkd0ZlYXR1cmVzOworCV9fdTMyCWR3TWF4Q0NJRE1lc3NhZ2VMZW5n dGg7CisJX191OAliQ2xhc3NHZXRSZXNwb25zZTsKKwlfX3U4CWJDbGFzc0VudmVsb3BlOworCV9f dTE2CXdMY2RMYXlvdXQ7CisJX191OAliUElOU3VwcG9ydDsKKwlfX3U4CWJNYXhDQ0lEQnVzeVNs b3RzOworfSBfX3BhY2tlZDsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9s aW51eC91c2IvY2NpZC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3VzYi9jY2lkLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41MTc4OTcyMDE1NjMKLS0tIC9kZXYvbnVs bAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdXNiL2NjaWQuaApAQCAtMCwwICsxLDkzIEBACisv KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIENvcHlyaWdodCAo QykgMjAxOCBNYXJjdXMgRm9sa2Vzc29uIDxtYXJjdXMuZm9sa2Vzc29uQGdtYWlsLmNvbT4KKyAq CisgKiBUaGlzIGZpbGUgaG9sZHMgVVNCIGNvbnN0YW50cyBkZWZpbmVkIGJ5IHRoZSBDQ0lEIFNw ZWNpZmljYXRpb24uCisgKi8KKworI2lmbmRlZiBDQ0lEX0gKKyNkZWZpbmUgQ0NJRF9ICisKKy8q IFNsb3QgZXJyb3IgcmVnaXN0ZXIgd2hlbiBibUNvbW1hbmRTdGF0dXMgPSAxICovCisjZGVmaW5l IENDSURfQ01EX0FCT1JURUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRgorI2RlZmlu ZSBDQ0lEX0lDQ19NVVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkUKKyNkZWZp bmUgQ0NJRF9YRlJfUEFSSVRZX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAweEZECisjZGVm aW5lIENDSURfWEZSX09WRVJSVU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQworI2Rl ZmluZSBDQ0lEX0hXX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkIKKyNk ZWZpbmUgQ0NJRF9CQURfQVRSX1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEY4Cisj ZGVmaW5lIENDSURfQkFEX0FUUl9UQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGNwor I2RlZmluZSBDQ0lEX0lDQ19QUk9UT0NPTF9OT1RfU1VQUE9SVEVEICAgICAgICAgICAgIDB4RjYK KyNkZWZpbmUgQ0NJRF9JQ0NfQ0xBU1NfTk9UX1NVUFBPUlRFRCAgICAgICAgICAgICAgICAweEY1 CisjZGVmaW5lIENDSURfUFJPQ0VEVVJFX0JZVEVfQ09ORkxJQ1QgICAgICAgICAgICAgICAgMHhG NAorI2RlZmluZSBDQ0lEX0RFQUNUSVZBVEVEX1BST1RPQ09MICAgICAgICAgICAgICAgICAgIDB4 RjMKKyNkZWZpbmUgQ0NJRF9CVVNZX1dJVEhfQVVUT19TRVFVRU5DRSAgICAgICAgICAgICAgICAw eEYyCisjZGVmaW5lIENDSURfUElOX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAg MHhGMAorI2RlZmluZSBDQ0lEX1BJTl9DQU5DRUxMRUQgICAgICAgICAgICAgICAgICAgICAgICAg IDB4RUYKKyNkZWZpbmUgQ0NJRF9DTURfU0xPVF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAg ICAweEUwCisKKy8qIFBDIHRvIFJEUiBtZXNzYWdlcyAoYnVsayBvdXQpICovCisjZGVmaW5lIEND SURfUENfVE9fUkRSX0lDQ1BPV0VST04gICAgICAgICAgICAgICAgICAgMHg2MgorI2RlZmluZSBD Q0lEX1BDX1RPX1JEUl9JQ0NQT1dFUk9GRiAgICAgICAgICAgICAgICAgIDB4NjMKKyNkZWZpbmUg Q0NJRF9QQ19UT19SRFJfR0VUU0xPVFNUQVRVUyAgICAgICAgICAgICAgICAweDY1CisjZGVmaW5l IENDSURfUENfVE9fUkRSX1hGUkJMT0NLICAgICAgICAgICAgICAgICAgICAgMHg2RgorI2RlZmlu ZSBDQ0lEX1BDX1RPX1JEUl9HRVRQQVJBTUVURVJTICAgICAgICAgICAgICAgIDB4NkMKKyNkZWZp bmUgQ0NJRF9QQ19UT19SRFJfUkVTRVRQQVJBTUVURVJTICAgICAgICAgICAgICAweDZECisjZGVm aW5lIENDSURfUENfVE9fUkRSX1NFVFBBUkFNRVRFUlMgICAgICAgICAgICAgICAgMHg2MQorI2Rl ZmluZSBDQ0lEX1BDX1RPX1JEUl9FU0NBUEUgICAgICAgICAgICAgICAgICAgICAgIDB4NkIKKyNk ZWZpbmUgQ0NJRF9QQ19UT19SRFJfSUNDQ0xPQ0sgICAgICAgICAgICAgICAgICAgICAweDZFCisj ZGVmaW5lIENDSURfUENfVE9fUkRSX1QwQVBEVSAgICAgICAgICAgICAgICAgICAgICAgMHg2QQor I2RlZmluZSBDQ0lEX1BDX1RPX1JEUl9TRUNVUkUgICAgICAgICAgICAgICAgICAgICAgIDB4NjkK KyNkZWZpbmUgQ0NJRF9QQ19UT19SRFJfTUVDSEFOSUNBTCAgICAgICAgICAgICAgICAgICAweDcx CisjZGVmaW5lIENDSURfUENfVE9fUkRSX0FCT1JUICAgICAgICAgICAgICAgICAgICAgICAgMHg3 MgorI2RlZmluZSBDQ0lEX1BDX1RPX1JEUl9TRVREQVRBUkFURUFORENMT0NLRlJFUVVFTkNZIDB4 NzMKKworLyogUkRSIHRvIFBDIG1lc3NhZ2VzIChidWxrIGluKSAqLworI2RlZmluZSBDQ0lEX1JE Ul9UT19QQ19EQVRBQkxPQ0sgICAgICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgQ0NJRF9S RFJfVE9fUENfU0xPVFNUQVRVUyAgICAgICAgICAgICAgICAgICAweDgxCisjZGVmaW5lIENDSURf UkRSX1RPX1BDX1BBUkFNRVRFUlMgICAgICAgICAgICAgICAgICAgMHg4MgorI2RlZmluZSBDQ0lE X1JEUl9UT19QQ19FU0NBUEUgICAgICAgICAgICAgICAgICAgICAgIDB4ODMKKyNkZWZpbmUgQ0NJ RF9SRFJfVE9fUENfREFUQVJBVEVBTkRDTE9DS0ZSRVFVRU5DWSAgICAweDg0CisKKy8qIENsYXNz IEZlYXR1cmVzICovCisKKy8qIE5vIHNwZWNpYWwgY2hhcmFjdGVyaXN0aWNzICovCisjZGVmaW5l IENDSURfRkVBVFVSRVNfTkFEQSAgICAgICAweDAwMDAwMDAwCisvKiBBdXRvbWF0aWMgcGFyYW1l dGVyIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gQVRSIGRhdGEgKi8KKyNkZWZpbmUgQ0NJRF9GRUFU VVJFU19BVVRPX1BDT05GIDB4MDAwMDAwMDIKKy8qIEF1dG9tYXRpYyBhY3RpdmF0aW9uIG9mIElD QyBvbiBpbnNlcnRpbmcgKi8KKyNkZWZpbmUgQ0NJRF9GRUFUVVJFU19BVVRPX0FDVElWIDB4MDAw MDAwMDQKKy8qIEF1dG9tYXRpYyBJQ0Mgdm9sdGFnZSBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgQ0NJ RF9GRUFUVVJFU19BVVRPX1ZPTFQgIDB4MDAwMDAwMDgKKy8qIEF1dG9tYXRpYyBJQ0MgY2xvY2sg ZnJlcXVlbmN5IGNoYW5nZSAqLworI2RlZmluZSBDQ0lEX0ZFQVRVUkVTX0FVVE9fQ0xPQ0sgMHgw MDAwMDAxMAorLyogQXV0b21hdGljIGJhdWQgcmF0ZSBjaGFuZ2UgKi8KKyNkZWZpbmUgQ0NJRF9G RUFUVVJFU19BVVRPX0JBVUQgIDB4MDAwMDAwMjAKKy8qQXV0b21hdGljIHBhcmFtZXRlcnMgbmVn b3RpYXRpb24gbWFkZSBieSB0aGUgQ0NJRCAqLworI2RlZmluZSBDQ0lEX0ZFQVRVUkVTX0FVVE9f UE5FR08gMHgwMDAwMDA0MAorLyogQXV0b21hdGljIFBQUyBtYWRlIGJ5IHRoZSBDQ0lEIGFjY29y ZGluZyB0byB0aGUgYWN0aXZlIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgQ0NJRF9GRUFUVVJFU19B VVRPX1BQUyAgIDB4MDAwMDAwODAKKy8qIENDSUQgY2FuIHNldCBJQ0MgaW4gY2xvY2sgc3RvcCBt b2RlICovCisjZGVmaW5lIENDSURfRkVBVFVSRVNfSUNDU1RPUCAgICAweDAwMDAwMTAwCisvKiBO QUQgdmFsdWUgb3RoZXIgdGhhbiAwMCBhY2NlcHRlZCAoVD0xIHByb3RvY29sIGluIHVzZSkgKi8K KyNkZWZpbmUgQ0NJRF9GRUFUVVJFU19OQUQgICAgICAgIDB4MDAwMDAyMDAKKy8qIEF1dG9tYXRp YyBJRlNEIGV4Y2hhbmdlIGFzIGZpcnN0IGV4Y2hhbmdlIChUPTEgcHJvdG9jb2wgaW4gdXNlKSAq LworI2RlZmluZSBDQ0lEX0ZFQVRVUkVTX0FVVE9fSUZTRCAgMHgwMDAwMDQwMAorLyogVFBEVSBs ZXZlbCBleGNoYW5nZXMgd2l0aCBDQ0lEICovCisjZGVmaW5lIENDSURfRkVBVFVSRVNfRVhDX1RQ RFUgICAweDAwMDEwMDAwCisvKiBTaG9ydCBBUERVIGxldmVsIGV4Y2hhbmdlIHdpdGggQ0NJRCAq LworI2RlZmluZSBDQ0lEX0ZFQVRVUkVTX0VYQ19TQVBEVSAgMHgwMDAyMDAwMAorLyogU2hvcnQg YW5kIEV4dGVuZGVkIEFQRFUgbGV2ZWwgZXhjaGFuZ2Ugd2l0aCBDQ0lEICovCisjZGVmaW5lIEND SURfRkVBVFVSRVNfRVhDX0FQRFUgICAweDAwMDQwMDAwCisvKiBVU0IgV2FrZSB1cCBzaWduYWxp bmcgc3VwcG9ydGVkIG9uIGNhcmQgaW5zZXJ0aW9uIGFuZCByZW1vdmFsICovCisjZGVmaW5lIEND SURfRkVBVFVSRVNfV0FLRVVQCTB4MDAxMDAwMDAKKworLyogU3VwcG9ydGVkIHByb3RvY29scyAq LworI2RlZmluZSBDQ0lEX1BST1RPQ09MX05PVF9TRUwJMHgwMAorI2RlZmluZSBDQ0lEX1BST1RP Q09MX1QwCTB4MDEKKyNkZWZpbmUgQ0NJRF9QUk9UT0NPTF9UMQkweDAyCisKKyNkZWZpbmUgQ0NJ RF9QSU5TVVBPT1JUX05PTkUJCTB4MDAKKyNkZWZpbmUgQ0NJRF9QSU5TVVBPT1JUX1ZFUklGSUNB VElPTgkoMSA8PCAxKQorI2RlZmluZSBDQ0lEX1BJTlNVUE9PUlRfTU9ESUZJQ0FUSU9OCSgxIDw8 IDIpCisKKyNlbmRpZgo=