From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from conssluserg-06.nifty.com (conssluserg-06.nifty.com [210.131.2.91]) by sourceware.org (Postfix) with ESMTPS id 3CC7E3858D38 for ; Thu, 23 Jul 2020 00:34:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 3CC7E3858D38 Received: from Express5800-S70 (v038192.dynamic.ppp.asahi-net.or.jp [124.155.38.192]) (authenticated) by conssluserg-06.nifty.com with ESMTP id 06N0XOmP010406 for ; Thu, 23 Jul 2020 09:33:24 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-06.nifty.com 06N0XOmP010406 X-Nifty-SrcIP: [124.155.38.192] Date: Thu, 23 Jul 2020 09:33:28 +0900 From: Takashi Yano To: cygwin-developers@cygwin.com Subject: Re: New implementation of pseudo console support (experimental) Message-Id: <20200723093328.709654ea6a539cb9b3251ab2@nifty.ne.jp> In-Reply-To: <20200722174541.c8113635236fd217cb9ebb77@nifty.ne.jp> References: <20200514183420.c246647a6d9e396d42c6b47e@nifty.ne.jp> <20200516092956.74369d694d611b1dcd095607@nifty.ne.jp> <20200516164735.2a2ef183788b151e9185ef41@nifty.ne.jp> <20200519224018.746f6324badd8a5762df42b1@nifty.ne.jp> <20200525195332.cf60ab2f38d167a76513740e@nifty.ne.jp> <20200526100955.30b1a2baea517e0565f30db6@nifty.ne.jp> <20200529004024.0c2ac3c68b588bda987e0837@nifty.ne.jp> <20200701204751.27609a8f5701010468521a87@nifty.ne.jp> <20200717111912.GG3784@calimero.vinschen.de> <20200718143024.45920213c7aa81912939d944@nifty.ne.jp> <20200720080613.GE16360@calimero.vinschen.de> <20200722031751.e02bf24a7519b43d80e5db71@nifty.ne.jp> <20200722174541.c8113635236fd217cb9ebb77@nifty.ne.jp> X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.30; i686-pc-mingw32) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Thu__23_Jul_2020_09_33_28_+0900_eeIRlOgmp.=e6Esh" X-Spam-Status: No, score=-1.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=no autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: cygwin-developers@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Cygwin core component developers mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Jul 2020 00:34:09 -0000 This is a multi-part message in MIME format. --Multipart=_Thu__23_Jul_2020_09_33_28_+0900_eeIRlOgmp.=e6Esh Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Wed, 22 Jul 2020 17:45:41 +0900 Takashi Yano via Cygwin-developers wrote: > On Wed, 22 Jul 2020 03:17:51 +0900 > Takashi Yano via Cygwin-developers wrote: > > Hi Corinna, > > > > On Mon, 20 Jul 2020 10:06:13 +0200 > > Corinna Vinschen wrote: > > > On Jul 18 14:30, Takashi Yano via Cygwin-developers wrote: > > > > Hi Corinna, > > > > > > > > On Fri, 17 Jul 2020 13:19:12 +0200 > > > > Corinna Vinschen wrote: > > > > > Hi Takashi, > > > > > > > > > > On Jul 1 20:47, Takashi Yano via Cygwin-developers wrote: > > > > > > [...] > > > > > > Revise the patch to fit the current git head. > > > > > > > > > > are you satisfied with the code? If you want to merge it, > > > > > I'd bump Cygwin to 3.2. > > > > > > > > Since this new implementation has both advantages and disadvantages, > > > > there might be some options. > > > > > > > > 1) Default to new implementation and leave the current one as an > > > > alternative. Switch them using the environment CYGWIN. > > > > 2) Default to current implementation and add the new one as an > > > > alternative. Switch them using the environment CYGWIN. > > > > 3) Adopt only new implementation and throw the current one away. > > > > > > > > What do you think? > > > > > > Do you really want to maintain twice as much code doing the same stuff > > > and constantly having to ask users which version of the code they are > > > running? The maintenance cost outweighs the advantages, IMHO. > > > Personally I'd go for option 3. > > > > Personally, I feel a tinge of sadness to discard the current code, > > however, your opinion sounds reasonable. > > > > I will submit a new patch in which all the codes specific to the > > current implementation are removed. > > Attached is the patch in git format-patch format. > All the codes specific to the current implementation are removed. > > Despite the utmost care, the changes are relatively large, so some > degradation may exist. > > I will appreciate if you could test. There were still unused code. Please try attached patch instead. -- Takashi Yano --Multipart=_Thu__23_Jul_2020_09_33_28_+0900_eeIRlOgmp.=e6Esh Content-Type: application/octet-stream; name="0001-Cygwin-pty-Implement-new-pseudo-console-support.patch" Content-Disposition: attachment; filename="0001-Cygwin-pty-Implement-new-pseudo-console-support.patch" Content-Transfer-Encoding: base64 RnJvbSA3Yzc2YTQ5YzZiMGQzYjIyMjE3NGM5NzJhMGQyNGZlZDg1ZWY0YTVkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5q cD4KRGF0ZTogVGh1LCAyMyBKdWwgMjAyMCAwOToyNzoyMCArMDkwMApTdWJqZWN0OiBbUEFUQ0hd IEN5Z3dpbjogcHR5OiBJbXBsZW1lbnQgbmV3IHBzZXVkbyBjb25zb2xlIHN1cHBvcnQuCgotIElu IHRoaXMgaW1wbGVtZW50YXRpb24sIHBzZXVkbyBjb25zb2xlIGlzIGNyZWF0ZWQgZm9yIGVhY2gg bmF0aXZlCiAgY29uc29sZSBhcHAuIEFkdmFudGFnZXMgYW5kIGRpc2FkdmFudGFnZXMgb2YgdGhp cyBpbXBsZW1lbnRhdGlvbgogIG92ZXIgdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uIGFyZSBh cyBmb2xsb3dzLgoKICBBZHZhbnRhZ2VzOgogIDEpIE5vIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9u IGluIHB0eSBvdXRwdXQgZm9yIGN5Z3dpbiBwcm9jZXNzLgogICAgICBodHRwczovL2N5Z3dpbi5j b20vcGlwZXJtYWlsL2N5Z3dpbi8yMDIwLUZlYnJ1YXJ5LzI0Mzg1OC5odG1sCiAgMikgRnJlZSBm cm9tIHRoZSBwcm9ibGVtIGNhdXNlZCBieSBkaWZmZXJlbmNlIG9mIGJlaGF2aW91ciBvZiBjb250 cm9sCiAgICAgc2VxdWVuY2VzIGJldHdlZW4gcmVhbCB0ZXJtaW5hbCBhbmQgcHNldWRvIGNvbnNv bGUuCiAgICAgIGh0dHBzOi8vY3lnd2luLmNvbS9waXBlcm1haWwvY3lnd2luLzIwMTktRGVjZW1i ZXIvMjQzMjgxLmh0bWwKICAgICAgaHR0cHM6Ly9jeWd3aW4uY29tL3BpcGVybWFpbC9jeWd3aW4v MjAyMC1GZWJydWFyeS8yNDM4NTUuaHRtbAogIDMpIEZyZWUgZnJvbSB0aGUgcHJvYmxlbSBpbiBj Z2RiIGFuZCBlbWFjcyBndWQuCiAgICAgIGh0dHBzOi8vY3lnd2luLmNvbS9waXBlcm1haWwvY3ln d2luLzIwMjAtSmFudWFyeS8yNDM2MDEuaHRtbAogICAgICBodHRwczovL2N5Z3dpbi5jb20vcGlw ZXJtYWlsL2N5Z3dpbi8yMDIwLU1hcmNoLzI0NDE0Ni5odG1sCiAgNCkgUmVkcmF3aW5nIHNjcmVl biBvbiBleGVjdXRpbmcgbmF0aXZlIGNvbnNvbGUgYXBwcyBpcyBub3QgbmVjZXNzYXJ5LgogIDUp IGN5Z3dpbi1jb25zb2xlLWhlbHBlciBpcyBub3QgbmVjZXNzYXJ5IGZvciB0aGUgcHNldWRvIGNv bnNvbGUKICAgICBzdXBwb3J0LgogIDYpIFRoZSBjb2RlcyBmb3IgcHNldWRvIGNvbnNvbGUgc3Vw cG9ydCBhcmUgbXVjaCBzaW1wbGVyIHRoYW4gdGhhdAogICAgIG9mIHRoZSBwcmV2aW91cyBvbmUu CgogIERpc2FkdmFudGFnZXM6CiAgMSkgVGhlIGN5Z3dpbiBwcm9ncmFtIHdoaWNoIGNhbGxzIGNv bnNvbGUgQVBJIGRpcmVjdGx5IGRvZXMgbm90IHdvcmsuCiAgMikgVGhlIGFwcHMgd2hpY2ggdXNl IGNvbnNvbGUgQVBJIGNhbm5vdCBiZSBkZWJ1Z2dlZCB3aXRoIGdkYi4gVGhpcwogICAgIGlzIGJl Y2F1c2UgcHNldWRvIGNvbnNvbGUgaXMgbm90IGFjdGl2YXRlZCBzaW5jZSBnZGIgdXNlcwogICAg IENyZWF0ZVByb2Nlc3MoKSByYXRoZXIgdGhhbiBleGVjKCkuIEV2ZW4gd2l0aCB0aGlzIGxpbWl0 YXRpb24sCiAgICAgYXR0YWNoaW5nIGdkYiB0byBuYXRpdmUgYXBwcywgaW4gd2hpY2ggcHNldWRv IGNvbnNvbGUgaXMgYWxyZWFkeQogICAgIGFjdGl2YXRlZCwgd29ya3MuCiAgMykgVHlwZWFoZWFk IGtleSBpbnB1dHMgYXJlIGRpc2NhcmRlZCB3aGlsZSBuYXRpdmUgY29uc29sZSBhcHAgaXMKICAg ICBleGVjdXRlZC4gU2ltaXJhbGx5LCB0eXBlYWhlYWQga2V5IGlucHV0cyB3aGlsZSBjeWd3aW4g YXBwIGlzCiAgICAgZXhlY3V0ZWQgYXJlIG5vdCBpbmhlcml0ZWQgdG8gbmF0aXZlIGNvbnNvbGUg YXBwLgogIDQpIENvZGUgcGFnZSBjYW5ub3QgYmUgY2hhbmdlZCBieSBjaGNwLmNvbS4gQWNjdHVh bGx5LCBjaGNwIHdvcmtzCiAgICAgaXRzZWxmIGFuZCBjaGFuZ2VzIGNvZGUgcGFnZSBvZiBpdHMg b3duIHBzZXVkbyBjb25zb2xlLiAgSG93ZXZlciwKICAgICBzaW5jZSBwc2V1ZG8gY29uc29sZSBp cyByZWNyZWF0ZWQgZm9yIGFub3RoZXIgcHJvY2VzcywgaXQgY2Fubm90CiAgICAgaW5oZXJpdCB0 aGUgY29kZSBwYWdlLgogIDUpIHN5c3RlbV9wcmludGYoKSBkb2VzIG5vdCB3b3JrIGFmdGVyIHN0 ZGVyciBpcyBjbG9zZWQuIChTYW1lIHdpdGgKICAgICBjeWd3aW4gMy4wLjcpCiAgNikgU3RhcnR1 cCB0aW1lIG9mIG5hdGl2ZSBjb25zb2xlIGFwcHMgaXMgYWJvdXQgMyB0aW1lcyBzbG93ZXIgdGhh bgogICAgIHByZXZpb3VzIGltcGxlbWVuYXRpb24uCi0tLQogd2luc3VwL2N5Z3dpbi9kdGFibGUu Y2MgICAgICAgICAgIHwgICAzMiAtCiB3aW5zdXAvY3lnd2luL2ZoYW5kbGVyLmggICAgICAgICAg fCAgIDUzICstCiB3aW5zdXAvY3lnd2luL2ZoYW5kbGVyX2NvbnNvbGUuY2MgfCAgIDQzIC0KIHdp bnN1cC9jeWd3aW4vZmhhbmRsZXJfdHR5LmNjICAgICB8IDE3MzUgKysrKystLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KIHdpbnN1cC9jeWd3aW4vZm9yay5jYyAgICAgICAgICAgICB8ICAgMzAgLQog d2luc3VwL2N5Z3dpbi9zZWxlY3QuY2MgICAgICAgICAgIHwgICAgNSArLQogd2luc3VwL2N5Z3dp bi9zbWFsbHByaW50LmNjICAgICAgIHwgICAgMiAtCiB3aW5zdXAvY3lnd2luL3NwYXduLmNjICAg ICAgICAgICAgfCAgIDg3ICstCiB3aW5zdXAvY3lnd2luL3N0cmFjZS5jYyAgICAgICAgICAgfCAg ICAyIC0KIHdpbnN1cC9jeWd3aW4vdHR5LmNjICAgICAgICAgICAgICB8ICAgMjAgKy0KIHdpbnN1 cC9jeWd3aW4vdHR5LmggICAgICAgICAgICAgICB8ICAgMTMgKy0KIHdpbnN1cC9jeWd3aW4vd2lu c3VwLmggICAgICAgICAgICB8ICAgIDMgLQogMTIgZmlsZXMgY2hhbmdlZCwgMzIwIGluc2VydGlv bnMoKyksIDE3MDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9kdGFi bGUuY2MgYi93aW5zdXAvY3lnd2luL2R0YWJsZS5jYwppbmRleCBlOWUwMDViMDguLjZhOTFlMzNi YyAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9kdGFibGUuY2MKKysrIGIvd2luc3VwL2N5Z3dp bi9kdGFibGUuY2MKQEAgLTE0NywzOCArMTQ3LDYgQEAgZHRhYmxlOjpnZXRfZGVidWdnZXJfaW5m byAoKQogdm9pZAogZHRhYmxlOjpzdGRpb19pbml0ICgpCiB7Ci0gIGZvciAoaW50IGkgPSAwOyBp IDwgMzsgaSArKykKLSAgICB7Ci0gICAgICBjb25zdCBpbnQgY2hrX29yZGVyW10gPSB7MSwgMCwg Mn07Ci0gICAgICBpbnQgZmQgPSBjaGtfb3JkZXJbaV07Ci0gICAgICBmaGFuZGxlcl9iYXNlICpm aCA9IGN5Z2hlYXAtPmZkdGFiW2ZkXTsKLSAgICAgIGlmIChmaCAmJiBmaC0+Z2V0X21ham9yICgp ID09IERFVl9QVFlTX01BSk9SKQotCXsKLQkgIGZoYW5kbGVyX3B0eV9zbGF2ZSAqcHR5cyA9IChm aGFuZGxlcl9wdHlfc2xhdmUgKikgZmg7Ci0JICBpZiAocHR5cy0+Z2V0X3BzZXVkb19jb25zb2xl ICgpKQotCSAgICB7Ci0JICAgICAgYm9vbCBhdHRhY2hlZCA9ICEhZmhhbmRsZXJfY29uc29sZTo6 Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZAotCQkocHR5cy0+Z2V0X2hlbHBlcl9wcm9jZXNzX2lkICgp LCB0cnVlKTsKLQkgICAgICBpZiAoYXR0YWNoZWQpCi0JCWJyZWFrOwotCSAgICAgIGVsc2UKLQkJ ewotCQkgIC8qIE5vdCBhdHRhY2hlZCB0byBwc2V1ZG8gY29uc29sZSBpbiBmb3JrKCkgb3Igc3Bh d24oKQotCQkgICAgIGJ5IHNvbWUgcmVhc29uLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGV4ZWN1dGFi bGUgaXMKLQkJICAgICBhIHdpbmRvd3MgR1VJIGJpbmFyeSwgc3VjaCBhcyBtaW50dHkuICovCi0J CSAgRnJlZUNvbnNvbGUgKCk7Ci0JCSAgaWYgKEF0dGFjaENvbnNvbGUgKHB0eXMtPmdldF9oZWxw ZXJfcHJvY2Vzc19pZCAoKSkpCi0JCSAgICB7Ci0JCSAgICAgIHB0eXMtPmZpeHVwX2FmdGVyX2F0 dGFjaCAoZmFsc2UsIGZkKTsKLQkJICAgICAgYnJlYWs7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQot CX0KLSAgICAgIGVsc2UgaWYgKGZoICYmIGZoLT5nZXRfbWFqb3IgKCkgPT0gREVWX0NPTlNfTUFK T1IpCi0JYnJlYWs7Ci0gICAgfQotCiAgIGlmIChteXNlbGYtPmN5Z3N0YXJ0ZWQgfHwgSVNTVEFU RSAobXlzZWxmLCBQSURfQ1lHUEFSRU5UKSkKICAgICB7CiAgICAgICB0dHlfbWluICp0ID0gY3ln d2luX3NoYXJlZC0+dHR5LmdldF9jdHR5cCAoKTsKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4v ZmhhbmRsZXIuaCBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXIuaAppbmRleCA2MGJkMjdlMDAuLjQ2 MDRmZjJiYSAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9maGFuZGxlci5oCisrKyBiL3dpbnN1 cC9jeWd3aW4vZmhhbmRsZXIuaApAQCAtMzI2LDE2ICszMjYsMTYgQEAgY2xhc3MgZmhhbmRsZXJf YmFzZQogICB2aXJ0dWFsIHNpemVfdCAmcmFpeHB1dCAoKSB7IHJldHVybiByYS5yYWl4cHV0OyB9 OwogICB2aXJ0dWFsIHNpemVfdCAmcmFidWZsZW4gKCkgeyByZXR1cm4gcmEucmFidWZsZW47IH07 CiAKLSAgdmlydHVhbCBib29sIGdldF9yZWFkYWhlYWRfdmFsaWQgKCkgeyByZXR1cm4gcmFpeGdl dCAoKSA8IHJhbGVuICgpOyB9CisgIGJvb2wgZ2V0X3JlYWRhaGVhZF92YWxpZCAoKSB7IHJldHVy biByYWl4Z2V0ICgpIDwgcmFsZW4gKCk7IH0KICAgaW50IHB1dHNfcmVhZGFoZWFkIChjb25zdCBj aGFyICpzLCBzaXplX3QgbGVuID0gKHNpemVfdCkgLTEpOwotICB2aXJ0dWFsIGludCBwdXRfcmVh ZGFoZWFkIChjaGFyIHZhbHVlKTsKKyAgaW50IHB1dF9yZWFkYWhlYWQgKGNoYXIgdmFsdWUpOwog CiAgIGludCBnZXRfcmVhZGFoZWFkICgpOwogICBpbnQgcGVla19yZWFkYWhlYWQgKGludCBxdWVy eXB1dCA9IDApOwogCiAgIHZvaWQgc2V0X3JlYWRhaGVhZF92YWxpZCAoaW50IHZhbCwgaW50IGNo ID0gLTEpOwogCi0gIHZpcnR1YWwgaW50IGdldF9yZWFkYWhlYWRfaW50b19idWZmZXIgKGNoYXIg KmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CisgIGludCBnZXRfcmVhZGFoZWFkX2ludG9fYnVmZmVyIChj aGFyICpidWYsIHNpemVfdCBidWZsZW4pOwogCiAgIGJvb2wgaGFzX2FjbHMgKCkgY29uc3QgeyBy ZXR1cm4gcGMuaGFzX2FjbHMgKCk7IH0KIApAQCAtMTkwOSw3ICsxOTA5LDcgQEAgY2xhc3MgZmhh bmRsZXJfdGVybWlvczogcHVibGljIGZoYW5kbGVyX2Jhc2UKICAgaW50IGlvY3RsIChpbnQsIHZv aWQgKik7CiAgIHR0eV9taW4gKl90YzsKICAgdHR5ICpnZXRfdHR5cCAoKSB7cmV0dXJuICh0dHkg KikgdGMgKCk7fQotICB2aXJ0dWFsIGludCBlYXRfcmVhZGFoZWFkIChpbnQgbik7CisgIGludCBl YXRfcmVhZGFoZWFkIChpbnQgbik7CiAKICBwdWJsaWM6CiAgIHR0eV9taW4qJiB0YyAoKSB7cmV0 dXJuIF90Yzt9CkBAIC0yMTg4LDcgKzIxODgsNiBAQCBwcml2YXRlOgogICBzdGF0aWMgYm9vbCBu ZWVkX2ludmlzaWJsZSAoKTsKICAgc3RhdGljIHZvaWQgZnJlZV9jb25zb2xlICgpOwogICBzdGF0 aWMgY29uc3QgY2hhciAqZ2V0X25vbmFzY2lpX2tleSAoSU5QVVRfUkVDT1JEJiBpbnB1dF9yZWMs IGNoYXIgKik7Ci0gIHN0YXRpYyBEV09SRCBnZXRfY29uc29sZV9wcm9jZXNzX2lkIChEV09SRCBw aWQsIGJvb2wgbWF0Y2gpOwogCiAgIGZoYW5kbGVyX2NvbnNvbGUgKHZvaWQgKikge30KIApAQCAt MjI2OCwxOSArMjI2Nyw3IEBAIGNsYXNzIGZoYW5kbGVyX3B0eV9jb21tb246IHB1YmxpYyBmaGFu ZGxlcl90ZXJtaW9zCiAgICAgcmV0dXJuIGZoOwogICB9CiAKLSAgYm9vbCBhdHRhY2hfcGNvbl9p bl9mb3JrICh2b2lkKQotICB7Ci0gICAgcmV0dXJuIGdldF90dHlwICgpLT5hdHRhY2hfcGNvbl9p bl9mb3JrOwotICB9Ci0gIERXT1JEIGdldF9oZWxwZXJfcHJvY2Vzc19pZCAodm9pZCkKLSAgewot ICAgIHJldHVybiBnZXRfdHR5cCAoKS0+aGVscGVyX3Byb2Nlc3NfaWQ7Ci0gIH0KLSAgSFBDT04g Z2V0X3BzZXVkb19jb25zb2xlICh2b2lkKQotICB7Ci0gICAgcmV0dXJuIGdldF90dHlwICgpLT5o X3BzZXVkb19jb25zb2xlOwotICB9Ci0gIGJvb2wgdG9fYmVfcmVhZF9mcm9tX3Bjb24gKHZvaWQp OworICB2b2lkIHJlc2l6ZV9wc2V1ZG9fY29uc29sZSAoc3RydWN0IHdpbnNpemUgKik7CiAKICBw cm90ZWN0ZWQ6CiAgIEJPT0wgcHJvY2Vzc19vcG9zdF9vdXRwdXQgKEhBTkRMRSBoLApAQCAtMjI5 MSwyMyArMjI3OCwxNSBAQCBjbGFzcyBmaGFuZGxlcl9wdHlfc2xhdmU6IHB1YmxpYyBmaGFuZGxl cl9wdHlfY29tbW9uCiB7CiAgIEhBTkRMRSBpbnVzZTsJCQkvLyB1c2VkIHRvIGluZGljYXRlIHRo YXQgYSB0dHkgaXMgaW4gdXNlCiAgIEhBTkRMRSBvdXRwdXRfaGFuZGxlX2N5ZywgaW9faGFuZGxl X2N5ZzsKLSAgRFdPUkQgcGlkX3Jlc3RvcmU7Ci0gIGludCBmZDsKIAogICAvKiBIZWxwZXIgZnVu Y3Rpb25zIGZvciBmY2htb2QgYW5kIGZjaG93bi4gKi8KICAgYm9vbCBmY2hfb3Blbl9oYW5kbGVz IChib29sIGNob3duKTsKICAgaW50IGZjaF9zZXRfc2QgKHNlY3VyaXR5X2Rlc2NyaXB0b3IgJnNk LCBib29sIGNob3duKTsKICAgdm9pZCBmY2hfY2xvc2VfaGFuZGxlcyAoKTsKIAotICBib29sIHRy eV9yZWF0dGFjaF9wY29uICgpOwotICB2b2lkIHJlc3RvcmVfcmVhdHRhY2hfcGNvbiAoKTsKLSAg aW5saW5lIHZvaWQgZnJlZV9hdHRhY2hlZF9jb25zb2xlICgpOwotCiAgcHVibGljOgogICAvKiBD b25zdHJ1Y3RvciAqLwogICBmaGFuZGxlcl9wdHlfc2xhdmUgKGludCk7Ci0gIC8qIERlc3RydWN0 b3IgKi8KLSAgfmZoYW5kbGVyX3B0eV9zbGF2ZSAoKTsKIAogICB2b2lkIHNldF9vdXRwdXRfaGFu ZGxlX2N5ZyAoSEFORExFIGgpIHsgb3V0cHV0X2hhbmRsZV9jeWcgPSBoOyB9CiAgIEhBTkRMRSYg Z2V0X291dHB1dF9oYW5kbGVfY3lnICgpIHsgcmV0dXJuIG91dHB1dF9oYW5kbGVfY3lnOyB9CkBA IC0yMzE5LDkgKzIyOTgsNiBAQCBjbGFzcyBmaGFuZGxlcl9wdHlfc2xhdmU6IHB1YmxpYyBmaGFu ZGxlcl9wdHlfY29tbW9uCiAgIHNzaXplX3QgX19zdGRjYWxsIHdyaXRlIChjb25zdCB2b2lkICpw dHIsIHNpemVfdCBsZW4pOwogICB2b2lkIF9fcmVnMyByZWFkICh2b2lkICpwdHIsIHNpemVfdCYg bGVuKTsKICAgaW50IGluaXQgKEhBTkRMRSwgRFdPUkQsIG1vZGVfdCk7Ci0gIGludCBlYXRfcmVh ZGFoZWFkIChpbnQgbik7Ci0gIGludCBnZXRfcmVhZGFoZWFkX2ludG9fYnVmZmVyIChjaGFyICpi dWYsIHNpemVfdCBidWZsZW4pOwotICBib29sIGdldF9yZWFkYWhlYWRfdmFsaWQgKHZvaWQpOwog CiAgIGludCB0Y3NldGF0dHIgKGludCBhLCBjb25zdCBzdHJ1Y3QgdGVybWlvcyAqdCk7CiAgIGlu dCB0Y2dldGF0dHIgKHN0cnVjdCB0ZXJtaW9zICp0KTsKQEAgLTIzNTgsMjAgKzIzMzQsMTIgQEAg Y2xhc3MgZmhhbmRsZXJfcHR5X3NsYXZlOiBwdWJsaWMgZmhhbmRsZXJfcHR5X2NvbW1vbgogICAg IGNvcHl0byAoZmgpOwogICAgIHJldHVybiBmaDsKICAgfQotICB2b2lkIHNldF9zd2l0Y2hfdG9f cGNvbiAoaW50IGZkKTsKKyAgYm9vbCBzZXR1cF9wc2V1ZG9jb25zb2xlIChTVEFSVFVQSU5GT0VY VyAqc2kpOworICB2b2lkIGNsb3NlX3BzZXVkb2NvbnNvbGUgKHZvaWQpOworICB2b2lkIHNldF9z d2l0Y2hfdG9fcGNvbiAodm9pZCk7CiAgIHZvaWQgcmVzZXRfc3dpdGNoX3RvX3Bjb24gKHZvaWQp OwotICB2b2lkIHB1c2hfdG9fcGNvbl9zY3JlZW5idWZmZXIgKGNvbnN0IGNoYXIgKnB0ciwgc2l6 ZV90IGxlbiwgYm9vbCBpc19lY2hvKTsKICAgdm9pZCBtYXNrX3N3aXRjaF90b19wY29uX2luIChi b29sIG1hc2spOwotICB2b2lkIGZpeHVwX2FmdGVyX2F0dGFjaCAoYm9vbCBuYXRpdmVfbWF5YmUs IGludCBmZCk7Ci0gIGJvb2wgaXNfbGluZV9pbnB1dCAodm9pZCkKLSAgewotICAgIHJldHVybiBn ZXRfdHR5cCAoKS0+dGkuY19sZmxhZyAmIElDQU5PTjsKLSAgfQogICB2b2lkIHNldHVwX2xvY2Fs ZSAodm9pZCk7Ci0gIHZvaWQgc2V0X2ZyZWVjb25zb2xlX29uX2Nsb3NlIChib29sIHZhbCk7Ci0g IHZvaWQgdHJpZ2dlcl9yZWRyYXdfc2NyZWVuICh2b2lkKTsKLSAgdm9pZCBwdWxsX3Bjb25faW5w dXQgKHZvaWQpOwotICB2b2lkIHVwZGF0ZV9wY29uX2lucHV0X3N0YXRlIChib29sIG5lZWRfbG9j ayk7CiB9OwogCiAjZGVmaW5lIF9fcHRzbmFtZShidWYsIHVuaXQpIF9fc21hbGxfc3ByaW50ZiAo KGJ1ZiksICIvZGV2L3B0eSVkIiwgKHVuaXQpKQpAQCAtMjM5Niw3ICsyMzY0LDYgQEAgcHVibGlj OgogICBpbnQgcHJvY2Vzc19zbGF2ZV9vdXRwdXQgKGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgaW50 IHBrdG1vZGVfb24pOwogICB2b2lkIGRvZWNobyAoY29uc3Qgdm9pZCAqc3RyLCBEV09SRCBsZW4p OwogICBpbnQgYWNjZXB0X2lucHV0ICgpOwotICBpbnQgcHV0X3JlYWRhaGVhZCAoY2hhciB2YWx1 ZSk7CiAgIGludCBvcGVuIChpbnQgZmxhZ3MsIG1vZGVfdCBtb2RlID0gMCk7CiAgIHZvaWQgb3Bl bl9zZXR1cCAoaW50IGZsYWdzKTsKICAgc3NpemVfdCBfX3N0ZGNhbGwgd3JpdGUgKGNvbnN0IHZv aWQgKnB0ciwgc2l6ZV90IGxlbik7CkBAIC0yNDM1LDkgKzI0MDIsNyBAQCBwdWJsaWM6CiAgICAg Y29weXRvIChmaCk7CiAgICAgcmV0dXJuIGZoOwogICB9Ci0KLSAgYm9vbCBzZXR1cF9wc2V1ZG9j b25zb2xlICh2b2lkKTsKLSAgdm9pZCB0cmFuc2Zlcl9pbnB1dF90b19wY29uICh2b2lkKTsKKyAg Ym9vbCB0b19iZV9yZWFkX2Zyb21fcGNvbiAodm9pZCk7CiB9OwogCiBjbGFzcyBmaGFuZGxlcl9k ZXZfbnVsbDogcHVibGljIGZoYW5kbGVyX2Jhc2UKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4v ZmhhbmRsZXJfY29uc29sZS5jYyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfY29uc29sZS5jYwpp bmRleCA1Mjc0MWNlOGIuLjAyYTU5OTZhMSAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9maGFu ZGxlcl9jb25zb2xlLmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfY29uc29sZS5jYwpA QCAtMTIwNiwxOCArMTIwNiw2IEBAIGZoYW5kbGVyX2NvbnNvbGU6OmNsb3NlICgpCiAgIGlmIChj b25fcmEucmFidWYpCiAgICAgZnJlZSAoY29uX3JhLnJhYnVmKTsKIAotICAvKiBJZiBhbHJlYWR5 IGF0dGFjaGVkIHRvIHBzZXVkbyBjb25zb2xlLCBkb24ndCBjYWxsIGZyZWVfY29uc29sZSAoKSAq LwotICBjeWdoZWFwX2ZkZW51bSBjZmQgKGZhbHNlKTsKLSAgd2hpbGUgKGNmZC5uZXh0ICgpID49 IDApCi0gICAgaWYgKGNmZC0+Z2V0X21ham9yICgpID09IERFVl9QVFlNX01BSk9SIHx8Ci0JY2Zk LT5nZXRfbWFqb3IgKCkgPT0gREVWX1BUWVNfTUFKT1IpCi0gICAgICB7Ci0JZmhhbmRsZXJfcHR5 X2NvbW1vbiAqdCA9Ci0JICAoZmhhbmRsZXJfcHR5X2NvbW1vbiAqKSAoZmhhbmRsZXJfYmFzZSAq KSBjZmQ7Ci0JaWYgKGdldF9jb25zb2xlX3Byb2Nlc3NfaWQgKHQtPmdldF9oZWxwZXJfcHJvY2Vz c19pZCAoKSwgdHJ1ZSkpCi0JICByZXR1cm4gMDsKLSAgICAgIH0KLQogICBpZiAoIWhhdmVfZXhl Y2VkKQogICAgIGZyZWVfY29uc29sZSAoKTsKICAgcmV0dXJuIDA7CkBAIC0zNjExLDM3ICszNTk5 LDYgQEAgZmhhbmRsZXJfY29uc29sZTo6bmVlZF9pbnZpc2libGUgKCkKICAgcmV0dXJuIGI7CiB9 CiAKLURXT1JECi1maGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkIChEV09S RCBwaWQsIGJvb2wgbWF0Y2gpCi17Ci0gIERXT1JEIHRtcDsKLSAgRFdPUkQgbnVtLCBudW1fcmVx OwotICBudW0gPSAxOwotICBudW1fcmVxID0gR2V0Q29uc29sZVByb2Nlc3NMaXN0ICgmdG1wLCBu dW0pOwotICBEV09SRCAqbGlzdDsKLSAgd2hpbGUgKHRydWUpCi0gICAgewotICAgICAgbGlzdCA9 IChEV09SRCAqKQotCUhlYXBBbGxvYyAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIG51bV9yZXEgKiBz aXplb2YgKERXT1JEKSk7Ci0gICAgICBudW0gPSBudW1fcmVxOwotICAgICAgbnVtX3JlcSA9IEdl dENvbnNvbGVQcm9jZXNzTGlzdCAobGlzdCwgbnVtKTsKLSAgICAgIGlmIChudW1fcmVxID4gbnVt KQotCUhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgbGlzdCk7Ci0gICAgICBlbHNlCi0J YnJlYWs7Ci0gICAgfQotICBudW0gPSBudW1fcmVxOwotCi0gIHRtcCA9IDA7Ci0gIGZvciAoRFdP UkQgaT0wOyBpPG51bTsgaSsrKQotICAgIGlmICgobWF0Y2ggJiYgbGlzdFtpXSA9PSBwaWQpIHx8 ICghbWF0Y2ggJiYgbGlzdFtpXSAhPSBwaWQpKQotICAgICAgLyogTGFzdCBvbmUgaXMgdGhlIG9s ZGVzdC4gKi8KLSAgICAgIC8qIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvdGVybWluYWwv aXNzdWVzLzk1ICovCi0gICAgICB0bXAgPSBsaXN0W2ldOwotICBIZWFwRnJlZSAoR2V0UHJvY2Vz c0hlYXAgKCksIDAsIGxpc3QpOwotICByZXR1cm4gdG1wOwotfQotCiBEV09SRAogZmhhbmRsZXJf Y29uc29sZTo6X19hY3F1aXJlX2lucHV0X211dGV4IChjb25zdCBjaGFyICpmbiwgaW50IGxuLCBE V09SRCBtcykKIHsKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfdHR5LmNjIGIv d2luc3VwL2N5Z3dpbi9maGFuZGxlcl90dHkuY2MKaW5kZXggNmEwMDRmM2E1Li43Zjg0ZWFkNmQg MTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfdHR5LmNjCisrKyBiL3dpbnN1cC9j eWd3aW4vZmhhbmRsZXJfdHR5LmNjCkBAIC0yNSw3ICsyNSw2IEBAIGRldGFpbHMuICovCiAjaW5j bHVkZSAiY2hpbGRfaW5mby5oIgogI2luY2x1ZGUgPGFzbS9zb2NrZXQuaD4KICNpbmNsdWRlICJj eWd3YWl0LmgiCi0jaW5jbHVkZSAidGxzX3BidWYuaCIKICNpbmNsdWRlICJyZWdpc3RyeS5oIgog CiAjaWZuZGVmIFBST0NfVEhSRUFEX0FUVFJJQlVURV9QU0VVRE9DT05TT0xFCkBAIC0zMyw3ICsz Miw2IEBAIGRldGFpbHMuICovCiAjZW5kaWYgLyogUFJPQ19USFJFQURfQVRUUklCVVRFX1BTRVVE T0NPTlNPTEUgKi8KIAogZXh0ZXJuICJDIiBpbnQgc3NjYW5mIChjb25zdCBjaGFyICosIGNvbnN0 IGNoYXIgKiwgLi4uKTsKLWV4dGVybiAiQyIgaW50IHR0eW5hbWVfciAoaW50LCBjaGFyKiwgc2l6 ZV90KTsKIAogZXh0ZXJuICJDIiB7CiAgIEhSRVNVTFQgV0lOQVBJIENyZWF0ZVBzZXVkb0NvbnNv bGUgKENPT1JELCBIQU5ETEUsIEhBTkRMRSwgRFdPUkQsIEhQQ09OICopOwpAQCAtNjAsMjAgKzU4 LDEwIEBAIHN0cnVjdCBwaXBlX3JlcGx5IHsKICAgRFdPUkQgZXJyb3I7CiB9OwogCi1zdGF0aWMg aW50IHBjb25fYXR0YWNoZWRfdG8gPSAtMTsKIHN0YXRpYyBib29sIGlzSHlicmlkOwotc3RhdGlj IGJvb2wgZG9fbm90X3Jlc2V0X3N3aXRjaF90b19wY29uOwotc3RhdGljIGJvb2wgZnJlZWNvbnNv bGVfb25fY2xvc2UgPSB0cnVlOwotc3RhdGljIHR0eSAqbGFzdF90dHlwID0gTlVMTDsKLQotdm9p ZAotY2xlYXJfcGNvbl9hdHRhY2hlZF90byAodm9pZCkKLXsKLSAgcGNvbl9hdHRhY2hlZF90byA9 IC0xOwotfQogCiBzdGF0aWMgdm9pZAotc2V0X3N3aXRjaF90b19wY29uICh2b2lkKQorc2V0X3N3 aXRjaF90b19wY29uIChIQU5ETEUgaCkKIHsKICAgY3lnaGVhcF9mZGVudW0gY2ZkIChmYWxzZSk7 CiAgIGludCBmZDsKQEAgLTgyLDI4MCArNzAsMTcgQEAgc2V0X3N3aXRjaF90b19wY29uICh2b2lk KQogICAgICAgewogCWZoYW5kbGVyX2Jhc2UgKmZoID0gY2ZkOwogCWZoYW5kbGVyX3B0eV9zbGF2 ZSAqcHR5cyA9IChmaGFuZGxlcl9wdHlfc2xhdmUgKikgZmg7Ci0JaWYgKHB0eXMtPmdldF9wc2V1 ZG9fY29uc29sZSAoKSkKLQkgIHsKLQkgICAgcHR5cy0+c2V0X3N3aXRjaF90b19wY29uIChmZCk7 Ci0JICAgIHB0eXMtPnRyaWdnZXJfcmVkcmF3X3NjcmVlbiAoKTsKLQkgICAgRFdPUkQgbW9kZSA9 Ci0JICAgICAgRU5BQkxFX1BST0NFU1NFRF9JTlBVVCB8IEVOQUJMRV9MSU5FX0lOUFVUIHwgRU5B QkxFX0VDSE9fSU5QVVQ7Ci0JICAgIFNldENvbnNvbGVNb2RlIChwdHlzLT5nZXRfaGFuZGxlICgp LCBtb2RlKTsKLQkgIH0KKwlpZiAoaCA9PSBwdHlzLT5nZXRfaGFuZGxlICgpKQorCSAgcHR5cy0+ c2V0X3N3aXRjaF90b19wY29uICgpOwogCXJldHVybjsKICAgICAgIH0KLSAgLyogTm8gcHR5IHNs YXZlIG9wZW5lZCAqLwotICBpZiAobGFzdF90dHlwKSAvKiBNYWtlIHN5c3RlbV9wcmludGYoKSB3 b3JrIGFmdGVyIGNsb3NpbmcgcHR5IHNsYXZlICovCi0gICAgbGFzdF90dHlwLT5zZXRfc3dpdGNo X3RvX3Bjb25fb3V0ICh0cnVlKTsKLX0KLQotc3RhdGljIHZvaWQKLWZvcmNlX2F0dGFjaF90b19w Y29uIChIQU5ETEUgaCkKLXsKLSAgYm9vbCBhdHRhY2hfZG9uZSA9IGZhbHNlOwotICBmb3IgKGlu dCBuID0gMDsgbiA8IDI7IG4gKyspCi0gICAgewotICAgICAgLyogRmlyc3QgdGltZSwgYXR0YWNo IHRvIHRoZSBwdHkgd2hvc2UgaGFuZGxlIHZhbHVlIGlzIG1hdGNoLgotCSBTZWNvbmQgdGltZSwg dHJ5IHRvIGF0dGFjaCB0byBhbnkgcHR5LiAqLwotICAgICAgY3lnaGVhcF9mZGVudW0gY2ZkIChm YWxzZSk7Ci0gICAgICB3aGlsZSAoY2ZkLm5leHQgKCkgPj0gMCkKLQlpZiAoY2ZkLT5nZXRfbWFq b3IgKCkgPT0gREVWX1BUWVNfTUFKT1IpCi0JICB7Ci0JICAgIGZoYW5kbGVyX2Jhc2UgKmZoID0g Y2ZkOwotCSAgICBmaGFuZGxlcl9wdHlfc2xhdmUgKnB0eXMgPSAoZmhhbmRsZXJfcHR5X3NsYXZl ICopIGZoOwotCSAgICBpZiAoIXB0eXMtPmdldF9wc2V1ZG9fY29uc29sZSAoKSkKLQkgICAgICBj b250aW51ZTsKLQkgICAgaWYgKG4gIT0gMAotCQl8fCBoID09IHB0eXMtPmdldF9oYW5kbGUgKCkK LQkJfHwgaCA9PSBwdHlzLT5nZXRfb3V0cHV0X2hhbmRsZSAoKSkKLQkgICAgICB7Ci0JCWlmIChm aGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkCi0JCQkJICAocHR5cy0+Z2V0 X2hlbHBlcl9wcm9jZXNzX2lkICgpLCB0cnVlKSkKLQkJICBhdHRhY2hfZG9uZSA9IHRydWU7Ci0J CWVsc2UKLQkJICB7Ci0JCSAgICBGcmVlQ29uc29sZSAoKTsKLQkJICAgIGlmIChBdHRhY2hDb25z b2xlIChwdHlzLT5nZXRfaGVscGVyX3Byb2Nlc3NfaWQgKCkpKQotCQkgICAgICB7Ci0JCQlwY29u X2F0dGFjaGVkX3RvID0gcHR5cy0+Z2V0X21pbm9yICgpOwotCQkJYXR0YWNoX2RvbmUgPSB0cnVl OwotCQkgICAgICB9Ci0JCSAgICBlbHNlCi0JCSAgICAgIHBjb25fYXR0YWNoZWRfdG8gPSAtMTsK LQkJICB9Ci0JCWJyZWFrOwotCSAgICAgIH0KLQkgIH0KLQllbHNlIGlmIChjZmQtPmdldF9tYWpv ciAoKSA9PSBERVZfQ09OU19NQUpPUikKLQkgIHsKLQkgICAgZmhhbmRsZXJfYmFzZSAqZmggPSBj ZmQ7Ci0JICAgIGZoYW5kbGVyX2NvbnNvbGUgKmNvbnMgPSAoZmhhbmRsZXJfY29uc29sZSAqKSBm aDsKLQkgICAgaWYgKG4gIT0gMAotCQl8fCBoID09IGNvbnMtPmdldF9oYW5kbGUgKCkKLQkJfHwg aCA9PSBjb25zLT5nZXRfb3V0cHV0X2hhbmRsZSAoKSkKLQkgICAgICB7Ci0JCS8qIElmIHRoZSBw cm9jZXNzIGlzIHJ1bm5pbmcgb24gYSBjb25zb2xlLAotCQkgICB0aGUgcGFyZW50IHByb2Nlc3Mg c2hvdWxkIGJlIGF0dGFjaGVkCi0JCSAgIHRvIHRoZSBzYW1lIGNvbnNvbGUuICovCi0JCURXT1JE IGF0dGFjaF93cGlkOwotCQlpZiAobXlzZWxmLT5wcGlkID09IDEpCi0JCSAgYXR0YWNoX3dwaWQg PSBBVFRBQ0hfUEFSRU5UX1BST0NFU1M7Ci0JCWVsc2UKLQkJICB7Ci0JCSAgICBwaW5mbyBwICht eXNlbGYtPnBwaWQpOwotCQkgICAgYXR0YWNoX3dwaWQgPSBwLT5kd1Byb2Nlc3NJZDsKLQkJICB9 Ci0JCUZyZWVDb25zb2xlICgpOwotCQlpZiAoQXR0YWNoQ29uc29sZSAoYXR0YWNoX3dwaWQpKQot CQkgIHsKLQkJICAgIHBjb25fYXR0YWNoZWRfdG8gPSAtMTsKLQkJICAgIGF0dGFjaF9kb25lID0g dHJ1ZTsKLQkJICB9Ci0JCWVsc2UKLQkJICBwY29uX2F0dGFjaGVkX3RvID0gLTE7Ci0JCWJyZWFr OwotCSAgICAgIH0KLQkgIH0KLSAgICAgIGlmIChhdHRhY2hfZG9uZSkKLQlicmVhazsKLSAgICB9 Ci19Ci0KLXZvaWQKLXNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKEhBTkRMRSBoKQot ewotICBpZiAoR2V0RmlsZVR5cGUgKGgpID09IEZJTEVfVFlQRV9DSEFSKQotICAgIHsKLSAgICAg IGZvcmNlX2F0dGFjaF90b19wY29uIChoKTsKLSAgICAgIERXT1JEIGR1bW15OwotICAgICAgaWYg KCFpc0h5YnJpZCAmJiAoR2V0Q29uc29sZU1vZGUgKGgsICZkdW1teSkKLQkJCXx8IEdldExhc3RF cnJvciAoKSAhPSBFUlJPUl9JTlZBTElEX0hBTkRMRSkpCi0JewotCSAgaXNIeWJyaWQgPSB0cnVl OwotCSAgc2V0X3N3aXRjaF90b19wY29uICgpOwotCX0KLSAgICB9Ci19Ci0KLWlubGluZSB2b2lk Ci1maGFuZGxlcl9wdHlfc2xhdmU6OmZyZWVfYXR0YWNoZWRfY29uc29sZSAoKQotewotICBib29s IGF0dGFjaGVkID0gZ2V0X3R0eXAgKCkgPwotICAgIGZoYW5kbGVyX2NvbnNvbGU6OmdldF9jb25z b2xlX3Byb2Nlc3NfaWQgKGdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKSwgdHJ1ZSkKLSAgICA6IChn ZXRfbWlub3IgKCkgPT0gcGNvbl9hdHRhY2hlZF90byk7Ci0gIGlmIChmcmVlY29uc29sZV9vbl9j bG9zZSAmJiBhdHRhY2hlZCkKLSAgICB7Ci0gICAgICBGcmVlQ29uc29sZSAoKTsKLSAgICAgIHBj b25fYXR0YWNoZWRfdG8gPSAtMTsKLSAgICB9CiB9CiAKICNkZWZpbmUgREVGX0hPT0sobmFtZSkg c3RhdGljIF9fdHlwZW9mX18gKG5hbWUpICpuYW1lIyNfT3JpZwotREVGX0hPT0sgKFdyaXRlRmls ZSk7Ci1ERUZfSE9PSyAoV3JpdGVDb25zb2xlQSk7Ci1ERUZfSE9PSyAoV3JpdGVDb25zb2xlVyk7 Ci1ERUZfSE9PSyAoUmVhZEZpbGUpOwotREVGX0hPT0sgKFJlYWRDb25zb2xlQSk7Ci1ERUZfSE9P SyAoUmVhZENvbnNvbGVXKTsKLURFRl9IT09LIChXcml0ZUNvbnNvbGVPdXRwdXRBKTsKLURFRl9I T09LIChXcml0ZUNvbnNvbGVPdXRwdXRXKTsKLURFRl9IT09LIChXcml0ZUNvbnNvbGVPdXRwdXRD aGFyYWN0ZXJBKTsKLURFRl9IT09LIChXcml0ZUNvbnNvbGVPdXRwdXRDaGFyYWN0ZXJXKTsKLURF Rl9IT09LIChXcml0ZUNvbnNvbGVPdXRwdXRBdHRyaWJ1dGUpOwotREVGX0hPT0sgKFNldENvbnNv bGVDdXJzb3JQb3NpdGlvbik7Ci1ERUZfSE9PSyAoU2V0Q29uc29sZVRleHRBdHRyaWJ1dGUpOwot REVGX0hPT0sgKFdyaXRlQ29uc29sZUlucHV0QSk7Ci1ERUZfSE9PSyAoV3JpdGVDb25zb2xlSW5w dXRXKTsKLURFRl9IT09LIChSZWFkQ29uc29sZUlucHV0QSk7Ci1ERUZfSE9PSyAoUmVhZENvbnNv bGVJbnB1dFcpOwotREVGX0hPT0sgKFBlZWtDb25zb2xlSW5wdXRBKTsKLURFRl9IT09LIChQZWVr Q29uc29sZUlucHV0Vyk7CiAvKiBDcmVhdGVQcm9jZXNzKCkgaXMgaG9va2VkIGZvciBHREIgZXRj LiAqLwogREVGX0hPT0sgKENyZWF0ZVByb2Nlc3NBKTsKIERFRl9IT09LIChDcmVhdGVQcm9jZXNz Vyk7CiAKLXN0YXRpYyBCT09MIFdJTkFQSQotV3JpdGVGaWxlX0hvb2tlZAotICAgICAoSEFORExF IGgsIExQQ1ZPSUQgcCwgRFdPUkQgbCwgTFBEV09SRCBuLCBMUE9WRVJMQVBQRUQgbykKLXsKLSAg c2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBXcml0ZUZpbGVf T3JpZyAoaCwgcCwgbCwgbiwgbyk7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVdyaXRlQ29uc29s ZUFfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgTFBDVk9JRCBwLCBEV09SRCBsLCBMUERXT1JEIG4s IExQVk9JRCBvKQotewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAg cmV0dXJuIFdyaXRlQ29uc29sZUFfT3JpZyAoaCwgcCwgbCwgbiwgbyk7Ci19Ci1zdGF0aWMgQk9P TCBXSU5BUEkKLVdyaXRlQ29uc29sZVdfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgTFBDVk9JRCBw LCBEV09SRCBsLCBMUERXT1JEIG4sIExQVk9JRCBvKQotewotICBzZXRfaXNoeWJyaWRfYW5kX3N3 aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFdyaXRlQ29uc29sZVdfT3JpZyAoaCwgcCwgbCwg biwgbyk7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVJlYWRGaWxlX0hvb2tlZAotICAgICAoSEFO RExFIGgsIExQVk9JRCBwLCBEV09SRCBsLCBMUERXT1JEIG4sIExQT1ZFUkxBUFBFRCBvKQotewot ICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFJlYWRGaWxl X09yaWcgKGgsIHAsIGwsIG4sIG8pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1SZWFkQ29uc29s ZUFfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgTFBWT0lEIHAsIERXT1JEIGwsIExQRFdPUkQgbiwg TFBWT0lEIG8pCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwotICBy ZXR1cm4gUmVhZENvbnNvbGVBX09yaWcgKGgsIHAsIGwsIG4sIG8pOwotfQotc3RhdGljIEJPT0wg V0lOQVBJCi1SZWFkQ29uc29sZVdfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgTFBWT0lEIHAsIERX T1JEIGwsIExQRFdPUkQgbiwgTFBWT0lEIG8pCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNo X3RvX3Bjb24gKGgpOwotICByZXR1cm4gUmVhZENvbnNvbGVXX09yaWcgKGgsIHAsIGwsIG4sIG8p OwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1Xcml0ZUNvbnNvbGVPdXRwdXRBX0hvb2tlZAotICAg ICAoSEFORExFIGgsIENPTlNUIENIQVJfSU5GTyAqcCwgQ09PUkQgcywgQ09PUkQgYywgUFNNQUxM X1JFQ1QgcikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJl dHVybiBXcml0ZUNvbnNvbGVPdXRwdXRBX09yaWcgKGgsIHAsIHMsIGMsIHIpOwotfQotc3RhdGlj IEJPT0wgV0lOQVBJCi1Xcml0ZUNvbnNvbGVPdXRwdXRXX0hvb2tlZAotICAgICAoSEFORExFIGgs IENPTlNUIENIQVJfSU5GTyAqcCwgQ09PUkQgcywgQ09PUkQgYywgUFNNQUxMX1JFQ1QgcikKLXsK LSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBXcml0ZUNv bnNvbGVPdXRwdXRXX09yaWcgKGgsIHAsIHMsIGMsIHIpOwotfQotc3RhdGljIEJPT0wgV0lOQVBJ Ci1Xcml0ZUNvbnNvbGVPdXRwdXRDaGFyYWN0ZXJBX0hvb2tlZAotICAgICAoSEFORExFIGgsIExQ Q1NUUiBwLCBEV09SRCBsLCBDT09SRCBjLCBMUERXT1JEIG4pCi17Ci0gIHNldF9pc2h5YnJpZF9h bmRfc3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gV3JpdGVDb25zb2xlT3V0cHV0Q2hhcmFj dGVyQV9PcmlnIChoLCBwLCBsLCBjLCBuKTsKLX0KLXN0YXRpYyBCT09MIFdJTkFQSQotV3JpdGVD b25zb2xlT3V0cHV0Q2hhcmFjdGVyV19Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBMUENXU1RSIHAs IERXT1JEIGwsIENPT1JEIGMsIExQRFdPUkQgbikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0 Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBXcml0ZUNvbnNvbGVPdXRwdXRDaGFyYWN0ZXJXX09y aWcgKGgsIHAsIGwsIGMsIG4pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1Xcml0ZUNvbnNvbGVP dXRwdXRBdHRyaWJ1dGVfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgQ09OU1QgV09SRCAqYSwgRFdP UkQgbCwgQ09PUkQgYywgTFBEV09SRCBuKQotewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90 b19wY29uIChoKTsKLSAgcmV0dXJuIFdyaXRlQ29uc29sZU91dHB1dEF0dHJpYnV0ZV9PcmlnICho LCBhLCBsLCBjLCBuKTsKLX0KLXN0YXRpYyBCT09MIFdJTkFQSQotU2V0Q29uc29sZUN1cnNvclBv c2l0aW9uX0hvb2tlZAotICAgICAoSEFORExFIGgsIENPT1JEIGMpCi17Ci0gIHNldF9pc2h5YnJp ZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gU2V0Q29uc29sZUN1cnNvclBvc2l0 aW9uX09yaWcgKGgsIGMpOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1TZXRDb25zb2xlVGV4dEF0 dHJpYnV0ZV9Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBXT1JEIGEpCi17Ci0gIHNldF9pc2h5YnJp ZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gU2V0Q29uc29sZVRleHRBdHRyaWJ1 dGVfT3JpZyAoaCwgYSk7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVdyaXRlQ29uc29sZUlucHV0 QV9Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBDT05TVCBJTlBVVF9SRUNPUkQgKnIsIERXT1JEIGws IExQRFdPUkQgbikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0g IHJldHVybiBXcml0ZUNvbnNvbGVJbnB1dEFfT3JpZyAoaCwgciwgbCwgbik7Ci19Ci1zdGF0aWMg Qk9PTCBXSU5BUEkKLVdyaXRlQ29uc29sZUlucHV0V19Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBD T05TVCBJTlBVVF9SRUNPUkQgKnIsIERXT1JEIGwsIExQRFdPUkQgbikKLXsKLSAgc2V0X2lzaHli cmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBXcml0ZUNvbnNvbGVJbnB1dFdf T3JpZyAoaCwgciwgbCwgbik7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVJlYWRDb25zb2xlSW5w dXRBX0hvb2tlZAotICAgICAoSEFORExFIGgsIFBJTlBVVF9SRUNPUkQgciwgRFdPUkQgbCwgTFBE V09SRCBuKQotewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0 dXJuIFJlYWRDb25zb2xlSW5wdXRBX09yaWcgKGgsIHIsIGwsIG4pOwotfQotc3RhdGljIEJPT0wg V0lOQVBJCi1SZWFkQ29uc29sZUlucHV0V19Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBQSU5QVVRf UkVDT1JEIHIsIERXT1JEIGwsIExQRFdPUkQgbikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0 Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBSZWFkQ29uc29sZUlucHV0V19PcmlnIChoLCByLCBs LCBuKTsKLX0KLXN0YXRpYyBCT09MIFdJTkFQSQotUGVla0NvbnNvbGVJbnB1dEFfSG9va2VkCi0g ICAgIChIQU5ETEUgaCwgUElOUFVUX1JFQ09SRCByLCBEV09SRCBsLCBMUERXT1JEIG4pCi17Ci0g IHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gUGVla0NvbnNv bGVJbnB1dEFfT3JpZyAoaCwgciwgbCwgbik7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVBlZWtD b25zb2xlSW5wdXRXX0hvb2tlZAotICAgICAoSEFORExFIGgsIFBJTlBVVF9SRUNPUkQgciwgRFdP UkQgbCwgTFBEV09SRCBuKQotewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uICho KTsKLSAgcmV0dXJuIFBlZWtDb25zb2xlSW5wdXRXX09yaWcgKGgsIHIsIGwsIG4pOwotfQotLyog Q3JlYXRlUHJvY2VzcygpIGlzIGhvb2tlZCBmb3IgR0RCIGV0Yy4gKi8KIHN0YXRpYyBCT09MIFdJ TkFQSQogQ3JlYXRlUHJvY2Vzc0FfSG9va2VkCiAgICAgIChMUENTVFIgbiwgTFBTVFIgYywgTFBT RUNVUklUWV9BVFRSSUJVVEVTIHBhLCBMUFNFQ1VSSVRZX0FUVFJJQlVURVMgdGEsCkBAIC0zNjMs MTEgKzg4LDE0IEBAIENyZWF0ZVByb2Nlc3NBX0hvb2tlZAogICAgICAgTFBTVEFSVFVQSU5GT0Eg c2ksIExQUFJPQ0VTU19JTkZPUk1BVElPTiBwaSkKIHsKICAgSEFORExFIGg7Ci0gIGlmIChzaS0+ ZHdGbGFncyAmIFNUQVJURl9VU0VTVERIQU5ETEVTKQotICAgIGggPSBzaS0+aFN0ZE91dHB1dDsK LSAgZWxzZQotICAgIGggPSBHZXRTdGRIYW5kbGUgKFNURF9PVVRQVVRfSEFORExFKTsKLSAgc2V0 X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7CisgIGlmICghaXNIeWJyaWQpCisgICAg eworICAgICAgaWYgKHNpLT5kd0ZsYWdzICYgU1RBUlRGX1VTRVNUREhBTkRMRVMpCisJaCA9IHNp LT5oU3RkSW5wdXQ7CisgICAgICBlbHNlCisJaCA9IEdldFN0ZEhhbmRsZSAoU1REX0lOUFVUX0hB TkRMRSk7CisgICAgICBzZXRfc3dpdGNoX3RvX3Bjb24gKGgpOworICAgIH0KICAgcmV0dXJuIENy ZWF0ZVByb2Nlc3NBX09yaWcgKG4sIGMsIHBhLCB0YSwgaW5oLCBmLCBlLCBkLCBzaSwgcGkpOwog fQogc3RhdGljIEJPT0wgV0lOQVBJCkBAIC0zNzcsMTEgKzEwNSwxNCBAQCBDcmVhdGVQcm9jZXNz V19Ib29rZWQKICAgICAgIExQU1RBUlRVUElORk9XIHNpLCBMUFBST0NFU1NfSU5GT1JNQVRJT04g cGkpCiB7CiAgIEhBTkRMRSBoOwotICBpZiAoc2ktPmR3RmxhZ3MgJiBTVEFSVEZfVVNFU1RESEFO RExFUykKLSAgICBoID0gc2ktPmhTdGRPdXRwdXQ7Ci0gIGVsc2UKLSAgICBoID0gR2V0U3RkSGFu ZGxlIChTVERfT1VUUFVUX0hBTkRMRSk7Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bj b24gKGgpOworICBpZiAoIWlzSHlicmlkKQorICAgIHsKKyAgICAgIGlmIChzaS0+ZHdGbGFncyAm IFNUQVJURl9VU0VTVERIQU5ETEVTKQorCWggPSBzaS0+aFN0ZElucHV0OworICAgICAgZWxzZQor CWggPSBHZXRTdGRIYW5kbGUgKFNURF9JTlBVVF9IQU5ETEUpOworICAgICAgc2V0X3N3aXRjaF90 b19wY29uIChoKTsKKyAgICB9CiAgIHJldHVybiBDcmVhdGVQcm9jZXNzV19PcmlnIChuLCBjLCBw YSwgdGEsIGluaCwgZiwgZSwgZCwgc2ksIHBpKTsKIH0KIApAQCAtNDY0LDEwICsxOTUsNiBAQCBm aGFuZGxlcl9wdHlfbWFzdGVyOjpmbHVzaF90b19zbGF2ZSAoKQogewogICBpZiAoZ2V0X3JlYWRh aGVhZF92YWxpZCAoKSAmJiAhKGdldF90dHlwICgpLT50aS5jX2xmbGFnICYgSUNBTk9OKSkKICAg ICBhY2NlcHRfaW5wdXQgKCk7Ci0gIFdhaXRGb3JTaW5nbGVPYmplY3QgKGlucHV0X211dGV4LCBJ TkZJTklURSk7Ci0gIGlmICghZ2V0X3R0eXAgKCktPnBjb25faW5fZW1wdHkgJiYgIShnZXRfdHR5 cCAoKS0+dGkuY19sZmxhZyAmIElDQU5PTikpCi0gICAgU2V0RXZlbnQgKGlucHV0X2F2YWlsYWJs ZV9ldmVudCk7Ci0gIFJlbGVhc2VNdXRleCAoaW5wdXRfbXV0ZXgpOwogfQogCiBEV09SRApAQCAt NTMyLDE0ICsyNTksNiBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpkb2VjaG8gKGNvbnN0IHZvaWQg KnN0ciwgRFdPUkQgbGVuKQogICByZWxlYXNlX291dHB1dF9tdXRleCAoKTsKIH0KIAotaW50Ci1m aGFuZGxlcl9wdHlfbWFzdGVyOjpwdXRfcmVhZGFoZWFkIChjaGFyIHZhbHVlKQotewotICBpZiAo dG9fYmVfcmVhZF9mcm9tX3Bjb24gKCkpCi0gICAgcmV0dXJuIDE7Ci0gIHJldHVybiBmaGFuZGxl cl9iYXNlOjpwdXRfcmVhZGFoZWFkICh2YWx1ZSk7Ci19Ci0KIGludAogZmhhbmRsZXJfcHR5X21h c3Rlcjo6YWNjZXB0X2lucHV0ICgpCiB7CkBAIC01NTEsOSArMjcwLDExIEBAIGZoYW5kbGVyX3B0 eV9tYXN0ZXI6OmFjY2VwdF9pbnB1dCAoKQogICBjaGFyICpwID0gcmFidWYgKCkgKyByYWl4Z2V0 ICgpOwogICBieXRlc19sZWZ0ID0gZWF0X3JlYWRhaGVhZCAoLTEpOwogCisgIEhBTkRMRSB3cml0 ZV90byA9IGdldF9vdXRwdXRfaGFuZGxlICgpOwogICBpZiAodG9fYmVfcmVhZF9mcm9tX3Bjb24g KCkpCi0gICAgOyAvKiBEbyBub3RoaW5nICovCi0gIGVsc2UgaWYgKCFieXRlc19sZWZ0KQorICAg IHdyaXRlX3RvID0gdG9fc2xhdmU7CisKKyAgaWYgKCFieXRlc19sZWZ0KQogICAgIHsKICAgICAg IHRlcm1pb3NfcHJpbnRmICgic2VuZGluZyBFT0YgdG8gc2xhdmUiKTsKICAgICAgIGdldF90dHlw ICgpLT5yZWFkX3JldHZhbCA9IDA7CkBAIC01NjQsMTAgKzI4NSwxMCBAQCBmaGFuZGxlcl9wdHlf bWFzdGVyOjphY2NlcHRfaW5wdXQgKCkKICAgICAgIERXT1JEIHdyaXR0ZW4gPSAwOwogCiAgICAg ICBwYXJhbm9pZF9wcmludGYgKCJhYm91dCB0byB3cml0ZSAldSBjaGFycyB0byBzbGF2ZSIsIGJ5 dGVzX2xlZnQpOwotICAgICAgcmMgPSBXcml0ZUZpbGUgKGdldF9vdXRwdXRfaGFuZGxlICgpLCBw LCBieXRlc19sZWZ0LCAmd3JpdHRlbiwgTlVMTCk7CisgICAgICByYyA9IFdyaXRlRmlsZSAod3Jp dGVfdG8sIHAsIGJ5dGVzX2xlZnQsICZ3cml0dGVuLCBOVUxMKTsKICAgICAgIGlmICghcmMpCiAJ ewotCSAgZGVidWdfcHJpbnRmICgiZXJyb3Igd3JpdGluZyB0byBwaXBlICVwICVFIiwgZ2V0X291 dHB1dF9oYW5kbGUgKCkpOworCSAgZGVidWdfcHJpbnRmICgiZXJyb3Igd3JpdGluZyB0byBwaXBl ICVwICVFIiwgd3JpdGVfdG8pOwogCSAgZ2V0X3R0eXAgKCktPnJlYWRfcmV0dmFsID0gLTE7CiAJ ICByZXQgPSAtMTsKIAl9CkBAIC03MjUsNTIgKzQ0NiwxMiBAQCBvdXQ6CiAKIGZoYW5kbGVyX3B0 eV9zbGF2ZTo6ZmhhbmRsZXJfcHR5X3NsYXZlIChpbnQgdW5pdCkKICAgOiBmaGFuZGxlcl9wdHlf Y29tbW9uICgpLCBpbnVzZSAoTlVMTCksIG91dHB1dF9oYW5kbGVfY3lnIChOVUxMKSwKLSAgaW9f aGFuZGxlX2N5ZyAoTlVMTCksIHBpZF9yZXN0b3JlICgwKSwgZmQgKC0xKQorICBpb19oYW5kbGVf Y3lnIChOVUxMKQogewogICBpZiAodW5pdCA+PSAwKQogICAgIGRldiAoKS5wYXJzZSAoREVWX1BU WVNfTUFKT1IsIHVuaXQpOwogfQogCi1maGFuZGxlcl9wdHlfc2xhdmU6On5maGFuZGxlcl9wdHlf c2xhdmUgKCkKLXsKLSAgaWYgKCFnZXRfdHR5cCAoKSkKLSAgICB7Ci0gICAgICAvKiBXaHkgY29t ZXMgaGVyZT8gV2hvIGNsZWFycyBfdGM/ICovCi0gICAgICBmcmVlX2F0dGFjaGVkX2NvbnNvbGUg KCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICBpZiAoZ2V0X3BzZXVkb19jb25zb2xlICgpKQot ICAgIHsKLSAgICAgIGludCB1c2VkID0gMDsKLSAgICAgIGludCBhdHRhY2hlZCA9IDA7Ci0gICAg ICBjeWdoZWFwX2ZkZW51bSBjZmQgKGZhbHNlKTsKLSAgICAgIHdoaWxlIChjZmQubmV4dCAoKSA+ PSAwKQotCXsKLQkgIGlmIChjZmQtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZU19NQUpPUiB8fAot CSAgICAgIGNmZC0+Z2V0X21ham9yICgpID09IERFVl9DT05TX01BSk9SKQotCSAgICB1c2VkICsr OwotCSAgaWYgKGNmZC0+Z2V0X21ham9yICgpID09IERFVl9QVFlTX01BSk9SICYmCi0JICAgICAg Y2ZkLT5nZXRfbWlub3IgKCkgPT0gcGNvbl9hdHRhY2hlZF90bykKLQkgICAgYXR0YWNoZWQgKys7 Ci0JfQotCi0gICAgICAvKiBDYWxsIEZyZWVDb25zb2xlKCkgaWYgbm8gdHR5IGlzIG9wZW5lZCBh bmQgdGhlIHByb2Nlc3MKLQkgaXMgYXR0YWNoZWQgdG8gY29uc29sZSBjb3JyZXNwb25kaW5nIHRv IHR0eS4gVGhpcyBpcwotCSBuZWVkZWQgdG8gbWFrZSBHTlUgc2NyZWVuIGFuZCB0bXV4IHdvcmsg aW4gV2luZG93cyAxMAotCSAxOTAzLiAqLwotICAgICAgaWYgKGF0dGFjaGVkID09IDApCi0Jewot CSAgcGNvbl9hdHRhY2hlZF90byA9IC0xOwotCSAgbGFzdF90dHlwID0gZ2V0X3R0eXAgKCk7Ci0J fQotICAgICAgaWYgKHVzZWQgPT0gMCkKLQl7Ci0JICBpbml0X2NvbnNvbGVfaGFuZGxlciAoZmFs c2UpOwotCSAgZnJlZV9hdHRhY2hlZF9jb25zb2xlICgpOwotCX0KLSAgICB9Ci19Ci0KIGludAog ZmhhbmRsZXJfcHR5X3NsYXZlOjpvcGVuIChpbnQgZmxhZ3MsIG1vZGVfdCkKIHsKQEAgLTk1MCwy NCArNjMxLDcgQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpvcGVuIChpbnQgZmxhZ3MsIG1vZGVfdCkK ICAgc2V0X291dHB1dF9oYW5kbGUgKHRvX21hc3Rlcl9sb2NhbCk7CiAgIHNldF9vdXRwdXRfaGFu ZGxlX2N5ZyAodG9fbWFzdGVyX2N5Z19sb2NhbCk7CiAKLSAgaWYgKCFnZXRfcHNldWRvX2NvbnNv bGUgKCkpCi0gICAgewotICAgICAgZmhhbmRsZXJfY29uc29sZTo6bmVlZF9pbnZpc2libGUgKCk7 Ci0gICAgICBwY29uX2F0dGFjaGVkX3RvID0gLTE7Ci0gICAgfQotICBlbHNlIGlmICghZmhhbmRs ZXJfY29uc29sZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZAotCQkJICAgICAgIChHZXRDdXJyZW50 UHJvY2Vzc0lkICgpLCB0cnVlKSkKLSAgICB7Ci0gICAgICBmaGFuZGxlcl9jb25zb2xlOjpuZWVk X2ludmlzaWJsZSAoKTsKLSAgICAgIHBjb25fYXR0YWNoZWRfdG8gPSAtMTsKLSAgICB9Ci0gIGVs c2UgaWYgKGZoYW5kbGVyX2NvbnNvbGU6OmdldF9jb25zb2xlX3Byb2Nlc3NfaWQKLQkJCSAgICAg ICAoZ2V0X2hlbHBlcl9wcm9jZXNzX2lkICgpLCB0cnVlKSkKLSAgICAvKiBBdHRhY2hlZCB0byBw Y29uIG9mIHRoaXMgcHR5ICovCi0gICAgewotICAgICAgcGNvbl9hdHRhY2hlZF90byA9IGdldF9t aW5vciAoKTsKLSAgICAgIGluaXRfY29uc29sZV9oYW5kbGVyICh0cnVlKTsKLSAgICB9CisgIGZo YW5kbGVyX2NvbnNvbGU6Om5lZWRfaW52aXNpYmxlICgpOwogCiAgIHNldF9vcGVuX3N0YXR1cyAo KTsKICAgcmV0dXJuIDE7CkBAIC0xMDIxLDggKzY4NSw3IEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6 Y2xvc2UgKCkKICAgaWYgKCFGb3JjZUNsb3NlSGFuZGxlIChnZXRfaGFuZGxlX2N5ZyAoKSkpCiAg ICAgdGVybWlvc19wcmludGYgKCJDbG9zZUhhbmRsZSAoZ2V0X2hhbmRsZV9jeWcgKCk8JXA+KSwg JUUiLAogCWdldF9oYW5kbGVfY3lnICgpKTsKLSAgaWYgKCFnZXRfcHNldWRvX2NvbnNvbGUgKCkg JiYKLSAgICAgICh1bnNpZ25lZCkgbXlzZWxmLT5jdHR5ID09IEZIREVWIChERVZfUFRZU19NQUpP UiwgZ2V0X21pbm9yICgpKSkKKyAgaWYgKCh1bnNpZ25lZCkgbXlzZWxmLT5jdHR5ID09IEZIREVW IChERVZfUFRZU19NQUpPUiwgZ2V0X21pbm9yICgpKSkKICAgICBmaGFuZGxlcl9jb25zb2xlOjpm cmVlX2NvbnNvbGUgKCk7CS8qIGFzc3VtZXMgdGhhdCB3ZSBhcmUgdGhlIGxhc3QgcHR5IGNsb3Nl ciAqLwogICBmaGFuZGxlcl9wdHlfY29tbW9uOjpjbG9zZSAoKTsKICAgaWYgKCFGb3JjZUNsb3Nl SGFuZGxlIChvdXRwdXRfbXV0ZXgpKQpAQCAtMTA3MCwyMzQgKzczMywxNyBAQCBmaGFuZGxlcl9w dHlfc2xhdmU6OmluaXQgKEhBTkRMRSBoLCBEV09SRCBhLCBtb2RlX3QpCiAgIHJldHVybiByZXQ7 CiB9CiAKLWJvb2wKLWZoYW5kbGVyX3B0eV9zbGF2ZTo6dHJ5X3JlYXR0YWNoX3Bjb24gKHZvaWQp Ci17Ci0gIHBpZF9yZXN0b3JlID0gMDsKLQotICAvKiBEbyBub3QgZGV0YWNoIGZyb20gdGhlIGNv bnNvbGUgYmVjYXVzZSByZS1hdHRhY2hpbmcgd2lsbAotICAgICBmYWlsIGlmIGhlbHBlciBwcm9j ZXNzIGlzIHJ1bm5pbmcgYXMgc2VydmljZSBhY2NvdW50LiAqLwotICBpZiAoZ2V0X3R0eXAoKS0+ YXR0YWNoX3Bjb25faW5fZm9yaykKLSAgICByZXR1cm4gZmFsc2U7Ci0gIGlmIChwY29uX2F0dGFj aGVkX3RvID49IDAgJiYKLSAgICAgIGN5Z3dpbl9zaGFyZWQtPnR0eVtwY29uX2F0dGFjaGVkX3Rv XS0+YXR0YWNoX3Bjb25faW5fZm9yaykKLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgcGlkX3Jlc3Rv cmUgPQotICAgIGZoYW5kbGVyX2NvbnNvbGU6OmdldF9jb25zb2xlX3Byb2Nlc3NfaWQgKEdldEN1 cnJlbnRQcm9jZXNzSWQgKCksCi0JCQkJCSAgICAgIGZhbHNlKTsKLSAgLyogSWYgcGlkX3Jlc3Rv cmUgaXMgbm90IHNldCwgZ2l2ZSB1cC4gKi8KLSAgaWYgKCFwaWRfcmVzdG9yZSkKLSAgICByZXR1 cm4gZmFsc2U7Ci0KLSAgRnJlZUNvbnNvbGUgKCk7Ci0gIGlmICghQXR0YWNoQ29uc29sZSAoZ2V0 X2hlbHBlcl9wcm9jZXNzX2lkICgpKSkKLSAgICB7Ci0gICAgICBzeXN0ZW1fcHJpbnRmICgicHR5 JWQ6IEF0dGFjaENvbnNvbGUoaGVscGVyPSVkKSBmYWlsZWQuIDB4JTA4bHgiLAotCQkgICAgIGdl dF9taW5vciAoKSwgZ2V0X2hlbHBlcl9wcm9jZXNzX2lkICgpLCBHZXRMYXN0RXJyb3IgKCkpOwot ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQKLWZo YW5kbGVyX3B0eV9zbGF2ZTo6cmVzdG9yZV9yZWF0dGFjaF9wY29uICh2b2lkKQorZmhhbmRsZXJf cHR5X3NsYXZlOjpzZXRfc3dpdGNoX3RvX3Bjb24gKHZvaWQpCiB7Ci0gIGlmIChwaWRfcmVzdG9y ZSkKKyAgaWYgKCFnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4pCiAgICAgewotICAgICAg RnJlZUNvbnNvbGUgKCk7Ci0gICAgICBpZiAoIUF0dGFjaENvbnNvbGUgKHBpZF9yZXN0b3JlKSkK LQl7Ci0JICBzeXN0ZW1fcHJpbnRmICgicHR5JWQ6IEF0dGFjaENvbnNvbGUocmVzdG9yZT0lZCkg ZmFpbGVkLiAweCUwOGx4IiwKLQkJCSBnZXRfbWlub3IgKCksIHBpZF9yZXN0b3JlLCBHZXRMYXN0 RXJyb3IgKCkpOwotCSAgcGNvbl9hdHRhY2hlZF90byA9IC0xOwotCX0KLSAgICB9Ci0gIHBpZF9y ZXN0b3JlID0gMDsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiByZXF1ZXN0cyB0cmFuc2ZlcmluZyB0 aGUgaW5wdXQgZGF0YSBmcm9tIHRoZSBpbnB1dAotICAgcGlwZSBmb3IgY3lnd2luIGFwcHMgdG8g dGhlIG90aGVyIGlucHV0IHBpcGUgZm9yIG5hdGl2ZSBhcHBzLiAqLwotdm9pZAotZmhhbmRsZXJf cHR5X3NsYXZlOjpwdWxsX3Bjb25faW5wdXQgKHZvaWQpCi17Ci0gIGdldF90dHlwICgpLT5yZXFf dHJhbnNmZXJfaW5wdXRfdG9fcGNvbiA9IHRydWU7Ci0gIHdoaWxlIChnZXRfdHR5cCAoKS0+cmVx X3RyYW5zZmVyX2lucHV0X3RvX3Bjb24pCi0gICAgU2xlZXAgKDEpOwotfQotCi12b2lkCi1maGFu ZGxlcl9wdHlfc2xhdmU6OnVwZGF0ZV9wY29uX2lucHV0X3N0YXRlIChib29sIG5lZWRfbG9jaykK LXsKLSAgaWYgKG5lZWRfbG9jaykKLSAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0IChpbnB1dF9tdXRl eCwgSU5GSU5JVEUpOwotICAvKiBGbHVzaCBpbnB1dCBidWZmZXIgaWYgaXQgaXMgcmVxdWVzdGVk IGJ5IG1hc3Rlci4KLSAgICAgVGhpcyBoYXBwZW5zIGlmIF5DIGlzIHByZXNzZWQgaW4gcHNldWRv IGNvbnNvbGUgc2lkZS4gKi8KLSAgaWYgKGdldF90dHlwICgpLT5yZXFfZmx1c2hfcGNvbl9pbnB1 dCkKLSAgICB7Ci0gICAgICBGbHVzaENvbnNvbGVJbnB1dEJ1ZmZlciAoZ2V0X2hhbmRsZSAoKSk7 Ci0gICAgICBnZXRfdHR5cCAoKS0+cmVxX2ZsdXNoX3Bjb25faW5wdXQgPSBmYWxzZTsKLSAgICB9 Ci0gIC8qIFBlZWsgY29uc29sZSBpbnB1dCBidWZmZXIgYW5kIHVwZGF0ZSBzdGF0ZS4gKi8KLSAg SU5QVVRfUkVDT1JEIGlucFtJTlJFQ19TSVpFXTsKLSAgRFdPUkQgbjsKLSAgQk9PTCAoV0lOQVBJ ICpQZWVrRnVuYykKLSAgICAoSEFORExFLCBQSU5QVVRfUkVDT1JELCBEV09SRCwgTFBEV09SRCk7 Ci0gIFBlZWtGdW5jID0KLSAgICBQZWVrQ29uc29sZUlucHV0QV9PcmlnID8gOiBQZWVrQ29uc29s ZUlucHV0OwotICBQZWVrRnVuYyAoZ2V0X2hhbmRsZSAoKSwgaW5wLCBJTlJFQ19TSVpFLCAmbik7 Ci0gIGJvb2wgc2F3X2FjY2VwdCA9IGZhbHNlOwotICBib29sIHBpcGVfZW1wdHkgPSB0cnVlOwot ICB3aGlsZSAobi0tID4gMCkKLSAgICBpZiAoaW5wW25dLkV2ZW50VHlwZSA9PSBLRVlfRVZFTlQg JiYgaW5wW25dLkV2ZW50LktleUV2ZW50LmJLZXlEb3duICYmCi0JaW5wW25dLkV2ZW50LktleUV2 ZW50LnVDaGFyLkFzY2lpQ2hhcikKLSAgICAgIHsKLQlwaXBlX2VtcHR5ID0gZmFsc2U7Ci0JY2hh ciBjID0gaW5wW25dLkV2ZW50LktleUV2ZW50LnVDaGFyLkFzY2lpQ2hhcjsKLQljb25zdCBjaGFy IHNpZ3NbXSA9IHsKLQkgIChjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWSU5UUl0sCi0JICAo Y2hhcikgZ2V0X3R0eXAgKCktPnRpLmNfY2NbVlFVSVRdLAotCSAgKGNoYXIpIGdldF90dHlwICgp LT50aS5jX2NjW1ZTVVNQXSwKLQl9OwotCWNvbnN0IGNoYXIgZW9sc1tdID0gewotCSAgKGNoYXIp IGdldF90dHlwICgpLT50aS5jX2NjW1ZFT0ZdLAotCSAgKGNoYXIpIGdldF90dHlwICgpLT50aS5j X2NjW1ZFT0xdLAotCSAgKGNoYXIpIGdldF90dHlwICgpLT50aS5jX2NjW1ZFT0wyXSwKLQkgICdc bicsCi0JICAnXHInCi0JfTsKLQlpZiAoaXNfbGluZV9pbnB1dCAoKSAmJiBjICYmIG1lbWNociAo ZW9scywgYywgc2l6ZW9mIChlb2xzKSkpCi0JICBzYXdfYWNjZXB0ID0gdHJ1ZTsKLQlpZiAoKGdl dF90dHlwICgpLT50aS5jX2xmbGFnICYgSVNJRykKLQkgICAgJiYgYyAmJiBtZW1jaHIgKHNpZ3Ms IGMsIHNpemVvZiAoc2lncykpKQotCSAgc2F3X2FjY2VwdCA9IHRydWU7Ci0gICAgICB9Ci0gIGdl dF90dHlwICgpLT5wY29uX2luX2VtcHR5ID0gcGlwZV9lbXB0eSAmJiAhKHJhbGVuICgpID4gcmFp eGdldCAoKSk7Ci0gIGlmICghZ2V0X3JlYWRhaGVhZF92YWxpZCAoKSAmJgotICAgICAgKHBpcGVf ZW1wdHkgfHwgKGlzX2xpbmVfaW5wdXQgKCkgJiYgIXNhd19hY2NlcHQpKSAmJgotICAgICAgZ2V0 X3R0eXAgKCktPnJlYWRfcmV0dmFsID09IDEgJiYgYnl0ZXNfYXZhaWxhYmxlIChuKSAmJiBuID09 IDApCi0gICAgUmVzZXRFdmVudCAoaW5wdXRfYXZhaWxhYmxlX2V2ZW50KTsKLSAgaWYgKG5lZWRf bG9jaykKLSAgICBSZWxlYXNlTXV0ZXggKGlucHV0X211dGV4KTsKLX0KLQotaW50Ci1maGFuZGxl cl9wdHlfc2xhdmU6OmVhdF9yZWFkYWhlYWQgKGludCBuKQotewotICBpbnQgb3JhbGVuID0gcmFs ZW4gKCk7Ci0gIGlmIChuIDwgMCkKLSAgICBuID0gcmFsZW4gKCkgLSByYWl4Z2V0ICgpOwotICBp ZiAobiA+IDAgJiYgcmFsZW4gKCkgPiByYWl4Z2V0ICgpKQotICAgIHsKLSAgICAgIGNvbnN0IGNo YXIgZW9sc1tdID0gewotCShjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9GXSwKLQkoY2hh cikgZ2V0X3R0eXAgKCktPnRpLmNfY2NbVkVPTF0sCi0JKGNoYXIpIGdldF90dHlwICgpLT50aS5j X2NjW1ZFT0wyXSwKLQknXG4nCi0gICAgICB9OwotICAgICAgd2hpbGUgKG4gPiAwICYmIHJhbGVu ICgpID4gcmFpeGdldCAoKSkKLQl7Ci0JICBpZiAoaXNfbGluZV9pbnB1dCAoKSAmJiByYWJ1ZiAo KVtyYWxlbiAoKS0xXQotCSAgICAgICYmIG1lbWNociAoZW9scywgcmFidWYgKClbcmFsZW4gKCkt MV0sIHNpemVvZiAoZW9scykpKQotCSAgICBicmVhazsKLQkgIC0tIG47Ci0JICAtLSByYWxlbiAo KTsKLQl9Ci0KLSAgICAgIC8qIElmIElVVEY4IGlzIHNldCwgdGhlIHRlcm1pbmFsIGlzIGluIFVU Ri04IG1vZGUuICBJZiBzbywgd2UgZXJhc2UKLQkgYSBjb21wbGV0ZSBVVEYtOCBtdWx0aWJ5dGUg c2VxdWVuY2Ugb24gVkVSQVNFL1ZXRVJBU0UuICBPdGhlcndpc2UsCi0JIGlmIHdlIG9ubHkgZXJh c2UgYSBzaW5nbGUgYnl0ZSwgaW52YWxpZCB1bmljb2RlIGNoYXJzIGFyZSBsZWZ0IGluCi0JIHRo ZSBpbnB1dC4gKi8KLSAgICAgIGlmIChnZXRfdHR5cCAoKS0+dGkuY19pZmxhZyAmIElVVEY4KQot CXdoaWxlIChyYWxlbiAoKSA+IHJhaXhnZXQgKCkgJiYKLQkgICAgICAgKCh1bnNpZ25lZCBjaGFy KSByYWJ1ZiAoKVtyYWxlbiAoKV0gJiAweGMwKSA9PSAweDgwKQotCSAgLS1yYWxlbiAoKTsKLSAg ICB9Ci0gIG9yYWxlbiA9IG9yYWxlbiAtIHJhbGVuICgpOwotICBpZiAocmFpeGdldCAoKSA+PSBy YWxlbiAoKSkKLSAgICByYWl4Z2V0ICgpID0gcmFpeHB1dCAoKSA9IHJhbGVuICgpID0gMDsKLSAg ZWxzZSBpZiAocmFpeHB1dCAoKSA+IHJhbGVuICgpKQotICAgIHJhaXhwdXQgKCkgPSByYWxlbiAo KTsKLQotICByZXR1cm4gb3JhbGVuOwotfQotCi1pbnQKLWZoYW5kbGVyX3B0eV9zbGF2ZTo6Z2V0 X3JlYWRhaGVhZF9pbnRvX2J1ZmZlciAoY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQotewotICBp bnQgY2g7Ci0gIGludCBjb3BpZWRfY2hhcnMgPSAwOwotCi0gIHdoaWxlIChidWZsZW4pCi0gICAg aWYgKChjaCA9IGdldF9yZWFkYWhlYWQgKCkpIDwgMCkKLSAgICAgIGJyZWFrOwotICAgIGVsc2UK LSAgICAgIHsKLQljb25zdCBjaGFyIGVvbHNbXSA9IHsKLQkgIChjaGFyKSBnZXRfdHR5cCAoKS0+ dGkuY19jY1tWRU9GXSwKLQkgIChjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9MXSwKLQkg IChjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9MMl0sCi0JICAnXG4nCi0JfTsKLQlidWZb Y29waWVkX2NoYXJzKytdID0gKHVuc2lnbmVkIGNoYXIpKGNoICYgMHhmZik7Ci0JYnVmbGVuLS07 Ci0JaWYgKGlzX2xpbmVfaW5wdXQgKCkgJiYgY2ggJiYgbWVtY2hyIChlb2xzLCBjaCAmIDB4ZmYs IHNpemVvZiAoZW9scykpKQotCSAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgcmV0dXJuIGNvcGllZF9j aGFyczsKLX0KLQotYm9vbAotZmhhbmRsZXJfcHR5X3NsYXZlOjpnZXRfcmVhZGFoZWFkX3ZhbGlk ICh2b2lkKQotewotICBpZiAoaXNfbGluZV9pbnB1dCAoKSkKLSAgICB7Ci0gICAgICBjb25zdCBj aGFyIGVvbHNbXSA9IHsKLQkoY2hhcikgZ2V0X3R0eXAgKCktPnRpLmNfY2NbVkVPRl0sCi0JKGNo YXIpIGdldF90dHlwICgpLT50aS5jX2NjW1ZFT0xdLAotCShjaGFyKSBnZXRfdHR5cCAoKS0+dGku Y19jY1tWRU9MMl0sCi0JJ1xuJwotICAgICAgfTsKLSAgICAgIGZvciAoc2l6ZV90IGk9cmFpeGdl dCAoKTsgaTxyYWxlbiAoKTsgaSsrKQotCWlmIChyYWJ1ZiAoKVtpXSAmJiBtZW1jaHIgKGVvbHMs IHJhYnVmICgpW2ldLCBzaXplb2YgKGVvbHMpKSkKLQkgIHJldHVybiB0cnVlOwotICAgICAgcmV0 dXJuIGZhbHNlOwotICAgIH0KLSAgZWxzZQotICAgIHJldHVybiByYWxlbiAoKSA+IHJhaXhnZXQg KCk7Ci19Ci0KLXZvaWQKLWZoYW5kbGVyX3B0eV9zbGF2ZTo6c2V0X3N3aXRjaF90b19wY29uIChp bnQgZmRfc2V0KQotewotICBpZiAoZmQgPCAwKQotICAgIGZkID0gZmRfc2V0OwotICBhY3F1aXJl X291dHB1dF9tdXRleCAoSU5GSU5JVEUpOwotICBpZiAoZmQgPT0gMCAmJiAhZ2V0X3R0eXAgKCkt PnN3aXRjaF90b19wY29uX2luKQotICAgIHsKLSAgICAgIHB1bGxfcGNvbl9pbnB1dCAoKTsKKyAg ICAgIGlzSHlicmlkID0gdHJ1ZTsKICAgICAgIGlmIChnZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0g MCB8fAogCSAgIXBpbmZvIChnZXRfdHR5cCAoKS0+cGNvbl9waWQpKQogCWdldF90dHlwICgpLT5w Y29uX3BpZCA9IG15c2VsZi0+cGlkOwogICAgICAgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29u X2luID0gdHJ1ZTsKLSAgICAgIGlmIChpc0h5YnJpZCAmJiAhZ2V0X3R0eXAgKCktPnN3aXRjaF90 b19wY29uX291dCkKLQl7Ci0JICBnZXRfdHR5cCAoKS0+d2FpdF9wY29uX2Z3ZCAoKTsKLQkgIGdl dF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQgPSB0cnVlOwotCX0KICAgICB9Ci0gIGVsc2Ug aWYgKChmZCA9PSAxIHx8IGZkID09IDIpICYmICFnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25f b3V0KQotICAgIHsKLSAgICAgIGdldF90dHlwICgpLT53YWl0X3Bjb25fZndkICgpOwotICAgICAg aWYgKGdldF90dHlwICgpLT5wY29uX3BpZCA9PSAwIHx8Ci0JICAhcGluZm8gKGdldF90dHlwICgp LT5wY29uX3BpZCkpCi0JZ2V0X3R0eXAgKCktPnBjb25fcGlkID0gbXlzZWxmLT5waWQ7Ci0gICAg ICBnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25fb3V0ID0gdHJ1ZTsKLSAgICAgIGlmIChpc0h5 YnJpZCkKLQlnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4gPSB0cnVlOwotICAgIH0KLSAg cmVsZWFzZV9vdXRwdXRfbXV0ZXggKCk7CiB9CiAKIHZvaWQKQEAgLTEzMTAsMTgzICs3NTYsMTAg QEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpyZXNldF9zd2l0Y2hfdG9fcGNvbiAodm9pZCkKICAgICBy ZXR1cm47CiAgIGlmIChpc0h5YnJpZCkKICAgICByZXR1cm47Ci0gIGlmIChkb19ub3RfcmVzZXRf c3dpdGNoX3RvX3Bjb24pCi0gICAgcmV0dXJuOwotICBhY3F1aXJlX291dHB1dF9tdXRleCAoSU5G SU5JVEUpOwotICBpZiAoZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX291dCkKLSAgICAvKiBX YWl0IGZvciBwdHlfbWFzdGVyX2Z3ZF90aHJlYWQoKSAqLwotICAgIGdldF90dHlwICgpLT53YWl0 X3Bjb25fZndkICgpOwogICBnZXRfdHR5cCAoKS0+cGNvbl9waWQgPSAwOwogICBnZXRfdHR5cCAo KS0+c3dpdGNoX3RvX3Bjb25faW4gPSBmYWxzZTsKLSAgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19w Y29uX291dCA9IGZhbHNlOwotICByZWxlYXNlX291dHB1dF9tdXRleCAoKTsKLSAgaW5pdF9jb25z b2xlX2hhbmRsZXIgKHRydWUpOwotfQotCi12b2lkCi1maGFuZGxlcl9wdHlfc2xhdmU6OnB1c2hf dG9fcGNvbl9zY3JlZW5idWZmZXIgKGNvbnN0IGNoYXIgKnB0ciwgc2l6ZV90IGxlbiwKLQkJCQkJ ICAgICAgIGJvb2wgaXNfZWNobykKLXsKLSAgYm9vbCBhdHRhY2hlZCA9Ci0gICAgISFmaGFuZGxl cl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkIChnZXRfaGVscGVyX3Byb2Nlc3NfaWQg KCksIHRydWUpOwotICBpZiAoIWF0dGFjaGVkICYmIHBjb25fYXR0YWNoZWRfdG8gPT0gZ2V0X21p bm9yICgpKQotICAgIHsKLSAgICAgIGZvciAoRFdPUkQgdDAgPSBHZXRUaWNrQ291bnQgKCk7IEdl dFRpY2tDb3VudCAoKSAtIHQwIDwgMTAwOyApCi0JewotCSAgU2xlZXAgKDEpOwotCSAgYXR0YWNo ZWQgPSBmaGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkCi0JCQkJICAgICAg KGdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKSwgdHJ1ZSk7Ci0JICBpZiAoYXR0YWNoZWQpCi0JICAg IGJyZWFrOwotCX0KLSAgICAgIGlmICghYXR0YWNoZWQpCi0JewotCSAgc3lzdGVtX3ByaW50ZiAo InB0eSVkOiBwY29uX2F0dGFjaF90byBtaXNtYXRjaD8/Pz8/PyIsIGdldF9taW5vciAoKSk7Ci0J ICByZXR1cm47Ci0JfQotICAgIH0KLQotICAvKiBJZiBub3QgYXR0YWNoZWQgdG8gdGhpcyBwc2V1 ZG8gY29uc29sZSwgdHJ5IHRvIGF0dGFjaCB0ZW1wb3JhcmlseS4gKi8KLSAgcGlkX3Jlc3RvcmUg PSAwOwotICBpZiAocGNvbl9hdHRhY2hlZF90byAhPSBnZXRfbWlub3IgKCkpCi0gICAgaWYgKCF0 cnlfcmVhdHRhY2hfcGNvbiAoKSkKLSAgICAgIGdvdG8gZGV0YWNoOwotCi0gIGNoYXIgKmJ1ZjsK LSAgc2l6ZV90IG5sZW47Ci0gIERXT1JEIG9yaWdDUDsKLSAgb3JpZ0NQID0gR2V0Q29uc29sZU91 dHB1dENQICgpOwotICBTZXRDb25zb2xlT3V0cHV0Q1AgKGdldF90dHlwICgpLT50ZXJtX2NvZGVf cGFnZSk7Ci0gIC8qIEp1c3QgY29weSAqLwotICBidWYgPSAoY2hhciAqKSBIZWFwQWxsb2MgKEdl dFByb2Nlc3NIZWFwICgpLCAwLCBsZW4pOwotICBtZW1jcHkgKGJ1ZiwgKGNoYXIgKilwdHIsIGxl bik7Ci0gIG5sZW4gPSBsZW47Ci0gIGNoYXIgKnAwLCAqcDE7Ci0gIHAwID0gcDEgPSBidWY7Ci0g IC8qIFJlbW92ZSBhbHRlcm5hdGUgc2NyZWVuIGJ1ZmZlciBkcmF3aW5nICovCi0gIHdoaWxlIChw MCAmJiBwMSkKLSAgICB7Ci0gICAgICBpZiAoIWdldF90dHlwICgpLT5zY3JlZW5fYWx0ZXJuYXRl ZCkKLQl7Ci0JICAvKiBDaGVjayBzd2l0Y2hpbmcgdG8gYWx0ZXJuYXRlIHNjcmVlbiBidWZmZXIg Ki8KLQkgIHAwID0gKGNoYXIgKikgbWVtbWVtIChwMSwgbmxlbiAtIChwMS1idWYpLCAiXDAzM1s/ MTA0OWgiLCA4KTsKLQkgIGlmIChwMCkKLQkgICAgewotCSAgICAgIC8vcDAgKz0gODsKLQkgICAg ICBnZXRfdHR5cCAoKS0+c2NyZWVuX2FsdGVybmF0ZWQgPSB0cnVlOwotCSAgICAgIGlmIChnZXRf dHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25fb3V0KQotCQlkb19ub3RfcmVzZXRfc3dpdGNoX3RvX3Bj b24gPSB0cnVlOwotCSAgICB9Ci0JfQotICAgICAgaWYgKGdldF90dHlwICgpLT5zY3JlZW5fYWx0 ZXJuYXRlZCkKLQl7Ci0JICAvKiBDaGVjayBzd2l0Y2hpbmcgdG8gbWFpbiBzY3JlZW4gYnVmZmVy ICovCi0JICBwMSA9IChjaGFyICopIG1lbW1lbSAocDAsIG5sZW4gLSAocDAtYnVmKSwgIlwwMzNb PzEwNDlsIiwgOCk7Ci0JICBpZiAocDEpCi0JICAgIHsKLQkgICAgICBwMSArPSA4OwotCSAgICAg IGdldF90dHlwICgpLT5zY3JlZW5fYWx0ZXJuYXRlZCA9IGZhbHNlOwotCSAgICAgIGRvX25vdF9y ZXNldF9zd2l0Y2hfdG9fcGNvbiA9IGZhbHNlOwotCSAgICAgIG1lbW1vdmUgKHAwLCBwMSwgYnVm K25sZW4gLSBwMSk7Ci0JICAgICAgbmxlbiAtPSBwMSAtIHAwOwotCSAgICB9Ci0JICBlbHNlCi0J ICAgIG5sZW4gPSBwMCAtIGJ1ZjsKLQl9Ci0gICAgfQotICBpZiAoIW5sZW4pIC8qIE5vdGhpbmcg dG8gYmUgc3luY2hyb25pemVkICovCi0gICAgZ290byBjbGVhbnVwOwotICBpZiAoZ2V0X3R0eXAg KCktPnN3aXRjaF90b19wY29uX291dCAmJiAhaXNfZWNobykKLSAgICBnb3RvIGNsZWFudXA7Ci0g IC8qIFJlbW92ZSBFU0Mgc2VxdWVuY2Ugd2hpY2ggcmV0dXJucyByZXN1bHRzIHRvIGNvbnNvbGUK LSAgICAgaW5wdXQgYnVmZmVyLiBXaXRob3V0IHRoaXMsIGN1cnNvciBwb3NpdGlvbiByZXBvcnQK LSAgICAgaXMgcHV0IGludG8gdGhlIGlucHV0IGJ1ZmZlciBhcyBhIGdhcmJhZ2UuICovCi0gIC8q IFJlbW92ZSBFU0Mgc2VxdWVuY2UgdG8gcmVwb3J0IGN1cnNvciBwb3NpdGlvbi4gKi8KLSAgd2hp bGUgKChwMCA9IChjaGFyICopIG1lbW1lbSAoYnVmLCBubGVuLCAiXDAzM1s2biIsIDQpKSkKLSAg ICB7Ci0gICAgICBtZW1tb3ZlIChwMCwgcDArNCwgbmxlbiAtIChwMCs0IC0gYnVmKSk7Ci0gICAg ICBubGVuIC09IDQ7Ci0gICAgfQotICAvKiBSZW1vdmUgRVNDIHNlcXVlbmNlIHRvIHJlcG9ydCB0 ZXJtaW5hbCBpZGVudGl0eS4gKi8KLSAgd2hpbGUgKChwMCA9IChjaGFyICopIG1lbW1lbSAoYnVm LCBubGVuLCAiXDAzM1swYyIsIDQpKSkKLSAgICB7Ci0gICAgICBtZW1tb3ZlIChwMCwgcDArNCwg bmxlbiAtIChwMCs0IC0gYnVmKSk7Ci0gICAgICBubGVuIC09IDQ7Ci0gICAgfQotCi0gIC8qIElm IHRoZSBFU0Mgc2VxdWVuY2UgRVNDWz8zaCBvciBFU0NbPzNsIHdoaWNoIGNsZWFycyBjb25zb2xl IHNjcmVlbgotICAgICBidWZmZXIgaXMgcHVzaGVkLCBzZXQgbmVlZF9yZWRyYXdfc2NyZWVuIHRv IHRyaWdnZXIgcmVkcmF3IHNjcmVlbi4gKi8KLSAgcDAgPSBidWY7Ci0gIHdoaWxlICgocDAgPSAo Y2hhciAqKSBtZW1tZW0gKHAwLCBubGVuIC0gKHAwIC0gYnVmKSwgIlwwMzNbPyIsIDMpKSkKLSAg ICB7Ci0gICAgICBwMCArPSAzOwotICAgICAgYm9vbCBleGlzdF9hcmdfMyA9IGZhbHNlOwotICAg ICAgd2hpbGUgKHAwIDwgYnVmICsgbmxlbiAmJiAoaXNkaWdpdCAoKnAwKSB8fCAqcDAgPT0gJzsn KSkKLQl7Ci0JICBpbnQgYXJnID0gMDsKLQkgIHdoaWxlIChwMCA8IGJ1ZiArIG5sZW4gJiYgaXNk aWdpdCAoKnAwKSkKLQkgICAgYXJnID0gYXJnICogMTAgKyAoKnAwICsrKSAtICcwJzsKLQkgIGlm IChhcmcgPT0gMykKLQkgICAgZXhpc3RfYXJnXzMgPSB0cnVlOwotCSAgaWYgKHAwIDwgYnVmICsg bmxlbiAmJiAqcDAgPT0gJzsnKQotCSAgICBwMCArKzsKLQl9Ci0gICAgICBpZiAocDAgPCBidWYg KyBubGVuICYmIGV4aXN0X2FyZ18zICYmICgqcDAgPT0gJ2gnIHx8ICpwMCA9PSAnbCcpKQotCWdl dF90dHlwICgpLT5uZWVkX3JlZHJhd19zY3JlZW4gPSB0cnVlOwotICAgICAgcDAgKys7Ci0gICAg ICBpZiAocDAgPj0gYnVmICsgbmxlbikKLQlicmVhazsKLSAgICB9Ci0KLSAgaW50IHJldHJ5X2Nv dW50OwotICByZXRyeV9jb3VudCA9IDA7Ci0gIERXT1JEIGR3TW9kZSwgZmxhZ3M7Ci0gIGZsYWdz ID0gRU5BQkxFX1ZJUlRVQUxfVEVSTUlOQUxfUFJPQ0VTU0lORzsKLSAgd2hpbGUgKCFHZXRDb25z b2xlTW9kZSAoZ2V0X291dHB1dF9oYW5kbGUgKCksICZkd01vZGUpKQotICAgIHsKLSAgICAgIHRl cm1pb3NfcHJpbnRmICgiR2V0Q29uc29sZU1vZGUgZmFpbGVkLCAlRSIpOwotICAgICAgaW50IGVy cm5vX3NhdmUgPSBlcnJubzsKLSAgICAgIC8qIFJlLW9wZW4gaGFuZGxlcyAqLwotICAgICAgdGhp cy0+b3BlbiAoMCwgMCk7Ci0gICAgICAvKiBGaXggcHNldWRvIGNvbnNvbGUgd2luZG93IHNpemUg Ki8KLSAgICAgIHRoaXMtPmlvY3RsIChUSU9DU1dJTlNaLCAmZ2V0X3R0eXAgKCktPndpbnNpemUp OwotICAgICAgaWYgKGVycm5vICE9IGVycm5vX3NhdmUpCi0Jc2V0X2Vycm5vIChlcnJub19zYXZl KTsKLSAgICAgIGlmICgrK3JldHJ5X2NvdW50ID4gMykKLQlnb3RvIGNsZWFudXA7Ci0gICAgfQot ICBpZiAoIShnZXRfdHR5cCAoKS0+dGkuY19vZmxhZyAmIE9QT1NUKSB8fAotICAgICAgIShnZXRf dHR5cCAoKS0+dGkuY19vZmxhZyAmIE9OTENSKSkKLSAgICBmbGFncyB8PSBESVNBQkxFX05FV0xJ TkVfQVVUT19SRVRVUk47Ci0gIFNldENvbnNvbGVNb2RlIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwg ZHdNb2RlIHwgZmxhZ3MpOwotICBjaGFyICpwOwotICBwID0gYnVmOwotICBEV09SRCB3TGVuLCB3 cml0dGVuOwotICB3cml0dGVuID0gMDsKLSAgQk9PTCAoV0lOQVBJICpXcml0ZUZ1bmMpCi0gICAg KEhBTkRMRSwgTFBDVk9JRCwgRFdPUkQsIExQRFdPUkQsIExQT1ZFUkxBUFBFRCk7Ci0gIFdyaXRl RnVuYyA9IFdyaXRlRmlsZV9PcmlnID8gV3JpdGVGaWxlX09yaWcgOiBXcml0ZUZpbGU7Ci0gIHdo aWxlICh3cml0dGVuIDwgIG5sZW4pCi0gICAgewotICAgICAgaWYgKCFXcml0ZUZ1bmMgKGdldF9v dXRwdXRfaGFuZGxlICgpLCBwLCBubGVuIC0gd3JpdHRlbiwgJndMZW4sIE5VTEwpKQotCXsKLQkg IHRlcm1pb3NfcHJpbnRmICgiV3JpdGVGaWxlIGZhaWxlZCwgJUUiKTsKLQkgIGJyZWFrOwotCX0K LSAgICAgIGVsc2UKLQl7Ci0JICB3cml0dGVuICs9IHdMZW47Ci0JICBwICs9IHdMZW47Ci0JfQot ICAgIH0KLSAgLyogRGV0YWNoIGZyb20gcHNldWRvIGNvbnNvbGUgYW5kIHJlc3VtZS4gKi8KLSAg ZmxhZ3MgPSBFTkFCTEVfVklSVFVBTF9URVJNSU5BTF9QUk9DRVNTSU5HOwotICBTZXRDb25zb2xl TW9kZSAoZ2V0X291dHB1dF9oYW5kbGUgKCksIGR3TW9kZSB8IGZsYWdzKTsKLWNsZWFudXA6Ci0g IFNldENvbnNvbGVPdXRwdXRDUCAob3JpZ0NQKTsKLSAgSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFw ICgpLCAwLCBidWYpOwotZGV0YWNoOgotICByZXN0b3JlX3JlYXR0YWNoX3Bjb24gKCk7CisgIGdl dF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlID0gTlVMTDsKKyAgZ2V0X3R0eXAgKCktPnBjb25f c3RhcnQgPSBmYWxzZTsKIH0KIAogc3NpemVfdCBfX3N0ZGNhbGwKQEAgLTE1MDUsNDQgKzc3OCw3 IEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6d3JpdGUgKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IGxl bikKICAgcmVzZXRfc3dpdGNoX3RvX3Bjb24gKCk7CiAKICAgYWNxdWlyZV9vdXRwdXRfbXV0ZXgg KElORklOSVRFKTsKLSAgYm9vbCBvdXRwdXRfdG9fcGNvbiA9IGdldF90dHlwICgpLT5zd2l0Y2hf dG9fcGNvbl9vdXQ7Ci0gIHJlbGVhc2Vfb3V0cHV0X211dGV4ICgpOwotCi0gIFVJTlQgdGFyZ2V0 X2NvZGVfcGFnZSA9IG91dHB1dF90b19wY29uID8KLSAgICBHZXRDb25zb2xlT3V0cHV0Q1AgKCkg OiBnZXRfdHR5cCAoKS0+dGVybV9jb2RlX3BhZ2U7Ci0gIHNzaXplX3QgbmxlbjsKLSAgY2hhciAq YnVmID0gY29udmVydF9tYl9zdHIgKHRhcmdldF9jb2RlX3BhZ2UsIChzaXplX3QgKikgJm5sZW4s Ci0JCSBnZXRfdHR5cCAoKS0+dGVybV9jb2RlX3BhZ2UsIChjb25zdCBjaGFyICopIHB0ciwgbGVu KTsKLQotICAvKiBJZiBub3QgYXR0YWNoZWQgdG8gdGhpcyBwc2V1ZG8gY29uc29sZSwgdHJ5IHRv IGF0dGFjaCB0ZW1wb3JhcmlseS4gKi8KLSAgcGlkX3Jlc3RvcmUgPSAwOwotICBib29sIGZhbGxi YWNrID0gZmFsc2U7Ci0gIGlmIChvdXRwdXRfdG9fcGNvbiAmJiBwY29uX2F0dGFjaGVkX3RvICE9 IGdldF9taW5vciAoKSkKLSAgICBpZiAoIXRyeV9yZWF0dGFjaF9wY29uICgpKQotICAgICAgZmFs bGJhY2sgPSB0cnVlOwotCi0gIGlmIChvdXRwdXRfdG9fcGNvbiAmJiAhZmFsbGJhY2sgJiYKLSAg ICAgIChtZW1tZW0gKGJ1ZiwgbmxlbiwgIlwwMzNbNm4iLCA0KSB8fCBtZW1tZW0gKGJ1Ziwgbmxl biwgIlwwMzNbMGMiLCA0KSkpCi0gICAgewotICAgICAgZ2V0X3R0eXAgKCktPnBjb25faW5fZW1w dHkgPSBmYWxzZTsKLSAgICAgIGlmICghaXNfbGluZV9pbnB1dCAoKSkKLQlTZXRFdmVudCAoaW5w dXRfYXZhaWxhYmxlX2V2ZW50KTsKLSAgICB9Ci0KLSAgRFdPUkQgZHdNb2RlLCBmbGFnczsKLSAg ZmxhZ3MgPSBFTkFCTEVfVklSVFVBTF9URVJNSU5BTF9QUk9DRVNTSU5HOwotICBpZiAoIShnZXRf dHR5cCAoKS0+dGkuY19vZmxhZyAmIE9QT1NUKSB8fAotICAgICAgIShnZXRfdHR5cCAoKS0+dGku Y19vZmxhZyAmIE9OTENSKSkKLSAgICBmbGFncyB8PSBESVNBQkxFX05FV0xJTkVfQVVUT19SRVRV Uk47Ci0gIGlmIChvdXRwdXRfdG9fcGNvbiAmJiAhZmFsbGJhY2spCi0gICAgewotICAgICAgR2V0 Q29uc29sZU1vZGUgKGdldF9vdXRwdXRfaGFuZGxlICgpLCAmZHdNb2RlKTsKLSAgICAgIFNldENv bnNvbGVNb2RlIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgZHdNb2RlIHwgZmxhZ3MpOwotICAgIH0K LSAgSEFORExFIHRvID0gKG91dHB1dF90b19wY29uICYmICFmYWxsYmFjaykgPwotICAgIGdldF9v dXRwdXRfaGFuZGxlICgpIDogZ2V0X291dHB1dF9oYW5kbGVfY3lnICgpOwotICBhY3F1aXJlX291 dHB1dF9tdXRleCAoSU5GSU5JVEUpOwotICBpZiAoIXByb2Nlc3Nfb3Bvc3Rfb3V0cHV0ICh0bywg YnVmLCBubGVuLCBmYWxzZSkpCisgIGlmICghcHJvY2Vzc19vcG9zdF9vdXRwdXQgKGdldF9vdXRw dXRfaGFuZGxlX2N5ZyAoKSwgcHRyLCB0b3dyaXRlLCBmYWxzZSkpCiAgICAgewogICAgICAgRFdP UkQgZXJyID0gR2V0TGFzdEVycm9yICgpOwogICAgICAgdGVybWlvc19wcmludGYgKCJXcml0ZUZp bGUgZmFpbGVkLCAlRSIpOwpAQCAtMTU1NywyMCArNzkzLDYgQEAgZmhhbmRsZXJfcHR5X3NsYXZl Ojp3cml0ZSAoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgbGVuKQogICAgICAgdG93cml0ZSA9IC0x OwogICAgIH0KICAgcmVsZWFzZV9vdXRwdXRfbXV0ZXggKCk7Ci0gIG1iX3N0cl9mcmVlIChidWYp OwotICBmbGFncyA9IEVOQUJMRV9WSVJUVUFMX1RFUk1JTkFMX1BST0NFU1NJTkc7Ci0gIGlmIChv dXRwdXRfdG9fcGNvbiAmJiAhZmFsbGJhY2spCi0gICAgU2V0Q29uc29sZU1vZGUgKGdldF9vdXRw dXRfaGFuZGxlICgpLCBkd01vZGUgfCBmbGFncyk7Ci0KLSAgcmVzdG9yZV9yZWF0dGFjaF9wY29u ICgpOwotCi0gIC8qIFB1c2ggc2xhdmUgb3V0cHV0IHRvIHBzZXVkbyBjb25zb2xlIHNjcmVlbiBi dWZmZXIgKi8KLSAgaWYgKGdldF9wc2V1ZG9fY29uc29sZSAoKSkKLSAgICB7Ci0gICAgICBhY3F1 aXJlX291dHB1dF9tdXRleCAoSU5GSU5JVEUpOwotICAgICAgcHVzaF90b19wY29uX3NjcmVlbmJ1 ZmZlciAoKGNoYXIgKilwdHIsIGxlbiwgZmFsc2UpOwotICAgICAgcmVsZWFzZV9vdXRwdXRfbXV0 ZXggKCk7Ci0gICAgfQogCiAgIHJldHVybiB0b3dyaXRlOwogfQpAQCAtMTU4MiwxNiArODA0LDE1 IEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6bWFza19zd2l0Y2hfdG9fcGNvbl9pbiAoYm9vbCBtYXNr KQogfQogCiBib29sCi1maGFuZGxlcl9wdHlfY29tbW9uOjp0b19iZV9yZWFkX2Zyb21fcGNvbiAo dm9pZCkKK2ZoYW5kbGVyX3B0eV9tYXN0ZXI6OnRvX2JlX3JlYWRfZnJvbV9wY29uICh2b2lkKQog ewotICByZXR1cm4gIWdldF90dHlwICgpLT5wY29uX2luX2VtcHR5IHx8Ci0gICAgKGdldF90dHlw ICgpLT5zd2l0Y2hfdG9fcGNvbl9pbiAmJiAhZ2V0X3R0eXAgKCktPm1hc2tfc3dpdGNoX3RvX3Bj b25faW4pOworICByZXR1cm4gZ2V0X3R0eXAgKCktPnBjb25fc3RhcnQKKyAgICB8fCAoZ2V0X3R0 eXAgKCktPnN3aXRjaF90b19wY29uX2luICYmICFnZXRfdHR5cCAoKS0+bWFza19zd2l0Y2hfdG9f cGNvbl9pbik7CiB9CiAKIHZvaWQgX19yZWczCiBmaGFuZGxlcl9wdHlfc2xhdmU6OnJlYWQgKHZv aWQgKnB0ciwgc2l6ZV90JiBsZW4pCiB7Ci0gIGNoYXIgKnB0cjAgPSAoY2hhciAqKXB0cjsKICAg c3NpemVfdCB0b3RhbHJlYWQgPSAwOwogICBpbnQgdm1pbiA9IDA7CiAgIGludCB2dGltZSA9IDA7 CS8qIEluaXRpYWxpemVkIHRvIHByZXZlbnQgLVd1bmluaXRpYWxpemVkIHdhcm5pbmcgKi8KQEAg LTE2MTYsOCArODM3LDYgQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpyZWFkICh2b2lkICpwdHIsIHNp emVfdCYgbGVuKQogICAgICAgbWFza19zd2l0Y2hfdG9fcGNvbl9pbiAodHJ1ZSk7CiAgICAgICBy ZXNldF9zd2l0Y2hfdG9fcGNvbiAoKTsKICAgICB9Ci0gIGlmICh0b19iZV9yZWFkX2Zyb21fcGNv biAoKSkKLSAgICB1cGRhdGVfcGNvbl9pbnB1dF9zdGF0ZSAodHJ1ZSk7CiAKICAgaWYgKGlzX25v bmJsb2NraW5nICgpIHx8ICFwdHIpIC8qIEluZGljYXRpbmcgdGNmbHVzaCgpLiAqLwogICAgIHRp bWVfdG9fd2FpdCA9IDA7CkBAIC0xNzAwLDEwMSArOTE5LDI0IEBAIGZoYW5kbGVyX3B0eV9zbGF2 ZTo6cmVhZCAodm9pZCAqcHRyLCBzaXplX3QmIGxlbikKIAkgICAgIGlzIGFuIGluZmluaXRlbHkg YmxvY2tpbmcgcmVhZCwgcmVzdGFydCB0aGUgbG9vcC4gKi8KIAkgIGlmICh0aW1lX3RvX3dhaXQg IT0gSU5GSU5JVEUpCiAJICAgIHsKLQkgICAgICBpZiAoIXRvdGFscmVhZCkKLQkJewotCQkgIHNl dF9zaWdfZXJybm8gKEVBR0FJTik7Ci0JCSAgdG90YWxyZWFkID0gLTE7Ci0JCX0KLQkgICAgICBn b3RvIG91dDsKLQkgICAgfQotCSAgY29udGludWU7Ci0JZGVmYXVsdDoKLQkgIHRlcm1pb3NfcHJp bnRmICgid2FpdCBmb3IgaW5wdXQgbXV0ZXggZmFpbGVkLCAlRSIpOwotCSAgaWYgKCF0b3RhbHJl YWQpCi0JICAgIHsKLQkgICAgICBfX3NldGVycm5vICgpOwotCSAgICAgIHRvdGFscmVhZCA9IC0x OwotCSAgICB9Ci0JICBnb3RvIG91dDsKLQl9Ci0gICAgICBpZiAocHRyICYmIHRvX2JlX3JlYWRf ZnJvbV9wY29uICgpKQotCXsKLQkgIGlmIChnZXRfcmVhZGFoZWFkX3ZhbGlkICgpKQotCSAgICB7 Ci0JICAgICAgUmVsZWFzZU11dGV4IChpbnB1dF9tdXRleCk7Ci0JICAgICAgdG90YWxyZWFkID0g Z2V0X3JlYWRhaGVhZF9pbnRvX2J1ZmZlciAoKGNoYXIgKikgcHRyLCBsZW4pOwotCSAgICB9Ci0J ICBlbHNlCi0JICAgIHsKLQkgICAgICBpZiAoIXRyeV9yZWF0dGFjaF9wY29uICgpKQotCQl7Ci0J CSAgcmVzdG9yZV9yZWF0dGFjaF9wY29uICgpOwotCQkgIGdvdG8gZG9fcmVhZF9jeWc7Ci0JCX0K LQotCSAgICAgIERXT1JEIGR3TW9kZTsKLQkgICAgICBHZXRDb25zb2xlTW9kZSAoZ2V0X2hhbmRs ZSAoKSwgJmR3TW9kZSk7Ci0JICAgICAgRFdPUkQgZmxhZ3MgPSBFTkFCTEVfVklSVFVBTF9URVJN SU5BTF9JTlBVVDsKLQkgICAgICBpZiAoZHdNb2RlICE9IGZsYWdzKQotCQlTZXRDb25zb2xlTW9k ZSAoZ2V0X2hhbmRsZSAoKSwgZmxhZ3MpOwotCSAgICAgIC8qIFJlYWQgZ2V0X2hhbmRsZSgpIGlu c3RhZCBvZiBnZXRfaGFuZGxlX2N5ZygpICovCi0JICAgICAgQk9PTCAoV0lOQVBJICpSZWFkRnVu YykKLQkJKEhBTkRMRSwgTFBWT0lELCBEV09SRCwgTFBEV09SRCwgTFBWT0lEKTsKLQkgICAgICBS ZWFkRnVuYyA9IFJlYWRDb25zb2xlQV9PcmlnID8gUmVhZENvbnNvbGVBX09yaWcgOiBSZWFkQ29u c29sZUE7Ci0JICAgICAgRFdPUkQgcmxlbjsKLQkgICAgICByZWFkbGVuID0gTUlOIChsZW4sIHNp emVvZiAoYnVmKSk7Ci0JICAgICAgaWYgKCFSZWFkRnVuYyAoZ2V0X2hhbmRsZSAoKSwgYnVmLCBy ZWFkbGVuLCAmcmxlbiwgTlVMTCkpCi0JCXsKLQkJICB0ZXJtaW9zX3ByaW50ZiAoInJlYWQgZmFp bGVkLCAlRSIpOwotCQkgIFNldENvbnNvbGVNb2RlIChnZXRfaGFuZGxlICgpLCBkd01vZGUpOwot CQkgIHJlc3RvcmVfcmVhdHRhY2hfcGNvbiAoKTsKLQkJICBSZWxlYXNlTXV0ZXggKGlucHV0X211 dGV4KTsKLQkJICBzZXRfZXJybm8gKEVJTyk7Ci0JCSAgdG90YWxyZWFkID0gLTE7Ci0JCSAgZ290 byBvdXQ7Ci0JCX0KLQkgICAgICBTZXRDb25zb2xlTW9kZSAoZ2V0X2hhbmRsZSAoKSwgZHdNb2Rl KTsKLQkgICAgICByZXN0b3JlX3JlYXR0YWNoX3Bjb24gKCk7Ci0JICAgICAgUmVsZWFzZU11dGV4 IChpbnB1dF9tdXRleCk7Ci0KLQkgICAgICBzc2l6ZV90IG5sZW47Ci0JICAgICAgY2hhciAqbmJ1 ZiA9IGNvbnZlcnRfbWJfc3RyIChnZXRfdHR5cCAoKS0+dGVybV9jb2RlX3BhZ2UsCi0JCQkgICAg IChzaXplX3QgKikgJm5sZW4sIEdldENvbnNvbGVDUCAoKSwgYnVmLCBybGVuKTsKLQotCSAgICAg IHNzaXplX3QgcmV0OwotCSAgICAgIGxpbmVfZWRpdF9zdGF0dXMgcmVzID0KLQkJbGluZV9lZGl0 IChuYnVmLCBubGVuLCBnZXRfdHR5cCAoKS0+dGksICZyZXQpOwotCi0JICAgICAgbWJfc3RyX2Zy ZWUgKG5idWYpOwotCi0JICAgICAgaWYgKHJlcyA9PSBsaW5lX2VkaXRfaW5wdXRfZG9uZSB8fCBy ZXMgPT0gbGluZV9lZGl0X29rKQotCQl0b3RhbHJlYWQgPSBnZXRfcmVhZGFoZWFkX2ludG9fYnVm ZmVyICgoY2hhciAqKSBwdHIsIGxlbik7Ci0JICAgICAgZWxzZSBpZiAocmVzID4gbGluZV9lZGl0 X3NpZ25hbGxlZCkKKwkgICAgICBpZiAoIXRvdGFscmVhZCkKIAkJewotCQkgIHNldF9zaWdfZXJy bm8gKEVJTlRSKTsKKwkJICBzZXRfc2lnX2Vycm5vIChFQUdBSU4pOwogCQkgIHRvdGFscmVhZCA9 IC0xOwogCQl9Ci0JICAgICAgZWxzZQotCQl7Ci0JCSAgdXBkYXRlX3Bjb25faW5wdXRfc3RhdGUg KHRydWUpOwotCQkgIGNvbnRpbnVlOwotCQl9CisJICAgICAgZ290byBvdXQ7CisJICAgIH0KKwkg IGNvbnRpbnVlOworCWRlZmF1bHQ6CisJICB0ZXJtaW9zX3ByaW50ZiAoIndhaXQgZm9yIGlucHV0 IG11dGV4IGZhaWxlZCwgJUUiKTsKKwkgIGlmICghdG90YWxyZWFkKQorCSAgICB7CisJICAgICAg X19zZXRlcnJubyAoKTsKKwkgICAgICB0b3RhbHJlYWQgPSAtMTsKIAkgICAgfQotCi0JICB1cGRh dGVfcGNvbl9pbnB1dF9zdGF0ZSAodHJ1ZSk7Ci0JICBtYXNrX3N3aXRjaF90b19wY29uX2luIChm YWxzZSk7CiAJICBnb3RvIG91dDsKIAl9Ci0gICAgICBpZiAoIXB0ciAmJiBsZW4gPT0gVUlOVF9N QVggJiYgIWdldF90dHlwICgpLT5wY29uX2luX2VtcHR5KQotCXsKLQkgIEZsdXNoQ29uc29sZUlu cHV0QnVmZmVyIChnZXRfaGFuZGxlICgpKTsKLQkgIGdldF90dHlwICgpLT5wY29uX2luX2VtcHR5 ID0gdHJ1ZTsKLQkgIERXT1JEIG47Ci0JICBpZiAoYnl0ZXNfYXZhaWxhYmxlIChuKSAmJiBuID09 IDApCi0JICAgIFJlc2V0RXZlbnQgKGlucHV0X2F2YWlsYWJsZV9ldmVudCk7Ci0JfQogCi1kb19y ZWFkX2N5ZzoKICAgICAgIGlmICghYnl0ZXNfYXZhaWxhYmxlIChieXRlc19pbl9waXBlKSkKIAl7 CiAJICBSZWxlYXNlTXV0ZXggKGlucHV0X211dGV4KTsKQEAgLTE5MTEsMTYgKzEwNTMsNiBAQCBk b19yZWFkX2N5ZzoKIG91dDoKICAgdGVybWlvc19wcmludGYgKCIlZCA9IHJlYWQoJXAsICVsdSki LCB0b3RhbHJlYWQsIHB0ciwgbGVuKTsKICAgbGVuID0gKHNpemVfdCkgdG90YWxyZWFkOwotICAv KiBQdXNoIHNsYXZlIHJlYWQgYXMgZWNobyB0byBwc2V1ZG8gY29uc29sZSBzY3JlZW4gYnVmZmVy LiAqLwotICBpZiAoZ2V0X3BzZXVkb19jb25zb2xlICgpICYmIHB0cjAgJiYgdG90YWxyZWFkID4g MCAmJgotICAgICAgKGdldF90dHlwICgpLT50aS5jX2xmbGFnICYgRUNITykpCi0gICAgewotICAg ICAgYWNxdWlyZV9vdXRwdXRfbXV0ZXggKElORklOSVRFKTsKLSAgICAgIHB1c2hfdG9fcGNvbl9z Y3JlZW5idWZmZXIgKHB0cjAsIGxlbiwgdHJ1ZSk7Ci0gICAgICBpZiAoZ2V0X3R0eXAgKCktPnN3 aXRjaF90b19wY29uX291dCkKLQl0cmlnZ2VyX3JlZHJhd19zY3JlZW4gKCk7Ci0gICAgICByZWxl YXNlX291dHB1dF9tdXRleCAoKTsKLSAgICB9CiAgIG1hc2tfc3dpdGNoX3RvX3Bjb25faW4gKGZh bHNlKTsKIH0KIApAQCAtMjA2MSwzOCArMTE5MywxMSBAQCBmaGFuZGxlcl9wdHlfc2xhdmU6Omlv Y3RsICh1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiAgICAgICBnZXRfdHR5cCAoKS0+d2lu c2l6ZSA9IGdldF90dHlwICgpLT5hcmcud2luc2l6ZTsKICAgICAgIGJyZWFrOwogICAgIGNhc2Ug VElPQ1NXSU5TWjoKLSAgICAgIGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0JewotCSAgLyog SWYgbm90IGF0dGFjaGVkIHRvIHRoaXMgcHNldWRvIGNvbnNvbGUsCi0JICAgICB0cnkgdG8gYXR0 YWNoIHRlbXBvcmFyaWx5LiAqLwotCSAgcGlkX3Jlc3RvcmUgPSAwOwotCSAgaWYgKHBjb25fYXR0 YWNoZWRfdG8gIT0gZ2V0X21pbm9yICgpKQotCSAgICBpZiAoIXRyeV9yZWF0dGFjaF9wY29uICgp KQotCSAgICAgIGdvdG8gY2xlYW51cDsKLQotCSAgQ09PUkQgc2l6ZTsKLQkgIHNpemUuWCA9ICgo c3RydWN0IHdpbnNpemUgKikgYXJnKS0+d3NfY29sOwotCSAgc2l6ZS5ZID0gKChzdHJ1Y3Qgd2lu c2l6ZSAqKSBhcmcpLT53c19yb3c7Ci0JICBDT05TT0xFX1NDUkVFTl9CVUZGRVJfSU5GTyBjc2Jp OwotCSAgaWYgKEdldENvbnNvbGVTY3JlZW5CdWZmZXJJbmZvIChnZXRfb3V0cHV0X2hhbmRsZSAo KSwgJmNzYmkpKQotCSAgICBpZiAoc2l6ZS5YID09IGNzYmkuc3JXaW5kb3cuUmlnaHQgLSBjc2Jp LnNyV2luZG93LkxlZnQgKyAxICYmCi0JCXNpemUuWSA9PSBjc2JpLnNyV2luZG93LkJvdHRvbSAt IGNzYmkuc3JXaW5kb3cuVG9wICsgMSkKLQkgICAgICBnb3RvIGNsZWFudXA7Ci0JICBpZiAoIVNl dENvbnNvbGVTY3JlZW5CdWZmZXJTaXplIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgc2l6ZSkpCi0J ICAgIGdvdG8gY2xlYW51cDsKLQkgIFNNQUxMX1JFQ1QgcmVjdDsKLQkgIHJlY3QuTGVmdCA9IDA7 Ci0JICByZWN0LlRvcCA9IDA7Ci0JICByZWN0LlJpZ2h0ID0gc2l6ZS5YLTE7Ci0JICByZWN0LkJv dHRvbSA9IHNpemUuWS0xOwotCSAgU2V0Q29uc29sZVdpbmRvd0luZm8gKGdldF9vdXRwdXRfaGFu ZGxlICgpLCBUUlVFLCAmcmVjdCk7Ci1jbGVhbnVwOgotCSAgcmVzdG9yZV9yZWF0dGFjaF9wY29u ICgpOwotCX0KLQogICAgICAgaWYgKGdldF90dHlwICgpLT53aW5zaXplLndzX3JvdyAhPSAoKHN0 cnVjdCB3aW5zaXplICopIGFyZyktPndzX3JvdwogCSAgfHwgZ2V0X3R0eXAgKCktPndpbnNpemUu d3NfY29sICE9ICgoc3RydWN0IHdpbnNpemUgKikgYXJnKS0+d3NfY29sKQogCXsKKwkgIGlmIChn ZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSAmJiBnZXRfdHR5cCAoKS0+cGNvbl9waWQpCisJ ICAgIHJlc2l6ZV9wc2V1ZG9fY29uc29sZSAoKHN0cnVjdCB3aW5zaXplICopIGFyZyk7CiAJICBn ZXRfdHR5cCAoKS0+YXJnLndpbnNpemUgPSAqKHN0cnVjdCB3aW5zaXplICopIGFyZzsKIAkgIGdl dF90dHlwICgpLT53aW5zaXplID0gKihzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmc7CiAJICBnZXRfdHR5 cCAoKS0+a2lsbF9wZ3JwIChTSUdXSU5DSCk7CkBAIC0yMzc4LDYgKzE0ODMsMjcgQEAgZmhhbmRs ZXJfcHR5X2NvbW1vbjo6Y2xvc2UgKCkKICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQKK2ZoYW5kbGVy X3B0eV9jb21tb246OnJlc2l6ZV9wc2V1ZG9fY29uc29sZSAoc3RydWN0IHdpbnNpemUgKndzKQor eworICBDT09SRCBzaXplOworICBzaXplLlggPSB3cy0+d3NfY29sOworICBzaXplLlkgPSB3cy0+ d3Nfcm93OworICBwaW5mbyBwIChnZXRfdHR5cCAoKS0+cGNvbl9waWQpOworICBpZiAocCkKKyAg ICB7CisgICAgICBIUENPTl9JTlRFUk5BTCBocGNvbl9sb2NhbDsKKyAgICAgIEhBTkRMRSBwY29u X293bmVyID0KKwlPcGVuUHJvY2VzcyAoUFJPQ0VTU19EVVBfSEFORExFLCBGQUxTRSwgcC0+ZXhl Y19kd1Byb2Nlc3NJZCk7CisgICAgICBEdXBsaWNhdGVIYW5kbGUgKHBjb25fb3duZXIsIGdldF90 dHlwICgpLT5oX3Bjb25fd3JpdGVfcGlwZSwKKwkJICAgICAgIEdldEN1cnJlbnRQcm9jZXNzICgp LCAmaHBjb25fbG9jYWwuaFdyaXRlUGlwZSwKKwkJICAgICAgIDAsIFRSVUUsIERVUExJQ0FURV9T QU1FX0FDQ0VTUyk7CisgICAgICBSZXNpemVQc2V1ZG9Db25zb2xlICgoSFBDT04pICZocGNvbl9s b2NhbCwgc2l6ZSk7CisgICAgICBDbG9zZUhhbmRsZSAocGNvbl9vd25lcik7CisgICAgICBDbG9z ZUhhbmRsZSAoaHBjb25fbG9jYWwuaFdyaXRlUGlwZSk7CisgICAgfQorfQorCiB2b2lkCiBmaGFu ZGxlcl9wdHlfbWFzdGVyOjpjbGVhbnVwICgpCiB7CkBAIC0yMzkzLDcgKzE1MTksNiBAQCBmaGFu ZGxlcl9wdHlfbWFzdGVyOjpjbG9zZSAoKQogewogICBPQkpFQ1RfQkFTSUNfSU5GT1JNQVRJT04g b2JpOwogICBOVFNUQVRVUyBzdGF0dXM7Ci0gIHBpZF90IG1hc3Rlcl9waWRfdG1wID0gZ2V0X3R0 eXAgKCktPm1hc3Rlcl9waWQ7CiAKICAgdGVybWlvc19wcmludGYgKCJjbG9zaW5nIGZyb21fbWFz dGVyKCVwKS9mcm9tX21hc3Rlcl9jeWcoJXApL3RvX21hc3RlciglcCkvdG9fbWFzdGVyX2N5Zygl cCkgc2luY2Ugd2Ugb3duIHRoZW0oJXUpIiwKIAkJICBmcm9tX21hc3RlciwgZnJvbV9tYXN0ZXJf Y3lnLApAQCAtMjQzOCwzMCArMTU2Myw2IEBAIGZoYW5kbGVyX3B0eV9tYXN0ZXI6OmNsb3NlICgp CiAgIGVsc2UgaWYgKG9iaS5IYW5kbGVDb3VudCA9PSAxKQogICAgIHsKICAgICAgIHRlcm1pb3Nf cHJpbnRmICgiQ2xvc2luZyBsYXN0IG1hc3RlciBvZiBwdHklZCIsIGdldF9taW5vciAoKSk7Ci0g ICAgICAvKiBDbG9zZSBQc2V1ZG8gQ29uc29sZSAqLwotICAgICAgaWYgKGdldF9wc2V1ZG9fY29u c29sZSAoKSkKLQl7Ci0JICAvKiBUZXJtaW5hdGUgaGVscGVyIHByb2Nlc3MgKi8KLQkgIFNldEV2 ZW50IChnZXRfdHR5cCAoKS0+aF9oZWxwZXJfZ29vZGJ5ZSk7Ci0JICBXYWl0Rm9yU2luZ2xlT2Jq ZWN0IChnZXRfdHR5cCAoKS0+aF9oZWxwZXJfcHJvY2VzcywgSU5GSU5JVEUpOwotCSAgQ2xvc2VI YW5kbGUgKGdldF90dHlwICgpLT5oX2hlbHBlcl9nb29kYnllKTsKLQkgIENsb3NlSGFuZGxlIChn ZXRfdHR5cCAoKS0+aF9oZWxwZXJfcHJvY2Vzcyk7Ci0JICAvKiBGSVhNRTogUHNldWRvIGNvbnNv bGUgY2FuIGJlIGFjY2Vzc2VkIHZpYSBpdHMgaGFuZGxlCi0JICAgICBvbmx5IGluIHRoZSBwcm9j ZXNzIHdoaWNoIGNyZWF0ZWQgaXQuIFdoYXQgZWxzZSBjYW4gd2UgZG8/ICovCi0JICBpZiAobWFz dGVyX3BpZF90bXAgPT0gbXlzZWxmLT5waWQpCi0JICAgIHsKLQkgICAgICAvKiBDbG9zZVBzZXVk b0NvbnNvbGUoKSBzZWVtcyB0byBoYXZlIGEgYnVnIHRoYXQgb25lCi0JCSBpbnRlcm5hbCBoYW5k bGUgcmVtYWlucyBvcGVuZWQuIFRoaXMgY2F1c2VzIGhhbmRsZSBsZWFrLgotCQkgVGhpcyBpcyBh IHdvcmthcm91bmQgZm9yIHRoaXMgcHJvYmxlbS4gKi8KLQkgICAgICBIUENPTl9JTlRFUk5BTCAq aHAgPSAoSFBDT05fSU5URVJOQUwgKikgZ2V0X3BzZXVkb19jb25zb2xlICgpOwotCSAgICAgIEhB TkRMRSB0bXAgPSBocC0+aENvbkhvc3RQcm9jZXNzOwotCSAgICAgIC8qIFJlbGVhc2UgcHNldWRv IGNvbnNvbGUgKi8KLQkgICAgICBDbG9zZVBzZXVkb0NvbnNvbGUgKGdldF9wc2V1ZG9fY29uc29s ZSAoKSk7Ci0JICAgICAgQ2xvc2VIYW5kbGUgKHRtcCk7Ci0JICAgIH0KLQkgIGdldF90dHlwICgp LT5zd2l0Y2hfdG9fcGNvbl9pbiA9IGZhbHNlOwotCSAgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19w Y29uX291dCA9IGZhbHNlOwotCX0KICAgICAgIGlmIChnZXRfdHR5cCAoKS0+Z2V0c2lkICgpID4g MCkKIAlraWxsIChnZXRfdHR5cCAoKS0+Z2V0c2lkICgpLCBTSUdIVVApOwogICAgICAgU2V0RXZl bnQgKGlucHV0X2F2YWlsYWJsZV9ldmVudCk7CkBAIC0yNDY5LDkgKzE1NzAsOCBAQCBmaGFuZGxl cl9wdHlfbWFzdGVyOjpjbG9zZSAoKQogCiAgIGlmICghRm9yY2VDbG9zZUhhbmRsZSAoZnJvbV9t YXN0ZXIpKQogICAgIHRlcm1pb3NfcHJpbnRmICgiZXJyb3IgY2xvc2luZyBmcm9tX21hc3RlciAl cCwgJUUiLCBmcm9tX21hc3Rlcik7Ci0gIGlmIChmcm9tX21hc3Rlcl9jeWcgIT0gZnJvbV9tYXN0 ZXIpIC8qIEF2b2lkIGRvdWJsZSBjbG9zZS4gKi8KLSAgICBpZiAoIUZvcmNlQ2xvc2VIYW5kbGUg KGZyb21fbWFzdGVyX2N5ZykpCi0gICAgICB0ZXJtaW9zX3ByaW50ZiAoImVycm9yIGNsb3Npbmcg ZnJvbV9tYXN0ZXJfY3lnICVwLCAlRSIsIGZyb21fbWFzdGVyX2N5Zyk7CisgIGlmICghRm9yY2VD bG9zZUhhbmRsZSAoZnJvbV9tYXN0ZXJfY3lnKSkKKyAgICB0ZXJtaW9zX3ByaW50ZiAoImVycm9y IGNsb3NpbmcgZnJvbV9tYXN0ZXJfY3lnICVwLCAlRSIsIGZyb21fbWFzdGVyX2N5Zyk7CiAgIGlm ICghRm9yY2VDbG9zZUhhbmRsZSAodG9fbWFzdGVyKSkKICAgICB0ZXJtaW9zX3ByaW50ZiAoImVy cm9yIGNsb3NpbmcgdG9fbWFzdGVyICVwLCAlRSIsIHRvX21hc3Rlcik7CiAgIGZyb21fbWFzdGVy ID0gdG9fbWFzdGVyID0gTlVMTDsKQEAgLTI1MTMsNyArMTYxMyw3IEBAIGZoYW5kbGVyX3B0eV9t YXN0ZXI6OndyaXRlIChjb25zdCB2b2lkICpwdHIsIHNpemVfdCBsZW4pCiAKICAgLyogV3JpdGUg dGVybWluYWwgaW5wdXQgdG8gdG9fc2xhdmUgcGlwZSBpbnN0ZWFkIG9mIG91dHB1dF9oYW5kbGUK ICAgICAgaWYgY3VycmVudCBhcHBsaWNhdGlvbiBpcyBuYXRpdmUgY29uc29sZSBhcHBsaWNhdGlv bi4gKi8KLSAgaWYgKHRvX2JlX3JlYWRfZnJvbV9wY29uICgpKQorICBpZiAodG9fYmVfcmVhZF9m cm9tX3Bjb24gKCkgJiYgZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGUpCiAgICAgewogICAg ICAgc2l6ZV90IG5sZW47CiAgICAgICBjaGFyICpidWYgPSBjb252ZXJ0X21iX3N0cgpAQCAtMjUy MSw0MCArMTYyMSw1MCBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjp3cml0ZSAoY29uc3Qgdm9pZCAq cHRyLCBzaXplX3QgbGVuKQogCiAgICAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0IChpbnB1dF9tdXRl eCwgSU5GSU5JVEUpOwogCi0gICAgICBpZiAobWVtY2hyIChidWYsICdcMDAzJywgbmxlbikpIC8q IF5DIGludHIga2V5IGluIHBjb24gKi8KLQlnZXRfdHR5cCAoKS0+cmVxX2ZsdXNoX3Bjb25faW5w dXQgPSB0cnVlOwotCiAgICAgICBEV09SRCB3TGVuOwotICAgICAgV3JpdGVGaWxlICh0b19zbGF2 ZSwgYnVmLCBubGVuLCAmd0xlbiwgTlVMTCk7Ci0gICAgICBnZXRfdHR5cCAoKS0+cGNvbl9pbl9l bXB0eSA9IGZhbHNlOwotCi0gICAgICBSZWxlYXNlTXV0ZXggKGlucHV0X211dGV4KTsKIAotICAg ICAgLyogVXNlIGxpbmVfZWRpdCAoKSBpbiBvcmRlciB0byBzZXQgaW5wdXRfYXZhaWxhYmxlX2V2 ZW50LiAqLwotICAgICAgYm9vbCBpc19lY2hvID0gdGMgKCktPnRpLmNfbGZsYWcgJiBFQ0hPOwot ICAgICAgaWYgKCFnZXRfdHR5cCAoKS0+bWFza19zd2l0Y2hfdG9fcGNvbl9pbikKKyAgICAgIGlm IChnZXRfdHR5cCAoKS0+cGNvbl9zdGFydCkKIAl7Ci0JICB0YyAoKS0+dGkuY19sZmxhZyAmPSB+ RUNITzsKLQkgIHRpLmNfbGZsYWcgJj0gfkVDSE87Ci0JfQotICAgICAgdGkuY19sZmxhZyAmPSB+ SVNJRzsKLSAgICAgIGxpbmVfZWRpdCAoYnVmLCBubGVuLCB0aSwgJnJldCk7Ci0gICAgICBpZiAo aXNfZWNobykKLQl0YyAoKS0+dGkuY19sZmxhZyB8PSBFQ0hPOwotICAgICAgZ2V0X3R0eXAgKCkt PnJlYWRfcmV0dmFsID0gMTsKLQotICAgICAgY29uc3QgY2hhciBzaWdzW10gPSB7Ci0JKGNoYXIp IHRpLmNfY2NbVklOVFJdLAotCShjaGFyKSB0aS5jX2NjW1ZRVUlUXSwKLQkoY2hhcikgdGkuY19j Y1tWU1VTUF0sCi0gICAgICB9OwotICAgICAgaWYgKHRjICgpLT50aS5jX2xmbGFnICYgSVNJRykK LQlmb3IgKHNpemVfdCBpPTA7IGk8c2l6ZW9mIChzaWdzKTsgaSsrKQotCSAgaWYgKHNpZ3NbaV0g JiYgbWVtY2hyIChidWYsIHNpZ3NbaV0sIG5sZW4pKQorCSAgLyogUHNldWRvIGNvbmRvbGUgc3Vw cG9ydCB1c2VzICJDU0k2biIgdG8gZ2V0IGN1cnNvciBwb3NpdGlvbi4KKwkgICAgIElmIHRoZSBy ZXBseSBmb3IgIkNTSTZuIiBpcyBkaXZpZGVkIGludG8gbXVsdGlwbGUgd3JpdGVzLAorCSAgICAg cHNldWRvIGNvbnNvbGUgc29tZXRpbWVzIGRvZXMgbm90IHJlY29nbml6ZSBpdC4gIFRoZXJlZm9y ZSwKKwkgICAgIHB1dCB0aGVtIHRvZ2V0aGVyIGludG8gd3BidWYgYW5kIHdyaXRlIGFsbCBhdCBv bmNlLiAqLworCSAgc3RhdGljIGNvbnN0IGludCB3cGJ1Zl9sZW4gPSA2NDsKKwkgIHN0YXRpYyBj aGFyIHdwYnVmW3dwYnVmX2xlbl07CisJICBzdGF0aWMgaW50IGl4cHV0ID0gMDsKKworCSAgaWYg KGl4cHV0ID09IDAgJiYgYnVmWzBdICE9ICdcMDMzJykKKwkgICAgeyAvKiBmYWlsLXNhZmUgKi8K KwkgICAgICBXcml0ZUZpbGUgKHRvX3NsYXZlLCAiXDAzM1sxOzFSIiwgNiwgJndMZW4sIE5VTEwp OyAvKiBkdW1teSAqLworCSAgICAgIGdldF90dHlwICgpLT5wY29uX3N0YXJ0ID0gZmFsc2U7CisJ ICAgIH0KKwkgIGVsc2UKIAkgICAgewotCSAgICAgIGVhdF9yZWFkYWhlYWQgKC0xKTsKLQkgICAg ICBTZXRFdmVudCAoaW5wdXRfYXZhaWxhYmxlX2V2ZW50KTsKKwkgICAgICBpZiAoaXhwdXQgKyBu bGVuIDwgd3BidWZfbGVuKQorCQlmb3IgKHNpemVfdCBpPTA7IGk8bmxlbjsgaSsrKQorCQkgIHdw YnVmW2l4cHV0KytdID0gYnVmW2ldOworCSAgICAgIGVsc2UKKwkJeworCQkgIFdyaXRlRmlsZSAo dG9fc2xhdmUsIHdwYnVmLCBpeHB1dCwgJndMZW4sIE5VTEwpOworCQkgIGl4cHV0ID0gMDsKKwkJ ICBnZXRfdHR5cCAoKS0+cGNvbl9zdGFydCA9IGZhbHNlOworCQkgIFdyaXRlRmlsZSAodG9fc2xh dmUsIGJ1ZiwgbmxlbiwgJndMZW4sIE5VTEwpOworCQl9CisJICAgICAgaWYgKGl4cHV0ICYmIG1l bWNociAod3BidWYsICdSJywgaXhwdXQpKQorCQl7CisJCSAgV3JpdGVGaWxlICh0b19zbGF2ZSwg d3BidWYsIGl4cHV0LCAmd0xlbiwgTlVMTCk7CisJCSAgaXhwdXQgPSAwOworCQkgIGdldF90dHlw ICgpLT5wY29uX3N0YXJ0ID0gZmFsc2U7CisJCX0KKwkgICAgICBSZWxlYXNlTXV0ZXggKGlucHV0 X211dGV4KTsKKwkgICAgICBtYl9zdHJfZnJlZSAoYnVmKTsKKwkgICAgICByZXR1cm4gbGVuOwog CSAgICB9CisJfQorCisgICAgICBXcml0ZUZpbGUgKHRvX3NsYXZlLCBidWYsIG5sZW4sICZ3TGVu LCBOVUxMKTsKKworICAgICAgUmVsZWFzZU11dGV4IChpbnB1dF9tdXRleCk7CiAKICAgICAgIG1i X3N0cl9mcmVlIChidWYpOwogICAgICAgcmV0dXJuIGxlbjsKQEAgLTI2MzAsMTUgKzE3NDAsOCBA QCBmaGFuZGxlcl9wdHlfbWFzdGVyOjppb2N0bCAodW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJn KQogICAgICAgaWYgKGdldF90dHlwICgpLT53aW5zaXplLndzX3JvdyAhPSAoKHN0cnVjdCB3aW5z aXplICopIGFyZyktPndzX3JvdwogCSAgfHwgZ2V0X3R0eXAgKCktPndpbnNpemUud3NfY29sICE9 ICgoc3RydWN0IHdpbnNpemUgKikgYXJnKS0+d3NfY29sKQogCXsKLQkgIC8qIEZJWE1FOiBQc2V1 ZG8gY29uc29sZSBjYW4gYmUgYWNjZXNzZWQgdmlhIGl0cyBoYW5kbGUKLQkgICAgIG9ubHkgaW4g dGhlIHByb2Nlc3Mgd2hpY2ggY3JlYXRlZCBpdC4gV2hhdCBlbHNlIGNhbiB3ZSBkbz8gKi8KLQkg IGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkgJiYgZ2V0X3R0eXAgKCktPm1hc3Rlcl9waWQgPT0g bXlzZWxmLT5waWQpCi0JICAgIHsKLQkgICAgICBDT09SRCBzaXplOwotCSAgICAgIHNpemUuWCA9 ICgoc3RydWN0IHdpbnNpemUgKikgYXJnKS0+d3NfY29sOwotCSAgICAgIHNpemUuWSA9ICgoc3Ry dWN0IHdpbnNpemUgKikgYXJnKS0+d3Nfcm93OwotCSAgICAgIFJlc2l6ZVBzZXVkb0NvbnNvbGUg KGdldF9wc2V1ZG9fY29uc29sZSAoKSwgc2l6ZSk7Ci0JICAgIH0KKwkgIGlmIChnZXRfdHR5cCAo KS0+aF9wc2V1ZG9fY29uc29sZSAmJiBnZXRfdHR5cCAoKS0+cGNvbl9waWQpCisJICAgIHJlc2l6 ZV9wc2V1ZG9fY29uc29sZSAoKHN0cnVjdCB3aW5zaXplICopIGFyZyk7CiAJICBnZXRfdHR5cCAo KS0+d2luc2l6ZSA9ICooc3RydWN0IHdpbnNpemUgKikgYXJnOwogCSAgZ2V0X3R0eXAgKCktPmtp bGxfcGdycCAoU0lHV0lOQ0gpOwogCX0KQEAgLTI3NjMsNyArMTg2Niw3IEBAIGdldF9sb2NhbGVf ZnJvbV9lbnYgKGNoYXIgKmxvY2FsZSkKICAgc3RyY3B5IChsb2NhbGUsIGVudik7CiB9CiAKLXN0 YXRpYyBMQ0lECitzdGF0aWMgdm9pZAogZ2V0X2xhbmdpbmZvIChjaGFyICpsb2NhbGVfb3V0LCBj aGFyICpjaGFyc2V0X291dCkKIHsKICAgLyogR2V0IGxvY2FsZSBmcm9tIGVudmlyb25tZW50ICov CkBAIC0yNzc2LDExICsxODc5LDYgQEAgZ2V0X2xhbmdpbmZvIChjaGFyICpsb2NhbGVfb3V0LCBj aGFyICpjaGFyc2V0X291dCkKICAgaWYgKCFsb2NhbGUpCiAgICAgbG9jYWxlID0gIkMiOwogCi0g IGNoYXIgdG1wX2xvY2FsZVtFTkNPRElOR19MRU4gKyAxXTsKLSAgY2hhciAqcmV0ID0gX19zZXRf bG9jYWxlX2Zyb21fbG9jYWxlX2FsaWFzIChsb2NhbGUsIHRtcF9sb2NhbGUpOwotICBpZiAocmV0 KQotICAgIGxvY2FsZSA9IHRtcF9sb2NhbGU7Ci0KICAgY29uc3QgY2hhciAqY2hhcnNldDsKICAg c3RydWN0IGxjX2N0eXBlX1QgKmxjX2N0eXBlID0gKHN0cnVjdCBsY19jdHlwZV9UICopIGxvYy5s Y19jYXRbTENfQ1RZUEVdLnB0cjsKICAgaWYgKCFsY19jdHlwZSkKQEAgLTI4MzAsMjMgKzE5Mjgs OSBAQCBnZXRfbGFuZ2luZm8gKGNoYXIgKmxvY2FsZV9vdXQsIGNoYXIgKmNoYXJzZXRfb3V0KQog ICAgICAgY2hhcnNldCA9ICJDUDkzMiI7CiAgICAgfQogCi0gIHdjaGFyX3QgbGNbRU5DT0RJTkdf TEVOICsgMV07Ci0gIHdjaGFyX3QgKnA7Ci0gIG1ic3Rvd2NzIChsYywgbG9jYWxlLCBFTkNPRElO R19MRU4pOwotICBwID0gd2NzY2hyIChsYywgTCcuJyk7Ci0gIGlmIChwKQotICAgICpwID0gTCdc MCc7Ci0gIHAgPSB3Y3NjaHIgKGxjLCBMJ18nKTsKLSAgaWYgKHApCi0gICAgKnAgPSBMJy0nOwot ICBMQ0lEIGxjaWQgPSBMb2NhbGVOYW1lVG9MQ0lEIChsYywgMCk7Ci0gIGlmICghbGNpZCAmJiAh c3RyY21wIChjaGFyc2V0LCAiQVNDSUkiKSkKLSAgICByZXR1cm4gMDsKLQogICAvKiBTZXQgcmVz dWx0cyAqLwogICBzdHJjcHkgKGxvY2FsZV9vdXQsIG5ld19sb2NhbGUpOwogICBzdHJjcHkgKGNo YXJzZXRfb3V0LCBjaGFyc2V0KTsKLSAgcmV0dXJuIGxjaWQ7CiB9CiAKIHZvaWQKQEAgLTI4NTQs MjEgKzE5MzgsNyBAQCBmaGFuZGxlcl9wdHlfc2xhdmU6OnNldHVwX2xvY2FsZSAodm9pZCkKIHsK ICAgY2hhciBsb2NhbGVbRU5DT0RJTkdfTEVOICsgMV0gPSAiQyI7CiAgIGNoYXIgY2hhcnNldFtF TkNPRElOR19MRU4gKyAxXSA9ICJBU0NJSSI7Ci0gIExDSUQgbGNpZCA9IGdldF9sYW5naW5mbyAo bG9jYWxlLCBjaGFyc2V0KTsKLQotICAvKiBTZXQgY29uc29sZSBjb2RlIHBhZ2UgZm9ybSBsb2Nh bGUgKi8KLSAgaWYgKGdldF9wc2V1ZG9fY29uc29sZSAoKSkKLSAgICB7Ci0gICAgICBVSU5UIGNv ZGVfcGFnZTsKLSAgICAgIGlmIChsY2lkID09IDAgfHwgbGNpZCA9PSAoTENJRCkgLTEpCi0JY29k ZV9wYWdlID0gMjAxMjc7IC8qIEFTQ0lJICovCi0gICAgICBlbHNlIGlmICghR2V0TG9jYWxlSW5m byAobGNpZCwKLQkJCSAgICAgICBMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSB8IExPQ0FMRV9SRVRV Uk5fTlVNQkVSLAotCQkJICAgICAgIChjaGFyICopICZjb2RlX3BhZ2UsIHNpemVvZiAoY29kZV9w YWdlKSkpCi0JY29kZV9wYWdlID0gMjAxMjc7IC8qIEFTQ0lJICovCi0gICAgICBTZXRDb25zb2xl Q1AgKGNvZGVfcGFnZSk7Ci0gICAgICBTZXRDb25zb2xlT3V0cHV0Q1AgKGNvZGVfcGFnZSk7Ci0g ICAgfQorICBnZXRfbGFuZ2luZm8gKGxvY2FsZSwgY2hhcnNldCk7CiAKICAgLyogU2V0IHRlcm1p bmFsIGNvZGUgcGFnZSBmcm9tIGxvY2FsZSAqLwogICAvKiBUaGlzIGNvZGUgaXMgYm9ycm93ZWQg ZnJvbSBtaW50dHk6IGNoYXJzZXQuYyAqLwpAQCAtMjg5Niw5MCArMTk2Niw5IEBAIGZoYW5kbGVy X3B0eV9zbGF2ZTo6c2V0dXBfbG9jYWxlICh2b2lkKQogCX0KIH0KIAotdm9pZAotZmhhbmRsZXJf cHR5X3NsYXZlOjpzZXRfZnJlZWNvbnNvbGVfb25fY2xvc2UgKGJvb2wgdmFsKQotewotICBmcmVl Y29uc29sZV9vbl9jbG9zZSA9IHZhbDsKLX0KLQotdm9pZAotZmhhbmRsZXJfcHR5X3NsYXZlOjp0 cmlnZ2VyX3JlZHJhd19zY3JlZW4gKHZvaWQpCi17Ci0gIC8qIEZvcmNpYmx5IHJlZHJhdyBzY3Jl ZW4gYmFzZWQgb24gY29uc29sZSBzY3JlZW4gYnVmZmVyLiAqLwotICAvKiBUaGUgZm9sbG93aW5n IGNvZGUgdHJpZ2dlcnMgcmVkcmF3aW5nIHRoZSBzY3JlZW4uICovCi0gIENPTlNPTEVfU0NSRUVO X0JVRkZFUl9JTkZPIHNiaTsKLSAgR2V0Q29uc29sZVNjcmVlbkJ1ZmZlckluZm8gKGdldF9vdXRw dXRfaGFuZGxlICgpLCAmc2JpKTsKLSAgU01BTExfUkVDVCByZWN0ID0gezAsIDAsCi0gICAgKFNI T1JUKSAoc2JpLmR3U2l6ZS5YIC0xKSwgKFNIT1JUKSAoc2JpLmR3U2l6ZS5ZIC0gMSl9OwotICBD T09SRCBkZXN0ID0gezAsIDB9OwotICBDSEFSX0lORk8gZmlsbCA9IHsnICcsIDB9OwotICBTY3Jv bGxDb25zb2xlU2NyZWVuQnVmZmVyIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgJnJlY3QsIE5VTEws IGRlc3QsICZmaWxsKTsKLSAgZ2V0X3R0eXAgKCktPm5lZWRfcmVkcmF3X3NjcmVlbiA9IGZhbHNl OwotfQotCi12b2lkCi1maGFuZGxlcl9wdHlfc2xhdmU6OmZpeHVwX2FmdGVyX2F0dGFjaCAoYm9v bCBuYXRpdmVfbWF5YmUsIGludCBmZF9zZXQpCi17Ci0gIGlmIChmZCA8IDApCi0gICAgZmQgPSBm ZF9zZXQ7Ci0gIGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0gICAgewotICAgICAgaWYgKGZo YW5kbGVyX2NvbnNvbGU6OmdldF9jb25zb2xlX3Byb2Nlc3NfaWQgKGdldF9oZWxwZXJfcHJvY2Vz c19pZCAoKSwKLQkJCQkJCSAgICB0cnVlKSkKLQlpZiAocGNvbl9hdHRhY2hlZF90byAhPSBnZXRf bWlub3IgKCkpCi0JICB7Ci0JICAgIHBjb25fYXR0YWNoZWRfdG8gPSBnZXRfbWlub3IgKCk7Ci0J ICAgIGluaXRfY29uc29sZV9oYW5kbGVyICh0cnVlKTsKLQkgIH0KLQotI2lmIDAgLyogVGhpcyBp cyBmb3IgZGVidWcgb25seS4gKi8KLSAgICAgIGlzSHlicmlkID0gdHJ1ZTsKLSAgICAgIGdldF90 dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9pbiA9IHRydWU7Ci0gICAgICBnZXRfdHR5cCAoKS0+c3dp dGNoX3RvX3Bjb25fb3V0ID0gdHJ1ZTsKLSNlbmRpZgotCi0gICAgICBpZiAocGNvbl9hdHRhY2hl ZF90byA9PSBnZXRfbWlub3IgKCkgJiYgbmF0aXZlX21heWJlKQotCXsKLQkgIGlmIChmZCA9PSAw KQotCSAgICB7Ci0JICAgICAgcHVsbF9wY29uX2lucHV0ICgpOwotCSAgICAgIERXT1JEIG1vZGUg PQotCQlFTkFCTEVfUFJPQ0VTU0VEX0lOUFVUIHwgRU5BQkxFX0xJTkVfSU5QVVQgfCBFTkFCTEVf RUNIT19JTlBVVDsKLQkgICAgICBTZXRDb25zb2xlTW9kZSAoZ2V0X2hhbmRsZSAoKSwgbW9kZSk7 Ci0JICAgICAgaWYgKGdldF90dHlwICgpLT5wY29uX3BpZCA9PSAwIHx8Ci0JCSAgIXBpbmZvIChn ZXRfdHR5cCAoKS0+cGNvbl9waWQpKQotCQlnZXRfdHR5cCAoKS0+cGNvbl9waWQgPSBteXNlbGYt PnBpZDsKLQkgICAgICBnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4gPSB0cnVlOwotCSAg ICB9Ci0JICBlbHNlIGlmIChmZCA9PSAxIHx8IGZkID09IDIpCi0JICAgIHsKLQkgICAgICBEV09S RCBtb2RlID0gRU5BQkxFX1BST0NFU1NFRF9PVVRQVVQgfCBFTkFCTEVfV1JBUF9BVF9FT0xfT1VU UFVUOwotCSAgICAgIFNldENvbnNvbGVNb2RlIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgbW9kZSk7 Ci0JICAgICAgYWNxdWlyZV9vdXRwdXRfbXV0ZXggKElORklOSVRFKTsKLQkgICAgICBpZiAoIWdl dF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQpCi0JCWdldF90dHlwICgpLT53YWl0X3Bjb25f ZndkICgpOwotCSAgICAgIGlmIChnZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gMCB8fAotCQkgICFw aW5mbyAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKSkKLQkJZ2V0X3R0eXAgKCktPnBjb25fcGlkID0g bXlzZWxmLT5waWQ7Ci0JICAgICAgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX291dCA9IHRy dWU7Ci0JICAgICAgcmVsZWFzZV9vdXRwdXRfbXV0ZXggKCk7Ci0KLQkgICAgICBpZiAoZ2V0X3R0 eXAgKCktPm5lZWRfcmVkcmF3X3NjcmVlbikKLQkJdHJpZ2dlcl9yZWRyYXdfc2NyZWVuICgpOwot CSAgICB9Ci0JICBpbml0X2NvbnNvbGVfaGFuZGxlciAoZmFsc2UpOwotCX0KLSAgICAgIGVsc2Ug aWYgKGZkID09IDAgJiYgbmF0aXZlX21heWJlKQotCS8qIFJlYWQgZnJvbSB1bmF0dGFjaGVkIHBz ZXVkbyBjb25zb2xlIGNhdXNlIGZyZWV6ZSwKLQkgICB0aGVyZWZvcmUsIGZhbGxiYWNrIHRvIGxl Z2FjeSBwdHkuICovCi0Jc2V0X2hhbmRsZSAoZ2V0X2hhbmRsZV9jeWcgKCkpOwotICAgIH0KLX0K LQogdm9pZAogZmhhbmRsZXJfcHR5X3NsYXZlOjpmaXh1cF9hZnRlcl9mb3JrIChIQU5ETEUgcGFy ZW50KQogewotICBmaXh1cF9hZnRlcl9hdHRhY2ggKGZhbHNlLCAtMSk7CiAgIC8vIGZvcmtfZml4 dXAgKHBhcmVudCwgaW51c2UsICJpbnVzZSIpOwogICAvLyBmaGFuZGxlcl9wdHlfY29tbW9uOjpm aXh1cF9hZnRlcl9mb3JrIChwYXJlbnQpOwogICByZXBvcnRfdHR5X2NvdW50cyAodGhpcywgImlu aGVyaXRlZCIsICIiKTsKQEAgLTI5OTIsNzEgKzE5ODEsMjIgQEAgZmhhbmRsZXJfcHR5X3NsYXZl OjpmaXh1cF9hZnRlcl9leGVjICgpCiAKICAgaWYgKCFjbG9zZV9vbl9leGVjICgpKQogICAgIGZp eHVwX2FmdGVyX2ZvcmsgKE5VTEwpOwkvKiBObyBwYXJlbnQgaGFuZGxlIHJlcXVpcmVkLiAqLwot ICBlbHNlIGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0gICAgewotICAgICAgaW50IHVzZWQg PSAwOwotICAgICAgaW50IGF0dGFjaGVkID0gMDsKLSAgICAgIGN5Z2hlYXBfZmRlbnVtIGNmZCAo ZmFsc2UpOwotICAgICAgd2hpbGUgKGNmZC5uZXh0ICgpID49IDApCi0JewotCSAgaWYgKGNmZC0+ Z2V0X21ham9yICgpID09IERFVl9QVFlTX01BSk9SIHx8Ci0JICAgICAgY2ZkLT5nZXRfbWFqb3Ig KCkgPT0gREVWX0NPTlNfTUFKT1IpCi0JICAgIHVzZWQgKys7Ci0JICBpZiAoY2ZkLT5nZXRfbWFq b3IgKCkgPT0gREVWX1BUWVNfTUFKT1IgJiYKLQkgICAgICBjZmQtPmdldF9taW5vciAoKSA9PSBw Y29uX2F0dGFjaGVkX3RvKQotCSAgICBhdHRhY2hlZCArKzsKLQl9Ci0KLSAgICAgIC8qIENhbGwg RnJlZUNvbnNvbGUoKSBpZiBubyB0dHkgaXMgb3BlbmVkIGFuZCB0aGUgcHJvY2VzcwotCSBpcyBh dHRhY2hlZCB0byBjb25zb2xlIGNvcnJlc3BvbmRpbmcgdG8gdHR5LiBUaGlzIGlzCi0JIG5lZWRl ZCB0byBtYWtlIEdOVSBzY3JlZW4gYW5kIHRtdXggd29yayBpbiBXaW5kb3dzIDEwCi0JIDE5MDMu ICovCi0gICAgICBpZiAoYXR0YWNoZWQgPT0gMSAmJiBnZXRfbWlub3IgKCkgPT0gcGNvbl9hdHRh Y2hlZF90bykKLQlwY29uX2F0dGFjaGVkX3RvID0gLTE7Ci0gICAgICBpZiAodXNlZCA9PSAxIC8q IEFib3V0IHRvIGNsb3NlIHRoaXMgdHR5ICovKQotCXsKLQkgIGluaXRfY29uc29sZV9oYW5kbGVy IChmYWxzZSk7Ci0JICBmcmVlX2F0dGFjaGVkX2NvbnNvbGUgKCk7Ci0JfQotICAgIH0KIAogICAv KiBTZXQgbG9jYWxlICovCiAgIGlmIChnZXRfdHR5cCAoKS0+dGVybV9jb2RlX3BhZ2UgPT0gMCkK ICAgICBzZXR1cF9sb2NhbGUgKCk7CiAKICAgLyogSG9vayBDb25zb2xlIEFQSSAqLwotICBpZiAo Z2V0X3BzZXVkb19jb25zb2xlICgpKQotICAgIHsKICNkZWZpbmUgRE9fSE9PSyhtb2R1bGUsIG5h bWUpIFwKLSAgICAgIGlmICghbmFtZSMjX09yaWcpIFwKLQl7IFwKLQkgIHZvaWQgKmFwaSA9IGhv b2tfYXBpIChtb2R1bGUsICNuYW1lLCAodm9pZCAqKSBuYW1lIyNfSG9va2VkKTsgXAotCSAgbmFt ZSMjX09yaWcgPSAoX190eXBlb2ZfXyAobmFtZSkgKikgYXBpOyBcCi0JICAvKmlmIChhcGkpIHN5 c3RlbV9wcmludGYgKCNuYW1lICIgaG9va2VkLiIpOyovIFwKLQl9Ci0gICAgICBET19IT09LIChO VUxMLCBXcml0ZUZpbGUpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgV3JpdGVDb25zb2xlQSk7Ci0g ICAgICBET19IT09LIChOVUxMLCBXcml0ZUNvbnNvbGVXKTsKLSAgICAgIERPX0hPT0sgKE5VTEws IFJlYWRGaWxlKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFJlYWRDb25zb2xlQSk7Ci0gICAgICBE T19IT09LIChOVUxMLCBSZWFkQ29uc29sZVcpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgV3JpdGVD b25zb2xlT3V0cHV0QSk7Ci0gICAgICBET19IT09LIChOVUxMLCBXcml0ZUNvbnNvbGVPdXRwdXRX KTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFdyaXRlQ29uc29sZU91dHB1dENoYXJhY3RlckEpOwot ICAgICAgRE9fSE9PSyAoTlVMTCwgV3JpdGVDb25zb2xlT3V0cHV0Q2hhcmFjdGVyVyk7Ci0gICAg ICBET19IT09LIChOVUxMLCBXcml0ZUNvbnNvbGVPdXRwdXRBdHRyaWJ1dGUpOwotICAgICAgRE9f SE9PSyAoTlVMTCwgU2V0Q29uc29sZUN1cnNvclBvc2l0aW9uKTsKLSAgICAgIERPX0hPT0sgKE5V TEwsIFNldENvbnNvbGVUZXh0QXR0cmlidXRlKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFdyaXRl Q29uc29sZUlucHV0QSk7Ci0gICAgICBET19IT09LIChOVUxMLCBXcml0ZUNvbnNvbGVJbnB1dFcp OwotICAgICAgRE9fSE9PSyAoTlVMTCwgUmVhZENvbnNvbGVJbnB1dEEpOwotICAgICAgRE9fSE9P SyAoTlVMTCwgUmVhZENvbnNvbGVJbnB1dFcpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgUGVla0Nv bnNvbGVJbnB1dEEpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgUGVla0NvbnNvbGVJbnB1dFcpOwot ICAgICAgLyogQ3JlYXRlUHJvY2VzcygpIGlzIGhvb2tlZCBmb3IgR0RCIGV0Yy4gKi8KLSAgICAg IERPX0hPT0sgKE5VTEwsIENyZWF0ZVByb2Nlc3NBKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIENy ZWF0ZVByb2Nlc3NXKTsKKyAgaWYgKCFuYW1lIyNfT3JpZykgXAorICAgIHsgXAorICAgICAgdm9p ZCAqYXBpID0gaG9va19hcGkgKG1vZHVsZSwgI25hbWUsICh2b2lkICopIG5hbWUjI19Ib29rZWQp OyBcCisgICAgICBuYW1lIyNfT3JpZyA9IChfX3R5cGVvZl9fIChuYW1lKSAqKSBhcGk7IFwKKyAg ICAgIC8qaWYgKGFwaSkgc3lzdGVtX3ByaW50ZiAoI25hbWUgIiBob29rZWQuIik7Ki8gXAogICAg IH0KKyAgLyogQ3JlYXRlUHJvY2VzcygpIGlzIGhvb2tlZCBmb3IgR0RCIGV0Yy4gKi8KKyAgRE9f SE9PSyAoTlVMTCwgQ3JlYXRlUHJvY2Vzc0EpOworICBET19IT09LIChOVUxMLCBDcmVhdGVQcm9j ZXNzVyk7CiB9CiAKIC8qIFRoaXMgdGhyZWFkIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIG1hc3RlciBj b250cm9sIHBpcGUuICBJdCB3YWl0cyBmb3IgYQpAQCAtMzIwNCwyNyArMjE0NCw2IEBAIHJlcGx5 OgogICByZXR1cm4gMDsKIH0KIAotdm9pZAotZmhhbmRsZXJfcHR5X21hc3Rlcjo6dHJhbnNmZXJf aW5wdXRfdG9fcGNvbiAodm9pZCkKLXsKLSAgV2FpdEZvclNpbmdsZU9iamVjdCAoaW5wdXRfbXV0 ZXgsIElORklOSVRFKTsKLSAgRFdPUkQgbjsKLSAgc2l6ZV90IHRyYW5zZmVyZWQgPSAwOwotICB3 aGlsZSAoOjpieXRlc19hdmFpbGFibGUgKG4sIGZyb21fbWFzdGVyX2N5ZykgJiYgbikKLSAgICB7 Ci0gICAgICBjaGFyIGJ1ZlsxMDI0XTsKLSAgICAgIFJlYWRGaWxlIChmcm9tX21hc3Rlcl9jeWcs IGJ1Ziwgc2l6ZW9mIChidWYpLCAmbiwgMCk7Ci0gICAgICBjaGFyICpwID0gYnVmOwotICAgICAg d2hpbGUgKChwID0gKGNoYXIgKikgbWVtY2hyIChwLCAnXG4nLCBuIC0gKHAgLSBidWYpKSkpCi0J KnAgPSAnXHInOwotICAgICAgaWYgKFdyaXRlRmlsZSAodG9fc2xhdmUsIGJ1ZiwgbiwgJm4sIDAp KQotCXRyYW5zZmVyZWQgKz0gbjsKLSAgICB9Ci0gIGlmICh0cmFuc2ZlcmVkKQotICAgIGdldF90 dHlwICgpLT5wY29uX2luX2VtcHR5ID0gZmFsc2U7Ci0gIFJlbGVhc2VNdXRleCAoaW5wdXRfbXV0 ZXgpOwotfQotCiBzdGF0aWMgRFdPUkQgV0lOQVBJCiBwdHlfbWFzdGVyX3RocmVhZCAoVk9JRCAq YXJnKQogewpAQCAtMzI0MCwyMyArMjE1OSw3IEBAIGZoYW5kbGVyX3B0eV9tYXN0ZXI6OnB0eV9t YXN0ZXJfZndkX3RocmVhZCAoKQogICB0ZXJtaW9zX3ByaW50ZiAoIlN0YXJ0ZWQuIik7CiAgIGZv ciAoOzspCiAgICAgewotICAgICAgaWYgKGdldF9wc2V1ZG9fY29uc29sZSAoKSkKLQl7Ci0JICBn ZXRfdHR5cCAoKS0+cGNvbl9sYXN0X3RpbWUgPSBHZXRUaWNrQ291bnQgKCk7Ci0JICB3aGlsZSAo OjpieXRlc19hdmFpbGFibGUgKHJsZW4sIGZyb21fc2xhdmUpICYmIHJsZW4gPT0gMCkKLQkgICAg ewotCSAgICAgIC8qIEZvcmNpYmx5IHRyYW5zZmVyIGlucHV0IGlmIGl0IGlzIHJlcXVlc3RlZCBi eSBzbGF2ZS4KLQkJIFRoaXMgaGFwcGVucyB3aGVuIGlucHV0IGRhdGEgc2hvdWxkIGJlIHRyYW5z ZmVyZWQKLQkJIGZyb20gdGhlIGlucHV0IHBpcGUgZm9yIGN5Z3dpbiBhcHBzIHRvIHRoZSBpbnB1 dCBwaXBlCi0JCSBmb3IgbmF0aXZlIGFwcHMuICovCi0JICAgICAgaWYgKGdldF90dHlwICgpLT5y ZXFfdHJhbnNmZXJfaW5wdXRfdG9fcGNvbikKLQkJewotCQkgIHRyYW5zZmVyX2lucHV0X3RvX3Bj b24gKCk7Ci0JCSAgZ2V0X3R0eXAgKCktPnJlcV90cmFuc2Zlcl9pbnB1dF90b19wY29uID0gZmFs c2U7Ci0JCX0KLQkgICAgICBTbGVlcCAoMSk7Ci0JICAgIH0KLQl9CisgICAgICBnZXRfdHR5cCAo KS0+cGNvbl9sYXN0X3RpbWUgPSBHZXRUaWNrQ291bnQgKCk7CiAgICAgICBpZiAoIVJlYWRGaWxl IChmcm9tX3NsYXZlLCBvdXRidWYsIHNpemVvZiBvdXRidWYsICZybGVuLCBOVUxMKSkKIAl7CiAJ ICB0ZXJtaW9zX3ByaW50ZiAoIlJlYWRGaWxlIGZvciBmb3J3YXJkaW5nIGZhaWxlZCwgJUUiKTsK QEAgLTMyNjQsNTEgKzIxNjcsMTEgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6cHR5X21hc3Rlcl9m d2RfdGhyZWFkICgpCiAJfQogICAgICAgc3NpemVfdCB3bGVuID0gcmxlbjsKICAgICAgIGNoYXIg KnB0ciA9IG91dGJ1ZjsKLSAgICAgIGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCisgICAgICBp ZiAoZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGUpCiAJewotCSAgLyogQXZvaWQgZHVwbGlj YXRpbmcgc2xhdmUgb3V0cHV0IHdoaWNoIGlzIGFscmVhZHkgc2VudCB0bwotCSAgICAgdG9fbWFz dGVyX2N5ZyAqLwotCSAgaWYgKCFnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25fb3V0KQotCSAg ICBjb250aW51ZTsKLQotCSAgLyogQXZvaWQgc2V0dGluZyB3aW5kb3cgdGl0bGUgdG8gImN5Z3dp bi1jb25zb2xlLWhlbHBlci5leGUiICovCisJICAvKiBSZW1vdmUgQ1NJID4gUG0gbSAqLwogCSAg aW50IHN0YXRlID0gMDsKIAkgIGludCBzdGFydF9hdCA9IDA7Ci0JICBmb3IgKERXT1JEIGk9MDsg aTxybGVuOyBpKyspCi0JICAgIGlmIChvdXRidWZbaV0gPT0gJ1wwMzMnKQotCSAgICAgIHsKLQkJ c3RhcnRfYXQgPSBpOwotCQlzdGF0ZSA9IDE7Ci0JCWNvbnRpbnVlOwotCSAgICAgIH0KLQkgICAg ZWxzZSBpZiAoKHN0YXRlID09IDEgJiYgb3V0YnVmW2ldID09ICddJykgfHwKLQkJICAgICAoc3Rh dGUgPT0gMiAmJiBvdXRidWZbaV0gPT0gJzAnKSB8fAotCQkgICAgIChzdGF0ZSA9PSAzICYmIG91 dGJ1ZltpXSA9PSAnOycpKQotCSAgICAgIHsKLQkJc3RhdGUgKys7Ci0JCWNvbnRpbnVlOwotCSAg ICAgIH0KLQkgICAgZWxzZSBpZiAoc3RhdGUgPT0gNCAmJiBvdXRidWZbaV0gPT0gJ1xhJykKLQkg ICAgICB7Ci0JCWNvbnN0IGNoYXIgKmhlbHBlcl9zdHIgPSAiXFxiaW5cXGN5Z3dpbi1jb25zb2xl LWhlbHBlci5leGUiOwotCQlpZiAobWVtbWVtICgmb3V0YnVmW3N0YXJ0X2F0XSwgaSArIDEgLSBz dGFydF9hdCwKLQkJCSAgICBoZWxwZXJfc3RyLCBzdHJsZW4gKGhlbHBlcl9zdHIpKSkKLQkJICB7 Ci0JCSAgICBtZW1tb3ZlICgmb3V0YnVmW3N0YXJ0X2F0XSwgJm91dGJ1ZltpKzFdLCBybGVuLWkt MSk7Ci0JCSAgICBybGVuID0gd2xlbiA9IHN0YXJ0X2F0ICsgcmxlbiAtIGkgLSAxOwotCQkgIH0K LQkJc3RhdGUgPSAwOwotCQljb250aW51ZTsKLQkgICAgICB9Ci0JICAgIGVsc2UgaWYgKG91dGJ1 ZltpXSA9PSAnXGEnKQotCSAgICAgIHsKLQkJc3RhdGUgPSAwOwotCQljb250aW51ZTsKLQkgICAg ICB9Ci0KLQkgIC8qIFJlbW92ZSBDU0kgPiBQbSBtICovCi0JICBzdGF0ZSA9IDA7Ci0JICBzdGFy dF9hdCA9IDA7CiAJICBmb3IgKERXT1JEIGk9MDsgaTxybGVuOyBpKyspCiAJICAgIGlmIChvdXRi dWZbaV0gPT0gJ1wwMzMnKQogCSAgICAgIHsKQEAgLTMzODYsMjAxICsyMjQ5LDYgQEAgcHR5X21h c3Rlcl9md2RfdGhyZWFkIChWT0lEICphcmcpCiAgIHJldHVybiAoKGZoYW5kbGVyX3B0eV9tYXN0 ZXIgKikgYXJnKS0+cHR5X21hc3Rlcl9md2RfdGhyZWFkICgpOwogfQogCi0vKiBJZiBtYXN0ZXIg cHJvY2VzcyBpcyBydW5uaW5nIGFzIHNlcnZpY2UsIGF0dGFjaGluZyB0bwotICAgcHNldWRvIGNv bnNvbGUgc2hvdWxkIGJlIGRvbmUgaW4gZm9yay4gSWYgYXR0YWNoaW5nCi0gICBpcyBkb25lIGlu IHNwYXduIGZvciBpbmV0ZCBvciBzc2hkLCBpdCBmYWlscyBiZWNhdXNlCi0gICB0aGUgaGVscGVy IHByb2Nlc3MgaXMgcnVubmluZyBhcyBwcml2aWxlZ2VkIHVzZXIgd2hpbGUKLSAgIHNsYXZlIHBy b2Nlc3MgaXMgbm90LiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGV0ZXJtaW5lCi0gICBpZiB0 aGUgcHJvY2VzcyBpcyBydW5uaW5nIGFzIGEgc3J2aWNlIG9yIG5vdC4gKi8KLWlubGluZSBzdGF0 aWMgYm9vbAotaXNfcnVubmluZ19hc19zZXJ2aWNlICh2b2lkKQotewotICByZXR1cm4gY2hlY2tf dG9rZW5fbWVtYmVyc2hpcCAod2VsbF9rbm93bl9zZXJ2aWNlX3NpZCkKLSAgICB8fCBjeWdoZWFw LT51c2VyLnNhdmVkX3NpZCAoKSA9PSB3ZWxsX2tub3duX3N5c3RlbV9zaWQ7Ci19Ci0KLWJvb2wK LWZoYW5kbGVyX3B0eV9tYXN0ZXI6OnNldHVwX3BzZXVkb2NvbnNvbGUgKCkKLXsKLSAgaWYgKGRp c2FibGVfcGNvbikKLSAgICByZXR1cm4gZmFsc2U7Ci0gIC8qIElmIHRoZSBsZWdhY3kgY29uc29s ZSBtb2RlIGlzIGVuYWJsZWQsIHBzZXVkbyBjb25zb2xlIHNlZW1zCi0gICAgIG5vdCB0byB3b3Jr IGFzIGV4cGVjdGVkLiBUbyBkZXRlcm1pbmUgY29uc29sZSBtb2RlLCByZWdpc3RyeQotICAgICBr ZXkgRm9yY2VWMiBpbiBIS0VZX0NVUlJFTlRfVVNFUlxDb25zb2xlIGlzIGNoZWNrZWQuICovCi0g IHJlZ19rZXkgcmVnIChIS0VZX0NVUlJFTlRfVVNFUiwgS0VZX1JFQUQsIEwiQ29uc29sZSIsIE5V TEwpOwotICBpZiAocmVnLmVycm9yICgpKQotICAgIHJldHVybiBmYWxzZTsKLSAgaWYgKHJlZy5n ZXRfZHdvcmQgKEwiRm9yY2VWMiIsIDEpID09IDApCi0gICAgewotICAgICAgdGVybWlvc19wcmlu dGYgKCJQc2V1ZG8gY29uc29sZSBpcyBkaXNhYmxlZCAiCi0JCSAgICAgICJiZWNhdXNlIHRoZSBs ZWdhY3kgY29uc29sZSBtb2RlIGlzIGVuYWJsZWQuIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0g ICAgfQotCi0gIC8qIFBzZXVkbyBjb25zb2xlIHN1cHByb3QgaXMgcmVhbGl6ZWQgdXNpbmcgYSB0 cmlja3kgdGVjaG5pYy4KLSAgICAgUFRZIG5lZWQgdGhlIHBzZXVkbyBjb25zb2xlIGhhbmRsZXMs IGhvd2V2ZXIsIHRoZXkgY2Fubm90Ci0gICAgIGJlIHJldHJpZXZlZCBieSBub3JtYWwgcHJvY2Vk dXJlLiBUaGVyZWZvcmUsIHJ1biBhIGhlbHBlcgotICAgICBwcm9jZXNzIGluIGEgcHNldWRvIGNv bnNvbGUgYW5kIGdldCB0aGVtIGZyb20gdGhlIGhlbHBlci4KLSAgICAgU2xhdmUgcHJvY2VzcyB3 aWxsIGF0dGFjaCB0byB0aGUgcHNldWRvIGNvbnNvbGUgaW4gdGhlCi0gICAgIGhlbHBlciBwcm9j ZXNzIHVzaW5nIEF0dGFjaENvbnNvbGUoKS4gKi8KLSAgQ09PUkQgc2l6ZSA9IHsKLSAgICAoU0hP UlQpIGdldF90dHlwICgpLT53aW5zaXplLndzX2NvbCwKLSAgICAoU0hPUlQpIGdldF90dHlwICgp LT53aW5zaXplLndzX3JvdwotICB9OwotICBDcmVhdGVQaXBlICgmZnJvbV9tYXN0ZXIsICZ0b19z bGF2ZSwgJnNlY19ub25lLCAwKTsKLSAgU2V0TGFzdEVycm9yIChFUlJPUl9TVUNDRVNTKTsKLSAg SFJFU1VMVCByZXMgPSBDcmVhdGVQc2V1ZG9Db25zb2xlIChzaXplLCBmcm9tX21hc3RlciwgdG9f bWFzdGVyLAotCQkJCSAgICAgMCwgJmdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlKTsKLSAg aWYgKHJlcyAhPSBTX09LIHx8IEdldExhc3RFcnJvciAoKSA9PSBFUlJPUl9QUk9DX05PVF9GT1VO RCkKLSAgICB7Ci0gICAgICBpZiAocmVzICE9IFNfT0spCi0Jc3lzdGVtX3ByaW50ZiAoIkNyZWF0 ZVBzZXVkb0NvbnNvbGUoKSBmYWlsZWQuICUwOHhcbiIsCi0JCSAgICAgICBHZXRMYXN0RXJyb3Ig KCkpOwotICAgICAgZ290byBmYWxsYmFjazsKLSAgICB9Ci0KLSAgLyogSWYgbWFzdGVyIHByb2Nl c3MgaXMgcnVubmluZyBhcyBzZXJ2aWNlLCBhdHRhY2hpbmcgdG8KLSAgICAgcHNldWRvIGNvbnNv bGUgc2hvdWxkIGJlIGRvbmUgaW4gZm9yay4gSWYgYXR0YWNoaW5nCi0gICAgIGlzIGRvbmUgaW4g c3Bhd24gZm9yIGluZXRkIG9yIHNzaGQsIGl0IGZhaWxzIGJlY2F1c2UKLSAgICAgdGhlIGhlbHBl ciBwcm9jZXNzIGlzIHJ1bm5pbmcgYXMgcHJpdmlsZWdlZCB1c2VyIHdoaWxlCi0gICAgIHNsYXZl IHByb2Nlc3MgaXMgbm90LiAqLwotICBpZiAoaXNfcnVubmluZ19hc19zZXJ2aWNlICgpKQotICAg IGdldF90dHlwICgpLT5hdHRhY2hfcGNvbl9pbl9mb3JrID0gdHJ1ZTsKLQotICBTVEFSVFVQSU5G T0VYVyBzaV9oZWxwZXI7Ci0gIEhBTkRMRSBoZWxsbywgZ29vZGJ5ZTsKLSAgSEFORExFIGhyLCBo dzsKLSAgUFJPQ0VTU19JTkZPUk1BVElPTiBwaV9oZWxwZXI7Ci0gIEhBTkRMRSBocENvbkluLCBo cENvbk91dDsKLSAgewotICAgIFNJWkVfVCBieXRlc1JlcXVpcmVkOwotICAgIEluaXRpYWxpemVQ cm9jVGhyZWFkQXR0cmlidXRlTGlzdCAoTlVMTCwgMiwgMCwgJmJ5dGVzUmVxdWlyZWQpOwotICAg IFplcm9NZW1vcnkgKCZzaV9oZWxwZXIsIHNpemVvZiAoc2lfaGVscGVyKSk7Ci0gICAgc2lfaGVs cGVyLlN0YXJ0dXBJbmZvLmNiID0gc2l6ZW9mIChTVEFSVFVQSU5GT0VYVyk7Ci0gICAgc2lfaGVs cGVyLmxwQXR0cmlidXRlTGlzdCA9IChQUFJPQ19USFJFQURfQVRUUklCVVRFX0xJU1QpCi0gICAg ICBIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBieXRlc1JlcXVpcmVkKTsKLSAgICBp ZiAoc2lfaGVscGVyLmxwQXR0cmlidXRlTGlzdCA9PSBOVUxMKQotICAgICAgZ290byBjbGVhbnVw X3BzZXVkb19jb25zb2xlOwotICAgIGlmICghSW5pdGlhbGl6ZVByb2NUaHJlYWRBdHRyaWJ1dGVM aXN0IChzaV9oZWxwZXIubHBBdHRyaWJ1dGVMaXN0LAotCQkJCQkgICAgMiwgMCwgJmJ5dGVzUmVx dWlyZWQpKQotICAgICAgZ290byBjbGVhbnVwX2hlYXA7Ci0gICAgaWYgKCFVcGRhdGVQcm9jVGhy ZWFkQXR0cmlidXRlIChzaV9oZWxwZXIubHBBdHRyaWJ1dGVMaXN0LAotCQkJCSAgICAwLAotCQkJ CSAgICBQUk9DX1RIUkVBRF9BVFRSSUJVVEVfUFNFVURPQ09OU09MRSwKLQkJCQkgICAgZ2V0X3R0 eXAgKCktPmhfcHNldWRvX2NvbnNvbGUsCi0JCQkJICAgIHNpemVvZiAoZ2V0X3R0eXAgKCktPmhf cHNldWRvX2NvbnNvbGUpLAotCQkJCSAgICBOVUxMLCBOVUxMKSkKLSAgICAgIGdvdG8gY2xlYW51 cF9oZWFwOwotICAgIC8qIENyZWF0ZSBldmVudHMgZm9yIHN0YXJ0L3N0b3AgaGVscGVyIHByb2Nl c3MuICovCi0gICAgaGVsbG8gPSBDcmVhdGVFdmVudCAoJnNlY19ub25lLCB0cnVlLCBmYWxzZSwg TlVMTCk7Ci0gICAgZ29vZGJ5ZSA9IENyZWF0ZUV2ZW50ICgmc2VjX25vbmUsIHRydWUsIGZhbHNl LCBOVUxMKTsKLSAgICAvKiBDcmVhdGUgYSBwaXBlIGZvciByZWNlaXZpbmcgcHNldWRvIGNvbnNv bGUgaGFuZGxlcyAqLwotICAgIENyZWF0ZVBpcGUgKCZociwgJmh3LCAmc2VjX25vbmUsIDApOwot ICAgIC8qIEluaGVyaXQgb25seSBoYW5kbGVzIHdoaWNoIGFyZSBuZWVkZWQgYnkgaGVscGVyLiAq LwotICAgIEhBTkRMRSBoYW5kbGVzX3RvX2luaGVyaXRbXSA9IHtoZWxsbywgZ29vZGJ5ZSwgaHd9 OwotICAgIGlmICghVXBkYXRlUHJvY1RocmVhZEF0dHJpYnV0ZSAoc2lfaGVscGVyLmxwQXR0cmli dXRlTGlzdCwKLQkJCQkgICAgMCwKLQkJCQkgICAgUFJPQ19USFJFQURfQVRUUklCVVRFX0hBTkRM RV9MSVNULAotCQkJCSAgICBoYW5kbGVzX3RvX2luaGVyaXQsCi0JCQkJICAgIHNpemVvZiAoaGFu ZGxlc190b19pbmhlcml0KSwKLQkJCQkgICAgTlVMTCwgTlVMTCkpCi0gICAgICBnb3RvIGNsZWFu dXBfZXZlbnRfYW5kX3BpcGVzOwotICAgIC8qIENyZWF0ZSBoZWxwZXIgcHJvY2VzcyAqLwotICAg IFdDSEFSIGNtZFtNQVhfUEFUSF07Ci0gICAgcGF0aF9jb252IGhlbHBlciAoIi9iaW4vY3lnd2lu LWNvbnNvbGUtaGVscGVyLmV4ZSIpOwotICAgIHNpemVfdCBsZW4gPSBoZWxwZXIuZ2V0X3dpZGVf d2luMzJfcGF0aF9sZW4gKCk7Ci0gICAgaGVscGVyLmdldF93aWRlX3dpbjMyX3BhdGggKGNtZCk7 Ci0gICAgX19zbWFsbF9zd3ByaW50ZiAoY21kICsgbGVuLCBMIiAlcCAlcCAlcCIsIGhlbGxvLCBn b29kYnllLCBodyk7Ci0gICAgc2lfaGVscGVyLlN0YXJ0dXBJbmZvLmR3RmxhZ3MgPSBTVEFSVEZf VVNFU1RESEFORExFUzsKLSAgICBzaV9oZWxwZXIuU3RhcnR1cEluZm8uaFN0ZElucHV0ID0gTlVM TDsKLSAgICBzaV9oZWxwZXIuU3RhcnR1cEluZm8uaFN0ZE91dHB1dCA9IE5VTEw7Ci0gICAgc2lf aGVscGVyLlN0YXJ0dXBJbmZvLmhTdGRFcnJvciA9IE5VTEw7Ci0gICAgaWYgKCFDcmVhdGVQcm9j ZXNzVyAoTlVMTCwgY21kLCAmc2VjX25vbmUsICZzZWNfbm9uZSwKLQkJCSBUUlVFLCBFWFRFTkRF RF9TVEFSVFVQSU5GT19QUkVTRU5ULAotCQkJIE5VTEwsIE5VTEwsICZzaV9oZWxwZXIuU3RhcnR1 cEluZm8sICZwaV9oZWxwZXIpKQotICAgICAgZ290byBjbGVhbnVwX2V2ZW50X2FuZF9waXBlczsK LSAgICBmb3IgKDs7KQotICAgICAgewotICAgICAgICBEV09SRCB3YWl0X3Jlc3VsdCA9IFdhaXRG b3JTaW5nbGVPYmplY3QgKGhlbGxvLCA1MDApOwotCWlmICh3YWl0X3Jlc3VsdCA9PSBXQUlUX09C SkVDVF8wKQotCSAgYnJlYWs7Ci0JaWYgKHdhaXRfcmVzdWx0ICE9IFdBSVRfVElNRU9VVCkKLQkg IGdvdG8gY2xlYW51cF9oZWxwZXJfcHJvY2VzczsKLQlEV09SRCBleGl0X2NvZGU7Ci0JaWYgKCFH ZXRFeGl0Q29kZVByb2Nlc3MocGlfaGVscGVyLmhQcm9jZXNzLCAmZXhpdF9jb2RlKSkKLQkgIGdv dG8gY2xlYW51cF9oZWxwZXJfcHJvY2VzczsKLQlpZiAoZXhpdF9jb2RlID09IFNUSUxMX0FDVElW RSkKLQkgIGNvbnRpbnVlOwotCWlmIChleGl0X2NvZGUgIT0gMCB8fAotCSAgICBXYWl0Rm9yU2lu Z2xlT2JqZWN0IChoZWxsbywgNTAwKSAhPSBXQUlUX09CSkVDVF8wKQotCSAgZ290byBjbGVhbnVw X2hlbHBlcl9wcm9jZXNzOwotCWJyZWFrOwotICAgICAgfQotICAgIENsb3NlSGFuZGxlIChoZWxs byk7Ci0gICAgQ2xvc2VIYW5kbGUgKHBpX2hlbHBlci5oVGhyZWFkKTsKLSAgICAvKiBSZXRyaWV2 ZSBwc2V1ZG8gY29uc29sZSBoYW5kbGVzICovCi0gICAgRFdPUkQgckxlbjsKLSAgICBjaGFyIGJ1 Zls2NF07Ci0gICAgaWYgKCFSZWFkRmlsZSAoaHIsIGJ1Ziwgc2l6ZW9mIChidWYpLCAmckxlbiwg TlVMTCkpCi0gICAgICBnb3RvIGNsZWFudXBfaGVscGVyX3Byb2Nlc3M7Ci0gICAgYnVmW3JMZW5d ID0gJ1wwJzsKLSAgICBzc2NhbmYgKGJ1ZiwgIlN0ZEhhbmRsZXM9JXAsJXAiLCAmaHBDb25Jbiwg JmhwQ29uT3V0KTsKLSAgICBpZiAoIUR1cGxpY2F0ZUhhbmRsZSAocGlfaGVscGVyLmhQcm9jZXNz LCBocENvbkluLAotCQkJICBHZXRDdXJyZW50UHJvY2VzcyAoKSwgJmhwQ29uSW4sIDAsCi0JCQkg IFRSVUUsIERVUExJQ0FURV9TQU1FX0FDQ0VTUykpCi0gICAgICBnb3RvIGNsZWFudXBfaGVscGVy X3Byb2Nlc3M7Ci0gICAgaWYgKCFEdXBsaWNhdGVIYW5kbGUgKHBpX2hlbHBlci5oUHJvY2Vzcywg aHBDb25PdXQsCi0JCQkgIEdldEN1cnJlbnRQcm9jZXNzICgpLCAmaHBDb25PdXQsIDAsCi0JCQkg IFRSVUUsIERVUExJQ0FURV9TQU1FX0FDQ0VTUykpCi0gICAgICBnb3RvIGNsZWFudXBfcGNvbl9p bjsKLSAgICBDbG9zZUhhbmRsZSAoaHIpOwotICAgIENsb3NlSGFuZGxlIChodyk7Ci0gICAgLyog Q2xlYW4gdXAgKi8KLSAgICBEZWxldGVQcm9jVGhyZWFkQXR0cmlidXRlTGlzdCAoc2lfaGVscGVy LmxwQXR0cmlidXRlTGlzdCk7Ci0gICAgSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBz aV9oZWxwZXIubHBBdHRyaWJ1dGVMaXN0KTsKLSAgfQotICAvKiBTZXR0aW5nIGluZm9ybWF0aW9u IG9mIHN0dWZmcyByZWdhcmRpbmcgcHNldWRvIGNvbnNvbGUgKi8KLSAgZ2V0X3R0eXAgKCktPmhf aGVscGVyX2dvb2RieWUgPSBnb29kYnllOwotICBnZXRfdHR5cCAoKS0+aF9oZWxwZXJfcHJvY2Vz cyA9IHBpX2hlbHBlci5oUHJvY2VzczsKLSAgZ2V0X3R0eXAgKCktPmhlbHBlcl9wcm9jZXNzX2lk ID0gcGlfaGVscGVyLmR3UHJvY2Vzc0lkOwotICBDbG9zZUhhbmRsZSAoZnJvbV9tYXN0ZXIpOwot ICBDbG9zZUhhbmRsZSAodG9fbWFzdGVyKTsKLSAgZnJvbV9tYXN0ZXIgPSBocENvbkluOwotICB0 b19tYXN0ZXIgPSBocENvbk91dDsKLSAgUmVzaXplUHNldWRvQ29uc29sZSAoZ2V0X3R0eXAgKCkt PmhfcHNldWRvX2NvbnNvbGUsIHNpemUpOwotICByZXR1cm4gdHJ1ZTsKLQotY2xlYW51cF9wY29u X2luOgotICBDbG9zZUhhbmRsZSAoaHBDb25Jbik7Ci1jbGVhbnVwX2hlbHBlcl9wcm9jZXNzOgot ICBTZXRFdmVudCAoZ29vZGJ5ZSk7Ci0gIFdhaXRGb3JTaW5nbGVPYmplY3QgKHBpX2hlbHBlci5o UHJvY2VzcywgSU5GSU5JVEUpOwotICBDbG9zZUhhbmRsZSAocGlfaGVscGVyLmhQcm9jZXNzKTsK LSAgZ290byBza2lwX2Nsb3NlX2hlbGxvOwotY2xlYW51cF9ldmVudF9hbmRfcGlwZXM6Ci0gIENs b3NlSGFuZGxlIChoZWxsbyk7Ci1za2lwX2Nsb3NlX2hlbGxvOgotICBDbG9zZUhhbmRsZSAoZ29v ZGJ5ZSk7Ci0gIENsb3NlSGFuZGxlIChocik7Ci0gIENsb3NlSGFuZGxlIChodyk7Ci1jbGVhbnVw X2hlYXA6Ci0gIEhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgc2lfaGVscGVyLmxwQXR0 cmlidXRlTGlzdCk7Ci1jbGVhbnVwX3BzZXVkb19jb25zb2xlOgotICB7Ci0gICAgSFBDT05fSU5U RVJOQUwgKmhwID0gKEhQQ09OX0lOVEVSTkFMICopIGdldF90dHlwICgpLT5oX3BzZXVkb19jb25z b2xlOwotICAgIEhBTkRMRSB0bXAgPSBocC0+aENvbkhvc3RQcm9jZXNzOwotICAgIENsb3NlUHNl dWRvQ29uc29sZSAoZ2V0X3BzZXVkb19jb25zb2xlICgpKTsKLSAgICBDbG9zZUhhbmRsZSAodG1w KTsKLSAgfQotZmFsbGJhY2s6Ci0gIENsb3NlSGFuZGxlIChmcm9tX21hc3Rlcik7Ci0gIENsb3Nl SGFuZGxlICh0b19zbGF2ZSk7Ci0gIGZyb21fbWFzdGVyID0gZnJvbV9tYXN0ZXJfY3lnOwotICB0 b19zbGF2ZSA9IE5VTEw7Ci0gIGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlID0gTlVMTDsK LSAgcmV0dXJuIGZhbHNlOwotfQotCiBib29sCiBmaGFuZGxlcl9wdHlfbWFzdGVyOjpzZXR1cCAo KQogewpAQCAtMzU5MywxMSArMjI2MSw2IEBAIGZoYW5kbGVyX3B0eV9tYXN0ZXI6OnNldHVwICgp CiAgIGlmICh1bml0IDwgMCkKICAgICByZXR1cm4gZmFsc2U7CiAKLSAgLyogZnJvbV9tYXN0ZXIg c2hvdWxkIGJlIHVzZWQgZm9yIHBzZXVkbyBjb25zb2xlLgotICAgICBKdXN0IGNvcHkgZnJvbV9t YXN0ZXJfY3lnIGhlcmUgZm9yIHRoZSBjYXNlIHRoYXQKLSAgICAgcHNldWRvIGNvbnNvbGUgaXMg bm90IGF2YWlsYWJsZS4gKi8KLSAgZnJvbV9tYXN0ZXIgPSBmcm9tX21hc3Rlcl9jeWc7Ci0KICAg UHJvdGVjdEhhbmRsZTEgKGdldF9vdXRwdXRfaGFuZGxlICgpLCB0b19wdHkpOwogCiAgIHR0eSYg dCA9ICpjeWd3aW5fc2hhcmVkLT50dHlbdW5pdF07CkBAIC0zNjk2LDE1ICsyMzU5LDIxIEBAIGZo YW5kbGVyX3B0eV9tYXN0ZXI6OnNldHVwICgpCiAgICAgICBnb3RvIGVycjsKICAgICB9CiAKLSAg dC53aW5zaXplLndzX2NvbCA9IDgwOwotICB0LndpbnNpemUud3Nfcm93ID0gMjU7Ci0KLSAgc2V0 dXBfcHNldWRvY29uc29sZSAoKTsKKyAgX19zbWFsbF9zcHJpbnRmIChwaXBlbmFtZSwgInB0eSVk LXRvLXNsYXZlIiwgdW5pdCk7CisgIHJlcyA9IGZoYW5kbGVyX3BpcGU6OmNyZWF0ZSAoJnNlY19u b25lLCAmZnJvbV9tYXN0ZXIsICZ0b19zbGF2ZSwKKwkJCSAgICAgICBmaGFuZGxlcl9wdHlfY29t bW9uOjpwaXBlc2l6ZSwgcGlwZW5hbWUsIDApOworICBpZiAocmVzKQorICAgIHsKKyAgICAgIGVy cnN0ciA9ICJpbnB1dCBwaXBlIjsKKyAgICAgIGdvdG8gZXJyOworICAgIH0KIAogICB0LnNldF9m cm9tX21hc3RlciAoZnJvbV9tYXN0ZXIpOwogICB0LnNldF9mcm9tX21hc3Rlcl9jeWcgKGZyb21f bWFzdGVyX2N5Zyk7CiAgIHQuc2V0X3RvX21hc3RlciAodG9fbWFzdGVyKTsKICAgdC5zZXRfdG9f bWFzdGVyX2N5ZyAodG9fbWFzdGVyX2N5Zyk7CisgIHQud2luc2l6ZS53c19jb2wgPSA4MDsKKyAg dC53aW5zaXplLndzX3JvdyA9IDI1OwogICB0Lm1hc3Rlcl9waWQgPSBteXNlbGYtPnBpZDsKIAog ICBkZXYgKCkucGFyc2UgKERFVl9QVFlNX01BSk9SLCB1bml0KTsKQEAgLTM3MTcsNiArMjM4Niw3 IEBAIGZoYW5kbGVyX3B0eV9tYXN0ZXI6OnNldHVwICgpCiBlcnI6CiAgIF9fc2V0ZXJybm8gKCk7 CiAgIGNsb3NlX21heWJlIChmcm9tX3NsYXZlKTsKKyAgY2xvc2VfbWF5YmUgKHRvX3NsYXZlKTsK ICAgY2xvc2VfbWF5YmUgKGdldF9oYW5kbGUgKCkpOwogICBjbG9zZV9tYXliZSAoZ2V0X291dHB1 dF9oYW5kbGUgKCkpOwogICBjbG9zZV9tYXliZSAoaW5wdXRfYXZhaWxhYmxlX2V2ZW50KTsKQEAg LTM3NzYsOSArMjQ0Niw2IEBAIGZoYW5kbGVyX3B0eV9jb21tb246OnByb2Nlc3Nfb3Bvc3Rfb3V0 cHV0IChIQU5ETEUgaCwgY29uc3Qgdm9pZCAqcHRyLCBzc2l6ZV90JiBsCiB7CiAgIHNzaXplX3Qg dG93cml0ZSA9IGxlbjsKICAgQk9PTCByZXMgPSBUUlVFOwotICBCT09MIChXSU5BUEkgKldyaXRl RnVuYykKLSAgICAoSEFORExFLCBMUENWT0lELCBEV09SRCwgTFBEV09SRCwgTFBPVkVSTEFQUEVE KTsKLSAgV3JpdGVGdW5jID0gV3JpdGVGaWxlX09yaWcgPyBXcml0ZUZpbGVfT3JpZyA6IFdyaXRl RmlsZTsKICAgd2hpbGUgKHRvd3JpdGUpCiAgICAgewogICAgICAgaWYgKCFpc19lY2hvKQpAQCAt MzgwMSw3ICsyNDY4LDcgQEAgZmhhbmRsZXJfcHR5X2NvbW1vbjo6cHJvY2Vzc19vcG9zdF9vdXRw dXQgKEhBTkRMRSBoLCBjb25zdCB2b2lkICpwdHIsIHNzaXplX3QmIGwKICAgICAgIGlmICghKGdl dF90dHlwICgpLT50aS5jX29mbGFnICYgT1BPU1QpKQkvLyByYXcgb3V0cHV0IG1vZGUKIAl7CiAJ ICBEV09SRCBuID0gTUlOIChPVVRfQlVGRkVSX1NJWkUsIHRvd3JpdGUpOwotCSAgcmVzID0gV3Jp dGVGdW5jIChoLCBwdHIsIG4sICZuLCBOVUxMKTsKKwkgIHJlcyA9IFdyaXRlRmlsZSAoaCwgcHRy LCBuLCAmbiwgTlVMTCk7CiAJICBpZiAoIXJlcykKIAkgICAgYnJlYWs7CiAJICBwdHIgPSAoY2hh ciAqKSBwdHIgKyBuOwpAQCAtMzg1MSw3ICsyNTE4LDcgQEAgZmhhbmRsZXJfcHR5X2NvbW1vbjo6 cHJvY2Vzc19vcG9zdF9vdXRwdXQgKEhBTkRMRSBoLCBjb25zdCB2b2lkICpwdHIsIHNzaXplX3Qm IGwKIAkJICBicmVhazsKIAkJfQogCSAgICB9Ci0JICByZXMgPSBXcml0ZUZ1bmMgKGgsIG91dGJ1 ZiwgbiwgJm4sIE5VTEwpOworCSAgcmVzID0gV3JpdGVGaWxlIChoLCBvdXRidWYsIG4sICZuLCBO VUxMKTsKIAkgIGlmICghcmVzKQogCSAgICBicmVhazsKIAkgIHB0ciA9IChjaGFyICopIHB0ciAr IHJjOwpAQCAtMzg2MSwzICsyNTI4LDEyMyBAQCBmaGFuZGxlcl9wdHlfY29tbW9uOjpwcm9jZXNz X29wb3N0X291dHB1dCAoSEFORExFIGgsIGNvbnN0IHZvaWQgKnB0ciwgc3NpemVfdCYgbAogICBs ZW4gLT0gdG93cml0ZTsKICAgcmV0dXJuIHJlczsKIH0KKworYm9vbAorZmhhbmRsZXJfcHR5X3Ns YXZlOjpzZXR1cF9wc2V1ZG9jb25zb2xlIChTVEFSVFVQSU5GT0VYVyAqc2kpCit7CisgIGZoYW5k bGVyX2Jhc2UgKmZoID0gKGZoYW5kbGVyX3B0eV9zbGF2ZSAqKSA6OmN5Z2hlYXAtPmZkdGFiWzBd OworICBpZiAoZmggJiYgZmgtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZU19NQUpPUikKKyAgICB7 CisgICAgICBmaGFuZGxlcl9wdHlfc2xhdmUgKnB0eXMgPSAoZmhhbmRsZXJfcHR5X3NsYXZlICop IGZoOworICAgICAgcHR5cy0+Z2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX2luID0gdHJ1ZTsK KyAgICAgIGlmIChwdHlzLT5nZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gMCB8fAorCSAgIXBpbmZv IChwdHlzLT5nZXRfdHR5cCAoKS0+cGNvbl9waWQpKQorCXB0eXMtPmdldF90dHlwICgpLT5wY29u X3BpZCA9IG15c2VsZi0+cGlkOworICAgIH0KKyAgaWYgKGRpc2FibGVfcGNvbikKKyAgICByZXR1 cm4gZmFsc2U7CisgIC8qIElmIHRoZSBsZWdhY3kgY29uc29sZSBtb2RlIGlzIGVuYWJsZWQsIHBz ZXVkbyBjb25zb2xlIHNlZW1zCisgICAgIG5vdCB0byB3b3JrIGFzIGV4cGVjdGVkLiBUbyBkZXRl cm1pbmUgY29uc29sZSBtb2RlLCByZWdpc3RyeQorICAgICBrZXkgRm9yY2VWMiBpbiBIS0VZX0NV UlJFTlRfVVNFUlxDb25zb2xlIGlzIGNoZWNrZWQuICovCisgIHJlZ19rZXkgcmVnIChIS0VZX0NV UlJFTlRfVVNFUiwgS0VZX1JFQUQsIEwiQ29uc29sZSIsIE5VTEwpOworICBpZiAocmVnLmVycm9y ICgpKQorICAgIHJldHVybiBmYWxzZTsKKyAgaWYgKHJlZy5nZXRfZHdvcmQgKEwiRm9yY2VWMiIs IDEpID09IDApCisgICAgeworICAgICAgdGVybWlvc19wcmludGYgKCJQc2V1ZG8gY29uc29sZSBp cyBkaXNhYmxlZCAiCisJCSAgICAgICJiZWNhdXNlIHRoZSBsZWdhY3kgY29uc29sZSBtb2RlIGlz IGVuYWJsZWQuIik7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgIENPT1JEIHNpemUg PSB7CisgICAgKFNIT1JUKSBnZXRfdHR5cCAoKS0+d2luc2l6ZS53c19jb2wsCisgICAgKFNIT1JU KSBnZXRfdHR5cCAoKS0+d2luc2l6ZS53c19yb3cKKyAgfTsKKyAgU2V0TGFzdEVycm9yIChFUlJP Ul9TVUNDRVNTKTsKKyAgSFJFU1VMVCByZXMgPSBDcmVhdGVQc2V1ZG9Db25zb2xlIChzaXplLCBn ZXRfaGFuZGxlICgpLCBnZXRfb3V0cHV0X2hhbmRsZSAoKSwKKwkJCQkgICAgIDEsICZnZXRfdHR5 cCAoKS0+aF9wc2V1ZG9fY29uc29sZSk7CisgIGlmIChyZXMgIT0gU19PSyB8fCBHZXRMYXN0RXJy b3IgKCkgPT0gRVJST1JfUFJPQ19OT1RfRk9VTkQpCisgICAgeworICAgICAgaWYgKHJlcyAhPSBT X09LKQorCXN5c3RlbV9wcmludGYgKCJDcmVhdGVQc2V1ZG9Db25zb2xlKCkgZmFpbGVkLiAlMDh4 ICUwOHhcbiIsCisJCSAgICAgICBHZXRMYXN0RXJyb3IgKCksIHJlcyk7CisgICAgICBnb3RvIGZh bGxiYWNrOworICAgIH0KKworICBTSVpFX1QgYnl0ZXNSZXF1aXJlZDsKKyAgSW5pdGlhbGl6ZVBy b2NUaHJlYWRBdHRyaWJ1dGVMaXN0IChOVUxMLCAxLCAwLCAmYnl0ZXNSZXF1aXJlZCk7CisgIFpl cm9NZW1vcnkgKHNpLCBzaXplb2YgKCpzaSkpOworICBzaS0+U3RhcnR1cEluZm8uY2IgPSBzaXpl b2YgKFNUQVJUVVBJTkZPRVhXKTsKKyAgc2ktPmxwQXR0cmlidXRlTGlzdCA9IChQUFJPQ19USFJF QURfQVRUUklCVVRFX0xJU1QpCisgICAgSGVhcEFsbG9jIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwg Ynl0ZXNSZXF1aXJlZCk7CisgIGlmIChzaS0+bHBBdHRyaWJ1dGVMaXN0ID09IE5VTEwpCisgICAg Z290byBjbGVhbnVwX3BzZXVkb19jb25zb2xlOworICBpZiAoIUluaXRpYWxpemVQcm9jVGhyZWFk QXR0cmlidXRlTGlzdCAoc2ktPmxwQXR0cmlidXRlTGlzdCwKKwkJCQkJICAxLCAwLCAmYnl0ZXNS ZXF1aXJlZCkpCisgICAgZ290byBjbGVhbnVwX2hlYXA7CisgIGlmICghVXBkYXRlUHJvY1RocmVh ZEF0dHJpYnV0ZSAoc2ktPmxwQXR0cmlidXRlTGlzdCwKKwkJCQkgIDAsCisJCQkJICBQUk9DX1RI UkVBRF9BVFRSSUJVVEVfUFNFVURPQ09OU09MRSwKKwkJCQkgIGdldF90dHlwICgpLT5oX3BzZXVk b19jb25zb2xlLAorCQkJCSAgc2l6ZW9mIChnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSks CisJCQkJICBOVUxMLCBOVUxMKSkKKyAgICBnb3RvIGNsZWFudXBfaGVhcDsKKyAgc2ktPlN0YXJ0 dXBJbmZvLmR3RmxhZ3MgPSBTVEFSVEZfVVNFU1RESEFORExFUzsKKyAgc2ktPlN0YXJ0dXBJbmZv LmhTdGRJbnB1dCA9IE5VTEw7CisgIHNpLT5TdGFydHVwSW5mby5oU3RkT3V0cHV0ID0gTlVMTDsK KyAgc2ktPlN0YXJ0dXBJbmZvLmhTdGRFcnJvciA9IE5VTEw7CisKKyAgeworICAgIGZoYW5kbGVy X3B0eV9zbGF2ZSAqcDAgPSAoZmhhbmRsZXJfcHR5X3NsYXZlICopIDo6Y3lnaGVhcC0+ZmR0YWJb MF07CisgICAgaWYgKHAwICYmIHAwLT5nZXRfZGV2aWNlICgpICE9IGdldF9kZXZpY2UgKCkpCisg ICAgICBzaS0+U3RhcnR1cEluZm8uaFN0ZElucHV0ID0gcDAtPmdldF9oYW5kbGUgKCk7CisgICAg ZmhhbmRsZXJfcHR5X3NsYXZlICpwMSA9IChmaGFuZGxlcl9wdHlfc2xhdmUgKikgOjpjeWdoZWFw LT5mZHRhYlsxXTsKKyAgICBpZiAocDEgJiYgcDEtPmdldF9kZXZpY2UgKCkgIT0gZ2V0X2Rldmlj ZSAoKSkKKyAgICAgIHNpLT5TdGFydHVwSW5mby5oU3RkT3V0cHV0ID0gcDEtPmdldF9vdXRwdXRf aGFuZGxlICgpOworICAgIGZoYW5kbGVyX3B0eV9zbGF2ZSAqcDIgPSAoZmhhbmRsZXJfcHR5X3Ns YXZlICopIDo6Y3lnaGVhcC0+ZmR0YWJbMl07CisgICAgaWYgKHAyICYmIHAyLT5nZXRfZGV2aWNl ICgpICE9IGdldF9kZXZpY2UgKCkpCisgICAgICBzaS0+U3RhcnR1cEluZm8uaFN0ZEVycm9yID0g cDItPmdldF9vdXRwdXRfaGFuZGxlICgpOworICB9CisKKyAgaWYgKGdldF90dHlwICgpLT5wY29u X3BpZCA9PSAwIHx8ICFwaW5mbyAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKSkKKyAgICBnZXRfdHR5 cCAoKS0+cGNvbl9waWQgPSBteXNlbGYtPnBpZDsKKworICBpZiAoZ2V0X3R0eXAgKCktPmhfcHNl dWRvX2NvbnNvbGUgJiYgZ2V0X3R0eXAgKCktPnBjb25fcGlkID09IG15c2VsZi0+cGlkKQorICAg IHsKKyAgICAgIEhQQ09OX0lOVEVSTkFMICpocCA9IChIUENPTl9JTlRFUk5BTCAqKSBnZXRfdHR5 cCAoKS0+aF9wc2V1ZG9fY29uc29sZTsKKyAgICAgIGdldF90dHlwICgpLT5oX3Bjb25fd3JpdGVf cGlwZSA9IGhwLT5oV3JpdGVQaXBlOworICAgIH0KKyAgZ2V0X3R0eXAgKCktPnBjb25fc3RhcnQg PSB0cnVlOworICByZXR1cm4gdHJ1ZTsKKworY2xlYW51cF9oZWFwOgorICBIZWFwRnJlZSAoR2V0 UHJvY2Vzc0hlYXAgKCksIDAsIHNpLT5scEF0dHJpYnV0ZUxpc3QpOworY2xlYW51cF9wc2V1ZG9f Y29uc29sZToKKyAgaWYgKGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlKQorICAgIHsKKyAg ICAgIEhQQ09OX0lOVEVSTkFMICpocCA9IChIUENPTl9JTlRFUk5BTCAqKSBnZXRfdHR5cCAoKS0+ aF9wc2V1ZG9fY29uc29sZTsKKyAgICAgIEhBTkRMRSB0bXAgPSBocC0+aENvbkhvc3RQcm9jZXNz OworICAgICAgQ2xvc2VQc2V1ZG9Db25zb2xlIChnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29s ZSk7CisgICAgICBDbG9zZUhhbmRsZSAodG1wKTsKKyAgICB9CitmYWxsYmFjazoKKyAgZ2V0X3R0 eXAgKCktPmhfcHNldWRvX2NvbnNvbGUgPSBOVUxMOworICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv aWQKK2ZoYW5kbGVyX3B0eV9zbGF2ZTo6Y2xvc2VfcHNldWRvY29uc29sZSAodm9pZCkKK3sKKyAg aWYgKGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlKQorICAgIHsKKyAgICAgIGdldF90dHlw ICgpLT53YWl0X3Bjb25fZndkICgpOworICAgICAgSFBDT05fSU5URVJOQUwgKmhwID0gKEhQQ09O X0lOVEVSTkFMICopIGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlOworICAgICAgSEFORExF IHRtcCA9IGhwLT5oQ29uSG9zdFByb2Nlc3M7CisgICAgICBDbG9zZVBzZXVkb0NvbnNvbGUgKGdl dF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlKTsKKyAgICAgIENsb3NlSGFuZGxlICh0bXApOwor ICAgICAgZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGUgPSBOVUxMOworICAgICAgZ2V0X3R0 eXAgKCktPnN3aXRjaF90b19wY29uX2luID0gZmFsc2U7CisgICAgICBnZXRfdHR5cCAoKS0+cGNv bl9waWQgPSAwOworICAgICAgZ2V0X3R0eXAgKCktPnBjb25fc3RhcnQgPSBmYWxzZTsKKyAgICB9 Cit9CmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL2ZvcmsuY2MgYi93aW5zdXAvY3lnd2luL2Zv cmsuY2MKaW5kZXggNjkxZDA4MTM3Li42Y2E0YjVmMjkgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3 aW4vZm9yay5jYworKysgYi93aW5zdXAvY3lnd2luL2ZvcmsuY2MKQEAgLTEzNCwzNiArMTM0LDYg QEAgY2hpbGRfaW5mbzo6cHJlZm9yayAoYm9vbCBkZXRhY2hlZCkKIGludCBfX3N0ZGNhbGwKIGZy b2s6OmNoaWxkICh2b2xhdGlsZSBjaGFyICogdm9sYXRpbGUgaGVyZSkKIHsKLSAgY3lnaGVhcF9m ZGVudW0gY2ZkIChmYWxzZSk7Ci0gIHdoaWxlIChjZmQubmV4dCAoKSA+PSAwKQotICAgIGlmIChj ZmQtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZTV9NQUpPUikKLSAgICAgIHsKLQlmaGFuZGxlcl9i YXNlICpmaCA9IGNmZDsKLQlmaGFuZGxlcl9wdHlfbWFzdGVyICpwdHltID0gKGZoYW5kbGVyX3B0 eV9tYXN0ZXIgKikgZmg7Ci0JaWYgKHB0eW0tPmdldF9wc2V1ZG9fY29uc29sZSAoKSkKLQkgIHsK LQkgICAgZGVidWdfcHJpbnRmICgiZm91bmQgYSBQVFkgbWFzdGVyICVkOiBoZWxwZXJfUElEPSVk IiwKLQkJCSAgcHR5bS0+Z2V0X21pbm9yICgpLCBwdHltLT5nZXRfaGVscGVyX3Byb2Nlc3NfaWQg KCkpOwotCSAgICBpZiAoZmhhbmRsZXJfY29uc29sZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZCAo Ci0JCQkJcHR5bS0+Z2V0X2hlbHBlcl9wcm9jZXNzX2lkICgpLCB0cnVlKSkKLQkgICAgICAvKiBB bHJlYWR5IGF0dGFjaGVkICovCi0JICAgICAgYnJlYWs7Ci0JICAgIGVsc2UKLQkgICAgICB7Ci0J CWlmIChwdHltLT5hdHRhY2hfcGNvbl9pbl9mb3JrICgpKQotCQkgIHsKLQkJICAgIEZyZWVDb25z b2xlICgpOwotCQkgICAgaWYgKCFBdHRhY2hDb25zb2xlIChwdHltLT5nZXRfaGVscGVyX3Byb2Nl c3NfaWQgKCkpKQotCQkgICAgICAvKiBFcnJvciAqLzsKLQkJICAgIGVsc2UKLQkJICAgICAgYnJl YWs7Ci0JCSAgfQotCSAgICAgIH0KLQkgIH0KLSAgICAgIH0KLSAgZXh0ZXJuIHZvaWQgY2xlYXJf cGNvbl9hdHRhY2hlZF90byAodm9pZCk7IC8qIGZoYW5kbGVyX3R0eS5jYyAqLwotICBjbGVhcl9w Y29uX2F0dGFjaGVkX3RvICgpOwotCiAgIEhBTkRMRSYgaFBhcmVudCA9IGNoLnBhcmVudDsKIAog ICBzeW5jX3dpdGhfcGFyZW50ICgiYWZ0ZXIgbG9uZ2ptcCIsIHRydWUpOwpkaWZmIC0tZ2l0IGEv d2luc3VwL2N5Z3dpbi9zZWxlY3QuY2MgYi93aW5zdXAvY3lnd2luL3NlbGVjdC5jYwppbmRleCAz ZjNmMzNmYjUuLjkzYWNkZDg5YSAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9zZWxlY3QuY2MK KysrIGIvd2luc3VwL2N5Z3dpbi9zZWxlY3QuY2MKQEAgLTEyMTMsOCArMTIxMyw3IEBAIHZlcmlm eV90dHlfc2xhdmUgKHNlbGVjdF9yZWNvcmQgKm1lLCBmZF9zZXQgKnJlYWRmZHMsIGZkX3NldCAq d3JpdGVmZHMsCiAJICAgZmRfc2V0ICpleGNlcHRmZHMpCiB7CiAgIGZoYW5kbGVyX3B0eV9zbGF2 ZSAqcHR5cyA9IChmaGFuZGxlcl9wdHlfc2xhdmUgKikgbWUtPmZoOwotICBpZiAobWUtPnJlYWRf c2VsZWN0ZWQgJiYgIXB0eXMtPnRvX2JlX3JlYWRfZnJvbV9wY29uICgpICYmCi0gICAgICBJc0V2 ZW50U2lnbmFsbGVkIChwdHlzLT5pbnB1dF9hdmFpbGFibGVfZXZlbnQpKQorICBpZiAobWUtPnJl YWRfc2VsZWN0ZWQgJiYgSXNFdmVudFNpZ25hbGxlZCAocHR5cy0+aW5wdXRfYXZhaWxhYmxlX2V2 ZW50KSkKICAgICBtZS0+cmVhZF9yZWFkeSA9IHRydWU7CiAgIHJldHVybiBzZXRfYml0cyAobWUs IHJlYWRmZHMsIHdyaXRlZmRzLCBleGNlcHRmZHMpOwogfQpAQCAtMTIyNyw4ICsxMjI2LDYgQEAg cGVla19wdHlfc2xhdmUgKHNlbGVjdF9yZWNvcmQgKnMsIGJvb2wgZnJvbV9zZWxlY3QpCiAgIGZo YW5kbGVyX3B0eV9zbGF2ZSAqcHR5cyA9IChmaGFuZGxlcl9wdHlfc2xhdmUgKikgZmg7CiAKICAg cHR5cy0+cmVzZXRfc3dpdGNoX3RvX3Bjb24gKCk7Ci0gIGlmIChwdHlzLT50b19iZV9yZWFkX2Zy b21fcGNvbiAoKSkKLSAgICBwdHlzLT51cGRhdGVfcGNvbl9pbnB1dF9zdGF0ZSAodHJ1ZSk7CiAK ICAgaWYgKHMtPnJlYWRfc2VsZWN0ZWQpCiAgICAgewpkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dp bi9zbWFsbHByaW50LmNjIGIvd2luc3VwL2N5Z3dpbi9zbWFsbHByaW50LmNjCmluZGV4IDI2ZDM0 ZDllNC4uZjIwOGEwNTdhIDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL3NtYWxscHJpbnQuY2MK KysrIGIvd2luc3VwL2N5Z3dpbi9zbWFsbHByaW50LmNjCkBAIC00MDUsNyArNDA1LDYgQEAgc21h bGxfcHJpbnRmIChjb25zdCBjaGFyICpmbXQsIC4uLikKICAgY291bnQgPSBfX3NtYWxsX3ZzcHJp bnRmIChidWYsIGZtdCwgYXApOwogICB2YV9lbmQgKGFwKTsKIAotICBzZXRfaXNoeWJyaWRfYW5k X3N3aXRjaF90b19wY29uIChHZXRTdGRIYW5kbGUgKFNURF9FUlJPUl9IQU5ETEUpKTsKICAgV3Jp dGVGaWxlIChHZXRTdGRIYW5kbGUgKFNURF9FUlJPUl9IQU5ETEUpLCBidWYsIGNvdW50LCAmZG9u ZSwgTlVMTCk7CiAgIEZsdXNoRmlsZUJ1ZmZlcnMgKEdldFN0ZEhhbmRsZSAoU1REX0VSUk9SX0hB TkRMRSkpOwogfQpAQCAtNDMyLDcgKzQzMSw2IEBAIGNvbnNvbGVfcHJpbnRmIChjb25zdCBjaGFy ICpmbXQsIC4uLikKICAgY291bnQgPSBfX3NtYWxsX3ZzcHJpbnRmIChidWYsIGZtdCwgYXApOwog ICB2YV9lbmQgKGFwKTsKIAotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChjb25z b2xlX2hhbmRsZSk7CiAgIFdyaXRlRmlsZSAoY29uc29sZV9oYW5kbGUsIGJ1ZiwgY291bnQsICZk b25lLCBOVUxMKTsKICAgRmx1c2hGaWxlQnVmZmVycyAoY29uc29sZV9oYW5kbGUpOwogfQpkaWZm IC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9zcGF3bi5jYyBiL3dpbnN1cC9jeWd3aW4vc3Bhd24uY2MK aW5kZXggM2U4YzgzNjdhLi5hMzA3MTg4NGUgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vc3Bh d24uY2MKKysrIGIvd2luc3VwL2N5Z3dpbi9zcGF3bi5jYwpAQCAtMTk0LDYgKzE5NCwyNCBAQCBo YW5kbGUgKGludCBmZCwgYm9vbCB3cml0aW5nKQogICByZXR1cm4gaDsKIH0KIAorc3RhdGljIGJv b2wKK2lzX2NvbnNvbGVfYXBwIChXQ0hBUiAqZmlsZW5hbWUpCit7CisgIEhBTkRMRSBoOworICBj b25zdCBpbnQgaWRfb2Zmc2V0ID0gOTI7CisgIGggPSBDcmVhdGVGaWxlVyAoZmlsZW5hbWUsIEdF TkVSSUNfUkVBRCwgRklMRV9TSEFSRV9SRUFELAorCQkgIE5VTEwsIE9QRU5fRVhJU1RJTkcsIDAs IE5VTEwpOworICBjaGFyIGJ1ZlsxMDI0XTsKKyAgRFdPUkQgbjsKKyAgUmVhZEZpbGUgKGgsIGJ1 Ziwgc2l6ZW9mIChidWYpLCAmbiwgMCk7CisgIENsb3NlSGFuZGxlIChoKTsKKyAgY2hhciAqcCA9 IChjaGFyICopIG1lbW1lbSAoYnVmLCBuLCAiUEVcMFwwIiwgNCk7CisgIGlmIChwICYmIHAgKyBp ZF9vZmZzZXQgPD0gYnVmICsgbikKKyAgICByZXR1cm4gcFtpZF9vZmZzZXRdID09ICdcMDAzJzsg LyogMDI6IEdVSSwgMDM6IGNvbnNvbGUgKi8KKyAgZWxzZQorICAgIHJldHVybiBmYWxzZTsKK30K KwogaW50CiBpc2NtZCAoY29uc3QgY2hhciAqYXJndjAsIGNvbnN0IGNoYXIgKndoYXQpCiB7CkBA IC0yNTksOCArMjc3LDYgQEAgY2hpbGRfaW5mb19zcGF3bjo6d29ya2VyIChjb25zdCBjaGFyICpw cm9nX2FyZywgY29uc3QgY2hhciAqY29uc3QgKmFyZ3YsCiB7CiAgIGJvb2wgcmM7CiAgIGludCBy ZXMgPSAtMTsKLSAgRFdPUkQgcGlkX3Jlc3RvcmUgPSAwOwotICBib29sIGF0dGFjaF90b19jb25z b2xlID0gZmFsc2U7CiAgIHBpZF90IGN0dHlfcGdpZCA9IDA7CiAKICAgLyogU2VhcmNoIGZvciBD VFRZIGFuZCByZXRyaWV2ZSBpdHMgUEdJRCAqLwpAQCAtNTgwLDkgKzU5Niw3IEBAIGNoaWxkX2lu Zm9fc3Bhd246OndvcmtlciAoY29uc3QgY2hhciAqcHJvZ19hcmcsIGNvbnN0IGNoYXIgKmNvbnN0 ICphcmd2LAogCQkJIFBST0NFU1NfUVVFUllfTElNSVRFRF9JTkZPUk1BVElPTikpCiAJc2EgPSAm c2VjX25vbmVfbmloOwogCi0gICAgICAvKiBBdHRhY2ggdG8gcHNldWRvIGNvbnNvbGUgaWYgcHR5 IHNhbHZlIGlzIHVzZWQgKi8KLSAgICAgIHBpZF9yZXN0b3JlID0gZmhhbmRsZXJfY29uc29sZTo6 Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZAotCShHZXRDdXJyZW50UHJvY2Vzc0lkICgpLCBmYWxzZSk7 CisgICAgICBmaGFuZGxlcl9wdHlfc2xhdmUgKnB0eXNfcHJpbWFyeSA9IE5VTEw7CiAgICAgICBm b3IgKGludCBpID0gMDsgaSA8IDM7IGkgKyspCiAJewogCSAgY29uc3QgaW50IGNoa19vcmRlcltd ID0gezEsIDAsIDJ9OwpAQCAtNTkxLDI5ICs2MDUsMTEgQEAgY2hpbGRfaW5mb19zcGF3bjo6d29y a2VyIChjb25zdCBjaGFyICpwcm9nX2FyZywgY29uc3QgY2hhciAqY29uc3QgKmFyZ3YsCiAJICBp ZiAoZmggJiYgZmgtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZU19NQUpPUikKIAkgICAgewogCSAg ICAgIGZoYW5kbGVyX3B0eV9zbGF2ZSAqcHR5cyA9IChmaGFuZGxlcl9wdHlfc2xhdmUgKikgZmg7 Ci0JICAgICAgaWYgKHB0eXMtPmdldF9wc2V1ZG9fY29uc29sZSAoKSkKLQkJewotCQkgIERXT1JE IGhlbHBlcl9wcm9jZXNzX2lkID0gcHR5cy0+Z2V0X2hlbHBlcl9wcm9jZXNzX2lkICgpOwotCQkg IGRlYnVnX3ByaW50ZiAoImZvdW5kIGEgUFRZIHNsYXZlICVkOiBoZWxwZXJfUElEPSVkIiwKLQkJ CQkgICAgZmgtPmdldF9taW5vciAoKSwgaGVscGVyX3Byb2Nlc3NfaWQpOwotCQkgIGlmIChmaGFu ZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkCi0JCQkJCSAgICAgIChoZWxwZXJf cHJvY2Vzc19pZCwgdHJ1ZSkpCi0JCSAgICAvKiBBbHJlYWR5IGF0dGFjaGVkICovCi0JCSAgICBh dHRhY2hfdG9fY29uc29sZSA9IHRydWU7Ci0JCSAgZWxzZSBpZiAoIWF0dGFjaF90b19jb25zb2xl KQotCQkgICAgewotCQkgICAgICBGcmVlQ29uc29sZSAoKTsKLQkJICAgICAgaWYgKEF0dGFjaENv bnNvbGUgKGhlbHBlcl9wcm9jZXNzX2lkKSkKLQkJCWF0dGFjaF90b19jb25zb2xlID0gdHJ1ZTsK LQkJICAgIH0KLQkJICBwdHlzLT5maXh1cF9hZnRlcl9hdHRhY2ggKCFpc2N5Z3dpbiAoKSwgZmQp OwotCQkgIGlmIChtb2RlID09IF9QX09WRVJMQVkpCi0JCSAgICBwdHlzLT5zZXRfZnJlZWNvbnNv bGVfb25fY2xvc2UgKGlzY3lnd2luICgpKTsKLQkJfQorCSAgICAgIGlmIChwdHlzX3ByaW1hcnkg PT0gTlVMTCkKKwkJcHR5c19wcmltYXJ5ID0gcHR5czsKIAkgICAgfQogCSAgZWxzZSBpZiAoZmgg JiYgZmgtPmdldF9tYWpvciAoKSA9PSBERVZfQ09OU19NQUpPUikKIAkgICAgewotCSAgICAgIGF0 dGFjaF90b19jb25zb2xlID0gdHJ1ZTsKIAkgICAgICBmaGFuZGxlcl9jb25zb2xlICpjb25zID0g KGZoYW5kbGVyX2NvbnNvbGUgKikgZmg7CiAJICAgICAgaWYgKHdpbmNhcC5oYXNfY29uXzI0Yml0 X2NvbG9ycyAoKSAmJiAhaXNjeWd3aW4gKCkpCiAJCWlmIChmZCA9PSAxIHx8IGZkID09IDIpCkBA IC02MzIsNiArNjI4LDE4IEBAIGNoaWxkX2luZm9fc3Bhd246OndvcmtlciAoY29uc3QgY2hhciAq cHJvZ19hcmcsIGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2LAogICAgICAgaWYgKCFpc2N5Z3dpbiAo KSkKIAlpbml0X2NvbnNvbGVfaGFuZGxlciAobXlzZWxmLT5jdHR5ID4gMCk7CiAKKyAgICAgIGJv b2wgZW5hYmxlX3Bjb24gPSBmYWxzZTsKKyAgICAgIFNUQVJUVVBJTkZPRVhXIHNpX3Bjb247Cisg ICAgICBaZXJvTWVtb3J5ICgmc2lfcGNvbiwgc2l6ZW9mIChzaV9wY29uKSk7CisgICAgICBTVEFS VFVQSU5GT1cgKnNpX3RtcCA9ICZzaTsKKyAgICAgIGlmICghaXNjeWd3aW4gKCkgJiYgcHR5c19w cmltYXJ5ICYmIGlzX2NvbnNvbGVfYXBwIChydW5wYXRoKSkKKwlpZiAocHR5c19wcmltYXJ5LT5z ZXR1cF9wc2V1ZG9jb25zb2xlICgmc2lfcGNvbikpCisJICB7CisJICAgIGNfZmxhZ3MgfD0gRVhU RU5ERURfU1RBUlRVUElORk9fUFJFU0VOVDsKKwkgICAgc2lfdG1wID0gJnNpX3Bjb24uU3RhcnR1 cEluZm87CisJICAgIGVuYWJsZV9wY29uID0gdHJ1ZTsKKwkgIH0KKwogICAgIGxvb3A6CiAgICAg ICAvKiBXaGVuIHJ1aWQgIT0gZXVpZCB3ZSBjcmVhdGUgdGhlIG5ldyBwcm9jZXNzIHVuZGVyIHRo ZSBjdXJyZW50IG9yaWdpbmFsCiAJIGFjY291bnQgYW5kIGltcGVyc29uYXRlIGluIGNoaWxkLCB0 aGlzIHdheSBtYWludGFpbmluZyB0aGUgZGlmZmVyZW50CkBAIC02NjAsNyArNjY4LDcgQEAgY2hp bGRfaW5mb19zcGF3bjo6d29ya2VyIChjb25zdCBjaGFyICpwcm9nX2FyZywgY29uc3QgY2hhciAq Y29uc3QgKmFyZ3YsCiAJCQkgICAgICAgY19mbGFncywKIAkJCSAgICAgICBlbnZibG9jaywJLyog ZW52aXJvbm1lbnQgKi8KIAkJCSAgICAgICBOVUxMLAotCQkJICAgICAgICZzaSwKKwkJCSAgICAg ICBzaV90bXAsCiAJCQkgICAgICAgJnBpKTsKIAl9CiAgICAgICBlbHNlCkBAIC03MTQsNyArNzIy LDcgQEAgY2hpbGRfaW5mb19zcGF3bjo6d29ya2VyIChjb25zdCBjaGFyICpwcm9nX2FyZywgY29u c3QgY2hhciAqY29uc3QgKmFyZ3YsCiAJCQkgICAgICAgY19mbGFncywKIAkJCSAgICAgICBlbnZi bG9jaywJLyogZW52aXJvbm1lbnQgKi8KIAkJCSAgICAgICBOVUxMLAotCQkJICAgICAgICZzaSwK KwkJCSAgICAgICBzaV90bXAsCiAJCQkgICAgICAgJnBpKTsKIAkgIGlmIChod3N0KQogCSAgICB7 CkBAIC03MjcsNiArNzM1LDExIEBAIGNoaWxkX2luZm9fc3Bhd246OndvcmtlciAoY29uc3QgY2hh ciAqcHJvZ19hcmcsIGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2LAogCSAgICAgIENsb3NlRGVza3Rv cCAoaGRzayk7CiAJICAgIH0KIAl9CisgICAgICBpZiAoZW5hYmxlX3Bjb24pCisJeworCSAgRGVs ZXRlUHJvY1RocmVhZEF0dHJpYnV0ZUxpc3QgKHNpX3Bjb24ubHBBdHRyaWJ1dGVMaXN0KTsKKwkg IEhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgc2lfcGNvbi5scEF0dHJpYnV0ZUxpc3Qp OworCX0KIAogICAgICAgaWYgKG1vZGUgIT0gX1BfT1ZFUkxBWSkKIAlTZXRIYW5kbGVJbmZvcm1h dGlvbiAobXlfd3JfcHJvY19waXBlLCBIQU5ETEVfRkxBR19JTkhFUklULApAQCAtODk3LDYgKzkx MCwxMSBAQCBjaGlsZF9pbmZvX3NwYXduOjp3b3JrZXIgKGNvbnN0IGNoYXIgKnByb2dfYXJnLCBj b25zdCBjaGFyICpjb25zdCAqYXJndiwKIAkJICAmJiBXYWl0Rm9yU2luZ2xlT2JqZWN0IChwaS5o UHJvY2VzcywgMCkgPT0gV0FJVF9USU1FT1VUKQogCQl3YWl0X2Zvcl9teXNlbGYgKCk7CiAJICAg IH0KKwkgIGlmIChlbmFibGVfcGNvbikKKwkgICAgeworCSAgICAgIFdhaXRGb3JTaW5nbGVPYmpl Y3QgKHBpLmhQcm9jZXNzLCBJTkZJTklURSk7CisJICAgICAgcHR5c19wcmltYXJ5LT5jbG9zZV9w c2V1ZG9jb25zb2xlICgpOworCSAgICB9CiAJICBteXNlbGYuZXhpdCAoRVhJVENPREVfTk9TRVQp OwogCSAgYnJlYWs7CiAJY2FzZSBfUF9XQUlUOgpAQCAtOTMwLDIxICs5NDgsNiBAQCBjaGlsZF9p bmZvX3NwYXduOjp3b3JrZXIgKGNvbnN0IGNoYXIgKnByb2dfYXJnLCBjb25zdCBjaGFyICpjb25z dCAqYXJndiwKICAgaWYgKGVudmJsb2NrKQogICAgIGZyZWUgKGVudmJsb2NrKTsKIAotICBpZiAo YXR0YWNoX3RvX2NvbnNvbGUgJiYgcGlkX3Jlc3RvcmUpCi0gICAgewotICAgICAgRnJlZUNvbnNv bGUgKCk7Ci0gICAgICBBdHRhY2hDb25zb2xlIChwaWRfcmVzdG9yZSk7Ci0gICAgICBjeWdoZWFw X2ZkZW51bSBjZmQgKGZhbHNlKTsKLSAgICAgIGludCBmZDsKLSAgICAgIHdoaWxlICgoZmQgPSBj ZmQubmV4dCAoKSkgPj0gMCkKLQlpZiAoY2ZkLT5nZXRfbWFqb3IgKCkgPT0gREVWX1BUWVNfTUFK T1IpCi0JICB7Ci0JICAgIGZoYW5kbGVyX3B0eV9zbGF2ZSAqcHR5cyA9Ci0JICAgICAgKGZoYW5k bGVyX3B0eV9zbGF2ZSAqKSAoZmhhbmRsZXJfYmFzZSAqKSBjZmQ7Ci0JICAgIHB0eXMtPmZpeHVw X2FmdGVyX2F0dGFjaCAoZmFsc2UsIGZkKTsKLQkgIH0KLSAgICB9Ci0KICAgcmV0dXJuIChpbnQp IHJlczsKIH0KIApkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9zdHJhY2UuY2MgYi93aW5zdXAv Y3lnd2luL3N0cmFjZS5jYwppbmRleCBmMGFlZjNhMzYuLjM1ZjhhNTlhZSAxMDA2NDQKLS0tIGEv d2luc3VwL2N5Z3dpbi9zdHJhY2UuY2MKKysrIGIvd2luc3VwL2N5Z3dpbi9zdHJhY2UuY2MKQEAg LTI2NCw3ICsyNjQsNiBAQCBzdHJhY2U6OnZwcm50ZiAodW5zaWduZWQgY2F0ZWdvcnksIGNvbnN0 IGNoYXIgKmZ1bmMsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcAogICBpZiAoY2F0ZWdvcnkg JiBfU1RSQUNFX1NZU1RFTSkKICAgICB7CiAgICAgICBEV09SRCBkb25lOwotICAgICAgc2V0X2lz aHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoR2V0U3RkSGFuZGxlIChTVERfRVJST1JfSEFORExF KSk7CiAgICAgICBXcml0ZUZpbGUgKEdldFN0ZEhhbmRsZSAoU1REX0VSUk9SX0hBTkRMRSksIGJ1 ZiwgbGVuLCAmZG9uZSwgMCk7CiAgICAgICBGbHVzaEZpbGVCdWZmZXJzIChHZXRTdGRIYW5kbGUg KFNURF9FUlJPUl9IQU5ETEUpKTsKICAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBtZXNzYWdl IHNob3dzIHVwIG9uIHRoZSBzY3JlZW4sIHRvbywgc2luY2UgdGhpcyBpcwpAQCAtMjc2LDcgKzI3 NSw2IEBAIHN0cmFjZTo6dnBybnRmICh1bnNpZ25lZCBjYXRlZ29yeSwgY29uc3QgY2hhciAqZnVu YywgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwCiAJCQkJICZzZWNfbm9uZSwgT1BFTl9FWElT VElORywgMCwgMCk7CiAJICBpZiAoaCAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKIAkgICAgewot CSAgICAgIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwogCSAgICAgIFdyaXRl RmlsZSAoaCwgYnVmLCBsZW4sICZkb25lLCAwKTsKIAkgICAgICBDbG9zZUhhbmRsZSAoaCk7CiAJ ICAgIH0KZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vdHR5LmNjIGIvd2luc3VwL2N5Z3dpbi90 dHkuY2MKaW5kZXggNGNiNjhmNzc2Li5kNjBmMjc1NDUgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3 aW4vdHR5LmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vdHR5LmNjCkBAIC0yMzQsMjAgKzIzNCwxNCBA QCB0dHk6OmluaXQgKCkKICAgd2FzX29wZW5lZCA9IGZhbHNlOwogICBtYXN0ZXJfcGlkID0gMDsK ICAgaXNfY29uc29sZSA9IGZhbHNlOwotICBhdHRhY2hfcGNvbl9pbl9mb3JrID0gZmFsc2U7Ci0g IGhfcHNldWRvX2NvbnNvbGUgPSBOVUxMOwogICBjb2x1bW4gPSAwOworICBoX3BzZXVkb19jb25z b2xlID0gTlVMTDsKICAgc3dpdGNoX3RvX3Bjb25faW4gPSBmYWxzZTsKLSAgc3dpdGNoX3RvX3Bj b25fb3V0ID0gZmFsc2U7Ci0gIHNjcmVlbl9hbHRlcm5hdGVkID0gZmFsc2U7CiAgIG1hc2tfc3dp dGNoX3RvX3Bjb25faW4gPSBmYWxzZTsKICAgcGNvbl9waWQgPSAwOwogICB0ZXJtX2NvZGVfcGFn ZSA9IDA7Ci0gIG5lZWRfcmVkcmF3X3NjcmVlbiA9IHRydWU7CiAgIHBjb25fbGFzdF90aW1lID0g MDsKLSAgcGNvbl9pbl9lbXB0eSA9IHRydWU7Ci0gIHJlcV90cmFuc2Zlcl9pbnB1dF90b19wY29u ID0gZmFsc2U7Ci0gIHJlcV9mbHVzaF9wY29uX2lucHV0ID0gZmFsc2U7CisgIHBjb25fc3RhcnQg PSBmYWxzZTsKIH0KIAogSEFORExFCkBAIC0yOTMsMTYgKzI4Nyw2IEBAIHR0eV9taW46OnR0eW5h bWUgKCkKICAgcmV0dXJuIGQubmFtZSAoKTsKIH0KIAotdm9pZAotdHR5OjpzZXRfc3dpdGNoX3Rv X3Bjb25fb3V0IChib29sIHYpCi17Ci0gIGlmIChzd2l0Y2hfdG9fcGNvbl9vdXQgIT0gdikKLSAg ICB7Ci0gICAgICB3YWl0X3Bjb25fZndkICgpOwotICAgICAgc3dpdGNoX3RvX3Bjb25fb3V0ID0g djsKLSAgICB9Ci19Ci0KIHZvaWQKIHR0eTo6d2FpdF9wY29uX2Z3ZCAodm9pZCkKIHsKZGlmZiAt LWdpdCBhL3dpbnN1cC9jeWd3aW4vdHR5LmggYi93aW5zdXAvY3lnd2luL3R0eS5oCmluZGV4IDky MGUzMmIxNi4uYzQ5MWQzODkxIDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL3R0eS5oCisrKyBi L3dpbnN1cC9jeWd3aW4vdHR5LmgKQEAgLTk0LDIxICs5NCwxMyBAQCBwcml2YXRlOgogICBIQU5E TEUgX3RvX21hc3RlcjsKICAgSEFORExFIF90b19tYXN0ZXJfY3lnOwogICBIUENPTiBoX3BzZXVk b19jb25zb2xlOwotICBIQU5ETEUgaF9oZWxwZXJfcHJvY2VzczsKLSAgRFdPUkQgaGVscGVyX3By b2Nlc3NfaWQ7Ci0gIEhBTkRMRSBoX2hlbHBlcl9nb29kYnllOwotICBib29sIGF0dGFjaF9wY29u X2luX2Zvcms7CisgIGJvb2wgcGNvbl9zdGFydDsKICAgYm9vbCBzd2l0Y2hfdG9fcGNvbl9pbjsK LSAgYm9vbCBzd2l0Y2hfdG9fcGNvbl9vdXQ7Ci0gIGJvb2wgc2NyZWVuX2FsdGVybmF0ZWQ7CiAg IGJvb2wgbWFza19zd2l0Y2hfdG9fcGNvbl9pbjsKICAgcGlkX3QgcGNvbl9waWQ7CiAgIFVJTlQg dGVybV9jb2RlX3BhZ2U7Ci0gIGJvb2wgbmVlZF9yZWRyYXdfc2NyZWVuOwogICBEV09SRCBwY29u X2xhc3RfdGltZTsKLSAgYm9vbCBwY29uX2luX2VtcHR5OwotICBib29sIHJlcV90cmFuc2Zlcl9p bnB1dF90b19wY29uOwotICBib29sIHJlcV9mbHVzaF9wY29uX2lucHV0OworICBIQU5ETEUgaF9w Y29uX3dyaXRlX3BpcGU7CiAKIHB1YmxpYzoKICAgSEFORExFIGZyb21fbWFzdGVyICgpIGNvbnN0 IHsgcmV0dXJuIF9mcm9tX21hc3RlcjsgfQpAQCAtMTM4LDcgKzEzMCw2IEBAIHB1YmxpYzoKICAg dm9pZCBzZXRfbWFzdGVyX2N0bF9jbG9zZWQgKCkge21hc3Rlcl9waWQgPSAtMTt9CiAgIHN0YXRp YyB2b2lkIF9fc3RkY2FsbCBjcmVhdGVfbWFzdGVyIChpbnQpOwogICBzdGF0aWMgdm9pZCBfX3N0 ZGNhbGwgaW5pdF9zZXNzaW9uICgpOwotICB2b2lkIHNldF9zd2l0Y2hfdG9fcGNvbl9vdXQgKGJv b2wgdik7CiAgIHZvaWQgd2FpdF9wY29uX2Z3ZCAodm9pZCk7CiAgIGZyaWVuZCBjbGFzcyBmaGFu ZGxlcl9wdHlfY29tbW9uOwogICBmcmllbmQgY2xhc3MgZmhhbmRsZXJfcHR5X21hc3RlcjsKZGlm ZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vd2luc3VwLmggYi93aW5zdXAvY3lnd2luL3dpbnN1cC5o CmluZGV4IGZmZjdkMThmMy4uNDU4ZmIyYTIzIDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL3dp bnN1cC5oCisrKyBiL3dpbnN1cC9jeWd3aW4vd2luc3VwLmgKQEAgLTIyMiw5ICsyMjIsNiBAQCB2 b2lkIGluaXRfY29uc29sZV9oYW5kbGVyIChib29sKTsKIAogZXh0ZXJuIGJvb2wgd3NvY2tfc3Rh cnRlZDsKIAotLyogUFRZIHJlbGF0ZWQgKi8KLXZvaWQgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hf dG9fcGNvbiAoSEFORExFIGgpOwotCiAvKiBQcmludGYgdHlwZSBmdW5jdGlvbnMgKi8KIGV4dGVy biAiQyIgdm9pZCB2YXBpX2ZhdGFsIChjb25zdCBjaGFyICosIHZhX2xpc3QgYXApIF9fYXR0cmli dXRlX18gKChub3JldHVybikpOwogZXh0ZXJuICJDIiB2b2lkIGFwaV9mYXRhbCAoY29uc3QgY2hh ciAqLCAuLi4pIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwotLSAKMi4yNy4wCgo= --Multipart=_Thu__23_Jul_2020_09_33_28_+0900_eeIRlOgmp.=e6Esh--