From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from conssluserg-02.nifty.com (conssluserg-02.nifty.com [210.131.2.81]) by sourceware.org (Postfix) with ESMTPS id 91E9A386F037 for ; Wed, 19 Aug 2020 11:40:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 91E9A386F037 Received: from Express5800-S70 (v038192.dynamic.ppp.asahi-net.or.jp [124.155.38.192]) (authenticated) by conssluserg-02.nifty.com with ESMTP id 07JBdkAp025911 for ; Wed, 19 Aug 2020 20:39:46 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-02.nifty.com 07JBdkAp025911 X-Nifty-SrcIP: [124.155.38.192] Date: Wed, 19 Aug 2020 20:39:59 +0900 From: Takashi Yano To: cygwin-developers@cygwin.com Subject: Re: New implementation of pseudo console support (experimental) Message-Id: <20200819203959.9d220306c58736f94381d1e6@nifty.ne.jp> In-Reply-To: <20200817205718.a0fcc08bf21be4ba5f10ba3d@nifty.ne.jp> References: <20200514183420.c246647a6d9e396d42c6b47e@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> <20200723093328.709654ea6a539cb9b3251ab2@nifty.ne.jp> <20200724143842.020cea9ffa2f6e7ffe760f67@nifty.ne.jp> <20200724202219.16ad238f515da19db21d3a6c@nifty.ne.jp> <20200803111103.27ef6554df7f40d1142bceee@nifty.ne.jp> <20200803212342.8b14a3164ed66bd521774fe4@nifty.ne.jp> <20200811201258.4bffb987ecdb96583c516bc2@nifty.ne.jp> <20200813185813.2d851113b6e134db371d35b4@nifty.ne.jp> <20200817205718.a0fcc08bf21be4ba5f10ba3d@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=_Wed__19_Aug_2020_20_39_59_+0900_Xyp=YXsIFU2hU9xV" X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, NICE_REPLY_A, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, 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: Wed, 19 Aug 2020 11:40:07 -0000 This is a multi-part message in MIME format. --Multipart=_Wed__19_Aug_2020_20_39_59_+0900_Xyp=YXsIFU2hU9xV Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Mon, 17 Aug 2020 20:57:18 +0900 Takashi Yano via Cygwin-developers wrote: > On Thu, 13 Aug 2020 18:58:13 +0900 > Takashi Yano via Cygwin-developers wrote: > > On Tue, 11 Aug 2020 20:12:58 +0900 > > Takashi Yano via Cygwin-developers wrote: > > > On Mon, 3 Aug 2020 21:23:42 +0900 > > > Takashi Yano via Cygwin-developers wrote: > > > > On Mon, 3 Aug 2020 11:11:03 +0900 > > > > Takashi Yano via Cygwin-developers wrote: > > > > > On Fri, 24 Jul 2020 20:22:19 +0900 > > > > > Takashi Yano via Cygwin-developers wrote: > > > > > > On Fri, 24 Jul 2020 14:38:42 +0900 > > > > > > Takashi Yano via Cygwin-developers wrote: > > > > > > > On Thu, 23 Jul 2020 09:33:28 +0900 > > > > > > > Takashi Yano via Cygwin-developers wrote: > > > > > > > > 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. > > > > > > > > > > > > > > Changes: > > > > > > > * Do not activate pseudo console if it is already activated for > > > > > > > another process on same pty. > > > > > > > > > > > > Changes: > > > > > > * Fix a bug in the latest change. > > > > > > > > > > Changes: > > > > > * Fix a handle leak caused when spawn is called with mode != _P_OVERLAY. > > > > > > > > This patch cannot be applied cleanly against current git head. > > > > Please use attached patch instead. > > > > > > Adapted to the current git head. > > > > Adapted to the current recent pty change. > > Adapted to the current git head. Aligned the timing of seup_locale () call with the recent pty change. -- Takashi Yano --Multipart=_Wed__19_Aug_2020_20_39_59_+0900_Xyp=YXsIFU2hU9xV 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 RnJvbSBiMmZiYTZiNjRkODE1ZmQxN2JhZjZmOGIzZjViMjBkZTBiNjdmYjA0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5q cD4KRGF0ZTogV2VkLCAxOSBBdWcgMjAyMCAyMDoyNToyMSArMDkwMApTdWJqZWN0OiBbUEFUQ0hd 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 bgogICAgIHByZXZpb3VzIGltcGxlbWVuYXRpb24uCiAgNykgUHNldWRvIGNvbnNvbGUgY2Fubm90 IGJlIGFjdGl2YXRlZCBpZiBpdCBpcyBhbHJlYWR5IGFjdGl2YXRlZCBmb3IKICAgICBhbm90aGVy IHByb2Nlc3Mgb24gc2FtZSBwdHkuCi0tLQogd2luc3VwL2N5Z3dpbi9kdGFibGUuY2MgICAgICAg ICAgIHwgICAzMiAtCiB3aW5zdXAvY3lnd2luL2ZoYW5kbGVyLmggICAgICAgICAgfCAgIDUzICst CiB3aW5zdXAvY3lnd2luL2ZoYW5kbGVyX2NvbnNvbGUuY2MgfCAgIDQzIC0KIHdpbnN1cC9jeWd3 aW4vZmhhbmRsZXJfdHR5LmNjICAgICB8IDE3NzAgKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KIHdpbnN1cC9jeWd3aW4vZm9yay5jYyAgICAgICAgICAgICB8ICAgMzAgLQogd2luc3VwL2N5 Z3dpbi9zZWxlY3QuY2MgICAgICAgICAgIHwgICAgNSArLQogd2luc3VwL2N5Z3dpbi9zbWFsbHBy aW50LmNjICAgICAgIHwgICAgMiAtCiB3aW5zdXAvY3lnd2luL3NwYXduLmNjICAgICAgICAgICAg fCAgMTA1ICstCiB3aW5zdXAvY3lnd2luL3N0cmFjZS5jYyAgICAgICAgICAgfCAgICAyIC0KIHdp bnN1cC9jeWd3aW4vdHR5LmNjICAgICAgICAgICAgICB8ICAgMjAgKy0KIHdpbnN1cC9jeWd3aW4v dHR5LmggICAgICAgICAgICAgICB8ICAgMTMgKy0KIHdpbnN1cC9jeWd3aW4vd2luc3VwLmggICAg ICAgICAgICB8ICAgIDMgLQogMTIgZmlsZXMgY2hhbmdlZCwgMzQ5IGluc2VydGlvbnMoKyksIDE3 MjkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9kdGFibGUuY2MgYi93 aW5zdXAvY3lnd2luL2R0YWJsZS5jYwppbmRleCBlOWUwMDViMDguLjZhOTFlMzNiYyAxMDA2NDQK LS0tIGEvd2luc3VwL2N5Z3dpbi9kdGFibGUuY2MKKysrIGIvd2luc3VwL2N5Z3dpbi9kdGFibGUu Y2MKQEAgLTE0NywzOCArMTQ3LDYgQEAgZHRhYmxlOjpnZXRfZGVidWdnZXJfaW5mbyAoKQogdm9p ZAogZHRhYmxlOjpzdGRpb19pbml0ICgpCiB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSAr KykKLSAgICB7Ci0gICAgICBjb25zdCBpbnQgY2hrX29yZGVyW10gPSB7MSwgMCwgMn07Ci0gICAg ICBpbnQgZmQgPSBjaGtfb3JkZXJbaV07Ci0gICAgICBmaGFuZGxlcl9iYXNlICpmaCA9IGN5Z2hl YXAtPmZkdGFiW2ZkXTsKLSAgICAgIGlmIChmaCAmJiBmaC0+Z2V0X21ham9yICgpID09IERFVl9Q VFlTX01BSk9SKQotCXsKLQkgIGZoYW5kbGVyX3B0eV9zbGF2ZSAqcHR5cyA9IChmaGFuZGxlcl9w dHlfc2xhdmUgKikgZmg7Ci0JICBpZiAocHR5cy0+Z2V0X3BzZXVkb19jb25zb2xlICgpKQotCSAg ICB7Ci0JICAgICAgYm9vbCBhdHRhY2hlZCA9ICEhZmhhbmRsZXJfY29uc29sZTo6Z2V0X2NvbnNv bGVfcHJvY2Vzc19pZAotCQkocHR5cy0+Z2V0X2hlbHBlcl9wcm9jZXNzX2lkICgpLCB0cnVlKTsK LQkgICAgICBpZiAoYXR0YWNoZWQpCi0JCWJyZWFrOwotCSAgICAgIGVsc2UKLQkJewotCQkgIC8q IE5vdCBhdHRhY2hlZCB0byBwc2V1ZG8gY29uc29sZSBpbiBmb3JrKCkgb3Igc3Bhd24oKQotCQkg ICAgIGJ5IHNvbWUgcmVhc29uLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGV4ZWN1dGFibGUgaXMKLQkJ ICAgICBhIHdpbmRvd3MgR1VJIGJpbmFyeSwgc3VjaCBhcyBtaW50dHkuICovCi0JCSAgRnJlZUNv bnNvbGUgKCk7Ci0JCSAgaWYgKEF0dGFjaENvbnNvbGUgKHB0eXMtPmdldF9oZWxwZXJfcHJvY2Vz c19pZCAoKSkpCi0JCSAgICB7Ci0JCSAgICAgIHB0eXMtPmZpeHVwX2FmdGVyX2F0dGFjaCAoZmFs c2UsIGZkKTsKLQkJICAgICAgYnJlYWs7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQotCX0KLSAgICAg IGVsc2UgaWYgKGZoICYmIGZoLT5nZXRfbWFqb3IgKCkgPT0gREVWX0NPTlNfTUFKT1IpCi0JYnJl YWs7Ci0gICAgfQotCiAgIGlmIChteXNlbGYtPmN5Z3N0YXJ0ZWQgfHwgSVNTVEFURSAobXlzZWxm LCBQSURfQ1lHUEFSRU5UKSkKICAgICB7CiAgICAgICB0dHlfbWluICp0ID0gY3lnd2luX3NoYXJl ZC0+dHR5LmdldF9jdHR5cCAoKTsKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXIu aCBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXIuaAppbmRleCBhNTc3Y2E1NDIuLjlmZDk1YzA5OCAx MDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9maGFuZGxlci5oCisrKyBiL3dpbnN1cC9jeWd3aW4v ZmhhbmRsZXIuaApAQCAtMzI2LDE2ICszMjYsMTYgQEAgY2xhc3MgZmhhbmRsZXJfYmFzZQogICB2 aXJ0dWFsIHNpemVfdCAmcmFpeHB1dCAoKSB7IHJldHVybiByYS5yYWl4cHV0OyB9OwogICB2aXJ0 dWFsIHNpemVfdCAmcmFidWZsZW4gKCkgeyByZXR1cm4gcmEucmFidWZsZW47IH07CiAKLSAgdmly dHVhbCBib29sIGdldF9yZWFkYWhlYWRfdmFsaWQgKCkgeyByZXR1cm4gcmFpeGdldCAoKSA8IHJh bGVuICgpOyB9CisgIGJvb2wgZ2V0X3JlYWRhaGVhZF92YWxpZCAoKSB7IHJldHVybiByYWl4Z2V0 ICgpIDwgcmFsZW4gKCk7IH0KICAgaW50IHB1dHNfcmVhZGFoZWFkIChjb25zdCBjaGFyICpzLCBz aXplX3QgbGVuID0gKHNpemVfdCkgLTEpOwotICB2aXJ0dWFsIGludCBwdXRfcmVhZGFoZWFkIChj aGFyIHZhbHVlKTsKKyAgaW50IHB1dF9yZWFkYWhlYWQgKGNoYXIgdmFsdWUpOwogCiAgIGludCBn ZXRfcmVhZGFoZWFkICgpOwogICBpbnQgcGVla19yZWFkYWhlYWQgKGludCBxdWVyeXB1dCA9IDAp OwogCiAgIHZvaWQgc2V0X3JlYWRhaGVhZF92YWxpZCAoaW50IHZhbCwgaW50IGNoID0gLTEpOwog Ci0gIHZpcnR1YWwgaW50IGdldF9yZWFkYWhlYWRfaW50b19idWZmZXIgKGNoYXIgKmJ1Ziwgc2l6 ZV90IGJ1Zmxlbik7CisgIGludCBnZXRfcmVhZGFoZWFkX2ludG9fYnVmZmVyIChjaGFyICpidWYs IHNpemVfdCBidWZsZW4pOwogCiAgIGJvb2wgaGFzX2FjbHMgKCkgY29uc3QgeyByZXR1cm4gcGMu aGFzX2FjbHMgKCk7IH0KIApAQCAtMTkwNSw3ICsxOTA1LDcgQEAgY2xhc3MgZmhhbmRsZXJfdGVy bWlvczogcHVibGljIGZoYW5kbGVyX2Jhc2UKICAgaW50IGlvY3RsIChpbnQsIHZvaWQgKik7CiAg IHR0eV9taW4gKl90YzsKICAgdHR5ICpnZXRfdHR5cCAoKSB7cmV0dXJuICh0dHkgKikgdGMgKCk7 fQotICB2aXJ0dWFsIGludCBlYXRfcmVhZGFoZWFkIChpbnQgbik7CisgIGludCBlYXRfcmVhZGFo ZWFkIChpbnQgbik7CiAKICBwdWJsaWM6CiAgIHR0eV9taW4qJiB0YyAoKSB7cmV0dXJuIF90Yzt9 CkBAIC0yMTg0LDcgKzIxODQsNiBAQCBwcml2YXRlOgogICBzdGF0aWMgYm9vbCBuZWVkX2ludmlz aWJsZSAoKTsKICAgc3RhdGljIHZvaWQgZnJlZV9jb25zb2xlICgpOwogICBzdGF0aWMgY29uc3Qg Y2hhciAqZ2V0X25vbmFzY2lpX2tleSAoSU5QVVRfUkVDT1JEJiBpbnB1dF9yZWMsIGNoYXIgKik7 Ci0gIHN0YXRpYyBEV09SRCBnZXRfY29uc29sZV9wcm9jZXNzX2lkIChEV09SRCBwaWQsIGJvb2wg bWF0Y2gpOwogCiAgIGZoYW5kbGVyX2NvbnNvbGUgKHZvaWQgKikge30KIApAQCAtMjI2NCwxOSAr MjI2Myw3IEBAIGNsYXNzIGZoYW5kbGVyX3B0eV9jb21tb246IHB1YmxpYyBmaGFuZGxlcl90ZXJt aW9zCiAgICAgcmV0dXJuIGZoOwogICB9CiAKLSAgYm9vbCBhdHRhY2hfcGNvbl9pbl9mb3JrICh2 b2lkKQotICB7Ci0gICAgcmV0dXJuIGdldF90dHlwICgpLT5hdHRhY2hfcGNvbl9pbl9mb3JrOwot ICB9Ci0gIERXT1JEIGdldF9oZWxwZXJfcHJvY2Vzc19pZCAodm9pZCkKLSAgewotICAgIHJldHVy biBnZXRfdHR5cCAoKS0+aGVscGVyX3Byb2Nlc3NfaWQ7Ci0gIH0KLSAgSFBDT04gZ2V0X3BzZXVk b19jb25zb2xlICh2b2lkKQotICB7Ci0gICAgcmV0dXJuIGdldF90dHlwICgpLT5oX3BzZXVkb19j b25zb2xlOwotICB9Ci0gIGJvb2wgdG9fYmVfcmVhZF9mcm9tX3Bjb24gKHZvaWQpOworICB2b2lk IHJlc2l6ZV9wc2V1ZG9fY29uc29sZSAoc3RydWN0IHdpbnNpemUgKik7CiAKICBwcm90ZWN0ZWQ6 CiAgIEJPT0wgcHJvY2Vzc19vcG9zdF9vdXRwdXQgKEhBTkRMRSBoLApAQCAtMjI4NywyMyArMjI3 NCwxNSBAQCBjbGFzcyBmaGFuZGxlcl9wdHlfc2xhdmU6IHB1YmxpYyBmaGFuZGxlcl9wdHlfY29t bW9uCiB7CiAgIEhBTkRMRSBpbnVzZTsJCQkvLyB1c2VkIHRvIGluZGljYXRlIHRoYXQgYSB0dHkg aXMgaW4gdXNlCiAgIEhBTkRMRSBvdXRwdXRfaGFuZGxlX2N5ZywgaW9faGFuZGxlX2N5ZzsKLSAg RFdPUkQgcGlkX3Jlc3RvcmU7Ci0gIGludCBmZDsKIAogICAvKiBIZWxwZXIgZnVuY3Rpb25zIGZv ciBmY2htb2QgYW5kIGZjaG93bi4gKi8KICAgYm9vbCBmY2hfb3Blbl9oYW5kbGVzIChib29sIGNo b3duKTsKICAgaW50IGZjaF9zZXRfc2QgKHNlY3VyaXR5X2Rlc2NyaXB0b3IgJnNkLCBib29sIGNo b3duKTsKICAgdm9pZCBmY2hfY2xvc2VfaGFuZGxlcyAoKTsKIAotICBib29sIHRyeV9yZWF0dGFj aF9wY29uICgpOwotICB2b2lkIHJlc3RvcmVfcmVhdHRhY2hfcGNvbiAoKTsKLSAgaW5saW5lIHZv aWQgZnJlZV9hdHRhY2hlZF9jb25zb2xlICgpOwotCiAgcHVibGljOgogICAvKiBDb25zdHJ1Y3Rv ciAqLwogICBmaGFuZGxlcl9wdHlfc2xhdmUgKGludCk7Ci0gIC8qIERlc3RydWN0b3IgKi8KLSAg fmZoYW5kbGVyX3B0eV9zbGF2ZSAoKTsKIAogICB2b2lkIHNldF9vdXRwdXRfaGFuZGxlX2N5ZyAo SEFORExFIGgpIHsgb3V0cHV0X2hhbmRsZV9jeWcgPSBoOyB9CiAgIEhBTkRMRSYgZ2V0X291dHB1 dF9oYW5kbGVfY3lnICgpIHsgcmV0dXJuIG91dHB1dF9oYW5kbGVfY3lnOyB9CkBAIC0yMzE1LDkg KzIyOTQsNiBAQCBjbGFzcyBmaGFuZGxlcl9wdHlfc2xhdmU6IHB1YmxpYyBmaGFuZGxlcl9wdHlf Y29tbW9uCiAgIHNzaXplX3QgX19zdGRjYWxsIHdyaXRlIChjb25zdCB2b2lkICpwdHIsIHNpemVf dCBsZW4pOwogICB2b2lkIF9fcmVnMyByZWFkICh2b2lkICpwdHIsIHNpemVfdCYgbGVuKTsKICAg aW50IGluaXQgKEhBTkRMRSwgRFdPUkQsIG1vZGVfdCk7Ci0gIGludCBlYXRfcmVhZGFoZWFkIChp bnQgbik7Ci0gIGludCBnZXRfcmVhZGFoZWFkX2ludG9fYnVmZmVyIChjaGFyICpidWYsIHNpemVf dCBidWZsZW4pOwotICBib29sIGdldF9yZWFkYWhlYWRfdmFsaWQgKHZvaWQpOwogCiAgIGludCB0 Y3NldGF0dHIgKGludCBhLCBjb25zdCBzdHJ1Y3QgdGVybWlvcyAqdCk7CiAgIGludCB0Y2dldGF0 dHIgKHN0cnVjdCB0ZXJtaW9zICp0KTsKQEAgLTIzNTQsMjAgKzIzMzAsMTIgQEAgY2xhc3MgZmhh bmRsZXJfcHR5X3NsYXZlOiBwdWJsaWMgZmhhbmRsZXJfcHR5X2NvbW1vbgogICAgIGNvcHl0byAo ZmgpOwogICAgIHJldHVybiBmaDsKICAgfQotICB2b2lkIHNldF9zd2l0Y2hfdG9fcGNvbiAoaW50 IGZkKTsKKyAgYm9vbCBzZXR1cF9wc2V1ZG9jb25zb2xlIChTVEFSVFVQSU5GT0VYVyAqc2ksIGJv b2wgbm9wY29uKTsKKyAgdm9pZCBjbG9zZV9wc2V1ZG9jb25zb2xlICh2b2lkKTsKKyAgdm9pZCBz ZXRfc3dpdGNoX3RvX3Bjb24gKHZvaWQpOwogICB2b2lkIHJlc2V0X3N3aXRjaF90b19wY29uICh2 b2lkKTsKLSAgdm9pZCBwdXNoX3RvX3Bjb25fc2NyZWVuYnVmZmVyIChjb25zdCBjaGFyICpwdHIs IHNpemVfdCBsZW4sIGJvb2wgaXNfZWNobyk7CiAgIHZvaWQgbWFza19zd2l0Y2hfdG9fcGNvbl9p biAoYm9vbCBtYXNrKTsKLSAgdm9pZCBmaXh1cF9hZnRlcl9hdHRhY2ggKGJvb2wgbmF0aXZlX21h eWJlLCBpbnQgZmQpOwotICBib29sIGlzX2xpbmVfaW5wdXQgKHZvaWQpCi0gIHsKLSAgICByZXR1 cm4gZ2V0X3R0eXAgKCktPnRpLmNfbGZsYWcgJiBJQ0FOT047Ci0gIH0KICAgdm9pZCBzZXR1cF9s b2NhbGUgKHZvaWQpOwotICB2b2lkIHNldF9mcmVlY29uc29sZV9vbl9jbG9zZSAoYm9vbCB2YWwp OwotICB2b2lkIHRyaWdnZXJfcmVkcmF3X3NjcmVlbiAodm9pZCk7Ci0gIHZvaWQgcHVsbF9wY29u X2lucHV0ICh2b2lkKTsKLSAgdm9pZCB1cGRhdGVfcGNvbl9pbnB1dF9zdGF0ZSAoYm9vbCBuZWVk X2xvY2spOwogfTsKIAogI2RlZmluZSBfX3B0c25hbWUoYnVmLCB1bml0KSBfX3NtYWxsX3Nwcmlu dGYgKChidWYpLCAiL2Rldi9wdHklZCIsICh1bml0KSkKQEAgLTIzOTIsNyArMjM2MCw2IEBAIHB1 YmxpYzoKICAgaW50IHByb2Nlc3Nfc2xhdmVfb3V0cHV0IChjaGFyICpidWYsIHNpemVfdCBsZW4s IGludCBwa3Rtb2RlX29uKTsKICAgdm9pZCBkb2VjaG8gKGNvbnN0IHZvaWQgKnN0ciwgRFdPUkQg bGVuKTsKICAgaW50IGFjY2VwdF9pbnB1dCAoKTsKLSAgaW50IHB1dF9yZWFkYWhlYWQgKGNoYXIg dmFsdWUpOwogICBpbnQgb3BlbiAoaW50IGZsYWdzLCBtb2RlX3QgbW9kZSA9IDApOwogICB2b2lk IG9wZW5fc2V0dXAgKGludCBmbGFncyk7CiAgIHNzaXplX3QgX19zdGRjYWxsIHdyaXRlIChjb25z dCB2b2lkICpwdHIsIHNpemVfdCBsZW4pOwpAQCAtMjQzMSw5ICsyMzk4LDcgQEAgcHVibGljOgog ICAgIGNvcHl0byAoZmgpOwogICAgIHJldHVybiBmaDsKICAgfQotCi0gIGJvb2wgc2V0dXBfcHNl dWRvY29uc29sZSAodm9pZCk7Ci0gIHZvaWQgdHJhbnNmZXJfaW5wdXRfdG9fcGNvbiAodm9pZCk7 CisgIGJvb2wgdG9fYmVfcmVhZF9mcm9tX3Bjb24gKHZvaWQpOwogfTsKIAogY2xhc3MgZmhhbmRs ZXJfZGV2X251bGw6IHB1YmxpYyBmaGFuZGxlcl9iYXNlCmRpZmYgLS1naXQgYS93aW5zdXAvY3ln d2luL2ZoYW5kbGVyX2NvbnNvbGUuY2MgYi93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX2NvbnNvbGUu Y2MKaW5kZXggNTI3NDFjZThiLi4wMmE1OTk2YTEgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4v ZmhhbmRsZXJfY29uc29sZS5jYworKysgYi93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX2NvbnNvbGUu Y2MKQEAgLTEyMDYsMTggKzEyMDYsNiBAQCBmaGFuZGxlcl9jb25zb2xlOjpjbG9zZSAoKQogICBp ZiAoY29uX3JhLnJhYnVmKQogICAgIGZyZWUgKGNvbl9yYS5yYWJ1Zik7CiAKLSAgLyogSWYgYWxy ZWFkeSBhdHRhY2hlZCB0byBwc2V1ZG8gY29uc29sZSwgZG9uJ3QgY2FsbCBmcmVlX2NvbnNvbGUg KCkgKi8KLSAgY3lnaGVhcF9mZGVudW0gY2ZkIChmYWxzZSk7Ci0gIHdoaWxlIChjZmQubmV4dCAo KSA+PSAwKQotICAgIGlmIChjZmQtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZTV9NQUpPUiB8fAot CWNmZC0+Z2V0X21ham9yICgpID09IERFVl9QVFlTX01BSk9SKQotICAgICAgewotCWZoYW5kbGVy X3B0eV9jb21tb24gKnQgPQotCSAgKGZoYW5kbGVyX3B0eV9jb21tb24gKikgKGZoYW5kbGVyX2Jh c2UgKikgY2ZkOwotCWlmIChnZXRfY29uc29sZV9wcm9jZXNzX2lkICh0LT5nZXRfaGVscGVyX3By b2Nlc3NfaWQgKCksIHRydWUpKQotCSAgcmV0dXJuIDA7Ci0gICAgICB9Ci0KICAgaWYgKCFoYXZl X2V4ZWNlZCkKICAgICBmcmVlX2NvbnNvbGUgKCk7CiAgIHJldHVybiAwOwpAQCAtMzYxMSwzNyAr MzU5OSw2IEBAIGZoYW5kbGVyX2NvbnNvbGU6Om5lZWRfaW52aXNpYmxlICgpCiAgIHJldHVybiBi OwogfQogCi1EV09SRAotZmhhbmRsZXJfY29uc29sZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZCAo RFdPUkQgcGlkLCBib29sIG1hdGNoKQotewotICBEV09SRCB0bXA7Ci0gIERXT1JEIG51bSwgbnVt X3JlcTsKLSAgbnVtID0gMTsKLSAgbnVtX3JlcSA9IEdldENvbnNvbGVQcm9jZXNzTGlzdCAoJnRt cCwgbnVtKTsKLSAgRFdPUkQgKmxpc3Q7Ci0gIHdoaWxlICh0cnVlKQotICAgIHsKLSAgICAgIGxp c3QgPSAoRFdPUkQgKikKLQlIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBudW1fcmVx ICogc2l6ZW9mIChEV09SRCkpOwotICAgICAgbnVtID0gbnVtX3JlcTsKLSAgICAgIG51bV9yZXEg PSBHZXRDb25zb2xlUHJvY2Vzc0xpc3QgKGxpc3QsIG51bSk7Ci0gICAgICBpZiAobnVtX3JlcSA+ IG51bSkKLQlIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIGxpc3QpOwotICAgICAgZWxz ZQotCWJyZWFrOwotICAgIH0KLSAgbnVtID0gbnVtX3JlcTsKLQotICB0bXAgPSAwOwotICBmb3Ig KERXT1JEIGk9MDsgaTxudW07IGkrKykKLSAgICBpZiAoKG1hdGNoICYmIGxpc3RbaV0gPT0gcGlk KSB8fCAoIW1hdGNoICYmIGxpc3RbaV0gIT0gcGlkKSkKLSAgICAgIC8qIExhc3Qgb25lIGlzIHRo ZSBvbGRlc3QuICovCi0gICAgICAvKiBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L3Rlcm1p bmFsL2lzc3Vlcy85NSAqLwotICAgICAgdG1wID0gbGlzdFtpXTsKLSAgSGVhcEZyZWUgKEdldFBy b2Nlc3NIZWFwICgpLCAwLCBsaXN0KTsKLSAgcmV0dXJuIHRtcDsKLX0KLQogRFdPUkQKIGZoYW5k bGVyX2NvbnNvbGU6Ol9fYWNxdWlyZV9pbnB1dF9tdXRleCAoY29uc3QgY2hhciAqZm4sIGludCBs biwgRFdPUkQgbXMpCiB7CmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX3R0eS5j YyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfdHR5LmNjCmluZGV4IDYyOTRlMmMyMC4uMDg2NWMx ZmFjIDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX3R0eS5jYworKysgYi93aW5z dXAvY3lnd2luL2ZoYW5kbGVyX3R0eS5jYwpAQCAtMjUsNyArMjUsNiBAQCBkZXRhaWxzLiAqLwog I2luY2x1ZGUgImNoaWxkX2luZm8uaCIKICNpbmNsdWRlIDxhc20vc29ja2V0Lmg+CiAjaW5jbHVk ZSAiY3lnd2FpdC5oIgotI2luY2x1ZGUgInRsc19wYnVmLmgiCiAjaW5jbHVkZSAicmVnaXN0cnku aCIKIAogI2lmbmRlZiBQUk9DX1RIUkVBRF9BVFRSSUJVVEVfUFNFVURPQ09OU09MRQpAQCAtMzMs NyArMzIsNiBAQCBkZXRhaWxzLiAqLwogI2VuZGlmIC8qIFBST0NfVEhSRUFEX0FUVFJJQlVURV9Q U0VVRE9DT05TT0xFICovCiAKIGV4dGVybiAiQyIgaW50IHNzY2FuZiAoY29uc3QgY2hhciAqLCBj b25zdCBjaGFyICosIC4uLik7Ci1leHRlcm4gIkMiIGludCB0dHluYW1lX3IgKGludCwgY2hhcios IHNpemVfdCk7CiAKIGV4dGVybiAiQyIgewogICBIUkVTVUxUIFdJTkFQSSBDcmVhdGVQc2V1ZG9D b25zb2xlIChDT09SRCwgSEFORExFLCBIQU5ETEUsIERXT1JELCBIUENPTiAqKTsKQEAgLTYwLDIw ICs1OCwxMCBAQCBzdHJ1Y3QgcGlwZV9yZXBseSB7CiAgIERXT1JEIGVycm9yOwogfTsKIAotc3Rh dGljIGludCBwY29uX2F0dGFjaGVkX3RvID0gLTE7CiBzdGF0aWMgYm9vbCBpc0h5YnJpZDsKLXN0 YXRpYyBib29sIGRvX25vdF9yZXNldF9zd2l0Y2hfdG9fcGNvbjsKLXN0YXRpYyBib29sIGZyZWVj b25zb2xlX29uX2Nsb3NlID0gdHJ1ZTsKLXN0YXRpYyB0dHkgKmxhc3RfdHR5cCA9IE5VTEw7Ci0K LXZvaWQKLWNsZWFyX3Bjb25fYXR0YWNoZWRfdG8gKHZvaWQpCi17Ci0gIHBjb25fYXR0YWNoZWRf dG8gPSAtMTsKLX0KIAogc3RhdGljIHZvaWQKLXNldF9zd2l0Y2hfdG9fcGNvbiAodm9pZCkKK3Nl dF9zd2l0Y2hfdG9fcGNvbiAoSEFORExFIGgpCiB7CiAgIGN5Z2hlYXBfZmRlbnVtIGNmZCAoZmFs c2UpOwogICBpbnQgZmQ7CkBAIC04MiwyODAgKzcwLDE3IEBAIHNldF9zd2l0Y2hfdG9fcGNvbiAo dm9pZCkKICAgICAgIHsKIAlmaGFuZGxlcl9iYXNlICpmaCA9IGNmZDsKIAlmaGFuZGxlcl9wdHlf c2xhdmUgKnB0eXMgPSAoZmhhbmRsZXJfcHR5X3NsYXZlICopIGZoOwotCWlmIChwdHlzLT5nZXRf cHNldWRvX2NvbnNvbGUgKCkpCi0JICB7Ci0JICAgIHB0eXMtPnNldF9zd2l0Y2hfdG9fcGNvbiAo ZmQpOwotCSAgICBwdHlzLT50cmlnZ2VyX3JlZHJhd19zY3JlZW4gKCk7Ci0JICAgIERXT1JEIG1v ZGUgPQotCSAgICAgIEVOQUJMRV9QUk9DRVNTRURfSU5QVVQgfCBFTkFCTEVfTElORV9JTlBVVCB8 IEVOQUJMRV9FQ0hPX0lOUFVUOwotCSAgICBTZXRDb25zb2xlTW9kZSAocHR5cy0+Z2V0X2hhbmRs ZSAoKSwgbW9kZSk7Ci0JICB9CisJaWYgKGggPT0gcHR5cy0+Z2V0X2hhbmRsZSAoKSkKKwkgIHB0 eXMtPnNldF9zd2l0Y2hfdG9fcGNvbiAoKTsKIAlyZXR1cm47CiAgICAgICB9Ci0gIC8qIE5vIHB0 eSBzbGF2ZSBvcGVuZWQgKi8KLSAgaWYgKGxhc3RfdHR5cCkgLyogTWFrZSBzeXN0ZW1fcHJpbnRm KCkgd29yayBhZnRlciBjbG9zaW5nIHB0eSBzbGF2ZSAqLwotICAgIGxhc3RfdHR5cC0+c2V0X3N3 aXRjaF90b19wY29uX291dCAodHJ1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1mb3JjZV9hdHRhY2hf dG9fcGNvbiAoSEFORExFIGgpCi17Ci0gIGJvb2wgYXR0YWNoX2RvbmUgPSBmYWxzZTsKLSAgZm9y IChpbnQgbiA9IDA7IG4gPCAyOyBuICsrKQotICAgIHsKLSAgICAgIC8qIEZpcnN0IHRpbWUsIGF0 dGFjaCB0byB0aGUgcHR5IHdob3NlIGhhbmRsZSB2YWx1ZSBpcyBtYXRjaC4KLQkgU2Vjb25kIHRp bWUsIHRyeSB0byBhdHRhY2ggdG8gYW55IHB0eS4gKi8KLSAgICAgIGN5Z2hlYXBfZmRlbnVtIGNm ZCAoZmFsc2UpOwotICAgICAgd2hpbGUgKGNmZC5uZXh0ICgpID49IDApCi0JaWYgKGNmZC0+Z2V0 X21ham9yICgpID09IERFVl9QVFlTX01BSk9SKQotCSAgewotCSAgICBmaGFuZGxlcl9iYXNlICpm aCA9IGNmZDsKLQkgICAgZmhhbmRsZXJfcHR5X3NsYXZlICpwdHlzID0gKGZoYW5kbGVyX3B0eV9z bGF2ZSAqKSBmaDsKLQkgICAgaWYgKCFwdHlzLT5nZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0JICAg ICAgY29udGludWU7Ci0JICAgIGlmIChuICE9IDAKLQkJfHwgaCA9PSBwdHlzLT5nZXRfaGFuZGxl ICgpCi0JCXx8IGggPT0gcHR5cy0+Z2V0X291dHB1dF9oYW5kbGUgKCkpCi0JICAgICAgewotCQlp ZiAoZmhhbmRsZXJfY29uc29sZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZAotCQkJCSAgKHB0eXMt PmdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKSwgdHJ1ZSkpCi0JCSAgYXR0YWNoX2RvbmUgPSB0cnVl OwotCQllbHNlCi0JCSAgewotCQkgICAgRnJlZUNvbnNvbGUgKCk7Ci0JCSAgICBpZiAoQXR0YWNo Q29uc29sZSAocHR5cy0+Z2V0X2hlbHBlcl9wcm9jZXNzX2lkICgpKSkKLQkJICAgICAgewotCQkJ cGNvbl9hdHRhY2hlZF90byA9IHB0eXMtPmdldF9taW5vciAoKTsKLQkJCWF0dGFjaF9kb25lID0g dHJ1ZTsKLQkJICAgICAgfQotCQkgICAgZWxzZQotCQkgICAgICBwY29uX2F0dGFjaGVkX3RvID0g LTE7Ci0JCSAgfQotCQlicmVhazsKLQkgICAgICB9Ci0JICB9Ci0JZWxzZSBpZiAoY2ZkLT5nZXRf bWFqb3IgKCkgPT0gREVWX0NPTlNfTUFKT1IpCi0JICB7Ci0JICAgIGZoYW5kbGVyX2Jhc2UgKmZo ID0gY2ZkOwotCSAgICBmaGFuZGxlcl9jb25zb2xlICpjb25zID0gKGZoYW5kbGVyX2NvbnNvbGUg KikgZmg7Ci0JICAgIGlmIChuICE9IDAKLQkJfHwgaCA9PSBjb25zLT5nZXRfaGFuZGxlICgpCi0J CXx8IGggPT0gY29ucy0+Z2V0X291dHB1dF9oYW5kbGUgKCkpCi0JICAgICAgewotCQkvKiBJZiB0 aGUgcHJvY2VzcyBpcyBydW5uaW5nIG9uIGEgY29uc29sZSwKLQkJICAgdGhlIHBhcmVudCBwcm9j ZXNzIHNob3VsZCBiZSBhdHRhY2hlZAotCQkgICB0byB0aGUgc2FtZSBjb25zb2xlLiAqLwotCQlE V09SRCBhdHRhY2hfd3BpZDsKLQkJaWYgKG15c2VsZi0+cHBpZCA9PSAxKQotCQkgIGF0dGFjaF93 cGlkID0gQVRUQUNIX1BBUkVOVF9QUk9DRVNTOwotCQllbHNlCi0JCSAgewotCQkgICAgcGluZm8g cCAobXlzZWxmLT5wcGlkKTsKLQkJICAgIGF0dGFjaF93cGlkID0gcC0+ZHdQcm9jZXNzSWQ7Ci0J CSAgfQotCQlGcmVlQ29uc29sZSAoKTsKLQkJaWYgKEF0dGFjaENvbnNvbGUgKGF0dGFjaF93cGlk KSkKLQkJICB7Ci0JCSAgICBwY29uX2F0dGFjaGVkX3RvID0gLTE7Ci0JCSAgICBhdHRhY2hfZG9u ZSA9IHRydWU7Ci0JCSAgfQotCQllbHNlCi0JCSAgcGNvbl9hdHRhY2hlZF90byA9IC0xOwotCQli cmVhazsKLQkgICAgICB9Ci0JICB9Ci0gICAgICBpZiAoYXR0YWNoX2RvbmUpCi0JYnJlYWs7Ci0g ICAgfQotfQotCi12b2lkCi1zZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChIQU5ETEUg aCkKLXsKLSAgaWYgKEdldEZpbGVUeXBlIChoKSA9PSBGSUxFX1RZUEVfQ0hBUikKLSAgICB7Ci0g ICAgICBmb3JjZV9hdHRhY2hfdG9fcGNvbiAoaCk7Ci0gICAgICBEV09SRCBkdW1teTsKLSAgICAg IGlmICghaXNIeWJyaWQgJiYgKEdldENvbnNvbGVNb2RlIChoLCAmZHVtbXkpCi0JCQl8fCBHZXRM YXN0RXJyb3IgKCkgIT0gRVJST1JfSU5WQUxJRF9IQU5ETEUpKQotCXsKLQkgIGlzSHlicmlkID0g dHJ1ZTsKLQkgIHNldF9zd2l0Y2hfdG9fcGNvbiAoKTsKLQl9Ci0gICAgfQotfQotCi1pbmxpbmUg dm9pZAotZmhhbmRsZXJfcHR5X3NsYXZlOjpmcmVlX2F0dGFjaGVkX2NvbnNvbGUgKCkKLXsKLSAg Ym9vbCBhdHRhY2hlZCA9IGdldF90dHlwICgpID8KLSAgICBmaGFuZGxlcl9jb25zb2xlOjpnZXRf Y29uc29sZV9wcm9jZXNzX2lkIChnZXRfaGVscGVyX3Byb2Nlc3NfaWQgKCksIHRydWUpCi0gICAg OiAoZ2V0X21pbm9yICgpID09IHBjb25fYXR0YWNoZWRfdG8pOwotICBpZiAoZnJlZWNvbnNvbGVf b25fY2xvc2UgJiYgYXR0YWNoZWQpCi0gICAgewotICAgICAgRnJlZUNvbnNvbGUgKCk7Ci0gICAg ICBwY29uX2F0dGFjaGVkX3RvID0gLTE7Ci0gICAgfQogfQogCiAjZGVmaW5lIERFRl9IT09LKG5h bWUpIHN0YXRpYyBfX3R5cGVvZl9fIChuYW1lKSAqbmFtZSMjX09yaWcKLURFRl9IT09LIChXcml0 ZUZpbGUpOwotREVGX0hPT0sgKFdyaXRlQ29uc29sZUEpOwotREVGX0hPT0sgKFdyaXRlQ29uc29s ZVcpOwotREVGX0hPT0sgKFJlYWRGaWxlKTsKLURFRl9IT09LIChSZWFkQ29uc29sZUEpOwotREVG X0hPT0sgKFJlYWRDb25zb2xlVyk7Ci1ERUZfSE9PSyAoV3JpdGVDb25zb2xlT3V0cHV0QSk7Ci1E RUZfSE9PSyAoV3JpdGVDb25zb2xlT3V0cHV0Vyk7Ci1ERUZfSE9PSyAoV3JpdGVDb25zb2xlT3V0 cHV0Q2hhcmFjdGVyQSk7Ci1ERUZfSE9PSyAoV3JpdGVDb25zb2xlT3V0cHV0Q2hhcmFjdGVyVyk7 Ci1ERUZfSE9PSyAoV3JpdGVDb25zb2xlT3V0cHV0QXR0cmlidXRlKTsKLURFRl9IT09LIChTZXRD b25zb2xlQ3Vyc29yUG9zaXRpb24pOwotREVGX0hPT0sgKFNldENvbnNvbGVUZXh0QXR0cmlidXRl KTsKLURFRl9IT09LIChXcml0ZUNvbnNvbGVJbnB1dEEpOwotREVGX0hPT0sgKFdyaXRlQ29uc29s ZUlucHV0Vyk7Ci1ERUZfSE9PSyAoUmVhZENvbnNvbGVJbnB1dEEpOwotREVGX0hPT0sgKFJlYWRD b25zb2xlSW5wdXRXKTsKLURFRl9IT09LIChQZWVrQ29uc29sZUlucHV0QSk7Ci1ERUZfSE9PSyAo UGVla0NvbnNvbGVJbnB1dFcpOwogLyogQ3JlYXRlUHJvY2VzcygpIGlzIGhvb2tlZCBmb3IgR0RC IGV0Yy4gKi8KIERFRl9IT09LIChDcmVhdGVQcm9jZXNzQSk7CiBERUZfSE9PSyAoQ3JlYXRlUHJv Y2Vzc1cpOwogCi1zdGF0aWMgQk9PTCBXSU5BUEkKLVdyaXRlRmlsZV9Ib29rZWQKLSAgICAgKEhB TkRMRSBoLCBMUENWT0lEIHAsIERXT1JEIGwsIExQRFdPUkQgbiwgTFBPVkVSTEFQUEVEIG8pCi17 Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gV3JpdGVG aWxlX09yaWcgKGgsIHAsIGwsIG4sIG8pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1Xcml0ZUNv bnNvbGVBX0hvb2tlZAotICAgICAoSEFORExFIGgsIExQQ1ZPSUQgcCwgRFdPUkQgbCwgTFBEV09S RCBuLCBMUFZPSUQgbykKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7 Ci0gIHJldHVybiBXcml0ZUNvbnNvbGVBX09yaWcgKGgsIHAsIGwsIG4sIG8pOwotfQotc3RhdGlj IEJPT0wgV0lOQVBJCi1Xcml0ZUNvbnNvbGVXX0hvb2tlZAotICAgICAoSEFORExFIGgsIExQQ1ZP SUQgcCwgRFdPUkQgbCwgTFBEV09SRCBuLCBMUFZPSUQgbykKLXsKLSAgc2V0X2lzaHlicmlkX2Fu ZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBXcml0ZUNvbnNvbGVXX09yaWcgKGgsIHAs IGwsIG4sIG8pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1SZWFkRmlsZV9Ib29rZWQKLSAgICAg KEhBTkRMRSBoLCBMUFZPSUQgcCwgRFdPUkQgbCwgTFBEV09SRCBuLCBMUE9WRVJMQVBQRUQgbykK LXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBSZWFk RmlsZV9PcmlnIChoLCBwLCBsLCBuLCBvKTsKLX0KLXN0YXRpYyBCT09MIFdJTkFQSQotUmVhZENv bnNvbGVBX0hvb2tlZAotICAgICAoSEFORExFIGgsIExQVk9JRCBwLCBEV09SRCBsLCBMUERXT1JE IG4sIExQVk9JRCBvKQotewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsK LSAgcmV0dXJuIFJlYWRDb25zb2xlQV9PcmlnIChoLCBwLCBsLCBuLCBvKTsKLX0KLXN0YXRpYyBC T09MIFdJTkFQSQotUmVhZENvbnNvbGVXX0hvb2tlZAotICAgICAoSEFORExFIGgsIExQVk9JRCBw LCBEV09SRCBsLCBMUERXT1JEIG4sIExQVk9JRCBvKQotewotICBzZXRfaXNoeWJyaWRfYW5kX3N3 aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFJlYWRDb25zb2xlV19PcmlnIChoLCBwLCBsLCBu LCBvKTsKLX0KLXN0YXRpYyBCT09MIFdJTkFQSQotV3JpdGVDb25zb2xlT3V0cHV0QV9Ib29rZWQK LSAgICAgKEhBTkRMRSBoLCBDT05TVCBDSEFSX0lORk8gKnAsIENPT1JEIHMsIENPT1JEIGMsIFBT TUFMTF9SRUNUIHIpCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwot ICByZXR1cm4gV3JpdGVDb25zb2xlT3V0cHV0QV9PcmlnIChoLCBwLCBzLCBjLCByKTsKLX0KLXN0 YXRpYyBCT09MIFdJTkFQSQotV3JpdGVDb25zb2xlT3V0cHV0V19Ib29rZWQKLSAgICAgKEhBTkRM RSBoLCBDT05TVCBDSEFSX0lORk8gKnAsIENPT1JEIHMsIENPT1JEIGMsIFBTTUFMTF9SRUNUIHIp Ci17Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gV3Jp dGVDb25zb2xlT3V0cHV0V19PcmlnIChoLCBwLCBzLCBjLCByKTsKLX0KLXN0YXRpYyBCT09MIFdJ TkFQSQotV3JpdGVDb25zb2xlT3V0cHV0Q2hhcmFjdGVyQV9Ib29rZWQKLSAgICAgKEhBTkRMRSBo LCBMUENTVFIgcCwgRFdPUkQgbCwgQ09PUkQgYywgTFBEV09SRCBuKQotewotICBzZXRfaXNoeWJy aWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFdyaXRlQ29uc29sZU91dHB1dENo YXJhY3RlckFfT3JpZyAoaCwgcCwgbCwgYywgbik7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVdy aXRlQ29uc29sZU91dHB1dENoYXJhY3RlcldfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgTFBDV1NU UiBwLCBEV09SRCBsLCBDT09SRCBjLCBMUERXT1JEIG4pCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRf c3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gV3JpdGVDb25zb2xlT3V0cHV0Q2hhcmFjdGVy V19PcmlnIChoLCBwLCBsLCBjLCBuKTsKLX0KLXN0YXRpYyBCT09MIFdJTkFQSQotV3JpdGVDb25z b2xlT3V0cHV0QXR0cmlidXRlX0hvb2tlZAotICAgICAoSEFORExFIGgsIENPTlNUIFdPUkQgKmEs IERXT1JEIGwsIENPT1JEIGMsIExQRFdPUkQgbikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0 Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBXcml0ZUNvbnNvbGVPdXRwdXRBdHRyaWJ1dGVfT3Jp ZyAoaCwgYSwgbCwgYywgbik7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVNldENvbnNvbGVDdXJz b3JQb3NpdGlvbl9Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBDT09SRCBjKQotewotICBzZXRfaXNo eWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFNldENvbnNvbGVDdXJzb3JQ b3NpdGlvbl9PcmlnIChoLCBjKTsKLX0KLXN0YXRpYyBCT09MIFdJTkFQSQotU2V0Q29uc29sZVRl eHRBdHRyaWJ1dGVfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgV09SRCBhKQotewotICBzZXRfaXNo eWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFNldENvbnNvbGVUZXh0QXR0 cmlidXRlX09yaWcgKGgsIGEpOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1Xcml0ZUNvbnNvbGVJ bnB1dEFfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgQ09OU1QgSU5QVVRfUkVDT1JEICpyLCBEV09S RCBsLCBMUERXT1JEIG4pCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgp OwotICByZXR1cm4gV3JpdGVDb25zb2xlSW5wdXRBX09yaWcgKGgsIHIsIGwsIG4pOwotfQotc3Rh dGljIEJPT0wgV0lOQVBJCi1Xcml0ZUNvbnNvbGVJbnB1dFdfSG9va2VkCi0gICAgIChIQU5ETEUg aCwgQ09OU1QgSU5QVVRfUkVDT1JEICpyLCBEV09SRCBsLCBMUERXT1JEIG4pCi17Ci0gIHNldF9p c2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gV3JpdGVDb25zb2xlSW5w dXRXX09yaWcgKGgsIHIsIGwsIG4pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1SZWFkQ29uc29s ZUlucHV0QV9Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBQSU5QVVRfUkVDT1JEIHIsIERXT1JEIGws IExQRFdPUkQgbikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0g IHJldHVybiBSZWFkQ29uc29sZUlucHV0QV9PcmlnIChoLCByLCBsLCBuKTsKLX0KLXN0YXRpYyBC T09MIFdJTkFQSQotUmVhZENvbnNvbGVJbnB1dFdfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgUElO UFVUX1JFQ09SRCByLCBEV09SRCBsLCBMUERXT1JEIG4pCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRf c3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gUmVhZENvbnNvbGVJbnB1dFdfT3JpZyAoaCwg ciwgbCwgbik7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVBlZWtDb25zb2xlSW5wdXRBX0hvb2tl ZAotICAgICAoSEFORExFIGgsIFBJTlBVVF9SRUNPUkQgciwgRFdPUkQgbCwgTFBEV09SRCBuKQot ewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFBlZWtD b25zb2xlSW5wdXRBX09yaWcgKGgsIHIsIGwsIG4pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1Q ZWVrQ29uc29sZUlucHV0V19Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBQSU5QVVRfUkVDT1JEIHIs IERXT1JEIGwsIExQRFdPUkQgbikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNv biAoaCk7Ci0gIHJldHVybiBQZWVrQ29uc29sZUlucHV0V19PcmlnIChoLCByLCBsLCBuKTsKLX0K LS8qIENyZWF0ZVByb2Nlc3MoKSBpcyBob29rZWQgZm9yIEdEQiBldGMuICovCiBzdGF0aWMgQk9P TCBXSU5BUEkKIENyZWF0ZVByb2Nlc3NBX0hvb2tlZAogICAgICAoTFBDU1RSIG4sIExQU1RSIGMs IExQU0VDVVJJVFlfQVRUUklCVVRFUyBwYSwgTFBTRUNVUklUWV9BVFRSSUJVVEVTIHRhLApAQCAt MzYzLDExICs4OCwxNCBAQCBDcmVhdGVQcm9jZXNzQV9Ib29rZWQKICAgICAgIExQU1RBUlRVUElO Rk9BIHNpLCBMUFBST0NFU1NfSU5GT1JNQVRJT04gcGkpCiB7CiAgIEhBTkRMRSBoOwotICBpZiAo c2ktPmR3RmxhZ3MgJiBTVEFSVEZfVVNFU1RESEFORExFUykKLSAgICBoID0gc2ktPmhTdGRPdXRw dXQ7Ci0gIGVsc2UKLSAgICBoID0gR2V0U3RkSGFuZGxlIChTVERfT1VUUFVUX0hBTkRMRSk7Ci0g IHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOworICBpZiAoIWlzSHlicmlkKQor ICAgIHsKKyAgICAgIGlmIChzaS0+ZHdGbGFncyAmIFNUQVJURl9VU0VTVERIQU5ETEVTKQorCWgg PSBzaS0+aFN0ZElucHV0OworICAgICAgZWxzZQorCWggPSBHZXRTdGRIYW5kbGUgKFNURF9JTlBV VF9IQU5ETEUpOworICAgICAgc2V0X3N3aXRjaF90b19wY29uIChoKTsKKyAgICB9CiAgIHJldHVy biBDcmVhdGVQcm9jZXNzQV9PcmlnIChuLCBjLCBwYSwgdGEsIGluaCwgZiwgZSwgZCwgc2ksIHBp KTsKIH0KIHN0YXRpYyBCT09MIFdJTkFQSQpAQCAtMzc3LDExICsxMDUsMTQgQEAgQ3JlYXRlUHJv Y2Vzc1dfSG9va2VkCiAgICAgICBMUFNUQVJUVVBJTkZPVyBzaSwgTFBQUk9DRVNTX0lORk9STUFU SU9OIHBpKQogewogICBIQU5ETEUgaDsKLSAgaWYgKHNpLT5kd0ZsYWdzICYgU1RBUlRGX1VTRVNU REhBTkRMRVMpCi0gICAgaCA9IHNpLT5oU3RkT3V0cHV0OwotICBlbHNlCi0gICAgaCA9IEdldFN0 ZEhhbmRsZSAoU1REX09VVFBVVF9IQU5ETEUpOwotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90 b19wY29uIChoKTsKKyAgaWYgKCFpc0h5YnJpZCkKKyAgICB7CisgICAgICBpZiAoc2ktPmR3Rmxh Z3MgJiBTVEFSVEZfVVNFU1RESEFORExFUykKKwloID0gc2ktPmhTdGRJbnB1dDsKKyAgICAgIGVs c2UKKwloID0gR2V0U3RkSGFuZGxlIChTVERfSU5QVVRfSEFORExFKTsKKyAgICAgIHNldF9zd2l0 Y2hfdG9fcGNvbiAoaCk7CisgICAgfQogICByZXR1cm4gQ3JlYXRlUHJvY2Vzc1dfT3JpZyAobiwg YywgcGEsIHRhLCBpbmgsIGYsIGUsIGQsIHNpLCBwaSk7CiB9CiAKQEAgLTQ2NCwxMCArMTk1LDYg QEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6Zmx1c2hfdG9fc2xhdmUgKCkKIHsKICAgaWYgKGdldF9y ZWFkYWhlYWRfdmFsaWQgKCkgJiYgIShnZXRfdHR5cCAoKS0+dGkuY19sZmxhZyAmIElDQU5PTikp CiAgICAgYWNjZXB0X2lucHV0ICgpOwotICBXYWl0Rm9yU2luZ2xlT2JqZWN0IChpbnB1dF9tdXRl eCwgSU5GSU5JVEUpOwotICBpZiAoIWdldF90dHlwICgpLT5wY29uX2luX2VtcHR5ICYmICEoZ2V0 X3R0eXAgKCktPnRpLmNfbGZsYWcgJiBJQ0FOT04pKQotICAgIFNldEV2ZW50IChpbnB1dF9hdmFp bGFibGVfZXZlbnQpOwotICBSZWxlYXNlTXV0ZXggKGlucHV0X211dGV4KTsKIH0KIAogRFdPUkQK QEAgLTUzMiwxNCArMjU5LDYgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6ZG9lY2hvIChjb25zdCB2 b2lkICpzdHIsIERXT1JEIGxlbikKICAgcmVsZWFzZV9vdXRwdXRfbXV0ZXggKCk7CiB9CiAKLWlu dAotZmhhbmRsZXJfcHR5X21hc3Rlcjo6cHV0X3JlYWRhaGVhZCAoY2hhciB2YWx1ZSkKLXsKLSAg aWYgKHRvX2JlX3JlYWRfZnJvbV9wY29uICgpKQotICAgIHJldHVybiAxOwotICByZXR1cm4gZmhh bmRsZXJfYmFzZTo6cHV0X3JlYWRhaGVhZCAodmFsdWUpOwotfQotCiBpbnQKIGZoYW5kbGVyX3B0 eV9tYXN0ZXI6OmFjY2VwdF9pbnB1dCAoKQogewpAQCAtNTUxLDkgKzI3MCwxMSBAQCBmaGFuZGxl cl9wdHlfbWFzdGVyOjphY2NlcHRfaW5wdXQgKCkKICAgY2hhciAqcCA9IHJhYnVmICgpICsgcmFp eGdldCAoKTsKICAgYnl0ZXNfbGVmdCA9IGVhdF9yZWFkYWhlYWQgKC0xKTsKIAorICBIQU5ETEUg d3JpdGVfdG8gPSBnZXRfb3V0cHV0X2hhbmRsZSAoKTsKICAgaWYgKHRvX2JlX3JlYWRfZnJvbV9w Y29uICgpKQotICAgIDsgLyogRG8gbm90aGluZyAqLwotICBlbHNlIGlmICghYnl0ZXNfbGVmdCkK KyAgICB3cml0ZV90byA9IHRvX3NsYXZlOworCisgIGlmICghYnl0ZXNfbGVmdCkKICAgICB7CiAg ICAgICB0ZXJtaW9zX3ByaW50ZiAoInNlbmRpbmcgRU9GIHRvIHNsYXZlIik7CiAgICAgICBnZXRf dHR5cCAoKS0+cmVhZF9yZXR2YWwgPSAwOwpAQCAtNTY0LDEwICsyODUsMTAgQEAgZmhhbmRsZXJf cHR5X21hc3Rlcjo6YWNjZXB0X2lucHV0ICgpCiAgICAgICBEV09SRCB3cml0dGVuID0gMDsKIAog ICAgICAgcGFyYW5vaWRfcHJpbnRmICgiYWJvdXQgdG8gd3JpdGUgJXUgY2hhcnMgdG8gc2xhdmUi LCBieXRlc19sZWZ0KTsKLSAgICAgIHJjID0gV3JpdGVGaWxlIChnZXRfb3V0cHV0X2hhbmRsZSAo KSwgcCwgYnl0ZXNfbGVmdCwgJndyaXR0ZW4sIE5VTEwpOworICAgICAgcmMgPSBXcml0ZUZpbGUg KHdyaXRlX3RvLCBwLCBieXRlc19sZWZ0LCAmd3JpdHRlbiwgTlVMTCk7CiAgICAgICBpZiAoIXJj KQogCXsKLQkgIGRlYnVnX3ByaW50ZiAoImVycm9yIHdyaXRpbmcgdG8gcGlwZSAlcCAlRSIsIGdl dF9vdXRwdXRfaGFuZGxlICgpKTsKKwkgIGRlYnVnX3ByaW50ZiAoImVycm9yIHdyaXRpbmcgdG8g cGlwZSAlcCAlRSIsIHdyaXRlX3RvKTsKIAkgIGdldF90dHlwICgpLT5yZWFkX3JldHZhbCA9IC0x OwogCSAgcmV0ID0gLTE7CiAJfQpAQCAtNzI1LDUyICs0NDYsMTIgQEAgb3V0OgogCiBmaGFuZGxl cl9wdHlfc2xhdmU6OmZoYW5kbGVyX3B0eV9zbGF2ZSAoaW50IHVuaXQpCiAgIDogZmhhbmRsZXJf cHR5X2NvbW1vbiAoKSwgaW51c2UgKE5VTEwpLCBvdXRwdXRfaGFuZGxlX2N5ZyAoTlVMTCksCi0g IGlvX2hhbmRsZV9jeWcgKE5VTEwpLCBwaWRfcmVzdG9yZSAoMCksIGZkICgtMSkKKyAgaW9faGFu ZGxlX2N5ZyAoTlVMTCkKIHsKICAgaWYgKHVuaXQgPj0gMCkKICAgICBkZXYgKCkucGFyc2UgKERF Vl9QVFlTX01BSk9SLCB1bml0KTsKIH0KIAotZmhhbmRsZXJfcHR5X3NsYXZlOjp+ZmhhbmRsZXJf cHR5X3NsYXZlICgpCi17Ci0gIGlmICghZ2V0X3R0eXAgKCkpCi0gICAgewotICAgICAgLyogV2h5 IGNvbWVzIGhlcmU/IFdobyBjbGVhcnMgX3RjPyAqLwotICAgICAgZnJlZV9hdHRhY2hlZF9jb25z b2xlICgpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgaWYgKGdldF9wc2V1ZG9fY29uc29sZSAo KSkKLSAgICB7Ci0gICAgICBpbnQgdXNlZCA9IDA7Ci0gICAgICBpbnQgYXR0YWNoZWQgPSAwOwot ICAgICAgY3lnaGVhcF9mZGVudW0gY2ZkIChmYWxzZSk7Ci0gICAgICB3aGlsZSAoY2ZkLm5leHQg KCkgPj0gMCkKLQl7Ci0JICBpZiAoY2ZkLT5nZXRfbWFqb3IgKCkgPT0gREVWX1BUWVNfTUFKT1Ig fHwKLQkgICAgICBjZmQtPmdldF9tYWpvciAoKSA9PSBERVZfQ09OU19NQUpPUikKLQkgICAgdXNl ZCArKzsKLQkgIGlmIChjZmQtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZU19NQUpPUiAmJgotCSAg ICAgIGNmZC0+Z2V0X21pbm9yICgpID09IHBjb25fYXR0YWNoZWRfdG8pCi0JICAgIGF0dGFjaGVk ICsrOwotCX0KLQotICAgICAgLyogQ2FsbCBGcmVlQ29uc29sZSgpIGlmIG5vIHR0eSBpcyBvcGVu ZWQgYW5kIHRoZSBwcm9jZXNzCi0JIGlzIGF0dGFjaGVkIHRvIGNvbnNvbGUgY29ycmVzcG9uZGlu ZyB0byB0dHkuIFRoaXMgaXMKLQkgbmVlZGVkIHRvIG1ha2UgR05VIHNjcmVlbiBhbmQgdG11eCB3 b3JrIGluIFdpbmRvd3MgMTAKLQkgMTkwMy4gKi8KLSAgICAgIGlmIChhdHRhY2hlZCA9PSAwKQot CXsKLQkgIHBjb25fYXR0YWNoZWRfdG8gPSAtMTsKLQkgIGxhc3RfdHR5cCA9IGdldF90dHlwICgp OwotCX0KLSAgICAgIGlmICh1c2VkID09IDApCi0JewotCSAgaW5pdF9jb25zb2xlX2hhbmRsZXIg KGZhbHNlKTsKLQkgIGZyZWVfYXR0YWNoZWRfY29uc29sZSAoKTsKLQl9Ci0gICAgfQotfQotCiBp bnQKIGZoYW5kbGVyX3B0eV9zbGF2ZTo6b3BlbiAoaW50IGZsYWdzLCBtb2RlX3QpCiB7CkBAIC04 MzMsOCArNTE0LDggQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpvcGVuIChpbnQgZmxhZ3MsIG1vZGVf dCkKICAgICByZWxlYXNlX291dHB1dF9tdXRleCAoKTsKICAgfQogCi0gIGlmICghZ2V0X3R0eXAg KCktPmZyb21fbWFzdGVyICgpIHx8ICFnZXRfdHR5cCAoKS0+ZnJvbV9tYXN0ZXJfY3lnICgpIHx8 Ci0gICAgICAhZ2V0X3R0eXAgKCktPnRvX21hc3RlciAoKSB8fCAhZ2V0X3R0eXAgKCktPnRvX21h c3Rlcl9jeWcgKCkpCisgIGlmICghZ2V0X3R0eXAgKCktPmZyb21fbWFzdGVyICgpIHx8ICFnZXRf dHR5cCAoKS0+ZnJvbV9tYXN0ZXJfY3lnICgpCisgICAgICB8fCAhZ2V0X3R0eXAgKCktPnRvX21h c3RlciAoKSB8fCAhZ2V0X3R0eXAgKCktPnRvX21hc3Rlcl9jeWcgKCkpCiAgICAgewogICAgICAg ZXJybXNnID0gInB0eSBoYW5kbGVzIGhhdmUgYmVlbiBjbG9zZWQiOwogICAgICAgc2V0X2Vycm5v IChFQUNDRVMpOwpAQCAtOTIzLDggKzYwNCw4IEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6b3BlbiAo aW50IGZsYWdzLCBtb2RlX3QpCiAgICAgICBmcm9tX21hc3Rlcl9jeWdfbG9jYWwgPSByZXBsLmZy b21fbWFzdGVyX2N5ZzsKICAgICAgIHRvX21hc3Rlcl9sb2NhbCA9IHJlcGwudG9fbWFzdGVyOwog ICAgICAgdG9fbWFzdGVyX2N5Z19sb2NhbCA9IHJlcGwudG9fbWFzdGVyX2N5ZzsKLSAgICAgIGlm ICghZnJvbV9tYXN0ZXJfbG9jYWwgfHwgIWZyb21fbWFzdGVyX2N5Z19sb2NhbCB8fAotCSAgIXRv X21hc3Rlcl9sb2NhbCB8fCAhdG9fbWFzdGVyX2N5Z19sb2NhbCkKKyAgICAgIGlmICghZnJvbV9t YXN0ZXJfbG9jYWwgfHwgIWZyb21fbWFzdGVyX2N5Z19sb2NhbAorCSAgfHwgIXRvX21hc3Rlcl9s b2NhbCB8fCAhdG9fbWFzdGVyX2N5Z19sb2NhbCkKIAl7CiAJICBTZXRMYXN0RXJyb3IgKHJlcGwu ZXJyb3IpOwogCSAgZXJybXNnID0gImVycm9yIGR1cGxpY2F0aW5nIHBpcGVzLCAlRSI7CkBAIC05 NTAsMjQgKzYzMSw3IEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6b3BlbiAoaW50IGZsYWdzLCBtb2Rl X3QpCiAgIHNldF9vdXRwdXRfaGFuZGxlICh0b19tYXN0ZXJfbG9jYWwpOwogICBzZXRfb3V0cHV0 X2hhbmRsZV9jeWcgKHRvX21hc3Rlcl9jeWdfbG9jYWwpOwogCi0gIGlmICghZ2V0X3BzZXVkb19j b25zb2xlICgpKQotICAgIHsKLSAgICAgIGZoYW5kbGVyX2NvbnNvbGU6Om5lZWRfaW52aXNpYmxl ICgpOwotICAgICAgcGNvbl9hdHRhY2hlZF90byA9IC0xOwotICAgIH0KLSAgZWxzZSBpZiAoIWZo YW5kbGVyX2NvbnNvbGU6OmdldF9jb25zb2xlX3Byb2Nlc3NfaWQKLQkJCSAgICAgICAoR2V0Q3Vy cmVudFByb2Nlc3NJZCAoKSwgdHJ1ZSkpCi0gICAgewotICAgICAgZmhhbmRsZXJfY29uc29sZTo6 bmVlZF9pbnZpc2libGUgKCk7Ci0gICAgICBwY29uX2F0dGFjaGVkX3RvID0gLTE7Ci0gICAgfQot ICBlbHNlIGlmIChmaGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkCi0JCQkg ICAgICAgKGdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKSwgdHJ1ZSkpCi0gICAgLyogQXR0YWNoZWQg dG8gcGNvbiBvZiB0aGlzIHB0eSAqLwotICAgIHsKLSAgICAgIHBjb25fYXR0YWNoZWRfdG8gPSBn ZXRfbWlub3IgKCk7Ci0gICAgICBpbml0X2NvbnNvbGVfaGFuZGxlciAodHJ1ZSk7Ci0gICAgfQor ICBmaGFuZGxlcl9jb25zb2xlOjpuZWVkX2ludmlzaWJsZSAoKTsKIAogICBzZXRfb3Blbl9zdGF0 dXMgKCk7CiAgIHJldHVybiAxOwpAQCAtMTAyMSw4ICs2ODUsNyBAQCBmaGFuZGxlcl9wdHlfc2xh dmU6OmNsb3NlICgpCiAgIGlmICghRm9yY2VDbG9zZUhhbmRsZSAoZ2V0X2hhbmRsZV9jeWcgKCkp KQogICAgIHRlcm1pb3NfcHJpbnRmICgiQ2xvc2VIYW5kbGUgKGdldF9oYW5kbGVfY3lnICgpPCVw PiksICVFIiwKIAlnZXRfaGFuZGxlX2N5ZyAoKSk7Ci0gIGlmICghZ2V0X3BzZXVkb19jb25zb2xl ICgpICYmCi0gICAgICAodW5zaWduZWQpIG15c2VsZi0+Y3R0eSA9PSBGSERFViAoREVWX1BUWVNf TUFKT1IsIGdldF9taW5vciAoKSkpCisgIGlmICgodW5zaWduZWQpIG15c2VsZi0+Y3R0eSA9PSBG SERFViAoREVWX1BUWVNfTUFKT1IsIGdldF9taW5vciAoKSkpCiAgICAgZmhhbmRsZXJfY29uc29s ZTo6ZnJlZV9jb25zb2xlICgpOwkvKiBhc3N1bWVzIHRoYXQgd2UgYXJlIHRoZSBsYXN0IHB0eSBj bG9zZXIgKi8KICAgZmhhbmRsZXJfcHR5X2NvbW1vbjo6Y2xvc2UgKCk7CiAgIGlmICghRm9yY2VD bG9zZUhhbmRsZSAob3V0cHV0X211dGV4KSkKQEAgLTEwNzAsNDIzICs3MzMsMzEgQEAgZmhhbmRs ZXJfcHR5X3NsYXZlOjppbml0IChIQU5ETEUgaCwgRFdPUkQgYSwgbW9kZV90KQogICByZXR1cm4g cmV0OwogfQogCi1ib29sCi1maGFuZGxlcl9wdHlfc2xhdmU6OnRyeV9yZWF0dGFjaF9wY29uICh2 b2lkKQotewotICBwaWRfcmVzdG9yZSA9IDA7Ci0KLSAgLyogRG8gbm90IGRldGFjaCBmcm9tIHRo ZSBjb25zb2xlIGJlY2F1c2UgcmUtYXR0YWNoaW5nIHdpbGwKLSAgICAgZmFpbCBpZiBoZWxwZXIg cHJvY2VzcyBpcyBydW5uaW5nIGFzIHNlcnZpY2UgYWNjb3VudC4gKi8KLSAgaWYgKGdldF90dHlw KCktPmF0dGFjaF9wY29uX2luX2ZvcmspCi0gICAgcmV0dXJuIGZhbHNlOwotICBpZiAocGNvbl9h dHRhY2hlZF90byA+PSAwICYmCi0gICAgICBjeWd3aW5fc2hhcmVkLT50dHlbcGNvbl9hdHRhY2hl ZF90b10tPmF0dGFjaF9wY29uX2luX2ZvcmspCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIHBpZF9y ZXN0b3JlID0KLSAgICBmaGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkIChH ZXRDdXJyZW50UHJvY2Vzc0lkICgpLAotCQkJCQkgICAgICBmYWxzZSk7Ci0gIC8qIElmIHBpZF9y ZXN0b3JlIGlzIG5vdCBzZXQsIGdpdmUgdXAuICovCi0gIGlmICghcGlkX3Jlc3RvcmUpCi0gICAg cmV0dXJuIGZhbHNlOwotCi0gIEZyZWVDb25zb2xlICgpOwotICBpZiAoIUF0dGFjaENvbnNvbGUg KGdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKSkpCi0gICAgewotICAgICAgc3lzdGVtX3ByaW50ZiAo InB0eSVkOiBBdHRhY2hDb25zb2xlKGhlbHBlcj0lZCkgZmFpbGVkLiAweCUwOGx4IiwKLQkJICAg ICBnZXRfbWlub3IgKCksIGdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKSwgR2V0TGFzdEVycm9yICgp KTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIHJldHVybiB0cnVlOwotfQotCiB2b2lk Ci1maGFuZGxlcl9wdHlfc2xhdmU6OnJlc3RvcmVfcmVhdHRhY2hfcGNvbiAodm9pZCkKK2ZoYW5k bGVyX3B0eV9zbGF2ZTo6c2V0X3N3aXRjaF90b19wY29uICh2b2lkKQogewotICBpZiAocGlkX3Jl c3RvcmUpCisgIGlmICghZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX2luKQogICAgIHsKLSAg ICAgIEZyZWVDb25zb2xlICgpOwotICAgICAgaWYgKCFBdHRhY2hDb25zb2xlIChwaWRfcmVzdG9y ZSkpCi0JewotCSAgc3lzdGVtX3ByaW50ZiAoInB0eSVkOiBBdHRhY2hDb25zb2xlKHJlc3RvcmU9 JWQpIGZhaWxlZC4gMHglMDhseCIsCi0JCQkgZ2V0X21pbm9yICgpLCBwaWRfcmVzdG9yZSwgR2V0 TGFzdEVycm9yICgpKTsKLQkgIHBjb25fYXR0YWNoZWRfdG8gPSAtMTsKLQl9Ci0gICAgfQotICBw aWRfcmVzdG9yZSA9IDA7Ci19Ci0KLS8qIFRoaXMgZnVuY3Rpb24gcmVxdWVzdHMgdHJhbnNmZXJp bmcgdGhlIGlucHV0IGRhdGEgZnJvbSB0aGUgaW5wdXQKLSAgIHBpcGUgZm9yIGN5Z3dpbiBhcHBz IHRvIHRoZSBvdGhlciBpbnB1dCBwaXBlIGZvciBuYXRpdmUgYXBwcy4gKi8KLXZvaWQKLWZoYW5k bGVyX3B0eV9zbGF2ZTo6cHVsbF9wY29uX2lucHV0ICh2b2lkKQotewotICBnZXRfdHR5cCAoKS0+ cmVxX3RyYW5zZmVyX2lucHV0X3RvX3Bjb24gPSB0cnVlOwotICB3aGlsZSAoZ2V0X3R0eXAgKCkt PnJlcV90cmFuc2Zlcl9pbnB1dF90b19wY29uKQotICAgIFNsZWVwICgxKTsKLX0KLQotdm9pZAot ZmhhbmRsZXJfcHR5X3NsYXZlOjp1cGRhdGVfcGNvbl9pbnB1dF9zdGF0ZSAoYm9vbCBuZWVkX2xv Y2spCi17Ci0gIGlmIChuZWVkX2xvY2spCi0gICAgV2FpdEZvclNpbmdsZU9iamVjdCAoaW5wdXRf bXV0ZXgsIElORklOSVRFKTsKLSAgLyogRmx1c2ggaW5wdXQgYnVmZmVyIGlmIGl0IGlzIHJlcXVl c3RlZCBieSBtYXN0ZXIuCi0gICAgIFRoaXMgaGFwcGVucyBpZiBeQyBpcyBwcmVzc2VkIGluIHBz ZXVkbyBjb25zb2xlIHNpZGUuICovCi0gIGlmIChnZXRfdHR5cCAoKS0+cmVxX2ZsdXNoX3Bjb25f aW5wdXQpCi0gICAgewotICAgICAgRmx1c2hDb25zb2xlSW5wdXRCdWZmZXIgKGdldF9oYW5kbGUg KCkpOwotICAgICAgZ2V0X3R0eXAgKCktPnJlcV9mbHVzaF9wY29uX2lucHV0ID0gZmFsc2U7Ci0g ICAgfQotICAvKiBQZWVrIGNvbnNvbGUgaW5wdXQgYnVmZmVyIGFuZCB1cGRhdGUgc3RhdGUuICov Ci0gIElOUFVUX1JFQ09SRCBpbnBbSU5SRUNfU0laRV07Ci0gIERXT1JEIG47Ci0gIEJPT0wgKFdJ TkFQSSAqUGVla0Z1bmMpCi0gICAgKEhBTkRMRSwgUElOUFVUX1JFQ09SRCwgRFdPUkQsIExQRFdP UkQpOwotICBQZWVrRnVuYyA9Ci0gICAgUGVla0NvbnNvbGVJbnB1dEFfT3JpZyA/IDogUGVla0Nv bnNvbGVJbnB1dDsKLSAgUGVla0Z1bmMgKGdldF9oYW5kbGUgKCksIGlucCwgSU5SRUNfU0laRSwg Jm4pOwotICBib29sIHNhd19hY2NlcHQgPSBmYWxzZTsKLSAgYm9vbCBwaXBlX2VtcHR5ID0gdHJ1 ZTsKLSAgd2hpbGUgKG4tLSA+IDApCi0gICAgaWYgKGlucFtuXS5FdmVudFR5cGUgPT0gS0VZX0VW RU5UICYmIGlucFtuXS5FdmVudC5LZXlFdmVudC5iS2V5RG93biAmJgotCWlucFtuXS5FdmVudC5L ZXlFdmVudC51Q2hhci5Bc2NpaUNoYXIpCi0gICAgICB7Ci0JcGlwZV9lbXB0eSA9IGZhbHNlOwot CWNoYXIgYyA9IGlucFtuXS5FdmVudC5LZXlFdmVudC51Q2hhci5Bc2NpaUNoYXI7Ci0JY29uc3Qg Y2hhciBzaWdzW10gPSB7Ci0JICAoY2hhcikgZ2V0X3R0eXAgKCktPnRpLmNfY2NbVklOVFJdLAot CSAgKGNoYXIpIGdldF90dHlwICgpLT50aS5jX2NjW1ZRVUlUXSwKLQkgIChjaGFyKSBnZXRfdHR5 cCAoKS0+dGkuY19jY1tWU1VTUF0sCi0JfTsKLQljb25zdCBjaGFyIGVvbHNbXSA9IHsKLQkgIChj aGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9GXSwKLQkgIChjaGFyKSBnZXRfdHR5cCAoKS0+ dGkuY19jY1tWRU9MXSwKLQkgIChjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9MMl0sCi0J ICAnXG4nLAotCSAgJ1xyJwotCX07Ci0JaWYgKGlzX2xpbmVfaW5wdXQgKCkgJiYgYyAmJiBtZW1j aHIgKGVvbHMsIGMsIHNpemVvZiAoZW9scykpKQotCSAgc2F3X2FjY2VwdCA9IHRydWU7Ci0JaWYg KChnZXRfdHR5cCAoKS0+dGkuY19sZmxhZyAmIElTSUcpCi0JICAgICYmIGMgJiYgbWVtY2hyIChz aWdzLCBjLCBzaXplb2YgKHNpZ3MpKSkKLQkgIHNhd19hY2NlcHQgPSB0cnVlOwotICAgICAgfQot ICBnZXRfdHR5cCAoKS0+cGNvbl9pbl9lbXB0eSA9IHBpcGVfZW1wdHkgJiYgIShyYWxlbiAoKSA+ IHJhaXhnZXQgKCkpOwotICBpZiAoIWdldF9yZWFkYWhlYWRfdmFsaWQgKCkgJiYKLSAgICAgIChw aXBlX2VtcHR5IHx8IChpc19saW5lX2lucHV0ICgpICYmICFzYXdfYWNjZXB0KSkgJiYKLSAgICAg IGdldF90dHlwICgpLT5yZWFkX3JldHZhbCA9PSAxICYmIGJ5dGVzX2F2YWlsYWJsZSAobikgJiYg biA9PSAwKQotICAgIFJlc2V0RXZlbnQgKGlucHV0X2F2YWlsYWJsZV9ldmVudCk7Ci0gIGlmIChu ZWVkX2xvY2spCi0gICAgUmVsZWFzZU11dGV4IChpbnB1dF9tdXRleCk7Ci19Ci0KLWludAotZmhh bmRsZXJfcHR5X3NsYXZlOjplYXRfcmVhZGFoZWFkIChpbnQgbikKLXsKLSAgaW50IG9yYWxlbiA9 IHJhbGVuICgpOwotICBpZiAobiA8IDApCi0gICAgbiA9IHJhbGVuICgpIC0gcmFpeGdldCAoKTsK LSAgaWYgKG4gPiAwICYmIHJhbGVuICgpID4gcmFpeGdldCAoKSkKLSAgICB7Ci0gICAgICBjb25z dCBjaGFyIGVvbHNbXSA9IHsKLQkoY2hhcikgZ2V0X3R0eXAgKCktPnRpLmNfY2NbVkVPRl0sCi0J KGNoYXIpIGdldF90dHlwICgpLT50aS5jX2NjW1ZFT0xdLAotCShjaGFyKSBnZXRfdHR5cCAoKS0+ dGkuY19jY1tWRU9MMl0sCi0JJ1xuJwotICAgICAgfTsKLSAgICAgIHdoaWxlIChuID4gMCAmJiBy YWxlbiAoKSA+IHJhaXhnZXQgKCkpCi0JewotCSAgaWYgKGlzX2xpbmVfaW5wdXQgKCkgJiYgcmFi dWYgKClbcmFsZW4gKCktMV0KLQkgICAgICAmJiBtZW1jaHIgKGVvbHMsIHJhYnVmICgpW3JhbGVu ICgpLTFdLCBzaXplb2YgKGVvbHMpKSkKLQkgICAgYnJlYWs7Ci0JICAtLSBuOwotCSAgLS0gcmFs ZW4gKCk7Ci0JfQotCi0gICAgICAvKiBJZiBJVVRGOCBpcyBzZXQsIHRoZSB0ZXJtaW5hbCBpcyBp biBVVEYtOCBtb2RlLiAgSWYgc28sIHdlIGVyYXNlCi0JIGEgY29tcGxldGUgVVRGLTggbXVsdGli eXRlIHNlcXVlbmNlIG9uIFZFUkFTRS9WV0VSQVNFLiAgT3RoZXJ3aXNlLAotCSBpZiB3ZSBvbmx5 IGVyYXNlIGEgc2luZ2xlIGJ5dGUsIGludmFsaWQgdW5pY29kZSBjaGFycyBhcmUgbGVmdCBpbgot CSB0aGUgaW5wdXQuICovCi0gICAgICBpZiAoZ2V0X3R0eXAgKCktPnRpLmNfaWZsYWcgJiBJVVRG OCkKLQl3aGlsZSAocmFsZW4gKCkgPiByYWl4Z2V0ICgpICYmCi0JICAgICAgICgodW5zaWduZWQg Y2hhcikgcmFidWYgKClbcmFsZW4gKCldICYgMHhjMCkgPT0gMHg4MCkKLQkgIC0tcmFsZW4gKCk7 Ci0gICAgfQotICBvcmFsZW4gPSBvcmFsZW4gLSByYWxlbiAoKTsKLSAgaWYgKHJhaXhnZXQgKCkg Pj0gcmFsZW4gKCkpCi0gICAgcmFpeGdldCAoKSA9IHJhaXhwdXQgKCkgPSByYWxlbiAoKSA9IDA7 Ci0gIGVsc2UgaWYgKHJhaXhwdXQgKCkgPiByYWxlbiAoKSkKLSAgICByYWl4cHV0ICgpID0gcmFs ZW4gKCk7Ci0KLSAgcmV0dXJuIG9yYWxlbjsKLX0KLQotaW50Ci1maGFuZGxlcl9wdHlfc2xhdmU6 OmdldF9yZWFkYWhlYWRfaW50b19idWZmZXIgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKLXsK LSAgaW50IGNoOwotICBpbnQgY29waWVkX2NoYXJzID0gMDsKLQotICB3aGlsZSAoYnVmbGVuKQot ICAgIGlmICgoY2ggPSBnZXRfcmVhZGFoZWFkICgpKSA8IDApCi0gICAgICBicmVhazsKLSAgICBl bHNlCi0gICAgICB7Ci0JY29uc3QgY2hhciBlb2xzW10gPSB7Ci0JICAoY2hhcikgZ2V0X3R0eXAg KCktPnRpLmNfY2NbVkVPRl0sCi0JICAoY2hhcikgZ2V0X3R0eXAgKCktPnRpLmNfY2NbVkVPTF0s Ci0JICAoY2hhcikgZ2V0X3R0eXAgKCktPnRpLmNfY2NbVkVPTDJdLAotCSAgJ1xuJwotCX07Ci0J YnVmW2NvcGllZF9jaGFycysrXSA9ICh1bnNpZ25lZCBjaGFyKShjaCAmIDB4ZmYpOwotCWJ1Zmxl bi0tOwotCWlmIChpc19saW5lX2lucHV0ICgpICYmIGNoICYmIG1lbWNociAoZW9scywgY2ggJiAw eGZmLCBzaXplb2YgKGVvbHMpKSkKLQkgIGJyZWFrOwotICAgICAgfQotCi0gIHJldHVybiBjb3Bp ZWRfY2hhcnM7Ci19Ci0KLWJvb2wKLWZoYW5kbGVyX3B0eV9zbGF2ZTo6Z2V0X3JlYWRhaGVhZF92 YWxpZCAodm9pZCkKLXsKLSAgaWYgKGlzX2xpbmVfaW5wdXQgKCkpCi0gICAgewotICAgICAgY29u c3QgY2hhciBlb2xzW10gPSB7Ci0JKGNoYXIpIGdldF90dHlwICgpLT50aS5jX2NjW1ZFT0ZdLAot CShjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9MXSwKLQkoY2hhcikgZ2V0X3R0eXAgKCkt PnRpLmNfY2NbVkVPTDJdLAotCSdcbicKLSAgICAgIH07Ci0gICAgICBmb3IgKHNpemVfdCBpPXJh aXhnZXQgKCk7IGk8cmFsZW4gKCk7IGkrKykKLQlpZiAocmFidWYgKClbaV0gJiYgbWVtY2hyIChl b2xzLCByYWJ1ZiAoKVtpXSwgc2l6ZW9mIChlb2xzKSkpCi0JICByZXR1cm4gdHJ1ZTsKLSAgICAg IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIGVsc2UKLSAgICByZXR1cm4gcmFsZW4gKCkgPiByYWl4 Z2V0ICgpOwotfQotCi12b2lkCi1maGFuZGxlcl9wdHlfc2xhdmU6OnNldF9zd2l0Y2hfdG9fcGNv biAoaW50IGZkX3NldCkKLXsKLSAgaWYgKGZkIDwgMCkKLSAgICBmZCA9IGZkX3NldDsKLSAgYWNx dWlyZV9vdXRwdXRfbXV0ZXggKElORklOSVRFKTsKLSAgaWYgKGZkID09IDAgJiYgIWdldF90dHlw ICgpLT5zd2l0Y2hfdG9fcGNvbl9pbikKLSAgICB7Ci0gICAgICBwdWxsX3Bjb25faW5wdXQgKCk7 Ci0gICAgICBpZiAoZ2V0X3R0eXAgKCktPnBjb25fcGlkID09IDAgfHwKLQkgICFwaW5mbyAoZ2V0 X3R0eXAgKCktPnBjb25fcGlkKSkKKyAgICAgIGlzSHlicmlkID0gdHJ1ZTsKKyAgICAgIGlmIChn ZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gMCB8fCAhcGluZm8gKGdldF90dHlwICgpLT5wY29uX3Bp ZCkpCiAJZ2V0X3R0eXAgKCktPnBjb25fcGlkID0gbXlzZWxmLT5waWQ7CiAgICAgICBnZXRfdHR5 cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4gPSB0cnVlOwotICAgICAgaWYgKGlzSHlicmlkICYmICFn ZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25fb3V0KQotCXsKLQkgIGdldF90dHlwICgpLT53YWl0 X3Bjb25fZndkICgpOwotCSAgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX291dCA9IHRydWU7 Ci0JfQogICAgIH0KLSAgZWxzZSBpZiAoKGZkID09IDEgfHwgZmQgPT0gMikgJiYgIWdldF90dHlw ICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQpCi0gICAgewotICAgICAgZ2V0X3R0eXAgKCktPndhaXRf cGNvbl9md2QgKCk7Ci0gICAgICBpZiAoZ2V0X3R0eXAgKCktPnBjb25fcGlkID09IDAgfHwKLQkg ICFwaW5mbyAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKSkKLQlnZXRfdHR5cCAoKS0+cGNvbl9waWQg PSBteXNlbGYtPnBpZDsKLSAgICAgIGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQgPSB0 cnVlOwotICAgICAgaWYgKGlzSHlicmlkKQotCWdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9p biA9IHRydWU7Ci0gICAgfQotICByZWxlYXNlX291dHB1dF9tdXRleCAoKTsKIH0KIAogdm9pZAog ZmhhbmRsZXJfcHR5X3NsYXZlOjpyZXNldF9zd2l0Y2hfdG9fcGNvbiAodm9pZCkKIHsKLSAgaWYg KGdldF90dHlwICgpLT5wY29uX3BpZCAmJgotICAgICAgZ2V0X3R0eXAgKCktPnBjb25fcGlkICE9 IG15c2VsZi0+cGlkICYmCi0gICAgICAhIXBpbmZvIChnZXRfdHR5cCAoKS0+cGNvbl9waWQpKQor ICBpZiAoZ2V0X3R0eXAgKCktPnBjb25fcGlkICYmIGdldF90dHlwICgpLT5wY29uX3BpZCAhPSBt eXNlbGYtPnBpZAorICAgICAgJiYgISFwaW5mbyAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKSkKICAg ICAvKiBUaGVyZSBpcyBhIHByb2Nlc3Mgd2hpY2ggaXMgZ3JhYmJpbmcgcHNldWRvIGNvbnNvbGUu ICovCiAgICAgcmV0dXJuOwogICBpZiAoaXNIeWJyaWQpCiAgICAgcmV0dXJuOwotICBpZiAoZG9f bm90X3Jlc2V0X3N3aXRjaF90b19wY29uKQotICAgIHJldHVybjsKLSAgYWNxdWlyZV9vdXRwdXRf bXV0ZXggKElORklOSVRFKTsKLSAgaWYgKGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQp Ci0gICAgLyogV2FpdCBmb3IgcHR5X21hc3Rlcl9md2RfdGhyZWFkKCkgKi8KLSAgICBnZXRfdHR5 cCAoKS0+d2FpdF9wY29uX2Z3ZCAoKTsKICAgZ2V0X3R0eXAgKCktPnBjb25fcGlkID0gMDsKICAg Z2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX2luID0gZmFsc2U7Ci0gIGdldF90dHlwICgpLT5z d2l0Y2hfdG9fcGNvbl9vdXQgPSBmYWxzZTsKLSAgcmVsZWFzZV9vdXRwdXRfbXV0ZXggKCk7Ci0g IGluaXRfY29uc29sZV9oYW5kbGVyICh0cnVlKTsKLX0KLQotdm9pZAotZmhhbmRsZXJfcHR5X3Ns YXZlOjpwdXNoX3RvX3Bjb25fc2NyZWVuYnVmZmVyIChjb25zdCBjaGFyICpwdHIsIHNpemVfdCBs ZW4sCi0JCQkJCSAgICAgICBib29sIGlzX2VjaG8pCi17Ci0gIGJvb2wgYXR0YWNoZWQgPQotICAg ICEhZmhhbmRsZXJfY29uc29sZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZCAoZ2V0X2hlbHBlcl9w cm9jZXNzX2lkICgpLCB0cnVlKTsKLSAgaWYgKCFhdHRhY2hlZCAmJiBwY29uX2F0dGFjaGVkX3Rv ID09IGdldF9taW5vciAoKSkKLSAgICB7Ci0gICAgICBmb3IgKERXT1JEIHQwID0gR2V0VGlja0Nv dW50ICgpOyBHZXRUaWNrQ291bnQgKCkgLSB0MCA8IDEwMDsgKQotCXsKLQkgIFNsZWVwICgxKTsK LQkgIGF0dGFjaGVkID0gZmhhbmRsZXJfY29uc29sZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZAot CQkJCSAgICAgIChnZXRfaGVscGVyX3Byb2Nlc3NfaWQgKCksIHRydWUpOwotCSAgaWYgKGF0dGFj aGVkKQotCSAgICBicmVhazsKLQl9Ci0gICAgICBpZiAoIWF0dGFjaGVkKQotCXsKLQkgIHN5c3Rl bV9wcmludGYgKCJwdHklZDogcGNvbl9hdHRhY2hfdG8gbWlzbWF0Y2g/Pz8/Pz8iLCBnZXRfbWlu b3IgKCkpOwotCSAgcmV0dXJuOwotCX0KLSAgICB9Ci0KLSAgLyogSWYgbm90IGF0dGFjaGVkIHRv IHRoaXMgcHNldWRvIGNvbnNvbGUsIHRyeSB0byBhdHRhY2ggdGVtcG9yYXJpbHkuICovCi0gIHBp ZF9yZXN0b3JlID0gMDsKLSAgaWYgKHBjb25fYXR0YWNoZWRfdG8gIT0gZ2V0X21pbm9yICgpKQot ICAgIGlmICghdHJ5X3JlYXR0YWNoX3Bjb24gKCkpCi0gICAgICBnb3RvIGRldGFjaDsKLQotICBj aGFyICpidWY7Ci0gIHNpemVfdCBubGVuOwotICBEV09SRCBvcmlnQ1A7Ci0gIG9yaWdDUCA9IEdl dENvbnNvbGVPdXRwdXRDUCAoKTsKLSAgU2V0Q29uc29sZU91dHB1dENQIChnZXRfdHR5cCAoKS0+ dGVybV9jb2RlX3BhZ2UpOwotICAvKiBKdXN0IGNvcHkgKi8KLSAgYnVmID0gKGNoYXIgKikgSGVh cEFsbG9jIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgbGVuKTsKLSAgbWVtY3B5IChidWYsIChjaGFy ICopcHRyLCBsZW4pOwotICBubGVuID0gbGVuOwotICBjaGFyICpwMCwgKnAxOwotICBwMCA9IHAx ID0gYnVmOwotICAvKiBSZW1vdmUgYWx0ZXJuYXRlIHNjcmVlbiBidWZmZXIgZHJhd2luZyAqLwot ICB3aGlsZSAocDAgJiYgcDEpCi0gICAgewotICAgICAgaWYgKCFnZXRfdHR5cCAoKS0+c2NyZWVu X2FsdGVybmF0ZWQpCi0JewotCSAgLyogQ2hlY2sgc3dpdGNoaW5nIHRvIGFsdGVybmF0ZSBzY3Jl ZW4gYnVmZmVyICovCi0JICBwMCA9IChjaGFyICopIG1lbW1lbSAocDEsIG5sZW4gLSAocDEtYnVm KSwgIlwwMzNbPzEwNDloIiwgOCk7Ci0JICBpZiAocDApCi0JICAgIHsKLQkgICAgICAvL3AwICs9 IDg7Ci0JICAgICAgZ2V0X3R0eXAgKCktPnNjcmVlbl9hbHRlcm5hdGVkID0gdHJ1ZTsKLQkgICAg ICBpZiAoZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX291dCkKLQkJZG9fbm90X3Jlc2V0X3N3 aXRjaF90b19wY29uID0gdHJ1ZTsKLQkgICAgfQotCX0KLSAgICAgIGlmIChnZXRfdHR5cCAoKS0+ c2NyZWVuX2FsdGVybmF0ZWQpCi0JewotCSAgLyogQ2hlY2sgc3dpdGNoaW5nIHRvIG1haW4gc2Ny ZWVuIGJ1ZmZlciAqLwotCSAgcDEgPSAoY2hhciAqKSBtZW1tZW0gKHAwLCBubGVuIC0gKHAwLWJ1 ZiksICJcMDMzWz8xMDQ5bCIsIDgpOwotCSAgaWYgKHAxKQotCSAgICB7Ci0JICAgICAgcDEgKz0g ODsKLQkgICAgICBnZXRfdHR5cCAoKS0+c2NyZWVuX2FsdGVybmF0ZWQgPSBmYWxzZTsKLQkgICAg ICBkb19ub3RfcmVzZXRfc3dpdGNoX3RvX3Bjb24gPSBmYWxzZTsKLQkgICAgICBtZW1tb3ZlIChw MCwgcDEsIGJ1ZitubGVuIC0gcDEpOwotCSAgICAgIG5sZW4gLT0gcDEgLSBwMDsKLQkgICAgfQot CSAgZWxzZQotCSAgICBubGVuID0gcDAgLSBidWY7Ci0JfQotICAgIH0KLSAgaWYgKCFubGVuKSAv KiBOb3RoaW5nIHRvIGJlIHN5bmNocm9uaXplZCAqLwotICAgIGdvdG8gY2xlYW51cDsKLSAgaWYg KGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQgJiYgIWlzX2VjaG8pCi0gICAgZ290byBj bGVhbnVwOwotICAvKiBSZW1vdmUgRVNDIHNlcXVlbmNlIHdoaWNoIHJldHVybnMgcmVzdWx0cyB0 byBjb25zb2xlCi0gICAgIGlucHV0IGJ1ZmZlci4gV2l0aG91dCB0aGlzLCBjdXJzb3IgcG9zaXRp b24gcmVwb3J0Ci0gICAgIGlzIHB1dCBpbnRvIHRoZSBpbnB1dCBidWZmZXIgYXMgYSBnYXJiYWdl LiAqLwotICAvKiBSZW1vdmUgRVNDIHNlcXVlbmNlIHRvIHJlcG9ydCBjdXJzb3IgcG9zaXRpb24u ICovCi0gIHdoaWxlICgocDAgPSAoY2hhciAqKSBtZW1tZW0gKGJ1ZiwgbmxlbiwgIlwwMzNbNm4i LCA0KSkpCi0gICAgewotICAgICAgbWVtbW92ZSAocDAsIHAwKzQsIG5sZW4gLSAocDArNCAtIGJ1 ZikpOwotICAgICAgbmxlbiAtPSA0OwotICAgIH0KLSAgLyogUmVtb3ZlIEVTQyBzZXF1ZW5jZSB0 byByZXBvcnQgdGVybWluYWwgaWRlbnRpdHkuICovCi0gIHdoaWxlICgocDAgPSAoY2hhciAqKSBt ZW1tZW0gKGJ1ZiwgbmxlbiwgIlwwMzNbMGMiLCA0KSkpCi0gICAgewotICAgICAgbWVtbW92ZSAo cDAsIHAwKzQsIG5sZW4gLSAocDArNCAtIGJ1ZikpOwotICAgICAgbmxlbiAtPSA0OwotICAgIH0K LQotICAvKiBJZiB0aGUgRVNDIHNlcXVlbmNlIEVTQ1s/M2ggb3IgRVNDWz8zbCB3aGljaCBjbGVh cnMgY29uc29sZSBzY3JlZW4KLSAgICAgYnVmZmVyIGlzIHB1c2hlZCwgc2V0IG5lZWRfcmVkcmF3 X3NjcmVlbiB0byB0cmlnZ2VyIHJlZHJhdyBzY3JlZW4uICovCi0gIHAwID0gYnVmOwotICB3aGls ZSAoKHAwID0gKGNoYXIgKikgbWVtbWVtIChwMCwgbmxlbiAtIChwMCAtIGJ1ZiksICJcMDMzWz8i LCAzKSkpCi0gICAgewotICAgICAgcDAgKz0gMzsKLSAgICAgIGJvb2wgZXhpc3RfYXJnXzMgPSBm YWxzZTsKLSAgICAgIHdoaWxlIChwMCA8IGJ1ZiArIG5sZW4gJiYgKGlzZGlnaXQgKCpwMCkgfHwg KnAwID09ICc7JykpCi0JewotCSAgaW50IGFyZyA9IDA7Ci0JICB3aGlsZSAocDAgPCBidWYgKyBu bGVuICYmIGlzZGlnaXQgKCpwMCkpCi0JICAgIGFyZyA9IGFyZyAqIDEwICsgKCpwMCArKykgLSAn MCc7Ci0JICBpZiAoYXJnID09IDMpCi0JICAgIGV4aXN0X2FyZ18zID0gdHJ1ZTsKLQkgIGlmIChw MCA8IGJ1ZiArIG5sZW4gJiYgKnAwID09ICc7JykKLQkgICAgcDAgKys7Ci0JfQotICAgICAgaWYg KHAwIDwgYnVmICsgbmxlbiAmJiBleGlzdF9hcmdfMyAmJiAoKnAwID09ICdoJyB8fCAqcDAgPT0g J2wnKSkKLQlnZXRfdHR5cCAoKS0+bmVlZF9yZWRyYXdfc2NyZWVuID0gdHJ1ZTsKLSAgICAgIHAw ICsrOwotICAgICAgaWYgKHAwID49IGJ1ZiArIG5sZW4pCi0JYnJlYWs7Ci0gICAgfQotCi0gIGlu dCByZXRyeV9jb3VudDsKLSAgcmV0cnlfY291bnQgPSAwOwotICBEV09SRCBkd01vZGUsIGZsYWdz OwotICBmbGFncyA9IEVOQUJMRV9WSVJUVUFMX1RFUk1JTkFMX1BST0NFU1NJTkc7Ci0gIHdoaWxl ICghR2V0Q29uc29sZU1vZGUgKGdldF9vdXRwdXRfaGFuZGxlICgpLCAmZHdNb2RlKSkKLSAgICB7 Ci0gICAgICB0ZXJtaW9zX3ByaW50ZiAoIkdldENvbnNvbGVNb2RlIGZhaWxlZCwgJUUiKTsKLSAg ICAgIGludCBlcnJub19zYXZlID0gZXJybm87Ci0gICAgICAvKiBSZS1vcGVuIGhhbmRsZXMgKi8K LSAgICAgIHRoaXMtPm9wZW4gKDAsIDApOwotICAgICAgLyogRml4IHBzZXVkbyBjb25zb2xlIHdp bmRvdyBzaXplICovCi0gICAgICB0aGlzLT5pb2N0bCAoVElPQ1NXSU5TWiwgJmdldF90dHlwICgp LT53aW5zaXplKTsKLSAgICAgIGlmIChlcnJubyAhPSBlcnJub19zYXZlKQotCXNldF9lcnJubyAo ZXJybm9fc2F2ZSk7Ci0gICAgICBpZiAoKytyZXRyeV9jb3VudCA+IDMpCi0JZ290byBjbGVhbnVw OwotICAgIH0KLSAgaWYgKCEoZ2V0X3R0eXAgKCktPnRpLmNfb2ZsYWcgJiBPUE9TVCkgfHwKLSAg ICAgICEoZ2V0X3R0eXAgKCktPnRpLmNfb2ZsYWcgJiBPTkxDUikpCi0gICAgZmxhZ3MgfD0gRElT QUJMRV9ORVdMSU5FX0FVVE9fUkVUVVJOOwotICBTZXRDb25zb2xlTW9kZSAoZ2V0X291dHB1dF9o YW5kbGUgKCksIGR3TW9kZSB8IGZsYWdzKTsKLSAgY2hhciAqcDsKLSAgcCA9IGJ1ZjsKLSAgRFdP UkQgd0xlbiwgd3JpdHRlbjsKLSAgd3JpdHRlbiA9IDA7Ci0gIEJPT0wgKFdJTkFQSSAqV3JpdGVG dW5jKQotICAgIChIQU5ETEUsIExQQ1ZPSUQsIERXT1JELCBMUERXT1JELCBMUE9WRVJMQVBQRUQp OwotICBXcml0ZUZ1bmMgPSBXcml0ZUZpbGVfT3JpZyA/IFdyaXRlRmlsZV9PcmlnIDogV3JpdGVG aWxlOwotICB3aGlsZSAod3JpdHRlbiA8ICBubGVuKQotICAgIHsKLSAgICAgIGlmICghV3JpdGVG dW5jIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgcCwgbmxlbiAtIHdyaXR0ZW4sICZ3TGVuLCBOVUxM KSkKLQl7Ci0JICB0ZXJtaW9zX3ByaW50ZiAoIldyaXRlRmlsZSBmYWlsZWQsICVFIik7Ci0JICBi cmVhazsKLQl9Ci0gICAgICBlbHNlCi0JewotCSAgd3JpdHRlbiArPSB3TGVuOwotCSAgcCArPSB3 TGVuOwotCX0KLSAgICB9Ci0gIC8qIERldGFjaCBmcm9tIHBzZXVkbyBjb25zb2xlIGFuZCByZXN1 bWUuICovCi0gIGZsYWdzID0gRU5BQkxFX1ZJUlRVQUxfVEVSTUlOQUxfUFJPQ0VTU0lORzsKLSAg U2V0Q29uc29sZU1vZGUgKGdldF9vdXRwdXRfaGFuZGxlICgpLCBkd01vZGUgfCBmbGFncyk7Ci1j bGVhbnVwOgotICBTZXRDb25zb2xlT3V0cHV0Q1AgKG9yaWdDUCk7Ci0gIEhlYXBGcmVlIChHZXRQ cm9jZXNzSGVhcCAoKSwgMCwgYnVmKTsKLWRldGFjaDoKLSAgcmVzdG9yZV9yZWF0dGFjaF9wY29u ICgpOworICBnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSA9IE5VTEw7CisgIGdldF90dHlw ICgpLT5wY29uX3N0YXJ0ID0gZmFsc2U7CiB9CiAKIHNzaXplX3QgX19zdGRjYWxsCkBAIC0xNTA1 LDQ0ICs3NzYsNyBAQCBmaGFuZGxlcl9wdHlfc2xhdmU6OndyaXRlIChjb25zdCB2b2lkICpwdHIs IHNpemVfdCBsZW4pCiAgIHJlc2V0X3N3aXRjaF90b19wY29uICgpOwogCiAgIGFjcXVpcmVfb3V0 cHV0X211dGV4IChJTkZJTklURSk7Ci0gIGJvb2wgb3V0cHV0X3RvX3Bjb24gPSBnZXRfdHR5cCAo KS0+c3dpdGNoX3RvX3Bjb25fb3V0OwotICByZWxlYXNlX291dHB1dF9tdXRleCAoKTsKLQotICBV SU5UIHRhcmdldF9jb2RlX3BhZ2UgPSBvdXRwdXRfdG9fcGNvbiA/Ci0gICAgR2V0Q29uc29sZU91 dHB1dENQICgpIDogZ2V0X3R0eXAgKCktPnRlcm1fY29kZV9wYWdlOwotICBzc2l6ZV90IG5sZW47 Ci0gIGNoYXIgKmJ1ZiA9IGNvbnZlcnRfbWJfc3RyICh0YXJnZXRfY29kZV9wYWdlLCAoc2l6ZV90 ICopICZubGVuLAotCQkgZ2V0X3R0eXAgKCktPnRlcm1fY29kZV9wYWdlLCAoY29uc3QgY2hhciAq KSBwdHIsIGxlbik7Ci0KLSAgLyogSWYgbm90IGF0dGFjaGVkIHRvIHRoaXMgcHNldWRvIGNvbnNv bGUsIHRyeSB0byBhdHRhY2ggdGVtcG9yYXJpbHkuICovCi0gIHBpZF9yZXN0b3JlID0gMDsKLSAg Ym9vbCBmYWxsYmFjayA9IGZhbHNlOwotICBpZiAob3V0cHV0X3RvX3Bjb24gJiYgcGNvbl9hdHRh Y2hlZF90byAhPSBnZXRfbWlub3IgKCkpCi0gICAgaWYgKCF0cnlfcmVhdHRhY2hfcGNvbiAoKSkK LSAgICAgIGZhbGxiYWNrID0gdHJ1ZTsKLQotICBpZiAob3V0cHV0X3RvX3Bjb24gJiYgIWZhbGxi YWNrICYmCi0gICAgICAobWVtbWVtIChidWYsIG5sZW4sICJcMDMzWzZuIiwgNCkgfHwgbWVtbWVt IChidWYsIG5sZW4sICJcMDMzWzBjIiwgNCkpKQotICAgIHsKLSAgICAgIGdldF90dHlwICgpLT5w Y29uX2luX2VtcHR5ID0gZmFsc2U7Ci0gICAgICBpZiAoIWlzX2xpbmVfaW5wdXQgKCkpCi0JU2V0 RXZlbnQgKGlucHV0X2F2YWlsYWJsZV9ldmVudCk7Ci0gICAgfQotCi0gIERXT1JEIGR3TW9kZSwg ZmxhZ3M7Ci0gIGZsYWdzID0gRU5BQkxFX1ZJUlRVQUxfVEVSTUlOQUxfUFJPQ0VTU0lORzsKLSAg aWYgKCEoZ2V0X3R0eXAgKCktPnRpLmNfb2ZsYWcgJiBPUE9TVCkgfHwKLSAgICAgICEoZ2V0X3R0 eXAgKCktPnRpLmNfb2ZsYWcgJiBPTkxDUikpCi0gICAgZmxhZ3MgfD0gRElTQUJMRV9ORVdMSU5F X0FVVE9fUkVUVVJOOwotICBpZiAob3V0cHV0X3RvX3Bjb24gJiYgIWZhbGxiYWNrKQotICAgIHsK LSAgICAgIEdldENvbnNvbGVNb2RlIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgJmR3TW9kZSk7Ci0g ICAgICBTZXRDb25zb2xlTW9kZSAoZ2V0X291dHB1dF9oYW5kbGUgKCksIGR3TW9kZSB8IGZsYWdz KTsKLSAgICB9Ci0gIEhBTkRMRSB0byA9IChvdXRwdXRfdG9fcGNvbiAmJiAhZmFsbGJhY2spID8K LSAgICBnZXRfb3V0cHV0X2hhbmRsZSAoKSA6IGdldF9vdXRwdXRfaGFuZGxlX2N5ZyAoKTsKLSAg YWNxdWlyZV9vdXRwdXRfbXV0ZXggKElORklOSVRFKTsKLSAgaWYgKCFwcm9jZXNzX29wb3N0X291 dHB1dCAodG8sIGJ1ZiwgbmxlbiwgZmFsc2UpKQorICBpZiAoIXByb2Nlc3Nfb3Bvc3Rfb3V0cHV0 IChnZXRfb3V0cHV0X2hhbmRsZV9jeWcgKCksIHB0ciwgdG93cml0ZSwgZmFsc2UpKQogICAgIHsK ICAgICAgIERXT1JEIGVyciA9IEdldExhc3RFcnJvciAoKTsKICAgICAgIHRlcm1pb3NfcHJpbnRm ICgiV3JpdGVGaWxlIGZhaWxlZCwgJUUiKTsKQEAgLTE1NTcsMjAgKzc5MSw2IEBAIGZoYW5kbGVy X3B0eV9zbGF2ZTo6d3JpdGUgKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IGxlbikKICAgICAgIHRv d3JpdGUgPSAtMTsKICAgICB9CiAgIHJlbGVhc2Vfb3V0cHV0X211dGV4ICgpOwotICBtYl9zdHJf ZnJlZSAoYnVmKTsKLSAgZmxhZ3MgPSBFTkFCTEVfVklSVFVBTF9URVJNSU5BTF9QUk9DRVNTSU5H OwotICBpZiAob3V0cHV0X3RvX3Bjb24gJiYgIWZhbGxiYWNrKQotICAgIFNldENvbnNvbGVNb2Rl IChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgZHdNb2RlIHwgZmxhZ3MpOwotCi0gIHJlc3RvcmVfcmVh dHRhY2hfcGNvbiAoKTsKLQotICAvKiBQdXNoIHNsYXZlIG91dHB1dCB0byBwc2V1ZG8gY29uc29s ZSBzY3JlZW4gYnVmZmVyICovCi0gIGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0gICAgewot ICAgICAgYWNxdWlyZV9vdXRwdXRfbXV0ZXggKElORklOSVRFKTsKLSAgICAgIHB1c2hfdG9fcGNv bl9zY3JlZW5idWZmZXIgKChjaGFyICopcHRyLCBsZW4sIGZhbHNlKTsKLSAgICAgIHJlbGVhc2Vf b3V0cHV0X211dGV4ICgpOwotICAgIH0KIAogICByZXR1cm4gdG93cml0ZTsKIH0KQEAgLTE1ODIs MTYgKzgwMiwxNSBAQCBmaGFuZGxlcl9wdHlfc2xhdmU6Om1hc2tfc3dpdGNoX3RvX3Bjb25faW4g KGJvb2wgbWFzaykKIH0KIAogYm9vbAotZmhhbmRsZXJfcHR5X2NvbW1vbjo6dG9fYmVfcmVhZF9m cm9tX3Bjb24gKHZvaWQpCitmaGFuZGxlcl9wdHlfbWFzdGVyOjp0b19iZV9yZWFkX2Zyb21fcGNv biAodm9pZCkKIHsKLSAgcmV0dXJuICFnZXRfdHR5cCAoKS0+cGNvbl9pbl9lbXB0eSB8fAotICAg IChnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4gJiYgIWdldF90dHlwICgpLT5tYXNrX3N3 aXRjaF90b19wY29uX2luKTsKKyAgcmV0dXJuIGdldF90dHlwICgpLT5wY29uX3N0YXJ0CisgICAg fHwgKGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9pbiAmJiAhZ2V0X3R0eXAgKCktPm1hc2tf c3dpdGNoX3RvX3Bjb25faW4pOwogfQogCiB2b2lkIF9fcmVnMwogZmhhbmRsZXJfcHR5X3NsYXZl OjpyZWFkICh2b2lkICpwdHIsIHNpemVfdCYgbGVuKQogewotICBjaGFyICpwdHIwID0gKGNoYXIg KilwdHI7CiAgIHNzaXplX3QgdG90YWxyZWFkID0gMDsKICAgaW50IHZtaW4gPSAwOwogICBpbnQg dnRpbWUgPSAwOwkvKiBJbml0aWFsaXplZCB0byBwcmV2ZW50IC1XdW5pbml0aWFsaXplZCB3YXJu aW5nICovCkBAIC0xNjE2LDggKzgzNSw2IEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6cmVhZCAodm9p ZCAqcHRyLCBzaXplX3QmIGxlbikKICAgICAgIG1hc2tfc3dpdGNoX3RvX3Bjb25faW4gKHRydWUp OwogICAgICAgcmVzZXRfc3dpdGNoX3RvX3Bjb24gKCk7CiAgICAgfQotICBpZiAodG9fYmVfcmVh ZF9mcm9tX3Bjb24gKCkpCi0gICAgdXBkYXRlX3Bjb25faW5wdXRfc3RhdGUgKHRydWUpOwogCiAg IGlmIChpc19ub25ibG9ja2luZyAoKSB8fCAhcHRyKSAvKiBJbmRpY2F0aW5nIHRjZmx1c2goKS4g Ki8KICAgICB0aW1lX3RvX3dhaXQgPSAwOwpAQCAtMTcwMyw5OCArOTIwLDIxIEBAIGZoYW5kbGVy X3B0eV9zbGF2ZTo6cmVhZCAodm9pZCAqcHRyLCBzaXplX3QmIGxlbikKIAkgICAgICBpZiAoIXRv dGFscmVhZCkKIAkJewogCQkgIHNldF9zaWdfZXJybm8gKEVBR0FJTik7Ci0JCSAgdG90YWxyZWFk ID0gLTE7Ci0JCX0KLQkgICAgICBnb3RvIG91dDsKLQkgICAgfQotCSAgY29udGludWU7Ci0JZGVm YXVsdDoKLQkgIHRlcm1pb3NfcHJpbnRmICgid2FpdCBmb3IgaW5wdXQgbXV0ZXggZmFpbGVkLCAl RSIpOwotCSAgaWYgKCF0b3RhbHJlYWQpCi0JICAgIHsKLQkgICAgICBfX3NldGVycm5vICgpOwot CSAgICAgIHRvdGFscmVhZCA9IC0xOwotCSAgICB9Ci0JICBnb3RvIG91dDsKLQl9Ci0gICAgICBp ZiAocHRyICYmIHRvX2JlX3JlYWRfZnJvbV9wY29uICgpKQotCXsKLQkgIGlmIChnZXRfcmVhZGFo ZWFkX3ZhbGlkICgpKQotCSAgICB7Ci0JICAgICAgUmVsZWFzZU11dGV4IChpbnB1dF9tdXRleCk7 Ci0JICAgICAgdG90YWxyZWFkID0gZ2V0X3JlYWRhaGVhZF9pbnRvX2J1ZmZlciAoKGNoYXIgKikg cHRyLCBsZW4pOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICBpZiAoIXRyeV9yZWF0 dGFjaF9wY29uICgpKQotCQl7Ci0JCSAgcmVzdG9yZV9yZWF0dGFjaF9wY29uICgpOwotCQkgIGdv dG8gZG9fcmVhZF9jeWc7Ci0JCX0KLQotCSAgICAgIERXT1JEIGR3TW9kZTsKLQkgICAgICBHZXRD b25zb2xlTW9kZSAoZ2V0X2hhbmRsZSAoKSwgJmR3TW9kZSk7Ci0JICAgICAgRFdPUkQgZmxhZ3Mg PSBFTkFCTEVfVklSVFVBTF9URVJNSU5BTF9JTlBVVDsKLQkgICAgICBpZiAoZHdNb2RlICE9IGZs YWdzKQotCQlTZXRDb25zb2xlTW9kZSAoZ2V0X2hhbmRsZSAoKSwgZmxhZ3MpOwotCSAgICAgIC8q IFJlYWQgZ2V0X2hhbmRsZSgpIGluc3RhZCBvZiBnZXRfaGFuZGxlX2N5ZygpICovCi0JICAgICAg Qk9PTCAoV0lOQVBJICpSZWFkRnVuYykKLQkJKEhBTkRMRSwgTFBWT0lELCBEV09SRCwgTFBEV09S RCwgTFBWT0lEKTsKLQkgICAgICBSZWFkRnVuYyA9IFJlYWRDb25zb2xlQV9PcmlnID8gUmVhZENv bnNvbGVBX09yaWcgOiBSZWFkQ29uc29sZUE7Ci0JICAgICAgRFdPUkQgcmxlbjsKLQkgICAgICBy ZWFkbGVuID0gTUlOIChsZW4sIHNpemVvZiAoYnVmKSk7Ci0JICAgICAgaWYgKCFSZWFkRnVuYyAo Z2V0X2hhbmRsZSAoKSwgYnVmLCByZWFkbGVuLCAmcmxlbiwgTlVMTCkpCi0JCXsKLQkJICB0ZXJt aW9zX3ByaW50ZiAoInJlYWQgZmFpbGVkLCAlRSIpOwotCQkgIFNldENvbnNvbGVNb2RlIChnZXRf aGFuZGxlICgpLCBkd01vZGUpOwotCQkgIHJlc3RvcmVfcmVhdHRhY2hfcGNvbiAoKTsKLQkJICBS ZWxlYXNlTXV0ZXggKGlucHV0X211dGV4KTsKLQkJICBzZXRfZXJybm8gKEVJTyk7Ci0JCSAgdG90 YWxyZWFkID0gLTE7Ci0JCSAgZ290byBvdXQ7Ci0JCX0KLQkgICAgICBTZXRDb25zb2xlTW9kZSAo Z2V0X2hhbmRsZSAoKSwgZHdNb2RlKTsKLQkgICAgICByZXN0b3JlX3JlYXR0YWNoX3Bjb24gKCk7 Ci0JICAgICAgUmVsZWFzZU11dGV4IChpbnB1dF9tdXRleCk7Ci0KLQkgICAgICBzc2l6ZV90IG5s ZW47Ci0JICAgICAgY2hhciAqbmJ1ZiA9IGNvbnZlcnRfbWJfc3RyIChnZXRfdHR5cCAoKS0+dGVy bV9jb2RlX3BhZ2UsCi0JCQkgICAgIChzaXplX3QgKikgJm5sZW4sIEdldENvbnNvbGVDUCAoKSwg YnVmLCBybGVuKTsKLQotCSAgICAgIHNzaXplX3QgcmV0OwotCSAgICAgIGxpbmVfZWRpdF9zdGF0 dXMgcmVzID0KLQkJbGluZV9lZGl0IChuYnVmLCBubGVuLCBnZXRfdHR5cCAoKS0+dGksICZyZXQp OwotCi0JICAgICAgbWJfc3RyX2ZyZWUgKG5idWYpOwotCi0JICAgICAgaWYgKHJlcyA9PSBsaW5l X2VkaXRfaW5wdXRfZG9uZSB8fCByZXMgPT0gbGluZV9lZGl0X29rKQotCQl0b3RhbHJlYWQgPSBn ZXRfcmVhZGFoZWFkX2ludG9fYnVmZmVyICgoY2hhciAqKSBwdHIsIGxlbik7Ci0JICAgICAgZWxz ZSBpZiAocmVzID4gbGluZV9lZGl0X3NpZ25hbGxlZCkKLQkJewotCQkgIHNldF9zaWdfZXJybm8g KEVJTlRSKTsKLQkJICB0b3RhbHJlYWQgPSAtMTsKLQkJfQotCSAgICAgIGVsc2UKLQkJewotCQkg IHVwZGF0ZV9wY29uX2lucHV0X3N0YXRlICh0cnVlKTsKLQkJICBjb250aW51ZTsKKwkJICB0b3Rh bHJlYWQgPSAtMTsKIAkJfQorCSAgICAgIGdvdG8gb3V0OworCSAgICB9CisJICBjb250aW51ZTsK KwlkZWZhdWx0OgorCSAgdGVybWlvc19wcmludGYgKCJ3YWl0IGZvciBpbnB1dCBtdXRleCBmYWls ZWQsICVFIik7CisJICBpZiAoIXRvdGFscmVhZCkKKwkgICAgeworCSAgICAgIF9fc2V0ZXJybm8g KCk7CisJICAgICAgdG90YWxyZWFkID0gLTE7CiAJICAgIH0KLQotCSAgdXBkYXRlX3Bjb25faW5w dXRfc3RhdGUgKHRydWUpOwotCSAgbWFza19zd2l0Y2hfdG9fcGNvbl9pbiAoZmFsc2UpOwogCSAg Z290byBvdXQ7CiAJfQotICAgICAgaWYgKCFwdHIgJiYgbGVuID09IFVJTlRfTUFYICYmICFnZXRf dHR5cCAoKS0+cGNvbl9pbl9lbXB0eSkKLQl7Ci0JICBGbHVzaENvbnNvbGVJbnB1dEJ1ZmZlciAo Z2V0X2hhbmRsZSAoKSk7Ci0JICBnZXRfdHR5cCAoKS0+cGNvbl9pbl9lbXB0eSA9IHRydWU7Ci0J ICBEV09SRCBuOwotCSAgaWYgKGJ5dGVzX2F2YWlsYWJsZSAobikgJiYgbiA9PSAwKQotCSAgICBS ZXNldEV2ZW50IChpbnB1dF9hdmFpbGFibGVfZXZlbnQpOwotCX0KIAotZG9fcmVhZF9jeWc6CiAg ICAgICBpZiAoIWJ5dGVzX2F2YWlsYWJsZSAoYnl0ZXNfaW5fcGlwZSkpCiAJewogCSAgUmVsZWFz ZU11dGV4IChpbnB1dF9tdXRleCk7CkBAIC0xOTExLDE2ICsxMDUxLDYgQEAgZG9fcmVhZF9jeWc6 CiBvdXQ6CiAgIHRlcm1pb3NfcHJpbnRmICgiJWQgPSByZWFkKCVwLCAlbHUpIiwgdG90YWxyZWFk LCBwdHIsIGxlbik7CiAgIGxlbiA9IChzaXplX3QpIHRvdGFscmVhZDsKLSAgLyogUHVzaCBzbGF2 ZSByZWFkIGFzIGVjaG8gdG8gcHNldWRvIGNvbnNvbGUgc2NyZWVuIGJ1ZmZlci4gKi8KLSAgaWYg KGdldF9wc2V1ZG9fY29uc29sZSAoKSAmJiBwdHIwICYmIHRvdGFscmVhZCA+IDAgJiYKLSAgICAg IChnZXRfdHR5cCAoKS0+dGkuY19sZmxhZyAmIEVDSE8pKQotICAgIHsKLSAgICAgIGFjcXVpcmVf b3V0cHV0X211dGV4IChJTkZJTklURSk7Ci0gICAgICBwdXNoX3RvX3Bjb25fc2NyZWVuYnVmZmVy IChwdHIwLCBsZW4sIHRydWUpOwotICAgICAgaWYgKGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNv bl9vdXQpCi0JdHJpZ2dlcl9yZWRyYXdfc2NyZWVuICgpOwotICAgICAgcmVsZWFzZV9vdXRwdXRf bXV0ZXggKCk7Ci0gICAgfQogICBtYXNrX3N3aXRjaF90b19wY29uX2luIChmYWxzZSk7CiB9CiAK QEAgLTIwNjEsMzggKzExOTEsMTEgQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjppb2N0bCAodW5zaWdu ZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogICAgICAgZ2V0X3R0eXAgKCktPndpbnNpemUgPSBnZXRf dHR5cCAoKS0+YXJnLndpbnNpemU7CiAgICAgICBicmVhazsKICAgICBjYXNlIFRJT0NTV0lOU1o6 Ci0gICAgICBpZiAoZ2V0X3BzZXVkb19jb25zb2xlICgpKQotCXsKLQkgIC8qIElmIG5vdCBhdHRh Y2hlZCB0byB0aGlzIHBzZXVkbyBjb25zb2xlLAotCSAgICAgdHJ5IHRvIGF0dGFjaCB0ZW1wb3Jh cmlseS4gKi8KLQkgIHBpZF9yZXN0b3JlID0gMDsKLQkgIGlmIChwY29uX2F0dGFjaGVkX3RvICE9 IGdldF9taW5vciAoKSkKLQkgICAgaWYgKCF0cnlfcmVhdHRhY2hfcGNvbiAoKSkKLQkgICAgICBn b3RvIGNsZWFudXA7Ci0KLQkgIENPT1JEIHNpemU7Ci0JICBzaXplLlggPSAoKHN0cnVjdCB3aW5z aXplICopIGFyZyktPndzX2NvbDsKLQkgIHNpemUuWSA9ICgoc3RydWN0IHdpbnNpemUgKikgYXJn KS0+d3Nfcm93OwotCSAgQ09OU09MRV9TQ1JFRU5fQlVGRkVSX0lORk8gY3NiaTsKLQkgIGlmIChH ZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbyAoZ2V0X291dHB1dF9oYW5kbGUgKCksICZjc2JpKSkK LQkgICAgaWYgKHNpemUuWCA9PSBjc2JpLnNyV2luZG93LlJpZ2h0IC0gY3NiaS5zcldpbmRvdy5M ZWZ0ICsgMSAmJgotCQlzaXplLlkgPT0gY3NiaS5zcldpbmRvdy5Cb3R0b20gLSBjc2JpLnNyV2lu ZG93LlRvcCArIDEpCi0JICAgICAgZ290byBjbGVhbnVwOwotCSAgaWYgKCFTZXRDb25zb2xlU2Ny ZWVuQnVmZmVyU2l6ZSAoZ2V0X291dHB1dF9oYW5kbGUgKCksIHNpemUpKQotCSAgICBnb3RvIGNs ZWFudXA7Ci0JICBTTUFMTF9SRUNUIHJlY3Q7Ci0JICByZWN0LkxlZnQgPSAwOwotCSAgcmVjdC5U b3AgPSAwOwotCSAgcmVjdC5SaWdodCA9IHNpemUuWC0xOwotCSAgcmVjdC5Cb3R0b20gPSBzaXpl LlktMTsKLQkgIFNldENvbnNvbGVXaW5kb3dJbmZvIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgVFJV RSwgJnJlY3QpOwotY2xlYW51cDoKLQkgIHJlc3RvcmVfcmVhdHRhY2hfcGNvbiAoKTsKLQl9Ci0K ICAgICAgIGlmIChnZXRfdHR5cCAoKS0+d2luc2l6ZS53c19yb3cgIT0gKChzdHJ1Y3Qgd2luc2l6 ZSAqKSBhcmcpLT53c19yb3cKIAkgIHx8IGdldF90dHlwICgpLT53aW5zaXplLndzX2NvbCAhPSAo KHN0cnVjdCB3aW5zaXplICopIGFyZyktPndzX2NvbCkKIAl7CisJICBpZiAoZ2V0X3R0eXAgKCkt PmhfcHNldWRvX2NvbnNvbGUgJiYgZ2V0X3R0eXAgKCktPnBjb25fcGlkKQorCSAgICByZXNpemVf cHNldWRvX2NvbnNvbGUgKChzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmcpOwogCSAgZ2V0X3R0eXAgKCkt PmFyZy53aW5zaXplID0gKihzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmc7CiAJICBnZXRfdHR5cCAoKS0+ d2luc2l6ZSA9ICooc3RydWN0IHdpbnNpemUgKikgYXJnOwogCSAgZ2V0X3R0eXAgKCktPmtpbGxf cGdycCAoU0lHV0lOQ0gpOwpAQCAtMjM3OCw2ICsxNDgxLDI3IEBAIGZoYW5kbGVyX3B0eV9jb21t b246OmNsb3NlICgpCiAgIHJldHVybiAwOwogfQogCit2b2lkCitmaGFuZGxlcl9wdHlfY29tbW9u OjpyZXNpemVfcHNldWRvX2NvbnNvbGUgKHN0cnVjdCB3aW5zaXplICp3cykKK3sKKyAgQ09PUkQg c2l6ZTsKKyAgc2l6ZS5YID0gd3MtPndzX2NvbDsKKyAgc2l6ZS5ZID0gd3MtPndzX3JvdzsKKyAg cGluZm8gcCAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKTsKKyAgaWYgKHApCisgICAgeworICAgICAg SFBDT05fSU5URVJOQUwgaHBjb25fbG9jYWw7CisgICAgICBIQU5ETEUgcGNvbl9vd25lciA9CisJ T3BlblByb2Nlc3MgKFBST0NFU1NfRFVQX0hBTkRMRSwgRkFMU0UsIHAtPmV4ZWNfZHdQcm9jZXNz SWQpOworICAgICAgRHVwbGljYXRlSGFuZGxlIChwY29uX293bmVyLCBnZXRfdHR5cCAoKS0+aF9w Y29uX3dyaXRlX3BpcGUsCisJCSAgICAgICBHZXRDdXJyZW50UHJvY2VzcyAoKSwgJmhwY29uX2xv Y2FsLmhXcml0ZVBpcGUsCisJCSAgICAgICAwLCBUUlVFLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1Mp OworICAgICAgUmVzaXplUHNldWRvQ29uc29sZSAoKEhQQ09OKSAmaHBjb25fbG9jYWwsIHNpemUp OworICAgICAgQ2xvc2VIYW5kbGUgKHBjb25fb3duZXIpOworICAgICAgQ2xvc2VIYW5kbGUgKGhw Y29uX2xvY2FsLmhXcml0ZVBpcGUpOworICAgIH0KK30KKwogdm9pZAogZmhhbmRsZXJfcHR5X21h c3Rlcjo6Y2xlYW51cCAoKQogewpAQCAtMjM5Myw3ICsxNTE3LDYgQEAgZmhhbmRsZXJfcHR5X21h c3Rlcjo6Y2xvc2UgKCkKIHsKICAgT0JKRUNUX0JBU0lDX0lORk9STUFUSU9OIG9iaTsKICAgTlRT VEFUVVMgc3RhdHVzOwotICBwaWRfdCBtYXN0ZXJfcGlkX3RtcCA9IGdldF90dHlwICgpLT5tYXN0 ZXJfcGlkOwogCiAgIHRlcm1pb3NfcHJpbnRmICgiY2xvc2luZyBmcm9tX21hc3RlciglcCkvZnJv bV9tYXN0ZXJfY3lnKCVwKS90b19tYXN0ZXIoJXApL3RvX21hc3Rlcl9jeWcoJXApIHNpbmNlIHdl IG93biB0aGVtKCV1KSIsCiAJCSAgZnJvbV9tYXN0ZXIsIGZyb21fbWFzdGVyX2N5ZywKQEAgLTI0 MzgsMzAgKzE1NjEsNiBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpjbG9zZSAoKQogICBlbHNlIGlm IChvYmkuSGFuZGxlQ291bnQgPT0gMSkKICAgICB7CiAgICAgICB0ZXJtaW9zX3ByaW50ZiAoIkNs b3NpbmcgbGFzdCBtYXN0ZXIgb2YgcHR5JWQiLCBnZXRfbWlub3IgKCkpOwotICAgICAgLyogQ2xv c2UgUHNldWRvIENvbnNvbGUgKi8KLSAgICAgIGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0J ewotCSAgLyogVGVybWluYXRlIGhlbHBlciBwcm9jZXNzICovCi0JICBTZXRFdmVudCAoZ2V0X3R0 eXAgKCktPmhfaGVscGVyX2dvb2RieWUpOwotCSAgV2FpdEZvclNpbmdsZU9iamVjdCAoZ2V0X3R0 eXAgKCktPmhfaGVscGVyX3Byb2Nlc3MsIElORklOSVRFKTsKLQkgIENsb3NlSGFuZGxlIChnZXRf dHR5cCAoKS0+aF9oZWxwZXJfZ29vZGJ5ZSk7Ci0JICBDbG9zZUhhbmRsZSAoZ2V0X3R0eXAgKCkt PmhfaGVscGVyX3Byb2Nlc3MpOwotCSAgLyogRklYTUU6IFBzZXVkbyBjb25zb2xlIGNhbiBiZSBh Y2Nlc3NlZCB2aWEgaXRzIGhhbmRsZQotCSAgICAgb25seSBpbiB0aGUgcHJvY2VzcyB3aGljaCBj cmVhdGVkIGl0LiBXaGF0IGVsc2UgY2FuIHdlIGRvPyAqLwotCSAgaWYgKG1hc3Rlcl9waWRfdG1w ID09IG15c2VsZi0+cGlkKQotCSAgICB7Ci0JICAgICAgLyogQ2xvc2VQc2V1ZG9Db25zb2xlKCkg c2VlbXMgdG8gaGF2ZSBhIGJ1ZyB0aGF0IG9uZQotCQkgaW50ZXJuYWwgaGFuZGxlIHJlbWFpbnMg b3BlbmVkLiBUaGlzIGNhdXNlcyBoYW5kbGUgbGVhay4KLQkJIFRoaXMgaXMgYSB3b3JrYXJvdW5k IGZvciB0aGlzIHByb2JsZW0uICovCi0JICAgICAgSFBDT05fSU5URVJOQUwgKmhwID0gKEhQQ09O X0lOVEVSTkFMICopIGdldF9wc2V1ZG9fY29uc29sZSAoKTsKLQkgICAgICBIQU5ETEUgdG1wID0g aHAtPmhDb25Ib3N0UHJvY2VzczsKLQkgICAgICAvKiBSZWxlYXNlIHBzZXVkbyBjb25zb2xlICov Ci0JICAgICAgQ2xvc2VQc2V1ZG9Db25zb2xlIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpOwotCSAg ICAgIENsb3NlSGFuZGxlICh0bXApOwotCSAgICB9Ci0JICBnZXRfdHR5cCAoKS0+c3dpdGNoX3Rv X3Bjb25faW4gPSBmYWxzZTsKLQkgIGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQgPSBm YWxzZTsKLQl9CiAgICAgICBpZiAoZ2V0X3R0eXAgKCktPmdldHNpZCAoKSA+IDApCiAJa2lsbCAo Z2V0X3R0eXAgKCktPmdldHNpZCAoKSwgU0lHSFVQKTsKICAgICAgIFNldEV2ZW50IChpbnB1dF9h dmFpbGFibGVfZXZlbnQpOwpAQCAtMjQ2OSw5ICsxNTY4LDggQEAgZmhhbmRsZXJfcHR5X21hc3Rl cjo6Y2xvc2UgKCkKIAogICBpZiAoIUZvcmNlQ2xvc2VIYW5kbGUgKGZyb21fbWFzdGVyKSkKICAg ICB0ZXJtaW9zX3ByaW50ZiAoImVycm9yIGNsb3NpbmcgZnJvbV9tYXN0ZXIgJXAsICVFIiwgZnJv bV9tYXN0ZXIpOwotICBpZiAoZnJvbV9tYXN0ZXJfY3lnICE9IGZyb21fbWFzdGVyKSAvKiBBdm9p ZCBkb3VibGUgY2xvc2UuICovCi0gICAgaWYgKCFGb3JjZUNsb3NlSGFuZGxlIChmcm9tX21hc3Rl cl9jeWcpKQotICAgICAgdGVybWlvc19wcmludGYgKCJlcnJvciBjbG9zaW5nIGZyb21fbWFzdGVy X2N5ZyAlcCwgJUUiLCBmcm9tX21hc3Rlcl9jeWcpOworICBpZiAoIUZvcmNlQ2xvc2VIYW5kbGUg KGZyb21fbWFzdGVyX2N5ZykpCisgICAgdGVybWlvc19wcmludGYgKCJlcnJvciBjbG9zaW5nIGZy b21fbWFzdGVyX2N5ZyAlcCwgJUUiLCBmcm9tX21hc3Rlcl9jeWcpOwogICBpZiAoIUZvcmNlQ2xv c2VIYW5kbGUgKHRvX21hc3RlcikpCiAgICAgdGVybWlvc19wcmludGYgKCJlcnJvciBjbG9zaW5n IHRvX21hc3RlciAlcCwgJUUiLCB0b19tYXN0ZXIpOwogICBmcm9tX21hc3RlciA9IHRvX21hc3Rl ciA9IE5VTEw7CkBAIC0yNTEzLDcgKzE2MTEsNyBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjp3cml0 ZSAoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgbGVuKQogCiAgIC8qIFdyaXRlIHRlcm1pbmFsIGlu cHV0IHRvIHRvX3NsYXZlIHBpcGUgaW5zdGVhZCBvZiBvdXRwdXRfaGFuZGxlCiAgICAgIGlmIGN1 cnJlbnQgYXBwbGljYXRpb24gaXMgbmF0aXZlIGNvbnNvbGUgYXBwbGljYXRpb24uICovCi0gIGlm ICh0b19iZV9yZWFkX2Zyb21fcGNvbiAoKSkKKyAgaWYgKHRvX2JlX3JlYWRfZnJvbV9wY29uICgp ICYmIGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlKQogICAgIHsKICAgICAgIHNpemVfdCBu bGVuOwogICAgICAgY2hhciAqYnVmID0gY29udmVydF9tYl9zdHIKQEAgLTI1MjEsNDAgKzE2MTks NTAgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6d3JpdGUgKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90 IGxlbikKIAogICAgICAgV2FpdEZvclNpbmdsZU9iamVjdCAoaW5wdXRfbXV0ZXgsIElORklOSVRF KTsKIAotICAgICAgaWYgKG1lbWNociAoYnVmLCAnXDAwMycsIG5sZW4pKSAvKiBeQyBpbnRyIGtl eSBpbiBwY29uICovCi0JZ2V0X3R0eXAgKCktPnJlcV9mbHVzaF9wY29uX2lucHV0ID0gdHJ1ZTsK LQogICAgICAgRFdPUkQgd0xlbjsKLSAgICAgIFdyaXRlRmlsZSAodG9fc2xhdmUsIGJ1Ziwgbmxl biwgJndMZW4sIE5VTEwpOwotICAgICAgZ2V0X3R0eXAgKCktPnBjb25faW5fZW1wdHkgPSBmYWxz ZTsKLQotICAgICAgUmVsZWFzZU11dGV4IChpbnB1dF9tdXRleCk7CiAKLSAgICAgIC8qIFVzZSBs aW5lX2VkaXQgKCkgaW4gb3JkZXIgdG8gc2V0IGlucHV0X2F2YWlsYWJsZV9ldmVudC4gKi8KLSAg ICAgIGJvb2wgaXNfZWNobyA9IHRjICgpLT50aS5jX2xmbGFnICYgRUNITzsKLSAgICAgIGlmICgh Z2V0X3R0eXAgKCktPm1hc2tfc3dpdGNoX3RvX3Bjb25faW4pCisgICAgICBpZiAoZ2V0X3R0eXAg KCktPnBjb25fc3RhcnQpCiAJewotCSAgdGMgKCktPnRpLmNfbGZsYWcgJj0gfkVDSE87Ci0JICB0 aS5jX2xmbGFnICY9IH5FQ0hPOwotCX0KLSAgICAgIHRpLmNfbGZsYWcgJj0gfklTSUc7Ci0gICAg ICBsaW5lX2VkaXQgKGJ1ZiwgbmxlbiwgdGksICZyZXQpOwotICAgICAgaWYgKGlzX2VjaG8pCi0J dGMgKCktPnRpLmNfbGZsYWcgfD0gRUNITzsKLSAgICAgIGdldF90dHlwICgpLT5yZWFkX3JldHZh bCA9IDE7Ci0KLSAgICAgIGNvbnN0IGNoYXIgc2lnc1tdID0gewotCShjaGFyKSB0aS5jX2NjW1ZJ TlRSXSwKLQkoY2hhcikgdGkuY19jY1tWUVVJVF0sCi0JKGNoYXIpIHRpLmNfY2NbVlNVU1BdLAot ICAgICAgfTsKLSAgICAgIGlmICh0YyAoKS0+dGkuY19sZmxhZyAmIElTSUcpCi0JZm9yIChzaXpl X3QgaT0wOyBpPHNpemVvZiAoc2lncyk7IGkrKykKLQkgIGlmIChzaWdzW2ldICYmIG1lbWNociAo YnVmLCBzaWdzW2ldLCBubGVuKSkKKwkgIC8qIFBzZXVkbyBjb25kb2xlIHN1cHBvcnQgdXNlcyAi Q1NJNm4iIHRvIGdldCBjdXJzb3IgcG9zaXRpb24uCisJICAgICBJZiB0aGUgcmVwbHkgZm9yICJD U0k2biIgaXMgZGl2aWRlZCBpbnRvIG11bHRpcGxlIHdyaXRlcywKKwkgICAgIHBzZXVkbyBjb25z b2xlIHNvbWV0aW1lcyBkb2VzIG5vdCByZWNvZ25pemUgaXQuICBUaGVyZWZvcmUsCisJICAgICBw dXQgdGhlbSB0b2dldGhlciBpbnRvIHdwYnVmIGFuZCB3cml0ZSBhbGwgYXQgb25jZS4gKi8KKwkg IHN0YXRpYyBjb25zdCBpbnQgd3BidWZfbGVuID0gNjQ7CisJICBzdGF0aWMgY2hhciB3cGJ1Zlt3 cGJ1Zl9sZW5dOworCSAgc3RhdGljIGludCBpeHB1dCA9IDA7CisKKwkgIGlmIChpeHB1dCA9PSAw ICYmIGJ1ZlswXSAhPSAnXDAzMycpCisJICAgIHsgLyogZmFpbC1zYWZlICovCisJICAgICAgV3Jp dGVGaWxlICh0b19zbGF2ZSwgIlwwMzNbMTsxUiIsIDYsICZ3TGVuLCBOVUxMKTsgLyogZHVtbXkg Ki8KKwkgICAgICBnZXRfdHR5cCAoKS0+cGNvbl9zdGFydCA9IGZhbHNlOworCSAgICB9CisJICBl bHNlCiAJICAgIHsKLQkgICAgICBlYXRfcmVhZGFoZWFkICgtMSk7Ci0JICAgICAgU2V0RXZlbnQg KGlucHV0X2F2YWlsYWJsZV9ldmVudCk7CisJICAgICAgaWYgKGl4cHV0ICsgbmxlbiA8IHdwYnVm X2xlbikKKwkJZm9yIChzaXplX3QgaT0wOyBpPG5sZW47IGkrKykKKwkJICB3cGJ1ZltpeHB1dCsr XSA9IGJ1ZltpXTsKKwkgICAgICBlbHNlCisJCXsKKwkJICBXcml0ZUZpbGUgKHRvX3NsYXZlLCB3 cGJ1ZiwgaXhwdXQsICZ3TGVuLCBOVUxMKTsKKwkJICBpeHB1dCA9IDA7CisJCSAgZ2V0X3R0eXAg KCktPnBjb25fc3RhcnQgPSBmYWxzZTsKKwkJICBXcml0ZUZpbGUgKHRvX3NsYXZlLCBidWYsIG5s ZW4sICZ3TGVuLCBOVUxMKTsKKwkJfQorCSAgICAgIGlmIChpeHB1dCAmJiBtZW1jaHIgKHdwYnVm LCAnUicsIGl4cHV0KSkKKwkJeworCQkgIFdyaXRlRmlsZSAodG9fc2xhdmUsIHdwYnVmLCBpeHB1 dCwgJndMZW4sIE5VTEwpOworCQkgIGl4cHV0ID0gMDsKKwkJICBnZXRfdHR5cCAoKS0+cGNvbl9z dGFydCA9IGZhbHNlOworCQl9CisJICAgICAgUmVsZWFzZU11dGV4IChpbnB1dF9tdXRleCk7CisJ ICAgICAgbWJfc3RyX2ZyZWUgKGJ1Zik7CisJICAgICAgcmV0dXJuIGxlbjsKIAkgICAgfQorCX0K KworICAgICAgV3JpdGVGaWxlICh0b19zbGF2ZSwgYnVmLCBubGVuLCAmd0xlbiwgTlVMTCk7CisK KyAgICAgIFJlbGVhc2VNdXRleCAoaW5wdXRfbXV0ZXgpOwogCiAgICAgICBtYl9zdHJfZnJlZSAo YnVmKTsKICAgICAgIHJldHVybiBsZW47CkBAIC0yNjMwLDE1ICsxNzM4LDggQEAgZmhhbmRsZXJf cHR5X21hc3Rlcjo6aW9jdGwgKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKICAgICAgIGlm IChnZXRfdHR5cCAoKS0+d2luc2l6ZS53c19yb3cgIT0gKChzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmcp LT53c19yb3cKIAkgIHx8IGdldF90dHlwICgpLT53aW5zaXplLndzX2NvbCAhPSAoKHN0cnVjdCB3 aW5zaXplICopIGFyZyktPndzX2NvbCkKIAl7Ci0JICAvKiBGSVhNRTogUHNldWRvIGNvbnNvbGUg Y2FuIGJlIGFjY2Vzc2VkIHZpYSBpdHMgaGFuZGxlCi0JICAgICBvbmx5IGluIHRoZSBwcm9jZXNz IHdoaWNoIGNyZWF0ZWQgaXQuIFdoYXQgZWxzZSBjYW4gd2UgZG8/ICovCi0JICBpZiAoZ2V0X3Bz ZXVkb19jb25zb2xlICgpICYmIGdldF90dHlwICgpLT5tYXN0ZXJfcGlkID09IG15c2VsZi0+cGlk KQotCSAgICB7Ci0JICAgICAgQ09PUkQgc2l6ZTsKLQkgICAgICBzaXplLlggPSAoKHN0cnVjdCB3 aW5zaXplICopIGFyZyktPndzX2NvbDsKLQkgICAgICBzaXplLlkgPSAoKHN0cnVjdCB3aW5zaXpl ICopIGFyZyktPndzX3JvdzsKLQkgICAgICBSZXNpemVQc2V1ZG9Db25zb2xlIChnZXRfcHNldWRv X2NvbnNvbGUgKCksIHNpemUpOwotCSAgICB9CisJICBpZiAoZ2V0X3R0eXAgKCktPmhfcHNldWRv X2NvbnNvbGUgJiYgZ2V0X3R0eXAgKCktPnBjb25fcGlkKQorCSAgICByZXNpemVfcHNldWRvX2Nv bnNvbGUgKChzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmcpOwogCSAgZ2V0X3R0eXAgKCktPndpbnNpemUg PSAqKHN0cnVjdCB3aW5zaXplICopIGFyZzsKIAkgIGdldF90dHlwICgpLT5raWxsX3BncnAgKFNJ R1dJTkNIKTsKIAl9CkBAIC0yNzYzLDcgKzE4NjQsNyBAQCBnZXRfbG9jYWxlX2Zyb21fZW52IChj aGFyICpsb2NhbGUpCiAgIHN0cmNweSAobG9jYWxlLCBlbnYpOwogfQogCi1zdGF0aWMgTENJRAor c3RhdGljIHZvaWQKIGdldF9sYW5naW5mbyAoY2hhciAqbG9jYWxlX291dCwgY2hhciAqY2hhcnNl dF9vdXQpCiB7CiAgIC8qIEdldCBsb2NhbGUgZnJvbSBlbnZpcm9ubWVudCAqLwpAQCAtMjc3Niwx MSArMTg3Nyw2IEBAIGdldF9sYW5naW5mbyAoY2hhciAqbG9jYWxlX291dCwgY2hhciAqY2hhcnNl dF9vdXQpCiAgIGlmICghbG9jYWxlKQogICAgIGxvY2FsZSA9ICJDIjsKIAotICBjaGFyIHRtcF9s b2NhbGVbRU5DT0RJTkdfTEVOICsgMV07Ci0gIGNoYXIgKnJldCA9IF9fc2V0X2xvY2FsZV9mcm9t X2xvY2FsZV9hbGlhcyAobG9jYWxlLCB0bXBfbG9jYWxlKTsKLSAgaWYgKHJldCkKLSAgICBsb2Nh bGUgPSB0bXBfbG9jYWxlOwotCiAgIGNvbnN0IGNoYXIgKmNoYXJzZXQ7CiAgIHN0cnVjdCBsY19j dHlwZV9UICpsY19jdHlwZSA9IChzdHJ1Y3QgbGNfY3R5cGVfVCAqKSBsb2MubGNfY2F0W0xDX0NU WVBFXS5wdHI7CiAgIGlmICghbGNfY3R5cGUpCkBAIC0yODMwLDIzICsxOTI2LDkgQEAgZ2V0X2xh bmdpbmZvIChjaGFyICpsb2NhbGVfb3V0LCBjaGFyICpjaGFyc2V0X291dCkKICAgICAgIGNoYXJz ZXQgPSAiQ1A5MzIiOwogICAgIH0KIAotICB3Y2hhcl90IGxjW0VOQ09ESU5HX0xFTiArIDFdOwot ICB3Y2hhcl90ICpwOwotICBtYnN0b3djcyAobGMsIGxvY2FsZSwgRU5DT0RJTkdfTEVOKTsKLSAg cCA9IHdjc2NociAobGMsIEwnLicpOwotICBpZiAocCkKLSAgICAqcCA9IEwnXDAnOwotICBwID0g d2NzY2hyIChsYywgTCdfJyk7Ci0gIGlmIChwKQotICAgICpwID0gTCctJzsKLSAgTENJRCBsY2lk ID0gTG9jYWxlTmFtZVRvTENJRCAobGMsIDApOwotICBpZiAoIWxjaWQgJiYgIXN0cmNtcCAoY2hh cnNldCwgIkFTQ0lJIikpCi0gICAgcmV0dXJuIDA7Ci0KICAgLyogU2V0IHJlc3VsdHMgKi8KICAg c3RyY3B5IChsb2NhbGVfb3V0LCBuZXdfbG9jYWxlKTsKICAgc3RyY3B5IChjaGFyc2V0X291dCwg Y2hhcnNldCk7Ci0gIHJldHVybiBsY2lkOwogfQogCiB2b2lkCkBAIC0yODU3LDIxICsxOTM5LDcg QEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpzZXR1cF9sb2NhbGUgKHZvaWQpCiAKICAgY2hhciBsb2Nh bGVbRU5DT0RJTkdfTEVOICsgMV0gPSAiQyI7CiAgIGNoYXIgY2hhcnNldFtFTkNPRElOR19MRU4g KyAxXSA9ICJBU0NJSSI7Ci0gIExDSUQgbGNpZCA9IGdldF9sYW5naW5mbyAobG9jYWxlLCBjaGFy c2V0KTsKLQotICAvKiBTZXQgY29uc29sZSBjb2RlIHBhZ2UgZm9ybSBsb2NhbGUgKi8KLSAgaWYg KGdldF9wc2V1ZG9fY29uc29sZSAoKSkKLSAgICB7Ci0gICAgICBVSU5UIGNvZGVfcGFnZTsKLSAg ICAgIGlmIChsY2lkID09IDAgfHwgbGNpZCA9PSAoTENJRCkgLTEpCi0JY29kZV9wYWdlID0gMjAx Mjc7IC8qIEFTQ0lJICovCi0gICAgICBlbHNlIGlmICghR2V0TG9jYWxlSW5mbyAobGNpZCwKLQkJ CSAgICAgICBMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSB8IExPQ0FMRV9SRVRVUk5fTlVNQkVSLAot CQkJICAgICAgIChjaGFyICopICZjb2RlX3BhZ2UsIHNpemVvZiAoY29kZV9wYWdlKSkpCi0JY29k ZV9wYWdlID0gMjAxMjc7IC8qIEFTQ0lJICovCi0gICAgICBTZXRDb25zb2xlQ1AgKGNvZGVfcGFn ZSk7Ci0gICAgICBTZXRDb25zb2xlT3V0cHV0Q1AgKGNvZGVfcGFnZSk7Ci0gICAgfQorICBnZXRf bGFuZ2luZm8gKGxvY2FsZSwgY2hhcnNldCk7CiAKICAgLyogU2V0IHRlcm1pbmFsIGNvZGUgcGFn ZSBmcm9tIGxvY2FsZSAqLwogICAvKiBUaGlzIGNvZGUgaXMgYm9ycm93ZWQgZnJvbSBtaW50dHk6 IGNoYXJzZXQuYyAqLwpAQCAtMjg4MSw5ICsxOTQ5LDkgQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpz ZXR1cF9sb2NhbGUgKHZvaWQpCiAgICAgY2hhcnNldF91W2ldID0gdG91cHBlciAoY2hhcnNldFtp XSk7CiAgIHVuc2lnbmVkIGludCBpc287CiAgIFVJTlQgY3AgPSAyMDEyNzsgLyogRGVmYXVsdCBm b3IgZmFsbGJhY2sgKi8KLSAgaWYgKHNzY2FuZiAoY2hhcnNldF91LCAiSVNPLTg4NTktJXUiLCAm aXNvKSA9PSAxIHx8Ci0gICAgICBzc2NhbmYgKGNoYXJzZXRfdSwgIklTTzg4NTktJXUiLCAmaXNv KSA9PSAxIHx8Ci0gICAgICBzc2NhbmYgKGNoYXJzZXRfdSwgIklTTzg4NTkldSIsICZpc28pID09 IDEpCisgIGlmIChzc2NhbmYgKGNoYXJzZXRfdSwgIklTTy04ODU5LSV1IiwgJmlzbykgPT0gMQor ICAgICAgfHwgc3NjYW5mIChjaGFyc2V0X3UsICJJU084ODU5LSV1IiwgJmlzbykgPT0gMQorICAg ICAgfHwgc3NjYW5mIChjaGFyc2V0X3UsICJJU084ODU5JXUiLCAmaXNvKSA9PSAxKQogICAgIHsK ICAgICAgIGlmIChpc28gJiYgaXNvIDw9IDE2ICYmIGlzbyAhPTEyKQogCWdldF90dHlwICgpLT50 ZXJtX2NvZGVfcGFnZSA9IDI4NTkwICsgaXNvOwpAQCAtMjg5OSw5MCArMTk2Nyw5IEBAIGZoYW5k bGVyX3B0eV9zbGF2ZTo6c2V0dXBfbG9jYWxlICh2b2lkKQogCX0KIH0KIAotdm9pZAotZmhhbmRs ZXJfcHR5X3NsYXZlOjpzZXRfZnJlZWNvbnNvbGVfb25fY2xvc2UgKGJvb2wgdmFsKQotewotICBm cmVlY29uc29sZV9vbl9jbG9zZSA9IHZhbDsKLX0KLQotdm9pZAotZmhhbmRsZXJfcHR5X3NsYXZl Ojp0cmlnZ2VyX3JlZHJhd19zY3JlZW4gKHZvaWQpCi17Ci0gIC8qIEZvcmNpYmx5IHJlZHJhdyBz Y3JlZW4gYmFzZWQgb24gY29uc29sZSBzY3JlZW4gYnVmZmVyLiAqLwotICAvKiBUaGUgZm9sbG93 aW5nIGNvZGUgdHJpZ2dlcnMgcmVkcmF3aW5nIHRoZSBzY3JlZW4uICovCi0gIENPTlNPTEVfU0NS RUVOX0JVRkZFUl9JTkZPIHNiaTsKLSAgR2V0Q29uc29sZVNjcmVlbkJ1ZmZlckluZm8gKGdldF9v dXRwdXRfaGFuZGxlICgpLCAmc2JpKTsKLSAgU01BTExfUkVDVCByZWN0ID0gezAsIDAsCi0gICAg KFNIT1JUKSAoc2JpLmR3U2l6ZS5YIC0xKSwgKFNIT1JUKSAoc2JpLmR3U2l6ZS5ZIC0gMSl9Owot ICBDT09SRCBkZXN0ID0gezAsIDB9OwotICBDSEFSX0lORk8gZmlsbCA9IHsnICcsIDB9OwotICBT Y3JvbGxDb25zb2xlU2NyZWVuQnVmZmVyIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgJnJlY3QsIE5V TEwsIGRlc3QsICZmaWxsKTsKLSAgZ2V0X3R0eXAgKCktPm5lZWRfcmVkcmF3X3NjcmVlbiA9IGZh bHNlOwotfQotCi12b2lkCi1maGFuZGxlcl9wdHlfc2xhdmU6OmZpeHVwX2FmdGVyX2F0dGFjaCAo Ym9vbCBuYXRpdmVfbWF5YmUsIGludCBmZF9zZXQpCi17Ci0gIGlmIChmZCA8IDApCi0gICAgZmQg PSBmZF9zZXQ7Ci0gIGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0gICAgewotICAgICAgaWYg KGZoYW5kbGVyX2NvbnNvbGU6OmdldF9jb25zb2xlX3Byb2Nlc3NfaWQgKGdldF9oZWxwZXJfcHJv Y2Vzc19pZCAoKSwKLQkJCQkJCSAgICB0cnVlKSkKLQlpZiAocGNvbl9hdHRhY2hlZF90byAhPSBn ZXRfbWlub3IgKCkpCi0JICB7Ci0JICAgIHBjb25fYXR0YWNoZWRfdG8gPSBnZXRfbWlub3IgKCk7 Ci0JICAgIGluaXRfY29uc29sZV9oYW5kbGVyICh0cnVlKTsKLQkgIH0KLQotI2lmIDAgLyogVGhp cyBpcyBmb3IgZGVidWcgb25seS4gKi8KLSAgICAgIGlzSHlicmlkID0gdHJ1ZTsKLSAgICAgIGdl dF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9pbiA9IHRydWU7Ci0gICAgICBnZXRfdHR5cCAoKS0+ c3dpdGNoX3RvX3Bjb25fb3V0ID0gdHJ1ZTsKLSNlbmRpZgotCi0gICAgICBpZiAocGNvbl9hdHRh Y2hlZF90byA9PSBnZXRfbWlub3IgKCkgJiYgbmF0aXZlX21heWJlKQotCXsKLQkgIGlmIChmZCA9 PSAwKQotCSAgICB7Ci0JICAgICAgcHVsbF9wY29uX2lucHV0ICgpOwotCSAgICAgIERXT1JEIG1v ZGUgPQotCQlFTkFCTEVfUFJPQ0VTU0VEX0lOUFVUIHwgRU5BQkxFX0xJTkVfSU5QVVQgfCBFTkFC TEVfRUNIT19JTlBVVDsKLQkgICAgICBTZXRDb25zb2xlTW9kZSAoZ2V0X2hhbmRsZSAoKSwgbW9k ZSk7Ci0JICAgICAgaWYgKGdldF90dHlwICgpLT5wY29uX3BpZCA9PSAwIHx8Ci0JCSAgIXBpbmZv IChnZXRfdHR5cCAoKS0+cGNvbl9waWQpKQotCQlnZXRfdHR5cCAoKS0+cGNvbl9waWQgPSBteXNl bGYtPnBpZDsKLQkgICAgICBnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4gPSB0cnVlOwot CSAgICB9Ci0JICBlbHNlIGlmIChmZCA9PSAxIHx8IGZkID09IDIpCi0JICAgIHsKLQkgICAgICBE V09SRCBtb2RlID0gRU5BQkxFX1BST0NFU1NFRF9PVVRQVVQgfCBFTkFCTEVfV1JBUF9BVF9FT0xf T1VUUFVUOwotCSAgICAgIFNldENvbnNvbGVNb2RlIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgbW9k ZSk7Ci0JICAgICAgYWNxdWlyZV9vdXRwdXRfbXV0ZXggKElORklOSVRFKTsKLQkgICAgICBpZiAo IWdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQpCi0JCWdldF90dHlwICgpLT53YWl0X3Bj b25fZndkICgpOwotCSAgICAgIGlmIChnZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gMCB8fAotCQkg ICFwaW5mbyAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKSkKLQkJZ2V0X3R0eXAgKCktPnBjb25fcGlk ID0gbXlzZWxmLT5waWQ7Ci0JICAgICAgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX291dCA9 IHRydWU7Ci0JICAgICAgcmVsZWFzZV9vdXRwdXRfbXV0ZXggKCk7Ci0KLQkgICAgICBpZiAoZ2V0 X3R0eXAgKCktPm5lZWRfcmVkcmF3X3NjcmVlbikKLQkJdHJpZ2dlcl9yZWRyYXdfc2NyZWVuICgp OwotCSAgICB9Ci0JICBpbml0X2NvbnNvbGVfaGFuZGxlciAoZmFsc2UpOwotCX0KLSAgICAgIGVs c2UgaWYgKGZkID09IDAgJiYgbmF0aXZlX21heWJlKQotCS8qIFJlYWQgZnJvbSB1bmF0dGFjaGVk IHBzZXVkbyBjb25zb2xlIGNhdXNlIGZyZWV6ZSwKLQkgICB0aGVyZWZvcmUsIGZhbGxiYWNrIHRv IGxlZ2FjeSBwdHkuICovCi0Jc2V0X2hhbmRsZSAoZ2V0X2hhbmRsZV9jeWcgKCkpOwotICAgIH0K LX0KLQogdm9pZAogZmhhbmRsZXJfcHR5X3NsYXZlOjpmaXh1cF9hZnRlcl9mb3JrIChIQU5ETEUg cGFyZW50KQogewotICBmaXh1cF9hZnRlcl9hdHRhY2ggKGZhbHNlLCAtMSk7CiAgIC8vIGZvcmtf Zml4dXAgKHBhcmVudCwgaW51c2UsICJpbnVzZSIpOwogICAvLyBmaGFuZGxlcl9wdHlfY29tbW9u OjpmaXh1cF9hZnRlcl9mb3JrIChwYXJlbnQpOwogICByZXBvcnRfdHR5X2NvdW50cyAodGhpcywg ImluaGVyaXRlZCIsICIiKTsKQEAgLTI5OTUsNzAgKzE5ODIsMjEgQEAgZmhhbmRsZXJfcHR5X3Ns YXZlOjpmaXh1cF9hZnRlcl9leGVjICgpCiAKICAgaWYgKCFjbG9zZV9vbl9leGVjICgpKQogICAg IGZpeHVwX2FmdGVyX2ZvcmsgKE5VTEwpOwkvKiBObyBwYXJlbnQgaGFuZGxlIHJlcXVpcmVkLiAq LwotICBlbHNlIGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0gICAgewotICAgICAgaW50IHVz ZWQgPSAwOwotICAgICAgaW50IGF0dGFjaGVkID0gMDsKLSAgICAgIGN5Z2hlYXBfZmRlbnVtIGNm ZCAoZmFsc2UpOwotICAgICAgd2hpbGUgKGNmZC5uZXh0ICgpID49IDApCi0JewotCSAgaWYgKGNm ZC0+Z2V0X21ham9yICgpID09IERFVl9QVFlTX01BSk9SIHx8Ci0JICAgICAgY2ZkLT5nZXRfbWFq b3IgKCkgPT0gREVWX0NPTlNfTUFKT1IpCi0JICAgIHVzZWQgKys7Ci0JICBpZiAoY2ZkLT5nZXRf bWFqb3IgKCkgPT0gREVWX1BUWVNfTUFKT1IgJiYKLQkgICAgICBjZmQtPmdldF9taW5vciAoKSA9 PSBwY29uX2F0dGFjaGVkX3RvKQotCSAgICBhdHRhY2hlZCArKzsKLQl9Ci0KLSAgICAgIC8qIENh bGwgRnJlZUNvbnNvbGUoKSBpZiBubyB0dHkgaXMgb3BlbmVkIGFuZCB0aGUgcHJvY2VzcwotCSBp cyBhdHRhY2hlZCB0byBjb25zb2xlIGNvcnJlc3BvbmRpbmcgdG8gdHR5LiBUaGlzIGlzCi0JIG5l ZWRlZCB0byBtYWtlIEdOVSBzY3JlZW4gYW5kIHRtdXggd29yayBpbiBXaW5kb3dzIDEwCi0JIDE5 MDMuICovCi0gICAgICBpZiAoYXR0YWNoZWQgPT0gMSAmJiBnZXRfbWlub3IgKCkgPT0gcGNvbl9h dHRhY2hlZF90bykKLQlwY29uX2F0dGFjaGVkX3RvID0gLTE7Ci0gICAgICBpZiAodXNlZCA9PSAx IC8qIEFib3V0IHRvIGNsb3NlIHRoaXMgdHR5ICovKQotCXsKLQkgIGluaXRfY29uc29sZV9oYW5k bGVyIChmYWxzZSk7Ci0JICBmcmVlX2F0dGFjaGVkX2NvbnNvbGUgKCk7Ci0JfQotICAgIH0KIAog ICAvKiBTZXQgbG9jYWxlICovCiAgIHNldHVwX2xvY2FsZSAoKTsKIAogICAvKiBIb29rIENvbnNv bGUgQVBJICovCi0gIGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0gICAgewogI2RlZmluZSBE T19IT09LKG1vZHVsZSwgbmFtZSkgXAotICAgICAgaWYgKCFuYW1lIyNfT3JpZykgXAotCXsgXAot CSAgdm9pZCAqYXBpID0gaG9va19hcGkgKG1vZHVsZSwgI25hbWUsICh2b2lkICopIG5hbWUjI19I b29rZWQpOyBcCi0JICBuYW1lIyNfT3JpZyA9IChfX3R5cGVvZl9fIChuYW1lKSAqKSBhcGk7IFwK LQkgIC8qaWYgKGFwaSkgc3lzdGVtX3ByaW50ZiAoI25hbWUgIiBob29rZWQuIik7Ki8gXAotCX0K LSAgICAgIERPX0hPT0sgKE5VTEwsIFdyaXRlRmlsZSk7Ci0gICAgICBET19IT09LIChOVUxMLCBX cml0ZUNvbnNvbGVBKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFdyaXRlQ29uc29sZVcpOwotICAg ICAgRE9fSE9PSyAoTlVMTCwgUmVhZEZpbGUpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgUmVhZENv bnNvbGVBKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFJlYWRDb25zb2xlVyk7Ci0gICAgICBET19I T09LIChOVUxMLCBXcml0ZUNvbnNvbGVPdXRwdXRBKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFdy aXRlQ29uc29sZU91dHB1dFcpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgV3JpdGVDb25zb2xlT3V0 cHV0Q2hhcmFjdGVyQSk7Ci0gICAgICBET19IT09LIChOVUxMLCBXcml0ZUNvbnNvbGVPdXRwdXRD aGFyYWN0ZXJXKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFdyaXRlQ29uc29sZU91dHB1dEF0dHJp YnV0ZSk7Ci0gICAgICBET19IT09LIChOVUxMLCBTZXRDb25zb2xlQ3Vyc29yUG9zaXRpb24pOwot ICAgICAgRE9fSE9PSyAoTlVMTCwgU2V0Q29uc29sZVRleHRBdHRyaWJ1dGUpOwotICAgICAgRE9f SE9PSyAoTlVMTCwgV3JpdGVDb25zb2xlSW5wdXRBKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFdy aXRlQ29uc29sZUlucHV0Vyk7Ci0gICAgICBET19IT09LIChOVUxMLCBSZWFkQ29uc29sZUlucHV0 QSk7Ci0gICAgICBET19IT09LIChOVUxMLCBSZWFkQ29uc29sZUlucHV0Vyk7Ci0gICAgICBET19I T09LIChOVUxMLCBQZWVrQ29uc29sZUlucHV0QSk7Ci0gICAgICBET19IT09LIChOVUxMLCBQZWVr Q29uc29sZUlucHV0Vyk7Ci0gICAgICAvKiBDcmVhdGVQcm9jZXNzKCkgaXMgaG9va2VkIGZvciBH REIgZXRjLiAqLwotICAgICAgRE9fSE9PSyAoTlVMTCwgQ3JlYXRlUHJvY2Vzc0EpOwotICAgICAg RE9fSE9PSyAoTlVMTCwgQ3JlYXRlUHJvY2Vzc1cpOworICBpZiAoIW5hbWUjI19PcmlnKSBcCisg ICAgeyBcCisgICAgICB2b2lkICphcGkgPSBob29rX2FwaSAobW9kdWxlLCAjbmFtZSwgKHZvaWQg KikgbmFtZSMjX0hvb2tlZCk7IFwKKyAgICAgIG5hbWUjI19PcmlnID0gKF9fdHlwZW9mX18gKG5h bWUpICopIGFwaTsgXAorICAgICAgLyppZiAoYXBpKSBzeXN0ZW1fcHJpbnRmICgjbmFtZSAiIGhv b2tlZC4iKTsqLyBcCiAgICAgfQorICAvKiBDcmVhdGVQcm9jZXNzKCkgaXMgaG9va2VkIGZvciBH REIgZXRjLiAqLworICBET19IT09LIChOVUxMLCBDcmVhdGVQcm9jZXNzQSk7CisgIERPX0hPT0sg KE5VTEwsIENyZWF0ZVByb2Nlc3NXKTsKIH0KIAogLyogVGhpcyB0aHJlYWQgZnVuY3Rpb24gaGFu ZGxlcyB0aGUgbWFzdGVyIGNvbnRyb2wgcGlwZS4gIEl0IHdhaXRzIGZvciBhCkBAIC0zMjA2LDI3 ICsyMTQ0LDYgQEAgcmVwbHk6CiAgIHJldHVybiAwOwogfQogCi12b2lkCi1maGFuZGxlcl9wdHlf bWFzdGVyOjp0cmFuc2Zlcl9pbnB1dF90b19wY29uICh2b2lkKQotewotICBXYWl0Rm9yU2luZ2xl T2JqZWN0IChpbnB1dF9tdXRleCwgSU5GSU5JVEUpOwotICBEV09SRCBuOwotICBzaXplX3QgdHJh bnNmZXJlZCA9IDA7Ci0gIHdoaWxlICg6OmJ5dGVzX2F2YWlsYWJsZSAobiwgZnJvbV9tYXN0ZXJf Y3lnKSAmJiBuKQotICAgIHsKLSAgICAgIGNoYXIgYnVmWzEwMjRdOwotICAgICAgUmVhZEZpbGUg KGZyb21fbWFzdGVyX2N5ZywgYnVmLCBzaXplb2YgKGJ1ZiksICZuLCAwKTsKLSAgICAgIGNoYXIg KnAgPSBidWY7Ci0gICAgICB3aGlsZSAoKHAgPSAoY2hhciAqKSBtZW1jaHIgKHAsICdcbicsIG4g LSAocCAtIGJ1ZikpKSkKLQkqcCA9ICdccic7Ci0gICAgICBpZiAoV3JpdGVGaWxlICh0b19zbGF2 ZSwgYnVmLCBuLCAmbiwgMCkpCi0JdHJhbnNmZXJlZCArPSBuOwotICAgIH0KLSAgaWYgKHRyYW5z ZmVyZWQpCi0gICAgZ2V0X3R0eXAgKCktPnBjb25faW5fZW1wdHkgPSBmYWxzZTsKLSAgUmVsZWFz ZU11dGV4IChpbnB1dF9tdXRleCk7Ci19Ci0KIHN0YXRpYyBEV09SRCBXSU5BUEkKIHB0eV9tYXN0 ZXJfdGhyZWFkIChWT0lEICphcmcpCiB7CkBAIC0zMjQyLDIzICsyMTU5LDcgQEAgZmhhbmRsZXJf cHR5X21hc3Rlcjo6cHR5X21hc3Rlcl9md2RfdGhyZWFkICgpCiAgIHRlcm1pb3NfcHJpbnRmICgi U3RhcnRlZC4iKTsKICAgZm9yICg7OykKICAgICB7Ci0gICAgICBpZiAoZ2V0X3BzZXVkb19jb25z b2xlICgpKQotCXsKLQkgIGdldF90dHlwICgpLT5wY29uX2xhc3RfdGltZSA9IEdldFRpY2tDb3Vu dCAoKTsKLQkgIHdoaWxlICg6OmJ5dGVzX2F2YWlsYWJsZSAocmxlbiwgZnJvbV9zbGF2ZSkgJiYg cmxlbiA9PSAwKQotCSAgICB7Ci0JICAgICAgLyogRm9yY2libHkgdHJhbnNmZXIgaW5wdXQgaWYg aXQgaXMgcmVxdWVzdGVkIGJ5IHNsYXZlLgotCQkgVGhpcyBoYXBwZW5zIHdoZW4gaW5wdXQgZGF0 YSBzaG91bGQgYmUgdHJhbnNmZXJlZAotCQkgZnJvbSB0aGUgaW5wdXQgcGlwZSBmb3IgY3lnd2lu IGFwcHMgdG8gdGhlIGlucHV0IHBpcGUKLQkJIGZvciBuYXRpdmUgYXBwcy4gKi8KLQkgICAgICBp ZiAoZ2V0X3R0eXAgKCktPnJlcV90cmFuc2Zlcl9pbnB1dF90b19wY29uKQotCQl7Ci0JCSAgdHJh bnNmZXJfaW5wdXRfdG9fcGNvbiAoKTsKLQkJICBnZXRfdHR5cCAoKS0+cmVxX3RyYW5zZmVyX2lu cHV0X3RvX3Bjb24gPSBmYWxzZTsKLQkJfQotCSAgICAgIFNsZWVwICgxKTsKLQkgICAgfQotCX0K KyAgICAgIGdldF90dHlwICgpLT5wY29uX2xhc3RfdGltZSA9IEdldFRpY2tDb3VudCAoKTsKICAg ICAgIGlmICghUmVhZEZpbGUgKGZyb21fc2xhdmUsIG91dGJ1Ziwgc2l6ZW9mIG91dGJ1ZiwgJnJs ZW4sIE5VTEwpKQogCXsKIAkgIHRlcm1pb3NfcHJpbnRmICgiUmVhZEZpbGUgZm9yIGZvcndhcmRp bmcgZmFpbGVkLCAlRSIpOwpAQCAtMzI2NiwxNCArMjE2Nyw5IEBAIGZoYW5kbGVyX3B0eV9tYXN0 ZXI6OnB0eV9tYXN0ZXJfZndkX3RocmVhZCAoKQogCX0KICAgICAgIHNzaXplX3Qgd2xlbiA9IHJs ZW47CiAgICAgICBjaGFyICpwdHIgPSBvdXRidWY7Ci0gICAgICBpZiAoZ2V0X3BzZXVkb19jb25z b2xlICgpKQorICAgICAgaWYgKGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlKQogCXsKLQkg IC8qIEF2b2lkIGR1cGxpY2F0aW5nIHNsYXZlIG91dHB1dCB3aGljaCBpcyBhbHJlYWR5IHNlbnQg dG8KLQkgICAgIHRvX21hc3Rlcl9jeWcgKi8KLQkgIGlmICghZ2V0X3R0eXAgKCktPnN3aXRjaF90 b19wY29uX291dCkKLQkgICAgY29udGludWU7Ci0KLQkgIC8qIEF2b2lkIHNldHRpbmcgd2luZG93 IHRpdGxlIHRvICJjeWd3aW4tY29uc29sZS1oZWxwZXIuZXhlIiAqLworCSAgLyogUmVtb3ZlIENT SSA+IFBtIG0gKi8KIAkgIGludCBzdGF0ZSA9IDA7CiAJICBpbnQgc3RhcnRfYXQgPSAwOwogCSAg Zm9yIChEV09SRCBpPTA7IGk8cmxlbjsgaSsrKQpAQCAtMzI4Myw0MyArMjE3OSw4IEBAIGZoYW5k bGVyX3B0eV9tYXN0ZXI6OnB0eV9tYXN0ZXJfZndkX3RocmVhZCAoKQogCQlzdGF0ZSA9IDE7CiAJ CWNvbnRpbnVlOwogCSAgICAgIH0KLQkgICAgZWxzZSBpZiAoKHN0YXRlID09IDEgJiYgb3V0YnVm W2ldID09ICddJykgfHwKLQkJICAgICAoc3RhdGUgPT0gMiAmJiBvdXRidWZbaV0gPT0gJzAnKSB8 fAotCQkgICAgIChzdGF0ZSA9PSAzICYmIG91dGJ1ZltpXSA9PSAnOycpKQotCSAgICAgIHsKLQkJ c3RhdGUgKys7Ci0JCWNvbnRpbnVlOwotCSAgICAgIH0KLQkgICAgZWxzZSBpZiAoc3RhdGUgPT0g NCAmJiBvdXRidWZbaV0gPT0gJ1xhJykKLQkgICAgICB7Ci0JCWNvbnN0IGNoYXIgKmhlbHBlcl9z dHIgPSAiXFxiaW5cXGN5Z3dpbi1jb25zb2xlLWhlbHBlci5leGUiOwotCQlpZiAobWVtbWVtICgm b3V0YnVmW3N0YXJ0X2F0XSwgaSArIDEgLSBzdGFydF9hdCwKLQkJCSAgICBoZWxwZXJfc3RyLCBz dHJsZW4gKGhlbHBlcl9zdHIpKSkKLQkJICB7Ci0JCSAgICBtZW1tb3ZlICgmb3V0YnVmW3N0YXJ0 X2F0XSwgJm91dGJ1ZltpKzFdLCBybGVuLWktMSk7Ci0JCSAgICBybGVuID0gd2xlbiA9IHN0YXJ0 X2F0ICsgcmxlbiAtIGkgLSAxOwotCQkgIH0KLQkJc3RhdGUgPSAwOwotCQljb250aW51ZTsKLQkg ICAgICB9Ci0JICAgIGVsc2UgaWYgKG91dGJ1ZltpXSA9PSAnXGEnKQotCSAgICAgIHsKLQkJc3Rh dGUgPSAwOwotCQljb250aW51ZTsKLQkgICAgICB9Ci0KLQkgIC8qIFJlbW92ZSBDU0kgPiBQbSBt ICovCi0JICBzdGF0ZSA9IDA7Ci0JICBzdGFydF9hdCA9IDA7Ci0JICBmb3IgKERXT1JEIGk9MDsg aTxybGVuOyBpKyspCi0JICAgIGlmIChvdXRidWZbaV0gPT0gJ1wwMzMnKQotCSAgICAgIHsKLQkJ c3RhcnRfYXQgPSBpOwotCQlzdGF0ZSA9IDE7Ci0JCWNvbnRpbnVlOwotCSAgICAgIH0KLQkgICAg ZWxzZSBpZiAoKHN0YXRlID09IDEgJiYgb3V0YnVmW2ldID09ICdbJykgfHwKLQkJICAgICAoc3Rh dGUgPT0gMiAmJiBvdXRidWZbaV0gPT0gJz4nKSkKKwkgICAgZWxzZSBpZiAoKHN0YXRlID09IDEg JiYgb3V0YnVmW2ldID09ICdbJykKKwkJICAgICB8fCAoc3RhdGUgPT0gMiAmJiBvdXRidWZbaV0g PT0gJz4nKSkKIAkgICAgICB7CiAJCXN0YXRlICsrOwogCQljb250aW51ZTsKQEAgLTMzODgsMjAx ICsyMjQ5LDYgQEAgcHR5X21hc3Rlcl9md2RfdGhyZWFkIChWT0lEICphcmcpCiAgIHJldHVybiAo KGZoYW5kbGVyX3B0eV9tYXN0ZXIgKikgYXJnKS0+cHR5X21hc3Rlcl9md2RfdGhyZWFkICgpOwog fQogCi0vKiBJZiBtYXN0ZXIgcHJvY2VzcyBpcyBydW5uaW5nIGFzIHNlcnZpY2UsIGF0dGFjaGlu ZyB0bwotICAgcHNldWRvIGNvbnNvbGUgc2hvdWxkIGJlIGRvbmUgaW4gZm9yay4gSWYgYXR0YWNo aW5nCi0gICBpcyBkb25lIGluIHNwYXduIGZvciBpbmV0ZCBvciBzc2hkLCBpdCBmYWlscyBiZWNh dXNlCi0gICB0aGUgaGVscGVyIHByb2Nlc3MgaXMgcnVubmluZyBhcyBwcml2aWxlZ2VkIHVzZXIg d2hpbGUKLSAgIHNsYXZlIHByb2Nlc3MgaXMgbm90LiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8g ZGV0ZXJtaW5lCi0gICBpZiB0aGUgcHJvY2VzcyBpcyBydW5uaW5nIGFzIGEgc3J2aWNlIG9yIG5v dC4gKi8KLWlubGluZSBzdGF0aWMgYm9vbAotaXNfcnVubmluZ19hc19zZXJ2aWNlICh2b2lkKQot ewotICByZXR1cm4gY2hlY2tfdG9rZW5fbWVtYmVyc2hpcCAod2VsbF9rbm93bl9zZXJ2aWNlX3Np ZCkKLSAgICB8fCBjeWdoZWFwLT51c2VyLnNhdmVkX3NpZCAoKSA9PSB3ZWxsX2tub3duX3N5c3Rl bV9zaWQ7Ci19Ci0KLWJvb2wKLWZoYW5kbGVyX3B0eV9tYXN0ZXI6OnNldHVwX3BzZXVkb2NvbnNv bGUgKCkKLXsKLSAgaWYgKGRpc2FibGVfcGNvbikKLSAgICByZXR1cm4gZmFsc2U7Ci0gIC8qIElm IHRoZSBsZWdhY3kgY29uc29sZSBtb2RlIGlzIGVuYWJsZWQsIHBzZXVkbyBjb25zb2xlIHNlZW1z Ci0gICAgIG5vdCB0byB3b3JrIGFzIGV4cGVjdGVkLiBUbyBkZXRlcm1pbmUgY29uc29sZSBtb2Rl LCByZWdpc3RyeQotICAgICBrZXkgRm9yY2VWMiBpbiBIS0VZX0NVUlJFTlRfVVNFUlxDb25zb2xl IGlzIGNoZWNrZWQuICovCi0gIHJlZ19rZXkgcmVnIChIS0VZX0NVUlJFTlRfVVNFUiwgS0VZX1JF QUQsIEwiQ29uc29sZSIsIE5VTEwpOwotICBpZiAocmVnLmVycm9yICgpKQotICAgIHJldHVybiBm YWxzZTsKLSAgaWYgKHJlZy5nZXRfZHdvcmQgKEwiRm9yY2VWMiIsIDEpID09IDApCi0gICAgewot ICAgICAgdGVybWlvc19wcmludGYgKCJQc2V1ZG8gY29uc29sZSBpcyBkaXNhYmxlZCAiCi0JCSAg ICAgICJiZWNhdXNlIHRoZSBsZWdhY3kgY29uc29sZSBtb2RlIGlzIGVuYWJsZWQuIik7Ci0gICAg ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gIC8qIFBzZXVkbyBjb25zb2xlIHN1cHByb3QgaXMg cmVhbGl6ZWQgdXNpbmcgYSB0cmlja3kgdGVjaG5pYy4KLSAgICAgUFRZIG5lZWQgdGhlIHBzZXVk byBjb25zb2xlIGhhbmRsZXMsIGhvd2V2ZXIsIHRoZXkgY2Fubm90Ci0gICAgIGJlIHJldHJpZXZl ZCBieSBub3JtYWwgcHJvY2VkdXJlLiBUaGVyZWZvcmUsIHJ1biBhIGhlbHBlcgotICAgICBwcm9j ZXNzIGluIGEgcHNldWRvIGNvbnNvbGUgYW5kIGdldCB0aGVtIGZyb20gdGhlIGhlbHBlci4KLSAg ICAgU2xhdmUgcHJvY2VzcyB3aWxsIGF0dGFjaCB0byB0aGUgcHNldWRvIGNvbnNvbGUgaW4gdGhl Ci0gICAgIGhlbHBlciBwcm9jZXNzIHVzaW5nIEF0dGFjaENvbnNvbGUoKS4gKi8KLSAgQ09PUkQg c2l6ZSA9IHsKLSAgICAoU0hPUlQpIGdldF90dHlwICgpLT53aW5zaXplLndzX2NvbCwKLSAgICAo U0hPUlQpIGdldF90dHlwICgpLT53aW5zaXplLndzX3JvdwotICB9OwotICBDcmVhdGVQaXBlICgm ZnJvbV9tYXN0ZXIsICZ0b19zbGF2ZSwgJnNlY19ub25lLCAwKTsKLSAgU2V0TGFzdEVycm9yIChF UlJPUl9TVUNDRVNTKTsKLSAgSFJFU1VMVCByZXMgPSBDcmVhdGVQc2V1ZG9Db25zb2xlIChzaXpl LCBmcm9tX21hc3RlciwgdG9fbWFzdGVyLAotCQkJCSAgICAgMCwgJmdldF90dHlwICgpLT5oX3Bz ZXVkb19jb25zb2xlKTsKLSAgaWYgKHJlcyAhPSBTX09LIHx8IEdldExhc3RFcnJvciAoKSA9PSBF UlJPUl9QUk9DX05PVF9GT1VORCkKLSAgICB7Ci0gICAgICBpZiAocmVzICE9IFNfT0spCi0Jc3lz dGVtX3ByaW50ZiAoIkNyZWF0ZVBzZXVkb0NvbnNvbGUoKSBmYWlsZWQuICUwOHhcbiIsCi0JCSAg ICAgICBHZXRMYXN0RXJyb3IgKCkpOwotICAgICAgZ290byBmYWxsYmFjazsKLSAgICB9Ci0KLSAg LyogSWYgbWFzdGVyIHByb2Nlc3MgaXMgcnVubmluZyBhcyBzZXJ2aWNlLCBhdHRhY2hpbmcgdG8K LSAgICAgcHNldWRvIGNvbnNvbGUgc2hvdWxkIGJlIGRvbmUgaW4gZm9yay4gSWYgYXR0YWNoaW5n Ci0gICAgIGlzIGRvbmUgaW4gc3Bhd24gZm9yIGluZXRkIG9yIHNzaGQsIGl0IGZhaWxzIGJlY2F1 c2UKLSAgICAgdGhlIGhlbHBlciBwcm9jZXNzIGlzIHJ1bm5pbmcgYXMgcHJpdmlsZWdlZCB1c2Vy IHdoaWxlCi0gICAgIHNsYXZlIHByb2Nlc3MgaXMgbm90LiAqLwotICBpZiAoaXNfcnVubmluZ19h c19zZXJ2aWNlICgpKQotICAgIGdldF90dHlwICgpLT5hdHRhY2hfcGNvbl9pbl9mb3JrID0gdHJ1 ZTsKLQotICBTVEFSVFVQSU5GT0VYVyBzaV9oZWxwZXI7Ci0gIEhBTkRMRSBoZWxsbywgZ29vZGJ5 ZTsKLSAgSEFORExFIGhyLCBodzsKLSAgUFJPQ0VTU19JTkZPUk1BVElPTiBwaV9oZWxwZXI7Ci0g IEhBTkRMRSBocENvbkluLCBocENvbk91dDsKLSAgewotICAgIFNJWkVfVCBieXRlc1JlcXVpcmVk OwotICAgIEluaXRpYWxpemVQcm9jVGhyZWFkQXR0cmlidXRlTGlzdCAoTlVMTCwgMiwgMCwgJmJ5 dGVzUmVxdWlyZWQpOwotICAgIFplcm9NZW1vcnkgKCZzaV9oZWxwZXIsIHNpemVvZiAoc2lfaGVs cGVyKSk7Ci0gICAgc2lfaGVscGVyLlN0YXJ0dXBJbmZvLmNiID0gc2l6ZW9mIChTVEFSVFVQSU5G T0VYVyk7Ci0gICAgc2lfaGVscGVyLmxwQXR0cmlidXRlTGlzdCA9IChQUFJPQ19USFJFQURfQVRU UklCVVRFX0xJU1QpCi0gICAgICBIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBieXRl c1JlcXVpcmVkKTsKLSAgICBpZiAoc2lfaGVscGVyLmxwQXR0cmlidXRlTGlzdCA9PSBOVUxMKQot ICAgICAgZ290byBjbGVhbnVwX3BzZXVkb19jb25zb2xlOwotICAgIGlmICghSW5pdGlhbGl6ZVBy b2NUaHJlYWRBdHRyaWJ1dGVMaXN0IChzaV9oZWxwZXIubHBBdHRyaWJ1dGVMaXN0LAotCQkJCQkg ICAgMiwgMCwgJmJ5dGVzUmVxdWlyZWQpKQotICAgICAgZ290byBjbGVhbnVwX2hlYXA7Ci0gICAg aWYgKCFVcGRhdGVQcm9jVGhyZWFkQXR0cmlidXRlIChzaV9oZWxwZXIubHBBdHRyaWJ1dGVMaXN0 LAotCQkJCSAgICAwLAotCQkJCSAgICBQUk9DX1RIUkVBRF9BVFRSSUJVVEVfUFNFVURPQ09OU09M RSwKLQkJCQkgICAgZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGUsCi0JCQkJICAgIHNpemVv ZiAoZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGUpLAotCQkJCSAgICBOVUxMLCBOVUxMKSkK LSAgICAgIGdvdG8gY2xlYW51cF9oZWFwOwotICAgIC8qIENyZWF0ZSBldmVudHMgZm9yIHN0YXJ0 L3N0b3AgaGVscGVyIHByb2Nlc3MuICovCi0gICAgaGVsbG8gPSBDcmVhdGVFdmVudCAoJnNlY19u b25lLCB0cnVlLCBmYWxzZSwgTlVMTCk7Ci0gICAgZ29vZGJ5ZSA9IENyZWF0ZUV2ZW50ICgmc2Vj X25vbmUsIHRydWUsIGZhbHNlLCBOVUxMKTsKLSAgICAvKiBDcmVhdGUgYSBwaXBlIGZvciByZWNl aXZpbmcgcHNldWRvIGNvbnNvbGUgaGFuZGxlcyAqLwotICAgIENyZWF0ZVBpcGUgKCZociwgJmh3 LCAmc2VjX25vbmUsIDApOwotICAgIC8qIEluaGVyaXQgb25seSBoYW5kbGVzIHdoaWNoIGFyZSBu ZWVkZWQgYnkgaGVscGVyLiAqLwotICAgIEhBTkRMRSBoYW5kbGVzX3RvX2luaGVyaXRbXSA9IHto ZWxsbywgZ29vZGJ5ZSwgaHd9OwotICAgIGlmICghVXBkYXRlUHJvY1RocmVhZEF0dHJpYnV0ZSAo c2lfaGVscGVyLmxwQXR0cmlidXRlTGlzdCwKLQkJCQkgICAgMCwKLQkJCQkgICAgUFJPQ19USFJF QURfQVRUUklCVVRFX0hBTkRMRV9MSVNULAotCQkJCSAgICBoYW5kbGVzX3RvX2luaGVyaXQsCi0J CQkJICAgIHNpemVvZiAoaGFuZGxlc190b19pbmhlcml0KSwKLQkJCQkgICAgTlVMTCwgTlVMTCkp Ci0gICAgICBnb3RvIGNsZWFudXBfZXZlbnRfYW5kX3BpcGVzOwotICAgIC8qIENyZWF0ZSBoZWxw ZXIgcHJvY2VzcyAqLwotICAgIFdDSEFSIGNtZFtNQVhfUEFUSF07Ci0gICAgcGF0aF9jb252IGhl bHBlciAoIi9iaW4vY3lnd2luLWNvbnNvbGUtaGVscGVyLmV4ZSIpOwotICAgIHNpemVfdCBsZW4g PSBoZWxwZXIuZ2V0X3dpZGVfd2luMzJfcGF0aF9sZW4gKCk7Ci0gICAgaGVscGVyLmdldF93aWRl X3dpbjMyX3BhdGggKGNtZCk7Ci0gICAgX19zbWFsbF9zd3ByaW50ZiAoY21kICsgbGVuLCBMIiAl cCAlcCAlcCIsIGhlbGxvLCBnb29kYnllLCBodyk7Ci0gICAgc2lfaGVscGVyLlN0YXJ0dXBJbmZv LmR3RmxhZ3MgPSBTVEFSVEZfVVNFU1RESEFORExFUzsKLSAgICBzaV9oZWxwZXIuU3RhcnR1cElu Zm8uaFN0ZElucHV0ID0gTlVMTDsKLSAgICBzaV9oZWxwZXIuU3RhcnR1cEluZm8uaFN0ZE91dHB1 dCA9IE5VTEw7Ci0gICAgc2lfaGVscGVyLlN0YXJ0dXBJbmZvLmhTdGRFcnJvciA9IE5VTEw7Ci0g ICAgaWYgKCFDcmVhdGVQcm9jZXNzVyAoTlVMTCwgY21kLCAmc2VjX25vbmUsICZzZWNfbm9uZSwK LQkJCSBUUlVFLCBFWFRFTkRFRF9TVEFSVFVQSU5GT19QUkVTRU5ULAotCQkJIE5VTEwsIE5VTEws ICZzaV9oZWxwZXIuU3RhcnR1cEluZm8sICZwaV9oZWxwZXIpKQotICAgICAgZ290byBjbGVhbnVw X2V2ZW50X2FuZF9waXBlczsKLSAgICBmb3IgKDs7KQotICAgICAgewotICAgICAgICBEV09SRCB3 YWl0X3Jlc3VsdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QgKGhlbGxvLCA1MDApOwotCWlmICh3YWl0 X3Jlc3VsdCA9PSBXQUlUX09CSkVDVF8wKQotCSAgYnJlYWs7Ci0JaWYgKHdhaXRfcmVzdWx0ICE9 IFdBSVRfVElNRU9VVCkKLQkgIGdvdG8gY2xlYW51cF9oZWxwZXJfcHJvY2VzczsKLQlEV09SRCBl eGl0X2NvZGU7Ci0JaWYgKCFHZXRFeGl0Q29kZVByb2Nlc3MocGlfaGVscGVyLmhQcm9jZXNzLCAm ZXhpdF9jb2RlKSkKLQkgIGdvdG8gY2xlYW51cF9oZWxwZXJfcHJvY2VzczsKLQlpZiAoZXhpdF9j b2RlID09IFNUSUxMX0FDVElWRSkKLQkgIGNvbnRpbnVlOwotCWlmIChleGl0X2NvZGUgIT0gMCB8 fAotCSAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0IChoZWxsbywgNTAwKSAhPSBXQUlUX09CSkVDVF8w KQotCSAgZ290byBjbGVhbnVwX2hlbHBlcl9wcm9jZXNzOwotCWJyZWFrOwotICAgICAgfQotICAg IENsb3NlSGFuZGxlIChoZWxsbyk7Ci0gICAgQ2xvc2VIYW5kbGUgKHBpX2hlbHBlci5oVGhyZWFk KTsKLSAgICAvKiBSZXRyaWV2ZSBwc2V1ZG8gY29uc29sZSBoYW5kbGVzICovCi0gICAgRFdPUkQg ckxlbjsKLSAgICBjaGFyIGJ1Zls2NF07Ci0gICAgaWYgKCFSZWFkRmlsZSAoaHIsIGJ1Ziwgc2l6 ZW9mIChidWYpLCAmckxlbiwgTlVMTCkpCi0gICAgICBnb3RvIGNsZWFudXBfaGVscGVyX3Byb2Nl c3M7Ci0gICAgYnVmW3JMZW5dID0gJ1wwJzsKLSAgICBzc2NhbmYgKGJ1ZiwgIlN0ZEhhbmRsZXM9 JXAsJXAiLCAmaHBDb25JbiwgJmhwQ29uT3V0KTsKLSAgICBpZiAoIUR1cGxpY2F0ZUhhbmRsZSAo cGlfaGVscGVyLmhQcm9jZXNzLCBocENvbkluLAotCQkJICBHZXRDdXJyZW50UHJvY2VzcyAoKSwg JmhwQ29uSW4sIDAsCi0JCQkgIFRSVUUsIERVUExJQ0FURV9TQU1FX0FDQ0VTUykpCi0gICAgICBn b3RvIGNsZWFudXBfaGVscGVyX3Byb2Nlc3M7Ci0gICAgaWYgKCFEdXBsaWNhdGVIYW5kbGUgKHBp X2hlbHBlci5oUHJvY2VzcywgaHBDb25PdXQsCi0JCQkgIEdldEN1cnJlbnRQcm9jZXNzICgpLCAm aHBDb25PdXQsIDAsCi0JCQkgIFRSVUUsIERVUExJQ0FURV9TQU1FX0FDQ0VTUykpCi0gICAgICBn b3RvIGNsZWFudXBfcGNvbl9pbjsKLSAgICBDbG9zZUhhbmRsZSAoaHIpOwotICAgIENsb3NlSGFu ZGxlIChodyk7Ci0gICAgLyogQ2xlYW4gdXAgKi8KLSAgICBEZWxldGVQcm9jVGhyZWFkQXR0cmli dXRlTGlzdCAoc2lfaGVscGVyLmxwQXR0cmlidXRlTGlzdCk7Ci0gICAgSGVhcEZyZWUgKEdldFBy b2Nlc3NIZWFwICgpLCAwLCBzaV9oZWxwZXIubHBBdHRyaWJ1dGVMaXN0KTsKLSAgfQotICAvKiBT ZXR0aW5nIGluZm9ybWF0aW9uIG9mIHN0dWZmcyByZWdhcmRpbmcgcHNldWRvIGNvbnNvbGUgKi8K LSAgZ2V0X3R0eXAgKCktPmhfaGVscGVyX2dvb2RieWUgPSBnb29kYnllOwotICBnZXRfdHR5cCAo KS0+aF9oZWxwZXJfcHJvY2VzcyA9IHBpX2hlbHBlci5oUHJvY2VzczsKLSAgZ2V0X3R0eXAgKCkt PmhlbHBlcl9wcm9jZXNzX2lkID0gcGlfaGVscGVyLmR3UHJvY2Vzc0lkOwotICBDbG9zZUhhbmRs ZSAoZnJvbV9tYXN0ZXIpOwotICBDbG9zZUhhbmRsZSAodG9fbWFzdGVyKTsKLSAgZnJvbV9tYXN0 ZXIgPSBocENvbkluOwotICB0b19tYXN0ZXIgPSBocENvbk91dDsKLSAgUmVzaXplUHNldWRvQ29u c29sZSAoZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGUsIHNpemUpOwotICByZXR1cm4gdHJ1 ZTsKLQotY2xlYW51cF9wY29uX2luOgotICBDbG9zZUhhbmRsZSAoaHBDb25Jbik7Ci1jbGVhbnVw X2hlbHBlcl9wcm9jZXNzOgotICBTZXRFdmVudCAoZ29vZGJ5ZSk7Ci0gIFdhaXRGb3JTaW5nbGVP YmplY3QgKHBpX2hlbHBlci5oUHJvY2VzcywgSU5GSU5JVEUpOwotICBDbG9zZUhhbmRsZSAocGlf aGVscGVyLmhQcm9jZXNzKTsKLSAgZ290byBza2lwX2Nsb3NlX2hlbGxvOwotY2xlYW51cF9ldmVu dF9hbmRfcGlwZXM6Ci0gIENsb3NlSGFuZGxlIChoZWxsbyk7Ci1za2lwX2Nsb3NlX2hlbGxvOgot ICBDbG9zZUhhbmRsZSAoZ29vZGJ5ZSk7Ci0gIENsb3NlSGFuZGxlIChocik7Ci0gIENsb3NlSGFu ZGxlIChodyk7Ci1jbGVhbnVwX2hlYXA6Ci0gIEhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwg MCwgc2lfaGVscGVyLmxwQXR0cmlidXRlTGlzdCk7Ci1jbGVhbnVwX3BzZXVkb19jb25zb2xlOgot ICB7Ci0gICAgSFBDT05fSU5URVJOQUwgKmhwID0gKEhQQ09OX0lOVEVSTkFMICopIGdldF90dHlw ICgpLT5oX3BzZXVkb19jb25zb2xlOwotICAgIEhBTkRMRSB0bXAgPSBocC0+aENvbkhvc3RQcm9j ZXNzOwotICAgIENsb3NlUHNldWRvQ29uc29sZSAoZ2V0X3BzZXVkb19jb25zb2xlICgpKTsKLSAg ICBDbG9zZUhhbmRsZSAodG1wKTsKLSAgfQotZmFsbGJhY2s6Ci0gIENsb3NlSGFuZGxlIChmcm9t X21hc3Rlcik7Ci0gIENsb3NlSGFuZGxlICh0b19zbGF2ZSk7Ci0gIGZyb21fbWFzdGVyID0gZnJv bV9tYXN0ZXJfY3lnOwotICB0b19zbGF2ZSA9IE5VTEw7Ci0gIGdldF90dHlwICgpLT5oX3BzZXVk b19jb25zb2xlID0gTlVMTDsKLSAgcmV0dXJuIGZhbHNlOwotfQotCiBib29sCiBmaGFuZGxlcl9w dHlfbWFzdGVyOjpzZXR1cCAoKQogewpAQCAtMzU5NSwxMSArMjI2MSw2IEBAIGZoYW5kbGVyX3B0 eV9tYXN0ZXI6OnNldHVwICgpCiAgIGlmICh1bml0IDwgMCkKICAgICByZXR1cm4gZmFsc2U7CiAK LSAgLyogZnJvbV9tYXN0ZXIgc2hvdWxkIGJlIHVzZWQgZm9yIHBzZXVkbyBjb25zb2xlLgotICAg ICBKdXN0IGNvcHkgZnJvbV9tYXN0ZXJfY3lnIGhlcmUgZm9yIHRoZSBjYXNlIHRoYXQKLSAgICAg cHNldWRvIGNvbnNvbGUgaXMgbm90IGF2YWlsYWJsZS4gKi8KLSAgZnJvbV9tYXN0ZXIgPSBmcm9t X21hc3Rlcl9jeWc7Ci0KICAgUHJvdGVjdEhhbmRsZTEgKGdldF9vdXRwdXRfaGFuZGxlICgpLCB0 b19wdHkpOwogCiAgIHR0eSYgdCA9ICpjeWd3aW5fc2hhcmVkLT50dHlbdW5pdF07CkBAIC0zNjk4 LDE1ICsyMzU5LDIxIEBAIGZoYW5kbGVyX3B0eV9tYXN0ZXI6OnNldHVwICgpCiAgICAgICBnb3Rv IGVycjsKICAgICB9CiAKLSAgdC53aW5zaXplLndzX2NvbCA9IDgwOwotICB0LndpbnNpemUud3Nf cm93ID0gMjU7Ci0KLSAgc2V0dXBfcHNldWRvY29uc29sZSAoKTsKKyAgX19zbWFsbF9zcHJpbnRm IChwaXBlbmFtZSwgInB0eSVkLXRvLXNsYXZlIiwgdW5pdCk7CisgIHJlcyA9IGZoYW5kbGVyX3Bp cGU6OmNyZWF0ZSAoJnNlY19ub25lLCAmZnJvbV9tYXN0ZXIsICZ0b19zbGF2ZSwKKwkJCSAgICAg ICBmaGFuZGxlcl9wdHlfY29tbW9uOjpwaXBlc2l6ZSwgcGlwZW5hbWUsIDApOworICBpZiAocmVz KQorICAgIHsKKyAgICAgIGVycnN0ciA9ICJpbnB1dCBwaXBlIjsKKyAgICAgIGdvdG8gZXJyOwor ICAgIH0KIAogICB0LnNldF9mcm9tX21hc3RlciAoZnJvbV9tYXN0ZXIpOwogICB0LnNldF9mcm9t X21hc3Rlcl9jeWcgKGZyb21fbWFzdGVyX2N5Zyk7CiAgIHQuc2V0X3RvX21hc3RlciAodG9fbWFz dGVyKTsKICAgdC5zZXRfdG9fbWFzdGVyX2N5ZyAodG9fbWFzdGVyX2N5Zyk7CisgIHQud2luc2l6 ZS53c19jb2wgPSA4MDsKKyAgdC53aW5zaXplLndzX3JvdyA9IDI1OwogICB0Lm1hc3Rlcl9waWQg PSBteXNlbGYtPnBpZDsKIAogICBkZXYgKCkucGFyc2UgKERFVl9QVFlNX01BSk9SLCB1bml0KTsK QEAgLTM3MTksNiArMjM4Niw3IEBAIGZoYW5kbGVyX3B0eV9tYXN0ZXI6OnNldHVwICgpCiBlcnI6 CiAgIF9fc2V0ZXJybm8gKCk7CiAgIGNsb3NlX21heWJlIChmcm9tX3NsYXZlKTsKKyAgY2xvc2Vf bWF5YmUgKHRvX3NsYXZlKTsKICAgY2xvc2VfbWF5YmUgKGdldF9oYW5kbGUgKCkpOwogICBjbG9z ZV9tYXliZSAoZ2V0X291dHB1dF9oYW5kbGUgKCkpOwogICBjbG9zZV9tYXliZSAoaW5wdXRfYXZh aWxhYmxlX2V2ZW50KTsKQEAgLTM3NzgsOSArMjQ0Niw2IEBAIGZoYW5kbGVyX3B0eV9jb21tb246 OnByb2Nlc3Nfb3Bvc3Rfb3V0cHV0IChIQU5ETEUgaCwgY29uc3Qgdm9pZCAqcHRyLCBzc2l6ZV90 JiBsCiB7CiAgIHNzaXplX3QgdG93cml0ZSA9IGxlbjsKICAgQk9PTCByZXMgPSBUUlVFOwotICBC T09MIChXSU5BUEkgKldyaXRlRnVuYykKLSAgICAoSEFORExFLCBMUENWT0lELCBEV09SRCwgTFBE V09SRCwgTFBPVkVSTEFQUEVEKTsKLSAgV3JpdGVGdW5jID0gV3JpdGVGaWxlX09yaWcgPyBXcml0 ZUZpbGVfT3JpZyA6IFdyaXRlRmlsZTsKICAgd2hpbGUgKHRvd3JpdGUpCiAgICAgewogICAgICAg aWYgKCFpc19lY2hvKQpAQCAtMzgwMyw3ICsyNDY4LDcgQEAgZmhhbmRsZXJfcHR5X2NvbW1vbjo6 cHJvY2Vzc19vcG9zdF9vdXRwdXQgKEhBTkRMRSBoLCBjb25zdCB2b2lkICpwdHIsIHNzaXplX3Qm IGwKICAgICAgIGlmICghKGdldF90dHlwICgpLT50aS5jX29mbGFnICYgT1BPU1QpKQkvLyByYXcg b3V0cHV0IG1vZGUKIAl7CiAJICBEV09SRCBuID0gTUlOIChPVVRfQlVGRkVSX1NJWkUsIHRvd3Jp dGUpOwotCSAgcmVzID0gV3JpdGVGdW5jIChoLCBwdHIsIG4sICZuLCBOVUxMKTsKKwkgIHJlcyA9 IFdyaXRlRmlsZSAoaCwgcHRyLCBuLCAmbiwgTlVMTCk7CiAJICBpZiAoIXJlcykKIAkgICAgYnJl YWs7CiAJICBwdHIgPSAoY2hhciAqKSBwdHIgKyBuOwpAQCAtMzg1Myw3ICsyNTE4LDcgQEAgZmhh bmRsZXJfcHR5X2NvbW1vbjo6cHJvY2Vzc19vcG9zdF9vdXRwdXQgKEhBTkRMRSBoLCBjb25zdCB2 b2lkICpwdHIsIHNzaXplX3QmIGwKIAkJICBicmVhazsKIAkJfQogCSAgICB9Ci0JICByZXMgPSBX cml0ZUZ1bmMgKGgsIG91dGJ1ZiwgbiwgJm4sIE5VTEwpOworCSAgcmVzID0gV3JpdGVGaWxlICho LCBvdXRidWYsIG4sICZuLCBOVUxMKTsKIAkgIGlmICghcmVzKQogCSAgICBicmVhazsKIAkgIHB0 ciA9IChjaGFyICopIHB0ciArIHJjOwpAQCAtMzg2MywzICsyNTI4LDEzNCBAQCBmaGFuZGxlcl9w dHlfY29tbW9uOjpwcm9jZXNzX29wb3N0X291dHB1dCAoSEFORExFIGgsIGNvbnN0IHZvaWQgKnB0 ciwgc3NpemVfdCYgbAogICBsZW4gLT0gdG93cml0ZTsKICAgcmV0dXJuIHJlczsKIH0KKworYm9v bAorZmhhbmRsZXJfcHR5X3NsYXZlOjpzZXR1cF9wc2V1ZG9jb25zb2xlIChTVEFSVFVQSU5GT0VY VyAqc2ksIGJvb2wgbm9wY29uKQoreworCisgIC8qIFNldHRpbmcgc3dpdGNoX3RvX3Bjb25faW4g aXMgbmVjZXNzYXJ5IGV2ZW4gaWYKKyAgICAgcHNldWRvIGNvbnNvbGUgd2lsbCBub3QgYmUgYWN0 aXZhdGVkLiAqLworICBmaGFuZGxlcl9iYXNlICpmaCA9IDo6Y3lnaGVhcC0+ZmR0YWJbMF07Cisg IGlmIChmaCAmJiBmaC0+Z2V0X21ham9yICgpID09IERFVl9QVFlTX01BSk9SKQorICAgIHsKKyAg ICAgIGZoYW5kbGVyX3B0eV9zbGF2ZSAqcHR5cyA9IChmaGFuZGxlcl9wdHlfc2xhdmUgKikgZmg7 CisgICAgICBwdHlzLT5nZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4gPSB0cnVlOworICAg ICAgaWYgKHB0eXMtPmdldF90dHlwICgpLT5wY29uX3BpZCA9PSAwCisJICB8fCAhcGluZm8gKHB0 eXMtPmdldF90dHlwICgpLT5wY29uX3BpZCkpCisJcHR5cy0+Z2V0X3R0eXAgKCktPnBjb25fcGlk ID0gbXlzZWxmLT5waWQ7CisgICAgfQorCisgIGlmIChub3Bjb24pCisgICAgcmV0dXJuIGZhbHNl OworICBpZiAoZ2V0X3R0eXAgKCktPnBjb25fcGlkICYmIGdldF90dHlwICgpLT5wY29uX3BpZCAh PSBteXNlbGYtPnBpZAorICAgICAgJiYgISFwaW5mbyAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKSkK KyAgICByZXR1cm4gZmFsc2U7CisgIGlmIChkaXNhYmxlX3Bjb24pCisgICAgcmV0dXJuIGZhbHNl OworICAvKiBJZiB0aGUgbGVnYWN5IGNvbnNvbGUgbW9kZSBpcyBlbmFibGVkLCBwc2V1ZG8gY29u c29sZSBzZWVtcworICAgICBub3QgdG8gd29yayBhcyBleHBlY3RlZC4gVG8gZGV0ZXJtaW5lIGNv bnNvbGUgbW9kZSwgcmVnaXN0cnkKKyAgICAga2V5IEZvcmNlVjIgaW4gSEtFWV9DVVJSRU5UX1VT RVJcQ29uc29sZSBpcyBjaGVja2VkLiAqLworICByZWdfa2V5IHJlZyAoSEtFWV9DVVJSRU5UX1VT RVIsIEtFWV9SRUFELCBMIkNvbnNvbGUiLCBOVUxMKTsKKyAgaWYgKHJlZy5lcnJvciAoKSkKKyAg ICByZXR1cm4gZmFsc2U7CisgIGlmIChyZWcuZ2V0X2R3b3JkIChMIkZvcmNlVjIiLCAxKSA9PSAw KQorICAgIHsKKyAgICAgIHRlcm1pb3NfcHJpbnRmICgiUHNldWRvIGNvbnNvbGUgaXMgZGlzYWJs ZWQgIgorCQkgICAgICAiYmVjYXVzZSB0aGUgbGVnYWN5IGNvbnNvbGUgbW9kZSBpcyBlbmFibGVk LiIpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICBDT09SRCBzaXplID0geworICAg IChTSE9SVCkgZ2V0X3R0eXAgKCktPndpbnNpemUud3NfY29sLAorICAgIChTSE9SVCkgZ2V0X3R0 eXAgKCktPndpbnNpemUud3Nfcm93CisgIH07CisgIGNvbnN0IERXT1JEIGluaGVyaXRfY3Vyc29y ID0gMTsKKyAgU2V0TGFzdEVycm9yIChFUlJPUl9TVUNDRVNTKTsKKyAgSFJFU1VMVCByZXMgPSBD cmVhdGVQc2V1ZG9Db25zb2xlIChzaXplLCBnZXRfaGFuZGxlICgpLCBnZXRfb3V0cHV0X2hhbmRs ZSAoKSwKKwkJCQkgICAgIGluaGVyaXRfY3Vyc29yLAorCQkJCSAgICAgJmdldF90dHlwICgpLT5o X3BzZXVkb19jb25zb2xlKTsKKyAgaWYgKHJlcyAhPSBTX09LIHx8IEdldExhc3RFcnJvciAoKSA9 PSBFUlJPUl9QUk9DX05PVF9GT1VORCkKKyAgICB7CisgICAgICBpZiAocmVzICE9IFNfT0spCisJ c3lzdGVtX3ByaW50ZiAoIkNyZWF0ZVBzZXVkb0NvbnNvbGUoKSBmYWlsZWQuICUwOHggJTA4eFxu IiwKKwkJICAgICAgIEdldExhc3RFcnJvciAoKSwgcmVzKTsKKyAgICAgIGdvdG8gZmFsbGJhY2s7 CisgICAgfQorCisgIFNJWkVfVCBieXRlc1JlcXVpcmVkOworICBJbml0aWFsaXplUHJvY1RocmVh ZEF0dHJpYnV0ZUxpc3QgKE5VTEwsIDEsIDAsICZieXRlc1JlcXVpcmVkKTsKKyAgWmVyb01lbW9y eSAoc2ksIHNpemVvZiAoKnNpKSk7CisgIHNpLT5TdGFydHVwSW5mby5jYiA9IHNpemVvZiAoU1RB UlRVUElORk9FWFcpOworICBzaS0+bHBBdHRyaWJ1dGVMaXN0ID0gKFBQUk9DX1RIUkVBRF9BVFRS SUJVVEVfTElTVCkKKyAgICBIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBieXRlc1Jl cXVpcmVkKTsKKyAgaWYgKHNpLT5scEF0dHJpYnV0ZUxpc3QgPT0gTlVMTCkKKyAgICBnb3RvIGNs ZWFudXBfcHNldWRvX2NvbnNvbGU7CisgIGlmICghSW5pdGlhbGl6ZVByb2NUaHJlYWRBdHRyaWJ1 dGVMaXN0IChzaS0+bHBBdHRyaWJ1dGVMaXN0LAorCQkJCQkgIDEsIDAsICZieXRlc1JlcXVpcmVk KSkKKyAgICBnb3RvIGNsZWFudXBfaGVhcDsKKyAgaWYgKCFVcGRhdGVQcm9jVGhyZWFkQXR0cmli dXRlIChzaS0+bHBBdHRyaWJ1dGVMaXN0LAorCQkJCSAgMCwKKwkJCQkgIFBST0NfVEhSRUFEX0FU VFJJQlVURV9QU0VVRE9DT05TT0xFLAorCQkJCSAgZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNv bGUsCisJCQkJICBzaXplb2YgKGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlKSwKKwkJCQkg IE5VTEwsIE5VTEwpKQorICAgIGdvdG8gY2xlYW51cF9oZWFwOworICBzaS0+U3RhcnR1cEluZm8u ZHdGbGFncyA9IFNUQVJURl9VU0VTVERIQU5ETEVTOworICBzaS0+U3RhcnR1cEluZm8uaFN0ZElu cHV0ID0gTlVMTDsKKyAgc2ktPlN0YXJ0dXBJbmZvLmhTdGRPdXRwdXQgPSBOVUxMOworICBzaS0+ U3RhcnR1cEluZm8uaFN0ZEVycm9yID0gTlVMTDsKKworICB7CisgICAgZmhhbmRsZXJfYmFzZSAq ZmgwID0gOjpjeWdoZWFwLT5mZHRhYlswXTsKKyAgICBpZiAoZmgwICYmIGZoMC0+Z2V0X2Rldmlj ZSAoKSAhPSBnZXRfZGV2aWNlICgpKQorICAgICAgc2ktPlN0YXJ0dXBJbmZvLmhTdGRJbnB1dCA9 IGZoMC0+Z2V0X2hhbmRsZSAoKTsKKyAgICBmaGFuZGxlcl9iYXNlICpmaDEgPSA6OmN5Z2hlYXAt PmZkdGFiWzFdOworICAgIGlmIChmaDEgJiYgZmgxLT5nZXRfZGV2aWNlICgpICE9IGdldF9kZXZp Y2UgKCkpCisgICAgICBzaS0+U3RhcnR1cEluZm8uaFN0ZE91dHB1dCA9IGZoMS0+Z2V0X291dHB1 dF9oYW5kbGUgKCk7CisgICAgZmhhbmRsZXJfYmFzZSAqZmgyID0gOjpjeWdoZWFwLT5mZHRhYlsy XTsKKyAgICBpZiAoZmgyICYmIGZoMi0+Z2V0X2RldmljZSAoKSAhPSBnZXRfZGV2aWNlICgpKQor ICAgICAgc2ktPlN0YXJ0dXBJbmZvLmhTdGRFcnJvciA9IGZoMi0+Z2V0X291dHB1dF9oYW5kbGUg KCk7CisgIH0KKworICBpZiAoZ2V0X3R0eXAgKCktPnBjb25fcGlkID09IDAgfHwgIXBpbmZvIChn ZXRfdHR5cCAoKS0+cGNvbl9waWQpKQorICAgIGdldF90dHlwICgpLT5wY29uX3BpZCA9IG15c2Vs Zi0+cGlkOworCisgIGlmIChnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSAmJiBnZXRfdHR5 cCAoKS0+cGNvbl9waWQgPT0gbXlzZWxmLT5waWQpCisgICAgeworICAgICAgSFBDT05fSU5URVJO QUwgKmhwID0gKEhQQ09OX0lOVEVSTkFMICopIGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xl OworICAgICAgZ2V0X3R0eXAgKCktPmhfcGNvbl93cml0ZV9waXBlID0gaHAtPmhXcml0ZVBpcGU7 CisgICAgfQorICBnZXRfdHR5cCAoKS0+cGNvbl9zdGFydCA9IHRydWU7CisgIHJldHVybiB0cnVl OworCitjbGVhbnVwX2hlYXA6CisgIEhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgc2kt PmxwQXR0cmlidXRlTGlzdCk7CitjbGVhbnVwX3BzZXVkb19jb25zb2xlOgorICBpZiAoZ2V0X3R0 eXAgKCktPmhfcHNldWRvX2NvbnNvbGUpCisgICAgeworICAgICAgSFBDT05fSU5URVJOQUwgKmhw ID0gKEhQQ09OX0lOVEVSTkFMICopIGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlOworICAg ICAgSEFORExFIHRtcCA9IGhwLT5oQ29uSG9zdFByb2Nlc3M7CisgICAgICBDbG9zZVBzZXVkb0Nv bnNvbGUgKGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlKTsKKyAgICAgIENsb3NlSGFuZGxl ICh0bXApOworICAgIH0KK2ZhbGxiYWNrOgorICBnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29s ZSA9IE5VTEw7CisgIHJldHVybiBmYWxzZTsKK30KKwordm9pZAorZmhhbmRsZXJfcHR5X3NsYXZl OjpjbG9zZV9wc2V1ZG9jb25zb2xlICh2b2lkKQoreworICBpZiAoZ2V0X3R0eXAgKCktPmhfcHNl dWRvX2NvbnNvbGUpCisgICAgeworICAgICAgZ2V0X3R0eXAgKCktPndhaXRfcGNvbl9md2QgKCk7 CisgICAgICBIUENPTl9JTlRFUk5BTCAqaHAgPSAoSFBDT05fSU5URVJOQUwgKikgZ2V0X3R0eXAg KCktPmhfcHNldWRvX2NvbnNvbGU7CisgICAgICBIQU5ETEUgdG1wID0gaHAtPmhDb25Ib3N0UHJv Y2VzczsKKyAgICAgIENsb3NlUHNldWRvQ29uc29sZSAoZ2V0X3R0eXAgKCktPmhfcHNldWRvX2Nv bnNvbGUpOworICAgICAgQ2xvc2VIYW5kbGUgKHRtcCk7CisgICAgICBnZXRfdHR5cCAoKS0+aF9w c2V1ZG9fY29uc29sZSA9IE5VTEw7CisgICAgICBnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25f aW4gPSBmYWxzZTsKKyAgICAgIGdldF90dHlwICgpLT5wY29uX3BpZCA9IDA7CisgICAgICBnZXRf dHR5cCAoKS0+cGNvbl9zdGFydCA9IGZhbHNlOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3dpbnN1 cC9jeWd3aW4vZm9yay5jYyBiL3dpbnN1cC9jeWd3aW4vZm9yay5jYwppbmRleCA3YzA3YjA2MmUu LjM4MTcyY2ExZSAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9mb3JrLmNjCisrKyBiL3dpbnN1 cC9jeWd3aW4vZm9yay5jYwpAQCAtMTM0LDM2ICsxMzQsNiBAQCBjaGlsZF9pbmZvOjpwcmVmb3Jr IChib29sIGRldGFjaGVkKQogaW50IF9fc3RkY2FsbAogZnJvazo6Y2hpbGQgKHZvbGF0aWxlIGNo YXIgKiB2b2xhdGlsZSBoZXJlKQogewotICBjeWdoZWFwX2ZkZW51bSBjZmQgKGZhbHNlKTsKLSAg d2hpbGUgKGNmZC5uZXh0ICgpID49IDApCi0gICAgaWYgKGNmZC0+Z2V0X21ham9yICgpID09IERF Vl9QVFlNX01BSk9SKQotICAgICAgewotCWZoYW5kbGVyX2Jhc2UgKmZoID0gY2ZkOwotCWZoYW5k bGVyX3B0eV9tYXN0ZXIgKnB0eW0gPSAoZmhhbmRsZXJfcHR5X21hc3RlciAqKSBmaDsKLQlpZiAo cHR5bS0+Z2V0X3BzZXVkb19jb25zb2xlICgpKQotCSAgewotCSAgICBkZWJ1Z19wcmludGYgKCJm b3VuZCBhIFBUWSBtYXN0ZXIgJWQ6IGhlbHBlcl9QSUQ9JWQiLAotCQkJICBwdHltLT5nZXRfbWlu b3IgKCksIHB0eW0tPmdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKSk7Ci0JICAgIGlmIChmaGFuZGxl cl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkICgKLQkJCQlwdHltLT5nZXRfaGVscGVy X3Byb2Nlc3NfaWQgKCksIHRydWUpKQotCSAgICAgIC8qIEFscmVhZHkgYXR0YWNoZWQgKi8KLQkg ICAgICBicmVhazsKLQkgICAgZWxzZQotCSAgICAgIHsKLQkJaWYgKHB0eW0tPmF0dGFjaF9wY29u X2luX2ZvcmsgKCkpCi0JCSAgewotCQkgICAgRnJlZUNvbnNvbGUgKCk7Ci0JCSAgICBpZiAoIUF0 dGFjaENvbnNvbGUgKHB0eW0tPmdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKSkpCi0JCSAgICAgIC8q IEVycm9yICovOwotCQkgICAgZWxzZQotCQkgICAgICBicmVhazsKLQkJICB9Ci0JICAgICAgfQot CSAgfQotICAgICAgfQotICBleHRlcm4gdm9pZCBjbGVhcl9wY29uX2F0dGFjaGVkX3RvICh2b2lk KTsgLyogZmhhbmRsZXJfdHR5LmNjICovCi0gIGNsZWFyX3Bjb25fYXR0YWNoZWRfdG8gKCk7Ci0K ICAgSEFORExFJiBoUGFyZW50ID0gY2gucGFyZW50OwogCiAgIHN5bmNfd2l0aF9wYXJlbnQgKCJh ZnRlciBsb25nam1wIiwgdHJ1ZSk7CmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL3NlbGVjdC5j YyBiL3dpbnN1cC9jeWd3aW4vc2VsZWN0LmNjCmluZGV4IDRhOGYzYjJlYy4uOWYxYThhNTdhIDEw MDY0NAotLS0gYS93aW5zdXAvY3lnd2luL3NlbGVjdC5jYworKysgYi93aW5zdXAvY3lnd2luL3Nl bGVjdC5jYwpAQCAtMTIxNSw4ICsxMjE1LDcgQEAgdmVyaWZ5X3R0eV9zbGF2ZSAoc2VsZWN0X3Jl Y29yZCAqbWUsIGZkX3NldCAqcmVhZGZkcywgZmRfc2V0ICp3cml0ZWZkcywKIAkgICBmZF9zZXQg KmV4Y2VwdGZkcykKIHsKICAgZmhhbmRsZXJfcHR5X3NsYXZlICpwdHlzID0gKGZoYW5kbGVyX3B0 eV9zbGF2ZSAqKSBtZS0+Zmg7Ci0gIGlmIChtZS0+cmVhZF9zZWxlY3RlZCAmJiAhcHR5cy0+dG9f YmVfcmVhZF9mcm9tX3Bjb24gKCkgJiYKLSAgICAgIElzRXZlbnRTaWduYWxsZWQgKHB0eXMtPmlu cHV0X2F2YWlsYWJsZV9ldmVudCkpCisgIGlmIChtZS0+cmVhZF9zZWxlY3RlZCAmJiBJc0V2ZW50 U2lnbmFsbGVkIChwdHlzLT5pbnB1dF9hdmFpbGFibGVfZXZlbnQpKQogICAgIG1lLT5yZWFkX3Jl YWR5ID0gdHJ1ZTsKICAgcmV0dXJuIHNldF9iaXRzIChtZSwgcmVhZGZkcywgd3JpdGVmZHMsIGV4 Y2VwdGZkcyk7CiB9CkBAIC0xMjI5LDggKzEyMjgsNiBAQCBwZWVrX3B0eV9zbGF2ZSAoc2VsZWN0 X3JlY29yZCAqcywgYm9vbCBmcm9tX3NlbGVjdCkKICAgZmhhbmRsZXJfcHR5X3NsYXZlICpwdHlz ID0gKGZoYW5kbGVyX3B0eV9zbGF2ZSAqKSBmaDsKIAogICBwdHlzLT5yZXNldF9zd2l0Y2hfdG9f cGNvbiAoKTsKLSAgaWYgKHB0eXMtPnRvX2JlX3JlYWRfZnJvbV9wY29uICgpKQotICAgIHB0eXMt PnVwZGF0ZV9wY29uX2lucHV0X3N0YXRlICh0cnVlKTsKIAogICBpZiAocy0+cmVhZF9zZWxlY3Rl ZCkKICAgICB7CmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL3NtYWxscHJpbnQuY2MgYi93aW5z dXAvY3lnd2luL3NtYWxscHJpbnQuY2MKaW5kZXggOWNmYjQxOTg3Li40YTE0ZWUzY2YgMTAwNjQ0 Ci0tLSBhL3dpbnN1cC9jeWd3aW4vc21hbGxwcmludC5jYworKysgYi93aW5zdXAvY3lnd2luL3Nt YWxscHJpbnQuY2MKQEAgLTQwNSw3ICs0MDUsNiBAQCBzbWFsbF9wcmludGYgKGNvbnN0IGNoYXIg KmZtdCwgLi4uKQogICBjb3VudCA9IF9fc21hbGxfdnNwcmludGYgKGJ1ZiwgZm10LCBhcCk7CiAg IHZhX2VuZCAoYXApOwogCi0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKEdldFN0 ZEhhbmRsZSAoU1REX0VSUk9SX0hBTkRMRSkpOwogICBXcml0ZUZpbGUgKEdldFN0ZEhhbmRsZSAo U1REX0VSUk9SX0hBTkRMRSksIGJ1ZiwgY291bnQsICZkb25lLCBOVUxMKTsKICAgRmx1c2hGaWxl QnVmZmVycyAoR2V0U3RkSGFuZGxlIChTVERfRVJST1JfSEFORExFKSk7CiB9CkBAIC00MzIsNyAr NDMxLDYgQEAgY29uc29sZV9wcmludGYgKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogICBjb3VudCA9 IF9fc21hbGxfdnNwcmludGYgKGJ1ZiwgZm10LCBhcCk7CiAgIHZhX2VuZCAoYXApOwogCi0gIHNl dF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGNvbnNvbGVfaGFuZGxlKTsKICAgV3JpdGVG aWxlIChjb25zb2xlX2hhbmRsZSwgYnVmLCBjb3VudCwgJmRvbmUsIE5VTEwpOwogICBGbHVzaEZp bGVCdWZmZXJzIChjb25zb2xlX2hhbmRsZSk7CiB9CmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2lu L3NwYXduLmNjIGIvd2luc3VwL2N5Z3dpbi9zcGF3bi5jYwppbmRleCBhZjE3N2MwZjEuLjgzMDhi Y2NmMyAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9zcGF3bi5jYworKysgYi93aW5zdXAvY3ln d2luL3NwYXduLmNjCkBAIC0xNzcsNyArMTc3LDcgQEAgZmluZF9leGVjIChjb25zdCBjaGFyICpu YW1lLCBwYXRoX2NvbnYmIGJ1ZiwgY29uc3QgY2hhciAqc2VhcmNoLAogLyogVXRpbGl0eSBmb3Ig Y2hpbGRfaW5mb19zcGF3bjo6d29ya2VyLiAgKi8KIAogc3RhdGljIEhBTkRMRQotaGFuZGxlIChp bnQgZmQsIGJvb2wgd3JpdGluZywgYm9vbCBpc2N5Z3dpbikKK2hhbmRsZSAoaW50IGZkLCBib29s IHdyaXRpbmcpCiB7CiAgIEhBTkRMRSBoOwogICBjeWdoZWFwX2ZkZ2V0IGNmZCAoZmQpOwpAQCAt MTg4LDE3ICsxODgsMzAgQEAgaGFuZGxlIChpbnQgZmQsIGJvb2wgd3JpdGluZywgYm9vbCBpc2N5 Z3dpbikKICAgICBoID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CiAgIGVsc2UgaWYgKCF3cml0aW5n KQogICAgIGggPSBjZmQtPmdldF9oYW5kbGUgKCk7Ci0gIGVsc2UgaWYgKGNmZC0+Z2V0X21ham9y ICgpID09IERFVl9QVFlTX01BSk9SICYmIGlzY3lnd2luKQotICAgIHsKLSAgICAgIGZoYW5kbGVy X3B0eV9zbGF2ZSAqcHR5cyA9IChmaGFuZGxlcl9wdHlfc2xhdmUgKikoZmhhbmRsZXJfYmFzZSAq KSBjZmQ7Ci0gICAgICBoID0gcHR5cy0+Z2V0X291dHB1dF9oYW5kbGVfY3lnICgpOwotICAgIH0K ICAgZWxzZQogICAgIGggPSBjZmQtPmdldF9vdXRwdXRfaGFuZGxlICgpOwogCiAgIHJldHVybiBo OwogfQogCitzdGF0aWMgYm9vbAoraXNfY29uc29sZV9hcHAgKFdDSEFSICpmaWxlbmFtZSkKK3sK KyAgSEFORExFIGg7CisgIGNvbnN0IGludCBpZF9vZmZzZXQgPSA5MjsKKyAgaCA9IENyZWF0ZUZp bGVXIChmaWxlbmFtZSwgR0VORVJJQ19SRUFELCBGSUxFX1NIQVJFX1JFQUQsCisJCSAgTlVMTCwg T1BFTl9FWElTVElORywgMCwgTlVMTCk7CisgIGNoYXIgYnVmWzEwMjRdOworICBEV09SRCBuOwor ICBSZWFkRmlsZSAoaCwgYnVmLCBzaXplb2YgKGJ1ZiksICZuLCAwKTsKKyAgQ2xvc2VIYW5kbGUg KGgpOworICBjaGFyICpwID0gKGNoYXIgKikgbWVtbWVtIChidWYsIG4sICJQRVwwXDAiLCA0KTsK KyAgaWYgKHAgJiYgcCArIGlkX29mZnNldCA8PSBidWYgKyBuKQorICAgIHJldHVybiBwW2lkX29m ZnNldF0gPT0gJ1wwMDMnOyAvKiAwMjogR1VJLCAwMzogY29uc29sZSAqLworICBlbHNlCisgICAg cmV0dXJuIGZhbHNlOworfQorCiBpbnQKIGlzY21kIChjb25zdCBjaGFyICphcmd2MCwgY29uc3Qg Y2hhciAqd2hhdCkKIHsKQEAgLTI2Niw4ICsyNzksNiBAQCBjaGlsZF9pbmZvX3NwYXduOjp3b3Jr ZXIgKGNvbnN0IGNoYXIgKnByb2dfYXJnLCBjb25zdCBjaGFyICpjb25zdCAqYXJndiwKIHsKICAg Ym9vbCByYzsKICAgaW50IHJlcyA9IC0xOwotICBEV09SRCBwaWRfcmVzdG9yZSA9IDA7Ci0gIGJv b2wgYXR0YWNoX3RvX2NvbnNvbGUgPSBmYWxzZTsKICAgcGlkX3QgY3R0eV9wZ2lkID0gMDsKIAog ICAvKiBTZWFyY2ggZm9yIENUVFkgYW5kIHJldHJpZXZlIGl0cyBQR0lEICovCkBAIC01ODcsOSAr NTk4LDcgQEAgY2hpbGRfaW5mb19zcGF3bjo6d29ya2VyIChjb25zdCBjaGFyICpwcm9nX2FyZywg Y29uc3QgY2hhciAqY29uc3QgKmFyZ3YsCiAJCQkgUFJPQ0VTU19RVUVSWV9MSU1JVEVEX0lORk9S TUFUSU9OKSkKIAlzYSA9ICZzZWNfbm9uZV9uaWg7CiAKLSAgICAgIC8qIEF0dGFjaCB0byBwc2V1 ZG8gY29uc29sZSBpZiBwdHkgc2FsdmUgaXMgdXNlZCAqLwotICAgICAgcGlkX3Jlc3RvcmUgPSBm aGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkCi0JKEdldEN1cnJlbnRQcm9j ZXNzSWQgKCksIGZhbHNlKTsKKyAgICAgIGZoYW5kbGVyX3B0eV9zbGF2ZSAqcHR5c19wcmltYXJ5 ID0gTlVMTDsKICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSArKykKIAl7CiAJICBjb25z dCBpbnQgY2hrX29yZGVyW10gPSB7MSwgMCwgMn07CkBAIC01OTgsMjkgKzYwNywxMSBAQCBjaGls ZF9pbmZvX3NwYXduOjp3b3JrZXIgKGNvbnN0IGNoYXIgKnByb2dfYXJnLCBjb25zdCBjaGFyICpj b25zdCAqYXJndiwKIAkgIGlmIChmaCAmJiBmaC0+Z2V0X21ham9yICgpID09IERFVl9QVFlTX01B Sk9SKQogCSAgICB7CiAJICAgICAgZmhhbmRsZXJfcHR5X3NsYXZlICpwdHlzID0gKGZoYW5kbGVy X3B0eV9zbGF2ZSAqKSBmaDsKLQkgICAgICBpZiAocHR5cy0+Z2V0X3BzZXVkb19jb25zb2xlICgp KQotCQl7Ci0JCSAgRFdPUkQgaGVscGVyX3Byb2Nlc3NfaWQgPSBwdHlzLT5nZXRfaGVscGVyX3By b2Nlc3NfaWQgKCk7Ci0JCSAgZGVidWdfcHJpbnRmICgiZm91bmQgYSBQVFkgc2xhdmUgJWQ6IGhl bHBlcl9QSUQ9JWQiLAotCQkJCSAgICBmaC0+Z2V0X21pbm9yICgpLCBoZWxwZXJfcHJvY2Vzc19p ZCk7Ci0JCSAgaWYgKGZoYW5kbGVyX2NvbnNvbGU6OmdldF9jb25zb2xlX3Byb2Nlc3NfaWQKLQkJ CQkJICAgICAgKGhlbHBlcl9wcm9jZXNzX2lkLCB0cnVlKSkKLQkJICAgIC8qIEFscmVhZHkgYXR0 YWNoZWQgKi8KLQkJICAgIGF0dGFjaF90b19jb25zb2xlID0gdHJ1ZTsKLQkJICBlbHNlIGlmICgh YXR0YWNoX3RvX2NvbnNvbGUpCi0JCSAgICB7Ci0JCSAgICAgIEZyZWVDb25zb2xlICgpOwotCQkg ICAgICBpZiAoQXR0YWNoQ29uc29sZSAoaGVscGVyX3Byb2Nlc3NfaWQpKQotCQkJYXR0YWNoX3Rv X2NvbnNvbGUgPSB0cnVlOwotCQkgICAgfQotCQkgIHB0eXMtPmZpeHVwX2FmdGVyX2F0dGFjaCAo IWlzY3lnd2luICgpLCBmZCk7Ci0JCSAgaWYgKG1vZGUgPT0gX1BfT1ZFUkxBWSkKLQkJICAgIHB0 eXMtPnNldF9mcmVlY29uc29sZV9vbl9jbG9zZSAoaXNjeWd3aW4gKCkpOwotCQl9CisJICAgICAg aWYgKHB0eXNfcHJpbWFyeSA9PSBOVUxMKQorCQlwdHlzX3ByaW1hcnkgPSBwdHlzOwogCSAgICB9 CiAJICBlbHNlIGlmIChmaCAmJiBmaC0+Z2V0X21ham9yICgpID09IERFVl9DT05TX01BSk9SKQog CSAgICB7Ci0JICAgICAgYXR0YWNoX3RvX2NvbnNvbGUgPSB0cnVlOwogCSAgICAgIGZoYW5kbGVy X2NvbnNvbGUgKmNvbnMgPSAoZmhhbmRsZXJfY29uc29sZSAqKSBmaDsKIAkgICAgICBpZiAod2lu Y2FwLmhhc19jb25fMjRiaXRfY29sb3JzICgpICYmICFpc2N5Z3dpbiAoKSkKIAkJaWYgKGZkID09 IDEgfHwgZmQgPT0gMikKQEAgLTY0MiwxNyArNjMzLDI4IEBAIGNoaWxkX2luZm9fc3Bhd246Ondv cmtlciAoY29uc3QgY2hhciAqcHJvZ19hcmcsIGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2LAogCiAg ICAgICAvKiBTZXQgdXAgbmVlZGVkIGhhbmRsZXMgZm9yIHN0ZGlvICovCiAgICAgICBzaS5kd0Zs YWdzID0gU1RBUlRGX1VTRVNUREhBTkRMRVM7Ci0gICAgICBzaS5oU3RkSW5wdXQgPSBoYW5kbGUg KChpbl9fc3RkaW4gPCAwID8gMCA6IGluX19zdGRpbiksIGZhbHNlLAotCQkJICAgICBpc2N5Z3dp biAoKSk7Ci0gICAgICBzaS5oU3RkT3V0cHV0ID0gaGFuZGxlICgoaW5fX3N0ZG91dCA8IDAgPyAx IDogaW5fX3N0ZG91dCksIHRydWUsCi0JCQkgICAgICBpc2N5Z3dpbiAoKSk7Ci0gICAgICBzaS5o U3RkRXJyb3IgPSBoYW5kbGUgKDIsIHRydWUsIGlzY3lnd2luICgpKTsKKyAgICAgIHNpLmhTdGRJ bnB1dCA9IGhhbmRsZSAoKGluX19zdGRpbiA8IDAgPyAwIDogaW5fX3N0ZGluKSwgZmFsc2UpOwor ICAgICAgc2kuaFN0ZE91dHB1dCA9IGhhbmRsZSAoKGluX19zdGRvdXQgPCAwID8gMSA6IGluX19z dGRvdXQpLCB0cnVlKTsKKyAgICAgIHNpLmhTdGRFcnJvciA9IGhhbmRsZSAoMiwgdHJ1ZSk7CiAK ICAgICAgIHNpLmNiID0gc2l6ZW9mIChzaSk7CiAKICAgICAgIGlmICghaXNjeWd3aW4gKCkpCiAJ aW5pdF9jb25zb2xlX2hhbmRsZXIgKG15c2VsZi0+Y3R0eSA+IDApOwogCisgICAgICBib29sIGVu YWJsZV9wY29uID0gZmFsc2U7CisgICAgICBTVEFSVFVQSU5GT0VYVyBzaV9wY29uOworICAgICAg WmVyb01lbW9yeSAoJnNpX3Bjb24sIHNpemVvZiAoc2lfcGNvbikpOworICAgICAgU1RBUlRVUElO Rk9XICpzaV90bXAgPSAmc2k7CisgICAgICBpZiAoIWlzY3lnd2luICgpICYmIHB0eXNfcHJpbWFy eSAmJiBpc19jb25zb2xlX2FwcCAocnVucGF0aCkpCisJaWYgKHB0eXNfcHJpbWFyeS0+c2V0dXBf cHNldWRvY29uc29sZSAoJnNpX3Bjb24sCisJCQkgICAgIG1vZGUgIT0gX1BfT1ZFUkxBWSAmJiBt b2RlICE9IF9QX1dBSVQpKQorCSAgeworCSAgICBjX2ZsYWdzIHw9IEVYVEVOREVEX1NUQVJUVVBJ TkZPX1BSRVNFTlQ7CisJICAgIHNpX3RtcCA9ICZzaV9wY29uLlN0YXJ0dXBJbmZvOworCSAgICBl bmFibGVfcGNvbiA9IHRydWU7CisJICB9CisKICAgICBsb29wOgogICAgICAgLyogV2hlbiBydWlk ICE9IGV1aWQgd2UgY3JlYXRlIHRoZSBuZXcgcHJvY2VzcyB1bmRlciB0aGUgY3VycmVudCBvcmln aW5hbAogCSBhY2NvdW50IGFuZCBpbXBlcnNvbmF0ZSBpbiBjaGlsZCwgdGhpcyB3YXkgbWFpbnRh aW5pbmcgdGhlIGRpZmZlcmVudApAQCAtNjgxLDcgKzY4Myw3IEBAIGNoaWxkX2luZm9fc3Bhd246 OndvcmtlciAoY29uc3QgY2hhciAqcHJvZ19hcmcsIGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2LAog CQkJICAgICAgIGNfZmxhZ3MsCiAJCQkgICAgICAgZW52YmxvY2ssCS8qIGVudmlyb25tZW50ICov CiAJCQkgICAgICAgTlVMTCwKLQkJCSAgICAgICAmc2ksCisJCQkgICAgICAgc2lfdG1wLAogCQkJ ICAgICAgICZwaSk7CiAJfQogICAgICAgZWxzZQpAQCAtNzM1LDcgKzczNyw3IEBAIGNoaWxkX2lu Zm9fc3Bhd246OndvcmtlciAoY29uc3QgY2hhciAqcHJvZ19hcmcsIGNvbnN0IGNoYXIgKmNvbnN0 ICphcmd2LAogCQkJICAgICAgIGNfZmxhZ3MsCiAJCQkgICAgICAgZW52YmxvY2ssCS8qIGVudmly b25tZW50ICovCiAJCQkgICAgICAgTlVMTCwKLQkJCSAgICAgICAmc2ksCisJCQkgICAgICAgc2lf dG1wLAogCQkJICAgICAgICZwaSk7CiAJICBpZiAoaHdzdCkKIAkgICAgewpAQCAtNzQ4LDYgKzc1 MCwxMSBAQCBjaGlsZF9pbmZvX3NwYXduOjp3b3JrZXIgKGNvbnN0IGNoYXIgKnByb2dfYXJnLCBj b25zdCBjaGFyICpjb25zdCAqYXJndiwKIAkgICAgICBDbG9zZURlc2t0b3AgKGhkc2spOwogCSAg ICB9CiAJfQorICAgICAgaWYgKGVuYWJsZV9wY29uKQorCXsKKwkgIERlbGV0ZVByb2NUaHJlYWRB dHRyaWJ1dGVMaXN0IChzaV9wY29uLmxwQXR0cmlidXRlTGlzdCk7CisJICBIZWFwRnJlZSAoR2V0 UHJvY2Vzc0hlYXAgKCksIDAsIHNpX3Bjb24ubHBBdHRyaWJ1dGVMaXN0KTsKKwl9CiAKICAgICAg IGlmIChtb2RlICE9IF9QX09WRVJMQVkpCiAJU2V0SGFuZGxlSW5mb3JtYXRpb24gKG15X3dyX3By b2NfcGlwZSwgSEFORExFX0ZMQUdfSU5IRVJJVCwKQEAgLTkyMCw2ICs5MjcsMTEgQEAgY2hpbGRf aW5mb19zcGF3bjo6d29ya2VyIChjb25zdCBjaGFyICpwcm9nX2FyZywgY29uc3QgY2hhciAqY29u c3QgKmFyZ3YsCiAJICAgIH0KIAkgIGlmIChzZW0pCiAJICAgIF9fcG9zaXhfc3Bhd25fc2VtX3Jl bGVhc2UgKHNlbSwgMCk7CisJICBpZiAoZW5hYmxlX3Bjb24pCisJICAgIHsKKwkgICAgICBXYWl0 Rm9yU2luZ2xlT2JqZWN0IChwaS5oUHJvY2VzcywgSU5GSU5JVEUpOworCSAgICAgIHB0eXNfcHJp bWFyeS0+Y2xvc2VfcHNldWRvY29uc29sZSAoKTsKKwkgICAgfQogCSAgbXlzZWxmLmV4aXQgKEVY SVRDT0RFX05PU0VUKTsKIAkgIGJyZWFrOwogCWNhc2UgX1BfV0FJVDoKQEAgLTkyNyw2ICs5Mzks OCBAQCBjaGlsZF9pbmZvX3NwYXduOjp3b3JrZXIgKGNvbnN0IGNoYXIgKnByb2dfYXJnLCBjb25z dCBjaGFyICpjb25zdCAqYXJndiwKIAkgIHN5c3RlbV9jYWxsLmFybSAoKTsKIAkgIGlmICh3YWl0 cGlkIChjeWdwaWQsICZyZXMsIDApICE9IGN5Z3BpZCkKIAkgICAgcmVzID0gLTE7CisJICBpZiAo ZW5hYmxlX3Bjb24pCisJICAgIHB0eXNfcHJpbWFyeS0+Y2xvc2VfcHNldWRvY29uc29sZSAoKTsK IAkgIGJyZWFrOwogCWNhc2UgX1BfREVUQUNIOgogCSAgcmVzID0gMDsJLyogTG9zdCBhbGwgbWVt b3J5IG9mIHRoaXMgY2hpbGQuICovCkBAIC05NTMsMjEgKzk2Nyw2IEBAIGNoaWxkX2luZm9fc3Bh d246OndvcmtlciAoY29uc3QgY2hhciAqcHJvZ19hcmcsIGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2 LAogICBpZiAoZW52YmxvY2spCiAgICAgZnJlZSAoZW52YmxvY2spOwogCi0gIGlmIChhdHRhY2hf dG9fY29uc29sZSAmJiBwaWRfcmVzdG9yZSkKLSAgICB7Ci0gICAgICBGcmVlQ29uc29sZSAoKTsK LSAgICAgIEF0dGFjaENvbnNvbGUgKHBpZF9yZXN0b3JlKTsKLSAgICAgIGN5Z2hlYXBfZmRlbnVt IGNmZCAoZmFsc2UpOwotICAgICAgaW50IGZkOwotICAgICAgd2hpbGUgKChmZCA9IGNmZC5uZXh0 ICgpKSA+PSAwKQotCWlmIChjZmQtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZU19NQUpPUikKLQkg IHsKLQkgICAgZmhhbmRsZXJfcHR5X3NsYXZlICpwdHlzID0KLQkgICAgICAoZmhhbmRsZXJfcHR5 X3NsYXZlICopIChmaGFuZGxlcl9iYXNlICopIGNmZDsKLQkgICAgcHR5cy0+Zml4dXBfYWZ0ZXJf YXR0YWNoIChmYWxzZSwgZmQpOwotCSAgfQotICAgIH0KLQogICByZXR1cm4gKGludCkgcmVzOwog fQogCmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL3N0cmFjZS5jYyBiL3dpbnN1cC9jeWd3aW4v c3RyYWNlLmNjCmluZGV4IGYwYWVmM2EzNi4uMzVmOGE1OWFlIDEwMDY0NAotLS0gYS93aW5zdXAv Y3lnd2luL3N0cmFjZS5jYworKysgYi93aW5zdXAvY3lnd2luL3N0cmFjZS5jYwpAQCAtMjY0LDcg KzI2NCw2IEBAIHN0cmFjZTo6dnBybnRmICh1bnNpZ25lZCBjYXRlZ29yeSwgY29uc3QgY2hhciAq ZnVuYywgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwCiAgIGlmIChjYXRlZ29yeSAmIF9TVFJB Q0VfU1lTVEVNKQogICAgIHsKICAgICAgIERXT1JEIGRvbmU7Ci0gICAgICBzZXRfaXNoeWJyaWRf YW5kX3N3aXRjaF90b19wY29uIChHZXRTdGRIYW5kbGUgKFNURF9FUlJPUl9IQU5ETEUpKTsKICAg ICAgIFdyaXRlRmlsZSAoR2V0U3RkSGFuZGxlIChTVERfRVJST1JfSEFORExFKSwgYnVmLCBsZW4s ICZkb25lLCAwKTsKICAgICAgIEZsdXNoRmlsZUJ1ZmZlcnMgKEdldFN0ZEhhbmRsZSAoU1REX0VS Uk9SX0hBTkRMRSkpOwogICAgICAgLyogTWFrZSBzdXJlIHRoYXQgdGhlIG1lc3NhZ2Ugc2hvd3Mg dXAgb24gdGhlIHNjcmVlbiwgdG9vLCBzaW5jZSB0aGlzIGlzCkBAIC0yNzYsNyArMjc1LDYgQEAg c3RyYWNlOjp2cHJudGYgKHVuc2lnbmVkIGNhdGVnb3J5LCBjb25zdCBjaGFyICpmdW5jLCBjb25z dCBjaGFyICpmbXQsIHZhX2xpc3QgYXAKIAkJCQkgJnNlY19ub25lLCBPUEVOX0VYSVNUSU5HLCAw LCAwKTsKIAkgIGlmIChoICE9IElOVkFMSURfSEFORExFX1ZBTFVFKQogCSAgICB7Ci0JICAgICAg c2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7CiAJICAgICAgV3JpdGVGaWxlICho LCBidWYsIGxlbiwgJmRvbmUsIDApOwogCSAgICAgIENsb3NlSGFuZGxlIChoKTsKIAkgICAgfQpk aWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi90dHkuY2MgYi93aW5zdXAvY3lnd2luL3R0eS5jYwpp bmRleCA0Y2I2OGY3NzYuLmQ2MGYyNzU0NSAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi90dHku Y2MKKysrIGIvd2luc3VwL2N5Z3dpbi90dHkuY2MKQEAgLTIzNCwyMCArMjM0LDE0IEBAIHR0eTo6 aW5pdCAoKQogICB3YXNfb3BlbmVkID0gZmFsc2U7CiAgIG1hc3Rlcl9waWQgPSAwOwogICBpc19j b25zb2xlID0gZmFsc2U7Ci0gIGF0dGFjaF9wY29uX2luX2ZvcmsgPSBmYWxzZTsKLSAgaF9wc2V1 ZG9fY29uc29sZSA9IE5VTEw7CiAgIGNvbHVtbiA9IDA7CisgIGhfcHNldWRvX2NvbnNvbGUgPSBO VUxMOwogICBzd2l0Y2hfdG9fcGNvbl9pbiA9IGZhbHNlOwotICBzd2l0Y2hfdG9fcGNvbl9vdXQg PSBmYWxzZTsKLSAgc2NyZWVuX2FsdGVybmF0ZWQgPSBmYWxzZTsKICAgbWFza19zd2l0Y2hfdG9f cGNvbl9pbiA9IGZhbHNlOwogICBwY29uX3BpZCA9IDA7CiAgIHRlcm1fY29kZV9wYWdlID0gMDsK LSAgbmVlZF9yZWRyYXdfc2NyZWVuID0gdHJ1ZTsKICAgcGNvbl9sYXN0X3RpbWUgPSAwOwotICBw Y29uX2luX2VtcHR5ID0gdHJ1ZTsKLSAgcmVxX3RyYW5zZmVyX2lucHV0X3RvX3Bjb24gPSBmYWxz ZTsKLSAgcmVxX2ZsdXNoX3Bjb25faW5wdXQgPSBmYWxzZTsKKyAgcGNvbl9zdGFydCA9IGZhbHNl OwogfQogCiBIQU5ETEUKQEAgLTI5MywxNiArMjg3LDYgQEAgdHR5X21pbjo6dHR5bmFtZSAoKQog ICByZXR1cm4gZC5uYW1lICgpOwogfQogCi12b2lkCi10dHk6OnNldF9zd2l0Y2hfdG9fcGNvbl9v dXQgKGJvb2wgdikKLXsKLSAgaWYgKHN3aXRjaF90b19wY29uX291dCAhPSB2KQotICAgIHsKLSAg ICAgIHdhaXRfcGNvbl9md2QgKCk7Ci0gICAgICBzd2l0Y2hfdG9fcGNvbl9vdXQgPSB2OwotICAg IH0KLX0KLQogdm9pZAogdHR5Ojp3YWl0X3Bjb25fZndkICh2b2lkKQogewpkaWZmIC0tZ2l0IGEv d2luc3VwL2N5Z3dpbi90dHkuaCBiL3dpbnN1cC9jeWd3aW4vdHR5LmgKaW5kZXggOTIwZTMyYjE2 Li5jNDkxZDM4OTEgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vdHR5LmgKKysrIGIvd2luc3Vw L2N5Z3dpbi90dHkuaApAQCAtOTQsMjEgKzk0LDEzIEBAIHByaXZhdGU6CiAgIEhBTkRMRSBfdG9f bWFzdGVyOwogICBIQU5ETEUgX3RvX21hc3Rlcl9jeWc7CiAgIEhQQ09OIGhfcHNldWRvX2NvbnNv bGU7Ci0gIEhBTkRMRSBoX2hlbHBlcl9wcm9jZXNzOwotICBEV09SRCBoZWxwZXJfcHJvY2Vzc19p ZDsKLSAgSEFORExFIGhfaGVscGVyX2dvb2RieWU7Ci0gIGJvb2wgYXR0YWNoX3Bjb25faW5fZm9y azsKKyAgYm9vbCBwY29uX3N0YXJ0OwogICBib29sIHN3aXRjaF90b19wY29uX2luOwotICBib29s IHN3aXRjaF90b19wY29uX291dDsKLSAgYm9vbCBzY3JlZW5fYWx0ZXJuYXRlZDsKICAgYm9vbCBt YXNrX3N3aXRjaF90b19wY29uX2luOwogICBwaWRfdCBwY29uX3BpZDsKICAgVUlOVCB0ZXJtX2Nv ZGVfcGFnZTsKLSAgYm9vbCBuZWVkX3JlZHJhd19zY3JlZW47CiAgIERXT1JEIHBjb25fbGFzdF90 aW1lOwotICBib29sIHBjb25faW5fZW1wdHk7Ci0gIGJvb2wgcmVxX3RyYW5zZmVyX2lucHV0X3Rv X3Bjb247Ci0gIGJvb2wgcmVxX2ZsdXNoX3Bjb25faW5wdXQ7CisgIEhBTkRMRSBoX3Bjb25fd3Jp dGVfcGlwZTsKIAogcHVibGljOgogICBIQU5ETEUgZnJvbV9tYXN0ZXIgKCkgY29uc3QgeyByZXR1 cm4gX2Zyb21fbWFzdGVyOyB9CkBAIC0xMzgsNyArMTMwLDYgQEAgcHVibGljOgogICB2b2lkIHNl dF9tYXN0ZXJfY3RsX2Nsb3NlZCAoKSB7bWFzdGVyX3BpZCA9IC0xO30KICAgc3RhdGljIHZvaWQg X19zdGRjYWxsIGNyZWF0ZV9tYXN0ZXIgKGludCk7CiAgIHN0YXRpYyB2b2lkIF9fc3RkY2FsbCBp bml0X3Nlc3Npb24gKCk7Ci0gIHZvaWQgc2V0X3N3aXRjaF90b19wY29uX291dCAoYm9vbCB2KTsK ICAgdm9pZCB3YWl0X3Bjb25fZndkICh2b2lkKTsKICAgZnJpZW5kIGNsYXNzIGZoYW5kbGVyX3B0 eV9jb21tb247CiAgIGZyaWVuZCBjbGFzcyBmaGFuZGxlcl9wdHlfbWFzdGVyOwpkaWZmIC0tZ2l0 IGEvd2luc3VwL2N5Z3dpbi93aW5zdXAuaCBiL3dpbnN1cC9jeWd3aW4vd2luc3VwLmgKaW5kZXgg OWJmYTFhN2E2Li43OTg0NGNiODcgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vd2luc3VwLmgK KysrIGIvd2luc3VwL2N5Z3dpbi93aW5zdXAuaApAQCAtMjI0LDkgKzIyNCw2IEBAIHZvaWQgaW5p dF9jb25zb2xlX2hhbmRsZXIgKGJvb2wpOwogCiBleHRlcm4gYm9vbCB3c29ja19zdGFydGVkOwog Ci0vKiBQVFkgcmVsYXRlZCAqLwotdm9pZCBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29u IChIQU5ETEUgaCk7Ci0KIC8qIFByaW50ZiB0eXBlIGZ1bmN0aW9ucyAqLwogZXh0ZXJuICJDIiB2 b2lkIHZhcGlfZmF0YWwgKGNvbnN0IGNoYXIgKiwgdmFfbGlzdCBhcCkgX19hdHRyaWJ1dGVfXyAo KG5vcmV0dXJuKSk7CiBleHRlcm4gIkMiIHZvaWQgYXBpX2ZhdGFsIChjb25zdCBjaGFyICosIC4u LikgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7Ci0tIAoyLjI4LjAKCg== --Multipart=_Wed__19_Aug_2020_20_39_59_+0900_Xyp=YXsIFU2hU9xV--