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.94.2) (envelope-from ) id 1v98IC-00ASGX-Nq for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Oct 2025 20:40:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1v98IA-0089iZ-3u for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Oct 2025 20:40:13 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v98I8-0089iR-VT for pgsql-hackers@lists.postgresql.org; Wed, 15 Oct 2025 20:40:12 +0000 Received: from fout-a8-smtp.messagingengine.com ([103.168.172.151]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1v98I4-002OMY-2b for pgsql-hackers@postgresql.org; Wed, 15 Oct 2025 20:40:11 +0000 Received: from phl-compute-04.internal (phl-compute-04.internal [10.202.2.44]) by mailfout.phl.internal (Postfix) with ESMTP id 980FDEC00A2; Wed, 15 Oct 2025 16:40:05 -0400 (EDT) Received: from phl-imap-03 ([10.202.2.93]) by phl-compute-04.internal (MEProxy); Wed, 15 Oct 2025 16:40:05 -0400 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=fm2; t=1760560805; x=1760647205; bh=W7I7el2ytp KF2LmzvlFZVLy+9F/1VqcS79bISpGt3JQ=; b=kwxEjoiEm1uzy5lZf+Ympkb2WD AKUi0WpBU6lclmFUwkIJ2W/TkPFiJD6zY3ajfCiu2jMlyowhLjcjNOz3z7Fn0aE0 uK929VxHTK32J+zl69sMEJRBBapV6KpmLn49+W54L+Xq0JD89BINyUt1/H6sYltX lx+CXRv45tsByrkM6N1Mx+G4PbRfHns398vLI1vaimEyLd5vb6e8uXY6U8QedbMW H9wkHqysOI1BMVpvKHQUq4ogY2j1dbs2vVgDVO2qpWjbwU7BL3aEAPj9oof80q7Q kUbjSM6HEENTaxeRrTBZfPA07kwSNQal4b8I0Cha+bWSoZCwzc6JYAmJRw6g== 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=fm2; t= 1760560805; x=1760647205; bh=W7I7el2ytpKF2LmzvlFZVLy+9F/1VqcS79b ISpGt3JQ=; b=STV+na540SIMFpNSq5nfqYIZF9Ml6wil4igNzxXYrjPjcGfCATG G2GaCIF4iMn0FIEIBVpaJQwzjLVcXVMbn+QcPwxHXi/xxF0ZnfT97sPE54rahr11 k/M1QqPVSzcizkoYN4NylywpTArRSd+s5Bes4EP2IgQs4CUFYp0XWWUfTENV1mlk pw4Anh2zG7tYllyoXjLwNYCLLac2uuXyoCSOErpwKowy9K4FxIoonfroJJ4Ub0kY cbqsAYWf+IBF4zcO21YCpzo/ET97GJ0DcW1yOnY8gQoXCh92tNcylD6DliDAVCcw P8zH8XBRIpee5IQgxqJF0MYemHpl3J0GsCA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdduvdegfeelucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpefoggffhffvvefkjghfufgtsehmtderre ertddtnecuhfhrohhmpedflfhovghlucflrggtohgsshhonhdfuceojhhovghlsegtohhm phhilhgvrhdrohhrgheqnecuggftrfgrthhtvghrnhepfffgleffffdvhefhieegfeeije dujedvieeuveeugefgveeukeevieethefhteeinecuvehluhhsthgvrhfuihiivgeptden ucfrrghrrghmpehmrghilhhfrhhomhepjhhovghlsegtohhmphhilhgvrhdrohhrghdpnh gspghrtghpthhtohepfedpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtoheprghrshgv nhhihidrmhhukhhhihhnrdguvghvsehgmhgrihhlrdgtohhmpdhrtghpthhtohepphhgsh hqlhdqhhgrtghkvghrshesphhoshhtghhrvghsqhhlrdhorhhgpdhrtghpthhtohepthhg lhesshhsshdrphhghhdrphgrrdhush X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id 219C718E0063; Wed, 15 Oct 2025 16:40:05 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: AZ7XRsRLdGms Date: Wed, 15 Oct 2025 22:39:14 +0200 From: "Joel Jacobson" To: "Arseniy Mukhin" , "Tom Lane" Cc: pgsql-hackers Message-Id: <82ad6bc2-2520-4ff9-92b9-1f5e2f4ae78e@app.fastmail.com> In-Reply-To: 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> <2a30bcf1-aee2-4b07-a302-11e4b350adaf@app.fastmail.com> <1126737.1760537761@sss.pgh.pa.us> Subject: Re: Optimize LISTEN/NOTIFY Content-Type: multipart/mixed; boundary=e3629fae26ca493e8eec9fd65226a09d List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --e3629fae26ca493e8eec9fd65226a09d Content-Type: text/plain Content-Transfer-Encoding: 7bit On Wed, Oct 15, 2025, at 13:19, Arseniy Mukhin wrote: > I tried the patch and it seems listeners sometimes don't receive > notifications. To reproduce it you can try to listen to the channel in > one psql session and send notifications from another psql session. But > all tests are fine, so I tried to write a TAP test to reproduce it. It > passes on master and fails with the patch, so looks like it's real. > Please find the repro in attachments. I added the TAP test to amcheck > module just for simplicity. Indeed a good catch! Thanks for the TAP test. I've migrated it to async-notify.spec, included in 0001-optimize_listen_notify-v18.patch: * Check that notifications sent from a backend that has not done LISTEN are properly delivered to a listener in another backend To fix this, we now do an initChannelHash call at the beginning of SignalBackends, since the problem was that if no LISTEN had been done in the session which did a NOTIFY, the channel would not have been initiated. Added a point about this in the 0002-optimize_listen_notify-v18.patch header: * SignalBackends attaches to the channel hash at the start, ensuring that backends performing NOTIFY without having done LISTEN can still find listeners in the shared hash table. On Wed, Oct 15, 2025, at 16:16, Tom Lane wrote: > I think we can perhaps salvage the idea if we invent a separate > "advisory" queue position field, which tells its backend "hey, > you could skip as far as here if you want", but is not used for > purposes of SLRU truncation. Alternatively, split the queue pos > into "this is where to read next" and "this is as much as I'm > definitively done with", where the second field gets advanced at > the end of asyncQueueReadAllNotifications. Not sure which > view would be less confusing (in the end I guess they're nearly > the same thing, differently explained). > > A different line of thought could be to get rid of > asyncQueueReadAllNotifications's optimization of moving the > queue pos only once, per > > * (We could alternatively retake NotifyQueueLock and move the position > * before handling each individual message, but that seems like too much > * lock traffic.) > > Since we only need shared lock to advance our own queue pos, > maybe that wouldn't be too awful. Not sure. These all sounds like promising ideas. I went ahead and tried the "split the queue pos" idea, implemented in 0002-optimize_listen_notify-v18.patch: Position tracking for truncation safety ---------------------------------------- To prevent race conditions during queue truncation when using direct advancement, backend positions are now tracked using two fields: * pos: The next position to read from. This can be advanced by other backends via direct advancement to skip over uninteresting notifications. * donePos: What the backend has definitively processed and no longer needs. This is used for determining safe truncation points. Without this separation, a backend could be advanced by another backend while it's reading notifications, then write back its stale local position that points to an already-truncated page. By using donePos for truncation decisions and taking the maximum of local and shared pos when updating, we ensure that truncation waits for backends to finish reading, while still allowing position advancement for optimization. On Wed, Oct 15, 2025, at 21:53, Arseniy Mukhin wrote: > Advisory queue position field sounds good IMHO. Listeners are still > solely responsible for advancing their positions so they still need to > wake up to do it, but they will only do so if there are relevant > notifications, or if they are too far behind. In any case they will be > able to jump over all irrelevant stuff. I read your message too late, otherwise I would have tried that approach first. I will try to implement that one too, and perhaps also the third one, and then we can evaluate them to see which one we prefer. /Joel --e3629fae26ca493e8eec9fd65226a09d Content-Disposition: attachment; filename*0="0001-optimize_listen_notify-v18.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0001-optimize=5Flisten=5Fnotify-v18.patch?=" Content-Transfer-Encoding: base64 RnJvbSBmMzcwOTUyNTA1MjFkMGEyOWQ4MTI5OTdiN2I3OWQ5MzhlZDljODk0IE1vbiBTZXAg 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 --e3629fae26ca493e8eec9fd65226a09d Content-Disposition: attachment; filename*0="0002-optimize_listen_notify-v18.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0002-optimize=5Flisten=5Fnotify-v18.patch?=" Content-Transfer-Encoding: base64 RnJvbSA2MjBmNjIwYWM2NzFlOWQ5ZWYyNjk0OTAzZTEwODEwM2Q0ZTgyYzhlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogVHVlLCAxNCBPY3QgMjAyNSAwODowMzoxOSArMDIwMApTdWJqZWN0OiBbUEFU Q0ggMi8yXSBPcHRpbWl6ZSBMSVNURU4vTk9USUZZIHdpdGggc2hhcmVkIGNoYW5uZWwgbWFw IGFuZCBkaXJlY3QKIGFkdmFuY2VtZW50CgpUaGlzIHBhdGNoIHJld29ya3MgdGhlIExJU1RF Ti9OT1RJRlkgc2lnbmFsaW5nIHBhdGggdG8gYXZvaWQgdGhlCmxvbmctc3RhbmRpbmcgaW5l ZmZpY2llbmN5IHdoZXJlIGV2ZXJ5IGNvbW1pdCB3YWtlcyBhbGwgbGlzdGVuaW5nCmJhY2tl bmRzIGluIHRoZSBzYW1lIGRhdGFiYXNlLCBldmVuIHRob3NlIHRoYXQgYXJlIGxpc3Rlbmlu ZyBvbgpjb21wbGV0ZWx5IGRpZmZlcmVudCBjaGFubmVscy4KClByb2JsZW0KLS0tLS0tLQoK QXQgcHJlc2VudCwgU2lnbmFsQmFja2VuZHMgaGFzIG5vIGNlbnRyYWwga25vd2xlZGdlIG9m IHdoaWNoIGJhY2tlbmQKbGlzdGVucyBvbiB3aGljaCBjaGFubmVsLiBXaGVuIGEgYmFja2Vu ZCBjb21taXRzIGEgdHJhbnNhY3Rpb24gdGhhdAppc3N1ZWQgTk9USUZZLCBpdCBzaW1wbHkg aXRlcmF0ZXMgb3ZlciBhbGwgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMgaW4gdGhlCnNhbWUgZGF0 YWJhc2UgYW5kIHNlbmRzIGVhY2ggb25lIGEgUFJPQ1NJR19OT1RJRllfSU5URVJSVVBUIHNp Z25hbC4KClRoYXQgYmVoYXZpb3IgaXMgZmluZSB3aGVuIGFsbCBsaXN0ZW5lcnMgYXJlIG9u IHRoZSBzYW1lIGNoYW5uZWwsIGJ1dAp3aGVuIG1hbnkgYmFja2VuZHMgYXJlIGxpc3Rlbmlu ZyBvbiBkaWZmZXJlbnQgY2hhbm5lbHMsIGVhY2ggTk9USUZZCnRyaWdnZXJzIGEgc3Rvcm0g b2YgdW5uZWNlc3Nhcnkgd2FrZXVwcyBhbmQgY29udGV4dCBzd2l0Y2hlcy4gQXMgdGhlCm51 bWJlciBvZiBpZGxlIGxpc3RlbmVycyBncm93cywgdGhpcyBvZnRlbiBiZWNvbWVzIHRoZSBi b3R0bGVuZWNrIGFuZAp0aHJvdWdocHV0IGRyb3BzIHNoYXJwbHkuCgpPdmVydmlldyBvZiB0 aGUgc29sdXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIHBhdGNoIGludHJv ZHVjZXMgYSBsYXppbHktY3JlYXRlZCBkeW5hbWljIHNoYXJlZCBoYXNoIChkc2hhc2gpCmJh Y2tlZCBieSBkeW5hbWljIHNoYXJlZCBtZW1vcnkgKERTQSkgdGhhdCBtYXBzIChkYm9pZCwg Y2hhbm5lbCkgdG8KYXJyYXlzIG9mIGxpc3RlbmluZyBiYWNrZW5kcyAoUHJvY051bWJlcnMp LiBUaGlzIGFsbG93cyB0aGUgc2VuZGVyIHRvCnRhcmdldCBvbmx5IHRob3NlIGJhY2tlbmRz IGFjdHVhbGx5IGxpc3RlbmluZyBvbiB0aGUgY2hhbm5lbHMgZm9yIHdoaWNoCml0IGhhcyBx dWV1ZWQgbm90aWZpY2F0aW9ucy4KCkF0IGNvbW1pdCB0aW1lOgoKKiBBdENvbW1pdF9Ob3Rp ZnkgdXBkYXRlcyB0aGUgc2hhcmVkIGNoYW5uZWxIYXNoIHRvIHJlZmxlY3QgYW55IExJU1RF TgogIG9yIFVOTElTVEVOIGFjdGlvbnMgcGVyZm9ybWVkIGluIHRoZSB0cmFuc2FjdGlvbi4K KiBTaWduYWxCYWNrZW5kcyBjb25zdWx0cyB0aGlzIGhhc2ggdG8gZmluZCB0aGUgYmFja2Vu ZHMgdGhhdCBhcmUKICBsaXN0ZW5pbmcgb24gdGhlIGNoYW5uZWxzIGJlaW5nIG5vdGlmaWVk IGluIHRoZSBjdXJyZW50IGRhdGFiYXNlLCBhbmQKICBzaWduYWxzIG9ubHkgdGhvc2UuCgpF YWNoIGJhY2tlbmQncyBlbnRyeSBpbiBBc3luY1F1ZXVlQ29udHJvbCBub3cgaW5jbHVkZXMg YSB3YWtldXBQZW5kaW5nCmZsYWcgdG8gcHJldmVudCBkdXBsaWNhdGUgc2lnbmFscyB3aGls ZSBhIHByZXZpb3VzIHdha2V1cCBpcyBzdGlsbCBiZWluZwpwcm9jZXNzZWQuCgpEaXJlY3Qg YWR2YW5jZW1lbnQKLS0tLS0tLS0tLS0tLS0tLS0tCgpBIGZ1cnRoZXIgb3B0aW1pemF0aW9u IGF2b2lkcyBzaWduYWxpbmcgaWRsZSBiYWNrZW5kcyB0aGF0IGFyZSBub3QKbGlzdGVuaW5n IG9uIGFueSBvZiB0aGUgY2hhbm5lbHMgbm90aWZpZWQgd2l0aGluIHRoZSB0cmFuc2FjdGlv bi4KCldoaWxlIHF1ZXVpbmcgbm90aWZpY2F0aW9ucywgUHJlQ29tbWl0X05vdGlmeSByZWNv cmRzIHRoZSBxdWV1ZSBoZWFkCnBvc2l0aW9uIGJvdGggYmVmb3JlIGFuZCBhZnRlciB3cml0 aW5nIGl0cyBub3RpZmljYXRpb25zLiBCZWNhdXNlIGFsbAp3cml0ZXJzIGFyZSBzZXJpYWxp emVkIGJ5IHRoZSBleGlzdGluZyBjbHVzdGVyLXdpZGUgaGVhdnl3ZWlnaHQgbG9jayBvbgoi ZGF0YWJhc2UgMCIsIG5vIGJhY2tlbmQgKGZyb20gYW55IGRhdGFiYXNlKSBjYW4gaW5zZXJ0 IGVudHJpZXMgYmV0d2Vlbgp0aG9zZSB0d28gcG9pbnRzLiBUaGlzIGd1YXJhbnRlZXMgdGhh dCB0aGUgcmVnaW9uIFtvbGRIZWFkLCBuZXdIZWFkKQpjb250YWlucyBvbmx5IHRoZSBlbnRy aWVzIHdyaXR0ZW4gYnkgb3VyIGNvbW1pdC4KClNpZ25hbEJhY2tlbmRzIHVzZXMgdGhpcyBm YWN0IHRvIGRpcmVjdGx5IGFkdmFuY2UgYW55IGJhY2tlbmQgc3RpbGwKcG9zaXRpb25lZCBh dCBvbGRIZWFkIHVwIHRvIG5ld0hlYWQsIGF2b2lkaW5nIGEgbmVlZGxlc3Mgd2FrZXVwIGZv cgpsaXN0ZW5lcnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugbm90IGZpbmQgYW55IG5vdGlmaWVz IG9mIGludGVyZXN0LgoKUG9zaXRpb24gdHJhY2tpbmcgZm9yIHRydW5jYXRpb24gc2FmZXR5 Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRvIHByZXZlbnQg cmFjZSBjb25kaXRpb25zIGR1cmluZyBxdWV1ZSB0cnVuY2F0aW9uIHdoZW4gdXNpbmcgZGly ZWN0CmFkdmFuY2VtZW50LCBiYWNrZW5kIHBvc2l0aW9ucyBhcmUgbm93IHRyYWNrZWQgdXNp bmcgdHdvIGZpZWxkczoKCiogcG9zOiBUaGUgbmV4dCBwb3NpdGlvbiB0byByZWFkIGZyb20u IFRoaXMgY2FuIGJlIGFkdmFuY2VkIGJ5IG90aGVyCiAgYmFja2VuZHMgdmlhIGRpcmVjdCBh ZHZhbmNlbWVudCB0byBza2lwIG92ZXIgdW5pbnRlcmVzdGluZwogIG5vdGlmaWNhdGlvbnMu CiogZG9uZVBvczogV2hhdCB0aGUgYmFja2VuZCBoYXMgZGVmaW5pdGl2ZWx5IHByb2Nlc3Nl ZCBhbmQgbm8gbG9uZ2VyCiAgbmVlZHMuIFRoaXMgaXMgdXNlZCBmb3IgZGV0ZXJtaW5pbmcg c2FmZSB0cnVuY2F0aW9uIHBvaW50cy4KCldpdGhvdXQgdGhpcyBzZXBhcmF0aW9uLCBhIGJh Y2tlbmQgY291bGQgYmUgYWR2YW5jZWQgYnkgYW5vdGhlciBiYWNrZW5kCndoaWxlIGl0J3Mg cmVhZGluZyBub3RpZmljYXRpb25zLCB0aGVuIHdyaXRlIGJhY2sgaXRzIHN0YWxlIGxvY2Fs CnBvc2l0aW9uIHRoYXQgcG9pbnRzIHRvIGFuIGFscmVhZHktdHJ1bmNhdGVkIHBhZ2UuIEJ5 IHVzaW5nIGRvbmVQb3MgZm9yCnRydW5jYXRpb24gZGVjaXNpb25zIGFuZCB0YWtpbmcgdGhl IG1heGltdW0gb2YgbG9jYWwgYW5kIHNoYXJlZCBwb3Mgd2hlbgp1cGRhdGluZywgd2UgZW5z dXJlIHRoYXQgdHJ1bmNhdGlvbiB3YWl0cyBmb3IgYmFja2VuZHMgdG8gZmluaXNoCnJlYWRp bmcsIHdoaWxlIHN0aWxsIGFsbG93aW5nIHBvc2l0aW9uIGFkdmFuY2VtZW50IGZvciBvcHRp bWl6YXRpb24uCgpRdWV1ZSBoZWFsdGgKLS0tLS0tLS0tLS0tCgpJZiBhIGJhY2tlbmQgaGFz IGZhbGxlbiB0b28gZmFyIGJlaGluZCAobGFnID49IFFVRVVFX0NMRUFOVVBfREVMQVkKcGFn ZXMpLCBpdCBpcyBzaWduYWxlZCB0byBjYXRjaCB1cCBzbyB0aGUgZ2xvYmFsIHF1ZXVlIHRh aWwgY2FuIGFkdmFuY2UuCgpPdGhlciBub3RlcwotLS0tLS0tLS0tLQoKKiBNYWludGFpbnMg ZHVhbCBkYXRhIHN0cnVjdHVyZXM6IGEgc2hhcmVkIGNoYW5uZWxIYXNoIGZvciBkZXRlcm1p bmluZwogIHdoaWNoIGJhY2tlbmRzIHRvIHNpZ25hbCwgYW5kIGEgbG9jYWwgcGVyLWJhY2tl bmQgbGlzdGVuQ2hhbm5lbHMgbGlzdAogIGZvciBmYXN0IGxvY2stZnJlZSBsb29rdXBzIGR1 cmluZyBub3RpZmljYXRpb24gcHJvY2Vzc2luZy4gVGhpcyBhdm9pZHMKICBjb250ZW50aW9u IG9uIHRoZSBzaGFyZWQgaGFzaCBkdXJpbmcgdGhlIGhpZ2gtZnJlcXVlbmN5IElzTGlzdGVu aW5nT24KICBjaGVja3MgdGhhdCBvY2N1ciBmb3IgZXZlcnkgbm90aWZpY2F0aW9uIHJlYWQg ZnJvbSB0aGUgcXVldWUuCiogQmFja2VuZHMgcmVtYWluIHJlZ2lzdGVyZWQgaW4gdGhlIGds b2JhbCBsaXN0ZW5lciBsaXN0IGFzIGxvbmcgYXMKICBsaXN0ZW5DaGFubmVscyBpcyBub24t ZW1wdHkuCiogU2lnbmFsQmFja2VuZHMgYXR0YWNoZXMgdG8gdGhlIGNoYW5uZWwgaGFzaCBh dCB0aGUgc3RhcnQsIGVuc3VyaW5nCiAgdGhhdCBiYWNrZW5kcyBwZXJmb3JtaW5nIE5PVElG WSB3aXRob3V0IGhhdmluZyBkb25lIExJU1RFTiBjYW4gc3RpbGwKICBmaW5kIGxpc3RlbmVy cyBpbiB0aGUgc2hhcmVkIGhhc2ggdGFibGUuCiogQWRkcyBMV0xvY2sgdHJhbmNoZSBOT1RJ RllfQ0hBTk5FTF9IQVNIIGFuZCB3YWl0IGV2ZW50CiAgTm90aWZ5Q2hhbm5lbEhhc2ggZm9y IHZpc2liaWxpdHkuCiogTm8gdXNlci12aXNpYmxlIGJlaGF2aW9yYWwgY2hhbmdlczsgdGhp cyBpcyBhbiBpbnRlcm5hbCBvcHRpbWl6YXRpb24KICBvbmx5LgotLS0KIHNyYy9iYWNrZW5k L2NvbW1hbmRzL2FzeW5jLmMgICAgICAgICAgICAgICAgICB8IDU2NSArKysrKysrKysrKysr KysrLS0KIC4uLi91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dCAgICAgICB8 ICAgMSArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaCAgICAgICAgICAgICAg fCAgIDEgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAg IHwgICAyICsKIDQgZmlsZXMgY2hhbmdlZCwgNTIwIGluc2VydGlvbnMoKyksIDQ5IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCmluZGV4IDRiZDM3ZDViZWI1Li42NzhjODE3 NGNiMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCkBAIC0yNCw4ICsyNCwxMCBAQAogICoJICBB bGwgbm90aWZpY2F0aW9uIG1lc3NhZ2VzIGFyZSBwbGFjZWQgaW4gdGhlIHF1ZXVlIGFuZCBs YXRlciByZWFkIG91dAogICoJICBieSBsaXN0ZW5pbmcgYmFja2VuZHMuCiAgKgotICoJICBU aGVyZSBpcyBubyBjZW50cmFsIGtub3dsZWRnZSBvZiB3aGljaCBiYWNrZW5kIGxpc3RlbnMg b24gd2hpY2ggY2hhbm5lbDsKLSAqCSAgZXZlcnkgYmFja2VuZCBoYXMgaXRzIG93biBsaXN0 IG9mIGludGVyZXN0aW5nIGNoYW5uZWxzLgorICoJICBXZSBhbHNvIG1haW50YWluIGEgZHlu YW1pYyBzaGFyZWQgaGFzaCB0YWJsZSAoZHNoYXNoKSB0aGF0IG1hcHMgY2hhbm5lbAorICoJ ICBuYW1lcyB0byB0aGUgc2V0IG9mIGJhY2tlbmRzIGxpc3RlbmluZyBvbiBlYWNoIGNoYW5u ZWwuIFRoaXMgdGFibGUgaXMKKyAqCSAgY3JlYXRlZCBsYXppbHkgb24gdGhlIGZpcnN0IExJ U1RFTiBjb21tYW5kIGFuZCBncm93cyBkeW5hbWljYWxseSBhcworICoJICBuZWVkZWQuCiAg KgogICoJICBBbHRob3VnaCB0aGVyZSBpcyBvbmx5IG9uZSBxdWV1ZSwgbm90aWZpY2F0aW9u cyBhcmUgdHJlYXRlZCBhcyBiZWluZwogICoJICBkYXRhYmFzZS1sb2NhbDsgdGhpcyBpcyBk b25lIGJ5IGluY2x1ZGluZyB0aGUgc2VuZGVyJ3MgZGF0YWJhc2UgT0lECkBAIC02OCwxNiAr NzAsMjcgQEAKICAqCSAgQ29tbWl0VHJhbnNhY3Rpb24oKSB3aGljaCB3aWxsIHRoZW4gZG8g dGhlIGFjdHVhbCB0cmFuc2FjdGlvbiBjb21taXQuCiAgKgogICoJICBBZnRlciBjb21taXQg d2UgYXJlIGNhbGxlZCBhbm90aGVyIHRpbWUgKEF0Q29tbWl0X05vdGlmeSgpKS4gSGVyZSB3 ZQotICoJICBtYWtlIGFueSBhY3R1YWwgdXBkYXRlcyB0byB0aGUgZWZmZWN0aXZlIGxpc3Rl biBzdGF0ZSAobGlzdGVuQ2hhbm5lbHMpLgorICoJICBtYWtlIGFueSBhY3R1YWwgdXBkYXRl cyB0byB0aGUgZWZmZWN0aXZlIGxpc3RlbiBzdGF0ZSAoY2hhbm5lbEhhc2gpLgogICoJICBU aGVuIHdlIHNpZ25hbCBhbnkgYmFja2VuZHMgdGhhdCBtYXkgYmUgaW50ZXJlc3RlZCBpbiBv dXIgbWVzc2FnZXMKICAqCSAgKGluY2x1ZGluZyBvdXIgb3duIGJhY2tlbmQsIGlmIGxpc3Rl bmluZykuICBUaGlzIGlzIGRvbmUgYnkKLSAqCSAgU2lnbmFsQmFja2VuZHMoKSwgd2hpY2gg c2NhbnMgdGhlIGxpc3Qgb2YgbGlzdGVuaW5nIGJhY2tlbmRzIGFuZCBzZW5kcyBhCi0gKgkg IFBST0NTSUdfTk9USUZZX0lOVEVSUlVQVCBzaWduYWwgdG8gZXZlcnkgbGlzdGVuaW5nIGJh Y2tlbmQgKHdlIGRvbid0Ci0gKgkgIGtub3cgd2hpY2ggYmFja2VuZCBpcyBsaXN0ZW5pbmcg b24gd2hpY2ggY2hhbm5lbCBzbyB3ZSBtdXN0IHNpZ25hbCB0aGVtCi0gKgkgIGFsbCkuICBX ZSBjYW4gZXhjbHVkZSBiYWNrZW5kcyB0aGF0IGFyZSBhbHJlYWR5IHVwIHRvIGRhdGUsIHRo b3VnaCwgYW5kCi0gKgkgIHdlIGNhbiBhbHNvIGV4Y2x1ZGUgYmFja2VuZHMgdGhhdCBhcmUg aW4gb3RoZXIgZGF0YWJhc2VzICh1bmxlc3MgdGhleQotICoJICBhcmUgd2F5IGJlaGluZCBh bmQgc2hvdWxkIGJlIGtpY2tlZCB0byBtYWtlIHRoZW0gYWR2YW5jZSB0aGVpcgotICoJICBw b2ludGVycykuCisgKgkgIFNpZ25hbEJhY2tlbmRzKCksIHdoaWNoIGNvbnN1bHRzIHRoZSBz aGFyZWQgY2hhbm5lbCBoYXNoIHRhYmxlIHRvCisgKgkgIGlkZW50aWZ5IGxpc3RlbmVycyBm b3IgdGhlIGNoYW5uZWxzIHRoYXQgaGF2ZSBwZW5kaW5nIG5vdGlmaWNhdGlvbnMKKyAqCSAg aW4gdGhlIGN1cnJlbnQgZGF0YWJhc2UuICBFYWNoIHNlbGVjdGVkIGJhY2tlbmQgaXMgbWFy a2VkIGFzIGhhdmluZyBhCisgKgkgIHdha2V1cCBwZW5kaW5nIHRvIGF2b2lkIGR1cGxpY2F0 ZSBzaWduYWxzLCBhbmQgYSBQUk9DU0lHX05PVElGWV9JTlRFUlJVUFQKKyAqCSAgc2lnbmFs IGlzIHNlbnQgdG8gaXQuCisgKgorICoJICBXaGVuIHdyaXRpbmcgbm90aWZpY2F0aW9ucywg UHJlQ29tbWl0X05vdGlmeSgpIHJlY29yZHMgdGhlIHF1ZXVlIGhlYWQKKyAqCSAgcG9zaXRp b24gYm90aCBiZWZvcmUgYW5kIGFmdGVyIHRoZSB3cml0ZS4gIEJlY2F1c2UgYWxsIHdyaXRl cnMgc2VyaWFsaXplCisgKgkgIG9uIGEgY2x1c3Rlci13aWRlIGhlYXZ5d2VpZ2h0IGxvY2ss IG5vIGJhY2tlbmQgY2FuIGluc2VydCBlbnRyaWVzIGJldHdlZW4KKyAqCSAgdGhlc2UgdHdv IHBvaW50cy4gIFNpZ25hbEJhY2tlbmRzKCkgdXNlcyB0aGlzIGZhY3QgdG8gZGlyZWN0bHkg YWR2YW5jZSBhbnkKKyAqCSAgYmFja2VuZCB0aGF0IGlzIHN0aWxsIHBvc2l0aW9uZWQgYXQg dGhlIG9sZCBoZWFkLCBhdm9pZGluZyB1bm5lY2Vzc2FyeQorICoJICB3YWtldXBzIGZvciBp ZGxlIGxpc3RlbmVycyB0aGF0IGhhdmUgbm90aGluZyB0byByZWFkLgorICoKKyAqCSAgVG8g bWFpbnRhaW4gcXVldWUgaGVhbHRoLCBTaWduYWxCYWNrZW5kcygpIGFsc28gd2FrZXMgb25l IGJhY2tlbmQKKyAqCSAgcG9zaXRpb25lZCBhdCB0aGUgZ2xvYmFsIHF1ZXVlIHRhaWwgdG8g aGVscCBhZHZhbmNlIGl0LCBhbmQgc2lnbmFscworICoJICBhbnkgYmFja2VuZCB0aGF0IGhh cyBmYWxsZW4gdG9vIGZhciBiZWhpbmQgdG8gY2F0Y2ggdXAuICBUaGVzZSBtZWFzdXJlcwor ICoJICBwcmV2ZW50IHRoZSBub3RpZmljYXRpb24gcXVldWUgZnJvbSBncm93aW5nIGluZGVm aW5pdGVseSwgd2hpbGUgbW9zdGx5CisgKgkgIGxpbWl0aW5nIHdha2V1cHMgdG8gdGhlIGJh Y2tlbmRzIHRoYXQgYWN0dWFsbHkgbmVlZCB0aGVtLgogICoKICAqCSAgRmluYWxseSwgYWZ0 ZXIgd2UgYXJlIG91dCBvZiB0aGUgdHJhbnNhY3Rpb24gYWx0b2dldGhlciBhbmQgYWJvdXQg dG8gZ28KICAqCSAgaWRsZSwgd2Ugc2NhbiB0aGUgcXVldWUgZm9yIG1lc3NhZ2VzIHRoYXQg bmVlZCB0byBiZSBzZW50IHRvIG91cgpAQCAtMTI4LDYgKzE0MSw3IEBACiAjaW5jbHVkZSA8 bGltaXRzLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+Cisj aW5jbHVkZSA8c3RyaW5nLmg+CiAKICNpbmNsdWRlICJhY2Nlc3MvcGFyYWxsZWwuaCIKICNp bmNsdWRlICJhY2Nlc3Mvc2xydS5oIgpAQCAtMTM3LDE0ICsxNTEsMTcgQEAKICNpbmNsdWRl ICJjb21tYW5kcy9hc3luYy5oIgogI2luY2x1ZGUgImNvbW1vbi9oYXNoZm4uaCIKICNpbmNs dWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibGliL2RzaGFzaC5oIgogI2luY2x1ZGUgImxp YnBxL2xpYnBxLmgiCiAjaW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIKICNpbmNsdWRlICJt aXNjYWRtaW4uaCIKKyNpbmNsdWRlICJzdG9yYWdlL2RzbV9yZWdpc3RyeS5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgog I2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZHNhLmgiCiAj aW5jbHVkZSAidXRpbHMvZ3VjX2hvb2tzLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMu aCIKICNpbmNsdWRlICJ1dGlscy9wc19zdGF0dXMuaCIKQEAgLTE2Miw2ICsxNzksMjkgQEAK ICAqLwogI2RlZmluZSBOT1RJRllfUEFZTE9BRF9NQVhfTEVOR1RICShCTENLU1ogLSBOQU1F REFUQUxFTiAtIDEyOCkKIAorLyoKKyAqIENoYW5uZWwgaGFzaCB0YWJsZSBkZWZpbml0aW9u cworICoKKyAqIFRoaXMgaGFzaCB0YWJsZSBtYXBzIChkYXRhYmFzZSBPSUQsIGNoYW5uZWwg bmFtZSkga2V5cyB0byBhcnJheXMgb2YKKyAqIFByb2NOdW1iZXJzIHJlcHJlc2VudGluZyB0 aGUgYmFja2VuZHMgbGlzdGVuaW5nIG9uIGVhY2ggY2hhbm5lbC4KKyAqLworCisjZGVmaW5l IElOSVRJQUxfTElTVEVORVJTX0FSUkFZX1NJWkUgNAorCit0eXBlZGVmIHN0cnVjdCBDaGFu bmVsSGFzaEtleQoreworCU9pZAkJCWRib2lkOworCWNoYXIJCWNoYW5uZWxbTkFNRURBVEFM RU5dOworfSBDaGFubmVsSGFzaEtleTsKKwordHlwZWRlZiBzdHJ1Y3QgQ2hhbm5lbEVudHJ5 Cit7CisJQ2hhbm5lbEhhc2hLZXkga2V5OworCWRzYV9wb2ludGVyIGxpc3RlbmVyc0FycmF5 OyAvKiBEU0EgcG9pbnRlciB0byBQcm9jTnVtYmVyIGFycmF5ICovCisJaW50CQkJbnVtTGlz dGVuZXJzOwkvKiBOdW1iZXIgb2YgbGlzdGVuZXJzIGN1cnJlbnRseSBzdG9yZWQgKi8KKwlp bnQJCQlhbGxvY2F0ZWRMaXN0ZW5lcnM7IC8qIEFsbG9jYXRlZCBzaXplIG9mIGFycmF5ICov Cit9IENoYW5uZWxFbnRyeTsKKwogLyoKICAqIFN0cnVjdCByZXByZXNlbnRpbmcgYW4gZW50 cnkgaW4gdGhlIGdsb2JhbCBub3RpZnkgcXVldWUKICAqCkBAIC0yMjcsOCArMjY3LDggQEAg dHlwZWRlZiBzdHJ1Y3QgUXVldWVQb3NpdGlvbgogLyoKICAqIFBhcmFtZXRlciBkZXRlcm1p bmluZyBob3cgb2Z0ZW4gd2UgdHJ5IHRvIGFkdmFuY2UgdGhlIHRhaWwgcG9pbnRlcjoKICAq IHdlIGRvIHRoYXQgYWZ0ZXIgZXZlcnkgUVVFVUVfQ0xFQU5VUF9ERUxBWSBwYWdlcyBvZiBO T1RJRlkgZGF0YS4gIFRoaXMgaXMKLSAqIGFsc28gdGhlIGRpc3RhbmNlIGJ5IHdoaWNoIGEg YmFja2VuZCBpbiBhbm90aGVyIGRhdGFiYXNlIG5lZWRzIHRvIGJlCi0gKiBiZWhpbmQgYmVm b3JlIHdlJ2xsIGRlY2lkZSB3ZSBuZWVkIHRvIHdha2UgaXQgdXAgdG8gYWR2YW5jZSBpdHMg cG9pbnRlci4KKyAqIGFsc28gdGhlIGRpc3RhbmNlIGJ5IHdoaWNoIGEgYmFja2VuZCBuZWVk cyB0byBiZSBiZWhpbmQgYmVmb3JlIHdlJ2xsCisgKiBkZWNpZGUgd2UgbmVlZCB0byB3YWtl IGl0IHVwIHRvIGFkdmFuY2UgaXRzIHBvaW50ZXIuCiAgKgogICogUmVzaXN0IHRoZSB0ZW1w dGF0aW9uIHRvIG1ha2UgdGhpcyByZWFsbHkgbGFyZ2UuICBXaGlsZSB0aGF0IHdvdWxkIHNh dmUKICAqIHdvcmsgaW4gc29tZSBwbGFjZXMsIGl0IHdvdWxkIGFkZCBjb3N0IGluIG90aGVy cy4gIEluIHBhcnRpY3VsYXIsIHRoaXMKQEAgLTI0NSw3ICsyODUsMTAgQEAgdHlwZWRlZiBz dHJ1Y3QgUXVldWVCYWNrZW5kU3RhdHVzCiAJaW50MzIJCXBpZDsJCQkvKiBlaXRoZXIgYSBQ SUQgb3IgSW52YWxpZFBpZCAqLwogCU9pZAkJCWRib2lkOwkJCS8qIGJhY2tlbmQncyBkYXRh YmFzZSBPSUQsIG9yIEludmFsaWRPaWQgKi8KIAlQcm9jTnVtYmVyCW5leHRMaXN0ZW5lcjsJ LyogaWQgb2YgbmV4dCBsaXN0ZW5lciwgb3IgSU5WQUxJRF9QUk9DX05VTUJFUiAqLwotCVF1 ZXVlUG9zaXRpb24gcG9zOwkJCS8qIGJhY2tlbmQgaGFzIHJlYWQgcXVldWUgdXAgdG8gaGVy ZSAqLworCVF1ZXVlUG9zaXRpb24gcG9zOwkJCS8qIG5leHQgcG9zaXRpb24gdG8gcmVhZCBm cm9tICovCisJUXVldWVQb3NpdGlvbiBkb25lUG9zOwkJLyogYmFja2VuZCBoYXMgZGVmaW5p dGl2ZWx5IHByb2Nlc3NlZCB1cCB0bworCQkJCQkJCQkgKiBoZXJlICovCisJYm9vbAkJd2Fr ZXVwUGVuZGluZzsJLyogc2lnbmFsIHNlbnQgYnV0IG5vdCB5ZXQgcHJvY2Vzc2VkICovCiB9 IFF1ZXVlQmFja2VuZFN0YXR1czsKIAogLyoKQEAgLTI2MCw5ICszMDMsOSBAQCB0eXBlZGVm IHN0cnVjdCBRdWV1ZUJhY2tlbmRTdGF0dXMKICAqIChzaW5jZSBubyBvdGhlciBiYWNrZW5k IHdpbGwgaW5zcGVjdCBpdCkuCiAgKgogICogV2hlbiBob2xkaW5nIE5vdGlmeVF1ZXVlTG9j ayBpbiBFWENMVVNJVkUgbW9kZSwgYmFja2VuZHMgY2FuIGluc3BlY3QgdGhlCi0gKiBlbnRy aWVzIG9mIG90aGVyIGJhY2tlbmRzIGFuZCBhbHNvIGNoYW5nZSB0aGUgaGVhZCBwb2ludGVy LiBXaGVuIGhvbGRpbmcKLSAqIGJvdGggTm90aWZ5UXVldWVMb2NrIGFuZCBOb3RpZnlRdWV1 ZVRhaWxMb2NrIGluIEVYQ0xVU0lWRSBtb2RlLCBiYWNrZW5kcwotICogY2FuIGNoYW5nZSB0 aGUgdGFpbCBwb2ludGVycy4KKyAqIGVudHJpZXMgb2Ygb3RoZXIgYmFja2VuZHMsIGNoYW5n ZSB0aGUgaGVhZCBwb2ludGVyLCBhbmQgYWR2YW5jZSBvdGhlcgorICogYmFja2VuZHMnIHF1 ZXVlIHBvc2l0aW9ucy4gV2hlbiBob2xkaW5nIGJvdGggTm90aWZ5UXVldWVMb2NrIGFuZAor ICogTm90aWZ5UXVldWVUYWlsTG9jayBpbiBFWENMVVNJVkUgbW9kZSwgYmFja2VuZHMgY2Fu IGNoYW5nZSB0aGUgdGFpbCBwb2ludGVycy4KICAqCiAgKiBTTFJVIGJ1ZmZlciBwb29sIGlz IGRpdmlkZWQgaW4gYmFua3MgYW5kIGJhbmsgd2lzZSBTTFJVIGxvY2sgaXMgdXNlZCBhcwog ICogdGhlIGNvbnRyb2wgbG9jayBmb3IgdGhlIHBnX25vdGlmeSBTTFJVIGJ1ZmZlcnMuCkBA IC0yODgsMTEgKzMzMSwxNiBAQCB0eXBlZGVmIHN0cnVjdCBBc3luY1F1ZXVlQ29udHJvbAog CVByb2NOdW1iZXIJZmlyc3RMaXN0ZW5lcjsJLyogaWQgb2YgZmlyc3QgbGlzdGVuZXIsIG9y CiAJCQkJCQkJCSAqIElOVkFMSURfUFJPQ19OVU1CRVIgKi8KIAlUaW1lc3RhbXBUeiBsYXN0 UXVldWVGaWxsV2FybjsJLyogdGltZSBvZiBsYXN0IHF1ZXVlLWZ1bGwgbXNnICovCisJZHNh X2hhbmRsZQljaGFubmVsSGFzaERTQTsKKwlkc2hhc2hfdGFibGVfaGFuZGxlIGNoYW5uZWxI YXNoRFNIOwogCVF1ZXVlQmFja2VuZFN0YXR1cyBiYWNrZW5kW0ZMRVhJQkxFX0FSUkFZX01F TUJFUl07CiB9IEFzeW5jUXVldWVDb250cm9sOwogCiBzdGF0aWMgQXN5bmNRdWV1ZUNvbnRy b2wgKmFzeW5jUXVldWVDb250cm9sOwogCitzdGF0aWMgZHNhX2FyZWEgKmNoYW5uZWxEU0Eg PSBOVUxMOworc3RhdGljIGRzaGFzaF90YWJsZSAqY2hhbm5lbEhhc2ggPSBOVUxMOworCiAj ZGVmaW5lIFFVRVVFX0hFQUQJCQkJCShhc3luY1F1ZXVlQ29udHJvbC0+aGVhZCkKICNkZWZp bmUgUVVFVUVfVEFJTAkJCQkJKGFzeW5jUXVldWVDb250cm9sLT50YWlsKQogI2RlZmluZSBR VUVVRV9TVE9QX1BBR0UJCQkJKGFzeW5jUXVldWVDb250cm9sLT5zdG9wUGFnZSkKQEAgLTMw MSw2ICszNDksOCBAQCBzdGF0aWMgQXN5bmNRdWV1ZUNvbnRyb2wgKmFzeW5jUXVldWVDb250 cm9sOwogI2RlZmluZSBRVUVVRV9CQUNLRU5EX0RCT0lEKGkpCQkoYXN5bmNRdWV1ZUNvbnRy b2wtPmJhY2tlbmRbaV0uZGJvaWQpCiAjZGVmaW5lIFFVRVVFX05FWFRfTElTVEVORVIoaSkJ CShhc3luY1F1ZXVlQ29udHJvbC0+YmFja2VuZFtpXS5uZXh0TGlzdGVuZXIpCiAjZGVmaW5l IFFVRVVFX0JBQ0tFTkRfUE9TKGkpCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0u cG9zKQorI2RlZmluZSBRVUVVRV9CQUNLRU5EX0RPTkVQT1MoaSkJKGFzeW5jUXVldWVDb250 cm9sLT5iYWNrZW5kW2ldLmRvbmVQb3MpCisjZGVmaW5lIFFVRVVFX0JBQ0tFTkRfV0FLRVVQ X1BFTkRJTkcoaSkJKGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLndha2V1cFBlbmRp bmcpCiAKIC8qCiAgKiBUaGUgU0xSVSBidWZmZXIgYXJlYSB0aHJvdWdoIHdoaWNoIHdlIGFj Y2VzcyB0aGUgbm90aWZpY2F0aW9uIHF1ZXVlCkBAIC00MTgsNiArNDY4LDIwIEBAIHN0YXRp YyBib29sIHVubGlzdGVuRXhpdFJlZ2lzdGVyZWQgPSBmYWxzZTsKIC8qIFRydWUgaWYgd2Un cmUgY3VycmVudGx5IHJlZ2lzdGVyZWQgYXMgYSBsaXN0ZW5lciBpbiBhc3luY1F1ZXVlQ29u dHJvbCAqLwogc3RhdGljIGJvb2wgYW1SZWdpc3RlcmVkTGlzdGVuZXIgPSBmYWxzZTsKIAor LyoKKyAqIFF1ZXVlIGhlYWQgcG9zaXRpb25zIGZvciBkaXJlY3QgYWR2YW5jZW1lbnQuCisg KiBUaGVzZSBhcmUgY2FwdHVyZWQgZHVyaW5nIFByZUNvbW1pdF9Ob3RpZnkgd2hpbGUgaG9s ZGluZyB0aGUgaGVhdnl3ZWlnaHQKKyAqIGxvY2sgb24gZGF0YWJhc2UgMCwgZW5zdXJpbmcg bm8gb3RoZXIgYmFja2VuZCBjYW4gaW5zZXJ0IG5vdGlmaWNhdGlvbnMKKyAqIGJldHdlZW4g dGhlbS4gIFNpZ25hbEJhY2tlbmRzIHVzZXMgdGhlc2UgdG8gYWR2YW5jZSBpZGxlIGJhY2tl bmRzLgorICovCitzdGF0aWMgUXVldWVQb3NpdGlvbiBxdWV1ZUhlYWRCZWZvcmVXcml0ZTsK K3N0YXRpYyBRdWV1ZVBvc2l0aW9uIHF1ZXVlSGVhZEFmdGVyV3JpdGU7CisKKy8qCisgKiBM aXN0IG9mIGNoYW5uZWxzIHdpdGggcGVuZGluZyBub3RpZmljYXRpb25zIGluIHRoZSBjdXJy ZW50IHRyYW5zYWN0aW9uLgorICovCitzdGF0aWMgTGlzdCAqcGVuZGluZ05vdGlmeUNoYW5u ZWxzID0gTklMOworCiAvKiBoYXZlIHdlIGFkdmFuY2VkIHRvIGEgcGFnZSB0aGF0J3MgYSBt dWx0aXBsZSBvZiBRVUVVRV9DTEVBTlVQX0RFTEFZPyAqLwogc3RhdGljIGJvb2wgdHJ5QWR2 YW5jZVRhaWwgPSBmYWxzZTsKIApAQCAtNDU3LDYgKzUyMSw5IEBAIHN0YXRpYyB2b2lkIEFk ZEV2ZW50VG9QZW5kaW5nTm90aWZpZXMoTm90aWZpY2F0aW9uICpuKTsKIHN0YXRpYyB1aW50 MzIgbm90aWZpY2F0aW9uX2hhc2goY29uc3Qgdm9pZCAqa2V5LCBTaXplIGtleXNpemUpOwog c3RhdGljIGludAlub3RpZmljYXRpb25fbWF0Y2goY29uc3Qgdm9pZCAqa2V5MSwgY29uc3Qg dm9pZCAqa2V5MiwgU2l6ZSBrZXlzaXplKTsKIHN0YXRpYyB2b2lkIENsZWFyUGVuZGluZ0Fj dGlvbnNBbmROb3RpZmllcyh2b2lkKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBDaGFubmVsSGFz aFByZXBhcmVLZXkoQ2hhbm5lbEhhc2hLZXkgKmtleSwgT2lkIGRib2lkLCBjb25zdCBjaGFy ICpjaGFubmVsKTsKK3N0YXRpYyBkc2hhc2hfaGFzaCBjaGFubmVsSGFzaEZ1bmMoY29uc3Qg dm9pZCAqa2V5LCBzaXplX3Qgc2l6ZSwgdm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIGluaXRD aGFubmVsSGFzaCh2b2lkKTsKIAogLyoKICAqIENvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYmV0 d2VlbiB0d28gcXVldWUgcGFnZSBudW1iZXJzLgpAQCAtNDc4LDYgKzU0NSw4MCBAQCBhc3lu Y1F1ZXVlUGFnZVByZWNlZGVzKGludDY0IHAsIGludDY0IHEpCiAJcmV0dXJuIHAgPCBxOwog fQogCisvKgorICogY2hhbm5lbEhhc2hGdW5jCisgKgkJSGFzaCBmdW5jdGlvbiBmb3IgY2hh bm5lbCBrZXlzLgorICovCitzdGF0aWMgZHNoYXNoX2hhc2gKK2NoYW5uZWxIYXNoRnVuYyhj b25zdCB2b2lkICprZXksIHNpemVfdCBzaXplLCB2b2lkICphcmcpCit7CisJY29uc3QgQ2hh bm5lbEhhc2hLZXkgKmsgPSAoY29uc3QgQ2hhbm5lbEhhc2hLZXkgKikga2V5OworCWRzaGFz aF9oYXNoIGg7CisKKwloID0gRGF0dW1HZXRVSW50MzIoaGFzaF91aW50MzIoay0+ZGJvaWQp KTsKKwloIF49IERhdHVtR2V0VUludDMyKGhhc2hfYW55KChjb25zdCB1bnNpZ25lZCBjaGFy ICopIGstPmNoYW5uZWwsCisJCQkJCQkJCSBzdHJubGVuKGstPmNoYW5uZWwsIE5BTUVEQVRB TEVOKSkpOworCisJcmV0dXJuIGg7Cit9CisKKy8qIHBhcmFtZXRlcnMgZm9yIHRoZSBjaGFu bmVsIGhhc2ggdGFibGUgKi8KK3N0YXRpYyBjb25zdCBkc2hhc2hfcGFyYW1ldGVycyBjaGFu bmVsRFNIUGFyYW1zID0geworCXNpemVvZihDaGFubmVsSGFzaEtleSksCisJc2l6ZW9mKENo YW5uZWxFbnRyeSksCisJZHNoYXNoX21lbWNtcCwKKwljaGFubmVsSGFzaEZ1bmMsCisJZHNo YXNoX21lbWNweSwKKwlMV1RSQU5DSEVfTk9USUZZX0NIQU5ORUxfSEFTSAorfTsKKworLyoK KyAqIGluaXRDaGFubmVsSGFzaAorICoJCUxhenkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNo YW5uZWwgaGFzaCB0YWJsZS4KKyAqLworc3RhdGljIHZvaWQKK2luaXRDaGFubmVsSGFzaCh2 b2lkKQoreworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCS8qIFF1aWNrIGV4aXQg aWYgd2UgYWxyZWFkeSBkaWQgdGhpcyAqLworCWlmIChhc3luY1F1ZXVlQ29udHJvbC0+Y2hh bm5lbEhhc2hEU0ggIT0gRFNIQVNIX0hBTkRMRV9JTlZBTElEICYmCisJCWNoYW5uZWxIYXNo ICE9IE5VTEwpCisJCXJldHVybjsKKworCS8qIE90aGVyd2lzZSwgdXNlIGEgbG9jayB0byBl bnN1cmUgb25seSBvbmUgcHJvY2VzcyBjcmVhdGVzIHRoZSB0YWJsZSAqLworCUxXTG9ja0Fj cXVpcmUoTm90aWZ5UXVldWVMb2NrLCBMV19FWENMVVNJVkUpOworCisJLyogQmUgc3VyZSBh bnkgbG9jYWwgbWVtb3J5IGFsbG9jYXRlZCBieSBEU0Egcm91dGluZXMgaXMgcGVyc2lzdGVu dCAqLworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29u dGV4dCk7CisKKwlpZiAoYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxIYXNoRFNIID09IERT SEFTSF9IQU5ETEVfSU5WQUxJRCkKKwl7CisJCS8qIEluaXRpYWxpemUgZHluYW1pYyBzaGFy ZWQgaGFzaCB0YWJsZSBmb3IgY2hhbm5lbCBoYXNoICovCisJCWNoYW5uZWxEU0EgPSBkc2Ff Y3JlYXRlKExXVFJBTkNIRV9OT1RJRllfQ0hBTk5FTF9IQVNIKTsKKwkJZHNhX3BpbihjaGFu bmVsRFNBKTsKKwkJZHNhX3Bpbl9tYXBwaW5nKGNoYW5uZWxEU0EpOworCQljaGFubmVsSGFz aCA9IGRzaGFzaF9jcmVhdGUoY2hhbm5lbERTQSwgJmNoYW5uZWxEU0hQYXJhbXMsIE5VTEwp OworCisJCS8qIFN0b3JlIGhhbmRsZXMgaW4gc2hhcmVkIG1lbW9yeSBmb3Igb3RoZXIgYmFj a2VuZHMgdG8gdXNlICovCisJCWFzeW5jUXVldWVDb250cm9sLT5jaGFubmVsSGFzaERTQSA9 IGRzYV9nZXRfaGFuZGxlKGNoYW5uZWxEU0EpOworCQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hh bm5lbEhhc2hEU0ggPQorCQkJZHNoYXNoX2dldF9oYXNoX3RhYmxlX2hhbmRsZShjaGFubmVs SGFzaCk7CisJfQorCWVsc2UgaWYgKCFjaGFubmVsSGFzaCkKKwl7CisJCS8qIEF0dGFjaCB0 byBleGlzdGluZyBkeW5hbWljIHNoYXJlZCBoYXNoIHRhYmxlICovCisJCWNoYW5uZWxEU0Eg PSBkc2FfYXR0YWNoKGFzeW5jUXVldWVDb250cm9sLT5jaGFubmVsSGFzaERTQSk7CisJCWRz YV9waW5fbWFwcGluZyhjaGFubmVsRFNBKTsKKwkJY2hhbm5lbEhhc2ggPSBkc2hhc2hfYXR0 YWNoKGNoYW5uZWxEU0EsICZjaGFubmVsRFNIUGFyYW1zLAorCQkJCQkJCQkJYXN5bmNRdWV1 ZUNvbnRyb2wtPmNoYW5uZWxIYXNoRFNILAorCQkJCQkJCQkJTlVMTCk7CisJfQorCisJTWVt b3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCUxXTG9ja1JlbGVhc2UoTm90aWZ5 UXVldWVMb2NrKTsKK30KKwogLyoKICAqIFJlcG9ydCBzcGFjZSBuZWVkZWQgZm9yIG91ciBz aGFyZWQgbWVtb3J5IGFyZWEKICAqLwpAQCAtNTIxLDEyICs2NjIsMTcgQEAgQXN5bmNTaG1l bUluaXQodm9pZCkKIAkJUVVFVUVfU1RPUF9QQUdFID0gMDsKIAkJUVVFVUVfRklSU1RfTElT VEVORVIgPSBJTlZBTElEX1BST0NfTlVNQkVSOwogCQlhc3luY1F1ZXVlQ29udHJvbC0+bGFz dFF1ZXVlRmlsbFdhcm4gPSAwOworCQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hE U0EgPSBEU0FfSEFORExFX0lOVkFMSUQ7CisJCWFzeW5jUXVldWVDb250cm9sLT5jaGFubmVs SGFzaERTSCA9IERTSEFTSF9IQU5ETEVfSU5WQUxJRDsKKwogCQlmb3IgKGludCBpID0gMDsg aSA8IE1heEJhY2tlbmRzOyBpKyspCiAJCXsKIAkJCVFVRVVFX0JBQ0tFTkRfUElEKGkpID0g SW52YWxpZFBpZDsKIAkJCVFVRVVFX0JBQ0tFTkRfREJPSUQoaSkgPSBJbnZhbGlkT2lkOwog CQkJUVVFVUVfTkVYVF9MSVNURU5FUihpKSA9IElOVkFMSURfUFJPQ19OVU1CRVI7CiAJCQlT RVRfUVVFVUVfUE9TKFFVRVVFX0JBQ0tFTkRfUE9TKGkpLCAwLCAwKTsKKwkJCVNFVF9RVUVV RV9QT1MoUVVFVUVfQkFDS0VORF9ET05FUE9TKGkpLCAwLCAwKTsKKwkJCVFVRVVFX0JBQ0tF TkRfV0FLRVVQX1BFTkRJTkcoaSkgPSBmYWxzZTsKIAkJfQogCX0KIApAQCAtODk0LDYgKzEw NDAsNyBAQCBQcmVDb21taXRfTm90aWZ5KHZvaWQpCiAJaWYgKHBlbmRpbmdOb3RpZmllcykK IAl7CiAJCUxpc3RDZWxsICAgKm5leHROb3RpZnk7CisJCWJvb2wJCWZpcnN0SXRlcmF0aW9u ID0gdHJ1ZTsKIAogCQkvKgogCQkgKiBNYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGFuIFhJRCBh c3NpZ25lZCB0byB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KQEAgLTkyMiw2ICsxMDY5LDM1 IEBAIFByZUNvbW1pdF9Ob3RpZnkodm9pZCkKIAkJTG9ja1NoYXJlZE9iamVjdChEYXRhYmFz ZVJlbGF0aW9uSWQsIEludmFsaWRPaWQsIDAsCiAJCQkJCQkgQWNjZXNzRXhjbHVzaXZlTG9j ayk7CiAKKwkJLyoKKwkJICogQnVpbGQgbGlzdCBvZiB1bmlxdWUgY2hhbm5lbHMgZm9yIFNp Z25hbEJhY2tlbmRzKCkuCisJCSAqLworCQlwZW5kaW5nTm90aWZ5Q2hhbm5lbHMgPSBOSUw7 CisJCWZvcmVhY2hfcHRyKE5vdGlmaWNhdGlvbiwgbiwgcGVuZGluZ05vdGlmaWVzLT5ldmVu dHMpCisJCXsKKwkJCWNoYXIJICAgKmNoYW5uZWwgPSBuLT5kYXRhOworCisJCQkvKiBBZGQg aWYgbm90IGFscmVhZHkgaW4gbGlzdCAqLworCQkJaWYgKCFsaXN0X21lbWJlcl9wdHIocGVu ZGluZ05vdGlmeUNoYW5uZWxzLCBjaGFubmVsKSkKKwkJCQlwZW5kaW5nTm90aWZ5Q2hhbm5l bHMgPSBsYXBwZW5kKHBlbmRpbmdOb3RpZnlDaGFubmVscywgY2hhbm5lbCk7CisJCX0KKwor CQkvKgorCQkgKiBGb3IgdGhlIGRpcmVjdCBhZHZhbmNlbWVudCBvcHRpbWl6YXRpb24gaW4g U2lnbmFsQmFja2VuZHMoKSwgd2UKKwkJICogbmVlZCB0byBlbnN1cmUgdGhhdCBubyBvdGhl ciBiYWNrZW5kIGNhbiBpbnNlcnQgcXVldWUgZW50cmllcworCQkgKiBiZXR3ZWVuIHF1ZXVl SGVhZEJlZm9yZVdyaXRlIGFuZCBxdWV1ZUhlYWRBZnRlcldyaXRlLiAgVGhlCisJCSAqIGhl YXZ5d2VpZ2h0IGxvY2sgYWJvdmUgcHJvdmlkZXMgdGhpcyBndWFyYW50ZWUsIHNpbmNlIGl0 IHNlcmlhbGl6ZXMKKwkJICogYWxsIHdyaXRlcnMuCisJCSAqCisJCSAqIE5vdGU6IGlmIHRo ZSBoZWF2eXdlaWdodCBsb2NrIHdlcmUgZXZlciByZW1vdmVkIGZvciBzY2FsYWJpbGl0eQor CQkgKiByZWFzb25zLCB3ZSBjb3VsZCBhY2hpZXZlIHRoZSBzYW1lIGd1YXJhbnRlZSBieSBo b2xkaW5nCisJCSAqIE5vdGlmeVF1ZXVlTG9jayBpbiBFWENMVVNJVkUgbW9kZSBhY3Jvc3Mg YWxsIG91ciBpbnNlcnRpb25zLCByYXRoZXIKKwkJICogdGhhbiByZWxlYXNpbmcgYW5kIHJl YWNxdWlyaW5nIGl0IGZvciBlYWNoIHBhZ2UgYXMgd2UgZG8gYmVsb3cuCisJCSAqLworCisJ CS8qIEluaXRpYWxpemUgcXVldWVIZWFkQmVmb3JlV3JpdGUgdG8gYSBzYWZlIGRlZmF1bHQg Ki8KKwkJU0VUX1FVRVVFX1BPUyhxdWV1ZUhlYWRCZWZvcmVXcml0ZSwgMCwgMCk7CisKIAkJ LyogTm93IHB1c2ggdGhlIG5vdGlmaWNhdGlvbnMgaW50byB0aGUgcXVldWUgKi8KIAkJbmV4 dE5vdGlmeSA9IGxpc3RfaGVhZChwZW5kaW5nTm90aWZpZXMtPmV2ZW50cyk7CiAJCXdoaWxl IChuZXh0Tm90aWZ5ICE9IE5VTEwpCkBAIC05MzksMTIgKzExMTUsMzMgQEAgUHJlQ29tbWl0 X05vdGlmeSh2b2lkKQogCQkJICogcG9pbnQgaW4gdGltZSB3ZSBjYW4gc3RpbGwgcm9sbCB0 aGUgdHJhbnNhY3Rpb24gYmFjay4KIAkJCSAqLwogCQkJTFdMb2NrQWNxdWlyZShOb3RpZnlR dWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwkJCS8qCisJCQkgKiBPbiB0aGUgZmlyc3Qg aXRlcmF0aW9uLCBzYXZlIHRoZSBxdWV1ZSBoZWFkIHBvc2l0aW9uIGJlZm9yZSB3ZQorCQkJ ICogd3JpdGUgYW55IG5vdGlmaWNhdGlvbnMuICBUaGlzIGlzIHVzZWQgYnkgU2lnbmFsQmFj a2VuZHMoKSB0bworCQkJICogaWRlbnRpZnkgYmFja2VuZHMgdGhhdCBjYW4gYmUgYWR2YW5j ZWQgZGlyZWN0bHkgd2l0aG91dCB3YWtpbmcKKwkJCSAqIHRoZW0gdXAuCisJCQkgKi8KKwkJ CWlmIChmaXJzdEl0ZXJhdGlvbikKKwkJCXsKKwkJCQlxdWV1ZUhlYWRCZWZvcmVXcml0ZSA9 IFFVRVVFX0hFQUQ7CisJCQkJZmlyc3RJdGVyYXRpb24gPSBmYWxzZTsKKwkJCX0KKwogCQkJ YXN5bmNRdWV1ZUZpbGxXYXJuaW5nKCk7CiAJCQlpZiAoYXN5bmNRdWV1ZUlzRnVsbCgpKQog CQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkoZXJyY29kZShFUlJDT0RFX1BST0dSQU1fTElN SVRfRVhDRUVERUQpLAogCQkJCQkJIGVycm1zZygidG9vIG1hbnkgbm90aWZpY2F0aW9ucyBp biB0aGUgTk9USUZZIHF1ZXVlIikpKTsKIAkJCW5leHROb3RpZnkgPSBhc3luY1F1ZXVlQWRk RW50cmllcyhuZXh0Tm90aWZ5KTsKKworCQkJLyoKKwkJCSAqIENhcHR1cmUgdGhlIHF1ZXVl IGhlYWQgYWZ0ZXIgZWFjaCBiYXRjaCBvZiBlbnRyaWVzLiAgT24gdGhlCisJCQkgKiBsYXN0 IGl0ZXJhdGlvbiwgdGhpcyBnaXZlcyB1cyB0aGUgZmluYWwgcXVldWUgaGVhZCBwb3NpdGlv biBmb3IKKwkJCSAqIFNpZ25hbEJhY2tlbmRzKCkgdG8gdXNlIHdoZW4gYWR2YW5jaW5nIGlk bGUgYmFja2VuZHMuCisJCQkgKi8KKwkJCXF1ZXVlSGVhZEFmdGVyV3JpdGUgPSBRVUVVRV9I RUFEOworCiAJCQlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7CiAJCX0KIApAQCAt MTA5Nyw2ICsxMjk0LDcgQEAgRXhlY19MaXN0ZW5QcmVDb21taXQodm9pZCkKIAkJCXByZXZM aXN0ZW5lciA9IGk7CiAJfQogCVFVRVVFX0JBQ0tFTkRfUE9TKE15UHJvY051bWJlcikgPSBt YXg7CisJUVVFVUVfQkFDS0VORF9ET05FUE9TKE15UHJvY051bWJlcikgPSBtYXg7CiAJUVVF VUVfQkFDS0VORF9QSUQoTXlQcm9jTnVtYmVyKSA9IE15UHJvY1BpZDsKIAlRVUVVRV9CQUNL RU5EX0RCT0lEKE15UHJvY051bWJlcikgPSBNeURhdGFiYXNlSWQ7CiAJLyogSW5zZXJ0IGJh Y2tlbmQgaW50byBsaXN0IG9mIGxpc3RlbmVycyBhdCBjb3JyZWN0IHBvc2l0aW9uICovCkBA IC0xMTM1LDYgKzEzMzMsMTAgQEAgRXhlY19MaXN0ZW5QcmVDb21taXQodm9pZCkKIHN0YXRp YyB2b2lkCiBFeGVjX0xpc3RlbkNvbW1pdChjb25zdCBjaGFyICpjaGFubmVsKQogeworCUNo YW5uZWxIYXNoS2V5IGtleTsKKwlDaGFubmVsRW50cnkgKmVudHJ5OworCWJvb2wJCWZvdW5k OworCVByb2NOdW1iZXIgKmxpc3RlbmVyczsKIAlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7 CiAKIAkvKiBEbyBub3RoaW5nIGlmIHdlIGFyZSBhbHJlYWR5IGxpc3RlbmluZyBvbiB0aGlz IGNoYW5uZWwgKi8KQEAgLTExNTIsMjEgKzEzNTQsODQgQEAgRXhlY19MaXN0ZW5Db21taXQo Y29uc3QgY2hhciAqY2hhbm5lbCkKIAlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRj aFRvKFRvcE1lbW9yeUNvbnRleHQpOwogCWxpc3RlbkNoYW5uZWxzID0gbGFwcGVuZChsaXN0 ZW5DaGFubmVscywgcHN0cmR1cChjaGFubmVsKSk7CiAJTWVtb3J5Q29udGV4dFN3aXRjaFRv KG9sZGNvbnRleHQpOworCisJLyogTm93IHVwZGF0ZSB0aGUgc2hhcmVkIGNoYW5uZWxIYXNo IGZvciBTaWduYWxCYWNrZW5kcygpIHRvIHVzZSAqLworCWluaXRDaGFubmVsSGFzaCgpOwor CisJQ2hhbm5lbEhhc2hQcmVwYXJlS2V5KCZrZXksIE15RGF0YWJhc2VJZCwgY2hhbm5lbCk7 CisKKwkvKgorCSAqIEZvciBuZXcgZW50cmllcywgd2UgaW5pdGlhbGl6ZSBsaXN0ZW5lcnNB cnJheSB0byBJbnZhbGlkRHNhUG9pbnRlciBhcyBhCisJICogbWFya2VyLiBUaGlzIGhhbmRs ZXMgYm90aCB0aGUgaW5pdGlhbCBjcmVhdGlvbiBhbmQgcG90ZW50aWFsIHJldHJ5CisJICog YWZ0ZXIgT09NLgorCSAqLworCWVudHJ5ID0gZHNoYXNoX2ZpbmRfb3JfaW5zZXJ0KGNoYW5u ZWxIYXNoLCAma2V5LCAmZm91bmQpOworCisJaWYgKCFmb3VuZCkKKwkJZW50cnktPmxpc3Rl bmVyc0FycmF5ID0gSW52YWxpZERzYVBvaW50ZXI7CisKKwlpZiAoIURzYVBvaW50ZXJJc1Zh bGlkKGVudHJ5LT5saXN0ZW5lcnNBcnJheSkpCisJeworCQkvKiBGaXJzdCBsaXN0ZW5lciBm b3IgdGhpcyBjaGFubmVsICovCisJCWVudHJ5LT5saXN0ZW5lcnNBcnJheSA9IGRzYV9hbGxv Y2F0ZShjaGFubmVsRFNBLAorCQkJCQkJCQkJCQkgc2l6ZW9mKFByb2NOdW1iZXIpICogSU5J VElBTF9MSVNURU5FUlNfQVJSQVlfU0laRSk7CisJCWVudHJ5LT5udW1MaXN0ZW5lcnMgPSAw OworCQllbnRyeS0+YWxsb2NhdGVkTGlzdGVuZXJzID0gSU5JVElBTF9MSVNURU5FUlNfQVJS QVlfU0laRTsKKwl9CisKKwlsaXN0ZW5lcnMgPSAoUHJvY051bWJlciAqKSBkc2FfZ2V0X2Fk ZHJlc3MoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJICAgZW50cnktPmxpc3RlbmVyc0FycmF5 KTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgZW50cnktPm51bUxpc3RlbmVyczsgaSsrKQor CXsKKwkJaWYgKGxpc3RlbmVyc1tpXSA9PSBNeVByb2NOdW1iZXIpCisJCXsKKwkJCWRzaGFz aF9yZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gsIGVudHJ5KTsKKwkJCXJldHVybjsJCQkJLyog QWxyZWFkeSByZWdpc3RlcmVkICovCisJCX0KKwl9CisKKwlpZiAoZW50cnktPm51bUxpc3Rl bmVycyA+PSBlbnRyeS0+YWxsb2NhdGVkTGlzdGVuZXJzKQorCXsKKwkJaW50CQkJbmV3X3Np emUgPSBlbnRyeS0+YWxsb2NhdGVkTGlzdGVuZXJzICogMjsKKwkJZHNhX3BvaW50ZXIgbmV3 X2FycmF5ID0gZHNhX2FsbG9jYXRlKGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJCSBzaXplb2Yo UHJvY051bWJlcikgKiBuZXdfc2l6ZSk7CisJCVByb2NOdW1iZXIgKm5ld19saXN0ZW5lcnMg PSAoUHJvY051bWJlciAqKSBkc2FfZ2V0X2FkZHJlc3MoY2hhbm5lbERTQSwKKwkJCQkJCQkJ CQkJCQkJCQkgICBuZXdfYXJyYXkpOworCisJCW1lbWNweShuZXdfbGlzdGVuZXJzLCBsaXN0 ZW5lcnMsCisJCQkgICBzaXplb2YoUHJvY051bWJlcikgKiBlbnRyeS0+bnVtTGlzdGVuZXJz KTsKKworCQlkc2FfZnJlZShjaGFubmVsRFNBLCBlbnRyeS0+bGlzdGVuZXJzQXJyYXkpOwor CQllbnRyeS0+bGlzdGVuZXJzQXJyYXkgPSBuZXdfYXJyYXk7CisJCWVudHJ5LT5hbGxvY2F0 ZWRMaXN0ZW5lcnMgPSBuZXdfc2l6ZTsKKwkJbGlzdGVuZXJzID0gbmV3X2xpc3RlbmVyczsK Kwl9CisKKwlsaXN0ZW5lcnNbZW50cnktPm51bUxpc3RlbmVyc10gPSBNeVByb2NOdW1iZXI7 CisJZW50cnktPm51bUxpc3RlbmVycysrOworCisJZHNoYXNoX3JlbGVhc2VfbG9jayhjaGFu bmVsSGFzaCwgZW50cnkpOwogfQogCiAvKgogICogRXhlY19Vbmxpc3RlbkNvbW1pdCAtLS0g c3Vicm91dGluZSBmb3IgQXRDb21taXRfTm90aWZ5CiAgKgotICogUmVtb3ZlIHRoZSBzcGVj aWZpZWQgY2hhbm5lbCBuYW1lIGZyb20gbGlzdGVuQ2hhbm5lbHMuCisgKiBSZW1vdmUgdGhl IHNwZWNpZmllZCBjaGFubmVsIGZyb20gdGhlIGxpc3Qgb2YgY2hhbm5lbHMgd2UgYXJlIGxp c3RlbmluZyBvbi4KICAqLwogc3RhdGljIHZvaWQKIEV4ZWNfVW5saXN0ZW5Db21taXQoY29u c3QgY2hhciAqY2hhbm5lbCkKIHsKKwlDaGFubmVsSGFzaEtleSBrZXk7CisJQ2hhbm5lbEVu dHJ5ICplbnRyeTsKKwlQcm9jTnVtYmVyICpsaXN0ZW5lcnM7CiAJTGlzdENlbGwgICAqcTsK KwlpbnQJCQlpOwogCiAJaWYgKFRyYWNlX25vdGlmeSkKIAkJZWxvZyhERUJVRzEsICJFeGVj X1VubGlzdGVuQ29tbWl0KCVzLCVkKSIsIGNoYW5uZWwsIE15UHJvY1BpZCk7CiAKKwkvKiBS ZW1vdmUgZnJvbSBvdXIgbG9jYWwgY2FjaGUgKi8KIAlmb3JlYWNoKHEsIGxpc3RlbkNoYW5u ZWxzKQogCXsKIAkJY2hhcgkgICAqbGNoYW4gPSAoY2hhciAqKSBsZmlyc3QocSk7CkBAIC0x MTc5LDYgKzE0NDQsNDYgQEAgRXhlY19Vbmxpc3RlbkNvbW1pdChjb25zdCBjaGFyICpjaGFu bmVsKQogCQl9CiAJfQogCisJLyogTm93IHJlbW92ZSBmcm9tIHRoZSBzaGFyZWQgY2hhbm5l bEhhc2ggKi8KKwlpZiAoY2hhbm5lbEhhc2ggPT0gTlVMTCkKKwkJcmV0dXJuOworCisJQ2hh bm5lbEhhc2hQcmVwYXJlS2V5KCZrZXksIE15RGF0YWJhc2VJZCwgY2hhbm5lbCk7CisKKwkv KiBMb29rIHVwIHRoZSBjaGFubmVsIHdpdGggZXhjbHVzaXZlIGxvY2sgc28gd2UgY2FuIG1v ZGlmeSBpdCAqLworCWVudHJ5ID0gZHNoYXNoX2ZpbmQoY2hhbm5lbEhhc2gsICZrZXksIHRy dWUpOworCWlmIChlbnRyeSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlsaXN0ZW5lcnMgPSAo UHJvY051bWJlciAqKSBkc2FfZ2V0X2FkZHJlc3MoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJ ICAgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKworCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+ bnVtTGlzdGVuZXJzOyBpKyspCisJeworCQlpZiAobGlzdGVuZXJzW2ldID09IE15UHJvY051 bWJlcikKKwkJeworCQkJZW50cnktPm51bUxpc3RlbmVycy0tOworCQkJaWYgKGkgPCBlbnRy eS0+bnVtTGlzdGVuZXJzKQorCQkJCW1lbW1vdmUoJmxpc3RlbmVyc1tpXSwgJmxpc3RlbmVy c1tpICsgMV0sCisJCQkJCQlzaXplb2YoUHJvY051bWJlcikgKiAoZW50cnktPm51bUxpc3Rl bmVycyAtIGkpKTsKKworCQkJaWYgKGVudHJ5LT5udW1MaXN0ZW5lcnMgPT0gMCkKKwkJCXsK KwkJCQkvKiBMYXN0IGxpc3RlbmVyIGZvciB0aGlzIGNoYW5uZWwgKi8KKwkJCQlkc2FfZnJl ZShjaGFubmVsRFNBLCBlbnRyeS0+bGlzdGVuZXJzQXJyYXkpOworCQkJCWRzaGFzaF9kZWxl dGVfZW50cnkoY2hhbm5lbEhhc2gsIGVudHJ5KTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJ CQlkc2hhc2hfcmVsZWFzZV9sb2NrKGNoYW5uZWxIYXNoLCBlbnRyeSk7CisJCQl9CisKKwkJ CXJldHVybjsKKwkJfQorCX0KKworCWRzaGFzaF9yZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gs IGVudHJ5KTsKKwogCS8qCiAJICogV2UgZG8gbm90IGNvbXBsYWluIGFib3V0IHVubGlzdGVu aW5nIHNvbWV0aGluZyBub3QgYmVpbmcgbGlzdGVuZWQ7CiAJICogc2hvdWxkIHdlPwpAQCAt MTE5MywxMSArMTQ5OCw1MSBAQCBFeGVjX1VubGlzdGVuQ29tbWl0KGNvbnN0IGNoYXIgKmNo YW5uZWwpCiBzdGF0aWMgdm9pZAogRXhlY19Vbmxpc3RlbkFsbENvbW1pdCh2b2lkKQogewor CWRzaGFzaF9zZXFfc3RhdHVzIHN0YXR1czsKKwlDaGFubmVsRW50cnkgKmVudHJ5OworCiAJ aWYgKFRyYWNlX25vdGlmeSkKIAkJZWxvZyhERUJVRzEsICJFeGVjX1VubGlzdGVuQWxsQ29t bWl0KCVkKSIsIE15UHJvY1BpZCk7CiAKKwkvKiBDbGVhciBvdXIgbG9jYWwgY2FjaGUgKi8K IAlsaXN0X2ZyZWVfZGVlcChsaXN0ZW5DaGFubmVscyk7CiAJbGlzdGVuQ2hhbm5lbHMgPSBO SUw7CisKKwkvKiBOb3cgY2xlYXIgZnJvbSBzaGFyZWQgY2hhbm5lbEhhc2ggKi8KKwlpZiAo Y2hhbm5lbEhhc2ggPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZHNoYXNoX3NlcV9pbml0KCZz dGF0dXMsIGNoYW5uZWxIYXNoLCB0cnVlKTsKKwl3aGlsZSAoKGVudHJ5ID0gZHNoYXNoX3Nl cV9uZXh0KCZzdGF0dXMpKSAhPSBOVUxMKQorCXsKKwkJaWYgKGVudHJ5LT5rZXkuZGJvaWQg PT0gTXlEYXRhYmFzZUlkKQorCQl7CisJCQlQcm9jTnVtYmVyICpsaXN0ZW5lcnM7CisJCQlp bnQJCQlpOworCisJCQlsaXN0ZW5lcnMgPSAoUHJvY051bWJlciAqKSBkc2FfZ2V0X2FkZHJl c3MoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJCQkgICBlbnRyeS0+bGlzdGVuZXJzQXJyYXkp OworCisJCQlmb3IgKGkgPSAwOyBpIDwgZW50cnktPm51bUxpc3RlbmVyczsgaSsrKQorCQkJ eworCQkJCWlmIChsaXN0ZW5lcnNbaV0gPT0gTXlQcm9jTnVtYmVyKQorCQkJCXsKKwkJCQkJ ZW50cnktPm51bUxpc3RlbmVycy0tOworCQkJCQlpZiAoaSA8IGVudHJ5LT5udW1MaXN0ZW5l cnMpCisJCQkJCQltZW1tb3ZlKCZsaXN0ZW5lcnNbaV0sICZsaXN0ZW5lcnNbaSArIDFdLAor CQkJCQkJCQlzaXplb2YoUHJvY051bWJlcikgKiAoZW50cnktPm51bUxpc3RlbmVycyAtIGkp KTsKKworCQkJCQlpZiAoZW50cnktPm51bUxpc3RlbmVycyA9PSAwKQorCQkJCQl7CisJCQkJ CQlkc2FfZnJlZShjaGFubmVsRFNBLCBlbnRyeS0+bGlzdGVuZXJzQXJyYXkpOworCQkJCQkJ ZHNoYXNoX2RlbGV0ZV9jdXJyZW50KCZzdGF0dXMpOworCQkJCQl9CisJCQkJCWJyZWFrOwor CQkJCX0KKwkJCX0KKwkJfQorCX0KKwlkc2hhc2hfc2VxX3Rlcm0oJnN0YXR1cyk7CiB9CiAK IC8qCkBAIC0xNTY1LDEyICsxOTEwLDE5IEBAIGFzeW5jUXVldWVGaWxsV2FybmluZyh2b2lk KQogLyoKICAqIFNlbmQgc2lnbmFscyB0byBsaXN0ZW5pbmcgYmFja2VuZHMuCiAgKgotICog Tm9ybWFsbHkgd2Ugc2lnbmFsIG9ubHkgYmFja2VuZHMgaW4gb3VyIG93biBkYXRhYmFzZSwg c2luY2Ugb25seSB0aG9zZQotICogYmFja2VuZHMgY291bGQgYmUgaW50ZXJlc3RlZCBpbiBu b3RpZmllcyB3ZSBzZW5kLiAgSG93ZXZlciwgaWYgdGhlcmUncwotICogbm90aWZ5IHRyYWZm aWMgaW4gb3VyIGRhdGFiYXNlIGJ1dCBubyB0cmFmZmljIGluIGFub3RoZXIgZGF0YWJhc2Ug dGhhdAotICogZG9lcyBoYXZlIGxpc3RlbmVyKHMpLCB0aG9zZSBsaXN0ZW5lcnMgd2lsbCBm YWxsIGZ1cnRoZXIgYW5kIGZ1cnRoZXIKLSAqIGJlaGluZC4gIFdha2VuIHRoZW0gYW55d2F5 IGlmIHRoZXkncmUgZmFyIGVub3VnaCBiZWhpbmQsIHNvIHRoYXQgdGhleSdsbAotICogYWR2 YW5jZSB0aGVpciBxdWV1ZSBwb3NpdGlvbiBwb2ludGVycywgYWxsb3dpbmcgdGhlIGdsb2Jh bCB0YWlsIHRvIGFkdmFuY2UuCisgKiBOb3JtYWxseSB3ZSBzaWduYWwgb25seSBiYWNrZW5k cyBpbiBvdXIgb3duIGRhdGFiYXNlLCB0aGF0IGFyZQorICogbGlzdGVuaW5nIG9uIHRoZSBj aGFubmVscyB3aXRoIHBlbmRpbmcgbm90aWZpZXMsIHNpbmNlIG9ubHkgdGhvc2UKKyAqIGJh Y2tlbmRzIGFyZSBpbnRlcmVzdGVkIGluIG5vdGlmaWVzIHdlIHNlbmQuCisgKgorICogQmFj a2VuZHMgdGhhdCBhcmUgc3RpbGwgcG9zaXRpb25lZCBhdCB0aGUgcXVldWUgaGVhZCBmcm9t IGJlZm9yZSBvdXIKKyAqIGNvbW1pdCBjYW4gYmUgc2FmZWx5IGFkdmFuY2VkIGRpcmVjdGx5 IHRvIHRoZSBuZXcgaGVhZCwgc2luY2UgdGhlCisgKiBxdWV1ZSByZWdpb24gd2Ugd3JvdGUg aXMga25vd24gdG8gY29udGFpbiBvbmx5IG91ciBvd24gbm90aWZpY2F0aW9ucy4KKyAqIFRo aXMgYXZvaWRzIHVubmVjZXNzYXJ5IHdha2V1cHMgd2hlbiB0aGVyZSBpcyBub3RoaW5nIG9m IGludGVyZXN0IHRvCisgKiB0aGVtLgorICoKKyAqIEluIGFkZGl0aW9uLCBpZiBhIGJhY2tl bmQgaGFzIGZhbGxlbiB0b28gZmFyIGJlaGluZCBpbiB0aGUgcXVldWUsIHdlCisgKiBzaWdu YWwgaXQgc28gdGhhdCBpdCB3aWxsIGFkdmFuY2UgaXRzIHBvc2l0aW9uIGFuZCBhbGxvdyB0 aGUgZ2xvYmFsCisgKiB0YWlsIHBvaW50ZXIgdG8gbW92ZSBmb3J3YXJkLgogICoKICAqIFNp bmNlIHdlIGtub3cgdGhlIFByb2NOdW1iZXIgYW5kIHRoZSBQaWQgdGhlIHNpZ25hbGluZyBp cyBxdWl0ZSBjaGVhcC4KICAqCkBAIC0xNTgzLDYgKzE5MzUsMTMgQEAgU2lnbmFsQmFja2Vu ZHModm9pZCkKIAlpbnQzMgkgICAqcGlkczsKIAlQcm9jTnVtYmVyICpwcm9jbm9zOwogCWlu dAkJCWNvdW50OworCUxpc3RDZWxsICAgKmxjOworCisJLyoKKwkgKiBBdHRhY2ggdG8gdGhl IGNoYW5uZWwgaGFzaCBpZiBuZWVkZWQuICBXZSBtaWdodCBub3QgaGF2ZSBvbmUgaWYgdGhp cworCSAqIGJhY2tlbmQgaGFzbid0IGRvbmUgTElTVEVOLCBidXQgd2UgbmVlZCBpdCB0byBm aW5kIGxpc3RlbmVycy4KKwkgKi8KKwlpbml0Q2hhbm5lbEhhc2goKTsKIAogCS8qCiAJICog SWRlbnRpZnkgYmFja2VuZHMgdGhhdCB3ZSBuZWVkIHRvIHNpZ25hbC4gIFdlIGRvbid0IHdh bnQgdG8gc2VuZApAQCAtMTU5NywzNiArMTk1NiwxMTEgQEAgU2lnbmFsQmFja2VuZHModm9p ZCkKIAljb3VudCA9IDA7CiAKIAlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdf RVhDTFVTSVZFKTsKLQlmb3IgKFByb2NOdW1iZXIgaSA9IFFVRVVFX0ZJUlNUX0xJU1RFTkVS OyBpICE9IElOVkFMSURfUFJPQ19OVU1CRVI7IGkgPSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkp KQorCWZvcmVhY2gobGMsIHBlbmRpbmdOb3RpZnlDaGFubmVscykKKwl7CisJCWNoYXIJICAg KmNoYW5uZWwgPSAoY2hhciAqKSBsZmlyc3QobGMpOworCQlDaGFubmVsRW50cnkgKmVudHJ5 ID0gTlVMTDsKKwkJUHJvY051bWJlciAqbGlzdGVuZXJzOworCisJCWlmIChjaGFubmVsSGFz aCAhPSBOVUxMKQorCQl7CisJCQlDaGFubmVsSGFzaEtleSBrZXk7CisKKwkJCUNoYW5uZWxI YXNoUHJlcGFyZUtleSgma2V5LCBNeURhdGFiYXNlSWQsIGNoYW5uZWwpOworCQkJZW50cnkg PSBkc2hhc2hfZmluZChjaGFubmVsSGFzaCwgJmtleSwgZmFsc2UpOworCQl9CisKKwkJaWYg KGVudHJ5ID09IE5VTEwpCisJCQljb250aW51ZTsJCQkvKiBObyBsaXN0ZW5lcnMgcmVnaXN0 ZXJlZCBmb3IgdGhpcyBjaGFubmVsICovCisKKwkJbGlzdGVuZXJzID0gKFByb2NOdW1iZXIg KikgZHNhX2dldF9hZGRyZXNzKGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJCQkgICBlbnRyeS0+ bGlzdGVuZXJzQXJyYXkpOworCisJCWZvciAoaW50IGogPSAwOyBqIDwgZW50cnktPm51bUxp c3RlbmVyczsgaisrKQorCQl7CisJCQlQcm9jTnVtYmVyCWkgPSBsaXN0ZW5lcnNbal07CisJ CQlpbnQzMgkJcGlkOworCQkJUXVldWVQb3NpdGlvbiBwb3M7CisKKwkJCWlmIChRVUVVRV9C QUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpKQorCQkJCWNvbnRpbnVlOworCisJCQlwb3MgPSBR VUVVRV9CQUNLRU5EX1BPUyhpKTsKKwkJCXBpZCA9IFFVRVVFX0JBQ0tFTkRfUElEKGkpOwor CisJCQkvKiBTa2lwIGlmIGNhdWdodCB1cCAqLworCQkJaWYgKFFVRVVFX1BPU19FUVVBTChw b3MsIFFVRVVFX0hFQUQpKQorCQkJCWNvbnRpbnVlOworCisJCQlBc3NlcnQocGlkICE9IElu dmFsaWRQaWQpOworCisJCQlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpID0gdHJ1 ZTsKKwkJCXBpZHNbY291bnRdID0gcGlkOworCQkJcHJvY25vc1tjb3VudF0gPSBpOworCQkJ Y291bnQrKzsKKwkJfQorCisJCWRzaGFzaF9yZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gsIGVu dHJ5KTsKKwl9CisKKwkvKgorCSAqIERpcmVjdCBhZHZhbmNlbWVudCBhbmQgbGFnZ2luZyBi YWNrZW5kIGRldGVjdGlvbi4KKwkgKgorCSAqIERpcmVjdCBhZHZhbmNlbWVudDogYXZvaWQg d2FraW5nIGJhY2tlbmRzIHN0aWxsIHBvc2l0aW9uZWQgYXQgdGhlIG9sZAorCSAqIHF1ZXVl IGhlYWQgdGhhdCBhcmVuJ3QgaW50ZXJlc3RlZCBpbiBvdXIgbm90aWZpY2F0aW9ucy4KKwkg KgorCSAqIFRoZSBoZWF2eXdlaWdodCBsb2NrIG9uIGRhdGFiYXNlIDAgKGhlbGQgaW4gUHJl Q29tbWl0X05vdGlmeSkgZW5zdXJlcworCSAqIG5vIG90aGVyIGJhY2tlbmQgY2FuIGluc2Vy dCBub3RpZmljYXRpb25zIGluIHRoZSByZWdpb24gd2UganVzdCB3cm90ZS4KKwkgKiBFdmVu IHRob3VnaCB3ZSBtYXkgdGFrZSBhbmQgcmVsZWFzZSBOb3RpZnlRdWV1ZUxvY2sgbXVsdGlw bGUgdGltZXMKKwkgKiB3aGlsZSB3cml0aW5nLCB0aGUgaGVhdnl3ZWlnaHQgbG9jayBndWFy YW50ZWVzIHRoaXMgcmVnaW9uIGNvbnRhaW5zCisJICogb25seSBvdXIgbWVzc2FnZXMuICBU aGVyZWZvcmUsIGFueSBiYWNrZW5kIHN0aWxsIHBvc2l0aW9uZWQgYXQgdGhlCisJICogcXVl dWUgaGVhZCBmcm9tIGJlZm9yZSBvdXIgd3JpdGUgY2FuIGJlIHNhZmVseSBhZHZhbmNlZCB0 byB0aGUgY3VycmVudAorCSAqIHF1ZXVlIGhlYWQgd2l0aG91dCB3YWtpbmcgaXQuCisJICoK KwkgKiBGYWxzZS1wb3NpdGl2ZSBwb3NzaWJpbGl0eTogaWYgYSBiYWNrZW5kIHdhcyBwcmV2 aW91c2x5IHNpZ25hbGVkIGJ1dAorCSAqIGhhc24ndCB5ZXQgYXdva2VuLCB3ZSdsbCBza2lw IGFkdmFuY2luZyBpdCAoYmVjYXVzZSB3YWtldXBQZW5kaW5nIGlzCisJICogdHJ1ZSkuICBU aGlzIGlzIHNhZmUgLSB0aGUgYmFja2VuZCB3aWxsIGFkdmFuY2UgaXRzIHBvaW50ZXIgd2hl biBpdAorCSAqIGRvZXMgd2FrZSB1cC4gIFRoZSBhbHRlcm5hdGl2ZSAoYWR2YW5jaW5nIGl0 IGFueXdheSkgd291bGQgcmlzaworCSAqIGFkdmFuY2luZyBvdmVyIG5vdGlmaWNhdGlvbnMg ZnJvbSB3aG9ldmVyIHNpZ25hbGVkIGl0LgorCSAqCisJICogTGFnZ2luZyBiYWNrZW5kczog d2UgYWxzbyBjaGVjayBpZiBhbnkgYmFja2VuZCBoYXMgZmFsbGVuIHRvbyBmYXIKKwkgKiBi ZWhpbmQgYW5kIHNpZ25hbCBpdCB0byBjYXRjaCB1cCwgYWxsb3dpbmcgdGhlIGdsb2JhbCB0 YWlsIHRvIGFkdmFuY2UuCisJICovCisJZm9yIChQcm9jTnVtYmVyIGkgPSBRVUVVRV9GSVJT VF9MSVNURU5FUjsKKwkJIGkgIT0gSU5WQUxJRF9QUk9DX05VTUJFUjsKKwkJIGkgPSBRVUVV RV9ORVhUX0xJU1RFTkVSKGkpKQogCXsKLQkJaW50MzIJCXBpZCA9IFFVRVVFX0JBQ0tFTkRf UElEKGkpOwogCQlRdWV1ZVBvc2l0aW9uIHBvczsKKwkJaW50NjQJCWxhZzsKKwkJaW50MzIJ CXBpZDsKKworCQlpZiAoUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhpKSkKKwkJCWNv bnRpbnVlOwogCi0JCUFzc2VydChwaWQgIT0gSW52YWxpZFBpZCk7CiAJCXBvcyA9IFFVRVVF X0JBQ0tFTkRfUE9TKGkpOwotCQlpZiAoUVVFVUVfQkFDS0VORF9EQk9JRChpKSA9PSBNeURh dGFiYXNlSWQpCisKKwkJLyogRGlyZWN0IGFkdmFuY2VtZW50IGZvciBpZGxlIGJhY2tlbmRz IGF0IHRoZSBvbGQgaGVhZCAqLworCQlpZiAocGVuZGluZ05vdGlmaWVzICE9IE5VTEwgJiYK KwkJCVFVRVVFX1BPU19FUVVBTChwb3MsIHF1ZXVlSGVhZEJlZm9yZVdyaXRlKSkKIAkJewot CQkJLyoKLQkJCSAqIEFsd2F5cyBzaWduYWwgbGlzdGVuZXJzIGluIG91ciBvd24gZGF0YWJh c2UsIHVubGVzcyB0aGV5J3JlCi0JCQkgKiBhbHJlYWR5IGNhdWdodCB1cCAodW5saWtlbHks IGJ1dCBwb3NzaWJsZSkuCi0JCQkgKi8KLQkJCWlmIChRVUVVRV9QT1NfRVFVQUwocG9zLCBR VUVVRV9IRUFEKSkKLQkJCQljb250aW51ZTsKKwkJCVFVRVVFX0JBQ0tFTkRfUE9TKGkpID0g cXVldWVIZWFkQWZ0ZXJXcml0ZTsKKwkJCXBvcyA9IHF1ZXVlSGVhZEFmdGVyV3JpdGU7CiAJ CX0KLQkJZWxzZQorCisJCS8qIFNpZ25hbCBiYWNrZW5kcyB0aGF0IGhhdmUgZmFsbGVuIHRv byBmYXIgYmVoaW5kICovCisJCWxhZyA9IGFzeW5jUXVldWVQYWdlRGlmZihRVUVVRV9QT1Nf UEFHRShRVUVVRV9IRUFEKSwKKwkJCQkJCQkJIFFVRVVFX1BPU19QQUdFKHBvcykpOworCisJ CWlmIChsYWcgPj0gUVVFVUVfQ0xFQU5VUF9ERUxBWSkKIAkJewotCQkJLyoKLQkJCSAqIExp c3RlbmVycyBpbiBvdGhlciBkYXRhYmFzZXMgc2hvdWxkIGJlIHNpZ25hbGVkIG9ubHkgaWYg dGhleQotCQkJICogYXJlIGZhciBiZWhpbmQuCi0JCQkgKi8KLQkJCWlmIChhc3luY1F1ZXVl UGFnZURpZmYoUVVFVUVfUE9TX1BBR0UoUVVFVUVfSEVBRCksCi0JCQkJCQkJCSAgIFFVRVVF X1BPU19QQUdFKHBvcykpIDwgUVVFVUVfQ0xFQU5VUF9ERUxBWSkKLQkJCQljb250aW51ZTsK KwkJCXBpZCA9IFFVRVVFX0JBQ0tFTkRfUElEKGkpOworCQkJQXNzZXJ0KHBpZCAhPSBJbnZh bGlkUGlkKTsKKworCQkJUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhpKSA9IHRydWU7 CisJCQlwaWRzW2NvdW50XSA9IHBpZDsKKwkJCXByb2Nub3NbY291bnRdID0gaTsKKwkJCWNv dW50Kys7CiAJCX0KLQkJLyogT0ssIG5lZWQgdG8gc2lnbmFsIHRoaXMgb25lICovCi0JCXBp ZHNbY291bnRdID0gcGlkOwotCQlwcm9jbm9zW2NvdW50XSA9IGk7Ci0JCWNvdW50Kys7CiAJ fQogCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2NrKTsKIApAQCAtMTg2NSw2ICsyMjk5 LDcgQEAgYXN5bmNRdWV1ZVJlYWRBbGxOb3RpZmljYXRpb25zKHZvaWQpCiAJTFdMb2NrQWNx dWlyZShOb3RpZnlRdWV1ZUxvY2ssIExXX1NIQVJFRCk7CiAJLyogQXNzZXJ0IGNoZWNrcyB0 aGF0IHdlIGhhdmUgYSB2YWxpZCBzdGF0ZSBlbnRyeSAqLwogCUFzc2VydChNeVByb2NQaWQg PT0gUVVFVUVfQkFDS0VORF9QSUQoTXlQcm9jTnVtYmVyKSk7CisJUVVFVUVfQkFDS0VORF9X QUtFVVBfUEVORElORyhNeVByb2NOdW1iZXIpID0gZmFsc2U7CiAJcG9zID0gUVVFVUVfQkFD S0VORF9QT1MoTXlQcm9jTnVtYmVyKTsKIAloZWFkID0gUVVFVUVfSEVBRDsKIAlMV0xvY2tS ZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7CkBAIC0xOTg1LDkgKzI0MjAsMjAgQEAgYXN5bmNR dWV1ZVJlYWRBbGxOb3RpZmljYXRpb25zKHZvaWQpCiAJfQogCVBHX0ZJTkFMTFkoKTsKIAl7 Ci0JCS8qIFVwZGF0ZSBzaGFyZWQgc3RhdGUgKi8KKwkJLyoKKwkJICogVXBkYXRlIHNoYXJl ZCBzdGF0ZS4KKwkJICoKKwkJICogV2UgdXBkYXRlIGRvbmVQb3MgdG8gd2hhdCB3ZSBhY3R1 YWxseSByZWFkICh0aGUgbG9jYWwgcG9zCisJCSAqIHZhcmlhYmxlKSwgYXMgdGhpcyBpcyB1 c2VkIGZvciB0cnVuY2F0aW9uIHNhZmV0eS4gIEZvciB0aGUgcmVhZAorCQkgKiBwb3NpdGlv biAocG9zKSwgd2UgdXNlIHRoZSBtYXhpbXVtIG9mIG91ciBsb2NhbCBwb3NpdGlvbiBhbmQg dGhlCisJCSAqIGN1cnJlbnQgc2hhcmVkIHBvc2l0aW9uLCBpbiBjYXNlIGFub3RoZXIgYmFj a2VuZCB1c2VkIGRpcmVjdAorCQkgKiBhZHZhbmNlbWVudCB0byBza2lwIHVzIGFoZWFkIHdo aWxlIHdlIHdlcmUgcmVhZGluZy4gIFRoaXMgcHJldmVudHMKKwkJICogdXMgZnJvbSBnb2lu ZyBiYWNrd2FyZHMgYW5kIHBvdGVudGlhbGx5IHBvaW50aW5nIHRvIGEgdHJ1bmNhdGVkCisJ CSAqIHBhZ2UuCisJCSAqLwogCQlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdf U0hBUkVEKTsKLQkJUVVFVUVfQkFDS0VORF9QT1MoTXlQcm9jTnVtYmVyKSA9IHBvczsKKwkJ UVVFVUVfQkFDS0VORF9ET05FUE9TKE15UHJvY051bWJlcikgPSBwb3M7CisJCVFVRVVFX0JB Q0tFTkRfUE9TKE15UHJvY051bWJlcikgPSBRVUVVRV9QT1NfTUFYKHBvcywgUVVFVUVfQkFD S0VORF9QT1MoTXlQcm9jTnVtYmVyKSk7CiAJCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVM b2NrKTsKIAl9CiAJUEdfRU5EX1RSWSgpOwpAQCAtMjEzNyw3ICsyNTgzLDE0IEBAIGFzeW5j UXVldWVBZHZhbmNlVGFpbCh2b2lkKQogCWZvciAoUHJvY051bWJlciBpID0gUVVFVUVfRklS U1RfTElTVEVORVI7IGkgIT0gSU5WQUxJRF9QUk9DX05VTUJFUjsgaSA9IFFVRVVFX05FWFRf TElTVEVORVIoaSkpCiAJewogCQlBc3NlcnQoUVVFVUVfQkFDS0VORF9QSUQoaSkgIT0gSW52 YWxpZFBpZCk7Ci0JCW1pbiA9IFFVRVVFX1BPU19NSU4obWluLCBRVUVVRV9CQUNLRU5EX1BP UyhpKSk7CisKKwkJLyoKKwkJICogVXNlIGRvbmVQb3MgcmF0aGVyIHRoYW4gcG9zIGZvciB0 cnVuY2F0aW9uIHNhZmV0eS4gIFRoZSBkb25lUG9zCisJCSAqIGZpZWxkIHJlcHJlc2VudHMg d2hhdCB0aGUgYmFja2VuZCBoYXMgZGVmaW5pdGl2ZWx5IHByb2Nlc3NlZCwgd2hpbGUKKwkJ ICogcG9zIGNhbiBiZSBhZHZhbmNlZCBieSBvdGhlciBiYWNrZW5kcyB2aWEgZGlyZWN0IGFk dmFuY2VtZW50LiAgVGhpcworCQkgKiBwcmV2ZW50cyB0cnVuY2F0aW5nIHBhZ2VzIHRoYXQg YSBiYWNrZW5kIGlzIHN0aWxsIHJlYWRpbmcgZnJvbS4KKwkJICovCisJCW1pbiA9IFFVRVVF X1BPU19NSU4obWluLCBRVUVVRV9CQUNLRU5EX0RPTkVQT1MoaSkpOwogCX0KIAlRVUVVRV9U QUlMID0gbWluOwogCW9sZHRhaWxwYWdlID0gUVVFVUVfU1RPUF9QQUdFOwpAQCAtMjM3Myw3 ICsyODI2LDcgQEAgbm90aWZpY2F0aW9uX21hdGNoKGNvbnN0IHZvaWQgKmtleTEsIGNvbnN0 IHZvaWQgKmtleTIsIFNpemUga2V5c2l6ZSkKIAlyZXR1cm4gMTsJCQkJCS8qIG5vdCBlcXVh bCAqLwogfQogCi0vKiBDbGVhciB0aGUgcGVuZGluZ0FjdGlvbnMgYW5kIHBlbmRpbmdOb3Rp ZmllcyBsaXN0cy4gKi8KKy8qIENsZWFyIHRoZSBwZW5kaW5nQWN0aW9ucywgcGVuZGluZ05v dGlmaWVzLCBhbmQgcGVuZGluZ05vdGlmeUNoYW5uZWxzIGxpc3RzLiAqLwogc3RhdGljIHZv aWQKIENsZWFyUGVuZGluZ0FjdGlvbnNBbmROb3RpZmllcyh2b2lkKQogewpAQCAtMjM4NSw2 ICsyODM4LDcgQEAgQ2xlYXJQZW5kaW5nQWN0aW9uc0FuZE5vdGlmaWVzKHZvaWQpCiAJICov CiAJcGVuZGluZ0FjdGlvbnMgPSBOVUxMOwogCXBlbmRpbmdOb3RpZmllcyA9IE5VTEw7CisJ cGVuZGluZ05vdGlmeUNoYW5uZWxzID0gTklMOwogfQogCiAvKgpAQCAtMjM5NSwzICsyODQ5 LDE2IEBAIGNoZWNrX25vdGlmeV9idWZmZXJzKGludCAqbmV3dmFsLCB2b2lkICoqZXh0cmEs IEd1Y1NvdXJjZSBzb3VyY2UpCiB7CiAJcmV0dXJuIGNoZWNrX3NscnVfYnVmZmVycygibm90 aWZ5X2J1ZmZlcnMiLCBuZXd2YWwpOwogfQorCisKKy8qCisgKiBDaGFubmVsSGFzaFByZXBh cmVLZXkKKyAqCQlQcmVwYXJlIGEgY2hhbm5lbCBrZXkgZm9yIHVzZSBhcyBhIGhhc2gga2V5 LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK0NoYW5uZWxIYXNoUHJlcGFyZUtleShDaGFu bmVsSGFzaEtleSAqa2V5LCBPaWQgZGJvaWQsIGNvbnN0IGNoYXIgKmNoYW5uZWwpCit7CisJ bWVtc2V0KGtleSwgMCwgc2l6ZW9mKENoYW5uZWxIYXNoS2V5KSk7CisJa2V5LT5kYm9pZCA9 IGRib2lkOworCXN0cmxjcHkoa2V5LT5jaGFubmVsLCBjaGFubmVsLCBOQU1FREFUQUxFTik7 Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50 X25hbWVzLnR4dCBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFt ZXMudHh0CmluZGV4IDc1NTNmNmVhY2VmLi5hNGZhZGJkMDc2NyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKQEAgLTM2Niw2 ICszNjYsNyBAQCBTdWJ0cmFuc0J1ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9uIGEgc3ViLXRy YW5zYWN0aW9uIFNMUlUgYnVmZmVyLiIKIE11bHRpWGFjdE9mZnNldEJ1ZmZlcgkiV2FpdGlu ZyBmb3IgSS9PIG9uIGEgbXVsdGl4YWN0IG9mZnNldCBTTFJVIGJ1ZmZlci4iCiBNdWx0aVhh Y3RNZW1iZXJCdWZmZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBhIG11bHRpeGFjdCBtZW1iZXIg U0xSVSBidWZmZXIuIgogTm90aWZ5QnVmZmVyCSJXYWl0aW5nIGZvciBJL08gb24gYSA8Y29t bWFuZD5OT1RJRlk8L2NvbW1hbmQ+IG1lc3NhZ2UgU0xSVSBidWZmZXIuIgorTm90aWZ5Q2hh bm5lbEhhc2gJIldhaXRpbmcgdG8gYWNjZXNzIHRoZSA8Y29tbWFuZD5OT1RJRlk8L2NvbW1h bmQ+IGNoYW5uZWwgaGFzaCB0YWJsZS4iCiBTZXJpYWxCdWZmZXIJIldhaXRpbmcgZm9yIEkv TyBvbiBhIHNlcmlhbGl6YWJsZSB0cmFuc2FjdGlvbiBjb25mbGljdCBTTFJVIGJ1ZmZlci4i CiBXQUxJbnNlcnQJIldhaXRpbmcgdG8gaW5zZXJ0IFdBTCBkYXRhIGludG8gYSBtZW1vcnkg YnVmZmVyLiIKIEJ1ZmZlckNvbnRlbnQJIldhaXRpbmcgdG8gYWNjZXNzIGEgZGF0YSBwYWdl IGluIG1lbW9yeS4iCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xp c3QuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oCmluZGV4IDA2YTFmZmQ0 YjA4Li4yNzY4ZGRmNDQxNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xv Y2tsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmgKQEAgLTEw MCw2ICsxMDAsNyBAQCBQR19MV0xPQ0tUUkFOQ0hFKFNVQlRSQU5TX0JVRkZFUiwgU3VidHJh bnNCdWZmZXIpCiBQR19MV0xPQ0tUUkFOQ0hFKE1VTFRJWEFDVE9GRlNFVF9CVUZGRVIsIE11 bHRpWGFjdE9mZnNldEJ1ZmZlcikKIFBHX0xXTE9DS1RSQU5DSEUoTVVMVElYQUNUTUVNQkVS X0JVRkZFUiwgTXVsdGlYYWN0TWVtYmVyQnVmZmVyKQogUEdfTFdMT0NLVFJBTkNIRShOT1RJ RllfQlVGRkVSLCBOb3RpZnlCdWZmZXIpCitQR19MV0xPQ0tUUkFOQ0hFKE5PVElGWV9DSEFO TkVMX0hBU0gsIE5vdGlmeUNoYW5uZWxIYXNoKQogUEdfTFdMT0NLVFJBTkNIRShTRVJJQUxf QlVGRkVSLCBTZXJpYWxCdWZmZXIpCiBQR19MV0xPQ0tUUkFOQ0hFKFdBTF9JTlNFUlQsIFdB TEluc2VydCkKIFBHX0xXTE9DS1RSQU5DSEUoQlVGRkVSX0NPTlRFTlQsIEJ1ZmZlckNvbnRl bnQpCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDUyOTBiOTFlODNlLi41Y2Nk ZDQwNDNlOCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK KysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTQxMiw2ICs0MTIs OCBAQCBDYXRhbG9nSWRNYXBFbnRyeQogQ2F0YWxvZ0luZGV4U3RhdGUKIENoYW5nZVZhck5v ZGVzX2NhbGxiYWNrCiBDaGFuZ2VWYXJOb2Rlc19jb250ZXh0CitDaGFubmVsRW50cnkKK0No YW5uZWxIYXNoS2V5CiBDaGVja1BvaW50CiBDaGVja1BvaW50U3RtdAogQ2hlY2twb2ludFN0 YXRzRGF0YQotLSAKMi41MC4xCgo= --e3629fae26ca493e8eec9fd65226a09d--