From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mike Murphy Subject: Re: PATCH [1/3] drivers/input/xpad.c: Improve Xbox 360 wireless support and add sysfs interface Date: Mon, 2 Mar 2009 22:09:53 -0500 Message-ID: <5aa163d00903021909x2c1e8736u2cd373b57fe934ee@mail.gmail.com> References: <5aa163d00902282053h38b0febbyb37fc30855fdc985@mail.gmail.com> <20090302130425.23cc628d.akpm@linux-foundation.org> <5aa163d00903021847n525e8704jd332610c45e4675a@mail.gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=0016364ecf90e34f0f04642e44c7 Return-path: Received: from yw-out-2324.google.com ([74.125.46.31]:2070 "EHLO yw-out-2324.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752869AbZCCDJ7 (ORCPT ); Mon, 2 Mar 2009 22:09:59 -0500 In-Reply-To: <5aa163d00903021847n525e8704jd332610c45e4675a@mail.gmail.com> Sender: linux-input-owner@vger.kernel.org List-Id: linux-input@vger.kernel.org To: Andrew Morton Cc: linux-kernel@vger.kernel.org, linux-input@vger.kernel.org, linux-usb@vger.kernel.org, greg@kroah.com, oliver@neukum.org, fweisbec@gmail.com, torvalds@linux-foundation.org --0016364ecf90e34f0f04642e44c7 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Update to address issues raised with the organization of the code (header/C file split), typecasting, and use of internal functions (max/min/abs). Per the thread, I did NOT make any changes to the sysfs interface. Thanks to Andrew Morton and Greg K-H. This code has been given a basic test with jstest(1) and appears to work. However, I won't be able to give it any "live" testing with an actual game until tomorrow evening, so I'm not yet ready to sign off on this version of the patch. I will try to have a fully tested version ready in about 24 hours or so. In the meantime, please let me know if there are any comments or other needed changes to this patch. Thanks, Mike --0016364ecf90e34f0f04642e44c7 Content-Type: text/plain; charset=US-ASCII; name="xpad-20090302.patch.txt" Content-Disposition: attachment; filename="xpad-20090302.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fru00ps60 ZGlmZiAtdU5yIG9yaWdkcnYvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMgbmV3ZHJ2L2Ry aXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jCi0tLSBvcmlnZHJ2L2RyaXZlcnMvaW5wdXQvam95 c3RpY2sveHBhZC5jCTIwMDktMDItMTQgMjI6Mzk6MjAuMDAwMDAwMDAwIC0wNTAwCisrKyBuZXdk cnYvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMJMjAwOS0wMy0wMiAyMTozNDo0NC4wMDAw MDAwMDAgLTA1MDAKQEAgLTEsNSArMSw4IEBACiAvKgotICogWC1Cb3ggZ2FtZXBhZCBkcml2ZXIK KyAqIFhib3ggZ2FtZXBhZCBkcml2ZXIgd2l0aCBYYm94IDM2MCB3aXJlZC93aXJlbGVzcyBzdXBw b3J0CisgKgorICogTGFzdCBNb2RpZmllZDoJMiBNYXJjaCAyMDA5CisgKgkJCU1pa2UgTXVycGh5 IDxtYW11cnBoQGNzLmNsZW1zb24uZWR1PgogICoKICAqIENvcHlyaWdodCAoYykgMjAwMiBNYXJr byBGcmllZGVtYW5uIDxtZnJAYm14LWNoZW1uaXR6LmRlPgogICogICAgICAgICAgICAgICAyMDA0 IE9saXZlciBTY2h3YXJ0eiA8T2xpdmVyLlNjaHdhcnR6QGdteC5kZT4sCkBAIC05LDYgKzEyLDgg QEAKICAqICAgICAgICAgICAgICAgMjAwNSBEb21pbmljIENlcnF1ZXR0aSA8YmluYXJ5MTIzMEB5 YWhvby5jb20+CiAgKiAgICAgICAgICAgICAgIDIwMDYgQWRhbSBCdWNoYmluZGVyIDxhZGFtLmJ1 Y2hiaW5kZXJAZ21haWwuY29tPgogICogICAgICAgICAgICAgICAyMDA3IEphbiBLcmF0b2Nodmls IDxob256YUBqaWtvcy5jej4KKyAqICAgICAgICAgICAgICAgMjAwOSBDbGVtc29uIFVuaXZlcnNp dHkKKyAqCQkgICAgICAoY29udGFjdDogTWlrZSBNdXJwaHkgPG1hbXVycGhAY3MuY2xlbXNvbi5l ZHU+KQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0yNCwxMzAgKzI5LDExOCBAQAogICogYWxv bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK ICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24s IE1BIDAyMTExLTEzMDcgVVNBCiAgKgotICoKLSAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uOgot ICogIC0gaW5mb3JtYXRpb24gZnJvbSAgICAgaHR0cDovL2V1Yy5qcC9wZXJpcGhzL3hib3gtY29u dHJvbGxlci5qYS5odG1sCi0gKiAgLSB0aGUgaUZvcmNlIGRyaXZlciAgICBkcml2ZXJzL2NoYXIv am95c3RpY2svaWZvcmNlLmMKLSAqICAtIHRoZSBza2VsZXRvbi1kcml2ZXIgIGRyaXZlcnMvdXNi L3VzYi1za2VsZXRvbi5jCi0gKiAgLSBYYm94IDM2MCBpbmZvcm1hdGlvbiBodHRwOi8vd3d3LmZy ZWU2MC5vcmcvd2lraS9HYW1lcGFkCi0gKgotICogVGhhbmtzIHRvOgotICogIC0gSVRPIFRha2F5 dWtpIGZvciBwcm92aWRpbmcgZXNzZW50aWFsIHhwYWQgaW5mb3JtYXRpb24gb24gaGlzIHdlYnNp dGUKLSAqICAtIFZvanRlY2ggUGF2bGlrICAgICAtIGlmb3JjZSBkcml2ZXIgLyBpbnB1dCBzdWJz eXN0ZW0KLSAqICAtIEdyZWcgS3JvYWgtSGFydG1hbiAtIHVzYi1za2VsZXRvbiBkcml2ZXIKLSAq ICAtIFhCT1ggTGludXggcHJvamVjdCAtIGV4dHJhIFVTQiBpZCdzCi0gKgotICogVE9ETzoKLSAq ICAtIGZpbmUgdHVuZSBheGVzIChlc3BlY2lhbGx5IHRyaWdnZXIgYXhlcykKLSAqICAtIGZpeCAi YW5hbG9nIiBidXR0b25zIChyZXBvcnRlZCBhcyBkaWdpdGFsIG5vdykKLSAqICAtIGdldCBydW1i bGUgd29ya2luZwotICogIC0gbmVlZCBVU0IgSURzIGZvciBvdGhlciBkYW5jZSBwYWRzCi0gKgot ICogSGlzdG9yeToKLSAqCi0gKiAyMDAyLTA2LTI3IC0gMC4wLjEgOiBmaXJzdCB2ZXJzaW9uLCBq dXN0IHNhaWQgIlhCT1ggSElEIGNvbnRyb2xsZXIiCi0gKgotICogMjAwMi0wNy0wMiAtIDAuMC4y IDogYmFzaWMgd29ya2luZyB2ZXJzaW9uCi0gKiAgLSBhbGwgYXhlcyBhbmQgOSBvZiB0aGUgMTAg YnV0dG9ucyB3b3JrIChnZXJtYW4gSW50ZXJBY3QgZGV2aWNlKQotICogIC0gdGhlIGJsYWNrIGJ1 dHRvbiBkb2VzIG5vdCB3b3JrCi0gKgotICogMjAwMi0wNy0xNCAtIDAuMC4zIDogcmV3b3JrIGJ5 IFZvanRlY2ggUGF2bGlrCi0gKiAgLSBpbmRlbnRhdGlvbiBmaXhlcwotICogIC0gdXNiICsgaW5w dXQgaW5pdCBzZXF1ZW5jZSBmaXhlcwotICoKLSAqIDIwMDItMDctMTYgLSAwLjAuNCA6IG1pbm9y IGNoYW5nZXMsIG1lcmdlIHdpdGggVm9qdGVjaCdzIHYwLjAuMwotICogIC0gdmVyaWZpZWQgdGhl IGxhY2sgb2YgSElEIGFuZCByZXBvcnQgZGVzY3JpcHRvcnMKLSAqICAtIHZlcmlmaWVkIHRoYXQg QUxMIGJ1dHRvbnMgV09SSwotICogIC0gZml4ZWQgZC1wYWQgdG8gYXhlcyBtYXBwaW5nCi0gKgot ICogMjAwMi0wNy0xNyAtIDAuMC41IDogc2ltcGxpZmllZCBkLXBhZCBoYW5kbGluZwotICoKLSAq IDIwMDQtMTAtMDIgLSAwLjAuNiA6IEREUiBwYWQgc3VwcG9ydAotICogIC0gYm9ycm93ZWQgZnJv bSB0aGUgWEJPWCBsaW51eCBrZXJuZWwKLSAqICAtIFVTQiBpZCdzIGZvciBjb21tb25seSB1c2Vk IGRhbmNlIHBhZHMgYXJlIHByZXNlbnQKLSAqICAtIGRhbmNlIHBhZHMgd2lsbCBtYXAgRC1QQUQg dG8gYnV0dG9ucywgbm90IGF4ZXMKLSAqICAtIHBhc3MgdGhlIG1vZHVsZSBwYXJhbWF0ZXIgJ2Rw YWRfdG9fYnV0dG9ucycgdG8gZm9yY2UKLSAqICAgIHRoZSBELVBBRCB0byBtYXAgdG8gYnV0dG9u cyBpZiB5b3VyIHBhZCBpcyBub3QgZGV0ZWN0ZWQKLSAqCi0gKiBMYXRlciBjaGFuZ2VzIGNhbiBi ZSB0cmFja2VkIGluIFNDTS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5j bHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxs aW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgv dXNiL2lucHV0Lmg+Ci0KLSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiTWFya28gRnJpZWRlbWFubiA8 bWZyQGJteC1jaGVtbml0ei5kZT4iCi0jZGVmaW5lIERSSVZFUl9ERVNDICJYLUJveCBwYWQgZHJp dmVyIgotCi0jZGVmaW5lIFhQQURfUEtUX0xFTiAzMgotCi0vKiB4Ym94IGQtcGFkcyBzaG91bGQg bWFwIHRvIGJ1dHRvbnMsIGFzIGlzIHJlcXVpcmVkIGZvciBERFIgcGFkcwotICAgYnV0IHdlIG1h cCB0aGVtIHRvIGF4ZXMgd2hlbiBwb3NzaWJsZSB0byBzaW1wbGlmeSB0aGluZ3MgKi8KLSNkZWZp bmUgTUFQX0RQQURfVE9fQlVUVE9OUyAgICAwCi0jZGVmaW5lIE1BUF9EUEFEX1RPX0FYRVMgICAg ICAgMQotI2RlZmluZSBNQVBfRFBBRF9VTktOT1dOICAgICAgIDIKLQotI2RlZmluZSBYVFlQRV9Y Qk9YICAgICAgICAwCi0jZGVmaW5lIFhUWVBFX1hCT1gzNjAgICAgIDEKLSNkZWZpbmUgWFRZUEVf WEJPWDM2MFcgICAgMgotI2RlZmluZSBYVFlQRV9VTktOT1dOICAgICAzCisgKiBQbGVhc2Ugc2Vl IHhib3guaCBmb3IgdGhlIENoYW5nZUxvZy4KKyAqLworCisjaW5jbHVkZSAieHBhZC5oIgogCisv KiBUaGlzIG1vZHVsZSBwYXJhbWV0ZXIgaXMgc29tZXRoaW5nIG9mIGEgcmVsaWMsIGJ1dCBpdCBy ZW1haW5zIGZvcgorICogY29tcGF0aWJpbGl0eS4gSW1wb3J0YW50bHksIHRoZSBvcHRpb24gdG8g bWFwIHRoZSBELVBBRCBidXR0b25zIGFwcGxpZXMKKyAqIG9ubHkgdG8gY29udHJvbGxlciAqaW50 ZXJmYWNlcyogKGkuZS4gdmVuZG9yIGFuZCBwcm9kdWN0IGNvZGVzKSBub3QKKyAqIGV4cGxpY2l0 bHkgcHJlc2VudCBpbiB4cGFkX2RldmljZVtdLiAqLwogc3RhdGljIGludCBkcGFkX3RvX2J1dHRv bnM7CiBtb2R1bGVfcGFyYW0oZHBhZF90b19idXR0b25zLCBib29sLCBTX0lSVUdPKTsKLU1PRFVM RV9QQVJNX0RFU0MoZHBhZF90b19idXR0b25zLCAiTWFwIEQtUEFEIHRvIGJ1dHRvbnMgcmF0aGVy IHRoYW4gYXhlcyBmb3IgdW5rbm93biBwYWRzIik7CitNT0RVTEVfUEFSTV9ERVNDKGRwYWRfdG9f YnV0dG9ucywKKwkiTWFwIEQtUEFEIHRvIGJ1dHRvbnMgcmF0aGVyIHRoYW4gYXhlcyBmb3IgdW5r bm93biBwYWRzIik7CiAKKworLyogVGFibGUgb2YgdmFyaW91cyBkZXZpY2UgaW50ZXJmYWNlcyBy ZWNvZ25pemVkIGJ5IHRoaXMgZHJpdmVyLiBFYWNoIHN1cHBvcnRlZAorICogZGV2aWNlIGhhcyBh IGRpcmVjdGlvbmFsIHBhZCBtYXBwaW5nLCBpbnRlcmZhY2UgdHlwZSwgYW5kIGNvbnRyb2xsZXIg dHlwZS4KKyAqIE5vdGUgdGhhdCB3aXJlbGVzcyAzNjAgZGV2aWNlcyBoYXZlIFhDT05UUk9MTEVS X1RZUEVfTk9ORSwgYXMgdGhlIGFjdHVhbAorICogdHlwZSBvZiB0aGUgZ2FtaW5nIGNvbnRyb2xs ZXIgaXMgbm90IGtub3duIHVudGlsIHRoZSBjb250cm9sbGVyIGJpbmRzCisgKiB3aXJlbGVzc2x5 IHdpdGggdGhlIHJlY2VpdmVyCisgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeHBhZF9kZXZpY2Ug ewogCXUxNiBpZFZlbmRvcjsKIAl1MTYgaWRQcm9kdWN0OwogCWNoYXIgKm5hbWU7CiAJdTggZHBh ZF9tYXBwaW5nOwogCXU4IHh0eXBlOworCXU4IGNvbnRyb2xsZXJfdHlwZTsKIH0geHBhZF9kZXZp Y2VbXSA9IHsKLQl7IDB4MDQ1ZSwgMHgwMjAyLCAiTWljcm9zb2Z0IFgtQm94IHBhZCB2MSAoVVMp IiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwNDVlLCAweDAyODksICJN aWNyb3NvZnQgWC1Cb3ggcGFkIHYyIChVUykiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9Y IH0sCi0JeyAweDA0NWUsIDB4MDI4NSwgIk1pY3Jvc29mdCBYLUJveCBwYWQgKEphcGFuKSIsIE1B UF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDQ1ZSwgMHgwMjg3LCAiTWljcm9z b2Z0IFhib3ggQ29udHJvbGxlciBTIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAot CXsgMHgwNDVlLCAweDA3MTksICJYYm94IDM2MCBXaXJlbGVzcyBSZWNlaXZlciIsIE1BUF9EUEFE X1RPX0JVVFRPTlMsIFhUWVBFX1hCT1gzNjBXIH0sCi0JeyAweDBjMTIsIDB4ODgwOSwgIlJlZE9j dGFuZSBYYm94IERhbmNlIFBhZCIsIE1BUF9EUEFEX1RPX0JVVFRPTlMsIFhUWVBFX1hCT1ggfSwK LQl7IDB4MDQ0ZiwgMHgwZjA3LCAiVGhydXN0bWFzdGVyLCBJbmMuIENvbnRyb2xsZXIiLCBNQVBf RFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA0NmQsIDB4YzI0MiwgIkxvZ2l0ZWNo IENoaWxsc3RyZWFtIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YMzYw IH0sCi0JeyAweDA0NmQsIDB4Y2E4NCwgIkxvZ2l0ZWNoIFhib3ggQ29yZGxlc3MgQ29udHJvbGxl ciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDQ2ZCwgMHhjYTg4LCAi TG9naXRlY2ggQ29tcGFjdCBDb250cm9sbGVyIGZvciBYYm94IiwgTUFQX0RQQURfVE9fQVhFUywg WFRZUEVfWEJPWCB9LAotCXsgMHgwNWZkLCAweDEwMDcsICJNYWQgQ2F0eiBDb250cm9sbGVyICh1 bnZlcmlmaWVkKSIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDVmZCwg MHgxMDdhLCAiSW50ZXJBY3QgJ1Bvd2VyUGFkIFBybycgWC1Cb3ggcGFkIChHZXJtYW55KSIsIE1B UF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDczOCwgMHg0NTE2LCAiTWFkIENh dHogQ29udHJvbCBQYWQiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA3 MzgsIDB4NDUyMiwgIk1hZCBDYXR6IEx1bWlDT04iLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9Y Qk9YIH0sCi0JeyAweDA3MzgsIDB4NDUyNiwgIk1hZCBDYXR6IENvbnRyb2wgUGFkIFBybyIsIE1B UF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDczOCwgMHg0NTM2LCAiTWFkIENh dHogTWljcm9DT04iLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA3Mzgs IDB4NDU0MCwgIk1hZCBDYXR6IEJlYXQgUGFkIiwgTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVf WEJPWCB9LAotCXsgMHgwNzM4LCAweDQ1NTYsICJNYWQgQ2F0eiBMeW54IFdpcmVsZXNzIENvbnRy b2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA3MzgsIDB4NDcx NiwgIk1hZCBDYXR6IFdpcmVkIFhib3ggMzYwIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVT LCBYVFlQRV9YQk9YMzYwIH0sCi0JeyAweDA3MzgsIDB4NjA0MCwgIk1hZCBDYXR6IEJlYXQgUGFk IFBybyIsIE1BUF9EUEFEX1RPX0JVVFRPTlMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGMxMiwgMHg4 ODAyLCAiWmVyb3BsdXMgWGJveCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVf WEJPWCB9LAotCXsgMHgwYzEyLCAweDg4MGEsICJQZWxpY2FuIEVjbGlwc2UgUEwtMjAyMyIsIE1B UF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGMxMiwgMHg4ODEwLCAiWmVyb3Bs dXMgWGJveCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsg MHgwYzEyLCAweDk5MDIsICJIQU1BIFZpYnJhWCAtICpGQVVMVFkgSEFSRFdBUkUqIiwgTUFQX0RQ QURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwZTRjLCAweDEwOTcsICJSYWRpY2EgR2Ft ZXN0ZXIgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4 MGU0YywgMHgyMzkwLCAiUmFkaWNhIEdhbWVzIEp0ZWNoIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9U T19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDBlNmYsIDB4MDAwMywgIkxvZ2ljMyBGcmVlYmly ZCB3aXJlbGVzcyBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAot CXsgMHgwZTZmLCAweDAwMDUsICJFY2xpcHNlIHdpcmVsZXNzIENvbnRyb2xsZXIiLCBNQVBfRFBB RF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDBlNmYsIDB4MDAwNiwgIkVkZ2Ugd2lyZWxl c3MgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGU2 ZiwgMHgwMDA2LCAiUGVsaWNhbiAnVFNaJyBXaXJlZCBYYm94IDM2MCBDb250cm9sbGVyIiwgTUFQ X0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWDM2MCB9LAotCXsgMHgwZThmLCAweDAyMDEsICJTbWFy dEpveSBGcmFnIFhwYWQvUFMyIGFkYXB0b3IiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9Y IH0sCi0JeyAweDBmMzAsIDB4MDIwMiwgIkpveXRlY2ggQWR2YW5jZWQgQ29udHJvbGxlciIsIE1B UF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGYzMCwgMHg4ODg4LCAiQmlnQmVu IFhCTWluaVBhZCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAot CXsgMHgxMDJjLCAweGZmMGMsICJKb3l0ZWNoIFdpcmVsZXNzIEFkdmFuY2VkIENvbnRyb2xsZXIi LCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDEyYWIsIDB4ODgwOSwgIlhi b3ggRERSIGRhbmNlcGFkIiwgTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVfWEJPWCB9LAotCXsg MHgxNDMwLCAweDQ3NDgsICJSZWRPY3RhbmUgR3VpdGFyIEhlcm8gWC1wbG9yZXIiLCBNQVBfRFBB RF9UT19BWEVTLCBYVFlQRV9YQk9YMzYwIH0sCi0JeyAweDE0MzAsIDB4ODg4OCwgIlRYNjUwMCsg RGFuY2UgUGFkIChmaXJzdCBnZW5lcmF0aW9uKSIsIE1BUF9EUEFEX1RPX0JVVFRPTlMsIFhUWVBF X1hCT1ggfSwKLQl7IDB4MDQ1ZSwgMHgwMjhlLCAiTWljcm9zb2Z0IFgtQm94IDM2MCBwYWQiLCBN QVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YMzYwIH0sCi0JeyAweGZmZmYsIDB4ZmZmZiwgIkNo aW5lc2UtbWFkZSBYYm94IENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9Y IH0sCi0JeyAweDAwMDAsIDB4MDAwMCwgIkdlbmVyaWMgWC1Cb3ggcGFkIiwgTUFQX0RQQURfVU5L Tk9XTiwgWFRZUEVfVU5LTk9XTiB9CisJeyAweDA0NWUsIDB4MDIwMiwgIk1pY3Jvc29mdCBYLUJv eCBwYWQgdjEgKFVTKSIsIE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9M TEVSX1RZUEVfUEFEIH0sCisJeyAweDA0NWUsIDB4MDI4OSwgIk1pY3Jvc29mdCBYLUJveCBwYWQg djIgKFVTKSIsIE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZ UEVfUEFEIH0sCisJeyAweDA0NWUsIDB4MDI4NSwgIk1pY3Jvc29mdCBYLUJveCBwYWQgKEphcGFu KSIsIE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfUEFE IH0sCisJeyAweDA0NWUsIDB4MDI4NywgIk1pY3Jvc29mdCBYYm94IENvbnRyb2xsZXIgUyIsIE1B UF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJ eyAweDA0NWUsIDB4MDcxOSwgIlhib3ggMzYwIFdpcmVsZXNzIFJlY2VpdmVyIiwgTUFQX0RQQURf VE9fQlVUVE9OUywKKwkJWFRZUEVfWEJPWDM2MFcsIFhDT05UUk9MTEVSX1RZUEVfTk9ORSB9LAor CXsgMHgwYzEyLCAweDg4MDksICJSZWRPY3RhbmUgWGJveCBEYW5jZSBQYWQiLCBNQVBfRFBBRF9U T19CVVRUT05TLAorCQlYVFlQRV9YQk9YLCBYQ09OVFJPTExFUl9UWVBFX0RBTkNFX1BBRCB9LAor CXsgMHgwNDRmLCAweDBmMDcsICJUaHJ1c3RtYXN0ZXIsIEluYy4gQ29udHJvbGxlciIsIE1BUF9E UEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAw eDA0NmQsIDB4YzI0MiwgIkxvZ2l0ZWNoIENoaWxsc3RyZWFtIENvbnRyb2xsZXIiLCBNQVBfRFBB RF9UT19BWEVTLAorCQlYVFlQRV9YQk9YMzYwLCBYQ09OVFJPTExFUl9UWVBFX1BBRCB9LAorCXsg MHgwNDZkLCAweGNhODQsICJMb2dpdGVjaCBYYm94IENvcmRsZXNzIENvbnRyb2xsZXIiLCBNQVBf RFBBRF9UT19BWEVTLAorCQlYVFlQRV9YQk9YLCBYQ09OVFJPTExFUl9UWVBFX1BBRCB9LAorCXsg MHgwNDZkLCAweGNhODgsICJMb2dpdGVjaCBDb21wYWN0IENvbnRyb2xsZXIgZm9yIFhib3giLAor CQlNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YLCBYQ09OVFJPTExFUl9UWVBFX1BBRCB9LAor CXsgMHgwNWZkLCAweDEwMDcsICJNYWQgQ2F0eiBDb250cm9sbGVyICh1bnZlcmlmaWVkKSIsIE1B UF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJ eyAweDA1ZmQsIDB4MTA3YSwgIkludGVyQWN0ICdQb3dlclBhZCBQcm8nIFgtQm94IHBhZCAoR2Vy bWFueSkiLAorCQlNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YLCBYQ09OVFJPTExFUl9UWVBF X1BBRCB9LAorCXsgMHgwNzM4LCAweDQ1MTYsICJNYWQgQ2F0eiBDb250cm9sIFBhZCIsIE1BUF9E UEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gsCisJCVhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAw eDA3MzgsIDB4NDUyMiwgIk1hZCBDYXR6IEx1bWlDT04iLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQ RV9YQk9YLAorCQlYQ09OVFJPTExFUl9UWVBFX1BBRCB9LAorCXsgMHgwNzM4LCAweDQ1MjYsICJN YWQgQ2F0eiBDb250cm9sIFBhZCBQcm8iLCBNQVBfRFBBRF9UT19BWEVTLAorCQlYVFlQRV9YQk9Y LCBYQ09OVFJPTExFUl9UWVBFX1BBRCB9LAorCXsgMHgwNzM4LCAweDQ1MzYsICJNYWQgQ2F0eiBN aWNyb0NPTiIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gsCisJCVhDT05UUk9MTEVSX1RZ UEVfUEFEIH0sCisJeyAweDA3MzgsIDB4NDU0MCwgIk1hZCBDYXR6IEJlYXQgUGFkIiwgTUFQX0RQ QURfVE9fQlVUVE9OUywgWFRZUEVfWEJPWCwKKwkJWENPTlRST0xMRVJfVFlQRV9EQU5DRV9QQUQg fSwKKwl7IDB4MDczOCwgMHg0NTU2LCAiTWFkIENhdHogTHlueCBXaXJlbGVzcyBDb250cm9sbGVy IiwgTUFQX0RQQURfVE9fQVhFUywKKwkJWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQg fSwKKwl7IDB4MDczOCwgMHg0NzE2LCAiTWFkIENhdHogV2lyZWQgWGJveCAzNjAgQ29udHJvbGxl ciIsCisJCU1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gzNjAsIFhDT05UUk9MTEVSX1RZUEVf UEFEIH0sCisJeyAweDA3MzgsIDB4NjA0MCwgIk1hZCBDYXR6IEJlYXQgUGFkIFBybyIsIE1BUF9E UEFEX1RPX0JVVFRPTlMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfREFOQ0VfUEFE IH0sCisJeyAweDBjMTIsIDB4ODgwMiwgIlplcm9wbHVzIFhib3ggQ29udHJvbGxlciIsIE1BUF9E UEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAw eDBjMTIsIDB4ODgwYSwgIlBlbGljYW4gRWNsaXBzZSBQTC0yMDIzIiwgTUFQX0RQQURfVE9fQVhF UywKKwkJWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MGMxMiwgMHg4 ODEwLCAiWmVyb3BsdXMgWGJveCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywKKwkJWFRZ UEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MGMxMiwgMHg5OTAyLCAiSEFN QSBWaWJyYVggLSAqRkFVTFRZIEhBUkRXQVJFKiIsIE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBF X1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDBlNGMsIDB4MTA5NywgIlJhZGlj YSBHYW1lc3RlciBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywKKwkJWFRZUEVfWEJPWCwg WENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MGU0YywgMHgyMzkwLCAiUmFkaWNhIEdhbWVz IEp0ZWNoIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLAorCQlYVFlQRV9YQk9YLCBYQ09O VFJPTExFUl9UWVBFX1BBRCB9LAorCXsgMHgwZTZmLCAweDAwMDMsICJMb2dpYzMgRnJlZWJpcmQg d2lyZWxlc3MgQ29udHJvbGxlciIsCisJCU1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gsIFhD T05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDBlNmYsIDB4MDAwNSwgIkVjbGlwc2Ugd2lyZWxl c3MgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9M TEVSX1RZUEVfUEFEIH0sCisJeyAweDBlNmYsIDB4MDAwNiwgIkVkZ2Ugd2lyZWxlc3MgQ29udHJv bGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVf UEFEIH0sCisJeyAweDBlNmYsIDB4MDAwNiwgIlBlbGljYW4gJ1RTWicgV2lyZWQgWGJveCAzNjAg Q29udHJvbGxlciIsCisJCU1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gzNjAsIFhDT05UUk9M TEVSX1RZUEVfUEFEIH0sCisJeyAweDBlOGYsIDB4MDIwMSwgIlNtYXJ0Sm95IEZyYWcgWHBhZC9Q UzIgYWRhcHRvciIsIE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVS X1RZUEVfUEFEIH0sCisJeyAweDBmMzAsIDB4MDIwMiwgIkpveXRlY2ggQWR2YW5jZWQgQ29udHJv bGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVf UEFEIH0sCisJeyAweDBmMzAsIDB4ODg4OCwgIkJpZ0JlbiBYQk1pbmlQYWQgQ29udHJvbGxlciIs IE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0s CisJeyAweDEwMmMsIDB4ZmYwYywgIkpveXRlY2ggV2lyZWxlc3MgQWR2YW5jZWQgQ29udHJvbGxl ciIsCisJCU1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfUEFE IH0sCisJeyAweDEyYWIsIDB4ODgwOSwgIlhib3ggRERSIGRhbmNlcGFkIiwgTUFQX0RQQURfVE9f QlVUVE9OUywgWFRZUEVfWEJPWCwKKwkJWENPTlRST0xMRVJfVFlQRV9EQU5DRV9QQUQgfSwKKwl7 IDB4MTQzMCwgMHg0NzQ4LCAiUmVkT2N0YW5lIEd1aXRhciBIZXJvIFgtcGxvcmVyIiwgTUFQX0RQ QURfVE9fQVhFUywKKwkJWFRZUEVfWEJPWDM2MCwgWENPTlRST0xMRVJfVFlQRV9HVUlUQVIgfSwK Kwl7IDB4MTQzMCwgMHg4ODg4LCAiVFg2NTAwKyBEYW5jZSBQYWQgKGZpcnN0IGdlbmVyYXRpb24p IiwKKwkJTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9E QU5DRV9QQUQgfSwKKwl7IDB4MDQ1ZSwgMHgwMjhlLCAiTWljcm9zb2Z0IFgtQm94IDM2MCBwYWQi LCBNQVBfRFBBRF9UT19BWEVTLAorCQlYVFlQRV9YQk9YMzYwLCBYQ09OVFJPTExFUl9UWVBFX1BB RCB9LAorCXsgMHhmZmZmLCAweGZmZmYsICJDaGluZXNlLW1hZGUgWGJveCBDb250cm9sbGVyIiwg TUFQX0RQQURfVE9fQVhFUywKKwkJWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwK Kwl7IDB4MDAwMCwgMHgwMDAwLCAiR2VuZXJpYyBYLUJveCBwYWQiLCBNQVBfRFBBRF9VTktOT1dO LCBYVFlQRV9VTktOT1dOLAorCQlYQ09OVFJPTExFUl9UWVBFX1BBRCB9CiB9OwogCisKIC8qIGJ1 dHRvbnMgc2hhcmVkIHdpdGggeGJveCBhbmQgeGJveDM2MCAqLwogc3RhdGljIGNvbnN0IHNpZ25l ZCBzaG9ydCB4cGFkX2NvbW1vbl9idG5bXSA9IHsKIAlCVE5fQSwgQlROX0IsIEJUTl9YLCBCVE5f WSwJCQkvKiAiYW5hbG9nIiBidXR0b25zICovCkBAIC0xNjgsMTIgKzE2MSwxNCBAQAogCS0xCQkJ CS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCi1zdGF0aWMgY29uc3Qgc2lnbmVkIHNob3J0 IHhwYWQzNjBfYnRuW10gPSB7ICAvKiBidXR0b25zIGZvciB4MzYwIGNvbnRyb2xsZXIgKi8KKy8q IGJ1dHRvbnMgZm9yIHgzNjAgY29udHJvbGxlciAqLworc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9y dCB4cGFkMzYwX2J0bltdID0gewogCUJUTl9UTCwgQlROX1RSLAkJLyogQnV0dG9uIExCL1JCICov CiAJQlROX01PREUsCQkvKiBUaGUgYmlnIFggYnV0dG9uICovCiAJLTEKIH07CiAKKy8qIHN0aWNr cyBhbmQgdHJpZ2dlcnMgY29tbW9uIHRvIGFsbCBkZXZpY2VzICovCiBzdGF0aWMgY29uc3Qgc2ln bmVkIHNob3J0IHhwYWRfYWJzW10gPSB7CiAJQUJTX1gsIEFCU19ZLAkJLyogbGVmdCBzdGljayAq LwogCUFCU19SWCwgQUJTX1JZLAkJLyogcmlnaHQgc3RpY2sgKi8KQEAgLTE4Nyw2MSArMTgyLDM1 OCBAQAogCS0xCQkJLyogdGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKLS8qIFhib3ggMzYwIGhh cyBhIHZlbmRvci1zcGVjaWZpYyBjbGFzcywgc28gd2UgY2Fubm90IG1hdGNoIGl0IHdpdGggb25s eQotICogVVNCX0lOVEVSRkFDRV9JTkZPIChhbHNvIHNwZWNpZmljYWxseSByZWZ1c2VkIGJ5IFVT QiBzdWJzeXN0ZW0pLCBzbyB3ZQotICogbWF0Y2ggYWdhaW5zdCB2ZW5kb3IgaWQgYXMgd2VsbC4g V2lyZWQgWGJveCAzNjAgZGV2aWNlcyBoYXZlIHByb3RvY29sIDEsCi0gKiB3aXJlbGVzcyBjb250 cm9sbGVycyBoYXZlIHByb3RvY29sIDEyOS4gKi8KLSNkZWZpbmUgWFBBRF9YQk9YMzYwX1ZFTkRP Ul9QUk9UT0NPTCh2ZW5kLHByKSBcCi0JLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRD SF9WRU5ET1IgfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLCBcCi0JLmlkVmVuZG9yID0g KHZlbmQpLCBcCi0JLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19WRU5ET1JfU1BFQywgXAot CS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSA5MywgXAotCS5iSW50ZXJmYWNlUHJvdG9jb2wgPSAocHIp Ci0jZGVmaW5lIFhQQURfWEJPWDM2MF9WRU5ET1IodmVuZCkgXAotCXsgWFBBRF9YQk9YMzYwX1ZF TkRPUl9QUk9UT0NPTCh2ZW5kLDEpIH0sIFwKLQl7IFhQQURfWEJPWDM2MF9WRU5ET1JfUFJPVE9D T0wodmVuZCwxMjkpIH0KLQotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHhwYWRfdGFibGUg W10gPSB7Ci0JeyBVU0JfSU5URVJGQUNFX0lORk8oJ1gnLCAnQicsIDApIH0sCS8qIFgtQm94IFVT Qi1JRiBub3QgYXBwcm92ZWQgY2xhc3MgKi8KLQlYUEFEX1hCT1gzNjBfVkVORE9SKDB4MDQ1ZSks CQkvKiBNaWNyb3NvZnQgWC1Cb3ggMzYwIGNvbnRyb2xsZXJzICovCi0JWFBBRF9YQk9YMzYwX1ZF TkRPUigweDA0NmQpLAkJLyogTG9naXRlY2ggWC1Cb3ggMzYwIHN0eWxlIGNvbnRyb2xsZXJzICov Ci0JWFBBRF9YQk9YMzYwX1ZFTkRPUigweDA3MzgpLAkJLyogTWFkIENhdHogWC1Cb3ggMzYwIGNv bnRyb2xsZXJzICovCi0JWFBBRF9YQk9YMzYwX1ZFTkRPUigweDBlNmYpLAkJLyogMHgwZTZmIFgt Qm94IDM2MCBjb250cm9sbGVycyAqLwotCVhQQURfWEJPWDM2MF9WRU5ET1IoMHgxNDMwKSwJCS8q IFJlZE9jdGFuZSBYLUJveCAzNjAgY29udHJvbGxlcnMgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2Rl dmljZV9pZCB4cGFkX3RhYmxlW10gPSB7CisJCS8qIFgtQm94IFVTQi1JRiBub3QgYXBwcm92ZWQg Y2xhc3MgKi8KKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTygnWCcsICdCJywgMCkgfSwKKwlYUEFEX1hC T1gzNjBfVkVORE9SKDB4MDQ1ZSksCS8qIE1pY3Jvc29mdCBYLUJveCAzNjAgY29udHJvbGxlcnMg Ki8KKwlYUEFEX1hCT1gzNjBfVkVORE9SKDB4MDQ2ZCksCS8qIExvZ2l0ZWNoIDM2MCBzdHlsZSBj b250cm9sbGVycyAqLworCVhQQURfWEJPWDM2MF9WRU5ET1IoMHgwNzM4KSwJLyogTWFkIENhdHog WC1Cb3ggMzYwIGNvbnRyb2xsZXJzICovCisJWFBBRF9YQk9YMzYwX1ZFTkRPUigweDBlNmYpLAkv KiAweDBlNmYgWC1Cb3ggMzYwIGNvbnRyb2xsZXJzICovCisJWFBBRF9YQk9YMzYwX1ZFTkRPUigw eDE0MzApLAkvKiBSZWRPY3RhbmUgWC1Cb3ggMzYwIGNvbnRyb2xsZXJzICovCiAJeyB9CiB9Owog Ci1NT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHhwYWRfdGFibGUpOworTU9EVUxFX0RFVklDRV9U QUJMRSh1c2IsIHhwYWRfdGFibGUpOwogCi1zdHJ1Y3QgdXNiX3hwYWQgewotCXN0cnVjdCBpbnB1 dF9kZXYgKmRldjsJCS8qIGlucHV0IGRldmljZSBpbnRlcmZhY2UgKi8KLQlzdHJ1Y3QgdXNiX2Rl dmljZSAqdWRldjsJLyogdXNiIGRldmljZSAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHhw YWRfZHJpdmVyID0geworCS5uYW1lCQk9ICJ4cGFkIiwKKwkucHJvYmUJCT0geHBhZF9wcm9iZSwK KwkuZGlzY29ubmVjdAk9IHhwYWRfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUJPSB4cGFkX3RhYmxl LAorfTsKIAotCWludCBwYWRfcHJlc2VudDsKIAotCXN0cnVjdCB1cmIgKmlycV9pbjsJCS8qIHVy YiBmb3IgaW50ZXJydXB0IGluIHJlcG9ydCAqLwotCXVuc2lnbmVkIGNoYXIgKmlkYXRhOwkJLyog aW5wdXQgZGF0YSAqLwotCWRtYV9hZGRyX3QgaWRhdGFfZG1hOworLyogV2lyZWxlc3MgMzYwIGRl dmljZSBpZGVudGlmaWNhdGlvbi4KKyAqCisgKiBXaGVuIGEgd2lyZWxlc3MgY29udHJvbGxlciBj b25uZWN0cywgdGhlIDJuZCBwYWNrZXQgaXQgc2VuZHMgU0VFTVMgdG8KKyAqIGJlIHNvbWUga2lu ZCBvZiB1bmlxdWUgY29udHJvbGxlciBpZGVudGlmaWNhdGlvbiBtZXNzYWdlLiBVc2luZyB1c2Jt b24KKyAqIChzZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNibW9uLnR4dCksIEkgdHJpZWQgNCBnYW1l cGFkcyBhbmQgYSBndWl0YXIsIGFuZAorICogSSBjb2xsZWN0ZWQgdGhlIGZvbGxvd2luZyA1IElE IHBhY2tldHMgZnJvbSB0aGUgNSBkZXZpY2VzOgorICoKKyAqIDAwMGYwMGYwIDAwY2NmZDI3IDAw NjBlMjI2IDYzNzAwMDEwIDEzZTMyMDFkIDMwMDM0MDAxIDUwMDFmZmZmIGZmCisgKiAwMDBmMDBm MCBmMGNjZmQyNyAwMDYwZDhjNCBlOTYwMDAwOSAxM2U3MjAxZCAzMDAzNDAwMSA1MDAxZmZmZiBm ZgorICogMDAwZjAwZjAgMDBjY2ZkMjcgMDA2MDU3OGIgODJmMDAwMTAgMTNlMzIwMWQgMzAwMzQw MDEgNTAwMWZmZmYgZmYKKyAqIDAwMGYwMGYwIGYwY2NmZDI3IDAwNjBkYTFjIGIxNTAwMDA5IDEz ZTcyMDFkIDMwMDM0MDAxIDUwMDFmZmZmIGZmCisgKiAwMDBmMDBmMCBmMGNjZmQyNyAwMDYwMDJk MSA3MWQxMDAwMCAxM2UzMjAxZCAzMDAzNDQzMCA1MTA3ZmZmZiBmZgorICoKKyAqIEZyb20gdGhp cyB0cmFjZSBkYXRhLCBJIGNvbmNvY3RlZCB0aGUgZm9sbG93aW5nIChwb3RlbnRpYWxseSBpbmNv cnJlY3QpCisgKiBzY2hlbWUgZm9yIGRldGVjdGluZyB0eXBlIGFuZCB1bmlxdWUgSUQ6CisgKgor ICogKioqKioqKiogeHgqKioqeHggeHh4eHh4eHggeHh4eCoqeHggKip4eCoqKiogKioqKnR0dHQg dHR0dCoqKiogKioKKyAqICAgICAgICAgICAgICAgIHwgIHVuaXF1ZSBpZCB8ICAgICAgICAgICAg ICAgICAgICB8ICB0eXBlIHwKKyAqCisgKiBJdCBhcHBlYXJzIHRoYXQgc29tZSBvZiB0aGUgYnl0 ZXMgaW4gdGhlIGZpcnN0IGhhbGYgb2YgdGhlIG1lc3NhZ2UsIG5vdGVkCisgKiBhYm92ZSBhcyAi dW5pcXVlIGlkIiBhcmUgc29tZSBzb3J0IG9mIHNlcmlhbCBudW1iZXIsIHRob3VnaCBJIGNhbm5v dCB3b3JrCisgKiBvdXQgYW55IGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gdGhlc2UgYnl0ZXMgYW5k IHRoZSBzZXJpYWwgbnVtYmVyIHByaW50ZWQKKyAqIHVuZGVyIHRoZSBiYXR0ZXJ5IHBhY2suIE1h bnkgb2YgdGhlIGJ5dGVzIGluIHRoaXMgcG9zc2libHkgdW5pcXVlIGZpZWxkCisgKiBhcmUgbm90 IHVuaXF1ZSBhY3Jvc3MgbXkgY29udHJvbGxlcnMsIGFuZCBtYXkgbm90IGluIGZhY3QgYmUgcGFy dCBvZiB0aGUKKyAqIGNvbnRyb2xsZXIncyB1bmlxdWUgaWRlbnRpZmljYXRpb24sIGJ1dCBJIGZp Z3VyZWQgaXQgd2FzIGJldHRlciB0byBoYXZlCisgKiBleHRyYSBieXRlcyBvbiBlaXRoZXIgZW5k IG9mIHRoZSB1bmlxdWUgYnl0ZSBzdHJpbmcgaW5zdGVhZCBvZiB0aGUKKyAqIGFsdGVybmF0aXZl LiBJbiBhZGRpdGlvbiwgdGhlIHBhY2tldCBhcHBlYXJzIHRvIGluZGljYXRlIHRoZSB0eXBlIG9m CisgKiB0aGUgY29udHJvbGxlciB0b3dhcmQgdGhlIGVuZDogdGhlIHBhZHMgYWxsIHNlbmQgNDAw MSA1MDAxLCB3aGlsZSB0aGUKKyAqIGd1aXRhciBzZW5kcyA0NDMwIDUxMDcuCisgKgorICogRnVy dGhlciB0ZXN0aW5nIG92ZXIgYSB3aWRlciB2YXJpZXR5IG9mIGRldmljZXMgaXMgcHJvYmFibHkg bmVlZGVkIHRvCisgKiBkZXRlcm1pbmUgaWYgY2hhbmdlcyBuZWVkIHRvIGJlIG1hZGUgdG8gdGhp cyBzY2hlbWUuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdzM2MF9pZCB7CisJdW5zaWduZWQg Y2hhciBpZF9ieXRlc1s0XTsKKwl1OCBjb250cm9sbGVyX3R5cGU7Cit9IHczNjBfaWRbXSA9IHsK Kwl7IHsweDQwLCAweDAxLCAweDUwLCAweDAxfSwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7 IHsweDQ0LCAweDMwLCAweDUxLCAweDA3fSwgWENPTlRST0xMRVJfVFlQRV9HVUlUQVIgfSwKKwl7 IHsweDAwLCAweDAwLCAweDAwLCAweDAwfSwgWENPTlRST0xMRVJfVFlQRV9OT05FIH0KK307CiAK LQlzdHJ1Y3QgdXJiICpidWxrX291dDsKLQl1bnNpZ25lZCBjaGFyICpiZGF0YTsKIAotI2lmIGRl ZmluZWQoQ09ORklHX0pPWVNUSUNLX1hQQURfRkYpIHx8IGRlZmluZWQoQ09ORklHX0pPWVNUSUNL X1hQQURfTEVEUykKLQlzdHJ1Y3QgdXJiICppcnFfb3V0OwkJLyogdXJiIGZvciBpbnRlcnJ1cHQg b3V0IHJlcG9ydCAqLwotCXVuc2lnbmVkIGNoYXIgKm9kYXRhOwkJLyogb3V0cHV0IGRhdGEgKi8K LQlkbWFfYWRkcl90IG9kYXRhX2RtYTsKLQlzdHJ1Y3QgbXV0ZXggb2RhdGFfbXV0ZXg7Ci0jZW5k aWYKKy8qIFRoZSBkZWFkIHpvbmUgYW5kIHN0aWNrIGxpbWl0IGJvdGggYWZmZWN0IHRoZSBiZWhh dmlvciBvZiB0aGUgY29ycmVzcG9uZGluZworICogYW5hbG9nIHN0aWNrLCBzaW5jZSB0aGUgb3V0 cHV0IHZhbHVlcyByZXBvcnRlZCBmb3IgdGhlIHN0aWNrIGlucHV0cyB3aWxsCisgKiBiZSBzY2Fs ZWQgb250byBbMCwzMjc2N10uIEl0IGlzIHRodXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IHRo ZSBkZWFkIHpvbmUKKyAqIGlzIG5ldmVyIGxhcmdlciB0aGFuIHRoZSBzdGljayBsaW1pdC4gSW4g ZmFjdCwgYSBtaW5pbWFsIGFtb3VudCBvZiBzdGljaworICogdHJhdmVsIHNwYWNlICgxMDI0KSBp cyBtYWludGFpbmVkIGJldHdlZW4gdGhlIHR3byB2YWx1ZXMuIEluIHByYWN0aWNlLAorICogaG93 ZXZlciwgdGhlIHN0aWNrIGxpbWl0IHNob3VsZCBhbHdheXMgYmUgbXVjaCBncmVhdGVyIHRoYW4g dGhlIGRlYWQgem9uZS4KKyAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfWFBBRF9M RURTKQotCXN0cnVjdCB4cGFkX2xlZCAqbGVkOwotI2VuZGlmCitzdGF0aWMgdm9pZCBzZXRfZGVh ZF96b25lKHVuc2lnbmVkIGludCBuZXdfc2l6ZSwgdW5zaWduZWQgaW50ICpkeiwKKwkJdW5zaWdu ZWQgaW50IHN0aWNrX2xpbWl0KQoreworCSpkeiA9IG1pbihuZXdfc2l6ZSwgc3RpY2tfbGltaXQg LSAxMDI0KTsKK30KIAotCWNoYXIgcGh5c1s2NF07CQkJLyogcGh5c2ljYWwgZGV2aWNlIHBhdGgg Ki8KK3N0YXRpYyB2b2lkIHNldF9zdGlja19saW1pdCh1bnNpZ25lZCBpbnQgbmV3X3NpemUsIHVu c2lnbmVkIGludCAqc2wsCisJCXVuc2lnbmVkIGludCBkZWFkX3pvbmUpCit7CisJKnNsID0gbWlu KG1heChuZXdfc2l6ZSwgZGVhZF96b25lICsgMTAyNCksIDMyNzY3dSk7Cit9CisKKworLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCisvKgorICogU3lzRnMgaW50ZXJmYWNlIGZ1bmN0aW9ucworICoKKyAq IFdlIHVzZSBjb21tb24gZnVuY3Rpb25zLCB3aGVyZSBwb3NzaWJsZSwgdG8gaW1wbGVtZW50IHRo ZSBzaG93L3N0b3JlCisgKiByb3V0aW5lcy4gVGhpcyBkZXNpZ24gc2F2ZXMgb24gY29kZSBhbmQg cmVkdWNlcyB0aGUgYnVyZGVuIG9mIGFkZGluZyB0byBvcgorICogY2hhbmdpbmcgdGhlIGludGVy ZmFjZS4KKyAqLworCisKK3N0YXRpYyBzc2l6ZV90IHhwYWRfc2hvd191aW50KHN0cnVjdCBkZXZp Y2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZikKK3sK KwlzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQgPSB0b194cGFkKGRldik7CisJdW5zaWduZWQgaW50IHZh bHVlOworCWlmIChhdHRyID09ICZkZXZfYXR0cl9sZWZ0X2RlYWRfem9uZSkKKwkJdmFsdWUgPSB4 cGFkLT5sZWZ0X2RlYWRfem9uZTsKKwllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9yaWdodF9k ZWFkX3pvbmUpCisJCXZhbHVlID0geHBhZC0+cmlnaHRfZGVhZF96b25lOworCWVsc2UgaWYgKGF0 dHIgPT0gJmRldl9hdHRyX2xlZnRfc3RpY2tfbGltaXQpCisJCXZhbHVlID0geHBhZC0+bGVmdF9z dGlja19saW1pdDsKKwllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9yaWdodF9zdGlja19saW1p dCkKKwkJdmFsdWUgPSB4cGFkLT5yaWdodF9zdGlja19saW1pdDsKKwllbHNlCisJCXJldHVybiAt RUlPOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLCB2YWx1ZSk7Cit9 CisKKworc3RhdGljIHNzaXplX3QgeHBhZF9zdG9yZV91aW50KHN0cnVjdCBkZXZpY2UgKmRldiwK KwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90 IGNvdW50KQoreworCXN0cnVjdCB1c2JfeHBhZCAqeHBhZCA9IHRvX3hwYWQoZGV2KTsKKwl1bnNp Z25lZCBpbnQgbmV3X3ZhbHVlOworCWlmIChzc2NhbmYoYnVmLCAiJXUiLCAmbmV3X3ZhbHVlKSAh PSAxKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChhdHRyID09ICZkZXZfYXR0cl9sZWZ0X2RlYWRf em9uZSkKKwkJc2V0X2RlYWRfem9uZShuZXdfdmFsdWUsICZ4cGFkLT5sZWZ0X2RlYWRfem9uZSwK KwkJCQl4cGFkLT5sZWZ0X3N0aWNrX2xpbWl0KTsKKwllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0 cl9yaWdodF9kZWFkX3pvbmUpCisJCXNldF9kZWFkX3pvbmUobmV3X3ZhbHVlLCAmeHBhZC0+cmln aHRfZGVhZF96b25lLAorCQkJCXhwYWQtPnJpZ2h0X3N0aWNrX2xpbWl0KTsKKwllbHNlIGlmIChh dHRyID09ICZkZXZfYXR0cl9sZWZ0X3N0aWNrX2xpbWl0KQorCQlzZXRfc3RpY2tfbGltaXQobmV3 X3ZhbHVlLCAmeHBhZC0+bGVmdF9zdGlja19saW1pdCwKKwkJCQl4cGFkLT5sZWZ0X2RlYWRfem9u ZSk7CisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfcmlnaHRfc3RpY2tfbGltaXQpCisJCXNl dF9zdGlja19saW1pdChuZXdfdmFsdWUsICZ4cGFkLT5yaWdodF9zdGlja19saW1pdCwKKwkJCQl4 cGFkLT5yaWdodF9kZWFkX3pvbmUpOworCWVsc2UKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIHN0 cm5sZW4oYnVmLCBQQUdFX1NJWkUpOworfQorCisKK3N0YXRpYyBzc2l6ZV90IHhwYWRfc3RvcmVf Ym9vbChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRy LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX3hwYWQgKnhw YWQgPSB0b194cGFkKGRldik7CisJaW50IG5ld3ZhbHVlOworCWlmIChzc2NhbmYoYnVmLCAiJWQi LCAmbmV3dmFsdWUpICE9IDEpCisJCXJldHVybiAtRUlPOworCQorCWlmIChhdHRyID09ICZkZXZf YXR0cl9ydW1ibGVfZW5hYmxlKQorCQl4cGFkLT5ydW1ibGVfZW5hYmxlID0gKG5ld3ZhbHVlKSA/ IDEgOiAwOworCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX2xlZnRfdHJpZ2dlcl9mdWxsX2F4 aXMpCisJCXhwYWQtPmxlZnRfdHJpZ2dlcl9mdWxsX2F4aXMgPSAobmV3dmFsdWUpID8gMSA6IDA7 CisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfcmlnaHRfdHJpZ2dlcl9mdWxsX2F4aXMpCisJ CXhwYWQtPnJpZ2h0X3RyaWdnZXJfZnVsbF9heGlzID0gKG5ld3ZhbHVlKSA/IDEgOiAwOworCXJl dHVybiBzdHJubGVuKGJ1ZiwgUEFHRV9TSVpFKTsKK30KKworCisvKiByZWFkLW9ubHkgYXR0cmli dXRlcyBzaGFyZSBhIGNvbW1vbiBzdG9yZSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZXJyb3Ig Ki8KK3N0YXRpYyBzc2l6ZV90IHhwYWRfc3RvcmVfcm8oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1 Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291 bnQpCit7CisJcmV0dXJuIC1FSU87Cit9CisKKworc3RhdGljIHNzaXplX3QgeHBhZF9zaG93X2lu dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQlj aGFyICpidWYpCit7CisJc3RydWN0IHVzYl94cGFkICp4cGFkID0gdG9feHBhZChkZXYpOworCWlu dCB2YWx1ZTsKKwlpZiAoYXR0ciA9PSAmZGV2X2F0dHJfcnVtYmxlX2VuYWJsZSkKKwkJdmFsdWUg PSB4cGFkLT5ydW1ibGVfZW5hYmxlOworCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX2NvbnRy b2xsZXJfbnVtYmVyKQorCQl2YWx1ZSA9IHhwYWQtPmNvbnRyb2xsZXJfbnVtYmVyOworCWVsc2Ug aWYgKGF0dHIgPT0gJmRldl9hdHRyX2NvbnRyb2xsZXJfcHJlc2VudCkKKwkJdmFsdWUgPSB4cGFk LT5jb250cm9sbGVyX3ByZXNlbnQ7CisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfY29udHJv bGxlcl90eXBlKQorCQl2YWx1ZSA9IHhwYWQtPmNvbnRyb2xsZXJfdHlwZTsKKwllbHNlIGlmIChh dHRyID09ICZkZXZfYXR0cl9sZWZ0X3RyaWdnZXJfZnVsbF9heGlzKQorCQl2YWx1ZSA9IHhwYWQt PmxlZnRfdHJpZ2dlcl9mdWxsX2F4aXM7CisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfcmln aHRfdHJpZ2dlcl9mdWxsX2F4aXMpCisJCXZhbHVlID0geHBhZC0+cmlnaHRfdHJpZ2dlcl9mdWxs X2F4aXM7CisJZWxzZQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdF X1NJWkUsICIlZFxuIiwgdmFsdWUpOworfQorCisKK3N0YXRpYyBzc2l6ZV90IHhwYWRfc2hvd19p ZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBj aGFyICpidWYpCit7CisJc3RydWN0IHVzYl94cGFkICp4cGFkID0gdG9feHBhZChkZXYpOworCXJl dHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCB4cGFkLT5jb250cm9sbGVyX3Vu aXF1ZV9pZCk7Cit9CisKKworLyogZW5kIG9mIHN5c2ZzIGludGVyZmFjZSAqLworLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworCisvKiBJbnB1dCBzZWN0aW9uICovCisKKy8qCXhwYWRfaW5pdF9jb250 cm9sbGVyCisgKgorICoJUGVyZm9ybXMgY29udHJvbGxlciBzZXR1cCBiYXNlZCBvbiBjb250cm9s bGVyIHR5cGUuCisgKgorICoJTk9URTogeHBhZC0+Y29udHJvbGxlcl9kYXRhLT5jb250cm9sbGVy X3R5cGUgbmVlZHMgdG8gYmUgc2V0IEJFRk9SRQorICoJY2FsbGluZyB0aGlzIGZ1bmN0aW9uIQor ICovCisKK3N0YXRpYyB2b2lkIHhwYWRfaW5pdF9jb250cm9sbGVyKHN0cnVjdCB1c2JfeHBhZCAq eHBhZCkKK3sKKwlzZXRfc3RpY2tfbGltaXQoWFNUSUNLX0xJTUlUX0RFRkFVTFQsICZ4cGFkLT5s ZWZ0X3N0aWNrX2xpbWl0LAorCQkJeHBhZC0+bGVmdF9kZWFkX3pvbmUpOworCXNldF9zdGlja19s aW1pdChYU1RJQ0tfTElNSVRfREVGQVVMVCwgJnhwYWQtPnJpZ2h0X3N0aWNrX2xpbWl0LAorCQkJ eHBhZC0+cmlnaHRfZGVhZF96b25lKTsKKwlzZXRfZGVhZF96b25lKFhERUFEX1pPTkVfREVGQVVM VCwgJnhwYWQtPmxlZnRfZGVhZF96b25lLAorCQkJeHBhZC0+bGVmdF9zdGlja19saW1pdCk7CisJ c2V0X2RlYWRfem9uZShYREVBRF9aT05FX0RFRkFVTFQsICZ4cGFkLT5yaWdodF9kZWFkX3pvbmUs CisJCQl4cGFkLT5yaWdodF9zdGlja19saW1pdCk7CisJeHBhZC0+bGVmdF90cmlnZ2VyX2Z1bGxf YXhpcyA9IFhGVUxMX1RSSUdHRVJfQVhJU19ERUZBVUxUOworCXhwYWQtPnJpZ2h0X3RyaWdnZXJf ZnVsbF9heGlzID0gWEZVTExfVFJJR0dFUl9BWElTX0RFRkFVTFQ7CisKKwlpZiAoeHBhZC0+Y29u dHJvbGxlcl90eXBlID09IFhDT05UUk9MTEVSX1RZUEVfR1VJVEFSKQorCQl4cGFkLT5ydW1ibGVf ZW5hYmxlID0gMDsKKwllbHNlIGlmICh4cGFkLT5jb250cm9sbGVyX3R5cGUgPT0gWENPTlRST0xM RVJfVFlQRV9EQU5DRV9QQUQpCisJCXhwYWQtPnJ1bWJsZV9lbmFibGUgPSAwOworCWVsc2UKKwkJ eHBhZC0+cnVtYmxlX2VuYWJsZSA9IDE7Cit9CisKKworLyoKKyAqCXhwYWRfcHJvY2Vzc19zdGlj a3MKKyAqCisgKglIYW5kbGVzIHN0aWNrIGlucHV0LCBhY2NvdW50aW5nIGZvciBkZWFkIHpvbmVz IGFuZCBzcXVhcmUgYXhlcy4gQmFzZWQKKyAqCW9uIHRoZSBvcmlnaW5hbCBoYW5kbGVycyBmb3Ig dGhlIFhib3ggYW5kIFhib3ggMzYwIGluCisgKgl4cGFkX3Byb2Nlc3NfcGFja2V0IGFuZCB4cGFk MzYwX3Byb2Nlc3NfcGFja2V0LCBidXQgdW5pZmllZCB0byBhdm9pZAorICoJZHVwbGljYXRpb24u CisgKgorICoJV2hlbmV2ZXIgYSBkZWFkIHpvbmUgaXMgdXNlZCwgZWFjaCBheGlzIGlzIHNjYWxl ZCBzbyB0aGF0IG1vdmluZyB0aGUKKyAqCXN0aWNrIHNsaWdodGx5IG91dCBvZiB0aGUgZGVhZCB6 b25lIHJhbmdlIHJlc3VsdHMgaW4gYSBsb3cgYXhpcworICoJdmFsdWUgaW4ganN0ZXN0KDEpLCB3 aGlsZSBtb3ZpbmcgdGhlIHN0aWNrIHRvIHRoZSBtYXhpbXVtIHBvc2l0aW9uCisgKglhbG9uZyBh bnkgYXhpcyBzdGlsbCByZXN1bHRzIGluIDMyNzY3LgorICoKKyAqCUluIG9yZGVyIHRvIHByb3Zp ZGUgdGhlIGFiaWxpdHkgdG8gbWFwIGlucHV0cyB0byBhIHNxdWFyZSBheGlzICh1c2VkCisgKgli eSBvbGRlciBnYW1lcyksIHRoZSBsZWZ0X3N0aWNrX2xpbWl0IGFuZCByaWdodF9zdGlja19saW1p dCBjYW4gYmUKKyAqCXNldC4gVGhlc2UgbGltaXRzIHNwZWNpZnkgYXQgd2hhdCBwb2ludCBpbiB0 aGUgcmF3IGlucHV0IGNvb3JkaW5hdGVzCisgKglhbiBheGlzIGlzIHJlcG9ydGVkIHRvIGJlIGF0 IG1heGltdW0gdmFsdWUgKDMyNzY3IG9yIC0zMjc2NykuCisgKgorICoJQm90aCB0aGUgZGVhZCB6 b25lIGFuZCBzdGljayBsaW1pdCBhbGdvcml0aG1zIGFyZSBpbXBsZW1lbnRlZAorICoJdG9nZXRo ZXIgYXMgYSBjb29yZGluYXRlIHRyYW5zZm9ybWF0aW9uIGZyb20gImVmZmVjdGl2ZSBjb29yZGlu YXRlcyIKKyAqCW9udG8gdGhlIG91dHB1dCBjb29yZGluYXRlcyAod2hpY2ggaGF2ZSBhYnNvbHV0 ZSB2YWx1ZXMgZnJvbSAwIHRvCisgKgkzMjc2NyBhbmQgYXJlIHBvc2l0aXZlIG9yIG5lZ2F0aXZl IGJhc2VkIG9uIGRpcmVjdGlvbikuIEVmZmVjdGl2ZQorICoJY29vcmRpbmF0ZXMgYXJlIGRlZmlu ZWQgYXMgdGhvc2UgaW5wdXQgdmFsdWVzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbgorICoJdGhlIGRl YWQgem9uZSBidXQgbGVzcyB0aGFuIHRoZSBzdGljayBsaW1pdCBvbiB0aGUgYXhpcyBpbiBxdWVz dGlvbi4KKyAqCisgKglEQU5HRVI6IEFsbCBkZW5vbWluYXRvciB2YWx1ZXMgaW4gZGl2aXNpb24g b3BlcmF0aW9ucyBNVVNUIGJlIGNoZWNrZWQKKyAqCWZvciBub24temVybyBjb25kaXRpb24uIERp dmlkaW5nIGJ5IHplcm8gaW5zaWRlIHRoZSBrZXJuZWwgY2FuIGNhdXNlCisgKglhIHN5c3RlbSBk ZWFkbG9jay4KKyAqLworCitzdGF0aWMgdm9pZCB4cGFkX3Byb2Nlc3Nfc3RpY2tzKHN0cnVjdCB1 c2JfeHBhZCAqeHBhZCwgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2 ICpkZXYgPSB4cGFkLT5kZXY7CisJaW50IGNvb3Jkc1s0XTsgICAgLyogeCwgeSwgcngsIHJ5ICov CisJaW50IHhfb2Zmc2V0LCB5X29mZnNldCwgcnhfb2Zmc2V0LCByeV9vZmZzZXQ7CisJaW50IGM7 CisJaW50IHJhbmdlOworCWludCBhYnNfbWFnbml0dWRlLCBhZGp1c3RlZF9tYWduaXR1ZGUsIGRp ZmZlcmVuY2UsIHNjYWxlX2ZyYWN0aW9uOworCWludCBkZWFkX3pvbmVbMl0sIHN0aWNrX2xpbWl0 WzJdOworCisJZGVhZF96b25lWzBdID0geHBhZC0+bGVmdF9kZWFkX3pvbmU7CisJZGVhZF96b25l WzFdID0geHBhZC0+cmlnaHRfZGVhZF96b25lOworCXN0aWNrX2xpbWl0WzBdID0geHBhZC0+bGVm dF9zdGlja19saW1pdDsKKwlzdGlja19saW1pdFsxXSA9IHhwYWQtPnJpZ2h0X3N0aWNrX2xpbWl0 OworCisJaWYgKHhwYWQtPnh0eXBlID09IFhUWVBFX1hCT1gpIHsKKwkJeF9vZmZzZXQgPSAxMjsK KwkJeV9vZmZzZXQgPSAxNDsKKwkJcnhfb2Zmc2V0ID0gMTY7CisJCXJ5X29mZnNldCA9IDE4Owor CX0gZWxzZSB7CisJCXhfb2Zmc2V0ID0gNjsKKwkJeV9vZmZzZXQgPSA4OworCQlyeF9vZmZzZXQg PSAxMDsKKwkJcnlfb2Zmc2V0ID0gMTI7CisJfQorCisJY29vcmRzWzBdID0gKF9fczE2KSBsZTE2 X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgeF9vZmZzZXQpKTsKKwljb29yZHNbMV0gPSB+KF9f czE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgeV9vZmZzZXQpKTsKKwljb29yZHNb Ml0gPSAoX19zMTYpIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopKGRhdGEgKyByeF9vZmZzZXQpKTsK Kwljb29yZHNbM10gPSB+KF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgcnlf b2Zmc2V0KSk7CisKKwkvKiBBZGp1c3RtZW50IGZvciBkZWFkIHpvbmUgYW5kIHNxdWFyZSBheGlz ICovCisJZm9yIChjID0gMDsgYyA8IDQ7IGMrKykgeworCQlhYnNfbWFnbml0dWRlID0gYWJzKGNv b3Jkc1tjXSk7CisJCWFkanVzdGVkX21hZ25pdHVkZSA9IGFic19tYWduaXR1ZGU7CisKKwkJcmFu Z2UgPSAoc3RpY2tfbGltaXRbYy8yXSAtIGRlYWRfem9uZVtjLzJdKTsKKworCQlpZiAoYWJzX21h Z25pdHVkZSA+PSBzdGlja19saW1pdFtjLzJdKSB7CisJCQlhZGp1c3RlZF9tYWduaXR1ZGUgPSAz Mjc2NzsKKwkJfSBlbHNlIGlmIChhYnNfbWFnbml0dWRlIDw9IGRlYWRfem9uZVtjLzJdKSB7CisJ CQlhZGp1c3RlZF9tYWduaXR1ZGUgPSAwOworCQl9IGVsc2UgaWYgKHJhbmdlID4gMCkgeworCQkJ ZGlmZmVyZW5jZSA9IDMyNzY3IC0gcmFuZ2U7CisJCQlpZiAoZGlmZmVyZW5jZSkgeworCQkJCS8q IERJVklTSU9OOiBkaWZmZXJlbmNlIG5vbi16ZXJvICovCisJCQkJc2NhbGVfZnJhY3Rpb24gPSBy YW5nZSAvIGRpZmZlcmVuY2U7CisJCQkJYWRqdXN0ZWRfbWFnbml0dWRlID0KKwkJCQkJYWJzX21h Z25pdHVkZSAtIGRlYWRfem9uZVtjLzJdOworCisJCQkJLyogQXBwcm94aW1hdGUgZmxvYXRpbmct cG9pbnQgZGl2aXNpb24gd2l0aCBhCisJCQkJICogImNhdGNoLXVwIiBzY2FsaW5nIGFsZ29yaXRo bSB0aGF0IGFkZHMgYmFjaworCQkJCSAqIHRvIHRoZSBhZGp1c3RlZF9tYWduaXR1ZGUgYmFzZWQg b24gZGlzdGFuY2UKKwkJCQkgKiBmcm9tIHRoZSBvcmlnaW4gKDAgaW4gYWRqdXN0ZWQgY29vcmRp bmF0ZXMpLgorCQkJCSAqIElmIHRoZSByYW5nZSAvIGRpZmZlcmVuY2UgaXMgYXQgbGVhc3QgMSwK KwkJCQkgKiB0aGVuIDEgbmVlZHMgdG8gYmUgYWRkZWQgdG8gdGhlIGFkanVzdGVkCisJCQkJICog bWFnbml0dWRlIGZvciBldmVyeSBzY2FsZV9mcmFjdGlvbiB1bml0cworCQkJCSAqIGZyb20gdGhl IG9yaWdpbi4gSWYgdGhlIHJhbmdlIC8gZGlmZmVyZW5jZQorCQkJCSAqIGlzIGxlc3MgdGhhbiAx ICgwIGluIGludGVnZXIgZGl2aXNpb24pLAorCQkJCSAqIHRoZW4gZGl2aWRlIHRoZSBkaWZmZXJl bmNlIGJ5IHRoZSByYW5nZSB0bworCQkJCSAqIG9idGFpbiB0aGUgbnVtYmVyIG9mIHVuaXRzIHRv IGFkZCBwZXIgdW5pdAorCQkJCSAqIGZyb20gdGhlIGFkanVzdGVkIG9yaWdpbi4KKwkJCQkgKi8K KwkJCQlpZiAoc2NhbGVfZnJhY3Rpb24pIHsKKwkJCQkJLyogRElWSVNJT046IHNjYWxlX2ZyYWN0 aW9uIG5vbi16ZXJvICovCisJCQkJCWFkanVzdGVkX21hZ25pdHVkZSArPQorCQkJCQkJYWRqdXN0 ZWRfbWFnbml0dWRlCisJCQkJCQkvIHNjYWxlX2ZyYWN0aW9uOworCQkJCX0gZWxzZSB7CisJCQkJ CS8qIERJVklTSU9OOiByYW5nZSBub24temVybyAqLworCQkJCQlzY2FsZV9mcmFjdGlvbiA9IGRp ZmZlcmVuY2UgLyByYW5nZTsKKwkJCQkJYWRqdXN0ZWRfbWFnbml0dWRlICs9CisJCQkJCQlhZGp1 c3RlZF9tYWduaXR1ZGUKKwkJCQkJCSogc2NhbGVfZnJhY3Rpb247CisJCQkJfQorCQkJCWlmIChh ZGp1c3RlZF9tYWduaXR1ZGUgPiAzMjc2NykKKwkJCQkJYWRqdXN0ZWRfbWFnbml0dWRlID0gMzI3 Njc7CisJCQl9CisJCX0KKwkJY29vcmRzW2NdID0gKGNvb3Jkc1tjXSA8IDApID8KKwkJCQktYWRq dXN0ZWRfbWFnbml0dWRlIDogYWRqdXN0ZWRfbWFnbml0dWRlOworCX0KKworCWlucHV0X3JlcG9y dF9hYnMoZGV2LCBBQlNfWCwgY29vcmRzWzBdKTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJT X1ksIGNvb3Jkc1sxXSk7CisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWCwgY29vcmRzWzJd KTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1JZLCBjb29yZHNbM10pOworfQogCi0JaW50 IGRwYWRfbWFwcGluZzsJCS8qIG1hcCBkLXBhZCB0byBidXR0b25zIG9yIHRvIGF4ZXMgKi8KLQlp bnQgeHR5cGU7CQkJLyogdHlwZSBvZiB4Ym94IGRldmljZSAqLwotfTsKIAogLyoKICAqCXhwYWRf cHJvY2Vzc19wYWNrZXQKQEAgLTI1MywyMSArNTQ1LDEzIEBACiAgKgkgaHR0cDovL2V1Yy5qcC9w ZXJpcGhzL3hib3gtY29udHJvbGxlci5qYS5odG1sCiAgKi8KIAotc3RhdGljIHZvaWQgeHBhZF9w cm9jZXNzX3BhY2tldChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQsIHUxNiBjbWQsIHVuc2lnbmVkIGNo YXIgKmRhdGEpCitzdGF0aWMgdm9pZCB4cGFkX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCB1c2JfeHBh ZCAqeHBhZCwgdTE2IGNtZCwKKwkJdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKIAlzdHJ1Y3QgaW5w dXRfZGV2ICpkZXYgPSB4cGFkLT5kZXY7CiAKLQkvKiBsZWZ0IHN0aWNrICovCi0JaW5wdXRfcmVw b3J0X2FicyhkZXYsIEFCU19YLAotCQkJIChfX3MxNikgbGUxNl90b19jcHVwKChfX2xlMTYgKiko ZGF0YSArIDEyKSkpOwotCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwKLQkJCSB+KF9fczE2 KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgMTQpKSk7Ci0KLQkvKiByaWdodCBzdGlj ayAqLwotCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUlgsCi0JCQkgKF9fczE2KSBsZTE2X3Rv X2NwdXAoKF9fbGUxNiAqKShkYXRhICsgMTYpKSk7Ci0JaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFC U19SWSwKLQkJCSB+KF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgMTgpKSk7 CisJLyogbGVmdCBhbmQgcmlnaHQgc3RpY2tzICovCisJeHBhZF9wcm9jZXNzX3N0aWNrcyh4cGFk LCBkYXRhKTsKIAogCS8qIHRyaWdnZXJzIGxlZnQvcmlnaHQgKi8KIAlpbnB1dF9yZXBvcnRfYWJz KGRldiwgQUJTX1osIGRhdGFbMTBdKTsKQEAgLTMwNSw2ICs1ODksNyBAQAogCWlucHV0X3N5bmMo ZGV2KTsKIH0KIAorCiAvKgogICoJeHBhZDM2MF9wcm9jZXNzX3BhY2tldAogICoKQEAgLTMxNSwx MCArNjAwLDExIEBACiAgKgkJaHR0cDovL3d3dy5mcmVlNjAub3JnL3dpa2kvR2FtZXBhZAogICov CiAKLXN0YXRpYyB2b2lkIHhwYWQzNjBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHVzYl94cGFkICp4 cGFkLAotCQkJCSAgIHUxNiBjbWQsIHVuc2lnbmVkIGNoYXIgKmRhdGEpCitzdGF0aWMgdm9pZCB4 cGFkMzYwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCB1c2JfeHBhZCAqeHBhZCwgdTE2IGNtZCwKKwkJ dW5zaWduZWQgY2hhciAqZGF0YSkKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSB4cGFkLT5k ZXY7CisJaW50IHRyaWdnZXI7CiAKIAkvKiBkaWdpdGFsIHBhZCAqLwogCWlmICh4cGFkLT5kcGFk X21hcHBpbmcgPT0gTUFQX0RQQURfVE9fQVhFUykgewpAQCAtMzUxLDI1ICs2MzcsNzggQEAKIAlp bnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RSLAlkYXRhWzNdICYgMHgwMik7CiAJaW5wdXRfcmVw b3J0X2tleShkZXYsIEJUTl9NT0RFLAlkYXRhWzNdICYgMHgwNCk7CiAKLQkvKiBsZWZ0IHN0aWNr ICovCi0JaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLAotCQkJIChfX3MxNikgbGUxNl90b19j cHVwKChfX2xlMTYgKikoZGF0YSArIDYpKSk7Ci0JaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19Z LAotCQkJIH4oX19zMTYpIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopKGRhdGEgKyA4KSkpOwotCi0J LyogcmlnaHQgc3RpY2sgKi8KLQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1JYLAotCQkJIChf X3MxNikgbGUxNl90b19jcHVwKChfX2xlMTYgKikoZGF0YSArIDEwKSkpOwotCWlucHV0X3JlcG9y dF9hYnMoZGV2LCBBQlNfUlksCi0JCQkgfihfX3MxNikgbGUxNl90b19jcHVwKChfX2xlMTYgKiko ZGF0YSArIDEyKSkpOworCS8qIGxlZnQgYW5kIHJpZ2h0IHN0aWNrcyAqLworCXhwYWRfcHJvY2Vz c19zdGlja3MoeHBhZCwgZGF0YSk7CiAKLQkvKiB0cmlnZ2VycyBsZWZ0L3JpZ2h0ICovCi0JaW5w dXRfcmVwb3J0X2FicyhkZXYsIEFCU19aLCBkYXRhWzRdKTsKLQlpbnB1dF9yZXBvcnRfYWJzKGRl diwgQUJTX1JaLCBkYXRhWzVdKTsKKwkvKiB0cmlnZ2VycyBsZWZ0L3JpZ2h0OiB3aGVuIGZ1bGxf YXhpcyBpcyBub3QgZW5hYmxlZCwgcmVwb3J0IHRoZQorCSAqIGFic29sdXRlIGRhdGEgdmFsdWUg KDAtMjU1KSwgd2hpY2ggd2lsbCBiZSBtYXBwZWQgb250byBbMCwzMjc2N10uCisJICogSWYgZnVs bCBheGlzIGlzIGVuYWJsZWQsIG1hcCB0aGUgZGF0YSB2YWx1ZSBvbnRvIFstMjU1OjI1NV0sIHNv CisJICogdGhhdCB0aGUgaW5wdXQgc3Vic3lzdGVtIG1hcHMgaXQgb250byBbLTMyNzY3OjMyNzY3 XS4gKi8KKwl0cmlnZ2VyID0gZGF0YVs0XTsKKwlpZiAoeHBhZC0+bGVmdF90cmlnZ2VyX2Z1bGxf YXhpcykKKwkJdHJpZ2dlciA9ICgyICogdHJpZ2dlcikgLSAyNTU7CisJaW5wdXRfcmVwb3J0X2Fi cyhkZXYsIEFCU19aLCB0cmlnZ2VyKTsKKwl0cmlnZ2VyID0gZGF0YVs1XTsKKwlpZiAoeHBhZC0+ cmlnaHRfdHJpZ2dlcl9mdWxsX2F4aXMpCisJCXRyaWdnZXIgPSAoMiAqIHRyaWdnZXIpIC0gMjU1 OworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUlosIHRyaWdnZXIpOwogCiAJaW5wdXRfc3lu YyhkZXYpOwogfQogCisKK3N0YXRpYyB2b2lkIHhwYWQzNjB3X2lkZW50aWZ5X2NvbnRyb2xsZXIo c3RydWN0IHVzYl94cGFkICp4cGFkKQoreworCWludCBpOworCXVuc2lnbmVkIGNoYXIgKmRhdGEg PSB4cGFkLT5pZF9wYWNrZXQ7CisKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCXNucHJpbnRm KHhwYWQtPmNvbnRyb2xsZXJfdW5pcXVlX2lkLCAxNywKKwkJIiUwMnglMDJ4JTAyeCUwMnglMDJ4 JTAyeCUwMnglMDJ4IiwKKwkJZGF0YVs4XSwgZGF0YVs5XSwgZGF0YVsxMF0sIGRhdGFbMTFdLCBk YXRhWzEyXSwgZGF0YVsxM10sCisJCWRhdGFbMTRdLCBkYXRhWzE1XSk7CisKKwkvKiBJZGVudGlm eSBjb250cm9sbGVyIHR5cGUgKi8KKwl4cGFkLT5jb250cm9sbGVyX3R5cGUgPSBYQ09OVFJPTExF Ul9UWVBFX09USEVSOworCWZvciAoaSA9IDA7IHczNjBfaWRbaV0uaWRfYnl0ZXM7IGkrKykgewor CQlpZiAoIW1lbWNtcChkYXRhICsgMjIsICZ3MzYwX2lkW2ldLmlkX2J5dGVzLCA0KSkgeworCQkJ eHBhZC0+Y29udHJvbGxlcl90eXBlID0KKwkJCQl3MzYwX2lkW2ldLmNvbnRyb2xsZXJfdHlwZTsK KwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHhwYWQtPmNvbnRyb2xsZXJfdHlwZSA9PSBYQ09O VFJPTExFUl9UWVBFX09USEVSKQorCQlwcmludGsoS0VSTl9JTkZPICJ4cGFkOiB1bmtub3duIHdp cmVsZXNzIGNvbnRyb2xsZXI6ICIKKwkJCSIlMDJ4JTAyeCAlMDJ4JTAyeFxuIiwgZGF0YVsyMl0s IGRhdGFbMjNdLCBkYXRhWzI0XSwKKwkJCWRhdGFbMjVdKTsKK30KKworCisvKgorICoJeHBhZF93 b3JrX2NvbnRyb2xsZXIKKyAqCisgKglTdWJtaXRzIGNvbW1hbmQgdG8gc2V0IHBhZCBudW1iZXIg b24gTEVEIGRpc3BsYXkgb2Ygd2lyZWxlc3MgMzYwCisgKgljb250cm9sbGVycywgYXMgd2VsbCBh cyBvbmxpbmUvb2ZmbGluZSBldmVudC4gVGhlIHNoYXJlZCB3b3JrcXVldWUKKyAqICAgICAgaXMg dXNlZCBmb3IgdGhpcyBwdXJwb3NlLCBzbyB0aGF0IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpcyBr ZXB0IHNob3J0LgorICovCisKK3N0YXRpYyB2b2lkIHhwYWRfd29ya19jb250cm9sbGVyKHN0cnVj dCB3b3JrX3N0cnVjdCAqdykKK3sKKwlzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQgPSBjb250YWluZXJf b2Yodywgc3RydWN0IHVzYl94cGFkLCB3b3JrKTsKKwlpZiAoeHBhZC0+Y29udHJvbGxlcl9wcmVz ZW50KSB7CisJCXhwYWQzNjB3X2lkZW50aWZ5X2NvbnRyb2xsZXIoeHBhZCk7CisJCXhwYWRfaW5p dF9jb250cm9sbGVyKHhwYWQpOworCQl4cGFkX3NlbmRfbGVkX2NvbW1hbmQoeHBhZCwgeHBhZC0+ Y29udHJvbGxlcl9udW1iZXIgKyAxKTsKKwkJa29iamVjdF91ZXZlbnQoJnhwYWQtPmRldi0+ZGV2 LmtvYmosIEtPQkpfT05MSU5FKTsKKwl9IGVsc2UgeworCQlrb2JqZWN0X3VldmVudCgmeHBhZC0+ ZGV2LT5kZXYua29iaiwgS09CSl9PRkZMSU5FKTsKKwl9Cit9CisKKwogLyoKICAqIHhwYWQzNjB3 X3Byb2Nlc3NfcGFja2V0CiAgKgpAQCAtMzc5LDMwICs3MTgsNTcgQEAKICAqIEJ5dGUuQml0CiAg KiAwMC4xIC0gU3RhdHVzIGNoYW5nZTogVGhlIGNvbnRyb2xsZXIgb3IgaGVhZHNldCBoYXMgY29u bmVjdGVkL2Rpc2Nvbm5lY3RlZAogICogICAgICAgICAgICAgICAgICAgICAgIEJpdHMgMDEuNyBh bmQgMDEuNiBhcmUgdmFsaWQKKyAqIDAxLmYgLSBTb21lIGtpbmQgb2YgdW5pcXVlIGlkZW50aWZp ZXIgbWVzc2FnZSAoc2VlIGFib3ZlKQogICogMDEuNyAtIENvbnRyb2xsZXIgcHJlc2VudAogICog MDEuNiAtIEhlYWRzZXQgcHJlc2VudAogICogMDEuMSAtIFBhZCBzdGF0ZSAoQnl0ZXMgNCspIHZh bGlkCiAgKgogICovCiAKLXN0YXRpYyB2b2lkIHhwYWQzNjB3X3Byb2Nlc3NfcGFja2V0KHN0cnVj dCB1c2JfeHBhZCAqeHBhZCwgdTE2IGNtZCwgdW5zaWduZWQgY2hhciAqZGF0YSkKK3N0YXRpYyB2 b2lkIHhwYWQzNjB3X3Byb2Nlc3NfcGFja2V0KHN0cnVjdCB1c2JfeHBhZCAqeHBhZCwgdTE2IGNt ZCwKKwkJdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKKwlpbnQgcGFkbnVtID0gMDsKKwogCS8qIFBy ZXNlbmNlIGNoYW5nZSAqLwogCWlmIChkYXRhWzBdICYgMHgwOCkgeworCQlwYWRudW0gPSB4cGFk LT5jb250cm9sbGVyX251bWJlcjsKIAkJaWYgKGRhdGFbMV0gJiAweDgwKSB7Ci0JCQl4cGFkLT5w YWRfcHJlc2VudCA9IDE7Ci0JCQl1c2Jfc3VibWl0X3VyYih4cGFkLT5idWxrX291dCwgR0ZQX0FU T01JQyk7Ci0JCX0gZWxzZQotCQkJeHBhZC0+cGFkX3ByZXNlbnQgPSAwOworCQkJLyogaWdub3Jl IGR1cGxpY2F0ZXMgKi8KKwkJCWlmICgheHBhZC0+Y29udHJvbGxlcl9wcmVzZW50KSB7CisJCQkJ eHBhZC0+Y29udHJvbGxlcl9wcmVzZW50ID0gMTsKKwkJCQkvKnNjaGVkdWxlX3dvcmsoJnhwYWQt PndvcmspOyovCisJCQkJLyogV2FpdCBmb3IgaWQgcGFja2V0IGJlZm9yZSBzZXR0aW5nCisJCQkJ ICogY29udHJvbGxlciB0eXBlIGFuZCBMRURzICovCisJCQl9CisJCX0gZWxzZSB7CisJCQl4cGFk LT5jb250cm9sbGVyX3ByZXNlbnQgPSAwOworCQkJeHBhZC0+Y29udHJvbGxlcl91bmlxdWVfaWRb MF0gPSAnXDAnOworCQkJeHBhZC0+Y29udHJvbGxlcl90eXBlID0gWENPTlRST0xMRVJfVFlQRV9O T05FOworCQkJLyogV2UgZG8gTk9UIGZsdXNoIHRoZSBzaGFyZWQgd29ya3F1ZXVlIGhlcmUsIGJl Y2F1c2UKKwkJCSAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0IGhh bmRsZXIuCisJCQkgKiBJZiB0aGUgY29udHJvbGxlciBoYXMgZGlzY29ubmVjdGVkIGZyb20gdGhl IHJlY2VpdmVyLAorCQkJICogdGhlIHdvcnN0IHRoYXQgd2lsbCBoYXBwZW4gZnJvbSB0aGUgd29y ayB0YXNrIHJ1bm5pbmcKKwkJCSAqIGlzIHRoYXQgYSBwYWNrZXQgd2lsbCBiZSB0cmFuc21pdHRl ZCBmcm9tIHRoZQorCQkJICogcmVjZWl2ZXIgdG8gYSBub24tbGlzdGVuaW5nIGNvbnRyb2xsZXIK KwkJCSAqLworCQl9CiAJfQogCi0JLyogVmFsaWQgcGFkIGRhdGEgKi8KLQlpZiAoIShkYXRhWzFd ICYgMHgxKSkKLQkJcmV0dXJuOwotCi0JeHBhZDM2MF9wcm9jZXNzX3BhY2tldCh4cGFkLCBjbWQs ICZkYXRhWzRdKTsKKwkvKiBQcm9jZXNzIHBhY2tldHMgYWNjb3JkaW5nIHRvIHR5cGUgKi8KKwlp ZiAoZGF0YVsxXSA9PSAweDBmKSB7CisJCWlmICgheHBhZC0+Y29udHJvbGxlcl91bmlxdWVfaWRb MF0pIHsKKwkJCWlmICh4cGFkLT5pZF9wYWNrZXQpIHsKKwkJCQltZW1jcHkoeHBhZC0+aWRfcGFj a2V0LCBkYXRhLCAyOSk7CisJCQkJc2NoZWR1bGVfd29yaygmeHBhZC0+d29yayk7CisJCQl9CisJ CX0KKwl9IGVsc2UgaWYgKGRhdGFbMV0gJiAweDEpIHsKKwkJeHBhZDM2MF9wcm9jZXNzX3BhY2tl dCh4cGFkLCBjbWQsICZkYXRhWzRdKTsKKwl9CiB9CiAKKwogc3RhdGljIHZvaWQgeHBhZF9pcnFf aW4oc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1c2JfeHBhZCAqeHBhZCA9IHVyYi0+Y29u dGV4dDsKQEAgLTQzOSwzMCArODA1LDIyIEBACiAJfQogCiBleGl0OgotCXJldHZhbCA9IHVzYl9z dWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVy YiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJldHZhbCkKLQkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3Vy YiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQllcnIoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFp bGVkIHdpdGggcmVzdWx0ICVkIiwKIAkJICAgICBfX2Z1bmNfXywgcmV0dmFsKTsKIH0KIAotc3Rh dGljIHZvaWQgeHBhZF9idWxrX291dChzdHJ1Y3QgdXJiICp1cmIpCi17Ci0Jc3dpdGNoICh1cmIt PnN0YXR1cykgewotCWNhc2UgMDoKLQkJLyogc3VjY2VzcyAqLwotCQlicmVhazsKLQljYXNlIC1F Q09OTlJFU0VUOgotCWNhc2UgLUVOT0VOVDoKLQljYXNlIC1FU0hVVERPV046Ci0JCS8qIHRoaXMg dXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCi0JCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcg ZG93biB3aXRoIHN0YXR1czogJWQiLCBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOwotCQlicmVhazsK LQlkZWZhdWx0OgotCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIs IF9fZnVuY19fLCB1cmItPnN0YXR1cyk7Ci0JfQotfQorCisvKiBlbmQgaW5wdXQgc2VjdGlvbiAq LworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJUlEgb3V0cHV0IHNlY3Rpb246IHByZXNl bnQgaW4gb2JqZWN0IGNvZGUgb25seSBpZiB0aGUgZm9yY2UgZmVlZGJhY2sgb3IKKyAqIExFRCBp bnRlcmZhY2UgaXMgZW5hYmxlZC4KKyAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tf WFBBRF9GRikgfHwgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfWFBBRF9MRURTKQorCiBzdGF0aWMg dm9pZCB4cGFkX2lycV9vdXQoc3RydWN0IHVyYiAqdXJiKQogewogCWludCByZXR2YWwsIHN0YXR1 czsKQEAgLTQ3MCwyMCArODI4LDIwIEBACiAJc3RhdHVzID0gdXJiLT5zdGF0dXM7CiAKIAlzd2l0 Y2ggKHN0YXR1cykgewotCQljYXNlIDA6CisJY2FzZSAwOgogCQkvKiBzdWNjZXNzICovCiAJCWJy ZWFrOwotCQljYXNlIC1FQ09OTlJFU0VUOgotCQljYXNlIC1FTk9FTlQ6Ci0JCWNhc2UgLUVTSFVU RE9XTjoKLQkJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCi0JCQlkYmco IiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwKLQkJCQlfX2Z1bmNfXywg c3RhdHVzKTsKLQkJCXJldHVybjsKLQkJZGVmYXVsdDoKLQkJCWRiZygiJXMgLSBub256ZXJvIHVy YiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKLQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKLQkJCWdvdG8g ZXhpdDsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERP V046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMg LSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLAorCQkJX19mdW5jX18sIHN0YXR1 cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVz IHJlY2VpdmVkOiAlZCIsCisJCQlfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZ290byBleGl0OwogCX0K IAogZXhpdDoKQEAgLTQ5MywxMiArODUxLDEzIEBACiAJCSAgICBfX2Z1bmNfXywgcmV0dmFsKTsK IH0KIAorCiBzdGF0aWMgaW50IHhwYWRfaW5pdF9vdXRwdXQoc3RydWN0IHVzYl9pbnRlcmZhY2Ug KmludGYsIHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkKIHsKIAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rl c2NyaXB0b3IgKmVwX2lycV9vdXQ7CiAJaW50IGVycm9yID0gLUVOT01FTTsKIAotCWlmICh4cGFk LT54dHlwZSAhPSBYVFlQRV9YQk9YMzYwKQorCWlmICgoeHBhZC0+eHR5cGUgIT0gWFRZUEVfWEJP WDM2MCkgJiYgKHhwYWQtPnh0eXBlICE9IFhUWVBFX1hCT1gzNjBXKSkKIAkJcmV0dXJuIDA7CiAK IAl4cGFkLT5vZGF0YSA9IHVzYl9idWZmZXJfYWxsb2MoeHBhZC0+dWRldiwgWFBBRF9QS1RfTEVO LApAQCAtNTE0LDcgKzg3Myw4IEBACiAKIAllcF9pcnFfb3V0ID0gJmludGYtPmN1cl9hbHRzZXR0 aW5nLT5lbmRwb2ludFsxXS5kZXNjOwogCXVzYl9maWxsX2ludF91cmIoeHBhZC0+aXJxX291dCwg eHBhZC0+dWRldiwKLQkJCSB1c2Jfc25kaW50cGlwZSh4cGFkLT51ZGV2LCBlcF9pcnFfb3V0LT5i RW5kcG9pbnRBZGRyZXNzKSwKKwkJCSB1c2Jfc25kaW50cGlwZSh4cGFkLT51ZGV2LAorCQkJCWVw X2lycV9vdXQtPmJFbmRwb2ludEFkZHJlc3MpLAogCQkJIHhwYWQtPm9kYXRhLCBYUEFEX1BLVF9M RU4sCiAJCQkgeHBhZF9pcnFfb3V0LCB4cGFkLCBlcF9pcnFfb3V0LT5iSW50ZXJ2YWwpOwogCXhw YWQtPmlycV9vdXQtPnRyYW5zZmVyX2RtYSA9IHhwYWQtPm9kYXRhX2RtYTsKQEAgLTUyNiw0NSAr ODg2LDgyIEBACiAgZmFpbDE6CXJldHVybiBlcnJvcjsKIH0KIAorCiBzdGF0aWMgdm9pZCB4cGFk X3N0b3Bfb3V0cHV0KHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkKIHsKLQlpZiAoeHBhZC0+eHR5cGUg PT0gWFRZUEVfWEJPWDM2MCkKKwlpZiAoKHhwYWQtPnh0eXBlID09IFhUWVBFX1hCT1gzNjApIHx8 ICh4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YMzYwVykpCiAJCXVzYl9raWxsX3VyYih4cGFkLT5p cnFfb3V0KTsKIH0KIAorCiBzdGF0aWMgdm9pZCB4cGFkX2RlaW5pdF9vdXRwdXQoc3RydWN0IHVz Yl94cGFkICp4cGFkKQogewotCWlmICh4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YMzYwKSB7CisJ aWYgKCh4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YMzYwKSB8fCAoeHBhZC0+eHR5cGUgPT0gWFRZ UEVfWEJPWDM2MFcpKSB7CiAJCXVzYl9mcmVlX3VyYih4cGFkLT5pcnFfb3V0KTsKIAkJdXNiX2J1 ZmZlcl9mcmVlKHhwYWQtPnVkZXYsIFhQQURfUEtUX0xFTiwKIAkJCQl4cGFkLT5vZGF0YSwgeHBh ZC0+b2RhdGFfZG1hKTsKIAl9CiB9CisKICNlbHNlCi1zdGF0aWMgaW50IHhwYWRfaW5pdF9vdXRw dXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkgeyBy ZXR1cm4gMDsgfQorLyogRHVtbXkgaW1wbGVtZW50YXRpb25zIGZvciB4cGFkX3Byb2JlIGFuZCB4 cGFkX2Rpc2Nvbm5lY3QgKi8KK3N0YXRpYyBpbnQgeHBhZF9pbml0X291dHB1dChzdHJ1Y3QgdXNi X2ludGVyZmFjZSAqaW50Ziwgc3RydWN0IHVzYl94cGFkICp4cGFkKQorCXsgcmV0dXJuIDA7IH0K IHN0YXRpYyB2b2lkIHhwYWRfZGVpbml0X291dHB1dChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpIHt9 CiBzdGF0aWMgdm9pZCB4cGFkX3N0b3Bfb3V0cHV0KHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkge30K ICNlbmRpZgogCisvKiBlbmQgb3V0cHV0IHNlY3Rpb24gKi8KKworLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLworCisvKiBGb3JjZSBmZWVkYmFjayAocnVtYmxlIGVmZmVjdCkgc2VjdGlvbiwgZGVwZW5k cyBvbiBDT05GSUdfSk9ZU1RJQ0tfWFBBRF9GRiAqLworCiAjaWZkZWYgQ09ORklHX0pPWVNUSUNL X1hQQURfRkYKKworLyogUnVtYmxlIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGNvbnRyb2xsZXJzIGZv bGxvd3MgcHJvdG9jb2wgZGVzY3JpcHRpb24KKyAqIGZyb20geGJveGRydiB1c2Vyc3BhY2UgZHJp dmVyOgorICogICAgICAgaHR0cDovL3Bpbmd1cy5zZXVsLm9yZy9+Z3J1bWJlbC94Ym94ZHJ2Lwor ICovCiBzdGF0aWMgaW50IHhwYWRfcGxheV9lZmZlY3Qoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2 b2lkICpkYXRhLAogCQkJICAgIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKIHsKIAlzdHJ1Y3Qg dXNiX3hwYWQgKnhwYWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwogCisJaWYgKCF4cGFkLT5y dW1ibGVfZW5hYmxlKQorCQlyZXR1cm4gMDsKKwogCWlmIChlZmZlY3QtPnR5cGUgPT0gRkZfUlVN QkxFKSB7CiAJCV9fdTE2IHN0cm9uZyA9IGVmZmVjdC0+dS5ydW1ibGUuc3Ryb25nX21hZ25pdHVk ZTsKIAkJX191MTYgd2VhayA9IGVmZmVjdC0+dS5ydW1ibGUud2Vha19tYWduaXR1ZGU7Ci0JCXhw YWQtPm9kYXRhWzBdID0gMHgwMDsKLQkJeHBhZC0+b2RhdGFbMV0gPSAweDA4OwotCQl4cGFkLT5v ZGF0YVsyXSA9IDB4MDA7Ci0JCXhwYWQtPm9kYXRhWzNdID0gc3Ryb25nIC8gMjU2OwotCQl4cGFk LT5vZGF0YVs0XSA9IHdlYWsgLyAyNTY7Ci0JCXhwYWQtPm9kYXRhWzVdID0gMHgwMDsKLQkJeHBh ZC0+b2RhdGFbNl0gPSAweDAwOwotCQl4cGFkLT5vZGF0YVs3XSA9IDB4MDA7Ci0JCXhwYWQtPmly cV9vdXQtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSA4OworCQltdXRleF9sb2NrKCZ4cGFkLT5v ZGF0YV9tdXRleCk7CisJCWlmICh4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YMzYwVykgeworCQkJ eHBhZC0+b2RhdGFbMF0gPSAweDAwOworCQkJeHBhZC0+b2RhdGFbMV0gPSAweDAxOworCQkJeHBh ZC0+b2RhdGFbMl0gPSAweDBmOworCQkJeHBhZC0+b2RhdGFbM10gPSAweGMwOworCQkJeHBhZC0+ b2RhdGFbNF0gPSAweDAwOworCQkJeHBhZC0+b2RhdGFbNV0gPSBzdHJvbmcgLyAyNTY7CisJCQl4 cGFkLT5vZGF0YVs2XSA9IHdlYWsgLyAyNTY7CisJCQl4cGFkLT5vZGF0YVs3XSA9IDB4MDA7CisJ CQl4cGFkLT5vZGF0YVs4XSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVs5XSA9IDB4MDA7CisJCQl4 cGFkLT5vZGF0YVsxMF0gPSAweDAwOworCQkJeHBhZC0+b2RhdGFbMTFdID0gMHgwMDsKKwkJCXhw YWQtPmlycV9vdXQtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAxMjsKKwkJfSBlbHNlIHsKKwkJ CXhwYWQtPm9kYXRhWzBdID0gMHgwMDsKKwkJCXhwYWQtPm9kYXRhWzFdID0gMHgwODsKKwkJCXhw YWQtPm9kYXRhWzJdID0gMHgwMDsKKwkJCXhwYWQtPm9kYXRhWzNdID0gc3Ryb25nIC8gMjU2Owor CQkJeHBhZC0+b2RhdGFbNF0gPSB3ZWFrIC8gMjU2OworCQkJeHBhZC0+b2RhdGFbNV0gPSAweDAw OworCQkJeHBhZC0+b2RhdGFbNl0gPSAweDAwOworCQkJeHBhZC0+b2RhdGFbN10gPSAweDAwOwor CQkJeHBhZC0+aXJxX291dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDg7CisJCX0KIAkJdXNi X3N1Ym1pdF91cmIoeHBhZC0+aXJxX291dCwgR0ZQX0tFUk5FTCk7CisJCW11dGV4X3VubG9jaygm eHBhZC0+b2RhdGFfbXV0ZXgpOwogCX0KIAogCXJldHVybiAwOwpAQCAtNTcyLDcgKzk2OSw3IEBA CiAKIHN0YXRpYyBpbnQgeHBhZF9pbml0X2ZmKHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkKIHsKLQlp ZiAoeHBhZC0+eHR5cGUgIT0gWFRZUEVfWEJPWDM2MCkKKwlpZiAoKHhwYWQtPnh0eXBlICE9IFhU WVBFX1hCT1gzNjApICYmICh4cGFkLT54dHlwZSAhPSBYVFlQRV9YQk9YMzYwVykpCiAJCXJldHVy biAwOwogCiAJaW5wdXRfc2V0X2NhcGFiaWxpdHkoeHBhZC0+ZGV2LCBFVl9GRiwgRkZfUlVNQkxF KTsKQEAgLTU4MSwyNiArOTc4LDQ5IEBACiB9CiAKICNlbHNlCisvKiBkdW1teSBpbXBsZW1lbnRh dGlvbiBmb3IgeHBhZF9wcm9iZSAqLwogc3RhdGljIGludCB4cGFkX2luaXRfZmYoc3RydWN0IHVz Yl94cGFkICp4cGFkKSB7IHJldHVybiAwOyB9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklH X0pPWVNUSUNLX1hQQURfTEVEUykKLSNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAKLXN0cnVjdCB4 cGFkX2xlZCB7Ci0JY2hhciBuYW1lWzE2XTsKLQlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZF9jZGV2 OwotCXN0cnVjdCB1c2JfeHBhZCAqeHBhZDsKLX07CisvKiBlbmQgZm9yY2UgZmVlZGJhY2sgc2Vj dGlvbiAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIExFRCBoYW5kbGluZyBzZWN0 aW9uOiBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgcmluZyBvZiBMRURzIG9uIHRoZSAzNjAKKyAq IGNvbnRyb2xsZXJzLiAqLworCisjaWZkZWYgQ09ORklHX0pPWVNUSUNLX1hQQURfTEVEUworCiAK Ky8qIFhCb3ggMzYwIHdpcmVsZXNzIGNvbnRyb2xsZXIgZm9sbG93cyBwcm90b2NvbCBmcm9tIHhi b3hkcnYgdXNlcnNwYWNlCisgKiBkcml2ZXI6CisgKiAgICBodHRwOi8vcGluZ3VzLnNldWwub3Jn L35ncnVtYmVsL3hib3hkcnYvCisgKi8KIHN0YXRpYyB2b2lkIHhwYWRfc2VuZF9sZWRfY29tbWFu ZChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQsIGludCBjb21tYW5kKQogewogCWlmIChjb21tYW5kID49 IDAgJiYgY29tbWFuZCA8IDE0KSB7CiAJCW11dGV4X2xvY2soJnhwYWQtPm9kYXRhX211dGV4KTsK LQkJeHBhZC0+b2RhdGFbMF0gPSAweDAxOwotCQl4cGFkLT5vZGF0YVsxXSA9IDB4MDM7Ci0JCXhw YWQtPm9kYXRhWzJdID0gY29tbWFuZDsKLQkJeHBhZC0+aXJxX291dC0+dHJhbnNmZXJfYnVmZmVy X2xlbmd0aCA9IDM7CisJCWlmICh4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YMzYwVykgeworCQkJ eHBhZC0+b2RhdGFbMF0gPSAweDAwOworCQkJeHBhZC0+b2RhdGFbMV0gPSAweDAwOworCQkJeHBh ZC0+b2RhdGFbMl0gPSAweDA4OworCQkJeHBhZC0+b2RhdGFbM10gPSAweDQwICsgKGNvbW1hbmQg JSAweDBlKTsKKwkJCXhwYWQtPm9kYXRhWzRdID0gMHgwMDsKKwkJCXhwYWQtPm9kYXRhWzVdID0g MHgwMDsKKwkJCXhwYWQtPm9kYXRhWzZdID0gMHgwMDsKKwkJCXhwYWQtPm9kYXRhWzddID0gMHgw MDsKKwkJCXhwYWQtPm9kYXRhWzhdID0gMHgwMDsKKwkJCXhwYWQtPm9kYXRhWzldID0gMHgwMDsK KwkJCXhwYWQtPm9kYXRhWzEwXSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVsxMV0gPSAweDAwOwor CQkJeHBhZC0+aXJxX291dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDEyOworCQl9IGVsc2Ug eworCQkJeHBhZC0+b2RhdGFbMF0gPSAweDAxOworCQkJeHBhZC0+b2RhdGFbMV0gPSAweDAzOwor CQkJeHBhZC0+b2RhdGFbMl0gPSBjb21tYW5kOworCQkJeHBhZC0+aXJxX291dC0+dHJhbnNmZXJf YnVmZmVyX2xlbmd0aCA9IDM7CisJCX0KIAkJdXNiX3N1Ym1pdF91cmIoeHBhZC0+aXJxX291dCwg R0ZQX0tFUk5FTCk7CiAJCW11dGV4X3VubG9jaygmeHBhZC0+b2RhdGFfbXV0ZXgpOwogCX0KQEAg LTYxNSw2ICsxMDM1LDcgQEAKIAl4cGFkX3NlbmRfbGVkX2NvbW1hbmQoeHBhZF9sZWQtPnhwYWQs IHZhbHVlKTsKIH0KIAorCiBzdGF0aWMgaW50IHhwYWRfbGVkX3Byb2JlKHN0cnVjdCB1c2JfeHBh ZCAqeHBhZCkKIHsKIAlzdGF0aWMgYXRvbWljX3QgbGVkX3NlcQk9IEFUT01JQ19JTklUKDApOwpA QCAtNjIzLDcgKzEwNDQsNyBAQAogCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2OwogCWlu dCBlcnJvcjsKIAotCWlmICh4cGFkLT54dHlwZSAhPSBYVFlQRV9YQk9YMzYwKQorCWlmICgoeHBh ZC0+eHR5cGUgIT0gWFRZUEVfWEJPWDM2MCkgJiYgKHhwYWQtPnh0eXBlICE9IFhUWVBFX1hCT1gz NjBXKSkKIAkJcmV0dXJuIDA7CiAKIAl4cGFkLT5sZWQgPSBsZWQgPSBremFsbG9jKHNpemVvZihz dHJ1Y3QgeHBhZF9sZWQpLCBHRlBfS0VSTkVMKTsKQEAgLTY2NCwxNyArMTA4NSwyMyBAQAogCX0K IH0KICNlbHNlCisvKiBkdW1taWVzIGZvciB4cGFkX3Byb2JlIGFuZCB4cGFkX2Rpc2Nvbm5lY3Qg Ki8KIHN0YXRpYyBpbnQgeHBhZF9sZWRfcHJvYmUoc3RydWN0IHVzYl94cGFkICp4cGFkKSB7IHJl dHVybiAwOyB9CiBzdGF0aWMgdm9pZCB4cGFkX2xlZF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfeHBh ZCAqeHBhZCkgeyB9CiAjZW5kaWYKIAorLyogZW5kIExFRCBzZWN0aW9uICovCisKKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKworLyogTW9kdWxlIGFuZCBkZXZpY2UgZnVuY3Rpb25zICovCiAKIHN0 YXRpYyBpbnQgeHBhZF9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgdXNi X3hwYWQgKnhwYWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJLyogVVJCIHdhcyBzdWJt aXR0ZWQgaW4gcHJvYmUgKi8KLQlpZih4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YMzYwVykKKwlp ZiAoeHBhZC0+eHR5cGUgPT0gWFRZUEVfWEJPWDM2MFcpCiAJCXJldHVybiAwOwogCiAJeHBhZC0+ aXJxX2luLT5kZXYgPSB4cGFkLT51ZGV2OwpAQCAtNjg4LDcgKzExMTUsNyBAQAogewogCXN0cnVj dCB1c2JfeHBhZCAqeHBhZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CiAKLQlpZih4cGFkLT54 dHlwZSAhPSBYVFlQRV9YQk9YMzYwVykKKwlpZiAoeHBhZC0+eHR5cGUgIT0gWFRZUEVfWEJPWDM2 MFcpCiAJCXVzYl9raWxsX3VyYih4cGFkLT5pcnFfaW4pOwogCXhwYWRfc3RvcF9vdXRwdXQoeHBh ZCk7CiB9CkBAIC03MDYsNyArMTEzMywxMCBAQAogCQlicmVhazsKIAljYXNlIEFCU19aOgogCWNh c2UgQUJTX1JaOgkvKiB0aGUgdHJpZ2dlcnMgKi8KLQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5w dXRfZGV2LCBhYnMsIDAsIDI1NSwgMCwgMCk7CisJCS8qIFRyaWdnZXJzIGhhdmUgYSBwaG9ueSAt MjU1IHRvIDI1NSByYW5nZS4gTm9ybWFsbHksIG9ubHkKKwkJICogMCB0byAyNTUgd2lsbCBiZSBy ZXBvcnRlZCAoKyBheGlzKSwgdW5sZXNzIGZ1bGxfdHJpZ2dlcl9heGlzCisJCSAqIGlzIHNldCwg aW4gd2hpY2ggY2FzZSAtMjU1IHRvIDI1NSB3aWxsIGJlIHJlcG9ydGVkLiAqLworCQlpbnB1dF9z ZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIGFicywgLTI1NSwgMjU1LCAwLCAwKTsKIAkJYnJlYWs7 CiAJY2FzZSBBQlNfSEFUMFg6CiAJY2FzZSBBQlNfSEFUMFk6CS8qIHRoZSBkLXBhZCAob25seSBp ZiBNQVBfRFBBRF9UT19BWEVTKSAqLwpAQCAtNzE1LDE4ICsxMTQ1LDIyIEBACiAJfQogfQogCi1z dGF0aWMgaW50IHhwYWRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0 cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBpbnQgeHBhZF9wcm9iZShzdHJ1Y3QgdXNi X2ludGVyZmFjZSAqaW50ZiwKKwkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewog CXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAlz dHJ1Y3QgdXNiX3hwYWQgKnhwYWQ7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwogCXN0 cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBfaXJxX2luOworCWludCBjb250cm9sbGVy X3R5cGU7CiAJaW50IGk7CiAJaW50IGVycm9yID0gLUVOT01FTTsKIAogCWZvciAoaSA9IDA7IHhw YWRfZGV2aWNlW2ldLmlkVmVuZG9yOyBpKyspIHsKLQkJaWYgKChsZTE2X3RvX2NwdSh1ZGV2LT5k ZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSB4cGFkX2RldmljZVtpXS5pZFZlbmRvcikgJiYKLQkJICAg IChsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0geHBhZF9kZXZpY2Vb aV0uaWRQcm9kdWN0KSkKKwkJaWYgKChsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVu ZG9yKSA9PQorCQkJCQkJeHBhZF9kZXZpY2VbaV0uaWRWZW5kb3IpICYmCisJCQkJKGxlMTZfdG9f Y3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PQorCQkJCQkJeHBhZF9kZXZpY2VbaV0u aWRQcm9kdWN0KSkKIAkJCWJyZWFrOwogCX0KIApAQCAtNzQ3LDExICsxMTgxLDE0IEBACiAJeHBh ZC0+dWRldiA9IHVkZXY7CiAJeHBhZC0+ZHBhZF9tYXBwaW5nID0geHBhZF9kZXZpY2VbaV0uZHBh ZF9tYXBwaW5nOwogCXhwYWQtPnh0eXBlID0geHBhZF9kZXZpY2VbaV0ueHR5cGU7CisJY29udHJv bGxlcl90eXBlID0geHBhZF9kZXZpY2VbaV0uY29udHJvbGxlcl90eXBlOwogCWlmICh4cGFkLT5k cGFkX21hcHBpbmcgPT0gTUFQX0RQQURfVU5LTk9XTikKIAkJeHBhZC0+ZHBhZF9tYXBwaW5nID0g IWRwYWRfdG9fYnV0dG9uczsKIAlpZiAoeHBhZC0+eHR5cGUgPT0gWFRZUEVfVU5LTk9XTikgewot CQlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZUNsYXNzID09IFVTQl9D TEFTU19WRU5ET1JfU1BFQykgewotCQkJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJ bnRlcmZhY2VQcm90b2NvbCA9PSAxMjkpCisJCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVz Yy5iSW50ZXJmYWNlQ2xhc3MgPT0KKwkJCQkJVVNCX0NMQVNTX1ZFTkRPUl9TUEVDKSB7CisJCQlp ZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZVByb3RvY29sID09CisJCQkJ CTEyOSkKIAkJCQl4cGFkLT54dHlwZSA9IFhUWVBFX1hCT1gzNjBXOwogCQkJZWxzZQogCQkJCXhw YWQtPnh0eXBlID0gWFRZUEVfWEJPWDM2MDsKQEAgLTc4MywxNiArMTIyMCwxOCBAQAogCWVsc2UK IAkJZm9yIChpID0gMDsgeHBhZF9idG5baV0gPj0gMDsgaSsrKQogCQkJc2V0X2JpdCh4cGFkX2J0 bltpXSwgaW5wdXRfZGV2LT5rZXliaXQpOwotCWlmICh4cGFkLT5kcGFkX21hcHBpbmcgPT0gTUFQ X0RQQURfVE9fQlVUVE9OUykKKwlpZiAoeHBhZC0+ZHBhZF9tYXBwaW5nID09IE1BUF9EUEFEX1RP X0JVVFRPTlMpIHsKIAkJZm9yIChpID0gMDsgeHBhZF9idG5fcGFkW2ldID49IDA7IGkrKykKIAkJ CXNldF9iaXQoeHBhZF9idG5fcGFkW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJfQogCiAJLyog c2V0IHVwIGF4ZXMgKi8KIAlmb3IgKGkgPSAwOyB4cGFkX2Fic1tpXSA+PSAwOyBpKyspCiAJCXhw YWRfc2V0X3VwX2FicyhpbnB1dF9kZXYsIHhwYWRfYWJzW2ldKTsKLQlpZiAoeHBhZC0+ZHBhZF9t YXBwaW5nID09IE1BUF9EUEFEX1RPX0FYRVMpCisJaWYgKHhwYWQtPmRwYWRfbWFwcGluZyA9PSBN QVBfRFBBRF9UT19BWEVTKSB7CiAJCWZvciAoaSA9IDA7IHhwYWRfYWJzX3BhZFtpXSA+PSAwOyBp KyspCi0JCSAgICB4cGFkX3NldF91cF9hYnMoaW5wdXRfZGV2LCB4cGFkX2Fic19wYWRbaV0pOwor CQkJeHBhZF9zZXRfdXBfYWJzKGlucHV0X2RldiwgeHBhZF9hYnNfcGFkW2ldKTsKKwl9CiAKIAll cnJvciA9IHhwYWRfaW5pdF9vdXRwdXQoaW50ZiwgeHBhZCk7CiAJaWYgKGVycm9yKQpAQCAtODIw LDYgKzEyNTksMTAgQEAKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgeHBhZCk7CiAKKwl4cGFk LT5jb250cm9sbGVyX3R5cGUgPSBjb250cm9sbGVyX3R5cGU7CisJaWYgKGNvbnRyb2xsZXJfdHlw ZSAhPSBYQ09OVFJPTExFUl9UWVBFX05PTkUpCisJCXhwYWRfaW5pdF9jb250cm9sbGVyKHhwYWQp OworCiAJLyoKIAkgKiBTdWJtaXQgdGhlIGludCBVUkIgaW1tZWRpYXRseSByYXRoZXIgdGhhbiB3 YWl0aW5nIGZvciBvcGVuCiAJICogYmVjYXVzZSB3ZSBnZXQgc3RhdHVzIG1lc3NhZ2VzIGZyb20g dGhlIGRldmljZSB3aGV0aGVyCkBAIC04MjgsNDggKzEyNzEsNDMgQEAKIAkgKiB3ZSdyZSB3YWl0 aW5nIGZvci4KIAkgKi8KIAlpZiAoeHBhZC0+eHR5cGUgPT0gWFRZUEVfWEJPWDM2MFcpIHsKKwkJ eHBhZC0+Y29udHJvbGxlcl9wcmVzZW50ID0gMDsKKwkJeHBhZC0+Y29udHJvbGxlcl9udW1iZXIg PQorCQkJKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIgLyAyKSAr IDE7CiAJCXhwYWQtPmlycV9pbi0+ZGV2ID0geHBhZC0+dWRldjsKIAkJZXJyb3IgPSB1c2Jfc3Vi bWl0X3VyYih4cGFkLT5pcnFfaW4sIEdGUF9LRVJORUwpOwogCQlpZiAoZXJyb3IpCi0JCQlnb3Rv IGZhaWw0OwotCi0JCS8qCi0JCSAqIFNldHVwIHRoZSBtZXNzYWdlIHRvIHNldCB0aGUgTEVEcyBv biB0aGUKLQkJICogY29udHJvbGxlciB3aGVuIGl0IHNob3dzIHVwCi0JCSAqLwotCQl4cGFkLT5i dWxrX291dCA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JCWlmKCF4cGFkLT5idWxr X291dCkKIAkJCWdvdG8gZmFpbDU7CisJCXhwYWQtPmlkX3BhY2tldCA9IGt6YWxsb2MoWFBBRF9Q S1RfTEVOICoKKwkJCQkJc2l6ZW9mKHVuc2lnbmVkIGNoYXIpLCBHRlBfS0VSTkVMKTsKKwkJaWYg KCF4cGFkLT5pZF9wYWNrZXQpCisJCQlnb3RvIGZhaWw1OworCX0gZWxzZSB7CisJCXhwYWQtPmNv bnRyb2xsZXJfcHJlc2VudCA9IDE7CisJCXhwYWQtPmNvbnRyb2xsZXJfbnVtYmVyID0gMDsKKwl9 CiAKLQkJeHBhZC0+YmRhdGEgPSBremFsbG9jKFhQQURfUEtUX0xFTiwgR0ZQX0tFUk5FTCk7Ci0J CWlmKCF4cGFkLT5iZGF0YSkKLQkJCWdvdG8gZmFpbDY7Ci0KLQkJeHBhZC0+YmRhdGFbMl0gPSAw eDA4OwotCQlzd2l0Y2ggKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1i ZXIpIHsKLQkJY2FzZSAwOgotCQkJeHBhZC0+YmRhdGFbM10gPSAweDQyOwotCQkJYnJlYWs7Ci0J CWNhc2UgMjoKLQkJCXhwYWQtPmJkYXRhWzNdID0gMHg0MzsKLQkJCWJyZWFrOwotCQljYXNlIDQ6 Ci0JCQl4cGFkLT5iZGF0YVszXSA9IDB4NDQ7Ci0JCQlicmVhazsKLQkJY2FzZSA2OgotCQkJeHBh ZC0+YmRhdGFbM10gPSAweDQ1OwotCQl9Ci0KLQkJZXBfaXJxX2luID0gJmludGYtPmN1cl9hbHRz ZXR0aW5nLT5lbmRwb2ludFsxXS5kZXNjOwotCQl1c2JfZmlsbF9idWxrX3VyYih4cGFkLT5idWxr X291dCwgdWRldiwKLQkJCQl1c2Jfc25kYnVsa3BpcGUodWRldiwgZXBfaXJxX2luLT5iRW5kcG9p bnRBZGRyZXNzKSwKLQkJCQl4cGFkLT5iZGF0YSwgWFBBRF9QS1RfTEVOLCB4cGFkX2J1bGtfb3V0 LCB4cGFkKTsKKwkvKiBTZXQgdXAgZGV2aWNlIGF0dHJpYnV0ZXMgKi8KKwl4cGFkLT5zeXNmc19v ayA9IDE7CisJeHBhZC0+Y29udHJvbGxlcl91bmlxdWVfaWRbMF0gPSAnXDAnOworCWVycm9yID0g c3lzZnNfY3JlYXRlX2dyb3VwKCZpbnB1dF9kZXYtPmRldi5rb2JqLAorCQkJCQkJJnhwYWRfZGVm YXVsdF9hdHRyX2dyb3VwKTsKKwlpZiAoZXJyb3IpIHsKKwkJLyogRHJpdmVyIHdpbGwgd29yayB3 aXRob3V0IHRoZSBzeXNmcyBpbnRlcmZhY2UsIGJ1dCBwYXJhbWV0ZXJzCisJCSAqIHdpbGwgbm90 IGJlIGFkanVzdGFibGUsIHNvIHRoaXMgZmFpbHVyZSBpcyBhIHdhcm5pbmcuICovCisJCXByaW50 ayhLRVJOX1dBUk5JTkcKKwkJCSJ4cGFkOiBzeXNmc19jcmVhdGVfZ3JvdXAgZmFpbGVkIHdpdGgg ZXJyb3IgJWRcbiIsCisJCQllcnJvcik7CisJCXhwYWQtPnN5c2ZzX29rID0gMDsKIAl9CisJCisJ SU5JVF9XT1JLKCZ4cGFkLT53b3JrLCAmeHBhZF93b3JrX2NvbnRyb2xsZXIpOwogCiAJcmV0dXJu IDA7CiAKLSBmYWlsNjoJdXNiX2ZyZWVfdXJiKHhwYWQtPmJ1bGtfb3V0KTsKLSBmYWlsNToJdXNi X2tpbGxfdXJiKHhwYWQtPmlycV9pbik7CisgZmFpbDU6IHVzYl9zZXRfaW50ZmRhdGEoaW50Ziwg TlVMTCk7CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoeHBhZC0+ZGV2KTsKKwl4cGFkX2xlZF9k aXNjb25uZWN0KHhwYWQpOwogIGZhaWw0Ogl1c2JfZnJlZV91cmIoeHBhZC0+aXJxX2luKTsKICBm YWlsMzoJeHBhZF9kZWluaXRfb3V0cHV0KHhwYWQpOwogIGZhaWwyOgl1c2JfYnVmZmVyX2ZyZWUo dWRldiwgWFBBRF9QS1RfTEVOLCB4cGFkLT5pZGF0YSwgeHBhZC0+aWRhdGFfZG1hKTsKQEAgLTg4 MSwzMSArMTMxOSwzMiBAQAogCiBzdGF0aWMgdm9pZCB4cGFkX2Rpc2Nvbm5lY3Qoc3RydWN0IHVz Yl9pbnRlcmZhY2UgKmludGYpCiB7Ci0Jc3RydWN0IHVzYl94cGFkICp4cGFkID0gdXNiX2dldF9p bnRmZGF0YSAoaW50Zik7CisJc3RydWN0IHVzYl94cGFkICp4cGFkID0gdXNiX2dldF9pbnRmZGF0 YShpbnRmKTsKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiAJaWYgKHhwYWQpIHsK KwkJLyogRW5zdXJlIHdlIGRvbid0IGhhdmUgYW55IHBlbmRpbmcgd29yayAqLworCQlmbHVzaF9z Y2hlZHVsZWRfd29yaygpOworCisJCWlmICh4cGFkLT5zeXNmc19vaykKKwkJCXN5c2ZzX3JlbW92 ZV9ncm91cCgmeHBhZC0+ZGV2LT5kZXYua29iaiwKKwkJCQkJCSZ4cGFkX2RlZmF1bHRfYXR0cl9n cm91cCk7CisKIAkJeHBhZF9sZWRfZGlzY29ubmVjdCh4cGFkKTsKIAkJaW5wdXRfdW5yZWdpc3Rl cl9kZXZpY2UoeHBhZC0+ZGV2KTsKIAkJeHBhZF9kZWluaXRfb3V0cHV0KHhwYWQpOwotCQlpZiAo eHBhZC0+eHR5cGUgPT0gWFRZUEVfWEJPWDM2MFcpIHsKLQkJCXVzYl9raWxsX3VyYih4cGFkLT5i dWxrX291dCk7Ci0JCQl1c2JfZnJlZV91cmIoeHBhZC0+YnVsa19vdXQpOworCQlpZiAoeHBhZC0+ eHR5cGUgPT0gWFRZUEVfWEJPWDM2MFcpCiAJCQl1c2Jfa2lsbF91cmIoeHBhZC0+aXJxX2luKTsK LQkJfQogCQl1c2JfZnJlZV91cmIoeHBhZC0+aXJxX2luKTsKIAkJdXNiX2J1ZmZlcl9mcmVlKHhw YWQtPnVkZXYsIFhQQURfUEtUX0xFTiwKIAkJCQl4cGFkLT5pZGF0YSwgeHBhZC0+aWRhdGFfZG1h KTsKKwkJaWYgKHhwYWQtPmlkX3BhY2tldCkKKwkJCWtmcmVlKHhwYWQtPmlkX3BhY2tldCk7CiAJ CWtmcmVlKHhwYWQpOwogCX0KIH0KIAotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHhwYWRfZHJp dmVyID0gewotCS5uYW1lCQk9ICJ4cGFkIiwKLQkucHJvYmUJCT0geHBhZF9wcm9iZSwKLQkuZGlz Y29ubmVjdAk9IHhwYWRfZGlzY29ubmVjdCwKLQkuaWRfdGFibGUJPSB4cGFkX3RhYmxlLAotfTsK KwogCiBzdGF0aWMgaW50IF9faW5pdCB1c2JfeHBhZF9pbml0KHZvaWQpCiB7CkBAIC05MjAsNiAr MTM1OSw3IEBACiAJdXNiX2RlcmVnaXN0ZXIoJnhwYWRfZHJpdmVyKTsKIH0KIAorCiBtb2R1bGVf aW5pdCh1c2JfeHBhZF9pbml0KTsKIG1vZHVsZV9leGl0KHVzYl94cGFkX2V4aXQpOwogCmRpZmYg LXVOciBvcmlnZHJ2L2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5oIG5ld2Rydi9kcml2ZXJz L2lucHV0L2pveXN0aWNrL3hwYWQuaAotLS0gb3JpZ2Rydi9kcml2ZXJzL2lucHV0L2pveXN0aWNr L3hwYWQuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysgbmV3ZHJ2L2Ry aXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5oCTIwMDktMDMtMDIgMjE6MTE6NDUuMDAwMDAwMDAw IC0wNTAwCkBAIC0wLDAgKzEsMzk3IEBACisvKgorICogWGJveCBnYW1lcGFkIGRyaXZlciB3aXRo IFhib3ggMzYwIHdpcmVkL3dpcmVsZXNzIHN1cHBvcnQKKyAqCisgKiBMYXN0IE1vZGlmaWVkOgky IE1hcmNoIDIwMDkKKyAqCQkJTWlrZSBNdXJwaHkgPG1hbXVycGhAY3MuY2xlbXNvbi5lZHU+Cisg KgorICogQ29weXJpZ2h0IChjKSAyMDAyIE1hcmtvIEZyaWVkZW1hbm4gPG1mckBibXgtY2hlbW5p dHouZGU+CisgKiAgICAgICAgICAgICAgIDIwMDQgT2xpdmVyIFNjaHdhcnR6IDxPbGl2ZXIuU2No d2FydHpAZ214LmRlPiwKKyAqICAgICAgICAgICAgICAgICAgICBTdGV2ZW4gVG90aCA8c3RldmVA dG90aC5kZW1vbi5jby51az4sCisgKiAgICAgICAgICAgICAgICAgICAgRnJhbnogTGVobmVyIDxm cmFuekBjYW9zLmF0PiwKKyAqICAgICAgICAgICAgICAgICAgICBJdmFuIEhhd2tlcyA8YmxhY2to YXdrQGl2YW5oYXdrZXMuY29tPgorICogICAgICAgICAgICAgICAyMDA1IERvbWluaWMgQ2VycXVl dHRpIDxiaW5hcnkxMjMwQHlhaG9vLmNvbT4KKyAqICAgICAgICAgICAgICAgMjAwNiBBZGFtIEJ1 Y2hiaW5kZXIgPGFkYW0uYnVjaGJpbmRlckBnbWFpbC5jb20+CisgKiAgICAgICAgICAgICAgIDIw MDcgSmFuIEtyYXRvY2h2aWwgPGhvbnphQGppa29zLmN6PgorICogICAgICAgICAgICAgICAyMDA5 IENsZW1zb24gVW5pdmVyc2l0eQorICoJCSAgICAgIChjb250YWN0OiBNaWtlIE11cnBoeSA8bWFt dXJwaEBjcy5jbGVtc29uLmVkdT4pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisg KiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRh dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEt MTMwNyBVU0EKKyAqCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb246CisgKiAgLSBpbmZv cm1hdGlvbiBmcm9tICAgICBodHRwOi8vZXVjLmpwL3BlcmlwaHMveGJveC1jb250cm9sbGVyLmph Lmh0bWwKKyAqICAtIHRoZSBpRm9yY2UgZHJpdmVyICAgIGRyaXZlcnMvY2hhci9qb3lzdGljay9p Zm9yY2UuYworICogIC0gdGhlIHNrZWxldG9uLWRyaXZlciAgZHJpdmVycy91c2IvdXNiLXNrZWxl dG9uLmMKKyAqICAtIFhib3ggMzYwIGluZm9ybWF0aW9uIGh0dHA6Ly93d3cuZnJlZTYwLm9yZy93 aWtpL0dhbWVwYWQKKyAqICAtIHhib3hkcnYgZG9jcyAgICAgICAgIGh0dHA6Ly9waW5ndXMuc2V1 bC5vcmcvfmdydW1iZWwveGJveGRydi8KKyAqCisgKiBUaGFua3MgdG86CisgKiAgLSBJVE8gVGFr YXl1a2kgZm9yIHByb3ZpZGluZyBlc3NlbnRpYWwgeHBhZCBpbmZvcm1hdGlvbiBvbiBoaXMgd2Vi c2l0ZQorICogIC0gVm9qdGVjaCBQYXZsaWsgICAgIC0gaWZvcmNlIGRyaXZlciAvIGlucHV0IHN1 YnN5c3RlbQorICogIC0gR3JlZyBLcm9haC1IYXJ0bWFuIC0gdXNiLXNrZWxldG9uIGRyaXZlcgor ICogIC0gWEJPWCBMaW51eCBwcm9qZWN0IC0gZXh0cmEgVVNCIGlkJ3MKKyAqCisgKiBUT0RPOgor ICogIC0gZml4ICJhbmFsb2ciIGJ1dHRvbnMgKHJlcG9ydGVkIGFzIGRpZ2l0YWwgbm93KQorICog IC0gbmVlZCBVU0IgSURzIGZvciBvdGhlciBkYW5jZSBwYWRzCisgKgorICogRHJpdmVyIGhpc3Rv cnkgaXMgbG9jYXRlZCBhdCB0aGUgYm90dG9tIG9mIHRoaXMgZmlsZS4KKyAqLworCisjaWZuZGVm IF9YUEFEX0gKKyNkZWZpbmUgX1hQQURfSAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cisj aW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRl IDxsaW51eC9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGlu dXgvdXNiL2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKKyNpbmNsdWRl IDxsaW51eC9rb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKyNpbmNsdWRlIDxs aW51eC9zdHJpbmcuaD4KKworI2lmZGVmIENPTkZJR19KT1lTVElDS19YUEFEX0xFRFMKKyNpbmNs dWRlIDxsaW51eC9sZWRzLmg+CisKK3N0cnVjdCB4cGFkX2xlZCB7CisJY2hhciBuYW1lWzE2XTsK KwlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZF9jZGV2OworCXN0cnVjdCB1c2JfeHBhZCAqeHBhZDsK K307CisjZW5kaWYKKworCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIk1hcmtvIEZyaWVkZW1hbm4g PG1mckBibXgtY2hlbW5pdHouZGU+IgorI2RlZmluZSBEUklWRVJfREVTQyAiWGJveC8zNjAgcGFk IGRyaXZlciIKKworI2RlZmluZSBYUEFEX1BLVF9MRU4gMzIKKworCisvKiB4Ym94IGQtcGFkcyBz aG91bGQgbWFwIHRvIGJ1dHRvbnMsIGFzIGlzIHJlcXVpcmVkIGZvciBERFIgcGFkcworICAgYnV0 IHdlIG1hcCB0aGVtIHRvIGF4ZXMgd2hlbiBwb3NzaWJsZSB0byBzaW1wbGlmeSB0aGluZ3MgKi8K KyNkZWZpbmUgTUFQX0RQQURfVE9fQlVUVE9OUyAgICAwCisjZGVmaW5lIE1BUF9EUEFEX1RPX0FY RVMgICAgICAgMQorI2RlZmluZSBNQVBfRFBBRF9VTktOT1dOICAgICAgIDIKKworLyogVHlwZSBv ZiBjb250cm9sbGVyICppbnRlcmZhY2UqIChvcmlnaW5hbCwgd2lyZWQgMzYwLCB3aXJlbGVzcyAz NjApICovCisjZGVmaW5lIFhUWVBFX1hCT1ggICAgICAgIDAKKyNkZWZpbmUgWFRZUEVfWEJPWDM2 MCAgICAgMQorI2RlZmluZSBYVFlQRV9YQk9YMzYwVyAgICAyCisjZGVmaW5lIFhUWVBFX1VOS05P V04gICAgIDMKKworLyogVHlwZSBvZiBjb250cm9sbGVyIChlLmcuIHBhZCwgZ3VpdGFyLCBvdGhl ciBpbnB1dCBkZXZpY2UpICovCisjZGVmaW5lIFhDT05UUk9MTEVSX1RZUEVfTk9ORQkJMAorI2Rl ZmluZSBYQ09OVFJPTExFUl9UWVBFX1BBRAkJMQorI2RlZmluZSBYQ09OVFJPTExFUl9UWVBFX0dV SVRBUgkJMgorI2RlZmluZSBYQ09OVFJPTExFUl9UWVBFX0RBTkNFX1BBRAkzCisjZGVmaW5lIFhD T05UUk9MTEVSX1RZUEVfT1RIRVIJCTI1NQorCisKKy8qIFRoZSBYYm94IDM2MCBjb250cm9sbGVy cyBoYXZlIHNlbnNpdGl2ZSBzdGlja3MgdGhhdCBvZnRlbiBkbyBub3QgY2VudGVyCisgKiBleGFj dGx5LiBBIGRlYWQgem9uZSBjYXVzZXMgc3RpY2sgZXZlbnRzIGJlbG93IGEgY2VydGFpbiB0aHJl c2hob2xkIHRvIGJlCisgKiByZXBvcnRlZCBhcyB6ZXJvLgorICoKKyAqIFRoZSBkZWZhdWx0IGRl YWQgem9uZSBzaXplIGlzIDgxOTIsIHdoaWNoIHdhcyBvYnRhaW5lZCBieSB0ZXN0aW5nIGEKKyAq IHdpcmVsZXNzIDM2MCBjb250cm9sbGVyIHdpdGgganN0ZXN0KDEpIGFuZCBjb25zdWx0aW5nIGdh bWluZyBmb3J1bXMgZm9yCisgKiBhIHJlY29tbWVuZGVkIGRlYWQgem9uZSBmb3IgdGhpcyBjb250 cm9sbGVyLiBUaGUgY29uc2Vuc3VzIG9waW5pb24gd2FzCisgKiAwLjI1IChvbiBhIHNjYWxlIGZy b20gMCB0byAxKSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gODE5MiAob3V0IG9mIDMyNzY3KS4KKyAq LworI2RlZmluZSBYREVBRF9aT05FX0RFRkFVTFQgICA4MTkyCisKKy8qIERlZmF1bHQgbGltaXQg Zm9yIHRoZSBzdGlja3MgaXMgdGhlIG1heGltdW0gYXhpcyB2YWx1ZSAoMzI3NjcpLCB3aGljaCB3 aWxsCisgKiBjYXVzZSB0aGUgc3RpY2tzIHRvIGhhdmUgYSByYWRpYWwgYXhpcyBhcyBkZXNpZ25l ZCBpbiB0aGUgaGFyZHdhcmUuIFRvCisgKiBlbmFibGUgc3F1YXJlIGF4aXMgc3VwcG9ydCwgc2V0 IHRoZSBzdGljayBsaW1pdHMgdG8gMjMxNzAgb3IgbG93ZXIgYXQgcnVuCisgKiB0aW1lIHZpYSB0 aGUgc3lzZnMgaW50ZXJmYWNlLiAqLworI2RlZmluZSBYU1RJQ0tfTElNSVRfREVGQVVMVCAzMjc2 NworCisvKiBSdW1ibGUgbm9ybWFsbHkgZW5hYmxlZCAqLworI2RlZmluZSBYUlVNQkxFX0RFRkFV TFQJCTEKKworLyogTm9ybWFsbHksIHRyaWdnZXIgYXhlcyByZXBvcnQgaW4gdGhlIHJhbmdlIDAg dG8gMzI3NjcgKHBvc2l0aXZlIGF4aXMgb25seSkgKi8KKyNkZWZpbmUgWEZVTExfVFJJR0dFUl9B WElTX0RFRkFVTFQJMAorCisKKy8qIFhib3ggMzYwIGhhcyBhIHZlbmRvci1zcGVjaWZpYyBjbGFz cywgc28gd2UgY2Fubm90IG1hdGNoIGl0IHdpdGggb25seQorICogVVNCX0lOVEVSRkFDRV9JTkZP IChhbHNvIHNwZWNpZmljYWxseSByZWZ1c2VkIGJ5IFVTQiBzdWJzeXN0ZW0pLCBzbyB3ZQorICog bWF0Y2ggYWdhaW5zdCB2ZW5kb3IgaWQgYXMgd2VsbC4gV2lyZWQgWGJveCAzNjAgZGV2aWNlcyBo YXZlIHByb3RvY29sIDEsCisgKiB3aXJlbGVzcyBjb250cm9sbGVycyBoYXZlIHByb3RvY29sIDEy OS4gKi8KKyNkZWZpbmUgWFBBRF9YQk9YMzYwX1ZFTkRPUl9QUk9UT0NPTCh2ZW5kLHByKSBcCisJ Lm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IgfCBcCisJCQlVU0JfREVW SUNFX0lEX01BVENIX0lOVF9JTkZPLCBcCisJLmlkVmVuZG9yID0gKHZlbmQpLCBcCisJLmJJbnRl cmZhY2VDbGFzcyA9IFVTQl9DTEFTU19WRU5ET1JfU1BFQywgXAorCS5iSW50ZXJmYWNlU3ViQ2xh c3MgPSA5MywgXAorCS5iSW50ZXJmYWNlUHJvdG9jb2wgPSAocHIpCisjZGVmaW5lIFhQQURfWEJP WDM2MF9WRU5ET1IodmVuZCkgXAorCXsgWFBBRF9YQk9YMzYwX1ZFTkRPUl9QUk9UT0NPTCh2ZW5k LCAxKSB9LCBcCisJeyBYUEFEX1hCT1gzNjBfVkVORE9SX1BST1RPQ09MKHZlbmQsIDEyOSkgfQor CisKKworLyogU29tZSBvZiB0aGUgZmllbGRzIGluIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGFy ZSBmb3IgbGF0ZXIgdXNlIHdpdGgKKyAqIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMgdG8gcmVjb2du aXplIGluZGl2aWR1YWwgY29udHJvbGxlcnMuIFRoZSBkZWFkIHpvbmVzCisgKiBhbmQgYXhpcyBs aW1pdHMgY2FuIGJlIGNoYW5nZWQgIm9uIHRoZSBmbHkiIGFuZCBhcmUgZWZmZWN0aXZlIGltbWVk aWF0ZWx5LgorICoKKyAqIFRoZSBmaWVsZHMgbGFiZWxlZCAicm8iIGFuZCAicnciIGFyZSBpbnRl bmRlZCB0byBiZSByZWFkLW9ubHkgYW5kCisgKiByZWFkLXdyaXRlLCByZXNwZWN0aXZlbHksIHdo ZW4gZXhwb3NlZCBpbiBzeXNmcy4gTW9zdCBvZiB0aGUgcmVhZC1vbmx5CisgKiBmaWVsZHMgYXJl IHRvIHN1cHBvcnQgKndpcmVsZXNzKiAzNjAgY29udHJvbGxlcnMuIFRoZSBjb250cm9sbGVyX251 bWJlcgorICogaXMgdXNlZCB0byBzZXQgdGhlIExFRCwgd2hpbGUgY29udHJvbGxlcl9wcmVzZW50 IHRyYWNrcyB3aGV0aGVyIHRoZQorICogY29udHJvbGxlciBpcyBjb25uZWN0ZWQgdG8gdGhlIHdp cmVsZXNzIHJlY2VpdmVyLiBDb250cm9sbGVyIHR5cGUgYXBwbGllcworICogdG8gYWxsIG1vZGVs cyAod2lyZWQgYW5kIHdpcmVsZXNzKSwgYW5kIHRyYWNrcyB3aGV0aGVyIHRoZSBkZXZpY2UgaXMg YSBwYWQsCisgKiBndWl0YXIsIGV0Yy4gZm9yIGxhdGVyIHVzZXJzcGFjZSB1c2UuIFNlZSB0aGUg Y29tbWVudCBhYm92ZSByZWdhcmRpbmcKKyAqIHR5cGUgYW5kIHVuaXF1ZSBJRCBkZXRlY3Rpb24g b24gd2lyZWxlc3MgMzYwIHJlY2VpdmVycy4KKyAqLworc3RydWN0IHVzYl94cGFkIHsKKwlzdHJ1 Y3QgaW5wdXRfZGV2ICpkZXY7CQkvKiBpbnB1dCBkZXZpY2UgaW50ZXJmYWNlICovCisJc3RydWN0 IHVzYl9kZXZpY2UgKnVkZXY7CS8qIHVzYiBkZXZpY2UgKi8KKworCXN0cnVjdCB1cmIgKmlycV9p bjsJCS8qIHVyYiBmb3IgaW50ZXJydXB0IGluIHJlcG9ydCAqLworCXVuc2lnbmVkIGNoYXIgKmlk YXRhOwkJLyogaW5wdXQgZGF0YSAqLworCWRtYV9hZGRyX3QgaWRhdGFfZG1hOworCisjaWYgZGVm aW5lZChDT05GSUdfSk9ZU1RJQ0tfWFBBRF9GRikgfHwgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tf WFBBRF9MRURTKQorCXN0cnVjdCB1cmIgKmlycV9vdXQ7CQkvKiB1cmIgZm9yIGludGVycnVwdCBv dXQgcmVwb3J0ICovCisJdW5zaWduZWQgY2hhciAqb2RhdGE7CQkvKiBvdXRwdXQgZGF0YSAqLwor CWRtYV9hZGRyX3Qgb2RhdGFfZG1hOworCXN0cnVjdCBtdXRleCBvZGF0YV9tdXRleDsKKyNlbmRp ZgorCisjaWZkZWYgQ09ORklHX0pPWVNUSUNLX1hQQURfTEVEUworCXN0cnVjdCB4cGFkX2xlZCAq bGVkOworI2VuZGlmCisKKwljaGFyIHBoeXNbNjRdOwkJCS8qIHBoeXNpY2FsIGRldmljZSBwYXRo ICovCisKKwlpbnQgZHBhZF9tYXBwaW5nOwkJLyogbWFwIGQtcGFkIHRvIGJ1dHRvbnMgb3IgdG8g YXhlcyAqLworCWludCB4dHlwZTsJCQkvKiB0eXBlIG9mIHhib3ggZGV2aWNlICovCisKKwkvKiBX b3JrIHN0cnVjdHVyZSBmb3IgbW92aW5nIHRoZSBjYWxsIHRvIHhwYWRfc2VuZF9sZWRfY29tbWFu ZAorCSAqIG91dHNpZGUgdGhlIGludGVycnVwdCBoYW5kbGVyIGZvciBwYWNrZXQgcHJvY2Vzc2lu ZyAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCQorCS8qIGlkIHBhY2tldCBmb3Igd2ly ZWxlc3MgMzYwIGNvbnRyb2xsZXIgKi8KKwl1bnNpZ25lZCBjaGFyICppZF9wYWNrZXQ7CisKKwlp bnQgY29udHJvbGxlcl9udW1iZXI7CQkvKiBjb250cm9sbGVyICMgKDEtNCkgZm9yIDM2MHcuIHJv ICovCisJaW50IGNvbnRyb2xsZXJfcHJlc2VudDsgICAgICAgICAvKiAzNjB3IGNvbnRyb2xsZXIg cHJlc2VuY2UuIHJvICovCisJaW50IGNvbnRyb2xsZXJfdHlwZTsgICAgICAgICAgICAvKiBjb250 cm9sbGVyIHR5cGUuIHJvICovCisJY2hhciBjb250cm9sbGVyX3VuaXF1ZV9pZFsxN107ICAvKiB1 bmlxdWUgSUQgb2YgY29udHJvbGxlciAoMzYwdykuIHJvICovCisJdW5zaWduZWQgaW50IGxlZnRf ZGVhZF96b25lOyAgICAvKiBkZWFkIHpvbmUgZm9yIGxlZnQgc3RpY2suIHJ3ICovCisJdW5zaWdu ZWQgaW50IHJpZ2h0X2RlYWRfem9uZTsgICAvKiBkZWFkIHpvbmUgZm9yIHJpZ2h0IHN0aWNrLiBy dyAqLworCXVuc2lnbmVkIGludCBsZWZ0X3N0aWNrX2xpbWl0OyAgLyogYXhpcyBsaW1pdCBmb3Ig bGVmdCBzdGljay4gcncgKi8KKwl1bnNpZ25lZCBpbnQgcmlnaHRfc3RpY2tfbGltaXQ7IC8qIGF4 aXMgbGltaXQgZm9yIHJpZ2h0IHN0aWNrLiBydyAqLworCWludCBydW1ibGVfZW5hYmxlOyAgICAg ICAgICAgICAgLyogZW5hYmxlL2Rpc2FibGUgcnVtYmxlLiBydyAqLworCWludCBsZWZ0X3RyaWdn ZXJfZnVsbF9heGlzOyAgICAgLyogZnVsbCBheGlzIC0gbGVmdCB0cmlnZ2VyLiBydyAqLworCWlu dCByaWdodF90cmlnZ2VyX2Z1bGxfYXhpczsgICAgLyogZnVsbCBheGlzIC0gcmlnaHQgdHJpZ2dl ci4gcncgKi8KKworCWludCBzeXNmc19vazsgICAgICAgICAgICAgICAgICAgLyogc3lzZnMgaW50 ZXJmYWNlIE9LICovCit9OworI2RlZmluZSB0b194cGFkKGQpIGlucHV0X2dldF9kcnZkYXRhKHRv X2lucHV0X2RldihkKSkKKworCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzIGZvciBub24tc3lzZnMg aW50ZXJmYWNlIGZ1bmN0aW9ucyAqLworc3RhdGljIHZvaWQgc2V0X2RlYWRfem9uZSh1bnNpZ25l ZCBpbnQgbmV3X3NpemUsIHVuc2lnbmVkIGludCAqZHosCisJdW5zaWduZWQgaW50IHN0aWNrX2xp bWl0KTsKK3N0YXRpYyB2b2lkIHNldF9zdGlja19saW1pdCh1bnNpZ25lZCBpbnQgbmV3X3NpemUs IHVuc2lnbmVkIGludCAqc2wsCisJdW5zaWduZWQgaW50IGRlYWRfem9uZSk7CitzdGF0aWMgdm9p ZCB4cGFkX2luaXRfY29udHJvbGxlcihzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpOworc3RhdGljIHZv aWQgeHBhZF9zZW5kX2xlZF9jb21tYW5kKHN0cnVjdCB1c2JfeHBhZCAqeHBhZCwgaW50IGNvbW1h bmQpOworc3RhdGljIHZvaWQgeHBhZF93b3JrX2NvbnRyb2xsZXIoc3RydWN0IHdvcmtfc3RydWN0 ICp3KTsKK3N0YXRpYyB2b2lkIHhwYWRfcHJvY2Vzc19zdGlja3Moc3RydWN0IHVzYl94cGFkICp4 cGFkLCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKK3N0YXRpYyB2b2lkIHhwYWRfcHJvY2Vzc19wYWNr ZXQoc3RydWN0IHVzYl94cGFkICp4cGFkLCB1MTYgY21kLAorCXVuc2lnbmVkIGNoYXIgKmRhdGEp Oworc3RhdGljIHZvaWQgeHBhZDM2MF9wcm9jZXNzX3BhY2tldChzdHJ1Y3QgdXNiX3hwYWQgKnhw YWQsIHUxNiBjbWQsCisJdW5zaWduZWQgY2hhciAqZGF0YSk7CitzdGF0aWMgdm9pZCB4cGFkMzYw d19pZGVudGlmeV9jb250cm9sbGVyKHN0cnVjdCB1c2JfeHBhZCAqeHBhZCk7CitzdGF0aWMgdm9p ZCB4cGFkMzYwd19wcm9jZXNzX3BhY2tldChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQsIHUxNiBjbWQs CisJdW5zaWduZWQgY2hhciAqZGF0YSk7CitzdGF0aWMgdm9pZCB4cGFkX2lycV9pbihzdHJ1Y3Qg dXJiICp1cmIpOworc3RhdGljIHZvaWQgeHBhZF9pcnFfb3V0KHN0cnVjdCB1cmIgKnVyYik7Citz dGF0aWMgaW50IHhwYWRfaW5pdF9vdXRwdXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHN0 cnVjdCB1c2JfeHBhZCAqeHBhZCk7CitzdGF0aWMgdm9pZCB4cGFkX3N0b3Bfb3V0cHV0KHN0cnVj dCB1c2JfeHBhZCAqeHBhZCk7CitzdGF0aWMgdm9pZCB4cGFkX3N0b3Bfb3V0cHV0KHN0cnVjdCB1 c2JfeHBhZCAqeHBhZCk7CitzdGF0aWMgaW50IHhwYWRfcGxheV9lZmZlY3Qoc3RydWN0IGlucHV0 X2RldiAqZGV2LCB2b2lkICpkYXRhLAorCQkJICAgIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCk7 CitzdGF0aWMgaW50IHhwYWRfaW5pdF9mZihzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpOworc3RhdGlj IHZvaWQgeHBhZF9zZW5kX2xlZF9jb21tYW5kKHN0cnVjdCB1c2JfeHBhZCAqeHBhZCwgaW50IGNv bW1hbmQpOworc3RhdGljIHZvaWQgeHBhZF9sZWRfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxl ZF9jZGV2LAorCWVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpOworc3RhdGljIGludCB4cGFkX2xl ZF9wcm9iZShzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpOworc3RhdGljIHZvaWQgeHBhZF9sZWRfZGlz Y29ubmVjdChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpOworc3RhdGljIGludCB4cGFkX29wZW4oc3Ry dWN0IGlucHV0X2RldiAqZGV2KTsKK3N0YXRpYyB2b2lkIHhwYWRfY2xvc2Uoc3RydWN0IGlucHV0 X2RldiAqZGV2KTsKK3N0YXRpYyB2b2lkIHhwYWRfc2V0X3VwX2FicyhzdHJ1Y3QgaW5wdXRfZGV2 ICppbnB1dF9kZXYsIHNpZ25lZCBzaG9ydCBhYnMpOworc3RhdGljIGludCB4cGFkX3Byb2JlKHN0 cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpp ZCk7CitzdGF0aWMgdm9pZCB4cGFkX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlu dGYpOworc3RhdGljIGludCBfX2luaXQgdXNiX3hwYWRfaW5pdCh2b2lkKTsKK3N0YXRpYyB2b2lk IF9fZXhpdCB1c2JfeHBhZF9leGl0KHZvaWQpOworCisKKy8qIHN5c2ZzIGludGVyZmFjZSAqLwor c3RhdGljIHNzaXplX3QgeHBhZF9zaG93X3VpbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qg ZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKTsKK3N0YXRpYyBzc2l6ZV90IHhw YWRfc3RvcmVfdWludChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmli dXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CitzdGF0aWMgc3NpemVf dCB4cGFkX3N0b3JlX2Jvb2woc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0 dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOworc3RhdGljIHNz aXplX3QgeHBhZF9zdG9yZV9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0 cmlidXRlICphdHRyLAorCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CitzdGF0aWMg c3NpemVfdCB4cGFkX3Nob3dfaW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9h dHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1Zik7CitzdGF0aWMgc3NpemVfdCB4cGFkX3Nob3df aWQoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwg Y2hhciAqYnVmKTsKKworCisKKy8qIERldmljZSBhdHRyaWJ1dGVzICovCitzdGF0aWMgREVWSUNF X0FUVFIobGVmdF9kZWFkX3pvbmUsIDA2NDQsIHhwYWRfc2hvd191aW50LCB4cGFkX3N0b3JlX3Vp bnQpOworc3RhdGljIERFVklDRV9BVFRSKHJpZ2h0X2RlYWRfem9uZSwgMDY0NCwgeHBhZF9zaG93 X3VpbnQsIHhwYWRfc3RvcmVfdWludCk7CitzdGF0aWMgREVWSUNFX0FUVFIobGVmdF9zdGlja19s aW1pdCwgMDY0NCwgeHBhZF9zaG93X3VpbnQsIHhwYWRfc3RvcmVfdWludCk7CitzdGF0aWMgREVW SUNFX0FUVFIocmlnaHRfc3RpY2tfbGltaXQsIDA2NDQsIHhwYWRfc2hvd191aW50LCB4cGFkX3N0 b3JlX3VpbnQpOworc3RhdGljIERFVklDRV9BVFRSKHJ1bWJsZV9lbmFibGUsIDA2NDQsIHhwYWRf c2hvd19pbnQsIHhwYWRfc3RvcmVfYm9vbCk7CitzdGF0aWMgREVWSUNFX0FUVFIobGVmdF90cmln Z2VyX2Z1bGxfYXhpcywgMDY0NCwgeHBhZF9zaG93X2ludCwKKwkJCXhwYWRfc3RvcmVfYm9vbCk7 CitzdGF0aWMgREVWSUNFX0FUVFIocmlnaHRfdHJpZ2dlcl9mdWxsX2F4aXMsIDA2NDQsIHhwYWRf c2hvd19pbnQsCisJCQl4cGFkX3N0b3JlX2Jvb2wpOworc3RhdGljIERFVklDRV9BVFRSKGNvbnRy b2xsZXJfbnVtYmVyLCAwNDQ0LCB4cGFkX3Nob3dfaW50LCB4cGFkX3N0b3JlX3JvKTsKK3N0YXRp YyBERVZJQ0VfQVRUUihjb250cm9sbGVyX3ByZXNlbnQsIDA0NDQsIHhwYWRfc2hvd19pbnQsIHhw YWRfc3RvcmVfcm8pOworc3RhdGljIERFVklDRV9BVFRSKGNvbnRyb2xsZXJfdHlwZSwgMDQ0NCwg eHBhZF9zaG93X2ludCwgeHBhZF9zdG9yZV9ybyk7CitzdGF0aWMgREVWSUNFX0FUVFIoaWQsIDA0 NDQsIHhwYWRfc2hvd19pZCwgeHBhZF9zdG9yZV9ybyk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmli dXRlICp4cGFkX2RlZmF1bHRfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfbGVmdF9kZWFkX3pvbmUu YXR0ciwKKwkmZGV2X2F0dHJfcmlnaHRfZGVhZF96b25lLmF0dHIsCisJJmRldl9hdHRyX2xlZnRf c3RpY2tfbGltaXQuYXR0ciwKKwkmZGV2X2F0dHJfcmlnaHRfc3RpY2tfbGltaXQuYXR0ciwKKwkm ZGV2X2F0dHJfcnVtYmxlX2VuYWJsZS5hdHRyLAorCSZkZXZfYXR0cl9sZWZ0X3RyaWdnZXJfZnVs bF9heGlzLmF0dHIsCisJJmRldl9hdHRyX3JpZ2h0X3RyaWdnZXJfZnVsbF9heGlzLmF0dHIsCisJ JmRldl9hdHRyX2NvbnRyb2xsZXJfbnVtYmVyLmF0dHIsCisJJmRldl9hdHRyX2NvbnRyb2xsZXJf cHJlc2VudC5hdHRyLAorCSZkZXZfYXR0cl9jb250cm9sbGVyX3R5cGUuYXR0ciwKKwkmZGV2X2F0 dHJfaWQuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB4 cGFkX2RlZmF1bHRfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSB4cGFkX2RlZmF1bHRfYXR0cnMs CisJLm5hbWUgPSAiZ2FtZV9kZXZpY2UiLAorfTsKKworI2VuZGlmCisKKy8qIERyaXZlciBIaXN0 b3J5OgorICoKKyAqIDIwMDktMDMtMDIgOiBDb2RlIGNsZWFudXAgKHRoYW5rcyBBbmRyZXcgTW9y dG9uIGFuZCBHcmVnIEstSCkKKyAqICAtIHVzZWQgbWluKCksIG1heCgpLCBhbmQgYWJzKCkgd2hl cmUgYXBwcm9wcmlhdGUsIHNpbXBsaWZ5aW5nIGNvZGUKKyAqICAtIG1vdmVkIGNvZGUgdGhhdCBn ZW5lcmF0ZXMgZGF0YSBvYmplY3RzIG91dCBvZiB4cGFkLmggYW5kIGludG8geHBhZC5jCisgKiAg LSBjaGFuZ2VkIGxlZ2FjeSAjaWYgZGVmaW5lZCguLi4pIHRvICNpZmRlZgorICogIC0gcmVtb3Zl ZCB1bm5lY2Vzc2FyeSB0eXBlY2FzdHMKKyAqICAtIHdpcmVsZXNzIDM2MCBjb250cm9sbGVyIGlk ZW50aWZpY2F0aW9uIG5vdyBkb25lIGluIHdvcmtxdWV1ZSB0YXNrCisgKgorICogMjAwOS0wMi0y OCA6IFRyaWdnZXJzIG5vdyBoYWxmLWF4ZXMgYnkgZGVmYXVsdAorICogIC0gdHJpZ2dlcnMgd2ls bCBub3cgYmUgcG9zaXRpdmUgaGFsZi1heGVzIG9ubHksIHVubGVzcyBhIGZ1bGwgYXhpcyBtYXBw aW5nCisgKiAgICBpcyBlbmFibGVkIHZpYSB0aGUgc3lzZnMgaW50ZXJmYWNlIG9uIGEgcGVyLXRy aWdnZXIgYmFzaXMKKyAqICAtIG1vdmVkIElOSVRfV09SSyB0byB4cGFkX3Byb2JlIGFuZCByZW1v dmVkIElOSVRfV09SSy9QUkVQQVJFX1dPUksgZnJvbQorICogICAgaW50ZXJydXB0IGhhbmRsZXI7 IGFsc28gcmVtb3ZlZCB0aGUgd29ya19wZW5kaW5nIGZsYWcgZnJvbSBzdHJ1Y3QKKyAqICAgIHVz Yl94cGFkIChhbHdheXMgZmx1c2ggc2hhcmVkIHdvcmtxdWV1ZSBvbiB1bmxvYWQpCisgKiAgLSBy ZWFkLXdyaXRlIHN5c2ZzIGF0dHJpYnV0ZXMgbm93IGhhdmUgNjQ0IGRlZmF1bHQgcGVybWlzc2lv bnMKKyAqCisgKiAyMDA5LTAyLTIzIDogQ2hhbmdlcyBwZXIgbWFpbGluZyBsaXN0ICh0aGFua3Mg RnJlZGVyaWMgV2Vpc2JlY2tlcikKKyAqICAtIG5vIG1vcmUgY2hlY2sgZm9yIENPTkZJR19TWVNG Uzogc3lzZnMgZnVuY3Rpb25zIHdpbGwgc2ltcGx5IHJldHVybgorICogICAgMCBpZiBzeXNmcyBo YXMgbm90IGJlZW4gZW5hYmxlZAorICogIC0gZml4ZWQgd2VpcmQgb3JkZXJpbmcgaW4gc3NjYW5m IHJldHVybiBjaGVjaworICogIC0gY2hlY2tlZCBjb2RlIHdpdGggc2NyaXB0cy9jaGVja3BhdGNo LnBsIGFuZCBtYWRlIHN0eWxlIGFkanVzdG1lbnRzCisgKgorICogMjAwOS0wMi0yMSA6IFJlZmFj dG9yZWQgYW5kIGNoYW5nZWQgc3RpY2sgaGFuZGxpbmcKKyAqICAtIHNwbGl0IGNvZGUgaW50byB0 d28gcGllY2VzICh4cGFkLmggYW5kIHhwYWQuYykKKyAqICAtIGNsZWFuZWQgdXAgc3lzZnMgaW50 ZXJmYWNlCisgKiAgLSBjaGFuZ2VkIHNxdWFyZSBheGlzIGFsZ29yaXRobSB0byBhbiBheGlzIGxp bWl0IGFsZ29yaXRobSwgd2hpY2ggYWxsb3dzCisgKiAgICBzaXplIG9mIGluc2NyaWJlZCBzcXVh cmUgdG8gYmUgYWRqdXN0ZWQ7IGF2YWlsYWJsZSBmb3IgYm90aCBzdGlja3MKKyAqICAtIGRlYWQg em9uZXMgbm93IHBlci1zdGljaworICoKKyAqIDIwMDktMDItMTggOiBDaGFuZ2VzIHBlciBtYWls aW5nIGxpc3QgKGFuZCBzb21lIGFkZGl0aW9ucykKKyAqICAtIHJldmlzZWQgc3lzZnMgaW50ZXJm YWNlICh0aGFua3MgR3JlZyBLLUgpCisgKiAgLSBjaGVjayByZXR1cm4gdmFsdWVzIG9mIHNzY2Fu ZiAodGhhbmtzIE9saXZlciBOZXVrdW0pCisgKiAgLSB1cmIgc3VibWlzc2lvbiB3aGlsZSBob2xk aW5nIG11dGV4IG5vdyBvbmNlIGFnYWluIEdGUF9LRVJORUwKKyAqICAgICh0aGFua3MgT2xpdmVy IE5ldWt1bSkKKyAqICAtIHdvcmsgc3RydWN0dXJlIGZpeGVzICh0aGFua3MgT2xpdmVyIE5ldWt1 bSkKKyAqICAtIHVldmVudHMgZ2VuZXJhdGVkIGZvciB3aXJlbGVzcyBjb250cm9sbGVyIG9ubGlu ZS9vZmZsaW5lCisgKiAgLSBzeXNmcyBpbnRlcmZhY2Ugb25seSBpZiBDT05GSUdfU1lTRlMgaXMg c2V0CisgKgorICogMjAwOS0wMi0xNSA6IE1pbm9yIGFkanVzdG1lbnRzCisgKiAgLSBhZGRlZCBL T0JKX09OTElORS9LT0JKX09GRkxJTkUgZXZlbnRzIHdoZW4gY29udHJvbGxlcnMgYXJlIGNvbm5l Y3RlZCB0bworICogICAgb3IgZGlzY29ubmVjdGVkIGZyb20gdGhlIHdpcmVsZXNzIDM2MCByZWNl aXZlcgorICogIC0gaWdub3JlIGR1cGxpY2F0ZSBjb25uZWN0IG1lc3NhZ2VzIG9uIHRoZSBzYW1l IGNvbm5lY3Rpb24KKyAqICAtIGFkZGVkIG9wdGlvbiB0byBlbmFibGUvZGlzYWJsZSBydW1ibGUg b24gYSBwZXItY29udHJvbGxlciBiYXNpcworICogIC0gcnVtYmxlIGV2ZW50cyBhcmUgbm90IHNl bnQgdG8gZ3VpdGFyIG9yIGRhbmNlIHBhZCBkZXZpY2VzCisgKgorICogMjAwOS0wMi0xNCA6IEFk ZGVkIHN5c2ZzIGludGVyZmFjZQorICogIC0gZGVhZCB6b25lcyBhbmQgc3F1YXJlIGF4aXMgc2V0 dGluZ3MgY2FuIG5vdyBiZSBtYWRlIHBlci1jb250cm9sbGVyCisgKiAgLSByZW1vdmVkIGRlYWRf em9uZSBhbmQgc3F1YXJlX2F4aXMgbW9kdWxlIHBhcmFtZXRlcnMgKHVzZSBzeXNmcykKKyAqICAt IG5ldyBzcXVhcmUgYXhpcyBhbGdvcml0aG0KKyAqCisgKiAyMDA5LTAyLTEzIDogRGlzYWJsZSBz cXVhcmUgYXhpcyBmb3IgcmlnaHQgc3RpY2sKKyAqICAtIHNxdWFyZSBheGlzIGFwcGxpZXMgdG8g bGVmdCBzdGljayBvbmx5CisgKgorICogMjAwOS0wMi0xMiA6IFNjYWxpbmcgZm9yIGRlYWQgem9u ZSBhbmQgc3F1YXJlIGF4aXMgc3VwcG9ydAorICogIC0gYXhlcyBub3cgc2NhbGUgZnJvbSAwIHRv IDMyNzY3IHN0YXJ0aW5nIGF0IGVkZ2Ugb2YgZGVhZCB6b25lCisgKiAgLSBpbmNyZWFzZWQgZGVm YXVsdCBkZWFkIHpvbmUgdG8gODE5MgorICogIC0gaW5pdGlhbCBzcXVhcmUgYXhpcyBzdXBwb3J0 IChyZWxpYWJsZSBvbmx5IHdpdGggbGVmdCBzdGljaykKKyAqCisgKiAyMDA5LTAyLTA3IDogTW9y ZSB3aXJlbGVzcyAzNjAgY29udHJvbGxlciBmaXhlcworICogIC0gcmVtb3ZlZCBidWxrIHVyYiBj b21wbGV0ZWx5CisgKiAgLSB1c2UgeHBhZF9zZW5kX2xlZF9jb21tYW5kIHRvIHNldCBjb250cm9s bGVyIG51bWJlciBvbiBMRUQgZGlzcGxheQorICogICAgKHdpcmVsZXNzIDM2MCBjb250cm9sbGVy KQorICogIC0gZGVhZF96b25lIGlzIG5vdyBhbiBhZGp1c3RhYmxlIG1vZHVsZSBwYXJhbWV0ZXIK KyAqCisgKiAyMDA5LTAyLTA2IDogQXhpcyBoYW5kbGluZyBpbXByb3ZlbWVudHMKKyAqICAtIHVu aWZpZWQgaGFuZGxlciBmb3IgbGVmdCBhbmQgcmlnaHQgc3RpY2tzCisgKiAgLSBpbml0aWFsIHN1 cHBvcnQgZm9yIGRlYWQgem9uZXMKKyAqCisgKiAyMDA5LTAyLTAyIDogV2lyZWxlc3MgMzYwIGNv bnRyb2xsZXIgZml4ZXMKKyAqICAtIGZvbGxvd2VkIFBST1RPQ09MIGRlc2NyaXB0aW9uIGZyb20g eGJveGRydiB1c2Vyc3BhY2UgZHJpdmVyCisgKiAgLSBMRUQgYW5kIHJ1bWJsZSBzdXBwb3J0IGFk ZGVkIGZvciB3aXJlbGVzcyAzNjAgY29udHJvbGxlciAocHJvdG9jb2wKKyAqICAgIGlzIGRpZmZl cmVudCBmcm9tIHdpcmVkISkKKyAqCisgKiAyMDA0LTEwLTAyIC0gMC4wLjYgOiBERFIgcGFkIHN1 cHBvcnQKKyAqICAtIGJvcnJvd2VkIGZyb20gdGhlIFhCT1ggbGludXgga2VybmVsCisgKiAgLSBV U0IgaWQncyBmb3IgY29tbW9ubHkgdXNlZCBkYW5jZSBwYWRzIGFyZSBwcmVzZW50CisgKiAgLSBk YW5jZSBwYWRzIHdpbGwgbWFwIEQtUEFEIHRvIGJ1dHRvbnMsIG5vdCBheGVzCisgKiAgLSBwYXNz IHRoZSBtb2R1bGUgcGFyYW1hdGVyICdkcGFkX3RvX2J1dHRvbnMnIHRvIGZvcmNlCisgKiAgICB0 aGUgRC1QQUQgdG8gbWFwIHRvIGJ1dHRvbnMgaWYgeW91ciBwYWQgaXMgbm90IGRldGVjdGVkCisg KgorICogMjAwMi0wNy0xNyAtIDAuMC41IDogc2ltcGxpZmllZCBkLXBhZCBoYW5kbGluZworICoK KyAqIDIwMDItMDctMTYgLSAwLjAuNCA6IG1pbm9yIGNoYW5nZXMsIG1lcmdlIHdpdGggVm9qdGVj aCdzIHYwLjAuMworICogIC0gdmVyaWZpZWQgdGhlIGxhY2sgb2YgSElEIGFuZCByZXBvcnQgZGVz Y3JpcHRvcnMKKyAqICAtIHZlcmlmaWVkIHRoYXQgQUxMIGJ1dHRvbnMgV09SSworICogIC0gZml4 ZWQgZC1wYWQgdG8gYXhlcyBtYXBwaW5nCisgKgorICogMjAwMi0wNy0xNCAtIDAuMC4zIDogcmV3 b3JrIGJ5IFZvanRlY2ggUGF2bGlrCisgKiAgLSBpbmRlbnRhdGlvbiBmaXhlcworICogIC0gdXNi ICsgaW5wdXQgaW5pdCBzZXF1ZW5jZSBmaXhlcworICoKKyAqIDIwMDItMDctMDIgLSAwLjAuMiA6 IGJhc2ljIHdvcmtpbmcgdmVyc2lvbgorICogIC0gYWxsIGF4ZXMgYW5kIDkgb2YgdGhlIDEwIGJ1 dHRvbnMgd29yayAoZ2VybWFuIEludGVyQWN0IGRldmljZSkKKyAqICAtIHRoZSBibGFjayBidXR0 b24gZG9lcyBub3Qgd29yaworICoKKyAqIDIwMDItMDYtMjcgLSAwLjAuMSA6IGZpcnN0IHZlcnNp b24sIGp1c3Qgc2FpZCAiWEJPWCBISUQgY29udHJvbGxlciIKKyAqCisgKi8K --0016364ecf90e34f0f04642e44c7--