From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-io1-xd33.google.com (mail-io1-xd33.google.com [IPv6:2607:f8b0:4864:20::d33]) by sourceware.org (Postfix) with ESMTPS id 63D9A385AC1A; Tue, 1 Feb 2022 18:54:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 63D9A385AC1A Received: by mail-io1-xd33.google.com with SMTP id d188so22414141iof.7; Tue, 01 Feb 2022 10:54:01 -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 :content-language:to:from:subject; bh=Hoi4UEH2YS8YOWxAoWwyyTULRglkhppGOz9YKsRNEIU=; b=gmLlYMzGiPAIW+4MsyMek/AKex3LWUCHdLYVeI1FNNO3KOU9YXeClXPJT0pPxXdhz6 ZO2AiioWr+0XOAT+1YAz+LUWiqGFVj+kvSRo8mi4r1x4lmJeLTmrb6n4S/FyZ+GD7QZk KOcGxwML5oZ+ghNakhgJ6cDF9ahYan5RgH+995Q8FJpe5yTjs4hZ6vbi93Dcc5ZeFTpw xYh5+Rco+zKIH7G0xT+4SGIX97uFzySKHu8jvIetTd8rRWa9N953v0pFX7hjHuhs+eYS +5vsuchD/kdsFvMf67MghK+urHFBaKfpUWkDkIyXN5HP8kYXE1RiFEkI9qucF0UwCGbp 3yTg== X-Gm-Message-State: AOAM5306C0+cDaEa4XVo/ShYXrX/onSK6Aa59gPdM6wL8Es5ZxQSD9XF 57ZqjdkxQGDF21jtiXhFmBzklRdl6wg= X-Google-Smtp-Source: ABdhPJyhKySnh3BRd8IBsYtpWtwgZ9clC0C0/57Uw8xNXP1kDv45Npx3YkSo/kd2s+CzOZ/lM7DwMQ== X-Received: by 2002:a05:6638:1683:: with SMTP id f3mr9339427jat.205.1643741640662; Tue, 01 Feb 2022 10:54:00 -0800 (PST) Received: from [192.168.0.41] (97-118-100-142.hlrn.qwest.net. [97.118.100.142]) by smtp.gmail.com with ESMTPSA id l13sm5607414ilj.24.2022.02.01.10.54.00 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 01 Feb 2022 10:54:00 -0800 (PST) Content-Type: multipart/mixed; boundary="------------BDtq8z9nRMV590d06rBwg4Wo" Message-ID: <2c589ec7-41ec-e581-29ba-1e35825b2d51@gmail.com> Date: Tue, 1 Feb 2022 11:53:59 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.4.0 Content-Language: en-US To: libstdc++@gcc.gnu.org, gcc-patches From: Martin Sebor Subject: [PATCH] declare std::array members attribute const [PR101831] X-Spam-Status: No, score=-10.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE, URIBL_SBL_A 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: libstdc++@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libstdc++ mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 01 Feb 2022 18:54:05 -0000 This is a multi-part message in MIME format. --------------BDtq8z9nRMV590d06rBwg4Wo Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Passing an uninitialized object to a function that takes its argument by const reference is diagnosed by -Wmaybe-uninitialized because most such functions read the argument. The exceptions are functions that don't access the object but instead use its address to compute a result. This includes a number of std::array member functions such as std::array::size() which returns the template argument N. Such functions may be candidates for attribute const which also avoids the warning. The attribute typically only benefits extern functions that IPA cannot infer the property from, but in this case it helps avoid the warning which runs very early on, even without optimization or inlining. The attached patch adds the attribute to a subset of those member functions of std::array. (It doesn't add it to const member functions like cbegin() or front() that return a const_iterator or const reference to the internal data.) It might be possible to infer this property from inline functions earlier on than during IPA and avoid having to annotate them explicitly. That seems like an enhancement worth considering in the future. Tested on x86_64-linux. Martin --------------BDtq8z9nRMV590d06rBwg4Wo Content-Type: text/x-patch; charset=UTF-8; name="gcc-101831.diff" Content-Disposition: attachment; filename="gcc-101831.diff" Content-Transfer-Encoding: base64 RGVjbGFyZSBzdGQ6OmFycmF5IG1lbWJlcnMgd2l0aCBhdHRyaWJ1dGUgY29uc3QgW1BSMTAx ODMxXS4KClJlc29sdmVzOgpQUiBsaWJzdGRjKysvMTAxODMxIC0gU3B1cmlvdXMgbWF5YmUt dW5pbml0aWFsaXplZCB3YXJuaW5nIG9uIHN0ZDo6YXJyYXk6OnNpemUKCmxpYnN0ZGMrKy12 My9DaGFuZ2VMb2c6CgoJKiBpbmNsdWRlL3N0ZC9hcnJheSAoYmVnaW4pOiBEZWNsYXJlIGNv bnN0IG1lbWJlciBmdW5jdGlvbiBhdHRyaWJ1dGUKCWNvbnN0LgoJKGVuZCwgcmJlZ2luLCBy ZW5kLCBzaXplLCBtYXhfc2l6ZSwgZW1wdHksIGRhdGEpOiBTYW1lLgoJKiB0ZXN0c3VpdGUv MjNfY29udGFpbmVycy9hcnJheS9jYXBhY2l0eS9lbXB0eS5jYzogQWRkIHRlc3QgY2FzZXMu CgkqIHRlc3RzdWl0ZS8yM19jb250YWluZXJzL2FycmF5L2NhcGFjaXR5L21heF9zaXplLmNj OiBTYW1lLgoJKiB0ZXN0c3VpdGUvMjNfY29udGFpbmVycy9hcnJheS9jYXBhY2l0eS9zaXpl LmNjOiBTYW1lLgoJKiB0ZXN0c3VpdGUvMjNfY29udGFpbmVycy9hcnJheS9pdGVyYXRvcnMv YmVnaW5fZW5kLmNjOiBOZXcgdGVzdC4KCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5j bHVkZS9zdGQvYXJyYXkgYi9saWJzdGRjKystdjMvaW5jbHVkZS9zdGQvYXJyYXkKaW5kZXgg YjRkOGZjODFhNTIuLmU0NTE0M2ZiMzI5IDEwMDY0NAotLS0gYS9saWJzdGRjKystdjMvaW5j bHVkZS9zdGQvYXJyYXkKKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL2FycmF5CkBA IC0xMjcsNyArMTI3LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAg ICAgIHsgc3RkOjpzd2FwX3JhbmdlcyhiZWdpbigpLCBlbmQoKSwgX19vdGhlci5iZWdpbigp KTsgfQogCiAgICAgICAvLyBJdGVyYXRvcnMuCi0gICAgICBbW19fbm9kaXNjYXJkX19dXQor ICAgICAgW1tfX2dudV9fOjpfX2NvbnN0X18sIF9fbm9kaXNjYXJkX19dXQogICAgICAgX0dM SUJDWFgxN19DT05TVEVYUFIgaXRlcmF0b3IKICAgICAgIGJlZ2luKCkgbm9leGNlcHQKICAg ICAgIHsgcmV0dXJuIGl0ZXJhdG9yKGRhdGEoKSk7IH0KQEAgLTEzNyw3ICsxMzcsNyBAQCBf R0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgYmVnaW4oKSBjb25zdCBu b2V4Y2VwdAogICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoZGF0YSgpKTsgfQogCi0g ICAgICBbW19fbm9kaXNjYXJkX19dXQorICAgICAgW1tfX2dudV9fOjpfX2NvbnN0X18sIF9f bm9kaXNjYXJkX19dXQogICAgICAgX0dMSUJDWFgxN19DT05TVEVYUFIgaXRlcmF0b3IKICAg ICAgIGVuZCgpIG5vZXhjZXB0CiAgICAgICB7IHJldHVybiBpdGVyYXRvcihkYXRhKCkgKyBf Tm0pOyB9CkBAIC0xNDcsNyArMTQ3LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZF UlNJT04KICAgICAgIGVuZCgpIGNvbnN0IG5vZXhjZXB0CiAgICAgICB7IHJldHVybiBjb25z dF9pdGVyYXRvcihkYXRhKCkgKyBfTm0pOyB9CiAKLSAgICAgIFtbX19ub2Rpc2NhcmRfX11d CisgICAgICBbW19fZ251X186Ol9fY29uc3RfXywgX19ub2Rpc2NhcmRfX11dCiAgICAgICBf R0xJQkNYWDE3X0NPTlNURVhQUiByZXZlcnNlX2l0ZXJhdG9yCiAgICAgICByYmVnaW4oKSBu b2V4Y2VwdAogICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KQEAg LTE1Nyw3ICsxNTcsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAg ICAgcmJlZ2luKCkgY29uc3Qgbm9leGNlcHQKICAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVy c2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAKLSAgICAgIFtbX19ub2Rpc2NhcmRfX11dCisgICAg ICBbW19fZ251X186Ol9fY29uc3RfXywgX19ub2Rpc2NhcmRfX11dCiAgICAgICBfR0xJQkNY WDE3X0NPTlNURVhQUiByZXZlcnNlX2l0ZXJhdG9yCiAgICAgICByZW5kKCkgbm9leGNlcHQK ICAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KQEAgLTE4OCwx NSArMTg4LDE1IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICB7 IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAKICAgICAgIC8v IENhcGFjaXR5LgotICAgICAgW1tfX25vZGlzY2FyZF9fXV0KKyAgICAgIFtbX19nbnVfXzo6 X19jb25zdF9fLCBfX25vZGlzY2FyZF9fXV0KICAgICAgIGNvbnN0ZXhwciBzaXplX3R5cGUK ICAgICAgIHNpemUoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfTm07IH0KIAotICAgICAg W1tfX25vZGlzY2FyZF9fXV0KKyAgICAgIFtbX19nbnVfXzo6X19jb25zdF9fLCBfX25vZGlz Y2FyZF9fXV0KICAgICAgIGNvbnN0ZXhwciBzaXplX3R5cGUKICAgICAgIG1heF9zaXplKCkg Y29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX05tOyB9CiAKLSAgICAgIFtbX19ub2Rpc2NhcmRf X11dCisgICAgICBbW19fZ251X186Ol9fY29uc3RfXywgX19ub2Rpc2NhcmRfX11dCiAgICAg ICBjb25zdGV4cHIgYm9vbAogICAgICAgZW1wdHkoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVy biBzaXplKCkgPT0gMDsgfQogCkBAIC0yNzgsNyArMjc4LDcgQEAgX0dMSUJDWFhfQkVHSU5f TkFNRVNQQUNFX1ZFUlNJT04KICAJICAgICAgICAgICA6IF9BVF9UeXBlOjpfU19yZWYoX01f ZWxlbXMsIDApOwogICAgICAgfQogCi0gICAgICBbW19fbm9kaXNjYXJkX19dXQorICAgICAg W1tfX2dudV9fOjpfX2NvbnN0X18sIF9fbm9kaXNjYXJkX19dXQogICAgICAgX0dMSUJDWFgx N19DT05TVEVYUFIgcG9pbnRlcgogICAgICAgZGF0YSgpIG5vZXhjZXB0CiAgICAgICB7IHJl dHVybiBfQVRfVHlwZTo6X1NfcHRyKF9NX2VsZW1zKTsgfQpkaWZmIC0tZ2l0IGEvbGlic3Rk YysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWluZXJzL2FycmF5L2NhcGFjaXR5L2VtcHR5LmNj IGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWluZXJzL2FycmF5L2NhcGFjaXR5 L2VtcHR5LmNjCmluZGV4IDNmM2YyODJhZDlkLi5jZWNiYWUzOWU0NSAxMDA2NDQKLS0tIGEv bGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWluZXJzL2FycmF5L2NhcGFjaXR5L2Vt cHR5LmNjCisrKyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjNfY29udGFpbmVycy9hcnJh eS9jYXBhY2l0eS9lbXB0eS5jYwpAQCAtNDAsOCArNDAsMjYgQEAgdGVzdDAxKCkKICAgfQog fQogCisjcHJhZ21hIEdDQyBwdXNoX29wdGlvbnMKKyNwcmFnbWEgR0NDIG9wdGltaXplICIw IgorCit2b2lkCit0ZXN0MDIoKQoreworICB7CisgICAgY29uc3Qgc2l6ZV90IGxlbiA9IDM7 CisgICAgdHlwZWRlZiBzdGQ6OmFycmF5PGludCwgbGVuPiBhcnJheV90eXBlOworICAgIGFy cmF5X3R5cGUgYTsKKworICAgIFZFUklGWSggYS5lbXB0eSgpID09IGZhbHNlICk7ICAgIC8v IHsgZGctYm9ndXMgIi1XbWF5YmUtdW5pbml0aWFsaXplZCIKKyAgfQorfQorCisjcHJhZ21h IEdDQyBwb3Bfb3B0aW9ucworCiBpbnQgbWFpbigpCiB7CiAgIHRlc3QwMSgpOworICB0ZXN0 MDIoKTsKICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvdGVzdHN1 aXRlLzIzX2NvbnRhaW5lcnMvYXJyYXkvY2FwYWNpdHkvbWF4X3NpemUuY2MgYi9saWJzdGRj KystdjMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvYXJyYXkvY2FwYWNpdHkvbWF4X3NpemUu Y2MKaW5kZXggMGUwMDAyNTg1MzAuLjQ2MjkzMTYxNjFkIDEwMDY0NAotLS0gYS9saWJzdGRj KystdjMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvYXJyYXkvY2FwYWNpdHkvbWF4X3NpemUu Y2MKKysrIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWluZXJzL2FycmF5L2Nh cGFjaXR5L21heF9zaXplLmNjCkBAIC00MCw4ICs0MCwyNiBAQCB0ZXN0MDEoKQogICB9CiB9 CiAKKyNwcmFnbWEgR0NDIHB1c2hfb3B0aW9ucworI3ByYWdtYSBHQ0Mgb3B0aW1pemUgIjAi CisKK3ZvaWQKK3Rlc3QwMigpCit7CisgIHsKKyAgICBjb25zdCBzaXplX3QgbGVuID0gMzsK KyAgICB0eXBlZGVmIHN0ZDo6YXJyYXk8aW50LCBsZW4+IGFycmF5X3R5cGU7CisgICAgYXJy YXlfdHlwZSBhOworCisgICAgVkVSSUZZKCBhLm1heF9zaXplKCkgPT0gbGVuICk7ICAvLyB7 IGRnLWJvZ3VzICItV21heWJlLXVuaW5pdGlhbGl6ZWQiCisgIH0KK30KKworI3ByYWdtYSBH Q0MgcG9wX29wdGlvbnMKKwogaW50IG1haW4oKQogewogICB0ZXN0MDEoKTsKKyAgdGVzdDAy KCk7CiAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0 ZS8yM19jb250YWluZXJzL2FycmF5L2NhcGFjaXR5L3NpemUuY2MgYi9saWJzdGRjKystdjMv dGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvYXJyYXkvY2FwYWNpdHkvc2l6ZS5jYwppbmRleCAz ZTRhYTcxNDNkYy4uZGRkZDkwOWEwYWMgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My90ZXN0 c3VpdGUvMjNfY29udGFpbmVycy9hcnJheS9jYXBhY2l0eS9zaXplLmNjCisrKyBiL2xpYnN0 ZGMrKy12My90ZXN0c3VpdGUvMjNfY29udGFpbmVycy9hcnJheS9jYXBhY2l0eS9zaXplLmNj CkBAIC00MCw4ICs0MCwyNiBAQCB0ZXN0MDEoKQogICB9CiB9CiAKKyNwcmFnbWEgR0NDIHB1 c2hfb3B0aW9ucworI3ByYWdtYSBHQ0Mgb3B0aW1pemUgIjAiCisKK3ZvaWQKK3Rlc3QwMigp Cit7CisgIHsKKyAgICBjb25zdCBzaXplX3QgbGVuID0gMzsKKyAgICB0eXBlZGVmIHN0ZDo6 YXJyYXk8aW50LCBsZW4+IGFycmF5X3R5cGU7CisgICAgYXJyYXlfdHlwZSBhOworCisgICAg VkVSSUZZKCBhLnNpemUoKSA9PSBsZW4gKTsgICAgICAvLyB7IGRnLWJvZ3VzICItV21heWJl LXVuaW5pdGlhbGl6ZWQiCisgIH0KK30KKworI3ByYWdtYSBHQ0MgcG9wX29wdGlvbnMKKwog aW50IG1haW4oKQogewogICB0ZXN0MDEoKTsKKyAgdGVzdDAyKCk7CiAgIHJldHVybiAwOwog fQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWluZXJzL2Fy cmF5L2l0ZXJhdG9ycy9iZWdpbl9lbmQuY2MgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIz X2NvbnRhaW5lcnMvYXJyYXkvaXRlcmF0b3JzL2JlZ2luX2VuZC5jYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjc3NDNhZGYzYzkKLS0tIC9kZXYvbnVsbAor KysgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvYXJyYXkvaXRlcmF0 b3JzL2JlZ2luX2VuZC5jYwpAQCAtMCwwICsxLDU2IEBACisvLyB7IGRnLWRvIGNvbXBpbGUg eyB0YXJnZXQgYysrMTEgfSB9CisvLworLy8gQ29weXJpZ2h0IChDKSAyMDExLTIwMjIgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQg b2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8g c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5k ZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4K Ky8vCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLy8KKy8vIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcz LiAgSWYgbm90IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisj aW5jbHVkZSA8YXJyYXk+CisKKyNwcmFnbWEgR0NDIHB1c2hfb3B0aW9ucworI3ByYWdtYSBH Q0Mgb3B0aW1pemUgIjAiCisKK2V4dGVybiB2b2lkCitzaW5rIChjb25zdCB2b2lkKiwgLi4u KTsKKwordm9pZAordGVzdDAxKCkKK3sKKyAgeworICAgIGNvbnN0IHN0ZDo6c2l6ZV90IGxl biA9IDE7CisgICAgdHlwZWRlZiBzdGQ6OmFycmF5PGludCwgbGVuPiBhcnJheV90eXBlOwor ICAgIHR5cGVkZWYgYXJyYXlfdHlwZTo6aXRlcmF0b3IgaXRlcmF0b3I7OworICAgIGFycmF5 X3R5cGUgYTsKKworICAgIGl0ZXJhdG9yIGIgPSBhLmJlZ2luKCk7ICAgICAgICAgICAvLyB7 IGRnLWJvZ3VzICItV21heWJlLXVuaW5pdGlhbGl6ZWQiIH0KKyAgICBpdGVyYXRvciBlID0g YS5lbmQoKTsgICAgICAgICAgICAgLy8geyBkZy1ib2d1cyAiLVdtYXliZS11bmluaXRpYWxp emVkIiB9CisKKyAgICBzaW5rKCZiLCAmZSk7CisgIH0KKworICB7CisgICAgY29uc3Qgc3Rk OjpzaXplX3QgbGVuID0gMzsKKyAgICB0eXBlZGVmIHN0ZDo6YXJyYXk8aW50LCBsZW4+IGFy cmF5X3R5cGU7CisgICAgdHlwZWRlZiBhcnJheV90eXBlOjpyZXZlcnNlX2l0ZXJhdG9yIHJl dmVyc2VfaXRlcmF0b3I7CisgICAgYXJyYXlfdHlwZSBhOworCisgICAgcmV2ZXJzZV9pdGVy YXRvciBiID0gYS5yYmVnaW4oKTsgIC8vIHsgZGctYm9ndXMgIi1XbWF5YmUtdW5pbml0aWFs aXplZCIgfQorICAgIHJldmVyc2VfaXRlcmF0b3IgZSA9IGEucmVuZCgpOyAgICAvLyB7IGRn LWJvZ3VzICItV21heWJlLXVuaW5pdGlhbGl6ZWQiIH0KKworICAgIHNpbmsoJmIsICZlKTsK KyAgfQorfQorCisjcHJhZ21hIEdDQyBwb3Bfb3B0aW9ucwo= --------------BDtq8z9nRMV590d06rBwg4Wo--