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 32DCA3858C52 for ; Tue, 10 Jan 2023 11:36:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 32DCA3858C52 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.96,315,1665475200"; d="diff'?scan'208";a="92743357" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa3.mentor.iphmx.com with ESMTP; 10 Jan 2023 03:36:05 -0800 IronPort-SDR: PKRn4uw97K7WGHyYYWDbTCvsOwTqiGz9XTA0TIWLe4wl17/nBKkyxgFNfpynL88zJkld8SDzMu XZrTDzbST93P53Dux+n+mEpK7A5+pC0YLbzdAdMIOWJljspqOiqj5WTimWNrp15p8S48vktQsO +wJ1ZKlwdAXrRcyTl8bi7C1qEqFnPCTN+B1K6nUd+bGp79ZG3apyJIutLZXZYmBR7Z9HKWHA68 S9QXApV9+AQSYHlKDTuiFCcNqefLRm7Bu+GwuqlljAmltMu4uXsRvmyX3Ik9oAAplrRr+0JDRt fYs= Content-Type: multipart/mixed; boundary="------------UOuxnCterHztpXZCQPAaUAIQ" Message-ID: Date: Tue, 10 Jan 2023 12:35:38 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Content-Language: en-US From: Tobias Burnus Subject: [Patch][1/2] OpenMP: Add lang hooks + run-time filled map arrays for Fortran deep mapping of DT To: gcc-patches , Jakub Jelinek X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-11.mgc.mentorg.com (139.181.222.11) 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,KAM_SHORT,SPF_HELO_PASS,SPF_PASS,TXREP 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: --------------UOuxnCterHztpXZCQPAaUAIQ Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable This patches is the ME part to support OpenMP 5.0's deep-mapping feature, i.e. mapping allocatable components of Fortran's derived types automatically. [Not the lang hooks but allocatate-array part will probably also be useful when later adding 'iterator'-modifier support to the 'map'/'to'/'from' clauses.] This is a belated real submission of the patch sent in March 2022, https://gcc.gnu.org/pipermail/gcc-patches/2022-March/591144.html (with FE fixes at https://gcc.gnu.org/pipermail/gcc-patches/2022-April/5935= 62.html (note to self: Bernhard did sent some comment fixes off list) + https://gcc.gnu.org/pipermail/gcc-patches/2022-April/593704.html ) + ME fix for OpenACC at https://gcc.gnu.org/pipermail/gcc-patches/2022-Octo= ber/603906.html [which is in the attach patch] As written, attached is the ME part. Below is a description how it is supposed to get used; the patch links above show how it looks in the real-code FE. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D BACKGROUND =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D Fortran permits type t integer, allocatable :: x, y(:) end type t type t2 type(t2), allocatable :: previous_stack ! Not valid in OMP 5.0 integer, allocatable :: a type(t) :: b, c(:) end type t2 type(t2) :: var1, var2(:) !$omp target enter data(var1, var2) Where all allocatable components need to be mapped alongside. The number of mappings is only known at runtime, e.g. for 'var2' - the array size is only known at runtime and then each allocatable component of each element of 'var2' needs to be mapped - both those can contain allocatable components a= s well, which have to be mapped - but of course only if the parent component is actually allocated. * * * The current code puts 'kinds' with const values into an array, 'sizes' in a fixed-size stack array (either with const or dynamic values) and 'addrs' is a struct. To support deep mapping, those all have to be dynamic; hence, the arrays 'sizes' and 'kinds' are turned into pointers - and the 'struct' gets a tailing variable-size array, which is then filled with the dynamic content. For this purpose, three lang hooks are added - all are called rather late, i.e. during omp-low.cc, such that all previous operations (implicit mapping= , explicit mapping, OpenMP mapper) are already done. * First one to check whether there is any allocatable component for a map-c= lause element (explicitly or implicitly added). If not, the current code is us= ed. Otherwise, it uses dynamically allocated arrays (Side note: As the size is now only known at runtime, TREE_VEC has now anot= her element - the array size - hence the change to expand_omp_target, before = it was known statically from the type.) * Second hook to actually count how many allocations are done, required for the allocation. * Third hook to actually fill the arrays. Comments? Remarks? Tobias PS: There are two things to watch out in the future: - 'mapper': I think it should work when the mapper is present as it comes r= ather late in the flow, but I have not checked with Julian's patches (pending = review). - Order: the dynamic items are added last to 'addrs' to permit keeping the = 'struct' type. I think that's fine for allocatable components as they are added r= ather late and accessing them via 'is_device_ptr' is not possible. But there might be some issues with 'interator' in future; something to = watch out. If so, we may need to partially or fully give up on putting all others m= appings stillinto the struct. ----------------- 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 --------------UOuxnCterHztpXZCQPAaUAIQ Content-Type: text/x-patch; charset="UTF-8"; name="omp-ME-prep-deep-mapping.diff" Content-Disposition: attachment; filename="omp-ME-prep-deep-mapping.diff" Content-Transfer-Encoding: base64 T3Blbk1QOiBBZGQgbGFuZyBob29rcyArIHJ1bi10aW1lIGZpbGxlZCBtYXAgYXJyYXlzIGZv ciBGb3J0cmFuIGRlZXAgbWFwcGluZyBvZiBEVAoKVGhpcyBwYXRjaCBhZGRzIG1pZGRsZSBl bmQgc3VwcG9ydCBmb3IgbWFwcGluZyBGb3J0cmFuIGRlcml2ZWQtdHlwZXMgd2l0aAphbGxv Y2F0YWJsZSBjb21wb25lbnRzLiBJZiB0aG9zZSBhcmUgcHJlc2VudCwgdGhlIGtpbmRzL3Np emVzIGFycmF5cyB3aWxsIGJlCmFsbG9jYXRlZCBhdCBydW4gdGltZSBhbmQgdGhlIGFkZHJz IHN0cnVjdCBnZXRzIGFuIHZhcmlhYmxlLXNpemVkIGFycmF5IGF0CnRoZSBlbmQuIFRoZSBu ZXdseSBhZGRlZCBob29rcyBhcmU6CiAgKiBsaGRfb21wX2RlZXBfbWFwcGluZ19wOiBJZiB0 cnVlLCB1c2UgdGhlIG5ldyBjb2RlLgogICogbGhkX29tcF9kZWVwX21hcHBpbmdfY250OiBD b3VudCB0aGUgZWxlbWVudHMsIG5lZWRlZCBmb3IgYWxsb2NhdGlvbi4KICAqIGxoZF9vbXBf ZGVlcF9tYXBwaW5nOiBGaWxsIHRoZSBhbGxvY2F0ZWQgYXJyYXlzLgoKZ2NjL0NoYW5nZUxv ZzoKCgkqIGxhbmdob29rcy1kZWYuaCAobGhkX29tcF9kZWVwX21hcHBpbmdfcCwKCWxoZF9v bXBfZGVlcF9tYXBwaW5nX2NudCwgbGhkX29tcF9kZWVwX21hcHBpbmcpOiBOZXcuCgkoTEFO R19IT09LU19PTVBfREVFUF9NQVBQSU5HX1AsIExBTkdfSE9PS1NfT01QX0RFRVBfTUFQUElO R19DTlQsCglMQU5HX0hPT0tTX09NUF9ERUVQX01BUFBJTkcpOiBEZWZpbmUuCgkoTEFOR19I T09LU19ERUNMUyk6IFVzZSBpdC4KCSogbGFuZ2hvb2tzLmNjIChsaGRfb21wX2RlZXBfbWFw cGluZ19wLCBsaGRfb21wX2RlZXBfbWFwcGluZ19jbnQsCglsaGRfb21wX2RlZXBfbWFwcGlu Zyk6IE5ldyBzdHVicy4KCSogbGFuZ2hvb2tzLmggKHN0cnVjdCBsYW5nX2hvb2tzX2Zvcl9k ZWNscyk6IEFkZCBuZXcgaG9va3MKCSogb21wLWV4cGFuZC5jYyAoZXhwYW5kX29tcF90YXJn ZXQpOiBIYW5kbGUgZHluYW1pYy1zaXplCglhZGRyL3NpemVzL2tpbmRzIGFycmF5cy4KCSog b21wLWxvdy5jYyAoYnVpbGRfc2VuZGVyX3JlZiwgZml4dXBfY2hpbGRfcmVjb3JkX3R5cGUs CglzY2FuX3NoYXJpbmdfY2xhdXNlcywgbG93ZXJfb21wX3RhcmdldCk6IFVwZGF0ZSB0byBo YW5kbGUKCW5ldyBob29rcyBhbmQgZHluYW1pYy1zaXplIGFkZHIvc2l6ZXMva2luZHMgYXJy YXlzLgoKIGdjYy9sYW5naG9va3MtZGVmLmggfCAgMTAgKysrCiBnY2MvbGFuZ2hvb2tzLmNj ICAgIHwgIDI0ICsrKysrKwogZ2NjL2xhbmdob29rcy5oICAgICB8ICAxNSArKysrCiBnY2Mv b21wLWV4cGFuZC5jYyAgIHwgIDE4ICsrKystCiBnY2Mvb21wLWxvdy5jYyAgICAgIHwgMjI0 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0K IDUgZmlsZXMgY2hhbmdlZCwgMjY1IGluc2VydGlvbnMoKyksIDI2IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL2djYy9sYW5naG9va3MtZGVmLmggYi9nY2MvbGFuZ2hvb2tzLWRlZi5o CmluZGV4IGM2ZDE4NTI2MzYwLi43NWJhMDM3Zjc3NiAxMDA2NDQKLS0tIGEvZ2NjL2xhbmdo b29rcy1kZWYuaAorKysgYi9nY2MvbGFuZ2hvb2tzLWRlZi5oCkBAIC04NSw2ICs4NSwxMCBA QCBleHRlcm4gZW51bSBvbXBfY2xhdXNlX2RlZmF1bHRtYXBfa2luZCBsaGRfb21wX3ByZWRl dGVybWluZWRfbWFwcGluZyAodHJlZSk7CiBleHRlcm4gdHJlZSBsaGRfb21wX2Fzc2lnbm1l bnQgKHRyZWUsIHRyZWUsIHRyZWUpOwogZXh0ZXJuIHZvaWQgbGhkX29tcF9maW5pc2hfY2xh dXNlICh0cmVlLCBnaW1wbGVfc2VxICosIGJvb2wpOwogZXh0ZXJuIHRyZWUgbGhkX29tcF9h cnJheV9zaXplICh0cmVlLCBnaW1wbGVfc2VxICopOworZXh0ZXJuIGJvb2wgbGhkX29tcF9k ZWVwX21hcHBpbmdfcCAoY29uc3QgZ2ltcGxlICosIHRyZWUpOworZXh0ZXJuIHRyZWUgbGhk X29tcF9kZWVwX21hcHBpbmdfY250IChjb25zdCBnaW1wbGUgKiwgdHJlZSwgZ2ltcGxlX3Nl cSAqKTsKK2V4dGVybiB2b2lkIGxoZF9vbXBfZGVlcF9tYXBwaW5nIChjb25zdCBnaW1wbGUg KiwgdHJlZSwgdW5zaWduZWQgSE9TVF9XSURFX0lOVCwKKwkJCQkgIHRyZWUsIHRyZWUsIHRy ZWUsIHRyZWUsIHRyZWUsIGdpbXBsZV9zZXEgKik7CiBzdHJ1Y3QgZ2ltcGxpZnlfb21wX2N0 eDsKIGV4dGVybiB2b2lkIGxoZF9vbXBfZmlyc3Rwcml2YXRpemVfdHlwZV9zaXplcyAoc3Ry dWN0IGdpbXBsaWZ5X29tcF9jdHggKiwKIAkJCQkJICAgICAgIHRyZWUpOwpAQCAtMjczLDYg KzI3Nyw5IEBAIGV4dGVybiB0cmVlIGxoZF91bml0X3NpemVfd2l0aG91dF9yZXVzYWJsZV9w YWRkaW5nICh0cmVlKTsKICNkZWZpbmUgTEFOR19IT09LU19PTVBfQ0xBVVNFX0xJTkVBUl9D VE9SIE5VTEwKICNkZWZpbmUgTEFOR19IT09LU19PTVBfQ0xBVVNFX0RUT1IgaG9va190cmVl X3RyZWVfdHJlZV9udWxsCiAjZGVmaW5lIExBTkdfSE9PS1NfT01QX0ZJTklTSF9DTEFVU0Ug bGhkX29tcF9maW5pc2hfY2xhdXNlCisjZGVmaW5lIExBTkdfSE9PS1NfT01QX0RFRVBfTUFQ UElOR19QIGxoZF9vbXBfZGVlcF9tYXBwaW5nX3AKKyNkZWZpbmUgTEFOR19IT09LU19PTVBf REVFUF9NQVBQSU5HX0NOVCBsaGRfb21wX2RlZXBfbWFwcGluZ19jbnQKKyNkZWZpbmUgTEFO R19IT09LU19PTVBfREVFUF9NQVBQSU5HIGxoZF9vbXBfZGVlcF9tYXBwaW5nCiAjZGVmaW5l IExBTkdfSE9PS1NfT01QX0FMTE9DQVRBQkxFX1AgaG9va19ib29sX3RyZWVfZmFsc2UKICNk ZWZpbmUgTEFOR19IT09LU19PTVBfU0NBTEFSX1AgbGhkX29tcF9zY2FsYXJfcAogI2RlZmlu ZSBMQU5HX0hPT0tTX09NUF9TQ0FMQVJfVEFSR0VUX1AgaG9va19ib29sX3RyZWVfZmFsc2UK QEAgLTMwNyw2ICszMTQsOSBAQCBleHRlcm4gdHJlZSBsaGRfdW5pdF9zaXplX3dpdGhvdXRf cmV1c2FibGVfcGFkZGluZyAodHJlZSk7CiAgIExBTkdfSE9PS1NfT01QX0NMQVVTRV9MSU5F QVJfQ1RPUiwgXAogICBMQU5HX0hPT0tTX09NUF9DTEFVU0VfRFRPUiwgXAogICBMQU5HX0hP T0tTX09NUF9GSU5JU0hfQ0xBVVNFLCBcCisgIExBTkdfSE9PS1NfT01QX0RFRVBfTUFQUElO R19QLCBcCisgIExBTkdfSE9PS1NfT01QX0RFRVBfTUFQUElOR19DTlQsIFwKKyAgTEFOR19I T09LU19PTVBfREVFUF9NQVBQSU5HLCBcCiAgIExBTkdfSE9PS1NfT01QX0FMTE9DQVRBQkxF X1AsIFwKICAgTEFOR19IT09LU19PTVBfU0NBTEFSX1AsIFwKICAgTEFOR19IT09LU19PTVBf U0NBTEFSX1RBUkdFVF9QLCBcCmRpZmYgLS1naXQgYS9nY2MvbGFuZ2hvb2tzLmNjIGIvZ2Nj L2xhbmdob29rcy5jYwppbmRleCA5YTFhOWVjY2NhOS4uNWEwZWM2YmI4YjggMTAwNjQ0Ci0t LSBhL2djYy9sYW5naG9va3MuY2MKKysrIGIvZ2NjL2xhbmdob29rcy5jYwpAQCAtNjQyLDYg KzY0MiwzMCBAQCBsaGRfb21wX2FycmF5X3NpemUgKHRyZWUsIGdpbXBsZV9zZXEgKikKICAg cmV0dXJuIE5VTExfVFJFRTsKIH0KIAorLyogUmV0dXJucyB0cnVlIHdoZW4gYWRkaXRpb25h bCBtYXBwaW5ncyBmb3IgYSBkZWNsIGFyZSBuZWVkZWQuICAqLworCitib29sCitsaGRfb21w X2RlZXBfbWFwcGluZ19wIChjb25zdCBnaW1wbGUgKiwgdHJlZSkKK3sKKyAgcmV0dXJuIGZh bHNlOworfQorCisvKiBSZXR1cm5zIG51bWJlciBvZiBhZGRpdGlvbmFsIG1hcHBpbmdzIGZv ciBhIGRlY2wuICAqLworCit0cmVlCitsaGRfb21wX2RlZXBfbWFwcGluZ19jbnQgKGNvbnN0 IGdpbXBsZSAqLCB0cmVlLCBnaW1wbGVfc2VxICopCit7CisgIHJldHVybiBOVUxMX1RSRUU7 Cit9CisKKy8qIERvIHRoZSBhZGRpdGlvbmFsIG1hcHBpbmdzLiAgKi8KKwordm9pZAorbGhk X29tcF9kZWVwX21hcHBpbmcgKGNvbnN0IGdpbXBsZSAqLCB0cmVlLCB1bnNpZ25lZCBIT1NU X1dJREVfSU5ULCB0cmVlLCB0cmVlLAorCQkgICAgICB0cmVlLCB0cmVlLCB0cmVlLCBnaW1w bGVfc2VxICopCit7Cit9CisKIC8qIFJldHVybiB0cnVlIGlmIERFQ0wgaXMgYSBzY2FsYXIg dmFyaWFibGUgKGZvciB0aGUgcHVycG9zZSBvZgogICAgaW1wbGljaXQgZmlyc3Rwcml2YXRp emF0aW9uICYgbWFwcGluZykuIE9ubHkgaWYgYWxsb2NfcHRyX29rCiAgICBhcmUgYWxsb2Nh dGFibGVzIGFuZCBwb2ludGVycyBhY2NlcHRlZC4gKi8KZGlmZiAtLWdpdCBhL2djYy9sYW5n aG9va3MuaCBiL2djYy9sYW5naG9va3MuaAppbmRleCBjY2E3NTI4NWZjMi4uOTdiNWU4ODgx NTEgMTAwNjQ0Ci0tLSBhL2djYy9sYW5naG9va3MuaAorKysgYi9nY2MvbGFuZ2hvb2tzLmgK QEAgLTMxMyw2ICszMTMsMjEgQEAgc3RydWN0IGxhbmdfaG9va3NfZm9yX2RlY2xzCiAgIC8q IERvIGxhbmd1YWdlIHNwZWNpZmljIGNoZWNraW5nIG9uIGFuIGltcGxpY2l0bHkgZGV0ZXJt aW5lZCBjbGF1c2UuICAqLwogICB2b2lkICgqb21wX2ZpbmlzaF9jbGF1c2UpICh0cmVlIGNs YXVzZSwgZ2ltcGxlX3NlcSAqcHJlX3AsIGJvb2wpOwogCisgIC8qIEFkZGl0aW9uYWwgbGFu Z3VhZ2Utc3BlY2lmaWMgbWFwcGluZ3MgZm9yIGEgZGVjbDsgcmV0dXJucyB0cnVlCisgICAg IGlmIHRob3NlIG1heSBvY2N1ci4gICovCisgIGJvb2wgKCpvbXBfZGVlcF9tYXBwaW5nX3Ap IChjb25zdCBnaW1wbGUgKmN0eF9zdG10LCB0cmVlIGNsYXVzZSk7CisKKyAgLyogQWRkaXRp b25hbCBsYW5ndWFnZS1zcGVjaWZpYyBtYXBwaW5ncyBmb3IgYSBkZWNsOyByZXR1cm5zIHRo ZQorICAgICBudW1iZXIgb2YgYWRkaXRpb25hbCBtYXBwaW5ncyBuZWVkZWQuICAqLworICB0 cmVlICgqb21wX2RlZXBfbWFwcGluZ19jbnQpIChjb25zdCBnaW1wbGUgKmN0eF9zdG10LCB0 cmVlIGNsYXVzZSwKKwkJCQlnaW1wbGVfc2VxICpzZXEpOworCisgIC8qIERvIHRoZSBhY3R1 YWwgYWRkaXRpb25hbCBsYW5ndWFnZS1zcGVjaWZpYyBtYXBwaW5ncyBmb3IgYSBkZWNsLiAq LworICB2b2lkICgqb21wX2RlZXBfbWFwcGluZykgKGNvbnN0IGdpbXBsZSAqc3RtdCwgdHJl ZSBjbGF1c2UsCisJCQkgICAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCB0a2luZCwKKwkJCSAg ICB0cmVlIGRhdGEsIHRyZWUgc2l6ZXMsIHRyZWUga2luZHMsCisJCQkgICAgdHJlZSBvZmZz ZXRfZGF0YSwgdHJlZSBvZmZzZXQsIGdpbXBsZV9zZXEgKnNlcSk7CisKICAgLyogUmV0dXJu IHRydWUgaWYgREVDTCBpcyBhbiBhbGxvY2F0YWJsZSB2YXJpYWJsZSAoZm9yIHRoZSBwdXJw b3NlIG9mCiAgICAgIGltcGxpY2l0IG1hcHBpbmcpLiAgKi8KICAgYm9vbCAoKm9tcF9hbGxv Y2F0YWJsZV9wKSAodHJlZSBkZWNsKTsKZGlmZiAtLWdpdCBhL2djYy9vbXAtZXhwYW5kLmNj IGIvZ2NjL29tcC1leHBhbmQuY2MKaW5kZXggYzdlZjQxOTI0ZDYuLjU1NTRjYzMxNzFmIDEw MDY0NAotLS0gYS9nY2Mvb21wLWV4cGFuZC5jYworKysgYi9nY2Mvb21wLWV4cGFuZC5jYwpA QCAtOTkxNiw4ICs5OTE2LDkgQEAgZXhwYW5kX29tcF90YXJnZXQgKHN0cnVjdCBvbXBfcmVn aW9uICpyZWdpb24pCiAJCSAgLyogV2UncmUgaWdub3JpbmcgdGhlIHN1YmNvZGUgYmVjYXVz ZSB3ZSdyZQogCQkgICAgIGVmZmVjdGl2ZWx5IGRvaW5nIGEgU1RSSVBfTk9QUy4gICovCiAK LQkJICBpZiAoVFJFRV9DT0RFIChhcmcpID09IEFERFJfRVhQUgotCQkgICAgICAmJiBUUkVF X09QRVJBTkQgKGFyZywgMCkgPT0gc2VuZGVyKQorCQkgIGlmICgoVFJFRV9DT0RFIChhcmcp ID09IEFERFJfRVhQUgorCQkgICAgICAgJiYgVFJFRV9PUEVSQU5EIChhcmcsIDApID09IHNl bmRlcikKKwkJICAgICAgfHwgYXJnID09IHNlbmRlcikKIAkJICAgIHsKIAkJICAgICAgdGd0 Y29weV9zdG10ID0gc3RtdDsKIAkJICAgICAgYnJlYWs7CkBAIC0xMDM2NSw3ICsxMDM2Niw3 IEBAIGV4cGFuZF9vbXBfdGFyZ2V0IChzdHJ1Y3Qgb21wX3JlZ2lvbiAqcmVnaW9uKQogICAg ICAgdDMgPSB0MjsKICAgICAgIHQ0ID0gdDI7CiAgICAgfQotICBlbHNlCisgIGVsc2UgaWYg KFRSRUVfVkVDX0xFTkdUSCAodCkgPT0gMyB8fCBpc19naW1wbGVfb21wX29hY2MgKGVudHJ5 X3N0bXQpKQogICAgIHsKICAgICAgIHQxID0gVFlQRV9NQVhfVkFMVUUgKFRZUEVfRE9NQUlO IChUUkVFX1RZUEUgKFRSRUVfVkVDX0VMVCAodCwgMSkpKSk7CiAgICAgICB0MSA9IHNpemVf Ymlub3AgKFBMVVNfRVhQUiwgdDEsIHNpemVfaW50ICgxKSk7CkBAIC0xMDM3Myw2ICsxMDM3 NCwxNyBAQCBleHBhbmRfb21wX3RhcmdldCAoc3RydWN0IG9tcF9yZWdpb24gKnJlZ2lvbikK ICAgICAgIHQzID0gYnVpbGRfZm9sZF9hZGRyX2V4cHIgKFRSRUVfVkVDX0VMVCAodCwgMSkp OwogICAgICAgdDQgPSBidWlsZF9mb2xkX2FkZHJfZXhwciAoVFJFRV9WRUNfRUxUICh0LCAy KSk7CiAgICAgfQorICBlbHNlCisgICAgeworICAgICAgdDEgPSBmb3JjZV9naW1wbGVfb3Bl cmFuZF9nc2kgKCZnc2ksIFRSRUVfVkVDX0VMVCAodCwgMyksIHRydWUsIE5VTExfVFJFRSwK KwkJCQkgICAgIHRydWUsIEdTSV9TQU1FX1NUTVQpOworICAgICAgdDIgPSBmb3JjZV9naW1w bGVfb3BlcmFuZF9nc2kgKCZnc2ksIFRSRUVfVkVDX0VMVCAodCwgMCksIHRydWUsIE5VTExf VFJFRSwKKwkJCQkgICAgIHRydWUsIEdTSV9TQU1FX1NUTVQpOworICAgICAgdDMgPSBmb3Jj ZV9naW1wbGVfb3BlcmFuZF9nc2kgKCZnc2ksIFRSRUVfVkVDX0VMVCAodCwgMSksIHRydWUs IE5VTExfVFJFRSwKKwkJCQkgICAgIHRydWUsIEdTSV9TQU1FX1NUTVQpOworICAgICAgdDQg PSBmb3JjZV9naW1wbGVfb3BlcmFuZF9nc2kgKCZnc2ksIFRSRUVfVkVDX0VMVCAodCwgMiks IHRydWUsIE5VTExfVFJFRSwKKwkJCQkgICAgIHRydWUsIEdTSV9TQU1FX1NUTVQpOworICAg IH0KIAogICBnaW1wbGUgKmc7CiAgIGJvb2wgdGFnZ2luZyA9IGZhbHNlOwpkaWZmIC0tZ2l0 IGEvZ2NjL29tcC1sb3cuY2MgYi9nY2Mvb21wLWxvdy5jYwppbmRleCBmZWY0MWEwMTNlYy4u Y2Y2ZjBlMTQ1MDcgMTAwNjQ0Ci0tLSBhL2djYy9vbXAtbG93LmNjCisrKyBiL2djYy9vbXAt bG93LmNjCkBAIC03NjcsNyArNzY3LDEwIEBAIHN0YXRpYyB0cmVlCiBidWlsZF9zZW5kZXJf cmVmIChzcGxheV90cmVlX2tleSBrZXksIG9tcF9jb250ZXh0ICpjdHgpCiB7CiAgIHRyZWUg ZmllbGQgPSBsb29rdXBfc2ZpZWxkIChrZXksIGN0eCk7Ci0gIHJldHVybiBvbXBfYnVpbGRf Y29tcG9uZW50X3JlZiAoY3R4LT5zZW5kZXJfZGVjbCwgZmllbGQpOworICB0cmVlIHRtcCA9 IGN0eC0+c2VuZGVyX2RlY2w7CisgIGlmIChQT0lOVEVSX1RZUEVfUCAoVFJFRV9UWVBFICh0 bXApKSkKKyAgICB0bXAgPSBidWlsZF9mb2xkX2luZGlyZWN0X3JlZiAodG1wKTsKKyAgcmV0 dXJuIG9tcF9idWlsZF9jb21wb25lbnRfcmVmICh0bXAsIGZpZWxkKTsKIH0KIAogc3RhdGlj IHRyZWUKQEAgLTExMzgsNyArMTE0MSw5IEBAIGZpeHVwX2NoaWxkX3JlY29yZF90eXBlIChv bXBfY29udGV4dCAqY3R4KQogICAgIHR5cGUgPSBidWlsZF9xdWFsaWZpZWRfdHlwZSAodHlw ZSwgVFlQRV9RVUFMX0NPTlNUKTsKIAogICBUUkVFX1RZUEUgKGN0eC0+cmVjZWl2ZXJfZGVj bCkKLSAgICA9IGJ1aWxkX3F1YWxpZmllZF90eXBlIChidWlsZF9yZWZlcmVuY2VfdHlwZSAo dHlwZSksIFRZUEVfUVVBTF9SRVNUUklDVCk7CisgICAgPSBidWlsZF9xdWFsaWZpZWRfdHlw ZSAoZmxleGlibGVfYXJyYXlfdHlwZV9wICh0eXBlKQorCQkJICAgID8gYnVpbGRfcG9pbnRl cl90eXBlICh0eXBlKQorCQkJICAgIDogYnVpbGRfcmVmZXJlbmNlX3R5cGUgKHR5cGUpLCBU WVBFX1FVQUxfUkVTVFJJQ1QpOwogfQogCiAvKiBJbnN0YW50aWF0ZSBkZWNscyBhcyBuZWNl c3NhcnkgaW4gQ1RYIHRvIHNhdGlzZnkgdGhlIGRhdGEgc2hhcmluZwpAQCAtMTE0OSw2ICsx MTU0LDcgQEAgc2Nhbl9zaGFyaW5nX2NsYXVzZXMgKHRyZWUgY2xhdXNlcywgb21wX2NvbnRl eHQgKmN0eCkKIHsKICAgdHJlZSBjLCBkZWNsOwogICBib29sIHNjYW5fYXJyYXlfcmVkdWN0 aW9ucyA9IGZhbHNlOworICBib29sIGZsZXhfYXJyYXlfcHRyID0gZmFsc2U7CiAKICAgZm9y IChjID0gY2xhdXNlczsgYzsgYyA9IE9NUF9DTEFVU0VfQ0hBSU4gKGMpKQogICAgIGlmIChP TVBfQ0xBVVNFX0NPREUgKGMpID09IE9NUF9DTEFVU0VfQUxMT0NBVEUKQEAgLTE1OTIsNiAr MTU5OCw4IEBAIHNjYW5fc2hhcmluZ19jbGF1c2VzICh0cmVlIGNsYXVzZXMsIG9tcF9jb250 ZXh0ICpjdHgpCiAJCSAgJiYgIU9NUF9DTEFVU0VfTUFQX1pFUk9fQklBU19BUlJBWV9TRUNU SU9OIChjKSkKIAkJYnJlYWs7CiAJICAgIH0KKwkgIGlmICghZmxleF9hcnJheV9wdHIpCisJ ICAgIGZsZXhfYXJyYXlfcHRyID0gbGFuZ19ob29rcy5kZWNscy5vbXBfZGVlcF9tYXBwaW5n X3AgKGN0eC0+c3RtdCwgYyk7CiAJICBpZiAoT01QX0NMQVVTRV9DT0RFIChjKSA9PSBPTVBf Q0xBVVNFX01BUAogCSAgICAgICYmIERFQ0xfUCAoZGVjbCkKIAkgICAgICAmJiAoT01QX0NM QVVTRV9NQVBfS0lORCAoYykgPT0gR09NUF9NQVBfQVRUQUNICkBAIC0yMDAxLDYgKzIwMDks MTggQEAgc2Nhbl9zaGFyaW5nX2NsYXVzZXMgKHRyZWUgY2xhdXNlcywgb21wX2NvbnRleHQg KmN0eCkKIAkJICYmIE9NUF9DTEFVU0VfTElORUFSX0dJTVBMRV9TRVEgKGMpKQogCSAgc2Nh bl9vbXAgKCZPTVBfQ0xBVVNFX0xJTkVBUl9HSU1QTEVfU0VRIChjKSwgY3R4KTsKICAgICB9 CisgIGlmIChmbGV4X2FycmF5X3B0cikKKyAgICB7CisgICAgICB0cmVlIGZpZWxkID0gYnVp bGRfcmFuZ2VfdHlwZSAoc2l6ZV90eXBlX25vZGUsCisJCQkJICAgICBidWlsZF9pbnRfY3N0 dSAoc2l6ZV90eXBlX25vZGUsIDApLAorCQkJCSAgICAgTlVMTF9UUkVFKTsKKyAgICAgIGZp ZWxkID0gYnVpbGRfYXJyYXlfdHlwZSAocHRyX3R5cGVfbm9kZSwgZmllbGQpOworICAgICAg ZmllbGQgPSBidWlsZF9kZWNsIChVTktOT1dOX0xPQ0FUSU9OLCBGSUVMRF9ERUNMLCBOVUxM X1RSRUUsIGZpZWxkKTsKKyAgICAgIFNFVF9ERUNMX0FMSUdOIChmaWVsZCwgVFlQRV9BTElH TiAocHRyX3R5cGVfbm9kZSkpOworICAgICAgREVDTF9DT05URVhUIChmaWVsZCkgPSBjdHgt PnJlY29yZF90eXBlOworICAgICAgREVDTF9DSEFJTiAoZmllbGQpID0gVFlQRV9GSUVMRFMg KGN0eC0+cmVjb3JkX3R5cGUpOworICAgICAgVFlQRV9GSUVMRFMgKGN0eC0+cmVjb3JkX3R5 cGUpID0gZmllbGQ7CisgICAgfQogfQogCiAvKiBDcmVhdGUgYSBuZXcgbmFtZSBmb3Igb21w IGNoaWxkIGZ1bmN0aW9uLiAgUmV0dXJucyBhbiBpZGVudGlmaWVyLiAqLwpAQCAtMTI2OTYs NiArMTI3MTYsMTEgQEAgbG93ZXJfb21wX3RhcmdldCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3Ig KmdzaV9wLCBvbXBfY29udGV4dCAqY3R4KQogICB1bnNpZ25lZCBpbnQgbWFwX2NudCA9IDA7 CiAgIHRyZWUgaW5fcmVkdWN0aW9uX2NsYXVzZXMgPSBOVUxMX1RSRUU7CiAKKyAgdHJlZSBk ZWVwX21hcF9jbnQgPSBOVUxMX1RSRUU7CisgIHRyZWUgZGVlcF9tYXBfZGF0YSA9IE5VTExf VFJFRTsKKyAgdHJlZSBkZWVwX21hcF9vZmZzZXRfZGF0YSA9IE5VTExfVFJFRTsKKyAgdHJl ZSBkZWVwX21hcF9vZmZzZXQgPSBOVUxMX1RSRUU7CisKICAgb2ZmbG9hZGVkID0gaXNfZ2lt cGxlX29tcF9vZmZsb2FkZWQgKHN0bXQpOwogICBzd2l0Y2ggKGdpbXBsZV9vbXBfdGFyZ2V0 X2tpbmQgKHN0bXQpKQogICAgIHsKQEAgLTEyNzc0LDYgKzEyNzk5LDggQEAgbG93ZXJfb21w X3RhcmdldCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaV9wLCBvbXBfY29udGV4dCAqY3R4 KQogICBwdXNoX2dpbXBsaWZ5X2NvbnRleHQgKCk7CiAgIGZwbGlzdCA9IE5VTEw7CiAKKyAg aWxpc3QgPSBOVUxMOworICBvbGlzdCA9IE5VTEw7CiAgIGZvciAoYyA9IGNsYXVzZXM7IGMg OyBjID0gT01QX0NMQVVTRV9DSEFJTiAoYykpCiAgICAgc3dpdGNoIChPTVBfQ0xBVVNFX0NP REUgKGMpKQogICAgICAgewpAQCAtMTI4MjcsNiArMTI4NTQsMTYgQEAgbG93ZXJfb21wX3Rh cmdldCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaV9wLCBvbXBfY29udGV4dCAqY3R4KQog ICAgICAgY2FzZSBPTVBfQ0xBVVNFX0ZST006CiAgICAgICBvYWNjX2ZpcnN0cHJpdmF0ZToK IAl2YXIgPSBPTVBfQ0xBVVNFX0RFQ0wgKGMpOworCXsKKwkgIHRyZWUgZXh0cmEgPSBsYW5n X2hvb2tzLmRlY2xzLm9tcF9kZWVwX21hcHBpbmdfY250IChzdG10LCBjLCAmaWxpc3QpOwor CSAgaWYgKGV4dHJhICE9IE5VTExfVFJFRSAmJiBkZWVwX21hcF9jbnQgIT0gTlVMTF9UUkVF KQorCSAgICBkZWVwX21hcF9jbnQgPSBmb2xkX2J1aWxkMl9sb2MgKE9NUF9DTEFVU0VfTE9D QVRJT04gKGMpLCBQTFVTX0VYUFIsCisJCQkJCSAgICBzaXplX3R5cGVfbm9kZSwgZGVlcF9t YXBfY250LAorCQkJCQkgICAgZXh0cmEpOworCSAgZWxzZSBpZiAoZXh0cmEgIT0gTlVMTF9U UkVFKQorCSAgICBkZWVwX21hcF9jbnQgPSBleHRyYTsKKwl9CisKIAlpZiAoIURFQ0xfUCAo dmFyKSkKIAkgIHsKIAkgICAgaWYgKE9NUF9DTEFVU0VfQ09ERSAoYykgIT0gT01QX0NMQVVT RV9NQVAKQEAgLTEzMDYxLDE4ICsxMzA5OCwzMSBAQCBsb3dlcl9vbXBfdGFyZ2V0IChnaW1w bGVfc3RtdF9pdGVyYXRvciAqZ3NpX3AsIG9tcF9jb250ZXh0ICpjdHgpCiAgICAgICByZWNv cmRfdmFyc19pbnRvIChnaW1wbGVfYmluZF92YXJzICh0Z3RfYmluZCksIGNoaWxkX2ZuKTsK ICAgICB9CiAKLSAgb2xpc3QgPSBOVUxMOwotICBpbGlzdCA9IE5VTEw7CiAgIGlmIChjdHgt PnJlY29yZF90eXBlKQogICAgIHsKKyAgICAgIGlmIChkZWVwX21hcF9jbnQgJiYgVFJFRV9D T0RFIChkZWVwX21hcF9jbnQpID09IElOVEVHRVJfQ1NUKQorCS8qIG1hcF9jbnQgPSBtYXBf Y250ICsgdHJlZV90b19od2kgKGRlZXBfbWFwX2NudCk7ICovCisJLyogZGVlcF9tYXBfY250 ID0gTlVMTF9UUkVFOyAqLworCWdjY191bnJlYWNoYWJsZSAoKTsKKyAgICAgIGVsc2UgaWYg KGRlZXBfbWFwX2NudCkKKwl7CisJICBnY2NfYXNzZXJ0IChmbGV4aWJsZV9hcnJheV90eXBl X3AgKGN0eC0+cmVjb3JkX3R5cGUpKTsKKwkgIHRyZWUgbiA9IGNyZWF0ZV90bXBfdmFyX3Jh dyAoc2l6ZV90eXBlX25vZGUsICJubl9tYXAiKTsKKwkgIGdpbXBsZV9hZGRfdG1wX3ZhciAo bik7CisJICBnaW1wbGlmeV9hc3NpZ24gKG4sIGRlZXBfbWFwX2NudCwgJmlsaXN0KTsKKwkg IGRlZXBfbWFwX2NudCA9IG47CisJfQogICAgICAgY3R4LT5zZW5kZXJfZGVjbAotCT0gY3Jl YXRlX3RtcF92YXIgKGN0eC0+cmVjb3JkX3R5cGUsICIub21wX2RhdGFfYXJyIik7CisJPSBj cmVhdGVfdG1wX3ZhciAoZGVlcF9tYXBfY250ID8gYnVpbGRfcG9pbnRlcl90eXBlIChjdHgt PnJlY29yZF90eXBlKQorCQkJCSAgICAgICA6IGN0eC0+cmVjb3JkX3R5cGUsICIub21wX2Rh dGFfYXJyIik7CiAgICAgICBERUNMX05BTUVMRVNTIChjdHgtPnNlbmRlcl9kZWNsKSA9IDE7 CiAgICAgICBUUkVFX0FERFJFU1NBQkxFIChjdHgtPnNlbmRlcl9kZWNsKSA9IDE7Ci0gICAg ICB0ID0gbWFrZV90cmVlX3ZlYyAoMyk7CisgICAgICB0ID0gbWFrZV90cmVlX3ZlYyAoZGVl cF9tYXBfY250ID8gNCA6IDMpOwogICAgICAgVFJFRV9WRUNfRUxUICh0LCAwKSA9IGN0eC0+ c2VuZGVyX2RlY2w7CiAgICAgICBUUkVFX1ZFQ19FTFQgKHQsIDEpCi0JPSBjcmVhdGVfdG1w X3ZhciAoYnVpbGRfYXJyYXlfdHlwZV9uZWx0cyAoc2l6ZV90eXBlX25vZGUsIG1hcF9jbnQp LAorCT0gY3JlYXRlX3RtcF92YXIgKGRlZXBfbWFwX2NudAorCQkJICA/IGJ1aWxkX3BvaW50 ZXJfdHlwZSAoc2l6ZV90eXBlX25vZGUpCisJCQkgIDogYnVpbGRfYXJyYXlfdHlwZV9uZWx0 cyAoc2l6ZV90eXBlX25vZGUsIG1hcF9jbnQpLAogCQkJICAiLm9tcF9kYXRhX3NpemVzIik7 CiAgICAgICBERUNMX05BTUVMRVNTIChUUkVFX1ZFQ19FTFQgKHQsIDEpKSA9IDE7CiAgICAg ICBUUkVFX0FERFJFU1NBQkxFIChUUkVFX1ZFQ19FTFQgKHQsIDEpKSA9IDE7CkBAIC0xMzA4 MCwxMyArMTMxMzAsNjUgQEAgbG93ZXJfb21wX3RhcmdldCAoZ2ltcGxlX3N0bXRfaXRlcmF0 b3IgKmdzaV9wLCBvbXBfY29udGV4dCAqY3R4KQogICAgICAgdHJlZSB0a2luZF90eXBlID0g c2hvcnRfdW5zaWduZWRfdHlwZV9ub2RlOwogICAgICAgaW50IHRhbGlnbl9zaGlmdCA9IDg7 CiAgICAgICBUUkVFX1ZFQ19FTFQgKHQsIDIpCi0JPSBjcmVhdGVfdG1wX3ZhciAoYnVpbGRf YXJyYXlfdHlwZV9uZWx0cyAodGtpbmRfdHlwZSwgbWFwX2NudCksCisJPSBjcmVhdGVfdG1w X3ZhciAoZGVlcF9tYXBfY250CisJCQkgID8gYnVpbGRfcG9pbnRlcl90eXBlICh0a2luZF90 eXBlKQorCQkJICA6IGJ1aWxkX2FycmF5X3R5cGVfbmVsdHMgKHRraW5kX3R5cGUsIG1hcF9j bnQpLAogCQkJICAiLm9tcF9kYXRhX2tpbmRzIik7CiAgICAgICBERUNMX05BTUVMRVNTIChU UkVFX1ZFQ19FTFQgKHQsIDIpKSA9IDE7CiAgICAgICBUUkVFX0FERFJFU1NBQkxFIChUUkVF X1ZFQ19FTFQgKHQsIDIpKSA9IDE7CiAgICAgICBUUkVFX1NUQVRJQyAoVFJFRV9WRUNfRUxU ICh0LCAyKSkgPSAxOwogICAgICAgZ2ltcGxlX29tcF90YXJnZXRfc2V0X2RhdGFfYXJnIChz dG10LCB0KTsKIAorICAgICAgaWYgKGRlZXBfbWFwX2NudCkKKwl7CisJICB0cmVlIHRtcCwg c2l6ZTsKKwkgIHNpemUgPSBjcmVhdGVfdG1wX3ZhciAoc2l6ZV90eXBlX25vZGUsIE5VTEwp OworCSAgREVDTF9OQU1FTEVTUyAoc2l6ZSkgPSAxOworCSAgZ2ltcGxpZnlfYXNzaWduIChz aXplLAorCQkJICAgZm9sZF9idWlsZDJfbG9jIChVTktOT1dOX0xPQ0FUSU9OLCBQTFVTX0VY UFIsCisJCQkJCSAgICBzaXplX3R5cGVfbm9kZSwgZGVlcF9tYXBfY250LAorCQkJCQkgICAg YnVpbGRfaW50X2NzdCAoc2l6ZV90eXBlX25vZGUsCisJCQkJCQkJICAgbWFwX2NudCkpLCAm aWxpc3QpOworCSAgVFJFRV9WRUNfRUxUICh0LCAzKSA9IHNpemU7CisKKwkgIHRyZWUgY2Fs bCA9IGJ1aWx0aW5fZGVjbF9leHBsaWNpdCAoQlVJTFRfSU5fTUFMTE9DKTsKKwkgIHNpemUg PSBmb2xkX2J1aWxkMl9sb2MgKFVOS05PV05fTE9DQVRJT04sIE1VTFRfRVhQUiwKKwkJCQkg IHNpemVfdHlwZV9ub2RlLCBkZWVwX21hcF9jbnQsCisJCQkJICBUWVBFX1NJWkVfVU5JVCAo cHRyX3R5cGVfbm9kZSkpOworCSAgc2l6ZSA9IGZvbGRfYnVpbGQyX2xvYyAoVU5LTk9XTl9M T0NBVElPTiwgUExVU19FWFBSLAorCQkJCSAgc2l6ZV90eXBlX25vZGUsIHNpemUsCisJCQkJ ICBUWVBFX1NJWkVfVU5JVCAoY3R4LT5yZWNvcmRfdHlwZSkpOworCSAgdG1wID0gYnVpbGRf Y2FsbF9leHByX2xvYyAoaW5wdXRfbG9jYXRpb24sIGNhbGwsIDEsIHNpemUpOworCSAgZ2lt cGxpZnlfYXNzaWduIChjdHgtPnNlbmRlcl9kZWNsLCB0bXAsICZpbGlzdCk7CisKKwkgIHNp emUgPSBmb2xkX2J1aWxkMl9sb2MgKFVOS05PV05fTE9DQVRJT04sIE1VTFRfRVhQUiwKKwkJ CQkgIHNpemVfdHlwZV9ub2RlLCBUUkVFX1ZFQ19FTFQgKHQsIDMpLAorCQkJCSAgVFlQRV9T SVpFX1VOSVQgKHNpemVfdHlwZV9ub2RlKSk7CisJICB0bXAgPSBidWlsZF9jYWxsX2V4cHJf bG9jIChpbnB1dF9sb2NhdGlvbiwgY2FsbCwgMSwgc2l6ZSk7CisJICBnaW1wbGlmeV9hc3Np Z24gKFRSRUVfVkVDX0VMVCAodCwgMSksIHRtcCwgJmlsaXN0KTsKKworCSAgc2l6ZSA9IGZv bGRfYnVpbGQyX2xvYyAoVU5LTk9XTl9MT0NBVElPTiwgTVVMVF9FWFBSLAorCQkJCSAgc2l6 ZV90eXBlX25vZGUsIFRSRUVfVkVDX0VMVCAodCwgMyksCisJCQkJICBUWVBFX1NJWkVfVU5J VCAodGtpbmRfdHlwZSkpOworCSAgdG1wID0gYnVpbGRfY2FsbF9leHByX2xvYyAoaW5wdXRf bG9jYXRpb24sIGNhbGwsIDEsIHNpemUpOworCSAgZ2ltcGxpZnlfYXNzaWduIChUUkVFX1ZF Q19FTFQgKHQsIDIpLCB0bXAsICZpbGlzdCk7CisJICB0cmVlIGZpZWxkID0gVFlQRV9GSUVM RFMgKFRSRUVfVFlQRSAoVFJFRV9UWVBFIChjdHgtPnNlbmRlcl9kZWNsKSkpOworCSAgZm9y ICggOyBERUNMX0NIQUlOIChmaWVsZCkgIT0gTlVMTF9UUkVFOyBmaWVsZCA9IERFQ0xfQ0hB SU4gKGZpZWxkKSkKKwkgICAgOworCSAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RFIChUUkVFX1RZ UEUgKGZpZWxkKSkpOworCSAgdG1wID0gYnVpbGRfZm9sZF9pbmRpcmVjdF9yZWYgKGN0eC0+ c2VuZGVyX2RlY2wpOworCSAgZGVlcF9tYXBfZGF0YSA9IG9tcF9idWlsZF9jb21wb25lbnRf cmVmICh0bXAsIGZpZWxkKTsKKwkgIGRlZXBfbWFwX29mZnNldF9kYXRhID0gY3JlYXRlX3Rt cF92YXJfcmF3IChzaXplX3R5cGVfbm9kZSwKKwkJCQkJCSAgICAgIm1hcF9vZmZzZXRfZGF0 YSIpOworCSAgZGVlcF9tYXBfb2Zmc2V0ID0gY3JlYXRlX3RtcF92YXJfcmF3IChzaXplX3R5 cGVfbm9kZSwgIm1hcF9vZmZzZXQiKTsKKwkgIGdpbXBsZV9hZGRfdG1wX3ZhciAoZGVlcF9t YXBfb2Zmc2V0X2RhdGEpOworCSAgZ2ltcGxlX2FkZF90bXBfdmFyIChkZWVwX21hcF9vZmZz ZXQpOworCSAgZ2ltcGxpZnlfYXNzaWduIChkZWVwX21hcF9vZmZzZXRfZGF0YSwgYnVpbGRf aW50X2NzdCAoc2l6ZV90eXBlX25vZGUsCisJCQkJCQkJCTApLCAmaWxpc3QpOworCSAgZ2lt cGxpZnlfYXNzaWduIChkZWVwX21hcF9vZmZzZXQsIGJ1aWxkX2ludF9jc3QgKHNpemVfdHlw ZV9ub2RlLAorCQkJCQkJCSAgIG1hcF9jbnQpLCAmaWxpc3QpOworCX0KKwogICAgICAgdmVj PGNvbnN0cnVjdG9yX2VsdCwgdmFfZ2M+ICp2c2l6ZTsKICAgICAgIHZlYzxjb25zdHJ1Y3Rv cl9lbHQsIHZhX2djPiAqdmtpbmQ7CiAgICAgICB2ZWNfYWxsb2MgKHZzaXplLCBtYXBfY250 KTsKQEAgLTEzMTEzLDYgKzEzMjE1LDI0IEBAIGxvd2VyX29tcF90YXJnZXQgKGdpbXBsZV9z dG10X2l0ZXJhdG9yICpnc2lfcCwgb21wX2NvbnRleHQgKmN0eCkKIAkJICAgIHx8IChPTVBf Q0xBVVNFX01BUF9LSU5EIChjKQogCQkJPT0gR09NUF9NQVBfRklSU1RQUklWQVRFX1JFRkVS RU5DRSkpKQogCSAgICAgIGJyZWFrOworCSAgICBpZiAoZGVlcF9tYXBfY250KQorCSAgICAg IHsKKwkJdW5zaWduZWQgSE9TVF9XSURFX0lOVCB0a2luZDI7CisJCXN3aXRjaCAoT01QX0NM QVVTRV9DT0RFIChjKSkKKwkJICB7CisJCSAgY2FzZSBPTVBfQ0xBVVNFX01BUDogdGtpbmQy ID0gT01QX0NMQVVTRV9NQVBfS0lORCAoYyk7IGJyZWFrOworCQkgIGNhc2UgT01QX0NMQVVT RV9GSVJTVFBSSVZBVEU6IHRraW5kMiA9IEdPTVBfTUFQX1RPOyBicmVhazsKKwkJICBjYXNl IE9NUF9DTEFVU0VfVE86IHRraW5kMiA9IEdPTVBfTUFQX1RPOyBicmVhazsKKwkJICBjYXNl IE9NUF9DTEFVU0VfRlJPTTogdGtpbmQyID0gR09NUF9NQVBfRlJPTTsgYnJlYWs7CisJCSAg ZGVmYXVsdDogZ2NjX3VucmVhY2hhYmxlICgpOworCQkgIH0KKwkJbGFuZ19ob29rcy5kZWNs cy5vbXBfZGVlcF9tYXBwaW5nIChzdG10LCBjLCB0a2luZDIsCisJCQkJCQkgICBkZWVwX21h cF9kYXRhLAorCQkJCQkJICAgVFJFRV9WRUNfRUxUICh0LCAxKSwKKwkJCQkJCSAgIFRSRUVf VkVDX0VMVCAodCwgMiksCisJCQkJCQkgICBkZWVwX21hcF9vZmZzZXRfZGF0YSwKKwkJCQkJ CSAgIGRlZXBfbWFwX29mZnNldCwgJmlsaXN0KTsKKwkgICAgICB9CiAJICAgIGlmICghREVD TF9QIChvdmFyKSkKIAkgICAgICB7CiAJCWlmIChPTVBfQ0xBVVNFX0NPREUgKGMpID09IE9N UF9DTEFVU0VfTUFQCkBAIC0xMzY2NywyMyArMTM3ODcsNjUgQEAgbG93ZXJfb21wX3Rhcmdl dCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaV9wLCBvbXBfY29udGV4dCAqY3R4KQogCiAg ICAgICBnY2NfYXNzZXJ0IChtYXBfaWR4ID09IG1hcF9jbnQpOwogCi0gICAgICBERUNMX0lO SVRJQUwgKFRSRUVfVkVDX0VMVCAodCwgMSkpCi0JPSBidWlsZF9jb25zdHJ1Y3RvciAoVFJF RV9UWVBFIChUUkVFX1ZFQ19FTFQgKHQsIDEpKSwgdnNpemUpOwotICAgICAgREVDTF9JTklU SUFMIChUUkVFX1ZFQ19FTFQgKHQsIDIpKQotCT0gYnVpbGRfY29uc3RydWN0b3IgKFRSRUVf VFlQRSAoVFJFRV9WRUNfRUxUICh0LCAyKSksIHZraW5kKTsKKyAgICAgIGlmICghZGVlcF9t YXBfY250KQorCXsKKwkgIERFQ0xfSU5JVElBTCAoVFJFRV9WRUNfRUxUICh0LCAxKSkKKwkg ICAgPSBidWlsZF9jb25zdHJ1Y3RvciAoVFJFRV9UWVBFIChUUkVFX1ZFQ19FTFQgKHQsIDEp KSwgdnNpemUpOworCSAgREVDTF9JTklUSUFMIChUUkVFX1ZFQ19FTFQgKHQsIDIpKQorCSAg ICA9IGJ1aWxkX2NvbnN0cnVjdG9yIChUUkVFX1RZUEUgKFRSRUVfVkVDX0VMVCAodCwgMikp LCB2a2luZCk7CisJfQogICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gMjsgaSsrKQotCWlm ICghVFJFRV9TVEFUSUMgKFRSRUVfVkVDX0VMVCAodCwgaSkpKQorCWlmIChkZWVwX21hcF9j bnQgfHwgIVRSRUVfU1RBVElDIChUUkVFX1ZFQ19FTFQgKHQsIGkpKSkKIAkgIHsKKwkgICAg dHJlZSB0bXAgPSBUUkVFX1ZFQ19FTFQgKHQsIGkpOworCSAgICBpZiAoZGVlcF9tYXBfY250 KQorCSAgICAgIHsKKwkJY29uc3QgY2hhciAqcHJlZml4ID0gKGkgPT0gMSA/ICIub21wX2Rh dGFfc2l6ZXMwIgorCQkJCQkgICAgIDogIi5vbXBfZGF0YV9raW5kczAiKTsKKwkJdHJlZSB0 eXBlID0gKGkgPT0gMSkgPyBzaXplX3R5cGVfbm9kZSA6IHRraW5kX3R5cGU7CisJCXR5cGUg PSBidWlsZF9hcnJheV90eXBlX25lbHRzICh0eXBlLCBtYXBfY250KTsKKwkJdHJlZSB2YXIg PSBjcmVhdGVfdG1wX3ZhciAodHlwZSwgcHJlZml4KTsKKwkJREVDTF9OQU1FTEVTUyAodmFy KSA9IDE7CisJCVRSRUVfQUREUkVTU0FCTEUgKHZhcikgPSAxOworCQlUUkVFX1NUQVRJQyAo dmFyKSA9IFRSRUVfU1RBVElDICh0bXApOworCQlERUNMX0lOSVRJQUwgKHZhcikgPSBidWls ZF9jb25zdHJ1Y3RvciAodHlwZSwgaSA9PSAxCisJCQkJCQkJICAgICAgPyB2c2l6ZSA6IHZr aW5kKTsKKwkJdG1wID0gdmFyOworCQlUUkVFX1NUQVRJQyAoVFJFRV9WRUNfRUxUICh0LCBp KSkgPSAwOworCSAgICAgIH0KKwogCSAgICBnaW1wbGVfc2VxIGluaXRsaXN0ID0gTlVMTDsK LQkgICAgZm9yY2VfZ2ltcGxlX29wZXJhbmQgKGJ1aWxkMSAoREVDTF9FWFBSLCB2b2lkX3R5 cGVfbm9kZSwKLQkJCQkJICBUUkVFX1ZFQ19FTFQgKHQsIGkpKSwKKwkgICAgZm9yY2VfZ2lt cGxlX29wZXJhbmQgKGJ1aWxkMSAoREVDTF9FWFBSLCB2b2lkX3R5cGVfbm9kZSwgdG1wKSwK IAkJCQkgICZpbml0bGlzdCwgdHJ1ZSwgTlVMTF9UUkVFKTsKIAkgICAgZ2ltcGxlX3NlcV9h ZGRfc2VxICgmaWxpc3QsIGluaXRsaXN0KTsKIAotCSAgICB0cmVlIGNsb2JiZXIgPSBidWls ZF9jbG9iYmVyIChUUkVFX1RZUEUgKFRSRUVfVkVDX0VMVCAodCwgaSkpKTsKLQkgICAgZ2lt cGxlX3NlcV9hZGRfc3RtdCAoJm9saXN0LAotCQkJCSBnaW1wbGVfYnVpbGRfYXNzaWduIChU UkVFX1ZFQ19FTFQgKHQsIGkpLAotCQkJCQkJICAgICAgY2xvYmJlcikpOworCSAgICBpZiAo ZGVlcF9tYXBfY250KQorCSAgICAgIHsKKwkJdHJlZSB0bXAyOworCQl0cmVlIGNhbGwgPSBi dWlsdGluX2RlY2xfZXhwbGljaXQgKEJVSUxUX0lOX01FTUNQWSk7CisJCXRtcDIgPSBUWVBF X1NJWkVfVU5JVCAoVFJFRV9UWVBFICh0bXApKTsKKwkJY2FsbCA9IGJ1aWxkX2NhbGxfZXhw cl9sb2MgKGlucHV0X2xvY2F0aW9uLCBjYWxsLCAzLAorCQkJCQkgICAgVFJFRV9WRUNfRUxU ICh0LCBpKSwKKwkJCQkJICAgIGJ1aWxkX2ZvbGRfYWRkcl9leHByICh0bXApLCB0bXAyKTsK KwkJZ2ltcGxpZnlfYW5kX2FkZCAoY2FsbCwgJmlsaXN0KTsKKwkgICAgICB9CisKKwkgICAg aWYgKCFUUkVFX1NUQVRJQyAodG1wKSkKKwkgICAgICB7CisJCXRyZWUgY2xvYmJlciA9IGJ1 aWxkX2Nsb2JiZXIgKFRSRUVfVFlQRSAodG1wKSk7CisJCWdpbXBsZV9zZXFfYWRkX3N0bXQg KCZvbGlzdCwKKwkJCQkgICAgIGdpbXBsZV9idWlsZF9hc3NpZ24gKHRtcCwgY2xvYmJlcikp OworCSAgICAgIH0KKwkgICAgaWYgKGRlZXBfbWFwX2NudCkKKwkgICAgICB7CisJCXRtcCA9 IFRSRUVfVkVDX0VMVCAodCwgaSk7CisJCXRyZWUgY2FsbCA9IGJ1aWx0aW5fZGVjbF9leHBs aWNpdCAoQlVJTFRfSU5fRlJFRSk7CisJCWNhbGwgPSBidWlsZF9jYWxsX2V4cHJfbG9jIChp bnB1dF9sb2NhdGlvbiwgY2FsbCwgMSwgdG1wKTsKKwkJZ2ltcGxpZnlfYW5kX2FkZCAoY2Fs bCwgJm9saXN0KTsKKwkJdHJlZSBjbG9iYmVyID0gYnVpbGRfY2xvYmJlciAoVFJFRV9UWVBF ICh0bXApKTsKKwkJZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJm9saXN0LAorCQkJCSAgICAgZ2lt cGxlX2J1aWxkX2Fzc2lnbiAodG1wLCBjbG9iYmVyKSk7CisJICAgICAgfQogCSAgfQogCWVs c2UgaWYgKG9tcF9tYXliZV9vZmZsb2FkZWRfY3R4IChjdHgtPm91dGVyKSkKIAkgIHsKQEAg LTEzNzAzLDcgKzEzODY1LDE4IEBAIGxvd2VyX29tcF90YXJnZXQgKGdpbXBsZV9zdG10X2l0 ZXJhdG9yICpnc2lfcCwgb21wX2NvbnRleHQgKmN0eCkKIAkgICAgICB9CiAJICB9CiAKLSAg ICAgIHRyZWUgY2xvYmJlciA9IGJ1aWxkX2Nsb2JiZXIgKGN0eC0+cmVjb3JkX3R5cGUpOwor ICAgICAgaWYgKGRlZXBfbWFwX2NudCkKKwl7CisJICB0cmVlIGNhbGwgPSBidWlsdGluX2Rl Y2xfZXhwbGljaXQgKEJVSUxUX0lOX0ZSRUUpOworCSAgY2FsbCA9IGJ1aWxkX2NhbGxfZXhw cl9sb2MgKGlucHV0X2xvY2F0aW9uLCBjYWxsLCAxLAorCQkJCSAgICAgIFRSRUVfVkVDX0VM VCAodCwgMCkpOworCSAgZ2ltcGxpZnlfYW5kX2FkZCAoY2FsbCwgJm9saXN0KTsKKworCSAg Z2ltcGxpZnlfZXhwciAoJlRSRUVfVkVDX0VMVCAodCwgMSksICZpbGlzdCwgTlVMTCwgaXNf Z2ltcGxlX3ZhbCwKKwkJCSBmYl9ydmFsdWUpOworCX0KKworICAgICAgdHJlZSBjbG9iYmVy ID0gYnVpbGRfY2xvYmJlciAoVFJFRV9UWVBFIChjdHgtPnNlbmRlcl9kZWNsKSk7CiAgICAg ICBnaW1wbGVfc2VxX2FkZF9zdG10ICgmb2xpc3QsIGdpbXBsZV9idWlsZF9hc3NpZ24gKGN0 eC0+c2VuZGVyX2RlY2wsCiAJCQkJCQkJY2xvYmJlcikpOwogICAgIH0KQEAgLTEzNzE2LDEx ICsxMzg4OSwxNiBAQCBsb3dlcl9vbXBfdGFyZ2V0IChnaW1wbGVfc3RtdF9pdGVyYXRvciAq Z3NpX3AsIG9tcF9jb250ZXh0ICpjdHgpCiAgIGlmIChvZmZsb2FkZWQKICAgICAgICYmIGN0 eC0+cmVjb3JkX3R5cGUpCiAgICAgewotICAgICAgdCA9IGJ1aWxkX2ZvbGRfYWRkcl9leHBy X2xvYyAobG9jLCBjdHgtPnNlbmRlcl9kZWNsKTsKKyAgICAgIHQgPSBjdHgtPnNlbmRlcl9k ZWNsOworICAgICAgaWYgKCFkZWVwX21hcF9jbnQpCisJdCA9IGJ1aWxkX2ZvbGRfYWRkcl9l eHByX2xvYyAobG9jLCB0KTsKICAgICAgIC8qIGZpeHVwX2NoaWxkX3JlY29yZF90eXBlIG1p Z2h0IGhhdmUgY2hhbmdlZCByZWNlaXZlcl9kZWNsJ3MgdHlwZS4gICovCiAgICAgICB0ID0g Zm9sZF9jb252ZXJ0X2xvYyAobG9jLCBUUkVFX1RZUEUgKGN0eC0+cmVjZWl2ZXJfZGVjbCks IHQpOwotICAgICAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJm5ld19ib2R5LAotCSAgCQkgICBn aW1wbGVfYnVpbGRfYXNzaWduIChjdHgtPnJlY2VpdmVyX2RlY2wsIHQpKTsKKyAgICAgIGlm ICghQUdHUkVHQVRFX1RZUEVfUCAoVFJFRV9UWVBFIChjdHgtPnNlbmRlcl9kZWNsKSkpCisJ Z2ltcGxpZnlfYXNzaWduIChjdHgtPnJlY2VpdmVyX2RlY2wsIHQsICZuZXdfYm9keSk7Cisg ICAgICBlbHNlCisJZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJm5ld19ib2R5LAorCQkJICAgICBn aW1wbGVfYnVpbGRfYXNzaWduIChjdHgtPnJlY2VpdmVyX2RlY2wsIHQpKTsKICAgICB9CiAg IGdpbXBsZV9zZXFfYWRkX3NlcSAoJm5ld19ib2R5LCBmcGxpc3QpOwogCg== --------------UOuxnCterHztpXZCQPAaUAIQ--