From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 49370 invoked by alias); 9 Dec 2018 15:07:22 -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 49346 invoked by uid 89); 9 Dec 2018 15:07:20 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.0 required=5.0 tests=BAYES_20,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS,TIME_LIMIT_EXCEEDED autolearn=unavailable version=3.3.2 spammy=tabs, ab, 7416, cd X-HELO: mail-qt1-f172.google.com Received: from mail-qt1-f172.google.com (HELO mail-qt1-f172.google.com) (209.85.160.172) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 09 Dec 2018 15:07:09 +0000 Received: by mail-qt1-f172.google.com with SMTP id p17so9659036qtl.5 for ; Sun, 09 Dec 2018 07:07:08 -0800 (PST) MIME-Version: 1.0 From: Iain Buclaw Date: Sun, 09 Dec 2018 15:07:00 -0000 Message-ID: Subject: [PATCH, d] Committd merge with upstream dmd To: gcc-patches Content-Type: multipart/mixed; boundary="000000000000ab08ec057c9833b4" X-IsSubscribed: yes X-SW-Source: 2018-12/txt/msg00540.txt.bz2 --000000000000ab08ec057c9833b4 Content-Type: text/plain; charset="UTF-8" Content-length: 453 Hi, This patch merges the D front-end implementation with dmd upstream e2fe2687b. Backports VRP fixes from the D front-end implementation to the C++ port, and fixes errors reported by ubsan build where the conversion from D didn't include adjusting integer suffixes from 'UL' to 'ULL', fixing https://gcc.gnu.org/PR88366. Bootstrapped and tested on x86_64-linux-gnu --with-build-config=bootstrap-ubsan Committed to trunk as r266925. -- Iain --- --000000000000ab08ec057c9833b4 Content-Type: text/x-patch; charset="US-ASCII"; name="dmde2fe2687b.patch" Content-Disposition: attachment; filename="dmde2fe2687b.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jpgs5rpw0 Content-length: 64429 ZGlmZiAtLWdpdCBhL2djYy9kL2RtZC9NRVJHRSBiL2djYy9kL2RtZC9NRVJH RQppbmRleCAyMjNmZmJkYzM1OC4uYTFhMWZhMGVmZDEgMTAwNjQ0Ci0tLSBh L2djYy9kL2RtZC9NRVJHRQorKysgYi9nY2MvZC9kbWQvTUVSR0UKQEAgLTEs NCArMSw0IEBACi01MjIwYWQ1MWVlYmUwNjc1NGU2ODgxZDliZDVhYWI4OWRi YTJiMDY1CitlMmZlMjY4N2I4MTdhMjAxNTI4YWJhYTNhYTg4MjMzM2UwNGRi MDFiCiAKIFRoZSBmaXJzdCBsaW5lIG9mIHRoaXMgZmlsZSBob2xkcyB0aGUg Z2l0IHJldmlzaW9uIG51bWJlciBvZiB0aGUgbGFzdAogbWVyZ2UgZG9uZSBm cm9tIHRoZSBkbGFuZy9kbWQgcmVwb3NpdG9yeS4KZGlmZiAtLWdpdCBhL2dj Yy9kL2RtZC9jb25zdGZvbGQuYyBiL2djYy9kL2RtZC9jb25zdGZvbGQuYwpp bmRleCA0YjVkY2ViYTYyZS4uYzNkZjAxM2Q4MDIgMTAwNjQ0Ci0tLSBhL2dj Yy9kL2RtZC9jb25zdGZvbGQuYworKysgYi9nY2MvZC9kbWQvY29uc3Rmb2xk LmMKQEAgLTQ0NiwxMyArNDQ2LDEzIEBAIFVuaW9uRXhwIERpdihMb2MgbG9j LCBUeXBlICp0eXBlLCBFeHByZXNzaW9uICplMSwgRXhwcmVzc2lvbiAqZTIp CiAgICAgICAgIGlmIChuMiA9PSAtMSAmJiAhdHlwZS0+aXN1bnNpZ25lZCgp KQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBDaGVjayBmb3IgaW50Lm1p biAvIC0xCi0gICAgICAgICAgICBpZiAoKGRpbnRlZ2VyX3QpbjEgPT0gMHhG RkZGRkZGRjgwMDAwMDAwVUwgJiYgdHlwZS0+dG9CYXNldHlwZSgpLT50eSAh PSBUaW50NjQpCisgICAgICAgICAgICBpZiAoKGRpbnRlZ2VyX3QpbjEgPT0g MHhGRkZGRkZGRjgwMDAwMDAwVUxMICYmIHR5cGUtPnRvQmFzZXR5cGUoKS0+ dHkgIT0gVGludDY0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg IGUyLT5lcnJvcigiaW50ZWdlciBvdmVyZmxvdzogaW50Lm1pbiAvIC0xIik7 CiAgICAgICAgICAgICAgICAgbmV3KCZ1ZSkgRXJyb3JFeHAoKTsKICAgICAg ICAgICAgICAgICByZXR1cm4gdWU7CiAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICBlbHNlIGlmICgoZGludGVnZXJfdCluMSA9PSAweDgwMDAwMDAwMDAw MDAwMDBMKSAvLyBsb25nLm1pbiAvIC0xCisgICAgICAgICAgICBlbHNlIGlm ICgoZGludGVnZXJfdCluMSA9PSAweDgwMDAwMDAwMDAwMDAwMDBMTCkgLy8g bG9uZy5taW4gLyAtMQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg IGUyLT5lcnJvcigiaW50ZWdlciBvdmVyZmxvdzogbG9uZy5taW4gLyAtMSIp OwogICAgICAgICAgICAgICAgIG5ldygmdWUpIEVycm9yRXhwKCk7CmRpZmYg LS1naXQgYS9nY2MvZC9kbWQvZGNhc3QuYyBiL2djYy9kL2RtZC9kY2FzdC5j CmluZGV4IDM5NDcxNjY1ZTRhLi45NjA2Yzk5NDQ4MiAxMDA2NDQKLS0tIGEv Z2NjL2QvZG1kL2RjYXN0LmMKKysrIGIvZ2NjL2QvZG1kL2RjYXN0LmMKQEAg LTk4Niw2ICs5ODYsMTkgQEAgTUFUQ0ggaW1wbGljaXRDb252VG8oRXhwcmVz c2lvbiAqZSwgVHlwZSAqdCkKICAgICAgICAgICAgIHZpc2l0KChFeHByZXNz aW9uICopZSk7CiAgICAgICAgIH0KIAorICAgICAgICB2b2lkIHZpc2l0KEFu ZEV4cCAqZSkKKyAgICAgICAgeworICAgICAgICAgICAgdmlzaXQoKEV4cHJl c3Npb24gKillKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gTUFUQ0hu b21hdGNoKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg ICAgTUFUQ0ggbTEgPSBlLT5lMS0+aW1wbGljaXRDb252VG8odCk7CisgICAg ICAgICAgICBNQVRDSCBtMiA9IGUtPmUyLT5pbXBsaWNpdENvbnZUbyh0KTsK KworICAgICAgICAgICAgLy8gUGljayB0aGUgd29yc3QgbWF0Y2gKKyAgICAg ICAgICAgIHJlc3VsdCA9IChtMSA8IG0yKSA/IG0xIDogbTI7CisgICAgICAg IH0KKwogICAgICAgICB2b2lkIHZpc2l0KE9yRXhwICplKQogICAgICAgICB7 CiAgICAgICAgICAgICB2aXNpdCgoRXhwcmVzc2lvbiAqKWUpOwpAQCAtMzM4 MSw3NCArMzM5NCw2IEBAIEludFJhbmdlIGdldEludFJhbmdlKEV4cHJlc3Np b24gKmUpCiB7CiAgICAgY2xhc3MgSW50UmFuZ2VWaXNpdG9yIDogcHVibGlj IFZpc2l0b3IKICAgICB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGlj IHVpbnRlZ2VyX3QgZ2V0TWFzayh1aW50ZWdlcl90IHYpCi0gICAgICAgIHsK LSAgICAgICAgICAgIC8vIFJlZjogaHR0cDovL2dyYXBoaWNzLnN0YW5mb3Jk LmVkdS9+c2VhbmRlci9iaXRoYWNrcy5odG1sI1JvdW5kVXBQb3dlck9mMgot ICAgICAgICAgICAgdiB8PSB2ID4+IDE7Ci0gICAgICAgICAgICB2IHw9IHYg Pj4gMjsKLSAgICAgICAgICAgIHYgfD0gdiA+PiA0OwotICAgICAgICAgICAg diB8PSB2ID4+IDg7Ci0gICAgICAgICAgICB2IHw9IHYgPj4gMTY7Ci0gICAg ICAgICAgICB2IHw9IHYgPj4gMzI7Ci0gICAgICAgICAgICByZXR1cm4gdjsK LSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoZSBhbGdvcml0aG1zIGZvciAm LCB8LCBeIGFyZSBub3QgeWV0IHRoZSBiZXN0ISBTb21ldGltZXMgdGhleSB3 aWxsIHByb2R1Y2UKLSAgICAgICAgLy8gIG5vdCB0aGUgdGlnaHRlc3QgYm91 bmQuIFNlZQotICAgICAgICAvLyAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9E LVByb2dyYW1taW5nLUxhbmd1YWdlL2RtZC9wdWxsLzExNgotICAgICAgICAv LyAgZm9yIGRldGFpbC4KLSAgICAgICAgc3RhdGljIEludFJhbmdlIHVuc2ln bmVkQml0d2lzZUFuZChjb25zdCBJbnRSYW5nZSYgYSwgY29uc3QgSW50UmFu Z2UmIGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIHRoZSBEaWZmTWFz a3Mgc3RvcmVzIHRoZSBtYXNrIG9mIGJpdHMgd2hpY2ggYXJlIHZhcmlhYmxl IGluIHRoZSByYW5nZS4KLSAgICAgICAgICAgIHVpbnRlZ2VyX3QgYURpZmZN YXNrID0gZ2V0TWFzayhhLmltaW4udmFsdWUgXiBhLmltYXgudmFsdWUpOwot ICAgICAgICAgICAgdWludGVnZXJfdCBiRGlmZk1hc2sgPSBnZXRNYXNrKGIu aW1pbi52YWx1ZSBeIGIuaW1heC52YWx1ZSk7Ci0gICAgICAgICAgICAvLyBT aW5jZSAnJicgY29tcHV0ZXMgdGhlIGRpZ2l0d2lzZS1taW5pbXVtLCB0aGUg d2UgY291bGQgc2V0IGFsbCB2YXJ5aW5nCi0gICAgICAgICAgICAvLyAgZGln aXRzIHRvIDAgdG8gZ2V0IGEgbG93ZXIgYm91bmQsIGFuZCBzZXQgYWxsIHZh cnlpbmcgZGlnaXRzIHRvIDEgdG8gZ2V0Ci0gICAgICAgICAgICAvLyAgYW4g dXBwZXIgYm91bmQuCi0gICAgICAgICAgICBJbnRSYW5nZSByZXN1bHQ7Ci0g ICAgICAgICAgICByZXN1bHQuaW1pbi52YWx1ZSA9IChhLmltaW4udmFsdWUg JiB+YURpZmZNYXNrKSAmIChiLmltaW4udmFsdWUgJiB+YkRpZmZNYXNrKTsK LSAgICAgICAgICAgIHJlc3VsdC5pbWF4LnZhbHVlID0gKGEuaW1heC52YWx1 ZSB8IGFEaWZmTWFzaykgJiAoYi5pbWF4LnZhbHVlIHwgYkRpZmZNYXNrKTsK LSAgICAgICAgICAgIC8vIFNvbWV0aW1lcyB0aGUgdXBwZXIgYm91bmQgaXMg b3ZlcmVzdGltYXRlZC4gVGhlIHVwcGVyIGJvdW5kIHdpbGwgbmV2ZXIKLSAg ICAgICAgICAgIC8vICBleGNlZWQgdGhlIGlucHV0LgotICAgICAgICAgICAg aWYgKHJlc3VsdC5pbWF4LnZhbHVlID4gYS5pbWF4LnZhbHVlKQotICAgICAg ICAgICAgICAgIHJlc3VsdC5pbWF4LnZhbHVlID0gYS5pbWF4LnZhbHVlOwot ICAgICAgICAgICAgaWYgKHJlc3VsdC5pbWF4LnZhbHVlID4gYi5pbWF4LnZh bHVlKQotICAgICAgICAgICAgICAgIHJlc3VsdC5pbWF4LnZhbHVlID0gYi5p bWF4LnZhbHVlOwotICAgICAgICAgICAgcmVzdWx0LmltaW4ubmVnYXRpdmUg PSByZXN1bHQuaW1heC5uZWdhdGl2ZSA9IGEuaW1pbi5uZWdhdGl2ZSAmJiBi LmltaW4ubmVnYXRpdmU7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot ICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBJbnRSYW5nZSB1bnNpZ25lZEJp dHdpc2VPcihjb25zdCBJbnRSYW5nZSYgYSwgY29uc3QgSW50UmFuZ2UmIGIp Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIHRoZSBEaWZmTWFza3Mgc3Rv cmVzIHRoZSBtYXNrIG9mIGJpdHMgd2hpY2ggYXJlIHZhcmlhYmxlIGluIHRo ZSByYW5nZS4KLSAgICAgICAgICAgIHVpbnRlZ2VyX3QgYURpZmZNYXNrID0g Z2V0TWFzayhhLmltaW4udmFsdWUgXiBhLmltYXgudmFsdWUpOwotICAgICAg ICAgICAgdWludGVnZXJfdCBiRGlmZk1hc2sgPSBnZXRNYXNrKGIuaW1pbi52 YWx1ZSBeIGIuaW1heC52YWx1ZSk7Ci0gICAgICAgICAgICAvLyBUaGUgaW1h eCBhbGdvcml0aG0gYnkgQWRhbSBELiBSdXBwZS4KLSAgICAgICAgICAgIC8v IGh0dHA6Ly93d3cuZGlnaXRhbG1hcnMuY29tL3BuZXdzL3JlYWQucGhwP3Nl cnZlcj1uZXdzLmRpZ2l0YWxtYXJzLmNvbSZncm91cD1kaWdpdGFsbWFycy5E JmFydG51bT0xMDg3OTYKLSAgICAgICAgICAgIEludFJhbmdlIHJlc3VsdDsK LSAgICAgICAgICAgIHJlc3VsdC5pbWluLnZhbHVlID0gKGEuaW1pbi52YWx1 ZSAmIH5hRGlmZk1hc2spIHwgKGIuaW1pbi52YWx1ZSAmIH5iRGlmZk1hc2sp OwotICAgICAgICAgICAgcmVzdWx0LmltYXgudmFsdWUgPSBhLmltYXgudmFs dWUgfCBiLmltYXgudmFsdWUgfCBnZXRNYXNrKGEuaW1heC52YWx1ZSAmIGIu aW1heC52YWx1ZSk7Ci0gICAgICAgICAgICAvLyBTb21ldGltZXMgdGhlIGxv d2VyIGJvdW5kIGlzIHVuZGVyZXN0aW1hdGVkLiBUaGUgbG93ZXIgYm91bmQg d2lsbCBuZXZlcgotICAgICAgICAgICAgLy8gIGxlc3MgdGhhbiB0aGUgaW5w dXQuCi0gICAgICAgICAgICBpZiAocmVzdWx0LmltaW4udmFsdWUgPCBhLmlt aW4udmFsdWUpCi0gICAgICAgICAgICAgICAgcmVzdWx0LmltaW4udmFsdWUg PSBhLmltaW4udmFsdWU7Ci0gICAgICAgICAgICBpZiAocmVzdWx0LmltaW4u dmFsdWUgPCBiLmltaW4udmFsdWUpCi0gICAgICAgICAgICAgICAgcmVzdWx0 LmltaW4udmFsdWUgPSBiLmltaW4udmFsdWU7Ci0gICAgICAgICAgICByZXN1 bHQuaW1pbi5uZWdhdGl2ZSA9IHJlc3VsdC5pbWF4Lm5lZ2F0aXZlID0gYS5p bWluLm5lZ2F0aXZlIHx8IGIuaW1pbi5uZWdhdGl2ZTsKLSAgICAgICAgICAg IHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGljIElu dFJhbmdlIHVuc2lnbmVkQml0d2lzZVhvcihjb25zdCBJbnRSYW5nZSYgYSwg Y29uc3QgSW50UmFuZ2UmIGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8v IHRoZSBEaWZmTWFza3Mgc3RvcmVzIHRoZSBtYXNrIG9mIGJpdHMgd2hpY2gg YXJlIHZhcmlhYmxlIGluIHRoZSByYW5nZS4KLSAgICAgICAgICAgIHVpbnRl Z2VyX3QgYURpZmZNYXNrID0gZ2V0TWFzayhhLmltaW4udmFsdWUgXiBhLmlt YXgudmFsdWUpOwotICAgICAgICAgICAgdWludGVnZXJfdCBiRGlmZk1hc2sg PSBnZXRNYXNrKGIuaW1pbi52YWx1ZSBeIGIuaW1heC52YWx1ZSk7Ci0gICAg ICAgICAgICBJbnRSYW5nZSByZXN1bHQ7Ci0gICAgICAgICAgICByZXN1bHQu aW1pbi52YWx1ZSA9IChhLmltaW4udmFsdWUgXiBiLmltaW4udmFsdWUpICYg fihhRGlmZk1hc2sgfCBiRGlmZk1hc2spOwotICAgICAgICAgICAgcmVzdWx0 LmltYXgudmFsdWUgPSAoYS5pbWF4LnZhbHVlIF4gYi5pbWF4LnZhbHVlKSB8 IChhRGlmZk1hc2sgfCBiRGlmZk1hc2spOwotICAgICAgICAgICAgcmVzdWx0 LmltaW4ubmVnYXRpdmUgPSByZXN1bHQuaW1heC5uZWdhdGl2ZSA9IGEuaW1p bi5uZWdhdGl2ZSAhPSBiLmltaW4ubmVnYXRpdmU7Ci0gICAgICAgICAgICBy ZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KICAgICBwdWJsaWM6CiAgICAg ICAgIEludFJhbmdlIHJhbmdlOwogCkBAIC0zNDcxLDE0ICszNDE2LDE0IEBA IEludFJhbmdlIGdldEludFJhbmdlKEV4cHJlc3Npb24gKmUpCiAgICAgICAg IHsKICAgICAgICAgICAgIEludFJhbmdlIGlyMSA9IGdldEludFJhbmdlKGUt PmUxKTsKICAgICAgICAgICAgIEludFJhbmdlIGlyMiA9IGdldEludFJhbmdl KGUtPmUyKTsKLSAgICAgICAgICAgIHJhbmdlID0gSW50UmFuZ2UoaXIxLmlt aW4gKyBpcjIuaW1pbiwgaXIxLmltYXggKyBpcjIuaW1heCkuY2FzdChlLT50 eXBlKTsKKyAgICAgICAgICAgIHJhbmdlID0gKGlyMSArIGlyMikuY2FzdChl LT50eXBlKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgdmlzaXQoTWlu RXhwICplKQogICAgICAgICB7CiAgICAgICAgICAgICBJbnRSYW5nZSBpcjEg PSBnZXRJbnRSYW5nZShlLT5lMSk7CiAgICAgICAgICAgICBJbnRSYW5nZSBp cjIgPSBnZXRJbnRSYW5nZShlLT5lMik7Ci0gICAgICAgICAgICByYW5nZSA9 IEludFJhbmdlKGlyMS5pbWluIC0gaXIyLmltYXgsIGlyMS5pbWF4IC0gaXIy LmltaW4pLmNhc3QoZS0+dHlwZSk7CisgICAgICAgICAgICByYW5nZSA9IChp cjEgLSBpcjIpLmNhc3QoZS0+dHlwZSk7CiAgICAgICAgIH0KIAogICAgICAg ICB2b2lkIHZpc2l0KERpdkV4cCAqZSkKQEAgLTM0ODYsMjAgKzM0MzEsNyBA QCBJbnRSYW5nZSBnZXRJbnRSYW5nZShFeHByZXNzaW9uICplKQogICAgICAg ICAgICAgSW50UmFuZ2UgaXIxID0gZ2V0SW50UmFuZ2UoZS0+ZTEpOwogICAg ICAgICAgICAgSW50UmFuZ2UgaXIyID0gZ2V0SW50UmFuZ2UoZS0+ZTIpOwog Ci0gICAgICAgICAgICAvLyBTaG91bGQgd2UgaWdub3JlIHRoZSBwb3NzaWJp bGl0eSBvZiBkaXYtYnktMD8/PwotICAgICAgICAgICAgaWYgKGlyMi5jb250 YWluc1plcm8oKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2 aXNpdCgoRXhwcmVzc2lvbiAqKWUpOwotICAgICAgICAgICAgICAgIHJldHVy bjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gW2EsYl0gLyBb YyxkXSA9IFttaW4gKGEvYywgYS9kLCBiL2MsIGIvZCksIG1heCAoYS9jLCBh L2QsIGIvYywgYi9kKV0KLSAgICAgICAgICAgIFNpZ25FeHRlbmRlZE51bWJl ciBiZHlbNF07Ci0gICAgICAgICAgICBiZHlbMF0gPSBpcjEuaW1pbiAvIGly Mi5pbWluOwotICAgICAgICAgICAgYmR5WzFdID0gaXIxLmltaW4gLyBpcjIu aW1heDsKLSAgICAgICAgICAgIGJkeVsyXSA9IGlyMS5pbWF4IC8gaXIyLmlt aW47Ci0gICAgICAgICAgICBiZHlbM10gPSBpcjEuaW1heCAvIGlyMi5pbWF4 OwotICAgICAgICAgICAgcmFuZ2UgPSBJbnRSYW5nZTo6ZnJvbU51bWJlcnM0 KGJkeSkuY2FzdChlLT50eXBlKTsKKyAgICAgICAgICAgIHJhbmdlID0gKGly MSAvIGlyMikuY2FzdChlLT50eXBlKTsKICAgICAgICAgfQogCiAgICAgICAg IHZvaWQgdmlzaXQoTXVsRXhwICplKQpAQCAtMzUwNywxMDcgKzM0MzksMzgg QEAgSW50UmFuZ2UgZ2V0SW50UmFuZ2UoRXhwcmVzc2lvbiAqZSkKICAgICAg ICAgICAgIEludFJhbmdlIGlyMSA9IGdldEludFJhbmdlKGUtPmUxKTsKICAg ICAgICAgICAgIEludFJhbmdlIGlyMiA9IGdldEludFJhbmdlKGUtPmUyKTsK IAotICAgICAgICAgICAgLy8gW2EsYl0gKiBbYyxkXSA9IFttaW4gKGFjLCBh ZCwgYmMsIGJkKSwgbWF4IChhYywgYWQsIGJjLCBiZCldCi0gICAgICAgICAg ICBTaWduRXh0ZW5kZWROdW1iZXIgYmR5WzRdOwotICAgICAgICAgICAgYmR5 WzBdID0gaXIxLmltaW4gKiBpcjIuaW1pbjsKLSAgICAgICAgICAgIGJkeVsx XSA9IGlyMS5pbWluICogaXIyLmltYXg7Ci0gICAgICAgICAgICBiZHlbMl0g PSBpcjEuaW1heCAqIGlyMi5pbWluOwotICAgICAgICAgICAgYmR5WzNdID0g aXIxLmltYXggKiBpcjIuaW1heDsKLSAgICAgICAgICAgIHJhbmdlID0gSW50 UmFuZ2U6OmZyb21OdW1iZXJzNChiZHkpLmNhc3QoZS0+dHlwZSk7CisgICAg ICAgICAgICByYW5nZSA9IChpcjEgKiBpcjIpLmNhc3QoZS0+dHlwZSk7CiAg ICAgICAgIH0KIAogICAgICAgICB2b2lkIHZpc2l0KE1vZEV4cCAqZSkKICAg ICAgICAgewotICAgICAgICAgICAgSW50UmFuZ2UgaXJOdW0gPSBnZXRJbnRS YW5nZShlLT5lMSk7Ci0gICAgICAgICAgICBJbnRSYW5nZSBpckRlbiA9IGdl dEludFJhbmdlKGUtPmUyKS5hYnNOZWcoKTsKLQotICAgICAgICAgICAgLyoK LSAgICAgICAgICAgIGR1ZSB0byB0aGUgcnVsZXMgb2YgRCAoQykncyAlIG9w ZXJhdG9yLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBjYXNlcwotICAgICAg ICAgICAgc2VwYXJhdGVseSBpbiBkaWZmZXJlbnQgcmFuZ2Ugb2Ygc2lnbnMu Ci0KLSAgICAgICAgICAgICAgICBjYXNlIDEuIFs1MDAsIDE3MDBdICUgWzcs IDIzXSAobnVtZXJhdG9yIGlzIGFsd2F5cyBwb3NpdGl2ZSkKLSAgICAgICAg ICAgICAgICAgICAgPSBbMCwgMjJdCi0gICAgICAgICAgICAgICAgY2FzZSAy LiBbLTUwMCwgMTcwMF0gJSBbNywgMjNdIChudW1lcmF0b3IgY2FuIGJlIG5l Z2F0aXZlKQotICAgICAgICAgICAgICAgICAgICA9IFstMjIsIDIyXQotICAg ICAgICAgICAgICAgIGNhc2UgMy4gWy0xNzAwLCAtNTAwXSAlIFs3LCAyM10g KG51bWVyYXRvciBpcyBhbHdheXMgbmVnYXRpdmUpCi0gICAgICAgICAgICAg ICAgICAgID0gWy0yMiwgMF0KLQotICAgICAgICAgICAgdGhlIG51bWJlciAy MiBpcyB0aGUgbWF4aW11bSBhYnNvbHV0ZSB2YWx1ZSBpbiB0aGUgZGVub21h dG9yJ3MgcmFuZ2UuIFdlCi0gICAgICAgICAgICBkb24ndCBjYXJlIGFib3V0 IGRpdmlkZSBieSB6ZXJvLgotICAgICAgICAgICAgKi8KKyAgICAgICAgICAg IEludFJhbmdlIGlyMSA9IGdldEludFJhbmdlKGUtPmUxKTsKKyAgICAgICAg ICAgIEludFJhbmdlIGlyMiA9IGdldEludFJhbmdlKGUtPmUyKTsKIAogICAg ICAgICAgICAgLy8gTW9kZGluZyBvbiAwIGlzIGludmFsaWQgYW55d2F5Lgot ICAgICAgICAgICAgaWYgKCFpckRlbi5pbWluLm5lZ2F0aXZlKQorICAgICAg ICAgICAgaWYgKCFpcjIuYWJzTmVnKCkuaW1pbi5uZWdhdGl2ZSkKICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICB2aXNpdCgoRXhwcmVzc2lvbiAq KWUpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K LQotICAgICAgICAgICAgKysgaXJEZW4uaW1pbjsKLSAgICAgICAgICAgIGly RGVuLmltYXggPSAtaXJEZW4uaW1pbjsKLQotICAgICAgICAgICAgaWYgKCFp ck51bS5pbWluLm5lZ2F0aXZlKQotICAgICAgICAgICAgICAgIGlyTnVtLmlt aW4udmFsdWUgPSAwOwotICAgICAgICAgICAgZWxzZSBpZiAoaXJOdW0uaW1p biA8IGlyRGVuLmltaW4pCi0gICAgICAgICAgICAgICAgaXJOdW0uaW1pbiA9 IGlyRGVuLmltaW47Ci0KLSAgICAgICAgICAgIGlmIChpck51bS5pbWF4Lm5l Z2F0aXZlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlyTnVt LmltYXgubmVnYXRpdmUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBpck51 bS5pbWF4LnZhbHVlID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IGVsc2UgaWYgKGlyTnVtLmltYXggPiBpckRlbi5pbWF4KQotICAgICAgICAg ICAgICAgIGlyTnVtLmltYXggPSBpckRlbi5pbWF4OwotCi0gICAgICAgICAg ICByYW5nZSA9IGlyTnVtLmNhc3QoZS0+dHlwZSk7CisgICAgICAgICAgICBy YW5nZSA9IChpcjEgJSBpcjIpLmNhc3QoZS0+dHlwZSk7CiAgICAgICAgIH0K IAogICAgICAgICB2b2lkIHZpc2l0KEFuZEV4cCAqZSkKICAgICAgICAgewot ICAgICAgICAgICAgSW50UmFuZ2UgaXIxID0gZ2V0SW50UmFuZ2UoZS0+ZTEp OwotICAgICAgICAgICAgSW50UmFuZ2UgaXIyID0gZ2V0SW50UmFuZ2UoZS0+ ZTIpOwotCi0gICAgICAgICAgICBJbnRSYW5nZSBpcjFuZWcsIGlyMXBvcywg aXIybmVnLCBpcjJwb3M7Ci0gICAgICAgICAgICBib29sIGhhczFuZWcsIGhh czFwb3MsIGhhczJuZWcsIGhhczJwb3M7Ci0KLSAgICAgICAgICAgIGlyMS5z cGxpdEJ5U2lnbihpcjFuZWcsIGhhczFuZWcsIGlyMXBvcywgaGFzMXBvcyk7 Ci0gICAgICAgICAgICBpcjIuc3BsaXRCeVNpZ24oaXIybmVnLCBoYXMybmVn LCBpcjJwb3MsIGhhczJwb3MpOwotCiAgICAgICAgICAgICBJbnRSYW5nZSBy ZXN1bHQ7CiAgICAgICAgICAgICBib29sIGhhc1Jlc3VsdCA9IGZhbHNlOwot ICAgICAgICAgICAgaWYgKGhhczFwb3MgJiYgaGFzMnBvcykKLSAgICAgICAg ICAgICAgICByZXN1bHQudW5pb25PckFzc2lnbih1bnNpZ25lZEJpdHdpc2VB bmQoaXIxcG9zLCBpcjJwb3MpLCBoYXNSZXN1bHQpOwotICAgICAgICAgICAg aWYgKGhhczFwb3MgJiYgaGFzMm5lZykKLSAgICAgICAgICAgICAgICByZXN1 bHQudW5pb25PckFzc2lnbih1bnNpZ25lZEJpdHdpc2VBbmQoaXIxcG9zLCBp cjJuZWcpLCBoYXNSZXN1bHQpOwotICAgICAgICAgICAgaWYgKGhhczFuZWcg JiYgaGFzMnBvcykKLSAgICAgICAgICAgICAgICByZXN1bHQudW5pb25PckFz c2lnbih1bnNpZ25lZEJpdHdpc2VBbmQoaXIxbmVnLCBpcjJwb3MpLCBoYXNS ZXN1bHQpOwotICAgICAgICAgICAgaWYgKGhhczFuZWcgJiYgaGFzMm5lZykK LSAgICAgICAgICAgICAgICByZXN1bHQudW5pb25PckFzc2lnbih1bnNpZ25l ZEJpdHdpc2VBbmQoaXIxbmVnLCBpcjJuZWcpLCBoYXNSZXN1bHQpOworICAg ICAgICAgICAgcmVzdWx0LnVuaW9uT3JBc3NpZ24oZ2V0SW50UmFuZ2UoZS0+ ZTEpICYgZ2V0SW50UmFuZ2UoZS0+ZTIpLCBoYXNSZXN1bHQpOworCiAgICAg ICAgICAgICBhc3NlcnQoaGFzUmVzdWx0KTsKICAgICAgICAgICAgIHJhbmdl ID0gcmVzdWx0LmNhc3QoZS0+dHlwZSk7CiAgICAgICAgIH0KIAogICAgICAg ICB2b2lkIHZpc2l0KE9yRXhwICplKQogICAgICAgICB7Ci0gICAgICAgICAg ICBJbnRSYW5nZSBpcjEgPSBnZXRJbnRSYW5nZShlLT5lMSk7Ci0gICAgICAg ICAgICBJbnRSYW5nZSBpcjIgPSBnZXRJbnRSYW5nZShlLT5lMik7Ci0KLSAg ICAgICAgICAgIEludFJhbmdlIGlyMW5lZywgaXIxcG9zLCBpcjJuZWcsIGly MnBvczsKLSAgICAgICAgICAgIGJvb2wgaGFzMW5lZywgaGFzMXBvcywgaGFz Mm5lZywgaGFzMnBvczsKLQotICAgICAgICAgICAgaXIxLnNwbGl0QnlTaWdu KGlyMW5lZywgaGFzMW5lZywgaXIxcG9zLCBoYXMxcG9zKTsKLSAgICAgICAg ICAgIGlyMi5zcGxpdEJ5U2lnbihpcjJuZWcsIGhhczJuZWcsIGlyMnBvcywg aGFzMnBvcyk7Ci0KICAgICAgICAgICAgIEludFJhbmdlIHJlc3VsdDsKICAg ICAgICAgICAgIGJvb2wgaGFzUmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAg ICBpZiAoaGFzMXBvcyAmJiBoYXMycG9zKQotICAgICAgICAgICAgICAgIHJl c3VsdC51bmlvbk9yQXNzaWduKHVuc2lnbmVkQml0d2lzZU9yKGlyMXBvcywg aXIycG9zKSwgaGFzUmVzdWx0KTsKLSAgICAgICAgICAgIGlmIChoYXMxcG9z ICYmIGhhczJuZWcpCi0gICAgICAgICAgICAgICAgcmVzdWx0LnVuaW9uT3JB c3NpZ24odW5zaWduZWRCaXR3aXNlT3IoaXIxcG9zLCBpcjJuZWcpLCBoYXNS ZXN1bHQpOwotICAgICAgICAgICAgaWYgKGhhczFuZWcgJiYgaGFzMnBvcykK LSAgICAgICAgICAgICAgICByZXN1bHQudW5pb25PckFzc2lnbih1bnNpZ25l ZEJpdHdpc2VPcihpcjFuZWcsIGlyMnBvcyksIGhhc1Jlc3VsdCk7Ci0gICAg ICAgICAgICBpZiAoaGFzMW5lZyAmJiBoYXMybmVnKQotICAgICAgICAgICAg ICAgIHJlc3VsdC51bmlvbk9yQXNzaWduKHVuc2lnbmVkQml0d2lzZU9yKGly MW5lZywgaXIybmVnKSwgaGFzUmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3Vs dC51bmlvbk9yQXNzaWduKGdldEludFJhbmdlKGUtPmUxKSB8IGdldEludFJh bmdlKGUtPmUyKSwgaGFzUmVzdWx0KTsKIAogICAgICAgICAgICAgYXNzZXJ0 KGhhc1Jlc3VsdCk7CiAgICAgICAgICAgICByYW5nZSA9IHJlc3VsdC5jYXN0 KGUtPnR5cGUpOwpAQCAtMzYxNSwyNSArMzQ3OCw5IEBAIEludFJhbmdlIGdl dEludFJhbmdlKEV4cHJlc3Npb24gKmUpCiAKICAgICAgICAgdm9pZCB2aXNp dChYb3JFeHAgKmUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEludFJhbmdl IGlyMSA9IGdldEludFJhbmdlKGUtPmUxKTsKLSAgICAgICAgICAgIEludFJh bmdlIGlyMiA9IGdldEludFJhbmdlKGUtPmUyKTsKLQotICAgICAgICAgICAg SW50UmFuZ2UgaXIxbmVnLCBpcjFwb3MsIGlyMm5lZywgaXIycG9zOwotICAg ICAgICAgICAgYm9vbCBoYXMxbmVnLCBoYXMxcG9zLCBoYXMybmVnLCBoYXMy cG9zOwotCi0gICAgICAgICAgICBpcjEuc3BsaXRCeVNpZ24oaXIxbmVnLCBo YXMxbmVnLCBpcjFwb3MsIGhhczFwb3MpOwotICAgICAgICAgICAgaXIyLnNw bGl0QnlTaWduKGlyMm5lZywgaGFzMm5lZywgaXIycG9zLCBoYXMycG9zKTsK LQogICAgICAgICAgICAgSW50UmFuZ2UgcmVzdWx0OwogICAgICAgICAgICAg Ym9vbCBoYXNSZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChoYXMx cG9zICYmIGhhczJwb3MpCi0gICAgICAgICAgICAgICAgcmVzdWx0LnVuaW9u T3JBc3NpZ24odW5zaWduZWRCaXR3aXNlWG9yKGlyMXBvcywgaXIycG9zKSwg aGFzUmVzdWx0KTsKLSAgICAgICAgICAgIGlmIChoYXMxcG9zICYmIGhhczJu ZWcpCi0gICAgICAgICAgICAgICAgcmVzdWx0LnVuaW9uT3JBc3NpZ24odW5z aWduZWRCaXR3aXNlWG9yKGlyMXBvcywgaXIybmVnKSwgaGFzUmVzdWx0KTsK LSAgICAgICAgICAgIGlmIChoYXMxbmVnICYmIGhhczJwb3MpCi0gICAgICAg ICAgICAgICAgcmVzdWx0LnVuaW9uT3JBc3NpZ24odW5zaWduZWRCaXR3aXNl WG9yKGlyMW5lZywgaXIycG9zKSwgaGFzUmVzdWx0KTsKLSAgICAgICAgICAg IGlmIChoYXMxbmVnICYmIGhhczJuZWcpCi0gICAgICAgICAgICAgICAgcmVz dWx0LnVuaW9uT3JBc3NpZ24odW5zaWduZWRCaXR3aXNlWG9yKGlyMW5lZywg aXIybmVnKSwgaGFzUmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdC51bmlv bk9yQXNzaWduKGdldEludFJhbmdlKGUtPmUxKSBeIGdldEludFJhbmdlKGUt PmUyKSwgaGFzUmVzdWx0KTsKIAogICAgICAgICAgICAgYXNzZXJ0KGhhc1Jl c3VsdCk7CiAgICAgICAgICAgICByYW5nZSA9IHJlc3VsdC5jYXN0KGUtPnR5 cGUpOwpAQCAtMzY0NCwxMyArMzQ5MSw3IEBAIEludFJhbmdlIGdldEludFJh bmdlKEV4cHJlc3Npb24gKmUpCiAgICAgICAgICAgICBJbnRSYW5nZSBpcjEg PSBnZXRJbnRSYW5nZShlLT5lMSk7CiAgICAgICAgICAgICBJbnRSYW5nZSBp cjIgPSBnZXRJbnRSYW5nZShlLT5lMik7CiAKLSAgICAgICAgICAgIGlmIChp cjIuaW1pbi5uZWdhdGl2ZSkKLSAgICAgICAgICAgICAgICBpcjIgPSBJbnRS YW5nZShTaWduRXh0ZW5kZWROdW1iZXIoMCksIFNpZ25FeHRlbmRlZE51bWJl cig2NCkpOwotCi0gICAgICAgICAgICBTaWduRXh0ZW5kZWROdW1iZXIgbG93 ZXIgPSBpcjEuaW1pbiA8PCAoaXIxLmltaW4ubmVnYXRpdmUgPyBpcjIuaW1h eCA6IGlyMi5pbWluKTsKLSAgICAgICAgICAgIFNpZ25FeHRlbmRlZE51bWJl ciB1cHBlciA9IGlyMS5pbWF4IDw8IChpcjEuaW1heC5uZWdhdGl2ZSA/IGly Mi5pbWluIDogaXIyLmltYXgpOwotCi0gICAgICAgICAgICByYW5nZSA9IElu dFJhbmdlKGxvd2VyLCB1cHBlcikuY2FzdChlLT50eXBlKTsKKyAgICAgICAg ICAgIHJhbmdlID0gKGlyMSA8PCBpcjIpLmNhc3QoZS0+dHlwZSk7CiAgICAg ICAgIH0KIAogICAgICAgICB2b2lkIHZpc2l0KFNockV4cCAqZSkKQEAgLTM2 NTgsMTMgKzM0OTksNyBAQCBJbnRSYW5nZSBnZXRJbnRSYW5nZShFeHByZXNz aW9uICplKQogICAgICAgICAgICAgSW50UmFuZ2UgaXIxID0gZ2V0SW50UmFu Z2UoZS0+ZTEpOwogICAgICAgICAgICAgSW50UmFuZ2UgaXIyID0gZ2V0SW50 UmFuZ2UoZS0+ZTIpOwogCi0gICAgICAgICAgICBpZiAoaXIyLmltaW4ubmVn YXRpdmUpCi0gICAgICAgICAgICAgICAgaXIyID0gSW50UmFuZ2UoU2lnbkV4 dGVuZGVkTnVtYmVyKDApLCBTaWduRXh0ZW5kZWROdW1iZXIoNjQpKTsKLQot ICAgICAgICAgICAgU2lnbkV4dGVuZGVkTnVtYmVyIGxvd2VyID0gaXIxLmlt aW4gPj4gKGlyMS5pbWluLm5lZ2F0aXZlID8gaXIyLmltaW4gOiBpcjIuaW1h eCk7Ci0gICAgICAgICAgICBTaWduRXh0ZW5kZWROdW1iZXIgdXBwZXIgPSBp cjEuaW1heCA+PiAoaXIxLmltYXgubmVnYXRpdmUgPyBpcjIuaW1heCA6IGly Mi5pbWluKTsKLQotICAgICAgICAgICAgcmFuZ2UgPSBJbnRSYW5nZShsb3dl ciwgdXBwZXIpLmNhc3QoZS0+dHlwZSk7CisgICAgICAgICAgICByYW5nZSA9 IChpcjEgPj4gaXIyKS5jYXN0KGUtPnR5cGUpOwogICAgICAgICB9CiAKICAg ICAgICAgdm9pZCB2aXNpdChVc2hyRXhwICplKQpAQCAtMzY3MiwxMCArMzUw Nyw3IEBAIEludFJhbmdlIGdldEludFJhbmdlKEV4cHJlc3Npb24gKmUpCiAg ICAgICAgICAgICBJbnRSYW5nZSBpcjEgPSBnZXRJbnRSYW5nZShlLT5lMSku Y2FzdFVuc2lnbmVkKGUtPmUxLT50eXBlKTsKICAgICAgICAgICAgIEludFJh bmdlIGlyMiA9IGdldEludFJhbmdlKGUtPmUyKTsKIAotICAgICAgICAgICAg aWYgKGlyMi5pbWluLm5lZ2F0aXZlKQotICAgICAgICAgICAgICAgIGlyMiA9 IEludFJhbmdlKFNpZ25FeHRlbmRlZE51bWJlcigwKSwgU2lnbkV4dGVuZGVk TnVtYmVyKDY0KSk7Ci0KLSAgICAgICAgICAgIHJhbmdlID0gSW50UmFuZ2Uo aXIxLmltaW4gPj4gaXIyLmltYXgsIGlyMS5pbWF4ID4+IGlyMi5pbWluKS5j YXN0KGUtPnR5cGUpOworICAgICAgICAgICAgcmFuZ2UgPSAoaXIxID4+IGly MikuY2FzdChlLT50eXBlKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQg dmlzaXQoQXNzaWduRXhwICplKQpAQCAtMzcxOSw3ICszNTUxLDcgQEAgSW50 UmFuZ2UgZ2V0SW50UmFuZ2UoRXhwcmVzc2lvbiAqZSkKICAgICAgICAgdm9p ZCB2aXNpdChOZWdFeHAgKmUpCiAgICAgICAgIHsKICAgICAgICAgICAgIElu dFJhbmdlIGlyID0gZ2V0SW50UmFuZ2UoZS0+ZTEpOwotICAgICAgICAgICAg cmFuZ2UgPSBJbnRSYW5nZSgtaXIuaW1heCwgLWlyLmltaW4pLmNhc3QoZS0+ dHlwZSk7CisgICAgICAgICAgICByYW5nZSA9ICgtaXIpLmNhc3QoZS0+dHlw ZSk7CiAgICAgICAgIH0KICAgICB9OwogCmRpZmYgLS1naXQgYS9nY2MvZC9k bWQvZHN5bWJvbC5jIGIvZ2NjL2QvZG1kL2RzeW1ib2wuYwppbmRleCBiNTEx Yjc5YzdlMC4uZDA2NzhhMDZjNzQgMTAwNjQ0Ci0tLSBhL2djYy9kL2RtZC9k c3ltYm9sLmMKKysrIGIvZ2NjL2QvZG1kL2RzeW1ib2wuYwpAQCAtMTE5MSwx MiArMTE5MSwxMiBAQCB2b2lkIFNjb3BlRHN5bWJvbDo6aW1wb3J0U2NvcGUo RHN5bWJvbCAqcywgUHJvdCBwcm90ZWN0aW9uKQogCiBzdGF0aWMgdm9pZCBi aXRBcnJheVNldChCaXRBcnJheSAqYXJyYXksIHNpemVfdCBpZHgpCiB7Ci0g ICAgYXJyYXktPnB0cltpZHggLyAoc2l6ZW9mKHNpemVfdCkgKiBDSEFSX0JJ VCldIHw9IDEgPDwgKGlkeCAmIChzaXplb2Yoc2l6ZV90KSAqIENIQVJfQklU IC0gMSkpOworICAgIGFycmF5LT5wdHJbaWR4IC8gKHNpemVvZihzaXplX3Qp ICogQ0hBUl9CSVQpXSB8PSAxVUxMIDw8IChpZHggJiAoc2l6ZW9mKHNpemVf dCkgKiBDSEFSX0JJVCAtIDEpKTsKIH0KIAogc3RhdGljIGJvb2wgYml0QXJy YXlHZXQoQml0QXJyYXkgKmFycmF5LCBzaXplX3QgaWR4KQogewotICAgIHJl dHVybiAoYXJyYXktPnB0cltpZHggLyAoc2l6ZW9mKHNpemVfdCkgKiBDSEFS X0JJVCldICYgKDEgPDwgKGlkeCAmIChzaXplb2Yoc2l6ZV90KSAqIENIQVJf QklUIC0gMSkpKSkgIT0gMDsKKyAgICByZXR1cm4gKGFycmF5LT5wdHJbaWR4 IC8gKHNpemVvZihzaXplX3QpICogQ0hBUl9CSVQpXSAmICgxVUxMIDw8IChp ZHggJiAoc2l6ZW9mKHNpemVfdCkgKiBDSEFSX0JJVCAtIDEpKSkpICE9IDA7 CiB9CiAKIHN0YXRpYyB2b2lkIGJpdEFycmF5TGVuZ3RoKEJpdEFycmF5ICph cnJheSwgc2l6ZV90IGxlbikKZGlmZiAtLWdpdCBhL2djYy9kL2RtZC9pbnRy YW5nZS5jIGIvZ2NjL2QvZG1kL2ludHJhbmdlLmMKaW5kZXggOTY2YjlhMjk4 NmUuLmRkNzk0ZDk4YThjIDEwMDY0NAotLS0gYS9nY2MvZC9kbWQvaW50cmFu Z2UuYworKysgYi9nY2MvZC9kbWQvaW50cmFuZ2UuYwpAQCAtNTQsNiArNTQs MjYgQEAgU2lnbkV4dGVuZGVkTnVtYmVyIFNpZ25FeHRlbmRlZE51bWJlcjo6 bWF4KCkKICAgICByZXR1cm4gU2lnbkV4dGVuZGVkTnVtYmVyKFVJTlQ2NF9N QVgsIGZhbHNlKTsKIH0KIAorU2lnbkV4dGVuZGVkTnVtYmVyJiBTaWduRXh0 ZW5kZWROdW1iZXI6Om9wZXJhdG9yKysoKQoreworICAgIGlmICh2YWx1ZSAh PSBVSU5UNjRfTUFYKQorICAgICAgICArK3ZhbHVlOworICAgIGVsc2UgaWYg KG5lZ2F0aXZlKQorICAgIHsKKyAgICAgICAgdmFsdWUgPSAwOworICAgICAg ICBuZWdhdGl2ZSA9IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gKnRoaXM7 Cit9CisKK1NpZ25FeHRlbmRlZE51bWJlciBTaWduRXh0ZW5kZWROdW1iZXI6 Om9wZXJhdG9yfigpIGNvbnN0Cit7CisgICAgaWYgKH52YWx1ZSA9PSAwKQor ICAgICAgICByZXR1cm4gU2lnbkV4dGVuZGVkTnVtYmVyKH52YWx1ZSk7Cisg ICAgZWxzZQorICAgICAgICByZXR1cm4gU2lnbkV4dGVuZGVkTnVtYmVyKH52 YWx1ZSwgIW5lZ2F0aXZlKTsKK30KKwogU2lnbkV4dGVuZGVkTnVtYmVyIFNp Z25FeHRlbmRlZE51bWJlcjo6b3BlcmF0b3ItKCkgY29uc3QKIHsKICAgICBp ZiAodmFsdWUgPT0gMCkKQEAgLTYyLDExICs4MiwyNiBAQCBTaWduRXh0ZW5k ZWROdW1iZXIgU2lnbkV4dGVuZGVkTnVtYmVyOjpvcGVyYXRvci0oKSBjb25z dAogICAgICAgICByZXR1cm4gU2lnbkV4dGVuZGVkTnVtYmVyKC12YWx1ZSwg IW5lZ2F0aXZlKTsKIH0KIAotU2lnbkV4dGVuZGVkTnVtYmVyIFNpZ25FeHRl bmRlZE51bWJlcjo6b3BlcmF0b3IrKGNvbnN0IFNpZ25FeHRlbmRlZE51bWJl ciYgYSkgY29uc3QKK1NpZ25FeHRlbmRlZE51bWJlciBTaWduRXh0ZW5kZWRO dW1iZXI6Om9wZXJhdG9yJihjb25zdCBTaWduRXh0ZW5kZWROdW1iZXImIHJo cykgY29uc3QKIHsKLSAgICB1aW50ZWdlcl90IHN1bSA9IHZhbHVlICsgYS52 YWx1ZTsKLSAgICBib29sIGNhcnJ5ID0gc3VtIDwgdmFsdWUgJiYgc3VtIDwg YS52YWx1ZTsKLSAgICBpZiAobmVnYXRpdmUgIT0gYS5uZWdhdGl2ZSkKKyAg ICByZXR1cm4gU2lnbkV4dGVuZGVkTnVtYmVyKHZhbHVlICYgcmhzLnZhbHVl KTsKK30KKworU2lnbkV4dGVuZGVkTnVtYmVyIFNpZ25FeHRlbmRlZE51bWJl cjo6b3BlcmF0b3J8KGNvbnN0IFNpZ25FeHRlbmRlZE51bWJlciYgcmhzKSBj b25zdAoreworICAgIHJldHVybiBTaWduRXh0ZW5kZWROdW1iZXIodmFsdWUg fCByaHMudmFsdWUpOworfQorCitTaWduRXh0ZW5kZWROdW1iZXIgU2lnbkV4 dGVuZGVkTnVtYmVyOjpvcGVyYXRvcl4oY29uc3QgU2lnbkV4dGVuZGVkTnVt YmVyJiByaHMpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNpZ25FeHRlbmRlZE51 bWJlcih2YWx1ZSBeIHJocy52YWx1ZSk7Cit9CisKK1NpZ25FeHRlbmRlZE51 bWJlciBTaWduRXh0ZW5kZWROdW1iZXI6Om9wZXJhdG9yKyhjb25zdCBTaWdu RXh0ZW5kZWROdW1iZXImIHJocykgY29uc3QKK3sKKyAgICB1aW50ZWdlcl90 IHN1bSA9IHZhbHVlICsgcmhzLnZhbHVlOworICAgIGJvb2wgY2FycnkgPSBz dW0gPCB2YWx1ZSAmJiBzdW0gPCByaHMudmFsdWU7CisgICAgaWYgKG5lZ2F0 aXZlICE9IHJocy5uZWdhdGl2ZSkKICAgICAgICAgcmV0dXJuIFNpZ25FeHRl bmRlZE51bWJlcihzdW0sICFjYXJyeSk7CiAgICAgZWxzZSBpZiAobmVnYXRp dmUpCiAgICAgICAgIHJldHVybiBTaWduRXh0ZW5kZWROdW1iZXIoY2Fycnkg PyBzdW0gOiAwLCB0cnVlKTsKQEAgLTc0LDE2ICsxMDksMTUgQEAgU2lnbkV4 dGVuZGVkTnVtYmVyIFNpZ25FeHRlbmRlZE51bWJlcjo6b3BlcmF0b3IrKGNv bnN0IFNpZ25FeHRlbmRlZE51bWJlciYgYSkgY28KICAgICAgICAgcmV0dXJu IFNpZ25FeHRlbmRlZE51bWJlcihjYXJyeSA/IFVJTlQ2NF9NQVggOiBzdW0s IGZhbHNlKTsKIH0KIAotU2lnbkV4dGVuZGVkTnVtYmVyIFNpZ25FeHRlbmRl ZE51bWJlcjo6b3BlcmF0b3ItKGNvbnN0IFNpZ25FeHRlbmRlZE51bWJlciYg YSkgY29uc3QKK1NpZ25FeHRlbmRlZE51bWJlciBTaWduRXh0ZW5kZWROdW1i ZXI6Om9wZXJhdG9yLShjb25zdCBTaWduRXh0ZW5kZWROdW1iZXImIHJocykg Y29uc3QKIHsKLSAgICBpZiAoYS5pc01pbmltdW0oKSkKKyAgICBpZiAocmhz LmlzTWluaW11bSgpKQogICAgICAgICByZXR1cm4gbmVnYXRpdmUgPyBTaWdu RXh0ZW5kZWROdW1iZXIodmFsdWUsIGZhbHNlKSA6IG1heCgpOwogICAgIGVs c2UKLSAgICAgICAgcmV0dXJuICp0aGlzICsgKC1hKTsKKyAgICAgICAgcmV0 dXJuICp0aGlzICsgKC1yaHMpOwogfQogCi0KLVNpZ25FeHRlbmRlZE51bWJl ciBTaWduRXh0ZW5kZWROdW1iZXI6Om9wZXJhdG9yKihjb25zdCBTaWduRXh0 ZW5kZWROdW1iZXImIGEpIGNvbnN0CitTaWduRXh0ZW5kZWROdW1iZXIgU2ln bkV4dGVuZGVkTnVtYmVyOjpvcGVyYXRvciooY29uc3QgU2lnbkV4dGVuZGVk TnVtYmVyJiByaHMpIGNvbnN0CiB7CiAgICAgLy8gcGVyZm9ybSAqc2F0dXJh dGVkKiBtdWx0aXBsaWNhdGlvbiwgb3RoZXJ3aXNlIHdlIG1heSBnZXQgYm9n dXMgcmFuZ2VzCiAgICAgLy8gIGxpa2UgMHgxMCAqIDB4MTAgPT0gMHgxMDAg PT0gMC4KQEAgLTk4LDE5ICsxMzIsMTkgQEAgU2lnbkV4dGVuZGVkTnVtYmVy IFNpZ25FeHRlbmRlZE51bWJlcjo6b3BlcmF0b3IqKGNvbnN0IFNpZ25FeHRl bmRlZE51bWJlciYgYSkgY28KICAgICB7CiAgICAgICAgIGlmICghbmVnYXRp dmUpCiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgIGVsc2Ug aWYgKGEubmVnYXRpdmUpCisgICAgICAgIGVsc2UgaWYgKHJocy5uZWdhdGl2 ZSkKICAgICAgICAgICAgIHJldHVybiBtYXgoKTsKICAgICAgICAgZWxzZQot ICAgICAgICAgICAgcmV0dXJuIGEudmFsdWUgPT0gMCA/IGEgOiAqdGhpczsK KyAgICAgICAgICAgIHJldHVybiByaHMudmFsdWUgPT0gMCA/IHJocyA6ICp0 aGlzOwogICAgIH0KLSAgICBlbHNlIGlmIChhLnZhbHVlID09IDApCi0gICAg ICAgIHJldHVybiBhICogKnRoaXM7ICAgLy8gZG9uJ3QgZHVwbGljYXRlIHRo ZSBzeW1tZXRyaWMgY2FzZS4KKyAgICBlbHNlIGlmIChyaHMudmFsdWUgPT0g MCkKKyAgICAgICAgcmV0dXJuIHJocyAqICp0aGlzOyAgIC8vIGRvbid0IGR1 cGxpY2F0ZSB0aGUgc3ltbWV0cmljIGNhc2UuCiAKICAgICBTaWduRXh0ZW5k ZWROdW1iZXIgcnY7CiAgICAgLy8gdGhlc2UgYXJlICE9IDAgbm93IHN1cmVs eS4KICAgICB1aW50ZWdlcl90IHRBYnMgPSBjb3B5U2lnbih2YWx1ZSwgbmVn YXRpdmUpOwotICAgIHVpbnRlZ2VyX3QgYUFicyA9IGNvcHlTaWduKGEudmFs dWUsIGEubmVnYXRpdmUpOwotICAgIHJ2Lm5lZ2F0aXZlID0gbmVnYXRpdmUg IT0gYS5uZWdhdGl2ZTsKKyAgICB1aW50ZWdlcl90IGFBYnMgPSBjb3B5U2ln bihyaHMudmFsdWUsIHJocy5uZWdhdGl2ZSk7CisgICAgcnYubmVnYXRpdmUg PSBuZWdhdGl2ZSAhPSByaHMubmVnYXRpdmU7CiAgICAgaWYgKFVJTlQ2NF9N QVggLyB0QWJzIDwgYUFicykKICAgICAgICAgcnYudmFsdWUgPSBydi5uZWdh dGl2ZS0xOwogICAgIGVsc2UKQEAgLTExOCw3ICsxNTIsNyBAQCBTaWduRXh0 ZW5kZWROdW1iZXIgU2lnbkV4dGVuZGVkTnVtYmVyOjpvcGVyYXRvciooY29u c3QgU2lnbkV4dGVuZGVkTnVtYmVyJiBhKSBjbwogICAgIHJldHVybiBydjsK IH0KIAotU2lnbkV4dGVuZGVkTnVtYmVyIFNpZ25FeHRlbmRlZE51bWJlcjo6 b3BlcmF0b3IvKGNvbnN0IFNpZ25FeHRlbmRlZE51bWJlciYgYSkgY29uc3QK K1NpZ25FeHRlbmRlZE51bWJlciBTaWduRXh0ZW5kZWROdW1iZXI6Om9wZXJh dG9yLyhjb25zdCBTaWduRXh0ZW5kZWROdW1iZXImIHJocykgY29uc3QKIHsK ICAgICAvKiBzcGVjaWFsIGhhbmRsaW5nIGZvciB6ZXJvczoKICAgICAgICAg SU5UNjVfTUlOIC8gSU5UNjVfTUlOID0gMQpAQCAtMTI2LDE1ICsxNjAsMTUg QEAgU2lnbkV4dGVuZGVkTnVtYmVyIFNpZ25FeHRlbmRlZE51bWJlcjo6b3Bl cmF0b3IvKGNvbnN0IFNpZ25FeHRlbmRlZE51bWJlciYgYSkgY28KICAgICAg ICAgKyAvIDAgPSBJTlQ2NV9NQVggIChlaD8pCiAgICAgICAgIC0gLyAwID0g SU5UNjVfTUlOICAoZWg/KQogICAgICovCi0gICAgaWYgKGEudmFsdWUgPT0g MCkKKyAgICBpZiAocmhzLnZhbHVlID09IDApCiAgICAgewotICAgICAgICBp ZiAoYS5uZWdhdGl2ZSkKKyAgICAgICAgaWYgKHJocy5uZWdhdGl2ZSkKICAg ICAgICAgICAgIHJldHVybiBTaWduRXh0ZW5kZWROdW1iZXIodmFsdWUgPT0g MCAmJiBuZWdhdGl2ZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJl dHVybiBleHRyZW1lKG5lZ2F0aXZlKTsKICAgICB9CiAKLSAgICB1aW50ZWdl cl90IGFBYnMgPSBjb3B5U2lnbihhLnZhbHVlLCBhLm5lZ2F0aXZlKTsKKyAg ICB1aW50ZWdlcl90IGFBYnMgPSBjb3B5U2lnbihyaHMudmFsdWUsIHJocy5u ZWdhdGl2ZSk7CiAgICAgdWludGVnZXJfdCBydlZhbDsKIAogICAgIGlmICgh aXNNaW5pbXVtKCkpCkBAIC0xNDcsNyArMTgxLDcgQEAgU2lnbkV4dGVuZGVk TnVtYmVyIFNpZ25FeHRlbmRlZE51bWJlcjo6b3BlcmF0b3IvKGNvbnN0IFNp Z25FeHRlbmRlZE51bWJlciYgYSkgY28KICAgICBlbHNlCiAgICAgewogICAg ICAgICBpZiAoYUFicyA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIGV4dHJl bWUoIWEubmVnYXRpdmUpOworICAgICAgICAgICAgcmV0dXJuIGV4dHJlbWUo IXJocy5uZWdhdGl2ZSk7CiAgICAgICAgIHJ2VmFsID0gMVVMTCA8PCA2MzsK ICAgICAgICAgYUFicyA+Pj0gMTsKICAgICAgICAgaWYgKGFBYnMgJiAweEFB QUFBQUFBQUFBQUFBQUFVTEwpIHJ2VmFsID4+PSAxOwpAQCAtMTU3LDE4ICsx OTEsMTggQEAgU2lnbkV4dGVuZGVkTnVtYmVyIFNpZ25FeHRlbmRlZE51bWJl cjo6b3BlcmF0b3IvKGNvbnN0IFNpZ25FeHRlbmRlZE51bWJlciYgYSkgY28K ICAgICAgICAgaWYgKGFBYnMgJiAweEZGRkYwMDAwRkZGRjAwMDBVTEwpIHJ2 VmFsID4+PSAxNjsKICAgICAgICAgaWYgKGFBYnMgJiAweEZGRkZGRkZGMDAw MDAwMDBVTEwpIHJ2VmFsID4+PSAzMjsKICAgICB9Ci0gICAgYm9vbCBydk5l ZyA9IG5lZ2F0aXZlICE9IGEubmVnYXRpdmU7CisgICAgYm9vbCBydk5lZyA9 IG5lZ2F0aXZlICE9IHJocy5uZWdhdGl2ZTsKICAgICBydlZhbCA9IGNvcHlT aWduKHJ2VmFsLCBydk5lZyk7CiAKICAgICByZXR1cm4gU2lnbkV4dGVuZGVk TnVtYmVyKHJ2VmFsLCBydlZhbCAhPSAwICYmIHJ2TmVnKTsKIH0KIAotU2ln bkV4dGVuZGVkTnVtYmVyIFNpZ25FeHRlbmRlZE51bWJlcjo6b3BlcmF0b3Il KGNvbnN0IFNpZ25FeHRlbmRlZE51bWJlciYgYSkgY29uc3QKK1NpZ25FeHRl bmRlZE51bWJlciBTaWduRXh0ZW5kZWROdW1iZXI6Om9wZXJhdG9yJShjb25z dCBTaWduRXh0ZW5kZWROdW1iZXImIHJocykgY29uc3QKIHsKLSAgICBpZiAo YS52YWx1ZSA9PSAwKQotICAgICAgICByZXR1cm4gIWEubmVnYXRpdmUgPyBh IDogaXNNaW5pbXVtKCkgPyBTaWduRXh0ZW5kZWROdW1iZXIoMCkgOiAqdGhp czsKKyAgICBpZiAocmhzLnZhbHVlID09IDApCisgICAgICAgIHJldHVybiAh cmhzLm5lZ2F0aXZlID8gcmhzIDogaXNNaW5pbXVtKCkgPyBTaWduRXh0ZW5k ZWROdW1iZXIoMCkgOiAqdGhpczsKIAotICAgIHVpbnRlZ2VyX3QgYUFicyA9 IGNvcHlTaWduKGEudmFsdWUsIGEubmVnYXRpdmUpOworICAgIHVpbnRlZ2Vy X3QgYUFicyA9IGNvcHlTaWduKHJocy52YWx1ZSwgcmhzLm5lZ2F0aXZlKTsK ICAgICB1aW50ZWdlcl90IHJ2VmFsOwogCiAgICAgLy8gYSAlIGIgPT0gc2du KGEpICogYWJzKGEpICUgYWJzKGIpLgpAQCAtMTg2LDI1ICsyMjAsMTMgQEAg U2lnbkV4dGVuZGVkTnVtYmVyIFNpZ25FeHRlbmRlZE51bWJlcjo6b3BlcmF0 b3IlKGNvbnN0IFNpZ25FeHRlbmRlZE51bWJlciYgYSkgY28KICAgICByZXR1 cm4gU2lnbkV4dGVuZGVkTnVtYmVyKHJ2VmFsLCBydlZhbCAhPSAwICYmIG5l Z2F0aXZlKTsKIH0KIAotU2lnbkV4dGVuZGVkTnVtYmVyJiBTaWduRXh0ZW5k ZWROdW1iZXI6Om9wZXJhdG9yKysoKQotewotICAgIGlmICh2YWx1ZSAhPSBV SU5UNjRfTUFYKQotICAgICAgICArKyB2YWx1ZTsKLSAgICBlbHNlIGlmIChu ZWdhdGl2ZSkKLSAgICB7Ci0gICAgICAgIHZhbHVlID0gMDsKLSAgICAgICAg bmVnYXRpdmUgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuICp0aGlzOwot fQotCi1TaWduRXh0ZW5kZWROdW1iZXIgU2lnbkV4dGVuZGVkTnVtYmVyOjpv cGVyYXRvcjw8KGNvbnN0IFNpZ25FeHRlbmRlZE51bWJlciYgYSkgY29uc3QK K1NpZ25FeHRlbmRlZE51bWJlciBTaWduRXh0ZW5kZWROdW1iZXI6Om9wZXJh dG9yPDwoY29uc3QgU2lnbkV4dGVuZGVkTnVtYmVyJiByaHMpIGNvbnN0CiB7 CiAgICAgLy8gYXNzdW1lIGxlZnQtc2hpZnQgdGhlIHNoaWZ0LWFtb3VudCBp cyBhbHdheXMgdW5zaWduZWQuIFRodXMgbmVnYXRpdmUKICAgICAvLyAgc2hp ZnRzIHdpbGwgZ2l2ZSBodWdlIHJlc3VsdC4KICAgICBpZiAodmFsdWUgPT0g MCkKICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIGVsc2UgaWYgKGEubmVn YXRpdmUpCisgICAgZWxzZSBpZiAocmhzLm5lZ2F0aXZlKQogICAgICAgICBy ZXR1cm4gZXh0cmVtZShuZWdhdGl2ZSk7CiAKICAgICB1aW50ZWdlcl90IHYg PSBjb3B5U2lnbih2YWx1ZSwgbmVnYXRpdmUpOwpAQCAtMjIzLDIxICsyNDUs MjEgQEAgU2lnbkV4dGVuZGVkTnVtYmVyIFNpZ25FeHRlbmRlZE51bWJlcjo6 b3BlcmF0b3I8PChjb25zdCBTaWduRXh0ZW5kZWROdW1iZXImIGEpIGMKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIHw9 ICh2ID4+IDEpOwogCiAgICAgdWludGVnZXJfdCBhbGxvd2FibGVTaGlmdCA9 IDYzIC0gcjsKLSAgICBpZiAoYS52YWx1ZSA+IGFsbG93YWJsZVNoaWZ0KQor ICAgIGlmIChyaHMudmFsdWUgPiBhbGxvd2FibGVTaGlmdCkKICAgICAgICAg cmV0dXJuIGV4dHJlbWUobmVnYXRpdmUpOwogICAgIGVsc2UKLSAgICAgICAg cmV0dXJuIFNpZ25FeHRlbmRlZE51bWJlcih2YWx1ZSA8PCBhLnZhbHVlLCBu ZWdhdGl2ZSk7CisgICAgICAgIHJldHVybiBTaWduRXh0ZW5kZWROdW1iZXIo dmFsdWUgPDwgcmhzLnZhbHVlLCBuZWdhdGl2ZSk7CiB9CiAKLVNpZ25FeHRl bmRlZE51bWJlciBTaWduRXh0ZW5kZWROdW1iZXI6Om9wZXJhdG9yPj4oY29u c3QgU2lnbkV4dGVuZGVkTnVtYmVyJiBhKSBjb25zdAorU2lnbkV4dGVuZGVk TnVtYmVyIFNpZ25FeHRlbmRlZE51bWJlcjo6b3BlcmF0b3I+Pihjb25zdCBT aWduRXh0ZW5kZWROdW1iZXImIHJocykgY29uc3QKIHsKLSAgICBpZiAoYS5u ZWdhdGl2ZSB8fCBhLnZhbHVlID4gNjQpCisgICAgaWYgKHJocy5uZWdhdGl2 ZSB8fCByaHMudmFsdWUgPiA2MykKICAgICAgICAgcmV0dXJuIG5lZ2F0aXZl ID8gU2lnbkV4dGVuZGVkTnVtYmVyKC0xLCB0cnVlKSA6IFNpZ25FeHRlbmRl ZE51bWJlcigwKTsKICAgICBlbHNlIGlmIChpc01pbmltdW0oKSkKLSAgICAg ICAgcmV0dXJuIGEudmFsdWUgPT0gMCA/ICp0aGlzIDogU2lnbkV4dGVuZGVk TnVtYmVyKC0xVUxMIDw8ICg2NC1hLnZhbHVlKSwgdHJ1ZSk7CisgICAgICAg IHJldHVybiByaHMudmFsdWUgPT0gMCA/ICp0aGlzIDogU2lnbkV4dGVuZGVk TnVtYmVyKC0xVUxMIDw8ICg2NCAtIHJocy52YWx1ZSksIHRydWUpOwogCiAg ICAgdWludGVnZXJfdCB4ID0gdmFsdWUgXiAtbmVnYXRpdmU7Ci0gICAgeCA+ Pj0gYS52YWx1ZTsKKyAgICB4ID4+PSByaHMudmFsdWU7CiAgICAgcmV0dXJu IFNpZ25FeHRlbmRlZE51bWJlcih4IF4gLW5lZ2F0aXZlLCBuZWdhdGl2ZSk7 CiB9CiAKQEAgLTQ0OCw2ICs0NzAsMzY0IEBAIHZvaWQgSW50UmFuZ2U6OnNw bGl0QnlTaWduKEludFJhbmdlJiBuZWdSYW5nZSwgYm9vbCYgaGFzTmVnUmFu Z2UsCiAgICAgfQogfQogCitJbnRSYW5nZSBJbnRSYW5nZTo6b3BlcmF0b3J+ KCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50UmFuZ2UofmltYXgsIH5pbWlu KTsKK30KKworSW50UmFuZ2UgSW50UmFuZ2U6Om9wZXJhdG9yLSgpIGNvbnN0 Cit7CisgICAgcmV0dXJuIEludFJhbmdlKC1pbWF4LCAtaW1pbik7Cit9CisK K0ludFJhbmdlIEludFJhbmdlOjpvcGVyYXRvciYoY29uc3QgSW50UmFuZ2Um IHJocykgY29uc3QKK3sKKyAgICAvLyB1bnNpZ25lZCBvciBpZGVudGljYWwg c2lnbiBiaXRzCisgICAgaWYgKChpbWluLm5lZ2F0aXZlIF4gaW1heC5uZWdh dGl2ZSkgIT0gMSAmJiAocmhzLmltaW4ubmVnYXRpdmUgXiByaHMuaW1heC5u ZWdhdGl2ZSkgIT0gMSkKKyAgICB7CisgICAgICAgIHJldHVybiBJbnRSYW5n ZShtaW5BbmQoKnRoaXMsIHJocyksIG1heEFuZCgqdGhpcywgcmhzKSk7Cisg ICAgfQorCisgICAgSW50UmFuZ2UgbCA9IEludFJhbmdlKCp0aGlzKTsKKyAg ICBJbnRSYW5nZSByID0gSW50UmFuZ2UocmhzKTsKKworICAgIC8vIGJvdGgg aW50ZXJ2YWxzIHNwYW4gWy0xLDBdCisgICAgaWYgKChsLmltaW4ubmVnYXRp dmUgXiBsLmltYXgubmVnYXRpdmUpID09IDEgJiYgKHIuaW1pbi5uZWdhdGl2 ZSBeIHIuaW1heC5uZWdhdGl2ZSkgPT0gMSkKKyAgICB7CisgICAgICAgIC8v IGNhbm5vdCBiZSBsYXJnZXIgdGhhbiBlaXRoZXIgbC5tYXggb3Igci5tYXgs IHNldCB0aGUgb3RoZXIgb25lIHRvIC0xCisgICAgICAgIFNpZ25FeHRlbmRl ZE51bWJlciBtYXggPSBsLmltYXgudmFsdWUgPiByLmltYXgudmFsdWUgPyBs LmltYXggOiByLmltYXg7CisKKyAgICAgICAgLy8gb25seSBuZWdhdGl2ZSBu dW1iZXJzIGZvciBtaW5pbXVtCisgICAgICAgIGwuaW1heC52YWx1ZSA9IC0x OworICAgICAgICBsLmltYXgubmVnYXRpdmUgPSB0cnVlOworICAgICAgICBy LmltYXgudmFsdWUgPSAtMTsKKyAgICAgICAgci5pbWF4Lm5lZ2F0aXZlID0g dHJ1ZTsKKworICAgICAgICByZXR1cm4gSW50UmFuZ2UobWluQW5kKGwsIHIp LCBtYXgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBv bmx5IG9uZSBpbnRlcnZhbCBzcGFucyBbLTEsMF0KKyAgICAgICAgaWYgKChs LmltaW4ubmVnYXRpdmUgXiBsLmltYXgubmVnYXRpdmUpID09IDEpCisgICAg ICAgIHsKKyAgICAgICAgICAgIHN3YXAobCwgcik7IC8vIHIgc3BhbnMgWy0x LDBdCisgICAgICAgIH0KKworICAgICAgICBTaWduRXh0ZW5kZWROdW1iZXIg bWluQW5kTmVnID0gbWluQW5kKGwsIEludFJhbmdlKHIuaW1pbiwgU2lnbkV4 dGVuZGVkTnVtYmVyKC0xKSkpOworICAgICAgICBTaWduRXh0ZW5kZWROdW1i ZXIgbWluQW5kUG9zID0gbWluQW5kKGwsIEludFJhbmdlKFNpZ25FeHRlbmRl ZE51bWJlcigwKSwgci5pbWF4KSk7CisgICAgICAgIFNpZ25FeHRlbmRlZE51 bWJlciBtYXhBbmROZWcgPSBtYXhBbmQobCwgSW50UmFuZ2Uoci5pbWluLCBT aWduRXh0ZW5kZWROdW1iZXIoLTEpKSk7CisgICAgICAgIFNpZ25FeHRlbmRl ZE51bWJlciBtYXhBbmRQb3MgPSBtYXhBbmQobCwgSW50UmFuZ2UoU2lnbkV4 dGVuZGVkTnVtYmVyKDApLCByLmltYXgpKTsKKworICAgICAgICBTaWduRXh0 ZW5kZWROdW1iZXIgbWluID0gbWluQW5kTmVnIDwgbWluQW5kUG9zID8gbWlu QW5kTmVnIDogbWluQW5kUG9zOworICAgICAgICBTaWduRXh0ZW5kZWROdW1i ZXIgbWF4ID0gbWF4QW5kTmVnID4gbWF4QW5kUG9zID8gbWF4QW5kTmVnIDog bWF4QW5kUG9zOworCisgICAgICAgIHJldHVybiBJbnRSYW5nZShtaW4sIG1h eCk7CisgICAgfQorfQorCitJbnRSYW5nZSBJbnRSYW5nZTo6b3BlcmF0b3J8 KGNvbnN0IEludFJhbmdlJiByaHMpIGNvbnN0Cit7CisgICAgLy8gdW5zaWdu ZWQgb3IgaWRlbnRpY2FsIHNpZ24gYml0czoKKyAgICBpZiAoKGltaW4ubmVn YXRpdmUgXiBpbWF4Lm5lZ2F0aXZlKSA9PSAwICYmIChyaHMuaW1pbi5uZWdh dGl2ZSBeIHJocy5pbWF4Lm5lZ2F0aXZlKSA9PSAwKQorICAgIHsKKyAgICAg ICAgcmV0dXJuIEludFJhbmdlKG1pbk9yKCp0aGlzLCByaHMpLCBtYXhPcigq dGhpcywgcmhzKSk7CisgICAgfQorCisgICAgSW50UmFuZ2UgbCA9IEludFJh bmdlKCp0aGlzKTsKKyAgICBJbnRSYW5nZSByID0gSW50UmFuZ2UocmhzKTsK KworICAgIC8vIGJvdGggaW50ZXJ2YWxzIHNwYW4gWy0xLDBdCisgICAgaWYg KChsLmltaW4ubmVnYXRpdmUgXiBsLmltYXgubmVnYXRpdmUpID09IDEgJiYg KHIuaW1pbi5uZWdhdGl2ZSBeIHIuaW1heC5uZWdhdGl2ZSkgPT0gMSkKKyAg ICB7CisgICAgICAgIC8vIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gZWl0aGVy IGwubWluIG9yIHIubWluLCBzZXQgdGhlIG90aGVyIG9uZSB0byAwCisgICAg ICAgIFNpZ25FeHRlbmRlZE51bWJlciBtaW4gPSBsLmltaW4udmFsdWUgPCBy LmltaW4udmFsdWUgPyBsLmltaW4gOiByLmltaW47CisKKyAgICAgICAgLy8g b25seSBuZWdhdGl2ZSBudW1iZXJzIGZvciBtaW5pbXVtCisgICAgICAgIGwu aW1pbi52YWx1ZSA9IDA7CisgICAgICAgIGwuaW1pbi5uZWdhdGl2ZSA9IGZh bHNlOworICAgICAgICByLmltaW4udmFsdWUgPSAwOworICAgICAgICByLmlt aW4ubmVnYXRpdmUgPSBmYWxzZTsKKworICAgICAgICByZXR1cm4gSW50UmFu Z2UobWluLCBtYXhPcihsLCByKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7 CisgICAgICAgIC8vIG9ubHkgb25lIGludGVydmFsIHNwYW5zIFstMSwwXQor ICAgICAgICBpZiAoKGltaW4ubmVnYXRpdmUgXiBpbWF4Lm5lZ2F0aXZlKSA9 PSAxKQorICAgICAgICB7CisgICAgICAgICAgICBzd2FwKGwsIHIpOyAvLyBy IHNwYW5zIFstMSwwXQorICAgICAgICB9CisKKyAgICAgICAgU2lnbkV4dGVu ZGVkTnVtYmVyIG1pbk9yTmVnID0gbWluT3IobCwgSW50UmFuZ2Uoci5pbWlu LCBTaWduRXh0ZW5kZWROdW1iZXIoLTEpKSk7CisgICAgICAgIFNpZ25FeHRl bmRlZE51bWJlciBtaW5PclBvcyA9IG1pbk9yKGwsIEludFJhbmdlKFNpZ25F eHRlbmRlZE51bWJlcigwKSwgci5pbWF4KSk7CisgICAgICAgIFNpZ25FeHRl bmRlZE51bWJlciBtYXhPck5lZyA9IG1heE9yKGwsIEludFJhbmdlKHIuaW1p biwgU2lnbkV4dGVuZGVkTnVtYmVyKC0xKSkpOworICAgICAgICBTaWduRXh0 ZW5kZWROdW1iZXIgbWF4T3JQb3MgPSBtYXhPcihsLCBJbnRSYW5nZShTaWdu RXh0ZW5kZWROdW1iZXIoMCksIHIuaW1heCkpOworCisgICAgICAgIFNpZ25F eHRlbmRlZE51bWJlciBtaW4gPSBtaW5Pck5lZyA8IG1pbk9yUG9zID8gbWlu T3JOZWcgOiBtaW5PclBvczsKKyAgICAgICAgU2lnbkV4dGVuZGVkTnVtYmVy IG1heCA9IG1heE9yTmVnID4gbWF4T3JQb3MgPyBtYXhPck5lZyA6IG1heE9y UG9zOworCisgICAgICAgIHJldHVybiBJbnRSYW5nZShtaW4sIG1heCk7Cisg ICAgfQorfQorCitJbnRSYW5nZSBJbnRSYW5nZTo6b3BlcmF0b3JeKGNvbnN0 IEludFJhbmdlJiByaHMpIGNvbnN0Cit7CisgICAgcmV0dXJuICgqdGhpcyAm ICh+cmhzKSkgfCAofigqdGhpcykgJiByaHMpOworfQorCitJbnRSYW5nZSBJ bnRSYW5nZTo6b3BlcmF0b3IrKGNvbnN0IEludFJhbmdlJiByaHMpIGNvbnN0 Cit7CisgICAgcmV0dXJuIEludFJhbmdlKGltaW4gKyByaHMuaW1pbiwgaW1h eCArIHJocy5pbWF4KTsKK30KKworSW50UmFuZ2UgSW50UmFuZ2U6Om9wZXJh dG9yLShjb25zdCBJbnRSYW5nZSYgcmhzKSBjb25zdAoreworICAgIHJldHVy biBJbnRSYW5nZShpbWluIC0gcmhzLmltYXgsIGltYXggLSByaHMuaW1pbik7 Cit9CisKK0ludFJhbmdlIEludFJhbmdlOjpvcGVyYXRvciooY29uc3QgSW50 UmFuZ2UmIHJocykgY29uc3QKK3sKKyAgICAvLyBbYSxiXSAqIFtjLGRdID0g W21pbiAoYWMsIGFkLCBiYywgYmQpLCBtYXggKGFjLCBhZCwgYmMsIGJkKV0K KyAgICBTaWduRXh0ZW5kZWROdW1iZXIgYmR5WzRdOworICAgIGJkeVswXSA9 IGltaW4gKiByaHMuaW1pbjsKKyAgICBiZHlbMV0gPSBpbWluICogcmhzLmlt YXg7CisgICAgYmR5WzJdID0gaW1heCAqIHJocy5pbWluOworICAgIGJkeVsz XSA9IGltYXggKiByaHMuaW1heDsKKyAgICByZXR1cm4gSW50UmFuZ2U6OmZy b21OdW1iZXJzNChiZHkpOworfQorCitJbnRSYW5nZSBJbnRSYW5nZTo6b3Bl cmF0b3IvKGNvbnN0IEludFJhbmdlJiByaHMpIGNvbnN0Cit7CisgICAgLy8g SGFuZGxlIGRpdmlkZSBieSAwCisgICAgaWYgKHJocy5pbWF4LnZhbHVlID09 IDAgJiYgcmhzLmltaW4udmFsdWUgPT0gMCkKKyAgICAgICAgcmV0dXJuIHdp ZGVzdCgpOworCisgICAgSW50UmFuZ2UgciA9IEludFJhbmdlKHJocyk7CisK KyAgICAvLyBEb24ndCB0cmVhdCB0aGUgd2hvbGUgcmFuZ2UgYXMgZGl2aWRl IGJ5IDAgaWYgb25seSBvbmUgZW5kIG9mIGEgcmFuZ2UgaXMgMC4KKyAgICAv LyBJc3N1ZSAxNTI4OQorICAgIGlmIChyLmltYXgudmFsdWUgPT0gMCkKKyAg ICB7CisgICAgICAgIHIuaW1heC52YWx1ZS0tOworICAgIH0KKyAgICBlbHNl IGlmKHIuaW1pbi52YWx1ZSA9PSAwKQorICAgIHsKKyAgICAgICAgci5pbWlu LnZhbHVlKys7CisgICAgfQorCisgICAgaWYgKCFpbWluLm5lZ2F0aXZlICYm ICFpbWF4Lm5lZ2F0aXZlICYmICFyLmltaW4ubmVnYXRpdmUgJiYgIXIuaW1h eC5uZWdhdGl2ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBJbnRSYW5nZShp bWluIC8gci5pbWF4LCBpbWF4IC8gci5pbWluKTsKKyAgICB9CisgICAgZWxz ZQorICAgIHsKKyAgICAgICAgLy8gW2EsYl0gLyBbYyxkXSA9IFttaW4gKGEv YywgYS9kLCBiL2MsIGIvZCksIG1heCAoYS9jLCBhL2QsIGIvYywgYi9kKV0K KyAgICAgICAgU2lnbkV4dGVuZGVkTnVtYmVyIGJkeVs0XTsKKyAgICAgICAg YmR5WzBdID0gaW1pbiAvIHIuaW1pbjsKKyAgICAgICAgYmR5WzFdID0gaW1p biAvIHIuaW1heDsKKyAgICAgICAgYmR5WzJdID0gaW1heCAvIHIuaW1pbjsK KyAgICAgICAgYmR5WzNdID0gaW1heCAvIHIuaW1heDsKKworICAgICAgICBy ZXR1cm4gSW50UmFuZ2U6OmZyb21OdW1iZXJzNChiZHkpOworICAgIH0KK30K KworSW50UmFuZ2UgSW50UmFuZ2U6Om9wZXJhdG9yJShjb25zdCBJbnRSYW5n ZSYgcmhzKSBjb25zdAoreworICAgIEludFJhbmdlIGlyTnVtID0gKnRoaXM7 CisgICAgSW50UmFuZ2UgaXJEZW4gPSByaHMuYWJzTmVnKCk7CisKKyAgICAv KgorICAgICBkdWUgdG8gdGhlIHJ1bGVzIG9mIEQgKEMpJ3MgJSBvcGVyYXRv ciwgd2UgbmVlZCB0byBjb25zaWRlciB0aGUgY2FzZXMKKyAgICAgc2VwYXJh dGVseSBpbiBkaWZmZXJlbnQgcmFuZ2Ugb2Ygc2lnbnMuCisKKyAgICAgICAg IGNhc2UgMS4gWzUwMCwgMTcwMF0gJSBbNywgMjNdIChudW1lcmF0b3IgaXMg YWx3YXlzIHBvc2l0aXZlKQorICAgICAgICAgICAgID0gWzAsIDIyXQorICAg ICAgICAgY2FzZSAyLiBbLTUwMCwgMTcwMF0gJSBbNywgMjNdIChudW1lcmF0 b3IgY2FuIGJlIG5lZ2F0aXZlKQorICAgICAgICAgICAgID0gWy0yMiwgMjJd CisgICAgICAgICBjYXNlIDMuIFstMTcwMCwgLTUwMF0gJSBbNywgMjNdIChu dW1lcmF0b3IgaXMgYWx3YXlzIG5lZ2F0aXZlKQorICAgICAgICAgICAgID0g Wy0yMiwgMF0KKworICAgICB0aGUgbnVtYmVyIDIyIGlzIHRoZSBtYXhpbXVt IGFic29sdXRlIHZhbHVlIGluIHRoZSBkZW5vbWF0b3IncyByYW5nZS4gV2UK KyAgICAgZG9uJ3QgY2FyZSBhYm91dCBkaXZpZGUgYnkgemVyby4KKyAgICAg Ki8KKworICAgIGlyRGVuLmltaW4gPSBpckRlbi5pbWluICsgU2lnbkV4dGVu ZGVkTnVtYmVyKDEpOworICAgIGlyRGVuLmltYXggPSAtaXJEZW4uaW1pbjsK KworICAgIGlmICghaXJOdW0uaW1pbi5uZWdhdGl2ZSkKKyAgICB7CisgICAg ICAgIGlyTnVtLmltaW4udmFsdWUgPSAwOworICAgIH0KKyAgICBlbHNlIGlm IChpck51bS5pbWluIDwgaXJEZW4uaW1pbikKKyAgICB7CisgICAgICAgIGly TnVtLmltaW4gPSBpckRlbi5pbWluOworICAgIH0KKworICAgIGlmIChpck51 bS5pbWF4Lm5lZ2F0aXZlKQorICAgIHsKKyAgICAgICAgaXJOdW0uaW1heC5u ZWdhdGl2ZSA9IGZhbHNlOworICAgICAgICBpck51bS5pbWF4LnZhbHVlID0g MDsKKyAgICB9CisgICAgZWxzZSBpZiAoaXJOdW0uaW1heCA+IGlyRGVuLmlt YXgpCisgICAgeworICAgICAgICBpck51bS5pbWF4ID0gaXJEZW4uaW1heDsK KyAgICB9CisKKyAgICByZXR1cm4gaXJOdW07Cit9CisKK0ludFJhbmdlIElu dFJhbmdlOjpvcGVyYXRvcjw8KGNvbnN0IEludFJhbmdlJiByaHMpIGNvbnN0 Cit7CisgICAgSW50UmFuZ2UgciA9IEludFJhbmdlKHJocyk7CisgICAgaWYg KHIuaW1pbi5uZWdhdGl2ZSkKKyAgICB7CisgICAgICAgIHIgPSBJbnRSYW5n ZShTaWduRXh0ZW5kZWROdW1iZXIoMCksIFNpZ25FeHRlbmRlZE51bWJlcig2 NCkpOworICAgIH0KKworICAgIFNpZ25FeHRlbmRlZE51bWJlciBsb3dlciA9 IGltaW4gPDwgKGltaW4ubmVnYXRpdmUgPyByLmltYXggOiByLmltaW4pOwor ICAgIFNpZ25FeHRlbmRlZE51bWJlciB1cHBlciA9IGltYXggPDwgKGltYXgu bmVnYXRpdmUgPyByLmltaW4gOiByLmltYXgpOworCisgICAgcmV0dXJuIElu dFJhbmdlKGxvd2VyLCB1cHBlcik7Cit9CisKK0ludFJhbmdlIEludFJhbmdl OjpvcGVyYXRvcj4+KGNvbnN0IEludFJhbmdlJiByaHMpIGNvbnN0Cit7Cisg ICAgSW50UmFuZ2UgciA9IEludFJhbmdlKHJocyk7CisgICAgaWYgKHIuaW1p bi5uZWdhdGl2ZSkKKyAgICB7CisgICAgICAgIHIgPSBJbnRSYW5nZShTaWdu RXh0ZW5kZWROdW1iZXIoMCksIFNpZ25FeHRlbmRlZE51bWJlcig2NCkpOwor ICAgIH0KKworICAgIFNpZ25FeHRlbmRlZE51bWJlciBsb3dlciA9IGltaW4g Pj4gKGltaW4ubmVnYXRpdmUgPyByLmltaW4gOiByLmltYXgpOworICAgIFNp Z25FeHRlbmRlZE51bWJlciB1cHBlciA9IGltYXggPj4gKGltYXgubmVnYXRp dmUgPyByLmltYXggOiByLmltaW4pOworCisgICAgcmV0dXJuIEludFJhbmdl KGxvd2VyLCB1cHBlcik7Cit9CisKK1NpZ25FeHRlbmRlZE51bWJlciBJbnRS YW5nZTo6bWF4T3IoY29uc3QgSW50UmFuZ2UmIGxocywgY29uc3QgSW50UmFu Z2UmIHJocykKK3sKKyAgICB1aW50ZWdlcl90IHggPSAwOworICAgIGJvb2wg c2lnbiA9IGZhbHNlOworICAgIHVpbnRlZ2VyX3QgeG9ydmFsdWUgPSBsaHMu aW1heC52YWx1ZSBeIHJocy5pbWF4LnZhbHVlOworICAgIHVpbnRlZ2VyX3Qg YW5kdmFsdWUgPSBsaHMuaW1heC52YWx1ZSAmIHJocy5pbWF4LnZhbHVlOwor ICAgIEludFJhbmdlIGxoc2MgPSBJbnRSYW5nZShsaHMpOworICAgIEludFJh bmdlIHJoc2MgPSBJbnRSYW5nZShyaHMpOworCisgICAgLy8gU2lnbiBiaXQg bm90IHBhcnQgb2YgdGhlIC52YWx1ZSBzbyB3ZSBuZWVkIGFuIGV4dHJhIGl0 ZXJhdGlvbgorICAgIGlmIChsaHNjLmltYXgubmVnYXRpdmUgXiByaHNjLmlt YXgubmVnYXRpdmUpCisgICAgeworICAgICAgICBzaWduID0gdHJ1ZTsKKyAg ICAgICAgaWYgKGxoc2MuaW1heC5uZWdhdGl2ZSkKKyAgICAgICAgeworICAg ICAgICAgICAgaWYgKCFsaHNjLmltaW4ubmVnYXRpdmUpCisgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgbGhzYy5pbWluLnZhbHVlID0gMDsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghcmhzYy5pbWluLm5lZ2F0 aXZlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJoc2MuaW1p bi52YWx1ZSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9 CisgICAgZWxzZSBpZiAobGhzYy5pbWluLm5lZ2F0aXZlICYgcmhzYy5pbWlu Lm5lZ2F0aXZlKQorICAgIHsKKyAgICAgICAgc2lnbiA9IHRydWU7CisgICAg fQorICAgIGVsc2UgaWYgKGxoc2MuaW1heC5uZWdhdGl2ZSAmIHJoc2MuaW1h eC5uZWdhdGl2ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTaWduRXh0ZW5k ZWROdW1iZXIoLTEsIGZhbHNlKTsKKyAgICB9CisKKyAgICBmb3IgKHVpbnRl Z2VyX3QgZCA9IDFVTEwgPDwgKDggKiBzaXplb2YodWludGVnZXJfdCkgLSAx KTsgZDsgZCA+Pj0gMSkKKyAgICB7CisgICAgICAgIGlmICh4b3J2YWx1ZSAm IGQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHggfD0gZDsKKyAgICAgICAg ICAgIGlmIChsaHNjLmltYXgudmFsdWUgJiBkKQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgIGlmICh+bGhzYy5pbWluLnZhbHVlICYgZCkKKyAg ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGxoc2MuaW1p bi52YWx1ZSA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgIGlmICh+cmhzYy5pbWluLnZhbHVlICYgZCkKKyAgICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJoc2MuaW1pbi52YWx1ZSA9 IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgICAgIGVsc2UgaWYgKGxoc2MuaW1pbi52YWx1ZSAmIHJoc2Mu aW1pbi52YWx1ZSAmIGQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHggfD0g ZDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChhbmR2YWx1ZSAmIGQp CisgICAgICAgIHsKKyAgICAgICAgICAgIHggfD0gKGQgPDwgMSkgLSAxOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy ZXR1cm4gU2lnbkV4dGVuZGVkTnVtYmVyKHgsIHNpZ24pOworfQorCitTaWdu RXh0ZW5kZWROdW1iZXIgSW50UmFuZ2U6Om1pbk9yKGNvbnN0IEludFJhbmdl JiBsaHMsIGNvbnN0IEludFJhbmdlJiByaHMpCit7CisgICAgcmV0dXJuIH5t YXhBbmQofmxocywgfnJocyk7Cit9CisKK1NpZ25FeHRlbmRlZE51bWJlciBJ bnRSYW5nZTo6bWF4QW5kKGNvbnN0IEludFJhbmdlJiBsaHMsIGNvbnN0IElu dFJhbmdlJiByaHMpCit7CisgICAgdWludGVnZXJfdCB4ID0gMDsKKyAgICBi b29sIHNpZ24gPSBmYWxzZTsKKyAgICBJbnRSYW5nZSBsaHNjID0gSW50UmFu Z2UobGhzKTsKKyAgICBJbnRSYW5nZSByaHNjID0gSW50UmFuZ2UocmhzKTsK KworICAgIGlmIChsaHNjLmltYXgubmVnYXRpdmUgJiByaHNjLmltYXgubmVn YXRpdmUpCisgICAgeworICAgICAgICBzaWduID0gdHJ1ZTsKKyAgICB9CisK KyAgICBmb3IgKHVpbnRlZ2VyX3QgZCA9IDFVTEwgPDwgKDggKiBzaXplb2Yo dWludGVnZXJfdCkgLSAxKTsgZDsgZCA+Pj0gMSkKKyAgICB7CisgICAgICAg IGlmIChsaHNjLmltYXgudmFsdWUgJiByaHNjLmltYXgudmFsdWUgJiBkKQor ICAgICAgICB7CisgICAgICAgICAgICB4IHw9IGQ7CisgICAgICAgICAgICBp ZiAofmxoc2MuaW1pbi52YWx1ZSAmIGQpCisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgbGhzYy5pbWluLnZhbHVlID0gMDsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGlmICh+cmhzYy5pbWluLnZhbHVlICYgZCkKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByaHNjLmltaW4udmFsdWUg PSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2Ug aWYgKH5saHNjLmltaW4udmFsdWUgJiBkICYmIGxoc2MuaW1heC52YWx1ZSAm IGQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxoc2MuaW1heC52YWx1ZSB8 PSBkIC0gMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh+cmhzYy5p bWluLnZhbHVlICYgZCAmJiByaHNjLmltYXgudmFsdWUgJiBkKQorICAgICAg ICB7CisgICAgICAgICAgICByaHNjLmltYXgudmFsdWUgfD0gZCAtIDE7Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gU2lnbkV4dGVuZGVkTnVt YmVyKHgsIHNpZ24pOworfQorCitTaWduRXh0ZW5kZWROdW1iZXIgSW50UmFu Z2U6Om1pbkFuZChjb25zdCBJbnRSYW5nZSYgbGhzLCBjb25zdCBJbnRSYW5n ZSYgcmhzKQoreworICAgIHJldHVybiB+bWF4T3IofmxocywgfnJocyk7Cit9 CisKK3ZvaWQgSW50UmFuZ2U6OnN3YXAoSW50UmFuZ2UmIGEsIEludFJhbmdl JiBiKQoreworICAgIEludFJhbmdlIGF1eCA9IGE7CisgICAgYSA9IGI7Cisg ICAgYiA9IGF1eDsKK30KIAogY29uc3QgSW50UmFuZ2UmIEludFJhbmdlOjpk dW1wKGNvbnN0IGNoYXIqIGZ1bmNOYW1lLCBFeHByZXNzaW9uICplKSBjb25z dAogewpkaWZmIC0tZ2l0IGEvZ2NjL2QvZG1kL2ludHJhbmdlLmggYi9nY2Mv ZC9kbWQvaW50cmFuZ2UuaAppbmRleCA2OTExMTU4NmU4ZC4uYWVlNzczYTE0 YTAgMTAwNjQ0Ci0tLSBhL2djYy9kL2RtZC9pbnRyYW5nZS5oCisrKyBiL2dj Yy9kL2RtZC9pbnRyYW5nZS5oCkBAIC02MCwxMyArNjAsMjMgQEAgc3RydWN0 IFNpZ25FeHRlbmRlZE51bWJlcgogICAgIGJvb2wgb3BlcmF0b3I8PShjb25z dCBTaWduRXh0ZW5kZWROdW1iZXImIGEpIGNvbnN0IHsgcmV0dXJuICEoYSA8 ICp0aGlzKTsgfQogICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBTaWduRXh0 ZW5kZWROdW1iZXImIGEpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPCBhKTsg fQogCisgICAgLy8vIEluY3JlYXNlIHRoZSBzaWduLWV4dGVuZGVkIG51bWJl ciBieSAxIChzYXR1cmF0ZWQpLgorICAgIFNpZ25FeHRlbmRlZE51bWJlciYg b3BlcmF0b3IrKygpOworICAgIC8vLyBDb21wdXRlIHRoZSBzYXR1cmF0ZWQg Y29tcGxlbWVudCBvZiBhIHNpZ24tZXh0ZW5kZWQgbnVtYmVyLgorICAgIFNp Z25FeHRlbmRlZE51bWJlciBvcGVyYXRvcn4oKSBjb25zdDsKICAgICAvLy8g Q29tcHV0ZSB0aGUgc2F0dXJhdGVkIG5lZ2F0aW9uIG9mIGEgc2lnbi1leHRl bmRlZCBudW1iZXIuCiAgICAgU2lnbkV4dGVuZGVkTnVtYmVyIG9wZXJhdG9y LSgpIGNvbnN0OwogCisgICAgLy8vIENvbXB1dGUgdGhlIHNhdHVyYXRlZCBi aW5hcnkgYW5kIG9mIHR3byBzaWduLWV4dGVuZGVkIG51bWJlci4KKyAgICBT aWduRXh0ZW5kZWROdW1iZXIgb3BlcmF0b3ImKGNvbnN0IFNpZ25FeHRlbmRl ZE51bWJlciYpIGNvbnN0OworICAgIC8vLyBDb21wdXRlIHRoZSBzYXR1cmF0 ZWQgYmluYXJ5IG9yIG9mIHR3byBzaWduLWV4dGVuZGVkIG51bWJlci4KKyAg ICBTaWduRXh0ZW5kZWROdW1iZXIgb3BlcmF0b3J8KGNvbnN0IFNpZ25FeHRl bmRlZE51bWJlciYpIGNvbnN0OworICAgIC8vLyBDb21wdXRlIHRoZSBzYXR1 cmF0ZWQgYmluYXJ5IHhvciBvZiB0d28gc2lnbi1leHRlbmRlZCBudW1iZXIu CisgICAgU2lnbkV4dGVuZGVkTnVtYmVyIG9wZXJhdG9yXihjb25zdCBTaWdu RXh0ZW5kZWROdW1iZXImKSBjb25zdDsKICAgICAvLy8gQ29tcHV0ZSB0aGUg c2F0dXJhdGVkIHN1bSBvZiB0d28gc2lnbi1leHRlbmRlZCBudW1iZXIuCiAg ICAgU2lnbkV4dGVuZGVkTnVtYmVyIG9wZXJhdG9yKyhjb25zdCBTaWduRXh0 ZW5kZWROdW1iZXImKSBjb25zdDsKICAgICAvLy8gQ29tcHV0ZSB0aGUgc2F0 dXJhdGVkIGRpZmZlcmVuY2Ugb2YgdHdvIHNpZ24tZXh0ZW5kZWQgbnVtYmVy LgotICAgIFNpZ25FeHRlbmRlZE51bWJlciBvcGVyYXRvci0oY29uc3QgU2ln bkV4dGVuZGVkTnVtYmVyJiBhKSBjb25zdDsKKyAgICBTaWduRXh0ZW5kZWRO dW1iZXIgb3BlcmF0b3ItKGNvbnN0IFNpZ25FeHRlbmRlZE51bWJlciYpIGNv bnN0OwogICAgIC8vLyBDb21wdXRlIHRoZSBzYXR1cmF0ZWQgcHJvZHVjdCBv ZiB0d28gc2lnbi1leHRlbmRlZCBudW1iZXIuCiAgICAgU2lnbkV4dGVuZGVk TnVtYmVyIG9wZXJhdG9yKihjb25zdCBTaWduRXh0ZW5kZWROdW1iZXImKSBj b25zdDsKICAgICAvLy8gQ29tcHV0ZSB0aGUgc2F0dXJhdGVkIHF1b3RpZW50 IG9mIHR3byBzaWduLWV4dGVuZGVkIG51bWJlci4KQEAgLTc0LDkgKzg0LDYg QEAgc3RydWN0IFNpZ25FeHRlbmRlZE51bWJlcgogICAgIC8vLyBDb21wdXRl IHRoZSBzYXR1cmF0ZWQgbW9kdWx1cyBvZiB0d28gc2lnbi1leHRlbmRlZCBu dW1iZXIuCiAgICAgU2lnbkV4dGVuZGVkTnVtYmVyIG9wZXJhdG9yJShjb25z dCBTaWduRXh0ZW5kZWROdW1iZXImKSBjb25zdDsKIAotICAgIC8vLyBJbmNy ZWFzZSB0aGUgc2lnbi1leHRlbmRlZCBudW1iZXIgYnkgMSAoc2F0dXJhdGVk KS4KLSAgICBTaWduRXh0ZW5kZWROdW1iZXImIG9wZXJhdG9yKysoKTsKLQog ICAgIC8vLyBDb21wdXRlIHRoZSBzYXR1cmF0ZWQgc2hpZnRzIG9mIHR3byBz aWduLWV4dGVuZGVkIG51bWJlci4KICAgICBTaWduRXh0ZW5kZWROdW1iZXIg b3BlcmF0b3I8PChjb25zdCBTaWduRXh0ZW5kZWROdW1iZXImKSBjb25zdDsK ICAgICBTaWduRXh0ZW5kZWROdW1iZXIgb3BlcmF0b3I+Pihjb25zdCBTaWdu RXh0ZW5kZWROdW1iZXImKSBjb25zdDsKQEAgLTE0Niw0ICsxNTMsMjUgQEAg c3RydWN0IEludFJhbmdlCiAgICAgLy8vIFNwbGl0IHRoZSByYW5nZSBpbnRv IHR3byBub25uZWdhdGl2ZS0gYW5kIG5lZ2F0aXZlLW9ubHkgc3ViaW50ZXJ2 YWxzLgogICAgIHZvaWQgc3BsaXRCeVNpZ24oSW50UmFuZ2UmIG5lZ1Jhbmdl LCBib29sJiBoYXNOZWdSYW5nZSwKICAgICAgICAgICAgICAgICAgICAgIElu dFJhbmdlJiBub25OZWdSYW5nZSwgYm9vbCYgaGFzTm9uTmVnUmFuZ2UpIGNv bnN0OworCisgICAgLy8vIENyZWRpdHMgdG8gVGltb24gR2VociBtYXhPciwg bWluT3IsIG1heEFuZCwgbWluQW5kCisgICAgLy8vIGh0dHBzOi8vZ2l0aHVi LmNvbS90Z2Voci9kLWNvbXBpbGVyL2Jsb2IvbWFzdGVyL3ZyYW5nZS5kCisg ICAgc3RhdGljIFNpZ25FeHRlbmRlZE51bWJlciBtYXhPcihjb25zdCBJbnRS YW5nZSYsIGNvbnN0IEludFJhbmdlJik7CisgICAgc3RhdGljIFNpZ25FeHRl bmRlZE51bWJlciBtaW5Pcihjb25zdCBJbnRSYW5nZSYsIGNvbnN0IEludFJh bmdlJik7CisgICAgc3RhdGljIFNpZ25FeHRlbmRlZE51bWJlciBtYXhBbmQo Y29uc3QgSW50UmFuZ2UmLCBjb25zdCBJbnRSYW5nZSYpOworICAgIHN0YXRp YyBTaWduRXh0ZW5kZWROdW1iZXIgbWluQW5kKGNvbnN0IEludFJhbmdlJiwg Y29uc3QgSW50UmFuZ2UmKTsKKyAgICBzdGF0aWMgdm9pZCBzd2FwKEludFJh bmdlJiwgSW50UmFuZ2UmKTsKKworICAgIEludFJhbmdlIG9wZXJhdG9yfigp IGNvbnN0OworICAgIEludFJhbmdlIG9wZXJhdG9yLSgpIGNvbnN0OworICAg IEludFJhbmdlIG9wZXJhdG9yJihjb25zdCBJbnRSYW5nZSYpIGNvbnN0Owor ICAgIEludFJhbmdlIG9wZXJhdG9yfChjb25zdCBJbnRSYW5nZSYpIGNvbnN0 OworICAgIEludFJhbmdlIG9wZXJhdG9yXihjb25zdCBJbnRSYW5nZSYpIGNv bnN0OworICAgIEludFJhbmdlIG9wZXJhdG9yKyhjb25zdCBJbnRSYW5nZSYp IGNvbnN0OworICAgIEludFJhbmdlIG9wZXJhdG9yLShjb25zdCBJbnRSYW5n ZSYpIGNvbnN0OworICAgIEludFJhbmdlIG9wZXJhdG9yKihjb25zdCBJbnRS YW5nZSYpIGNvbnN0OworICAgIEludFJhbmdlIG9wZXJhdG9yLyhjb25zdCBJ bnRSYW5nZSYpIGNvbnN0OworICAgIEludFJhbmdlIG9wZXJhdG9yJShjb25z dCBJbnRSYW5nZSYpIGNvbnN0OworICAgIEludFJhbmdlIG9wZXJhdG9yPDwo Y29uc3QgSW50UmFuZ2UmKSBjb25zdDsKKyAgICBJbnRSYW5nZSBvcGVyYXRv cj4+KGNvbnN0IEludFJhbmdlJikgY29uc3Q7CiB9OwpkaWZmIC0tZ2l0IGEv Z2NjL2QvZG1kL210eXBlLmMgYi9nY2MvZC9kbWQvbXR5cGUuYwppbmRleCBk ZWRhZjdkYzgzZS4uYjM1YjdhZjMyMDEgMTAwNjQ0Ci0tLSBhL2djYy9kL2Rt ZC9tdHlwZS5jCisrKyBiL2djYy9kL2RtZC9tdHlwZS5jCkBAIC0zODMyLDYg KzM4MzIsNyBAQCBNQVRDSCBUeXBlVmVjdG9yOjppbXBsaWNpdENvbnZUbyhU eXBlICp0bykKICAgICAvL3ByaW50ZigiVHlwZVZlY3Rvcjo6aW1wbGljaXRD b252VG8oJXMpIGZyb20gJXNcbiIsIHRvLT50b0NoYXJzKCksIHRvQ2hhcnMo KSk7CiAgICAgaWYgKHRoaXMgPT0gdG8pCiAgICAgICAgIHJldHVybiBNQVRD SGV4YWN0OworI2lmZGVmIElOX0dDQwogICAgIGlmICh0by0+dHkgPT0gVHZl Y3RvcikKICAgICB7CiAgICAgICAgIFR5cGVWZWN0b3IgKnR2ID0gKFR5cGVW ZWN0b3IgKil0bzsKQEAgLTM4NDgsNiArMzg0OSwxMCBAQCBNQVRDSCBUeXBl VmVjdG9yOjppbXBsaWNpdENvbnZUbyhUeXBlICp0bykKICAgICAgICAgLy8g T3RoZXJ3aXNlIGltcGxpY2l0bHkgY29udmVydGlibGUgb25seSBpZiBiYXNl dHlwZXMgYXJlLgogICAgICAgICByZXR1cm4gYmFzZXR5cGUtPmltcGxpY2l0 Q29udlRvKHR2LT5iYXNldHlwZSk7CiAgICAgfQorI2Vsc2UKKyAgICBpZiAo dHkgPT0gdG8tPnR5KQorICAgICAgICByZXR1cm4gTUFUQ0hjb252ZXJ0Owor I2VuZGlmCiAgICAgcmV0dXJuIE1BVENIbm9tYXRjaDsKIH0KIApkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZGMudGVzdC9jb21waWxhYmxlL3Rlc3RW UlAuZCBiL2djYy90ZXN0c3VpdGUvZ2RjLnRlc3QvY29tcGlsYWJsZS90ZXN0 VlJQLmQKaW5kZXggOTZhNDk5ZmE0YWMuLjk1NGI1MDE5YjgzIDEwMDY0NAot LS0gYS9nY2MvdGVzdHN1aXRlL2dkYy50ZXN0L2NvbXBpbGFibGUvdGVzdFZS UC5kCisrKyBiL2djYy90ZXN0c3VpdGUvZ2RjLnRlc3QvY29tcGlsYWJsZS90 ZXN0VlJQLmQKQEAgLTEsNTUgKzEsODAgQEAKIC8vIFBFUk1VVEVfQVJHUzog LU8gLWlubGluZQogCiAvLyBUZXN0IHZhbHVlLXJhbmdlIHByb3BhZ2F0aW9u LgotLy8gU2VlIEJ1ZyAzMTQ3LCBCdWcgNjAwMCwgQnVnIDUyMjUuCisvLyBo dHRwczovL2lzc3Vlcy5kbGFuZy5vcmcvc2hvd19idWcuY2dpP2lkPTMxNDcK Ky8vIGh0dHBzOi8vaXNzdWVzLmRsYW5nLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9 NjAwMAorLy8gaHR0cHM6Ly9pc3N1ZXMuZGxhbmcub3JnL3Nob3dfYnVnLmNn aT9pZD01MjI1CiAKLXZvaWQgYWRkKCkgewordm9pZCBhZGQoKQorewogICAg IGJ5dGUgeCwgeTsKICAgICBzaG9ydCBhID0geCArIHk7CiB9CiAKLXZvaWQg bGVmdFNoaWZ0KCkgewordm9pZCBsZWZ0U2hpZnQoKQorewogICAgIGJ5dGUg eCwgeTsKICAgICBzaG9ydCB6ID0geCA8PCAxOwogfQogCi12b2lkIGxlZnRT aGlmdEZhaWwoKSB7Ci0gICAgdWJ5dGUgeCwgeTsKLSAgICB1c2hvcnQgejsK LSAgICBzdGF0aWMgYXNzZXJ0KCFfX3RyYWl0cyhjb21waWxlcywgeiA9IHgg PDwgeSkpOwotICAgIC8vIDEgPDwgMzEgc3VyZWx5IG92ZXJmbG93cyB0aGUg cmFuZ2Ugb2YgJ3VzaG9ydCcuCit2b2lkIGxlZnRTaGlmdEZhaWwoKQorewor ICAgIHsKKyAgICAgICAgdWJ5dGUgeCwgeTsKKyAgICAgICAgdXNob3J0IHo7 CisgICAgICAgIHN0YXRpYyBhc3NlcnQoIV9fdHJhaXRzKGNvbXBpbGVzLCB6 ID0geCA8PCB5KSk7CisgICAgICAgIC8vIDEgPDwgMzEgc3VyZWx5IG92ZXJm bG93cyB0aGUgcmFuZ2Ugb2YgJ3VzaG9ydCcuCisgICAgfQorICAgIHsKKyAg ICAgICAgdWxvbmcgYSwgYjsKKyAgICAgICAgaW50IHJlczsKKyAgICAgICAg c3RhdGljIGFzc2VydCghX190cmFpdHMoY29tcGlsZXMsIHJlcyA9IGEgPDwg KGIgJSA2NVUpKSk7CisgICAgfQogfQogCi12b2lkIHJpZ2h0U2hpZnRGYWls KCkgewotICAgIHNob3J0IHg7Ci0gICAgYnl0ZSB5LCB6OwotICAgIHN0YXRp YyBhc3NlcnQoIV9fdHJhaXRzKGNvbXBpbGVzLCB6ID0geCA+PiB5KSk7Ci0g ICAgLy8gW3RoaXMgcGFzc2VzIGluIDIuMDUzLl0KK3ZvaWQgcmlnaHRTaGlm dEZhaWwoKQoreworICAgIHsKKyAgICAgICAgc2hvcnQgeDsKKyAgICAgICAg Ynl0ZSB5LCB6OworICAgICAgICBzdGF0aWMgYXNzZXJ0KCFfX3RyYWl0cyhj b21waWxlcywgeiA9IHggPj4geSkpOworICAgICAgICAvLyBbdGhpcyBwYXNz ZXMgaW4gMi4wNTMuXQorICAgIH0KKyAgICB7CisgICAgICAgIHVsb25nIGEs IGI7CisgICAgICAgIGludCByZXM7CisgICAgICAgIHN0YXRpYyBhc3NlcnQo IV9fdHJhaXRzKGNvbXBpbGVzLCByZXMgPSBhID4+IChiICUgNjVVKSkpOwor ICAgIH0KIH0KIAotdm9pZCByaWdodFNoaWZ0KCkgewordm9pZCByaWdodFNo aWZ0KCkKK3sKICAgICB1c2hvcnQgeDsKICAgICB1Ynl0ZSB5ID0geCA+PiAx NjsKIH0KIAotdm9pZCB1bnNpZ25lZFJpZ2h0U2hpZnRGYWlsKCkgewordm9p ZCB1bnNpZ25lZFJpZ2h0U2hpZnRGYWlsKCkKK3sKICAgICBpbnQgeDsKICAg ICB1Ynl0ZSB5OwogICAgIHN0YXRpYyBhc3NlcnQoIV9fdHJhaXRzKGNvbXBp bGVzLCB5ID0geCA+Pj4gMikpOwogICAgIC8vIFt0aGlzIHBhc3NlcyBpbiAy LjA1My5dCiB9CiAKLXZvaWQgc3VidHJhY3QoKSB7Cit2b2lkIHN1YnRyYWN0 KCkKK3sKICAgICB1Ynl0ZSB4LCB5OwogICAgIHNob3J0IHogPSB4IC0geTsK IH0KIAotdm9pZCBtdWx0aXBseSgpIHsKK3ZvaWQgbXVsdGlwbHkoKQorewog ICAgIGJ5dGUgeCwgeTsKICAgICBzaG9ydCB6ID0geCAqIHk7CiB9CiAKLXZv aWQgc3ViTXVsRmFpbCgpIHsKK3ZvaWQgc3ViTXVsRmFpbCgpCit7CiAgICAg dWJ5dGUgeCwgeTsKICAgICB1Ynl0ZSB6OwogICAgIHN0YXRpYyBhc3NlcnQo IV9fdHJhaXRzKGNvbXBpbGVzLCB6ID0geCAtIHkpKTsKQEAgLTU3LDY1ICs4 Miw4MiBAQCB2b2lkIHN1Yk11bEZhaWwoKSB7CiAgICAgLy8gW3RoZXNlIHBh c3MgaW4gMi4wNTMuXQogfQogCi12b2lkIG11bHRpcGx5TmVnMSgpIHsKK3Zv aWQgbXVsdGlwbHlOZWcxKCkKK3sKICAgICBieXRlIGI7CiAgICAgYiA9IC0x ICsgKGIgKiAtMSk7CiAgICAgc3RhdGljIGFzc2VydCghX190cmFpdHMoY29t cGlsZXMsIGIgPSAtMSArIGIgKiB1bG9uZy5tYXgpKTsKIH0KIAotdm9pZCBk aXZpZGUoKSB7Cit2b2lkIGRpdmlkZSgpCit7CiAgICAgc2hvcnQgdzsKICAg ICBieXRlIHkgPSB3IC8gMzAwOwogfQogCi12b2lkIGRpdmlkZUZhaWwoKSB7 Cit2b2lkIGRpdmlkZUZhaWwoKQorewogICAgIHNob3J0IHc7CiAgICAgYnl0 ZSB5OwogICAgIHN0YXRpYyBhc3NlcnQoIV9fdHJhaXRzKGNvbXBpbGVzLCB5 ID0gdyAvIC0xKSk7CiB9CiAKLXZvaWQgcGx1czFGYWlsKCkgewordm9pZCBw bHVzMUZhaWwoKQorewogICAgIGJ5dGUgdSwgdjsKICAgICBzdGF0aWMgYXNz ZXJ0KCFfX3RyYWl0cyhjb21waWxlcywgdiA9IHUgKyAxKSk7CiAgICAgLy8g W3RoZXNlIHBhc3MgaW4gMi4wNTMuXQogfQogCi12b2lkIG1vZHVsdXMoKSB7 Cit2b2lkIG1vZHVsdXMoKQorewogICAgIGludCB4OwogICAgIGJ5dGUgdSA9 IHggJSAxMjg7CiB9CiAKLXZvaWQgbW9kdWx1c19idWc2MDAwYSgpIHsKK3Zv aWQgbW9kdWx1c19idWc2MDAwYSgpCit7CiAgICAgdWxvbmcgdDsKICAgICB1 aW50IHUgPSB0ICUgMTY7CiB9CiAKLXZvaWQgbW9kdWx1c19idWc2MDAwYigp IHsKK3ZvaWQgbW9kdWx1c19idWc2MDAwYigpCit7CiAgICAgbG9uZyBuID0g MTA1MjA7CiAgICAgdWJ5dGUgYjsKICAgICBzdGF0aWMgYXNzZXJ0KCFfX3Ry YWl0cyhjb21waWxlcywgYiA9IG4gJSAxMCkpOwogfQogCi12b2lkIG1vZHVs dXMyKCkgewordm9pZCBtb2R1bHVzMigpCit7CiAgICAgc2hvcnQgczsKICAg ICBieXRlIGIgPSBieXRlLm1heDsKICAgICBieXRlIGMgPSBzICUgYjsKIH0K IAotdm9pZCBtb2R1bHVzMygpIHsKK3ZvaWQgbW9kdWx1czMoKQorewogICAg IGludCBpOwogICAgIHNob3J0IHMgPSBzaG9ydC5tYXg7CiAgICAgc2hvcnQg dCA9IGkgJSBzOwogfQogCi12b2lkIG1vZHVsdXM0KCkgewordm9pZCBtb2R1 bHVzNCgpCit7CiAgICAgdWludCBpOwogICAgIHVzaG9ydCBzOwogICAgIHNo b3J0IHQ7CiAgICAgc3RhdGljIGFzc2VydCghX190cmFpdHMoY29tcGlsZXMs IHQgPSBpICUgcykpOwogfQogCi12b2lkIG1vZHVsdXNGYWlsKCkgewordm9p ZCBtb2R1bHVzNSgpCit7CisgICAgc2hvcnQgYTsKKyAgICBieXRlIGZvbyA9 IChhIC0gc2hvcnQubWF4IC0gMSkgJSAxMjc7Cit9CisKK3ZvaWQgbW9kdWx1 c0ZhaWwoKQorewogICAgIGludCBpOwogICAgIHNob3J0IHM7CiAgICAgYnl0 ZSBiOwpAQCAtMTI0LDcgKzE2Niw4IEBAIHZvaWQgbW9kdWx1c0ZhaWwoKSB7 CiAgICAgLy8gW3RoZXNlIHBhc3MgaW4gMi4wNTMuXQogfQogCi12b2lkIGJp dHdpc2UoKSB7Cit2b2lkIGJpdHdpc2UoKQorewogICAgIHVieXRlIGEsIGIs IGM7CiAgICAgdWludCBkOwogICAgIGMgPSBhICYgYjsKQEAgLTEzNCw1NiAr MTc3LDE1OSBAQCB2b2lkIGJpdHdpc2UoKSB7CiAgICAgLy8gW3RoZXNlIHBh c3MgaW4gMi4wNTMuXQogfQogCi12b2lkIGJpdEFuZCgpIHsKK3ZvaWQgYml0 QW5kKCkKK3sKICAgICBieXRlIGM7CiAgICAgaW50IGQ7CiAgICAgYyA9ICgw eDNmZl9mZmZmVSA8PCAoMCZjKSkgJiAoMHg0MDAwXzAwMDBVIDw8ICgwJmMp KTsKICAgICAvLyB0aGUgcmVzdWx0IG9mIHRoZSBhYm92ZSBpcyBhbHdheXMg MCA6KS4KIH0KIAotdm9pZCBiaXRPckZhaWwoKSB7Ci0gICAgdWJ5dGUgYzsK LSAgICBzdGF0aWMgYXNzZXJ0KCFfX3RyYWl0cyhjb21waWxlcywgYyA9IGMg fCAweDEwMCkpOwotICAgIC8vIFt0aGlzIHBhc3NlcyBpbiAyLjA1My5dCit2 b2lkIGJpdEFuZFRlc3QoKQoreworICAgIHsKKyAgICAgICAgdXNob3J0IGEs IGI7CisgICAgICAgIGJ5dGUgcmVzID0gKChhICUgNykgLSA2KSAmICgoYiAl IDcpIC0gNik7CisgICAgfQorICAgIHsKKyAgICAgICAgLy8gcmhzWy0xMjgu LjEyN10gb3V0c2lkZSByYW5nZSBvZiBsaHNbMC4uMjU1XQorICAgICAgICAv LyAgIC0+IGNhbGxzIGJ5dGUuaW1wbGljaXRDb252VG8odWJ5dGUpID0+IE1B VENILmNvbnZlcnQKKyAgICAgICAgYnl0ZSBhLCBiOworICAgICAgICB1Ynl0 ZSByZXM7CisKKyAgICAgICAgcmVzID0gY2FzdChieXRlKShhICsgNSkgJiBi OworICAgICAgICByZXMgPSBjYXN0KGJ5dGUpKGEgLSA1KSAmIGI7CisgICAg ICAgIHJlcyA9IGNhc3QoYnl0ZSkoYSAvIDUpICYgYjsKKyAgICAgICAgcmVz ID0gY2FzdChieXRlKShhICogNSkgJiBiOworICAgICAgICByZXMgPSBjYXN0 KGJ5dGUpKGEgJSA1KSAmIGI7CisgICAgfQorfQorCit2b2lkIGJpdE9yRmFp bCgpCit7CisgICAgeworICAgICAgICB1Ynl0ZSBjOworICAgICAgICBzdGF0 aWMgYXNzZXJ0KCFfX3RyYWl0cyhjb21waWxlcywgYyA9IGMgfCAweDEwMCkp OworICAgICAgICAvLyBbdGhpcyBwYXNzZXMgaW4gMi4wNTMuXQorICAgIH0K KyAgICB7CisgICAgICAgIGJ5dGUgYSwgYjsKKyAgICAgICAgdWJ5dGUgcmVz OworCisgICAgICAgIHN0YXRpYyBhc3NlcnQoIV9fdHJhaXRzKGNvbXBpbGVz LCByZXMgPSAoYSArIDUpIHwgYikpOyAvLyBbLTEyOC4uMjU1XQorICAgICAg ICBzdGF0aWMgYXNzZXJ0KCFfX3RyYWl0cyhjb21waWxlcywgcmVzID0gKGEg LSA1KSB8IGIpKTsgLy8gWy0xMzMuLjEyN10KKyAgICAgICAgc3RhdGljIGFz c2VydCghX190cmFpdHMoY29tcGlsZXMsIHJlcyA9IChhIC8gNSkgfCBiKSk7 IC8vIFstMTI4Li4xMjddCisgICAgICAgIHN0YXRpYyBhc3NlcnQoIV9fdHJh aXRzKGNvbXBpbGVzLCByZXMgPSAoYSAqIDUpIHwgYikpOyAvLyBbLTY0MC4u NjM5XQorICAgICAgICBzdGF0aWMgYXNzZXJ0KCFfX3RyYWl0cyhjb21waWxl cywgcmVzID0gKGEgJSA1KSB8IGIpKTsgLy8gWy0xMjguLjEyN10KKyAgICB9 CiB9CiAKLXZvaWQgYml0QW5kT3IoKSB7Cit2b2lkIGJpdEFuZE9yKCkKK3sK ICAgICB1Ynl0ZSBjOwogICAgIGMgPSAoYyB8IDB4MTAwMCkgJiB+MHgxMDAw OwogfQogCi12b2lkIGJpdEFuZEZhaWwoKSB7Ci0gICAgaW50IGQ7Ci0gICAg c2hvcnQgczsKLSAgICBieXRlIGM7Ci0gICAgc3RhdGljIGFzc2VydCghX190 cmFpdHMoY29tcGlsZXMsIGMgPSBkICYgcykpOwotICAgIHN0YXRpYyBhc3Nl cnQoIV9fdHJhaXRzKGNvbXBpbGVzLCBjID0gZCAmIDI1NikpOwotICAgIC8v IFt0aGVzZSBwYXNzIGluIDIuMDUzLl0KK3ZvaWQgYml0T3JUZXN0KCkKK3sK KyAgICB7CisgICAgICAgIC8vIFRlc3RzIGNvbmRpdGlvbiBmb3IgZGlmZmVy ZW50IHNpZ25zIGJldHdlZW4gbWluICYgbWF4CisgICAgICAgIC8vICgoaW1p bi5uZWdhdGl2ZSBeIGltYXgubmVnYXRpdmUpID09IDEgJiYgKHJocy5pbWlu Lm5lZ2F0aXZlIF4gcmhzLmltYXgubmVnYXRpdmUpID09IDEKKyAgICAgICAg dXNob3J0IGEsIGI7CisgICAgICAgIGJ5dGUgcmVzID0gKChhICUgMTI3KSAt IDEyNikgfCAoKGIgJSA2KSAtIDUpOworICAgIH0KKyAgICB7CisgICAgICAg IC8vIHJoc1stMTI4Li4xMjddIG91dHNpZGUgcmFuZ2Ugb2YgbGhzWzAuLjI1 NV0KKyAgICAgICAgLy8gICAtPiBjYWxscyBieXRlLmltcGxpY2l0Q29udlRv KHVieXRlKSA9PiBNQVRDSC5jb252ZXJ0CisgICAgICAgIGJ5dGUgYSwgYiwg YzsKKyAgICAgICAgdWJ5dGUgcmVzOworCisgICAgICAgIHJlcyA9IGNhc3Qo Ynl0ZSkoYSArIDUpIHwgYjsKKyAgICAgICAgcmVzID0gY2FzdChieXRlKShh IC0gNSkgfCBiOworICAgICAgICByZXMgPSBjYXN0KGJ5dGUpKGEgLyA1KSB8 IGI7CisgICAgICAgIHJlcyA9IGNhc3QoYnl0ZSkoYSAqIDUpIHwgYjsKKyAg ICAgICAgcmVzID0gY2FzdChieXRlKShhICUgNSkgfCBiOworICAgIH0KIH0K IAotdm9pZCBiaXRYb3IoKSB7Ci0gICAgdXNob3J0IHM7Ci0gICAgdWJ5dGUg YzsKLSAgICBjID0gKDB4ZmZmZiA8PCAocyYwKSkgXiAweGZmMDA7Cit2b2lk IGJpdEFuZEZhaWwoKQoreworICAgIHsKKyAgICAgICAgaW50IGQ7CisgICAg ICAgIHNob3J0IHM7CisgICAgICAgIGJ5dGUgYzsKKyAgICAgICAgc3RhdGlj IGFzc2VydCghX190cmFpdHMoY29tcGlsZXMsIGMgPSBkICYgcykpOworICAg ICAgICBzdGF0aWMgYXNzZXJ0KCFfX3RyYWl0cyhjb21waWxlcywgYyA9IGQg JiAyNTYpKTsKKyAgICAgICAgLy8gW3RoZXNlIHBhc3MgaW4gMi4wNTMuXQor ICAgIH0KKyAgICB7CisgICAgICAgIGJ5dGUgYSwgYjsKKyAgICAgICAgdWJ5 dGUgcmVzOworCisgICAgICAgIHN0YXRpYyBhc3NlcnQoIV9fdHJhaXRzKGNv bXBpbGVzLCByZXMgPSAoYSArIDUpICYgYikpOyAvLyBbLTEyOC4uMTMyXQor ICAgICAgICBzdGF0aWMgYXNzZXJ0KCFfX3RyYWl0cyhjb21waWxlcywgcmVz ID0gKGEgLSA1KSAmIGIpKTsgLy8gWy0yNTYuLjEyN10KKyAgICAgICAgc3Rh dGljIGFzc2VydCghX190cmFpdHMoY29tcGlsZXMsIHJlcyA9IChhIC8gNSkg JiBiKSk7IC8vIFstMTI4Li4xMjddCisgICAgICAgIHN0YXRpYyBhc3NlcnQo IV9fdHJhaXRzKGNvbXBpbGVzLCByZXMgPSAoYSAqIDUpICYgYikpOyAvLyBb LTY0MC4uNjM1XQorICAgICAgICBzdGF0aWMgYXNzZXJ0KCFfX3RyYWl0cyhj b21waWxlcywgcmVzID0gKGEgJSA1KSAmIGIpKTsgLy8gWy0xMjguLjEyN10K KyAgICB9Cit9CisKK3ZvaWQgYml0WG9yKCkKK3sKKyAgICB7CisgICAgICAg IHVzaG9ydCBzOworICAgICAgICB1Ynl0ZSBjOworICAgICAgICBjID0gKDB4 ZmZmZiA8PCAocyAmIDApKSBeIDB4ZmYwMDsKKyAgICB9CisgICAgeworICAg ICAgICAvLyByaHNbLTEyOC4uMTI3XSBvdXRzaWRlIHJhbmdlIG9mIGxoc1sw Li4yNTVdCisgICAgICAgIC8vICAgLT4gY2FsbHMgYnl0ZS5pbXBsaWNpdENv bnZUbyh1Ynl0ZSkgPT4gTUFUQ0guY29udmVydAorICAgICAgICBieXRlIGEs IGIsIGM7CisgICAgICAgIHVieXRlIHJlczsKKworICAgICAgICByZXMgPSBj YXN0KGJ5dGUpKGEgKyA1KSBeIGI7CisgICAgICAgIHJlcyA9IGNhc3QoYnl0 ZSkoYSAtIDUpIF4gYjsKKyAgICAgICAgcmVzID0gY2FzdChieXRlKShhIC8g NSkgXiBiOworICAgICAgICByZXMgPSBjYXN0KGJ5dGUpKGEgKiA1KSBeIGI7 CisgICAgICAgIHJlcyA9IGNhc3QoYnl0ZSkoYSAlIDUpIF4gYjsKKyAgICB9 CiB9CiAKLXZvaWQgYml0Q29tcGxlbWVudCgpIHsKK3ZvaWQgYml0WG9yRmFp bCgpCit7CisgICAgeworICAgICAgICBieXRlIGEsIGI7CisgICAgICAgIHVi eXRlIHJlczsKKworICAgICAgICBzdGF0aWMgYXNzZXJ0KCFfX3RyYWl0cyhj b21waWxlcywgcmVzID0gKGEgKyA1KSBeIGIpKTsgLy8gWy0yNTYuLjI1NV0K KyAgICAgICAgc3RhdGljIGFzc2VydCghX190cmFpdHMoY29tcGlsZXMsIHJl cyA9IChhIC0gNSkgXiBiKSk7IC8vIFstMjU2Li4yNTVdCisgICAgICAgIHN0 YXRpYyBhc3NlcnQoIV9fdHJhaXRzKGNvbXBpbGVzLCByZXMgPSAoYSAvIDUp IF4gYikpOyAvLyBbLTEyOC4uMTI3XQorICAgICAgICBzdGF0aWMgYXNzZXJ0 KCFfX3RyYWl0cyhjb21waWxlcywgcmVzID0gKGEgKiA1KSBeIGIpKTsgLy8g Wy02NDAuLjEwMjNdCisgICAgICAgIHN0YXRpYyBhc3NlcnQoIV9fdHJhaXRz KGNvbXBpbGVzLCByZXMgPSAoYSAlIDUpIF4gYikpOyAvLyBbLTEyOC4uMTI3 XQorICAgIH0KK30KKwordm9pZCBiaXRDb21wbGVtZW50KCkKK3sKICAgICBp bnQgaTsKICAgICB1Ynl0ZSBiID0gfihpIHwgfjB4ZmYpOwogfQogCi12b2lk IGJpdENvbXBsZW1lbnRGYWlsKCkgewordm9pZCBiaXRDb21wbGVtZW50RmFp bCgpCit7CiAgICAgdWJ5dGUgYjsKICAgICBzdGF0aWMgYXNzZXJ0KCFfX3Ry YWl0cyhjb21waWxlcywgYiA9IH4oYiB8IDEpKSk7CiAgICAgLy8gW3RoaXMg cGFzc2VzIGluIDIuMDUzLl0KIH0KIAotdm9pZCBuZWdhdGlvbigpIHsKK3Zv aWQgbmVnYXRpb24oKQorewogICAgIGludCB4OwogICAgIGJ5dGUgYiA9IC0o eCAmIDB4Nyk7CiB9CiAKLXZvaWQgbmVnYXRpb25GYWlsKCkgewordm9pZCBu ZWdhdGlvbkZhaWwoKQorewogICAgIGludCB4OwogICAgIGJ5dGUgYjsKICAg ICBzdGF0aWMgYXNzZXJ0KCFfX3RyYWl0cyhjb21waWxlcywgYiA9IC0oeCAm IDI1NSkpKTsKQEAgLTIwMCw3ICszNDYsOCBAQCBzaG9ydCBidWcxOTc3X2Nv bW1lbnQ1KGJ5dGUgaSkgewogICByZXR1cm4gbzsKIH0KIAotdm9pZCB0ZXN0 RGNoYXIoKSB7Cit2b2lkIHRlc3REY2hhcigpCit7CiAgICAgZGNoYXIgZDsK ICAgICB1aW50IGk7CiAgICAgLysKQEAgLTIxMCwxMyArMzU3LDE1IEBAIHZv aWQgdGVzdERjaGFyKCkgewogICAgIGQgPSBpICUgMHgxMTAwMDA7CiB9CiAK LXZvaWQgYnVnMTk3N19jb21tZW50MTEoKSB7Cit2b2lkIGJ1ZzE5NzdfY29t bWVudDExKCkKK3sKICAgICB1aW50IGE7CiAgICAgYnl0ZSBiID0gYSAmIDE7 CiAgICAgLy8gW3RoaXMgcGFzc2VzIGluIDIuMDUzLl0KIH0KIAotdm9pZCBi dWcxOTc3X2NvbW1lbnQyMCgpIHsKK3ZvaWQgYnVnMTk3N19jb21tZW50MjAo KQorewogICAgIGxvbmcgYTsKICAgICBpbnQgYiA9IGEgJSAxMDAwOwogfQpA QCAtMzI5LDMgKzQ3OCwzMiBAQCB2b2lkIHRlc3QxMzAwMShib29sIHVua25v d24pCiAgICAgICAgIHN0YXRpYyBhc3NlcnQoIV9fdHJhaXRzKGNvbXBpbGVz LCBiID0gaSArIDI1NCkpOwogICAgIH0KIH0KKwordm9pZCB0ZXN0MTAzMTAo KQoreworICAgIGludCB5OworICAgIHVieXRlIHggPSAoKHkgJiAyNTIpIF4g MikgKyAxOworfQorCisvLyBodHRwczovL2lzc3Vlcy5kbGFuZy5vcmcvc2hv d19idWcuY2dpP2lkPTE1Mjg5Cit2b2lkIHRlc3QxNTI4OWEoKQoreworICAg IGludCBbXSBhcnIgPSBbMSwgMiwgMywgNF07CisgICAgdWludCBmb28gPSA1 MCAvIGFyci5sZW5ndGg7Cit9CisKK3ZvaWQgdGVzdDE1Mjg5YigpCit7Cisg ICAgaW50IFtdIGFyciA9IFsxLCAyLCAzLCA0XTsKKyAgICB1aW50IGZvbyA9 IDUwICUgYXJyLmxlbmd0aDsKK30KKwordm9pZCB0ZXN0U2hpZnRSaWdodE9u TmVnYXRpdmUoKQoreworICAgIGludCBuZWcgPSAtMTsKKyAgICB1aW50W10g YXJyID0gWzEsIDIsIDNdOworICAgIHVieXRlIGI7CisgICAgLy8gU2hpZnQg d2l0aCBuZWdhdGl2ZSB2YWx1ZSByZXR1cm5zIHZhbHVlIGluIHJhbmdlIFsw LCB1bG9uZy5tYXhdCisgICAgc3RhdGljIGFzc2VydCghX190cmFpdHMoY29t cGlsZXMsIGIgPSBhcnIubGVuZ3RoID4+IG5lZykpOworICAgIHN0YXRpYyBh c3NlcnQoIV9fdHJhaXRzKGNvbXBpbGVzLCBiID0gYXJyLmxlbmd0aCA8PCBu ZWcpKTsKK30K --000000000000ab08ec057c9833b4--