From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6819 invoked by alias); 18 Oct 2012 21:06:30 -0000 Received: (qmail 6387 invoked by uid 22791); 18 Oct 2012 21:06:11 -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-ie0-f175.google.com (HELO mail-ie0-f175.google.com) (209.85.223.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 18 Oct 2012 21:06:04 +0000 Received: by mail-ie0-f175.google.com with SMTP id c13so16153903ieb.20 for ; Thu, 18 Oct 2012 14:06:02 -0700 (PDT) MIME-Version: 1.0 Received: by 10.50.185.200 with SMTP id fe8mr6254773igc.35.1350594362735; Thu, 18 Oct 2012 14:06:02 -0700 (PDT) Received: by 10.42.158.202 with HTTP; Thu, 18 Oct 2012 14:06:02 -0700 (PDT) Date: Thu, 18 Oct 2012 21:20:00 -0000 Message-ID: Subject: [v3] add C++11 allocator support to forward_list From: Jonathan Wakely To: "libstdc++" , gcc-patches Content-Type: multipart/mixed; boundary=14dae934067339fa8b04cc5bc1f9 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: 2012-10/txt/msg01757.txt.bz2 --14dae934067339fa8b04cc5bc1f9 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 771 I should get some of the allocator work out of my git tree while we're in stage 1, this is for forward_list. * include/bits/forward_list.h: Add C++11 allocator support. * include/bits/forward_list.tcc: Likewise. * doc/xml/manual/status_cxx2011.xml: Update. * testsuite/23_containers/forward_list/allocator/copy.cc: New. * testsuite/23_containers/forward_list/allocator/copy_assign.cc: New. * testsuite/23_containers/forward_list/allocator/minimal.cc: New. * testsuite/23_containers/forward_list/allocator/move_assign.cc: New. * testsuite/23_containers/forward_list/allocator/noexcept.cc: New. * testsuite/23_containers/forward_list/allocator/swap.cc: New. Tested x86_64-linux, committed to trunk. --14dae934067339fa8b04cc5bc1f9 Content-Type: text/plain; charset=US-ASCII; name="patch.txt" Content-Disposition: attachment; filename="patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h8gczt740 Content-length: 32741 Y29tbWl0IDJjNWIzNDRlZjA4YjcyY2JmOWUyMWY5ODU5Zjg1ZTU0ZjNlODdm MjYKQXV0aG9yOiBKb25hdGhhbiBXYWtlbHkgPGp3YWtlbHkuZ2NjQGdtYWls LmNvbT4KRGF0ZTogICBNb24gTWFyIDEyIDIyOjQzOjM0IDIwMTIgKzAwMDAK CiAgICAJKiBpbmNsdWRlL2JpdHMvZm9yd2FyZF9saXN0Lmg6IEFkZCBDKysx MSBhbGxvY2F0b3Igc3VwcG9ydC4KICAgIAkqIGluY2x1ZGUvYml0cy9mb3J3 YXJkX2xpc3QudGNjOiBMaWtld2lzZS4KICAgIAkqIGRvYy94bWwvbWFudWFs L3N0YXR1c19jeHgyMDExLnhtbDogVXBkYXRlLgogICAgCSogdGVzdHN1aXRl LzIzX2NvbnRhaW5lcnMvZm9yd2FyZF9saXN0L2FsbG9jYXRvci9jb3B5LmNj OiBOZXcuCiAgICAJKiB0ZXN0c3VpdGUvMjNfY29udGFpbmVycy9mb3J3YXJk X2xpc3QvYWxsb2NhdG9yL2NvcHlfYXNzaWduLmNjOiBOZXcuCiAgICAJKiB0 ZXN0c3VpdGUvMjNfY29udGFpbmVycy9mb3J3YXJkX2xpc3QvYWxsb2NhdG9y L21pbmltYWwuY2M6IE5ldy4KICAgIAkqIHRlc3RzdWl0ZS8yM19jb250YWlu ZXJzL2ZvcndhcmRfbGlzdC9hbGxvY2F0b3IvbW92ZV9hc3NpZ24uY2M6IE5l dy4KICAgIAkqIHRlc3RzdWl0ZS8yM19jb250YWluZXJzL2ZvcndhcmRfbGlz dC9hbGxvY2F0b3Ivbm9leGNlcHQuY2M6IE5ldy4KICAgIAkqIHRlc3RzdWl0 ZS8yM19jb250YWluZXJzL2ZvcndhcmRfbGlzdC9hbGxvY2F0b3Ivc3dhcC5j YzogTmV3LgoKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9kb2MveG1sL21h bnVhbC9zdGF0dXNfY3h4MjAxMS54bWwgYi9saWJzdGRjKystdjMvZG9jL3ht bC9tYW51YWwvc3RhdHVzX2N4eDIwMTEueG1sCmluZGV4IDFlMTQ5ZjAuLmJh MzdlMGUgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9kb2MveG1sL21hbnVh bC9zdGF0dXNfY3h4MjAxMS54bWwKKysrIGIvbGlic3RkYysrLXYzL2RvYy94 bWwvbWFudWFsL3N0YXR1c19jeHgyMDExLnhtbApAQCAtMTM3OCw3ICsxMzc4 LDggQEAgcGFydGljdWxhciByZWxlYXNlLgogICAgICAgPGVudHJ5PjIzLjIu MTwvZW50cnk+CiAgICAgICA8ZW50cnk+R2VuZXJhbCBjb250YWluZXIgcmVx dWlyZW1lbnRzPC9lbnRyeT4KICAgICAgIDxlbnRyeT5QYXJ0aWFsPC9lbnRy eT4KLSAgICAgIDxlbnRyeT5Pbmx5IDxjb2RlPnZlY3RvcjwvY29kZT4gbWVl dHMgdGhlIHJlcXVpcmVtZW50cworICAgICAgPGVudHJ5Pk9ubHkgPGNvZGU+ dmVjdG9yPC9jb2RlPiBhbmQgPGNvZGU+Zm9yd2FyZF9saXN0PC9jb2RlPgor ICAgICAgICAgICAgIG1lZXQgdGhlIHJlcXVpcmVtZW50cwogICAgICAgICAg ICAgIHJlbGF0aW5nIHRvIGFsbG9jYXRvciB1c2UgYW5kIHByb3BhZ2F0aW9u LjwvZW50cnk+CiAgICAgPC9yb3c+CiAgICAgPHJvdz4KZGlmZiAtLWdpdCBh L2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvZm9yd2FyZF9saXN0LmggYi9s aWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2ZvcndhcmRfbGlzdC5oCmluZGV4 IGNlMzU1MDQuLmE1YzlmNDMgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9p bmNsdWRlL2JpdHMvZm9yd2FyZF9saXN0LmgKKysrIGIvbGlic3RkYysrLXYz L2luY2x1ZGUvYml0cy9mb3J3YXJkX2xpc3QuaApAQCAtMjY2LDExICsyNjYs MTUgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0NPTlRBSU5FUgogICAg IHN0cnVjdCBfRndkX2xpc3RfYmFzZQogICAgIHsKICAgICBwcm90ZWN0ZWQ6 Ci0gICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmVi aW5kPF9UcD46Om90aGVyIF9UcF9hbGxvY190eXBlOworICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fYWxsb2NfdHJhaXRzPF9BbGxvYz4g X0FsbG9jX3RyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9j X3RyYWl0czo6dGVtcGxhdGUgcmViaW5kPF9UcD46Om90aGVyCisgICAgICAg IF9UcF9hbGxvY190eXBlOwogCi0gICAgICB0eXBlZGVmIHR5cGVuYW1lIF9B bGxvYzo6dGVtcGxhdGUgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxv Y190cmFpdHM6OnRlbXBsYXRlCiAgICAgICAgIHJlYmluZDxfRndkX2xpc3Rf bm9kZTxfVHA+Pjo6b3RoZXIgX05vZGVfYWxsb2NfdHlwZTsKIAorICAgICAg dHlwZWRlZiBfX2dudV9jeHg6Ol9fYWxsb2NfdHJhaXRzPF9Ob2RlX2FsbG9j X3R5cGU+IF9Ob2RlX2FsbG9jX3RyYWl0czsKKwogICAgICAgc3RydWN0IF9G d2RfbGlzdF9pbXBsIAogICAgICAgOiBwdWJsaWMgX05vZGVfYWxsb2NfdHlw ZQogICAgICAgewpAQCAtMzEyLDEyICszMTYsNyBAQCBfR0xJQkNYWF9CRUdJ Tl9OQU1FU1BBQ0VfQ09OVEFJTkVSCiAKICAgICAgIF9Gd2RfbGlzdF9iYXNl KGNvbnN0IF9Gd2RfbGlzdF9iYXNlJiBfX2xzdCwgY29uc3QgX05vZGVfYWxs b2NfdHlwZSYgX19hKTsKIAotICAgICAgX0Z3ZF9saXN0X2Jhc2UoX0Z3ZF9s aXN0X2Jhc2UmJiBfX2xzdCwgY29uc3QgX05vZGVfYWxsb2NfdHlwZSYgX19h KQotICAgICAgOiBfTV9pbXBsKF9fYSkKLSAgICAgIHsKLQl0aGlzLT5fTV9p bXBsLl9NX2hlYWQuX01fbmV4dCA9IF9fbHN0Ll9NX2ltcGwuX01faGVhZC5f TV9uZXh0OwotCV9fbHN0Ll9NX2ltcGwuX01faGVhZC5fTV9uZXh0ID0gMDsK LSAgICAgIH0KKyAgICAgIF9Gd2RfbGlzdF9iYXNlKF9Gd2RfbGlzdF9iYXNl JiYgX19sc3QsIGNvbnN0IF9Ob2RlX2FsbG9jX3R5cGUmIF9fYSk7CiAKICAg ICAgIF9Gd2RfbGlzdF9iYXNlKF9Gd2RfbGlzdF9iYXNlJiYgX19sc3QpCiAg ICAgICA6IF9NX2ltcGwoc3RkOjptb3ZlKF9fbHN0Ll9NX2dldF9Ob2RlX2Fs bG9jYXRvcigpKSkKQEAgLTMzMyw3ICszMzIsNyBAQCBfR0xJQkNYWF9CRUdJ Tl9OQU1FU1BBQ0VfQ09OVEFJTkVSCiAKICAgICAgIF9Ob2RlKgogICAgICAg X01fZ2V0X25vZGUoKQotICAgICAgeyByZXR1cm4gX01fZ2V0X05vZGVfYWxs b2NhdG9yKCkuYWxsb2NhdGUoMSk7IH0KKyAgICAgIHsgcmV0dXJuIF9Ob2Rl X2FsbG9jX3RyYWl0czo6YWxsb2NhdGUoX01fZ2V0X05vZGVfYWxsb2NhdG9y KCksIDEpOyB9CiAKICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9Bcmdz PgogICAgICAgICBfTm9kZSoKQEAgLTM0Miw4ICszNDEsOCBAQCBfR0xJQkNY WF9CRUdJTl9OQU1FU1BBQ0VfQ09OVEFJTkVSCiAgICAgICAgICAgX05vZGUq IF9fbm9kZSA9IHRoaXMtPl9NX2dldF9ub2RlKCk7CiAgICAgICAgICAgX190 cnkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgX01fZ2V0X05vZGVf YWxsb2NhdG9yKCkuY29uc3RydWN0KF9fbm9kZSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmZvcndhcmQ8 X0FyZ3M+KF9fYXJncykuLi4pOworICAgICAgICAgICAgICBfTm9kZV9hbGxv Y190cmFpdHM6OmNvbnN0cnVjdChfTV9nZXRfTm9kZV9hbGxvY2F0b3IoKSwg X19ub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwogICAg ICAgICAgICAgICBfX25vZGUtPl9NX25leHQgPSAwOwogICAgICAgICAgICAg fQogICAgICAgICAgIF9fY2F0Y2goLi4uKQpAQCAtMzYwLDcgKzM1OSw3IEBA IF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9DT05UQUlORVIKIAogICAgICAg dm9pZAogICAgICAgX01fcHV0X25vZGUoX05vZGUqIF9fcCkKLSAgICAgIHsg X01fZ2V0X05vZGVfYWxsb2NhdG9yKCkuZGVhbGxvY2F0ZShfX3AsIDEpOyB9 CisgICAgICB7IF9Ob2RlX2FsbG9jX3RyYWl0czo6ZGVhbGxvY2F0ZShfTV9n ZXRfTm9kZV9hbGxvY2F0b3IoKSwgX19wLCAxKTsgfQogCiAgICAgICBfRndk X2xpc3Rfbm9kZV9iYXNlKgogICAgICAgX01fZXJhc2VfYWZ0ZXIoX0Z3ZF9s aXN0X25vZGVfYmFzZSogX19wb3MpOwpAQCAtNDEzLDE0ICs0MTIsMTYgQEAg X0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0NPTlRBSU5FUgogICAgICAgdHlw ZWRlZiBfRndkX2xpc3Rfbm9kZV9iYXNlICAgICAgICAgICAgICAgICAgICAg ICAgICBfTm9kZV9iYXNlOwogICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFz ZTo6X1RwX2FsbG9jX3R5cGUgICAgICAgICAgICAgICBfVHBfYWxsb2NfdHlw ZTsKICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Ol9Ob2RlX2FsbG9j X3R5cGUgICAgICAgICAgICAgX05vZGVfYWxsb2NfdHlwZTsKKyAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Ol9Ob2RlX2FsbG9jX3RyYWl0cyAgICAg ICAgICAgX05vZGVfYWxsb2NfdHJhaXRzOworICAgICAgdHlwZWRlZiBfX2du dV9jeHg6Ol9fYWxsb2NfdHJhaXRzPF9UcF9hbGxvY190eXBlPiAgICBfQWxs b2NfdHJhaXRzOwogCiAgICAgcHVibGljOgogICAgICAgLy8gdHlwZXM6CiAg ICAgICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZhbHVlX3R5cGU7Ci0gICAgICB0eXBlZGVmIHR5cGVu YW1lIF9UcF9hbGxvY190eXBlOjpwb2ludGVyICAgICAgICAgICAgIHBvaW50 ZXI7Ci0gICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcF9hbGxvY190eXBlOjpj b25zdF9wb2ludGVyICAgICAgIGNvbnN0X3BvaW50ZXI7Ci0gICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9UcF9hbGxvY190eXBlOjpyZWZlcmVuY2UgICAgICAg ICAgIHJlZmVyZW5jZTsKLSAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RwX2Fs bG9jX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSAgICAgY29uc3RfcmVmZXJlbmNl OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzOjpwb2lu dGVyICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfQWxsb2NfdHJhaXRzOjpjb25zdF9wb2ludGVyICAgICAgICBjb25z dF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJh aXRzOjpyZWZlcmVuY2UgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM6OmNvbnN0X3JlZmVyZW5j ZSAgICAgIGNvbnN0X3JlZmVyZW5jZTsKICAKICAgICAgIHR5cGVkZWYgX0Z3 ZF9saXN0X2l0ZXJhdG9yPF9UcD4gICAgICAgICAgICAgICAgICAgICAgaXRl cmF0b3I7CiAgICAgICB0eXBlZGVmIF9Gd2RfbGlzdF9jb25zdF9pdGVyYXRv cjxfVHA+ICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOwpAQCAtNTA0 LDEyICs1MDUsMTAgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0NPTlRB SU5FUgogICAgICAgICogIEBicmllZiAgVGhlICVmb3J3YXJkX2xpc3QgY29w eSBjb25zdHJ1Y3Rvci4KICAgICAgICAqICBAcGFyYW0gIF9fbGlzdCAgQSAl Zm9yd2FyZF9saXN0IG9mIGlkZW50aWNhbCBlbGVtZW50IGFuZCBhbGxvY2F0 b3IKICAgICAgICAqICAgICAgICAgICAgICAgIHR5cGVzLgotICAgICAgICoK LSAgICAgICAqICBUaGUgbmV3bHktY3JlYXRlZCAlZm9yd2FyZF9saXN0IHVz ZXMgYSBjb3B5IG9mIHRoZSBhbGxvY2F0aW9uCi0gICAgICAgKiAgb2JqZWN0 IHVzZWQgYnkgQGEgX19saXN0LgogICAgICAgICovCiAgICAgICBmb3J3YXJk X2xpc3QoY29uc3QgZm9yd2FyZF9saXN0JiBfX2xpc3QpCi0gICAgICA6IF9C YXNlKF9fbGlzdC5fTV9nZXRfTm9kZV9hbGxvY2F0b3IoKSkKKyAgICAgIDog X0Jhc2UoX05vZGVfYWxsb2NfdHJhaXRzOjpfU19zZWxlY3Rfb25fY29weSgK KyAgICAgICAgICAgICAgICBfX2xpc3QuX01fZ2V0X05vZGVfYWxsb2NhdG9y KCkpKQogICAgICAgeyBfTV9yYW5nZV9pbml0aWFsaXplKF9fbGlzdC5iZWdp bigpLCBfX2xpc3QuZW5kKCkpOyB9CiAKICAgICAgIC8qKgpAQCAtNTYwLDE2 ICs1NTksMTggQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0NPTlRBSU5F UgogICAgICAgICogICAgICAgICAgICAgICAgdHlwZXMuCiAgICAgICAgKgog ICAgICAgICogIFRoZSBjb250ZW50cyBvZiBAYSBfX2xpc3QgYXJlIG1vdmVk IGludG8gdGhpcyAlZm9yd2FyZF9saXN0Ci0gICAgICAgKiAgKHdpdGhvdXQg Y29weWluZykuIEBhIF9fbGlzdCBpcyBhIHZhbGlkLCBidXQgdW5zcGVjaWZp ZWQKLSAgICAgICAqICAlZm9yd2FyZF9saXN0CisgICAgICAgKiAgKHdpdGhv dXQgY29weWluZywgaWYgdGhlIGFsbG9jYXRvcnMgcGVybWl0IGl0KS4KKyAg ICAgICAqICBAYSBfX2xpc3QgaXMgYSB2YWxpZCwgYnV0IHVuc3BlY2lmaWVk ICVmb3J3YXJkX2xpc3QKICAgICAgICAqLwogICAgICAgZm9yd2FyZF9saXN0 JgogICAgICAgb3BlcmF0b3I9KGZvcndhcmRfbGlzdCYmIF9fbGlzdCkKKyAg ICAgIG5vZXhjZXB0KF9Ob2RlX2FsbG9jX3RyYWl0czo6X1Nfbm90aHJvd19t b3ZlKCkpCiAgICAgICB7Ci0JLy8gTkI6IERSIDEyMDQuCi0JLy8gTkI6IERS IDY3NS4KLQl0aGlzLT5jbGVhcigpOwotCXRoaXMtPnN3YXAoX19saXN0KTsK KyAgICAgICAgY29uc3RleHByIGJvb2wgX19tb3ZlX3N0b3JhZ2UgPQorICAg ICAgICAgIF9Ob2RlX2FsbG9jX3RyYWl0czo6X1NfcHJvcGFnYXRlX29uX21v dmVfYXNzaWduKCkKKyAgICAgICAgICB8fCBfTm9kZV9hbGxvY190cmFpdHM6 Ol9TX2Fsd2F5c19lcXVhbCgpOworICAgICAgICBfTV9tb3ZlX2Fzc2lnbihz dGQ6Om1vdmUoX19saXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50 ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19tb3ZlX3N0b3JhZ2U+KCkpOwogCXJl dHVybiAqdGhpczsKICAgICAgIH0KIApAQCAtNzQwLDcgKzc0MSw3IEBAIF9H TElCQ1hYX0JFR0lOX05BTUVTUEFDRV9DT05UQUlORVIKICAgICAgICAqLwog ICAgICAgc2l6ZV90eXBlCiAgICAgICBtYXhfc2l6ZSgpIGNvbnN0IG5vZXhj ZXB0Ci0gICAgICB7IHJldHVybiB0aGlzLT5fTV9nZXRfTm9kZV9hbGxvY2F0 b3IoKS5tYXhfc2l6ZSgpOyB9CisgICAgICB7IHJldHVybiBfTm9kZV9hbGxv Y190cmFpdHM6Om1heF9zaXplKHRoaXMtPl9NX2dldF9Ob2RlX2FsbG9jYXRv cigpKTsgfQogCiAgICAgICAvLyAyMy4yLjMuMyBlbGVtZW50IGFjY2VzczoK IApAQCAtOTgxLDggKzk4MiwxMyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BB Q0VfQ09OVEFJTkVSCiAgICAgICAgKi8KICAgICAgIHZvaWQKICAgICAgIHN3 YXAoZm9yd2FyZF9saXN0JiBfX2xpc3QpCi0gICAgICB7IHN0ZDo6c3dhcCh0 aGlzLT5fTV9pbXBsLl9NX2hlYWQuX01fbmV4dCwKLQkJICBfX2xpc3QuX01f aW1wbC5fTV9oZWFkLl9NX25leHQpOyB9CisgICAgICBub2V4Y2VwdChfTm9k ZV9hbGxvY190cmFpdHM6Ol9TX25vdGhyb3dfc3dhcCgpKQorICAgICAgewor ICAgICAgICBzdGQ6OnN3YXAodGhpcy0+X01faW1wbC5fTV9oZWFkLl9NX25l eHQsCisJCSAgX19saXN0Ll9NX2ltcGwuX01faGVhZC5fTV9uZXh0KTsKKwlf Tm9kZV9hbGxvY190cmFpdHM6Ol9TX29uX3N3YXAodGhpcy0+X01fZ2V0X05v ZGVfYWxsb2NhdG9yKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2xpc3QuX01fZ2V0X05vZGVfYWxsb2NhdG9yKCkpOwor ICAgICAgfQogCiAgICAgICAvKioKICAgICAgICAqICBAYnJpZWYgUmVzaXpl cyB0aGUgJWZvcndhcmRfbGlzdCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBv ZgpAQCAtMTIzOSw2ICsxMjQ1LDMzIEBAIF9HTElCQ1hYX0JFR0lOX05BTUVT UEFDRV9DT05UQUlORVIKICAgICAgIC8vIENhbGxlZCBieSByZXNpemUoc3op LgogICAgICAgdm9pZAogICAgICAgX01fZGVmYXVsdF9pbnNlcnRfYWZ0ZXIo Y29uc3RfaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24pOworCisgICAg ICAvLyBDYWxsZWQgYnkgb3BlcmF0b3I9KGZvcndhcmRfbGlzdCYmKQorICAg ICAgdm9pZAorICAgICAgX01fbW92ZV9hc3NpZ24oZm9yd2FyZF9saXN0JiYg X19saXN0LCBzdGQ6OnRydWVfdHlwZSkgbm9leGNlcHQKKyAgICAgIHsKKyAg ICAgICAgY2xlYXIoKTsKKyAgICAgICAgc3RkOjpzd2FwKHRoaXMtPl9NX2lt cGwuX01faGVhZC5fTV9uZXh0LAorICAgICAgICAgICAgICAgICAgX19saXN0 Ll9NX2ltcGwuX01faGVhZC5fTV9uZXh0KTsKKyAgICAgICAgc3RkOjpfX2Fs bG9jX29uX21vdmUodGhpcy0+X01fZ2V0X05vZGVfYWxsb2NhdG9yKCksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGlzdC5fTV9nZXRfTm9k ZV9hbGxvY2F0b3IoKSk7CisgICAgICB9CisKKyAgICAgIC8vIENhbGxlZCBi eSBvcGVyYXRvcj0oZm9yd2FyZF9saXN0JiYpCisgICAgICB2b2lkCisgICAg ICBfTV9tb3ZlX2Fzc2lnbihmb3J3YXJkX2xpc3QmJiBfX2xpc3QsIHN0ZDo6 ZmFsc2VfdHlwZSkKKyAgICAgIHsKKyAgICAgICAgaWYgKF9fbGlzdC5fTV9n ZXRfTm9kZV9hbGxvY2F0b3IoKSA9PSB0aGlzLT5fTV9nZXRfTm9kZV9hbGxv Y2F0b3IoKSkKKyAgICAgICAgICBfTV9tb3ZlX2Fzc2lnbihzdGQ6Om1vdmUo X19saXN0KSwgc3RkOjp0cnVlX3R5cGUoKSk7CisgICAgICAgIGVsc2UKKyAg ICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGUgcnZhbHVlJ3MgYWxsb2Nh dG9yIGNhbm5vdCBiZSBtb3ZlZCwgb3IgaXMgbm90IGVxdWFsLAorICAgICAg ICAgICAgLy8gc28gd2UgbmVlZCB0byBpbmRpdmlkdWFsbHkgbW92ZSBlYWNo IGVsZW1lbnQuCisgICAgICAgICAgICB0aGlzLT5hc3NpZ24oc3RkOjpfX21h a2VfbW92ZV9pZl9ub2V4Y2VwdF9pdGVyYXRvcihfX2xpc3QuYmVnaW4oKSks CisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpfX21ha2VfbW92ZV9p Zl9ub2V4Y2VwdF9pdGVyYXRvcihfX2xpc3QuZW5kKCkpKTsKKyAgICAgICAg ICAgIF9fbGlzdC5jbGVhcigpOworICAgICAgICAgIH0KKyAgICAgIH0KICAg ICB9OwogCiAgIC8qKgpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1 ZGUvYml0cy9mb3J3YXJkX2xpc3QudGNjIGIvbGlic3RkYysrLXYzL2luY2x1 ZGUvYml0cy9mb3J3YXJkX2xpc3QudGNjCmluZGV4IDNjOWYyMzguLjVkMThh NmUgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvZm9y d2FyZF9saXN0LnRjYworKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRz L2ZvcndhcmRfbGlzdC50Y2MKQEAgLTUyLDYgKzUyLDMwIEBAIF9HTElCQ1hY X0JFR0lOX05BTUVTUEFDRV9DT05UQUlORVIKICAgICB9CiAKICAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgX0Z3ZF9s aXN0X2Jhc2U8X1RwLCBfQWxsb2M+OjoKKyAgICBfRndkX2xpc3RfYmFzZShf RndkX2xpc3RfYmFzZSYmIF9fbHN0LCBjb25zdCBfTm9kZV9hbGxvY190eXBl JiBfX2EpCisgICAgOiBfTV9pbXBsKF9fYSkKKyAgICB7CisgICAgICBpZiAo X19sc3QuX01fZ2V0X05vZGVfYWxsb2NhdG9yKCkgPT0gX19hKQorICAgICAg ICB0aGlzLT5fTV9pbXBsLl9NX2hlYWQuX01fbmV4dCA9IF9fbHN0Ll9NX2lt cGwuX01faGVhZC5fTV9uZXh0OworICAgICAgZWxzZQorICAgICAgICB7Cisg ICAgICAgICAgdGhpcy0+X01faW1wbC5fTV9oZWFkLl9NX25leHQgPSAwOwor ICAgICAgICAgIF9Gd2RfbGlzdF9ub2RlX2Jhc2UqIF9fdG8gPSAmdGhpcy0+ X01faW1wbC5fTV9oZWFkOworICAgICAgICAgIF9Ob2RlKiBfX2N1cnIgPSBz dGF0aWNfY2FzdDxfTm9kZSo+KF9fbHN0Ll9NX2ltcGwuX01faGVhZC5fTV9u ZXh0KTsKKworICAgICAgICAgIHdoaWxlIChfX2N1cnIpCisgICAgICAgICAg ICB7CisgICAgICAgICAgICAgIF9fdG8tPl9NX25leHQgPQorICAgICAgICAg ICAgICAgIF9NX2NyZWF0ZV9ub2RlKHN0ZDo6bW92ZV9pZl9ub2V4Y2VwdChf X2N1cnItPl9NX3ZhbHVlKSk7CisgICAgICAgICAgICAgIF9fdG8gPSBfX3Rv LT5fTV9uZXh0OworICAgICAgICAgICAgICBfX2N1cnIgPSBzdGF0aWNfY2Fz dDxfTm9kZSo+KF9fY3Vyci0+X01fbmV4dCk7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICAgIF9fbHN0Ll9NX2ltcGwuX01faGVhZC5fTV9uZXh0 ID0gMDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBl bmFtZSBfQWxsb2M+CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+ CiAgICAgICBfRndkX2xpc3Rfbm9kZV9iYXNlKgogICAgICAgX0Z3ZF9saXN0 X2Jhc2U8X1RwLCBfQWxsb2M+OjoKQEAgLTcyLDcgKzk2LDcgQEAgX0dMSUJD WFhfQkVHSU5fTkFNRVNQQUNFX0NPTlRBSU5FUgogICAgIHsKICAgICAgIF9O b2RlKiBfX2N1cnIgPSBzdGF0aWNfY2FzdDxfTm9kZSo+KF9fcG9zLT5fTV9u ZXh0KTsKICAgICAgIF9fcG9zLT5fTV9uZXh0ID0gX19jdXJyLT5fTV9uZXh0 OwotICAgICAgX01fZ2V0X05vZGVfYWxsb2NhdG9yKCkuZGVzdHJveShfX2N1 cnIpOworICAgICAgX05vZGVfYWxsb2NfdHJhaXRzOjpkZXN0cm95KF9NX2dl dF9Ob2RlX2FsbG9jYXRvcigpLCBfX2N1cnIpOwogICAgICAgX01fcHV0X25v ZGUoX19jdXJyKTsKICAgICAgIHJldHVybiBfX3Bvcy0+X01fbmV4dDsKICAg ICB9CkBAIC04OCw3ICsxMTIsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BB Q0VfQ09OVEFJTkVSCiAgICAgICAgIHsKICAgICAgICAgICBfTm9kZSogX190 ZW1wID0gX19jdXJyOwogICAgICAgICAgIF9fY3VyciA9IHN0YXRpY19jYXN0 PF9Ob2RlKj4oX19jdXJyLT5fTV9uZXh0KTsKLSAgICAgICAgICBfTV9nZXRf Tm9kZV9hbGxvY2F0b3IoKS5kZXN0cm95KF9fdGVtcCk7CisgICAgICAgICAg X05vZGVfYWxsb2NfdHJhaXRzOjpkZXN0cm95KF9NX2dldF9Ob2RlX2FsbG9j YXRvcigpLCBfX3RlbXApOwogICAgICAgICAgIF9NX3B1dF9ub2RlKF9fdGVt cCk7CiAgICAgICAgIH0KICAgICAgIF9fcG9zLT5fTV9uZXh0ID0gX19sYXN0 OwpAQCAtMTQ0LDYgKzE2OCwxOCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BB Q0VfQ09OVEFJTkVSCiAgICAgewogICAgICAgaWYgKCZfX2xpc3QgIT0gdGhp cykKICAgICAgICAgeworCSAgaWYgKF9Ob2RlX2FsbG9jX3RyYWl0czo6X1Nf cHJvcGFnYXRlX29uX2NvcHlfYXNzaWduKCkpCisJICAgIHsKKyAgICAgICAg ICAgICAgYXV0byYgX190aGlzX2FsbG9jID0gdGhpcy0+X01fZ2V0X05vZGVf YWxsb2NhdG9yKCk7CisgICAgICAgICAgICAgIGF1dG8mIF9fdGhhdF9hbGxv YyA9IF9fbGlzdC5fTV9nZXRfTm9kZV9hbGxvY2F0b3IoKTsKKyAgICAgICAg ICAgICAgaWYgKCFfTm9kZV9hbGxvY190cmFpdHM6Ol9TX2Fsd2F5c19lcXVh bCgpCisJICAgICAgICAgICYmIF9fdGhpc19hbGxvYyAhPSBfX3RoYXRfYWxs b2MpCisJICAgICAgICB7CisJCSAgLy8gcmVwbGFjZW1lbnQgYWxsb2NhdG9y IGNhbm5vdCBmcmVlIGV4aXN0aW5nIHN0b3JhZ2UKKwkJICBjbGVhcigpOwor CQl9CisJICAgICAgc3RkOjpfX2FsbG9jX29uX2NvcHkoX190aGlzX2FsbG9j LCBfX3RoYXRfYWxsb2MpOworICAgICAgICAgICAgfQogICAgICAgICAgIGl0 ZXJhdG9yIF9fcHJldjEgPSBiZWZvcmVfYmVnaW4oKTsKICAgICAgICAgICBp dGVyYXRvciBfX2N1cnIxID0gYmVnaW4oKTsKICAgICAgICAgICBpdGVyYXRv ciBfX2xhc3QxID0gZW5kKCk7CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMv dGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvZm9yd2FyZF9saXN0L2FsbG9jYXRv ci9jb3B5LmNjIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWlu ZXJzL2ZvcndhcmRfbGlzdC9hbGxvY2F0b3IvY29weS5jYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzg4ZWYzCi0tLSAvZGV2L251 bGwKKysrIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWluZXJz L2ZvcndhcmRfbGlzdC9hbGxvY2F0b3IvY29weS5jYwpAQCAtMCwwICsxLDU1 IEBACisvLyBDb3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJ U08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkg aXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91 ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBs aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxv bmcKKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO RzMuICBJZiBub3Qgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisKKy8vIHsgZGctb3B0aW9ucyAiLXN0ZD1nbnUrKzB4IiB9CisK KyNpbmNsdWRlIDxmb3J3YXJkX2xpc3Q+CisjaW5jbHVkZSA8dGVzdHN1aXRl X2hvb2tzLmg+CisjaW5jbHVkZSA8dGVzdHN1aXRlX2FsbG9jYXRvci5oPgor CitzdHJ1Y3QgVCB7IGludCBpOyB9OworCit1c2luZyBfX2dudV90ZXN0Ojpw cm9wYWdhdGluZ19hbGxvY2F0b3I7CisKK3ZvaWQgdGVzdDAxKCkKK3sKKyAg Ym9vbCB0ZXN0IF9fYXR0cmlidXRlX18oKHVudXNlZCkpID0gdHJ1ZTsKKyAg dHlwZWRlZiBwcm9wYWdhdGluZ19hbGxvY2F0b3I8VCwgZmFsc2U+IGFsbG9j X3R5cGU7CisgIHR5cGVkZWYgc3RkOjpmb3J3YXJkX2xpc3Q8VCwgYWxsb2Nf dHlwZT4gdGVzdF90eXBlOworICB0ZXN0X3R5cGUgdjEoYWxsb2NfdHlwZSgx KSk7CisgIHRlc3RfdHlwZSB2Mih2MSk7CisgIFZFUklGWSgxID09IHYxLmdl dF9hbGxvY2F0b3IoKS5nZXRfcGVyc29uYWxpdHkoKSk7CisgIFZFUklGWSgw ID09IHYyLmdldF9hbGxvY2F0b3IoKS5nZXRfcGVyc29uYWxpdHkoKSk7Cit9 CisKK3ZvaWQgdGVzdDAyKCkKK3sKKyAgYm9vbCB0ZXN0IF9fYXR0cmlidXRl X18oKHVudXNlZCkpID0gdHJ1ZTsKKyAgdHlwZWRlZiBwcm9wYWdhdGluZ19h bGxvY2F0b3I8VCwgdHJ1ZT4gYWxsb2NfdHlwZTsKKyAgdHlwZWRlZiBzdGQ6 OmZvcndhcmRfbGlzdDxULCBhbGxvY190eXBlPiB0ZXN0X3R5cGU7CisgIHRl c3RfdHlwZSB2MShhbGxvY190eXBlKDEpKTsKKyAgdGVzdF90eXBlIHYyKHYx KTsKKyAgVkVSSUZZKDEgPT0gdjEuZ2V0X2FsbG9jYXRvcigpLmdldF9wZXJz b25hbGl0eSgpKTsKKyAgVkVSSUZZKDEgPT0gdjIuZ2V0X2FsbG9jYXRvcigp LmdldF9wZXJzb25hbGl0eSgpKTsKK30KKworaW50IG1haW4oKQoreworICB0 ZXN0MDEoKTsKKyAgdGVzdDAyKCk7CisgIHJldHVybiAwOworfQpkaWZmIC0t Z2l0IGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWluZXJzL2Zv cndhcmRfbGlzdC9hbGxvY2F0b3IvY29weV9hc3NpZ24uY2MgYi9saWJzdGRj KystdjMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvZm9yd2FyZF9saXN0L2Fs bG9jYXRvci9jb3B5X2Fzc2lnbi5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5lNzg4NTZhCi0tLSAvZGV2L251bGwKKysrIGIvbGli c3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWluZXJzL2ZvcndhcmRfbGlz dC9hbGxvY2F0b3IvY29weV9hc3NpZ24uY2MKQEAgLTAsMCArMSw1NyBAQAor Ly8gQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMr KyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVu ZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0 aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFy eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisv LyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAg SWYgbm90IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ LgorCisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9Z251KysweCIgfQorCisjaW5j bHVkZSA8Zm9yd2FyZF9saXN0PgorI2luY2x1ZGUgPHRlc3RzdWl0ZV9ob29r cy5oPgorI2luY2x1ZGUgPHRlc3RzdWl0ZV9hbGxvY2F0b3IuaD4KKworc3Ry dWN0IFQgeyBpbnQgaTsgfTsKKwordXNpbmcgX19nbnVfdGVzdDo6cHJvcGFn YXRpbmdfYWxsb2NhdG9yOworCit2b2lkIHRlc3QwMSgpCit7CisgIGJvb2wg dGVzdCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSA9IHRydWU7CisgIHR5cGVk ZWYgcHJvcGFnYXRpbmdfYWxsb2NhdG9yPFQsIGZhbHNlPiBhbGxvY190eXBl OworICB0eXBlZGVmIHN0ZDo6Zm9yd2FyZF9saXN0PFQsIGFsbG9jX3R5cGU+ IHRlc3RfdHlwZTsKKyAgdGVzdF90eXBlIHYxKGFsbG9jX3R5cGUoMSkpOwor ICB0ZXN0X3R5cGUgdjIoYWxsb2NfdHlwZSgyKSk7CisgIHYyID0gdjE7Cisg IFZFUklGWSgxID09IHYxLmdldF9hbGxvY2F0b3IoKS5nZXRfcGVyc29uYWxp dHkoKSk7CisgIFZFUklGWSgyID09IHYyLmdldF9hbGxvY2F0b3IoKS5nZXRf cGVyc29uYWxpdHkoKSk7Cit9CisKK3ZvaWQgdGVzdDAyKCkKK3sKKyAgYm9v bCB0ZXN0IF9fYXR0cmlidXRlX18oKHVudXNlZCkpID0gdHJ1ZTsKKyAgdHlw ZWRlZiBwcm9wYWdhdGluZ19hbGxvY2F0b3I8VCwgdHJ1ZT4gYWxsb2NfdHlw ZTsKKyAgdHlwZWRlZiBzdGQ6OmZvcndhcmRfbGlzdDxULCBhbGxvY190eXBl PiB0ZXN0X3R5cGU7CisgIHRlc3RfdHlwZSB2MShhbGxvY190eXBlKDEpKTsK KyAgdGVzdF90eXBlIHYyKGFsbG9jX3R5cGUoMikpOworICB2MiA9IHYxOwor ICBWRVJJRlkoMSA9PSB2MS5nZXRfYWxsb2NhdG9yKCkuZ2V0X3BlcnNvbmFs aXR5KCkpOworICBWRVJJRlkoMSA9PSB2Mi5nZXRfYWxsb2NhdG9yKCkuZ2V0 X3BlcnNvbmFsaXR5KCkpOworfQorCitpbnQgbWFpbigpCit7CisgIHRlc3Qw MSgpOworICB0ZXN0MDIoKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQg YS9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvZm9yd2Fy ZF9saXN0L2FsbG9jYXRvci9taW5pbWFsLmNjIGIvbGlic3RkYysrLXYzL3Rl c3RzdWl0ZS8yM19jb250YWluZXJzL2ZvcndhcmRfbGlzdC9hbGxvY2F0b3Iv bWluaW1hbC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li41MTAzM2YxCi0tLSAvZGV2L251bGwKKysrIGIvbGlic3RkYysrLXYzL3Rl c3RzdWl0ZS8yM19jb250YWluZXJzL2ZvcndhcmRfbGlzdC9hbGxvY2F0b3Iv bWluaW1hbC5jYwpAQCAtMCwwICsxLDQ3IEBACisvLyBDb3B5cmlnaHQgKEMp IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisvLworLy8gVGhpcyBm aWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlz IGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0 ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8g WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKy8vIHdpdGggdGhpcyBsaWJy YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisvLyA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIHsgZGctb3B0 aW9ucyAiLXN0ZD1nbnUrKzB4IiB9CisKKyNpbmNsdWRlIDxmb3J3YXJkX2xp c3Q+CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHRlc3RzdWl0ZV9o b29rcy5oPgorI2luY2x1ZGUgPHRlc3RzdWl0ZV9hbGxvY2F0b3IuaD4KKwor c3RydWN0IFQgeyBpbnQgaTsgfTsKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBU JiBsLCBjb25zdCBUJiByKSB7IHJldHVybiBsLmkgPT0gci5pOyB9Citib29s IG9wZXJhdG9yPChjb25zdCBUJiBsLCBjb25zdCBUJiByKSB7IHJldHVybiBs LmkgPCByLmk7IH0KKwordXNpbmcgX19nbnVfdGVzdDo6U2ltcGxlQWxsb2Nh dG9yOworCit0ZW1wbGF0ZSBjbGFzcyBzdGQ6OmZvcndhcmRfbGlzdDxULCBT aW1wbGVBbGxvY2F0b3I8VD4+OworCit2b2lkIHRlc3QwMSgpCit7CisgIGJv b2wgdGVzdCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSA9IHRydWU7CisgIHR5 cGVkZWYgU2ltcGxlQWxsb2NhdG9yPFQ+IGFsbG9jX3R5cGU7CisgIHR5cGVk ZWYgc3RkOjphbGxvY2F0b3JfdHJhaXRzPGFsbG9jX3R5cGU+IHRyYWl0c190 eXBlOworICB0eXBlZGVmIHN0ZDo6Zm9yd2FyZF9saXN0PFQsIGFsbG9jX3R5 cGU+IHRlc3RfdHlwZTsKKyAgdGVzdF90eXBlIHYoYWxsb2NfdHlwZXt9KTsK KyAgVkVSSUZZKCB2Lm1heF9zaXplKCkgPT0gdHJhaXRzX3R5cGU6Om1heF9z aXplKHYuZ2V0X2FsbG9jYXRvcigpKSApOworfQorCitpbnQgbWFpbigpCit7 CisgIHRlc3QwMSgpOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xp YnN0ZGMrKy12My90ZXN0c3VpdGUvMjNfY29udGFpbmVycy9mb3J3YXJkX2xp c3QvYWxsb2NhdG9yL21vdmVfYXNzaWduLmNjIGIvbGlic3RkYysrLXYzL3Rl c3RzdWl0ZS8yM19jb250YWluZXJzL2ZvcndhcmRfbGlzdC9hbGxvY2F0b3Iv bW92ZV9hc3NpZ24uY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uMTg1MzlmZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnN0ZGMrKy12 My90ZXN0c3VpdGUvMjNfY29udGFpbmVycy9mb3J3YXJkX2xpc3QvYWxsb2Nh dG9yL21vdmVfYXNzaWduLmNjCkBAIC0wLDAgKzEsNTcgQEAKKy8vIENvcHly aWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKy8vCisv LyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFy eS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUK Ky8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8v IGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK Ky8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisv LyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworLy8gd2l0aCB0 aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBz ZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8g eyBkZy1vcHRpb25zICItc3RkPWdudSsrMHgiIH0KKworI2luY2x1ZGUgPGZv cndhcmRfbGlzdD4KKyNpbmNsdWRlIDx0ZXN0c3VpdGVfaG9va3MuaD4KKyNp bmNsdWRlIDx0ZXN0c3VpdGVfYWxsb2NhdG9yLmg+CisKK3N0cnVjdCBUIHsg aW50IGk7IH07CisKK3VzaW5nIF9fZ251X3Rlc3Q6OnByb3BhZ2F0aW5nX2Fs bG9jYXRvcjsKKwordm9pZCB0ZXN0MDEoKQoreworICBib29sIHRlc3QgX19h dHRyaWJ1dGVfXygodW51c2VkKSkgPSB0cnVlOworICB0eXBlZGVmIHByb3Bh Z2F0aW5nX2FsbG9jYXRvcjxULCBmYWxzZT4gYWxsb2NfdHlwZTsKKyAgdHlw ZWRlZiBzdGQ6OmZvcndhcmRfbGlzdDxULCBhbGxvY190eXBlPiB0ZXN0X3R5 cGU7CisgIHRlc3RfdHlwZSB2MShhbGxvY190eXBlKDEpKTsKKyAgdGVzdF90 eXBlIHYyKGFsbG9jX3R5cGUoMikpOworICB2MiA9IHN0ZDo6bW92ZSh2MSk7 CisgIFZFUklGWSgxID09IHYxLmdldF9hbGxvY2F0b3IoKS5nZXRfcGVyc29u YWxpdHkoKSk7CisgIFZFUklGWSgyID09IHYyLmdldF9hbGxvY2F0b3IoKS5n ZXRfcGVyc29uYWxpdHkoKSk7Cit9CisKK3ZvaWQgdGVzdDAyKCkKK3sKKyAg Ym9vbCB0ZXN0IF9fYXR0cmlidXRlX18oKHVudXNlZCkpID0gdHJ1ZTsKKyAg dHlwZWRlZiBwcm9wYWdhdGluZ19hbGxvY2F0b3I8VCwgdHJ1ZT4gYWxsb2Nf dHlwZTsKKyAgdHlwZWRlZiBzdGQ6OmZvcndhcmRfbGlzdDxULCBhbGxvY190 eXBlPiB0ZXN0X3R5cGU7CisgIHRlc3RfdHlwZSB2MShhbGxvY190eXBlKDEp KTsKKyAgdGVzdF90eXBlIHYyKGFsbG9jX3R5cGUoMikpOworICB2MiA9IHN0 ZDo6bW92ZSh2MSk7CisgIFZFUklGWSgwID09IHYxLmdldF9hbGxvY2F0b3Io KS5nZXRfcGVyc29uYWxpdHkoKSk7CisgIFZFUklGWSgxID09IHYyLmdldF9h bGxvY2F0b3IoKS5nZXRfcGVyc29uYWxpdHkoKSk7Cit9CisKK2ludCBtYWlu KCkKK3sKKyAgdGVzdDAxKCk7CisgIHRlc3QwMigpOworICByZXR1cm4gMDsK K30KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjNfY29u dGFpbmVycy9mb3J3YXJkX2xpc3QvYWxsb2NhdG9yL25vZXhjZXB0LmNjIGIv bGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWluZXJzL2ZvcndhcmRf bGlzdC9hbGxvY2F0b3Ivbm9leGNlcHQuY2MKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uNzdkMmMyMQotLS0gL2Rldi9udWxsCisrKyBi L2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjNfY29udGFpbmVycy9mb3J3YXJk X2xpc3QvYWxsb2NhdG9yL25vZXhjZXB0LmNjCkBAIC0wLDAgKzEsNzYgQEAK Ky8vIENvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBD KysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1 bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9w dGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJh cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwor Ly8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4g IElmIG5vdCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4KKworLy8geyBkZy1vcHRpb25zICItc3RkPWdudSsrMHgiIH0KKworI2lu Y2x1ZGUgPGZvcndhcmRfbGlzdD4KKyNpbmNsdWRlIDx0ZXN0c3VpdGVfaG9v a3MuaD4KKyNpbmNsdWRlIDx0ZXN0c3VpdGVfYWxsb2NhdG9yLmg+CisKK3N0 cnVjdCBUIHsgaW50IGk7IH07CisKK25hbWVzcGFjZSBfX2dudV90ZXN0Cit7 CisgIGlubGluZSB2b2lkCisgIHN3YXAocHJvcGFnYXRpbmdfYWxsb2NhdG9y PFQsIHRydWU+JiBsLCBwcm9wYWdhdGluZ19hbGxvY2F0b3I8VCwgdHJ1ZT4m IHIpCisgIG5vZXhjZXB0KGZhbHNlKQorICB7CisgICAgdHlwZWRlZiB1bmVx X2FsbG9jYXRvcjxUPiBiYXNlX2FsbG9jOworICAgIHN3YXAoc3RhdGljX2Nh c3Q8YmFzZV9hbGxvYyY+KGwpLCBzdGF0aWNfY2FzdDxiYXNlX2FsbG9jJj4o cikpOworICB9Cit9CisKK3VzaW5nIF9fZ251X3Rlc3Q6OnByb3BhZ2F0aW5n X2FsbG9jYXRvcjsKKwordm9pZCB0ZXN0MDEoKQoreworICB0eXBlZGVmIHN0 ZDo6YWxsb2NhdG9yPFQ+IGFsbG9jX3R5cGU7CisgIHR5cGVkZWYgc3RkOjpm b3J3YXJkX2xpc3Q8VCwgYWxsb2NfdHlwZT4gdGVzdF90eXBlOworICB0ZXN0 X3R5cGUgdjE7CisgIHRlc3RfdHlwZSB2MjsKKyAgLy8gdGhpcyBpcyBhIEdO VSBleHRlbnNpb24gZm9yIHN0ZDo6YWxsb2NhdG9yCisgIHN0YXRpY19hc3Nl cnQoIG5vZXhjZXB0KCB2MSA9IHN0ZDo6bW92ZSh2MikgKSwgIk1vdmUgYXNz aWduIGNhbm5vdCB0aHJvdyIgKTsKKyAgc3RhdGljX2Fzc2VydCggbm9leGNl cHQoIHYxLnN3YXAodjIpICksICJTd2FwIGNhbm5vdCB0aHJvdyIgKTsKK30K Kwordm9pZCB0ZXN0MDIoKQoreworICB0eXBlZGVmIHByb3BhZ2F0aW5nX2Fs bG9jYXRvcjxULCBmYWxzZT4gYWxsb2NfdHlwZTsKKyAgdHlwZWRlZiBzdGQ6 OmZvcndhcmRfbGlzdDxULCBhbGxvY190eXBlPiB0ZXN0X3R5cGU7CisgIHRl c3RfdHlwZSB2MShhbGxvY190eXBlKDEpKTsKKyAgdGVzdF90eXBlIHYyKGFs bG9jX3R5cGUoMikpOworICBzdGF0aWNfYXNzZXJ0KCAhbm9leGNlcHQoIHYx ID0gc3RkOjptb3ZlKHYyKSApLCAiTW92ZSBhc3NpZ24gY2FuIHRocm93IiAp OworICBzdGF0aWNfYXNzZXJ0KCBub2V4Y2VwdCggdjEuc3dhcCh2MikgKSwg IlN3YXAgY2Fubm90IHRocm93IiApOworfQorCit2b2lkIHRlc3QwMygpCit7 CisgIHR5cGVkZWYgcHJvcGFnYXRpbmdfYWxsb2NhdG9yPFQsIHRydWU+IGFs bG9jX3R5cGU7CisgIHR5cGVkZWYgc3RkOjpmb3J3YXJkX2xpc3Q8VCwgYWxs b2NfdHlwZT4gdGVzdF90eXBlOworICB0ZXN0X3R5cGUgdjEoYWxsb2NfdHlw ZSgxKSk7CisgIHRlc3RfdHlwZSB2MihhbGxvY190eXBlKDIpKTsKKyAgc3Rh dGljX2Fzc2VydCggbm9leGNlcHQoIHYxID0gc3RkOjptb3ZlKHYyKSApLCAi TW92ZSBhc3NpZ24gY2Fubm90IHRocm93IiApOworICAvLyBzdGF0aWNfYXNz ZXJ0KCAhbm9leGNlcHQoIHYxLnN3YXAodjIpICksICJTd2FwIGNhbiB0aHJv dyIgKTsKK30KKworaW50IG1haW4oKQoreworICB0ZXN0MDEoKTsKKyAgdGVz dDAyKCk7CisgIHRlc3QwMygpOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdp dCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjNfY29udGFpbmVycy9mb3J3 YXJkX2xpc3QvYWxsb2NhdG9yL3N3YXAuY2MgYi9saWJzdGRjKystdjMvdGVz dHN1aXRlLzIzX2NvbnRhaW5lcnMvZm9yd2FyZF9saXN0L2FsbG9jYXRvci9z d2FwLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYw ZDgzZDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzdGRjKystdjMvdGVzdHN1 aXRlLzIzX2NvbnRhaW5lcnMvZm9yd2FyZF9saXN0L2FsbG9jYXRvci9zd2Fw LmNjCkBAIC0wLDAgKzEsNTcgQEAKKy8vIENvcHlyaWdodCAoQykgMjAxMiBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKy8vCisvLyBUaGlzIGZpbGUgaXMg cGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFy eSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg dGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJz aW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhbG9uZworLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNl ZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKy8vIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8geyBkZy1vcHRpb25zICIt c3RkPWdudSsrMHgiIH0KKworI2luY2x1ZGUgPGZvcndhcmRfbGlzdD4KKyNp bmNsdWRlIDx0ZXN0c3VpdGVfaG9va3MuaD4KKyNpbmNsdWRlIDx0ZXN0c3Vp dGVfYWxsb2NhdG9yLmg+CisKK3N0cnVjdCBUIHsgaW50IGk7IH07CisKK3Vz aW5nIF9fZ251X3Rlc3Q6OnByb3BhZ2F0aW5nX2FsbG9jYXRvcjsKKwordm9p ZCB0ZXN0MDEoKQoreworICBib29sIHRlc3QgX19hdHRyaWJ1dGVfXygodW51 c2VkKSkgPSB0cnVlOworICB0eXBlZGVmIHByb3BhZ2F0aW5nX2FsbG9jYXRv cjxULCBmYWxzZT4gYWxsb2NfdHlwZTsKKyAgdHlwZWRlZiBzdGQ6OmZvcndh cmRfbGlzdDxULCBhbGxvY190eXBlPiB0ZXN0X3R5cGU7CisgIHRlc3RfdHlw ZSB2MShhbGxvY190eXBlKDEpKTsKKyAgdGVzdF90eXBlIHYyKGFsbG9jX3R5 cGUoMikpOworICBzdGQ6OnN3YXAodjEsIHYyKTsKKyAgVkVSSUZZKDEgPT0g djEuZ2V0X2FsbG9jYXRvcigpLmdldF9wZXJzb25hbGl0eSgpKTsKKyAgVkVS SUZZKDIgPT0gdjIuZ2V0X2FsbG9jYXRvcigpLmdldF9wZXJzb25hbGl0eSgp KTsKK30KKwordm9pZCB0ZXN0MDIoKQoreworICBib29sIHRlc3QgX19hdHRy aWJ1dGVfXygodW51c2VkKSkgPSB0cnVlOworICB0eXBlZGVmIHByb3BhZ2F0 aW5nX2FsbG9jYXRvcjxULCB0cnVlPiBhbGxvY190eXBlOworICB0eXBlZGVm IHN0ZDo6Zm9yd2FyZF9saXN0PFQsIGFsbG9jX3R5cGU+IHRlc3RfdHlwZTsK KyAgdGVzdF90eXBlIHYxKGFsbG9jX3R5cGUoMSkpOworICB0ZXN0X3R5cGUg djIoYWxsb2NfdHlwZSgyKSk7CisgIHN0ZDo6c3dhcCh2MSwgdjIpOworICBW RVJJRlkoMiA9PSB2MS5nZXRfYWxsb2NhdG9yKCkuZ2V0X3BlcnNvbmFsaXR5 KCkpOworICBWRVJJRlkoMSA9PSB2Mi5nZXRfYWxsb2NhdG9yKCkuZ2V0X3Bl cnNvbmFsaXR5KCkpOworfQorCitpbnQgbWFpbigpCit7CisgIHRlc3QwMSgp OworICB0ZXN0MDIoKTsKKyAgcmV0dXJuIDA7Cit9Cg== --14dae934067339fa8b04cc5bc1f9--