From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24177 invoked by alias); 8 Jun 2013 16:13:54 -0000 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 Received: (qmail 24156 invoked by uid 89); 8 Jun 2013 16:13:54 -0000 X-Spam-SWARE-Status: No, score=-2.8 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,SPF_PASS autolearn=ham version=3.3.1 X-Spam-User: qpsmtpd, 2 recipients Received: from mail-la0-f41.google.com (HELO mail-la0-f41.google.com) (209.85.215.41) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Sat, 08 Jun 2013 16:13:50 +0000 Received: by mail-la0-f41.google.com with SMTP id fn20so4601537lab.14 for ; Sat, 08 Jun 2013 09:13:48 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.112.210.166 with SMTP id mv6mr3275438lbc.51.1370708027915; Sat, 08 Jun 2013 09:13:47 -0700 (PDT) Received: by 10.112.168.163 with HTTP; Sat, 8 Jun 2013 09:13:47 -0700 (PDT) Date: Sat, 08 Jun 2013 16:13:00 -0000 Message-ID: Subject: [patch] C++14: N3671 Making non-modifying sequence operations more robust From: Jonathan Wakely To: "libstdc++" , gcc-patches Content-Type: multipart/mixed; boundary=001a11c3c94218431504dea6d5bb X-Virus-Found: No X-SW-Source: 2013-06/txt/msg00454.txt.bz2 --001a11c3c94218431504dea6d5bb Content-Type: text/plain; charset=ISO-8859-1 Content-length: 715 Another C++14 feature. * include/bits/stl_algo.h (is_permutation): Add overloads from N3671. * include/bits/stl_algobase.h (equal, mismatch): Likewise. * testsuite/25_algorithms/equal/1.cc: Remove duplicate test case. * testsuite/25_algorithms/equal/2.cc: New. * testsuite/25_algorithms/equal/check_type2.cc: New. * testsuite/25_algorithms/is_permutationqual/2.cc: New. * testsuite/25_algorithms/is_permutationqual/check_type2.cc: New. * testsuite/25_algorithms/mismatch/2.cc: New. * testsuite/25_algorithms/mismatch/check_type2.cc: New. * testsuite/util/testsuite_iterators.h: Fix spelling. Tested x86_64-linux, committed to trunk. --001a11c3c94218431504dea6d5bb Content-Type: text/plain; charset=US-ASCII; name="patch.txt" Content-Disposition: attachment; filename="patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hhp05sum0 Content-length: 53062 Y29tbWl0IGQzOGVjMjM3NGZkMTM0OTlkOWFhM2Q2ZTUwNDE5M2VkYjJjYmY3 MDMKQXV0aG9yOiBKb25hdGhhbiBXYWtlbHkgPGp3YWtlbHkuZ2NjQGdtYWls LmNvbT4KRGF0ZTogICBTYXQgSnVuIDggMTY6NDY6MjMgMjAxMyArMDEwMAoK ICAgIAkqIGluY2x1ZGUvYml0cy9zdGxfYWxnby5oIChpc19wZXJtdXRhdGlv bik6IEFkZCBvdmVybG9hZHMgZnJvbSBOMzY3MS4KICAgIAkqIGluY2x1ZGUv Yml0cy9zdGxfYWxnb2Jhc2UuaCAoZXF1YWwsIG1pc21hdGNoKTogTGlrZXdp c2UuCiAgICAJKiB0ZXN0c3VpdGUvMjVfYWxnb3JpdGhtcy9lcXVhbC8xLmNj OiBSZW1vdmUgZHVwbGljYXRlIHRlc3QgY2FzZS4KICAgIAkqIHRlc3RzdWl0 ZS8yNV9hbGdvcml0aG1zL2VxdWFsLzIuY2M6IE5ldy4KICAgIAkqIHRlc3Rz dWl0ZS8yNV9hbGdvcml0aG1zL2VxdWFsL2NoZWNrX3R5cGUyLmNjOiBOZXcu CiAgICAJKiB0ZXN0c3VpdGUvMjVfYWxnb3JpdGhtcy9pc19wZXJtdXRhdGlv bnF1YWwvMi5jYzogTmV3LgogICAgCSogdGVzdHN1aXRlLzI1X2FsZ29yaXRo bXMvaXNfcGVybXV0YXRpb25xdWFsL2NoZWNrX3R5cGUyLmNjOiBOZXcuCiAg ICAJKiB0ZXN0c3VpdGUvMjVfYWxnb3JpdGhtcy9taXNtYXRjaC8yLmNjOiBO ZXcuCiAgICAJKiB0ZXN0c3VpdGUvMjVfYWxnb3JpdGhtcy9taXNtYXRjaC9j aGVja190eXBlMi5jYzogTmV3LgogICAgCSogdGVzdHN1aXRlL3V0aWwvdGVz dHN1aXRlX2l0ZXJhdG9ycy5oOiBGaXggc3BlbGxpbmcuCgpkaWZmIC0tZ2l0 IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIGIvbGli c3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oCmluZGV4IDg3MzAw NWIuLmU2MWYyMmIgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRl L2JpdHMvc3RsX2FsZ28uaAorKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9i aXRzL3N0bF9hbGdvLmgKQEAgLTQzNzEsNiArNDM3MSwxNDAgQEAgX0dMSUJD WFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIHJldHVybiB0cnVl OwogICAgIH0KIAorI2lmIF9fY3BsdXNwbHVzID4gMjAxMTAzTAorICAvKioK KyAgICogIEBicmllZiAgQ2hlY2tzIHdoZXRoZXIgYSBwZXJtdXRhaW9uIG9m IHRoZSBzZWNvbmQgc2VxdWVuY2UgaXMgZXF1YWwKKyAgICogICAgICAgICAg dG8gdGhlIGZpcnN0IHNlcXVlbmNlLgorICAgKiAgQGluZ3JvdXAgbm9uX211 dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdDEgIFN0 YXJ0IG9mIGZpcnN0IHJhbmdlLgorICAgKiAgQHBhcmFtICBfX2xhc3QxICAg RW5kIG9mIGZpcnN0IHJhbmdlLgorICAgKiAgQHBhcmFtICBfX2ZpcnN0MiAg U3RhcnQgb2Ygc2Vjb25kIHJhbmdlLgorICAgKiAgQHBhcmFtICBfX2xhc3Qy ICAgRW5kIG9mIGZpcnN0IHJhbmdlLgorICAgKiAgQHJldHVybiB0cnVlIGlm IHRoZXJlIGV4aXN0cyBhIHBlcm11dGF0aW9uIG9mIHRoZSBlbGVtZW50cyBp biB0aGUgcmFuZ2UKKyAgICogICAgICAgICAgW19fZmlyc3QyLCBfX2xhc3Qy KSwgYmVnaW5uaW5nIHdpdGggRm9yd2FyZEl0ZXJhdG9yMiBiZWdpbiwKKyAg ICogICAgICAgICAgc3VjaCB0aGF0IGVxdWFsKF9fZmlyc3QxLCBfX2xhc3Qx LCBiZWdpbikgcmV0dXJucyB0cnVlOworICAgKiAgICAgICAgICBvdGhlcndp c2UsIHJldHVybnMgZmFsc2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1l IF9Gb3J3YXJkSXRlcmF0b3IxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9y Mj4KKyAgICBib29sCisgICAgaXNfcGVybXV0YXRpb24oX0ZvcndhcmRJdGVy YXRvcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcmF0b3IxIF9fbGFzdDEsCisJ CSAgIF9Gb3J3YXJkSXRlcmF0b3IyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXJh dG9yMiBfX2xhc3QyKQorICAgIHsKKyAgICAgIHVzaW5nIF9DYXQxCisJPSB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcjE+Ojpp dGVyYXRvcl9jYXRlZ29yeTsKKyAgICAgIHVzaW5nIF9DYXQyCisJPSB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcjI+OjppdGVy YXRvcl9jYXRlZ29yeTsKKyAgICAgIHVzaW5nIF9JdDFfaXNfUkEgPSBpc19z YW1lPF9DYXQxLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZz47CisgICAg ICB1c2luZyBfSXQyX2lzX1JBID0gaXNfc2FtZTxfQ2F0MiwgcmFuZG9tX2Fj Y2Vzc19pdGVyYXRvcl90YWc+OworICAgICAgaWYgKF9JdDFfaXNfUkEoKSAm JiBfSXQxX2lzX1JBKCkpCisJeworCSAgYXV0byBfX2QxID0gc3RkOjpkaXN0 YW5jZShfX2ZpcnN0MSwgX19sYXN0MSk7CisJICBhdXRvIF9fZDIgPSBzdGQ6 OmRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKTsKKwkgIGlmIChfX2QxICE9 IF9fZDIpCisJICAgIHJldHVybiBmYWxzZTsKKwl9CisKKyAgICAgIC8vIEVm ZmljaWVudGx5IGNvbXBhcmUgaWRlbnRpY2FsIHByZWZpeGVzOiAgTyhOKSBp ZiBzZXF1ZW5jZXMKKyAgICAgIC8vIGhhdmUgdGhlIHNhbWUgZWxlbWVudHMg aW4gdGhlIHNhbWUgb3JkZXIuCisgICAgICBmb3IgKDsgX19maXJzdDEgIT0g X19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOyArK19fZmlyc3QxLCAr K19fZmlyc3QyKQorCWlmICghKCpfX2ZpcnN0MSA9PSAqX19maXJzdDIpKQor CSAgYnJlYWs7CisKKyAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxICYm IF9fZmlyc3QyID09IF9fbGFzdDIpCisJcmV0dXJuIHRydWU7CisKKyAgICAg IGlmIChzdGQ6OmRpc3RhbmNlKF9fZmlyc3QxLCBfX2xhc3QxKSAhPSBzdGQ6 OmRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSkKKwlyZXR1cm4gZmFsc2U7 CisKKyAgICAgIGZvciAoYXV0byBfX3NjYW4gPSBfX2ZpcnN0MTsgX19zY2Fu ICE9IF9fbGFzdDE7ICsrX19zY2FuKQorCXsKKwkgIGlmIChfX3NjYW4gIT0g X0dMSUJDWFhfU1REX0E6OmZpbmQoX19maXJzdDEsIF9fc2NhbiwgKl9fc2Nh bikpCisJICAgIGNvbnRpbnVlOyAvLyBXZSd2ZSBzZWVuIHRoaXMgb25lIGJl Zm9yZS4KKworCSAgYXV0byBfX21hdGNoZXMgPSBzdGQ6OmNvdW50KF9fZmly c3QyLCBfX2xhc3QyLCAqX19zY2FuKTsKKwkgIGlmICgwID09IF9fbWF0Y2hl cworCSAgICAgIHx8IHN0ZDo6Y291bnQoX19zY2FuLCBfX2xhc3QxLCAqX19z Y2FuKSAhPSBfX21hdGNoZXMpCisJICAgIHJldHVybiBmYWxzZTsKKwl9Cisg ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJp ZWYgIENoZWNrcyB3aGV0aGVyIGEgcGVybXV0YXRpb24gb2YgdGhlIHNlY29u ZCBzZXF1ZW5jZSBpcyBlcXVhbAorICAgKiAgICAgICAgICB0byB0aGUgZmly c3Qgc2VxdWVuY2UuCisgICAqICBAaW5ncm91cCBub25fbXV0YXRpbmdfYWxn b3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0MSAgU3RhcnQgb2YgZmly c3QgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fbGFzdDEgICBFbmQgb2YgZmly c3QgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fZmlyc3QyICBTdGFydCBvZiBz ZWNvbmQgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fbGFzdDIgICBFbmQgb2Yg Zmlyc3QgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fcHJlZCAgICBBIGJpbmFy eSBwcmVkaWNhdGUuCisgICAqICBAcmV0dXJuIHRydWUgaWYgdGhlcmUgZXhp c3RzIGEgcGVybXV0YXRpb24gb2YgdGhlIGVsZW1lbnRzIGluIHRoZSByYW5n ZQorICAgKiAgICAgICAgICBbX19maXJzdDIsIF9fbGFzdDIpLCBiZWdpbm5p bmcgd2l0aCBGb3J3YXJkSXRlcmF0b3IyIGJlZ2luLAorICAgKiAgICAgICAg ICBzdWNoIHRoYXQgZXF1YWwoX19maXJzdDEsIF9fbGFzdDEsIF9fYmVnaW4s IF9fcHJlZCkgcmV0dXJucyB0cnVlOworICAgKiAgICAgICAgICBvdGhlcndp c2UsIHJldHVybnMgZmFsc2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1l IF9Gb3J3YXJkSXRlcmF0b3IxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9y MiwKKwkgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIGJvb2wK KyAgICBpc19wZXJtdXRhdGlvbihfRm9yd2FyZEl0ZXJhdG9yMSBfX2ZpcnN0 MSwgX0ZvcndhcmRJdGVyYXRvcjEgX19sYXN0MSwKKwkJICAgX0ZvcndhcmRJ dGVyYXRvcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcmF0b3IyIF9fbGFzdDIs CisJCSAgIF9CaW5hcnlQcmVkaWNhdGUgX19wcmVkKQorICAgIHsKKyAgICAg IHVzaW5nIF9DYXQxCisJPSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zv cndhcmRJdGVyYXRvcjE+OjppdGVyYXRvcl9jYXRlZ29yeTsKKyAgICAgIHVz aW5nIF9DYXQyCisJPSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh cmRJdGVyYXRvcjI+OjppdGVyYXRvcl9jYXRlZ29yeTsKKyAgICAgIHVzaW5n IF9JdDFfaXNfUkEgPSBpc19zYW1lPF9DYXQxLCByYW5kb21fYWNjZXNzX2l0 ZXJhdG9yX3RhZz47CisgICAgICB1c2luZyBfSXQyX2lzX1JBID0gaXNfc2Ft ZTxfQ2F0MiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWc+OworICAgICAg Y29uc3RleHByIGJvb2wgX19yYV9pdGVycyA9IF9JdDFfaXNfUkEoKSAmJiBf SXQxX2lzX1JBKCk7CisgICAgICBpZiAoX19yYV9pdGVycykKKwl7CisJICBh dXRvIF9fZDEgPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QxLCBfX2xhc3QxKTsK KwkgIGF1dG8gX19kMiA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdDIsIF9fbGFz dDIpOworCSAgaWYgKF9fZDEgIT0gX19kMikKKwkgICAgcmV0dXJuIGZhbHNl OworCX0KKworICAgICAgLy8gRWZmaWNpZW50bHkgY29tcGFyZSBpZGVudGlj YWwgcHJlZml4ZXM6ICBPKE4pIGlmIHNlcXVlbmNlcworICAgICAgLy8gaGF2 ZSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBvcmRlci4KKyAgICAg IGZvciAoOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19f Zmlyc3QyKQorCWlmICghYm9vbChfX3ByZWQoKl9fZmlyc3QxLCAqX19maXJz dDIpKSkKKwkgIGJyZWFrOworCisgICAgICBpZiAoX19yYV9pdGVycykKKwl7 CisJICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKKwkgICAgcmV0dXJuIHRy dWU7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGF1dG8gX19kMSA9IHN0ZDo6 ZGlzdGFuY2UoX19maXJzdDEsIF9fbGFzdDEpOworCSAgYXV0byBfX2QyID0g c3RkOjpkaXN0YW5jZShfX2ZpcnN0MiwgX19sYXN0Mik7CisJICBpZiAoX19k MSA9PSAwICYmIF9fZDIgPT0gMCkKKwkgICAgcmV0dXJuIHRydWU7CisJICBp ZiAoX19kMSAhPSBfX2QyKQorCSAgICByZXR1cm4gZmFsc2U7CisJfQorCisg ICAgICBmb3IgKF9Gb3J3YXJkSXRlcmF0b3IxIF9fc2NhbiA9IF9fZmlyc3Qx OyBfX3NjYW4gIT0gX19sYXN0MTsgKytfX3NjYW4pCisJeworCSAgdXNpbmcg c3RkOjpwbGFjZWhvbGRlcnM6Ol8xOworCisJICBpZiAoX19zY2FuICE9IF9H TElCQ1hYX1NURF9BOjpmaW5kX2lmKF9fZmlyc3QxLCBfX3NjYW4sCisJCQkJ CQlzdGQ6OmJpbmQoX19wcmVkLCBfMSwgKl9fc2NhbikpKQorCSAgICBjb250 aW51ZTsgLy8gV2UndmUgc2VlbiB0aGlzIG9uZSBiZWZvcmUuCisKKwkgIGF1 dG8gX19tYXRjaGVzID0gc3RkOjpjb3VudF9pZihfX2ZpcnN0MiwgX19sYXN0 MiwKKwkJCQkJIHN0ZDo6YmluZChfX3ByZWQsIF8xLCAqX19zY2FuKSk7CisJ ICBpZiAoMCA9PSBfX21hdGNoZXMKKwkgICAgICB8fCBzdGQ6OmNvdW50X2lm KF9fc2NhbiwgX19sYXN0MSwKKwkJCSAgICAgICBzdGQ6OmJpbmQoX19wcmVk LCBfMSwgKl9fc2NhbikpICE9IF9fbWF0Y2hlcykKKwkgICAgcmV0dXJuIGZh bHNlOworCX0KKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyNlbmRpZgor CiAjaWZkZWYgX0dMSUJDWFhfVVNFX0M5OV9TVERJTlRfVFIxCiAgIC8qKgog ICAgKiAgQGJyaWVmIFNodWZmbGUgdGhlIGVsZW1lbnRzIG9mIGEgc2VxdWVu Y2UgdXNpbmcgYSB1bmlmb3JtIHJhbmRvbQpkaWZmIC0tZ2l0IGEvbGlic3Rk YysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaCBiL2xpYnN0ZGMr Ky12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ29iYXNlLmgKaW5kZXggYTkwODgx Zi4uNjdmODU5YiAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUv Yml0cy9zdGxfYWxnb2Jhc2UuaAorKysgYi9saWJzdGRjKystdjMvaW5jbHVk ZS9iaXRzL3N0bF9hbGdvYmFzZS5oCkBAIC03OTgsNiArNzk4LDE5IEBAIF9H TElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAJICAgICAgcmV0dXJu IGZhbHNlOwogCSAgcmV0dXJuIHRydWU7CiAJfQorCisjaWYgX19jcGx1c3Bs dXMgPiAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUkxLCB0 eXBlbmFtZSBfSUkyPgorICAgICAgICBzdGF0aWMgYm9vbAorICAgICAgICBl cXVhbChfSUkxIF9fZmlyc3QxLCBfSUkxIF9fbGFzdDEsIF9JSTIgX19maXJz dDIsIF9JSTIgX19sYXN0MikKKyAgICAgICAgeworCSAgZm9yICg7IF9fZmly c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKKwkgICAg ICArK19fZmlyc3QxLCArK19fZmlyc3QyKQorCSAgICBpZiAoISgqX19maXJz dDEgPT0gKl9fZmlyc3QyKSkKKwkgICAgICByZXR1cm4gZmFsc2U7CisJICBy ZXR1cm4gdHJ1ZTsKKwl9CisjZW5kaWYKICAgICB9OwogCiAgIHRlbXBsYXRl PD4KQEAgLTgxMCw2ICs4MjMsMTcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQ QUNFX1ZFUlNJT04KIAkgIHJldHVybiAhX19idWlsdGluX21lbWNtcChfX2Zp cnN0MSwgX19maXJzdDIsIHNpemVvZihfVHApCiAJCQkJICAgKiAoX19sYXN0 MSAtIF9fZmlyc3QxKSk7CiAJfQorCisjaWYgX19jcGx1c3BsdXMgPiAyMDEx MDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIHN0 YXRpYyBib29sCisgICAgICAgIGVxdWFsKGNvbnN0IF9UcCogX19maXJzdDEs IGNvbnN0IF9UcCogX19sYXN0MSwgY29uc3QgX1RwKiBfX2ZpcnN0MiwKKwkg ICAgICBjb25zdCBfVHAqIF9fbGFzdDIpCisgICAgICAgIHsKKwkgIHJldHVy biAhX19idWlsdGluX21lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIHNpemVv ZihfVHApCisJCQkJICAgKiAoX19sYXN0MSAtIF9fZmlyc3QxKSk7CisJfQor I2VuZGlmCiAgICAgfTsKIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUkxLCB0 eXBlbmFtZSBfSUkyPgpAQCAtODI3LDYgKzg1MSw2NSBAQCBfR0xJQkNYWF9C RUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgcmV0dXJuIHN0ZDo6X19l cXVhbDxfX3NpbXBsZT46OmVxdWFsKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2Zp cnN0Mik7CiAgICAgfQogCisjaWYgX19jcGx1c3BsdXMgPiAyMDExMDNMCisg IHRlbXBsYXRlPGJvb2wgX0Jvb2xUeXBlPgorICAgIHN0cnVjdCBfX2VxdWFs MgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdD4KKwl1c2lu ZyBfSXRlckNhdCA9IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXQ+Ojpp dGVyYXRvcl9jYXRlZ29yeTsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9J dD4KKwl1c2luZyBfSXNSQSA9IGlzX3NhbWU8X0l0ZXJDYXQ8X0l0PiwgcmFu ZG9tX2FjY2Vzc19pdGVyYXRvcl90YWc+OworCisgICAgICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSUkxLCB0eXBlbmFtZSBfSUkyPgorICAgICAgICBzdGF0aWMg Ym9vbAorICAgICAgICBlcXVhbChfSUkxIF9fZmlyc3QxLCBfSUkxIF9fbGFz dDEsIF9JSTIgX19maXJzdDIsIF9JSTIgX19sYXN0MikKKyAgICAgICAgewor CSAgY29uc3RleHByIGJvb2wgX19yYV9pdGVycyA9IF9Jc1JBPF9JSTE+KCkg JiYgX0lzUkE8X0lJMj4oKTsKKwkgIGlmIChfX3JhX2l0ZXJzKQorCSAgICB7 CisJICAgICAgYXV0byBfX2QxID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0MSwg X19sYXN0MSk7CisJICAgICAgYXV0byBfX2QyID0gc3RkOjpkaXN0YW5jZShf X2ZpcnN0MiwgX19sYXN0Mik7CisJICAgICAgaWYgKF9fZDEgIT0gX19kMikK KwkJcmV0dXJuIGZhbHNlOworCSAgICB9CisJICBmb3IgKDsgX19maXJzdDEg IT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOworCSAgICAgICAr K19fZmlyc3QxLCArK19fZmlyc3QyKQorCSAgICBpZiAoISgqX19maXJzdDEg PT0gKl9fZmlyc3QyKSkKKwkgICAgICByZXR1cm4gZmFsc2U7CisJICByZXR1 cm4gX19yYV9pdGVycyB8fCAoX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2Zp cnN0MiA9PSBfX2xhc3QyKTsKKwl9CisgICAgfTsKKworICB0ZW1wbGF0ZTw+ CisgICAgc3RydWN0IF9fZXF1YWwyPHRydWU+CisgICAgeworICAgICAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBzdGF0aWMgYm9vbAorICAg ICAgICBlcXVhbChjb25zdCBfVHAqIF9fZmlyc3QxLCBjb25zdCBfVHAqIF9f bGFzdDEsIGNvbnN0IF9UcCogX19maXJzdDIsCisJICAgICAgY29uc3QgX1Rw KiBfX2xhc3QyKQorICAgICAgICB7CisJICBpZiAoKF9fbGFzdDEgLSBfX2Zp cnN0MSkgIT0gKF9fbGFzdDIgLSBfX2ZpcnN0MikpCisJICAgIHJldHVybiBm YWxzZTsKKwkgIHJldHVybiAhX19idWlsdGluX21lbWNtcChfX2ZpcnN0MSwg X19maXJzdDIsIHNpemVvZihfVHApCisJCQkJICAgKiAoX19sYXN0MSAtIF9f Zmlyc3QxKSk7CisJfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUg X0lJMSwgdHlwZW5hbWUgX0lJMj4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9f ZXF1YWwyX2F1eChfSUkxIF9fZmlyc3QxLCBfSUkxIF9fbGFzdDEsIF9JSTIg X19maXJzdDIsIF9JSTIgX19sYXN0MikKKyAgICB7CisgICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUkxPjo6dmFsdWVfdHlwZSBf VmFsdWVUeXBlMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JSTI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUyOworICAgICAg Y29uc3QgYm9vbCBfX3NpbXBsZSA9ICgoX19pc19pbnRlZ2VyPF9WYWx1ZVR5 cGUxPjo6X192YWx1ZQorCQkJICAgICAgfHwgX19pc19wb2ludGVyPF9WYWx1 ZVR5cGUxPjo6X192YWx1ZSkKKwkgICAgICAgICAgICAgICAgICAgICAmJiBf X2lzX3BvaW50ZXI8X0lJMT46Ol9fdmFsdWUKKwkgICAgICAgICAgICAgICAg ICAgICAmJiBfX2lzX3BvaW50ZXI8X0lJMj46Ol9fdmFsdWUKKwkJCSAgICAg JiYgX19hcmVfc2FtZTxfVmFsdWVUeXBlMSwgX1ZhbHVlVHlwZTI+OjpfX3Zh bHVlKTsKKworICAgICAgcmV0dXJuIF9fZXF1YWwyPF9fc2ltcGxlPjo6ZXF1 YWwoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKKyAg ICB9CisjZW5kaWYKIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWU+ CiAgICAgc3RydWN0IF9fbGNfcmFpCkBAIC0xMDY0LDYgKzExNDcsODYgQEAg X0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KICAgICAgIHJldHVybiB0 cnVlOwogICAgIH0KIAorI2lmIF9fY3BsdXNwbHVzID4gMjAxMTAzTAorICAv KioKKyAgICogIEBicmllZiBUZXN0cyBhIHJhbmdlIGZvciBlbGVtZW50LXdp c2UgZXF1YWxpdHkuCisgICAqICBAaW5ncm91cCBub25fbXV0YXRpbmdfYWxn b3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0MSAgQW4gaW5wdXQgaXRl cmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdDEgICBBbiBpbnB1dCBpdGVy YXRvci4KKyAgICogIEBwYXJhbSAgX19maXJzdDIgIEFuIGlucHV0IGl0ZXJh dG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QyICAgQW4gaW5wdXQgaXRlcmF0 b3IuCisgICAqICBAcmV0dXJuICAgQSBib29sZWFuIHRydWUgb3IgZmFsc2Uu CisgICAqCisgICAqICBUaGlzIGNvbXBhcmVzIHRoZSBlbGVtZW50cyBvZiB0 d28gcmFuZ2VzIHVzaW5nIEBjID09IGFuZCByZXR1cm5zIHRydWUgb3IKKyAg ICogIGZhbHNlIGRlcGVuZGluZyBvbiB3aGV0aGVyIGFsbCBvZiB0aGUgY29y cmVzcG9uZGluZyBlbGVtZW50cyBvZiB0aGUKKyAgICogIHJhbmdlcyBhcmUg ZXF1YWwuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSTEsIHR5cGVu YW1lIF9JSTI+CisgICAgaW5saW5lIGJvb2wKKyAgICBlcXVhbChfSUkxIF9f Zmlyc3QxLCBfSUkxIF9fbGFzdDEsIF9JSTIgX19maXJzdDIsIF9JSTIgX19s YXN0MikKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cwor ICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJh dG9yQ29uY2VwdDxfSUkxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9y ZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lJMj4pCisgICAgICBf X2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0VxdWFsT3BDb25jZXB0PAor CSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lJMT46OnZhbHVlX3R5 cGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUkyPjo6dmFs dWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFu Z2UoX19maXJzdDEsIF9fbGFzdDEpOworICAgICAgX19nbGliY3h4X3JlcXVp cmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QyLCBfX2xhc3QyKTsKKworICAgICAg cmV0dXJuIHN0ZDo6X19lcXVhbDJfYXV4KHN0ZDo6X19uaXRlcl9iYXNlKF9f Zmlyc3QxKSwKKwkJCSAgICAgICBzdGQ6Ol9fbml0ZXJfYmFzZShfX2xhc3Qx KSwKKwkJCSAgICAgICBzdGQ6Ol9fbml0ZXJfYmFzZShfX2ZpcnN0MiksCisJ CQkgICAgICAgc3RkOjpfX25pdGVyX2Jhc2UoX19sYXN0MikpOworICAgIH0K KworICAvKioKKyAgICogIEBicmllZiBUZXN0cyBhIHJhbmdlIGZvciBlbGVt ZW50LXdpc2UgZXF1YWxpdHkuCisgICAqICBAaW5ncm91cCBub25fbXV0YXRp bmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0MSAgQW4gaW5w dXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdDEgICBBbiBpbnB1 dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19maXJzdDIgIEFuIGlucHV0 IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QyICAgQW4gaW5wdXQg aXRlcmF0b3IuCisgICAqICBAcGFyYW0gX19iaW5hcnlfcHJlZCBBIGJpbmFy eSBwcmVkaWNhdGUgQGxpbmsgZnVuY3RvcnMKKyAgICogICAgICAgICAgICAg ICAgICBmdW5jdG9yQGVuZGxpbmsuCisgICAqICBAcmV0dXJuICAgICAgICAg QSBib29sZWFuIHRydWUgb3IgZmFsc2UuCisgICAqCisgICAqICBUaGlzIGNv bXBhcmVzIHRoZSBlbGVtZW50cyBvZiB0d28gcmFuZ2VzIHVzaW5nIHRoZSBi aW5hcnlfcHJlZAorICAgKiAgcGFyYW1ldGVyLCBhbmQgcmV0dXJucyB0cnVl IG9yCisgICAqICBmYWxzZSBkZXBlbmRpbmcgb24gd2hldGhlciBhbGwgb2Yg dGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdGhlCisgICAqICByYW5n ZXMgYXJlIGVxdWFsLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0 ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGlj YXRlPgorICAgIGlubGluZSBib29sCisgICAgZXF1YWwoX0lJdGVyMSBfX2Zp cnN0MSwgX0lJdGVyMSBfX2xhc3QxLAorCSAgX0lJdGVyMiBfX2ZpcnN0Miwg X0lJdGVyMiBfX2xhc3QyLCBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3By ZWQpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAg ICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRv ckNvbmNlcHQ8X0lJdGVyMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25f cmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JSXRlcjI+KQorICAg ICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QxLCBf X2xhc3QxKTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5n ZShfX2ZpcnN0MiwgX19sYXN0Mik7CisKKyAgICAgIHVzaW5nIF9DYXQxID0g dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JSXRlcjE+OjppdGVyYXRvcl9j YXRlZ29yeTsKKyAgICAgIHVzaW5nIF9DYXQyID0gdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9JSXRlcjI+OjppdGVyYXRvcl9jYXRlZ29yeTsKKyAgICAg IHVzaW5nIF9JSXRlcjFfaXNfUkEgPSBpc19zYW1lPF9DYXQxLCByYW5kb21f YWNjZXNzX2l0ZXJhdG9yX3RhZz47CisgICAgICB1c2luZyBfSUl0ZXIyX2lz X1JBID0gaXNfc2FtZTxfQ2F0MiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90 YWc+OworICAgICAgY29uc3RleHByIGJvb2wgX19yYV9pdGVycyA9IF9JSXRl cjFfaXNfUkEoKSAmJiBfSUl0ZXIxX2lzX1JBKCk7CisgICAgICBpZiAoX19y YV9pdGVycykKKwl7CisJICBhdXRvIF9fZDEgPSBzdGQ6OmRpc3RhbmNlKF9f Zmlyc3QxLCBfX2xhc3QxKTsKKwkgIGF1dG8gX19kMiA9IHN0ZDo6ZGlzdGFu Y2UoX19maXJzdDIsIF9fbGFzdDIpOworCSAgaWYgKF9fZDEgIT0gX19kMikK KwkgICAgcmV0dXJuIGZhbHNlOworCX0KKworICAgICAgZm9yICg7IF9fZmly c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsgKytfX2Zp cnN0MSwgKytfX2ZpcnN0MikKKwlpZiAoIWJvb2woX19iaW5hcnlfcHJlZCgq X19maXJzdDEsICpfX2ZpcnN0MikpKQorCSAgcmV0dXJuIGZhbHNlOworICAg ICAgcmV0dXJuIF9fcmFfaXRlcnMgfHwgKF9fZmlyc3QxID09IF9fbGFzdDEg JiYgX19maXJzdDIgPT0gX19sYXN0Mik7CisgICAgfQorI2VuZGlmCisKICAg LyoqCiAgICAqICBAYnJpZWYgUGVyZm9ybXMgQGIgZGljdGlvbmFyeSBjb21w YXJpc29uIG9uIHJhbmdlcy4KICAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxn b3JpdGhtcwpAQCAtMTIxMSw2ICsxMzc0LDg0IEBAIF9HTElCQ1hYX0JFR0lO X05BTUVTUEFDRV9BTEdPCiAgICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVy YXRvcjEsIF9JbnB1dEl0ZXJhdG9yMj4oX19maXJzdDEsIF9fZmlyc3QyKTsK ICAgICB9CiAKKyNpZiBfX2NwbHVzcGx1cyA+IDIwMTEwM0wKKyAgLyoqCisg ICAqICBAYnJpZWYgRmluZHMgdGhlIHBsYWNlcyBpbiByYW5nZXMgd2hpY2gg ZG9uJ3QgbWF0Y2guCisgICAqICBAaW5ncm91cCBub25fbXV0YXRpbmdfYWxn b3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0MSAgQW4gaW5wdXQgaXRl cmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdDEgICBBbiBpbnB1dCBpdGVy YXRvci4KKyAgICogIEBwYXJhbSAgX19maXJzdDIgIEFuIGlucHV0IGl0ZXJh dG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QyICAgQW4gaW5wdXQgaXRlcmF0 b3IuCisgICAqICBAcmV0dXJuICAgQSBwYWlyIG9mIGl0ZXJhdG9ycyBwb2lu dGluZyB0byB0aGUgZmlyc3QgbWlzbWF0Y2guCisgICAqCisgICAqICBUaGlz IGNvbXBhcmVzIHRoZSBlbGVtZW50cyBvZiB0d28gcmFuZ2VzIHVzaW5nIEBj ID09IGFuZCByZXR1cm5zIGEgcGFpcgorICAgKiAgb2YgaXRlcmF0b3JzLiAg VGhlIGZpcnN0IGl0ZXJhdG9yIHBvaW50cyBpbnRvIHRoZSBmaXJzdCByYW5n ZSwgdGhlCisgICAqICBzZWNvbmQgaXRlcmF0b3IgcG9pbnRzIGludG8gdGhl IHNlY29uZCByYW5nZSwgYW5kIHRoZSBlbGVtZW50cyBwb2ludGVkCisgICAq ICB0byBieSB0aGUgaXRlcmF0b3JzIGFyZSBub3QgZXF1YWwuCisgICovCisg IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUg X0lucHV0SXRlcmF0b3IyPgorICAgIHBhaXI8X0lucHV0SXRlcmF0b3IxLCBf SW5wdXRJdGVyYXRvcjI+CisgICAgbWlzbWF0Y2goX0lucHV0SXRlcmF0b3Ix IF9fZmlyc3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKKwkgICAgIF9J bnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MiwgX0lucHV0SXRlcmF0b3IyIF9fbGFz dDIpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAg ICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRv ckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9m dW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0 SXRlcmF0b3IyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJl cyhfRXF1YWxPcENvbmNlcHQ8CisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSW5wdXRJdGVyYXRvcjE+Ojp2YWx1ZV90eXBlLAorCSAgICB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3IyPjo6dmFsdWVf dHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2Uo X19maXJzdDEsIF9fbGFzdDEpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVz X3ZhbGlkX3JhbmdlKF9fZmlyc3QyLCBfX2xhc3QyKTsKKworICAgICAgd2hp bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0 MgorCSAgJiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0MikKKyAgICAgICAgewor CSAgKytfX2ZpcnN0MTsKKwkgICsrX19maXJzdDI7CisgICAgICAgIH0KKyAg ICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXJhdG9yMSwgX0lucHV0SXRlcmF0 b3IyPihfX2ZpcnN0MSwgX19maXJzdDIpOworICAgIH0KKworICAvKioKKyAg ICogIEBicmllZiBGaW5kcyB0aGUgcGxhY2VzIGluIHJhbmdlcyB3aGljaCBk b24ndCBtYXRjaC4KKyAgICogIEBpbmdyb3VwIG5vbl9tdXRhdGluZ19hbGdv cml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QxICBBbiBpbnB1dCBpdGVy YXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0MSAgIEFuIGlucHV0IGl0ZXJh dG9yLgorICAgKiAgQHBhcmFtICBfX2ZpcnN0MiAgQW4gaW5wdXQgaXRlcmF0 b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdDIgICBBbiBpbnB1dCBpdGVyYXRv ci4KKyAgICogIEBwYXJhbSBfX2JpbmFyeV9wcmVkIEEgYmluYXJ5IHByZWRp Y2F0ZSBAbGluayBmdW5jdG9ycworICAgKiAgICAgICAgIGZ1bmN0b3JAZW5k bGluay4KKyAgICogIEByZXR1cm4gICBBIHBhaXIgb2YgaXRlcmF0b3JzIHBv aW50aW5nIHRvIHRoZSBmaXJzdCBtaXNtYXRjaC4KKyAgICoKKyAgICogIFRo aXMgY29tcGFyZXMgdGhlIGVsZW1lbnRzIG9mIHR3byByYW5nZXMgdXNpbmcg dGhlIGJpbmFyeV9wcmVkCisgICAqICBwYXJhbWV0ZXIsIGFuZCByZXR1cm5z IGEgcGFpcgorICAgKiAgb2YgaXRlcmF0b3JzLiAgVGhlIGZpcnN0IGl0ZXJh dG9yIHBvaW50cyBpbnRvIHRoZSBmaXJzdCByYW5nZSwgdGhlCisgICAqICBz ZWNvbmQgaXRlcmF0b3IgcG9pbnRzIGludG8gdGhlIHNlY29uZCByYW5nZSwg YW5kIHRoZSBlbGVtZW50cyBwb2ludGVkCisgICAqICB0byBieSB0aGUgaXRl cmF0b3JzIGFyZSBub3QgZXF1YWwuCisgICovCisgIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3Iy LAorCSAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgcGFpcjxf SW5wdXRJdGVyYXRvcjEsIF9JbnB1dEl0ZXJhdG9yMj4KKyAgICBtaXNtYXRj aChfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBf X2xhc3QxLAorCSAgICAgX0lucHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBfSW5w dXRJdGVyYXRvcjIgX19sYXN0MiwKKwkgICAgIF9CaW5hcnlQcmVkaWNhdGUg X19iaW5hcnlfcHJlZCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVp cmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9J bnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcjE+KQorICAgICAg X19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29u Y2VwdDxfSW5wdXRJdGVyYXRvcjI+KQorICAgICAgX19nbGliY3h4X3JlcXVp cmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QxLCBfX2xhc3QxKTsKKyAgICAgIF9f Z2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MiwgX19sYXN0 Mik7CisKKyAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f Zmlyc3QyICE9IF9fbGFzdDIKKwkgICYmIGJvb2woX19iaW5hcnlfcHJlZCgq X19maXJzdDEsICpfX2ZpcnN0MikpKQorICAgICAgICB7CisJICArK19fZmly c3QxOworCSAgKytfX2ZpcnN0MjsKKyAgICAgICAgfQorICAgICAgcmV0dXJu IHBhaXI8X0lucHV0SXRlcmF0b3IxLCBfSW5wdXRJdGVyYXRvcjI+KF9fZmly c3QxLCBfX2ZpcnN0Mik7CisgICAgfQorI2VuZGlmCisKIF9HTElCQ1hYX0VO RF9OQU1FU1BBQ0VfQUxHTwogfSAvLyBuYW1lc3BhY2Ugc3RkCiAKZGlmZiAt LWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjVfYWxnb3JpdGhtcy9l cXVhbC8xLmNjIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yNV9hbGdvcml0 aG1zL2VxdWFsLzEuY2MKaW5kZXggMjJhZjc2NS4uZjhjMTM1NSAxMDA2NDQK LS0tIGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yNV9hbGdvcml0aG1zL2Vx dWFsLzEuY2MKKysrIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yNV9hbGdv cml0aG1zL2VxdWFsLzEuY2MKQEAgLTI3LDYgKzI3LDggQEAgaW50IGFycmF5 MVtdID0gezAsIDF9OwogaW50IGFycmF5MltdID0gezEsIDB9OwogaW50IGFy cmF5M1tdID0gezEsIDB9OwogCitib29sIF9fYXR0cmlidXRlX18oKHVudXNl ZCkpIHRlc3QgPSBmYWxzZTsKKwogdm9pZCB0ZXN0MSgpCiB7CiAgIENvbnRh aW5lciBjb24xKGFycmF5MSwgYXJyYXkxKTsKQEAgLTQ1LDE3ICs0NywxMCBA QCB2b2lkIHRlc3QzKCkKIHsKICAgQ29udGFpbmVyIGNvbjEoYXJyYXkxLCBh cnJheTEgKyAyKTsKICAgQ29udGFpbmVyIGNvbjIoYXJyYXkyLCBhcnJheTIg KyAyKTsKLSAgVkVSSUZZKCAhc3RkOjplcXVhbChjb24yLmJlZ2luKCksIGNv bjIuZW5kKCksIGNvbjEuYmVnaW4oKSkgKTsKLX0KLQotdm9pZCB0ZXN0NCgp Ci17Ci0gIENvbnRhaW5lciBjb24xKGFycmF5MSwgYXJyYXkxICsgMik7Ci0g IENvbnRhaW5lciBjb24yKGFycmF5MiwgYXJyYXkyICsgMik7CiAgIFZFUklG WSggIXN0ZDo6ZXF1YWwoY29uMS5iZWdpbigpLCBjb24xLmVuZCgpLCBjb24y LmJlZ2luKCkpICk7CiB9CiAKLXZvaWQgdGVzdDUoKQordm9pZCB0ZXN0NCgp CiB7CiAgIENvbnRhaW5lciBjb24zKGFycmF5MywgYXJyYXkzICsgMik7CiAg IENvbnRhaW5lciBjb24yKGFycmF5MiwgYXJyYXkyICsgMik7CkBAIC02OCw1 ICs2Myw0IEBAIGludCBtYWluKCkKICAgdGVzdDIoKTsKICAgdGVzdDMoKTsK ICAgdGVzdDQoKTsKLSAgdGVzdDUoKTsKIH0KZGlmZiAtLWdpdCBhL2xpYnN0 ZGMrKy12My90ZXN0c3VpdGUvMjVfYWxnb3JpdGhtcy9lcXVhbC8yLmNjIGIv bGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yNV9hbGdvcml0aG1zL2VxdWFsLzIu Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEyNjA5 ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUv MjVfYWxnb3JpdGhtcy9lcXVhbC8yLmNjCkBAIC0wLDAgKzEsMTkzIEBACisv LyBDb3B5cmlnaHQgKEMpIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJ U08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkg aXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91 ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBs aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxv bmcKKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO RzMuICBJZiBub3Qgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisKKy8vIDI1LjIuMTEgW2FsZy5lcXVhbF0KKworLy8geyBkZy1v cHRpb25zICItc3RkPWdudSsrMXkiIH0KKworI2luY2x1ZGUgPGFsZ29yaXRo bT4KKyNpbmNsdWRlIDx0ZXN0c3VpdGVfaG9va3MuaD4KKyNpbmNsdWRlIDx0 ZXN0c3VpdGVfaXRlcmF0b3JzLmg+CisKK3VzaW5nIF9fZ251X3Rlc3Q6OnRl c3RfY29udGFpbmVyOwordXNpbmcgX19nbnVfdGVzdDo6aW5wdXRfaXRlcmF0 b3Jfd3JhcHBlcjsKK3VzaW5nIF9fZ251X3Rlc3Q6OnJhbmRvbV9hY2Nlc3Nf aXRlcmF0b3Jfd3JhcHBlcjsKKwordHlwZWRlZiB0ZXN0X2NvbnRhaW5lcjxp bnQsIGlucHV0X2l0ZXJhdG9yX3dyYXBwZXI+IENvbnRhaW5lcjsKK3R5cGVk ZWYgdGVzdF9jb250YWluZXI8aW50LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9y X3dyYXBwZXI+IFJBX0NvbnRhaW5lcjsKK2ludCBhcnJheTFbXSA9IHswLCAx fTsKK2ludCBhcnJheTJbXSA9IHsxLCAwfTsKK2ludCBhcnJheTNbXSA9IHsx LCAwfTsKKworc3RydWN0IGVxdWFsX3RvCit7CisgIHN0YXRpYyBpbnQgY291 bnQ7CisKKyAgYm9vbCBvcGVyYXRvcigpKGludCBsLCBpbnQgcikKKyAgewor ICAgICsrY291bnQ7CisgICAgcmV0dXJuIGwgPT0gcjsKKyAgfQorfSBlcTsK KworaW50IGVxdWFsX3RvOjpjb3VudCA9IDA7CisKK2Jvb2wgX19hdHRyaWJ1 dGVfXygodW51c2VkKSkgdGVzdCA9IGZhbHNlOworCit2b2lkIHRlc3QxKCkK K3sKKyAgY29uc3QgQ29udGFpbmVyIGNvbjEoYXJyYXkxLCBhcnJheTEpOwor ICBjb25zdCBDb250YWluZXIgY29uMihhcnJheTIsIGFycmF5Mik7CisKKyAg YXV0byBjMSA9IGNvbjE7CisgIGF1dG8gYzIgPSBjb24yOworICBWRVJJRlko IHN0ZDo6ZXF1YWwoYzEuYmVnaW4oKSwgYzEuZW5kKCksIGMyLmJlZ2luKCks IGMyLmVuZCgpKSApOworICBWRVJJRlkoIGVxdWFsX3RvOjpjb3VudCA9PSAw ICk7CisKKyAgYzEgPSBjb24xOworICBjMiA9IGNvbjI7CisgIFZFUklGWSgg c3RkOjplcXVhbChjMS5iZWdpbigpLCBjMS5lbmQoKSwgYzIuYmVnaW4oKSwg YzIuZW5kKCksIGVxKSApOworICBWRVJJRlkoIGVxdWFsX3RvOjpjb3VudCA9 PSAwICk7Cit9CisKK3ZvaWQgdGVzdDIoKQoreworICBjb25zdCBDb250YWlu ZXIgY29uMShhcnJheTEsIGFycmF5MSArIDApOworICBjb25zdCBDb250YWlu ZXIgY29uMihhcnJheTIsIGFycmF5MiArIDIpOworCisgIGF1dG8gYzEgPSBj b24xOworICBhdXRvIGMyID0gY29uMjsKKyAgVkVSSUZZKCAhc3RkOjplcXVh bChjMS5iZWdpbigpLCBjMS5lbmQoKSwgYzIuYmVnaW4oKSwgYzIuZW5kKCkp ICk7CisKKyAgYzEgPSBjb24xOworICBjMiA9IGNvbjI7CisgIFZFUklGWSgg IXN0ZDo6ZXF1YWwoYzEuYmVnaW4oKSwgYzEuZW5kKCksIGMyLmJlZ2luKCks IGMyLmVuZCgpLCBlcSkgKTsKKyAgVkVSSUZZKCBlcXVhbF90bzo6Y291bnQg PT0gMCApOworCisgIGMxID0gY29uMTsKKyAgYzIgPSBjb24yOworICBWRVJJ RlkoICFzdGQ6OmVxdWFsKGMyLmJlZ2luKCksIGMyLmVuZCgpLCBjMS5iZWdp bigpLCBjMS5lbmQoKSkgKTsKKworICBjMSA9IGNvbjE7CisgIGMyID0gY29u MjsKKyAgVkVSSUZZKCAhc3RkOjplcXVhbChjMi5iZWdpbigpLCBjMi5lbmQo KSwgYzEuYmVnaW4oKSwgYzEuZW5kKCksIGVxKSApOworICBWRVJJRlkoIGVx dWFsX3RvOjpjb3VudCA9PSAwICk7Cit9CisKK3ZvaWQgdGVzdDMoKQorewor ICBjb25zdCBDb250YWluZXIgY29uMShhcnJheTEsIGFycmF5MSArIDIpOwor ICBjb25zdCBDb250YWluZXIgY29uMihhcnJheTIsIGFycmF5MiArIDIpOwor CisgIGF1dG8gYzEgPSBjb24xOworICBhdXRvIGMyID0gY29uMjsKKyAgVkVS SUZZKCAhc3RkOjplcXVhbChjMS5iZWdpbigpLCBjMS5lbmQoKSwgYzIuYmVn aW4oKSwgYzIuZW5kKCkpICk7CisKKyAgYzEgPSBjb24xOworICBjMiA9IGNv bjI7CisgIFZFUklGWSggIXN0ZDo6ZXF1YWwoYzEuYmVnaW4oKSwgYzEuZW5k KCksIGMyLmJlZ2luKCksIGMyLmVuZCgpLCBlcSkgKTsKKyAgVkVSSUZZKCBl cXVhbF90bzo6Y291bnQgPT0gMSApOworICBlcXVhbF90bzo6Y291bnQgPSAw OworCisgIGMxID0gY29uMTsKKyAgYzIgPSBjb24yOworICBWRVJJRlkoICFz dGQ6OmVxdWFsKGMyLmJlZ2luKCksIGMyLmVuZCgpLCBjMS5iZWdpbigpLCBj MS5lbmQoKSkgKTsKKworICBjMSA9IGNvbjE7CisgIGMyID0gY29uMjsKKyAg VkVSSUZZKCAhc3RkOjplcXVhbChjMi5iZWdpbigpLCBjMi5lbmQoKSwgYzEu YmVnaW4oKSwgYzEuZW5kKCksIGVxKSApOworICBWRVJJRlkoIGVxdWFsX3Rv Ojpjb3VudCA9PSAxICk7CisgIGVxdWFsX3RvOjpjb3VudCA9IDA7Cit9CisK K3ZvaWQgdGVzdDQoKQoreworICBjb25zdCBDb250YWluZXIgY29uMyhhcnJh eTMsIGFycmF5MyArIDIpOworICBjb25zdCBDb250YWluZXIgY29uMihhcnJh eTIsIGFycmF5MiArIDIpOworCisgIGF1dG8gYzMgPSBjb24zOworICBhdXRv IGMyID0gY29uMjsKKyAgVkVSSUZZKCBzdGQ6OmVxdWFsKGMzLmJlZ2luKCks IGMzLmVuZCgpLCBjMi5iZWdpbigpLCBjMi5lbmQoKSkgKTsKKworICBjMyA9 IGNvbjM7CisgIGMyID0gY29uMjsKKyAgVkVSSUZZKCBzdGQ6OmVxdWFsKGMz LmJlZ2luKCksIGMzLmVuZCgpLCBjMi5iZWdpbigpLCBjMi5lbmQoKSwgZXEp ICk7CisgIFZFUklGWSggZXF1YWxfdG86OmNvdW50ID09IDIgKTsKKyAgZXF1 YWxfdG86OmNvdW50ID0gMDsKKworICBjMyA9IGNvbjM7CisgIGMyID0gY29u MjsKKyAgVkVSSUZZKCBzdGQ6OmVxdWFsKGMyLmJlZ2luKCksIGMyLmVuZCgp LCBjMy5iZWdpbigpLCBjMy5lbmQoKSkgKTsKKworICBjMyA9IGNvbjM7Cisg IGMyID0gY29uMjsKKyAgVkVSSUZZKCBzdGQ6OmVxdWFsKGMyLmJlZ2luKCks IGMyLmVuZCgpLCBjMy5iZWdpbigpLCBjMy5lbmQoKSwgZXEpICk7CisgIFZF UklGWSggZXF1YWxfdG86OmNvdW50ID09IDIgKTsKKyAgZXF1YWxfdG86OmNv dW50ID0gMDsKK30KKwordm9pZCB0ZXN0NSgpCit7CisgIGNvbnN0IENvbnRh aW5lciBjb24zKGFycmF5MywgYXJyYXkzICsgMSk7CisgIGNvbnN0IENvbnRh aW5lciBjb24yKGFycmF5MiwgYXJyYXkyICsgMik7CisKKyAgYXV0byBjMyA9 IGNvbjM7CisgIGF1dG8gYzIgPSBjb24yOworICBWRVJJRlkoICFzdGQ6OmVx dWFsKGMzLmJlZ2luKCksIGMzLmVuZCgpLCBjMi5iZWdpbigpLCBjMi5lbmQo KSkgKTsKKworICBjMyA9IGNvbjM7CisgIGMyID0gY29uMjsKKyAgVkVSSUZZ KCAhc3RkOjplcXVhbChjMy5iZWdpbigpLCBjMy5lbmQoKSwgYzIuYmVnaW4o KSwgYzIuZW5kKCksIGVxKSApOworICBWRVJJRlkoIGVxdWFsX3RvOjpjb3Vu dCA9PSAxICk7CisgIGVxdWFsX3RvOjpjb3VudCA9IDA7CisKKyAgYzMgPSBj b24zOworICBjMiA9IGNvbjI7CisgIFZFUklGWSggIXN0ZDo6ZXF1YWwoYzIu YmVnaW4oKSwgYzIuZW5kKCksIGMzLmJlZ2luKCksIGMzLmVuZCgpKSApOwor CisgIGMzID0gY29uMzsKKyAgYzIgPSBjb24yOworICBWRVJJRlkoICFzdGQ6 OmVxdWFsKGMyLmJlZ2luKCksIGMyLmVuZCgpLCBjMy5iZWdpbigpLCBjMy5l bmQoKSwgZXEpICk7CisgIFZFUklGWSggZXF1YWxfdG86OmNvdW50ID09IDEg KTsKKyAgZXF1YWxfdG86OmNvdW50ID0gMDsKK30KKwordm9pZCB0ZXN0Nigp Cit7CisgIFJBX0NvbnRhaW5lciBjMyhhcnJheTMsIGFycmF5MyArIDEpOwor ICBSQV9Db250YWluZXIgYzIoYXJyYXkyLCBhcnJheTIgKyAyKTsKKworICBW RVJJRlkoICFzdGQ6OmVxdWFsKGMzLmJlZ2luKCksIGMzLmVuZCgpLCBjMi5i ZWdpbigpLCBjMi5lbmQoKSkgKTsKKworICBWRVJJRlkoICFzdGQ6OmVxdWFs KGMzLmJlZ2luKCksIGMzLmVuZCgpLCBjMi5iZWdpbigpLCBjMi5lbmQoKSwg ZXEpICk7CisgIFZFUklGWSggZXF1YWxfdG86OmNvdW50ID09IDAgKTsKKwor ICBWRVJJRlkoICFzdGQ6OmVxdWFsKGMyLmJlZ2luKCksIGMyLmVuZCgpLCBj My5iZWdpbigpLCBjMy5lbmQoKSkgKTsKKworICBWRVJJRlkoICFzdGQ6OmVx dWFsKGMyLmJlZ2luKCksIGMyLmVuZCgpLCBjMy5iZWdpbigpLCBjMy5lbmQo KSwgZXEpICk7CisgIFZFUklGWSggZXF1YWxfdG86OmNvdW50ID09IDAgKTsK K30KKworaW50IG1haW4oKQoreworICB0ZXN0MSgpOworICB0ZXN0MigpOwor ICB0ZXN0MygpOworICB0ZXN0NCgpOworICB0ZXN0NSgpOworICB0ZXN0Nigp OworfQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yNV9h bGdvcml0aG1zL2VxdWFsL2NoZWNrX3R5cGUyLmNjIGIvbGlic3RkYysrLXYz L3Rlc3RzdWl0ZS8yNV9hbGdvcml0aG1zL2VxdWFsL2NoZWNrX3R5cGUyLmNj Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MGNjZWQK LS0tIC9kZXYvbnVsbAorKysgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzI1 X2FsZ29yaXRobXMvZXF1YWwvY2hlY2tfdHlwZTIuY2MKQEAgLTAsMCArMSw0 OCBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDEzIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo ZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUK Ky8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3Ig KGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8v IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8v IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl IENPUFlJTkczLiAgSWYgbm90IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LgorCisvLyAyNS4yLjExIFthbGcuZXF1YWxdCisKKy8v IHsgZGctZG8gY29tcGlsZSB9CisvLyB7IGRnLW9wdGlvbnMgIiAtc3RkPWdu dSsrMXkgIiB9CisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8 dGVzdHN1aXRlX2l0ZXJhdG9ycy5oPgordXNpbmcgX19nbnVfdGVzdDo6aW5w dXRfaXRlcmF0b3Jfd3JhcHBlcjsKKworc3RydWN0IExoczEgeyB9OworCitz dHJ1Y3QgUmhzMSB7IH07CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBMaHMx JiwgY29uc3QgUmhzMSYpIHtyZXR1cm4gdHJ1ZTt9CisKK3N0cnVjdCBMaHMy IHsgfTsKKworc3RydWN0IFJoczIgeyB9OworCitib29sIAorcHJlZGljYXRl KGNvbnN0IExoczImLCBjb25zdCBSaHMyJikge3JldHVybiB0cnVlO30KKwor Ym9vbCAKK3Rlc3QxKGlucHV0X2l0ZXJhdG9yX3dyYXBwZXI8TGhzMT4mIGxo czEsCisgICAgICBpbnB1dF9pdGVyYXRvcl93cmFwcGVyPFJoczE+JiByaHMx KQoreyByZXR1cm4gc3RkOjplcXVhbChsaHMxLCBsaHMxLCByaHMxLCByaHMx KTsgfQorCitib29sIAordGVzdDIoaW5wdXRfaXRlcmF0b3Jfd3JhcHBlcjxM aHMyPiYgbGhzMiwKKyAgICAgIGlucHV0X2l0ZXJhdG9yX3dyYXBwZXI8Umhz Mj4mIHJoczIpCit7IHJldHVybiBzdGQ6OmVxdWFsKGxoczIsIGxoczIsIHJo czIsIHJoczIsIHByZWRpY2F0ZSk7IH0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMr Ky12My90ZXN0c3VpdGUvMjVfYWxnb3JpdGhtcy9pc19wZXJtdXRhdGlvbi8y LmNjIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yNV9hbGdvcml0aG1zL2lz X3Blcm11dGF0aW9uLzIuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uZDU3M2ZhMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnN0ZGMr Ky12My90ZXN0c3VpdGUvMjVfYWxnb3JpdGhtcy9pc19wZXJtdXRhdGlvbi8y LmNjCkBAIC0wLDAgKzEsMTE1IEBACisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9 Z251KysxeSIgfQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTMgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBh cnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkg aXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lv bi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYWxvbmcKKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg dGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisvLyA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIDI1LjIuMTIgW2FsZy5pc19w ZXJtdXRhdGlvbl0gSXMgcGVybXV0YXRpb24KKworI2luY2x1ZGUgPGFsZ29y aXRobT4KKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHRlc3Rz dWl0ZV9ob29rcy5oPgorCitzdHJ1Y3QgbXlfZXF1YWxfdG8KK3sKKyAgYm9v bAorICBvcGVyYXRvcigpKGludCBfX3gsIGludCBfX3kpIGNvbnN0CisgIHsg cmV0dXJuIF9feCAlIDEwID09IF9feSAlIDEwOyB9Cit9OworCitjb25zdCBp bnQgYXJyMFtdID0geyAxMSwgMjIsIDMzLCA0NCwgNTUgfTsKKwordm9pZAor ZG9fdGVzdChpbnQgYXJyMVs1XSwgYm9vbCBucCA9IHRydWUsIHVuc2lnbmVk IE4gPSA1KQoreworICBib29sIHRlc3QgX19hdHRyaWJ1dGVfXygodW51c2Vk KSkgPSB0cnVlOworCisgIGRvCisgICAgVkVSSUZZKCBzdGQ6OmlzX3Blcm11 dGF0aW9uKGFycjEsIGFycjEgKyA1LCBhcnIwLCBhcnIwICsgTikgPT0gbnAg KTsKKyAgd2hpbGUgKHN0ZDo6bmV4dF9wZXJtdXRhdGlvbihhcnIxLCBhcnIx ICsgNSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkaWNhdGU+Cisg IHZvaWQKKyAgZG9fdGVzdChpbnQgYXJyMVs1XSwgUHJlZGljYXRlIHByZWQs IGJvb2wgbnAgPSB0cnVlLCB1bnNpZ25lZCBOID0gNSkKKyAgeworICAgIGJv b2wgdGVzdCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSA9IHRydWU7CisKKyAg ICBkbworICAgICAgVkVSSUZZKCBzdGQ6OmlzX3Blcm11dGF0aW9uKGFycjEs IGFycjEgKyA1LCBhcnIwLCBhcnIwICsgTiwgcHJlZCkgPT0gbnAgKTsKKyAg ICB3aGlsZSAoc3RkOjpuZXh0X3Blcm11dGF0aW9uKGFycjEsIGFycjEgKyA1 KSk7CisgIH0KKwordm9pZCB0ZXN0MDEoKQoreworICBpbnQgYXJyMVtdID0g eyAxMSwgMjIsIDMzLCA0NCwgNTUgfTsKKyAgZG9fdGVzdChhcnIxKTsKKyAg ZG9fdGVzdChhcnIxLCBmYWxzZSwgNCk7CisKKyAgaW50IGFycjJbXSA9IHsg MTEsIDMzLCAzMywgNDQsIDU1IH07CisgIGRvX3Rlc3QoYXJyMiwgZmFsc2Up OworCisgIGludCBhcnIzW10gPSB7IDMzLCAzMywgMzMsIDQ0LCA0NCB9Owor ICBkb190ZXN0KGFycjMsIGZhbHNlKTsKKworICBpbnQgYXJyNFtdID0geyAx MSwgMjIsIDMzLCA0NCwgNTUgfTsKKyAgZG9fdGVzdChhcnI0LCBzdGQ6OmVx dWFsX3RvPGludD4oKSk7CisgIGRvX3Rlc3QoYXJyNCwgc3RkOjplcXVhbF90 bzxpbnQ+KCksIGZhbHNlLCA0KTsKKworICBpbnQgYXJyNVtdID0geyAxMSwg MzMsIDMzLCA0NCwgNTUgfTsKKyAgZG9fdGVzdChhcnI1LCBzdGQ6OmVxdWFs X3RvPGludD4oKSwgZmFsc2UpOworCisgIGludCBhcnI2W10gPSB7IDMzLCAz MywgMzMsIDQ0LCA0NCB9OworICBkb190ZXN0KGFycjYsIHN0ZDo6ZXF1YWxf dG88aW50PigpLCBmYWxzZSk7CisKKyAgaW50IGFycjdbXSA9IHsgMSwgMiwg MywgNCwgNSB9OworICBkb190ZXN0KGFycjcsIG15X2VxdWFsX3RvKCkpOwor ICBkb190ZXN0KGFycjcsIG15X2VxdWFsX3RvKCksIGZhbHNlLCA0KTsKKwor ICBpbnQgYXJyOFtdID0geyAxLCAzLCAzLCA0LCA1IH07CisgIGRvX3Rlc3Qo YXJyOCwgbXlfZXF1YWxfdG8oKSwgZmFsc2UpOworCisgIGludCBhcnI5W10g PSB7IDMsIDMsIDMsIDQsIDQgfTsKKyAgZG9fdGVzdChhcnI5LCBteV9lcXVh bF90bygpLCBmYWxzZSk7CisKKyAgaW50IGFycjEwW10gPSB7IDExMSwgMjIy LCAzMzMsIDQ0NCwgNTU1IH07CisgIGRvX3Rlc3QoYXJyMTAsIG15X2VxdWFs X3RvKCkpOworICBkb190ZXN0KGFycjEwLCBteV9lcXVhbF90bygpLCBmYWxz ZSwgNCk7CisKKyAgaW50IGFycjExW10gPSB7IDEsIDIyMiwgMzMsIDQsIDU1 IH07CisgIGRvX3Rlc3QoYXJyMTEsIG15X2VxdWFsX3RvKCkpOworCisgIGlu dCBhcnIxMltdID0geyAxMTEsIDMzMywgMzMzLCA0NDQsIDU1NSB9OworICBk b190ZXN0KGFycjEyLCBteV9lcXVhbF90bygpLCBmYWxzZSk7CisKKyAgaW50 IGFycjEzW10gPSB7IDMzMywgMzMzLCAzMzMsIDQ0NCwgNDQ0IH07CisgIGRv X3Rlc3QoYXJyMTMsIG15X2VxdWFsX3RvKCksIGZhbHNlKTsKK30KKworYm9v bCB0aHJvd2VyKGludCwgaW50KSB7IHRocm93IDE7IH0KKwordm9pZCB0ZXN0 MDIoKQoreworICBpbnQgYXJyW10gPSB7IDExLCAyMiwgMzMgfTsKKyAgdXNp bmcgbmFtZXNwYWNlIHN0ZDsKKyAgaXNfcGVybXV0YXRpb24oYmVnaW4oYXJy MCksIGVuZChhcnIwKSwgYmVnaW4oYXJyKSwgZW5kKGFyciksIHRocm93ZXIp OworfQorCitpbnQgbWFpbigpCit7CisgIHRlc3QwMSgpOworICB0ZXN0MDIo KTsKK30KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjVf YWxnb3JpdGhtcy9pc19wZXJtdXRhdGlvbi9jaGVja190eXBlMi5jYyBiL2xp YnN0ZGMrKy12My90ZXN0c3VpdGUvMjVfYWxnb3JpdGhtcy9pc19wZXJtdXRh dGlvbi9jaGVja190eXBlMi5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi45Y2RmODdkCi0tLSAvZGV2L251bGwKKysrIGIvbGlic3Rk YysrLXYzL3Rlc3RzdWl0ZS8yNV9hbGdvcml0aG1zL2lzX3Blcm11dGF0aW9u L2NoZWNrX3R5cGUyLmNjCkBAIC0wLDAgKzEsNDYgQEAKKy8vIENvcHlyaWdo dCAoQykgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8v CisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGli cmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0 aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikK Ky8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworLy8gd2l0 aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5v dCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKwor Ly8gMjUuMi4xMiBbYWxnLmlzX3Blcm11dGF0aW9uXSBJcyBwZXJtdXRhdGlv bgorCisvLyB7IGRnLWRvIGNvbXBpbGUgfQorLy8geyBkZy1vcHRpb25zICIg LXN0ZD1nbnUrKzF5ICIgfQorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2lu Y2x1ZGUgPHRlc3RzdWl0ZV9pdGVyYXRvcnMuaD4KKwordXNpbmcgX19nbnVf dGVzdDo6Zm9yd2FyZF9pdGVyYXRvcl93cmFwcGVyOworCitzdHJ1Y3QgWCB7 IH07Citib29sIG9wZXJhdG9yPT0oY29uc3QgWCYsIGNvbnN0IFgpIHsgcmV0 dXJuIHRydWU7IH0KKworc3RydWN0IFkgeyB9OworYm9vbCBwcmVkaWNhdGUo Y29uc3QgWSYsIGNvbnN0IFkmKSB7IHJldHVybiB0cnVlOyB9CisKK2Jvb2wK K3Rlc3QxKGZvcndhcmRfaXRlcmF0b3Jfd3JhcHBlcjxYPiYgeDEsIAorICAg ICAgZm9yd2FyZF9pdGVyYXRvcl93cmFwcGVyPFg+JiB4MikKK3sKKyAgcmV0 dXJuIHN0ZDo6aXNfcGVybXV0YXRpb24oeDEsIHgxLCB4MiwgeDIpOworfQor Citib29sCit0ZXN0Mihmb3J3YXJkX2l0ZXJhdG9yX3dyYXBwZXI8WT4mIHkx LAorICAgICAgZm9yd2FyZF9pdGVyYXRvcl93cmFwcGVyPFk+JiB5MikKK3sK KyAgcmV0dXJuIHN0ZDo6aXNfcGVybXV0YXRpb24oeTEsIHkxLCB5MiwgeTIs IHByZWRpY2F0ZSk7Cit9CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvdGVz dHN1aXRlLzI1X2FsZ29yaXRobXMvbWlzbWF0Y2gvMS5jYyBiL2xpYnN0ZGMr Ky12My90ZXN0c3VpdGUvMjVfYWxnb3JpdGhtcy9taXNtYXRjaC8xLmNjCmlu ZGV4IGJjZjJmNWUuLmM3MGQ3NzggMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12 My90ZXN0c3VpdGUvMjVfYWxnb3JpdGhtcy9taXNtYXRjaC8xLmNjCisrKyBi L2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjVfYWxnb3JpdGhtcy9taXNtYXRj aC8xLmNjCkBAIC0yOSw2ICsyOSw4IEBAIGludCBhcnJheTFbXSA9IHswLCAx fTsKIGludCBhcnJheTJbXSA9IHsxLCAwfTsKIGludCBhcnJheTNbXSA9IHsx LCAwLCAxfTsKIAorYm9vbCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSB0ZXN0 ID0gZmFsc2U7CisKIHZvaWQgdGVzdDFhKCkKIHsKICAgQ29udGFpbmVyIGNv bjEoYXJyYXkxLCBhcnJheTEpOwpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYz L3Rlc3RzdWl0ZS8yNV9hbGdvcml0aG1zL21pc21hdGNoLzIuY2MgYi9saWJz dGRjKystdjMvdGVzdHN1aXRlLzI1X2FsZ29yaXRobXMvbWlzbWF0Y2gvMi5j YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWFjNGE5 Ci0tLSAvZGV2L251bGwKKysrIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8y NV9hbGdvcml0aG1zL21pc21hdGNoLzIuY2MKQEAgLTAsMCArMSwxNzUgQEAK Ky8vIENvcHlyaWdodCAoQykgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05V IElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5 b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlz IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh bG9uZworLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ SU5HMy4gIElmIG5vdCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4KKworLy8gMjUuMi4xMCBbbWlzbWF0Y2hdCisKKy8vIHsgZGct b3B0aW9ucyAiIC1zdGQ9Z251KysxeSAiIH0KKworI2luY2x1ZGUgPGFsZ29y aXRobT4KKyNpbmNsdWRlIDx0ZXN0c3VpdGVfaG9va3MuaD4KKyNpbmNsdWRl IDx0ZXN0c3VpdGVfaXRlcmF0b3JzLmg+CisKK3VzaW5nIF9fZ251X3Rlc3Q6 OnRlc3RfY29udGFpbmVyOwordXNpbmcgX19nbnVfdGVzdDo6aW5wdXRfaXRl cmF0b3Jfd3JhcHBlcjsKKwordHlwZWRlZiB0ZXN0X2NvbnRhaW5lcjxpbnQs IGlucHV0X2l0ZXJhdG9yX3dyYXBwZXI+IENvbnRhaW5lcjsKKworaW50IGFy cmF5MVtdID0gezAsIDF9OworaW50IGFycmF5MltdID0gezEsIDB9OworaW50 IGFycmF5M1tdID0gezEsIDAsIDF9OworCitzdHJ1Y3QgZXF1YWxfdG8KK3sK KyAgc3RhdGljIGludCBjb3VudDsKKworICBib29sIG9wZXJhdG9yKCkoaW50 IGwsIGludCByKQorICB7CisgICAgKytjb3VudDsKKyAgICByZXR1cm4gbCA9 PSByOworICB9Cit9IGVxOworCitpbnQgZXF1YWxfdG86OmNvdW50ID0gMDsK KworYm9vbCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSB0ZXN0ID0gZmFsc2U7 CisKK3ZvaWQgdGVzdDEoKQoreworICAvLyBlbXB0eSByYW5nZXMKKyAgQ29u dGFpbmVyIGNvbjEoYXJyYXkxLCBhcnJheTEpOworICBDb250YWluZXIgY29u MihhcnJheTIsIGFycmF5Mik7CisgIGF1dG8gcmVzID0gc3RkOjptaXNtYXRj aChjb24xLmJlZ2luKCksIGNvbjEuZW5kKCksIGNvbjIuYmVnaW4oKSwgY29u Mi5lbmQoKSk7CisgIFZFUklGWSggcmVzLmZpcnN0LnB0ciA9PSBhcnJheTEg KTsKKyAgVkVSSUZZKCByZXMuc2Vjb25kLnB0ciA9PSBhcnJheTIgKTsKKyAg cmVzID0gc3RkOjptaXNtYXRjaChjb24xLmJlZ2luKCksIGNvbjEuZW5kKCks IGNvbjIuYmVnaW4oKSwgY29uMi5lbmQoKSwgZXEpOworICBWRVJJRlkoIHJl cy5maXJzdC5wdHIgPT0gYXJyYXkxICk7CisgIFZFUklGWSggcmVzLnNlY29u ZC5wdHIgPT0gYXJyYXkyICk7CisgIFZFUklGWSggZXF1YWxfdG86OmNvdW50 ID09IDAgKTsKK30KKwordm9pZCB0ZXN0MigpCit7CisgIC8vIGZpcnN0IHJh bmdlIGVtcHR5LCBzZWNvbmQgbm9uLWVtcHR5CisgIENvbnRhaW5lciBjb24x KGFycmF5MSwgYXJyYXkxKTsKKyAgQ29udGFpbmVyIGNvbjIoYXJyYXkyLCBh cnJheTIgKyAyKTsKKyAgYXV0byByZXMgPSBzdGQ6Om1pc21hdGNoKGNvbjEu YmVnaW4oKSwgY29uMS5lbmQoKSwgY29uMi5iZWdpbigpLCBjb24yLmVuZCgp KTsKKyAgVkVSSUZZKCByZXMuZmlyc3QucHRyID09IGFycmF5MSApOworICBW RVJJRlkoIHJlcy5zZWNvbmQucHRyID09IGFycmF5MiApOworCisgIHJlcyA9 IHN0ZDo6bWlzbWF0Y2goY29uMS5iZWdpbigpLCBjb24xLmVuZCgpLCBjb24y LmJlZ2luKCksIGNvbjIuZW5kKCksIGVxKTsKKyAgVkVSSUZZKCByZXMuZmly c3QucHRyID09IGFycmF5MSApOworICBWRVJJRlkoIHJlcy5zZWNvbmQucHRy ID09IGFycmF5MiApOworICBWRVJJRlkoIGVxdWFsX3RvOjpjb3VudCA9PSAw ICk7Cit9CisKK3ZvaWQgdGVzdDMoKQoreworICAvLyBmaXJzdCByYW5nZSBu b24tZW1wdHksIHNlY29uZCBlbXB0eQorICBDb250YWluZXIgY29uMShhcnJh eTEsIGFycmF5MSArIDIpOworICBDb250YWluZXIgY29uMihhcnJheTIsIGFy cmF5Mik7CisgIGF1dG8gcmVzID0gc3RkOjptaXNtYXRjaChjb24xLmJlZ2lu KCksIGNvbjEuZW5kKCksIGNvbjIuYmVnaW4oKSwgY29uMi5lbmQoKSk7Cisg IFZFUklGWSggcmVzLmZpcnN0LnB0ciA9PSBhcnJheTEgKTsKKyAgVkVSSUZZ KCByZXMuc2Vjb25kLnB0ciA9PSBhcnJheTIgKTsKKworICByZXMgPSBzdGQ6 Om1pc21hdGNoKGNvbjEuYmVnaW4oKSwgY29uMS5lbmQoKSwgY29uMi5iZWdp bigpLCBjb24yLmVuZCgpLCBlcSk7CisgIFZFUklGWSggcmVzLmZpcnN0LnB0 ciA9PSBhcnJheTEgKTsKKyAgVkVSSUZZKCByZXMuc2Vjb25kLnB0ciA9PSBh cnJheTIgKTsKKyAgVkVSSUZZKCBlcXVhbF90bzo6Y291bnQgPT0gMCApOwor fQorCit2b2lkIHRlc3Q0KCkKK3sKKyAgLy8gbm9uLWVtcHR5LCBtaXNtYXRj aGluZyByYW5nZXMKKyAgQ29udGFpbmVyIGNvbjEoYXJyYXkxLCBhcnJheTEg KyAyKTsKKyAgQ29udGFpbmVyIGNvbjIoYXJyYXkyLCBhcnJheTIgKyAyKTsK KyAgYXV0byByZXMgPSBzdGQ6Om1pc21hdGNoKGNvbjEuYmVnaW4oKSwgY29u MS5lbmQoKSwgY29uMi5iZWdpbigpLCBjb24yLmVuZCgpKTsKKyAgVkVSSUZZ KCByZXMuZmlyc3QucHRyID09IGFycmF5MSApOworICBWRVJJRlkoIHJlcy5z ZWNvbmQucHRyID09IGFycmF5MiApOworCisgIGNvbjEuYm91bmRzLmZpcnN0 ID0gYXJyYXkxOworICBjb24yLmJvdW5kcy5maXJzdCA9IGFycmF5MjsKKyAg cmVzID0gc3RkOjptaXNtYXRjaChjb24xLmJlZ2luKCksIGNvbjEuZW5kKCks IGNvbjIuYmVnaW4oKSwgY29uMi5lbmQoKSwgZXEpOworICBWRVJJRlkoIHJl cy5maXJzdC5wdHIgPT0gYXJyYXkxICk7CisgIFZFUklGWSggcmVzLnNlY29u ZC5wdHIgPT0gYXJyYXkyICk7CisgIFZFUklGWSggZXF1YWxfdG86OmNvdW50 ID09IDEgKTsKKyAgZXF1YWxfdG86OmNvdW50ID0gMDsKK30KKwordm9pZCB0 ZXN0NSgpCit7CisgIC8vIG5vbi1lbXB0eSwgbWF0Y2hpbmcgcmFuZ2VzCisg IENvbnRhaW5lciBjb24zKGFycmF5MywgYXJyYXkzICsgMik7CisgIENvbnRh aW5lciBjb24yKGFycmF5MiwgYXJyYXkyICsgMik7CisgIGF1dG8gcmVzID0g c3RkOjptaXNtYXRjaChjb24zLmJlZ2luKCksIGNvbjMuZW5kKCksIGNvbjIu YmVnaW4oKSwgY29uMi5lbmQoKSk7CisgIFZFUklGWSggcmVzLmZpcnN0LnB0 ciA9PSBhcnJheTMgKyAyICk7CisgIFZFUklGWSggcmVzLnNlY29uZC5wdHIg PT0gYXJyYXkyICsgMiApOworCisgIGNvbjMuYm91bmRzLmZpcnN0ID0gYXJy YXkzOworICBjb24yLmJvdW5kcy5maXJzdCA9IGFycmF5MjsKKyAgcmVzID0g c3RkOjptaXNtYXRjaChjb24zLmJlZ2luKCksIGNvbjMuZW5kKCksIGNvbjIu YmVnaW4oKSwgY29uMi5lbmQoKSwgZXEpOworICBWRVJJRlkoIHJlcy5maXJz dC5wdHIgPT0gYXJyYXkzICsgMiApOworICBWRVJJRlkoIHJlcy5zZWNvbmQu cHRyID09IGFycmF5MiArIDIgKTsKKyAgVkVSSUZZKCBlcXVhbF90bzo6Y291 bnQgPT0gMiApOworICBlcXVhbF90bzo6Y291bnQgPSAwOworfQorCit2b2lk IHRlc3Q2KCkKK3sKKyAgLy8gbm9uLWVtcHR5LCBtYXRjaGluZyBzdWItcmFu Z2VzLCBmaXJzdCByYW5nZSBsb25nZXIKKyAgQ29udGFpbmVyIGNvbjMoYXJy YXkzLCBhcnJheTMgKyAzKTsKKyAgQ29udGFpbmVyIGNvbjIoYXJyYXkyLCBh cnJheTIgKyAyKTsKKyAgYXV0byByZXMgPSBzdGQ6Om1pc21hdGNoKGNvbjMu YmVnaW4oKSwgY29uMy5lbmQoKSwgY29uMi5iZWdpbigpLCBjb24yLmVuZCgp KTsKKyAgVkVSSUZZKCByZXMuZmlyc3QucHRyID09IGFycmF5MyArIDIgKTsK KyAgVkVSSUZZKCByZXMuc2Vjb25kLnB0ciA9PSBhcnJheTIgKyAyICk7CisK KyAgY29uMy5ib3VuZHMuZmlyc3QgPSBhcnJheTM7CisgIGNvbjIuYm91bmRz LmZpcnN0ID0gYXJyYXkyOworICByZXMgPSBzdGQ6Om1pc21hdGNoKGNvbjMu YmVnaW4oKSwgY29uMy5lbmQoKSwgY29uMi5iZWdpbigpLCBjb24yLmVuZCgp LCBlcSk7CisgIFZFUklGWSggcmVzLmZpcnN0LnB0ciA9PSBhcnJheTMgKyAy ICk7CisgIFZFUklGWSggcmVzLnNlY29uZC5wdHIgPT0gYXJyYXkyICsgMiAp OworICBWRVJJRlkoIGVxdWFsX3RvOjpjb3VudCA9PSAyICk7CisgIGVxdWFs X3RvOjpjb3VudCA9IDA7Cit9CisKK3ZvaWQgdGVzdDcoKQoreworICAvLyBu b24tZW1wdHksIG1hdGNoaW5nIHN1Yi1yYW5nZXMsIHNlY29uZCByYW5nZSBs b25nZXIKKyAgQ29udGFpbmVyIGNvbjMoYXJyYXkzLCBhcnJheTMgKyAzKTsK KyAgQ29udGFpbmVyIGNvbjIoYXJyYXkyLCBhcnJheTIgKyAyKTsKKyAgYXV0 byByZXMgPSBzdGQ6Om1pc21hdGNoKGNvbjIuYmVnaW4oKSwgY29uMi5lbmQo KSwgY29uMy5iZWdpbigpLCBjb24zLmVuZCgpKTsKKyAgVkVSSUZZKCByZXMu Zmlyc3QucHRyID09IGFycmF5MiArIDIgKTsKKyAgVkVSSUZZKCByZXMuc2Vj b25kLnB0ciA9PSBhcnJheTMgKyAyICk7CisKKyAgY29uMy5ib3VuZHMuZmly c3QgPSBhcnJheTM7CisgIGNvbjIuYm91bmRzLmZpcnN0ID0gYXJyYXkyOwor ICByZXMgPSBzdGQ6Om1pc21hdGNoKGNvbjIuYmVnaW4oKSwgY29uMi5lbmQo KSwgY29uMy5iZWdpbigpLCBjb24zLmVuZCgpLCBlcSk7CisgIFZFUklGWSgg cmVzLmZpcnN0LnB0ciA9PSBhcnJheTIgKyAyICk7CisgIFZFUklGWSggcmVz LnNlY29uZC5wdHIgPT0gYXJyYXkzICsgMiApOworICBWRVJJRlkoIGVxdWFs X3RvOjpjb3VudCA9PSAyICk7CisgIGVxdWFsX3RvOjpjb3VudCA9IDA7Cit9 CisKK2ludCBtYWluKCkKK3sKKyAgdGVzdDEoKTsKKyAgdGVzdDIoKTsKKyAg dGVzdDMoKTsKKyAgdGVzdDQoKTsKKyAgdGVzdDUoKTsKKyAgdGVzdDYoKTsK KyAgdGVzdDcoKTsKK30KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0 c3VpdGUvMjVfYWxnb3JpdGhtcy9taXNtYXRjaC9jaGVja190eXBlMi5jYyBi L2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjVfYWxnb3JpdGhtcy9taXNtYXRj aC9jaGVja190eXBlMi5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4zZWMxZjg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlic3RkYysr LXYzL3Rlc3RzdWl0ZS8yNV9hbGdvcml0aG1zL21pc21hdGNoL2NoZWNrX3R5 cGUyLmNjCkBAIC0wLDAgKzEsNTEgQEAKKy8vIENvcHlyaWdodCAoQykgMjAw NS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8v IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5 LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQor Ly8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8g YW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor Ly8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8v IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRo aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNl ZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyAy NS4yLjEwIFttaXNtYXRjaF0KKworLy8geyBkZy1vcHRpb25zICIgLXN0ZD1n bnUrKzF5ICIgfQorLy8geyBkZy1kbyBjb21waWxlIH0KKworI2luY2x1ZGUg PGFsZ29yaXRobT4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHRl c3RzdWl0ZV9pdGVyYXRvcnMuaD4KKwordXNpbmcgX19nbnVfdGVzdDo6aW5w dXRfaXRlcmF0b3Jfd3JhcHBlcjsKKworc3RydWN0IExoczEgeyB9OworCitz dHJ1Y3QgUmhzMSB7IH07CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBMaHMx JiwgY29uc3QgUmhzMSYpIHtyZXR1cm4gdHJ1ZTt9CisKK3N0cnVjdCBMaHMy IHsgfTsKKworc3RydWN0IFJoczIgeyB9OworCitib29sIHByZWRpY2F0ZShj b25zdCBMaHMyJiwgY29uc3QgUmhzMiYpIHtyZXR1cm4gdHJ1ZTt9CisKK3N0 ZDo6cGFpcjxpbnB1dF9pdGVyYXRvcl93cmFwcGVyPExoczE+LCBpbnB1dF9p dGVyYXRvcl93cmFwcGVyPFJoczE+ID4KK3Rlc3QxKGlucHV0X2l0ZXJhdG9y X3dyYXBwZXI8TGhzMT4mIGxoczEsIGlucHV0X2l0ZXJhdG9yX3dyYXBwZXI8 UmhzMT4mIHJoczEpCit7CisgIHJldHVybiBzdGQ6Om1pc21hdGNoKGxoczEs IGxoczEsIHJoczEsIHJoczEpOworfQorCitzdGQ6OnBhaXI8aW5wdXRfaXRl cmF0b3Jfd3JhcHBlcjxMaHMyPiwgaW5wdXRfaXRlcmF0b3Jfd3JhcHBlcjxS aHMyPiA+Cit0ZXN0MihpbnB1dF9pdGVyYXRvcl93cmFwcGVyPExoczI+JiBs aHMyLCBpbnB1dF9pdGVyYXRvcl93cmFwcGVyPFJoczI+JiByaHMyKQorewor ICByZXR1cm4gc3RkOjptaXNtYXRjaChsaHMyLCBsaHMyLCByaHMyLCByaHMy LCBwcmVkaWNhdGUpOworfQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL3Rl c3RzdWl0ZS91dGlsL3Rlc3RzdWl0ZV9pdGVyYXRvcnMuaCBiL2xpYnN0ZGMr Ky12My90ZXN0c3VpdGUvdXRpbC90ZXN0c3VpdGVfaXRlcmF0b3JzLmgKaW5k ZXggNzU3MjgyYi4uOWJiNTg1OCAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYz L3Rlc3RzdWl0ZS91dGlsL3Rlc3RzdWl0ZV9pdGVyYXRvcnMuaAorKysgYi9s aWJzdGRjKystdjMvdGVzdHN1aXRlL3V0aWwvdGVzdHN1aXRlX2l0ZXJhdG9y cy5oCkBAIC0xMTYsNyArMTE2LDcgQEAgbmFtZXNwYWNlIF9fZ251X3Rlc3QK ICAgICogCiAgICAqIFRoaXMgY2xhc3MgdGFrZXMgYSBwb2ludGVyIGFuZCB3 cmFwcyBpdCB0byBwcm92aWRlIGV4YWN0bHkKICAgICogdGhlIHJlcXVpcmVt ZW50cyBvZiBhIG91dHB1dF9pdGVyYXRvci4gSXQgc2hvdWxkIG5vdCBiZQot ICAgKiBpbnN0YW5zaWF0ZWQgZGlyZWN0bHksIGJ1dCBnZW5lcmF0ZWQgZnJv bSBhIHRlc3RfY29udGFpbmVyCisgICAqIGluc3RhbnRpYXRlZCBkaXJlY3Rs eSwgYnV0IGdlbmVyYXRlZCBmcm9tIGEgdGVzdF9jb250YWluZXIKICAgICov CiAgIHRlbXBsYXRlPGNsYXNzIFQ+CiAgIHN0cnVjdCBvdXRwdXRfaXRlcmF0 b3Jfd3JhcHBlcgpAQCAtMTc3LDcgKzE3Nyw3IEBAIG5hbWVzcGFjZSBfX2du dV90ZXN0CiAgICAqIAogICAgKiBUaGlzIGNsYXNzIHRha2VzIGEgcG9pbnRl ciBhbmQgd3JhcHMgaXQgdG8gcHJvdmlkZSBleGFjdGx5CiAgICAqIHRoZSBy ZXF1aXJlbWVudHMgb2YgYSBpbnB1dF9pdGVyYXRvci4gSXQgc2hvdWxkIG5v dCBiZQotICAgKiBpbnN0YW5zaWF0ZWQgZGlyZWN0bHksIGJ1dCBnZW5lcmF0 ZWQgZnJvbSBhIHRlc3RfY29udGFpbmVyCisgICAqIGluc3RhbnRpYXRlZCBk aXJlY3RseSwgYnV0IGdlbmVyYXRlZCBmcm9tIGEgdGVzdF9jb250YWluZXIK ICAgICovCiAgIHRlbXBsYXRlPGNsYXNzIFQ+CiAgIGNsYXNzIGlucHV0X2l0 ZXJhdG9yX3dyYXBwZXIKQEAgLTI1OSw3ICsyNTksNyBAQCBuYW1lc3BhY2Ug X19nbnVfdGVzdAogICAgKiAKICAgICogVGhpcyBjbGFzcyB0YWtlcyBhIHBv aW50ZXIgYW5kIHdyYXBzIGl0IHRvIHByb3ZpZGUgZXhhY3RseQogICAgKiB0 aGUgcmVxdWlyZW1lbnRzIG9mIGEgZm9yd2FyZF9pdGVyYXRvci4gSXQgc2hv dWxkIG5vdCBiZQotICAgKiBpbnN0YW5zaWF0ZWQgZGlyZWN0bHksIGJ1dCBn ZW5lcmF0ZWQgZnJvbSBhIHRlc3RfY29udGFpbmVyCisgICAqIGluc3RhbnRp YXRlZCBkaXJlY3RseSwgYnV0IGdlbmVyYXRlZCBmcm9tIGEgdGVzdF9jb250 YWluZXIKICAgICovCiAgIHRlbXBsYXRlPGNsYXNzIFQ+CiAgIHN0cnVjdCBm b3J3YXJkX2l0ZXJhdG9yX3dyYXBwZXIgOiBwdWJsaWMgaW5wdXRfaXRlcmF0 b3Jfd3JhcHBlcjxUPgpAQCAtMzEzLDcgKzMxMyw3IEBAIG5hbWVzcGFjZSBf X2dudV90ZXN0CiAgICAqIAogICAgKiBUaGlzIGNsYXNzIHRha2VzIGEgcG9p bnRlciBhbmQgd3JhcHMgaXQgdG8gcHJvdmlkZSBleGFjdGx5CiAgICAqIHRo ZSByZXF1aXJlbWVudHMgb2YgYSBmb3J3YXJkX2l0ZXJhdG9yLiBJdCBzaG91 bGQgbm90IGJlCi0gICAqIGluc3RhbnNpYXRlZCBkaXJlY3RseSwgYnV0IGdl bmVyYXRlZCBmcm9tIGEgdGVzdF9jb250YWluZXIKKyAgICogaW5zdGFudGlh dGVkIGRpcmVjdGx5LCBidXQgZ2VuZXJhdGVkIGZyb20gYSB0ZXN0X2NvbnRh aW5lcgogICAgKi8KICAgdGVtcGxhdGU8Y2xhc3MgVD4KICAgc3RydWN0IGJp ZGlyZWN0aW9uYWxfaXRlcmF0b3Jfd3JhcHBlciA6IHB1YmxpYyBmb3J3YXJk X2l0ZXJhdG9yX3dyYXBwZXI8VD4KQEAgLTM3Nyw3ICszNzcsNyBAQCBuYW1l c3BhY2UgX19nbnVfdGVzdAogICAgKiAKICAgICogVGhpcyBjbGFzcyB0YWtl cyBhIHBvaW50ZXIgYW5kIHdyYXBzIGl0IHRvIHByb3ZpZGUgZXhhY3RseQog ICAgKiB0aGUgcmVxdWlyZW1lbnRzIG9mIGEgZm9yd2FyZF9pdGVyYXRvci4g SXQgc2hvdWxkIG5vdCBiZQotICAgKiBpbnN0YW5zaWF0ZWQgZGlyZWN0bHks IGJ1dCBnZW5lcmF0ZWQgZnJvbSBhIHRlc3RfY29udGFpbmVyCisgICAqIGlu c3RhbnRpYXRlZCBkaXJlY3RseSwgYnV0IGdlbmVyYXRlZCBmcm9tIGEgdGVz dF9jb250YWluZXIKICAgICovCiAgIHRlbXBsYXRlPGNsYXNzIFQ+CiAgIHN0 cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3dyYXBwZXIgCg== --001a11c3c94218431504dea6d5bb--