From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from conssluserg-05.nifty.com (conssluserg-05.nifty.com [210.131.2.90]) by sourceware.org (Postfix) with ESMTPS id AFF6D3857C47 for ; Mon, 17 Aug 2020 11:57:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org AFF6D3857C47 Received: from Express5800-S70 (v038192.dynamic.ppp.asahi-net.or.jp [124.155.38.192]) (authenticated) by conssluserg-05.nifty.com with ESMTP id 07HBvHYa004356 for ; Mon, 17 Aug 2020 20:57:17 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-05.nifty.com 07HBvHYa004356 X-Nifty-SrcIP: [124.155.38.192] Date: Mon, 17 Aug 2020 20:57:18 +0900 From: Takashi Yano To: cygwin-developers@cygwin.com Subject: Re: New implementation of pseudo console support (experimental) Message-Id: <20200817205718.a0fcc08bf21be4ba5f10ba3d@nifty.ne.jp> In-Reply-To: <20200813185813.2d851113b6e134db371d35b4@nifty.ne.jp> References: <20200514183420.c246647a6d9e396d42c6b47e@nifty.ne.jp> <20200519224018.746f6324badd8a5762df42b1@nifty.ne.jp> <20200525195332.cf60ab2f38d167a76513740e@nifty.ne.jp> <20200526100955.30b1a2baea517e0565f30db6@nifty.ne.jp> <20200529004024.0c2ac3c68b588bda987e0837@nifty.ne.jp> <20200701204751.27609a8f5701010468521a87@nifty.ne.jp> <20200717111912.GG3784@calimero.vinschen.de> <20200718143024.45920213c7aa81912939d944@nifty.ne.jp> <20200720080613.GE16360@calimero.vinschen.de> <20200722031751.e02bf24a7519b43d80e5db71@nifty.ne.jp> <20200722174541.c8113635236fd217cb9ebb77@nifty.ne.jp> <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> X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.30; i686-pc-mingw32) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Mon__17_Aug_2020_20_57_18_+0900_IPiJM7AxBvu7k413" X-Spam-Status: No, score=-1.1 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_H4, RCVD_IN_MSPIKE_WL, 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: Mon, 17 Aug 2020 11:57:38 -0000 This is a multi-part message in MIME format. --Multipart=_Mon__17_Aug_2020_20_57_18_+0900_IPiJM7AxBvu7k413 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit 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. -- Takashi Yano --Multipart=_Mon__17_Aug_2020_20_57_18_+0900_IPiJM7AxBvu7k413 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 RnJvbSA5MzdlYjMxYzM4OGE3NzJiMTE5NDdkNjE2MTg4ODE1NjIxZGM4ZTM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5q cD4KRGF0ZTogU2F0LCAxNSBBdWcgMjAyMCAxMzo0ODozOSArMDkwMApTdWJqZWN0OiBbUEFUQ0hd 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 aW4vZmhhbmRsZXJfdHR5LmNjICAgICB8IDE3NzEgKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KIHdpbnN1cC9jeWd3aW4vZm9yay5jYyAgICAgICAgICAgICB8ICAgMzAgLQogd2luc3VwL2N5 Z3dpbi9zZWxlY3QuY2MgICAgICAgICAgIHwgICAgNSArLQogd2luc3VwL2N5Z3dpbi9zbWFsbHBy aW50LmNjICAgICAgIHwgICAgMiAtCiB3aW5zdXAvY3lnd2luL3NwYXduLmNjICAgICAgICAgICAg fCAgMTI0ICstCiB3aW5zdXAvY3lnd2luL3N0cmFjZS5jYyAgICAgICAgICAgfCAgICAyIC0KIHdp bnN1cC9jeWd3aW4vdHR5LmNjICAgICAgICAgICAgICB8ICAgMjAgKy0KIHdpbnN1cC9jeWd3aW4v dHR5LmggICAgICAgICAgICAgICB8ICAgMTMgKy0KIHdpbnN1cC9jeWd3aW4vd2luc3VwLmggICAg ICAgICAgICB8ICAgIDMgLQogMTIgZmlsZXMgY2hhbmdlZCwgMzU2IGluc2VydGlvbnMoKyksIDE3 NDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9kdGFibGUuY2MgYi93 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 YyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfdHR5LmNjCmluZGV4IDYyOTRlMmMyMC4uNGJkZTAz MzE2IDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX3R0eS5jYworKysgYi93aW5z 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 KTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi12b2lk Ci1maGFuZGxlcl9wdHlfc2xhdmU6OnJlc3RvcmVfcmVhdHRhY2hfcGNvbiAodm9pZCkKLXsKLSAg aWYgKHBpZF9yZXN0b3JlKQotICAgIHsKLSAgICAgIEZyZWVDb25zb2xlICgpOwotICAgICAgaWYg KCFBdHRhY2hDb25zb2xlIChwaWRfcmVzdG9yZSkpCi0JewotCSAgc3lzdGVtX3ByaW50ZiAoInB0 eSVkOiBBdHRhY2hDb25zb2xlKHJlc3RvcmU9JWQpIGZhaWxlZC4gMHglMDhseCIsCi0JCQkgZ2V0 X21pbm9yICgpLCBwaWRfcmVzdG9yZSwgR2V0TGFzdEVycm9yICgpKTsKLQkgIHBjb25fYXR0YWNo ZWRfdG8gPSAtMTsKLQl9Ci0gICAgfQotICBwaWRfcmVzdG9yZSA9IDA7Ci19Ci0KLS8qIFRoaXMg ZnVuY3Rpb24gcmVxdWVzdHMgdHJhbnNmZXJpbmcgdGhlIGlucHV0IGRhdGEgZnJvbSB0aGUgaW5w dXQKLSAgIHBpcGUgZm9yIGN5Z3dpbiBhcHBzIHRvIHRoZSBvdGhlciBpbnB1dCBwaXBlIGZvciBu YXRpdmUgYXBwcy4gKi8KLXZvaWQKLWZoYW5kbGVyX3B0eV9zbGF2ZTo6cHVsbF9wY29uX2lucHV0 ICh2b2lkKQotewotICBnZXRfdHR5cCAoKS0+cmVxX3RyYW5zZmVyX2lucHV0X3RvX3Bjb24gPSB0 cnVlOwotICB3aGlsZSAoZ2V0X3R0eXAgKCktPnJlcV90cmFuc2Zlcl9pbnB1dF90b19wY29uKQot ICAgIFNsZWVwICgxKTsKLX0KLQotdm9pZAotZmhhbmRsZXJfcHR5X3NsYXZlOjp1cGRhdGVfcGNv bl9pbnB1dF9zdGF0ZSAoYm9vbCBuZWVkX2xvY2spCi17Ci0gIGlmIChuZWVkX2xvY2spCi0gICAg V2FpdEZvclNpbmdsZU9iamVjdCAoaW5wdXRfbXV0ZXgsIElORklOSVRFKTsKLSAgLyogRmx1c2gg aW5wdXQgYnVmZmVyIGlmIGl0IGlzIHJlcXVlc3RlZCBieSBtYXN0ZXIuCi0gICAgIFRoaXMgaGFw cGVucyBpZiBeQyBpcyBwcmVzc2VkIGluIHBzZXVkbyBjb25zb2xlIHNpZGUuICovCi0gIGlmIChn ZXRfdHR5cCAoKS0+cmVxX2ZsdXNoX3Bjb25faW5wdXQpCi0gICAgewotICAgICAgRmx1c2hDb25z b2xlSW5wdXRCdWZmZXIgKGdldF9oYW5kbGUgKCkpOwotICAgICAgZ2V0X3R0eXAgKCktPnJlcV9m bHVzaF9wY29uX2lucHV0ID0gZmFsc2U7Ci0gICAgfQotICAvKiBQZWVrIGNvbnNvbGUgaW5wdXQg YnVmZmVyIGFuZCB1cGRhdGUgc3RhdGUuICovCi0gIElOUFVUX1JFQ09SRCBpbnBbSU5SRUNfU0la RV07Ci0gIERXT1JEIG47Ci0gIEJPT0wgKFdJTkFQSSAqUGVla0Z1bmMpCi0gICAgKEhBTkRMRSwg UElOUFVUX1JFQ09SRCwgRFdPUkQsIExQRFdPUkQpOwotICBQZWVrRnVuYyA9Ci0gICAgUGVla0Nv bnNvbGVJbnB1dEFfT3JpZyA/IDogUGVla0NvbnNvbGVJbnB1dDsKLSAgUGVla0Z1bmMgKGdldF9o YW5kbGUgKCksIGlucCwgSU5SRUNfU0laRSwgJm4pOwotICBib29sIHNhd19hY2NlcHQgPSBmYWxz ZTsKLSAgYm9vbCBwaXBlX2VtcHR5ID0gdHJ1ZTsKLSAgd2hpbGUgKG4tLSA+IDApCi0gICAgaWYg KGlucFtuXS5FdmVudFR5cGUgPT0gS0VZX0VWRU5UICYmIGlucFtuXS5FdmVudC5LZXlFdmVudC5i S2V5RG93biAmJgotCWlucFtuXS5FdmVudC5LZXlFdmVudC51Q2hhci5Bc2NpaUNoYXIpCi0gICAg ICB7Ci0JcGlwZV9lbXB0eSA9IGZhbHNlOwotCWNoYXIgYyA9IGlucFtuXS5FdmVudC5LZXlFdmVu dC51Q2hhci5Bc2NpaUNoYXI7Ci0JY29uc3QgY2hhciBzaWdzW10gPSB7Ci0JICAoY2hhcikgZ2V0 X3R0eXAgKCktPnRpLmNfY2NbVklOVFJdLAotCSAgKGNoYXIpIGdldF90dHlwICgpLT50aS5jX2Nj W1ZRVUlUXSwKLQkgIChjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWU1VTUF0sCi0JfTsKLQlj b25zdCBjaGFyIGVvbHNbXSA9IHsKLQkgIChjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9G XSwKLQkgIChjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9MXSwKLQkgIChjaGFyKSBnZXRf dHR5cCAoKS0+dGkuY19jY1tWRU9MMl0sCi0JICAnXG4nLAotCSAgJ1xyJwotCX07Ci0JaWYgKGlz X2xpbmVfaW5wdXQgKCkgJiYgYyAmJiBtZW1jaHIgKGVvbHMsIGMsIHNpemVvZiAoZW9scykpKQot CSAgc2F3X2FjY2VwdCA9IHRydWU7Ci0JaWYgKChnZXRfdHR5cCAoKS0+dGkuY19sZmxhZyAmIElT SUcpCi0JICAgICYmIGMgJiYgbWVtY2hyIChzaWdzLCBjLCBzaXplb2YgKHNpZ3MpKSkKLQkgIHNh d19hY2NlcHQgPSB0cnVlOwotICAgICAgfQotICBnZXRfdHR5cCAoKS0+cGNvbl9pbl9lbXB0eSA9 IHBpcGVfZW1wdHkgJiYgIShyYWxlbiAoKSA+IHJhaXhnZXQgKCkpOwotICBpZiAoIWdldF9yZWFk YWhlYWRfdmFsaWQgKCkgJiYKLSAgICAgIChwaXBlX2VtcHR5IHx8IChpc19saW5lX2lucHV0ICgp ICYmICFzYXdfYWNjZXB0KSkgJiYKLSAgICAgIGdldF90dHlwICgpLT5yZWFkX3JldHZhbCA9PSAx ICYmIGJ5dGVzX2F2YWlsYWJsZSAobikgJiYgbiA9PSAwKQotICAgIFJlc2V0RXZlbnQgKGlucHV0 X2F2YWlsYWJsZV9ldmVudCk7Ci0gIGlmIChuZWVkX2xvY2spCi0gICAgUmVsZWFzZU11dGV4IChp bnB1dF9tdXRleCk7Ci19Ci0KLWludAotZmhhbmRsZXJfcHR5X3NsYXZlOjplYXRfcmVhZGFoZWFk IChpbnQgbikKLXsKLSAgaW50IG9yYWxlbiA9IHJhbGVuICgpOwotICBpZiAobiA8IDApCi0gICAg biA9IHJhbGVuICgpIC0gcmFpeGdldCAoKTsKLSAgaWYgKG4gPiAwICYmIHJhbGVuICgpID4gcmFp eGdldCAoKSkKLSAgICB7Ci0gICAgICBjb25zdCBjaGFyIGVvbHNbXSA9IHsKLQkoY2hhcikgZ2V0 X3R0eXAgKCktPnRpLmNfY2NbVkVPRl0sCi0JKGNoYXIpIGdldF90dHlwICgpLT50aS5jX2NjW1ZF T0xdLAotCShjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9MMl0sCi0JJ1xuJwotICAgICAg fTsKLSAgICAgIHdoaWxlIChuID4gMCAmJiByYWxlbiAoKSA+IHJhaXhnZXQgKCkpCi0JewotCSAg aWYgKGlzX2xpbmVfaW5wdXQgKCkgJiYgcmFidWYgKClbcmFsZW4gKCktMV0KLQkgICAgICAmJiBt ZW1jaHIgKGVvbHMsIHJhYnVmICgpW3JhbGVuICgpLTFdLCBzaXplb2YgKGVvbHMpKSkKLQkgICAg YnJlYWs7Ci0JICAtLSBuOwotCSAgLS0gcmFsZW4gKCk7Ci0JfQotCi0gICAgICAvKiBJZiBJVVRG OCBpcyBzZXQsIHRoZSB0ZXJtaW5hbCBpcyBpbiBVVEYtOCBtb2RlLiAgSWYgc28sIHdlIGVyYXNl Ci0JIGEgY29tcGxldGUgVVRGLTggbXVsdGlieXRlIHNlcXVlbmNlIG9uIFZFUkFTRS9WV0VSQVNF LiAgT3RoZXJ3aXNlLAotCSBpZiB3ZSBvbmx5IGVyYXNlIGEgc2luZ2xlIGJ5dGUsIGludmFsaWQg dW5pY29kZSBjaGFycyBhcmUgbGVmdCBpbgotCSB0aGUgaW5wdXQuICovCi0gICAgICBpZiAoZ2V0 X3R0eXAgKCktPnRpLmNfaWZsYWcgJiBJVVRGOCkKLQl3aGlsZSAocmFsZW4gKCkgPiByYWl4Z2V0 ICgpICYmCi0JICAgICAgICgodW5zaWduZWQgY2hhcikgcmFidWYgKClbcmFsZW4gKCldICYgMHhj MCkgPT0gMHg4MCkKLQkgIC0tcmFsZW4gKCk7Ci0gICAgfQotICBvcmFsZW4gPSBvcmFsZW4gLSBy YWxlbiAoKTsKLSAgaWYgKHJhaXhnZXQgKCkgPj0gcmFsZW4gKCkpCi0gICAgcmFpeGdldCAoKSA9 IHJhaXhwdXQgKCkgPSByYWxlbiAoKSA9IDA7Ci0gIGVsc2UgaWYgKHJhaXhwdXQgKCkgPiByYWxl biAoKSkKLSAgICByYWl4cHV0ICgpID0gcmFsZW4gKCk7Ci0KLSAgcmV0dXJuIG9yYWxlbjsKLX0K LQotaW50Ci1maGFuZGxlcl9wdHlfc2xhdmU6OmdldF9yZWFkYWhlYWRfaW50b19idWZmZXIgKGNo YXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKLXsKLSAgaW50IGNoOwotICBpbnQgY29waWVkX2NoYXJz ID0gMDsKLQotICB3aGlsZSAoYnVmbGVuKQotICAgIGlmICgoY2ggPSBnZXRfcmVhZGFoZWFkICgp KSA8IDApCi0gICAgICBicmVhazsKLSAgICBlbHNlCi0gICAgICB7Ci0JY29uc3QgY2hhciBlb2xz W10gPSB7Ci0JICAoY2hhcikgZ2V0X3R0eXAgKCktPnRpLmNfY2NbVkVPRl0sCi0JICAoY2hhcikg Z2V0X3R0eXAgKCktPnRpLmNfY2NbVkVPTF0sCi0JICAoY2hhcikgZ2V0X3R0eXAgKCktPnRpLmNf Y2NbVkVPTDJdLAotCSAgJ1xuJwotCX07Ci0JYnVmW2NvcGllZF9jaGFycysrXSA9ICh1bnNpZ25l ZCBjaGFyKShjaCAmIDB4ZmYpOwotCWJ1Zmxlbi0tOwotCWlmIChpc19saW5lX2lucHV0ICgpICYm IGNoICYmIG1lbWNociAoZW9scywgY2ggJiAweGZmLCBzaXplb2YgKGVvbHMpKSkKLQkgIGJyZWFr OwotICAgICAgfQotCi0gIHJldHVybiBjb3BpZWRfY2hhcnM7Ci19Ci0KLWJvb2wKLWZoYW5kbGVy X3B0eV9zbGF2ZTo6Z2V0X3JlYWRhaGVhZF92YWxpZCAodm9pZCkKLXsKLSAgaWYgKGlzX2xpbmVf aW5wdXQgKCkpCi0gICAgewotICAgICAgY29uc3QgY2hhciBlb2xzW10gPSB7Ci0JKGNoYXIpIGdl dF90dHlwICgpLT50aS5jX2NjW1ZFT0ZdLAotCShjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tW RU9MXSwKLQkoY2hhcikgZ2V0X3R0eXAgKCktPnRpLmNfY2NbVkVPTDJdLAotCSdcbicKLSAgICAg IH07Ci0gICAgICBmb3IgKHNpemVfdCBpPXJhaXhnZXQgKCk7IGk8cmFsZW4gKCk7IGkrKykKLQlp ZiAocmFidWYgKClbaV0gJiYgbWVtY2hyIChlb2xzLCByYWJ1ZiAoKVtpXSwgc2l6ZW9mIChlb2xz KSkpCi0JICByZXR1cm4gdHJ1ZTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIGVsc2UK LSAgICByZXR1cm4gcmFsZW4gKCkgPiByYWl4Z2V0ICgpOwotfQotCiB2b2lkCi1maGFuZGxlcl9w dHlfc2xhdmU6OnNldF9zd2l0Y2hfdG9fcGNvbiAoaW50IGZkX3NldCkKK2ZoYW5kbGVyX3B0eV9z bGF2ZTo6c2V0X3N3aXRjaF90b19wY29uICh2b2lkKQogewotICBpZiAoZmQgPCAwKQotICAgIGZk ID0gZmRfc2V0OwotICBhY3F1aXJlX291dHB1dF9tdXRleCAoSU5GSU5JVEUpOwotICBpZiAoZmQg PT0gMCAmJiAhZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX2luKQorICBpZiAoIWdldF90dHlw ICgpLT5zd2l0Y2hfdG9fcGNvbl9pbikKICAgICB7Ci0gICAgICBwdWxsX3Bjb25faW5wdXQgKCk7 Ci0gICAgICBpZiAoZ2V0X3R0eXAgKCktPnBjb25fcGlkID09IDAgfHwKLQkgICFwaW5mbyAoZ2V0 X3R0eXAgKCktPnBjb25fcGlkKSkKKyAgICAgIGlzSHlicmlkID0gdHJ1ZTsKKyAgICAgIGlmIChn ZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gMCB8fCAhcGluZm8gKGdldF90dHlwICgpLT5wY29uX3Bp ZCkpCiAJZ2V0X3R0eXAgKCktPnBjb25fcGlkID0gbXlzZWxmLT5waWQ7CiAgICAgICBnZXRfdHR5 cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4gPSB0cnVlOwotICAgICAgaWYgKGlzSHlicmlkICYmICFn ZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25fb3V0KQotCXsKLQkgIGdldF90dHlwICgpLT53YWl0 X3Bjb25fZndkICgpOwotCSAgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX291dCA9IHRydWU7 Ci0JfQotICAgIH0KLSAgZWxzZSBpZiAoKGZkID09IDEgfHwgZmQgPT0gMikgJiYgIWdldF90dHlw ICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQpCi0gICAgewotICAgICAgZ2V0X3R0eXAgKCktPndhaXRf cGNvbl9md2QgKCk7Ci0gICAgICBpZiAoZ2V0X3R0eXAgKCktPnBjb25fcGlkID09IDAgfHwKLQkg ICFwaW5mbyAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKSkKLQlnZXRfdHR5cCAoKS0+cGNvbl9waWQg PSBteXNlbGYtPnBpZDsKLSAgICAgIGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQgPSB0 cnVlOwotICAgICAgaWYgKGlzSHlicmlkKQotCWdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9p biA9IHRydWU7CiAgICAgfQotICByZWxlYXNlX291dHB1dF9tdXRleCAoKTsKIH0KIAogdm9pZAog 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 Ki8KICAgICB0aW1lX3RvX3dhaXQgPSAwOwpAQCAtMTcwNSw5NiArOTIyLDE5IEBAIGZoYW5kbGVy X3B0eV9zbGF2ZTo6cmVhZCAodm9pZCAqcHRyLCBzaXplX3QmIGxlbikKIAkJICBzZXRfc2lnX2Vy cm5vIChFQUdBSU4pOwogCQkgIHRvdGFscmVhZCA9IC0xOwogCQl9Ci0JICAgICAgZ290byBvdXQ7 Ci0JICAgIH0KLQkgIGNvbnRpbnVlOwotCWRlZmF1bHQ6Ci0JICB0ZXJtaW9zX3ByaW50ZiAoIndh aXQgZm9yIGlucHV0IG11dGV4IGZhaWxlZCwgJUUiKTsKLQkgIGlmICghdG90YWxyZWFkKQotCSAg ICB7Ci0JICAgICAgX19zZXRlcnJubyAoKTsKLQkgICAgICB0b3RhbHJlYWQgPSAtMTsKLQkgICAg fQotCSAgZ290byBvdXQ7Ci0JfQotICAgICAgaWYgKHB0ciAmJiB0b19iZV9yZWFkX2Zyb21fcGNv biAoKSkKLQl7Ci0JICBpZiAoZ2V0X3JlYWRhaGVhZF92YWxpZCAoKSkKLQkgICAgewotCSAgICAg IFJlbGVhc2VNdXRleCAoaW5wdXRfbXV0ZXgpOwotCSAgICAgIHRvdGFscmVhZCA9IGdldF9yZWFk YWhlYWRfaW50b19idWZmZXIgKChjaGFyICopIHB0ciwgbGVuKTsKLQkgICAgfQotCSAgZWxzZQot CSAgICB7Ci0JICAgICAgaWYgKCF0cnlfcmVhdHRhY2hfcGNvbiAoKSkKLQkJewotCQkgIHJlc3Rv cmVfcmVhdHRhY2hfcGNvbiAoKTsKLQkJICBnb3RvIGRvX3JlYWRfY3lnOwotCQl9Ci0KLQkgICAg ICBEV09SRCBkd01vZGU7Ci0JICAgICAgR2V0Q29uc29sZU1vZGUgKGdldF9oYW5kbGUgKCksICZk d01vZGUpOwotCSAgICAgIERXT1JEIGZsYWdzID0gRU5BQkxFX1ZJUlRVQUxfVEVSTUlOQUxfSU5Q VVQ7Ci0JICAgICAgaWYgKGR3TW9kZSAhPSBmbGFncykKLQkJU2V0Q29uc29sZU1vZGUgKGdldF9o YW5kbGUgKCksIGZsYWdzKTsKLQkgICAgICAvKiBSZWFkIGdldF9oYW5kbGUoKSBpbnN0YWQgb2Yg Z2V0X2hhbmRsZV9jeWcoKSAqLwotCSAgICAgIEJPT0wgKFdJTkFQSSAqUmVhZEZ1bmMpCi0JCShI QU5ETEUsIExQVk9JRCwgRFdPUkQsIExQRFdPUkQsIExQVk9JRCk7Ci0JICAgICAgUmVhZEZ1bmMg PSBSZWFkQ29uc29sZUFfT3JpZyA/IFJlYWRDb25zb2xlQV9PcmlnIDogUmVhZENvbnNvbGVBOwot CSAgICAgIERXT1JEIHJsZW47Ci0JICAgICAgcmVhZGxlbiA9IE1JTiAobGVuLCBzaXplb2YgKGJ1 ZikpOwotCSAgICAgIGlmICghUmVhZEZ1bmMgKGdldF9oYW5kbGUgKCksIGJ1ZiwgcmVhZGxlbiwg JnJsZW4sIE5VTEwpKQotCQl7Ci0JCSAgdGVybWlvc19wcmludGYgKCJyZWFkIGZhaWxlZCwgJUUi KTsKLQkJICBTZXRDb25zb2xlTW9kZSAoZ2V0X2hhbmRsZSAoKSwgZHdNb2RlKTsKLQkJICByZXN0 b3JlX3JlYXR0YWNoX3Bjb24gKCk7Ci0JCSAgUmVsZWFzZU11dGV4IChpbnB1dF9tdXRleCk7Ci0J CSAgc2V0X2Vycm5vIChFSU8pOwotCQkgIHRvdGFscmVhZCA9IC0xOwotCQkgIGdvdG8gb3V0Owot CQl9Ci0JICAgICAgU2V0Q29uc29sZU1vZGUgKGdldF9oYW5kbGUgKCksIGR3TW9kZSk7Ci0JICAg ICAgcmVzdG9yZV9yZWF0dGFjaF9wY29uICgpOwotCSAgICAgIFJlbGVhc2VNdXRleCAoaW5wdXRf bXV0ZXgpOwotCi0JICAgICAgc3NpemVfdCBubGVuOwotCSAgICAgIGNoYXIgKm5idWYgPSBjb252 ZXJ0X21iX3N0ciAoZ2V0X3R0eXAgKCktPnRlcm1fY29kZV9wYWdlLAotCQkJICAgICAoc2l6ZV90 ICopICZubGVuLCBHZXRDb25zb2xlQ1AgKCksIGJ1Ziwgcmxlbik7Ci0KLQkgICAgICBzc2l6ZV90 IHJldDsKLQkgICAgICBsaW5lX2VkaXRfc3RhdHVzIHJlcyA9Ci0JCWxpbmVfZWRpdCAobmJ1Ziwg bmxlbiwgZ2V0X3R0eXAgKCktPnRpLCAmcmV0KTsKLQotCSAgICAgIG1iX3N0cl9mcmVlIChuYnVm KTsKLQotCSAgICAgIGlmIChyZXMgPT0gbGluZV9lZGl0X2lucHV0X2RvbmUgfHwgcmVzID09IGxp bmVfZWRpdF9vaykKLQkJdG90YWxyZWFkID0gZ2V0X3JlYWRhaGVhZF9pbnRvX2J1ZmZlciAoKGNo YXIgKikgcHRyLCBsZW4pOwotCSAgICAgIGVsc2UgaWYgKHJlcyA+IGxpbmVfZWRpdF9zaWduYWxs ZWQpCi0JCXsKLQkJICBzZXRfc2lnX2Vycm5vIChFSU5UUik7Ci0JCSAgdG90YWxyZWFkID0gLTE7 Ci0JCX0KLQkgICAgICBlbHNlCi0JCXsKLQkJICB1cGRhdGVfcGNvbl9pbnB1dF9zdGF0ZSAodHJ1 ZSk7Ci0JCSAgY29udGludWU7Ci0JCX0KKwkgICAgICBnb3RvIG91dDsKKwkgICAgfQorCSAgY29u dGludWU7CisJZGVmYXVsdDoKKwkgIHRlcm1pb3NfcHJpbnRmICgid2FpdCBmb3IgaW5wdXQgbXV0 ZXggZmFpbGVkLCAlRSIpOworCSAgaWYgKCF0b3RhbHJlYWQpCisJICAgIHsKKwkgICAgICBfX3Nl dGVycm5vICgpOworCSAgICAgIHRvdGFscmVhZCA9IC0xOwogCSAgICB9Ci0KLQkgIHVwZGF0ZV9w Y29uX2lucHV0X3N0YXRlICh0cnVlKTsKLQkgIG1hc2tfc3dpdGNoX3RvX3Bjb25faW4gKGZhbHNl KTsKIAkgIGdvdG8gb3V0OwogCX0KLSAgICAgIGlmICghcHRyICYmIGxlbiA9PSBVSU5UX01BWCAm JiAhZ2V0X3R0eXAgKCktPnBjb25faW5fZW1wdHkpCi0JewotCSAgRmx1c2hDb25zb2xlSW5wdXRC dWZmZXIgKGdldF9oYW5kbGUgKCkpOwotCSAgZ2V0X3R0eXAgKCktPnBjb25faW5fZW1wdHkgPSB0 cnVlOwotCSAgRFdPUkQgbjsKLQkgIGlmIChieXRlc19hdmFpbGFibGUgKG4pICYmIG4gPT0gMCkK LQkgICAgUmVzZXRFdmVudCAoaW5wdXRfYXZhaWxhYmxlX2V2ZW50KTsKLQl9CiAKLWRvX3JlYWRf Y3lnOgogICAgICAgaWYgKCFieXRlc19hdmFpbGFibGUgKGJ5dGVzX2luX3BpcGUpKQogCXsKIAkg IFJlbGVhc2VNdXRleCAoaW5wdXRfbXV0ZXgpOwpAQCAtMTkxMSwxNiArMTA1MSw2IEBAIGRvX3Jl YWRfY3lnOgogb3V0OgogICB0ZXJtaW9zX3ByaW50ZiAoIiVkID0gcmVhZCglcCwgJWx1KSIsIHRv dGFscmVhZCwgcHRyLCBsZW4pOwogICBsZW4gPSAoc2l6ZV90KSB0b3RhbHJlYWQ7Ci0gIC8qIFB1 c2ggc2xhdmUgcmVhZCBhcyBlY2hvIHRvIHBzZXVkbyBjb25zb2xlIHNjcmVlbiBidWZmZXIuICov Ci0gIGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkgJiYgcHRyMCAmJiB0b3RhbHJlYWQgPiAwICYm Ci0gICAgICAoZ2V0X3R0eXAgKCktPnRpLmNfbGZsYWcgJiBFQ0hPKSkKLSAgICB7Ci0gICAgICBh Y3F1aXJlX291dHB1dF9tdXRleCAoSU5GSU5JVEUpOwotICAgICAgcHVzaF90b19wY29uX3NjcmVl bmJ1ZmZlciAocHRyMCwgbGVuLCB0cnVlKTsKLSAgICAgIGlmIChnZXRfdHR5cCAoKS0+c3dpdGNo X3RvX3Bjb25fb3V0KQotCXRyaWdnZXJfcmVkcmF3X3NjcmVlbiAoKTsKLSAgICAgIHJlbGVhc2Vf b3V0cHV0X211dGV4ICgpOwotICAgIH0KICAgbWFza19zd2l0Y2hfdG9fcGNvbl9pbiAoZmFsc2Up OwogfQogCkBAIC0yMDYxLDM4ICsxMTkxLDExIEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6aW9jdGwg KHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKICAgICAgIGdldF90dHlwICgpLT53aW5zaXpl ID0gZ2V0X3R0eXAgKCktPmFyZy53aW5zaXplOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBUSU9D U1dJTlNaOgotICAgICAgaWYgKGdldF9wc2V1ZG9fY29uc29sZSAoKSkKLQl7Ci0JICAvKiBJZiBu b3QgYXR0YWNoZWQgdG8gdGhpcyBwc2V1ZG8gY29uc29sZSwKLQkgICAgIHRyeSB0byBhdHRhY2gg dGVtcG9yYXJpbHkuICovCi0JICBwaWRfcmVzdG9yZSA9IDA7Ci0JICBpZiAocGNvbl9hdHRhY2hl ZF90byAhPSBnZXRfbWlub3IgKCkpCi0JICAgIGlmICghdHJ5X3JlYXR0YWNoX3Bjb24gKCkpCi0J ICAgICAgZ290byBjbGVhbnVwOwotCi0JICBDT09SRCBzaXplOwotCSAgc2l6ZS5YID0gKChzdHJ1 Y3Qgd2luc2l6ZSAqKSBhcmcpLT53c19jb2w7Ci0JICBzaXplLlkgPSAoKHN0cnVjdCB3aW5zaXpl ICopIGFyZyktPndzX3JvdzsKLQkgIENPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPIGNzYmk7Ci0J ICBpZiAoR2V0Q29uc29sZVNjcmVlbkJ1ZmZlckluZm8gKGdldF9vdXRwdXRfaGFuZGxlICgpLCAm Y3NiaSkpCi0JICAgIGlmIChzaXplLlggPT0gY3NiaS5zcldpbmRvdy5SaWdodCAtIGNzYmkuc3JX aW5kb3cuTGVmdCArIDEgJiYKLQkJc2l6ZS5ZID09IGNzYmkuc3JXaW5kb3cuQm90dG9tIC0gY3Ni aS5zcldpbmRvdy5Ub3AgKyAxKQotCSAgICAgIGdvdG8gY2xlYW51cDsKLQkgIGlmICghU2V0Q29u c29sZVNjcmVlbkJ1ZmZlclNpemUgKGdldF9vdXRwdXRfaGFuZGxlICgpLCBzaXplKSkKLQkgICAg Z290byBjbGVhbnVwOwotCSAgU01BTExfUkVDVCByZWN0OwotCSAgcmVjdC5MZWZ0ID0gMDsKLQkg IHJlY3QuVG9wID0gMDsKLQkgIHJlY3QuUmlnaHQgPSBzaXplLlgtMTsKLQkgIHJlY3QuQm90dG9t ID0gc2l6ZS5ZLTE7Ci0JICBTZXRDb25zb2xlV2luZG93SW5mbyAoZ2V0X291dHB1dF9oYW5kbGUg KCksIFRSVUUsICZyZWN0KTsKLWNsZWFudXA6Ci0JICByZXN0b3JlX3JlYXR0YWNoX3Bjb24gKCk7 Ci0JfQotCiAgICAgICBpZiAoZ2V0X3R0eXAgKCktPndpbnNpemUud3Nfcm93ICE9ICgoc3RydWN0 IHdpbnNpemUgKikgYXJnKS0+d3Nfcm93CiAJICB8fCBnZXRfdHR5cCAoKS0+d2luc2l6ZS53c19j b2wgIT0gKChzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmcpLT53c19jb2wpCiAJeworCSAgaWYgKGdldF90 dHlwICgpLT5oX3BzZXVkb19jb25zb2xlICYmIGdldF90dHlwICgpLT5wY29uX3BpZCkKKwkgICAg cmVzaXplX3BzZXVkb19jb25zb2xlICgoc3RydWN0IHdpbnNpemUgKikgYXJnKTsKIAkgIGdldF90 dHlwICgpLT5hcmcud2luc2l6ZSA9ICooc3RydWN0IHdpbnNpemUgKikgYXJnOwogCSAgZ2V0X3R0 eXAgKCktPndpbnNpemUgPSAqKHN0cnVjdCB3aW5zaXplICopIGFyZzsKIAkgIGdldF90dHlwICgp LT5raWxsX3BncnAgKFNJR1dJTkNIKTsKQEAgLTIzNzgsNiArMTQ4MSwyNyBAQCBmaGFuZGxlcl9w dHlfY29tbW9uOjpjbG9zZSAoKQogICByZXR1cm4gMDsKIH0KIAordm9pZAorZmhhbmRsZXJfcHR5 X2NvbW1vbjo6cmVzaXplX3BzZXVkb19jb25zb2xlIChzdHJ1Y3Qgd2luc2l6ZSAqd3MpCit7Cisg IENPT1JEIHNpemU7CisgIHNpemUuWCA9IHdzLT53c19jb2w7CisgIHNpemUuWSA9IHdzLT53c19y b3c7CisgIHBpbmZvIHAgKGdldF90dHlwICgpLT5wY29uX3BpZCk7CisgIGlmIChwKQorICAgIHsK KyAgICAgIEhQQ09OX0lOVEVSTkFMIGhwY29uX2xvY2FsOworICAgICAgSEFORExFIHBjb25fb3du ZXIgPQorCU9wZW5Qcm9jZXNzIChQUk9DRVNTX0RVUF9IQU5ETEUsIEZBTFNFLCBwLT5leGVjX2R3 UHJvY2Vzc0lkKTsKKyAgICAgIER1cGxpY2F0ZUhhbmRsZSAocGNvbl9vd25lciwgZ2V0X3R0eXAg KCktPmhfcGNvbl93cml0ZV9waXBlLAorCQkgICAgICAgR2V0Q3VycmVudFByb2Nlc3MgKCksICZo cGNvbl9sb2NhbC5oV3JpdGVQaXBlLAorCQkgICAgICAgMCwgVFJVRSwgRFVQTElDQVRFX1NBTUVf QUNDRVNTKTsKKyAgICAgIFJlc2l6ZVBzZXVkb0NvbnNvbGUgKChIUENPTikgJmhwY29uX2xvY2Fs LCBzaXplKTsKKyAgICAgIENsb3NlSGFuZGxlIChwY29uX293bmVyKTsKKyAgICAgIENsb3NlSGFu ZGxlIChocGNvbl9sb2NhbC5oV3JpdGVQaXBlKTsKKyAgICB9Cit9CisKIHZvaWQKIGZoYW5kbGVy X3B0eV9tYXN0ZXI6OmNsZWFudXAgKCkKIHsKQEAgLTIzOTMsNyArMTUxNyw2IEBAIGZoYW5kbGVy X3B0eV9tYXN0ZXI6OmNsb3NlICgpCiB7CiAgIE9CSkVDVF9CQVNJQ19JTkZPUk1BVElPTiBvYmk7 CiAgIE5UU1RBVFVTIHN0YXR1czsKLSAgcGlkX3QgbWFzdGVyX3BpZF90bXAgPSBnZXRfdHR5cCAo KS0+bWFzdGVyX3BpZDsKIAogICB0ZXJtaW9zX3ByaW50ZiAoImNsb3NpbmcgZnJvbV9tYXN0ZXIo JXApL2Zyb21fbWFzdGVyX2N5ZyglcCkvdG9fbWFzdGVyKCVwKS90b19tYXN0ZXJfY3lnKCVwKSBz aW5jZSB3ZSBvd24gdGhlbSgldSkiLAogCQkgIGZyb21fbWFzdGVyLCBmcm9tX21hc3Rlcl9jeWcs CkBAIC0yNDM4LDMwICsxNTYxLDYgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6Y2xvc2UgKCkKICAg ZWxzZSBpZiAob2JpLkhhbmRsZUNvdW50ID09IDEpCiAgICAgewogICAgICAgdGVybWlvc19wcmlu dGYgKCJDbG9zaW5nIGxhc3QgbWFzdGVyIG9mIHB0eSVkIiwgZ2V0X21pbm9yICgpKTsKLSAgICAg IC8qIENsb3NlIFBzZXVkbyBDb25zb2xlICovCi0gICAgICBpZiAoZ2V0X3BzZXVkb19jb25zb2xl ICgpKQotCXsKLQkgIC8qIFRlcm1pbmF0ZSBoZWxwZXIgcHJvY2VzcyAqLwotCSAgU2V0RXZlbnQg KGdldF90dHlwICgpLT5oX2hlbHBlcl9nb29kYnllKTsKLQkgIFdhaXRGb3JTaW5nbGVPYmplY3Qg KGdldF90dHlwICgpLT5oX2hlbHBlcl9wcm9jZXNzLCBJTkZJTklURSk7Ci0JICBDbG9zZUhhbmRs ZSAoZ2V0X3R0eXAgKCktPmhfaGVscGVyX2dvb2RieWUpOwotCSAgQ2xvc2VIYW5kbGUgKGdldF90 dHlwICgpLT5oX2hlbHBlcl9wcm9jZXNzKTsKLQkgIC8qIEZJWE1FOiBQc2V1ZG8gY29uc29sZSBj YW4gYmUgYWNjZXNzZWQgdmlhIGl0cyBoYW5kbGUKLQkgICAgIG9ubHkgaW4gdGhlIHByb2Nlc3Mg d2hpY2ggY3JlYXRlZCBpdC4gV2hhdCBlbHNlIGNhbiB3ZSBkbz8gKi8KLQkgIGlmIChtYXN0ZXJf cGlkX3RtcCA9PSBteXNlbGYtPnBpZCkKLQkgICAgewotCSAgICAgIC8qIENsb3NlUHNldWRvQ29u c29sZSgpIHNlZW1zIHRvIGhhdmUgYSBidWcgdGhhdCBvbmUKLQkJIGludGVybmFsIGhhbmRsZSBy ZW1haW5zIG9wZW5lZC4gVGhpcyBjYXVzZXMgaGFuZGxlIGxlYWsuCi0JCSBUaGlzIGlzIGEgd29y a2Fyb3VuZCBmb3IgdGhpcyBwcm9ibGVtLiAqLwotCSAgICAgIEhQQ09OX0lOVEVSTkFMICpocCA9 IChIUENPTl9JTlRFUk5BTCAqKSBnZXRfcHNldWRvX2NvbnNvbGUgKCk7Ci0JICAgICAgSEFORExF IHRtcCA9IGhwLT5oQ29uSG9zdFByb2Nlc3M7Ci0JICAgICAgLyogUmVsZWFzZSBwc2V1ZG8gY29u c29sZSAqLwotCSAgICAgIENsb3NlUHNldWRvQ29uc29sZSAoZ2V0X3BzZXVkb19jb25zb2xlICgp KTsKLQkgICAgICBDbG9zZUhhbmRsZSAodG1wKTsKLQkgICAgfQotCSAgZ2V0X3R0eXAgKCktPnN3 aXRjaF90b19wY29uX2luID0gZmFsc2U7Ci0JICBnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25f b3V0ID0gZmFsc2U7Ci0JfQogICAgICAgaWYgKGdldF90dHlwICgpLT5nZXRzaWQgKCkgPiAwKQog CWtpbGwgKGdldF90dHlwICgpLT5nZXRzaWQgKCksIFNJR0hVUCk7CiAgICAgICBTZXRFdmVudCAo aW5wdXRfYXZhaWxhYmxlX2V2ZW50KTsKQEAgLTI0NjksOSArMTU2OCw4IEBAIGZoYW5kbGVyX3B0 eV9tYXN0ZXI6OmNsb3NlICgpCiAKICAgaWYgKCFGb3JjZUNsb3NlSGFuZGxlIChmcm9tX21hc3Rl cikpCiAgICAgdGVybWlvc19wcmludGYgKCJlcnJvciBjbG9zaW5nIGZyb21fbWFzdGVyICVwLCAl RSIsIGZyb21fbWFzdGVyKTsKLSAgaWYgKGZyb21fbWFzdGVyX2N5ZyAhPSBmcm9tX21hc3Rlcikg LyogQXZvaWQgZG91YmxlIGNsb3NlLiAqLwotICAgIGlmICghRm9yY2VDbG9zZUhhbmRsZSAoZnJv bV9tYXN0ZXJfY3lnKSkKLSAgICAgIHRlcm1pb3NfcHJpbnRmICgiZXJyb3IgY2xvc2luZyBmcm9t X21hc3Rlcl9jeWcgJXAsICVFIiwgZnJvbV9tYXN0ZXJfY3lnKTsKKyAgaWYgKCFGb3JjZUNsb3Nl SGFuZGxlIChmcm9tX21hc3Rlcl9jeWcpKQorICAgIHRlcm1pb3NfcHJpbnRmICgiZXJyb3IgY2xv c2luZyBmcm9tX21hc3Rlcl9jeWcgJXAsICVFIiwgZnJvbV9tYXN0ZXJfY3lnKTsKICAgaWYgKCFG b3JjZUNsb3NlSGFuZGxlICh0b19tYXN0ZXIpKQogICAgIHRlcm1pb3NfcHJpbnRmICgiZXJyb3Ig Y2xvc2luZyB0b19tYXN0ZXIgJXAsICVFIiwgdG9fbWFzdGVyKTsKICAgZnJvbV9tYXN0ZXIgPSB0 b19tYXN0ZXIgPSBOVUxMOwpAQCAtMjUxMyw3ICsxNjExLDcgQEAgZmhhbmRsZXJfcHR5X21hc3Rl cjo6d3JpdGUgKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IGxlbikKIAogICAvKiBXcml0ZSB0ZXJt aW5hbCBpbnB1dCB0byB0b19zbGF2ZSBwaXBlIGluc3RlYWQgb2Ygb3V0cHV0X2hhbmRsZQogICAg ICBpZiBjdXJyZW50IGFwcGxpY2F0aW9uIGlzIG5hdGl2ZSBjb25zb2xlIGFwcGxpY2F0aW9uLiAq LwotICBpZiAodG9fYmVfcmVhZF9mcm9tX3Bjb24gKCkpCisgIGlmICh0b19iZV9yZWFkX2Zyb21f cGNvbiAoKSAmJiBnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSkKICAgICB7CiAgICAgICBz aXplX3QgbmxlbjsKICAgICAgIGNoYXIgKmJ1ZiA9IGNvbnZlcnRfbWJfc3RyCkBAIC0yNTIxLDQw ICsxNjE5LDUwIEBAIGZoYW5kbGVyX3B0eV9tYXN0ZXI6OndyaXRlIChjb25zdCB2b2lkICpwdHIs IHNpemVfdCBsZW4pCiAKICAgICAgIFdhaXRGb3JTaW5nbGVPYmplY3QgKGlucHV0X211dGV4LCBJ TkZJTklURSk7CiAKLSAgICAgIGlmIChtZW1jaHIgKGJ1ZiwgJ1wwMDMnLCBubGVuKSkgLyogXkMg aW50ciBrZXkgaW4gcGNvbiAqLwotCWdldF90dHlwICgpLT5yZXFfZmx1c2hfcGNvbl9pbnB1dCA9 IHRydWU7Ci0KICAgICAgIERXT1JEIHdMZW47Ci0gICAgICBXcml0ZUZpbGUgKHRvX3NsYXZlLCBi dWYsIG5sZW4sICZ3TGVuLCBOVUxMKTsKLSAgICAgIGdldF90dHlwICgpLT5wY29uX2luX2VtcHR5 ID0gZmFsc2U7Ci0KLSAgICAgIFJlbGVhc2VNdXRleCAoaW5wdXRfbXV0ZXgpOwogCi0gICAgICAv KiBVc2UgbGluZV9lZGl0ICgpIGluIG9yZGVyIHRvIHNldCBpbnB1dF9hdmFpbGFibGVfZXZlbnQu ICovCi0gICAgICBib29sIGlzX2VjaG8gPSB0YyAoKS0+dGkuY19sZmxhZyAmIEVDSE87Ci0gICAg ICBpZiAoIWdldF90dHlwICgpLT5tYXNrX3N3aXRjaF90b19wY29uX2luKQorICAgICAgaWYgKGdl dF90dHlwICgpLT5wY29uX3N0YXJ0KQogCXsKLQkgIHRjICgpLT50aS5jX2xmbGFnICY9IH5FQ0hP OwotCSAgdGkuY19sZmxhZyAmPSB+RUNITzsKLQl9Ci0gICAgICB0aS5jX2xmbGFnICY9IH5JU0lH OwotICAgICAgbGluZV9lZGl0IChidWYsIG5sZW4sIHRpLCAmcmV0KTsKLSAgICAgIGlmIChpc19l Y2hvKQotCXRjICgpLT50aS5jX2xmbGFnIHw9IEVDSE87Ci0gICAgICBnZXRfdHR5cCAoKS0+cmVh ZF9yZXR2YWwgPSAxOwotCi0gICAgICBjb25zdCBjaGFyIHNpZ3NbXSA9IHsKLQkoY2hhcikgdGku Y19jY1tWSU5UUl0sCi0JKGNoYXIpIHRpLmNfY2NbVlFVSVRdLAotCShjaGFyKSB0aS5jX2NjW1ZT VVNQXSwKLSAgICAgIH07Ci0gICAgICBpZiAodGMgKCktPnRpLmNfbGZsYWcgJiBJU0lHKQotCWZv ciAoc2l6ZV90IGk9MDsgaTxzaXplb2YgKHNpZ3MpOyBpKyspCi0JICBpZiAoc2lnc1tpXSAmJiBt ZW1jaHIgKGJ1Ziwgc2lnc1tpXSwgbmxlbikpCisJICAvKiBQc2V1ZG8gY29uZG9sZSBzdXBwb3J0 IHVzZXMgIkNTSTZuIiB0byBnZXQgY3Vyc29yIHBvc2l0aW9uLgorCSAgICAgSWYgdGhlIHJlcGx5 IGZvciAiQ1NJNm4iIGlzIGRpdmlkZWQgaW50byBtdWx0aXBsZSB3cml0ZXMsCisJICAgICBwc2V1 ZG8gY29uc29sZSBzb21ldGltZXMgZG9lcyBub3QgcmVjb2duaXplIGl0LiAgVGhlcmVmb3JlLAor CSAgICAgcHV0IHRoZW0gdG9nZXRoZXIgaW50byB3cGJ1ZiBhbmQgd3JpdGUgYWxsIGF0IG9uY2Uu ICovCisJICBzdGF0aWMgY29uc3QgaW50IHdwYnVmX2xlbiA9IDY0OworCSAgc3RhdGljIGNoYXIg d3BidWZbd3BidWZfbGVuXTsKKwkgIHN0YXRpYyBpbnQgaXhwdXQgPSAwOworCisJICBpZiAoaXhw dXQgPT0gMCAmJiBidWZbMF0gIT0gJ1wwMzMnKQorCSAgICB7IC8qIGZhaWwtc2FmZSAqLworCSAg ICAgIFdyaXRlRmlsZSAodG9fc2xhdmUsICJcMDMzWzE7MVIiLCA2LCAmd0xlbiwgTlVMTCk7IC8q IGR1bW15ICovCisJICAgICAgZ2V0X3R0eXAgKCktPnBjb25fc3RhcnQgPSBmYWxzZTsKKwkgICAg fQorCSAgZWxzZQogCSAgICB7Ci0JICAgICAgZWF0X3JlYWRhaGVhZCAoLTEpOwotCSAgICAgIFNl dEV2ZW50IChpbnB1dF9hdmFpbGFibGVfZXZlbnQpOworCSAgICAgIGlmIChpeHB1dCArIG5sZW4g PCB3cGJ1Zl9sZW4pCisJCWZvciAoc2l6ZV90IGk9MDsgaTxubGVuOyBpKyspCisJCSAgd3BidWZb aXhwdXQrK10gPSBidWZbaV07CisJICAgICAgZWxzZQorCQl7CisJCSAgV3JpdGVGaWxlICh0b19z bGF2ZSwgd3BidWYsIGl4cHV0LCAmd0xlbiwgTlVMTCk7CisJCSAgaXhwdXQgPSAwOworCQkgIGdl dF90dHlwICgpLT5wY29uX3N0YXJ0ID0gZmFsc2U7CisJCSAgV3JpdGVGaWxlICh0b19zbGF2ZSwg YnVmLCBubGVuLCAmd0xlbiwgTlVMTCk7CisJCX0KKwkgICAgICBpZiAoaXhwdXQgJiYgbWVtY2hy ICh3cGJ1ZiwgJ1InLCBpeHB1dCkpCisJCXsKKwkJICBXcml0ZUZpbGUgKHRvX3NsYXZlLCB3cGJ1 ZiwgaXhwdXQsICZ3TGVuLCBOVUxMKTsKKwkJICBpeHB1dCA9IDA7CisJCSAgZ2V0X3R0eXAgKCkt PnBjb25fc3RhcnQgPSBmYWxzZTsKKwkJfQorCSAgICAgIFJlbGVhc2VNdXRleCAoaW5wdXRfbXV0 ZXgpOworCSAgICAgIG1iX3N0cl9mcmVlIChidWYpOworCSAgICAgIHJldHVybiBsZW47CiAJICAg IH0KKwl9CisKKyAgICAgIFdyaXRlRmlsZSAodG9fc2xhdmUsIGJ1ZiwgbmxlbiwgJndMZW4sIE5V TEwpOworCisgICAgICBSZWxlYXNlTXV0ZXggKGlucHV0X211dGV4KTsKIAogICAgICAgbWJfc3Ry X2ZyZWUgKGJ1Zik7CiAgICAgICByZXR1cm4gbGVuOwpAQCAtMjYzMCwxNSArMTczOCw4IEBAIGZo YW5kbGVyX3B0eV9tYXN0ZXI6OmlvY3RsICh1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiAg ICAgICBpZiAoZ2V0X3R0eXAgKCktPndpbnNpemUud3Nfcm93ICE9ICgoc3RydWN0IHdpbnNpemUg KikgYXJnKS0+d3Nfcm93CiAJICB8fCBnZXRfdHR5cCAoKS0+d2luc2l6ZS53c19jb2wgIT0gKChz dHJ1Y3Qgd2luc2l6ZSAqKSBhcmcpLT53c19jb2wpCiAJewotCSAgLyogRklYTUU6IFBzZXVkbyBj b25zb2xlIGNhbiBiZSBhY2Nlc3NlZCB2aWEgaXRzIGhhbmRsZQotCSAgICAgb25seSBpbiB0aGUg cHJvY2VzcyB3aGljaCBjcmVhdGVkIGl0LiBXaGF0IGVsc2UgY2FuIHdlIGRvPyAqLwotCSAgaWYg KGdldF9wc2V1ZG9fY29uc29sZSAoKSAmJiBnZXRfdHR5cCAoKS0+bWFzdGVyX3BpZCA9PSBteXNl bGYtPnBpZCkKLQkgICAgewotCSAgICAgIENPT1JEIHNpemU7Ci0JICAgICAgc2l6ZS5YID0gKChz dHJ1Y3Qgd2luc2l6ZSAqKSBhcmcpLT53c19jb2w7Ci0JICAgICAgc2l6ZS5ZID0gKChzdHJ1Y3Qg d2luc2l6ZSAqKSBhcmcpLT53c19yb3c7Ci0JICAgICAgUmVzaXplUHNldWRvQ29uc29sZSAoZ2V0 X3BzZXVkb19jb25zb2xlICgpLCBzaXplKTsKLQkgICAgfQorCSAgaWYgKGdldF90dHlwICgpLT5o X3BzZXVkb19jb25zb2xlICYmIGdldF90dHlwICgpLT5wY29uX3BpZCkKKwkgICAgcmVzaXplX3Bz ZXVkb19jb25zb2xlICgoc3RydWN0IHdpbnNpemUgKikgYXJnKTsKIAkgIGdldF90dHlwICgpLT53 aW5zaXplID0gKihzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmc7CiAJICBnZXRfdHR5cCAoKS0+a2lsbF9w Z3JwIChTSUdXSU5DSCk7CiAJfQpAQCAtMjc2Myw3ICsxODY0LDcgQEAgZ2V0X2xvY2FsZV9mcm9t X2VudiAoY2hhciAqbG9jYWxlKQogICBzdHJjcHkgKGxvY2FsZSwgZW52KTsKIH0KIAotc3RhdGlj IExDSUQKK3N0YXRpYyB2b2lkCiBnZXRfbGFuZ2luZm8gKGNoYXIgKmxvY2FsZV9vdXQsIGNoYXIg KmNoYXJzZXRfb3V0KQogewogICAvKiBHZXQgbG9jYWxlIGZyb20gZW52aXJvbm1lbnQgKi8KQEAg LTI3NzYsMTEgKzE4NzcsNiBAQCBnZXRfbGFuZ2luZm8gKGNoYXIgKmxvY2FsZV9vdXQsIGNoYXIg KmNoYXJzZXRfb3V0KQogICBpZiAoIWxvY2FsZSkKICAgICBsb2NhbGUgPSAiQyI7CiAKLSAgY2hh ciB0bXBfbG9jYWxlW0VOQ09ESU5HX0xFTiArIDFdOwotICBjaGFyICpyZXQgPSBfX3NldF9sb2Nh bGVfZnJvbV9sb2NhbGVfYWxpYXMgKGxvY2FsZSwgdG1wX2xvY2FsZSk7Ci0gIGlmIChyZXQpCi0g ICAgbG9jYWxlID0gdG1wX2xvY2FsZTsKLQogICBjb25zdCBjaGFyICpjaGFyc2V0OwogICBzdHJ1 Y3QgbGNfY3R5cGVfVCAqbGNfY3R5cGUgPSAoc3RydWN0IGxjX2N0eXBlX1QgKikgbG9jLmxjX2Nh dFtMQ19DVFlQRV0ucHRyOwogICBpZiAoIWxjX2N0eXBlKQpAQCAtMjgzMCwyMyArMTkyNiw5IEBA IGdldF9sYW5naW5mbyAoY2hhciAqbG9jYWxlX291dCwgY2hhciAqY2hhcnNldF9vdXQpCiAgICAg ICBjaGFyc2V0ID0gIkNQOTMyIjsKICAgICB9CiAKLSAgd2NoYXJfdCBsY1tFTkNPRElOR19MRU4g KyAxXTsKLSAgd2NoYXJfdCAqcDsKLSAgbWJzdG93Y3MgKGxjLCBsb2NhbGUsIEVOQ09ESU5HX0xF Tik7Ci0gIHAgPSB3Y3NjaHIgKGxjLCBMJy4nKTsKLSAgaWYgKHApCi0gICAgKnAgPSBMJ1wwJzsK LSAgcCA9IHdjc2NociAobGMsIEwnXycpOwotICBpZiAocCkKLSAgICAqcCA9IEwnLSc7Ci0gIExD SUQgbGNpZCA9IExvY2FsZU5hbWVUb0xDSUQgKGxjLCAwKTsKLSAgaWYgKCFsY2lkICYmICFzdHJj bXAgKGNoYXJzZXQsICJBU0NJSSIpKQotICAgIHJldHVybiAwOwotCiAgIC8qIFNldCByZXN1bHRz ICovCiAgIHN0cmNweSAobG9jYWxlX291dCwgbmV3X2xvY2FsZSk7CiAgIHN0cmNweSAoY2hhcnNl dF9vdXQsIGNoYXJzZXQpOwotICByZXR1cm4gbGNpZDsKIH0KIAogdm9pZApAQCAtMjg1NywyMSAr MTkzOSw3IEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6c2V0dXBfbG9jYWxlICh2b2lkKQogCiAgIGNo YXIgbG9jYWxlW0VOQ09ESU5HX0xFTiArIDFdID0gIkMiOwogICBjaGFyIGNoYXJzZXRbRU5DT0RJ TkdfTEVOICsgMV0gPSAiQVNDSUkiOwotICBMQ0lEIGxjaWQgPSBnZXRfbGFuZ2luZm8gKGxvY2Fs ZSwgY2hhcnNldCk7Ci0KLSAgLyogU2V0IGNvbnNvbGUgY29kZSBwYWdlIGZvcm0gbG9jYWxlICov Ci0gIGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0gICAgewotICAgICAgVUlOVCBjb2RlX3Bh Z2U7Ci0gICAgICBpZiAobGNpZCA9PSAwIHx8IGxjaWQgPT0gKExDSUQpIC0xKQotCWNvZGVfcGFn ZSA9IDIwMTI3OyAvKiBBU0NJSSAqLwotICAgICAgZWxzZSBpZiAoIUdldExvY2FsZUluZm8gKGxj aWQsCi0JCQkgICAgICAgTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UgfCBMT0NBTEVfUkVUVVJOX05V TUJFUiwKLQkJCSAgICAgICAoY2hhciAqKSAmY29kZV9wYWdlLCBzaXplb2YgKGNvZGVfcGFnZSkp KQotCWNvZGVfcGFnZSA9IDIwMTI3OyAvKiBBU0NJSSAqLwotICAgICAgU2V0Q29uc29sZUNQIChj b2RlX3BhZ2UpOwotICAgICAgU2V0Q29uc29sZU91dHB1dENQIChjb2RlX3BhZ2UpOwotICAgIH0K KyAgZ2V0X2xhbmdpbmZvIChsb2NhbGUsIGNoYXJzZXQpOwogCiAgIC8qIFNldCB0ZXJtaW5hbCBj b2RlIHBhZ2UgZnJvbSBsb2NhbGUgKi8KICAgLyogVGhpcyBjb2RlIGlzIGJvcnJvd2VkIGZyb20g bWludHR5OiBjaGFyc2V0LmMgKi8KQEAgLTI4ODEsOSArMTk0OSw5IEBAIGZoYW5kbGVyX3B0eV9z bGF2ZTo6c2V0dXBfbG9jYWxlICh2b2lkKQogICAgIGNoYXJzZXRfdVtpXSA9IHRvdXBwZXIgKGNo YXJzZXRbaV0pOwogICB1bnNpZ25lZCBpbnQgaXNvOwogICBVSU5UIGNwID0gMjAxMjc7IC8qIERl ZmF1bHQgZm9yIGZhbGxiYWNrICovCi0gIGlmIChzc2NhbmYgKGNoYXJzZXRfdSwgIklTTy04ODU5 LSV1IiwgJmlzbykgPT0gMSB8fAotICAgICAgc3NjYW5mIChjaGFyc2V0X3UsICJJU084ODU5LSV1 IiwgJmlzbykgPT0gMSB8fAotICAgICAgc3NjYW5mIChjaGFyc2V0X3UsICJJU084ODU5JXUiLCAm aXNvKSA9PSAxKQorICBpZiAoc3NjYW5mIChjaGFyc2V0X3UsICJJU08tODg1OS0ldSIsICZpc28p ID09IDEKKyAgICAgIHx8IHNzY2FuZiAoY2hhcnNldF91LCAiSVNPODg1OS0ldSIsICZpc28pID09 IDEKKyAgICAgIHx8IHNzY2FuZiAoY2hhcnNldF91LCAiSVNPODg1OSV1IiwgJmlzbykgPT0gMSkK ICAgICB7CiAgICAgICBpZiAoaXNvICYmIGlzbyA8PSAxNiAmJiBpc28gIT0xMikKIAlnZXRfdHR5 cCAoKS0+dGVybV9jb2RlX3BhZ2UgPSAyODU5MCArIGlzbzsKQEAgLTI4OTksOTAgKzE5NjcsOSBA QCBmaGFuZGxlcl9wdHlfc2xhdmU6OnNldHVwX2xvY2FsZSAodm9pZCkKIAl9CiB9CiAKLXZvaWQK LWZoYW5kbGVyX3B0eV9zbGF2ZTo6c2V0X2ZyZWVjb25zb2xlX29uX2Nsb3NlIChib29sIHZhbCkK LXsKLSAgZnJlZWNvbnNvbGVfb25fY2xvc2UgPSB2YWw7Ci19Ci0KLXZvaWQKLWZoYW5kbGVyX3B0 eV9zbGF2ZTo6dHJpZ2dlcl9yZWRyYXdfc2NyZWVuICh2b2lkKQotewotICAvKiBGb3JjaWJseSBy ZWRyYXcgc2NyZWVuIGJhc2VkIG9uIGNvbnNvbGUgc2NyZWVuIGJ1ZmZlci4gKi8KLSAgLyogVGhl IGZvbGxvd2luZyBjb2RlIHRyaWdnZXJzIHJlZHJhd2luZyB0aGUgc2NyZWVuLiAqLwotICBDT05T T0xFX1NDUkVFTl9CVUZGRVJfSU5GTyBzYmk7Ci0gIEdldENvbnNvbGVTY3JlZW5CdWZmZXJJbmZv IChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgJnNiaSk7Ci0gIFNNQUxMX1JFQ1QgcmVjdCA9IHswLCAw LAotICAgIChTSE9SVCkgKHNiaS5kd1NpemUuWCAtMSksIChTSE9SVCkgKHNiaS5kd1NpemUuWSAt IDEpfTsKLSAgQ09PUkQgZGVzdCA9IHswLCAwfTsKLSAgQ0hBUl9JTkZPIGZpbGwgPSB7JyAnLCAw fTsKLSAgU2Nyb2xsQ29uc29sZVNjcmVlbkJ1ZmZlciAoZ2V0X291dHB1dF9oYW5kbGUgKCksICZy ZWN0LCBOVUxMLCBkZXN0LCAmZmlsbCk7Ci0gIGdldF90dHlwICgpLT5uZWVkX3JlZHJhd19zY3Jl ZW4gPSBmYWxzZTsKLX0KLQotdm9pZAotZmhhbmRsZXJfcHR5X3NsYXZlOjpmaXh1cF9hZnRlcl9h dHRhY2ggKGJvb2wgbmF0aXZlX21heWJlLCBpbnQgZmRfc2V0KQotewotICBpZiAoZmQgPCAwKQot ICAgIGZkID0gZmRfc2V0OwotICBpZiAoZ2V0X3BzZXVkb19jb25zb2xlICgpKQotICAgIHsKLSAg ICAgIGlmIChmaGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkIChnZXRfaGVs cGVyX3Byb2Nlc3NfaWQgKCksCi0JCQkJCQkgICAgdHJ1ZSkpCi0JaWYgKHBjb25fYXR0YWNoZWRf dG8gIT0gZ2V0X21pbm9yICgpKQotCSAgewotCSAgICBwY29uX2F0dGFjaGVkX3RvID0gZ2V0X21p bm9yICgpOwotCSAgICBpbml0X2NvbnNvbGVfaGFuZGxlciAodHJ1ZSk7Ci0JICB9Ci0KLSNpZiAw IC8qIFRoaXMgaXMgZm9yIGRlYnVnIG9ubHkuICovCi0gICAgICBpc0h5YnJpZCA9IHRydWU7Ci0g ICAgICBnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4gPSB0cnVlOwotICAgICAgZ2V0X3R0 eXAgKCktPnN3aXRjaF90b19wY29uX291dCA9IHRydWU7Ci0jZW5kaWYKLQotICAgICAgaWYgKHBj b25fYXR0YWNoZWRfdG8gPT0gZ2V0X21pbm9yICgpICYmIG5hdGl2ZV9tYXliZSkKLQl7Ci0JICBp ZiAoZmQgPT0gMCkKLQkgICAgewotCSAgICAgIHB1bGxfcGNvbl9pbnB1dCAoKTsKLQkgICAgICBE V09SRCBtb2RlID0KLQkJRU5BQkxFX1BST0NFU1NFRF9JTlBVVCB8IEVOQUJMRV9MSU5FX0lOUFVU IHwgRU5BQkxFX0VDSE9fSU5QVVQ7Ci0JICAgICAgU2V0Q29uc29sZU1vZGUgKGdldF9oYW5kbGUg KCksIG1vZGUpOwotCSAgICAgIGlmIChnZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gMCB8fAotCQkg ICFwaW5mbyAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKSkKLQkJZ2V0X3R0eXAgKCktPnBjb25fcGlk ID0gbXlzZWxmLT5waWQ7Ci0JICAgICAgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX2luID0g dHJ1ZTsKLQkgICAgfQotCSAgZWxzZSBpZiAoZmQgPT0gMSB8fCBmZCA9PSAyKQotCSAgICB7Ci0J ICAgICAgRFdPUkQgbW9kZSA9IEVOQUJMRV9QUk9DRVNTRURfT1VUUFVUIHwgRU5BQkxFX1dSQVBf QVRfRU9MX09VVFBVVDsKLQkgICAgICBTZXRDb25zb2xlTW9kZSAoZ2V0X291dHB1dF9oYW5kbGUg KCksIG1vZGUpOwotCSAgICAgIGFjcXVpcmVfb3V0cHV0X211dGV4IChJTkZJTklURSk7Ci0JICAg ICAgaWYgKCFnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25fb3V0KQotCQlnZXRfdHR5cCAoKS0+ d2FpdF9wY29uX2Z3ZCAoKTsKLQkgICAgICBpZiAoZ2V0X3R0eXAgKCktPnBjb25fcGlkID09IDAg fHwKLQkJICAhcGluZm8gKGdldF90dHlwICgpLT5wY29uX3BpZCkpCi0JCWdldF90dHlwICgpLT5w Y29uX3BpZCA9IG15c2VsZi0+cGlkOwotCSAgICAgIGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNv bl9vdXQgPSB0cnVlOwotCSAgICAgIHJlbGVhc2Vfb3V0cHV0X211dGV4ICgpOwotCi0JICAgICAg aWYgKGdldF90dHlwICgpLT5uZWVkX3JlZHJhd19zY3JlZW4pCi0JCXRyaWdnZXJfcmVkcmF3X3Nj cmVlbiAoKTsKLQkgICAgfQotCSAgaW5pdF9jb25zb2xlX2hhbmRsZXIgKGZhbHNlKTsKLQl9Ci0g ICAgICBlbHNlIGlmIChmZCA9PSAwICYmIG5hdGl2ZV9tYXliZSkKLQkvKiBSZWFkIGZyb20gdW5h dHRhY2hlZCBwc2V1ZG8gY29uc29sZSBjYXVzZSBmcmVlemUsCi0JICAgdGhlcmVmb3JlLCBmYWxs YmFjayB0byBsZWdhY3kgcHR5LiAqLwotCXNldF9oYW5kbGUgKGdldF9oYW5kbGVfY3lnICgpKTsK LSAgICB9Ci19Ci0KIHZvaWQKIGZoYW5kbGVyX3B0eV9zbGF2ZTo6Zml4dXBfYWZ0ZXJfZm9yayAo SEFORExFIHBhcmVudCkKIHsKLSAgZml4dXBfYWZ0ZXJfYXR0YWNoIChmYWxzZSwgLTEpOwogICAv LyBmb3JrX2ZpeHVwIChwYXJlbnQsIGludXNlLCAiaW51c2UiKTsKICAgLy8gZmhhbmRsZXJfcHR5 X2NvbW1vbjo6Zml4dXBfYWZ0ZXJfZm9yayAocGFyZW50KTsKICAgcmVwb3J0X3R0eV9jb3VudHMg KHRoaXMsICJpbmhlcml0ZWQiLCAiIik7CkBAIC0yOTk1LDcwICsxOTgyLDE4IEBAIGZoYW5kbGVy X3B0eV9zbGF2ZTo6Zml4dXBfYWZ0ZXJfZXhlYyAoKQogCiAgIGlmICghY2xvc2Vfb25fZXhlYyAo KSkKICAgICBmaXh1cF9hZnRlcl9mb3JrIChOVUxMKTsJLyogTm8gcGFyZW50IGhhbmRsZSByZXF1 aXJlZC4gKi8KLSAgZWxzZSBpZiAoZ2V0X3BzZXVkb19jb25zb2xlICgpKQotICAgIHsKLSAgICAg IGludCB1c2VkID0gMDsKLSAgICAgIGludCBhdHRhY2hlZCA9IDA7Ci0gICAgICBjeWdoZWFwX2Zk ZW51bSBjZmQgKGZhbHNlKTsKLSAgICAgIHdoaWxlIChjZmQubmV4dCAoKSA+PSAwKQotCXsKLQkg IGlmIChjZmQtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZU19NQUpPUiB8fAotCSAgICAgIGNmZC0+ Z2V0X21ham9yICgpID09IERFVl9DT05TX01BSk9SKQotCSAgICB1c2VkICsrOwotCSAgaWYgKGNm ZC0+Z2V0X21ham9yICgpID09IERFVl9QVFlTX01BSk9SICYmCi0JICAgICAgY2ZkLT5nZXRfbWlu b3IgKCkgPT0gcGNvbl9hdHRhY2hlZF90bykKLQkgICAgYXR0YWNoZWQgKys7Ci0JfQotCi0gICAg ICAvKiBDYWxsIEZyZWVDb25zb2xlKCkgaWYgbm8gdHR5IGlzIG9wZW5lZCBhbmQgdGhlIHByb2Nl c3MKLQkgaXMgYXR0YWNoZWQgdG8gY29uc29sZSBjb3JyZXNwb25kaW5nIHRvIHR0eS4gVGhpcyBp cwotCSBuZWVkZWQgdG8gbWFrZSBHTlUgc2NyZWVuIGFuZCB0bXV4IHdvcmsgaW4gV2luZG93cyAx MAotCSAxOTAzLiAqLwotICAgICAgaWYgKGF0dGFjaGVkID09IDEgJiYgZ2V0X21pbm9yICgpID09 IHBjb25fYXR0YWNoZWRfdG8pCi0JcGNvbl9hdHRhY2hlZF90byA9IC0xOwotICAgICAgaWYgKHVz ZWQgPT0gMSAvKiBBYm91dCB0byBjbG9zZSB0aGlzIHR0eSAqLykKLQl7Ci0JICBpbml0X2NvbnNv bGVfaGFuZGxlciAoZmFsc2UpOwotCSAgZnJlZV9hdHRhY2hlZF9jb25zb2xlICgpOwotCX0KLSAg ICB9Ci0KLSAgLyogU2V0IGxvY2FsZSAqLwotICBzZXR1cF9sb2NhbGUgKCk7CiAKICAgLyogSG9v ayBDb25zb2xlIEFQSSAqLwotICBpZiAoZ2V0X3BzZXVkb19jb25zb2xlICgpKQotICAgIHsKICNk ZWZpbmUgRE9fSE9PSyhtb2R1bGUsIG5hbWUpIFwKLSAgICAgIGlmICghbmFtZSMjX09yaWcpIFwK LQl7IFwKLQkgIHZvaWQgKmFwaSA9IGhvb2tfYXBpIChtb2R1bGUsICNuYW1lLCAodm9pZCAqKSBu YW1lIyNfSG9va2VkKTsgXAotCSAgbmFtZSMjX09yaWcgPSAoX190eXBlb2ZfXyAobmFtZSkgKikg YXBpOyBcCi0JICAvKmlmIChhcGkpIHN5c3RlbV9wcmludGYgKCNuYW1lICIgaG9va2VkLiIpOyov IFwKLQl9Ci0gICAgICBET19IT09LIChOVUxMLCBXcml0ZUZpbGUpOwotICAgICAgRE9fSE9PSyAo TlVMTCwgV3JpdGVDb25zb2xlQSk7Ci0gICAgICBET19IT09LIChOVUxMLCBXcml0ZUNvbnNvbGVX KTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFJlYWRGaWxlKTsKLSAgICAgIERPX0hPT0sgKE5VTEws IFJlYWRDb25zb2xlQSk7Ci0gICAgICBET19IT09LIChOVUxMLCBSZWFkQ29uc29sZVcpOwotICAg ICAgRE9fSE9PSyAoTlVMTCwgV3JpdGVDb25zb2xlT3V0cHV0QSk7Ci0gICAgICBET19IT09LIChO VUxMLCBXcml0ZUNvbnNvbGVPdXRwdXRXKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFdyaXRlQ29u c29sZU91dHB1dENoYXJhY3RlckEpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgV3JpdGVDb25zb2xl T3V0cHV0Q2hhcmFjdGVyVyk7Ci0gICAgICBET19IT09LIChOVUxMLCBXcml0ZUNvbnNvbGVPdXRw dXRBdHRyaWJ1dGUpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgU2V0Q29uc29sZUN1cnNvclBvc2l0 aW9uKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFNldENvbnNvbGVUZXh0QXR0cmlidXRlKTsKLSAg ICAgIERPX0hPT0sgKE5VTEwsIFdyaXRlQ29uc29sZUlucHV0QSk7Ci0gICAgICBET19IT09LIChO VUxMLCBXcml0ZUNvbnNvbGVJbnB1dFcpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgUmVhZENvbnNv bGVJbnB1dEEpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgUmVhZENvbnNvbGVJbnB1dFcpOwotICAg ICAgRE9fSE9PSyAoTlVMTCwgUGVla0NvbnNvbGVJbnB1dEEpOwotICAgICAgRE9fSE9PSyAoTlVM TCwgUGVla0NvbnNvbGVJbnB1dFcpOwotICAgICAgLyogQ3JlYXRlUHJvY2VzcygpIGlzIGhvb2tl ZCBmb3IgR0RCIGV0Yy4gKi8KLSAgICAgIERPX0hPT0sgKE5VTEwsIENyZWF0ZVByb2Nlc3NBKTsK LSAgICAgIERPX0hPT0sgKE5VTEwsIENyZWF0ZVByb2Nlc3NXKTsKKyAgaWYgKCFuYW1lIyNfT3Jp ZykgXAorICAgIHsgXAorICAgICAgdm9pZCAqYXBpID0gaG9va19hcGkgKG1vZHVsZSwgI25hbWUs ICh2b2lkICopIG5hbWUjI19Ib29rZWQpOyBcCisgICAgICBuYW1lIyNfT3JpZyA9IChfX3R5cGVv Zl9fIChuYW1lKSAqKSBhcGk7IFwKKyAgICAgIC8qaWYgKGFwaSkgc3lzdGVtX3ByaW50ZiAoI25h bWUgIiBob29rZWQuIik7Ki8gXAogICAgIH0KKyAgLyogQ3JlYXRlUHJvY2VzcygpIGlzIGhvb2tl ZCBmb3IgR0RCIGV0Yy4gKi8KKyAgRE9fSE9PSyAoTlVMTCwgQ3JlYXRlUHJvY2Vzc0EpOworICBE T19IT09LIChOVUxMLCBDcmVhdGVQcm9jZXNzVyk7CiB9CiAKIC8qIFRoaXMgdGhyZWFkIGZ1bmN0 aW9uIGhhbmRsZXMgdGhlIG1hc3RlciBjb250cm9sIHBpcGUuICBJdCB3YWl0cyBmb3IgYQpAQCAt MzIwNiwyNyArMjE0MSw2IEBAIHJlcGx5OgogICByZXR1cm4gMDsKIH0KIAotdm9pZAotZmhhbmRs ZXJfcHR5X21hc3Rlcjo6dHJhbnNmZXJfaW5wdXRfdG9fcGNvbiAodm9pZCkKLXsKLSAgV2FpdEZv clNpbmdsZU9iamVjdCAoaW5wdXRfbXV0ZXgsIElORklOSVRFKTsKLSAgRFdPUkQgbjsKLSAgc2l6 ZV90IHRyYW5zZmVyZWQgPSAwOwotICB3aGlsZSAoOjpieXRlc19hdmFpbGFibGUgKG4sIGZyb21f bWFzdGVyX2N5ZykgJiYgbikKLSAgICB7Ci0gICAgICBjaGFyIGJ1ZlsxMDI0XTsKLSAgICAgIFJl YWRGaWxlIChmcm9tX21hc3Rlcl9jeWcsIGJ1Ziwgc2l6ZW9mIChidWYpLCAmbiwgMCk7Ci0gICAg ICBjaGFyICpwID0gYnVmOwotICAgICAgd2hpbGUgKChwID0gKGNoYXIgKikgbWVtY2hyIChwLCAn XG4nLCBuIC0gKHAgLSBidWYpKSkpCi0JKnAgPSAnXHInOwotICAgICAgaWYgKFdyaXRlRmlsZSAo dG9fc2xhdmUsIGJ1ZiwgbiwgJm4sIDApKQotCXRyYW5zZmVyZWQgKz0gbjsKLSAgICB9Ci0gIGlm ICh0cmFuc2ZlcmVkKQotICAgIGdldF90dHlwICgpLT5wY29uX2luX2VtcHR5ID0gZmFsc2U7Ci0g IFJlbGVhc2VNdXRleCAoaW5wdXRfbXV0ZXgpOwotfQotCiBzdGF0aWMgRFdPUkQgV0lOQVBJCiBw dHlfbWFzdGVyX3RocmVhZCAoVk9JRCAqYXJnKQogewpAQCAtMzI0MiwyMyArMjE1Niw3IEBAIGZo YW5kbGVyX3B0eV9tYXN0ZXI6OnB0eV9tYXN0ZXJfZndkX3RocmVhZCAoKQogICB0ZXJtaW9zX3By aW50ZiAoIlN0YXJ0ZWQuIik7CiAgIGZvciAoOzspCiAgICAgewotICAgICAgaWYgKGdldF9wc2V1 ZG9fY29uc29sZSAoKSkKLQl7Ci0JICBnZXRfdHR5cCAoKS0+cGNvbl9sYXN0X3RpbWUgPSBHZXRU aWNrQ291bnQgKCk7Ci0JICB3aGlsZSAoOjpieXRlc19hdmFpbGFibGUgKHJsZW4sIGZyb21fc2xh dmUpICYmIHJsZW4gPT0gMCkKLQkgICAgewotCSAgICAgIC8qIEZvcmNpYmx5IHRyYW5zZmVyIGlu cHV0IGlmIGl0IGlzIHJlcXVlc3RlZCBieSBzbGF2ZS4KLQkJIFRoaXMgaGFwcGVucyB3aGVuIGlu cHV0IGRhdGEgc2hvdWxkIGJlIHRyYW5zZmVyZWQKLQkJIGZyb20gdGhlIGlucHV0IHBpcGUgZm9y IGN5Z3dpbiBhcHBzIHRvIHRoZSBpbnB1dCBwaXBlCi0JCSBmb3IgbmF0aXZlIGFwcHMuICovCi0J ICAgICAgaWYgKGdldF90dHlwICgpLT5yZXFfdHJhbnNmZXJfaW5wdXRfdG9fcGNvbikKLQkJewot CQkgIHRyYW5zZmVyX2lucHV0X3RvX3Bjb24gKCk7Ci0JCSAgZ2V0X3R0eXAgKCktPnJlcV90cmFu c2Zlcl9pbnB1dF90b19wY29uID0gZmFsc2U7Ci0JCX0KLQkgICAgICBTbGVlcCAoMSk7Ci0JICAg IH0KLQl9CisgICAgICBnZXRfdHR5cCAoKS0+cGNvbl9sYXN0X3RpbWUgPSBHZXRUaWNrQ291bnQg KCk7CiAgICAgICBpZiAoIVJlYWRGaWxlIChmcm9tX3NsYXZlLCBvdXRidWYsIHNpemVvZiBvdXRi dWYsICZybGVuLCBOVUxMKSkKIAl7CiAJICB0ZXJtaW9zX3ByaW50ZiAoIlJlYWRGaWxlIGZvciBm b3J3YXJkaW5nIGZhaWxlZCwgJUUiKTsKQEAgLTMyNjYsMTQgKzIxNjQsOSBAQCBmaGFuZGxlcl9w dHlfbWFzdGVyOjpwdHlfbWFzdGVyX2Z3ZF90aHJlYWQgKCkKIAl9CiAgICAgICBzc2l6ZV90IHds ZW4gPSBybGVuOwogICAgICAgY2hhciAqcHRyID0gb3V0YnVmOwotICAgICAgaWYgKGdldF9wc2V1 ZG9fY29uc29sZSAoKSkKKyAgICAgIGlmIChnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSkK IAl7Ci0JICAvKiBBdm9pZCBkdXBsaWNhdGluZyBzbGF2ZSBvdXRwdXQgd2hpY2ggaXMgYWxyZWFk eSBzZW50IHRvCi0JICAgICB0b19tYXN0ZXJfY3lnICovCi0JICBpZiAoIWdldF90dHlwICgpLT5z d2l0Y2hfdG9fcGNvbl9vdXQpCi0JICAgIGNvbnRpbnVlOwotCi0JICAvKiBBdm9pZCBzZXR0aW5n IHdpbmRvdyB0aXRsZSB0byAiY3lnd2luLWNvbnNvbGUtaGVscGVyLmV4ZSIgKi8KKwkgIC8qIFJl bW92ZSBDU0kgPiBQbSBtICovCiAJICBpbnQgc3RhdGUgPSAwOwogCSAgaW50IHN0YXJ0X2F0ID0g MDsKIAkgIGZvciAoRFdPUkQgaT0wOyBpPHJsZW47IGkrKykKQEAgLTMyODMsNDMgKzIxNzYsOCBA QCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpwdHlfbWFzdGVyX2Z3ZF90aHJlYWQgKCkKIAkJc3RhdGUg PSAxOwogCQljb250aW51ZTsKIAkgICAgICB9Ci0JICAgIGVsc2UgaWYgKChzdGF0ZSA9PSAxICYm IG91dGJ1ZltpXSA9PSAnXScpIHx8Ci0JCSAgICAgKHN0YXRlID09IDIgJiYgb3V0YnVmW2ldID09 ICcwJykgfHwKLQkJICAgICAoc3RhdGUgPT0gMyAmJiBvdXRidWZbaV0gPT0gJzsnKSkKLQkgICAg ICB7Ci0JCXN0YXRlICsrOwotCQljb250aW51ZTsKLQkgICAgICB9Ci0JICAgIGVsc2UgaWYgKHN0 YXRlID09IDQgJiYgb3V0YnVmW2ldID09ICdcYScpCi0JICAgICAgewotCQljb25zdCBjaGFyICpo ZWxwZXJfc3RyID0gIlxcYmluXFxjeWd3aW4tY29uc29sZS1oZWxwZXIuZXhlIjsKLQkJaWYgKG1l bW1lbSAoJm91dGJ1ZltzdGFydF9hdF0sIGkgKyAxIC0gc3RhcnRfYXQsCi0JCQkgICAgaGVscGVy X3N0ciwgc3RybGVuIChoZWxwZXJfc3RyKSkpCi0JCSAgewotCQkgICAgbWVtbW92ZSAoJm91dGJ1 ZltzdGFydF9hdF0sICZvdXRidWZbaSsxXSwgcmxlbi1pLTEpOwotCQkgICAgcmxlbiA9IHdsZW4g PSBzdGFydF9hdCArIHJsZW4gLSBpIC0gMTsKLQkJICB9Ci0JCXN0YXRlID0gMDsKLQkJY29udGlu dWU7Ci0JICAgICAgfQotCSAgICBlbHNlIGlmIChvdXRidWZbaV0gPT0gJ1xhJykKLQkgICAgICB7 Ci0JCXN0YXRlID0gMDsKLQkJY29udGludWU7Ci0JICAgICAgfQotCi0JICAvKiBSZW1vdmUgQ1NJ ID4gUG0gbSAqLwotCSAgc3RhdGUgPSAwOwotCSAgc3RhcnRfYXQgPSAwOwotCSAgZm9yIChEV09S RCBpPTA7IGk8cmxlbjsgaSsrKQotCSAgICBpZiAob3V0YnVmW2ldID09ICdcMDMzJykKLQkgICAg ICB7Ci0JCXN0YXJ0X2F0ID0gaTsKLQkJc3RhdGUgPSAxOwotCQljb250aW51ZTsKLQkgICAgICB9 Ci0JICAgIGVsc2UgaWYgKChzdGF0ZSA9PSAxICYmIG91dGJ1ZltpXSA9PSAnWycpIHx8Ci0JCSAg ICAgKHN0YXRlID09IDIgJiYgb3V0YnVmW2ldID09ICc+JykpCisJICAgIGVsc2UgaWYgKChzdGF0 ZSA9PSAxICYmIG91dGJ1ZltpXSA9PSAnWycpCisJCSAgICAgfHwgKHN0YXRlID09IDIgJiYgb3V0 YnVmW2ldID09ICc+JykpCiAJICAgICAgewogCQlzdGF0ZSArKzsKIAkJY29udGludWU7CkBAIC0z Mzg4LDIwMSArMjI0Niw2IEBAIHB0eV9tYXN0ZXJfZndkX3RocmVhZCAoVk9JRCAqYXJnKQogICBy ZXR1cm4gKChmaGFuZGxlcl9wdHlfbWFzdGVyICopIGFyZyktPnB0eV9tYXN0ZXJfZndkX3RocmVh ZCAoKTsKIH0KIAotLyogSWYgbWFzdGVyIHByb2Nlc3MgaXMgcnVubmluZyBhcyBzZXJ2aWNlLCBh dHRhY2hpbmcgdG8KLSAgIHBzZXVkbyBjb25zb2xlIHNob3VsZCBiZSBkb25lIGluIGZvcmsuIElm IGF0dGFjaGluZwotICAgaXMgZG9uZSBpbiBzcGF3biBmb3IgaW5ldGQgb3Igc3NoZCwgaXQgZmFp bHMgYmVjYXVzZQotICAgdGhlIGhlbHBlciBwcm9jZXNzIGlzIHJ1bm5pbmcgYXMgcHJpdmlsZWdl ZCB1c2VyIHdoaWxlCi0gICBzbGF2ZSBwcm9jZXNzIGlzIG5vdC4gVGhpcyBmdW5jdGlvbiBpcyB1 c2VkIHRvIGRldGVybWluZQotICAgaWYgdGhlIHByb2Nlc3MgaXMgcnVubmluZyBhcyBhIHNydmlj ZSBvciBub3QuICovCi1pbmxpbmUgc3RhdGljIGJvb2wKLWlzX3J1bm5pbmdfYXNfc2VydmljZSAo dm9pZCkKLXsKLSAgcmV0dXJuIGNoZWNrX3Rva2VuX21lbWJlcnNoaXAgKHdlbGxfa25vd25fc2Vy dmljZV9zaWQpCi0gICAgfHwgY3lnaGVhcC0+dXNlci5zYXZlZF9zaWQgKCkgPT0gd2VsbF9rbm93 bl9zeXN0ZW1fc2lkOwotfQotCi1ib29sCi1maGFuZGxlcl9wdHlfbWFzdGVyOjpzZXR1cF9wc2V1 ZG9jb25zb2xlICgpCi17Ci0gIGlmIChkaXNhYmxlX3Bjb24pCi0gICAgcmV0dXJuIGZhbHNlOwot ICAvKiBJZiB0aGUgbGVnYWN5IGNvbnNvbGUgbW9kZSBpcyBlbmFibGVkLCBwc2V1ZG8gY29uc29s ZSBzZWVtcwotICAgICBub3QgdG8gd29yayBhcyBleHBlY3RlZC4gVG8gZGV0ZXJtaW5lIGNvbnNv bGUgbW9kZSwgcmVnaXN0cnkKLSAgICAga2V5IEZvcmNlVjIgaW4gSEtFWV9DVVJSRU5UX1VTRVJc Q29uc29sZSBpcyBjaGVja2VkLiAqLwotICByZWdfa2V5IHJlZyAoSEtFWV9DVVJSRU5UX1VTRVIs IEtFWV9SRUFELCBMIkNvbnNvbGUiLCBOVUxMKTsKLSAgaWYgKHJlZy5lcnJvciAoKSkKLSAgICBy ZXR1cm4gZmFsc2U7Ci0gIGlmIChyZWcuZ2V0X2R3b3JkIChMIkZvcmNlVjIiLCAxKSA9PSAwKQot ICAgIHsKLSAgICAgIHRlcm1pb3NfcHJpbnRmICgiUHNldWRvIGNvbnNvbGUgaXMgZGlzYWJsZWQg IgotCQkgICAgICAiYmVjYXVzZSB0aGUgbGVnYWN5IGNvbnNvbGUgbW9kZSBpcyBlbmFibGVkLiIp OwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAvKiBQc2V1ZG8gY29uc29sZSBzdXBw cm90IGlzIHJlYWxpemVkIHVzaW5nIGEgdHJpY2t5IHRlY2huaWMuCi0gICAgIFBUWSBuZWVkIHRo ZSBwc2V1ZG8gY29uc29sZSBoYW5kbGVzLCBob3dldmVyLCB0aGV5IGNhbm5vdAotICAgICBiZSBy ZXRyaWV2ZWQgYnkgbm9ybWFsIHByb2NlZHVyZS4gVGhlcmVmb3JlLCBydW4gYSBoZWxwZXIKLSAg ICAgcHJvY2VzcyBpbiBhIHBzZXVkbyBjb25zb2xlIGFuZCBnZXQgdGhlbSBmcm9tIHRoZSBoZWxw ZXIuCi0gICAgIFNsYXZlIHByb2Nlc3Mgd2lsbCBhdHRhY2ggdG8gdGhlIHBzZXVkbyBjb25zb2xl IGluIHRoZQotICAgICBoZWxwZXIgcHJvY2VzcyB1c2luZyBBdHRhY2hDb25zb2xlKCkuICovCi0g IENPT1JEIHNpemUgPSB7Ci0gICAgKFNIT1JUKSBnZXRfdHR5cCAoKS0+d2luc2l6ZS53c19jb2ws Ci0gICAgKFNIT1JUKSBnZXRfdHR5cCAoKS0+d2luc2l6ZS53c19yb3cKLSAgfTsKLSAgQ3JlYXRl UGlwZSAoJmZyb21fbWFzdGVyLCAmdG9fc2xhdmUsICZzZWNfbm9uZSwgMCk7Ci0gIFNldExhc3RF cnJvciAoRVJST1JfU1VDQ0VTUyk7Ci0gIEhSRVNVTFQgcmVzID0gQ3JlYXRlUHNldWRvQ29uc29s ZSAoc2l6ZSwgZnJvbV9tYXN0ZXIsIHRvX21hc3RlciwKLQkJCQkgICAgIDAsICZnZXRfdHR5cCAo KS0+aF9wc2V1ZG9fY29uc29sZSk7Ci0gIGlmIChyZXMgIT0gU19PSyB8fCBHZXRMYXN0RXJyb3Ig KCkgPT0gRVJST1JfUFJPQ19OT1RfRk9VTkQpCi0gICAgewotICAgICAgaWYgKHJlcyAhPSBTX09L KQotCXN5c3RlbV9wcmludGYgKCJDcmVhdGVQc2V1ZG9Db25zb2xlKCkgZmFpbGVkLiAlMDh4XG4i LAotCQkgICAgICAgR2V0TGFzdEVycm9yICgpKTsKLSAgICAgIGdvdG8gZmFsbGJhY2s7Ci0gICAg fQotCi0gIC8qIElmIG1hc3RlciBwcm9jZXNzIGlzIHJ1bm5pbmcgYXMgc2VydmljZSwgYXR0YWNo aW5nIHRvCi0gICAgIHBzZXVkbyBjb25zb2xlIHNob3VsZCBiZSBkb25lIGluIGZvcmsuIElmIGF0 dGFjaGluZwotICAgICBpcyBkb25lIGluIHNwYXduIGZvciBpbmV0ZCBvciBzc2hkLCBpdCBmYWls cyBiZWNhdXNlCi0gICAgIHRoZSBoZWxwZXIgcHJvY2VzcyBpcyBydW5uaW5nIGFzIHByaXZpbGVn ZWQgdXNlciB3aGlsZQotICAgICBzbGF2ZSBwcm9jZXNzIGlzIG5vdC4gKi8KLSAgaWYgKGlzX3J1 bm5pbmdfYXNfc2VydmljZSAoKSkKLSAgICBnZXRfdHR5cCAoKS0+YXR0YWNoX3Bjb25faW5fZm9y ayA9IHRydWU7Ci0KLSAgU1RBUlRVUElORk9FWFcgc2lfaGVscGVyOwotICBIQU5ETEUgaGVsbG8s IGdvb2RieWU7Ci0gIEhBTkRMRSBociwgaHc7Ci0gIFBST0NFU1NfSU5GT1JNQVRJT04gcGlfaGVs cGVyOwotICBIQU5ETEUgaHBDb25JbiwgaHBDb25PdXQ7Ci0gIHsKLSAgICBTSVpFX1QgYnl0ZXNS ZXF1aXJlZDsKLSAgICBJbml0aWFsaXplUHJvY1RocmVhZEF0dHJpYnV0ZUxpc3QgKE5VTEwsIDIs IDAsICZieXRlc1JlcXVpcmVkKTsKLSAgICBaZXJvTWVtb3J5ICgmc2lfaGVscGVyLCBzaXplb2Yg KHNpX2hlbHBlcikpOwotICAgIHNpX2hlbHBlci5TdGFydHVwSW5mby5jYiA9IHNpemVvZiAoU1RB UlRVUElORk9FWFcpOwotICAgIHNpX2hlbHBlci5scEF0dHJpYnV0ZUxpc3QgPSAoUFBST0NfVEhS RUFEX0FUVFJJQlVURV9MSVNUKQotICAgICAgSGVhcEFsbG9jIChHZXRQcm9jZXNzSGVhcCAoKSwg MCwgYnl0ZXNSZXF1aXJlZCk7Ci0gICAgaWYgKHNpX2hlbHBlci5scEF0dHJpYnV0ZUxpc3QgPT0g TlVMTCkKLSAgICAgIGdvdG8gY2xlYW51cF9wc2V1ZG9fY29uc29sZTsKLSAgICBpZiAoIUluaXRp YWxpemVQcm9jVGhyZWFkQXR0cmlidXRlTGlzdCAoc2lfaGVscGVyLmxwQXR0cmlidXRlTGlzdCwK LQkJCQkJICAgIDIsIDAsICZieXRlc1JlcXVpcmVkKSkKLSAgICAgIGdvdG8gY2xlYW51cF9oZWFw OwotICAgIGlmICghVXBkYXRlUHJvY1RocmVhZEF0dHJpYnV0ZSAoc2lfaGVscGVyLmxwQXR0cmli dXRlTGlzdCwKLQkJCQkgICAgMCwKLQkJCQkgICAgUFJPQ19USFJFQURfQVRUUklCVVRFX1BTRVVE T0NPTlNPTEUsCi0JCQkJICAgIGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlLAotCQkJCSAg ICBzaXplb2YgKGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlKSwKLQkJCQkgICAgTlVMTCwg TlVMTCkpCi0gICAgICBnb3RvIGNsZWFudXBfaGVhcDsKLSAgICAvKiBDcmVhdGUgZXZlbnRzIGZv ciBzdGFydC9zdG9wIGhlbHBlciBwcm9jZXNzLiAqLwotICAgIGhlbGxvID0gQ3JlYXRlRXZlbnQg KCZzZWNfbm9uZSwgdHJ1ZSwgZmFsc2UsIE5VTEwpOwotICAgIGdvb2RieWUgPSBDcmVhdGVFdmVu dCAoJnNlY19ub25lLCB0cnVlLCBmYWxzZSwgTlVMTCk7Ci0gICAgLyogQ3JlYXRlIGEgcGlwZSBm b3IgcmVjZWl2aW5nIHBzZXVkbyBjb25zb2xlIGhhbmRsZXMgKi8KLSAgICBDcmVhdGVQaXBlICgm aHIsICZodywgJnNlY19ub25lLCAwKTsKLSAgICAvKiBJbmhlcml0IG9ubHkgaGFuZGxlcyB3aGlj aCBhcmUgbmVlZGVkIGJ5IGhlbHBlci4gKi8KLSAgICBIQU5ETEUgaGFuZGxlc190b19pbmhlcml0 W10gPSB7aGVsbG8sIGdvb2RieWUsIGh3fTsKLSAgICBpZiAoIVVwZGF0ZVByb2NUaHJlYWRBdHRy aWJ1dGUgKHNpX2hlbHBlci5scEF0dHJpYnV0ZUxpc3QsCi0JCQkJICAgIDAsCi0JCQkJICAgIFBS T0NfVEhSRUFEX0FUVFJJQlVURV9IQU5ETEVfTElTVCwKLQkJCQkgICAgaGFuZGxlc190b19pbmhl cml0LAotCQkJCSAgICBzaXplb2YgKGhhbmRsZXNfdG9faW5oZXJpdCksCi0JCQkJICAgIE5VTEws IE5VTEwpKQotICAgICAgZ290byBjbGVhbnVwX2V2ZW50X2FuZF9waXBlczsKLSAgICAvKiBDcmVh dGUgaGVscGVyIHByb2Nlc3MgKi8KLSAgICBXQ0hBUiBjbWRbTUFYX1BBVEhdOwotICAgIHBhdGhf Y29udiBoZWxwZXIgKCIvYmluL2N5Z3dpbi1jb25zb2xlLWhlbHBlci5leGUiKTsKLSAgICBzaXpl X3QgbGVuID0gaGVscGVyLmdldF93aWRlX3dpbjMyX3BhdGhfbGVuICgpOwotICAgIGhlbHBlci5n ZXRfd2lkZV93aW4zMl9wYXRoIChjbWQpOwotICAgIF9fc21hbGxfc3dwcmludGYgKGNtZCArIGxl biwgTCIgJXAgJXAgJXAiLCBoZWxsbywgZ29vZGJ5ZSwgaHcpOwotICAgIHNpX2hlbHBlci5TdGFy dHVwSW5mby5kd0ZsYWdzID0gU1RBUlRGX1VTRVNUREhBTkRMRVM7Ci0gICAgc2lfaGVscGVyLlN0 YXJ0dXBJbmZvLmhTdGRJbnB1dCA9IE5VTEw7Ci0gICAgc2lfaGVscGVyLlN0YXJ0dXBJbmZvLmhT dGRPdXRwdXQgPSBOVUxMOwotICAgIHNpX2hlbHBlci5TdGFydHVwSW5mby5oU3RkRXJyb3IgPSBO VUxMOwotICAgIGlmICghQ3JlYXRlUHJvY2Vzc1cgKE5VTEwsIGNtZCwgJnNlY19ub25lLCAmc2Vj X25vbmUsCi0JCQkgVFJVRSwgRVhURU5ERURfU1RBUlRVUElORk9fUFJFU0VOVCwKLQkJCSBOVUxM LCBOVUxMLCAmc2lfaGVscGVyLlN0YXJ0dXBJbmZvLCAmcGlfaGVscGVyKSkKLSAgICAgIGdvdG8g Y2xlYW51cF9ldmVudF9hbmRfcGlwZXM7Ci0gICAgZm9yICg7OykKLSAgICAgIHsKLSAgICAgICAg RFdPUkQgd2FpdF9yZXN1bHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0IChoZWxsbywgNTAwKTsKLQlp ZiAod2FpdF9yZXN1bHQgPT0gV0FJVF9PQkpFQ1RfMCkKLQkgIGJyZWFrOwotCWlmICh3YWl0X3Jl c3VsdCAhPSBXQUlUX1RJTUVPVVQpCi0JICBnb3RvIGNsZWFudXBfaGVscGVyX3Byb2Nlc3M7Ci0J RFdPUkQgZXhpdF9jb2RlOwotCWlmICghR2V0RXhpdENvZGVQcm9jZXNzKHBpX2hlbHBlci5oUHJv Y2VzcywgJmV4aXRfY29kZSkpCi0JICBnb3RvIGNsZWFudXBfaGVscGVyX3Byb2Nlc3M7Ci0JaWYg KGV4aXRfY29kZSA9PSBTVElMTF9BQ1RJVkUpCi0JICBjb250aW51ZTsKLQlpZiAoZXhpdF9jb2Rl ICE9IDAgfHwKLQkgICAgV2FpdEZvclNpbmdsZU9iamVjdCAoaGVsbG8sIDUwMCkgIT0gV0FJVF9P QkpFQ1RfMCkKLQkgIGdvdG8gY2xlYW51cF9oZWxwZXJfcHJvY2VzczsKLQlicmVhazsKLSAgICAg IH0KLSAgICBDbG9zZUhhbmRsZSAoaGVsbG8pOwotICAgIENsb3NlSGFuZGxlIChwaV9oZWxwZXIu aFRocmVhZCk7Ci0gICAgLyogUmV0cmlldmUgcHNldWRvIGNvbnNvbGUgaGFuZGxlcyAqLwotICAg IERXT1JEIHJMZW47Ci0gICAgY2hhciBidWZbNjRdOwotICAgIGlmICghUmVhZEZpbGUgKGhyLCBi dWYsIHNpemVvZiAoYnVmKSwgJnJMZW4sIE5VTEwpKQotICAgICAgZ290byBjbGVhbnVwX2hlbHBl cl9wcm9jZXNzOwotICAgIGJ1ZltyTGVuXSA9ICdcMCc7Ci0gICAgc3NjYW5mIChidWYsICJTdGRI YW5kbGVzPSVwLCVwIiwgJmhwQ29uSW4sICZocENvbk91dCk7Ci0gICAgaWYgKCFEdXBsaWNhdGVI YW5kbGUgKHBpX2hlbHBlci5oUHJvY2VzcywgaHBDb25JbiwKLQkJCSAgR2V0Q3VycmVudFByb2Nl c3MgKCksICZocENvbkluLCAwLAotCQkJICBUUlVFLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpKQot ICAgICAgZ290byBjbGVhbnVwX2hlbHBlcl9wcm9jZXNzOwotICAgIGlmICghRHVwbGljYXRlSGFu ZGxlIChwaV9oZWxwZXIuaFByb2Nlc3MsIGhwQ29uT3V0LAotCQkJICBHZXRDdXJyZW50UHJvY2Vz cyAoKSwgJmhwQ29uT3V0LCAwLAotCQkJICBUUlVFLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpKQot ICAgICAgZ290byBjbGVhbnVwX3Bjb25faW47Ci0gICAgQ2xvc2VIYW5kbGUgKGhyKTsKLSAgICBD bG9zZUhhbmRsZSAoaHcpOwotICAgIC8qIENsZWFuIHVwICovCi0gICAgRGVsZXRlUHJvY1RocmVh ZEF0dHJpYnV0ZUxpc3QgKHNpX2hlbHBlci5scEF0dHJpYnV0ZUxpc3QpOwotICAgIEhlYXBGcmVl IChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgc2lfaGVscGVyLmxwQXR0cmlidXRlTGlzdCk7Ci0gIH0K LSAgLyogU2V0dGluZyBpbmZvcm1hdGlvbiBvZiBzdHVmZnMgcmVnYXJkaW5nIHBzZXVkbyBjb25z b2xlICovCi0gIGdldF90dHlwICgpLT5oX2hlbHBlcl9nb29kYnllID0gZ29vZGJ5ZTsKLSAgZ2V0 X3R0eXAgKCktPmhfaGVscGVyX3Byb2Nlc3MgPSBwaV9oZWxwZXIuaFByb2Nlc3M7Ci0gIGdldF90 dHlwICgpLT5oZWxwZXJfcHJvY2Vzc19pZCA9IHBpX2hlbHBlci5kd1Byb2Nlc3NJZDsKLSAgQ2xv c2VIYW5kbGUgKGZyb21fbWFzdGVyKTsKLSAgQ2xvc2VIYW5kbGUgKHRvX21hc3Rlcik7Ci0gIGZy b21fbWFzdGVyID0gaHBDb25JbjsKLSAgdG9fbWFzdGVyID0gaHBDb25PdXQ7Ci0gIFJlc2l6ZVBz ZXVkb0NvbnNvbGUgKGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlLCBzaXplKTsKLSAgcmV0 dXJuIHRydWU7Ci0KLWNsZWFudXBfcGNvbl9pbjoKLSAgQ2xvc2VIYW5kbGUgKGhwQ29uSW4pOwot Y2xlYW51cF9oZWxwZXJfcHJvY2VzczoKLSAgU2V0RXZlbnQgKGdvb2RieWUpOwotICBXYWl0Rm9y U2luZ2xlT2JqZWN0IChwaV9oZWxwZXIuaFByb2Nlc3MsIElORklOSVRFKTsKLSAgQ2xvc2VIYW5k bGUgKHBpX2hlbHBlci5oUHJvY2Vzcyk7Ci0gIGdvdG8gc2tpcF9jbG9zZV9oZWxsbzsKLWNsZWFu dXBfZXZlbnRfYW5kX3BpcGVzOgotICBDbG9zZUhhbmRsZSAoaGVsbG8pOwotc2tpcF9jbG9zZV9o ZWxsbzoKLSAgQ2xvc2VIYW5kbGUgKGdvb2RieWUpOwotICBDbG9zZUhhbmRsZSAoaHIpOwotICBD bG9zZUhhbmRsZSAoaHcpOwotY2xlYW51cF9oZWFwOgotICBIZWFwRnJlZSAoR2V0UHJvY2Vzc0hl YXAgKCksIDAsIHNpX2hlbHBlci5scEF0dHJpYnV0ZUxpc3QpOwotY2xlYW51cF9wc2V1ZG9fY29u c29sZToKLSAgewotICAgIEhQQ09OX0lOVEVSTkFMICpocCA9IChIUENPTl9JTlRFUk5BTCAqKSBn ZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZTsKLSAgICBIQU5ETEUgdG1wID0gaHAtPmhDb25I b3N0UHJvY2VzczsKLSAgICBDbG9zZVBzZXVkb0NvbnNvbGUgKGdldF9wc2V1ZG9fY29uc29sZSAo KSk7Ci0gICAgQ2xvc2VIYW5kbGUgKHRtcCk7Ci0gIH0KLWZhbGxiYWNrOgotICBDbG9zZUhhbmRs ZSAoZnJvbV9tYXN0ZXIpOwotICBDbG9zZUhhbmRsZSAodG9fc2xhdmUpOwotICBmcm9tX21hc3Rl ciA9IGZyb21fbWFzdGVyX2N5ZzsKLSAgdG9fc2xhdmUgPSBOVUxMOwotICBnZXRfdHR5cCAoKS0+ aF9wc2V1ZG9fY29uc29sZSA9IE5VTEw7Ci0gIHJldHVybiBmYWxzZTsKLX0KLQogYm9vbAogZmhh bmRsZXJfcHR5X21hc3Rlcjo6c2V0dXAgKCkKIHsKQEAgLTM1OTUsMTEgKzIyNTgsNiBAQCBmaGFu ZGxlcl9wdHlfbWFzdGVyOjpzZXR1cCAoKQogICBpZiAodW5pdCA8IDApCiAgICAgcmV0dXJuIGZh bHNlOwogCi0gIC8qIGZyb21fbWFzdGVyIHNob3VsZCBiZSB1c2VkIGZvciBwc2V1ZG8gY29uc29s ZS4KLSAgICAgSnVzdCBjb3B5IGZyb21fbWFzdGVyX2N5ZyBoZXJlIGZvciB0aGUgY2FzZSB0aGF0 Ci0gICAgIHBzZXVkbyBjb25zb2xlIGlzIG5vdCBhdmFpbGFibGUuICovCi0gIGZyb21fbWFzdGVy ID0gZnJvbV9tYXN0ZXJfY3lnOwotCiAgIFByb3RlY3RIYW5kbGUxIChnZXRfb3V0cHV0X2hhbmRs ZSAoKSwgdG9fcHR5KTsKIAogICB0dHkmIHQgPSAqY3lnd2luX3NoYXJlZC0+dHR5W3VuaXRdOwpA QCAtMzY5OCwxNSArMjM1NiwyMSBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpzZXR1cCAoKQogICAg ICAgZ290byBlcnI7CiAgICAgfQogCi0gIHQud2luc2l6ZS53c19jb2wgPSA4MDsKLSAgdC53aW5z aXplLndzX3JvdyA9IDI1OwotCi0gIHNldHVwX3BzZXVkb2NvbnNvbGUgKCk7CisgIF9fc21hbGxf c3ByaW50ZiAocGlwZW5hbWUsICJwdHklZC10by1zbGF2ZSIsIHVuaXQpOworICByZXMgPSBmaGFu ZGxlcl9waXBlOjpjcmVhdGUgKCZzZWNfbm9uZSwgJmZyb21fbWFzdGVyLCAmdG9fc2xhdmUsCisJ CQkgICAgICAgZmhhbmRsZXJfcHR5X2NvbW1vbjo6cGlwZXNpemUsIHBpcGVuYW1lLCAwKTsKKyAg aWYgKHJlcykKKyAgICB7CisgICAgICBlcnJzdHIgPSAiaW5wdXQgcGlwZSI7CisgICAgICBnb3Rv IGVycjsKKyAgICB9CiAKICAgdC5zZXRfZnJvbV9tYXN0ZXIgKGZyb21fbWFzdGVyKTsKICAgdC5z ZXRfZnJvbV9tYXN0ZXJfY3lnIChmcm9tX21hc3Rlcl9jeWcpOwogICB0LnNldF90b19tYXN0ZXIg KHRvX21hc3Rlcik7CiAgIHQuc2V0X3RvX21hc3Rlcl9jeWcgKHRvX21hc3Rlcl9jeWcpOworICB0 LndpbnNpemUud3NfY29sID0gODA7CisgIHQud2luc2l6ZS53c19yb3cgPSAyNTsKICAgdC5tYXN0 ZXJfcGlkID0gbXlzZWxmLT5waWQ7CiAKICAgZGV2ICgpLnBhcnNlIChERVZfUFRZTV9NQUpPUiwg dW5pdCk7CkBAIC0zNzE5LDYgKzIzODMsNyBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpzZXR1cCAo KQogZXJyOgogICBfX3NldGVycm5vICgpOwogICBjbG9zZV9tYXliZSAoZnJvbV9zbGF2ZSk7Cisg IGNsb3NlX21heWJlICh0b19zbGF2ZSk7CiAgIGNsb3NlX21heWJlIChnZXRfaGFuZGxlICgpKTsK ICAgY2xvc2VfbWF5YmUgKGdldF9vdXRwdXRfaGFuZGxlICgpKTsKICAgY2xvc2VfbWF5YmUgKGlu cHV0X2F2YWlsYWJsZV9ldmVudCk7CkBAIC0zNzc4LDkgKzI0NDMsNiBAQCBmaGFuZGxlcl9wdHlf Y29tbW9uOjpwcm9jZXNzX29wb3N0X291dHB1dCAoSEFORExFIGgsIGNvbnN0IHZvaWQgKnB0ciwg c3NpemVfdCYgbAogewogICBzc2l6ZV90IHRvd3JpdGUgPSBsZW47CiAgIEJPT0wgcmVzID0gVFJV RTsKLSAgQk9PTCAoV0lOQVBJICpXcml0ZUZ1bmMpCi0gICAgKEhBTkRMRSwgTFBDVk9JRCwgRFdP UkQsIExQRFdPUkQsIExQT1ZFUkxBUFBFRCk7Ci0gIFdyaXRlRnVuYyA9IFdyaXRlRmlsZV9Pcmln ID8gV3JpdGVGaWxlX09yaWcgOiBXcml0ZUZpbGU7CiAgIHdoaWxlICh0b3dyaXRlKQogICAgIHsK ICAgICAgIGlmICghaXNfZWNobykKQEAgLTM4MDMsNyArMjQ2NSw3IEBAIGZoYW5kbGVyX3B0eV9j b21tb246OnByb2Nlc3Nfb3Bvc3Rfb3V0cHV0IChIQU5ETEUgaCwgY29uc3Qgdm9pZCAqcHRyLCBz c2l6ZV90JiBsCiAgICAgICBpZiAoIShnZXRfdHR5cCAoKS0+dGkuY19vZmxhZyAmIE9QT1NUKSkJ Ly8gcmF3IG91dHB1dCBtb2RlCiAJewogCSAgRFdPUkQgbiA9IE1JTiAoT1VUX0JVRkZFUl9TSVpF LCB0b3dyaXRlKTsKLQkgIHJlcyA9IFdyaXRlRnVuYyAoaCwgcHRyLCBuLCAmbiwgTlVMTCk7CisJ ICByZXMgPSBXcml0ZUZpbGUgKGgsIHB0ciwgbiwgJm4sIE5VTEwpOwogCSAgaWYgKCFyZXMpCiAJ ICAgIGJyZWFrOwogCSAgcHRyID0gKGNoYXIgKikgcHRyICsgbjsKQEAgLTM4NTMsNyArMjUxNSw3 IEBAIGZoYW5kbGVyX3B0eV9jb21tb246OnByb2Nlc3Nfb3Bvc3Rfb3V0cHV0IChIQU5ETEUgaCwg Y29uc3Qgdm9pZCAqcHRyLCBzc2l6ZV90JiBsCiAJCSAgYnJlYWs7CiAJCX0KIAkgICAgfQotCSAg cmVzID0gV3JpdGVGdW5jIChoLCBvdXRidWYsIG4sICZuLCBOVUxMKTsKKwkgIHJlcyA9IFdyaXRl RmlsZSAoaCwgb3V0YnVmLCBuLCAmbiwgTlVMTCk7CiAJICBpZiAoIXJlcykKIAkgICAgYnJlYWs7 CiAJICBwdHIgPSAoY2hhciAqKSBwdHIgKyByYzsKQEAgLTM4NjMsMyArMjUyNSwxMzQgQEAgZmhh bmRsZXJfcHR5X2NvbW1vbjo6cHJvY2Vzc19vcG9zdF9vdXRwdXQgKEhBTkRMRSBoLCBjb25zdCB2 b2lkICpwdHIsIHNzaXplX3QmIGwKICAgbGVuIC09IHRvd3JpdGU7CiAgIHJldHVybiByZXM7CiB9 CisKK2Jvb2wKK2ZoYW5kbGVyX3B0eV9zbGF2ZTo6c2V0dXBfcHNldWRvY29uc29sZSAoU1RBUlRV UElORk9FWFcgKnNpLCBib29sIG5vcGNvbikKK3sKKworICAvKiBTZXR0aW5nIHN3aXRjaF90b19w Y29uX2luIGlzIG5lY2Vzc2FyeSBldmVuIGlmCisgICAgIHBzZXVkbyBjb25zb2xlIHdpbGwgbm90 IGJlIGFjdGl2YXRlZC4gKi8KKyAgZmhhbmRsZXJfYmFzZSAqZmggPSA6OmN5Z2hlYXAtPmZkdGFi WzBdOworICBpZiAoZmggJiYgZmgtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZU19NQUpPUikKKyAg ICB7CisgICAgICBmaGFuZGxlcl9wdHlfc2xhdmUgKnB0eXMgPSAoZmhhbmRsZXJfcHR5X3NsYXZl ICopIGZoOworICAgICAgcHR5cy0+Z2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX2luID0gdHJ1 ZTsKKyAgICAgIGlmIChwdHlzLT5nZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gMAorCSAgfHwgIXBp bmZvIChwdHlzLT5nZXRfdHR5cCAoKS0+cGNvbl9waWQpKQorCXB0eXMtPmdldF90dHlwICgpLT5w Y29uX3BpZCA9IG15c2VsZi0+cGlkOworICAgIH0KKworICBpZiAobm9wY29uKQorICAgIHJldHVy biBmYWxzZTsKKyAgaWYgKGdldF90dHlwICgpLT5wY29uX3BpZCAmJiBnZXRfdHR5cCAoKS0+cGNv bl9waWQgIT0gbXlzZWxmLT5waWQKKyAgICAgICYmICEhcGluZm8gKGdldF90dHlwICgpLT5wY29u X3BpZCkpCisgICAgcmV0dXJuIGZhbHNlOworICBpZiAoZGlzYWJsZV9wY29uKQorICAgIHJldHVy biBmYWxzZTsKKyAgLyogSWYgdGhlIGxlZ2FjeSBjb25zb2xlIG1vZGUgaXMgZW5hYmxlZCwgcHNl dWRvIGNvbnNvbGUgc2VlbXMKKyAgICAgbm90IHRvIHdvcmsgYXMgZXhwZWN0ZWQuIFRvIGRldGVy bWluZSBjb25zb2xlIG1vZGUsIHJlZ2lzdHJ5CisgICAgIGtleSBGb3JjZVYyIGluIEhLRVlfQ1VS UkVOVF9VU0VSXENvbnNvbGUgaXMgY2hlY2tlZC4gKi8KKyAgcmVnX2tleSByZWcgKEhLRVlfQ1VS UkVOVF9VU0VSLCBLRVlfUkVBRCwgTCJDb25zb2xlIiwgTlVMTCk7CisgIGlmIChyZWcuZXJyb3Ig KCkpCisgICAgcmV0dXJuIGZhbHNlOworICBpZiAocmVnLmdldF9kd29yZCAoTCJGb3JjZVYyIiwg MSkgPT0gMCkKKyAgICB7CisgICAgICB0ZXJtaW9zX3ByaW50ZiAoIlBzZXVkbyBjb25zb2xlIGlz IGRpc2FibGVkICIKKwkJICAgICAgImJlY2F1c2UgdGhlIGxlZ2FjeSBjb25zb2xlIG1vZGUgaXMg ZW5hYmxlZC4iKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgQ09PUkQgc2l6ZSA9 IHsKKyAgICAoU0hPUlQpIGdldF90dHlwICgpLT53aW5zaXplLndzX2NvbCwKKyAgICAoU0hPUlQp IGdldF90dHlwICgpLT53aW5zaXplLndzX3JvdworICB9OworICBjb25zdCBEV09SRCBpbmhlcml0 X2N1cnNvciA9IDE7CisgIFNldExhc3RFcnJvciAoRVJST1JfU1VDQ0VTUyk7CisgIEhSRVNVTFQg cmVzID0gQ3JlYXRlUHNldWRvQ29uc29sZSAoc2l6ZSwgZ2V0X2hhbmRsZSAoKSwgZ2V0X291dHB1 dF9oYW5kbGUgKCksCisJCQkJICAgICBpbmhlcml0X2N1cnNvciwKKwkJCQkgICAgICZnZXRfdHR5 cCAoKS0+aF9wc2V1ZG9fY29uc29sZSk7CisgIGlmIChyZXMgIT0gU19PSyB8fCBHZXRMYXN0RXJy b3IgKCkgPT0gRVJST1JfUFJPQ19OT1RfRk9VTkQpCisgICAgeworICAgICAgaWYgKHJlcyAhPSBT X09LKQorCXN5c3RlbV9wcmludGYgKCJDcmVhdGVQc2V1ZG9Db25zb2xlKCkgZmFpbGVkLiAlMDh4 ICUwOHhcbiIsCisJCSAgICAgICBHZXRMYXN0RXJyb3IgKCksIHJlcyk7CisgICAgICBnb3RvIGZh bGxiYWNrOworICAgIH0KKworICBTSVpFX1QgYnl0ZXNSZXF1aXJlZDsKKyAgSW5pdGlhbGl6ZVBy b2NUaHJlYWRBdHRyaWJ1dGVMaXN0IChOVUxMLCAxLCAwLCAmYnl0ZXNSZXF1aXJlZCk7CisgIFpl cm9NZW1vcnkgKHNpLCBzaXplb2YgKCpzaSkpOworICBzaS0+U3RhcnR1cEluZm8uY2IgPSBzaXpl b2YgKFNUQVJUVVBJTkZPRVhXKTsKKyAgc2ktPmxwQXR0cmlidXRlTGlzdCA9IChQUFJPQ19USFJF QURfQVRUUklCVVRFX0xJU1QpCisgICAgSGVhcEFsbG9jIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwg Ynl0ZXNSZXF1aXJlZCk7CisgIGlmIChzaS0+bHBBdHRyaWJ1dGVMaXN0ID09IE5VTEwpCisgICAg Z290byBjbGVhbnVwX3BzZXVkb19jb25zb2xlOworICBpZiAoIUluaXRpYWxpemVQcm9jVGhyZWFk QXR0cmlidXRlTGlzdCAoc2ktPmxwQXR0cmlidXRlTGlzdCwKKwkJCQkJICAxLCAwLCAmYnl0ZXNS ZXF1aXJlZCkpCisgICAgZ290byBjbGVhbnVwX2hlYXA7CisgIGlmICghVXBkYXRlUHJvY1RocmVh ZEF0dHJpYnV0ZSAoc2ktPmxwQXR0cmlidXRlTGlzdCwKKwkJCQkgIDAsCisJCQkJICBQUk9DX1RI UkVBRF9BVFRSSUJVVEVfUFNFVURPQ09OU09MRSwKKwkJCQkgIGdldF90dHlwICgpLT5oX3BzZXVk b19jb25zb2xlLAorCQkJCSAgc2l6ZW9mIChnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSks CisJCQkJICBOVUxMLCBOVUxMKSkKKyAgICBnb3RvIGNsZWFudXBfaGVhcDsKKyAgc2ktPlN0YXJ0 dXBJbmZvLmR3RmxhZ3MgPSBTVEFSVEZfVVNFU1RESEFORExFUzsKKyAgc2ktPlN0YXJ0dXBJbmZv LmhTdGRJbnB1dCA9IE5VTEw7CisgIHNpLT5TdGFydHVwSW5mby5oU3RkT3V0cHV0ID0gTlVMTDsK KyAgc2ktPlN0YXJ0dXBJbmZvLmhTdGRFcnJvciA9IE5VTEw7CisKKyAgeworICAgIGZoYW5kbGVy X2Jhc2UgKmZoMCA9IDo6Y3lnaGVhcC0+ZmR0YWJbMF07CisgICAgaWYgKGZoMCAmJiBmaDAtPmdl dF9kZXZpY2UgKCkgIT0gZ2V0X2RldmljZSAoKSkKKyAgICAgIHNpLT5TdGFydHVwSW5mby5oU3Rk SW5wdXQgPSBmaDAtPmdldF9oYW5kbGUgKCk7CisgICAgZmhhbmRsZXJfYmFzZSAqZmgxID0gOjpj eWdoZWFwLT5mZHRhYlsxXTsKKyAgICBpZiAoZmgxICYmIGZoMS0+Z2V0X2RldmljZSAoKSAhPSBn ZXRfZGV2aWNlICgpKQorICAgICAgc2ktPlN0YXJ0dXBJbmZvLmhTdGRPdXRwdXQgPSBmaDEtPmdl dF9vdXRwdXRfaGFuZGxlICgpOworICAgIGZoYW5kbGVyX2Jhc2UgKmZoMiA9IDo6Y3lnaGVhcC0+ ZmR0YWJbMl07CisgICAgaWYgKGZoMiAmJiBmaDItPmdldF9kZXZpY2UgKCkgIT0gZ2V0X2Rldmlj ZSAoKSkKKyAgICAgIHNpLT5TdGFydHVwSW5mby5oU3RkRXJyb3IgPSBmaDItPmdldF9vdXRwdXRf aGFuZGxlICgpOworICB9CisKKyAgaWYgKGdldF90dHlwICgpLT5wY29uX3BpZCA9PSAwIHx8ICFw aW5mbyAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKSkKKyAgICBnZXRfdHR5cCAoKS0+cGNvbl9waWQg PSBteXNlbGYtPnBpZDsKKworICBpZiAoZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGUgJiYg Z2V0X3R0eXAgKCktPnBjb25fcGlkID09IG15c2VsZi0+cGlkKQorICAgIHsKKyAgICAgIEhQQ09O X0lOVEVSTkFMICpocCA9IChIUENPTl9JTlRFUk5BTCAqKSBnZXRfdHR5cCAoKS0+aF9wc2V1ZG9f Y29uc29sZTsKKyAgICAgIGdldF90dHlwICgpLT5oX3Bjb25fd3JpdGVfcGlwZSA9IGhwLT5oV3Jp dGVQaXBlOworICAgIH0KKyAgZ2V0X3R0eXAgKCktPnBjb25fc3RhcnQgPSB0cnVlOworICByZXR1 cm4gdHJ1ZTsKKworY2xlYW51cF9oZWFwOgorICBIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCks IDAsIHNpLT5scEF0dHJpYnV0ZUxpc3QpOworY2xlYW51cF9wc2V1ZG9fY29uc29sZToKKyAgaWYg KGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlKQorICAgIHsKKyAgICAgIEhQQ09OX0lOVEVS TkFMICpocCA9IChIUENPTl9JTlRFUk5BTCAqKSBnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29s ZTsKKyAgICAgIEhBTkRMRSB0bXAgPSBocC0+aENvbkhvc3RQcm9jZXNzOworICAgICAgQ2xvc2VQ c2V1ZG9Db25zb2xlIChnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSk7CisgICAgICBDbG9z ZUhhbmRsZSAodG1wKTsKKyAgICB9CitmYWxsYmFjazoKKyAgZ2V0X3R0eXAgKCktPmhfcHNldWRv X2NvbnNvbGUgPSBOVUxMOworICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQKK2ZoYW5kbGVyX3B0 eV9zbGF2ZTo6Y2xvc2VfcHNldWRvY29uc29sZSAodm9pZCkKK3sKKyAgaWYgKGdldF90dHlwICgp LT5oX3BzZXVkb19jb25zb2xlKQorICAgIHsKKyAgICAgIGdldF90dHlwICgpLT53YWl0X3Bjb25f ZndkICgpOworICAgICAgSFBDT05fSU5URVJOQUwgKmhwID0gKEhQQ09OX0lOVEVSTkFMICopIGdl dF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlOworICAgICAgSEFORExFIHRtcCA9IGhwLT5oQ29u SG9zdFByb2Nlc3M7CisgICAgICBDbG9zZVBzZXVkb0NvbnNvbGUgKGdldF90dHlwICgpLT5oX3Bz ZXVkb19jb25zb2xlKTsKKyAgICAgIENsb3NlSGFuZGxlICh0bXApOworICAgICAgZ2V0X3R0eXAg KCktPmhfcHNldWRvX2NvbnNvbGUgPSBOVUxMOworICAgICAgZ2V0X3R0eXAgKCktPnN3aXRjaF90 b19wY29uX2luID0gZmFsc2U7CisgICAgICBnZXRfdHR5cCAoKS0+cGNvbl9waWQgPSAwOworICAg ICAgZ2V0X3R0eXAgKCktPnBjb25fc3RhcnQgPSBmYWxzZTsKKyAgICB9Cit9CmRpZmYgLS1naXQg YS93aW5zdXAvY3lnd2luL2ZvcmsuY2MgYi93aW5zdXAvY3lnd2luL2ZvcmsuY2MKaW5kZXggN2Mw N2IwNjJlLi4zODE3MmNhMWUgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vZm9yay5jYworKysg Yi93aW5zdXAvY3lnd2luL2ZvcmsuY2MKQEAgLTEzNCwzNiArMTM0LDYgQEAgY2hpbGRfaW5mbzo6 cHJlZm9yayAoYm9vbCBkZXRhY2hlZCkKIGludCBfX3N0ZGNhbGwKIGZyb2s6OmNoaWxkICh2b2xh dGlsZSBjaGFyICogdm9sYXRpbGUgaGVyZSkKIHsKLSAgY3lnaGVhcF9mZGVudW0gY2ZkIChmYWxz ZSk7Ci0gIHdoaWxlIChjZmQubmV4dCAoKSA+PSAwKQotICAgIGlmIChjZmQtPmdldF9tYWpvciAo KSA9PSBERVZfUFRZTV9NQUpPUikKLSAgICAgIHsKLQlmaGFuZGxlcl9iYXNlICpmaCA9IGNmZDsK LQlmaGFuZGxlcl9wdHlfbWFzdGVyICpwdHltID0gKGZoYW5kbGVyX3B0eV9tYXN0ZXIgKikgZmg7 Ci0JaWYgKHB0eW0tPmdldF9wc2V1ZG9fY29uc29sZSAoKSkKLQkgIHsKLQkgICAgZGVidWdfcHJp bnRmICgiZm91bmQgYSBQVFkgbWFzdGVyICVkOiBoZWxwZXJfUElEPSVkIiwKLQkJCSAgcHR5bS0+ Z2V0X21pbm9yICgpLCBwdHltLT5nZXRfaGVscGVyX3Byb2Nlc3NfaWQgKCkpOwotCSAgICBpZiAo ZmhhbmRsZXJfY29uc29sZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZCAoCi0JCQkJcHR5bS0+Z2V0 X2hlbHBlcl9wcm9jZXNzX2lkICgpLCB0cnVlKSkKLQkgICAgICAvKiBBbHJlYWR5IGF0dGFjaGVk ICovCi0JICAgICAgYnJlYWs7Ci0JICAgIGVsc2UKLQkgICAgICB7Ci0JCWlmIChwdHltLT5hdHRh Y2hfcGNvbl9pbl9mb3JrICgpKQotCQkgIHsKLQkJICAgIEZyZWVDb25zb2xlICgpOwotCQkgICAg aWYgKCFBdHRhY2hDb25zb2xlIChwdHltLT5nZXRfaGVscGVyX3Byb2Nlc3NfaWQgKCkpKQotCQkg ICAgICAvKiBFcnJvciAqLzsKLQkJICAgIGVsc2UKLQkJICAgICAgYnJlYWs7Ci0JCSAgfQotCSAg ICAgIH0KLQkgIH0KLSAgICAgIH0KLSAgZXh0ZXJuIHZvaWQgY2xlYXJfcGNvbl9hdHRhY2hlZF90 byAodm9pZCk7IC8qIGZoYW5kbGVyX3R0eS5jYyAqLwotICBjbGVhcl9wY29uX2F0dGFjaGVkX3Rv ICgpOwotCiAgIEhBTkRMRSYgaFBhcmVudCA9IGNoLnBhcmVudDsKIAogICBzeW5jX3dpdGhfcGFy ZW50ICgiYWZ0ZXIgbG9uZ2ptcCIsIHRydWUpOwpkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9z ZWxlY3QuY2MgYi93aW5zdXAvY3lnd2luL3NlbGVjdC5jYwppbmRleCA0YThmM2IyZWMuLjlmMWE4 YTU3YSAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9zZWxlY3QuY2MKKysrIGIvd2luc3VwL2N5 Z3dpbi9zZWxlY3QuY2MKQEAgLTEyMTUsOCArMTIxNSw3IEBAIHZlcmlmeV90dHlfc2xhdmUgKHNl bGVjdF9yZWNvcmQgKm1lLCBmZF9zZXQgKnJlYWRmZHMsIGZkX3NldCAqd3JpdGVmZHMsCiAJICAg ZmRfc2V0ICpleGNlcHRmZHMpCiB7CiAgIGZoYW5kbGVyX3B0eV9zbGF2ZSAqcHR5cyA9IChmaGFu ZGxlcl9wdHlfc2xhdmUgKikgbWUtPmZoOwotICBpZiAobWUtPnJlYWRfc2VsZWN0ZWQgJiYgIXB0 eXMtPnRvX2JlX3JlYWRfZnJvbV9wY29uICgpICYmCi0gICAgICBJc0V2ZW50U2lnbmFsbGVkIChw dHlzLT5pbnB1dF9hdmFpbGFibGVfZXZlbnQpKQorICBpZiAobWUtPnJlYWRfc2VsZWN0ZWQgJiYg SXNFdmVudFNpZ25hbGxlZCAocHR5cy0+aW5wdXRfYXZhaWxhYmxlX2V2ZW50KSkKICAgICBtZS0+ cmVhZF9yZWFkeSA9IHRydWU7CiAgIHJldHVybiBzZXRfYml0cyAobWUsIHJlYWRmZHMsIHdyaXRl ZmRzLCBleGNlcHRmZHMpOwogfQpAQCAtMTIyOSw4ICsxMjI4LDYgQEAgcGVla19wdHlfc2xhdmUg KHNlbGVjdF9yZWNvcmQgKnMsIGJvb2wgZnJvbV9zZWxlY3QpCiAgIGZoYW5kbGVyX3B0eV9zbGF2 ZSAqcHR5cyA9IChmaGFuZGxlcl9wdHlfc2xhdmUgKikgZmg7CiAKICAgcHR5cy0+cmVzZXRfc3dp dGNoX3RvX3Bjb24gKCk7Ci0gIGlmIChwdHlzLT50b19iZV9yZWFkX2Zyb21fcGNvbiAoKSkKLSAg ICBwdHlzLT51cGRhdGVfcGNvbl9pbnB1dF9zdGF0ZSAodHJ1ZSk7CiAKICAgaWYgKHMtPnJlYWRf c2VsZWN0ZWQpCiAgICAgewpkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9zbWFsbHByaW50LmNj IGIvd2luc3VwL2N5Z3dpbi9zbWFsbHByaW50LmNjCmluZGV4IDljZmI0MTk4Ny4uNGExNGVlM2Nm IDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL3NtYWxscHJpbnQuY2MKKysrIGIvd2luc3VwL2N5 Z3dpbi9zbWFsbHByaW50LmNjCkBAIC00MDUsNyArNDA1LDYgQEAgc21hbGxfcHJpbnRmIChjb25z dCBjaGFyICpmbXQsIC4uLikKICAgY291bnQgPSBfX3NtYWxsX3ZzcHJpbnRmIChidWYsIGZtdCwg YXApOwogICB2YV9lbmQgKGFwKTsKIAotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29u IChHZXRTdGRIYW5kbGUgKFNURF9FUlJPUl9IQU5ETEUpKTsKICAgV3JpdGVGaWxlIChHZXRTdGRI YW5kbGUgKFNURF9FUlJPUl9IQU5ETEUpLCBidWYsIGNvdW50LCAmZG9uZSwgTlVMTCk7CiAgIEZs dXNoRmlsZUJ1ZmZlcnMgKEdldFN0ZEhhbmRsZSAoU1REX0VSUk9SX0hBTkRMRSkpOwogfQpAQCAt NDMyLDcgKzQzMSw2IEBAIGNvbnNvbGVfcHJpbnRmIChjb25zdCBjaGFyICpmbXQsIC4uLikKICAg Y291bnQgPSBfX3NtYWxsX3ZzcHJpbnRmIChidWYsIGZtdCwgYXApOwogICB2YV9lbmQgKGFwKTsK IAotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChjb25zb2xlX2hhbmRsZSk7CiAg IFdyaXRlRmlsZSAoY29uc29sZV9oYW5kbGUsIGJ1ZiwgY291bnQsICZkb25lLCBOVUxMKTsKICAg Rmx1c2hGaWxlQnVmZmVycyAoY29uc29sZV9oYW5kbGUpOwogfQpkaWZmIC0tZ2l0IGEvd2luc3Vw L2N5Z3dpbi9zcGF3bi5jYyBiL3dpbnN1cC9jeWd3aW4vc3Bhd24uY2MKaW5kZXggYWYxNzdjMGYx Li5kZDY4NWVlZjUgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vc3Bhd24uY2MKKysrIGIvd2lu c3VwL2N5Z3dpbi9zcGF3bi5jYwpAQCAtMTc3LDcgKzE3Nyw3IEBAIGZpbmRfZXhlYyAoY29uc3Qg Y2hhciAqbmFtZSwgcGF0aF9jb252JiBidWYsIGNvbnN0IGNoYXIgKnNlYXJjaCwKIC8qIFV0aWxp dHkgZm9yIGNoaWxkX2luZm9fc3Bhd246Ondvcmtlci4gICovCiAKIHN0YXRpYyBIQU5ETEUKLWhh bmRsZSAoaW50IGZkLCBib29sIHdyaXRpbmcsIGJvb2wgaXNjeWd3aW4pCitoYW5kbGUgKGludCBm ZCwgYm9vbCB3cml0aW5nKQogewogICBIQU5ETEUgaDsKICAgY3lnaGVhcF9mZGdldCBjZmQgKGZk KTsKQEAgLTE4OCwxNyArMTg4LDMwIEBAIGhhbmRsZSAoaW50IGZkLCBib29sIHdyaXRpbmcsIGJv b2wgaXNjeWd3aW4pCiAgICAgaCA9IElOVkFMSURfSEFORExFX1ZBTFVFOwogICBlbHNlIGlmICgh d3JpdGluZykKICAgICBoID0gY2ZkLT5nZXRfaGFuZGxlICgpOwotICBlbHNlIGlmIChjZmQtPmdl dF9tYWpvciAoKSA9PSBERVZfUFRZU19NQUpPUiAmJiBpc2N5Z3dpbikKLSAgICB7Ci0gICAgICBm aGFuZGxlcl9wdHlfc2xhdmUgKnB0eXMgPSAoZmhhbmRsZXJfcHR5X3NsYXZlICopKGZoYW5kbGVy X2Jhc2UgKikgY2ZkOwotICAgICAgaCA9IHB0eXMtPmdldF9vdXRwdXRfaGFuZGxlX2N5ZyAoKTsK LSAgICB9CiAgIGVsc2UKICAgICBoID0gY2ZkLT5nZXRfb3V0cHV0X2hhbmRsZSAoKTsKIAogICBy ZXR1cm4gaDsKIH0KIAorc3RhdGljIGJvb2wKK2lzX2NvbnNvbGVfYXBwIChXQ0hBUiAqZmlsZW5h bWUpCit7CisgIEhBTkRMRSBoOworICBjb25zdCBpbnQgaWRfb2Zmc2V0ID0gOTI7CisgIGggPSBD cmVhdGVGaWxlVyAoZmlsZW5hbWUsIEdFTkVSSUNfUkVBRCwgRklMRV9TSEFSRV9SRUFELAorCQkg IE5VTEwsIE9QRU5fRVhJU1RJTkcsIDAsIE5VTEwpOworICBjaGFyIGJ1ZlsxMDI0XTsKKyAgRFdP UkQgbjsKKyAgUmVhZEZpbGUgKGgsIGJ1Ziwgc2l6ZW9mIChidWYpLCAmbiwgMCk7CisgIENsb3Nl SGFuZGxlIChoKTsKKyAgY2hhciAqcCA9IChjaGFyICopIG1lbW1lbSAoYnVmLCBuLCAiUEVcMFww IiwgNCk7CisgIGlmIChwICYmIHAgKyBpZF9vZmZzZXQgPD0gYnVmICsgbikKKyAgICByZXR1cm4g cFtpZF9vZmZzZXRdID09ICdcMDAzJzsgLyogMDI6IEdVSSwgMDM6IGNvbnNvbGUgKi8KKyAgZWxz ZQorICAgIHJldHVybiBmYWxzZTsKK30KKwogaW50CiBpc2NtZCAoY29uc3QgY2hhciAqYXJndjAs IGNvbnN0IGNoYXIgKndoYXQpCiB7CkBAIC0yNjYsOCArMjc5LDYgQEAgY2hpbGRfaW5mb19zcGF3 bjo6d29ya2VyIChjb25zdCBjaGFyICpwcm9nX2FyZywgY29uc3QgY2hhciAqY29uc3QgKmFyZ3Ys CiB7CiAgIGJvb2wgcmM7CiAgIGludCByZXMgPSAtMTsKLSAgRFdPUkQgcGlkX3Jlc3RvcmUgPSAw OwotICBib29sIGF0dGFjaF90b19jb25zb2xlID0gZmFsc2U7CiAgIHBpZF90IGN0dHlfcGdpZCA9 IDA7CiAKICAgLyogU2VhcmNoIGZvciBDVFRZIGFuZCByZXRyaWV2ZSBpdHMgUEdJRCAqLwpAQCAt NTg3LDkgKzU5OCw3IEBAIGNoaWxkX2luZm9fc3Bhd246OndvcmtlciAoY29uc3QgY2hhciAqcHJv Z19hcmcsIGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2LAogCQkJIFBST0NFU1NfUVVFUllfTElNSVRF RF9JTkZPUk1BVElPTikpCiAJc2EgPSAmc2VjX25vbmVfbmloOwogCi0gICAgICAvKiBBdHRhY2gg dG8gcHNldWRvIGNvbnNvbGUgaWYgcHR5IHNhbHZlIGlzIHVzZWQgKi8KLSAgICAgIHBpZF9yZXN0 b3JlID0gZmhhbmRsZXJfY29uc29sZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZAotCShHZXRDdXJy ZW50UHJvY2Vzc0lkICgpLCBmYWxzZSk7CisgICAgICBmaGFuZGxlcl9wdHlfc2xhdmUgKnB0eXNf cHJpbWFyeSA9IE5VTEw7CiAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkgKyspCiAJewog CSAgY29uc3QgaW50IGNoa19vcmRlcltdID0gezEsIDAsIDJ9OwpAQCAtNTk4LDI5ICs2MDcsMTEg QEAgY2hpbGRfaW5mb19zcGF3bjo6d29ya2VyIChjb25zdCBjaGFyICpwcm9nX2FyZywgY29uc3Qg Y2hhciAqY29uc3QgKmFyZ3YsCiAJICBpZiAoZmggJiYgZmgtPmdldF9tYWpvciAoKSA9PSBERVZf UFRZU19NQUpPUikKIAkgICAgewogCSAgICAgIGZoYW5kbGVyX3B0eV9zbGF2ZSAqcHR5cyA9IChm aGFuZGxlcl9wdHlfc2xhdmUgKikgZmg7Ci0JICAgICAgaWYgKHB0eXMtPmdldF9wc2V1ZG9fY29u c29sZSAoKSkKLQkJewotCQkgIERXT1JEIGhlbHBlcl9wcm9jZXNzX2lkID0gcHR5cy0+Z2V0X2hl bHBlcl9wcm9jZXNzX2lkICgpOwotCQkgIGRlYnVnX3ByaW50ZiAoImZvdW5kIGEgUFRZIHNsYXZl ICVkOiBoZWxwZXJfUElEPSVkIiwKLQkJCQkgICAgZmgtPmdldF9taW5vciAoKSwgaGVscGVyX3By b2Nlc3NfaWQpOwotCQkgIGlmIChmaGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNz X2lkCi0JCQkJCSAgICAgIChoZWxwZXJfcHJvY2Vzc19pZCwgdHJ1ZSkpCi0JCSAgICAvKiBBbHJl YWR5IGF0dGFjaGVkICovCi0JCSAgICBhdHRhY2hfdG9fY29uc29sZSA9IHRydWU7Ci0JCSAgZWxz ZSBpZiAoIWF0dGFjaF90b19jb25zb2xlKQotCQkgICAgewotCQkgICAgICBGcmVlQ29uc29sZSAo KTsKLQkJICAgICAgaWYgKEF0dGFjaENvbnNvbGUgKGhlbHBlcl9wcm9jZXNzX2lkKSkKLQkJCWF0 dGFjaF90b19jb25zb2xlID0gdHJ1ZTsKLQkJICAgIH0KLQkJICBwdHlzLT5maXh1cF9hZnRlcl9h dHRhY2ggKCFpc2N5Z3dpbiAoKSwgZmQpOwotCQkgIGlmIChtb2RlID09IF9QX09WRVJMQVkpCi0J CSAgICBwdHlzLT5zZXRfZnJlZWNvbnNvbGVfb25fY2xvc2UgKGlzY3lnd2luICgpKTsKLQkJfQor CSAgICAgIGlmIChwdHlzX3ByaW1hcnkgPT0gTlVMTCkKKwkJcHR5c19wcmltYXJ5ID0gcHR5czsK IAkgICAgfQogCSAgZWxzZSBpZiAoZmggJiYgZmgtPmdldF9tYWpvciAoKSA9PSBERVZfQ09OU19N QUpPUikKIAkgICAgewotCSAgICAgIGF0dGFjaF90b19jb25zb2xlID0gdHJ1ZTsKIAkgICAgICBm aGFuZGxlcl9jb25zb2xlICpjb25zID0gKGZoYW5kbGVyX2NvbnNvbGUgKikgZmg7CiAJICAgICAg aWYgKHdpbmNhcC5oYXNfY29uXzI0Yml0X2NvbG9ycyAoKSAmJiAhaXNjeWd3aW4gKCkpCiAJCWlm IChmZCA9PSAxIHx8IGZkID09IDIpCkBAIC02MjgsMzEgKzYxOSwzOSBAQCBjaGlsZF9pbmZvX3Nw YXduOjp3b3JrZXIgKGNvbnN0IGNoYXIgKnByb2dfYXJnLCBjb25zdCBjaGFyICpjb25zdCAqYXJn diwKIAkgICAgfQogCX0KIAotICAgICAgaWYgKCFpc2N5Z3dpbiAoKSkKLQl7Ci0JICBjZmQucmV3 aW5kICgpOwotCSAgd2hpbGUgKGNmZC5uZXh0ICgpID49IDApCi0JICAgIGlmIChjZmQtPmdldF9t YWpvciAoKSA9PSBERVZfUFRZU19NQUpPUikKLQkgICAgICB7Ci0JCWZoYW5kbGVyX3B0eV9zbGF2 ZSAqcHR5cyA9Ci0JCSAgKGZoYW5kbGVyX3B0eV9zbGF2ZSAqKShmaGFuZGxlcl9iYXNlICopIGNm ZDsKLQkJcHR5cy0+c2V0dXBfbG9jYWxlICgpOwotCSAgICAgIH0KLQl9CisgICAgICBjZmQucmV3 aW5kICgpOworICAgICAgd2hpbGUgKGNmZC5uZXh0ICgpID49IDApCisJaWYgKGNmZC0+Z2V0X21h am9yICgpID09IERFVl9QVFlTX01BSk9SKQorCSAgeworCSAgICBmaGFuZGxlcl9wdHlfc2xhdmUg KnB0eXMgPQorCSAgICAgIChmaGFuZGxlcl9wdHlfc2xhdmUgKikoZmhhbmRsZXJfYmFzZSAqKSBj ZmQ7CisJICAgIHB0eXMtPnNldHVwX2xvY2FsZSAoKTsKKwkgIH0KIAogICAgICAgLyogU2V0IHVw IG5lZWRlZCBoYW5kbGVzIGZvciBzdGRpbyAqLwogICAgICAgc2kuZHdGbGFncyA9IFNUQVJURl9V U0VTVERIQU5ETEVTOwotICAgICAgc2kuaFN0ZElucHV0ID0gaGFuZGxlICgoaW5fX3N0ZGluIDwg MCA/IDAgOiBpbl9fc3RkaW4pLCBmYWxzZSwKLQkJCSAgICAgaXNjeWd3aW4gKCkpOwotICAgICAg c2kuaFN0ZE91dHB1dCA9IGhhbmRsZSAoKGluX19zdGRvdXQgPCAwID8gMSA6IGluX19zdGRvdXQp LCB0cnVlLAotCQkJICAgICAgaXNjeWd3aW4gKCkpOwotICAgICAgc2kuaFN0ZEVycm9yID0gaGFu ZGxlICgyLCB0cnVlLCBpc2N5Z3dpbiAoKSk7CisgICAgICBzaS5oU3RkSW5wdXQgPSBoYW5kbGUg KChpbl9fc3RkaW4gPCAwID8gMCA6IGluX19zdGRpbiksIGZhbHNlKTsKKyAgICAgIHNpLmhTdGRP dXRwdXQgPSBoYW5kbGUgKChpbl9fc3Rkb3V0IDwgMCA/IDEgOiBpbl9fc3Rkb3V0KSwgdHJ1ZSk7 CisgICAgICBzaS5oU3RkRXJyb3IgPSBoYW5kbGUgKDIsIHRydWUpOwogCiAgICAgICBzaS5jYiA9 IHNpemVvZiAoc2kpOwogCiAgICAgICBpZiAoIWlzY3lnd2luICgpKQogCWluaXRfY29uc29sZV9o YW5kbGVyIChteXNlbGYtPmN0dHkgPiAwKTsKIAorICAgICAgYm9vbCBlbmFibGVfcGNvbiA9IGZh bHNlOworICAgICAgU1RBUlRVUElORk9FWFcgc2lfcGNvbjsKKyAgICAgIFplcm9NZW1vcnkgKCZz aV9wY29uLCBzaXplb2YgKHNpX3Bjb24pKTsKKyAgICAgIFNUQVJUVVBJTkZPVyAqc2lfdG1wID0g JnNpOworICAgICAgaWYgKCFpc2N5Z3dpbiAoKSAmJiBwdHlzX3ByaW1hcnkgJiYgaXNfY29uc29s ZV9hcHAgKHJ1bnBhdGgpKQorCWlmIChwdHlzX3ByaW1hcnktPnNldHVwX3BzZXVkb2NvbnNvbGUg KCZzaV9wY29uLAorCQkJICAgICBtb2RlICE9IF9QX09WRVJMQVkgJiYgbW9kZSAhPSBfUF9XQUlU KSkKKwkgIHsKKwkgICAgY19mbGFncyB8PSBFWFRFTkRFRF9TVEFSVFVQSU5GT19QUkVTRU5UOwor CSAgICBzaV90bXAgPSAmc2lfcGNvbi5TdGFydHVwSW5mbzsKKwkgICAgZW5hYmxlX3Bjb24gPSB0 cnVlOworCSAgfQorCiAgICAgbG9vcDoKICAgICAgIC8qIFdoZW4gcnVpZCAhPSBldWlkIHdlIGNy ZWF0ZSB0aGUgbmV3IHByb2Nlc3MgdW5kZXIgdGhlIGN1cnJlbnQgb3JpZ2luYWwKIAkgYWNjb3Vu dCBhbmQgaW1wZXJzb25hdGUgaW4gY2hpbGQsIHRoaXMgd2F5IG1haW50YWluaW5nIHRoZSBkaWZm ZXJlbnQKQEAgLTY4MSw3ICs2ODAsNyBAQCBjaGlsZF9pbmZvX3NwYXduOjp3b3JrZXIgKGNvbnN0 IGNoYXIgKnByb2dfYXJnLCBjb25zdCBjaGFyICpjb25zdCAqYXJndiwKIAkJCSAgICAgICBjX2Zs YWdzLAogCQkJICAgICAgIGVudmJsb2NrLAkvKiBlbnZpcm9ubWVudCAqLwogCQkJICAgICAgIE5V TEwsCi0JCQkgICAgICAgJnNpLAorCQkJICAgICAgIHNpX3RtcCwKIAkJCSAgICAgICAmcGkpOwog CX0KICAgICAgIGVsc2UKQEAgLTczNSw3ICs3MzQsNyBAQCBjaGlsZF9pbmZvX3NwYXduOjp3b3Jr ZXIgKGNvbnN0IGNoYXIgKnByb2dfYXJnLCBjb25zdCBjaGFyICpjb25zdCAqYXJndiwKIAkJCSAg ICAgICBjX2ZsYWdzLAogCQkJICAgICAgIGVudmJsb2NrLAkvKiBlbnZpcm9ubWVudCAqLwogCQkJ ICAgICAgIE5VTEwsCi0JCQkgICAgICAgJnNpLAorCQkJICAgICAgIHNpX3RtcCwKIAkJCSAgICAg ICAmcGkpOwogCSAgaWYgKGh3c3QpCiAJICAgIHsKQEAgLTc0OCw2ICs3NDcsMTEgQEAgY2hpbGRf aW5mb19zcGF3bjo6d29ya2VyIChjb25zdCBjaGFyICpwcm9nX2FyZywgY29uc3QgY2hhciAqY29u c3QgKmFyZ3YsCiAJICAgICAgQ2xvc2VEZXNrdG9wIChoZHNrKTsKIAkgICAgfQogCX0KKyAgICAg IGlmIChlbmFibGVfcGNvbikKKwl7CisJICBEZWxldGVQcm9jVGhyZWFkQXR0cmlidXRlTGlzdCAo c2lfcGNvbi5scEF0dHJpYnV0ZUxpc3QpOworCSAgSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgp LCAwLCBzaV9wY29uLmxwQXR0cmlidXRlTGlzdCk7CisJfQogCiAgICAgICBpZiAobW9kZSAhPSBf UF9PVkVSTEFZKQogCVNldEhhbmRsZUluZm9ybWF0aW9uIChteV93cl9wcm9jX3BpcGUsIEhBTkRM RV9GTEFHX0lOSEVSSVQsCkBAIC05MjAsNiArOTI0LDExIEBAIGNoaWxkX2luZm9fc3Bhd246Ondv cmtlciAoY29uc3QgY2hhciAqcHJvZ19hcmcsIGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2LAogCSAg ICB9CiAJICBpZiAoc2VtKQogCSAgICBfX3Bvc2l4X3NwYXduX3NlbV9yZWxlYXNlIChzZW0sIDAp OworCSAgaWYgKGVuYWJsZV9wY29uKQorCSAgICB7CisJICAgICAgV2FpdEZvclNpbmdsZU9iamVj dCAocGkuaFByb2Nlc3MsIElORklOSVRFKTsKKwkgICAgICBwdHlzX3ByaW1hcnktPmNsb3NlX3Bz ZXVkb2NvbnNvbGUgKCk7CisJICAgIH0KIAkgIG15c2VsZi5leGl0IChFWElUQ09ERV9OT1NFVCk7 CiAJICBicmVhazsKIAljYXNlIF9QX1dBSVQ6CkBAIC05MjcsNiArOTM2LDggQEAgY2hpbGRfaW5m b19zcGF3bjo6d29ya2VyIChjb25zdCBjaGFyICpwcm9nX2FyZywgY29uc3QgY2hhciAqY29uc3Qg KmFyZ3YsCiAJICBzeXN0ZW1fY2FsbC5hcm0gKCk7CiAJICBpZiAod2FpdHBpZCAoY3lncGlkLCAm cmVzLCAwKSAhPSBjeWdwaWQpCiAJICAgIHJlcyA9IC0xOworCSAgaWYgKGVuYWJsZV9wY29uKQor CSAgICBwdHlzX3ByaW1hcnktPmNsb3NlX3BzZXVkb2NvbnNvbGUgKCk7CiAJICBicmVhazsKIAlj YXNlIF9QX0RFVEFDSDoKIAkgIHJlcyA9IDA7CS8qIExvc3QgYWxsIG1lbW9yeSBvZiB0aGlzIGNo aWxkLiAqLwpAQCAtOTUzLDIxICs5NjQsNiBAQCBjaGlsZF9pbmZvX3NwYXduOjp3b3JrZXIgKGNv bnN0IGNoYXIgKnByb2dfYXJnLCBjb25zdCBjaGFyICpjb25zdCAqYXJndiwKICAgaWYgKGVudmJs b2NrKQogICAgIGZyZWUgKGVudmJsb2NrKTsKIAotICBpZiAoYXR0YWNoX3RvX2NvbnNvbGUgJiYg cGlkX3Jlc3RvcmUpCi0gICAgewotICAgICAgRnJlZUNvbnNvbGUgKCk7Ci0gICAgICBBdHRhY2hD b25zb2xlIChwaWRfcmVzdG9yZSk7Ci0gICAgICBjeWdoZWFwX2ZkZW51bSBjZmQgKGZhbHNlKTsK LSAgICAgIGludCBmZDsKLSAgICAgIHdoaWxlICgoZmQgPSBjZmQubmV4dCAoKSkgPj0gMCkKLQlp ZiAoY2ZkLT5nZXRfbWFqb3IgKCkgPT0gREVWX1BUWVNfTUFKT1IpCi0JICB7Ci0JICAgIGZoYW5k bGVyX3B0eV9zbGF2ZSAqcHR5cyA9Ci0JICAgICAgKGZoYW5kbGVyX3B0eV9zbGF2ZSAqKSAoZmhh bmRsZXJfYmFzZSAqKSBjZmQ7Ci0JICAgIHB0eXMtPmZpeHVwX2FmdGVyX2F0dGFjaCAoZmFsc2Us IGZkKTsKLQkgIH0KLSAgICB9Ci0KICAgcmV0dXJuIChpbnQpIHJlczsKIH0KIApkaWZmIC0tZ2l0 IGEvd2luc3VwL2N5Z3dpbi9zdHJhY2UuY2MgYi93aW5zdXAvY3lnd2luL3N0cmFjZS5jYwppbmRl eCBmMGFlZjNhMzYuLjM1ZjhhNTlhZSAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9zdHJhY2Uu Y2MKKysrIGIvd2luc3VwL2N5Z3dpbi9zdHJhY2UuY2MKQEAgLTI2NCw3ICsyNjQsNiBAQCBzdHJh Y2U6OnZwcm50ZiAodW5zaWduZWQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmZ1bmMsIGNvbnN0IGNo YXIgKmZtdCwgdmFfbGlzdCBhcAogICBpZiAoY2F0ZWdvcnkgJiBfU1RSQUNFX1NZU1RFTSkKICAg ICB7CiAgICAgICBEV09SRCBkb25lOwotICAgICAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9f cGNvbiAoR2V0U3RkSGFuZGxlIChTVERfRVJST1JfSEFORExFKSk7CiAgICAgICBXcml0ZUZpbGUg KEdldFN0ZEhhbmRsZSAoU1REX0VSUk9SX0hBTkRMRSksIGJ1ZiwgbGVuLCAmZG9uZSwgMCk7CiAg ICAgICBGbHVzaEZpbGVCdWZmZXJzIChHZXRTdGRIYW5kbGUgKFNURF9FUlJPUl9IQU5ETEUpKTsK ICAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBtZXNzYWdlIHNob3dzIHVwIG9uIHRoZSBzY3Jl ZW4sIHRvbywgc2luY2UgdGhpcyBpcwpAQCAtMjc2LDcgKzI3NSw2IEBAIHN0cmFjZTo6dnBybnRm ICh1bnNpZ25lZCBjYXRlZ29yeSwgY29uc3QgY2hhciAqZnVuYywgY29uc3QgY2hhciAqZm10LCB2 YV9saXN0IGFwCiAJCQkJICZzZWNfbm9uZSwgT1BFTl9FWElTVElORywgMCwgMCk7CiAJICBpZiAo aCAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKIAkgICAgewotCSAgICAgIHNldF9pc2h5YnJpZF9h bmRfc3dpdGNoX3RvX3Bjb24gKGgpOwogCSAgICAgIFdyaXRlRmlsZSAoaCwgYnVmLCBsZW4sICZk b25lLCAwKTsKIAkgICAgICBDbG9zZUhhbmRsZSAoaCk7CiAJICAgIH0KZGlmZiAtLWdpdCBhL3dp bnN1cC9jeWd3aW4vdHR5LmNjIGIvd2luc3VwL2N5Z3dpbi90dHkuY2MKaW5kZXggNGNiNjhmNzc2 Li5kNjBmMjc1NDUgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vdHR5LmNjCisrKyBiL3dpbnN1 cC9jeWd3aW4vdHR5LmNjCkBAIC0yMzQsMjAgKzIzNCwxNCBAQCB0dHk6OmluaXQgKCkKICAgd2Fz X29wZW5lZCA9IGZhbHNlOwogICBtYXN0ZXJfcGlkID0gMDsKICAgaXNfY29uc29sZSA9IGZhbHNl OwotICBhdHRhY2hfcGNvbl9pbl9mb3JrID0gZmFsc2U7Ci0gIGhfcHNldWRvX2NvbnNvbGUgPSBO VUxMOwogICBjb2x1bW4gPSAwOworICBoX3BzZXVkb19jb25zb2xlID0gTlVMTDsKICAgc3dpdGNo X3RvX3Bjb25faW4gPSBmYWxzZTsKLSAgc3dpdGNoX3RvX3Bjb25fb3V0ID0gZmFsc2U7Ci0gIHNj cmVlbl9hbHRlcm5hdGVkID0gZmFsc2U7CiAgIG1hc2tfc3dpdGNoX3RvX3Bjb25faW4gPSBmYWxz ZTsKICAgcGNvbl9waWQgPSAwOwogICB0ZXJtX2NvZGVfcGFnZSA9IDA7Ci0gIG5lZWRfcmVkcmF3 X3NjcmVlbiA9IHRydWU7CiAgIHBjb25fbGFzdF90aW1lID0gMDsKLSAgcGNvbl9pbl9lbXB0eSA9 IHRydWU7Ci0gIHJlcV90cmFuc2Zlcl9pbnB1dF90b19wY29uID0gZmFsc2U7Ci0gIHJlcV9mbHVz aF9wY29uX2lucHV0ID0gZmFsc2U7CisgIHBjb25fc3RhcnQgPSBmYWxzZTsKIH0KIAogSEFORExF CkBAIC0yOTMsMTYgKzI4Nyw2IEBAIHR0eV9taW46OnR0eW5hbWUgKCkKICAgcmV0dXJuIGQubmFt ZSAoKTsKIH0KIAotdm9pZAotdHR5OjpzZXRfc3dpdGNoX3RvX3Bjb25fb3V0IChib29sIHYpCi17 Ci0gIGlmIChzd2l0Y2hfdG9fcGNvbl9vdXQgIT0gdikKLSAgICB7Ci0gICAgICB3YWl0X3Bjb25f ZndkICgpOwotICAgICAgc3dpdGNoX3RvX3Bjb25fb3V0ID0gdjsKLSAgICB9Ci19Ci0KIHZvaWQK IHR0eTo6d2FpdF9wY29uX2Z3ZCAodm9pZCkKIHsKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4v dHR5LmggYi93aW5zdXAvY3lnd2luL3R0eS5oCmluZGV4IDkyMGUzMmIxNi4uYzQ5MWQzODkxIDEw MDY0NAotLS0gYS93aW5zdXAvY3lnd2luL3R0eS5oCisrKyBiL3dpbnN1cC9jeWd3aW4vdHR5LmgK QEAgLTk0LDIxICs5NCwxMyBAQCBwcml2YXRlOgogICBIQU5ETEUgX3RvX21hc3RlcjsKICAgSEFO RExFIF90b19tYXN0ZXJfY3lnOwogICBIUENPTiBoX3BzZXVkb19jb25zb2xlOwotICBIQU5ETEUg aF9oZWxwZXJfcHJvY2VzczsKLSAgRFdPUkQgaGVscGVyX3Byb2Nlc3NfaWQ7Ci0gIEhBTkRMRSBo X2hlbHBlcl9nb29kYnllOwotICBib29sIGF0dGFjaF9wY29uX2luX2Zvcms7CisgIGJvb2wgcGNv bl9zdGFydDsKICAgYm9vbCBzd2l0Y2hfdG9fcGNvbl9pbjsKLSAgYm9vbCBzd2l0Y2hfdG9fcGNv bl9vdXQ7Ci0gIGJvb2wgc2NyZWVuX2FsdGVybmF0ZWQ7CiAgIGJvb2wgbWFza19zd2l0Y2hfdG9f cGNvbl9pbjsKICAgcGlkX3QgcGNvbl9waWQ7CiAgIFVJTlQgdGVybV9jb2RlX3BhZ2U7Ci0gIGJv b2wgbmVlZF9yZWRyYXdfc2NyZWVuOwogICBEV09SRCBwY29uX2xhc3RfdGltZTsKLSAgYm9vbCBw Y29uX2luX2VtcHR5OwotICBib29sIHJlcV90cmFuc2Zlcl9pbnB1dF90b19wY29uOwotICBib29s IHJlcV9mbHVzaF9wY29uX2lucHV0OworICBIQU5ETEUgaF9wY29uX3dyaXRlX3BpcGU7CiAKIHB1 YmxpYzoKICAgSEFORExFIGZyb21fbWFzdGVyICgpIGNvbnN0IHsgcmV0dXJuIF9mcm9tX21hc3Rl cjsgfQpAQCAtMTM4LDcgKzEzMCw2IEBAIHB1YmxpYzoKICAgdm9pZCBzZXRfbWFzdGVyX2N0bF9j bG9zZWQgKCkge21hc3Rlcl9waWQgPSAtMTt9CiAgIHN0YXRpYyB2b2lkIF9fc3RkY2FsbCBjcmVh dGVfbWFzdGVyIChpbnQpOwogICBzdGF0aWMgdm9pZCBfX3N0ZGNhbGwgaW5pdF9zZXNzaW9uICgp OwotICB2b2lkIHNldF9zd2l0Y2hfdG9fcGNvbl9vdXQgKGJvb2wgdik7CiAgIHZvaWQgd2FpdF9w Y29uX2Z3ZCAodm9pZCk7CiAgIGZyaWVuZCBjbGFzcyBmaGFuZGxlcl9wdHlfY29tbW9uOwogICBm cmllbmQgY2xhc3MgZmhhbmRsZXJfcHR5X21hc3RlcjsKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3 aW4vd2luc3VwLmggYi93aW5zdXAvY3lnd2luL3dpbnN1cC5oCmluZGV4IDliZmExYTdhNi4uNzk4 NDRjYjg3IDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL3dpbnN1cC5oCisrKyBiL3dpbnN1cC9j eWd3aW4vd2luc3VwLmgKQEAgLTIyNCw5ICsyMjQsNiBAQCB2b2lkIGluaXRfY29uc29sZV9oYW5k bGVyIChib29sKTsKIAogZXh0ZXJuIGJvb2wgd3NvY2tfc3RhcnRlZDsKIAotLyogUFRZIHJlbGF0 ZWQgKi8KLXZvaWQgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoSEFORExFIGgpOwot CiAvKiBQcmludGYgdHlwZSBmdW5jdGlvbnMgKi8KIGV4dGVybiAiQyIgdm9pZCB2YXBpX2ZhdGFs IChjb25zdCBjaGFyICosIHZhX2xpc3QgYXApIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwog ZXh0ZXJuICJDIiB2b2lkIGFwaV9mYXRhbCAoY29uc3QgY2hhciAqLCAuLi4pIF9fYXR0cmlidXRl X18gKChub3JldHVybikpOwotLSAKMi4yOC4wCgo= --Multipart=_Mon__17_Aug_2020_20_57_18_+0900_IPiJM7AxBvu7k413--