From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qv1-xf42.google.com (mail-qv1-xf42.google.com [IPv6:2607:f8b0:4864:20::f42]) by sourceware.org (Postfix) with ESMTPS id 357D339FF048; Thu, 12 Nov 2020 18:55:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 357D339FF048 Received: by mail-qv1-xf42.google.com with SMTP id e5so3313375qvs.1; Thu, 12 Nov 2020 10:55:39 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Ao1o+bCWPhgN7k3Kde2ymZQwAkAgcYNM292sktxGkbs=; b=BELzkGHZJ80VDSzZC9UFs26Xbhdm0K1OmmP/UYjfiyO85TJjDaiA86ejy/w6y51nhG ugjs0qOipgFaCq0EvXSxoE+zuHu/zgEmVGWfoOGGHaxyuchWX7xQAdS6bsTkLhH2BcK/ S/3u4f7HAOp1Wmjd4ayKSuFkQ9CC2dM77UcvSmaK+hpFzSymzY855XNUc9vs4gQpCWHr HhrIpa6bwJWS3uyq4JvG2TNmxdxY0p59NluJFmNCh+VJvRhEzZ5yIuwMPNQy+KfXvXFG m41AuxMF6rcD2zYhzNP3craHKHrMuOe6WzK4gI9MhHtVE5VSjh70BZhNE1xk/PIYvVUN 8ZaA== X-Gm-Message-State: AOAM531hQA+CLxAy8uIcArzzuFwrNaxmDhtBlh0D0H9BvMkrtWgBnjph dAAU5t9YH4USUCjFmNJ4+FSFPyYKeUz0SJuAakU= X-Google-Smtp-Source: ABdhPJyccHneRjNDhrUBqd77LrrdyuFQSGv+GE3B7RGYd+XottmD+b2sN2QtrcdZnaSmfsXdFXLBNqK9MydypuZzmoM= X-Received: by 2002:a0c:c2ce:: with SMTP id c14mr886683qvi.20.1605207338768; Thu, 12 Nov 2020 10:55:38 -0800 (PST) MIME-Version: 1.0 References: <20190530163808.GP2599@redhat.com> <20190531103550.GV2599@redhat.com> <20190606121912.GP2599@redhat.com> <20200819112908.GI3400@redhat.com> <20200924175301.GK6061@redhat.com> In-Reply-To: <20200924175301.GK6061@redhat.com> From: Antony Polukhin Date: Thu, 12 Nov 2020 21:55:26 +0300 Message-ID: Subject: Re: [PATCH] PR libstdc++/71579 assert that type traits are not misused with an incomplete type To: Jonathan Wakely Cc: gcc-patches List , "libstdc++" Content-Type: multipart/mixed; boundary="00000000000038080305b3ed757b" X-Spam-Status: No, score=-7.9 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 autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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: Thu, 12 Nov 2020 18:55:41 -0000 --00000000000038080305b3ed757b Content-Type: text/plain; charset="UTF-8" Final bits for libstdc/71579 std::common_type assertions attempt to give a proper 'required from here' hint for user code, do not bring many changes to the implementation and check all the template parameters for completeness. In some cases the type could be checked for completeness more than once. This seems to be unsolvable due to the fact that std::common_type could be specialized by the user, so we have to call std::common_type recursively, potentially repeating the check for the first type. std::common_reference assertions make sure that we detect incomplete types even if the user specialized the std::basic_common_reference. Changelog: 2020-11-12 Antony Polukhin PR libstdc/71579 * include/std/type_traits (is_convertible, is_nothrow_convertible) (common_type, common_reference): Add static_asserts to make sure that the arguments of the type traits are not misused with incomplete types. * testsuite/20_util/common_reference/incomplete_basic_common_neg.cc: New test. * testsuite/20_util/common_reference/incomplete_neg.cc: New test. * testsuite/20_util/common_type/incomplete_neg.cc: New test. * testsuite/20_util/common_type/requirements/sfinae_friendly_1.cc: Remove SFINAE tests on incomplete types. * testsuite/20_util/is_convertible/incomplete_neg.cc: New test. * testsuite/20_util/is_nothrow_convertible/incomplete_neg.cc: New test. -- Best regards, Antony Polukhin --00000000000038080305b3ed757b Content-Type: text/plain; charset="US-ASCII"; name="type_traits_hardening-4.txt" Content-Disposition: attachment; filename="type_traits_hardening-4.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_khf6fug20 ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC90eXBlX3RyYWl0cyBiL2xpYnN0 ZGMrKy12My9pbmNsdWRlL3N0ZC90eXBlX3RyYWl0cwppbmRleCAzNGUwNjhiLi4wMGZhN2Y1IDEw MDY0NAotLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9zdGQvdHlwZV90cmFpdHMKKysrIGIvbGli c3RkYysrLXYzL2luY2x1ZGUvc3RkL3R5cGVfdHJhaXRzCkBAIC0xNDA2LDEyICsxNDA2LDE4IEBA IF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9G cm9tLCB0eXBlbmFtZSBfVG8+CiAgICAgc3RydWN0IGlzX2NvbnZlcnRpYmxlCiAgICAgOiBwdWJs aWMgX19pc19jb252ZXJ0aWJsZV9oZWxwZXI8X0Zyb20sIF9Ubz46OnR5cGUKLSAgICB7IH07Cisg ICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Ol9faXNfY29tcGxldGVfb3JfdW5ib3VuZGVk KF9fdHlwZV9pZGVudGl0eTxfRnJvbT57fSksCisJImZpcnN0IHRlbXBsYXRlIGFyZ3VtZW50IG11 c3QgYmUgYSBjb21wbGV0ZSBjbGFzcyBvciBhbiB1bmJvdW5kZWQgYXJyYXkiKTsKKyAgICAgIHN0 YXRpY19hc3NlcnQoc3RkOjpfX2lzX2NvbXBsZXRlX29yX3VuYm91bmRlZChfX3R5cGVfaWRlbnRp dHk8X1RvPnt9KSwKKwkic2Vjb25kIHRlbXBsYXRlIGFyZ3VtZW50IG11c3QgYmUgYSBjb21wbGV0 ZSBjbGFzcyBvciBhbiB1bmJvdW5kZWQgYXJyYXkiKTsKKyAgICB9OwogCiAgIC8vIGhlbHBlciB0 cmFpdCBmb3IgdW5pcXVlX3B0cjxUW10+LCBzaGFyZWRfcHRyPFRbXT4sIGFuZCBzcGFuPFQsIE4+ CiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Ub0VsZW1lbnRUeXBlLCB0eXBlbmFtZSBfRnJvbUVsZW1l bnRUeXBlPgogICAgIHVzaW5nIF9faXNfYXJyYXlfY29udmVydGlibGUKLSAgICAgID0gaXNfY29u dmVydGlibGU8X0Zyb21FbGVtZW50VHlwZSgqKVtdLCBfVG9FbGVtZW50VHlwZSgqKVtdPjsKKyAg ICAgID0gdHlwZW5hbWUgX19pc19jb252ZXJ0aWJsZV9oZWxwZXI8CisJX0Zyb21FbGVtZW50VHlw ZSgqKVtdLCBfVG9FbGVtZW50VHlwZSgqKVtdPjo6dHlwZTsKIAogICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRnJvbSwgdHlwZW5hbWUgX1RvLAogICAgICAgICAgICBib29sID0gX19vcl88aXNfdm9pZDxf RnJvbT4sIGlzX2Z1bmN0aW9uPF9Ubz4sCkBAIC0xNDU0LDcgKzE0NjAsMTIgQEAgX0dMSUJDWFhf QkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zyb20sIHR5cGVu YW1lIF9Ubz4KICAgICBzdHJ1Y3QgaXNfbm90aHJvd19jb252ZXJ0aWJsZQogICAgIDogcHVibGlj IF9faXNfbnRfY29udmVydGlibGVfaGVscGVyPF9Gcm9tLCBfVG8+Ojp0eXBlCi0gICAgeyB9Owor ICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpfX2lzX2NvbXBsZXRlX29yX3VuYm91bmRl ZChfX3R5cGVfaWRlbnRpdHk8X0Zyb20+e30pLAorCSJmaXJzdCB0ZW1wbGF0ZSBhcmd1bWVudCBt dXN0IGJlIGEgY29tcGxldGUgY2xhc3Mgb3IgYW4gdW5ib3VuZGVkIGFycmF5Iik7CisgICAgICBz dGF0aWNfYXNzZXJ0KHN0ZDo6X19pc19jb21wbGV0ZV9vcl91bmJvdW5kZWQoX190eXBlX2lkZW50 aXR5PF9Ubz57fSksCisJInNlY29uZCB0ZW1wbGF0ZSBhcmd1bWVudCBtdXN0IGJlIGEgY29tcGxl dGUgY2xhc3Mgb3IgYW4gdW5ib3VuZGVkIGFycmF5Iik7CisgICAgfTsKIAogICAvLy8gaXNfbm90 aHJvd19jb252ZXJ0aWJsZV92CiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gcm9tLCB0eXBlbmFtZSBf VG8+CkBAIC0yMjM5LDcgKzIyNTAsMTIgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJ T04KICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1RwMj4KICAgICBzdHJ1Y3Qg Y29tbW9uX3R5cGU8X1RwMSwgX1RwMj4KICAgICA6IHB1YmxpYyBfX2NvbW1vbl90eXBlX2ltcGw8 X1RwMSwgX1RwMj46OnR5cGUKLSAgICB7IH07CisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChz dGQ6Ol9faXNfY29tcGxldGVfb3JfdW5ib3VuZGVkKF9fdHlwZV9pZGVudGl0eTxfVHAxPnt9KSwK KwkiZWFjaCBhcmd1bWVudCB0eXBlIG11c3QgYmUgYSBjb21wbGV0ZSBjbGFzcyBvciBhbiB1bmJv dW5kZWQgYXJyYXkiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpfX2lzX2NvbXBsZXRlX29y X3VuYm91bmRlZChfX3R5cGVfaWRlbnRpdHk8X1RwMj57fSksCisJImVhY2ggYXJndW1lbnQgdHlw ZSBtdXN0IGJlIGEgY29tcGxldGUgY2xhc3Mgb3IgYW4gdW5ib3VuZGVkIGFycmF5Iik7CisgICAg fTsKIAogICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4KICAgICBzdHJ1Y3QgX19jb21tb25fdHlwZV9w YWNrCkBAIC0yMjUzLDcgKzIyNjksMTcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJ T04KICAgICBzdHJ1Y3QgY29tbW9uX3R5cGU8X1RwMSwgX1RwMiwgX1JwLi4uPgogICAgIDogcHVi bGljIF9fY29tbW9uX3R5cGVfZm9sZDxjb21tb25fdHlwZTxfVHAxLCBfVHAyPiwKIAkJCQlfX2Nv bW1vbl90eXBlX3BhY2s8X1JwLi4uPj4KLSAgICB7IH07CisgICAgeworICAgICAgc3RhdGljX2Fz c2VydChzdGQ6Ol9faXNfY29tcGxldGVfb3JfdW5ib3VuZGVkKF9fdHlwZV9pZGVudGl0eTxfVHAx Pnt9KSwKKwkiZmlyc3QgYXJndW1lbnQgdHlwZSBtdXN0IGJlIGEgY29tcGxldGUgY2xhc3Mgb3Ig YW4gdW5ib3VuZGVkIGFycmF5Iik7CisgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6X19pc19jb21w bGV0ZV9vcl91bmJvdW5kZWQoX190eXBlX2lkZW50aXR5PF9UcDI+e30pLAorCSJzZWNvbmQgYXJn dW1lbnQgdHlwZSBtdXN0IGJlIGEgY29tcGxldGUgY2xhc3Mgb3IgYW4gdW5ib3VuZGVkIGFycmF5 Iik7CisjaWZkZWYgX19jcHBfZm9sZF9leHByZXNzaW9ucworICAgICAgc3RhdGljX2Fzc2VydCgo c3RkOjpfX2lzX2NvbXBsZXRlX29yX3VuYm91bmRlZCgKKwlfX3R5cGVfaWRlbnRpdHk8X1JwPnt9 KSAmJiAuLi4pLAorCSJlYWNoIGFyZ3VtZW50IHR5cGUgbXVzdCBiZSBhIGNvbXBsZXRlIGNsYXNz IG9yIGFuIHVuYm91bmRlZCBhcnJheSIpOworI2VuZGlmCisgICAgfTsKIAogICAvLyBMZXQgQyBk ZW5vdGUgdGhlIHNhbWUgdHlwZSwgaWYgYW55LCBhcyBjb21tb25fdHlwZV90PFQxLCBUMj4uCiAg IC8vIElmIHRoZXJlIGlzIHN1Y2ggYSB0eXBlIEMsIHR5cGUgc2hhbGwgZGVub3RlIHRoZSBzYW1l IHR5cGUsIGlmIGFueSwKQEAgLTMzMTUsOSArMzM0MSwxMCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUg X0Zyb20sIHR5cGVuYW1lIF9Ubz4KIAogICAvLyBJZiBBIGFuZCBCIGFyZSBib3RoIHJ2YWx1ZSBy ZWZlcmVuY2UgdHlwZXMsIC4uLgogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfWHAsIHR5cGVuYW1lIF9Z cD4KLSAgICBzdHJ1Y3QgX19jb21tb25fcmVmX2ltcGw8X1hwJiYsIF9ZcCYmLAotICAgICAgX1Jl cXVpcmU8aXNfY29udmVydGlibGU8X1hwJiYsIF9fY29tbW9uX3JlZl9DPF9YcCwgX1lwPj4sCi0J ICAgICAgIGlzX2NvbnZlcnRpYmxlPF9ZcCYmLCBfX2NvbW1vbl9yZWZfQzxfWHAsIF9ZcD4+Pj4K KyAgICBzdHJ1Y3QgX19jb21tb25fcmVmX2ltcGw8X1hwJiYsIF9ZcCYmLCBfUmVxdWlyZTwKKyAg ICAgIHR5cGVuYW1lIF9faXNfY29udmVydGlibGVfaGVscGVyPF9YcCYmLCBfX2NvbW1vbl9yZWZf QzxfWHAsIF9ZcD4+Ojp0eXBlLAorICAgICAgdHlwZW5hbWUgX19pc19jb252ZXJ0aWJsZV9oZWxw ZXI8X1lwJiYsIF9fY29tbW9uX3JlZl9DPF9YcCwgX1lwPj46OnR5cGUKKyAgICA+PgogICAgIHsg dXNpbmcgdHlwZSA9IF9fY29tbW9uX3JlZl9DPF9YcCwgX1lwPjsgfTsKIAogICAvLyBsZXQgRCBi ZSBDT01NT04tUkVGKGNvbnN0IFgmLCBZJikKQEAgLTMzMjYsOCArMzM1Myw5IEBAIHRlbXBsYXRl IDx0eXBlbmFtZSBfRnJvbSwgdHlwZW5hbWUgX1RvPgogCiAgIC8vIElmIEEgaXMgYW4gcnZhbHVl IHJlZmVyZW5jZSBhbmQgQiBpcyBhbiBsdmFsdWUgcmVmZXJlbmNlLCAuLi4KICAgdGVtcGxhdGU8 dHlwZW5hbWUgX1hwLCB0eXBlbmFtZSBfWXA+Ci0gICAgc3RydWN0IF9fY29tbW9uX3JlZl9pbXBs PF9YcCYmLCBfWXAmLAotICAgICAgX1JlcXVpcmU8aXNfY29udmVydGlibGU8X1hwJiYsIF9fY29t bW9uX3JlZl9EPF9YcCwgX1lwPj4+PgorICAgIHN0cnVjdCBfX2NvbW1vbl9yZWZfaW1wbDxfWHAm JiwgX1lwJiwgX1JlcXVpcmU8CisgICAgICB0eXBlbmFtZSBfX2lzX2NvbnZlcnRpYmxlX2hlbHBl cjxfWHAmJiwgX19jb21tb25fcmVmX0Q8X1hwLCBfWXA+Pjo6dHlwZQorICAgID4+CiAgICAgeyB1 c2luZyB0eXBlID0gX19jb21tb25fcmVmX0Q8X1hwLCBfWXA+OyB9OwogCiAgIC8vIElmIEEgaXMg YW4gbHZhbHVlIHJlZmVyZW5jZSBhbmQgQiBpcyBhbiBydmFsdWUgcmVmZXJlbmNlLCAuLi4KQEAg LTMzNzQsNyArMzQwMiwxMiBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0Zyb20sIHR5cGVuYW1lIF9U bz4KICAgLy8gSWYgc2l6ZW9mLi4uKFQpIGlzIG9uZSAuLi4KICAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwMD4KICAgICBzdHJ1Y3QgY29tbW9uX3JlZmVyZW5jZTxfVHAwPgotICAgIHsgdXNpbmcgdHlw ZSA9IF9UcDA7IH07CisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Ol9faXNfY29tcGxl dGVfb3JfdW5ib3VuZGVkKF9fdHlwZV9pZGVudGl0eTxfVHAwPnt9KSwKKwkiZWFjaCBhcmd1bWVu dCB0eXBlIG11c3QgYmUgYSBjb21wbGV0ZSBjbGFzcyBvciBhbiB1bmJvdW5kZWQgYXJyYXkiKTsK KworICAgICAgdXNpbmcgdHlwZSA9IF9UcDA7CisgICAgfTsKIAogICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHAxLCB0eXBlbmFtZSBfVHAyLCBpbnQgX0J1bGxldCA9IDEsIHR5cGVuYW1lID0gdm9pZD4K ICAgICBzdHJ1Y3QgX19jb21tb25fcmVmZXJlbmNlX2ltcGwKQEAgLTMzODUsNyArMzQxOCwxMiBA QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0Zyb20sIHR5cGVuYW1lIF9Ubz4KICAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1RwMj4KICAgICBzdHJ1Y3QgY29tbW9uX3JlZmVyZW5jZTxf VHAxLCBfVHAyPgogICAgIDogX19jb21tb25fcmVmZXJlbmNlX2ltcGw8X1RwMSwgX1RwMj4KLSAg ICB7IH07CisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Ol9faXNfY29tcGxldGVfb3Jf dW5ib3VuZGVkKF9fdHlwZV9pZGVudGl0eTxfVHAxPnt9KSwKKwkiZWFjaCBhcmd1bWVudCB0eXBl IG11c3QgYmUgYSBjb21wbGV0ZSBjbGFzcyBvciBhbiB1bmJvdW5kZWQgYXJyYXkiKTsKKyAgICAg IHN0YXRpY19hc3NlcnQoc3RkOjpfX2lzX2NvbXBsZXRlX29yX3VuYm91bmRlZChfX3R5cGVfaWRl bnRpdHk8X1RwMj57fSksCisJImVhY2ggYXJndW1lbnQgdHlwZSBtdXN0IGJlIGEgY29tcGxldGUg Y2xhc3Mgb3IgYW4gdW5ib3VuZGVkIGFycmF5Iik7CisgICAgfTsKIAogICAvLyBJZiBUMSBhbmQg VDIgYXJlIHJlZmVyZW5jZSB0eXBlcyBhbmQgQ09NTU9OLVJFRihUMSwgVDIpIGlzIHdlbGwtZm9y bWVkLCAuLi4KICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1RwMj4KZGlmZiAt LWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjBfdXRpbC9jb21tb25fcmVmZXJlbmNlL2lu Y29tcGxldGVfYmFzaWNfY29tbW9uX25lZy5jYyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjBf dXRpbC9jb21tb25fcmVmZXJlbmNlL2luY29tcGxldGVfYmFzaWNfY29tbW9uX25lZy5jYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzI0YWQwCi0tLSAvZGV2L251bGwKKysr IGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yMF91dGlsL2NvbW1vbl9yZWZlcmVuY2UvaW5jb21w bGV0ZV9iYXNpY19jb21tb25fbmVnLmNjCkBAIC0wLDAgKzEsMzggQEAKKy8vIHsgZGctZG8gY29t cGlsZSB7IHRhcmdldCBjKysyMCB9IH0KKworLy8gQ29weXJpZ2h0IChDKSAyMDIwIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBH TlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUK Ky8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlv dXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK Ky8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl IENPUFlJTkczLiAgSWYgbm90IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ LgorCisvLyB7IGRnLWVycm9yICJtdXN0IGJlIGEgY29tcGxldGUgY2xhc3MiICIiIHsgdGFyZ2V0 ICotKi0qIH0gMCB9CisKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKworY2xhc3MgWDsKKwordGVt cGxhdGUgPD4KK3N0cnVjdCBzdGQ6OmJhc2ljX2NvbW1vbl9yZWZlcmVuY2U8WCwgWD4geworICB1 c2luZyB0eXBlID0gaW50OworfTsKKwordm9pZCB0ZXN0MDEoKQoreworICBzdGQ6OmNvbW1vbl9y ZWZlcmVuY2U8WD4oKTsJCS8vIHsgZGctZXJyb3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQorICBz dGQ6OmNvbW1vbl9yZWZlcmVuY2U8WCwgWD4oKTsJCS8vIHsgZGctZXJyb3IgInJlcXVpcmVkIGZy b20gaGVyZSIgfQorICBzdGQ6OmNvbW1vbl9yZWZlcmVuY2U8WCwgWCwgWD4oKTsJLy8geyBkZy1l cnJvciAicmVxdWlyZWQgZnJvbSBoZXJlIiB9CisgIHN0ZDo6Y29tbW9uX3JlZmVyZW5jZTxYLCBY LCBYLCBYPigpOwkvLyB7IGRnLWVycm9yICJyZXF1aXJlZCBmcm9tIGhlcmUiIH0KKyAgc3RkOjpj b21tb25fcmVmZXJlbmNlPFgsIFgsIFgsIFgsIFg+KCk7CS8vIHsgZGctZXJyb3IgInJlcXVpcmVk IGZyb20gaGVyZSIgfQorfQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yMF91 dGlsL2NvbW1vbl9yZWZlcmVuY2UvaW5jb21wbGV0ZV9uZWcuY2MgYi9saWJzdGRjKystdjMvdGVz dHN1aXRlLzIwX3V0aWwvY29tbW9uX3JlZmVyZW5jZS9pbmNvbXBsZXRlX25lZy5jYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTUxZDRhCi0tLSAvZGV2L251bGwKKysrIGIv bGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yMF91dGlsL2NvbW1vbl9yZWZlcmVuY2UvaW5jb21wbGV0 ZV9uZWcuY2MKQEAgLTAsMCArMSw1OCBAQAorLy8geyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IGMr KzIwIH0gfQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMjAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJh cnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBh bnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YWxvbmcKKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBu b3Qgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIHsgZGctZXJy b3IgIm11c3QgYmUgYSBjb21wbGV0ZSBjbGFzcyIgIiIgeyB0YXJnZXQgKi0qLSogfSAwIH0KKwor I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorCitjbGFzcyBYOworY2xhc3MgWSB7fTsKKwordm9pZCB0 ZXN0MDEoKQoreworICBzdGQ6OmNvbW1vbl9yZWZlcmVuY2U8WD4oKTsJCS8vIHsgZGctZXJyb3Ig InJlcXVpcmVkIGZyb20gaGVyZSIgfQorICBzdGQ6OmNvbW1vbl9yZWZlcmVuY2U8WCwgaW50Pigp OwkJLy8geyBkZy1lcnJvciAicmVxdWlyZWQgZnJvbSBoZXJlIiB9CisgIHN0ZDo6Y29tbW9uX3Jl ZmVyZW5jZTxYLCBpbnQsIGludD4oKTsJLy8geyBkZy1lcnJvciAicmVxdWlyZWQgZnJvbSBoZXJl IiB9CisgIHN0ZDo6Y29tbW9uX3JlZmVyZW5jZTxYLCBpbnQsIGludCwgaW50PigpOwkvLyB7IGRn LWVycm9yICJyZXF1aXJlZCBmcm9tIGhlcmUiIH0KKyAgc3RkOjpjb21tb25fcmVmZXJlbmNlPFgs IGludCwgaW50LCBpbnQsIGludD4oKTsJLy8geyBkZy1lcnJvciAicmVxdWlyZWQgZnJvbSBoZXJl IiB9CisKKyAgc3RkOjpjb21tb25fcmVmZXJlbmNlPGludCwgWD4oKTsJCS8vIHsgZGctZXJyb3Ig InJlcXVpcmVkIGZyb20gaGVyZSIgfQorICBzdGQ6OmNvbW1vbl9yZWZlcmVuY2U8aW50LCBYLCBp bnQ+KCk7CS8vIHsgZGctZXJyb3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQorICBzdGQ6OmNvbW1v bl9yZWZlcmVuY2U8aW50LCBYLCBpbnQsIGludD4oKTsJLy8geyBkZy1lcnJvciAicmVxdWlyZWQg ZnJvbSBoZXJlIiB9CisgIHN0ZDo6Y29tbW9uX3JlZmVyZW5jZTxpbnQsIFgsIGludCwgaW50LCBp bnQ+KCk7CS8vIHsgZGctZXJyb3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQorCisgIHN0ZDo6Y29t bW9uX3JlZmVyZW5jZTxpbnQsIGludCwgWD4oKTsJLy8geyBkZy1lcnJvciAicmVxdWlyZWQgZnJv bSBoZXJlIiB9CisgIHN0ZDo6Y29tbW9uX3JlZmVyZW5jZTxpbnQsIGludCwgWCwgaW50PigpOwkv LyB7IGRnLWVycm9yICJyZXF1aXJlZCBmcm9tIGhlcmUiIH0KKyAgc3RkOjpjb21tb25fcmVmZXJl bmNlPGludCwgaW50LCBYLCBpbnQsIGludD4oKTsJLy8geyBkZy1lcnJvciAicmVxdWlyZWQgZnJv bSBoZXJlIiB9CisKKyAgc3RkOjpjb21tb25fcmVmZXJlbmNlPGludCwgaW50LCBpbnQsIFg+KCk7 CS8vIHsgZGctZXJyb3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQorICBzdGQ6OmNvbW1vbl9yZWZl cmVuY2U8aW50LCBpbnQsIGludCwgWCwgaW50PigpOwkvLyB7IGRnLWVycm9yICJyZXF1aXJlZCBm cm9tIGhlcmUiIH0KKworICBzdGQ6OmNvbW1vbl9yZWZlcmVuY2U8aW50LCBpbnQsIGludCwgaW50 LCBYPigpOwkvLyB7IGRnLWVycm9yICJyZXF1aXJlZCBmcm9tIGhlcmUiIH0KKworICBzdGQ6OmNv bW1vbl9yZWZlcmVuY2U8WCwgaW50LCBpbnQsIGludCwgWD4oKTsJLy8geyBkZy1lcnJvciAicmVx dWlyZWQgZnJvbSBoZXJlIiB9CisgIHN0ZDo6Y29tbW9uX3JlZmVyZW5jZTxpbnQsIFgsIGludCwg aW50LCBYPigpOwkvLyB7IGRnLWVycm9yICJyZXF1aXJlZCBmcm9tIGhlcmUiIH0KKyAgc3RkOjpj b21tb25fcmVmZXJlbmNlPGludCwgaW50LCBYLCBpbnQsIFg+KCk7CS8vIHsgZGctZXJyb3IgInJl cXVpcmVkIGZyb20gaGVyZSIgfQorICBzdGQ6OmNvbW1vbl9yZWZlcmVuY2U8aW50LCBpbnQsIGlu dCwgWCwgWD4oKTsJLy8geyBkZy1lcnJvciAicmVxdWlyZWQgZnJvbSBoZXJlIiB9CisKKyAgc3Rk Ojpjb21tb25fcmVmZXJlbmNlPFksIGludCwgaW50LCBpbnQsIFg+KCk7CS8vIHsgZGctZXJyb3Ig InJlcXVpcmVkIGZyb20gaGVyZSIgfQorICBzdGQ6OmNvbW1vbl9yZWZlcmVuY2U8aW50LCBZLCBp bnQsIGludCwgWD4oKTsJLy8geyBkZy1lcnJvciAicmVxdWlyZWQgZnJvbSBoZXJlIiB9CisgIHN0 ZDo6Y29tbW9uX3JlZmVyZW5jZTxpbnQsIGludCwgWSwgaW50LCBYPigpOwkvLyB7IGRnLWVycm9y ICJyZXF1aXJlZCBmcm9tIGhlcmUiIH0KKyAgc3RkOjpjb21tb25fcmVmZXJlbmNlPGludCwgaW50 LCBpbnQsIFksIFg+KCk7CS8vIHsgZGctZXJyb3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQorfQpk aWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yMF91dGlsL2NvbW1vbl90eXBlL2lu Y29tcGxldGVfbmVnLmNjIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yMF91dGlsL2NvbW1vbl90 eXBlL2luY29tcGxldGVfbmVnLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjZjMjY0MWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIwX3V0 aWwvY29tbW9uX3R5cGUvaW5jb21wbGV0ZV9uZWcuY2MKQEAgLTAsMCArMSw1OSBAQAorLy8geyBk Zy1kbyBjb21waWxlIHsgdGFyZ2V0IGMrKzE3IH0gfQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMjAg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQg b2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhl CisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBv ciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJy YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisv LyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg dGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uCisKKy8vIHsgZGctZXJyb3IgIm11c3QgYmUgYSBjb21wbGV0ZSBjbGFzcyIgIiIg eyB0YXJnZXQgKi0qLSogfSAwIH0KKworI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorCitjbGFzcyBY OworY2xhc3MgWSB7fTsKKworLy8gU29tZSBvZiB0aGUgZm9sbG93aW5nIGFzc2VydHMgcmVxdWly ZSBfX2NwcF9mb2xkX2V4cHJlc3Npb25zIHRvIHRyaWdnZXIKK3ZvaWQgdGVzdDAxKCkKK3sKKyAg c3RkOjpjb21tb25fdHlwZTxYPigpOwkJLy8geyBkZy1lcnJvciAicmVxdWlyZWQgZnJvbSBoZXJl IiB9CisgIHN0ZDo6Y29tbW9uX3R5cGU8WCwgaW50PigpOwkJLy8geyBkZy1lcnJvciAicmVxdWly ZWQgZnJvbSBoZXJlIiB9CisgIHN0ZDo6Y29tbW9uX3R5cGU8WCwgaW50LCBpbnQ+KCk7CS8vIHsg ZGctZXJyb3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQorICBzdGQ6OmNvbW1vbl90eXBlPFgsIGlu dCwgaW50LCBpbnQ+KCk7CS8vIHsgZGctZXJyb3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQorICBz dGQ6OmNvbW1vbl90eXBlPFgsIGludCwgaW50LCBpbnQsIGludD4oKTsJLy8geyBkZy1lcnJvciAi cmVxdWlyZWQgZnJvbSBoZXJlIiB9CisKKyAgc3RkOjpjb21tb25fdHlwZTxpbnQsIFg+KCk7CQkv LyB7IGRnLWVycm9yICJyZXF1aXJlZCBmcm9tIGhlcmUiIH0KKyAgc3RkOjpjb21tb25fdHlwZTxp bnQsIFgsIGludD4oKTsJLy8geyBkZy1lcnJvciAicmVxdWlyZWQgZnJvbSBoZXJlIiB9CisgIHN0 ZDo6Y29tbW9uX3R5cGU8aW50LCBYLCBpbnQsIGludD4oKTsJLy8geyBkZy1lcnJvciAicmVxdWly ZWQgZnJvbSBoZXJlIiB9CisgIHN0ZDo6Y29tbW9uX3R5cGU8aW50LCBYLCBpbnQsIGludCwgaW50 PigpOwkvLyB7IGRnLWVycm9yICJyZXF1aXJlZCBmcm9tIGhlcmUiIH0KKworICBzdGQ6OmNvbW1v bl90eXBlPGludCwgaW50LCBYPigpOwkvLyB7IGRnLWVycm9yICJyZXF1aXJlZCBmcm9tIGhlcmUi IH0KKyAgc3RkOjpjb21tb25fdHlwZTxpbnQsIGludCwgWCwgaW50PigpOwkvLyB7IGRnLWVycm9y ICJyZXF1aXJlZCBmcm9tIGhlcmUiIH0KKyAgc3RkOjpjb21tb25fdHlwZTxpbnQsIGludCwgWCwg aW50LCBpbnQ+KCk7CS8vIHsgZGctZXJyb3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQorCisgIHN0 ZDo6Y29tbW9uX3R5cGU8aW50LCBpbnQsIGludCwgWD4oKTsJLy8geyBkZy1lcnJvciAicmVxdWly ZWQgZnJvbSBoZXJlIiB9CisgIHN0ZDo6Y29tbW9uX3R5cGU8aW50LCBpbnQsIGludCwgWCwgaW50 PigpOwkvLyB7IGRnLWVycm9yICJyZXF1aXJlZCBmcm9tIGhlcmUiIH0KKworICBzdGQ6OmNvbW1v bl90eXBlPGludCwgaW50LCBpbnQsIGludCwgWD4oKTsJLy8geyBkZy1lcnJvciAicmVxdWlyZWQg ZnJvbSBoZXJlIiB9CisKKyAgc3RkOjpjb21tb25fdHlwZTxYLCBpbnQsIGludCwgaW50LCBYPigp OwkvLyB7IGRnLWVycm9yICJyZXF1aXJlZCBmcm9tIGhlcmUiIH0KKyAgc3RkOjpjb21tb25fdHlw ZTxpbnQsIFgsIGludCwgaW50LCBYPigpOwkvLyB7IGRnLWVycm9yICJyZXF1aXJlZCBmcm9tIGhl cmUiIH0KKyAgc3RkOjpjb21tb25fdHlwZTxpbnQsIGludCwgWCwgaW50LCBYPigpOwkvLyB7IGRn LWVycm9yICJyZXF1aXJlZCBmcm9tIGhlcmUiIH0KKyAgc3RkOjpjb21tb25fdHlwZTxpbnQsIGlu dCwgaW50LCBYLCBYPigpOwkvLyB7IGRnLWVycm9yICJyZXF1aXJlZCBmcm9tIGhlcmUiIH0KKwor ICBzdGQ6OmNvbW1vbl90eXBlPFksIGludCwgaW50LCBpbnQsIFg+KCk7CS8vIHsgZGctZXJyb3Ig InJlcXVpcmVkIGZyb20gaGVyZSIgfQorICBzdGQ6OmNvbW1vbl90eXBlPGludCwgWSwgaW50LCBp bnQsIFg+KCk7CS8vIHsgZGctZXJyb3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQorICBzdGQ6OmNv bW1vbl90eXBlPGludCwgaW50LCBZLCBpbnQsIFg+KCk7CS8vIHsgZGctZXJyb3IgInJlcXVpcmVk IGZyb20gaGVyZSIgfQorICBzdGQ6OmNvbW1vbl90eXBlPGludCwgaW50LCBpbnQsIFksIFg+KCk7 CS8vIHsgZGctZXJyb3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQorfQpkaWZmIC0tZ2l0IGEvbGli c3RkYysrLXYzL3Rlc3RzdWl0ZS8yMF91dGlsL2NvbW1vbl90eXBlL3JlcXVpcmVtZW50cy9zZmlu YWVfZnJpZW5kbHlfMS5jYyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjBfdXRpbC9jb21tb25f dHlwZS9yZXF1aXJlbWVudHMvc2ZpbmFlX2ZyaWVuZGx5XzEuY2MKaW5kZXggMDRlZWY1MC4uYTUy ZjE4NiAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yMF91dGlsL2NvbW1vbl90 eXBlL3JlcXVpcmVtZW50cy9zZmluYWVfZnJpZW5kbHlfMS5jYworKysgYi9saWJzdGRjKystdjMv dGVzdHN1aXRlLzIwX3V0aWwvY29tbW9uX3R5cGUvcmVxdWlyZW1lbnRzL3NmaW5hZV9mcmllbmRs eV8xLmNjCkBAIC04OSw3ICs4OSw3IEBAIGVudW0gY2xhc3MgU2NFbjsKIAogZW51bSBVbnNjRW4g OiBpbnQ7CiAKLXN0cnVjdCBVa247CisKIAogdW5pb24gVQogewpAQCAtMjQwLDcgKzI0MCw3IEBA IHN0YXRpY19hc3NlcnQoaXNfdHlwZTxzdGQ6OmNvbW1vbl90eXBlPGRlY2x0eXBlKG51bGxwdHIp LCBpbnQgKEI6OiopKCkgY29uc3Q+LAogc3RhdGljX2Fzc2VydChpc190eXBlPHN0ZDo6Y29tbW9u X3R5cGU8ZGVjbHR5cGUobnVsbHB0ciksIGNvbnN0IGludCBCOjoqPiwKIAkgICAgICBjb25zdCBp bnQgQjo6Kj4oKSwgIiIpOwogc3RhdGljX2Fzc2VydChpc190eXBlPHN0ZDo6Y29tbW9uX3R5cGU8 QWJzdHJhY3QmLCBBYnN0cmFjdCY+LCBBYnN0cmFjdD4oKSwgIiIpOwotc3RhdGljX2Fzc2VydChp c190eXBlPHN0ZDo6Y29tbW9uX3R5cGU8VWtuJiwgVWtuJj4sIFVrbj4oKSwgIiIpOworCiBzdGF0 aWNfYXNzZXJ0KGlzX3R5cGU8c3RkOjpjb21tb25fdHlwZTxJbXBsaWNpdFRvPEImPiwgQiY+LCBC PigpLCAiIik7CiBzdGF0aWNfYXNzZXJ0KGlzX3R5cGU8c3RkOjpjb21tb25fdHlwZTxJbXBsaWNp dFRvPEImPiYsIEImJj4sIEI+KCksICIiKTsKIHN0YXRpY19hc3NlcnQoaXNfdHlwZTxzdGQ6OmNv bW1vbl90eXBlPFVDb252MSwgY29uc3QgQWJzdHJhY3QqJj4sCkBAIC0yNTQsMTEgKzI1NCw2IEBA IHN0YXRpY19hc3NlcnQoaXNfdHlwZTxzdGQ6OmNvbW1vbl90eXBlPGNvbnN0IEFic3RyYWN0JiYs CiAJCQkJICAgICAgIGNvbnN0IEFic3RyYWN0JiY+LCBBYnN0cmFjdD4oKSwgIiIpOwogc3RhdGlj X2Fzc2VydChpc190eXBlPHN0ZDo6Y29tbW9uX3R5cGU8dm9sYXRpbGUgQWJzdHJhY3QmJiwKIAkJ CQkgICAgICAgdm9sYXRpbGUgQWJzdHJhY3QmJj4sIEFic3RyYWN0PigpLCAiIik7Ci1zdGF0aWNf YXNzZXJ0KGlzX3R5cGU8c3RkOjpjb21tb25fdHlwZTxVa24mJiwgVWtuJiY+LCBVa24+KCksICIi KTsKLXN0YXRpY19hc3NlcnQoaXNfdHlwZTxzdGQ6OmNvbW1vbl90eXBlPGNvbnN0IFVrbiYmLCBj b25zdCBVa24mJj4sCi0JICAgICAgVWtuPigpLCAiIik7Ci1zdGF0aWNfYXNzZXJ0KGlzX3R5cGU8 c3RkOjpjb21tb25fdHlwZTx2b2xhdGlsZSBVa24mJiwgdm9sYXRpbGUgVWtuJiY+LAotCSAgICAg IFVrbj4oKSwgIiIpOwogCiBzdGF0aWNfYXNzZXJ0KGlzX3R5cGU8c3RkOjpjb21tb25fdHlwZTxY MSwgWDI+LCBSWDEyPigpLCAiIik7CiBzdGF0aWNfYXNzZXJ0KGlzX3R5cGU8c3RkOjpjb21tb25f dHlwZTxjb25zdCBYMSwgWDI+LCBSWDEyPigpLCAiIik7CkBAIC0yODAsMTMgKzI3NSwxMyBAQCBz dGF0aWNfYXNzZXJ0KCFoYXNfdHlwZTxzdGQ6OmNvbW1vbl90eXBlPFUsIFUyPj4oKSwgIiIpOwog c3RhdGljX2Fzc2VydCghaGFzX3R5cGU8c3RkOjpjb21tb25fdHlwZTxQcml2YXRlSW1wbGljaXRU bzxpbnQ+LCBpbnQ+PigpLCAiIik7CiBzdGF0aWNfYXNzZXJ0KCFoYXNfdHlwZTxzdGQ6OmNvbW1v bl90eXBlPGNvbnN0IFByaXZhdGVJbXBsaWNpdFRvPGludD4sCiAJICAgICAgaW50Pj4oKSwgIiIp Owotc3RhdGljX2Fzc2VydCghaGFzX3R5cGU8c3RkOjpjb21tb25fdHlwZTxpbnQsIFVrbj4+KCks ICIiKTsKKwogc3RhdGljX2Fzc2VydCghaGFzX3R5cGU8c3RkOjpjb21tb25fdHlwZTxpbnQsIEFi c3RyYWN0Pj4oKSwgIiIpOwotc3RhdGljX2Fzc2VydCghaGFzX3R5cGU8c3RkOjpjb21tb25fdHlw ZTxVa24sIEFic3RyYWN0Pj4oKSwgIiIpOworCiBzdGF0aWNfYXNzZXJ0KCFoYXNfdHlwZTxzdGQ6 OmNvbW1vbl90eXBlPGludCwgdm9pZD4+KCksICIiKTsKIHN0YXRpY19hc3NlcnQoIWhhc190eXBl PHN0ZDo6Y29tbW9uX3R5cGU8aW50LCBjb25zdCB2b2xhdGlsZSB2b2lkPj4oKSwgIiIpOwogc3Rh dGljX2Fzc2VydCghaGFzX3R5cGU8c3RkOjpjb21tb25fdHlwZTxBYnN0cmFjdCwgdm9pZD4+KCks ICIiKTsKLXN0YXRpY19hc3NlcnQoIWhhc190eXBlPHN0ZDo6Y29tbW9uX3R5cGU8VWtuLCB2b2lk Pj4oKSwgIiIpOworCiBzdGF0aWNfYXNzZXJ0KCFoYXNfdHlwZTxzdGQ6OmNvbW1vbl90eXBlPGlu dFs0XSwgdm9pZD4+KCksICIiKTsKIHN0YXRpY19hc3NlcnQoIWhhc190eXBlPHN0ZDo6Y29tbW9u X3R5cGU8U2NFbiwgdm9pZD4+KCksICIiKTsKIHN0YXRpY19hc3NlcnQoIWhhc190eXBlPHN0ZDo6 Y29tbW9uX3R5cGU8VW5zY0VuLCB2b2lkPj4oKSwgIiIpOwpkaWZmIC0tZ2l0IGEvbGlic3RkYysr LXYzL3Rlc3RzdWl0ZS8yMF91dGlsL2lzX2NvbnZlcnRpYmxlL2luY29tcGxldGVfbmVnLmNjIGIv bGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yMF91dGlsL2lzX2NvbnZlcnRpYmxlL2luY29tcGxldGVf bmVnLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZTdmOGIKLS0tIC9k ZXYvbnVsbAorKysgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIwX3V0aWwvaXNfY29udmVydGli bGUvaW5jb21wbGV0ZV9uZWcuY2MKQEAgLTAsMCArMSwzMSBAQAorLy8geyBkZy1kbyBjb21waWxl IHsgdGFyZ2V0IGMrKzExIH0gfQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMjAgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJ U08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8g RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBv cHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8g TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor Ly8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYWxvbmcKKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q WUlORzMuICBJZiBub3Qgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisK Ky8vIHsgZGctZXJyb3IgIm11c3QgYmUgYSBjb21wbGV0ZSBjbGFzcyIgIiIgeyB0YXJnZXQgKi0q LSogfSAwIH0KKworI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorCitjbGFzcyBYOworCit2b2lkIHRl c3QwMSgpCit7CisgIHN0ZDo6aXNfY29udmVydGlibGU8WCwgaW50PigpOwkvLyB7IGRnLWVycm9y ICJyZXF1aXJlZCBmcm9tIGhlcmUiIH0KKyAgc3RkOjppc19jb252ZXJ0aWJsZTxpbnQsIFg+KCk7 CS8vIHsgZGctZXJyb3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQorICBzdGQ6OmlzX2NvbnZlcnRp YmxlPFgsIFg+KCk7CQkvLyB7IGRnLWVycm9yICJyZXF1aXJlZCBmcm9tIGhlcmUiIH0KK30KZGlm ZiAtLWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjBfdXRpbC9pc19ub3Rocm93X2NvbnZl cnRpYmxlL2luY29tcGxldGVfbmVnLmNjIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yMF91dGls L2lzX25vdGhyb3dfY29udmVydGlibGUvaW5jb21wbGV0ZV9uZWcuY2MKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uOWMxZDJmNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnN0ZGMr Ky12My90ZXN0c3VpdGUvMjBfdXRpbC9pc19ub3Rocm93X2NvbnZlcnRpYmxlL2luY29tcGxldGVf bmVnLmNjCkBAIC0wLDAgKzEsMzEgQEAKKy8vIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCBjKysy MCB9IH0KKworLy8gQ29weXJpZ2h0IChDKSAyMDIwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5 LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55 IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFs b25nCisvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90 IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyB7IGRnLWVycm9y ICJtdXN0IGJlIGEgY29tcGxldGUgY2xhc3MiICIiIHsgdGFyZ2V0ICotKi0qIH0gMCB9CisKKyNp bmNsdWRlIDx0eXBlX3RyYWl0cz4KKworY2xhc3MgWDsKKwordm9pZCB0ZXN0MDEoKQoreworICBz dGQ6OmlzX25vdGhyb3dfY29udmVydGlibGU8WCwgaW50PigpOwkvLyB7IGRnLWVycm9yICJyZXF1 aXJlZCBmcm9tIGhlcmUiIH0KKyAgc3RkOjppc19ub3Rocm93X2NvbnZlcnRpYmxlPGludCwgWD4o KTsJLy8geyBkZy1lcnJvciAicmVxdWlyZWQgZnJvbSBoZXJlIiB9CisgIHN0ZDo6aXNfbm90aHJv d19jb252ZXJ0aWJsZTxYLCBYPigpOwkJLy8geyBkZy1lcnJvciAicmVxdWlyZWQgZnJvbSBoZXJl IiB9Cit9Cg== --00000000000038080305b3ed757b--