From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x334.google.com (mail-wm1-x334.google.com [IPv6:2a00:1450:4864:20::334]) by sourceware.org (Postfix) with ESMTPS id 47CFC3858424; Mon, 15 Aug 2022 20:26:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 47CFC3858424 Received: by mail-wm1-x334.google.com with SMTP id m3-20020a05600c3b0300b003a5e0557150so58739wms.0; Mon, 15 Aug 2022 13:26:53 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:references:cc:to:from:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc; bh=jc5Ei5SBCj2CE3DZaTdPMHJKbJHYvmqcUpHvGZ/1q/c=; b=iaARRYGDr/0O5K69hjU92geNao+W4e+tyDoy5DCNr3/jeH3u7mMSDwVOC2Lgdnx7qo h7BcPvPpbPx8LbhqwF+Tbz5LdmNOrgoEcTKDPqPGumUGTsfmCC6rLqsMiBrGlkQbex6U HX8m2IPs2JF3+8tPayTFTaGDdQ8QWA50zVD63maVtyFb7hPoi5YQ+dAnxpfmFX4xW2k6 jEYi/WQSR+o3NGyOWYMLZHhGqnQWEQkMgXaoFsYi3jWRbg9slT5GauM+u6hvMNGf+X4/ 93GA0CXppkf5s7eRApnTCRKxa7g9F9b6llAdjryLejjcLu7wWeLgT6IOOxZLAipAWkhA pmig== X-Gm-Message-State: ACgBeo0E7QzSqcf3HzaugpDM/pZB67+BH3XxpCO7csL6pc9JByd2jdHf 4wdTxxQZn3PErql6mJ2TVOv4PVSQIyI= X-Google-Smtp-Source: AA6agR5F+Ul5YD8a8irTqKWF/ql0aP7HNc73u84JpgR4FiFa+zP8Cr/S4ag++AYgoh5K+TntXriHqw== X-Received: by 2002:a05:600c:2114:b0:3a5:4f31:3063 with SMTP id u20-20020a05600c211400b003a54f313063mr17976431wml.50.1660595211713; Mon, 15 Aug 2022 13:26:51 -0700 (PDT) Received: from ?IPV6:2a01:e0a:1dc:b1c0:c84f:5e08:55fd:6858? ([2a01:e0a:1dc:b1c0:c84f:5e08:55fd:6858]) by smtp.googlemail.com with ESMTPSA id k2-20020a7bc402000000b003a32297598csm10465110wmi.43.2022.08.15.13.26.51 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 15 Aug 2022 13:26:51 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------fkwZ5Ksaypg2vIqRO4q06Xjo" Message-ID: <0ec115b4-917a-403e-88fe-6a9360659bd8@gmail.com> Date: Mon, 15 Aug 2022 22:26:50 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: [PATCH][_GLIBCXX_DEBUG] Add basic_string::starts_with/ends_with checks Content-Language: fr From: =?UTF-8?Q?Fran=c3=a7ois_Dumont?= To: "libstdc++@gcc.gnu.org" Cc: gcc-patches References: In-Reply-To: X-Spam-Status: No, score=-9.6 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.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) 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: Mon, 15 Aug 2022 20:26:56 -0000 This is a multi-part message in MIME format. --------------fkwZ5Ksaypg2vIqRO4q06Xjo Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit With the patch ! On 14/08/22 17:32, François Dumont wrote: > I think we can add those checks. > > Note that I wonder if it was needed as in basic_string_view I see > usages of __attribute__((__nonnull__)). But running the test I saw no > impact even after I try to apply this attribute to the > starts_with/ends_with methods themselves. > > Also note that several checks like the ones I am adding here are > XFAILS when using 'make check' because of the segfault rather than on > a proper debug checks. Would you prefer to add dg-require-debug-mode > to those ? > >     libstdc++: [_GLIBCXX_DEBUG] Add > basic_string::starts_with/ends_with checks > >     Add simple checks on C string parameters which should not be null. > >     Review null string checks to show: >     _String != nullptr > >     rather than: >     _String != 0 > >     libstdc++-v3/ChangeLog: > >             * include/bits/basic_string.h (starts_with, ends_with): > Add __glibcxx_check_string. >             * include/bits/cow_string.h (starts_with, ends_with): > Likewise. >             * include/debug/debug.h: Use nullptr rather than '0' in > checks in C++11. >             * include/debug/string: Likewise. >             * > testsuite/21_strings/basic_string/operations/ends_with/char.cc: Use > __gnu_test::string. >             * > testsuite/21_strings/basic_string/operations/ends_with/wchar_t.cc: Use > __gnu_test::wstring. >             * > testsuite/21_strings/basic_string/operations/starts_with/wchar_t.cc: > Use __gnu_test::wstring. >             * > testsuite/21_strings/basic_string/operations/starts_with/char.cc: Use > __gnu_test::string. >             * > testsuite/21_strings/basic_string/operations/ends_with/char_neg.cc: > New test. >             * > testsuite/21_strings/basic_string/operations/ends_with/wchar_t_neg.cc: > New test. >             * > testsuite/21_strings/basic_string/operations/starts_with/char_neg.cc: > New test. >             * > testsuite/21_strings/basic_string/operations/starts_with/wchar_t_neg.cc: > New test. > > Tested under linux normal and debug modes. > > François > > --------------fkwZ5Ksaypg2vIqRO4q06Xjo Content-Type: text/x-patch; charset=UTF-8; name="debug_string_starts_ends_with.patch" Content-Disposition: attachment; filename="debug_string_starts_ends_with.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvYmFzaWNfc3RyaW5nLmgg Yi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Jhc2ljX3N0cmluZy5oCmluZGV4IGIwNGZi YTk1Njc4Li5kMDYzMzBlNmM0OCAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUv Yml0cy9iYXNpY19zdHJpbmcuaAorKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Jh c2ljX3N0cmluZy5oCkBAIC0zNDAyLDcgKzM0MDIsMTAgQEAgX0dMSUJDWFhfQkVHSU5fTkFN RVNQQUNFX0NYWDExCiAKICAgICAgIGNvbnN0ZXhwciBib29sCiAgICAgICBzdGFydHNfd2l0 aChjb25zdCBfQ2hhclQqIF9feCkgY29uc3Qgbm9leGNlcHQKLSAgICAgIHsgcmV0dXJuIF9f c3ZfdHlwZSh0aGlzLT5kYXRhKCksIHRoaXMtPnNpemUoKSkuc3RhcnRzX3dpdGgoX194KTsg fQorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmcoX194KTsKKwlyZXR1cm4g X19zdl90eXBlKHRoaXMtPmRhdGEoKSwgdGhpcy0+c2l6ZSgpKS5zdGFydHNfd2l0aChfX3gp OworICAgICAgfQogCiAgICAgICBjb25zdGV4cHIgYm9vbAogICAgICAgZW5kc193aXRoKGJh c2ljX3N0cmluZ192aWV3PF9DaGFyVCwgX1RyYWl0cz4gX194KSBjb25zdCBub2V4Y2VwdApA QCAtMzQxNCw3ICszNDE3LDEwIEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9DWFgxMQog CiAgICAgICBjb25zdGV4cHIgYm9vbAogICAgICAgZW5kc193aXRoKGNvbnN0IF9DaGFyVCog X194KSBjb25zdCBub2V4Y2VwdAotICAgICAgeyByZXR1cm4gX19zdl90eXBlKHRoaXMtPmRh dGEoKSwgdGhpcy0+c2l6ZSgpKS5lbmRzX3dpdGgoX194KTsgfQorICAgICAgeworCV9fZ2xp YmN4eF9yZXF1aXJlc19zdHJpbmcoX194KTsKKwlyZXR1cm4gX19zdl90eXBlKHRoaXMtPmRh dGEoKSwgdGhpcy0+c2l6ZSgpKS5lbmRzX3dpdGgoX194KTsKKyAgICAgIH0KICNlbmRpZiAv LyBDKysyMAogCiAjaWYgX19jcGx1c3BsdXMgPiAyMDIwMDJMCmRpZmYgLS1naXQgYS9saWJz dGRjKystdjMvaW5jbHVkZS9iaXRzL2Nvd19zdHJpbmcuaCBiL2xpYnN0ZGMrKy12My9pbmNs dWRlL2JpdHMvY293X3N0cmluZy5oCmluZGV4IGYxNmUzM2FjMWVmLi41OWIzNmExMDA2YSAx MDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9jb3dfc3RyaW5nLmgKKysr IGIvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9jb3dfc3RyaW5nLmgKQEAgLTMwMTQsNyAr MzAxNCwxMCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogCiAgICAgICBi b29sCiAgICAgICBzdGFydHNfd2l0aChjb25zdCBfQ2hhclQqIF9feCkgY29uc3Qgbm9leGNl cHQKLSAgICAgIHsgcmV0dXJuIF9fc3ZfdHlwZSh0aGlzLT5kYXRhKCksIHRoaXMtPnNpemUo KSkuc3RhcnRzX3dpdGgoX194KTsgfQorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19z dHJpbmcoX194KTsKKwlyZXR1cm4gX19zdl90eXBlKHRoaXMtPmRhdGEoKSwgdGhpcy0+c2l6 ZSgpKS5zdGFydHNfd2l0aChfX3gpOworICAgICAgfQogCiAgICAgICBib29sCiAgICAgICBl bmRzX3dpdGgoYmFzaWNfc3RyaW5nX3ZpZXc8X0NoYXJULCBfVHJhaXRzPiBfX3gpIGNvbnN0 IG5vZXhjZXB0CkBAIC0zMDI2LDcgKzMwMjksMTAgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQ QUNFX1ZFUlNJT04KIAogICAgICAgYm9vbAogICAgICAgZW5kc193aXRoKGNvbnN0IF9DaGFy VCogX194KSBjb25zdCBub2V4Y2VwdAotICAgICAgeyByZXR1cm4gX19zdl90eXBlKHRoaXMt PmRhdGEoKSwgdGhpcy0+c2l6ZSgpKS5lbmRzX3dpdGgoX194KTsgfQorICAgICAgeworCV9f Z2xpYmN4eF9yZXF1aXJlc19zdHJpbmcoX194KTsKKwlyZXR1cm4gX19zdl90eXBlKHRoaXMt PmRhdGEoKSwgdGhpcy0+c2l6ZSgpKS5lbmRzX3dpdGgoX194KTsKKyAgICAgIH0KICNlbmRp ZiAvLyBDKysyMAogCiAjaWYgX19jcGx1c3BsdXMgPiAyMDIwMTFMCmRpZmYgLS1naXQgYS9s aWJzdGRjKystdjMvaW5jbHVkZS9kZWJ1Zy9kZWJ1Zy5oIGIvbGlic3RkYysrLXYzL2luY2x1 ZGUvZGVidWcvZGVidWcuaAppbmRleCAyOGUyNTBmMGM1MC4uZjQyMzM3NjA0MjYgMTAwNjQ0 Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2RlYnVnL2RlYnVnLmgKKysrIGIvbGlic3Rk YysrLXYzL2luY2x1ZGUvZGVidWcvZGVidWcuaApAQCAtMTE4LDEwICsxMTgsMTcgQEAgbmFt ZXNwYWNlIF9fZ251X2RlYnVnCiAgIF9fZ2xpYmN4eF9jaGVja19oZWFwKF9GaXJzdCxfTGFz dCkKICMgZGVmaW5lIF9fZ2xpYmN4eF9yZXF1aXJlc19oZWFwX3ByZWQoX0ZpcnN0LF9MYXN0 LF9QcmVkKQlcCiAgIF9fZ2xpYmN4eF9jaGVja19oZWFwX3ByZWQoX0ZpcnN0LF9MYXN0LF9Q cmVkKQotIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfU3RyaW5nKQlcCisj IGlmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorIyAgZGVmaW5lIF9fZ2xpYmN4eF9yZXF1aXJl c19zdHJpbmcoX1N0cmluZykJXAogICBfR0xJQkNYWF9ERUJVR19QRURBU1NFUlQoX1N0cmlu ZyAhPSAwKQotIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZ19sZW4oX1N0cmlu ZyxfTGVuKQlcCisjICBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZ19sZW4oX1N0 cmluZyxfTGVuKQlcCiAgIF9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfU3RyaW5nICE9IDAg fHwgX0xlbiA9PSAwKQorIyBlbHNlCisjICBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3N0 cmluZyhfU3RyaW5nKQlcCisgIF9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfU3RyaW5nICE9 IG51bGxwdHIpCisjICBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZ19sZW4oX1N0 cmluZyxfTGVuKQlcCisgIF9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfU3RyaW5nICE9IG51 bGxwdHIgfHwgX0xlbiA9PSAwKQorIyBlbmRpZgogIyBkZWZpbmUgX19nbGliY3h4X3JlcXVp cmVzX2lycmVmbGV4aXZlKF9GaXJzdCxfTGFzdCkJXAogICBfX2dsaWJjeHhfY2hlY2tfaXJy ZWZsZXhpdmUoX0ZpcnN0LF9MYXN0KQogIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX2ly cmVmbGV4aXZlMihfRmlyc3QsX0xhc3QpCVwKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9p bmNsdWRlL2RlYnVnL3N0cmluZyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2RlYnVnL3N0cmlu ZwppbmRleCBjMzJlYjQxZWFjZC4uZjAyYzc0NDMxZWQgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMr Ky12My9pbmNsdWRlL2RlYnVnL3N0cmluZworKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9k ZWJ1Zy9zdHJpbmcKQEAgLTUwLDE0ICs1MCwyNSBAQAogI2VuZGlmCiAKICNpZmRlZiBfR0xJ QkNYWF9ERUJVR19QRURBTlRJQwotIyBkZWZpbmUgX19nbGliY3h4X2NoZWNrX3N0cmluZyhf U3RyaW5nKQkJCQlcCisjIGlmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorIyAgZGVmaW5lIF9f Z2xpYmN4eF9jaGVja19zdHJpbmcoX1N0cmluZykJCQlcCiAgIF9HTElCQ1hYX0RFQlVHX1ZF UklGWV9TVFJfQ09ORF9BVChfU3RyaW5nICE9IDAsCQlcCiAJCQkJICAgIF9fRklMRV9fLCBf X0xJTkVfXywJCVwKIAkJCQkgICAgX19QUkVUVFlfRlVOQ1RJT05fXyk7Ci0jIGRlZmluZSBf X2dsaWJjeHhfY2hlY2tfc3RyaW5nX2xlbihfU3RyaW5nLF9MZW4pCQlcCisjICBkZWZpbmUg X19nbGliY3h4X2NoZWNrX3N0cmluZ19sZW4oX1N0cmluZyxfTGVuKQkJXAogICBfR0xJQkNY WF9ERUJVR19WRVJJRllfU1RSX0NPTkRfQVQoX1N0cmluZyAhPSAwIHx8IF9MZW4gPT0gMCwJ XAogCQkJCSAgICBfX0ZJTEVfXywgX19MSU5FX18sCQlcCiAJCQkJICAgIF9fUFJFVFRZX0ZV TkNUSU9OX18pOworIyBlbHNlCisjICBkZWZpbmUgX19nbGliY3h4X2NoZWNrX3N0cmluZyhf U3RyaW5nKQkJCVwKKyAgX0dMSUJDWFhfREVCVUdfVkVSSUZZX1NUUl9DT05EX0FUKF9TdHJp bmcgIT0gbnVsbHB0ciwJCVwKKwkJCQkgICAgX19GSUxFX18sIF9fTElORV9fLAkJXAorCQkJ CSAgICBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyMgIGRlZmluZSBfX2dsaWJjeHhfY2hlY2tf c3RyaW5nX2xlbihfU3RyaW5nLF9MZW4pCQlcCisgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWV9T VFJfQ09ORF9BVChfU3RyaW5nICE9IG51bGxwdHIgfHwgX0xlbiA9PSAwLAlcCisJCQkJICAg IF9fRklMRV9fLCBfX0xJTkVfXywJCVwKKwkJCQkgICAgX19QUkVUVFlfRlVOQ1RJT05fXyk7 CisjIGVuZGlmCiAjZWxzZQogIyBkZWZpbmUgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfU3Ry aW5nKQogIyBkZWZpbmUgX19nbGliY3h4X2NoZWNrX3N0cmluZ19sZW4oX1N0cmluZyxfTGVu KQpAQCAtNzUsOCArODYsMTMgQEAgbmFtZXNwYWNlIF9fZ251X2RlYnVnCiAJCSAgIGNvbnN0 IGNoYXIqIF9fZnVuY3Rpb24gX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpKQogICAgIHsK ICNpZmRlZiBfR0xJQkNYWF9ERUJVR19QRURBTlRJQworIyBpZiBfX2NwbHVzcGx1cyA8IDIw MTEwM0wKICAgICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWV9TVFJfQ09ORF9BVChfX3MgIT0g MCB8fCBfX24gPT0gMCwKIAkJCQkJX19maWxlLCBfX2xpbmUsIF9fZnVuY3Rpb24pOworIyBl bHNlCisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRllfU1RSX0NPTkRfQVQoX19zICE9IG51 bGxwdHIgfHwgX19uID09IDAsCisJCQkJCV9fZmlsZSwgX19saW5lLCBfX2Z1bmN0aW9uKTsK KyMgZW5kaWYKICNlbmRpZgogICAgICAgcmV0dXJuIF9fczsKICAgICB9CkBAIC05MCw4ICsx MDYsMTMgQEAgbmFtZXNwYWNlIF9fZ251X2RlYnVnCiAJCSAgIGNvbnN0IGNoYXIqIF9fZnVu Y3Rpb24gX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpKQogICAgIHsKICNpZmRlZiBfR0xJ QkNYWF9ERUJVR19QRURBTlRJQworIyBpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKICAgICAg IF9HTElCQ1hYX0RFQlVHX1ZFUklGWV9TVFJfQ09ORF9BVChfX3MgIT0gMCwKIAkJCQkJX19m aWxlLCBfX2xpbmUsIF9fZnVuY3Rpb24pOworIyBlbHNlCisgICAgICBfR0xJQkNYWF9ERUJV R19WRVJJRllfU1RSX0NPTkRfQVQoX19zICE9IG51bGxwdHIsCisJCQkJCV9fZmlsZSwgX19s aW5lLCBfX2Z1bmN0aW9uKTsKKyMgZW5kaWYKICNlbmRpZgogICAgICAgcmV0dXJuIF9fczsK ICAgICB9CkBAIC0xMDMzLDYgKzEwNTQsMjYgQEAgbmFtZXNwYWNlIF9fZ251X2RlYnVnCiAJ cmV0dXJuIF9CYXNlOjpjb21wYXJlKF9fcG9zMSwgX19uMSwgX19zLCBfX24yKTsKICAgICAg IH0KIAorI2lmIF9fY3BsdXNwbHVzID49IDIwMjAwMkwKKyAgICAgIHVzaW5nIF9CYXNlOjpz dGFydHNfd2l0aDsKKworICAgICAgX19hdHRyaWJ1dGVfXygoX19ub25udWxsX18pKSBjb25z dGV4cHIgYm9vbAorICAgICAgc3RhcnRzX3dpdGgoY29uc3QgX0NoYXJUKiBfX3gpIGNvbnN0 IG5vZXhjZXB0CisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX3N0cmluZyhfX3gpOworCXJl dHVybiBfQmFzZTo6c3RhcnRzX3dpdGgoX194KTsKKyAgICAgIH0KKworICAgICAgdXNpbmcg X0Jhc2U6OmVuZHNfd2l0aDsKKworICAgICAgY29uc3RleHByIGJvb2wKKyAgICAgIGVuZHNf d2l0aChjb25zdCBfQ2hhclQqIF9feCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsKKwlfX2ds aWJjeHhfY2hlY2tfc3RyaW5nKF9feCk7CisJcmV0dXJuIF9CYXNlOjplbmRzX3dpdGgoX194 KTsKKyAgICAgIH0KKyNlbmRpZgorCiAgICAgICBfQmFzZSYKICAgICAgIF9NX2Jhc2UoKSBf R0xJQkNYWF9OT0VYQ0VQVAkJeyByZXR1cm4gKnRoaXM7IH0KIApkaWZmIC0tZ2l0IGEvbGli c3RkYysrLXYzL3Rlc3RzdWl0ZS8yMV9zdHJpbmdzL2Jhc2ljX3N0cmluZy9vcGVyYXRpb25z L2VuZHNfd2l0aC9jaGFyLmNjIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yMV9zdHJpbmdz L2Jhc2ljX3N0cmluZy9vcGVyYXRpb25zL2VuZHNfd2l0aC9jaGFyLmNjCmluZGV4IGNmZTE4 ZTAxODZjLi4zY2Y4NTEyMWUzNiAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0 ZS8yMV9zdHJpbmdzL2Jhc2ljX3N0cmluZy9vcGVyYXRpb25zL2VuZHNfd2l0aC9jaGFyLmNj CisrKyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjFfc3RyaW5ncy9iYXNpY19zdHJpbmcv b3BlcmF0aW9ucy9lbmRzX3dpdGgvY2hhci5jYwpAQCAtMjAsNyArMjAsNyBAQAogCiAvLyBi YXNpY19zdHJpbmcgZW5kc193aXRoCiAKLSNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8 dGVzdHN1aXRlX3N0cmluZy5oPgogI2luY2x1ZGUgPHRlc3RzdWl0ZV9ob29rcy5oPgogCiB2 b2lkCkBAIC0zMSw3ICszMSw3IEBAIHRlc3QwMSgpCiAgIGNvbnN0IGNoYXIgY3N0cl9zdWYy W10gPSAiLnJnYiI7CiAgIGNvbnN0IHN0ZDo6c3RyaW5nX3ZpZXcgc3Zfc3VmMigiLnJnYiIp OwogCi0gIGNvbnN0IHN0ZDo6c3RyaW5nIHNfdGVzdCgic2x1Z3Mvc2xpbXkuanBnIik7Cisg IGNvbnN0IF9fZ251X3Rlc3Q6OnN0cmluZyBzX3Rlc3QoInNsdWdzL3NsaW15LmpwZyIpOwog CiAgIGNvbnN0IGF1dG8gY3N0cl9pbl9zbHVncyA9IHNfdGVzdC5lbmRzX3dpdGgoY3N0cl9z dWYpOwogICBWRVJJRlkoIGNzdHJfaW5fc2x1Z3MgKTsKZGlmZiAtLWdpdCBhL2xpYnN0ZGMr Ky12My90ZXN0c3VpdGUvMjFfc3RyaW5ncy9iYXNpY19zdHJpbmcvb3BlcmF0aW9ucy9lbmRz X3dpdGgvY2hhcl9uZWcuY2MgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIxX3N0cmluZ3Mv YmFzaWNfc3RyaW5nL29wZXJhdGlvbnMvZW5kc193aXRoL2NoYXJfbmVnLmNjCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43YTdiOGRkMDc3ZAotLS0gL2Rldi9u dWxsCisrKyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjFfc3RyaW5ncy9iYXNpY19zdHJp bmcvb3BlcmF0aW9ucy9lbmRzX3dpdGgvY2hhcl9uZWcuY2MKQEAgLTAsMCArMSwzNyBAQAor Ly8gQ29weXJpZ2h0IChDKSAyMDIyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor Ly8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAg VGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9u KQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK Ky8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFyeTsg c2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgorLy8KKy8vIHsgZGctb3B0aW9ucyAiLXN0ZD1nbnUrKzJhIC1P MCIgfQorLy8geyBkZy1kbyBydW4geyB0YXJnZXQgYysrMmEgeGZhaWwgKi0qLSogfSB9CisK KyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfUEVEQU5USUMKKworI2luY2x1ZGUgPHRlc3RzdWl0 ZV9zdHJpbmcuaD4KKwordm9pZAordGVzdDAxKCkKK3sKKyAgY29uc3QgX19nbnVfdGVzdDo6 c3RyaW5nIHNfdGVzdCgic2x1Z3Mvc2xpbXkuanBnIik7CisgIHNfdGVzdC5lbmRzX3dpdGgo bnVsbHB0cik7Cit9CisKK2ludAorbWFpbigpCit7CisgIHRlc3QwMSgpOworICByZXR1cm4g MDsKK30KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjFfc3RyaW5ncy9i YXNpY19zdHJpbmcvb3BlcmF0aW9ucy9lbmRzX3dpdGgvd2NoYXJfdC5jYyBiL2xpYnN0ZGMr Ky12My90ZXN0c3VpdGUvMjFfc3RyaW5ncy9iYXNpY19zdHJpbmcvb3BlcmF0aW9ucy9lbmRz X3dpdGgvd2NoYXJfdC5jYwppbmRleCBkMjdlODI0NmZiOC4uNzBiNTIyZmY2OWUgMTAwNjQ0 Ci0tLSBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjFfc3RyaW5ncy9iYXNpY19zdHJpbmcv b3BlcmF0aW9ucy9lbmRzX3dpdGgvd2NoYXJfdC5jYworKysgYi9saWJzdGRjKystdjMvdGVz dHN1aXRlLzIxX3N0cmluZ3MvYmFzaWNfc3RyaW5nL29wZXJhdGlvbnMvZW5kc193aXRoL3dj aGFyX3QuY2MKQEAgLTIwLDcgKzIwLDcgQEAKIAogLy8gYmFzaWNfc3RyaW5nIGVuZHNfd2l0 aAogCi0jaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHRlc3RzdWl0ZV9zdHJpbmcuaD4K ICNpbmNsdWRlIDx0ZXN0c3VpdGVfaG9va3MuaD4KIAogdm9pZApAQCAtMzEsNyArMzEsNyBA QCB0ZXN0MDEoKQogICBjb25zdCB3Y2hhcl90IGNzdHJfc3VmMltdID0gTCIucmdiIjsKICAg Y29uc3Qgc3RkOjp3c3RyaW5nX3ZpZXcgc3Zfc3VmMihMIi5yZ2IiKTsKIAotICBjb25zdCBz dGQ6OndzdHJpbmcgc190ZXN0KEwic2x1Z3Mvc2xpbXkuanBnIik7CisgIGNvbnN0IF9fZ251 X3Rlc3Q6OndzdHJpbmcgc190ZXN0KEwic2x1Z3Mvc2xpbXkuanBnIik7CiAKICAgY29uc3Qg YXV0byBjc3RyX2luX3NsdWdzID0gc190ZXN0LmVuZHNfd2l0aChjc3RyX3N1Zik7CiAgIFZF UklGWSggY3N0cl9pbl9zbHVncyApOwpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL3Rlc3Rz dWl0ZS8yMV9zdHJpbmdzL2Jhc2ljX3N0cmluZy9vcGVyYXRpb25zL2VuZHNfd2l0aC93Y2hh cl90X25lZy5jYyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjFfc3RyaW5ncy9iYXNpY19z dHJpbmcvb3BlcmF0aW9ucy9lbmRzX3dpdGgvd2NoYXJfdF9uZWcuY2MKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE2ODgxYmY0MDZiCi0tLSAvZGV2L251bGwK KysrIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yMV9zdHJpbmdzL2Jhc2ljX3N0cmluZy9v cGVyYXRpb25zL2VuZHNfd2l0aC93Y2hhcl90X25lZy5jYwpAQCAtMCwwICsxLDM3IEBACisv LyBDb3B5cmlnaHQgKEMpIDIwMjIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisv LworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBU aGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24p CisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor Ly8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBz ZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uCisvLworLy8geyBkZy1vcHRpb25zICItc3RkPWdudSsrMmEgLU8w IiB9CisvLyB7IGRnLWRvIHJ1biB7IHRhcmdldCBjKysyYSB4ZmFpbCAqLSotKiB9IH0KKwor I2RlZmluZSBfR0xJQkNYWF9ERUJVR19QRURBTlRJQworCisjaW5jbHVkZSA8dGVzdHN1aXRl X3N0cmluZy5oPgorCit2b2lkCit0ZXN0MDEoKQoreworICBjb25zdCBfX2dudV90ZXN0Ojp3 c3RyaW5nIHNfdGVzdChMInNsdWdzL3NsaW15LmpwZyIpOworICBzX3Rlc3QuZW5kc193aXRo KG51bGxwdHIpOworfQorCitpbnQKK21haW4oKQoreworICB0ZXN0MDEoKTsKKyAgcmV0dXJu IDA7Cit9CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIxX3N0cmluZ3Mv YmFzaWNfc3RyaW5nL29wZXJhdGlvbnMvc3RhcnRzX3dpdGgvY2hhci5jYyBiL2xpYnN0ZGMr Ky12My90ZXN0c3VpdGUvMjFfc3RyaW5ncy9iYXNpY19zdHJpbmcvb3BlcmF0aW9ucy9zdGFy dHNfd2l0aC9jaGFyLmNjCmluZGV4IDVjMGIzYWZjMGI2Li5kZGRmNTFjZWUxNiAxMDA2NDQK LS0tIGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yMV9zdHJpbmdzL2Jhc2ljX3N0cmluZy9v cGVyYXRpb25zL3N0YXJ0c193aXRoL2NoYXIuY2MKKysrIGIvbGlic3RkYysrLXYzL3Rlc3Rz dWl0ZS8yMV9zdHJpbmdzL2Jhc2ljX3N0cmluZy9vcGVyYXRpb25zL3N0YXJ0c193aXRoL2No YXIuY2MKQEAgLTIwLDcgKzIwLDcgQEAKIAogLy8gYmFzaWNfc3RyaW5nIGJlZ2luc193aXRo CiAKLSNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dGVzdHN1aXRlX3N0cmluZy5oPgog I2luY2x1ZGUgPHRlc3RzdWl0ZV9ob29rcy5oPgogCiB2b2lkCkBAIC0zMSw3ICszMSw3IEBA IHRlc3QwMSgpCiAgIGNvbnN0IGNoYXIgY3N0cl9kaXIyW10gPSAid29ybXMvIjsKICAgY29u c3Qgc3RkOjpzdHJpbmdfdmlldyBzdl9kaXIyKCJ3b3Jtcy8iKTsKIAotICBjb25zdCBzdGQ6 OnN0cmluZyBzX3Rlc3QoInNsdWdzL3NsaW15LmpwZyIpOworICBjb25zdCBfX2dudV90ZXN0 OjpzdHJpbmcgc190ZXN0KCJzbHVncy9zbGlteS5qcGciKTsKIAogICBjb25zdCBhdXRvIGNz dHJfaW5fc2x1Z3MgPSBzX3Rlc3Quc3RhcnRzX3dpdGgoY3N0cl9kaXIpOwogICBWRVJJRlko IGNzdHJfaW5fc2x1Z3MgKTsKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUv MjFfc3RyaW5ncy9iYXNpY19zdHJpbmcvb3BlcmF0aW9ucy9zdGFydHNfd2l0aC9jaGFyX25l Zy5jYyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjFfc3RyaW5ncy9iYXNpY19zdHJpbmcv b3BlcmF0aW9ucy9zdGFydHNfd2l0aC9jaGFyX25lZy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uZjM1N2FlZjIyODkKLS0tIC9kZXYvbnVsbAorKysgYi9s aWJzdGRjKystdjMvdGVzdHN1aXRlLzIxX3N0cmluZ3MvYmFzaWNfc3RyaW5nL29wZXJhdGlv bnMvc3RhcnRzX3dpdGgvY2hhcl9uZWcuY2MKQEAgLTAsMCArMSwzNyBAQAorLy8gQ29weXJp Z2h0IChDKSAyMDIyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRo aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJy YXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55 IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK Ky8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm aWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LgorLy8KKy8vIHsgZGctb3B0aW9ucyAiLXN0ZD1nbnUrKzJhIC1PMCIgfQorLy8g eyBkZy1kbyBydW4geyB0YXJnZXQgYysrMmEgeGZhaWwgKi0qLSogfSB9CisKKyNkZWZpbmUg X0dMSUJDWFhfREVCVUdfUEVEQU5USUMKKworI2luY2x1ZGUgPHRlc3RzdWl0ZV9zdHJpbmcu aD4KKwordm9pZAordGVzdDAxKCkKK3sKKyAgY29uc3QgX19nbnVfdGVzdDo6c3RyaW5nIHNf dGVzdCgic2x1Z3Mvc2xpbXkuanBnIik7CisgIHNfdGVzdC5zdGFydHNfd2l0aChudWxscHRy KTsKK30KKworaW50CittYWluKCkKK3sKKyAgdGVzdDAxKCk7CisgIHJldHVybiAwOworfQpk aWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yMV9zdHJpbmdzL2Jhc2ljX3N0 cmluZy9vcGVyYXRpb25zL3N0YXJ0c193aXRoL3djaGFyX3QuY2MgYi9saWJzdGRjKystdjMv dGVzdHN1aXRlLzIxX3N0cmluZ3MvYmFzaWNfc3RyaW5nL29wZXJhdGlvbnMvc3RhcnRzX3dp dGgvd2NoYXJfdC5jYwppbmRleCBlZGE3MzIxMmVhMC4uNzQ3YjIzYWU1YzIgMTAwNjQ0Ci0t LSBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjFfc3RyaW5ncy9iYXNpY19zdHJpbmcvb3Bl cmF0aW9ucy9zdGFydHNfd2l0aC93Y2hhcl90LmNjCisrKyBiL2xpYnN0ZGMrKy12My90ZXN0 c3VpdGUvMjFfc3RyaW5ncy9iYXNpY19zdHJpbmcvb3BlcmF0aW9ucy9zdGFydHNfd2l0aC93 Y2hhcl90LmNjCkBAIC0yMCw3ICsyMCw3IEBACiAKIC8vIGJhc2ljX3N0cmluZyBiZWdpbnNf d2l0aAogCi0jaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHRlc3RzdWl0ZV9zdHJpbmcu aD4KICNpbmNsdWRlIDx0ZXN0c3VpdGVfaG9va3MuaD4KIAogdm9pZApAQCAtMzEsNyArMzEs NyBAQCB0ZXN0MDEoKQogICBjb25zdCB3Y2hhcl90IGNzdHJfZGlyMltdID0gTCJ3b3Jtcy8i OwogICBjb25zdCBzdGQ6OndzdHJpbmdfdmlldyBzdl9kaXIyKEwid29ybXMvIik7CiAKLSAg Y29uc3Qgc3RkOjp3c3RyaW5nIHNfdGVzdChMInNsdWdzL3NsaW15LmpwZyIpOworICBjb25z dCBfX2dudV90ZXN0Ojp3c3RyaW5nIHNfdGVzdChMInNsdWdzL3NsaW15LmpwZyIpOwogCiAg IGNvbnN0IGF1dG8gY3N0cl9pbl9zbHVncyA9IHNfdGVzdC5zdGFydHNfd2l0aChjc3RyX2Rp cik7CiAgIFZFUklGWSggY3N0cl9pbl9zbHVncyApOwpkaWZmIC0tZ2l0IGEvbGlic3RkYysr LXYzL3Rlc3RzdWl0ZS8yMV9zdHJpbmdzL2Jhc2ljX3N0cmluZy9vcGVyYXRpb25zL3N0YXJ0 c193aXRoL3djaGFyX3RfbmVnLmNjIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yMV9zdHJp bmdzL2Jhc2ljX3N0cmluZy9vcGVyYXRpb25zL3N0YXJ0c193aXRoL3djaGFyX3RfbmVnLmNj Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45MDA2NWE0NTliNgot LS0gL2Rldi9udWxsCisrKyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjFfc3RyaW5ncy9i YXNpY19zdHJpbmcvb3BlcmF0aW9ucy9zdGFydHNfd2l0aC93Y2hhcl90X25lZy5jYwpAQCAt MCwwICsxLDM3IEBACisvLyBDb3B5cmlnaHQgKEMpIDIwMjIgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08g QysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAo YXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJy YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKy8vIHdpdGgg dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisvLyA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisvLworLy8geyBkZy1vcHRpb25zICIt c3RkPWdudSsrMmEgLU8wIiB9CisvLyB7IGRnLWRvIHJ1biB7IHRhcmdldCBjKysyYSB4ZmFp bCAqLSotKiB9IH0KKworI2RlZmluZSBfR0xJQkNYWF9ERUJVR19QRURBTlRJQworCisjaW5j bHVkZSA8dGVzdHN1aXRlX3N0cmluZy5oPgorCit2b2lkCit0ZXN0MDEoKQoreworICBjb25z dCBfX2dudV90ZXN0Ojp3c3RyaW5nIHNfdGVzdChMInNsdWdzL3NsaW15LmpwZyIpOworICBz X3Rlc3Quc3RhcnRzX3dpdGgobnVsbHB0cik7Cit9CisKK2ludAorbWFpbigpCit7CisgIHRl c3QwMSgpOworICByZXR1cm4gMDsKK30K --------------fkwZ5Ksaypg2vIqRO4q06Xjo--