From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 84076 invoked by alias); 30 Mar 2019 13:08:24 -0000 Mailing-List: contact cygwin-developers-help@cygwin.com; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-developers-owner@cygwin.com Mail-Followup-To: cygwin-developers@cygwin.com Received: (qmail 84060 invoked by uid 89); 30 Mar 2019 13:08:24 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,URIBL_BLOCKED autolearn=ham version=3.3.1 spammy=H*F:D*ne.jp, UD:ne.jp, colors, screen X-HELO: conssluserg-03.nifty.com Received: from conssluserg-03.nifty.com (HELO conssluserg-03.nifty.com) (210.131.2.82) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 30 Mar 2019 13:08:21 +0000 Received: from Express5800-S70 (ntsitm424054.sitm.nt.ngn.ppp.infoweb.ne.jp [219.97.74.54]) (authenticated) by conssluserg-03.nifty.com with ESMTP id x2UD7tkN012985 for ; Sat, 30 Mar 2019 22:07:55 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-03.nifty.com x2UD7tkN012985 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.ne.jp; s=dec2015msa; t=1553951275; bh=A2yDqxP55BovdKUkvPyLYZ7l41xQFpFV4fIwrFUh6NI=; h=Date:From:To:Subject:From; b=V4Rti/F8jN8LQ9iyLeEjPHxnTYVADX/0Uf+A/Rm7u7t7dI2XnB5fRamHWLMgCXcsN wTx7zoei3wSbg9g2588eJngP2R7BOGhAVp6rqk90wgRJ4mVou4jNjG5HBIq9kyJY7b 0+/aVDvUN71/dxi4Hf9UhfVlHPebU+sVm6KaFhfAGNsrZ/MlMCGHoKW8qZEKSWeRvS GpRuhUIHU7cgU2DjzHYQ6SAgFNnG9A+6owQeTiE2hKDf425FxAobWvkohaa5yP29u7 4zjdZ3FulaZW9eGwI4rWnJSdduWjFBb8gw1S9lchukyxD6oU+wKQHKgPZ3lt2dY6IU px/JJj8bf4D4g== Date: Sat, 30 Mar 2019 13:08:00 -0000 From: Takashi Yano To: cygwin-developers@cygwin.com Subject: Pseudo console support in PTY Message-Id: <20190330220804.a3be5fa8c4d5569464309d66@nifty.ne.jp> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Sat__30_Mar_2019_22_08_04_+0900_uR3j8n86EHhK01UI" X-IsSubscribed: yes X-SW-Source: 2019-03/txt/msg00006.txt.bz2 This is a multi-part message in MIME format. --Multipart=_Sat__30_Mar_2019_22_08_04_+0900_uR3j8n86EHhK01UI Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-length: 1925 Hello cygwin developers, I have worked on implementing pseudo console support into cygwin PTY by request from Corinna. Pseudo console is a new feature after Windows 10 1809, which provides console APIs on virtual terminal. https://blogs.msdn.microsoft.com/commandline/2018/08/02/windows-command-line-introducing-the-windows-pseudo-console-conpty/ https://docs.microsoft.com/en-us/windows/console/creating-a-pseudoconsole-session After much effort, it began to work partially. So, I would like to announce to this mailing list. Attached are the patchs against cygwin git HEAD. Patch 0001 and 0002 are not really needed by the pseudo console support, but are the modification I have done at the same time. Patch 0001: This just renames and unifies the function names. Both get_io_handle() and get_handle() were identical and returned io_handle. So, they were unified. Patch 0002: This revises console code for better color handling and fixing select() behaviour. This provides 24 bit color support after Windows 10 build 14931. For legacy console, fake 256 color support is implemented, which use the nearest color from 16 system colors. Patch 0003: Support pseudo console in PTY. With this patch, native console applications can work in PTY such as mintty, ssh, gnu screen or tmux. Anyone who are interested in this work, please test. Any discussions and suggestions are also welcome. You can download the binaries from: D=http://tyan0.dip.jp/cygwin ${D}/x86_64/test/cygwin1-20190330.dll.xz ${D}/x86_64/test/cygwin-console-helper.exe.xz ${D}/x86/test/cygwin1-20190330.dll.xz ${D}/x86/test/cygwin-console-helper.exe.xz This cygwin1.dll requires new cygwin-console-helper.exe. Please unxz and put them into /bin directory. Known problems: * Sometimes the screen layout would be broken. * mintty fails to start if it is started in console cygwin session. -- Takashi Yano --Multipart=_Sat__30_Mar_2019_22_08_04_+0900_uR3j8n86EHhK01UI Content-Type: application/octet-stream; name="0001-Cygwin-gs-et_io_handle-ranamed-to-gs-et_handle.patch" Content-Disposition: attachment; filename="0001-Cygwin-gs-et_io_handle-ranamed-to-gs-et_handle.patch" Content-Transfer-Encoding: base64 Content-length: 38308 RnJvbSA0NWNhNzM0ZTFlNzgzZWExMjAyY2E4YTU2NzNiM2ZkYTdhY2MzYTU0 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUYWthc2hpIFlhbm8g PHRha2FzaGkueWFub0BuaWZ0eS5uZS5qcD4KRGF0ZTogU2F0LCAzMCBNYXIg MjAxOSAxNjoxMjowMiArMDkwMApTdWJqZWN0OiBbUEFUQ0ggMS8zXSBDeWd3 aW46IFtnc11ldF9pb19oYW5kbGUoKTogcmFuYW1lZCB0byBbZ3NdZXRfaGFu ZGxlKCkuCgotIFVuaWZ5IGdldF9pb19oYW5kbGUoKSBhbmQgZ2V0X2hhbmRs ZSgpIHRvIGdldF9oYW5kbGUoKS4KICBCb3RoIG9mIHRoZW0gcmV0dXJuZWQg c2FtZSB2YWx1ZTsgaW9faGFuZGxlLgotIFJlbmFtZSBzZXRfaW9faGFuZGxl KCkgdG8gc2V0X2hhbmRsZSgpLgotLS0KIHdpbnN1cC9jeWd3aW4vZHRhYmxl LmNjICAgICAgICAgICAgICAgfCAxNiArKysrKysrLS0tLS0tLS0KIHdpbnN1 cC9jeWd3aW4vZmhhbmRsZXIuY2MgICAgICAgICAgICAgfCAxMiArKysrKyst LS0tLS0KIHdpbnN1cC9jeWd3aW4vZmhhbmRsZXIuaCAgICAgICAgICAgICAg fCAgOSArKysrKy0tLS0KIHdpbnN1cC9jeWd3aW4vZmhhbmRsZXJfY29uc29s ZS5jYyAgICAgfCAyNiArKysrKysrKysrKystLS0tLS0tLS0tLS0tCiB3aW5z dXAvY3lnd2luL2ZoYW5kbGVyX2Rpc2tfZmlsZS5jYyAgIHwgMTYgKysrKysr Ky0tLS0tLS0tCiB3aW5zdXAvY3lnd2luL2ZoYW5kbGVyX2ZpZm8uY2MgICAg ICAgIHwgMTIgKysrKysrLS0tLS0tCiB3aW5zdXAvY3lnd2luL2ZoYW5kbGVy X3BpcGUuY2MgICAgICAgIHwgIDIgKy0KIHdpbnN1cC9jeWd3aW4vZmhhbmRs ZXJfcHJvY2Vzc19mZC5jYyAgfCAgNiArKystLS0KIHdpbnN1cC9jeWd3aW4v ZmhhbmRsZXJfcmVnaXN0cnkuY2MgICAgfCAgNiArKystLS0KIHdpbnN1cC9j eWd3aW4vZmhhbmRsZXJfc29ja2V0X2luZXQuY2MgfCAxMCArKysrKy0tLS0t CiB3aW5zdXAvY3lnd2luL2ZoYW5kbGVyX3NvY2tldF91bml4LmNjIHwgMTYg KysrKysrKy0tLS0tLS0tCiB3aW5zdXAvY3lnd2luL2ZoYW5kbGVyX3R0eS5j YyAgICAgICAgIHwgMjggKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCiB3 aW5zdXAvY3lnd2luL21tYXAuY2MgICAgICAgICAgICAgICAgIHwgIDYgKysr LS0tCiB3aW5zdXAvY3lnd2luL3NlbGVjdC5jYyAgICAgICAgICAgICAgIHwg IDggKysrKy0tLS0KIDE0IGZpbGVzIGNoYW5nZWQsIDg3IGluc2VydGlvbnMo KyksIDg2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3 aW4vZHRhYmxlLmNjIGIvd2luc3VwL2N5Z3dpbi9kdGFibGUuY2MKaW5kZXgg ODZlMGM3MTZkLi42MzYyMjFhNzcgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3 aW4vZHRhYmxlLmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vZHRhYmxlLmNjCkBA IC02NDcsNyArNjQ3LDcgQEAgYnVpbGRfZmhfcGMgKHBhdGhfY29udiYgcGMp CiAgIGVsc2UgaWYgKChmaC0+YXJjaGV0eXBlID0gY3lnaGVhcC0+ZmR0YWIu ZmluZF9hcmNoZXR5cGUgKGZoLT5kZXYgKCkpKSkKICAgICB7CiAgICAgICBk ZWJ1Z19wcmludGYgKCJmb3VuZCBhbiBhcmNoZXR5cGUgZm9yICVzKCVkLyVk KSBpb19oYW5kbGUgJXAiLCBmaC0+Z2V0X25hbWUgKCksIGZoLT5kZXYgKCku Z2V0X21ham9yICgpLCBmaC0+ZGV2ICgpLmdldF9taW5vciAoKSwKLQkJICAg IGZoLT5hcmNoZXR5cGUtPmdldF9pb19oYW5kbGUgKCkpOworCQkgICAgZmgt PmFyY2hldHlwZS0+Z2V0X2hhbmRsZSAoKSk7CiAgICAgICBpZiAoIWZoLT5n ZXRfbmFtZSAoKSkKIAlmaC0+c2V0X25hbWUgKGZoLT5hcmNoZXR5cGUtPmRl diAoKS5uYW1lICgpKTsKICAgICB9CkBAIC02ODgsNyArNjg4LDcgQEAgZHRh YmxlOjpkdXBfd29ya2VyIChmaGFuZGxlcl9iYXNlICpvbGRmaCwgaW50IGZs YWdzKQogICBlbHNlCiAgICAgewogICAgICAgaWYgKCFvbGRmaC0+YXJjaGV0 eXBlKQotCW5ld2ZoLT5zZXRfaW9faGFuZGxlIChOVUxMKTsKKwluZXdmaC0+ c2V0X2hhbmRsZSAoTlVMTCk7CiAKICAgICAgIG5ld2ZoLT5wYy5yZXNldF9j b252X2hhbmRsZSAoKTsKICAgICAgIGlmIChvbGRmaC0+ZHVwIChuZXdmaCwg ZmxhZ3MpKQpAQCAtNzA4LDcgKzcwOCw3IEBAIGR0YWJsZTo6ZHVwX3dvcmtl ciAoZmhhbmRsZXJfYmFzZSAqb2xkZmgsIGludCBmbGFncykKIAkgIC8qIFRo ZSBPX0NMT0VYRUMgZmxhZyBlbmZvcmNlcyBjbG9zZS1vbi1leGVjIGJlaGF2 aW91ci4gKi8KIAkgIG5ld2ZoLT5zZXRfY2xvc2Vfb25fZXhlYyAoISEoZmxh Z3MgJiBPX0NMT0VYRUMpKTsKIAkgIGRlYnVnX3ByaW50ZiAoImR1cGVkICcl cycgb2xkICVwLCBuZXcgJXAiLCBvbGRmaC0+Z2V0X25hbWUgKCksCi0JCQlv bGRmaC0+Z2V0X2lvX2hhbmRsZSAoKSwgbmV3ZmgtPmdldF9pb19oYW5kbGUg KCkpOworCQkJb2xkZmgtPmdldF9oYW5kbGUgKCksIG5ld2ZoLT5nZXRfaGFu ZGxlICgpKTsKIAl9CiAgICAgfQogICByZXR1cm4gbmV3Zmg7CkBAIC03NjUs NyArNzY1LDcgQEAgZHRhYmxlOjpkdXAzIChpbnQgb2xkZmQsIGludCBuZXdm ZCwgaW50IGZsYWdzKQogICAgIH0KIAogICBkZWJ1Z19wcmludGYgKCJuZXdm aC0+aW9faGFuZGxlICVwLCBvbGRmaC0+aW9faGFuZGxlICVwLCBuZXcgd2lu MzJfbmFtZSAlcCwgb2xkIHdpbjMyX25hbWUgJXAiLAotCQluZXdmaC0+Z2V0 X2lvX2hhbmRsZSAoKSwgZmRzW29sZGZkXS0+Z2V0X2lvX2hhbmRsZSAoKSwg bmV3ZmgtPmdldF93aW4zMl9uYW1lICgpLCBmZHNbb2xkZmRdLT5nZXRfd2lu MzJfbmFtZSAoKSk7CisJCW5ld2ZoLT5nZXRfaGFuZGxlICgpLCBmZHNbb2xk ZmRdLT5nZXRfaGFuZGxlICgpLCBuZXdmaC0+Z2V0X3dpbjMyX25hbWUgKCks IGZkc1tvbGRmZF0tPmdldF93aW4zMl9uYW1lICgpKTsKIAogICBpZiAoIW5v dF9vcGVuIChuZXdmZCkpCiAgICAgY2xvc2UgKG5ld2ZkKTsKQEAgLTg5MSwx MiArODkxLDEyIEBAIGR0YWJsZTo6Zml4dXBfYWZ0ZXJfZXhlYyAoKQogCS8q IENsb3NlIHRoZSBoYW5kbGUgaWYgaXQncyBjbG9zZS1vbi1leGVjIG9yIGlm IGFuIGVycm9yIHdhcyBkZXRlY3RlZAogCSAgICh0eXBpY2FsbHkgd2l0aCBv cGVuaW5nIGEgY29uc29sZSBpbiBhIGd1aSBhcHApIGJ5IGZpeHVwX2FmdGVy X2V4ZWMuCiAJICovCi0JaWYgKGZoLT5jbG9zZV9vbl9leGVjICgpIHx8ICgh ZmgtPm5vaGFuZGxlICgpICYmICFmaC0+Z2V0X2lvX2hhbmRsZSAoKSkpCisJ aWYgKGZoLT5jbG9zZV9vbl9leGVjICgpIHx8ICghZmgtPm5vaGFuZGxlICgp ICYmICFmaC0+Z2V0X2hhbmRsZSAoKSkpCiAJICBmaXh1cF9jbG9zZSAoaSwg ZmgpOwogCWVsc2UgaWYgKGZoLT5nZXRfcG9wZW5fcGlkICgpKQogCSAgY2xv c2UgKGkpOwogCWVsc2UgaWYgKGkgPT0gMCkKLQkgIFNldFN0ZEhhbmRsZSAo c3RkX2NvbnN0c1tpXSwgZmgtPmdldF9pb19oYW5kbGUgKCkpOworCSAgU2V0 U3RkSGFuZGxlIChzdGRfY29uc3RzW2ldLCBmaC0+Z2V0X2hhbmRsZSAoKSk7 CiAJZWxzZSBpZiAoaSA8PSAyKQogCSAgU2V0U3RkSGFuZGxlIChzdGRfY29u c3RzW2ldLCBmaC0+Z2V0X291dHB1dF9oYW5kbGUgKCkpOwogICAgICAgfQpA QCAtOTEzLDcgKzkxMyw3IEBAIGR0YWJsZTo6Zml4dXBfYWZ0ZXJfZm9yayAo SEFORExFIHBhcmVudCkKIAkgIHsKIAkgICAgZGVidWdfcHJpbnRmICgiZmQg JWQgKCVzKSIsIGksIGZoLT5nZXRfbmFtZSAoKSk7CiAJICAgIGZoLT5maXh1 cF9hZnRlcl9mb3JrIChwYXJlbnQpOwotCSAgICBpZiAoIWZoLT5ub2hhbmRs ZSAoKSAmJiAhZmgtPmdldF9pb19oYW5kbGUgKCkpCisJICAgIGlmICghZmgt Pm5vaGFuZGxlICgpICYmICFmaC0+Z2V0X2hhbmRsZSAoKSkKIAkgICAgICB7 CiAJCS8qIFRoaXMgc2hvdWxkIGFjdHVhbGx5IG5ldmVyIGhhcHBlbiBidXQg aXQncyBoZXJlIHRvIG1ha2Ugc3VyZQogCQkgICB3ZSBkb24ndCBjcmFzaCBk dWUgdG8gYWNjZXNzIG9mIGFuIHVub3BlbmVkIGZpbGUgaGFuZGxlLiAgKi8K QEAgLTkyMiw3ICs5MjIsNyBAQCBkdGFibGU6OmZpeHVwX2FmdGVyX2Zvcmsg KEhBTkRMRSBwYXJlbnQpCiAJICAgICAgfQogCSAgfQogCWlmIChpID09IDAp Ci0JICBTZXRTdGRIYW5kbGUgKHN0ZF9jb25zdHNbaV0sIGZoLT5nZXRfaW9f aGFuZGxlICgpKTsKKwkgIFNldFN0ZEhhbmRsZSAoc3RkX2NvbnN0c1tpXSwg ZmgtPmdldF9oYW5kbGUgKCkpOwogCWVsc2UgaWYgKGkgPD0gMikKIAkgIFNl dFN0ZEhhbmRsZSAoc3RkX2NvbnN0c1tpXSwgZmgtPmdldF9vdXRwdXRfaGFu ZGxlICgpKTsKICAgICAgIH0KZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4v ZmhhbmRsZXIuY2MgYi93aW5zdXAvY3lnd2luL2ZoYW5kbGVyLmNjCmluZGV4 IDY1OTQzNWUwYS4uYjBjOWM1MGMzIDEwMDY0NAotLS0gYS93aW5zdXAvY3ln d2luL2ZoYW5kbGVyLmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXIu Y2MKQEAgLTQ2MSw3ICs0NjEsNyBAQCBmaGFuZGxlcl9iYXNlOjpvcGVuX3dp dGhfYXJjaCAoaW50IGZsYWdzLCBtb2RlX3QgbW9kZSkKICAgICB9CiAgIGVs c2UgaWYgKGFyY2hldHlwZSkKICAgICB7Ci0gICAgICBpZiAoIWFyY2hldHlw ZS0+Z2V0X2lvX2hhbmRsZSAoKSkKKyAgICAgIGlmICghYXJjaGV0eXBlLT5n ZXRfaGFuZGxlICgpKQogCXsKIAkgIGNvcHl0byAoYXJjaGV0eXBlKTsKIAkg IGFyY2hldHlwZV91c2Vjb3VudCAoMSk7CkBAIC01MjIsNyArNTIyLDcgQEAg ZmhhbmRsZXJfYmFzZTo6b3Blbl9udWxsIChpbnQgZmxhZ3MpCiAgICAgICBf X3NldGVycm5vX2Zyb21fbnRfc3RhdHVzIChzdGF0dXMpOwogICAgICAgZ290 byBkb25lOwogICAgIH0KLSAgc2V0X2lvX2hhbmRsZSAoZmgpOworICBzZXRf aGFuZGxlIChmaCk7CiAgIHNldF9mbGFncyAoZmxhZ3MsIHBjLmJpbm1vZGUg KCkpOwogICByZXMgPSAxOwogICBzZXRfb3Blbl9zdGF0dXMgKCk7CkBAIC03 NzUsNyArNzc1LDcgQEAgZmhhbmRsZXJfYmFzZTo6b3BlbiAoaW50IGZsYWdz LCBtb2RlX3QgbW9kZSkKIAl9CiAgICAgfQogCi0gIHNldF9pb19oYW5kbGUg KGZoKTsKKyAgc2V0X2hhbmRsZSAoZmgpOwogICBzZXRfZmxhZ3MgKGZsYWdz LCBwYy5iaW5tb2RlICgpKTsKIAogICByZXMgPSAxOwpAQCAtMTI5OCw3ICsx Mjk4LDcgQEAgZmhhbmRsZXJfYmFzZV9vdmVybGFwcGVkOjpjbG9zZSAoKQog ICAgICAvKiBDYW5jZWxsaW5nIHNlZW1zIHRvIGJlIG5lY2Vzc2FyeSBmb3Ig Y2FzZXMgd2hlcmUgYSByZWFkZXIgaXMKIAkgc3RpbGwgZXhlY3V0aW5nIHdo ZW4gYSBzaWduYWwgaGFuZGxlciBwZXJmb3JtcyBhIGNsb3NlLiAgKi8KICAg ICAgIGlmICghd3JpdGVyKQotCUNhbmNlbElvIChnZXRfaW9faGFuZGxlICgp KTsKKwlDYW5jZWxJbyAoZ2V0X2hhbmRsZSAoKSk7CiAgICAgICBkZXN0cm95 X292ZXJsYXBwZWQgKCk7CiAgICAgICByZXMgPSBmaGFuZGxlcl9iYXNlOjpj bG9zZSAoKTsKICAgICB9CkBAIC0xMzgyLDcgKzEzODIsNyBAQCBmaGFuZGxl cl9iYXNlOjpmc3RhdHZmcyAoc3RydWN0IHN0YXR2ZnMgKnNmcykKIGludAog ZmhhbmRsZXJfYmFzZTo6aW5pdCAoSEFORExFIGYsIERXT1JEIGEsIG1vZGVf dCBiaW4pCiB7Ci0gIHNldF9pb19oYW5kbGUgKGYpOworICBzZXRfaGFuZGxl IChmKTsKICAgYWNjZXNzID0gYTsKICAgYSAmPSBHRU5FUklDX1JFQUQgfCBH RU5FUklDX1dSSVRFOwogICBpbnQgZmxhZ3MgPSAwOwpAQCAtMTQxNyw3ICsx NDE3LDcgQEAgZmhhbmRsZXJfYmFzZTo6ZHVwIChmaGFuZGxlcl9iYXNlICpj aGlsZCwgaW50KQogCX0KIAogICAgICAgVmVyaWZ5SGFuZGxlIChuaCk7Ci0g ICAgICBjaGlsZC0+c2V0X2lvX2hhbmRsZSAobmgpOworICAgICAgY2hpbGQt PnNldF9oYW5kbGUgKG5oKTsKICAgICB9CiAgIHJldHVybiAwOwogfQpkaWZm IC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9maGFuZGxlci5oIGIvd2luc3VwL2N5 Z3dpbi9maGFuZGxlci5oCmluZGV4IDIxZmVjOWUzOC4uYjMzNmViNjNhIDEw MDY0NAotLS0gYS93aW5zdXAvY3lnd2luL2ZoYW5kbGVyLmgKKysrIGIvd2lu c3VwL2N5Z3dpbi9maGFuZGxlci5oCkBAIC0yMjcsNyArMjI3LDcgQEAgY2xh c3MgZmhhbmRsZXJfYmFzZQogICB2aXJ0dWFsIH5maGFuZGxlcl9iYXNlICgp OwogCiAgIC8qIE5vbi12aXJ0dWFsIHNpbXBsZSBhY2Nlc3NvciBmdW5jdGlv bnMuICovCi0gIHZvaWQgc2V0X2lvX2hhbmRsZSAoSEFORExFIHgpIHsgaW9f aGFuZGxlID0geDsgfQorICB2b2lkIHNldF9oYW5kbGUgKEhBTkRMRSB4KSB7 IGlvX2hhbmRsZSA9IHg7IH0KIAogICBkZXZfdCYgZ2V0X2RldmljZSAoKSB7 IHJldHVybiBkZXYgKCk7IH0KICAgX21ham9yX3QgZ2V0X21ham9yICgpIHsg cmV0dXJuIGRldiAoKS5nZXRfbWFqb3IgKCk7IH0KQEAgLTQzMCw5ICs0MzAs OSBAQCBwdWJsaWM6CiAgIC8qIFZpcnR1YWwgYWNjZXNzb3IgZnVuY3Rpb25z IHRvIGhpZGUgdGhlIGZhY3QKICAgICAgdGhhdCBzb21lIGZkJ3MgaGF2ZSB0 d28gaGFuZGxlcy4gKi8KICAgdmlydHVhbCBIQU5ETEUmIGdldF9oYW5kbGUg KCkgeyByZXR1cm4gaW9faGFuZGxlOyB9Ci0gIHZpcnR1YWwgSEFORExFJiBn ZXRfaW9faGFuZGxlICgpIHsgcmV0dXJuIGlvX2hhbmRsZTsgfQotICB2aXJ0 dWFsIEhBTkRMRSYgZ2V0X2lvX2hhbmRsZV9jeWcgKCkgeyByZXR1cm4gaW9f aGFuZGxlOyB9CisgIHZpcnR1YWwgSEFORExFJiBnZXRfaGFuZGxlX2N5ZyAo KSB7IHJldHVybiBpb19oYW5kbGU7IH0KICAgdmlydHVhbCBIQU5ETEUmIGdl dF9vdXRwdXRfaGFuZGxlICgpIHsgcmV0dXJuIGlvX2hhbmRsZTsgfQorICB2 aXJ0dWFsIEhBTkRMRSYgZ2V0X291dHB1dF9oYW5kbGVfY3lnICgpIHsgcmV0 dXJuIGlvX2hhbmRsZTsgfQogICB2aXJ0dWFsIEhBTkRMRSBnZXRfc3RhdF9o YW5kbGUgKCkgeyByZXR1cm4gcGMuaGFuZGxlICgpID86IGlvX2hhbmRsZTsg fQogICB2aXJ0dWFsIEhBTkRMRSBnZXRfZWNob19oYW5kbGUgKCkgY29uc3Qg eyByZXR1cm4gTlVMTDsgfQogICB2aXJ0dWFsIGJvb2wgaGl0X2VvZiAoKSB7 cmV0dXJuIGZhbHNlO30KQEAgLTE3MjYsNiArMTcyNiw3IEBAIGNsYXNzIGZo YW5kbGVyX3Rlcm1pb3M6IHB1YmxpYyBmaGFuZGxlcl9iYXNlCiAgICAgbmVl ZF9mb3JrX2ZpeHVwICh0cnVlKTsKICAgfQogICBIQU5ETEUmIGdldF9vdXRw dXRfaGFuZGxlICgpIHsgcmV0dXJuIG91dHB1dF9oYW5kbGU7IH0KKyAgSEFO RExFJiBnZXRfb3V0cHV0X2hhbmRsZV9jeWcgKCkgeyByZXR1cm4gb3V0cHV0 X2hhbmRsZTsgfQogICBsaW5lX2VkaXRfc3RhdHVzIGxpbmVfZWRpdCAoY29u c3QgY2hhciAqcnB0ciwgc2l6ZV90IG5yZWFkLCB0ZXJtaW9zJiwKIAkJCSAg ICAgIHNzaXplX3QgKmJ5dGVzX3JlYWQgPSBOVUxMKTsKICAgdm9pZCBzZXRf b3V0cHV0X2hhbmRsZSAoSEFORExFIGgpIHsgb3V0cHV0X2hhbmRsZSA9IGg7 IH0KQEAgLTIxMDksNyArMjExMCw3IEBAIGNsYXNzIGZoYW5kbGVyX3B0eV9t YXN0ZXI6IHB1YmxpYyBmaGFuZGxlcl9wdHlfY29tbW9uCiAKIHB1YmxpYzoK ICAgSEFORExFIGdldF9lY2hvX2hhbmRsZSAoKSBjb25zdCB7IHJldHVybiBl Y2hvX3I7IH0KLSAgSEFORExFJiBnZXRfaW9faGFuZGxlX2N5ZyAoKSB7IHJl dHVybiBpb19oYW5kbGVfY3lnOyB9CisgIEhBTkRMRSYgZ2V0X2hhbmRsZV9j eWcgKCkgeyByZXR1cm4gaW9faGFuZGxlX2N5ZzsgfQogICAvKiBDb25zdHJ1 Y3RvciAqLwogICBmaGFuZGxlcl9wdHlfbWFzdGVyIChpbnQpOwogCmRpZmYg LS1naXQgYS93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX2NvbnNvbGUuY2MgYi93 aW5zdXAvY3lnd2luL2ZoYW5kbGVyX2NvbnNvbGUuY2MKaW5kZXggNmEwZDY0 MGE4Li4yODFjMjAwNWMgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vZmhh bmRsZXJfY29uc29sZS5jYworKysgYi93aW5zdXAvY3lnd2luL2ZoYW5kbGVy X2NvbnNvbGUuY2MKQEAgLTE1NSw3ICsxNTUsNyBAQCBmaGFuZGxlcl9jb25z b2xlOjpzZXRfdW5pdCAoKQogICAgIHBjLmZpbGVfYXR0cmlidXRlcyAoRklM RV9BVFRSSUJVVEVfTk9STUFMKTsKICAgZWxzZQogICAgIHsKLSAgICAgIHNl dF9pb19oYW5kbGUgKE5VTEwpOworICAgICAgc2V0X2hhbmRsZSAoTlVMTCk7 CiAgICAgICBzZXRfb3V0cHV0X2hhbmRsZSAoTlVMTCk7CiAgICAgICBjcmVh dGVkID0gZmFsc2U7CiAgICAgfQpAQCAtMjk4LDcgKzI5OCw3IEBAIGZoYW5k bGVyX2NvbnNvbGU6OnJlYWQgKHZvaWQgKnB2LCBzaXplX3QmIGJ1ZmxlbikK IHsKICAgcHVzaF9wcm9jZXNzX3N0YXRlIHByb2Nlc3Nfc3RhdGUgKFBJRF9U VFlJTik7CiAKLSAgSEFORExFIGggPSBnZXRfaW9faGFuZGxlICgpOworICBI QU5ETEUgaCA9IGdldF9oYW5kbGUgKCk7CiAKICNkZWZpbmUgYnVmICgoY2hh ciAqKSBwdikKIApAQCAtODE4LDcgKzgxOCw3IEBAIGZoYW5kbGVyX2NvbnNv bGU6Om9wZW4gKGludCBmbGFncywgbW9kZV90KQogCiAgIHRjaW5pdCAoZmFs c2UpOwogCi0gIHNldF9pb19oYW5kbGUgKE5VTEwpOworICBzZXRfaGFuZGxl IChOVUxMKTsKICAgc2V0X291dHB1dF9oYW5kbGUgKE5VTEwpOwogCiAgIC8q IE9wZW4gdGhlIGlucHV0IGhhbmRsZSBhcyBoYW5kbGVfICovCkBAIC04MzEs NyArODMxLDcgQEAgZmhhbmRsZXJfY29uc29sZTo6b3BlbiAoaW50IGZsYWdz LCBtb2RlX3QpCiAgICAgICBfX3NldGVycm5vICgpOwogICAgICAgcmV0dXJu IDA7CiAgICAgfQotICBzZXRfaW9faGFuZGxlIChoKTsKKyAgc2V0X2hhbmRs ZSAoaCk7CiAKICAgaCA9IENyZWF0ZUZpbGVXIChMIkNPTk9VVCQiLCBHRU5F UklDX1JFQUQgfCBHRU5FUklDX1dSSVRFLAogCQkgIEZJTEVfU0hBUkVfUkVB RCB8IEZJTEVfU0hBUkVfV1JJVEUsICZzZWNfbm9uZSwKQEAgLTg1NiwxMSAr ODU2LDExIEBAIGZoYW5kbGVyX2NvbnNvbGU6Om9wZW4gKGludCBmbGFncywg bW9kZV90KQogICBzZXRfb3Blbl9zdGF0dXMgKCk7CiAKICAgRFdPUkQgY2Zs YWdzOwotICBpZiAoR2V0Q29uc29sZU1vZGUgKGdldF9pb19oYW5kbGUgKCks ICZjZmxhZ3MpKQotICAgIFNldENvbnNvbGVNb2RlIChnZXRfaW9faGFuZGxl ICgpLAorICBpZiAoR2V0Q29uc29sZU1vZGUgKGdldF9oYW5kbGUgKCksICZj ZmxhZ3MpKQorICAgIFNldENvbnNvbGVNb2RlIChnZXRfaGFuZGxlICgpLAog CQkgICAgRU5BQkxFX1dJTkRPV19JTlBVVCB8IEVOQUJMRV9NT1VTRV9JTlBV VCB8IGNmbGFncyk7CiAKLSAgZGVidWdfcHJpbnRmICgib3BlbmVkIGNvbmlu JCAlcCwgY29ub3V0JCAlcCIsIGdldF9pb19oYW5kbGUgKCksCisgIGRlYnVn X3ByaW50ZiAoIm9wZW5lZCBjb25pbiQgJXAsIGNvbm91dCQgJXAiLCBnZXRf aGFuZGxlICgpLAogCQlnZXRfb3V0cHV0X2hhbmRsZSAoKSk7CiAKICAgcmV0 dXJuIDE7CkBAIC04NzgsNyArODc4LDcgQEAgZmhhbmRsZXJfY29uc29sZTo6 b3Blbl9zZXR1cCAoaW50IGZsYWdzKQogaW50CiBmaGFuZGxlcl9jb25zb2xl OjpjbG9zZSAoKQogewotICBDbG9zZUhhbmRsZSAoZ2V0X2lvX2hhbmRsZSAo KSk7CisgIENsb3NlSGFuZGxlIChnZXRfaGFuZGxlICgpKTsKICAgQ2xvc2VI YW5kbGUgKGdldF9vdXRwdXRfaGFuZGxlICgpKTsKICAgaWYgKCFoYXZlX2V4 ZWNlZCkKICAgICBmcmVlX2NvbnNvbGUgKCk7CkBAIC05NDgsNyArOTQ4LDcg QEAgZmhhbmRsZXJfY29uc29sZTo6aW9jdGwgKHVuc2lnbmVkIGludCBjbWQs IHZvaWQgKmFyZykKIAkgIERXT1JEIG47CiAJICBpbnQgcmV0ID0gMDsKIAkg IElOUFVUX1JFQ09SRCBpbnBbSU5SRUNfU0laRV07Ci0JICBpZiAoIVBlZWtD b25zb2xlSW5wdXRXIChnZXRfaW9faGFuZGxlICgpLCBpbnAsIElOUkVDX1NJ WkUsICZuKSkKKwkgIGlmICghUGVla0NvbnNvbGVJbnB1dFcgKGdldF9oYW5k bGUgKCksIGlucCwgSU5SRUNfU0laRSwgJm4pKQogCSAgICB7CiAJICAgICAg c2V0X2Vycm5vIChFSU5WQUwpOwogCSAgICAgIHJldHVybiAtMTsKQEAgLTk3 Miw3ICs5NzIsNyBAQCBmaGFuZGxlcl9jb25zb2xlOjp0Y2ZsdXNoIChpbnQg cXVldWUpCiAgIGlmIChxdWV1ZSA9PSBUQ0lGTFVTSAogICAgICAgfHwgcXVl dWUgPT0gVENJT0ZMVVNIKQogICAgIHsKLSAgICAgIGlmICghRmx1c2hDb25z b2xlSW5wdXRCdWZmZXIgKGdldF9pb19oYW5kbGUgKCkpKQorICAgICAgaWYg KCFGbHVzaENvbnNvbGVJbnB1dEJ1ZmZlciAoZ2V0X2hhbmRsZSAoKSkpCiAJ ewogCSAgX19zZXRlcnJubyAoKTsKIAkgIHJlcyA9IC0xOwpAQCAtMTAwNCw3 ICsxMDA0LDcgQEAgZmhhbmRsZXJfY29uc29sZTo6aW5wdXRfdGNzZXRhdHRy IChpbnQsIHN0cnVjdCB0ZXJtaW9zIGNvbnN0ICp0KQogCiAgIERXT1JEIG9m bGFnczsKIAotICBpZiAoIUdldENvbnNvbGVNb2RlIChnZXRfaW9faGFuZGxl ICgpLCAmb2ZsYWdzKSkKKyAgaWYgKCFHZXRDb25zb2xlTW9kZSAoZ2V0X2hh bmRsZSAoKSwgJm9mbGFncykpCiAgICAgb2ZsYWdzID0gMDsKICAgRFdPUkQg ZmxhZ3MgPSAwOwogCkBAIC0xMDUwLDcgKzEwNTAsNyBAQCBmaGFuZGxlcl9j b25zb2xlOjppbnB1dF90Y3NldGF0dHIgKGludCwgc3RydWN0IHRlcm1pb3Mg Y29uc3QgKnQpCiAgICAgcmVzID0gMDsKICAgZWxzZQogICAgIHsKLSAgICAg IHJlcyA9IFNldENvbnNvbGVNb2RlIChnZXRfaW9faGFuZGxlICgpLCBmbGFn cykgPyAwIDogLTE7CisgICAgICByZXMgPSBTZXRDb25zb2xlTW9kZSAoZ2V0 X2hhbmRsZSAoKSwgZmxhZ3MpID8gMCA6IC0xOwogICAgICAgaWYgKHJlcyA8 IDApCiAJX19zZXRlcnJubyAoKTsKICAgICAgIHN5c2NhbGxfcHJpbnRmICgi JWQgPSB0Y3NldGF0dHIoLCVwKSBlbmFibGUgZmxhZ3MgJXksIGNfbGZsYWcg JXkgaWZsYWcgJXkiLApAQCAtMTA4MCw3ICsxMDgwLDcgQEAgZmhhbmRsZXJf Y29uc29sZTo6dGNnZXRhdHRyIChzdHJ1Y3QgdGVybWlvcyAqdCkKIAogICBE V09SRCBmbGFnczsKIAotICBpZiAoIUdldENvbnNvbGVNb2RlIChnZXRfaW9f aGFuZGxlICgpLCAmZmxhZ3MpKQorICBpZiAoIUdldENvbnNvbGVNb2RlIChn ZXRfaGFuZGxlICgpLCAmZmxhZ3MpKQogICAgIHsKICAgICAgIF9fc2V0ZXJy bm8gKCk7CiAgICAgICByZXMgPSAtMTsKZGlmZiAtLWdpdCBhL3dpbnN1cC9j eWd3aW4vZmhhbmRsZXJfZGlza19maWxlLmNjIGIvd2luc3VwL2N5Z3dpbi9m aGFuZGxlcl9kaXNrX2ZpbGUuY2MKaW5kZXggMTkzMTkyNzYyLi44NGQ4NjQ1 NmIgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfZGlza19m aWxlLmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfZGlza19maWxl LmNjCkBAIC0yMTIsNyArMjEyLDcgQEAgZmhhbmRsZXJfYmFzZTo6ZnN0YXRf YnlfbmZzX2VhIChzdHJ1Y3Qgc3RhdCAqYnVmKQogICBjeWdfbGRhcCBjbGRh cDsKICAgYm9vbCBsZGFwX29wZW4gPSBmYWxzZTsKIAotICBpZiAoZ2V0X2lv X2hhbmRsZSAoKSkKKyAgaWYgKGdldF9oYW5kbGUgKCkpCiAgICAgewogICAg ICAgLyogTkZTIHN0dW1ibGVzIG92ZXIgaXRzIG93biBjYWNoaW5nLiAgSWYg eW91IHdyaXRlIHRvIHRoZSBmaWxlLAogCSBhIHN1YnNlcXVlbnQgZnN0YXQg ZG9lcyBub3QgcmV0dXJuIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgZmlsZSwK QEAgLTIyMCw4ICsyMjAsOCBAQCBmaGFuZGxlcl9iYXNlOjpmc3RhdF9ieV9u ZnNfZWEgKHN0cnVjdCBzdGF0ICpidWYpCiAJIGFjY2VzcyB0aHJvdWdoIGFu b3RoZXIgaGFuZGxlIGludmFsaWRhdGVzIHRoZSBjYWNoaW5nIHdpdGhpbiB0 aGUKIAkgTkZTIGNsaWVudC4gKi8KICAgICAgIGlmIChnZXRfYWNjZXNzICgp ICYgR0VORVJJQ19XUklURSkKLQlGbHVzaEZpbGVCdWZmZXJzIChnZXRfaW9f aGFuZGxlICgpKTsKLSAgICAgIHBjLmdldF9maW5mbyAoZ2V0X2lvX2hhbmRs ZSAoKSk7CisJRmx1c2hGaWxlQnVmZmVycyAoZ2V0X2hhbmRsZSAoKSk7Cisg ICAgICBwYy5nZXRfZmluZm8gKGdldF9oYW5kbGUgKCkpOwogICAgIH0KICAg YnVmLT5zdF9kZXYgPSBuZnNfYXR0ci0+ZnNpZDsKICAgYnVmLT5zdF9pbm8g PSBuZnNfYXR0ci0+ZmlsZWlkOwpAQCAtMjkxLDcgKzI5MSw3IEBAIGZoYW5k bGVyX2Jhc2U6OmZzdGF0X2J5X2hhbmRsZSAoc3RydWN0IHN0YXQgKmJ1ZikK IAogICAvKiBJZiB0aGUgZmlsZSBoYXMgYmVlbiBvcGVuZWQgZm9yIG90aGVy IHB1cnBvc2VzIHRoYW4gc3RhdCwgd2UgY2FuJ3QgcmVseQogICAgICBvbiB0 aGUgaW5mb3JtYXRpb24gc3RvcmVkIGluIHBjLmZhaS4gIFNvIHdlIG92ZXJ3 cml0ZSB0aGVtIGhlcmUuICovCi0gIGlmIChnZXRfaW9faGFuZGxlICgpKQor ICBpZiAoZ2V0X2hhbmRsZSAoKSkKICAgICB7CiAgICAgICBzdGF0dXMgPSBw Yy5nZXRfZmluZm8gKGgpOwogICAgICAgaWYgKCFOVF9TVUNDRVNTIChzdGF0 dXMpKQpAQCAtMzg2LDcgKzM4Niw3IEBAIGZoYW5kbGVyX2Jhc2U6OmZzdGF0 X2ZzIChzdHJ1Y3Qgc3RhdCAqYnVmKQogICAgICAgbm9oYW5kbGUgKGZhbHNl KTsKICAgICAgIGNsb3NlX2ZzICgpOwogICAgICAgbm9oYW5kbGUgKG5vX2hh bmRsZSk7Ci0gICAgICBzZXRfaW9faGFuZGxlIChOVUxMKTsKKyAgICAgIHNl dF9oYW5kbGUgKE5VTEwpOwogICAgIH0KICAgaWYgKHJlcykKICAgICByZXMg PSBmc3RhdF9ieV9uYW1lIChidWYpOwpAQCAtMTQ2NSw3ICsxNDY1LDcgQEAg ZmhhbmRsZXJfYmFzZTo6b3Blbl9mcyAoaW50IGZsYWdzLCBtb2RlX3QgbW9k ZSkKICAgICAgIC8qIFRoZSBmaWxlIGluZm8gaW4gcGMgaXMgd3JvbmcgYXQg dGhpcyBwb2ludCBmb3IgbmV3bHkgY3JlYXRlZCBmaWxlcy4KIAkgUmVmcmVz aCBpdCBiZWZvcmUgZmV0Y2hpbmcgYW55IGZpbGUgaW5mby4gKi8KICAgICAg IGlmIChuZXdfZmlsZSkKLQlwYy5nZXRfZmluZm8gKGdldF9pb19oYW5kbGUg KCkpOworCXBjLmdldF9maW5mbyAoZ2V0X2hhbmRsZSAoKSk7CiAKICAgICAg IGlmIChwYy5pc2dvb2RfaW5vZGUgKHBjLmdldF9pbm8gKCkpKQogCWlubyA9 IHBjLmdldF9pbm8gKCk7CkBAIC0yNjE1LDcgKzI2MTUsNyBAQCBmaGFuZGxl cl9kaXNrX2ZpbGU6OmZzX2lvY19zZXRmbGFncyAodWludDY0X3QgZmxhZ3Mp CiAgICAgICBpZiAoZmggIT0gZ2V0X2hhbmRsZSAoKSkKIAlOdENsb3NlIChm aCk7CiAgICAgICBOdENsb3NlIChnZXRfaGFuZGxlICgpKTsKLSAgICAgIHNl dF9pb19oYW5kbGUgKE5VTEwpOworICAgICAgc2V0X2hhbmRsZSAoTlVMTCk7 CiAKICAgICAgIHBjLmdldF93aWRlX3dpbjMyX3BhdGggKHBhdGgpOwogICAg ICAgY3JldCA9IChmbGFncyAmIEZTX0VOQ1JZUFRfRkwpCkBAIC0yNjMwLDcg KzI2MzAsNyBAQCBmaGFuZGxlcl9kaXNrX2ZpbGU6OmZzX2lvY19zZXRmbGFn cyAodWludDY0X3QgZmxhZ3MpCiAJICBfX3NldGVycm5vX2Zyb21fbnRfc3Rh dHVzIChzdGF0dXMpOwogCSAgcmV0dXJuIC0xOwogCX0KLSAgICAgIHNldF9p b19oYW5kbGUgKGZoKTsKKyAgICAgIHNldF9oYW5kbGUgKGZoKTsKICAgICAg IGlmICghY3JldCkKIAl7CiAJICBfX3NldGVycm5vICgpOwpkaWZmIC0tZ2l0 IGEvd2luc3VwL2N5Z3dpbi9maGFuZGxlcl9maWZvLmNjIGIvd2luc3VwL2N5 Z3dpbi9maGFuZGxlcl9maWZvLmNjCmluZGV4IDc4NDdjY2E4Mi4uNjhiOWU3 NzE3IDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX2ZpZm8u Y2MKKysrIGIvd2luc3VwL2N5Z3dpbi9maGFuZGxlcl9maWZvLmNjCkBAIC0y NjYsNyArMjY2LDcgQEAgZmhhbmRsZXJfZmlmbzo6b3Blbl9waXBlICgpCiAg IHNoYXJpbmcgPSBGSUxFX1NIQVJFX1JFQUQgfCBGSUxFX1NIQVJFX1dSSVRF OwogICBzdGF0dXMgPSBOdE9wZW5GaWxlICgmcGgsIGFjY2VzcywgJmF0dHIs ICZpbywgc2hhcmluZywgMCk7CiAgIGlmIChOVF9TVUNDRVNTIChzdGF0dXMp KQotICAgIHNldF9pb19oYW5kbGUgKHBoKTsKKyAgICBzZXRfaGFuZGxlIChw aCk7CiAgIHJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTI5Myw3ICsyOTMsNyBA QCBmaGFuZGxlcl9maWZvOjphZGRfY2xpZW50ICgpCiAgIEhBTkRMRSBwaCA9 IGNyZWF0ZV9waXBlX2luc3RhbmNlIChmaXJzdCk7CiAgIGlmICghcGgpCiAg ICAgZ290byBlcnJvdXQ7Ci0gIGZoLT5zZXRfaW9faGFuZGxlIChwaCk7Cisg IGZoLT5zZXRfaGFuZGxlIChwaCk7CiAgIGZoLT5zZXRfZmxhZ3MgKGdldF9m bGFncyAoKSk7CiAgIGlmIChmYy5jb25uZWN0ICgpIDwgMCkKICAgICB7CkBA IC00ODYsNyArNDg2LDcgQEAgZmhhbmRsZXJfZmlmbzo6b3BlbiAoaW50IGZs YWdzLCBtb2RlX3QpCiAJICByZXMgPSBlcnJvcl9lcnJub19zZXQ7CiAJICBn b3RvIG91dDsKIAl9Ci0gICAgICBzZXRfaW9faGFuZGxlIChwaCk7CisgICAg ICBzZXRfaGFuZGxlIChwaCk7CiAgICAgICBzZXRfcGlwZV9ub25fYmxvY2tp bmcgKHBoLCB0cnVlKTsKICAgICAgIGlmICghKGZoID0gYnVpbGRfZmhfZGV2 IChkZXYgKCkpKSkKIAl7CkBAIC00OTQsNyArNDk0LDcgQEAgZmhhbmRsZXJf Zmlmbzo6b3BlbiAoaW50IGZsYWdzLCBtb2RlX3QpCiAJICByZXMgPSBlcnJv cl9lcnJub19zZXQ7CiAJICBnb3RvIG91dDsKIAl9Ci0gICAgICBmaC0+c2V0 X2lvX2hhbmRsZSAocGgpOworICAgICAgZmgtPnNldF9oYW5kbGUgKHBoKTsK ICAgICAgIGZoLT5zZXRfZmxhZ3MgKGZsYWdzKTsKICAgICAgIGlmICghKGNv bm5lY3RfZXZ0ID0gY3JlYXRlX2V2ZW50ICgpKSkKIAl7CkBAIC02MDQsOCAr NjA0LDggQEAgb3V0OgogCSAgQ2xvc2VIYW5kbGUgKHdyaXRlX3JlYWR5KTsK IAkgIHdyaXRlX3JlYWR5ID0gTlVMTDsKIAl9Ci0gICAgICBpZiAoZ2V0X2lv X2hhbmRsZSAoKSkKLQlDbG9zZUhhbmRsZSAoZ2V0X2lvX2hhbmRsZSAoKSk7 CisgICAgICBpZiAoZ2V0X2hhbmRsZSAoKSkKKwlDbG9zZUhhbmRsZSAoZ2V0 X2hhbmRsZSAoKSk7CiAgICAgICBpZiAobGlzdGVuX2NsaWVudF90aHIpCiAJ Q2xvc2VIYW5kbGUgKGxpc3Rlbl9jbGllbnRfdGhyKTsKICAgICB9CmRpZmYg LS1naXQgYS93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX3BpcGUuY2MgYi93aW5z dXAvY3lnd2luL2ZoYW5kbGVyX3BpcGUuY2MKaW5kZXggMzFlNzNjZWIwLi5l ZGJhZGVkNjggMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJf cGlwZS5jYworKysgYi93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX3BpcGUuY2MK QEAgLTk3LDcgKzk3LDcgQEAgZmhhbmRsZXJfcGlwZTo6b3BlbiAoaW50IGZs YWdzLCBtb2RlX3QgbW9kZSkKIAkgICAgICB8fCAocndmbGFncyA9PSBPX1dS T05MWSAmJiAhKGNmZC0+Z2V0X2FjY2VzcyAoKSAmIEdFTkVSSUNfV1JJVEUp KSkKIAkgICAgY29udGludWU7CiAJICBjZmQtPmNvcHl0byAodGhpcyk7Ci0J ICBzZXRfaW9faGFuZGxlIChOVUxMKTsKKwkgIHNldF9oYW5kbGUgKE5VTEwp OwogCSAgcGMucmVzZXRfY29udl9oYW5kbGUgKCk7CiAJICBpZiAoIWNmZC0+ ZHVwICh0aGlzLCBmbGFncykpCiAJICAgIHJldHVybiAxOwpkaWZmIC0tZ2l0 IGEvd2luc3VwL2N5Z3dpbi9maGFuZGxlcl9wcm9jZXNzX2ZkLmNjIGIvd2lu c3VwL2N5Z3dpbi9maGFuZGxlcl9wcm9jZXNzX2ZkLmNjCmluZGV4IDNiZjhi NzRkOC4uNzFiYThiNjQ1IDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL2Zo YW5kbGVyX3Byb2Nlc3NfZmQuY2MKKysrIGIvd2luc3VwL2N5Z3dpbi9maGFu ZGxlcl9wcm9jZXNzX2ZkLmNjCkBAIC0xMTYsNyArMTE2LDcgQEAgZmhhbmRs ZXJfcHJvY2Vzc19mZDo6ZmRfcmVvcGVuIChpbnQgZmxhZ3MsIG1vZGVfdCBt b2RlKQogICBmaCA9IGZldGNoX2ZoIChoZGwsIDApOwogICBpZiAoIWZoKQog ICAgIHJldHVybiBOVUxMOwotICBmaC0+c2V0X2lvX2hhbmRsZSAoaGRsKTsK KyAgZmgtPnNldF9oYW5kbGUgKGhkbCk7CiAgIGludCByZXQgPSBmaC0+b3Bl bl93aXRoX2FyY2ggKGZsYWdzLCBtb2RlKTsKICAgQ2xvc2VIYW5kbGUgKGhk bCk7CiAgIGlmICghcmV0KQpAQCAtMTM5LDcgKzEzOSw3IEBAIGZoYW5kbGVy X3Byb2Nlc3NfZmQ6OmZzdGF0IChzdHJ1Y3Qgc3RhdCAqc3RhdGJ1ZikKICAg ZmggPSBmZXRjaF9maCAoaGRsLCAwKTsKICAgaWYgKCFmaCkKICAgICByZXR1 cm4gLTE7Ci0gIGZoLT5zZXRfaW9faGFuZGxlIChoZGwpOworICBmaC0+c2V0 X2hhbmRsZSAoaGRsKTsKICAgaW50IHJldCA9IGZoLT5mc3RhdCAoc3RhdGJ1 Zik7CiAgIENsb3NlSGFuZGxlIChoZGwpOwogICBkZWxldGUgZmg7CkBAIC0x NTUsNyArMTU1LDcgQEAgZmhhbmRsZXJfcHJvY2Vzc19mZDo6bGluayAoY29u c3QgY2hhciAqbmV3cGF0aCkKICAgZmggPSBmZXRjaF9maCAoaGRsLCBGRkhf TElOS0FUKTsKICAgaWYgKCFmaCkKICAgICByZXR1cm4gLTE7Ci0gIGZoLT5z ZXRfaW9faGFuZGxlIChoZGwpOworICBmaC0+c2V0X2hhbmRsZSAoaGRsKTsK ICAgaW50IHJldCA9IGZoLT5saW5rIChuZXdwYXRoKTsKICAgQ2xvc2VIYW5k bGUgKGhkbCk7CiAgIGRlbGV0ZSBmaDsKZGlmZiAtLWdpdCBhL3dpbnN1cC9j eWd3aW4vZmhhbmRsZXJfcmVnaXN0cnkuY2MgYi93aW5zdXAvY3lnd2luL2Zo YW5kbGVyX3JlZ2lzdHJ5LmNjCmluZGV4IDZjNjcwMmFmZC4uZWNhZWQwODVj IDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX3JlZ2lzdHJ5 LmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfcmVnaXN0cnkuY2MK QEAgLTgyNiw3ICs4MjYsNyBAQCBmaGFuZGxlcl9yZWdpc3RyeTo6b3BlbiAo aW50IGZsYWdzLCBtb2RlX3QgbW9kZSkKIAkgICAgICB9CiAJICAgIGVsc2UK IAkgICAgICB7Ci0JCXNldF9pb19oYW5kbGUgKGZldGNoX2hrZXkgKGkpKTsK KwkJc2V0X2hhbmRsZSAoZmV0Y2hfaGtleSAoaSkpOwogCQkvKiBNYXJraW5n IGFzIG5vaGFuZGxlIGFsbG93cyB0byBjYWxsIGR1cCBvbiBwc2V1ZG8gcmVn aXN0cnkKIAkJICAgaGFuZGxlcy4gKi8KIAkJaWYgKGdldF9oYW5kbGUgKCkg Pj0gSEtFWV9DTEFTU0VTX1JPT1QpCkBAIC04ODEsNyArODgxLDcgQEAgZmhh bmRsZXJfcmVnaXN0cnk6Om9wZW4gKGludCBmbGFncywgbW9kZV90IG1vZGUp CiAgICAgICBlbHNlCiAJZmxhZ3MgfD0gT19ESVJPUEVOOwogCi0gICAgICBz ZXRfaW9faGFuZGxlIChoYW5kbGUpOworICAgICAgc2V0X2hhbmRsZSAoaGFu ZGxlKTsKICAgICAgIHNldF9jbG9zZV9vbl9leGVjICghIShmbGFncyAmIE9f Q0xPRVhFQykpOwogICAgICAgdmFsdWVfbmFtZSA9IGN3Y3NkdXAgKGRlY19m aWxlKTsKIApAQCAtMTExOCw3ICsxMTE4LDcgQEAgZmhhbmRsZXJfcmVnaXN0 cnk6OmR1cCAoZmhhbmRsZXJfYmFzZSAqY2hpbGQsIGludCBmbGFncykKICAg ICAgYWxsb3dzIGZoYW5kbGVyX2Jhc2U6OmR1cCB0byBzdWNjZWVkIGFzIHVz dWFsIGZvciBub2hhbmRsZSBmaGFuZGxlcnMuCiAgICAgIEhlcmUgd2UganVz dCBoYXZlIHRvIGZpeCB1cCBieSBjb3B5aW5nIHRoZSBwc2V1ZG8gaGFuZGxl IHZhbHVlLiAqLwogICBpZiAoKEhLRVkpIGdldF9oYW5kbGUgKCkgPj0gSEtF WV9DTEFTU0VTX1JPT1QpCi0gICAgZmhzLT5zZXRfaW9faGFuZGxlIChnZXRf aGFuZGxlICgpKTsKKyAgICBmaHMtPnNldF9oYW5kbGUgKGdldF9oYW5kbGUg KCkpOwogICBpZiAodmFsdWVfbmFtZSkKICAgICBmaHMtPnZhbHVlX25hbWUg PSBjd2NzZHVwICh2YWx1ZV9uYW1lKTsKICAgcmV0dXJuIHJldDsKZGlmZiAt LWdpdCBhL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfc29ja2V0X2luZXQuY2Mg Yi93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX3NvY2tldF9pbmV0LmNjCmluZGV4 IGRiZmJjZjU4OC4uNDZhZjFjNGJlIDEwMDY0NAotLS0gYS93aW5zdXAvY3ln d2luL2ZoYW5kbGVyX3NvY2tldF9pbmV0LmNjCisrKyBiL3dpbnN1cC9jeWd3 aW4vZmhhbmRsZXJfc29ja2V0X2luZXQuY2MKQEAgLTUxOCwxNCArNTE4LDE0 IEBAIGZoYW5kbGVyX3NvY2tldF93c29jazo6Zml4dXBfYWZ0ZXJfZm9yayAo SEFORExFIHBhcmVudCkKICAgaWYgKG5ld19zb2NrID09IElOVkFMSURfU09D S0VUKQogICAgIHsKICAgICAgIHNldF93aW5zb2NrX2Vycm5vICgpOwotICAg ICAgc2V0X2lvX2hhbmRsZSAoKEhBTkRMRSkgSU5WQUxJRF9TT0NLRVQpOwor ICAgICAgc2V0X2hhbmRsZSAoKEhBTkRMRSkgSU5WQUxJRF9TT0NLRVQpOwog ICAgIH0KICAgZWxzZQogICAgIHsKICAgICAgIC8qIEV2ZW4gdGhvdWdoIHRo ZSBvcmlnaW5hbCBzb2NrZXQgd2FzIG5vdCBpbmhlcml0YWJsZSwgdGhlIGR1 cGxpY2F0ZWQKIAkgc29ja2V0IGlzIHBvdGVudGlhbGx5IGluaGVyaXRhYmxl IGFnYWluLiAqLwogICAgICAgU2V0SGFuZGxlSW5mb3JtYXRpb24gKChIQU5E TEUpIG5ld19zb2NrLCBIQU5ETEVfRkxBR19JTkhFUklULCAwKTsKLSAgICAg IHNldF9pb19oYW5kbGUgKChIQU5ETEUpIG5ld19zb2NrKTsKKyAgICAgIHNl dF9oYW5kbGUgKChIQU5ETEUpIG5ld19zb2NrKTsKICAgICAgIGRlYnVnX3By aW50ZiAoIldTQVNvY2tldCBzdWNjZWVkZWQgKCVwKSIsIG5ld19zb2NrKTsK ICAgICB9CiB9CkBAIC01NzEsMTMgKzU3MSwxMyBAQCBmaGFuZGxlcl9zb2Nr ZXRfd3NvY2s6OmR1cCAoZmhhbmRsZXJfYmFzZSAqY2hpbGQsIGludCBmbGFn cykKIAogICBjeWdoZWFwLT51c2VyLmRlaW1wZXJzb25hdGUgKCk7CiAgIGZo cy0+aW5pdF9maXh1cF9iZWZvcmUgKCk7Ci0gIGZocy0+c2V0X2lvX2hhbmRs ZSAoZ2V0X2lvX2hhbmRsZSAoKSk7CisgIGZocy0+c2V0X2hhbmRsZSAoZ2V0 X2hhbmRsZSAoKSk7CiAgIGludCByZXQgPSBmaHMtPmZpeHVwX2JlZm9yZV9m b3JrX2V4ZWMgKEdldEN1cnJlbnRQcm9jZXNzSWQgKCkpOwogICBjeWdoZWFw LT51c2VyLnJlaW1wZXJzb25hdGUgKCk7CiAgIGlmICghcmV0KQogICAgIHsK ICAgICAgIGZocy0+Zml4dXBfYWZ0ZXJfZm9yayAoR2V0Q3VycmVudFByb2Nl c3MgKCkpOwotICAgICAgaWYgKGZocy0+Z2V0X2lvX2hhbmRsZSgpICE9IChI QU5ETEUpIElOVkFMSURfU09DS0VUKQorICAgICAgaWYgKGZocy0+Z2V0X2hh bmRsZSgpICE9IChIQU5ETEUpIElOVkFMSURfU09DS0VUKQogCXJldHVybiAw OwogICAgIH0KICAgY3lnaGVhcC0+ZmR0YWIuZGVjX25lZWRfZml4dXBfYmVm b3JlICgpOwpAQCAtNjQ1LDcgKzY0NSw3IEBAIGZoYW5kbGVyX3NvY2tldF93 c29jazo6c2V0X3NvY2tldF9oYW5kbGUgKFNPQ0tFVCBzb2NrLCBpbnQgYWYs IGludCB0eXBlLAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQot ICBzZXRfaW9faGFuZGxlICgoSEFORExFKSBzb2NrKTsKKyAgc2V0X2hhbmRs ZSAoKEhBTkRMRSkgc29jayk7CiAgIHNldF9hZGRyX2ZhbWlseSAoYWYpOwog ICBzZXRfc29ja2V0X3R5cGUgKHR5cGUpOwogICBpZiAoIWluaXRfZXZlbnRz ICgpKQpkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9maGFuZGxlcl9zb2Nr ZXRfdW5peC5jYyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfc29ja2V0X3Vu aXguY2MKaW5kZXggZTcxZDJhNzIyLi5lZWE3ZTc2YjMgMTAwNjQ0Ci0tLSBh L3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfc29ja2V0X3VuaXguY2MKKysrIGIv d2luc3VwL2N5Z3dpbi9maGFuZGxlcl9zb2NrZXRfdW5peC5jYwpAQCAtOTM4 LDcgKzkzOCw3IEBAIGZoYW5kbGVyX3NvY2tldF91bml4OjpvcGVuX3BpcGUg KFBVTklDT0RFX1NUUklORyBwaXBlX25hbWUsIGJvb2wgeGNoZ19zb2NrX2lu Zm8pCiAgIHN0YXR1cyA9IE50T3BlbkZpbGUgKCZwaCwgYWNjZXNzLCAmYXR0 ciwgJmlvLCBzaGFyaW5nLCAwKTsKICAgaWYgKE5UX1NVQ0NFU1MgKHN0YXR1 cykpCiAgICAgewotICAgICAgc2V0X2lvX2hhbmRsZSAocGgpOworICAgICAg c2V0X2hhbmRsZSAocGgpOwogICAgICAgaWYgKHhjaGdfc29ja19pbmZvKQog CXNlbmRfc29ja19pbmZvIChmYWxzZSk7CiAgICAgfQpAQCAtMTM2NSw3ICsx MzY1LDcgQEAgZmhhbmRsZXJfc29ja2V0X3VuaXg6OnNvY2tldCAoaW50IGFm LCBpbnQgdHlwZSwgaW50IHByb3RvY29sLCBpbnQgZmxhZ3MpCiAgIGlmIChm bGFncyAmIFNPQ0tfQ0xPRVhFQykKICAgICBzZXRfY2xvc2Vfb25fZXhlYyAo dHJ1ZSk7CiAgIGluaXRfY3JlZCAoKTsKLSAgc2V0X2lvX2hhbmRsZSAoTlVM TCk7CisgIHNldF9oYW5kbGUgKE5VTEwpOwogICBzZXRfdW5pcXVlX2lkICgp OwogICBzZXRfaW5vIChnZXRfdW5pcXVlX2lkICgpKTsKICAgcmV0dXJuIDA7 CkBAIC0xNDEyLDcgKzE0MTIsNyBAQCBmaGFuZGxlcl9zb2NrZXRfdW5peDo6 c29ja2V0cGFpciAoaW50IGFmLCBpbnQgdHlwZSwgaW50IHByb3RvY29sLCBp bnQgZmxhZ3MsCiAgIHBpcGUgPSBjcmVhdGVfcGlwZSAodHJ1ZSk7CiAgIGlm ICghcGlwZSkKICAgICBnb3RvIGNyZWF0ZV9waXBlX2ZhaWxlZDsKLSAgc2V0 X2lvX2hhbmRsZSAocGlwZSk7CisgIHNldF9oYW5kbGUgKHBpcGUpOwogICBz dW5fcGF0aCAoJnN1bik7CiAgIGZoLT5wZWVyX3N1bl9wYXRoICgmc3VuKTsK ICAgY29ubmVjdF9zdGF0ZSAobGlzdGVuZXIpOwpAQCAtMTQ4MywxMiArMTQ4 MywxMiBAQCBmaGFuZGxlcl9zb2NrZXRfdW5peDo6YmluZCAoY29uc3Qgc3Ry dWN0IHNvY2thZGRyICpuYW1lLCBpbnQgbmFtZWxlbikKIAkgIGJpbmRpbmdf c3RhdGUgKHVuYm91bmQpOwogCSAgcmV0dXJuIC0xOwogCX0KLSAgICAgIHNl dF9pb19oYW5kbGUgKHBpcGUpOworICAgICAgc2V0X2hhbmRsZSAocGlwZSk7 CiAgICAgfQogICBiYWNraW5nX2ZpbGVfaGFuZGxlID0gdW5uYW1lZCA/IGF1 dG9iaW5kICgmc3VuKSA6IGNyZWF0ZV9maWxlICgmc3VuKTsKICAgaWYgKCFi YWNraW5nX2ZpbGVfaGFuZGxlKQogICAgIHsKLSAgICAgIHNldF9pb19oYW5k bGUgKE5VTEwpOworICAgICAgc2V0X2hhbmRsZSAoTlVMTCk7CiAgICAgICBp ZiAocGlwZSkKIAlOdENsb3NlIChwaXBlKTsKICAgICAgIGJpbmRpbmdfc3Rh dGUgKHVuYm91bmQpOwpAQCAtMTUzOCw3ICsxNTM4LDcgQEAgZmhhbmRsZXJf c29ja2V0X3VuaXg6Omxpc3RlbiAoaW50IGJhY2tsb2cpCiAgICAgICBjb25u ZWN0X3N0YXRlICh1bmNvbm5lY3RlZCk7CiAgICAgICByZXR1cm4gLTE7CiAg ICAgfQotICBzZXRfaW9faGFuZGxlIChwaXBlKTsKKyAgc2V0X2hhbmRsZSAo cGlwZSk7CiAgIHN0YXRlX2xvY2sgKCk7CiAgIHNldF9jcmVkICgpOwogICBz dGF0ZV91bmxvY2sgKCk7CkBAIC0xNTc1LDcgKzE1NzUsNyBAQCBmaGFuZGxl cl9zb2NrZXRfdW5peDo6YWNjZXB0NCAoc3RydWN0IHNvY2thZGRyICpwZWVy LCBpbnQgKmxlbiwgaW50IGZsYWdzKQogICAgICAgZWxzZQogCXsKIAkgIC8q IFNldCBuZXcgaW8gaGFuZGxlLiAqLwotCSAgc2V0X2lvX2hhbmRsZSAobmV3 X2luc3QpOworCSAgc2V0X2hhbmRsZSAobmV3X2luc3QpOwogCSAgaW9fdW5s b2NrICgpOwogCSAgLyogUHJlcGFyZSBuZXcgZmlsZSBkZXNjcmlwdG9yLiAq LwogCSAgY3lnaGVhcF9mZG5ldyBmZDsKQEAgLTE2MDAsNyArMTYwMCw3IEBA IGZoYW5kbGVyX3NvY2tldF91bml4OjphY2NlcHQ0IChzdHJ1Y3Qgc29ja2Fk ZHIgKnBlZXIsIGludCAqbGVuLCBpbnQgZmxhZ3MpCiAJCSAgc29jay0+cGMu c2V0X250X25hdGl2ZV9wYXRoIChwYy5nZXRfbnRfbmF0aXZlX3BhdGggKCkp OwogCQkgIHNvY2stPmNvbm5lY3Rfc3RhdGUgKGNvbm5lY3RlZCk7CiAJCSAg c29jay0+YmluZGluZ19zdGF0ZSAoYmluZGluZ19zdGF0ZSAoKSk7Ci0JCSAg c29jay0+c2V0X2lvX2hhbmRsZSAoYWNjZXB0ZWQpOworCQkgIHNvY2stPnNl dF9oYW5kbGUgKGFjY2VwdGVkKTsKIAogCQkgIHNvY2stPnN1bl9wYXRoIChz dW5fcGF0aCAoKSk7CiAJCSAgc29jay0+c29ja19jcmVkIChzb2NrX2NyZWQg KCkpOwpkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9maGFuZGxlcl90dHku Y2MgYi93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX3R0eS5jYwppbmRleCA3ZmU0 NmViZWYuLjMxMmMyZDA4MyAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9m aGFuZGxlcl90dHkuY2MKKysrIGIvd2luc3VwL2N5Z3dpbi9maGFuZGxlcl90 dHkuY2MKQEAgLTIzNSw3ICsyMzUsNyBAQCBmaGFuZGxlcl9wdHlfbWFzdGVy Ojpwcm9jZXNzX3NsYXZlX291dHB1dCAoY2hhciAqYnVmLCBzaXplX3QgbGVu LCBpbnQgcGt0bW9kZV9vbgogCSAgLyogQ2hlY2sgZWNobyBwaXBlIGZpcnN0 LiAqLwogCSAgaWYgKDo6Ynl0ZXNfYXZhaWxhYmxlIChlY2hvX2NudCwgZWNo b19yKSAmJiBlY2hvX2NudCA+IDApCiAJICAgIGJyZWFrOwotCSAgaWYgKCE6 OmJ5dGVzX2F2YWlsYWJsZSAobiwgZ2V0X2lvX2hhbmRsZV9jeWcgKCkpKQor CSAgaWYgKCE6OmJ5dGVzX2F2YWlsYWJsZSAobiwgZ2V0X2hhbmRsZV9jeWcg KCkpKQogCSAgICBnb3RvIGVycjsKIAkgIGlmIChuKQogCSAgICBicmVhazsK QEAgLTI5Niw3ICsyOTYsNyBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpwcm9j ZXNzX3NsYXZlX291dHB1dCAoY2hhciAqYnVmLCBzaXplX3QgbGVuLCBpbnQg cGt0bW9kZV9vbgogCSAgICAgIGdvdG8gZXJyOwogCSAgICB9CiAJfQotICAg ICAgZWxzZSBpZiAoIVJlYWRGaWxlIChnZXRfaW9faGFuZGxlX2N5ZyAoKSwg b3V0YnVmLCBybGVuLCAmbiwgTlVMTCkpCisgICAgICBlbHNlIGlmICghUmVh ZEZpbGUgKGdldF9oYW5kbGVfY3lnICgpLCBvdXRidWYsIHJsZW4sICZuLCBO VUxMKSkKIAl7CiAJICB0ZXJtaW9zX3ByaW50ZiAoIlJlYWRGaWxlIGZhaWxl ZCwgJUUiKTsKIAkgIGdvdG8gZXJyOwpAQCAtNDk0LDcgKzQ5NCw3IEBAIGZo YW5kbGVyX3B0eV9zbGF2ZTo6b3BlbiAoaW50IGZsYWdzLCBtb2RlX3QpCiAg IHRlcm1pb3NfcHJpbnRmICgiZHVwbGljYXRlZCB0b19tYXN0ZXJfY3lnICVw LT4lcCBmcm9tIHB0eV9vd25lciIsCiAJCSAgZ2V0X3R0eXAgKCktPnRvX21h c3Rlcl9jeWcgKCksIHRvX21hc3Rlcl9jeWdfbG9jYWwpOwogCi0gIHNldF9p b19oYW5kbGUgKGZyb21fbWFzdGVyX2xvY2FsKTsKKyAgc2V0X2hhbmRsZSAo ZnJvbV9tYXN0ZXJfbG9jYWwpOwogICBzZXRfb3V0cHV0X2hhbmRsZSAodG9f bWFzdGVyX2xvY2FsKTsKICAgc2V0X291dHB1dF9oYW5kbGVfY3lnICh0b19t YXN0ZXJfY3lnX2xvY2FsKTsKIApAQCAtMTM0NywxMSArMTM0NywxMSBAQCBm aGFuZGxlcl9wdHlfbWFzdGVyOjpjbG9zZSAoKQogICBpZiAoIUZvcmNlQ2xv c2VIYW5kbGUgKHRvX21hc3RlcikpCiAgICAgdGVybWlvc19wcmludGYgKCJl cnJvciBjbG9zaW5nIHRvX21hc3RlciAlcCwgJUUiLCB0b19tYXN0ZXIpOwog ICBmcm9tX21hc3RlciA9IHRvX21hc3RlciA9IE5VTEw7Ci0gIGlmICghRm9y Y2VDbG9zZUhhbmRsZSAoZ2V0X2lvX2hhbmRsZV9jeWcgKCkpKQotICAgIHRl cm1pb3NfcHJpbnRmICgiZXJyb3IgY2xvc2luZyBpb19oYW5kbGVfY3lnICVw LCAlRSIsIGdldF9pb19oYW5kbGVfY3lnICgpKTsKKyAgaWYgKCFGb3JjZUNs b3NlSGFuZGxlIChnZXRfaGFuZGxlX2N5ZyAoKSkpCisgICAgdGVybWlvc19w cmludGYgKCJlcnJvciBjbG9zaW5nIGlvX2hhbmRsZV9jeWcgJXAsICVFIiwg Z2V0X2hhbmRsZV9jeWcgKCkpOwogICBpZiAoIUZvcmNlQ2xvc2VIYW5kbGUg KHRvX21hc3Rlcl9jeWcpKQogICAgIHRlcm1pb3NfcHJpbnRmICgiZXJyb3Ig Y2xvc2luZyB0b19tYXN0ZXJfY3lnICVwLCAlRSIsIHRvX21hc3Rlcl9jeWcp OwotICBnZXRfaW9faGFuZGxlX2N5ZyAoKSA9IHRvX21hc3Rlcl9jeWcgPSBO VUxMOworICBnZXRfaGFuZGxlX2N5ZyAoKSA9IHRvX21hc3Rlcl9jeWcgPSBO VUxMOwogICBGb3JjZUNsb3NlSGFuZGxlIChlY2hvX3IpOwogICBGb3JjZUNs b3NlSGFuZGxlIChlY2hvX3cpOwogICBlY2hvX3IgPSBlY2hvX3cgPSBOVUxM OwpAQCAtMTQ1OCw3ICsxNDU4LDcgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6 aW9jdGwgKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKICAgICBjYXNl IEZJT05SRUFEOgogICAgICAgewogCURXT1JEIG47Ci0JaWYgKCE6OmJ5dGVz X2F2YWlsYWJsZSAobiwgZ2V0X2lvX2hhbmRsZV9jeWcgKCkpKQorCWlmICgh OjpieXRlc19hdmFpbGFibGUgKG4sIGdldF9oYW5kbGVfY3lnICgpKSkKIAkg IHsKIAkgICAgc2V0X2Vycm5vIChFSU5WQUwpOwogCSAgICByZXR1cm4gLTE7 CkBAIC0xNjYyLDcgKzE2NjIsNyBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpw dHlfbWFzdGVyX2Z3ZF90aHJlYWQgKCkKICAgdGVybWlvc19wcmludGYoIlN0 YXJ0ZWQuIik7CiAgIGZvciAoOzspCiAgICAgewotICAgICAgaWYgKCFSZWFk RmlsZSAoZ2V0X2lvX2hhbmRsZSAoKSwgb3V0YnVmLCBzaXplb2Ygb3V0YnVm LCAmcmxlbiwgTlVMTCkpCisgICAgICBpZiAoIVJlYWRGaWxlIChnZXRfaGFu ZGxlICgpLCBvdXRidWYsIHNpemVvZiBvdXRidWYsICZybGVuLCBOVUxMKSkK IAl7CiAJICB0ZXJtaW9zX3ByaW50ZiAoIlJlYWRGaWxlIGZvciBmb3J3YXJk aW5nIGZhaWxlZCwgJUUiKTsKIAkgIGJyZWFrOwpAQCAtMTcxNSw3ICsxNzE1 LDcgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6c2V0dXAgKCkKIAogICBjaGFy IHBpcGVuYW1lW3NpemVvZigicHR5Tk5OTi10by1tYXN0ZXItY3lnIildOwog ICBfX3NtYWxsX3NwcmludGYgKHBpcGVuYW1lLCAicHR5JWQtdG8tbWFzdGVy IiwgdW5pdCk7Ci0gIHJlcyA9IGZoYW5kbGVyX3BpcGU6OmNyZWF0ZSAoJnNl Y19ub25lLCAmZ2V0X2lvX2hhbmRsZSAoKSwgJnRvX21hc3RlciwKKyAgcmVz ID0gZmhhbmRsZXJfcGlwZTo6Y3JlYXRlICgmc2VjX25vbmUsICZnZXRfaGFu ZGxlICgpLCAmdG9fbWFzdGVyLAogCQkJICAgICAgIGZoYW5kbGVyX3B0eV9j b21tb246OnBpcGVzaXplLCBwaXBlbmFtZSwgMCk7CiAgIGlmIChyZXMpCiAg ICAgewpAQCAtMTcyNCw3ICsxNzI0LDcgQEAgZmhhbmRsZXJfcHR5X21hc3Rl cjo6c2V0dXAgKCkKICAgICB9CiAKICAgX19zbWFsbF9zcHJpbnRmIChwaXBl bmFtZSwgInB0eSVkLXRvLW1hc3Rlci1jeWciLCB1bml0KTsKLSAgcmVzID0g ZmhhbmRsZXJfcGlwZTo6Y3JlYXRlICgmc2VjX25vbmUsICZnZXRfaW9faGFu ZGxlX2N5ZyAoKSwgJnRvX21hc3Rlcl9jeWcsCisgIHJlcyA9IGZoYW5kbGVy X3BpcGU6OmNyZWF0ZSAoJnNlY19ub25lLCAmZ2V0X2hhbmRsZV9jeWcgKCks ICZ0b19tYXN0ZXJfY3lnLAogCQkJICAgICAgIGZoYW5kbGVyX3B0eV9jb21t b246OnBpcGVzaXplLCBwaXBlbmFtZSwgMCk7CiAgIGlmIChyZXMpCiAgICAg ewpAQCAtMTczMiw3ICsxNzMyLDcgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6 c2V0dXAgKCkKICAgICAgIGdvdG8gZXJyOwogICAgIH0KIAotICBQcm90ZWN0 SGFuZGxlMSAoZ2V0X2lvX2hhbmRsZSAoKSwgZnJvbV9wdHkpOworICBQcm90 ZWN0SGFuZGxlMSAoZ2V0X2hhbmRsZSAoKSwgZnJvbV9wdHkpOwogCiAgIF9f c21hbGxfc3ByaW50ZiAocGlwZW5hbWUsICJwdHklZC1lY2hvbG9vcCIsIHVu aXQpOwogICByZXMgPSBmaGFuZGxlcl9waXBlOjpjcmVhdGUgKCZzZWNfbm9u ZSwgJmVjaG9fciwgJmVjaG9fdywKQEAgLTE4MDcsMTQgKzE4MDcsMTQgQEAg ZmhhbmRsZXJfcHR5X21hc3Rlcjo6c2V0dXAgKCkKICAgZGV2ICgpLnBhcnNl IChERVZfUFRZTV9NQUpPUiwgdW5pdCk7CiAKICAgdGVybWlvc19wcmludGYg KCJ0aGlzICVwLCBwdHklZCBvcGVuZWQgLSBmcm9tX3B0eSA8JXAsJXA+LCB0 b19wdHkgJXAiLAotCXRoaXMsIHVuaXQsIGdldF9pb19oYW5kbGUgKCksIGdl dF9pb19oYW5kbGVfY3lnICgpLAorCXRoaXMsIHVuaXQsIGdldF9oYW5kbGUg KCksIGdldF9oYW5kbGVfY3lnICgpLAogCWdldF9vdXRwdXRfaGFuZGxlICgp KTsKICAgcmV0dXJuIHRydWU7CiAKIGVycjoKICAgX19zZXRlcnJubyAoKTsK LSAgY2xvc2VfbWF5YmUgKGdldF9pb19oYW5kbGUgKCkpOwotICBjbG9zZV9t YXliZSAoZ2V0X2lvX2hhbmRsZV9jeWcgKCkpOworICBjbG9zZV9tYXliZSAo Z2V0X2hhbmRsZSAoKSk7CisgIGNsb3NlX21heWJlIChnZXRfaGFuZGxlX2N5 ZyAoKSk7CiAgIGNsb3NlX21heWJlIChnZXRfb3V0cHV0X2hhbmRsZSAoKSk7 CiAgIGNsb3NlX21heWJlIChpbnB1dF9hdmFpbGFibGVfZXZlbnQpOwogICBj bG9zZV9tYXliZSAob3V0cHV0X211dGV4KTsKZGlmZiAtLWdpdCBhL3dpbnN1 cC9jeWd3aW4vbW1hcC5jYyBiL3dpbnN1cC9jeWd3aW4vbW1hcC5jYwppbmRl eCAxZDgxZDUzNGYuLjllYjE2NDNhMCAxMDA2NDQKLS0tIGEvd2luc3VwL2N5 Z3dpbi9tbWFwLmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vbW1hcC5jYwpAQCAt NTE2LDcgKzUxNiw3IEBAIG1tYXBfcmVjb3JkOjphbGxvY19maCAoKQogewog ICBpZiAoYW5vbnltb3VzICgpKQogICAgIHsKLSAgICAgIGZoX2Fub255bW91 cy5zZXRfaW9faGFuZGxlIChJTlZBTElEX0hBTkRMRV9WQUxVRSk7CisgICAg ICBmaF9hbm9ueW1vdXMuc2V0X2hhbmRsZSAoSU5WQUxJRF9IQU5ETEVfVkFM VUUpOwogICAgICAgZmhfYW5vbnltb3VzLnNldF9hY2Nlc3MgKEdFTkVSSUNf UkVBRCB8IEdFTkVSSUNfV1JJVEUgfCBHRU5FUklDX0VYRUNVVEUpOwogICAg ICAgcmV0dXJuICZmaF9hbm9ueW1vdXM7CiAgICAgfQpAQCAtOTAxLDcgKzkw MSw3IEBAIG1tYXA2NCAodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IHBy b3QsIGludCBmbGFncywgaW50IGZkLCBvZmZfdCBvZmYpCiAKICAgc2l6ZV90 IHBhZ2VzaXplID0gd2luY2FwLmFsbG9jYXRpb25fZ3JhbnVsYXJpdHkgKCk7 CiAKLSAgZmhfYW5vbnltb3VzLnNldF9pb19oYW5kbGUgKElOVkFMSURfSEFO RExFX1ZBTFVFKTsKKyAgZmhfYW5vbnltb3VzLnNldF9oYW5kbGUgKElOVkFM SURfSEFORExFX1ZBTFVFKTsKICAgZmhfYW5vbnltb3VzLnNldF9hY2Nlc3Mg KEdFTkVSSUNfUkVBRCB8IEdFTkVSSUNfV1JJVEUgfCBHRU5FUklDX0VYRUNV VEUpOwogCiAgIC8qIEVJTlZBTCBlcnJvciBjb25kaXRpb25zLiAqLwpAQCAt MTAzMyw3ICsxMDMzLDcgQEAgbW1hcDY0ICh2b2lkICphZGRyLCBzaXplX3Qg bGVuLCBpbnQgcHJvdCwgaW50IGZsYWdzLCBpbnQgZmQsIG9mZl90IG9mZikK IAkgIGZoX2Rpc2tfZmlsZSA9IG5ldyAoY2NhbGxvYyAoSEVBUF9GSEFORExF UiwgMSwgc2l6ZW9mICpmaF9kaXNrX2ZpbGUpKQogCQkJICAgICBmaGFuZGxl cl9kaXNrX2ZpbGU7CiAJICBmaF9kaXNrX2ZpbGUtPnNldF9uYW1lIChmaC0+ cGMpOwotCSAgZmhfZGlza19maWxlLT5zZXRfaW9faGFuZGxlIChoKTsKKwkg IGZoX2Rpc2tfZmlsZS0+c2V0X2hhbmRsZSAoaCk7CiAJICBmaF9kaXNrX2Zp bGUtPnNldF9hY2Nlc3MgKGZoLT5nZXRfYWNjZXNzICgpIHwgR0VORVJJQ19F WEVDVVRFKTsKIAkgIGZoID0gZmhfZGlza19maWxlOwogCX0KZGlmZiAtLWdp dCBhL3dpbnN1cC9jeWd3aW4vc2VsZWN0LmNjIGIvd2luc3VwL2N5Z3dpbi9z ZWxlY3QuY2MKaW5kZXggOTkxNDk0YWE4Li45YjE4ZThmODAgMTAwNjQ0Ci0t LSBhL3dpbnN1cC9jeWd3aW4vc2VsZWN0LmNjCisrKyBiL3dpbnN1cC9jeWd3 aW4vc2VsZWN0LmNjCkBAIC03NCw3ICs3NCw3IEBAIGRldGFpbHMuICovCiB9 KQogCiAjZGVmaW5lIHNldF9oYW5kbGVfb3JfcmV0dXJuX2lmX25vdF9vcGVu KGgsIHMpIFwKLSAgaCA9IChzKS0+ZmgtPmdldF9pb19oYW5kbGVfY3lnICgp OyBcCisgIGggPSAocyktPmZoLT5nZXRfaGFuZGxlX2N5ZyAoKTsgXAogICBp ZiAoY3lnaGVhcC0+ZmR0YWIubm90X29wZW4gKChzKS0+ZmQpKSBcCiAgICAg eyBcCiAgICAgICAocyktPnRocmVhZF9lcnJubyA9ICBFQkFERjsgXApAQCAt MTQ1OSw3ICsxNDU5LDcgQEAgZmhhbmRsZXJfYmFzZTo6c2VsZWN0X3JlYWQg KHNlbGVjdF9zdHVmZiAqc3MpCiAgICAgICBzLT5zdGFydHVwID0gbm9fc3Rh cnR1cDsKICAgICAgIHMtPnZlcmlmeSA9IHZlcmlmeV9vazsKICAgICB9Ci0g IHMtPmggPSBnZXRfaW9faGFuZGxlX2N5ZyAoKTsKKyAgcy0+aCA9IGdldF9o YW5kbGVfY3lnICgpOwogICBzLT5yZWFkX3NlbGVjdGVkID0gdHJ1ZTsKICAg cy0+cmVhZF9yZWFkeSA9IHRydWU7CiAgIHJldHVybiBzOwpAQCAtMTQ3NCw3 ICsxNDc0LDcgQEAgZmhhbmRsZXJfYmFzZTo6c2VsZWN0X3dyaXRlIChzZWxl Y3Rfc3R1ZmYgKnNzKQogICAgICAgcy0+c3RhcnR1cCA9IG5vX3N0YXJ0dXA7 CiAgICAgICBzLT52ZXJpZnkgPSB2ZXJpZnlfb2s7CiAgICAgfQotICBzLT5o ID0gZ2V0X2hhbmRsZSAoKTsKKyAgcy0+aCA9IGdldF9vdXRwdXRfaGFuZGxl X2N5ZyAoKTsKICAgcy0+d3JpdGVfc2VsZWN0ZWQgPSB0cnVlOwogICBzLT53 cml0ZV9yZWFkeSA9IHRydWU7CiAgIHJldHVybiBzOwpAQCAtMTc0Nyw3ICsx NzQ3LDcgQEAgZmhhbmRsZXJfc29ja2V0X3VuaXg6OnNlbGVjdF9yZWFkIChz ZWxlY3Rfc3R1ZmYgKnNzKQogICAgICAgcy0+c3RhcnR1cCA9IG5vX3N0YXJ0 dXA7CiAgICAgICBzLT52ZXJpZnkgPSB2ZXJpZnlfb2s7CiAgICAgfQotICBz LT5oID0gZ2V0X2lvX2hhbmRsZV9jeWcgKCk7CisgIHMtPmggPSBnZXRfaGFu ZGxlX2N5ZyAoKTsKICAgcy0+cmVhZF9zZWxlY3RlZCA9IHRydWU7CiAgIHMt PnJlYWRfcmVhZHkgPSB0cnVlOwogICByZXR1cm4gczsKLS0gCjIuMTcuMAoK --Multipart=_Sat__30_Mar_2019_22_08_04_+0900_uR3j8n86EHhK01UI Content-Type: application/octet-stream; name="0002-Cygwin-console-rework-implementation.patch" Content-Disposition: attachment; filename="0002-Cygwin-console-rework-implementation.patch" Content-Transfer-Encoding: base64 Content-length: 68634 RnJvbSA4OGNkNGJiY2ExNzUwZTlhMzM1NDVlNTJjMDRiZTYyNDM3NmI4Mzhk IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUYWthc2hpIFlhbm8g PHRha2FzaGkueWFub0BuaWZ0eS5uZS5qcD4KRGF0ZTogU2F0LCAzMCBNYXIg MjAxOSAxNjoxNzoyMCArMDkwMApTdWJqZWN0OiBbUEFUQ0ggMi8zXSBDeWd3 aW46IGNvbnNvbGU6IHJld29yayBpbXBsZW1lbnRhdGlvbi4KCi0gUmV2aXNl IGNvbnNvbGUgY29kZSB0byB1dGlsaXplIHh0ZXJtIGVtdWxhdGlvbiBvZiBX aW5kb3dzIDEwLgogIFRoaXMgZW5hYmxlcyAyNCBiaXQgY29sb3Igc3VwcG9y dC4KLSBBZGQgZmFrZSAyNTYgY29sb3Igc3VwcG9ydCBmb3IgbGVnYWN5IGNv bnNvbGUuIE5vdywgdGhlIG5lYXJlc3QKICBjb2xvciBmcm9tIDE2IHN5c3Rl bSBjb2xvcnMgaXMgdXNlZC4KLSBGaXggYmVoYXZpb3VyIG9mIHNlbGVjdCgp IG9mIGNvbnNvbGUgaW4gY2Fub25pY2FsIG1vZGUuIFByZXZpb3VzbHksCiAg c2VsZWN0KCkgcmV0dXJuZWQgYnkgb25seSBvbmUga2V5IGV2ZW4gaW4gY2Fu b25pY2FsIG1vZGUuCi0gTWFrZSB0aGUgY29uc29sZSBJL08gZnVuY3Rpb25z IHRocmVhZC1zYWZlLgotLS0KIHdpbnN1cC9jeWd3aW4vZmhhbmRsZXIuaCAg ICAgICAgICB8ICAgMzYgKy0KIHdpbnN1cC9jeWd3aW4vZmhhbmRsZXJfY29u c29sZS5jYyB8IDEwODcgKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0K IHdpbnN1cC9jeWd3aW4vc2VsZWN0LmNjICAgICAgICAgICB8ICAgOTAgKy0t CiAzIGZpbGVzIGNoYW5nZWQsIDc3OSBpbnNlcnRpb25zKCspLCA0MzQgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9maGFuZGxl ci5oIGIvd2luc3VwL2N5Z3dpbi9maGFuZGxlci5oCmluZGV4IGIzMzZlYjYz YS4uMDQ3Nzg4OGQ3IDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL2ZoYW5k bGVyLmgKKysrIGIvd2luc3VwL2N5Z3dpbi9maGFuZGxlci5oCkBAIC0xNjk4 LDYgKzE2OTgsMTIgQEAgY2xhc3MgZmhhbmRsZXJfc2VyaWFsOiBwdWJsaWMg ZmhhbmRsZXJfYmFzZQogICB9CiB9OwogCisjZGVmaW5lIGFjcXVpcmVfaW5w dXRfbXV0ZXgobXMpIFwKKyAgX19hY3F1aXJlX2lucHV0X211dGV4IChfX1BS RVRUWV9GVU5DVElPTl9fLCBfX0xJTkVfXywgbXMpCisKKyNkZWZpbmUgcmVs ZWFzZV9pbnB1dF9tdXRleCgpIFwKKyAgX19yZWxlYXNlX2lucHV0X211dGV4 IChfX1BSRVRUWV9GVU5DVElPTl9fLCBfX0xJTkVfXykKKwogI2RlZmluZSBh Y3F1aXJlX291dHB1dF9tdXRleChtcykgXAogICBfX2FjcXVpcmVfb3V0cHV0 X211dGV4IChfX1BSRVRUWV9GVU5DVElPTl9fLCBfX0xJTkVfXywgbXMpCiAK QEAgLTE3NzgsNiArMTc4NCw4IEBAIGVudW0gYW5zaV9pbnRlbnNpdHkKICNk ZWZpbmUgZWF0dGl0bGUgNwogI2RlZmluZSBnb3RwYXJlbiA4CiAjZGVmaW5l IGdvdHJwYXJlbiA5CisjZGVmaW5lIGVhdHBhbGV0dGUgMTAKKyNkZWZpbmUg ZW5kcGFsZXR0ZSAxMQogI2RlZmluZSBNQVhBUkdTIDEwCiAKIGVudW0gY2x0 eXBlCkBAIC0xNzkxLDYgKzE3OTksOSBAQCBlbnVtIGNsdHlwZQogCiBjbGFz cyBkZXZfY29uc29sZQogeworICBib29sIGNhcDI0Yml0X2NvbG9yOyAvKiAy NGJpdC1jb2xvciBjYXBhYmlsaXR5ICovCisgIHBpZF90IG93bmVyOworCiAg IFdPUkQgZGVmYXVsdF9jb2xvciwgdW5kZXJsaW5lX2NvbG9yLCBkaW1fY29s b3I7CiAKICAgLyogVXNlZCB0byBkZXRlcm1pbmUgaWYgYW4gaW5wdXQga2V5 c3Ryb2tlIHNob3VsZCBiZSBtb2RpZmllZCB3aXRoIE1FVEEuICovCkBAIC0x ODgwLDEwICsxODkxLDIwIEBAIHB1YmxpYzoKICAgICB0dHlfbWluIHR0eV9t aW5fc3RhdGU7CiAgICAgZGV2X2NvbnNvbGUgY29uOwogICB9OworICBib29s IGlucHV0X3JlYWR5OworICBlbnVtIGlucHV0X3N0YXRlcworICB7CisgICAg aW5wdXRfZXJyb3IgPSAtMSwKKyAgICBpbnB1dF9wcm9jZXNzaW5nID0gMCwK KyAgICBpbnB1dF9vayA9IDEsCisgICAgaW5wdXRfc2lnbmFsbGVkID0gMiwK KyAgICBpbnB1dF93aW5jaCA9IDMKKyAgfTsKIHByaXZhdGU6CiAgIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBNQVhfV1JJVEVfQ0hBUlM7CiAgIHN0YXRpYyBj b25zb2xlX3N0YXRlICpzaGFyZWRfY29uc29sZV9pbmZvOwogICBzdGF0aWMg Ym9vbCBpbnZpc2libGVfY29uc29sZTsKKyAgSEFORExFIGlucHV0X211dGV4 LCBvdXRwdXRfbXV0ZXg7CiAKICAgLyogVXNlZCB3aGVuIHdlIGVuY291bnRl ciBhIHRydW5jYXRlZCBtdWx0aS1ieXRlIHNlcXVlbmNlLiAgVGhlCiAgICAg IGxlYWQgYnl0ZXMgYXJlIHN0b3JlZCBoZXJlIGFuZCByZXZpc2l0ZWQgaW4g dGhlIG5leHQgd3JpdGUgY2FsbC4gKi8KQEAgLTE5NTMsOCArMTk3NCwxMSBA QCBwcml2YXRlOgogICBib29sIGZvY3VzX2F3YXJlICgpIHtyZXR1cm4gc2hh cmVkX2NvbnNvbGVfaW5mby0+Y29uLnVzZV9mb2N1czt9CiAgIGJvb2wgZ2V0 X2NvbnNfcmVhZGFoZWFkX3ZhbGlkICgpCiAgIHsKLSAgICByZXR1cm4gc2hh cmVkX2NvbnNvbGVfaW5mby0+Y29uLmNvbnNfcmFwb2kgIT0gTlVMTCAmJgor ICAgIGFjcXVpcmVfaW5wdXRfbXV0ZXggKElORklOSVRFKTsKKyAgICBib29s IHJldCA9IHNoYXJlZF9jb25zb2xlX2luZm8tPmNvbi5jb25zX3JhcG9pICE9 IE5VTEwgJiYKICAgICAgICpzaGFyZWRfY29uc29sZV9pbmZvLT5jb24uY29u c19yYXBvaTsKKyAgICByZWxlYXNlX2lucHV0X211dGV4ICgpOworICAgIHJl dHVybiByZXQ7CiAgIH0KIAogICBzZWxlY3RfcmVjb3JkICpzZWxlY3RfcmVh ZCAoc2VsZWN0X3N0dWZmICopOwpAQCAtMTk2NSw3ICsxOTg5LDcgQEAgcHJp dmF0ZToKICAgdm9pZCBmaXh1cF9hZnRlcl9mb3JrIChIQU5ETEUpIHtmaXh1 cF9hZnRlcl9mb3JrX2V4ZWMgKGZhbHNlKTt9CiAgIHZvaWQgc2V0X2Nsb3Nl X29uX2V4ZWMgKGJvb2wgdmFsKTsKICAgdm9pZCBzZXRfaW5wdXRfc3RhdGUg KCk7Ci0gIHZvaWQgc2VuZF93aW5jaF9tYXliZSAoKTsKKyAgYm9vbCBzZW5k X3dpbmNoX21heWJlICgpOwogICB2b2lkIHNldHVwICgpOwogICBib29sIHNl dF91bml0ICgpOwogICBzdGF0aWMgYm9vbCBuZWVkX2ludmlzaWJsZSAoKTsK QEAgLTE5ODgsNiArMjAxMiwxNCBAQCBwcml2YXRlOgogICAgIGNvcHl0byAo ZmgpOwogICAgIHJldHVybiBmaDsKICAgfQorCisgIGlucHV0X3N0YXRlcyBw cm9jZXNzX2lucHV0X21lc3NhZ2UgKCk7CisgIHZvaWQgc2V0dXBfaW9fbXV0 ZXggKHZvaWQpOworICBEV09SRCBfX2FjcXVpcmVfaW5wdXRfbXV0ZXggKGNv bnN0IGNoYXIgKmZuLCBpbnQgbG4sIERXT1JEIG1zKTsKKyAgdm9pZCBfX3Jl bGVhc2VfaW5wdXRfbXV0ZXggKGNvbnN0IGNoYXIgKmZuLCBpbnQgbG4pOwor ICBEV09SRCBfX2FjcXVpcmVfb3V0cHV0X211dGV4IChjb25zdCBjaGFyICpm biwgaW50IGxuLCBEV09SRCBtcyk7CisgIHZvaWQgX19yZWxlYXNlX291dHB1 dF9tdXRleCAoY29uc3QgY2hhciAqZm4sIGludCBsbik7CisKICAgZnJpZW5k IHR0eV9taW4gKiB0dHlfbGlzdDo6Z2V0X2N0dHlwICgpOwogfTsKIApkaWZm IC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9maGFuZGxlcl9jb25zb2xlLmNjIGIv d2luc3VwL2N5Z3dpbi9maGFuZGxlcl9jb25zb2xlLmNjCmluZGV4IDI4MWMy MDA1Yy4uZjdiNTBkMGE4IDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL2Zo YW5kbGVyX2NvbnNvbGUuY2MKKysrIGIvd2luc3VwL2N5Z3dpbi9maGFuZGxl cl9jb25zb2xlLmNjCkBAIC0xNSw2ICsxNSw3IEBAIGRldGFpbHMuICovCiAj aW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjaW5jbHVkZSA8c3lzL2N5Z3dpbi5o PgogI2luY2x1ZGUgPGN5Z3dpbi9rZC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5o PgogI2luY2x1ZGUgImN5Z2Vycm5vLmgiCiAjaW5jbHVkZSAic2VjdXJpdHku aCIKICNpbmNsdWRlICJwYXRoLmgiCkBAIC0zMiw2ICszMywxNiBAQCBkZXRh aWxzLiAqLwogI2luY2x1ZGUgImNoaWxkX2luZm8uaCIKICNpbmNsdWRlICJj eWd3YWl0LmgiCiAKKyNpZm5kZWYgRU5BQkxFX1ZJUlRVQUxfVEVSTUlOQUxf UFJPQ0VTU0lORworI2RlZmluZSBFTkFCTEVfVklSVFVBTF9URVJNSU5BTF9Q Uk9DRVNTSU5HIDB4MDAwNAorI2VuZGlmIC8qIEVOQUJMRV9WSVJUVUFMX1RF Uk1JTkFMX1BST0NFU1NJTkcgKi8KKyNpZm5kZWYgRElTQUJMRV9ORVdMSU5F X0FVVE9fUkVUVVJOCisjZGVmaW5lIERJU0FCTEVfTkVXTElORV9BVVRPX1JF VFVSTiAweDAwMDgKKyNlbmRpZiAvKiBESVNBQkxFX05FV0xJTkVfQVVUT19S RVRVUk4gKi8KKyNpZm5kZWYgRU5BQkxFX1ZJUlRVQUxfVEVSTUlOQUxfSU5Q VVQKKyNkZWZpbmUgRU5BQkxFX1ZJUlRVQUxfVEVSTUlOQUxfSU5QVVQgMHgw MjAwCisjZW5kaWYgLyogRU5BQkxFX1ZJUlRVQUxfVEVSTUlOQUxfSU5QVVQg Ki8KKwogLyogRG9uJ3QgbWFrZSB0aGlzIGJpZ2dlciB0aGFuIE5UX01BWF9Q QVRIIGFzIGxvbmcgYXMgdGhlIHRlbXBvcmFyeSBidWZmZXIKICAgIGlzIGFs bG9jYXRlZCB1c2luZyB0bXBfcGF0aGJ1ZiEhISAqLwogI2RlZmluZSBDT05W RVJUX0xJTUlUIE5UX01BWF9QQVRICkBAIC0xNDgsNyArMTU5LDExIEBAIGZo YW5kbGVyX2NvbnNvbGU6OnNldF91bml0ICgpCiAgICAgICBpZiAoY3JlYXRl ZCkKIAlzaGFyZWRfY29uc29sZV9pbmZvLT50dHlfbWluX3N0YXRlLnNldG50 dHkgKERFVl9DT05TX01BSk9SLCBjb25zb2xlX3VuaXQgKG1lKSk7CiAgICAg ICBkZXZzZXQgPSAoZmhfZGV2aWNlcykgc2hhcmVkX2NvbnNvbGVfaW5mby0+ dHR5X21pbl9zdGF0ZS5nZXRudHR5ICgpOworICAgICAgaWYgKGNyZWF0ZWQp CisJY29uLm93bmVyID0gZ2V0cGlkICgpOwogICAgIH0KKyAgaWYgKCFjcmVh dGVkICYmIHNoYXJlZF9jb25zb2xlX2luZm8gJiYga2lsbCAoY29uLm93bmVy LCAwKSA9PSAtMSkKKyAgICBjb24ub3duZXIgPSBnZXRwaWQgKCk7CiAKICAg ZGV2ICgpLnBhcnNlIChkZXZzZXQpOwogICBpZiAoZGV2c2V0ICE9IEZIX0VS Uk9SKQpAQCAtMTY3LDMzICsxODIsNDQgQEAgdm9pZAogZmhhbmRsZXJfY29u c29sZTo6c2V0dXAgKCkKIHsKICAgaWYgKHNldF91bml0ICgpKQotICAgICAg ewotCWNvbi5zY3JvbGxfcmVnaW9uLkJvdHRvbSA9IC0xOwotCWNvbi5kd0xh c3RDdXJzb3JQb3NpdGlvbi5YID0gLTE7Ci0JY29uLmR3TGFzdEN1cnNvclBv c2l0aW9uLlkgPSAtMTsKLQljb24uZHdMYXN0TW91c2VQb3NpdGlvbi5YID0g LTE7Ci0JY29uLmR3TGFzdE1vdXNlUG9zaXRpb24uWSA9IC0xOwotCWNvbi5k d0xhc3RCdXR0b25TdGF0ZSA9IDA7CS8qIG5vbmUgcHJlc3NlZCAqLwotCWNv bi5sYXN0X2J1dHRvbl9jb2RlID0gMzsJLyogcmVsZWFzZWQgKi8KLQljb24u dW5kZXJsaW5lX2NvbG9yID0gRk9SRUdST1VORF9HUkVFTiB8IEZPUkVHUk9V TkRfQkxVRTsKLQljb24uZGltX2NvbG9yID0gRk9SRUdST1VORF9SRUQgfCBG T1JFR1JPVU5EX0dSRUVOIHwgRk9SRUdST1VORF9CTFVFOwotCWNvbi5tZXRh X21hc2sgPSBMRUZUX0FMVF9QUkVTU0VEOwotCS8qIFNldCB0aGUgbWFzayB0 aGF0IGRldGVybWluZXMgaWYgYW4gaW5wdXQga2V5c3Ryb2tlIGlzIG1vZGlm aWVkIGJ5Ci0JICAgTUVUQS4gIFdlIHNldCB0aGlzIGJhc2VkIG9uIHRoZSBr ZXlib2FyZCBsYXlvdXQgbGFuZ3VhZ2UgbG9hZGVkCi0JICAgZm9yIHRoZSBj dXJyZW50IHRocmVhZC4gIFRoZSBsZWZ0IDxBTFQ+IGtleSBhbHdheXMgZ2Vu ZXJhdGVzCi0JICAgTUVUQSwgYnV0IHRoZSByaWdodCA8QUxUPiBrZXkgb25s eSBnZW5lcmF0ZXMgTUVUQSBpZiB3ZSBhcmUgdXNpbmcKLQkgICBhbiBFbmds aXNoIGtleWJvYXJkIGJlY2F1c2UgbWFueSAiaW50ZXJuYXRpb25hbCIga2V5 Ym9hcmRzCi0JICAgcmVwbGFjZSBjb21tb24gc2hlbGwgc3ltYm9scyAoJ1sn LCAneycsIGV0Yy4pIHdpdGggYWNjZW50ZWQKLQkgICBsYW5ndWFnZS1zcGVj aWZpYyBjaGFyYWN0ZXJzICh1bWxhdXQsIGFjY2VudCBncmF2ZSwgZXRjLiku ICBPbgotCSAgIHRoZXNlIGtleWJvYXJkcyByaWdodCA8QUxUPiAoY2FsbGVk IEFsdEdyKSBpcyB1c2VkIHRvIHByb2R1Y2UgdGhlCi0JICAgc2hlbGwgc3lt Ym9scyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyBNRVRBLiAq LwotCWlmIChQUklNQVJZTEFOR0lEIChMT1dPUkQgKEdldEtleWJvYXJkTGF5 b3V0ICgwKSkpID09IExBTkdfRU5HTElTSCkKLQkgIGNvbi5tZXRhX21hc2sg fD0gUklHSFRfQUxUX1BSRVNTRUQ7Ci0JY29uLnNldF9kZWZhdWx0X2F0dHIg KCk7Ci0JY29uLmJhY2tzcGFjZV9rZXljb2RlID0gQ0VSQVNFOwotCWNvbi5j b25zX3JhcG9pID0gTlVMTDsKLQlzaGFyZWRfY29uc29sZV9pbmZvLT50dHlf bWluX3N0YXRlLmlzX2NvbnNvbGUgPSB0cnVlOwotICAgICAgfQorICAgIHsK KyAgICAgIGNvbi5zY3JvbGxfcmVnaW9uLkJvdHRvbSA9IC0xOworICAgICAg Y29uLmR3TGFzdEN1cnNvclBvc2l0aW9uLlggPSAtMTsKKyAgICAgIGNvbi5k d0xhc3RDdXJzb3JQb3NpdGlvbi5ZID0gLTE7CisgICAgICBjb24uZHdMYXN0 TW91c2VQb3NpdGlvbi5YID0gLTE7CisgICAgICBjb24uZHdMYXN0TW91c2VQ b3NpdGlvbi5ZID0gLTE7CisgICAgICBjb24uZHdMYXN0QnV0dG9uU3RhdGUg PSAwOwkvKiBub25lIHByZXNzZWQgKi8KKyAgICAgIGNvbi5sYXN0X2J1dHRv bl9jb2RlID0gMzsJLyogcmVsZWFzZWQgKi8KKyAgICAgIGNvbi51bmRlcmxp bmVfY29sb3IgPSBGT1JFR1JPVU5EX0dSRUVOIHwgRk9SRUdST1VORF9CTFVF OworICAgICAgY29uLmRpbV9jb2xvciA9IEZPUkVHUk9VTkRfUkVEIHwgRk9S RUdST1VORF9HUkVFTiB8IEZPUkVHUk9VTkRfQkxVRTsKKyAgICAgIGNvbi5t ZXRhX21hc2sgPSBMRUZUX0FMVF9QUkVTU0VEOworICAgICAgLyogU2V0IHRo ZSBtYXNrIHRoYXQgZGV0ZXJtaW5lcyBpZiBhbiBpbnB1dCBrZXlzdHJva2Ug aXMgbW9kaWZpZWQgYnkKKwkgTUVUQS4gIFdlIHNldCB0aGlzIGJhc2VkIG9u IHRoZSBrZXlib2FyZCBsYXlvdXQgbGFuZ3VhZ2UgbG9hZGVkCisJIGZvciB0 aGUgY3VycmVudCB0aHJlYWQuICBUaGUgbGVmdCA8QUxUPiBrZXkgYWx3YXlz IGdlbmVyYXRlcworCSBNRVRBLCBidXQgdGhlIHJpZ2h0IDxBTFQ+IGtleSBv bmx5IGdlbmVyYXRlcyBNRVRBIGlmIHdlIGFyZSB1c2luZworCSBhbiBFbmds aXNoIGtleWJvYXJkIGJlY2F1c2UgbWFueSAiaW50ZXJuYXRpb25hbCIga2V5 Ym9hcmRzCisJIHJlcGxhY2UgY29tbW9uIHNoZWxsIHN5bWJvbHMgKCdbJywg J3snLCBldGMuKSB3aXRoIGFjY2VudGVkCisJIGxhbmd1YWdlLXNwZWNpZmlj IGNoYXJhY3RlcnMgKHVtbGF1dCwgYWNjZW50IGdyYXZlLCBldGMuKS4gIE9u CisJIHRoZXNlIGtleWJvYXJkcyByaWdodCA8QUxUPiAoY2FsbGVkIEFsdEdy KSBpcyB1c2VkIHRvIHByb2R1Y2UgdGhlCisJIHNoZWxsIHN5bWJvbHMgYW5k IHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgTUVUQS4gKi8KKyAgICAg IGlmIChQUklNQVJZTEFOR0lEIChMT1dPUkQgKEdldEtleWJvYXJkTGF5b3V0 ICgwKSkpID09IExBTkdfRU5HTElTSCkKKwljb24ubWV0YV9tYXNrIHw9IFJJ R0hUX0FMVF9QUkVTU0VEOworICAgICAgY29uLnNldF9kZWZhdWx0X2F0dHIg KCk7CisgICAgICBjb24uYmFja3NwYWNlX2tleWNvZGUgPSBDRVJBU0U7Cisg ICAgICBjb24uY29uc19yYXBvaSA9IE5VTEw7CisgICAgICBzaGFyZWRfY29u c29sZV9pbmZvLT50dHlfbWluX3N0YXRlLmlzX2NvbnNvbGUgPSB0cnVlOwor ICAgICAgLyogQ2hlY2sgaWYgMjRiaXQgY29sb3IgaXMgYXZhaWxhYmxlICov CisgICAgICBEV09SRCBkd1ZlcnNpb24gPSBHZXRWZXJzaW9uICgpOworICAg ICAgZHdWZXJzaW9uID0gKExPQllURSAoTE9XT1JEIChkd1ZlcnNpb24pKSA8 PCAyNCkKKwl8IChISUJZVEUgKExPV09SRCAoZHdWZXJzaW9uKSkgPDwgMTYp IHwgSElXT1JEIChkd1ZlcnNpb24pOworICAgICAgaWYgKGR3VmVyc2lvbiA+ PSAoKDEwIDw8IDI0KSB8ICgwIDw8IDE2KSB8IDE0OTMxKSkKKwl7CisJICBj b24uY2FwMjRiaXRfY29sb3IgPSB0cnVlOworCSAgLyogSWYgc3lzdGVtIGhh cyAyNGJpdCBjb2xvciBjYXBhYmlsaXR5LAorCSAgICAgdXNlIHh0ZXJtIGNv bXBhdGlibGUgbW9kZS4gKi8KKwkgIHNldGVudiAoIlRFUk0iLCAieHRlcm0t MjU2Y29sb3IiLCAxKTsKKwl9CisgICAgfQogfQogCiAvKiBSZXR1cm4gdGhl IHR0eSBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gdHR5IG51 bWJlci4gIElmIHRoZQpAQCAtMjExLDYgKzIzNyw0NSBAQCB0dHlfbGlzdDo6 Z2V0X2N0dHlwICgpCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKK3ZvaWQKK2Zo YW5kbGVyX2NvbnNvbGU6OnNldHVwX2lvX211dGV4ICh2b2lkKQoreworICBj aGFyIGJ1ZltNQVhfUEFUSF07CisgIERXT1JEIHJlczsKKworICByZXMgPSBX QUlUX0ZBSUxFRDsKKyAgaWYgKCFpbnB1dF9tdXRleCB8fCBXQUlUX0ZBSUxF RCA9PSAocmVzID0gYWNxdWlyZV9pbnB1dF9tdXRleCAoMCkpKQorICAgIHsK KyAgICAgIHNoYXJlZF9uYW1lIChidWYsICJjeWdjb25zLmlucHV0Lm11dGV4 IiwgZ2V0X21pbm9yICgpKTsKKyAgICAgIGlucHV0X211dGV4ID0gT3Blbk11 dGV4IChNQVhJTVVNX0FMTE9XRUQsIFRSVUUsIGJ1Zik7CisgICAgICBpZiAo IWlucHV0X211dGV4KQorCWlucHV0X211dGV4ID0gQ3JlYXRlTXV0ZXggKCZz ZWNfbm9uZSwgRkFMU0UsIGJ1Zik7CisgICAgICBpZiAoIWlucHV0X211dGV4 KQorCXsKKwkgIF9fc2V0ZXJybm8gKCk7CisJICByZXR1cm47CisJfQorICAg IH0KKyAgaWYgKHJlcyA9PSBXQUlUX09CSkVDVF8wKQorICAgIHJlbGVhc2Vf aW5wdXRfbXV0ZXggKCk7CisKKyAgcmVzID0gV0FJVF9GQUlMRUQ7CisgIGlm ICghb3V0cHV0X211dGV4IHx8IFdBSVRfRkFJTEVEID09IChyZXMgPSBhY3F1 aXJlX291dHB1dF9tdXRleCAoMCkpKQorICAgIHsKKyAgICAgIHNoYXJlZF9u YW1lIChidWYsICJjeWdjb25zLm91dHB1dC5tdXRleCIsIGdldF9taW5vciAo KSk7CisgICAgICBvdXRwdXRfbXV0ZXggPSBPcGVuTXV0ZXggKE1BWElNVU1f QUxMT1dFRCwgVFJVRSwgYnVmKTsKKyAgICAgIGlmICghb3V0cHV0X211dGV4 KQorCW91dHB1dF9tdXRleCA9IENyZWF0ZU11dGV4ICgmc2VjX25vbmUsIEZB TFNFLCBidWYpOworICAgICAgaWYgKCFvdXRwdXRfbXV0ZXgpCisJeworCSAg X19zZXRlcnJubyAoKTsKKwkgIHJldHVybjsKKwl9CisgICAgfQorICBpZiAo cmVzID09IFdBSVRfT0JKRUNUXzApCisgICAgcmVsZWFzZV9vdXRwdXRfbXV0 ZXggKCk7Cit9CisKIGlubGluZSBEV09SRAogZGV2X2NvbnNvbGU6OmNvbl90 b19zdHIgKGNoYXIgKmQsIGludCBkbGVuLCBXQ0hBUiB3KQogewpAQCAtMjUx LDcgKzMxNiw3IEBAIGZoYW5kbGVyX2NvbnNvbGU6OnNldF9jdXJzb3JfbWF5 YmUgKCkKICAgICB9CiB9CiAKLXZvaWQKK2Jvb2wKIGZoYW5kbGVyX2NvbnNv bGU6OnNlbmRfd2luY2hfbWF5YmUgKCkKIHsKICAgU0hPUlQgeSA9IGNvbi5k d1dpblNpemUuWTsKQEAgLTI2Myw3ICszMjgsOSBAQCBmaGFuZGxlcl9jb25z b2xlOjpzZW5kX3dpbmNoX21heWJlICgpCiAgICAgICBjb24uc2Nyb2xsX3Jl Z2lvbi5Ub3AgPSAwOwogICAgICAgY29uLnNjcm9sbF9yZWdpb24uQm90dG9t ID0gLTE7CiAgICAgICBnZXRfdHR5cCAoKS0+a2lsbF9wZ3JwIChTSUdXSU5D SCk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisgIHJldHVybiBmYWxz ZTsKIH0KIAogLyogQ2hlY2sgd2hldGhlciBhIG1vdXNlIGV2ZW50IGlzIHRv IGJlIHJlcG9ydGVkIGFzIGFuIGVzY2FwZSBzZXF1ZW5jZSAqLwpAQCAtMjk2 LDM2ICszNjMsMTcgQEAgZmhhbmRsZXJfY29uc29sZTo6bW91c2VfYXdhcmUg KE1PVVNFX0VWRU5UX1JFQ09SRCYgbW91c2VfZXZlbnQpCiB2b2lkIF9fcmVn MwogZmhhbmRsZXJfY29uc29sZTo6cmVhZCAodm9pZCAqcHYsIHNpemVfdCYg YnVmbGVuKQogeworICB0ZXJtaW9zX3ByaW50ZiAoInJlYWQoJXAsJWQpIiwg cHYsIGJ1Zmxlbik7CisKICAgcHVzaF9wcm9jZXNzX3N0YXRlIHByb2Nlc3Nf c3RhdGUgKFBJRF9UVFlJTik7CiAKLSAgSEFORExFIGggPSBnZXRfaGFuZGxl ICgpOworICBpbnQgY29waWVkX2NoYXJzID0gMDsKIAotI2RlZmluZSBidWYg KChjaGFyICopIHB2KQorICBEV09SRCB0aW1lb3V0ID0gaXNfbm9uYmxvY2tp bmcgKCkgPyAwIDogSU5GSU5JVEU7CiAKLSAgaW50IGNoOwogICBzZXRfaW5w dXRfc3RhdGUgKCk7CiAKLSAgLyogQ2hlY2sgY29uc29sZSByZWFkLWFoZWFk IGJ1ZmZlciBmaWxsZWQgZnJvbSB0ZXJtaW5hbCByZXF1ZXN0cyAqLwotICBp ZiAoY29uLmNvbnNfcmFwb2kgJiYgKmNvbi5jb25zX3JhcG9pKQotICAgIHsK LSAgICAgICpidWYgPSAqY29uLmNvbnNfcmFwb2krKzsKLSAgICAgIGJ1Zmxl biA9IDE7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gIGludCBjb3BpZWRf Y2hhcnMgPSBnZXRfcmVhZGFoZWFkX2ludG9fYnVmZmVyIChidWYsIGJ1Zmxl bik7Ci0KLSAgaWYgKGNvcGllZF9jaGFycykKLSAgICB7Ci0gICAgICBidWZs ZW4gPSBjb3BpZWRfY2hhcnM7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0g IERXT1JEIHRpbWVvdXQgPSBpc19ub25ibG9ja2luZyAoKSA/IDAgOiBJTkZJ TklURTsKLSAgY2hhciB0bXBbNjBdOwotCi0gIHRlcm1pb3MgdGkgPSBnZXRf dHR5cCAoKS0+dGk7Ci0gIGZvciAoOzspCisgIHdoaWxlICghaW5wdXRfcmVh ZHkgJiYgIWdldF9jb25zX3JlYWRhaGVhZF92YWxpZCAoKSkKICAgICB7CiAg ICAgICBpbnQgYmdyZXM7CiAgICAgICBpZiAoKGJncmVzID0gYmdfY2hlY2sg KFNJR1RUSU4pKSA8PSBiZ19lb2YpCkBAIC0zMzUsNyArMzgzLDcgQEAgZmhh bmRsZXJfY29uc29sZTo6cmVhZCAodm9pZCAqcHYsIHNpemVfdCYgYnVmbGVu KQogCX0KIAogICAgICAgc2V0X2N1cnNvcl9tYXliZSAoKTsJLyogdG8gbWFr ZSBjdXJzb3IgYXBwZWFyIG9uIHRoZSBzY3JlZW4gaW1tZWRpYXRlbHkgKi8K LSAgICAgIHN3aXRjaCAoY3lnd2FpdCAoaCwgdGltZW91dCkpCisgICAgICBz d2l0Y2ggKGN5Z3dhaXQgKGdldF9oYW5kbGUgKCksIHRpbWVvdXQpKQogCXsK IAljYXNlIFdBSVRfT0JKRUNUXzA6CiAJICBicmVhazsKQEAgLTM1MywzNjYg KzQwMSw0MTQgQEAgZmhhbmRsZXJfY29uc29sZTo6cmVhZCAodm9pZCAqcHYs IHNpemVfdCYgYnVmbGVuKQogCSAgZ290byBlcnI7CiAJfQogCi0gICAgICBE V09SRCBucmVhZDsKLSAgICAgIElOUFVUX1JFQ09SRCBpbnB1dF9yZWM7Ci0g ICAgICBjb25zdCBjaGFyICp0b2FkZCA9IE5VTEw7CisjZGVmaW5lIGJ1ZiAo KGNoYXIgKikgcHYpCiAKLSAgICAgIGlmICghUmVhZENvbnNvbGVJbnB1dFcg KGgsICZpbnB1dF9yZWMsIDEsICZucmVhZCkpCisgICAgICBpbnQgcmV0Owor ICAgICAgYWNxdWlyZV9pbnB1dF9tdXRleCAoSU5GSU5JVEUpOworICAgICAg cmV0ID0gcHJvY2Vzc19pbnB1dF9tZXNzYWdlICgpOworICAgICAgcmVsZWFz ZV9pbnB1dF9tdXRleCAoKTsKKyAgICAgIHN3aXRjaCAocmV0KQogCXsKLQkg IHN5c2NhbGxfcHJpbnRmICgiUmVhZENvbnNvbGVJbnB1dCBmYWlsZWQsICVF Iik7Ci0JICBnb3RvIGVycjsJCS8qIHNlZW1zIHRvIGJlIGZhaWx1cmUgKi8K KwljYXNlIGlucHV0X2Vycm9yOgorCSAgZ290byBlcnI7CisJY2FzZSBpbnB1 dF9wcm9jZXNzaW5nOgorCSAgY29udGludWU7CisJY2FzZSBpbnB1dF9vazog LyogaW5wdXQgcmVhZHkgKi8KKwkgIGJyZWFrOworCWNhc2UgaW5wdXRfc2ln bmFsbGVkOiAvKiBzaWduYWxsZWQgKi8KKwkgIGdvdG8gc2lnX2V4aXQ7CisJ Y2FzZSBpbnB1dF93aW5jaDoKKwkgIGNvbnRpbnVlOworCWRlZmF1bHQ6CisJ ICAvKiBTaG91bGQgbm90IGNvbWUgaGVyZSAqLworCSAgZ290byBlcnI7CiAJ fQorICAgIH0KIAotICAgICAgY29uc3QgV0NIQVIgJnVuaWNvZGVfY2hhciA9 IGlucHV0X3JlYy5FdmVudC5LZXlFdmVudC51Q2hhci5Vbmljb2RlQ2hhcjsK LSAgICAgIGNvbnN0IERXT1JEICZjdHJsX2tleV9zdGF0ZSA9IGlucHV0X3Jl Yy5FdmVudC5LZXlFdmVudC5kd0NvbnRyb2xLZXlTdGF0ZTsKKyAgLyogQ2hl Y2sgY29uc29sZSByZWFkLWFoZWFkIGJ1ZmZlciBmaWxsZWQgZnJvbSB0ZXJt aW5hbCByZXF1ZXN0cyAqLworICBhY3F1aXJlX2lucHV0X211dGV4IChJTkZJ TklURSk7CisgIHdoaWxlIChjb24uY29uc19yYXBvaSAmJiAqY29uLmNvbnNf cmFwb2kgJiYgYnVmbGVuKQorICAgIHsKKyAgICAgIGJ1Zltjb3BpZWRfY2hh cnMrK10gPSAqY29uLmNvbnNfcmFwb2krKzsKKyAgICAgIGJ1ZmxlbiAtLTsK KyAgICB9CiAKLSAgICAgIC8qIGNoZWNrIHRoZSBldmVudCB0aGF0IG9jY3Vy cmVkICovCi0gICAgICBzd2l0Y2ggKGlucHV0X3JlYy5FdmVudFR5cGUpCi0J ewotCWNhc2UgS0VZX0VWRU5UOgorICBjb3BpZWRfY2hhcnMgKz0KKyAgICBn ZXRfcmVhZGFoZWFkX2ludG9fYnVmZmVyIChidWYgKyBjb3BpZWRfY2hhcnMs IGJ1Zmxlbik7CiAKLQkgIGNvbi5uTW9kaWZpZXJzID0gMDsKKyAgaWYgKCFy YWxlbikKKyAgICBpbnB1dF9yZWFkeSA9IGZhbHNlOworICByZWxlYXNlX2lu cHV0X211dGV4ICgpOworCisjdW5kZWYgYnVmCisKKyAgYnVmbGVuID0gY29w aWVkX2NoYXJzOworICByZXR1cm47CisKK2VycjoKKyAgX19zZXRlcnJubyAo KTsKKyAgYnVmbGVuID0gKHNpemVfdCkgLTE7CisgIHJldHVybjsKKworc2ln X2V4aXQ6CisgIHNldF9zaWdfZXJybm8gKEVJTlRSKTsKKyAgYnVmbGVuID0g KHNpemVfdCkgLTE7Cit9CisKK2ZoYW5kbGVyX2NvbnNvbGU6OmlucHV0X3N0 YXRlcworZmhhbmRsZXJfY29uc29sZTo6cHJvY2Vzc19pbnB1dF9tZXNzYWdl ICh2b2lkKQoreworICBjaGFyIHRtcFs2MF07CisKKyAgaWYgKCFzaGFyZWRf Y29uc29sZV9pbmZvKQorICAgIHJldHVybiBpbnB1dF9lcnJvcjsKKworICB0 ZXJtaW9zICp0aSA9ICYoZ2V0X3R0eXAgKCktPnRpKTsKKworICBEV09SRCBu cmVhZDsKKyAgSU5QVVRfUkVDT1JEIGlucHV0X3JlYzsKKyAgY29uc3QgY2hh ciAqdG9hZGQgPSBOVUxMOworCisgIGlmICghUmVhZENvbnNvbGVJbnB1dFcg KGdldF9oYW5kbGUgKCksICZpbnB1dF9yZWMsIDEsICZucmVhZCkpCisgICAg eworICAgICAgdGVybWlvc19wcmludGYgKCJSZWFkQ29uc29sZUlucHV0IGZh aWxlZCwgJUUiKTsKKyAgICAgIHJldHVybiBpbnB1dF9lcnJvcjsKKyAgICB9 CisKKyAgY29uc3QgV0NIQVIgJnVuaWNvZGVfY2hhciA9IGlucHV0X3JlYy5F dmVudC5LZXlFdmVudC51Q2hhci5Vbmljb2RlQ2hhcjsKKyAgY29uc3QgRFdP UkQgJmN0cmxfa2V5X3N0YXRlID0gaW5wdXRfcmVjLkV2ZW50LktleUV2ZW50 LmR3Q29udHJvbEtleVN0YXRlOworCisgIC8qIGNoZWNrIHRoZSBldmVudCB0 aGF0IG9jY3VycmVkICovCisgIHN3aXRjaCAoaW5wdXRfcmVjLkV2ZW50VHlw ZSkKKyAgICB7CisgICAgY2FzZSBLRVlfRVZFTlQ6CisKKyAgICAgIGNvbi5u TW9kaWZpZXJzID0gMDsKIAogI2lmZGVmIERFQlVHR0lORwotCSAgLyogYWxs b3cgbWFudWFsIHN3aXRjaGluZyB0by9mcm9tIHJhdyBtb2RlIHZpYSBjdHJs LWFsdC1zY3JvbGxsb2NrICovCi0JICBpZiAoaW5wdXRfcmVjLkV2ZW50Lktl eUV2ZW50LmJLZXlEb3duCi0JICAgICAgJiYgaW5wdXRfcmVjLkV2ZW50Lktl eUV2ZW50LndWaXJ0dWFsS2V5Q29kZSA9PSBWS19TQ1JPTEwKLQkgICAgICAm JiAoY3RybF9rZXlfc3RhdGUgJiAoTEVGVF9BTFRfUFJFU1NFRCB8IExFRlRf Q1RSTF9QUkVTU0VEKSkKLQkJICA9PSAoTEVGVF9BTFRfUFJFU1NFRCB8IExF RlRfQ1RSTF9QUkVTU0VEKSkKLQkgICAgewotCSAgICAgIHNldF9yYXdfd2lu MzJfa2V5Ym9hcmRfbW9kZSAoIWNvbi5yYXdfd2luMzJfa2V5Ym9hcmRfbW9k ZSk7Ci0JICAgICAgY29udGludWU7Ci0JICAgIH0KKyAgICAgIC8qIGFsbG93 IG1hbnVhbCBzd2l0Y2hpbmcgdG8vZnJvbSByYXcgbW9kZSB2aWEgY3RybC1h bHQtc2Nyb2xsbG9jayAqLworICAgICAgaWYgKGlucHV0X3JlYy5FdmVudC5L ZXlFdmVudC5iS2V5RG93bgorCSAgJiYgaW5wdXRfcmVjLkV2ZW50LktleUV2 ZW50LndWaXJ0dWFsS2V5Q29kZSA9PSBWS19TQ1JPTEwKKwkgICYmIChjdHJs X2tleV9zdGF0ZSAmIChMRUZUX0FMVF9QUkVTU0VEIHwgTEVGVF9DVFJMX1BS RVNTRUQpKQorCSAgPT0gKExFRlRfQUxUX1BSRVNTRUQgfCBMRUZUX0NUUkxf UFJFU1NFRCkpCisJeworCSAgc2V0X3Jhd193aW4zMl9rZXlib2FyZF9tb2Rl ICghY29uLnJhd193aW4zMl9rZXlib2FyZF9tb2RlKTsKKwkgIHJldHVybiBp bnB1dF9wcm9jZXNzaW5nOworCX0KICNlbmRpZgogCi0JICBpZiAoY29uLnJh d193aW4zMl9rZXlib2FyZF9tb2RlKQorICAgICAgaWYgKGNvbi5yYXdfd2lu MzJfa2V5Ym9hcmRfbW9kZSkKKwl7CisJICBfX3NtYWxsX3NwcmludGYgKHRt cCwgIlwwMzN7JXU7JXU7JXU7JXU7JXU7JWx1SyIsCisJCQkgICBpbnB1dF9y ZWMuRXZlbnQuS2V5RXZlbnQuYktleURvd24sCisJCQkgICBpbnB1dF9yZWMu RXZlbnQuS2V5RXZlbnQud1JlcGVhdENvdW50LAorCQkJICAgaW5wdXRfcmVj LkV2ZW50LktleUV2ZW50LndWaXJ0dWFsS2V5Q29kZSwKKwkJCSAgIGlucHV0 X3JlYy5FdmVudC5LZXlFdmVudC53VmlydHVhbFNjYW5Db2RlLAorCQkJICAg aW5wdXRfcmVjLkV2ZW50LktleUV2ZW50LnVDaGFyLlVuaWNvZGVDaGFyLAor CQkJICAgaW5wdXRfcmVjLkV2ZW50LktleUV2ZW50LmR3Q29udHJvbEtleVN0 YXRlKTsKKwkgIHRvYWRkID0gdG1wOworCSAgbnJlYWQgPSBzdHJsZW4gKHRv YWRkKTsKKwkgIGJyZWFrOworCX0KKworICAgICAgLyogSWdub3JlIGtleSB1 cCBldmVudHMsIGV4Y2VwdCBmb3IgQWx0K051bXBhZCBldmVudHMuICovCisg ICAgICBpZiAoIWlucHV0X3JlYy5FdmVudC5LZXlFdmVudC5iS2V5RG93biAm JgorCSAgIWlzX2FsdF9udW1wYWRfZXZlbnQgKCZpbnB1dF9yZWMpKQorCXJl dHVybiBpbnB1dF9wcm9jZXNzaW5nOworICAgICAgLyogSWdub3JlIEFsdCtO dW1wYWQga2V5cy4gIFRoZXkgYXJlIGV2ZW50dWFsbHkgaGFuZGxlZCBiZWxv dyBhZnRlcgorCSByZWxlYXNpbmcgdGhlIEFsdCBrZXkuICovCisgICAgICBp ZiAoaW5wdXRfcmVjLkV2ZW50LktleUV2ZW50LmJLZXlEb3duCisJICAmJiBp c19hbHRfbnVtcGFkX2tleSAoJmlucHV0X3JlYykpCisJcmV0dXJuIGlucHV0 X3Byb2Nlc3Npbmc7CisKKyAgICAgIGlmIChjdHJsX2tleV9zdGF0ZSAmIFNI SUZUX1BSRVNTRUQpCisJY29uLm5Nb2RpZmllcnMgfD0gMTsKKyAgICAgIGlm IChjdHJsX2tleV9zdGF0ZSAmIFJJR0hUX0FMVF9QUkVTU0VEKQorCWNvbi5u TW9kaWZpZXJzIHw9IDI7CisgICAgICBpZiAoY3RybF9rZXlfc3RhdGUgJiBD VFJMX1BSRVNTRUQpCisJY29uLm5Nb2RpZmllcnMgfD0gNDsKKyAgICAgIGlm IChjdHJsX2tleV9zdGF0ZSAmIExFRlRfQUxUX1BSRVNTRUQpCisJY29uLm5N b2RpZmllcnMgfD0gODsKKworICAgICAgLyogQWxsb3cgQmFja3NwYWNlIHRv IGVtaXQgXj8gYW5kIGVzY2FwZSBzZXF1ZW5jZXMuICovCisgICAgICBpZiAo aW5wdXRfcmVjLkV2ZW50LktleUV2ZW50LndWaXJ0dWFsS2V5Q29kZSA9PSBW S19CQUNLKQorCXsKKwkgIGNoYXIgYyA9IGNvbi5iYWNrc3BhY2Vfa2V5Y29k ZTsKKwkgIG5yZWFkID0gMDsKKwkgIGlmIChjdHJsX2tleV9zdGF0ZSAmIEFM VF9QUkVTU0VEKQogCSAgICB7Ci0JICAgICAgX19zbWFsbF9zcHJpbnRmICh0 bXAsICJcMDMzeyV1OyV1OyV1OyV1OyV1OyVsdUsiLAotCQkJCSAgICBpbnB1 dF9yZWMuRXZlbnQuS2V5RXZlbnQuYktleURvd24sCi0JCQkJICAgIGlucHV0 X3JlYy5FdmVudC5LZXlFdmVudC53UmVwZWF0Q291bnQsCi0JCQkJICAgIGlu cHV0X3JlYy5FdmVudC5LZXlFdmVudC53VmlydHVhbEtleUNvZGUsCi0JCQkJ ICAgIGlucHV0X3JlYy5FdmVudC5LZXlFdmVudC53VmlydHVhbFNjYW5Db2Rl LAotCQkJCSAgICBpbnB1dF9yZWMuRXZlbnQuS2V5RXZlbnQudUNoYXIuVW5p Y29kZUNoYXIsCi0JCQkJICAgIGlucHV0X3JlYy5FdmVudC5LZXlFdmVudC5k d0NvbnRyb2xLZXlTdGF0ZSk7Ci0JICAgICAgdG9hZGQgPSB0bXA7Ci0JICAg ICAgbnJlYWQgPSBzdHJsZW4gKHRvYWRkKTsKLQkgICAgICBicmVhazsKKwkg ICAgICBpZiAoY29uLm1ldGFiaXQpCisJCWMgfD0gMHg4MDsKKwkgICAgICBl bHNlCisJCXRtcFtucmVhZCsrXSA9ICdcZSc7CiAJICAgIH0KLQotCSAgLyog SWdub3JlIGtleSB1cCBldmVudHMsIGV4Y2VwdCBmb3IgQWx0K051bXBhZCBl dmVudHMuICovCi0JICBpZiAoIWlucHV0X3JlYy5FdmVudC5LZXlFdmVudC5i S2V5RG93biAmJgotCSAgICAgICFpc19hbHRfbnVtcGFkX2V2ZW50ICgmaW5w dXRfcmVjKSkKLQkgICAgY29udGludWU7Ci0JICAvKiBJZ25vcmUgQWx0K051 bXBhZCBrZXlzLiAgVGhleSBhcmUgZXZlbnR1YWxseSBoYW5kbGVkIGJlbG93 IGFmdGVyCi0JICAgICByZWxlYXNpbmcgdGhlIEFsdCBrZXkuICovCi0JICBp ZiAoaW5wdXRfcmVjLkV2ZW50LktleUV2ZW50LmJLZXlEb3duCi0JICAgICAg JiYgaXNfYWx0X251bXBhZF9rZXkgKCZpbnB1dF9yZWMpKQotCSAgICBjb250 aW51ZTsKLQotCSAgaWYgKGN0cmxfa2V5X3N0YXRlICYgU0hJRlRfUFJFU1NF RCkKLQkgICAgY29uLm5Nb2RpZmllcnMgfD0gMTsKLQkgIGlmIChjdHJsX2tl eV9zdGF0ZSAmIFJJR0hUX0FMVF9QUkVTU0VEKQotCSAgICBjb24ubk1vZGlm aWVycyB8PSAyOwotCSAgaWYgKGN0cmxfa2V5X3N0YXRlICYgQ1RSTF9QUkVT U0VEKQotCSAgICBjb24ubk1vZGlmaWVycyB8PSA0OwotCSAgaWYgKGN0cmxf a2V5X3N0YXRlICYgTEVGVF9BTFRfUFJFU1NFRCkKLQkgICAgY29uLm5Nb2Rp ZmllcnMgfD0gODsKLQotCSAgLyogQWxsb3cgQmFja3NwYWNlIHRvIGVtaXQg Xj8gYW5kIGVzY2FwZSBzZXF1ZW5jZXMuICovCi0JICBpZiAoaW5wdXRfcmVj LkV2ZW50LktleUV2ZW50LndWaXJ0dWFsS2V5Q29kZSA9PSBWS19CQUNLKQor CSAgdG1wW25yZWFkKytdID0gYzsKKwkgIHRtcFtucmVhZF0gPSAwOworCSAg dG9hZGQgPSB0bXA7CisJfQorICAgICAgLyogQWxsb3cgQ3RybC1TcGFjZSB0 byBlbWl0IF5AICovCisgICAgICBlbHNlIGlmIChpbnB1dF9yZWMuRXZlbnQu S2V5RXZlbnQud1ZpcnR1YWxLZXlDb2RlCisJICAgICAgID09IChjb24uY2Fw MjRiaXRfY29sb3IgPyAnMicgOiBWS19TUEFDRSkKKwkgICAgICAgJiYgKGN0 cmxfa2V5X3N0YXRlICYgQ1RSTF9QUkVTU0VEKQorCSAgICAgICAmJiAhKGN0 cmxfa2V5X3N0YXRlICYgQUxUX1BSRVNTRUQpKQorCXRvYWRkID0gIiI7Cisg ICAgICBlbHNlIGlmICh1bmljb2RlX2NoYXIgPT0gMAorCSAgICAgICAvKiBh cnJvdy9mdW5jdGlvbiBrZXlzICovCisJICAgICAgIHx8IChpbnB1dF9yZWMu RXZlbnQuS2V5RXZlbnQuZHdDb250cm9sS2V5U3RhdGUgJiBFTkhBTkNFRF9L RVkpKQorCXsKKwkgIHRvYWRkID0gZ2V0X25vbmFzY2lpX2tleSAoaW5wdXRf cmVjLCB0bXApOworCSAgaWYgKCF0b2FkZCkKIAkgICAgewotCSAgICAgIGNo YXIgYyA9IGNvbi5iYWNrc3BhY2Vfa2V5Y29kZTsKLQkgICAgICBucmVhZCA9 IDA7Ci0JICAgICAgaWYgKGN0cmxfa2V5X3N0YXRlICYgQUxUX1BSRVNTRUQp Ci0JCXsKLQkJICBpZiAoY29uLm1ldGFiaXQpCi0JCSAgICBjIHw9IDB4ODA7 Ci0JCSAgZWxzZQotCQkgICAgdG1wW25yZWFkKytdID0gJ1xlJzsKLQkJfQot CSAgICAgIHRtcFtucmVhZCsrXSA9IGM7Ci0JICAgICAgdG1wW25yZWFkXSA9 IDA7Ci0JICAgICAgdG9hZGQgPSB0bXA7CisJICAgICAgY29uLm5Nb2RpZmll cnMgPSAwOworCSAgICAgIHJldHVybiBpbnB1dF9wcm9jZXNzaW5nOwogCSAg ICB9Ci0JICAvKiBBbGxvdyBDdHJsLVNwYWNlIHRvIGVtaXQgXkAgKi8KLQkg IGVsc2UgaWYgKGlucHV0X3JlYy5FdmVudC5LZXlFdmVudC53VmlydHVhbEtl eUNvZGUgPT0gVktfU1BBQ0UKLQkJICAgJiYgKGN0cmxfa2V5X3N0YXRlICYg Q1RSTF9QUkVTU0VEKQotCQkgICAmJiAhKGN0cmxfa2V5X3N0YXRlICYgQUxU X1BSRVNTRUQpKQotCSAgICB0b2FkZCA9ICIiOwotCSAgZWxzZSBpZiAodW5p Y29kZV9jaGFyID09IDAKLQkgICAgICAvKiBhcnJvdy9mdW5jdGlvbiBrZXlz ICovCi0JICAgICAgfHwgKGlucHV0X3JlYy5FdmVudC5LZXlFdmVudC5kd0Nv bnRyb2xLZXlTdGF0ZSAmIEVOSEFOQ0VEX0tFWSkpCisJICBucmVhZCA9IHN0 cmxlbiAodG9hZGQpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBucmVhZCA9 IGNvbi5jb25fdG9fc3RyICh0bXAgKyAxLCA1OSwgdW5pY29kZV9jaGFyKTsK KwkgIC8qIERldGVybWluZSBpZiB0aGUga2V5c3Ryb2tlIGlzIG1vZGlmaWVk IGJ5IE1FVEEuICBUaGUgdHJpY2t5CisJICAgICBwYXJ0IGlzIHRvIGRpc3Rp bmd1aXNoIHdoZXRoZXIgdGhlIHJpZ2h0IEFsdCBrZXkgc2hvdWxkIGJlCisJ ICAgICByZWNvZ25pemVkIGFzIEFsdCwgb3IgYXMgQWx0R3IuICovCisJICBi b29sIG1ldGEgPQorCSAgICAvKiBBbHQgYnV0IG5vdCBBbHRHciAoPSBsZWZ0 IGN0cmwgKyByaWdodCBhbHQpPyAqLworCSAgICAoY3RybF9rZXlfc3RhdGUg JiBBTFRfUFJFU1NFRCkgIT0gMAorCSAgICAmJiAoKGN0cmxfa2V5X3N0YXRl ICYgQ1RSTF9QUkVTU0VEKSA9PSAwCisJCS8qIGJ1dCBhbHNvIGFsbG93IEFs dC1BbHRHcjogKi8KKwkJfHwgKGN0cmxfa2V5X3N0YXRlICYgQUxUX1BSRVNT RUQpID09IEFMVF9QUkVTU0VECisJCXx8ICh1bmljb2RlX2NoYXIgPD0gMHgx ZiB8fCB1bmljb2RlX2NoYXIgPT0gMHg3ZikpOworCSAgaWYgKCFtZXRhKQog CSAgICB7Ci0JICAgICAgdG9hZGQgPSBnZXRfbm9uYXNjaWlfa2V5IChpbnB1 dF9yZWMsIHRtcCk7Ci0JICAgICAgaWYgKCF0b2FkZCkKLQkJewotCQkgIGNv bi5uTW9kaWZpZXJzID0gMDsKLQkJICBjb250aW51ZTsKLQkJfQotCSAgICAg IG5yZWFkID0gc3RybGVuICh0b2FkZCk7CisJICAgICAgLyogRGV0ZXJtaW5l IGlmIHRoZSBjaGFyYWN0ZXIgaXMgaW4gdGhlIGN1cnJlbnQgbXVsdGlieXRl CisJCSBjaGFyc2V0LiAgVGhlIHRlc3QgaXMgZWFzeS4gIElmIHRoZSBtdWx0 aWJ5dGUgc2VxdWVuY2UKKwkJIGlzID4gMSBhbmQgdGhlIGZpcnN0IGJ5dGUg aXMgQVNDSUkgQ0FOLCB0aGUgY2hhcmFjdGVyCisJCSBoYXMgYmVlbiB0cmFu c2xhdGVkIGludG8gdGhlIEFTQ0lJIENBTiArIFVURi04IHJlcGxhY2VtZW50 CisJCSBzZXF1ZW5jZS4gIElmIHNvLCBqdXN0IGlnbm9yZSB0aGUga2V5cHJl c3MuCisJCSBGSVhNRTogSXMgdGhlcmUgYSBiZXR0ZXIgc29sdXRpb24/ICov CisJICAgICAgaWYgKG5yZWFkID4gMSAmJiB0bXBbMV0gPT0gMHgxOCkKKwkJ YmVlcCAoKTsKKwkgICAgICBlbHNlCisJCXRvYWRkID0gdG1wICsgMTsKKwkg ICAgfQorCSAgZWxzZSBpZiAoY29uLm1ldGFiaXQpCisJICAgIHsKKwkgICAg ICB0bXBbMV0gfD0gMHg4MDsKKwkgICAgICB0b2FkZCA9IHRtcCArIDE7CiAJ ICAgIH0KIAkgIGVsc2UKIAkgICAgewotCSAgICAgIG5yZWFkID0gY29uLmNv bl90b19zdHIgKHRtcCArIDEsIDU5LCB1bmljb2RlX2NoYXIpOwotCSAgICAg IC8qIERldGVybWluZSBpZiB0aGUga2V5c3Ryb2tlIGlzIG1vZGlmaWVkIGJ5 IE1FVEEuICBUaGUgdHJpY2t5Ci0JCSBwYXJ0IGlzIHRvIGRpc3Rpbmd1aXNo IHdoZXRoZXIgdGhlIHJpZ2h0IEFsdCBrZXkgc2hvdWxkIGJlCi0JCSByZWNv Z25pemVkIGFzIEFsdCwgb3IgYXMgQWx0R3IuICovCi0JICAgICAgYm9vbCBt ZXRhID0KLQkJICAgICAvKiBBbHQgYnV0IG5vdCBBbHRHciAoPSBsZWZ0IGN0 cmwgKyByaWdodCBhbHQpPyAqLwotCQkgICAgIChjdHJsX2tleV9zdGF0ZSAm IEFMVF9QUkVTU0VEKSAhPSAwCi0JCSAgICAgJiYgKChjdHJsX2tleV9zdGF0 ZSAmIENUUkxfUFJFU1NFRCkgPT0gMAotCQkJICAgIC8qIGJ1dCBhbHNvIGFs bG93IEFsdC1BbHRHcjogKi8KLQkJCSB8fCAoY3RybF9rZXlfc3RhdGUgJiBB TFRfUFJFU1NFRCkgPT0gQUxUX1BSRVNTRUQKLQkJCSB8fCAodW5pY29kZV9j aGFyIDw9IDB4MWYgfHwgdW5pY29kZV9jaGFyID09IDB4N2YpKTsKLQkgICAg ICBpZiAoIW1ldGEpCisJICAgICAgdG1wWzBdID0gJ1wwMzMnOworCSAgICAg IHRtcFsxXSA9IGN5Z190b2xvd2VyICh0bXBbMV0pOworCSAgICAgIHRvYWRk ID0gdG1wOworCSAgICAgIG5yZWFkKys7CisJICAgICAgY29uLm5Nb2RpZmll cnMgJj0gfjQ7CisJICAgIH0KKwl9CisgICAgICBicmVhazsKKworICAgIGNh c2UgTU9VU0VfRVZFTlQ6CisgICAgICBzZW5kX3dpbmNoX21heWJlICgpOwor CXsKKwkgIE1PVVNFX0VWRU5UX1JFQ09SRCYgbW91c2VfZXZlbnQgPSBpbnB1 dF9yZWMuRXZlbnQuTW91c2VFdmVudDsKKwkgIC8qIEFzIGEgdW5pcXVlIGd1 YXJkIGZvciBtb3VzZSByZXBvcnQgZ2VuZXJhdGlvbiwKKwkgICAgIGNhbGwg bW91c2VfYXdhcmUoKSB3aGljaCBpcyBjb21tb24gd2l0aCBzZWxlY3QoKSwg c28gdGhlIHJlc3VsdAorCSAgICAgb2Ygc2VsZWN0KCkgYW5kIHRoZSBhY3R1 YWwgcmVhZCgpIHdpbGwgYmUgY29uc2lzdGVudCBvbiB0aGUKKwkgICAgIGlz c3VlIG9mIHdoZXRoZXIgaW5wdXQgKGkuZS4gYSBtb3VzZSBlc2NhcGUgc2Vx dWVuY2UpIHdpbGwKKwkgICAgIGJlIGF2YWlsYWJsZSBvciBub3QgKi8KKwkg IGlmIChtb3VzZV9hd2FyZSAobW91c2VfZXZlbnQpKQorCSAgICB7CisJICAg ICAgLyogTm90ZTogUmVwb3J0ZWQgbW91c2UgcG9zaXRpb24gd2FzIGFscmVh ZHkgcmV0cmlldmVkIGJ5CisJCSBtb3VzZV9hd2FyZSgpIGFuZCBhZGp1c3Rl ZCBieSB3aW5kb3cgc2Nyb2xsIGJ1ZmZlciBvZmZzZXQgKi8KKworCSAgICAg IC8qIFRyZWF0IHRoZSBkb3VibGUtY2xpY2sgZXZlbnQgbGlrZSBhIHJlZ3Vs YXIgYnV0dG9uIHByZXNzICovCisJICAgICAgaWYgKG1vdXNlX2V2ZW50LmR3 RXZlbnRGbGFncyA9PSBET1VCTEVfQ0xJQ0spCiAJCXsKLQkJICAvKiBEZXRl cm1pbmUgaWYgdGhlIGNoYXJhY3RlciBpcyBpbiB0aGUgY3VycmVudCBtdWx0 aWJ5dGUKLQkJICAgICBjaGFyc2V0LiAgVGhlIHRlc3QgaXMgZWFzeS4gIElm IHRoZSBtdWx0aWJ5dGUgc2VxdWVuY2UKLQkJICAgICBpcyA+IDEgYW5kIHRo ZSBmaXJzdCBieXRlIGlzIEFTQ0lJIENBTiwgdGhlIGNoYXJhY3RlcgotCQkg ICAgIGhhcyBiZWVuIHRyYW5zbGF0ZWQgaW50byB0aGUgQVNDSUkgQ0FOICsg VVRGLTggcmVwbGFjZW1lbnQKLQkJICAgICBzZXF1ZW5jZS4gIElmIHNvLCBq dXN0IGlnbm9yZSB0aGUga2V5cHJlc3MuCi0JCSAgICAgRklYTUU6IElzIHRo ZXJlIGEgYmV0dGVyIHNvbHV0aW9uPyAqLwotCQkgIGlmIChucmVhZCA+IDEg JiYgdG1wWzFdID09IDB4MTgpCi0JCSAgICBiZWVwICgpOwotCQkgIGVsc2UK LQkJICAgIHRvYWRkID0gdG1wICsgMTsKKwkJICBzeXNjYWxsX3ByaW50ZiAo Im1vdXNlOiBkb3VibGUtY2xpY2sgLT4gY2xpY2siKTsKKwkJICBtb3VzZV9l dmVudC5kd0V2ZW50RmxhZ3MgPSAwOwogCQl9Ci0JICAgICAgZWxzZSBpZiAo Y29uLm1ldGFiaXQpCisKKwkgICAgICAvKiBUaGlzIGNvZGUgYXNzdW1lcyBX aW5kb3dzIG5ldmVyIHJlcG9ydHMgbXVsdGlwbGUgYnV0dG9uCisJCSBldmVu dHMgYXQgdGhlIHNhbWUgdGltZS4gKi8KKwkgICAgICBpbnQgYiA9IDA7CisJ ICAgICAgY2hhciBzelszMl07CisJICAgICAgY2hhciBtb2RlNl90ZXJtID0g J00nOworCisJICAgICAgaWYgKG1vdXNlX2V2ZW50LmR3RXZlbnRGbGFncyA9 PSBNT1VTRV9XSEVFTEVEKQogCQl7Ci0JCSAgdG1wWzFdIHw9IDB4ODA7Ci0J CSAgdG9hZGQgPSB0bXAgKyAxOworCQkgIGlmIChtb3VzZV9ldmVudC5kd0J1 dHRvblN0YXRlICYgMHhGRjgwMDAwMCkKKwkJICAgIHsKKwkJICAgICAgYiA9 IDB4NDE7CisJCSAgICAgIHN0cmNweSAoc3osICJ3aGVlbCBkb3duIik7CisJ CSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBiID0gMHg0MDsK KwkJICAgICAgc3RyY3B5IChzeiwgIndoZWVsIHVwIik7CisJCSAgICB9CiAJ CX0KIAkgICAgICBlbHNlCiAJCXsKLQkJICB0bXBbMF0gPSAnXDAzMyc7Ci0J CSAgdG1wWzFdID0gY3lnX3RvbG93ZXIgKHRtcFsxXSk7Ci0JCSAgdG9hZGQg PSB0bXA7Ci0JCSAgbnJlYWQrKzsKLQkJICBjb24ubk1vZGlmaWVycyAmPSB+ NDsKKwkJICAvKiBJZ25vcmUgdW5pbXBvcnRhbnQgbW91c2UgYnV0dG9ucyAq LworCQkgIG1vdXNlX2V2ZW50LmR3QnV0dG9uU3RhdGUgJj0gMHg3OworCisJ CSAgaWYgKG1vdXNlX2V2ZW50LmR3RXZlbnRGbGFncyA9PSBNT1VTRV9NT1ZF RCkKKwkJICAgIHsKKwkJICAgICAgYiA9IGNvbi5sYXN0X2J1dHRvbl9jb2Rl OworCQkgICAgfQorCQkgIGVsc2UgaWYgKG1vdXNlX2V2ZW50LmR3QnV0dG9u U3RhdGUgPCBjb24uZHdMYXN0QnV0dG9uU3RhdGUgJiYgIWNvbi5leHRfbW91 c2VfbW9kZTYpCisJCSAgICB7CisJCSAgICAgIGIgPSAzOworCQkgICAgICBz dHJjcHkgKHN6LCAiYnRuIHVwIik7CisJCSAgICB9CisJCSAgZWxzZSBpZiAo KG1vdXNlX2V2ZW50LmR3QnV0dG9uU3RhdGUgJiAxKSAhPSAoY29uLmR3TGFz dEJ1dHRvblN0YXRlICYgMSkpCisJCSAgICB7CisJCSAgICAgIGIgPSAwOwor CQkgICAgICBzdHJjcHkgKHN6LCAiYnRuMSBkb3duIik7CisJCSAgICB9CisJ CSAgZWxzZSBpZiAoKG1vdXNlX2V2ZW50LmR3QnV0dG9uU3RhdGUgJiAyKSAh PSAoY29uLmR3TGFzdEJ1dHRvblN0YXRlICYgMikpCisJCSAgICB7CisJCSAg ICAgIGIgPSAyOworCQkgICAgICBzdHJjcHkgKHN6LCAiYnRuMiBkb3duIik7 CisJCSAgICB9CisJCSAgZWxzZSBpZiAoKG1vdXNlX2V2ZW50LmR3QnV0dG9u U3RhdGUgJiA0KSAhPSAoY29uLmR3TGFzdEJ1dHRvblN0YXRlICYgNCkpCisJ CSAgICB7CisJCSAgICAgIGIgPSAxOworCQkgICAgICBzdHJjcHkgKHN6LCAi YnRuMyBkb3duIik7CisJCSAgICB9CisKKwkJICBpZiAoY29uLmV4dF9tb3Vz ZV9tb2RlNiAvKiBkaXN0aW5ndWlzaCByZWxlYXNlICovCisJCSAgICAgICYm IG1vdXNlX2V2ZW50LmR3QnV0dG9uU3RhdGUgPCBjb24uZHdMYXN0QnV0dG9u U3RhdGUpCisJCSAgICBtb2RlNl90ZXJtID0gJ20nOworCisJCSAgY29uLmxh c3RfYnV0dG9uX2NvZGUgPSBiOworCisJCSAgaWYgKG1vdXNlX2V2ZW50LmR3 RXZlbnRGbGFncyA9PSBNT1VTRV9NT1ZFRCkKKwkJICAgIHsKKwkJICAgICAg YiArPSAzMjsKKwkJICAgICAgc3RyY3B5IChzeiwgIm1vdmUiKTsKKwkJICAg IH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIC8qIFJlbWVtYmVyIHRo ZSBtb2RpZmllZCBidXR0b24gc3RhdGUgKi8KKwkJICAgICAgY29uLmR3TGFz dEJ1dHRvblN0YXRlID0gbW91c2VfZXZlbnQuZHdCdXR0b25TdGF0ZTsKKwkJ ICAgIH0KIAkJfQotCSAgICB9Ci0JICBicmVhazsKLQotCWNhc2UgTU9VU0Vf RVZFTlQ6Ci0JICBzZW5kX3dpbmNoX21heWJlICgpOwotCSAgewotCSAgICBN T1VTRV9FVkVOVF9SRUNPUkQmIG1vdXNlX2V2ZW50ID0gaW5wdXRfcmVjLkV2 ZW50Lk1vdXNlRXZlbnQ7Ci0JICAgIC8qIEFzIGEgdW5pcXVlIGd1YXJkIGZv ciBtb3VzZSByZXBvcnQgZ2VuZXJhdGlvbiwKLQkgICAgICAgY2FsbCBtb3Vz ZV9hd2FyZSgpIHdoaWNoIGlzIGNvbW1vbiB3aXRoIHNlbGVjdCgpLCBzbyB0 aGUgcmVzdWx0Ci0JICAgICAgIG9mIHNlbGVjdCgpIGFuZCB0aGUgYWN0dWFs IHJlYWQoKSB3aWxsIGJlIGNvbnNpc3RlbnQgb24gdGhlCi0JICAgICAgIGlz c3VlIG9mIHdoZXRoZXIgaW5wdXQgKGkuZS4gYSBtb3VzZSBlc2NhcGUgc2Vx dWVuY2UpIHdpbGwKLQkgICAgICAgYmUgYXZhaWxhYmxlIG9yIG5vdCAqLwot CSAgICBpZiAobW91c2VfYXdhcmUgKG1vdXNlX2V2ZW50KSkKLQkgICAgICB7 Ci0JCS8qIE5vdGU6IFJlcG9ydGVkIG1vdXNlIHBvc2l0aW9uIHdhcyBhbHJl YWR5IHJldHJpZXZlZCBieQotCQkgICBtb3VzZV9hd2FyZSgpIGFuZCBhZGp1 c3RlZCBieSB3aW5kb3cgc2Nyb2xsIGJ1ZmZlciBvZmZzZXQgKi8KLQotCQkv KiBUcmVhdCB0aGUgZG91YmxlLWNsaWNrIGV2ZW50IGxpa2UgYSByZWd1bGFy IGJ1dHRvbiBwcmVzcyAqLwotCQlpZiAobW91c2VfZXZlbnQuZHdFdmVudEZs YWdzID09IERPVUJMRV9DTElDSykKLQkJICB7Ci0JCSAgICBzeXNjYWxsX3By aW50ZiAoIm1vdXNlOiBkb3VibGUtY2xpY2sgLT4gY2xpY2siKTsKLQkJICAg IG1vdXNlX2V2ZW50LmR3RXZlbnRGbGFncyA9IDA7Ci0JCSAgfQotCi0JCS8q IFRoaXMgY29kZSBhc3N1bWVzIFdpbmRvd3MgbmV2ZXIgcmVwb3J0cyBtdWx0 aXBsZSBidXR0b24KLQkJICAgZXZlbnRzIGF0IHRoZSBzYW1lIHRpbWUuICov Ci0JCWludCBiID0gMDsKLQkJY2hhciBzelszMl07Ci0JCWNoYXIgbW9kZTZf dGVybSA9ICdNJzsKLQotCQlpZiAobW91c2VfZXZlbnQuZHdFdmVudEZsYWdz ID09IE1PVVNFX1dIRUVMRUQpCi0JCSAgewotCQkgICAgaWYgKG1vdXNlX2V2 ZW50LmR3QnV0dG9uU3RhdGUgJiAweEZGODAwMDAwKQotCQkgICAgICB7Ci0J CQliID0gMHg0MTsKLQkJCXN0cmNweSAoc3osICJ3aGVlbCBkb3duIik7Ci0J CSAgICAgIH0KLQkJICAgIGVsc2UKLQkJICAgICAgewotCQkJYiA9IDB4NDA7 Ci0JCQlzdHJjcHkgKHN6LCAid2hlZWwgdXAiKTsKLQkJICAgICAgfQotCQkg IH0KLQkJZWxzZQotCQkgIHsKLQkJICAgIC8qIElnbm9yZSB1bmltcG9ydGFu dCBtb3VzZSBidXR0b25zICovCi0JCSAgICBtb3VzZV9ldmVudC5kd0J1dHRv blN0YXRlICY9IDB4NzsKLQotCQkgICAgaWYgKG1vdXNlX2V2ZW50LmR3RXZl bnRGbGFncyA9PSBNT1VTRV9NT1ZFRCkKLQkJICAgICAgewotCQkJYiA9IGNv bi5sYXN0X2J1dHRvbl9jb2RlOwotCQkgICAgICB9Ci0JCSAgICBlbHNlIGlm IChtb3VzZV9ldmVudC5kd0J1dHRvblN0YXRlIDwgY29uLmR3TGFzdEJ1dHRv blN0YXRlICYmICFjb24uZXh0X21vdXNlX21vZGU2KQotCQkgICAgICB7Ci0J CQliID0gMzsKLQkJCXN0cmNweSAoc3osICJidG4gdXAiKTsKLQkJICAgICAg fQotCQkgICAgZWxzZSBpZiAoKG1vdXNlX2V2ZW50LmR3QnV0dG9uU3RhdGUg JiAxKSAhPSAoY29uLmR3TGFzdEJ1dHRvblN0YXRlICYgMSkpCi0JCSAgICAg IHsKLQkJCWIgPSAwOwotCQkJc3RyY3B5IChzeiwgImJ0bjEgZG93biIpOwot CQkgICAgICB9Ci0JCSAgICBlbHNlIGlmICgobW91c2VfZXZlbnQuZHdCdXR0 b25TdGF0ZSAmIDIpICE9IChjb24uZHdMYXN0QnV0dG9uU3RhdGUgJiAyKSkK LQkJICAgICAgewotCQkJYiA9IDI7Ci0JCQlzdHJjcHkgKHN6LCAiYnRuMiBk b3duIik7Ci0JCSAgICAgIH0KLQkJICAgIGVsc2UgaWYgKChtb3VzZV9ldmVu dC5kd0J1dHRvblN0YXRlICYgNCkgIT0gKGNvbi5kd0xhc3RCdXR0b25TdGF0 ZSAmIDQpKQotCQkgICAgICB7Ci0JCQliID0gMTsKLQkJCXN0cmNweSAoc3os ICJidG4zIGRvd24iKTsKLQkJICAgICAgfQogCi0JCSAgICBpZiAoY29uLmV4 dF9tb3VzZV9tb2RlNiAvKiBkaXN0aW5ndWlzaCByZWxlYXNlICovCi0JCQkm JiBtb3VzZV9ldmVudC5kd0J1dHRvblN0YXRlIDwgY29uLmR3TGFzdEJ1dHRv blN0YXRlKQotCQkJbW9kZTZfdGVybSA9ICdtJzsKKwkgICAgICAvKiBSZW1l bWJlciBtb3VzZSBwb3NpdGlvbiAqLworCSAgICAgIGNvbi5kd0xhc3RNb3Vz ZVBvc2l0aW9uLlggPSBjb24uZHdNb3VzZVBvc2l0aW9uLlg7CisJICAgICAg Y29uLmR3TGFzdE1vdXNlUG9zaXRpb24uWSA9IGNvbi5kd01vdXNlUG9zaXRp b24uWTsKIAotCQkgICAgY29uLmxhc3RfYnV0dG9uX2NvZGUgPSBiOworCSAg ICAgIC8qIFJlbWVtYmVyIHRoZSBtb2RpZmllcnMgKi8KKwkgICAgICBjb24u bk1vZGlmaWVycyA9IDA7CisJICAgICAgaWYgKG1vdXNlX2V2ZW50LmR3Q29u dHJvbEtleVN0YXRlICYgU0hJRlRfUFJFU1NFRCkKKwkJY29uLm5Nb2RpZmll cnMgfD0gMHg0OworCSAgICAgIGlmIChtb3VzZV9ldmVudC5kd0NvbnRyb2xL ZXlTdGF0ZSAmIEFMVF9QUkVTU0VEKQorCQljb24ubk1vZGlmaWVycyB8PSAw eDg7CisJICAgICAgaWYgKG1vdXNlX2V2ZW50LmR3Q29udHJvbEtleVN0YXRl ICYgQ1RSTF9QUkVTU0VEKQorCQljb24ubk1vZGlmaWVycyB8PSAweDEwOwog Ci0JCSAgICBpZiAobW91c2VfZXZlbnQuZHdFdmVudEZsYWdzID09IE1PVVNF X01PVkVEKQotCQkgICAgICB7Ci0JCQliICs9IDMyOwotCQkJc3RyY3B5IChz eiwgIm1vdmUiKTsKLQkJICAgICAgfQotCQkgICAgZWxzZQotCQkgICAgICB7 Ci0JCQkvKiBSZW1lbWJlciB0aGUgbW9kaWZpZWQgYnV0dG9uIHN0YXRlICov Ci0JCQljb24uZHdMYXN0QnV0dG9uU3RhdGUgPSBtb3VzZV9ldmVudC5kd0J1 dHRvblN0YXRlOwotCQkgICAgICB9Ci0JCSAgfQotCi0JCS8qIFJlbWVtYmVy IG1vdXNlIHBvc2l0aW9uICovCi0JCWNvbi5kd0xhc3RNb3VzZVBvc2l0aW9u LlggPSBjb24uZHdNb3VzZVBvc2l0aW9uLlg7Ci0JCWNvbi5kd0xhc3RNb3Vz ZVBvc2l0aW9uLlkgPSBjb24uZHdNb3VzZVBvc2l0aW9uLlk7Ci0KLQkJLyog UmVtZW1iZXIgdGhlIG1vZGlmaWVycyAqLwotCQljb24ubk1vZGlmaWVycyA9 IDA7Ci0JCWlmIChtb3VzZV9ldmVudC5kd0NvbnRyb2xLZXlTdGF0ZSAmIFNI SUZUX1BSRVNTRUQpCi0JCSAgICBjb24ubk1vZGlmaWVycyB8PSAweDQ7Ci0J CWlmIChtb3VzZV9ldmVudC5kd0NvbnRyb2xLZXlTdGF0ZSAmIEFMVF9QUkVT U0VEKQotCQkgICAgY29uLm5Nb2RpZmllcnMgfD0gMHg4OwotCQlpZiAobW91 c2VfZXZlbnQuZHdDb250cm9sS2V5U3RhdGUgJiBDVFJMX1BSRVNTRUQpCi0J CSAgICBjb24ubk1vZGlmaWVycyB8PSAweDEwOwotCi0JCS8qIEluZGljYXRl IHRoZSBtb2RpZmllcnMgKi8KLQkJYiB8PSBjb24ubk1vZGlmaWVyczsKLQot CQkvKiBXZSBjYW4gbm93IGNyZWF0ZSB0aGUgY29kZS4gKi8KLQkJaWYgKGNv bi5leHRfbW91c2VfbW9kZTYpCi0JCSAgewotCQkgICAgX19zbWFsbF9zcHJp bnRmICh0bXAsICJcMDMzWzwlZDslZDslZCVjIiwgYiwKLQkJCQkgICAgIGNv bi5kd01vdXNlUG9zaXRpb24uWCArIDEsCi0JCQkJICAgICBjb24uZHdNb3Vz ZVBvc2l0aW9uLlkgKyAxLAotCQkJCSAgICAgbW9kZTZfdGVybSk7Ci0JCSAg ICBucmVhZCA9IHN0cmxlbiAodG1wKTsKLQkJICB9Ci0JCWVsc2UgaWYgKGNv bi5leHRfbW91c2VfbW9kZTE1KQotCQkgIHsKLQkJICAgIF9fc21hbGxfc3By aW50ZiAodG1wLCAiXDAzM1slZDslZDslZE0iLCBiICsgMzIsCi0JCQkJICAg ICBjb24uZHdNb3VzZVBvc2l0aW9uLlggKyAxLAotCQkJCSAgICAgY29uLmR3 TW91c2VQb3NpdGlvbi5ZICsgMSk7Ci0JCSAgICBucmVhZCA9IHN0cmxlbiAo dG1wKTsKLQkJICB9Ci0JCWVsc2UgaWYgKGNvbi5leHRfbW91c2VfbW9kZTUp Ci0JCSAgewotCQkgICAgdW5zaWduZWQgaW50IHhjb2RlID0gY29uLmR3TW91 c2VQb3NpdGlvbi5YICsgJyAnICsgMTsKLQkJICAgIHVuc2lnbmVkIGludCB5 Y29kZSA9IGNvbi5kd01vdXNlUG9zaXRpb24uWSArICcgJyArIDE7Ci0KLQkJ ICAgIF9fc21hbGxfc3ByaW50ZiAodG1wLCAiXDAzM1tNJWMiLCBiICsgJyAn KTsKLQkJICAgIG5yZWFkID0gNDsKLQkJICAgIC8qIHRoZSBuZWF0IG5lc3Rl ZCBlbmNvZGluZyBmdW5jdGlvbiBvZiBtaW50dHkKLQkJICAgICAgIGRvZXMg bm90IGNvbXBpbGUgaW4gZysrLCBzbyBsZXQncyB1bmZvbGQgaXQ6ICovCi0J CSAgICBpZiAoeGNvZGUgPCAweDgwKQotCQkgICAgICB0bXAgW25yZWFkKytd ID0geGNvZGU7Ci0JCSAgICBlbHNlIGlmICh4Y29kZSA8IDB4ODAwKQotCQkg ICAgICB7Ci0JCQl0bXAgW25yZWFkKytdID0gMHhDMCArICh4Y29kZSA+PiA2 KTsKLQkJCXRtcCBbbnJlYWQrK10gPSAweDgwICsgKHhjb2RlICYgMHgzRik7 Ci0JCSAgICAgIH0KLQkJICAgIGVsc2UKLQkJICAgICAgdG1wIFtucmVhZCsr XSA9IDA7Ci0JCSAgICBpZiAoeWNvZGUgPCAweDgwKQotCQkgICAgICB0bXAg W25yZWFkKytdID0geWNvZGU7Ci0JCSAgICBlbHNlIGlmICh5Y29kZSA8IDB4 ODAwKQotCQkgICAgICB7Ci0JCQl0bXAgW25yZWFkKytdID0gMHhDMCArICh5 Y29kZSA+PiA2KTsKLQkJCXRtcCBbbnJlYWQrK10gPSAweDgwICsgKHljb2Rl ICYgMHgzRik7Ci0JCSAgICAgIH0KLQkJICAgIGVsc2UKLQkJICAgICAgdG1w IFtucmVhZCsrXSA9IDA7Ci0JCSAgfQotCQllbHNlCi0JCSAgewotCQkgICAg dW5zaWduZWQgaW50IHhjb2RlID0gY29uLmR3TW91c2VQb3NpdGlvbi5YICsg JyAnICsgMTsKLQkJICAgIHVuc2lnbmVkIGludCB5Y29kZSA9IGNvbi5kd01v dXNlUG9zaXRpb24uWSArICcgJyArIDE7Ci0JCSAgICBpZiAoeGNvZGUgPj0g MjU2KQotCQkgICAgICB4Y29kZSA9IDA7Ci0JCSAgICBpZiAoeWNvZGUgPj0g MjU2KQotCQkgICAgICB5Y29kZSA9IDA7Ci0JCSAgICBfX3NtYWxsX3Nwcmlu dGYgKHRtcCwgIlwwMzNbTSVjJWMlYyIsIGIgKyAnICcsCi0JCQkJICAgICB4 Y29kZSwgeWNvZGUpOwotCQkgICAgbnJlYWQgPSA2OwkvKiB0bXAgbWF5IGNv bnRhaW4gTlVMIGJ5dGVzICovCi0JCSAgfQotCQlzeXNjYWxsX3ByaW50ZiAo Im1vdXNlOiAlcyBhdCAoJWQsJWQpIiwgc3osCi0JCQkJY29uLmR3TW91c2VQ b3NpdGlvbi5YLAotCQkJCWNvbi5kd01vdXNlUG9zaXRpb24uWSk7Ci0KLQkJ dG9hZGQgPSB0bXA7Ci0JICAgICAgfQotCSAgfQotCSAgYnJlYWs7CisJICAg ICAgLyogSW5kaWNhdGUgdGhlIG1vZGlmaWVycyAqLworCSAgICAgIGIgfD0g Y29uLm5Nb2RpZmllcnM7CiAKLQljYXNlIEZPQ1VTX0VWRU5UOgotCSAgaWYg KGNvbi51c2VfZm9jdXMpCi0JICAgIHsKLQkgICAgICBpZiAoaW5wdXRfcmVj LkV2ZW50LkZvY3VzRXZlbnQuYlNldEZvY3VzKQotCQlfX3NtYWxsX3Nwcmlu dGYgKHRtcCwgIlwwMzNbSSIpOworCSAgICAgIC8qIFdlIGNhbiBub3cgY3Jl YXRlIHRoZSBjb2RlLiAqLworCSAgICAgIGlmIChjb24uZXh0X21vdXNlX21v ZGU2KQorCQl7CisJCSAgX19zbWFsbF9zcHJpbnRmICh0bXAsICJcMDMzWzwl ZDslZDslZCVjIiwgYiwKKwkJCQkgICBjb24uZHdNb3VzZVBvc2l0aW9uLlgg KyAxLAorCQkJCSAgIGNvbi5kd01vdXNlUG9zaXRpb24uWSArIDEsCisJCQkJ ICAgbW9kZTZfdGVybSk7CisJCSAgbnJlYWQgPSBzdHJsZW4gKHRtcCk7CisJ CX0KKwkgICAgICBlbHNlIGlmIChjb24uZXh0X21vdXNlX21vZGUxNSkKKwkJ eworCQkgIF9fc21hbGxfc3ByaW50ZiAodG1wLCAiXDAzM1slZDslZDslZE0i LCBiICsgMzIsCisJCQkJICAgY29uLmR3TW91c2VQb3NpdGlvbi5YICsgMSwK KwkJCQkgICBjb24uZHdNb3VzZVBvc2l0aW9uLlkgKyAxKTsKKwkJICBucmVh ZCA9IHN0cmxlbiAodG1wKTsKKwkJfQorCSAgICAgIGVsc2UgaWYgKGNvbi5l eHRfbW91c2VfbW9kZTUpCisJCXsKKwkJICB1bnNpZ25lZCBpbnQgeGNvZGUg PSBjb24uZHdNb3VzZVBvc2l0aW9uLlggKyAnICcgKyAxOworCQkgIHVuc2ln bmVkIGludCB5Y29kZSA9IGNvbi5kd01vdXNlUG9zaXRpb24uWSArICcgJyAr IDE7CisKKwkJICBfX3NtYWxsX3NwcmludGYgKHRtcCwgIlwwMzNbTSVjIiwg YiArICcgJyk7CisJCSAgbnJlYWQgPSA0OworCQkgIC8qIHRoZSBuZWF0IG5l c3RlZCBlbmNvZGluZyBmdW5jdGlvbiBvZiBtaW50dHkKKwkJICAgICBkb2Vz IG5vdCBjb21waWxlIGluIGcrKywgc28gbGV0J3MgdW5mb2xkIGl0OiAqLwor CQkgIGlmICh4Y29kZSA8IDB4ODApCisJCSAgICB0bXAgW25yZWFkKytdID0g eGNvZGU7CisJCSAgZWxzZSBpZiAoeGNvZGUgPCAweDgwMCkKKwkJICAgIHsK KwkJICAgICAgdG1wIFtucmVhZCsrXSA9IDB4QzAgKyAoeGNvZGUgPj4gNik7 CisJCSAgICAgIHRtcCBbbnJlYWQrK10gPSAweDgwICsgKHhjb2RlICYgMHgz Rik7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgdG1wIFtucmVhZCsrXSA9 IDA7CisJCSAgaWYgKHljb2RlIDwgMHg4MCkKKwkJICAgIHRtcCBbbnJlYWQr K10gPSB5Y29kZTsKKwkJICBlbHNlIGlmICh5Y29kZSA8IDB4ODAwKQorCQkg ICAgeworCQkgICAgICB0bXAgW25yZWFkKytdID0gMHhDMCArICh5Y29kZSA+ PiA2KTsKKwkJICAgICAgdG1wIFtucmVhZCsrXSA9IDB4ODAgKyAoeWNvZGUg JiAweDNGKTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB0bXAgW25yZWFk KytdID0gMDsKKwkJfQogCSAgICAgIGVsc2UKLQkJX19zbWFsbF9zcHJpbnRm ICh0bXAsICJcMDMzW08iKTsKKwkJeworCQkgIHVuc2lnbmVkIGludCB4Y29k ZSA9IGNvbi5kd01vdXNlUG9zaXRpb24uWCArICcgJyArIDE7CisJCSAgdW5z aWduZWQgaW50IHljb2RlID0gY29uLmR3TW91c2VQb3NpdGlvbi5ZICsgJyAn ICsgMTsKKwkJICBpZiAoeGNvZGUgPj0gMjU2KQorCQkgICAgeGNvZGUgPSAw OworCQkgIGlmICh5Y29kZSA+PSAyNTYpCisJCSAgICB5Y29kZSA9IDA7CisJ CSAgX19zbWFsbF9zcHJpbnRmICh0bXAsICJcMDMzW00lYyVjJWMiLCBiICsg JyAnLAorCQkJCSAgIHhjb2RlLCB5Y29kZSk7CisJCSAgbnJlYWQgPSA2Owkv KiB0bXAgbWF5IGNvbnRhaW4gTlVMIGJ5dGVzICovCisJCX0KKwkgICAgICBz eXNjYWxsX3ByaW50ZiAoIm1vdXNlOiAlcyBhdCAoJWQsJWQpIiwgc3osCisJ CQkgICAgICBjb24uZHdNb3VzZVBvc2l0aW9uLlgsCisJCQkgICAgICBjb24u ZHdNb3VzZVBvc2l0aW9uLlkpOwogCiAJICAgICAgdG9hZGQgPSB0bXA7Ci0J ICAgICAgbnJlYWQgPSAzOwogCSAgICB9Ci0JICBicmVhazsKLQotCWNhc2Ug V0lORE9XX0JVRkZFUl9TSVpFX0VWRU5UOgotCSAgc2VuZF93aW5jaF9tYXli ZSAoKTsKLQkgIC8qIGZhbGwgdGhyb3VnaCAqLwotCWRlZmF1bHQ6Ci0JICBj b250aW51ZTsKIAl9CisgICAgICBicmVhazsKIAotICAgICAgaWYgKHRvYWRk KQorICAgIGNhc2UgRk9DVVNfRVZFTlQ6CisgICAgICBpZiAoY29uLnVzZV9m b2N1cykKIAl7Ci0JICBsaW5lX2VkaXRfc3RhdHVzIHJlcyA9IGxpbmVfZWRp dCAodG9hZGQsIG5yZWFkLCB0aSk7Ci0JICBpZiAocmVzID09IGxpbmVfZWRp dF9zaWduYWxsZWQpCi0JICAgIGdvdG8gc2lnX2V4aXQ7Ci0JICBlbHNlIGlm IChyZXMgPT0gbGluZV9lZGl0X2lucHV0X2RvbmUpCi0JICAgIGJyZWFrOwot CX0KLSAgICB9CisJICBpZiAoaW5wdXRfcmVjLkV2ZW50LkZvY3VzRXZlbnQu YlNldEZvY3VzKQorCSAgICBfX3NtYWxsX3NwcmludGYgKHRtcCwgIlwwMzNb SSIpOworCSAgZWxzZQorCSAgICBfX3NtYWxsX3NwcmludGYgKHRtcCwgIlww MzNbTyIpOwogCi0gIHdoaWxlIChidWZsZW4pCi0gICAgaWYgKChjaCA9IGdl dF9yZWFkYWhlYWQgKCkpIDwgMCkKKwkgIHRvYWRkID0gdG1wOworCSAgbnJl YWQgPSAzOworCX0KICAgICAgIGJyZWFrOwotICAgIGVsc2UKLSAgICAgIHsK LQlidWZbY29waWVkX2NoYXJzKytdID0gKHVuc2lnbmVkIGNoYXIpKGNoICYg MHhmZik7Ci0JYnVmbGVuLS07Ci0gICAgICB9Ci0jdW5kZWYgYnVmCiAKLSAg YnVmbGVuID0gY29waWVkX2NoYXJzOwotICByZXR1cm47Ci0KLWVycjoKLSAg X19zZXRlcnJubyAoKTsKLSAgYnVmbGVuID0gKHNpemVfdCkgLTE7Ci0gIHJl dHVybjsKKyAgICBjYXNlIFdJTkRPV19CVUZGRVJfU0laRV9FVkVOVDoKKyAg ICAgIGlmIChzZW5kX3dpbmNoX21heWJlICgpKQorCXJldHVybiBpbnB1dF93 aW5jaDsKKyAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgIGRlZmF1bHQ6 CisgICAgICByZXR1cm4gaW5wdXRfcHJvY2Vzc2luZzsKKyAgICB9CiAKLXNp Z19leGl0OgotICBzZXRfc2lnX2Vycm5vIChFSU5UUik7Ci0gIGJ1ZmxlbiA9 IChzaXplX3QpIC0xOworICBpZiAodG9hZGQpCisgICAgeworICAgICAgc3Np emVfdCByZXQ7CisgICAgICBsaW5lX2VkaXRfc3RhdHVzIHJlcyA9IGxpbmVf ZWRpdCAodG9hZGQsIG5yZWFkLCAqdGksICZyZXQpOworICAgICAgaWYgKHJl cyA9PSBsaW5lX2VkaXRfc2lnbmFsbGVkKQorCXJldHVybiBpbnB1dF9zaWdu YWxsZWQ7CisgICAgICBlbHNlIGlmIChyZXMgPT0gbGluZV9lZGl0X2lucHV0 X2RvbmUpCisJeworCSAgaW5wdXRfcmVhZHkgPSB0cnVlOworCSAgcmV0dXJu IGlucHV0X29rOworCX0KKyAgICB9CisgIHJldHVybiBpbnB1dF9wcm9jZXNz aW5nOwogfQogCiB2b2lkCkBAIC04NDQsNiArOTQwLDggQEAgZmhhbmRsZXJf Y29uc29sZTo6b3BlbiAoaW50IGZsYWdzLCBtb2RlX3QpCiAgICAgfQogICBz ZXRfb3V0cHV0X2hhbmRsZSAoaCk7CiAKKyAgc2V0dXBfaW9fbXV0ZXggKCk7 CisKICAgaWYgKGNvbi5maWxsaW4gKGdldF9vdXRwdXRfaGFuZGxlICgpKSkK ICAgICB7CiAgICAgICBjb24uY3VycmVudF93aW4zMl9hdHRyID0gY29uLmIu d0F0dHJpYnV0ZXM7CkBAIC04NTUsMTAgKzk1MywyMyBAQCBmaGFuZGxlcl9j b25zb2xlOjpvcGVuIChpbnQgZmxhZ3MsIG1vZGVfdCkKICAgZ2V0X3R0eXAg KCktPnJzdGNvbnMgKGZhbHNlKTsKICAgc2V0X29wZW5fc3RhdHVzICgpOwog CisgIGlmIChnZXRwaWQgKCkgPT0gY29uLm93bmVyICYmIGNvbi5jYXAyNGJp dF9jb2xvcikKKyAgICB7CisgICAgICBEV09SRCBkd01vZGU7CisgICAgICAv KiBFbmFibGUgeHRlcm0gY29tcGF0aWJsZSBtb2RlIGluIG91dHB1dCAqLwor ICAgICAgR2V0Q29uc29sZU1vZGUgKGdldF9vdXRwdXRfaGFuZGxlICgpLCAm ZHdNb2RlKTsKKyAgICAgIGR3TW9kZSB8PSBFTkFCTEVfVklSVFVBTF9URVJN SU5BTF9QUk9DRVNTSU5HOworICAgICAgU2V0Q29uc29sZU1vZGUgKGdldF9v dXRwdXRfaGFuZGxlICgpLCBkd01vZGUpOworICAgICAgLyogRW5hYmxlIHh0 ZXJtIGNvbXBhdGlibGUgbW9kZSBpbiBpbnB1dCAqLworICAgICAgR2V0Q29u c29sZU1vZGUgKGdldF9oYW5kbGUgKCksICZkd01vZGUpOworICAgICAgZHdN b2RlIHw9IEVOQUJMRV9WSVJUVUFMX1RFUk1JTkFMX0lOUFVUOworICAgICAg U2V0Q29uc29sZU1vZGUgKGdldF9oYW5kbGUgKCksIGR3TW9kZSk7CisgICAg fQorCiAgIERXT1JEIGNmbGFnczsKICAgaWYgKEdldENvbnNvbGVNb2RlIChn ZXRfaGFuZGxlICgpLCAmY2ZsYWdzKSkKLSAgICBTZXRDb25zb2xlTW9kZSAo Z2V0X2hhbmRsZSAoKSwKLQkJICAgIEVOQUJMRV9XSU5ET1dfSU5QVVQgfCBF TkFCTEVfTU9VU0VfSU5QVVQgfCBjZmxhZ3MpOworICAgIFNldENvbnNvbGVN b2RlIChnZXRfaGFuZGxlICgpLCBFTkFCTEVfV0lORE9XX0lOUFVUCisJCSAg ICB8IChjb24uY2FwMjRiaXRfY29sb3IgPyAwIDogRU5BQkxFX01PVVNFX0lO UFVUKSB8IGNmbGFncyk7CiAKICAgZGVidWdfcHJpbnRmICgib3BlbmVkIGNv bmluJCAlcCwgY29ub3V0JCAlcCIsIGdldF9oYW5kbGUgKCksCiAJCWdldF9v dXRwdXRfaGFuZGxlICgpKTsKQEAgLTg3OCw2ICs5ODksMjYgQEAgZmhhbmRs ZXJfY29uc29sZTo6b3Blbl9zZXR1cCAoaW50IGZsYWdzKQogaW50CiBmaGFu ZGxlcl9jb25zb2xlOjpjbG9zZSAoKQogeworICBkZWJ1Z19wcmludGYgKCJj bG9zaW5nOiAlcCwgJXAiLCBnZXRfaGFuZGxlICgpLCBnZXRfb3V0cHV0X2hh bmRsZSAoKSk7CisKKyAgQ2xvc2VIYW5kbGUgKGlucHV0X211dGV4KTsKKyAg aW5wdXRfbXV0ZXggPSBOVUxMOworICBDbG9zZUhhbmRsZSAob3V0cHV0X211 dGV4KTsKKyAgb3V0cHV0X211dGV4ID0gTlVMTDsKKworICBpZiAoc2hhcmVk X2NvbnNvbGVfaW5mbyAmJiBnZXRwaWQgKCkgPT0gY29uLm93bmVyICYmIGNv bi5jYXAyNGJpdF9jb2xvcikKKyAgICB7CisgICAgICBEV09SRCBkd01vZGU7 CisgICAgICAvKiBEaXNhYmxlIHh0ZXJtIGNvbXBhdGlibGUgbW9kZSBpbiBp bnB1dCAqLworICAgICAgR2V0Q29uc29sZU1vZGUgKGdldF9oYW5kbGUgKCks ICZkd01vZGUpOworICAgICAgZHdNb2RlICY9IH5FTkFCTEVfVklSVFVBTF9U RVJNSU5BTF9JTlBVVDsKKyAgICAgIFNldENvbnNvbGVNb2RlIChnZXRfaGFu ZGxlICgpLCBkd01vZGUpOworICAgICAgLyogRGlzYWJsZSB4dGVybSBjb21w YXRpYmxlIG1vZGUgaW4gb3V0cHV0ICovCisgICAgICBHZXRDb25zb2xlTW9k ZSAoZ2V0X291dHB1dF9oYW5kbGUgKCksICZkd01vZGUpOworICAgICAgZHdN b2RlICY9IH5FTkFCTEVfVklSVFVBTF9URVJNSU5BTF9QUk9DRVNTSU5HOwor ICAgICAgU2V0Q29uc29sZU1vZGUgKGdldF9vdXRwdXRfaGFuZGxlICgpLCBk d01vZGUpOworICAgIH0KKwogICBDbG9zZUhhbmRsZSAoZ2V0X2hhbmRsZSAo KSk7CiAgIENsb3NlSGFuZGxlIChnZXRfb3V0cHV0X2hhbmRsZSAoKSk7CiAg IGlmICghaGF2ZV9leGVjZWQpCkBAIC04OTEsNiArMTAyMiw3IEBAIGZoYW5k bGVyX2NvbnNvbGU6OmlvY3RsICh1bnNpZ25lZCBpbnQgY21kLCB2b2lkICph cmcpCiAgIGludCByZXMgPSBmaGFuZGxlcl90ZXJtaW9zOjppb2N0bCAoY21k LCBhcmcpOwogICBpZiAocmVzIDw9IDApCiAgICAgcmV0dXJuIHJlczsKKyAg YWNxdWlyZV9vdXRwdXRfbXV0ZXggKElORklOSVRFKTsKICAgc3dpdGNoIChj bWQpCiAgICAgewogICAgICAgY2FzZSBUSU9DR1dJTlNaOgpAQCAtOTA2LDIw ICsxMDM4LDI1IEBAIGZoYW5kbGVyX2NvbnNvbGU6OmlvY3RsICh1bnNpZ25l ZCBpbnQgY21kLCB2b2lkICphcmcpCiAJICAgIHN5c2NhbGxfcHJpbnRmICgi V0lOU1o6IChyb3c9JWQsY29sPSVkKSIsCiAJCQkgICAoKHN0cnVjdCB3aW5z aXplICopIGFyZyktPndzX3JvdywKIAkJCSAgICgoc3RydWN0IHdpbnNpemUg KikgYXJnKS0+d3NfY29sKTsKKwkgICAgcmVsZWFzZV9vdXRwdXRfbXV0ZXgg KCk7CiAJICAgIHJldHVybiAwOwogCSAgfQogCWVsc2UKIAkgIHsKIAkgICAg c3lzY2FsbF9wcmludGYgKCJXSU5TWiBmYWlsZWQiKTsKIAkgICAgX19zZXRl cnJubyAoKTsKKwkgICAgcmVsZWFzZV9vdXRwdXRfbXV0ZXggKCk7CiAJICAg IHJldHVybiAtMTsKIAkgIH0KKwlyZWxlYXNlX291dHB1dF9tdXRleCAoKTsK IAlyZXR1cm4gMDsKICAgICAgIGNhc2UgVElPQ1NXSU5TWjoKIAliZ19jaGVj ayAoU0lHVFRPVSk7CisJcmVsZWFzZV9vdXRwdXRfbXV0ZXggKCk7CiAJcmV0 dXJuIDA7CiAgICAgICBjYXNlIEtER0tCTUVUQToKIAkqKGludCAqKSBhcmcg PSAoY29uLm1ldGFiaXQpID8gS19NRVRBQklUIDogS19FU0NQUkVGSVg7CisJ cmVsZWFzZV9vdXRwdXRfbXV0ZXggKCk7CiAJcmV0dXJuIDA7CiAgICAgICBj YXNlIEtEU0tCTUVUQToKIAlpZiAoKGludHB0cl90KSBhcmcgPT0gS19NRVRB QklUKQpAQCAtOTI5LDE2ICsxMDY2LDIwIEBAIGZoYW5kbGVyX2NvbnNvbGU6 OmlvY3RsICh1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiAJZWxzZQog CSAgewogCSAgICBzZXRfZXJybm8gKEVJTlZBTCk7CisJICAgIHJlbGVhc2Vf b3V0cHV0X211dGV4ICgpOwogCSAgICByZXR1cm4gLTE7CiAJICB9CisJcmVs ZWFzZV9vdXRwdXRfbXV0ZXggKCk7CiAJcmV0dXJuIDA7CiAgICAgICBjYXNl IFRJT0NMSU5VWDoKIAlpZiAoKih1bnNpZ25lZCBjaGFyICopIGFyZyA9PSA2 KQogCSAgewogCSAgICAqKHVuc2lnbmVkIGNoYXIgKikgYXJnID0gKHVuc2ln bmVkIGNoYXIpIGNvbi5uTW9kaWZpZXJzOworCSAgICByZWxlYXNlX291dHB1 dF9tdXRleCAoKTsKIAkgICAgcmV0dXJuIDA7CiAJICB9CiAJc2V0X2Vycm5v IChFSU5WQUwpOworCXJlbGVhc2Vfb3V0cHV0X211dGV4ICgpOwogCXJldHVy biAtMTsKICAgICAgIGNhc2UgRklPTlJFQUQ6CiAJewpAQCAtOTUxLDE3ICsx MDkyLDIwIEBAIGZoYW5kbGVyX2NvbnNvbGU6OmlvY3RsICh1bnNpZ25lZCBp bnQgY21kLCB2b2lkICphcmcpCiAJICBpZiAoIVBlZWtDb25zb2xlSW5wdXRX IChnZXRfaGFuZGxlICgpLCBpbnAsIElOUkVDX1NJWkUsICZuKSkKIAkgICAg ewogCSAgICAgIHNldF9lcnJubyAoRUlOVkFMKTsKKwkgICAgICByZWxlYXNl X291dHB1dF9tdXRleCAoKTsKIAkgICAgICByZXR1cm4gLTE7CiAJICAgIH0K IAkgIHdoaWxlIChuLS0gPiAwKQogCSAgICBpZiAoaW5wW25dLkV2ZW50VHlw ZSA9PSBLRVlfRVZFTlQgJiYgaW5wW25dLkV2ZW50LktleUV2ZW50LmJLZXlE b3duKQogCSAgICAgICsrcmV0OwogCSAgKihpbnQgKikgYXJnID0gcmV0Owor CSAgcmVsZWFzZV9vdXRwdXRfbXV0ZXggKCk7CiAJICByZXR1cm4gMDsKIAl9 CiAJYnJlYWs7CiAgICAgfQogCisgIHJlbGVhc2Vfb3V0cHV0X211dGV4ICgp OwogICByZXR1cm4gZmhhbmRsZXJfYmFzZTo6aW9jdGwgKGNtZCwgYXJnKTsK IH0KIApAQCAtOTg3LDYgKzExMzEsMTMgQEAgZmhhbmRsZXJfY29uc29sZTo6 b3V0cHV0X3Rjc2V0YXR0ciAoaW50LCBzdHJ1Y3QgdGVybWlvcyBjb25zdCAq dCkKICAgLyogQWxsIHRoZSBvdXRwdXQgYml0cyB3ZSBjYW4gaWdub3JlICov CiAKICAgRFdPUkQgZmxhZ3MgPSBFTkFCTEVfUFJPQ0VTU0VEX09VVFBVVCB8 IEVOQUJMRV9XUkFQX0FUX0VPTF9PVVRQVVQ7CisgIC8qIElmIHN5c3RlbSBo YXMgMjRiaXQgY29sb3IgY2FwYWJpbGl0eSwgdXNlIHh0ZXJtIGNvbXBhdGli bGUgbW9kZS4gKi8KKyAgaWYgKGNvbi5jYXAyNGJpdF9jb2xvcikKKyAgICB7 CisgICAgICBmbGFncyB8PSBFTkFCTEVfVklSVFVBTF9URVJNSU5BTF9QUk9D RVNTSU5HOworICAgICAgaWYgKCEodC0+Y19vZmxhZyAmIE9QT1NUKSB8fCAh KHQtPmNfb2ZsYWcgJiBPTkxDUikpCisJZmxhZ3MgfD0gRElTQUJMRV9ORVdM SU5FX0FVVE9fUkVUVVJOOworICAgIH0KIAogICBpbnQgcmVzID0gU2V0Q29u c29sZU1vZGUgKGdldF9vdXRwdXRfaGFuZGxlICgpLCBmbGFncykgPyAwIDog LTE7CiAgIGlmIChyZXMpCkBAIC0xMDQzLDcgKzExOTQsMTAgQEAgZmhhbmRs ZXJfY29uc29sZTo6aW5wdXRfdGNzZXRhdHRyIChpbnQsIHN0cnVjdCB0ZXJt aW9zIGNvbnN0ICp0KQogICAgICAgZmxhZ3MgfD0gRU5BQkxFX1BST0NFU1NF RF9JTlBVVDsKICAgICB9CiAKLSAgZmxhZ3MgfD0gRU5BQkxFX1dJTkRPV19J TlBVVCB8IEVOQUJMRV9NT1VTRV9JTlBVVDsKKyAgZmxhZ3MgfD0gRU5BQkxF X1dJTkRPV19JTlBVVCB8IChjb24uY2FwMjRiaXRfY29sb3IgPyAwIDogRU5B QkxFX01PVVNFX0lOUFVUKTsKKyAgLyogaWYgc3lzdGVtIGhhcyAyNGJpdCBj b2xvciBjYXBhYmlsaXR5LCB1c2UgeHRlcm0gY29tcGF0aWJsZSBtb2RlLiAq LworICBpZiAoY29uLmNhcDI0Yml0X2NvbG9yKQorICAgIGZsYWdzIHw9IEVO QUJMRV9WSVJUVUFMX1RFUk1JTkFMX0lOUFVUOwogCiAgIGludCByZXM7CiAg IGlmIChmbGFncyA9PSBvZmxhZ3MpCkBAIC0xMTEwLDcgKzEyNjQsOCBAQCBm aGFuZGxlcl9jb25zb2xlOjp0Y2dldGF0dHIgKHN0cnVjdCB0ZXJtaW9zICp0 KQogfQogCiBmaGFuZGxlcl9jb25zb2xlOjpmaGFuZGxlcl9jb25zb2xlIChm aF9kZXZpY2VzIHVuaXQpIDoKLSAgZmhhbmRsZXJfdGVybWlvcyAoKQorICBm aGFuZGxlcl90ZXJtaW9zICgpLCBpbnB1dF9yZWFkeSAoZmFsc2UpLAorICBp bnB1dF9tdXRleCAoTlVMTCksIG91dHB1dF9tdXRleCAoTlVMTCkKIHsKICAg aWYgKHVuaXQgPiAwKQogICAgIGRldiAoKS5wYXJzZSAodW5pdCk7CkBAIC0x NjAyLDExICsxNzU3LDMyIEBAIHN0YXRpYyBjb25zdCBjaGFyIGJhc2VfY2hh cnNbMjU2XSA9CiAvKkYwIEYxIEYyIEYzIEY0IEY1IEY2IEY3ICovIE5PUiwg Tk9SLCBOT1IsIE5PUiwgTk9SLCBOT1IsIE5PUiwgTk9SLAogLypGOCBGOSBG QSBGQiBGQyBGRCBGRSBGRiAqLyBOT1IsIE5PUiwgTk9SLCBOT1IsIE5PUiwg Tk9SLCBOT1IsIE5PUiB9OwogCitzdGF0aWMgY29uc3QgY2hhciB0YWJsZTI1 NlsyNTZdID0KK3sKKyAgIDAsIDQsIDIsIDYsIDEsIDUsIDMsIDcsIDgsMTIs MTAsMTQsIDksMTMsMTEsMTUsCisgICAwLCAxLCAxLCAxLCA5LCA5LCAyLCAz LCAzLCAzLCAzLCA5LCAyLCAzLCAzLCAzLAorICAgMywxMSwgMiwgMywgMywg MywxMSwxMSwxMCwgMywgMywxMSwxMSwxMSwxMCwxMCwKKyAgMTEsMTEsMTEs MTEsIDQsIDUsIDUsIDUsIDUsIDksIDYsIDgsIDgsIDgsIDgsIDksCisgICA2 LCA4LCA4LCA4LCA4LCA3LCA2LCA4LCA4LCA4LCA3LCA3LCA2LCA4LCA4LCA3 LAorICAgNywxMSwxMCwxMCwgNywgNywxMSwxMSwgNCwgNSwgNSwgNSwgNSwx MywgNiwgOCwKKyAgIDgsIDgsIDgsIDcsIDYsIDgsIDgsIDgsIDcsIDcsIDYs IDgsIDgsIDcsIDcsIDcsCisgICA2LCA4LCA3LCA3LCA3LCA3LDE0LCA3LCA3 LCA3LCA3LCA3LCA0LCA1LCA1LCA1LAorICAxMywxMywgNiwgOCwgOCwgOCwg NywgNywgNiwgOCwgOCwgNywgNywgNywgNiwgOCwKKyAgIDcsIDcsIDcsIDcs MTQsIDcsIDcsIDcsIDcsIDcsMTQsIDcsIDcsIDcsIDcsMTUsCisgIDEyLCA1 LCA1LDEzLDEzLDEzLCA2LCA4LCA4LCA3LCA3LDEzLCA2LCA4LCA3LCA3LAor ICAgNywgNywxNCwgNywgNywgNywgNywgNywxNCwgNywgNywgNywgNywxNSwx NCwxNCwKKyAgIDcsIDcsMTUsMTUsMTIsMTIsMTMsMTMsMTMsMTMsMTIsMTIs IDcsIDcsMTMsMTMsCisgIDE0LCA3LCA3LCA3LCA3LCA3LDE0LCA3LCA3LCA3 LCA3LDE1LDE0LDE0LCA3LCA3LAorICAxNSwxNSwxNCwxNCwgNywxNSwxNSwx NSwgMCwgMCwgMCwgMCwgMCwgMCwgOCwgOCwKKyAgIDgsIDgsIDgsIDgsIDgs IDgsIDgsIDgsIDcsIDcsIDcsIDcsIDcsIDcsMTUsMTUKK307CisKIHZvaWQK IGZoYW5kbGVyX2NvbnNvbGU6OmNoYXJfY29tbWFuZCAoY2hhciBjKQogewog ICBpbnQgeCwgeSwgbjsKICAgY2hhciBidWZbNDBdOworICBpbnQgciwgZywg YjsKIAogICBzd2l0Y2ggKGMpCiAgICAgewpAQCAtMTY3OCw2ICsxODU0LDQw IEBAIGZoYW5kbGVyX2NvbnNvbGU6OmNoYXJfY29tbWFuZCAoY2hhciBjKQog CSAgICAgY2FzZSAzNzoJCS8qIFdISVRFIGZvcmVnICovCiAJICAgICAgIGNv bi5mZyA9IEZPUkVHUk9VTkRfQkxVRSB8IEZPUkVHUk9VTkRfR1JFRU4gfCBG T1JFR1JPVU5EX1JFRDsKIAkgICAgICAgYnJlYWs7CisJICAgICBjYXNlIDM4 OgorCSAgICAgICBpZiAoY29uLm5hcmdzIDwgMSkKKwkJIC8qIFNlcXVlbmNl IGVycm9yIChhYm9ydCkgKi8KKwkJIGJyZWFrOworCSAgICAgICBzd2l0Y2gg KGNvbi5hcmdzWzFdKQorCQkgeworCQkgY2FzZSAyOgorCQkgICBpZiAoY29u Lm5hcmdzICE9IDQpCisJCSAgICAgLyogU2VxdWVuY2UgZXJyb3IgKGFib3J0 KSAqLworCQkgICAgIGJyZWFrOworCQkgICByID0gY29uLmFyZ3NbMl07CisJ CSAgIGcgPSBjb24uYXJnc1szXTsKKwkJICAgYiA9IGNvbi5hcmdzWzRdOwor CQkgICByID0gciA8ICg5NSArIDEpIC8gMiA/IDAgOiByID4gMjU1ID8gNSA6 IChyIC0gNTUgKyAyMCkgLyA0MDsKKwkJICAgZyA9IGcgPCAoOTUgKyAxKSAv IDIgPyAwIDogZyA+IDI1NSA/IDUgOiAoZyAtIDU1ICsgMjApIC8gNDA7CisJ CSAgIGIgPSBiIDwgKDk1ICsgMSkgLyAyID8gMCA6IGIgPiAyNTUgPyA1IDog KGIgLSA1NSArIDIwKSAvIDQwOworCQkgICBjb24uZmcgPSB0YWJsZTI1Nlsx NiArIHIqMzYgKyBnKjYgKyBiXTsKKwkJICAgYnJlYWs7CisJCSBjYXNlIDU6 CisJCSAgIGlmIChjb24ubmFyZ3MgIT0gMikKKwkJICAgICAvKiBTZXF1ZW5j ZSBlcnJvciAoYWJvcnQpICovCisJCSAgICAgYnJlYWs7CisJCSAgIHsKKwkJ ICAgICBpbnQgaWR4ID0gY29uLmFyZ3NbMl07CisJCSAgICAgaWYgKGlkeCA8 IDApCisJCSAgICAgICBpZHggPSAwOworCQkgICAgIGlmIChpZHggPiAyNTUp CisJCSAgICAgICBpZHggPSAyNTU7CisJCSAgICAgY29uLmZnID0gdGFibGUy NTZbaWR4XTsKKwkJICAgfQorCQkgICBicmVhazsKKwkJIH0KKwkgICAgICAg aSArPSBjb24ubmFyZ3M7CisJICAgICAgIGJyZWFrOwogCSAgICAgY2FzZSAz OToKIAkgICAgICAgY29uLmZnID0gY29uLmRlZmF1bHRfY29sb3IgJiBGT1JF R1JPVU5EX0FUVFJfTUFTSzsKIAkgICAgICAgYnJlYWs7CkBAIC0xNzA1LDYg KzE5MTUsNDAgQEAgZmhhbmRsZXJfY29uc29sZTo6Y2hhcl9jb21tYW5kIChj aGFyIGMpCiAJICAgICBjYXNlIDQ3OiAgICAvKiBXSElURSBiYWNrZ3JvdW5k ICovCiAJICAgICAgIGNvbi5iZyA9IEJBQ0tHUk9VTkRfQkxVRSB8IEJBQ0tH Uk9VTkRfR1JFRU4gfCBCQUNLR1JPVU5EX1JFRDsKIAkgICAgICAgYnJlYWs7 CisJICAgICBjYXNlIDQ4OgorCSAgICAgICBpZiAoY29uLm5hcmdzIDwgMSkK KwkJIC8qIFNlcXVlbmNlIGVycm9yIChhYm9ydCkgKi8KKwkJIGJyZWFrOwor CSAgICAgICBzd2l0Y2ggKGNvbi5hcmdzWzFdKQorCQkgeworCQkgY2FzZSAy OgorCQkgICBpZiAoY29uLm5hcmdzICE9IDQpCisJCSAgICAgLyogU2VxdWVu Y2UgZXJyb3IgKGFib3J0KSAqLworCQkgICAgIGJyZWFrOworCQkgICByID0g Y29uLmFyZ3NbMl07CisJCSAgIGcgPSBjb24uYXJnc1szXTsKKwkJICAgYiA9 IGNvbi5hcmdzWzRdOworCQkgICByID0gciA8ICg5NSArIDEpIC8gMiA/IDAg OiByID4gMjU1ID8gNSA6IChyIC0gNTUgKyAyMCkgLyA0MDsKKwkJICAgZyA9 IGcgPCAoOTUgKyAxKSAvIDIgPyAwIDogZyA+IDI1NSA/IDUgOiAoZyAtIDU1 ICsgMjApIC8gNDA7CisJCSAgIGIgPSBiIDwgKDk1ICsgMSkgLyAyID8gMCA6 IGIgPiAyNTUgPyA1IDogKGIgLSA1NSArIDIwKSAvIDQwOworCQkgICBjb24u YmcgPSB0YWJsZTI1NlsxNiArIHIqMzYgKyBnKjYgKyBiXSA8PCA0OworCQkg ICBicmVhazsKKwkJIGNhc2UgNToKKwkJICAgaWYgKGNvbi5uYXJncyAhPSAy KQorCQkgICAgIC8qIFNlcXVlbmNlIGVycm9yIChhYm9ydCkgKi8KKwkJICAg ICBicmVhazsKKwkJICAgeworCQkgICAgIGludCBpZHggPSBjb24uYXJnc1sy XTsKKwkJICAgICBpZiAoaWR4IDwgMCkKKwkJICAgICAgIGlkeCA9IDA7CisJ CSAgICAgaWYgKGlkeCA+IDI1NSkKKwkJICAgICAgIGlkeCA9IDI1NTsKKwkJ ICAgICBjb24uYmcgPSB0YWJsZTI1NltpZHhdIDw8IDQ7CisJCSAgIH0KKwkJ ICAgYnJlYWs7CisJCSB9CisJICAgICAgIGkgKz0gY29uLm5hcmdzOworCSAg ICAgICBicmVhazsKIAkgICAgIGNhc2UgNDk6CiAJICAgICAgIGNvbi5iZyA9 IGNvbi5kZWZhdWx0X2NvbG9yICYgQkFDS0dST1VORF9BVFRSX01BU0s7CiAJ ICAgICAgIGJyZWFrOwpAQCAtMTkzOCw5ICsyMTgyLDEyIEBAIGZoYW5kbGVy X2NvbnNvbGU6OmNoYXJfY29tbWFuZCAoY2hhciBjKQogCSBmaGFuZGxlcl9j b25zb2xlIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggc3RhbmRhcmQgaW5wdXQu CiAJIFNvIHB1dHNfcmVhZGFoZWFkIGRvZXMgbm90IHdvcmsuCiAJIFVzZSBh IGNvbW1vbiBjb25zb2xlIHJlYWQtYWhlYWQgYnVmZmVyIGluc3RlYWQuICov CisgICAgICBhY3F1aXJlX2lucHV0X211dGV4IChJTkZJTklURSk7CiAgICAg ICBjb24uY29uc19yYXBvaSA9IE5VTEw7CiAgICAgICBzdHJjcHkgKGNvbi5j b25zX3JhYnVmLCBidWYpOwogICAgICAgY29uLmNvbnNfcmFwb2kgPSBjb24u Y29uc19yYWJ1ZjsKKyAgICAgIHJlbGVhc2VfaW5wdXRfbXV0ZXggKCk7Cisg ICAgICBQb3N0TWVzc2FnZVcgKEdldENvbnNvbGVXaW5kb3cgKCksIFdNX1NF VEZPQ1VTLCAwLCAwKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgJ24nOgog ICAgICAgc3dpdGNoIChjb24uYXJnc1swXSkKQEAgLTE5NTAsOSArMjE5Nywx MiBAQCBmaGFuZGxlcl9jb25zb2xlOjpjaGFyX2NvbW1hbmQgKGNoYXIgYykK IAkgIHkgLT0gY29uLmIuc3JXaW5kb3cuVG9wOwogCSAgLyogeCAtPSBjb24u Yi5zcldpbmRvdy5MZWZ0OwkJLy8gbm90IGF2YWlsYWJsZSB5ZXQgKi8KIAkg IF9fc21hbGxfc3ByaW50ZiAoYnVmLCAiXDAzM1slZDslZFIiLCB5ICsgMSwg eCArIDEpOworCSAgYWNxdWlyZV9pbnB1dF9tdXRleCAoSU5GSU5JVEUpOwog CSAgY29uLmNvbnNfcmFwb2kgPSBOVUxMOwogCSAgc3RyY3B5IChjb24uY29u c19yYWJ1ZiwgYnVmKTsKIAkgIGNvbi5jb25zX3JhcG9pID0gY29uLmNvbnNf cmFidWY7CisJICByZWxlYXNlX2lucHV0X211dGV4ICgpOworCSAgUG9zdE1l c3NhZ2VXIChHZXRDb25zb2xlV2luZG93ICgpLCBXTV9TRVRGT0NVUywgMCwg MCk7CiAJICBicmVhazsKIAlkZWZhdWx0OgogCSAgZ290byBiYWRfZXNjYXBl OwpAQCAtMjE0MywxMCArMjM5MywxMiBAQCBmaGFuZGxlcl9jb25zb2xlOjp3 cml0ZV9ub3JtYWwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywKICAgLyog TG9vcCBvdmVyIHNyYyBidWZmZXIgYXMgbG9uZyBhcyB3ZSBoYXZlIGp1c3Qg c2ltcGxlIGNoYXJhY3RlcnMuICBTdG9wCiAgICAgIGFzIHNvb24gYXMgd2Ug cmVhY2ggdGhlIGNvbnZlcnNpb24gbGltaXQsIG9yIGlmIHdlIGVuY291bnRl ciBhIGNvbnRyb2wKICAgICAgY2hhcmFjdGVyIG9yIGEgdHJ1bmNhdGVkIG9y IGludmFsaWQgbXV0aWJ5dGUgc2VxdWVuY2UuICovCisgIC8qIElmIHN5c3Rl bSBoYXMgMjRiaXQgY29sb3IgY2FwYWJpbGl0eSwganVzdCB3cml0ZSBhbGwg Y29udHJvbAorICAgICBzZXF1ZW5jZXMgdG8gY29uc29sZSBzaW5jZSB4dGVy bSBjb21wYXRpYmxlIG1vZGUgaXMgZW5hYmxlZC4gKi8KICAgbWVtc2V0ICgm cHMsIDAsIHNpemVvZiBwcyk7CiAgIHdoaWxlIChmb3VuZCA8IGVuZAogCSAm JiBmb3VuZCAtIHNyYyA8IENPTlZFUlRfTElNSVQKLQkgJiYgYmFzZV9jaGFy c1sqZm91bmRdID09IE5PUikKKwkgJiYgKGNvbi5jYXAyNGJpdF9jb2xvciB8 fCBiYXNlX2NoYXJzWypmb3VuZF0gPT0gTk9SKSApCiAgICAgewogICAgICAg c3dpdGNoIChyZXQgPSBmX21idG93YyAoX1JFRU5ULCBOVUxMLCAoY29uc3Qg Y2hhciAqKSBmb3VuZCwKIAkJCSAgICAgICBlbmQgLSBmb3VuZCwgJnBzKSkK QEAgLTIyOTUsNiArMjU0Nyw3IEBAIGZoYW5kbGVyX2NvbnNvbGU6OndyaXRl IChjb25zdCB2b2lkICp2c3JjLCBzaXplX3QgbGVuKQogCiAgIGRlYnVnX3By aW50ZiAoIiVwLCAlbGQiLCB2c3JjLCBsZW4pOwogCisgIGFjcXVpcmVfb3V0 cHV0X211dGV4IChJTkZJTklURSk7CiAgIHdoaWxlIChzcmMgPCBlbmQpCiAg ICAgewogICAgICAgcGFyYW5vaWRfcHJpbnRmICgiY2hhciAlMGMgc3RhdGUg aXMgJWQiLCAqc3JjLCBjb24uc3RhdGUpOwpAQCAtMjMwMyw3ICsyNTU2LDEw IEBAIGZoYW5kbGVyX2NvbnNvbGU6OndyaXRlIChjb25zdCB2b2lkICp2c3Jj LCBzaXplX3QgbGVuKQogCWNhc2Ugbm9ybWFsOgogCSAgc3JjID0gd3JpdGVf bm9ybWFsIChzcmMsIGVuZCk7CiAJICBpZiAoIXNyYykgLyogd3JpdGVfbm9y bWFsIGZhaWxlZCAqLwotCSAgICByZXR1cm4gLTE7CisJICAgIHsKKwkgICAg ICByZWxlYXNlX291dHB1dF9tdXRleCAoKTsKKwkgICAgICByZXR1cm4gLTE7 CisJICAgIH0KIAkgIGJyZWFrOwogCWNhc2UgZ290ZXNjOgogCSAgaWYgKCpz cmMgPT0gJ1snKQkJLyogQ1NJIENvbnRyb2wgU2VxdWVuY2UgSW50cm9kdWNl ciAqLwpAQCAtMjM5NCw2ICsyNjUwLDggQEAgZmhhbmRsZXJfY29uc29sZTo6 d3JpdGUgKGNvbnN0IHZvaWQgKnZzcmMsIHNpemVfdCBsZW4pCiAJICAgIGNv bi5yYXJnID0gY29uLnJhcmcgKiAxMCArICgqc3JjIC0gJzAnKTsKIAkgIGVs c2UgaWYgKCpzcmMgPT0gJzsnICYmIChjb24ucmFyZyA9PSAyIHx8IGNvbi5y YXJnID09IDApKQogCSAgICBjb24uc3RhdGUgPSBnZXR0aXRsZTsKKwkgIGVs c2UgaWYgKCpzcmMgPT0gJzsnICYmIChjb24ucmFyZyA9PSA0IHx8IGNvbi5y YXJnID09IDEwNCkpCisJICAgIGNvbi5zdGF0ZSA9IGVhdHBhbGV0dGU7CiAJ ICBlbHNlCiAJICAgIGNvbi5zdGF0ZSA9IGVhdHRpdGxlOwogCSAgc3JjKys7 CkBAIC0yNDE2LDYgKzI2NzQsMjEgQEAgZmhhbmRsZXJfY29uc29sZTo6d3Jp dGUgKGNvbnN0IHZvaWQgKnZzcmMsIHNpemVfdCBsZW4pCiAJICAgIHNyYysr OwogCSAgICBicmVhazsKIAkgIH0KKwljYXNlIGVhdHBhbGV0dGU6CisJICBp ZiAoKnNyYyA9PSAnXDAzMycpCisJICAgIGNvbi5zdGF0ZSA9IGVuZHBhbGV0 dGU7CisJICBlbHNlIGlmICgqc3JjID09ICdcYScpCisJICAgIGNvbi5zdGF0 ZSA9IG5vcm1hbDsKKwkgIHNyYysrOworCSAgYnJlYWs7CisJY2FzZSBlbmRw YWxldHRlOgorCSAgaWYgKCpzcmMgPT0gJ1xcJykKKwkgICAgY29uLnN0YXRl ID0gbm9ybWFsOworCSAgZWxzZQorCSAgICAvKiBTZXF1ZW5jZSBlcnJvciAo YWJvcnQpICovCisJICAgIGNvbi5zdGF0ZSA9IG5vcm1hbDsKKwkgIHNyYysr OworCSAgYnJlYWs7CiAJY2FzZSBnb3RzcXVhcmU6CiAJICBpZiAoKnNyYyA9 PSAnOycpCiAJICAgIHsKQEAgLTI0NTUsNiArMjcyOCw3IEBAIGZoYW5kbGVy X2NvbnNvbGU6OndyaXRlIChjb25zdCB2b2lkICp2c3JjLCBzaXplX3QgbGVu KQogCSAgYnJlYWs7CiAJfQogICAgIH0KKyAgcmVsZWFzZV9vdXRwdXRfbXV0 ZXggKCk7CiAKICAgc3lzY2FsbF9wcmludGYgKCIlbGQgPSBmaGFuZGxlcl9j b25zb2xlOjp3cml0ZSguLi4pIiwgbGVuKTsKIApAQCAtMjU4Miw2ICsyODU2 LDcgQEAgdm9pZAogZmhhbmRsZXJfY29uc29sZTo6Zml4dXBfYWZ0ZXJfZm9y a19leGVjIChib29sIGV4ZWNpbmcpCiB7CiAgIHNldF91bml0ICgpOworICBz ZXR1cF9pb19tdXRleCAoKTsKIH0KIAogLy8gI2RlZmluZSBXSU5TVEFfQUND RVNTIChXSU5TVEFfUkVBREFUVFJJQlVURVMgfCBTVEFOREFSRF9SSUdIVFNf UkVBRCB8IFNUQU5EQVJEX1JJR0hUU19XUklURSB8IFdJTlNUQV9DUkVBVEVE RVNLVE9QIHwgV0lOU1RBX0VYSVRXSU5ET1dTKQpAQCAtMjc2NCwzICszMDM5 LDU3IEBAIGZoYW5kbGVyX2NvbnNvbGU6Om5lZWRfaW52aXNpYmxlICgpCiAg IGRlYnVnX3ByaW50ZiAoImludmlzaWJsZV9jb25zb2xlICVkIiwgaW52aXNp YmxlX2NvbnNvbGUpOwogICByZXR1cm4gYjsKIH0KKworRFdPUkQKK2ZoYW5k bGVyX2NvbnNvbGU6Ol9fYWNxdWlyZV9pbnB1dF9tdXRleCAoY29uc3QgY2hh ciAqZm4sIGludCBsbiwgRFdPUkQgbXMpCit7CisjaWZkZWYgREVCVUdHSU5H CisgIHN0cmFjZS5wcm50ZiAoX1NUUkFDRV9URVJNSU9TLCBmbiwgIiglZCk6 IHRyeWluZyB0byBnZXQgaW5wdXRfbXV0ZXgiLCBsbik7CisjZW5kaWYKKyAg RFdPUkQgcmVzID0gV2FpdEZvclNpbmdsZU9iamVjdCAoaW5wdXRfbXV0ZXgs IG1zKTsKKyAgaWYgKHJlcyAhPSBXQUlUX09CSkVDVF8wKQorICAgIHN0cmFj ZS5wcm50ZiAoX1NUUkFDRV9URVJNSU9TLCBmbiwKKwkJICAiKCVkKTogRmFp bGVkIHRvIGFjcXVpcmUgaW5wdXRfbXV0ZXggJTA4eCIsCisJCSAgbG4sIEdl dExhc3RFcnJvciAoKSk7CisjaWZkZWYgREVCVUdHSU5HCisgIGVsc2UKKyAg ICBzdHJhY2UucHJudGYgKF9TVFJBQ0VfVEVSTUlPUywgZm4sICIoJWQpOiBn b3QgaW5wdXRfbXV0ZXgiLCBsbik7CisjZW5kaWYKKyAgcmV0dXJuIHJlczsK K30KKwordm9pZAorZmhhbmRsZXJfY29uc29sZTo6X19yZWxlYXNlX2lucHV0 X211dGV4IChjb25zdCBjaGFyICpmbiwgaW50IGxuKQoreworICBSZWxlYXNl TXV0ZXggKGlucHV0X211dGV4KTsKKyNpZmRlZiBERUJVR0dJTkcKKyAgc3Ry YWNlLnBybnRmIChfU1RSQUNFX1RFUk1JT1MsIGZuLCAiKCVkKTogcmVsZWFz ZSBpbnB1dF9tdXRleCIsIGxuKTsKKyNlbmRpZgorfQorCitEV09SRAorZmhh bmRsZXJfY29uc29sZTo6X19hY3F1aXJlX291dHB1dF9tdXRleCAoY29uc3Qg Y2hhciAqZm4sIGludCBsbiwgRFdPUkQgbXMpCit7CisjaWZkZWYgREVCVUdH SU5HCisgIHN0cmFjZS5wcm50ZiAoX1NUUkFDRV9URVJNSU9TLCBmbiwgIigl ZCk6IHRyeWluZyB0byBnZXQgb3V0cHV0X211dGV4IiwgbG4pOworI2VuZGlm CisgIERXT1JEIHJlcyA9IFdhaXRGb3JTaW5nbGVPYmplY3QgKG91dHB1dF9t dXRleCwgbXMpOworICBpZiAocmVzICE9IFdBSVRfT0JKRUNUXzApCisgICAg c3RyYWNlLnBybnRmIChfU1RSQUNFX1RFUk1JT1MsIGZuLAorCQkgICIoJWQp OiBGYWlsZWQgdG8gYWNxdWlyZSBvdXRwdXRfbXV0ZXggJTA4eCIsCisJCSAg bG4sIEdldExhc3RFcnJvciAoKSk7CisjaWZkZWYgREVCVUdHSU5HCisgIGVs c2UKKyAgICBzdHJhY2UucHJudGYgKF9TVFJBQ0VfVEVSTUlPUywgZm4sICIo JWQpOiBnb3Qgb3V0cHV0X211dGV4IiwgbG4pOworI2VuZGlmCisgIHJldHVy biByZXM7Cit9CisKK3ZvaWQKK2ZoYW5kbGVyX2NvbnNvbGU6Ol9fcmVsZWFz ZV9vdXRwdXRfbXV0ZXggKGNvbnN0IGNoYXIgKmZuLCBpbnQgbG4pCit7Cisg IFJlbGVhc2VNdXRleCAob3V0cHV0X211dGV4KTsKKyNpZmRlZiBERUJVR0dJ TkcKKyAgc3RyYWNlLnBybnRmIChfU1RSQUNFX1RFUk1JT1MsIGZuLCAiKCVk KTogcmVsZWFzZSBvdXRwdXRfbXV0ZXgiLCBsbik7CisjZW5kaWYKK30KZGlm ZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vc2VsZWN0LmNjIGIvd2luc3VwL2N5 Z3dpbi9zZWxlY3QuY2MKaW5kZXggOWIxOGU4ZjgwLi44NTI0MmVjMDYgMTAw NjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vc2VsZWN0LmNjCisrKyBiL3dpbnN1 cC9jeWd3aW4vc2VsZWN0LmNjCkBAIC0yMDIsNyArMjAyLDkgQEAgc2VsZWN0 IChpbnQgbWF4ZmRzLCBmZF9zZXQgKnJlYWRmZHMsIGZkX3NldCAqd3JpdGVm ZHMsIGZkX3NldCAqZXhjZXB0ZmRzLAogCSAgICAgcmlnaHQgdmFsdWUgPj0g MCwgbWF0Y2hpbmcgdGhlIG51bWJlciBvZiBiaXRzIHNldCBpbiB0aGUKIAkg ICAgIGZkcyByZWNvcmRzLiAgaWYgcmV0IGlzIDAsIGNvbnRpbnVlIHRvIGxv b3AuICovCiAJICByZXQgPSBzZWwucG9sbCAocmVhZGZkcywgd3JpdGVmZHMs IGV4Y2VwdGZkcyk7Ci0JICBpZiAoIXJldCkKKwkgIGlmIChyZXQgPCAwKQor CSAgICB3YWl0X3N0YXRlID0gc2VsZWN0X3N0dWZmOjpzZWxlY3Rfc2lnbmFs bGVkOworCSAgZWxzZSBpZiAoIXJldCkKIAkgICAgd2FpdF9zdGF0ZSA9IHNl bGVjdF9zdHVmZjo6c2VsZWN0X3NldF96ZXJvOwogCX0KICAgICAgIC8qIEFs d2F5cyBjbGVhbiB1cCBldmVyeXRoaW5nIGhlcmUuICBJZiB3ZSdyZSBsb29w aW5nIHRoZW4gYnVpbGQgaXQKQEAgLTQ3OSw2ICs0ODEsNyBAQCB3YXNfdGlt ZW91dDoKIAkgZXZlbnRzIGxpa2UgbW91c2UgbW92ZW1lbnRzLiAgVGhlIHZl cmlmeSBmdW5jdGlvbiB3aWxsIGRldGVjdCB0aGVzZQogCSBzaXR1YXRpb25z LiAgSWYgaXQgcmV0dXJucyBmYWxzZSwgdGhlbiB0aGlzIHdha2V1cCB3YXMg YSBmYWxzZSBhbGFybQogCSBhbmQgd2Ugc2hvdWxkIGdvIGJhY2sgdG8gd2Fp dGluZy4gKi8KKyAgICAgIGludCByZXQgPSAwOwogICAgICAgd2hpbGUgKChz ID0gcy0+bmV4dCkpCiAJaWYgKHMtPnNhd19lcnJvciAoKSkKIAkgIHsKQEAg LTQ4OCw4ICs0OTEsMTMgQEAgd2FzX3RpbWVvdXQ6CiAJICB9CiAJZWxzZSBp ZiAoKCgod2FpdF9yZXQgPj0gbSAmJiBzLT53aW5kb3dzX2hhbmRsZSkKIAkg ICAgICAgICAgIHx8IHMtPmggPT0gdzRbd2FpdF9yZXRdKSkKLQkJICYmIHMt PnZlcmlmeSAocywgcmVhZGZkcywgd3JpdGVmZHMsIGV4Y2VwdGZkcykpCisJ CSAmJiAocmV0ID0gcy0+dmVyaWZ5IChzLCByZWFkZmRzLCB3cml0ZWZkcywg ZXhjZXB0ZmRzKSkgPiAwKQogCSAgcmVzID0gc2VsZWN0X29rOworCWVsc2Ug aWYgKHJldCA8IDApCisJICB7CisJICAgIHJlcyA9IHNlbGVjdF9zaWduYWxs ZWQ7CisJICAgIGdvdG8gb3V0OworCSAgfQogCiAgICAgICBzZWxlY3RfcHJp bnRmICgicmVzIGFmdGVyIHZlcmlmeSAlZCIsIHJlcyk7CiAgICAgICBicmVh azsKQEAgLTUzOSw4ICs1NDcsMTIgQEAgc2VsZWN0X3N0dWZmOjpwb2xsIChm ZF9zZXQgKnJlYWRmZHMsIGZkX3NldCAqd3JpdGVmZHMsIGZkX3NldCAqZXhj ZXB0ZmRzKQogICBpbnQgbiA9IDA7CiAgIHNlbGVjdF9yZWNvcmQgKnMgPSAm c3RhcnQ7CiAgIHdoaWxlICgocyA9IHMtPm5leHQpKQotICAgIG4gKz0gKCFz LT5wZWVrIHx8IHMtPnBlZWsgKHMsIHRydWUpKSA/Ci0JIHNldF9iaXRzIChz LCByZWFkZmRzLCB3cml0ZWZkcywgZXhjZXB0ZmRzKSA6IDA7CisgICAgewor ICAgICAgaW50IHJldCA9IHMtPnBlZWsgPyBzLT5wZWVrIChzLCB0cnVlKSA6 IDE7CisgICAgICBpZiAocmV0IDwgMCkKKwlyZXR1cm4gLTE7CisgICAgICBu ICs9IChyZXQgPiAwKSA/ICBzZXRfYml0cyAocywgcmVhZGZkcywgd3JpdGVm ZHMsIGV4Y2VwdGZkcykgOiAwOworICAgIH0KICAgcmV0dXJuIG47CiB9CiAK QEAgLTEwMTAsMTYgKzEwMjIsMTAgQEAgcGVla19jb25zb2xlIChzZWxlY3Rf cmVjb3JkICptZSwgYm9vbCkKICAgICByZXR1cm4gbWUtPndyaXRlX3JlYWR5 OwogCiAgIGlmIChmaC0+Z2V0X2NvbnNfcmVhZGFoZWFkX3ZhbGlkICgpKQot ICAgIHsKLSAgICAgIHNlbGVjdF9wcmludGYgKCJjb25zX3JlYWRhaGVhZCIp OwotICAgICAgcmV0dXJuIG1lLT5yZWFkX3JlYWR5ID0gdHJ1ZTsKLSAgICB9 CisgICAgcmV0dXJuIG1lLT5yZWFkX3JlYWR5ID0gdHJ1ZTsKIAotICBpZiAo ZmgtPmdldF9yZWFkYWhlYWRfdmFsaWQgKCkpCi0gICAgewotICAgICAgc2Vs ZWN0X3ByaW50ZiAoInJlYWRhaGVhZCIpOwotICAgICAgcmV0dXJuIG1lLT5y ZWFkX3JlYWR5ID0gdHJ1ZTsKLSAgICB9CisgIGlmIChmaC0+aW5wdXRfcmVh ZHkpCisgICAgcmV0dXJuIG1lLT5yZWFkX3JlYWR5ID0gdHJ1ZTsKIAogICBp ZiAobWUtPnJlYWRfcmVhZHkpCiAgICAgewpAQCAtMTAzMCw0NiArMTAzNiwy NSBAQCBwZWVrX2NvbnNvbGUgKHNlbGVjdF9yZWNvcmQgKm1lLCBib29sKQog ICBJTlBVVF9SRUNPUkQgaXJlYzsKICAgRFdPUkQgZXZlbnRzX3JlYWQ7CiAg IEhBTkRMRSBoOwotICBjaGFyIHRtcGJ1ZlsxN107CiAgIHNldF9oYW5kbGVf b3JfcmV0dXJuX2lmX25vdF9vcGVuIChoLCBtZSk7CiAKLSAgZm9yICg7OykK LSAgICBpZiAoZmgtPmJnX2NoZWNrIChTSUdUVElOLCB0cnVlKSA8PSBiZ19l b2YpCi0gICAgICByZXR1cm4gbWUtPnJlYWRfcmVhZHkgPSB0cnVlOwotICAg IGVsc2UgaWYgKCFQZWVrQ29uc29sZUlucHV0VyAoaCwgJmlyZWMsIDEsICZl dmVudHNfcmVhZCkgfHwgIWV2ZW50c19yZWFkKQotICAgICAgYnJlYWs7Ci0g ICAgZWxzZQotICAgICAgewotCWZoLT5zZW5kX3dpbmNoX21heWJlICgpOwot CWlmIChpcmVjLkV2ZW50VHlwZSA9PSBLRVlfRVZFTlQpCi0JICB7Ci0JICAg IGlmIChpcmVjLkV2ZW50LktleUV2ZW50LmJLZXlEb3duKQotCSAgICAgIHsK LQkJLyogSWdub3JlIEFsdCtOdW1wYWQga2V5cy4gVGhleSBhcmUgZXZlbnR1 YWxseSBoYW5kbGVkIGluIHRoZQotCQkgICBrZXktdXAgY2FzZSBiZWxvdy4g Ki8KLQkJaWYgKGlzX2FsdF9udW1wYWRfa2V5ICgmaXJlYykpCi0JCSAgIDsK LQkJLyogSGFuZGxlIG5vcm1hbCBpbnB1dC4gKi8KLQkJZWxzZSBpZiAoaXJl Yy5FdmVudC5LZXlFdmVudC51Q2hhci5Vbmljb2RlQ2hhcgotCQkJIHx8IGZo YW5kbGVyX2NvbnNvbGU6OmdldF9ub25hc2NpaV9rZXkgKGlyZWMsIHRtcGJ1 ZikpCi0JCSAgcmV0dXJuIG1lLT5yZWFkX3JlYWR5ID0gdHJ1ZTsKLQkgICAg ICB9Ci0JICAgIC8qIElnbm9yZSBrZXkgdXAgZXZlbnRzLCBleGNlcHQgZm9y IEFsdCtOdW1wYWQgZXZlbnRzLiAqLwotCSAgICBlbHNlIGlmIChpc19hbHRf bnVtcGFkX2V2ZW50ICgmaXJlYykpCi0JICAgICAgcmV0dXJuIG1lLT5yZWFk X3JlYWR5ID0gdHJ1ZTsKLQkgIH0KLQllbHNlCi0JICB7Ci0JICAgIGlmIChp cmVjLkV2ZW50VHlwZSA9PSBNT1VTRV9FVkVOVAotCQkmJiBmaC0+bW91c2Vf YXdhcmUgKGlyZWMuRXZlbnQuTW91c2VFdmVudCkpCi0JCXJldHVybiBtZS0+ cmVhZF9yZWFkeSA9IHRydWU7Ci0JICAgIGlmIChpcmVjLkV2ZW50VHlwZSA9 PSBGT0NVU19FVkVOVCAmJiBmaC0+Zm9jdXNfYXdhcmUgKCkpCi0JCXJldHVy biBtZS0+cmVhZF9yZWFkeSA9IHRydWU7Ci0JICB9Ci0KLQkvKiBSZWFkIGFu ZCBkaXNjYXJkIHRoZSBldmVudCAqLwotCVJlYWRDb25zb2xlSW5wdXRXICho LCAmaXJlYywgMSwgJmV2ZW50c19yZWFkKTsKLSAgICAgIH0KKyAgd2hpbGUg KCFmaC0+aW5wdXRfcmVhZHkgJiYgIWZoLT5nZXRfY29uc19yZWFkYWhlYWRf dmFsaWQgKCkpCisgICAgeworICAgICAgaWYgKGZoLT5iZ19jaGVjayAoU0lH VFRJTiwgdHJ1ZSkgPD0gYmdfZW9mKQorCXJldHVybiBtZS0+cmVhZF9yZWFk eSA9IHRydWU7CisgICAgICBlbHNlIGlmICghUGVla0NvbnNvbGVJbnB1dFcg KGgsICZpcmVjLCAxLCAmZXZlbnRzX3JlYWQpIHx8ICFldmVudHNfcmVhZCkK KwlicmVhazsKKyAgICAgIGZoLT5hY3F1aXJlX2lucHV0X211dGV4IChJTkZJ TklURSk7CisgICAgICBpZiAoZmhhbmRsZXJfY29uc29sZTo6aW5wdXRfd2lu Y2ggPT0gZmgtPnByb2Nlc3NfaW5wdXRfbWVzc2FnZSAoKSkKKwl7CisJICBz ZXRfc2lnX2Vycm5vIChFSU5UUik7CisJICBmaC0+cmVsZWFzZV9pbnB1dF9t dXRleCAoKTsKKwkgIHJldHVybiAtMTsKKwl9CisgICAgICBmaC0+cmVsZWFz ZV9pbnB1dF9tdXRleCAoKTsKKyAgICB9CisgIGlmIChmaC0+aW5wdXRfcmVh ZHkgfHwgZmgtPmdldF9jb25zX3JlYWRhaGVhZF92YWxpZCAoKSkKKyAgICBy ZXR1cm4gbWUtPnJlYWRfcmVhZHkgPSB0cnVlOwogCiAgIHJldHVybiBtZS0+ d3JpdGVfcmVhZHk7CiB9CkBAIC0xMDgxLDcgKzEwNjYsNiBAQCB2ZXJpZnlf Y29uc29sZSAoc2VsZWN0X3JlY29yZCAqbWUsIGZkX3NldCAqcmZkcywgZmRf c2V0ICp3ZmRzLAogICByZXR1cm4gcGVla19jb25zb2xlIChtZSwgdHJ1ZSk7 CiB9CiAKLQogc2VsZWN0X3JlY29yZCAqCiBmaGFuZGxlcl9jb25zb2xlOjpz ZWxlY3RfcmVhZCAoc2VsZWN0X3N0dWZmICpzcykKIHsKQEAgLTEwOTYsNyAr MTA4MCw3IEBAIGZoYW5kbGVyX2NvbnNvbGU6OnNlbGVjdF9yZWFkIChzZWxl Y3Rfc3R1ZmYgKnNzKQogICBzLT5wZWVrID0gcGVla19jb25zb2xlOwogICBz LT5oID0gZ2V0X2hhbmRsZSAoKTsKICAgcy0+cmVhZF9zZWxlY3RlZCA9IHRy dWU7Ci0gIHMtPnJlYWRfcmVhZHkgPSBnZXRfcmVhZGFoZWFkX3ZhbGlkICgp OworICBzLT5yZWFkX3JlYWR5ID0gaW5wdXRfcmVhZHkgfHwgZ2V0X2NvbnNf cmVhZGFoZWFkX3ZhbGlkICgpOwogICByZXR1cm4gczsKIH0KIAotLSAKMi4x Ny4wCgo= --Multipart=_Sat__30_Mar_2019_22_08_04_+0900_uR3j8n86EHhK01UI Content-Type: application/octet-stream; name="0003-Cygwin-pty-support-pseudo-console.patch" Content-Disposition: attachment; filename="0003-Cygwin-pty-support-pseudo-console.patch" Content-Transfer-Encoding: base64 Content-length: 51651 RnJvbSBjNWFmMTk3YzhlNGMxOWViMjRkODBlYThiMmNhODcyNDFkMzQ0MGE5 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUYWthc2hpIFlhbm8g PHRha2FzaGkueWFub0BuaWZ0eS5uZS5qcD4KRGF0ZTogU2F0LCAzMCBNYXIg MjAxOSAxNjoyNDozOCArMDkwMApTdWJqZWN0OiBbUEFUQ0ggMy8zXSBDeWd3 aW46IHB0eTogc3VwcG9ydCBwc2V1ZG8gY29uc29sZS4KCi0tLQogd2luc3Vw L2N5Z3dpbi9kdGFibGUuY2MgICAgICAgICAgICAgICB8ICAyOCArKwogd2lu c3VwL2N5Z3dpbi9maGFuZGxlci5oICAgICAgICAgICAgICB8ICAzMCArLQog d2luc3VwL2N5Z3dpbi9maGFuZGxlcl9jb25zb2xlLmNjICAgICB8ICAzMSAr Kwogd2luc3VwL2N5Z3dpbi9maGFuZGxlcl90dHkuY2MgICAgICAgICB8IDM5 OSArKysrKysrKysrKysrKysrKysrKysrKystLQogd2luc3VwL2N5Z3dpbi9m b3JrLmNjICAgICAgICAgICAgICAgICB8ICAyMCArKwogd2luc3VwL2N5Z3dp bi9zZWxlY3QuY2MgICAgICAgICAgICAgICB8ICAgMyArCiB3aW5zdXAvY3ln d2luL3NwYXduLmNjICAgICAgICAgICAgICAgIHwgIDMyICsrKwogd2luc3Vw L2N5Z3dpbi90dHkuY2MgICAgICAgICAgICAgICAgICB8ICAgMyArCiB3aW5z dXAvY3lnd2luL3R0eS5oICAgICAgICAgICAgICAgICAgIHwgIDE5ICstCiB3 aW5zdXAvdXRpbHMvY3lnd2luLWNvbnNvbGUtaGVscGVyLmNjIHwgIDE0ICst CiAxMCBmaWxlcyBjaGFuZ2VkLCA1NDAgaW5zZXJ0aW9ucygrKSwgMzkgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9kdGFibGUu Y2MgYi93aW5zdXAvY3lnd2luL2R0YWJsZS5jYwppbmRleCA2MzYyMjFhNzcu LmNjMGE1MmNiMSAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9kdGFibGUu Y2MKKysrIGIvd2luc3VwL2N5Z3dpbi9kdGFibGUuY2MKQEAgLTY4LDYgKzY4 LDI0IEBAIHNldF9zdGRfaGFuZGxlIChpbnQgZmQpCiAgICAgU2V0U3RkSGFu ZGxlIChzdGRfY29uc3RzW2ZkXSwgZmggPyBmaC0+Z2V0X291dHB1dF9oYW5k bGUgKCkgOiBOVUxMKTsKIH0KIAorI2lmIDAKK3N0YXRpYyBib29sCitpc19y dW5uaW5nX2FzX3NlcnZpY2UgKHZvaWQpCit7CisgIERXT1JEIGR3U2l6ZSA9 IDA7CisgIFBUT0tFTl9HUk9VUFMgcEdyb3VwSW5mbzsKKyAgdG1wX3BhdGhi dWYgdHA7CisgIGJvb2wgcmV0ID0gZmFsc2U7CisgIHBHcm91cEluZm8gPSAo UFRPS0VOX0dST1VQUykgdHAud19nZXQgKCk7CisgIE50UXVlcnlJbmZvcm1h dGlvblRva2VuIChoUHJvY1Rva2VuLCBUb2tlbkdyb3VwcywgcEdyb3VwSW5m bywKKwkJCQkJMiAqIE5UX01BWF9QQVRILCAmZHdTaXplKTsKKyAgZm9yIChE V09SRCBpPTA7IGk8cEdyb3VwSW5mby0+R3JvdXBDb3VudCAmJiAhcmV0OyBp KyspCisgICAgaWYgKHdlbGxfa25vd25fc2VydmljZV9zaWQgPT0gcEdyb3Vw SW5mby0+R3JvdXBzW2ldLlNpZCkKKyAgICAgIHJldCA9IHRydWU7CisgIHJl dHVybiByZXQ7Cit9CisjZW5kaWYKKwogaW50CiBkdGFibGU6OmV4dGVuZCAo c2l6ZV90IGhvd211Y2gsIHNpemVfdCBtaW4pCiB7CkBAIC0xNDcsNiArMTY1 LDExIEBAIGR0YWJsZTo6Z2V0X2RlYnVnZ2VyX2luZm8gKCkKIHZvaWQKIGR0 YWJsZTo6c3RkaW9faW5pdCAoKQogeworI2lmIDEKKyAgaWYgKHdjc3N0ciAo bXlzZWxmLT5wcm9nbmFtZSwgTCJtaW50dHkiKSkKKyAgICByZXR1cm47Cisj ZW5kaWYKKwogICBpZiAobXlzZWxmLT5jeWdzdGFydGVkIHx8IElTU1RBVEUg KG15c2VsZiwgUElEX0NZR1BBUkVOVCkpCiAgICAgewogICAgICAgdHR5X21p biAqdCA9IGN5Z3dpbl9zaGFyZWQtPnR0eS5nZXRfY3R0eXAgKCk7CkBAIC0x NTksNiArMTgyLDExIEBAIGR0YWJsZTo6c3RkaW9faW5pdCAoKQogICBIQU5E TEUgb3V0ID0gR2V0U3RkSGFuZGxlIChTVERfT1VUUFVUX0hBTkRMRSk7CiAg IEhBTkRMRSBlcnIgPSBHZXRTdGRIYW5kbGUgKFNURF9FUlJPUl9IQU5ETEUp OwogCisjaWYgMAorICBpZiAoIWlzX3J1bm5pbmdfYXNfc2VydmljZSAoKSAm JiAhaW4gJiYgIW91dCAmJiAhZXJyKQorICAgIHJldHVybjsKKyNlbmRpZgor CiAgIGluaXRfc3RkX2ZpbGVfZnJvbV9oYW5kbGUgKDAsIGluKTsKIAogICAv KiBTVERfRVJST1JfSEFORExFIGhhcyBiZWVuIG9ic2VydmVkIHRvIGJlIHRo ZSBzYW1lIGFzCmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL2ZoYW5kbGVy LmggYi93aW5zdXAvY3lnd2luL2ZoYW5kbGVyLmgKaW5kZXggMDQ3Nzg4OGQ3 Li5iNWE2YmJjYzcgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vZmhhbmRs ZXIuaAorKysgYi93aW5zdXAvY3lnd2luL2ZoYW5kbGVyLmgKQEAgLTE5OTUs NiArMTk5NSw3IEBAIHByaXZhdGU6CiAgIHN0YXRpYyBib29sIG5lZWRfaW52 aXNpYmxlICgpOwogICBzdGF0aWMgdm9pZCBmcmVlX2NvbnNvbGUgKCk7CiAg IHN0YXRpYyBjb25zdCBjaGFyICpnZXRfbm9uYXNjaWlfa2V5IChJTlBVVF9S RUNPUkQmIGlucHV0X3JlYywgY2hhciAqKTsKKyAgc3RhdGljIERXT1JEIGdl dF9jb25zb2xlX3Byb2Nlc3NfaWQgKERXT1JEIHBpZCwgYm9vbCBtYXRjaCk7 CiAKICAgZmhhbmRsZXJfY29uc29sZSAodm9pZCAqKSB7fQogCkBAIC0yMDY2 LDYgKzIwNjcsMTkgQEAgY2xhc3MgZmhhbmRsZXJfcHR5X2NvbW1vbjogcHVi bGljIGZoYW5kbGVyX3Rlcm1pb3MKICAgICByZXR1cm4gZmg7CiAgIH0KIAor ICBib29sIGF0dGFjaF9wY29uX2luX3NwYXduICh2b2lkKQorICB7CisgICAg cmV0dXJuIGdldF90dHlwICgpLT5hdHRhY2hfcGNvbl9pbl9zcGF3bjsKKyAg fQorICBEV09SRCBnZXRIZWxwZXJQcm9jZXNzSWQgKHZvaWQpCisgIHsKKyAg ICByZXR1cm4gZ2V0X3R0eXAgKCktPkhlbHBlclByb2Nlc3NJZDsKKyAgfQor ICBIUENPTiBnZXRQc2V1ZG9Db25zb2xlICh2b2lkKQorICB7CisgICAgcmV0 dXJuIGdldF90dHlwICgpLT5oUHNldWRvQ29uc29sZTsKKyAgfQorCiAgcHJv dGVjdGVkOgogICBCT09MIHByb2Nlc3Nfb3Bvc3Rfb3V0cHV0IChIQU5ETEUg aCwgY29uc3Qgdm9pZCAqcHRyLCBzc2l6ZV90JiBsZW4sIGJvb2wgaXNfZWNo byk7CiB9OwpAQCAtMjA3Myw3ICsyMDg3LDggQEAgY2xhc3MgZmhhbmRsZXJf cHR5X2NvbW1vbjogcHVibGljIGZoYW5kbGVyX3Rlcm1pb3MKIGNsYXNzIGZo YW5kbGVyX3B0eV9zbGF2ZTogcHVibGljIGZoYW5kbGVyX3B0eV9jb21tb24K IHsKICAgSEFORExFIGludXNlOwkJCS8vIHVzZWQgdG8gaW5kaWNhdGUgdGhh dCBhIHR0eSBpcyBpbiB1c2UKLSAgSEFORExFIG91dHB1dF9oYW5kbGVfY3ln OworICBIQU5ETEUgb3V0cHV0X2hhbmRsZV9jeWcsIGlvX2hhbmRsZV9jeWc7 CisgIGJvb2wgcGNvbl9hdHRhY2hlZDsKIAogICAvKiBIZWxwZXIgZnVuY3Rp b25zIGZvciBmY2htb2QgYW5kIGZjaG93bi4gKi8KICAgYm9vbCBmY2hfb3Bl bl9oYW5kbGVzIChib29sIGNob3duKTsKQEAgLTIwODYsNiArMjEwMSw4IEBA IGNsYXNzIGZoYW5kbGVyX3B0eV9zbGF2ZTogcHVibGljIGZoYW5kbGVyX3B0 eV9jb21tb24KIAogICB2b2lkIHNldF9vdXRwdXRfaGFuZGxlX2N5ZyAoSEFO RExFIGgpIHsgb3V0cHV0X2hhbmRsZV9jeWcgPSBoOyB9CiAgIEhBTkRMRSYg Z2V0X291dHB1dF9oYW5kbGVfY3lnICgpIHsgcmV0dXJuIG91dHB1dF9oYW5k bGVfY3lnOyB9CisgIHZvaWQgc2V0X2hhbmRsZV9jeWcgKEhBTkRMRSBoKSB7 IGlvX2hhbmRsZV9jeWcgPSBoOyB9CisgIEhBTkRMRSYgZ2V0X2hhbmRsZV9j eWcgKCkgeyByZXR1cm4gaW9faGFuZGxlX2N5ZzsgfQogCiAgIGludCBvcGVu IChpbnQgZmxhZ3MsIG1vZGVfdCBtb2RlID0gMCk7CiAgIHZvaWQgb3Blbl9z ZXR1cCAoaW50IGZsYWdzKTsKQEAgLTIxMjYsNiArMjE0MywxMiBAQCBjbGFz cyBmaGFuZGxlcl9wdHlfc2xhdmU6IHB1YmxpYyBmaGFuZGxlcl9wdHlfY29t bW9uCiAgICAgY29weXRvIChmaCk7CiAgICAgcmV0dXJuIGZoOwogICB9Cisg IHZvaWQgcmVzZXRfc3dpdGNoX3RvX3Bjb24gKHZvaWQpCisgIHsKKyAgICBp ZiAoZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uID09IDIpCisgICAgICBT bGVlcCAoMjApOworICAgIGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbiA9 IDA7CisgIH0KIH07CiAKICNkZWZpbmUgX19wdHNuYW1lKGJ1ZiwgdW5pdCkg X19zbWFsbF9zcHJpbnRmICgoYnVmKSwgIi9kZXYvcHR5JWQiLCAodW5pdCkp CkBAIC0yMTM0LDE1ICsyMTU3LDE0IEBAIGNsYXNzIGZoYW5kbGVyX3B0eV9t YXN0ZXI6IHB1YmxpYyBmaGFuZGxlcl9wdHlfY29tbW9uCiAgIGludCBwa3Rt b2RlOwkJCS8vIG5vbi16ZXJvIGlmIHB0eSBpbiBhIHBhY2tldCBtb2RlLgog ICBIQU5ETEUgbWFzdGVyX2N0bDsJCS8vIENvbnRyb2wgc29ja2V0IGZvciBo YW5kbGUgZHVwbGljYXRpb24KICAgY3lndGhyZWFkICptYXN0ZXJfdGhyZWFk OwkvLyBNYXN0ZXIgY29udHJvbCB0aHJlYWQKLSAgSEFORExFIGZyb21fbWFz dGVyLCB0b19tYXN0ZXI7CisgIEhBTkRMRSBmcm9tX21hc3RlciwgdG9fbWFz dGVyLCBmcm9tX3NsYXZlLCB0b19zbGF2ZTsKICAgSEFORExFIGVjaG9fciwg ZWNob193OwogICBEV09SRCBkd1Byb2Nlc3NJZDsJCS8vIE93bmVyIG9mIG1h c3RlciBoYW5kbGVzCi0gIEhBTkRMRSBpb19oYW5kbGVfY3lnLCB0b19tYXN0 ZXJfY3lnOworICBIQU5ETEUgdG9fbWFzdGVyX2N5ZywgZnJvbV9tYXN0ZXJf Y3lnOwogICBjeWd0aHJlYWQgKm1hc3Rlcl9md2RfdGhyZWFkOwkvLyBNYXN0 ZXIgZm9yd2FyZGluZyB0aHJlYWQKIAogcHVibGljOgogICBIQU5ETEUgZ2V0 X2VjaG9faGFuZGxlICgpIGNvbnN0IHsgcmV0dXJuIGVjaG9fcjsgfQotICBI QU5ETEUmIGdldF9oYW5kbGVfY3lnICgpIHsgcmV0dXJuIGlvX2hhbmRsZV9j eWc7IH0KICAgLyogQ29uc3RydWN0b3IgKi8KICAgZmhhbmRsZXJfcHR5X21h c3RlciAoaW50KTsKIApkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9maGFu ZGxlcl9jb25zb2xlLmNjIGIvd2luc3VwL2N5Z3dpbi9maGFuZGxlcl9jb25z b2xlLmNjCmluZGV4IGY3YjUwZDBhOC4uYmNkNzFhNGQxIDEwMDY0NAotLS0g YS93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX2NvbnNvbGUuY2MKKysrIGIvd2lu c3VwL2N5Z3dpbi9maGFuZGxlcl9jb25zb2xlLmNjCkBAIC0xMDExLDYgKzEw MTEsMTggQEAgZmhhbmRsZXJfY29uc29sZTo6Y2xvc2UgKCkKIAogICBDbG9z ZUhhbmRsZSAoZ2V0X2hhbmRsZSAoKSk7CiAgIENsb3NlSGFuZGxlIChnZXRf b3V0cHV0X2hhbmRsZSAoKSk7CisKKyAgY3lnaGVhcF9mZGVudW0gY2ZkIChm YWxzZSk7CisgIHdoaWxlIChjZmQubmV4dCAoKSA+PSAwKQorICAgIGlmIChj ZmQtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZTV9NQUpPUiB8fAorCWNmZC0+ Z2V0X21ham9yICgpID09IERFVl9QVFlTX01BSk9SKQorICAgICAgeworCWZo YW5kbGVyX3B0eV9jb21tb24gKnQgPQorCSAgKGZoYW5kbGVyX3B0eV9jb21t b24gKikgKGZoYW5kbGVyX2Jhc2UgKikgY2ZkOworCWlmIChnZXRfY29uc29s ZV9wcm9jZXNzX2lkICh0LT5nZXRIZWxwZXJQcm9jZXNzSWQgKCksIHRydWUp KQorCSAgcmV0dXJuIDA7CisgICAgICB9CisKICAgaWYgKCFoYXZlX2V4ZWNl ZCkKICAgICBmcmVlX2NvbnNvbGUgKCk7CiAgIHJldHVybiAwOwpAQCAtMzA0 MCw2ICszMDUyLDI1IEBAIGZoYW5kbGVyX2NvbnNvbGU6Om5lZWRfaW52aXNp YmxlICgpCiAgIHJldHVybiBiOwogfQogCitEV09SRAorZmhhbmRsZXJfY29u c29sZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZCAoRFdPUkQgcGlkLCBib29s IG1hdGNoKQoreworICBEV09SRCB0bXA7CisgIGludCBudW0gPSBHZXRDb25z b2xlUHJvY2Vzc0xpc3QgKCZ0bXAsIDEpOworICBEV09SRCAqbGlzdCA9IChE V09SRCAqKQorCSAgICAgIEhlYXBBbGxvYyAoR2V0UHJvY2Vzc0hlYXAgKCks IDAsIG51bSAqIHNpemVvZiAoRFdPUkQpKTsKKyAgbnVtID0gR2V0Q29uc29s ZVByb2Nlc3NMaXN0IChsaXN0LCBudW0pOworICB0bXAgPSAwOworICBmb3Ig KGludCBpPTA7IGk8bnVtOyBpKyspCisgICAgaWYgKChtYXRjaCAmJiBsaXN0 W2ldID09IHBpZCkgfHwgKCFtYXRjaCAmJiBsaXN0W2ldICE9IHBpZCkpCisg ICAgICB7CisJdG1wID0gbGlzdFtpXTsKKwlicmVhazsKKyAgICAgIH0KKyAg SGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBsaXN0KTsKKyAgcmV0 dXJuIHRtcDsKK30KKwogRFdPUkQKIGZoYW5kbGVyX2NvbnNvbGU6Ol9fYWNx dWlyZV9pbnB1dF9tdXRleCAoY29uc3QgY2hhciAqZm4sIGludCBsbiwgRFdP UkQgbXMpCiB7CmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL2ZoYW5kbGVy X3R0eS5jYyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfdHR5LmNjCmluZGV4 IDMxMmMyZDA4My4uODI3MmIxNGExIDEwMDY0NAotLS0gYS93aW5zdXAvY3ln d2luL2ZoYW5kbGVyX3R0eS5jYworKysgYi93aW5zdXAvY3lnd2luL2ZoYW5k bGVyX3R0eS5jYwpAQCAtMjUsNiArMjUsMTQgQEAgZGV0YWlscy4gKi8KICNp bmNsdWRlICJjaGlsZF9pbmZvLmgiCiAjaW5jbHVkZSA8YXNtL3NvY2tldC5o PgogI2luY2x1ZGUgImN5Z3dhaXQuaCIKKyNpbmNsdWRlICJ0bHNfcGJ1Zi5o IgorCisjaWZuZGVmIFBST0NfVEhSRUFEX0FUVFJJQlVURV9QU0VVRE9DT05T T0xFCisjZGVmaW5lIFBST0NfVEhSRUFEX0FUVFJJQlVURV9QU0VVRE9DT05T T0xFIDB4MDAwMjAwMTYKKyNlbmRpZgorCitleHRlcm4gIkMiIGludCBzc2Nh bmYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOworZXh0ZXJu ICJDIiBpbnQgdHR5bmFtZV9yKGludCwgY2hhciosIHNpemVfdCk7CiAKICNk ZWZpbmUgY2xvc2VfbWF5YmUoaCkgXAogICBkbyB7IFwKQEAgLTM5LDYgKzQ3 LDcgQEAgc3RydWN0IHBpcGVfcmVxdWVzdCB7CiAKIHN0cnVjdCBwaXBlX3Jl cGx5IHsKICAgSEFORExFIGZyb21fbWFzdGVyOworICBIQU5ETEUgZnJvbV9t YXN0ZXJfY3lnOwogICBIQU5ETEUgdG9fbWFzdGVyOwogICBIQU5ETEUgdG9f bWFzdGVyX2N5ZzsKICAgRFdPUkQgZXJyb3I7CkBAIC02Nyw3ICs3Niw3IEBA IGJ5dGVzX2F2YWlsYWJsZSAoRFdPUkQmIG4sIEhBTkRMRSBoKQogYm9vbAog ZmhhbmRsZXJfcHR5X2NvbW1vbjo6Ynl0ZXNfYXZhaWxhYmxlIChEV09SRCAm bikKIHsKLSAgcmV0dXJuIDo6Ynl0ZXNfYXZhaWxhYmxlIChuLCBnZXRfaGFu ZGxlICgpKTsKKyAgcmV0dXJuIDo6Ynl0ZXNfYXZhaWxhYmxlIChuLCBnZXRf aGFuZGxlX2N5ZyAoKSk7CiB9CiAKICNpZmRlZiBERUJVR0dJTkcKQEAgLTIz NSw3ICsyNDQsNyBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpwcm9jZXNzX3Ns YXZlX291dHB1dCAoY2hhciAqYnVmLCBzaXplX3QgbGVuLCBpbnQgcGt0bW9k ZV9vbgogCSAgLyogQ2hlY2sgZWNobyBwaXBlIGZpcnN0LiAqLwogCSAgaWYg KDo6Ynl0ZXNfYXZhaWxhYmxlIChlY2hvX2NudCwgZWNob19yKSAmJiBlY2hv X2NudCA+IDApCiAJICAgIGJyZWFrOwotCSAgaWYgKCE6OmJ5dGVzX2F2YWls YWJsZSAobiwgZ2V0X2hhbmRsZV9jeWcgKCkpKQorCSAgaWYgKCFieXRlc19h dmFpbGFibGUgKG4pKQogCSAgICBnb3RvIGVycjsKIAkgIGlmIChuKQogCSAg ICBicmVhazsKQEAgLTI5Niw3ICszMDUsNyBAQCBmaGFuZGxlcl9wdHlfbWFz dGVyOjpwcm9jZXNzX3NsYXZlX291dHB1dCAoY2hhciAqYnVmLCBzaXplX3Qg bGVuLCBpbnQgcGt0bW9kZV9vbgogCSAgICAgIGdvdG8gZXJyOwogCSAgICB9 CiAJfQotICAgICAgZWxzZSBpZiAoIVJlYWRGaWxlIChnZXRfaGFuZGxlX2N5 ZyAoKSwgb3V0YnVmLCBybGVuLCAmbiwgTlVMTCkpCisgICAgICBlbHNlIGlm ICghUmVhZEZpbGUgKGdldF9oYW5kbGUgKCksIG91dGJ1ZiwgcmxlbiwgJm4s IE5VTEwpKQogCXsKIAkgIHRlcm1pb3NfcHJpbnRmICgiUmVhZEZpbGUgZmFp bGVkLCAlRSIpOwogCSAgZ290byBlcnI7CkBAIC0zMzEsNyArMzQwLDggQEAg b3V0OgogLyogcHR5IHNsYXZlIHN0dWZmICovCiAKIGZoYW5kbGVyX3B0eV9z bGF2ZTo6ZmhhbmRsZXJfcHR5X3NsYXZlIChpbnQgdW5pdCkKLSAgOiBmaGFu ZGxlcl9wdHlfY29tbW9uICgpLCBpbnVzZSAoTlVMTCksIG91dHB1dF9oYW5k bGVfY3lnIChOVUxMKQorICA6IGZoYW5kbGVyX3B0eV9jb21tb24gKCksIGlu dXNlIChOVUxMKSwgb3V0cHV0X2hhbmRsZV9jeWcgKE5VTEwpLAorICBwY29u X2F0dGFjaGVkIChmYWxzZSkKIHsKICAgaWYgKHVuaXQgPj0gMCkKICAgICBk ZXYgKCkucGFyc2UgKERFVl9QVFlTX01BSk9SLCB1bml0KTsKQEAgLTM0MCwx MSArMzUwLDE0IEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6ZmhhbmRsZXJfcHR5 X3NsYXZlIChpbnQgdW5pdCkKIGludAogZmhhbmRsZXJfcHR5X3NsYXZlOjpv cGVuIChpbnQgZmxhZ3MsIG1vZGVfdCkKIHsKLSAgSEFORExFIHB0eV9vd25l ciwgZnJvbV9tYXN0ZXJfbG9jYWwsIHRvX21hc3Rlcl9sb2NhbCwgdG9fbWFz dGVyX2N5Z19sb2NhbDsKKyAgSEFORExFIHB0eV9vd25lcjsKKyAgSEFORExF IGZyb21fbWFzdGVyX2xvY2FsLCBmcm9tX21hc3Rlcl9jeWdfbG9jYWw7Cisg IEhBTkRMRSB0b19tYXN0ZXJfbG9jYWwsIHRvX21hc3Rlcl9jeWdfbG9jYWw7 CiAgIEhBTkRMRSAqaGFuZGxlc1tdID0KICAgewogICAgICZmcm9tX21hc3Rl cl9sb2NhbCwgJmlucHV0X2F2YWlsYWJsZV9ldmVudCwgJmlucHV0X211dGV4 LCAmaW51c2UsCiAgICAgJm91dHB1dF9tdXRleCwgJnRvX21hc3Rlcl9sb2Nh bCwgJnB0eV9vd25lciwgJnRvX21hc3Rlcl9jeWdfbG9jYWwsCisgICAgJmZy b21fbWFzdGVyX2N5Z19sb2NhbCwKICAgICBOVUxMCiAgIH07CiAKQEAgLTM5 Niw3ICs0MDksNyBAQCBmaGFuZGxlcl9wdHlfc2xhdmU6Om9wZW4gKGludCBm bGFncywgbW9kZV90KQogICAgIHJlbGVhc2Vfb3V0cHV0X211dGV4ICgpOwog ICB9CiAKLSAgaWYgKCFnZXRfdHR5cCAoKS0+ZnJvbV9tYXN0ZXIgKCkgfHwK KyAgaWYgKCFnZXRfdHR5cCAoKS0+ZnJvbV9tYXN0ZXIgKCkgfHwgIWdldF90 dHlwICgpLT5mcm9tX21hc3Rlcl9jeWcgKCkgfHwKICAgICAgICFnZXRfdHR5 cCAoKS0+dG9fbWFzdGVyICgpIHx8ICFnZXRfdHR5cCAoKS0+dG9fbWFzdGVy X2N5ZyAoKSkKICAgICB7CiAgICAgICBlcnJtc2cgPSAicHR5IGhhbmRsZXMg aGF2ZSBiZWVuIGNsb3NlZCI7CkBAIC00NDEsNiArNDU0LDE1IEBAIGZoYW5k bGVyX3B0eV9zbGF2ZTo6b3BlbiAoaW50IGZsYWdzLCBtb2RlX3QpCiAJICBf X3NldGVycm5vICgpOwogCSAgZ290byBlcnJfbm9fbXNnOwogCX0KKyAgICAg IGlmICghRHVwbGljYXRlSGFuZGxlIChwdHlfb3duZXIsIGdldF90dHlwICgp LT5mcm9tX21hc3Rlcl9jeWcgKCksCisJCQkgICAgR2V0Q3VycmVudFByb2Nl c3MgKCksICZmcm9tX21hc3Rlcl9jeWdfbG9jYWwsIDAsIFRSVUUsCisJCQkg ICAgRFVQTElDQVRFX1NBTUVfQUNDRVNTKSkKKwl7CisJICB0ZXJtaW9zX3By aW50ZiAoImNhbid0IGR1cGxpY2F0ZSBpbnB1dCBmcm9tICV1LyVwLCAlRSIs CisJCQkgIGdldF90dHlwICgpLT5tYXN0ZXJfcGlkLCBnZXRfdHR5cCAoKS0+ ZnJvbV9tYXN0ZXJfY3lnICgpKTsKKwkgIF9fc2V0ZXJybm8gKCk7CisJICBn b3RvIGVycl9ub19tc2c7CisJfQogICAgICAgaWYgKCFEdXBsaWNhdGVIYW5k bGUgKHB0eV9vd25lciwgZ2V0X3R0eXAgKCktPnRvX21hc3RlciAoKSwKIAkJ CSAgR2V0Q3VycmVudFByb2Nlc3MgKCksICZ0b19tYXN0ZXJfbG9jYWwsIDAs IFRSVUUsCiAJCQkgIERVUExJQ0FURV9TQU1FX0FDQ0VTUykpCkBAIC00NzQs OSArNDk2LDExIEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6b3BlbiAoaW50IGZs YWdzLCBtb2RlX3QpCiAJICBnb3RvIGVycjsKIAl9CiAgICAgICBmcm9tX21h c3Rlcl9sb2NhbCA9IHJlcGwuZnJvbV9tYXN0ZXI7CisgICAgICBmcm9tX21h c3Rlcl9jeWdfbG9jYWwgPSByZXBsLmZyb21fbWFzdGVyX2N5ZzsKICAgICAg IHRvX21hc3Rlcl9sb2NhbCA9IHJlcGwudG9fbWFzdGVyOwogICAgICAgdG9f bWFzdGVyX2N5Z19sb2NhbCA9IHJlcGwudG9fbWFzdGVyX2N5ZzsKLSAgICAg IGlmICghZnJvbV9tYXN0ZXJfbG9jYWwgfHwgIXRvX21hc3Rlcl9sb2NhbCB8 fCAhdG9fbWFzdGVyX2N5Z19sb2NhbCkKKyAgICAgIGlmICghZnJvbV9tYXN0 ZXJfbG9jYWwgfHwgIWZyb21fbWFzdGVyX2N5Z19sb2NhbCB8fAorCSAgIXRv X21hc3Rlcl9sb2NhbCB8fCAhdG9fbWFzdGVyX2N5Z19sb2NhbCkKIAl7CiAJ ICBTZXRMYXN0RXJyb3IgKHJlcGwuZXJyb3IpOwogCSAgZXJybXNnID0gImVy cm9yIGR1cGxpY2F0aW5nIHBpcGVzLCAlRSI7CkBAIC00ODQsMjIgKzUwOCwy OCBAQCBmaGFuZGxlcl9wdHlfc2xhdmU6Om9wZW4gKGludCBmbGFncywgbW9k ZV90KQogCX0KICAgICB9CiAgIFZlcmlmeUhhbmRsZSAoZnJvbV9tYXN0ZXJf bG9jYWwpOworICBWZXJpZnlIYW5kbGUgKGZyb21fbWFzdGVyX2N5Z19sb2Nh bCk7CiAgIFZlcmlmeUhhbmRsZSAodG9fbWFzdGVyX2xvY2FsKTsKICAgVmVy aWZ5SGFuZGxlICh0b19tYXN0ZXJfY3lnX2xvY2FsKTsKIAogICB0ZXJtaW9z X3ByaW50ZiAoImR1cGxpY2F0ZWQgZnJvbV9tYXN0ZXIgJXAtPiVwIGZyb20g cHR5X293bmVyIiwKIAkJICBnZXRfdHR5cCAoKS0+ZnJvbV9tYXN0ZXIgKCks IGZyb21fbWFzdGVyX2xvY2FsKTsKKyAgdGVybWlvc19wcmludGYgKCJkdXBs aWNhdGVkIGZyb21fbWFzdGVyX2N5ZyAlcC0+JXAgZnJvbSBwdHlfb3duZXIi LAorCQkgIGdldF90dHlwICgpLT5mcm9tX21hc3Rlcl9jeWcgKCksIGZyb21f bWFzdGVyX2N5Z19sb2NhbCk7CiAgIHRlcm1pb3NfcHJpbnRmICgiZHVwbGlj YXRlZCB0b19tYXN0ZXIgJXAtPiVwIGZyb20gcHR5X293bmVyIiwKIAkJICBn ZXRfdHR5cCAoKS0+dG9fbWFzdGVyICgpLCB0b19tYXN0ZXJfbG9jYWwpOwog ICB0ZXJtaW9zX3ByaW50ZiAoImR1cGxpY2F0ZWQgdG9fbWFzdGVyX2N5ZyAl cC0+JXAgZnJvbSBwdHlfb3duZXIiLAogCQkgIGdldF90dHlwICgpLT50b19t YXN0ZXJfY3lnICgpLCB0b19tYXN0ZXJfY3lnX2xvY2FsKTsKIAogICBzZXRf aGFuZGxlIChmcm9tX21hc3Rlcl9sb2NhbCk7CisgIHNldF9oYW5kbGVfY3ln IChmcm9tX21hc3Rlcl9jeWdfbG9jYWwpOwogICBzZXRfb3V0cHV0X2hhbmRs ZSAodG9fbWFzdGVyX2xvY2FsKTsKICAgc2V0X291dHB1dF9oYW5kbGVfY3ln ICh0b19tYXN0ZXJfY3lnX2xvY2FsKTsKIAogICBmaGFuZGxlcl9jb25zb2xl OjpuZWVkX2ludmlzaWJsZSAoKTsKICAgc2V0X29wZW5fc3RhdHVzICgpOwor ICBpZiAocGNvbl9hdHRhY2hlZCAmJiBnZXRfdHR5cCAoKS0+c3dpdGNoX3Rv X3Bjb24gPT0gMCkKKyAgICBnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb24g PSAxOwogICByZXR1cm4gMTsKIAogZXJyOgpAQCAtNTQ4LDYgKzU3OCw5IEBA IGZoYW5kbGVyX3B0eV9zbGF2ZTo6Y2xvc2UgKCkKICAgaWYgKCFGb3JjZUNs b3NlSGFuZGxlIChnZXRfb3V0cHV0X2hhbmRsZV9jeWcgKCkpKQogICAgIHRl cm1pb3NfcHJpbnRmICgiQ2xvc2VIYW5kbGUgKGdldF9vdXRwdXRfaGFuZGxl X2N5ZyAoKTwlcD4pLCAlRSIsCiAJZ2V0X291dHB1dF9oYW5kbGVfY3lnICgp KTsKKyAgaWYgKCFGb3JjZUNsb3NlSGFuZGxlIChnZXRfaGFuZGxlX2N5ZyAo KSkpCisgICAgdGVybWlvc19wcmludGYgKCJDbG9zZUhhbmRsZSAoZ2V0X2hh bmRsZV9jeWcgKCk8JXA+KSwgJUUiLAorCWdldF9oYW5kbGVfY3lnICgpKTsK ICAgaWYgKCh1bnNpZ25lZCkgbXlzZWxmLT5jdHR5ID09IEZIREVWIChERVZf UFRZU19NQUpPUiwgZ2V0X21pbm9yICgpKSkKICAgICBmaGFuZGxlcl9jb25z b2xlOjpmcmVlX2NvbnNvbGUgKCk7CS8qIGFzc3VtZXMgdGhhdCB3ZSBhcmUg dGhlIGxhc3QgcHR5IGNsb3NlciAqLwogICBmaGFuZGxlcl9wdHlfY29tbW9u OjpjbG9zZSAoKTsKQEAgLTYwOSw2ICs2NDIsMjAgQEAgZmhhbmRsZXJfcHR5 X3NsYXZlOjp3cml0ZSAoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgbGVuKQog CiAgIHB1c2hfcHJvY2Vzc19zdGF0ZSBwcm9jZXNzX3N0YXRlIChQSURfVFRZ T1UpOwogCisgIHJlc2V0X3N3aXRjaF90b19wY29uICgpOworCisgIGlmIChw Y29uX2F0dGFjaGVkKQorICAgIHsgLyogUHVzaCBzbGF2ZSBvdXRwdXQgdG8g cHNldWRvIGNvbnNvbGUgc2NyZWVuIGJ1ZmZlciAqLworICAgICAgRFdPUkQg d0xlbiwgd3JpdHRlbiA9IDA7CisgICAgICBjaGFyICpwID0gKGNoYXIgKikg cHRyOworICAgICAgd2hpbGUgKHdyaXR0ZW4gPCAgbGVuKQorCXsKKwkgIFdy aXRlRmlsZSAoZ2V0X291dHB1dF9oYW5kbGUgKCksIHAsIGxlbiAtIHdyaXR0 ZW4sICZ3TGVuLCBOVUxMKTsKKwkgIHdyaXR0ZW4gKz0gd0xlbjsKKwkgIHAg Kz0gd0xlbjsKKwl9CisgICAgfQorCiAgIGlmICghcHJvY2Vzc19vcG9zdF9v dXRwdXQgKGdldF9vdXRwdXRfaGFuZGxlX2N5ZyAoKSwgcHRyLCB0b3dyaXRl LCBmYWxzZSkpCiAgICAgewogICAgICAgRFdPUkQgZXJyID0gR2V0TGFzdEVy cm9yICgpOwpAQCAtNjQ0LDEwICs2OTEsMTIgQEAgZmhhbmRsZXJfcHR5X3Ns YXZlOjpyZWFkICh2b2lkICpwdHIsIHNpemVfdCYgbGVuKQogICAgICAgcmV0 dXJuOwogICAgIH0KIAotICB0ZXJtaW9zX3ByaW50ZiAoInJlYWQoJXAsICVs dSkgaGFuZGxlICVwIiwgcHRyLCBsZW4sIGdldF9oYW5kbGUgKCkpOworICB0 ZXJtaW9zX3ByaW50ZiAoInJlYWQoJXAsICVsdSkgaGFuZGxlICVwIiwgcHRy LCBsZW4sIGdldF9oYW5kbGVfY3lnICgpKTsKIAogICBwdXNoX3Byb2Nlc3Nf c3RhdGUgcHJvY2Vzc19zdGF0ZSAoUElEX1RUWUlOKTsKIAorICByZXNldF9z d2l0Y2hfdG9fcGNvbiAoKTsKKwogICBpZiAoaXNfbm9uYmxvY2tpbmcgKCkg fHwgIXB0cikgLyogSW5kaWNhdGluZyB0Y2ZsdXNoKCkuICovCiAgICAgdGlt ZV90b193YWl0ID0gMDsKICAgZWxzZSBpZiAoKGdldF90dHlwICgpLT50aS5j X2xmbGFnICYgSUNBTk9OKSkKQEAgLTc3Nyw3ICs4MjYsNyBAQCBmaGFuZGxl cl9wdHlfc2xhdmU6OnJlYWQgKHZvaWQgKnB0ciwgc2l6ZV90JiBsZW4pCiAg ICAgICBpZiAocmVhZGxlbikKIAl7CiAJICB0ZXJtaW9zX3ByaW50ZiAoInJl YWRpbmcgJWx1IGJ5dGVzICh2dGltZSAlZCkiLCByZWFkbGVuLCB2dGltZSk7 Ci0JICBpZiAoIVJlYWRGaWxlIChnZXRfaGFuZGxlICgpLCBidWYsIHJlYWRs ZW4sICZuLCBOVUxMKSkKKwkgIGlmICghUmVhZEZpbGUgKGdldF9oYW5kbGVf Y3lnICgpLCBidWYsIHJlYWRsZW4sICZuLCBOVUxMKSkKIAkgICAgewogCSAg ICAgIHRlcm1pb3NfcHJpbnRmICgicmVhZCBmYWlsZWQsICVFIik7CiAJICAg ICAgUmVsZWFzZU11dGV4IChpbnB1dF9tdXRleCk7CkBAIC04OTAsNiArOTM5 LDcgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6ZHVwIChmaGFuZGxlcl9iYXNl ICpjaGlsZCwgaW50KQogaW50CiBmaGFuZGxlcl9wdHlfc2xhdmU6OnRjZ2V0 YXR0ciAoc3RydWN0IHRlcm1pb3MgKnQpCiB7CisgIHJlc2V0X3N3aXRjaF90 b19wY29uICgpOwogICAqdCA9IGdldF90dHlwICgpLT50aTsKICAgcmV0dXJu IDA7CiB9CkBAIC04OTcsNiArOTQ3LDcgQEAgZmhhbmRsZXJfcHR5X3NsYXZl Ojp0Y2dldGF0dHIgKHN0cnVjdCB0ZXJtaW9zICp0KQogaW50CiBmaGFuZGxl cl9wdHlfc2xhdmU6OnRjc2V0YXR0ciAoaW50LCBjb25zdCBzdHJ1Y3QgdGVy bWlvcyAqdCkKIHsKKyAgcmVzZXRfc3dpdGNoX3RvX3Bjb24gKCk7CiAgIGFj cXVpcmVfb3V0cHV0X211dGV4IChJTkZJTklURSk7CiAgIGdldF90dHlwICgp LT50aSA9ICp0OwogICByZWxlYXNlX291dHB1dF9tdXRleCAoKTsKQEAgLTkw OCw4ICs5NTksOSBAQCBmaGFuZGxlcl9wdHlfc2xhdmU6OnRjZmx1c2ggKGlu dCBxdWV1ZSkKIHsKICAgaW50IHJldCA9IDA7CiAKLSAgdGVybWlvc19wcmlu dGYgKCJ0Y2ZsdXNoKCVkKSBoYW5kbGUgJXAiLCBxdWV1ZSwgZ2V0X2hhbmRs ZSAoKSk7CisgIHRlcm1pb3NfcHJpbnRmICgidGNmbHVzaCglZCkgaGFuZGxl ICVwIiwgcXVldWUsIGdldF9oYW5kbGVfY3lnICgpKTsKIAorICByZXNldF9z d2l0Y2hfdG9fcGNvbiAoKTsKICAgaWYgKHF1ZXVlID09IFRDSUZMVVNIIHx8 IHF1ZXVlID09IFRDSU9GTFVTSCkKICAgICB7CiAgICAgICBzaXplX3QgbGVu ID0gVUlOVF9NQVg7CkBAIC05MjksNiArOTgxLDcgQEAgaW50CiBmaGFuZGxl cl9wdHlfc2xhdmU6OmlvY3RsICh1bnNpZ25lZCBpbnQgY21kLCB2b2lkICph cmcpCiB7CiAgIHRlcm1pb3NfcHJpbnRmICgiaW9jdGwgKCV4KSIsIGNtZCk7 CisgIHJlc2V0X3N3aXRjaF90b19wY29uICgpOwogICBpbnQgcmVzID0gZmhh bmRsZXJfdGVybWlvczo6aW9jdGwgKGNtZCwgYXJnKTsKICAgaWYgKHJlcyA8 PSAwKQogICAgIHJldHVybiByZXM7CkBAIC05OTUsNiArMTA0OCw1NSBAQCBm aGFuZGxlcl9wdHlfc2xhdmU6OmlvY3RsICh1bnNpZ25lZCBpbnQgY21kLCB2 b2lkICphcmcpCiAgICAgICBnZXRfdHR5cCAoKS0+d2luc2l6ZSA9IGdldF90 dHlwICgpLT5hcmcud2luc2l6ZTsKICAgICAgIGJyZWFrOwogICAgIGNhc2Ug VElPQ1NXSU5TWjoKKyAgICAgIEhQQ09OIGhQc2V1ZG9Db25zb2xlID0gZ2V0 X3R0eXAgKCktPmhQc2V1ZG9Db25zb2xlOworICAgICAgQ09PUkQgc2l6ZTsK KyAgICAgIHNpemUuWCA9ICgoc3RydWN0IHdpbnNpemUgKikgYXJnKS0+d3Nf Y29sOworICAgICAgc2l6ZS5ZID0gKChzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmcp LT53c19yb3c7CisjaWYgMAorICAgICAgQ09OU09MRV9TQ1JFRU5fQlVGRkVS X0lORk8gY3NiaTsKKyAgICAgIGlmICghR2V0Q29uc29sZVNjcmVlbkJ1ZmZl ckluZm8gKGdldF9vdXRwdXRfaGFuZGxlICgpLCAmY3NiaSkpCisJZ290byBj eWdfc2V0c2l6ZTsKKyAgICAgIGlmIChzaXplLlggPT0gY3NiaS5zcldpbmRv dy5SaWdodCAtIGNzYmkuc3JXaW5kb3cuTGVmdCArIDEgJiYKKwkgIHNpemUu WSA9PSBjc2JpLnNyV2luZG93LkJvdHRvbSAtIGNzYmkuc3JXaW5kb3cuVG9w ICsgMSkKKwlnb3RvIGN5Z19zZXRzaXplOworI2VuZGlmCisgICAgICBpZiAo aFBzZXVkb0NvbnNvbGUpCisJeworCSAgaWYgKG15c2VsZi0+cGlkID09IGdl dF90dHlwICgpLT5tYXN0ZXJfcGlkKQorCSAgICB7CisJICAgICAgSE1PRFVM RSBoTW9kdWxlID0gR2V0TW9kdWxlSGFuZGxlICgia2VybmVsMzIuZGxsIik7 CisJICAgICAgRkFSUFJPQyBmdW5jID0gR2V0UHJvY0FkZHJlc3MgKGhNb2R1 bGUsICJSZXNpemVQc2V1ZG9Db25zb2xlIik7CisJICAgICAgSFJFU1VMVCAo V0lOQVBJICpSZXNpemVQc2V1ZG9Db25zb2xlKSAoSFBDT04sIENPT1JEKSA9 IE5VTEw7CisJICAgICAgUmVzaXplUHNldWRvQ29uc29sZSA9IChIUkVTVUxU IChXSU5BUEkgKikgKEhQQ09OLCBDT09SRCkpIGZ1bmM7CisJICAgICAgaWYg KCFSZXNpemVQc2V1ZG9Db25zb2xlIChoUHNldWRvQ29uc29sZSwgc2l6ZSkp CisJCWdvdG8gY3lnX3NldHNpemU7CisJICAgIH0KKwkgIGVsc2UKKwkgICAg eworCSAgICAgIERXT1JEIHBpZFJlc3RvcmUgPQorCQlmaGFuZGxlcl9jb25z b2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkIChHZXRDdXJyZW50UHJvY2Vz c0lkICgpLCBmYWxzZSk7CisJICAgICAgaWYgKCFwY29uX2F0dGFjaGVkKQor CQl7CisJCSAgRnJlZUNvbnNvbGUgKCk7CisJCSAgQXR0YWNoQ29uc29sZSAo Z2V0SGVscGVyUHJvY2Vzc0lkICgpKTsKKwkJfQorCSAgICAgIFNNQUxMX1JF Q1QgcmVjdDsKKwkgICAgICBpZiAoIVNldENvbnNvbGVTY3JlZW5CdWZmZXJT aXplIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgc2l6ZSkpCisJCWdvdG8gZGV0 YWNoX3Bjb247CisJICAgICAgcmVjdC5MZWZ0ID0gMDsKKwkgICAgICByZWN0 LlRvcCA9IDA7CisJICAgICAgcmVjdC5SaWdodCA9IHNpemUuWC0xOworCSAg ICAgIHJlY3QuQm90dG9tID0gc2l6ZS5ZLTE7CisJICAgICAgU2V0Q29uc29s ZVdpbmRvd0luZm8gKGdldF9vdXRwdXRfaGFuZGxlICgpLCBUUlVFLCAmcmVj dCk7CitkZXRhY2hfcGNvbjoKKwkgICAgICBpZiAoIXBjb25fYXR0YWNoZWQg JiYgcGlkUmVzdG9yZSkKKwkJeworCQkgIEZyZWVDb25zb2xlICgpOworCQkg IEF0dGFjaENvbnNvbGUgKHBpZFJlc3RvcmUpOworCQl9CisJICAgIH0KKwl9 CitjeWdfc2V0c2l6ZToKICAgICAgIGlmIChnZXRfdHR5cCAoKS0+d2luc2l6 ZS53c19yb3cgIT0gKChzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmcpLT53c19yb3cK IAkgIHx8IGdldF90dHlwICgpLT53aW5zaXplLndzX2NvbCAhPSAoKHN0cnVj dCB3aW5zaXplICopIGFyZyktPndzX2NvbCkKIAl7CkBAIC0xMjI4LDggKzEz MzAsOSBAQCBlcnJvdXQ6CiBmaGFuZGxlcl9wdHlfbWFzdGVyOjpmaGFuZGxl cl9wdHlfbWFzdGVyIChpbnQgdW5pdCkKICAgOiBmaGFuZGxlcl9wdHlfY29t bW9uICgpLCBwa3Rtb2RlICgwKSwgbWFzdGVyX2N0bCAoTlVMTCksCiAgICAg bWFzdGVyX3RocmVhZCAoTlVMTCksIGZyb21fbWFzdGVyIChOVUxMKSwgdG9f bWFzdGVyIChOVUxMKSwKLSAgICBlY2hvX3IgKE5VTEwpLCBlY2hvX3cgKE5V TEwpLCBkd1Byb2Nlc3NJZCAoMCksCi0gICAgaW9faGFuZGxlX2N5ZyAoTlVM TCksIHRvX21hc3Rlcl9jeWcgKE5VTEwpLCBtYXN0ZXJfZndkX3RocmVhZCAo TlVMTCkKKyAgICBmcm9tX3NsYXZlIChOVUxMKSwgdG9fc2xhdmUgKE5VTEwp LCBlY2hvX3IgKE5VTEwpLCBlY2hvX3cgKE5VTEwpLAorICAgIGR3UHJvY2Vz c0lkICgwKSwgdG9fbWFzdGVyX2N5ZyAoTlVMTCksIGZyb21fbWFzdGVyX2N5 ZyAoTlVMTCksCisgICAgbWFzdGVyX2Z3ZF90aHJlYWQgKE5VTEwpCiB7CiAg IGlmICh1bml0ID49IDApCiAgICAgZGV2ICgpLnBhcnNlIChERVZfUFRZTV9N QUpPUiwgdW5pdCk7CkBAIC0xMjg1LDcgKzEzODgsOCBAQCBmaGFuZGxlcl9w dHlfbWFzdGVyOjpjbGVhbnVwICgpCiB7CiAgIHJlcG9ydF90dHlfY291bnRz ICh0aGlzLCAiY2xvc2luZyBtYXN0ZXIiLCAiIik7CiAgIGlmIChhcmNoZXR5 cGUpCi0gICAgZnJvbV9tYXN0ZXIgPSB0b19tYXN0ZXIgPSB0b19tYXN0ZXJf Y3lnID0gTlVMTDsKKyAgICBmcm9tX21hc3RlciA9IGZyb21fbWFzdGVyX2N5 ZyA9CisgICAgICB0b19tYXN0ZXIgPSB0b19tYXN0ZXJfY3lnID0gZnJvbV9z bGF2ZSA9IHRvX3NsYXZlID0gTlVMTDsKICAgZmhhbmRsZXJfYmFzZTo6Y2xl YW51cCAoKTsKIH0KIApAQCAtMTI5NSw4ICsxMzk5LDkgQEAgZmhhbmRsZXJf cHR5X21hc3Rlcjo6Y2xvc2UgKCkKICAgT0JKRUNUX0JBU0lDX0lORk9STUFU SU9OIG9iaTsKICAgTlRTVEFUVVMgc3RhdHVzOwogCi0gIHRlcm1pb3NfcHJp bnRmICgiY2xvc2luZyBmcm9tX21hc3RlciglcCkvdG9fbWFzdGVyKCVwKS90 b19tYXN0ZXJfY3lnKCVwKSBzaW5jZSB3ZSBvd24gdGhlbSgldSkiLAotCQkg IGZyb21fbWFzdGVyLCB0b19tYXN0ZXIsIHRvX21hc3Rlcl9jeWcsIGR3UHJv Y2Vzc0lkKTsKKyAgdGVybWlvc19wcmludGYgKCJjbG9zaW5nIGZyb21fbWFz dGVyKCVwKS9mcm9tX21hc3Rlcl9jeWcoJXApL3RvX21hc3RlciglcCkvdG9f bWFzdGVyX2N5ZyglcCkgc2luY2Ugd2Ugb3duIHRoZW0oJXUpIiwKKwkJICBm cm9tX21hc3RlciwgZnJvbV9tYXN0ZXJfY3lnLAorCQkgIHRvX21hc3Rlciwg dG9fbWFzdGVyX2N5ZywgZHdQcm9jZXNzSWQpOwogICBpZiAoY3lnd2luX2Zp bmlzaGVkX2luaXRpYWxpemluZykKICAgICB7CiAgICAgICBpZiAobWFzdGVy X2N0bCAmJiBnZXRfdHR5cCAoKS0+bWFzdGVyX3BpZCA9PSBteXNlbGYtPnBp ZCkKQEAgLTEzMjAsNiArMTQyNSwyMCBAQCBmaGFuZGxlcl9wdHlfbWFzdGVy OjpjbG9zZSAoKQogCSAgICB9CiAJICByZWxlYXNlX291dHB1dF9tdXRleCAo KTsKIAkgIG1hc3Rlcl9md2RfdGhyZWFkLT50ZXJtaW5hdGVfdGhyZWFkICgp OworCisJICAvKiBQc2V1ZG8gQ29uc29sZSBTdXBwb3J0ICovCisJICBpZiAo Z2V0X3R0eXAgKCktPmhQc2V1ZG9Db25zb2xlKQorCSAgICB7CisJICAgICAg U2V0RXZlbnQgKGdldF90dHlwICgpLT5oSGVscGVyR29vZGJ5ZSk7CisJICAg ICAgV2FpdEZvclNpbmdsZU9iamVjdCAoZ2V0X3R0eXAgKCktPmhIZWxwZXJQ cm9jZXNzLCBJTkZJTklURSk7CisJICAgICAgSE1PRFVMRSBoTW9kdWxlID0g R2V0TW9kdWxlSGFuZGxlICgia2VybmVsMzIuZGxsIik7CisJICAgICAgRkFS UFJPQyBmdW5jID0gR2V0UHJvY0FkZHJlc3MgKGhNb2R1bGUsICJDbG9zZVBz ZXVkb0NvbnNvbGUiKTsKKwkgICAgICBWT0lEIChXSU5BUEkgKkNsb3NlUHNl dWRvQ29uc29sZSkgKEhQQ09OKSA9IE5VTEw7CisJICAgICAgQ2xvc2VQc2V1 ZG9Db25zb2xlID0gKFZPSUQgKFdJTkFQSSAqKSAoSFBDT04pKSBmdW5jOwor CSAgICAgIENsb3NlUHNldWRvQ29uc29sZSAoZ2V0X3R0eXAgKCktPmhQc2V1 ZG9Db25zb2xlKTsKKwkgICAgICBnZXRfdHR5cCAoKS0+aFBzZXVkb0NvbnNv bGUgPSBOVUxMOworCSAgICAgIGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNv biA9IDA7CisJICAgIH0KIAl9CiAgICAgfQogCkBAIC0xMzQ0LDE3ICsxNDYz LDIyIEBAIGZoYW5kbGVyX3B0eV9tYXN0ZXI6OmNsb3NlICgpCiAKICAgaWYg KCFGb3JjZUNsb3NlSGFuZGxlIChmcm9tX21hc3RlcikpCiAgICAgdGVybWlv c19wcmludGYgKCJlcnJvciBjbG9zaW5nIGZyb21fbWFzdGVyICVwLCAlRSIs IGZyb21fbWFzdGVyKTsKKyAgaWYgKCFGb3JjZUNsb3NlSGFuZGxlIChmcm9t X21hc3Rlcl9jeWcpKQorICAgIHRlcm1pb3NfcHJpbnRmICgiZXJyb3IgY2xv c2luZyBmcm9tX21hc3Rlcl9jeWcgJXAsICVFIiwgZnJvbV9tYXN0ZXJfY3ln KTsKICAgaWYgKCFGb3JjZUNsb3NlSGFuZGxlICh0b19tYXN0ZXIpKQogICAg IHRlcm1pb3NfcHJpbnRmICgiZXJyb3IgY2xvc2luZyB0b19tYXN0ZXIgJXAs ICVFIiwgdG9fbWFzdGVyKTsKICAgZnJvbV9tYXN0ZXIgPSB0b19tYXN0ZXIg PSBOVUxMOwotICBpZiAoIUZvcmNlQ2xvc2VIYW5kbGUgKGdldF9oYW5kbGVf Y3lnICgpKSkKLSAgICB0ZXJtaW9zX3ByaW50ZiAoImVycm9yIGNsb3Npbmcg aW9faGFuZGxlX2N5ZyAlcCwgJUUiLCBnZXRfaGFuZGxlX2N5ZyAoKSk7Cisg IGlmICghRm9yY2VDbG9zZUhhbmRsZSAoZnJvbV9zbGF2ZSkpCisgICAgdGVy bWlvc19wcmludGYgKCJlcnJvciBjbG9zaW5nIGZyb21fc2xhdmUgJXAsICVF IiwgZnJvbV9zbGF2ZSk7CisgIGZyb21fc2xhdmUgPSBOVUxMOwogICBpZiAo IUZvcmNlQ2xvc2VIYW5kbGUgKHRvX21hc3Rlcl9jeWcpKQogICAgIHRlcm1p b3NfcHJpbnRmICgiZXJyb3IgY2xvc2luZyB0b19tYXN0ZXJfY3lnICVwLCAl RSIsIHRvX21hc3Rlcl9jeWcpOwotICBnZXRfaGFuZGxlX2N5ZyAoKSA9IHRv X21hc3Rlcl9jeWcgPSBOVUxMOworICB0b19tYXN0ZXJfY3lnID0gZnJvbV9t YXN0ZXJfY3lnID0gTlVMTDsKICAgRm9yY2VDbG9zZUhhbmRsZSAoZWNob19y KTsKICAgRm9yY2VDbG9zZUhhbmRsZSAoZWNob193KTsKICAgZWNob19yID0g ZWNob193ID0gTlVMTDsKKyAgRm9yY2VDbG9zZUhhbmRsZSAodG9fc2xhdmUp OworICB0b19zbGF2ZSA9IE5VTEw7CiAKICAgaWYgKGhhdmVfZXhlY2VkIHx8 IGdldF90dHlwICgpLT5tYXN0ZXJfcGlkICE9IG15c2VsZi0+cGlkKQogICAg IHRlcm1pb3NfcHJpbnRmICgibm90IGNsZWFyaW5nOiAlZCwgbWFzdGVyX3Bp ZCAlZCIsIGhhdmVfZXhlY2VkLCBnZXRfdHR5cCAoKS0+bWFzdGVyX3BpZCk7 CkBAIC0xMzc2LDYgKzE1MDAsMTQgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6 d3JpdGUgKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IGxlbikKICAgICByZXR1 cm4gKHNzaXplX3QpIGJnOwogCiAgIHB1c2hfcHJvY2Vzc19zdGF0ZSBwcm9j ZXNzX3N0YXRlIChQSURfVFRZT1UpOworCisgIGlmIChnZXRfdHR5cCAoKS0+ c3dpdGNoX3RvX3Bjb24gPT0gMikKKyAgICB7CisgICAgICBEV09SRCB3TGVu OworICAgICAgV3JpdGVGaWxlICh0b19zbGF2ZSwgcHRyLCBsZW4sICZ3TGVu LCBOVUxMKTsKKyAgICAgIHJldHVybiB3TGVuOworICAgIH0KKwogICBsaW5l X2VkaXRfc3RhdHVzIHN0YXR1cyA9IGxpbmVfZWRpdCAocCsrLCBsZW4sIHRp LCAmcmV0KTsKICAgaWYgKHN0YXR1cyA+IGxpbmVfZWRpdF9zaWduYWxsZWQg JiYgc3RhdHVzICE9IGxpbmVfZWRpdF9waXBlX2Z1bGwpCiAgICAgcmV0ID0g LTE7CkBAIC0xNDQzLDYgKzE1NzUsMTcgQEAgZmhhbmRsZXJfcHR5X21hc3Rl cjo6aW9jdGwgKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKICAgICAg ICooc3RydWN0IHdpbnNpemUgKikgYXJnID0gZ2V0X3R0eXAgKCktPndpbnNp emU7CiAgICAgICBicmVhazsKICAgICBjYXNlIFRJT0NTV0lOU1o6CisgICAg ICBpZiAoZ2V0X3R0eXAgKCktPmhQc2V1ZG9Db25zb2xlKQorCXsKKwkgIEhN T0RVTEUgaE1vZHVsZSA9IEdldE1vZHVsZUhhbmRsZSAoImtlcm5lbDMyLmRs bCIpOworCSAgRkFSUFJPQyBmdW5jID0gR2V0UHJvY0FkZHJlc3MgKGhNb2R1 bGUsICJSZXNpemVQc2V1ZG9Db25zb2xlIik7CisJICBIUkVTVUxUIChXSU5B UEkgKlJlc2l6ZVBzZXVkb0NvbnNvbGUpIChIUENPTiwgQ09PUkQpID0gTlVM TDsKKwkgIFJlc2l6ZVBzZXVkb0NvbnNvbGUgPSAoSFJFU1VMVCAoV0lOQVBJ ICopIChIUENPTiwgQ09PUkQpKSBmdW5jOworCSAgQ09PUkQgc2l6ZTsKKwkg IHNpemUuWCA9ICgoc3RydWN0IHdpbnNpemUgKikgYXJnKS0+d3NfY29sOwor CSAgc2l6ZS5ZID0gKChzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmcpLT53c19yb3c7 CisJICBSZXNpemVQc2V1ZG9Db25zb2xlIChnZXRfdHR5cCAoKS0+aFBzZXVk b0NvbnNvbGUsIHNpemUpOworCX0KICAgICAgIGlmIChnZXRfdHR5cCAoKS0+ d2luc2l6ZS53c19yb3cgIT0gKChzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmcpLT53 c19yb3cKIAkgIHx8IGdldF90dHlwICgpLT53aW5zaXplLndzX2NvbCAhPSAo KHN0cnVjdCB3aW5zaXplICopIGFyZyktPndzX2NvbCkKIAl7CkBAIC0xNDU4 LDcgKzE2MDEsNyBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjppb2N0bCAodW5z aWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogICAgIGNhc2UgRklPTlJFQUQ6 CiAgICAgICB7CiAJRFdPUkQgbjsKLQlpZiAoITo6Ynl0ZXNfYXZhaWxhYmxl IChuLCBnZXRfaGFuZGxlX2N5ZyAoKSkpCisJaWYgKCFieXRlc19hdmFpbGFi bGUgKG4pKQogCSAgewogCSAgICBzZXRfZXJybm8gKEVJTlZBTCk7CiAJICAg IHJldHVybiAtMTsKQEAgLTE0OTcsMTQgKzE2NDAsMjIgQEAgZmhhbmRsZXJf cHR5X2NvbW1vbjo6c2V0X2Nsb3NlX29uX2V4ZWMgKGJvb2wgdmFsKQogdm9p ZAogZmhhbmRsZXJfcHR5X3NsYXZlOjpmaXh1cF9hZnRlcl9mb3JrIChIQU5E TEUgcGFyZW50KQogeworICBpZiAoZmhhbmRsZXJfY29uc29sZTo6Z2V0X2Nv bnNvbGVfcHJvY2Vzc19pZCAoZ2V0X3R0eXAgKCktPkhlbHBlclByb2Nlc3NJ ZCwgdHJ1ZSkpCisgICAgcGNvbl9hdHRhY2hlZCA9IHRydWU7CiAgIC8vIGZv cmtfZml4dXAgKHBhcmVudCwgaW51c2UsICJpbnVzZSIpOwogICAvLyBmaGFu ZGxlcl9wdHlfY29tbW9uOjpmaXh1cF9hZnRlcl9mb3JrIChwYXJlbnQpOwor ICBpZiAocGNvbl9hdHRhY2hlZCAmJiBnZXRfdHR5cCAoKS0+c3dpdGNoX3Rv X3Bjb24gPT0gMCkKKyAgICBnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb24g PSAxOwogICByZXBvcnRfdHR5X2NvdW50cyAodGhpcywgImluaGVyaXRlZCIs ICIiKTsKIH0KIAogdm9pZAogZmhhbmRsZXJfcHR5X3NsYXZlOjpmaXh1cF9h ZnRlcl9leGVjICgpCiB7CisgIGlmIChmaGFuZGxlcl9jb25zb2xlOjpnZXRf Y29uc29sZV9wcm9jZXNzX2lkIChnZXRfdHR5cCAoKS0+SGVscGVyUHJvY2Vz c0lkLCB0cnVlKSkKKyAgICBwY29uX2F0dGFjaGVkID0gdHJ1ZTsKKyAgaWYg KHBjb25fYXR0YWNoZWQgJiYgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29u ID09IDApCisgICAgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uID0gMTsK ICAgaWYgKCFjbG9zZV9vbl9leGVjICgpKQogICAgIGZpeHVwX2FmdGVyX2Zv cmsgKE5VTEwpOwogfQpAQCAtMTU0NCw3ICsxNjk1LDcgQEAgZmhhbmRsZXJf cHR5X21hc3Rlcjo6cHR5X21hc3Rlcl90aHJlYWQgKCkKICAgd2hpbGUgKCFl eGl0ICYmIChDb25uZWN0TmFtZWRQaXBlIChtYXN0ZXJfY3RsLCBOVUxMKQog CQkgICB8fCBHZXRMYXN0RXJyb3IgKCkgPT0gRVJST1JfUElQRV9DT05ORUNU RUQpKQogICAgIHsKLSAgICAgIHBpcGVfcmVwbHkgcmVwbCA9IHsgTlVMTCwg TlVMTCwgMCB9OworICAgICAgcGlwZV9yZXBseSByZXBsID0geyBOVUxMLCBO VUxMLCBOVUxMLCAwIH07CiAgICAgICBib29sIGRlaW1wID0gZmFsc2U7CiAg ICAgICBOVFNUQVRVUyBhbGxvdyA9IFNUQVRVU19BQ0NFU1NfREVOSUVEOwog ICAgICAgQUNDRVNTX01BU0sgYWNjZXNzID0gRVZFTlRfTU9ESUZZX1NUQVRF OwpAQCAtMTYxNCw2ICsxNzY1LDEzIEBAIGZoYW5kbGVyX3B0eV9tYXN0ZXI6 OnB0eV9tYXN0ZXJfdGhyZWFkICgpCiAJICAgICAgdGVybWlvc19wcmludGYg KCJEdXBsaWNhdGVIYW5kbGUgKGZyb21fbWFzdGVyKSwgJUUiKTsKIAkgICAg ICBnb3RvIHJlcGx5OwogCSAgICB9CisJICBpZiAoIUR1cGxpY2F0ZUhhbmRs ZSAoR2V0Q3VycmVudFByb2Nlc3MgKCksIGZyb21fbWFzdGVyX2N5ZywKKwkJ CSAgICAgICBjbGllbnQsICZyZXBsLmZyb21fbWFzdGVyX2N5ZywKKwkJCSAg ICAgICAwLCBUUlVFLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpKQorCSAgICB7 CisJICAgICAgdGVybWlvc19wcmludGYgKCJEdXBsaWNhdGVIYW5kbGUgKGZy b21fbWFzdGVyX2N5ZyksICVFIik7CisJICAgICAgZ290byByZXBseTsKKwkg ICAgfQogCSAgaWYgKCFEdXBsaWNhdGVIYW5kbGUgKEdldEN1cnJlbnRQcm9j ZXNzICgpLCB0b19tYXN0ZXIsCiAJCQkJY2xpZW50LCAmcmVwbC50b19tYXN0 ZXIsCiAJCQkJMCwgVFJVRSwgRFVQTElDQVRFX1NBTUVfQUNDRVNTKSkKQEAg LTE2NTksMjMgKzE4MTcsODAgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6cHR5 X21hc3Rlcl9md2RfdGhyZWFkICgpCiAgIERXT1JEIHJsZW47CiAgIGNoYXIg b3V0YnVmW09VVF9CVUZGRVJfU0laRV07CiAKLSAgdGVybWlvc19wcmludGYo IlN0YXJ0ZWQuIik7CisgIHRlcm1pb3NfcHJpbnRmICgiU3RhcnRlZC4iKTsK ICAgZm9yICg7OykKICAgICB7Ci0gICAgICBpZiAoIVJlYWRGaWxlIChnZXRf aGFuZGxlICgpLCBvdXRidWYsIHNpemVvZiBvdXRidWYsICZybGVuLCBOVUxM KSkKKyAgICAgIGlmICghUmVhZEZpbGUgKGZyb21fc2xhdmUsIG91dGJ1Ziwg c2l6ZW9mIG91dGJ1ZiwgJnJsZW4sIE5VTEwpKQogCXsKIAkgIHRlcm1pb3Nf cHJpbnRmICgiUmVhZEZpbGUgZm9yIGZvcndhcmRpbmcgZmFpbGVkLCAlRSIp OwogCSAgYnJlYWs7CiAJfQogICAgICAgc3NpemVfdCB3bGVuID0gcmxlbjsK KyAgICAgIGNoYXIgKnB0ciA9IG91dGJ1ZjsKKyAgICAgIGlmIChnZXRfdHR5 cCAoKS0+aFBzZXVkb0NvbnNvbGUpCisJeworCSAgaWYgKGdldF90dHlwICgp LT5zd2l0Y2hfdG9fcGNvbiA9PSAxKQorCSAgICBnZXRfdHR5cCAoKS0+c3dp dGNoX3RvX3Bjb24gPSAyOworI2lmIDEKKwkgIC8qIEF2b2lkIHNldHRpbmcg d2luZG93IHRpdGxlIHRvICJjeWd3aW4tY29uc29sZS1oZWxwZXIuZXhlIiAq LworCSAgaW50IHN0YXRlID0gMDsKKwkgIGludCBzdGFydF9hdCA9IDA7CisJ ICBmb3IgKERXT1JEIGk9MDsgaTxybGVuOyBpKyspCisJICAgIGlmIChvdXRi dWZbaV0gPT0gJ1wwMzMnKQorCSAgICAgIHsKKwkJc3RhcnRfYXQgPSBpOwor CQlzdGF0ZSA9IDE7CisJCWNvbnRpbnVlOworCSAgICAgIH0KKwkgICAgZWxz ZSBpZiAoKHN0YXRlID09IDEgJiYgb3V0YnVmW2ldID09ICddJykgfHwKKwkJ ICAgICAoc3RhdGUgPT0gMiAmJiBvdXRidWZbaV0gPT0gJzAnKSB8fAorCQkg ICAgIChzdGF0ZSA9PSAzICYmIG91dGJ1ZltpXSA9PSAnOycpIHx8CisJCSAg ICAgKHN0YXRlID09IDQgJiYgb3V0YnVmW2ldID09ICdcMCcpKQorCSAgICAg IHsKKwkJc3RhdGUgKys7CisJCWNvbnRpbnVlOworCSAgICAgIH0KKwkgICAg ZWxzZSBpZiAoc3RhdGUgPT0gNSAmJiBvdXRidWZbaV0gPT0gJ1xhJykKKwkg ICAgICB7CisJCW1lbW1vdmUgKCZvdXRidWZbc3RhcnRfYXRdLCAmb3V0YnVm W2krMV0sIHJsZW4taS0xKTsKKwkJc3RhdGUgPSAwOworCQlybGVuID0gd2xl biA9IHN0YXJ0X2F0ICsgcmxlbiAtIGkgLSAxOworCQljb250aW51ZTsKKwkg ICAgICB9CisJICAgIGVsc2UgaWYgKHN0YXRlICE9IDQgfHwgb3V0YnVmW2ld ID09ICdcYScpCisJICAgICAgeworCQlzdGF0ZSA9IDA7CisJCWNvbnRpbnVl OworCSAgICAgIH0KKyNlbmRpZgorCisJICAvKiBBdm9pZCBkdXBsaWNhdGlu ZyBzbGF2ZSBvdXRwdXQgd2hpY2ggaXMgYWxyZWFkeSBzZW50IHRvCisJICAg KiB0b19tYXN0ZXJfY3lnICovCisJICBpZiAoZ2V0X3R0eXAgKCktPnN3aXRj aF90b19wY29uICE9IDIpCisJICAgIGNvbnRpbnVlOworCisJICBEV09SRCB3 cml0dGVuOworCSAgd2hpbGUgKHJsZW4+MCkKKwkgICAgeworCSAgICAgIGlm ICghV3JpdGVGaWxlICh0b19tYXN0ZXJfY3lnLCBwdHIsIHdsZW4sICZ3cml0 dGVuLCBOVUxMKSkKKwkJeworCQkgIHRlcm1pb3NfcHJpbnRmICgiV3JpdGVG aWxlIGZvciBmb3J3YXJkaW5nIGZhaWxlZCwgJUUiKTsKKwkJICBicmVhazsK KwkJfQorCSAgICAgIHB0ciArPSB3cml0dGVuOworCSAgICAgIHdsZW4gPSAo cmxlbiAtPSB3cml0dGVuKTsKKwkgICAgfQorCSAgY29udGludWU7CisJfQog ICAgICAgd2hpbGUgKHJsZW4+MCkKIAl7Ci0JICBpZiAoIXByb2Nlc3Nfb3Bv c3Rfb3V0cHV0ICh0b19tYXN0ZXJfY3lnLCBvdXRidWYsIHdsZW4sIGZhbHNl KSkKKwkgIGlmICghcHJvY2Vzc19vcG9zdF9vdXRwdXQgKHRvX21hc3Rlcl9j eWcsIHB0ciwgd2xlbiwgZmFsc2UpKQogCSAgICB7CiAJICAgICAgdGVybWlv c19wcmludGYgKCJXcml0ZUZpbGUgZm9yIGZvcndhcmRpbmcgZmFpbGVkLCAl RSIpOwogCSAgICAgIGJyZWFrOwogCSAgICB9Ci0JICBybGVuIC09IHdsZW47 CisJICBwdHIgKz0gd2xlbjsKKwkgIHdsZW4gPSAocmxlbiAtPSB3bGVuKTsK IAl9CiAgICAgfQogICByZXR1cm4gMDsKQEAgLTE2ODcsNiArMTkwMiwyMiBA QCBwdHlfbWFzdGVyX2Z3ZF90aHJlYWQgKFZPSUQgKmFyZykKICAgcmV0dXJu ICgoZmhhbmRsZXJfcHR5X21hc3RlciAqKSBhcmcpLT5wdHlfbWFzdGVyX2Z3 ZF90aHJlYWQgKCk7CiB9CiAKK3N0YXRpYyBib29sCitpc19ydW5uaW5nX2Fz X3NlcnZpY2UgKHZvaWQpCit7CisgIERXT1JEIGR3U2l6ZSA9IDA7CisgIFBU T0tFTl9HUk9VUFMgcEdyb3VwSW5mbzsKKyAgdG1wX3BhdGhidWYgdHA7Cisg IGJvb2wgcmV0ID0gZmFsc2U7CisgIHBHcm91cEluZm8gPSAoUFRPS0VOX0dS T1VQUykgdHAud19nZXQgKCk7CisgIE50UXVlcnlJbmZvcm1hdGlvblRva2Vu IChoUHJvY1Rva2VuLCBUb2tlbkdyb3VwcywgcEdyb3VwSW5mbywKKwkJCQkJ MiAqIE5UX01BWF9QQVRILCAmZHdTaXplKTsKKyAgZm9yIChEV09SRCBpPTA7 IGk8cEdyb3VwSW5mby0+R3JvdXBDb3VudCAmJiAhcmV0OyBpKyspCisgICAg aWYgKHdlbGxfa25vd25fc2VydmljZV9zaWQgPT0gcEdyb3VwSW5mby0+R3Jv dXBzW2ldLlNpZCkKKyAgICAgIHJldCA9IHRydWU7CisgIHJldHVybiByZXQ7 Cit9CisKIGJvb2wKIGZoYW5kbGVyX3B0eV9tYXN0ZXI6OnNldHVwICgpCiB7 CkBAIC0xNjk1LDEwICsxOTI2LDE0IEBAIGZoYW5kbGVyX3B0eV9tYXN0ZXI6 OnNldHVwICgpCiAgIFNFQ1VSSVRZX0FUVFJJQlVURVMgc2EgPSB7IHNpemVv ZiAoU0VDVVJJVFlfQVRUUklCVVRFUyksIE5VTEwsIFRSVUUgfTsKIAogICAv KiBGaW5kIGFuIHVuYWxsb2NhdGVkIHB0eSB0byB1c2UuICovCi0gIGludCB1 bml0ID0gY3lnd2luX3NoYXJlZC0+dHR5LmFsbG9jYXRlIChmcm9tX21hc3Rl ciwgZ2V0X291dHB1dF9oYW5kbGUgKCkpOworICBpbnQgdW5pdCA9IGN5Z3dp bl9zaGFyZWQtPnR0eS5hbGxvY2F0ZSAoZnJvbV9tYXN0ZXJfY3lnLCBnZXRf b3V0cHV0X2hhbmRsZSAoKSk7CiAgIGlmICh1bml0IDwgMCkKICAgICByZXR1 cm4gZmFsc2U7CiAKKyAgLyogZnJvbV9tYXN0ZXIgc2hvdWxkIGJlIHVzZWQg Zm9yIHBzZXVkbyBjb25zb2xlLiAqLworICAvKiBGSVhNRTogQ3VycmVudGx5 IGp1c3QgY29weSBmcm9tX21hc3Rlcl9jeWcgKi8KKyAgZnJvbV9tYXN0ZXIg PSBmcm9tX21hc3Rlcl9jeWc7CisKICAgUHJvdGVjdEhhbmRsZTEgKGdldF9v dXRwdXRfaGFuZGxlICgpLCB0b19wdHkpOwogCiAgIHR0eSYgdCA9ICpjeWd3 aW5fc2hhcmVkLT50dHlbdW5pdF07CkBAIC0xNzE1LDcgKzE5NTAsNyBAQCBm aGFuZGxlcl9wdHlfbWFzdGVyOjpzZXR1cCAoKQogCiAgIGNoYXIgcGlwZW5h bWVbc2l6ZW9mKCJwdHlOTk5OLXRvLW1hc3Rlci1jeWciKV07CiAgIF9fc21h bGxfc3ByaW50ZiAocGlwZW5hbWUsICJwdHklZC10by1tYXN0ZXIiLCB1bml0 KTsKLSAgcmVzID0gZmhhbmRsZXJfcGlwZTo6Y3JlYXRlICgmc2VjX25vbmUs ICZnZXRfaGFuZGxlICgpLCAmdG9fbWFzdGVyLAorICByZXMgPSBmaGFuZGxl cl9waXBlOjpjcmVhdGUgKCZzZWNfbm9uZSwgJmZyb21fc2xhdmUsICZ0b19t YXN0ZXIsCiAJCQkgICAgICAgZmhhbmRsZXJfcHR5X2NvbW1vbjo6cGlwZXNp emUsIHBpcGVuYW1lLCAwKTsKICAgaWYgKHJlcykKICAgICB7CkBAIC0xNzI0 LDcgKzE5NTksNyBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpzZXR1cCAoKQog ICAgIH0KIAogICBfX3NtYWxsX3NwcmludGYgKHBpcGVuYW1lLCAicHR5JWQt dG8tbWFzdGVyLWN5ZyIsIHVuaXQpOwotICByZXMgPSBmaGFuZGxlcl9waXBl OjpjcmVhdGUgKCZzZWNfbm9uZSwgJmdldF9oYW5kbGVfY3lnICgpLCAmdG9f bWFzdGVyX2N5ZywKKyAgcmVzID0gZmhhbmRsZXJfcGlwZTo6Y3JlYXRlICgm c2VjX25vbmUsICZnZXRfaGFuZGxlICgpLCAmdG9fbWFzdGVyX2N5ZywKIAkJ CSAgICAgICBmaGFuZGxlcl9wdHlfY29tbW9uOjpwaXBlc2l6ZSwgcGlwZW5h bWUsIDApOwogICBpZiAocmVzKQogICAgIHsKQEAgLTE3MzIsNyArMTk2Nyw3 IEBAIGZoYW5kbGVyX3B0eV9tYXN0ZXI6OnNldHVwICgpCiAgICAgICBnb3Rv IGVycjsKICAgICB9CiAKLSAgUHJvdGVjdEhhbmRsZTEgKGdldF9oYW5kbGUg KCksIGZyb21fcHR5KTsKKyAgUHJvdGVjdEhhbmRsZTEgKGZyb21fc2xhdmUs IGZyb21fcHR5KTsKIAogICBfX3NtYWxsX3NwcmludGYgKHBpcGVuYW1lLCAi cHR5JWQtZWNob2xvb3AiLCB1bml0KTsKICAgcmVzID0gZmhhbmRsZXJfcGlw ZTo6Y3JlYXRlICgmc2VjX25vbmUsICZlY2hvX3IsICZlY2hvX3csCkBAIC0x Nzk3LDcgKzIwMzIsMTAxIEBAIGZoYW5kbGVyX3B0eV9tYXN0ZXI6OnNldHVw ICgpCiAgICAgICBnb3RvIGVycjsKICAgICB9CiAKKyAgeyAvKiBQc2V1ZG8g Q29uc29sZSBTdXBwb3J0ICovCisgICAgSE1PRFVMRSBoTW9kdWxlID0gR2V0 TW9kdWxlSGFuZGxlICgia2VybmVsMzIuZGxsIik7CisgICAgRkFSUFJPQyBm dW5jID0gR2V0UHJvY0FkZHJlc3MgKGhNb2R1bGUsICJDcmVhdGVQc2V1ZG9D b25zb2xlIik7CisgICAgSFJFU1VMVCAoV0lOQVBJICpDcmVhdGVQc2V1ZG9D b25zb2xlKQorICAgICAgKENPT1JELCBIQU5ETEUsIEhBTkRMRSwgRFdPUkQs IEhQQ09OICopID0gTlVMTDsKKyAgICBpZiAoZnVuYykKKyAgICAgIHsKKwlD cmVhdGVQc2V1ZG9Db25zb2xlID0KKwkgIChIUkVTVUxUIChXSU5BUEkgKikg KENPT1JELCBIQU5ETEUsIEhBTkRMRSwgRFdPUkQsIEhQQ09OICopKSBmdW5j OworCUNPT1JEIHNpemUgPSB7ODAsIDI1fTsKKwlDcmVhdGVQaXBlICgmZnJv bV9tYXN0ZXIsICZ0b19zbGF2ZSwgJnNlY19ub25lLCAwKTsKKwlIUkVTVUxU IHJlcyA9IENyZWF0ZVBzZXVkb0NvbnNvbGUgKHNpemUsIGZyb21fbWFzdGVy LCB0b19tYXN0ZXIsCisJCQkJCSAgIDAsICZ0LmhQc2V1ZG9Db25zb2xlKTsK KwlpZiAocmVzICE9IFNfT0spCisJICB7CisJICAgIHN5c3RlbV9wcmludGYg KCJDcmVhdGVQc2V1ZG9Db25zb2xlKCkgZmFpbGVkLiAlMDh4XG4iLAorCQkJ ICBHZXRMYXN0RXJyb3IoKSk7CisJICAgIHQuaFBzZXVkb0NvbnNvbGUgPSBO VUxMOworCSAgfQorCWVsc2UKKwkgIHsKKyNpZiAwCisJICAgIGNoYXIgdHR5 WzMyXTsKKwkgICAgZm9yIChpbnQgZmQ9MDsgZmQ8MzsgZmQrKykKKwkgICAg ICB7CisJCXR0eW5hbWVfciAoZmQsIHR0eSwgc2l6ZW9mKHR0eSkpOworCQlp ZiAoc3RybmNtcCAodHR5LCAiL2Rldi9jb25zIiwgOSkgPT0gMCkKKwkJICB0 LmF0dGFjaF9wY29uX2luX3NwYXduID0gdHJ1ZTsKKwkgICAgICB9CisjZWxz ZQorCSAgICBpZiAoIWlzX3J1bm5pbmdfYXNfc2VydmljZSAoKSkKKwkgICAg ICB0LmF0dGFjaF9wY29uX2luX3NwYXduID0gdHJ1ZTsKKyNlbmRpZgorCSAg ICBTSVpFX1QgYnl0ZXNSZXF1aXJlZDsKKwkgICAgSW5pdGlhbGl6ZVByb2NU aHJlYWRBdHRyaWJ1dGVMaXN0IChOVUxMLCAxLCAwLCAmYnl0ZXNSZXF1aXJl ZCk7CisJICAgIFNUQVJUVVBJTkZPRVhXIHNpX2hlbHBlcjsKKwkgICAgWmVy b01lbW9yeSAoJnNpX2hlbHBlciwgc2l6ZW9mIChzaV9oZWxwZXIpKTsKKwkg ICAgc2lfaGVscGVyLlN0YXJ0dXBJbmZvLmNiID0gc2l6ZW9mIChTVEFSVFVQ SU5GT0VYVyk7CisJICAgIHNpX2hlbHBlci5scEF0dHJpYnV0ZUxpc3QgPSAo UFBST0NfVEhSRUFEX0FUVFJJQlVURV9MSVNUKQorCSAgICAgIEhlYXBBbGxv YyAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIGJ5dGVzUmVxdWlyZWQpOworCSAg ICBJbml0aWFsaXplUHJvY1RocmVhZEF0dHJpYnV0ZUxpc3QgKHNpX2hlbHBl ci5scEF0dHJpYnV0ZUxpc3QsCisJCQkJCSAgICAgICAxLCAwLCAmYnl0ZXNS ZXF1aXJlZCk7CisJICAgIFVwZGF0ZVByb2NUaHJlYWRBdHRyaWJ1dGUgKHNp X2hlbHBlci5scEF0dHJpYnV0ZUxpc3QsCisJCQkJICAgICAgIDAsCisJCQkJ ICAgICAgIFBST0NfVEhSRUFEX0FUVFJJQlVURV9QU0VVRE9DT05TT0xFLAor CQkJCSAgICAgICB0LmhQc2V1ZG9Db25zb2xlLAorCQkJCSAgICAgICBzaXpl b2YgKHQuaFBzZXVkb0NvbnNvbGUpLAorCQkJCSAgICAgICBOVUxMLCBOVUxM KTsKKwkgICAgSEFORExFIGhlbGxvID0gQ3JlYXRlRXZlbnQgKCZzZWNfbm9u ZSwgdHJ1ZSwgZmFsc2UsIE5VTEwpOworCSAgICBIQU5ETEUgZ29vZGJ5ZSA9 IENyZWF0ZUV2ZW50ICgmc2VjX25vbmUsIHRydWUsIGZhbHNlLCBOVUxMKTsK KwkgICAgSEFORExFIGhyLCBodzsKKwkgICAgQ3JlYXRlUGlwZSAoJmhyLCAm aHcsICZzZWNfbm9uZSwgMCk7CisJICAgIFdDSEFSIGNtZFsyNTZdOworCSAg ICBwYXRoX2NvbnYgaGVscGVyICgiL2Jpbi9jeWd3aW4tY29uc29sZS1oZWxw ZXIuZXhlIik7CisJICAgIHNpemVfdCBsZW4gPSBoZWxwZXIuZ2V0X3dpZGVf d2luMzJfcGF0aF9sZW4gKCk7CisJICAgIGhlbHBlci5nZXRfd2lkZV93aW4z Ml9wYXRoIChjbWQpOworCSAgICBfX3NtYWxsX3N3cHJpbnRmIChjbWQgKyBs ZW4sIEwiICVwICVwICVwIiwgaGVsbG8sIGdvb2RieWUsIGh3KTsKKwkgICAg c2lfaGVscGVyLlN0YXJ0dXBJbmZvLmR3RmxhZ3MgPSBTVEFSVEZfVVNFU1RE SEFORExFUzsKKwkgICAgc2lfaGVscGVyLlN0YXJ0dXBJbmZvLmhTdGRJbnB1 dCA9IE5VTEw7CisJICAgIHNpX2hlbHBlci5TdGFydHVwSW5mby5oU3RkT3V0 cHV0ID0gTlVMTDsKKwkgICAgc2lfaGVscGVyLlN0YXJ0dXBJbmZvLmhTdGRF cnJvciA9IE5VTEw7CisJICAgIFBST0NFU1NfSU5GT1JNQVRJT04gcGlfaGVs cGVyOworCSAgICBDcmVhdGVQcm9jZXNzVyAoTlVMTCwgY21kLCAmc2VjX25v bmUsICZzZWNfbm9uZSwKKwkJCSAgICBUUlVFLCBFWFRFTkRFRF9TVEFSVFVQ SU5GT19QUkVTRU5ULAorCQkJICAgIE5VTEwsIE5VTEwsICZzaV9oZWxwZXIu U3RhcnR1cEluZm8sICZwaV9oZWxwZXIpOworCSAgICBXYWl0Rm9yU2luZ2xl T2JqZWN0IChoZWxsbywgSU5GSU5JVEUpOworCSAgICBEV09SRCByTGVuOwor CSAgICBjaGFyIGJ1Zls2NF07CisJICAgIFJlYWRGaWxlIChociwgYnVmLCBz aXplb2YgKGJ1ZiksICZyTGVuLCBOVUxMKTsKKwkgICAgYnVmW3JMZW5dID0g J1wwJzsKKwkgICAgSEFORExFIGhwQ29uSW4sIGhwQ29uT3V0OworCSAgICBz c2NhbmYgKGJ1ZiwgIlN0ZEhhbmRsZXM9JXAsJXAiLCAmaHBDb25JbiwgJmhw Q29uT3V0KTsKKwkgICAgRHVwbGljYXRlSGFuZGxlIChwaV9oZWxwZXIuaFBy b2Nlc3MsIGhwQ29uSW4sCisJCQkgICAgIEdldEN1cnJlbnRQcm9jZXNzICgp LCAmaHBDb25JbiwgMCwKKwkJCSAgICAgVFJVRSwgRFVQTElDQVRFX1NBTUVf QUNDRVNTKTsKKwkgICAgRHVwbGljYXRlSGFuZGxlIChwaV9oZWxwZXIuaFBy b2Nlc3MsIGhwQ29uT3V0LAorCQkJICAgICBHZXRDdXJyZW50UHJvY2VzcyAo KSwgJmhwQ29uT3V0LCAwLAorCQkJICAgICBUUlVFLCBEVVBMSUNBVEVfU0FN RV9BQ0NFU1MpOworCSAgICBDbG9zZUhhbmRsZSAoaHIpOworCSAgICBDbG9z ZUhhbmRsZSAoaHcpOworCSAgICBEZWxldGVQcm9jVGhyZWFkQXR0cmlidXRl TGlzdCAoc2lfaGVscGVyLmxwQXR0cmlidXRlTGlzdCk7CisJICAgIEhlYXBG cmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgc2lfaGVscGVyLmxwQXR0cmli dXRlTGlzdCk7CisJICAgIHQuaEhlbHBlckdvb2RieWUgPSBnb29kYnllOwor CSAgICB0LmhIZWxwZXJQcm9jZXNzID0gcGlfaGVscGVyLmhQcm9jZXNzOwor CSAgICB0LkhlbHBlclByb2Nlc3NJZCA9IHBpX2hlbHBlci5kd1Byb2Nlc3NJ ZDsKKwkgICAgQ2xvc2VIYW5kbGUgKGZyb21fbWFzdGVyKTsKKwkgICAgQ2xv c2VIYW5kbGUgKHRvX21hc3Rlcik7CisJICAgIGZyb21fbWFzdGVyID0gaHBD b25JbjsKKwkgICAgdG9fbWFzdGVyID0gaHBDb25PdXQ7CisJICB9CisgICAg ICB9CisgIH0KKwogICB0LnNldF9mcm9tX21hc3RlciAoZnJvbV9tYXN0ZXIp OworICB0LnNldF9mcm9tX21hc3Rlcl9jeWcgKGZyb21fbWFzdGVyX2N5Zyk7 CiAgIHQuc2V0X3RvX21hc3RlciAodG9fbWFzdGVyKTsKICAgdC5zZXRfdG9f bWFzdGVyX2N5ZyAodG9fbWFzdGVyX2N5Zyk7CiAgIHQud2luc2l6ZS53c19j b2wgPSA4MDsKQEAgLTE4MDcsMTkgKzIxMzYsMjAgQEAgZmhhbmRsZXJfcHR5 X21hc3Rlcjo6c2V0dXAgKCkKICAgZGV2ICgpLnBhcnNlIChERVZfUFRZTV9N QUpPUiwgdW5pdCk7CiAKICAgdGVybWlvc19wcmludGYgKCJ0aGlzICVwLCBw dHklZCBvcGVuZWQgLSBmcm9tX3B0eSA8JXAsJXA+LCB0b19wdHkgJXAiLAot CXRoaXMsIHVuaXQsIGdldF9oYW5kbGUgKCksIGdldF9oYW5kbGVfY3lnICgp LAorCXRoaXMsIHVuaXQsIGZyb21fc2xhdmUsIGdldF9oYW5kbGUgKCksCiAJ Z2V0X291dHB1dF9oYW5kbGUgKCkpOwogICByZXR1cm4gdHJ1ZTsKIAogZXJy OgogICBfX3NldGVycm5vICgpOworICBjbG9zZV9tYXliZSAoZnJvbV9zbGF2 ZSk7CiAgIGNsb3NlX21heWJlIChnZXRfaGFuZGxlICgpKTsKLSAgY2xvc2Vf bWF5YmUgKGdldF9oYW5kbGVfY3lnICgpKTsKICAgY2xvc2VfbWF5YmUgKGdl dF9vdXRwdXRfaGFuZGxlICgpKTsKICAgY2xvc2VfbWF5YmUgKGlucHV0X2F2 YWlsYWJsZV9ldmVudCk7CiAgIGNsb3NlX21heWJlIChvdXRwdXRfbXV0ZXgp OwogICBjbG9zZV9tYXliZSAoaW5wdXRfbXV0ZXgpOwogICBjbG9zZV9tYXli ZSAoZnJvbV9tYXN0ZXIpOworICBjbG9zZV9tYXliZSAoZnJvbV9tYXN0ZXJf Y3lnKTsKICAgY2xvc2VfbWF5YmUgKHRvX21hc3Rlcik7CiAgIGNsb3NlX21h eWJlICh0b19tYXN0ZXJfY3lnKTsKICAgY2xvc2VfbWF5YmUgKGVjaG9fcik7 CkBAIC0xODQwLDE0ICsyMTcwLDIwIEBAIGZoYW5kbGVyX3B0eV9tYXN0ZXI6 OmZpeHVwX2FmdGVyX2ZvcmsgKEhBTkRMRSBwYXJlbnQpCiAgICAgICBpZiAo bXlzZWxmLT5waWQgPT0gdC5tYXN0ZXJfcGlkKQogCXsKIAkgIHQuc2V0X2Zy b21fbWFzdGVyIChhcmNoLT5mcm9tX21hc3Rlcik7CisJICB0LnNldF9mcm9t X21hc3Rlcl9jeWcgKGFyY2gtPmZyb21fbWFzdGVyX2N5Zyk7CiAJICB0LnNl dF90b19tYXN0ZXIgKGFyY2gtPnRvX21hc3Rlcik7CiAJICB0LnNldF90b19t YXN0ZXJfY3lnIChhcmNoLT50b19tYXN0ZXJfY3lnKTsKIAl9CiAgICAgICBh cmNoLT5kd1Byb2Nlc3NJZCA9IHdwaWQ7CiAgICAgfQogICBmcm9tX21hc3Rl ciA9IGFyY2gtPmZyb21fbWFzdGVyOworICBmcm9tX21hc3Rlcl9jeWcgPSBh cmNoLT5mcm9tX21hc3Rlcl9jeWc7CiAgIHRvX21hc3RlciA9IGFyY2gtPnRv X21hc3RlcjsKICAgdG9fbWFzdGVyX2N5ZyA9IGFyY2gtPnRvX21hc3Rlcl9j eWc7CisjaWYgMAorICBmcm9tX3NsYXZlID0gYXJjaC0+ZnJvbV9zbGF2ZTsK KyAgdG9fc2xhdmUgPSBhcmNoLT50b19zbGF2ZTsKKyNlbmRpZgogICByZXBv cnRfdHR5X2NvdW50cyAodGhpcywgImluaGVyaXRlZCBtYXN0ZXIiLCAiIik7 CiB9CiAKQEAgLTE4NTcsNyArMjE5Myw4IEBAIGZoYW5kbGVyX3B0eV9tYXN0 ZXI6OmZpeHVwX2FmdGVyX2V4ZWMgKCkKICAgaWYgKCFjbG9zZV9vbl9leGVj ICgpKQogICAgIGZpeHVwX2FmdGVyX2ZvcmsgKHNwYXduX2luZm8tPnBhcmVu dCk7CiAgIGVsc2UKLSAgICBmcm9tX21hc3RlciA9IHRvX21hc3RlciA9IHRv X21hc3Rlcl9jeWcgPSBOVUxMOworICAgIGZyb21fbWFzdGVyID0gZnJvbV9t YXN0ZXJfY3lnID0gdG9fbWFzdGVyID0gdG9fbWFzdGVyX2N5ZyA9CisgICAg ICBmcm9tX3NsYXZlID0gdG9fc2xhdmUgPSBOVUxMOwogfQogCiBCT09MCmRp ZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL2ZvcmsuY2MgYi93aW5zdXAvY3ln d2luL2ZvcmsuY2MKaW5kZXggN2UxYzA4OTkwLi5jYjRkYTczMzAgMTAwNjQ0 Ci0tLSBhL3dpbnN1cC9jeWd3aW4vZm9yay5jYworKysgYi93aW5zdXAvY3ln d2luL2ZvcmsuY2MKQEAgLTEzNCw2ICsxMzQsMjYgQEAgY2hpbGRfaW5mbzo6 cHJlZm9yayAoYm9vbCBkZXRhY2hlZCkKIGludCBfX3N0ZGNhbGwKIGZyb2s6 OmNoaWxkICh2b2xhdGlsZSBjaGFyICogdm9sYXRpbGUgaGVyZSkKIHsKKyAg Y3lnaGVhcF9mZGVudW0gY2ZkIChmYWxzZSk7CisgIHdoaWxlIChjZmQubmV4 dCAoKSA+PSAwKQorICAgIGlmIChjZmQtPmdldF9tYWpvciAoKSA9PSBERVZf UFRZTV9NQUpPUikKKyAgICAgIHsKKwlmaGFuZGxlcl9iYXNlICpmaCA9IGNm ZDsKKwlpZiAoKChmaGFuZGxlcl9wdHlfbWFzdGVyICopIGZoKS0+Z2V0UHNl dWRvQ29uc29sZSAoKSkKKwkgIHsKKwkgICAgRFdPUkQgZHdIZWxwZXJQcm9j ZXNzSWQgPQorCSAgICAgICgoZmhhbmRsZXJfcHR5X21hc3RlciAqKSBmaCkt PmdldEhlbHBlclByb2Nlc3NJZCAoKTsKKwkgICAgZGVidWdfcHJpbnRmICgi Zm91bmQgYSBQVFkgbWFzdGVyICVkOiBoZWxwZXJfUElEPSVkIiwKKwkJCSAg Y2ZkLT5nZXRfbWlub3IgKCksIGR3SGVscGVyUHJvY2Vzc0lkKTsKKwkgICAg aWYgKCEoKGZoYW5kbGVyX3B0eV9tYXN0ZXIgKikgZmgpLT5hdHRhY2hfcGNv bl9pbl9zcGF3biAoKSkKKwkgICAgICB7CisJCUZyZWVDb25zb2xlICgpOwor CQlBdHRhY2hDb25zb2xlIChkd0hlbHBlclByb2Nlc3NJZCk7CisJCWJyZWFr OworCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKwogICBIQU5ETEUmIGhQYXJl bnQgPSBjaC5wYXJlbnQ7CiAKICAgc3luY193aXRoX3BhcmVudCAoImFmdGVy IGxvbmdqbXAiLCB0cnVlKTsKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4v c2VsZWN0LmNjIGIvd2luc3VwL2N5Z3dpbi9zZWxlY3QuY2MKaW5kZXggODUy NDJlYzA2Li4wNDI0OWViOTQgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4v c2VsZWN0LmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vc2VsZWN0LmNjCkBAIC02 NjcsNiArNjY3LDkgQEAgcGVla19waXBlIChzZWxlY3RfcmVjb3JkICpzLCBi b29sIGZyb21fc2VsZWN0KQogCSAgICBmaG0tPmZsdXNoX3RvX3NsYXZlICgp OwogCSAgfQogCSAgYnJlYWs7CisJY2FzZSBERVZfUFRZU19NQUpPUjoKKwkg ICgoZmhhbmRsZXJfcHR5X3NsYXZlICopIGZoKS0+cmVzZXRfc3dpdGNoX3Rv X3Bjb24gKCk7CisJICBicmVhazsKIAlkZWZhdWx0OgogCSAgaWYgKGZoLT5n ZXRfcmVhZGFoZWFkX3ZhbGlkICgpKQogCSAgICB7CmRpZmYgLS1naXQgYS93 aW5zdXAvY3lnd2luL3NwYXduLmNjIGIvd2luc3VwL2N5Z3dpbi9zcGF3bi5j YwppbmRleCA0ZTU0OWY3ZDQuLmNiNGJkY2EwNiAxMDA2NDQKLS0tIGEvd2lu c3VwL2N5Z3dpbi9zcGF3bi5jYworKysgYi93aW5zdXAvY3lnd2luL3NwYXdu LmNjCkBAIC0yODgsNiArMjg4LDMxIEBAIGNoaWxkX2luZm9fc3Bhd246Ondv cmtlciAoY29uc3QgY2hhciAqcHJvZ19hcmcsIGNvbnN0IGNoYXIgKmNvbnN0 ICphcmd2LAogICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAorICBEV09SRCBw aWRSZXN0b3JlID0KKyAgICBmaGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29s ZV9wcm9jZXNzX2lkIChHZXRDdXJyZW50UHJvY2Vzc0lkICgpLCBmYWxzZSk7 CisgIGN5Z2hlYXBfZmRlbnVtIGNmZCAoZmFsc2UpOworICBib29sIGF0dGFj aF90b19wY29uID0gZmFsc2U7CisgIGludCBmZDsKKyAgd2hpbGUgKChmZCA9 IGNmZC5uZXh0ICgpKSA+PSAwICYmIGZkIDwgMykKKyAgICBpZiAoY2ZkLT5n ZXRfbWFqb3IgKCkgPT0gREVWX1BUWVNfTUFKT1IpCisgICAgICB7CisJZmhh bmRsZXJfYmFzZSAqZmggPSBjZmQ7CisJaWYgKCgoZmhhbmRsZXJfcHR5X3Ns YXZlICopIGZoKS0+Z2V0UHNldWRvQ29uc29sZSAoKSkKKwkgIHsKKwkgICAg RFdPUkQgZHdIZWxwZXJQcm9jZXNzSWQgPQorCSAgICAgICgoZmhhbmRsZXJf cHR5X3NsYXZlICopIGZoKS0+Z2V0SGVscGVyUHJvY2Vzc0lkICgpOworCSAg ICBkZWJ1Z19wcmludGYgKCJmb3VuZCBhIFBUWSBzbGF2ZSAlZDogaGVscGVy X1BJRD0lZCIsCisJCQkgIGNmZC0+Z2V0X21pbm9yICgpLCBkd0hlbHBlclBy b2Nlc3NJZCk7CisJICAgIGlmICgoKGZoYW5kbGVyX3B0eV9zbGF2ZSAqKSBm aCktPmF0dGFjaF9wY29uX2luX3NwYXduICgpKQorCSAgICAgIHsKKwkJRnJl ZUNvbnNvbGUgKCk7CisJCUF0dGFjaENvbnNvbGUgKGR3SGVscGVyUHJvY2Vz c0lkKTsKKwkJYXR0YWNoX3RvX3Bjb24gPSB0cnVlOworCQlicmVhazsKKwkg ICAgICB9CisJICB9CisgICAgICB9CisKICAgYXYgbmV3YXJndjsKICAgbGlu ZWJ1ZiBjbWQ7CiAgIFBXQ0hBUiBlbnZibG9jayA9IE5VTEw7CkBAIC04Njgs NiArODkzLDEzIEBAIGNoaWxkX2luZm9fc3Bhd246OndvcmtlciAoY29uc3Qg Y2hhciAqcHJvZ19hcmcsIGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2LAogICB0 aGlzLT5jbGVhbnVwICgpOwogICBpZiAoZW52YmxvY2spCiAgICAgZnJlZSAo ZW52YmxvY2spOworCisgIGlmIChhdHRhY2hfdG9fcGNvbiAmJiBwaWRSZXN0 b3JlKQorICAgIHsKKyAgICAgIEZyZWVDb25zb2xlICgpOworICAgICAgQXR0 YWNoQ29uc29sZSAocGlkUmVzdG9yZSk7CisgICAgfQorCiAgIHJldHVybiAo aW50KSByZXM7CiB9CiAKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vdHR5 LmNjIGIvd2luc3VwL2N5Z3dpbi90dHkuY2MKaW5kZXggYWQ0NmNiMzEyLi45 MmQ2NDZmZjUgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vdHR5LmNjCisr KyBiL3dpbnN1cC9jeWd3aW4vdHR5LmNjCkBAIC0yMzQsNyArMjM0LDEwIEBA IHR0eTo6aW5pdCAoKQogICB3YXNfb3BlbmVkID0gZmFsc2U7CiAgIG1hc3Rl cl9waWQgPSAwOwogICBpc19jb25zb2xlID0gZmFsc2U7CisgIGF0dGFjaF9w Y29uX2luX3NwYXduID0gZmFsc2U7CisgIGhQc2V1ZG9Db25zb2xlID0gTlVM TDsKICAgY29sdW1uID0gMDsKKyAgc3dpdGNoX3RvX3Bjb24gPSAwOwogfQog CiBIQU5ETEUKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vdHR5LmggYi93 aW5zdXAvY3lnd2luL3R0eS5oCmluZGV4IDlhZWU0M2I5Yy4uN2M2YmExNWQ3 IDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL3R0eS5oCisrKyBiL3dpbnN1 cC9jeWd3aW4vdHR5LmgKQEAgLTI4LDYgKzI4LDggQEAgZGV0YWlscy4gKi8K ICNkZWZpbmUgTUlOX0NUUkxfQ19TTE9QIDUwCiAjZW5kaWYKIAordHlwZWRl ZiB2b2lkICpIUENPTjsKKwogI2luY2x1ZGUgPGRldmljZXMuaD4KIGNsYXNz IHR0eV9taW4KIHsKQEAgLTg4LDE0ICs5MCwyMyBAQCBwdWJsaWM6CiAKIHBy aXZhdGU6CiAgIEhBTkRMRSBfZnJvbV9tYXN0ZXI7CisgIEhBTkRMRSBfZnJv bV9tYXN0ZXJfY3lnOwogICBIQU5ETEUgX3RvX21hc3RlcjsKICAgSEFORExF IF90b19tYXN0ZXJfY3lnOworICBIUENPTiBoUHNldWRvQ29uc29sZTsKKyAg SEFORExFIGhIZWxwZXJQcm9jZXNzOworICBEV09SRCBIZWxwZXJQcm9jZXNz SWQ7CisgIEhBTkRMRSBoSGVscGVyR29vZGJ5ZTsKKyAgYm9vbCBhdHRhY2hf cGNvbl9pbl9zcGF3bjsKKyAgaW50IHN3aXRjaF90b19wY29uOwogCiBwdWJs aWM6Ci0gIEhBTkRMRSBmcm9tX21hc3RlcigpIGNvbnN0IHsgcmV0dXJuIF9m cm9tX21hc3RlcjsgfQotICBIQU5ETEUgdG9fbWFzdGVyKCkgY29uc3QgeyBy ZXR1cm4gX3RvX21hc3RlcjsgfQotICBIQU5ETEUgdG9fbWFzdGVyX2N5Zygp IGNvbnN0IHsgcmV0dXJuIF90b19tYXN0ZXJfY3lnOyB9CisgIEhBTkRMRSBm cm9tX21hc3RlciAoKSBjb25zdCB7IHJldHVybiBfZnJvbV9tYXN0ZXI7IH0K KyAgSEFORExFIGZyb21fbWFzdGVyX2N5ZyAoKSBjb25zdCB7IHJldHVybiBf ZnJvbV9tYXN0ZXJfY3lnOyB9CisgIEhBTkRMRSB0b19tYXN0ZXIgKCkgY29u c3QgeyByZXR1cm4gX3RvX21hc3RlcjsgfQorICBIQU5ETEUgdG9fbWFzdGVy X2N5ZyAoKSBjb25zdCB7IHJldHVybiBfdG9fbWFzdGVyX2N5ZzsgfQogICB2 b2lkIHNldF9mcm9tX21hc3RlciAoSEFORExFIGgpIHsgX2Zyb21fbWFzdGVy ID0gaDsgfQorICB2b2lkIHNldF9mcm9tX21hc3Rlcl9jeWcgKEhBTkRMRSBo KSB7IF9mcm9tX21hc3Rlcl9jeWcgPSBoOyB9CiAgIHZvaWQgc2V0X3RvX21h c3RlciAoSEFORExFIGgpIHsgX3RvX21hc3RlciA9IGg7IH0KICAgdm9pZCBz ZXRfdG9fbWFzdGVyX2N5ZyAoSEFORExFIGgpIHsgX3RvX21hc3Rlcl9jeWcg PSBoOyB9CiAKQEAgLTExNyw3ICsxMjgsOSBAQCBwdWJsaWM6CiAgIHZvaWQg c2V0X21hc3Rlcl9jdGxfY2xvc2VkICgpIHttYXN0ZXJfcGlkID0gLTE7fQog ICBzdGF0aWMgdm9pZCBfX3N0ZGNhbGwgY3JlYXRlX21hc3RlciAoaW50KTsK ICAgc3RhdGljIHZvaWQgX19zdGRjYWxsIGluaXRfc2Vzc2lvbiAoKTsKKyAg ZnJpZW5kIGNsYXNzIGZoYW5kbGVyX3B0eV9jb21tb247CiAgIGZyaWVuZCBj bGFzcyBmaGFuZGxlcl9wdHlfbWFzdGVyOworICBmcmllbmQgY2xhc3MgZmhh bmRsZXJfcHR5X3NsYXZlOwogfTsKIAogY2xhc3MgdHR5X2xpc3QKZGlmZiAt LWdpdCBhL3dpbnN1cC91dGlscy9jeWd3aW4tY29uc29sZS1oZWxwZXIuY2Mg Yi93aW5zdXAvdXRpbHMvY3lnd2luLWNvbnNvbGUtaGVscGVyLmNjCmluZGV4 IDhmNjJlZDdlNi4uYmVmMTQzZjk2IDEwMDY0NAotLS0gYS93aW5zdXAvdXRp bHMvY3lnd2luLWNvbnNvbGUtaGVscGVyLmNjCisrKyBiL3dpbnN1cC91dGls cy9jeWd3aW4tY29uc29sZS1oZWxwZXIuY2MKQEAgLTEsMTIgKzEsMjQgQEAK ICNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KIGlu dAogbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogICBjaGFyICpl bmQ7Ci0gIGlmIChhcmdjICE9IDMpCisgIGlmIChhcmdjIDwgMykKICAgICBl eGl0ICgxKTsKICAgSEFORExFIGggPSAoSEFORExFKSBzdHJ0b3VsIChhcmd2 WzFdLCAmZW5kLCAwKTsKICAgU2V0RXZlbnQgKGgpOworICBpZiAoYXJnYyA9 PSA0KSAvKiBQc2V1ZG8gY29uc29sZSBoZWxwZXIgbW9kZSBmb3IgUFRZICov CisgICAgeworICAgICAgSEFORExFIGhQaXBlID0gKEhBTkRMRSkgc3RydG91 bCAoYXJndlszXSwgJmVuZCwgMCk7CisgICAgICBjaGFyIGJ1Zls2NF07Cisg ICAgICBzcHJpbnRmIChidWYsICJTdGRIYW5kbGVzPSVwLCVwXG4iLAorCSAg ICAgICBHZXRTdGRIYW5kbGUgKFNURF9JTlBVVF9IQU5ETEUpLAorCSAgICAg ICBHZXRTdGRIYW5kbGUgKFNURF9PVVRQVVRfSEFORExFKSk7CisgICAgICBE V09SRCBkd0xlbjsKKyAgICAgIFdyaXRlRmlsZSAoaFBpcGUsIGJ1Ziwgc3Ry bGVuIChidWYpLCAmZHdMZW4sIE5VTEwpOworICAgICAgQ2xvc2VIYW5kbGUg KGhQaXBlKTsKKyAgICB9CiAgIGggPSAoSEFORExFKSBzdHJ0b3VsIChhcmd2 WzJdLCAmZW5kLCAwKTsKICAgV2FpdEZvclNpbmdsZU9iamVjdCAoaCwgSU5G SU5JVEUpOwogICBleGl0ICgwKTsKLS0gCjIuMTcuMAoK --Multipart=_Sat__30_Mar_2019_22_08_04_+0900_uR3j8n86EHhK01UI--