From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail-wi0-x22b.google.com ([2a00:1450:400c:c05::22b]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1XAJ50-0004gT-Rj for barebox@lists.infradead.org; Thu, 24 Jul 2014 13:29:14 +0000 Received: by mail-wi0-f171.google.com with SMTP id hi2so9581474wib.10 for ; Thu, 24 Jul 2014 06:28:44 -0700 (PDT) From: Sebastian Hesselbarth Date: Thu, 24 Jul 2014 15:28:45 +0200 Message-Id: <1406208526-24261-6-git-send-email-sebastian.hesselbarth@gmail.com> In-Reply-To: <1406208526-24261-1-git-send-email-sebastian.hesselbarth@gmail.com> References: <1406208526-24261-1-git-send-email-sebastian.hesselbarth@gmail.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "barebox" Errors-To: barebox-bounces+u.kleine-koenig=pengutronix.de@lists.infradead.org Subject: [PATCH 5/6] USB: host: add xHCI HCD, Hub, and platform driver To: Sebastian Hesselbarth , Sascha Hauer Cc: Thomas Petazzoni , barebox@lists.infradead.org VGhpcyBhZGRzIHN1cHBvcnQgZm9yIHhIQ0kgVVNCIDMuMCBob3N0IGNvbnRyb2xsZXJzIGZvdW5k IG9uIHZhcmlvdXMKU29DcyBhbmQgUENJIGRldmljZXMuIEN1cnJlbnRseSwgdGhlIGRyaXZlciBv bmx5IHN1cHBvcnRzIHRoZSB2aXJ0dWFsClVTQiAyLjAgcG9ydHMgb2YgdGhlIGhvc3QgY29udHJv bGxlciwgc28gaWYgeW91IHBsYW4gdG8gdXNlIFVTQiAzLjAKZGV2aWNlcywgcHV0IGEgVVNCIDIu MCBjYWJsZSBpbiBiZXR3ZWVuLgoKU2lnbmVkLW9mZi1ieTogU2ViYXN0aWFuIEhlc3NlbGJhcnRo IDxzZWJhc3RpYW4uaGVzc2VsYmFydGhAZ21haWwuY29tPgotLS0KVG86IFNhc2NoYSBIYXVlciA8 cy5oYXVlckBwZW5ndXRyb25peC5kZT4KQ2M6IFRob21hcyBQZXRhenpvbmkgPHRob21hcy5wZXRh enpvbmlAZnJlZS1lbGVjdHJvbnMuY29tPgpDYzogRXplcXVpZWwgR2FyY2lhIDxlemVxdWllbC5n YXJjaWFAZnJlZS1lbGVjdHJvbnMuY29tPgpDYzogYmFyZWJveEBsaXN0cy5pbmZyYWRlYWQub3Jn Ci0tLQogZHJpdmVycy91c2IvaG9zdC9LY29uZmlnICAgIHwgICAxMSArCiBkcml2ZXJzL3VzYi9o b3N0L01ha2VmaWxlICAgfCAgICAxICsKIGRyaXZlcnMvdXNiL2hvc3QveGhjaS1oY2QuYyB8IDEy NTEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvdXNi L2hvc3QveGhjaS1odWIuYyB8ICA2OTkgKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMv dXNiL2hvc3QveGhjaS5oICAgICB8IDEyODQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogaW5jbHVkZS91c2IveGhjaS5oICAgICAgICAgIHwgICAzMyArKwogNiBm aWxlcyBjaGFuZ2VkLCAzMjc5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL3VzYi9ob3N0L3hoY2ktaGNkLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9o b3N0L3hoY2ktaHViLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9ob3N0L3hoY2ku aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdXNiL3hoY2kuaAoKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvdXNiL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwppbmRleCA1 YTNjZTQwNzA1ZTguLjhjNjRhM2I5OWMxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9L Y29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwpAQCAtMjIsMyArMjIsMTQgQEAg Y29uZmlnIFVTQl9PSENJX0FUOTEKIAlib29sICJBVDkxIE9IQ0kgZHJpdmVyIgogCiBlbmRpZgor Citjb25maWcgVVNCX1hIQ0kKKwlib29sICJ4SENJIGRyaXZlciIKKwloZWxwCisJICBUaGUgZVh0 ZW5zaWJsZSBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlICh4SENJKSBpcyBzdGFuZGFyZCBmb3IK KwkgIFVTQiAzLjAgIlN1cGVyU3BlZWQiIGhvc3QgY29udHJvbGxlciBoYXJkd2FyZS4geEhDSSBz cGVjaWZpY2F0aW9uCisJICBkZWZpbmVzIHN1cHBvcnQgZm9yIGFsbCBVU0IgZGV2aWNlIHNwZWVk cyBmcm9tIFVTQiAzLjAgZG93biB0bworCSAgVVNCIDEuMSB3aXRob3V0IHRoZSBuZWVkIGZvciBj b21wYW5pb24gY29udHJvbGxlcnMuCisKKwkgIFRoaXMgZHJpdmVyIGN1cnJlbnRseSBvbmx5IHN1 cHBvcnRzIHZpcnR1YWwgVVNCIDIuMCBwb3J0cywgaWYgeW91CisJICBwbGFuIHRvIHVzZSBVU0Ig My4wIGRldmljZXMsIHVzZSBhIFVTQiAyLjAgY2FibGUgaW4gYmV0d2Vlbi4KZGlmZiAtLWdpdCBh L2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlCmlu ZGV4IDE1NmZjN2ZlZDkyYi4uYTVjMDA5ZWJkNmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9o b3N0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUKQEAgLTMsMyArMyw0 IEBAIG9iai0kKENPTkZJR19VU0JfRUhDSV9PTUFQKQkrPSBlaGNpLW9tYXAubwogb2JqLSQoQ09O RklHX1VTQl9FSENJX0FUTUVMKQkrPSBlaGNpLWF0bWVsLm8KIG9iai0kKENPTkZJR19VU0JfT0hD SSkJCSs9IG9oY2ktaGNkLm8KIG9iai0kKENPTkZJR19VU0JfT0hDSV9BVDkxKQkrPSBvaGNpLWF0 OTEubworb2JqLSQoQ09ORklHX1VTQl9YSENJKQkJKz0geGhjaS1oY2QubyB4aGNpLWh1Yi5vCmRp ZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0 L3hoY2ktaGNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40NGQ0 Mjg5NDNkMGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaGNkLmMK QEAgLTAsMCArMSwxMjUxIEBACisvKgorICogeEhDSSBIQ0QgZHJpdmVyCisgKgorICogU2ViYXN0 aWFuIEhlc3NlbGJhcnRoIDxzZWJhc3RpYW4uaGVzc2VsYmFydGhAZ21haWwuY29tPgorICoKKyAq IFNvbWUgY29kZSBib3Jyb3dlZCBmcm9tIHRoZSBMaW51eCB4SENJIGRyaXZlcgorICogICBBdXRo b3I6IFNhcmFoIFNoYXJwCisgKiAgIENvcHlyaWdodCAoQykgMjAwOCBJbnRlbCBDb3JwLgorICoK KyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5z ZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIg ZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisvLyNkZWZpbmUgREVCVUcKKyNpbmNsdWRlIDxhc20v bW11Lmg+CisjaW5jbHVkZSA8Y2xvY2suaD4KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRl IDxpbml0Lmg+CisjaW5jbHVkZSA8aW8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNs dWRlIDx1c2IvdXNiLmg+CisjaW5jbHVkZSA8dXNiL3hoY2kuaD4KKworI2luY2x1ZGUgInhoY2ku aCIKKworLyoKKyAqIHhIQ0kgcmluZyBoYW5kbGluZworICovCisKK3N0YXRpYyBpbnQgeGhjaV9y aW5nX2lzX2xhc3RfdHJiKHN0cnVjdCB4aGNpX3JpbmcgKnJpbmcsIHVuaW9uIHhoY2lfdHJiICp0 cmIpCit7CisgICAgICAgIGlmIChyaW5nLT50eXBlID09IFRZUEVfRVZFTlQpCisgICAgICAgICAg ICAgICAgcmV0dXJuIHRyYiA9PSAmcmluZy0+dHJic1tOVU1fRVZFTlRfVFJCU107CisgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gVFJCX1RZUEVfTElOSyhsZTMyX3RvX2NwdSh0 cmItPmxpbmsuY29udHJvbCkpOworfQorCitzdGF0aWMgaW50IHhoY2lfcmluZ19pbmNyZW1lbnQo c3RydWN0IHhoY2lfcmluZyAqcmluZywgYm9vbCBlbnF1ZXVlKQoreworCXVuaW9uIHhoY2lfdHJi ICoqcXVldWUgPSAoZW5xdWV1ZSkgPyAmcmluZy0+ZW5xdWV1ZSA6ICZyaW5nLT5kZXF1ZXVlOwor CisJKCpxdWV1ZSkrKzsKKworICAgICAgICBpZiAoIXhoY2lfcmluZ19pc19sYXN0X3RyYihyaW5n LCAqcXVldWUpKQorCQlyZXR1cm4gMDsKKworCWlmIChyaW5nLT50eXBlID09IFRZUEVfRVZFTlQp IHsKKwkJKnF1ZXVlID0gJnJpbmctPnRyYnNbMF07CisJCXJpbmctPmN5Y2xlX3N0YXRlIF49IDE7 CisJfSBlbHNlIHsKKwkJdTMyIGN0cmwgPSBsZTMyX3RvX2NwdSgoKnF1ZXVlKS0+bGluay5jb250 cm9sKTsKKwkJdm9pZCAqcCA9ICh2b2lkICopKGRtYV9hZGRyX3QpCisJCQlsZTY0X3RvX2NwdSgo KnF1ZXVlKS0+bGluay5zZWdtZW50X3B0cik7CisKKwkJY3RybCA9IChjdHJsICYgflRSQl9DWUNM RSkgfCByaW5nLT5jeWNsZV9zdGF0ZTsKKwkJKCpxdWV1ZSktPmxpbmsuY29udHJvbCA9IGNwdV90 b19sZTMyKGN0cmwpOworCisJCWlmIChlbnF1ZXVlKQorCQkJcmluZy0+ZW5xdWV1ZSA9IHA7CisJ CWVsc2UKKwkJCXJpbmctPmRlcXVldWUgPSBwOworCisJCWlmIChjdHJsICYgTElOS19UT0dHTEUp CisJCQlyaW5nLT5jeWNsZV9zdGF0ZSBePSAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHhoY2lfcmluZ19pc3N1ZV90cmIoc3RydWN0IHhoY2lfcmluZyAqcmluZywgdW5pb24g eGhjaV90cmIgKnRyYikKK3sKKwl1bmlvbiB4aGNpX3RyYiAqZW5xID0gcmluZy0+ZW5xdWV1ZTsK KwlpbnQgaTsKKworCS8qIFBhc3MgVFJCIHRvIGhhcmR3YXJlICovCisJdHJiLT5nZW5lcmljLmZp ZWxkWzNdICY9IH5UUkJfQ1lDTEU7CisJdHJiLT5nZW5lcmljLmZpZWxkWzNdIHw9IHJpbmctPmN5 Y2xlX3N0YXRlOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWVucS0+Z2VuZXJpYy5maWVs ZFtpXSA9IGNwdV90b19sZTMyKHRyYi0+Z2VuZXJpYy5maWVsZFtpXSk7CisKKwl4aGNpX3Jpbmdf aW5jcmVtZW50KHJpbmcsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHhoY2lf cmluZ19pbml0KHN0cnVjdCB4aGNpX3JpbmcgKnJpbmcsIGludCBudW1fdHJicywKKwkJCSAgIGVu dW0geGhjaV9yaW5nX3R5cGUgdHlwZSkKK3sKKwlyaW5nLT50eXBlID0gdHlwZTsKKwlyaW5nLT5j eWNsZV9zdGF0ZSA9IDE7CisJcmluZy0+bnVtX3RyYnMgPSBudW1fdHJiczsKKwlyaW5nLT5lbnF1 ZXVlID0gcmluZy0+ZGVxdWV1ZSA9ICZyaW5nLT50cmJzWzBdOworCisJLyogRXZlbnQgcmluZyBp cyBub3QgbGlua2VkICovCisJaWYgKHR5cGUgPT0gVFlQRV9FVkVOVCkKKwkJcmV0dXJuOworCisJ cmluZy0+dHJic1tudW1fdHJicy0xXS5saW5rLnNlZ21lbnRfcHRyID0KKwkJY3B1X3RvX2xlNjQo KGRtYV9hZGRyX3QpJnJpbmctPnRyYnNbMF0pOworCXJpbmctPnRyYnNbbnVtX3RyYnMtMV0ubGlu ay5jb250cm9sID0KKwkJY3B1X3RvX2xlMzIoVFJCX1RZUEUoVFJCX0xJTkspIHwgTElOS19UT0dH TEUpOworfQorCitzdGF0aWMgc3RydWN0IHhoY2lfcmluZyAqeGhjaV9nZXRfZW5kcG9pbnRfcmlu ZyhzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpCit7CisJc3RydWN0IHhoY2lfcmluZyAqcmluZzsKKwor CWlmIChsaXN0X2VtcHR5KCZ4aGNpLT5yaW5nc19saXN0KSkgeworCQlkZXZfZXJyKHhoY2ktPmRl diwgIm5vIG1vcmUgZW5kcG9pbnQgcmluZ3MgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIE5VTEw7 CisJfQorCisJcmluZyA9IGxpc3RfbGFzdF9lbnRyeSgmeGhjaS0+cmluZ3NfbGlzdCwgc3RydWN0 IHhoY2lfcmluZywgbGlzdCk7CisJbGlzdF9kZWxfaW5pdCgmcmluZy0+bGlzdCk7CisKKwlyZXR1 cm4gcmluZzsKK30KKworc3RhdGljIHZvaWQgeGhjaV9wdXRfZW5kcG9pbnRfcmluZyhzdHJ1Y3Qg eGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX3JpbmcgKnJpbmcpCit7CisJaWYgKCFyaW5nKQor CQlyZXR1cm47CisKKwltZW1zZXQocmluZy0+dHJicywgMCwgcmluZy0+bnVtX3RyYnMgKiBzaXpl b2YodW5pb24geGhjaV90cmIpKTsKKwlsaXN0X2FkZF90YWlsKCZyaW5nLT5saXN0LCAmeGhjaS0+ cmluZ3NfbGlzdCk7Cit9CisKK3N0YXRpYyBpbnQgeGhjaV9maW5kX3Jhd19wb3J0X251bWJlcihz dHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGludCBwb3J0MSkKK3sKKyAgICAgICAgX19sZTMyIF9faW9t ZW0gKmJhc2VfYWRkciA9ICZ4aGNpLT5vcF9yZWdzLT5wb3J0X3N0YXR1c19iYXNlOworICAgICAg ICBfX2xlMzIgX19pb21lbSAqYWRkcjsKKyAgICAgICAgaW50IHJhd19wb3J0OworCisJYWRkciA9 IHhoY2ktPnVzYjJfcG9ydHNbcG9ydDEgLSAxXTsKKyAgICAgICAgcmF3X3BvcnQgPSAoYWRkciAt IGJhc2VfYWRkcikvTlVNX1BPUlRfUkVHUyArIDE7CisgICAgICAgIHJldHVybiByYXdfcG9ydDsK K30KKworc3RhdGljIHUzMiB4aGNpX2ZpbmRfcmVhbF9wb3J0X251bWJlcihzdHJ1Y3QgeGhjaV9o Y2QgKnhoY2ksCisJCQkJICAgICAgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisgICAgICAg IHN0cnVjdCB1c2JfZGV2aWNlICp0b3BfZGV2OworCisgICAgICAgIGZvciAodG9wX2RldiA9IHVk ZXY7IHRvcF9kZXYtPnBhcmVudCAmJiB0b3BfZGV2LT5wYXJlbnQtPnBhcmVudDsKKyAgICAgICAg ICAgICAgICAgICAgICAgIHRvcF9kZXYgPSB0b3BfZGV2LT5wYXJlbnQpCisgICAgICAgICAgICAg ICAgLyogRm91bmQgZGV2aWNlIGJlbG93IHJvb3QgaHViICovOworCisgICAgICAgIHJldHVybiB4 aGNpX2ZpbmRfcmF3X3BvcnRfbnVtYmVyKHhoY2ksIHRvcF9kZXYtPnBvcnRucik7Cit9CisKKy8q CisgKiB4aGNpX2dldF9lbmRwb2ludF9pbmRleCAtIFVzZWQgZm9yIHBhc3NpbmcgZW5kcG9pbnQg Yml0bWFza3MgYmV0d2VlbiB0aGUKKyAqIGNvcmUgYW5kIEhDRHMuICBGaW5kIHRoZSBpbmRleCBm b3IgYW4gZW5kcG9pbnQgZ2l2ZW4gaXRzIGRlc2NyaXB0b3IuCisgKiBVc2UgdGhlIHJldHVybiB2 YWx1ZSB0byByaWdodCBzaGlmdCAxIGZvciB0aGUgYml0bWFzay4KKyAqCisgKiBJbmRleCAgPSAo ZXBudW0gKiAyKSArIGRpcmVjdGlvbiAtIDEsCisgKiB3aGVyZSBkaXJlY3Rpb24gPSAwIGZvciBP VVQsIDEgZm9yIElOLgorICogRm9yIGNvbnRyb2wgZW5kcG9pbnRzLCB0aGUgSU4gaW5kZXggaXMg dXNlZCAoT1VUIGluZGV4IGlzIHVudXNlZCksIHNvCisgKiBpbmRleCA9IChlcG51bSAqIDIpICsg ZGlyZWN0aW9uIC0gMSA9IChlcG51bSAqIDIpICsgMSAtIDEgPSAoZXBudW0gKiAyKQorICovCitz dGF0aWMgdW5zaWduZWQgaW50IHhoY2lfZ2V0X2VuZHBvaW50X2luZGV4KHU4IGVwYWRkcmVzcywg dTggZXBhdHRyaWJ1dGVzKQoreworCXU4IGVwbnVtID0gZXBhZGRyZXNzICYgVVNCX0VORFBPSU5U X05VTUJFUl9NQVNLOworCXU4IHhmZXIgPSBlcGF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZF UlRZUEVfTUFTSzsKKyAgICAgICAgdW5zaWduZWQgaW50IGluZGV4OworCisgICAgICAgIGlmICh4 ZmVyID09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpCisgICAgICAgICAgICAgICAgaW5kZXgg PSAodW5zaWduZWQgaW50KShlcG51bSAqIDIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAg ICAgaW5kZXggPSAodW5zaWduZWQgaW50KShlcG51bSAqIDIpICsKKyAgICAgICAgICAgICAgICAg ICAgICAgICgoZXBhZGRyZXNzICYgVVNCX0RJUl9JTikgPyAxIDogMCkgLSAxOworCisgICAgICAg IHJldHVybiBpbmRleDsKK30KKworc3RhdGljIHU4IHhoY2lfZ2V0X2VuZHBvaW50X3R5cGUodTgg ZXBhZGRyZXNzLCB1OCBlcGF0dHJpYnV0ZXMpCit7CisJaW50IGluID0gZXBhZGRyZXNzICYgVVNC X0VORFBPSU5UX0RJUl9NQVNLOworCXU4IHhmZXIgPSBlcGF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9J TlRfWEZFUlRZUEVfTUFTSzsKKwl1OCB0eXBlOworCisJc3dpdGNoICh4ZmVyKSB7CisJY2FzZSBV U0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOgorCQl0eXBlID0gQ1RSTF9FUDsKKwkJYnJlYWs7CisJ Y2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DOgorCQl0eXBlID0gKGluKSA/IElTT0NfSU5fRVAg OiBJU09DX09VVF9FUDsKKwkJYnJlYWs7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLOgor CQl0eXBlID0gKGluKSA/IEJVTEtfSU5fRVAgOiBCVUxLX09VVF9FUDsKKwkJYnJlYWs7CisJY2Fz ZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ6CisJCXR5cGUgPSAoaW4pID8gSU5UX0lOX0VQIDogSU5U X09VVF9FUDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHR5cGU7Cit9CisKK3N0YXRpYyBpbnQg eGhjaV9oYW5kc2hha2Uodm9pZCBfX2lvbWVtICpwLCB1MzIgbWFzaywgdTMyIGRvbmUsIGludCB1 c2VjKQoreworCXUzMiByZXN1bHQ7CisJdTY0IHN0YXJ0OworCisJc3RhcnQgPSBnZXRfdGltZV9u cygpOworCisJd2hpbGUgKDEpIHsKKwkJcmVzdWx0ID0gcmVhZGwocCkgJiBtYXNrOworCQlpZiAo cmVzdWx0ID09IGRvbmUpCisJCQlyZXR1cm4gMDsKKwkJaWYgKGlzX3RpbWVvdXQoc3RhcnQsIHVz ZWMgKiBVU0VDT05EKSkKKwkJCXJldHVybiAtRVRJTUVET1VUOworCX0KK30KKworaW50IHhoY2lf aXNzdWVfY29tbWFuZChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHVuaW9uIHhoY2lfdHJiICp0cmIp Cit7CisJaW50IHJldDsKKworCXJldCA9IHhoY2lfcmluZ19pc3N1ZV90cmIoJnhoY2ktPmNtZF9y aW5nLCB0cmIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBSaW5nIHRoZSBiZWxs ICovCisJd3JpdGVsKERCX1ZBTFVFX0hPU1QsICZ4aGNpLT5kYmEtPmRvb3JiZWxsWzBdKTsKKwly ZWFkbCgmeGhjaS0+ZGJhLT5kb29yYmVsbFswXSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQgeGhjaV9zZXRfZXZlbnRfZGVxdWV1ZShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpCit7Cisg ICAgICAgIHU2NCByZWc2NDsKKworICAgICAgICByZWc2NCA9IHhoY2lfcmVhZF82NCgmeGhjaS0+ aXJfc2V0LT5lcnN0X2RlcXVldWUpOworICAgICAgICByZWc2NCAmPSBFUlNUX1BUUl9NQVNLOwor ICAgICAgICAvKgorCSAqIERvbid0IGNsZWFyIHRoZSBFSEIgYml0ICh3aGljaCBpcyBSVzFDKSBi ZWNhdXNlCisgICAgICAgICAqIHRoZXJlIG1pZ2h0IGJlIG1vcmUgZXZlbnRzIHRvIHNlcnZpY2Uu CisgICAgICAgICAqLworICAgICAgICByZWc2NCAmPSB+RVJTVF9FSEI7CisJcmVnNjQgfD0gKGRt YV9hZGRyX3QpeGhjaS0+ZXZlbnRfcmluZy5kZXF1ZXVlICYKKwkJfihkbWFfYWRkcl90KUVSU1Rf UFRSX01BU0s7CisKKwkvKiBVcGRhdGUgSEMgZXZlbnQgcmluZyBkZXF1ZXVlIHBvaW50ZXIgKi8K Kwl4aGNpX3dyaXRlXzY0KHJlZzY0LCAmeGhjaS0+aXJfc2V0LT5lcnN0X2RlcXVldWUpOworfQor CitpbnQgeGhjaV93YWl0X2Zvcl9ldmVudChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHU4IHR5cGUs IHVuaW9uIHhoY2lfdHJiICp0cmIpCit7CisJd2hpbGUgKHRydWUpIHsKKwkJdW5pb24geGhjaV90 cmIgKmRlcSA9IHhoY2ktPmV2ZW50X3JpbmcuZGVxdWV1ZTsKKwkJdTggZXZlbnRfdHlwZTsKKwkJ aW50IGksIHJldDsKKworCQlyZXQgPSB4aGNpX2hhbmRzaGFrZSgmZGVxLT5ldmVudF9jbWQuZmxh Z3MsCisJCQkJICAgICBjcHVfdG9fbGUzMihUUkJfQ1lDTEUpLAorCQkJCSAgICAgY3B1X3RvX2xl MzIoeGhjaS0+ZXZlbnRfcmluZy5jeWNsZV9zdGF0ZSksCisJCQkJICAgICBYSENJX0NNRF9ERUZB VUxUX1RJTUVPVVQgLyBVU0VDT05EKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2Vycih4aGNpLT5k ZXYsICJUaW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGV2ZW50XG4iKTsKKwkJCXJldHVybiByZXQ7 CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQkJdHJiLT5nZW5lcmljLmZpZWxk W2ldID0KKwkJCQlsZTMyX3RvX2NwdShkZXEtPmdlbmVyaWMuZmllbGRbaV0pOworCisJCXhoY2lf c2V0X2V2ZW50X2RlcXVldWUoeGhjaSk7CisJCXhoY2lfcmluZ19pbmNyZW1lbnQoJnhoY2ktPmV2 ZW50X3JpbmcsIDApOworCisJCWV2ZW50X3R5cGUgPSBUUkJfRklFTERfVE9fVFlQRSh0cmItPmV2 ZW50X2NtZC5mbGFncyk7CisKKwkJc3dpdGNoIChldmVudF90eXBlKSB7CisJCWNhc2UgVFJCX1BP UlRfU1RBVFVTOgorCQkJZGV2X2RiZyh4aGNpLT5kZXYsICJFdmVudCBQb3J0U3RhdHVzQ2hhbmdl ICV1XG4iLAorCQkJCUdFVF9QT1JUX0lEKHRyYi0+Z2VuZXJpYy5maWVsZFswXSkpOworCQkJYnJl YWs7CisJCWNhc2UgVFJCX1RSQU5TRkVSOgorCQkJZGV2X2RiZyh4aGNpLT5kZXYsICJFdmVudCBU cmFuc2ZlciAldVxuIiwKKwkJCQlHRVRfQ09NUF9DT0RFKHRyYi0+ZXZlbnRfY21kLnN0YXR1cykp OworCQkJcmV0ID0gLUdFVF9DT01QX0NPREUodHJiLT5ldmVudF9jbWQuc3RhdHVzKTsKKwkJCWlm IChyZXQgPT0gLUNPTVBfU1VDQ0VTUykKKwkJCQlyZXQgPSAwOworCQkJYnJlYWs7CisJCWNhc2Ug VFJCX0NPTVBMRVRJT046CisJCQlkZXZfZGJnKHhoY2ktPmRldiwgIkV2ZW50IENvbW1hbmRDb21w bGV0aW9uICV1XG4iLAorCQkJCUdFVF9DT01QX0NPREUodHJiLT5ldmVudF9jbWQuc3RhdHVzKSk7 CisJCQlyZXQgPSAtR0VUX0NPTVBfQ09ERSh0cmItPmV2ZW50X2NtZC5zdGF0dXMpOworCQkJaWYg KHJldCA9PSAtQ09NUF9TVUNDRVNTKQorCQkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVs dDoKKwkJCWRldl9lcnIoeGhjaS0+ZGV2LCAidW5oYW5kbGVkIGV2ZW50ICV1ICglMDJ4KSBbJTA4 eCAlMDh4ICUwOHggJTA4eF1cbiIsCisJCQkJZXZlbnRfdHlwZSwgZXZlbnRfdHlwZSwKKwkJCQl0 cmItPmdlbmVyaWMuZmllbGRbMF0sIHRyYi0+Z2VuZXJpYy5maWVsZFsxXSwKKwkJCQl0cmItPmdl bmVyaWMuZmllbGRbMl0sIHRyYi0+Z2VuZXJpYy5maWVsZFszXSk7CisJCX0KKworCQlpZiAoZXZl bnRfdHlwZSA9PSB0eXBlKQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIC1FTk9TWVM7Cit9 CisKK3N0YXRpYyBzdHJ1Y3QgeGhjaV92aXJ0dWFsX2RldmljZSAqeGhjaV9maW5kX3ZpcnRkZXYo c3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQkJCQkJICAgICBzdHJ1Y3QgdXNiX2RldmljZSAqZGV2 KQoreworCXN0cnVjdCB4aGNpX3ZpcnR1YWxfZGV2aWNlICp2ZGV2OworCisJbGlzdF9mb3JfZWFj aF9lbnRyeSh2ZGV2LCAmeGhjaS0+dmRldl9saXN0LCBsaXN0KQorCQlpZiAodmRldi0+dWRldiA9 PSBkZXYpCisJCQlyZXR1cm4gdmRldjsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3Ry dWN0IHhoY2lfdmlydHVhbF9kZXZpY2UgKnhoY2lfYWxsb2NfdmlydGRldihzdHJ1Y3QgeGhjaV9o Y2QgKnhoY2ksCisJCQkJCQkgICAgICBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlzdHJ1 Y3QgeGhjaV92aXJ0dWFsX2RldmljZSAqdmRldjsKKwlzaXplX3Qgc3pfY3R4LCBzel9pY3R4LCBz el9kY3R4OworCXZvaWQgKnA7CisKKwl2ZGV2ID0geHphbGxvYyhzaXplb2YoKnZkZXYpKTsKKwl2 ZGV2LT51ZGV2ID0gdWRldjsKKwlsaXN0X2FkZF90YWlsKCZ2ZGV2LT5saXN0LCAmeGhjaS0+dmRl dl9saXN0KTsKKworCXN6X2N0eCA9IEhDQ182NEJZVEVfQ09OVEVYVCh4aGNpLT5oY2NfcGFyYW1z KSA/IDIwNDggOiAxMDI0OworCS8qIERldmljZSBDb250ZXh0OiA2NEIgYWxpZ25lZCAqLworCXN6 X2RjdHggPSBBTElHTihzel9jdHgsIDY0KTsKKwkvKiBJbnB1dCBDb250cm9sIENvbnRleHQ6IDY0 QiBhbGlnbmVkICovCisJc3pfaWN0eCA9IEFMSUdOKHN6X2N0eCArIEhDQ19DVFhfU0laRSh4aGNp LT5oY2NfcGFyYW1zKSwgNjQpOworCisJdmRldi0+ZG1hX3NpemUgPSBzel9pY3R4ICsgc3pfZGN0 eDsKKwlwID0gdmRldi0+ZG1hID0gZG1hX2FsbG9jX2NvaGVyZW50KHZkZXYtPmRtYV9zaXplKTsK KwltZW1zZXQodmRldi0+ZG1hLCAwLCB2ZGV2LT5kbWFfc2l6ZSk7CisKKwl2ZGV2LT5vdXRfY3R4 ID0gcDsgcCArPSBzel9kY3R4OworCXZkZXYtPmluX2N0eCA9IHA7IHAgKz0gc3pfaWN0eDsKKwor CXJldHVybiB2ZGV2OworfQorCitzdGF0aWMgdm9pZCB4aGNpX2ZyZWVfdmlydGRldihzdHJ1Y3Qg eGhjaV92aXJ0dWFsX2RldmljZSAqdmRldikKK3sKKwlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kgPSB0 b194aGNpX2hjZCh2ZGV2LT51ZGV2LT5ob3N0KTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkg PCBNQVhfRVBfUklOR1M7IGkrKykKKwkJaWYgKHZkZXYtPmVwW2ldKQorCQkJeGhjaV9wdXRfZW5k cG9pbnRfcmluZyh4aGNpLCB2ZGV2LT5lcFtpXSk7CisKKwlsaXN0X2RlbCgmdmRldi0+bGlzdCk7 CisJZG1hX2ZyZWVfY29oZXJlbnQodmRldi0+ZG1hLCB2ZGV2LT5kbWFfc2l6ZSk7CisJZnJlZSh2 ZGV2KTsKK30KKworc3RhdGljIGludCB4aGNpX3ZpcnRkZXZfaXNzdWVfdHJhbnNmZXIoc3RydWN0 IHhoY2lfdmlydHVhbF9kZXZpY2UgKnZkZXYsCisJCQkJIHU4IGVwLCB1bmlvbiB4aGNpX3RyYiAq dHJiLCBib29sIHJpbmdiZWxsKQoreworCXN0cnVjdCB4aGNpX2hjZCAqeGhjaSA9IHRvX3hoY2lf aGNkKHZkZXYtPnVkZXYtPmhvc3QpOworCXN0cnVjdCB4aGNpX3JpbmcgKnJpbmcgPSB2ZGV2LT5l cFtlcF07CisJaW50IHJldDsKKworCXJldCA9IHhoY2lfcmluZ19pc3N1ZV90cmIocmluZywgdHJi KTsKKwlpZiAocmV0IHx8ICFyaW5nYmVsbCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFJpbmcgdGhl IGJlbGwgKi8KKwl3cml0ZWwoREJfVkFMVUUoZXAsIDApLCAmeGhjaS0+ZGJhLT5kb29yYmVsbFt2 ZGV2LT5zbG90X2lkXSk7CisJcmVhZGwoJnhoY2ktPmRiYS0+ZG9vcmJlbGxbdmRldi0+c2xvdF9p ZF0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHhoY2lfdmlydGRldl96ZXJvX2lu X2N0eChzdHJ1Y3QgeGhjaV92aXJ0dWFsX2RldmljZSAqdmRldikKK3sKKwlpbnQgaTsKKworICAg ICAgICAvKiBXaGVuIGEgZGV2aWNlJ3MgYWRkIGZsYWcgYW5kIGRyb3AgZmxhZyBhcmUgemVybywg YW55IHN1YnNlcXVlbnQKKyAgICAgICAgICogY29uZmlndXJlIGVuZHBvaW50IGNvbW1hbmQgd2ls bCBsZWF2ZSB0aGF0IGVuZHBvaW50J3Mgc3RhdGUKKyAgICAgICAgICogdW50b3VjaGVkLiAgTWFr ZSBzdXJlIHdlIGRvbid0IGxlYXZlIGFueSBvbGQgc3RhdGUgaW4gdGhlIGlucHV0CisgICAgICAg ICAqIGVuZHBvaW50IGNvbnRleHRzLgorICAgICAgICAgKi8KKyAgICAgICAgdmRldi0+aW5fY3R4 LT5pY2MuZHJvcF9mbGFncyA9IDA7CisgICAgICAgIHZkZXYtPmluX2N0eC0+aWNjLmFkZF9mbGFn cyA9IDA7CisgICAgICAgIHZkZXYtPmluX2N0eC0+c2xvdC5kZXZfaW5mbyAmPSBjcHVfdG9fbGUz Mih+TEFTVF9DVFhfTUFTSyk7CisgICAgICAgIC8qIEVuZHBvaW50IDAgaXMgYWx3YXlzIHZhbGlk ICovCisgICAgICAgIHZkZXYtPmluX2N0eC0+c2xvdC5kZXZfaW5mbyB8PSBjcHVfdG9fbGUzMihM QVNUX0NUWCgxKSk7CisJZm9yIChpID0gMTsgaSA8IDMxOyBpKyspIHsKKwkJdmRldi0+aW5fY3R4 LT5lcFtpXS5lcF9pbmZvID0gMDsKKwkJdmRldi0+aW5fY3R4LT5lcFtpXS5lcF9pbmZvMiA9IDA7 CisJCXZkZXYtPmluX2N0eC0+ZXBbaV0uZGVxID0gMDsKKwkJdmRldi0+aW5fY3R4LT5lcFtpXS50 eF9pbmZvID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgeGhjaV92aXJ0ZGV2X2Rpc2FibGVfc2xv dChzdHJ1Y3QgeGhjaV92aXJ0dWFsX2RldmljZSAqdmRldikKK3sKKwlzdHJ1Y3QgeGhjaV9oY2Qg KnhoY2kgPSB0b194aGNpX2hjZCh2ZGV2LT51ZGV2LT5ob3N0KTsKKwl1bmlvbiB4aGNpX3RyYiB0 cmI7CisJaW50IHJldDsKKworCS8qIElzc3VlIERpc2FibGUgU2xvdCBDb21tYW5kICovCisJbWVt c2V0KCZ0cmIsIDAsIHNpemVvZih1bmlvbiB4aGNpX3RyYikpOworCXRyYi5ldmVudF9jbWQuZmxh Z3MgPSBUUkJfVFlQRShUUkJfRElTQUJMRV9TTE9UKSB8CisJCVNMT1RfSURfRk9SX1RSQih2ZGV2 LT5zbG90X2lkKTsKKwl4aGNpX3ByaW50X3RyYih4aGNpLCAmdHJiLCAiUmVxdWVzdCAgRGlzYWJs ZVNsb3QiKTsKKwl4aGNpX2lzc3VlX2NvbW1hbmQoeGhjaSwgJnRyYik7CisJcmV0ID0geGhjaV93 YWl0X2Zvcl9ldmVudCh4aGNpLCBUUkJfQ09NUExFVElPTiwgJnRyYik7CisJeGhjaV9wcmludF90 cmIoeGhjaSwgJnRyYiwgIlJlc3BvbnNlIERpc2FibGVTbG90Iik7CisKKyAgICAgICAgLyogQ2xl YXIgRGV2aWNlIENvbnRleHQgQmFzZSBBZGRyZXNzIEFycmF5ICovCisJeGhjaS0+ZGNiYWFbdmRl di0+c2xvdF9pZF0gPSAwOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB4aGNpX3Zp cnRkZXZfZW5hYmxlX3Nsb3Qoc3RydWN0IHhoY2lfdmlydHVhbF9kZXZpY2UgKnZkZXYpCit7CisJ c3RydWN0IHhoY2lfaGNkICp4aGNpID0gdG9feGhjaV9oY2QodmRldi0+dWRldi0+aG9zdCk7CisJ dW5pb24geGhjaV90cmIgdHJiOworCWludCBzbG90X2lkOworCWludCByZXQ7CisKKwkvKiBJc3N1 ZSBFbmFibGUgU2xvdCBDb21tYW5kICovCisJbWVtc2V0KCZ0cmIsIDAsIHNpemVvZih1bmlvbiB4 aGNpX3RyYikpOworCXRyYi5ldmVudF9jbWQuZmxhZ3MgPSBUUkJfVFlQRShUUkJfRU5BQkxFX1NM T1QpOworCXhoY2lfcHJpbnRfdHJiKHhoY2ksICZ0cmIsICJSZXF1ZXN0ICBFbmFibGVTbG90Iik7 CisJeGhjaV9pc3N1ZV9jb21tYW5kKHhoY2ksICZ0cmIpOworCXJldCA9IHhoY2lfd2FpdF9mb3Jf ZXZlbnQoeGhjaSwgVFJCX0NPTVBMRVRJT04sICZ0cmIpOworCXhoY2lfcHJpbnRfdHJiKHhoY2ks ICZ0cmIsICJSZXNwb25zZSBFbmFibGVTbG90Iik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCXNsb3RfaWQgPSBUUkJfVE9fU0xPVF9JRCh0cmIuZXZlbnRfY21kLmZsYWdzKTsKKwlpZiAo c2xvdF9pZCA9PSAwKSB7CisJCWRldl9lcnIoeGhjaS0+ZGV2LCAiRW5hYmxlU2xvdCByZXR1cm5l ZCByZXNlcnZlZCBzbG90IElEIDBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2ZGV2 LT5zbG90X2lkID0gc2xvdF9pZDsKKworCXJldHVybiAwOworfQorCitpbnQgeGhjaV92aXJ0ZGV2 X3Jlc2V0KHN0cnVjdCB4aGNpX3ZpcnR1YWxfZGV2aWNlICp2ZGV2KQoreworCXN0cnVjdCB4aGNp X2hjZCAqeGhjaSA9IHRvX3hoY2lfaGNkKHZkZXYtPnVkZXYtPmhvc3QpOworCXVuaW9uIHhoY2lf dHJiIHRyYjsKKwlpbnQgcmV0OworCisJLyogSWYgZGV2aWNlIGlzIG5vdCBzZXR1cCwgdGhlcmUg aXMgbm8gcG9pbnQgaW4gcmVzZXR0aW5nIGl0ICovCisJaWYgKEdFVF9TTE9UX1NUQVRFKGxlMzJf dG9fY3B1KHZkZXYtPm91dF9jdHgtPnNsb3QuZGV2X3N0YXRlKSkgPT0KKwkgICAgU0xPVF9TVEFU RV9ESVNBQkxFRCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworCW1lbXNldCgmdHJiLCAw LCBzaXplb2YodW5pb24geGhjaV90cmIpKTsKKwl0cmIuZXZlbnRfY21kLmZsYWdzID0gVFJCX1RZ UEUoVFJCX1JFU0VUX0RFVikgfAorCQlTTE9UX0lEX0ZPUl9UUkIodmRldi0+c2xvdF9pZCk7CisJ eGhjaV9wcmludF90cmIoeGhjaSwgJnRyYiwgIlJlcXVlc3QgIFJlc2V0Iik7CisJeGhjaV9pc3N1 ZV9jb21tYW5kKHhoY2ksICZ0cmIpOworCXJldCA9IHhoY2lfd2FpdF9mb3JfZXZlbnQoeGhjaSwg VFJCX0NPTVBMRVRJT04sICZ0cmIpOworCXhoY2lfcHJpbnRfdHJiKHhoY2ksICZ0cmIsICJSZXNw b25zZSBSZXNldCIpOworCisgICAgICAgIC8qCisJICogVGhlIFJlc2V0IERldmljZSBjb21tYW5k IGNhbid0IGZhaWwsIGFjY29yZGluZyB0byB0aGUgMC45NS8wLjk2IHNwZWMsCisgICAgICAgICAq IHVubGVzcyB3ZSB0cmllZCB0byByZXNldCBhIHNsb3QgSUQgdGhhdCB3YXNuJ3QgZW5hYmxlZCwK KyAgICAgICAgICogb3IgdGhlIGRldmljZSB3YXNuJ3QgaW4gdGhlIGFkZHJlc3NlZCBvciBjb25m aWd1cmVkIHN0YXRlLgorICAgICAgICAgKi8KKyAgICAgICAgc3dpdGNoIChHRVRfQ09NUF9DT0RF KHRyYi5ldmVudF9jbWQuc3RhdHVzKSkgeworICAgICAgICBjYXNlIENPTVBfQ01EX0FCT1JUOgor ICAgICAgICBjYXNlIENPTVBfQ01EX1NUT1A6CisgICAgICAgICAgICAgICAgZGV2X3dhcm4oeGhj aS0+ZGV2LCAiVGltZW91dCB3YWl0aW5nIGZvciByZXNldCBkZXZpY2UgY29tbWFuZFxuIik7Cisg ICAgICAgICAgICAgICAgcmV0ID0gLUVUSU1FRE9VVDsKKwkJYnJlYWs7CisgICAgICAgIGNhc2Ug Q09NUF9FQkFEU0xUOiAvKiAwLjk1IGNvbXBsZXRpb24gY29kZSBmb3IgYmFkIHNsb3QgSUQgKi8K KyAgICAgICAgY2FzZSBDT01QX0NUWF9TVEFURTogLyogMC45NiBjb21wbGV0aW9uIGNvZGUgZm9y IHNhbWUgdGhpbmcgKi8KKyAgICAgICAgICAgICAgICAvKiBEb24ndCB0cmVhdCB0aGlzIGFzIGFu IGVycm9yLiAgTWF5IGNoYW5nZSBteSBtaW5kIGxhdGVyLiAqLworICAgICAgICAgICAgICAgIHJl dCA9IDA7CisgICAgICAgIGNhc2UgQ09NUF9TVUNDRVNTOgorICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7CisgICAg ICAgIH0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgeGhjaV92aXJ0ZGV2X2luaXQo c3RydWN0IHhoY2lfdmlydHVhbF9kZXZpY2UgKnZkZXYpCit7CisJc3RydWN0IHhoY2lfaGNkICp4 aGNpID0gdG9feGhjaV9oY2QodmRldi0+dWRldi0+aG9zdCk7CisJc3RydWN0IHVzYl9kZXZpY2Ug KnRvcF9kZXY7CisJaW50IG1heF9wYWNrZXRzOworCisJLyogRmluZCB0aGUgcm9vdCBodWIgcG9y dCB0aGlzIGRldmljZSBpcyB1bmRlciAqLworCXZkZXYtPnJlYWxfcG9ydCA9IHhoY2lfZmluZF9y ZWFsX3BvcnRfbnVtYmVyKHhoY2ksIHZkZXYtPnVkZXYpOworCS8qIFNldCB0aGUgcG9ydCBudW1i ZXIgaW4gdGhlIHZpcnR1YWxfZGV2aWNlIHRvIHRoZSBmYWtlZCBwb3J0IG51bWJlciAqLworICAg ICAgICBmb3IgKHRvcF9kZXYgPSB2ZGV2LT51ZGV2OyB0b3BfZGV2LT5wYXJlbnQgJiYgdG9wX2Rl di0+cGFyZW50LT5wYXJlbnQ7CisJICAgICB0b3BfZGV2ID0gdG9wX2Rldi0+cGFyZW50KQorICAg ICAgICAgICAgICAgIC8qIEZvdW5kIGRldmljZSBiZWxvdyByb290IGh1YiAqLzsKKwl2ZGV2LT5m YWtlX3BvcnQgPSB0b3BfZGV2LT5wb3J0bnI7CisKKwkvKiA0LjMuMyAzKSBJbml0YWxpemUgSW5w dXQgU2xvdCBDb250ZXh0ICovCisJdmRldi0+aW5fY3R4LT5zbG90LmRldl9pbmZvID0gY3B1X3Rv X2xlMzIoTEFTVF9DVFgoMSkgfCB2ZGV2LT5yb3V0ZSk7CisJc3dpdGNoICh2ZGV2LT51ZGV2LT5z cGVlZCkgeworCWNhc2UgVVNCX1NQRUVEX1NVUEVSOgorCQl2ZGV2LT5pbl9jdHgtPnNsb3QuZGV2 X2luZm8gfD0gY3B1X3RvX2xlMzIoU0xPVF9TUEVFRF9TUyk7CisJCW1heF9wYWNrZXRzID0gNTEy OworCQlicmVhazsKKwljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQl2ZGV2LT5pbl9jdHgtPnNsb3Qu ZGV2X2luZm8gfD0gY3B1X3RvX2xlMzIoU0xPVF9TUEVFRF9IUyk7CisJCW1heF9wYWNrZXRzID0g NjQ7CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCXZkZXYtPmluX2N0eC0+c2xv dC5kZXZfaW5mbyB8PSBjcHVfdG9fbGUzMihTTE9UX1NQRUVEX0ZTKTsKKwkJbWF4X3BhY2tldHMg PSA2NDsKKwkJYnJlYWs7CisJY2FzZSBVU0JfU1BFRURfTE9XOgorCQl2ZGV2LT5pbl9jdHgtPnNs b3QuZGV2X2luZm8gfD0gY3B1X3RvX2xlMzIoU0xPVF9TUEVFRF9MUyk7CisJCW1heF9wYWNrZXRz ID0gODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbWF4X3BhY2tldHMgPSAwOworCQlicmVhazsK Kwl9CisJdmRldi0+aW5fY3R4LT5zbG90LmRldl9pbmZvMiB8PQorCQljcHVfdG9fbGUzMihST09U X0hVQl9QT1JUKHZkZXYtPnJlYWxfcG9ydCkpOworCisJLyogNC4zLjMgNCkgSW5pdGFsaXplIFRy YW5zZmVyIFJpbmcgKi8KKwl2ZGV2LT5lcFswXSA9IHhoY2lfZ2V0X2VuZHBvaW50X3JpbmcoeGhj aSk7CisJaWYgKCF2ZGV2LT5lcFswXSkKKwkJcmV0dXJuIC1FTk9NRU07CisJeGhjaV9yaW5nX2lu aXQodmRldi0+ZXBbMF0sIE5VTV9UUkFOU0ZFUl9UUkJTLCBUWVBFX0NUUkwpOworCisJLyogNC4z LjMgNSkgSW5pdGlhbGl6ZSBJbnB1dCBDb250cm9sIEVuZHBvaW50IDAgQ29udGV4dCAqLworCXZk ZXYtPmluX2N0eC0+ZXBbMF0uZXBfaW5mbzIgPSBjcHVfdG9fbGUzMihFUF9UWVBFKENUUkxfRVAp KTsKKwl2ZGV2LT5pbl9jdHgtPmVwWzBdLmVwX2luZm8yIHw9IE1BWF9CVVJTVCgwKSB8IEVSUk9S X0NPVU5UKDMpOworCXZkZXYtPmluX2N0eC0+ZXBbMF0uZXBfaW5mbzIgfD0gTUFYX1BBQ0tFVCht YXhfcGFja2V0cyk7CisJdmRldi0+aW5fY3R4LT5lcFswXS50eF9pbmZvID0gQVZHX1RSQl9MRU5H VEhfRk9SX0VQKDgpOworCXZkZXYtPmluX2N0eC0+ZXBbMF0uZGVxID0gY3B1X3RvX2xlNjQoKGRt YV9hZGRyX3QpdmRldi0+ZXBbMF0tPmVucXVldWUgfAorCQkJCQkgICAgICB2ZGV2LT5lcFswXS0+ Y3ljbGVfc3RhdGUpOworCisgICAgICAgIC8qIDQuMy4zIDYrNykgSW5pdGFsaXplIGFuZCBTZXQg RGV2aWNlIENvbnRleHQgQmFzZSBBZGRyZXNzIEFycmF5ICovCisJeGhjaS0+ZGNiYWFbdmRldi0+ c2xvdF9pZF0gPSBjcHVfdG9fbGU2NCgoZG1hX2FkZHJfdCl2ZGV2LT5vdXRfY3R4KTsKKworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IHhoY2lfdmlydGRldl9jb25maWd1cmUoc3RydWN0IHho Y2lfdmlydHVhbF9kZXZpY2UgKnZkZXYsIGludCBjb25maWcpCit7CisJc3RydWN0IHhoY2lfaGNk ICp4aGNpID0gdG9feGhjaV9oY2QodmRldi0+dWRldi0+aG9zdCk7CisJc3RydWN0IHVzYl9kZXZp Y2UgKnVkZXYgPSB2ZGV2LT51ZGV2OworCXVuaW9uIHhoY2lfdHJiIHRyYjsKKwl1MzIgYWRkX2Zs YWdzID0gMCwgbGFzdF9jdHg7CisJaW50IGksIGo7CisJaW50IHJldDsKKworCWZvciAoaSA9IDA7 IGkgPCB1ZGV2LT5jb25maWcubm9fb2ZfaWY7IGkrKykgeworCQlzdHJ1Y3QgdXNiX2ludGVyZmFj ZSAqaW50ZiA9ICZ1ZGV2LT5jb25maWcuaW50ZXJmYWNlW2ldOworCisJCWZvciAoaiA9IDA7IGog PCBpbnRmLT5ub19vZl9lcDsgaisrKSB7CisJCQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0 b3IgKmVwID0gJmludGYtPmVwX2Rlc2Nbal07CisJCQl1OCB0eXBlID0gZXAtPmJtQXR0cmlidXRl cyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLOworCQkJdTggZXB0eXBlID0geGhjaV9nZXRf ZW5kcG9pbnRfdHlwZShlcC0+YkVuZHBvaW50QWRkcmVzcywKKwkJCQkJCQkgICBlcC0+Ym1BdHRy aWJ1dGVzKTsKKwkJCXU4IGVwaSA9IHhoY2lfZ2V0X2VuZHBvaW50X2luZGV4KGVwLT5iRW5kcG9p bnRBZGRyZXNzLAorCQkJCQkJCSBlcC0+Ym1BdHRyaWJ1dGVzKTsKKwkJCXN0cnVjdCB4aGNpX2Vw X2N0eCAqY3R4ID0gJnZkZXYtPmluX2N0eC0+ZXBbZXBpXTsKKwkJCXUxNiBtYXhfcGFja2V0LCBt YXhfYnVyc3QsIG1wczsKKwkJCXUzMiBpbmZvLCBpbmZvMiwgdHhfaW5mbzsKKworCQkJaWYgKHR5 cGUgIT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykgeworCQkJCWRldl9kYmcoeGhjaS0+ZGV2LCAi RVAgJXUgdHlwZSAldSBpcyBub3QgQnVsa1xuIiwKKwkJCQkJaiwgdHlwZSk7CisJCQkJY29udGlu dWU7CisJCQl9CisKKwkJCXZkZXYtPmVwW2VwaV0gPSB4aGNpX2dldF9lbmRwb2ludF9yaW5nKHho Y2kpOworCQkJaWYgKCF2ZGV2LT5lcFtlcGldKQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJeGhj aV9yaW5nX2luaXQodmRldi0+ZXBbZXBpXSwgTlVNX1RSQU5TRkVSX1RSQlMsCisJCQkJICAgICAg IFRZUEVfQlVMSyk7CisKKwkJCWFkZF9mbGFncyB8PSBCSVQoZXBpKzEpOworCQkJaW5mbyA9IEVQ X0lOVEVSVkFMKGVwLT5iSW50ZXJ2YWwpIHwgRVBfTVVMVCgwKTsKKwkJCWluZm8yID0gRVBfVFlQ RShlcHR5cGUpOworCQkJaWYgKHR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykKKwkJCQlp bmZvMiB8PSBFUlJPUl9DT1VOVCgwKTsKKwkJCWVsc2UKKwkJCQlpbmZvMiB8PSBFUlJPUl9DT1VO VCgzKTsKKworCQkJbXBzID0gbGUxNl90b19jcHUoZXAtPndNYXhQYWNrZXRTaXplKTsKKwkJCW1h eF9wYWNrZXQgPSBHRVRfTUFYX1BBQ0tFVChtcHMpOworCQkJbWF4X2J1cnN0ID0gMDsKKwkJCXN3 aXRjaCAodWRldi0+c3BlZWQpIHsKKwkJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCQkJLyogU29t ZSBkZXZpY2VzIGdldCB0aGlzIHdyb25nICovCisJCQkJaWYgKHR5cGUgPT0gVVNCX0VORFBPSU5U X1hGRVJfQlVMSykKKwkJCQkJbWF4X3BhY2tldCA9IDUxMjsKKwkJCQlpZiAodHlwZSA9PSBVU0Jf RU5EUE9JTlRfWEZFUl9JU09DIHx8CisJCQkJICAgIHR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJf SU5UKQorCQkJCQltYXhfYnVyc3QgPSAobXBzICYgMHgxODAwKSA+PiAxMTsKKwkJCQlicmVhazsK KwkJCX0KKwkJCWluZm8yIHw9IE1BWF9QQUNLRVQobWF4X3BhY2tldCkgfCBNQVhfQlVSU1QobWF4 X2J1cnN0KTsKKworCQkJc3dpdGNoICh0eXBlKSB7CisJCQljYXNlIFVTQl9FTkRQT0lOVF9YRkVS X0NPTlRST0w6CisJCQkJdHhfaW5mbyA9IEFWR19UUkJfTEVOR1RIX0ZPUl9FUCg4KTsKKwkJCQli cmVhazsKKwkJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoKKwkJCWNhc2UgVVNCX0VORFBP SU5UX1hGRVJfQlVMSzoKKwkJCQl0eF9pbmZvID0gQVZHX1RSQl9MRU5HVEhfRk9SX0VQKDMgKiAx MDI0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOgorCQkJCXR4 X2luZm8gPSBBVkdfVFJCX0xFTkdUSF9GT1JfRVAoMSAqIDEwMjQpOworCQkJCWJyZWFrOworCQkJ fQorCisJCQljdHgtPmVwX2luZm8gPSBjcHVfdG9fbGUzMihpbmZvKTsKKwkJCWN0eC0+ZXBfaW5m bzIgPSBjcHVfdG9fbGUzMihpbmZvMik7CisJCQljdHgtPnR4X2luZm8gPSBjcHVfdG9fbGUzMih0 eF9pbmZvKTsKKwkJCWN0eC0+ZGVxID0KKwkJCQljcHVfdG9fbGU2NCgoZG1hX2FkZHJfdCl2ZGV2 LT5lcFtlcGldLT5lbnF1ZXVlIHwKKwkJCQkJICAgIHZkZXYtPmVwW2VwaV0tPmN5Y2xlX3N0YXRl KTsKKwkJfQorCX0KKworCWxhc3RfY3R4ID0gZmxzKGFkZF9mbGFncykgLSAxOworCisgICAgICAg IC8qIFNlZSBzZWN0aW9uIDQuNi42IC0gQTAgPSAxOyBBMSA9IEQwID0gRDEgPSAwICovCisJdmRl di0+aW5fY3R4LT5pY2MuYWRkX2ZsYWdzID0gY3B1X3RvX2xlMzIoYWRkX2ZsYWdzKTsKKyAgICAg ICAgdmRldi0+aW5fY3R4LT5pY2MuYWRkX2ZsYWdzIHw9IGNwdV90b19sZTMyKFNMT1RfRkxBRyk7 CisgICAgICAgIHZkZXYtPmluX2N0eC0+aWNjLmFkZF9mbGFncyAmPSBjcHVfdG9fbGUzMih+RVAw X0ZMQUcpOworICAgICAgICB2ZGV2LT5pbl9jdHgtPmljYy5kcm9wX2ZsYWdzICY9IGNwdV90b19s ZTMyKH4oU0xPVF9GTEFHIHwgRVAwX0ZMQUcpKTsKKworCS8qIERvbid0IGlzc3VlIHRoZSBjb21t YW5kIGlmIHRoZXJlJ3Mgbm8gZW5kcG9pbnRzIHRvIHVwZGF0ZS4gKi8KKyAgICAgICAgaWYgKHZk ZXYtPmluX2N0eC0+aWNjLmFkZF9mbGFncyA9PSBjcHVfdG9fbGUzMihTTE9UX0ZMQUcpICYmCisg ICAgICAgICAgICB2ZGV2LT5pbl9jdHgtPmljYy5kcm9wX2ZsYWdzID09IDApCisJCXJldHVybiAw OworCisJdmRldi0+aW5fY3R4LT5zbG90LmRldl9pbmZvICY9IGNwdV90b19sZTMyKH5MQVNUX0NU WF9NQVNLKTsKKwl2ZGV2LT5pbl9jdHgtPnNsb3QuZGV2X2luZm8gfD0gY3B1X3RvX2xlMzIoTEFT VF9DVFgobGFzdF9jdHgpKTsKKworICAgICAgICAvKiBJc3N1ZSBDb25maWd1cmUgRW5kcG9pbnQg Q29tbWFuZCAqLworCW1lbXNldCgmdHJiLCAwLCBzaXplb2YodW5pb24geGhjaV90cmIpKTsKKwl4 aGNpX3dyaXRlXzY0KChkbWFfYWRkcl90KXZkZXYtPmluX2N0eCwgJnRyYi5ldmVudF9jbWQuY21k X3RyYik7CisJdHJiLmV2ZW50X2NtZC5mbGFncyA9IFRSQl9UWVBFKFRSQl9DT05GSUdfRVApIHwK KwkJU0xPVF9JRF9GT1JfVFJCKHZkZXYtPnNsb3RfaWQpOworCXhoY2lfcHJpbnRfdHJiKHhoY2ks ICZ0cmIsICJSZXF1ZXN0ICBDb25maWd1cmVFbmRwb2ludCIpOworCXhoY2lfaXNzdWVfY29tbWFu ZCh4aGNpLCAmdHJiKTsKKwlyZXQgPSB4aGNpX3dhaXRfZm9yX2V2ZW50KHhoY2ksIFRSQl9DT01Q TEVUSU9OLCAmdHJiKTsKKwl4aGNpX3ByaW50X3RyYih4aGNpLCAmdHJiLCAiUmVzcG9uc2UgQ29u ZmlndXJlRW5kcG9pbnQiKTsKKwl4aGNpX3ZpcnRkZXZfemVyb19pbl9jdHgodmRldik7CisKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHhoY2lfdmlydGRldl9kZWNvbmZpZ3VyZShzdHJ1 Y3QgeGhjaV92aXJ0dWFsX2RldmljZSAqdmRldikKK3sKKwlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kg PSB0b194aGNpX2hjZCh2ZGV2LT51ZGV2LT5ob3N0KTsKKwl1bmlvbiB4aGNpX3RyYiB0cmI7CisJ aW50IHJldDsKKworICAgICAgICAvKiBJc3N1ZSBEZWNvbmZpZ3VyZSBFbmRwb2ludCBDb21tYW5k ICovCisJbWVtc2V0KCZ0cmIsIDAsIHNpemVvZih1bmlvbiB4aGNpX3RyYikpOworCXhoY2lfd3Jp dGVfNjQoKGRtYV9hZGRyX3QpdmRldi0+aW5fY3R4LCAmdHJiLmV2ZW50X2NtZC5jbWRfdHJiKTsK Kwl0cmIuZXZlbnRfY21kLmZsYWdzID0gVFJCX1RZUEUoVFJCX0NPTkZJR19FUCkgfCBUUkJfREMg fAorCQlTTE9UX0lEX0ZPUl9UUkIodmRldi0+c2xvdF9pZCk7CisJeGhjaV9wcmludF90cmIoeGhj aSwgJnRyYiwgIlJlcXVlc3QgIERlY29uZmlndXJlRW5kcG9pbnQiKTsKKwl4aGNpX2lzc3VlX2Nv bW1hbmQoeGhjaSwgJnRyYik7CisJcmV0ID0geGhjaV93YWl0X2Zvcl9ldmVudCh4aGNpLCBUUkJf Q09NUExFVElPTiwgJnRyYik7CisJeGhjaV9wcmludF90cmIoeGhjaSwgJnRyYiwgIlJlc3BvbnNl IERlY29uZmlndXJlRW5kcG9pbnQiKTsKKwl4aGNpX3ZpcnRkZXZfemVyb19pbl9jdHgodmRldik7 CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHhoY2lfdmlydGRldl9zZXR1cChzdHJ1 Y3QgeGhjaV92aXJ0dWFsX2RldmljZSAqdmRldiwKKwkJCSAgICAgIGVudW0geGhjaV9zZXR1cF9k ZXYgc2V0dXApCit7CisJc3RydWN0IHhoY2lfaGNkICp4aGNpID0gdG9feGhjaV9oY2QodmRldi0+ dWRldi0+aG9zdCk7CisJdW5pb24geGhjaV90cmIgdHJiOworCWludCByZXQ7CisKKwkvKgorCSAq IElmIHRoaXMgaXMgdGhlIGZpcnN0IFNldCBBZGRyZXNzIHNpbmNlIGRldmljZQorCSAqIHBsdWct aW4gdGhlbiBpbml0aWFsaXplIFNsb3QgQ29udGV4dAorCSAqLworCWlmICghdmRldi0+aW5fY3R4 LT5zbG90LmRldl9pbmZvKQorCQl4aGNpX3ZpcnRkZXZfaW5pdCh2ZGV2KTsKKwllbHNlCisJLyog T3RoZXJ3aXNlLCB1cGRhdGUgQ29udHJvbCBSaW5nIERlcXVldWUgcG9pbnRlciAqLworCQl2ZGV2 LT5pbl9jdHgtPmVwWzBdLmRlcSA9CisJCQljcHVfdG9fbGU2NCgoZG1hX2FkZHJfdCl2ZGV2LT5l cFswXS0+ZW5xdWV1ZSB8CisJCQkJICAgIHZkZXYtPmVwWzBdLT5jeWNsZV9zdGF0ZSk7CisKKwl2 ZGV2LT5pbl9jdHgtPmljYy5hZGRfZmxhZ3MgPSBjcHVfdG9fbGUzMihTTE9UX0ZMQUcgfCBFUDBf RkxBRyk7CisJdmRldi0+aW5fY3R4LT5pY2MuZHJvcF9mbGFncyA9IDA7CisKKyAgICAgICAgLyog SXNzdWUgQWRkcmVzcyBEZXZpY2UgQ29tbWFuZCAqLworCW1lbXNldCgmdHJiLCAwLCBzaXplb2Yo dW5pb24geGhjaV90cmIpKTsKKwl4aGNpX3dyaXRlXzY0KChkbWFfYWRkcl90KXZkZXYtPmluX2N0 eCwgJnRyYi5ldmVudF9jbWQuY21kX3RyYik7CisJdHJiLmV2ZW50X2NtZC5mbGFncyA9IFRSQl9U WVBFKFRSQl9BRERSX0RFVikgfAorCQlTTE9UX0lEX0ZPUl9UUkIodmRldi0+c2xvdF9pZCk7CisJ aWYgKHNldHVwID09IFNFVFVQX0NPTlRFWFRfT05MWSkKKwkJdHJiLmV2ZW50X2NtZC5mbGFncyB8 PSBUUkJfQlNSOworCXhoY2lfcHJpbnRfdHJiKHhoY2ksICZ0cmIsICJSZXF1ZXN0ICBBZGRyZXNz RGV2aWNlIik7CisJeGhjaV9pc3N1ZV9jb21tYW5kKHhoY2ksICZ0cmIpOworCXJldCA9IHhoY2lf d2FpdF9mb3JfZXZlbnQoeGhjaSwgVFJCX0NPTVBMRVRJT04sICZ0cmIpOworCXhoY2lfcHJpbnRf dHJiKHhoY2ksICZ0cmIsICJSZXNwb25zZSBBZGRyZXNzRGV2aWNlIik7CisJeGhjaV92aXJ0ZGV2 X3plcm9faW5fY3R4KHZkZXYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB4aGNp X3ZpcnRkZXZfc2V0X2FkZHJlc3Moc3RydWN0IHhoY2lfdmlydHVhbF9kZXZpY2UgKnZkZXYpCit7 CisgICAgICAgIHJldHVybiB4aGNpX3ZpcnRkZXZfc2V0dXAodmRldiwgU0VUVVBfQ09OVEVYVF9B RERSRVNTKTsKK30KKworc3RhdGljIGludCB4aGNpX3ZpcnRkZXZfZW5hYmxlKHN0cnVjdCB4aGNp X3ZpcnR1YWxfZGV2aWNlICp2ZGV2KQoreworICAgICAgICByZXR1cm4geGhjaV92aXJ0ZGV2X3Nl dHVwKHZkZXYsIFNFVFVQX0NPTlRFWFRfT05MWSk7Cit9CisKK3N0YXRpYyBpbnQgeGhjaV92aXJ0 ZGV2X2F0dGFjaChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2 KQoreworCXN0cnVjdCB4aGNpX3ZpcnR1YWxfZGV2aWNlICp2ZGV2OworCWludCByZXQ7CisKKwl2 ZGV2ID0geGhjaV9hbGxvY192aXJ0ZGV2KHhoY2ksIHVkZXYpOworCWlmIChJU19FUlIodmRldikp CisJCXJldHVybiBQVFJfRVJSKHZkZXYpOworCisJcmV0ID0geGhjaV92aXJ0ZGV2X2VuYWJsZV9z bG90KHZkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4geGhjaV92aXJ0 ZGV2X2VuYWJsZSh2ZGV2KTsKK30KKworaW50IHhoY2lfdmlydGRldl9kZXRhY2goc3RydWN0IHho Y2lfdmlydHVhbF9kZXZpY2UgKnZkZXYpCit7CisJeGhjaV92aXJ0ZGV2X2RlY29uZmlndXJlKHZk ZXYpOworCXhoY2lfdmlydGRldl9kaXNhYmxlX3Nsb3QodmRldik7CisJeGhjaV9mcmVlX3ZpcnRk ZXYodmRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4aGNpX3N1Ym1pdF9ub3Jt YWwoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHVuc2lnbmVkIGxvbmcgcGlwZSwKKwkJCSAgICAg IHZvaWQgKmJ1ZmZlciwgaW50IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgdXNiX2hvc3QgKmhvc3QgPSB1 ZGV2LT5ob3N0OworCXN0cnVjdCB4aGNpX2hjZCAqeGhjaSA9IHRvX3hoY2lfaGNkKGhvc3QpOwor CXN0cnVjdCB4aGNpX3ZpcnR1YWxfZGV2aWNlICp2ZGV2OworCXVuaW9uIHhoY2lfdHJiIHRyYjsK Kwl1OCBlcGFkZHIgPSAodXNiX3BpcGVpbihwaXBlKSA/IFVTQl9ESVJfSU4gOiBVU0JfRElSX09V VCkgfAorCQl1c2JfcGlwZWVuZHBvaW50KHBpcGUpOworCXU4IGVwaSA9IHhoY2lfZ2V0X2VuZHBv aW50X2luZGV4KGVwYWRkciwgdXNiX3BpcGV0eXBlKHBpcGUpKTsKKwlpbnQgcmV0OworCisJdmRl diA9IHhoY2lfZmluZF92aXJ0ZGV2KHhoY2ksIHVkZXYpOworCWlmICghdmRldikKKwkJcmV0dXJu IC1FTk9ERVY7CisKKwlkZXZfZGJnKHhoY2ktPmRldiwgIiVzIHVkZXYgJXAgdmRldiAlcCBzbG90 ICV1IHN0YXRlICV1IGVwaSAldSBpbl9jdHggJXAgb3V0X2N0eCAlcFxuIiwKKwkJX19mdW5jX18s IHVkZXYsIHZkZXYsIHZkZXYtPnNsb3RfaWQsCisJCUdFVF9TTE9UX1NUQVRFKGxlMzJfdG9fY3B1 KHZkZXYtPm91dF9jdHgtPnNsb3QuZGV2X3N0YXRlKSksIGVwaSwKKwkJdmRldi0+aW5fY3R4LCB2 ZGV2LT5vdXRfY3R4KTsKKworCS8qIE5vcm1hbCBUUkIgKi8KKwltZW1zZXQoJnRyYiwgMCwgc2l6 ZW9mKHVuaW9uIHhoY2lfdHJiKSk7CisJdHJiLmV2ZW50X2NtZC5jbWRfdHJiID0gY3B1X3RvX2xl NjQoKGRtYV9hZGRyX3QpYnVmZmVyKTsKKwkvKiBGSVhNRTogVEQgcmVtYWluZGVyICovCisJdHJi LmV2ZW50X2NtZC5zdGF0dXMgPSBUUkJfTEVOKGxlbmd0aCkgfCBUUkJfSU5UUl9UQVJHRVQoMCk7 CisJdHJiLmV2ZW50X2NtZC5mbGFncyA9IFRSQl9UWVBFKFRSQl9OT1JNQUwpIHwgVFJCX0lPQzsK KwlpZiAodXNiX3BpcGVpbihwaXBlKSkKKwkJdHJiLmV2ZW50X2NtZC5mbGFncyB8PSBUUkJfSVNQ OworCXhoY2lfcHJpbnRfdHJiKHhoY2ksICZ0cmIsICJSZXF1ZXN0ICBOb3JtYWwiKTsKKwl4aGNp X3ZpcnRkZXZfaXNzdWVfdHJhbnNmZXIodmRldiwgZXBpLCAmdHJiLCB0cnVlKTsKKwlyZXQgPSB4 aGNpX3dhaXRfZm9yX2V2ZW50KHhoY2ksIFRSQl9UUkFOU0ZFUiwgJnRyYik7CisJeGhjaV9wcmlu dF90cmIoeGhjaSwgJnRyYiwgIlJlc3BvbnNlIE5vcm1hbCIpOworCisJc3dpdGNoIChyZXQpIHsK KwljYXNlIC1DT01QX1NIT1JUX1RYOgorCQl1ZGV2LT5zdGF0dXMgPSAwOworCQl1ZGV2LT5hY3Rf bGVuID0gbGVuZ3RoIC0gRVZFTlRfVFJCX0xFTih0cmIuZXZlbnRfY21kLnN0YXR1cyk7CisJCXJl dHVybiAwOworCWNhc2UgMDoKKwkJdWRldi0+c3RhdHVzID0gMDsKKwkJdWRldi0+YWN0X2xlbiA9 IDA7CisJCXJldHVybiAwOworCWNhc2UgLUVUSU1FRE9VVDoKKwkJdWRldi0+c3RhdHVzID0gVVNC X1NUX0NSQ19FUlI7CisJCXJldHVybiAtMTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQor fQorCitzdGF0aWMgaW50IHhoY2lfc3VibWl0X2NvbnRyb2woc3RydWN0IHVzYl9kZXZpY2UgKnVk ZXYsIHVuc2lnbmVkIGxvbmcgcGlwZSwKKwkJCSAgICAgICB2b2lkICpidWZmZXIsIGludCBsZW5n dGgsIHN0cnVjdCBkZXZyZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IHVzYl9ob3N0ICpob3N0ID0g dWRldi0+aG9zdDsKKwlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kgPSB0b194aGNpX2hjZChob3N0KTsK KwlzdHJ1Y3QgeGhjaV92aXJ0dWFsX2RldmljZSAqdmRldjsKKwl1bmlvbiB4aGNpX3RyYiB0cmI7 CisJaW50IHJldDsKKworCWRldl9kYmcoeGhjaS0+ZGV2LCAiJXMgcmVxICV1ICglI3gpLCB0eXBl ICV1ICglI3gpLCB2YWx1ZSAldSAoJSN4KSwgaW5kZXggJXUgKCUjeCksIGxlbmd0aCAldSAoJSN4 KVxuIiwKKwkJX19mdW5jX18sIHJlcS0+cmVxdWVzdCwgcmVxLT5yZXF1ZXN0LAorCQlyZXEtPnJl cXVlc3R0eXBlLCByZXEtPnJlcXVlc3R0eXBlLAorCQlsZTE2X3RvX2NwdShyZXEtPnZhbHVlKSwg bGUxNl90b19jcHUocmVxLT52YWx1ZSksCisJCWxlMTZfdG9fY3B1KHJlcS0+aW5kZXgpLCBsZTE2 X3RvX2NwdShyZXEtPmluZGV4KSwKKwkJbGUxNl90b19jcHUocmVxLT5sZW5ndGgpLCBsZTE2X3Rv X2NwdShyZXEtPmxlbmd0aCkpOworCisJdmRldiA9IHhoY2lfZmluZF92aXJ0ZGV2KHhoY2ksIHVk ZXYpOworCWlmICghdmRldikgeworCQlyZXQgPSB4aGNpX3ZpcnRkZXZfYXR0YWNoKHhoY2ksIHVk ZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJdmRldiA9IHhoY2lfZmluZF92aXJ0 ZGV2KHhoY2ksIHVkZXYpOworCX0KKwlpZiAoIXZkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJ ZGV2X2RiZyh4aGNpLT5kZXYsICIlcyB1ZGV2ICVwIHZkZXYgJXAgc2xvdCAldSBzdGF0ZSAldSBl cGkgJXUgaW5fY3R4ICVwIG91dF9jdHggJXBcbiIsCisJCV9fZnVuY19fLCB1ZGV2LCB2ZGV2LCB2 ZGV2LT5zbG90X2lkLAorCQlHRVRfU0xPVF9TVEFURShsZTMyX3RvX2NwdSh2ZGV2LT5vdXRfY3R4 LT5zbG90LmRldl9zdGF0ZSkpLCAwLAorCQl2ZGV2LT5pbl9jdHgsIHZkZXYtPm91dF9jdHgpOwor CisJc3dpdGNoIChyZXEtPnJlcXVlc3QpIHsKKwljYXNlIFVTQl9SRVFfU0VUX0FERFJFU1M6CisJ CXJldHVybiB4aGNpX3ZpcnRkZXZfc2V0X2FkZHJlc3ModmRldik7CisJCWJyZWFrOworCWNhc2Ug VVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTjoKKwkJcmV0ID0geGhjaV92aXJ0ZGV2X2NvbmZpZ3Vy ZSh2ZGV2LCBsZTE2X3RvX2NwdShyZXEtPnZhbHVlKSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4g cmV0OworCQlicmVhazsKKwl9OworCisJLyogU2V0dXAgVFJCICovCisJbWVtc2V0KCZ0cmIsIDAs IHNpemVvZih1bmlvbiB4aGNpX3RyYikpOworCXRyYi5nZW5lcmljLmZpZWxkWzBdID0gbGUxNl90 b19jcHUocmVxLT52YWx1ZSkgPDwgMTYgfAorCQlyZXEtPnJlcXVlc3QgPDwgOCB8IHJlcS0+cmVx dWVzdHR5cGU7CisJdHJiLmdlbmVyaWMuZmllbGRbMV0gPSBsZTE2X3RvX2NwdShyZXEtPmxlbmd0 aCkgPDwgMTYgfAorCQlsZTE2X3RvX2NwdShyZXEtPmluZGV4KTsKKwl0cmIuZXZlbnRfY21kLnN0 YXR1cyA9IFRSQl9MRU4oOCkgfCBUUkJfSU5UUl9UQVJHRVQoMCk7CisJdHJiLmV2ZW50X2NtZC5m bGFncyA9IFRSQl9UWVBFKFRSQl9TRVRVUCkgfCBUUkJfSURUOworCWlmICh4aGNpLT5oY2lfdmVy c2lvbiA9PSAweDEwMCAmJiBsZW5ndGggPiAwKSB7CisJCWlmIChyZXEtPnJlcXVlc3R0eXBlICYg VVNCX0RJUl9JTikKKwkJCXRyYi5ldmVudF9jbWQuZmxhZ3MgfD0gVFJCX1RYX1RZUEUoVFJCX0RB VEFfSU4pOworCQllbHNlCisJCQl0cmIuZXZlbnRfY21kLmZsYWdzIHw9IFRSQl9UWF9UWVBFKFRS Ql9EQVRBX09VVCk7CisJfQorCXhoY2lfcHJpbnRfdHJiKHhoY2ksICZ0cmIsICJSZXF1ZXN0ICBT ZXR1cCAiKTsKKwl4aGNpX3ZpcnRkZXZfaXNzdWVfdHJhbnNmZXIodmRldiwgMCwgJnRyYiwgZmFs c2UpOworCisJLyogRGF0YSBUUkIgKi8KKwlpZiAobGVuZ3RoID4gMCkgeworCQltZW1zZXQoJnRy YiwgMCwgc2l6ZW9mKHVuaW9uIHhoY2lfdHJiKSk7CisJCXRyYi5ldmVudF9jbWQuY21kX3RyYiA9 IGNwdV90b19sZTY0KChkbWFfYWRkcl90KWJ1ZmZlcik7CisJCS8qIEZJWE1FOiBURCByZW1haW5k ZXIgKi8KKwkJdHJiLmV2ZW50X2NtZC5zdGF0dXMgPSBUUkJfTEVOKGxlbmd0aCkgfCBUUkJfSU5U Ul9UQVJHRVQoMCk7CisJCXRyYi5ldmVudF9jbWQuZmxhZ3MgPSBUUkJfVFlQRShUUkJfREFUQSkg fCBUUkJfSU9DOworCQlpZiAocmVxLT5yZXF1ZXN0dHlwZSAmIFVTQl9ESVJfSU4pCisJCQl0cmIu ZXZlbnRfY21kLmZsYWdzIHw9IFRSQl9JU1AgfCBUUkJfRElSX0lOOworCQl4aGNpX3ByaW50X3Ry Yih4aGNpLCAmdHJiLCAiUmVxdWVzdCAgRGF0YSAgIik7CisJCXhoY2lfdmlydGRldl9pc3N1ZV90 cmFuc2Zlcih2ZGV2LCAwLCAmdHJiLCBmYWxzZSk7CisJfQorCisJLyogU3RhdHVzIFRSQiAqLwor CW1lbXNldCgmdHJiLCAwLCBzaXplb2YodW5pb24geGhjaV90cmIpKTsKKwl0cmIuZXZlbnRfY21k LnN0YXR1cyA9IFRSQl9JTlRSX1RBUkdFVCgwKTsKKwlpZiAobGVuZ3RoID4gMCAmJiByZXEtPnJl cXVlc3R0eXBlICYgVVNCX0RJUl9JTikKKwkJdHJiLmV2ZW50X2NtZC5mbGFncyA9IDA7CisJZWxz ZQorCQl0cmIuZXZlbnRfY21kLmZsYWdzID0gVFJCX0RJUl9JTjsKKwl0cmIuZXZlbnRfY21kLmZs YWdzIHw9IFRSQl9UWVBFKFRSQl9TVEFUVVMpIHwgVFJCX0lPQzsKKwl4aGNpX3ByaW50X3RyYih4 aGNpLCAmdHJiLCAiUmVxdWVzdCAgU3RhdHVzIik7CisJeGhjaV92aXJ0ZGV2X2lzc3VlX3RyYW5z ZmVyKHZkZXYsIDAsICZ0cmIsIHRydWUpOworCisJaWYgKGxlbmd0aCA+IDAgJiYgcmVxLT5yZXF1 ZXN0dHlwZSAmIFVTQl9ESVJfSU4pIHsKKwkJcmV0ID0geGhjaV93YWl0X2Zvcl9ldmVudCh4aGNp LCBUUkJfVFJBTlNGRVIsICZ0cmIpOworCQl4aGNpX3ByaW50X3RyYih4aGNpLCAmdHJiLCAiUmVz cG9uc2UgRGF0YSAgIik7CisJCWlmIChyZXQgPT0gLUNPTVBfU0hPUlRfVFgpCisJCQlsZW5ndGgg LT0gRVZFTlRfVFJCX0xFTih0cmIuZXZlbnRfY21kLnN0YXR1cyk7CisJCWVsc2UgaWYgKHJldCA8 IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHhoY2lfd2FpdF9mb3JfZXZlbnQoeGhj aSwgVFJCX1RSQU5TRkVSLCAmdHJiKTsKKwl4aGNpX3ByaW50X3RyYih4aGNpLCAmdHJiLCAiUmVz cG9uc2UgU3RhdHVzIik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4g bGVuZ3RoOworfQorCisvKgorICogeEhDSSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyCisgKi8KKwor c3RhdGljIHZvaWQgeGhjaV9kbWFfYWxsb2Moc3RydWN0IHhoY2lfaGNkICp4aGNpKQoreworCXNp emVfdCBzel9zcCwgc3pfc3BhLCBzel9kY2EsIHN6X2NtZCwgc3pfZXZ0LCBzel9lcnN0LCBzel9l cDsKKwl1NjQgcmVnNjQ7CisJdm9pZCAqcDsKKwlpbnQgaSwgbnVtX2VwOworCisJLyogU2NyYXRj aHBhZCBidWZmZXJzOiBQQUdFX1NJWkUgYWxpZ25lZCAqLworCXN6X3NwID0gQUxJR04oeGhjaS0+ bnVtX3NwICogeGhjaS0+cGFnZV9zaXplLCB4aGNpLT5wYWdlX3NpemUpOworCS8qIERldmljZSBD b250ZXh0IEFycmF5OiA2NEIgYWxpZ25lZCAqLworCXN6X2RjYSA9IEFMSUdOKHhoY2ktPm1heF9z bG90cyAqIHNpemVvZih1NjQpLCA2NCk7CisJLyogQ29tbWFuZCBSaW5nOiA2NEIgYWxpZ25lZCAq LworCXN6X2NtZCA9IEFMSUdOKE5VTV9DT01NQU5EX1RSQlMgKiBzaXplb2YodW5pb24geGhjaV90 cmIpLCA2NCk7CisJLyogRXZlbnQgUmluZzogNjRCIGFsaWduZWQgKi8KKwlzel9ldnQgPSBOVU1f RVZFTlRfU0VHTSAqCisJCUFMSUdOKE5VTV9FVkVOVF9UUkJTICogc2l6ZW9mKHVuaW9uIHhoY2lf dHJiKSwgNjQpOworCS8qIEV2ZW50IFJpbmcgU2VnbWVudCBUYWJsZTogNjRCIGFsaWduZWQgKi8K Kwlzel9lcnN0ID0gQUxJR04oTlVNX0VWRU5UX1NFR00gKiBzaXplb2Yoc3RydWN0IHhoY2lfZXJz dF9lbnRyeSksIDY0KTsKKwkvKiBTY3JhdGNocGFkIEJ1ZmZlciBBcnJheTogNjRCIGFsaWduZWQg Ki8KKwlzel9zcGEgPSBBTElHTih4aGNpLT5udW1fc3AgKiBzaXplb2YodTY0KSwgNjQpOworCisJ eGhjaS0+ZG1hX3NpemUgPSBzel9zcCArIHN6X3NwYSArIHN6X2RjYSArIHN6X2NtZCArIHN6X2V2 dCArIHN6X2Vyc3Q7CisKKwkvKgorCSAqIEVuZHBvaW50IFRyYW5zZmVyIFJpbmc6IDE2QiBhbGln bmVkCisJICoKKwkgKiBXZSBhbGxvY2F0ZSB1cCB0byBNQVhfRVBfUklOR1MgZnJvbSB0aGUgcmVz dCBvZiB0aGUgUEFHRQorCSAqIGZvciB2aXJ0dWFsIGRldmljZXMgdG8gcGljay11cCAoYW5kIHJl dHVybikgZm9yIGVuZHBvaW50IHRyYnMuCisJICovCisJc3pfZXAgPSBBTElHTihOVU1fVFJBTlNG RVJfVFJCUyAqIHNpemVvZih1bmlvbiB4aGNpX3RyYiksIDE2KTsKKworCW51bV9lcCA9IFBBR0Vf QUxJR04oeGhjaS0+ZG1hX3NpemUpIC0KKwkJTUlOX0VQX1JJTkdTICogc3pfZXAgLSB4aGNpLT5k bWFfc2l6ZTsKKwludW1fZXAgLz0gc3pfZXA7CisJbnVtX2VwID0gbWF4KE1BWF9FUF9SSU5HUywg TUlOX0VQX1JJTkdTICsgbnVtX2VwKTsKKwl4aGNpLT5kbWFfc2l6ZSArPSBudW1fZXAgKiBzel9l cDsKKworCXAgPSB4aGNpLT5kbWEgPSBkbWFfYWxsb2NfY29oZXJlbnQoeGhjaS0+ZG1hX3NpemUp OworCW1lbXNldCh4aGNpLT5kbWEsIDAsIHhoY2ktPmRtYV9zaXplKTsKKworCXhoY2ktPnNwID0g cDsgcCArPSBzel9zcDsKKwl4aGNpLT5kY2JhYSA9IHA7IHAgKz0gc3pfZGNhOworCXhoY2ktPmNt ZF9yaW5nLnRyYnMgPSBwOyBwICs9IHN6X2NtZDsKKwl4aGNpLT5ldmVudF9yaW5nLnRyYnMgPSBw OyBwICs9IHN6X2V2dDsKKwl4aGNpLT5ldmVudF9lcnN0ID0gcDsgcCArPSBzel9lcnN0OworCXho Y2ktPnNwX2FycmF5ID0gcDsgcCArPSBzel9zcGE7CisKKwl4aGNpLT5yaW5ncyA9IHh6YWxsb2Mo bnVtX2VwICogc2l6ZW9mKCp4aGNpLT5yaW5ncykpOworCWZvciAoaSA9IDA7IGkgPCBudW1fZXA7 IGkrKykgeworCQl4aGNpLT5yaW5nc1tpXS50cmJzID0gcDsKKwkJcCArPSBzel9lcDsKKwkJeGhj aV9wdXRfZW5kcG9pbnRfcmluZyh4aGNpLCAmeGhjaS0+cmluZ3NbaV0pOworCX0KKworCS8qIFNl dHVwIFNjcmF0Y2hwYWQgQnVmZmVyIEFycmF5IGFuZCBCYXNlIEFkZHJlc3MgaW4gRGV2aWNlIENv bnRleHQgKi8KKwlyZWc2NCA9IGNwdV90b19sZTY0KChkbWFfYWRkcl90KXhoY2ktPnNwKTsKKwlm b3IgKGkgPSAwOyBpIDwgeGhjaS0+bnVtX3NwOyBpKyssIHJlZzY0ICs9IHhoY2ktPnBhZ2Vfc2l6 ZSkKKwkJeGhjaS0+c3BfYXJyYXlbaV0gPSBjcHVfdG9fbGU2NChyZWc2NCk7CisJaWYgKHhoY2kt Pm51bV9zcCkKKwkJeGhjaS0+ZGNiYWFbMF0gPSBjcHVfdG9fbGU2NCgoZG1hX2FkZHJfdCl4aGNp LT5zcF9hcnJheSk7CisKKwkvKiBTZXR1cCBFdmVudCBSaW5nIFNlZ21lbnQgVGFibGUgYW5kIEV2 ZW50IFJpbmcgKi8KKwlyZWc2NCA9IChkbWFfYWRkcl90KSZ4aGNpLT5ldmVudF9yaW5nLnRyYnNb MF07CisJeGhjaS0+ZXZlbnRfZXJzdFswXS5zZWdfYWRkciA9IGNwdV90b19sZTY0KHJlZzY0KTsK Kwl4aGNpLT5ldmVudF9lcnN0WzBdLnNlZ19zaXplID0gY3B1X3RvX2xlMzIoTlVNX0VWRU5UX1RS QlMpOworCXhoY2lfcmluZ19pbml0KCZ4aGNpLT5ldmVudF9yaW5nLCBOVU1fRVZFTlRfVFJCUywg VFlQRV9FVkVOVCk7CisKKwkvKiBTZXR1cCBDb21tYW5kIFJpbmcgKi8KKwl4aGNpX3JpbmdfaW5p dCgmeGhjaS0+Y21kX3JpbmcsIE5VTV9DT01NQU5EX1RSQlMsIFRZUEVfQ09NTUFORCk7Cit9CisK K3N0YXRpYyBpbnQgeGhjaV9oYWx0KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSkKK3sKKwl1MzIgcmVn ID0gcmVhZGwoJnhoY2ktPm9wX3JlZ3MtPnN0YXR1cyk7CisJdTMyIG1hc2sgPSB+WEhDSV9JUlFT OworCisJaWYgKCEocmVnICYgU1RTX0hBTFQpKQorCQltYXNrICY9IH5DTURfUlVOOworCisJLyog ZGlzYWJsZSBhbnkgSVJRcyBhbmQgYmVnaW4gaGFsdGluZyBwcm9jZXNzICovCisJcmVnID0gcmVh ZGwoJnhoY2ktPm9wX3JlZ3MtPmNvbW1hbmQpOworCXJlZyAmPSBtYXNrOworCXdyaXRlbChyZWcs ICZ4aGNpLT5vcF9yZWdzLT5jb21tYW5kKTsKKworCXJldHVybiB4aGNpX2hhbmRzaGFrZSgmeGhj aS0+b3BfcmVncy0+c3RhdHVzLAorCQkJICAgICAgU1RTX0hBTFQsIFNUU19IQUxULCBYSENJX01B WF9IQUxUX1VTRUMpOworfQorCitzdGF0aWMgaW50IHhoY2lfcmVzZXQoc3RydWN0IHhoY2lfaGNk ICp4aGNpKQoreworCXUzMiByZWc7CisJaW50IHJldDsKKworCXJlZyA9IHJlYWRsKCZ4aGNpLT5v cF9yZWdzLT5jb21tYW5kKTsKKwlyZWcgfD0gQ01EX1JFU0VUOworCXdyaXRlbChyZWcsICZ4aGNp LT5vcF9yZWdzLT5jb21tYW5kKTsKKworCXJldCA9IHhoY2lfaGFuZHNoYWtlKCZ4aGNpLT5vcF9y ZWdzLT5jb21tYW5kLAorCQkJICAgICBDTURfUkVTRVQsIDAsIDEwICogU0VDT05EIC8gVVNFQ09O RCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHhoY2ktPmRldiwgImZhaWxlZCB0byByZXNldFxu Iik7CisJCXJldHVybiByZXQ7CisJfQorCisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMg aW50IHhoY2lfc3RhcnQoc3RydWN0IHhoY2lfaGNkICp4aGNpKQoreworCXUzMiByZWc7CisJaW50 IHJldCwgaTsKKworCXJlZyA9IHJlYWRsKCZ4aGNpLT5vcF9yZWdzLT5jb21tYW5kKTsKKwlyZWcg fD0gQ01EX1JVTjsKKwl3cml0ZWwocmVnLCAmeGhjaS0+b3BfcmVncy0+Y29tbWFuZCk7CisKKwly ZXQgPSB4aGNpX2hhbmRzaGFrZSgmeGhjaS0+b3BfcmVncy0+c3RhdHVzLAorCQkJICAgICBTVFNf SEFMVCwgMCwgWEhDSV9NQVhfSEFMVF9VU0VDKTsKKyAgICAgICAgaWYgKHJldCkgeworICAgICAg ICAgICAgICAgIGRldl9lcnIoeGhjaS0+ZGV2LCAiZmFpbGVkIHRvIHN0YXJ0XG4iKTsKKwkJcmV0 dXJuIHJldDsKKwl9CisKKwkvKiBFbnN1cmUgYWxsIHBvcnRzIGFyZSBwb3dlcmVkLW9mZiAqLwor CWZvciAoaSA9IDA7IGkgPCB4aGNpLT5udW1fdXNiMl9wb3J0czsgaSsrKQorCQl4aGNpX2h1Yl91 c2IyMF9wb3J0X3Bvd2VyKHhoY2ksIGksIGZhbHNlKTsKKwlmb3IgKGkgPSAwOyBpIDwgeGhjaS0+ bnVtX3VzYjNfcG9ydHM7IGkrKykKKwkJeGhjaV9odWJfdXNiMzBfcG9ydF9wb3dlcih4aGNpLCBp LCBmYWxzZSk7CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeGhjaV9pbml0 KHN0cnVjdCB1c2JfaG9zdCAqaG9zdCkKK3sKKwlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kgPSB0b194 aGNpX2hjZChob3N0KTsKKwl1MzIgcmVnOworCXU2NCByZWc2NDsKKwlpbnQgaSwgdG1wLCByZXQ7 CisKKwlyZXQgPSB4aGNpX2hhbHQoeGhjaSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CXJldCA9IHhoY2lfcmVzZXQoeGhjaSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXRt cCA9IHJlYWRsKCZ4aGNpLT5vcF9yZWdzLT5wYWdlX3NpemUpOworCWZvciAoaSA9IDA7IGkgPCAx NjsgaSsrKSB7CisJCWlmICgoMHgxICYgdG1wKSAhPSAwKQorCQkJYnJlYWs7CisJCXRtcCA+Pj0g MTsKKwl9CisJaWYgKGkgPCAxNikKKwkJdG1wID0gKDEgPDwgKGkrMTIpKTsKKwllbHNlCisJCWRl dl93YXJuKHhoY2ktPmRldiwgInVuc3VwcG9ydGVkIHBhZ2Ugc2l6ZSAlZFxuIiwgdG1wKTsKKwkv KiBVc2UgNEsgcGFnZXMsIHNpbmNlIHRoYXQncyBjb21tb24gYW5kIHRoZSBtaW5pbXVtIHRoZSBI QyBzdXBwb3J0cyAqLworCXhoY2ktPnBhZ2Vfc2hpZnQgPSAxMjsKKwl4aGNpLT5wYWdlX3NpemUg PSAxIDw8IHhoY2ktPnBhZ2Vfc2hpZnQ7CisKKwl4aGNpLT5yb290ZGV2ID0gMDsKKwl4aGNpLT5u dW1fc3AgPSBIQ1NfTUFYX1NDUkFUQ0hQQUQoeGhjaS0+aGNzX3BhcmFtczIpOworCXhoY2ktPm1h eF9zbG90cyA9IEhDU19NQVhfU0xPVFMoeGhjaS0+aGNzX3BhcmFtczEpOworCXhoY2lfZG1hX2Fs bG9jKHhoY2kpOworCisJcmV0ID0geGhjaV9odWJfc2V0dXBfcG9ydHMoeGhjaSk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogUHJvZ3JhbSB0aGUgTWF4IERldmljZSBTbG90 cyBFbmFibGVkIChNYXhTbG90c0VuKSBmaWVsZCBpbiB0aGUKKwkgKiBDT05GSUcgcmVnaXN0ZXIg KDUuNC43KSB3aXRoIHRoZSBtYXggbnVtYmVyIG9mIHNsb3RzIEhDIGNhbiBoYW5kbGUuCisJICov CisJcmVnID0gcmVhZGwoJnhoY2ktPm9wX3JlZ3MtPmNvbmZpZ19yZWcpOworCXJlZyB8PSAoeGhj aS0+bWF4X3Nsb3RzICYgSENTX1NMT1RTX01BU0spOworCXdyaXRlbChyZWcsICZ4aGNpLT5vcF9y ZWdzLT5jb25maWdfcmVnKTsKKworCS8qCisJICogUHJvZ3JhbSB0aGUgRGV2aWNlIENvbnRleHQg QmFzZSBBZGRyZXNzIEFycmF5IFBvaW50ZXIgKERDQkFBUCkKKwkgKiByZWdpc3RlciAoNS40LjYp IHdpdGggYSA2NC1iaXQgYWRkcmVzcyBwb2ludGluZyB0byB3aGVyZSB0aGUKKwkgKiBEZXZpY2Ug Q29udGV4dCBCYXNlIEFkZHJlc3MgQXJyYXkgaXMgbG9jYXRlZC4KKwkgKi8KKwl4aGNpX3dyaXRl XzY0KChkbWFfYWRkcl90KXhoY2ktPmRjYmFhLCAmeGhjaS0+b3BfcmVncy0+ZGNiYWFfcHRyKTsK KworCS8qCisJICogRGVmaW5lIHRoZSBDb21tYW5kIFJpbmcgRGVxdWV1ZSBQb2ludGVyIGJ5IHBy b2dyYW1taW5nIHRoZQorCSAqIENvbW1hbmQgUmluZyBDb250cm9sIFJlZ2lzdGVyICg1LjQuNSkg d2l0aCBhIDY0LWJpdCBhZGRyZXNzCisJICogcG9pbnRpbmcgdG8gdGhlIHN0YXJ0aW5nIGFkZHJl c3Mgb2YgdGhlIGZpcnN0IFRSQiBvZiB0aGUgQ29tbWFuZAorCSAqIFJpbmcuCisJICovCisJcmVn NjQgPSB4aGNpX3JlYWRfNjQoJnhoY2ktPm9wX3JlZ3MtPmNtZF9yaW5nKTsKKwlyZWc2NCA9IChy ZWc2NCAmICh1NjQpQ01EX1JJTkdfUlNWRF9CSVRTKSB8CisJCSgoZG1hX2FkZHJfdCkmeGhjaS0+ Y21kX3JpbmcudHJic1swXSAmCisJCSB+KGRtYV9hZGRyX3QpQ01EX1JJTkdfUlNWRF9CSVRTKSB8 CisJCXhoY2ktPmNtZF9yaW5nLmN5Y2xlX3N0YXRlOworCXhoY2lfd3JpdGVfNjQocmVnNjQsICZ4 aGNpLT5vcF9yZWdzLT5jbWRfcmluZyk7CisKKwlyZWcgPSByZWFkbCgmeGhjaS0+Y2FwX3JlZ3Mt PmRiX29mZikgJiBEQk9GRl9NQVNLOworCXhoY2ktPmRiYSA9ICh2b2lkIF9faW9tZW0gKil4aGNp LT5jYXBfcmVncyArIHJlZzsKKwl4aGNpLT5pcl9zZXQgPSAmeGhjaS0+cnVuX3JlZ3MtPmlyX3Nl dFswXTsKKworCXJlZzY0ID0gKGRtYV9hZGRyX3QpJnhoY2ktPmV2ZW50X3JpbmcudHJic1swXSAm CisJCX4oZG1hX2FkZHJfdClDTURfUklOR19SU1ZEX0JJVFM7CisJeGhjaS0+ZXZlbnRfZXJzdFtp XS5zZWdfYWRkciA9IGNwdV90b19sZTY0KHJlZzY0KTsKKwl4aGNpLT5ldmVudF9lcnN0W2ldLnNl Z19zaXplID0gY3B1X3RvX2xlMzIoTlVNX0VWRU5UX1RSQlMpOworCXJlZyA9IHJlYWRsKCZ4aGNp LT5pcl9zZXQtPmVyc3Rfc2l6ZSkgJiB+RVJTVF9TSVpFX01BU0s7CisJd3JpdGVsKHJlZyB8IE5V TV9FVkVOVF9TRUdNLCAmeGhjaS0+aXJfc2V0LT5lcnN0X3NpemUpOworCXhoY2lfc2V0X2V2ZW50 X2RlcXVldWUoeGhjaSk7CisKKwlyZWc2NCA9IHhoY2lfcmVhZF82NCgmeGhjaS0+aXJfc2V0LT5l cnN0X2Jhc2UpOworCXJlZzY0ICY9IEVSU1RfUFRSX01BU0s7CisJcmVnNjQgfD0gKGRtYV9hZGRy X3QpeGhjaS0+ZXZlbnRfZXJzdCAmCisJCX4oZG1hX2FkZHJfdClDTURfUklOR19SU1ZEX0JJVFM7 CisJeGhjaV93cml0ZV82NChyZWc2NCwgJnhoY2ktPmlyX3NldC0+ZXJzdF9iYXNlKTsKKworCS8q CisJICogV3JpdGUgdGhlIFVTQkNNRCAoNS40LjEpIHRvIHR1cm4gdGhlIGhvc3QgY29udHJvbGxl ciBPTiB2aWEKKwkgKiBzZXR0aW5nIHRoZSBSdW4vU3RvcCAoUi9TKSBiaXQgdG8g4oCYMeKAmS4g VGhpcyBvcGVyYXRpb24gYWxsb3dzIHRoZQorCSAqIHhIQyB0byBiZWdpbiBhY2NlcHRpbmcgZG9v cmJlbGwgcmVmZXJlbmNlcy4KKwkgKi8KKworCXJldHVybiB4aGNpX3N0YXJ0KHhoY2kpOworCisJ LyoKKwkgKiBBdCB0aGlzIHBvaW50LCB0aGUgaG9zdCBjb250cm9sbGVyIGlzIHVwIGFuZCBydW5u aW5nIGFuZCB0aGUgUm9vdAorCSAqIEh1YiBwb3J0cyAoNS40LjgpIHdpbGwgYmVnaW4gcmVwb3J0 aW5nIGRldmljZSBjb25uZWN0cywgZXRjLiwKKwkgKiBhbmQgc3lzdGVtIHNvZnR3YXJlIG1heSBi ZWdpbiBlbnVtZXJhdGluZyBkZXZpY2VzLgorCSAqIFN5c3RlbSBzb2Z0d2FyZSBtYXkgZm9sbG93 IHRoZSBwcm9jZWR1cmVzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDQuMywKKwkgKiB0byBlbnVtZXJh dGUgYXR0YWNoZWQgZGV2aWNlcy4KKwkgKgorCSAqIFVTQjIgKExTL0ZTL0hTKSBkZXZpY2VzIHJl cXVpcmUgdGhlIHBvcnQgcmVzZXQgcHJvY2VzcyB0byBhZHZhbmNlCisJICogdGhlIHBvcnQgdG8g dGhlIEVuYWJsZWQgc3RhdGUuIE9uY2UgVVNCMiBwb3J0cyBhcmUgRW5hYmxlZCwgdGhlIHBvcnQK KwkgKiBpcyBhY3RpdmUgd2l0aCBTT0ZzIG9jY3VycmluZyBvbiB0aGUgcG9ydCwgYnV0IHRoZSBQ aXBlIFNjaGVkdWxlcworCSAqIGhhdmUgbm90IHlldCBiZWVuIGVuYWJsZWQuCisJICoKKwkgKiBT UyBwb3J0cyBhdXRvbWF0aWNhbGx5IGFkdmFuY2UgdG8gdGhlIEVuYWJsZWQgc3RhdGUgaWYgYSBz dWNjZXNzZnVsCisJICogZGV2aWNlIGF0dGFjaCBpcyBkZXRlY3RlZC4KKwkgKi8KK30KKworc3Rh dGljIGludCB4aGNpX3N1Ym1pdF9idWxrX21zZyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNp Z25lZCBsb25nIHBpcGUsCisJCQkJdm9pZCAqYnVmZmVyLCBpbnQgbGVuZ3RoLCBpbnQgdGltZW91 dCkKK3sKKwlyZXR1cm4geGhjaV9zdWJtaXRfbm9ybWFsKGRldiwgcGlwZSwgYnVmZmVyLCBsZW5n dGgpOworfQorCitzdGF0aWMgaW50IHhoY2lfc3VibWl0X2NvbnRyb2xfbXNnKHN0cnVjdCB1c2Jf ZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgcGlwZSwKKwkgICB2b2lkICpidWZmZXIsIGludCBs ZW5ndGgsIHN0cnVjdCBkZXZyZXF1ZXN0ICpzZXR1cCwgaW50IHRpbWVvdXQpCit7CisJc3RydWN0 IHhoY2lfaGNkICp4aGNpID0gdG9feGhjaV9oY2QoZGV2LT5ob3N0KTsKKworCS8qIENhdGNoIFJv b3QgSHViIHJlcXVlc3RzICovCisJaWYgKHVzYl9waXBlZGV2aWNlKHBpcGUpID09IHhoY2ktPnJv b3RkZXYpIHsKKwkJaWYgKHhoY2ktPnJvb3RkZXYgPT0gMCkKKwkJCWRldi0+c3BlZWQgPSBVU0Jf U1BFRURfSElHSDsKKwkJcmV0dXJuIHhoY2lfaHViX2NvbnRyb2woZGV2LCBwaXBlLCBidWZmZXIs IGxlbmd0aCwgc2V0dXApOworCX0KKworCXJldHVybiB4aGNpX3N1Ym1pdF9jb250cm9sKGRldiwg cGlwZSwgYnVmZmVyLCBsZW5ndGgsIHNldHVwKTsKK30KKworc3RhdGljIGludCB4aGNpX3N1Ym1p dF9pbnRfbXNnKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgcGlwZSwKKwkJ CSAgICAgICB2b2lkICpidWZmZXIsIGludCBsZW5ndGgsIGludCBpbnRlcnZhbCkKK3sKKwlzdHJ1 Y3QgeGhjaV9oY2QgKnhoY2kgPSB0b194aGNpX2hjZChkZXYtPmhvc3QpOworCisJZGV2X2Vycih4 aGNpLT5kZXYsICJJbnRlcnJ1cHQgbWVzc2FnZXMgbm90IHN1cHBvcnRlZFxuIik7CisKKwlyZXR1 cm4gLUVOT1RTVVBQOworfQorCitzdGF0aWMgaW50IHhoY2lfZGV0ZWN0KHN0cnVjdCBkZXZpY2Vf ZCAqZGV2KQoreworCXN0cnVjdCB4aGNpX2hjZCAqeGhjaSA9IGRldi0+cHJpdjsKKworCXJldHVy biB1c2JfaG9zdF9kZXRlY3QoJnhoY2ktPmhvc3QpOworfQorCitpbnQgeGhjaV9yZWdpc3Rlcihz dHJ1Y3QgZGV2aWNlX2QgKmRldiwgc3RydWN0IHhoY2lfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3Qg dXNiX2hvc3QJKmhvc3Q7CisJc3RydWN0IHhoY2lfaGNkICp4aGNpOworCisJeGhjaSA9IHh6YWxs b2Moc2l6ZW9mKCp4aGNpKSk7CisJaG9zdCA9ICZ4aGNpLT5ob3N0OworCUlOSVRfTElTVF9IRUFE KCZ4aGNpLT52ZGV2X2xpc3QpOworCXhoY2ktPmRldiA9IGRldjsKKwl4aGNpLT5jYXBfcmVncyA9 IGRhdGEtPnJlZ3M7CisJeGhjaS0+b3BfcmVncyA9ICh2b2lkIF9faW9tZW0gKil4aGNpLT5jYXBf cmVncyArCisJCUhDX0xFTkdUSChyZWFkbCgmeGhjaS0+Y2FwX3JlZ3MtPmhjX2NhcGJhc2UpKTsK Kwl4aGNpLT5ydW5fcmVncyA9ICh2b2lkIF9faW9tZW0gKil4aGNpLT5jYXBfcmVncyArCisJCShy ZWFkbCgmeGhjaS0+Y2FwX3JlZ3MtPnJ1bl9yZWdzX29mZikgJiBSVFNPRkZfTUFTSyk7CisJLyog Q2FjaGUgcmVhZC1vbmx5IGNhcGFiaWxpdHkgcmVnaXN0ZXJzICovCisJeGhjaS0+aGNzX3BhcmFt czEgPSByZWFkbCgmeGhjaS0+Y2FwX3JlZ3MtPmhjc19wYXJhbXMxKTsKKwl4aGNpLT5oY3NfcGFy YW1zMiA9IHJlYWRsKCZ4aGNpLT5jYXBfcmVncy0+aGNzX3BhcmFtczIpOworCXhoY2ktPmhjc19w YXJhbXMzID0gcmVhZGwoJnhoY2ktPmNhcF9yZWdzLT5oY3NfcGFyYW1zMyk7CisJeGhjaS0+aGNj X2NhcGJhc2UgPSByZWFkbCgmeGhjaS0+Y2FwX3JlZ3MtPmhjX2NhcGJhc2UpOworCXhoY2ktPmhj aV92ZXJzaW9uID0gSENfVkVSU0lPTih4aGNpLT5oY2NfY2FwYmFzZSk7CisJeGhjaS0+aGNjX3Bh cmFtcyA9IHJlYWRsKCZ4aGNpLT5jYXBfcmVncy0+aGNjX3BhcmFtcyk7CisKKwlob3N0LT5od19k ZXYgPSBkZXY7CisJaG9zdC0+aW5pdCA9IHhoY2lfaW5pdDsKKwlob3N0LT5zdWJtaXRfaW50X21z ZyA9IHhoY2lfc3VibWl0X2ludF9tc2c7CisJaG9zdC0+c3VibWl0X2NvbnRyb2xfbXNnID0geGhj aV9zdWJtaXRfY29udHJvbF9tc2c7CisJaG9zdC0+c3VibWl0X2J1bGtfbXNnID0geGhjaV9zdWJt aXRfYnVsa19tc2c7CisKKwlkZXYtPnByaXYgPSB4aGNpOworCWRldi0+ZGV0ZWN0ID0geGhjaV9k ZXRlY3Q7CisKKwl1c2JfcmVnaXN0ZXJfaG9zdChob3N0KTsKKworCWRldl9pbmZvKGRldiwgIlVT QiB4SENJICV4LiUwMnhcbiIsCisJCSB4aGNpLT5oY2lfdmVyc2lvbiA+PiA4LCB4aGNpLT5oY2lf dmVyc2lvbiAmIDB4ZmYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB4SENJIHBsYXRmb3Jt IGRyaXZlcgorICovCisKK3N0YXRpYyBpbnQgeGhjaV9wcm9iZShzdHJ1Y3QgZGV2aWNlX2QgKmRl dikKK3sKKwlzdHJ1Y3QgeGhjaV9kYXRhIGRhdGEgPSB7fTsKKworCWRhdGEucmVncyA9IGRldl9y ZXF1ZXN0X21lbV9yZWdpb24oZGV2LCAwKTsKKworCXJldHVybiB4aGNpX3JlZ2lzdGVyKGRldiwg JmRhdGEpOworfQorCitzdGF0aWMgdm9pZCB4aGNpX3JlbW92ZShzdHJ1Y3QgZGV2aWNlX2QgKmRl dikKK3sKKwlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kgPSBkZXYtPnByaXY7CisJeGhjaV9oYWx0KHho Y2kpOworfQorCitzdGF0aWMgc3RydWN0IGRyaXZlcl9kIHhoY2lfZHJpdmVyID0geworCS5uYW1l ICA9ICJ4SENJIiwKKwkucHJvYmUgPSB4aGNpX3Byb2JlLAorCS5yZW1vdmUgPSB4aGNpX3JlbW92 ZSwKK307CitkZXZpY2VfcGxhdGZvcm1fZHJpdmVyKHhoY2lfZHJpdmVyKTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjY0ZDM5ZGQ1M2U1YQot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIuYwpAQCAtMCwwICsx LDY5OSBAQAorLyoKKyAqIHhIQ0kgVVNCIDIuMC8zLjAgUm9vdCBIdWIKKyAqCisgKiBTZWJhc3Rp YW4gSGVzc2VsYmFydGggPHNlYmFzdGlhbi5oZXNzZWxiYXJ0aEBnbWFpbC5jb20+CisgKgorICog VGhpcyBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBVU0IgMi4wIFJvb3QgSHViIHBhcnQgb2YgeEhD SQorICoKKyAqIFNvbWUgY29kZSBib3Jyb3dlZCBmcm9tIHRoZSBMaW51eCB4SENJIGRyaXZlcgor ICogICBBdXRob3I6IFNhcmFoIFNoYXJwCisgKiAgIENvcHlyaWdodCAoQykgMjAwOCBJbnRlbCBD b3JwLgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0g aXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQs IHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisvLyNkZWZpbmUgREVCVUcKKyNpbmNs dWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8Y2xvY2suaD4KKyNpbmNsdWRlIDxjb21tb24uaD4K KyNpbmNsdWRlIDxpby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPHVzYi91 c2IuaD4KKyNpbmNsdWRlIDx1c2IveGhjaS5oPgorCisjaW5jbHVkZSAieGhjaS5oIgorCitzdGF0 aWMgY29uc3Qgc3RydWN0IHVzYl9yb290X2h1Yl9pbmZvIHVzYl9yaF9pbmZvID0geworCS5odWIg PSB7CisJCS5iTGVuZ3RoCQk9IFVTQl9EVF9IVUJfTk9OVkFSX1NJWkUgKworCQkJCQkgICgoVVNC X01BWENISUxEUkVOICsgMSArIDcpIC8gOCksCisJCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRf SFVCLAorCQkuYk5iclBvcnRzCQk9IDAsCS8qIHJ1bnRpbWUgbW9kaWZpZWQgKi8KKwkJLndIdWJD aGFyYWN0ZXJpc3RpY3MJPSAwLAorCQkuYlB3ck9uMlB3ckdvb2QJCT0gMTAsCisJCS5iSHViQ29u dHJDdXJyZW50CT0gMCwKKwkJLnUuaHMuRGV2aWNlUmVtb3ZhYmxlCT0ge30sCisJCS51LmhzLlBv cnRQd3JDdHJsTWFzawk9IHt9CisJfSwKKwkuZGV2aWNlID0geworCQkuYkxlbmd0aAkJPSBVU0Jf RFRfREVWSUNFX1NJWkUsCisJCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfREVWSUNFLAorCQku YmNkVVNCCQkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMiksIC8qIHYyLjAgKi8KKwkJ LmJEZXZpY2VDbGFzcwkJPSBVU0JfQ0xBU1NfSFVCLAorCQkuYkRldmljZVN1YkNsYXNzCT0gMCwK KwkJLmJEZXZpY2VQcm90b2NvbAk9IFVTQl9IVUJfUFJfSFNfTVVMVElfVFQsCisJCS5iTWF4UGFj a2V0U2l6ZTAJPSA2NCwKKwkJLmlkVmVuZG9yCQk9IDB4MDAwMCwKKwkJLmlkUHJvZHVjdAkJPSAw eDAwMDAsCisJCS5iY2REZXZpY2UJCT0gX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDEpLAor CQkuaU1hbnVmYWN0dXJlcgkJPSAxLAorCQkuaVByb2R1Y3QJCT0gMiwKKwkJLmlTZXJpYWxOdW1i ZXIJCT0gMCwKKwkJLmJOdW1Db25maWd1cmF0aW9ucwk9IDEKKwl9LAorCS5jb25maWcgPSB7CisJ CS5iTGVuZ3RoCQk9IFVTQl9EVF9DT05GSUdfU0laRSwKKwkJLmJEZXNjcmlwdG9yVHlwZQk9IFVT Ql9EVF9DT05GSUcsCisJCS53VG90YWxMZW5ndGgJCT0gX19jb25zdGFudF9jcHVfdG9fbGUxNihV U0JfRFRfQ09ORklHX1NJWkUgKworCQkJCQkgVVNCX0RUX0lOVEVSRkFDRV9TSVpFICsgVVNCX0RU X0VORFBPSU5UX1NJWkUpLAorCQkuYk51bUludGVyZmFjZXMJCT0gMSwKKwkJLmJDb25maWd1cmF0 aW9uVmFsdWUJPSAxLAorCQkuaUNvbmZpZ3VyYXRpb24JCT0gMCwKKwkJLmJtQXR0cmlidXRlcwkJ PSBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCisJCS5iTWF4UG93ZXIJCT0gMAorCX0sCisJLmlu dGVyZmFjZSA9IHsKKwkJLmJMZW5ndGgJCT0gVVNCX0RUX0lOVEVSRkFDRV9TSVpFLAorCQkuYkRl c2NyaXB0b3JUeXBlCT0gVVNCX0RUX0lOVEVSRkFDRSwKKwkJLmJJbnRlcmZhY2VOdW1iZXIJPSAw LAorCQkuYkFsdGVybmF0ZVNldHRpbmcJPSAwLAorCQkuYk51bUVuZHBvaW50cwkJPSAxLAorCQku YkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX0hVQiwKKwkJLmJJbnRlcmZhY2VTdWJDbGFzcwk9 IDAsCisJCS5iSW50ZXJmYWNlUHJvdG9jb2wJPSAwLAorCQkuaUludGVyZmFjZQkJPSAwCisJfSwK KwkuZW5kcG9pbnQgPSB7CisJCS5iTGVuZ3RoCQk9IFVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCQku YkRlc2NyaXB0b3JUeXBlCT0gVVNCX0RUX0VORFBPSU5ULAorCQkuYkVuZHBvaW50QWRkcmVzcwk9 IDB4ODEsCS8qIFVFX0RJUl9JTiB8IEVIQ0lfSU5UUl9FTkRQVCAqLworCQkuYm1BdHRyaWJ1dGVz CQk9IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKKwkJLndNYXhQYWNrZXRTaXplCQk9IF9fY29uc3Rh bnRfY3B1X3RvX2xlMTYoKFVTQl9NQVhDSElMRFJFTiArIDEgKyA3KSAvIDgpLAorCQkuYkludGVy dmFsCQk9IDI1NQorCX0KK307CisKK3N0YXRpYyB2b2lkIHhoY2lfc2V0dXBfY29tbW9uX2h1Yl9k ZXNjcmlwdG9yKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKKwkJCQkgICAgIHN0cnVjdCB1c2JfaHVi X2Rlc2NyaXB0b3IgKmRlc2MsIGludCBwb3J0cykKK3sKKwl1MTYgdmFsOworCisJLyogeGhjaSBz ZWN0aW9uIDUuNC45IHNheXMgMjBtcyBtYXggKi8KKwlkZXNjLT5iUHdyT24yUHdyR29vZCA9IDEw OworCWRlc2MtPmJIdWJDb250ckN1cnJlbnQgPSAwOworCisvLwlkZXNjLT5iTmJyUG9ydHMgPSBw b3J0czsKKwlkZXNjLT5iTmJyUG9ydHMgPSB4aGNpLT5udW1fdXNiM19wb3J0cyArIHhoY2ktPm51 bV91c2IyX3BvcnRzOworCisJdmFsID0gMDsKKwkvKiBCaXRzIDE6MCAtIHN1cHBvcnQgcGVyLXBv cnQgcG93ZXIgc3dpdGNoaW5nLCBvciBwb3dlciBhbHdheXMgb24gKi8KKwlpZiAoSENDX1BQQyh4 aGNpLT5oY2NfcGFyYW1zKSkKKwkJdmFsIHw9IEhVQl9DSEFSX0lORFZfUE9SVF9MUFNNOworCWVs c2UKKwkJdmFsIHw9IEhVQl9DSEFSX05PX0xQU007CisJLyogQml0ICAyIC0gcm9vdCBodWJzIGFy ZSBub3QgcGFydCBvZiBhIGNvbXBvdW5kIGRldmljZSAqLworCS8qIEJpdHMgNDozIC0gaW5kaXZp ZHVhbCBwb3J0IG92ZXIgY3VycmVudCBwcm90ZWN0aW9uICovCisJdmFsIHw9IEhVQl9DSEFSX0lO RFZfUE9SVF9PQ1BNOworCS8qIEJpdHMgNjo1IC0gbm8gVFRzIGluIHJvb3QgcG9ydHMgKi8KKwkv KiBCaXQgIDcgLSBubyBwb3J0IGluZGljYXRvcnMgKi8KKwlkZXNjLT53SHViQ2hhcmFjdGVyaXN0 aWNzID0gY3B1X3RvX2xlMTYodmFsKTsKK30KKworc3RhdGljIHZvaWQgeGhjaV9zZXR1cF91c2Iy X2h1Yl9kZXNjcmlwdG9yKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSkKK3sKKwlzdHJ1Y3QgdXNiX2h1 Yl9kZXNjcmlwdG9yICpkZXNjID0gJnhoY2ktPnVzYjJfaW5mby5odWI7CisJX191OCBwb3J0X3Jl bW92YWJsZVsoVVNCX01BWENISUxEUkVOICsgMSArIDcpIC8gOF07CisJaW50IHBvcnRzOworCXUz MiBwb3J0c2M7CisJdTE2IHZhbDsKKwlpbnQgaTsKKworCXBvcnRzID0geGhjaS0+bnVtX3VzYjJf cG9ydHM7CisJeGhjaV9zZXR1cF9jb21tb25faHViX2Rlc2NyaXB0b3IoeGhjaSwgZGVzYywgcG9y dHMpOworCWRlc2MtPmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9IVUI7CisJdmFsID0gMSArIChw b3J0cyAvIDgpOworCWRlc2MtPmJMZW5ndGggPSBVU0JfRFRfSFVCX05PTlZBUl9TSVpFICsgMiAq IHZhbDsKKworCS8qIFRoZSBEZXZpY2UgUmVtb3ZhYmxlIGJpdHMgYXJlIHJlcG9ydGVkIG9uIGEg Ynl0ZSBncmFudWxhcml0eS4KKwkgKiBJZiB0aGUgcG9ydCBkb2Vzbid0IGV4aXN0IHdpdGhpbiB0 aGF0IGJ5dGUsIHRoZSBiaXQgaXMgc2V0IHRvIDAuCisJICovCisJbWVtc2V0KHBvcnRfcmVtb3Zh YmxlLCAwLCBzaXplb2YocG9ydF9yZW1vdmFibGUpKTsKKwlmb3IgKGkgPSAwOyBpIDwgcG9ydHM7 IGkrKykgeworCQlwb3J0c2MgPSByZWFkbCh4aGNpLT51c2IyX3BvcnRzW2ldKTsKKwkJLyogSWYg YSBkZXZpY2UgaXMgcmVtb3ZhYmxlLCBQT1JUU0MgcmVwb3J0cyBhIDAsIHNhbWUgYXMgaW4gdGhl CisJCSAqIGh1YiBkZXNjcmlwdG9yIERldmljZVJlbW92YWJsZSBiaXRzLgorCQkgKi8KKwkJaWYg KHBvcnRzYyAmIFBPUlRfREVWX1JFTU9WRSkKKwkJCS8qIFRoaXMgbWF0aCBpcyBoYWlyeSBiZWNh dXNlIGJpdCAwIG9mIERldmljZVJlbW92YWJsZQorCQkJICogaXMgcmVzZXJ2ZWQsIGFuZCBiaXQg MSBpcyBmb3IgcG9ydCAxLCBldGMuCisJCQkgKi8KKwkJCXBvcnRfcmVtb3ZhYmxlWyhpICsgMSkg LyA4XSB8PSAxIDw8ICgoaSArIDEpICUgOCk7CisJfQorCisJLyogY2gxMS5oIGRlZmluZXMgYSBo dWIgZGVzY3JpcHRvciB0aGF0IGhhcyByb29tIGZvciBVU0JfTUFYQ0hJTERSRU4KKwkgKiBwb3J0 cyBvbiBpdC4gIFRoZSBVU0IgMi4wIHNwZWNpZmljYXRpb24gc2F5cyB0aGF0IHRoZXJlIGFyZSB0 d28KKwkgKiB2YXJpYWJsZSBsZW5ndGggZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIGh1YiBkZXNj cmlwdG9yOgorCSAqIERldmljZVJlbW92YWJsZSBhbmQgUG9ydFB3ckN0cmxNYXNrLiAgQnV0IHNp bmNlIHdlIGNhbiBoYXZlIGxlc3MgdGhhbgorCSAqIFVTQl9NQVhDSElMRFJFTiBwb3J0cywgd2Ug bWF5IG5lZWQgdG8gdXNlIHRoZSBEZXZpY2VSZW1vdmFibGUgYXJyYXkKKwkgKiB0byBzZXQgUG9y dFB3ckN0cmxNYXNrIGJpdHMuICBQb3J0UHdyQ3RybE1hc2sgbXVzdCBhbHdheXMgYmUgc2V0IHRv CisJICogMHhGRiwgc28gd2UgaW5pdGlhbGl6ZSB0aGUgYm90aCBhcnJheXMgKERldmljZVJlbW92 YWJsZSBhbmQKKwkgKiBQb3J0UHdyQ3RybE1hc2spIHRvIDB4RkYuICBUaGVuIHdlIHNldCB0aGUg RGV2aWNlUmVtb3ZhYmxlIGZvciBlYWNoCisJICogc2V0IG9mIHBvcnRzIHRoYXQgYWN0dWFsbHkg ZXhpc3QuCisJICovCisJbWVtc2V0KGRlc2MtPnUuaHMuRGV2aWNlUmVtb3ZhYmxlLCAweGZmLAor CSAgICAgICBzaXplb2YoZGVzYy0+dS5ocy5EZXZpY2VSZW1vdmFibGUpKTsKKwltZW1zZXQoZGVz Yy0+dS5ocy5Qb3J0UHdyQ3RybE1hc2ssIDB4ZmYsCisJICAgICAgIHNpemVvZihkZXNjLT51Lmhz LlBvcnRQd3JDdHJsTWFzaykpOworCisJZm9yIChpID0gMDsgaSA8IChwb3J0cyArIDEgKyA3KSAv IDg7IGkrKykKKwkJbWVtc2V0KCZkZXNjLT51LmhzLkRldmljZVJlbW92YWJsZVtpXSwgcG9ydF9y ZW1vdmFibGVbaV0sCisJCSAgICAgICBzaXplb2YoX191OCkpOworfQorCitzdGF0aWMgdm9pZCB4 aGNpX3NldHVwX3VzYjNfaHViX2Rlc2NyaXB0b3Ioc3RydWN0IHhoY2lfaGNkICp4aGNpKQorewor CXN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgKmRlc2MgPSAmeGhjaS0+dXNiM19pbmZvLmh1YjsK KwlpbnQgcG9ydHM7CisJdTE2IHBvcnRfcmVtb3ZhYmxlOworCXUzMiBwb3J0c2M7CisJaW50IGk7 CisKKwlwb3J0cyA9IHhoY2ktPm51bV91c2IzX3BvcnRzOworCXhoY2lfc2V0dXBfY29tbW9uX2h1 Yl9kZXNjcmlwdG9yKHhoY2ksIGRlc2MsIHBvcnRzKTsKKwlkZXNjLT5iRGVzY3JpcHRvclR5cGUg PSBVU0JfRFRfU1NfSFVCOworCWRlc2MtPmJMZW5ndGggPSBVU0JfRFRfU1NfSFVCX1NJWkU7CisJ LyoKKwkgKiBoZWFkZXIgZGVjb2RlIGxhdGVuY3kgc2hvdWxkIGJlIHplcm8gZm9yIHJvb3RodWJz LAorCSAqIHNlZSBzZWN0aW9uIDQuMjMuNS4yLgorCSAqLworCWRlc2MtPnUuc3MuYkh1YkhkckRl Y0xhdCA9IDA7CisJZGVzYy0+dS5zcy53SHViRGVsYXkgPSAwOworCXBvcnRfcmVtb3ZhYmxlID0g MDsKKwkvKiBiaXQgMCBpcyByZXNlcnZlZCwgYml0IDEgaXMgZm9yIHBvcnQgMSwgZXRjLiAqLwor CWZvciAoaSA9IDA7IGkgPCBwb3J0czsgaSsrKSB7CisJCXBvcnRzYyA9IHJlYWRsKHhoY2ktPnVz YjNfcG9ydHNbaV0pOworCQlpZiAocG9ydHNjICYgUE9SVF9ERVZfUkVNT1ZFKQorCQkJcG9ydF9y ZW1vdmFibGUgfD0gMSA8PCAoaSArIDEpOworCX0KKwlkZXNjLT51LnNzLkRldmljZVJlbW92YWJs ZSA9IGNwdV90b19sZTE2KHBvcnRfcmVtb3ZhYmxlKTsKK30KKworc3RhdGljIHZvaWQgeGhjaV9h ZGRfaW5fcG9ydChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHVuc2lnbmVkIGludCBudW1fcG9ydHMs CisJCSAgICAgX19sZTMyIF9faW9tZW0gKmFkZHIsIHU4IG1ham9yX3JldmlzaW9uLCBpbnQgbWF4 X2NhcHMpCit7CisJdTMyIHJlZywgcG9ydF9vZmZzZXQsIHBvcnRfY291bnQ7CisJaW50IGk7CisK KwlpZiAobWFqb3JfcmV2aXNpb24gPiAweDAzKSB7CisJCWRldl93YXJuKHhoY2ktPmRldiwgIkln bm9yaW5nIHVua25vd24gcG9ydCBzcGVlZCwgRXh0IENhcCAlcCwgcmV2ICUwMnhcbiIsCisJCQkg YWRkciwgbWFqb3JfcmV2aXNpb24pOworCQlyZXR1cm47CisJfQorCisJLyogUG9ydCBvZmZzZXQg YW5kIGNvdW50IGluIHRoZSB0aGlyZCBkd29yZCwgc2VlIHNlY3Rpb24gNy4yICovCisJcmVnID0g cmVhZGwoYWRkciArIDIpOworCXBvcnRfb2Zmc2V0ID0gWEhDSV9FWFRfUE9SVF9PRkYocmVnKTsK Kwlwb3J0X2NvdW50ID0gWEhDSV9FWFRfUE9SVF9DT1VOVChyZWcpOworCisJLyogUG9ydCBjb3Vu dCBpbmNsdWRlcyB0aGUgY3VycmVudCBwb3J0IG9mZnNldCAqLworCWlmIChwb3J0X29mZnNldCA9 PSAwIHx8IChwb3J0X29mZnNldCArIHBvcnRfY291bnQgLSAxKSA+IG51bV9wb3J0cykKKwkJLyog V1RGPyAiVmFsaWQgdmFsdWVzIGFyZSDigJgx4oCZIHRvIE1heFBvcnRzIiAqLworCQlyZXR1cm47 CisKKwkvKiBjYWNoZSB1c2IyIHBvcnQgY2FwYWJpbGl0aWVzICovCisJaWYgKG1ham9yX3Jldmlz aW9uIDwgMHgwMyAmJiB4aGNpLT5udW1fZXh0X2NhcHMgPCBtYXhfY2FwcykKKwkJeGhjaS0+ZXh0 X2NhcHNbeGhjaS0+bnVtX2V4dF9jYXBzKytdID0gcmVnOworCisJcG9ydF9vZmZzZXQtLTsKKwlm b3IgKGkgPSBwb3J0X29mZnNldDsgaSA8IChwb3J0X29mZnNldCArIHBvcnRfY291bnQpOyBpKysp IHsKKwkJLyogRHVwbGljYXRlIGVudHJ5LiAgSWdub3JlIHRoZSBwb3J0IGlmIHRoZSByZXZpc2lv bnMgZGlmZmVyLiAqLworCQlpZiAoeGhjaS0+cG9ydF9hcnJheVtpXSAhPSAwKSB7CisJCQlkZXZf d2Fybih4aGNpLT5kZXYsICJEdXBsaWNhdGUgcG9ydCBlbnRyeSwgRXh0IENhcCAlcCwgcG9ydCAl dVxuIiwKKwkJCQkgYWRkciwgaSk7CisJCQlkZXZfd2Fybih4aGNpLT5kZXYsICJQb3J0IHdhcyBt YXJrZWQgYXMgVVNCICV1LCBkdXBsaWNhdGVkIGFzIFVTQiAldVxuIiwKKwkJCQkgeGhjaS0+cG9y dF9hcnJheVtpXSwgbWFqb3JfcmV2aXNpb24pOworCQkJLyoKKwkJCSAqIE9ubHkgYWRqdXN0IHRo ZSByb290aHViIHBvcnQgY291bnRzIGlmIHdlIGhhdmVuJ3QKKwkJCSAqIGZvdW5kIGEgc2ltaWxh ciBkdXBsaWNhdGUuCisJCQkgKi8KKwkJCWlmICh4aGNpLT5wb3J0X2FycmF5W2ldICE9IG1ham9y X3JldmlzaW9uICYmCisJCQkgICAgeGhjaS0+cG9ydF9hcnJheVtpXSAhPSBEVVBMSUNBVEVfRU5U UlkpIHsKKwkJCQlpZiAoeGhjaS0+cG9ydF9hcnJheVtpXSA9PSAweDAzKQorCQkJCQl4aGNpLT5u dW1fdXNiM19wb3J0cy0tOworCQkJCWVsc2UKKwkJCQkJeGhjaS0+bnVtX3VzYjJfcG9ydHMtLTsK KwkJCQl4aGNpLT5wb3J0X2FycmF5W2ldID0gRFVQTElDQVRFX0VOVFJZOworCQkJfQorCQkJY29u dGludWU7CisJCX0KKwkJeGhjaS0+cG9ydF9hcnJheVtpXSA9IG1ham9yX3JldmlzaW9uOworCQlp ZiAobWFqb3JfcmV2aXNpb24gPT0gMHgwMykKKwkJCXhoY2ktPm51bV91c2IzX3BvcnRzKys7CisJ CWVsc2UKKwkJCXhoY2ktPm51bV91c2IyX3BvcnRzKys7CisJfQorfQorCitpbnQgeGhjaV9odWJf c2V0dXBfcG9ydHMoc3RydWN0IHhoY2lfaGNkICp4aGNpKQoreworCXUzMiBvZmZzZXQsIHRtcF9v ZmZzZXQ7CisJX19sZTMyIF9faW9tZW0gKmFkZHIsICp0bXBfYWRkcjsKKwl1bnNpZ25lZCBpbnQg bnVtX3BvcnRzOworCWludCBpLCBwb3J0X2luZGV4OworCWludCBjYXBfY291bnQgPSAwOworCisJ b2Zmc2V0ID0gSENDX0VYVF9DQVBTKHhoY2ktPmhjY19wYXJhbXMpOworCWlmIChvZmZzZXQgPT0g MCkgeworCQlkZXZfZXJyKHhoY2ktPmRldiwgIk5vIEV4dGVuZGVkIENhcGFiaWxpdHkgUmVnaXN0 ZXJzXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJYWRkciA9ICZ4aGNpLT5jYXBfcmVn cy0+aGNfY2FwYmFzZSArIG9mZnNldDsKKworCS8qIGNvdW50IGV4dGVuZGVkIHByb3RvY29sIGNh cGFiaWxpdHkgZW50cmllcyBmb3IgbGF0ZXIgY2FjaGluZyAqLworCXRtcF9hZGRyID0gYWRkcjsK Kwl0bXBfb2Zmc2V0ID0gb2Zmc2V0OworCWRvIHsKKwkJdTMyIGNhcF9pZCA9IHJlYWRsKHRtcF9h ZGRyKTsKKworCQlpZiAoWEhDSV9FWFRfQ0FQU19JRChjYXBfaWQpID09IFhIQ0lfRVhUX0NBUFNf UFJPVE9DT0wpCisJCQljYXBfY291bnQrKzsKKworCQl0bXBfb2Zmc2V0ID0gWEhDSV9FWFRfQ0FQ U19ORVhUKGNhcF9pZCk7CisJCXRtcF9hZGRyICs9IHRtcF9vZmZzZXQ7CisJfSB3aGlsZSAodG1w X29mZnNldCk7CisKKwludW1fcG9ydHMgPSBIQ1NfTUFYX1BPUlRTKHhoY2ktPmhjc19wYXJhbXMx KTsKKwl4aGNpLT5wb3J0X2FycmF5ID0geHphbGxvYyhudW1fcG9ydHMgKiBzaXplb2YoKnhoY2kt PnBvcnRfYXJyYXkpKTsKKwl4aGNpLT5leHRfY2FwcyA9IHh6YWxsb2MoY2FwX2NvdW50ICogc2l6 ZW9mKCp4aGNpLT5leHRfY2FwcykpOworCisJd2hpbGUgKDEpIHsKKwkJdTMyIGNhcF9pZCA9IHJl YWRsKGFkZHIpOworCisJCWlmIChYSENJX0VYVF9DQVBTX0lEKGNhcF9pZCkgPT0gWEhDSV9FWFRf Q0FQU19QUk9UT0NPTCkKKwkJCXhoY2lfYWRkX2luX3BvcnQoeGhjaSwgbnVtX3BvcnRzLCBhZGRy LAorCQkJCQkgKHU4KVhIQ0lfRVhUX1BPUlRfTUFKT1IoY2FwX2lkKSwKKwkJCQkJIGNhcF9jb3Vu dCk7CisJCW9mZnNldCA9IFhIQ0lfRVhUX0NBUFNfTkVYVChjYXBfaWQpOworCQlpZiAoIW9mZnNl dCB8fAorCQkgICAgKHhoY2ktPm51bV91c2IyX3BvcnRzICsgeGhjaS0+bnVtX3VzYjNfcG9ydHMp ID09IG51bV9wb3J0cykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCQlhZGRyICs9 IG9mZnNldDsKKwl9CisKKwlkZXZfZGJnKHhoY2ktPmRldiwgImZvdW5kICVkIFVTQjIgcG9ydHMs ICVkIFVTQjMgcG9ydHNcbiIsCisJCXhoY2ktPm51bV91c2IyX3BvcnRzLCB4aGNpLT5udW1fdXNi M19wb3J0cyk7CisKKwlpZiAoeGhjaS0+bnVtX3VzYjJfcG9ydHMgPT0gMCAmJiB4aGNpLT5udW1f dXNiM19wb3J0cyA9PSAwKSB7CisJCWRldl9lcnIoeGhjaS0+ZGV2LCAiTm8gcG9ydHMgb24gdGhl IHJvb3RodWJzP1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICh4aGNpLT5udW1f dXNiMl9wb3J0cykgeworCQl4aGNpLT51c2IyX3BvcnRzID0geHphbGxvYyh4aGNpLT5udW1fdXNi Ml9wb3J0cyAqCisJCQkJCSAgIHNpemVvZigqeGhjaS0+dXNiMl9wb3J0cykpOworCQlwb3J0X2lu ZGV4ID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9wb3J0czsgaSsrKSB7CisJCQlpZiAoeGhj aS0+cG9ydF9hcnJheVtpXSA9PSAweDAzIHx8CisJCQkgICAgeGhjaS0+cG9ydF9hcnJheVtpXSA9 PSAweDAwIHx8CisJCQkgICAgeGhjaS0+cG9ydF9hcnJheVtpXSA9PSBEVVBMSUNBVEVfRU5UUlkp CisJCQkJY29udGludWU7CisJCQl4aGNpLT51c2IyX3BvcnRzW3BvcnRfaW5kZXhdID0KKwkJCQkm eGhjaS0+b3BfcmVncy0+cG9ydF9zdGF0dXNfYmFzZSArCisJCQkJTlVNX1BPUlRfUkVHUyAqIGk7 CisJCQlwb3J0X2luZGV4Kys7CisJCQlpZiAocG9ydF9pbmRleCA9PSB4aGNpLT5udW1fdXNiMl9w b3J0cykKKwkJCQlicmVhazsKKwkJfQorCQltZW1jcHkoJnhoY2ktPnVzYjJfaW5mbywgJnVzYl9y aF9pbmZvLCBzaXplb2YodXNiX3JoX2luZm8pKTsKKwkJeGhjaV9zZXR1cF91c2IyX2h1Yl9kZXNj cmlwdG9yKHhoY2kpOworCX0KKworCWlmICh4aGNpLT5udW1fdXNiM19wb3J0cykgeworCQl4aGNp LT51c2IzX3BvcnRzID0geHphbGxvYyh4aGNpLT5udW1fdXNiM19wb3J0cyAqCisJCQkJCSAgIHNp emVvZigqeGhjaS0+dXNiM19wb3J0cykpOworCQlwb3J0X2luZGV4ID0gMDsKKwkJZm9yIChpID0g MDsgaSA8IG51bV9wb3J0czsgaSsrKSB7CisJCQlpZiAoeGhjaS0+cG9ydF9hcnJheVtpXSAhPSAw eDAzKQorCQkJCWNvbnRpbnVlOworCQkJeGhjaS0+dXNiM19wb3J0c1twb3J0X2luZGV4XSA9CisJ CQkJJnhoY2ktPm9wX3JlZ3MtPnBvcnRfc3RhdHVzX2Jhc2UgKworCQkJCU5VTV9QT1JUX1JFR1Mg KiBpOworCQkJcG9ydF9pbmRleCsrOworCQkJaWYgKHBvcnRfaW5kZXggPT0geGhjaS0+bnVtX3Vz YjNfcG9ydHMpCisJCQkJYnJlYWs7CisJCX0KKwkJbWVtY3B5KCZ4aGNpLT51c2IzX2luZm8sICZ1 c2JfcmhfaW5mbywgc2l6ZW9mKHVzYl9yaF9pbmZvKSk7CisJCXhoY2lfc2V0dXBfdXNiM19odWJf ZGVzY3JpcHRvcih4aGNpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZXNlIGJp dHMgYXJlIFJlYWQgT25seSAoUk8pIGFuZCBzaG91bGQgYmUgc2F2ZWQgYW5kIHdyaXR0ZW4gdG8g dGhlCisgKiByZWdpc3RlcnM6IDAsIDMsIDEwOjEzLCAzMAorICogY29ubmVjdCBzdGF0dXMsIG92 ZXItY3VycmVudCBzdGF0dXMsIHBvcnQgc3BlZWQsIGFuZCBkZXZpY2UgcmVtb3ZhYmxlLgorICog Y29ubmVjdCBzdGF0dXMgYW5kIHBvcnQgc3BlZWQgYXJlIGFsc28gc3RpY2t5IC0gbWVhbmluZyB0 aGV5J3JlIGluCisgKiB0aGUgQVVYIHdlbGwgYW5kIHRoZXkgYXJlbid0IGNoYW5nZWQgYnkgYSBo b3QsIHdhcm0sIG9yIGNvbGQgcmVzZXQuCisgKi8KKyNkZWZpbmUgWEhDSV9QT1JUX1JPCShQT1JU X0NPTk5FQ1QgfCBQT1JUX09DIHwgREVWX1NQRUVEX01BU0sgfCBcCisJCQkgUE9SVF9ERVZfUkVN T1ZFKQorLyoKKyAqIFRoZXNlIGJpdHMgYXJlIFJXOyB3cml0aW5nIGEgMCBjbGVhcnMgdGhlIGJp dCwgd3JpdGluZyBhIDEgc2V0cyB0aGUgYml0OgorICogYml0cyA1OjgsIDksIDE0OjE1LCAyNToy NworICogbGluayBzdGF0ZSwgcG9ydCBwb3dlciwgcG9ydCBpbmRpY2F0b3Igc3RhdGUsICJ3YWtl IG9uIiBlbmFibGUgc3RhdGUKKyAqLworI2RlZmluZSBYSENJX1BPUlRfUldTCShQT1JUX1BMU19N QVNLIHwgUE9SVF9QT1dFUiB8IFBPUlRfTEVEX01BU0sgfCBcCisJCQkgUE9SVF9XS0NPTk5fRSB8 IFBPUlRfV0tESVNDX0UgfCBQT1JUX1dLT0NfRSkKKy8qCisgKiBUaGVzZSBiaXRzIGFyZSBSVzsg d3JpdGluZyBhIDEgc2V0cyB0aGUgYml0LCB3cml0aW5nIGEgMCBoYXMgbm8gZWZmZWN0OgorICog Yml0IDQgKHBvcnQgcmVzZXQpCisgKi8KKyNkZWZpbmUgWEhDSV9QT1JUX1JXMVMJKFBPUlRfUkVT RVQpCisvKgorICogVGhlc2UgYml0cyBhcmUgUlc7IHdyaXRpbmcgYSAxIGNsZWFycyB0aGUgYml0 LCB3cml0aW5nIGEgMCBoYXMgbm8gZWZmZWN0OgorICogYml0cyAxLCAxNywgMTgsIDE5LCAyMCwg MjEsIDIyLCAyMworICogcG9ydCBlbmFibGUvZGlzYWJsZSwgYW5kCisgKiBjaGFuZ2UgYml0czog Y29ubmVjdCwgUEVELCB3YXJtIHBvcnQgcmVzZXQgY2hhbmdlZCAocmVzZXJ2ZWQgMCBmb3IgVVNC IDIuMCksCisgKiBvdmVyLWN1cnJlbnQsIHJlc2V0LCBsaW5rIHN0YXRlLCBhbmQgTDEgY2hhbmdl CisgKi8KKyNkZWZpbmUgWEhDSV9QT1JUX1JXMUNTCShQT1JUX1BFIHwgUE9SVF9DU0MgfCBQT1JU X1BFQyB8IFBPUlRfV1JDIHwgXAorCQkJIFBPUlRfT0NDIHwgUE9SVF9SQyB8IFBPUlRfUExDIHwg UE9SVF9DRUMpCisvKgorICogQml0IDE2IGlzIFJXLCBhbmQgd3JpdGluZyBhICcxJyB0byBpdCBj YXVzZXMgdGhlIGxpbmsgc3RhdGUgY29udHJvbCB0byBiZQorICogbGF0Y2hlZCBpbgorICovCisj ZGVmaW5lIFhIQ0lfUE9SVF9SVwkoUE9SVF9MSU5LX1NUUk9CRSkKKy8qCisgKiBUaGVzZSBiaXRz IGFyZSBSZXNlcnZlZCBaZXJvIChSc3ZkWikgYW5kIHplcm8gc2hvdWxkIGJlIHdyaXR0ZW4gdG8g dGhlbToKKyAqIGJpdHMgMiwgMjQsIDI4OjMxCisgKi8KKyNkZWZpbmUgWEhDSV9QT1JUX1JaCShC SVQoMikgfCBCSVQoMjQpIHwgKDB4Zjw8MjgpKQorCisvKgorICogR2l2ZW4gYSBwb3J0IHN0YXRl LCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSB0aGF0IHdvdWxkIHJlc3VsdCBpbiB0aGUK KyAqIHBvcnQgYmVpbmcgaW4gdGhlIHNhbWUgc3RhdGUsIGlmIHRoZSB2YWx1ZSB3YXMgd3JpdHRl biB0byB0aGUgcG9ydCBzdGF0dXMKKyAqIGNvbnRyb2wgcmVnaXN0ZXIuCisgKiBTYXZlIFJlYWQg T25seSAoUk8pIGJpdHMgYW5kIHNhdmUgcmVhZC93cml0ZSBiaXRzIHdoZXJlCisgKiB3cml0aW5n IGEgMCBjbGVhcnMgdGhlIGJpdCBhbmQgd3JpdGluZyBhIDEgc2V0cyB0aGUgYml0IChSV1MpLgor ICogRm9yIGFsbCBvdGhlciB0eXBlcyAoUlcxUywgUlcxQ1MsIFJXLCBhbmQgUlopLCB3cml0aW5n IGEgJzAnIGhhcyBubyBlZmZlY3QuCisgKi8KK3N0YXRpYyB1MzIgaW5saW5lIHhoY2lfcG9ydF9z dGF0ZV90b19uZXV0cmFsKHUzMiBzdGF0ZSkKK3sKKwkvKiBTYXZlIHJlYWQtb25seSBzdGF0dXMg YW5kIHBvcnQgc3RhdGUgKi8KKyAgICAgICAgcmV0dXJuIChzdGF0ZSAmIFhIQ0lfUE9SVF9STykg fCAoc3RhdGUgJiBYSENJX1BPUlRfUldTKTsKK30KKworc3RhdGljIGludCB4aGNpX2h1Yl9maW5p c2hfcG9ydF9kZXRhY2goc3RydWN0IHhoY2lfaGNkICp4aGNpLCBpbnQgZmFrZV9wb3J0KQorewor CXN0cnVjdCB4aGNpX3ZpcnR1YWxfZGV2aWNlICp2ZGV2LCAqdGVtcDsKKwl1bmlvbiB4aGNpX3Ry YiB0cmI7CisJaW50IHJldDsKKworCXJldCA9IHhoY2lfd2FpdF9mb3JfZXZlbnQoeGhjaSwgVFJC X1BPUlRfU1RBVFVTLCAmdHJiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogVGVh ci1kb3duIGFueSBhdHRhY2hlZCB2aXJ0dWFsIGRldmljZXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5X3NhZmUodmRldiwgdGVtcCwgJnhoY2ktPnZkZXZfbGlzdCwgbGlzdCkKKwkJaWYgKHZkZXYt PnVkZXYgJiYgdmRldi0+dWRldi0+cG9ydG5yID09IGZha2VfcG9ydCkKKwkJCXhoY2lfdmlydGRl dl9kZXRhY2godmRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4aGNpX2h1Yl9m aW5pc2hfcG9ydF9yZXNldChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGludCBmYWtlX3BvcnQpCit7 CisJc3RydWN0IHhoY2lfdmlydHVhbF9kZXZpY2UgKnZkZXY7CisJdW5pb24geGhjaV90cmIgdHJi OworCWludCByZXQ7CisKKwlyZXQgPSB4aGNpX3dhaXRfZm9yX2V2ZW50KHhoY2ksIFRSQl9QT1JU X1NUQVRVUywgJnRyYik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFJlc2V0IGFu eSBhdHRhY2hlZCB2aXJ0dWFsIGRldmljZXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZkZXYs ICZ4aGNpLT52ZGV2X2xpc3QsIGxpc3QpCisJCWlmICh2ZGV2LT51ZGV2ICYmIHZkZXYtPnVkZXYt PnBvcnRuciA9PSBmYWtlX3BvcnQpCisJCQl4aGNpX3ZpcnRkZXZfcmVzZXQodmRldik7CisKKwly ZXR1cm4gMDsKK30KKwordm9pZCB4aGNpX2h1Yl91c2IyMF9wb3J0X3Bvd2VyKHN0cnVjdCB4aGNp X2hjZCAqeGhjaSwgaW50IHBvcnQsIGJvb2wgZW5hYmxlKQoreworCXUzMiByZWcgPSByZWFkbCh4 aGNpLT51c2IyX3BvcnRzW3BvcnRdKTsKKworCXJlZyA9IHhoY2lfcG9ydF9zdGF0ZV90b19uZXV0 cmFsKHJlZyk7CisJaWYgKGVuYWJsZSkKKwkJcmVnIHw9IFBPUlRfUE9XRVI7CisJZWxzZQorCQly ZWcgJj0gflBPUlRfUE9XRVI7CisJd3JpdGVsKHJlZywgeGhjaS0+dXNiMl9wb3J0c1twb3J0XSk7 Cit9CisKK3ZvaWQgeGhjaV9odWJfdXNiMzBfcG9ydF9wb3dlcihzdHJ1Y3QgeGhjaV9oY2QgKnho Y2ksIGludCBwb3J0LCBib29sIGVuYWJsZSkKK3sKKwl1MzIgcmVnID0gcmVhZGwoeGhjaS0+dXNi M19wb3J0c1twb3J0XSk7CisKKwlyZWcgPSB4aGNpX3BvcnRfc3RhdGVfdG9fbmV1dHJhbChyZWcp OworCWlmIChlbmFibGUpCisJCXJlZyB8PSBQT1JUX1BPV0VSOworCWVsc2UKKwkJcmVnICY9IH5Q T1JUX1BPV0VSOworCXdyaXRlbChyZWcsIHhoY2ktPnVzYjNfcG9ydHNbcG9ydF0pOworfQorCitp bnQgeGhjaV9odWJfY29udHJvbChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25n IHBpcGUsCisJCSAgICAgdm9pZCAqYnVmZmVyLCBpbnQgbGVuZ3RoLCBzdHJ1Y3QgZGV2cmVxdWVz dCAqcmVxKQoreworCXN0cnVjdCB1c2JfaG9zdCAqaG9zdCA9IGRldi0+aG9zdDsKKwlzdHJ1Y3Qg eGhjaV9oY2QgKnhoY2kgPSB0b194aGNpX2hjZChob3N0KTsKKwlzdHJ1Y3QgdXNiX3Jvb3RfaHVi X2luZm8gKmluZm87CisJX19sZTMyIF9faW9tZW0gKipwb3J0X2FycmF5OworCWludCBtYXhfcG9y dHM7CisJdm9pZCAqc3JjcHRyID0gTlVMTDsKKwl1OCB0bXBidWZbNF07CisJdTE2IHR5cGVSZXE7 CisJaW50IGxlbiwgcG9ydCwgc3JjbGVuID0gMDsKKwl1MzIgcmVnOworCisJZGV2X2RiZyh4aGNp LT5kZXYsICIlcyByZXEgJXUgKCUjeCksIHR5cGUgJXUgKCUjeCksIHZhbHVlICV1ICglI3gpLCBp bmRleCAldSAoJSN4KSwgbGVuZ3RoICV1ICglI3gpXG4iLAorCQlfX2Z1bmNfXywgcmVxLT5yZXF1 ZXN0LCByZXEtPnJlcXVlc3QsCisJCXJlcS0+cmVxdWVzdHR5cGUsIHJlcS0+cmVxdWVzdHR5cGUs CisJCWxlMTZfdG9fY3B1KHJlcS0+dmFsdWUpLCBsZTE2X3RvX2NwdShyZXEtPnZhbHVlKSwKKwkJ bGUxNl90b19jcHUocmVxLT5pbmRleCksIGxlMTZfdG9fY3B1KHJlcS0+aW5kZXgpLAorCQlsZTE2 X3RvX2NwdShyZXEtPmxlbmd0aCksIGxlMTZfdG9fY3B1KHJlcS0+bGVuZ3RoKSk7CisKKwlpZiAo ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfU1VQRVIpIHsKKwkJaW5mbyA9ICZ4aGNpLT51c2IzX2lu Zm87CisJCXBvcnRfYXJyYXkgPSB4aGNpLT51c2IzX3BvcnRzOworCQltYXhfcG9ydHMgPSB4aGNp LT5udW1fdXNiM19wb3J0czsKKwkJZGV2X3dhcm4oeGhjaS0+ZGV2LCAiU3VwZXJTcGVlZCBwb3J0 cyBub3QgaW1wbGVtZW50ZWQhXG4iKTsKKwl9IGVsc2UgeworCQlpbmZvID0gJnhoY2ktPnVzYjJf aW5mbzsKKwkJcG9ydF9hcnJheSA9IHhoY2ktPnVzYjJfcG9ydHM7CisJCW1heF9wb3J0cyA9IHho Y2ktPm51bV91c2IyX3BvcnRzOworCX0KKworCXR5cGVSZXEgPSAocmVxLT5yZXF1ZXN0dHlwZSA8 PCA4KSB8IHJlcS0+cmVxdWVzdDsKKwlzd2l0Y2ggKHR5cGVSZXEpIHsKKwljYXNlIERldmljZVJl cXVlc3QgfCBVU0JfUkVRX0dFVF9ERVNDUklQVE9SOgorCQlkZXZfZGJnKHhoY2ktPmRldiwgIkdl dERldmljZURlc2NyaXB0b3IgJXVcbiIsCisJCQlsZTE2X3RvX2NwdShyZXEtPnZhbHVlKSA+PiA4 KTsKKworCQlzd2l0Y2ggKGxlMTZfdG9fY3B1KHJlcS0+dmFsdWUpID4+IDgpIHsKKwkJY2FzZSBV U0JfRFRfREVWSUNFOgorCQkJc3JjcHRyID0gJmluZm8tPmRldmljZTsKKwkJCXNyY2xlbiA9IGlu Zm8tPmRldmljZS5iTGVuZ3RoOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX0RUX0NPTkZJRzoKKwkJ CXNyY3B0ciA9ICZpbmZvLT5jb25maWc7CisJCQlzcmNsZW4gPSBsZTE2X3RvX2NwdShpbmZvLT5j b25maWcud1RvdGFsTGVuZ3RoKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9EVF9TVFJJTkc6CisJ CQlzd2l0Y2ggKGxlMTZfdG9fY3B1KHJlcS0+dmFsdWUpICYgMHhmZikgeworCQkJY2FzZSAwOgkv KiBMYW5ndWFnZSAqLworCQkJCXNyY3B0ciA9ICJcNFwzXDFcMCI7CisJCQkJc3JjbGVuID0gNDsK KwkJCQlicmVhazsKKwkJCWNhc2UgMToJLyogVmVuZG9yOiAiYmFyZWJveCIgKi8KKwkJCQlzcmNw dHIgPSAiXDIwXDNiXDBhXDByXDBlXDBiXDBvXDB4XDAiOworCQkJCXNyY2xlbiA9IDE2OworCQkJ CWJyZWFrOworCQkJY2FzZSAyOgkvKiBQcm9kdWN0OiAiVVNCIDIuMCBSb290IEh1YiIgKi8KKwkJ CQlzcmNwdHIgPSAiXDQyXDNVXDBTXDBCXDAgXDBcNjJcMC5cMFw2MFwwIFwwUlwwb1wwb1wwdFww IFwwSFwwdVwwYiI7CisJCQkJaWYgKGRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX1NVUEVSKQorCQkJ CQkoKHU4ICopc3JjcHRyKVsxMF0gPSAnMyc7CisJCQkJc3JjbGVuID0gMzQ7CisJCQkJYnJlYWs7 CisJCQlkZWZhdWx0OgorCQkJCWRldl93YXJuKHhoY2ktPmRldiwgInVua25vd24gc3RyaW5nIGRl c2NyaXB0b3IgJXhcbiIsCisJCQkJCSBsZTE2X3RvX2NwdShyZXEtPnZhbHVlKSA+PiA4KTsKKwkJ CQlnb3RvIHVua25vd247CisJCQl9CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIERl dmljZU91dFJlcXVlc3QgfCBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OOgorCQlkZXZfZGJnKHho Y2ktPmRldiwgIlNldERldmljZUNvbmZpZ3VyYXRpb25cbiIpOworCQkvKiBOb3RoaW5nIHRvIGRv ICovCisJCWJyZWFrOworCWNhc2UgRGV2aWNlT3V0UmVxdWVzdCB8IFVTQl9SRVFfU0VUX0FERFJF U1M6CisJCWRldl9kYmcoeGhjaS0+ZGV2LCAiU2V0RGV2aWNlQWRkcmVzcyAldVxuIiwKKwkJCWxl MTZfdG9fY3B1KHJlcS0+dmFsdWUpKTsKKworCQl4aGNpLT5yb290ZGV2ID0gbGUxNl90b19jcHUo cmVxLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgR2V0SHViRGVzY3JpcHRvcjoKKwkJZGV2X2Ri Zyh4aGNpLT5kZXYsICJHZXRIdWJEZXNjcmlwdG9yICV1XG4iLAorCQkJbGUxNl90b19jcHUocmVx LT52YWx1ZSkgPj4gOCk7CisKKwkJc3dpdGNoIChsZTE2X3RvX2NwdShyZXEtPnZhbHVlKSA+PiA4 KSB7CisJCWNhc2UgVVNCX0RUX0hVQjoKKwkJCXNyY3B0ciA9ICZpbmZvLT5odWI7CisJCQlzcmNs ZW4gPSBpbmZvLT5odWIuYkxlbmd0aDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X3dh cm4oeGhjaS0+ZGV2LCAidW5rbm93biBkZXNjcmlwdG9yICV4XG4iLAorCQkJCSBsZTE2X3RvX2Nw dShyZXEtPnZhbHVlKSA+PiA4KTsKKwkJCWdvdG8gdW5rbm93bjsKKwkJfQorCQlicmVhazsKKwlj YXNlIEdldEh1YlN0YXR1czoKKwkJZGV2X2RiZyh4aGNpLT5kZXYsICJHZXRIdWJTdGF0dXNcbiIp OworCisJCS8qIE5vIHBvd2VyIHNvdXJjZSwgb3Zlci1jdXJyZW50IHJlcG9ydGVkIHBlciBwb3J0 ICovCisJCXRtcGJ1ZlswXSA9IDB4MDA7CisJCXRtcGJ1ZlsxXSA9IDB4MDA7CisJCXNyY3B0ciA9 IHRtcGJ1ZjsKKwkJc3JjbGVuID0gMjsKKwkJYnJlYWs7CisJY2FzZSBHZXRQb3J0U3RhdHVzOgor CQlkZXZfZGJnKHhoY2ktPmRldiwgIkdldFBvcnRTdGF0dXMgJXVcbiIsCisJCQlsZTE2X3RvX2Nw dShyZXEtPmluZGV4KSk7CisKKwkJbWVtc2V0KHRtcGJ1ZiwgMCwgNCk7CisKKwkJcG9ydCA9IGxl MTZfdG9fY3B1KHJlcS0+aW5kZXgpOworCQlpZiAoIXBvcnQgfHwgcG9ydCA+IG1heF9wb3J0cykK KwkJCWdvdG8gdW5rbm93bjsKKwkJcG9ydC0tOworCisJCS8qIHJlYWQgUE9SVFNDIHJlZ2lzdGVy ICovCisJCXJlZyA9IHJlYWRsKHBvcnRfYXJyYXlbcG9ydF0pOworCisJCWlmIChyZWcgJiBQT1JU X0NPTk5FQ1QpIHsKKwkJCXRtcGJ1ZlswXSB8PSBVU0JfUE9SVF9TVEFUX0NPTk5FQ1RJT047CisJ CQlpZiAoREVWX0xPV1NQRUVEKHJlZykpCisJCQkJdG1wYnVmWzFdIHw9IFVTQl9QT1JUX1NUQVRf TE9XX1NQRUVEID4+IDg7CisJCQllbHNlIGlmIChERVZfSElHSFNQRUVEKHJlZykpCisJCQkJdG1w YnVmWzFdIHw9IFVTQl9QT1JUX1NUQVRfSElHSF9TUEVFRCA+PiA4OworCQl9CisJCWlmIChyZWcg JiBQT1JUX1BFKQorCQkJdG1wYnVmWzBdIHw9IFVTQl9QT1JUX1NUQVRfRU5BQkxFOworCQlpZiAo cmVnICYgUE9SVF9PQykKKwkJCXRtcGJ1ZlswXSB8PSBVU0JfUE9SVF9TVEFUX09WRVJDVVJSRU5U OworCQlpZiAocmVnICYgUE9SVF9SRVNFVCkKKwkJCXRtcGJ1ZlswXSB8PSBVU0JfUE9SVF9TVEFU X1JFU0VUOworCQkvKiBVU0IgMi4wIG9ubHkgKi8KKwkJaWYgKChyZWcgJiBQT1JUX1BMU19NQVNL KSA9PSBYREVWX1UzICYmIHJlZyAmIFBPUlRfUE9XRVIpCisgICAgICAgICAgICAgICAgICAgICAg ICB0bXBidWZbMF0gfD0gVVNCX1BPUlRfU1RBVF9TVVNQRU5EOworCQkvKiBVU0IgMi4wIG9ubHkg Ki8KKwkJaWYgKHJlZyAmIFBPUlRfUE9XRVIpCisJCQl0bXBidWZbMV0gfD0gVVNCX1BPUlRfU1RB VF9QT1dFUiA+PiA4OworCQlpZiAocmVnICYgUE9SVF9DU0MpCisJCQl0bXBidWZbMl0gfD0gVVNC X1BPUlRfU1RBVF9DX0NPTk5FQ1RJT047CisJCWlmIChyZWcgJiBQT1JUX1BFQykKKwkJCXRtcGJ1 ZlsyXSB8PSBVU0JfUE9SVF9TVEFUX0NfRU5BQkxFOworCQlpZiAocmVnICYgUE9SVF9PQ0MpCisJ CQl0bXBidWZbMl0gfD0gVVNCX1BPUlRfU1RBVF9DX09WRVJDVVJSRU5UOworCQlpZiAocmVnICYg UE9SVF9SQykKKwkJCXRtcGJ1ZlsyXSB8PSBVU0JfUE9SVF9TVEFUX0NfUkVTRVQ7CisJCXNyY3B0 ciA9IHRtcGJ1ZjsKKwkJc3JjbGVuID0gNDsKKwkJYnJlYWs7CisJY2FzZSBDbGVhclBvcnRGZWF0 dXJlOgorCQlkZXZfZGJnKHhoY2ktPmRldiwgIkNsZWFyUG9ydEZlYXR1cmUgJXUgJXVcbiIsCisJ CQlsZTE2X3RvX2NwdShyZXEtPmluZGV4KSwgbGUxNl90b19jcHUocmVxLT52YWx1ZSkpOworCisJ CXBvcnQgPSBsZTE2X3RvX2NwdShyZXEtPmluZGV4KTsKKwkJaWYgKCFwb3J0IHx8IHBvcnQgPiBt YXhfcG9ydHMpCisJCQlnb3RvIHVua25vd247CisJCXBvcnQtLTsKKworCQlyZWcgPSB4aGNpX3Bv cnRfc3RhdGVfdG9fbmV1dHJhbChyZWFkbChwb3J0X2FycmF5W3BvcnRdKSk7CisKKwkJc3dpdGNo IChsZTE2X3RvX2NwdShyZXEtPnZhbHVlKSkgeworCQljYXNlIFVTQl9QT1JUX0ZFQVRfRU5BQkxF OgorICAgICAgICAgICAgICAgICAgICAgICAgcmVnICY9IH5QT1JUX1BFOworCQkJYnJlYWs7CisJ CWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZyAm PSB+UE9SVF9QT1dFUjsKKwkJCWJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVVNCX1BPUlRf RkVBVF9DX0NPTk5FQ1RJT046CisJCQlyZWcgfD0gUE9SVF9DU0M7CisJCQlicmVhazsKKyAgICAg ICAgICAgICAgICBjYXNlIFVTQl9QT1JUX0ZFQVRfQ19FTkFCTEU6CisJCQlyZWcgfD0gUE9SVF9Q RUM7CisJCQlicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFVTQl9QT1JUX0ZFQVRfQ19PVkVS X0NVUlJFTlQ6CisJCQlyZWcgfD0gUE9SVF9PQ0M7CisJCQlicmVhazsKKyAgICAgICAgICAgICAg ICBjYXNlIFVTQl9QT1JUX0ZFQVRfQ19SRVNFVDoKKwkJCXJlZyB8PSBQT1JUX1JDOworCQkJYnJl YWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfd2Fybih4aGNpLT5kZXYsICJ1bmtub3duIGZlYXR1cmUg JXVcbiIsCisJCQkJIGxlMTZfdG9fY3B1KHJlcS0+dmFsdWUpKTsKKwkJCWdvdG8gdW5rbm93bjsK KwkJfQorCQl3cml0ZWwocmVnLCBwb3J0X2FycmF5W3BvcnRdKTsKKwkJcmVhZGwocG9ydF9hcnJh eVtwb3J0XSk7CisKKwkJaWYgKGxlMTZfdG9fY3B1KHJlcS0+dmFsdWUpID09IFVTQl9QT1JUX0ZF QVRfQ19DT05ORUNUSU9OKQorCQkJeGhjaV9odWJfZmluaXNoX3BvcnRfZGV0YWNoKHhoY2ksIHBv cnQgKyAxKTsKKworCQlicmVhazsKKwljYXNlIFNldFBvcnRGZWF0dXJlOgorCQlkZXZfZGJnKHho Y2ktPmRldiwgIlNldFBvcnRGZWF0dXJlICV1ICV1XG4iLAorCQkJbGUxNl90b19jcHUocmVxLT5p bmRleCksIGxlMTZfdG9fY3B1KHJlcS0+dmFsdWUpKTsKKworCQlwb3J0ID0gbGUxNl90b19jcHUo cmVxLT5pbmRleCk7CisJCWlmICghcG9ydCB8fCBwb3J0ID4gbWF4X3BvcnRzKQorCQkJZ290byB1 bmtub3duOworCQlwb3J0LS07CisKKwkJcmVnID0geGhjaV9wb3J0X3N0YXRlX3RvX25ldXRyYWwo cmVhZGwocG9ydF9hcnJheVtwb3J0XSkpOworCisJCXN3aXRjaCAobGUxNl90b19jcHUocmVxLT52 YWx1ZSkpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1BPV0VSOgorCQkJcmVnIHw9IFBPUlRfUE9X RVI7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1JFU0VUOgorCQkJcmVnIHw9IFBP UlRfUkVTRVQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl93YXJuKHhoY2ktPmRldiwg InVua25vd24gZmVhdHVyZSAldVxuIiwKKwkJCQkgbGUxNl90b19jcHUocmVxLT52YWx1ZSkpOwor CQkJZ290byB1bmtub3duOworCQl9CisJCXdyaXRlbChyZWcsIHBvcnRfYXJyYXlbcG9ydF0pOwor CQlyZWFkbChwb3J0X2FycmF5W3BvcnRdKTsKKworCQlpZiAobGUxNl90b19jcHUocmVxLT52YWx1 ZSkgPT0gVVNCX1BPUlRfRkVBVF9SRVNFVCkKKwkJCXhoY2lfaHViX2ZpbmlzaF9wb3J0X3Jlc2V0 KHhoY2ksIHBvcnQgKyAxKTsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfd2Fybih4aGNp LT5kZXYsICJ1bmtub3duIHJvb3QgaHViIHJlcXVlc3QgJXUgKCUjeCkgdHlwZSAldSAoJSN4KVxu IiwKKwkJCSByZXEtPnJlcXVlc3QsIHJlcS0+cmVxdWVzdCwKKwkJCSByZXEtPnJlcXVlc3R0eXBl LCByZXEtPnJlcXVlc3R0eXBlKTsKKwkJZ290byB1bmtub3duOworCX0KKworCWxlbiA9IG1pbjMo c3JjbGVuLCAoaW50KWxlMTZfdG9fY3B1KHJlcS0+bGVuZ3RoKSwgbGVuZ3RoKTsKKwlpZiAoc3Jj cHRyICYmIGxlbikKKwkJbWVtY3B5KGJ1ZmZlciwgc3JjcHRyLCBsZW4pOworCWRldi0+YWN0X2xl biA9IGxlbjsKKwlkZXYtPnN0YXR1cyA9IDA7CisKKwlyZXR1cm4gMDsKKwordW5rbm93bjoKKwlk ZXYtPmFjdF9sZW4gPSAwOworCWRldi0+c3RhdHVzID0gVVNCX1NUX1NUQUxMRUQ7CisJcmV0dXJu IC1FTk9UU1VQUDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oIGIvZHJp dmVycy91c2IvaG9zdC94aGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi45NzZhZWZiMjFkNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3ho Y2kuaApAQCAtMCwwICsxLDEyODQgQEAKKy8qCisgKiB4SENJIFVTQiAzLjAgU3BlY2lmaWNhdGlv bgorICoKKyAqIFNlYmFzdGlhbiBIZXNzZWxiYXJ0aCA8c2ViYXN0aWFuLmhlc3NlbGJhcnRoQGdt YWlsLmNvbT4KKyAqCisgKiBTb21lIGNvZGUgYm9ycm93ZWQgZnJvbSB0aGUgTGludXggeEhDSSBk cml2ZXIKKyAqICAgQXV0aG9yOiBTYXJhaCBTaGFycAorICogICBDb3B5cmlnaHQgKEMpIDIwMDgg SW50ZWwgQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAq IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YgTUVSQ0hBTlRBQklMSVRZCisgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFp bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA2NzUgTWFz cyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fWEhDSV9I CisjZGVmaW5lIF9fWEhDSV9ICisKKyNkZWZpbmUgTlVNX0NPTU1BTkRfVFJCUwk4CisjZGVmaW5l IE5VTV9UUkFOU0ZFUl9UUkJTCTgKKyNkZWZpbmUgTlVNX0VWRU5UX1NFR00JCTEJLyogb25seSBv bmUgc3VwcG9ydGVkICovCisjZGVmaW5lIE5VTV9FVkVOVF9UUkJTCQkxNgkvKiBtaW5pbXVtIDE2 IFRSQlMgKi8KKyNkZWZpbmUgTUlOX0VQX1JJTkdTCQkzCS8qIENvbnRyb2wgKyBCdWxrIEluL091 dCAqLworI2RlZmluZSBNQVhfRVBfUklOR1MJCTE1CisKKy8qIFVwIHRvIDE2IG1zIHRvIGhhbHQg YW4gSEMgKi8KKyNkZWZpbmUgWEhDSV9NQVhfSEFMVF9VU0VDCSgxNiAqIDEwMDApCisKKy8qIENv bW1hbmQgYW5kIFN0YXR1cyByZWdpc3RlcnMgb2Zmc2V0IGZyb20gdGhlIE9wZXJhdGlvbmFsIFJl Z2lzdGVycyBhZGRyZXNzICovCisjZGVmaW5lIFhIQ0lfQ01EX09GRlNFVAkJMHgwMAorI2RlZmlu ZSBYSENJX1NUU19PRkZTRVQJCTB4MDQKKy8qIEhDQ1BBUkFNUyBvZmZzZXQgZnJvbSBQQ0kgYmFz ZSBhZGRyZXNzICovCisjZGVmaW5lIFhIQ0lfSENDX1BBUkFNU19PRkZTRVQJMHgxMAorLyogeEhD SSBQQ0kgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgWEhDSV9TQlJOX09GRlNF VAkweDYwCisKKy8qIE1heCBudW1iZXIgb2YgVVNCIGRldmljZXMgZm9yIGFueSBob3N0IGNvbnRy b2xsZXIgLSBsaW1pdCBpbiBzZWN0aW9uIDYuMSAqLworI2RlZmluZSBNQVhfSENfU0xPVFMJCTI1 NgorLyogU2VjdGlvbiA1LjMuMyAtIE1heFBvcnRzICovCisjZGVmaW5lIE1BWF9IQ19QT1JUUwkJ MTI3CisKKy8qCisgKiB4SENJIHJlZ2lzdGVyIGludGVyZmFjZS4KKyAqIFRoaXMgY29ycmVzcG9u ZHMgdG8gdGhlIGVYdGVuc2libGUgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSAoeEhDSSkKKyAq IFJldmlzaW9uIDAuOTUgc3BlY2lmaWNhdGlvbgorICovCisKKy8qKgorICogc3RydWN0IHhoY2lf Y2FwX3JlZ3MgLSB4SENJIEhvc3QgQ29udHJvbGxlciBDYXBhYmlsaXR5IFJlZ2lzdGVycy4KKyAq IEBoY19jYXBiYXNlOgkJbGVuZ3RoIG9mIHRoZSBjYXBhYmlsaXRpZXMgcmVnaXN0ZXIgYW5kIEhD IHZlcnNpb24gbnVtYmVyCisgKiBAaGNzX3BhcmFtczE6CUhDU1BBUkFNUzEgLSBTdHJ1Y3R1cmFs IFBhcmFtZXRlcnMgMQorICogQGhjc19wYXJhbXMyOglIQ1NQQVJBTVMyIC0gU3RydWN0dXJhbCBQ YXJhbWV0ZXJzIDIKKyAqIEBoY3NfcGFyYW1zMzoJSENTUEFSQU1TMyAtIFN0cnVjdHVyYWwgUGFy YW1ldGVycyAzCisgKiBAaGNjX3BhcmFtczoJCUhDQ1BBUkFNUyAtIENhcGFiaWxpdHkgUGFyYW1l dGVycworICogQGRiX29mZjoJCURCT0ZGIC0gRG9vcmJlbGwgYXJyYXkgb2Zmc2V0CisgKiBAcnVu X3JlZ3Nfb2ZmOglSVFNPRkYgLSBSdW50aW1lIHJlZ2lzdGVyIHNwYWNlIG9mZnNldAorICovCitz dHJ1Y3QgeGhjaV9jYXBfcmVncyB7CisJX19sZTMyCWhjX2NhcGJhc2U7CisJX19sZTMyCWhjc19w YXJhbXMxOworCV9fbGUzMgloY3NfcGFyYW1zMjsKKwlfX2xlMzIJaGNzX3BhcmFtczM7CisJX19s ZTMyCWhjY19wYXJhbXM7CisJX19sZTMyCWRiX29mZjsKKwlfX2xlMzIJcnVuX3JlZ3Nfb2ZmOwor CS8qIFJlc2VydmVkIHVwIHRvIChDQVBMRU5HVEggLSAweDFDKSAqLworfTsKKworLyogaGNfY2Fw YmFzZSBiaXRtYXNrcyAqLworLyogYml0cyA3OjAgLSBob3cgbG9uZyBpcyB0aGUgQ2FwYWJpbGl0 aWVzIHJlZ2lzdGVyICovCisjZGVmaW5lIEhDX0xFTkdUSChwKQkJKChwKSAmIDB4MDBmZikKKy8q IGJpdHMgMzE6MTYgICAqLworI2RlZmluZSBIQ19WRVJTSU9OKHApCQkoKChwKSA+PiAxNikgJiAw eGZmZmYpCisKKy8qIEhDU1BBUkFNUzEgLSBoY3NfcGFyYW1zMSAtIGJpdG1hc2tzICovCisvKiBi aXRzIDA6NywgTWF4IERldmljZSBTbG90cyAqLworI2RlZmluZSBIQ1NfTUFYX1NMT1RTKHApCSgo KHApID4+IDApICYgMHhmZikKKyNkZWZpbmUgSENTX1NMT1RTX01BU0sJCTB4ZmYKKy8qIGJpdHMg ODoxOCwgTWF4IEludGVycnVwdGVycyAqLworI2RlZmluZSBIQ1NfTUFYX0lOVFJTKHApCSgoKHAp ID4+IDgpICYgMHg3ZmYpCisvKiBiaXRzIDI0OjMxLCBNYXggUG9ydHMgLSBtYXggdmFsdWUgaXMg MHg3RiA9IDEyNyBwb3J0cyAqLworI2RlZmluZSBIQ1NfTUFYX1BPUlRTKHApCSgoKHApID4+IDI0 KSAmIDB4N2YpCisKKy8qIEhDU1BBUkFNUzIgLSBoY3NfcGFyYW1zMiAtIGJpdG1hc2tzICovCisv KiBiaXRzIDA6MywgZnJhbWVzIG9yIHVmcmFtZXMgdGhhdCBTVyBuZWVkcyB0byBxdWV1ZSB0cmFu c2FjdGlvbnMKKyAqIGFoZWFkIG9mIHRoZSBIVyB0byBtZWV0IHBlcmlvZGljIGRlYWRsaW5lcyAq LworI2RlZmluZSBIQ1NfSVNUKHApCQkoKChwKSA+PiAwKSAmIDB4ZikKKy8qIGJpdHMgNDo3LCBt YXggbnVtYmVyIG9mIEV2ZW50IFJpbmcgc2VnbWVudHMgKi8KKyNkZWZpbmUgSENTX0VSU1RfTUFY KHApCQkoKChwKSA+PiA0KSAmIDB4ZikKKy8qIGJpdCAyNiBTY3JhdGNocGFkIHJlc3RvcmUgLSBm b3Igc2F2ZS9yZXN0b3JlIEhXIHN0YXRlIC0gbm90IHVzZWQgeWV0ICovCisvKiBiaXRzIDI3OjMx IG51bWJlciBvZiBTY3JhdGNocGFkIGJ1ZmZlcnMgU1cgbXVzdCBhbGxvY2F0ZSBmb3IgdGhlIEhX ICovCisjZGVmaW5lIEhDU19NQVhfU0NSQVRDSFBBRChwKQkoKChwKSA+PiAyNykgJiAweDFmKQor CisvKiBIQ1NQQVJBTVMzIC0gaGNzX3BhcmFtczMgLSBiaXRtYXNrcyAqLworLyogYml0cyAwOjcs IE1heCBVMSB0byBVMCBsYXRlbmN5IGZvciB0aGUgcm9vdGh1YiBwb3J0cyAqLworI2RlZmluZSBI Q1NfVTFfTEFURU5DWShwKQkoKChwKSA+PiAwKSAmIDB4ZmYpCisvKiBiaXRzIDE2OjMxLCBNYXgg VTIgdG8gVTAgbGF0ZW5jeSBmb3IgdGhlIHJvb3RodWIgcG9ydHMgKi8KKyNkZWZpbmUgSENTX1Uy X0xBVEVOQ1kocCkJKCgocCkgPj4gMTYpICYgMHhmZmZmKQorCisvKiBIQ0NQQVJBTVMgLSBoY2Nf cGFyYW1zIC0gYml0bWFza3MgKi8KKy8qIHRydWU6IEhDIGNhbiB1c2UgNjQtYml0IGFkZHJlc3Mg cG9pbnRlcnMgKi8KKyNkZWZpbmUgSENDXzY0QklUX0FERFIocCkJKChwKSAmIEJJVCgwKSkKKy8q IHRydWU6IEhDIGNhbiBkbyBiYW5kd2lkdGggbmVnb3RpYXRpb24gKi8KKyNkZWZpbmUgSENDX0JB TkRXSURUSF9ORUcocCkJKChwKSAmIEJJVCgxKSkKKy8qIHRydWU6IEhDIHVzZXMgNjQtYnl0ZSBE ZXZpY2UgQ29udGV4dCBzdHJ1Y3R1cmVzCisgKiBGSVhNRSA2NC1ieXRlIGNvbnRleHQgc3RydWN0 dXJlcyBhcmVuJ3Qgc3VwcG9ydGVkIHlldC4KKyAqLworI2RlZmluZSBIQ0NfNjRCWVRFX0NPTlRF WFQocCkJKChwKSAmIEJJVCgyKSkKKyNkZWZpbmUgSENDX0NUWF9TSVpFKHApCQkoSENDXzY0QllU RV9DT05URVhUKHApID8gNjQgOiAzMikKKy8qIHRydWU6IEhDIGhhcyBwb3J0IHBvd2VyIHN3aXRj aGVzICovCisjZGVmaW5lIEhDQ19QUEMocCkJCSgocCkgJiBCSVQoMykpCisvKiB0cnVlOiBIQyBo YXMgcG9ydCBpbmRpY2F0b3JzICovCisjZGVmaW5lIEhDQ19JTkRJQ0FUT1IocCkJKChwKSAmIEJJ VCg0KSkKKy8qIHRydWU6IEhDIGhhcyBMaWdodCBIQyBSZXNldCBDYXBhYmlsaXR5ICovCisjZGVm aW5lIEhDQ19MSUdIVF9SRVNFVChwKQkoKHApICYgQklUKDUpKQorLyogdHJ1ZTogSEMgc3VwcG9y dHMgbGF0ZW5jeSB0b2xlcmFuY2UgbWVzc2FnaW5nICovCisjZGVmaW5lIEhDQ19MVEMocCkJCSgo cCkgJiBCSVQoNikpCisvKiB0cnVlOiBubyBzZWNvbmRhcnkgU3RyZWFtIElEIFN1cHBvcnQgKi8K KyNkZWZpbmUgSENDX05TUyhwKQkJKChwKSAmIEJJVCg3KSkKKy8qIE1heCBzaXplIGZvciBQcmlt YXJ5IFN0cmVhbSBBcnJheXMgLSAyXihuKzEpLCB3aGVyZSBuIGlzIGJpdHMgMTI6MTUgKi8KKyNk ZWZpbmUgSENDX01BWF9QU0EocCkJCSgxIDw8ICgoKChwKSA+PiAxMikgJiAweGYpICsgMSkpCisv KiBFeHRlbmRlZCBDYXBhYmlsaXRpZXMgcG9pbnRlciBmcm9tIFBDSSBiYXNlIC0gc2VjdGlvbiA1 LjMuNiAqLworI2RlZmluZSBIQ0NfRVhUX0NBUFMocCkJCSgoKHApID4+IDE2KSAmIDB4ZmZmZikK KworLyogZGJfb2ZmIGJpdG1hc2sgLSBiaXRzIDA6MSByZXNlcnZlZCAqLworI2RlZmluZSBEQk9G Rl9NQVNLCQkofjB4MykKKworLyogcnVuX3JlZ3Nfb2ZmIGJpdG1hc2sgLSBiaXRzIDA6NCByZXNl cnZlZCAqLworI2RlZmluZSBSVFNPRkZfTUFTSwkJKH4weDFmKQorCisvKiBOdW1iZXIgb2YgcmVn aXN0ZXJzIHBlciBwb3J0ICovCisjZGVmaW5lIE5VTV9QT1JUX1JFR1MJNAorCisjZGVmaW5lIFBP UlRTQwkJMAorI2RlZmluZSBQT1JUUE1TQwkxCisjZGVmaW5lIFBPUlRMSQkJMgorI2RlZmluZSBQ T1JUSExQTUMJMworCisvKioKKyAqIHN0cnVjdCB4aGNpX29wX3JlZ3MgLSB4SENJIEhvc3QgQ29u dHJvbGxlciBPcGVyYXRpb25hbCBSZWdpc3RlcnMuCisgKiBAY29tbWFuZDogICAgICAgICAgICBV U0JDTUQgLSB4SEMgY29tbWFuZCByZWdpc3RlcgorICogQHN0YXR1czogICAgICAgICAgICAgVVNC U1RTIC0geEhDIHN0YXR1cyByZWdpc3RlcgorICogQHBhZ2Vfc2l6ZTogICAgICAgICAgVGhpcyBp bmRpY2F0ZXMgdGhlIHBhZ2Ugc2l6ZSB0aGF0IHRoZSBob3N0IGNvbnRyb2xsZXIKKyAqICAgICAg ICAgICAgICAgICAgICAgIHN1cHBvcnRzLiAgSWYgYml0IG4gaXMgc2V0LCB0aGUgSEMgc3VwcG9y dHMgYSBwYWdlIHNpemUKKyAqICAgICAgICAgICAgICAgICAgICAgIG9mIDJeKG4rMTIpLCB1cCB0 byBhIDEyOE1CIHBhZ2Ugc2l6ZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIDRLIGlzIHRoZSBt aW5pbXVtIHBhZ2Ugc2l6ZS4KKyAqIEBjbWRfcmluZzogICAgICAgICAgIENSUCAtIDY0LWJpdCBD b21tYW5kIFJpbmcgUG9pbnRlcgorICogQGRjYmFhX3B0cjogICAgICAgICAgRENCQUFQIC0gNjQt Yml0IERldmljZSBDb250ZXh0IEJhc2UgQWRkcmVzcyBBcnJheSBQb2ludGVyCisgKiBAY29uZmln X3JlZzogICAgICAgICBDT05GSUcgLSBDb25maWd1cmUgUmVnaXN0ZXIKKyAqIEBwb3J0X3N0YXR1 c19iYXNlOiAgIFBPUlRTQ24gLSBiYXNlIGFkZHJlc3MgZm9yIFBvcnQgU3RhdHVzIGFuZCBDb250 cm9sCisgKiAgICAgICAgICAgICAgICAgICAgICBFYWNoIHBvcnQgaGFzIGEgUG9ydCBTdGF0dXMg YW5kIENvbnRyb2wgcmVnaXN0ZXIsCisgKiAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dlZCBi eSBhIFBvcnQgUG93ZXIgTWFuYWdlbWVudCBTdGF0dXMgYW5kIENvbnRyb2wKKyAqICAgICAgICAg ICAgICAgICAgICAgIHJlZ2lzdGVyLCBhIFBvcnQgTGluayBJbmZvIHJlZ2lzdGVyLCBhbmQgYSBy ZXNlcnZlZAorICogICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIuCisgKiBAcG9ydF9wb3dl cl9iYXNlOiAgICBQT1JUUE1TQ24gLSBiYXNlIGFkZHJlc3MgZm9yCisgKiAgICAgICAgICAgICAg ICAgICAgICBQb3J0IFBvd2VyIE1hbmFnZW1lbnQgU3RhdHVzIGFuZCBDb250cm9sCisgKiBAcG9y dF9saW5rX2Jhc2U6ICAgICBQT1JUTEluIC0gYmFzZSBhZGRyZXNzIGZvciBQb3J0IExpbmsgSW5m byAoY3VycmVudAorICogICAgICAgICAgICAgICAgICAgICAgTGluayBQTSBzdGF0ZSBhbmQgY29u dHJvbCkgZm9yIFVTQiAyLjEgYW5kIFVTQiAzLjAKKyAqICAgICAgICAgICAgICAgICAgICAgIGRl dmljZXMuCisgKi8KK3N0cnVjdCB4aGNpX29wX3JlZ3MgeworCV9fbGUzMgljb21tYW5kOworCV9f bGUzMglzdGF0dXM7CisJX19sZTMyCXBhZ2Vfc2l6ZTsKKwlfX2xlMzIJcmVzZXJ2ZWQxOworCV9f bGUzMglyZXNlcnZlZDI7CisJX19sZTMyCWRldl9ub3RpZmljYXRpb247CisJX19sZTY0CWNtZF9y aW5nOworCS8qIHJzdmQ6IG9mZnNldCAweDIwLTJGICovCisJX19sZTMyCXJlc2VydmVkM1s0XTsK KwlfX2xlNjQJZGNiYWFfcHRyOworCV9fbGUzMgljb25maWdfcmVnOworCS8qIHJzdmQ6IG9mZnNl dCAweDNDLTNGRiAqLworCV9fbGUzMglyZXNlcnZlZDRbMjQxXTsKKwkvKiBwb3J0IDEgcmVnaXN0 ZXJzLCB3aGljaCBzZXJ2ZSBhcyBhIGJhc2UgYWRkcmVzcyBmb3Igb3RoZXIgcG9ydHMgKi8KKwlf X2xlMzIJcG9ydF9zdGF0dXNfYmFzZTsKKwlfX2xlMzIJcG9ydF9wb3dlcl9iYXNlOworCV9fbGUz Mglwb3J0X2xpbmtfYmFzZTsKKwlfX2xlMzIJcmVzZXJ2ZWQ1OworCS8qIHJlZ2lzdGVycyBmb3Ig cG9ydHMgMi0yNTUgKi8KKwlfX2xlMzIJcmVzZXJ2ZWQ2W05VTV9QT1JUX1JFR1MqMjU0XTsKK307 CisKKy8qIFVTQkNNRCAtIFVTQiBjb21tYW5kIC0gY29tbWFuZCBiaXRtYXNrcyAqLworLyogc3Rh cnQvc3RvcCBIQyBleGVjdXRpb24gLSBkbyBub3Qgd3JpdGUgdW5sZXNzIEhDIGlzIGhhbHRlZCov CisjZGVmaW5lIENNRF9SVU4JCUJJVCgwKQorLyogUmVzZXQgSEMgLSByZXNldHMgaW50ZXJuYWwg SEMgc3RhdGUgbWFjaGluZSBhbmQgYWxsIHJlZ2lzdGVycyAoZXhjZXB0CisgKiBQQ0kgY29uZmln IHJlZ3MpLiAgSEMgZG9lcyBOT1QgZHJpdmUgYSBVU0IgcmVzZXQgb24gdGhlIGRvd25zdHJlYW0g cG9ydHMuCisgKiBUaGUgeEhDSSBkcml2ZXIgbXVzdCByZWluaXRpYWxpemUgdGhlIHhIQyBhZnRl ciBzZXR0aW5nIHRoaXMgYml0LgorICovCisjZGVmaW5lIENNRF9SRVNFVAlCSVQoMSkKKy8qIEV2 ZW50IEludGVycnVwdCBFbmFibGUgLSBhICcxJyBhbGxvd3MgaW50ZXJydXB0cyBmcm9tIHRoZSBo b3N0IGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgQ01EX0VJRQkJQklUKDIpCisvKiBIb3N0IFN5c3Rl bSBFcnJvciBJbnRlcnJ1cHQgRW5hYmxlIC0gZ2V0IG91dC1vZi1iYW5kIHNpZ25hbCBmb3IgSEMg ZXJyb3JzICovCisjZGVmaW5lIENNRF9IU0VJRQlCSVQoMykKKy8qIGJpdHMgNDo2IGFyZSByZXNl cnZlZCAoYW5kIHNob3VsZCBiZSBwcmVzZXJ2ZWQgb24gd3JpdGVzKS4gKi8KKy8qIGxpZ2h0IHJl c2V0IChwb3J0IHN0YXR1cyBzdGF5cyB1bmNoYW5nZWQpIC0gcmVzZXQgY29tcGxldGVkIHdoZW4g dGhpcyBpcyAwICovCisjZGVmaW5lIENNRF9MUkVTRVQJQklUKDcpCisvKiBob3N0IGNvbnRyb2xs ZXIgc2F2ZS9yZXN0b3JlIHN0YXRlLiAqLworI2RlZmluZSBDTURfQ1NTCQlCSVQoOCkKKyNkZWZp bmUgQ01EX0NSUwkJQklUKDkpCisvKiBFbmFibGUgV3JhcCBFdmVudCAtICcxJyBtZWFucyB4SEMg Z2VuZXJhdGVzIGFuIGV2ZW50IHdoZW4gTUZJTkRFWCB3cmFwcy4gKi8KKyNkZWZpbmUgQ01EX0VX RQkJQklUKDEwKQorLyogTUZJTkRFWCBwb3dlciBtYW5hZ2VtZW50IC0gJzEnIG1lYW5zIHhIQyBj YW4gc3RvcCBNRklOREVYIGNvdW50ZXIgaWYgYWxsIHJvb3QKKyAqIGh1YnMgYXJlIGluIFUzIChz ZWxlY3RpdmUgc3VzcGVuZCksIGRpc2Nvbm5lY3QsIGRpc2FibGVkLCBvciBwb3dlcmVkLW9mZi4K KyAqICcwJyBtZWFucyB0aGUgeEhDIGNhbiBwb3dlciBpdCBvZmYgaWYgYWxsIHBvcnRzIGFyZSBp biB0aGUgZGlzY29ubmVjdCwKKyAqIGRpc2FibGVkLCBvciBwb3dlcmVkLW9mZiBzdGF0ZS4KKyAq LworI2RlZmluZSBDTURfUE1fSU5ERVgJQklUKDExKQorLyogYml0cyAxMjozMSBhcmUgcmVzZXJ2 ZWQgKGFuZCBzaG91bGQgYmUgcHJlc2VydmVkIG9uIHdyaXRlcykuICovCisjZGVmaW5lIFhIQ0lf SVJRUwkoQ01EX0VJRSB8IENNRF9IU0VJRSB8IENNRF9FV0UpCisKKy8qIElNQU4gLSBJbnRlcnJ1 cHQgTWFuYWdlbWVudCBSZWdpc3RlciAqLworI2RlZmluZSBJTUFOX0lFCQlCSVQoMSkKKyNkZWZp bmUgSU1BTl9JUAkJQklUKDApCisKKy8qIFVTQlNUUyAtIFVTQiBzdGF0dXMgLSBzdGF0dXMgYml0 bWFza3MgKi8KKy8qIEhDIG5vdCBydW5uaW5nIC0gc2V0IHRvIDEgd2hlbiBydW4vc3RvcCBiaXQg aXMgY2xlYXJlZC4gKi8KKyNkZWZpbmUgU1RTX0hBTFQJQklUKDApCisvKiBzZXJpb3VzIGVycm9y LCBlLmcuIFBDSSBwYXJpdHkgZXJyb3IuICBUaGUgSEMgd2lsbCBjbGVhciB0aGUgcnVuL3N0b3Ag Yml0LiAqLworI2RlZmluZSBTVFNfRkFUQUwJQklUKDIpCisvKiBldmVudCBpbnRlcnJ1cHQgLSBj bGVhciB0aGlzIHByaW9yIHRvIGNsZWFyaW5nIGFueSBJUCBmbGFncyBpbiBJUiBzZXQqLworI2Rl ZmluZSBTVFNfRUlOVAlCSVQoMykKKy8qIHBvcnQgY2hhbmdlIGRldGVjdCAqLworI2RlZmluZSBT VFNfUE9SVAlCSVQoNCkKKy8qIGJpdHMgNTo3IHJlc2VydmVkIGFuZCB6ZXJvZWQgKi8KKy8qIHNh dmUgc3RhdGUgc3RhdHVzIC0gJzEnIG1lYW5zIHhIQyBpcyBzYXZpbmcgc3RhdGUgKi8KKyNkZWZp bmUgU1RTX1NBVkUJQklUKDgpCisvKiByZXN0b3JlIHN0YXRlIHN0YXR1cyAtICcxJyBtZWFucyB4 SEMgaXMgcmVzdG9yaW5nIHN0YXRlICovCisjZGVmaW5lIFNUU19SRVNUT1JFCUJJVCg5KQorLyog dHJ1ZTogc2F2ZSBvciByZXN0b3JlIGVycm9yICovCisjZGVmaW5lIFNUU19TUkUJCUJJVCgxMCkK Ky8qIHRydWU6IENvbnRyb2xsZXIgTm90IFJlYWR5IHRvIGFjY2VwdCBkb29yYmVsbCBvciBvcCBy ZWcgd3JpdGVzIGFmdGVyIHJlc2V0ICovCisjZGVmaW5lIFNUU19DTlIJCUJJVCgxMSkKKy8qIHRy dWU6IGludGVybmFsIEhvc3QgQ29udHJvbGxlciBFcnJvciAtIFNXIG5lZWRzIHRvIHJlc2V0IGFu ZCByZWluaXRpYWxpemUgKi8KKyNkZWZpbmUgU1RTX0hDRQkJQklUKDEyKQorLyogYml0cyAxMzoz MSByZXNlcnZlZCBhbmQgc2hvdWxkIGJlIHByZXNlcnZlZCAqLworCisvKgorICogRE5DVFJMIC0g RGV2aWNlIE5vdGlmaWNhdGlvbiBDb250cm9sIFJlZ2lzdGVyIC0gZGV2X25vdGlmaWNhdGlvbiBi aXRtYXNrcworICogR2VuZXJhdGUgYSBkZXZpY2Ugbm90aWZpY2F0aW9uIGV2ZW50IHdoZW4gdGhl IEhDIHNlZXMgYSB0cmFuc2FjdGlvbiB3aXRoIGEKKyAqIG5vdGlmaWNhdGlvbiB0eXBlIHRoYXQg bWF0Y2hlcyBhIGJpdCBzZXQgaW4gdGhpcyBiaXQgZmllbGQuCisgKi8KKyNkZWZpbmUgREVWX05P VEVfTUFTSwkJKDB4ZmZmZikKKyNkZWZpbmUgRU5BQkxFX0RFVl9OT1RFKHgpCUJJVCh4KQorLyog TW9zdCBvZiB0aGUgZGV2aWNlIG5vdGlmaWNhdGlvbiB0eXBlcyBzaG91bGQgb25seSBiZSB1c2Vk IGZvciBkZWJ1Zy4KKyAqIFNXIGRvZXMgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIGZ1bmN0aW9u IHdha2Ugbm90aWZpY2F0aW9ucy4KKyAqLworI2RlZmluZSBERVZfTk9URV9GV0FLRQkJRU5BQkxF X0RFVl9OT1RFKDEpCisKKy8qIENSQ1IgLSBDb21tYW5kIFJpbmcgQ29udHJvbCBSZWdpc3RlciAt IGNtZF9yaW5nIGJpdG1hc2tzICovCisvKiBiaXQgMCBpcyB0aGUgY29tbWFuZCByaW5nIGN5Y2xl IHN0YXRlICovCisvKiBzdG9wIHJpbmcgb3BlcmF0aW9uIGFmdGVyIGNvbXBsZXRpb24gb2YgdGhl IGN1cnJlbnRseSBleGVjdXRpbmcgY29tbWFuZCAqLworI2RlZmluZSBDTURfUklOR19QQVVTRQkJ QklUKDEpCisvKiBzdG9wIHJpbmcgaW1tZWRpYXRlbHkgLSBhYm9ydCB0aGUgY3VycmVudGx5IGV4 ZWN1dGluZyBjb21tYW5kICovCisjZGVmaW5lIENNRF9SSU5HX0FCT1JUCQlCSVQoMikKKy8qIHRy dWU6IGNvbW1hbmQgcmluZyBpcyBydW5uaW5nICovCisjZGVmaW5lIENNRF9SSU5HX1JVTk5JTkcJ QklUKDMpCisvKiBiaXRzIDQ6NSByZXNlcnZlZCBhbmQgc2hvdWxkIGJlIHByZXNlcnZlZCAqLwor LyogQ29tbWFuZCBSaW5nIHBvaW50ZXIgLSBiaXQgbWFzayBmb3IgdGhlIGxvd2VyIDMyIGJpdHMu ICovCisjZGVmaW5lIENNRF9SSU5HX1JTVkRfQklUUwkoMHgzZikKKworLyogQ09ORklHIC0gQ29u ZmlndXJlIFJlZ2lzdGVyIC0gY29uZmlnX3JlZyBiaXRtYXNrcyAqLworLyogYml0cyAwOjcgLSBt YXhpbXVtIG51bWJlciBvZiBkZXZpY2Ugc2xvdHMgZW5hYmxlZCAoTnVtU2xvdHNFbikgKi8KKyNk ZWZpbmUgTUFYX0RFVlMocCkJCSgocCkgJiAweGZmKQorLyogYml0cyA4OjMxIC0gcmVzZXJ2ZWQg YW5kIHNob3VsZCBiZSBwcmVzZXJ2ZWQgKi8KKworLyogUE9SVFNDIC0gUG9ydCBTdGF0dXMgYW5k IENvbnRyb2wgUmVnaXN0ZXIgLSBwb3J0X3N0YXR1c19iYXNlIGJpdG1hc2tzICovCisvKiB0cnVl OiBkZXZpY2UgY29ubmVjdGVkICovCisjZGVmaW5lIFBPUlRfQ09OTkVDVAkJQklUKDApCisvKiB0 cnVlOiBwb3J0IGVuYWJsZWQgKi8KKyNkZWZpbmUgUE9SVF9QRQkJCUJJVCgxKQorLyogYml0IDIg cmVzZXJ2ZWQgYW5kIHplcm9lZCAqLworLyogdHJ1ZTogcG9ydCBoYXMgYW4gb3Zlci1jdXJyZW50 IGNvbmRpdGlvbiAqLworI2RlZmluZSBQT1JUX09DCQkJQklUKDMpCisvKiB0cnVlOiBwb3J0IHJl c2V0IHNpZ25hbGluZyBhc3NlcnRlZCAqLworI2RlZmluZSBQT1JUX1JFU0VUCQlCSVQoNCkKKy8q IFBvcnQgTGluayBTdGF0ZSAtIGJpdHMgNTo4CisgKiBBIHJlYWQgZ2l2ZXMgdGhlIGN1cnJlbnQg bGluayBQTSBzdGF0ZSBvZiB0aGUgcG9ydCwKKyAqIGEgd3JpdGUgd2l0aCBMaW5rIFN0YXRlIFdy aXRlIFN0cm9iZSBzZXQgc2V0cyB0aGUgbGluayBzdGF0ZS4KKyAqLworI2RlZmluZSBQT1JUX1BM U19NQVNLCQkoMHhmIDw8IDUpCisjZGVmaW5lIFhERVZfVTAJCQkoMHgwIDw8IDUpCisjZGVmaW5l IFhERVZfVTIJCQkoMHgyIDw8IDUpCisjZGVmaW5lIFhERVZfVTMJCQkoMHgzIDw8IDUpCisjZGVm aW5lIFhERVZfUkVTVU1FCQkoMHhmIDw8IDUpCisvKiB0cnVlOiBwb3J0IGhhcyBwb3dlciAoc2Vl IEhDQ19QUEMpICovCisjZGVmaW5lIFBPUlRfUE9XRVIJCUJJVCg5KQorLyogYml0cyAxMDoxMyBp bmRpY2F0ZSBkZXZpY2Ugc3BlZWQ6CisgKiAwIC0gdW5kZWZpbmVkIHNwZWVkIC0gcG9ydCBoYXNu J3QgYmUgaW5pdGlhbGl6ZWQgYnkgYSByZXNldCB5ZXQKKyAqIDEgLSBmdWxsIHNwZWVkCisgKiAy IC0gbG93IHNwZWVkCisgKiAzIC0gaGlnaCBzcGVlZAorICogNCAtIHN1cGVyIHNwZWVkCisgKiA1 LTE1IHJlc2VydmVkCisgKi8KKyNkZWZpbmUgREVWX1NQRUVEX01BU0sJCSgweGYgPDwgMTApCisj ZGVmaW5lIFhERVZfRlMJCQkoMHgxIDw8IDEwKQorI2RlZmluZSBYREVWX0xTCQkJKDB4MiA8PCAx MCkKKyNkZWZpbmUgWERFVl9IUwkJCSgweDMgPDwgMTApCisjZGVmaW5lIFhERVZfU1MJCQkoMHg0 IDw8IDEwKQorI2RlZmluZSBERVZfVU5ERUZTUEVFRChwKQkoKChwKSAmIERFVl9TUEVFRF9NQVNL KSA9PSAoMHgwPDwxMCkpCisjZGVmaW5lIERFVl9GVUxMU1BFRUQocCkJKCgocCkgJiBERVZfU1BF RURfTUFTSykgPT0gWERFVl9GUykKKyNkZWZpbmUgREVWX0xPV1NQRUVEKHApCQkoKChwKSAmIERF Vl9TUEVFRF9NQVNLKSA9PSBYREVWX0xTKQorI2RlZmluZSBERVZfSElHSFNQRUVEKHApCSgoKHAp ICYgREVWX1NQRUVEX01BU0spID09IFhERVZfSFMpCisjZGVmaW5lIERFVl9TVVBFUlNQRUVEKHAp CSgoKHApICYgREVWX1NQRUVEX01BU0spID09IFhERVZfU1MpCisvKiBCaXRzIDIwOjIzIGluIHRo ZSBTbG90IENvbnRleHQgYXJlIHRoZSBzcGVlZCBmb3IgdGhlIGRldmljZSAqLworI2RlZmluZSBT TE9UX1NQRUVEX0ZTCQkoWERFVl9GUyA8PCAxMCkKKyNkZWZpbmUgU0xPVF9TUEVFRF9MUwkJKFhE RVZfTFMgPDwgMTApCisjZGVmaW5lIFNMT1RfU1BFRURfSFMJCShYREVWX0hTIDw8IDEwKQorI2Rl ZmluZSBTTE9UX1NQRUVEX1NTCQkoWERFVl9TUyA8PCAxMCkKKy8qIFBvcnQgSW5kaWNhdG9yIENv bnRyb2wgKi8KKyNkZWZpbmUgUE9SVF9MRURfT0ZGCQkoMCA8PCAxNCkKKyNkZWZpbmUgUE9SVF9M RURfQU1CRVIJCSgxIDw8IDE0KQorI2RlZmluZSBQT1JUX0xFRF9HUkVFTgkJKDIgPDwgMTQpCisj ZGVmaW5lIFBPUlRfTEVEX01BU0sJCSgzIDw8IDE0KQorLyogUG9ydCBMaW5rIFN0YXRlIFdyaXRl IFN0cm9iZSAtIHNldCB0aGlzIHdoZW4gY2hhbmdpbmcgbGluayBzdGF0ZSAqLworI2RlZmluZSBQ T1JUX0xJTktfU1RST0JFCUJJVCgxNikKKy8qIHRydWU6IGNvbm5lY3Qgc3RhdHVzIGNoYW5nZSAq LworI2RlZmluZSBQT1JUX0NTQwkJQklUKDE3KQorLyogdHJ1ZTogcG9ydCBlbmFibGUgY2hhbmdl ICovCisjZGVmaW5lIFBPUlRfUEVDCQlCSVQoMTgpCisvKiB0cnVlOiB3YXJtIHJlc2V0IGZvciBh IFVTQiAzLjAgZGV2aWNlIGlzIGRvbmUuICBBICJob3QiIHJlc2V0IHB1dHMgdGhlIHBvcnQKKyAq IGludG8gYW4gZW5hYmxlZCBzdGF0ZSwgYW5kIHRoZSBkZXZpY2UgaW50byB0aGUgZGVmYXVsdCBz dGF0ZS4gIEEgIndhcm0iIHJlc2V0CisgKiBhbHNvIHJlc2V0cyB0aGUgbGluaywgZm9yY2luZyB0 aGUgZGV2aWNlIHRocm91Z2ggdGhlIGxpbmsgdHJhaW5pbmcgc2VxdWVuY2UuCisgKiBTVyBjYW4g YWxzbyBsb29rIGF0IHRoZSBQb3J0IFJlc2V0IHJlZ2lzdGVyIHRvIHNlZSB3aGVuIHdhcm0gcmVz ZXQgaXMgZG9uZS4KKyAqLworI2RlZmluZSBQT1JUX1dSQwkJQklUKDE5KQorLyogdHJ1ZTogb3Zl ci1jdXJyZW50IGNoYW5nZSAqLworI2RlZmluZSBQT1JUX09DQwkJQklUKDIwKQorLyogdHJ1ZTog cmVzZXQgY2hhbmdlIC0gMSB0byAwIHRyYW5zaXRpb24gb2YgUE9SVF9SRVNFVCAqLworI2RlZmlu ZSBQT1JUX1JDCQkJQklUKDIxKQorLyogcG9ydCBsaW5rIHN0YXR1cyBjaGFuZ2UgLSBzZXQgb24g c29tZSBwb3J0IGxpbmsgc3RhdGUgdHJhbnNpdGlvbnM6CisgKiAgVHJhbnNpdGlvbiAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVhc29uCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAg LSBVMyB0byBSZXN1bWUgICAgICAgICAgICAgICAgICAgICAgV2FrZXVwIHNpZ25hbGluZyBmcm9t IGEgZGV2aWNlCisgKiAgLSBSZXN1bWUgdG8gUmVjb3ZlcnkgdG8gVTAgICAgICAgICAgVVNCIDMu MCBkZXZpY2UgcmVzdW1lCisgKiAgLSBSZXN1bWUgdG8gVTAgICAgICAgICAgICAgICAgICAgICAg VVNCIDIuMCBkZXZpY2UgcmVzdW1lCisgKiAgLSBVMyB0byBSZWNvdmVyeSB0byBVMCAgICAgICAg ICAgICAgU29mdHdhcmUgcmVzdW1lIG9mIFVTQiAzLjAgZGV2aWNlIGNvbXBsZXRlCisgKiAgLSBV MyB0byBVMCAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgcmVzdW1lIG9mIFVTQiAy LjAgZGV2aWNlIGNvbXBsZXRlCisgKiAgLSBVMiB0byBVMCAgICAgICAgICAgICAgICAgICAgICAg ICAgTDEgcmVzdW1lIG9mIFVTQiAyLjEgZGV2aWNlIGNvbXBsZXRlCisgKiAgLSBVMCB0byBVMCAo Pz8/KSAgICAgICAgICAgICAgICAgICAgTDEgZW50cnkgcmVqZWN0aW9uIGJ5IFVTQiAyLjEgZGV2 aWNlCisgKiAgLSBVMCB0byBkaXNhYmxlZCAgICAgICAgICAgICAgICAgICAgTDEgZW50cnkgZXJy b3Igd2l0aCBVU0IgMi4xIGRldmljZQorICogIC0gQW55IHN0YXRlIHRvIGluYWN0aXZlICAgICAg ICAgICAgIEVycm9yIG9uIFVTQiAzLjAgcG9ydAorICovCisjZGVmaW5lIFBPUlRfUExDCQlCSVQo MjIpCisvKiBwb3J0IGNvbmZpZ3VyZSBlcnJvciBjaGFuZ2UgLSBwb3J0IGZhaWxlZCB0byBjb25m aWd1cmUgaXRzIGxpbmsgcGFydG5lciAqLworI2RlZmluZSBQT1JUX0NFQwkJQklUKDIzKQorLyog Q29sZCBBdHRhY2ggU3RhdHVzIC0geEhDIGNhbiBzZXQgdGhpcyBiaXQgdG8gcmVwb3J0IGRldmlj ZSBhdHRhY2hlZCBkdXJpbmcKKyAqIFN4IHN0YXRlLiBXYXJtIHBvcnQgcmVzZXQgc2hvdWxkIGJl IHBlcmZvbWVkIHRvIGNsZWFyIHRoaXMgYml0IGFuZCBtb3ZlIHBvcnQKKyAqIHRvIGNvbm5lY3Rl ZCBzdGF0ZS4KKyAqLworI2RlZmluZSBQT1JUX0NBUwkJQklUKDI0KQorLyogd2FrZSBvbiBjb25u ZWN0IChlbmFibGUpICovCisjZGVmaW5lIFBPUlRfV0tDT05OX0UJCUJJVCgyNSkKKy8qIHdha2Ug b24gZGlzY29ubmVjdCAoZW5hYmxlKSAqLworI2RlZmluZSBQT1JUX1dLRElTQ19FCQlCSVQoMjYp CisvKiB3YWtlIG9uIG92ZXItY3VycmVudCAoZW5hYmxlKSAqLworI2RlZmluZSBQT1JUX1dLT0Nf RQkJQklUKDI3KQorLyogYml0cyAyODoyOSByZXNlcnZlZCAqLworLyogdHJ1ZTogZGV2aWNlIGlz IHJlbW92YWJsZSAtIGZvciBVU0IgMy4wIHJvb3RodWIgZW11bGF0aW9uICovCisjZGVmaW5lIFBP UlRfREVWX1JFTU9WRQkJQklUKDMwKQorLyogSW5pdGlhdGUgYSB3YXJtIHBvcnQgcmVzZXQgLSBj b21wbGV0ZSB3aGVuIFBPUlRfV1JDIGlzICcxJyAqLworI2RlZmluZSBQT1JUX1dSCQkJQklUKDMx KQorCisvKiBXZSBtYXJrIGR1cGxpY2F0ZSBlbnRyaWVzIHdpdGggLTEgKi8KKyNkZWZpbmUgRFVQ TElDQVRFX0VOVFJZCQkoKHU4KSgtMSkpCisKKy8qIFBvcnQgUG93ZXIgTWFuYWdlbWVudCBTdGF0 dXMgYW5kIENvbnRyb2wgLSBwb3J0X3Bvd2VyX2Jhc2UgYml0bWFza3MgKi8KKy8qIEluYWN0aXZp dHkgdGltZXIgdmFsdWUgZm9yIHRyYW5zaXRpb25zIGludG8gVTEsIGluIG1pY3Jvc2Vjb25kcy4K KyAqIFRpbWVvdXQgY2FuIGJlIHVwIHRvIDEyN3VzLiAgMHhGRiBtZWFucyBhbiBpbmZpbml0ZSB0 aW1lb3V0LgorICovCisjZGVmaW5lIFBPUlRfVTFfVElNRU9VVChwKQkoKHApICYgMHhmZikKKyNk ZWZpbmUgUE9SVF9VMV9USU1FT1VUX01BU0sJMHhmZgorLyogSW5hY3Rpdml0eSB0aW1lciB2YWx1 ZSBmb3IgdHJhbnNpdGlvbnMgaW50byBVMiAqLworI2RlZmluZSBQT1JUX1UyX1RJTUVPVVQocCkJ KCgocCkgJiAweGZmKSA8PCA4KQorI2RlZmluZSBQT1JUX1UyX1RJTUVPVVRfTUFTSwkoMHhmZiA8 PCA4KQorLyogQml0cyAyNDozMSBmb3IgcG9ydCB0ZXN0aW5nICovCisKKy8qIFVTQjIgUHJvdG9j b2wgUE9SVFNQTVNDICovCisjZGVmaW5lIFBPUlRfTDFTX01BU0sJCTB4NworI2RlZmluZSBQT1JU X0wxU19TVUNDRVNTCTB4MQorI2RlZmluZSBQT1JUX1JXRQkJQklUKDMpCisjZGVmaW5lIFBPUlRf SElSRChwKQkJKCgocCkgJiAweGYpIDw8IDQpCisjZGVmaW5lIFBPUlRfSElSRF9NQVNLCQkoMHhm IDw8IDQpCisjZGVmaW5lIFBPUlRfTDFEU19NQVNLCQkoMHhmZiA8PCA4KQorI2RlZmluZSBQT1JU X0wxRFMocCkJCSgoKHApICYgMHhmZikgPDwgOCkKKyNkZWZpbmUgUE9SVF9ITEUJCUJJVCgxNikK KworLyogVVNCMiBQcm90b2NvbCBQT1JUSExQTUMgKi8KKyNkZWZpbmUgUE9SVF9ISVJETShwKQkJ KChwKSAmIDMpCisjZGVmaW5lIFBPUlRfTDFfVElNRU9VVChwKQkoKChwKSAmIDB4ZmYpIDw8IDIp CisjZGVmaW5lIFBPUlRfQkVTTEQocCkJCSgoKHApICYgMHhmKSA8PCAxMCkKKworLyogdXNlIDUx MiBtaWNyb3NlY29uZHMgYXMgVVNCMiBMUE0gTDEgZGVmYXVsdCB0aW1lb3V0LiAqLworI2RlZmlu ZSBYSENJX0wxX1RJTUVPVVQJCTUxMgorCisvKiBTZXQgZGVmYXVsdCBISVJEL0JFU0wgdmFsdWUg dG8gNCAoMzUwLzQwMHVzKSBmb3IgVVNCMiBMMSBMUE0gcmVzdW1lIGxhdGVuY3kuCisgKiBTYWZl IHRvIHVzZSB3aXRoIG1peGVkIEhJUkQgYW5kIEJFU0wgc3lzdGVtcyAoaG9zdCBhbmQgZGV2aWNl KSBhbmQgaXMgdXNlZAorICogYnkgb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMuCisgKgorICogWEhD SSAxLjAgZXJyYXRhIDgvMTQvMTIgVGFibGUgMTMgbm90ZXM6CisgKiAiU29mdHdhcmUgc2hvdWxk IGNob29zZSB4SEMgQkVTTC9CRVNMRCBmaWVsZCB2YWx1ZXMgdGhhdCBkbyBub3QgdmlvbGF0ZSBh CisgKiBkZXZpY2UncyByZXN1bWUgbGF0ZW5jeSByZXF1aXJlbWVudHMsCisgKiBlLmcuIG5vdCBw cm9ncmFtIHZhbHVlcyA+ICc0JyBpZiBCTEMgPSAnMScgYW5kIGEgSElSRCBkZXZpY2UgaXMgYXR0 YWNoZWQsCisgKiBvciBub3QgcHJvZ3JhbSB2YWx1ZXMgPCAnNCcgaWYgQkxDID0gJzAnIGFuZCBh IEJFU0wgZGV2aWNlIGlzIGF0dGFjaGVkLgorICovCisjZGVmaW5lIFhIQ0lfREVGQVVMVF9CRVNM CTQKKworLyoqCisgKiBzdHJ1Y3QgeGhjaV9pbnRyX3JlZyAtIEludGVycnVwdCBSZWdpc3RlciBT ZXQKKyAqIEBpcnFfcGVuZGluZzoJSU1BTiAtIEludGVycnVwdCBNYW5hZ2VtZW50IFJlZ2lzdGVy LiAgVXNlZCB0byBlbmFibGUKKyAqIAkJCWludGVycnVwdHMgYW5kIGNoZWNrIGZvciBwZW5kaW5n IGludGVycnVwdHMuCisgKiBAaXJxX2NvbnRyb2w6CUlNT0QgLSBJbnRlcnJ1cHQgTW9kZXJhdGlv biBSZWdpc3Rlci4KKyAqIAkJCVVzZWQgdG8gdGhyb3R0bGUgaW50ZXJydXB0cy4KKyAqIEBlcnN0 X3NpemU6CQlOdW1iZXIgb2Ygc2VnbWVudHMgaW4gdGhlIEV2ZW50IFJpbmcgU2VnbWVudCBUYWJs ZSAoRVJTVCkuCisgKiBAZXJzdF9iYXNlOgkJRVJTVCBiYXNlIGFkZHJlc3MuCisgKiBAZXJzdF9k ZXF1ZXVlOglFdmVudCByaW5nIGRlcXVldWUgcG9pbnRlci4KKyAqCisgKiBFYWNoIGludGVycnVw dGVyIChkZWZpbmVkIGJ5IGEgTVNJLVggdmVjdG9yKSBoYXMgYW4gZXZlbnQgcmluZyBhbmQgYW4g RXZlbnQKKyAqIFJpbmcgU2VnbWVudCBUYWJsZSAoRVJTVCkgYXNzb2NpYXRlZCB3aXRoIGl0LiAg VGhlIGV2ZW50IHJpbmcgaXMgY29tcHJpc2VkIG9mCisgKiBtdWx0aXBsZSBzZWdtZW50cyBvZiB0 aGUgc2FtZSBzaXplLiAgVGhlIEhDIHBsYWNlcyBldmVudHMgb24gdGhlIHJpbmcgYW5kCisgKiAi dXBkYXRlcyB0aGUgQ3ljbGUgYml0IGluIHRoZSBUUkJzIHRvIGluZGljYXRlIHRvIHNvZnR3YXJl IHRoZSBjdXJyZW50CisgKiBwb3NpdGlvbiBvZiB0aGUgRW5xdWV1ZSBQb2ludGVyLiIgVGhlIEhD RCAoTGludXgpIHByb2Nlc3NlcyB0aG9zZSBldmVudHMgYW5kCisgKiB1cGRhdGVzIHRoZSBkZXF1 ZXVlIHBvaW50ZXIuCisgKi8KK3N0cnVjdCB4aGNpX2ludHJfcmVnIHsKKwlfX2xlMzIJaXJxX3Bl bmRpbmc7CisJX19sZTMyCWlycV9jb250cm9sOworCV9fbGUzMgllcnN0X3NpemU7CisJX19sZTMy CXJzdmQ7CisJX19sZTY0CWVyc3RfYmFzZTsKKwlfX2xlNjQJZXJzdF9kZXF1ZXVlOworfTsKKwor LyogaXJxX3BlbmRpbmcgYml0bWFza3MgKi8KKyNkZWZpbmUgRVJfSVJRX1BFTkRJTkcocCkJKChw KSAmIDB4MSkKKy8qIGJpdHMgMjozMSBuZWVkIHRvIGJlIHByZXNlcnZlZCAqLworLyogVEhJUyBJ UyBCVUdHWSAtIEZJWE1FIC0gSVAgSVMgV1JJVEUgMSBUTyBDTEVBUiAqLworI2RlZmluZSBFUl9J UlFfQ0xFQVIocCkJCSgocCkgJiAweGZmZmZmZmZlKQorI2RlZmluZSBFUl9JUlFfRU5BQkxFKHAp CSgoRVJfSVJRX0NMRUFSKHApKSB8IDB4MikKKyNkZWZpbmUgRVJfSVJRX0RJU0FCTEUocCkJKChF Ul9JUlFfQ0xFQVIocCkpICYgfigweDIpKQorCisvKiBpcnFfY29udHJvbCBiaXRtYXNrcyAqLwor LyogTWluaW11bSBpbnRlcnZhbCBiZXR3ZWVuIGludGVycnVwdHMgKGluIDI1MG5zIGludGVydmFs cykuICBUaGUgaW50ZXJ2YWwKKyAqIGJldHdlZW4gaW50ZXJydXB0cyB3aWxsIGJlIGxvbmdlciBp ZiB0aGVyZSBhcmUgbm8gZXZlbnRzIG9uIHRoZSBldmVudCByaW5nLgorICogRGVmYXVsdCBpcyA0 MDAwICgxIG1zKS4KKyAqLworI2RlZmluZSBFUl9JUlFfSU5URVJWQUxfTUFTSwkweGZmZmYKKy8q IENvdW50ZXIgdXNlZCB0byBjb3VudCBkb3duIHRoZSB0aW1lIHRvIHRoZSBuZXh0IGludGVycnVw dCAtIEhXIHVzZSBvbmx5ICovCisjZGVmaW5lIEVSX0lSUV9DT1VOVEVSX01BU0sJKDB4ZmZmZiA8 PCAxNikKKworLyogZXJzdF9zaXplIGJpdG1hc2tzICovCisvKiBQcmVzZXJ2ZSBiaXRzIDE2OjMx IG9mIGVyc3Rfc2l6ZSAqLworI2RlZmluZSBFUlNUX1NJWkVfTUFTSwkJKDB4ZmZmZiA8PCAxNikK KworLyogZXJzdF9kZXF1ZXVlIGJpdG1hc2tzICovCisvKiBEZXF1ZXVlIEVSU1QgU2VnbWVudCBJ bmRleCAoREVTSSkgLSBTZWdtZW50IG51bWJlciAob3IgYWxpYXMpCisgKiB3aGVyZSB0aGUgY3Vy cmVudCBkZXF1ZXVlIHBvaW50ZXIgbGllcy4gIFRoaXMgaXMgYW4gb3B0aW9uYWwgSFcgaGludC4K KyAqLworI2RlZmluZSBFUlNUX0RFU0lfTUFTSwkJMHg3CisvKiBFdmVudCBIYW5kbGVyIEJ1c3kg KEVIQikgLSBpcyB0aGUgZXZlbnQgcmluZyBzY2hlZHVsZWQgdG8gYmUgc2VydmljZWQgYnkKKyAq IGEgd29yayBxdWV1ZSAob3IgZGVsYXllZCBzZXJ2aWNlIHJvdXRpbmUpPworICovCisjZGVmaW5l IEVSU1RfRUhCCQlCSVQoMykKKyNkZWZpbmUgRVJTVF9QVFJfTUFTSwkJMHhmCisKKy8qKgorICog c3RydWN0IHhoY2lfcnVuX3JlZ3MKKyAqIEBtaWNyb2ZyYW1lX2luZGV4OiBNRklOREVYIC0gY3Vy cmVudCBtaWNyb2ZyYW1lIG51bWJlcgorICoKKyAqIFNlY3Rpb24gNS41IEhvc3QgQ29udHJvbGxl ciBSdW50aW1lIFJlZ2lzdGVyczoKKyAqICJTb2Z0d2FyZSBzaG91bGQgcmVhZCBhbmQgd3JpdGUg dGhlc2UgcmVnaXN0ZXJzIHVzaW5nIG9ubHkgRHdvcmQgKDMyIGJpdCkKKyAqIG9yIGxhcmdlciBh Y2Nlc3NlcyIKKyAqLworc3RydWN0IHhoY2lfcnVuX3JlZ3MgeworCV9fbGUzMgkJCW1pY3JvZnJh bWVfaW5kZXg7CisJX19sZTMyCQkJcnN2ZFs3XTsKKwlzdHJ1Y3QgeGhjaV9pbnRyX3JlZwlpcl9z ZXRbMTI4XTsKK307CisKKy8qKgorICogc3RydWN0IGRvb3JiZWxsX2FycmF5CisgKgorICogQml0 cyAgMCAtICA3OiBFbmRwb2ludCB0YXJnZXQKKyAqIEJpdHMgIDggLSAxNTogUnN2ZFoKKyAqIEJp dHMgMTYgLSAzMTogU3RyZWFtIElECisgKgorICogU2VjdGlvbiA1LjYKKyAqLworc3RydWN0IHho Y2lfZG9vcmJlbGxfYXJyYXkgeworCV9fbGUzMglkb29yYmVsbFsyNTZdOworfTsKKworI2RlZmlu ZSBEQl9WQUxVRShlcCwgc3RyZWFtKQkoKCgoZXApICsgMSkgJiAweGZmKSB8ICgoc3RyZWFtKSA8 PCAxNikpCisjZGVmaW5lIERCX1ZBTFVFX0hPU1QJCTB4MDAwMDAwMDAKKworLyoqCisgKiBzdHJ1 Y3QgeGhjaV9zbG90X2N0eAorICogQGRldl9pbmZvOglSb3V0ZSBzdHJpbmcsIGRldmljZSBzcGVl ZCwgaHViIGluZm8sIGFuZCBsYXN0IHZhbGlkIGVuZHBvaW50CisgKiBAZGV2X2luZm8yOglNYXgg ZXhpdCBsYXRlbmN5IGZvciBkZXZpY2UgbnVtYmVyLCByb290IGh1YiBwb3J0IG51bWJlcgorICog QHR0X2luZm86CXR0X2luZm8gaXMgdXNlZCB0byBjb25zdHJ1Y3Qgc3BsaXQgdHJhbnNhY3Rpb24g dG9rZW5zCisgKiBAZGV2X3N0YXRlOglzbG90IHN0YXRlIGFuZCBkZXZpY2UgYWRkcmVzcworICoK KyAqIFNsb3QgQ29udGV4dCAtIHNlY3Rpb24gNi4yLjEuMS4gIFRoaXMgYXNzdW1lcyB0aGUgSEMg dXNlcyAzMi1ieXRlIGNvbnRleHQKKyAqIHN0cnVjdHVyZXMuICBJZiB0aGUgSEMgdXNlcyA2NC1i eXRlIGNvbnRleHRzLCB0aGVyZSBpcyBhbiBhZGRpdGlvbmFsIDMyIGJ5dGVzCisgKiByZXNlcnZl ZCBhdCB0aGUgZW5kIG9mIHRoZSBzbG90IGNvbnRleHQgZm9yIEhDIGludGVybmFsIHVzZS4KKyAq Lworc3RydWN0IHhoY2lfc2xvdF9jdHggeworCV9fbGUzMglkZXZfaW5mbzsKKwlfX2xlMzIJZGV2 X2luZm8yOworCV9fbGUzMgl0dF9pbmZvOworCV9fbGUzMglkZXZfc3RhdGU7CisJLyogb2Zmc2V0 IDB4MTAgdG8gMHgxZiByZXNlcnZlZCBmb3IgSEMgaW50ZXJuYWwgdXNlICovCisJX19sZTMyCXJl c2VydmVkWzRdOworfTsKKworLyogZGV2X2luZm8gYml0bWFza3MgKi8KKy8qIFJvdXRlIFN0cmlu ZyAtIDA6MTkgKi8KKyNkZWZpbmUgUk9VVEVfU1RSSU5HX01BU0sJMHhmZmZmZgorLyogRGV2aWNl IHNwZWVkIC0gdmFsdWVzIGRlZmluZWQgYnkgUE9SVFNDIERldmljZSBTcGVlZCBmaWVsZCAtIDIw OjIzICovCisjZGVmaW5lIERFVl9TUEVFRAkJKDB4ZiA8PCAyMCkKKy8qIGJpdCAyNCByZXNlcnZl ZCAqLworLyogSXMgdGhpcyBMUy9GUyBkZXZpY2UgY29ubmVjdGVkIHRocm91Z2ggYSBIUyBodWI/ IC0gYml0IDI1ICovCisjZGVmaW5lIERFVl9NVFQJCQlCSVQoMjUpCisvKiBTZXQgaWYgdGhlIGRl dmljZSBpcyBhIGh1YiAtIGJpdCAyNiAqLworI2RlZmluZSBERVZfSFVCCQkJQklUKDI2KQorLyog SW5kZXggb2YgdGhlIGxhc3QgdmFsaWQgZW5kcG9pbnQgY29udGV4dCBpbiB0aGlzIGRldmljZSBj b250ZXh0IC0gMjc6MzEgKi8KKyNkZWZpbmUgTEFTVF9DVFhfTUFTSwkJKDB4MWYgPDwgMjcpCisj ZGVmaW5lIExBU1RfQ1RYKHApCQkoKHApIDw8IDI3KQorI2RlZmluZSBMQVNUX0NUWF9UT19FUF9O VU0ocCkJKCgocCkgPj4gMjcpIC0gMSkKKyNkZWZpbmUgU0xPVF9GTEFHCQlCSVQoMCkKKyNkZWZp bmUgRVAwX0ZMQUcJCUJJVCgxKQorCisvKiBkZXZfaW5mbzIgYml0bWFza3MgKi8KKy8qIE1heCBF eGl0IExhdGVuY3kgKG1zKSAtIHdvcnN0IGNhc2UgdGltZSB0byB3YWtlIHVwIGFsbCBsaW5rcyBp biBkZXYgcGF0aCAqLworI2RlZmluZSBNQVhfRVhJVAkJMHhmZmZmCisvKiBSb290IGh1YiBwb3J0 IG51bWJlciB0aGF0IGlzIG5lZWRlZCB0byBhY2Nlc3MgdGhlIFVTQiBkZXZpY2UgKi8KKyNkZWZp bmUgUk9PVF9IVUJfUE9SVChwKQkoKChwKSAmIDB4ZmYpIDw8IDE2KQorI2RlZmluZSBERVZJTkZP X1RPX1JPT1RfSFVCX1BPUlQocCkJKCgocCkgPj4gMTYpICYgMHhmZikKKy8qIE1heGltdW0gbnVt YmVyIG9mIHBvcnRzIHVuZGVyIGEgaHViIGRldmljZSAqLworI2RlZmluZSBYSENJX01BWF9QT1JU UyhwKQkoKChwKSAmIDB4ZmYpIDw8IDI0KQorCisvKiB0dF9pbmZvIGJpdG1hc2tzICovCisvKgor ICogVFQgSHViIFNsb3QgSUQgLSBmb3IgbG93IG9yIGZ1bGwgc3BlZWQgZGV2aWNlcyBhdHRhY2hl ZCB0byBhIGhpZ2gtc3BlZWQgaHViCisgKiBUaGUgU2xvdCBJRCBvZiB0aGUgaHViIHRoYXQgaXNv bGF0ZXMgdGhlIGhpZ2ggc3BlZWQgc2lnbmFsaW5nIGZyb20KKyAqIHRoaXMgbG93IG9yIGZ1bGwt c3BlZWQgZGV2aWNlLiAgJzAnIGlmIGF0dGFjaGVkIHRvIHJvb3QgaHViIHBvcnQuCisgKi8KKyNk ZWZpbmUgVFRfU0xPVAkJCTB4ZmYKKy8qCisgKiBUaGUgbnVtYmVyIG9mIHRoZSBkb3duc3RyZWFt IGZhY2luZyBwb3J0IG9mIHRoZSBoaWdoLXNwZWVkIGh1YgorICogJzAnIGlmIHRoZSBkZXZpY2Ug aXMgbm90IGxvdyBvciBmdWxsIHNwZWVkLgorICovCisjZGVmaW5lIFRUX1BPUlQJCQkoMHhmZiA8 PCA4KQorI2RlZmluZSBUVF9USElOS19USU1FKHApCSgoKHApICYgMHgzKSA8PCAxNikKKworLyog ZGV2X3N0YXRlIGJpdG1hc2tzICovCisvKiBVU0IgZGV2aWNlIGFkZHJlc3MgLSBhc3NpZ25lZCBi eSB0aGUgSEMgKi8KKyNkZWZpbmUgREVWX0FERFJfTUFTSwkJMHhmZgorLyogYml0cyA4OjI2IHJl c2VydmVkICovCisvKiBTbG90IHN0YXRlICovCisjZGVmaW5lIFNMT1RfU1RBVEUJCSgweDFmIDw8 IDI3KQorI2RlZmluZSBHRVRfU0xPVF9TVEFURShwKQkoKChwKSAmICgweDFmIDw8IDI3KSkgPj4g MjcpCisKKyNkZWZpbmUgU0xPVF9TVEFURV9ESVNBQkxFRAkweDAKKyNkZWZpbmUgU0xPVF9TVEFU RV9FTkFCTEVECVNMT1RfU1RBVEVfRElTQUJMRUQKKyNkZWZpbmUgU0xPVF9TVEFURV9ERUZBVUxU CTB4MQorI2RlZmluZSBTTE9UX1NUQVRFX0FERFJFU1NFRAkweDIKKyNkZWZpbmUgU0xPVF9TVEFU RV9DT05GSUdVUkVEICAgMHgzCisKKy8qKgorICogc3RydWN0IHhoY2lfZXBfY3R4CisgKiBAZXBf aW5mbzoJZW5kcG9pbnQgc3RhdGUsIHN0cmVhbXMsIG11bHQsIGFuZCBpbnRlcnZhbCBpbmZvcm1h dGlvbi4KKyAqIEBlcF9pbmZvMjoJaW5mb3JtYXRpb24gb24gZW5kcG9pbnQgdHlwZSwgbWF4IHBh Y2tldCBzaXplLCBtYXggYnVyc3Qgc2l6ZSwKKyAqIAkJZXJyb3IgY291bnQsIGFuZCB3aGV0aGVy IHRoZSBIQyB3aWxsIGZvcmNlIGFuIGV2ZW50IGZvciBhbGwKKyAqIAkJdHJhbnNhY3Rpb25zLgor ICogQGRlcToJNjQtYml0IHJpbmcgZGVxdWV1ZSBwb2ludGVyIGFkZHJlc3MuICBJZiB0aGUgZW5k cG9pbnQgb25seQorICogCQlkZWZpbmVzIG9uZSBzdHJlYW0sIHRoaXMgcG9pbnRzIHRvIHRoZSBl bmRwb2ludCB0cmFuc2ZlciByaW5nLgorICogCQlPdGhlcndpc2UsIGl0IHBvaW50cyB0byBhIHN0 cmVhbSBjb250ZXh0IGFycmF5LCB3aGljaCBoYXMgYQorICogCQlyaW5nIHBvaW50ZXIgZm9yIGVh Y2ggZmxvdy4KKyAqIEB0eF9pbmZvOglBdmVyYWdlIFRSQiBsZW5ndGhzIGZvciB0aGUgZW5kcG9p bnQgcmluZyBhbmQKKyAqIAkJbWF4IHBheWxvYWQgd2l0aGluIGFuIEVuZHBvaW50IFNlcnZpY2Ug SW50ZXJ2YWwgVGltZSAoRVNJVCkuCisgKgorICogRW5kcG9pbnQgQ29udGV4dCAtIHNlY3Rpb24g Ni4yLjEuMi4gIFRoaXMgYXNzdW1lcyB0aGUgSEMgdXNlcyAzMi1ieXRlIGNvbnRleHQKKyAqIHN0 cnVjdHVyZXMuICBJZiB0aGUgSEMgdXNlcyA2NC1ieXRlIGNvbnRleHRzLCB0aGVyZSBpcyBhbiBh ZGRpdGlvbmFsIDMyIGJ5dGVzCisgKiByZXNlcnZlZCBhdCB0aGUgZW5kIG9mIHRoZSBlbmRwb2lu dCBjb250ZXh0IGZvciBIQyBpbnRlcm5hbCB1c2UuCisgKi8KK3N0cnVjdCB4aGNpX2VwX2N0eCB7 CisJX19sZTMyCWVwX2luZm87CisJX19sZTMyCWVwX2luZm8yOworCV9fbGU2NAlkZXE7CisJX19s ZTMyCXR4X2luZm87CisJLyogb2Zmc2V0IDB4MTQgLSAweDFmIHJlc2VydmVkIGZvciBIQyBpbnRl cm5hbCB1c2UgKi8KKwlfX2xlMzIJcmVzZXJ2ZWRbM107Cit9OworCisvKiBlcF9pbmZvIGJpdG1h c2tzICovCisvKgorICogRW5kcG9pbnQgU3RhdGUgLSBiaXRzIDA6MgorICogMCAtIGRpc2FibGVk CisgKiAxIC0gcnVubmluZworICogMiAtIGhhbHRlZCBkdWUgdG8gaGFsdCBjb25kaXRpb24gLSBv ayB0byBtYW5pcHVsYXRlIGVuZHBvaW50IHJpbmcKKyAqIDMgLSBzdG9wcGVkCisgKiA0IC0gVFJC IGVycm9yCisgKiA1LTcgLSByZXNlcnZlZAorICovCisjZGVmaW5lIEVQX1NUQVRFX01BU0sJCTB4 ZgorI2RlZmluZSBFUF9TVEFURV9ESVNBQkxFRAkweDAKKyNkZWZpbmUgRVBfU1RBVEVfUlVOTklO RwkweDEKKyNkZWZpbmUgRVBfU1RBVEVfSEFMVEVECQkweDIKKyNkZWZpbmUgRVBfU1RBVEVfU1RP UFBFRAkweDMKKyNkZWZpbmUgRVBfU1RBVEVfRVJST1IJCTB4NAorLyogTXVsdCAtIE1heCBudW1i ZXIgb2YgYnVydHN0IHdpdGhpbiBhbiBpbnRlcnZhbCwgaW4gRVAgY29tcGFuaW9uIGRlc2MuICov CisjZGVmaW5lIEVQX01VTFQocCkJCSgoKHApICYgMHgzKSA8PCA4KQorI2RlZmluZSBDVFhfVE9f RVBfTVVMVChwKQkoKChwKSA+PiA4KSAmIDB4MykKKy8qIGJpdHMgMTA6MTQgYXJlIE1heCBQcmlt YXJ5IFN0cmVhbXMgKi8KKy8qIGJpdCAxNSBpcyBMaW5lYXIgU3RyZWFtIEFycmF5ICovCisvKiBJ bnRlcnZhbCAtIHBlcmlvZCBiZXR3ZWVuIHJlcXVlc3RzIHRvIGFuIGVuZHBvaW50IC0gMTI1dSBp bmNyZW1lbnRzLiAqLworI2RlZmluZSBFUF9JTlRFUlZBTChwKQkJKCgocCkgJiAweGZmKSA8PCAx NikKKyNkZWZpbmUgRVBfSU5URVJWQUxfVE9fVUZSQU1FUyhwKQkoMSA8PCAoKChwKSA+PiAxNikg JiAweGZmKSkKKyNkZWZpbmUgQ1RYX1RPX0VQX0lOVEVSVkFMKHApCSgoKHApID4+IDE2KSAmIDB4 ZmYpCisjZGVmaW5lIEVQX01BWFBTVFJFQU1TX01BU0sJKDB4MWYgPDwgMTApCisjZGVmaW5lIEVQ X01BWFBTVFJFQU1TKHApCSgoKHApIDw8IDEwKSAmIEVQX01BWFBTVFJFQU1TX01BU0spCisvKiBF bmRwb2ludCBpcyBzZXQgdXAgd2l0aCBhIExpbmVhciBTdHJlYW0gQXJyYXkgKHZzLiBTZWNvbmRh cnkgU3RyZWFtIEFycmF5KSAqLworI2RlZmluZSBFUF9IQVNfTFNBCQlCSVQoMTUpCisKKy8qIGVw X2luZm8yIGJpdG1hc2tzICovCisvKgorICogRm9yY2UgRXZlbnQgLSBnZW5lcmF0ZSB0cmFuc2Zl ciBldmVudHMgZm9yIGFsbCBUUkJzIGZvciB0aGlzIGVuZHBvaW50CisgKiBUaGlzIHdpbGwgdGVs bCB0aGUgSEMgdG8gaWdub3JlIHRoZSBJT0MgYW5kIElTUCBmbGFncyAoZm9yIGRlYnVnZ2luZyBv bmx5KS4KKyAqLworI2RlZmluZSBGT1JDRV9FVkVOVAkJQklUKDApCisjZGVmaW5lIEVSUk9SX0NP VU5UKHApCQkoKChwKSAmIDB4MykgPDwgMSkKKyNkZWZpbmUgQ1RYX1RPX0VQX1RZUEUocCkJKCgo cCkgPj4gMykgJiAweDcpCisjZGVmaW5lIEVQX1RZUEUocCkJCSgocCkgPDwgMykKKyNkZWZpbmUg SVNPQ19PVVRfRVAJCTB4MQorI2RlZmluZSBCVUxLX09VVF9FUAkJMHgyCisjZGVmaW5lIElOVF9P VVRfRVAJCTB4MworI2RlZmluZSBDVFJMX0VQCQkJMHg0CisjZGVmaW5lIElTT0NfSU5fRVAJCTB4 NQorI2RlZmluZSBCVUxLX0lOX0VQCQkweDYKKyNkZWZpbmUgSU5UX0lOX0VQCQkweDcKKy8qIGJp dCA2IHJlc2VydmVkICovCisvKiBiaXQgNyBpcyBIb3N0IEluaXRpYXRlIERpc2FibGUgLSBmb3Ig ZGlzYWJsaW5nIHN0cmVhbSBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgTUFYX0JVUlNUKHApCQkoKChw KSAmIDB4ZmYpIDw8IDgpCisjZGVmaW5lIENUWF9UT19NQVhfQlVSU1QocCkJKCgocCkgPj4gOCkg JiAweGZmKQorI2RlZmluZSBNQVhfUEFDS0VUKHApCQkoKChwKSAmIDB4ZmZmZikgPDwgMTYpCisj ZGVmaW5lIE1BWF9QQUNLRVRfTUFTSwkJKDB4ZmZmZiA8PCAxNikKKyNkZWZpbmUgTUFYX1BBQ0tF VF9ERUNPREVEKHApCSgoKHApID4+IDE2KSAmIDB4ZmZmZikKKworLyogR2V0IG1heCBwYWNrZXQg c2l6ZSBmcm9tIGVwIGRlc2MuIEJpdCAxMC4uMCBzcGVjaWZ5IHRoZSBtYXggcGFja2V0IHNpemUu CisgKiBVU0IyLjAgc3BlYyA5LjYuNi4KKyAqLworI2RlZmluZSBHRVRfTUFYX1BBQ0tFVChwKQko KHApICYgMHg3ZmYpCisKKy8qIHR4X2luZm8gYml0bWFza3MgKi8KKyNkZWZpbmUgQVZHX1RSQl9M RU5HVEhfRk9SX0VQKHApCSgocCkgJiAweGZmZmYpCisjZGVmaW5lIE1BWF9FU0lUX1BBWUxPQURf Rk9SX0VQKHApCSgoKHApICYgMHhmZmZmKSA8PCAxNikKKyNkZWZpbmUgQ1RYX1RPX01BWF9FU0lU X1BBWUxPQUQocCkJKCgocCkgPj4gMTYpICYgMHhmZmZmKQorCisvKiBkZXEgYml0bWFza3MgKi8K KyNkZWZpbmUgRVBfQ1RYX0NZQ0xFX01BU0sJQklUKDApCisjZGVmaW5lIFNDVFhfREVRX01BU0sJ CSh+MHhmTCkKKworLyoqCisgKiBzdHJ1Y3QgeGhjaV9pbnB1dF9jb250cm9sX2NvbnRleHQKKyAq IElucHV0IGNvbnRyb2wgY29udGV4dDsgc2VlIHNlY3Rpb24gNi4yLjUuCisgKgorICogQGRyb3Bf Y29udGV4dDoJc2V0IHRoZSBiaXQgb2YgdGhlIGVuZHBvaW50IGNvbnRleHQgeW91IHdhbnQgdG8g ZGlzYWJsZQorICogQGFkZF9jb250ZXh0OglzZXQgdGhlIGJpdCBvZiB0aGUgZW5kcG9pbnQgY29u dGV4dCB5b3Ugd2FudCB0byBlbmFibGUKKyAqLworc3RydWN0IHhoY2lfaW5wdXRfY29udHJvbF9j dHggeworCV9fbGUzMglkcm9wX2ZsYWdzOworCV9fbGUzMglhZGRfZmxhZ3M7CisJX19sZTMyCXJz dmQyWzZdOworfTsKKworI2RlZmluZSBFUF9JU19BRERFRChjdHJsX2N0eCwgaSkJXAorCShsZTMy X3RvX2NwdShjdHJsX2N0eC0+YWRkX2ZsYWdzKSAmICgxIDw8IChpICsgMSkpKQorI2RlZmluZSBF UF9JU19EUk9QUEVEKGN0cmxfY3R4LCBpKQlcCisJKGxlMzJfdG9fY3B1KGN0cmxfY3R4LT5kcm9w X2ZsYWdzKSAmICgxIDw8IChpICsgMSkpKQorCisvKiBkcm9wIGNvbnRleHQgYml0bWFza3MgKi8K KyNkZWZpbmUgRFJPUF9FUCh4KQlCSVQoeCkKKy8qIGFkZCBjb250ZXh0IGJpdG1hc2tzICovCisj ZGVmaW5lIEFERF9FUCh4KQlCSVQoeCkKKworc3RydWN0IHhoY2lfc3RyZWFtX2N0eCB7CisJLyog NjQtYml0IHN0cmVhbSByaW5nIGFkZHJlc3MsIGN5Y2xlIHN0YXRlLCBhbmQgc3RyZWFtIHR5cGUg Ki8KKwlfX2xlNjQJc3RyZWFtX3Jpbmc7CisJLyogb2Zmc2V0IDB4MTQgLSAweDFmIHJlc2VydmVk IGZvciBIQyBpbnRlcm5hbCB1c2UgKi8KKwlfX2xlMzIJcmVzZXJ2ZWRbMl07Cit9OworCisvKiBT dHJlYW0gQ29udGV4dCBUeXBlcyAoc2VjdGlvbiA2LjQuMSkgLSBiaXRzIDM6MSBvZiBzdHJlYW0g Y3R4IGRlcSBwdHIgKi8KKyNkZWZpbmUgU0NUX0ZPUl9DVFgocCkJCSgoKHApICYgMHg3KSA8PCAx KQorLyogU2Vjb25kYXJ5IHN0cmVhbSBhcnJheSB0eXBlLCBkZXF1ZXVlIHBvaW50ZXIgaXMgdG8g YSB0cmFuc2ZlciByaW5nICovCisjZGVmaW5lIFNDVF9TRUNfVFIJCTB4MAorLyogUHJpbWFyeSBz dHJlYW0gYXJyYXkgdHlwZSwgZGVxdWV1ZSBwb2ludGVyIGlzIHRvIGEgdHJhbnNmZXIgcmluZyAq LworI2RlZmluZSBTQ1RfUFJJX1RSCQkweDEKKy8qIERlcXVldWUgcG9pbnRlciBpcyBmb3IgYSBz ZWNvbmRhcnkgc3RyZWFtIGFycmF5IChTU0EpIHdpdGggOCBlbnRyaWVzICovCisjZGVmaW5lIFND VF9TU0FfOAkJMHgyCisjZGVmaW5lIFNDVF9TU0FfMTYJCTB4MworI2RlZmluZSBTQ1RfU1NBXzMy CQkweDQKKyNkZWZpbmUgU0NUX1NTQV82NAkJMHg1CisjZGVmaW5lIFNDVF9TU0FfMTI4CQkweDYK KyNkZWZpbmUgU0NUX1NTQV8yNTYJCTB4NworCisjZGVmaW5lIFNNQUxMX1NUUkVBTV9BUlJBWV9T SVpFCQkyNTYKKyNkZWZpbmUgTUVESVVNX1NUUkVBTV9BUlJBWV9TSVpFCTEwMjQKKworLyogIkJs b2NrIiBzaXplcyBpbiBieXRlcyB0aGUgaGFyZHdhcmUgdXNlcyBmb3IgZGlmZmVyZW50IGRldmlj ZSBzcGVlZHMuCisgKiBUaGUgbG9naWMgaW4gdGhpcyBwYXJ0IG9mIHRoZSBoYXJkd2FyZSBsaW1p dHMgdGhlIG51bWJlciBvZiBiaXRzIHRoZSBoYXJkd2FyZQorICogY2FuIHVzZSwgc28gbXVzdCBy ZXByZXNlbnQgYmFuZHdpZHRoIGluIGEgbGVzcyBwcmVjaXNlIG1hbm5lciB0byBtaW1pYyB3aGF0 CisgKiB0aGUgc2NoZWR1bGVyIGhhcmR3YXJlIGNvbXB1dGVzLgorICovCisjZGVmaW5lIEZTX0JM T0NLCQkxCisjZGVmaW5lIEhTX0JMT0NLCQk0CisjZGVmaW5lIFNTX0JMT0NLCQkxNgorI2RlZmlu ZSBETUlfQkxPQ0sJCTMyCisKKy8qIEVhY2ggZGV2aWNlIHNwZWVkIGhhcyBhIHByb3RvY29sIG92 ZXJoZWFkIChDUkMsIGJpdCBzdHVmZmluZywgZXRjKSBhc3NvY2lhdGVkCisgKiB3aXRoIGVhY2gg Ynl0ZSB0cmFuc2ZlcnJlZC4gIFN1cGVyU3BlZWQgZGV2aWNlcyBoYXZlIGFuIGluaXRpYWwgb3Zl cmhlYWQgdG8KKyAqIHNldCB1cCBidXJzdHMuICBUaGVzZSBhcmUgaW4gYmxvY2tzLCBzZWUgYWJv dmUuICBMUyBvdmVyaGVhZCBoYXMgYWxyZWFkeSBiZWVuCisgKiB0cmFuc2xhdGVkIGludG8gRlMg YmxvY2tzLgorICovCisjZGVmaW5lIERNSV9PVkVSSEVBRAkJOAorI2RlZmluZSBETUlfT1ZFUkhF QURfQlVSU1QJNAorI2RlZmluZSBTU19PVkVSSEVBRAkJOAorI2RlZmluZSBTU19PVkVSSEVBRF9C VVJTVAkzMgorI2RlZmluZSBIU19PVkVSSEVBRAkJMjYKKyNkZWZpbmUgRlNfT1ZFUkhFQUQJCTIw CisjZGVmaW5lIExTX09WRVJIRUFECQkxMjgKKworLyogVGhlIFRUcyBuZWVkIHRvIGNsYWltIHJv dWdobHkgdHdpY2UgYXMgbXVjaCBiYW5kd2lkdGggKDk0IGJ5dGVzIHBlcgorICogbWljcm9mcmFt ZSB+PSAyNE1icHMpIG9mIHRoZSBIUyBidXMgYXMgdGhlIGRldmljZXMgY2FuIGFjdHVhbGx5IHVz ZSBiZWNhdXNlCisgKiBvZiBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGggc3BsaXQgdHJhbnNmZXJz IGNyb3NzaW5nIG1pY3JvZnJhbWUgYm91bmRhcmllcy4KKyAqIDMxIGJsb2NrcyBpcyBwdXJlIHBy b3RvY29sIG92ZXJoZWFkLgorICovCisjZGVmaW5lIFRUX0hTX09WRVJIRUFECQkoMzEgKyA5NCkK KyNkZWZpbmUgVFRfRE1JX09WRVJIRUFECQkoMjUgKyAxMikKKworLyogQmFuZHdpZHRoIGxpbWl0 cyBpbiBibG9ja3MgKi8KKyNkZWZpbmUgRlNfQldfTElNSVQJCTEyODUKKyNkZWZpbmUgVFRfQldf TElNSVQJCTEzMjAKKyNkZWZpbmUgSFNfQldfTElNSVQJCTE2MDcKKyNkZWZpbmUgU1NfQldfTElN SVRfSU4JCTM5MDYKKyNkZWZpbmUgRE1JX0JXX0xJTUlUX0lOCQkzOTA2CisjZGVmaW5lIFNTX0JX X0xJTUlUX09VVAkJMzkwNgorI2RlZmluZSBETUlfQldfTElNSVRfT1VUCTM5MDYKKworLyogUGVy Y2VudGFnZSBvZiBidXMgYmFuZHdpZHRoIHJlc2VydmVkIGZvciBub24tcGVyaW9kaWMgdHJhbnNm ZXJzICovCisjZGVmaW5lIEZTX0JXX1JFU0VSVkVECQkxMAorI2RlZmluZSBIU19CV19SRVNFUlZF RAkJMjAKKyNkZWZpbmUgU1NfQldfUkVTRVJWRUQJCTEwCisKK2VudW0geGhjaV9vdmVyaGVhZF90 eXBlIHsKKwlMU19PVkVSSEVBRF9UWVBFID0gMCwKKwlGU19PVkVSSEVBRF9UWVBFLAorCUhTX09W RVJIRUFEX1RZUEUsCit9OworCitzdHJ1Y3QgeGhjaV90cmFuc2Zlcl9ldmVudCB7CisJLyogNjQt Yml0IGJ1ZmZlciBhZGRyZXNzLCBvciBpbW1lZGlhdGUgZGF0YSAqLworCV9fbGU2NAlidWZmZXI7 CisJX19sZTMyCXRyYW5zZmVyX2xlbjsKKwkvKiBUaGlzIGZpZWxkIGlzIGludGVycHJldGVkIGRp ZmZlcmVudGx5IGJhc2VkIG9uIHRoZSB0eXBlIG9mIFRSQiAqLworCV9fbGUzMglmbGFnczsKK307 CisKKy8qIFRyYW5zZmVyIGV2ZW50IFRSQiBsZW5ndGggYml0IG1hc2sgKi8KKy8qIGJpdHMgMDoy MyAqLworI2RlZmluZSBFVkVOVF9UUkJfTEVOKHApCSgocCkgJiAweGZmZmZmZikKKworLyoqIFRy YW5zZmVyIEV2ZW50IGJpdCBmaWVsZHMgKiovCisjZGVmaW5lIFRSQl9UT19FUF9JRChwKQkJKCgo cCkgPj4gMTYpICYgMHgxZikKKworLyogQ29tcGxldGlvbiBDb2RlIC0gb25seSBhcHBsaWNhYmxl IGZvciBzb21lIHR5cGVzIG9mIFRSQnMgKi8KKyNkZWZpbmUgQ09NUF9DT0RFX01BU0sJCSgweGZm IDw8IDI0KQorI2RlZmluZSBHRVRfQ09NUF9DT0RFKHApCSgoKHApICYgQ09NUF9DT0RFX01BU0sp ID4+IDI0KQorI2RlZmluZSBDT01QX1NVQ0NFU1MJCTEKKy8qIERhdGEgQnVmZmVyIEVycm9yICov CisjZGVmaW5lIENPTVBfREJfRVJSCQkyCisvKiBCYWJibGUgRGV0ZWN0ZWQgRXJyb3IgKi8KKyNk ZWZpbmUgQ09NUF9CQUJCTEUJCTMKKy8qIFVTQiBUcmFuc2FjdGlvbiBFcnJvciAqLworI2RlZmlu ZSBDT01QX1RYX0VSUgkJNAorLyogVFJCIEVycm9yIC0gc29tZSBUUkIgZmllbGQgaXMgaW52YWxp ZCAqLworI2RlZmluZSBDT01QX1RSQl9FUlIJCTUKKy8qIFN0YWxsIEVycm9yIC0gVVNCIGRldmlj ZSBpcyBzdGFsbGVkICovCisjZGVmaW5lIENPTVBfU1RBTEwJCTYKKy8qIFJlc291cmNlIEVycm9y IC0gSEMgZG9lc24ndCBoYXZlIG1lbW9yeSBmb3IgdGhhdCBkZXZpY2UgY29uZmlndXJhdGlvbiAq LworI2RlZmluZSBDT01QX0VOT01FTQkJNworLyogQmFuZHdpZHRoIEVycm9yIC0gbm90IGVub3Vn aCByb29tIGluIHNjaGVkdWxlIGZvciB0aGlzIGRldiBjb25maWcgKi8KKyNkZWZpbmUgQ09NUF9C V19FUlIJCTgKKy8qIE5vIFNsb3RzIEF2YWlsYWJsZSBFcnJvciAtIEhDIHJhbiBvdXQgb2YgZGV2 aWNlIHNsb3RzICovCisjZGVmaW5lIENPTVBfRU5PU0xPVFMJCTkKKy8qIEludmFsaWQgU3RyZWFt IFR5cGUgRXJyb3IgKi8KKyNkZWZpbmUgQ09NUF9TVFJFQU1fRVJSCQkxMAorLyogU2xvdCBOb3Qg RW5hYmxlZCBFcnJvciAtIGRvb3JiZWxsIHJ1bmcgZm9yIGRpc2FibGVkIGRldmljZSBzbG90ICov CisjZGVmaW5lIENPTVBfRUJBRFNMVAkJMTEKKy8qIEVuZHBvaW50IE5vdCBFbmFibGVkIEVycm9y ICovCisjZGVmaW5lIENPTVBfRUJBREVQCQkxMgorLyogU2hvcnQgUGFja2V0ICovCisjZGVmaW5l IENPTVBfU0hPUlRfVFgJCTEzCisvKiBSaW5nIFVuZGVycnVuIC0gZG9vcmJlbGwgcnVuZyBmb3Ig YW4gZW1wdHkgaXNvYyBPVVQgZXAgcmluZyAqLworI2RlZmluZSBDT01QX1VOREVSUlVOCQkxNAor LyogUmluZyBPdmVycnVuIC0gaXNvYyBJTiBlcCByaW5nIGlzIGVtcHR5IHdoZW4gZXAgaXMgc2No ZWR1bGVkIHRvIFJYICovCisjZGVmaW5lIENPTVBfT1ZFUlJVTgkJMTUKKy8qIFZpcnR1YWwgRnVu Y3Rpb24gRXZlbnQgUmluZyBGdWxsIEVycm9yICovCisjZGVmaW5lIENPTVBfVkZfRlVMTAkJMTYK Ky8qIFBhcmFtZXRlciBFcnJvciAtIENvbnRleHQgcGFyYW1ldGVyIGlzIGludmFsaWQgKi8KKyNk ZWZpbmUgQ09NUF9FSU5WQUwJCTE3CisvKiBCYW5kd2lkdGggT3ZlcnJ1biBFcnJvciAtIGlzb2Mg ZXAgZXhjZWVkZWQgaXRzIGFsbG9jYXRlZCBiYW5kd2lkdGggKi8KKyNkZWZpbmUgQ09NUF9CV19P VkVSCQkxOAorLyogQ29udGV4dCBTdGF0ZSBFcnJvciAtIGlsbGVnYWwgY29udGV4dCBzdGF0ZSB0 cmFuc2l0aW9uIHJlcXVlc3RlZCAqLworI2RlZmluZSBDT01QX0NUWF9TVEFURQkJMTkKKy8qIE5v IFBpbmcgUmVzcG9uc2UgRXJyb3IgLSBIQyBkaWRuJ3QgZ2V0IFBJTkdfUkVTUE9OU0UgaW4gdGlt ZSB0byBUWCAqLworI2RlZmluZSBDT01QX1BJTkdfRVJSCQkyMAorLyogRXZlbnQgUmluZyBpcyBm dWxsICovCisjZGVmaW5lIENPTVBfRVJfRlVMTAkJMjEKKy8qIEluY29tcGF0aWJsZSBEZXZpY2Ug RXJyb3IgKi8KKyNkZWZpbmUgQ09NUF9ERVZfRVJSCQkyMgorLyogTWlzc2VkIFNlcnZpY2UgRXJy b3IgLSBIQyBjb3VsZG4ndCBzZXJ2aWNlIGFuIGlzb2MgZXAgd2l0aGluIGludGVydmFsICovCisj ZGVmaW5lIENPTVBfTUlTU0VEX0lOVAkJMjMKKy8qIFN1Y2Nlc3NmdWxseSBzdG9wcGVkIGNvbW1h bmQgcmluZyAqLworI2RlZmluZSBDT01QX0NNRF9TVE9QCQkyNAorLyogU3VjY2Vzc2Z1bGx5IGFi b3J0ZWQgY3VycmVudCBjb21tYW5kIGFuZCBzdG9wcGVkIGNvbW1hbmQgcmluZyAqLworI2RlZmlu ZSBDT01QX0NNRF9BQk9SVAkJMjUKKy8qIFN0b3BwZWQgLSB0cmFuc2ZlciB3YXMgdGVybWluYXRl ZCBieSBhIHN0b3AgZW5kcG9pbnQgY29tbWFuZCAqLworI2RlZmluZSBDT01QX1NUT1AJCTI2Cisv KiBTYW1lIGFzIENPTVBfRVBfU1RPUFBFRCwgYnV0IHRoZSB0cmFuc2ZlcnJlZCBsZW5ndGggaW4g dGhlIGV2ZW50IGlzIGludmFsaWQgKi8KKyNkZWZpbmUgQ09NUF9TVE9QX0lOVkFMCQkyNworLyog Q29udHJvbCBBYm9ydCBFcnJvciAtIERlYnVnIENhcGFiaWxpdHkgLSBjb250cm9sIHBpcGUgYWJv cnRlZCAqLworI2RlZmluZSBDT01QX0RCR19BQk9SVAkJMjgKKy8qIE1heCBFeGl0IExhdGVuY3kg VG9vIExhcmdlIEVycm9yICovCisjZGVmaW5lIENPTVBfTUVMX0VSUgkJMjkKKy8qIFRSQiB0eXBl IDMwIHJlc2VydmVkICovCisvKiBJc29jIEJ1ZmZlciBPdmVycnVuIC0gYW4gaXNvYyBJTiBlcCBz ZW50IG1vcmUgZGF0YSB0aGFuIGNvdWxkIGZpdCBpbiBURCAqLworI2RlZmluZSBDT01QX0JVRkZf T1ZFUgkJMzEKKy8qIEV2ZW50IExvc3QgRXJyb3IgLSB4SEMgaGFzIGFuICJpbnRlcm5hbCBldmVu dCBvdmVycnVuIGNvbmRpdGlvbiIgKi8KKyNkZWZpbmUgQ09NUF9JU1NVRVMJCTMyCisvKiBVbmRl ZmluZWQgRXJyb3IgLSByZXBvcnRlZCB3aGVuIG90aGVyIGVycm9yIGNvZGVzIGRvbid0IGFwcGx5 ICovCisjZGVmaW5lIENPTVBfVU5LTk9XTgkJMzMKKy8qIEludmFsaWQgU3RyZWFtIElEIEVycm9y ICovCisjZGVmaW5lIENPTVBfU1RSSURfRVJSCQkzNAorLyogU2Vjb25kYXJ5IEJhbmR3aWR0aCBF cnJvciAtIG1heSBiZSByZXR1cm5lZCBieSBhIENvbmZpZ3VyZSBFbmRwb2ludCBjbWQgKi8KKyNk ZWZpbmUgQ09NUF8yTkRfQldfRVJSCQkzNQorLyogU3BsaXQgVHJhbnNhY3Rpb24gRXJyb3IgKi8K KyNkZWZpbmUgQ09NUF9TUExJVF9FUlIJCTM2CisKK3N0cnVjdCB4aGNpX2xpbmtfdHJiIHsKKwkv KiA2NC1iaXQgc2VnbWVudCBwb2ludGVyKi8KKwlfX2xlNjQJc2VnbWVudF9wdHI7CisJX19sZTMy CWludHJfdGFyZ2V0OworCV9fbGUzMgljb250cm9sOworfTsKKworLyogY29udHJvbCBiaXRmaWVs ZHMgKi8KKyNkZWZpbmUgTElOS19UT0dHTEUJCUJJVCgxKQorCisvKiBDb21tYW5kIGNvbXBsZXRp b24gZXZlbnQgVFJCICovCitzdHJ1Y3QgeGhjaV9ldmVudF9jbWQgeworCS8qIFBvaW50ZXIgdG8g Y29tbWFuZCBUUkIsIG9yIHRoZSB2YWx1ZSBwYXNzZWQgYnkgdGhlIGV2ZW50IGRhdGEgdHJiICov CisJX19sZTY0CWNtZF90cmI7CisJX19sZTMyCXN0YXR1czsKKwlfX2xlMzIJZmxhZ3M7Cit9Owor CisvKiBmbGFncyBiaXRtYXNrcyAqLworCisvKiBBZGRyZXNzIGRldmljZSAtIGRpc2FibGUgU2V0 QWRkcmVzcyAqLworI2RlZmluZSBUUkJfQlNSCQkJQklUKDkpCitlbnVtIHhoY2lfc2V0dXBfZGV2 IHsKKwlTRVRVUF9DT05URVhUX09OTFksCisJU0VUVVBfQ09OVEVYVF9BRERSRVNTLAorfTsKKwor LyogYml0cyAxNjoyMyBhcmUgdGhlIHZpcnR1YWwgZnVuY3Rpb24gSUQgKi8KKy8qIGJpdHMgMjQ6 MzEgYXJlIHRoZSBzbG90IElEICovCisjZGVmaW5lIFRSQl9UT19TTE9UX0lEKHApCSgoKHApICYg KDB4ZmY8PDI0KSkgPj4gMjQpCisjZGVmaW5lIFNMT1RfSURfRk9SX1RSQihwKQkoKChwKSAmIDB4 ZmYpIDw8IDI0KQorCisvKiBDb25maWd1cmUgRW5kcG9pbnQgQ29tbWFuZCBUUkIgLSBkZWNvbmZp Z3VyZSAqLworI2RlZmluZSBUUkJfREMJCQlCSVQoOSkKKworLyogU3RvcCBFbmRwb2ludCBUUkIg LSBlcF9pbmRleCB0byBlbmRwb2ludCBJRCBmb3IgdGhpcyBUUkIgKi8KKyNkZWZpbmUgVFJCX1RP X0VQX0lOREVYKHApCSgoKChwKSAmICgweDFmIDw8IDE2KSkgPj4gMTYpIC0gMSkKKyNkZWZpbmUg RVBfSURfRk9SX1RSQihwKQkoKCgocCkgKyAxKSAmIDB4MWYpIDw8IDE2KQorCisjZGVmaW5lIFNV U1BFTkRfUE9SVF9GT1JfVFJCKHApCSgoKHApICYgMSkgPDwgMjMpCisjZGVmaW5lIFRSQl9UT19T VVNQRU5EX1BPUlQocCkJKCgocCkgJiAoMSA8PCAyMykpID4+IDIzKQorI2RlZmluZSBMQVNUX0VQ X0lOREVYCQkzMAorCisvKiBTZXQgVFIgRGVxdWV1ZSBQb2ludGVyIGNvbW1hbmQgVFJCIGZpZWxk cywgNi40LjMuOSAqLworI2RlZmluZSBUUkJfVE9fU1RSRUFNX0lEKHApCSgoKChwKSAmICgweGZm ZmYgPDwgMTYpKSA+PiAxNikpCisjZGVmaW5lIFNUUkVBTV9JRF9GT1JfVFJCKHApCSgoKChwKSkg JiAweGZmZmYpIDw8IDE2KQorI2RlZmluZSBTQ1RfRk9SX1RSQihwKQkJKCgocCkgPDwgMSkgJiAw eDcpCisKKy8qIFBvcnQgU3RhdHVzIENoYW5nZSBFdmVudCBUUkIgZmllbGRzICovCisvKiBQb3J0 IElEIC0gYml0cyAzMToyNCAqLworI2RlZmluZSBHRVRfUE9SVF9JRChwKQkJKCgocCkgJiAoMHhm ZiA8PCAyNCkpID4+IDI0KQorCisvKiBOb3JtYWwgVFJCIGZpZWxkcyAqLworLyogdHJhbnNmZXJf bGVuIGJpdG1hc2tzIC0gYml0cyAwOjE2ICovCisjZGVmaW5lIFRSQl9MRU4ocCkJCSgocCkgJiAw eDFmZmZmKQorLyogSW50ZXJydXB0ZXIgVGFyZ2V0IC0gd2hpY2ggTVNJLVggdmVjdG9yIHRvIHRh cmdldCB0aGUgY29tcGxldGlvbiBldmVudCBhdCAqLworI2RlZmluZSBUUkJfSU5UUl9UQVJHRVQo cCkJKCgocCkgJiAweDNmZikgPDwgMjIpCisjZGVmaW5lIEdFVF9JTlRSX1RBUkdFVChwKQkoKChw KSA+PiAyMikgJiAweDNmZikKKyNkZWZpbmUgVFJCX1RCQyhwKQkJKCgocCkgJiAweDMpIDw8IDcp CisjZGVmaW5lIFRSQl9UTEJQQyhwKQkJKCgocCkgJiAweGYpIDw8IDE2KQorCisvKiBDeWNsZSBi aXQgLSBpbmRpY2F0ZXMgVFJCIG93bmVyc2hpcCBieSBIQyBvciBIQ0QgKi8KKyNkZWZpbmUgVFJC X0NZQ0xFCQlCSVQoMCkKKy8qCisgKiBGb3JjZSBuZXh0IGV2ZW50IGRhdGEgVFJCIHRvIGJlIGV2 YWx1YXRlZCBiZWZvcmUgdGFzayBzd2l0Y2guCisgKiBVc2VkIHRvIHBhc3MgT1MgZGF0YSBiYWNr IGFmdGVyIGEgVEQgY29tcGxldGVzLgorICovCisjZGVmaW5lIFRSQl9FTlQJCQlCSVQoMSkKKy8q IEludGVycnVwdCBvbiBzaG9ydCBwYWNrZXQgKi8KKyNkZWZpbmUgVFJCX0lTUAkJCUJJVCgyKQor LyogU2V0IFBDSWUgbm8gc25vb3AgYXR0cmlidXRlICovCisjZGVmaW5lIFRSQl9OT19TTk9PUAkJ QklUKDMpCisvKiBDaGFpbiBtdWx0aXBsZSBUUkJzIGludG8gYSBURCAqLworI2RlZmluZSBUUkJf Q0hBSU4JCUJJVCg0KQorLyogSW50ZXJydXB0IG9uIGNvbXBsZXRpb24gKi8KKyNkZWZpbmUgVFJC X0lPQwkJCUJJVCg1KQorLyogVGhlIGJ1ZmZlciBwb2ludGVyIGNvbnRhaW5zIGltbWVkaWF0ZSBk YXRhICovCisjZGVmaW5lIFRSQl9JRFQJCQlCSVQoNikKKworLyogQmxvY2sgRXZlbnQgSW50ZXJy dXB0ICovCisjZGVmaW5lIFRSQl9CRUkJCQlCSVQoOSkKKworLyogQ29udHJvbCB0cmFuc2ZlciBU UkIgc3BlY2lmaWMgZmllbGRzICovCisjZGVmaW5lIFRSQl9ESVJfSU4JCUJJVCgxNikKKyNkZWZp bmUgVFJCX1RYX1RZUEUocCkJCSgocCkgPDwgMTYpCisjZGVmaW5lIFRSQl9EQVRBX09VVAkJMgor I2RlZmluZSBUUkJfREFUQV9JTgkJMworCisvKiBJc29jaHJvbm91cyBUUkIgc3BlY2lmaWMgZmll bGRzICovCisjZGVmaW5lIFRSQl9TSUEJCQlCSVQoMzEpCisKK3N0cnVjdCB4aGNpX2dlbmVyaWNf dHJiIHsKKwlfX2xlMzIJZmllbGRbNF07Cit9OworCit1bmlvbiB4aGNpX3RyYiB7CisJc3RydWN0 IHhoY2lfbGlua190cmIJCWxpbms7CisJc3RydWN0IHhoY2lfdHJhbnNmZXJfZXZlbnQJdHJhbnNf ZXZlbnQ7CisJc3RydWN0IHhoY2lfZXZlbnRfY21kCQlldmVudF9jbWQ7CisJc3RydWN0IHhoY2lf Z2VuZXJpY190cmIJCWdlbmVyaWM7Cit9OworCisvKiBUUkIgYml0IG1hc2sgKi8KKyNkZWZpbmUg VFJCX1RZUEVfQklUTUFTSwkoMHhmYzAwKQorI2RlZmluZSBUUkJfVFlQRShwKQkJKChwKSA8PCAx MCkKKyNkZWZpbmUgVFJCX0ZJRUxEX1RPX1RZUEUocCkJKCgocCkgJiBUUkJfVFlQRV9CSVRNQVNL KSA+PiAxMCkKKy8qIFRSQiB0eXBlIElEcyAqLworLyogYnVsaywgaW50ZXJydXB0LCBpc29jIHNj YXR0ZXIvZ2F0aGVyLCBhbmQgY29udHJvbCBkYXRhIHN0YWdlICovCisjZGVmaW5lIFRSQl9OT1JN QUwJCTEKKy8qIHNldHVwIHN0YWdlIGZvciBjb250cm9sIHRyYW5zZmVycyAqLworI2RlZmluZSBU UkJfU0VUVVAJCTIKKy8qIGRhdGEgc3RhZ2UgZm9yIGNvbnRyb2wgdHJhbnNmZXJzICovCisjZGVm aW5lIFRSQl9EQVRBCQkzCisvKiBzdGF0dXMgc3RhZ2UgZm9yIGNvbnRyb2wgdHJhbnNmZXJzICov CisjZGVmaW5lIFRSQl9TVEFUVVMJCTQKKy8qIGlzb2MgdHJhbnNmZXJzICovCisjZGVmaW5lIFRS Ql9JU09DCQk1CisvKiBUUkIgZm9yIGxpbmtpbmcgcmluZyBzZWdtZW50cyAqLworI2RlZmluZSBU UkJfTElOSwkJNgorI2RlZmluZSBUUkJfRVZFTlRfREFUQQkJNworLyogVHJhbnNmZXIgUmluZyBO by1vcCAobm90IGZvciB0aGUgY29tbWFuZCByaW5nKSAqLworI2RlZmluZSBUUkJfVFJfTk9PUAkJ OAorLyogQ29tbWFuZCBUUkJzICovCisvKiBFbmFibGUgU2xvdCBDb21tYW5kICovCisjZGVmaW5l IFRSQl9FTkFCTEVfU0xPVAkJOQorLyogRGlzYWJsZSBTbG90IENvbW1hbmQgKi8KKyNkZWZpbmUg VFJCX0RJU0FCTEVfU0xPVAkxMAorLyogQWRkcmVzcyBEZXZpY2UgQ29tbWFuZCAqLworI2RlZmlu ZSBUUkJfQUREUl9ERVYJCTExCisvKiBDb25maWd1cmUgRW5kcG9pbnQgQ29tbWFuZCAqLworI2Rl ZmluZSBUUkJfQ09ORklHX0VQCQkxMgorLyogRXZhbHVhdGUgQ29udGV4dCBDb21tYW5kICovCisj ZGVmaW5lIFRSQl9FVkFMX0NPTlRFWFQJMTMKKy8qIFJlc2V0IEVuZHBvaW50IENvbW1hbmQgKi8K KyNkZWZpbmUgVFJCX1JFU0VUX0VQCQkxNAorLyogU3RvcCBUcmFuc2ZlciBSaW5nIENvbW1hbmQg Ki8KKyNkZWZpbmUgVFJCX1NUT1BfUklORwkJMTUKKy8qIFNldCBUcmFuc2ZlciBSaW5nIERlcXVl dWUgUG9pbnRlciBDb21tYW5kICovCisjZGVmaW5lIFRSQl9TRVRfREVRCQkxNgorLyogUmVzZXQg RGV2aWNlIENvbW1hbmQgKi8KKyNkZWZpbmUgVFJCX1JFU0VUX0RFVgkJMTcKKy8qIEZvcmNlIEV2 ZW50IENvbW1hbmQgKG9wdCkgKi8KKyNkZWZpbmUgVFJCX0ZPUkNFX0VWRU5UCQkxOAorLyogTmVn b3RpYXRlIEJhbmR3aWR0aCBDb21tYW5kIChvcHQpICovCisjZGVmaW5lIFRSQl9ORUdfQkFORFdJ RFRICTE5CisvKiBTZXQgTGF0ZW5jeSBUb2xlcmFuY2UgVmFsdWUgQ29tbWFuZCAob3B0KSAqLwor I2RlZmluZSBUUkJfU0VUX0xUCQkyMAorLyogR2V0IHBvcnQgYmFuZHdpZHRoIENvbW1hbmQgKi8K KyNkZWZpbmUgVFJCX0dFVF9CVwkJMjEKKy8qIEZvcmNlIEhlYWRlciBDb21tYW5kIC0gZ2VuZXJh dGUgYSB0cmFuc2FjdGlvbiBvciBsaW5rIG1hbmFnZW1lbnQgcGFja2V0ICovCisjZGVmaW5lIFRS Ql9GT1JDRV9IRUFERVIJMjIKKy8qIE5vLW9wIENvbW1hbmQgLSBub3QgZm9yIHRyYW5zZmVyIHJp bmdzICovCisjZGVmaW5lIFRSQl9DTURfTk9PUAkJMjMKKy8qIFRSQiBJRHMgMjQtMzEgcmVzZXJ2 ZWQgKi8KKy8qIEV2ZW50IFRSQlMgKi8KKy8qIFRyYW5zZmVyIEV2ZW50ICovCisjZGVmaW5lIFRS Ql9UUkFOU0ZFUgkJMzIKKy8qIENvbW1hbmQgQ29tcGxldGlvbiBFdmVudCAqLworI2RlZmluZSBU UkJfQ09NUExFVElPTgkJMzMKKy8qIFBvcnQgU3RhdHVzIENoYW5nZSBFdmVudCAqLworI2RlZmlu ZSBUUkJfUE9SVF9TVEFUVVMJCTM0CisvKiBCYW5kd2lkdGggUmVxdWVzdCBFdmVudCAob3B0KSAq LworI2RlZmluZSBUUkJfQkFORFdJRFRIX0VWRU5UCTM1CisvKiBEb29yYmVsbCBFdmVudCAob3B0 KSAqLworI2RlZmluZSBUUkJfRE9PUkJFTEwJCTM2CisvKiBIb3N0IENvbnRyb2xsZXIgRXZlbnQg Ki8KKyNkZWZpbmUgVFJCX0hDX0VWRU5UCQkzNworLyogRGV2aWNlIE5vdGlmaWNhdGlvbiBFdmVu dCAtIGRldmljZSBzZW50IGZ1bmN0aW9uIHdha2Ugbm90aWZpY2F0aW9uICovCisjZGVmaW5lIFRS Ql9ERVZfTk9URQkJMzgKKy8qIE1GSU5ERVggV3JhcCBFdmVudCAtIG1pY3JvZnJhbWUgY291bnRl ciB3cmFwcGVkICovCisjZGVmaW5lIFRSQl9NRklOREVYX1dSQVAJMzkKKy8qIFRSQiBJRHMgNDAt NDcgcmVzZXJ2ZWQsIDQ4LTYzIGlzIHZlbmRvci1kZWZpbmVkICovCisKKy8qIE5lYyB2ZW5kb3It c3BlY2lmaWMgY29tbWFuZCBjb21wbGV0aW9uIGV2ZW50LiAqLworI2RlZmluZSBUUkJfTkVDX0NN RF9DT01QCTQ4CisvKiBHZXQgTkVDIGZpcm13YXJlIHJldmlzaW9uLiAqLworI2RlZmluZSBUUkJf TkVDX0dFVF9GVwkJNDkKKworI2RlZmluZSBUUkJfVFlQRV9MSU5LKHgpCSgoKHgpICYgVFJCX1RZ UEVfQklUTUFTSykgPT0gVFJCX1RZUEUoVFJCX0xJTkspKQorLyogQWJvdmUsIGJ1dCBmb3IgX19s ZTMyIHR5cGVzIC0tIGNhbiBhdm9pZCB3b3JrIGJ5IHN3YXBwaW5nIGNvbnN0YW50czogKi8KKyNk ZWZpbmUgVFJCX1RZUEVfTElOS19MRTMyKHgpCVwKKwkoKCh4KSAmIGNwdV90b19sZTMyKFRSQl9U WVBFX0JJVE1BU0spKSA9PSBjcHVfdG9fbGUzMihUUkJfVFlQRShUUkJfTElOSykpKQorI2RlZmlu ZSBUUkJfVFlQRV9OT09QX0xFMzIoeCkJXAorCSgoKHgpICYgY3B1X3RvX2xlMzIoVFJCX1RZUEVf QklUTUFTSykpID09IGNwdV90b19sZTMyKFRSQl9UWVBFKFRSQl9UUl9OT09QKSkpCisKKyNkZWZp bmUgTkVDX0ZXX01JTk9SKHApCQkoKChwKSA+PiAwKSAmIDB4ZmYpCisjZGVmaW5lIE5FQ19GV19N QUpPUihwKQkJKCgocCkgPj4gOCkgJiAweGZmKQorCisvKgorICogVFJCU19QRVJfU0VHTUVOVCBt dXN0IGJlIGEgbXVsdGlwbGUgb2YgNCwKKyAqIHNpbmNlIHRoZSBjb21tYW5kIHJpbmcgaXMgNjQt Ynl0ZSBhbGlnbmVkLgorICogSXQgbXVzdCBhbHNvIGJlIGdyZWF0ZXIgdGhhbiAxNi4KKyAqLwor I2RlZmluZSBUUkJTX1BFUl9TRUdNRU5UCTY0CisvKiBBbGxvdyB0d28gY29tbWFuZHMgKyBhIGxp bmsgVFJCLCBhbG9uZyB3aXRoIGFueSByZXNlcnZlZCBjb21tYW5kIFRSQnMgKi8KKyNkZWZpbmUg TUFYX1JTVkRfQ01EX1RSQlMJKFRSQlNfUEVSX1NFR01FTlQgLSAzKQorI2RlZmluZSBUUkJfU0VH TUVOVF9TSVpFCShUUkJTX1BFUl9TRUdNRU5UICogMTYpCisjZGVmaW5lIFRSQl9TRUdNRU5UX1NI SUZUCShpbG9nMihUUkJfU0VHTUVOVF9TSVpFKSkKKy8qIFRSQiBidWZmZXIgcG9pbnRlcnMgY2Fu J3QgY3Jvc3MgNjRLQiBib3VuZGFyaWVzICovCisjZGVmaW5lIFRSQl9NQVhfQlVGRl9TSElGVAkx NgorI2RlZmluZSBUUkJfTUFYX0JVRkZfU0laRQkoMSA8PCBUUkJfTUFYX0JVRkZfU0hJRlQpCisK Ky8qIHhIQ0kgY29tbWFuZCBkZWZhdWx0IHRpbWVvdXQgdmFsdWUgKi8KKyNkZWZpbmUgWEhDSV9D TURfREVGQVVMVF9USU1FT1VUCSg1ICogU0VDT05EKQorCitzdHJ1Y3QgeGhjaV9lcnN0X2VudHJ5 IHsKKwkvKiA2NC1iaXQgZXZlbnQgcmluZyBzZWdtZW50IGFkZHJlc3MgKi8KKwlfX2xlNjQJc2Vn X2FkZHI7CisJX19sZTMyCXNlZ19zaXplOworCS8qIFNldCB0byB6ZXJvICovCisJX19sZTMyCXJz dmQ7Cit9OworCisvKgorICogRWFjaCBzZWdtZW50IHRhYmxlIGVudHJ5IGlzIDQqMzJiaXRzIGxv bmcuICAxSyBzZWVtcyBsaWtlIGFuIG9rIHNpemU6CisgKiAoMUsgYnl0ZXMgKiA4Ynl0ZXMvYml0 KSAvICg0KjMyIGJpdHMpID0gNjQgc2VnbWVudCBlbnRyaWVzIGluIHRoZSB0YWJsZSwKKyAqIG1l YW5pbmcgNjQgcmluZyBzZWdtZW50cy4KKyAqIEluaXRpYWwgYWxsb2NhdGVkIHNpemUgb2YgdGhl IEVSU1QsIGluIG51bWJlciBvZiBlbnRyaWVzICovCisjZGVmaW5lIEVSU1RfTlVNX1NFR1MJCQkx CisvKiBJbml0aWFsIGFsbG9jYXRlZCBzaXplIG9mIHRoZSBFUlNULCBpbiBudW1iZXIgb2YgZW50 cmllcyAqLworI2RlZmluZSBFUlNUX1NJWkUJCQk2NAorLyogSW5pdGlhbCBudW1iZXIgb2YgZXZl bnQgc2VnbWVudCByaW5ncyBhbGxvY2F0ZWQgKi8KKyNkZWZpbmUgRVJTVF9FTlRSSUVTCQkJMQor LyogUG9sbCBldmVyeSA2MCBzZWNvbmRzICovCisjZGVmaW5lIFBPTExfVElNRU9VVAkJCTYwCisv KiBTdG9wIGVuZHBvaW50IGNvbW1hbmQgdGltZW91dCAoc2VjcykgZm9yIFVSQiBjYW5jZWxsYXRp b24gd2F0Y2hkb2cgdGltZXIgKi8KKyNkZWZpbmUgWEhDSV9TVE9QX0VQX0NNRF9USU1FT1VUCTUK Ky8qIFhYWDogTWFrZSB0aGVzZSBtb2R1bGUgcGFyYW1ldGVycyAqLworCisvKgorICogSXQgY2Fu IHRha2UgdXAgdG8gMjAgbXMgdG8gdHJhbnNpdGlvbiBmcm9tIFJFeGl0IHRvIFUwIG9uIHRoZQor ICogSW50ZWwgTHlueCBQb2ludCBMUCB4SENJIGhvc3QuCisgKi8KKyNkZWZpbmUgWEhDSV9NQVhf UkVYSVRfVElNRU9VVAkoMjAgKiBNU0VDT05EUykKKworI2RlZmluZSBYSENJX01BWF9FWFRfQ0FQ Uwk1MAorCisjZGVmaW5lIFhIQ0lfRVhUX1BPUlRfTUFKT1IoeCkJKCgoeCkgPj4gMjQpICYgMHhm ZikKKyNkZWZpbmUgWEhDSV9FWFRfUE9SVF9PRkYoeCkJKCh4KSAmIDB4ZmYpCisjZGVmaW5lIFhI Q0lfRVhUX1BPUlRfQ09VTlQoeCkJKCgoeCkgPj4gOCkgJiAweGZmKQorCisvKiBFeHRlbmRlZCBj YXBhYmlsaXR5IHJlZ2lzdGVyIGZpZWxkcyAqLworI2RlZmluZSBYSENJX0VYVF9DQVBTX0lEKHAp CSgoKHApPj4wKSYweGZmKQorI2RlZmluZSBYSENJX0VYVF9DQVBTX05FWFQocCkJKCgocCk+Pjgp JjB4ZmYpCisjZGVmaW5lIFhIQ0lfRVhUX0NBUFNfVkFMKHApCSgocCk+PjE2KQorLyogRXh0ZW5k ZWQgY2FwYWJpbGl0eSBJRHMgLSBJRCAwIHJlc2VydmVkICovCisjZGVmaW5lIFhIQ0lfRVhUX0NB UFNfTEVHQUNZCTEKKyNkZWZpbmUgWEhDSV9FWFRfQ0FQU19QUk9UT0NPTAkyCisjZGVmaW5lIFhI Q0lfRVhUX0NBUFNfUE0JMworI2RlZmluZSBYSENJX0VYVF9DQVBTX1ZJUlQJNAorI2RlZmluZSBY SENJX0VYVF9DQVBTX1JPVVRFCTUKKy8qIElEcyA2LTkgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgWEhD SV9FWFRfQ0FQU19ERUJVRwkxMAorLyogVVNCIExlZ2FjeSBTdXBwb3J0IENhcGFiaWxpdHkgLSBz ZWN0aW9uIDcuMS4xICovCisjZGVmaW5lIFhIQ0lfSENfQklPU19PV05FRAlCSVQoMTYpCisjZGVm aW5lIFhIQ0lfSENfT1NfT1dORUQJQklUKDI0KQorCisvKiBVU0IgTGVnYWN5IFN1cHBvcnQgQ2Fw YWJpbGl0eSAtIHNlY3Rpb24gNy4xLjEgKi8KKy8qIEFkZCB0aGlzIG9mZnNldCwgcGx1cyB0aGUg dmFsdWUgb2YgeEVDUCBpbiBIQ0NQQVJBTVMgdG8gdGhlIGJhc2UgYWRkcmVzcyAqLworI2RlZmlu ZSBYSENJX0xFR0FDWV9TVVBQT1JUX09GRlNFVAkweDAwCisKKy8qIFVTQiBMZWdhY3kgU3VwcG9y dCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgIC0gc2VjdGlvbiA3LjEuMiAqLworLyogQWRk IHRoaXMgb2Zmc2V0LCBwbHVzIHRoZSB2YWx1ZSBvZiB4RUNQIGluIEhDQ1BBUkFNUyB0byB0aGUg YmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFhIQ0lfTEVHQUNZX0NPTlRST0xfT0ZGU0VUCTB4MDQK Ky8qIGJpdHMgMTozLCA1OjEyLCBhbmQgMTc6MTkgbmVlZCB0byBiZSBwcmVzZXJ2ZWQ7IGJpdHMg MjE6Mjggc2hvdWxkIGJlIHplcm8gKi8KKyNkZWZpbmUgWEhDSV9MRUdBQ1lfRElTQUJMRV9TTUkJ CSgoMHg3IDw8IDEpICsgKDB4ZmYgPDwgNSkgKyAoMHg3IDw8IDE3KSkKKyNkZWZpbmUgWEhDSV9M RUdBQ1lfU01JX0VWRU5UUwkJKDB4NyA8PCAyOSkKKworLyogVVNCIDIuMCB4SENJIDAuOTYgTDFD IGNhcGFiaWxpdHkgLSBzZWN0aW9uIDcuMi4yLjEuMy4yICovCisjZGVmaW5lIFhIQ0lfTDFDCQlC SVQoMTYpCisKKy8qIFVTQiAyLjAgeEhDSSAxLjAgaGFyZHdhcmUgTE1QIGNhcGFiaWxpdHkgLSBz ZWN0aW9uIDcuMi4yLjEuMy4yICovCisjZGVmaW5lIFhIQ0lfSExDCQlCSVQoMTkpCisjZGVmaW5l IFhIQ0lfQkxDCQlCSVQoMjApCisKKy8qCisgKiBSZWdpc3RlcnMgc2hvdWxkIGFsd2F5cyBiZSBh Y2Nlc3NlZCB3aXRoIGRvdWJsZSB3b3JkIG9yIHF1YWQgd29yZCBhY2Nlc3Nlcy4KKyAqCisgKiBT b21lIHhIQ0kgaW1wbGVtZW50YXRpb25zIG1heSBzdXBwb3J0IDY0LWJpdCBhZGRyZXNzIHBvaW50 ZXJzLiAgUmVnaXN0ZXJzCisgKiB3aXRoIDY0LWJpdCBhZGRyZXNzIHBvaW50ZXJzIHNob3VsZCBi ZSB3cml0dGVuIHRvIHdpdGggZHdvcmQgYWNjZXNzZXMgYnkKKyAqIHdyaXRpbmcgdGhlIGxvdyBk d29yZCBmaXJzdCAocHRyWzBdKSwgdGhlbiB0aGUgaGlnaCBkd29yZCAocHRyWzFdKSBzZWNvbmQu CisgKiB4SENJIGltcGxlbWVudGF0aW9ucyB0aGF0IGRvIG5vdCBzdXBwb3J0IDY0LWJpdCBhZGRy ZXNzIHBvaW50ZXJzIHdpbGwgaWdub3JlCisgKiB0aGUgaGlnaCBkd29yZCwgYW5kIHdyaXRlIG9y ZGVyIGlzIGlycmVsZXZhbnQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTY0IHhoY2lfcmVhZF82NChf X2xlNjQgX19pb21lbSAqcmVncykKK3sKKwlfX3UzMiBfX2lvbWVtICpwdHIgPSAoX191MzIgX19p b21lbSAqKXJlZ3M7CisJdTY0IHZhbF9sbyA9IHJlYWRsKHB0cik7CisJdTY0IHZhbF9oaSA9IHJl YWRsKHB0ciArIDEpOworCXJldHVybiB2YWxfbG8gKyAodmFsX2hpIDw8IDMyKTsKK30KK3N0YXRp YyBpbmxpbmUgdm9pZCB4aGNpX3dyaXRlXzY0KGNvbnN0IHU2NCB2YWwsIF9fbGU2NCBfX2lvbWVt ICpyZWdzKQoreworCV9fdTMyIF9faW9tZW0gKnB0ciA9IChfX3UzMiBfX2lvbWVtICopcmVnczsK Kwl1MzIgdmFsX2xvID0gbG93ZXJfMzJfYml0cyh2YWwpOworCXUzMiB2YWxfaGkgPSB1cHBlcl8z Ml9iaXRzKHZhbCk7CisKKwl3cml0ZWwodmFsX2xvLCBwdHIpOworCXdyaXRlbCh2YWxfaGksIHB0 ciArIDEpOworfQorCisvKgorICogQmFyZWJveCB4SENJIGhvdXNla2VlcGluZyBzdHJ1Y3RzCisg Ki8KKworZW51bSB4aGNpX3JpbmdfdHlwZSB7CisgICAgICAgIFRZUEVfQ1RSTCA9IDAsCisgICAg ICAgIFRZUEVfSVNPQywKKyAgICAgICAgVFlQRV9CVUxLLAorICAgICAgICBUWVBFX0lOVFIsCisg ICAgICAgIFRZUEVfU1RSRUFNLAorICAgICAgICBUWVBFX0NPTU1BTkQsCisgICAgICAgIFRZUEVf RVZFTlQsCit9OworCitzdHJ1Y3QgeGhjaV9yaW5nIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7 CisJdW5pb24geGhjaV90cmIgKnRyYnM7CisJdW5pb24geGhjaV90cmIgKmVucXVldWU7CisJdW5p b24geGhjaV90cmIgKmRlcXVldWU7CisJZW51bSB4aGNpX3JpbmdfdHlwZSB0eXBlOworCWludCBu dW1fdHJiczsKKwlpbnQgY3ljbGVfc3RhdGU7Cit9OworCitzdHJ1Y3QgeGhjaV9kZXZpY2VfY29u dGV4dCB7CisJc3RydWN0IHhoY2lfc2xvdF9jdHggc2xvdDsKKwlzdHJ1Y3QgeGhjaV9lcF9jdHgg ZXBbMzFdOworfTsKKworc3RydWN0IHhoY2lfaW5wdXRfY29udGV4dCB7CisJc3RydWN0IHhoY2lf aW5wdXRfY29udHJvbF9jdHggaWNjOworCXN0cnVjdCB4aGNpX3Nsb3RfY3R4IHNsb3Q7CisJc3Ry dWN0IHhoY2lfZXBfY3R4IGVwWzMxXTsKK307CisKK3N0cnVjdCB4aGNpX3ZpcnR1YWxfZGV2aWNl IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJ dm9pZCAqZG1hOworCXNpemVfdCBkbWFfc2l6ZTsKKwlpbnQgcm91dGU7CisJaW50IHNsb3RfaWQ7 CisJaW50IHJlYWxfcG9ydDsKKwlpbnQgZmFrZV9wb3J0OworCXN0cnVjdCB4aGNpX3JpbmcgKmVw W01BWF9FUF9SSU5HU107CisJc3RydWN0IHhoY2lfaW5wdXRfY29udGV4dCAqaW5fY3R4OworCXN0 cnVjdCB4aGNpX2RldmljZV9jb250ZXh0ICpvdXRfY3R4OworfTsKKworc3RydWN0IHVzYl9yb290 X2h1Yl9pbmZvIHsKKwlzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yIGh1YjsKKwlzdHJ1Y3QgdXNi X2RldmljZV9kZXNjcmlwdG9yIGRldmljZTsKKwlzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9y IGNvbmZpZzsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIGludGVyZmFjZTsKKwlz dHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZW5kcG9pbnQ7Cit9IF9fYXR0cmlidXRlX18g KChwYWNrZWQpKTsKKworc3RydWN0IHhoY2lfaGNkIHsKKwlzdHJ1Y3QgdXNiX2hvc3QgaG9zdDsK KwlzdHJ1Y3QgZGV2aWNlX2QgKmRldjsKKwlzdHJ1Y3QgeGhjaV9jYXBfcmVncyBfX2lvbWVtICpj YXBfcmVnczsKKwlzdHJ1Y3QgeGhjaV9vcF9yZWdzIF9faW9tZW0gKm9wX3JlZ3M7CisJc3RydWN0 IHhoY2lfcnVuX3JlZ3MgX19pb21lbSAqcnVuX3JlZ3M7CisJc3RydWN0IHhoY2lfZG9vcmJlbGxf YXJyYXkgX19pb21lbSAqZGJhOworCXN0cnVjdCB4aGNpX2ludHJfcmVnIF9faW9tZW0gKmlyX3Nl dDsKKwkvKiBDYWNoZWQgcmVnaXN0ZXIgY29waWVzIG9mIHJlYWQtb25seSBIQyBkYXRhICovCisJ dTMyIGhjc19wYXJhbXMxOworCXUzMiBoY3NfcGFyYW1zMjsKKwl1MzIgaGNzX3BhcmFtczM7CisJ dTMyIGhjY19jYXBiYXNlOworCXUzMiBoY2NfcGFyYW1zOworCXUxNiBoY2lfdmVyc2lvbjsKKwlp bnQgbWF4X3Nsb3RzOworCWludCBudW1fc3A7CisJaW50IHBhZ2Vfc2l6ZTsKKwlpbnQgcGFnZV9z aGlmdDsKKwl2b2lkICpkbWE7CisJc2l6ZV90IGRtYV9zaXplOworCV9fbGU2NCAqZGNiYWE7CisJ dm9pZCAqc3A7CisJX19sZTY0ICpzcF9hcnJheTsKKwlzdHJ1Y3QgeGhjaV9yaW5nIGNtZF9yaW5n OworCXN0cnVjdCB4aGNpX3JpbmcgZXZlbnRfcmluZzsKKwlzdHJ1Y3QgeGhjaV9yaW5nICpyaW5n czsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJpbmdzX2xpc3Q7CisJc3RydWN0IHhoY2lfZXJzdF9lbnRy eSAqZXZlbnRfZXJzdDsKKwl1OCAqcG9ydF9hcnJheTsKKwlpbnQgcm9vdGRldjsKKwlzdHJ1Y3Qg bGlzdF9oZWFkIHZkZXZfbGlzdDsKKwl1MzIgKmV4dF9jYXBzOworCXVuc2lnbmVkIGludCBudW1f ZXh0X2NhcHM7CisJX19sZTMyIF9faW9tZW0gKip1c2IyX3BvcnRzOworCXVuc2lnbmVkIGludCBu dW1fdXNiMl9wb3J0czsKKwlzdHJ1Y3QgdXNiX3Jvb3RfaHViX2luZm8gdXNiMl9pbmZvOworCV9f bGUzMiBfX2lvbWVtICoqdXNiM19wb3J0czsKKwl1bnNpZ25lZCBpbnQgbnVtX3VzYjNfcG9ydHM7 CisJc3RydWN0IHVzYl9yb290X2h1Yl9pbmZvIHVzYjNfaW5mbzsKK307CisKKyNkZWZpbmUgdG9f eGhjaV9oY2QoX2gpCVwKKwljb250YWluZXJfb2YoX2gsIHN0cnVjdCB4aGNpX2hjZCwgaG9zdCkK KworaW50IHhoY2lfaXNzdWVfY29tbWFuZChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHVuaW9uIHho Y2lfdHJiICp0cmIpOworaW50IHhoY2lfd2FpdF9mb3JfZXZlbnQoc3RydWN0IHhoY2lfaGNkICp4 aGNpLCB1OCB0eXBlLCB1bmlvbiB4aGNpX3RyYiAqdHJiKTsKKworaW50IHhoY2lfdmlydGRldl9y ZXNldChzdHJ1Y3QgeGhjaV92aXJ0dWFsX2RldmljZSAqdmRldik7CitpbnQgeGhjaV92aXJ0ZGV2 X2RldGFjaChzdHJ1Y3QgeGhjaV92aXJ0dWFsX2RldmljZSAqdmRldik7CisKK2ludCB4aGNpX2h1 Yl9zZXR1cF9wb3J0cyhzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpOwordm9pZCB4aGNpX2h1Yl91c2Iy MF9wb3J0X3Bvd2VyKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgaW50IHBvcnQsIGJvb2wgZW5hYmxl KTsKK3ZvaWQgeGhjaV9odWJfdXNiMzBfcG9ydF9wb3dlcihzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ks IGludCBwb3J0LCBib29sIGVuYWJsZSk7CitpbnQgeGhjaV9odWJfY29udHJvbChzdHJ1Y3QgdXNi X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIHBpcGUsCisJCSAgICAgdm9pZCAqYnVmZmVyLCBp bnQgbGVuZ3RoLCBzdHJ1Y3QgZGV2cmVxdWVzdCAqcmVxKTsKKworc3RhdGljIGlubGluZSB2b2lk IHhoY2lfcHJpbnRfdHJiKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKKwkJCQkgIHVuaW9uIHhoY2lf dHJiICp0cmIsIGNvbnN0IGNoYXIgKmRlc2MpCit7CisJZGV2X2RiZyh4aGNpLT5kZXYsICIlcyBb JTA4eCAlMDh4ICUwOHggJTA4eF1cbiIsIGRlc2MsCisJCXRyYi0+Z2VuZXJpYy5maWVsZFswXSwg dHJiLT5nZW5lcmljLmZpZWxkWzFdLAorCQl0cmItPmdlbmVyaWMuZmllbGRbMl0sIHRyYi0+Z2Vu ZXJpYy5maWVsZFszXSk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91c2IveGhj aS5oIGIvaW5jbHVkZS91c2IveGhjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uMWEzMTM4YjEzMjg4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS91c2IveGhj aS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiB4SENJIGhvc3QgY29udHJvbGxlciBkcml2ZXIK KyAqCisgKiBTZWJhc3RpYW4gSGVzc2VsYmFydGggPHNlYmFzdGlhbi5oZXNzZWxiYXJ0aEBnbWFp bC5jb20+CisgKgorICogU29tZSBjb2RlIGJvcnJvd2VkIGZyb20gdGhlIExpbnV4IHhIQ0kgZHJp dmVyCisgKiAgIEF1dGhvcjogU2FyYWggU2hhcnAKKyAqICAgQ29weXJpZ2h0IChDKSAyMDA4IElu dGVsIENvcnAuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m IE1FUkNIQU5UQUJJTElUWQorICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxz LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3 cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNjc1IE1hc3Mg QXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX1hIQ0lfSENE X0gKKyNkZWZpbmUgX19YSENJX0hDRF9ICisKK3N0cnVjdCB4aGNpX2RhdGEgeworCXZvaWQgX19p b21lbSAqcmVnczsKK307CisKK2ludCB4aGNpX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2VfZCAqZGV2 LCBzdHJ1Y3QgeGhjaV9kYXRhICpkYXRhKTsKKworI2VuZGlmCi0tIAoyLjAuMAoKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmJhcmVib3ggbWFpbGluZyBs aXN0CmJhcmVib3hAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2JhcmVib3gK