[Patch, fortran] PR126205 - A coarray allocated in a team is not being automatically deallocated
Paul Richard Thomas <[email protected]> Fri, 24 Jul 2026 16:18:57 +0100
| Newsgroups | gmane.comp.gcc.patches,gmane.comp.gcc.fortran |
|---|---|
| Message-ID | <CAGkQGi+HyT=7o09KuaDsAYc5KPx2JCcLtwAFTp6BrgtWwyqkmA@mail.gmail.com> |
--000000000000e926ad06575ce488 Content-Type: multipart/alternative; boundary="000000000000e926ab06575ce486" --000000000000e926ab06575ce486 Content-Type: text/plain; charset="UTF-8" Hello All, From John Reid's "Summary_of_Fortran_2018": 3.5 Coarrays allocated in teams ....snip.... In Fortran 2018, synchronization is now across the team, of course. Symmetric memory is maintained within teams by requiring that 1. any allocatable coarray that is allocated before entry to a change team construct remains allocated during the execution of the construct and 2. any allocatable coarray that becomes allocated within a change team construct and is still allocated when the construct is left is automatically deallocated, even if it has the save attribute. ....more snips.... Requirement 2 is not yet implemented in gfortran. The attachment does the job. Regression tested on FC44/x86_64 - OK for mainline and eventual backporting to 16-branch? Paul --000000000000e926ab06575ce486 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr">Hello All,<br>From John Reid's "Summary_of_Fortra= n_2018":<br><br>3.5 Coarrays allocated in teams<br><br>....snip....<br= ><br>In Fortran 2018, synchronization is now across the team, of course. Sy= mmetric memory is maintained within teams by requiring that<br><br>1. any a= llocatable coarray that is allocated before entry to a change team construc= t remains allocated during the execution of the construct and<br>2. any all= ocatable coarray that becomes allocated within a change team construct and = is still allocated when the construct is left is automatically deallocated,= even if it has the save attribute.<br><br>....more snips....<br><br>Requir= ement 2 is not yet implemented in gfortran. The attachment does the job.<di= v><br></div><div>Regression tested on FC44/x86_64 - OK for mainline and eve= ntual backporting to 16-branch?</div><div><br></div><div>Paul</div><div><br= ></div></div> --000000000000e926ab06575ce486-- --000000000000e926ad06575ce488 Content-Type: text/x-patch; charset="US-ASCII"; name="submit.patch" Content-Disposition: attachment; filename="submit.patch" Content-Transfer-Encoding: base64 Content-ID: <f_mrz3580c0> X-Attachment-Id: f_mrz3580c0 RnJvbSA0ZjFjNmI2ZmY3YTdiMGU2ZmU4ZWVhMzQ3NDRkYWI2YWUxMzIwNjJiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIFRob21hcyA8cGF1bHRAZ2NjLmdudS5vcmc+CkRhdGU6 IEZyaSwgMjQgSnVsIDIwMjYgMTU6MDU6NDYgKzAxMDAKU3ViamVjdDogW1BBVENIXSBGb3J0cmFu OiBBdXRvIGRlYWxsb2NhdGUgY29hcnJheXMsIGFsbG9jYXRlZCBpbiB0ZWFtIGJsb2NrcwogW1BS MTI2MjA1XQoKR2ZvcnRyYW4gd2FzIG5vdCBjb21wbGlhbnQgd2l0aCBGMjAxOCgxMS4xLjUuMiks IHdoaWNoIHJlcXVpcmVzIHRoYXQKY29hcnJheXMgdGhhdCBhcmUgYWxsb2NhdGVkIHdpdGhpbiBh IHRlYW0gYmxvY2sgYXJlIGRlYWxsb2NhdGVkIGltbWVkaWF0ZWx5CmJlZm9yZSBFTkQgVEVBTS4K ClRoaXMgdGhlIGZvdXJ0aCB2YXJpYW50IG9mIHRoZSBwYXRjaDsgdGhlIG1haW4gZGlmZmVyZW5j ZXMgYmVpbmcgd2hldGhlcgp0aGUgY29kZSBpcyBsb2NhdGVkIG9uIHJlc29sdmUuY2MsIHNwbGl0 IGJldHdlZW4gcmVzb2x2ZS5jYyBhbmQKdHJhbnMtc3RtdC5jYyBvciwgYXMgaGVyZSwgc3BsaXQg YmV0d2VlbiBwYXJzZS5jYywgbWF0Y2guY2MgYW5kIHN0LmNjLgpUaGUgbWFpbiBhdHRyYWN0aW9u IG9mIHRoZSBsYXR0ZXIgc2NoZW1lIGlzIHRoYXQgY29hcnJheS5jYyBhbmQKcmVzb2x2ZS5jYyBk byB0aGUgbWFpbiBqb2Igb2YgcHJlcGFyaW5nIHRoZSBjb2RlIGZvciB0cmFuc2xhdGlvbi4KClRo ZSB0ZWFtIGNvbnRleHQgaXMgdHJhY2tlZCB1c2luZyBhIHZlY3RvciBvZiB0ZWFtIG5hbWVzcGFj ZXMsIHdoaWNoIGlzCnB1c2hlZCBhdCBDSEFOR0UgVEVBTSBhbmQgcG9wcGVkIGF0IEVORCBURUFN LiBUaGUgYWxsb2NhdGUgZXhwcmVzc2lvbnMKYXJlIHN0YXNoZWQgaW4gYSB2ZWN0b3IgaGFzaF9t YXAsIGtleWVkIG9uIHRoZSBuYW1lc3BhY2UuIFRoZSBhbGxvY2F0ZQpleHByZXNzaW9ucyBhcmUg c3RvcmVkIHdoaWxlIHRoZSBBTExPQ0FURSBzdGF0bWVudHMgYXJlIGJlaW5nIG1hdGNoZWQuClRo ZXkgYXJlIHRoZW4gcmVjb3ZlcmVkIGJlZm9yZSBlbmQgaW4gcGFyc2VfY2hhbmdlX3RlYW0gYW5k IHNlbnQgb2ZmCmZvciBhdXRvbWF0aWMgZGVhbGxvY2F0aW9uIGluIHN0LmNjKGRlYWxsb2NhdGVf YWxsb2NhdGVkX2NvYXJyYXlzLgoKVGhlIHVzZSBvZiBzdC5jYyBmb3IgZnVuY3Rpb25zIGdlbmVy YXRpbmcgY2h1bmtzIG9mIGNvZGUgaXMgYSBwb2ludGVyCnRvIHNvbWV0aGluZyB0aGF0IEkgaGF2 ZSBiZWVuIGV5ZWluZyBmb3IgYSBsb25nIHRpbWUsIHdoaWNoIGlzIHRvCmV4dHJhY3QgYWxsIHN1 Y2ggZnVuY3Rpb25zIGZyb20gY2xhc3MuY2MgYW5kIHJlc29sdmUuY2Mgc28gdGhhdCB0aGV5CmNh biBiZSByZWZhY3RvcmVkIHRvIHVzZSBjb21tb24gY2h1bmtzLiBUaGlzLCBob3dldmVyLCBpcyBm b3IgYW5vdGhlcgp0aW1lIQoKMjAyNi0wNy0yNCAgUGF1bCBUaG9tYXMgIDxwYXVsdEBnY2MuZ251 Lm9yZz4KCmdjYy9mb3J0cmFuCglQUiBmb3J0cmFuLzEyNjIwNQoJKiBnZm9ydHJhbi5oOiBBZGQg cHJvdG90eXBlIGZvciBkZWFsbG9jYXRlX2FsbG9jYXRlZF9jb2FycmF5cy4KCWhhc2hfbWFwIHRl YW1fYWxsb2NhdGVkX2NvYXJyYXlzLCB2ZWN0b3IgdGVhbV9jb250ZXh0X3N0YWNrIGFuZAoJcHJv dG90eXBlIGZvciBnZXRfY3VycmVudF90ZWFtX2NvbnRleHQuCgkqIG1hdGNoLmNjIChnZmNfbWF0 Y2hfYWxsb2NhdGUpOiBDYXB0dXJlIGFsbG9jYXRlIGV4cHJlc3Npb25zCglvZiBhbGxvY2F0YWJs ZSBjb2FycmF5cyBhbmQgc3Rhc2ggaW4gdGVhbV9hbGxvY2F0ZWRfY29hcnJheXMuCgkqIHBhcnNl LmNjIChwYXJzZV9jaGFuZ2VfdGVhbSk6IFB1c2ggdGVhbSBjb250ZXh0LiBXaGVuIGVuZCBpcwoJ c2VlbiwgY3JlYXRlIHRoZSBjb2RlIHRvIGRlYWxsb2NhdGUgYWxsb2NhdGVkIGNvYXJyYXlzIGlu IHRoaXMKCWNvbnRleHQsIHVzaW5nIGRlYWxsb2NhdGVfYWxsb2NhdGVkX2NvYXJyYXlzLgoJKiBz dC5jYyAoZ2V0X2d1YXJkZWRfZGVhbGxvYyk6IEdlbmVyYXRlIGNvZGUgdG8gcHJvZHVjZQoJSUYg KEFMTE9DQVRFRCAoZXhwcikpIERFQUxMT0NBVEUgKGV4cHIpLgoJKGRlYWxsb2NhdGVfYWxsb2Nh dGVkX2NvYXJyYXlzKTogTW9kaWZ5IHRoZSBmaW5hbCBhcnJheSByZWYgb2YKCXRoZSBhbGxvY2F0 ZSBleHByZXNzaW9ucyBhbmQgY2FsbCBnZXRfZ3VhcmRlZF9kZWFsbG9jLgoKZ2NjL3Rlc3RzdWl0 ZS8KCVBSIGZvcnRyYW4vMTI2MjA1CgkqIGNvYXJyYXkvdGVhbV9hbGxvY2F0ZWRfY29hcnJheXMu ZjkwOiBOZXcgdGVzdC4KLS0tCiBnY2MvZm9ydHJhbi9nZm9ydHJhbi5oICAgICAgICAgICAgICAg ICAgICAgICAgfCAgIDUgKy0KIGdjYy9mb3J0cmFuL21hdGNoLmNjICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAxNyArKysKIGdjYy9mb3J0cmFuL3BhcnNlLmNjICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAyNiArKysrKwogZ2NjL2ZvcnRyYW4vc3QuY2MgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgIDk3ICsrKysrKysrKysrKysrKysKIC4uLi9jb2FycmF5L3RlYW1fYWxsb2Nh dGVkX2NvYXJyYXlzLmY5MCAgICAgICB8IDEwNCArKysrKysrKysrKysrKysrKysKIDUgZmlsZXMg Y2hhbmdlZCwgMjQ4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEw MDY0NCBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2NvYXJyYXkvdGVhbV9hbGxvY2F0ZWRfY29h cnJheXMuZjkwCgpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vZ2ZvcnRyYW4uaCBiL2djYy9mb3J0 cmFuL2dmb3J0cmFuLmgKaW5kZXggNDhkZGQ5YTcyZDUuLmFmYmNjYjRlNDc3IDEwMDY0NAotLS0g YS9nY2MvZm9ydHJhbi9nZm9ydHJhbi5oCisrKyBiL2djYy9mb3J0cmFuL2dmb3J0cmFuLmgKQEAg LTQxNzUsMTMgKzQxNzUsMTMgQEAgYm9vbCBoYXNfcGFyYW1ldGVyaXplZF9jb21wcyAoZ2ZjX3N5 bWJvbCAqKTsKIAogLyogc3QuY2MgKi8KIGV4dGVybiBnZmNfY29kZSBuZXdfc3Q7Ci0KIHZvaWQg Z2ZjX2NsZWFyX25ld19zdCAodm9pZCk7CiBnZmNfY29kZSAqZ2ZjX2dldF9jb2RlIChnZmNfZXhl Y19vcCk7CiBnZmNfY29kZSAqZ2ZjX2FwcGVuZF9jb2RlIChnZmNfY29kZSAqLCBnZmNfY29kZSAq KTsKIHZvaWQgZ2ZjX2ZyZWVfc3RhdGVtZW50IChnZmNfY29kZSAqKTsKIHZvaWQgZ2ZjX2ZyZWVf c3RhdGVtZW50cyAoZ2ZjX2NvZGUgKik7CiB2b2lkIGdmY19mcmVlX2Fzc29jaWF0aW9uX2xpc3Qg KGdmY19hc3NvY2lhdGlvbl9saXN0ICopOwordm9pZCBkZWFsbG9jYXRlX2FsbG9jYXRlZF9jb2Fy cmF5cyAodmVjPGdmY19leHByICo+ICopOwogCiAvKiByZXNvbHZlLmNjICovCiB2b2lkIGdmY19y ZXNvbHZlX3N5bWJvbCAoZ2ZjX3N5bWJvbCAqKTsKQEAgLTQzNTgsNiArNDM1OCw5IEBAIHZvaWQg Z2ZjX2dsb2JhbF91c2VkIChnZmNfZ3N5bWJvbCAqLCBsb2N1cyAqKTsKIGdmY19uYW1lc3BhY2Uq IGdmY19idWlsZF9ibG9ja19ucyAoZ2ZjX25hbWVzcGFjZSAqKTsKIGdmY19zdGF0ZW1lbnQgbWF0 Y2hfb21wX2RpcmVjdGl2ZSAodm9pZCk7CiBib29sIGlzX29tcF9kZWNsYXJhdGl2ZV9zdG10IChn ZmNfc3RhdGVtZW50KTsKK2V4dGVybiBoYXNoX21hcDxnZmNfbmFtZXNwYWNlICosIHZlYzxnZmNf ZXhwciAqPj4gdGVhbV9hbGxvY2F0ZWRfY29hcnJheXM7CitleHRlcm4gdmVjPGdmY19uYW1lc3Bh Y2UgKj4gdGVhbV9jb250ZXh0X3N0YWNrOworZ2ZjX25hbWVzcGFjZSAqZ2V0X2N1cnJlbnRfdGVh bV9jb250ZXh0ICh2b2lkKTsKIAogLyogZGVwZW5kZW5jeS5jYyAqLwogaW50IGdmY19kZXBfY29t cGFyZV9mdW5jdGlvbnMgKGdmY19leHByICosIGdmY19leHByICosIGJvb2wpOwpkaWZmIC0tZ2l0 IGEvZ2NjL2ZvcnRyYW4vbWF0Y2guY2MgYi9nY2MvZm9ydHJhbi9tYXRjaC5jYwppbmRleCBiMDlk MzQ4ZTZiNS4uZDYxNzU3MDQ2ZDIgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL21hdGNoLmNjCisr KyBiL2djYy9mb3J0cmFuL21hdGNoLmNjCkBAIC01NDQzLDYgKzU0NDMsMjMgQEAgZ2ZjX21hdGNo X2FsbG9jYXRlICh2b2lkKQogCSAgZ290byBjbGVhbnVwOwogCX0KIAorICAgICAgLyogRjIwMTgo MTEuMS41LjIpOiBUcmFjayBjb2FycmF5cyBhbGxvY2F0ZWQgaW4gdGVhbSBibG9ja3MuICAqLwor ICAgICAgZ2ZjX25hbWVzcGFjZSAqdGVhbV9ucyA9IGdldF9jdXJyZW50X3RlYW1fY29udGV4dCAo KTsKKyAgICAgIGJvb2wgY29kaW0gPSB0YWlsLT5leHByLT5zeW10cmVlLT5uLnN5bS0+YXR0ci5j b2RpbWVuc2lvbgorCQkgICB8fCAodGFpbC0+ZXhwci0+c3ltdHJlZS0+bi5zeW0tPmFzCisJCSAg ICAgICAmJiB0YWlsLT5leHByLT5zeW10cmVlLT5uLnN5bS0+YXMtPmNvcmFuayk7CisgICAgICBm b3IgKGdmY19yZWYgKnIgPSB0YWlsLT5leHByLT5yZWY7IHI7IHIgPSByLT5uZXh0KQorCWlmIChy LT50eXBlID09IFJFRl9DT01QT05FTlQgJiYgci0+dS5jLmNvbXBvbmVudCkKKwkgIGNvZGltID0g ci0+dS5jLmNvbXBvbmVudC0+YXR0ci5jb2RpbWVuc2lvbgorCQkgIHx8IChyLT51LmMuY29tcG9u ZW50LT5hcyAmJiByLT51LmMuY29tcG9uZW50LT5hcy0+Y29yYW5rKTsKKworICAgICAgaWYgKGZs YWdfY29hcnJheSA9PSBHRkNfRkNPQVJSQVlfTElCICYmIHRlYW1fbnMgJiYgY29kaW0pCisJewor CSAgZ2ZjX2V4cHIgKmUgPSBnZmNfY29weV9leHByICh0YWlsLT5leHByKTsKKwkgIHZlYzxnZmNf ZXhwciAqPiAmYWxsb2NhdGVkID0gdGVhbV9hbGxvY2F0ZWRfY29hcnJheXMuZ2V0X29yX2luc2Vy dCAodGVhbV9ucyk7CisJICBhbGxvY2F0ZWQuc2FmZV9wdXNoIChlKTsKKwl9CisKICAgICAgIGlm IChnZmNfbWF0Y2hfY2hhciAoJywnKSAhPSBNQVRDSF9ZRVMpCiAJYnJlYWs7CiAKZGlmZiAtLWdp dCBhL2djYy9mb3J0cmFuL3BhcnNlLmNjIGIvZ2NjL2ZvcnRyYW4vcGFyc2UuY2MKaW5kZXggN2I2 Y2Y1MjVhODAuLmViZDk4MDY5OGU5IDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi9wYXJzZS5jYwor KysgYi9nY2MvZm9ydHJhbi9wYXJzZS5jYwpAQCAtNTU2NywxMiArNTU2NywyOCBAQCBsb29wOgog ICBwb3Bfc3RhdGUgKCk7CiB9CiAKKworLyogRjIwMTgoMTEuMS41LjIpOiBUcmFjayBjb2FycmF5 cyBhbGxvY2F0ZWQgd2l0aGluIENIQU5HRSBURUFNIGJsb2Nrcy4KKyAgIE1hcCBmcm9tIHRlYW0g bmFtZXNwYWNlIHRvIHZlY3RvciBvZiBhbGxvY2F0ZWQgY29hcnJheSBzeW1ib2xzLiAgKi8KK2hh c2hfbWFwPGdmY19uYW1lc3BhY2UgKiwgdmVjPGdmY19leHByICo+PiB0ZWFtX2FsbG9jYXRlZF9j b2FycmF5czsKKworLyogU3RhY2sgdG8gdHJhY2sgY3VycmVudCBDSEFOR0UgVEVBTSBjb250ZXh0 LiAgKi8KK3ZlYzxnZmNfbmFtZXNwYWNlICo+IHRlYW1fY29udGV4dF9zdGFjazsKKworZ2ZjX25h bWVzcGFjZSAqCitnZXRfY3VycmVudF90ZWFtX2NvbnRleHQgKHZvaWQpCit7CisgIHJldHVybiB0 ZWFtX2NvbnRleHRfc3RhY2suaXNfZW1wdHkgKCkgPyBOVUxMIDogdGVhbV9jb250ZXh0X3N0YWNr Lmxhc3QgKCk7Cit9CisKKwogc3RhdGljIHZvaWQKIHBhcnNlX2NoYW5nZV90ZWFtICh2b2lkKQog ewogICBnZmNfbmFtZXNwYWNlICpteV9uczsKICAgZ2ZjX3N0YXRlX2RhdGEgczsKICAgZ2ZjX3N0 YXRlbWVudCBzdDsKKyAgdmVjPGdmY19leHByICo+ICp0ZWFtX2FsbG9jczsKIAogICBnZmNfbm90 aWZ5X3N0ZCAoR0ZDX1NURF9GMjAxOCwgIkNIQU5HRSBURUFNIGNvbnN0cnVjdCBhdCAlQyIpOwog CkBAIC01NTkwLDYgKzU2MDYsOSBAQCBwYXJzZV9jaGFuZ2VfdGVhbSAodm9pZCkKICAgYWNjZXB0 X3N0YXRlbWVudCAoU1RfQ0hBTkdFX1RFQU0pOwogICBwdXNoX3N0YXRlICgmcywgQ09NUF9DSEFO R0VfVEVBTSwgbXlfbnMtPnByb2NfbmFtZSk7CiAKKyAgLyogUHVzaCB0ZWFtIGNvbnRleHQgZm9y IHRyYWNraW5nIGNvYXJyYXlzIGFsbG9jYXRlZCBpbiBhIHRlYW0gYmxvY2suICAqLworICB0ZWFt X2NvbnRleHRfc3RhY2suc2FmZV9wdXNoIChnZmNfY3VycmVudF9ucyk7CisKIGxvb3A6CiAgIHN0 ID0gcGFyc2VfZXhlY3V0YWJsZSAoU1RfTk9ORSk7CiAgIHN3aXRjaCAoc3QpCkBAIC01NjAwLDYg KzU2MTksMTMgQEAgbG9vcDoKICAgICBjYXNlX2VuZDoKICAgICAgIGFjY2VwdF9zdGF0ZW1lbnQg KHN0KTsKICAgICAgIG15X25zLT5jb2RlID0gZ2ZjX3N0YXRlX3N0YWNrLT5oZWFkOworICAgICAg LyogRjIwMTgoMTEuMS41LjIpOiBEZWFsbG9jYXRlIGNvYXJyYXkgZXhwcmVzc2lvbnMgYWxsb2Nh dGVkIGluIHRoaXMKKwkgdGVhbSBibG9jaywgICovCisgICAgICB0ZWFtX2FsbG9jcyA9IHRlYW1f YWxsb2NhdGVkX2NvYXJyYXlzLmdldCAoZ2ZjX2N1cnJlbnRfbnMpOworICAgICAgaWYgKHRlYW1f YWxsb2NzKQorCWRlYWxsb2NhdGVfYWxsb2NhdGVkX2NvYXJyYXlzICh0ZWFtX2FsbG9jcyk7Cisg ICAgICAvKiBQb3AgdGVhbSBjb250ZXh0LiAgKi8KKyAgICAgIHRlYW1fY29udGV4dF9zdGFjay5w b3AgKCk7CiAgICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9nY2MvZm9y dHJhbi9zdC5jYyBiL2djYy9mb3J0cmFuL3N0LmNjCmluZGV4IDM5NzExZTMyNjIwLi4yMTJkODVh YWRiMCAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vc3QuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vc3Qu Y2MKQEAgLTM2NiwzICszNjYsMTAwIEBAIGdmY19mcmVlX2Fzc29jaWF0aW9uX2xpc3QgKGdmY19h c3NvY2lhdGlvbl9saXN0KiBhc3NvYykKICAgZ2ZjX2ZyZWVfYXNzb2NpYXRpb25fbGlzdCAoYXNz b2MtPm5leHQpOwogICBmcmVlIChhc3NvYyk7CiB9CisKKworLyogRnVuY3Rpb24gdG8gZ2VuZXJh dGUgSUYgKEFMTE9DQVRFRChleHByKSkgREVBTExPQ0FURShleHByKSAgKi8KKworc3RhdGljIGdm Y19jb2RlICoKK2dldF9ndWFyZGVkX2RlYWxsb2MgKGdmY19uYW1lc3BhY2UgKm5zLCBnZmNfZXhw ciAqZXhwcikKK3sKKyAgZ2ZjX2NvZGUgKmRlYWxsb2MgPSBnZmNfZ2V0X2NvZGUgKEVYRUNfSUYp OworICBkZWFsbG9jLT5ibG9jayA9IGdmY19nZXRfY29kZSAoRVhFQ19JRik7CisjZGVmaW5lIEFM TE9DQVRFRCBkZWFsbG9jLT5ibG9jay0+ZXhwcjEKKyAgQUxMT0NBVEVEID0gZ2ZjX2dldF9leHBy ICgpOworICBBTExPQ0FURUQtPmV4cHJfdHlwZSA9IEVYUFJfRlVOQ1RJT047CisgIEFMTE9DQVRF RC0+d2hlcmUgPSBnZmNfY3VycmVudF9sb2N1czsKKyAgZ2ZjX2ZpbmRfc3ltX3RyZWUgKCJhbGxv Y2F0ZWQiLCBucywgMSwgJkFMTE9DQVRFRC0+c3ltdHJlZSk7CisgIGlmICghQUxMT0NBVEVELT5z eW10cmVlKQorICAgIHsKKyAgICAgIGdmY19nZXRfc3ltX3RyZWUgKCJhbGxvY2F0ZWQiLCBucywg JkFMTE9DQVRFRC0+c3ltdHJlZSwgZmFsc2UpOworICAgICAgZ2ZjX2NvbW1pdF9zeW1ib2wgKEFM TE9DQVRFRC0+c3ltdHJlZS0+bi5zeW0pOworICAgIH0KKyAgQUxMT0NBVEVELT5zeW10cmVlLT5u LnN5bS0+YXR0ci5mbGF2b3IgPSBGTF9QUk9DRURVUkU7CisgIEFMTE9DQVRFRC0+c3ltdHJlZS0+ bi5zeW0tPmF0dHIuaW50cmluc2ljID0gMTsKKyAgQUxMT0NBVEVELT5zeW10cmVlLT5uLnN5bS0+ cmVzdWx0ID0gQUxMT0NBVEVELT5zeW10cmVlLT5uLnN5bTsKKyAgQUxMT0NBVEVELT50cy50eXBl ID0gQlRfTE9HSUNBTDsKKyAgQUxMT0NBVEVELT50cy5raW5kID0gZ2ZjX2RlZmF1bHRfbG9naWNh bF9raW5kOworICBBTExPQ0FURUQtPnZhbHVlLmZ1bmN0aW9uLmlzeW0KKwkJCT0gZ2ZjX2ludHJp bnNpY19mdW5jdGlvbl9ieV9pZCAoR0ZDX0lTWU1fQUxMT0NBVEVEKTsKKyAgQUxMT0NBVEVELT52 YWx1ZS5mdW5jdGlvbi5hY3R1YWwgPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0ICgpOworICBBTExP Q0FURUQtPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbC0+ZXhwciA9IGdmY19jb3B5X2V4cHIgKGV4cHIp OworI3VuZGVmIEFMTE9DQVRFRAorICBkZWFsbG9jLT5ibG9jay0+bmV4dCA9IGdmY19nZXRfY29k ZSAoRVhFQ19ERUFMTE9DQVRFKTsKKyAgZGVhbGxvYy0+YmxvY2stPm5leHQtPmV4dC5hbGxvYy5s aXN0ID0gZ2ZjX2dldF9hbGxvYyAoKTsKKyAgZGVhbGxvYy0+YmxvY2stPm5leHQtPmV4dC5hbGxv Yy5saXN0LT5leHByID0gZ2ZjX2NvcHlfZXhwciAoZXhwcik7CisgIHJldHVybiBkZWFsbG9jOwor fQorCisKKy8qIEYyMDE4KDExLjEuNS4yKTogSW5zZXJ0IGNvZGUgdG8gZGVhbGxvY2F0ZSBjb2Fy cmF5cywgYWxsb2NhdGVkIHdpdGhpbiBhIHRlYW0KKyAgIGJsb2NrLiBUaGlzIHVzZXMgdGhlIHBy ZXZpb3VzIGZ1bmN0aW9uIHRvIGVmZmVjdCBhIGd1YXJkZWQgZGVhbGxvY2F0aW9uIG9mCisgICBh bGxvY2F0ZWQgY29hcnJheSBleHByZXNzaW9ucy4gVGhlc2UgYXJlIGdhdGhlcmVkIGluIGdmY19t YXRjaF9hbGxvY2F0ZSBhbmQKKyAgIHN0YXNoZWQgaW4gdGVhbV9hbGxvY3MuICAqLworCit2b2lk CitkZWFsbG9jYXRlX2FsbG9jYXRlZF9jb2FycmF5cyAodmVjPGdmY19leHByICo+ICp0ZWFtX2Fs bG9jcykKK3sKKyAgZ2ZjX2NvZGUgKmRlYWxsb2MsICpsYXN0X3N0bXQ7CisgIGdmY19yZWYgKnJl ZiwgKmFyZWYgPSBOVUxMOworICBpbnQgaTsKKworICBmb3IgKGdmY19leHByICplIDogKnRlYW1f YWxsb2NzKQorICAgIHsKKyAgICAgIGlmICghZSkKKwljb250aW51ZTsKKworICAgICAgLyogR2V0 IHRoZSBsYXN0IGFycmF5X3JlZiByaWdodC4gICovCisgICAgICBmb3IgKHJlZiA9IGUtPnJlZjsg cmVmOyByZWYgPSByZWYtPm5leHQpCisJaWYgKHJlZi0+dHlwZSA9PSBSRUZfQVJSQVkpCisJICBh cmVmID0gcmVmOworCisgICAgICBpZiAoYXJlZi0+dS5hci5hcy0+cmFuaykKKwl7CisJICBhcmVm LT51LmFyLnR5cGUgPSBBUl9GVUxMOworCSAgYXJlZi0+dS5hci5kaW1lbiA9IGFyZWYtPnUuYXIu YXMtPnJhbms7CisJICBmb3IgKGkgPSAwOyBpIDwgYXJlZi0+dS5hci5kaW1lbjsgaSsrKQorCSAg ICB7CisJICAgICAgYXJlZi0+dS5hci5kaW1lbl90eXBlW2ldID0gRElNRU5fUkFOR0U7CisKKwkg ICAgICBpZiAoYXJlZi0+dS5hci5zdGFydFtpXSkgZ2ZjX2ZyZWVfZXhwciAoYXJlZi0+dS5hci5z dGFydFtpXSk7CisJICAgICAgaWYgKGFyZWYtPnUuYXIuZW5kW2ldKSBnZmNfZnJlZV9leHByIChh cmVmLT51LmFyLmVuZFtpXSk7CisJICAgICAgaWYgKGFyZWYtPnUuYXIuc3RyaWRlW2ldKSBnZmNf ZnJlZV9leHByIChhcmVmLT51LmFyLnN0cmlkZVtpXSk7CisJICAgICAgYXJlZi0+dS5hci5zdGFy dFtpXSA9IGFyZWYtPnUuYXIuZW5kW2ldID0gYXJlZi0+dS5hci5zdHJpZGVbaV0gPSBOVUxMOwor CSAgICB9CisJfQorCisgICAgICBmb3IgKGkgPSBhcmVmLT51LmFyLmFzLT5yYW5rOworCSAgIGkg PCBhcmVmLT51LmFyLmFzLT5yYW5rICsgYXJlZi0+dS5hci5hcy0+Y29yYW5rOyBpKyspCisJIGFy ZWYtPnUuYXIuZGltZW5fdHlwZVtpXSA9IERJTUVOX1RISVNfSU1BR0U7CisKKyAgICAgIC8qIElu c2VydCB0aGUgZGVhbGxvY2F0aW9uIGNvZGUgYmVmb3JlIHRoZSBFTkQgVEVBTSBzdGF0ZW1lbnQu ICAqLworICAgICAgbGFzdF9zdG10ID0gZ2ZjX2N1cnJlbnRfbnMtPmNvZGU7CisgICAgICB3aGls ZSAobGFzdF9zdG10KQorCXsKKwkgIGxhc3Rfc3RtdCA9IGxhc3Rfc3RtdC0+bmV4dDsKKwkgIGlm IChsYXN0X3N0bXQtPm5leHQtPm9wID09IEVYRUNfRU5EX1RFQU0gfHwgIWxhc3Rfc3RtdC0+bmV4 dCkKKwkgICAgeworCSAgICAgIGRlYWxsb2MgPSBnZXRfZ3VhcmRlZF9kZWFsbG9jIChnZmNfY3Vy cmVudF9ucywgZSk7CisJICAgICAgaWYgKGRlYWxsb2MpCisJCXsKKwkJICBkZWFsbG9jLT5uZXh0 ID0gbGFzdF9zdG10LT5uZXh0OworCQkgIGxhc3Rfc3RtdC0+bmV4dCA9IGRlYWxsb2M7CisJCSAg YnJlYWs7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIGdmY19mcmVlX2V4cHIgKGUpOworICAgICAg ZSA9IE5VTEw7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5k Zy9jb2FycmF5L3RlYW1fYWxsb2NhdGVkX2NvYXJyYXlzLmY5MCBiL2djYy90ZXN0c3VpdGUvZ2Zv cnRyYW4uZGcvY29hcnJheS90ZWFtX2FsbG9jYXRlZF9jb2FycmF5cy5mOTAKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRlY2VlN2JiZmY0Ci0tLSAvZGV2L251bGwKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9jb2FycmF5L3RlYW1fYWxsb2NhdGVkX2NvYXJy YXlzLmY5MApAQCAtMCwwICsxLDEwNCBAQAorISB7IGRnLWRvIHJ1biB9CishCishIEYyMDE4KDEx LjEuNS4yKTogVGVzdCBhdXRvLWRlYWxsb2NhdGlvbiBvZiBhbGxvY2F0YWJsZSBjb2FycmF5cyB0 aGF0IGFyZQorISBhbGxvY2F0ZWQgd2l0aGluIGEgdGVhbSBibG9jay4KKyEKK3Byb2dyYW0gdGVz dF9uZXN0ZWRfdGVhbXMKKyAgdXNlIGlzb19mb3J0cmFuX2Vudiwgb25seTogdGVhbV90eXBlCisg IGltcGxpY2l0IG5vbmUKKyAgdHlwZSh0ZWFtX3R5cGUpIDo6IHRlYW0xLCB0ZWFtMgorICBpbnRl Z2VyLCBhbGxvY2F0YWJsZSA6OiBhWzpdCisgIGludGVnZXIsIGFsbG9jYXRhYmxlIDo6IGJbOl0K KyAgaW50ZWdlciwgYWxsb2NhdGFibGUgOjogb3V0ZXJbOl0KKyAgaW50ZWdlciwgYWxsb2NhdGFi bGUgOjogaW5uZXIoOilbOl0gISBSYW5rIGFuZCBjb3JhbmsKKyAgbG9naWNhbCA6OiBpbWFnZTEK KyAgaW50ZWdlciA6OiBtZQorCisgIHR5cGUgOjogbXl0eXBlCisgICAgaW50ZWdlciwgYWxsb2Nh dGFibGUgOjogaVs6XQorICBlbmQgdHlwZQorICB0eXBlKG15dHlwZSkgOjogZHRfYSwgZHRfYiwg ZHRfb3V0ZXIsIGR0X2lubmVyCisKKyAgaW1hZ2UxID0gdGhpc19pbWFnZSAoKSA9PSAxCisgIG1l ID0gdGhpc19pbWFnZSAoKQorCisgICEgVGVzdCAxOiBTaW1wbGUgYWxsb2NhdGlvbiBpbiBzaW5n bGUgdGVhbSBibG9jaworICBmb3JtIHRlYW0oMSwgdGVhbTEpCisgIGNoYW5nZSB0ZWFtKHRlYW0x KQorICAgIGFsbG9jYXRlKGFbKl0pCisgICAgYSA9IDEKKyAgICBhbGxvY2F0ZShkdF9hJWlbKl0s IHNvdXJjZSA9IG1lKQorICBlbmQgdGVhbQorICBpZiAoaW1hZ2UxIC5hbmQuIGFsbG9jYXRlZChh KSkgc3RvcCAxCisgIGlmIChpbWFnZTEgLmFuZC4gYWxsb2NhdGVkKGR0X2ElaSkpIHN0b3AgMgor CisgICEgVGVzdCAyOiBNdWx0aXBsZSBhbGxvY2F0aW9ucyBpbiBzaW5nbGUgdGVhbSBibG9jawor ICBmb3JtIHRlYW0oMSwgdGVhbTEpCisgIGNoYW5nZSB0ZWFtKHRlYW0xKQorICAgIGFsbG9jYXRl KGFbKl0sIGJbKl0pCisgICAgYSA9IDEKKyAgICBiID0gMgorICAgIGFsbG9jYXRlKGR0X2ElaVsq XSwgZHRfYiVpWypdLCBzb3VyY2UgPSBtZSkKKyAgZW5kIHRlYW0KKyAgaWYgKGltYWdlMSAuYW5k LiBhbGxvY2F0ZWQoYSkpIHN0b3AgMworICBpZiAoaW1hZ2UxIC5hbmQuIGFsbG9jYXRlZChiKSkg c3RvcCA0CisgIGlmIChpbWFnZTEgLmFuZC4gYWxsb2NhdGVkKGR0X2ElaSkpIHN0b3AgNQorICBp ZiAoaW1hZ2UxIC5hbmQuIGFsbG9jYXRlZChkdF9iJWkpKSBzdG9wIDYKKworICAhIFRlc3QgMzog TmVzdGVkIHRlYW0gYmxvY2tzIC0gYWxsb2NhdGlvbiBpbiBvdXRlciB0ZWFtIG9ubHkKKyAgZm9y bSB0ZWFtKDEsIHRlYW0xKQorICBjaGFuZ2UgdGVhbSh0ZWFtMSkKKyAgICBhbGxvY2F0ZShvdXRl clsqXSkKKyAgICBhbGxvY2F0ZShkdF9vdXRlciVpWypdLCBzb3VyY2UgPSBtZSkKKyAgICBvdXRl ciA9IDEwCisKKyAgICAhIE5lc3RlZCB0ZWFtIHdpdGggbm8gYWxsb2NhdGlvbnMKKyAgICBmb3Jt IHRlYW0oMSwgdGVhbTIpCisgICAgY2hhbmdlIHRlYW0odGVhbTIpCisgICAgZW5kIHRlYW0KKwor ICAgICEgTWFrZSBzdXJlIHRoYXQgYXV0by1kZWFsbG9jYXRpb24gb2NjdXJzIGluIHJpZ2h0IGNv bnRleHQKKyAgICBpZiAoaW1hZ2UxIC5hbmQuIC5ub3QuYWxsb2NhdGVkKG91dGVyKSkgc3RvcCA3 CisgICAgaWYgKGltYWdlMSAuYW5kLiAubm90LmFsbG9jYXRlZChkdF9vdXRlciVpKSkgc3RvcCA4 CisKKyAgZW5kIHRlYW0KKyAgaWYgKGltYWdlMSAuYW5kLiBhbGxvY2F0ZWQob3V0ZXIpKSBzdG9w IDkKKyAgaWYgKGltYWdlMSAuYW5kLiBhbGxvY2F0ZWQoZHRfb3V0ZXIlaSkpIHN0b3AgMTAKKwor ICAhIFRlc3QgNDogTmVzdGVkIHRlYW0gYmxvY2tzIC0gYWxsb2NhdGlvbiBpbiBpbm5lciB0ZWFt IG9ubHkKKyAgZm9ybSB0ZWFtKDEsIHRlYW0xKQorICBjaGFuZ2UgdGVhbSh0ZWFtMSkKKworICAg IGZvcm0gdGVhbSgxLCB0ZWFtMikKKyAgICBjaGFuZ2UgdGVhbSh0ZWFtMikKKyAgICAgIGFsbG9j YXRlKGlubmVyKDQpWypdKQorICAgICAgaW5uZXIgPSAyMAorICAgICAgYWxsb2NhdGUoZHRfaW5u ZXIlaVsqXSkKKyAgICBlbmQgdGVhbQorCisgICAgaWYgKGltYWdlMSAuYW5kLiBhbGxvY2F0ZWQo aW5uZXIpKSBzdG9wIDExCisgICAgaWYgKGltYWdlMSAuYW5kLiBhbGxvY2F0ZWQoZHRfaW5uZXIl aSkpIHN0b3AgMTIKKyAgZW5kIHRlYW0KKworICAhIFRlc3QgNTogTmVzdGVkIHRlYW0gYmxvY2tz IC0gYWxsb2NhdGlvbnMgaW4gYm90aCBsZXZlbHMKKyAgZm9ybSB0ZWFtKDEsIHRlYW0xKQorICBj aGFuZ2UgdGVhbSh0ZWFtMSkKKyAgICBhbGxvY2F0ZShvdXRlclsqXSkKKyAgICBvdXRlciA9IDMw CisgICAgYWxsb2NhdGUoZHRfb3V0ZXIlaVsqXSwgc291cmNlID0gbWUpCisKKyAgICBmb3JtIHRl YW0oMSwgdGVhbTIpCisgICAgY2hhbmdlIHRlYW0odGVhbTIpCisgICAgICBhbGxvY2F0ZShpbm5l cigyKVsqXSkKKyAgICAgIGlubmVyID0gNDAKKyAgICAgIGFsbG9jYXRlKGR0X2lubmVyJWlbKl0s IHNvdXJjZSA9IG1lKQorICAgIGVuZCB0ZWFtCisKKyAgICBpZiAoaW1hZ2UxIC5hbmQuIGFsbG9j YXRlZChpbm5lcikpIHN0b3AgMTMKKyAgICBpZiAoaW1hZ2UxIC5hbmQuIGFsbG9jYXRlZChkdF9p bm5lciVpKSkgc3RvcCAxNAorCisgIGVuZCB0ZWFtCisgIGlmIChpbWFnZTEgLmFuZC4gYWxsb2Nh dGVkKG91dGVyKSkgc3RvcCAxNQorICBpZiAoaW1hZ2UxIC5hbmQuIGFsbG9jYXRlZChkdF9vdXRl ciVpKSkgc3RvcCAxNgorCitlbmQgcHJvZ3JhbSB0ZXN0X25lc3RlZF90ZWFtcwotLSAKMi41NS4w Cgo= --000000000000e926ad06575ce488--