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 3A1CF3858D35 for ; Fri, 16 Jun 2023 16:17:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 3A1CF3858D35 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="6.00,247,1681200000"; d="diff'?scan'208";a="8998340" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa3.mentor.iphmx.com with ESMTP; 16 Jun 2023 08:17:24 -0800 IronPort-SDR: znPjk3Fpw67TRhA8Aaf5wryW6uujZgwfac+Ah9jzOlE8HkxVbVcEPci656zvf+og1+PKkGF8l8 wvoMEa6eaGgKpxkGvC+zqKKLBFm/l4KhilpORW/leAYZ1IyOhGFKc1TNHP2pK1GdldKFsR0DcN JrbaUbXmq344qz0Hb9dTw+DjjqrEFTYal/7rAP6sYKnjINP0BwCDVZSdifDLhTnYWfW+4umPv8 kdhL3NL5e1C4hVa8lVxot241tdmv9KuMXklZq94zmkiLcRHpG0oawUc1RPgHA+WrJrtCqRk3yg cy8= Content-Type: multipart/mixed; boundary="------------tAjcDkFr4FFRhNkwAjeajAtW" Message-ID: Date: Fri, 16 Jun 2023 18:17:18 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Content-Language: en-US To: gcc-patches , Jakub Jelinek From: Tobias Burnus Subject: [patch] OpenMP (C/C++): Keep pointer value of unmapped ptr with default mapping [PR110270] X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-10.mgc.mentorg.com (139.181.222.10) To svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) X-Spam-Status: No, score=-11.3 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.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --------------tAjcDkFr4FFRhNkwAjeajAtW Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable This fixes an issue related to OpenMP C/C++'s default mapping of pointer va= riables. (That's 'defaultmap(default:pointer)' =E2=80=93 which is possibly surprisin= gly *not* the same as 'defaultmap(firstprivate:pointer)'). Namely, OpenMP supports the following: int *ptr =3D malloc(sizeof(int)*5); #pragma omp target enter data map(ptr[:5]) #pragma omp target p[2] =3D 5; which matches 'firstprivate(p)' + attaching the device address of 'p[:0]' (= a zero-sized array), the latter making it possible to use 'p' automatically without the need to = add any map clauses at least as long as *p has been mapped before. However, for int *ptr =3D omp_target_alloc (sizeof(int)*5, dev_num); #pragma omp target p[2] =3D 5; or for #pragma omp requires unified_shared_memory int pa =3D &A[0]; #pragma omp target pa[0] =3D 6; it failed before because neither 'ptr' nor 'pa' were mapped. Solution as a = user was either to add a (default)map clause (with map type than 'default'), a first= private or an is_device_ptr clause. The problem was that with default mapping, p and pa had the value NULL in t= he example above on the device. (As required by OpenMP 5.0/5.1). With the commit, they= retain the original value avoiding surprises for the code above. (See PR for the reference to the relevant sections of the OpenMP 5.{0,1,2} = specifications.) I would love if someone would give a review it; albeit the actual code cha= nge in libgomp/target.c is just a changing a single enum value. If there are no comments, I intent to push it next week ... Tobias ----------------- 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 --------------tAjcDkFr4FFRhNkwAjeajAtW Content-Type: text/x-patch; charset="UTF-8"; name="omp-ptr-priv.diff" Content-Disposition: attachment; filename="omp-ptr-priv.diff" Content-Transfer-Encoding: base64 T3Blbk1QIChDL0MrKyk6IEtlZXAgcG9pbnRlciB2YWx1ZSBvZiB1bm1hcHBlZCBwdHIgd2l0 aCBkZWZhdWx0IG1hcHBpbmcgW1BSMTEwMjcwXQoKRm9yIEMvQysrIHBvaW50ZXJzLCBkZWZh dWx0IGltcGxpY2l0IG1hcHBpbmcgZmlyc3Rwcml2YXRpemVzIHRoZSBwb2ludGVyCmJ1dCBp ZiB0aGUgbWVtb3J5IGl0IHBvaW50cyB0byBpcyBtYXBwZWQsIHRoZSBpdCBpcyB1cGRhdGVk IHRvIHBvaW50IHRvCnRoZSBkZXZpY2UgbWVtb3J5IChieSBhdHRhY2hpbmcgYSB6ZXJvIHNp emVkIGFycmF5IHNlY3Rpb24gb2YgdGhlIHBvaW50ZWQtdG8Kc3RvcmFnZSkuCgpIb3dldmVy LCBpZiB0aGUgcG9pbnRlZC10byBzdG9yYWdlIHdhc24ndCBtYXBwZWQsIHRoZSBwb2ludGVy IHdhcyBzZXQgdG8KTlVMTCBvbiB0aGUgZGV2aWNlIHNpZGUgKE9wZW5NUCA1LjAvNS4xIHNl bWFudGljKS4gV2l0aCB0aGlzIGNvbW1pdCwgdGhlCnBvaW50ZXIgcmV0YWlucyB0aGUgb24t aG9zdCBhZGRyZXNzIGluIHRoYXQgY2FzZSAoT3Blbk1QIDUuMiBzZW1hbnRpYykuCgpUaGUg bmV3IHNlbWFudGljIGF2b2lkcyBhbiBleHBsaWNpdCBtYXAvZmlyc3Rwcml2YXRlL2lzX2Rl dmljZV9wdHIgaW4gdGhlCmZvbGxvd2luZyBzZW5zaWJsZSBjYXNlczogU3BlY2lhbCB2YWx1 ZXMgKGUuZy4gcG9pbnRlciBvciAweDEsIDB4MiBldGMuKSwKZXhwbGljaXRseSBkZXZpY2Ug YWxsb2NhdGVkIG1lbW9yeSAoZS5nLiBvbXBfdGFyZ2V0X2FsbG9jKSwgYW5kIHdpdGgKKHVu aWZpZWQpIHNoYXJlZCBtZW1vcnkuCihOb3RlOiBXaXRoIChVKVNNLCBtYXBwaW5ncyBzdGls bCBtdXN0IGJlIHRyYWNrZWQsIGF0IGxlYXN0IHdoZW4Kb21wX3RhcmdldF9hc3NvY2lhdGVf cHRyIGRvZXMgbm90IGZhaWwgd2hlbiBwYXNzaW5nIGluIHR3byBkZXN0aW5jdCBwb2ludGVy cy4pCgpsaWJnb21wLwoKCVBSIG1pZGRsZS1lbmQvMTEwMjcwCgkqIHRhcmdldC5jIChnb21w X21hcF92YXJzX2ludGVybmFsKTogQ29weSBob3N0IHZhbHVlIGluc3RlYWQgb2YgTlVMTAoJ Zm9yICBHT01QX01BUF9aRVJPX0xFTl9BUlJBWV9TRUNUSU9OIGlmIG5vdCBtYXBwZWQuCgkq IGxpYmdvbXAudGV4aSAoT3Blbk1QIDUuMiBJbXBsLik6IE1hcmsgYXMgJ1knLgoJKiB0ZXN0 c3VpdGUvbGliZ29tcC5jL3RhcmdldC0xOS5jOiBVcGRhdGUgZXhwZWN0ZWQgdmFsdWUuCgkq IHRlc3RzdWl0ZS9saWJnb21wLmMrKy90YXJnZXQtMTguQzogTGlrZXdpc2UuCgkqIHRlc3Rz dWl0ZS9saWJnb21wLmMrKy90YXJnZXQtMTkuQzogTGlrZXdpc2UuCgkqIHRlc3RzdWl0ZS9s aWJnb21wLmMtYysrLWNvbW1vbi9yZXF1aXJlcy11bmlmaWVkLWFkZHItMi5jOiBOZXcgdGVz dC4KCSogdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3RhcmdldC1pbXBsaWNpdC1t YXAtMy5jOiBOZXcgdGVzdC4KCSogdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rh cmdldC1pbXBsaWNpdC1tYXAtNC5jOiBOZXcgdGVzdC4KCiBsaWJnb21wL2xpYmdvbXAudGV4 aSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogbGliZ29tcC90YXJn ZXQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIGxpYmdv bXAvdGVzdHN1aXRlL2xpYmdvbXAuYysrL3RhcmdldC0xOC5DICAgICAgICAgIHwgIDIxICsr LQogbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jKysvdGFyZ2V0LTE5LkMgICAgICAgICAg fCAgMTMgKy0KIC4uLi9saWJnb21wLmMtYysrLWNvbW1vbi9yZXF1aXJlcy11bmlmaWVkLWFk ZHItMi5jIHwgIDg1ICsrKysrKysrKysrCiAuLi4vbGliZ29tcC5jLWMrKy1jb21tb24vdGFy Z2V0LWltcGxpY2l0LW1hcC0zLmMgICB8IDEwNSArKysrKysrKysrKysrKwogLi4uL2xpYmdv bXAuYy1jKystY29tbW9uL3RhcmdldC1pbXBsaWNpdC1tYXAtNC5jICAgfCAxNTkgKysrKysr KysrKysrKysrKysrKysrCiBsaWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMvdGFyZ2V0LTE5 LmMgICAgICAgICAgICB8ICAyMSArKy0KIDggZmlsZXMgY2hhbmdlZCwgMzkyIGluc2VydGlv bnMoKyksIDE2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYmdvbXAvbGliZ29tcC50 ZXhpIGIvbGliZ29tcC9saWJnb21wLnRleGkKaW5kZXggMWM1N2Y1YWEyNjEuLmRiOGIxZjE0 MjdlIDEwMDY0NAotLS0gYS9saWJnb21wL2xpYmdvbXAudGV4aQorKysgYi9saWJnb21wL2xp YmdvbXAudGV4aQpAQCAtMzg0LDcgKzM4NCw3IEBAIHRvIGFkZHJlc3Mgb2YgbWF0Y2hpbmcg bWFwcGVkIGxpc3QgaXRlbSBwZXIgNS4xLCBTZWN0LiAyLjIxLjcuMiBAdGFiIE4gQHRhYgog QGl0ZW0gQGNvZGV7ZGVjbGFyZSBtYXBwZXJ9IHdpdGggaXRlcmF0b3IgYW5kIEBjb2Rle3By ZXNlbnR9IG1vZGlmaWVycwogICAgICAgQHRhYiBOIEB0YWIKIEBpdGVtIElmIGEgbWF0Y2hp bmcgbWFwcGVkIGxpc3QgaXRlbSBpcyBub3QgZm91bmQgaW4gdGhlIGRhdGEgZW52aXJvbm1l bnQsIHRoZQotICAgICAgcG9pbnRlciByZXRhaW5zIGl0cyBvcmlnaW5hbCB2YWx1ZSBAdGFi IE4gQHRhYgorICAgICAgcG9pbnRlciByZXRhaW5zIGl0cyBvcmlnaW5hbCB2YWx1ZSBAdGFi IFkgQHRhYgogQGl0ZW0gTmV3IEBjb2Rle2VudGVyfSBjbGF1c2UgYXMgYWxpYXMgZm9yIEBj b2Rle3RvfSBvbiBkZWNsYXJlIHRhcmdldCBkaXJlY3RpdmUKICAgICAgIEB0YWIgWSBAdGFi CiBAaXRlbSBEZXByZWNhdGlvbiBvZiBAY29kZXt0b30gY2xhdXNlIG9uIGRlY2xhcmUgdGFy Z2V0IGRpcmVjdGl2ZSBAdGFiIE4gQHRhYgpkaWZmIC0tZ2l0IGEvbGliZ29tcC90YXJnZXQu YyBiL2xpYmdvbXAvdGFyZ2V0LmMKaW5kZXggZTM5ZWY4ZjZlODIuLmFhMjQxMGMwZjE2IDEw MDY0NAotLS0gYS9saWJnb21wL3RhcmdldC5jCisrKyBiL2xpYmdvbXAvdGFyZ2V0LmMKQEAg LTExNDksNyArMTE0OSw3IEBAIGdvbXBfbWFwX3ZhcnNfaW50ZXJuYWwgKHN0cnVjdCBnb21w X2RldmljZV9kZXNjciAqZGV2aWNlcCwKIAkgIGlmICghbikKIAkgICAgewogCSAgICAgIHRn dC0+bGlzdFtpXS5rZXkgPSBOVUxMOwotCSAgICAgIHRndC0+bGlzdFtpXS5vZmZzZXQgPSBP RkZTRVRfUE9JTlRFUjsKKwkgICAgICB0Z3QtPmxpc3RbaV0ub2Zmc2V0ID0gT0ZGU0VUX0lO TElORUQ7CiAJICAgICAgY29udGludWU7CiAJICAgIH0KIAl9CmRpZmYgLS1naXQgYS9saWJn b21wL3Rlc3RzdWl0ZS9saWJnb21wLmMrKy90YXJnZXQtMTguQyBiL2xpYmdvbXAvdGVzdHN1 aXRlL2xpYmdvbXAuYysrL3RhcmdldC0xOC5DCmluZGV4IGYxMDg1YjE0MDIyLi5hMjFlZDRl ODFmOSAxMDA2NDQKLS0tIGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jKysvdGFyZ2V0 LTE4LkMKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jKysvdGFyZ2V0LTE4LkMK QEAgLTIwLDcgKzIwLDkgQEAgZm9vIChpbnQgKiZwLCBpbnQgKiZxLCBpbnQgKiZyLCBpbnQg biwgaW50IG0pCiAJICBlcnIgPSAxOwogICAgICAgaWYgKHNlcCkKIAl7Ci0JICBpZiAocSAh PSAoaW50ICopIDAgfHwgciAhPSAoaW50ICopIDApCisJICAvKiBTaW5jZSBPcGVuTVAgNS4y LCAncScvJ3InIGFyZSBubyBsb25nZXIgc2V0IHRvIE5VTEwgaWYgcG9pbnRpbmcgdG8KKwkg ICAgIHVubWFwcGVkIHN0b3JhZ2UuICAqLworCSAgaWYgKHEgPT0gKGludCAqKSAwIHx8IHIg PT0gKGludCAqKSAwKQogCSAgICBlcnIgPSAxOwogCX0KICAgICAgIGVsc2UgaWYgKHAgKyA4 ICE9IHEgfHwgciAhPSBzKQpAQCAtMzcsNyArMzksOSBAQCBmb28gKGludCAqJnAsIGludCAq JnEsIGludCAqJnIsIGludCBuLCBpbnQgbSkKIAkgIGVyciA9IDE7CiAgICAgICBpZiAoc2Vw KQogCXsKLQkgIGlmIChxICE9IChpbnQgKikgMCB8fCByICE9IChpbnQgKikgMCkKKwkgIC8q IFNpbmNlIE9wZW5NUCA1LjIsICdxJy8ncicgYXJlIG5vIGxvbmdlciBzZXQgdG8gTlVMTCBp ZiBwb2ludGluZyB0bworCSAgICAgdW5tYXBwZWQgc3RvcmFnZS4gICovCisJICBpZiAocSA9 PSAoaW50ICopIDAgfHwgciA9PSAoaW50ICopIDApCiAJICAgIGVyciA9IDE7CiAJfQogICAg ICAgZWxzZSBpZiAocCArIDggIT0gcSB8fCByICE9IHMpCkBAIC01NSw3ICs1OSw5IEBAIGZv byAoaW50IComcCwgaW50IComcSwgaW50IComciwgaW50IG4sIGludCBtKQogCSAgZXJyID0g MTsKICAgICAgIGlmIChzZXApCiAJewotCSAgaWYgKHEgIT0gKGludCAqKSAwIHx8IHIgIT0g KGludCAqKSAwKQorCSAgLyogU2luY2UgT3Blbk1QIDUuMiwgJ3EnLydyJyBhcmUgbm8gbG9u Z2VyIHNldCB0byBOVUxMIGlmIHBvaW50aW5nIHRvCisJICAgICB1bm1hcHBlZCBzdG9yYWdl LiAgKi8KKwkgIGlmIChxID09IChpbnQgKikgMCB8fCByID09IChpbnQgKikgMCkKIAkgICAg ZXJyID0gMTsKIAl9CiAgICAgICBlbHNlIGlmIChwICsgOCAhPSBxIHx8IHIgIT0gcykKQEAg LTkxLDcgKzk3LDggQEAgZm9vIChpbnQgKiZwLCBpbnQgKiZxLCBpbnQgKiZyLCBpbnQgbiwg aW50IG0pCiAJICBlcnIgPSAxOwogCWVsc2UgaWYgKHNlcCkKIAkgIHsKLQkgICAgaWYgKHIg IT0gKGludCAqKSAwKQorCSAgICAvKiBTaW5jZSBPcGVuTVAgNS4yLCAncicgaXMgbm8gbG9u Z2VyIHNldCB0byBOVUxMIGlmICpyIGlzIHVubWFwcGVkLiovCisJICAgIGlmIChyID09IChp bnQgKikgMCkKIAkgICAgICBlcnIgPSAxOwogCSAgfQogCWVsc2UgaWYgKHIgIT0gcSArIDEp CkBAIC0xMTAsNyArMTE3LDggQEAgZm9vIChpbnQgKiZwLCBpbnQgKiZxLCBpbnQgKiZyLCBp bnQgbiwgaW50IG0pCiAJICBlcnIgPSAxOwogCWVsc2UgaWYgKHNlcCkKIAkgIHsKLQkgICAg aWYgKHIgIT0gKGludCAqKSAwKQorCSAgICAvKiBTaW5jZSBPcGVuTVAgNS4yLCAncicgaXMg bm8gbG9uZ2VyIHNldCB0byBOVUxMIGlmICpyIGlzIHVubWFwcGVkLiovCisJICAgIGlmIChy ID09IChpbnQgKikgMCkKIAkgICAgICBlcnIgPSAxOwogCSAgfQogCWVsc2UgaWYgKHIgIT0g cSArIDEpCkBAIC0xMzAsNyArMTM4LDggQEAgZm9vIChpbnQgKiZwLCBpbnQgKiZxLCBpbnQg KiZyLCBpbnQgbiwgaW50IG0pCiAJICBlcnIgPSAxOwogCWVsc2UgaWYgKHNlcCkKIAkgIHsK LQkgICAgaWYgKHIgIT0gKGludCAqKSAwKQorCSAgICAvKiBTaW5jZSBPcGVuTVAgNS4yLCAn cicgaXMgbm8gbG9uZ2VyIHNldCB0byBOVUxMIGlmICpyIGlzIHVubWFwcGVkLiovCisJICAg IGlmIChyID09IChpbnQgKikgMCkKIAkgICAgICBlcnIgPSAxOwogCSAgfQogCWVsc2UgaWYg KHIgIT0gcSArIDEpCmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMr Ky90YXJnZXQtMTkuQyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYysrL3RhcmdldC0x OS5DCmluZGV4IGFmYTZlNjhkNWNjLi43YmFlMzFkMjczNCAxMDA2NDQKLS0tIGEvbGliZ29t cC90ZXN0c3VpdGUvbGliZ29tcC5jKysvdGFyZ2V0LTE5LkMKKysrIGIvbGliZ29tcC90ZXN0 c3VpdGUvbGliZ29tcC5jKysvdGFyZ2V0LTE5LkMKQEAgLTEsMyArMSw4IEBACisvKiB7IGRn LWFkZGl0aW9uYWwtb3B0aW9ucyAiLU8wIiB9ICovCisvKiBEaXNhYmxlIG9wdGltaXphdGlv biB0byBlbnN1cmUgdGhhdCB0aGUgY29tcGlsZXIgZG9lcyBub3QgZXhwbG9pdCB0aGF0Cisg ICBTOjpyICsgdCB3aWxsIG5ldmVyIGJlIE5VTEwgZHVlIHRvIGludCAoJnIpIGFuZCAoJnQp LiAgKi8KKworCiBleHRlcm4gIkMiIHZvaWQgYWJvcnQgKCk7CiBzdHJ1Y3QgUyB7IGNoYXIg YVs2NF07IGludCAoJnIpWzJdOyBjaGFyIGJbNjRdOyB9OwogCkBAIC0xOSw3ICsyNCw5IEBA IGZvbyAoUyBzLCBpbnQgKCZ0KVszXSwgaW50IHopCiAgICNwcmFnbWEgb21wIHRhcmdldCBt YXAoZnJvbTogZXJyKSBtYXAodG9mcm9tOiBzLnJbOjBdLCB0WzowXSkKICAgewogICAgIGlm IChzZXApCi0gICAgICBlcnIgPSBzLnIgIT0gKGludCAqKSAwIHx8IHQgIT0gKGludCAqKSAw OworICAgICAgLyogU2luY2UgT3Blbk1QIDUuMiwgaWYgbm8gbWF0Y2hpbmcgbWFwcGVkIGxp c3QgaXQgaGFzIGJlZW4gZm91bmQsCisJIHBvaW50ZXJzIHJldGFpbiB0aGVpciBvcmlnaW5h bCB2YWx1ZS4gICovCisgICAgICBlcnIgPSBzLnIgPT0gKGludCAqKSAwIHx8IHQgPT0gKGlu dCAqKSAwOwogICAgIGVsc2UKICAgICAgIGVyciA9IHRbMF0gIT0gMSB8fCB0WzFdICE9IDIg fHwgdFsyXSAhPSAzIHx8IHMuclswXSAhPSA2IHx8IHMuclsxXSAhPSA3OwogICB9CkBAIC0y OCw3ICszNSw5IEBAIGZvbyAoUyBzLCBpbnQgKCZ0KVszXSwgaW50IHopCiAgICNwcmFnbWEg b21wIHRhcmdldCBtYXAoZnJvbTogZXJyKSBtYXAodG9mcm9tOiBzLnJbOnpdLCB0Wzp6XSkK ICAgewogICAgIGlmIChzZXApCi0gICAgICBlcnIgPSBzLnIgIT0gKGludCAqKSAwIHx8IHQg IT0gKGludCAqKSAwOworICAgICAgLyogU2luY2UgT3Blbk1QIDUuMiwgaWYgbm8gbWF0Y2hp bmcgbWFwcGVkIGxpc3QgaXQgaGFzIGJlZW4gZm91bmQsCisJIHBvaW50ZXJzIHJldGFpbiB0 aGVpciBvcmlnaW5hbCB2YWx1ZS4gICovCisgICAgICBlcnIgPSBzLnIgPT0gKGludCAqKSAw IHx8IHQgPT0gKGludCAqKSAwOwogICAgIGVsc2UKICAgICAgIGVyciA9IHRbMF0gIT0gMSB8 fCB0WzFdICE9IDIgfHwgdFsyXSAhPSAzIHx8IHMuclswXSAhPSA2IHx8IHMuclsxXSAhPSA3 OwogICB9CmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNv bW1vbi9yZXF1aXJlcy11bmlmaWVkLWFkZHItMi5jIGIvbGliZ29tcC90ZXN0c3VpdGUvbGli Z29tcC5jLWMrKy1jb21tb24vcmVxdWlyZXMtdW5pZmllZC1hZGRyLTIuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2I1ZGNkMzhjMWEKLS0tIC9kZXYvbnVs bAorKysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi9yZXF1aXJl cy11bmlmaWVkLWFkZHItMi5jCkBAIC0wLDAgKzEsODUgQEAKKy8qIFBSIG1pZGRsZS1lbmQv MTEwMjcwICovCisKKy8qIE9wZW5NUCA1LjIncyAnZGVmYXVsdG1hcChkZWZhdWx0IDogcG9p bnRlcikgZm9yIEMvQysrIHBvaW50ZXJzIHJldGFpbnMgdGhlCisgICBwb2ludGVyIHZhbHVl IGluc3RlYWQgb2Ygc2V0dGluZyBpdCB0byBOVUxMIGlmIHRoZSBwb2ludGVyIGNhbm5vdCBi ZSBmb3VuZC4KKyAgIENvbnRyYXJ5IHRvIHJlcXVpcmVzLXVuaWZpZWQtYWRkci0xLmMgd2hp Y2ggaXMgdmFsaWQgT3Blbk1QIDUuMC81LjEvNS4yLAorICAgdGhpcyB0ZXN0Y2FzZSBpcyBv bmx5IHZhbGlkIHNpbmNlIE9wZW5NUCA1LjIuICAqLworCisvKiBUaGlzIGlzIGtpbmQgb2Yg YSBmb2xsb3ctdXAgdG8gdGhlIHJlcXVpcmVzLXVuaWZpZWQtYWRkci0xLmMgdGVzdGNhc2UK KyAgIGFuZCAgUFIgbGliZ29tcC8xMDk4MzcgKi8KKworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+ CisjaW5jbHVkZSA8b21wLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRs aWIuaD4KKworI3ByYWdtYSBvbXAgcmVxdWlyZXMgdW5pZmllZF9hZGRyZXNzCisKKyNkZWZp bmUgTiAxNQorCit2b2lkCit0ZXN0X2RldmljZSAoaW50IGRldikKK3sKKyAgc3RydWN0IHN0 IHsKKyAgICBpbnQgKnB0cjsKKyAgICBpbnQgbjsKKyAgfTsKKyAgc3RydWN0IHN0IHM7CisK KyAgcy5uID0gMTA7CisgIHMucHRyID0gKGludCAqKSBvbXBfdGFyZ2V0X2FsbG9jIChzaXpl b2YgKGludCkqcy5uLCBkZXYpOworICBpbnQgKnB0cjEgPSAoaW50ICopIG9tcF90YXJnZXRf YWxsb2MgKHNpemVvZiAoaW50KSpOLCBkZXYpOworICBhc3NlcnQgKHMucHRyICE9IE5VTEwp OworICBhc3NlcnQgKHB0cjEgIT0gTlVMTCk7CisKKyAgaW50IHFbNF0gPSB7MSwyLDMsNH07 CisgIGludCAqcXB0cjsKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHEp IGRldmljZShkZXZpY2VfbnVtOiBkZXYpCisgICNwcmFnbWEgb21wIHRhcmdldCBkYXRhIHVz ZV9kZXZpY2VfYWRkcihxKSBkZXZpY2UoZGV2aWNlX251bTogZGV2KQorICAgIHFwdHIgPSBx OworCisgICNwcmFnbWEgb21wIHRhcmdldCBtYXAodG86cykgZGV2aWNlKGRldmljZV9udW06 IGRldikKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLm47IGkrKykKKyAgICBzLnB0cltpXSA9 IDIzKmk7CisKKyAgaW50ICpwdHIyID0gJnMucHRyWzNdOworCisgIC8qIHMucHRyIGlzIG5v dCBtYXBwZWQgKGJ1dCBvbXBfdGFyZ2V0X2FsbG9jJ2VkKSB0aHVzIHB0cjIgc2hhbGwgcmV0 YWluIGl0cyB2YWx1ZS4gICovCisgICNwcmFnbWEgb21wIHRhcmdldCBkZXZpY2UoZGV2aWNl X251bTogZGV2KSAgLyogaW1wbGllZDogZGVmYXVsdG1hcChkZWZhdWx0IDogcG9pbnRlcikg Ki8KKyAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspCisgICAgKihxcHRyKyspID0gcHRy MltpXTsKKworICAjcHJhZ21hIG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChxKSBkZXZpY2Uo ZGV2aWNlX251bTogZGV2KQorICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKKyAgICBx W2ldID0gMjMgKiAoaSszKTsKKworICAvKiBwdHIxIHJldGFpbnMgdGhlIHZhbHVlIGFzIGl0 IGlzIG5vdCBtYXBwZWQgKGJ1dCBpdCBpcyBvbXBfdGFyZ2V0X2FsbG9jJ2VkKS4gKi8KKyAg I3ByYWdtYSBvbXAgdGFyZ2V0IGRlZmF1bHRtYXAoZGVmYXVsdCA6IHBvaW50ZXIpIGRldmlj ZShkZXZpY2VfbnVtOiBkZXYpCisgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQorICAg IHB0cjFbaV0gPSAxMSppOworCisgIGludCAqcHRyMyA9IChpbnQgKikgbWFsbG9jIChzaXpl b2YgKGludCkqTik7CisgIGFzc2VydCAoMCA9PSBvbXBfdGFyZ2V0X21lbWNweShwdHIzLCBw dHIxLCBOICogc2l6ZW9mKGludCksIDAsIDAsCisJCQkJIG9tcF9nZXRfaW5pdGlhbF9kZXZp Y2UoKSwgZGV2KSk7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIGFzc2Vy dCAocHRyM1tpXSA9PSAxMSppKTsKKworICBmcmVlIChwdHIzKTsKKyAgb21wX3RhcmdldF9m cmVlIChwdHIxLCBkZXYpOworICBvbXBfdGFyZ2V0X2ZyZWUgKHMucHRyLCBkZXYpOworfQor CitpbnQKK21haW4oKQoreworICBpbnQgbnRndHMgPSBvbXBfZ2V0X251bV9kZXZpY2VzKCk7 CisgIGlmIChudGd0cykKKyAgICBmcHJpbnRmIChzdGRlcnIsICJPZmZsb2FkaW5nIGRldmlj ZXMgZXhpc3RcbiIpOyAgLyogeyBkZy1vdXRwdXQgIk9mZmxvYWRpbmcgZGV2aWNlcyBleGlz dChcbnxcclxufFxyKSIgeyB0YXJnZXQgb2ZmbG9hZF9kZXZpY2UgfSB9ICovCisgIGVsc2UK KyAgICBmcHJpbnRmIChzdGRlcnIsICJPbmx5IGhvc3QgZmFsbGJhY2tcbiIpOyAgICAgICAg LyogeyBkZy1vdXRwdXQgIk9ubHkgaG9zdCBmYWxsYmFjayhcbnxcclxufFxyKSIgeyB0YXJn ZXQgeyAhIG9mZmxvYWRfZGV2aWNlIH0gfSB9ICovCisKKyAgZm9yIChpbnQgaSA9IDA7IGkg PD0gbnRndHM7IGkrKykKKyAgICB0ZXN0X2RldmljZSAoaSk7CisgIHJldHVybiAwOworfQpk aWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vdGFy Z2V0LWltcGxpY2l0LW1hcC0zLmMgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysr LWNvbW1vbi90YXJnZXQtaW1wbGljaXQtbWFwLTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uZTY5ZjZkMGRiMmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJn b21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi90YXJnZXQtaW1wbGljaXQtbWFw LTMuYwpAQCAtMCwwICsxLDEwNSBAQAorLyogUFIgbWlkZGxlLWVuZC8xMTAyNzAgKi8KKwor LyogRW5zdXJlIHRoYXQgZGVmYXVsdG1hcChkZWZhdWx0IDogcG9pbnRlcikgdXNlcyBjb3Jy ZWN0IE9wZW5NUCA1LjIKKyAgIHNlbWFudGljLCBpLmUuIGtlZXBpbmcgdGhlIHBvaW50ZXIg dmFsdWUgZXZlbiBpZiBub3QgbWFwcGVkOworICAgYmVmb3JlIE9wZW5NUCA1LjAvNS4xIHJl cXVpcmVkIHRoYXQgaXQgaXMgTlVMTCwgY2F1c2luZyBpc3N1ZXMKKyAgIGVzcGVjaWFsbHkg d2l0aCB1bmlmaWVkLXNoYXJlZCBtZW1vcnkgYnV0IGFsc28gdGhlIGNvZGUgYmVsb3cKKyAg IHNob3dzIHdoeSB0aGF0J3Mgbm90IGEgZ29vZCBpZGVhLiAgKi8KKworI2luY2x1ZGUgPHN0 ZGlvLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8b21wLmg+CisKKy8qICd1 bmlmaWVkX2FkZHJlc3MnIGlzIHJlcXVpcmVkIGJ5IHRoZSBPcGVuTVAgc3BlYyBhcyBvbmx5 IHRoZW4KKyAgICdpc19kZXZpY2VfcHRyJyBjYW4gYmUgbGVmdCBvdXQuICBBbGwgb3VyIGRl dmljZXMgc3VwcG9ydCB0aGlzCisgICB3aGlsZSByZW1vdGUgb2ZmbG9hZGluZyB3b3VsZCBu b3QuICBIb3dldmVyLCBpbiBwcmFjdGljZSBpdCBpcworICAgc3VmZmljaWVudCB0aGF0IHRo ZSBob3N0IGFuZCBkZXZpY2UgcG9pbnRlciBzaXplIGlzIHRoZSBzYW1lCisgICAob3IgdGhl IGRldmljZSBwb2ludGVyIGlzIHNtYWxsZXIpIC0gYW5kIHRoZW4gYSBkZXZpY2UgcG9pbnRl ciBpcworICAgcmVwcmVzZW50YWJsZSBhbmQgb21wX3RhcmdldF9hbGxvYyBjYW4gcmV0dXJu IGEgYmFyZSBkZXZpY2UgcG9pbnRlci4KKworICAgV2UgaGVyZSBhc3N1bWUgdGhhdCB0aGlz IHdlYWtlciBjb25kaXRpb24gaG9sZHMgYW5kIGRvIG5vdAorICAgcmVxdWlyZTogICAjcHJh Z21hIG9tcCByZXF1aXJlcyB1bmlmaWVkX2FkZHJlc3MgICovCisKK3ZvaWQKK3Rlc3RfZGV2 aWNlIChpbnQgZGV2KQoreworICBpbnQgKnAxID0gKGludCopIDB4MTIzNDU7CisgIGludCAq cDFhID0gKGludCopIDB4Njc4OTA7CisgIGludCAqcDIgPSAoaW50Kikgb21wX3RhcmdldF9h bGxvYyAoc2l6ZW9mIChpbnQpICogNSwgZGV2KTsKKyAgaW50ICpwMmEgPSAoaW50Kikgb21w X3RhcmdldF9hbGxvYyAoc2l6ZW9mIChpbnQpICogMTAsIGRldik7CisgIGludHB0cl90IGlw ID0gKGludHB0cl90KSBwMjsKKyAgaW50cHRyX3QgaXBhID0gKGludHB0cl90KSBwMmE7CisK KyAgaW50IEFbM10gPSB7MSwyLDN9OworICBpbnQgQls1XSA9IHs0LDUsNiw3LDh9OworICBp bnQgKnAzID0gJkFbMF07CisgIGludCAqcDNhID0gJkJbMF07CisKKyAgI3ByYWdtYSBvbXAg dGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvOkEpIGRldmljZShkZXYpCisKKyAgI3ByYWdtYSBv bXAgdGFyZ2V0IGRldmljZShkZXYpIC8qIGRlZmF1bHRtYXAoZGVmYXVsdDpwb2ludGVyKSAq LworICB7CisgICAgLyogVGhlIHBvaW50ZWVzIGFyZW4ndCBtYXBwZWQuICovCisgICAgLyog T3Blbk1QIDUuMiAtPiBzYW1lIHZhbHVlIGFzIGJlZm9yZSB0aGUgdGFyZ2V0IHJlZ2lvbi4g Ki8KKyAgICBpZiAoKGludHB0cl90KSBwMSAhPSAweDEyMzQ1KSBfX2J1aWx0aW5fYWJvcnQg KCk7CisgICAgaWYgKChpbnRwdHJfdCkgcDIgIT0gaXApIF9fYnVpbHRpbl9hYm9ydCAoKTsg IAorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKQorICAgICAgcDJbaV0gPSAxMypp OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKQorICAgICAgKChpbnQgKilp cGEpW2ldID0gNyppOworCisgICAgLyogT3Blbk1QOiBNYXBwZWQgPT4gbXVzdCBwb2ludCB0 byB0aGUgY29ycmVzcG9uZGluZyBkZXZpY2Ugc3RvcmFnZSBvZiAnQScgKi8KKyAgICBpZiAo cDNbMF0gIT0gMSB8fCBwM1sxXSAhPSAyIHx8IHAzWzJdICE9IDMpCisgICAgICBfX2J1aWx0 aW5fYWJvcnQgKCk7CisgICAgcDNbMF0gPSAtMTE7IHAzWzFdID0gLTIyOyBwM1syXSA9IC0z MzsKKyAgfQorICAjcHJhZ21hIG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOkEpIGRl dmljZShkZXYpCisKKyAgaWYgKHAzWzBdICE9IC0xMSB8fCBwM1sxXSAhPSAtMjIgfHwgcDNb Ml0gIT0gLTMzKQorICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsKKworICAvLyBXaXRoIGRlZmF1 bHRtYXA6CisKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvOkIpIGRl dmljZShkZXYpCisKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGRldmljZShkZXYpIGRlZmF1bHRt YXAoZGVmYXVsdDpwb2ludGVyKQorICB7CisgICAgLyogVGhlIHBvaW50ZWVzIGFyZW4ndCBt YXBwZWQuICovCisgICAgLyogT3Blbk1QIDUuMiAtPiBzYW1lIHZhbHVlIGFzIGJlZm9yZSB0 aGUgdGFyZ2V0IHJlZ2lvbi4gKi8KKyAgICBpZiAoKGludHB0cl90KSBwMWEgIT0gMHg2Nzg5 MCkgX19idWlsdGluX2Fib3J0ICgpOworICAgIGlmICgoaW50cHRyX3QpIHAyYSAhPSBpcGEp IF9fYnVpbHRpbl9hYm9ydCAoKTsgIAorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBp KyspCisgICAgICAoKGludCAqKWlwKVtpXSA9IDEzKmk7CisKKyAgICBmb3IgKGludCBpID0g MDsgaSA8IDEwOyBpKyspCisgICAgICBwMmFbaV0gPSA3Kmk7CisKKyAgICAvKiBPcGVuTVA6 IE1hcHBlZCA9PiBtdXN0IHBvaW50IHRvIHRoZSBjb3JyZXNwb25kaW5nIGRldmljZSBzdG9y YWdlIG9mICdCJyAqLworICAgIGlmIChwM2FbMF0gIT0gNCB8fCBwM2FbMV0gIT0gNSB8fCBw M2FbMl0gIT0gNiB8fCBwM2FbM10gIT0gNyB8fCBwM2FbNF0gIT0gOCkKKyAgICAgIF9fYnVp bHRpbl9hYm9ydCAoKTsKKyAgICBwM2FbMF0gPSAtNDQ7IHAzYVsxXSA9IC01NTsgcDNhWzJd ID0gLTY2OyBwM2FbM10gPSAtNzc7IHAzYVs0XSA9IC04ODsKKyAgfQorICAjcHJhZ21hIG9t cCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOkIpIGRldmljZShkZXYpCisKKyAgaWYgKHAz YVswXSAhPSAtNDQgfHwgcDNhWzFdICE9IC01NSB8fCBwM2FbMl0gIT0gLTY2IHx8IHAzYVsz XSAhPSAtNzcgfHwgcDNhWzRdICE9IC04OCkKKyAgICBfX2J1aWx0aW5fYWJvcnQgKCk7CisK KyAgb21wX3RhcmdldF9mcmVlIChwMiwgZGV2KTsKKyAgb21wX3RhcmdldF9mcmVlIChwMmEs IGRldik7Cit9CisKK2ludAorbWFpbigpCit7CisgIGludCBudGd0cyA9IG9tcF9nZXRfbnVt X2RldmljZXMoKTsKKyAgaWYgKG50Z3RzKQorICAgIGZwcmludGYgKHN0ZGVyciwgIk9mZmxv YWRpbmcgZGV2aWNlcyBleGlzdFxuIik7ICAvKiB7IGRnLW91dHB1dCAiT2ZmbG9hZGluZyBk ZXZpY2VzIGV4aXN0KFxufFxyXG58XHIpIiB7IHRhcmdldCBvZmZsb2FkX2RldmljZSB9IH0g Ki8KKyAgZWxzZQorICAgIGZwcmludGYgKHN0ZGVyciwgIk9ubHkgaG9zdCBmYWxsYmFja1xu Iik7ICAgICAgICAvKiB7IGRnLW91dHB1dCAiT25seSBob3N0IGZhbGxiYWNrKFxufFxyXG58 XHIpIiB7IHRhcmdldCB7ICEgb2ZmbG9hZF9kZXZpY2UgfSB9IH0gKi8KKworICBmb3IgKGlu dCBpID0gMDsgaSA8PSBudGd0czsgaSsrKQorICAgIHRlc3RfZGV2aWNlIChpKTsKKyAgcmV0 dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysr LWNvbW1vbi90YXJnZXQtaW1wbGljaXQtbWFwLTQuYyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xp YmdvbXAuYy1jKystY29tbW9uL3RhcmdldC1pbXBsaWNpdC1tYXAtNC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mOTJhYmZkYjMwZAotLS0gL2Rldi9udWxs CisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3RhcmdldC1p bXBsaWNpdC1tYXAtNC5jCkBAIC0wLDAgKzEsMTU5IEBACisvKiBQUiBtaWRkbGUtZW5kLzEx MDI3MCAqLworCisvKiBTYW1lIGFzIHRhcmdldC1pbXBsaWNpdC1tYXAtMy5jIGJ1dCB1c2Vz IHRoZSBmb2xsb3dpbmcgcmVxdWllbWVudAorICAgYW5kIGZvciBub3QgbWFwcGluZyB0aGUg c3RhY2sgdmFyaWFibGVzICdBJyBhbmQgJ0InIChub3QgbWFwcGVkCisgICBidXQgYWNjZXNz aWJsZSAtPiBVU00gbWFrZXMgdGhpcyB0ZXN0ZWQgZmVhdHVyZSBldmVuIG1vcmUgaW1wb3J0 YW50LikgICovCisKKyNwcmFnbWEgb21wIHJlcXVpcmVzIHVuaWZpZWRfc2hhcmVkX21lbW9y eQorCisvKiBFbnN1cmUgdGhhdCBkZWZhdWx0bWFwKGRlZmF1bHQgOiBwb2ludGVyKSB1c2Vz IGNvcnJlY3QgT3Blbk1QIDUuMgorICAgc2VtYW50aWMsIGkuZS4ga2VlcGluZyB0aGUgcG9p bnRlciB2YWx1ZSBldmVuIGlmIG5vdCBtYXBwZWQ7CisgICBiZWZvcmUgT3Blbk1QIDUuMC81 LjEgcmVxdWlyZWQgdGhhdCBpdCBpcyBOVUxMLiAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4K KyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxv bXAuaD4KKwordm9pZAordGVzdF9kZXZpY2UgKGludCBkZXYpCit7CisgIGludCAqcDEgPSAo aW50KikgMHgxMjM0NTsKKyAgaW50ICpwMWEgPSAoaW50KikgMHg2Nzg5MDsKKyAgaW50ICpw MiA9IChpbnQqKSBvbXBfdGFyZ2V0X2FsbG9jIChzaXplb2YgKGludCkgKiA1LCBkZXYpOwor ICBpbnQgKnAyYSA9IChpbnQqKSBvbXBfdGFyZ2V0X2FsbG9jIChzaXplb2YgKGludCkgKiAx MCwgZGV2KTsKKyAgaW50cHRyX3QgaXAgPSAoaW50cHRyX3QpIHAyOworICBpbnRwdHJfdCBp cGEgPSAoaW50cHRyX3QpIHAyYTsKKworICBpbnQgQVszXSA9IHsxLDIsM307CisgIGludCBC WzVdID0gezQsNSw2LDcsOH07CisgIGludCAqcDMgPSAmQVswXTsKKyAgaW50ICpwM2EgPSAm QlswXTsKKworICBjb25zdCBvbXBfYWxsb2N0cmFpdF90IHRyYWl0c1tdCisgICAgPSB7IHsg b21wX2F0a19hbGlnbm1lbnQsIDEyOCB9LAorICAgICAgICB7IG9tcF9hdGtfcG9vbF9zaXpl LCAxMDI0IH19OworICBvbXBfYWxsb2NhdG9yX2hhbmRsZV90IGEgPSBvbXBfaW5pdF9hbGxv Y2F0b3IgKG9tcF9kZWZhdWx0X21lbV9zcGFjZSwgMiwgdHJhaXRzKTsKKworICBpbnQgKnA0 ID0gKGludCopIG1hbGxvYyAoc2l6ZW9mIChpbnQpICogNSk7CisgIGludCAqcDRhID0gKGlu dCopIG9tcF9hbGxvYyAoc2l6ZW9mIChpbnQpICogMTAsIGEpOworICBpbnRwdHJfdCBpcDQg PSAoaW50cHRyX3QpIHA0OworICBpbnRwdHJfdCBpcDRhID0gKGludHB0cl90KSBwNGE7CisK KyAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspCisgICAgcDRbaV0gPSAtMzEqaTsKKwor ICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspCisgICAgcDRhW2ldID0gLTQzKmk7CisK KyAgLyogTm90ZTogJ0EnIGlzIG5vdCBtYXBwZWQgYnV0IFVTTSBhY2Nlc3NpYmxlLiAgKi8K KyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGRldmljZShkZXYpIC8qIGRlZmF1bHRtYXAoZGVmYXVs dDpwb2ludGVyKSAqLworICB7CisgICAgLyogVGhlIHBvaW50ZWVzIGFyZW4ndCBtYXBwZWQu ICovCisgICAgLyogT3Blbk1QIDUuMiAtPiBzYW1lIHZhbHVlIGFzIGJlZm9yZSB0aGUgdGFy Z2V0IHJlZ2lvbi4gKi8KKyAgICBpZiAoKGludHB0cl90KSBwMSAhPSAweDEyMzQ1KSBhYm9y dCAoKTsKKyAgICBpZiAoKGludHB0cl90KSBwMiAhPSBpcCkgYWJvcnQgKCk7ICAKKyAgICBm b3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykKKyAgICAgIHAyW2ldID0gMTMqaTsKKworICAg IGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykKKyAgICAgICgoaW50ICopaXBhKVtpXSA9 IDcqaTsKKworICAgIC8qIE9wZW5NUDogUG9pbnRzIHRvICdBJy4gKi8KKyAgICBpZiAocDNb MF0gIT0gMSB8fCBwM1sxXSAhPSAyIHx8IHAzWzJdICE9IDMpCisgICAgICBhYm9ydCAoKTsK KyAgICBwM1swXSA9IC0xMTsgcDNbMV0gPSAtMjI7IHAzWzJdID0gLTMzOworCisgICAgLyog VVNNIGFjY2VzaWJsZSBhbGxvY2F0ZWQgaG9zdCBtZW1vcnkuICovCisgICAgaWYgKChpbnRw dHJfdCkgcDQgIT0gaXA0KQorICAgICAgYWJvcnQgKCk7ICAKKyAgICBmb3IgKGludCBpID0g MDsgaSA8IDU7IGkrKykKKyAgICAgIGlmIChwNFtpXSAhPSAtMzEqaSkKKwlhYm9ydCAoKTsK KyAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspCisgICAgICBpZiAoKChpbnQgKilp cDRhKVtpXSAhPSAtNDMqaSkKKwlhYm9ydCAoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8 IDU7IGkrKykKKyAgICAgIHA0W2ldID0gOSppOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg MTA7IGkrKykKKyAgICAgICgoaW50ICopaXA0YSlbaV0gPSAxOCppOworICB9CisKKyAgaWYg KHAzWzBdICE9IC0xMSB8fCBwM1sxXSAhPSAtMjIgfHwgcDNbMl0gIT0gLTMzKQorICAgIGFi b3J0ICgpOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKQorICAgIGlmIChwNFtp XSAhPSA5KmkpCisgICAgICBhYm9ydCAoKTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsg aSsrKQorICAgIGlmIChwNGFbaV0gIT0gMTgqaSkKKyAgICAgIGFib3J0ICgpOworICBmb3Ig KGludCBpID0gMDsgaSA8IDU7IGkrKykKKyAgICBwNFtpXSA9IC03NyppOworICBmb3IgKGlu dCBpID0gMDsgaSA8IDEwOyBpKyspCisgICAgcDRhW2ldID0gLTY1Kmk7CisKKyAgLy8gV2l0 aCBkZWZhdWx0bWFwOgorCisgIC8qIE5vdGU6ICdCJyBpcyBub3QgbWFwcGVkIGJ1dCBVU00g YWNjZXNzaWJsZS4gICovCisgICNwcmFnbWEgb21wIHRhcmdldCBkZXZpY2UoZGV2KSBkZWZh dWx0bWFwKGRlZmF1bHQ6cG9pbnRlcikKKyAgeworICAgIC8qIFRoZSBwb2ludGVlcyBhcmVu J3QgbWFwcGVkLiAqLworICAgIC8qIE9wZW5NUCA1LjIgLT4gc2FtZSB2YWx1ZSBhcyBiZWZv cmUgdGhlIHRhcmdldCByZWdpb24uICovCisgICAgaWYgKChpbnRwdHJfdCkgcDFhICE9IDB4 Njc4OTApIGFib3J0ICgpOworICAgIGlmICgoaW50cHRyX3QpIHAyYSAhPSBpcGEpIGFib3J0 ICgpOyAgCisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykKKyAgICAgICgoaW50 ICopaXApW2ldID0gMTMqaTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykK KyAgICAgIHAyYVtpXSA9IDcqaTsKKworICAgIC8qIFVTTSBhY2Nlc2libGUgYWxsb2NhdGVk IGhvc3QgbWVtb3J5LiAqLworICAgIGlmICgoaW50cHRyX3QpIHA0YSAhPSBpcDRhKSBhYm9y dCAoKTsgIAorCisgICAgLyogT3Blbk1QOiBQb2ludHMgdG8gJ0InLiAqLworICAgIGlmIChw M2FbMF0gIT0gNCB8fCBwM2FbMV0gIT0gNSB8fCBwM2FbMl0gIT0gNiB8fCBwM2FbM10gIT0g NyB8fCBwM2FbNF0gIT0gOCkKKyAgICAgIGFib3J0ICgpOworICAgIHAzYVswXSA9IC00NDsg cDNhWzFdID0gLTU1OyBwM2FbMl0gPSAtNjY7IHAzYVszXSA9IC03NzsgcDNhWzRdID0gLTg4 OworCisgICAgLyogVVNNIGFjY2VzaWJsZSBhbGxvY2F0ZWQgaG9zdCBtZW1vcnkuICovCisg ICAgaWYgKChpbnRwdHJfdCkgcDRhICE9IGlwNGEpCisgICAgICBhYm9ydCAoKTsgIAorICAg IGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKQorICAgICAgaWYgKCgoaW50ICopaXA0KVtp XSAhPSAtNzcqaSkKKwlhYm9ydCAoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBp KyspCisgICAgICBpZiAocDRhW2ldICE9IC02NSppKQorCWFib3J0ICgpOworICAgIGZvciAo aW50IGkgPSAwOyBpIDwgNTsgaSsrKQorICAgICAgcDRbaV0gPSAzNippOworICAgIGZvciAo aW50IGkgPSAwOyBpIDwgMTA7IGkrKykKKyAgICAgICgoaW50ICopaXA0YSlbaV0gPSA0Kmk7 CisgIH0KKworICBpZiAocDNhWzBdICE9IC00NCB8fCBwM2FbMV0gIT0gLTU1IHx8IHAzYVsy XSAhPSAtNjYgfHwgcDNhWzNdICE9IC03NyB8fCBwM2FbNF0gIT0gLTg4KQorICAgIGFib3J0 ICgpOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKQorICAgIGlmIChwNFtpXSAh PSAzNippKQorICAgICAgYWJvcnQgKCk7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkr KykKKyAgICBpZiAocDRhW2ldICE9IDQqaSkKKyAgICAgIGFib3J0ICgpOworCisgIG9tcF90 YXJnZXRfZnJlZSAocDIsIGRldik7CisgIG9tcF90YXJnZXRfZnJlZSAocDJhLCBkZXYpOwor ICBmcmVlIChwNCk7CisgIG9tcF9mcmVlIChwNGEsIGEpOworICBvbXBfZGVzdHJveV9hbGxv Y2F0b3IgKGEpOworfQorCitpbnQKK21haW4oKQoreworICBpbnQgbnRndHMgPSBvbXBfZ2V0 X251bV9kZXZpY2VzKCk7CisgIGZvciAoaW50IGkgPSAwOyBpIDw9IG50Z3RzOyBpKyspCisg ICAgdGVzdF9kZXZpY2UgKGkpOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmdv bXAvdGVzdHN1aXRlL2xpYmdvbXAuYy90YXJnZXQtMTkuYyBiL2xpYmdvbXAvdGVzdHN1aXRl L2xpYmdvbXAuYy90YXJnZXQtMTkuYwppbmRleCAyNTA1Y2FmY2E5Zi4uZGFjN2M1NmNiZGUg MTAwNjQ0Ci0tLSBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy90YXJnZXQtMTkuYwor KysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMvdGFyZ2V0LTE5LmMKQEAgLTIwLDcg KzIwLDkgQEAgZm9vIChpbnQgKnAsIGludCAqcSwgaW50ICpyLCBpbnQgbiwgaW50IG0pCiAJ ICBlcnIgPSAxOwogICAgICAgaWYgKHNlcCkKIAl7Ci0JICBpZiAocSAhPSAoaW50ICopIDAg fHwgciAhPSAoaW50ICopIDApCisJICAvKiBTaW5jZSBPcGVuTVAgNS4yLCAncScvJ3InIGFy ZSBubyBsb25nZXIgc2V0IHRvIE5VTEwgaWYgcG9pbnRpbmcgdG8KKwkgICAgIHVubWFwcGVk IHN0b3JhZ2UuICAqLworCSAgaWYgKHEgPT0gKGludCAqKSAwIHx8IHIgPT0gKGludCAqKSAw KQogCSAgICBlcnIgPSAxOwogCX0KICAgICAgIGVsc2UgaWYgKHAgKyA4ICE9IHEgfHwgciAh PSBzKQpAQCAtMzcsNyArMzksOSBAQCBmb28gKGludCAqcCwgaW50ICpxLCBpbnQgKnIsIGlu dCBuLCBpbnQgbSkKIAkgIGVyciA9IDE7CiAgICAgICBpZiAoc2VwKQogCXsKLQkgIGlmIChx ICE9IChpbnQgKikgMCB8fCByICE9IChpbnQgKikgMCkKKwkgIC8qIFNpbmNlIE9wZW5NUCA1 LjIsICdxJy8ncicgYXJlIG5vIGxvbmdlciBzZXQgdG8gTlVMTCBpZiBwb2ludGluZyB0bwor CSAgICAgdW5tYXBwZWQgc3RvcmFnZS4gICovCisJICBpZiAocSA9PSAoaW50ICopIDAgfHwg ciA9PSAoaW50ICopIDApCiAJICAgIGVyciA9IDE7CiAJfQogICAgICAgZWxzZSBpZiAocCAr IDggIT0gcSB8fCByICE9IHMpCkBAIC01NSw3ICs1OSw5IEBAIGZvbyAoaW50ICpwLCBpbnQg KnEsIGludCAqciwgaW50IG4sIGludCBtKQogCSAgZXJyID0gMTsKICAgICAgIGlmIChzZXAp CiAJewotCSAgaWYgKHEgIT0gKGludCAqKSAwIHx8IHIgIT0gKGludCAqKSAwKQorCSAgLyog U2luY2UgT3Blbk1QIDUuMiwgJ3EnLydyJyBhcmUgbm8gbG9uZ2VyIHNldCB0byBOVUxMIGlm IHBvaW50aW5nIHRvCisJICAgICB1bm1hcHBlZCBzdG9yYWdlLiAgKi8KKwkgIGlmIChxID09 IChpbnQgKikgMCB8fCByID09IChpbnQgKikgMCkKIAkgICAgZXJyID0gMTsKIAl9CiAgICAg ICBlbHNlIGlmIChwICsgOCAhPSBxIHx8IHIgIT0gcykKQEAgLTkxLDcgKzk3LDggQEAgZm9v IChpbnQgKnAsIGludCAqcSwgaW50ICpyLCBpbnQgbiwgaW50IG0pCiAJICBlcnIgPSAxOwog CWVsc2UgaWYgKHNlcCkKIAkgIHsKLQkgICAgaWYgKHIgIT0gKGludCAqKSAwKQorCSAgICAv KiBTaW5jZSBPcGVuTVAgNS4yLCAncicgaXMgbm8gbG9uZ2VyIHNldCB0byBOVUxMIGlmICpy IGlzIHVubWFwcGVkLiovCisJICAgIGlmIChyID09IChpbnQgKikgMCkKIAkgICAgICBlcnIg PSAxOwogCSAgfQogCWVsc2UgaWYgKHIgIT0gcSArIDEpCkBAIC0xMTAsNyArMTE3LDggQEAg Zm9vIChpbnQgKnAsIGludCAqcSwgaW50ICpyLCBpbnQgbiwgaW50IG0pCiAJICBlcnIgPSAx OwogCWVsc2UgaWYgKHNlcCkKIAkgIHsKLQkgICAgaWYgKHIgIT0gKGludCAqKSAwKQorCSAg ICAvKiBTaW5jZSBPcGVuTVAgNS4yLCAncicgaXMgbm8gbG9uZ2VyIHNldCB0byBOVUxMIGlm ICpyIGlzIHVubWFwcGVkLiovCisJICAgIGlmIChyID09IChpbnQgKikgMCkKIAkgICAgICBl cnIgPSAxOwogCSAgfQogCWVsc2UgaWYgKHIgIT0gcSArIDEpCkBAIC0xMzAsNyArMTM4LDgg QEAgZm9vIChpbnQgKnAsIGludCAqcSwgaW50ICpyLCBpbnQgbiwgaW50IG0pCiAJICBlcnIg PSAxOwogCWVsc2UgaWYgKHNlcCkKIAkgIHsKLQkgICAgaWYgKHIgIT0gKGludCAqKSAwKQor CSAgICAvKiBTaW5jZSBPcGVuTVAgNS4yLCAncicgaXMgbm8gbG9uZ2VyIHNldCB0byBOVUxM IGlmICpyIGlzIHVubWFwcGVkLiovCisJICAgIGlmIChyID09IChpbnQgKikgMCkKIAkgICAg ICBlcnIgPSAxOwogCSAgfQogCWVsc2UgaWYgKHIgIT0gcSArIDEpCg== --------------tAjcDkFr4FFRhNkwAjeajAtW--