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 1vIrKn-00HTYi-05 for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Nov 2025 16:35:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vIrKk-006xIL-1R for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Nov 2025 16:35:06 +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.96) (envelope-from ) id 1vIrKj-006xIC-0w for pgsql-hackers@lists.postgresql.org; Tue, 11 Nov 2025 16:35:06 +0000 Received: from fout-b4-smtp.messagingengine.com ([202.12.124.147]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vIrKh-007BfH-17 for pgsql-hackers@postgresql.org; Tue, 11 Nov 2025 16:35:05 +0000 Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailfout.stl.internal (Postfix) with ESMTP id 4B4991D0011B for ; Tue, 11 Nov 2025 11:35:00 -0500 (EST) Received: from phl-imap-16 ([10.202.2.88]) by phl-compute-05.internal (MEProxy); Tue, 11 Nov 2025 11:35:00 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=compiler.org; h= 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=1762878900; x=1762965300; bh=qd+Mud/x4F moy6265QNi/VsHeuR/cuF1gEkkbEXB9Gk=; b=CxmyJD9nI3tqvxLlx6AaSQz14X 7W/4NHBzxxRQ07MvqImb/TUE5qZl2nDsnkdt9hW76X35dBYeS9XpthzkUfmeNW56 leK3suW08tUtbjQ2tOdsbtHWAX2r0cgYFazzrY/elgHTChEKWx1FG5Nk9c7bxD0w tFQx74/5CNUbEjhGDxXKbD7DhyD+kgJay1/3Hfv8q4Ys3x8J9YceNEe3/8RrS7zi oLu35nX7CVQy3+GkwM8IQdzBTUQF5os8hNB305pCjUbGdqgzhsZkkSxLINq/5fFD y8ijtDOUYj+Iv+pAqzpWDqxDhqBVGn2X7F8VAgMsBa3sZ8ltzc+AWOqITR3g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=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= 1762878900; x=1762965300; bh=qd+Mud/x4Fmoy6265QNi/VsHeuR/cuF1gEk kbEXB9Gk=; b=c98wcuXDmjQQ5AXjQDHbdpfgioi/uELF4QloRRV+smNwJ1AjBVJ 2vpnUA46jtzonGdGvWTWUh5ZywCh7w2+3mb/ETroyqEQcnoAkQ698kjIhbeKgq2w x34SK4nte5/H8S1V9VobS28Ou69c0BY2PA0UkG1B6BB4kV1RHre+24UqAEi9A/x5 wlb6UPlL/0WNEPVDpyF94VW/AxNTZRNYGQcUYsCfqOcyuOfnpZ18lUu6VaIk43QO Zuemmugsx5wmFimKXCXG2Xa2McafIz2jr8SqygcZfcv0QMygEaP9cTqxRGDKXnGp gc26zN21/TdRlAUufB9wNnLaiTL1aersQCQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddvtdduieekucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpefoggffhffvkfgjfhfutgesmhdtreerre dttdenucfhrhhomhepfdflohgvlhculfgrtghosghsohhnfdcuoehjohgvlhestghomhhp ihhlvghrrdhorhhgqeenucggtffrrghtthgvrhhnpeefheeutdegvdfgueeuueekieeuff ehkeeuleffveekkeegkeevhfekfffghfevleenucevlhhushhtvghrufhiiigvpedtnecu rfgrrhgrmhepmhgrihhlfhhrohhmpehjohgvlhestghomhhpihhlvghrrdhorhhgpdhnsg gprhgtphhtthhopedupdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehpghhsqhhl qdhhrggtkhgvrhhssehpohhsthhgrhgvshhqlhdrohhrgh X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id 85CB42CC0054; Tue, 11 Nov 2025 11:34:59 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: AE1r89ybsZ1g Date: Tue, 11 Nov 2025 17:34:39 +0100 From: "Joel Jacobson" To: pgsql-hackers Message-Id: <7456ec96-7a9c-45a0-988e-ba1c7f9ec937@app.fastmail.com> In-Reply-To: <26d4dd6a-cfc5-4efc-9704-9cd3216ed712@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-F22FC34!29AE8@gmail.com> <1547585.1760645808@sss.pgh.pa.us> <14865EB6-0BF4-462B-9072-10BDAC10C052@gmail.com> <0BCA1C2D-B92C-459E-B1A6-6D06BA4C62CF@gmail.com> <55d24cbb-e9ef-491f-a99b-b3dbd7cecdf9@app.fastmail.com> <38574cad-e90d-47b7-a015-753bb6bbc360@app.fastmail.com> <66631FB7-5BEA-4ED5-A694-9AD8B9CCFEE8@gmail.com> <4b7b49a5-5e1a-44a8-93e0-60457d15cb1d@app.fastmail.com> <82DEA2B6-6FC5-4A79-BDE3-1FD72F104A6E@gmail.com> <38de1036-d8cf-420c-b845-edb5a946b191@app.fastmail.com> <87E40BF8-8877-4DBD-9040-99AF8A4E6358@gmail.com> <7556f0d4-03fd-451a-bd34-5f62b424319a@app.fastmail.com> <290910DE-9A03-4AE6-B348-073D5DA96ACC@gmail.com> <4B243750-12BE-4C16-A769-A803268F40E3@gmail.com> <4605CAD6-69D5-4082-B96C-91FC0DE5399D@gmail.com> <294e1641-d658-4d43-8671-60e8ff860532@app.fastmail.com> <26d4dd6a-cfc5-4efc-9704-9cd3216ed712@app.fastmail.com> Subject: Re: Optimize LISTEN/NOTIFY Content-Type: multipart/mixed; boundary=b4df19c5dfde48148cf7efd56a3d1057 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --b4df19c5dfde48148cf7efd56a3d1057 Content-Type: text/plain Content-Transfer-Encoding: 7bit On Sat, Nov 8, 2025, at 16:04, Joel Jacobson wrote: > On Sat, Nov 8, 2025, at 13:59, Joel Jacobson wrote: >> On Fri, Nov 7, 2025, at 19:59, Joel Jacobson wrote: >> This in turn could cause a listening backend to remain behind, if there >> would be no more notifies, so it unfortunately seems like we will always >> need to signal when a backend isAdvancing, and therefore have no use of >> the advancingPos field. Having thought about this, I don't think this is actually a problem, since this isn't any worse than what we currently have in master. Listening backends can currently end up stationary behind QUEUE_HEAD, in exactly this situation, when they don't read up until QUEUE_HEAD in asyncQueueReadAllNotifications. In this case, we currently rely on another NOTIFY to wake them up, so v24 wouldn't be any worse. My apologies for again making the mistake of mixing in robustness improvements into this patch. I must keep in mind this is solely an optimization patch. I'm therefore attaching v24 again, but renamed to v26. /Joel --b4df19c5dfde48148cf7efd56a3d1057 Content-Disposition: attachment; filename*0="0001-optimize_listen_notify-v26.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0001-optimize=5Flisten=5Fnotify-v26.patch?=" Content-Transfer-Encoding: base64 RnJvbSBmYjgyMjEwODE0OWVhMDFmYTI1YTQ2ZjFhNGMwYmE3MWY4NmUxYTJiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogV2VkLCA4IE9jdCAyMDI1IDA5OjMwOjU0ICswMjAwClN1YmplY3Q6IFtQQVRD SCAxLzNdIEltcHJvdmUgTElTVEVOL05PVElGWSB0ZXN0IGNvdmVyYWdlCgpUaGlzIGFkZHMg 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 --b4df19c5dfde48148cf7efd56a3d1057 Content-Disposition: attachment; filename*0="0002-optimize_listen_notify-v26.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0002-optimize=5Flisten=5Fnotify-v26.patch?=" Content-Transfer-Encoding: base64 RnJvbSA5OWMyYmZlMGM5ZDdjNTE5YzQ5NGJjMTcwMTc1MGY1YjYwMzA2ZWM0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogRnJpLCA3IE5vdiAyMDI1IDE5OjA4OjM5ICswMTAwClN1YmplY3Q6IFtQQVRD SCAyLzNdIE9wdGltaXplIExJU1RFTi9OT1RJRlkgd2l0aCBzaGFyZWQgY2hhbm5lbCBtYXAg YW5kIGRpcmVjdAogYWR2YW5jZW1lbnQKClRoaXMgcGF0Y2ggcmV3b3JrcyB0aGUgTElTVEVO L05PVElGWSBzaWduYWxpbmcgcGF0aCB0byBhdm9pZCB0aGUKbG9uZy1zdGFuZGluZyBpbmVm ZmljaWVuY3kgd2hlcmUgZXZlcnkgY29tbWl0IHdha2VzIGFsbCBsaXN0ZW5pbmcKYmFja2Vu ZHMgaW4gdGhlIHNhbWUgZGF0YWJhc2UsIGV2ZW4gdGhvc2UgdGhhdCBhcmUgbGlzdGVuaW5n IG9uCmNvbXBsZXRlbHkgZGlmZmVyZW50IGNoYW5uZWxzLgoKUHJvYmxlbQotLS0tLS0tCgpB dCBwcmVzZW50LCBTaWduYWxCYWNrZW5kcyBoYXMgbm8gY2VudHJhbCBrbm93bGVkZ2Ugb2Yg d2hpY2ggYmFja2VuZApsaXN0ZW5zIG9uIHdoaWNoIGNoYW5uZWwuIFdoZW4gYSBiYWNrZW5k IGNvbW1pdHMgYSB0cmFuc2FjdGlvbiB0aGF0Cmlzc3VlZCBOT1RJRlksIGl0IHNpbXBseSBp dGVyYXRlcyBvdmVyIGFsbCByZWdpc3RlcmVkIGxpc3RlbmVycyBpbiB0aGUKc2FtZSBkYXRh YmFzZSBhbmQgc2VuZHMgZWFjaCBvbmUgYSBQUk9DU0lHX05PVElGWV9JTlRFUlJVUFQgc2ln bmFsLgoKVGhhdCBiZWhhdmlvciBpcyBmaW5lIHdoZW4gYWxsIGxpc3RlbmVycyBhcmUgb24g dGhlIHNhbWUgY2hhbm5lbCwgYnV0CndoZW4gbWFueSBiYWNrZW5kcyBhcmUgbGlzdGVuaW5n IG9uIGRpZmZlcmVudCBjaGFubmVscywgZWFjaCBOT1RJRlkKdHJpZ2dlcnMgYSBzdG9ybSBv ZiB1bm5lY2Vzc2FyeSB3YWtldXBzIGFuZCBjb250ZXh0IHN3aXRjaGVzLiBBcyB0aGUKbnVt YmVyIG9mIGlkbGUgbGlzdGVuZXJzIGdyb3dzLCB0aGlzIG9mdGVuIGJlY29tZXMgdGhlIGJv dHRsZW5lY2sgYW5kCnRocm91Z2hwdXQgZHJvcHMgc2hhcnBseS4KCk92ZXJ2aWV3IG9mIHRo ZSBzb2x1dGlvbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgcGF0Y2ggaW50cm9k dWNlcyBhIGxhemlseS1jcmVhdGVkIGR5bmFtaWMgc2hhcmVkIGhhc2ggKGRzaGFzaCkKYmFj a2VkIGJ5IGR5bmFtaWMgc2hhcmVkIG1lbW9yeSAoRFNBKSB0aGF0IG1hcHMgKGRib2lkLCBj aGFubmVsKSB0bwphcnJheXMgb2YgbGlzdGVuaW5nIGJhY2tlbmRzIChQcm9jTnVtYmVycyku IFRoaXMgYWxsb3dzIHRoZSBzZW5kZXIgdG8KdGFyZ2V0IG9ubHkgdGhvc2UgYmFja2VuZHMg YWN0dWFsbHkgbGlzdGVuaW5nIG9uIHRoZSBjaGFubmVscyBmb3Igd2hpY2gKaXQgaGFzIHF1 ZXVlZCBub3RpZmljYXRpb25zLgoKQXQgY29tbWl0IHRpbWU6CgoqIEF0Q29tbWl0X05vdGlm eSB1cGRhdGVzIHRoZSBzaGFyZWQgY2hhbm5lbEhhc2ggdG8gcmVmbGVjdCBhbnkgTElTVEVO CiAgb3IgVU5MSVNURU4gYWN0aW9ucyBwZXJmb3JtZWQgaW4gdGhlIHRyYW5zYWN0aW9uLgoq IFNpZ25hbEJhY2tlbmRzIGNvbnN1bHRzIHRoaXMgaGFzaCB0byBmaW5kIHRoZSBiYWNrZW5k cyB0aGF0IGFyZQogIGxpc3RlbmluZyBvbiB0aGUgY2hhbm5lbHMgYmVpbmcgbm90aWZpZWQg aW4gdGhlIGN1cnJlbnQgZGF0YWJhc2UsIGFuZAogIHNpZ25hbHMgb25seSB0aG9zZS4KCkVh Y2ggYmFja2VuZCdzIGVudHJ5IGluIEFzeW5jUXVldWVDb250cm9sIG5vdyBpbmNsdWRlcyBh IHdha2V1cFBlbmRpbmcKZmxhZyB0byBwcmV2ZW50IGR1cGxpY2F0ZSBzaWduYWxzIHdoaWxl IGEgcHJldmlvdXMgd2FrZXVwIGlzIHN0aWxsIGJlaW5nCnByb2Nlc3NlZC4KCkRpcmVjdCBh ZHZhbmNlbWVudAotLS0tLS0tLS0tLS0tLS0tLS0KCkEgZnVydGhlciBvcHRpbWl6YXRpb24g YXZvaWRzIHNpZ25hbGluZyBpZGxlIGJhY2tlbmRzIHRoYXQgYXJlIG5vdApsaXN0ZW5pbmcg b24gYW55IG9mIHRoZSBjaGFubmVscyBub3RpZmllZCB3aXRoaW4gdGhlIHRyYW5zYWN0aW9u LgoKV2hpbGUgcXVldWluZyBub3RpZmljYXRpb25zLCBQcmVDb21taXRfTm90aWZ5IHJlY29y ZHMgdGhlIHF1ZXVlIGhlYWQKcG9zaXRpb24gYm90aCBiZWZvcmUgYW5kIGFmdGVyIHdyaXRp bmcgaXRzIG5vdGlmaWNhdGlvbnMuIEJlY2F1c2UgYWxsCndyaXRlcnMgYXJlIHNlcmlhbGl6 ZWQgYnkgdGhlIGV4aXN0aW5nIGNsdXN0ZXItd2lkZSBoZWF2eXdlaWdodCBsb2NrIG9uCiJk YXRhYmFzZSAwIiwgbm8gYmFja2VuZCAoZnJvbSBhbnkgZGF0YWJhc2UpIGNhbiBpbnNlcnQg ZW50cmllcyBiZXR3ZWVuCnRob3NlIHR3byBwb2ludHMuIFRoaXMgZ3VhcmFudGVlcyB0aGF0 IHRoZSByZWdpb24gW29sZEhlYWQsIG5ld0hlYWQpCmNvbnRhaW5zIG9ubHkgdGhlIGVudHJp ZXMgd3JpdHRlbiBieSBvdXIgY29tbWl0LgoKU2lnbmFsQmFja2VuZHMgdXNlcyB0aGlzIGZh Y3QgdG8gZGlyZWN0bHkgYWR2YW5jZSBhbnkgYmFja2VuZCBzdGlsbApwb3NpdGlvbmVkIGF0 IG9sZEhlYWQgdXAgdG8gbmV3SGVhZCwgYXZvaWRpbmcgYSBuZWVkbGVzcyB3YWtldXAgZm9y Cmxpc3RlbmVycyB0aGF0IHdvdWxkIG90aGVyd2lzZSBub3QgZmluZCBhbnkgbm90aWZpZXMg b2YgaW50ZXJlc3QuCgpUbyBoYW5kbGUgYWR2YW5jaW5nIGJhY2tlbmRzIGNvcnJlY3RseSwg ZWFjaCBiYWNrZW5kJ3MgZW50cnkgdHJhY2tzIGJvdGgKd2hldGhlciBpdCBpcyBjdXJyZW50 bHkgYWR2YW5jaW5nIChpc0FkdmFuY2luZykgYW5kIHRoZSB0YXJnZXQgcG9zaXRpb24KaXQg aXMgYWR2YW5jaW5nIHRvIChhZHZhbmNpbmdQb3MpLiBUaGlzIGFsbG93cyBTaWduYWxCYWNr ZW5kcyB0byBzaWduYWwKYWR2YW5jaW5nIGJhY2tlbmRzIG9ubHkgd2hlbiB0aGVpciB0YXJn ZXQgcG9zaXRpb24gd291bGQgbGVhdmUgdGhlbQpiZWhpbmQgdGhlIG5ldyBxdWV1ZSBoZWFk LCB3aGlsZSBzYWZlbHkgZGlyZWN0LWFkdmFuY2luZyBpZGxlIGJhY2tlbmRzCnRoYXQgd291 bGQgbm90IGJlIGludGVyZXN0ZWQgaW4gdGhlIG5ld2x5IHdyaXR0ZW4gbm90aWZpY2F0aW9u cy4KCk90aGVyIG5vdGVzCi0tLS0tLS0tLS0tCgoqIE1haW50YWlucyBkdWFsIGRhdGEgc3Ry dWN0dXJlczogYSBzaGFyZWQgY2hhbm5lbEhhc2ggZm9yIGRldGVybWluaW5nCiAgd2hpY2gg YmFja2VuZHMgdG8gc2lnbmFsLCBhbmQgYSBsb2NhbCBwZXItYmFja2VuZCBsaXN0ZW5DaGFu bmVscyBsaXN0CiAgZm9yIGZhc3QgbG9jay1mcmVlIGxvb2t1cHMgZHVyaW5nIG5vdGlmaWNh dGlvbiBwcm9jZXNzaW5nLiBUaGlzIGF2b2lkcwogIGNvbnRlbnRpb24gb24gdGhlIHNoYXJl ZCBoYXNoIGR1cmluZyB0aGUgaGlnaC1mcmVxdWVuY3kgSXNMaXN0ZW5pbmdPbgogIGNoZWNr cyB0aGF0IG9jY3VyIGZvciBldmVyeSBub3RpZmljYXRpb24gcmVhZCBmcm9tIHRoZSBxdWV1 ZS4KKiBCYWNrZW5kcyByZW1haW4gcmVnaXN0ZXJlZCBpbiB0aGUgZ2xvYmFsIGxpc3RlbmVy IGxpc3QgYXMgbG9uZyBhcwogIGxpc3RlbkNoYW5uZWxzIGlzIG5vbi1lbXB0eS4KKiBBZGRz IExXTG9jayB0cmFuY2hlIE5PVElGWV9DSEFOTkVMX0hBU0ggYW5kIHdhaXQgZXZlbnQKICBO b3RpZnlDaGFubmVsSGFzaCBmb3IgdmlzaWJpbGl0eS4KKiBObyB1c2VyLXZpc2libGUgYmVo YXZpb3JhbCBjaGFuZ2VzOyB0aGlzIGlzIGFuIGludGVybmFsIG9wdGltaXphdGlvbgogIG9u bHkuCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyAgICAgICAgICAgICAgICAg IHwgNzE2ICsrKysrKysrKysrKysrKy0tLQogLi4uL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZl bnRfbmFtZXMudHh0ICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2Nr bGlzdC5oICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICAgICAgICAgICAgfCAgIDIgKwogNCBmaWxlcyBjaGFuZ2VkLCA2MTYgaW5z ZXJ0aW9ucygrKSwgMTA0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2FzeW5jLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCmluZGV4 IDRiZDM3ZDViZWI1Li45ZjdiOGEzMzI0YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvYXN5bmMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCkBAIC0y NCw4ICsyNCwxMCBAQAogICoJICBBbGwgbm90aWZpY2F0aW9uIG1lc3NhZ2VzIGFyZSBwbGFj ZWQgaW4gdGhlIHF1ZXVlIGFuZCBsYXRlciByZWFkIG91dAogICoJICBieSBsaXN0ZW5pbmcg YmFja2VuZHMuCiAgKgotICoJICBUaGVyZSBpcyBubyBjZW50cmFsIGtub3dsZWRnZSBvZiB3 aGljaCBiYWNrZW5kIGxpc3RlbnMgb24gd2hpY2ggY2hhbm5lbDsKLSAqCSAgZXZlcnkgYmFj a2VuZCBoYXMgaXRzIG93biBsaXN0IG9mIGludGVyZXN0aW5nIGNoYW5uZWxzLgorICoJICBX ZSBhbHNvIG1haW50YWluIGEgZHluYW1pYyBzaGFyZWQgaGFzaCB0YWJsZSAoZHNoYXNoKSB0 aGF0IG1hcHMgY2hhbm5lbAorICoJICBuYW1lcyB0byB0aGUgc2V0IG9mIGJhY2tlbmRzIGxp c3RlbmluZyBvbiBlYWNoIGNoYW5uZWwuIFRoaXMgdGFibGUgaXMKKyAqCSAgY3JlYXRlZCBs YXppbHkgb24gdGhlIGZpcnN0IExJU1RFTiBjb21tYW5kIGFuZCBncm93cyBkeW5hbWljYWxs eSBhcworICoJICBuZWVkZWQuCiAgKgogICoJICBBbHRob3VnaCB0aGVyZSBpcyBvbmx5IG9u ZSBxdWV1ZSwgbm90aWZpY2F0aW9ucyBhcmUgdHJlYXRlZCBhcyBiZWluZwogICoJICBkYXRh YmFzZS1sb2NhbDsgdGhpcyBpcyBkb25lIGJ5IGluY2x1ZGluZyB0aGUgc2VuZGVyJ3MgZGF0 YWJhc2UgT0lECkBAIC02OCwxNiArNzAsMjEgQEAKICAqCSAgQ29tbWl0VHJhbnNhY3Rpb24o KSB3aGljaCB3aWxsIHRoZW4gZG8gdGhlIGFjdHVhbCB0cmFuc2FjdGlvbiBjb21taXQuCiAg KgogICoJICBBZnRlciBjb21taXQgd2UgYXJlIGNhbGxlZCBhbm90aGVyIHRpbWUgKEF0Q29t bWl0X05vdGlmeSgpKS4gSGVyZSB3ZQotICoJICBtYWtlIGFueSBhY3R1YWwgdXBkYXRlcyB0 byB0aGUgZWZmZWN0aXZlIGxpc3RlbiBzdGF0ZSAobGlzdGVuQ2hhbm5lbHMpLgotICoJICBU aGVuIHdlIHNpZ25hbCBhbnkgYmFja2VuZHMgdGhhdCBtYXkgYmUgaW50ZXJlc3RlZCBpbiBv dXIgbWVzc2FnZXMKLSAqCSAgKGluY2x1ZGluZyBvdXIgb3duIGJhY2tlbmQsIGlmIGxpc3Rl bmluZykuICBUaGlzIGlzIGRvbmUgYnkKLSAqCSAgU2lnbmFsQmFja2VuZHMoKSwgd2hpY2gg c2NhbnMgdGhlIGxpc3Qgb2YgbGlzdGVuaW5nIGJhY2tlbmRzIGFuZCBzZW5kcyBhCi0gKgkg IFBST0NTSUdfTk9USUZZX0lOVEVSUlVQVCBzaWduYWwgdG8gZXZlcnkgbGlzdGVuaW5nIGJh Y2tlbmQgKHdlIGRvbid0Ci0gKgkgIGtub3cgd2hpY2ggYmFja2VuZCBpcyBsaXN0ZW5pbmcg b24gd2hpY2ggY2hhbm5lbCBzbyB3ZSBtdXN0IHNpZ25hbCB0aGVtCi0gKgkgIGFsbCkuICBX ZSBjYW4gZXhjbHVkZSBiYWNrZW5kcyB0aGF0IGFyZSBhbHJlYWR5IHVwIHRvIGRhdGUsIHRo b3VnaCwgYW5kCi0gKgkgIHdlIGNhbiBhbHNvIGV4Y2x1ZGUgYmFja2VuZHMgdGhhdCBhcmUg aW4gb3RoZXIgZGF0YWJhc2VzICh1bmxlc3MgdGhleQotICoJICBhcmUgd2F5IGJlaGluZCBh bmQgc2hvdWxkIGJlIGtpY2tlZCB0byBtYWtlIHRoZW0gYWR2YW5jZSB0aGVpcgotICoJICBw b2ludGVycykuCisgKgkgIG1ha2UgYW55IGFjdHVhbCB1cGRhdGVzIHRvIHRoZSBsb2NhbCBs aXN0ZW4gc3RhdGUgKGxpc3RlbkNoYW5uZWxzSGFzaCkgYW5kCisgKgkgIHNoYXJlZCBjaGFu bmVsIGhhc2ggdGFibGUgKGNoYW5uZWxIYXNoKS4gIFRoZW4gd2Ugc2lnbmFsIGFueSBiYWNr ZW5kcworICoJICB0aGF0IG1heSBiZSBpbnRlcmVzdGVkIGluIG91ciBtZXNzYWdlcyAoaW5j bHVkaW5nIG91ciBvd24gYmFja2VuZCwKKyAqCSAgaWYgbGlzdGVuaW5nKS4gIFRoaXMgaXMg ZG9uZSBieSBTaWduYWxCYWNrZW5kcygpLCB3aGljaCBjb25zdWx0cyB0aGUKKyAqCSAgc2hh cmVkIGNoYW5uZWwgaGFzaCB0YWJsZSB0byBpZGVudGlmeSBsaXN0ZW5lcnMgZm9yIHRoZSBj aGFubmVscyB0aGF0CisgKgkgIGhhdmUgcGVuZGluZyBub3RpZmljYXRpb25zIGluIHRoZSBj dXJyZW50IGRhdGFiYXNlLiAgRWFjaCBzZWxlY3RlZAorICoJICBiYWNrZW5kIGlzIG1hcmtl ZCBhcyBoYXZpbmcgYSB3YWtldXAgcGVuZGluZyB0byBhdm9pZCBkdXBsaWNhdGUgc2lnbmFs cywKKyAqCSAgYW5kIGEgUFJPQ1NJR19OT1RJRllfSU5URVJSVVBUIHNpZ25hbCBpcyBzZW50 IHRvIGl0LgorICoKKyAqCSAgV2hlbiB3cml0aW5nIG5vdGlmaWNhdGlvbnMsIFByZUNvbW1p dF9Ob3RpZnkoKSByZWNvcmRzIHRoZSBxdWV1ZSBoZWFkCisgKgkgIHBvc2l0aW9uIGJvdGgg YmVmb3JlIGFuZCBhZnRlciB0aGUgd3JpdGUuICBCZWNhdXNlIGFsbCB3cml0ZXJzIHNlcmlh bGl6ZQorICoJICBvbiBhIGNsdXN0ZXItd2lkZSBoZWF2eXdlaWdodCBsb2NrLCBubyBiYWNr ZW5kIGNhbiBpbnNlcnQgZW50cmllcyBiZXR3ZWVuCisgKgkgIHRoZXNlIHR3byBwb2ludHMu ICBTaWduYWxCYWNrZW5kcygpIHVzZXMgdGhpcyBmYWN0IHRvIGRpcmVjdGx5IGFkdmFuY2Ug YW55CisgKgkgIGJhY2tlbmQgdGhhdCBpcyBzdGlsbCBwb3NpdGlvbmVkIGF0IHRoZSBvbGQg aGVhZCwgYXZvaWRpbmcgdW5uZWNlc3NhcnkKKyAqCSAgd2FrZXVwcyBmb3IgaWRsZSBsaXN0 ZW5lcnMgdGhhdCBoYXZlIG5vdGhpbmcgdG8gcmVhZC4KICAqCiAgKgkgIEZpbmFsbHksIGFm dGVyIHdlIGFyZSBvdXQgb2YgdGhlIHRyYW5zYWN0aW9uIGFsdG9nZXRoZXIgYW5kIGFib3V0 IHRvIGdvCiAgKgkgIGlkbGUsIHdlIHNjYW4gdGhlIHF1ZXVlIGZvciBtZXNzYWdlcyB0aGF0 IG5lZWQgdG8gYmUgc2VudCB0byBvdXIKQEAgLTEzNywxNCArMTQ0LDE3IEBACiAjaW5jbHVk ZSAiY29tbWFuZHMvYXN5bmMuaCIKICNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgiCiAjaW5j bHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgImxpYi9kc2hhc2guaCIKICNpbmNsdWRlICJs aWJwcS9saWJwcS5oIgogI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCisjaW5jbHVkZSAic3RvcmFnZS9kc21fcmVnaXN0cnkuaCIKICNpbmNs dWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIK ICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2RzYS5oIgog I2luY2x1ZGUgInV0aWxzL2d1Y19ob29rcy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxz LmgiCiAjaW5jbHVkZSAidXRpbHMvcHNfc3RhdHVzLmgiCkBAIC0xNjIsNiArMTcyLDI5IEBA CiAgKi8KICNkZWZpbmUgTk9USUZZX1BBWUxPQURfTUFYX0xFTkdUSAkoQkxDS1NaIC0gTkFN RURBVEFMRU4gLSAxMjgpCiAKKy8qCisgKiBDaGFubmVsIGhhc2ggdGFibGUgZGVmaW5pdGlv bnMKKyAqCisgKiBUaGlzIGhhc2ggdGFibGUgbWFwcyAoZGF0YWJhc2UgT0lELCBjaGFubmVs IG5hbWUpIGtleXMgdG8gYXJyYXlzIG9mCisgKiBQcm9jTnVtYmVycyByZXByZXNlbnRpbmcg dGhlIGJhY2tlbmRzIGxpc3RlbmluZyBvbiBlYWNoIGNoYW5uZWwuCisgKi8KKworI2RlZmlu ZSBJTklUSUFMX0xJU1RFTkVSU19BUlJBWV9TSVpFIDQKKwordHlwZWRlZiBzdHJ1Y3QgQ2hh bm5lbEhhc2hLZXkKK3sKKwlPaWQJCQlkYm9pZDsKKwljaGFyCQljaGFubmVsW05BTUVEQVRB TEVOXTsKK30gQ2hhbm5lbEhhc2hLZXk7CisKK3R5cGVkZWYgc3RydWN0IENoYW5uZWxFbnRy eQoreworCUNoYW5uZWxIYXNoS2V5IGtleTsKKwlkc2FfcG9pbnRlciBsaXN0ZW5lcnNBcnJh eTsgLyogRFNBIHBvaW50ZXIgdG8gUHJvY051bWJlciBhcnJheSAqLworCWludAkJCW51bUxp c3RlbmVyczsJLyogTnVtYmVyIG9mIGxpc3RlbmVycyBjdXJyZW50bHkgc3RvcmVkICovCisJ aW50CQkJYWxsb2NhdGVkTGlzdGVuZXJzOyAvKiBBbGxvY2F0ZWQgc2l6ZSBvZiBhcnJheSAq LworfSBDaGFubmVsRW50cnk7CisKIC8qCiAgKiBTdHJ1Y3QgcmVwcmVzZW50aW5nIGFuIGVu dHJ5IGluIHRoZSBnbG9iYWwgbm90aWZ5IHF1ZXVlCiAgKgpAQCAtMjI0LDExICsyNTcsMTYg QEAgdHlwZWRlZiBzdHJ1Y3QgUXVldWVQb3NpdGlvbgogCSAoeCkucGFnZSAhPSAoeSkucGFn ZSA/ICh4KSA6IFwKIAkgKHgpLm9mZnNldCA+ICh5KS5vZmZzZXQgPyAoeCkgOiAoeSkpCiAK Ky8qIHJldHVybnMgdHJ1ZSBpZiB4IGNvbWVzIGJlZm9yZSB5IGluIHF1ZXVlIG9yZGVyICov CisjZGVmaW5lIFFVRVVFX1BPU19QUkVDRURFUyh4LHkpIFwKKwkoYXN5bmNRdWV1ZVBhZ2VQ cmVjZWRlcygoeCkucGFnZSwgKHkpLnBhZ2UpIHx8IFwKKwkgKCh4KS5wYWdlID09ICh5KS5w YWdlICYmICh4KS5vZmZzZXQgPCAoeSkub2Zmc2V0KSkKKwogLyoKICAqIFBhcmFtZXRlciBk ZXRlcm1pbmluZyBob3cgb2Z0ZW4gd2UgdHJ5IHRvIGFkdmFuY2UgdGhlIHRhaWwgcG9pbnRl cjoKICAqIHdlIGRvIHRoYXQgYWZ0ZXIgZXZlcnkgUVVFVUVfQ0xFQU5VUF9ERUxBWSBwYWdl cyBvZiBOT1RJRlkgZGF0YS4gIFRoaXMgaXMKLSAqIGFsc28gdGhlIGRpc3RhbmNlIGJ5IHdo aWNoIGEgYmFja2VuZCBpbiBhbm90aGVyIGRhdGFiYXNlIG5lZWRzIHRvIGJlCi0gKiBiZWhp bmQgYmVmb3JlIHdlJ2xsIGRlY2lkZSB3ZSBuZWVkIHRvIHdha2UgaXQgdXAgdG8gYWR2YW5j ZSBpdHMgcG9pbnRlci4KKyAqIGFsc28gdGhlIGRpc3RhbmNlIGJ5IHdoaWNoIGEgYmFja2Vu ZCBuZWVkcyB0byBiZSBiZWhpbmQgYmVmb3JlIHdlJ2xsCisgKiBkZWNpZGUgd2UgbmVlZCB0 byB3YWtlIGl0IHVwIHRvIGFkdmFuY2UgaXRzIHBvaW50ZXIuCiAgKgogICogUmVzaXN0IHRo ZSB0ZW1wdGF0aW9uIHRvIG1ha2UgdGhpcyByZWFsbHkgbGFyZ2UuICBXaGlsZSB0aGF0IHdv dWxkIHNhdmUKICAqIHdvcmsgaW4gc29tZSBwbGFjZXMsIGl0IHdvdWxkIGFkZCBjb3N0IGlu IG90aGVycy4gIEluIHBhcnRpY3VsYXIsIHRoaXMKQEAgLTI0Niw2ICsyODQsOSBAQCB0eXBl ZGVmIHN0cnVjdCBRdWV1ZUJhY2tlbmRTdGF0dXMKIAlPaWQJCQlkYm9pZDsJCQkvKiBiYWNr ZW5kJ3MgZGF0YWJhc2UgT0lELCBvciBJbnZhbGlkT2lkICovCiAJUHJvY051bWJlcgluZXh0 TGlzdGVuZXI7CS8qIGlkIG9mIG5leHQgbGlzdGVuZXIsIG9yIElOVkFMSURfUFJPQ19OVU1C RVIgKi8KIAlRdWV1ZVBvc2l0aW9uIHBvczsJCQkvKiBiYWNrZW5kIGhhcyByZWFkIHF1ZXVl IHVwIHRvIGhlcmUgKi8KKwlib29sCQl3YWtldXBQZW5kaW5nOwkvKiBzaWduYWwgc2VudCBi dXQgbm90IHlldCBwcm9jZXNzZWQgKi8KKwlib29sCQlpc0FkdmFuY2luZzsJLyogYmFja2Vu ZCBpcyBhZHZhbmNpbmcgaXRzIHBvc2l0aW9uICovCisJUXVldWVQb3NpdGlvbiBhZHZhbmNp bmdQb3M7IC8qIHRhcmdldCBwb3NpdGlvbiBiYWNrZW5kIGlzIGFkdmFuY2luZyB0byAqLwog fSBRdWV1ZUJhY2tlbmRTdGF0dXM7CiAKIC8qCkBAIC0yNjAsOSArMzAxLDEwIEBAIHR5cGVk ZWYgc3RydWN0IFF1ZXVlQmFja2VuZFN0YXR1cwogICogKHNpbmNlIG5vIG90aGVyIGJhY2tl bmQgd2lsbCBpbnNwZWN0IGl0KS4KICAqCiAgKiBXaGVuIGhvbGRpbmcgTm90aWZ5UXVldWVM b2NrIGluIEVYQ0xVU0lWRSBtb2RlLCBiYWNrZW5kcyBjYW4gaW5zcGVjdCB0aGUKLSAqIGVu dHJpZXMgb2Ygb3RoZXIgYmFja2VuZHMgYW5kIGFsc28gY2hhbmdlIHRoZSBoZWFkIHBvaW50 ZXIuIFdoZW4gaG9sZGluZwotICogYm90aCBOb3RpZnlRdWV1ZUxvY2sgYW5kIE5vdGlmeVF1 ZXVlVGFpbExvY2sgaW4gRVhDTFVTSVZFIG1vZGUsIGJhY2tlbmRzCi0gKiBjYW4gY2hhbmdl IHRoZSB0YWlsIHBvaW50ZXJzLgorICogZW50cmllcyBvZiBvdGhlciBiYWNrZW5kcyBhbmQg YWxzbyBjaGFuZ2UgdGhlIGhlYWQgcG9pbnRlci4gVGhleSBjYW4KKyAqIGFsc28gYWR2YW5j ZSBvdGhlciBiYWNrZW5kcycgcXVldWUgcG9zaXRpb25zLCB1bmxlc3MgdGhleSBhcmUgbm90 CisgKiBpbiB0aGUgcHJvY2VzcyBvZiBkb2luZyB0aGF0IHRoZW1zZWx2ZXMuIFdoZW4gaG9s ZGluZyBib3RoIE5vdGlmeVF1ZXVlTG9jayBhbmQKKyAqIE5vdGlmeVF1ZXVlVGFpbExvY2sg aW4gRVhDTFVTSVZFIG1vZGUsIGJhY2tlbmRzIGNhbiBjaGFuZ2UgdGhlIHRhaWwgcG9pbnRl cnMuCiAgKgogICogU0xSVSBidWZmZXIgcG9vbCBpcyBkaXZpZGVkIGluIGJhbmtzIGFuZCBi YW5rIHdpc2UgU0xSVSBsb2NrIGlzIHVzZWQgYXMKICAqIHRoZSBjb250cm9sIGxvY2sgZm9y IHRoZSBwZ19ub3RpZnkgU0xSVSBidWZmZXJzLgpAQCAtMjg4LDExICszMzAsMTYgQEAgdHlw ZWRlZiBzdHJ1Y3QgQXN5bmNRdWV1ZUNvbnRyb2wKIAlQcm9jTnVtYmVyCWZpcnN0TGlzdGVu ZXI7CS8qIGlkIG9mIGZpcnN0IGxpc3RlbmVyLCBvcgogCQkJCQkJCQkgKiBJTlZBTElEX1BS T0NfTlVNQkVSICovCiAJVGltZXN0YW1wVHogbGFzdFF1ZXVlRmlsbFdhcm47CS8qIHRpbWUg b2YgbGFzdCBxdWV1ZS1mdWxsIG1zZyAqLworCWRzYV9oYW5kbGUJY2hhbm5lbEhhc2hEU0E7 CisJZHNoYXNoX3RhYmxlX2hhbmRsZSBjaGFubmVsSGFzaERTSDsKIAlRdWV1ZUJhY2tlbmRT dGF0dXMgYmFja2VuZFtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwogfSBBc3luY1F1ZXVlQ29u dHJvbDsKIAogc3RhdGljIEFzeW5jUXVldWVDb250cm9sICphc3luY1F1ZXVlQ29udHJvbDsK IAorc3RhdGljIGRzYV9hcmVhICpjaGFubmVsRFNBID0gTlVMTDsKK3N0YXRpYyBkc2hhc2hf dGFibGUgKmNoYW5uZWxIYXNoID0gTlVMTDsKKwogI2RlZmluZSBRVUVVRV9IRUFECQkJCQko YXN5bmNRdWV1ZUNvbnRyb2wtPmhlYWQpCiAjZGVmaW5lIFFVRVVFX1RBSUwJCQkJCShhc3lu Y1F1ZXVlQ29udHJvbC0+dGFpbCkKICNkZWZpbmUgUVVFVUVfU1RPUF9QQUdFCQkJCShhc3lu Y1F1ZXVlQ29udHJvbC0+c3RvcFBhZ2UpCkBAIC0zMDEsNiArMzQ4LDkgQEAgc3RhdGljIEFz eW5jUXVldWVDb250cm9sICphc3luY1F1ZXVlQ29udHJvbDsKICNkZWZpbmUgUVVFVUVfQkFD S0VORF9EQk9JRChpKQkJKGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLmRib2lkKQog I2RlZmluZSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkpCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJh Y2tlbmRbaV0ubmV4dExpc3RlbmVyKQogI2RlZmluZSBRVUVVRV9CQUNLRU5EX1BPUyhpKQkJ KGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLnBvcykKKyNkZWZpbmUgUVVFVUVfQkFD S0VORF9XQUtFVVBfUEVORElORyhpKQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0u d2FrZXVwUGVuZGluZykKKyNkZWZpbmUgUVVFVUVfQkFDS0VORF9JU19BRFZBTkNJTkcoaSkJ KGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLmlzQWR2YW5jaW5nKQorI2RlZmluZSBR VUVVRV9CQUNLRU5EX0FEVkFOQ0lOR19QT1MoaSkJKGFzeW5jUXVldWVDb250cm9sLT5iYWNr ZW5kW2ldLmFkdmFuY2luZ1BvcykKIAogLyoKICAqIFRoZSBTTFJVIGJ1ZmZlciBhcmVhIHRo cm91Z2ggd2hpY2ggd2UgYWNjZXNzIHRoZSBub3RpZmljYXRpb24gcXVldWUKQEAgLTMxMywx NiArMzYzLDE2IEBAIHN0YXRpYyBTbHJ1Q3RsRGF0YSBOb3RpZnlDdGxEYXRhOwogI2RlZmlu ZSBRVUVVRV9GVUxMX1dBUk5fSU5URVJWQUwJNTAwMAkvKiB3YXJuIGF0IG1vc3Qgb25jZSBl dmVyeSA1cyAqLwogCiAvKgotICogbGlzdGVuQ2hhbm5lbHMgaWRlbnRpZmllcyB0aGUgY2hh bm5lbHMgd2UgYXJlIGFjdHVhbGx5IGxpc3RlbmluZyB0bwotICogKGllLCBoYXZlIGNvbW1p dHRlZCBhIExJU1RFTiBvbikuICBJdCBpcyBhIHNpbXBsZSBsaXN0IG9mIGNoYW5uZWwgbmFt ZXMsCisgKiBsaXN0ZW5DaGFubmVsc0hhc2ggaWRlbnRpZmllcyB0aGUgY2hhbm5lbHMgd2Ug YXJlIGFjdHVhbGx5IGxpc3RlbmluZyB0bworICogKGllLCBoYXZlIGNvbW1pdHRlZCBhIExJ U1RFTiBvbikuICBJdCBpcyBhIGhhc2ggdGFibGUgb2YgY2hhbm5lbCBuYW1lcywKICAqIGFs bG9jYXRlZCBpbiBUb3BNZW1vcnlDb250ZXh0LgogICovCi1zdGF0aWMgTGlzdCAqbGlzdGVu Q2hhbm5lbHMgPSBOSUw7CS8qIGxpc3Qgb2YgQyBzdHJpbmdzICovCitzdGF0aWMgSFRBQiAq bGlzdGVuQ2hhbm5lbHNIYXNoID0gTlVMTDsKIAogLyoKICAqIFN0YXRlIGZvciBwZW5kaW5n IExJU1RFTi9VTkxJU1RFTiBhY3Rpb25zIGNvbnNpc3RzIG9mIGFuIG9yZGVyZWQgbGlzdCBv ZgogICogYWxsIGFjdGlvbnMgcmVxdWVzdGVkIGluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9u LiAgQXMgZXhwbGFpbmVkIGFib3ZlLAotICogd2UgZG9uJ3QgYWN0dWFsbHkgY2hhbmdlIGxp c3RlbkNoYW5uZWxzIHVudGlsIHdlIHJlYWNoIHRyYW5zYWN0aW9uIGNvbW1pdC4KKyAqIHdl IGRvbid0IGFjdHVhbGx5IGNoYW5nZSBsaXN0ZW5DaGFubmVsc0hhc2ggdW50aWwgd2UgcmVh Y2ggdHJhbnNhY3Rpb24gY29tbWl0LgogICoKICAqIFRoZSBsaXN0IGlzIGtlcHQgaW4gQ3Vy VHJhbnNhY3Rpb25Db250ZXh0LiAgSW4gc3VidHJhbnNhY3Rpb25zLCBlYWNoCiAgKiBzdWJ0 cmFuc2FjdGlvbiBoYXMgaXRzIG93biBsaXN0IGluIGl0cyBvd24gQ3VyVHJhbnNhY3Rpb25D b250ZXh0LCBidXQKQEAgLTM5MSw2ICs0NDEsNyBAQCB0eXBlZGVmIHN0cnVjdCBOb3RpZmlj YXRpb25MaXN0CiAJaW50CQkJbmVzdGluZ0xldmVsOwkvKiBjdXJyZW50IHRyYW5zYWN0aW9u IG5lc3RpbmcgZGVwdGggKi8KIAlMaXN0CSAgICpldmVudHM7CQkJLyogbGlzdCBvZiBOb3Rp ZmljYXRpb24gc3RydWN0cyAqLwogCUhUQUIJICAgKmhhc2h0YWI7CQkvKiBoYXNoIG9mIE5v dGlmaWNhdGlvbkhhc2ggc3RydWN0cywgb3IgTlVMTCAqLworCUhUQUIJICAgKmNoYW5uZWxI YXNodGFiOyAvKiBoYXNoIG9mIHVuaXF1ZSBjaGFubmVsIG5hbWVzLCBvciBOVUxMICovCiAJ c3RydWN0IE5vdGlmaWNhdGlvbkxpc3QgKnVwcGVyOyAvKiBkZXRhaWxzIGZvciB1cHBlciB0 cmFuc2FjdGlvbiBsZXZlbHMgKi8KIH0gTm90aWZpY2F0aW9uTGlzdDsKIApAQCAtNDAxLDYg KzQ1MiwxMSBAQCBzdHJ1Y3QgTm90aWZpY2F0aW9uSGFzaAogCU5vdGlmaWNhdGlvbiAqZXZl bnQ7CQkvKiA9PiB0aGUgYWN0dWFsIE5vdGlmaWNhdGlvbiBzdHJ1Y3QgKi8KIH07CiAKK3N0 cnVjdCBDaGFubmVsSGFzaAoreworCWNoYXIJCWNoYW5uZWxbTkFNRURBVEFMRU5dOworfTsK Kwogc3RhdGljIE5vdGlmaWNhdGlvbkxpc3QgKnBlbmRpbmdOb3RpZmllcyA9IE5VTEw7CiAK IC8qCkBAIC00MTgsNiArNDc0LDIwIEBAIHN0YXRpYyBib29sIHVubGlzdGVuRXhpdFJlZ2lz dGVyZWQgPSBmYWxzZTsKIC8qIFRydWUgaWYgd2UncmUgY3VycmVudGx5IHJlZ2lzdGVyZWQg YXMgYSBsaXN0ZW5lciBpbiBhc3luY1F1ZXVlQ29udHJvbCAqLwogc3RhdGljIGJvb2wgYW1S ZWdpc3RlcmVkTGlzdGVuZXIgPSBmYWxzZTsKIAorLyoKKyAqIFF1ZXVlIGhlYWQgcG9zaXRp b25zIGZvciBkaXJlY3QgYWR2YW5jZW1lbnQuCisgKiBUaGVzZSBhcmUgY2FwdHVyZWQgZHVy aW5nIFByZUNvbW1pdF9Ob3RpZnkgd2hpbGUgaG9sZGluZyB0aGUgaGVhdnl3ZWlnaHQKKyAq IGxvY2sgb24gZGF0YWJhc2UgMCwgZW5zdXJpbmcgbm8gb3RoZXIgYmFja2VuZCBjYW4gaW5z ZXJ0IG5vdGlmaWNhdGlvbnMKKyAqIGJldHdlZW4gdGhlbS4gIFNpZ25hbEJhY2tlbmRzIHVz ZXMgdGhlc2UgdG8gYWR2YW5jZSBpZGxlIGJhY2tlbmRzLgorICovCitzdGF0aWMgUXVldWVQ b3NpdGlvbiBxdWV1ZUhlYWRCZWZvcmVXcml0ZTsKK3N0YXRpYyBRdWV1ZVBvc2l0aW9uIHF1 ZXVlSGVhZEFmdGVyV3JpdGU7CisKKy8qCisgKiBMaXN0IG9mIGNoYW5uZWxzIHdpdGggcGVu ZGluZyBub3RpZmljYXRpb25zIGluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgorICovCitz dGF0aWMgTGlzdCAqcGVuZGluZ05vdGlmeUNoYW5uZWxzID0gTklMOworCiAvKiBoYXZlIHdl IGFkdmFuY2VkIHRvIGEgcGFnZSB0aGF0J3MgYSBtdWx0aXBsZSBvZiBRVUVVRV9DTEVBTlVQ X0RFTEFZPyAqLwogc3RhdGljIGJvb2wgdHJ5QWR2YW5jZVRhaWwgPSBmYWxzZTsKIApAQCAt NDI4LDcgKzQ5OCw2IEBAIGJvb2wJCVRyYWNlX25vdGlmeSA9IGZhbHNlOwogaW50CQkJbWF4 X25vdGlmeV9xdWV1ZV9wYWdlcyA9IDEwNDg1NzY7CiAKIC8qIGxvY2FsIGZ1bmN0aW9uIHBy b3RvdHlwZXMgKi8KLXN0YXRpYyBpbmxpbmUgaW50NjQgYXN5bmNRdWV1ZVBhZ2VEaWZmKGlu dDY0IHAsIGludDY0IHEpOwogc3RhdGljIGlubGluZSBib29sIGFzeW5jUXVldWVQYWdlUHJl Y2VkZXMoaW50NjQgcCwgaW50NjQgcSk7CiBzdGF0aWMgdm9pZCBxdWV1ZV9saXN0ZW4oTGlz dGVuQWN0aW9uS2luZCBhY3Rpb24sIGNvbnN0IGNoYXIgKmNoYW5uZWwpOwogc3RhdGljIHZv aWQgQXN5bmNfVW5saXN0ZW5PbkV4aXQoaW50IGNvZGUsIERhdHVtIGFyZyk7CkBAIC00NTcs MTYgKzUyNiw5IEBAIHN0YXRpYyB2b2lkIEFkZEV2ZW50VG9QZW5kaW5nTm90aWZpZXMoTm90 aWZpY2F0aW9uICpuKTsKIHN0YXRpYyB1aW50MzIgbm90aWZpY2F0aW9uX2hhc2goY29uc3Qg dm9pZCAqa2V5LCBTaXplIGtleXNpemUpOwogc3RhdGljIGludAlub3RpZmljYXRpb25fbWF0 Y2goY29uc3Qgdm9pZCAqa2V5MSwgY29uc3Qgdm9pZCAqa2V5MiwgU2l6ZSBrZXlzaXplKTsK IHN0YXRpYyB2b2lkIENsZWFyUGVuZGluZ0FjdGlvbnNBbmROb3RpZmllcyh2b2lkKTsKLQot LyoKLSAqIENvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gcXVldWUgcGFnZSBu dW1iZXJzLgotICogUHJldmlvdXNseSB0aGlzIGZ1bmN0aW9uIGFjY291bnRlZCBmb3IgYSB3 cmFwYXJvdW5kLgotICovCi1zdGF0aWMgaW5saW5lIGludDY0Ci1hc3luY1F1ZXVlUGFnZURp ZmYoaW50NjQgcCwgaW50NjQgcSkKLXsKLQlyZXR1cm4gcCAtIHE7Ci19CitzdGF0aWMgaW5s aW5lIHZvaWQgQ2hhbm5lbEhhc2hQcmVwYXJlS2V5KENoYW5uZWxIYXNoS2V5ICprZXksIE9p ZCBkYm9pZCwgY29uc3QgY2hhciAqY2hhbm5lbCk7CitzdGF0aWMgZHNoYXNoX2hhc2ggY2hh bm5lbEhhc2hGdW5jKGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IHNpemUsIHZvaWQgKmFyZyk7 CitzdGF0aWMgdm9pZCBpbml0Q2hhbm5lbEhhc2godm9pZCk7CiAKIC8qCiAgKiBEZXRlcm1p bmVzIHdoZXRoZXIgcCBwcmVjZWRlcyBxLgpAQCAtNDc4LDYgKzU0MCwxMDUgQEAgYXN5bmNR dWV1ZVBhZ2VQcmVjZWRlcyhpbnQ2NCBwLCBpbnQ2NCBxKQogCXJldHVybiBwIDwgcTsKIH0K IAorLyoKKyAqIGNoYW5uZWxIYXNoRnVuYworICoJCUhhc2ggZnVuY3Rpb24gZm9yIGNoYW5u ZWwga2V5cy4KKyAqLworc3RhdGljIGRzaGFzaF9oYXNoCitjaGFubmVsSGFzaEZ1bmMoY29u c3Qgdm9pZCAqa2V5LCBzaXplX3Qgc2l6ZSwgdm9pZCAqYXJnKQoreworCWNvbnN0IENoYW5u ZWxIYXNoS2V5ICprID0gKGNvbnN0IENoYW5uZWxIYXNoS2V5ICopIGtleTsKKwlkc2hhc2hf aGFzaCBoOworCisJaCA9IERhdHVtR2V0VUludDMyKGhhc2hfdWludDMyKGstPmRib2lkKSk7 CisJaCBePSBEYXR1bUdldFVJbnQzMihoYXNoX2FueSgoY29uc3QgdW5zaWduZWQgY2hhciAq KSBrLT5jaGFubmVsLAorCQkJCQkJCQkgc3RybmxlbihrLT5jaGFubmVsLCBOQU1FREFUQUxF TikpKTsKKworCXJldHVybiBoOworfQorCisvKiBwYXJhbWV0ZXJzIGZvciB0aGUgY2hhbm5l bCBoYXNoIHRhYmxlICovCitzdGF0aWMgY29uc3QgZHNoYXNoX3BhcmFtZXRlcnMgY2hhbm5l bERTSFBhcmFtcyA9IHsKKwlzaXplb2YoQ2hhbm5lbEhhc2hLZXkpLAorCXNpemVvZihDaGFu bmVsRW50cnkpLAorCWRzaGFzaF9tZW1jbXAsCisJY2hhbm5lbEhhc2hGdW5jLAorCWRzaGFz aF9tZW1jcHksCisJTFdUUkFOQ0hFX05PVElGWV9DSEFOTkVMX0hBU0gKK307CisKKy8qCisg KiBpbml0Q2hhbm5lbEhhc2gKKyAqCQlMYXp5IGluaXRpYWxpemF0aW9uIG9mIHRoZSBjaGFu bmVsIGhhc2ggdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkCitpbml0Q2hhbm5lbEhhc2godm9p ZCkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwkvKiBRdWljayBleGl0IGlm IHdlIGFscmVhZHkgZGlkIHRoaXMgKi8KKwlpZiAoYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5u ZWxIYXNoRFNIICE9IERTSEFTSF9IQU5ETEVfSU5WQUxJRCAmJgorCQljaGFubmVsSGFzaCAh PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBPdGhlcndpc2UsIHVzZSBhIGxvY2sgdG8gZW5z dXJlIG9ubHkgb25lIHByb2Nlc3MgY3JlYXRlcyB0aGUgdGFibGUgKi8KKwlMV0xvY2tBY3F1 aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKTsKKworCS8qIEJlIHN1cmUgYW55 IGxvY2FsIG1lbW9yeSBhbGxvY2F0ZWQgYnkgRFNBIHJvdXRpbmVzIGlzIHBlcnNpc3RlbnQg Ki8KKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRl eHQpOworCisJaWYgKGFzeW5jUXVldWVDb250cm9sLT5jaGFubmVsSGFzaERTSCA9PSBEU0hB U0hfSEFORExFX0lOVkFMSUQpCisJeworCQkvKiBJbml0aWFsaXplIGR5bmFtaWMgc2hhcmVk IGhhc2ggdGFibGUgZm9yIGNoYW5uZWwgaGFzaCAqLworCQljaGFubmVsRFNBID0gZHNhX2Ny ZWF0ZShMV1RSQU5DSEVfTk9USUZZX0NIQU5ORUxfSEFTSCk7CisJCWRzYV9waW4oY2hhbm5l bERTQSk7CisJCWRzYV9waW5fbWFwcGluZyhjaGFubmVsRFNBKTsKKwkJY2hhbm5lbEhhc2gg PSBkc2hhc2hfY3JlYXRlKGNoYW5uZWxEU0EsICZjaGFubmVsRFNIUGFyYW1zLCBOVUxMKTsK KworCQkvKiBTdG9yZSBoYW5kbGVzIGluIHNoYXJlZCBtZW1vcnkgZm9yIG90aGVyIGJhY2tl bmRzIHRvIHVzZSAqLworCQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0EgPSBk c2FfZ2V0X2hhbmRsZShjaGFubmVsRFNBKTsKKwkJYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5u ZWxIYXNoRFNIID0KKwkJCWRzaGFzaF9nZXRfaGFzaF90YWJsZV9oYW5kbGUoY2hhbm5lbEhh c2gpOworCX0KKwllbHNlIGlmICghY2hhbm5lbEhhc2gpCisJeworCQkvKiBBdHRhY2ggdG8g ZXhpc3RpbmcgZHluYW1pYyBzaGFyZWQgaGFzaCB0YWJsZSAqLworCQljaGFubmVsRFNBID0g ZHNhX2F0dGFjaChhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0EpOworCQlkc2Ff cGluX21hcHBpbmcoY2hhbm5lbERTQSk7CisJCWNoYW5uZWxIYXNoID0gZHNoYXNoX2F0dGFj aChjaGFubmVsRFNBLCAmY2hhbm5lbERTSFBhcmFtcywKKwkJCQkJCQkJCWFzeW5jUXVldWVD b250cm9sLT5jaGFubmVsSGFzaERTSCwKKwkJCQkJCQkJCU5VTEwpOworCX0KKworCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1 ZXVlTG9jayk7Cit9CisKKy8qCisgKiBpbml0TGlzdGVuQ2hhbm5lbHNIYXNoCisgKgkJTGF6 eSBpbml0aWFsaXphdGlvbiBvZiB0aGUgbG9jYWwgbGlzdGVuIGNoYW5uZWxzIGhhc2ggdGFi bGUuCisgKi8KK3N0YXRpYyB2b2lkCitpbml0TGlzdGVuQ2hhbm5lbHNIYXNoKHZvaWQpCit7 CisJSEFTSENUTAkJaGFzaF9jdGw7CisKKwkvKiBRdWljayBleGl0IGlmIHdlIGFscmVhZHkg ZGlkIHRoaXMgKi8KKwlpZiAobGlzdGVuQ2hhbm5lbHNIYXNoICE9IE5VTEwpCisJCXJldHVy bjsKKworCS8qIEluaXRpYWxpemUgbG9jYWwgaGFzaCB0YWJsZSBmb3IgdGhpcyBiYWNrZW5k J3MgbGlzdGVuZWQgY2hhbm5lbHMgKi8KKwltZW1zZXQoJmhhc2hfY3RsLCAwLCBzaXplb2Yo aGFzaF9jdGwpKTsKKwloYXNoX2N0bC5rZXlzaXplID0gTkFNRURBVEFMRU47CisJaGFzaF9j dGwuZW50cnlzaXplID0gc2l6ZW9mKHN0cnVjdCBDaGFubmVsSGFzaCk7CisKKwlsaXN0ZW5D aGFubmVsc0hhc2ggPQorCQloYXNoX2NyZWF0ZSgiTGlzdGVuIENoYW5uZWxzIiwKKwkJCQkJ NjQsCisJCQkJCSZoYXNoX2N0bCwKKwkJCQkJSEFTSF9FTEVNIHwgSEFTSF9TVFJJTkdTKTsK K30KKwogLyoKICAqIFJlcG9ydCBzcGFjZSBuZWVkZWQgZm9yIG91ciBzaGFyZWQgbWVtb3J5 IGFyZWEKICAqLwpAQCAtNTIxLDEyICs2ODIsMTcgQEAgQXN5bmNTaG1lbUluaXQodm9pZCkK IAkJUVVFVUVfU1RPUF9QQUdFID0gMDsKIAkJUVVFVUVfRklSU1RfTElTVEVORVIgPSBJTlZB TElEX1BST0NfTlVNQkVSOwogCQlhc3luY1F1ZXVlQ29udHJvbC0+bGFzdFF1ZXVlRmlsbFdh cm4gPSAwOworCQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0EgPSBEU0FfSEFO RExFX0lOVkFMSUQ7CisJCWFzeW5jUXVldWVDb250cm9sLT5jaGFubmVsSGFzaERTSCA9IERT SEFTSF9IQU5ETEVfSU5WQUxJRDsKIAkJZm9yIChpbnQgaSA9IDA7IGkgPCBNYXhCYWNrZW5k czsgaSsrKQogCQl7CiAJCQlRVUVVRV9CQUNLRU5EX1BJRChpKSA9IEludmFsaWRQaWQ7CiAJ CQlRVUVVRV9CQUNLRU5EX0RCT0lEKGkpID0gSW52YWxpZE9pZDsKIAkJCVFVRVVFX05FWFRf TElTVEVORVIoaSkgPSBJTlZBTElEX1BST0NfTlVNQkVSOwogCQkJU0VUX1FVRVVFX1BPUyhR VUVVRV9CQUNLRU5EX1BPUyhpKSwgMCwgMCk7CisJCQlTRVRfUVVFVUVfUE9TKFFVRVVFX0JB Q0tFTkRfQURWQU5DSU5HX1BPUyhpKSwgMCwgMCk7CisJCQlRVUVVRV9CQUNLRU5EX1dBS0VV UF9QRU5ESU5HKGkpID0gZmFsc2U7CisJCQlRVUVVRV9CQUNLRU5EX0lTX0FEVkFOQ0lORyhp KSA9IGZhbHNlOwogCQl9CiAJfQogCkBAIC02NTcsNiArODIzLDcgQEAgQXN5bmNfTm90aWZ5 KGNvbnN0IGNoYXIgKmNoYW5uZWwsIGNvbnN0IGNoYXIgKnBheWxvYWQpCiAJCW5vdGlmaWVz LT5ldmVudHMgPSBsaXN0X21ha2UxKG4pOwogCQkvKiBXZSBjZXJ0YWlubHkgZG9uJ3QgbmVl ZCBhIGhhc2h0YWJsZSB5ZXQgKi8KIAkJbm90aWZpZXMtPmhhc2h0YWIgPSBOVUxMOworCQlu b3RpZmllcy0+Y2hhbm5lbEhhc2h0YWIgPSBOVUxMOwogCQlub3RpZmllcy0+dXBwZXIgPSBw ZW5kaW5nTm90aWZpZXM7CiAJCXBlbmRpbmdOb3RpZmllcyA9IG5vdGlmaWVzOwogCX0KQEAg LTY4Myw3ICs4NTAsNyBAQCBBc3luY19Ob3RpZnkoY29uc3QgY2hhciAqY2hhbm5lbCwgY29u c3QgY2hhciAqcGF5bG9hZCkKICAqCQlDb21tb24gY29kZSBmb3IgbGlzdGVuLCB1bmxpc3Rl biwgdW5saXN0ZW4gYWxsIGNvbW1hbmRzLgogICoKICAqCQlBZGRzIHRoZSByZXF1ZXN0IHRv IHRoZSBsaXN0IG9mIHBlbmRpbmcgYWN0aW9ucy4KLSAqCQlBY3R1YWwgdXBkYXRlIG9mIHRo ZSBsaXN0ZW5DaGFubmVscyBsaXN0IGhhcHBlbnMgZHVyaW5nIHRyYW5zYWN0aW9uCisgKgkJ QWN0dWFsIHVwZGF0ZSBvZiB0aGUgbGlzdGVuQ2hhbm5lbHNIYXNoIGhhcHBlbnMgZHVyaW5n IHRyYW5zYWN0aW9uCiAgKgkJY29tbWl0LgogICovCiBzdGF0aWMgdm9pZApAQCAtNzgzLDMw ICs5NTAsNDkgQEAgQXN5bmNfVW5saXN0ZW5BbGwodm9pZCkKICAqIFNRTCBmdW5jdGlvbjog cmV0dXJuIGEgc2V0IG9mIHRoZSBjaGFubmVsIG5hbWVzIHRoaXMgYmFja2VuZCBpcyBhY3Rp dmVseQogICogbGlzdGVuaW5nIHRvLgogICoKLSAqIE5vdGU6IHRoaXMgY29kaW5nIHJlbGll cyBvbiB0aGUgZmFjdCB0aGF0IHRoZSBsaXN0ZW5DaGFubmVscyBsaXN0IGNhbm5vdAorICog Tm90ZTogdGhpcyBjb2RpbmcgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgdGhlIGxpc3RlbkNo YW5uZWxzSGFzaCBjYW5ub3QKICAqIGNoYW5nZSB3aXRoaW4gYSB0cmFuc2FjdGlvbi4KICAq LwogRGF0dW0KIHBnX2xpc3RlbmluZ19jaGFubmVscyhQR19GVU5DVElPTl9BUkdTKQogewog CUZ1bmNDYWxsQ29udGV4dCAqZnVuY2N0eDsKKwlIQVNIX1NFUV9TVEFUVVMgKnN0YXR1czsK IAogCS8qIHN0dWZmIGRvbmUgb25seSBvbiB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgZnVuY3Rp b24gKi8KIAlpZiAoU1JGX0lTX0ZJUlNUQ0FMTCgpKQogCXsKKwkJTWVtb3J5Q29udGV4dCBv bGRjb250ZXh0OworCiAJCS8qIGNyZWF0ZSBhIGZ1bmN0aW9uIGNvbnRleHQgZm9yIGNyb3Nz LWNhbGwgcGVyc2lzdGVuY2UgKi8KIAkJZnVuY2N0eCA9IFNSRl9GSVJTVENBTExfSU5JVCgp OworCisJCS8qIEluaXRpYWxpemUgaGFzaCB0YWJsZSBpdGVyYXRpb24gaWYgd2UgaGF2ZSBh bnkgY2hhbm5lbHMgKi8KKwkJaWYgKGxpc3RlbkNoYW5uZWxzSGFzaCAhPSBOVUxMKQorCQl7 CisJCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGZ1bmNjdHgtPm11bHRp X2NhbGxfbWVtb3J5X2N0eCk7CisJCQlzdGF0dXMgPSAoSEFTSF9TRVFfU1RBVFVTICopIHBh bGxvYyhzaXplb2YoSEFTSF9TRVFfU1RBVFVTKSk7CisJCQloYXNoX3NlcV9pbml0KHN0YXR1 cywgbGlzdGVuQ2hhbm5lbHNIYXNoKTsKKwkJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9IHN0YXR1 czsKKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwkJfQorCQllbHNl CisJCXsKKwkJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9IE5VTEw7CisJCX0KIAl9CiAKIAkvKiBz dHVmZiBkb25lIG9uIGV2ZXJ5IGNhbGwgb2YgdGhlIGZ1bmN0aW9uICovCiAJZnVuY2N0eCA9 IFNSRl9QRVJDQUxMX1NFVFVQKCk7CisJc3RhdHVzID0gKEhBU0hfU0VRX1NUQVRVUyAqKSBm dW5jY3R4LT51c2VyX2ZjdHg7CiAKLQlpZiAoZnVuY2N0eC0+Y2FsbF9jbnRyIDwgbGlzdF9s ZW5ndGgobGlzdGVuQ2hhbm5lbHMpKQorCWlmIChzdGF0dXMgIT0gTlVMTCkKIAl7Ci0JCWNo YXIJICAgKmNoYW5uZWwgPSAoY2hhciAqKSBsaXN0X250aChsaXN0ZW5DaGFubmVscywKLQkJ CQkJCQkJCQkJCWZ1bmNjdHgtPmNhbGxfY250cik7CisJCXN0cnVjdCBDaGFubmVsSGFzaCAq ZW50cnk7CiAKLQkJU1JGX1JFVFVSTl9ORVhUKGZ1bmNjdHgsIENTdHJpbmdHZXRUZXh0RGF0 dW0oY2hhbm5lbCkpOworCQllbnRyeSA9IChzdHJ1Y3QgQ2hhbm5lbEhhc2ggKikgaGFzaF9z ZXFfc2VhcmNoKHN0YXR1cyk7CisJCWlmIChlbnRyeSAhPSBOVUxMKQorCQkJU1JGX1JFVFVS Tl9ORVhUKGZ1bmNjdHgsIENTdHJpbmdHZXRUZXh0RGF0dW0oZW50cnktPmNoYW5uZWwpKTsK IAl9CiAKIAlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7CkBAIC04OTQsNiArMTA4MCwzNiBA QCBQcmVDb21taXRfTm90aWZ5KHZvaWQpCiAJaWYgKHBlbmRpbmdOb3RpZmllcykKIAl7CiAJ CUxpc3RDZWxsICAgKm5leHROb3RpZnk7CisJCWJvb2wJCWZpcnN0SXRlcmF0aW9uID0gdHJ1 ZTsKKworCQkvKgorCQkgKiBCdWlsZCBsaXN0IG9mIHVuaXF1ZSBjaGFubmVscyBmb3IgU2ln bmFsQmFja2VuZHMoKS4KKwkJICoKKwkJICogSWYgd2UgaGF2ZSBhIGNoYW5uZWxIYXNodGFi LCB1c2UgaXQgdG8gZWZmaWNpZW50bHkgZ2V0IHRoZSB1bmlxdWUKKwkJICogY2hhbm5lbHMu ICBPdGhlcndpc2UsIGZhbGwgYmFjayB0byB0aGUgbGluZWFyIGFwcHJvYWNoLgorCQkgKi8K KwkJcGVuZGluZ05vdGlmeUNoYW5uZWxzID0gTklMOworCQlpZiAocGVuZGluZ05vdGlmaWVz LT5jaGFubmVsSGFzaHRhYiAhPSBOVUxMKQorCQl7CisJCQlIQVNIX1NFUV9TVEFUVVMgc3Rh dHVzOworCQkJc3RydWN0IENoYW5uZWxIYXNoICpjaGFubmVsRW50cnk7CisKKwkJCWhhc2hf c2VxX2luaXQoJnN0YXR1cywgcGVuZGluZ05vdGlmaWVzLT5jaGFubmVsSGFzaHRhYik7CisJ CQl3aGlsZSAoKGNoYW5uZWxFbnRyeSA9IChzdHJ1Y3QgQ2hhbm5lbEhhc2ggKikgaGFzaF9z ZXFfc2VhcmNoKCZzdGF0dXMpKSAhPSBOVUxMKQorCQkJCXBlbmRpbmdOb3RpZnlDaGFubmVs cyA9IGxhcHBlbmQocGVuZGluZ05vdGlmeUNoYW5uZWxzLCBjaGFubmVsRW50cnktPmNoYW5u ZWwpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogTGluZWFyIGFwcHJvYWNoIGZvciBzbWFs bCBudW1iZXIgb2Ygbm90aWZpY2F0aW9ucyAqLworCQkJZm9yZWFjaF9wdHIoTm90aWZpY2F0 aW9uLCBuLCBwZW5kaW5nTm90aWZpZXMtPmV2ZW50cykKKwkJCXsKKwkJCQljaGFyCSAgICpj aGFubmVsID0gbi0+ZGF0YTsKKworCQkJCS8qIEFkZCBpZiBub3QgYWxyZWFkeSBpbiBsaXN0 ICovCisJCQkJaWYgKCFsaXN0X21lbWJlcl9wdHIocGVuZGluZ05vdGlmeUNoYW5uZWxzLCBj aGFubmVsKSkKKwkJCQkJcGVuZGluZ05vdGlmeUNoYW5uZWxzID0gbGFwcGVuZChwZW5kaW5n Tm90aWZ5Q2hhbm5lbHMsIGNoYW5uZWwpOworCQkJfQorCQl9CiAKIAkJLyoKIAkJICogTWFr ZSBzdXJlIHRoYXQgd2UgaGF2ZSBhbiBYSUQgYXNzaWduZWQgdG8gdGhlIGN1cnJlbnQgdHJh bnNhY3Rpb24uCkBAIC05MjIsNiArMTEzOCwyMiBAQCBQcmVDb21taXRfTm90aWZ5KHZvaWQp CiAJCUxvY2tTaGFyZWRPYmplY3QoRGF0YWJhc2VSZWxhdGlvbklkLCBJbnZhbGlkT2lkLCAw LAogCQkJCQkJIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOwogCisJCS8qCisJCSAqIEZvciB0aGUg ZGlyZWN0IGFkdmFuY2VtZW50IG9wdGltaXphdGlvbiBpbiBTaWduYWxCYWNrZW5kcygpLCB3 ZQorCQkgKiBuZWVkIHRvIGVuc3VyZSB0aGF0IG5vIG90aGVyIGJhY2tlbmQgY2FuIGluc2Vy dCBxdWV1ZSBlbnRyaWVzCisJCSAqIGJldHdlZW4gcXVldWVIZWFkQmVmb3JlV3JpdGUgYW5k IHF1ZXVlSGVhZEFmdGVyV3JpdGUuICBUaGUKKwkJICogaGVhdnl3ZWlnaHQgbG9jayBhYm92 ZSBwcm92aWRlcyB0aGlzIGd1YXJhbnRlZSwgc2luY2UgaXQgc2VyaWFsaXplcworCQkgKiBh bGwgd3JpdGVycy4KKwkJICoKKwkJICogTm90ZTogaWYgdGhlIGhlYXZ5d2VpZ2h0IGxvY2sg d2VyZSBldmVyIHJlbW92ZWQgZm9yIHNjYWxhYmlsaXR5CisJCSAqIHJlYXNvbnMsIHdlIGNv dWxkIGFjaGlldmUgdGhlIHNhbWUgZ3VhcmFudGVlIGJ5IGhvbGRpbmcKKwkJICogTm90aWZ5 UXVldWVMb2NrIGluIEVYQ0xVU0lWRSBtb2RlIGFjcm9zcyBhbGwgb3VyIGluc2VydGlvbnMs IHJhdGhlcgorCQkgKiB0aGFuIHJlbGVhc2luZyBhbmQgcmVhY3F1aXJpbmcgaXQgZm9yIGVh Y2ggcGFnZSBhcyB3ZSBkbyBiZWxvdy4KKwkJICovCisKKwkJLyogSW5pdGlhbGl6ZSBxdWV1 ZUhlYWRCZWZvcmVXcml0ZSB0byBhIHNhZmUgZGVmYXVsdCAqLworCQlTRVRfUVVFVUVfUE9T KHF1ZXVlSGVhZEJlZm9yZVdyaXRlLCAwLCAwKTsKKwogCQkvKiBOb3cgcHVzaCB0aGUgbm90 aWZpY2F0aW9ucyBpbnRvIHRoZSBxdWV1ZSAqLwogCQluZXh0Tm90aWZ5ID0gbGlzdF9oZWFk KHBlbmRpbmdOb3RpZmllcy0+ZXZlbnRzKTsKIAkJd2hpbGUgKG5leHROb3RpZnkgIT0gTlVM TCkKQEAgLTkzOSwxMiArMTE3MSwyMCBAQCBQcmVDb21taXRfTm90aWZ5KHZvaWQpCiAJCQkg KiBwb2ludCBpbiB0aW1lIHdlIGNhbiBzdGlsbCByb2xsIHRoZSB0cmFuc2FjdGlvbiBiYWNr LgogCQkJICovCiAJCQlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdfRVhDTFVT SVZFKTsKKwkJCWlmIChmaXJzdEl0ZXJhdGlvbikKKwkJCXsKKwkJCQlxdWV1ZUhlYWRCZWZv cmVXcml0ZSA9IFFVRVVFX0hFQUQ7CisJCQkJZmlyc3RJdGVyYXRpb24gPSBmYWxzZTsKKwkJ CX0KKwogCQkJYXN5bmNRdWV1ZUZpbGxXYXJuaW5nKCk7CiAJCQlpZiAoYXN5bmNRdWV1ZUlz RnVsbCgpKQogCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkoZXJyY29kZShFUlJDT0RFX1BS T0dSQU1fTElNSVRfRVhDRUVERUQpLAogCQkJCQkJIGVycm1zZygidG9vIG1hbnkgbm90aWZp Y2F0aW9ucyBpbiB0aGUgTk9USUZZIHF1ZXVlIikpKTsKIAkJCW5leHROb3RpZnkgPSBhc3lu Y1F1ZXVlQWRkRW50cmllcyhuZXh0Tm90aWZ5KTsKKwkJCXF1ZXVlSGVhZEFmdGVyV3JpdGUg PSBRVUVVRV9IRUFEOworCiAJCQlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7CiAJ CX0KIApAQCAtOTU3LDcgKzExOTcsNyBAQCBQcmVDb21taXRfTm90aWZ5KHZvaWQpCiAgKgog ICoJCVRoaXMgaXMgY2FsbGVkIGF0IHRyYW5zYWN0aW9uIGNvbW1pdCwgYWZ0ZXIgY29tbWl0 dGluZyB0byBjbG9nLgogICoKLSAqCQlVcGRhdGUgbGlzdGVuQ2hhbm5lbHMgYW5kIGNsZWFy IHRyYW5zYWN0aW9uLWxvY2FsIHN0YXRlLgorICoJCVVwZGF0ZSBsaXN0ZW5DaGFubmVsc0hh c2ggYW5kIGNsZWFyIHRyYW5zYWN0aW9uLWxvY2FsIHN0YXRlLgogICoKICAqCQlJZiB3ZSBp c3N1ZWQgYW55IG5vdGlmaWNhdGlvbnMgaW4gdGhlIHRyYW5zYWN0aW9uLCBzZW5kIHNpZ25h bHMgdG8KICAqCQlsaXN0ZW5pbmcgYmFja2VuZHMgKHBvc3NpYmx5IGluY2x1ZGluZyBvdXJz ZWx2ZXMpIHRvIHByb2Nlc3MgdGhlbS4KQEAgLTEwMDIsNyArMTI0Miw4IEBAIEF0Q29tbWl0 X05vdGlmeSh2b2lkKQogCX0KIAogCS8qIElmIG5vIGxvbmdlciBsaXN0ZW5pbmcgdG8gYW55 dGhpbmcsIGdldCBvdXQgb2YgbGlzdGVuZXIgYXJyYXkgKi8KLQlpZiAoYW1SZWdpc3RlcmVk TGlzdGVuZXIgJiYgbGlzdGVuQ2hhbm5lbHMgPT0gTklMKQorCWlmIChhbVJlZ2lzdGVyZWRM aXN0ZW5lciAmJgorCQkobGlzdGVuQ2hhbm5lbHNIYXNoID09IE5VTEwgfHwgaGFzaF9nZXRf bnVtX2VudHJpZXMobGlzdGVuQ2hhbm5lbHNIYXNoKSA9PSAwKSkKIAkJYXN5bmNRdWV1ZVVu cmVnaXN0ZXIoKTsKIAogCS8qCkBAIC0xMTM1LDUwICsxMzc2LDE0NSBAQCBFeGVjX0xpc3Rl blByZUNvbW1pdCh2b2lkKQogc3RhdGljIHZvaWQKIEV4ZWNfTGlzdGVuQ29tbWl0KGNvbnN0 IGNoYXIgKmNoYW5uZWwpCiB7Ci0JTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCUNoYW5u ZWxIYXNoS2V5IGtleTsKKwlDaGFubmVsRW50cnkgKmVudHJ5OworCWJvb2wJCWZvdW5kOwor CVByb2NOdW1iZXIgKmxpc3RlbmVyczsKIAogCS8qIERvIG5vdGhpbmcgaWYgd2UgYXJlIGFs cmVhZHkgbGlzdGVuaW5nIG9uIHRoaXMgY2hhbm5lbCAqLwogCWlmIChJc0xpc3RlbmluZ09u KGNoYW5uZWwpKQogCQlyZXR1cm47CiAKIAkvKgotCSAqIEFkZCB0aGUgbmV3IGNoYW5uZWwg bmFtZSB0byBsaXN0ZW5DaGFubmVscy4KKwkgKiBBZGQgdGhlIG5ldyBjaGFubmVsIG5hbWUg dG8gbGlzdGVuQ2hhbm5lbHNIYXNoLgogCSAqCiAJICogWFhYIEl0IGlzIHRoZW9yZXRpY2Fs bHkgcG9zc2libGUgdG8gZ2V0IGFuIG91dC1vZi1tZW1vcnkgZmFpbHVyZSBoZXJlLAogCSAq IHdoaWNoIHdvdWxkIGJlIGJhZCBiZWNhdXNlIHdlIGFscmVhZHkgY29tbWl0dGVkLiAgRm9y IHRoZSBtb21lbnQgaXQKIAkgKiBkb2Vzbid0IHNlZW0gd29ydGggdHJ5aW5nIHRvIGd1YXJk IGFnYWluc3QgdGhhdCwgYnV0IG1heWJlIGltcHJvdmUgdGhpcwogCSAqIGxhdGVyLgogCSAq LwotCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4 dCk7Ci0JbGlzdGVuQ2hhbm5lbHMgPSBsYXBwZW5kKGxpc3RlbkNoYW5uZWxzLCBwc3RyZHVw KGNoYW5uZWwpKTsKLQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJaW5p dExpc3RlbkNoYW5uZWxzSGFzaCgpOworCSh2b2lkKSBoYXNoX3NlYXJjaChsaXN0ZW5DaGFu bmVsc0hhc2gsIGNoYW5uZWwsIEhBU0hfRU5URVIsIE5VTEwpOworCisJLyogTm93IHVwZGF0 ZSB0aGUgc2hhcmVkIGNoYW5uZWxIYXNoIGZvciBTaWduYWxCYWNrZW5kcygpIHRvIHVzZSAq LworCWluaXRDaGFubmVsSGFzaCgpOworCisJQ2hhbm5lbEhhc2hQcmVwYXJlS2V5KCZrZXks IE15RGF0YWJhc2VJZCwgY2hhbm5lbCk7CisKKwkvKgorCSAqIEZvciBuZXcgZW50cmllcywg d2UgaW5pdGlhbGl6ZSBsaXN0ZW5lcnNBcnJheSB0byBJbnZhbGlkRHNhUG9pbnRlciBhcyBh CisJICogbWFya2VyLiBUaGlzIGhhbmRsZXMgYm90aCB0aGUgaW5pdGlhbCBjcmVhdGlvbiBh bmQgcG90ZW50aWFsIHJldHJ5CisJICogYWZ0ZXIgT09NLgorCSAqLworCWVudHJ5ID0gZHNo YXNoX2ZpbmRfb3JfaW5zZXJ0KGNoYW5uZWxIYXNoLCAma2V5LCAmZm91bmQpOworCisJaWYg KCFmb3VuZCkKKwkJZW50cnktPmxpc3RlbmVyc0FycmF5ID0gSW52YWxpZERzYVBvaW50ZXI7 CisKKwlpZiAoIURzYVBvaW50ZXJJc1ZhbGlkKGVudHJ5LT5saXN0ZW5lcnNBcnJheSkpCisJ eworCQkvKiBGaXJzdCBsaXN0ZW5lciBmb3IgdGhpcyBjaGFubmVsICovCisJCWVudHJ5LT5s aXN0ZW5lcnNBcnJheSA9IGRzYV9hbGxvY2F0ZShjaGFubmVsRFNBLAorCQkJCQkJCQkJCQkg c2l6ZW9mKFByb2NOdW1iZXIpICogSU5JVElBTF9MSVNURU5FUlNfQVJSQVlfU0laRSk7CisJ CWVudHJ5LT5udW1MaXN0ZW5lcnMgPSAwOworCQllbnRyeS0+YWxsb2NhdGVkTGlzdGVuZXJz ID0gSU5JVElBTF9MSVNURU5FUlNfQVJSQVlfU0laRTsKKwl9CisKKwlsaXN0ZW5lcnMgPSAo UHJvY051bWJlciAqKSBkc2FfZ2V0X2FkZHJlc3MoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJ ICAgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgZW50 cnktPm51bUxpc3RlbmVyczsgaSsrKQorCXsKKwkJaWYgKGxpc3RlbmVyc1tpXSA9PSBNeVBy b2NOdW1iZXIpCisJCXsKKwkJCWRzaGFzaF9yZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gsIGVu dHJ5KTsKKwkJCXJldHVybjsJCQkJLyogQWxyZWFkeSByZWdpc3RlcmVkICovCisJCX0KKwl9 CisKKwlpZiAoZW50cnktPm51bUxpc3RlbmVycyA+PSBlbnRyeS0+YWxsb2NhdGVkTGlzdGVu ZXJzKQorCXsKKwkJaW50CQkJbmV3X3NpemUgPSBlbnRyeS0+YWxsb2NhdGVkTGlzdGVuZXJz ICogMjsKKwkJZHNhX3BvaW50ZXIgbmV3X2FycmF5ID0gZHNhX2FsbG9jYXRlKGNoYW5uZWxE U0EsCisJCQkJCQkJCQkJCSBzaXplb2YoUHJvY051bWJlcikgKiBuZXdfc2l6ZSk7CisJCVBy b2NOdW1iZXIgKm5ld19saXN0ZW5lcnMgPSAoUHJvY051bWJlciAqKSBkc2FfZ2V0X2FkZHJl c3MoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJCQkJCQkgICBuZXdfYXJyYXkpOworCisJCW1l bWNweShuZXdfbGlzdGVuZXJzLCBsaXN0ZW5lcnMsCisJCQkgICBzaXplb2YoUHJvY051bWJl cikgKiBlbnRyeS0+bnVtTGlzdGVuZXJzKTsKKworCQlkc2FfZnJlZShjaGFubmVsRFNBLCBl bnRyeS0+bGlzdGVuZXJzQXJyYXkpOworCQllbnRyeS0+bGlzdGVuZXJzQXJyYXkgPSBuZXdf YXJyYXk7CisJCWVudHJ5LT5hbGxvY2F0ZWRMaXN0ZW5lcnMgPSBuZXdfc2l6ZTsKKwkJbGlz dGVuZXJzID0gbmV3X2xpc3RlbmVyczsKKwl9CisKKwlsaXN0ZW5lcnNbZW50cnktPm51bUxp c3RlbmVyc10gPSBNeVByb2NOdW1iZXI7CisJZW50cnktPm51bUxpc3RlbmVycysrOworCisJ ZHNoYXNoX3JlbGVhc2VfbG9jayhjaGFubmVsSGFzaCwgZW50cnkpOwogfQogCiAvKgogICog RXhlY19Vbmxpc3RlbkNvbW1pdCAtLS0gc3Vicm91dGluZSBmb3IgQXRDb21taXRfTm90aWZ5 CiAgKgotICogUmVtb3ZlIHRoZSBzcGVjaWZpZWQgY2hhbm5lbCBuYW1lIGZyb20gbGlzdGVu Q2hhbm5lbHMuCisgKgkJVW5saXN0ZW4gdGhlIHNwZWNpZmllZCBjaGFubmVsIGZvciB0aGlz IGJhY2tlbmQuCiAgKi8KIHN0YXRpYyB2b2lkCiBFeGVjX1VubGlzdGVuQ29tbWl0KGNvbnN0 IGNoYXIgKmNoYW5uZWwpCiB7Ci0JTGlzdENlbGwgICAqcTsKKwlDaGFubmVsSGFzaEtleSBr ZXk7CisJQ2hhbm5lbEVudHJ5ICplbnRyeTsKKwlQcm9jTnVtYmVyICpsaXN0ZW5lcnM7CisJ aW50CQkJaTsKIAogCWlmIChUcmFjZV9ub3RpZnkpCiAJCWVsb2coREVCVUcxLCAiRXhlY19V bmxpc3RlbkNvbW1pdCglcywlZCkiLCBjaGFubmVsLCBNeVByb2NQaWQpOwogCi0JZm9yZWFj aChxLCBsaXN0ZW5DaGFubmVscykKKwkvKiBSZW1vdmUgZnJvbSBvdXIgbG9jYWwgY2FjaGUg Ki8KKwlpZiAobGlzdGVuQ2hhbm5lbHNIYXNoICE9IE5VTEwpCisJCSh2b2lkKSBoYXNoX3Nl YXJjaChsaXN0ZW5DaGFubmVsc0hhc2gsIGNoYW5uZWwsIEhBU0hfUkVNT1ZFLCBOVUxMKTsK KworCS8qIE5vdyByZW1vdmUgZnJvbSB0aGUgc2hhcmVkIGNoYW5uZWxIYXNoICovCisJaWYg KGNoYW5uZWxIYXNoID09IE5VTEwpCisJCXJldHVybjsKKworCUNoYW5uZWxIYXNoUHJlcGFy ZUtleSgma2V5LCBNeURhdGFiYXNlSWQsIGNoYW5uZWwpOworCisJLyogTG9vayB1cCB0aGUg Y2hhbm5lbCB3aXRoIGV4Y2x1c2l2ZSBsb2NrIHNvIHdlIGNhbiBtb2RpZnkgaXQgKi8KKwll bnRyeSA9IGRzaGFzaF9maW5kKGNoYW5uZWxIYXNoLCAma2V5LCB0cnVlKTsKKwlpZiAoZW50 cnkgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJbGlzdGVuZXJzID0gKFByb2NOdW1iZXIgKikg ZHNhX2dldF9hZGRyZXNzKGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJCSAgIGVudHJ5LT5saXN0 ZW5lcnNBcnJheSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZW50cnktPm51bUxpc3RlbmVyczsg aSsrKQogCXsKLQkJY2hhcgkgICAqbGNoYW4gPSAoY2hhciAqKSBsZmlyc3QocSk7Ci0KLQkJ aWYgKHN0cmNtcChsY2hhbiwgY2hhbm5lbCkgPT0gMCkKKwkJaWYgKGxpc3RlbmVyc1tpXSA9 PSBNeVByb2NOdW1iZXIpCiAJCXsKLQkJCWxpc3RlbkNoYW5uZWxzID0gZm9yZWFjaF9kZWxl dGVfY3VycmVudChsaXN0ZW5DaGFubmVscywgcSk7Ci0JCQlwZnJlZShsY2hhbik7Ci0JCQli cmVhazsKKwkJCWVudHJ5LT5udW1MaXN0ZW5lcnMtLTsKKwkJCWlmIChpIDwgZW50cnktPm51 bUxpc3RlbmVycykKKwkJCQltZW1tb3ZlKCZsaXN0ZW5lcnNbaV0sICZsaXN0ZW5lcnNbaSAr IDFdLAorCQkJCQkJc2l6ZW9mKFByb2NOdW1iZXIpICogKGVudHJ5LT5udW1MaXN0ZW5lcnMg LSBpKSk7CisKKwkJCWlmIChlbnRyeS0+bnVtTGlzdGVuZXJzID09IDApCisJCQl7CisJCQkJ LyogTGFzdCBsaXN0ZW5lciBmb3IgdGhpcyBjaGFubmVsICovCisJCQkJZHNhX2ZyZWUoY2hh bm5lbERTQSwgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKwkJCQlkc2hhc2hfZGVsZXRlX2Vu dHJ5KGNoYW5uZWxIYXNoLCBlbnRyeSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJZHNo YXNoX3JlbGVhc2VfbG9jayhjaGFubmVsSGFzaCwgZW50cnkpOworCQkJfQorCisJCQlyZXR1 cm47CiAJCX0KIAl9CiAKKwlkc2hhc2hfcmVsZWFzZV9sb2NrKGNoYW5uZWxIYXNoLCBlbnRy eSk7CisKIAkvKgogCSAqIFdlIGRvIG5vdCBjb21wbGFpbiBhYm91dCB1bmxpc3RlbmluZyBz b21ldGhpbmcgbm90IGJlaW5nIGxpc3RlbmVkOwogCSAqIHNob3VsZCB3ZT8KQEAgLTExOTMs MzQgKzE1MjksNjggQEAgRXhlY19Vbmxpc3RlbkNvbW1pdChjb25zdCBjaGFyICpjaGFubmVs KQogc3RhdGljIHZvaWQKIEV4ZWNfVW5saXN0ZW5BbGxDb21taXQodm9pZCkKIHsKKwlkc2hh c2hfc2VxX3N0YXR1cyBzdGF0dXM7CisJQ2hhbm5lbEVudHJ5ICplbnRyeTsKKwogCWlmIChU cmFjZV9ub3RpZnkpCiAJCWVsb2coREVCVUcxLCAiRXhlY19Vbmxpc3RlbkFsbENvbW1pdCgl ZCkiLCBNeVByb2NQaWQpOwogCi0JbGlzdF9mcmVlX2RlZXAobGlzdGVuQ2hhbm5lbHMpOwot CWxpc3RlbkNoYW5uZWxzID0gTklMOworCS8qIENsZWFyIG91ciBsb2NhbCBjYWNoZSAqLwor CWlmIChsaXN0ZW5DaGFubmVsc0hhc2ggIT0gTlVMTCkKKwl7CisJCWhhc2hfZGVzdHJveShs aXN0ZW5DaGFubmVsc0hhc2gpOworCQlsaXN0ZW5DaGFubmVsc0hhc2ggPSBOVUxMOworCX0K KworCS8qIE5vdyByZW1vdmUgZnJvbSB0aGUgc2hhcmVkIGNoYW5uZWxIYXNoICovCisJaWYg KGNoYW5uZWxIYXNoID09IE5VTEwpCisJCXJldHVybjsKKworCWRzaGFzaF9zZXFfaW5pdCgm c3RhdHVzLCBjaGFubmVsSGFzaCwgdHJ1ZSk7CisJd2hpbGUgKChlbnRyeSA9IGRzaGFzaF9z ZXFfbmV4dCgmc3RhdHVzKSkgIT0gTlVMTCkKKwl7CisJCWlmIChlbnRyeS0+a2V5LmRib2lk ID09IE15RGF0YWJhc2VJZCkKKwkJeworCQkJUHJvY051bWJlciAqbGlzdGVuZXJzOworCQkJ aW50CQkJaTsKKworCQkJbGlzdGVuZXJzID0gKFByb2NOdW1iZXIgKikgZHNhX2dldF9hZGRy ZXNzKGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJCQkJICAgZW50cnktPmxpc3RlbmVyc0FycmF5 KTsKKworCQkJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5udW1MaXN0ZW5lcnM7IGkrKykKKwkJ CXsKKwkJCQlpZiAobGlzdGVuZXJzW2ldID09IE15UHJvY051bWJlcikKKwkJCQl7CisJCQkJ CWVudHJ5LT5udW1MaXN0ZW5lcnMtLTsKKwkJCQkJaWYgKGkgPCBlbnRyeS0+bnVtTGlzdGVu ZXJzKQorCQkJCQkJbWVtbW92ZSgmbGlzdGVuZXJzW2ldLCAmbGlzdGVuZXJzW2kgKyAxXSwK KwkJCQkJCQkJc2l6ZW9mKFByb2NOdW1iZXIpICogKGVudHJ5LT5udW1MaXN0ZW5lcnMgLSBp KSk7CisKKwkJCQkJaWYgKGVudHJ5LT5udW1MaXN0ZW5lcnMgPT0gMCkKKwkJCQkJeworCQkJ CQkJZHNhX2ZyZWUoY2hhbm5lbERTQSwgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKwkJCQkJ CWRzaGFzaF9kZWxldGVfY3VycmVudCgmc3RhdHVzKTsKKwkJCQkJfQorCQkJCQlicmVhazsK KwkJCQl9CisJCQl9CisJCX0KKwl9CisJZHNoYXNoX3NlcV90ZXJtKCZzdGF0dXMpOwogfQog CiAvKgogICogVGVzdCB3aGV0aGVyIHdlIGFyZSBhY3RpdmVseSBsaXN0ZW5pbmcgb24gdGhl IGdpdmVuIGNoYW5uZWwgbmFtZS4KICAqCiAgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIGV4 ZWN1dGVkIGZvciBldmVyeSBub3RpZmljYXRpb24gZm91bmQgaW4gdGhlIHF1ZXVlLgotICog UGVyaGFwcyBpdCBpcyB3b3J0aCBmdXJ0aGVyIG9wdGltaXphdGlvbiwgZWcgY29udmVydCB0 aGUgbGlzdCB0byBhIHNvcnRlZAotICogYXJyYXkgc28gd2UgY2FuIGJpbmFyeS1zZWFyY2gg aXQuICBJbiBwcmFjdGljZSB0aGUgbGlzdCBpcyBsaWtlbHkgdG8gYmUKLSAqIGZhaXJseSBz aG9ydCwgdGhvdWdoLgogICovCiBzdGF0aWMgYm9vbAogSXNMaXN0ZW5pbmdPbihjb25zdCBj aGFyICpjaGFubmVsKQogewotCUxpc3RDZWxsICAgKnA7CisJaWYgKGxpc3RlbkNoYW5uZWxz SGFzaCA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CiAKLQlmb3JlYWNoKHAsIGxpc3RlbkNo YW5uZWxzKQotCXsKLQkJY2hhcgkgICAqbGNoYW4gPSAoY2hhciAqKSBsZmlyc3QocCk7Ci0K LQkJaWYgKHN0cmNtcChsY2hhbiwgY2hhbm5lbCkgPT0gMCkKLQkJCXJldHVybiB0cnVlOwot CX0KLQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIChoYXNoX3NlYXJjaChsaXN0ZW5DaGFubmVs c0hhc2gsIGNoYW5uZWwsIEhBU0hfRklORCwgTlVMTCkgIT0gTlVMTCk7CiB9CiAKIC8qCkBA IC0xMjMwLDcgKzE2MDAsNyBAQCBJc0xpc3RlbmluZ09uKGNvbnN0IGNoYXIgKmNoYW5uZWwp CiBzdGF0aWMgdm9pZAogYXN5bmNRdWV1ZVVucmVnaXN0ZXIodm9pZCkKIHsKLQlBc3NlcnQo bGlzdGVuQ2hhbm5lbHMgPT0gTklMKTsJLyogZWxzZSBjYWxsZXIgZXJyb3IgKi8KKwlBc3Nl cnQobGlzdGVuQ2hhbm5lbHNIYXNoID09IE5VTEwgfHwgaGFzaF9nZXRfbnVtX2VudHJpZXMo bGlzdGVuQ2hhbm5lbHNIYXNoKSA9PSAwKTsJLyogZWxzZSBjYWxsZXIgZXJyb3IgKi8KIAog CWlmICghYW1SZWdpc3RlcmVkTGlzdGVuZXIpCS8qIG5vdGhpbmcgdG8gZG8gKi8KIAkJcmV0 dXJuOwpAQCAtMTI0Miw2ICsxNjEyLDcgQEAgYXN5bmNRdWV1ZVVucmVnaXN0ZXIodm9pZCkK IAkvKiBNYXJrIG91ciBlbnRyeSBhcyBpbnZhbGlkICovCiAJUVVFVUVfQkFDS0VORF9QSUQo TXlQcm9jTnVtYmVyKSA9IEludmFsaWRQaWQ7CiAJUVVFVUVfQkFDS0VORF9EQk9JRChNeVBy b2NOdW1iZXIpID0gSW52YWxpZE9pZDsKKwlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5H KE15UHJvY051bWJlcikgPSBmYWxzZTsKIAkvKiBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGxp c3QgKi8KIAlpZiAoUVVFVUVfRklSU1RfTElTVEVORVIgPT0gTXlQcm9jTnVtYmVyKQogCQlR VUVVRV9GSVJTVF9MSVNURU5FUiA9IFFVRVVFX05FWFRfTElTVEVORVIoTXlQcm9jTnVtYmVy KTsKQEAgLTE1NjUsMTIgKzE5MzYsMTUgQEAgYXN5bmNRdWV1ZUZpbGxXYXJuaW5nKHZvaWQp CiAvKgogICogU2VuZCBzaWduYWxzIHRvIGxpc3RlbmluZyBiYWNrZW5kcy4KICAqCi0gKiBO b3JtYWxseSB3ZSBzaWduYWwgb25seSBiYWNrZW5kcyBpbiBvdXIgb3duIGRhdGFiYXNlLCBz aW5jZSBvbmx5IHRob3NlCi0gKiBiYWNrZW5kcyBjb3VsZCBiZSBpbnRlcmVzdGVkIGluIG5v dGlmaWVzIHdlIHNlbmQuICBIb3dldmVyLCBpZiB0aGVyZSdzCi0gKiBub3RpZnkgdHJhZmZp YyBpbiBvdXIgZGF0YWJhc2UgYnV0IG5vIHRyYWZmaWMgaW4gYW5vdGhlciBkYXRhYmFzZSB0 aGF0Ci0gKiBkb2VzIGhhdmUgbGlzdGVuZXIocyksIHRob3NlIGxpc3RlbmVycyB3aWxsIGZh bGwgZnVydGhlciBhbmQgZnVydGhlcgotICogYmVoaW5kLiAgV2FrZW4gdGhlbSBhbnl3YXkg aWYgdGhleSdyZSBmYXIgZW5vdWdoIGJlaGluZCwgc28gdGhhdCB0aGV5J2xsCi0gKiBhZHZh bmNlIHRoZWlyIHF1ZXVlIHBvc2l0aW9uIHBvaW50ZXJzLCBhbGxvd2luZyB0aGUgZ2xvYmFs IHRhaWwgdG8gYWR2YW5jZS4KKyAqIE5vcm1hbGx5IHdlIHNpZ25hbCBvbmx5IGJhY2tlbmRz IGluIG91ciBvd24gZGF0YWJhc2UsIHRoYXQgYXJlCisgKiBsaXN0ZW5pbmcgb24gdGhlIGNo YW5uZWxzIHdpdGggcGVuZGluZyBub3RpZmllcywgc2luY2Ugb25seSB0aG9zZQorICogYmFj a2VuZHMgYXJlIGludGVyZXN0ZWQgaW4gbm90aWZpZXMgd2Ugc2VuZC4KKyAqCisgKiBCYWNr ZW5kcyB0aGF0IGFyZSBrbm93biB0byBzdGlsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBxdWV1 ZSBoZWFkCisgKiBmcm9tIGJlZm9yZSBvdXIgY29tbWl0IGNhbiBiZSBzYWZlbHkgYWR2YW5j ZWQgZGlyZWN0bHkgdG8gdGhlIG5ldworICogaGVhZCwgc2luY2UgdGhlIHF1ZXVlIHJlZ2lv biB3ZSB3cm90ZSBpcyBrbm93biB0byBjb250YWluIG9ubHkgb3VyCisgKiBvd24gbm90aWZp Y2F0aW9ucy4gIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJ5IHdha2V1cHMgd2hlbiB0aGVyZSBp cworICogbm90aGluZyBvZiBpbnRlcmVzdCB0byB0aGVtLgogICoKICAqIFNpbmNlIHdlIGtu b3cgdGhlIFByb2NOdW1iZXIgYW5kIHRoZSBQaWQgdGhlIHNpZ25hbGluZyBpcyBxdWl0ZSBj aGVhcC4KICAqCkBAIC0xNTgzLDYgKzE5NTcsMTMgQEAgU2lnbmFsQmFja2VuZHModm9pZCkK IAlpbnQzMgkgICAqcGlkczsKIAlQcm9jTnVtYmVyICpwcm9jbm9zOwogCWludAkJCWNvdW50 OworCUxpc3RDZWxsICAgKmxjOworCisJLyoKKwkgKiBBdHRhY2ggdG8gdGhlIGNoYW5uZWwg aGFzaCBpZiBuZWVkZWQuICBXZSBtaWdodCBub3QgaGF2ZSBvbmUgaWYgdGhpcworCSAqIGJh Y2tlbmQgaGFzbid0IGRvbmUgTElTVEVOLCBidXQgd2UgbmVlZCBpdCB0byBmaW5kIGxpc3Rl bmVycy4KKwkgKi8KKwlpbml0Q2hhbm5lbEhhc2goKTsKIAogCS8qCiAJICogSWRlbnRpZnkg YmFja2VuZHMgdGhhdCB3ZSBuZWVkIHRvIHNpZ25hbC4gIFdlIGRvbid0IHdhbnQgdG8gc2Vu ZApAQCAtMTU5NywzNiArMTk3OCwxMDMgQEAgU2lnbmFsQmFja2VuZHModm9pZCkKIAljb3Vu dCA9IDA7CiAKIAlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdfRVhDTFVTSVZF KTsKLQlmb3IgKFByb2NOdW1iZXIgaSA9IFFVRVVFX0ZJUlNUX0xJU1RFTkVSOyBpICE9IElO VkFMSURfUFJPQ19OVU1CRVI7IGkgPSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkpKQorCWZvcmVh Y2gobGMsIHBlbmRpbmdOb3RpZnlDaGFubmVscykKIAl7Ci0JCWludDMyCQlwaWQgPSBRVUVV RV9CQUNLRU5EX1BJRChpKTsKLQkJUXVldWVQb3NpdGlvbiBwb3M7CisJCWNoYXIJICAgKmNo YW5uZWwgPSAoY2hhciAqKSBsZmlyc3QobGMpOworCQlDaGFubmVsRW50cnkgKmVudHJ5ID0g TlVMTDsKKwkJUHJvY051bWJlciAqbGlzdGVuZXJzOwogCi0JCUFzc2VydChwaWQgIT0gSW52 YWxpZFBpZCk7Ci0JCXBvcyA9IFFVRVVFX0JBQ0tFTkRfUE9TKGkpOwotCQlpZiAoUVVFVUVf QkFDS0VORF9EQk9JRChpKSA9PSBNeURhdGFiYXNlSWQpCisJCWlmIChjaGFubmVsSGFzaCAh PSBOVUxMKQogCQl7Ci0JCQkvKgotCQkJICogQWx3YXlzIHNpZ25hbCBsaXN0ZW5lcnMgaW4g b3VyIG93biBkYXRhYmFzZSwgdW5sZXNzIHRoZXkncmUKLQkJCSAqIGFscmVhZHkgY2F1Z2h0 IHVwICh1bmxpa2VseSwgYnV0IHBvc3NpYmxlKS4KLQkJCSAqLworCQkJQ2hhbm5lbEhhc2hL ZXkga2V5OworCisJCQlDaGFubmVsSGFzaFByZXBhcmVLZXkoJmtleSwgTXlEYXRhYmFzZUlk LCBjaGFubmVsKTsKKwkJCWVudHJ5ID0gZHNoYXNoX2ZpbmQoY2hhbm5lbEhhc2gsICZrZXks IGZhbHNlKTsKKwkJfQorCisJCWlmIChlbnRyeSA9PSBOVUxMKQorCQkJY29udGludWU7CQkJ LyogTm8gbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIHRoaXMgY2hhbm5lbCAqLworCisJCWxp c3RlbmVycyA9IChQcm9jTnVtYmVyICopIGRzYV9nZXRfYWRkcmVzcyhjaGFubmVsRFNBLAor CQkJCQkJCQkJCQkJICAgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKworCQlmb3IgKGludCBq ID0gMDsgaiA8IGVudHJ5LT5udW1MaXN0ZW5lcnM7IGorKykKKwkJeworCQkJUHJvY051bWJl cglpID0gbGlzdGVuZXJzW2pdOworCQkJaW50MzIJCXBpZDsKKwkJCVF1ZXVlUG9zaXRpb24g cG9zOworCisJCQlpZiAoUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhpKSkKKwkJCQlj b250aW51ZTsKKworCQkJcG9zID0gUVVFVUVfQkFDS0VORF9QT1MoaSk7CisJCQlwaWQgPSBR VUVVRV9CQUNLRU5EX1BJRChpKTsKKworCQkJLyogU2tpcCBpZiBjYXVnaHQgdXAgKi8KIAkJ CWlmIChRVUVVRV9QT1NfRVFVQUwocG9zLCBRVUVVRV9IRUFEKSkKIAkJCQljb250aW51ZTsK KworCQkJQXNzZXJ0KHBpZCAhPSBJbnZhbGlkUGlkKTsKKworCQkJUVVFVUVfQkFDS0VORF9X QUtFVVBfUEVORElORyhpKSA9IHRydWU7CisJCQlwaWRzW2NvdW50XSA9IHBpZDsKKwkJCXBy b2Nub3NbY291bnRdID0gaTsKKwkJCWNvdW50Kys7CiAJCX0KLQkJZWxzZQorCisJCWRzaGFz aF9yZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gsIGVudHJ5KTsKKwl9CisKKwkvKgorCSAqIERp cmVjdCBhZHZhbmNlbWVudDogYXZvaWQgd2FraW5nIG5vbi1jYXVnaHQgdXAgYmFja2VuZHMg dGhhdCBhcmVuJ3QKKwkgKiBpbnRlcmVzdGVkIGluIG91ciBub3RpZmljYXRpb25zLgorCSAq LworCWlmIChwZW5kaW5nTm90aWZpZXMgIT0gTlVMTCkKKwl7CisJCWZvciAoUHJvY051bWJl ciBpID0gUVVFVUVfRklSU1RfTElTVEVORVI7CisJCQkgaSAhPSBJTlZBTElEX1BST0NfTlVN QkVSOworCQkJIGkgPSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkpKQogCQl7CisJCQlRdWV1ZVBv c2l0aW9uIHBvczsKKwkJCWludDMyCQlwaWQ7CisKKwkJCWlmIChRVUVVRV9CQUNLRU5EX1dB S0VVUF9QRU5ESU5HKGkpKQorCQkJCWNvbnRpbnVlOworCisJCQlwb3MgPSBRVUVVRV9CQUNL RU5EX1BPUyhpKTsKKwkJCXBpZCA9IFFVRVVFX0JBQ0tFTkRfUElEKGkpOworCiAJCQkvKgot CQkJICogTGlzdGVuZXJzIGluIG90aGVyIGRhdGFiYXNlcyBzaG91bGQgYmUgc2lnbmFsZWQg b25seSBpZiB0aGV5Ci0JCQkgKiBhcmUgZmFyIGJlaGluZC4KKwkJCSAqIFdlIG5lZWQgdG8g c2lnbmFsIGFkdmFuY2luZyBsaXN0ZW5pbmcgYmFja2VuZHMgdGhhdCB3b3VsZCBnZXQKKwkJ CSAqIHN0dWNrIGF0IGEgcG9zaXRpb24gYmVmb3JlIHRoZSBuZXcgcXVldWUgaGVhZC4gV2Ug YWxzbyBuZWVkIHRvCisJCQkgKiBzaWduYWwgbGlzdGVuaW5nIGJhY2tlbmRzIHRoYXQgYXJl IGlkbGUgYXQgYSBwb3NpdGlvbiBiZWZvcmUKKwkJCSAqIHRoZSBvbGQgcXVldWUgaGVhZCBz aW5jZSB0aGV5IGNvdWxkIGJlIGludGVyZXN0ZWQgaW4gdGhlCisJCQkgKiBtZXNzYWdlcyBp bi1iZXR3ZWVuLgorCQkJICoKKwkJCSAqIExpc3RlbmluZyBiYWNrZW5kcyB0aGF0IGFyZSBu b3QgYWR2YW5jaW5nIGFuZCBhcmUgc3RhdGlvbmFyeSBhdAorCQkJICogYSBwb3NpdGlvbiBz b21ld2hlcmUgaW4gdGhlIHJhbmdlIHdlIGp1c3Qgd3JvdGUsIGNhbiBzYWZlbHkgYmUKKwkJ CSAqIGRpcmVjdCBhZHZhbmNlZCB0byB0aGUgbmV3IHF1ZXVlIGhlYWQsIHNpbmNlIHdlIGtu b3cgdGhhdCB0aGV5CisJCQkgKiBhcmUgbm90IGludGVyZXN0ZWQgaW4gb3VyIG1lc3NhZ2Vz LgogCQkJICovCi0JCQlpZiAoYXN5bmNRdWV1ZVBhZ2VEaWZmKFFVRVVFX1BPU19QQUdFKFFV RVVFX0hFQUQpLAotCQkJCQkJCQkgICBRVUVVRV9QT1NfUEFHRShwb3MpKSA8IFFVRVVFX0NM RUFOVVBfREVMQVkpCi0JCQkJY29udGludWU7CisJCQlpZiAoUVVFVUVfQkFDS0VORF9JU19B RFZBTkNJTkcoaSkgPworCQkJCVFVRVVFX1BPU19QUkVDRURFUyhRVUVVRV9CQUNLRU5EX0FE VkFOQ0lOR19QT1MoaSksIHF1ZXVlSGVhZEFmdGVyV3JpdGUpIDoKKwkJCQlRVUVVRV9QT1Nf UFJFQ0VERVMocG9zLCBxdWV1ZUhlYWRCZWZvcmVXcml0ZSkpCisJCQl7CisJCQkJQXNzZXJ0 KHBpZCAhPSBJbnZhbGlkUGlkKTsKKworCQkJCVFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJ TkcoaSkgPSB0cnVlOworCQkJCXBpZHNbY291bnRdID0gcGlkOworCQkJCXByb2Nub3NbY291 bnRdID0gaTsKKwkJCQljb3VudCsrOworCQkJfQorCQkJZWxzZSBpZiAoIVFVRVVFX0JBQ0tF TkRfSVNfQURWQU5DSU5HKGkpICYmCisJCQkJCSBRVUVVRV9QT1NfUFJFQ0VERVMocG9zLCBx dWV1ZUhlYWRBZnRlcldyaXRlKSkKKwkJCXsKKwkJCQlBc3NlcnQoIVFVRVVFX1BPU19QUkVD RURFUyhwb3MsIHF1ZXVlSGVhZEJlZm9yZVdyaXRlKSk7CisKKwkJCQlRVUVVRV9CQUNLRU5E X1BPUyhpKSA9IHF1ZXVlSGVhZEFmdGVyV3JpdGU7CisJCQl9CiAJCX0KLQkJLyogT0ssIG5l ZWQgdG8gc2lnbmFsIHRoaXMgb25lICovCi0JCXBpZHNbY291bnRdID0gcGlkOwotCQlwcm9j bm9zW2NvdW50XSA9IGk7Ci0JCWNvdW50Kys7CiAJfQogCUxXTG9ja1JlbGVhc2UoTm90aWZ5 UXVldWVMb2NrKTsKIApAQCAtMTY3Myw5ICsyMTIxLDEwIEBAIEF0QWJvcnRfTm90aWZ5KHZv aWQpCiAJLyoKIAkgKiBJZiB3ZSBMSVNURU4gYnV0IHRoZW4gcm9sbCBiYWNrIHRoZSB0cmFu c2FjdGlvbiBhZnRlciBQcmVDb21taXRfTm90aWZ5LAogCSAqIHdlIGhhdmUgcmVnaXN0ZXJl ZCBhcyBhIGxpc3RlbmVyIGJ1dCBoYXZlIG5vdCBtYWRlIGFueSBlbnRyeSBpbgotCSAqIGxp c3RlbkNoYW5uZWxzLiAgSW4gdGhhdCBjYXNlLCBkZXJlZ2lzdGVyIGFnYWluLgorCSAqIGxp c3RlbkNoYW5uZWxzSGFzaC4gIEluIHRoYXQgY2FzZSwgZGVyZWdpc3RlciBhZ2Fpbi4KIAkg Ki8KLQlpZiAoYW1SZWdpc3RlcmVkTGlzdGVuZXIgJiYgbGlzdGVuQ2hhbm5lbHMgPT0gTklM KQorCWlmIChhbVJlZ2lzdGVyZWRMaXN0ZW5lciAmJgorCQkobGlzdGVuQ2hhbm5lbHNIYXNo ID09IE5VTEwgfHwgaGFzaF9nZXRfbnVtX2VudHJpZXMobGlzdGVuQ2hhbm5lbHNIYXNoKSA9 PSAwKSkKIAkJYXN5bmNRdWV1ZVVucmVnaXN0ZXIoKTsKIAogCS8qIEFuZCBjbGVhbiB1cCAq LwpAQCAtMTg2MSwyMCArMjMxMCwyOSBAQCBhc3luY1F1ZXVlUmVhZEFsbE5vdGlmaWNhdGlv bnModm9pZCkKIAkJQXN5bmNRdWV1ZUVudHJ5IGFsaWduOwogCX0JCQlwYWdlX2J1ZmZlcjsK IAotCS8qIEZldGNoIGN1cnJlbnQgc3RhdGUgKi8KKwkvKgorCSAqIEZldGNoIGN1cnJlbnQg c3RhdGUsIGluZGljYXRlIHRvIG90aGVycyB0aGF0IHdlIGhhdmUgd29rZW4gdXAsIGFuZCB0 aGF0CisJICogd2Ugbm93IHdpbGwgYmUgYWR2YW5jaW5nIG91ciBwb3NpdGlvbi4KKwkgKi8K IAlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdfU0hBUkVEKTsKIAkvKiBBc3Nl cnQgY2hlY2tzIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIHN0YXRlIGVudHJ5ICovCiAJQXNzZXJ0 KE15UHJvY1BpZCA9PSBRVUVVRV9CQUNLRU5EX1BJRChNeVByb2NOdW1iZXIpKTsKKwlRVUVV RV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKE15UHJvY051bWJlcikgPSBmYWxzZTsKKwloZWFk ID0gUVVFVUVfSEVBRDsKIAlwb3MgPSBRVUVVRV9CQUNLRU5EX1BPUyhNeVByb2NOdW1iZXIp OwotCWhlYWQgPSBRVUVVRV9IRUFEOwotCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2Nr KTsKIAogCWlmIChRVUVVRV9QT1NfRVFVQUwocG9zLCBoZWFkKSkKIAl7CiAJCS8qIE5vdGhp bmcgdG8gZG8sIHdlIGhhdmUgcmVhZCBhbGwgbm90aWZpY2F0aW9ucyBhbHJlYWR5LiAqLwor CQlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7CiAJCXJldHVybjsKIAl9CiAKKwlR VUVVRV9CQUNLRU5EX0lTX0FEVkFOQ0lORyhNeVByb2NOdW1iZXIpID0gdHJ1ZTsKKwlRVUVV RV9CQUNLRU5EX0FEVkFOQ0lOR19QT1MoTXlQcm9jTnVtYmVyKSA9IGhlYWQ7CisKKwlMV0xv Y2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7CisKIAkvKi0tLS0tLS0tLS0KIAkgKiBHZXQg c25hcHNob3Qgd2UnbGwgdXNlIHRvIGRlY2lkZSB3aGljaCB4YWN0cyBhcmUgc3RpbGwgaW4g cHJvZ3Jlc3MuCiAJICogVGhpcyBpcyB0cmlja2llciB0aGFuIGl0IG1pZ2h0IHNlZW0sIGJl Y2F1c2Ugb2YgcmFjZSBjb25kaXRpb25zLgpAQCAtMTk4Nyw2ICsyNDQ1LDggQEAgYXN5bmNR dWV1ZVJlYWRBbGxOb3RpZmljYXRpb25zKHZvaWQpCiAJewogCQkvKiBVcGRhdGUgc2hhcmVk IHN0YXRlICovCiAJCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVMb2NrLCBMV19TSEFSRUQp OworCisJCVFVRVVFX0JBQ0tFTkRfSVNfQURWQU5DSU5HKE15UHJvY051bWJlcikgPSBmYWxz ZTsKIAkJUVVFVUVfQkFDS0VORF9QT1MoTXlQcm9jTnVtYmVyKSA9IHBvczsKIAkJTFdMb2Nr UmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwogCX0KQEAgLTIxODYsNyArMjY0Niw3IEBAIFBy b2Nlc3NJbmNvbWluZ05vdGlmeShib29sIGZsdXNoKQogCW5vdGlmeUludGVycnVwdFBlbmRp bmcgPSBmYWxzZTsKIAogCS8qIERvIG5vdGhpbmcgZWxzZSBpZiB3ZSBhcmVuJ3QgYWN0aXZl bHkgbGlzdGVuaW5nICovCi0JaWYgKGxpc3RlbkNoYW5uZWxzID09IE5JTCkKKwlpZiAobGlz dGVuQ2hhbm5lbHNIYXNoID09IE5VTEwgfHwgaGFzaF9nZXRfbnVtX2VudHJpZXMobGlzdGVu Q2hhbm5lbHNIYXNoKSA9PSAwKQogCQlyZXR1cm47CiAKIAlpZiAoVHJhY2Vfbm90aWZ5KQpA QCAtMjI5MCwxMyArMjc1MCwxNSBAQCBBZGRFdmVudFRvUGVuZGluZ05vdGlmaWVzKE5vdGlm aWNhdGlvbiAqbikKIHsKIAlBc3NlcnQocGVuZGluZ05vdGlmaWVzLT5ldmVudHMgIT0gTklM KTsKIAotCS8qIENyZWF0ZSB0aGUgaGFzaCB0YWJsZSBpZiBpdCdzIHRpbWUgdG8gKi8KKwkv KiBDcmVhdGUgdGhlIGhhc2ggdGFibGVzIGlmIGl0J3MgdGltZSB0byAqLwogCWlmIChsaXN0 X2xlbmd0aChwZW5kaW5nTm90aWZpZXMtPmV2ZW50cykgPj0gTUlOX0hBU0hBQkxFX05PVElG SUVTICYmCiAJCXBlbmRpbmdOb3RpZmllcy0+aGFzaHRhYiA9PSBOVUxMKQogCXsKIAkJSEFT SENUTAkJaGFzaF9jdGw7CiAJCUxpc3RDZWxsICAgKmw7CiAKKwkJQXNzZXJ0KHBlbmRpbmdO b3RpZmllcy0+Y2hhbm5lbEhhc2h0YWIgPT0gTlVMTCk7CisKIAkJLyogQ3JlYXRlIHRoZSBo YXNoIHRhYmxlICovCiAJCWhhc2hfY3RsLmtleXNpemUgPSBzaXplb2YoTm90aWZpY2F0aW9u ICopOwogCQloYXNoX2N0bC5lbnRyeXNpemUgPSBzaXplb2Yoc3RydWN0IE5vdGlmaWNhdGlv bkhhc2gpOwpAQCAtMjMwOSwxMCArMjc3MSwyMiBAQCBBZGRFdmVudFRvUGVuZGluZ05vdGlm aWVzKE5vdGlmaWNhdGlvbiAqbikKIAkJCQkJCSZoYXNoX2N0bCwKIAkJCQkJCUhBU0hfRUxF TSB8IEhBU0hfRlVOQ1RJT04gfCBIQVNIX0NPTVBBUkUgfCBIQVNIX0NPTlRFWFQpOwogCisJ CS8qIENyZWF0ZSB0aGUgY2hhbm5lbCBoYXNoIHRhYmxlICovCisJCW1lbXNldCgmaGFzaF9j dGwsIDAsIHNpemVvZihoYXNoX2N0bCkpOworCQloYXNoX2N0bC5rZXlzaXplID0gTkFNRURB VEFMRU47CisJCWhhc2hfY3RsLmVudHJ5c2l6ZSA9IHNpemVvZihzdHJ1Y3QgQ2hhbm5lbEhh c2gpOworCQloYXNoX2N0bC5oY3h0ID0gQ3VyVHJhbnNhY3Rpb25Db250ZXh0OworCQlwZW5k aW5nTm90aWZpZXMtPmNoYW5uZWxIYXNodGFiID0KKwkJCWhhc2hfY3JlYXRlKCJQZW5kaW5n IE5vdGlmeSBDaGFubmVscyIsCisJCQkJCQk2NEwsCisJCQkJCQkmaGFzaF9jdGwsCisJCQkJ CQlIQVNIX0VMRU0gfCBIQVNIX1NUUklOR1MgfCBIQVNIX0NPTlRFWFQpOworCiAJCS8qIElu c2VydCBhbGwgdGhlIGFscmVhZHktZXhpc3RpbmcgZXZlbnRzICovCiAJCWZvcmVhY2gobCwg cGVuZGluZ05vdGlmaWVzLT5ldmVudHMpCiAJCXsKIAkJCU5vdGlmaWNhdGlvbiAqb2xkbiA9 IChOb3RpZmljYXRpb24gKikgbGZpcnN0KGwpOworCQkJY2hhcgkgICAqY2hhbm5lbCA9IG9s ZG4tPmRhdGE7CiAJCQlib29sCQlmb3VuZDsKIAogCQkJKHZvaWQpIGhhc2hfc2VhcmNoKHBl bmRpbmdOb3RpZmllcy0+aGFzaHRhYiwKQEAgLTIzMjAsMjIgKzI3OTQsNDIgQEAgQWRkRXZl bnRUb1BlbmRpbmdOb3RpZmllcyhOb3RpZmljYXRpb24gKm4pCiAJCQkJCQkJICAgSEFTSF9F TlRFUiwKIAkJCQkJCQkgICAmZm91bmQpOwogCQkJQXNzZXJ0KCFmb3VuZCk7CisKKwkJCS8q IEluc2VydCBjaGFubmVsIGludG8gY2hhbm5lbEhhc2h0YWIgKi8KKwkJCSh2b2lkKSBoYXNo X3NlYXJjaChwZW5kaW5nTm90aWZpZXMtPmNoYW5uZWxIYXNodGFiLAorCQkJCQkJCSAgIGNo YW5uZWwsCisJCQkJCQkJICAgSEFTSF9FTlRFUiwKKwkJCQkJCQkgICAmZm91bmQpOworCQkJ LyogZm91bmQgbWF5IGJlIHRydWUgaWYgbXVsdGlwbGUgZXZlbnRzIG9uIHNhbWUgY2hhbm5l bCAqLwogCQl9CiAJfQogCiAJLyogQWRkIG5ldyBldmVudCB0byB0aGUgbGlzdCwgaW4gb3Jk ZXIgKi8KIAlwZW5kaW5nTm90aWZpZXMtPmV2ZW50cyA9IGxhcHBlbmQocGVuZGluZ05vdGlm aWVzLT5ldmVudHMsIG4pOwogCi0JLyogQWRkIGV2ZW50IHRvIHRoZSBoYXNoIHRhYmxlIGlm IG5lZWRlZCAqLworCS8qIEFkZCBldmVudCB0byB0aGUgaGFzaCB0YWJsZXMgaWYgbmVlZGVk ICovCiAJaWYgKHBlbmRpbmdOb3RpZmllcy0+aGFzaHRhYiAhPSBOVUxMKQogCXsKIAkJYm9v bAkJZm91bmQ7CiAKKwkJQXNzZXJ0KHBlbmRpbmdOb3RpZmllcy0+Y2hhbm5lbEhhc2h0YWIg IT0gTlVMTCk7CisKIAkJKHZvaWQpIGhhc2hfc2VhcmNoKHBlbmRpbmdOb3RpZmllcy0+aGFz aHRhYiwKIAkJCQkJCSAgICZuLAogCQkJCQkJICAgSEFTSF9FTlRFUiwKIAkJCQkJCSAgICZm b3VuZCk7CiAJCUFzc2VydCghZm91bmQpOworCisJCS8qIEFkZCBjaGFubmVsIHRvIGNoYW5u ZWxIYXNodGFiICovCisJCXsKKwkJCWNoYXIJICAgKmNoYW5uZWwgPSBuLT5kYXRhOworCisJ CQkodm9pZCkgaGFzaF9zZWFyY2gocGVuZGluZ05vdGlmaWVzLT5jaGFubmVsSGFzaHRhYiwK KwkJCQkJCQkgICBjaGFubmVsLAorCQkJCQkJCSAgIEhBU0hfRU5URVIsCisJCQkJCQkJICAg JmZvdW5kKTsKKwkJCS8qIGZvdW5kIG1heSBiZSB0cnVlIGlmIHdlIGFscmVhZHkgaGF2ZSBh biBldmVudCBvbiB0aGlzIGNoYW5uZWwgKi8KKwkJfQogCX0KIH0KIApAQCAtMjM3Myw3ICsy ODY3LDcgQEAgbm90aWZpY2F0aW9uX21hdGNoKGNvbnN0IHZvaWQgKmtleTEsIGNvbnN0IHZv aWQgKmtleTIsIFNpemUga2V5c2l6ZSkKIAlyZXR1cm4gMTsJCQkJCS8qIG5vdCBlcXVhbCAq LwogfQogCi0vKiBDbGVhciB0aGUgcGVuZGluZ0FjdGlvbnMgYW5kIHBlbmRpbmdOb3RpZmll cyBsaXN0cy4gKi8KKy8qIENsZWFyIHRoZSBwZW5kaW5nQWN0aW9ucywgcGVuZGluZ05vdGlm aWVzLCBhbmQgcGVuZGluZ05vdGlmeUNoYW5uZWxzIGxpc3RzLiAqLwogc3RhdGljIHZvaWQK IENsZWFyUGVuZGluZ0FjdGlvbnNBbmROb3RpZmllcyh2b2lkKQogewpAQCAtMjM4NSw2ICsy ODc5LDcgQEAgQ2xlYXJQZW5kaW5nQWN0aW9uc0FuZE5vdGlmaWVzKHZvaWQpCiAJICovCiAJ cGVuZGluZ0FjdGlvbnMgPSBOVUxMOwogCXBlbmRpbmdOb3RpZmllcyA9IE5VTEw7CisJcGVu ZGluZ05vdGlmeUNoYW5uZWxzID0gTklMOwogfQogCiAvKgpAQCAtMjM5NSwzICsyODkwLDE2 IEBAIGNoZWNrX25vdGlmeV9idWZmZXJzKGludCAqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1 Y1NvdXJjZSBzb3VyY2UpCiB7CiAJcmV0dXJuIGNoZWNrX3NscnVfYnVmZmVycygibm90aWZ5 X2J1ZmZlcnMiLCBuZXd2YWwpOwogfQorCisKKy8qCisgKiBDaGFubmVsSGFzaFByZXBhcmVL ZXkKKyAqCQlQcmVwYXJlIGEgY2hhbm5lbCBrZXkgZm9yIHVzZSBhcyBhIGhhc2gga2V5Lgor ICovCitzdGF0aWMgaW5saW5lIHZvaWQKK0NoYW5uZWxIYXNoUHJlcGFyZUtleShDaGFubmVs SGFzaEtleSAqa2V5LCBPaWQgZGJvaWQsIGNvbnN0IGNoYXIgKmNoYW5uZWwpCit7CisJbWVt c2V0KGtleSwgMCwgc2l6ZW9mKENoYW5uZWxIYXNoS2V5KSk7CisJa2V5LT5kYm9pZCA9IGRi b2lkOworCXN0cmxjcHkoa2V5LT5jaGFubmVsLCBjaGFubmVsLCBOQU1FREFUQUxFTik7Cit9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25h bWVzLnR4dCBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMu dHh0CmluZGV4IDc1NTNmNmVhY2VmLi5hNGZhZGJkMDc2NyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKQEAgLTM2Niw2ICsz NjYsNyBAQCBTdWJ0cmFuc0J1ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9uIGEgc3ViLXRyYW5z YWN0aW9uIFNMUlUgYnVmZmVyLiIKIE11bHRpWGFjdE9mZnNldEJ1ZmZlcgkiV2FpdGluZyBm b3IgSS9PIG9uIGEgbXVsdGl4YWN0IG9mZnNldCBTTFJVIGJ1ZmZlci4iCiBNdWx0aVhhY3RN ZW1iZXJCdWZmZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBhIG11bHRpeGFjdCBtZW1iZXIgU0xS VSBidWZmZXIuIgogTm90aWZ5QnVmZmVyCSJXYWl0aW5nIGZvciBJL08gb24gYSA8Y29tbWFu ZD5OT1RJRlk8L2NvbW1hbmQ+IG1lc3NhZ2UgU0xSVSBidWZmZXIuIgorTm90aWZ5Q2hhbm5l bEhhc2gJIldhaXRpbmcgdG8gYWNjZXNzIHRoZSA8Y29tbWFuZD5OT1RJRlk8L2NvbW1hbmQ+ IGNoYW5uZWwgaGFzaCB0YWJsZS4iCiBTZXJpYWxCdWZmZXIJIldhaXRpbmcgZm9yIEkvTyBv biBhIHNlcmlhbGl6YWJsZSB0cmFuc2FjdGlvbiBjb25mbGljdCBTTFJVIGJ1ZmZlci4iCiBX QUxJbnNlcnQJIldhaXRpbmcgdG8gaW5zZXJ0IFdBTCBkYXRhIGludG8gYSBtZW1vcnkgYnVm ZmVyLiIKIEJ1ZmZlckNvbnRlbnQJIldhaXRpbmcgdG8gYWNjZXNzIGEgZGF0YSBwYWdlIGlu IG1lbW9yeS4iCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3Qu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oCmluZGV4IDA2YTFmZmQ0YjA4 Li4yNzY4ZGRmNDQxNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2ts aXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmgKQEAgLTEwMCw2 ICsxMDAsNyBAQCBQR19MV0xPQ0tUUkFOQ0hFKFNVQlRSQU5TX0JVRkZFUiwgU3VidHJhbnNC dWZmZXIpCiBQR19MV0xPQ0tUUkFOQ0hFKE1VTFRJWEFDVE9GRlNFVF9CVUZGRVIsIE11bHRp WGFjdE9mZnNldEJ1ZmZlcikKIFBHX0xXTE9DS1RSQU5DSEUoTVVMVElYQUNUTUVNQkVSX0JV RkZFUiwgTXVsdGlYYWN0TWVtYmVyQnVmZmVyKQogUEdfTFdMT0NLVFJBTkNIRShOT1RJRllf QlVGRkVSLCBOb3RpZnlCdWZmZXIpCitQR19MV0xPQ0tUUkFOQ0hFKE5PVElGWV9DSEFOTkVM X0hBU0gsIE5vdGlmeUNoYW5uZWxIYXNoKQogUEdfTFdMT0NLVFJBTkNIRShTRVJJQUxfQlVG RkVSLCBTZXJpYWxCdWZmZXIpCiBQR19MV0xPQ0tUUkFOQ0hFKFdBTF9JTlNFUlQsIFdBTElu c2VydCkKIFBHX0xXTE9DS1RSQU5DSEUoQlVGRkVSX0NPTlRFTlQsIEJ1ZmZlckNvbnRlbnQp CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDAxOGI1OTE5Y2Y2Li5iODQ0Mzcy NTM5OCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysr IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTQxMiw2ICs0MTIsOCBA QCBDYXRhbG9nSWRNYXBFbnRyeQogQ2F0YWxvZ0luZGV4U3RhdGUKIENoYW5nZVZhck5vZGVz X2NhbGxiYWNrCiBDaGFuZ2VWYXJOb2Rlc19jb250ZXh0CitDaGFubmVsRW50cnkKK0NoYW5u ZWxIYXNoS2V5CiBDaGVja1BvaW50CiBDaGVja1BvaW50U3RtdAogQ2hlY2twb2ludFN0YXRz RGF0YQotLSAKMi41MC4xCgo= --b4df19c5dfde48148cf7efd56a3d1057--