From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa3.mentor.iphmx.com (esa3.mentor.iphmx.com [68.232.137.180]) by sourceware.org (Postfix) with ESMTPS id D5BCF3858D39; Fri, 4 Mar 2022 14:47:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D5BCF3858D39 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.90,155,1643702400"; d="diff'?scan'208";a="72568264" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa3.mentor.iphmx.com with ESMTP; 04 Mar 2022 06:47:54 -0800 IronPort-SDR: D+SPo4l7BdlV3qbTGQ1YSWLBr55JiWksySM3ul2Iz11guWqrbSGDlUr2D1/WI84jrJGhyBYTaU IQ67Efw9V3IOhnHY05HuIPYTSXXsOyaGtGcCtgQweHYoyUUdwji2SLc/rvtqZ9Dt+r+UmU2gmt Ucbf0dF0o7B4H/dfi7bwX8UFbkzUrpZItAcrjxYrRLkja0peFbR7i154BplnadzPEIVGscJ4KA kc8QV3Ds8xdNu3Da66pi6s1HqmFFfeRtHUrtWe+ef3NYZl/E8by7OZsi92znhOXiJ/V4yrBigj crg= Content-Type: multipart/mixed; boundary="------------ZDct74aKRxcTZ7E8RYV0fOlf" Message-ID: <43ad60ea-875a-5f6f-106b-206ecd4807ba@codesourcery.com> Date: Fri, 4 Mar 2022 15:47:31 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.6.1 From: Marcel Vollweiler Subject: [PATCH] OpenMP, libgomp: Add new runtime routine omp_get_mapped_ptr. To: CC: X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: SVR-IES-MBX-08.mgc.mentorg.com (139.181.222.8) To SVR-IES-MBX-03.mgc.mentorg.com (139.181.222.3) X-Spam-Status: No, score=-12.8 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: fortran@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Fortran mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Mar 2022 14:48:02 -0000 --------------ZDct74aKRxcTZ7E8RYV0fOlf Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable Hi, This patch adds the OpenMP runtime routine "omp_get_mapped_ptr" which was introduced in OpenMP 5.1 (specification section 3.8.11): "The omp_get_mapped_ptr routine returns the device pointer that is associat= ed with a host pointer for a given device." "The device_num argument must be greater than or equal to zero and less tha= n or equal to the result of omp_get_num_devices()." "A call to this routine for a pointer that is not NULL (or C_NULL_PTR, for Fortran) and does not have an associated pointer on the given device result= s in a NULL pointer." "The routine returns NULL (or C_NULL_PTR, for Fortran) if unsuccessful. Otherwise it returns the device pointer, which is ptr if device_num is the = value returned by omp_get_initial_device()." Implementation and tests were added for C/C++ and Fortran. There is a small inconvenience considering zero-length arrays as list items= of the "target map" construct: it seems that zero-length arrays are not associ= ated correctly there, such that omp_get_mapped_ptr returns NULL instead of the associated device pointer - in contrast to the situation where a device poi= nter is associated with the host pointer via omp_target_associate_ptr. However, the result for omp_get_mapped_ptr is consistent with omp_target_is_present (which returns 0, i.e. "not present") in this situati= on. The patch was tested on x86_64-linux with nvptx and amdgcn offloading. All = with no regressions. Marcel ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --------------ZDct74aKRxcTZ7E8RYV0fOlf Content-Type: text/plain; charset="UTF-8"; name="get-mapped-ptr-patch.diff" Content-Disposition: attachment; filename="get-mapped-ptr-patch.diff" Content-Transfer-Encoding: base64 T3Blbk1QLCBsaWJnb21wOiBBZGQgbmV3IHJ1bnRpbWUgcm91dGluZSBvbXBfZ2V0X21hcHBl ZF9wdHIuCgpsaWJnb21wL0NoYW5nZUxvZzoKCgkqIGxpYmdvbXAubWFwOiBBZGRlZCBvbXBf Z2V0X21hcHBlZF9wdHIuCgkqIGxpYmdvbXAudGV4aTogVGFnZ2VkIG9tcF9nZXRfbWFwcGVk X3B0ciBhcyBzdXBwb3J0ZWQuCgkqIG9tcC5oLmluOiBBZGRlZCBvbXBfZ2V0X21hcHBlZF9w dHIuCgkqIG9tcF9saWIuZjkwLmluOiBBZGRlZCBpbnRlcmZhY2UgZm9yIG9tcF9nZXRfbWFw cGVkX3B0ci4KCSogb21wX2xpYi5oLmluOiBMaWtld2lzZS4KCSogdGFyZ2V0LmMgKG9tcF9n ZXRfbWFwcGVkX3B0cik6IEFkZGVkIGltcGxlbWVudGF0aW9uIG9mCglvbXBfZ2V0X21hcHBl ZF9wdHIuCgkqIHRlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi9nZXQtbWFwcGVkLXB0 ci0xLmM6IE5ldyB0ZXN0LgoJKiB0ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vZ2V0 LW1hcHBlZC1wdHItMi5jOiBOZXcgdGVzdC4KCSogdGVzdHN1aXRlL2xpYmdvbXAuYy1jKyst Y29tbW9uL2dldC1tYXBwZWQtcHRyLTMuYzogTmV3IHRlc3QuCgkqIHRlc3RzdWl0ZS9saWJn b21wLmMtYysrLWNvbW1vbi9nZXQtbWFwcGVkLXB0ci00LmM6IE5ldyB0ZXN0LgoJKiB0ZXN0 c3VpdGUvbGliZ29tcC5mb3J0cmFuL2dldC1tYXBwZWQtcHRyLTEuZjkwOiBOZXcgdGVzdC4K CSogdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9nZXQtbWFwcGVkLXB0ci0yLmY5MDogTmV3 IHRlc3QuCgkqIHRlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vZ2V0LW1hcHBlZC1wdHItMy5m OTA6IE5ldyB0ZXN0LgoJKiB0ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL2dldC1tYXBwZWQt cHRyLTQuZjkwOiBOZXcgdGVzdC4KCmRpZmYgLS1naXQgYS9saWJnb21wL2xpYmdvbXAubWFw IGIvbGliZ29tcC9saWJnb21wLm1hcAppbmRleCAyYWM1ODA5Li4wMGE0ODU4IDEwMDY0NAot LS0gYS9saWJnb21wL2xpYmdvbXAubWFwCisrKyBiL2xpYmdvbXAvbGliZ29tcC5tYXAKQEAg LTIyNCw2ICsyMjQsNyBAQCBPTVBfNS4xIHsKIAlvbXBfc2V0X3RlYW1zX3RocmVhZF9saW1p dF84XzsKIAlvbXBfZ2V0X3RlYW1zX3RocmVhZF9saW1pdDsKIAlvbXBfZ2V0X3RlYW1zX3Ro cmVhZF9saW1pdF87CisJb21wX2dldF9tYXBwZWRfcHRyOwogfSBPTVBfNS4wLjI7CiAKIEdP TVBfMS4wIHsKZGlmZiAtLWdpdCBhL2xpYmdvbXAvbGliZ29tcC50ZXhpIGIvbGliZ29tcC9s aWJnb21wLnRleGkKaW5kZXggMTYxYTQyMy4uYzE2M2I1NiAxMDA2NDQKLS0tIGEvbGliZ29t cC9saWJnb21wLnRleGkKKysrIGIvbGliZ29tcC9saWJnb21wLnRleGkKQEAgLTMxNCw3ICsz MTQsNyBAQCBUaGUgT3Blbk1QIDQuNSBzcGVjaWZpY2F0aW9uIGlzIGZ1bGx5IHN1cHBvcnRl ZC4KIEBpdGVtIEBjb2Rle29tcF90YXJnZXRfaXNfYWNjZXNzaWJsZX0gcnVudGltZSByb3V0 aW5lIEB0YWIgTiBAdGFiCiBAaXRlbSBAY29kZXtvbXBfdGFyZ2V0X21lbWNweV9hc3luY30g YW5kIEBjb2Rle29tcF90YXJnZXRfbWVtY3B5X3JlY3RfYXN5bmN9CiAgICAgICBydW50aW1l IHJvdXRpbmVzIEB0YWIgTiBAdGFiCi1AaXRlbSBAY29kZXtvbXBfZ2V0X21hcHBlZF9wdHJ9 IHJ1bnRpbWUgcm91dGluZSBAdGFiIE4gQHRhYgorQGl0ZW0gQGNvZGV7b21wX2dldF9tYXBw ZWRfcHRyfSBydW50aW1lIHJvdXRpbmUgQHRhYiBZIEB0YWIKIEBpdGVtIEBjb2Rle29tcF9j YWxsb2N9LCBAY29kZXtvbXBfcmVhbGxvY30sIEBjb2Rle29tcF9hbGlnbmVkX2FsbG9jfSBh bmQKICAgICAgIEBjb2Rle29tcF9hbGlnbmVkX2NhbGxvY30gcnVudGltZSByb3V0aW5lcyBA dGFiIFkgQHRhYgogQGl0ZW0gQGNvZGV7b21wX2FsbG9jdHJhaXRfa2V5X3R9IGVudW06IEBj b2Rle29tcF9hdHZfc2VyaWFsaXplZH0gYWRkZWQsCmRpZmYgLS1naXQgYS9saWJnb21wL29t cC5oLmluIGIvbGliZ29tcC9vbXAuaC5pbgppbmRleCA4OWM1ZDY1Li4xOGQwMTUyIDEwMDY0 NAotLS0gYS9saWJnb21wL29tcC5oLmluCisrKyBiL2xpYmdvbXAvb21wLmguaW4KQEAgLTI4 Miw2ICsyODIsNyBAQCBleHRlcm4gaW50IG9tcF90YXJnZXRfbWVtY3B5X3JlY3QgKHZvaWQg KiwgY29uc3Qgdm9pZCAqLCBfX1NJWkVfVFlQRV9fLCBpbnQsCiBleHRlcm4gaW50IG9tcF90 YXJnZXRfYXNzb2NpYXRlX3B0ciAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIF9fU0la RV9UWVBFX18sCiAJCQkJICAgICBfX1NJWkVfVFlQRV9fLCBpbnQpIF9fR09NUF9OT1RIUk9X OwogZXh0ZXJuIGludCBvbXBfdGFyZ2V0X2Rpc2Fzc29jaWF0ZV9wdHIgKGNvbnN0IHZvaWQg KiwgaW50KSBfX0dPTVBfTk9USFJPVzsKK2V4dGVybiB2b2lkICpvbXBfZ2V0X21hcHBlZF9w dHIgKGNvbnN0IHZvaWQgKiwgaW50KSBfX0dPTVBfTk9USFJPVzsKIAogZXh0ZXJuIHZvaWQg b21wX3NldF9hZmZpbml0eV9mb3JtYXQgKGNvbnN0IGNoYXIgKikgX19HT01QX05PVEhST1c7 CiBleHRlcm4gX19TSVpFX1RZUEVfXyBvbXBfZ2V0X2FmZmluaXR5X2Zvcm1hdCAoY2hhciAq LCBfX1NJWkVfVFlQRV9fKQpkaWZmIC0tZ2l0IGEvbGliZ29tcC9vbXBfbGliLmY5MC5pbiBi L2xpYmdvbXAvb21wX2xpYi5mOTAuaW4KaW5kZXggZGFmNDBkYy4uNTA2ZjE1YyAxMDA2NDQK LS0tIGEvbGliZ29tcC9vbXBfbGliLmY5MC5pbgorKysgYi9saWJnb21wL29tcF9saWIuZjkw LmluCkBAIC04MzUsNiArODM1LDE1IEBACiAgICAgICAgICAgZW5kIGZ1bmN0aW9uIG9tcF90 YXJnZXRfZGlzYXNzb2NpYXRlX3B0cgogICAgICAgICBlbmQgaW50ZXJmYWNlCiAKKyAgICAg ICAgaW50ZXJmYWNlCisgICAgICAgICAgZnVuY3Rpb24gb21wX2dldF9tYXBwZWRfcHRyIChw dHIsIGRldmljZV9udW0pIGJpbmQoYykKKyAgICAgICAgICAgIHVzZSwgaW50cmluc2ljIDo6 IGlzb19jX2JpbmRpbmcsIG9ubHkgOiBjX3B0ciwgY19pbnQKKyAgICAgICAgICAgIHR5cGUo Y19wdHIpIDo6IG9tcF9nZXRfbWFwcGVkX3B0cgorICAgICAgICAgICAgdHlwZShjX3B0ciks IHZhbHVlIDo6IHB0cgorICAgICAgICAgICAgaW50ZWdlcihjX2ludCksIHZhbHVlIDo6IGRl dmljZV9udW0KKyAgICAgICAgICBlbmQgZnVuY3Rpb24gb21wX2dldF9tYXBwZWRfcHRyCisg ICAgICAgIGVuZCBpbnRlcmZhY2UKKwogI2lmIF9PUEVOTVAgPj0gMjAxODExCiAhR0NDJCBB VFRSSUJVVEVTIERFUFJFQ0FURUQgOjogb21wX2dldF9uZXN0ZWQsIG9tcF9zZXRfbmVzdGVk CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmdvbXAvb21wX2xpYi5oLmluIGIvbGliZ29tcC9v bXBfbGliLmguaW4KaW5kZXggZmY4NTdhNC4uMGY0ODUxMCAxMDA2NDQKLS0tIGEvbGliZ29t cC9vbXBfbGliLmguaW4KKysrIGIvbGliZ29tcC9vbXBfbGliLmguaW4KQEAgLTQxNiwzICs0 MTYsMTIgQEAKICAgICAgICAgICBpbnRlZ2VyKGNfaW50KSwgdmFsdWUgOjogZGV2aWNlX251 bQogICAgICAgICBlbmQgZnVuY3Rpb24gb21wX3RhcmdldF9kaXNhc3NvY2lhdGVfcHRyCiAg ICAgICBlbmQgaW50ZXJmYWNlCisKKyAgICAgIGludGVyZmFjZQorICAgICAgICBmdW5jdGlv biBvbXBfZ2V0X21hcHBlZF9wdHIgKHB0ciwgZGV2aWNlX251bSkgYmluZChjKQorICAgICAg ICAgIHVzZSwgaW50cmluc2ljIDo6IGlzb19jX2JpbmRpbmcsIG9ubHkgOiBjX3B0ciwgY19p bnQKKyAgICAgICAgICB0eXBlKGNfcHRyKSA6OiBvbXBfZ2V0X21hcHBlZF9wdHIKKyAgICAg ICAgICB0eXBlKGNfcHRyKSwgdmFsdWUgOjogcHRyCisgICAgICAgICAgaW50ZWdlcihjX2lu dCksIHZhbHVlIDo6IGRldmljZV9udW0KKyAgICAgICAgZW5kIGZ1bmN0aW9uIG9tcF9nZXRf bWFwcGVkX3B0cgorICAgICAgZW5kIGludGVyZmFjZQpkaWZmIC0tZ2l0IGEvbGliZ29tcC90 YXJnZXQuYyBiL2xpYmdvbXAvdGFyZ2V0LmMKaW5kZXggOTAxNzQ1OC4uNzM1ZDcwYiAxMDA2 NDQKLS0tIGEvbGliZ29tcC90YXJnZXQuYworKysgYi9saWJnb21wL3RhcmdldC5jCkBAIC0z NjY1LDYgKzM2NjUsNDkgQEAgb21wX3RhcmdldF9kaXNhc3NvY2lhdGVfcHRyIChjb25zdCB2 b2lkICpwdHIsIGludCBkZXZpY2VfbnVtKQogICByZXR1cm4gcmV0OwogfQogCit2b2lkICoK K29tcF9nZXRfbWFwcGVkX3B0ciAoY29uc3Qgdm9pZCAqcHRyLCBpbnQgZGV2aWNlX251bSkK K3sKKyAgaWYgKGRldmljZV9udW0gPCAwIHx8IGRldmljZV9udW0gPiBvbXBfZ2V0X251bV9k ZXZpY2VzICgpKQorICAgIHJldHVybiBOVUxMOworCisgIGlmIChkZXZpY2VfbnVtID09IG9t cF9nZXRfaW5pdGlhbF9kZXZpY2UgKCkpCisgICAgcmV0dXJuICh2b2lkKilwdHI7CisKKyAg c3RydWN0IGdvbXBfZGV2aWNlX2Rlc2NyICpkZXZpY2VwID0gcmVzb2x2ZV9kZXZpY2UgKGRl dmljZV9udW0pOworICBpZiAoZGV2aWNlcCA9PSBOVUxMKQorICAgIHJldHVybiBOVUxMOwor CisgIGlmICghKGRldmljZXAtPmNhcGFiaWxpdGllcyAmIEdPTVBfT0ZGTE9BRF9DQVBfT1BF Tk1QXzQwMCkKKyAgICAgIHx8IGRldmljZXAtPmNhcGFiaWxpdGllcyAmIEdPTVBfT0ZGTE9B RF9DQVBfU0hBUkVEX01FTSkKKyAgICByZXR1cm4gKHZvaWQqKXB0cjsKKworICBnb21wX211 dGV4X2xvY2sgKCZkZXZpY2VwLT5sb2NrKTsKKworICBzdHJ1Y3Qgc3BsYXlfdHJlZV9zICpt ZW1fbWFwID0gJmRldmljZXAtPm1lbV9tYXA7CisgIHN0cnVjdCBzcGxheV90cmVlX2tleV9z IGN1cl9ub2RlOworICB2b2lkICpyZXQgPSBOVUxMOworICB1aW50cHRyX3Qgb2Zmc2V0ID0g MDsKKworICBjdXJfbm9kZS5ob3N0X3N0YXJ0ID0gKHVpbnRwdHJfdCkgcHRyOworICBjdXJf bm9kZS5ob3N0X2VuZCA9IGN1cl9ub2RlLmhvc3Rfc3RhcnQ7CisgIHNwbGF5X3RyZWVfa2V5 IG4gPSBnb21wX21hcF8wbGVuX2xvb2t1cCAobWVtX21hcCwgJmN1cl9ub2RlKTsKKworICBp ZiAobiAmJiBuLT5ob3N0X3N0YXJ0ID09IGN1cl9ub2RlLmhvc3Rfc3RhcnQpCisgICAgewor ICAgICAgcmV0ID0gKHZvaWQqKSBuLT50Z3QtPnRndF9zdGFydCArIG4tPnRndF9vZmZzZXQ7 CisgICAgfQorICBlbHNlIGlmIChuKQorICAgIHsKKyAgICAgIG9mZnNldCA9IGN1cl9ub2Rl Lmhvc3Rfc3RhcnQgLSBuLT5ob3N0X3N0YXJ0OworICAgICAgcmV0ID0gKHZvaWQqKSBuLT50 Z3QtPnRndF9zdGFydCArIG4tPnRndF9vZmZzZXQgKyBvZmZzZXQ7CisgICAgfQorCisgIGdv bXBfbXV0ZXhfdW5sb2NrICgmZGV2aWNlcC0+bG9jayk7CisKKyAgcmV0dXJuIHJldDsKK30K KwogaW50CiBvbXBfcGF1c2VfcmVzb3VyY2UgKG9tcF9wYXVzZV9yZXNvdXJjZV90IGtpbmQs IGludCBkZXZpY2VfbnVtKQogewpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGli Z29tcC5jLWMrKy1jb21tb24vZ2V0LW1hcHBlZC1wdHItMS5jIGIvbGliZ29tcC90ZXN0c3Vp dGUvbGliZ29tcC5jLWMrKy1jb21tb24vZ2V0LW1hcHBlZC1wdHItMS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YjkzMzIKLS0tIC9kZXYvbnVsbAorKysgYi9s aWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi9nZXQtbWFwcGVkLXB0ci0x LmMKQEAgLTAsMCArMSw0MSBAQAorI2luY2x1ZGUgPG9tcC5oPgorI2luY2x1ZGUgPHN0ZGxp Yi5oPgorCitpbnQKK21haW4gKCkKK3sKKyAgaW50IGQgPSBvbXBfZ2V0X2RlZmF1bHRfZGV2 aWNlICgpOworICBpbnQgaWQgPSBvbXBfZ2V0X2luaXRpYWxfZGV2aWNlICgpOworICB2b2lk ICpwICwgKnE7CisKKyAgaWYgKGQgPCAwIHx8IGQgPj0gb21wX2dldF9udW1fZGV2aWNlcyAo KSkKKyAgICBkID0gaWQ7CisKKyAgcCA9IG9tcF90YXJnZXRfYWxsb2MgKHNpemVvZiAoaW50 KSwgZCk7CisgIGlmIChwID09IE5VTEwpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKG9tcF90 YXJnZXRfYXNzb2NpYXRlX3B0ciAocSwgcCwgc2l6ZW9mIChpbnQpLCAwLCBkKSAhPSAwKQor ICAgIHJldHVybiAwOworCisgIGlmIChvbXBfZ2V0X21hcHBlZF9wdHIgKHEsIC0xKSAhPSBO VUxMKQorICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsKKworICBpZiAob21wX2dldF9tYXBwZWRf cHRyIChxLCBvbXBfZ2V0X251bV9kZXZpY2VzICgpICsgMSkgIT0gTlVMTCkKKyAgICBfX2J1 aWx0aW5fYWJvcnQgKCk7CisKKyAgaWYgKG9tcF9nZXRfbWFwcGVkX3B0ciAocSwgaWQpICE9 IHEpCisgICAgX19idWlsdGluX2Fib3J0ICgpOworCisgIGlmIChvbXBfZ2V0X21hcHBlZF9w dHIgKHEsIGQpICE9IHApCisgICAgX19idWlsdGluX2Fib3J0ICgpOworCisgIGlmIChvbXBf dGFyZ2V0X2Rpc2Fzc29jaWF0ZV9wdHIgKHEsIGQpICE9IDApCisgICAgX19idWlsdGluX2Fi b3J0ICgpOworCisgIGlmIChvbXBfZ2V0X21hcHBlZF9wdHIgKHEsIGQpICE9IE5VTEwpCisg ICAgX19idWlsdGluX2Fib3J0ICgpOworCisgIG9tcF90YXJnZXRfZnJlZSAocCwgZCk7Cisg IHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5j LWMrKy1jb21tb24vZ2V0LW1hcHBlZC1wdHItMi5jIGIvbGliZ29tcC90ZXN0c3VpdGUvbGli Z29tcC5jLWMrKy1jb21tb24vZ2V0LW1hcHBlZC1wdHItMi5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmJiZTQ3MTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJnb21w L3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi9nZXQtbWFwcGVkLXB0ci0yLmMKQEAg LTAsMCArMSwxMDYgQEAKKyNpbmNsdWRlIDxvbXAuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4K KyNpbmNsdWRlIDxzdGRpbnQuaD4KKworaW50CittYWluICgpCit7CisgIGludCBkID0gb21w X2dldF9kZWZhdWx0X2RldmljZSAoKTsKKyAgaW50IGlkID0gb21wX2dldF9pbml0aWFsX2Rl dmljZSAoKTsKKyAgaW50IGEgPSA0MjsKKyAgaW50IGJbXSA9IHsgMjQsIDQyIH07CisgIGlu dCBjW10gPSB7IDQ3LCAxMSB9OworICBpbnQgZVsxMjhdOworICBpbnQgKnEgPSAmYTsKKyAg dm9pZCAqcDEgPSBOVUxMLCAqcDIgPSBOVUxMLCAqcDMgPSBOVUxMOworICB2b2lkICpkZXZw dHJzWzEyOF07CisKKyAgaWYgKGQgPCAwIHx8IGQgPj0gb21wX2dldF9udW1fZGV2aWNlcyAo KSkKKyAgICBkID0gaWQ7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMjg7IGkrKykKKyAg ICBlW2ldID0gaTsKKworICAjcHJhZ21hIG9tcCB0YXJnZXQgZGF0YSBtYXAoYWxsb2M6IGEs IGIsIGNbMV0sIGVbMzI6NjRdKSBkZXZpY2UoZCkKKyAgeworICAgICNwcmFnbWEgb21wIHRh cmdldCBtYXAoZnJvbTogcDEsIHAyLCBwMywgZGV2cHRycykgbWFwKGFsbG9jOiBhLCBiLCBj WzFdLCBlWzMyOjY0XSkgZGV2aWNlKGQpCisgICAgeworICAgICAgcDEgPSAmYTsKKyAgICAg IHAyID0gJmI7CisgICAgICBwMyA9ICZjWzFdOworICAgICAgZm9yIChpbnQgaSA9IDMyOyBp IDwgOTY7IGkrKykKKwlkZXZwdHJzW2ldID0gJmVbaV07CisgICAgfQorCisgICAgaWYgKG9t cF9nZXRfbWFwcGVkX3B0ciAoJmEsIGQpICE9IChkID09IGlkID8gJmEgOiBwMSkKKwl8fCBv bXBfZ2V0X21hcHBlZF9wdHIgKHEsIGQpICE9IChkID09IGlkID8gcSA6IHAxKQorCXx8IG9t cF9nZXRfbWFwcGVkX3B0ciAoYiwgZCkgIT0gKGQgPT0gaWQgPyBiIDogcDIpCisJfHwgb21w X2dldF9tYXBwZWRfcHRyICgmYlswXSwgZCkgIT0gKGQgPT0gaWQgPyAmYlswXSA6IHAyKQor CXx8IG9tcF9nZXRfbWFwcGVkX3B0ciAoJmNbMV0sIGQpICE9IChkID09IGlkID8gJmNbMV0g OiBwMykKKwl8fCBvbXBfZ2V0X21hcHBlZF9wdHIgKCZjWzBdLCBkKSAhPSAoZCA9PSBpZCA/ ICZjWzBdIDogTlVMTCkpCisgICAgICBfX2J1aWx0aW5fYWJvcnQgKCk7CisKKyAgICBmb3Ig KGludCBpID0gMDsgaSA8IDMyOyBpKyspCisgICAgICBpZiAob21wX2dldF9tYXBwZWRfcHRy ICgmZVtpXSwgZCkgIT0gKGQgPT0gaWQgPyAmZVtpXSA6IE5VTEwpKQorCV9fYnVpbHRpbl9h Ym9ydCAoKTsKKyAgICBmb3IgKGludCBpID0gMzI7IGkgPCA5NjsgaSsrKQorICAgICAgaWYg KG9tcF9nZXRfbWFwcGVkX3B0ciAoJmVbaV0sIGQpICE9IChkID09IGlkID8gJmVbaV0gOiBk ZXZwdHJzW2ldKSkKKwlfX2J1aWx0aW5fYWJvcnQgKCk7CisgICAgZm9yIChpbnQgaSA9IDk2 OyBpIDwgMTI4OyBpKyspCisgICAgICBpZiAob21wX2dldF9tYXBwZWRfcHRyICgmZVtpXSwg ZCkgIT0gKGQgPT0gaWQgPyAmZVtpXSA6IE5VTEwpKQorCV9fYnVpbHRpbl9hYm9ydCAoKTsK KyAgfQorCisgIGlmIChvbXBfZ2V0X21hcHBlZF9wdHIgKCZhLCBkKSAhPSAoZCA9PSBpZCA/ ICZhIDogTlVMTCkKKyAgICAgIHx8IG9tcF9nZXRfbWFwcGVkX3B0ciAocSwgZCkgIT0gKGQg PT0gaWQgPyBxIDogTlVMTCkKKyAgICAgIHx8IG9tcF9nZXRfbWFwcGVkX3B0ciAoYiwgZCkg IT0gKGQgPT0gaWQgPyBiIDogTlVMTCkKKyAgICAgIHx8IG9tcF9nZXRfbWFwcGVkX3B0ciAo JmJbMF0sIGQpICE9IChkID09IGlkID8gJmJbMF0gOiBOVUxMKQorICAgICAgfHwgb21wX2dl dF9tYXBwZWRfcHRyICgmY1sxXSwgZCkgIT0gKGQgPT0gaWQgPyAmY1sxXSA6IE5VTEwpCisg ICAgICB8fCBvbXBfZ2V0X21hcHBlZF9wdHIgKCZjWzBdLCBkKSAhPSAoZCA9PSBpZCA/ICZj WzBdIDogTlVMTCkpCisgICAgX19idWlsdGluX2Fib3J0ICgpOworICBmb3IgKGludCBpID0g MDsgaSA8IDEyODsgaSsrKQorICAgIGlmIChvbXBfZ2V0X21hcHBlZF9wdHIgKCZlW2ldLCBk KSAhPSAoZCA9PSBpZCA/ICZlW2ldIDogTlVMTCkpCisgICAgICBfX2J1aWx0aW5fYWJvcnQg KCk7CisKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwIChhbGxvYzogYSwg YiwgY1sxXSwgZVszMjo2NF0pIGRldmljZSAoZCkKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IG1h cChmcm9tOiBwMSwgcDIsIHAzLCBkZXZwdHJzKSBtYXAoYWxsb2M6IGEsIGIsIGNbMV0sIGVb MzI6NjRdKSBkZXZpY2UoZCkKKyAgeworICAgIHAxID0gJmE7CisgICAgcDIgPSAmYjsKKyAg ICBwMyA9ICZjWzFdOworICAgIGZvciAoaW50IGkgPSAzMjsgaSA8IDk2OyBpKyspCisgICAg ICBkZXZwdHJzW2ldID0gJmVbaV07CisgIH0KKworICBpZiAob21wX2dldF9tYXBwZWRfcHRy ICgmYSwgZCkgIT0gKGQgPT0gaWQgPyAmYSA6IHAxKQorICAgICAgfHwgb21wX2dldF9tYXBw ZWRfcHRyIChxLCBkKSAhPSAoZCA9PSBpZCA/IHEgOiBwMSkKKyAgICAgIHx8IG9tcF9nZXRf bWFwcGVkX3B0ciAoYiwgZCkgIT0gKGQgPT0gaWQgPyBiIDogcDIpCisgICAgICB8fCBvbXBf Z2V0X21hcHBlZF9wdHIgKCZiWzBdLCBkKSAhPSAoZCA9PSBpZCA/ICZiWzBdIDogcDIpCisg ICAgICB8fCBvbXBfZ2V0X21hcHBlZF9wdHIgKCZjWzFdLCBkKSAhPSAoZCA9PSBpZCA/ICZj WzFdIDogcDMpCisgICAgICB8fCBvbXBfZ2V0X21hcHBlZF9wdHIgKCZjWzBdLCBkKSAhPSAo ZCA9PSBpZCA/ICZjWzBdIDogTlVMTCkpCisgICAgX19idWlsdGluX2Fib3J0ICgpOworICBm b3IgKGludCBpID0gMDsgaSA8IDMyOyBpKyspCisgICAgaWYgKG9tcF9nZXRfbWFwcGVkX3B0 ciAoJmVbaV0sIGQpICE9IChkID09IGlkID8gJmVbaV0gOiBOVUxMKSkKKyAgICAgIF9fYnVp bHRpbl9hYm9ydCAoKTsKKyAgZm9yIChpbnQgaSA9IDMyOyBpIDwgOTY7IGkrKykKKyAgICBp ZiAob21wX2dldF9tYXBwZWRfcHRyICgmZVtpXSwgZCkgIT0gKGQgPT0gaWQgPyAmZVtpXSA6 IGRldnB0cnNbaV0pKQorICAgICAgX19idWlsdGluX2Fib3J0ICgpOworICBmb3IgKGludCBp ID0gOTY7IGkgPCAxMjg7IGkrKykKKyAgICBpZiAob21wX2dldF9tYXBwZWRfcHRyICgmZVtp XSwgZCkgIT0gKGQgPT0gaWQgPyAmZVtpXSA6IE5VTEwpKQorICAgICAgX19idWlsdGluX2Fi b3J0ICgpOworCisgICNwcmFnbWEgb21wIHRhcmdldCBleGl0IGRhdGEgbWFwIChkZWxldGU6 IGEsIGIsIGNbMV0sIGVbMzI6NjRdKSBkZXZpY2UgKGQpCisKKyAgaWYgKG9tcF9nZXRfbWFw cGVkX3B0ciAoJmEsIGQpICE9IChkID09IGlkID8gJmEgOiBOVUxMKQorICAgICAgfHwgb21w X2dldF9tYXBwZWRfcHRyIChxLCBkKSAhPSAoZCA9PSBpZCA/IHEgOiBOVUxMKQorICAgICAg fHwgb21wX2dldF9tYXBwZWRfcHRyIChiLCBkKSAhPSAoZCA9PSBpZCA/IGIgOiBOVUxMKQor ICAgICAgfHwgb21wX2dldF9tYXBwZWRfcHRyICgmYlswXSwgZCkgIT0gKGQgPT0gaWQgPyAm YlswXSA6IE5VTEwpCisgICAgICB8fCBvbXBfZ2V0X21hcHBlZF9wdHIgKCZjWzFdLCBkKSAh PSAoZCA9PSBpZCA/ICZjWzFdIDogTlVMTCkKKyAgICAgIHx8IG9tcF9nZXRfbWFwcGVkX3B0 ciAoJmNbMF0sIGQpICE9IChkID09IGlkID8gJmNbMF0gOiBOVUxMKSkKKyAgICBfX2J1aWx0 aW5fYWJvcnQgKCk7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgMTI4OyBpKyspCisgICAgaWYg KG9tcF9nZXRfbWFwcGVkX3B0ciAoJmVbaV0sIGQpICE9IChkID09IGlkID8gJmVbaV0gOiBO VUxMKSkKKyAgICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsKKworICByZXR1cm4gMDsKK30KZGlm ZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL2dldC1t YXBwZWQtcHRyLTMuYyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9u L2dldC1tYXBwZWQtcHRyLTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li42NzQyOWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29t cC5jLWMrKy1jb21tb24vZ2V0LW1hcHBlZC1wdHItMy5jCkBAIC0wLDAgKzEsNTEgQEAKKyNp bmNsdWRlIDxvbXAuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworaW50CittYWluICgpCit7 CisgIGludCBkID0gb21wX2dldF9kZWZhdWx0X2RldmljZSAoKTsKKyAgaW50IGlkID0gb21w X2dldF9pbml0aWFsX2RldmljZSAoKTsKKyAgaW50IGFbMF07CisgIGludCBiW10gPSB7IDI0 LCA0MiB9OworICB2b2lkICpwMSA9IE5VTEwsICpwMiA9IE5VTEw7CisKKyAgaWYgKGQgPCAw IHx8IGQgPj0gb21wX2dldF9udW1fZGV2aWNlcyAoKSkKKyAgICBkID0gaWQ7CisKKyAgdm9p ZCAqcCA9IG9tcF90YXJnZXRfYWxsb2MgKHNpemVvZiAoaW50KSwgZCk7CisgIGlmIChwID09 IE5VTEwpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKG9tcF90YXJnZXRfYXNzb2NpYXRlX3B0 ciAoYSwgcCwgc2l6ZW9mIChpbnQpLCAwLCBkKSAhPSAwKQorICAgIHJldHVybiAwOworCisg IGlmIChvbXBfZ2V0X21hcHBlZF9wdHIgKGEsIGQpICE9IChkID09IGlkID8gYSA6IHApKQor ICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsKKworICBpZiAob21wX3RhcmdldF9kaXNhc3NvY2lh dGVfcHRyIChhLCBkKSAhPSAwKQorICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsKKworICBpZiAo b21wX2dldF9tYXBwZWRfcHRyIChhLCBkKSAhPSAoZCA9PSBpZCA/IGEgOiBOVUxMKSkKKyAg ICBfX2J1aWx0aW5fYWJvcnQgKCk7CisKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGRhdGEgbWFw KGFsbG9jOiBhLCBiWzE6MF0pIGRldmljZShkKQorICB7CisgICAgI3ByYWdtYSBvbXAgdGFy Z2V0IG1hcChmcm9tOiBwMSwgcDIpIG1hcChhbGxvYzogYSwgYlsxOjBdKSBkZXZpY2UoZCkK KyAgICB7CisgICAgICBwMSA9ICZhOworICAgICAgcDIgPSAmYlsxXTsKKyAgICB9CisKKyAg ICAvKiBUaGlzIGlzIHByb2JhYmx5IGV4cGVjdGVkIHRvIGJlIHAxL3AyIGluc3RlYWQgb2Yg TlVMTC4gWmVyby1sZW5ndGggYXJyYXlzCisgICAgICAgYXMgbGlzdCBpdGVtcyBvZiB0aGUg bWFwIGNsYXVzZSBhcmUgY3VycmVudGx5IG5vdCBpbnNlcnRlZCBpbnRvIHRoZSBtZW0KKyAg ICAgICBtYXAgPyEgSG93ZXZlciBieSByZXR1cm5pbmcgTlVMTCwgb21wX2dldF9tYXBwZWRf cHRyIGlzIGNvbnNpc3RlbnQgd2l0aAorICAgICAgIG9tcF90YXJnZXRfaXNfcHJlc2VudC4g ICovCisgICAgaWYgKG9tcF9nZXRfbWFwcGVkX3B0ciAoYSwgZCkgIT0gTlVMTAorCXx8IG9t cF9nZXRfbWFwcGVkX3B0ciAoJmJbMV0sIGQpICE9IE5VTEwpCisgICAgICBfX2J1aWx0aW5f YWJvcnQgKCk7CisgIH0KKworICBvbXBfdGFyZ2V0X2ZyZWUgKHAsIGQpOworICByZXR1cm4g MDsKK30KZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29t bW9uL2dldC1tYXBwZWQtcHRyLTQuYyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1j KystY29tbW9uL2dldC1tYXBwZWQtcHRyLTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5jOGVhYzA2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3Vp dGUvbGliZ29tcC5jLWMrKy1jb21tb24vZ2V0LW1hcHBlZC1wdHItNC5jCkBAIC0wLDAgKzEs NDkgQEAKKyNpbmNsdWRlIDxvbXAuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworaW50Citt YWluICgpCit7CisgIGludCBkID0gb21wX2dldF9kZWZhdWx0X2RldmljZSAoKTsKKyAgaW50 IGlkID0gb21wX2dldF9pbml0aWFsX2RldmljZSAoKTsKKyAgc3RydWN0IHNfdCB7IGludCBt MTsgY2hhciBtMjsgfSBzOworICB2b2lkICpwMSA9IE5VTEwsICpwMiA9IE5VTEw7CisKKyAg aWYgKGQgPCAwIHx8IGQgPj0gb21wX2dldF9udW1fZGV2aWNlcyAoKSkKKyAgICBkID0gaWQ7 CisKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGRhdGEgbWFwKGFsbG9jOiBzLCBzLm0yKSBkZXZp Y2UoZCkKKyAgeworICAgICNwcmFnbWEgb21wIHRhcmdldCBtYXAoZnJvbTogcDEsIHAyKSBt YXAoYWxsb2M6IHMsIHMubTIpIGRldmljZShkKQorICAgIHsKKyAgICAgIHAxID0gJnM7Cisg ICAgICBwMiA9ICZzLm0yOworICAgIH0KKyAgICBpZiAob21wX2dldF9tYXBwZWRfcHRyICgm cywgZCkgIT0gKGQgPT0gaWQgPyAmcyA6IHAxKQorCXx8IG9tcF9nZXRfbWFwcGVkX3B0ciAo JnMubTIsIGQpICE9IChkID09IGlkID8gJnMubTIgOiBwMikpCisgICAgICBfX2J1aWx0aW5f YWJvcnQgKCk7CisgIH0KKworICBpZiAob21wX2dldF9tYXBwZWRfcHRyICgmcywgZCkgIT0g KGQgPT0gaWQgPyAmcyA6IE5VTEwpCisgICAgICB8fCBvbXBfZ2V0X21hcHBlZF9wdHIgKCZz Lm0yLCBkKSAhPSAoZCA9PSBpZCA/ICZzLm0yIDogTlVMTCkpCisgICAgX19idWlsdGluX2Fi b3J0ICgpOworCisgICNwcmFnbWEgb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzog cywgcy5tMikgZGV2aWNlIChkKQorICAjcHJhZ21hIG9tcCB0YXJnZXQgbWFwKGZyb206IHAx LCBwMikgbWFwKGFsbG9jOiBzLCBzLm0yKSBkZXZpY2UoZCkKKyAgeworICAgIHAxID0gJnM7 CisgICAgcDIgPSAmcy5tMjsKKyAgfQorCisgIGlmIChvbXBfZ2V0X21hcHBlZF9wdHIgKCZz LCBkKSAhPSAoZCA9PSBpZCA/ICZzIDogcDEpCisgICAgICB8fCBvbXBfZ2V0X21hcHBlZF9w dHIgKCZzLm0yLCBkKSAhPSAoZCA9PSBpZCA/ICZzLm0yIDogcDIpKQorICAgIF9fYnVpbHRp bl9hYm9ydCAoKTsKKworICAjcHJhZ21hIG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcCAoZGVs ZXRlOiBzLCBzLm0yKSBkZXZpY2UgKGQpCisKKyAgaWYgKG9tcF9nZXRfbWFwcGVkX3B0ciAo JnMsIGQpICE9IChkID09IGlkID8gJnMgOiBOVUxMKQorICAgICAgfHwgb21wX2dldF9tYXBw ZWRfcHRyICgmcy5tMiwgZCkgIT0gKGQgPT0gaWQgPyAmcy5tMiA6IE5VTEwpKQorICAgIF9f YnVpbHRpbl9hYm9ydCAoKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmdv bXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9nZXQtbWFwcGVkLXB0ci0xLmY5MCBiL2xp YmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9nZXQtbWFwcGVkLXB0ci0xLmY5MApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTA1MTc5Ci0tLSAvZGV2L251 bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL2dldC1tYXBwZWQt cHRyLTEuZjkwCkBAIC0wLDAgKzEsNDMgQEAKK3Byb2dyYW0gbWFpbgorICB1c2Ugb21wX2xp YgorICB1c2UgaXNvX2NfYmluZGluZworICBpbXBsaWNpdCBub25lIChleHRlcm5hbCwgdHlw ZSkKKyAgaW50ZWdlciA6OiBkLCBpZAorICB0eXBlKGNfcHRyKSA6OiBwCisgIGludGVnZXIs IHRhcmdldCA6OiBxCisKKyAgZCA9IG9tcF9nZXRfZGVmYXVsdF9kZXZpY2UgKCkKKyAgaWQg PSBvbXBfZ2V0X2luaXRpYWxfZGV2aWNlICgpCisKKyAgaWYgKGQgPCAwIC5vci4gZCA+PSBv bXBfZ2V0X251bV9kZXZpY2VzICgpKSAmCisgICAgZCA9IGlkCisKKyAgcCA9IG9tcF90YXJn ZXRfYWxsb2MgKGNfc2l6ZW9mIChxKSwgZCkKKyAgaWYgKC5ub3QuIGNfYXNzb2NpYXRlZCAo cCkpICYKKyAgICBzdG9wIDAgICEgb2theQorCisgIGlmIChvbXBfdGFyZ2V0X2Fzc29jaWF0 ZV9wdHIgKGNfbG9jIChxKSwgcCwgY19zaXplb2YgKHEpLCAmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDBfY19zaXplX3QsIGQpID09IDApIHRoZW4KKworICAgIGlmKGNf YXNzb2NpYXRlZCAob21wX2dldF9tYXBwZWRfcHRyIChjX2xvYyAocSksIC0xKSkpICYKKyAg ICAgIHN0b3AgMQorCisgICAgaWYoY19hc3NvY2lhdGVkIChvbXBfZ2V0X21hcHBlZF9wdHIg KGNfbG9jIChxKSwgJgorICAgICAgICAgICAgICAgICAgICAgb21wX2dldF9udW1fZGV2aWNl cyAoKSArIDEpKSkgJgorICAgICAgc3RvcCAyCisKKyAgICBpZigubm90LiBjX2Fzc29jaWF0 ZWQgKG9tcF9nZXRfbWFwcGVkX3B0ciAoY19sb2MgKHEpLCBpZCksIGNfbG9jIChxKSkpICYK KyAgICAgIHN0b3AgMworCisgICAgaWYoLm5vdC4gY19hc3NvY2lhdGVkIChvbXBfZ2V0X21h cHBlZF9wdHIgKGNfbG9jIChxKSwgZCksIHApKSAmCisgICAgICBzdG9wIDQKKworICAgIGlm IChvbXBfdGFyZ2V0X2Rpc2Fzc29jaWF0ZV9wdHIgKGNfbG9jIChxKSwgZCkgLz0gMCkgJgor ICAgICAgc3RvcCA1CisKKyAgICBpZihjX2Fzc29jaWF0ZWQgKG9tcF9nZXRfbWFwcGVkX3B0 ciAoY19sb2MgKHEpLCBkKSkpICYKKyAgICAgIHN0b3AgNgorICBlbmQgaWYKKworICBjYWxs IG9tcF90YXJnZXRfZnJlZSAocCwgZCkKK2VuZCBwcm9ncmFtIG1haW4KZGlmZiAtLWdpdCBh L2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9nZXQtbWFwcGVkLXB0ci0yLmY5 MCBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9nZXQtbWFwcGVkLXB0ci0y LmY5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmEwYjg4Ci0tLSAv ZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL2dldC1t YXBwZWQtcHRyLTIuZjkwCkBAIC0wLDAgKzEsMTc1IEBACitwcm9ncmFtIG1haW4KKyAgdXNl IG9tcF9saWIKKyAgdXNlIGlzb19jX2JpbmRpbmcKKyAgaW1wbGljaXQgbm9uZSAoZXh0ZXJu YWwsIHR5cGUpCisgIGludGVnZXIgOjogZCwgaWQsIGksIGoKKyAgaW50ZWdlciwgdGFyZ2V0 IDo6IGEsIGIoMToyKSwgYygxOjIpLCBlKDA6MTI3KQorICB0eXBlKGNfcHRyKSA6OiBwMSwg cDIsIHAzLCBxLCBkZXZwdHJzKDA6NjMpCisKKyAgYSA9IDQyOworICBxID0gY19sb2MgKGEp OworICBlID0gWyhpLCBpID0gMCwgMTI3KV0KKworICBkID0gb21wX2dldF9kZWZhdWx0X2Rl dmljZSAoKQorICBpZCA9IG9tcF9nZXRfaW5pdGlhbF9kZXZpY2UgKCkKKworICBpZiAoZCA8 IDAgLm9yLiBkID49IG9tcF9nZXRfbnVtX2RldmljZXMgKCkpICYKKyAgICBkID0gaWQKKwor ICBpZiAoZCAvPSBpZCkgdGhlbgorICAgICEkb21wIHRhcmdldCBkYXRhIG1hcChhbGxvYzog YSwgYiwgYygyKSwgZSgzMjo5NSkpIGRldmljZShkKQorICAgICAgISRvbXAgdGFyZ2V0IG1h cChmcm9tOiBwMSwgcDIsIHAzLCBkZXZwdHJzKSBtYXAoYWxsb2M6IGEsIGIsIGMoMiksIGUo MzI6OTUpKSBkZXZpY2UoZCkKKyAgICAgIHAxID0gY19sb2MgKGEpOworICAgICAgcDIgPSBj X2xvYyAoYik7CisgICAgICBwMyA9IGNfbG9jIChjKDIpKQorICAgICAgZGV2cHRycyA9IFso Y19sb2MgKGUoaSkpLCBpID0gMzIsIDk1KV0KKyAgICAgICEkb21wIGVuZCB0YXJnZXQKKwor ICAgICAgaWYgKC5ub3QuIGNfYXNzb2NpYXRlZCAob21wX2dldF9tYXBwZWRfcHRyIChjX2xv YyAoYSksIGQpLCBwMSkgJgorICAgICAgICAgIC5vci4gLm5vdC4gY19hc3NvY2lhdGVkIChv bXBfZ2V0X21hcHBlZF9wdHIgKHEsIGQpLCBwMSkgJgorICAgICAgICAgIC5vci4gLm5vdC4g Y19hc3NvY2lhdGVkIChvbXBfZ2V0X21hcHBlZF9wdHIgKGNfbG9jIChiKSwgZCksIHAyKSAm CisgICAgICAgICAgLm9yLiAubm90LiBjX2Fzc29jaWF0ZWQgKG9tcF9nZXRfbWFwcGVkX3B0 ciAoY19sb2MgKGIoMSkpLCBkKSwgcDIpICYKKyAgICAgICAgICAub3IuIC5ub3QuIGNfYXNz b2NpYXRlZCAob21wX2dldF9tYXBwZWRfcHRyIChjX2xvYyAoYygyKSksIGQpLCBwMykgJgor ICAgICAgICAgIC5vci4gY19hc3NvY2lhdGVkIChvbXBfZ2V0X21hcHBlZF9wdHIgKGNfbG9j IChjKDEpKSwgZCkpKSAmCisgICAgICAgIHN0b3AgMAorCisgICAgICBkbyBqID0gMCwgMzEK KyAgICAgICAgaWYgKGNfYXNzb2NpYXRlZCAob21wX2dldF9tYXBwZWRfcHRyIChjX2xvYyAo ZShqKSksIGQpKSkgJgorICAgICAgICAgIHN0b3AgMQorICAgICAgZW5kIGRvCisgICAgICBk byBqID0gMzIsIDk1CisgICAgICAgIGlmICgubm90LiBjX2Fzc29jaWF0ZWQgKG9tcF9nZXRf bWFwcGVkX3B0ciAoY19sb2MgKGUoaikpLCBkKSwgZGV2cHRycyhqLTMyKSkpICYKKyAgICAg ICAgICBzdG9wIDIKKyAgICAgIGVuZCBkbworICAgICAgZG8gaiA9IDk2LCAxMjgKKyAgICAg ICAgaWYgKGNfYXNzb2NpYXRlZCAob21wX2dldF9tYXBwZWRfcHRyIChjX2xvYyAoZShqKSks IGQpKSkgJgorICAgICAgICAgIHN0b3AgMworICAgICAgZW5kIGRvCisgICAgISRvbXAgZW5k IHRhcmdldCBkYXRhCisKKyAgICBpZiAoY19hc3NvY2lhdGVkIChvbXBfZ2V0X21hcHBlZF9w dHIgKGNfbG9jIChhKSwgZCkpICYKKyAgICAgICAgLm9yLiBjX2Fzc29jaWF0ZWQgKG9tcF9n ZXRfbWFwcGVkX3B0ciAocSwgZCkpICYKKyAgICAgICAgLm9yLiBjX2Fzc29jaWF0ZWQgKG9t cF9nZXRfbWFwcGVkX3B0ciAoY19sb2MgKGIpLCBkKSkgJgorICAgICAgICAub3IuIGNfYXNz b2NpYXRlZCAob21wX2dldF9tYXBwZWRfcHRyIChjX2xvYyAoYigxKSksIGQpKSAmCisgICAg ICAgIC5vci4gY19hc3NvY2lhdGVkIChvbXBfZ2V0X21hcHBlZF9wdHIgKGNfbG9jIChjKDIp KSwgZCkpICYKKyAgICAgICAgLm9yLiBjX2Fzc29jaWF0ZWQgKG9tcF9nZXRfbWFwcGVkX3B0 ciAoY19sb2MgKGMoMSkpLCBkKSkpICYKKyAgICAgIHN0b3AgNAorICAgICAgZG8gaiA9IDAs IDEyNworICAgICAgICBpZiAoY19hc3NvY2lhdGVkIChvbXBfZ2V0X21hcHBlZF9wdHIgKGNf bG9jIChlKGopKSwgZCkpKSAmCisgICAgICAgICAgc3RvcCA1CisgICAgICBlbmQgZG8KKwor ICAgICEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCAoYWxsb2M6IGEsIGIsIGMoMiksIGUo MzI6OTUpKSBkZXZpY2UgKGQpCisgICAgICAhJG9tcCB0YXJnZXQgbWFwKGZyb206IHAxLCBw MiwgcDMsIGRldnB0cnMpIG1hcChhbGxvYzogYSwgYiwgYygyKSwgZSgzMjo5NSkpIGRldmlj ZShkKQorICAgICAgcDEgPSBjX2xvYyAoYSk7CisgICAgICBwMiA9IGNfbG9jIChiKTsKKyAg ICAgIHAzID0gY19sb2MgKGMoMikpCisgICAgICBkZXZwdHJzID0gWyhjX2xvYyAoZShpKSks IGkgPSAzMiwgOTUpXQorICAgICAgISRvbXAgZW5kIHRhcmdldAorCisgICAgICBpZiAoLm5v dC4gY19hc3NvY2lhdGVkIChvbXBfZ2V0X21hcHBlZF9wdHIgKGNfbG9jIChhKSwgZCksIHAx KSAmCisgICAgICAgICAgLm9yLiAubm90LiBjX2Fzc29jaWF0ZWQgKG9tcF9nZXRfbWFwcGVk X3B0ciAocSwgZCksIHAxKSAmCisgICAgICAgICAgLm9yLiAubm90LiBjX2Fzc29jaWF0ZWQg KG9tcF9nZXRfbWFwcGVkX3B0ciAoY19sb2MgKGIpLCBkKSwgcDIpICYKKyAgICAgICAgICAu b3IuIC5ub3QuIGNfYXNzb2NpYXRlZCAob21wX2dldF9tYXBwZWRfcHRyIChjX2xvYyAoYygy KSksIGQpLCBwMykgJgorICAgICAgICAgIC5vci4gY19hc3NvY2lhdGVkIChvbXBfZ2V0X21h cHBlZF9wdHIgKGNfbG9jIChjKDEpKSwgZCkpKSAmCisgICAgICAgIHN0b3AgNgorCisgICAg ICBkbyBqID0gMCwgMzEKKyAgICAgICAgaWYgKGNfYXNzb2NpYXRlZCAob21wX2dldF9tYXBw ZWRfcHRyIChjX2xvYyAoZShqKSksIGQpKSkgJgorICAgICAgICAgIHN0b3AgNworICAgICAg ZW5kIGRvCisgICAgICBkbyBqID0gMzIsIDk1CisgICAgICAgIGlmICgubm90LiBjX2Fzc29j aWF0ZWQgKG9tcF9nZXRfbWFwcGVkX3B0ciAoY19sb2MgKGUoaikpLCBkKSwgZGV2cHRycyhq LTMyKSkpICYKKyAgICAgICAgICBzdG9wIDgKKyAgICAgIGVuZCBkbworICAgICAgZG8gaiA9 IDk2LCAxMjgKKyAgICAgICAgaWYgKGNfYXNzb2NpYXRlZCAob21wX2dldF9tYXBwZWRfcHRy IChjX2xvYyAoZShqKSksIGQpKSkgJgorICAgICAgICAgIHN0b3AgOQorICAgICAgZW5kIGRv CisgICAgISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAgKGRlbGV0ZTogYSwgYiwgYygyKSwg ZSgzMjo5NSkpIGRldmljZSAoZCkKKworICAgIGlmIChjX2Fzc29jaWF0ZWQgKG9tcF9nZXRf bWFwcGVkX3B0ciAoY19sb2MgKGEpLCBkKSkgJgorICAgICAgICAub3IuIGNfYXNzb2NpYXRl ZCAob21wX2dldF9tYXBwZWRfcHRyIChxLCBkKSkgJgorICAgICAgICAub3IuIGNfYXNzb2Np YXRlZCAob21wX2dldF9tYXBwZWRfcHRyIChjX2xvYyAoYiksIGQpKSAmCisgICAgICAgIC5v ci4gY19hc3NvY2lhdGVkIChvbXBfZ2V0X21hcHBlZF9wdHIgKGNfbG9jIChiKDEpKSwgZCkp ICYKKyAgICAgICAgLm9yLiBjX2Fzc29jaWF0ZWQgKG9tcF9nZXRfbWFwcGVkX3B0ciAoY19s b2MgKGMoMSkpLCBkKSkgJgorICAgICAgICAub3IuIGNfYXNzb2NpYXRlZCAob21wX2dldF9t YXBwZWRfcHRyIChjX2xvYyAoYygyKSksIGQpKSkgJgorICAgICAgc3RvcCAxMAorICAgIGRv IGogPSAwLCAxMjcKKyAgICAgIGlmIChjX2Fzc29jaWF0ZWQgKG9tcF9nZXRfbWFwcGVkX3B0 ciAoY19sb2MgKGUoaikpLCBkKSkpICYKKyAgICAgICAgc3RvcCAxMQorICAgIGVuZCBkbwor CisgIGVsc2UgISBkID09IGlkCisKKyAgICAhJG9tcCB0YXJnZXQgZGF0YSBtYXAoYWxsb2M6 IGEsIGIsIGMoMiksIGUoMzI6OTUpKSBkZXZpY2UoZCkKKyAgICAgICEkb21wIHRhcmdldCBt YXAoZnJvbTogcDEsIHAyLCBwMywgZGV2cHRycykgbWFwKGFsbG9jOiBhLCBiLCBjKDIpLCBl KDMyOjk1KSkgZGV2aWNlKGQpCisgICAgICBwMSA9IGNfbG9jIChhKTsKKyAgICAgIHAyID0g Y19sb2MgKGIpOworICAgICAgcDMgPSBjX2xvYyAoYygyKSkKKyAgICAgIGRldnB0cnMgPSBb KGNfbG9jIChlKGkpKSwgaSA9IDMyLCA5NSldCisgICAgICAhJG9tcCBlbmQgdGFyZ2V0CisK KyAgICAgIGlmICgubm90LiBjX2Fzc29jaWF0ZWQgKG9tcF9nZXRfbWFwcGVkX3B0ciAoY19s b2MgKGEpLCBkKSwgY19sb2MgKGEpKSAmCisgICAgICAgIC5vci4gLm5vdC4gY19hc3NvY2lh dGVkIChvbXBfZ2V0X21hcHBlZF9wdHIgKHEsIGQpLCBxKSAmCisgICAgICAgIC5vci4gLm5v dC4gY19hc3NvY2lhdGVkIChvbXBfZ2V0X21hcHBlZF9wdHIgKGNfbG9jIChiKSwgZCksIGNf bG9jIChiKSkgJgorICAgICAgICAub3IuIC5ub3QuIGNfYXNzb2NpYXRlZCAob21wX2dldF9t YXBwZWRfcHRyIChjX2xvYyAoYigxKSksIGQpLCBjX2xvYyAoYigxKSkpICYKKyAgICAgICAg Lm9yLiAubm90LiBjX2Fzc29jaWF0ZWQgKG9tcF9nZXRfbWFwcGVkX3B0ciAoY19sb2MgKGMo MikpLCBkKSwgY19sb2MgKGMoMikpKSAmCisgICAgICAgIC5vci4gLm5vdC4gY19hc3NvY2lh dGVkIChvbXBfZ2V0X21hcHBlZF9wdHIgKGNfbG9jIChjKDEpKSwgZCksIGNfbG9jIChjKDEp KSkpICYKKyAgICAgIHN0b3AgMTIKKworICAgICAgZG8gaiA9IDAsIDEyNworICAgICAgICBp ZiAoLm5vdC4gY19hc3NvY2lhdGVkIChvbXBfZ2V0X21hcHBlZF9wdHIgKGNfbG9jIChlKGop KSwgZCksIGNfbG9jIChlKGopKSkpICYKKyAgICAgICAgICBzdG9wIDEzCisgICAgICBlbmQg ZG8KKyAgICAhJG9tcCBlbmQgdGFyZ2V0IGRhdGEKKworICAgIGlmICgubm90LiBjX2Fzc29j aWF0ZWQgKG9tcF9nZXRfbWFwcGVkX3B0ciAoY19sb2MgKGEpLCBkKSwgY19sb2MgKGEpKSAm CisgICAgICAgIC5vci4gLm5vdC4gY19hc3NvY2lhdGVkIChvbXBfZ2V0X21hcHBlZF9wdHIg KHEsIGQpLCBxKSAmCisgICAgICAgIC5vci4gLm5vdC4gY19hc3NvY2lhdGVkIChvbXBfZ2V0 X21hcHBlZF9wdHIgKGNfbG9jIChiKSwgZCksIGNfbG9jIChiKSkgJgorICAgICAgICAub3Iu IC5ub3QuIGNfYXNzb2NpYXRlZCAob21wX2dldF9tYXBwZWRfcHRyIChjX2xvYyAoYigxKSks IGQpLCBjX2xvYyAoYigxKSkpICYKKyAgICAgICAgLm9yLiAubm90LiBjX2Fzc29jaWF0ZWQg KG9tcF9nZXRfbWFwcGVkX3B0ciAoY19sb2MgKGMoMikpLCBkKSwgY19sb2MgKGMoMikpKSAm CisgICAgICAgIC5vci4gLm5vdC4gY19hc3NvY2lhdGVkIChvbXBfZ2V0X21hcHBlZF9wdHIg KGNfbG9jIChjKDEpKSwgZCksIGNfbG9jIChjKDEpKSkpICYKKyAgICAgIHN0b3AgMTQKKyAg ICBkbyBqID0gMCwgMTI3CisgICAgICBpZiAoLm5vdC4gY19hc3NvY2lhdGVkIChvbXBfZ2V0 X21hcHBlZF9wdHIgKGNfbG9jIChlKGopKSwgZCkpKSAmCisgICAgICAgIHN0b3AgMTUKKyAg ICBlbmQgZG8KKworICAgICEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCAoYWxsb2M6IGEs IGIsIGMoMiksIGUoMzI6OTUpKSBkZXZpY2UgKGQpCisgICAgICAhJG9tcCB0YXJnZXQgbWFw KGZyb206IHAxLCBwMiwgcDMsIGRldnB0cnMpIG1hcChhbGxvYzogYSwgYiwgYygyKSwgZSgz Mjo5NSkpIGRldmljZShkKQorICAgICAgcDEgPSBjX2xvYyAoYSk7CisgICAgICBwMiA9IGNf bG9jIChiKTsKKyAgICAgIHAzID0gY19sb2MgKGMoMikpCisgICAgICBkZXZwdHJzID0gWyhj X2xvYyAoZShpKSksIGkgPSAzMiwgOTUpXQorICAgICAgISRvbXAgZW5kIHRhcmdldAorCisg ICAgICBpZiAoLm5vdC4gY19hc3NvY2lhdGVkIChvbXBfZ2V0X21hcHBlZF9wdHIgKGNfbG9j IChhKSwgZCksIGNfbG9jIChhKSkgJgorICAgICAgICAub3IuIC5ub3QuIGNfYXNzb2NpYXRl ZCAob21wX2dldF9tYXBwZWRfcHRyIChxLCBkKSwgcSkgJgorICAgICAgICAub3IuIC5ub3Qu IGNfYXNzb2NpYXRlZCAob21wX2dldF9tYXBwZWRfcHRyIChjX2xvYyAoYiksIGQpLCBjX2xv YyAoYikpICYKKyAgICAgICAgLm9yLiAubm90LiBjX2Fzc29jaWF0ZWQgKG9tcF9nZXRfbWFw cGVkX3B0ciAoY19sb2MgKGIoMSkpLCBkKSwgY19sb2MgKGIoMSkpKSAmCisgICAgICAgIC5v ci4gLm5vdC4gY19hc3NvY2lhdGVkIChvbXBfZ2V0X21hcHBlZF9wdHIgKGNfbG9jIChjKDIp KSwgZCksIGNfbG9jIChjKDIpKSkgJgorICAgICAgICAub3IuIC5ub3QuIGNfYXNzb2NpYXRl ZCAob21wX2dldF9tYXBwZWRfcHRyIChjX2xvYyAoYygxKSksIGQpLCBjX2xvYyAoYygxKSkp KSAmCisgICAgICAgIHN0b3AgMTYKKworICAgICAgZG8gaiA9IDAsIDEyNworICAgICAgICBp ZiAoLm5vdC4gY19hc3NvY2lhdGVkIChvbXBfZ2V0X21hcHBlZF9wdHIgKGNfbG9jIChlKGop KSwgZCksIGNfbG9jIChlKGopKSkpICYKKyAgICAgICAgICBzdG9wIDE3CisgICAgICBlbmQg ZG8KKyAgICAhJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcCAoZGVsZXRlOiBhLCBiLCBjKDIp LCBlKDMyOjk1KSkgZGV2aWNlIChkKQorCisgICAgaWYgKC5ub3QuIGNfYXNzb2NpYXRlZCAo b21wX2dldF9tYXBwZWRfcHRyIChjX2xvYyAoYSksIGQpLCBjX2xvYyAoYSkpICYKKyAgICAg ICAgLm9yLiAubm90LiBjX2Fzc29jaWF0ZWQgKG9tcF9nZXRfbWFwcGVkX3B0ciAocSwgZCks IHEpICYKKyAgICAgICAgLm9yLiAubm90LiBjX2Fzc29jaWF0ZWQgKG9tcF9nZXRfbWFwcGVk X3B0ciAoY19sb2MgKGIpLCBkKSwgY19sb2MgKGIpKSAmCisgICAgICAgIC5vci4gLm5vdC4g Y19hc3NvY2lhdGVkIChvbXBfZ2V0X21hcHBlZF9wdHIgKGNfbG9jIChiKDEpKSwgZCksIGNf bG9jIChiKDEpKSkgJgorICAgICAgICAub3IuIC5ub3QuIGNfYXNzb2NpYXRlZCAob21wX2dl dF9tYXBwZWRfcHRyIChjX2xvYyAoYygyKSksIGQpLCBjX2xvYyAoYygyKSkpICYKKyAgICAg ICAgLm9yLiAubm90LiBjX2Fzc29jaWF0ZWQgKG9tcF9nZXRfbWFwcGVkX3B0ciAoY19sb2Mg KGMoMSkpLCBkKSwgY19sb2MgKGMoMSkpKSkgJgorICAgICAgc3RvcCAxOAorCisgICAgZG8g aiA9IDAsIDEyNworICAgICAgaWYgKC5ub3QuIGNfYXNzb2NpYXRlZCAob21wX2dldF9tYXBw ZWRfcHRyIChjX2xvYyAoZShqKSksIGQpLCBjX2xvYyAoZShqKSkpKSAmCisgICAgICAgIHN0 b3AgMTkKKyAgICBlbmQgZG8KKyAgZW5kIGlmCisKK2VuZCBwcm9ncmFtIG1haW4KZGlmZiAt LWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9nZXQtbWFwcGVkLXB0 ci0zLmY5MCBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9nZXQtbWFwcGVk LXB0ci0zLmY5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTdjY2Fj Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFu L2dldC1tYXBwZWQtcHRyLTMuZjkwCkBAIC0wLDAgKzEsNDggQEAKK3Byb2dyYW0gbWFpbgor ICB1c2Ugb21wX2xpYgorICB1c2UgaXNvX2NfYmluZGluZworICBpbXBsaWNpdCBub25lIChl eHRlcm5hbCwgdHlwZSkKKyAgaW50ZWdlciA6OiBkLCBpZAorICB0eXBlKGNfcHRyKSA6OiBw LCBwMSwgcDIKKyAgaW50ZWdlciwgdGFyZ2V0IDo6IGEoMTowKSwgYigxOjIpCisKKyAgZCA9 IG9tcF9nZXRfZGVmYXVsdF9kZXZpY2UgKCkKKyAgaWQgPSBvbXBfZ2V0X2luaXRpYWxfZGV2 aWNlICgpCisKKyAgaWYgKGQgPCAwIC5vci4gZCA+PSBvbXBfZ2V0X251bV9kZXZpY2VzICgp KSAmCisgICAgZCA9IGlkCisKKyAgcCA9IG9tcF90YXJnZXRfYWxsb2MgKGNfc2l6ZW9mIChj X2ludCksIGQpCisgIGlmICgubm90LiBjX2Fzc29jaWF0ZWQgKHApKSAmCisgICAgc3RvcCAw ICAhIG9rYXkKKworICBpZiAob21wX3RhcmdldF9hc3NvY2lhdGVfcHRyIChjX2xvYyAoYSks IHAsIGNfc2l6ZW9mIChjX2ludCksICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMF9jX3NpemVfdCwgZCkgPT0gMCkgdGhlbgorCisgIGlmKC5ub3QuIGNfYXNzb2NpYXRl ZCAob21wX2dldF9tYXBwZWRfcHRyIChjX2xvYyAoYSksIGQpLCBwKSkgJgorICAgIHN0b3Ag MQorCisgIGlmIChvbXBfdGFyZ2V0X2Rpc2Fzc29jaWF0ZV9wdHIgKGNfbG9jIChhKSwgZCkg Lz0gMCkgJgorICAgIHN0b3AgMgorCisgIGlmKGNfYXNzb2NpYXRlZCAob21wX2dldF9tYXBw ZWRfcHRyIChjX2xvYyAoYSksIGQpKSkgJgorICAgIHN0b3AgMworCisgICEkb21wIHRhcmdl dCBkYXRhIG1hcChhbGxvYzogYSkgZGV2aWNlKGQpCisgICAgISRvbXAgdGFyZ2V0IG1hcChm cm9tOiBwMSkgbWFwKGFsbG9jOiBhKSBkZXZpY2UoZCkKKyAgICBwMSA9IGNfbG9jIChhKTsK KyAgICAhJG9tcCBlbmQgdGFyZ2V0CisgICAgaWYgKGNfYXNzb2NpYXRlZCAob21wX2dldF9t YXBwZWRfcHRyIChjX2xvYyAoYSksIGQpKSkgJgorICAgICAgc3RvcCA0CisgICEkb21wIGVu ZCB0YXJnZXQgZGF0YQorCisgICEkb21wIHRhcmdldCBkYXRhIG1hcChhbGxvYzogYigxOjAp KSBkZXZpY2UoZCkKKyAgICAhJG9tcCB0YXJnZXQgbWFwKGZyb206IHAyKSBtYXAoYWxsb2M6 IGIoMTowKSkgZGV2aWNlKGQpCisgICAgcDIgPSBjX2xvYyAoYigxKSk7CisgICAgISRvbXAg ZW5kIHRhcmdldAorICAgIGlmIChjX2Fzc29jaWF0ZWQgKG9tcF9nZXRfbWFwcGVkX3B0ciAo Y19sb2MgKGIoMSkpLCBkKSkpICYKKyAgICAgIHN0b3AgNQorICAhJG9tcCBlbmQgdGFyZ2V0 IGRhdGEKKyAgZW5kIGlmCisgIGNhbGwgb21wX3RhcmdldF9mcmVlIChwLCBkKQorZW5kIHBy b2dyYW0gbWFpbgpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0 cmFuL2dldC1tYXBwZWQtcHRyLTQuZjkwIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5m b3J0cmFuL2dldC1tYXBwZWQtcHRyLTQuZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjQzMDBhNTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJnb21wL3Rlc3RzdWl0 ZS9saWJnb21wLmZvcnRyYW4vZ2V0LW1hcHBlZC1wdHItNC5mOTAKQEAgLTAsMCArMSw4NCBA QAorcHJvZ3JhbSBtYWluCisgIHVzZSBvbXBfbGliCisgIHVzZSBpc29fY19iaW5kaW5nCisg IGltcGxpY2l0IG5vbmUgKGV4dGVybmFsLCB0eXBlKQorICBpbnRlZ2VyIDo6IGQsIGlkCisg IHR5cGUoY19wdHIpIDo6IHAxLCBwMgorCisgIHR5cGUgdAorICAgIGludGVnZXIgOjogbTEs IG0yCisgIGVuZCB0eXBlIHQKKyAgdHlwZSh0KSwgdGFyZ2V0IDo6IHMKKworICBkID0gb21w X2dldF9kZWZhdWx0X2RldmljZSAoKQorICBpZCA9IG9tcF9nZXRfaW5pdGlhbF9kZXZpY2Ug KCkKKworICBpZiAoZCA8IDAgLm9yLiBkID49IG9tcF9nZXRfbnVtX2RldmljZXMgKCkpICYK KyAgICBkID0gaWQKKworICBpZiAoZCAvPSBpZCkgdGhlbgorICAgICEkb21wIHRhcmdldCBk YXRhIG1hcChhbGxvYzogcywgcyVtMikgZGV2aWNlKGQpCisgICAgICAhJG9tcCB0YXJnZXQg bWFwKGZyb206IHAxLCBwMikgbWFwKGFsbG9jOiBzLCBzJW0yKSBkZXZpY2UoZCkKKyAgICAg IHAxID0gY19sb2MgKHMpOworICAgICAgcDIgPSBjX2xvYyAocyVtMik7CisgICAgICAhJG9t cCBlbmQgdGFyZ2V0CisKKyAgICAgIGlmICgubm90LiBjX2Fzc29jaWF0ZWQgKG9tcF9nZXRf bWFwcGVkX3B0ciAoY19sb2MgKHMpLCBkKSwgcDEpICYKKyAgICAgICAgICAub3IuIC5ub3Qu IGNfYXNzb2NpYXRlZCAob21wX2dldF9tYXBwZWRfcHRyIChjX2xvYyAocyVtMiksIGQpLCBw MikpICYKKyAgICAgICAgc3RvcCAwCisgICAgISRvbXAgZW5kIHRhcmdldCBkYXRhCisKKyAg ICBpZiAoY19hc3NvY2lhdGVkIChvbXBfZ2V0X21hcHBlZF9wdHIgKGNfbG9jIChzKSwgZCkp ICYKKyAgICAgICAgLm9yLiBjX2Fzc29jaWF0ZWQgKG9tcF9nZXRfbWFwcGVkX3B0ciAoY19s b2MgKHMlbTIpLCBkKSkpICYKKyAgICAgIHN0b3AgMQorCisgICAgISRvbXAgdGFyZ2V0IGVu dGVyIGRhdGEgbWFwIChhbGxvYzogcywgcyVtMikgZGV2aWNlIChkKQorICAgICAgISRvbXAg dGFyZ2V0IG1hcChmcm9tOiBwMSwgcDIpIG1hcChhbGxvYzogcywgcyVtMikgZGV2aWNlKGQp CisgICAgICBwMSA9IGNfbG9jIChzKTsKKyAgICAgIHAyID0gY19sb2MgKHMlbTIpOworICAg ICAgISRvbXAgZW5kIHRhcmdldAorCisgICAgICBpZiAoLm5vdC4gY19hc3NvY2lhdGVkIChv bXBfZ2V0X21hcHBlZF9wdHIgKGNfbG9jIChzKSwgZCksIHAxKSAmCisgICAgICAgICAgLm9y LiAubm90LiBjX2Fzc29jaWF0ZWQgKG9tcF9nZXRfbWFwcGVkX3B0ciAoY19sb2MgKHMlbTIp LCBkKSwgcDIpKSAmCisgICAgICAgIHN0b3AgMgorICAgICEkb21wIHRhcmdldCBleGl0IGRh dGEgbWFwIChkZWxldGU6IHMsIHMlbTIpIGRldmljZSAoZCkKKworICAgIGlmIChjX2Fzc29j aWF0ZWQgKG9tcF9nZXRfbWFwcGVkX3B0ciAoY19sb2MgKHMpLCBkKSkgJgorICAgICAgICAu b3IuIGNfYXNzb2NpYXRlZCAob21wX2dldF9tYXBwZWRfcHRyIChjX2xvYyAocyVtMiksIGQp KSkgJgorICAgICAgc3RvcCAzCisKKyAgZWxzZSAhIGQgPT0gaWQKKworICAgICEkb21wIHRh cmdldCBkYXRhIG1hcChhbGxvYzogcywgcyVtMikgZGV2aWNlKGQpCisgICAgICAhJG9tcCB0 YXJnZXQgbWFwKGZyb206IHAxLCBwMikgbWFwKGFsbG9jOiBzLCBzJW0yKSBkZXZpY2UoZCkK KyAgICAgIHAxID0gY19sb2MgKHMpOworICAgICAgcDIgPSBjX2xvYyAocyVtMik7CisgICAg ICAhJG9tcCBlbmQgdGFyZ2V0CisKKyAgICAgIGlmICgubm90LiBjX2Fzc29jaWF0ZWQgKG9t cF9nZXRfbWFwcGVkX3B0ciAoY19sb2MgKHMpLCBkKSwgY19sb2MgKHMpKSAmCisgICAgICAg IC5vci4gLm5vdC4gY19hc3NvY2lhdGVkIChvbXBfZ2V0X21hcHBlZF9wdHIgKGNfbG9jIChz JW0yKSwgZCksIGNfbG9jIChzJW0yKSkpICYKKyAgICAgICAgc3RvcCA0CisgICAgISRvbXAg ZW5kIHRhcmdldCBkYXRhCisKKyAgICBpZiAoLm5vdC4gY19hc3NvY2lhdGVkIChvbXBfZ2V0 X21hcHBlZF9wdHIgKGNfbG9jIChzKSwgZCksIGNfbG9jIChzKSkgJgorICAgICAgICAub3Iu IC5ub3QuIGNfYXNzb2NpYXRlZCAob21wX2dldF9tYXBwZWRfcHRyIChjX2xvYyAocyVtMiks IGQpLCBjX2xvYyAocyVtMikpKSAmCisgICAgICBzdG9wIDUKKworICAgICEkb21wIHRhcmdl dCBlbnRlciBkYXRhIG1hcCAoYWxsb2M6IHMsIHMlbTIpIGRldmljZSAoZCkKKyAgICAgICEk b21wIHRhcmdldCBtYXAoZnJvbTogcDEsIHAyKSBtYXAoYWxsb2M6IHMsIHMlbTIpIGRldmlj ZShkKQorICAgICAgcDEgPSBjX2xvYyAocyk7CisgICAgICBwMiA9IGNfbG9jIChzJW0yKTsK KyAgICAgICEkb21wIGVuZCB0YXJnZXQKKworICAgICAgaWYgKC5ub3QuIGNfYXNzb2NpYXRl ZCAob21wX2dldF9tYXBwZWRfcHRyIChjX2xvYyAocyksIGQpLCBjX2xvYyAocykpICYKKyAg ICAgICAgLm9yLiAubm90LiBjX2Fzc29jaWF0ZWQgKG9tcF9nZXRfbWFwcGVkX3B0ciAoY19s b2MgKHMlbTIpLCBkKSwgY19sb2MgKHMlbTIpKSkgJgorICAgICAgICBzdG9wIDYKKworICAg ICEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwIChkZWxldGU6IHMsIHMlbTIpIGRldmljZSAo ZCkKKworICAgIGlmICgubm90LiBjX2Fzc29jaWF0ZWQgKG9tcF9nZXRfbWFwcGVkX3B0ciAo Y19sb2MgKHMpLCBkKSwgY19sb2MgKHMpKSAmCisgICAgICAgIC5vci4gLm5vdC4gY19hc3Nv Y2lhdGVkIChvbXBfZ2V0X21hcHBlZF9wdHIgKGNfbG9jIChzJW0yKSwgZCksIGNfbG9jIChz JW0yKSkpICYKKyAgICAgIHN0b3AgNworICBlbmQgaWYKKworZW5kIHByb2dyYW0gbWFpbgo= --------------ZDct74aKRxcTZ7E8RYV0fOlf--