From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-io1-xd29.google.com (mail-io1-xd29.google.com [IPv6:2607:f8b0:4864:20::d29]) by sourceware.org (Postfix) with ESMTPS id CDDE83858D1E for ; Thu, 10 Feb 2022 23:04:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org CDDE83858D1E Received: by mail-io1-xd29.google.com with SMTP id 9so9417242iou.2 for ; Thu, 10 Feb 2022 15:04:26 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:from :subject:to:references:content-language:in-reply-to; bh=i8xHm38jXrhWhUNLOUqbJ0eNAymIb1ZJU3yMtarI8To=; b=YixyIxo9NjbanuRKSQsFCywqKy+RuuUrMJkpch+LQ1no4af5UsXIjy7/x6Vv1qU4EW VHN3+8hE2+DljJlQrYINwxdYH/oaS9smqstZZ/l3hAyTwT7yYvwt8FX7VzmmHd13qrsW zMFehSgZLRCSiVcrMMsD33QpSw4dGJD5X1E+m2XNDoCG2FbKOhUdculE3/Ga9TlNIheO WO+q1qrglA04+CEcvM9PJyWurnX/iLXNd7A5OLrr5TzQ58LWcYZfn4L+9mfAEbn17C/y TY1IFJrvcizxHIkqkp2XD0HRaeJqX4BNVYP4FrNLdp29jtOhtILPTHzEY0gJew1ARKLe DpSA== X-Gm-Message-State: AOAM533Z06E/Fl4AVfakt++N2WIdh/MX7ANfPY6gO1DvdIzuvVRSOa7Y R4lDKtymYpqnQ6QkDVYySxBmqzLUlHw= X-Google-Smtp-Source: ABdhPJwC6xrChEuFqRSLX3GsELo1CCK4wHfJE2GnmeXxE1QNuhwVzHuY+mKM4YHV2YN60FrrLKbp+A== X-Received: by 2002:a05:6638:144e:: with SMTP id l14mr5011798jad.97.1644534266088; Thu, 10 Feb 2022 15:04:26 -0800 (PST) Received: from [192.168.0.41] (97-118-104-1.hlrn.qwest.net. [97.118.104.1]) by smtp.gmail.com with ESMTPSA id a6sm12605199iow.22.2022.02.10.15.04.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 10 Feb 2022 15:04:25 -0800 (PST) Content-Type: multipart/mixed; boundary="------------TmZqxIN6MPWisuscu7oBhG0M" Message-ID: Date: Thu, 10 Feb 2022 16:04:24 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.4.0 From: Martin Sebor Subject: Re: [PATCH] handle "invisible" reference in -Wdangling-pointer (PR104436) To: Jason Merrill , gcc-patches References: <93612754-9bd2-7e45-f6fa-1704c2f78c54@gmail.com> <74c7ee44-1817-187c-9e0d-b9b8e052fa1b@redhat.com> Content-Language: en-US In-Reply-To: <74c7ee44-1817-187c-9e0d-b9b8e052fa1b@redhat.com> X-Spam-Status: No, score=-8.7 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, 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: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 10 Feb 2022 23:04:30 -0000 This is a multi-part message in MIME format. --------------TmZqxIN6MPWisuscu7oBhG0M Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 2/8/22 15:37, Jason Merrill wrote: > On 2/8/22 16:59, Martin Sebor wrote: >> Transforming a by-value arguments to by-reference as GCC does for some >> class types can trigger -Wdangling-pointer when the argument is used >> to store the address of a local variable.  Since the stored value is >> not accessible in the caller the warning is a false positive. >> >> The attached patch handles this case by excluding PARM_DECLs with >> the DECL_BY_REFERENCE bit set from consideration. >> >> While testing the patch I noticed some instances of the warning are >> uninitentionally duplicated as the pass runs more than once.  To avoid >> that, I also introduce warning suppression into the handler for this >> instance of the warning.  (There might still be others.) > > The second test should verify that we do warn about returning 't' from a > function; we don't want to ignore the DECL_BY_REFERENCE RESULT_DECL. The indirect aggregate case isn't handled and needs more work but since you brought it up I thought I should look into finishing it. The attached patch #2 adds support for it. It also incorporates Richard's suggestion to test PARM_DECL. Patch #2 applies on top of patch #1 which is unchanged from the first revision. I have retested it on x86_64-linux and by building Glibc and Binutils + GDB. If now is too late for the aggregate enhancement I'm okay with deferring it until stage 1. > >> +      tree var = SSA_NAME_VAR (lhs_ref.ref); >> +      if (DECL_BY_REFERENCE (var)) >> +        /* Avoid by-value arguments transformed into by-reference.  */ >> +        continue; > > I wonder if we can we express this property of invisiref parms somewhere > more general?  I imagine optimizations would find it useful as well. > Could pointer_query somehow treat the reference as pointing to a > function-local object? I don't quite see where in the pointer_query class this would be useful (the class also isn't used for optimization). I could add a helper to the access_ref class to query this property in warning code but as this is the only potential client I'm also not sure that's quite what you had in mind. I'd need some guidance as to what you're thinking of here. Martin > > I previously tried to express this by marking the reference as > 'restrict', but that was wrong > (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97474). > > Jason > --------------TmZqxIN6MPWisuscu7oBhG0M Content-Type: text/x-patch; charset=UTF-8; name="0001-Avoid-Wdangling-pointer-for-by-transparent-reference.diff" Content-Disposition: attachment; filename*0="0001-Avoid-Wdangling-pointer-for-by-transparent-reference.di"; filename*1="ff" Content-Transfer-Encoding: base64 U3ViamVjdDogW1BBVENIIDEvMl0gQXZvaWQgLVdkYW5nbGluZy1wb2ludGVyIGZvciBieS10 cmFuc3BhcmVudC1yZWZlcmVuY2UKIGFyZ3VtZW50cyBbUFIxMDQ0MzZdLgoKVGhpcyBjaGFu Z2UgYXZvaWRzIC1XZGFuZ2xpbmctcG9pbnRlciBmb3IgYnktdmFsdWUgYXJndW1lbnRzIHRy YW5zZm9ybWVkCmludG8gYnktdHJhbnNwYXJlbnQtcmVmZXJlbmNlLgoKUmVzb2x2ZXM6ClBS IG1pZGRsZS1lbmQvMTA0NDM2IC0gc3B1cmlvdXMgLVdkYW5nbGluZy1wb2ludGVyIGFzc2ln bmluZyBsb2NhbCBhZGRyZXNzIHRvIGEgY2xhc3MgcGFzc2VkIGJ5IHZhbHVlCgpnY2MvQ2hh bmdlTG9nOgoKCVBSIG1pZGRsZS1lbmQvMTA0NDM2CgkqIGdpbXBsZS1zc2Etd2Fybi1hY2Nl c3MuY2MgKHBhc3Nfd2FjY2Vzczo6Y2hlY2tfZGFuZ2xpbmdfc3RvcmVzKToKCUNoZWNrIGZv ciB3YXJuaW5nIHN1cHByZXNzaW9uLiAgQXZvaWQgYnktdmFsdWUgYXJndW1lbnRzIHRyYW5z Zm9ybWVkCglpbnRvIGJ5LXRyYW5zcGFyZW50LXJlZmVyZW5jZS4KCmdjYy90ZXN0c3VpdGUv Q2hhbmdlTG9nOgoKCVBSIG1pZGRsZS1lbmQvMTA0NDM2CgkqIGMtYysrLWNvbW1vbi9XZGFu Z2xpbmctcG9pbnRlci03LmM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvd2Fybi9XZGFuZ2xpbmct cG9pbnRlci00LkM6IE5ldyB0ZXN0LgotLS0KIGdjYy9naW1wbGUtc3NhLXdhcm4tYWNjZXNz LmNjICAgICAgICAgICAgICAgICB8IDEzICsrKysrKy0KIC4uLi9jLWMrKy1jb21tb24vV2Rh bmdsaW5nLXBvaW50ZXItNy5jICAgICAgICB8IDIwICsrKysrKysrKysrCiAuLi4vZysrLmRn L3dhcm4vV2RhbmdsaW5nLXBvaW50ZXItNC5DICAgICAgICAgfCAzNCArKysrKysrKysrKysr KysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDY2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24o LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9XZGFu Z2xpbmctcG9pbnRlci03LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2cr Ky5kZy93YXJuL1dkYW5nbGluZy1wb2ludGVyLTQuQwoKZGlmZiAtLWdpdCBhL2djYy9naW1w bGUtc3NhLXdhcm4tYWNjZXNzLmNjIGIvZ2NjL2dpbXBsZS1zc2Etd2Fybi1hY2Nlc3MuY2MK aW5kZXggODBkNDFlYTQzODMuLjBjMzE5YTMyYjcwIDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxl LXNzYS13YXJuLWFjY2Vzcy5jYworKysgYi9nY2MvZ2ltcGxlLXNzYS13YXJuLWFjY2Vzcy5j YwpAQCAtNDUxNyw2ICs0NTE3LDkgQEAgcGFzc193YWNjZXNzOjpjaGVja19kYW5nbGluZ19z dG9yZXMgKGJhc2ljX2Jsb2NrIGJiLAogICAgICAgaWYgKCFzdG10KQogCWJyZWFrOwogCisg ICAgICBpZiAod2FybmluZ19zdXBwcmVzc2VkX3AgKHN0bXQsIE9QVF9XZGFuZ2xpbmdfcG9p bnRlcl8pKQorCWNvbnRpbnVlOworCiAgICAgICBpZiAoaXNfZ2ltcGxlX2NhbGwgKHN0bXQp CiAJICAmJiAhKGdpbXBsZV9jYWxsX2ZsYWdzIChzdG10KSAmIChFQ0ZfQ09OU1QgfCBFQ0Zf UFVSRSkpKQogCS8qIEF2b2lkIGxvb2tpbmcgYmVmb3JlIG5vbmNvbnN0LCBub25wdXJlIGNh bGxzIHNpbmNlIHRob3NlIG1pZ2h0CkBAIC00NTQyLDEwICs0NTQ1LDE2IEBAIHBhc3Nfd2Fj Y2Vzczo6Y2hlY2tfZGFuZ2xpbmdfc3RvcmVzIChiYXNpY19ibG9jayBiYiwKIAl9CiAgICAg ICBlbHNlIGlmIChUUkVFX0NPREUgKGxoc19yZWYucmVmKSA9PSBTU0FfTkFNRSkKIAl7Ci0J ICAvKiBBdm9pZCBsb29raW5nIGF0IG9yIGJlZm9yZSBzdG9yZXMgaW50byB1bmtub3duIG9i amVjdHMuICAqLwogCSAgZ2ltcGxlICpkZWZfc3RtdCA9IFNTQV9OQU1FX0RFRl9TVE1UIChs aHNfcmVmLnJlZik7CiAJICBpZiAoIWdpbXBsZV9ub3BfcCAoZGVmX3N0bXQpKQorCSAgICAv KiBBdm9pZCBsb29raW5nIGF0IG9yIGJlZm9yZSBzdG9yZXMgaW50byB1bmtub3duIG9iamVj dHMuICAqLwogCSAgICByZXR1cm47CisKKwkgIHRyZWUgdmFyID0gU1NBX05BTUVfVkFSIChs aHNfcmVmLnJlZik7CisJICBpZiAoREVDTF9CWV9SRUZFUkVOQ0UgKHZhcikpCisJICAgIC8q IEF2b2lkIGJ5LXZhbHVlIGFyZ3VtZW50cyB0cmFuc2Zvcm1lZCBpbnRvIGJ5LXJlZmVyZW5j ZS4gICovCisJICAgIGNvbnRpbnVlOworCiAJfQogICAgICAgZWxzZSBpZiAoVFJFRV9DT0RF IChsaHNfcmVmLnJlZikgPT0gTUVNX1JFRikKIAl7CkBAIC00NTc4LDYgKzQ1ODcsOCBAQCBw YXNzX3dhY2Nlc3M6OmNoZWNrX2RhbmdsaW5nX3N0b3JlcyAoYmFzaWNfYmxvY2sgYmIsCiAJ CSAgICAgICJzdG9yaW5nIHRoZSBhZGRyZXNzIG9mIGxvY2FsIHZhcmlhYmxlICVxRCBpbiAl cUUiLAogCQkgICAgICByaHNfcmVmLnJlZiwgbGhzKSkKIAl7CisJICBzdXBwcmVzc193YXJu aW5nIChzdG10LCBPUFRfV2RhbmdsaW5nX3BvaW50ZXJfKTsKKwogCSAgbG9jYXRpb25fdCBs b2MgPSBERUNMX1NPVVJDRV9MT0NBVElPTiAocmhzX3JlZi5yZWYpOwogCSAgaW5mb3JtIChs b2MsICIlcUQgZGVjbGFyZWQgaGVyZSIsIHJoc19yZWYucmVmKTsKIApkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vV2RhbmdsaW5nLXBvaW50ZXItNy5jIGIvZ2Nj L3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vV2RhbmdsaW5nLXBvaW50ZXItNy5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40MzM3MjdkZDg0NQotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL1dkYW5nbGluZy1wb2ludGVy LTcuYwpAQCAtMCwwICsxLDIwIEBACisvKiBWZXJpZnkgLVdkYW5nbGluZy1wb2ludGVyIGlz IGlzc3VlZCBvbmx5IG9uY2UuCisgICB7IGRnLWRvIGNvbXBpbGUgfQorICAgeyBkZy1vcHRp b25zICItTyAtV2FsbCIgfSAqLworCit2b2lkICpwOworCit2b2lkIGVzY2FwZV9nbG9iYWxf d2Fybl9vbmNlICh2b2lkKQoreworICBpbnQgeFs1XTsKKworICBwID0gJnhbM107ICAgICAg ICAvLyB7IGRnLXJlZ2V4cCAiXFteXG5cclxdKzogd2FybmluZzogXFteXG5cclxdKyBcXFxb LVdkYW5nbGluZy1wb2ludGVyLj9cXFxdIiAibWVzc2FnZSIgfQorfQorCisKK3ZvaWQgZXNj YXBlX3BhcmFtX3dhcm5fb25jZSAodm9pZCAqKnApCit7CisgIGludCB4WzVdOworCisgICpw ID0gJnhbM107ICAgICAgIC8vIHsgZGctcmVnZXhwICJcW15cblxyXF0rOiB3YXJuaW5nOiBc W15cblxyXF0rIFxcXFstV2RhbmdsaW5nLXBvaW50ZXIuP1xcXF0iICJtZXNzYWdlIiB9Cit9 CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy93YXJuL1dkYW5nbGluZy1wb2lu dGVyLTQuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL3dhcm4vV2RhbmdsaW5nLXBvaW50ZXIt NC5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iM2QxNDRhOWU2 ZAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL3dhcm4vV2Rhbmds aW5nLXBvaW50ZXItNC5DCkBAIC0wLDAgKzEsMzQgQEAKKy8qIFBSIG1pZGRsZS1lbmQvMTA0 NDM2IC0gc3B1cmlvdXMgLVdkYW5nbGluZy1wb2ludGVyIGFzc2lnbmluZyBsb2NhbAorICAg YWRkcmVzcyB0byBhIGNsYXNzIHBhc3NlZCBieSB2YWx1ZQorICAgeyBkZy1kbyBjb21waWxl IH0KKyAgIHsgZGctb3B0aW9ucyAiLU8xIC1XYWxsIiB9ICovCisKK3N0cnVjdCBTCit7Cisg IFMgKHZvaWQgKnApOiBwIChwKSB7IH0KKyAgUyAoY29uc3QgUyAmcyk6IHAgKHMucCkgeyB9 CisKKyAgdm9pZCAqcDsKK307CisKKwordm9pZCBub3dhcm5fYXNzaWduX2J5X3ZhbHVlIChT IHMpCit7CisgIGludCBpOworICBTIHQgKCZpKTsKKyAgcyA9IHQ7ICAgICAgICAgICAgLy8g eyBkZy1ib2d1cyAiLVdkYW5nbGluZy1wb2ludGVyIiB9Cit9CisKK3ZvaWQgbm93YXJuX2Fz c2lnbl9ieV92YWx1ZV9hcmcgKFMgcykKK3sKKyAgUyB0ICgmcyk7CisgIHMgPSB0OyAgICAg ICAgICAgIC8vIHsgZGctYm9ndXMgIi1XZGFuZ2xpbmctcG9pbnRlciIgfQorfQorCisKK3Zv aWQgd2Fybl9hc3NpZ25fbG9jYWxfYnlfcmVmZXJlbmNlIChTICZzKQoreworICBpbnQgaTsK KyAgUyB0ICgmaSk7CisgIHMgPSB0OyAgICAgICAgICAgIC8vIHsgZGctd2FybmluZyAiLVdk YW5nbGluZy1wb2ludGVyIiB9Cit9Ci0tIAoyLjM0LjEKCg== --------------TmZqxIN6MPWisuscu7oBhG0M Content-Type: text/x-patch; charset=UTF-8; name="0002-Handle-aggregates-in-Wdangling-pointer.diff" Content-Disposition: attachment; filename="0002-Handle-aggregates-in-Wdangling-pointer.diff" Content-Transfer-Encoding: base64 U3ViamVjdDogW1BBVENIIDIvMl0gSGFuZGxlIGFnZ3JlZ2F0ZXMgaW4gLVdkYW5nbGluZy1w b2ludGVyLgoKVGhpcyBzZXQgb2YgY2hhbmdlcyBlbmFibGVzIC1XZGFuZ2xpbmctcG9pbnRl ciBmb3IgcmV0dXJuaW5nIGFuIGFnZ3JlZ2F0ZQpvbmUgb2Ygd2hvc2UgbWVtYmVycyBzdG9y ZXMgdGhlIGFkZHJlc3Mgb2YgYW4gYXV0byB2YXJpYWJsZXMuCgpnY2MvQ2hhbmdlTG9nOgoK CSogZ2ltcGxlLXNzYS13YXJuLWFjY2Vzcy5jYyAocGFzc193YWNjZXNzOjpkZWZlcnJlZF9z ZXRzKTogTmV3IHR5cGUuCgkocGFzc193YWNjZXNzOjpjaGVja19kYW5nbGluZ19zdG9yZXMp OiBVc2UgaXQgYXMgYW4gYXJndW1lbnQuCglIYW5kbGUgcmV0dXJuaW5nIGFuZCBzdG9yaW5n IGFnZ3JlZ2F0ZXMgd2l0aCBtZW1iZXJzIHN0b3JpbmcgbG9jYWwKCWFkZHJlc3Nlcy4KCmdj Yy90ZXN0c3VpdGUvQ2hhbmdlTG9nOgoKCSogZysrLmRnL3dhcm4vV2RhbmdsaW5nLXBvaW50 ZXItNC5DOiBBZGQgYSB0ZXN0IGNhc2UuCgkqIGMtYysrLWNvbW1vbi9XZGFuZ2xpbmctcG9p bnRlci04LmM6IE5ldyB0ZXN0LgotLS0KIGdjYy9naW1wbGUtc3NhLXdhcm4tYWNjZXNzLmNj ICAgICAgICAgICAgICAgICB8IDExMCArKysrKysrKysrKysrKy0tLS0KIC4uLi9jLWMrKy1j b21tb24vV2RhbmdsaW5nLXBvaW50ZXItOC5jICAgICAgICB8ICA1MCArKysrKysrKwogLi4u L2crKy5kZy93YXJuL1dkYW5nbGluZy1wb2ludGVyLTQuQyAgICAgICAgIHwgIDY1ICsrKysr KysrKy0tCiAzIGZpbGVzIGNoYW5nZWQsIDE5MiBpbnNlcnRpb25zKCspLCAzMyBkZWxldGlv bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9X ZGFuZ2xpbmctcG9pbnRlci04LmMKCmRpZmYgLS1naXQgYS9nY2MvZ2ltcGxlLXNzYS13YXJu LWFjY2Vzcy5jYyBiL2djYy9naW1wbGUtc3NhLXdhcm4tYWNjZXNzLmNjCmluZGV4IDBjMzE5 YTMyYjcwLi5iNjc1ZmExMzk2MCAxMDA2NDQKLS0tIGEvZ2NjL2dpbXBsZS1zc2Etd2Fybi1h Y2Nlc3MuY2MKKysrIGIvZ2NjL2dpbXBsZS1zc2Etd2Fybi1hY2Nlc3MuY2MKQEAgLTIxMzAs NyArMjEzMCwyMCBAQCBwcml2YXRlOgogICB2b2lkIGNoZWNrX2RhbmdsaW5nX3VzZXMgKHRy ZWUsIHRyZWUsIGJvb2wgPSBmYWxzZSwgYm9vbCA9IGZhbHNlKTsKICAgdm9pZCBjaGVja19k YW5nbGluZ191c2VzICgpOwogICB2b2lkIGNoZWNrX2RhbmdsaW5nX3N0b3JlcyAoKTsKLSAg dm9pZCBjaGVja19kYW5nbGluZ19zdG9yZXMgKGJhc2ljX2Jsb2NrLCBoYXNoX3NldDx0cmVl PiAmLCBhdXRvX2JpdG1hcCAmKTsKKworICAvKiBIb2xkcyBkYXRhIHVzZWQgYnkgY2hlY2tf ZGFuZ2xpbmdfc3RvcmVzLiAgKi8KKyAgc3RydWN0IGRlZmVycmVkX3NldHMKKyAgeworICAg IC8qIFZpc2l0ZWQgYmFzaWMgYmxvY2tzLiAgKi8KKyAgICBhdXRvX2JpdG1hcCBiYnM7Cisg ICAgLyogU2V0IG9mIHN0b3JlcyBhbHJlYWR5IHNlZW4uICAqLworICAgIGhhc2hfc2V0PHRy ZWU+IHN0b3JlczsKKyAgICAvKiBTZXQgb2YgYWdncmVnYXRlcyBlaXRoZXIgcmV0dXJuZWQg KGFuZCB0aGVpciByZXR1cm4gc3RhdGVtZW50cykKKyAgICAgICBvciBhc3NpZ25lZCB0by4g ICovCisgICAgaGFzaF9tYXA8dHJlZSwgZ2ltcGxlICo+IGFnZ3JzOworICB9OworCisgIHZv aWQgY2hlY2tfZGFuZ2xpbmdfc3RvcmVzIChiYXNpY19ibG9jaywgZGVmZXJyZWRfc2V0cyAm KTsKIAogICB2b2lkIHdhcm5faW52YWxpZF9wb2ludGVyICh0cmVlLCBnaW1wbGUgKiwgZ2lt cGxlICosIHRyZWUsIGJvb2wsIGJvb2wgPSBmYWxzZSk7CiAKQEAgLTQ0OTgsMTQgKzQ1MTEs MTMgQEAgcGFzc193YWNjZXNzOjpjaGVja19kYW5nbGluZ191c2VzICh0cmVlIHZhciwgdHJl ZSBkZWNsLCBib29sIG1heWJlIC8qID0gZmFsc2UgKi8KIAogLyogRGlhZ25vc2Ugc3RvcmVz IGluIEJCIGFuZCAocmVjdXJzaXZlbHkpIGl0cyBwcmVkZWNlc3NvcnMgb2YgdGhlIGFkZHJl c3NlcwogICAgb2YgbG9jYWwgdmFyaWFibGVzIGludG8gbm9ubG9jYWwgcG9pbnRlcnMgdGhh dCBhcmUgbGVmdCBkYW5nbGluZyBhZnRlcgotICAgdGhlIGZ1bmN0aW9uIHJldHVybnMuICBC QlMgaXMgYSBiaXRtYXAgb2YgYmFzaWMgYmxvY2tzIHZpc2l0ZWQuICAqLworICAgdGhlIGZ1 bmN0aW9uIHJldHVybnMuICBEUyBjb250YWlucyBkYXRhIHRvIGNvbnRyb2wgcmVjdXJzaW9u IGFuZCBmb3IKKyAgIGhhbmRsaW5nIGFnZ3JlZ2F0ZXMuICAqLwogCiB2b2lkCi1wYXNzX3dh Y2Nlc3M6OmNoZWNrX2RhbmdsaW5nX3N0b3JlcyAoYmFzaWNfYmxvY2sgYmIsCi0JCQkJICAg ICBoYXNoX3NldDx0cmVlPiAmc3RvcmVzLAotCQkJCSAgICAgYXV0b19iaXRtYXAgJmJicykK K3Bhc3Nfd2FjY2Vzczo6Y2hlY2tfZGFuZ2xpbmdfc3RvcmVzIChiYXNpY19ibG9jayBiYiwg ZGVmZXJyZWRfc2V0cyAmZHMpCiB7Ci0gIGlmICghYml0bWFwX3NldF9iaXQgKGJicywgYmIt PmluZGV4KSkKKyAgaWYgKCFiaXRtYXBfc2V0X2JpdCAoZHMuYmJzLCBiYi0+aW5kZXgpKQog ICAgIC8qIEF2b2lkIGN5Y2xlcy4gKi8KICAgICByZXR1cm47CiAKQEAgLTQ1MjYsNiArNDUz OCwyMyBAQCBwYXNzX3dhY2Nlc3M6OmNoZWNrX2RhbmdsaW5nX3N0b3JlcyAoYmFzaWNfYmxv Y2sgYmIsCiAJICAgdXNlIHRoZSBlc2NhcGVkIGxvY2Fscy4gICovCiAJcmV0dXJuOwogCisg ICAgICBpZiAoZ3JldHVybiAqcmV0ID0gZHluX2Nhc3QgPGdyZXR1cm4gKj4gKHN0bXQpKQor CXsKKwkgIC8qIElmIHRoZSBzdGF0ZW1lbnQgcmV0dXJucyBhbiBhZ2dyZWdhdGUgYWRkIGl0 IHRvIEFHR1JzIHRvCisJICAgICBjaGVjayBmb3IgYXNzaWdubWVudHMgb2YgZGFuZ2xpbmcg cG9pbnRlcnMgaW4gc3Vic2VxdWVudAorCSAgICAgaXRlcmF0aW9ucy4gIE90aGVyd2lzZSBz aW1wbHkgY29udGludWUuICAqLworCSAgdHJlZSBhcmcgPSBnaW1wbGVfcmV0dXJuX3JldHZh bCAocmV0KTsKKwkgIGlmICghYXJnKQorCSAgICBjb250aW51ZTsKKworCSAgdHJlZSB0eXBl ID0gVFJFRV9UWVBFIChhcmcpOworCSAgaWYgKFRSRUVfQ09ERSAodHlwZSkgPT0gUkVGRVJF TkNFX1RZUEUpCisJICAgIHR5cGUgPSBUUkVFX1RZUEUgKHR5cGUpOworCSAgaWYgKFJFQ09S RF9PUl9VTklPTl9UWVBFX1AgKHR5cGUpKQorCSAgICBkcy5hZ2dycy5wdXQgKGFyZywgc3Rt dCk7CisJICBjb250aW51ZTsKKwl9CisKICAgICAgIGlmICghaXNfZ2ltcGxlX2Fzc2lnbiAo c3RtdCkgfHwgZ2ltcGxlX2Nsb2JiZXJfcCAoc3RtdCkpCiAJY29udGludWU7CiAKQEAgLTQ1 MzQsMTMgKzQ1NjMsMTcgQEAgcGFzc193YWNjZXNzOjpjaGVja19kYW5nbGluZ19zdG9yZXMg KGJhc2ljX2Jsb2NrIGJiLAogICAgICAgaWYgKCFtX3B0cl9xcnkuZ2V0X3JlZiAobGhzLCBz dG10LCAmbGhzX3JlZiwgMCkpCiAJY29udGludWU7CiAKLSAgICAgIGlmIChpc19hdXRvX2Rl Y2wgKGxoc19yZWYucmVmKSkKKyAgICAgIC8qIFNldCBpZiBMSFMgaXMgYSBsb2NhbCBhZ2dy ZWdhdGUgb25lIG9mIHdob3NlIG1lbWJlcnMgaGFzIGJlZW4KKwkgc2V0IHRvIHRoZSBhZGRy ZXNzIG9mIGEgZGFuZ2xpbmcgbG9jYWwuICAqLworICAgICAgZ2ltcGxlICoqYWdncl9yZXQg PSBkcy5hZ2dycy5nZXQgKGxoc19yZWYucmVmKTsKKyAgICAgIGlmIChpc19hdXRvX2RlY2wg KGxoc19yZWYucmVmKSAmJiAhYWdncl9yZXQpCiAJY29udGludWU7CiAKICAgICAgIGlmIChE RUNMX1AgKGxoc19yZWYucmVmKSkKIAl7Ci0JICBpZiAoIVBPSU5URVJfVFlQRV9QIChUUkVF X1RZUEUgKGxoc19yZWYucmVmKSkKLQkgICAgICB8fCBsaHNfcmVmLmRlcmVmID4gMCkKKwkg IGlmICghYWdncl9yZXQKKwkgICAgICAmJiAoIVBPSU5URVJfVFlQRV9QIChUUkVFX1RZUEUg KGxoc19yZWYucmVmKSkKKwkJICB8fCBsaHNfcmVmLmRlcmVmID4gMCkpCiAJICAgIGNvbnRp bnVlOwogCX0KICAgICAgIGVsc2UgaWYgKFRSRUVfQ09ERSAobGhzX3JlZi5yZWYpID09IFNT QV9OQU1FKQpAQCAtNDU1MSw3ICs0NTg0LDcgQEAgcGFzc193YWNjZXNzOjpjaGVja19kYW5n bGluZ19zdG9yZXMgKGJhc2ljX2Jsb2NrIGJiLAogCSAgICByZXR1cm47CiAKIAkgIHRyZWUg dmFyID0gU1NBX05BTUVfVkFSIChsaHNfcmVmLnJlZik7Ci0JICBpZiAoREVDTF9CWV9SRUZF UkVOQ0UgKHZhcikpCisJICBpZiAoVFJFRV9DT0RFICh2YXIpID09IFBBUk1fREVDTCAmJiBE RUNMX0JZX1JFRkVSRU5DRSAodmFyKSkKIAkgICAgLyogQXZvaWQgYnktdmFsdWUgYXJndW1l bnRzIHRyYW5zZm9ybWVkIGludG8gYnktcmVmZXJlbmNlLiAgKi8KIAkgICAgY29udGludWU7 CiAKQEAgLTQ1NjksMTkgKzQ2MDIsMzYgQEAgcGFzc193YWNjZXNzOjpjaGVja19kYW5nbGlu Z19zdG9yZXMgKGJhc2ljX2Jsb2NrIGJiLAogICAgICAgZWxzZQogCWNvbnRpbnVlOwogCi0g ICAgICBpZiAoc3RvcmVzLmFkZCAobGhzX3JlZi5yZWYpKQorICAgICAgaWYgKGRzLnN0b3Jl cy5hZGQgKGxoc19yZWYucmVmKSkKIAljb250aW51ZTsKIAogICAgICAgLyogRklYTUU6IEhh bmRsZSBzdG9yZXMgb2YgYWxsb2NhKCkgYW5kIFZMQS4gICovCiAgICAgICBhY2Nlc3NfcmVm IHJoc19yZWY7CiAgICAgICB0cmVlIHJocyA9IGdpbXBsZV9hc3NpZ25fcmhzMSAoc3RtdCk7 Ci0gICAgICBpZiAoIW1fcHRyX3FyeS5nZXRfcmVmIChyaHMsIHN0bXQsICZyaHNfcmVmLCAw KQotCSAgfHwgcmhzX3JlZi5kZXJlZiAhPSAtMSkKKyAgICAgIGlmICghbV9wdHJfcXJ5Lmdl dF9yZWYgKHJocywgc3RtdCwgJnJoc19yZWYsIDApKQogCWNvbnRpbnVlOwogCisgICAgICB0 cmVlIHJoc190eXBlID0gVFJFRV9UWVBFIChyaHMpOworICAgICAgaWYgKFBPSU5URVJfVFlQ RV9QIChyaHNfdHlwZSkpCisJeworCSAgaWYgKHJoc19yZWYuZGVyZWYgIT0gLTEpCisJICAg IGNvbnRpbnVlOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAoUkVDT1JEX09SX1VOSU9O X1RZUEVfUCAocmhzX3R5cGUpKQorCSAgICBkcy5hZ2dycy5wdXQgKHJoc19yZWYucmVmLCBz dG10KTsKKwkgIGNvbnRpbnVlOworCX0KKwogICAgICAgaWYgKCFpc19hdXRvX2RlY2wgKHJo c19yZWYucmVmKSkKIAljb250aW51ZTsKIAorICAgICAgaWYgKHdhcm5pbmdfc3VwcHJlc3Nl ZF9wIChyaHNfcmVmLnJlZiwgT1BUX1dkYW5nbGluZ19wb2ludGVyXykpCisJLyogQXZvaWQg d2FybmluZyBmb3IgYSB2YXJpYWJsZSB0aGF0J3MgYWxyZWFkeSBiZWVuIGRpYWdub3NlZAor CSAgIChzZWUgYmVsb3cpLiAgKi8KKwljb250aW51ZTsKKwogICAgICAgbG9jYXRpb25fdCBs b2MgPSBnaW1wbGVfbG9jYXRpb24gKHN0bXQpOwogICAgICAgaWYgKHdhcm5pbmdfYXQgKGxv YywgT1BUX1dkYW5nbGluZ19wb2ludGVyXywKIAkJICAgICAgInN0b3JpbmcgdGhlIGFkZHJl c3Mgb2YgbG9jYWwgdmFyaWFibGUgJXFEIGluICVxRSIsCkBAIC00NTg5LDE2ICs0NjM5LDMx IEBAIHBhc3Nfd2FjY2Vzczo6Y2hlY2tfZGFuZ2xpbmdfc3RvcmVzIChiYXNpY19ibG9jayBi YiwKIAl7CiAJICBzdXBwcmVzc193YXJuaW5nIChzdG10LCBPUFRfV2RhbmdsaW5nX3BvaW50 ZXJfKTsKIAotCSAgbG9jYXRpb25fdCBsb2MgPSBERUNMX1NPVVJDRV9MT0NBVElPTiAocmhz X3JlZi5yZWYpOwotCSAgaW5mb3JtIChsb2MsICIlcUQgZGVjbGFyZWQgaGVyZSIsIHJoc19y ZWYucmVmKTsKKwkgIGxvY2F0aW9uX3QgcmVmX2xvYyA9IERFQ0xfU09VUkNFX0xPQ0FUSU9O IChyaHNfcmVmLnJlZik7CisJICBpbmZvcm0gKHJlZl9sb2MsICIlcUQgZGVjbGFyZWQgaGVy ZSIsIHJoc19yZWYucmVmKTsKKworCSAgaWYgKGFnZ3JfcmV0KQorCSAgICB7CisJICAgICAg LyogQWxzbyBzdXBwcmVzcyB0aGUgd2FybmluZyBmb3IgdGhlIHZhcmlhYmxlIHdob3NlIGFk ZHJlc3MKKwkJIGlzIGJlaW5nIChpbmRpcmVjdGx5KSByZXR1cm5lZCB0byBrZWVwIHN1YnNl cXVlbnQgcnVucworCQkgb3ZlciB0aGUgSUwgYWZ0ZXIgb3B0aW1pemF0aW9uIGZyb20gaXNz dWluZyB0aGUgc2FtZQorCQkgd2FybmluZyBhZ2Fpbi4gICovCisJICAgICAgc3VwcHJlc3Nf d2FybmluZyAocmhzX3JlZi5yZWYsIE9QVF9XZGFuZ2xpbmdfcG9pbnRlcl8pOworCisJICAg ICAgbG9jYXRpb25fdCByZXRfbG9jID0gZ2ltcGxlX2xvY2F0aW9uICgqYWdncl9yZXQpOwor CSAgICAgIGluZm9ybSAocmV0X2xvYywgIiVxRSByZXR1cm5lZCBoZXJlIiwgbGhzX3JlZi5y ZWYpOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CiAKIAkgIGlmIChERUNMX1AgKGxoc19y ZWYucmVmKSkKLQkgICAgbG9jID0gREVDTF9TT1VSQ0VfTE9DQVRJT04gKGxoc19yZWYucmVm KTsKKwkgICAgcmVmX2xvYyA9IERFQ0xfU09VUkNFX0xPQ0FUSU9OIChsaHNfcmVmLnJlZik7 CiAJICBlbHNlIGlmIChFWFBSX0hBU19MT0NBVElPTiAobGhzX3JlZi5yZWYpKQotCSAgICBs b2MgPSBFWFBSX0xPQ0FUSU9OIChsaHNfcmVmLnJlZik7CisJICAgIHJlZl9sb2MgPSBFWFBS X0xPQ0FUSU9OIChsaHNfcmVmLnJlZik7CisJICBlbHNlCisJICAgIHJlZl9sb2MgPSBVTktO T1dOX0xPQ0FUSU9OOwogCi0JICBpZiAobG9jICE9IFVOS05PV05fTE9DQVRJT04pCi0JICAg IGluZm9ybSAobG9jLCAiJXFFIGRlY2xhcmVkIGhlcmUiLCBsaHNfcmVmLnJlZik7CisJICBp ZiAocmVmX2xvYyAhPSBVTktOT1dOX0xPQ0FUSU9OICYmIHJlZl9sb2MgIT0gbG9jKQorCSAg ICBpbmZvcm0gKHJlZl9sb2MsICIlcUUgZGVjbGFyZWQgaGVyZSIsIGxoc19yZWYucmVmKTsK IAl9CiAgICAgfQogCkBAIC00NjA3LDcgKzQ2NzIsNyBAQCBwYXNzX3dhY2Nlc3M6OmNoZWNr X2RhbmdsaW5nX3N0b3JlcyAoYmFzaWNfYmxvY2sgYmIsCiAgIEZPUl9FQUNIX0VER0UgKGUs IGVpLCBiYi0+cHJlZHMpCiAgICAgewogICAgICAgYmFzaWNfYmxvY2sgcHJlZCA9IGUtPnNy YzsKLSAgICAgIGNoZWNrX2RhbmdsaW5nX3N0b3JlcyAocHJlZCwgc3RvcmVzLCBiYnMpOwor ICAgICAgY2hlY2tfZGFuZ2xpbmdfc3RvcmVzIChwcmVkLCBkcyk7CiAgICAgfQogfQogCkBA IC00NjE3LDkgKzQ2ODIsOCBAQCBwYXNzX3dhY2Nlc3M6OmNoZWNrX2RhbmdsaW5nX3N0b3Jl cyAoYmFzaWNfYmxvY2sgYmIsCiB2b2lkCiBwYXNzX3dhY2Nlc3M6OmNoZWNrX2RhbmdsaW5n X3N0b3JlcyAoKQogewotICBhdXRvX2JpdG1hcCBiYnM7Ci0gIGhhc2hfc2V0PHRyZWU+IHN0 b3JlczsKLSAgY2hlY2tfZGFuZ2xpbmdfc3RvcmVzIChFWElUX0JMT0NLX1BUUl9GT1JfRk4g KG1fZnVuYyksIHN0b3JlcywgYmJzKTsKKyAgZGVmZXJyZWRfc2V0cyBkczsKKyAgY2hlY2tf ZGFuZ2xpbmdfc3RvcmVzIChFWElUX0JMT0NLX1BUUl9GT1JfRk4gKG1fZnVuYyksIGRzKTsK IH0KIAogLyogQ2hlY2sgZm9yIGFuZCBkaWFnbm9zZSB1c2VzIG9mIGRhbmdsaW5nIHBvaW50 ZXJzIHRvIGF1dG8gb2JqZWN0cwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vV2RhbmdsaW5nLXBvaW50ZXItOC5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21t b24vV2RhbmdsaW5nLXBvaW50ZXItOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi42NDk1NTE1ZDYyOQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3Vp dGUvYy1jKystY29tbW9uL1dkYW5nbGluZy1wb2ludGVyLTguYwpAQCAtMCwwICsxLDUwIEBA CisvKiBWZXJpZnkgLVdkYW5nbGluZy1wb2ludGVyIGZvciByZXR1cm5pbmcgYSBzdHJ1Y3Qg d2l0aCB0aGUgYWRkcmVzcworICAgb2YgYSBsb2NhbCB2YXJpYWJsZS4KKyAgIHsgZGctZG8g Y29tcGlsZSB9CisgICB7IGRnLW9wdGlvbnMgIi1XYWxsIiB9ICovCisKKyNpZiBfX2NwbHVz cGx1cworIyAgZGVmaW5lIEVYVEVSTl9DIGV4dGVybiAiQyIKKyNlbHNlCisjICBkZWZpbmUg RVhURVJOX0MgZXh0ZXJuCisjZW5kaWYKKworRVhURVJOX0Mgdm9pZCogbWVtc2V0ICh2b2lk KiwgaW50LCBfX1NJWkVfVFlQRV9fKTsKKworc3RydWN0IFMKK3sKKyAgdm9pZCAqcCwgKnE7 Cit9OworCisKK2V4dGVybiBpbnQgZWlhW107CisKK3N0cnVjdCBTIG5vd2Fybl9laWEgKHZv aWQpCit7CisgIHN0cnVjdCBTIHMgPSB7IGVpYSwgZWlhIH07CisgIHJldHVybiBzOworfQor CisKK3N0cnVjdCBTIHdhcm5fZWlhX2lhICh2b2lkKQoreworICBpbnQgaWFbMV07ICAgICAg ICAgICAgICAgICAgLy8geyBkZy1ub3RlICInaWEnIGRlY2xhcmVkIGhlcmUiICJub3RlIiB9 CisgIHN0cnVjdCBTIHMgPSB7IGVpYSwgaWEgfTsgICAvLyB7IGRnLXdhcm5pbmcgInN0b3Jp bmcgdGhlIGFkZHJlc3Mgb2YgbG9jYWwgdmFyaWFibGUgJ2lhJyBpbiAnc1wuXChTOjpcKT9x JyIgfQorICByZXR1cm4gczsgICAgICAgICAgICAgICAgICAgLy8geyBkZy1ub3RlICIncycg cmV0dXJuZWQgaGVyZSIgIm5vdGUiIH0KK30KKworc3RydWN0IFMgbm93YXJuX2lhX2lhX21l bXNldCAodm9pZCkKK3sKKyAgaW50IGlhWzFdOworICBzdHJ1Y3QgUyBzID0geyBpYSwgaWEg fTsKKyAgbWVtc2V0ICgmcywgMCwgc2l6ZW9mIHMpOworICByZXR1cm4gczsKK30KKworc3Ry dWN0IFMgbm93YXJuX2lhX2lhX3Jlc2V0ICh2b2lkKQoreworICBpbnQgaWFbMV07CisgIHN0 cnVjdCBTIHMgPSB7IGlhLCBpYSB9OworICBzID0gKHN0cnVjdCBTKSB7IH07CisgIHJldHVy biBzOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvd2Fybi9XZGFuZ2xp bmctcG9pbnRlci00LkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy93YXJuL1dkYW5nbGluZy1w b2ludGVyLTQuQwppbmRleCBiM2QxNDRhOWU2ZC4uMGFhMmExOTY5OGIgMTAwNjQ0Ci0tLSBh L2djYy90ZXN0c3VpdGUvZysrLmRnL3dhcm4vV2RhbmdsaW5nLXBvaW50ZXItNC5DCisrKyBi L2djYy90ZXN0c3VpdGUvZysrLmRnL3dhcm4vV2RhbmdsaW5nLXBvaW50ZXItNC5DCkBAIC0z LDMyICszLDc3IEBACiAgICB7IGRnLWRvIGNvbXBpbGUgfQogICAgeyBkZy1vcHRpb25zICIt TzEgLVdhbGwiIH0gKi8KIAotc3RydWN0IFMKK3N0cnVjdCBBCiB7Ci0gIFMgKHZvaWQgKnAp OiBwIChwKSB7IH0KLSAgUyAoY29uc3QgUyAmcyk6IHAgKHMucCkgeyB9CisgIEEgKHZvaWQg KnApOiBwIChwKSB7IH0KKyAgQSAoY29uc3QgQSAmcyk6IHAgKHMucCkgeyB9CiAKICAgdm9p ZCAqcDsKIH07CiAKK3ZvaWQgc2luayAodm9pZCopOwogCi12b2lkIG5vd2Fybl9hc3NpZ25f YnlfdmFsdWUgKFMgcykKK3ZvaWQgbm93YXJuX2Fzc2lnbl9ieV92YWx1ZSAoQSBzKQogewog ICBpbnQgaTsKLSAgUyB0ICgmaSk7CisgIEEgdCAoJmkpOwogICBzID0gdDsgICAgICAgICAg ICAvLyB7IGRnLWJvZ3VzICItV2RhbmdsaW5nLXBvaW50ZXIiIH0KIH0KIAotdm9pZCBub3dh cm5fYXNzaWduX2J5X3ZhbHVlX2FyZyAoUyBzKQordm9pZCBub3dhcm5fYXNzaWduX2J5X3Zh bHVlX2FyZyAoQSBzKQogewotICBTIHQgKCZzKTsKKyAgQSB0ICgmcyk7CiAgIHMgPSB0OyAg ICAgICAgICAgIC8vIHsgZGctYm9ndXMgIi1XZGFuZ2xpbmctcG9pbnRlciIgfQogfQogCiAK LXZvaWQgd2Fybl9hc3NpZ25fbG9jYWxfYnlfcmVmZXJlbmNlIChTICZzKQordm9pZCB3YXJu X2Fzc2lnbl9sb2NhbF9ieV9yZWZlcmVuY2UgKEEgJnMpCiB7Ci0gIGludCBpOwotICBTIHQg KCZpKTsKKyAgaW50IGk7ICAgICAgICAgICAgLy8geyBkZy1ub3RlICInaScgZGVjbGFyZWQg aGVyZSIgfQorICBBIHQgKCZpKTsKICAgcyA9IHQ7ICAgICAgICAgICAgLy8geyBkZy13YXJu aW5nICItV2RhbmdsaW5nLXBvaW50ZXIiIH0KIH0KKworCitzdHJ1Y3QgQgoreworICBCICh2 b2lkICpwKQorICAgIDogcCAocCkgICAgICAgICAvLyB7IGRnLXdhcm5pbmcgIi1XZGFuZ2xp bmctcG9pbnRlciIgfQorICB7IH0KKworICBCIChjb25zdCBCICZiKTogcCAoYi5wKSB7IH0K KworICB2b2lkICpwOworfTsKKworQiB3YXJuX2Fzc2lnbl9yZXR1cm4gKCkKK3sKKyAgaW50 IGk7ICAgICAgICAgICAgLy8geyBkZy1ub3RlICInaScgZGVjbGFyZWQgaGVyZSIgfQorICBC IGIgKCZpKTsKKyAgKihpbnQqKWIucCA9IDE7CisgIHJldHVybiBiOyAgICAgICAgIC8vIHsg ZGctbm90ZSAicmV0dXJuZWQgaGVyZSIgfQorfQorCisKK0Egbm93YXJuX2Fzc2lnbl9zaW5r X3JldHVybiAoKQoreworICBpbnQgaTsKKyAgQSBhICgmaSk7CisgIHNpbmsgKCZhKTsKKyAg cmV0dXJuIGE7Cit9CisKKworQSB3YXJuX3plcm9fYXNzaWduX3JldHVybiAoaW50IHgpCit7 CisgIGludCBpID0gMDsgICAgICAgIC8vIHsgZGctbWVzc2FnZSAiJ2knIGRlY2xhcmVkIGhl cmUiIH0KKyAgQSBhICgwKTsKKyAgc2luayAoJmEpOworICBhLnAgPSAmaTsgICAgICAgICAv LyB7IGRnLXdhcm5pbmcgIi1XZGFuZ2xpbmctcG9pbnRlciIgfQorICBpZiAoeCkKKyAgICBp ID0geDsKKyAgZWxzZQorICAgIGkgPSArKyooaW50KilhLnA7CisKKyAgcmV0dXJuIGE7ICAg ICAgICAgLy8geyBkZy1tZXNzYWdlICJyZXR1cm5lZCBoZXJlIiB9Cit9Ci0tIAoyLjM0LjEK Cg== --------------TmZqxIN6MPWisuscu7oBhG0M--