From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa2.mentor.iphmx.com (esa2.mentor.iphmx.com [68.232.141.98]) by sourceware.org (Postfix) with ESMTPS id 1C2373858C53; Wed, 20 Apr 2022 13:19:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 1C2373858C53 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,275,1643702400"; d="diff'?scan'208";a="74750423" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa2.mentor.iphmx.com with ESMTP; 20 Apr 2022 05:19:51 -0800 IronPort-SDR: A8YJz7fcb1aEzgllaSMajcF8HmqGIJ46sPJt1vDDgX1lNggMKY9/5AENsnmF2LbJ3irMtyKnD7 fJscaUmUH4RXV4jObkqX8NlV0QBgYnqzCCZZ98zCUZnZzym+8KiPxA4vdPVgp8fYzpdZumVrX+ vDWj0Nn0MOGTZA02L+sEyI36KIaE6Wjg9GXqZ7z1uj22913yGLTey9DoO1vfMD0kndKYP0cXKf lD+dFxvUobqPkNCWqBur1KdahJT7rlXLtq0NHqstqS1mL73meE9oZKWt6F+HB1Bx0DaRmujLww +9U= Content-Type: multipart/mixed; boundary="------------hO318tyA9Q4oSL69MtHnRObs" Message-ID: Date: Wed, 20 Apr 2022 15:19:38 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.8.1 Content-Language: en-US To: gcc-patches , fortran , Jakub Jelinek From: Tobias Burnus Subject: [Patch] OpenMP: Fix use_device_{addr,ptr} with in-data-sharing arg X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-14.mgc.mentorg.com (139.181.222.14) To svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) X-Spam-Status: No, score=-11.4 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: Wed, 20 Apr 2022 13:19:55 -0000 --------------hO318tyA9Q4oSL69MtHnRObs Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable For omp parallel shared(array_desc_var) the shared-variable is passed to the generated function as argument - and replaced by a DECL_VALUE_EXPR inside the parallel region. If inside the parallel region, a omp target data has_device_addr(array_descr_var) is used, the latter generates a omp_arr->array_descr_var =3D &array_descr_var.data; ... tmp_desc =3D array_descr_var tmp_desc.data =3D omp_o->array_descr_var that is: 'tmp_desc' gets assigned the original descriptor and only the data components is updated. However, if that's inside the parallel region, not 'array_descr_var' has to be used =E2=80=93 but the value expression ('omp_i->array_descr_var'= ). Fixed by searching the variable used in use_device_{addr,ptr} in the outer OpenMP context =E2=80=93 and then checking for a DECL_VALUE_EXPR. OK? 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 --------------hO318tyA9Q4oSL69MtHnRObs Content-Type: text/x-patch; charset="UTF-8"; name="fix-use_device_addr.diff" Content-Disposition: attachment; filename="fix-use_device_addr.diff" Content-Transfer-Encoding: base64 T3Blbk1QOiBGaXggdXNlX2RldmljZV97YWRkcixwdHJ9IHdpdGggaW4tZGF0YS1zaGFyaW5n IGFyZwoKRm9yIGFycmF5LWRlc2NyaXB0b3IgdmFycywgdGhlIGRlc2NyaXB0b3IgaXMgYXNz aWduZWQgdG8gYSB0ZW1wb3JhcnkuIEhvd2V2ZXIsCnRoaXMgZmFpbGVkIHdoZW4gdGhlIGNs YXVzZSdzIGFyZ3VtZW50IHdhcyBpbiB0dXJuIGluIGEgZGF0YS1zaGFyaW5nIGNsYXVzZQph cyB0aGUgb3V0ZXIgY29udGV4dCdzIFZBTFVFX0VYUFIgd2Fzbid0IHVzZWQuCgpnY2MvQ2hh bmdlTG9nOgoKCSogb21wLWxvdy5jYyAobG93ZXJfb21wX3RhcmdldCk6IEZpeCB1c2VfZGV2 aWNlX3thZGRyLHB0cn0gd2l0aCBsaXN0CglpdGVtIHRoYXQgaXMgaW4gYW4gb3V0ZXIgZGF0 YS1zaGFyaW5nIGNsYXVzZS4KCmxpYmdvbXAvQ2hhbmdlTG9nOgoKCSogdGVzdHN1aXRlL2xp YmdvbXAuZm9ydHJhbi91c2VfZGV2aWNlX2FkZHItNS5mOTA6IE5ldyB0ZXN0LgoKIGdjYy9v bXAtbG93LmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIyICsr LS0KIC4uLi9saWJnb21wLmZvcnRyYW4vdXNlX2RldmljZV9hZGRyLTUuZjkwICAgICAgICAg IHwgMTQzICsrKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxNTYgaW5z ZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9nY2Mvb21wLWxvdy5j YyBiL2djYy9vbXAtbG93LmNjCmluZGV4IGJmNTc3OWI2NTQzLi42ZTM4N2ZkOWE2MSAxMDA2 NDQKLS0tIGEvZ2NjL29tcC1sb3cuY2MKKysrIGIvZ2NjL29tcC1sb3cuY2MKQEAgLTEzNjU2 LDI2ICsxMzY1NiwzMCBAQCBsb3dlcl9vbXBfdGFyZ2V0IChnaW1wbGVfc3RtdF9pdGVyYXRv ciAqZ3NpX3AsIG9tcF9jb250ZXh0ICpjdHgpCiAJCW5ld192YXIgPSBsb29rdXBfZGVjbCAo dmFyLCBjdHgpOwogCQluZXdfdmFyID0gREVDTF9WQUxVRV9FWFBSIChuZXdfdmFyKTsKIAkJ dHJlZSB2ID0gbmV3X3ZhcjsKKwkJdHJlZSB2MiA9IHZhcjsKKwkJaWYgKE9NUF9DTEFVU0Vf Q09ERSAoYykgPT0gT01QX0NMQVVTRV9VU0VfREVWSUNFX1BUUgorCQkgICAgfHwgT01QX0NM QVVTRV9DT0RFIChjKSA9PSBPTVBfQ0xBVVNFX1VTRV9ERVZJQ0VfQUREUikKKwkJICB7CisJ CSAgICB2MiA9IG1heWJlX2xvb2t1cF9kZWNsX2luX291dGVyX2N0eCAodmFyLCBjdHgpOwor CQkgICAgaWYgKERFQ0xfSEFTX1ZBTFVFX0VYUFJfUCAodjIpKQorCQkgICAgICB2MiA9IERF Q0xfVkFMVUVfRVhQUiAodjIpOworCQkgIH0KIAogCQlpZiAoaXNfcmVmKQogCQkgIHsKLQkJ ICAgIHZhciA9IGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmICh2YXIpOwotCQkgICAgZ2ltcGxp ZnlfZXhwciAoJnZhciwgJmFzc2lnbl9ib2R5LCBOVUxMLCBpc19naW1wbGVfdmFsLAotCQkJ CSAgIGZiX3J2YWx1ZSk7Ci0JCSAgICB2ID0gY3JlYXRlX3RtcF92YXJfcmF3IChUUkVFX1RZ UEUgKHZhciksIGdldF9uYW1lICh2YXIpKTsKKwkJICAgIHYyID0gYnVpbGRfZm9sZF9pbmRp cmVjdF9yZWYgKHYyKTsKKwkJICAgIHYgPSBjcmVhdGVfdG1wX3Zhcl9yYXcgKFRSRUVfVFlQ RSAodjIpLCBnZXRfbmFtZSAodmFyKSk7CiAJCSAgICBnaW1wbGVfYWRkX3RtcF92YXIgKHYp OwogCQkgICAgVFJFRV9BRERSRVNTQUJMRSAodikgPSAxOwotCQkgICAgZ2ltcGxlX3NlcV9h ZGRfc3RtdCAoJmFzc2lnbl9ib2R5LAotCQkJCQkgZ2ltcGxlX2J1aWxkX2Fzc2lnbiAodiwg dmFyKSk7CisJCSAgICBnaW1wbGlmeV9hc3NpZ24gKHYsIHYyLCAmYXNzaWduX2JvZHkpOwog CQkgICAgdHJlZSByaHMgPSBidWlsZF9mb2xkX2FkZHJfZXhwciAodik7CiAJCSAgICBnaW1w bGVfc2VxX2FkZF9zdG10ICgmYXNzaWduX2JvZHksCiAJCQkJCSBnaW1wbGVfYnVpbGRfYXNz aWduIChuZXdfdmFyLCByaHMpKTsKIAkJICB9CiAJCWVsc2UKLQkJICBnaW1wbGVfc2VxX2Fk ZF9zdG10ICgmYXNzaWduX2JvZHksCi0JCQkJICAgICAgIGdpbXBsZV9idWlsZF9hc3NpZ24g KG5ld192YXIsIHZhcikpOworCQkgIGdpbXBsaWZ5X2Fzc2lnbiAobmV3X3ZhciwgdjIsICZh c3NpZ25fYm9keSk7CiAKLQkJdHJlZSB2MiA9IGxhbmdfaG9va3MuZGVjbHMub21wX2FycmF5 X2RhdGEgKHVuc2hhcmVfZXhwciAodiksIGZhbHNlKTsKKwkJdjIgPSBsYW5nX2hvb2tzLmRl Y2xzLm9tcF9hcnJheV9kYXRhICh1bnNoYXJlX2V4cHIgKHYpLCBmYWxzZSk7CiAJCWdjY19h c3NlcnQgKHYyKTsKIAkJZ2ltcGxpZnlfZXhwciAoJngsICZhc3NpZ25fYm9keSwgTlVMTCwg aXNfZ2ltcGxlX3ZhbCwgZmJfcnZhbHVlKTsKIAkJZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJmFz c2lnbl9ib2R5LApkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0 cmFuL3VzZV9kZXZpY2VfYWRkci01LmY5MCBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAu Zm9ydHJhbi91c2VfZGV2aWNlX2FkZHItNS5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjFkZWY3MGExYmMwCi0tLSAvZGV2L251bGwKKysrIGIvbGliZ29t cC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3VzZV9kZXZpY2VfYWRkci01LmY5MApAQCAt MCwwICsxLDE0MyBAQAorcHJvZ3JhbSBtYWluCisgIHVzZSBvbXBfbGliCisgIGltcGxpY2l0 IG5vbmUKKyAgaW50ZWdlciwgYWxsb2NhdGFibGUgOjogYWFhKDosOiw6KQorICBpbnRlZ2Vy IDo6IGkKKworICBhbGxvY2F0ZSAoYWFhKC00OjEwLC0zOjgsMikpCisgIGFhYSg6LDosOikg PSByZXNoYXBlIChbKGksIGkgPSAxLCBzaXplKGFhYSkpXSwgc2hhcGUoYWFhKSkKKworICBk byBpID0gMCwgb21wX2dldF9udW1fZGV2aWNlcygpCisgICAgISRvbXAgdGFyZ2V0IGRhdGEg bWFwKHRvOiBhYWEpCisgICAgICBjYWxsIHRlc3RfYWRkciAoYWFhLCBpKQorICAgICAgY2Fs bCB0ZXN0X3B0ciAoYWFhLCBpKQorICAgICEkb21wIGVuZCB0YXJnZXQgZGF0YQorICBlbmQg ZG8KKyAgZGVhbGxvY2F0ZSAoYWFhKQorCitjb250YWlucworCisgIHN1YnJvdXRpbmUgdGVz dF9hZGRyIChhYWFhLCBkZXYpCisgICAgdXNlIGlzb19jX2JpbmRpbmcKKyAgICBpbnRlZ2Vy LCB0YXJnZXQsIGFsbG9jYXRhYmxlIDo6IGFhYWEoOiw6LDopLCBiYmJiKDosOiw6KQorICAg IGludGVnZXIsIHZhbHVlIDo6IGRldgorICAgIGludGVnZXIgOjogaQorICAgIHR5cGUoY19w dHIpIDo6IHB0cgorICAgIGxvZ2ljYWwgOjogaXNfc2hhcmVkCisKKyAgICBpc19zaGFyZWQg PSAuZmFsc2UuCisgICAgISRvbXAgdGFyZ2V0IGRldmljZShkZXYpIG1hcCh0bzogaXNfc2hh cmVkKQorICAgICAgaXNfc2hhcmVkID0gLnRydWUuCisgICAgISRvbXAgZW5kIHRhcmdldAor CisgICAgYWxsb2NhdGUgKGJiYmIoLTQ6MTAsLTM6OCwyKSkKKyAgICBiYmJiKDosOiw6KSA9 IHJlc2hhcGUgKFsoLWksIGkgPSAxLCBzaXplKGJiYmIpKV0sIHNoYXBlKGJiYmIpKQorICAg ICEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0bzogYmJiYikgZGV2aWNlKGRldikKKyAg ICBpZiAoYW55IChsYm91bmQgKGFhYWEpIC89IFstNCwgLTMsIDFdKSkgZXJyb3Igc3RvcCAx CisgICAgaWYgKGFueSAoc2hhcGUgKGFhYWEpIC89IFsxNSwgMTIsIDJdKSkgZXJyb3Igc3Rv cCAyCisgICAgaWYgKGFueSAobGJvdW5kIChiYmJiKSAvPSBbLTQsIC0zLCAxXSkpIGVycm9y IHN0b3AgMworICAgIGlmIChhbnkgKHNoYXBlIChiYmJiKSAvPSBbMTUsIDEyLCAyXSkpIGVy cm9yIHN0b3AgNAorICAgIGlmIChhbnkgKGFhYWEgLz0gLWJiYmIpKSBlcnJvciBzdG9wIDUK KyAgICBpZiAoYW55IChhYWFhIC89IHJlc2hhcGUgKFsoaSwgaSA9IDEsIHNpemUoYWFhYSkp XSwgc2hhcGUoYWFhYSkpKSkgJgorICAgICAgZXJyb3Igc3RvcCA2CisKKyAgICAhJG9tcCBw YXJhbGxlbCBkbyBzaGFyZWQoYmJiYiwgYWFhYSkKKyAgICBkbyBpID0gMSwxCisgICAgICBp ZiAoYW55IChsYm91bmQgKGFhYWEpIC89IFstNCwgLTMsIDFdKSkgZXJyb3Igc3RvcCA1Cisg ICAgICBpZiAoYW55IChzaGFwZSAoYWFhYSkgLz0gWzE1LCAxMiwgMl0pKSBlcnJvciBzdG9w IDYKKyAgICAgIGlmIChhbnkgKGxib3VuZCAoYmJiYikgLz0gWy00LCAtMywgMV0pKSBlcnJv ciBzdG9wIDcKKyAgICAgIGlmIChhbnkgKHNoYXBlIChiYmJiKSAvPSBbMTUsIDEyLCAyXSkp IGVycm9yIHN0b3AgOAorICAgICAgaWYgKGFueSAoYWFhYSAvPSAtYmJiYikpIGVycm9yIHN0 b3AgNQorICAgICAgaWYgKGFueSAoYWFhYSAvPSByZXNoYXBlIChbKGksIGkgPSAxLCBzaXpl KGFhYWEpKV0sIHNoYXBlKGFhYWEpKSkpICYKKyAgICAgICAgZXJyb3Igc3RvcCA2CisgICAg ICBwdHIgPSBjX2xvYyAoYWFhYSkKKyAgICAgICEkb21wIHRhcmdldCBkYXRhIHVzZV9kZXZp Y2VfYWRkcihiYmJiLCBhYWFhKSBkZXZpY2UoZGV2KQorICAgICAgICBpZiAoYW55IChsYm91 bmQgKGFhYWEpIC89IFstNCwgLTMsIDFdKSkgZXJyb3Igc3RvcCA5CisgICAgICAgIGlmIChh bnkgKHNoYXBlIChhYWFhKSAvPSBbMTUsIDEyLCAyXSkpIGVycm9yIHN0b3AgMTAKKyAgICAg ICAgaWYgKGFueSAobGJvdW5kIChiYmJiKSAvPSBbLTQsIC0zLCAxXSkpIGVycm9yIHN0b3Ag MTEKKyAgICAgICAgaWYgKGFueSAoc2hhcGUgKGJiYmIpIC89IFsxNSwgMTIsIDJdKSkgZXJy b3Igc3RvcCAxMgorICAgICAgICBpZiAoaXNfc2hhcmVkKSB0aGVuCisgICAgICAgICAgaWYg KGFueSAoYWFhYSAvPSAtYmJiYikpIGVycm9yIHN0b3AgNQorICAgICAgICAgIGlmIChhbnkg KGFhYWEgLz0gcmVzaGFwZSAoWyhpLCBpID0gMSwgc2l6ZShhYWFhKSldLCBzaGFwZShhYWFh KSkpKSAmCisgICAgICAgICAgICBlcnJvciBzdG9wIDYKKyAgICAgICAgZW5kIGlmCisgICAg ICAgIGlmIChpc19zaGFyZWQgLm5lcXYuIGNfYXNzb2NpYXRlZCAocHRyLCBjX2xvYyAoYWFh YSkpKSBlcnJvciBzdG9wCisKKyAgICAgICAgISRvbXAgdGFyZ2V0IGhhc19kZXZpY2VfYWRk cihiYmJiLCBhYWFhKSBkZXZpY2UoZGV2KQorICAgICAgICAgICBpZiAoYW55IChsYm91bmQg KGFhYWEpIC89IFstNCwgLTMsIDFdKSkgZXJyb3Igc3RvcCA5CisgICAgICAgICAgIGlmIChh bnkgKHNoYXBlIChhYWFhKSAvPSBbMTUsIDEyLCAyXSkpIGVycm9yIHN0b3AgMTAKKyAgICAg ICAgICAgaWYgKGFueSAobGJvdW5kIChiYmJiKSAvPSBbLTQsIC0zLCAxXSkpIGVycm9yIHN0 b3AgMTEKKyAgICAgICAgICAgaWYgKGFueSAoc2hhcGUgKGJiYmIpIC89IFsxNSwgMTIsIDJd KSkgZXJyb3Igc3RvcCAxMgorICAgICAgICAgICBpZiAoYW55IChhYWFhIC89IC1iYmJiKSkg ZXJyb3Igc3RvcCA1CisgICAgICAgICAgIGlmIChhbnkgKGFhYWEgLz0gcmVzaGFwZSAoWyhp LCBpID0gMSwgc2l6ZShhYWFhKSldLCBzaGFwZShhYWFhKSkpKSAmCisgICAgICAgICAgICAg ZXJyb3Igc3RvcCA2CisgICAgICAgICEkb21wIGVuZCB0YXJnZXQKKyAgICAgICEkb21wIGVu ZCB0YXJnZXQgZGF0YQorICAgIGVuZCBkbworICAgICEkb21wIHRhcmdldCBleGl0IGRhdGEg bWFwKGRlbGV0ZTogYmJiYikgZGV2aWNlKGRldikKKyAgICBkZWFsbG9jYXRlIChiYmJiKQor ICBlbmQgc3Vicm91dGluZSB0ZXN0X2FkZHIKKworICBzdWJyb3V0aW5lIHRlc3RfcHRyIChh YWFhLCBkZXYpCisgICAgdXNlIGlzb19jX2JpbmRpbmcKKyAgICBpbnRlZ2VyLCB0YXJnZXQs IGFsbG9jYXRhYmxlIDo6IGFhYWEoOiw6LDopLCBiYmJiKDosOiw6KQorICAgIGludGVnZXIs IHZhbHVlIDo6IGRldgorICAgIGludGVnZXIgOjogaQorICAgIHR5cGUoY19wdHIpIDo6IHB0 cgorICAgIGxvZ2ljYWwgOjogaXNfc2hhcmVkCisKKyAgICBpc19zaGFyZWQgPSAuZmFsc2Uu CisgICAgISRvbXAgdGFyZ2V0IGRldmljZShkZXYpIG1hcCh0bzogaXNfc2hhcmVkKQorICAg ICAgaXNfc2hhcmVkID0gLnRydWUuCisgICAgISRvbXAgZW5kIHRhcmdldAorCisgICAgYWxs b2NhdGUgKGJiYmIoLTQ6MTAsLTM6OCwyKSkKKyAgICBiYmJiKDosOiw6KSA9IHJlc2hhcGUg KFsoLWksIGkgPSAxLCBzaXplKGJiYmIpKV0sIHNoYXBlKGJiYmIpKQorICAgICEkb21wIHRh cmdldCBlbnRlciBkYXRhIG1hcCh0bzogYmJiYikgZGV2aWNlKGRldikKKyAgICBpZiAoYW55 IChsYm91bmQgKGFhYWEpIC89IFstNCwgLTMsIDFdKSkgZXJyb3Igc3RvcCAxCisgICAgaWYg KGFueSAoc2hhcGUgKGFhYWEpIC89IFsxNSwgMTIsIDJdKSkgZXJyb3Igc3RvcCAyCisgICAg aWYgKGFueSAobGJvdW5kIChiYmJiKSAvPSBbLTQsIC0zLCAxXSkpIGVycm9yIHN0b3AgMwor ICAgIGlmIChhbnkgKHNoYXBlIChiYmJiKSAvPSBbMTUsIDEyLCAyXSkpIGVycm9yIHN0b3Ag NAorICAgIGlmIChhbnkgKGFhYWEgLz0gLWJiYmIpKSBlcnJvciBzdG9wIDUKKyAgICBpZiAo YW55IChhYWFhIC89IHJlc2hhcGUgKFsoaSwgaSA9IDEsIHNpemUoYWFhYSkpXSwgc2hhcGUo YWFhYSkpKSkgJgorICAgICAgZXJyb3Igc3RvcCA2CisKKyAgICAhJG9tcCBwYXJhbGxlbCBk byBzaGFyZWQoYmJiYiwgYWFhYSkKKyAgICBkbyBpID0gMSwxCisgICAgICBpZiAoYW55IChs Ym91bmQgKGFhYWEpIC89IFstNCwgLTMsIDFdKSkgZXJyb3Igc3RvcCA1CisgICAgICBpZiAo YW55IChzaGFwZSAoYWFhYSkgLz0gWzE1LCAxMiwgMl0pKSBlcnJvciBzdG9wIDYKKyAgICAg IGlmIChhbnkgKGxib3VuZCAoYmJiYikgLz0gWy00LCAtMywgMV0pKSBlcnJvciBzdG9wIDcK KyAgICAgIGlmIChhbnkgKHNoYXBlIChiYmJiKSAvPSBbMTUsIDEyLCAyXSkpIGVycm9yIHN0 b3AgOAorICAgICAgaWYgKGFueSAoYWFhYSAvPSAtYmJiYikpIGVycm9yIHN0b3AgNQorICAg ICAgaWYgKGFueSAoYWFhYSAvPSByZXNoYXBlIChbKGksIGkgPSAxLCBzaXplKGFhYWEpKV0s IHNoYXBlKGFhYWEpKSkpICYKKyAgICAgICAgZXJyb3Igc3RvcCA2CisgICAgICBwdHIgPSBj X2xvYyAoYWFhYSkKKyAgICAgICEkb21wIHRhcmdldCBkYXRhIHVzZV9kZXZpY2VfcHRyKGJi YmIsIGFhYWEpIGRldmljZShkZXYpCisgICAgICAgIGlmIChhbnkgKGxib3VuZCAoYWFhYSkg Lz0gWy00LCAtMywgMV0pKSBlcnJvciBzdG9wIDkKKyAgICAgICAgaWYgKGFueSAoc2hhcGUg KGFhYWEpIC89IFsxNSwgMTIsIDJdKSkgZXJyb3Igc3RvcCAxMAorICAgICAgICBpZiAoYW55 IChsYm91bmQgKGJiYmIpIC89IFstNCwgLTMsIDFdKSkgZXJyb3Igc3RvcCAxMQorICAgICAg ICBpZiAoYW55IChzaGFwZSAoYmJiYikgLz0gWzE1LCAxMiwgMl0pKSBlcnJvciBzdG9wIDEy CisgICAgICAgIGlmIChpc19zaGFyZWQpIHRoZW4KKyAgICAgICAgICBpZiAoYW55IChhYWFh IC89IC1iYmJiKSkgZXJyb3Igc3RvcCA1CisgICAgICAgICAgaWYgKGFueSAoYWFhYSAvPSBy ZXNoYXBlIChbKGksIGkgPSAxLCBzaXplKGFhYWEpKV0sIHNoYXBlKGFhYWEpKSkpICYKKyAg ICAgICAgICAgIGVycm9yIHN0b3AgNgorICAgICAgICBlbmQgaWYKKyAgICAgICAgaWYgKGlz X3NoYXJlZCAubmVxdi4gY19hc3NvY2lhdGVkIChwdHIsIGNfbG9jIChhYWFhKSkpIGVycm9y IHN0b3AKKworICAgICAgICAhIFVzZXMgaGFzX2RldmljZV9hZGRyIGR1ZSB0byBQUiBmb3J0 cmFuLzEwNTMxOAorICAgICAgICAhISRvbXAgdGFyZ2V0IGlzX2RldmljZV9wdHIoYmJiYiwg YWFhYSkgZGV2aWNlKGRldikKKyAgICAgICAgISRvbXAgdGFyZ2V0IGhhc19kZXZpY2VfYWRk cihiYmJiLCBhYWFhKSBkZXZpY2UoZGV2KQorICAgICAgICAgICBpZiAoYW55IChsYm91bmQg KGFhYWEpIC89IFstNCwgLTMsIDFdKSkgZXJyb3Igc3RvcCA5CisgICAgICAgICAgIGlmIChh bnkgKHNoYXBlIChhYWFhKSAvPSBbMTUsIDEyLCAyXSkpIGVycm9yIHN0b3AgMTAKKyAgICAg ICAgICAgaWYgKGFueSAobGJvdW5kIChiYmJiKSAvPSBbLTQsIC0zLCAxXSkpIGVycm9yIHN0 b3AgMTEKKyAgICAgICAgICAgaWYgKGFueSAoc2hhcGUgKGJiYmIpIC89IFsxNSwgMTIsIDJd KSkgZXJyb3Igc3RvcCAxMgorICAgICAgICAgICBpZiAoYW55IChhYWFhIC89IC1iYmJiKSkg ZXJyb3Igc3RvcCA1CisgICAgICAgICAgIGlmIChhbnkgKGFhYWEgLz0gcmVzaGFwZSAoWyhp LCBpID0gMSwgc2l6ZShhYWFhKSldLCBzaGFwZShhYWFhKSkpKSAmCisgICAgICAgICAgICAg ZXJyb3Igc3RvcCA2CisgICAgICAgICEkb21wIGVuZCB0YXJnZXQKKyAgICAgICEkb21wIGVu ZCB0YXJnZXQgZGF0YQorICAgIGVuZCBkbworICAgICEkb21wIHRhcmdldCBleGl0IGRhdGEg bWFwKGRlbGV0ZTogYmJiYikgZGV2aWNlKGRldikKKyAgICBkZWFsbG9jYXRlIChiYmJiKQor ICBlbmQgc3Vicm91dGluZSB0ZXN0X3B0cgorZW5kIHByb2dyYW0gbWFpbgo= --------------hO318tyA9Q4oSL69MtHnRObs--