From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.smtpout.orange.fr (smtp08.smtpout.orange.fr [80.12.242.130]) by sourceware.org (Postfix) with ESMTPS id 4E4AD3856242 for ; Fri, 22 Apr 2022 10:53:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4E4AD3856242 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=orange.fr Authentication-Results: sourceware.org; spf=none smtp.mailfrom=orange.fr Received: from [192.168.1.17] ([86.253.179.215]) by smtp.orange.fr with ESMTPA id hqufnkLMdk9EZhqufn2DSU; Fri, 22 Apr 2022 12:53:22 +0200 X-ME-Helo: [192.168.1.17] X-ME-Auth: MDU4MTIxYWM4YWI0ZGE4ZTUwZWZmNTExZmI2ZWZlMThkM2ZhYiE5OWRkOGM= X-ME-Date: Fri, 22 Apr 2022 12:53:22 +0200 X-ME-IP: 86.253.179.215 Content-Type: multipart/mixed; boundary="------------tfe7nNqS8rRlPT5onpqv2pYj" Message-ID: Date: Fri, 22 Apr 2022 12:53:21 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.8.0 From: Mikael Morin Subject: [PATCH v2] fortran: Detect duplicate unlimited polymorphic types [PR103662] To: gfortran , gcc-patches References: <8541b594-57c9-f6aa-7164-3918abe67a8f@orange.fr> Content-Language: en-US In-Reply-To: <8541b594-57c9-f6aa-7164-3918abe67a8f@orange.fr> X-Spam-Status: No, score=-9.3 required=5.0 tests=BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: fortran@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Fortran mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 22 Apr 2022 10:53:27 -0000 This is a multi-part message in MIME format. --------------tfe7nNqS8rRlPT5onpqv2pYj Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Le 21/04/2022 à 23:14, Mikael Morin a écrit : > Hello, > > this is a fix for PR103662, a TBAA issue with unlimited polymorphic types. > > I attached a draft patch to the PR which was accumulating all unlimited > polymorphic symbols to a single namespace, avoiding duplicate symbols > and thus eliminating the problem. > > After reviewing the code more in detail, I was afraid that some symbols > could still end up in the local namespace, and that the problem would > remain for them after all. > > Despite not being able to generate a testcase where it happened, I > decided to produce a patch based on Jakub’s analysis in the PR audit > trail, as that way supports duplicates by design. > > On top of Jakub’s patch, there are a couple more types registrations > just in case (they handle duplicates so that’s fine), and the type > comparison fix that he was too fortran-uncomfortable to do. > > The testcase had to be fixed as we found out in the PR audit trail. > > Regression tested on x86_64-pc-linux-gnu. OK for master? > > Mikael I have read Jakub’s analysis again, and it says the type registration is useless for unlimited polymorphic fake symbols, as they are all translated as ptr_type_node. So it can be dropped, which brings this v2 patch closer to Jakub’s original. Regression tested again. OK? --------------tfe7nNqS8rRlPT5onpqv2pYj Content-Type: text/x-patch; charset=UTF-8; name="0001-fortran-Detect-duplicate-unlimited-polymorphic-types.patch" Content-Disposition: attachment; filename*0="0001-fortran-Detect-duplicate-unlimited-polymorphic-types.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBlNTNlY2M5NzllYzJhNzk4NjI2ZWI5NGM2MGQxOGIwMTVkNmY1MmU1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNaWthZWwgTW9yaW4gPG1pa2FlbEBnY2MuZ251Lm9y Zz4KRGF0ZTogV2VkLCAyMCBBcHIgMjAyMiAxMjowNDozOCArMDIwMApTdWJqZWN0OiBbUEFU Q0ggdjJdIGZvcnRyYW46IERldGVjdCBkdXBsaWNhdGUgdW5saW1pdGVkIHBvbHltb3JwaGlj IHR5cGVzCiBbUFIxMDM2NjJdCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4 dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0 CgpUaGlzIGZpeGVzIGEgdHlwZS1iYXNlZCBhbGlhcyBhbmFseXNpcyBpc3N1ZSB3aXRoIHVu bGltaXRlZCBwb2x5bW9ycGhpYwpjbGFzcyBkZXNjcmlwdG9ycyAodHlwZXMgYmVoaW5kIGNs YXNzKCopKSBjYXVzaW5nIGRhdGEgaW5pdGlhbGlzYXRpb24gdG8KYmUgcmVtb3ZlZCBieSBv cHRpbWl6YXRpb24uCgpUaGUgZm9ydHJhbiBmcm9udC1lbmQgbWF5IGNyZWF0ZSBtdWx0aXBs ZSBkZWNsYXJhdGlvbnMgZm9yIHR5cGVzLCBmb3IKZXhhbXBsZSBpZiBhIHR5cGUgaXMgcmVk ZWNsYXJlZCBpbiBlYWNoIHByb2dyYW0gdW5pdCBpdCBpcyB1c2VkIGluLgpUbyBhdm9pZCBv cHRpbWl6YXRpb24gc2VlaW5nIHRoZW0gYXMgbm9uLWFsaWFzaW5nLCBhIGxpc3Qgb2YgZGVy aXZlZAp0eXBlcyBpcyBjcmVhdGVkIGF0IHJlc29sdXRpb24gdGltZSwgYW5kIHVzZWQgYXQg dHJhbnNsYXRpb24gdG8gc2V0CnRoZSBzYW1lIFRZUEVfQ0FOT05JQ0FMIHR5cGUgZm9yIGVh Y2ggZHVwbGljYXRlIHR5cGUgZGVjbGFyYXRpb24uCgpUaGlzIG1lY2hhbmlzbSBkaWRu4oCZ dCB3b3JrIGZvciB1bmxpbWl0ZWQgcG9seW1vcnBoaWMgZGVzY3JpcHRvcnMgdHlwZXMsCmFz IHRoZXJlIGlzIGEgc2hvcnQtY2lyY3VpdCByZXR1cm4gc2tpcHBpbmcgYWxsIHRoZSByZXNv bHV0aW9uIGhhbmRsaW5nCmZvciB0aGVtLCBpbmNsdWRpbmcgdGhlIHR5cGUgcmVnaXN0cmF0 aW9uLgoKVGhpcyBjaGFuZ2UgYWRkcyB0eXBlIHJlZ2lzdHJhdGlvbiBhdCB0aGUgc2hvcnQt Y2lyY3VpdCByZXR1cm4sIGFuZAp1cGRhdGVzIHR5cGUgY29tcGFyaXNvbiB0byBoYW5kbGUg c3BlY2lmaWNhbGx5IHVubGltaXRlZCBwb2x5bW9ycGhpYwpmYWtlIHN5bWJvbHMsIGNsYXNz IGRlc2NyaXB0b3IgdHlwZXMgYW5kIHZpcnR1YWwgdGFibGUgdHlwZXMuCgpUaGUgdGVzdCwg d2hpY2ggZXhoaWJpdGVkIG1pc21hdGNoaW5nIGR5bmFtaWMgdHlwZXMgaGFkIHRvIGJlIGZp eGVkIGFzCndlbGwuCgoJUFIgZm9ydHJhbi8xMDM2NjIKCmdjYy9mb3J0cmFuL0NoYW5nZUxv ZzoKCgkqIGludGVyZmFjZS5jYyAoZ2ZjX2NvbXBhcmVfZGVyaXZlZF90eXBlcyk6IFN1cHBv cnQgY29tcGFyaW5nCgl1bmxpbWl0ZWQgcG9seW1vcnBoaWMgZmFrZSBzeW1ib2xzLiAgUmVj dXJzaXZlbHkgY29tcGFyZSBjbGFzcwoJZGVzY3JpcHRvciB0eXBlcyBhbmQgdmlydHVhbCB0 YWJsZSB0eXBlcy4KCSogcmVzb2x2ZS5jYyAocmVzb2x2ZV9mbF9kZXJpdmVkKTogQWRkIHR5 cGUgdG8gdGhlIHR5cGVzIGxpc3QKCW9uIHVubGltaXRlZCBwb2x5bW9ycGhpYyBzaG9ydC1j aXJjdWl0IHJldHVybi4KCmdjYy90ZXN0c3VpdGUvQ2hhbmdlTG9nOgoKCSogZ2ZvcnRyYW4u ZGcvdW5saW1pdGVkX3BvbHltb3JwaGljXzMuZjAzIChmb28pOiBTZXBhcmF0ZQoJYmluZChj KSBhbmQgc2VxdWVuY2UgY2hlY2tzIHRvLi4uCgkoZm9vX2JjLCBmb29fc3EpOiAuLi4gdHdv IGRpZmZlcmVudCBwcm9jZWR1cmVzLgoJKG1haW4sIGZvbyopOiBDaGFuZ2UgdHlwZSBkZWNs YXJhdGlvbnMgc28gdGhhdCB0eXBlIG5hbWUsCgljb21wb25lbnQgbmFtZSwgYW5kIGVpdGhl ciBiaW5kKGMpIG9yIHNlcXVlbmNlIGF0dHJpYnV0ZSBtYXRjaAoJYmV0d2VlbiB0aGUgbWFp biB0eXBlIGRlY2xhcmF0aW9ucyBhbmQgdGhlIHByb2NlZHVyZSB0eXBlCglkZWNsYXJhdGlv bnMuCgkodG9wbGV2ZWwpOiBBZGQgb3B0aW1pemF0aW9uIGR1bXAgY2hlY2tzLgoKQ28tQXV0 aG9yZWQtQnk6IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+Ci0tLQogZ2NjL2Zv cnRyYW4vaW50ZXJmYWNlLmNjICAgICAgICAgICAgICAgICAgICAgIHwgMTkgKysrKystLQog Z2NjL2ZvcnRyYW4vcmVzb2x2ZS5jYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUgKy0K IC4uLi9nZm9ydHJhbi5kZy91bmxpbWl0ZWRfcG9seW1vcnBoaWNfMy5mMDMgICB8IDU2ICsr KysrKysrKysrKystLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgNTggaW5zZXJ0aW9ucygrKSwg MjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vaW50ZXJmYWNlLmNj IGIvZ2NjL2ZvcnRyYW4vaW50ZXJmYWNlLmNjCmluZGV4IDAwMGE1MzBjYmE0Li43ZWQ2ZTEz NzExZiAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vaW50ZXJmYWNlLmNjCisrKyBiL2djYy9m b3J0cmFuL2ludGVyZmFjZS5jYwpAQCAtNjE4LDYgKzYxOCwxNCBAQCBnZmNfY29tcGFyZV9k ZXJpdmVkX3R5cGVzIChnZmNfc3ltYm9sICpkZXJpdmVkMSwgZ2ZjX3N5bWJvbCAqZGVyaXZl ZDIpCiAgIGlmICghZGVyaXZlZDEgfHwgIWRlcml2ZWQyKQogICAgIGdmY19pbnRlcm5hbF9l cnJvciAoImdmY19jb21wYXJlX2Rlcml2ZWRfdHlwZXM6IGludmFsaWQgZGVyaXZlZCB0eXBl Iik7CiAKKyAgaWYgKGRlcml2ZWQxLT5hdHRyLnVubGltaXRlZF9wb2x5bW9ycGhpYworICAg ICAgJiYgZGVyaXZlZDItPmF0dHIudW5saW1pdGVkX3BvbHltb3JwaGljKQorICAgIHJldHVy biB0cnVlOworCisgIGlmIChkZXJpdmVkMS0+YXR0ci51bmxpbWl0ZWRfcG9seW1vcnBoaWMK KyAgICAgICE9IGRlcml2ZWQyLT5hdHRyLnVubGltaXRlZF9wb2x5bW9ycGhpYykKKyAgICBy ZXR1cm4gZmFsc2U7CisKICAgLyogQ29tcGFyZSBVTklPTiB0eXBlcyBzcGVjaWFsbHkuICAq LwogICBpZiAoZGVyaXZlZDEtPmF0dHIuZmxhdm9yID09IEZMX1VOSU9OIHx8IGRlcml2ZWQy LT5hdHRyLmZsYXZvciA9PSBGTF9VTklPTikKICAgICByZXR1cm4gY29tcGFyZV91bmlvbl90 eXBlcyAoZGVyaXZlZDEsIGRlcml2ZWQyKTsKQEAgLTYzMCwxMCArNjM4LDExIEBAIGdmY19j b21wYXJlX2Rlcml2ZWRfdHlwZXMgKGdmY19zeW1ib2wgKmRlcml2ZWQxLCBnZmNfc3ltYm9s ICpkZXJpdmVkMikKICAgICAgICYmIHN0cmNtcCAoZGVyaXZlZDEtPm1vZHVsZSwgZGVyaXZl ZDItPm1vZHVsZSkgPT0gMCkKICAgICByZXR1cm4gdHJ1ZTsKIAotICAvKiBDb21wYXJlIHR5 cGUgdmlhIHRoZSBydWxlcyBvZiB0aGUgc3RhbmRhcmQuICBCb3RoIHR5cGVzIG11c3QgaGF2 ZQotICAgICB0aGUgU0VRVUVOQ0Ugb3IgQklORChDKSBhdHRyaWJ1dGUgdG8gYmUgZXF1YWwu IFNUUlVDVFVSRXMgYXJlIHNwZWNpYWwKLSAgICAgYmVjYXVzZSB0aGV5IGNhbiBiZSBhbm9u eW1vdXM7IHRoZXJlZm9yZSB0d28gc3RydWN0dXJlcyB3aXRoIGRpZmZlcmVudAotICAgICBu YW1lcyBtYXkgYmUgZXF1YWwuICAqLworICAvKiBDb21wYXJlIHR5cGUgdmlhIHRoZSBydWxl cyBvZiB0aGUgc3RhbmRhcmQuICBCb3RoIHR5cGVzIG11c3QgaGF2ZSB0aGUKKyAgICAgU0VR VUVOQ0Ugb3IgQklORChDKSBhdHRyaWJ1dGUgdG8gYmUgZXF1YWwuICBXZSBhbHNvIGNvbXBh cmUgdHlwZXMKKyAgICAgcmVjdXJzaXZlbHkgaWYgdGhleSBhcmUgY2xhc3MgZGVzY3JpcHRv cnMgdHlwZXMgb3IgdmlydHVhbCB0YWJsZXMgdHlwZXMuCisgICAgIFNUUlVDVFVSRXMgYXJl IHNwZWNpYWwgYmVjYXVzZSB0aGV5IGNhbiBiZSBhbm9ueW1vdXM7IHRoZXJlZm9yZSB0d28K KyAgICAgc3RydWN0dXJlcyB3aXRoIGRpZmZlcmVudCBuYW1lcyBtYXkgYmUgZXF1YWwuICAq LwogCiAgIC8qIENvbXBhcmUgbmFtZXMsIGJ1dCBub3QgZm9yIGFub255bW91cyB0eXBlcyBz dWNoIGFzIFVOSU9OIG9yIE1BUC4gICovCiAgIGlmICghaXNfYW5vbnltb3VzX2R0IChkZXJp dmVkMSkgJiYgIWlzX2Fub255bW91c19kdCAoZGVyaXZlZDIpCkBAIC02NDYsNiArNjU1LDgg QEAgZ2ZjX2NvbXBhcmVfZGVyaXZlZF90eXBlcyAoZ2ZjX3N5bWJvbCAqZGVyaXZlZDEsIGdm Y19zeW1ib2wgKmRlcml2ZWQyKQogCiAgIGlmICghKGRlcml2ZWQxLT5hdHRyLnNlcXVlbmNl ICYmIGRlcml2ZWQyLT5hdHRyLnNlcXVlbmNlKQogICAgICAgJiYgIShkZXJpdmVkMS0+YXR0 ci5pc19iaW5kX2MgJiYgZGVyaXZlZDItPmF0dHIuaXNfYmluZF9jKQorICAgICAgJiYgIShk ZXJpdmVkMS0+YXR0ci5pc19jbGFzcyAmJiBkZXJpdmVkMi0+YXR0ci5pc19jbGFzcykKKyAg ICAgICYmICEoZGVyaXZlZDEtPmF0dHIudnR5cGUgJiYgZGVyaXZlZDItPmF0dHIudnR5cGUp CiAgICAgICAmJiAhKGRlcml2ZWQxLT5hdHRyLnBkdF90eXBlICYmIGRlcml2ZWQyLT5hdHRy LnBkdF90eXBlKSkKICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL2djYy9mb3J0 cmFuL3Jlc29sdmUuY2MgYi9nY2MvZm9ydHJhbi9yZXNvbHZlLmNjCmluZGV4IDIxYzg3OTdj OTM4Li5lN2E0Yjc5YjQwYyAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vcmVzb2x2ZS5jYwor KysgYi9nY2MvZm9ydHJhbi9yZXNvbHZlLmNjCkBAIC0xNTE1MCw3ICsxNTE1MCwxMCBAQCBy ZXNvbHZlX2ZsX2Rlcml2ZWQgKGdmY19zeW1ib2wgKnN5bSkKIAogICAgICAgLyogTm90aGlu ZyBtb3JlIHRvIGRvIGZvciB1bmxpbWl0ZWQgcG9seW1vcnBoaWMgZW50aXRpZXMuICAqLwog ICAgICAgaWYgKGRhdGEtPnRzLnUuZGVyaXZlZC0+YXR0ci51bmxpbWl0ZWRfcG9seW1vcnBo aWMpCi0JcmV0dXJuIHRydWU7CisJeworCSAgYWRkX2R0X3RvX2R0X2xpc3QgKHN5bSk7CisJ ICByZXR1cm4gdHJ1ZTsKKwl9CiAgICAgICBlbHNlIGlmICh2cHRyLT50cy51LmRlcml2ZWQg PT0gTlVMTCkKIAl7CiAJICBnZmNfc3ltYm9sICp2dGFiID0gZ2ZjX2ZpbmRfZGVyaXZlZF92 dGFiIChkYXRhLT50cy51LmRlcml2ZWQpOwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Zm9ydHJhbi5kZy91bmxpbWl0ZWRfcG9seW1vcnBoaWNfMy5mMDMgYi9nY2MvdGVzdHN1aXRl L2dmb3J0cmFuLmRnL3VubGltaXRlZF9wb2x5bW9ycGhpY18zLmYwMwppbmRleCAwNzVkNmQ3 MjdlMi4uNzgwZDY4Y2RkODcgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4u ZGcvdW5saW1pdGVkX3BvbHltb3JwaGljXzMuZjAzCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Zv cnRyYW4uZGcvdW5saW1pdGVkX3BvbHltb3JwaGljXzMuZjAzCkBAIC0xLDQgKzEsNSBAQAog ISB7IGRnLWRvIHJ1biB9CishIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItZmR1bXAtdHJl ZS1kc2UtZGV0YWlscyIgfQogIQogISBDaGVjayB0aGF0IHBvaW50ZXIgYXNzaWdubWVudHMg YWxsb3dlZCBieSBGMjAwMzpDNzE3CiAhIHdvcmsgYW5kIGNoZWNrIG51bGwgaW5pdGlhbGl6 YXRpb24gb2YgQ0xBU1MoKikgcG9pbnRlcnMuCkBAIC03LDIwICs4LDMxIEBACiAhCiBwcm9n cmFtIG1haW4KICAgaW50ZXJmYWNlCi0gICAgc3Vicm91dGluZSBmb28oeikKKyAgICBzdWJy b3V0aW5lIGZvb19iYyh6KQogICAgICAgY2xhc3MoKiksIHBvaW50ZXIsIGludGVudChpbikg OjogegotICAgIGVuZCBzdWJyb3V0aW5lIGZvbworICAgIGVuZCBzdWJyb3V0aW5lIGZvb19i YworICAgIHN1YnJvdXRpbmUgZm9vX3NxKHopCisgICAgICBjbGFzcygqKSwgcG9pbnRlciwg aW50ZW50KGluKSA6OiB6CisgICAgZW5kIHN1YnJvdXRpbmUgZm9vX3NxCiAgIGVuZCBpbnRl cmZhY2UKKyAgdHlwZSwgYmluZChjKSA6OiBiYworICAgIGludGVnZXIgOjogaQorICBlbmQg dHlwZSBiYwogICB0eXBlIHNxCiAgICAgc2VxdWVuY2UKLSAgICBpbnRlZ2VyIDo6IGkKKyAg ICBpbnRlZ2VyIDo6IGsKICAgZW5kIHR5cGUgc3EKKyAgdHlwZShiYyksIHRhcmdldCA6OiB3 CiAgIHR5cGUoc3EpLCB0YXJnZXQgOjogeAogICBjbGFzcygqKSwgcG9pbnRlciA6OiB5LCB6 Ci0gIHglaSA9IDQyCisgIHclaSA9IDIzCisgIHkgPT4gdworICB6ID0+IHkgISB1bmxpbWl0 ZWQgPT4gdW5saW1pdGVkIGFsbG93ZWQKKyAgY2FsbCBmb29fYmMoeikKKyAgeCVrID0gNDIK ICAgeSA9PiB4CiAgIHogPT4geSAhIHVubGltaXRlZCA9PiB1bmxpbWl0ZWQgYWxsb3dlZAot ICBjYWxsIGZvbyAoeikKKyAgY2FsbCBmb29fc3EoeikKICAgY2FsbCBiYXIKIGNvbnRhaW5z CiAgIHN1YnJvdXRpbmUgYmFyCkBAIC0zMywyMSArNDUsMzEgQEAgY29udGFpbnMKIAogZW5k IHByb2dyYW0gbWFpbgogCi0KLXN1YnJvdXRpbmUgZm9vKHRndCkKK3N1YnJvdXRpbmUgZm9v X2JjKHRndCkKICAgdXNlIGlzb19jX2JpbmRpbmcKICAgY2xhc3MoKiksIHBvaW50ZXIsIGlu dGVudChpbikgOjogdGd0Ci0gIHR5cGUsIGJpbmQoYykgOjogcwotICAgIGludGVnZXIgKGNf aW50KSA6OiBrCi0gIGVuZCB0eXBlIHMKLSAgdHlwZSB0CisgIHR5cGUsIGJpbmQoYykgOjog YmMKKyAgICBpbnRlZ2VyIChjX2ludCkgOjogaQorICBlbmQgdHlwZSBiYworICB0eXBlKGJj KSwgcG9pbnRlciA6OiBwdHIxCisgIHB0cjEgPT4gdGd0ICEgYmluZChjKSA9PiB1bmxpbWl0 ZWQgYWxsb3dlZAorICBpZiAocHRyMSVpIC5uZS4gMjMpIFNUT1AgMgorZW5kIHN1YnJvdXRp bmUgZm9vX2JjCisKK3N1YnJvdXRpbmUgZm9vX3NxKHRndCkKKyAgY2xhc3MoKiksIHBvaW50 ZXIsIGludGVudChpbikgOjogdGd0CisgIHR5cGUgc3EKICAgICBzZXF1ZW5jZQogICAgIGlu dGVnZXIgOjogawotICBlbmQgdHlwZSB0Ci0gIHR5cGUocyksIHBvaW50ZXIgOjogcHRyMQot ICB0eXBlKHQpLCBwb2ludGVyIDo6IHB0cjIKLSAgcHRyMSA9PiB0Z3QgISBiaW5kKGMpID0+ IHVubGltaXRlZCBhbGxvd2VkCi0gIGlmIChwdHIxJWsgLm5lLiA0MikgU1RPUCAyCisgIGVu ZCB0eXBlIHNxCisgIHR5cGUoc3EpLCBwb2ludGVyIDo6IHB0cjIKICAgcHRyMiA9PiB0Z3Qg ISBzZXF1ZW5jZSB0eXBlID0+IHVubGltaXRlZCBhbGxvd2VkCiAgIGlmIChwdHIyJWsgLm5l LiA0MikgU1RPUCAzCi1lbmQgc3Vicm91dGluZSBmb28KK2VuZCBzdWJyb3V0aW5lIGZvb19z cQorCishIFBSIGZvcnRyYW4vMTAzNjYyCishIFdlIHVzZWQgdG8gcHJvZHVjZSBtdWx0aXBs ZSBpbmRlcGVuZGFudCB0eXBlcyBmb3IgdGhlIHVubGltaXRlZCBwb2x5bW9ycGhpYworISBk ZXNjcmlwdG9ycyAodHlwZXMgZm9yIGNsYXNzKCopKSB3aGljaCBjYXVzZWQgc3RvcmVzIHRv IHRoZW0gdG8gYmUgc2VlbiBhcworISB1c2VsZXNzLgorISB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAtbm90ICJEZWxldGVkIGRlYWQgc3RvcmU6IHouX2RhdGEgPSAmdyIgImRzZTEi IH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtbm90ICJEZWxldGVkIGRlYWQg c3RvcmU6IHouX2RhdGEgPSAmeCIgImRzZTEiIH0gfQotLSAKMi4zNS4xCgo= --------------tfe7nNqS8rRlPT5onpqv2pYj--