From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH 4/9] libxl: carve out disk specific functions from libxl.c Date: Wed, 8 Feb 2017 14:13:41 +0100 Message-ID: <20170208131346.20826-5-jgross@suse.com> References: <20170208131346.20826-1-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cbS4H-0007gD-UH for xen-devel@lists.xenproject.org; Wed, 08 Feb 2017 13:13:54 +0000 In-Reply-To: <20170208131346.20826-1-jgross@suse.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Juergen Gross , wei.liu2@citrix.com, ian.jackson@eu.citrix.com, haozhong.zhang@intel.com List-Id: xen-devel@lists.xenproject.org bGlieGwuYyBoYXMgZ3Jvd24gdG8gYW4gdW5jb21mb3J0YWJsZSBzaXplLiBDYXJ2ZSBvdXQgdGhl IGRpc2sKcmVsYXRlZCBmdW5jdGlvbnMgdG8gbGlieGxfZGlzay5jLgoKU2lnbmVkLW9mZi1ieTog SnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuY29tPgotLS0KIHRvb2xzL2xpYnhsL01ha2VmaWxl ICAgICB8ICAgIDIgKy0KIHRvb2xzL2xpYnhsL2xpYnhsLmMgICAgICB8IDEyMzQgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB0b29scy9saWJ4bC9saWJ4bF9k aXNrLmMgfCAxMjU4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKIDMgZmlsZXMgY2hhbmdlZCwgMTI1OSBpbnNlcnRpb25zKCspLCAxMjM1IGRlbGV0aW9ucygt KQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2xpYnhsL2xpYnhsX2Rpc2suYwoKZGlmZiAtLWdp dCBhL3Rvb2xzL2xpYnhsL01ha2VmaWxlIGIvdG9vbHMvbGlieGwvTWFrZWZpbGUKaW5kZXggNzUx NGNjMi4uYmFmNTkxZCAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvTWFrZWZpbGUKKysrIGIvdG9v bHMvbGlieGwvTWFrZWZpbGUKQEAgLTEzNiw3ICsxMzYsNyBAQCBMSUJYTF9PQkpTID0gZmxleGFy cmF5Lm8gbGlieGwubyBsaWJ4bF9jcmVhdGUubyBsaWJ4bF9kbS5vIGxpYnhsX3BjaS5vIFwKIAkJ CWxpYnhsX3NhdmVfY2FsbG91dC5vIF9saWJ4bF9zYXZlX21zZ3NfY2FsbG91dC5vIFwKIAkJCWxp YnhsX3FtcC5vIGxpYnhsX2V2ZW50Lm8gbGlieGxfZm9yay5vIFwKIAkJCWxpYnhsX2RvbV9zdXNw ZW5kLm8gbGlieGxfZG9tX3NhdmUubyBsaWJ4bF91c2IubyBcCi0JCQlsaWJ4bF92dHBtLm8gbGli eGxfbmljLm8gXAorCQkJbGlieGxfdnRwbS5vIGxpYnhsX25pYy5vIGxpYnhsX2Rpc2subyBcCiAJ CQlsaWJ4bF9jcHVwb29sLm8gbGlieGxfc2NoZWQubyBcCiAgICAgICAgICAgICAgICAgICAgICAg ICAkKExJQlhMX09CSlMteSkKIExJQlhMX09CSlMgKz0gbGlieGxfZ2VuaWQubwpkaWZmIC0tZ2l0 IGEvdG9vbHMvbGlieGwvbGlieGwuYyBiL3Rvb2xzL2xpYnhsL2xpYnhsLmMKaW5kZXggM2Y3YWE1 Mi4uMDQzYzNkNiAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGwuYworKysgYi90b29scy9s aWJ4bC9saWJ4bC5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSAibGlieGxfYXJjaC5oIgog CiAjZGVmaW5lIFBBR0VfVE9fTUVNS0IocGFnZXMpICgocGFnZXMpICogNCkKLSNkZWZpbmUgQkFD S0VORF9TVFJJTkdfU0laRSA1CiAKIGludCBsaWJ4bF9jdHhfYWxsb2MobGlieGxfY3R4ICoqcGN0 eCwgaW50IHZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZsYWdzLCB4ZW50 b29sbG9nX2xvZ2dlciAqIGxnKQpAQCAtMTE5OSwxNDAgKzExOTgsNiBAQCB2b2lkIGxpYnhsX2V2 ZGlzYWJsZV9kb21haW5fZGVhdGgobGlieGxfY3R4ICpjdHgsCiAgICAgR0NfRlJFRTsKIH0KIAot c3RhdGljIHZvaWQgZGlza19lamVjdF94c3dhdGNoX2NhbGxiYWNrKGxpYnhsX19lZ2MgKmVnYywg bGlieGxfX2V2X3hzd2F0Y2ggKncsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqd3BhdGgsIGNvbnN0IGNoYXIgKmVwYXRoKSB7Ci0gICAgRUdDX0dD OwotICAgIGxpYnhsX2V2Z2VuX2Rpc2tfZWplY3QgKmV2ZyA9ICh2b2lkKil3OwotICAgIGNvbnN0 IGNoYXIgKmJhY2tlbmQ7Ci0gICAgY2hhciAqdmFsdWU7Ci0gICAgY2hhciBiYWNrZW5kX3R5cGVb QkFDS0VORF9TVFJJTkdfU0laRSsxXTsKLSAgICBpbnQgcmM7Ci0KLSAgICB2YWx1ZSA9IGxpYnhs X194c19yZWFkKGdjLCBYQlRfTlVMTCwgd3BhdGgpOwotCi0gICAgaWYgKCF2YWx1ZSB8fCBzdHJj bXAodmFsdWUsICAiZWplY3QiKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxpYnhsX194 c19wcmludGYoZ2MsIFhCVF9OVUxMLCB3cGF0aCwgIiIpKSB7Ci0gICAgICAgIExJQlhMX19FVkVO VF9ESVNBU1RFUihlZ2MsICJ4c193cml0ZSBmYWlsZWQgYWNrbm93bGVkZ2luZyBlamVjdCIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJubywgTElCWExfRVZFTlRfVFlQRV9ESVNL X0VKRUNUKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGxpYnhsX2V2ZW50ICpldiA9 IE5FV19FVkVOVChlZ2MsIERJU0tfRUpFQ1QsIGV2Zy0+ZG9taWQsIGV2Zy0+dXNlcik7Ci0gICAg bGlieGxfZGV2aWNlX2Rpc2sgKmRpc2sgPSAmZXYtPnUuZGlza19lamVjdC5kaXNrOwotICAgIAot ICAgIHJjID0gbGlieGxfX3hzX3JlYWRfY2hlY2tlZChnYywgWEJUX05VTEwsIGV2Zy0+YmVfcHRy X3BhdGgsICZiYWNrZW5kKTsKLSAgICBpZiAocmMpIHsKLSAgICAgICAgTElCWExfX0VWRU5UX0RJ U0FTVEVSKGVnYywgInhzX3JlYWQgZmFpbGVkIHJlYWRpbmcgYmVfcHRyX3BhdGgiLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8sIExJQlhMX0VWRU5UX1RZUEVfRElTS19FSkVD VCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFiYWNrZW5kKSB7Ci0gICAgICAg IC8qIGRldmljZSBoYXMgYmVlbiByZW1vdmVkLCBub3Qgc2ltcGx5IGVqZWN0ZWQgKi8KLSAgICAg ICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNzY2FuZihiYWNrZW5kLAotICAgICAgICAgICAgIi9s b2NhbC9kb21haW4vJWQvYmFja2VuZC8lIiBUT1NUUklORyhCQUNLRU5EX1NUUklOR19TSVpFKQot ICAgICAgICAgICAiW2Etel0vJSpkLyUqZCIsCi0gICAgICAgICAgICZkaXNrLT5iYWNrZW5kX2Rv bWlkLCBiYWNrZW5kX3R5cGUpOwotICAgIGlmICghc3RyY21wKGJhY2tlbmRfdHlwZSwgInRhcCIp IHx8ICFzdHJjbXAoYmFja2VuZF90eXBlLCAidmJkIikpIHsKLSAgICAgICAgZGlzay0+YmFja2Vu ZCA9IExJQlhMX0RJU0tfQkFDS0VORF9UQVA7Ci0gICAgfSBlbHNlIGlmICghc3RyY21wKGJhY2tl bmRfdHlwZSwgInFkaXNrIikpIHsKLSAgICAgICAgZGlzay0+YmFja2VuZCA9IExJQlhMX0RJU0tf QkFDS0VORF9RRElTSzsKLSAgICB9IGVsc2UgewotICAgICAgICBkaXNrLT5iYWNrZW5kID0gTElC WExfRElTS19CQUNLRU5EX1VOS05PV047Ci0gICAgfQotCi0gICAgZGlzay0+cGRldl9wYXRoID0g c3RyZHVwKCIiKTsgLyogeHh4IGZpeG1lIG1hbGxvYyBmYWlsdXJlICovCi0gICAgZGlzay0+Zm9y bWF0ID0gTElCWExfRElTS19GT1JNQVRfRU1QVFk7Ci0gICAgLyogdGhpcyB2YWx1ZSBpcyByZXR1 cm5lZCB0byB0aGUgdXNlcjogZG8gbm90IGZyZWUgcmlnaHQgYXdheSAqLwotICAgIGRpc2stPnZk ZXYgPSBsaWJ4bF9fc3RyZHVwKE5PR0MsIGV2Zy0+dmRldik7Ci0gICAgZGlzay0+cmVtb3ZhYmxl ID0gMTsKLSAgICBkaXNrLT5yZWFkd3JpdGUgPSAwOwotICAgIGRpc2stPmlzX2Nkcm9tID0gMTsK LQotICAgIGxpYnhsX19ldmVudF9vY2N1cnJlZChlZ2MsIGV2KTsKLX0KLQotaW50IGxpYnhsX2V2 ZW5hYmxlX2Rpc2tfZWplY3QobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGd1ZXN0X2RvbWlkLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmRldiwgbGlieGxfZXZf dXNlciB1c2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZXZnZW5fZGlz a19lamVjdCAqKmV2Z2VuX291dCkgewotICAgIEdDX0lOSVQoY3R4KTsKLSAgICBDVFhfTE9DSzsK LSAgICBpbnQgcmM7Ci0gICAgY2hhciAqcGF0aDsKLSAgICBsaWJ4bF9ldmdlbl9kaXNrX2VqZWN0 ICpldmcgPSBOVUxMOwotCi0gICAgZXZnID0gbWFsbG9jKHNpemVvZigqZXZnKSk7ICBpZiAoIWV2 ZykgeyByYyA9IEVSUk9SX05PTUVNOyBnb3RvIG91dDsgfQotICAgIG1lbXNldChldmcsIDAsIHNp emVvZigqZXZnKSk7Ci0gICAgZXZnLT51c2VyID0gdXNlcjsKLSAgICBldmctPmRvbWlkID0gZ3Vl c3RfZG9taWQ7Ci0gICAgTElCWExfTElTVF9JTlNFUlRfSEVBRCgmQ1RYLT5kaXNrX2VqZWN0X2V2 Z2VucywgZXZnLCBlbnRyeSk7Ci0KLSAgICB1aW50MzJfdCBkb21pZCA9IGxpYnhsX2dldF9zdHVi ZG9tX2lkKGN0eCwgZ3Vlc3RfZG9taWQpOwotCi0gICAgaWYgKCFkb21pZCkKLSAgICAgICAgZG9t aWQgPSBndWVzdF9kb21pZDsKLQotICAgIGludCBkZXZpZCA9IGxpYnhsX19kZXZpY2VfZGlza19k ZXZfbnVtYmVyKHZkZXYsIE5VTEwsIE5VTEwpOwotCi0gICAgcGF0aCA9IEdDU1BSSU5URigiJXMv ZGV2aWNlL3ZiZC8lZC9lamVjdCIsCi0gICAgICAgICAgICAgICAgIGxpYnhsX194c19nZXRfZG9t cGF0aChnYywgZG9taWQpLAotICAgICAgICAgICAgICAgICBkZXZpZCk7Ci0gICAgaWYgKCFwYXRo KSB7IHJjID0gRVJST1JfTk9NRU07IGdvdG8gb3V0OyB9Ci0KLSAgICBjb25zdCBjaGFyICpsaWJ4 bF9wYXRoID0gR0NTUFJJTlRGKCIlcy9kZXZpY2UvdmJkLyVkIiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX194c19saWJ4bF9wYXRoKGdjLCBkb21pZCksCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpZCk7Ci0gICAgZXZnLT5iZV9wdHJfcGF0aCA9 IGxpYnhsX19zcHJpbnRmKE5PR0MsICIlcy9iYWNrZW5kIiwgbGlieGxfcGF0aCk7Ci0KLSAgICBj b25zdCBjaGFyICpjb25maWd1cmVkX3ZkZXY7Ci0gICAgcmMgPSBsaWJ4bF9feHNfcmVhZF9jaGVj a2VkKGdjLCBYQlRfTlVMTCwKLSAgICAgICAgICAgIEdDU1BSSU5URigiJXMvZGV2IiwgbGlieGxf cGF0aCksICZjb25maWd1cmVkX3ZkZXYpOwotICAgIGlmIChyYykgZ290byBvdXQ7Ci0KLSAgICBl dmctPnZkZXYgPSBsaWJ4bF9fc3RyZHVwKE5PR0MsIGNvbmZpZ3VyZWRfdmRldik7Ci0KLSAgICBy YyA9IGxpYnhsX19ldl94c3dhdGNoX3JlZ2lzdGVyKGdjLCAmZXZnLT53YXRjaCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tfZWplY3RfeHN3YXRjaF9jYWxsYmFjaywg cGF0aCk7Ci0gICAgaWYgKHJjKSBnb3RvIG91dDsKLQotICAgICpldmdlbl9vdXQgPSBldmc7Ci0g ICAgQ1RYX1VOTE9DSzsKLSAgICBHQ19GUkVFOwotICAgIHJldHVybiAwOwotCi0gb3V0OgotICAg IGlmIChldmcpCi0gICAgICAgIGxpYnhsX19ldmRpc2FibGVfZGlza19lamVjdChnYywgZXZnKTsK LSAgICBDVFhfVU5MT0NLOwotICAgIEdDX0ZSRUU7Ci0gICAgcmV0dXJuIHJjOwotfQotCi12b2lk IGxpYnhsX19ldmRpc2FibGVfZGlza19lamVjdChsaWJ4bF9fZ2MgKmdjLCBsaWJ4bF9ldmdlbl9k aXNrX2VqZWN0ICpldmcpIHsKLSAgICBDVFhfTE9DSzsKLQotICAgIExJQlhMX0xJU1RfUkVNT1ZF KGV2ZywgZW50cnkpOwotCi0gICAgaWYgKGxpYnhsX19ldl94c3dhdGNoX2lzcmVnaXN0ZXJlZCgm ZXZnLT53YXRjaCkpCi0gICAgICAgIGxpYnhsX19ldl94c3dhdGNoX2RlcmVnaXN0ZXIoZ2MsICZl dmctPndhdGNoKTsKLQotICAgIGZyZWUoZXZnLT52ZGV2KTsKLSAgICBmcmVlKGV2Zy0+YmVfcHRy X3BhdGgpOwotICAgIGZyZWUoZXZnKTsKLQotICAgIENUWF9VTkxPQ0s7Ci19Ci0KLXZvaWQgbGli eGxfZXZkaXNhYmxlX2Rpc2tfZWplY3QobGlieGxfY3R4ICpjdHgsIGxpYnhsX2V2Z2VuX2Rpc2tf ZWplY3QgKmV2ZykgewotICAgIEdDX0lOSVQoY3R4KTsKLSAgICBsaWJ4bF9fZXZkaXNhYmxlX2Rp c2tfZWplY3QoZ2MsIGV2Zyk7Ci0gICAgR0NfRlJFRTsKLX0gICAgCi0KIC8qIENhbGxiYWNrcyBm b3IgbGlieGxfZG9tYWluX2Rlc3Ryb3kgKi8KIAogc3RhdGljIHZvaWQgZG9tYWluX2Rlc3Ryb3lf Y2IobGlieGxfX2VnYyAqZWdjLCBsaWJ4bF9fZG9tYWluX2Rlc3Ryb3lfc3RhdGUgKmRkcywKQEAg LTE5NTAsMTA0NSArMTgxNSw2IEBAIGludCBsaWJ4bF9fcmVzb2x2ZV9kb21pZChsaWJ4bF9fZ2Mg KmdjLCBjb25zdCBjaGFyICpuYW1lLCB1aW50MzJfdCAqZG9taWQpCiB9CiAKIC8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCi0KLWludCBsaWJ4bF9fZGV2aWNlX2Rpc2tfc2V0ZGVmYXVsdChsaWJ4bF9f Z2MgKmdjLCBsaWJ4bF9kZXZpY2VfZGlzayAqZGlzaywKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1aW50MzJfdCBkb21pZCkKLXsKLSAgICBpbnQgcmM7Ci0KLSAgICBsaWJ4bF9k ZWZib29sX3NldGRlZmF1bHQoJmRpc2stPmRpc2NhcmRfZW5hYmxlLCAhIWRpc2stPnJlYWR3cml0 ZSk7Ci0gICAgbGlieGxfZGVmYm9vbF9zZXRkZWZhdWx0KCZkaXNrLT5jb2xvX2VuYWJsZSwgZmFs c2UpOwotICAgIGxpYnhsX2RlZmJvb2xfc2V0ZGVmYXVsdCgmZGlzay0+Y29sb19yZXN0b3JlX2Vu YWJsZSwgZmFsc2UpOwotCi0gICAgcmMgPSBsaWJ4bF9fcmVzb2x2ZV9kb21pZChnYywgZGlzay0+ YmFja2VuZF9kb21uYW1lLCAmZGlzay0+YmFja2VuZF9kb21pZCk7Ci0gICAgaWYgKHJjIDwgMCkg cmV0dXJuIHJjOwotCi0gICAgLyogRm9yY2UgUWRpc2sgYmFja2VuZCBmb3IgQ0RST00gZGV2aWNl cyBvZiBndWVzdHMgd2l0aCBhIGRldmljZSBtb2RlbC4gKi8KLSAgICBpZiAoZGlzay0+aXNfY2Ry b20gIT0gMCAmJgotICAgICAgICBsaWJ4bF9fZG9tYWluX3R5cGUoZ2MsIGRvbWlkKSA9PSBMSUJY TF9ET01BSU5fVFlQRV9IVk0gJiYKLSAgICAgICAgbGlieGxfX2RldmljZV9tb2RlbF92ZXJzaW9u X3J1bm5pbmcoZ2MsIGRvbWlkKSAhPQotICAgICAgICBMSUJYTF9ERVZJQ0VfTU9ERUxfVkVSU0lP Tl9OT05FKSB7Ci0gICAgICAgIGlmICghKGRpc2stPmJhY2tlbmQgPT0gTElCWExfRElTS19CQUNL RU5EX1FESVNLIHx8Ci0gICAgICAgICAgICAgIGRpc2stPmJhY2tlbmQgPT0gTElCWExfRElTS19C QUNLRU5EX1VOS05PV04pKSB7Ci0gICAgICAgICAgICBMT0dEKEVSUk9SLCBkb21pZCwgIkJhY2tl bmQgZm9yIENEIGRldmljZXMgb24gSFZNIGd1ZXN0cyBtdXN0IGJlIFFkaXNrIik7Ci0gICAgICAg ICAgICByZXR1cm4gRVJST1JfRkFJTDsKLSAgICAgICAgfQotICAgICAgICBkaXNrLT5iYWNrZW5k ID0gTElCWExfRElTS19CQUNLRU5EX1FESVNLOwotICAgIH0KLQotICAgIHJjID0gbGlieGxfX2Rl dmljZV9kaXNrX3NldF9iYWNrZW5kKGdjLCBkaXNrKTsKLSAgICByZXR1cm4gcmM7Ci19Ci0KLWlu dCBsaWJ4bF9fZGV2aWNlX2Zyb21fZGlzayhsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfZGV2aWNlX2Rp c2sgKmRpc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19kZXZp Y2UgKmRldmljZSkKLXsKLSAgICBpbnQgZGV2aWQ7Ci0KLSAgICBkZXZpZCA9IGxpYnhsX19kZXZp Y2VfZGlza19kZXZfbnVtYmVyKGRpc2stPnZkZXYsIE5VTEwsIE5VTEwpOwotICAgIGlmIChkZXZp ZD09LTEpIHsKLSAgICAgICAgTE9HRChFUlJPUiwgZG9taWQsICJJbnZhbGlkIG9yIHVuc3VwcG9y dGVkIiIgdmlydHVhbCBkaXNrIGlkZW50aWZpZXIgJXMiLAotICAgICAgICAgICAgIGRpc2stPnZk ZXYpOwotICAgICAgICByZXR1cm4gRVJST1JfSU5WQUw7Ci0gICAgfQotCi0gICAgZGV2aWNlLT5i YWNrZW5kX2RvbWlkID0gZGlzay0+YmFja2VuZF9kb21pZDsKLSAgICBkZXZpY2UtPmJhY2tlbmRf ZGV2aWQgPSBkZXZpZDsKLQotICAgIHN3aXRjaCAoZGlzay0+YmFja2VuZCkgewotICAgICAgICBj YXNlIExJQlhMX0RJU0tfQkFDS0VORF9QSFk6Ci0gICAgICAgICAgICBkZXZpY2UtPmJhY2tlbmRf a2luZCA9IExJQlhMX19ERVZJQ0VfS0lORF9WQkQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg ICAgY2FzZSBMSUJYTF9ESVNLX0JBQ0tFTkRfVEFQOgotICAgICAgICAgICAgZGV2aWNlLT5iYWNr ZW5kX2tpbmQgPSBMSUJYTF9fREVWSUNFX0tJTkRfVkJEOwotICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgIGNhc2UgTElCWExfRElTS19CQUNLRU5EX1FESVNLOgotICAgICAgICAgICAgZGV2aWNl LT5iYWNrZW5kX2tpbmQgPSBMSUJYTF9fREVWSUNFX0tJTkRfUURJU0s7Ci0gICAgICAgICAgICBi cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIExPR0QoRVJST1IsIGRvbWlkLCAi VW5yZWNvZ25pemVkIGRpc2sgYmFja2VuZCB0eXBlOiAlZCIsCi0gICAgICAgICAgICAgICAgIGRp c2stPmJhY2tlbmQpOwotICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0lOVkFMOwotICAgIH0KLQot ICAgIGRldmljZS0+ZG9taWQgPSBkb21pZDsKLSAgICBkZXZpY2UtPmRldmlkID0gZGV2aWQ7Ci0g ICAgZGV2aWNlLT5raW5kICA9IExJQlhMX19ERVZJQ0VfS0lORF9WQkQ7Ci0KLSAgICByZXR1cm4g MDsKLX0KLQotLyogU3BlY2lmaWMgZnVuY3Rpb24gY2FsbGVkIGRpcmVjdGx5IG9ubHkgYnkgbG9j YWwgZGlzayBhdHRhY2gsCi0gKiBhbGwgb3RoZXIgdXNlcnMgc2hvdWxkIGluc3RlYWQgdXNlIHRo ZSByZWd1bGFyCi0gKiBsaWJ4bF9fZGV2aWNlX2Rpc2tfYWRkIHdyYXBwZXIKLSAqCi0gKiBUaGUg KG9wdGlvbmFsbHkpIHBhc3NlZCBmdW5jdGlvbiBnZXRfdmRldiB3aWxsIGJlIHVzZWQgdG8KLSAq IHNldCB0aGUgdmRldiB0aGUgZGlzayBzaG91bGQgYmUgYXR0YWNoZWQgdG8uIFdoZW4gaXQgaXMg c2V0IHRoZSBjYWxsZXIKLSAqIG11c3QgYWxzbyBwYXNzIGdldF92ZGV2X3VzZXIsIHdoaWNoIHdp bGwgYmUgcGFzc2VkIHRvIGdldF92ZGV2LgotICoKLSAqIFRoZSBwYXNzZWQgZ2V0X3ZkZXYgZnVu Y3Rpb24gaXMgYWxzbyBpbiBjaGFyZ2Ugb2YgcHJpbnRpbmcKLSAqIHRoZSBjb3JyZXNwb25kaW5n IGVycm9yIG1lc3NhZ2Ugd2hlbiBhcHByb3BpYXRlLgotICovCi1zdGF0aWMgdm9pZCBkZXZpY2Vf ZGlza19hZGQobGlieGxfX2VnYyAqZWdjLCB1aW50MzJfdCBkb21pZCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX2RldmljZV9kaXNrICpkaXNrLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfX2FvX2RldmljZSAqYW9kZXYsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICpnZXRfdmRldihsaWJ4bF9fZ2MgKiwgdm9pZCAqLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgeHNfdHJhbnNhY3Rpb25fdCksCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICB2b2lkICpnZXRfdmRldl91c2VyKQotewotICAgIFNUQVRFX0FPX0dD KGFvZGV2LT5hbyk7Ci0gICAgZmxleGFycmF5X3QgKmZyb250ID0gTlVMTDsKLSAgICBmbGV4YXJy YXlfdCAqYmFjayA9IE5VTEw7Ci0gICAgY2hhciAqZGV2ID0gTlVMTCwgKnNjcmlwdDsKLSAgICBs aWJ4bF9fZGV2aWNlICpkZXZpY2U7Ci0gICAgaW50IHJjOwotICAgIGxpYnhsX2N0eCAqY3R4ID0g Z2MtPm93bmVyOwotICAgIHhzX3RyYW5zYWN0aW9uX3QgdCA9IFhCVF9OVUxMOwotICAgIGxpYnhs X2RvbWFpbl9jb25maWcgZF9jb25maWc7Ci0gICAgbGlieGxfZGV2aWNlX2Rpc2sgZGlza19zYXZl ZDsKLSAgICBsaWJ4bF9fZG9tYWluX3VzZXJkYXRhX2xvY2sgKmxvY2sgPSBOVUxMOwotCi0gICAg bGlieGxfZG9tYWluX2NvbmZpZ19pbml0KCZkX2NvbmZpZyk7Ci0gICAgbGlieGxfZGV2aWNlX2Rp c2tfaW5pdCgmZGlza19zYXZlZCk7Ci0gICAgbGlieGxfZGV2aWNlX2Rpc2tfY29weShjdHgsICZk aXNrX3NhdmVkLCBkaXNrKTsKLQotICAgIGxpYnhsX2RvbWFpbl90eXBlIHR5cGUgPSBsaWJ4bF9f ZG9tYWluX3R5cGUoZ2MsIGRvbWlkKTsKLSAgICBpZiAodHlwZSA9PSBMSUJYTF9ET01BSU5fVFlQ RV9JTlZBTElEKSB7Ci0gICAgICAgIHJjID0gRVJST1JfRkFJTDsKLSAgICAgICAgZ290byBvdXQ7 Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBnZXRfdmRldiAhPSBOVUxMIC0+IGxvY2FsIGF0dGFj aAotICAgICAqIGdldF92ZGV2ID09IE5VTEwgLT4gYmxvY2sgYXR0YWNoCi0gICAgICoKLSAgICAg KiBXZSBkb24ndCBjYXJlIGFib3V0IGxvY2FsIGF0dGFjaCBzdGF0ZSBiZWNhdXNlIGl0J3Mgb25s eQotICAgICAqIGludGVybWVkaWF0ZSBzdGF0ZS4KLSAgICAgKi8KLSAgICBpZiAoIWdldF92ZGV2 ICYmIGFvZGV2LT51cGRhdGVfanNvbikgewotICAgICAgICBsb2NrID0gbGlieGxfX2xvY2tfZG9t YWluX3VzZXJkYXRhKGdjLCBkb21pZCk7Ci0gICAgICAgIGlmICghbG9jaykgewotICAgICAgICAg ICAgcmMgPSBFUlJPUl9MT0NLX0ZBSUw7Ci0gICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAg fQotCi0gICAgICAgIHJjID0gbGlieGxfX2dldF9kb21haW5fY29uZmlndXJhdGlvbihnYywgZG9t aWQsICZkX2NvbmZpZyk7Ci0gICAgICAgIGlmIChyYykgZ290byBvdXQ7Ci0KLSAgICAgICAgREVW SUNFX0FERChkaXNrLCBkaXNrcywgZG9taWQsICZkaXNrX3NhdmVkLCBDT01QQVJFX0RJU0ssICZk X2NvbmZpZyk7Ci0KLSAgICAgICAgcmMgPSBsaWJ4bF9fZG1fY2hlY2tfc3RhcnQoZ2MsICZkX2Nv bmZpZywgZG9taWQpOwotICAgICAgICBpZiAocmMpIGdvdG8gb3V0OwotICAgIH0KLQotICAgIGZv ciAoOzspIHsKLSAgICAgICAgcmMgPSBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fc3RhcnQoZ2MsICZ0 KTsKLSAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKLQotICAgICAgICBpZiAoZ2V0X3ZkZXYpIHsK LSAgICAgICAgICAgIGFzc2VydChnZXRfdmRldl91c2VyKTsKLSAgICAgICAgICAgIGRpc2stPnZk ZXYgPSBnZXRfdmRldihnYywgZ2V0X3ZkZXZfdXNlciwgdCk7Ci0gICAgICAgICAgICBpZiAoZGlz ay0+dmRldiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOwotICAg ICAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg ICAgcmMgPSBsaWJ4bF9fZGV2aWNlX2Rpc2tfc2V0ZGVmYXVsdChnYywgZGlzaywgZG9taWQpOwot ICAgICAgICBpZiAocmMpIGdvdG8gb3V0OwotCi0gICAgICAgIGZyb250ID0gZmxleGFycmF5X21h a2UoZ2MsIDE2LCAxKTsKLSAgICAgICAgYmFjayA9IGZsZXhhcnJheV9tYWtlKGdjLCAxNiwgMSk7 Ci0KLSAgICAgICAgR0NORVcoZGV2aWNlKTsKLSAgICAgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX2Zy b21fZGlzayhnYywgZG9taWQsIGRpc2ssIGRldmljZSk7Ci0gICAgICAgIGlmIChyYyAhPSAwKSB7 Ci0gICAgICAgICAgICBMT0dEKEVSUk9SLCBkb21pZCwgIkludmFsaWQgb3IgdW5zdXBwb3J0ZWQi IiB2aXJ0dWFsIGRpc2sgaWRlbnRpZmllciAlcyIsCi0gICAgICAgICAgICAgICAgIGRpc2stPnZk ZXYpOwotICAgICAgICAgICAgZ290byBvdXQ7Ci0gICAgICAgIH0KLQotICAgICAgICByYyA9IGxp YnhsX19kZXZpY2VfZXhpc3RzKGdjLCB0LCBkZXZpY2UpOwotICAgICAgICBpZiAocmMgPCAwKSBn b3RvIG91dDsKLSAgICAgICAgaWYgKHJjID09IDEpIHsgICAgICAgICAgICAgIC8qIGFscmVhZHkg ZXhpc3RzIGluIHhlbnN0b3JlICovCi0gICAgICAgICAgICBMT0dEKEVSUk9SLCBkb21pZCwgImRl dmljZSBhbHJlYWR5IGV4aXN0cyBpbiB4ZW5zdG9yZSIpOwotICAgICAgICAgICAgYW9kZXYtPmFj dGlvbiA9IExJQlhMX19ERVZJQ0VfQUNUSU9OX0FERDsgLyogZm9yIGVycm9yIG1lc3NhZ2UgKi8K LSAgICAgICAgICAgIHJjID0gRVJST1JfREVWSUNFX0VYSVNUUzsKLSAgICAgICAgICAgIGdvdG8g b3V0OwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChkaXNrLT5iYWNrZW5kKSB7Ci0gICAg ICAgICAgICBjYXNlIExJQlhMX0RJU0tfQkFDS0VORF9QSFk6Ci0gICAgICAgICAgICAgICAgZGV2 ID0gZGlzay0+cGRldl9wYXRoOwotCi0gICAgICAgIGRvX2JhY2tlbmRfcGh5OgotICAgICAgICAg ICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgInBhcmFtcyIpOwotICAgICAgICAgICAgICAg IGZsZXhhcnJheV9hcHBlbmQoYmFjaywgZGV2KTsKLQotICAgICAgICAgICAgICAgIHNjcmlwdCA9 IGxpYnhsX19hYnNfcGF0aChnYywgZGlzay0+c2NyaXB0PzogImJsb2NrIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX3hlbl9zY3JpcHRfZGlyX3BhdGgo KSk7Ci0gICAgICAgICAgICAgICAgZmxleGFycmF5X2FwcGVuZF9wYWlyKGJhY2ssICJzY3JpcHQi LCBzY3JpcHQpOwotCi0gICAgICAgICAgICAgICAgYXNzZXJ0KGRldmljZS0+YmFja2VuZF9raW5k ID09IExJQlhMX19ERVZJQ0VfS0lORF9WQkQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g ICAgICAgICAgICBjYXNlIExJQlhMX0RJU0tfQkFDS0VORF9UQVA6Ci0gICAgICAgICAgICAgICAg aWYgKGRldiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRldiA9IGxpYnhsX19ibGt0 YXBfZGV2cGF0aChnYywgZGlzay0+cGRldl9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGlzay0+Zm9ybWF0KTsKLSAgICAgICAgICAgICAgICAg ICAgaWYgKCFkZXYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExPR0QoRVJST1IsIGRvbWlk LCAiRmFpbGVkIHRvIGdldCBibGt0YXAgZGV2cGF0aCBmb3IgJXAiLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkaXNrLT5wZGV2X3BhdGgpOwotICAgICAgICAgICAgICAgICAgICAgICAg cmMgPSBFUlJPUl9GQUlMOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7Ci0gICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZmxl eGFycmF5X2FwcGVuZChiYWNrLCAidGFwZGlzay1wYXJhbXMiKTsKLSAgICAgICAgICAgICAgICBm bGV4YXJyYXlfYXBwZW5kKGJhY2ssIEdDU1BSSU5URigiJXM6JXMiLAotICAgICAgICAgICAgICAg ICAgICBsaWJ4bF9fZGV2aWNlX2Rpc2tfc3RyaW5nX29mX2Zvcm1hdChkaXNrLT5mb3JtYXQpLAot ICAgICAgICAgICAgICAgICAgICBkaXNrLT5wZGV2X3BhdGgpKTsKLQotICAgICAgICAgICAgICAg IC8qIHRhcCBiYWNrZW5kcyB3aXRoIHNjcmlwdHMgYXJlIHJlamVjdGVkIGJ5Ci0gICAgICAgICAg ICAgICAgICogbGlieGxfX2RldmljZV9kaXNrX3NldF9iYWNrZW5kICovCi0gICAgICAgICAgICAg ICAgYXNzZXJ0KCFkaXNrLT5zY3JpcHQpOwotCi0gICAgICAgICAgICAgICAgLyogbm93IGNyZWF0 ZSBhIHBoeSBkZXZpY2UgdG8gZXhwb3J0IHRoZSBkZXZpY2UgdG8gdGhlIGd1ZXN0ICovCi0gICAg ICAgICAgICAgICAgZ290byBkb19iYWNrZW5kX3BoeTsKLSAgICAgICAgICAgIGNhc2UgTElCWExf RElTS19CQUNLRU5EX1FESVNLOgotICAgICAgICAgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFj aywgInBhcmFtcyIpOwotICAgICAgICAgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgR0NT UFJJTlRGKCIlczolcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fZGV2 aWNlX2Rpc2tfc3RyaW5nX29mX2Zvcm1hdChkaXNrLT5mb3JtYXQpLCBkaXNrLT5wZGV2X3BhdGgp KTsKLSAgICAgICAgICAgICAgICBpZiAobGlieGxfZGVmYm9vbF92YWwoZGlzay0+Y29sb19lbmFi bGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgImNvbG8t aG9zdCIpOwotICAgICAgICAgICAgICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssIGxpYnhs X19zcHJpbnRmKGdjLCAiJXMiLCBkaXNrLT5jb2xvX2hvc3QpKTsKLSAgICAgICAgICAgICAgICAg ICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCAiY29sby1wb3J0Iik7Ci0gICAgICAgICAgICAgICAg ICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgbGlieGxfX3NwcmludGYoZ2MsICIlZCIsIGRpc2st PmNvbG9fcG9ydCkpOwotICAgICAgICAgICAgICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ss ICJjb2xvLWV4cG9ydCIpOwotICAgICAgICAgICAgICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJh Y2ssIGxpYnhsX19zcHJpbnRmKGdjLCAiJXMiLCBkaXNrLT5jb2xvX2V4cG9ydCkpOwotICAgICAg ICAgICAgICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssICJhY3RpdmUtZGlzayIpOwotICAg ICAgICAgICAgICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssIGxpYnhsX19zcHJpbnRmKGdj LCAiJXMiLCBkaXNrLT5hY3RpdmVfZGlzaykpOwotICAgICAgICAgICAgICAgICAgICBmbGV4YXJy YXlfYXBwZW5kKGJhY2ssICJoaWRkZW4tZGlzayIpOwotICAgICAgICAgICAgICAgICAgICBmbGV4 YXJyYXlfYXBwZW5kKGJhY2ssIGxpYnhsX19zcHJpbnRmKGdjLCAiJXMiLCBkaXNrLT5oaWRkZW5f ZGlzaykpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhc3NlcnQoZGV2aWNl LT5iYWNrZW5kX2tpbmQgPT0gTElCWExfX0RFVklDRV9LSU5EX1FESVNLKTsKLSAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgTE9HRChF UlJPUiwgZG9taWQsICJVbnJlY29nbml6ZWQgZGlzayBiYWNrZW5kIHR5cGU6ICVkIiwKLSAgICAg ICAgICAgICAgICAgICAgIGRpc2stPmJhY2tlbmQpOwotICAgICAgICAgICAgICAgIHJjID0gRVJS T1JfSU5WQUw7Ci0gICAgICAgICAgICAgICAgZ290byBvdXQ7Ci0gICAgICAgIH0KLQotICAgICAg ICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssICJmcm9udGVuZC1pZCIpOwotICAgICAgICBmbGV4YXJy YXlfYXBwZW5kKGJhY2ssIEdDU1BSSU5URigiJWQiLCBkb21pZCkpOwotICAgICAgICBmbGV4YXJy YXlfYXBwZW5kKGJhY2ssICJvbmxpbmUiKTsKLSAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNr LCAiMSIpOwotICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssICJyZW1vdmFibGUiKTsKLSAg ICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCBHQ1NQUklOVEYoIiVkIiwgKGRpc2stPnJlbW92 YWJsZSkgPyAxIDogMCkpOwotICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssICJib290YWJs ZSIpOwotICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssIEdDU1BSSU5URigiJWQiLCAxKSk7 Ci0gICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgInN0YXRlIik7Ci0gICAgICAgIGZsZXhh cnJheV9hcHBlbmQoYmFjaywgR0NTUFJJTlRGKCIlZCIsIFhlbmJ1c1N0YXRlSW5pdGlhbGlzaW5n KSk7Ci0gICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgImRldiIpOwotICAgICAgICBmbGV4 YXJyYXlfYXBwZW5kKGJhY2ssIGRpc2stPnZkZXYpOwotICAgICAgICBmbGV4YXJyYXlfYXBwZW5k KGJhY2ssICJ0eXBlIik7Ci0gICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgbGlieGxfX2Rl dmljZV9kaXNrX3N0cmluZ19vZl9iYWNrZW5kKGRpc2stPmJhY2tlbmQpKTsKLSAgICAgICAgZmxl eGFycmF5X2FwcGVuZChiYWNrLCAibW9kZSIpOwotICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJh Y2ssIGRpc2stPnJlYWR3cml0ZSA/ICJ3IiA6ICJyIik7Ci0gICAgICAgIGZsZXhhcnJheV9hcHBl bmQoYmFjaywgImRldmljZS10eXBlIik7Ci0gICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywg ZGlzay0+aXNfY2Ryb20gPyAiY2Ryb20iIDogImRpc2siKTsKLSAgICAgICAgaWYgKGRpc2stPmRp cmVjdF9pb19zYWZlKSB7Ci0gICAgICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssICJkaXJl Y3QtaW8tc2FmZSIpOwotICAgICAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCAiMSIpOwot ICAgICAgICB9Ci0gICAgICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihiYWNrLCAiZGlzY2FyZC1l bmFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGVmYm9vbF92YWwo ZGlzay0+ZGlzY2FyZF9lbmFibGUpID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIx IiA6ICIwIik7Ci0KLSAgICAgICAgZmxleGFycmF5X2FwcGVuZChmcm9udCwgImJhY2tlbmQtaWQi KTsKLSAgICAgICAgZmxleGFycmF5X2FwcGVuZChmcm9udCwgR0NTUFJJTlRGKCIlZCIsIGRpc2st PmJhY2tlbmRfZG9taWQpKTsKLSAgICAgICAgZmxleGFycmF5X2FwcGVuZChmcm9udCwgInN0YXRl Iik7Ci0gICAgICAgIGZsZXhhcnJheV9hcHBlbmQoZnJvbnQsIEdDU1BSSU5URigiJWQiLCBYZW5i dXNTdGF0ZUluaXRpYWxpc2luZykpOwotICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGZyb250LCAi dmlydHVhbC1kZXZpY2UiKTsKLSAgICAgICAgZmxleGFycmF5X2FwcGVuZChmcm9udCwgR0NTUFJJ TlRGKCIlZCIsIGRldmljZS0+ZGV2aWQpKTsKLSAgICAgICAgZmxleGFycmF5X2FwcGVuZChmcm9u dCwgImRldmljZS10eXBlIik7Ci0gICAgICAgIGZsZXhhcnJheV9hcHBlbmQoZnJvbnQsIGRpc2st PmlzX2Nkcm9tID8gImNkcm9tIiA6ICJkaXNrIik7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICog T2xkIFBWIGtlcm5lbCBkaXNrIGZyb250ZW5kcyBiZWZvcmUgMi42LjI2IHJlbHkgb24gdG9vbCBz dGFjayB0bwotICAgICAgICAgKiB3cml0ZSBkaXNrIG5hdGl2ZSBwcm90b2NvbCB0byBmcm9udGVu ZCBub2RlLiBYZW5kIGRvZXMgdGhpcywgcG9ydAotICAgICAgICAgKiB0aGlzIGJlaGF2aW91ciB0 byB4bC4KLSAgICAgICAgICoKLSAgICAgICAgICogTmV3IGtlcm5lbHMgd3JpdGUgdGhpcyBub2Rl IHRoZW1zZWx2ZXMuIEluIHRoYXQgY2FzZSBpdCBqdXN0Ci0gICAgICAgICAqIG92ZXJ3cml0ZXMg YW4gZXhpc3Rpbmcgbm9kZSB3aGljaCBpcyBPSy4KLSAgICAgICAgICovCi0gICAgICAgIGlmICh0 eXBlID09IExJQlhMX0RPTUFJTl9UWVBFX1BWKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyICpw cm90b2NvbCA9Ci0gICAgICAgICAgICAgICAgeGNfZG9tYWluX2dldF9uYXRpdmVfcHJvdG9jb2wo Y3R4LT54Y2gsIGRvbWlkKTsKLSAgICAgICAgICAgIGlmIChwcm90b2NvbCkgewotICAgICAgICAg ICAgICAgIGZsZXhhcnJheV9hcHBlbmQoZnJvbnQsICJwcm90b2NvbCIpOwotICAgICAgICAgICAg ICAgIGZsZXhhcnJheV9hcHBlbmQoZnJvbnQsIGxpYnhsX19zdHJkdXAoZ2MsIHByb3RvY29sKSk7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWdldF92ZGV2ICYmIGFv ZGV2LT51cGRhdGVfanNvbikgewotICAgICAgICAgICAgcmMgPSBsaWJ4bF9fc2V0X2RvbWFpbl9j b25maWd1cmF0aW9uKGdjLCBkb21pZCwgJmRfY29uZmlnKTsKLSAgICAgICAgICAgIGlmIChyYykg Z290byBvdXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBsaWJ4bF9fZGV2aWNlX2dlbmVyaWNfYWRk KGdjLCB0LCBkZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxf X3hzX2t2c19vZl9mbGV4YXJyYXkoZ2MsIGJhY2spLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpYnhsX194c19rdnNfb2ZfZmxleGFycmF5KGdjLCBmcm9udCksCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICAgICAgcmMgPSBsaWJ4bF9f eHNfdHJhbnNhY3Rpb25fY29tbWl0KGdjLCAmdCk7Ci0gICAgICAgIGlmICghcmMpIGJyZWFrOwot ICAgICAgICBpZiAocmMgPCAwKSBnb3RvIG91dDsKLSAgICB9Ci0KLSAgICBhb2Rldi0+ZGV2ID0g ZGV2aWNlOwotICAgIGFvZGV2LT5hY3Rpb24gPSBMSUJYTF9fREVWSUNFX0FDVElPTl9BREQ7Ci0g ICAgbGlieGxfX3dhaXRfZGV2aWNlX2Nvbm5lY3Rpb24oZWdjLCBhb2Rldik7Ci0KLSAgICByYyA9 IDA7Ci0KLW91dDoKLSAgICBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fYWJvcnQoZ2MsICZ0KTsKLSAg ICBpZiAobG9jaykgbGlieGxfX3VubG9ja19kb21haW5fdXNlcmRhdGEobG9jayk7Ci0gICAgbGli eGxfZGV2aWNlX2Rpc2tfZGlzcG9zZSgmZGlza19zYXZlZCk7Ci0gICAgbGlieGxfZG9tYWluX2Nv bmZpZ19kaXNwb3NlKCZkX2NvbmZpZyk7Ci0gICAgYW9kZXYtPnJjID0gcmM7Ci0gICAgaWYgKHJj KSBhb2Rldi0+Y2FsbGJhY2soZWdjLCBhb2Rldik7Ci0gICAgcmV0dXJuOwotfQotCi1zdGF0aWMg dm9pZCBsaWJ4bF9fZGV2aWNlX2Rpc2tfYWRkKGxpYnhsX19lZ2MgKmVnYywgdWludDMyX3QgZG9t aWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV9kaXNr ICpkaXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fYW9fZGV2 aWNlICphb2RldikKLXsKLSAgICBkZXZpY2VfZGlza19hZGQoZWdjLCBkb21pZCwgZGlzaywgYW9k ZXYsIE5VTEwsIE5VTEwpOwotfQotCi1zdGF0aWMgaW50IGxpYnhsX19kZXZpY2VfZGlza19mcm9t X3hlbnN0b3JlKGxpYnhsX19nYyAqZ2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKmxpYnhsX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV9kaXNrICpkaXNrKQotewotICAgIGxpYnhs X2N0eCAqY3R4ID0gbGlieGxfX2djX293bmVyKGdjKTsKLSAgICB1bnNpZ25lZCBpbnQgbGVuOwot ICAgIGNoYXIgKnRtcDsKLSAgICBpbnQgcmM7Ci0KLSAgICBsaWJ4bF9kZXZpY2VfZGlza19pbml0 KGRpc2spOwotCi0gICAgY29uc3QgY2hhciAqYmFja2VuZF9wYXRoOwotICAgIHJjID0gbGlieGxf X3hzX3JlYWRfY2hlY2tlZChnYywgWEJUX05VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdDU1BSSU5URigiJXMvYmFja2VuZCIsIGxpYnhsX3BhdGgpLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmYmFja2VuZF9wYXRoKTsKLSAgICBpZiAocmMpIGdvdG8gb3V0 OwotCi0gICAgaWYgKCFiYWNrZW5kX3BhdGgpIHsKLSAgICAgICAgTE9HKEVSUk9SLCAiZGlzayAl cyBkb2VzIG5vdCBleGlzdCAobm8gYmFja2VuZCBwYXRoIiwgbGlieGxfcGF0aCk7Ci0gICAgICAg IHJjID0gRVJST1JfRkFJTDsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAgfQotCi0gICAgcmMgPSBs aWJ4bF9fYmFja2VuZHBhdGhfcGFyc2VfZG9taWQoZ2MsIGJhY2tlbmRfcGF0aCwgJmRpc2stPmJh Y2tlbmRfZG9taWQpOwotICAgIGlmIChyYykgewotICAgICAgICBMT0coRVJST1IsICJVbmFibGUg dG8gZmV0Y2ggZGV2aWNlIGJhY2tlbmQgZG9taWQgZnJvbSAlcyIsIGJhY2tlbmRfcGF0aCk7Ci0g ICAgICAgIGdvdG8gb3V0OwotICAgIH0KLQotICAgIC8qCi0gICAgICogInBhcmFtcyIgbWF5IG5v dCBiZSBwcmVzZW50OyBidXQgZXZlcnl0aGluZyBlbHNlIG11c3QgYmUuCi0gICAgICogY29sbyBy ZWxlYXRlZCBlbnRyaWVzKGNvbG8taG9zdCwgY29sby1wb3J0LCBjb2xvLWV4cG9ydCwKLSAgICAg KiBhY3RpdmUtZGlzayBhbmQgaGlkZGVuLWRpc2spIGFyZSBwcmVzZW50IG9ubHkgaWYgY29sbyBp cwotICAgICAqIGVuYWJsZWQuCi0gICAgICovCi0gICAgdG1wID0geHNfcmVhZChjdHgtPnhzaCwg WEJUX05VTEwsCi0gICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL3BhcmFtcyIsIGxpYnhs X3BhdGgpLCAmbGVuKTsKLSAgICBpZiAodG1wICYmIHN0cmNocih0bXAsICc6JykpIHsKLSAgICAg ICAgZGlzay0+cGRldl9wYXRoID0gc3RyZHVwKHN0cmNocih0bXAsICc6JykgKyAxKTsKLSAgICAg ICAgZnJlZSh0bXApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRpc2stPnBkZXZfcGF0aCA9IHRt cDsKLSAgICB9Ci0KLSAgICB0bXAgPSB4c19yZWFkKGN0eC0+eHNoLCBYQlRfTlVMTCwKLSAgICAg ICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvY29sby1ob3N0IiwgbGlieGxfcGF0aCksICZsZW4p OwotICAgIGlmICh0bXApIHsKLSAgICAgICAgbGlieGxfZGVmYm9vbF9zZXQoJmRpc2stPmNvbG9f ZW5hYmxlLCB0cnVlKTsKLSAgICAgICAgZGlzay0+Y29sb19ob3N0ID0gdG1wOwotCi0gICAgICAg IHRtcCA9IHhzX3JlYWQoY3R4LT54c2gsIFhCVF9OVUxMLAotICAgICAgICAgICAgICAgICAgICAg IEdDU1BSSU5URigiJXMvY29sby1wb3J0IiwgbGlieGxfcGF0aCksICZsZW4pOwotICAgICAgICBp ZiAoIXRtcCkgewotICAgICAgICAgICAgTE9HKEVSUk9SLCAiTWlzc2luZyB4ZW5zdG9yZSBub2Rl ICVzL2NvbG8tcG9ydCIsIGxpYnhsX3BhdGgpOwotICAgICAgICAgICAgZ290byBjbGVhbnVwOwot ICAgICAgICB9Ci0gICAgICAgIGRpc2stPmNvbG9fcG9ydCA9IGF0b2kodG1wKTsKLQotI2RlZmlu ZSBYU19SRUFEX0NPTE8ocGFyYW0sIGl0ZW0pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotICAgICAgICB0bXAgPSB4c19yZWFkKGN0eC0+eHNoLCBYQlRfTlVMTCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgIEdDU1BS SU5URigiJXMvIiNwYXJhbSIiLCBsaWJ4bF9wYXRoKSwgJmxlbik7ICAgICAgICAgXAotICAgICAg ICBpZiAoIXRtcCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotICAgICAgICAgICAgTE9HKEVSUk9SLCAiTWlzc2luZyB4ZW5zdG9yZSBub2Rl ICVzLyIjcGFyYW0iIiwgbGlieGxfcGF0aCk7ICAgXAotICAgICAgICAgICAgZ290byBjbGVhbnVw OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotICAgICAgICBkaXNrLT5pdGVtID0gdG1wOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSB3aGlsZSAoMCkKLSAgICAgICAgWFNfUkVB RF9DT0xPKGNvbG8tZXhwb3J0LCBjb2xvX2V4cG9ydCk7Ci0gICAgICAgIFhTX1JFQURfQ09MTyhh Y3RpdmUtZGlzaywgYWN0aXZlX2Rpc2spOwotICAgICAgICBYU19SRUFEX0NPTE8oaGlkZGVuLWRp c2ssIGhpZGRlbl9kaXNrKTsKLSN1bmRlZiBYU19SRUFEX0NPTE8KLSAgICB9IGVsc2UgewotICAg ICAgICBsaWJ4bF9kZWZib29sX3NldCgmZGlzay0+Y29sb19lbmFibGUsIGZhbHNlKTsKLSAgICB9 Ci0KLSAgICB0bXAgPSBsaWJ4bF9feHNfcmVhZChnYywgWEJUX05VTEwsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy90eXBlIiwgbGlieGxfcGF0aCkpOwotICAgIGlmICgh dG1wKSB7Ci0gICAgICAgIExPRyhFUlJPUiwgIk1pc3NpbmcgeGVuc3RvcmUgbm9kZSAlcy90eXBl IiwgbGlieGxfcGF0aCk7Ci0gICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0gICAgbGlieGxf c3RyaW5nX3RvX2JhY2tlbmQoY3R4LCB0bXAsICYoZGlzay0+YmFja2VuZCkpOwotCi0gICAgZGlz ay0+dmRldiA9IHhzX3JlYWQoY3R4LT54c2gsIFhCVF9OVUxMLAotICAgICAgICAgICAgICAgICAg ICAgICAgIEdDU1BSSU5URigiJXMvZGV2IiwgbGlieGxfcGF0aCksICZsZW4pOwotICAgIGlmICgh ZGlzay0+dmRldikgewotICAgICAgICBMT0coRVJST1IsICJNaXNzaW5nIHhlbnN0b3JlIG5vZGUg JXMvZGV2IiwgbGlieGxfcGF0aCk7Ci0gICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0KLSAg ICB0bXAgPSBsaWJ4bF9feHNfcmVhZChnYywgWEJUX05VTEwsIGxpYnhsX19zcHJpbnRmCi0gICAg ICAgICAgICAgICAgICAgICAgICAgKGdjLCAiJXMvcmVtb3ZhYmxlIiwgbGlieGxfcGF0aCkpOwot ICAgIGlmICghdG1wKSB7Ci0gICAgICAgIExPRyhFUlJPUiwgIk1pc3NpbmcgeGVuc3RvcmUgbm9k ZSAlcy9yZW1vdmFibGUiLCBsaWJ4bF9wYXRoKTsKLSAgICAgICAgZ290byBjbGVhbnVwOwotICAg IH0KLSAgICBkaXNrLT5yZW1vdmFibGUgPSBhdG9pKHRtcCk7Ci0KLSAgICB0bXAgPSBsaWJ4bF9f eHNfcmVhZChnYywgWEJUX05VTEwsIEdDU1BSSU5URigiJXMvbW9kZSIsIGxpYnhsX3BhdGgpKTsK LSAgICBpZiAoIXRtcCkgewotICAgICAgICBMT0coRVJST1IsICJNaXNzaW5nIHhlbnN0b3JlIG5v ZGUgJXMvbW9kZSIsIGxpYnhsX3BhdGgpOwotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQot ICAgIGlmICghc3RyY21wKHRtcCwgInciKSkKLSAgICAgICAgZGlzay0+cmVhZHdyaXRlID0gMTsK LSAgICBlbHNlCi0gICAgICAgIGRpc2stPnJlYWR3cml0ZSA9IDA7Ci0KLSAgICB0bXAgPSBsaWJ4 bF9feHNfcmVhZChnYywgWEJUX05VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJ TlRGKCIlcy9kZXZpY2UtdHlwZSIsIGxpYnhsX3BhdGgpKTsKLSAgICBpZiAoIXRtcCkgewotICAg ICAgICBMT0coRVJST1IsICJNaXNzaW5nIHhlbnN0b3JlIG5vZGUgJXMvZGV2aWNlLXR5cGUiLCBs aWJ4bF9wYXRoKTsKLSAgICAgICAgZ290byBjbGVhbnVwOwotICAgIH0KLSAgICBkaXNrLT5pc19j ZHJvbSA9ICFzdHJjbXAodG1wLCAiY2Ryb20iKTsKLQotICAgIGRpc2stPmZvcm1hdCA9IExJQlhM X0RJU0tfRk9STUFUX1VOS05PV047Ci0KLSAgICByZXR1cm4gMDsKLWNsZWFudXA6Ci0gICAgcmMg PSBFUlJPUl9GQUlMOwotIG91dDoKLSAgICBsaWJ4bF9kZXZpY2VfZGlza19kaXNwb3NlKGRpc2sp OwotICAgIHJldHVybiByYzsKLX0KLQotaW50IGxpYnhsX3ZkZXZfdG9fZGV2aWNlX2Rpc2sobGli eGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqdmRldiwgbGlieGxfZGV2aWNlX2Rpc2sgKmRpc2spCi17Ci0gICAgR0Nf SU5JVChjdHgpOwotICAgIGNoYXIgKmRvbV94bF9wYXRoLCAqbGlieGxfcGF0aDsKLSAgICBpbnQg ZGV2aWQgPSBsaWJ4bF9fZGV2aWNlX2Rpc2tfZGV2X251bWJlcih2ZGV2LCBOVUxMLCBOVUxMKTsK LSAgICBpbnQgcmMgPSBFUlJPUl9GQUlMOwotCi0gICAgaWYgKGRldmlkIDwgMCkKLSAgICAgICAg cmV0dXJuIEVSUk9SX0lOVkFMOwotCi0gICAgbGlieGxfZGV2aWNlX2Rpc2tfaW5pdChkaXNrKTsK LQotICAgIGRvbV94bF9wYXRoID0gbGlieGxfX3hzX2xpYnhsX3BhdGgoZ2MsIGRvbWlkKTsKLSAg ICBpZiAoIWRvbV94bF9wYXRoKSB7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLSAgICBsaWJ4 bF9wYXRoID0gR0NTUFJJTlRGKCIlcy9kZXZpY2UvdmJkLyVkIiwgZG9tX3hsX3BhdGgsIGRldmlk KTsKLQotICAgIHJjID0gbGlieGxfX2RldmljZV9kaXNrX2Zyb21feGVuc3RvcmUoZ2MsIGxpYnhs X3BhdGgsIGRpc2spOwotb3V0OgotICAgIEdDX0ZSRUU7Ci0gICAgcmV0dXJuIHJjOwotfQotCi0K LXN0YXRpYyBpbnQgbGlieGxfX2FwcGVuZF9kaXNrX2xpc3QobGlieGxfX2djICpnYywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkb21pZCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfZGlz ayAqKmRpc2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCAqbmRpc2tzKQotewotICAgIGNoYXIgKmxpYnhsX2Rpcl9wYXRoID0gTlVMTDsKLSAgICBjaGFy ICoqZGlyID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgbiA9IDA7Ci0gICAgbGlieGxfZGV2aWNl X2Rpc2sgKnBkaXNrID0gTlVMTCwgKnBkaXNrX2VuZCA9IE5VTEw7Ci0gICAgaW50IHJjPTA7Ci0g ICAgaW50IGluaXRpYWxfZGlza3MgPSAqbmRpc2tzOwotCi0gICAgbGlieGxfZGlyX3BhdGggPSBH Q1NQUklOVEYoIiVzL2RldmljZS92YmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxf X3hzX2xpYnhsX3BhdGgoZ2MsIGRvbWlkKSk7Ci0gICAgZGlyID0gbGlieGxfX3hzX2RpcmVjdG9y eShnYywgWEJUX05VTEwsIGxpYnhsX2Rpcl9wYXRoLCAmbik7Ci0gICAgaWYgKGRpciAmJiBuKSB7 Ci0gICAgICAgIGxpYnhsX2RldmljZV9kaXNrICp0bXA7Ci0gICAgICAgIHRtcCA9IHJlYWxsb2Mo KmRpc2tzLCBzaXplb2YgKGxpYnhsX2RldmljZV9kaXNrKSAqICgqbmRpc2tzICsgbikpOwotICAg ICAgICBpZiAodG1wID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gRVJST1JfTk9NRU07Ci0g ICAgICAgICpkaXNrcyA9IHRtcDsKLSAgICAgICAgcGRpc2sgPSAqZGlza3MgKyBpbml0aWFsX2Rp c2tzOwotICAgICAgICBwZGlza19lbmQgPSAqZGlza3MgKyBpbml0aWFsX2Rpc2tzICsgbjsKLSAg ICAgICAgZm9yICg7IHBkaXNrIDwgcGRpc2tfZW5kOyBwZGlzaysrLCBkaXIrKykgewotICAgICAg ICAgICAgY29uc3QgY2hhciAqcDsKLSAgICAgICAgICAgIHAgPSBHQ1NQUklOVEYoIiVzLyVzIiwg bGlieGxfZGlyX3BhdGgsICpkaXIpOwotICAgICAgICAgICAgaWYgKChyYz1saWJ4bF9fZGV2aWNl X2Rpc2tfZnJvbV94ZW5zdG9yZShnYywgcCwgcGRpc2spKSkKLSAgICAgICAgICAgICAgICBnb3Rv IG91dDsKLSAgICAgICAgICAgICpuZGlza3MgKz0gMTsKLSAgICAgICAgfQotICAgIH0KLW91dDoK LSAgICByZXR1cm4gcmM7Ci19Ci0KLWxpYnhsX2RldmljZV9kaXNrICpsaWJ4bF9kZXZpY2VfZGlz a19saXN0KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwgaW50ICpudW0pCi17Ci0gICAg R0NfSU5JVChjdHgpOwotICAgIGxpYnhsX2RldmljZV9kaXNrICpkaXNrcyA9IE5VTEw7Ci0gICAg aW50IHJjOwotCi0gICAgKm51bSA9IDA7Ci0KLSAgICByYyA9IGxpYnhsX19hcHBlbmRfZGlza19s aXN0KGdjLCBkb21pZCwgJmRpc2tzLCBudW0pOwotICAgIGlmIChyYykgZ290byBvdXRfZXJyOwot Ci0gICAgR0NfRlJFRTsKLSAgICByZXR1cm4gZGlza3M7Ci0KLW91dF9lcnI6Ci0gICAgTE9HKEVS Uk9SLCAiVW5hYmxlIHRvIGxpc3QgZGlza3MiKTsKLSAgICB3aGlsZSAoZGlza3MgJiYgKm51bSkg ewotICAgICAgICAoKm51bSktLTsKLSAgICAgICAgbGlieGxfZGV2aWNlX2Rpc2tfZGlzcG9zZSgm ZGlza3NbKm51bV0pOwotICAgIH0KLSAgICBmcmVlKGRpc2tzKTsKLSAgICByZXR1cm4gTlVMTDsK LX0KLQotaW50IGxpYnhsX2RldmljZV9kaXNrX2dldGluZm8obGlieGxfY3R4ICpjdHgsIHVpbnQz Ml90IGRvbWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX2Rp c2sgKmRpc2ssIGxpYnhsX2Rpc2tpbmZvICpkaXNraW5mbykKLXsKLSAgICBHQ19JTklUKGN0eCk7 Ci0gICAgY2hhciAqZG9tcGF0aCwgKmZlX3BhdGgsICpsaWJ4bF9wYXRoOwotICAgIGNoYXIgKnZh bDsKLSAgICBpbnQgcmM7Ci0KLSAgICBkaXNraW5mby0+YmFja2VuZCA9IE5VTEw7Ci0KLSAgICBk b21wYXRoID0gbGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCBkb21pZCk7Ci0gICAgZGlza2luZm8t PmRldmlkID0gbGlieGxfX2RldmljZV9kaXNrX2Rldl9udW1iZXIoZGlzay0+dmRldiwgTlVMTCwg TlVMTCk7Ci0KLSAgICAvKiB0YXAgZGV2aWNlcyBlbnRyaWVzIGluIHhlbnN0b3JlIGFyZSB3cml0 dGVuIGFzIHZiZCBkZXZpY2VzLiAqLwotICAgIGZlX3BhdGggPSBHQ1NQUklOVEYoIiVzL2Rldmlj ZS92YmQvJWQiLCBkb21wYXRoLCBkaXNraW5mby0+ZGV2aWQpOwotICAgIGxpYnhsX3BhdGggPSBH Q1NQUklOVEYoIiVzL2RldmljZS92YmQvJWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfX3hzX2xpYnhsX3BhdGgoZ2MsIGRvbWlkKSwgZGlza2luZm8tPmRldmlkKTsKLSAgICBk aXNraW5mby0+YmFja2VuZCA9IHhzX3JlYWQoY3R4LT54c2gsIFhCVF9OVUxMLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL2JhY2tlbmQiLCBsaWJ4bF9wYXRo KSwgTlVMTCk7Ci0gICAgaWYgKCFkaXNraW5mby0+YmFja2VuZCkgewotICAgICAgICBHQ19GUkVF OwotICAgICAgICByZXR1cm4gRVJST1JfRkFJTDsKLSAgICB9Ci0gICAgcmMgPSBsaWJ4bF9fYmFj a2VuZHBhdGhfcGFyc2VfZG9taWQoZ2MsIGRpc2tpbmZvLT5iYWNrZW5kLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkaXNraW5mby0+YmFja2VuZF9pZCk7Ci0gICAg aWYgKHJjKSBnb3RvIG91dDsKLQotICAgIHZhbCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVM TCwgR0NTUFJJTlRGKCIlcy9zdGF0ZSIsIGZlX3BhdGgpKTsKLSAgICBkaXNraW5mby0+c3RhdGUg PSB2YWwgPyBzdHJ0b3VsKHZhbCwgTlVMTCwgMTApIDogLTE7Ci0gICAgdmFsID0gbGlieGxfX3hz X3JlYWQoZ2MsIFhCVF9OVUxMLCBHQ1NQUklOVEYoIiVzL2V2ZW50LWNoYW5uZWwiLCBmZV9wYXRo KSk7Ci0gICAgZGlza2luZm8tPmV2dGNoID0gdmFsID8gc3RydG91bCh2YWwsIE5VTEwsIDEwKSA6 IC0xOwotICAgIHZhbCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwgR0NTUFJJTlRGKCIl cy9yaW5nLXJlZiIsIGZlX3BhdGgpKTsKLSAgICBkaXNraW5mby0+cnJlZiA9IHZhbCA/IHN0cnRv dWwodmFsLCBOVUxMLCAxMCkgOiAtMTsKLSAgICBkaXNraW5mby0+ZnJvbnRlbmQgPSB4c19yZWFk KGN0eC0+eHNoLCBYQlRfTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD U1BSSU5URigiJXMvZnJvbnRlbmQiLCBsaWJ4bF9wYXRoKSwgTlVMTCk7Ci0gICAgZGlza2luZm8t PmZyb250ZW5kX2lkID0gZG9taWQ7Ci0KLSAgICBHQ19GUkVFOwotICAgIHJldHVybiAwOwotCi0g b3V0OgotICAgIGZyZWUoZGlza2luZm8tPmJhY2tlbmQpOwotICAgIHJldHVybiByYzsKLX0KLQot aW50IGxpYnhsX2Nkcm9tX2luc2VydChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsIGxp YnhsX2RldmljZV9kaXNrICpkaXNrLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4 bF9hc3luY29wX2hvdyAqYW9faG93KQotewotICAgIEFPX0NSRUFURShjdHgsIGRvbWlkLCBhb19o b3cpOwotICAgIGludCBudW0gPSAwLCBpOwotICAgIGxpYnhsX2RldmljZV9kaXNrICpkaXNrcyA9 IE5VTEwsIGRpc2tfc2F2ZWQsIGRpc2tfZW1wdHk7Ci0gICAgbGlieGxfZG9tYWluX2NvbmZpZyBk X2NvbmZpZzsKLSAgICBpbnQgcmMsIGRtX3ZlcjsKLSAgICBsaWJ4bF9fZGV2aWNlIGRldmljZTsK LSAgICBjb25zdCBjaGFyICpiZV9wYXRoLCAqbGlieGxfcGF0aDsKLSAgICBjaGFyICogdG1wOwot ICAgIGxpYnhsX19kb21haW5fdXNlcmRhdGFfbG9jayAqbG9jayA9IE5VTEw7Ci0gICAgeHNfdHJh bnNhY3Rpb25fdCB0ID0gWEJUX05VTEw7Ci0gICAgZmxleGFycmF5X3QgKmluc2VydCA9IE5VTEws ICplbXB0eSA9IE5VTEw7Ci0KLSAgICBsaWJ4bF9kb21haW5fY29uZmlnX2luaXQoJmRfY29uZmln KTsKLSAgICBsaWJ4bF9kZXZpY2VfZGlza19pbml0KCZkaXNrX2VtcHR5KTsKLSAgICBsaWJ4bF9k ZXZpY2VfZGlza19pbml0KCZkaXNrX3NhdmVkKTsKLSAgICBsaWJ4bF9kZXZpY2VfZGlza19jb3B5 KGN0eCwgJmRpc2tfc2F2ZWQsIGRpc2spOwotCi0gICAgZGlza19lbXB0eS5mb3JtYXQgPSBMSUJY TF9ESVNLX0ZPUk1BVF9FTVBUWTsKLSAgICBkaXNrX2VtcHR5LnZkZXYgPSBsaWJ4bF9fc3RyZHVw KE5PR0MsIGRpc2stPnZkZXYpOwotICAgIGRpc2tfZW1wdHkucGRldl9wYXRoID0gbGlieGxfX3N0 cmR1cChOT0dDLCAiIik7Ci0gICAgZGlza19lbXB0eS5pc19jZHJvbSA9IDE7Ci0gICAgbGlieGxf X2RldmljZV9kaXNrX3NldGRlZmF1bHQoZ2MsICZkaXNrX2VtcHR5LCBkb21pZCk7Ci0KLSAgICBs aWJ4bF9kb21haW5fdHlwZSB0eXBlID0gbGlieGxfX2RvbWFpbl90eXBlKGdjLCBkb21pZCk7Ci0g ICAgaWYgKHR5cGUgPT0gTElCWExfRE9NQUlOX1RZUEVfSU5WQUxJRCkgewotICAgICAgICByYyA9 IEVSUk9SX0ZBSUw7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLSAgICBpZiAodHlwZSAhPSBM SUJYTF9ET01BSU5fVFlQRV9IVk0pIHsKLSAgICAgICAgTE9HRChFUlJPUiwgZG9taWQsICJjZHJv bS1pbnNlcnQgcmVxdWlyZXMgYW4gSFZNIGRvbWFpbiIpOwotICAgICAgICByYyA9IEVSUk9SX0lO VkFMOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0KLSAgICBpZiAobGlieGxfZ2V0X3N0dWJk b21faWQoY3R4LCBkb21pZCkgIT0gMCkgewotICAgICAgICBMT0dEKEVSUk9SLCBkb21pZCwgImNk cm9tLWluc2VydCBkb2Vzbid0IHdvcmsgZm9yIHN0dWIgZG9tYWlucyIpOwotICAgICAgICByYyA9 IEVSUk9SX0lOVkFMOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0KLSAgICBkbV92ZXIgPSBs aWJ4bF9fZGV2aWNlX21vZGVsX3ZlcnNpb25fcnVubmluZyhnYywgZG9taWQpOwotICAgIGlmIChk bV92ZXIgPT0gLTEpIHsKLSAgICAgICAgTE9HRChFUlJPUiwgZG9taWQsICJDYW5ub3QgZGV0ZXJt aW5lIGRldmljZSBtb2RlbCB2ZXJzaW9uIik7Ci0gICAgICAgIHJjID0gRVJST1JfRkFJTDsKLSAg ICAgICAgZ290byBvdXQ7Ci0gICAgfQotCi0gICAgaWYgKGRtX3ZlciA9PSBMSUJYTF9ERVZJQ0Vf TU9ERUxfVkVSU0lPTl9OT05FKSB7Ci0gICAgICAgIExPR0QoRVJST1IsIGRvbWlkLCAiR3Vlc3Rz IHdpdGhvdXQgYSBkZXZpY2UgbW9kZWwgY2Fubm90IHVzZSBjZC1pbnNlcnQiKTsKLSAgICAgICAg cmMgPSBFUlJPUl9GQUlMOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0KLSAgICBkaXNrcyA9 IGxpYnhsX2RldmljZV9kaXNrX2xpc3QoY3R4LCBkb21pZCwgJm51bSk7Ci0gICAgZm9yIChpID0g MDsgaSA8IG51bTsgaSsrKSB7Ci0gICAgICAgIGlmIChkaXNrc1tpXS5pc19jZHJvbSAmJiAhc3Ry Y21wKGRpc2stPnZkZXYsIGRpc2tzW2ldLnZkZXYpKQotICAgICAgICB7Ci0gICAgICAgICAgICAv KiBGb3VuZC4gIFNldCBiYWNrZW5kIHR5cGUgYXBwcm9wcmlhdGVseS4gKi8KLSAgICAgICAgICAg IGRpc2stPmJhY2tlbmQ9ZGlza3NbaV0uYmFja2VuZDsKLSAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICB9Ci0gICAgfQotICAgIGlmIChpID09IG51bSkgewotICAgICAgICBMT0dEKEVSUk9SLCBk b21pZCwgIlZpcnR1YWwgZGV2aWNlIG5vdCBmb3VuZCIpOwotICAgICAgICByYyA9IEVSUk9SX0ZB SUw7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLQotICAgIHJjID0gbGlieGxfX2RldmljZV9k aXNrX3NldGRlZmF1bHQoZ2MsIGRpc2ssIGRvbWlkKTsKLSAgICBpZiAocmMpIGdvdG8gb3V0Owot Ci0gICAgaWYgKCFkaXNrLT5wZGV2X3BhdGgpIHsKLSAgICAgICAgZGlzay0+cGRldl9wYXRoID0g bGlieGxfX3N0cmR1cChOT0dDLCAiIik7Ci0gICAgICAgIGRpc2stPmZvcm1hdCA9IExJQlhMX0RJ U0tfRk9STUFUX0VNUFRZOwotICAgIH0KLQotICAgIHJjID0gbGlieGxfX2RldmljZV9mcm9tX2Rp c2soZ2MsIGRvbWlkLCBkaXNrLCAmZGV2aWNlKTsKLSAgICBpZiAocmMpIGdvdG8gb3V0OwotCi0g ICAgYmVfcGF0aCA9IGxpYnhsX19kZXZpY2VfYmFja2VuZF9wYXRoKGdjLCAmZGV2aWNlKTsKLSAg ICBsaWJ4bF9wYXRoID0gbGlieGxfX2RldmljZV9saWJ4bF9wYXRoKGdjLCAmZGV2aWNlKTsKLQot ICAgIGluc2VydCA9IGZsZXhhcnJheV9tYWtlKGdjLCA0LCAxKTsKLQotICAgIGZsZXhhcnJheV9h cHBlbmRfcGFpcihpbnNlcnQsICJ0eXBlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfX2RldmljZV9kaXNrX3N0cmluZ19vZl9iYWNrZW5kKGRpc2stPmJhY2tlbmQpKTsKLSAgICBp ZiAoZGlzay0+Zm9ybWF0ICE9IExJQlhMX0RJU0tfRk9STUFUX0VNUFRZKQotICAgICAgICBmbGV4 YXJyYXlfYXBwZW5kX3BhaXIoaW5zZXJ0LCAicGFyYW1zIiwKLSAgICAgICAgICAgICAgICAgICAg ICAgIEdDU1BSSU5URigiJXM6JXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhs X19kZXZpY2VfZGlza19zdHJpbmdfb2ZfZm9ybWF0KGRpc2stPmZvcm1hdCksCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGlzay0+cGRldl9wYXRoKSk7Ci0gICAgZWxzZQotICAgICAgICBm bGV4YXJyYXlfYXBwZW5kX3BhaXIoaW5zZXJ0LCAicGFyYW1zIiwgIiIpOwotCi0gICAgZW1wdHkg PSBmbGV4YXJyYXlfbWFrZShnYywgNCwgMSk7Ci0gICAgZmxleGFycmF5X2FwcGVuZF9wYWlyKGVt cHR5LCAidHlwZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19kZXZpY2VfZGlz a19zdHJpbmdfb2ZfYmFja2VuZChkaXNrLT5iYWNrZW5kKSk7Ci0gICAgZmxleGFycmF5X2FwcGVu ZF9wYWlyKGVtcHR5LCAicGFyYW1zIiwgIiIpOwotCi0gICAgLyogTm90ZTogQ1RYIGxvY2sgaXMg YWxyZWFkeSBoZWxkIGF0IHRoaXMgcG9pbnQgc28gbG9jayBoaWVyYXJjaHkKLSAgICAgKiBpcyBt YWludGFpbmVkLgotICAgICAqLwotICAgIGxvY2sgPSBsaWJ4bF9fbG9ja19kb21haW5fdXNlcmRh dGEoZ2MsIGRvbWlkKTsKLSAgICBpZiAoIWxvY2spIHsKLSAgICAgICAgcmMgPSBFUlJPUl9MT0NL X0ZBSUw7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLQotICAgIC8qIFdlIG5lZWQgdG8gZWpl Y3QgdGhlIG9yaWdpbmFsIGltYWdlIGZpcnN0LiBUaGlzIGlzIGltcGxlbWVudGVkCi0gICAgICog YnkgaW5zZXJ0aW5nIGVtcHR5IG1lZGlhLiBKU09OIGlzIG5vdCB1cGRhdGVkLgotICAgICAqLwot ICAgIGlmIChkbV92ZXIgPT0gTElCWExfREVWSUNFX01PREVMX1ZFUlNJT05fUUVNVV9YRU4pIHsK LSAgICAgICAgcmMgPSBsaWJ4bF9fcW1wX2luc2VydF9jZHJvbShnYywgZG9taWQsICZkaXNrX2Vt cHR5KTsKLSAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKLSAgICB9Ci0KLSAgICBmb3IgKDs7KSB7 Ci0gICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX3N0YXJ0KGdjLCAmdCk7Ci0gICAg ICAgIGlmIChyYykgZ290byBvdXQ7Ci0gICAgICAgIC8qIFNhbml0eSBjaGVjazogbWFrZSBzdXJl IHRoZSBkZXZpY2UgZXhpc3RzIGJlZm9yZSB3cml0aW5nIGhlcmUgKi8KLSAgICAgICAgdG1wID0g bGlieGxfX3hzX3JlYWQoZ2MsIHQsIEdDU1BSSU5URigiJXMvZnJvbnRlbmQiLCBsaWJ4bF9wYXRo KSk7Ci0gICAgICAgIGlmICghdG1wKQotICAgICAgICB7Ci0gICAgICAgICAgICBMT0dEKEVSUk9S LCBkb21pZCwgIkludGVybmFsIGVycm9yOiAlcyBkb2VzIG5vdCBleGlzdCIsCi0gICAgICAgICAg ICAgICAgIEdDU1BSSU5URigiJXMvZnJvbnRlbmQiLCBsaWJ4bF9wYXRoKSk7Ci0gICAgICAgICAg ICByYyA9IEVSUk9SX0ZBSUw7Ci0gICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgfQotCi0g ICAgICAgIGNoYXIgKiprdnMgPSBsaWJ4bF9feHNfa3ZzX29mX2ZsZXhhcnJheShnYywgZW1wdHkp OwotCi0gICAgICAgIHJjID0gbGlieGxfX3hzX3dyaXRldihnYywgdCwgYmVfcGF0aCwga3ZzKTsK LSAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKLQotICAgICAgICByYyA9IGxpYnhsX194c193cml0 ZXYoZ2MsIHQsIGxpYnhsX3BhdGgsIGt2cyk7Ci0gICAgICAgIGlmIChyYykgZ290byBvdXQ7Ci0K LSAgICAgICAgcmMgPSBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fY29tbWl0KGdjLCAmdCk7Ci0gICAg ICAgIGlmICghcmMpIGJyZWFrOwotICAgICAgICBpZiAocmMgPCAwKSBnb3RvIG91dDsKLSAgICB9 Ci0KLSAgICByYyA9IGxpYnhsX19nZXRfZG9tYWluX2NvbmZpZ3VyYXRpb24oZ2MsIGRvbWlkLCAm ZF9jb25maWcpOwotICAgIGlmIChyYykgZ290byBvdXQ7Ci0KLSAgICBERVZJQ0VfQUREKGRpc2ss IGRpc2tzLCBkb21pZCwgJmRpc2tfc2F2ZWQsIENPTVBBUkVfRElTSywgJmRfY29uZmlnKTsKLQot ICAgIHJjID0gbGlieGxfX2RtX2NoZWNrX3N0YXJ0KGdjLCAmZF9jb25maWcsIGRvbWlkKTsKLSAg ICBpZiAocmMpIGdvdG8gb3V0OwotCi0gICAgaWYgKGRtX3ZlciA9PSBMSUJYTF9ERVZJQ0VfTU9E RUxfVkVSU0lPTl9RRU1VX1hFTikgewotICAgICAgICByYyA9IGxpYnhsX19xbXBfaW5zZXJ0X2Nk cm9tKGdjLCBkb21pZCwgZGlzayk7Ci0gICAgICAgIGlmIChyYykgZ290byBvdXQ7Ci0gICAgfQot Ci0gICAgZm9yICg7OykgewotICAgICAgICByYyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9zdGFy dChnYywgJnQpOwotICAgICAgICBpZiAocmMpIGdvdG8gb3V0OwotICAgICAgICAvKiBTYW5pdHkg Y2hlY2s6IG1ha2Ugc3VyZSB0aGUgZGV2aWNlIGV4aXN0cyBiZWZvcmUgd3JpdGluZyBoZXJlICov Ci0gICAgICAgIHRtcCA9IGxpYnhsX194c19yZWFkKGdjLCB0LCBHQ1NQUklOVEYoIiVzL2Zyb250 ZW5kIiwgbGlieGxfcGF0aCkpOwotICAgICAgICBpZiAoIXRtcCkKLSAgICAgICAgewotICAgICAg ICAgICAgTE9HRChFUlJPUiwgZG9taWQsICJJbnRlcm5hbCBlcnJvcjogJXMgZG9lcyBub3QgZXhp c3QiLAotICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL2Zyb250ZW5kIiwgbGlieGxfcGF0 aCkpOwotICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOwotICAgICAgICAgICAgZ290byBvdXQ7 Ci0gICAgICAgIH0KLQotICAgICAgICByYyA9IGxpYnhsX19zZXRfZG9tYWluX2NvbmZpZ3VyYXRp b24oZ2MsIGRvbWlkLCAmZF9jb25maWcpOwotICAgICAgICBpZiAocmMpIGdvdG8gb3V0OwotCi0g ICAgICAgIGNoYXIgKiprdnMgPSBsaWJ4bF9feHNfa3ZzX29mX2ZsZXhhcnJheShnYywgaW5zZXJ0 KTsKLQotICAgICAgICByYyA9IGxpYnhsX194c193cml0ZXYoZ2MsIHQsIGJlX3BhdGgsIGt2cyk7 Ci0gICAgICAgIGlmIChyYykgZ290byBvdXQ7Ci0KLSAgICAgICAgcmMgPSBsaWJ4bF9feHNfd3Jp dGV2KGdjLCB0LCBsaWJ4bF9wYXRoLCBrdnMpOwotICAgICAgICBpZiAocmMpIGdvdG8gb3V0Owot Ci0gICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX2NvbW1pdChnYywgJnQpOwotICAg ICAgICBpZiAoIXJjKSBicmVhazsKLSAgICAgICAgaWYgKHJjIDwgMCkgZ290byBvdXQ7Ci0gICAg fQotCi0gICAgLyogc3VjY2Vzcywgbm8gYWN0dWFsIGFzeW5jICovCi0gICAgbGlieGxfX2FvX2Nv bXBsZXRlKGVnYywgYW8sIDApOwotCi0gICAgcmMgPSAwOwotCi1vdXQ6Ci0gICAgbGlieGxfX3hz X3RyYW5zYWN0aW9uX2Fib3J0KGdjLCAmdCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG51bTsgaSsr KQotICAgICAgICBsaWJ4bF9kZXZpY2VfZGlza19kaXNwb3NlKCZkaXNrc1tpXSk7Ci0gICAgZnJl ZShkaXNrcyk7Ci0gICAgbGlieGxfZGV2aWNlX2Rpc2tfZGlzcG9zZSgmZGlza19lbXB0eSk7Ci0g ICAgbGlieGxfZGV2aWNlX2Rpc2tfZGlzcG9zZSgmZGlza19zYXZlZCk7Ci0gICAgbGlieGxfZG9t YWluX2NvbmZpZ19kaXNwb3NlKCZkX2NvbmZpZyk7Ci0KLSAgICBpZiAobG9jaykgbGlieGxfX3Vu bG9ja19kb21haW5fdXNlcmRhdGEobG9jayk7Ci0KLSAgICBpZiAocmMpIHJldHVybiBBT19DUkVB VEVfRkFJTChyYyk7Ci0gICAgcmV0dXJuIEFPX0lOUFJPR1JFU1M7Ci19Ci0KLS8qIGxpYnhsX19h bGxvY192ZGV2IG9ubHkgd29ya3Mgb24gdGhlIGxvY2FsIGRvbWFpbiwgdGhhdCBpcyB0aGUgZG9t YWluCi0gKiB3aGVyZSB0aGUgdG9vbHN0YWNrIGlzIHJ1bm5pbmcgKi8KLXN0YXRpYyBjaGFyICog bGlieGxfX2FsbG9jX3ZkZXYobGlieGxfX2djICpnYywgdm9pZCAqZ2V0X3ZkZXZfdXNlciwKLSAg ICAgICAgeHNfdHJhbnNhY3Rpb25fdCB0KQotewotICAgIGNvbnN0IGNoYXIgKmJsa2Rldl9zdGFy dCA9IChjb25zdCBjaGFyICopIGdldF92ZGV2X3VzZXI7Ci0gICAgaW50IGRldmlkID0gMCwgZGlz ayA9IDAsIHBhcnQgPSAwOwotICAgIGNoYXIgKmxpYnhsX2RvbV9wYXRoID0gbGlieGxfX3hzX2xp YnhsX3BhdGgoZ2MsIExJQlhMX1RPT0xTVEFDS19ET01JRCk7Ci0KLSAgICBsaWJ4bF9fZGV2aWNl X2Rpc2tfZGV2X251bWJlcihibGtkZXZfc3RhcnQsICZkaXNrLCAmcGFydCk7Ci0gICAgaWYgKHBh cnQgIT0gMCkgewotICAgICAgICBMT0coRVJST1IsICJibGtkZXZfc3RhcnQgaXMgaW52YWxpZCIp OwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBkbyB7Ci0gICAgICAgIGRldmlk ID0gbGlieGxfX2RldmljZV9kaXNrX2Rldl9udW1iZXIoR0NTUFJJTlRGKCJkJWRwMCIsIGRpc2sp LAotICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOwotICAgICAgICBpZiAoZGV2aWQgPCAwKQot ICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGlmIChsaWJ4bF9feHNfcmVhZChnYywg dCwKLSAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9kZXZpY2UvdmJkLyVkL2JhY2tl bmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZG9tX3BhdGgsIGRldmlkKSkgPT0g TlVMTCkgewotICAgICAgICAgICAgaWYgKGVycm5vID09IEVOT0VOVCkKLSAgICAgICAgICAgICAg ICByZXR1cm4gbGlieGxfX2RldmlkX3RvX3ZkZXYoZ2MsIGRldmlkKTsKLSAgICAgICAgICAgIGVs c2UKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBkaXNr Kys7Ci0gICAgfSB3aGlsZSAoMSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIENhbGxiYWNr cyAqLwotCi1jaGFyICpsaWJ4bF9fZGV2aWNlX2Rpc2tfZmluZF9sb2NhbF9wYXRoKGxpYnhsX19n YyAqZ2MsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxf ZG9taWQgZ3Vlc3RfZG9taWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBsaWJ4bF9kZXZpY2VfZGlzayAqZGlzaywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcWRpc2tfZGlyZWN0KQotewotICAgIGNoYXIgKnBh dGggPSBOVUxMOwotCi0gICAgLyogTm8gbG9jYWwgcGF0aHMgZm9yIGRyaXZlciBkb21haW5zICov Ci0gICAgaWYgKGRpc2stPmJhY2tlbmRfZG9tbmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgIExPRyhE RUJVRywgIk5vbi1sb2NhbCBiYWNrZW5kLCBjYW4ndCBhY2Nlc3MgbG9jYWxseS5cbiIpOwotICAg ICAgICBnb3RvIG91dDsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIElmIHRoaXMgaXMgaW4gcmF3 IGZvcm1hdCwgYW5kIHdlJ3JlIG5vdCB1c2luZyBhIHNjcmlwdCBvciBhCi0gICAgICogZHJpdmVy IGRvbWFpbiwgd2UgY2FuIGFjY2VzcyB0aGUgdGFyZ2V0IHBhdGggZGlyZWN0bHkuCi0gICAgICov Ci0gICAgaWYgKGRpc2stPmZvcm1hdCA9PSBMSUJYTF9ESVNLX0ZPUk1BVF9SQVcKLSAgICAgICAg JiYgZGlzay0+c2NyaXB0ID09IE5VTEwpIHsKLSAgICAgICAgcGF0aCA9IGxpYnhsX19zdHJkdXAo Z2MsIGRpc2stPnBkZXZfcGF0aCk7Ci0gICAgICAgIExPRyhERUJVRywgIkRpcmVjdGx5IGFjY2Vz c2luZyBsb2NhbCBSQVcgZGlzayAlcyIsIHBhdGgpOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9 IAotCi0gICAgLyoKLSAgICAgKiBJZiB3ZSdyZSBiZWluZyBjYWxsZWQgZm9yIGEgcWVtdSBwYXRo LCB3ZSBjYW4gcGFzcyB0aGUgdGFyZ2V0Ci0gICAgICogc3RyaW5nIGRpcmVjdGx5IGFzIHdlbGwK LSAgICAgKi8KLSAgICBpZiAocWRpc2tfZGlyZWN0ICYmIGRpc2stPmJhY2tlbmQgPT0gTElCWExf RElTS19CQUNLRU5EX1FESVNLKSB7Ci0gICAgICAgIHBhdGggPSBsaWJ4bF9fc3RyZHVwKGdjLCBk aXNrLT5wZGV2X3BhdGgpOwotICAgICAgICBMT0coREVCVUcsICJEaXJlY3RseSBhY2Nlc3Npbmcg bG9jYWwgUURJU0sgdGFyZ2V0ICVzIiwgcGF0aCk7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0g Ci0KLSAgICAvKiAKLSAgICAgKiBJZiB0aGUgZm9ybWF0IGlzbid0IHJhdyBhbmQgLyBvciB3ZSdy ZSB1c2luZyBhIHNjcmlwdCwgdGhlbiBzZWUKLSAgICAgKiBpZiB0aGUgc2NyaXB0IGhhcyB3cml0 dGVuIGEgcGF0aCB0byB0aGUgImNvb2tlZCIgbm9kZQotICAgICAqLwotICAgIGlmIChkaXNrLT5z Y3JpcHQgJiYgZ3Vlc3RfZG9taWQgIT0gSU5WQUxJRF9ET01JRCkgewotICAgICAgICBsaWJ4bF9f ZGV2aWNlIGRldmljZTsKLSAgICAgICAgY2hhciAqYmVfcGF0aCwgKnBkcGF0aDsKLSAgICAgICAg aW50IHJjOwotCi0gICAgICAgIExPR0QoREVCVUcsIGd1ZXN0X2RvbWlkLAotICAgICAgICAgICAg ICJSdW4gZnJvbSBhIHNjcmlwdDsgY2hlY2tpbmcgZm9yIHBoeXNpY2FsLWRldmljZS1wYXRoICh2 ZGV2ICVzKSIsCi0gICAgICAgICAgICAgZGlzay0+dmRldik7Ci0KLSAgICAgICAgcmMgPSBsaWJ4 bF9fZGV2aWNlX2Zyb21fZGlzayhnYywgZ3Vlc3RfZG9taWQsIGRpc2ssICZkZXZpY2UpOwotICAg ICAgICBpZiAocmMgPCAwKQotICAgICAgICAgICAgZ290byBvdXQ7Ci0KLSAgICAgICAgYmVfcGF0 aCA9IGxpYnhsX19kZXZpY2VfYmFja2VuZF9wYXRoKGdjLCAmZGV2aWNlKTsKLQotICAgICAgICBw ZHBhdGggPSBsaWJ4bF9fc3ByaW50ZihnYywgIiVzL3BoeXNpY2FsLWRldmljZS1wYXRoIiwgYmVf cGF0aCk7Ci0KLSAgICAgICAgTE9HRChERUJVRywgZ3Vlc3RfZG9taWQsICJBdHRlbXB0aW5nIHRv IHJlYWQgbm9kZSAlcyIsIHBkcGF0aCk7Ci0gICAgICAgIHBhdGggPSBsaWJ4bF9feHNfcmVhZChn YywgWEJUX05VTEwsIHBkcGF0aCk7Ci0KLSAgICAgICAgaWYgKHBhdGgpCi0gICAgICAgICAgICBM T0dEKERFQlVHLCBndWVzdF9kb21pZCwgIkFjY2Vzc2luZyBjb29rZWQgYmxvY2sgZGV2aWNlICVz IiwgcGF0aCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIExPR0QoREVCVUcsIGd1ZXN0X2Rv bWlkLCAiTm8gcGh5c2ljYWwtZGV2aWNlLXBhdGgsIGNhbid0IGFjY2VzcyBsb2NhbGx5LiIpOwot Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLQotIG91dDoKLSAgICByZXR1cm4gcGF0aDsKLX0K LQotc3RhdGljIHZvaWQgbG9jYWxfZGV2aWNlX2F0dGFjaF9jYihsaWJ4bF9fZWdjICplZ2MsIGxp YnhsX19hb19kZXZpY2UgKmFvZGV2KTsKLQotdm9pZCBsaWJ4bF9fZGV2aWNlX2Rpc2tfbG9jYWxf aW5pdGlhdGVfYXR0YWNoKGxpYnhsX19lZ2MgKmVnYywKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF9fZGlza19sb2NhbF9zdGF0ZSAqZGxzKQotewotICAgIFNUQVRF X0FPX0dDKGRscy0+YW8pOwotICAgIGludCByYzsKLSAgICBjb25zdCBsaWJ4bF9kZXZpY2VfZGlz ayAqaW5fZGlzayA9IGRscy0+aW5fZGlzazsKLSAgICBsaWJ4bF9kZXZpY2VfZGlzayAqZGlzayA9 ICZkbHMtPmRpc2s7Ci0gICAgY29uc3QgY2hhciAqYmxrZGV2X3N0YXJ0ID0gZGxzLT5ibGtkZXZf c3RhcnQ7Ci0KLSAgICBhc3NlcnQoaW5fZGlzay0+cGRldl9wYXRoKTsKLQotICAgIGRpc2stPnZk ZXYgPSBOVUxMOwotCi0gICAgaWYgKGRscy0+ZGlza3BhdGgpCi0gICAgICAgIExPRyhERUJVRywg IlN0cmFuZ2UsIGRscy0+ZGlza3BhdGggYWxyZWFkeSBzZXQ6ICVzIiwgZGxzLT5kaXNrcGF0aCk7 Ci0KLSAgICBMT0coREVCVUcsICJUcnlpbmcgdG8gZmluZCBsb2NhbCBwYXRoIik7Ci0KLSAgICBk bHMtPmRpc2twYXRoID0gbGlieGxfX2RldmljZV9kaXNrX2ZpbmRfbG9jYWxfcGF0aChnYywgSU5W QUxJRF9ET01JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbl9kaXNrLCBmYWxzZSk7Ci0gICAgaWYgKGRscy0+ZGlza3BhdGgpIHsKLSAg ICAgICAgTE9HKERFQlVHLCAiTG9jYWwgcGF0aCBmb3VuZCwgZXhlY3V0aW5nIGNhbGxiYWNrLiIp OwotICAgICAgICBkbHMtPmNhbGxiYWNrKGVnYywgZGxzLCAwKTsKLSAgICB9IGVsc2UgewotICAg ICAgICBMT0coREVCVUcsICJMb2NhbCBwYXRoIG5vdCBmb3VuZCwgaW5pdGlhdGluZyBhdHRhY2gu Iik7Ci0KLSAgICAgICAgbWVtY3B5KGRpc2ssIGluX2Rpc2ssIHNpemVvZihsaWJ4bF9kZXZpY2Vf ZGlzaykpOwotICAgICAgICBkaXNrLT5wZGV2X3BhdGggPSBsaWJ4bF9fc3RyZHVwKGdjLCBpbl9k aXNrLT5wZGV2X3BhdGgpOwotICAgICAgICBpZiAoaW5fZGlzay0+c2NyaXB0ICE9IE5VTEwpCi0g ICAgICAgICAgICBkaXNrLT5zY3JpcHQgPSBsaWJ4bF9fc3RyZHVwKGdjLCBpbl9kaXNrLT5zY3Jp cHQpOwotICAgICAgICBkaXNrLT52ZGV2ID0gTlVMTDsKLSAgICAgICAgCi0gICAgICAgIHJjID0g bGlieGxfX2RldmljZV9kaXNrX3NldGRlZmF1bHQoZ2MsIGRpc2ssIExJQlhMX1RPT0xTVEFDS19E T01JRCk7Ci0gICAgICAgIGlmIChyYykgZ290byBvdXQ7Ci0KLSAgICAgICAgbGlieGxfX3ByZXBh cmVfYW9fZGV2aWNlKGFvLCAmZGxzLT5hb2Rldik7Ci0gICAgICAgIGRscy0+YW9kZXYuY2FsbGJh Y2sgPSBsb2NhbF9kZXZpY2VfYXR0YWNoX2NiOwotICAgICAgICBkZXZpY2VfZGlza19hZGQoZWdj LCBMSUJYTF9UT09MU1RBQ0tfRE9NSUQsIGRpc2ssICZkbHMtPmFvZGV2LAotICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfX2FsbG9jX3ZkZXYsICh2b2lkICopIGJsa2Rldl9zdGFydCk7Ci0g ICAgfQotCi0gICAgcmV0dXJuOwotCi0gb3V0OgotICAgIGFzc2VydChyYyk7Ci0gICAgZGxzLT5y YyA9IHJjOwotICAgIGxpYnhsX19kZXZpY2VfZGlza19sb2NhbF9pbml0aWF0ZV9kZXRhY2goZWdj LCBkbHMpOwotICAgIGRscy0+Y2FsbGJhY2soZWdjLCBkbHMsIHJjKTsKLX0KLQotc3RhdGljIHZv aWQgbG9jYWxfZGV2aWNlX2F0dGFjaF9jYihsaWJ4bF9fZWdjICplZ2MsIGxpYnhsX19hb19kZXZp Y2UgKmFvZGV2KQotewotICAgIFNUQVRFX0FPX0dDKGFvZGV2LT5hbyk7Ci0gICAgbGlieGxfX2Rp c2tfbG9jYWxfc3RhdGUgKmRscyA9IENPTlRBSU5FUl9PRihhb2RldiwgKmRscywgYW9kZXYpOwot ICAgIGNoYXIgKmJlX3BhdGggPSBOVUxMOwotICAgIGludCByYzsKLSAgICBsaWJ4bF9fZGV2aWNl IGRldmljZTsKLSAgICBsaWJ4bF9kZXZpY2VfZGlzayAqZGlzayA9ICZkbHMtPmRpc2s7Ci0KLSAg ICByYyA9IGFvZGV2LT5yYzsKLSAgICBpZiAocmMpIHsKLSAgICAgICAgTE9HRShFUlJPUiwgInVu YWJsZSBsb2NhbGx5IGF0dGFjaCBkZXZpY2U6ICVzIiwgZGlzay0+cGRldl9wYXRoKTsKLSAgICAg ICAgZ290byBvdXQ7Ci0gICAgfQotCi0gICAgcmMgPSBsaWJ4bF9fZGV2aWNlX2Zyb21fZGlzayhn YywgTElCWExfVE9PTFNUQUNLX0RPTUlELCBkaXNrLCAmZGV2aWNlKTsKLSAgICBpZiAocmMgPCAw KQotICAgICAgICBnb3RvIG91dDsKLSAgICBiZV9wYXRoID0gbGlieGxfX2RldmljZV9iYWNrZW5k X3BhdGgoZ2MsICZkZXZpY2UpOwotICAgIHJjID0gbGlieGxfX3dhaXRfZm9yX2JhY2tlbmQoZ2Ms IGJlX3BhdGgsIEdDU1BSSU5URigiJWQiLCBYZW5idXNTdGF0ZUNvbm5lY3RlZCkpOwotICAgIGlm IChyYyA8IDApCi0gICAgICAgIGdvdG8gb3V0OwotCi0gICAgZGxzLT5kaXNrcGF0aCA9IEdDU1BS SU5URigiL2Rldi8lcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fZGV2 aWRfdG9fbG9jYWxkZXYoZ2MsIGRldmljZS5kZXZpZCkpOwotICAgIExPRyhERUJVRywgImxvY2Fs bHkgYXR0YWNoZWQgZGlzayAlcyIsIGRscy0+ZGlza3BhdGgpOwotCi0gICAgZGxzLT5jYWxsYmFj ayhlZ2MsIGRscywgMCk7Ci0gICAgcmV0dXJuOwotCi0gb3V0OgotICAgIGFzc2VydChyYyk7Ci0g ICAgZGxzLT5yYyA9IHJjOwotICAgIGxpYnhsX19kZXZpY2VfZGlza19sb2NhbF9pbml0aWF0ZV9k ZXRhY2goZWdjLCBkbHMpOwotICAgIHJldHVybjsKLX0KLQotLyogQ2FsbGJhY2tzIGZvciBsb2Nh bCBkZXRhY2ggKi8KLQotc3RhdGljIHZvaWQgbG9jYWxfZGV2aWNlX2RldGFjaF9jYihsaWJ4bF9f ZWdjICplZ2MsIGxpYnhsX19hb19kZXZpY2UgKmFvZGV2KTsKLQotdm9pZCBsaWJ4bF9fZGV2aWNl X2Rpc2tfbG9jYWxfaW5pdGlhdGVfZGV0YWNoKGxpYnhsX19lZ2MgKmVnYywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fZGlza19sb2NhbF9zdGF0ZSAqZGxzKQot ewotICAgIFNUQVRFX0FPX0dDKGRscy0+YW8pOwotICAgIGludCByYyA9IDA7Ci0gICAgbGlieGxf ZGV2aWNlX2Rpc2sgKmRpc2sgPSAmZGxzLT5kaXNrOwotICAgIGxpYnhsX19kZXZpY2UgKmRldmlj ZTsKLSAgICBsaWJ4bF9fYW9fZGV2aWNlICphb2RldiA9ICZkbHMtPmFvZGV2OwotICAgIGxpYnhs X19wcmVwYXJlX2FvX2RldmljZShhbywgYW9kZXYpOwotCi0gICAgaWYgKCFkbHMtPmRpc2twYXRo KSBnb3RvIG91dDsKLQotICAgIGlmIChkaXNrLT52ZGV2ICE9IE5VTEwpIHsKLSAgICAgICAgR0NO RVcoZGV2aWNlKTsKLSAgICAgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX2Zyb21fZGlzayhnYywgTElC WExfVE9PTFNUQUNLX0RPTUlELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRpc2ssIGRldmljZSk7Ci0gICAgICAgIGlmIChyYyAhPSAwKSBnb3RvIG91dDsKLSAgICAgICAg Ci0gICAgICAgIGFvZGV2LT5hY3Rpb24gPSBMSUJYTF9fREVWSUNFX0FDVElPTl9SRU1PVkU7Ci0g ICAgICAgIGFvZGV2LT5kZXYgPSBkZXZpY2U7Ci0gICAgICAgIGFvZGV2LT5jYWxsYmFjayA9IGxv Y2FsX2RldmljZV9kZXRhY2hfY2I7Ci0gICAgICAgIGFvZGV2LT5mb3JjZSA9IDA7Ci0gICAgICAg IGxpYnhsX19pbml0aWF0ZV9kZXZpY2VfZ2VuZXJpY19yZW1vdmUoZWdjLCBhb2Rldik7Ci0gICAg ICAgIHJldHVybjsKLSAgICB9Ci0KLW91dDoKLSAgICBhb2Rldi0+cmMgPSByYzsKLSAgICBsb2Nh bF9kZXZpY2VfZGV0YWNoX2NiKGVnYywgYW9kZXYpOwotICAgIHJldHVybjsKLX0KLQotc3RhdGlj IHZvaWQgbG9jYWxfZGV2aWNlX2RldGFjaF9jYihsaWJ4bF9fZWdjICplZ2MsIGxpYnhsX19hb19k ZXZpY2UgKmFvZGV2KQotewotICAgIFNUQVRFX0FPX0dDKGFvZGV2LT5hbyk7Ci0gICAgbGlieGxf X2Rpc2tfbG9jYWxfc3RhdGUgKmRscyA9IENPTlRBSU5FUl9PRihhb2RldiwgKmRscywgYW9kZXYp OwotICAgIGludCByYzsKLQotICAgIGlmIChhb2Rldi0+cmMpIHsKLSAgICAgICAgTE9HRUQoRVJS T1IsIGFvZGV2LT5kZXYtPmRvbWlkLCAiVW5hYmxlIHRvICVzICVzIHdpdGggaWQgJXUiLAotICAg ICAgICAgICAgICAgICAgICAgbGlieGxfX2RldmljZV9hY3Rpb25fdG9fc3RyaW5nKGFvZGV2LT5h Y3Rpb24pLAotICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2RldmljZV9raW5kX3RvX3N0cmlu Zyhhb2Rldi0+ZGV2LT5raW5kKSwKLSAgICAgICAgICAgICAgICAgICAgIGFvZGV2LT5kZXYtPmRl dmlkKTsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAgfQotCi1vdXQ6Ci0gICAgLyoKLSAgICAgKiBJ ZiB0aGVyZSB3YXMgYW4gZXJyb3IgaW4gZGxzLT5yYywgaXQgbWVhbnMgd2UgaGF2ZSBiZWVuIGNh bGxlZCBmcm9tCi0gICAgICogYSBmYWlsZWQgZXhlY3V0aW9uIG9mIGxpYnhsX19kZXZpY2VfZGlz a19sb2NhbF9pbml0aWF0ZV9hdHRhY2gsCi0gICAgICogc28gcmV0dXJuIHRoZSBvcmlnaW5hbCBl cnJvci4KLSAgICAgKi8KLSAgICByYyA9IGRscy0+cmMgPyBkbHMtPnJjIDogYW9kZXYtPnJjOwot ICAgIGRscy0+Y2FsbGJhY2soZWdjLCBkbHMsIHJjKTsKLSAgICByZXR1cm47Ci19Ci0KLS8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCiBpbnQgbGlieGxfX2RldmljZV9jb25zb2xlX2FkZChsaWJ4bF9f Z2MgKmdjLCB1aW50MzJfdCBkb21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp YnhsX19kZXZpY2VfY29uc29sZSAqY29uc29sZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxpYnhsX19kb21haW5fYnVpbGRfc3RhdGUgKnN0YXRlLApAQCAtMzUyMywxMCArMjM0OSw2 IEBAIG91dDoKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIFRoZSBmb2xsb3dpbmcgZnVu Y3Rpb25zIGFyZSBkZWZpbmVkOgotICogbGlieGxfZGV2aWNlX2Rpc2tfYWRkCi0gKiBsaWJ4bF9f YWRkX2Rpc2tzCi0gKiBsaWJ4bF9kZXZpY2VfZGlza19yZW1vdmUKLSAqIGxpYnhsX2RldmljZV9k aXNrX2Rlc3Ryb3kKICAqIGxpYnhsX2RldmljZV92a2JfcmVtb3ZlCiAgKiBsaWJ4bF9kZXZpY2Vf dmtiX2Rlc3Ryb3kKICAqIGxpYnhsX2RldmljZV92ZmJfcmVtb3ZlCkBAIC0zNTM3LDExICsyMzU5 LDYgQEAgb3V0OgogICogMS4gYWRkIHN1cHBvcnQgZm9yIHNlY29uZGFyeSBjb25zb2xlcyB0byB4 ZW5jb25zb2xlZAogICogMi4gZHluYW1pY2FsbHkgYWRkL3JlbW92ZSBxZW11IGNoYXJkZXZzIHZp YSBxbXAgbWVzc2FnZXMuICovCiAKLS8qIGRpc2sgKi8KLUxJQlhMX0RFRklORV9ERVZJQ0VfQURE KGRpc2spCi1MSUJYTF9ERUZJTkVfREVWSUNFU19BREQoZGlzaykKLUxJQlhMX0RFRklORV9ERVZJ Q0VfUkVNT1ZFKGRpc2spCi0KIC8qIHZrYiAqLwogTElCWExfREVGSU5FX0RFVklDRV9SRU1PVkUo dmtiKQogCkBAIC01NjQ3LDU3ICs0NDY0LDYgQEAgb3V0OgogICAgIHJldHVybiByYzsKIH0KIAot c3RhdGljIGludCBsaWJ4bF9kZXZpY2VfZGlza19jb21wYXJlKGxpYnhsX2RldmljZV9kaXNrICpk MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfZGlz ayAqZDIpCi17Ci0gICAgcmV0dXJuIENPTVBBUkVfRElTSyhkMSwgZDIpOwotfQotCi0vKiBUYWtl IGNhcmUgb2YgcmVtb3ZhYmxlIGRldmljZS4gV2UgbWFpbnRhaW4gaW52YXJpYW50IGluIHRoZQot ICogaW5zZXJ0IC8gcmVtb3ZlIG9wZXJhdGlvbiBzbyB0aGF0OgotICogMS4gaWYgeGVuc3RvcmUg aXMgImVtcHR5IiB3aGlsZSBKU09OIGlzIG5vdCwgdGhlIHJlc3VsdAotICogICAgaXMgImVtcHR5 IgotICogMi4gaWYgeGVuc3RvcmUgaGFzIGEgZGlmZmVyZW50IG1lZGlhIHRoYW4gSlNPTiwgdXNl IHRoZQotICogICAgb25lIGluIEpTT04KLSAqIDMuIGlmIHhlbnN0b3JlIGFuZCBKU09OIGhhdmUg dGhlIHNhbWUgbWVkaWEsIHdlbGwsIHlvdQotICogICAga25vdyB0aGUgYW5zd2VyIDotKQotICoK LSAqIEN1cnJlbnRseSB0aGVyZSBpcyBvbmx5IG9uZSByZW1vdmFibGUgZGV2aWNlIC0tIENEUk9N LgotICogTG9vayBmb3IgbGlieGxfY2Ryb21faW5zZXJ0IGZvciByZWZlcmVuY2UuCi0gKi8KLXN0 YXRpYyB2b2lkIGxpYnhsX2RldmljZV9kaXNrX21lcmdlKGxpYnhsX2N0eCAqY3R4LCB2b2lkICpk MSwgdm9pZCAqZDIpCi17Ci0gICAgR0NfSU5JVChjdHgpOwotICAgIGxpYnhsX2RldmljZV9kaXNr ICpzcmMgPSBkMTsKLSAgICBsaWJ4bF9kZXZpY2VfZGlzayAqZHN0ID0gZDI7Ci0KLSAgICBpZiAo c3JjLT5yZW1vdmFibGUpIHsKLSAgICAgICAgaWYgKCFzcmMtPnBkZXZfcGF0aCB8fCAqc3JjLT5w ZGV2X3BhdGggPT0gJ1wwJykgewotICAgICAgICAgICAgLyogMSwgbm8gbWVkaWEgaW4gZHJpdmUg Ki8KLSAgICAgICAgICAgIGZyZWUoZHN0LT5wZGV2X3BhdGgpOwotICAgICAgICAgICAgZHN0LT5w ZGV2X3BhdGggPSBsaWJ4bF9fc3RyZHVwKE5PR0MsICIiKTsKLSAgICAgICAgICAgIGRzdC0+Zm9y bWF0ID0gTElCWExfRElTS19GT1JNQVRfRU1QVFk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg ICAgICAvKiAyIGFuZCAzLCB1c2UgSlNPTiwgbm8gbmVlZCB0byB0b3VjaCBhbnl0aGluZyAqLwot ICAgICAgICAgICAgOwotICAgICAgICB9Ci0gICAgfQotfQotCi1zdGF0aWMgaW50IGxpYnhsX2Rl dmljZV9kaXNrX2RtX25lZWRlZCh2b2lkICplLCB1bnNpZ25lZCBkb21pZCkKLXsKLSAgICBsaWJ4 bF9kZXZpY2VfZGlzayAqZWxlbSA9IGU7Ci0KLSAgICByZXR1cm4gZWxlbS0+YmFja2VuZCA9PSBM SUJYTF9ESVNLX0JBQ0tFTkRfUURJU0sgJiYKLSAgICAgICAgICAgZWxlbS0+YmFja2VuZF9kb21p ZCA9PSBkb21pZDsKLX0KLQotREVGSU5FX0RFVklDRV9UWVBFX1NUUlVDVChkaXNrLAotICAgIC5t ZXJnZSAgICAgICA9IGxpYnhsX2RldmljZV9kaXNrX21lcmdlLAotICAgIC5kbV9uZWVkZWQgICA9 IGxpYnhsX2RldmljZV9kaXNrX2RtX25lZWRlZCwKLSAgICAuc2tpcF9hdHRhY2ggPSAxCi0pOwot CiAvKgogICogTG9jYWwgdmFyaWFibGVzOgogICogbW9kZTogQwpkaWZmIC0tZ2l0IGEvdG9vbHMv bGlieGwvbGlieGxfZGlzay5jIGIvdG9vbHMvbGlieGwvbGlieGxfZGlzay5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNDlkZjIKLS0tIC9kZXYvbnVsbAorKysgYi90b29s cy9saWJ4bC9saWJ4bF9kaXNrLmMKQEAgLTAsMCArMSwxMjU4IEBACisvKgorICogQ29weXJpZ2h0 IDIwMDktMjAxNyBDaXRyaXggTHRkIGFuZCBvdGhlciBjb250cmlidXRvcnMKKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyB2ZXJzaW9uIDIuMSBvbmx5LiB3aXRoIHRoZSBzcGVjaWFsCisgKiBleGNlcHRpb24g b24gbGlua2luZyBkZXNjcmliZWQgaW4gZmlsZSBMSUNFTlNFLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICJsaWJ4bF9vc2RlcHMuaCIKKworI2luY2x1 ZGUgImxpYnhsX2ludGVybmFsLmgiCisKKyNkZWZpbmUgQkFDS0VORF9TVFJJTkdfU0laRSA1CisK K3N0YXRpYyB2b2lkIGRpc2tfZWplY3RfeHN3YXRjaF9jYWxsYmFjayhsaWJ4bF9fZWdjICplZ2Ms IGxpYnhsX19ldl94c3dhdGNoICp3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIgKndwYXRoLCBjb25zdCBjaGFyICplcGF0aCkgeworICAgIEVHQ19H QzsKKyAgICBsaWJ4bF9ldmdlbl9kaXNrX2VqZWN0ICpldmcgPSAodm9pZCopdzsKKyAgICBjb25z dCBjaGFyICpiYWNrZW5kOworICAgIGNoYXIgKnZhbHVlOworICAgIGNoYXIgYmFja2VuZF90eXBl W0JBQ0tFTkRfU1RSSU5HX1NJWkUrMV07CisgICAgaW50IHJjOworCisgICAgdmFsdWUgPSBsaWJ4 bF9feHNfcmVhZChnYywgWEJUX05VTEwsIHdwYXRoKTsKKworICAgIGlmICghdmFsdWUgfHwgc3Ry Y21wKHZhbHVlLCAgImVqZWN0IikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsaWJ4bF9f eHNfcHJpbnRmKGdjLCBYQlRfTlVMTCwgd3BhdGgsICIiKSkgeworICAgICAgICBMSUJYTF9fRVZF TlRfRElTQVNURVIoZWdjLCAieHNfd3JpdGUgZmFpbGVkIGFja25vd2xlZGdpbmcgZWplY3QiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8sIExJQlhMX0VWRU5UX1RZUEVfRElT S19FSkVDVCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsaWJ4bF9ldmVudCAqZXYg PSBORVdfRVZFTlQoZWdjLCBESVNLX0VKRUNULCBldmctPmRvbWlkLCBldmctPnVzZXIpOworICAg IGxpYnhsX2RldmljZV9kaXNrICpkaXNrID0gJmV2LT51LmRpc2tfZWplY3QuZGlzazsKKworICAg IHJjID0gbGlieGxfX3hzX3JlYWRfY2hlY2tlZChnYywgWEJUX05VTEwsIGV2Zy0+YmVfcHRyX3Bh dGgsICZiYWNrZW5kKTsKKyAgICBpZiAocmMpIHsKKyAgICAgICAgTElCWExfX0VWRU5UX0RJU0FT VEVSKGVnYywgInhzX3JlYWQgZmFpbGVkIHJlYWRpbmcgYmVfcHRyX3BhdGgiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZXJybm8sIExJQlhMX0VWRU5UX1RZUEVfRElTS19FSkVDVCk7 CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFiYWNrZW5kKSB7CisgICAgICAgIC8q IGRldmljZSBoYXMgYmVlbiByZW1vdmVkLCBub3Qgc2ltcGx5IGVqZWN0ZWQgKi8KKyAgICAgICAg cmV0dXJuOworICAgIH0KKworICAgIHNzY2FuZihiYWNrZW5kLAorICAgICAgICAgICAgIi9sb2Nh bC9kb21haW4vJWQvYmFja2VuZC8lIiBUT1NUUklORyhCQUNLRU5EX1NUUklOR19TSVpFKQorICAg ICAgICAgICAiW2Etel0vJSpkLyUqZCIsCisgICAgICAgICAgICZkaXNrLT5iYWNrZW5kX2RvbWlk LCBiYWNrZW5kX3R5cGUpOworICAgIGlmICghc3RyY21wKGJhY2tlbmRfdHlwZSwgInRhcCIpIHx8 ICFzdHJjbXAoYmFja2VuZF90eXBlLCAidmJkIikpIHsKKyAgICAgICAgZGlzay0+YmFja2VuZCA9 IExJQlhMX0RJU0tfQkFDS0VORF9UQVA7CisgICAgfSBlbHNlIGlmICghc3RyY21wKGJhY2tlbmRf dHlwZSwgInFkaXNrIikpIHsKKyAgICAgICAgZGlzay0+YmFja2VuZCA9IExJQlhMX0RJU0tfQkFD S0VORF9RRElTSzsKKyAgICB9IGVsc2UgeworICAgICAgICBkaXNrLT5iYWNrZW5kID0gTElCWExf RElTS19CQUNLRU5EX1VOS05PV047CisgICAgfQorCisgICAgZGlzay0+cGRldl9wYXRoID0gc3Ry ZHVwKCIiKTsgLyogeHh4IGZpeG1lIG1hbGxvYyBmYWlsdXJlICovCisgICAgZGlzay0+Zm9ybWF0 ID0gTElCWExfRElTS19GT1JNQVRfRU1QVFk7CisgICAgLyogdGhpcyB2YWx1ZSBpcyByZXR1cm5l ZCB0byB0aGUgdXNlcjogZG8gbm90IGZyZWUgcmlnaHQgYXdheSAqLworICAgIGRpc2stPnZkZXYg PSBsaWJ4bF9fc3RyZHVwKE5PR0MsIGV2Zy0+dmRldik7CisgICAgZGlzay0+cmVtb3ZhYmxlID0g MTsKKyAgICBkaXNrLT5yZWFkd3JpdGUgPSAwOworICAgIGRpc2stPmlzX2Nkcm9tID0gMTsKKwor ICAgIGxpYnhsX19ldmVudF9vY2N1cnJlZChlZ2MsIGV2KTsKK30KKworaW50IGxpYnhsX2V2ZW5h YmxlX2Rpc2tfZWplY3QobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGd1ZXN0X2RvbWlkLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmRldiwgbGlieGxfZXZfdXNl ciB1c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZXZnZW5fZGlza19l amVjdCAqKmV2Z2VuX291dCkgeworICAgIEdDX0lOSVQoY3R4KTsKKyAgICBDVFhfTE9DSzsKKyAg ICBpbnQgcmM7CisgICAgY2hhciAqcGF0aDsKKyAgICBsaWJ4bF9ldmdlbl9kaXNrX2VqZWN0ICpl dmcgPSBOVUxMOworCisgICAgZXZnID0gbWFsbG9jKHNpemVvZigqZXZnKSk7ICBpZiAoIWV2Zykg eyByYyA9IEVSUk9SX05PTUVNOyBnb3RvIG91dDsgfQorICAgIG1lbXNldChldmcsIDAsIHNpemVv ZigqZXZnKSk7CisgICAgZXZnLT51c2VyID0gdXNlcjsKKyAgICBldmctPmRvbWlkID0gZ3Vlc3Rf ZG9taWQ7CisgICAgTElCWExfTElTVF9JTlNFUlRfSEVBRCgmQ1RYLT5kaXNrX2VqZWN0X2V2Z2Vu cywgZXZnLCBlbnRyeSk7CisKKyAgICB1aW50MzJfdCBkb21pZCA9IGxpYnhsX2dldF9zdHViZG9t X2lkKGN0eCwgZ3Vlc3RfZG9taWQpOworCisgICAgaWYgKCFkb21pZCkKKyAgICAgICAgZG9taWQg PSBndWVzdF9kb21pZDsKKworICAgIGludCBkZXZpZCA9IGxpYnhsX19kZXZpY2VfZGlza19kZXZf bnVtYmVyKHZkZXYsIE5VTEwsIE5VTEwpOworCisgICAgcGF0aCA9IEdDU1BSSU5URigiJXMvZGV2 aWNlL3ZiZC8lZC9lamVjdCIsCisgICAgICAgICAgICAgICAgIGxpYnhsX194c19nZXRfZG9tcGF0 aChnYywgZG9taWQpLAorICAgICAgICAgICAgICAgICBkZXZpZCk7CisgICAgaWYgKCFwYXRoKSB7 IHJjID0gRVJST1JfTk9NRU07IGdvdG8gb3V0OyB9CisKKyAgICBjb25zdCBjaGFyICpsaWJ4bF9w YXRoID0gR0NTUFJJTlRGKCIlcy9kZXZpY2UvdmJkLyVkIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX194c19saWJ4bF9wYXRoKGdjLCBkb21pZCksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkZXZpZCk7CisgICAgZXZnLT5iZV9wdHJfcGF0aCA9IGxp YnhsX19zcHJpbnRmKE5PR0MsICIlcy9iYWNrZW5kIiwgbGlieGxfcGF0aCk7CisKKyAgICBjb25z dCBjaGFyICpjb25maWd1cmVkX3ZkZXY7CisgICAgcmMgPSBsaWJ4bF9feHNfcmVhZF9jaGVja2Vk KGdjLCBYQlRfTlVMTCwKKyAgICAgICAgICAgIEdDU1BSSU5URigiJXMvZGV2IiwgbGlieGxfcGF0 aCksICZjb25maWd1cmVkX3ZkZXYpOworICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICBldmct PnZkZXYgPSBsaWJ4bF9fc3RyZHVwKE5PR0MsIGNvbmZpZ3VyZWRfdmRldik7CisKKyAgICByYyA9 IGxpYnhsX19ldl94c3dhdGNoX3JlZ2lzdGVyKGdjLCAmZXZnLT53YXRjaCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tfZWplY3RfeHN3YXRjaF9jYWxsYmFjaywgcGF0 aCk7CisgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgICpldmdlbl9vdXQgPSBldmc7CisgICAg Q1RYX1VOTE9DSzsKKyAgICBHQ19GUkVFOworICAgIHJldHVybiAwOworCisgb3V0OgorICAgIGlm IChldmcpCisgICAgICAgIGxpYnhsX19ldmRpc2FibGVfZGlza19lamVjdChnYywgZXZnKTsKKyAg ICBDVFhfVU5MT0NLOworICAgIEdDX0ZSRUU7CisgICAgcmV0dXJuIHJjOworfQorCit2b2lkIGxp YnhsX19ldmRpc2FibGVfZGlza19lamVjdChsaWJ4bF9fZ2MgKmdjLCBsaWJ4bF9ldmdlbl9kaXNr X2VqZWN0ICpldmcpIHsKKyAgICBDVFhfTE9DSzsKKworICAgIExJQlhMX0xJU1RfUkVNT1ZFKGV2 ZywgZW50cnkpOworCisgICAgaWYgKGxpYnhsX19ldl94c3dhdGNoX2lzcmVnaXN0ZXJlZCgmZXZn LT53YXRjaCkpCisgICAgICAgIGxpYnhsX19ldl94c3dhdGNoX2RlcmVnaXN0ZXIoZ2MsICZldmct PndhdGNoKTsKKworICAgIGZyZWUoZXZnLT52ZGV2KTsKKyAgICBmcmVlKGV2Zy0+YmVfcHRyX3Bh dGgpOworICAgIGZyZWUoZXZnKTsKKworICAgIENUWF9VTkxPQ0s7Cit9CisKK3ZvaWQgbGlieGxf ZXZkaXNhYmxlX2Rpc2tfZWplY3QobGlieGxfY3R4ICpjdHgsIGxpYnhsX2V2Z2VuX2Rpc2tfZWpl Y3QgKmV2ZykgeworICAgIEdDX0lOSVQoY3R4KTsKKyAgICBsaWJ4bF9fZXZkaXNhYmxlX2Rpc2tf ZWplY3QoZ2MsIGV2Zyk7CisgICAgR0NfRlJFRTsKK30KKworaW50IGxpYnhsX19kZXZpY2VfZGlz a19zZXRkZWZhdWx0KGxpYnhsX19nYyAqZ2MsIGxpYnhsX2RldmljZV9kaXNrICpkaXNrLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRvbWlkKQoreworICAgIGlu dCByYzsKKworICAgIGxpYnhsX2RlZmJvb2xfc2V0ZGVmYXVsdCgmZGlzay0+ZGlzY2FyZF9lbmFi bGUsICEhZGlzay0+cmVhZHdyaXRlKTsKKyAgICBsaWJ4bF9kZWZib29sX3NldGRlZmF1bHQoJmRp c2stPmNvbG9fZW5hYmxlLCBmYWxzZSk7CisgICAgbGlieGxfZGVmYm9vbF9zZXRkZWZhdWx0KCZk aXNrLT5jb2xvX3Jlc3RvcmVfZW5hYmxlLCBmYWxzZSk7CisKKyAgICByYyA9IGxpYnhsX19yZXNv bHZlX2RvbWlkKGdjLCBkaXNrLT5iYWNrZW5kX2RvbW5hbWUsICZkaXNrLT5iYWNrZW5kX2RvbWlk KTsKKyAgICBpZiAocmMgPCAwKSByZXR1cm4gcmM7CisKKyAgICAvKiBGb3JjZSBRZGlzayBiYWNr ZW5kIGZvciBDRFJPTSBkZXZpY2VzIG9mIGd1ZXN0cyB3aXRoIGEgZGV2aWNlIG1vZGVsLiAqLwor ICAgIGlmIChkaXNrLT5pc19jZHJvbSAhPSAwICYmCisgICAgICAgIGxpYnhsX19kb21haW5fdHlw ZShnYywgZG9taWQpID09IExJQlhMX0RPTUFJTl9UWVBFX0hWTSAmJgorICAgICAgICBsaWJ4bF9f ZGV2aWNlX21vZGVsX3ZlcnNpb25fcnVubmluZyhnYywgZG9taWQpICE9CisgICAgICAgIExJQlhM X0RFVklDRV9NT0RFTF9WRVJTSU9OX05PTkUpIHsKKyAgICAgICAgaWYgKCEoZGlzay0+YmFja2Vu ZCA9PSBMSUJYTF9ESVNLX0JBQ0tFTkRfUURJU0sgfHwKKyAgICAgICAgICAgICAgZGlzay0+YmFj a2VuZCA9PSBMSUJYTF9ESVNLX0JBQ0tFTkRfVU5LTk9XTikpIHsKKyAgICAgICAgICAgIExPR0Qo RVJST1IsIGRvbWlkLCAiQmFja2VuZCBmb3IgQ0QgZGV2aWNlcyBvbiBIVk0gZ3Vlc3RzIG11c3Qg YmUgUWRpc2siKTsKKyAgICAgICAgICAgIHJldHVybiBFUlJPUl9GQUlMOworICAgICAgICB9Cisg ICAgICAgIGRpc2stPmJhY2tlbmQgPSBMSUJYTF9ESVNLX0JBQ0tFTkRfUURJU0s7CisgICAgfQor CisgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX2Rpc2tfc2V0X2JhY2tlbmQoZ2MsIGRpc2spOworICAg IHJldHVybiByYzsKK30KKworaW50IGxpYnhsX19kZXZpY2VfZnJvbV9kaXNrKGxpYnhsX19nYyAq Z2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBsaWJ4bF9kZXZpY2VfZGlzayAqZGlzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfX2RldmljZSAqZGV2aWNlKQoreworICAgIGludCBkZXZpZDsKKworICAg IGRldmlkID0gbGlieGxfX2RldmljZV9kaXNrX2Rldl9udW1iZXIoZGlzay0+dmRldiwgTlVMTCwg TlVMTCk7CisgICAgaWYgKGRldmlkPT0tMSkgeworICAgICAgICBMT0dEKEVSUk9SLCBkb21pZCwg IkludmFsaWQgb3IgdW5zdXBwb3J0ZWQiIiB2aXJ0dWFsIGRpc2sgaWRlbnRpZmllciAlcyIsCisg ICAgICAgICAgICAgZGlzay0+dmRldik7CisgICAgICAgIHJldHVybiBFUlJPUl9JTlZBTDsKKyAg ICB9CisKKyAgICBkZXZpY2UtPmJhY2tlbmRfZG9taWQgPSBkaXNrLT5iYWNrZW5kX2RvbWlkOwor ICAgIGRldmljZS0+YmFja2VuZF9kZXZpZCA9IGRldmlkOworCisgICAgc3dpdGNoIChkaXNrLT5i YWNrZW5kKSB7CisgICAgICAgIGNhc2UgTElCWExfRElTS19CQUNLRU5EX1BIWToKKyAgICAgICAg ICAgIGRldmljZS0+YmFja2VuZF9raW5kID0gTElCWExfX0RFVklDRV9LSU5EX1ZCRDsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExJQlhMX0RJU0tfQkFDS0VORF9UQVA6CisgICAg ICAgICAgICBkZXZpY2UtPmJhY2tlbmRfa2luZCA9IExJQlhMX19ERVZJQ0VfS0lORF9WQkQ7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMSUJYTF9ESVNLX0JBQ0tFTkRfUURJU0s6 CisgICAgICAgICAgICBkZXZpY2UtPmJhY2tlbmRfa2luZCA9IExJQlhMX19ERVZJQ0VfS0lORF9R RElTSzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg TE9HRChFUlJPUiwgZG9taWQsICJVbnJlY29nbml6ZWQgZGlzayBiYWNrZW5kIHR5cGU6ICVkIiwK KyAgICAgICAgICAgICAgICAgZGlzay0+YmFja2VuZCk7CisgICAgICAgICAgICByZXR1cm4gRVJS T1JfSU5WQUw7CisgICAgfQorCisgICAgZGV2aWNlLT5kb21pZCA9IGRvbWlkOworICAgIGRldmlj ZS0+ZGV2aWQgPSBkZXZpZDsKKyAgICBkZXZpY2UtPmtpbmQgID0gTElCWExfX0RFVklDRV9LSU5E X1ZCRDsKKworICAgIHJldHVybiAwOworfQorCisvKiBTcGVjaWZpYyBmdW5jdGlvbiBjYWxsZWQg ZGlyZWN0bHkgb25seSBieSBsb2NhbCBkaXNrIGF0dGFjaCwKKyAqIGFsbCBvdGhlciB1c2VycyBz aG91bGQgaW5zdGVhZCB1c2UgdGhlIHJlZ3VsYXIKKyAqIGxpYnhsX19kZXZpY2VfZGlza19hZGQg d3JhcHBlcgorICoKKyAqIFRoZSAob3B0aW9uYWxseSkgcGFzc2VkIGZ1bmN0aW9uIGdldF92ZGV2 IHdpbGwgYmUgdXNlZCB0bworICogc2V0IHRoZSB2ZGV2IHRoZSBkaXNrIHNob3VsZCBiZSBhdHRh Y2hlZCB0by4gV2hlbiBpdCBpcyBzZXQgdGhlIGNhbGxlcgorICogbXVzdCBhbHNvIHBhc3MgZ2V0 X3ZkZXZfdXNlciwgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gZ2V0X3ZkZXYuCisgKgorICogVGhl IHBhc3NlZCBnZXRfdmRldiBmdW5jdGlvbiBpcyBhbHNvIGluIGNoYXJnZSBvZiBwcmludGluZwor ICogdGhlIGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZSB3aGVuIGFwcHJvcGlhdGUuCisgKi8K K3N0YXRpYyB2b2lkIGRldmljZV9kaXNrX2FkZChsaWJ4bF9fZWdjICplZ2MsIHVpbnQzMl90IGRv bWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX2Rpc2sgKmRpc2ss CisgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fYW9fZGV2aWNlICphb2RldiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmdldF92ZGV2KGxpYnhsX19nYyAqLCB2b2lk ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4c190cmFuc2Fj dGlvbl90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmdldF92ZGV2X3VzZXIp Cit7CisgICAgU1RBVEVfQU9fR0MoYW9kZXYtPmFvKTsKKyAgICBmbGV4YXJyYXlfdCAqZnJvbnQg PSBOVUxMOworICAgIGZsZXhhcnJheV90ICpiYWNrID0gTlVMTDsKKyAgICBjaGFyICpkZXYgPSBO VUxMLCAqc2NyaXB0OworICAgIGxpYnhsX19kZXZpY2UgKmRldmljZTsKKyAgICBpbnQgcmM7Cisg ICAgbGlieGxfY3R4ICpjdHggPSBnYy0+b3duZXI7CisgICAgeHNfdHJhbnNhY3Rpb25fdCB0ID0g WEJUX05VTEw7CisgICAgbGlieGxfZG9tYWluX2NvbmZpZyBkX2NvbmZpZzsKKyAgICBsaWJ4bF9k ZXZpY2VfZGlzayBkaXNrX3NhdmVkOworICAgIGxpYnhsX19kb21haW5fdXNlcmRhdGFfbG9jayAq bG9jayA9IE5VTEw7CisKKyAgICBsaWJ4bF9kb21haW5fY29uZmlnX2luaXQoJmRfY29uZmlnKTsK KyAgICBsaWJ4bF9kZXZpY2VfZGlza19pbml0KCZkaXNrX3NhdmVkKTsKKyAgICBsaWJ4bF9kZXZp Y2VfZGlza19jb3B5KGN0eCwgJmRpc2tfc2F2ZWQsIGRpc2spOworCisgICAgbGlieGxfZG9tYWlu X3R5cGUgdHlwZSA9IGxpYnhsX19kb21haW5fdHlwZShnYywgZG9taWQpOworICAgIGlmICh0eXBl ID09IExJQlhMX0RPTUFJTl9UWVBFX0lOVkFMSUQpIHsKKyAgICAgICAgcmMgPSBFUlJPUl9GQUlM OworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGdldF92ZGV2ICE9 IE5VTEwgLT4gbG9jYWwgYXR0YWNoCisgICAgICogZ2V0X3ZkZXYgPT0gTlVMTCAtPiBibG9jayBh dHRhY2gKKyAgICAgKgorICAgICAqIFdlIGRvbid0IGNhcmUgYWJvdXQgbG9jYWwgYXR0YWNoIHN0 YXRlIGJlY2F1c2UgaXQncyBvbmx5CisgICAgICogaW50ZXJtZWRpYXRlIHN0YXRlLgorICAgICAq LworICAgIGlmICghZ2V0X3ZkZXYgJiYgYW9kZXYtPnVwZGF0ZV9qc29uKSB7CisgICAgICAgIGxv Y2sgPSBsaWJ4bF9fbG9ja19kb21haW5fdXNlcmRhdGEoZ2MsIGRvbWlkKTsKKyAgICAgICAgaWYg KCFsb2NrKSB7CisgICAgICAgICAgICByYyA9IEVSUk9SX0xPQ0tfRkFJTDsKKyAgICAgICAgICAg IGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAgcmMgPSBsaWJ4bF9fZ2V0X2RvbWFpbl9j b25maWd1cmF0aW9uKGdjLCBkb21pZCwgJmRfY29uZmlnKTsKKyAgICAgICAgaWYgKHJjKSBnb3Rv IG91dDsKKworICAgICAgICBERVZJQ0VfQUREKGRpc2ssIGRpc2tzLCBkb21pZCwgJmRpc2tfc2F2 ZWQsIENPTVBBUkVfRElTSywgJmRfY29uZmlnKTsKKworICAgICAgICByYyA9IGxpYnhsX19kbV9j aGVja19zdGFydChnYywgJmRfY29uZmlnLCBkb21pZCk7CisgICAgICAgIGlmIChyYykgZ290byBv dXQ7CisgICAgfQorCisgICAgZm9yICg7OykgeworICAgICAgICByYyA9IGxpYnhsX194c190cmFu c2FjdGlvbl9zdGFydChnYywgJnQpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAg ICAgIGlmIChnZXRfdmRldikgeworICAgICAgICAgICAgYXNzZXJ0KGdldF92ZGV2X3VzZXIpOwor ICAgICAgICAgICAgZGlzay0+dmRldiA9IGdldF92ZGV2KGdjLCBnZXRfdmRldl91c2VyLCB0KTsK KyAgICAgICAgICAgIGlmIChkaXNrLT52ZGV2ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBy YyA9IEVSUk9SX0ZBSUw7CisgICAgICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKworICAgICAgICByYyA9IGxpYnhsX19kZXZpY2VfZGlza19zZXRkZWZhdWx0 KGdjLCBkaXNrLCBkb21pZCk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICAgICAg ZnJvbnQgPSBmbGV4YXJyYXlfbWFrZShnYywgMTYsIDEpOworICAgICAgICBiYWNrID0gZmxleGFy cmF5X21ha2UoZ2MsIDE2LCAxKTsKKworICAgICAgICBHQ05FVyhkZXZpY2UpOworICAgICAgICBy YyA9IGxpYnhsX19kZXZpY2VfZnJvbV9kaXNrKGdjLCBkb21pZCwgZGlzaywgZGV2aWNlKTsKKyAg ICAgICAgaWYgKHJjICE9IDApIHsKKyAgICAgICAgICAgIExPR0QoRVJST1IsIGRvbWlkLCAiSW52 YWxpZCBvciB1bnN1cHBvcnRlZCIiIHZpcnR1YWwgZGlzayBpZGVudGlmaWVyICVzIiwKKyAgICAg ICAgICAgICAgICAgZGlzay0+dmRldik7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAg fQorCisgICAgICAgIHJjID0gbGlieGxfX2RldmljZV9leGlzdHMoZ2MsIHQsIGRldmljZSk7Cisg ICAgICAgIGlmIChyYyA8IDApIGdvdG8gb3V0OworICAgICAgICBpZiAocmMgPT0gMSkgeyAgICAg ICAgICAgICAgLyogYWxyZWFkeSBleGlzdHMgaW4geGVuc3RvcmUgKi8KKyAgICAgICAgICAgIExP R0QoRVJST1IsIGRvbWlkLCAiZGV2aWNlIGFscmVhZHkgZXhpc3RzIGluIHhlbnN0b3JlIik7Cisg ICAgICAgICAgICBhb2Rldi0+YWN0aW9uID0gTElCWExfX0RFVklDRV9BQ1RJT05fQUREOyAvKiBm b3IgZXJyb3IgbWVzc2FnZSAqLworICAgICAgICAgICAgcmMgPSBFUlJPUl9ERVZJQ0VfRVhJU1RT OworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGRp c2stPmJhY2tlbmQpIHsKKyAgICAgICAgICAgIGNhc2UgTElCWExfRElTS19CQUNLRU5EX1BIWToK KyAgICAgICAgICAgICAgICBkZXYgPSBkaXNrLT5wZGV2X3BhdGg7CisKKyAgICAgICAgZG9fYmFj a2VuZF9waHk6CisgICAgICAgICAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCAicGFyYW1z Iik7CisgICAgICAgICAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCBkZXYpOworCisgICAg ICAgICAgICAgICAgc2NyaXB0ID0gbGlieGxfX2Fic19wYXRoKGdjLCBkaXNrLT5zY3JpcHQ/OiAi YmxvY2siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9f eGVuX3NjcmlwdF9kaXJfcGF0aCgpKTsKKyAgICAgICAgICAgICAgICBmbGV4YXJyYXlfYXBwZW5k X3BhaXIoYmFjaywgInNjcmlwdCIsIHNjcmlwdCk7CisKKyAgICAgICAgICAgICAgICBhc3NlcnQo ZGV2aWNlLT5iYWNrZW5kX2tpbmQgPT0gTElCWExfX0RFVklDRV9LSU5EX1ZCRCk7CisgICAgICAg ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgTElCWExfRElTS19CQUNLRU5EX1RB UDoKKyAgICAgICAgICAgICAgICBpZiAoZGV2ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAg ICAgZGV2ID0gbGlieGxfX2Jsa3RhcF9kZXZwYXRoKGdjLCBkaXNrLT5wZGV2X3BhdGgsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNrLT5mb3JtYXQp OworICAgICAgICAgICAgICAgICAgICBpZiAoIWRldikgeworICAgICAgICAgICAgICAgICAgICAg ICAgTE9HRChFUlJPUiwgZG9taWQsICJGYWlsZWQgdG8gZ2V0IGJsa3RhcCBkZXZwYXRoIGZvciAl cCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2stPnBkZXZfcGF0aCk7CisgICAg ICAgICAgICAgICAgICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgICAgICAgICAgICAg ICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssICJ0YXBkaXNrLXBhcmFtcyIp OworICAgICAgICAgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgR0NTUFJJTlRGKCIlczol cyIsCisgICAgICAgICAgICAgICAgICAgIGxpYnhsX19kZXZpY2VfZGlza19zdHJpbmdfb2ZfZm9y bWF0KGRpc2stPmZvcm1hdCksCisgICAgICAgICAgICAgICAgICAgIGRpc2stPnBkZXZfcGF0aCkp OworCisgICAgICAgICAgICAgICAgLyogdGFwIGJhY2tlbmRzIHdpdGggc2NyaXB0cyBhcmUgcmVq ZWN0ZWQgYnkKKyAgICAgICAgICAgICAgICAgKiBsaWJ4bF9fZGV2aWNlX2Rpc2tfc2V0X2JhY2tl bmQgKi8KKyAgICAgICAgICAgICAgICBhc3NlcnQoIWRpc2stPnNjcmlwdCk7CisKKyAgICAgICAg ICAgICAgICAvKiBub3cgY3JlYXRlIGEgcGh5IGRldmljZSB0byBleHBvcnQgdGhlIGRldmljZSB0 byB0aGUgZ3Vlc3QgKi8KKyAgICAgICAgICAgICAgICBnb3RvIGRvX2JhY2tlbmRfcGh5OworICAg ICAgICAgICAgY2FzZSBMSUJYTF9ESVNLX0JBQ0tFTkRfUURJU0s6CisgICAgICAgICAgICAgICAg ZmxleGFycmF5X2FwcGVuZChiYWNrLCAicGFyYW1zIik7CisgICAgICAgICAgICAgICAgZmxleGFy cmF5X2FwcGVuZChiYWNrLCBHQ1NQUklOVEYoIiVzOiVzIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpYnhsX19kZXZpY2VfZGlza19zdHJpbmdfb2ZfZm9ybWF0KGRpc2stPmZvcm1h dCksIGRpc2stPnBkZXZfcGF0aCkpOworICAgICAgICAgICAgICAgIGlmIChsaWJ4bF9kZWZib29s X3ZhbChkaXNrLT5jb2xvX2VuYWJsZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZmxleGFycmF5 X2FwcGVuZChiYWNrLCAiY29sby1ob3N0Iik7CisgICAgICAgICAgICAgICAgICAgIGZsZXhhcnJh eV9hcHBlbmQoYmFjaywgbGlieGxfX3NwcmludGYoZ2MsICIlcyIsIGRpc2stPmNvbG9faG9zdCkp OworICAgICAgICAgICAgICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssICJjb2xvLXBvcnQi KTsKKyAgICAgICAgICAgICAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCBsaWJ4bF9fc3By aW50ZihnYywgIiVkIiwgZGlzay0+Y29sb19wb3J0KSk7CisgICAgICAgICAgICAgICAgICAgIGZs ZXhhcnJheV9hcHBlbmQoYmFjaywgImNvbG8tZXhwb3J0Iik7CisgICAgICAgICAgICAgICAgICAg IGZsZXhhcnJheV9hcHBlbmQoYmFjaywgbGlieGxfX3NwcmludGYoZ2MsICIlcyIsIGRpc2stPmNv bG9fZXhwb3J0KSk7CisgICAgICAgICAgICAgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywg ImFjdGl2ZS1kaXNrIik7CisgICAgICAgICAgICAgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFj aywgbGlieGxfX3NwcmludGYoZ2MsICIlcyIsIGRpc2stPmFjdGl2ZV9kaXNrKSk7CisgICAgICAg ICAgICAgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgImhpZGRlbi1kaXNrIik7CisgICAg ICAgICAgICAgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgbGlieGxfX3NwcmludGYoZ2Ms ICIlcyIsIGRpc2stPmhpZGRlbl9kaXNrKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIGFzc2VydChkZXZpY2UtPmJhY2tlbmRfa2luZCA9PSBMSUJYTF9fREVWSUNFX0tJTkRf UURJU0spOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAg ICAgICAgICAgICAgICBMT0dEKEVSUk9SLCBkb21pZCwgIlVucmVjb2duaXplZCBkaXNrIGJhY2tl bmQgdHlwZTogJWQiLAorICAgICAgICAgICAgICAgICAgICAgZGlzay0+YmFja2VuZCk7CisgICAg ICAgICAgICAgICAgcmMgPSBFUlJPUl9JTlZBTDsKKyAgICAgICAgICAgICAgICBnb3RvIG91dDsK KyAgICAgICAgfQorCisgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgImZyb250ZW5kLWlk Iik7CisgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgR0NTUFJJTlRGKCIlZCIsIGRvbWlk KSk7CisgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgIm9ubGluZSIpOworICAgICAgICBm bGV4YXJyYXlfYXBwZW5kKGJhY2ssICIxIik7CisgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFj aywgInJlbW92YWJsZSIpOworICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssIEdDU1BSSU5U RigiJWQiLCAoZGlzay0+cmVtb3ZhYmxlKSA/IDEgOiAwKSk7CisgICAgICAgIGZsZXhhcnJheV9h cHBlbmQoYmFjaywgImJvb3RhYmxlIik7CisgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywg R0NTUFJJTlRGKCIlZCIsIDEpKTsKKyAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCAic3Rh dGUiKTsKKyAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCBHQ1NQUklOVEYoIiVkIiwgWGVu YnVzU3RhdGVJbml0aWFsaXNpbmcpKTsKKyAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCAi ZGV2Iik7CisgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgZGlzay0+dmRldik7CisgICAg ICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgInR5cGUiKTsKKyAgICAgICAgZmxleGFycmF5X2Fw cGVuZChiYWNrLCBsaWJ4bF9fZGV2aWNlX2Rpc2tfc3RyaW5nX29mX2JhY2tlbmQoZGlzay0+YmFj a2VuZCkpOworICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssICJtb2RlIik7CisgICAgICAg IGZsZXhhcnJheV9hcHBlbmQoYmFjaywgZGlzay0+cmVhZHdyaXRlID8gInciIDogInIiKTsKKyAg ICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCAiZGV2aWNlLXR5cGUiKTsKKyAgICAgICAgZmxl eGFycmF5X2FwcGVuZChiYWNrLCBkaXNrLT5pc19jZHJvbSA/ICJjZHJvbSIgOiAiZGlzayIpOwor ICAgICAgICBpZiAoZGlzay0+ZGlyZWN0X2lvX3NhZmUpIHsKKyAgICAgICAgICAgIGZsZXhhcnJh eV9hcHBlbmQoYmFjaywgImRpcmVjdC1pby1zYWZlIik7CisgICAgICAgICAgICBmbGV4YXJyYXlf YXBwZW5kKGJhY2ssICIxIik7CisgICAgICAgIH0KKyAgICAgICAgZmxleGFycmF5X2FwcGVuZF9w YWlyKGJhY2ssICJkaXNjYXJkLWVuYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsaWJ4bF9kZWZib29sX3ZhbChkaXNrLT5kaXNjYXJkX2VuYWJsZSkgPworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIjEiIDogIjAiKTsKKworICAgICAgICBmbGV4YXJyYXlfYXBwZW5k KGZyb250LCAiYmFja2VuZC1pZCIpOworICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGZyb250LCBH Q1NQUklOVEYoIiVkIiwgZGlzay0+YmFja2VuZF9kb21pZCkpOworICAgICAgICBmbGV4YXJyYXlf YXBwZW5kKGZyb250LCAic3RhdGUiKTsKKyAgICAgICAgZmxleGFycmF5X2FwcGVuZChmcm9udCwg R0NTUFJJTlRGKCIlZCIsIFhlbmJ1c1N0YXRlSW5pdGlhbGlzaW5nKSk7CisgICAgICAgIGZsZXhh cnJheV9hcHBlbmQoZnJvbnQsICJ2aXJ0dWFsLWRldmljZSIpOworICAgICAgICBmbGV4YXJyYXlf YXBwZW5kKGZyb250LCBHQ1NQUklOVEYoIiVkIiwgZGV2aWNlLT5kZXZpZCkpOworICAgICAgICBm bGV4YXJyYXlfYXBwZW5kKGZyb250LCAiZGV2aWNlLXR5cGUiKTsKKyAgICAgICAgZmxleGFycmF5 X2FwcGVuZChmcm9udCwgZGlzay0+aXNfY2Ryb20gPyAiY2Ryb20iIDogImRpc2siKTsKKworICAg ICAgICAvKgorICAgICAgICAgKiBPbGQgUFYga2VybmVsIGRpc2sgZnJvbnRlbmRzIGJlZm9yZSAy LjYuMjYgcmVseSBvbiB0b29sIHN0YWNrIHRvCisgICAgICAgICAqIHdyaXRlIGRpc2sgbmF0aXZl IHByb3RvY29sIHRvIGZyb250ZW5kIG5vZGUuIFhlbmQgZG9lcyB0aGlzLCBwb3J0CisgICAgICAg ICAqIHRoaXMgYmVoYXZpb3VyIHRvIHhsLgorICAgICAgICAgKgorICAgICAgICAgKiBOZXcga2Vy bmVscyB3cml0ZSB0aGlzIG5vZGUgdGhlbXNlbHZlcy4gSW4gdGhhdCBjYXNlIGl0IGp1c3QKKyAg ICAgICAgICogb3ZlcndyaXRlcyBhbiBleGlzdGluZyBub2RlIHdoaWNoIGlzIE9LLgorICAgICAg ICAgKi8KKyAgICAgICAgaWYgKHR5cGUgPT0gTElCWExfRE9NQUlOX1RZUEVfUFYpIHsKKyAgICAg ICAgICAgIGNvbnN0IGNoYXIgKnByb3RvY29sID0KKyAgICAgICAgICAgICAgICB4Y19kb21haW5f Z2V0X25hdGl2ZV9wcm90b2NvbChjdHgtPnhjaCwgZG9taWQpOworICAgICAgICAgICAgaWYgKHBy b3RvY29sKSB7CisgICAgICAgICAgICAgICAgZmxleGFycmF5X2FwcGVuZChmcm9udCwgInByb3Rv Y29sIik7CisgICAgICAgICAgICAgICAgZmxleGFycmF5X2FwcGVuZChmcm9udCwgbGlieGxfX3N0 cmR1cChnYywgcHJvdG9jb2wpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg IGlmICghZ2V0X3ZkZXYgJiYgYW9kZXYtPnVwZGF0ZV9qc29uKSB7CisgICAgICAgICAgICByYyA9 IGxpYnhsX19zZXRfZG9tYWluX2NvbmZpZ3VyYXRpb24oZ2MsIGRvbWlkLCAmZF9jb25maWcpOwor ICAgICAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIGxpYnhs X19kZXZpY2VfZ2VuZXJpY19hZGQoZ2MsIHQsIGRldmljZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF9feHNfa3ZzX29mX2ZsZXhhcnJheShnYywgYmFjayksCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX3hzX2t2c19vZl9mbGV4YXJyYXko Z2MsIGZyb250KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKwor ICAgICAgICByYyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9jb21taXQoZ2MsICZ0KTsKKyAgICAg ICAgaWYgKCFyYykgYnJlYWs7CisgICAgICAgIGlmIChyYyA8IDApIGdvdG8gb3V0OworICAgIH0K KworICAgIGFvZGV2LT5kZXYgPSBkZXZpY2U7CisgICAgYW9kZXYtPmFjdGlvbiA9IExJQlhMX19E RVZJQ0VfQUNUSU9OX0FERDsKKyAgICBsaWJ4bF9fd2FpdF9kZXZpY2VfY29ubmVjdGlvbihlZ2Ms IGFvZGV2KTsKKworICAgIHJjID0gMDsKKworb3V0OgorICAgIGxpYnhsX194c190cmFuc2FjdGlv bl9hYm9ydChnYywgJnQpOworICAgIGlmIChsb2NrKSBsaWJ4bF9fdW5sb2NrX2RvbWFpbl91c2Vy ZGF0YShsb2NrKTsKKyAgICBsaWJ4bF9kZXZpY2VfZGlza19kaXNwb3NlKCZkaXNrX3NhdmVkKTsK KyAgICBsaWJ4bF9kb21haW5fY29uZmlnX2Rpc3Bvc2UoJmRfY29uZmlnKTsKKyAgICBhb2Rldi0+ cmMgPSByYzsKKyAgICBpZiAocmMpIGFvZGV2LT5jYWxsYmFjayhlZ2MsIGFvZGV2KTsKKyAgICBy ZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGxpYnhsX19kZXZpY2VfZGlza19hZGQobGlieGxfX2Vn YyAqZWdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfZGV2aWNlX2Rpc2sgKmRpc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX19hb19kZXZpY2UgKmFvZGV2KQoreworICAgIGRldmljZV9kaXNrX2FkZChl Z2MsIGRvbWlkLCBkaXNrLCBhb2RldiwgTlVMTCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgbGli eGxfX2RldmljZV9kaXNrX2Zyb21feGVuc3RvcmUobGlieGxfX2djICpnYywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbGlieGxfcGF0aCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX2Rpc2sg KmRpc2spCit7CisgICAgbGlieGxfY3R4ICpjdHggPSBsaWJ4bF9fZ2Nfb3duZXIoZ2MpOworICAg IHVuc2lnbmVkIGludCBsZW47CisgICAgY2hhciAqdG1wOworICAgIGludCByYzsKKworICAgIGxp YnhsX2RldmljZV9kaXNrX2luaXQoZGlzayk7CisKKyAgICBjb25zdCBjaGFyICpiYWNrZW5kX3Bh dGg7CisgICAgcmMgPSBsaWJ4bF9feHNfcmVhZF9jaGVja2VkKGdjLCBYQlRfTlVMTCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9iYWNrZW5kIiwgbGlieGxf cGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiYWNrZW5kX3BhdGgpOwor ICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICBpZiAoIWJhY2tlbmRfcGF0aCkgeworICAgICAg ICBMT0coRVJST1IsICJkaXNrICVzIGRvZXMgbm90IGV4aXN0IChubyBiYWNrZW5kIHBhdGgiLCBs aWJ4bF9wYXRoKTsKKyAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICBnb3RvIG91dDsK KyAgICB9CisKKyAgICByYyA9IGxpYnhsX19iYWNrZW5kcGF0aF9wYXJzZV9kb21pZChnYywgYmFj a2VuZF9wYXRoLCAmZGlzay0+YmFja2VuZF9kb21pZCk7CisgICAgaWYgKHJjKSB7CisgICAgICAg IExPRyhFUlJPUiwgIlVuYWJsZSB0byBmZXRjaCBkZXZpY2UgYmFja2VuZCBkb21pZCBmcm9tICVz IiwgYmFja2VuZF9wYXRoKTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgLyoKKyAg ICAgKiAicGFyYW1zIiBtYXkgbm90IGJlIHByZXNlbnQ7IGJ1dCBldmVyeXRoaW5nIGVsc2UgbXVz dCBiZS4KKyAgICAgKiBjb2xvIHJlbGVhdGVkIGVudHJpZXMoY29sby1ob3N0LCBjb2xvLXBvcnQs IGNvbG8tZXhwb3J0LAorICAgICAqIGFjdGl2ZS1kaXNrIGFuZCBoaWRkZW4tZGlzaykgYXJlIHBy ZXNlbnQgb25seSBpZiBjb2xvIGlzCisgICAgICogZW5hYmxlZC4KKyAgICAgKi8KKyAgICB0bXAg PSB4c19yZWFkKGN0eC0+eHNoLCBYQlRfTlVMTCwKKyAgICAgICAgICAgICAgICAgIEdDU1BSSU5U RigiJXMvcGFyYW1zIiwgbGlieGxfcGF0aCksICZsZW4pOworICAgIGlmICh0bXAgJiYgc3RyY2hy KHRtcCwgJzonKSkgeworICAgICAgICBkaXNrLT5wZGV2X3BhdGggPSBzdHJkdXAoc3RyY2hyKHRt cCwgJzonKSArIDEpOworICAgICAgICBmcmVlKHRtcCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg ZGlzay0+cGRldl9wYXRoID0gdG1wOworICAgIH0KKworICAgIHRtcCA9IHhzX3JlYWQoY3R4LT54 c2gsIFhCVF9OVUxMLAorICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9jb2xvLWhvc3Qi LCBsaWJ4bF9wYXRoKSwgJmxlbik7CisgICAgaWYgKHRtcCkgeworICAgICAgICBsaWJ4bF9kZWZi b29sX3NldCgmZGlzay0+Y29sb19lbmFibGUsIHRydWUpOworICAgICAgICBkaXNrLT5jb2xvX2hv c3QgPSB0bXA7CisKKyAgICAgICAgdG1wID0geHNfcmVhZChjdHgtPnhzaCwgWEJUX05VTEwsCisg ICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9jb2xvLXBvcnQiLCBsaWJ4bF9wYXRo KSwgJmxlbik7CisgICAgICAgIGlmICghdG1wKSB7CisgICAgICAgICAgICBMT0coRVJST1IsICJN aXNzaW5nIHhlbnN0b3JlIG5vZGUgJXMvY29sby1wb3J0IiwgbGlieGxfcGF0aCk7CisgICAgICAg ICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIH0KKyAgICAgICAgZGlzay0+Y29sb19wb3J0ID0g YXRvaSh0bXApOworCisjZGVmaW5lIFhTX1JFQURfQ09MTyhwYXJhbSwgaXRlbSkgZG8geyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHRtcCA9IHhzX3JlYWQoY3R4 LT54c2gsIFhCVF9OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg ICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy8iI3BhcmFtIiIsIGxpYnhsX3BhdGgpLCAmbGVu KTsgICAgICAgICBcCisgICAgICAgIGlmICghdG1wKSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBMT0coRVJST1IsICJN aXNzaW5nIHhlbnN0b3JlIG5vZGUgJXMvIiNwYXJhbSIiLCBsaWJ4bF9wYXRoKTsgICBcCisgICAg ICAgICAgICBnb3RvIGNsZWFudXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRpc2stPml0ZW0gPSB0bXA7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxl ICgwKQorICAgICAgICBYU19SRUFEX0NPTE8oY29sby1leHBvcnQsIGNvbG9fZXhwb3J0KTsKKyAg ICAgICAgWFNfUkVBRF9DT0xPKGFjdGl2ZS1kaXNrLCBhY3RpdmVfZGlzayk7CisgICAgICAgIFhT X1JFQURfQ09MTyhoaWRkZW4tZGlzaywgaGlkZGVuX2Rpc2spOworI3VuZGVmIFhTX1JFQURfQ09M TworICAgIH0gZWxzZSB7CisgICAgICAgIGxpYnhsX2RlZmJvb2xfc2V0KCZkaXNrLT5jb2xvX2Vu YWJsZSwgZmFsc2UpOworICAgIH0KKworICAgIHRtcCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRf TlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL3R5cGUiLCBsaWJ4 bF9wYXRoKSk7CisgICAgaWYgKCF0bXApIHsKKyAgICAgICAgTE9HKEVSUk9SLCAiTWlzc2luZyB4 ZW5zdG9yZSBub2RlICVzL3R5cGUiLCBsaWJ4bF9wYXRoKTsKKyAgICAgICAgZ290byBjbGVhbnVw OworICAgIH0KKyAgICBsaWJ4bF9zdHJpbmdfdG9fYmFja2VuZChjdHgsIHRtcCwgJihkaXNrLT5i YWNrZW5kKSk7CisKKyAgICBkaXNrLT52ZGV2ID0geHNfcmVhZChjdHgtPnhzaCwgWEJUX05VTEws CisgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9kZXYiLCBsaWJ4bF9wYXRo KSwgJmxlbik7CisgICAgaWYgKCFkaXNrLT52ZGV2KSB7CisgICAgICAgIExPRyhFUlJPUiwgIk1p c3NpbmcgeGVuc3RvcmUgbm9kZSAlcy9kZXYiLCBsaWJ4bF9wYXRoKTsKKyAgICAgICAgZ290byBj bGVhbnVwOworICAgIH0KKworICAgIHRtcCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwg bGlieGxfX3NwcmludGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAoZ2MsICIlcy9yZW1vdmFi bGUiLCBsaWJ4bF9wYXRoKSk7CisgICAgaWYgKCF0bXApIHsKKyAgICAgICAgTE9HKEVSUk9SLCAi TWlzc2luZyB4ZW5zdG9yZSBub2RlICVzL3JlbW92YWJsZSIsIGxpYnhsX3BhdGgpOworICAgICAg ICBnb3RvIGNsZWFudXA7CisgICAgfQorICAgIGRpc2stPnJlbW92YWJsZSA9IGF0b2kodG1wKTsK KworICAgIHRtcCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwgR0NTUFJJTlRGKCIlcy9t b2RlIiwgbGlieGxfcGF0aCkpOworICAgIGlmICghdG1wKSB7CisgICAgICAgIExPRyhFUlJPUiwg Ik1pc3NpbmcgeGVuc3RvcmUgbm9kZSAlcy9tb2RlIiwgbGlieGxfcGF0aCk7CisgICAgICAgIGdv dG8gY2xlYW51cDsKKyAgICB9CisgICAgaWYgKCFzdHJjbXAodG1wLCAidyIpKQorICAgICAgICBk aXNrLT5yZWFkd3JpdGUgPSAxOworICAgIGVsc2UKKyAgICAgICAgZGlzay0+cmVhZHdyaXRlID0g MDsKKworICAgIHRtcCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL2RldmljZS10eXBlIiwgbGlieGxfcGF0aCkpOwor ICAgIGlmICghdG1wKSB7CisgICAgICAgIExPRyhFUlJPUiwgIk1pc3NpbmcgeGVuc3RvcmUgbm9k ZSAlcy9kZXZpY2UtdHlwZSIsIGxpYnhsX3BhdGgpOworICAgICAgICBnb3RvIGNsZWFudXA7Cisg ICAgfQorICAgIGRpc2stPmlzX2Nkcm9tID0gIXN0cmNtcCh0bXAsICJjZHJvbSIpOworCisgICAg ZGlzay0+Zm9ybWF0ID0gTElCWExfRElTS19GT1JNQVRfVU5LTk9XTjsKKworICAgIHJldHVybiAw OworY2xlYW51cDoKKyAgICByYyA9IEVSUk9SX0ZBSUw7Cisgb3V0OgorICAgIGxpYnhsX2Rldmlj ZV9kaXNrX2Rpc3Bvc2UoZGlzayk7CisgICAgcmV0dXJuIHJjOworfQorCitpbnQgbGlieGxfdmRl dl90b19kZXZpY2VfZGlzayhsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2ZGV2LCBsaWJ4bF9kZXZpY2VfZGlz ayAqZGlzaykKK3sKKyAgICBHQ19JTklUKGN0eCk7CisgICAgY2hhciAqZG9tX3hsX3BhdGgsICps aWJ4bF9wYXRoOworICAgIGludCBkZXZpZCA9IGxpYnhsX19kZXZpY2VfZGlza19kZXZfbnVtYmVy KHZkZXYsIE5VTEwsIE5VTEwpOworICAgIGludCByYyA9IEVSUk9SX0ZBSUw7CisKKyAgICBpZiAo ZGV2aWQgPCAwKQorICAgICAgICByZXR1cm4gRVJST1JfSU5WQUw7CisKKyAgICBsaWJ4bF9kZXZp Y2VfZGlza19pbml0KGRpc2spOworCisgICAgZG9tX3hsX3BhdGggPSBsaWJ4bF9feHNfbGlieGxf cGF0aChnYywgZG9taWQpOworICAgIGlmICghZG9tX3hsX3BhdGgpIHsKKyAgICAgICAgZ290byBv dXQ7CisgICAgfQorICAgIGxpYnhsX3BhdGggPSBHQ1NQUklOVEYoIiVzL2RldmljZS92YmQvJWQi LCBkb21feGxfcGF0aCwgZGV2aWQpOworCisgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX2Rpc2tfZnJv bV94ZW5zdG9yZShnYywgbGlieGxfcGF0aCwgZGlzayk7CitvdXQ6CisgICAgR0NfRlJFRTsKKyAg ICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbGlieGxfX2FwcGVuZF9kaXNrX2xpc3QobGli eGxfX2djICpnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsaWJ4bF9kZXZpY2VfZGlzayAqKmRpc2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCAqbmRpc2tzKQoreworICAgIGNoYXIgKmxpYnhsX2Rpcl9wYXRo ID0gTlVMTDsKKyAgICBjaGFyICoqZGlyID0gTlVMTDsKKyAgICB1bnNpZ25lZCBpbnQgbiA9IDA7 CisgICAgbGlieGxfZGV2aWNlX2Rpc2sgKnBkaXNrID0gTlVMTCwgKnBkaXNrX2VuZCA9IE5VTEw7 CisgICAgaW50IHJjPTA7CisgICAgaW50IGluaXRpYWxfZGlza3MgPSAqbmRpc2tzOworCisgICAg bGlieGxfZGlyX3BhdGggPSBHQ1NQUklOVEYoIiVzL2RldmljZS92YmQiLAorICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfX3hzX2xpYnhsX3BhdGgoZ2MsIGRvbWlkKSk7CisgICAgZGlyID0g bGlieGxfX3hzX2RpcmVjdG9yeShnYywgWEJUX05VTEwsIGxpYnhsX2Rpcl9wYXRoLCAmbik7Cisg ICAgaWYgKGRpciAmJiBuKSB7CisgICAgICAgIGxpYnhsX2RldmljZV9kaXNrICp0bXA7CisgICAg ICAgIHRtcCA9IHJlYWxsb2MoKmRpc2tzLCBzaXplb2YgKGxpYnhsX2RldmljZV9kaXNrKSAqICgq bmRpc2tzICsgbikpOworICAgICAgICBpZiAodG1wID09IE5VTEwpCisgICAgICAgICAgICByZXR1 cm4gRVJST1JfTk9NRU07CisgICAgICAgICpkaXNrcyA9IHRtcDsKKyAgICAgICAgcGRpc2sgPSAq ZGlza3MgKyBpbml0aWFsX2Rpc2tzOworICAgICAgICBwZGlza19lbmQgPSAqZGlza3MgKyBpbml0 aWFsX2Rpc2tzICsgbjsKKyAgICAgICAgZm9yICg7IHBkaXNrIDwgcGRpc2tfZW5kOyBwZGlzaysr LCBkaXIrKykgeworICAgICAgICAgICAgY29uc3QgY2hhciAqcDsKKyAgICAgICAgICAgIHAgPSBH Q1NQUklOVEYoIiVzLyVzIiwgbGlieGxfZGlyX3BhdGgsICpkaXIpOworICAgICAgICAgICAgaWYg KChyYz1saWJ4bF9fZGV2aWNlX2Rpc2tfZnJvbV94ZW5zdG9yZShnYywgcCwgcGRpc2spKSkKKyAg ICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgICpuZGlza3MgKz0gMTsKKyAgICAg ICAgfQorICAgIH0KK291dDoKKyAgICByZXR1cm4gcmM7Cit9CisKK2xpYnhsX2RldmljZV9kaXNr ICpsaWJ4bF9kZXZpY2VfZGlza19saXN0KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwg aW50ICpudW0pCit7CisgICAgR0NfSU5JVChjdHgpOworICAgIGxpYnhsX2RldmljZV9kaXNrICpk aXNrcyA9IE5VTEw7CisgICAgaW50IHJjOworCisgICAgKm51bSA9IDA7CisKKyAgICByYyA9IGxp YnhsX19hcHBlbmRfZGlza19saXN0KGdjLCBkb21pZCwgJmRpc2tzLCBudW0pOworICAgIGlmIChy YykgZ290byBvdXRfZXJyOworCisgICAgR0NfRlJFRTsKKyAgICByZXR1cm4gZGlza3M7CisKK291 dF9lcnI6CisgICAgTE9HKEVSUk9SLCAiVW5hYmxlIHRvIGxpc3QgZGlza3MiKTsKKyAgICB3aGls ZSAoZGlza3MgJiYgKm51bSkgeworICAgICAgICAoKm51bSktLTsKKyAgICAgICAgbGlieGxfZGV2 aWNlX2Rpc2tfZGlzcG9zZSgmZGlza3NbKm51bV0pOworICAgIH0KKyAgICBmcmVlKGRpc2tzKTsK KyAgICByZXR1cm4gTlVMTDsKK30KKworaW50IGxpYnhsX2RldmljZV9kaXNrX2dldGluZm8obGli eGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfZGV2aWNlX2Rpc2sgKmRpc2ssIGxpYnhsX2Rpc2tpbmZvICpkaXNraW5mbykKK3sK KyAgICBHQ19JTklUKGN0eCk7CisgICAgY2hhciAqZG9tcGF0aCwgKmZlX3BhdGgsICpsaWJ4bF9w YXRoOworICAgIGNoYXIgKnZhbDsKKyAgICBpbnQgcmM7CisKKyAgICBkaXNraW5mby0+YmFja2Vu ZCA9IE5VTEw7CisKKyAgICBkb21wYXRoID0gbGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCBkb21p ZCk7CisgICAgZGlza2luZm8tPmRldmlkID0gbGlieGxfX2RldmljZV9kaXNrX2Rldl9udW1iZXIo ZGlzay0+dmRldiwgTlVMTCwgTlVMTCk7CisKKyAgICAvKiB0YXAgZGV2aWNlcyBlbnRyaWVzIGlu IHhlbnN0b3JlIGFyZSB3cml0dGVuIGFzIHZiZCBkZXZpY2VzLiAqLworICAgIGZlX3BhdGggPSBH Q1NQUklOVEYoIiVzL2RldmljZS92YmQvJWQiLCBkb21wYXRoLCBkaXNraW5mby0+ZGV2aWQpOwor ICAgIGxpYnhsX3BhdGggPSBHQ1NQUklOVEYoIiVzL2RldmljZS92YmQvJWQiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgbGlieGxfX3hzX2xpYnhsX3BhdGgoZ2MsIGRvbWlkKSwgZGlza2lu Zm8tPmRldmlkKTsKKyAgICBkaXNraW5mby0+YmFja2VuZCA9IHhzX3JlYWQoY3R4LT54c2gsIFhC VF9OVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL2Jh Y2tlbmQiLCBsaWJ4bF9wYXRoKSwgTlVMTCk7CisgICAgaWYgKCFkaXNraW5mby0+YmFja2VuZCkg eworICAgICAgICBHQ19GUkVFOworICAgICAgICByZXR1cm4gRVJST1JfRkFJTDsKKyAgICB9Cisg ICAgcmMgPSBsaWJ4bF9fYmFja2VuZHBhdGhfcGFyc2VfZG9taWQoZ2MsIGRpc2tpbmZvLT5iYWNr ZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkaXNraW5mby0+ YmFja2VuZF9pZCk7CisgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgIHZhbCA9IGxpYnhsX194 c19yZWFkKGdjLCBYQlRfTlVMTCwgR0NTUFJJTlRGKCIlcy9zdGF0ZSIsIGZlX3BhdGgpKTsKKyAg ICBkaXNraW5mby0+c3RhdGUgPSB2YWwgPyBzdHJ0b3VsKHZhbCwgTlVMTCwgMTApIDogLTE7Cisg ICAgdmFsID0gbGlieGxfX3hzX3JlYWQoZ2MsIFhCVF9OVUxMLCBHQ1NQUklOVEYoIiVzL2V2ZW50 LWNoYW5uZWwiLCBmZV9wYXRoKSk7CisgICAgZGlza2luZm8tPmV2dGNoID0gdmFsID8gc3RydG91 bCh2YWwsIE5VTEwsIDEwKSA6IC0xOworICAgIHZhbCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRf TlVMTCwgR0NTUFJJTlRGKCIlcy9yaW5nLXJlZiIsIGZlX3BhdGgpKTsKKyAgICBkaXNraW5mby0+ cnJlZiA9IHZhbCA/IHN0cnRvdWwodmFsLCBOVUxMLCAxMCkgOiAtMTsKKyAgICBkaXNraW5mby0+ ZnJvbnRlbmQgPSB4c19yZWFkKGN0eC0+eHNoLCBYQlRfTlVMTCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvZnJvbnRlbmQiLCBsaWJ4bF9wYXRoKSwgTlVM TCk7CisgICAgZGlza2luZm8tPmZyb250ZW5kX2lkID0gZG9taWQ7CisKKyAgICBHQ19GUkVFOwor ICAgIHJldHVybiAwOworCisgb3V0OgorICAgIGZyZWUoZGlza2luZm8tPmJhY2tlbmQpOworICAg IHJldHVybiByYzsKK30KKworaW50IGxpYnhsX2Nkcm9tX2luc2VydChsaWJ4bF9jdHggKmN0eCwg dWludDMyX3QgZG9taWQsIGxpYnhsX2RldmljZV9kaXNrICpkaXNrLAorICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBsaWJ4bF9hc3luY29wX2hvdyAqYW9faG93KQoreworICAgIEFPX0NSRUFU RShjdHgsIGRvbWlkLCBhb19ob3cpOworICAgIGludCBudW0gPSAwLCBpOworICAgIGxpYnhsX2Rl dmljZV9kaXNrICpkaXNrcyA9IE5VTEwsIGRpc2tfc2F2ZWQsIGRpc2tfZW1wdHk7CisgICAgbGli eGxfZG9tYWluX2NvbmZpZyBkX2NvbmZpZzsKKyAgICBpbnQgcmMsIGRtX3ZlcjsKKyAgICBsaWJ4 bF9fZGV2aWNlIGRldmljZTsKKyAgICBjb25zdCBjaGFyICpiZV9wYXRoLCAqbGlieGxfcGF0aDsK KyAgICBjaGFyICogdG1wOworICAgIGxpYnhsX19kb21haW5fdXNlcmRhdGFfbG9jayAqbG9jayA9 IE5VTEw7CisgICAgeHNfdHJhbnNhY3Rpb25fdCB0ID0gWEJUX05VTEw7CisgICAgZmxleGFycmF5 X3QgKmluc2VydCA9IE5VTEwsICplbXB0eSA9IE5VTEw7CisKKyAgICBsaWJ4bF9kb21haW5fY29u ZmlnX2luaXQoJmRfY29uZmlnKTsKKyAgICBsaWJ4bF9kZXZpY2VfZGlza19pbml0KCZkaXNrX2Vt cHR5KTsKKyAgICBsaWJ4bF9kZXZpY2VfZGlza19pbml0KCZkaXNrX3NhdmVkKTsKKyAgICBsaWJ4 bF9kZXZpY2VfZGlza19jb3B5KGN0eCwgJmRpc2tfc2F2ZWQsIGRpc2spOworCisgICAgZGlza19l bXB0eS5mb3JtYXQgPSBMSUJYTF9ESVNLX0ZPUk1BVF9FTVBUWTsKKyAgICBkaXNrX2VtcHR5LnZk ZXYgPSBsaWJ4bF9fc3RyZHVwKE5PR0MsIGRpc2stPnZkZXYpOworICAgIGRpc2tfZW1wdHkucGRl dl9wYXRoID0gbGlieGxfX3N0cmR1cChOT0dDLCAiIik7CisgICAgZGlza19lbXB0eS5pc19jZHJv bSA9IDE7CisgICAgbGlieGxfX2RldmljZV9kaXNrX3NldGRlZmF1bHQoZ2MsICZkaXNrX2VtcHR5 LCBkb21pZCk7CisKKyAgICBsaWJ4bF9kb21haW5fdHlwZSB0eXBlID0gbGlieGxfX2RvbWFpbl90 eXBlKGdjLCBkb21pZCk7CisgICAgaWYgKHR5cGUgPT0gTElCWExfRE9NQUlOX1RZUEVfSU5WQUxJ RCkgeworICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0K KyAgICBpZiAodHlwZSAhPSBMSUJYTF9ET01BSU5fVFlQRV9IVk0pIHsKKyAgICAgICAgTE9HRChF UlJPUiwgZG9taWQsICJjZHJvbS1pbnNlcnQgcmVxdWlyZXMgYW4gSFZNIGRvbWFpbiIpOworICAg ICAgICByYyA9IEVSUk9SX0lOVkFMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBp ZiAobGlieGxfZ2V0X3N0dWJkb21faWQoY3R4LCBkb21pZCkgIT0gMCkgeworICAgICAgICBMT0dE KEVSUk9SLCBkb21pZCwgImNkcm9tLWluc2VydCBkb2Vzbid0IHdvcmsgZm9yIHN0dWIgZG9tYWlu cyIpOworICAgICAgICByYyA9IEVSUk9SX0lOVkFMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9 CisKKyAgICBkbV92ZXIgPSBsaWJ4bF9fZGV2aWNlX21vZGVsX3ZlcnNpb25fcnVubmluZyhnYywg ZG9taWQpOworICAgIGlmIChkbV92ZXIgPT0gLTEpIHsKKyAgICAgICAgTE9HRChFUlJPUiwgZG9t aWQsICJDYW5ub3QgZGV0ZXJtaW5lIGRldmljZSBtb2RlbCB2ZXJzaW9uIik7CisgICAgICAgIHJj ID0gRVJST1JfRkFJTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgaWYgKGRtX3Zl ciA9PSBMSUJYTF9ERVZJQ0VfTU9ERUxfVkVSU0lPTl9OT05FKSB7CisgICAgICAgIExPR0QoRVJS T1IsIGRvbWlkLCAiR3Vlc3RzIHdpdGhvdXQgYSBkZXZpY2UgbW9kZWwgY2Fubm90IHVzZSBjZC1p bnNlcnQiKTsKKyAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICBnb3RvIG91dDsKKyAg ICB9CisKKyAgICBkaXNrcyA9IGxpYnhsX2RldmljZV9kaXNrX2xpc3QoY3R4LCBkb21pZCwgJm51 bSk7CisgICAgZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisgICAgICAgIGlmIChkaXNrc1tp XS5pc19jZHJvbSAmJiAhc3RyY21wKGRpc2stPnZkZXYsIGRpc2tzW2ldLnZkZXYpKQorICAgICAg ICB7CisgICAgICAgICAgICAvKiBGb3VuZC4gIFNldCBiYWNrZW5kIHR5cGUgYXBwcm9wcmlhdGVs eS4gKi8KKyAgICAgICAgICAgIGRpc2stPmJhY2tlbmQ9ZGlza3NbaV0uYmFja2VuZDsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlmIChpID09IG51bSkgeworICAg ICAgICBMT0dEKEVSUk9SLCBkb21pZCwgIlZpcnR1YWwgZGV2aWNlIG5vdCBmb3VuZCIpOworICAg ICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIHJj ID0gbGlieGxfX2RldmljZV9kaXNrX3NldGRlZmF1bHQoZ2MsIGRpc2ssIGRvbWlkKTsKKyAgICBp ZiAocmMpIGdvdG8gb3V0OworCisgICAgaWYgKCFkaXNrLT5wZGV2X3BhdGgpIHsKKyAgICAgICAg ZGlzay0+cGRldl9wYXRoID0gbGlieGxfX3N0cmR1cChOT0dDLCAiIik7CisgICAgICAgIGRpc2st PmZvcm1hdCA9IExJQlhMX0RJU0tfRk9STUFUX0VNUFRZOworICAgIH0KKworICAgIHJjID0gbGli eGxfX2RldmljZV9mcm9tX2Rpc2soZ2MsIGRvbWlkLCBkaXNrLCAmZGV2aWNlKTsKKyAgICBpZiAo cmMpIGdvdG8gb3V0OworCisgICAgYmVfcGF0aCA9IGxpYnhsX19kZXZpY2VfYmFja2VuZF9wYXRo KGdjLCAmZGV2aWNlKTsKKyAgICBsaWJ4bF9wYXRoID0gbGlieGxfX2RldmljZV9saWJ4bF9wYXRo KGdjLCAmZGV2aWNlKTsKKworICAgIGluc2VydCA9IGZsZXhhcnJheV9tYWtlKGdjLCA0LCAxKTsK KworICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihpbnNlcnQsICJ0eXBlIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfX2RldmljZV9kaXNrX3N0cmluZ19vZl9iYWNrZW5kKGRpc2st PmJhY2tlbmQpKTsKKyAgICBpZiAoZGlzay0+Zm9ybWF0ICE9IExJQlhMX0RJU0tfRk9STUFUX0VN UFRZKQorICAgICAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoaW5zZXJ0LCAicGFyYW1zIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXM6JXMiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX19kZXZpY2VfZGlza19zdHJpbmdfb2ZfZm9ybWF0KGRpc2stPmZv cm1hdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzay0+cGRldl9wYXRoKSk7Cisg ICAgZWxzZQorICAgICAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoaW5zZXJ0LCAicGFyYW1zIiwg IiIpOworCisgICAgZW1wdHkgPSBmbGV4YXJyYXlfbWFrZShnYywgNCwgMSk7CisgICAgZmxleGFy cmF5X2FwcGVuZF9wYWlyKGVtcHR5LCAidHlwZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX19kZXZpY2VfZGlza19zdHJpbmdfb2ZfYmFja2VuZChkaXNrLT5iYWNrZW5kKSk7Cisg ICAgZmxleGFycmF5X2FwcGVuZF9wYWlyKGVtcHR5LCAicGFyYW1zIiwgIiIpOworCisgICAgLyog Tm90ZTogQ1RYIGxvY2sgaXMgYWxyZWFkeSBoZWxkIGF0IHRoaXMgcG9pbnQgc28gbG9jayBoaWVy YXJjaHkKKyAgICAgKiBpcyBtYWludGFpbmVkLgorICAgICAqLworICAgIGxvY2sgPSBsaWJ4bF9f bG9ja19kb21haW5fdXNlcmRhdGEoZ2MsIGRvbWlkKTsKKyAgICBpZiAoIWxvY2spIHsKKyAgICAg ICAgcmMgPSBFUlJPUl9MT0NLX0ZBSUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAg IC8qIFdlIG5lZWQgdG8gZWplY3QgdGhlIG9yaWdpbmFsIGltYWdlIGZpcnN0LiBUaGlzIGlzIGlt cGxlbWVudGVkCisgICAgICogYnkgaW5zZXJ0aW5nIGVtcHR5IG1lZGlhLiBKU09OIGlzIG5vdCB1 cGRhdGVkLgorICAgICAqLworICAgIGlmIChkbV92ZXIgPT0gTElCWExfREVWSUNFX01PREVMX1ZF UlNJT05fUUVNVV9YRU4pIHsKKyAgICAgICAgcmMgPSBsaWJ4bF9fcW1wX2luc2VydF9jZHJvbShn YywgZG9taWQsICZkaXNrX2VtcHR5KTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICB9 CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX3N0 YXJ0KGdjLCAmdCk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisgICAgICAgIC8qIFNhbml0 eSBjaGVjazogbWFrZSBzdXJlIHRoZSBkZXZpY2UgZXhpc3RzIGJlZm9yZSB3cml0aW5nIGhlcmUg Ki8KKyAgICAgICAgdG1wID0gbGlieGxfX3hzX3JlYWQoZ2MsIHQsIEdDU1BSSU5URigiJXMvZnJv bnRlbmQiLCBsaWJ4bF9wYXRoKSk7CisgICAgICAgIGlmICghdG1wKQorICAgICAgICB7CisgICAg ICAgICAgICBMT0dEKEVSUk9SLCBkb21pZCwgIkludGVybmFsIGVycm9yOiAlcyBkb2VzIG5vdCBl eGlzdCIsCisgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvZnJvbnRlbmQiLCBsaWJ4bF9w YXRoKSk7CisgICAgICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgICAgICBnb3RvIG91 dDsKKyAgICAgICAgfQorCisgICAgICAgIGNoYXIgKiprdnMgPSBsaWJ4bF9feHNfa3ZzX29mX2Zs ZXhhcnJheShnYywgZW1wdHkpOworCisgICAgICAgIHJjID0gbGlieGxfX3hzX3dyaXRldihnYywg dCwgYmVfcGF0aCwga3ZzKTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgICAgICBy YyA9IGxpYnhsX194c193cml0ZXYoZ2MsIHQsIGxpYnhsX3BhdGgsIGt2cyk7CisgICAgICAgIGlm IChyYykgZ290byBvdXQ7CisKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fY29t bWl0KGdjLCAmdCk7CisgICAgICAgIGlmICghcmMpIGJyZWFrOworICAgICAgICBpZiAocmMgPCAw KSBnb3RvIG91dDsKKyAgICB9CisKKyAgICByYyA9IGxpYnhsX19nZXRfZG9tYWluX2NvbmZpZ3Vy YXRpb24oZ2MsIGRvbWlkLCAmZF9jb25maWcpOworICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAg ICBERVZJQ0VfQUREKGRpc2ssIGRpc2tzLCBkb21pZCwgJmRpc2tfc2F2ZWQsIENPTVBBUkVfRElT SywgJmRfY29uZmlnKTsKKworICAgIHJjID0gbGlieGxfX2RtX2NoZWNrX3N0YXJ0KGdjLCAmZF9j b25maWcsIGRvbWlkKTsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgaWYgKGRtX3ZlciA9 PSBMSUJYTF9ERVZJQ0VfTU9ERUxfVkVSU0lPTl9RRU1VX1hFTikgeworICAgICAgICByYyA9IGxp YnhsX19xbXBfaW5zZXJ0X2Nkcm9tKGdjLCBkb21pZCwgZGlzayk7CisgICAgICAgIGlmIChyYykg Z290byBvdXQ7CisgICAgfQorCisgICAgZm9yICg7OykgeworICAgICAgICByYyA9IGxpYnhsX194 c190cmFuc2FjdGlvbl9zdGFydChnYywgJnQpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0Owor ICAgICAgICAvKiBTYW5pdHkgY2hlY2s6IG1ha2Ugc3VyZSB0aGUgZGV2aWNlIGV4aXN0cyBiZWZv cmUgd3JpdGluZyBoZXJlICovCisgICAgICAgIHRtcCA9IGxpYnhsX194c19yZWFkKGdjLCB0LCBH Q1NQUklOVEYoIiVzL2Zyb250ZW5kIiwgbGlieGxfcGF0aCkpOworICAgICAgICBpZiAoIXRtcCkK KyAgICAgICAgeworICAgICAgICAgICAgTE9HRChFUlJPUiwgZG9taWQsICJJbnRlcm5hbCBlcnJv cjogJXMgZG9lcyBub3QgZXhpc3QiLAorICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL2Zy b250ZW5kIiwgbGlieGxfcGF0aCkpOworICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAg ICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICByYyA9IGxpYnhsX19zZXRf ZG9tYWluX2NvbmZpZ3VyYXRpb24oZ2MsIGRvbWlkLCAmZF9jb25maWcpOworICAgICAgICBpZiAo cmMpIGdvdG8gb3V0OworCisgICAgICAgIGNoYXIgKiprdnMgPSBsaWJ4bF9feHNfa3ZzX29mX2Zs ZXhhcnJheShnYywgaW5zZXJ0KTsKKworICAgICAgICByYyA9IGxpYnhsX194c193cml0ZXYoZ2Ms IHQsIGJlX3BhdGgsIGt2cyk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICAgICAg cmMgPSBsaWJ4bF9feHNfd3JpdGV2KGdjLCB0LCBsaWJ4bF9wYXRoLCBrdnMpOworICAgICAgICBp ZiAocmMpIGdvdG8gb3V0OworCisgICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX2Nv bW1pdChnYywgJnQpOworICAgICAgICBpZiAoIXJjKSBicmVhazsKKyAgICAgICAgaWYgKHJjIDwg MCkgZ290byBvdXQ7CisgICAgfQorCisgICAgLyogc3VjY2Vzcywgbm8gYWN0dWFsIGFzeW5jICov CisgICAgbGlieGxfX2FvX2NvbXBsZXRlKGVnYywgYW8sIDApOworCisgICAgcmMgPSAwOworCitv dXQ6CisgICAgbGlieGxfX3hzX3RyYW5zYWN0aW9uX2Fib3J0KGdjLCAmdCk7CisgICAgZm9yIChp ID0gMDsgaSA8IG51bTsgaSsrKQorICAgICAgICBsaWJ4bF9kZXZpY2VfZGlza19kaXNwb3NlKCZk aXNrc1tpXSk7CisgICAgZnJlZShkaXNrcyk7CisgICAgbGlieGxfZGV2aWNlX2Rpc2tfZGlzcG9z ZSgmZGlza19lbXB0eSk7CisgICAgbGlieGxfZGV2aWNlX2Rpc2tfZGlzcG9zZSgmZGlza19zYXZl ZCk7CisgICAgbGlieGxfZG9tYWluX2NvbmZpZ19kaXNwb3NlKCZkX2NvbmZpZyk7CisKKyAgICBp ZiAobG9jaykgbGlieGxfX3VubG9ja19kb21haW5fdXNlcmRhdGEobG9jayk7CisKKyAgICBpZiAo cmMpIHJldHVybiBBT19DUkVBVEVfRkFJTChyYyk7CisgICAgcmV0dXJuIEFPX0lOUFJPR1JFU1M7 Cit9CisKKy8qIGxpYnhsX19hbGxvY192ZGV2IG9ubHkgd29ya3Mgb24gdGhlIGxvY2FsIGRvbWFp biwgdGhhdCBpcyB0aGUgZG9tYWluCisgKiB3aGVyZSB0aGUgdG9vbHN0YWNrIGlzIHJ1bm5pbmcg Ki8KK3N0YXRpYyBjaGFyICogbGlieGxfX2FsbG9jX3ZkZXYobGlieGxfX2djICpnYywgdm9pZCAq Z2V0X3ZkZXZfdXNlciwKKyAgICAgICAgeHNfdHJhbnNhY3Rpb25fdCB0KQoreworICAgIGNvbnN0 IGNoYXIgKmJsa2Rldl9zdGFydCA9IChjb25zdCBjaGFyICopIGdldF92ZGV2X3VzZXI7CisgICAg aW50IGRldmlkID0gMCwgZGlzayA9IDAsIHBhcnQgPSAwOworICAgIGNoYXIgKmxpYnhsX2RvbV9w YXRoID0gbGlieGxfX3hzX2xpYnhsX3BhdGgoZ2MsIExJQlhMX1RPT0xTVEFDS19ET01JRCk7CisK KyAgICBsaWJ4bF9fZGV2aWNlX2Rpc2tfZGV2X251bWJlcihibGtkZXZfc3RhcnQsICZkaXNrLCAm cGFydCk7CisgICAgaWYgKHBhcnQgIT0gMCkgeworICAgICAgICBMT0coRVJST1IsICJibGtkZXZf c3RhcnQgaXMgaW52YWxpZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBk byB7CisgICAgICAgIGRldmlkID0gbGlieGxfX2RldmljZV9kaXNrX2Rldl9udW1iZXIoR0NTUFJJ TlRGKCJkJWRwMCIsIGRpc2spLAorICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOworICAgICAg ICBpZiAoZGV2aWQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChs aWJ4bF9feHNfcmVhZChnYywgdCwKKyAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9k ZXZpY2UvdmJkLyVkL2JhY2tlbmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZG9t X3BhdGgsIGRldmlkKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKGVycm5vID09IEVOT0VO VCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbGlieGxfX2RldmlkX3RvX3ZkZXYoZ2MsIGRldmlk KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAg ICAgfQorICAgICAgICBkaXNrKys7CisgICAgfSB3aGlsZSAoMSk7CisgICAgcmV0dXJuIE5VTEw7 Cit9CisKKy8qIENhbGxiYWNrcyAqLworCitjaGFyICpsaWJ4bF9fZGV2aWNlX2Rpc2tfZmluZF9s b2NhbF9wYXRoKGxpYnhsX19nYyAqZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsaWJ4bF9kb21pZCBndWVzdF9kb21pZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpYnhsX2RldmljZV9kaXNrICpkaXNrLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBxZGlza19kaXJlY3Qp Cit7CisgICAgY2hhciAqcGF0aCA9IE5VTEw7CisKKyAgICAvKiBObyBsb2NhbCBwYXRocyBmb3Ig ZHJpdmVyIGRvbWFpbnMgKi8KKyAgICBpZiAoZGlzay0+YmFja2VuZF9kb21uYW1lICE9IE5VTEwp IHsKKyAgICAgICAgTE9HKERFQlVHLCAiTm9uLWxvY2FsIGJhY2tlbmQsIGNhbid0IGFjY2VzcyBs b2NhbGx5LlxuIik7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIC8qCisgICAgICog SWYgdGhpcyBpcyBpbiByYXcgZm9ybWF0LCBhbmQgd2UncmUgbm90IHVzaW5nIGEgc2NyaXB0IG9y IGEKKyAgICAgKiBkcml2ZXIgZG9tYWluLCB3ZSBjYW4gYWNjZXNzIHRoZSB0YXJnZXQgcGF0aCBk aXJlY3RseS4KKyAgICAgKi8KKyAgICBpZiAoZGlzay0+Zm9ybWF0ID09IExJQlhMX0RJU0tfRk9S TUFUX1JBVworICAgICAgICAmJiBkaXNrLT5zY3JpcHQgPT0gTlVMTCkgeworICAgICAgICBwYXRo ID0gbGlieGxfX3N0cmR1cChnYywgZGlzay0+cGRldl9wYXRoKTsKKyAgICAgICAgTE9HKERFQlVH LCAiRGlyZWN0bHkgYWNjZXNzaW5nIGxvY2FsIFJBVyBkaXNrICVzIiwgcGF0aCk7CisgICAgICAg IGdvdG8gb3V0OworICAgIH0KKworICAgIC8qCisgICAgICogSWYgd2UncmUgYmVpbmcgY2FsbGVk IGZvciBhIHFlbXUgcGF0aCwgd2UgY2FuIHBhc3MgdGhlIHRhcmdldAorICAgICAqIHN0cmluZyBk aXJlY3RseSBhcyB3ZWxsCisgICAgICovCisgICAgaWYgKHFkaXNrX2RpcmVjdCAmJiBkaXNrLT5i YWNrZW5kID09IExJQlhMX0RJU0tfQkFDS0VORF9RRElTSykgeworICAgICAgICBwYXRoID0gbGli eGxfX3N0cmR1cChnYywgZGlzay0+cGRldl9wYXRoKTsKKyAgICAgICAgTE9HKERFQlVHLCAiRGly ZWN0bHkgYWNjZXNzaW5nIGxvY2FsIFFESVNLIHRhcmdldCAlcyIsIHBhdGgpOworICAgICAgICBn b3RvIG91dDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIHRoZSBmb3JtYXQgaXNuJ3QgcmF3 IGFuZCAvIG9yIHdlJ3JlIHVzaW5nIGEgc2NyaXB0LCB0aGVuIHNlZQorICAgICAqIGlmIHRoZSBz Y3JpcHQgaGFzIHdyaXR0ZW4gYSBwYXRoIHRvIHRoZSAiY29va2VkIiBub2RlCisgICAgICovCisg ICAgaWYgKGRpc2stPnNjcmlwdCAmJiBndWVzdF9kb21pZCAhPSBJTlZBTElEX0RPTUlEKSB7Cisg ICAgICAgIGxpYnhsX19kZXZpY2UgZGV2aWNlOworICAgICAgICBjaGFyICpiZV9wYXRoLCAqcGRw YXRoOworICAgICAgICBpbnQgcmM7CisKKyAgICAgICAgTE9HRChERUJVRywgZ3Vlc3RfZG9taWQs CisgICAgICAgICAgICAgIlJ1biBmcm9tIGEgc2NyaXB0OyBjaGVja2luZyBmb3IgcGh5c2ljYWwt ZGV2aWNlLXBhdGggKHZkZXYgJXMpIiwKKyAgICAgICAgICAgICBkaXNrLT52ZGV2KTsKKworICAg ICAgICByYyA9IGxpYnhsX19kZXZpY2VfZnJvbV9kaXNrKGdjLCBndWVzdF9kb21pZCwgZGlzaywg JmRldmljZSk7CisgICAgICAgIGlmIChyYyA8IDApCisgICAgICAgICAgICBnb3RvIG91dDsKKwor ICAgICAgICBiZV9wYXRoID0gbGlieGxfX2RldmljZV9iYWNrZW5kX3BhdGgoZ2MsICZkZXZpY2Up OworCisgICAgICAgIHBkcGF0aCA9IGxpYnhsX19zcHJpbnRmKGdjLCAiJXMvcGh5c2ljYWwtZGV2 aWNlLXBhdGgiLCBiZV9wYXRoKTsKKworICAgICAgICBMT0dEKERFQlVHLCBndWVzdF9kb21pZCwg IkF0dGVtcHRpbmcgdG8gcmVhZCBub2RlICVzIiwgcGRwYXRoKTsKKyAgICAgICAgcGF0aCA9IGxp YnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwgcGRwYXRoKTsKKworICAgICAgICBpZiAocGF0aCkK KyAgICAgICAgICAgIExPR0QoREVCVUcsIGd1ZXN0X2RvbWlkLCAiQWNjZXNzaW5nIGNvb2tlZCBi bG9jayBkZXZpY2UgJXMiLCBwYXRoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgTE9HRChE RUJVRywgZ3Vlc3RfZG9taWQsICJObyBwaHlzaWNhbC1kZXZpY2UtcGF0aCwgY2FuJ3QgYWNjZXNz IGxvY2FsbHkuIik7CisKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgb3V0OgorICAgIHJl dHVybiBwYXRoOworfQorCitzdGF0aWMgdm9pZCBsb2NhbF9kZXZpY2VfYXR0YWNoX2NiKGxpYnhs X19lZ2MgKmVnYywgbGlieGxfX2FvX2RldmljZSAqYW9kZXYpOworCit2b2lkIGxpYnhsX19kZXZp Y2VfZGlza19sb2NhbF9pbml0aWF0ZV9hdHRhY2gobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19kaXNrX2xvY2FsX3N0YXRlICpkbHMp Cit7CisgICAgU1RBVEVfQU9fR0MoZGxzLT5hbyk7CisgICAgaW50IHJjOworICAgIGNvbnN0IGxp YnhsX2RldmljZV9kaXNrICppbl9kaXNrID0gZGxzLT5pbl9kaXNrOworICAgIGxpYnhsX2Rldmlj ZV9kaXNrICpkaXNrID0gJmRscy0+ZGlzazsKKyAgICBjb25zdCBjaGFyICpibGtkZXZfc3RhcnQg PSBkbHMtPmJsa2Rldl9zdGFydDsKKworICAgIGFzc2VydChpbl9kaXNrLT5wZGV2X3BhdGgpOwor CisgICAgZGlzay0+dmRldiA9IE5VTEw7CisKKyAgICBpZiAoZGxzLT5kaXNrcGF0aCkKKyAgICAg ICAgTE9HKERFQlVHLCAiU3RyYW5nZSwgZGxzLT5kaXNrcGF0aCBhbHJlYWR5IHNldDogJXMiLCBk bHMtPmRpc2twYXRoKTsKKworICAgIExPRyhERUJVRywgIlRyeWluZyB0byBmaW5kIGxvY2FsIHBh dGgiKTsKKworICAgIGRscy0+ZGlza3BhdGggPSBsaWJ4bF9fZGV2aWNlX2Rpc2tfZmluZF9sb2Nh bF9wYXRoKGdjLCBJTlZBTElEX0RPTUlELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGluX2Rpc2ssIGZhbHNlKTsKKyAgICBpZiAoZGxzLT5k aXNrcGF0aCkgeworICAgICAgICBMT0coREVCVUcsICJMb2NhbCBwYXRoIGZvdW5kLCBleGVjdXRp bmcgY2FsbGJhY2suIik7CisgICAgICAgIGRscy0+Y2FsbGJhY2soZWdjLCBkbHMsIDApOworICAg IH0gZWxzZSB7CisgICAgICAgIExPRyhERUJVRywgIkxvY2FsIHBhdGggbm90IGZvdW5kLCBpbml0 aWF0aW5nIGF0dGFjaC4iKTsKKworICAgICAgICBtZW1jcHkoZGlzaywgaW5fZGlzaywgc2l6ZW9m KGxpYnhsX2RldmljZV9kaXNrKSk7CisgICAgICAgIGRpc2stPnBkZXZfcGF0aCA9IGxpYnhsX19z dHJkdXAoZ2MsIGluX2Rpc2stPnBkZXZfcGF0aCk7CisgICAgICAgIGlmIChpbl9kaXNrLT5zY3Jp cHQgIT0gTlVMTCkKKyAgICAgICAgICAgIGRpc2stPnNjcmlwdCA9IGxpYnhsX19zdHJkdXAoZ2Ms IGluX2Rpc2stPnNjcmlwdCk7CisgICAgICAgIGRpc2stPnZkZXYgPSBOVUxMOworCisgICAgICAg IHJjID0gbGlieGxfX2RldmljZV9kaXNrX3NldGRlZmF1bHQoZ2MsIGRpc2ssIExJQlhMX1RPT0xT VEFDS19ET01JRCk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICAgICAgbGlieGxf X3ByZXBhcmVfYW9fZGV2aWNlKGFvLCAmZGxzLT5hb2Rldik7CisgICAgICAgIGRscy0+YW9kZXYu Y2FsbGJhY2sgPSBsb2NhbF9kZXZpY2VfYXR0YWNoX2NiOworICAgICAgICBkZXZpY2VfZGlza19h ZGQoZWdjLCBMSUJYTF9UT09MU1RBQ0tfRE9NSUQsIGRpc2ssICZkbHMtPmFvZGV2LAorICAgICAg ICAgICAgICAgICAgICAgICAgbGlieGxfX2FsbG9jX3ZkZXYsICh2b2lkICopIGJsa2Rldl9zdGFy dCk7CisgICAgfQorCisgICAgcmV0dXJuOworCisgb3V0OgorICAgIGFzc2VydChyYyk7CisgICAg ZGxzLT5yYyA9IHJjOworICAgIGxpYnhsX19kZXZpY2VfZGlza19sb2NhbF9pbml0aWF0ZV9kZXRh Y2goZWdjLCBkbHMpOworICAgIGRscy0+Y2FsbGJhY2soZWdjLCBkbHMsIHJjKTsKK30KKworc3Rh dGljIHZvaWQgbG9jYWxfZGV2aWNlX2F0dGFjaF9jYihsaWJ4bF9fZWdjICplZ2MsIGxpYnhsX19h b19kZXZpY2UgKmFvZGV2KQoreworICAgIFNUQVRFX0FPX0dDKGFvZGV2LT5hbyk7CisgICAgbGli eGxfX2Rpc2tfbG9jYWxfc3RhdGUgKmRscyA9IENPTlRBSU5FUl9PRihhb2RldiwgKmRscywgYW9k ZXYpOworICAgIGNoYXIgKmJlX3BhdGggPSBOVUxMOworICAgIGludCByYzsKKyAgICBsaWJ4bF9f ZGV2aWNlIGRldmljZTsKKyAgICBsaWJ4bF9kZXZpY2VfZGlzayAqZGlzayA9ICZkbHMtPmRpc2s7 CisKKyAgICByYyA9IGFvZGV2LT5yYzsKKyAgICBpZiAocmMpIHsKKyAgICAgICAgTE9HRShFUlJP UiwgInVuYWJsZSBsb2NhbGx5IGF0dGFjaCBkZXZpY2U6ICVzIiwgZGlzay0+cGRldl9wYXRoKTsK KyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX2Zyb21f ZGlzayhnYywgTElCWExfVE9PTFNUQUNLX0RPTUlELCBkaXNrLCAmZGV2aWNlKTsKKyAgICBpZiAo cmMgPCAwKQorICAgICAgICBnb3RvIG91dDsKKyAgICBiZV9wYXRoID0gbGlieGxfX2RldmljZV9i YWNrZW5kX3BhdGgoZ2MsICZkZXZpY2UpOworICAgIHJjID0gbGlieGxfX3dhaXRfZm9yX2JhY2tl bmQoZ2MsIGJlX3BhdGgsIEdDU1BSSU5URigiJWQiLCBYZW5idXNTdGF0ZUNvbm5lY3RlZCkpOwor ICAgIGlmIChyYyA8IDApCisgICAgICAgIGdvdG8gb3V0OworCisgICAgZGxzLT5kaXNrcGF0aCA9 IEdDU1BSSU5URigiL2Rldi8lcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4 bF9fZGV2aWRfdG9fbG9jYWxkZXYoZ2MsIGRldmljZS5kZXZpZCkpOworICAgIExPRyhERUJVRywg ImxvY2FsbHkgYXR0YWNoZWQgZGlzayAlcyIsIGRscy0+ZGlza3BhdGgpOworCisgICAgZGxzLT5j YWxsYmFjayhlZ2MsIGRscywgMCk7CisgICAgcmV0dXJuOworCisgb3V0OgorICAgIGFzc2VydChy Yyk7CisgICAgZGxzLT5yYyA9IHJjOworICAgIGxpYnhsX19kZXZpY2VfZGlza19sb2NhbF9pbml0 aWF0ZV9kZXRhY2goZWdjLCBkbHMpOworICAgIHJldHVybjsKK30KKworLyogQ2FsbGJhY2tzIGZv ciBsb2NhbCBkZXRhY2ggKi8KKworc3RhdGljIHZvaWQgbG9jYWxfZGV2aWNlX2RldGFjaF9jYihs aWJ4bF9fZWdjICplZ2MsIGxpYnhsX19hb19kZXZpY2UgKmFvZGV2KTsKKwordm9pZCBsaWJ4bF9f ZGV2aWNlX2Rpc2tfbG9jYWxfaW5pdGlhdGVfZGV0YWNoKGxpYnhsX19lZ2MgKmVnYywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fZGlza19sb2NhbF9zdGF0ZSAq ZGxzKQoreworICAgIFNUQVRFX0FPX0dDKGRscy0+YW8pOworICAgIGludCByYyA9IDA7CisgICAg bGlieGxfZGV2aWNlX2Rpc2sgKmRpc2sgPSAmZGxzLT5kaXNrOworICAgIGxpYnhsX19kZXZpY2Ug KmRldmljZTsKKyAgICBsaWJ4bF9fYW9fZGV2aWNlICphb2RldiA9ICZkbHMtPmFvZGV2OworICAg IGxpYnhsX19wcmVwYXJlX2FvX2RldmljZShhbywgYW9kZXYpOworCisgICAgaWYgKCFkbHMtPmRp c2twYXRoKSBnb3RvIG91dDsKKworICAgIGlmIChkaXNrLT52ZGV2ICE9IE5VTEwpIHsKKyAgICAg ICAgR0NORVcoZGV2aWNlKTsKKyAgICAgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX2Zyb21fZGlzayhn YywgTElCWExfVE9PTFNUQUNLX0RPTUlELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRpc2ssIGRldmljZSk7CisgICAgICAgIGlmIChyYyAhPSAwKSBnb3RvIG91dDsKKwor ICAgICAgICBhb2Rldi0+YWN0aW9uID0gTElCWExfX0RFVklDRV9BQ1RJT05fUkVNT1ZFOworICAg ICAgICBhb2Rldi0+ZGV2ID0gZGV2aWNlOworICAgICAgICBhb2Rldi0+Y2FsbGJhY2sgPSBsb2Nh bF9kZXZpY2VfZGV0YWNoX2NiOworICAgICAgICBhb2Rldi0+Zm9yY2UgPSAwOworICAgICAgICBs aWJ4bF9faW5pdGlhdGVfZGV2aWNlX2dlbmVyaWNfcmVtb3ZlKGVnYywgYW9kZXYpOworICAgICAg ICByZXR1cm47CisgICAgfQorCitvdXQ6CisgICAgYW9kZXYtPnJjID0gcmM7CisgICAgbG9jYWxf ZGV2aWNlX2RldGFjaF9jYihlZ2MsIGFvZGV2KTsKKyAgICByZXR1cm47Cit9CisKK3N0YXRpYyB2 b2lkIGxvY2FsX2RldmljZV9kZXRhY2hfY2IobGlieGxfX2VnYyAqZWdjLCBsaWJ4bF9fYW9fZGV2 aWNlICphb2RldikKK3sKKyAgICBTVEFURV9BT19HQyhhb2Rldi0+YW8pOworICAgIGxpYnhsX19k aXNrX2xvY2FsX3N0YXRlICpkbHMgPSBDT05UQUlORVJfT0YoYW9kZXYsICpkbHMsIGFvZGV2KTsK KyAgICBpbnQgcmM7CisKKyAgICBpZiAoYW9kZXYtPnJjKSB7CisgICAgICAgIExPR0VEKEVSUk9S LCBhb2Rldi0+ZGV2LT5kb21pZCwgIlVuYWJsZSB0byAlcyAlcyB3aXRoIGlkICV1IiwKKyAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX19kZXZpY2VfYWN0aW9uX3RvX3N0cmluZyhhb2Rldi0+YWN0 aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19kZXZpY2Vfa2luZF90b19zdHJpbmco YW9kZXYtPmRldi0+a2luZCksCisgICAgICAgICAgICAgICAgICAgICBhb2Rldi0+ZGV2LT5kZXZp ZCk7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworb3V0OgorICAgIC8qCisgICAgICogSWYg dGhlcmUgd2FzIGFuIGVycm9yIGluIGRscy0+cmMsIGl0IG1lYW5zIHdlIGhhdmUgYmVlbiBjYWxs ZWQgZnJvbQorICAgICAqIGEgZmFpbGVkIGV4ZWN1dGlvbiBvZiBsaWJ4bF9fZGV2aWNlX2Rpc2tf bG9jYWxfaW5pdGlhdGVfYXR0YWNoLAorICAgICAqIHNvIHJldHVybiB0aGUgb3JpZ2luYWwgZXJy b3IuCisgICAgICovCisgICAgcmMgPSBkbHMtPnJjID8gZGxzLT5yYyA6IGFvZGV2LT5yYzsKKyAg ICBkbHMtPmNhbGxiYWNrKGVnYywgZGxzLCByYyk7CisgICAgcmV0dXJuOworfQorCisvKiBUaGUg Zm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZDoKKyAqIGxpYnhsX2RldmljZV9kaXNrX2Fk ZAorICogbGlieGxfX2FkZF9kaXNrcworICogbGlieGxfZGV2aWNlX2Rpc2tfcmVtb3ZlCisgKiBs aWJ4bF9kZXZpY2VfZGlza19kZXN0cm95CisgKi8KK0xJQlhMX0RFRklORV9ERVZJQ0VfQUREKGRp c2spCitMSUJYTF9ERUZJTkVfREVWSUNFU19BREQoZGlzaykKK0xJQlhMX0RFRklORV9ERVZJQ0Vf UkVNT1ZFKGRpc2spCisKK3N0YXRpYyBpbnQgbGlieGxfZGV2aWNlX2Rpc2tfY29tcGFyZShsaWJ4 bF9kZXZpY2VfZGlzayAqZDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfZGV2aWNlX2Rpc2sgKmQyKQoreworICAgIHJldHVybiBDT01QQVJFX0RJU0soZDEsIGQy KTsKK30KKworLyogVGFrZSBjYXJlIG9mIHJlbW92YWJsZSBkZXZpY2UuIFdlIG1haW50YWluIGlu dmFyaWFudCBpbiB0aGUKKyAqIGluc2VydCAvIHJlbW92ZSBvcGVyYXRpb24gc28gdGhhdDoKKyAq IDEuIGlmIHhlbnN0b3JlIGlzICJlbXB0eSIgd2hpbGUgSlNPTiBpcyBub3QsIHRoZSByZXN1bHQK KyAqICAgIGlzICJlbXB0eSIKKyAqIDIuIGlmIHhlbnN0b3JlIGhhcyBhIGRpZmZlcmVudCBtZWRp YSB0aGFuIEpTT04sIHVzZSB0aGUKKyAqICAgIG9uZSBpbiBKU09OCisgKiAzLiBpZiB4ZW5zdG9y ZSBhbmQgSlNPTiBoYXZlIHRoZSBzYW1lIG1lZGlhLCB3ZWxsLCB5b3UKKyAqICAgIGtub3cgdGhl IGFuc3dlciA6LSkKKyAqCisgKiBDdXJyZW50bHkgdGhlcmUgaXMgb25seSBvbmUgcmVtb3ZhYmxl IGRldmljZSAtLSBDRFJPTS4KKyAqIExvb2sgZm9yIGxpYnhsX2Nkcm9tX2luc2VydCBmb3IgcmVm ZXJlbmNlLgorICovCitzdGF0aWMgdm9pZCBsaWJ4bF9kZXZpY2VfZGlza19tZXJnZShsaWJ4bF9j dHggKmN0eCwgdm9pZCAqZDEsIHZvaWQgKmQyKQoreworICAgIEdDX0lOSVQoY3R4KTsKKyAgICBs aWJ4bF9kZXZpY2VfZGlzayAqc3JjID0gZDE7CisgICAgbGlieGxfZGV2aWNlX2Rpc2sgKmRzdCA9 IGQyOworCisgICAgaWYgKHNyYy0+cmVtb3ZhYmxlKSB7CisgICAgICAgIGlmICghc3JjLT5wZGV2 X3BhdGggfHwgKnNyYy0+cGRldl9wYXRoID09ICdcMCcpIHsKKyAgICAgICAgICAgIC8qIDEsIG5v IG1lZGlhIGluIGRyaXZlICovCisgICAgICAgICAgICBmcmVlKGRzdC0+cGRldl9wYXRoKTsKKyAg ICAgICAgICAgIGRzdC0+cGRldl9wYXRoID0gbGlieGxfX3N0cmR1cChOT0dDLCAiIik7CisgICAg ICAgICAgICBkc3QtPmZvcm1hdCA9IExJQlhMX0RJU0tfRk9STUFUX0VNUFRZOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgLyogMiBhbmQgMywgdXNlIEpTT04sIG5vIG5lZWQgdG8gdG91 Y2ggYW55dGhpbmcgKi8KKyAgICAgICAgICAgIDsKKyAgICAgICAgfQorICAgIH0KK30KKworc3Rh dGljIGludCBsaWJ4bF9kZXZpY2VfZGlza19kbV9uZWVkZWQodm9pZCAqZSwgdW5zaWduZWQgZG9t aWQpCit7CisgICAgbGlieGxfZGV2aWNlX2Rpc2sgKmVsZW0gPSBlOworCisgICAgcmV0dXJuIGVs ZW0tPmJhY2tlbmQgPT0gTElCWExfRElTS19CQUNLRU5EX1FESVNLICYmCisgICAgICAgICAgIGVs ZW0tPmJhY2tlbmRfZG9taWQgPT0gZG9taWQ7Cit9CisKK0RFRklORV9ERVZJQ0VfVFlQRV9TVFJV Q1QoZGlzaywKKyAgICAubWVyZ2UgICAgICAgPSBsaWJ4bF9kZXZpY2VfZGlza19tZXJnZSwKKyAg ICAuZG1fbmVlZGVkICAgPSBsaWJ4bF9kZXZpY2VfZGlza19kbV9uZWVkZWQsCisgICAgLnNraXBf YXR0YWNoID0gMQorKTsKKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAq IGMtYmFzaWMtb2Zmc2V0OiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAq LwotLSAKMi4xMC4yCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRw czovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==