From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21260 invoked by alias); 16 Jan 2013 09:25:27 -0000 Received: (qmail 21237 invoked by uid 22791); 16 Jan 2013 09:25:25 -0000 X-SWARE-Spam-Status: No, hits=-4.5 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KHOP_RCVD_TRUST,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE X-Spam-Check-By: sourceware.org Received: from mail-la0-f50.google.com (HELO mail-la0-f50.google.com) (209.85.215.50) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 16 Jan 2013 09:25:17 +0000 Received: by mail-la0-f50.google.com with SMTP id fs13so1140484lab.9 for ; Wed, 16 Jan 2013 01:25:15 -0800 (PST) MIME-Version: 1.0 X-Received: by 10.152.144.38 with SMTP id sj6mr377156lab.48.1358328315052; Wed, 16 Jan 2013 01:25:15 -0800 (PST) Received: by 10.112.125.71 with HTTP; Wed, 16 Jan 2013 01:25:14 -0800 (PST) Date: Wed, 16 Jan 2013 09:25:00 -0000 Message-ID: Subject: [patch] Fix libstdc++/55043 - issue with nesting unordered_map containing unique_ptr into vector From: Jonathan Wakely To: "libstdc++" , gcc-patches Content-Type: multipart/mixed; boundary=e89a8f234715b5033104d364743b Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2013-01/txt/msg00828.txt.bz2 --e89a8f234715b5033104d364743b Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1346 This fixes a regression caused by supporting the C++11 allocator requirements in std::vector, and the fact that the unordered containers don't have noexcept move constructors. Fixed by specializing is_copy_constructible for the unordered containers so vector doesn't try to copy them when their element type is not CopyInsertable into the container, and instead resorts to a move that might throw. PR libstdc++/55043 * include/std/unordered_map: Include alloc_traits.h * include/std/unordered_set: Likewise. * include/bits/alloc_traits.h: Define __is_copy_insertable. * include/bits/unordered_map.h: Use it. * include/bits/unordered_set.h: Likewise. * include/debug/unordered_map.h: Likewise. * include/debug/unordered_set.h: Likewise. * include/profile/unordered_map.h: Likewise. * include/profile/unordered_set.h: Likewise. * include/bits/hashtable.h: Fix comment typos. * testsuite/23_containers/unordered_map/55043.cc: New. * testsuite/23_containers/unordered_multimap/55043.cc: New. * testsuite/23_containers/unordered_multiset/55043.cc: New. * testsuite/23_containers/unordered_set/55043.cc: New. Tested x86_64-linux, in normal, debug and profile modes. Committed to trunk, to be committed to the 4.7 branch shortly. --e89a8f234715b5033104d364743b Content-Type: text/plain; charset=US-ASCII; name="patch.txt" Content-Disposition: attachment; filename="patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hc09gasc0 Content-length: 32940 Y29tbWl0IGU5Yzk0YjMxYzY3ZjI2ZTUyYzk5MjdhNGVlZGIzOTA5NWVmY2Q4 YmUKQXV0aG9yOiBKb25hdGhhbiBXYWtlbHkgPGp3YWtlbHkuZ2NjQGdtYWls LmNvbT4KRGF0ZTogICBXZWQgSmFuIDE2IDA5OjE5OjExIDIwMTMgKzAwMDAK CiAgICAJUFIgbGlic3RkYysrLzU1MDQzCiAgICAJKiBpbmNsdWRlL3N0ZC91 bm9yZGVyZWRfbWFwOiBJbmNsdWRlIGFsbG9jX3RyYWl0cy5oCiAgICAJKiBp bmNsdWRlL3N0ZC91bm9yZGVyZWRfc2V0OiBMaWtld2lzZS4KICAgIAkqIGlu Y2x1ZGUvYml0cy9hbGxvY190cmFpdHMuaDogRGVmaW5lIF9faXNfY29weV9p bnNlcnRhYmxlLgogICAgCSogaW5jbHVkZS9iaXRzL3Vub3JkZXJlZF9tYXAu aDogVXNlIGl0LgogICAgCSogaW5jbHVkZS9iaXRzL3Vub3JkZXJlZF9zZXQu aDogTGlrZXdpc2UuCiAgICAJKiBpbmNsdWRlL2RlYnVnL3Vub3JkZXJlZF9t YXAuaDogTGlrZXdpc2UuCiAgICAJKiBpbmNsdWRlL2RlYnVnL3Vub3JkZXJl ZF9zZXQuaDogTGlrZXdpc2UuCiAgICAJKiBpbmNsdWRlL3Byb2ZpbGUvdW5v cmRlcmVkX21hcC5oOiBMaWtld2lzZS4KICAgIAkqIGluY2x1ZGUvcHJvZmls ZS91bm9yZGVyZWRfc2V0Lmg6IExpa2V3aXNlLgogICAgCSogaW5jbHVkZS9i aXRzL2hhc2h0YWJsZS5oOiBGaXggY29tbWVudCB0eXBvcy4KICAgIAkqIHRl c3RzdWl0ZS8yM19jb250YWluZXJzL3Vub3JkZXJlZF9tYXAvNTUwNDMuY2M6 IE5ldy4KICAgIAkqIHRlc3RzdWl0ZS8yM19jb250YWluZXJzL3Vub3JkZXJl ZF9tdWx0aW1hcC81NTA0My5jYzogTmV3LgogICAgCSogdGVzdHN1aXRlLzIz X2NvbnRhaW5lcnMvdW5vcmRlcmVkX211bHRpc2V0LzU1MDQzLmNjOiBOZXcu CiAgICAJKiB0ZXN0c3VpdGUvMjNfY29udGFpbmVycy91bm9yZGVyZWRfc2V0 LzU1MDQzLmNjOiBOZXcuCgpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2lu Y2x1ZGUvYml0cy9hbGxvY190cmFpdHMuaCBiL2xpYnN0ZGMrKy12My9pbmNs dWRlL2JpdHMvYWxsb2NfdHJhaXRzLmgKaW5kZXggOWFiYWRiYi4uYzYyNTlh MSAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9hbGxv Y190cmFpdHMuaAorKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Fs bG9jX3RyYWl0cy5oCkBAIC0xLDYgKzEsNiBAQAogLy8gQWxsb2NhdG9yIHRy YWl0cyAtKi0gQysrIC0qLQogCi0vLyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAx MiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vIENvcHlyaWdo dCAoQykgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j LgogLy8KIC8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMr KyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKIC8vIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVu ZGVyIHRoZQpAQCAtMzksNiArMzksOSBAQCBuYW1lc3BhY2Ugc3RkIF9HTElC Q1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKIHsKIF9HTElCQ1hYX0JFR0lOX05B TUVTUEFDRV9WRVJTSU9OCiAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgor ICAgIGNsYXNzIGFsbG9jYXRvcjsKKwogICB0ZW1wbGF0ZTx0eXBlbmFtZSBf QWxsb2MsIHR5cGVuYW1lIF9UcD4KICAgICBjbGFzcyBfX2FsbG9jdHJfcmVi aW5kX2hlbHBlcgogICAgIHsKQEAgLTUwNiw2ICs1MDksNDEgQEAgX0dMSUJD WFhfQUxMT0NfVFJfTkVTVEVEX1RZUEUocHJvcGFnYXRlX29uX2NvbnRhaW5l cl9zd2FwLAogICAgICAgX19kb19hbGxvY19vbl9zd2FwKF9fb25lLCBfX3R3 bywgX19wb2NzKCkpOwogICAgIH0KIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBf QWxsb2M+CisgICAgY2xhc3MgX19pc19jb3B5X2luc2VydGFibGVfaW1wbAor ICAgIHsKKyAgICAgIHR5cGVkZWYgYWxsb2NhdG9yX3RyYWl0czxfQWxsb2M+ IF9UcmFpdHM7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcCwgdHlw ZW5hbWUKKwkgICAgICAgPSBkZWNsdHlwZShfVHJhaXRzOjpjb25zdHJ1Y3Qo c3RkOjpkZWNsdmFsPF9BbGxvYyY+KCksCisJCQkJCSAgICAgc3RkOjpkZWNs dmFsPF9VcCo+KCksCisJCQkJCSAgICAgc3RkOjpkZWNsdmFsPGNvbnN0IF9V cCY+KCkpKT4KKwlzdGF0aWMgdHJ1ZV90eXBlCisJX01fc2VsZWN0KGludCk7 CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKwlzdGF0aWMgZmFs c2VfdHlwZQorCV9NX3NlbGVjdCguLi4pOworCisgICAgcHVibGljOgorCXR5 cGVkZWYgZGVjbHR5cGUoX01fc2VsZWN0PHR5cGVuYW1lIF9BbGxvYzo6dmFs dWVfdHlwZT4oMCkpIHR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQWxsb2M+CisgICAgc3RydWN0IF9faXNfY29weV9pbnNlcnRhYmxl CisgICAgOiBfX2lzX2NvcHlfaW5zZXJ0YWJsZV9pbXBsPF9BbGxvYz46OnR5 cGUKKyAgICB7IH07CisKKyAgLy8gc3RkOjphbGxvY2F0b3I8X1RwPiBqdXN0 IHJlcXVpcmVzIENvcHlDb25zdHJ1Y3RpYmxlCisgIHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19jb3B5X2luc2VydGFibGU8YWxs b2NhdG9yPF9UcD4+CisgICAgOiBpc19jb3B5X2NvbnN0cnVjdGlibGU8X1Rw PgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVy PgorICAgIHVzaW5nIF9faGFzX2NvcHlfaW5zZXJ0YWJsZV92YWwKKyAgICAg ID0gX19pc19jb3B5X2luc2VydGFibGU8dHlwZW5hbWUgX0NvbnRhaW5lcjo6 YWxsb2NhdG9yX3R5cGU+OworCiBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZF UlNJT04KIH0gLy8gbmFtZXNwYWNlIHN0ZAogCmRpZmYgLS1naXQgYS9saWJz dGRjKystdjMvaW5jbHVkZS9iaXRzL2hhc2h0YWJsZS5oIGIvbGlic3RkYysr LXYzL2luY2x1ZGUvYml0cy9oYXNodGFibGUuaAppbmRleCBmYWI2YzdjLi40 OWNiNGRiIDEwMDY0NAotLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRz L2hhc2h0YWJsZS5oCisrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMv aGFzaHRhYmxlLmgKQEAgLTM3MCw3ICszNzAsNyBAQCBfR0xJQkNYWF9CRUdJ Tl9OQU1FU1BBQ0VfVkVSU0lPTgogCiAgICAgICBfSGFzaHRhYmxlKF9IYXNo dGFibGUmJik7CiAKLSAgICAgIC8vIFVzZSBkZWxlZ2F0aW5nIGNvbnN0cnV0 b3JzLgorICAgICAgLy8gVXNlIGRlbGVnYXRpbmcgY29uc3RydWN0b3JzLgog ICAgICAgZXhwbGljaXQKICAgICAgIF9IYXNodGFibGUoc2l6ZV90eXBlIF9f biA9IDEwLAogCQkgY29uc3QgX0gxJiBfX2hmID0gX0gxKCksCkBAIC05MTQs NyArOTE0LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04K ICAgICAgIF9NX2VsZW1lbnRfY291bnQoX19odC5fTV9lbGVtZW50X2NvdW50 KSwKICAgICAgIF9NX3JlaGFzaF9wb2xpY3koX19odC5fTV9yZWhhc2hfcG9s aWN5KQogICAgIHsKLSAgICAgIC8vIFVwZGF0ZSwgaWYgbmVjZXNzYXJ5LCBi dWNrZXQgcG9pbnRpbmcgdG8gYmVmb3JlIGJlZ2luIHRoYXQgaGFzbid0IG1v dmUuCisgICAgICAvLyBVcGRhdGUsIGlmIG5lY2Vzc2FyeSwgYnVja2V0IHBv aW50aW5nIHRvIGJlZm9yZSBiZWdpbiB0aGF0IGhhc24ndCBtb3ZlZC4KICAg ICAgIGlmIChfTV9iZWdpbigpKQogCV9NX2J1Y2tldHNbX01fYnVja2V0X2lu ZGV4KF9NX2JlZ2luKCkpXSA9ICZfTV9iZWZvcmVfYmVnaW4oKTsKICAgICAg IF9faHQuX01fcmVoYXNoX3BvbGljeSA9IF9SZWhhc2hQb2xpY3koKTsKZGlm ZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvdW5vcmRlcmVk X21hcC5oIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy91bm9yZGVyZWRf bWFwLmgKaW5kZXggOWZhMDU1My4uMDIzNWE5OSAxMDA2NDQKLS0tIGEvbGli c3RkYysrLXYzL2luY2x1ZGUvYml0cy91bm9yZGVyZWRfbWFwLmgKKysrIGIv bGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy91bm9yZGVyZWRfbWFwLmgKQEAg LTE0MDgsNiArMTQwOCwyNiBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Vf Q09OVEFJTkVSCiAgICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQogCiBf R0xJQkNYWF9FTkRfTkFNRVNQQUNFX0NPTlRBSU5FUgorCisgIHRlbXBsYXRl PHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0hhc2gs IHR5cGVuYW1lIF9QcmVkLAorCSAgIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBz dHJ1Y3QKKyAgICBpc19jb3B5X2NvbnN0cnVjdGlibGU8X0dMSUJDWFhfU1RE X0M6OnVub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwKKwkJCQkJCQlf UHJlZCwgX0FsbG9jPj4KKyAgICA6IF9faGFzX2NvcHlfaW5zZXJ0YWJsZV92 YWw8X0dMSUJDWFhfU1REX0M6OnVub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBf SGFzaCwKKwkJCQkJCQkgICAgICBfUHJlZCwgX0FsbG9jPj4KKyAgICB7IH07 CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0 eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1ByZWQsCisJICAgdHlwZW5hbWUg X0FsbG9jPgorICAgIHN0cnVjdAorICAgIGlzX2NvcHlfY29uc3RydWN0aWJs ZTxfR0xJQkNYWF9TVERfQzo6dW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9U cCwgX0hhc2gsCisJCQkJCQkJICAgICBfUHJlZCwgX0FsbG9jPj4KKyAgICA6 IF9faGFzX2NvcHlfaW5zZXJ0YWJsZV92YWw8X0dMSUJDWFhfU1REX0M6OnVu b3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsCisJCQkJCQkJCSAgIF9IYXNo LCBfUHJlZCwKKwkJCQkJCQkJICAgX0FsbG9jPj4KKyAgICB7IH07CisKIH0g Ly8gbmFtZXNwYWNlIHN0ZAogCiAjZW5kaWYgLyogX1VOT1JERVJFRF9NQVBf SCAqLwpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy91 bm9yZGVyZWRfc2V0LmggYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3Vu b3JkZXJlZF9zZXQuaAppbmRleCBjM2VhYTQ4Li4yYWRhNjNkIDEwMDY0NAot LS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3Vub3JkZXJlZF9zZXQu aAorKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3Vub3JkZXJlZF9z ZXQuaApAQCAtMSw2ICsxLDYgQEAKIC8vIHVub3JkZXJlZF9zZXQgaW1wbGVt ZW50YXRpb24gLSotIEMrKyAtKi0KIAotLy8gQ29weXJpZ2h0IChDKSAyMDEw LCAyMDExLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor Ly8gQ29weXJpZ2h0IChDKSAyMDEwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCiAvLwogLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl IEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQog Ly8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkgaXQgdW5kZXIgdGhlCkBAIC0xMjkxLDYgKzEyOTEsMjMgQEAgX0dM SUJDWFhfQkVHSU5fTkFNRVNQQUNFX0NPTlRBSU5FUgogICAgIHsgcmV0dXJu ICEoX194ID09IF9feSk7IH0KIAogX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9D T05UQUlORVIKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFt ZSBfSGFzaCwgdHlwZW5hbWUgX1ByZWQsIHR5cGVuYW1lIF9BbGxvYz4KKyAg ICBzdHJ1Y3QgaXNfY29weV9jb25zdHJ1Y3RpYmxlPF9HTElCQ1hYX1NURF9D Ojp1bm9yZGVyZWRfc2V0PF9LZXksIF9IYXNoLAorCQkJCQkJCSAgICAgICBf UHJlZCwgX0FsbG9jPj4KKyAgICA6IF9faGFzX2NvcHlfaW5zZXJ0YWJsZV92 YWw8X0dMSUJDWFhfU1REX0M6OnVub3JkZXJlZF9zZXQ8X0tleSwgX0hhc2gs CisJCQkJCQkJICAgICAgX1ByZWQsIF9BbGxvYz4+CisgICAgeyB9OworCisg IHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9IYXNoLCB0eXBl bmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHN0cnVjdAorICAg IGlzX2NvcHlfY29uc3RydWN0aWJsZTxfR0xJQkNYWF9TVERfQzo6dW5vcmRl cmVkX211bHRpc2V0PF9LZXksIF9IYXNoLAorCQkJCQkJCSAgICAgX1ByZWQs IF9BbGxvYz4+CisgICAgOiBfX2hhc19jb3B5X2luc2VydGFibGVfdmFsPF9H TElCQ1hYX1NURF9DOjp1bm9yZGVyZWRfbXVsdGlzZXQ8X0tleSwgX0hhc2gs CisJCQkJCQkJCSAgIF9QcmVkLAorCQkJCQkJCQkgICBfQWxsb2M+PgorICAg IHsgfTsKKwogfSAvLyBuYW1lc3BhY2Ugc3RkCiAKICNlbmRpZiAvKiBfVU5P UkRFUkVEX1NFVF9IICovCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5j bHVkZS9kZWJ1Zy91bm9yZGVyZWRfbWFwIGIvbGlic3RkYysrLXYzL2luY2x1 ZGUvZGVidWcvdW5vcmRlcmVkX21hcAppbmRleCAxYzk5YWM4Li4xMTVhYmI1 IDEwMDY0NAotLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9kZWJ1Zy91bm9y ZGVyZWRfbWFwCisrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2RlYnVnL3Vu b3JkZXJlZF9tYXAKQEAgLTEsNyArMSw2IEBACiAvLyBEZWJ1Z2dpbmcgdW5v cmRlcmVkX21hcC91bm9yZGVyZWRfbXVsdGltYXAgaW1wbGVtZW50YXRpb24g LSotIEMrKyAtKi0KIAotLy8gQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAy MDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEy Ci0vLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vIENvcHly aWdodCAoQykgMjAwMy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgogLy8KIC8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNP IEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKIC8vIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0 IHVuZGVyIHRoZQpAQCAtOTM5LDYgKzkzOCwzMCBAQCBuYW1lc3BhY2UgX19k ZWJ1ZwogICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KIAogfSAvLyBu YW1lc3BhY2UgX19kZWJ1ZworCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Vf VkVSU0lPTgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1l IF9UcCwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9QcmVkLAorCSAgIHR5 cGVuYW1lIF9BbGxvYz4KKyAgICBzdHJ1Y3QKKyAgICBpc19jb3B5X2NvbnN0 cnVjdGlibGU8X19kZWJ1Zzo6dW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9I YXNoLCBfUHJlZCwKKwkJCQkJCSBfQWxsb2M+PgorICAgIDogaXNfY29weV9j b25zdHJ1Y3RpYmxlPCBfR0xJQkNYWF9TVERfQzo6dW5vcmRlcmVkX21hcDxf S2V5LCBfVHAsCisJCQkJCQkJICAgX0hhc2gsIF9QcmVkLAorCQkJCQkJCSAg IF9BbGxvYz4gPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBf S2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBf UHJlZCwKKwkgICB0eXBlbmFtZSBfQWxsb2M+CisgICAgc3RydWN0CisgICAg aXNfY29weV9jb25zdHJ1Y3RpYmxlPF9fZGVidWc6OnVub3JkZXJlZF9tdWx0 aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwKKwkJCQkJCSAgICAgIF9B bGxvYz4+CisgICAgOiBpc19jb3B5X2NvbnN0cnVjdGlibGU8IF9HTElCQ1hY X1NURF9DOjp1bm9yZGVyZWRfbXVsdGltYXA8X0tleSwgX1RwLAorCQkJCQkJ CQlfSGFzaCwgX1ByZWQsCisJCQkJCQkJCV9BbGxvYz4gPgorICAgIHsgfTsK KworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCiB9IC8vIG5hbWVz cGFjZSBzdGQKIAogI2VuZGlmIC8vIEMrKzExCmRpZmYgLS1naXQgYS9saWJz dGRjKystdjMvaW5jbHVkZS9kZWJ1Zy91bm9yZGVyZWRfc2V0IGIvbGlic3Rk YysrLXYzL2luY2x1ZGUvZGVidWcvdW5vcmRlcmVkX3NldAppbmRleCBkMjcw ZWNjLi44OTVjOTQzIDEwMDY0NAotLS0gYS9saWJzdGRjKystdjMvaW5jbHVk ZS9kZWJ1Zy91bm9yZGVyZWRfc2V0CisrKyBiL2xpYnN0ZGMrKy12My9pbmNs dWRlL2RlYnVnL3Vub3JkZXJlZF9zZXQKQEAgLTEsNyArMSw2IEBACiAvLyBE ZWJ1Z2dpbmcgdW5vcmRlcmVkX3NldC91bm9yZGVyZWRfbXVsdGlzZXQgaW1w bGVtZW50YXRpb24gLSotIEMrKyAtKi0KIAotLy8gQ29weXJpZ2h0IChDKSAy MDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEw LCAyMDExLCAyMDEyCi0vLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKy8vIENvcHlyaWdodCAoQykgMjAwMy0yMDEzIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgogLy8KIC8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9m IHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZy ZWUKIC8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQpAQCAtOTIxLDYgKzkyMCwyNyBAQCBu YW1lc3BhY2UgX19kZWJ1ZwogICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7 IH0KIAogfSAvLyBuYW1lc3BhY2UgX19kZWJ1ZworCitfR0xJQkNYWF9CRUdJ Tl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9L ZXksIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUHJlZCwgdHlwZW5hbWUg X0FsbG9jPgorICAgIHN0cnVjdAorICAgIGlzX2NvcHlfY29uc3RydWN0aWJs ZTxfX2RlYnVnOjp1bm9yZGVyZWRfc2V0PF9LZXksIF9IYXNoLCBfUHJlZCwg X0FsbG9jPj4KKyAgICA6IGlzX2NvcHlfY29uc3RydWN0aWJsZTwgX0dMSUJD WFhfU1REX0M6OnVub3JkZXJlZF9zZXQ8X0tleSwKKwkJCQkJCQkgICBfSGFz aCwgX1ByZWQsCisJCQkJCQkJICAgX0FsbG9jPiA+CisgICAgeyB9OworCisg IHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9IYXNoLCB0eXBl bmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHN0cnVjdAorICAg IGlzX2NvcHlfY29uc3RydWN0aWJsZTxfX2RlYnVnOjp1bm9yZGVyZWRfbXVs dGlzZXQ8X0tleSwgX0hhc2gsIF9QcmVkLAorCQkJCQkJICAgICAgX0FsbG9j Pj4KKyAgICA6IGlzX2NvcHlfY29uc3RydWN0aWJsZTwgX0dMSUJDWFhfU1RE X0M6OnVub3JkZXJlZF9tdWx0aXNldDxfS2V5LAorCQkJCQkJCQlfSGFzaCwg X1ByZWQsCisJCQkJCQkJCV9BbGxvYz4gPgorICAgIHsgfTsKKworX0dMSUJD WFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCiB9IC8vIG5hbWVzcGFjZSBzdGQK IAogI2VuZGlmIC8vIEMrKzExCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMv aW5jbHVkZS9wcm9maWxlL3Vub3JkZXJlZF9tYXAgYi9saWJzdGRjKystdjMv aW5jbHVkZS9wcm9maWxlL3Vub3JkZXJlZF9tYXAKaW5kZXggZTdiNGMzNy4u NWViY2JmNiAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvcHJv ZmlsZS91bm9yZGVyZWRfbWFwCisrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRl L3Byb2ZpbGUvdW5vcmRlcmVkX21hcApAQCAtMSw2ICsxLDYgQEAKIC8vIFBy b2ZpbGluZyB1bm9yZGVyZWRfbWFwL3Vub3JkZXJlZF9tdWx0aW1hcCBpbXBs ZW1lbnRhdGlvbiAtKi0gQysrIC0qLQogCi0vLyBDb3B5cmlnaHQgKEMpIDIw MDksIDIwMTAsIDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisvLyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4KIC8vCiAvLyBUaGlzIGZpbGUgaXMgcGFy dCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBp cyBmcmVlCiAvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKQEAgLTMzOSwxMSArMzM5LDI1 IEBAIG5hbWVzcGFjZSBfX3Byb2ZpbGUKIAkgICAgICAgY29uc3QgdW5vcmRl cmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195 KQogICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KIAorfSAvLyBuYW1l c3BhY2UgX19wcm9maWxlCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9W RVJTSU9OCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9U cCwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9QcmVkLAorCSAgIHR5cGVu YW1lIF9BbGxvYz4KKyAgICBzdHJ1Y3QKKyAgICBpc19jb3B5X2NvbnN0cnVj dGlibGU8X19wcm9maWxlOjp1bm9yZGVyZWRfbWFwPF9LZXksIF9UcCwgX0hh c2gsCisJCQkJCQkgICBfUHJlZCwgX0FsbG9jPj4KKyAgICA6IGlzX2NvcHlf Y29uc3RydWN0aWJsZTwgX0dMSUJDWFhfU1REX0JBU0UgPgorICAgIHsgfTsK K19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorCiAjdW5kZWYgX0dM SUJDWFhfQkFTRQogI3VuZGVmIF9HTElCQ1hYX1NURF9CQVNFCiAjZGVmaW5l IF9HTElCQ1hYX0JBU0UgdW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9UcCwg X0hhc2gsIF9QcmVkLCBfQWxsb2M+CiAjZGVmaW5lIF9HTElCQ1hYX1NURF9C QVNFIF9HTElCQ1hYX1NURF9DOjpfR0xJQkNYWF9CQVNFCiAKK25hbWVzcGFj ZSBfX3Byb2ZpbGUKK3sKICAgLy8vIENsYXNzIHN0ZDo6dW5vcmRlcmVkX211 bHRpbWFwIHdyYXBwZXIgd2l0aCBwZXJmb3JtYW5jZSBpbnN0cnVtZW50YXRp b24uCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwK IAkgICB0eXBlbmFtZSBfSGFzaCAgPSBzdGQ6Omhhc2g8X0tleT4sCkBAIC02 MDksNiArNjIzLDE4IEBAIG5hbWVzcGFjZSBfX3Byb2ZpbGUKICAgICB7IHJl dHVybiAhKF9feCA9PSBfX3kpOyB9CiAKIH0gLy8gbmFtZXNwYWNlIF9fcHJv ZmlsZQorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisg IHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5h bWUgX0hhc2gsIHR5cGVuYW1lIF9QcmVkLAorCSAgIHR5cGVuYW1lIF9BbGxv Yz4KKyAgICBzdHJ1Y3QKKyAgICBpc19jb3B5X2NvbnN0cnVjdGlibGU8X19w cm9maWxlOjp1bm9yZGVyZWRfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaCwK KwkJCQkJCQlfUHJlZCwgX0FsbG9jPj4KKyAgICA6IGlzX2NvcHlfY29uc3Ry dWN0aWJsZTwgX0dMSUJDWFhfU1REX0JBU0UgPgorICAgIHsgfTsKKworX0dM SUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCiB9IC8vIG5hbWVzcGFjZSBz dGQKIAogI3VuZGVmIF9HTElCQ1hYX0JBU0UKZGlmZiAtLWdpdCBhL2xpYnN0 ZGMrKy12My9pbmNsdWRlL3Byb2ZpbGUvdW5vcmRlcmVkX3NldCBiL2xpYnN0 ZGMrKy12My9pbmNsdWRlL3Byb2ZpbGUvdW5vcmRlcmVkX3NldAppbmRleCAz NTdjMDczLi5lYmUxYzdkIDEwMDY0NAotLS0gYS9saWJzdGRjKystdjMvaW5j bHVkZS9wcm9maWxlL3Vub3JkZXJlZF9zZXQKKysrIGIvbGlic3RkYysrLXYz L2luY2x1ZGUvcHJvZmlsZS91bm9yZGVyZWRfc2V0CkBAIC0xLDYgKzEsNiBA QAogLy8gUHJvZmlsaW5nIHVub3JkZXJlZF9zZXQvdW5vcmRlcmVkX211bHRp c2V0IGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCiAKLS8vIENvcHlyaWdo dCAoQykgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KKy8vIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLgogLy8KIC8vIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5 IGlzIGZyZWUKIC8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQpAQCAtMzA1LDExICszMDUs MjMgQEAgbmFtZXNwYWNlIF9fcHJvZmlsZQogCSAgICAgICBjb25zdCB1bm9y ZGVyZWRfc2V0PF9LZXksIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQog ICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KIAorfSAvLyBuYW1lc3Bh Y2UgX19wcm9maWxlCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJT SU9OCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9IYXNo LCB0eXBlbmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHN0cnVj dAorICAgIGlzX2NvcHlfY29uc3RydWN0aWJsZTxfX3Byb2ZpbGU6OnVub3Jk ZXJlZF9zZXQ8X0tleSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+PgorICAgIDog aXNfY29weV9jb25zdHJ1Y3RpYmxlPCBfR0xJQkNYWF9TVERfQkFTRSA+Cisg ICAgeyB9OworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCisKICN1 bmRlZiBfR0xJQkNYWF9CQVNFCiAjdW5kZWYgX0dMSUJDWFhfU1REX0JBU0UK ICNkZWZpbmUgX0dMSUJDWFhfU1REX0JBU0UgX0dMSUJDWFhfU1REX0M6Ol9H TElCQ1hYX0JBU0UKICNkZWZpbmUgX0dMSUJDWFhfQkFTRSB1bm9yZGVyZWRf bXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4KIAorbmFt ZXNwYWNlIF9fcHJvZmlsZQorewogICAvKiogQGJyaWVmIFVub3JkZXJlZF9t dWx0aXNldCB3cmFwcGVyIHdpdGggcGVyZm9ybWFuY2UgaW5zdHJ1bWVudGF0 aW9uLiAgKi8KICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLAogICAgICAg IHR5cGVuYW1lIF9IYXNoICA9IHN0ZDo6aGFzaDxfVmFsdWU+LApAQCAtNTY4 LDYgKzU4MCwxNyBAQCBuYW1lc3BhY2UgX19wcm9maWxlCiAgICAgeyByZXR1 cm4gIShfX3ggPT0gX195KTsgfQogCiB9IC8vIG5hbWVzcGFjZSBfX3Byb2Zp bGUKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9IYXNoLCB0eXBl bmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHN0cnVjdAorICAg IGlzX2NvcHlfY29uc3RydWN0aWJsZTxfX3Byb2ZpbGU6OnVub3JkZXJlZF9t dWx0aXNldDxfVmFsdWUsIF9IYXNoLAorCQkJCQkJCV9QcmVkLCBfQWxsb2M+ PgorICAgIDogaXNfY29weV9jb25zdHJ1Y3RpYmxlPCBfR0xJQkNYWF9TVERf QkFTRSA+CisgICAgeyB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZF UlNJT04KIH0gLy8gbmFtZXNwYWNlIHN0ZAogCiAjdW5kZWYgX0dMSUJDWFhf QkFTRQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL3Vu b3JkZXJlZF9tYXAgYi9saWJzdGRjKystdjMvaW5jbHVkZS9zdGQvdW5vcmRl cmVkX21hcAppbmRleCAzNTE0MjAzLi43YzEwMTczIDEwMDY0NAotLS0gYS9s aWJzdGRjKystdjMvaW5jbHVkZS9zdGQvdW5vcmRlcmVkX21hcAorKysgYi9s aWJzdGRjKystdjMvaW5jbHVkZS9zdGQvdW5vcmRlcmVkX21hcApAQCAtMSw2 ICsxLDYgQEAKIC8vIDx1bm9yZGVyZWRfbWFwPiAtKi0gQysrIC0qLQogCi0v LyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTIg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLyBDb3B5cmlnaHQg KEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K IC8vCiAvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysg TGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCiAvLyBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRl ciB0aGUKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDx0dXBsZT4KICNp bmNsdWRlIDxiaXRzL3N0bF9hbGdvYmFzZS5oPgogI2luY2x1ZGUgPGJpdHMv YWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8Yml0cy9hbGxvY190cmFpdHMuaD4K ICNpbmNsdWRlIDxiaXRzL3N0bF9mdW5jdGlvbi5oPiAvLyBlcXVhbF90bywg X0lkZW50aXR5LCBfU2VsZWN0MXN0CiAjaW5jbHVkZSA8Yml0cy9mdW5jdGlv bmFsX2hhc2guaD4KICNpbmNsdWRlIDxiaXRzL2hhc2h0YWJsZS5oPgpkaWZm IC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL3Vub3JkZXJlZF9z ZXQgYi9saWJzdGRjKystdjMvaW5jbHVkZS9zdGQvdW5vcmRlcmVkX3NldApp bmRleCBhZjZmNjI0Li5jZmU5MWFkIDEwMDY0NAotLS0gYS9saWJzdGRjKyst djMvaW5jbHVkZS9zdGQvdW5vcmRlcmVkX3NldAorKysgYi9saWJzdGRjKyst djMvaW5jbHVkZS9zdGQvdW5vcmRlcmVkX3NldApAQCAtMSw2ICsxLDYgQEAK IC8vIDx1bm9yZGVyZWRfc2V0PiAtKi0gQysrIC0qLQogCi0vLyBDb3B5cmln aHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTIgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLyBDb3B5cmlnaHQgKEMpIDIwMDct MjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIC8vCiAvLyBU aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4g IFRoaXMgbGlicmFyeSBpcyBmcmVlCiAvLyBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKQEAg LTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDx0dXBsZT4KICNpbmNsdWRlIDxi aXRzL3N0bF9hbGdvYmFzZS5oPgogI2luY2x1ZGUgPGJpdHMvYWxsb2NhdG9y Lmg+CisjaW5jbHVkZSA8Yml0cy9hbGxvY190cmFpdHMuaD4KICNpbmNsdWRl IDxiaXRzL3N0bF9mdW5jdGlvbi5oPiAvLyBlcXVhbF90bywgX0lkZW50aXR5 LCBfU2VsZWN0MXN0CiAjaW5jbHVkZSA8Yml0cy9mdW5jdGlvbmFsX2hhc2gu aD4KICNpbmNsdWRlIDxiaXRzL2hhc2h0YWJsZS5oPgpkaWZmIC0tZ2l0IGEv bGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWluZXJzL3Vub3JkZXJl ZF9tYXAvNTUwNDMuY2MgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIzX2Nv bnRhaW5lcnMvdW5vcmRlcmVkX21hcC81NTA0My5jYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGQzNmEwCi0tLSAvZGV2L251bGwK KysrIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWluZXJzL3Vu b3JkZXJlZF9tYXAvNTUwNDMuY2MKQEAgLTAsMCArMSw2OSBAQAorLy8geyBk Zy1vcHRpb25zICItc3RkPWdudSsrMHgiIH0KKy8vIHsgZGctZG8gY29tcGls ZSB9CisKKy8vIENvcHlyaWdodCAoQykgMjAxMyBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0 aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVl CisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9y IChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisv LyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisv LyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhbG9uZworLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls ZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4KKworLy8gbGlic3RkYysrLzU1MDQzCisKKyNpbmNs dWRlIDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworc3Ry dWN0IE1vdmVPbmx5Cit7CisgIE1vdmVPbmx5KCkgPSBkZWZhdWx0OworICBN b3ZlT25seShNb3ZlT25seSYmKSA9IGRlZmF1bHQ7Cit9OworCit1c2luZyBo YXNoID0gc3RkOjpoYXNoPGludD47Cit1c2luZyBlcXVhbCA9IHN0ZDo6ZXF1 YWxfdG88aW50PjsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWxsb2M+CisgIHVz aW5nIHRlc3RfdHlwZSA9IHN0ZDo6dW5vcmRlcmVkX21hcDxpbnQsIE1vdmVP bmx5LCBoYXNoLCBlcXVhbCwgQWxsb2M+OworCit2b2lkIHRlc3QwMSgpCit7 CisgIHR5cGVkZWYgdGVzdF90eXBlPHN0ZDo6YWxsb2NhdG9yPE1vdmVPbmx5 Pj4gdWltOworICBzdGQ6OnZlY3Rvcjx1aW0+IHY7CisgIHYuZW1wbGFjZV9i YWNrKHVpbSgpKTsKK30KKworLy8gVW5vcmRlcmVkIGNvbnRhaW5lcnMgZG9u J3QgdXNlIGFsbG9jYXRvcl90cmFpdHMgeWV0IHNvIG5lZWQgZnVsbAorLy8g QWxsb2NhdG9yIGludGVyZmFjZSwgZGVyaXZlIGZyb20gc3RkOjphbGxvY2F0 b3IgdG8gZ2V0IGl0LgordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCBSPgor c3RydWN0IEFsbG9jIDogc3RkOjphbGxvY2F0b3I8VD4KK3sKKyAgdGVtcGxh dGU8dHlwZW5hbWUgVT4KKyAgICBzdHJ1Y3QgcmViaW5kIHsgdHlwZWRlZiBB bGxvYzxVLCBSPiBvdGhlcjsgfTsKKworICBBbGxvYygpID0gZGVmYXVsdDsK KworICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIEFsbG9jKGNvbnN0IEFs bG9jPFUsIFI+JikgeyB9CisKKyAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OmNv bmRpdGlvbmFsPFIsIFQmJiwgY29uc3QgVCY+Ojp0eXBlIGFyZ190eXBlOwor CisgIHZvaWQgY29uc3RydWN0KFQqIHAsIGFyZ190eXBlKSBjb25zdAorICB7 IG5ldygodm9pZCopcCkgVCgpOyB9Cit9OworCisvLyB2ZXJpZnkgaXNfY29w eV9jb25zdHJ1Y3RpYmxlIGRlcGVuZHMgb24gYWxsb2NhdG9yCit0eXBlZGVm IHRlc3RfdHlwZTxBbGxvYzxNb3ZlT25seSwgdHJ1ZT4+IHVpbV9ydmFsOwor c3RhdGljX2Fzc2VydChzdGQ6OmlzX2NvcHlfY29uc3RydWN0aWJsZTx1aW1f cnZhbD46OnZhbHVlLCAiaXMgbm90IGNvcHlhYmxlIik7CisKK3R5cGVkZWYg dGVzdF90eXBlPEFsbG9jPE1vdmVPbmx5LCBmYWxzZT4+IHVpbV9sdmFsOwor c3RhdGljX2Fzc2VydChzdGQ6OmlzX2NvcHlfY29uc3RydWN0aWJsZTx1aW1f bHZhbD46OnZhbHVlLCAiaXMgY29weWFibGUiKTsKZGlmZiAtLWdpdCBhL2xp YnN0ZGMrKy12My90ZXN0c3VpdGUvMjNfY29udGFpbmVycy91bm9yZGVyZWRf bXVsdGltYXAvNTUwNDMuY2MgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIz X2NvbnRhaW5lcnMvdW5vcmRlcmVkX211bHRpbWFwLzU1MDQzLmNjCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZTkxMmVmNgotLS0g L2Rldi9udWxsCisrKyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjNfY29u dGFpbmVycy91bm9yZGVyZWRfbXVsdGltYXAvNTUwNDMuY2MKQEAgLTAsMCAr MSw2OSBAQAorLy8geyBkZy1vcHRpb25zICItc3RkPWdudSsrMHgiIH0KKy8v IHsgZGctZG8gY29tcGlsZSB9CisKKy8vIENvcHlyaWdodCAoQykgMjAxMyBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZp bGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMg bGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRl ciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworLy8gd2l0aCB0aGlzIGxpYnJh cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKy8vIDxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gbGlic3RkYysr LzU1MDQzCisKKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUg PHZlY3Rvcj4KKworc3RydWN0IE1vdmVPbmx5Cit7CisgIE1vdmVPbmx5KCkg PSBkZWZhdWx0OworICBNb3ZlT25seShNb3ZlT25seSYmKSA9IGRlZmF1bHQ7 Cit9OworCit1c2luZyBoYXNoID0gc3RkOjpoYXNoPGludD47Cit1c2luZyBl cXVhbCA9IHN0ZDo6ZXF1YWxfdG88aW50PjsKKwordGVtcGxhdGU8dHlwZW5h bWUgQWxsb2M+CisgIHVzaW5nIHRlc3RfdHlwZSA9IHN0ZDo6dW5vcmRlcmVk X211bHRpbWFwPGludCwgTW92ZU9ubHksIGhhc2gsIGVxdWFsLCBBbGxvYz47 CisKK3ZvaWQgdGVzdDAxKCkKK3sKKyAgdHlwZWRlZiB0ZXN0X3R5cGU8c3Rk OjphbGxvY2F0b3I8TW92ZU9ubHk+PiB1aW07CisgIHN0ZDo6dmVjdG9yPHVp bT4gdjsKKyAgdi5lbXBsYWNlX2JhY2sodWltKCkpOworfQorCisvLyBVbm9y ZGVyZWQgY29udGFpbmVycyBkb24ndCB1c2UgYWxsb2NhdG9yX3RyYWl0cyB5 ZXQgc28gbmVlZCBmdWxsCisvLyBBbGxvY2F0b3IgaW50ZXJmYWNlLCBkZXJp dmUgZnJvbSBzdGQ6OmFsbG9jYXRvciB0byBnZXQgaXQuCit0ZW1wbGF0ZTx0 eXBlbmFtZSBULCBib29sIFI+CitzdHJ1Y3QgQWxsb2MgOiBzdGQ6OmFsbG9j YXRvcjxUPgoreworICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0cnVj dCByZWJpbmQgeyB0eXBlZGVmIEFsbG9jPFUsIFI+IG90aGVyOyB9OworCisg IEFsbG9jKCkgPSBkZWZhdWx0OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIFU+ CisgICAgQWxsb2MoY29uc3QgQWxsb2M8VSwgUj4mKSB7IH0KKworICB0eXBl ZGVmIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8UiwgVCYmLCBjb25zdCBU Jj46OnR5cGUgYXJnX3R5cGU7CisKKyAgdm9pZCBjb25zdHJ1Y3QoVCogcCwg YXJnX3R5cGUpIGNvbnN0CisgIHsgbmV3KCh2b2lkKilwKSBUKCk7IH0KK307 CisKKy8vIHZlcmlmeSBpc19jb3B5X2NvbnN0cnVjdGlibGUgZGVwZW5kcyBv biBhbGxvY2F0b3IKK3R5cGVkZWYgdGVzdF90eXBlPEFsbG9jPE1vdmVPbmx5 LCB0cnVlPj4gdWltX3J2YWw7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29w eV9jb25zdHJ1Y3RpYmxlPHVpbV9ydmFsPjo6dmFsdWUsICJpcyBub3QgY29w eWFibGUiKTsKKwordHlwZWRlZiB0ZXN0X3R5cGU8QWxsb2M8TW92ZU9ubHks IGZhbHNlPj4gdWltX2x2YWw7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29w eV9jb25zdHJ1Y3RpYmxlPHVpbV9sdmFsPjo6dmFsdWUsICJpcyBjb3B5YWJs ZSIpOwpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19j b250YWluZXJzL3Vub3JkZXJlZF9tdWx0aXNldC81NTA0My5jYyBiL2xpYnN0 ZGMrKy12My90ZXN0c3VpdGUvMjNfY29udGFpbmVycy91bm9yZGVyZWRfbXVs dGlzZXQvNTUwNDMuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uZWJiOGNiOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnN0ZGMrKy12 My90ZXN0c3VpdGUvMjNfY29udGFpbmVycy91bm9yZGVyZWRfbXVsdGlzZXQv NTUwNDMuY2MKQEAgLTAsMCArMSw3MyBAQAorLy8geyBkZy1vcHRpb25zICIt c3RkPWdudSsrMHgiIH0KKy8vIHsgZGctZG8gY29tcGlsZSB9CisKKy8vIENv cHlyaWdodCAoQykgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBD KysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1 bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9w dGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJh cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwor Ly8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4g IElmIG5vdCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4KKworLy8gbGlic3RkYysrLzU1MDQzCisKKyNpbmNsdWRlIDx1bm9yZGVy ZWRfc2V0PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworc3RydWN0IE1vdmVPbmx5 Cit7CisgIE1vdmVPbmx5KCkgPSBkZWZhdWx0OworICBNb3ZlT25seShNb3Zl T25seSYmKSA9IGRlZmF1bHQ7Cit9OworCitzdHJ1Y3QgZXF1YWwgeworICBi b29sIG9wZXJhdG9yKCkoY29uc3QgTW92ZU9ubHkmLCBjb25zdCBNb3ZlT25s eSkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorfTsKK3N0cnVjdCBoYXNoIHsK KyAgc2l6ZV90IG9wZXJhdG9yKCkoY29uc3QgTW92ZU9ubHkmKSBjb25zdCB7 IHJldHVybiAwOyB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBbGxvYz4K KyAgdXNpbmcgdGVzdF90eXBlID0gc3RkOjp1bm9yZGVyZWRfbXVsdGlzZXQ8 TW92ZU9ubHksIGhhc2gsIGVxdWFsLCBBbGxvYz47CisKK3ZvaWQgdGVzdDAx KCkKK3sKKyAgdHlwZWRlZiB0ZXN0X3R5cGU8c3RkOjphbGxvY2F0b3I8TW92 ZU9ubHk+PiB1aW07CisgIHN0ZDo6dmVjdG9yPHVpbT4gdjsKKyAgdi5lbXBs YWNlX2JhY2sodWltKCkpOworfQorCisvLyBVbm9yZGVyZWQgY29udGFpbmVy cyBkb24ndCB1c2UgYWxsb2NhdG9yX3RyYWl0cyB5ZXQgc28gbmVlZCBmdWxs CisvLyBBbGxvY2F0b3IgaW50ZXJmYWNlLCBkZXJpdmUgZnJvbSBzdGQ6OmFs bG9jYXRvciB0byBnZXQgaXQuCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29s IFI+CitzdHJ1Y3QgQWxsb2MgOiBzdGQ6OmFsbG9jYXRvcjxUPgoreworICB0 ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0cnVjdCByZWJpbmQgeyB0eXBl ZGVmIEFsbG9jPFUsIFI+IG90aGVyOyB9OworCisgIEFsbG9jKCkgPSBkZWZh dWx0OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgQWxsb2MoY29u c3QgQWxsb2M8VSwgUj4mKSB7IH0KKworICB0eXBlZGVmIHR5cGVuYW1lIHN0 ZDo6Y29uZGl0aW9uYWw8UiwgVCYmLCBjb25zdCBUJj46OnR5cGUgYXJnX3R5 cGU7CisKKyAgdm9pZCBjb25zdHJ1Y3QoVCogcCwgYXJnX3R5cGUpIGNvbnN0 CisgIHsgbmV3KCh2b2lkKilwKSBUKCk7IH0KK307CisKKy8vIHZlcmlmeSBp c19jb3B5X2NvbnN0cnVjdGlibGUgZGVwZW5kcyBvbiBhbGxvY2F0b3IKK3R5 cGVkZWYgdGVzdF90eXBlPEFsbG9jPE1vdmVPbmx5LCB0cnVlPj4gdWltX3J2 YWw7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29weV9jb25zdHJ1Y3RpYmxl PHVpbV9ydmFsPjo6dmFsdWUsICJpcyBub3QgY29weWFibGUiKTsKKwordHlw ZWRlZiB0ZXN0X3R5cGU8QWxsb2M8TW92ZU9ubHksIGZhbHNlPj4gdWltX2x2 YWw7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29weV9jb25zdHJ1Y3RpYmxl PHVpbV9sdmFsPjo6dmFsdWUsICJpcyBjb3B5YWJsZSIpOwpkaWZmIC0tZ2l0 IGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWluZXJzL3Vub3Jk ZXJlZF9zZXQvNTUwNDMuY2MgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIz X2NvbnRhaW5lcnMvdW5vcmRlcmVkX3NldC81NTA0My5jYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjBiOTczCi0tLSAvZGV2L251 bGwKKysrIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWluZXJz L3Vub3JkZXJlZF9zZXQvNTUwNDMuY2MKQEAgLTAsMCArMSw3MyBAQAorLy8g eyBkZy1vcHRpb25zICItc3RkPWdudSsrMHgiIH0KKy8vIHsgZGctZG8gY29t cGlsZSB9CisKKy8vIENvcHlyaWdodCAoQykgMjAxMyBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBv ZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBm cmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisv LyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMs IG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgor CisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhbG9uZworLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg ZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKy8vIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KKworLy8gbGlic3RkYysrLzU1MDQzCisKKyNp bmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorI2luY2x1ZGUgPHZlY3Rvcj4KKwor c3RydWN0IE1vdmVPbmx5Cit7CisgIE1vdmVPbmx5KCkgPSBkZWZhdWx0Owor ICBNb3ZlT25seShNb3ZlT25seSYmKSA9IGRlZmF1bHQ7Cit9OworCitzdHJ1 Y3QgZXF1YWwgeworICBib29sIG9wZXJhdG9yKCkoY29uc3QgTW92ZU9ubHkm LCBjb25zdCBNb3ZlT25seSkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorfTsK K3N0cnVjdCBoYXNoIHsKKyAgc2l6ZV90IG9wZXJhdG9yKCkoY29uc3QgTW92 ZU9ubHkmKSBjb25zdCB7IHJldHVybiAwOyB9Cit9OworCit0ZW1wbGF0ZTx0 eXBlbmFtZSBBbGxvYz4KKyAgdXNpbmcgdGVzdF90eXBlID0gc3RkOjp1bm9y ZGVyZWRfc2V0PE1vdmVPbmx5LCBoYXNoLCBlcXVhbCwgQWxsb2M+OworCit2 b2lkIHRlc3QwMSgpCit7CisgIHR5cGVkZWYgdGVzdF90eXBlPHN0ZDo6YWxs b2NhdG9yPE1vdmVPbmx5Pj4gdWltOworICBzdGQ6OnZlY3Rvcjx1aW0+IHY7 CisgIHYuZW1wbGFjZV9iYWNrKHVpbSgpKTsKK30KKworLy8gVW5vcmRlcmVk IGNvbnRhaW5lcnMgZG9uJ3QgdXNlIGFsbG9jYXRvcl90cmFpdHMgeWV0IHNv IG5lZWQgZnVsbAorLy8gQWxsb2NhdG9yIGludGVyZmFjZSwgZGVyaXZlIGZy b20gc3RkOjphbGxvY2F0b3IgdG8gZ2V0IGl0LgordGVtcGxhdGU8dHlwZW5h bWUgVCwgYm9vbCBSPgorc3RydWN0IEFsbG9jIDogc3RkOjphbGxvY2F0b3I8 VD4KK3sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdHJ1Y3QgcmVi aW5kIHsgdHlwZWRlZiBBbGxvYzxVLCBSPiBvdGhlcjsgfTsKKworICBBbGxv YygpID0gZGVmYXVsdDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAg IEFsbG9jKGNvbnN0IEFsbG9jPFUsIFI+JikgeyB9CisKKyAgdHlwZWRlZiB0 eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPFIsIFQmJiwgY29uc3QgVCY+Ojp0 eXBlIGFyZ190eXBlOworCisgIHZvaWQgY29uc3RydWN0KFQqIHAsIGFyZ190 eXBlKSBjb25zdAorICB7IG5ldygodm9pZCopcCkgVCgpOyB9Cit9OworCisv LyB2ZXJpZnkgaXNfY29weV9jb25zdHJ1Y3RpYmxlIGRlcGVuZHMgb24gYWxs b2NhdG9yCit0eXBlZGVmIHRlc3RfdHlwZTxBbGxvYzxNb3ZlT25seSwgdHJ1 ZT4+IHVpbV9ydmFsOworc3RhdGljX2Fzc2VydChzdGQ6OmlzX2NvcHlfY29u c3RydWN0aWJsZTx1aW1fcnZhbD46OnZhbHVlLCAiaXMgbm90IGNvcHlhYmxl Iik7CisKK3R5cGVkZWYgdGVzdF90eXBlPEFsbG9jPE1vdmVPbmx5LCBmYWxz ZT4+IHVpbV9sdmFsOworc3RhdGljX2Fzc2VydChzdGQ6OmlzX2NvcHlfY29u c3RydWN0aWJsZTx1aW1fbHZhbD46OnZhbHVlLCAiaXMgY29weWFibGUiKTsK --e89a8f234715b5033104d364743b--