Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vNGwC-00FjX7-33 for pgsql-hackers@arkaria.postgresql.org; Sun, 23 Nov 2025 20:44:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vNGwB-00FSUF-1Y for pgsql-hackers@arkaria.postgresql.org; Sun, 23 Nov 2025 20:43:59 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vNGwA-00FSU5-1L for pgsql-hackers@lists.postgresql.org; Sun, 23 Nov 2025 20:43:59 +0000 Received: from fhigh-a2-smtp.messagingengine.com ([103.168.172.153]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1vNGw7-0015qM-2c for pgsql-hackers@postgresql.org; Sun, 23 Nov 2025 20:43:57 +0000 Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailfhigh.phl.internal (Postfix) with ESMTP id 07A5C14000D3; Sun, 23 Nov 2025 15:43:55 -0500 (EST) Received: from phl-imap-03 ([10.202.2.93]) by phl-compute-05.internal (MEProxy); Sun, 23 Nov 2025 15:43:55 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=compiler.org; h= cc:cc:content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1763930635; x=1764017035; bh=+EVb1x6lT3 WztycjXgD/LA4GyAmZ+T2SvQvYMZvQuIc=; b=Zk44su5WYtnUKYYS7P/SSKBZaI rr8Ia4otEIO6od5gtv5DF/cWATATLHom2ETcC1WVpofucamFyXqz2oNmVQnO28Fi ezDe/aSEmKDwQnFNJrCLhSMaznVaXMc+dxkC038Uor1ogsMDgb2GkBGIsPiW7R/Q GUzjsIZDM6UE4QF2m0OqpyWSeX7YSogEr22VWYfyjN/BHbgJV+av62fRAVbnRY+f IxmKHq2lS6bE7JHitar+DbfmG8HeGTN7tjENFfPU3KMoaWMKumJt6KEsUBYuJiZk R/M11WiBxp248OvNN8Fus8EfLIY7AiV3acYkOaarawCH4iTLWFwTAvcQvZpw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t= 1763930635; x=1764017035; bh=+EVb1x6lT3WztycjXgD/LA4GyAmZ+T2SvQv YMZvQuIc=; b=AOH2wSJGRrdTdUgtlaJhV2DP1Y8uoBu32pse6/f7tAOlkOppa9K wvtHR3JMoHfdjD8M7vnvyHeRw1WI7FKXT93q8ECTqQf9Hn/G8t19Cey2F1sO442b PxXtBZiSeKX6Qmh3jTAFk5SY7EHr3lXJsUkQZC3hEnpbQjGmsWp/bKMraaKatQFr RpHIe1uITPXGNdjQJReXVTfZD+jpD7O/IdqCK48h4ZcP9qFIk6y2OcjEZz4VAtB6 HVXbDjxdULqK1xM19gsILhTu6iaxCLe8l8/ocQec39JlWZ2NmgqbRp2TXeCtAMUp qor3aYPhpU3OSKBfqdq4v0k5TZMORrsrZpw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddvfeeijeduucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpefoggffhffvvefkjghfufgtsehmtderre ertddtnecuhfhrohhmpedflfhovghlucflrggtohgsshhonhdfuceojhhovghlsegtohhm phhilhgvrhdrohhrgheqnecuggftrfgrthhtvghrnhepfefhueffveefudffkeektdetvd dvtdevtdfhueduueejjeejgeekjeffjeduudegnecuffhomhgrihhnpehpohhsthhgrhgv shhqlhdrohhrghenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfh hrohhmpehjohgvlhestghomhhpihhlvghrrdhorhhgpdhnsggprhgtphhtthhopeefpdhm ohguvgepshhmthhpohhuthdprhgtphhtthhopehlihdrvghvrghnrdgthhgrohesghhmrg hilhdrtghomhdprhgtphhtthhopehpghhsqhhlqdhhrggtkhgvrhhssehpohhsthhgrhgv shhqlhdrohhrghdprhgtphhtthhopehtghhlsehsshhsrdhpghhhrdhprgdruhhs X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id 625ED18E0069; Sun, 23 Nov 2025 15:43:54 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: AE1r89ybsZ1g Date: Sun, 23 Nov 2025 21:43:34 +0100 From: "Joel Jacobson" To: "Tom Lane" Cc: "Chao Li" , pgsql-hackers Message-Id: <82c084d7-ff48-49f0-8fc9-b68867dbd713@app.fastmail.com> In-Reply-To: <3a919670-037b-4073-be33-745ca69a6232@app.fastmail.com> References: <6899c044-4a82-49be-8117-e6f669765f7e@app.fastmail.com> <165530.1752362320@sss.pgh.pa.us> <02a7cd37-e2fc-4212-8b19-f8c239c95fb8@app.fastmail.com> <96f00bf1-cc9d-4520-9d02-9e14e7767c88@app.fastmail.com> <30c2aa7d-dd6c-4b68-a2e4-f217a1a34acf@app.fastmail.com> <0b4d402a-9ac2-4aa8-acf8-8231dbe579ea@app.fastmail.com> <3095599.1758644879@sss.pgh.pa.us> <0dc6a2cc-5216-4dc1-9dd2-430cafc6095b@app.fastmail.com> <52CC167F-763B-4ECA-B0B4-DAB381816828@gmail.com> <9186C6D0-F7A9-482A-9183-89E530B57E36@gmail.com> <1073593.1759423179@sss.pgh.pa.us> <4bd5e6c4-6fa7-44bb-869d-59a32a331fa8@app.fastmail.com> <85828f29-e72e-4400-94f3-9a69bc8dc239@app.fastmail.com> <2495353.1759860890@sss.pgh.pa.us> <8aeae418-92a6-4bbd-9c06-9574c79e59f7@app.fastmail.com> <2531672.1759868124@sss.pgh.pa.us> <474efa78-337c-41cd-a73a-f845a0115109@app.fastmail.com> <2749343.1759949176@sss.pgh.pa.us> <8bfca2be-1ec0-4e15-aafb-0b7b661fe936@app.fastmail.com> <9eba307f-f2fb-48f0-9507-2e197f39ef9e@app.fastmail.com> <8c71183a-0d28-4bcf-a806-78446ff95404@app.fastmail.com> <1009807.1760476747@sss.pgh.pa.us> <1F7227F5-C33D-4E2C-8511-33F1468590D0@gmail.com> <0a5a20d3-4621-46b3-b2ab-903f63a20dea@app.fastmail.com> <6F913129-ABEF-4004-AAF3-F22FC3!4!29AE8@gmail.com> <1547585.1760645808@sss.pgh.pa.us> <14865EB6-0BF4-462B-9072-10BDAC10C0> <2067239.1763670416@sss.pgh.pa.us> <897cb48e-fa39-4ca6-a29f-ec3bb6ce99b1@app.fastmail.com> <3a919670-037b-4073-be33-745ca69a6232@app.fastmail.com> Subject: Re: Optimize LISTEN/NOTIFY Content-Type: multipart/mixed; boundary=4ec6353fcea643429b143805b82d1ba9 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --4ec6353fcea643429b143805b82d1ba9 Content-Type: text/plain Content-Transfer-Encoding: 7bit On Sun, Nov 23, 2025, at 16:49, Joel Jacobson wrote: > On Sat, Nov 22, 2025, at 22:30, Joel Jacobson wrote: >> On Thu, Nov 20, 2025, at 21:26, Tom Lane wrote: >>> I took a brief look through the v28 patch, and I'm fairly distressed >>> at how much new logic has been stuffed into what's effectively a >>> critical section. It's totally not okay for AtCommit_Notify or >>> anything it calls to throw an error >> >> Right, I agree. Thanks for guidance. >> >>> So I think there needs to be a serious effort made to move as >>> much as we possibly can of the potentially-risky stuff into >>> PreCommit_Notify. In particular I think we ought to create >>> the shared channel hash entry then, and even insert our PID >>> into it. We could expand the listenersArray entries to include >>> both a PID and a boolean "is it REALLY listening?", and then >>> during Exec_ListenCommit we'd only be required to find an >>> entry we already added and set its boolean, so there's no OOM >>> hazard. Possibly do something similar with the local >>> listenChannelsHash, so as to remove that possibility of OOM >>> failure as well. >> >> Thanks for the idea, I like this approach. I've expanded the >> listenersArray like suggested, and moved all risky stuff from >> Exec_ListenCommit to PreCommit_Notify. >> >>> (An alternative design could be to go ahead and insert our >>> PID during PreCommit_Notify, and just tolerate the small >>> risk of getting signaled when we didn't need to be. But >>> then we'd need some mechanism for cleaning out the bogus >>> entry during AtAbort_Notify.) >> >> We seem to need a cleanup mechanism also with the boolean field design, >> since a channel could end up being added only to listenChannelsHash, but >> not channelHash, which would trick IsListeningOn() into falsely thinking >> we're listening on such channel when we're not. This could happen if >> successfully adding the channel to listenChannelsHash, but OOM when >> trying to add it to channelHash. >> >> AtAbort_Notify now handles such half-state, by reconciling all channels >> that had LISTEN_LISTEN actions, using the channelHash as the single >> source of truth, removing channels from both listenChannelsHash and >> channelHash, unless the active field is true (which means we were >> already listening to the channel due to a previous transaction). >> >> I've tested triggering the cleanup logic by adding elog ERROR that >> triggered after listenChannelsHash insert, and another test that >> triggered after channelHash insert, and it cleaned it up correctly. I >> haven't created a test for it in tree though, would we want that? >> >>> I'm not sure what I think about the new logic in SignalBackends >>> from this standpoint. Making it very-low-probability-of-error >>> definitely needs some consideration though. >> >> The initChannelHash call in SignalBackends is now gone, moved to >> PreCommit_Notify (called if there are any pendingNotifies). >> >> I also took the liberty of fixing the XXX comment, to lazily preallocate >> the signals arrays during PreCommit_Notify. It felt too inconsistent to >> just leave that unfixed, but maybe should be a separate commit? > > I've extracted the preallocation of signals arrays into a separate patch: > https://commitfest.postgresql.org/patch/6248/ New version of the optimization patch, without the preallocation of signals arrays part (since submitted as a separate patch instead). >> I wonder how risky the remaining new logic in SignalBackends is. For >> instance, I looked at dshash_find(..., false), and note it calls >> LWLockAcquire which in turn could elog ERROR if num locks is exceeded, >> but in master we're already calling LWLockAcquire in SignalBackends, so >> should be fine I guess? >> >> Apart from that, I don't see any new logic in SignalBackends, that could >> potentially be risky. /Joel --4ec6353fcea643429b143805b82d1ba9 Content-Disposition: attachment; filename*0="0001-optimize_listen_notify-v30.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0001-optimize=5Flisten=5Fnotify-v30.patch?=" Content-Transfer-Encoding: base64 RnJvbSA4MWFiMWFkM2Y2ZmU4YTExYTg4Nzc4MzgzMDNjODhiYzMzYzg3MmZkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogV2VkLCA4IE9jdCAyMDI1IDA5OjMwOjU0ICswMjAwClN1YmplY3Q6IFtQQVRD SCAxLzJdIEltcHJvdmUgTElTVEVOL05PVElGWSB0ZXN0IGNvdmVyYWdlCgpUaGlzIGFkZHMg aXNvbGF0aW9uIHRlc3RzIHRvIGNvdmVyIHByZXZpb3VzbHkgdW50ZXN0ZWQgY29kZSBwYXRo czoKCiogQ2hlY2sgc2ltcGxlIE5PVElGWSByZXBhcmVudGluZyB3aGVuIHBhcmVudCBoYXMg bm8gYWN0aW9uCiogQ2hlY2sgTElTVEVOIHJlcGFyZW50aW5nIGluIHN1YnRyYW5zYWN0aW9u CiogQ2hlY2sgTElTVEVOIG1lcmdlIHBhdGggd2hlbiBib3RoIG91dGVyIGFuZCBpbm5lciB0 cmFuc2FjdGlvbnMgaGF2ZSBhY3Rpb25zCiogQ2hlY2sgTElTVEVOIGFib3J0IHBhdGggKFJP TExCQUNLIFRPIFNBVkVQT0lOVCBkaXNjYXJkcyBwZW5kaW5nIGFjdGlvbnMpCiogQ2hlY2sg bm90aWZpY2F0aW9uX21hdGNoIGZ1bmN0aW9uICh0cmlnZ2VyZWQgYnkgaGFzaCB0YWJsZSBk dXBsaWNhdGUgZGV0ZWN0aW9uKQoqIENoZWNrIHRoYXQgbm90aWZpY2F0aW9ucyBzZW50IGZy b20gYSBiYWNrZW5kIHRoYXQgaGFzIG5vdCBkb25lIExJU1RFTgogIGFyZSBwcm9wZXJseSBk ZWxpdmVyZWQgdG8gYSBsaXN0ZW5lciBpbiBhbm90aGVyIGJhY2tlbmQKClRoaXMgYWxzbyBh ZGRzIGEgdGVzdCB0byBwcmVwYXJlIGZvciB0aGUgbmV4dCBwYXRjaDoKCiogQ2hlY2sgQ2hh bm5lbEhhc2hBZGRMaXN0ZW5lciBhcnJheSBncm93dGgKLS0tCiBzcmMvdGVzdC9pc29sYXRp b24vZXhwZWN0ZWQvYXN5bmMtbm90aWZ5Lm91dCB8IDExNCArKysrKysrKysrKysrKysrKyst CiBzcmMvdGVzdC9pc29sYXRpb24vc3BlY3MvYXN5bmMtbm90aWZ5LnNwZWMgICB8ICA2OCAr KysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxODEgaW5zZXJ0aW9ucygrKSwgMSBkZWxl dGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9hc3lu Yy1ub3RpZnkub3V0IGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL2FzeW5jLW5vdGlm eS5vdXQKaW5kZXggNTU2ZTE4MDU4OTMuLjQ0M2E2ZWI2NjlmIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvYXN5bmMtbm90aWZ5Lm91dAorKysgYi9zcmMvdGVz dC9pc29sYXRpb24vZXhwZWN0ZWQvYXN5bmMtbm90aWZ5Lm91dApAQCAtMSw0ICsxLDQgQEAK LVBhcnNlZCB0ZXN0IHNwZWMgd2l0aCAzIHNlc3Npb25zCitQYXJzZWQgdGVzdCBzcGVjIHdp dGggNyBzZXNzaW9ucwogCiBzdGFydGluZyBwZXJtdXRhdGlvbjogbGlzdGVuYyBub3RpZnkx IG5vdGlmeTIgbm90aWZ5MyBub3RpZnlmCiBzdGVwIGxpc3RlbmM6IExJU1RFTiBjMTsgTElT VEVOIGMyOwpAQCAtNDcsNiArNDcsMTA1IEBAIG5vdGlmaWVyOiBOT1RJRlkgImMyIiB3aXRo IHBheWxvYWQgInBheWxvYWQiIGZyb20gbm90aWZpZXIKIG5vdGlmaWVyOiBOT1RJRlkgImMx IiB3aXRoIHBheWxvYWQgInBheWxvYWRzIiBmcm9tIG5vdGlmaWVyCiBub3RpZmllcjogTk9U SUZZICJjMiIgd2l0aCBwYXlsb2FkICJwYXlsb2FkcyIgZnJvbSBub3RpZmllcgogCitzdGFy dGluZyBwZXJtdXRhdGlvbjogbGlzdGVuYyBub3RpZnlzX3NpbXBsZQorc3RlcCBsaXN0ZW5j OiBMSVNURU4gYzE7IExJU1RFTiBjMjsKK3N0ZXAgbm90aWZ5c19zaW1wbGU6IAorCUJFR0lO OworCVNBVkVQT0lOVCBzMTsKKwlOT1RJRlkgYzEsICdzaW1wbGUxJzsKKwlOT1RJRlkgYzIs ICdzaW1wbGUyJzsKKwlSRUxFQVNFIFNBVkVQT0lOVCBzMTsKKwlDT01NSVQ7CisKK25vdGlm aWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgInNpbXBsZTEiIGZyb20gbm90aWZpZXIK K25vdGlmaWVyOiBOT1RJRlkgImMyIiB3aXRoIHBheWxvYWQgInNpbXBsZTIiIGZyb20gbm90 aWZpZXIKKworc3RhcnRpbmcgcGVybXV0YXRpb246IGxzYmVnaW4gbHNzYXZlcG9pbnQgbHNs aXN0ZW4gbHNyZWxlYXNlIGxzY29tbWl0IGxzbm90aWZ5CitzdGVwIGxzYmVnaW46IEJFR0lO Oworc3RlcCBsc3NhdmVwb2ludDogU0FWRVBPSU5UIHMxOworc3RlcCBsc2xpc3RlbjogTElT VEVOIGMxOyBMSVNURU4gYzI7CitzdGVwIGxzcmVsZWFzZTogUkVMRUFTRSBTQVZFUE9JTlQg czE7CitzdGVwIGxzY29tbWl0OiBDT01NSVQ7CitzdGVwIGxzbm90aWZ5OiBOT1RJRlkgYzEs ICdzdWJ4YWN0X3Rlc3QnOworbGlzdGVuX3N1YnhhY3Q6IE5PVElGWSAiYzEiIHdpdGggcGF5 bG9hZCAic3VieGFjdF90ZXN0IiBmcm9tIGxpc3Rlbl9zdWJ4YWN0CisKK3N0YXJ0aW5nIHBl cm11dGF0aW9uOiBsc2JlZ2luIGxzbGlzdGVuX291dGVyIGxzc2F2ZXBvaW50IGxzbGlzdGVu IGxzcmVsZWFzZSBsc2NvbW1pdCBsc25vdGlmeQorc3RlcCBsc2JlZ2luOiBCRUdJTjsKK3N0 ZXAgbHNsaXN0ZW5fb3V0ZXI6IExJU1RFTiBjMzsKK3N0ZXAgbHNzYXZlcG9pbnQ6IFNBVkVQ T0lOVCBzMTsKK3N0ZXAgbHNsaXN0ZW46IExJU1RFTiBjMTsgTElTVEVOIGMyOworc3RlcCBs c3JlbGVhc2U6IFJFTEVBU0UgU0FWRVBPSU5UIHMxOworc3RlcCBsc2NvbW1pdDogQ09NTUlU Oworc3RlcCBsc25vdGlmeTogTk9USUZZIGMxLCAnc3VieGFjdF90ZXN0JzsKK2xpc3Rlbl9z dWJ4YWN0OiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgInN1YnhhY3RfdGVzdCIgZnJvbSBs aXN0ZW5fc3VieGFjdAorCitzdGFydGluZyBwZXJtdXRhdGlvbjogbHNiZWdpbiBsc3NhdmVw b2ludCBsc2xpc3RlbiBsc3JvbGxiYWNrIGxzY29tbWl0IGxzbm90aWZ5X2NoZWNrCitzdGVw IGxzYmVnaW46IEJFR0lOOworc3RlcCBsc3NhdmVwb2ludDogU0FWRVBPSU5UIHMxOworc3Rl cCBsc2xpc3RlbjogTElTVEVOIGMxOyBMSVNURU4gYzI7CitzdGVwIGxzcm9sbGJhY2s6IFJP TExCQUNLIFRPIFNBVkVQT0lOVCBzMTsKK3N0ZXAgbHNjb21taXQ6IENPTU1JVDsKK3N0ZXAg bHNub3RpZnlfY2hlY2s6IE5PVElGWSBjMSwgJ3Nob3VsZF9ub3RfcmVjZWl2ZSc7CisKK3N0 YXJ0aW5nIHBlcm11dGF0aW9uOiBsaXN0ZW5jIG5vdGlmeV9tYW55X3dpdGhfZHVwCitzdGVw IGxpc3RlbmM6IExJU1RFTiBjMTsgTElTVEVOIGMyOworc3RlcCBub3RpZnlfbWFueV93aXRo X2R1cDogCisJQkVHSU47CisJU0VMRUNUIHBnX25vdGlmeSgnYzEnLCAnbXNnJyB8fCBzOjp0 ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxNykgczsKKwlTRUxFQ1QgcGdfbm90aWZ5 KCdjMScsICdtc2cxJyk7CisJQ09NTUlUOworCitwZ19ub3RpZnkKKy0tLS0tLS0tLQorICAg ICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAg ICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisg ICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAor ICAgICAgICAgCisgICAgICAgICAKKygxNyByb3dzKQorCitwZ19ub3RpZnkKKy0tLS0tLS0t LQorICAgICAgICAgCisoMSByb3cpCisKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBh eWxvYWQgIm1zZzEiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRo IHBheWxvYWQgIm1zZzIiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3 aXRoIHBheWxvYWQgIm1zZzMiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMx IiB3aXRoIHBheWxvYWQgIm1zZzQiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkg ImMxIiB3aXRoIHBheWxvYWQgIm1zZzUiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJ RlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzYiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBO T1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzciIGZyb20gbm90aWZpZXIKK25vdGlmaWVy OiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzgiIGZyb20gbm90aWZpZXIKK25vdGlm aWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzkiIGZyb20gbm90aWZpZXIKK25v dGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzEwIiBmcm9tIG5vdGlmaWVy Citub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2cxMSIgZnJvbSBub3Rp Zmllcgorbm90aWZpZXI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAibXNnMTIiIGZyb20g bm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzEzIiBm cm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2cx NCIgZnJvbSBub3RpZmllcgorbm90aWZpZXI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAi bXNnMTUiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxv YWQgIm1zZzE2IiBmcm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBw YXlsb2FkICJtc2cxNyIgZnJvbSBub3RpZmllcgorCitzdGFydGluZyBwZXJtdXRhdGlvbjog bGlzdGVuYyBsbGlzdGVuIGwybGlzdGVuIGwzbGlzdGVuIGxzbGlzdGVuCitzdGVwIGxpc3Rl bmM6IExJU1RFTiBjMTsgTElTVEVOIGMyOworc3RlcCBsbGlzdGVuOiBMSVNURU4gYzE7IExJ U1RFTiBjMjsKK3N0ZXAgbDJsaXN0ZW46IExJU1RFTiBjMTsKK3N0ZXAgbDNsaXN0ZW46IExJ U1RFTiBjMTsKK3N0ZXAgbHNsaXN0ZW46IExJU1RFTiBjMTsgTElTVEVOIGMyOworCiBzdGFy dGluZyBwZXJtdXRhdGlvbjogbGxpc3RlbiBub3RpZnkxIG5vdGlmeTIgbm90aWZ5MyBub3Rp ZnlmIGxjaGVjawogc3RlcCBsbGlzdGVuOiBMSVNURU4gYzE7IExJU1RFTiBjMjsKIHN0ZXAg bm90aWZ5MTogTk9USUZZIGMxOwpAQCAtOTUsNiArMTk0LDggQEAgbGlzdGVuZXI6IE5PVElG WSAiYzIiIHdpdGggcGF5bG9hZCAiIiBmcm9tIG5vdGlmaWVyCiAKIHN0YXJ0aW5nIHBlcm11 dGF0aW9uOiBsMmxpc3RlbiBsMmJlZ2luIG5vdGlmeTEgbGJlZ2lucyBsbGlzdGVuIGxjb21t aXQgbDJjb21taXQgbDJzdG9wCiBzdGVwIGwybGlzdGVuOiBMSVNURU4gYzE7CitsaXN0ZW5l cjI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAiIiBmcm9tIG5vdGlmaWVyCitsaXN0ZW5l cjI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAiIiBmcm9tIG5vdGlmaWVyCiBzdGVwIGwy YmVnaW46IEJFR0lOOwogc3RlcCBub3RpZnkxOiBOT1RJRlkgYzE7CiBzdGVwIGxiZWdpbnM6 IEJFR0lOIElTT0xBVElPTiBMRVZFTCBTRVJJQUxJWkFCTEU7CkBAIC0xMDQsNiArMjA1LDE3 IEBAIHN0ZXAgbDJjb21taXQ6IENPTU1JVDsKIGxpc3RlbmVyMjogTk9USUZZICJjMSIgd2l0 aCBwYXlsb2FkICIiIGZyb20gbm90aWZpZXIKIHN0ZXAgbDJzdG9wOiBVTkxJU1RFTiAqOwog CitzdGFydGluZyBwZXJtdXRhdGlvbjogbGNoX2xpc3RlbiBuY2hfbm90aWZ5IGxjaF9jaGVj aworc3RlcCBsY2hfbGlzdGVuOiBMSVNURU4gY2g7CitzdGVwIG5jaF9ub3RpZnk6IE5PVElG WSBjaCwgJ2FhJzsKK3N0ZXAgbGNoX2NoZWNrOiBTRUxFQ1QgMSBBUyB4OworeAorLQorMQor KDEgcm93KQorCitsaXN0ZW5lcl9jaDogTk9USUZZICJjaCIgd2l0aCBwYXlsb2FkICJhYSIg ZnJvbSBub3RpZmllcl9jaAorCiBzdGFydGluZyBwZXJtdXRhdGlvbjogbGxpc3RlbiBsYmVn aW4gdXNhZ2UgYmlnbm90aWZ5IHVzYWdlCiBzdGVwIGxsaXN0ZW46IExJU1RFTiBjMTsgTElT VEVOIGMyOwogc3RlcCBsYmVnaW46IEJFR0lOOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNv bGF0aW9uL3NwZWNzL2FzeW5jLW5vdGlmeS5zcGVjIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL3Nw ZWNzL2FzeW5jLW5vdGlmeS5zcGVjCmluZGV4IDBiOGNmZDkxMDgzLi4wYTAxZTc3N2I5OCAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2FzeW5jLW5vdGlmeS5zcGVj CisrKyBiL3NyYy90ZXN0L2lzb2xhdGlvbi9zcGVjcy9hc3luYy1ub3RpZnkuc3BlYwpAQCAt MzEsNiArMzEsMjAgQEAgc3RlcCBub3RpZnlzMQl7CiAJUk9MTEJBQ0sgVE8gU0FWRVBPSU5U IHMyOwogCUNPTU1JVDsKIH0KK3N0ZXAgbm90aWZ5c19zaW1wbGUJeworCUJFR0lOOworCVNB VkVQT0lOVCBzMTsKKwlOT1RJRlkgYzEsICdzaW1wbGUxJzsKKwlOT1RJRlkgYzIsICdzaW1w bGUyJzsKKwlSRUxFQVNFIFNBVkVQT0lOVCBzMTsKKwlDT01NSVQ7Cit9CitzdGVwIG5vdGlm eV9tYW55X3dpdGhfZHVwCXsKKwlCRUdJTjsKKwlTRUxFQ1QgcGdfbm90aWZ5KCdjMScsICdt c2cnIHx8IHM6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDE3KSBzOworCVNFTEVD VCBwZ19ub3RpZnkoJ2MxJywgJ21zZzEnKTsKKwlDT01NSVQ7Cit9CiBzdGVwIHVzYWdlCQl7 IFNFTEVDVCBwZ19ub3RpZmljYXRpb25fcXVldWVfdXNhZ2UoKSA+IDAgQVMgbm9uemVybzsg fQogc3RlcCBiaWdub3RpZnkJeyBTRUxFQ1QgY291bnQocGdfbm90aWZ5KCdjMScsIHM6OnRl eHQpKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBzOyB9CiB0ZWFyZG93bgkJeyBV TkxJU1RFTiAqOyB9CkBAIC01Myw2ICs2NywzOCBAQCBzdGVwIGwyYmVnaW4JeyBCRUdJTjsg fQogc3RlcCBsMmNvbW1pdAl7IENPTU1JVDsgfQogc3RlcCBsMnN0b3AJCXsgVU5MSVNURU4g KjsgfQogCisjIFRoaXJkIGxpc3RlbmVyIHNlc3Npb24gZm9yIHRlc3RpbmcgYXJyYXkgZ3Jv d3RoLgorCitzZXNzaW9uIGxpc3RlbmVyMworc3RlcCBsM2xpc3Rlbgl7IExJU1RFTiBjMTsg fQordGVhcmRvd24JCXsgVU5MSVNURU4gKjsgfQorCisjIExpc3RlbmVyIHNlc3Npb24gZm9y IGNyb3NzLXNlc3Npb24gbm90aWZpY2F0aW9uIHRlc3Qgd2l0aCBjaGFubmVsICdjaCcuCisK K3Nlc3Npb24gbGlzdGVuZXJfY2gKK3N0ZXAgbGNoX2xpc3Rlbgl7IExJU1RFTiBjaDsgfQor c3RlcCBsY2hfY2hlY2sJeyBTRUxFQ1QgMSBBUyB4OyB9Cit0ZWFyZG93bgkJeyBVTkxJU1RF TiAqOyB9CisKKyMgTm90aWZpZXIgc2Vzc2lvbiBmb3IgY3Jvc3Mtc2Vzc2lvbiBub3RpZmlj YXRpb24gdGVzdCB3aXRoIGNoYW5uZWwgJ2NoJy4KKworc2Vzc2lvbiBub3RpZmllcl9jaAor c3RlcCBuY2hfbm90aWZ5CXsgTk9USUZZIGNoLCAnYWEnOyB9CisKKyMgU2Vzc2lvbiBmb3Ig dGVzdGluZyBMSVNURU4gaW4gc3VidHJhbnNhY3Rpb24gd2l0aCBzZXBhcmF0ZSBzdGVwcy4K Kworc2Vzc2lvbiBsaXN0ZW5fc3VieGFjdAorc3RlcCBsc2JlZ2luCXsgQkVHSU47IH0KK3N0 ZXAgbHNsaXN0ZW5fb3V0ZXIJeyBMSVNURU4gYzM7IH0KK3N0ZXAgbHNzYXZlcG9pbnQJeyBT QVZFUE9JTlQgczE7IH0KK3N0ZXAgbHNsaXN0ZW4JeyBMSVNURU4gYzE7IExJU1RFTiBjMjsg fQorc3RlcCBsc3JlbGVhc2UJeyBSRUxFQVNFIFNBVkVQT0lOVCBzMTsgfQorc3RlcCBsc3Jv bGxiYWNrCXsgUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIHMxOyB9CitzdGVwIGxzY29tbWl0CXsg Q09NTUlUOyB9CitzdGVwIGxzbm90aWZ5CXsgTk9USUZZIGMxLCAnc3VieGFjdF90ZXN0Jzsg fQorc3RlcCBsc25vdGlmeV9jaGVjawl7IE5PVElGWSBjMSwgJ3Nob3VsZF9ub3RfcmVjZWl2 ZSc7IH0KK3RlYXJkb3duCQl7IFVOTElTVEVOICo7IH0KKwogCiAjIFRyaXZpYWwgY2FzZXMu CiBwZXJtdXRhdGlvbiBsaXN0ZW5jIG5vdGlmeTEgbm90aWZ5MiBub3RpZnkzIG5vdGlmeWYK QEAgLTYwLDYgKzEwNiwyNCBAQCBwZXJtdXRhdGlvbiBsaXN0ZW5jIG5vdGlmeTEgbm90aWZ5 MiBub3RpZnkzIG5vdGlmeWYKICMgQ2hlY2sgc2ltcGxlIGFuZCBsZXNzLXNpbXBsZSBkZWR1 cGxpY2F0aW9uLgogcGVybXV0YXRpb24gbGlzdGVuYyBub3RpZnlkMSBub3RpZnlkMiBub3Rp ZnlzMQogCisjIENoZWNrIHNpbXBsZSBOT1RJRlkgcmVwYXJlbnRpbmcgd2hlbiBwYXJlbnQg aGFzIG5vIGFjdGlvbi4KK3Blcm11dGF0aW9uIGxpc3RlbmMgbm90aWZ5c19zaW1wbGUKKwor IyBDaGVjayBMSVNURU4gcmVwYXJlbnRpbmcgaW4gc3VidHJhbnNhY3Rpb24uCitwZXJtdXRh dGlvbiBsc2JlZ2luIGxzc2F2ZXBvaW50IGxzbGlzdGVuIGxzcmVsZWFzZSBsc2NvbW1pdCBs c25vdGlmeQorCisjIENoZWNrIExJU1RFTiBtZXJnZSBwYXRoIHdoZW4gYm90aCBvdXRlciBh bmQgaW5uZXIgdHJhbnNhY3Rpb25zIGhhdmUgYWN0aW9ucy4KK3Blcm11dGF0aW9uIGxzYmVn aW4gbHNsaXN0ZW5fb3V0ZXIgbHNzYXZlcG9pbnQgbHNsaXN0ZW4gbHNyZWxlYXNlIGxzY29t bWl0IGxzbm90aWZ5CisKKyMgQ2hlY2sgTElTVEVOIGFib3J0IHBhdGggKFJPTExCQUNLIFRP IFNBVkVQT0lOVCBkaXNjYXJkcyBwZW5kaW5nIGFjdGlvbnMpLgorcGVybXV0YXRpb24gbHNi ZWdpbiBsc3NhdmVwb2ludCBsc2xpc3RlbiBsc3JvbGxiYWNrIGxzY29tbWl0IGxzbm90aWZ5 X2NoZWNrCisKKyMgQ2hlY2sgbm90aWZpY2F0aW9uX21hdGNoIGZ1bmN0aW9uICh0cmlnZ2Vy ZWQgYnkgaGFzaCB0YWJsZSBkdXBsaWNhdGUgZGV0ZWN0aW9uKS4KK3Blcm11dGF0aW9uIGxp c3RlbmMgbm90aWZ5X21hbnlfd2l0aF9kdXAKKworIyBDaGVjayBDaGFubmVsSGFzaEFkZExp c3RlbmVyIGFycmF5IGdyb3d0aC4KK3Blcm11dGF0aW9uIGxpc3RlbmMgbGxpc3RlbiBsMmxp c3RlbiBsM2xpc3RlbiBsc2xpc3RlbgorCiAjIENyb3NzLWJhY2tlbmQgbm90aWZpY2F0aW9u IGRlbGl2ZXJ5LiAgV2UgdXNlIGEgInNlbGVjdCAxIiB0byBmb3JjZSB0aGUKICMgbGlzdGVu ZXIgc2Vzc2lvbiB0byBjaGVjayBmb3Igbm90aWZpZXMuICBJbiBwcmluY2lwbGUgd2UgY291 bGQganVzdCB3YWl0CiAjIGZvciBkZWxpdmVyeSwgYnV0IHRoYXQgd291bGQgcmVxdWlyZSBl eHRyYSBzdXBwb3J0IGluIGlzb2xhdGlvbnRlc3RlcgpAQCAtNzMsNiArMTM3LDEwIEBAIHBl cm11dGF0aW9uIGxpc3RlbmMgbGxpc3RlbiBub3RpZnkxIG5vdGlmeTIgbm90aWZ5MyBub3Rp ZnlmIGxjaGVjawogIyBhbmQgbm90aWZ5IHF1ZXVlIGlzIG5vdCBlbXB0eQogcGVybXV0YXRp b24gbDJsaXN0ZW4gbDJiZWdpbiBub3RpZnkxIGxiZWdpbnMgbGxpc3RlbiBsY29tbWl0IGwy Y29tbWl0IGwyc3RvcAogCisjIENoZWNrIHRoYXQgbm90aWZpY2F0aW9ucyBzZW50IGZyb20g YSBiYWNrZW5kIHRoYXQgaGFzIG5vdCBkb25lIExJU1RFTgorIyBhcmUgcHJvcGVybHkgZGVs aXZlcmVkIHRvIGEgbGlzdGVuZXIgaW4gYW5vdGhlciBiYWNrZW5kLgorcGVybXV0YXRpb24g bGNoX2xpc3RlbiBuY2hfbm90aWZ5IGxjaF9jaGVjaworCiAjIFZlcmlmeSB0aGF0IHBnX25v dGlmaWNhdGlvbl9xdWV1ZV91c2FnZSBjb3JyZWN0bHkgcmVwb3J0cyBhIG5vbi16ZXJvIHJl c3VsdCwKICMgYWZ0ZXIgc3VibWl0dGluZyBub3RpZmljYXRpb25zIHdoaWxlIGFub3RoZXIg Y29ubmVjdGlvbiBpcyBsaXN0ZW5pbmcgZm9yCiAjIHRob3NlIG5vdGlmaWNhdGlvbnMgYW5k IHdhaXRpbmcgaW5zaWRlIGFuIGFjdGl2ZSB0cmFuc2FjdGlvbi4gIFdlIGhhdmUgdG8KLS0g CjIuNTAuMQoK --4ec6353fcea643429b143805b82d1ba9 Content-Disposition: attachment; filename*0="0002-optimize_listen_notify-v30.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0002-optimize=5Flisten=5Fnotify-v30.patch?=" Content-Transfer-Encoding: base64 RnJvbSBjYTUyZTIxYTU0ZjYyMTljMmQzYWI1MzljZjM4ZWIzYTdkYTMxMWVjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogU2F0LCAxNSBOb3YgMjAyNSAyMjoxODo1MCArMDEwMApTdWJqZWN0OiBbUEFU Q0ggMi8yXSBPcHRpbWl6ZSBMSVNURU4vTk9USUZZIHdpdGggc2hhcmVkIGNoYW5uZWwgbWFw IGFuZCBkaXJlY3QKIGFkdmFuY2VtZW50Ck1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlw ZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5n OiA4Yml0CgpUaGlzIHBhdGNoIHJld29ya3MgdGhlIExJU1RFTi9OT1RJRlkgc2lnbmFsaW5n IHBhdGggdG8gYXZvaWQgdGhlCmxvbmctc3RhbmRpbmcgaW5lZmZpY2llbmN5IHdoZXJlIGV2 ZXJ5IGNvbW1pdCB3YWtlcyBhbGwgbGlzdGVuaW5nCmJhY2tlbmRzIGluIHRoZSBzYW1lIGRh dGFiYXNlLCBldmVuIHRob3NlIHRoYXQgYXJlIGxpc3RlbmluZyBvbgpjb21wbGV0ZWx5IGRp ZmZlcmVudCBjaGFubmVscy4KClByb2JsZW0KLS0tLS0tLQoKQXQgcHJlc2VudCwgU2lnbmFs QmFja2VuZHMgaGFzIG5vIGNlbnRyYWwga25vd2xlZGdlIG9mIHdoaWNoIGJhY2tlbmQKbGlz dGVucyBvbiB3aGljaCBjaGFubmVsLiBXaGVuIGEgYmFja2VuZCBjb21taXRzIGEgdHJhbnNh Y3Rpb24gdGhhdAppc3N1ZWQgTk9USUZZLCBpdCBzaW1wbHkgaXRlcmF0ZXMgb3ZlciBhbGwg cmVnaXN0ZXJlZCBsaXN0ZW5lcnMgaW4gdGhlCnNhbWUgZGF0YWJhc2UgYW5kIHNlbmRzIGVh Y2ggb25lIGEgUFJPQ1NJR19OT1RJRllfSU5URVJSVVBUIHNpZ25hbC4KClRoYXQgYmVoYXZp b3IgaXMgZmluZSB3aGVuIGFsbCBsaXN0ZW5lcnMgYXJlIG9uIHRoZSBzYW1lIGNoYW5uZWws IGJ1dAp3aGVuIG1hbnkgYmFja2VuZHMgYXJlIGxpc3RlbmluZyBvbiBkaWZmZXJlbnQgY2hh bm5lbHMsIGVhY2ggTk9USUZZCnRyaWdnZXJzIGEgc3Rvcm0gb2YgdW5uZWNlc3Nhcnkgd2Fr ZXVwcyBhbmQgY29udGV4dCBzd2l0Y2hlcy4gQXMgdGhlCm51bWJlciBvZiBpZGxlIGxpc3Rl bmVycyBncm93cywgdGhpcyBvZnRlbiBiZWNvbWVzIHRoZSBib3R0bGVuZWNrIGFuZAp0aHJv dWdocHV0IGRyb3BzIHNoYXJwbHkuCgpPdmVydmlldyBvZiB0aGUgc29sdXRpb24KLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBsYXppbHktY3Jl YXRlZCBkeW5hbWljIHNoYXJlZCBoYXNoIChkc2hhc2gpCmJhY2tlZCBieSBkeW5hbWljIHNo YXJlZCBtZW1vcnkgKERTQSkgdGhhdCBtYXBzIChkYm9pZCwgY2hhbm5lbCkgdG8KYXJyYXlz IG9mIExpc3RlbmVyRW50cnkgc3RydWN0dXJlcyAoY29udGFpbmluZyBQcm9jTnVtYmVyIGFu ZCBhY3RpdmUKZmxhZykgcmVwcmVzZW50aW5nIHRoZSBiYWNrZW5kcyBsaXN0ZW5pbmcgb24g ZWFjaCBjaGFubmVsLiBUaGlzIGFsbG93cwp0aGUgc2VuZGVyIHRvIHRhcmdldCBvbmx5IHRo b3NlIGJhY2tlbmRzIGFjdHVhbGx5IGxpc3RlbmluZyBvbiB0aGUKY2hhbm5lbHMgZm9yIHdo aWNoIGl0IGhhcyBxdWV1ZWQgbm90aWZpY2F0aW9ucy4KCkNyaXRpY2FsIHNlY3Rpb24gc2Fm ZXR5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUbyBhdm9pZCBFUlJPUuKGklBBTklDIGFm dGVyIHRyYW5zYWN0aW9uIGNvbW1pdCwgYWxsIHJpc2t5IG9wZXJhdGlvbnMKKERTQSBhbGxv Y2F0aW9ucywgZHNoYXNoIG9wZXJhdGlvbnMsIG1lbW9yeSBhbGxvY2F0aW9ucykgYXJlIG1v dmVkIHRvClByZUNvbW1pdF9Ob3RpZnkgd2hlcmUgZmFpbHVyZXMgY2FuIHN0aWxsIHNhZmVs eSBhYm9ydC4KCkVhY2ggbGlzdGVuZXIgZW50cnkgaW5jbHVkZXMgYW4gJ2FjdGl2ZScgZmxh Zy4gRHVyaW5nIFByZUNvbW1pdCwgTElTVEVOCm9wZXJhdGlvbnMgaW5zZXJ0IGVudHJpZXMg d2l0aCBhY3RpdmU9ZmFsc2UgdG8gcHJlLWFsbG9jYXRlIGFsbCByZXF1aXJlZApzcGFjZS4g QWZ0ZXIgY29tbWl0IHRvIGNsb2csIEF0Q29tbWl0X05vdGlmeSBzaW1wbHkgZmxpcHMgYWN0 aXZlIGZsYWdzCnRvIHRydWXigJRhIGJvb2xlYW4gYXNzaWdubWVudCB0aGF0IGhhcyBhY2Nl cHRhYmx5IGxvdyBmYWlsdXJlIHJpc2suCgpTaW1pbGFybHksIHNpZ25hbCBhcnJheXMgKG5v dGlmeVNpZ25hbFBpZHMvbm90aWZ5U2lnbmFsUHJvY3MpIHVzZSBhCmh5YnJpZCBhbGxvY2F0 aW9uIHN0cmF0ZWd5OiBhbGxvY2F0ZWQgb25jZSBpbiBUb3BNZW1vcnlDb250ZXh0IGR1cmlu Zwp0aGUgZmlyc3QgTk9USUZZIChpbiBQcmVDb21taXQgd2hlcmUgT09NIGNhbiBzdGlsbCBh Ym9ydCksIHRoZW4gcmV1c2VkCnBlcm1hbmVudGx5IGFjcm9zcyBhbGwgdHJhbnNhY3Rpb25z LgoKQXQgY29tbWl0IHRpbWU6CgoqIEV4ZWNfTGlzdGVuUHJlQ29tbWl0IHBlcmZvcm1zIGFs bCByaXNreSBhbGxvY2F0aW9ucyB3aXRoIGFjdGl2ZT1mYWxzZQoqIEV4ZWNfTGlzdGVuQ29t bWl0IGZsaXBzIGFjdGl2ZSBmbGFncyB0byB0cnVlIChwb3N0LWNvbW1pdCkKKiBBdENvbW1p dF9Ob3RpZnkgdXBkYXRlcyB0aGUgc2hhcmVkIGNoYW5uZWxIYXNoIHRvIHJlZmxlY3QgYW55 IExJU1RFTgogIG9yIFVOTElTVEVOIGFjdGlvbnMgcGVyZm9ybWVkIGluIHRoZSB0cmFuc2Fj dGlvbi4KKiBTaWduYWxCYWNrZW5kcyBjb25zdWx0cyB0aGlzIGhhc2ggdG8gZmluZCB0aGUg YmFja2VuZHMgdGhhdCBhcmUKICBsaXN0ZW5pbmcgb24gdGhlIGNoYW5uZWxzIGJlaW5nIG5v dGlmaWVkIGluIHRoZSBjdXJyZW50IGRhdGFiYXNlLCBhbmQKICBzaWduYWxzIG9ubHkgdGhv c2Ugd2l0aCBhY3RpdmU9dHJ1ZS4KCkVhY2ggYmFja2VuZCdzIGVudHJ5IGluIEFzeW5jUXVl dWVDb250cm9sIG5vdyBpbmNsdWRlcyBhIHdha2V1cFBlbmRpbmcKZmxhZyB0byBwcmV2ZW50 IGR1cGxpY2F0ZSBzaWduYWxzIHdoaWxlIGEgcHJldmlvdXMgd2FrZXVwIGlzIHN0aWxsIGJl aW5nCnByb2Nlc3NlZC4KCkRpcmVjdCBhZHZhbmNlbWVudAotLS0tLS0tLS0tLS0tLS0tLS0K CkEgZnVydGhlciBvcHRpbWl6YXRpb24gYXZvaWRzIHNpZ25hbGluZyBpZGxlIGJhY2tlbmRz IHRoYXQgYXJlIG5vdApsaXN0ZW5pbmcgb24gYW55IG9mIHRoZSBjaGFubmVscyBub3RpZmll ZCB3aXRoaW4gdGhlIHRyYW5zYWN0aW9uLgoKV2hpbGUgcXVldWluZyBub3RpZmljYXRpb25z LCBQcmVDb21taXRfTm90aWZ5IHJlY29yZHMgdGhlIHF1ZXVlIGhlYWQKcG9zaXRpb24gYm90 aCBiZWZvcmUgYW5kIGFmdGVyIHdyaXRpbmcgaXRzIG5vdGlmaWNhdGlvbnMuIEJlY2F1c2Ug YWxsCndyaXRlcnMgYXJlIHNlcmlhbGl6ZWQgYnkgdGhlIGV4aXN0aW5nIGNsdXN0ZXItd2lk ZSBoZWF2eXdlaWdodCBsb2NrIG9uCiJkYXRhYmFzZSAwIiwgbm8gYmFja2VuZCAoZnJvbSBh bnkgZGF0YWJhc2UpIGNhbiBpbnNlcnQgZW50cmllcyBiZXR3ZWVuCnRob3NlIHR3byBwb2lu dHMuIFRoaXMgZ3VhcmFudGVlcyB0aGF0IHRoZSByZWdpb24gW29sZEhlYWQsIG5ld0hlYWQp CmNvbnRhaW5zIG9ubHkgdGhlIGVudHJpZXMgd3JpdHRlbiBieSBvdXIgY29tbWl0LgoKU2ln bmFsQmFja2VuZHMgdXNlcyB0aGlzIGZhY3QgdG8gZGlyZWN0bHkgYWR2YW5jZSBhbnkgYmFj a2VuZCBzdGlsbApwb3NpdGlvbmVkIGF0IG9sZEhlYWQgdXAgdG8gbmV3SGVhZCwgYXZvaWRp bmcgYSBuZWVkbGVzcyB3YWtldXAgZm9yCmxpc3RlbmVycyB0aGF0IHdvdWxkIG90aGVyd2lz ZSBub3QgZmluZCBhbnkgbm90aWZpZXMgb2YgaW50ZXJlc3QuCgpUbyBoYW5kbGUgYWR2YW5j aW5nIGJhY2tlbmRzIGNvcnJlY3RseSwgZWFjaCBiYWNrZW5kJ3MgZW50cnkgdHJhY2tzIGJv dGgKd2hldGhlciBpdCBpcyBjdXJyZW50bHkgYWR2YW5jaW5nIChpc0FkdmFuY2luZykgYW5k IHRoZSB0YXJnZXQgcG9zaXRpb24KaXQgaXMgYWR2YW5jaW5nIHRvIChhZHZhbmNpbmdQb3Mp LiBUaGlzIGFsbG93cyBTaWduYWxCYWNrZW5kcyB0byBzaWduYWwKYWR2YW5jaW5nIGJhY2tl bmRzIG9ubHkgd2hlbiB0aGVpciB0YXJnZXQgcG9zaXRpb24gd291bGQgbGVhdmUgdGhlbQpi ZWhpbmQgdGhlIG5ldyBxdWV1ZSBoZWFkLCB3aGlsZSBzYWZlbHkgZGlyZWN0LWFkdmFuY2lu ZyBpZGxlIGJhY2tlbmRzCnRoYXQgd291bGQgbm90IGJlIGludGVyZXN0ZWQgaW4gdGhlIG5l d2x5IHdyaXR0ZW4gbm90aWZpY2F0aW9ucy4KSWRsZSBiYWNrZW5kcyB0aGF0IGFyZSBzdGF0 aW9uYXJ5IGF0IGEgcG9zaXRpb24gYmVmb3JlIHRoZSBvbGQgcXVldWUKaGVhZCBhcmUgc2ln bmFsZWQsIHNpbmNlIHRoZXkgbWlnaHQgYmUgaW50ZXJlc3RlZCBpbiB0aGUgbm90aWZpY2F0 aW9ucwppbiBiZXR3ZWVuIHRoZWlyIGN1cnJlbnQgcG9zaXRpb24gYW5kIHRoZSBvbGQgcXVl dWUgaGVhZC4KCk90aGVyIG5vdGVzCi0tLS0tLS0tLS0tCgoqIE1haW50YWlucyBkdWFsIGRh dGEgc3RydWN0dXJlczogYSBzaGFyZWQgY2hhbm5lbEhhc2ggZm9yIGRldGVybWluaW5nCiAg d2hpY2ggYmFja2VuZHMgdG8gc2lnbmFsLCBhbmQgYSBsb2NhbCBwZXItYmFja2VuZCBsaXN0 ZW5DaGFubmVscyBsaXN0CiAgZm9yIGZhc3QgbG9jay1mcmVlIGxvb2t1cHMgZHVyaW5nIG5v dGlmaWNhdGlvbiBwcm9jZXNzaW5nLiBUaGlzIGF2b2lkcwogIGNvbnRlbnRpb24gb24gdGhl IHNoYXJlZCBoYXNoIGR1cmluZyB0aGUgaGlnaC1mcmVxdWVuY3kgSXNMaXN0ZW5pbmdPbgog IGNoZWNrcyB0aGF0IG9jY3VyIGZvciBldmVyeSBub3RpZmljYXRpb24gcmVhZCBmcm9tIHRo ZSBxdWV1ZS4KKiBCYWNrZW5kcyByZW1haW4gcmVnaXN0ZXJlZCBpbiB0aGUgZ2xvYmFsIGxp c3RlbmVyIGxpc3QgYXMgbG9uZyBhcwogIGxpc3RlbkNoYW5uZWxzIGlzIG5vbi1lbXB0eS4K KiBBdEFib3J0X05vdGlmeSBjbGVhbmx5IGhhbmRsZXMgYm90aCBsb2NhbCBhbmQgc2hhcmVk IGhhc2ggY2xlYW51cCwKICByZW1vdmluZyBpbmFjdGl2ZSAodW5jb21taXR0ZWQpIGVudHJp ZXMgd2hpbGUgcHJlc2VydmluZyBhY3RpdmUKICAoY29tbWl0dGVkKSBlbnRyaWVzIGZyb20g cHJldmlvdXMgdHJhbnNhY3Rpb25zLgoqIEFkZHMgTFdMb2NrIHRyYW5jaGUgTk9USUZZX0NI QU5ORUxfSEFTSCBhbmQgd2FpdCBldmVudAogIE5vdGlmeUNoYW5uZWxIYXNoIGZvciB2aXNp YmlsaXR5LgoqIE5vIHVzZXItdmlzaWJsZSBiZWhhdmlvcmFsIGNoYW5nZXM7IHRoaXMgaXMg YW4gaW50ZXJuYWwgb3B0aW1pemF0aW9uCiAgb25seS4KLS0tCiBzcmMvYmFja2VuZC9jb21t YW5kcy9hc3luYy5jICAgICAgICAgICAgICAgICAgfCAxMDQyICsrKysrKysrKysrKystLS0t CiAuLi4vdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQgICAgICAgfCAgICAx ICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oICAgICAgICAgICAgICB8ICAg IDEgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwg ICAgMyArCiA0IGZpbGVzIGNoYW5nZWQsIDg0NSBpbnNlcnRpb25zKCspLCAyMDIgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKaW5kZXggZTFjZjY1OTQ4NWEuLmU3NmIyYzU1 Y2EyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKQEAgLTI0LDggKzI0LDEwIEBACiAgKgkgIEFs bCBub3RpZmljYXRpb24gbWVzc2FnZXMgYXJlIHBsYWNlZCBpbiB0aGUgcXVldWUgYW5kIGxh dGVyIHJlYWQgb3V0CiAgKgkgIGJ5IGxpc3RlbmluZyBiYWNrZW5kcy4KICAqCi0gKgkgIFRo ZXJlIGlzIG5vIGNlbnRyYWwga25vd2xlZGdlIG9mIHdoaWNoIGJhY2tlbmQgbGlzdGVucyBv biB3aGljaCBjaGFubmVsOwotICoJICBldmVyeSBiYWNrZW5kIGhhcyBpdHMgb3duIGxpc3Qg b2YgaW50ZXJlc3RpbmcgY2hhbm5lbHMuCisgKgkgIFdlIGFsc28gbWFpbnRhaW4gYSBkeW5h bWljIHNoYXJlZCBoYXNoIHRhYmxlIChkc2hhc2gpIHRoYXQgbWFwcyBjaGFubmVsCisgKgkg IG5hbWVzIHRvIHRoZSBzZXQgb2YgYmFja2VuZHMgbGlzdGVuaW5nIG9uIGVhY2ggY2hhbm5l bC4gVGhpcyB0YWJsZSBpcworICoJICBjcmVhdGVkIGxhemlseSBvbiB0aGUgZmlyc3QgTElT VEVOIGNvbW1hbmQgYW5kIGdyb3dzIGR5bmFtaWNhbGx5IGFzCisgKgkgIG5lZWRlZC4KICAq CiAgKgkgIEFsdGhvdWdoIHRoZXJlIGlzIG9ubHkgb25lIHF1ZXVlLCBub3RpZmljYXRpb25z IGFyZSB0cmVhdGVkIGFzIGJlaW5nCiAgKgkgIGRhdGFiYXNlLWxvY2FsOyB0aGlzIGlzIGRv bmUgYnkgaW5jbHVkaW5nIHRoZSBzZW5kZXIncyBkYXRhYmFzZSBPSUQKQEAgLTY4LDE2ICs3 MCwyNCBAQAogICoJICBDb21taXRUcmFuc2FjdGlvbigpIHdoaWNoIHdpbGwgdGhlbiBkbyB0 aGUgYWN0dWFsIHRyYW5zYWN0aW9uIGNvbW1pdC4KICAqCiAgKgkgIEFmdGVyIGNvbW1pdCB3 ZSBhcmUgY2FsbGVkIGFub3RoZXIgdGltZSAoQXRDb21taXRfTm90aWZ5KCkpLiBIZXJlIHdl Ci0gKgkgIG1ha2UgYW55IGFjdHVhbCB1cGRhdGVzIHRvIHRoZSBlZmZlY3RpdmUgbGlzdGVu IHN0YXRlIChsaXN0ZW5DaGFubmVscykuCi0gKgkgIFRoZW4gd2Ugc2lnbmFsIGFueSBiYWNr ZW5kcyB0aGF0IG1heSBiZSBpbnRlcmVzdGVkIGluIG91ciBtZXNzYWdlcwotICoJICAoaW5j bHVkaW5nIG91ciBvd24gYmFja2VuZCwgaWYgbGlzdGVuaW5nKS4gIFRoaXMgaXMgZG9uZSBi eQotICoJICBTaWduYWxCYWNrZW5kcygpLCB3aGljaCBzY2FucyB0aGUgbGlzdCBvZiBsaXN0 ZW5pbmcgYmFja2VuZHMgYW5kIHNlbmRzIGEKLSAqCSAgUFJPQ1NJR19OT1RJRllfSU5URVJS VVBUIHNpZ25hbCB0byBldmVyeSBsaXN0ZW5pbmcgYmFja2VuZCAod2UgZG9uJ3QKLSAqCSAg a25vdyB3aGljaCBiYWNrZW5kIGlzIGxpc3RlbmluZyBvbiB3aGljaCBjaGFubmVsIHNvIHdl IG11c3Qgc2lnbmFsIHRoZW0KLSAqCSAgYWxsKS4gIFdlIGNhbiBleGNsdWRlIGJhY2tlbmRz IHRoYXQgYXJlIGFscmVhZHkgdXAgdG8gZGF0ZSwgdGhvdWdoLCBhbmQKLSAqCSAgd2UgY2Fu IGFsc28gZXhjbHVkZSBiYWNrZW5kcyB0aGF0IGFyZSBpbiBvdGhlciBkYXRhYmFzZXMgKHVu bGVzcyB0aGV5Ci0gKgkgIGFyZSB3YXkgYmVoaW5kIGFuZCBzaG91bGQgYmUga2lja2VkIHRv IG1ha2UgdGhlbSBhZHZhbmNlIHRoZWlyCi0gKgkgIHBvaW50ZXJzKS4KKyAqCSAgbWFrZSBh bnkgYWN0dWFsIHVwZGF0ZXMgdG8gdGhlIGxvY2FsIGxpc3RlbiBzdGF0ZSAobGlzdGVuQ2hh bm5lbHNIYXNoKSBhbmQKKyAqCSAgc2hhcmVkIGNoYW5uZWwgaGFzaCB0YWJsZSAoY2hhbm5l bEhhc2gpLiAgVGhlbiB3ZSBzaWduYWwgYW55IGJhY2tlbmRzCisgKgkgIHRoYXQgbWF5IGJl IGludGVyZXN0ZWQgaW4gb3VyIG1lc3NhZ2VzIChpbmNsdWRpbmcgb3VyIG93biBiYWNrZW5k LAorICoJICBpZiBsaXN0ZW5pbmcpLiAgVGhpcyBpcyBkb25lIGJ5IFNpZ25hbEJhY2tlbmRz KCksIHdoaWNoIGNvbnN1bHRzIHRoZQorICoJICBzaGFyZWQgY2hhbm5lbCBoYXNoIHRhYmxl IHRvIGlkZW50aWZ5IGxpc3RlbmVycyBmb3IgdGhlIGNoYW5uZWxzIHRoYXQKKyAqCSAgaGF2 ZSBwZW5kaW5nIG5vdGlmaWNhdGlvbnMgaW4gdGhlIGN1cnJlbnQgZGF0YWJhc2UuICBFYWNo IHNlbGVjdGVkCisgKgkgIGJhY2tlbmQgaXMgbWFya2VkIGFzIGhhdmluZyBhIHdha2V1cCBw ZW5kaW5nIHRvIGF2b2lkIGR1cGxpY2F0ZSBzaWduYWxzLAorICoJICBhbmQgYSBQUk9DU0lH X05PVElGWV9JTlRFUlJVUFQgc2lnbmFsIGlzIHNlbnQgdG8gaXQuCisgKgorICoJICBXaGVu IHdyaXRpbmcgbm90aWZpY2F0aW9ucywgUHJlQ29tbWl0X05vdGlmeSgpIHJlY29yZHMgdGhl IHF1ZXVlIGhlYWQKKyAqCSAgcG9zaXRpb24gYm90aCBiZWZvcmUgYW5kIGFmdGVyIHRoZSB3 cml0ZS4gIEJlY2F1c2UgYWxsIHdyaXRlcnMgc2VyaWFsaXplCisgKgkgIG9uIGEgY2x1c3Rl ci13aWRlIGhlYXZ5d2VpZ2h0IGxvY2ssIG5vIGJhY2tlbmQgY2FuIGluc2VydCBlbnRyaWVz IGJldHdlZW4KKyAqCSAgdGhlc2UgdHdvIHBvaW50cy4gIFNpZ25hbEJhY2tlbmRzKCkgdXNl cyB0aGlzIGZhY3QgdG8gZGlyZWN0bHkgYWR2YW5jZSBhbnkKKyAqCSAgYmFja2VuZCB0aGF0 IGlzIHN0aWxsIHBvc2l0aW9uZWQgYXQgdGhlIG9sZCBoZWFkLCBvciB3aXRoaW4gdGhlIHJh bmdlCisgKgkgIHdyaXR0ZW4sIGF2b2lkaW5nIHVubmVjZXNzYXJ5IHdha2V1cHMgZm9yIGlk bGUgbGlzdGVuZXJzIHRoYXQgaGF2ZQorICoJICBub3RoaW5nIHRvIHJlYWQuICBCYWNrZW5k cyB0aGF0IGNhbm5vdCBiZSBkaXJlY3QgYWR2YW5jZWQgYXJlIHNpZ25hbGVkCisgKgkgIGlm IHRoZXkgYXJlIHN0dWNrIGJlaGluZCB0aGUgb2xkIHF1ZXVlIGhlYWQsIG9yIGFkdmFuY2lu ZyB0byBhIHBvc2l0aW9uCisgKgkgIGJlZm9yZSB0aGUgbmV3IHF1ZXVlIGhlYWQsIHNpbmNl IG90aGVyd2lzZSBub3RpZmljYXRpb25zIGNvdWxkIGJlIGRlbGF5ZWQuCiAgKgogICoJICBG aW5hbGx5LCBhZnRlciB3ZSBhcmUgb3V0IG9mIHRoZSB0cmFuc2FjdGlvbiBhbHRvZ2V0aGVy IGFuZCBhYm91dCB0byBnbwogICoJICBpZGxlLCB3ZSBzY2FuIHRoZSBxdWV1ZSBmb3IgbWVz c2FnZXMgdGhhdCBuZWVkIHRvIGJlIHNlbnQgdG8gb3VyCkBAIC0xMzcsMTQgKzE0NywxNyBA QAogI2luY2x1ZGUgImNvbW1hbmRzL2FzeW5jLmgiCiAjaW5jbHVkZSAiY29tbW9uL2hhc2hm bi5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJsaWIvZHNoYXNoLmgiCiAj aW5jbHVkZSAibGlicHEvbGlicHEuaCIKICNpbmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvZHNtX3JlZ2lzdHJ5 LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3Iu aCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NzaWduYWwuaCIKICNpbmNsdWRlICJ0Y29wL3Rj b3Bwcm90LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGls cy9kc2EuaCIKICNpbmNsdWRlICJ1dGlscy9ndWNfaG9va3MuaCIKICNpbmNsdWRlICJ1dGls cy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3BzX3N0YXR1cy5oIgpAQCAtMTYyLDYg KzE3NSw0MyBAQAogICovCiAjZGVmaW5lIE5PVElGWV9QQVlMT0FEX01BWF9MRU5HVEgJKEJM Q0tTWiAtIE5BTUVEQVRBTEVOIC0gMTI4KQogCisvKgorICogQ2hhbm5lbCBoYXNoIHRhYmxl IGRlZmluaXRpb25zCisgKgorICogVGhpcyBoYXNoIHRhYmxlIG1hcHMgKGRhdGFiYXNlIE9J RCwgY2hhbm5lbCBuYW1lKSBrZXlzIHRvIGFycmF5cyBvZgorICogTGlzdGVuZXJFbnRyeSBz dHJ1Y3RzIHJlcHJlc2VudGluZyB0aGUgYmFja2VuZHMgbGlzdGVuaW5nIG9uIGVhY2ggY2hh bm5lbC4KKyAqLworCisjZGVmaW5lIElOSVRJQUxfTElTVEVORVJTX0FSUkFZX1NJWkUgNAor Cit0eXBlZGVmIHN0cnVjdCBDaGFubmVsSGFzaEtleQoreworCU9pZAkJCWRib2lkOworCWNo YXIJCWNoYW5uZWxbTkFNRURBVEFMRU5dOworfSBDaGFubmVsSGFzaEtleTsKKworLyoKKyAq IEluZGl2aWR1YWwgbGlzdGVuZXIgZW50cnkgaW4gdGhlIGNoYW5uZWwncyBsaXN0ZW5lcnMg YXJyYXkuCisgKgorICogV2Ugc3RvcmUgYm90aCB0aGUgUHJvY051bWJlciBhbmQgYW4gYWN0 aXZlIGZsYWcuICBEdXJpbmcgUHJlQ29tbWl0LAorICogd2UgaW5zZXJ0IGVudHJpZXMgd2l0 aCBhY3RpdmU9ZmFsc2UgdG8gcHJlLWFsbG9jYXRlIHNwYWNlIGFuZCBhdm9pZAorICogT09N IGZhaWx1cmVzIGFmdGVyIHRyYW5zYWN0aW9uIGNvbW1pdC4gIFRoZW4gaW4gQXRDb21taXQs IHdlIGp1c3Qgc2V0CisgKiB0aGUgYWN0aXZlIGZsYWcgdG8gdHJ1ZSwgd2hpY2ggaGFzIGFj Y2VwdGFibHkgbG93IHJpc2sgb2YgZmFpbHVyZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgTGlz dGVuZXJFbnRyeQoreworCVByb2NOdW1iZXIJcHJvY25vOwkJCS8qIGJhY2tlbmQncyBQcm9j TnVtYmVyICovCisJYm9vbAkJYWN0aXZlOwkJCS8qIHRydWUgaWYgYWN0dWFsbHkgbGlzdGVu aW5nICovCit9IExpc3RlbmVyRW50cnk7CisKK3R5cGVkZWYgc3RydWN0IENoYW5uZWxFbnRy eQoreworCUNoYW5uZWxIYXNoS2V5IGtleTsKKwlkc2FfcG9pbnRlciBsaXN0ZW5lcnNBcnJh eTsgLyogRFNBIHBvaW50ZXIgdG8gTGlzdGVuZXJFbnRyeSBhcnJheSAqLworCWludAkJCW51 bUxpc3RlbmVyczsJLyogTnVtYmVyIG9mIGxpc3RlbmVycyBjdXJyZW50bHkgc3RvcmVkICov CisJaW50CQkJYWxsb2NhdGVkTGlzdGVuZXJzOyAvKiBBbGxvY2F0ZWQgc2l6ZSBvZiBhcnJh eSAqLworfSBDaGFubmVsRW50cnk7CisKIC8qCiAgKiBTdHJ1Y3QgcmVwcmVzZW50aW5nIGFu IGVudHJ5IGluIHRoZSBnbG9iYWwgbm90aWZ5IHF1ZXVlCiAgKgpAQCAtMjI0LDExICsyNzQs MTQgQEAgdHlwZWRlZiBzdHJ1Y3QgUXVldWVQb3NpdGlvbgogCSAoeCkucGFnZSAhPSAoeSku cGFnZSA/ICh4KSA6IFwKIAkgKHgpLm9mZnNldCA+ICh5KS5vZmZzZXQgPyAoeCkgOiAoeSkp CiAKKy8qIHJldHVybnMgdHJ1ZSBpZiB4IGNvbWVzIGJlZm9yZSB5IGluIHF1ZXVlIG9yZGVy ICovCisjZGVmaW5lIFFVRVVFX1BPU19QUkVDRURFUyh4LHkpIFwKKwkoYXN5bmNRdWV1ZVBh Z2VQcmVjZWRlcygoeCkucGFnZSwgKHkpLnBhZ2UpIHx8IFwKKwkgKCh4KS5wYWdlID09ICh5 KS5wYWdlICYmICh4KS5vZmZzZXQgPCAoeSkub2Zmc2V0KSkKKwogLyoKICAqIFBhcmFtZXRl ciBkZXRlcm1pbmluZyBob3cgb2Z0ZW4gd2UgdHJ5IHRvIGFkdmFuY2UgdGhlIHRhaWwgcG9p bnRlcjoKLSAqIHdlIGRvIHRoYXQgYWZ0ZXIgZXZlcnkgUVVFVUVfQ0xFQU5VUF9ERUxBWSBw YWdlcyBvZiBOT1RJRlkgZGF0YS4gIFRoaXMgaXMKLSAqIGFsc28gdGhlIGRpc3RhbmNlIGJ5 IHdoaWNoIGEgYmFja2VuZCBpbiBhbm90aGVyIGRhdGFiYXNlIG5lZWRzIHRvIGJlCi0gKiBi ZWhpbmQgYmVmb3JlIHdlJ2xsIGRlY2lkZSB3ZSBuZWVkIHRvIHdha2UgaXQgdXAgdG8gYWR2 YW5jZSBpdHMgcG9pbnRlci4KKyAqIHdlIGRvIHRoYXQgYWZ0ZXIgZXZlcnkgUVVFVUVfQ0xF QU5VUF9ERUxBWSBwYWdlcyBvZiBOT1RJRlkgZGF0YS4KICAqCiAgKiBSZXNpc3QgdGhlIHRl bXB0YXRpb24gdG8gbWFrZSB0aGlzIHJlYWxseSBsYXJnZS4gIFdoaWxlIHRoYXQgd291bGQg c2F2ZQogICogd29yayBpbiBzb21lIHBsYWNlcywgaXQgd291bGQgYWRkIGNvc3QgaW4gb3Ro ZXJzLiAgSW4gcGFydGljdWxhciwgdGhpcwpAQCAtMjQ2LDYgKzI5OSw5IEBAIHR5cGVkZWYg c3RydWN0IFF1ZXVlQmFja2VuZFN0YXR1cwogCU9pZAkJCWRib2lkOwkJCS8qIGJhY2tlbmQn cyBkYXRhYmFzZSBPSUQsIG9yIEludmFsaWRPaWQgKi8KIAlQcm9jTnVtYmVyCW5leHRMaXN0 ZW5lcjsJLyogaWQgb2YgbmV4dCBsaXN0ZW5lciwgb3IgSU5WQUxJRF9QUk9DX05VTUJFUiAq LwogCVF1ZXVlUG9zaXRpb24gcG9zOwkJCS8qIGJhY2tlbmQgaGFzIHJlYWQgcXVldWUgdXAg dG8gaGVyZSAqLworCWJvb2wJCXdha2V1cFBlbmRpbmc7CS8qIHNpZ25hbCBzZW50IGJ1dCBu b3QgeWV0IHByb2Nlc3NlZCAqLworCWJvb2wJCWlzQWR2YW5jaW5nOwkvKiBiYWNrZW5kIGlz IGFkdmFuY2luZyBpdHMgcG9zaXRpb24gKi8KKwlRdWV1ZVBvc2l0aW9uIGFkdmFuY2luZ1Bv czsgLyogdGFyZ2V0IHBvc2l0aW9uIGJhY2tlbmQgaXMgYWR2YW5jaW5nIHRvICovCiB9IFF1 ZXVlQmFja2VuZFN0YXR1czsKIAogLyoKQEAgLTI2MCw5ICszMTYsMTAgQEAgdHlwZWRlZiBz dHJ1Y3QgUXVldWVCYWNrZW5kU3RhdHVzCiAgKiAoc2luY2Ugbm8gb3RoZXIgYmFja2VuZCB3 aWxsIGluc3BlY3QgaXQpLgogICoKICAqIFdoZW4gaG9sZGluZyBOb3RpZnlRdWV1ZUxvY2sg aW4gRVhDTFVTSVZFIG1vZGUsIGJhY2tlbmRzIGNhbiBpbnNwZWN0IHRoZQotICogZW50cmll cyBvZiBvdGhlciBiYWNrZW5kcyBhbmQgYWxzbyBjaGFuZ2UgdGhlIGhlYWQgcG9pbnRlci4g V2hlbiBob2xkaW5nCi0gKiBib3RoIE5vdGlmeVF1ZXVlTG9jayBhbmQgTm90aWZ5UXVldWVU YWlsTG9jayBpbiBFWENMVVNJVkUgbW9kZSwgYmFja2VuZHMKLSAqIGNhbiBjaGFuZ2UgdGhl IHRhaWwgcG9pbnRlcnMuCisgKiBlbnRyaWVzIG9mIG90aGVyIGJhY2tlbmRzIGFuZCBhbHNv IGNoYW5nZSB0aGUgaGVhZCBwb2ludGVyLiBUaGV5IGNhbgorICogYWxzbyBhZHZhbmNlIG90 aGVyIGJhY2tlbmRzJyBxdWV1ZSBwb3NpdGlvbnMsIHVubGVzcyB0aGV5IGFyZSBub3QKKyAq IGluIHRoZSBwcm9jZXNzIG9mIGRvaW5nIHRoYXQgdGhlbXNlbHZlcy4gV2hlbiBob2xkaW5n IGJvdGggTm90aWZ5UXVldWVMb2NrIGFuZAorICogTm90aWZ5UXVldWVUYWlsTG9jayBpbiBF WENMVVNJVkUgbW9kZSwgYmFja2VuZHMgY2FuIGNoYW5nZSB0aGUgdGFpbCBwb2ludGVycy4K ICAqCiAgKiBTTFJVIGJ1ZmZlciBwb29sIGlzIGRpdmlkZWQgaW4gYmFua3MgYW5kIGJhbmsg d2lzZSBTTFJVIGxvY2sgaXMgdXNlZCBhcwogICogdGhlIGNvbnRyb2wgbG9jayBmb3IgdGhl IHBnX25vdGlmeSBTTFJVIGJ1ZmZlcnMuCkBAIC0yODgsMTEgKzM0NSwxNiBAQCB0eXBlZGVm IHN0cnVjdCBBc3luY1F1ZXVlQ29udHJvbAogCVByb2NOdW1iZXIJZmlyc3RMaXN0ZW5lcjsJ LyogaWQgb2YgZmlyc3QgbGlzdGVuZXIsIG9yCiAJCQkJCQkJCSAqIElOVkFMSURfUFJPQ19O VU1CRVIgKi8KIAlUaW1lc3RhbXBUeiBsYXN0UXVldWVGaWxsV2FybjsJLyogdGltZSBvZiBs YXN0IHF1ZXVlLWZ1bGwgbXNnICovCisJZHNhX2hhbmRsZQljaGFubmVsSGFzaERTQTsKKwlk c2hhc2hfdGFibGVfaGFuZGxlIGNoYW5uZWxIYXNoRFNIOwogCVF1ZXVlQmFja2VuZFN0YXR1 cyBiYWNrZW5kW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07CiB9IEFzeW5jUXVldWVDb250cm9s OwogCiBzdGF0aWMgQXN5bmNRdWV1ZUNvbnRyb2wgKmFzeW5jUXVldWVDb250cm9sOwogCitz dGF0aWMgZHNhX2FyZWEgKmNoYW5uZWxEU0EgPSBOVUxMOworc3RhdGljIGRzaGFzaF90YWJs ZSAqY2hhbm5lbEhhc2ggPSBOVUxMOworCiAjZGVmaW5lIFFVRVVFX0hFQUQJCQkJCShhc3lu Y1F1ZXVlQ29udHJvbC0+aGVhZCkKICNkZWZpbmUgUVVFVUVfVEFJTAkJCQkJKGFzeW5jUXVl dWVDb250cm9sLT50YWlsKQogI2RlZmluZSBRVUVVRV9TVE9QX1BBR0UJCQkJKGFzeW5jUXVl dWVDb250cm9sLT5zdG9wUGFnZSkKQEAgLTMwMSw2ICszNjMsOSBAQCBzdGF0aWMgQXN5bmNR dWV1ZUNvbnRyb2wgKmFzeW5jUXVldWVDb250cm9sOwogI2RlZmluZSBRVUVVRV9CQUNLRU5E X0RCT0lEKGkpCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0uZGJvaWQpCiAjZGVm aW5lIFFVRVVFX05FWFRfTElTVEVORVIoaSkJCShhc3luY1F1ZXVlQ29udHJvbC0+YmFja2Vu ZFtpXS5uZXh0TGlzdGVuZXIpCiAjZGVmaW5lIFFVRVVFX0JBQ0tFTkRfUE9TKGkpCQkoYXN5 bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0ucG9zKQorI2RlZmluZSBRVUVVRV9CQUNLRU5E X1dBS0VVUF9QRU5ESU5HKGkpCShhc3luY1F1ZXVlQ29udHJvbC0+YmFja2VuZFtpXS53YWtl dXBQZW5kaW5nKQorI2RlZmluZSBRVUVVRV9CQUNLRU5EX0lTX0FEVkFOQ0lORyhpKQkoYXN5 bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0uaXNBZHZhbmNpbmcpCisjZGVmaW5lIFFVRVVF X0JBQ0tFTkRfQURWQU5DSU5HX1BPUyhpKQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRb aV0uYWR2YW5jaW5nUG9zKQogCiAvKgogICogVGhlIFNMUlUgYnVmZmVyIGFyZWEgdGhyb3Vn aCB3aGljaCB3ZSBhY2Nlc3MgdGhlIG5vdGlmaWNhdGlvbiBxdWV1ZQpAQCAtMzEzLDE2ICsz NzgsMTYgQEAgc3RhdGljIFNscnVDdGxEYXRhIE5vdGlmeUN0bERhdGE7CiAjZGVmaW5lIFFV RVVFX0ZVTExfV0FSTl9JTlRFUlZBTAk1MDAwCS8qIHdhcm4gYXQgbW9zdCBvbmNlIGV2ZXJ5 IDVzICovCiAKIC8qCi0gKiBsaXN0ZW5DaGFubmVscyBpZGVudGlmaWVzIHRoZSBjaGFubmVs cyB3ZSBhcmUgYWN0dWFsbHkgbGlzdGVuaW5nIHRvCi0gKiAoaWUsIGhhdmUgY29tbWl0dGVk IGEgTElTVEVOIG9uKS4gIEl0IGlzIGEgc2ltcGxlIGxpc3Qgb2YgY2hhbm5lbCBuYW1lcywK KyAqIGxpc3RlbkNoYW5uZWxzSGFzaCBpZGVudGlmaWVzIHRoZSBjaGFubmVscyB3ZSBhcmUg YWN0dWFsbHkgbGlzdGVuaW5nIHRvCisgKiAoaWUsIGhhdmUgY29tbWl0dGVkIGEgTElTVEVO IG9uKS4gIEl0IGlzIGEgaGFzaCB0YWJsZSBvZiBjaGFubmVsIG5hbWVzLAogICogYWxsb2Nh dGVkIGluIFRvcE1lbW9yeUNvbnRleHQuCiAgKi8KLXN0YXRpYyBMaXN0ICpsaXN0ZW5DaGFu bmVscyA9IE5JTDsJLyogbGlzdCBvZiBDIHN0cmluZ3MgKi8KK3N0YXRpYyBIVEFCICpsaXN0 ZW5DaGFubmVsc0hhc2ggPSBOVUxMOwogCiAvKgogICogU3RhdGUgZm9yIHBlbmRpbmcgTElT VEVOL1VOTElTVEVOIGFjdGlvbnMgY29uc2lzdHMgb2YgYW4gb3JkZXJlZCBsaXN0IG9mCiAg KiBhbGwgYWN0aW9ucyByZXF1ZXN0ZWQgaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uICBB cyBleHBsYWluZWQgYWJvdmUsCi0gKiB3ZSBkb24ndCBhY3R1YWxseSBjaGFuZ2UgbGlzdGVu Q2hhbm5lbHMgdW50aWwgd2UgcmVhY2ggdHJhbnNhY3Rpb24gY29tbWl0LgorICogd2UgZG9u J3QgYWN0dWFsbHkgY2hhbmdlIGxpc3RlbkNoYW5uZWxzSGFzaCB1bnRpbCB3ZSByZWFjaCB0 cmFuc2FjdGlvbiBjb21taXQuCiAgKgogICogVGhlIGxpc3QgaXMga2VwdCBpbiBDdXJUcmFu c2FjdGlvbkNvbnRleHQuICBJbiBzdWJ0cmFuc2FjdGlvbnMsIGVhY2gKICAqIHN1YnRyYW5z YWN0aW9uIGhhcyBpdHMgb3duIGxpc3QgaW4gaXRzIG93biBDdXJUcmFuc2FjdGlvbkNvbnRl eHQsIGJ1dApAQCAtMzkxLDYgKzQ1Niw3IEBAIHR5cGVkZWYgc3RydWN0IE5vdGlmaWNhdGlv bkxpc3QKIAlpbnQJCQluZXN0aW5nTGV2ZWw7CS8qIGN1cnJlbnQgdHJhbnNhY3Rpb24gbmVz dGluZyBkZXB0aCAqLwogCUxpc3QJICAgKmV2ZW50czsJCQkvKiBsaXN0IG9mIE5vdGlmaWNh dGlvbiBzdHJ1Y3RzICovCiAJSFRBQgkgICAqaGFzaHRhYjsJCS8qIGhhc2ggb2YgTm90aWZp Y2F0aW9uSGFzaCBzdHJ1Y3RzLCBvciBOVUxMICovCisJSFRBQgkgICAqY2hhbm5lbEhhc2h0 YWI7IC8qIGhhc2ggb2YgdW5pcXVlIGNoYW5uZWwgbmFtZXMsIG9yIE5VTEwgKi8KIAlzdHJ1 Y3QgTm90aWZpY2F0aW9uTGlzdCAqdXBwZXI7IC8qIGRldGFpbHMgZm9yIHVwcGVyIHRyYW5z YWN0aW9uIGxldmVscyAqLwogfSBOb3RpZmljYXRpb25MaXN0OwogCkBAIC00MDEsNiArNDY3 LDExIEBAIHN0cnVjdCBOb3RpZmljYXRpb25IYXNoCiAJTm90aWZpY2F0aW9uICpldmVudDsJ CS8qID0+IHRoZSBhY3R1YWwgTm90aWZpY2F0aW9uIHN0cnVjdCAqLwogfTsKIAorc3RydWN0 IENoYW5uZWxIYXNoCit7CisJY2hhcgkJY2hhbm5lbFtOQU1FREFUQUxFTl07Cit9OworCiBz dGF0aWMgTm90aWZpY2F0aW9uTGlzdCAqcGVuZGluZ05vdGlmaWVzID0gTlVMTDsKIAogLyoK QEAgLTQxOCw2ICs0ODksMjAgQEAgc3RhdGljIGJvb2wgdW5saXN0ZW5FeGl0UmVnaXN0ZXJl ZCA9IGZhbHNlOwogLyogVHJ1ZSBpZiB3ZSdyZSBjdXJyZW50bHkgcmVnaXN0ZXJlZCBhcyBh IGxpc3RlbmVyIGluIGFzeW5jUXVldWVDb250cm9sICovCiBzdGF0aWMgYm9vbCBhbVJlZ2lz dGVyZWRMaXN0ZW5lciA9IGZhbHNlOwogCisvKgorICogUXVldWUgaGVhZCBwb3NpdGlvbnMg Zm9yIGRpcmVjdCBhZHZhbmNlbWVudC4KKyAqIFRoZXNlIGFyZSBjYXB0dXJlZCBkdXJpbmcg UHJlQ29tbWl0X05vdGlmeSB3aGlsZSBob2xkaW5nIHRoZSBoZWF2eXdlaWdodAorICogbG9j ayBvbiBkYXRhYmFzZSAwLCBlbnN1cmluZyBubyBvdGhlciBiYWNrZW5kIGNhbiBpbnNlcnQg bm90aWZpY2F0aW9ucworICogYmV0d2VlbiB0aGVtLiAgU2lnbmFsQmFja2VuZHMgdXNlcyB0 aGVzZSB0byBhZHZhbmNlIGlkbGUgYmFja2VuZHMuCisgKi8KK3N0YXRpYyBRdWV1ZVBvc2l0 aW9uIHF1ZXVlSGVhZEJlZm9yZVdyaXRlOworc3RhdGljIFF1ZXVlUG9zaXRpb24gcXVldWVI ZWFkQWZ0ZXJXcml0ZTsKKworLyoKKyAqIExpc3Qgb2YgY2hhbm5lbHMgd2l0aCBwZW5kaW5n IG5vdGlmaWNhdGlvbnMgaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCisgKi8KK3N0YXRp YyBMaXN0ICpwZW5kaW5nTm90aWZ5Q2hhbm5lbHMgPSBOSUw7CisKIC8qIGhhdmUgd2UgYWR2 YW5jZWQgdG8gYSBwYWdlIHRoYXQncyBhIG11bHRpcGxlIG9mIFFVRVVFX0NMRUFOVVBfREVM QVk/ICovCiBzdGF0aWMgYm9vbCB0cnlBZHZhbmNlVGFpbCA9IGZhbHNlOwogCkBAIC00Mjgs MTEgKzUxMywxMCBAQCBib29sCQlUcmFjZV9ub3RpZnkgPSBmYWxzZTsKIGludAkJCW1heF9u b3RpZnlfcXVldWVfcGFnZXMgPSAxMDQ4NTc2OwogCiAvKiBsb2NhbCBmdW5jdGlvbiBwcm90 b3R5cGVzICovCi1zdGF0aWMgaW5saW5lIGludDY0IGFzeW5jUXVldWVQYWdlRGlmZihpbnQ2 NCBwLCBpbnQ2NCBxKTsKIHN0YXRpYyBpbmxpbmUgYm9vbCBhc3luY1F1ZXVlUGFnZVByZWNl ZGVzKGludDY0IHAsIGludDY0IHEpOwogc3RhdGljIHZvaWQgcXVldWVfbGlzdGVuKExpc3Rl bkFjdGlvbktpbmQgYWN0aW9uLCBjb25zdCBjaGFyICpjaGFubmVsKTsKIHN0YXRpYyB2b2lk IEFzeW5jX1VubGlzdGVuT25FeGl0KGludCBjb2RlLCBEYXR1bSBhcmcpOwotc3RhdGljIHZv aWQgRXhlY19MaXN0ZW5QcmVDb21taXQodm9pZCk7CitzdGF0aWMgdm9pZCBFeGVjX0xpc3Rl blByZUNvbW1pdChjb25zdCBjaGFyICpjaGFubmVsKTsKIHN0YXRpYyB2b2lkIEV4ZWNfTGlz dGVuQ29tbWl0KGNvbnN0IGNoYXIgKmNoYW5uZWwpOwogc3RhdGljIHZvaWQgRXhlY19Vbmxp c3RlbkNvbW1pdChjb25zdCBjaGFyICpjaGFubmVsKTsKIHN0YXRpYyB2b2lkIEV4ZWNfVW5s aXN0ZW5BbGxDb21taXQodm9pZCk7CkBAIC00NTYsMTYgKzU0MCw5IEBAIHN0YXRpYyB2b2lk IEFkZEV2ZW50VG9QZW5kaW5nTm90aWZpZXMoTm90aWZpY2F0aW9uICpuKTsKIHN0YXRpYyB1 aW50MzIgbm90aWZpY2F0aW9uX2hhc2goY29uc3Qgdm9pZCAqa2V5LCBTaXplIGtleXNpemUp Owogc3RhdGljIGludAlub3RpZmljYXRpb25fbWF0Y2goY29uc3Qgdm9pZCAqa2V5MSwgY29u c3Qgdm9pZCAqa2V5MiwgU2l6ZSBrZXlzaXplKTsKIHN0YXRpYyB2b2lkIENsZWFyUGVuZGlu Z0FjdGlvbnNBbmROb3RpZmllcyh2b2lkKTsKLQotLyoKLSAqIENvbXB1dGUgdGhlIGRpZmZl cmVuY2UgYmV0d2VlbiB0d28gcXVldWUgcGFnZSBudW1iZXJzLgotICogUHJldmlvdXNseSB0 aGlzIGZ1bmN0aW9uIGFjY291bnRlZCBmb3IgYSB3cmFwYXJvdW5kLgotICovCi1zdGF0aWMg aW5saW5lIGludDY0Ci1hc3luY1F1ZXVlUGFnZURpZmYoaW50NjQgcCwgaW50NjQgcSkKLXsK LQlyZXR1cm4gcCAtIHE7Ci19CitzdGF0aWMgaW5saW5lIHZvaWQgQ2hhbm5lbEhhc2hQcmVw YXJlS2V5KENoYW5uZWxIYXNoS2V5ICprZXksIE9pZCBkYm9pZCwgY29uc3QgY2hhciAqY2hh bm5lbCk7CitzdGF0aWMgZHNoYXNoX2hhc2ggY2hhbm5lbEhhc2hGdW5jKGNvbnN0IHZvaWQg KmtleSwgc2l6ZV90IHNpemUsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBpbml0Q2hhbm5l bEhhc2godm9pZCk7CiAKIC8qCiAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgcCBwcmVjZWRlcyBx LgpAQCAtNDc3LDYgKzU1NCwxMDUgQEAgYXN5bmNRdWV1ZVBhZ2VQcmVjZWRlcyhpbnQ2NCBw LCBpbnQ2NCBxKQogCXJldHVybiBwIDwgcTsKIH0KIAorLyoKKyAqIGNoYW5uZWxIYXNoRnVu YworICoJCUhhc2ggZnVuY3Rpb24gZm9yIGNoYW5uZWwga2V5cy4KKyAqLworc3RhdGljIGRz aGFzaF9oYXNoCitjaGFubmVsSGFzaEZ1bmMoY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qgc2l6 ZSwgdm9pZCAqYXJnKQoreworCWNvbnN0IENoYW5uZWxIYXNoS2V5ICprID0gKGNvbnN0IENo YW5uZWxIYXNoS2V5ICopIGtleTsKKwlkc2hhc2hfaGFzaCBoOworCisJaCA9IERhdHVtR2V0 VUludDMyKGhhc2hfdWludDMyKGstPmRib2lkKSk7CisJaCBePSBEYXR1bUdldFVJbnQzMiho YXNoX2FueSgoY29uc3QgdW5zaWduZWQgY2hhciAqKSBrLT5jaGFubmVsLAorCQkJCQkJCQkg c3RybmxlbihrLT5jaGFubmVsLCBOQU1FREFUQUxFTikpKTsKKworCXJldHVybiBoOworfQor CisvKiBwYXJhbWV0ZXJzIGZvciB0aGUgY2hhbm5lbCBoYXNoIHRhYmxlICovCitzdGF0aWMg Y29uc3QgZHNoYXNoX3BhcmFtZXRlcnMgY2hhbm5lbERTSFBhcmFtcyA9IHsKKwlzaXplb2Yo Q2hhbm5lbEhhc2hLZXkpLAorCXNpemVvZihDaGFubmVsRW50cnkpLAorCWRzaGFzaF9tZW1j bXAsCisJY2hhbm5lbEhhc2hGdW5jLAorCWRzaGFzaF9tZW1jcHksCisJTFdUUkFOQ0hFX05P VElGWV9DSEFOTkVMX0hBU0gKK307CisKKy8qCisgKiBpbml0Q2hhbm5lbEhhc2gKKyAqCQlM YXp5IGluaXRpYWxpemF0aW9uIG9mIHRoZSBjaGFubmVsIGhhc2ggdGFibGUuCisgKi8KK3N0 YXRpYyB2b2lkCitpbml0Q2hhbm5lbEhhc2godm9pZCkKK3sKKwlNZW1vcnlDb250ZXh0IG9s ZGNvbnRleHQ7CisKKwkvKiBRdWljayBleGl0IGlmIHdlIGFscmVhZHkgZGlkIHRoaXMgKi8K KwlpZiAoYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxIYXNoRFNIICE9IERTSEFTSF9IQU5E TEVfSU5WQUxJRCAmJgorCQljaGFubmVsSGFzaCAhPSBOVUxMKQorCQlyZXR1cm47CisKKwkv KiBPdGhlcndpc2UsIHVzZSBhIGxvY2sgdG8gZW5zdXJlIG9ubHkgb25lIHByb2Nlc3MgY3Jl YXRlcyB0aGUgdGFibGUgKi8KKwlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdf RVhDTFVTSVZFKTsKKworCS8qIEJlIHN1cmUgYW55IGxvY2FsIG1lbW9yeSBhbGxvY2F0ZWQg YnkgRFNBIHJvdXRpbmVzIGlzIHBlcnNpc3RlbnQgKi8KKwlvbGRjb250ZXh0ID0gTWVtb3J5 Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOworCisJaWYgKGFzeW5jUXVldWVD b250cm9sLT5jaGFubmVsSGFzaERTSCA9PSBEU0hBU0hfSEFORExFX0lOVkFMSUQpCisJewor CQkvKiBJbml0aWFsaXplIGR5bmFtaWMgc2hhcmVkIGhhc2ggdGFibGUgZm9yIGNoYW5uZWwg aGFzaCAqLworCQljaGFubmVsRFNBID0gZHNhX2NyZWF0ZShMV1RSQU5DSEVfTk9USUZZX0NI QU5ORUxfSEFTSCk7CisJCWRzYV9waW4oY2hhbm5lbERTQSk7CisJCWRzYV9waW5fbWFwcGlu ZyhjaGFubmVsRFNBKTsKKwkJY2hhbm5lbEhhc2ggPSBkc2hhc2hfY3JlYXRlKGNoYW5uZWxE U0EsICZjaGFubmVsRFNIUGFyYW1zLCBOVUxMKTsKKworCQkvKiBTdG9yZSBoYW5kbGVzIGlu IHNoYXJlZCBtZW1vcnkgZm9yIG90aGVyIGJhY2tlbmRzIHRvIHVzZSAqLworCQlhc3luY1F1 ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0EgPSBkc2FfZ2V0X2hhbmRsZShjaGFubmVsRFNB KTsKKwkJYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxIYXNoRFNIID0KKwkJCWRzaGFzaF9n ZXRfaGFzaF90YWJsZV9oYW5kbGUoY2hhbm5lbEhhc2gpOworCX0KKwllbHNlIGlmICghY2hh bm5lbEhhc2gpCisJeworCQkvKiBBdHRhY2ggdG8gZXhpc3RpbmcgZHluYW1pYyBzaGFyZWQg aGFzaCB0YWJsZSAqLworCQljaGFubmVsRFNBID0gZHNhX2F0dGFjaChhc3luY1F1ZXVlQ29u dHJvbC0+Y2hhbm5lbEhhc2hEU0EpOworCQlkc2FfcGluX21hcHBpbmcoY2hhbm5lbERTQSk7 CisJCWNoYW5uZWxIYXNoID0gZHNoYXNoX2F0dGFjaChjaGFubmVsRFNBLCAmY2hhbm5lbERT SFBhcmFtcywKKwkJCQkJCQkJCWFzeW5jUXVldWVDb250cm9sLT5jaGFubmVsSGFzaERTSCwK KwkJCQkJCQkJCU5VTEwpOworCX0KKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250 ZXh0KTsKKwlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7Cit9CisKKy8qCisgKiBp bml0TGlzdGVuQ2hhbm5lbHNIYXNoCisgKgkJTGF6eSBpbml0aWFsaXphdGlvbiBvZiB0aGUg bG9jYWwgbGlzdGVuIGNoYW5uZWxzIGhhc2ggdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkCitp bml0TGlzdGVuQ2hhbm5lbHNIYXNoKHZvaWQpCit7CisJSEFTSENUTAkJaGFzaF9jdGw7CisK KwkvKiBRdWljayBleGl0IGlmIHdlIGFscmVhZHkgZGlkIHRoaXMgKi8KKwlpZiAobGlzdGVu Q2hhbm5lbHNIYXNoICE9IE5VTEwpCisJCXJldHVybjsKKworCS8qIEluaXRpYWxpemUgbG9j YWwgaGFzaCB0YWJsZSBmb3IgdGhpcyBiYWNrZW5kJ3MgbGlzdGVuZWQgY2hhbm5lbHMgKi8K KwltZW1zZXQoJmhhc2hfY3RsLCAwLCBzaXplb2YoaGFzaF9jdGwpKTsKKwloYXNoX2N0bC5r ZXlzaXplID0gTkFNRURBVEFMRU47CisJaGFzaF9jdGwuZW50cnlzaXplID0gc2l6ZW9mKHN0 cnVjdCBDaGFubmVsSGFzaCk7CisKKwlsaXN0ZW5DaGFubmVsc0hhc2ggPQorCQloYXNoX2Ny ZWF0ZSgiTGlzdGVuIENoYW5uZWxzIiwKKwkJCQkJNjQsCisJCQkJCSZoYXNoX2N0bCwKKwkJ CQkJSEFTSF9FTEVNIHwgSEFTSF9TVFJJTkdTKTsKK30KKwogLyoKICAqIFJlcG9ydCBzcGFj ZSBuZWVkZWQgZm9yIG91ciBzaGFyZWQgbWVtb3J5IGFyZWEKICAqLwpAQCAtNTIwLDEyICs2 OTYsMTcgQEAgQXN5bmNTaG1lbUluaXQodm9pZCkKIAkJUVVFVUVfU1RPUF9QQUdFID0gMDsK IAkJUVVFVUVfRklSU1RfTElTVEVORVIgPSBJTlZBTElEX1BST0NfTlVNQkVSOwogCQlhc3lu Y1F1ZXVlQ29udHJvbC0+bGFzdFF1ZXVlRmlsbFdhcm4gPSAwOworCQlhc3luY1F1ZXVlQ29u dHJvbC0+Y2hhbm5lbEhhc2hEU0EgPSBEU0FfSEFORExFX0lOVkFMSUQ7CisJCWFzeW5jUXVl dWVDb250cm9sLT5jaGFubmVsSGFzaERTSCA9IERTSEFTSF9IQU5ETEVfSU5WQUxJRDsKIAkJ Zm9yIChpbnQgaSA9IDA7IGkgPCBNYXhCYWNrZW5kczsgaSsrKQogCQl7CiAJCQlRVUVVRV9C QUNLRU5EX1BJRChpKSA9IEludmFsaWRQaWQ7CiAJCQlRVUVVRV9CQUNLRU5EX0RCT0lEKGkp ID0gSW52YWxpZE9pZDsKIAkJCVFVRVVFX05FWFRfTElTVEVORVIoaSkgPSBJTlZBTElEX1BS T0NfTlVNQkVSOwogCQkJU0VUX1FVRVVFX1BPUyhRVUVVRV9CQUNLRU5EX1BPUyhpKSwgMCwg MCk7CisJCQlTRVRfUVVFVUVfUE9TKFFVRVVFX0JBQ0tFTkRfQURWQU5DSU5HX1BPUyhpKSwg MCwgMCk7CisJCQlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpID0gZmFsc2U7CisJ CQlRVUVVRV9CQUNLRU5EX0lTX0FEVkFOQ0lORyhpKSA9IGZhbHNlOwogCQl9CiAJfQogCkBA IC02NTYsNiArODM3LDcgQEAgQXN5bmNfTm90aWZ5KGNvbnN0IGNoYXIgKmNoYW5uZWwsIGNv bnN0IGNoYXIgKnBheWxvYWQpCiAJCW5vdGlmaWVzLT5ldmVudHMgPSBsaXN0X21ha2UxKG4p OwogCQkvKiBXZSBjZXJ0YWlubHkgZG9uJ3QgbmVlZCBhIGhhc2h0YWJsZSB5ZXQgKi8KIAkJ bm90aWZpZXMtPmhhc2h0YWIgPSBOVUxMOworCQlub3RpZmllcy0+Y2hhbm5lbEhhc2h0YWIg PSBOVUxMOwogCQlub3RpZmllcy0+dXBwZXIgPSBwZW5kaW5nTm90aWZpZXM7CiAJCXBlbmRp bmdOb3RpZmllcyA9IG5vdGlmaWVzOwogCX0KQEAgLTY4Miw3ICs4NjQsNyBAQCBBc3luY19O b3RpZnkoY29uc3QgY2hhciAqY2hhbm5lbCwgY29uc3QgY2hhciAqcGF5bG9hZCkKICAqCQlD b21tb24gY29kZSBmb3IgbGlzdGVuLCB1bmxpc3RlbiwgdW5saXN0ZW4gYWxsIGNvbW1hbmRz LgogICoKICAqCQlBZGRzIHRoZSByZXF1ZXN0IHRvIHRoZSBsaXN0IG9mIHBlbmRpbmcgYWN0 aW9ucy4KLSAqCQlBY3R1YWwgdXBkYXRlIG9mIHRoZSBsaXN0ZW5DaGFubmVscyBsaXN0IGhh cHBlbnMgZHVyaW5nIHRyYW5zYWN0aW9uCisgKgkJQWN0dWFsIHVwZGF0ZSBvZiB0aGUgbGlz dGVuQ2hhbm5lbHNIYXNoIGhhcHBlbnMgZHVyaW5nIHRyYW5zYWN0aW9uCiAgKgkJY29tbWl0 LgogICovCiBzdGF0aWMgdm9pZApAQCAtNzgyLDMwICs5NjQsNDkgQEAgQXN5bmNfVW5saXN0 ZW5BbGwodm9pZCkKICAqIFNRTCBmdW5jdGlvbjogcmV0dXJuIGEgc2V0IG9mIHRoZSBjaGFu bmVsIG5hbWVzIHRoaXMgYmFja2VuZCBpcyBhY3RpdmVseQogICogbGlzdGVuaW5nIHRvLgog ICoKLSAqIE5vdGU6IHRoaXMgY29kaW5nIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IHRoZSBs aXN0ZW5DaGFubmVscyBsaXN0IGNhbm5vdAorICogTm90ZTogdGhpcyBjb2RpbmcgcmVsaWVz IG9uIHRoZSBmYWN0IHRoYXQgdGhlIGxpc3RlbkNoYW5uZWxzSGFzaCBjYW5ub3QKICAqIGNo YW5nZSB3aXRoaW4gYSB0cmFuc2FjdGlvbi4KICAqLwogRGF0dW0KIHBnX2xpc3RlbmluZ19j aGFubmVscyhQR19GVU5DVElPTl9BUkdTKQogewogCUZ1bmNDYWxsQ29udGV4dCAqZnVuY2N0 eDsKKwlIQVNIX1NFUV9TVEFUVVMgKnN0YXR1czsKIAogCS8qIHN0dWZmIGRvbmUgb25seSBv biB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgZnVuY3Rpb24gKi8KIAlpZiAoU1JGX0lTX0ZJUlNU Q0FMTCgpKQogCXsKKwkJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCiAJCS8qIGNyZWF0 ZSBhIGZ1bmN0aW9uIGNvbnRleHQgZm9yIGNyb3NzLWNhbGwgcGVyc2lzdGVuY2UgKi8KIAkJ ZnVuY2N0eCA9IFNSRl9GSVJTVENBTExfSU5JVCgpOworCisJCS8qIEluaXRpYWxpemUgaGFz aCB0YWJsZSBpdGVyYXRpb24gaWYgd2UgaGF2ZSBhbnkgY2hhbm5lbHMgKi8KKwkJaWYgKGxp c3RlbkNoYW5uZWxzSGFzaCAhPSBOVUxMKQorCQl7CisJCQlvbGRjb250ZXh0ID0gTWVtb3J5 Q29udGV4dFN3aXRjaFRvKGZ1bmNjdHgtPm11bHRpX2NhbGxfbWVtb3J5X2N0eCk7CisJCQlz dGF0dXMgPSAoSEFTSF9TRVFfU1RBVFVTICopIHBhbGxvYyhzaXplb2YoSEFTSF9TRVFfU1RB VFVTKSk7CisJCQloYXNoX3NlcV9pbml0KHN0YXR1cywgbGlzdGVuQ2hhbm5lbHNIYXNoKTsK KwkJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9IHN0YXR1czsKKwkJCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhvbGRjb250ZXh0KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWZ1bmNjdHgtPnVzZXJf ZmN0eCA9IE5VTEw7CisJCX0KIAl9CiAKIAkvKiBzdHVmZiBkb25lIG9uIGV2ZXJ5IGNhbGwg b2YgdGhlIGZ1bmN0aW9uICovCiAJZnVuY2N0eCA9IFNSRl9QRVJDQUxMX1NFVFVQKCk7CisJ c3RhdHVzID0gKEhBU0hfU0VRX1NUQVRVUyAqKSBmdW5jY3R4LT51c2VyX2ZjdHg7CiAKLQlp ZiAoZnVuY2N0eC0+Y2FsbF9jbnRyIDwgbGlzdF9sZW5ndGgobGlzdGVuQ2hhbm5lbHMpKQor CWlmIChzdGF0dXMgIT0gTlVMTCkKIAl7Ci0JCWNoYXIJICAgKmNoYW5uZWwgPSAoY2hhciAq KSBsaXN0X250aChsaXN0ZW5DaGFubmVscywKLQkJCQkJCQkJCQkJCWZ1bmNjdHgtPmNhbGxf Y250cik7CisJCXN0cnVjdCBDaGFubmVsSGFzaCAqZW50cnk7CiAKLQkJU1JGX1JFVFVSTl9O RVhUKGZ1bmNjdHgsIENTdHJpbmdHZXRUZXh0RGF0dW0oY2hhbm5lbCkpOworCQllbnRyeSA9 IChzdHJ1Y3QgQ2hhbm5lbEhhc2ggKikgaGFzaF9zZXFfc2VhcmNoKHN0YXR1cyk7CisJCWlm IChlbnRyeSAhPSBOVUxMKQorCQkJU1JGX1JFVFVSTl9ORVhUKGZ1bmNjdHgsIENTdHJpbmdH ZXRUZXh0RGF0dW0oZW50cnktPmNoYW5uZWwpKTsKIAl9CiAKIAlTUkZfUkVUVVJOX0RPTkUo ZnVuY2N0eCk7CkBAIC04NzcsNyArMTA3OCw3IEBAIFByZUNvbW1pdF9Ob3RpZnkodm9pZCkK IAkJCXN3aXRjaCAoYWN0cmVjLT5hY3Rpb24pCiAJCQl7CiAJCQkJY2FzZSBMSVNURU5fTElT VEVOOgotCQkJCQlFeGVjX0xpc3RlblByZUNvbW1pdCgpOworCQkJCQlFeGVjX0xpc3RlblBy ZUNvbW1pdChhY3RyZWMtPmNoYW5uZWwpOwogCQkJCQlicmVhazsKIAkJCQljYXNlIExJU1RF Tl9VTkxJU1RFTjoKIAkJCQkJLyogdGhlcmUgaXMgbm8gRXhlY19Vbmxpc3RlblByZUNvbW1p dCgpICovCkBAIC04OTMsNiArMTA5NCwzNiBAQCBQcmVDb21taXRfTm90aWZ5KHZvaWQpCiAJ aWYgKHBlbmRpbmdOb3RpZmllcykKIAl7CiAJCUxpc3RDZWxsICAgKm5leHROb3RpZnk7CisJ CWJvb2wJCWZpcnN0SXRlcmF0aW9uID0gdHJ1ZTsKKworCQkvKgorCQkgKiBCdWlsZCBsaXN0 IG9mIHVuaXF1ZSBjaGFubmVscyBmb3IgU2lnbmFsQmFja2VuZHMoKS4KKwkJICoKKwkJICog SWYgd2UgaGF2ZSBhIGNoYW5uZWxIYXNodGFiLCB1c2UgaXQgdG8gZWZmaWNpZW50bHkgZ2V0 IHRoZSB1bmlxdWUKKwkJICogY2hhbm5lbHMuICBPdGhlcndpc2UsIGZhbGwgYmFjayB0byB0 aGUgbGluZWFyIGFwcHJvYWNoLgorCQkgKi8KKwkJcGVuZGluZ05vdGlmeUNoYW5uZWxzID0g TklMOworCQlpZiAocGVuZGluZ05vdGlmaWVzLT5jaGFubmVsSGFzaHRhYiAhPSBOVUxMKQor CQl7CisJCQlIQVNIX1NFUV9TVEFUVVMgc3RhdHVzOworCQkJc3RydWN0IENoYW5uZWxIYXNo ICpjaGFubmVsRW50cnk7CisKKwkJCWhhc2hfc2VxX2luaXQoJnN0YXR1cywgcGVuZGluZ05v dGlmaWVzLT5jaGFubmVsSGFzaHRhYik7CisJCQl3aGlsZSAoKGNoYW5uZWxFbnRyeSA9IChz dHJ1Y3QgQ2hhbm5lbEhhc2ggKikgaGFzaF9zZXFfc2VhcmNoKCZzdGF0dXMpKSAhPSBOVUxM KQorCQkJCXBlbmRpbmdOb3RpZnlDaGFubmVscyA9IGxhcHBlbmQocGVuZGluZ05vdGlmeUNo YW5uZWxzLCBjaGFubmVsRW50cnktPmNoYW5uZWwpOworCQl9CisJCWVsc2UKKwkJeworCQkJ LyogTGluZWFyIGFwcHJvYWNoIGZvciBzbWFsbCBudW1iZXIgb2Ygbm90aWZpY2F0aW9ucyAq LworCQkJZm9yZWFjaF9wdHIoTm90aWZpY2F0aW9uLCBuLCBwZW5kaW5nTm90aWZpZXMtPmV2 ZW50cykKKwkJCXsKKwkJCQljaGFyCSAgICpjaGFubmVsID0gbi0+ZGF0YTsKKworCQkJCS8q IEFkZCBpZiBub3QgYWxyZWFkeSBpbiBsaXN0ICovCisJCQkJaWYgKCFsaXN0X21lbWJlcl9w dHIocGVuZGluZ05vdGlmeUNoYW5uZWxzLCBjaGFubmVsKSkKKwkJCQkJcGVuZGluZ05vdGlm eUNoYW5uZWxzID0gbGFwcGVuZChwZW5kaW5nTm90aWZ5Q2hhbm5lbHMsIGNoYW5uZWwpOwor CQkJfQorCQl9CiAKIAkJLyoKIAkJICogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhbiBYSUQg YXNzaWduZWQgdG8gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCkBAIC05MDIsNiArMTEzMywx MyBAQCBQcmVDb21taXRfTm90aWZ5KHZvaWQpCiAJCSAqLwogCQkodm9pZCkgR2V0Q3VycmVu dFRyYW5zYWN0aW9uSWQoKTsKIAorCQkvKgorCQkgKiBXZSB3aWxsIGJlIGNhbGxpbmcgU2ln bmFsQmFja2VuZHMoKSBhdCBBdENvbW1pdF9Ob3RpZnkgdGltZSwgc28KKwkJICogbWFrZSBz dXJlIGl0cyBhdXhpbGlhcnkgZGF0YSBzdHJ1Y3R1cmVzIGV4aXN0IG5vdywgd2hlcmUgYW4g RVJST1IKKwkJICogd2lsbCBzdGlsbCBhYm9ydCB0aGUgdHJhbnNhY3Rpb24gY2xlYW5seS4K KwkJICovCisJCWluaXRDaGFubmVsSGFzaCgpOworCiAJCS8qCiAJCSAqIFNlcmlhbGl6ZSB3 cml0ZXJzIGJ5IGFjcXVpcmluZyBhIHNwZWNpYWwgbG9jayB0aGF0IHdlIGhvbGQgdGlsbAog CQkgKiBhZnRlciBjb21taXQuICBUaGlzIGVuc3VyZXMgdGhhdCBxdWV1ZSBlbnRyaWVzIGFw cGVhciBpbiBjb21taXQKQEAgLTkyMSw2ICsxMTU5LDIyIEBAIFByZUNvbW1pdF9Ob3RpZnko dm9pZCkKIAkJTG9ja1NoYXJlZE9iamVjdChEYXRhYmFzZVJlbGF0aW9uSWQsIEludmFsaWRP aWQsIDAsCiAJCQkJCQkgQWNjZXNzRXhjbHVzaXZlTG9jayk7CiAKKwkJLyoKKwkJICogRm9y IHRoZSBkaXJlY3QgYWR2YW5jZW1lbnQgb3B0aW1pemF0aW9uIGluIFNpZ25hbEJhY2tlbmRz KCksIHdlCisJCSAqIG5lZWQgdG8gZW5zdXJlIHRoYXQgbm8gb3RoZXIgYmFja2VuZCBjYW4g aW5zZXJ0IHF1ZXVlIGVudHJpZXMKKwkJICogYmV0d2VlbiBxdWV1ZUhlYWRCZWZvcmVXcml0 ZSBhbmQgcXVldWVIZWFkQWZ0ZXJXcml0ZS4gIFRoZQorCQkgKiBoZWF2eXdlaWdodCBsb2Nr IGFib3ZlIHByb3ZpZGVzIHRoaXMgZ3VhcmFudGVlLCBzaW5jZSBpdCBzZXJpYWxpemVzCisJ CSAqIGFsbCB3cml0ZXJzLgorCQkgKgorCQkgKiBOb3RlOiBpZiB0aGUgaGVhdnl3ZWlnaHQg bG9jayB3ZXJlIGV2ZXIgcmVtb3ZlZCBmb3Igc2NhbGFiaWxpdHkKKwkJICogcmVhc29ucywg d2UgY291bGQgYWNoaWV2ZSB0aGUgc2FtZSBndWFyYW50ZWUgYnkgaG9sZGluZworCQkgKiBO b3RpZnlRdWV1ZUxvY2sgaW4gRVhDTFVTSVZFIG1vZGUgYWNyb3NzIGFsbCBvdXIgaW5zZXJ0 aW9ucywgcmF0aGVyCisJCSAqIHRoYW4gcmVsZWFzaW5nIGFuZCByZWFjcXVpcmluZyBpdCBm b3IgZWFjaCBwYWdlIGFzIHdlIGRvIGJlbG93LgorCQkgKi8KKworCQkvKiBJbml0aWFsaXpl IHF1ZXVlSGVhZEJlZm9yZVdyaXRlIHRvIGEgc2FmZSBkZWZhdWx0ICovCisJCVNFVF9RVUVV RV9QT1MocXVldWVIZWFkQmVmb3JlV3JpdGUsIDAsIDApOworCiAJCS8qIE5vdyBwdXNoIHRo ZSBub3RpZmljYXRpb25zIGludG8gdGhlIHF1ZXVlICovCiAJCW5leHROb3RpZnkgPSBsaXN0 X2hlYWQocGVuZGluZ05vdGlmaWVzLT5ldmVudHMpOwogCQl3aGlsZSAobmV4dE5vdGlmeSAh PSBOVUxMKQpAQCAtOTM4LDEyICsxMTkyLDIwIEBAIFByZUNvbW1pdF9Ob3RpZnkodm9pZCkK IAkJCSAqIHBvaW50IGluIHRpbWUgd2UgY2FuIHN0aWxsIHJvbGwgdGhlIHRyYW5zYWN0aW9u IGJhY2suCiAJCQkgKi8KIAkJCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVMb2NrLCBMV19F WENMVVNJVkUpOworCQkJaWYgKGZpcnN0SXRlcmF0aW9uKQorCQkJeworCQkJCXF1ZXVlSGVh ZEJlZm9yZVdyaXRlID0gUVVFVUVfSEVBRDsKKwkJCQlmaXJzdEl0ZXJhdGlvbiA9IGZhbHNl OworCQkJfQorCiAJCQlhc3luY1F1ZXVlRmlsbFdhcm5pbmcoKTsKIAkJCWlmIChhc3luY1F1 ZXVlSXNGdWxsKCkpCiAJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJCShlcnJjb2RlKEVSUkNP REVfUFJPR1JBTV9MSU1JVF9FWENFRURFRCksCiAJCQkJCQkgZXJybXNnKCJ0b28gbWFueSBu b3RpZmljYXRpb25zIGluIHRoZSBOT1RJRlkgcXVldWUiKSkpOwogCQkJbmV4dE5vdGlmeSA9 IGFzeW5jUXVldWVBZGRFbnRyaWVzKG5leHROb3RpZnkpOworCQkJcXVldWVIZWFkQWZ0ZXJX cml0ZSA9IFFVRVVFX0hFQUQ7CisKIAkJCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2Nr KTsKIAkJfQogCkBAIC05NTYsNyArMTIxOCw3IEBAIFByZUNvbW1pdF9Ob3RpZnkodm9pZCkK ICAqCiAgKgkJVGhpcyBpcyBjYWxsZWQgYXQgdHJhbnNhY3Rpb24gY29tbWl0LCBhZnRlciBj b21taXR0aW5nIHRvIGNsb2cuCiAgKgotICoJCVVwZGF0ZSBsaXN0ZW5DaGFubmVscyBhbmQg Y2xlYXIgdHJhbnNhY3Rpb24tbG9jYWwgc3RhdGUuCisgKgkJVXBkYXRlIGxpc3RlbkNoYW5u ZWxzSGFzaCBhbmQgY2xlYXIgdHJhbnNhY3Rpb24tbG9jYWwgc3RhdGUuCiAgKgogICoJCUlm IHdlIGlzc3VlZCBhbnkgbm90aWZpY2F0aW9ucyBpbiB0aGUgdHJhbnNhY3Rpb24sIHNlbmQg c2lnbmFscyB0bwogICoJCWxpc3RlbmluZyBiYWNrZW5kcyAocG9zc2libHkgaW5jbHVkaW5n IG91cnNlbHZlcykgdG8gcHJvY2VzcyB0aGVtLgpAQCAtMTAwMSw3ICsxMjYzLDggQEAgQXRD b21taXRfTm90aWZ5KHZvaWQpCiAJfQogCiAJLyogSWYgbm8gbG9uZ2VyIGxpc3RlbmluZyB0 byBhbnl0aGluZywgZ2V0IG91dCBvZiBsaXN0ZW5lciBhcnJheSAqLwotCWlmIChhbVJlZ2lz dGVyZWRMaXN0ZW5lciAmJiBsaXN0ZW5DaGFubmVscyA9PSBOSUwpCisJaWYgKGFtUmVnaXN0 ZXJlZExpc3RlbmVyICYmCisJCShsaXN0ZW5DaGFubmVsc0hhc2ggPT0gTlVMTCB8fCBoYXNo X2dldF9udW1fZW50cmllcyhsaXN0ZW5DaGFubmVsc0hhc2gpID09IDApKQogCQlhc3luY1F1 ZXVlVW5yZWdpc3RlcigpOwogCiAJLyoKQEAgLTEwMzcsMTQ3ICsxMzAwLDI3MCBAQCBBdENv bW1pdF9Ob3RpZnkodm9pZCkKICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBtYWtlIHN1cmUgd2Ug YXJlIHJlYWR5IHRvIGNhdGNoIGFueSBpbmNvbWluZyBtZXNzYWdlcy4KICAqLwogc3RhdGlj IHZvaWQKLUV4ZWNfTGlzdGVuUHJlQ29tbWl0KHZvaWQpCitFeGVjX0xpc3RlblByZUNvbW1p dChjb25zdCBjaGFyICpjaGFubmVsKQogewotCVF1ZXVlUG9zaXRpb24gaGVhZDsKLQlRdWV1 ZVBvc2l0aW9uIG1heDsKLQlQcm9jTnVtYmVyCXByZXZMaXN0ZW5lcjsKKwlDaGFubmVsSGFz aEtleSBrZXk7CisJQ2hhbm5lbEVudHJ5ICplbnRyeTsKKwlib29sCQlmb3VuZDsKKwlMaXN0 ZW5lckVudHJ5ICpsaXN0ZW5lcnM7CiAKIAkvKgotCSAqIE5vdGhpbmcgdG8gZG8gaWYgd2Ug YXJlIGFscmVhZHkgbGlzdGVuaW5nIHRvIHNvbWV0aGluZywgbm9yIGlmIHdlCi0JICogYWxy ZWFkeSByYW4gdGhpcyByb3V0aW5lIGluIHRoaXMgdHJhbnNhY3Rpb24uCisJICogSWYgdGhp cyBpcyBvdXIgZmlyc3QgTElTVEVOIGluIHRoaXMgdHJhbnNhY3Rpb24sIHJlZ2lzdGVyIGFz IGEKKwkgKiBsaXN0ZW5lci4KIAkgKi8KLQlpZiAoYW1SZWdpc3RlcmVkTGlzdGVuZXIpCi0J CXJldHVybjsKLQotCWlmIChUcmFjZV9ub3RpZnkpCi0JCWVsb2coREVCVUcxLCAiRXhlY19M aXN0ZW5QcmVDb21taXQoJWQpIiwgTXlQcm9jUGlkKTsKLQotCS8qCi0JICogQmVmb3JlIHJl Z2lzdGVyaW5nLCBtYWtlIHN1cmUgd2Ugd2lsbCB1bmxpc3RlbiBiZWZvcmUgZHlpbmcuIChO b3RlOgotCSAqIHRoaXMgYWN0aW9uIGRvZXMgbm90IGdldCB1bmRvbmUgaWYgd2UgYWJvcnQg bGF0ZXIuKQotCSAqLwotCWlmICghdW5saXN0ZW5FeGl0UmVnaXN0ZXJlZCkKKwlpZiAoIWFt UmVnaXN0ZXJlZExpc3RlbmVyKQogCXsKLQkJYmVmb3JlX3NobWVtX2V4aXQoQXN5bmNfVW5s aXN0ZW5PbkV4aXQsIDApOwotCQl1bmxpc3RlbkV4aXRSZWdpc3RlcmVkID0gdHJ1ZTsKLQl9 CisJCVF1ZXVlUG9zaXRpb24gaGVhZDsKKwkJUXVldWVQb3NpdGlvbiBtYXg7CisJCVByb2NO dW1iZXIJcHJldkxpc3RlbmVyOwogCi0JLyoKLQkgKiBUaGlzIGlzIG91ciBmaXJzdCBMSVNU RU4sIHNvIGVzdGFibGlzaCBvdXIgcG9pbnRlci4KLQkgKgotCSAqIFdlIHNldCBvdXIgcG9p bnRlciB0byB0aGUgZ2xvYmFsIHRhaWwgcG9pbnRlciBhbmQgdGhlbiBtb3ZlIGl0IGZvcndh cmQKLQkgKiBvdmVyIGFscmVhZHktY29tbWl0dGVkIG5vdGlmaWNhdGlvbnMuICBUaGlzIGVu c3VyZXMgd2UgY2Fubm90IG1pc3MgYW55Ci0JICogbm90LXlldC1jb21taXR0ZWQgbm90aWZp Y2F0aW9ucy4gIFdlIG1pZ2h0IGdldCBhIGZldyBtb3JlIGJ1dCB0aGF0Ci0JICogZG9lc24n dCBodXJ0LgotCSAqCi0JICogSW4gc29tZSBzY2VuYXJpb3MgdGhlcmUgbWlnaHQgYmUgYSBs b3Qgb2YgY29tbWl0dGVkIG5vdGlmaWNhdGlvbnMgdGhhdAotCSAqIGhhdmUgbm90IHlldCBi ZWVuIHBydW5lZCBhd2F5IChiZWNhdXNlIHNvbWUgYmFja2VuZCBpcyBiZWluZyBsYXp5IGFi b3V0Ci0JICogcmVhZGluZyB0aGVtKS4gIFRvIHJlZHVjZSBvdXIgc3RhcnR1cCB0aW1lLCB3 ZSBjYW4gbG9vayBhdCBvdGhlcgotCSAqIGJhY2tlbmRzIGFuZCBhZG9wdCB0aGUgbWF4aW11 bSAicG9zIiBwb2ludGVyIG9mIGFueSBiYWNrZW5kIHRoYXQncyBpbgotCSAqIG91ciBkYXRh YmFzZTsgYW55IG5vdGlmaWNhdGlvbnMgaXQncyBhbHJlYWR5IGFkdmFuY2VkIG92ZXIgYXJl IHN1cmVseQotCSAqIGNvbW1pdHRlZCBhbmQgbmVlZCBub3QgYmUgcmUtZXhhbWluZWQgYnkg dXMuICAoV2UgbXVzdCBjb25zaWRlciBvbmx5Ci0JICogYmFja2VuZHMgY29ubmVjdGVkIHRv IG91ciBEQiwgYmVjYXVzZSBvdGhlcnMgd2lsbCBub3QgaGF2ZSBib3RoZXJlZCB0bwotCSAq IGNoZWNrIGNvbW1pdHRlZC1uZXNzIG9mIG5vdGlmaWNhdGlvbnMgaW4gb3VyIERCLikKLQkg KgotCSAqIFdlIG5lZWQgZXhjbHVzaXZlIGxvY2sgaGVyZSBzbyB3ZSBjYW4gbG9vayBhdCBv dGhlciBiYWNrZW5kcycgZW50cmllcwotCSAqIGFuZCBtYW5pcHVsYXRlIHRoZSBsaXN0IGxp bmtzLgotCSAqLwotCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVMb2NrLCBMV19FWENMVVNJ VkUpOwotCWhlYWQgPSBRVUVVRV9IRUFEOwotCW1heCA9IFFVRVVFX1RBSUw7Ci0JcHJldkxp c3RlbmVyID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKLQlmb3IgKFByb2NOdW1iZXIgaSA9IFFV RVVFX0ZJUlNUX0xJU1RFTkVSOyBpICE9IElOVkFMSURfUFJPQ19OVU1CRVI7IGkgPSBRVUVV RV9ORVhUX0xJU1RFTkVSKGkpKQotCXsKLQkJaWYgKFFVRVVFX0JBQ0tFTkRfREJPSUQoaSkg PT0gTXlEYXRhYmFzZUlkKQotCQkJbWF4ID0gUVVFVUVfUE9TX01BWChtYXgsIFFVRVVFX0JB Q0tFTkRfUE9TKGkpKTsKLQkJLyogQWxzbyBmaW5kIGxhc3QgbGlzdGVuaW5nIGJhY2tlbmQg YmVmb3JlIHRoaXMgb25lICovCi0JCWlmIChpIDwgTXlQcm9jTnVtYmVyKQotCQkJcHJldkxp c3RlbmVyID0gaTsKLQl9Ci0JUVVFVUVfQkFDS0VORF9QT1MoTXlQcm9jTnVtYmVyKSA9IG1h eDsKLQlRVUVVRV9CQUNLRU5EX1BJRChNeVByb2NOdW1iZXIpID0gTXlQcm9jUGlkOwotCVFV RVVFX0JBQ0tFTkRfREJPSUQoTXlQcm9jTnVtYmVyKSA9IE15RGF0YWJhc2VJZDsKLQkvKiBJ bnNlcnQgYmFja2VuZCBpbnRvIGxpc3Qgb2YgbGlzdGVuZXJzIGF0IGNvcnJlY3QgcG9zaXRp b24gKi8KLQlpZiAocHJldkxpc3RlbmVyICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCi0Jewot CQlRVUVVRV9ORVhUX0xJU1RFTkVSKE15UHJvY051bWJlcikgPSBRVUVVRV9ORVhUX0xJU1RF TkVSKHByZXZMaXN0ZW5lcik7Ci0JCVFVRVVFX05FWFRfTElTVEVORVIocHJldkxpc3RlbmVy KSA9IE15UHJvY051bWJlcjsKLQl9Ci0JZWxzZQotCXsKLQkJUVVFVUVfTkVYVF9MSVNURU5F UihNeVByb2NOdW1iZXIpID0gUVVFVUVfRklSU1RfTElTVEVORVI7Ci0JCVFVRVVFX0ZJUlNU X0xJU1RFTkVSID0gTXlQcm9jTnVtYmVyOwotCX0KLQlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1 ZXVlTG9jayk7CisJCWlmIChUcmFjZV9ub3RpZnkpCisJCQllbG9nKERFQlVHMSwgIkV4ZWNf TGlzdGVuUHJlQ29tbWl0KCVzLCVkKSIsIGNoYW5uZWwsIE15UHJvY1BpZCk7CiAKLQkvKiBO b3cgd2UgYXJlIGxpc3RlZCBpbiB0aGUgZ2xvYmFsIGFycmF5LCBzbyByZW1lbWJlciB3ZSdy ZSBsaXN0ZW5pbmcgKi8KLQlhbVJlZ2lzdGVyZWRMaXN0ZW5lciA9IHRydWU7CisJCS8qCisJ CSAqIEJlZm9yZSByZWdpc3RlcmluZywgbWFrZSBzdXJlIHdlIHdpbGwgdW5saXN0ZW4gYmVm b3JlIGR5aW5nLiAoTm90ZToKKwkJICogdGhpcyBhY3Rpb24gZG9lcyBub3QgZ2V0IHVuZG9u ZSBpZiB3ZSBhYm9ydCBsYXRlci4pCisJCSAqLworCQlpZiAoIXVubGlzdGVuRXhpdFJlZ2lz dGVyZWQpCisJCXsKKwkJCWJlZm9yZV9zaG1lbV9leGl0KEFzeW5jX1VubGlzdGVuT25FeGl0 LCAwKTsKKwkJCXVubGlzdGVuRXhpdFJlZ2lzdGVyZWQgPSB0cnVlOworCQl9CiAKLQkvKgot CSAqIFRyeSB0byBtb3ZlIG91ciBwb2ludGVyIGZvcndhcmQgYXMgZmFyIGFzIHBvc3NpYmxl LiAgVGhpcyB3aWxsIHNraXAKLQkgKiBvdmVyIGFscmVhZHktY29tbWl0dGVkIG5vdGlmaWNh dGlvbnMsIHdoaWNoIHdlIHdhbnQgdG8gZG8gYmVjYXVzZSB0aGV5Ci0JICogbWlnaHQgYmUg cXVpdGUgc3RhbGUuICBOb3RlIHRoYXQgd2UgYXJlIG5vdCB5ZXQgbGlzdGVuaW5nIG9uIGFu eXRoaW5nLAotCSAqIHNvIHdlIHdvbid0IGRlbGl2ZXIgc3VjaCBub3RpZmljYXRpb25zIHRv IG91ciBmcm9udGVuZC4gIEFsc28sIGFsdGhvdWdoCi0JICogb3VyIHRyYW5zYWN0aW9uIG1p Z2h0IGhhdmUgZXhlY3V0ZWQgTk9USUZZLCB0aG9zZSBtZXNzYWdlKHMpIGFyZW4ndAotCSAq IHF1ZXVlZCB5ZXQgc28gd2Ugd29uJ3Qgc2tpcCB0aGVtIGhlcmUuCi0JICovCi0JaWYgKCFR VUVVRV9QT1NfRVFVQUwobWF4LCBoZWFkKSkKLQkJYXN5bmNRdWV1ZVJlYWRBbGxOb3RpZmlj YXRpb25zKCk7Ci19CisJCS8qCisJCSAqIFRoaXMgaXMgb3VyIGZpcnN0IExJU1RFTiwgc28g ZXN0YWJsaXNoIG91ciBwb2ludGVyLgorCQkgKgorCQkgKiBXZSBzZXQgb3VyIHBvaW50ZXIg dG8gdGhlIGdsb2JhbCB0YWlsIHBvaW50ZXIgYW5kIHRoZW4gbW92ZSBpdAorCQkgKiBmb3J3 YXJkIG92ZXIgYWxyZWFkeS1jb21taXR0ZWQgbm90aWZpY2F0aW9ucy4gIFRoaXMgZW5zdXJl cyB3ZQorCQkgKiBjYW5ub3QgbWlzcyBhbnkgbm90LXlldC1jb21taXR0ZWQgbm90aWZpY2F0 aW9ucy4gIFdlIG1pZ2h0IGdldCBhCisJCSAqIGZldyBtb3JlIGJ1dCB0aGF0IGRvZXNuJ3Qg aHVydC4KKwkJICoKKwkJICogSW4gc29tZSBzY2VuYXJpb3MgdGhlcmUgbWlnaHQgYmUgYSBs b3Qgb2YgY29tbWl0dGVkIG5vdGlmaWNhdGlvbnMKKwkJICogdGhhdCBoYXZlIG5vdCB5ZXQg YmVlbiBwcnVuZWQgYXdheSAoYmVjYXVzZSBzb21lIGJhY2tlbmQgaXMgYmVpbmcKKwkJICog bGF6eSBhYm91dCByZWFkaW5nIHRoZW0pLiAgVG8gcmVkdWNlIG91ciBzdGFydHVwIHRpbWUs IHdlIGNhbiBsb29rCisJCSAqIGF0IG90aGVyIGJhY2tlbmRzIGFuZCBhZG9wdCB0aGUgbWF4 aW11bSAicG9zIiBwb2ludGVyIG9mIGFueQorCQkgKiBiYWNrZW5kIHRoYXQncyBpbiBvdXIg ZGF0YWJhc2U7IGFueSBub3RpZmljYXRpb25zIGl0J3MgYWxyZWFkeQorCQkgKiBhZHZhbmNl ZCBvdmVyIGFyZSBzdXJlbHkgY29tbWl0dGVkIGFuZCBuZWVkIG5vdCBiZSByZS1leGFtaW5l ZCBieQorCQkgKiB1cy4gIChXZSBtdXN0IGNvbnNpZGVyIG9ubHkgYmFja2VuZHMgY29ubmVj dGVkIHRvIG91ciBEQiwgYmVjYXVzZQorCQkgKiBvdGhlcnMgd2lsbCBub3QgaGF2ZSBib3Ro ZXJlZCB0byBjaGVjayBjb21taXR0ZWQtbmVzcyBvZgorCQkgKiBub3RpZmljYXRpb25zIGlu IG91ciBEQi4pCisJCSAqCisJCSAqIFdlIG5lZWQgZXhjbHVzaXZlIGxvY2sgaGVyZSBzbyB3 ZSBjYW4gbG9vayBhdCBvdGhlciBiYWNrZW5kcycKKwkJICogZW50cmllcyBhbmQgbWFuaXB1 bGF0ZSB0aGUgbGlzdCBsaW5rcy4KKwkJICovCisJCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVl dWVMb2NrLCBMV19FWENMVVNJVkUpOworCQloZWFkID0gUVVFVUVfSEVBRDsKKwkJbWF4ID0g UVVFVUVfVEFJTDsKKwkJcHJldkxpc3RlbmVyID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKKwkJ Zm9yIChQcm9jTnVtYmVyIGkgPSBRVUVVRV9GSVJTVF9MSVNURU5FUjsgaSAhPSBJTlZBTElE X1BST0NfTlVNQkVSOyBpID0gUVVFVUVfTkVYVF9MSVNURU5FUihpKSkKKwkJeworCQkJaWYg KFFVRVVFX0JBQ0tFTkRfREJPSUQoaSkgPT0gTXlEYXRhYmFzZUlkKQorCQkJCW1heCA9IFFV RVVFX1BPU19NQVgobWF4LCBRVUVVRV9CQUNLRU5EX1BPUyhpKSk7CisJCQkvKiBBbHNvIGZp bmQgbGFzdCBsaXN0ZW5pbmcgYmFja2VuZCBiZWZvcmUgdGhpcyBvbmUgKi8KKwkJCWlmIChp IDwgTXlQcm9jTnVtYmVyKQorCQkJCXByZXZMaXN0ZW5lciA9IGk7CisJCX0KKwkJUVVFVUVf QkFDS0VORF9QT1MoTXlQcm9jTnVtYmVyKSA9IG1heDsKKwkJUVVFVUVfQkFDS0VORF9QSUQo TXlQcm9jTnVtYmVyKSA9IE15UHJvY1BpZDsKKwkJUVVFVUVfQkFDS0VORF9EQk9JRChNeVBy b2NOdW1iZXIpID0gTXlEYXRhYmFzZUlkOworCQkvKiBJbnNlcnQgYmFja2VuZCBpbnRvIGxp c3Qgb2YgbGlzdGVuZXJzIGF0IGNvcnJlY3QgcG9zaXRpb24gKi8KKwkJaWYgKHByZXZMaXN0 ZW5lciAhPSBJTlZBTElEX1BST0NfTlVNQkVSKQorCQl7CisJCQlRVUVVRV9ORVhUX0xJU1RF TkVSKE15UHJvY051bWJlcikgPSBRVUVVRV9ORVhUX0xJU1RFTkVSKHByZXZMaXN0ZW5lcik7 CisJCQlRVUVVRV9ORVhUX0xJU1RFTkVSKHByZXZMaXN0ZW5lcikgPSBNeVByb2NOdW1iZXI7 CisJCX0KKwkJZWxzZQorCQl7CisJCQlRVUVVRV9ORVhUX0xJU1RFTkVSKE15UHJvY051bWJl cikgPSBRVUVVRV9GSVJTVF9MSVNURU5FUjsKKwkJCVFVRVVFX0ZJUlNUX0xJU1RFTkVSID0g TXlQcm9jTnVtYmVyOworCQl9CisJCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2NrKTsK IAotLyoKLSAqIEV4ZWNfTGlzdGVuQ29tbWl0IC0tLSBzdWJyb3V0aW5lIGZvciBBdENvbW1p dF9Ob3RpZnkKLSAqCi0gKiBBZGQgdGhlIGNoYW5uZWwgdG8gdGhlIGxpc3Qgb2YgY2hhbm5l bHMgd2UgYXJlIGxpc3RlbmluZyBvbi4KLSAqLwotc3RhdGljIHZvaWQKLUV4ZWNfTGlzdGVu Q29tbWl0KGNvbnN0IGNoYXIgKmNoYW5uZWwpCi17Ci0JTWVtb3J5Q29udGV4dCBvbGRjb250 ZXh0OworCQkvKiBOb3cgd2UgYXJlIGxpc3RlZCBpbiB0aGUgZ2xvYmFsIGFycmF5LCBzbyBy ZW1lbWJlciB3ZSdyZSBsaXN0ZW5pbmcgKi8KKwkJYW1SZWdpc3RlcmVkTGlzdGVuZXIgPSB0 cnVlOworCisJCS8qCisJCSAqIFRyeSB0byBtb3ZlIG91ciBwb2ludGVyIGZvcndhcmQgYXMg ZmFyIGFzIHBvc3NpYmxlLiAgVGhpcyB3aWxsIHNraXAKKwkJICogb3ZlciBhbHJlYWR5LWNv bW1pdHRlZCBub3RpZmljYXRpb25zLCB3aGljaCB3ZSB3YW50IHRvIGRvIGJlY2F1c2UKKwkJ ICogdGhleSBtaWdodCBiZSBxdWl0ZSBzdGFsZS4gIE5vdGUgdGhhdCB3ZSBhcmUgbm90IHll dCBsaXN0ZW5pbmcgb24KKwkJICogYW55dGhpbmcsIHNvIHdlIHdvbid0IGRlbGl2ZXIgc3Vj aCBub3RpZmljYXRpb25zIHRvIG91ciBmcm9udGVuZC4KKwkJICogQWxzbywgYWx0aG91Z2gg b3VyIHRyYW5zYWN0aW9uIG1pZ2h0IGhhdmUgZXhlY3V0ZWQgTk9USUZZLCB0aG9zZQorCQkg KiBtZXNzYWdlKHMpIGFyZW4ndCBxdWV1ZWQgeWV0IHNvIHdlIHdvbid0IHNraXAgdGhlbSBo ZXJlLgorCQkgKi8KKwkJaWYgKCFRVUVVRV9QT1NfRVFVQUwobWF4LCBoZWFkKSkKKwkJCWFz eW5jUXVldWVSZWFkQWxsTm90aWZpY2F0aW9ucygpOworCX0KIAogCS8qIERvIG5vdGhpbmcg aWYgd2UgYXJlIGFscmVhZHkgbGlzdGVuaW5nIG9uIHRoaXMgY2hhbm5lbCAqLwogCWlmIChJ c0xpc3RlbmluZ09uKGNoYW5uZWwpKQogCQlyZXR1cm47CiAKIAkvKgotCSAqIEFkZCB0aGUg bmV3IGNoYW5uZWwgbmFtZSB0byBsaXN0ZW5DaGFubmVscy4KLQkgKgotCSAqIFhYWCBJdCBp cyB0aGVvcmV0aWNhbGx5IHBvc3NpYmxlIHRvIGdldCBhbiBvdXQtb2YtbWVtb3J5IGZhaWx1 cmUgaGVyZSwKLQkgKiB3aGljaCB3b3VsZCBiZSBiYWQgYmVjYXVzZSB3ZSBhbHJlYWR5IGNv bW1pdHRlZC4gIEZvciB0aGUgbW9tZW50IGl0Ci0JICogZG9lc24ndCBzZWVtIHdvcnRoIHRy eWluZyB0byBndWFyZCBhZ2FpbnN0IHRoYXQsIGJ1dCBtYXliZSBpbXByb3ZlIHRoaXMKLQkg KiBsYXRlci4KLQkgKi8KLQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRv cE1lbW9yeUNvbnRleHQpOwotCWxpc3RlbkNoYW5uZWxzID0gbGFwcGVuZChsaXN0ZW5DaGFu bmVscywgcHN0cmR1cChjaGFubmVsKSk7Ci0JTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNv bnRleHQpOworCSAqIEFkZCB0aGUgY2hhbm5lbCB0byBsaXN0ZW5DaGFubmVsc0hhc2guICBU aGlzIGNhbiBPT00sIGJ1dCB3ZSdyZSBzdGlsbAorCSAqIGluIFByZUNvbW1pdCBzbyB0aGUg dHJhbnNhY3Rpb24gY2FuIGFib3J0IHNhZmVseS4KKwkgKi8KKwlpbml0TGlzdGVuQ2hhbm5l bHNIYXNoKCk7CisJKHZvaWQpIGhhc2hfc2VhcmNoKGxpc3RlbkNoYW5uZWxzSGFzaCwgY2hh bm5lbCwgSEFTSF9FTlRFUiwgTlVMTCk7CisKKwkvKgorCSAqIE5vdyB1cGRhdGUgdGhlIHNo YXJlZCBjaGFubmVsSGFzaC4gIFdlIGluc2VydCBhbiBlbnRyeSB3aXRoCisJICogYWN0aXZl PWZhbHNlLCB3aGljaCB3aWxsIGJlIGZsaXBwZWQgdG8gdHJ1ZSBpbiBFeGVjX0xpc3RlbkNv bW1pdC4KKwkgKi8KKwlpbml0Q2hhbm5lbEhhc2goKTsKKworCUNoYW5uZWxIYXNoUHJlcGFy ZUtleSgma2V5LCBNeURhdGFiYXNlSWQsIGNoYW5uZWwpOworCisJLyoKKwkgKiBGaW5kIG9y IGNyZWF0ZSB0aGUgY2hhbm5lbCBlbnRyeS4gIEZvciBuZXcgZW50cmllcywgd2UgaW5pdGlh bGl6ZQorCSAqIGxpc3RlbmVyc0FycmF5IHRvIEludmFsaWREc2FQb2ludGVyIGFzIGEgbWFy a2VyLgorCSAqLworCWVudHJ5ID0gZHNoYXNoX2ZpbmRfb3JfaW5zZXJ0KGNoYW5uZWxIYXNo LCAma2V5LCAmZm91bmQpOworCisJaWYgKCFmb3VuZCkKKwkJZW50cnktPmxpc3RlbmVyc0Fy cmF5ID0gSW52YWxpZERzYVBvaW50ZXI7CisKKwlpZiAoIURzYVBvaW50ZXJJc1ZhbGlkKGVu dHJ5LT5saXN0ZW5lcnNBcnJheSkpCisJeworCQkvKiBGaXJzdCBsaXN0ZW5lciBmb3IgdGhp cyBjaGFubmVsICovCisJCWVudHJ5LT5saXN0ZW5lcnNBcnJheSA9IGRzYV9hbGxvY2F0ZShj aGFubmVsRFNBLAorCQkJCQkJCQkJCQkgc2l6ZW9mKExpc3RlbmVyRW50cnkpICogSU5JVElB TF9MSVNURU5FUlNfQVJSQVlfU0laRSk7CisJCWVudHJ5LT5udW1MaXN0ZW5lcnMgPSAwOwor CQllbnRyeS0+YWxsb2NhdGVkTGlzdGVuZXJzID0gSU5JVElBTF9MSVNURU5FUlNfQVJSQVlf U0laRTsKKwl9CisKKwlsaXN0ZW5lcnMgPSAoTGlzdGVuZXJFbnRyeSAqKSBkc2FfZ2V0X2Fk ZHJlc3MoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJCSAgZW50cnktPmxpc3RlbmVyc0FycmF5 KTsKKworCWlmIChlbnRyeS0+bnVtTGlzdGVuZXJzID49IGVudHJ5LT5hbGxvY2F0ZWRMaXN0 ZW5lcnMpCisJeworCQlpbnQJCQluZXdfc2l6ZSA9IGVudHJ5LT5hbGxvY2F0ZWRMaXN0ZW5l cnMgKiAyOworCQlkc2FfcG9pbnRlciBuZXdfYXJyYXkgPSBkc2FfYWxsb2NhdGUoY2hhbm5l bERTQSwKKwkJCQkJCQkJCQkJIHNpemVvZihMaXN0ZW5lckVudHJ5KSAqIG5ld19zaXplKTsK KwkJTGlzdGVuZXJFbnRyeSAqbmV3X2xpc3RlbmVycyA9IChMaXN0ZW5lckVudHJ5ICopIGRz YV9nZXRfYWRkcmVzcyhjaGFubmVsRFNBLAorCQkJCQkJCQkJCQkJCQkJCQkJIG5ld19hcnJh eSk7CisKKwkJbWVtY3B5KG5ld19saXN0ZW5lcnMsIGxpc3RlbmVycywKKwkJCSAgIHNpemVv ZihMaXN0ZW5lckVudHJ5KSAqIGVudHJ5LT5udW1MaXN0ZW5lcnMpOworCisJCWRzYV9mcmVl KGNoYW5uZWxEU0EsIGVudHJ5LT5saXN0ZW5lcnNBcnJheSk7CisJCWVudHJ5LT5saXN0ZW5l cnNBcnJheSA9IG5ld19hcnJheTsKKwkJZW50cnktPmFsbG9jYXRlZExpc3RlbmVycyA9IG5l d19zaXplOworCQlsaXN0ZW5lcnMgPSBuZXdfbGlzdGVuZXJzOworCX0KKworCWxpc3RlbmVy c1tlbnRyeS0+bnVtTGlzdGVuZXJzXS5wcm9jbm8gPSBNeVByb2NOdW1iZXI7CisJbGlzdGVu ZXJzW2VudHJ5LT5udW1MaXN0ZW5lcnNdLmFjdGl2ZSA9IGZhbHNlOworCWVudHJ5LT5udW1M aXN0ZW5lcnMrKzsKKworCWRzaGFzaF9yZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gsIGVudHJ5 KTsKK30KKworLyoKKyAqIEV4ZWNfTGlzdGVuQ29tbWl0IC0tLSBzdWJyb3V0aW5lIGZvciBB dENvbW1pdF9Ob3RpZnkKKyAqCisgKiBBY3RpdmF0ZSB0aGUgY2hhbm5lbCBlbnRyeSB0aGF0 IHdhcyBwcmUtYWxsb2NhdGVkIGluIEV4ZWNfTGlzdGVuUHJlQ29tbWl0LgorICogVGhpcyBp cyBjYWxsZWQgYWZ0ZXIgY29tbWl0IHRvIGNsb2csIHNvIGl0J3MgaW1wb3J0YW50IHRvIGhh dmUgdmVyeSBsb3cKKyAqIHByb2JhYmlsaXR5IG9mIGZhaWx1cmUuICBCeSBkZXNpZ24sIGFs bCB3ZSBkbyBoZXJlIGlzIHNldCB0aGUgYWN0aXZlCisgKiBmbGFnLgorICovCitzdGF0aWMg dm9pZAorRXhlY19MaXN0ZW5Db21taXQoY29uc3QgY2hhciAqY2hhbm5lbCkKK3sKKwlDaGFu bmVsSGFzaEtleSBrZXk7CisJQ2hhbm5lbEVudHJ5ICplbnRyeTsKKwlMaXN0ZW5lckVudHJ5 ICpsaXN0ZW5lcnM7CisJaW50CQkJaTsKKworCWlmIChUcmFjZV9ub3RpZnkpCisJCWVsb2co REVCVUcxLCAiRXhlY19MaXN0ZW5Db21taXQoJXMsJWQpIiwgY2hhbm5lbCwgTXlQcm9jUGlk KTsKKworCS8qCisJICogVGhlIGVudHJ5IGhhcyBiZWVuIGNyZWF0ZWQgaW4gRXhlY19MaXN0 ZW5QcmVDb21taXQuIElmIHdlIGdldCBoZXJlLAorCSAqIGNoYW5uZWxIYXNoIGFuZCB0aGUg ZW50cnkgbXVzdCBleGlzdC4KKwkgKi8KKwlBc3NlcnQoY2hhbm5lbEhhc2ggIT0gTlVMTCk7 CisJQ2hhbm5lbEhhc2hQcmVwYXJlS2V5KCZrZXksIE15RGF0YWJhc2VJZCwgY2hhbm5lbCk7 CisJZW50cnkgPSBkc2hhc2hfZmluZChjaGFubmVsSGFzaCwgJmtleSwgdHJ1ZSk7CisJQXNz ZXJ0KGVudHJ5ICE9IE5VTEwpOworCisJbGlzdGVuZXJzID0gKExpc3RlbmVyRW50cnkgKikg ZHNhX2dldF9hZGRyZXNzKGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJCQkgIGVudHJ5LT5saXN0 ZW5lcnNBcnJheSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZW50cnktPm51bUxpc3RlbmVyczsg aSsrKQorCXsKKwkJaWYgKGxpc3RlbmVyc1tpXS5wcm9jbm8gPT0gTXlQcm9jTnVtYmVyKQor CQl7CisJCQlsaXN0ZW5lcnNbaV0uYWN0aXZlID0gdHJ1ZTsKKwkJCWRzaGFzaF9yZWxlYXNl X2xvY2soY2hhbm5lbEhhc2gsIGVudHJ5KTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8q IElmIHRoZSBlbnRyeSBpcyBub3QgZm91bmQsIGl0J3MgYSBidWcuICovCisJQXNzZXJ0KGZh bHNlKTsKKwlkc2hhc2hfcmVsZWFzZV9sb2NrKGNoYW5uZWxIYXNoLCBlbnRyeSk7CiB9CiAK IC8qCiAgKiBFeGVjX1VubGlzdGVuQ29tbWl0IC0tLSBzdWJyb3V0aW5lIGZvciBBdENvbW1p dF9Ob3RpZnkKICAqCi0gKiBSZW1vdmUgdGhlIHNwZWNpZmllZCBjaGFubmVsIG5hbWUgZnJv bSBsaXN0ZW5DaGFubmVscy4KKyAqCQlVbmxpc3RlbiB0aGUgc3BlY2lmaWVkIGNoYW5uZWwg Zm9yIHRoaXMgYmFja2VuZC4KICAqLwogc3RhdGljIHZvaWQKIEV4ZWNfVW5saXN0ZW5Db21t aXQoY29uc3QgY2hhciAqY2hhbm5lbCkKIHsKLQlMaXN0Q2VsbCAgICpxOworCUNoYW5uZWxI YXNoS2V5IGtleTsKKwlDaGFubmVsRW50cnkgKmVudHJ5OworCUxpc3RlbmVyRW50cnkgKmxp c3RlbmVyczsKKwlpbnQJCQlpOwogCiAJaWYgKFRyYWNlX25vdGlmeSkKIAkJZWxvZyhERUJV RzEsICJFeGVjX1VubGlzdGVuQ29tbWl0KCVzLCVkKSIsIGNoYW5uZWwsIE15UHJvY1BpZCk7 CiAKLQlmb3JlYWNoKHEsIGxpc3RlbkNoYW5uZWxzKQorCS8qIFJlbW92ZSBmcm9tIG91ciBs b2NhbCBjYWNoZSAqLworCWlmIChsaXN0ZW5DaGFubmVsc0hhc2ggIT0gTlVMTCkKKwkJKHZv aWQpIGhhc2hfc2VhcmNoKGxpc3RlbkNoYW5uZWxzSGFzaCwgY2hhbm5lbCwgSEFTSF9SRU1P VkUsIE5VTEwpOworCisJLyogTm93IHJlbW92ZSBmcm9tIHRoZSBzaGFyZWQgY2hhbm5lbEhh c2ggKi8KKwlpZiAoY2hhbm5lbEhhc2ggPT0gTlVMTCkKKwkJcmV0dXJuOworCisJQ2hhbm5l bEhhc2hQcmVwYXJlS2V5KCZrZXksIE15RGF0YWJhc2VJZCwgY2hhbm5lbCk7CisKKwkvKiBM b29rIHVwIHRoZSBjaGFubmVsIHdpdGggZXhjbHVzaXZlIGxvY2sgc28gd2UgY2FuIG1vZGlm eSBpdCAqLworCWVudHJ5ID0gZHNoYXNoX2ZpbmQoY2hhbm5lbEhhc2gsICZrZXksIHRydWUp OworCWlmIChlbnRyeSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlsaXN0ZW5lcnMgPSAoTGlz dGVuZXJFbnRyeSAqKSBkc2FfZ2V0X2FkZHJlc3MoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJ CSAgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKworCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+ bnVtTGlzdGVuZXJzOyBpKyspCiAJewotCQljaGFyCSAgICpsY2hhbiA9IChjaGFyICopIGxm aXJzdChxKTsKLQotCQlpZiAoc3RyY21wKGxjaGFuLCBjaGFubmVsKSA9PSAwKQorCQlpZiAo bGlzdGVuZXJzW2ldLnByb2NubyA9PSBNeVByb2NOdW1iZXIpCiAJCXsKLQkJCWxpc3RlbkNo YW5uZWxzID0gZm9yZWFjaF9kZWxldGVfY3VycmVudChsaXN0ZW5DaGFubmVscywgcSk7Ci0J CQlwZnJlZShsY2hhbik7Ci0JCQlicmVhazsKKwkJCWVudHJ5LT5udW1MaXN0ZW5lcnMtLTsK KwkJCWlmIChpIDwgZW50cnktPm51bUxpc3RlbmVycykKKwkJCQltZW1tb3ZlKCZsaXN0ZW5l cnNbaV0sICZsaXN0ZW5lcnNbaSArIDFdLAorCQkJCQkJc2l6ZW9mKExpc3RlbmVyRW50cnkp ICogKGVudHJ5LT5udW1MaXN0ZW5lcnMgLSBpKSk7CisKKwkJCWlmIChlbnRyeS0+bnVtTGlz dGVuZXJzID09IDApCisJCQl7CisJCQkJLyogTGFzdCBsaXN0ZW5lciBmb3IgdGhpcyBjaGFu bmVsICovCisJCQkJZHNhX2ZyZWUoY2hhbm5lbERTQSwgZW50cnktPmxpc3RlbmVyc0FycmF5 KTsKKwkJCQlkc2hhc2hfZGVsZXRlX2VudHJ5KGNoYW5uZWxIYXNoLCBlbnRyeSk7CisJCQl9 CisJCQllbHNlCisJCQl7CisJCQkJZHNoYXNoX3JlbGVhc2VfbG9jayhjaGFubmVsSGFzaCwg ZW50cnkpOworCQkJfQorCisJCQlyZXR1cm47CiAJCX0KIAl9CiAKKwlkc2hhc2hfcmVsZWFz ZV9sb2NrKGNoYW5uZWxIYXNoLCBlbnRyeSk7CisKIAkvKgogCSAqIFdlIGRvIG5vdCBjb21w bGFpbiBhYm91dCB1bmxpc3RlbmluZyBzb21ldGhpbmcgbm90IGJlaW5nIGxpc3RlbmVkOwog CSAqIHNob3VsZCB3ZT8KQEAgLTExOTIsMzQgKzE1NzgsNjggQEAgRXhlY19Vbmxpc3RlbkNv bW1pdChjb25zdCBjaGFyICpjaGFubmVsKQogc3RhdGljIHZvaWQKIEV4ZWNfVW5saXN0ZW5B bGxDb21taXQodm9pZCkKIHsKKwlkc2hhc2hfc2VxX3N0YXR1cyBzdGF0dXM7CisJQ2hhbm5l bEVudHJ5ICplbnRyeTsKKwogCWlmIChUcmFjZV9ub3RpZnkpCiAJCWVsb2coREVCVUcxLCAi RXhlY19Vbmxpc3RlbkFsbENvbW1pdCglZCkiLCBNeVByb2NQaWQpOwogCi0JbGlzdF9mcmVl X2RlZXAobGlzdGVuQ2hhbm5lbHMpOwotCWxpc3RlbkNoYW5uZWxzID0gTklMOworCS8qIENs ZWFyIG91ciBsb2NhbCBjYWNoZSAqLworCWlmIChsaXN0ZW5DaGFubmVsc0hhc2ggIT0gTlVM TCkKKwl7CisJCWhhc2hfZGVzdHJveShsaXN0ZW5DaGFubmVsc0hhc2gpOworCQlsaXN0ZW5D aGFubmVsc0hhc2ggPSBOVUxMOworCX0KKworCS8qIE5vdyByZW1vdmUgZnJvbSB0aGUgc2hh cmVkIGNoYW5uZWxIYXNoICovCisJaWYgKGNoYW5uZWxIYXNoID09IE5VTEwpCisJCXJldHVy bjsKKworCWRzaGFzaF9zZXFfaW5pdCgmc3RhdHVzLCBjaGFubmVsSGFzaCwgdHJ1ZSk7CisJ d2hpbGUgKChlbnRyeSA9IGRzaGFzaF9zZXFfbmV4dCgmc3RhdHVzKSkgIT0gTlVMTCkKKwl7 CisJCWlmIChlbnRyeS0+a2V5LmRib2lkID09IE15RGF0YWJhc2VJZCkKKwkJeworCQkJTGlz dGVuZXJFbnRyeSAqbGlzdGVuZXJzOworCQkJaW50CQkJaTsKKworCQkJbGlzdGVuZXJzID0g KExpc3RlbmVyRW50cnkgKikgZHNhX2dldF9hZGRyZXNzKGNoYW5uZWxEU0EsCisJCQkJCQkJ CQkJCQkJCSAgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKworCQkJZm9yIChpID0gMDsgaSA8 IGVudHJ5LT5udW1MaXN0ZW5lcnM7IGkrKykKKwkJCXsKKwkJCQlpZiAobGlzdGVuZXJzW2ld LnByb2NubyA9PSBNeVByb2NOdW1iZXIpCisJCQkJeworCQkJCQllbnRyeS0+bnVtTGlzdGVu ZXJzLS07CisJCQkJCWlmIChpIDwgZW50cnktPm51bUxpc3RlbmVycykKKwkJCQkJCW1lbW1v dmUoJmxpc3RlbmVyc1tpXSwgJmxpc3RlbmVyc1tpICsgMV0sCisJCQkJCQkJCXNpemVvZihM aXN0ZW5lckVudHJ5KSAqIChlbnRyeS0+bnVtTGlzdGVuZXJzIC0gaSkpOworCisJCQkJCWlm IChlbnRyeS0+bnVtTGlzdGVuZXJzID09IDApCisJCQkJCXsKKwkJCQkJCWRzYV9mcmVlKGNo YW5uZWxEU0EsIGVudHJ5LT5saXN0ZW5lcnNBcnJheSk7CisJCQkJCQlkc2hhc2hfZGVsZXRl X2N1cnJlbnQoJnN0YXR1cyk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQor CQl9CisJfQorCWRzaGFzaF9zZXFfdGVybSgmc3RhdHVzKTsKIH0KIAogLyoKICAqIFRlc3Qg d2hldGhlciB3ZSBhcmUgYWN0aXZlbHkgbGlzdGVuaW5nIG9uIHRoZSBnaXZlbiBjaGFubmVs IG5hbWUuCiAgKgogICogTm90ZTogdGhpcyBmdW5jdGlvbiBpcyBleGVjdXRlZCBmb3IgZXZl cnkgbm90aWZpY2F0aW9uIGZvdW5kIGluIHRoZSBxdWV1ZS4KLSAqIFBlcmhhcHMgaXQgaXMg d29ydGggZnVydGhlciBvcHRpbWl6YXRpb24sIGVnIGNvbnZlcnQgdGhlIGxpc3QgdG8gYSBz b3J0ZWQKLSAqIGFycmF5IHNvIHdlIGNhbiBiaW5hcnktc2VhcmNoIGl0LiAgSW4gcHJhY3Rp Y2UgdGhlIGxpc3QgaXMgbGlrZWx5IHRvIGJlCi0gKiBmYWlybHkgc2hvcnQsIHRob3VnaC4K ICAqLwogc3RhdGljIGJvb2wKIElzTGlzdGVuaW5nT24oY29uc3QgY2hhciAqY2hhbm5lbCkK IHsKLQlMaXN0Q2VsbCAgICpwOworCWlmIChsaXN0ZW5DaGFubmVsc0hhc2ggPT0gTlVMTCkK KwkJcmV0dXJuIGZhbHNlOwogCi0JZm9yZWFjaChwLCBsaXN0ZW5DaGFubmVscykKLQl7Ci0J CWNoYXIJICAgKmxjaGFuID0gKGNoYXIgKikgbGZpcnN0KHApOwotCi0JCWlmIChzdHJjbXAo bGNoYW4sIGNoYW5uZWwpID09IDApCi0JCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JcmV0dXJuIGZh bHNlOworCXJldHVybiAoaGFzaF9zZWFyY2gobGlzdGVuQ2hhbm5lbHNIYXNoLCBjaGFubmVs LCBIQVNIX0ZJTkQsIE5VTEwpICE9IE5VTEwpOwogfQogCiAvKgpAQCAtMTIyOSw3ICsxNjQ5 LDcgQEAgSXNMaXN0ZW5pbmdPbihjb25zdCBjaGFyICpjaGFubmVsKQogc3RhdGljIHZvaWQK IGFzeW5jUXVldWVVbnJlZ2lzdGVyKHZvaWQpCiB7Ci0JQXNzZXJ0KGxpc3RlbkNoYW5uZWxz ID09IE5JTCk7CS8qIGVsc2UgY2FsbGVyIGVycm9yICovCisJQXNzZXJ0KGxpc3RlbkNoYW5u ZWxzSGFzaCA9PSBOVUxMIHx8IGhhc2hfZ2V0X251bV9lbnRyaWVzKGxpc3RlbkNoYW5uZWxz SGFzaCkgPT0gMCk7CS8qIGVsc2UgY2FsbGVyIGVycm9yICovCiAKIAlpZiAoIWFtUmVnaXN0 ZXJlZExpc3RlbmVyKQkvKiBub3RoaW5nIHRvIGRvICovCiAJCXJldHVybjsKQEAgLTEyNDEs NiArMTY2MSw3IEBAIGFzeW5jUXVldWVVbnJlZ2lzdGVyKHZvaWQpCiAJLyogTWFyayBvdXIg ZW50cnkgYXMgaW52YWxpZCAqLwogCVFVRVVFX0JBQ0tFTkRfUElEKE15UHJvY051bWJlcikg PSBJbnZhbGlkUGlkOwogCVFVRVVFX0JBQ0tFTkRfREJPSUQoTXlQcm9jTnVtYmVyKSA9IElu dmFsaWRPaWQ7CisJUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhNeVByb2NOdW1iZXIp ID0gZmFsc2U7CiAJLyogYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0ICovCiAJaWYgKFFV RVVFX0ZJUlNUX0xJU1RFTkVSID09IE15UHJvY051bWJlcikKIAkJUVVFVUVfRklSU1RfTElT VEVORVIgPSBRVUVVRV9ORVhUX0xJU1RFTkVSKE15UHJvY051bWJlcik7CkBAIC0xNTY1LDEy ICsxOTg2LDIxIEBAIGFzeW5jUXVldWVGaWxsV2FybmluZyh2b2lkKQogLyoKICAqIFNlbmQg c2lnbmFscyB0byBsaXN0ZW5pbmcgYmFja2VuZHMuCiAgKgotICogTm9ybWFsbHkgd2Ugc2ln bmFsIG9ubHkgYmFja2VuZHMgaW4gb3VyIG93biBkYXRhYmFzZSwgc2luY2Ugb25seSB0aG9z ZQotICogYmFja2VuZHMgY291bGQgYmUgaW50ZXJlc3RlZCBpbiBub3RpZmllcyB3ZSBzZW5k LiAgSG93ZXZlciwgaWYgdGhlcmUncwotICogbm90aWZ5IHRyYWZmaWMgaW4gb3VyIGRhdGFi YXNlIGJ1dCBubyB0cmFmZmljIGluIGFub3RoZXIgZGF0YWJhc2UgdGhhdAotICogZG9lcyBo YXZlIGxpc3RlbmVyKHMpLCB0aG9zZSBsaXN0ZW5lcnMgd2lsbCBmYWxsIGZ1cnRoZXIgYW5k IGZ1cnRoZXIKLSAqIGJlaGluZC4gIFdha2VuIHRoZW0gYW55d2F5IGlmIHRoZXkncmUgZmFy IGVub3VnaCBiZWhpbmQsIHNvIHRoYXQgdGhleSdsbAotICogYWR2YW5jZSB0aGVpciBxdWV1 ZSBwb3NpdGlvbiBwb2ludGVycywgYWxsb3dpbmcgdGhlIGdsb2JhbCB0YWlsIHRvIGFkdmFu Y2UuCisgKiBOb3JtYWxseSB3ZSBzaWduYWwgb25seSBiYWNrZW5kcyBpbiBvdXIgb3duIGRh dGFiYXNlLCB0aGF0IGFyZQorICogbGlzdGVuaW5nIG9uIHRoZSBjaGFubmVscyB3aXRoIHBl bmRpbmcgbm90aWZpZXMsIHNpbmNlIG9ubHkgdGhvc2UKKyAqIGJhY2tlbmRzIGFyZSBpbnRl cmVzdGVkIGluIG5vdGlmaWVzIHdlIHNlbmQuCisgKgorICogQmFja2VuZHMgdGhhdCBhcmUg bm90IGludGVyZXN0ZWQgaW4gb3VyIG5vdGlmaWVzLCB0aGF0IGFyZSBrbm93bgorICogdG8g c3RpbGwgYmUgcG9zaXRpb25lZCBhdCB0aGUgb2xkIHF1ZXVlIGhlYWQsIG9yIGFueXdoZXJl IGluIHRoZQorICogcXVldWUgcmVnaW9uIHdlIGp1c3Qgd3JvdGUsIGNhbiBiZSBzYWZlbHkg YWR2YW5jZWQgZGlyZWN0bHkgdG8gdGhlCisgKiBuZXcgaGVhZCwgc2luY2UgdGhhdCByZWdp b24gaXMga25vd24gdG8gY29udGFpbiBvbmx5IG91ciBvd24KKyAqIG5vdGlmaWNhdGlvbnMu ICBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyeSB3YWtldXBzIHdoZW4gdGhlcmUgaXMKKyAqIG5v dGhpbmcgb2YgaW50ZXJlc3QgdG8gdGhlbS4KKyAqCisgKiBCYWNrZW5kcyB0aGF0IGFyZSBu b3QgaW50ZXJlc3RlZCBpbiBvdXIgbm90aWZpZXMsIHRoYXQgYXJlIGFkdmFuY2luZworICog dG8gYSB0YXJnZXQgcG9zaXRpb24gYmVmb3JlIHRoZSBuZXcgcXVldWUgaGVhZCwgb3IgdGhh dCBhcmUgbm90CisgKiBhZHZhbmNpbmcgYW5kIGFyZSBzdGF0aW9uYXJ5IGF0IGEgcG9zaXRp b24gYmVmb3JlIHRoZSBvbGQgcXVldWUgaGVhZAorICogbmVlZHMgdG8gYmUgc2lnbmFsZWQg c2luY2Ugbm90aWZpY2F0aW9ucyBjb3VsZCBvdGhlcndpc2UgYmUgZGVsYXllZC4KICAqCiAg KiBTaW5jZSB3ZSBrbm93IHRoZSBQcm9jTnVtYmVyIGFuZCB0aGUgUGlkIHRoZSBzaWduYWxp bmcgaXMgcXVpdGUgY2hlYXAuCiAgKgpAQCAtMTU4Myw2ICsyMDEzLDkgQEAgU2lnbmFsQmFj a2VuZHModm9pZCkKIAlpbnQzMgkgICAqcGlkczsKIAlQcm9jTnVtYmVyICpwcm9jbm9zOwog CWludAkJCWNvdW50OworCUxpc3RDZWxsICAgKmxjOworCisJQXNzZXJ0KGNoYW5uZWxIYXNo ICE9IE5VTEwgfHwgcGVuZGluZ05vdGlmeUNoYW5uZWxzID09IE5JTCk7CiAKIAkvKgogCSAq IElkZW50aWZ5IGJhY2tlbmRzIHRoYXQgd2UgbmVlZCB0byBzaWduYWwuICBXZSBkb24ndCB3 YW50IHRvIHNlbmQKQEAgLTE1OTcsMzYgKzIwMzAsOTcgQEAgU2lnbmFsQmFja2VuZHModm9p ZCkKIAljb3VudCA9IDA7CiAKIAlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdf RVhDTFVTSVZFKTsKLQlmb3IgKFByb2NOdW1iZXIgaSA9IFFVRVVFX0ZJUlNUX0xJU1RFTkVS OyBpICE9IElOVkFMSURfUFJPQ19OVU1CRVI7IGkgPSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkp KQorCWZvcmVhY2gobGMsIHBlbmRpbmdOb3RpZnlDaGFubmVscykKIAl7Ci0JCWludDMyCQlw aWQgPSBRVUVVRV9CQUNLRU5EX1BJRChpKTsKLQkJUXVldWVQb3NpdGlvbiBwb3M7CisJCWNo YXIJICAgKmNoYW5uZWwgPSAoY2hhciAqKSBsZmlyc3QobGMpOworCQlDaGFubmVsRW50cnkg KmVudHJ5ID0gTlVMTDsKKwkJTGlzdGVuZXJFbnRyeSAqbGlzdGVuZXJzOwogCi0JCUFzc2Vy dChwaWQgIT0gSW52YWxpZFBpZCk7Ci0JCXBvcyA9IFFVRVVFX0JBQ0tFTkRfUE9TKGkpOwot CQlpZiAoUVVFVUVfQkFDS0VORF9EQk9JRChpKSA9PSBNeURhdGFiYXNlSWQpCisJCWlmIChj aGFubmVsSGFzaCAhPSBOVUxMKQogCQl7CisJCQlDaGFubmVsSGFzaEtleSBrZXk7CisKKwkJ CUNoYW5uZWxIYXNoUHJlcGFyZUtleSgma2V5LCBNeURhdGFiYXNlSWQsIGNoYW5uZWwpOwor CQkJZW50cnkgPSBkc2hhc2hfZmluZChjaGFubmVsSGFzaCwgJmtleSwgZmFsc2UpOworCQl9 CisKKwkJaWYgKGVudHJ5ID09IE5VTEwpCisJCQljb250aW51ZTsJCQkvKiBObyBsaXN0ZW5l cnMgcmVnaXN0ZXJlZCBmb3IgdGhpcyBjaGFubmVsICovCisKKwkJbGlzdGVuZXJzID0gKExp c3RlbmVyRW50cnkgKikgZHNhX2dldF9hZGRyZXNzKGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJ CQkJICBlbnRyeS0+bGlzdGVuZXJzQXJyYXkpOworCisJCWZvciAoaW50IGogPSAwOyBqIDwg ZW50cnktPm51bUxpc3RlbmVyczsgaisrKQorCQl7CisJCQlQcm9jTnVtYmVyCWk7CisJCQlp bnQzMgkJcGlkOworCQkJUXVldWVQb3NpdGlvbiBwb3M7CisKIAkJCS8qCi0JCQkgKiBBbHdh eXMgc2lnbmFsIGxpc3RlbmVycyBpbiBvdXIgb3duIGRhdGFiYXNlLCB1bmxlc3MgdGhleSdy ZQotCQkJICogYWxyZWFkeSBjYXVnaHQgdXAgKHVubGlrZWx5LCBidXQgcG9zc2libGUpLgor CQkJICogT25seSBzaWduYWwgYmFja2VuZHMgdGhhdCBoYXZlIGFjdGl2ZT10cnVlLiAgQmFj a2VuZHMgd2l0aAorCQkJICogYWN0aXZlPWZhbHNlIGhhdmUgZG9uZSBMSVNURU4gaW4gUHJl Q29tbWl0IGJ1dCBub3QgeWV0CisJCQkgKiBjb21taXR0ZWQsIHNvIHRoZXkncmUgbm90IHJl YWxseSBsaXN0ZW5pbmcgeWV0LgogCQkJICovCisJCQlpZiAoIWxpc3RlbmVyc1tqXS5hY3Rp dmUpCisJCQkJY29udGludWU7CisKKwkJCWkgPSBsaXN0ZW5lcnNbal0ucHJvY25vOworCisJ CQlpZiAoUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhpKSkKKwkJCQljb250aW51ZTsK KworCQkJcG9zID0gUVVFVUVfQkFDS0VORF9QT1MoaSk7CisJCQlwaWQgPSBRVUVVRV9CQUNL RU5EX1BJRChpKTsKKworCQkJLyogU2tpcCBpZiBjYXVnaHQgdXAgKi8KIAkJCWlmIChRVUVV RV9QT1NfRVFVQUwocG9zLCBRVUVVRV9IRUFEKSkKIAkJCQljb250aW51ZTsKKworCQkJQXNz ZXJ0KHBpZCAhPSBJbnZhbGlkUGlkKTsKKworCQkJUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVO RElORyhpKSA9IHRydWU7CisJCQlwaWRzW2NvdW50XSA9IHBpZDsKKwkJCXByb2Nub3NbY291 bnRdID0gaTsKKwkJCWNvdW50Kys7CiAJCX0KLQkJZWxzZQorCisJCWRzaGFzaF9yZWxlYXNl X2xvY2soY2hhbm5lbEhhc2gsIGVudHJ5KTsKKwl9CisKKwlpZiAocGVuZGluZ05vdGlmaWVz ICE9IE5VTEwpCisJeworCQlmb3IgKFByb2NOdW1iZXIgaSA9IFFVRVVFX0ZJUlNUX0xJU1RF TkVSOworCQkJIGkgIT0gSU5WQUxJRF9QUk9DX05VTUJFUjsKKwkJCSBpID0gUVVFVUVfTkVY VF9MSVNURU5FUihpKSkKIAkJewotCQkJLyoKLQkJCSAqIExpc3RlbmVycyBpbiBvdGhlciBk YXRhYmFzZXMgc2hvdWxkIGJlIHNpZ25hbGVkIG9ubHkgaWYgdGhleQotCQkJICogYXJlIGZh ciBiZWhpbmQuCi0JCQkgKi8KLQkJCWlmIChhc3luY1F1ZXVlUGFnZURpZmYoUVVFVUVfUE9T X1BBR0UoUVVFVUVfSEVBRCksCi0JCQkJCQkJCSAgIFFVRVVFX1BPU19QQUdFKHBvcykpIDwg UVVFVUVfQ0xFQU5VUF9ERUxBWSkKKwkJCVF1ZXVlUG9zaXRpb24gcG9zOworCQkJaW50MzIJ CXBpZDsKKworCQkJaWYgKFFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoaSkpCiAJCQkJ Y29udGludWU7CisKKwkJCXBvcyA9IFFVRVVFX0JBQ0tFTkRfUE9TKGkpOworCQkJcGlkID0g UVVFVUVfQkFDS0VORF9QSUQoaSk7CisKKwkJCWlmIChRVUVVRV9CQUNLRU5EX0lTX0FEVkFO Q0lORyhpKSA/CisJCQkJUVVFVUVfUE9TX1BSRUNFREVTKFFVRVVFX0JBQ0tFTkRfQURWQU5D SU5HX1BPUyhpKSwgcXVldWVIZWFkQWZ0ZXJXcml0ZSkgOgorCQkJCVFVRVVFX1BPU19QUkVD RURFUyhwb3MsIHF1ZXVlSGVhZEJlZm9yZVdyaXRlKSkKKwkJCXsKKwkJCQlBc3NlcnQocGlk ICE9IEludmFsaWRQaWQpOworCisJCQkJUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhp KSA9IHRydWU7CisJCQkJcGlkc1tjb3VudF0gPSBwaWQ7CisJCQkJcHJvY25vc1tjb3VudF0g PSBpOworCQkJCWNvdW50Kys7CisJCQl9CisJCQllbHNlIGlmICghUVVFVUVfQkFDS0VORF9J U19BRFZBTkNJTkcoaSkgJiYKKwkJCQkJIFFVRVVFX1BPU19QUkVDRURFUyhwb3MsIHF1ZXVl SGVhZEFmdGVyV3JpdGUpKQorCQkJeworCQkJCUFzc2VydCghUVVFVUVfUE9TX1BSRUNFREVT KHBvcywgcXVldWVIZWFkQmVmb3JlV3JpdGUpKTsKKworCQkJCVFVRVVFX0JBQ0tFTkRfUE9T KGkpID0gcXVldWVIZWFkQWZ0ZXJXcml0ZTsKKwkJCX0KIAkJfQotCQkvKiBPSywgbmVlZCB0 byBzaWduYWwgdGhpcyBvbmUgKi8KLQkJcGlkc1tjb3VudF0gPSBwaWQ7Ci0JCXByb2Nub3Nb Y291bnRdID0gaTsKLQkJY291bnQrKzsKIAl9CiAJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1 ZUxvY2spOwogCkBAIC0xNjczLDEyICsyMTY3LDk3IEBAIEF0QWJvcnRfTm90aWZ5KHZvaWQp CiAJLyoKIAkgKiBJZiB3ZSBMSVNURU4gYnV0IHRoZW4gcm9sbCBiYWNrIHRoZSB0cmFuc2Fj dGlvbiBhZnRlciBQcmVDb21taXRfTm90aWZ5LAogCSAqIHdlIGhhdmUgcmVnaXN0ZXJlZCBh cyBhIGxpc3RlbmVyIGJ1dCBoYXZlIG5vdCBtYWRlIGFueSBlbnRyeSBpbgotCSAqIGxpc3Rl bkNoYW5uZWxzLiAgSW4gdGhhdCBjYXNlLCBkZXJlZ2lzdGVyIGFnYWluLgorCSAqIGxpc3Rl bkNoYW5uZWxzSGFzaC4gIEluIHRoYXQgY2FzZSwgZGVyZWdpc3RlciBhZ2Fpbi4KIAkgKi8K LQlpZiAoYW1SZWdpc3RlcmVkTGlzdGVuZXIgJiYgbGlzdGVuQ2hhbm5lbHMgPT0gTklMKQor CWlmIChhbVJlZ2lzdGVyZWRMaXN0ZW5lciAmJgorCQkobGlzdGVuQ2hhbm5lbHNIYXNoID09 IE5VTEwgfHwgaGFzaF9nZXRfbnVtX2VudHJpZXMobGlzdGVuQ2hhbm5lbHNIYXNoKSA9PSAw KSkKIAkJYXN5bmNRdWV1ZVVucmVnaXN0ZXIoKTsKIAotCS8qIEFuZCBjbGVhbiB1cCAqLwor CS8qCisJICogUmVtb3ZlIGFueSBjaGFubmVscyB3ZSBhZGRlZCBkdXJpbmcgRXhlY19MaXN0 ZW5QcmVDb21taXQuICBXZSBuZWVkIHRvCisJICogY2xlYW4gdXAgYm90aCB0aGUgbG9jYWwg bGlzdGVuQ2hhbm5lbHNIYXNoIGFuZCBhbnkgaW5hY3RpdmUgZW50cmllcyBpbgorCSAqIHRo ZSBzaGFyZWQgY2hhbm5lbEhhc2ggdG8gYXZvaWQgYWNjdW11bGF0aW5nIHN0YWxlIGRhdGEu CisJICovCisJaWYgKHBlbmRpbmdBY3Rpb25zICE9IE5VTEwpCisJeworCQlMaXN0Q2VsbCAg ICpwOworCisJCWZvcmVhY2gocCwgcGVuZGluZ0FjdGlvbnMtPmFjdGlvbnMpCisJCXsKKwkJ CUxpc3RlbkFjdGlvbiAqYWN0cmVjID0gKExpc3RlbkFjdGlvbiAqKSBsZmlyc3QocCk7CisJ CQlDaGFubmVsSGFzaEtleSBrZXk7CisJCQlDaGFubmVsRW50cnkgKmVudHJ5OworCQkJTGlz dGVuZXJFbnRyeSAqbGlzdGVuZXJzOworCQkJYm9vbAkJcmVtb3ZlRnJvbUxvY2FsOworCQkJ Ym9vbAkJZm91bmQ7CisJCQlpbnQJCQlpOworCisJCQlpZiAoYWN0cmVjLT5hY3Rpb24gIT0g TElTVEVOX0xJU1RFTikKKwkJCQljb250aW51ZTsKKworCQkJLyoKKwkJCSAqIEZvciBlYWNo IExJU1RFTiBhY3Rpb24sIGRldGVybWluZSBpZiB3ZSBzaG91bGQgY2xlYW4gdXAgdGhlCisJ CQkgKiBsb2NhbCBhbmQvb3Igc2hhcmVkIGhhc2ggZW50cmllcy4gIElmIHdlIGhhdmUgYW4g YWN0aXZlPXRydWUKKwkJCSAqIGVudHJ5IGluIHRoZSBzaGFyZWQgaGFzaCwgd2Ugd2VyZSBh bHJlYWR5IGxpc3RlbmluZyBmcm9tIGEKKwkJCSAqIHByZXZpb3VzIHRyYW5zYWN0aW9uLCBz byBsZWF2ZSBldmVyeXRoaW5nIGFsb25lLiAgT3RoZXJ3aXNlLAorCQkJICogY2xlYW4gdXAg d2hhdCB0aGlzIHRyYW5zYWN0aW9uIGFkZGVkLgorCQkJICovCisJCQlyZW1vdmVGcm9tTG9j YWwgPSB0cnVlOworCQkJZm91bmQgPSBmYWxzZTsKKworCQkJaWYgKGNoYW5uZWxIYXNoICE9 IE5VTEwpCisJCQl7CisJCQkJQ2hhbm5lbEhhc2hQcmVwYXJlS2V5KCZrZXksIE15RGF0YWJh c2VJZCwgYWN0cmVjLT5jaGFubmVsKTsKKwkJCQllbnRyeSA9IGRzaGFzaF9maW5kKGNoYW5u ZWxIYXNoLCAma2V5LCB0cnVlKTsKKworCQkJCWlmIChlbnRyeSAhPSBOVUxMKQorCQkJCXsK KwkJCQkJbGlzdGVuZXJzID0gKExpc3RlbmVyRW50cnkgKikgZHNhX2dldF9hZGRyZXNzKGNo YW5uZWxEU0EsCisJCQkJCQkJCQkJCQkJCQkJICBlbnRyeS0+bGlzdGVuZXJzQXJyYXkpOwor CisJCQkJCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+bnVtTGlzdGVuZXJzOyBpKyspCisJCQkJ CXsKKwkJCQkJCWlmIChsaXN0ZW5lcnNbaV0ucHJvY25vID09IE15UHJvY051bWJlcikKKwkJ CQkJCXsKKwkJCQkJCQlmb3VuZCA9IHRydWU7CisKKwkJCQkJCQlpZiAobGlzdGVuZXJzW2ld LmFjdGl2ZSkKKwkJCQkJCQl7CisJCQkJCQkJCS8qIEFscmVhZHkgY29tbWl0dGVkIC0gbGVh dmUgYm90aCBoYXNoZXMgYWxvbmUgKi8KKwkJCQkJCQkJcmVtb3ZlRnJvbUxvY2FsID0gZmFs c2U7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UKKwkJCQkJCQl7CisJCQkJCQkJCS8qIEluYWN0 aXZlIC0gcmVtb3ZlIGZyb20gc2hhcmVkIGhhc2ggKi8KKwkJCQkJCQkJZW50cnktPm51bUxp c3RlbmVycy0tOworCQkJCQkJCQlpZiAoaSA8IGVudHJ5LT5udW1MaXN0ZW5lcnMpCisJCQkJ CQkJCQltZW1tb3ZlKCZsaXN0ZW5lcnNbaV0sICZsaXN0ZW5lcnNbaSArIDFdLAorCQkJCQkJ CQkJCQlzaXplb2YoTGlzdGVuZXJFbnRyeSkgKiAoZW50cnktPm51bUxpc3RlbmVycyAtIGkp KTsKKworCQkJCQkJCQlpZiAoZW50cnktPm51bUxpc3RlbmVycyA9PSAwKQorCQkJCQkJCQl7 CisJCQkJCQkJCQlkc2FfZnJlZShjaGFubmVsRFNBLCBlbnRyeS0+bGlzdGVuZXJzQXJyYXkp OworCQkJCQkJCQkJZHNoYXNoX2RlbGV0ZV9lbnRyeShjaGFubmVsSGFzaCwgZW50cnkpOwor CQkJCQkJCQl9CisJCQkJCQkJCWVsc2UKKwkJCQkJCQkJCWRzaGFzaF9yZWxlYXNlX2xvY2so Y2hhbm5lbEhhc2gsIGVudHJ5KTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9 CisJCQkJCX0KKworCQkJCQlpZiAoIWZvdW5kKQorCQkJCQkJZHNoYXNoX3JlbGVhc2VfbG9j ayhjaGFubmVsSGFzaCwgZW50cnkpOworCQkJCX0KKwkJCX0KKworCQkJLyogUmVtb3ZlIGZy b20gbG9jYWwgaGFzaCBpZiBhcHByb3ByaWF0ZSAqLworCQkJaWYgKHJlbW92ZUZyb21Mb2Nh bCAmJiBsaXN0ZW5DaGFubmVsc0hhc2ggIT0gTlVMTCkKKwkJCQkodm9pZCkgaGFzaF9zZWFy Y2gobGlzdGVuQ2hhbm5lbHNIYXNoLCBhY3RyZWMtPmNoYW5uZWwsCisJCQkJCQkJCSAgIEhB U0hfUkVNT1ZFLCBOVUxMKTsKKwkJfQorCX0KKwogCUNsZWFyUGVuZGluZ0FjdGlvbnNBbmRO b3RpZmllcygpOwogfQogCkBAIC0xODU0LDIwICsyNDMzLDI5IEBAIGFzeW5jUXVldWVSZWFk QWxsTm90aWZpY2F0aW9ucyh2b2lkKQogCVF1ZXVlUG9zaXRpb24gaGVhZDsKIAlTbmFwc2hv dAlzbmFwc2hvdDsKIAotCS8qIEZldGNoIGN1cnJlbnQgc3RhdGUgKi8KKwkvKgorCSAqIEZl dGNoIGN1cnJlbnQgc3RhdGUsIGluZGljYXRlIHRvIG90aGVycyB0aGF0IHdlIGhhdmUgd29r ZW4gdXAsIGFuZCB0aGF0CisJICogd2Ugbm93IHdpbGwgYmUgYWR2YW5jaW5nIG91ciBwb3Np dGlvbi4KKwkgKi8KIAlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdfU0hBUkVE KTsKIAkvKiBBc3NlcnQgY2hlY2tzIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIHN0YXRlIGVudHJ5 ICovCiAJQXNzZXJ0KE15UHJvY1BpZCA9PSBRVUVVRV9CQUNLRU5EX1BJRChNeVByb2NOdW1i ZXIpKTsKKwlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKE15UHJvY051bWJlcikgPSBm YWxzZTsKKwloZWFkID0gUVVFVUVfSEVBRDsKIAlwb3MgPSBRVUVVRV9CQUNLRU5EX1BPUyhN eVByb2NOdW1iZXIpOwotCWhlYWQgPSBRVUVVRV9IRUFEOwotCUxXTG9ja1JlbGVhc2UoTm90 aWZ5UXVldWVMb2NrKTsKIAogCWlmIChRVUVVRV9QT1NfRVFVQUwocG9zLCBoZWFkKSkKIAl7 CiAJCS8qIE5vdGhpbmcgdG8gZG8sIHdlIGhhdmUgcmVhZCBhbGwgbm90aWZpY2F0aW9ucyBh bHJlYWR5LiAqLworCQlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7CiAJCXJldHVy bjsKIAl9CiAKKwlRVUVVRV9CQUNLRU5EX0lTX0FEVkFOQ0lORyhNeVByb2NOdW1iZXIpID0g dHJ1ZTsKKwlRVUVVRV9CQUNLRU5EX0FEVkFOQ0lOR19QT1MoTXlQcm9jTnVtYmVyKSA9IGhl YWQ7CisKKwlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7CisKIAkvKi0tLS0tLS0t LS0KIAkgKiBHZXQgc25hcHNob3Qgd2UnbGwgdXNlIHRvIGRlY2lkZSB3aGljaCB4YWN0cyBh cmUgc3RpbGwgaW4gcHJvZ3Jlc3MuCiAJICogVGhpcyBpcyB0cmlja2llciB0aGFuIGl0IG1p Z2h0IHNlZW0sIGJlY2F1c2Ugb2YgcmFjZSBjb25kaXRpb25zLgpAQCAtMTk1NCw2ICsyNTQy LDggQEAgYXN5bmNRdWV1ZVJlYWRBbGxOb3RpZmljYXRpb25zKHZvaWQpCiAKIAkJLyogVXBk YXRlIHNoYXJlZCBzdGF0ZSAqLwogCQlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywg TFdfU0hBUkVEKTsKKworCQlRVUVVRV9CQUNLRU5EX0lTX0FEVkFOQ0lORyhNeVByb2NOdW1i ZXIpID0gZmFsc2U7CiAJCVFVRVVFX0JBQ0tFTkRfUE9TKE15UHJvY051bWJlcikgPSBwb3M7 CiAJCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2NrKTsKIApAQCAtMjA1NSw3ICsyNjQ1 LDcgQEAgYXN5bmNRdWV1ZVByb2Nlc3NQYWdlRW50cmllcyhRdWV1ZVBvc2l0aW9uICpjdXJy ZW50LAogCQkJICogb3ZlciBpdCBvbiB0aGUgZmlyc3QgTElTVEVOIGluIGEgc2Vzc2lvbiwg YW5kIG5vdCBnZXQgc3R1Y2sgb24KIAkJCSAqIGl0IGluZGVmaW5pdGVseS4KIAkJCSAqLwot CQkJaWYgKGxpc3RlbkNoYW5uZWxzID09IE5JTCkKKwkJCWlmIChsaXN0ZW5DaGFubmVsc0hh c2ggPT0gTlVMTCB8fCBoYXNoX2dldF9udW1fZW50cmllcyhsaXN0ZW5DaGFubmVsc0hhc2gp ID09IDApCiAJCQkJY29udGludWU7CiAKIAkJCWlmIChUcmFuc2FjdGlvbklkRGlkQ29tbWl0 KHFlLT54aWQpKQpAQCAtMjMxMCw3ICsyOTAwLDcgQEAgUHJvY2Vzc0luY29taW5nTm90aWZ5 KGJvb2wgZmx1c2gpCiAJbm90aWZ5SW50ZXJydXB0UGVuZGluZyA9IGZhbHNlOwogCiAJLyog RG8gbm90aGluZyBlbHNlIGlmIHdlIGFyZW4ndCBhY3RpdmVseSBsaXN0ZW5pbmcgKi8KLQlp ZiAobGlzdGVuQ2hhbm5lbHMgPT0gTklMKQorCWlmIChsaXN0ZW5DaGFubmVsc0hhc2ggPT0g TlVMTCB8fCBoYXNoX2dldF9udW1fZW50cmllcyhsaXN0ZW5DaGFubmVsc0hhc2gpID09IDAp CiAJCXJldHVybjsKIAogCWlmIChUcmFjZV9ub3RpZnkpCkBAIC0yNDE0LDEzICszMDA0LDE1 IEBAIEFkZEV2ZW50VG9QZW5kaW5nTm90aWZpZXMoTm90aWZpY2F0aW9uICpuKQogewogCUFz c2VydChwZW5kaW5nTm90aWZpZXMtPmV2ZW50cyAhPSBOSUwpOwogCi0JLyogQ3JlYXRlIHRo ZSBoYXNoIHRhYmxlIGlmIGl0J3MgdGltZSB0byAqLworCS8qIENyZWF0ZSB0aGUgaGFzaCB0 YWJsZXMgaWYgaXQncyB0aW1lIHRvICovCiAJaWYgKGxpc3RfbGVuZ3RoKHBlbmRpbmdOb3Rp Zmllcy0+ZXZlbnRzKSA+PSBNSU5fSEFTSEFCTEVfTk9USUZJRVMgJiYKIAkJcGVuZGluZ05v dGlmaWVzLT5oYXNodGFiID09IE5VTEwpCiAJewogCQlIQVNIQ1RMCQloYXNoX2N0bDsKIAkJ TGlzdENlbGwgICAqbDsKIAorCQlBc3NlcnQocGVuZGluZ05vdGlmaWVzLT5jaGFubmVsSGFz aHRhYiA9PSBOVUxMKTsKKwogCQkvKiBDcmVhdGUgdGhlIGhhc2ggdGFibGUgKi8KIAkJaGFz aF9jdGwua2V5c2l6ZSA9IHNpemVvZihOb3RpZmljYXRpb24gKik7CiAJCWhhc2hfY3RsLmVu dHJ5c2l6ZSA9IHNpemVvZihzdHJ1Y3QgTm90aWZpY2F0aW9uSGFzaCk7CkBAIC0yNDMzLDEw ICszMDI1LDIyIEBAIEFkZEV2ZW50VG9QZW5kaW5nTm90aWZpZXMoTm90aWZpY2F0aW9uICpu KQogCQkJCQkJJmhhc2hfY3RsLAogCQkJCQkJSEFTSF9FTEVNIHwgSEFTSF9GVU5DVElPTiB8 IEhBU0hfQ09NUEFSRSB8IEhBU0hfQ09OVEVYVCk7CiAKKwkJLyogQ3JlYXRlIHRoZSBjaGFu bmVsIGhhc2ggdGFibGUgKi8KKwkJbWVtc2V0KCZoYXNoX2N0bCwgMCwgc2l6ZW9mKGhhc2hf Y3RsKSk7CisJCWhhc2hfY3RsLmtleXNpemUgPSBOQU1FREFUQUxFTjsKKwkJaGFzaF9jdGwu ZW50cnlzaXplID0gc2l6ZW9mKHN0cnVjdCBDaGFubmVsSGFzaCk7CisJCWhhc2hfY3RsLmhj eHQgPSBDdXJUcmFuc2FjdGlvbkNvbnRleHQ7CisJCXBlbmRpbmdOb3RpZmllcy0+Y2hhbm5l bEhhc2h0YWIgPQorCQkJaGFzaF9jcmVhdGUoIlBlbmRpbmcgTm90aWZ5IENoYW5uZWxzIiwK KwkJCQkJCTY0TCwKKwkJCQkJCSZoYXNoX2N0bCwKKwkJCQkJCUhBU0hfRUxFTSB8IEhBU0hf U1RSSU5HUyB8IEhBU0hfQ09OVEVYVCk7CisKIAkJLyogSW5zZXJ0IGFsbCB0aGUgYWxyZWFk eS1leGlzdGluZyBldmVudHMgKi8KIAkJZm9yZWFjaChsLCBwZW5kaW5nTm90aWZpZXMtPmV2 ZW50cykKIAkJewogCQkJTm90aWZpY2F0aW9uICpvbGRuID0gKE5vdGlmaWNhdGlvbiAqKSBs Zmlyc3QobCk7CisJCQljaGFyCSAgICpjaGFubmVsID0gb2xkbi0+ZGF0YTsKIAkJCWJvb2wJ CWZvdW5kOwogCiAJCQkodm9pZCkgaGFzaF9zZWFyY2gocGVuZGluZ05vdGlmaWVzLT5oYXNo dGFiLApAQCAtMjQ0NCwyMiArMzA0OCw0MiBAQCBBZGRFdmVudFRvUGVuZGluZ05vdGlmaWVz KE5vdGlmaWNhdGlvbiAqbikKIAkJCQkJCQkgICBIQVNIX0VOVEVSLAogCQkJCQkJCSAgICZm b3VuZCk7CiAJCQlBc3NlcnQoIWZvdW5kKTsKKworCQkJLyogSW5zZXJ0IGNoYW5uZWwgaW50 byBjaGFubmVsSGFzaHRhYiAqLworCQkJKHZvaWQpIGhhc2hfc2VhcmNoKHBlbmRpbmdOb3Rp Zmllcy0+Y2hhbm5lbEhhc2h0YWIsCisJCQkJCQkJICAgY2hhbm5lbCwKKwkJCQkJCQkgICBI QVNIX0VOVEVSLAorCQkJCQkJCSAgICZmb3VuZCk7CisJCQkvKiBmb3VuZCBtYXkgYmUgdHJ1 ZSBpZiBtdWx0aXBsZSBldmVudHMgb24gc2FtZSBjaGFubmVsICovCiAJCX0KIAl9CiAKIAkv KiBBZGQgbmV3IGV2ZW50IHRvIHRoZSBsaXN0LCBpbiBvcmRlciAqLwogCXBlbmRpbmdOb3Rp Zmllcy0+ZXZlbnRzID0gbGFwcGVuZChwZW5kaW5nTm90aWZpZXMtPmV2ZW50cywgbik7CiAK LQkvKiBBZGQgZXZlbnQgdG8gdGhlIGhhc2ggdGFibGUgaWYgbmVlZGVkICovCisJLyogQWRk IGV2ZW50IHRvIHRoZSBoYXNoIHRhYmxlcyBpZiBuZWVkZWQgKi8KIAlpZiAocGVuZGluZ05v dGlmaWVzLT5oYXNodGFiICE9IE5VTEwpCiAJewogCQlib29sCQlmb3VuZDsKIAorCQlBc3Nl cnQocGVuZGluZ05vdGlmaWVzLT5jaGFubmVsSGFzaHRhYiAhPSBOVUxMKTsKKwogCQkodm9p ZCkgaGFzaF9zZWFyY2gocGVuZGluZ05vdGlmaWVzLT5oYXNodGFiLAogCQkJCQkJICAgJm4s CiAJCQkJCQkgICBIQVNIX0VOVEVSLAogCQkJCQkJICAgJmZvdW5kKTsKIAkJQXNzZXJ0KCFm b3VuZCk7CisKKwkJLyogQWRkIGNoYW5uZWwgdG8gY2hhbm5lbEhhc2h0YWIgKi8KKwkJewor CQkJY2hhcgkgICAqY2hhbm5lbCA9IG4tPmRhdGE7CisKKwkJCSh2b2lkKSBoYXNoX3NlYXJj aChwZW5kaW5nTm90aWZpZXMtPmNoYW5uZWxIYXNodGFiLAorCQkJCQkJCSAgIGNoYW5uZWws CisJCQkJCQkJICAgSEFTSF9FTlRFUiwKKwkJCQkJCQkgICAmZm91bmQpOworCQkJLyogZm91 bmQgbWF5IGJlIHRydWUgaWYgd2UgYWxyZWFkeSBoYXZlIGFuIGV2ZW50IG9uIHRoaXMgY2hh bm5lbCAqLworCQl9CiAJfQogfQogCkBAIC0yNDk3LDcgKzMxMjEsNyBAQCBub3RpZmljYXRp b25fbWF0Y2goY29uc3Qgdm9pZCAqa2V5MSwgY29uc3Qgdm9pZCAqa2V5MiwgU2l6ZSBrZXlz aXplKQogCXJldHVybiAxOwkJCQkJLyogbm90IGVxdWFsICovCiB9CiAKLS8qIENsZWFyIHRo ZSBwZW5kaW5nQWN0aW9ucyBhbmQgcGVuZGluZ05vdGlmaWVzIGxpc3RzLiAqLworLyogQ2xl YXIgdGhlIHBlbmRpbmdBY3Rpb25zLCBwZW5kaW5nTm90aWZpZXMsIGFuZCBwZW5kaW5nTm90 aWZ5Q2hhbm5lbHMgbGlzdHMuICovCiBzdGF0aWMgdm9pZAogQ2xlYXJQZW5kaW5nQWN0aW9u c0FuZE5vdGlmaWVzKHZvaWQpCiB7CkBAIC0yNTA5LDYgKzMxMzMsNyBAQCBDbGVhclBlbmRp bmdBY3Rpb25zQW5kTm90aWZpZXModm9pZCkKIAkgKi8KIAlwZW5kaW5nQWN0aW9ucyA9IE5V TEw7CiAJcGVuZGluZ05vdGlmaWVzID0gTlVMTDsKKwlwZW5kaW5nTm90aWZ5Q2hhbm5lbHMg PSBOSUw7CiB9CiAKIC8qCkBAIC0yNTE5LDMgKzMxNDQsMTYgQEAgY2hlY2tfbm90aWZ5X2J1 ZmZlcnMoaW50ICpuZXd2YWwsIHZvaWQgKipleHRyYSwgR3VjU291cmNlIHNvdXJjZSkKIHsK IAlyZXR1cm4gY2hlY2tfc2xydV9idWZmZXJzKCJub3RpZnlfYnVmZmVycyIsIG5ld3ZhbCk7 CiB9CisKKworLyoKKyAqIENoYW5uZWxIYXNoUHJlcGFyZUtleQorICoJCVByZXBhcmUgYSBj aGFubmVsIGtleSBmb3IgdXNlIGFzIGEgaGFzaCBrZXkuCisgKi8KK3N0YXRpYyBpbmxpbmUg dm9pZAorQ2hhbm5lbEhhc2hQcmVwYXJlS2V5KENoYW5uZWxIYXNoS2V5ICprZXksIE9pZCBk Ym9pZCwgY29uc3QgY2hhciAqY2hhbm5lbCkKK3sKKwltZW1zZXQoa2V5LCAwLCBzaXplb2Yo Q2hhbm5lbEhhc2hLZXkpKTsKKwlrZXktPmRib2lkID0gZGJvaWQ7CisJc3RybGNweShrZXkt PmNoYW5uZWwsIGNoYW5uZWwsIE5BTUVEQVRBTEVOKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0IGIvc3JjL2JhY2tl bmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKaW5kZXggYzFhYzcxZmY3 ZjIuLjdjMmNmOTYwMDkzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0 eS93YWl0X2V2ZW50X25hbWVzLnR4dAorKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0 eS93YWl0X2V2ZW50X25hbWVzLnR4dApAQCAtMzY5LDYgKzM2OSw3IEBAIFN1YnRyYW5zQnVm ZmVyCSJXYWl0aW5nIGZvciBJL08gb24gYSBzdWItdHJhbnNhY3Rpb24gU0xSVSBidWZmZXIu IgogTXVsdGlYYWN0T2Zmc2V0QnVmZmVyCSJXYWl0aW5nIGZvciBJL08gb24gYSBtdWx0aXhh Y3Qgb2Zmc2V0IFNMUlUgYnVmZmVyLiIKIE11bHRpWGFjdE1lbWJlckJ1ZmZlcgkiV2FpdGlu ZyBmb3IgSS9PIG9uIGEgbXVsdGl4YWN0IG1lbWJlciBTTFJVIGJ1ZmZlci4iCiBOb3RpZnlC dWZmZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBhIDxjb21tYW5kPk5PVElGWTwvY29tbWFuZD4g bWVzc2FnZSBTTFJVIGJ1ZmZlci4iCitOb3RpZnlDaGFubmVsSGFzaAkiV2FpdGluZyB0byBh Y2Nlc3MgdGhlIDxjb21tYW5kPk5PVElGWTwvY29tbWFuZD4gY2hhbm5lbCBoYXNoIHRhYmxl LiIKIFNlcmlhbEJ1ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9uIGEgc2VyaWFsaXphYmxlIHRy YW5zYWN0aW9uIGNvbmZsaWN0IFNMUlUgYnVmZmVyLiIKIFdBTEluc2VydAkiV2FpdGluZyB0 byBpbnNlcnQgV0FMIGRhdGEgaW50byBhIG1lbW9yeSBidWZmZXIuIgogQnVmZmVyQ29udGVu dAkiV2FpdGluZyB0byBhY2Nlc3MgYSBkYXRhIHBhZ2UgaW4gbWVtb3J5LiIKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oIGIvc3JjL2luY2x1ZGUvc3Rv cmFnZS9sd2xvY2tsaXN0LmgKaW5kZXggNWIwY2UzODM0MDguLjQyMzY5NjVlNzJhIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaAorKysgYi9zcmMvaW5j bHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaApAQCAtMTAxLDYgKzEwMSw3IEBAIFBHX0xXTE9D S1RSQU5DSEUoU1VCVFJBTlNfQlVGRkVSLCBTdWJ0cmFuc0J1ZmZlcikKIFBHX0xXTE9DS1RS QU5DSEUoTVVMVElYQUNUT0ZGU0VUX0JVRkZFUiwgTXVsdGlYYWN0T2Zmc2V0QnVmZmVyKQog UEdfTFdMT0NLVFJBTkNIRShNVUxUSVhBQ1RNRU1CRVJfQlVGRkVSLCBNdWx0aVhhY3RNZW1i ZXJCdWZmZXIpCiBQR19MV0xPQ0tUUkFOQ0hFKE5PVElGWV9CVUZGRVIsIE5vdGlmeUJ1ZmZl cikKK1BHX0xXTE9DS1RSQU5DSEUoTk9USUZZX0NIQU5ORUxfSEFTSCwgTm90aWZ5Q2hhbm5l bEhhc2gpCiBQR19MV0xPQ0tUUkFOQ0hFKFNFUklBTF9CVUZGRVIsIFNlcmlhbEJ1ZmZlcikK IFBHX0xXTE9DS1RSQU5DSEUoV0FMX0lOU0VSVCwgV0FMSW5zZXJ0KQogUEdfTFdMT0NLVFJB TkNIRShCVUZGRVJfQ09OVEVOVCwgQnVmZmVyQ29udGVudCkKZGlmZiAtLWdpdCBhL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKaW5kZXggYzc1MWMyNWEwNGQuLjNkMzcxYzI4MDhkIDEwMDY0NAotLS0gYS9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdApAQCAtNDEyLDYgKzQxMiw4IEBAIENhdGFsb2dJZE1hcEVudHJ5 CiBDYXRhbG9nSW5kZXhTdGF0ZQogQ2hhbmdlVmFyTm9kZXNfY2FsbGJhY2sKIENoYW5nZVZh ck5vZGVzX2NvbnRleHQKK0NoYW5uZWxFbnRyeQorQ2hhbm5lbEhhc2hLZXkKIENoZWNrUG9p bnQKIENoZWNrUG9pbnRTdG10CiBDaGVja3BvaW50U3RhdHNEYXRhCkBAIC0xNTY0LDYgKzE1 NjYsNyBAQCBMaXN0RGljdGlvbmFyeQogTGlzdFBhcnNlZExleAogTGlzdGVuQWN0aW9uCiBM aXN0ZW5BY3Rpb25LaW5kCitMaXN0ZW5lckVudHJ5CiBMaXN0ZW5TdG10CiBMb0luZm8KIExv YWRTdG10Ci0tIAoyLjUwLjEKCg== --4ec6353fcea643429b143805b82d1ba9--