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 1v6VCr-005ahX-CB for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Oct 2025 14:31:53 +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 1v6VCp-00AkoO-6U for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Oct 2025 14:31:52 +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 1v6VCo-00AkoG-Hu for pgsql-hackers@lists.postgresql.org; Wed, 08 Oct 2025 14:31:51 +0000 Received: from flow-a7-smtp.messagingengine.com ([103.168.172.142]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1v6VCm-0013A0-2D for pgsql-hackers@postgresql.org; Wed, 08 Oct 2025 14:31:51 +0000 Received: from phl-compute-04.internal (phl-compute-04.internal [10.202.2.44]) by mailflow.phl.internal (Postfix) with ESMTP id C61E613800C7; Wed, 8 Oct 2025 10:31:45 -0400 (EDT) Received: from phl-imap-03 ([10.202.2.93]) by phl-compute-04.internal (MEProxy); Wed, 08 Oct 2025 10:31:45 -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=1759933905; x=1759941105; bh=Qc0H83Dri9 pfgUi7NGBPkga+IGDpgMe8fyx+qWQFrqs=; b=qebdUoM79PJPeF0hlVb1G/G8UA TD9NMFeSGlVgvV81h2DDdDehD+HZ6gdHhz6Kwi1meQ4aio4ojksNryaY6qDrFJ3J l5YRchSm6/MlMovUozfQVmgbwd2wgoZlwsTH1ldTs0u8D4dlak6NwdaWXrkZIcbi V9Dx1Q1V+OHMgy6o29w1Ila9qAs/MnxEQVd0wSP/n78LSrzpoxnGFIB97knA4yLS /MMZ9DXnJo2gZejvDc9jH6AY7oBnyJDmIP6Xj/80PUq3tjwtW1fW07YXNM27TbuP TvdvP42lQ/x2wFPnDrSgRnYpIsrPZ01VthVsufo+kYevx8WoTVhNi3VbkITw== 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= 1759933905; x=1759941105; bh=Qc0H83Dri9pfgUi7NGBPkga+IGDpgMe8fyx +qWQFrqs=; b=ueuYDpPYpiqkW5I+UJdhfPPMxftpoaUgjNpO2K0SnCQvhEjPoSC QTbjpMmFdq6u6j8U8OZnV0UDrUf0TsG6JoUgPiPzQLIRYWNYkxvyE6dZ30vDF6hH k2N07P8MCs1RWZbrsYxBTKAPEkoyraGEReizrRrFCTXw96VmWpPG2Hi9dkPvTmHT XQ9jbS/4K52i/KRiPS+NpA+aHBXovpguypU3ntrD2m2CntC0RtpDvc9Su8ao6Avf NyV3A4vuWhIC6csLx3Fe7zCeH7YEFVtp1E0pignkwsfgQvFbpPKyh1hLyhCUxBTn OW9+Sf0B1fE26zgXd85B2OIvxolYiXlt9mQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddutdefheegucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpefoggffhffvvefkjghfufgtsehmtderre ertddtnecuhfhrohhmpedflfhovghlucflrggtohgsshhonhdfuceojhhovghlsegtohhm phhilhgvrhdrohhrgheqnecuggftrfgrthhtvghrnhepfffgleffffdvhefhieegfeeije dujedvieeuveeugefgveeukeevieethefhteeinecuvehluhhsthgvrhfuihiivgeptden ucfrrghrrghmpehmrghilhhfrhhomhepjhhovghlsegtohhmphhilhgvrhdrohhrghdpnh gspghrtghpthhtohepfedpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepmhgrthhh vghushhsshhilhhvleejsehgmhgrihhlrdgtohhmpdhrtghpthhtohepphhgshhqlhdqhh grtghkvghrshesphhoshhtghhrvghsqhhlrdhorhhgpdhrtghpthhtohepthhglhesshhs shdrphhghhdrphgrrdhush X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id 5022018E006C; Wed, 8 Oct 2025 10:31:45 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: AZ7XRsRLdGms Date: Wed, 08 Oct 2025 16:31:24 +0200 From: "Joel Jacobson" To: "Tom Lane" Cc: "Matheus Alcantara" , pgsql-hackers Message-Id: <474efa78-337c-41cd-a73a-f845a0115109@app.fastmail.com> In-Reply-To: <2531672.1759868124@sss.pgh.pa.us> 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> Subject: Re: Optimize LISTEN/NOTIFY Content-Type: multipart/mixed; boundary=ecbb2d09395740c0a1e5701b4a555ea9 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --ecbb2d09395740c0a1e5701b4a555ea9 Content-Type: text/plain Content-Transfer-Encoding: 7bit On Tue, Oct 7, 2025, at 22:15, Tom Lane wrote: > "Joel Jacobson" writes: >> Ops, I see I got the list_member() code wrong. I've changed it to now >> create String nodes, and then use strVal(). > > Might be better to revert to the previous coding. Using String > nodes is going to roughly double the space eaten for the list, > and it seems like it's not buying you a lot. > >> I also changed back to dshash_find(..., false) in SignalBackends(), >> since that makes more sense to me, since we're not modifying entry. > > Agreed. > > I did a code coverage run and it seems like things are in pretty > good shape already. async.c is about 88% covered and a lot of the > omissions are either Trace_notify or unreached error reports, which > I'm not especially concerned about. The visible coverage gaps are: > > 1. asyncQueueFillWarning. This wasn't covered before either, because > it doesn't seem very practical to exercise it in an everyday > regression test. Since your patch doesn't touch that code nor the > queue contents, I'm not concerned here. I agree. > 2. AtSubCommit_Notify's reparenting stanza. This is a pre-existing > omission too, but maybe worth doing something about? > > 3. AtSubAbort_Notify's pendingActions cleanup loop; same comments. > > 4. notification_match is not called at all. Again, pre-existing > coverage gap. I've added test coverage for all three items above. > 5. ChannelHashAddListener: "already registered" case is not reached, > which surprises me a bit, and neither is the "grow the array" stanza. > Since this is new code it might be worth adding coverage. I've added a test for the "grow the array" stanza. The "already registered" case seems impossible to reach, since the caller, Exec_ListenCommit, returns early if IsListeningOn. Patches: 0001-optimize_listen_notify-v12.patch: Improve LISTEN/NOTIFY test coverage 0002-optimize_listen_notify-v12.patch: Optimize LISTEN/NOTIFY with channel-specific listener tracking I split this into two patches, to make it easier to verify that the second patch doesn't affect the tests added by the first patch. The 0001 patch also includes the "grow the array" test, which is pointless without the 0002 patch, but felt better to add it first anyway. I've also made changes in v12 based on feedback from Chao Li, to which I will reply to shortly. /Joel --ecbb2d09395740c0a1e5701b4a555ea9 Content-Disposition: attachment; filename*0="0001-optimize_listen_notify-v12.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0001-optimize=5Flisten=5Fnotify-v12.patch?=" Content-Transfer-Encoding: base64 RnJvbSA5NjBmOGFiYTdkNzZjMzViYTQwNDlmNmU5NGExMWE0MTE4ZTVhNDM4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogV2VkLCA4IE9jdCAyMDI1IDA5OjMwOjU0ICswMjAwClN1YmplY3Q6IFtQQVRD SCAxLzJdIEltcHJvdmUgTElTVEVOL05PVElGWSB0ZXN0IGNvdmVyYWdlCgpUaGlzIGFkZHMg aXNvbGF0aW9uIHRlc3RzIHRvIGNvdmVyIHByZXZpb3VzbHkgdW50ZXN0ZWQgY29kZSBwYXRo czoKCiogQ2hlY2sgc2ltcGxlIE5PVElGWSByZXBhcmVudGluZyB3aGVuIHBhcmVudCBoYXMg bm8gYWN0aW9uCiogQ2hlY2sgTElTVEVOIHJlcGFyZW50aW5nIGluIHN1YnRyYW5zYWN0aW9u CiogQ2hlY2sgTElTVEVOIG1lcmdlIHBhdGggd2hlbiBib3RoIG91dGVyIGFuZCBpbm5lciB0 cmFuc2FjdGlvbnMgaGF2ZSBhY3Rpb25zCiogQ2hlY2sgTElTVEVOIGFib3J0IHBhdGggKFJP TExCQUNLIFRPIFNBVkVQT0lOVCBkaXNjYXJkcyBwZW5kaW5nIGFjdGlvbnMpCiogQ2hlY2sg bm90aWZpY2F0aW9uX21hdGNoIGZ1bmN0aW9uICh0cmlnZ2VyZWQgYnkgaGFzaCB0YWJsZSBk dXBsaWNhdGUgZGV0ZWN0aW9uKQoKVGhpcyBhbHNvIGFkZHMgYSB0ZXN0IHRvIHByZXBhcmUg Zm9yIHRoZSBuZXh0IHBhdGNoOgoKKiBDaGVjayBDaGFubmVsSGFzaEFkZExpc3RlbmVyIGFy cmF5IGdyb3d0aAotLS0KIHNyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9hc3luYy1ub3Rp Znkub3V0IHwgMTAzICsrKysrKysrKysrKysrKysrKy0KIHNyYy90ZXN0L2lzb2xhdGlvbi9z cGVjcy9hc3luYy1ub3RpZnkuc3BlYyAgIHwgIDUyICsrKysrKysrKysKIDIgZmlsZXMgY2hh bmdlZCwgMTU0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvYXN5bmMtbm90aWZ5Lm91dCBiL3NyYy90ZXN0 L2lzb2xhdGlvbi9leHBlY3RlZC9hc3luYy1ub3RpZnkub3V0CmluZGV4IDU1NmUxODA1ODkz Li45YzE5ODQzZDJkNyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVk L2FzeW5jLW5vdGlmeS5vdXQKKysrIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL2Fz eW5jLW5vdGlmeS5vdXQKQEAgLTEsNCArMSw0IEBACi1QYXJzZWQgdGVzdCBzcGVjIHdpdGgg MyBzZXNzaW9ucworUGFyc2VkIHRlc3Qgc3BlYyB3aXRoIDUgc2Vzc2lvbnMKIAogc3RhcnRp bmcgcGVybXV0YXRpb246IGxpc3RlbmMgbm90aWZ5MSBub3RpZnkyIG5vdGlmeTMgbm90aWZ5 Zgogc3RlcCBsaXN0ZW5jOiBMSVNURU4gYzE7IExJU1RFTiBjMjsKQEAgLTQ3LDYgKzQ3LDEw NSBAQCBub3RpZmllcjogTk9USUZZICJjMiIgd2l0aCBwYXlsb2FkICJwYXlsb2FkIiBmcm9t IG5vdGlmaWVyCiBub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJwYXlsb2Fk cyIgZnJvbSBub3RpZmllcgogbm90aWZpZXI6IE5PVElGWSAiYzIiIHdpdGggcGF5bG9hZCAi cGF5bG9hZHMiIGZyb20gbm90aWZpZXIKIAorc3RhcnRpbmcgcGVybXV0YXRpb246IGxpc3Rl bmMgbm90aWZ5c19zaW1wbGUKK3N0ZXAgbGlzdGVuYzogTElTVEVOIGMxOyBMSVNURU4gYzI7 CitzdGVwIG5vdGlmeXNfc2ltcGxlOiAKKwlCRUdJTjsKKwlTQVZFUE9JTlQgczE7CisJTk9U SUZZIGMxLCAnc2ltcGxlMSc7CisJTk9USUZZIGMyLCAnc2ltcGxlMic7CisJUkVMRUFTRSBT QVZFUE9JTlQgczE7CisJQ09NTUlUOworCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBw YXlsb2FkICJzaW1wbGUxIiBmcm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMiIg d2l0aCBwYXlsb2FkICJzaW1wbGUyIiBmcm9tIG5vdGlmaWVyCisKK3N0YXJ0aW5nIHBlcm11 dGF0aW9uOiBsc2JlZ2luIGxzc2F2ZXBvaW50IGxzbGlzdGVuIGxzcmVsZWFzZSBsc2NvbW1p dCBsc25vdGlmeQorc3RlcCBsc2JlZ2luOiBCRUdJTjsKK3N0ZXAgbHNzYXZlcG9pbnQ6IFNB VkVQT0lOVCBzMTsKK3N0ZXAgbHNsaXN0ZW46IExJU1RFTiBjMTsgTElTVEVOIGMyOworc3Rl cCBsc3JlbGVhc2U6IFJFTEVBU0UgU0FWRVBPSU5UIHMxOworc3RlcCBsc2NvbW1pdDogQ09N TUlUOworc3RlcCBsc25vdGlmeTogTk9USUZZIGMxLCAnc3VieGFjdF90ZXN0JzsKK2xpc3Rl bl9zdWJ4YWN0OiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgInN1YnhhY3RfdGVzdCIgZnJv bSBsaXN0ZW5fc3VieGFjdAorCitzdGFydGluZyBwZXJtdXRhdGlvbjogbHNiZWdpbiBsc2xp c3Rlbl9vdXRlciBsc3NhdmVwb2ludCBsc2xpc3RlbiBsc3JlbGVhc2UgbHNjb21taXQgbHNu b3RpZnkKK3N0ZXAgbHNiZWdpbjogQkVHSU47CitzdGVwIGxzbGlzdGVuX291dGVyOiBMSVNU RU4gYzM7CitzdGVwIGxzc2F2ZXBvaW50OiBTQVZFUE9JTlQgczE7CitzdGVwIGxzbGlzdGVu OiBMSVNURU4gYzE7IExJU1RFTiBjMjsKK3N0ZXAgbHNyZWxlYXNlOiBSRUxFQVNFIFNBVkVQ T0lOVCBzMTsKK3N0ZXAgbHNjb21taXQ6IENPTU1JVDsKK3N0ZXAgbHNub3RpZnk6IE5PVElG WSBjMSwgJ3N1YnhhY3RfdGVzdCc7CitsaXN0ZW5fc3VieGFjdDogTk9USUZZICJjMSIgd2l0 aCBwYXlsb2FkICJzdWJ4YWN0X3Rlc3QiIGZyb20gbGlzdGVuX3N1YnhhY3QKKworc3RhcnRp bmcgcGVybXV0YXRpb246IGxzYmVnaW4gbHNzYXZlcG9pbnQgbHNsaXN0ZW4gbHNyb2xsYmFj ayBsc2NvbW1pdCBsc25vdGlmeV9jaGVjaworc3RlcCBsc2JlZ2luOiBCRUdJTjsKK3N0ZXAg bHNzYXZlcG9pbnQ6IFNBVkVQT0lOVCBzMTsKK3N0ZXAgbHNsaXN0ZW46IExJU1RFTiBjMTsg TElTVEVOIGMyOworc3RlcCBsc3JvbGxiYWNrOiBST0xMQkFDSyBUTyBTQVZFUE9JTlQgczE7 CitzdGVwIGxzY29tbWl0OiBDT01NSVQ7CitzdGVwIGxzbm90aWZ5X2NoZWNrOiBOT1RJRlkg YzEsICdzaG91bGRfbm90X3JlY2VpdmUnOworCitzdGFydGluZyBwZXJtdXRhdGlvbjogbGlz dGVuYyBub3RpZnlfbWFueV93aXRoX2R1cAorc3RlcCBsaXN0ZW5jOiBMSVNURU4gYzE7IExJ U1RFTiBjMjsKK3N0ZXAgbm90aWZ5X21hbnlfd2l0aF9kdXA6IAorCUJFR0lOOworCVNFTEVD VCBwZ19ub3RpZnkoJ2MxJywgJ21zZycgfHwgczo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwgMTcpIHM7CisJU0VMRUNUIHBnX25vdGlmeSgnYzEnLCAnbXNnMScpOworCUNPTU1J VDsKKworcGdfbm90aWZ5CistLS0tLS0tLS0KKyAgICAgICAgIAorICAgICAgICAgCisgICAg ICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAorICAg ICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAg ICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCiso MTcgcm93cykKKworcGdfbm90aWZ5CistLS0tLS0tLS0KKyAgICAgICAgIAorKDEgcm93KQor Citub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2cxIiBmcm9tIG5vdGlm aWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2cyIiBmcm9tIG5v dGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2czIiBmcm9t IG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2c0IiBm cm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2c1 IiBmcm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJt c2c2IiBmcm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2Fk ICJtc2c3IiBmcm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXls b2FkICJtc2c4IiBmcm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBw YXlsb2FkICJtc2c5IiBmcm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0 aCBwYXlsb2FkICJtc2cxMCIgZnJvbSBub3RpZmllcgorbm90aWZpZXI6IE5PVElGWSAiYzEi IHdpdGggcGF5bG9hZCAibXNnMTEiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkg ImMxIiB3aXRoIHBheWxvYWQgIm1zZzEyIiBmcm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9U SUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2cxMyIgZnJvbSBub3RpZmllcgorbm90aWZpZXI6 IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAibXNnMTQiIGZyb20gbm90aWZpZXIKK25vdGlm aWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzE1IiBmcm9tIG5vdGlmaWVyCitu b3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2cxNiIgZnJvbSBub3RpZmll cgorbm90aWZpZXI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAibXNnMTciIGZyb20gbm90 aWZpZXIKKworc3RhcnRpbmcgcGVybXV0YXRpb246IGxpc3RlbmMgbGxpc3RlbiBsMmxpc3Rl biBsM2xpc3RlbiBsc2xpc3Rlbgorc3RlcCBsaXN0ZW5jOiBMSVNURU4gYzE7IExJU1RFTiBj MjsKK3N0ZXAgbGxpc3RlbjogTElTVEVOIGMxOyBMSVNURU4gYzI7CitzdGVwIGwybGlzdGVu OiBMSVNURU4gYzE7CitzdGVwIGwzbGlzdGVuOiBMSVNURU4gYzE7CitzdGVwIGxzbGlzdGVu OiBMSVNURU4gYzE7IExJU1RFTiBjMjsKKwogc3RhcnRpbmcgcGVybXV0YXRpb246IGxsaXN0 ZW4gbm90aWZ5MSBub3RpZnkyIG5vdGlmeTMgbm90aWZ5ZiBsY2hlY2sKIHN0ZXAgbGxpc3Rl bjogTElTVEVOIGMxOyBMSVNURU4gYzI7CiBzdGVwIG5vdGlmeTE6IE5PVElGWSBjMTsKQEAg LTk1LDYgKzE5NCw4IEBAIGxpc3RlbmVyOiBOT1RJRlkgImMyIiB3aXRoIHBheWxvYWQgIiIg ZnJvbSBub3RpZmllcgogCiBzdGFydGluZyBwZXJtdXRhdGlvbjogbDJsaXN0ZW4gbDJiZWdp biBub3RpZnkxIGxiZWdpbnMgbGxpc3RlbiBsY29tbWl0IGwyY29tbWl0IGwyc3RvcAogc3Rl cCBsMmxpc3RlbjogTElTVEVOIGMxOworbGlzdGVuZXIyOiBOT1RJRlkgImMxIiB3aXRoIHBh eWxvYWQgIiIgZnJvbSBub3RpZmllcgorbGlzdGVuZXIyOiBOT1RJRlkgImMxIiB3aXRoIHBh eWxvYWQgIiIgZnJvbSBub3RpZmllcgogc3RlcCBsMmJlZ2luOiBCRUdJTjsKIHN0ZXAgbm90 aWZ5MTogTk9USUZZIGMxOwogc3RlcCBsYmVnaW5zOiBCRUdJTiBJU09MQVRJT04gTEVWRUwg U0VSSUFMSVpBQkxFOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2Fz eW5jLW5vdGlmeS5zcGVjIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2FzeW5jLW5vdGlm eS5zcGVjCmluZGV4IDBiOGNmZDkxMDgzLi45NDJiMDlkNTczNSAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2FzeW5jLW5vdGlmeS5zcGVjCisrKyBiL3NyYy90ZXN0 L2lzb2xhdGlvbi9zcGVjcy9hc3luYy1ub3RpZnkuc3BlYwpAQCAtMzEsNiArMzEsMjAgQEAg c3RlcCBub3RpZnlzMQl7CiAJUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIHMyOwogCUNPTU1JVDsK IH0KK3N0ZXAgbm90aWZ5c19zaW1wbGUJeworCUJFR0lOOworCVNBVkVQT0lOVCBzMTsKKwlO T1RJRlkgYzEsICdzaW1wbGUxJzsKKwlOT1RJRlkgYzIsICdzaW1wbGUyJzsKKwlSRUxFQVNF IFNBVkVQT0lOVCBzMTsKKwlDT01NSVQ7Cit9CitzdGVwIG5vdGlmeV9tYW55X3dpdGhfZHVw CXsKKwlCRUdJTjsKKwlTRUxFQ1QgcGdfbm90aWZ5KCdjMScsICdtc2cnIHx8IHM6OnRleHQp IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDE3KSBzOworCVNFTEVDVCBwZ19ub3RpZnkoJ2Mx JywgJ21zZzEnKTsKKwlDT01NSVQ7Cit9CiBzdGVwIHVzYWdlCQl7IFNFTEVDVCBwZ19ub3Rp ZmljYXRpb25fcXVldWVfdXNhZ2UoKSA+IDAgQVMgbm9uemVybzsgfQogc3RlcCBiaWdub3Rp ZnkJeyBTRUxFQ1QgY291bnQocGdfbm90aWZ5KCdjMScsIHM6OnRleHQpKSBGUk9NIGdlbmVy YXRlX3NlcmllcygxLCAxMDAwKSBzOyB9CiB0ZWFyZG93bgkJeyBVTkxJU1RFTiAqOyB9CkBA IC01Myw2ICs2NywyNiBAQCBzdGVwIGwyYmVnaW4JeyBCRUdJTjsgfQogc3RlcCBsMmNvbW1p dAl7IENPTU1JVDsgfQogc3RlcCBsMnN0b3AJCXsgVU5MSVNURU4gKjsgfQogCisjIFRoaXJk IGxpc3RlbmVyIHNlc3Npb24gZm9yIHRlc3RpbmcgYXJyYXkgZ3Jvd3RoLgorCitzZXNzaW9u IGxpc3RlbmVyMworc3RlcCBsM2xpc3Rlbgl7IExJU1RFTiBjMTsgfQordGVhcmRvd24JCXsg VU5MSVNURU4gKjsgfQorCisjIFNlc3Npb24gZm9yIHRlc3RpbmcgTElTVEVOIGluIHN1YnRy YW5zYWN0aW9uIHdpdGggc2VwYXJhdGUgc3RlcHMuCisKK3Nlc3Npb24gbGlzdGVuX3N1Ynhh Y3QKK3N0ZXAgbHNiZWdpbgl7IEJFR0lOOyB9CitzdGVwIGxzbGlzdGVuX291dGVyCXsgTElT VEVOIGMzOyB9CitzdGVwIGxzc2F2ZXBvaW50CXsgU0FWRVBPSU5UIHMxOyB9CitzdGVwIGxz bGlzdGVuCXsgTElTVEVOIGMxOyBMSVNURU4gYzI7IH0KK3N0ZXAgbHNyZWxlYXNlCXsgUkVM RUFTRSBTQVZFUE9JTlQgczE7IH0KK3N0ZXAgbHNyb2xsYmFjawl7IFJPTExCQUNLIFRPIFNB VkVQT0lOVCBzMTsgfQorc3RlcCBsc2NvbW1pdAl7IENPTU1JVDsgfQorc3RlcCBsc25vdGlm eQl7IE5PVElGWSBjMSwgJ3N1YnhhY3RfdGVzdCc7IH0KK3N0ZXAgbHNub3RpZnlfY2hlY2sJ eyBOT1RJRlkgYzEsICdzaG91bGRfbm90X3JlY2VpdmUnOyB9Cit0ZWFyZG93bgkJeyBVTkxJ U1RFTiAqOyB9CisKIAogIyBUcml2aWFsIGNhc2VzLgogcGVybXV0YXRpb24gbGlzdGVuYyBu b3RpZnkxIG5vdGlmeTIgbm90aWZ5MyBub3RpZnlmCkBAIC02MCw2ICs5NCwyNCBAQCBwZXJt dXRhdGlvbiBsaXN0ZW5jIG5vdGlmeTEgbm90aWZ5MiBub3RpZnkzIG5vdGlmeWYKICMgQ2hl Y2sgc2ltcGxlIGFuZCBsZXNzLXNpbXBsZSBkZWR1cGxpY2F0aW9uLgogcGVybXV0YXRpb24g bGlzdGVuYyBub3RpZnlkMSBub3RpZnlkMiBub3RpZnlzMQogCisjIENoZWNrIHNpbXBsZSBO T1RJRlkgcmVwYXJlbnRpbmcgd2hlbiBwYXJlbnQgaGFzIG5vIGFjdGlvbi4KK3Blcm11dGF0 aW9uIGxpc3RlbmMgbm90aWZ5c19zaW1wbGUKKworIyBDaGVjayBMSVNURU4gcmVwYXJlbnRp bmcgaW4gc3VidHJhbnNhY3Rpb24uCitwZXJtdXRhdGlvbiBsc2JlZ2luIGxzc2F2ZXBvaW50 IGxzbGlzdGVuIGxzcmVsZWFzZSBsc2NvbW1pdCBsc25vdGlmeQorCisjIENoZWNrIExJU1RF TiBtZXJnZSBwYXRoIHdoZW4gYm90aCBvdXRlciBhbmQgaW5uZXIgdHJhbnNhY3Rpb25zIGhh dmUgYWN0aW9ucy4KK3Blcm11dGF0aW9uIGxzYmVnaW4gbHNsaXN0ZW5fb3V0ZXIgbHNzYXZl cG9pbnQgbHNsaXN0ZW4gbHNyZWxlYXNlIGxzY29tbWl0IGxzbm90aWZ5CisKKyMgQ2hlY2sg TElTVEVOIGFib3J0IHBhdGggKFJPTExCQUNLIFRPIFNBVkVQT0lOVCBkaXNjYXJkcyBwZW5k aW5nIGFjdGlvbnMpLgorcGVybXV0YXRpb24gbHNiZWdpbiBsc3NhdmVwb2ludCBsc2xpc3Rl biBsc3JvbGxiYWNrIGxzY29tbWl0IGxzbm90aWZ5X2NoZWNrCisKKyMgQ2hlY2sgbm90aWZp Y2F0aW9uX21hdGNoIGZ1bmN0aW9uICh0cmlnZ2VyZWQgYnkgaGFzaCB0YWJsZSBkdXBsaWNh dGUgZGV0ZWN0aW9uKS4KK3Blcm11dGF0aW9uIGxpc3RlbmMgbm90aWZ5X21hbnlfd2l0aF9k dXAKKworIyBDaGVjayBDaGFubmVsSGFzaEFkZExpc3RlbmVyIGFycmF5IGdyb3d0aC4KK3Bl cm11dGF0aW9uIGxpc3RlbmMgbGxpc3RlbiBsMmxpc3RlbiBsM2xpc3RlbiBsc2xpc3Rlbgor CiAjIENyb3NzLWJhY2tlbmQgbm90aWZpY2F0aW9uIGRlbGl2ZXJ5LiAgV2UgdXNlIGEgInNl bGVjdCAxIiB0byBmb3JjZSB0aGUKICMgbGlzdGVuZXIgc2Vzc2lvbiB0byBjaGVjayBmb3Ig bm90aWZpZXMuICBJbiBwcmluY2lwbGUgd2UgY291bGQganVzdCB3YWl0CiAjIGZvciBkZWxp dmVyeSwgYnV0IHRoYXQgd291bGQgcmVxdWlyZSBleHRyYSBzdXBwb3J0IGluIGlzb2xhdGlv bnRlc3RlcgotLSAKMi41MC4xCgo= --ecbb2d09395740c0a1e5701b4a555ea9 Content-Disposition: attachment; filename*0="0002-optimize_listen_notify-v12.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0002-optimize=5Flisten=5Fnotify-v12.patch?=" Content-Transfer-Encoding: base64 RnJvbSBjZDQ4M2QwNjkwN2IwODc5ZTk2OTgzZjI2NjNiM2I1Yjc1YTc5ZWI1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogVHVlLCA3IE9jdCAyMDI1IDIwOjU2OjQ3ICswMjAwClN1YmplY3Q6IFtQQVRD SCAyLzJdIE9wdGltaXplIExJU1RFTi9OT1RJRlkgd2l0aCBjaGFubmVsLXNwZWNpZmljIGxp c3RlbmVyCiB0cmFja2luZwoKQ3VycmVudGx5LCBpZGxlIGxpc3RlbmluZyBiYWNrZW5kcyBj YXVzZSBhIGRyYW1hdGljIHNsb3dkb3duIGR1ZSB0bwpjb250ZXh0IHN3aXRjaGluZyB3aGVu IHRoZXkgYXJlIHNpZ25hbGVkIGFuZCB3YWtlIHVwLiBUaGlzIGlzIHdhc3RlZnVsCndoZW4g dGhleSBhcmUgbm90IGxpc3RlbmluZyB0byB0aGUgY2hhbm5lbCBiZWluZyBub3RpZmllZC4K Ckp1c3QgMTAgZXh0cmEgaWRsZSBsaXN0ZW5pbmcgY29ubmVjdGlvbnMgY2F1c2UgYSBzbG93 ZG93biBmcm9tIDg3MDAgVFBTCnRvIDYxMDAgVFBTLCAxMDAgZXh0cmEgY2F1c2UgaXQgdG8g ZHJvcCB0byAyMDAwIFRQUywgYW5kIGF0IDEwMDAgZXh0cmEKaXQgZmFsbHMgdG8gMjUwIFRQ Uy4KClRoaXMgcGF0Y2ggaW50cm9kdWNlcyB0YXJnZXRlZCBzaWduYWxpbmcgZm9yIExJU1RF Ti9OT1RJRlksIGltcHJvdmluZwpzY2FsYWJpbGl0eSBpbiB3b3JrbG9hZHMgd2l0aCBtYW55 IGlkbGUgbGlzdGVuZXJzLgoKQSBkeW5hbWljIHNoYXJlZCBoYXNoIHRhYmxlIG5vdyB0cmFj a3Mgd2hpY2ggYmFja2VuZHMgbGlzdGVuIG9uIGVhY2gKKGRhdGFiYXNlLCBjaGFubmVsKSBw YWlyLCB3aGljaCBTaWduYWxCYWNrZW5kcygpIHVzZXMgdG8gcGVyZm9ybQp0YXJnZXRlZCBz aWduYWxpbmcuICBJbiBhZGRpdGlvbiwgaXQgc3RhZ2dlcnMgd2FrZXVwcyBieSBzaWduYWxp bmcgb25lCmJhY2tlbmQgYXQgdGhlIGdsb2JhbCB0YWlsIHRvIGhlbHAgaXQgYWR2YW5jZSBn cmFkdWFsbHksIGFuZCBmb3JjZXMgYW55CmV4Y2Vzc2l2ZWx5IGxhZ2dpbmcgYmFja2VuZHMg dG8gY2F0Y2ggdXAuICBBIHBlci1iYWNrZW5kIHdha2V1cF9wZW5kaW5nCmZsYWcgYXZvaWRz IHJlZHVuZGFudCBzaWduYWxzLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMg ICAgICAgICAgICAgICAgICB8IDQ3MCArKysrKysrKysrKysrKysrLS0KIC4uLi91dGlscy9h Y3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dCAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVk ZS9zdG9yYWdlL2x3bG9ja2xpc3QuaCAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAyICsKIDQgZmlsZXMg Y2hhbmdlZCwgNDM2IGluc2VydGlvbnMoKyksIDM4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9hc3luYy5jCmluZGV4IDRiZDM3ZDViZWI1Li5lZmEyNTc0MGM5YyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9hc3luYy5jCkBAIC0yNCw4ICsyNCwxMCBAQAogICoJICBBbGwgbm90aWZpY2F0aW9uIG1l c3NhZ2VzIGFyZSBwbGFjZWQgaW4gdGhlIHF1ZXVlIGFuZCBsYXRlciByZWFkIG91dAogICoJ ICBieSBsaXN0ZW5pbmcgYmFja2VuZHMuCiAgKgotICoJICBUaGVyZSBpcyBubyBjZW50cmFs IGtub3dsZWRnZSBvZiB3aGljaCBiYWNrZW5kIGxpc3RlbnMgb24gd2hpY2ggY2hhbm5lbDsK LSAqCSAgZXZlcnkgYmFja2VuZCBoYXMgaXRzIG93biBsaXN0IG9mIGludGVyZXN0aW5nIGNo YW5uZWxzLgorICoJICBXZSBhbHNvIG1haW50YWluIGEgZHluYW1pYyBzaGFyZWQgaGFzaCB0 YWJsZSAoZHNoYXNoKSB0aGF0IG1hcHMgY2hhbm5lbAorICoJICBuYW1lcyB0byB0aGUgc2V0 IG9mIGJhY2tlbmRzIGxpc3RlbmluZyBvbiBlYWNoIGNoYW5uZWwuIFRoaXMgdGFibGUgaXMK KyAqCSAgY3JlYXRlZCBsYXppbHkgb24gdGhlIGZpcnN0IExJU1RFTiBjb21tYW5kIGFuZCBn cm93cyBkeW5hbWljYWxseSBhcworICoJICBuZWVkZWQuCiAgKgogICoJICBBbHRob3VnaCB0 aGVyZSBpcyBvbmx5IG9uZSBxdWV1ZSwgbm90aWZpY2F0aW9ucyBhcmUgdHJlYXRlZCBhcyBi ZWluZwogICoJICBkYXRhYmFzZS1sb2NhbDsgdGhpcyBpcyBkb25lIGJ5IGluY2x1ZGluZyB0 aGUgc2VuZGVyJ3MgZGF0YWJhc2UgT0lECkBAIC03MSwxMyArNzMsMTcgQEAKICAqCSAgbWFr ZSBhbnkgYWN0dWFsIHVwZGF0ZXMgdG8gdGhlIGVmZmVjdGl2ZSBsaXN0ZW4gc3RhdGUgKGxp c3RlbkNoYW5uZWxzKS4KICAqCSAgVGhlbiB3ZSBzaWduYWwgYW55IGJhY2tlbmRzIHRoYXQg bWF5IGJlIGludGVyZXN0ZWQgaW4gb3VyIG1lc3NhZ2VzCiAgKgkgIChpbmNsdWRpbmcgb3Vy IG93biBiYWNrZW5kLCBpZiBsaXN0ZW5pbmcpLiAgVGhpcyBpcyBkb25lIGJ5Ci0gKgkgIFNp Z25hbEJhY2tlbmRzKCksIHdoaWNoIHNjYW5zIHRoZSBsaXN0IG9mIGxpc3RlbmluZyBiYWNr ZW5kcyBhbmQgc2VuZHMgYQotICoJICBQUk9DU0lHX05PVElGWV9JTlRFUlJVUFQgc2lnbmFs IHRvIGV2ZXJ5IGxpc3RlbmluZyBiYWNrZW5kICh3ZSBkb24ndAotICoJICBrbm93IHdoaWNo IGJhY2tlbmQgaXMgbGlzdGVuaW5nIG9uIHdoaWNoIGNoYW5uZWwgc28gd2UgbXVzdCBzaWdu YWwgdGhlbQotICoJICBhbGwpLiAgV2UgY2FuIGV4Y2x1ZGUgYmFja2VuZHMgdGhhdCBhcmUg YWxyZWFkeSB1cCB0byBkYXRlLCB0aG91Z2gsIGFuZAotICoJICB3ZSBjYW4gYWxzbyBleGNs dWRlIGJhY2tlbmRzIHRoYXQgYXJlIGluIG90aGVyIGRhdGFiYXNlcyAodW5sZXNzIHRoZXkK LSAqCSAgYXJlIHdheSBiZWhpbmQgYW5kIHNob3VsZCBiZSBraWNrZWQgdG8gbWFrZSB0aGVt IGFkdmFuY2UgdGhlaXIKLSAqCSAgcG9pbnRlcnMpLgorICoJICBTaWduYWxCYWNrZW5kcygp LCB3aGljaCBjb25zdWx0cyB0aGUgc2hhcmVkIGNoYW5uZWwgaGFzaCB0YWJsZSB0bworICoJ ICBpZGVudGlmeSBsaXN0ZW5lcnMgZm9yIHRoZSBjaGFubmVscyB0aGF0IGhhdmUgcGVuZGlu ZyBub3RpZmljYXRpb25zCisgKgkgIGluIHRoZSBjdXJyZW50IGRhdGFiYXNlLiAgRWFjaCBz ZWxlY3RlZCBiYWNrZW5kIGlzIG1hcmtlZCBhcyBoYXZpbmcgYQorICoJICB3YWtldXAgcGVu ZGluZyB0byBhdm9pZCBkdXBsaWNhdGUgc2lnbmFscywgYW5kIGEgUFJPQ1NJR19OT1RJRllf SU5URVJSVVBUCisgKgkgIHNpZ25hbCBpcyBzZW50IHRvIGl0LgorICoKKyAqCSAgVG8gbWFp bnRhaW4gcXVldWUgaGVhbHRoLCBTaWduYWxCYWNrZW5kcygpIGFsc28gd2FrZXMgb25lIGJh Y2tlbmQKKyAqCSAgcG9zaXRpb25lZCBhdCB0aGUgZ2xvYmFsIHF1ZXVlIHRhaWwgdG8gaGVs cCBhZHZhbmNlIGl0LCBhbmQgc2lnbmFscworICoJICBhbnkgYmFja2VuZCB0aGF0IGhhcyBm YWxsZW4gdG9vIGZhciBiZWhpbmQgdG8gY2F0Y2ggdXAuICBUaGVzZSBtZWFzdXJlcworICoJ ICBwcmV2ZW50IHRoZSBub3RpZmljYXRpb24gcXVldWUgZnJvbSBncm93aW5nIGluZGVmaW5p dGVseSwgd2hpbGUgbW9zdGx5CisgKgkgIGxpbWl0aW5nIHdha2V1cHMgdG8gdGhlIGJhY2tl bmRzIHRoYXQgYWN0dWFsbHkgbmVlZCB0aGVtLgogICoKICAqCSAgRmluYWxseSwgYWZ0ZXIg d2UgYXJlIG91dCBvZiB0aGUgdHJhbnNhY3Rpb24gYWx0b2dldGhlciBhbmQgYWJvdXQgdG8g Z28KICAqCSAgaWRsZSwgd2Ugc2NhbiB0aGUgcXVldWUgZm9yIG1lc3NhZ2VzIHRoYXQgbmVl ZCB0byBiZSBzZW50IHRvIG91cgpAQCAtMTI4LDYgKzEzNCw3IEBACiAjaW5jbHVkZSA8bGlt aXRzLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5j bHVkZSA8c3RyaW5nLmg+CiAKICNpbmNsdWRlICJhY2Nlc3MvcGFyYWxsZWwuaCIKICNpbmNs dWRlICJhY2Nlc3Mvc2xydS5oIgpAQCAtMTM3LDE0ICsxNDQsMTcgQEAKICNpbmNsdWRlICJj b21tYW5kcy9hc3luYy5oIgogI2luY2x1ZGUgImNvbW1vbi9oYXNoZm4uaCIKICNpbmNsdWRl ICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibGliL2RzaGFzaC5oIgogI2luY2x1ZGUgImxpYnBx L2xpYnBxLmgiCiAjaW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIKICNpbmNsdWRlICJtaXNj YWRtaW4uaCIKKyNpbmNsdWRlICJzdG9yYWdlL2RzbV9yZWdpc3RyeS5oIgogI2luY2x1ZGUg InN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9wcm9jc2lnbmFsLmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2lu Y2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZHNhLmgiCiAjaW5j bHVkZSAidXRpbHMvZ3VjX2hvb2tzLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIK ICNpbmNsdWRlICJ1dGlscy9wc19zdGF0dXMuaCIKQEAgLTE2Miw2ICsxNzIsMjkgQEAKICAq LwogI2RlZmluZSBOT1RJRllfUEFZTE9BRF9NQVhfTEVOR1RICShCTENLU1ogLSBOQU1FREFU QUxFTiAtIDEyOCkKIAorLyoKKyAqIENoYW5uZWwgaGFzaCB0YWJsZSBkZWZpbml0aW9ucwor ICoKKyAqIFRoaXMgaGFzaCB0YWJsZSBtYXBzIChkYXRhYmFzZSBPSUQsIGNoYW5uZWwgbmFt ZSkga2V5cyB0byBhcnJheXMgb2YKKyAqIFByb2NOdW1iZXJzIHJlcHJlc2VudGluZyB0aGUg YmFja2VuZHMgbGlzdGVuaW5nIG9uIGVhY2ggY2hhbm5lbC4KKyAqLworCisjZGVmaW5lIElO SVRJQUxfTElTVEVORVJTX0FSUkFZX1NJWkUgNAorCit0eXBlZGVmIHN0cnVjdCBDaGFubmVs SGFzaEtleQoreworCU9pZAkJCWRib2lkOworCWNoYXIJCWNoYW5uZWxbTkFNRURBVEFMRU5d OworfSBDaGFubmVsSGFzaEtleTsKKwordHlwZWRlZiBzdHJ1Y3QgQ2hhbm5lbEVudHJ5Cit7 CisJQ2hhbm5lbEhhc2hLZXkga2V5OworCWRzYV9wb2ludGVyIGxpc3RlbmVyc0FycmF5Owkv KiBEU0EgcG9pbnRlciB0byBQcm9jTnVtYmVyIGFycmF5ICovCisJaW50CQkJbnVtTGlzdGVu ZXJzOwkvKiBOdW1iZXIgb2YgbGlzdGVuZXJzIGN1cnJlbnRseSBzdG9yZWQgKi8KKwlpbnQJ CQlhbGxvY2F0ZWRMaXN0ZW5lcnM7CS8qIEFsbG9jYXRlZCBzaXplIG9mIGFycmF5ICovCit9 IENoYW5uZWxFbnRyeTsKKwogLyoKICAqIFN0cnVjdCByZXByZXNlbnRpbmcgYW4gZW50cnkg aW4gdGhlIGdsb2JhbCBub3RpZnkgcXVldWUKICAqCkBAIC0yMjcsOCArMjYwLDggQEAgdHlw ZWRlZiBzdHJ1Y3QgUXVldWVQb3NpdGlvbgogLyoKICAqIFBhcmFtZXRlciBkZXRlcm1pbmlu ZyBob3cgb2Z0ZW4gd2UgdHJ5IHRvIGFkdmFuY2UgdGhlIHRhaWwgcG9pbnRlcjoKICAqIHdl IGRvIHRoYXQgYWZ0ZXIgZXZlcnkgUVVFVUVfQ0xFQU5VUF9ERUxBWSBwYWdlcyBvZiBOT1RJ RlkgZGF0YS4gIFRoaXMgaXMKLSAqIGFsc28gdGhlIGRpc3RhbmNlIGJ5IHdoaWNoIGEgYmFj a2VuZCBpbiBhbm90aGVyIGRhdGFiYXNlIG5lZWRzIHRvIGJlCi0gKiBiZWhpbmQgYmVmb3Jl IHdlJ2xsIGRlY2lkZSB3ZSBuZWVkIHRvIHdha2UgaXQgdXAgdG8gYWR2YW5jZSBpdHMgcG9p bnRlci4KKyAqIGFsc28gdGhlIGRpc3RhbmNlIGJ5IHdoaWNoIGEgYmFja2VuZCBuZWVkcyB0 byBiZSBiZWhpbmQgYmVmb3JlIHdlJ2xsCisgKiBkZWNpZGUgd2UgbmVlZCB0byB3YWtlIGl0 IHVwIHRvIGFkdmFuY2UgaXRzIHBvaW50ZXIuCiAgKgogICogUmVzaXN0IHRoZSB0ZW1wdGF0 aW9uIHRvIG1ha2UgdGhpcyByZWFsbHkgbGFyZ2UuICBXaGlsZSB0aGF0IHdvdWxkIHNhdmUK ICAqIHdvcmsgaW4gc29tZSBwbGFjZXMsIGl0IHdvdWxkIGFkZCBjb3N0IGluIG90aGVycy4g IEluIHBhcnRpY3VsYXIsIHRoaXMKQEAgLTI0Niw2ICsyNzksNyBAQCB0eXBlZGVmIHN0cnVj dCBRdWV1ZUJhY2tlbmRTdGF0dXMKIAlPaWQJCQlkYm9pZDsJCQkvKiBiYWNrZW5kJ3MgZGF0 YWJhc2UgT0lELCBvciBJbnZhbGlkT2lkICovCiAJUHJvY051bWJlcgluZXh0TGlzdGVuZXI7 CS8qIGlkIG9mIG5leHQgbGlzdGVuZXIsIG9yIElOVkFMSURfUFJPQ19OVU1CRVIgKi8KIAlR dWV1ZVBvc2l0aW9uIHBvczsJCQkvKiBiYWNrZW5kIGhhcyByZWFkIHF1ZXVlIHVwIHRvIGhl cmUgKi8KKwlib29sCQl3YWtldXBQZW5kaW5nOwkvKiBzaWduYWwgc2VudCBidXQgbm90IHll dCBwcm9jZXNzZWQgKi8KIH0gUXVldWVCYWNrZW5kU3RhdHVzOwogCiAvKgpAQCAtMjg4LDEx ICszMjIsOTEgQEAgdHlwZWRlZiBzdHJ1Y3QgQXN5bmNRdWV1ZUNvbnRyb2wKIAlQcm9jTnVt YmVyCWZpcnN0TGlzdGVuZXI7CS8qIGlkIG9mIGZpcnN0IGxpc3RlbmVyLCBvcgogCQkJCQkJ CQkgKiBJTlZBTElEX1BST0NfTlVNQkVSICovCiAJVGltZXN0YW1wVHogbGFzdFF1ZXVlRmls bFdhcm47CS8qIHRpbWUgb2YgbGFzdCBxdWV1ZS1mdWxsIG1zZyAqLworCWRzYV9oYW5kbGUJ Y2hhbm5lbEhhc2hEU0E7CisJZHNoYXNoX3RhYmxlX2hhbmRsZSBjaGFubmVsSGFzaERTSDsK IAlRdWV1ZUJhY2tlbmRTdGF0dXMgYmFja2VuZFtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwog fSBBc3luY1F1ZXVlQ29udHJvbDsKIAogc3RhdGljIEFzeW5jUXVldWVDb250cm9sICphc3lu Y1F1ZXVlQ29udHJvbDsKIAorc3RhdGljIGRzYV9hcmVhICpjaGFubmVsRFNBID0gTlVMTDsK K3N0YXRpYyBkc2hhc2hfdGFibGUgKmNoYW5uZWxIYXNoID0gTlVMTDsKK3N0YXRpYyBkc2hh c2hfaGFzaCBjaGFubmVsSGFzaEZ1bmMoY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qgc2l6ZSwg dm9pZCAqYXJnKTsKKworLyogcGFyYW1ldGVycyBmb3IgdGhlIGNoYW5uZWwgaGFzaCB0YWJs ZSAqLworc3RhdGljIGNvbnN0IGRzaGFzaF9wYXJhbWV0ZXJzIGNoYW5uZWxEU0hQYXJhbXMg PSB7CisJc2l6ZW9mKENoYW5uZWxIYXNoS2V5KSwKKwlzaXplb2YoQ2hhbm5lbEVudHJ5KSwK Kwlkc2hhc2hfbWVtY21wLAorCWNoYW5uZWxIYXNoRnVuYywKKwlkc2hhc2hfbWVtY3B5LAor CUxXVFJBTkNIRV9OT1RJRllfQ0hBTk5FTF9IQVNICit9OworCisvKgorICogY2hhbm5lbEhh c2hGdW5jCisgKgkJSGFzaCBmdW5jdGlvbiBmb3IgY2hhbm5lbCBrZXlzLgorICovCitzdGF0 aWMgZHNoYXNoX2hhc2gKK2NoYW5uZWxIYXNoRnVuYyhjb25zdCB2b2lkICprZXksIHNpemVf dCBzaXplLCB2b2lkICphcmcpCit7CisJY29uc3QgQ2hhbm5lbEhhc2hLZXkgKmsgPSAoY29u c3QgQ2hhbm5lbEhhc2hLZXkgKikga2V5OworCWRzaGFzaF9oYXNoIGg7CisKKwloID0gRGF0 dW1HZXRVSW50MzIoaGFzaF91aW50MzIoay0+ZGJvaWQpKTsKKwloIF49IERhdHVtR2V0VUlu dDMyKGhhc2hfYW55KChjb25zdCB1bnNpZ25lZCBjaGFyICopIGstPmNoYW5uZWwsCisJCQkJ CQkJCSBzdHJubGVuKGstPmNoYW5uZWwsIE5BTUVEQVRBTEVOKSkpOworCisJcmV0dXJuIGg7 Cit9CisKKy8qCisgKiBpbml0Q2hhbm5lbEhhc2gKKyAqCQlMYXp5IGluaXRpYWxpemF0aW9u IG9mIHRoZSBjaGFubmVsIGhhc2ggdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkCitpbml0Q2hh bm5lbEhhc2godm9pZCkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwkvKiBR dWljayBleGl0IGlmIHdlIGFscmVhZHkgZGlkIHRoaXMgKi8KKwlpZiAoYXN5bmNRdWV1ZUNv bnRyb2wtPmNoYW5uZWxIYXNoRFNIICE9IERTSEFTSF9IQU5ETEVfSU5WQUxJRCAmJgorCQlj aGFubmVsSGFzaCAhPSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBPdGhlcndpc2UsIHVzZSBh IGxvY2sgdG8gZW5zdXJlIG9ubHkgb25lIHByb2Nlc3MgY3JlYXRlcyB0aGUgdGFibGUgKi8K KwlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKTsKKworCS8q IEJlIHN1cmUgYW55IGxvY2FsIG1lbW9yeSBhbGxvY2F0ZWQgYnkgRFNBIHJvdXRpbmVzIGlz IHBlcnNpc3RlbnQgKi8KKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRv cE1lbW9yeUNvbnRleHQpOworCisJaWYgKGFzeW5jUXVldWVDb250cm9sLT5jaGFubmVsSGFz aERTSCA9PSBEU0hBU0hfSEFORExFX0lOVkFMSUQpCisJeworCQkvKiBJbml0aWFsaXplIGR5 bmFtaWMgc2hhcmVkIGhhc2ggdGFibGUgZm9yIGNoYW5uZWwgaGFzaCAqLworCQljaGFubmVs RFNBID0gZHNhX2NyZWF0ZShMV1RSQU5DSEVfTk9USUZZX0NIQU5ORUxfSEFTSCk7CisJCWRz YV9waW4oY2hhbm5lbERTQSk7CisJCWRzYV9waW5fbWFwcGluZyhjaGFubmVsRFNBKTsKKwkJ Y2hhbm5lbEhhc2ggPSBkc2hhc2hfY3JlYXRlKGNoYW5uZWxEU0EsICZjaGFubmVsRFNIUGFy YW1zLCBOVUxMKTsKKworCQkvKiBTdG9yZSBoYW5kbGVzIGluIHNoYXJlZCBtZW1vcnkgZm9y IG90aGVyIGJhY2tlbmRzIHRvIHVzZSAqLworCQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5l bEhhc2hEU0EgPSBkc2FfZ2V0X2hhbmRsZShjaGFubmVsRFNBKTsKKwkJYXN5bmNRdWV1ZUNv bnRyb2wtPmNoYW5uZWxIYXNoRFNIID0KKwkJCWRzaGFzaF9nZXRfaGFzaF90YWJsZV9oYW5k bGUoY2hhbm5lbEhhc2gpOworCX0KKwllbHNlIGlmICghY2hhbm5lbEhhc2gpCisJeworCQkv KiBBdHRhY2ggdG8gZXhpc3RpbmcgZHluYW1pYyBzaGFyZWQgaGFzaCB0YWJsZSAqLworCQlj aGFubmVsRFNBID0gZHNhX2F0dGFjaChhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hE U0EpOworCQlkc2FfcGluX21hcHBpbmcoY2hhbm5lbERTQSk7CisJCWNoYW5uZWxIYXNoID0g ZHNoYXNoX2F0dGFjaChjaGFubmVsRFNBLCAmY2hhbm5lbERTSFBhcmFtcywKKwkJCQkJCQkJ CSBhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0gsCisJCQkJCQkJCQkgTlVMTCk7 CisJfQorCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCUxXTG9ja1Jl bGVhc2UoTm90aWZ5UXVldWVMb2NrKTsKK30KKwogI2RlZmluZSBRVUVVRV9IRUFECQkJCQko YXN5bmNRdWV1ZUNvbnRyb2wtPmhlYWQpCiAjZGVmaW5lIFFVRVVFX1RBSUwJCQkJCShhc3lu Y1F1ZXVlQ29udHJvbC0+dGFpbCkKICNkZWZpbmUgUVVFVUVfU1RPUF9QQUdFCQkJCShhc3lu Y1F1ZXVlQ29udHJvbC0+c3RvcFBhZ2UpCkBAIC0zMDEsNiArNDE1LDcgQEAgc3RhdGljIEFz eW5jUXVldWVDb250cm9sICphc3luY1F1ZXVlQ29udHJvbDsKICNkZWZpbmUgUVVFVUVfQkFD S0VORF9EQk9JRChpKQkJKGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLmRib2lkKQog I2RlZmluZSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkpCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJh Y2tlbmRbaV0ubmV4dExpc3RlbmVyKQogI2RlZmluZSBRVUVVRV9CQUNLRU5EX1BPUyhpKQkJ KGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLnBvcykKKyNkZWZpbmUgUVVFVUVfQkFD S0VORF9XQUtFVVBfUEVORElORyhpKQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0u d2FrZXVwUGVuZGluZykKIAogLyoKICAqIFRoZSBTTFJVIGJ1ZmZlciBhcmVhIHRocm91Z2gg d2hpY2ggd2UgYWNjZXNzIHRoZSBub3RpZmljYXRpb24gcXVldWUKQEAgLTQ1Nyw2ICs1NzIs MTAgQEAgc3RhdGljIHZvaWQgQWRkRXZlbnRUb1BlbmRpbmdOb3RpZmllcyhOb3RpZmljYXRp b24gKm4pOwogc3RhdGljIHVpbnQzMiBub3RpZmljYXRpb25faGFzaChjb25zdCB2b2lkICpr ZXksIFNpemUga2V5c2l6ZSk7CiBzdGF0aWMgaW50CW5vdGlmaWNhdGlvbl9tYXRjaChjb25z dCB2b2lkICprZXkxLCBjb25zdCB2b2lkICprZXkyLCBTaXplIGtleXNpemUpOwogc3RhdGlj IHZvaWQgQ2xlYXJQZW5kaW5nQWN0aW9uc0FuZE5vdGlmaWVzKHZvaWQpOworc3RhdGljIGlu bGluZSB2b2lkIENoYW5uZWxIYXNoUHJlcGFyZUtleShDaGFubmVsSGFzaEtleSAqa2V5LCBP aWQgZGJvaWQsIGNvbnN0IGNoYXIgKmNoYW5uZWwpOworc3RhdGljIHZvaWQgQ2hhbm5lbEhh c2hBZGRMaXN0ZW5lcihjb25zdCBjaGFyICpjaGFubmVsKTsKK3N0YXRpYyB2b2lkIENoYW5u ZWxIYXNoUmVtb3ZlTGlzdGVuZXIoY29uc3QgY2hhciAqY2hhbm5lbCk7CitzdGF0aWMgTGlz dCAqR2V0UGVuZGluZ05vdGlmeUNoYW5uZWxzKHZvaWQpOwogCiAvKgogICogQ29tcHV0ZSB0 aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBxdWV1ZSBwYWdlIG51bWJlcnMuCkBAIC01MjEs MTIgKzY0MCwxNiBAQCBBc3luY1NobWVtSW5pdCh2b2lkKQogCQlRVUVVRV9TVE9QX1BBR0Ug PSAwOwogCQlRVUVVRV9GSVJTVF9MSVNURU5FUiA9IElOVkFMSURfUFJPQ19OVU1CRVI7CiAJ CWFzeW5jUXVldWVDb250cm9sLT5sYXN0UXVldWVGaWxsV2FybiA9IDA7CisJCWFzeW5jUXVl dWVDb250cm9sLT5jaGFubmVsSGFzaERTQSA9IERTQV9IQU5ETEVfSU5WQUxJRDsKKwkJYXN5 bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxIYXNoRFNIID0gRFNIQVNIX0hBTkRMRV9JTlZBTElE OworCiAJCWZvciAoaW50IGkgPSAwOyBpIDwgTWF4QmFja2VuZHM7IGkrKykKIAkJewogCQkJ UVVFVUVfQkFDS0VORF9QSUQoaSkgPSBJbnZhbGlkUGlkOwogCQkJUVVFVUVfQkFDS0VORF9E Qk9JRChpKSA9IEludmFsaWRPaWQ7CiAJCQlRVUVVRV9ORVhUX0xJU1RFTkVSKGkpID0gSU5W QUxJRF9QUk9DX05VTUJFUjsKIAkJCVNFVF9RVUVVRV9QT1MoUVVFVUVfQkFDS0VORF9QT1Mo aSksIDAsIDApOworCQkJUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhpKSA9IGZhbHNl OwogCQl9CiAJfQogCkBAIC0xMTUyLDYgKzEyNzUsNyBAQCBFeGVjX0xpc3RlbkNvbW1pdChj b25zdCBjaGFyICpjaGFubmVsKQogCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNo VG8oVG9wTWVtb3J5Q29udGV4dCk7CiAJbGlzdGVuQ2hhbm5lbHMgPSBsYXBwZW5kKGxpc3Rl bkNoYW5uZWxzLCBwc3RyZHVwKGNoYW5uZWwpKTsKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY29udGV4dCk7CisJQ2hhbm5lbEhhc2hBZGRMaXN0ZW5lcihjaGFubmVsKTsKIH0KIAog LyoKQEAgLTExNzUsNiArMTI5OSw3IEBAIEV4ZWNfVW5saXN0ZW5Db21taXQoY29uc3QgY2hh ciAqY2hhbm5lbCkKIAkJewogCQkJbGlzdGVuQ2hhbm5lbHMgPSBmb3JlYWNoX2RlbGV0ZV9j dXJyZW50KGxpc3RlbkNoYW5uZWxzLCBxKTsKIAkJCXBmcmVlKGxjaGFuKTsKKwkJCUNoYW5u ZWxIYXNoUmVtb3ZlTGlzdGVuZXIoY2hhbm5lbCk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAg LTExOTMsOSArMTMxOCwxOCBAQCBFeGVjX1VubGlzdGVuQ29tbWl0KGNvbnN0IGNoYXIgKmNo YW5uZWwpCiBzdGF0aWMgdm9pZAogRXhlY19Vbmxpc3RlbkFsbENvbW1pdCh2b2lkKQogewor CUxpc3RDZWxsICAgKmxjOworCiAJaWYgKFRyYWNlX25vdGlmeSkKIAkJZWxvZyhERUJVRzEs ICJFeGVjX1VubGlzdGVuQWxsQ29tbWl0KCVkKSIsIE15UHJvY1BpZCk7CiAKKwlmb3JlYWNo KGxjLCBsaXN0ZW5DaGFubmVscykKKwl7CisJCWNoYXIJICAgKmNoYW5uZWwgPSAoY2hhciAq KSBsZmlyc3QobGMpOworCisJCUNoYW5uZWxIYXNoUmVtb3ZlTGlzdGVuZXIoY2hhbm5lbCk7 CisJfQorCiAJbGlzdF9mcmVlX2RlZXAobGlzdGVuQ2hhbm5lbHMpOwogCWxpc3RlbkNoYW5u ZWxzID0gTklMOwogfQpAQCAtMTU2NSwxMiArMTY5OSwxNiBAQCBhc3luY1F1ZXVlRmlsbFdh cm5pbmcodm9pZCkKIC8qCiAgKiBTZW5kIHNpZ25hbHMgdG8gbGlzdGVuaW5nIGJhY2tlbmRz LgogICoKLSAqIE5vcm1hbGx5IHdlIHNpZ25hbCBvbmx5IGJhY2tlbmRzIGluIG91ciBvd24g ZGF0YWJhc2UsIHNpbmNlIG9ubHkgdGhvc2UKLSAqIGJhY2tlbmRzIGNvdWxkIGJlIGludGVy ZXN0ZWQgaW4gbm90aWZpZXMgd2Ugc2VuZC4gIEhvd2V2ZXIsIGlmIHRoZXJlJ3MKLSAqIG5v dGlmeSB0cmFmZmljIGluIG91ciBkYXRhYmFzZSBidXQgbm8gdHJhZmZpYyBpbiBhbm90aGVy IGRhdGFiYXNlIHRoYXQKLSAqIGRvZXMgaGF2ZSBsaXN0ZW5lcihzKSwgdGhvc2UgbGlzdGVu ZXJzIHdpbGwgZmFsbCBmdXJ0aGVyIGFuZCBmdXJ0aGVyCi0gKiBiZWhpbmQuICBXYWtlbiB0 aGVtIGFueXdheSBpZiB0aGV5J3JlIGZhciBlbm91Z2ggYmVoaW5kLCBzbyB0aGF0IHRoZXkn bGwKLSAqIGFkdmFuY2UgdGhlaXIgcXVldWUgcG9zaXRpb24gcG9pbnRlcnMsIGFsbG93aW5n IHRoZSBnbG9iYWwgdGFpbCB0byBhZHZhbmNlLgorICogTm9ybWFsbHkgd2Ugc2lnbmFsIG9u bHkgYmFja2VuZHMgcmVnaXN0ZXJlZCBhcyBsaXN0ZW5lcnMgZm9yIGNoYW5uZWxzCisgKiB3 aXRoIHBlbmRpbmcgbm90aWZpY2F0aW9ucy4gIEhvd2V2ZXIsIHdoZW4gdGhlcmUgaXMgbm8g dHJhZmZpYyBvbiBzb21lCisgKiBjaGFubmVscywgbGlzdGVuZXJzIG9uIHN1Y2ggY2hhbm5l bHMgd2lsbCBmYWxsIGZ1cnRoZXIgYW5kIGZ1cnRoZXIKKyAqIGJlaGluZC4gIFdha2VuIHRo ZW0gaWYgdGhleSBhcmUgdG9vIGZhciBiZWhpbmQsIHNvIHRoYXQgdGhleSdsbAorICogYWR2 YW5jZSB0aGVpciBxdWV1ZSBwb3NpdGlvbiBwb2ludGVycywgYWxsb3dpbmcgdGhlIGdsb2Jh bCB0YWlsIHRvCisgKiBhZHZhbmNlLgorICoKKyAqIFRvIHN0YWdnZXIgd2FrZXVwcyBvZiBs YWdnaW5nIGJhY2tlbmRzLCB3YWtlIHRoZSBiYWNrZW5kIGZ1cnRoZXN0CisgKiBiZWhpbmQg KGF0IHRoZSB0YWlsKSwgYW1vcnRpemluZyB0aGUgY29udGV4dC1zd2l0Y2hpbmcgY29zdCBh Y3Jvc3MKKyAqIHN1Y2Nlc3NpdmUgbm90aWZpY2F0aW9ucyBpbnN0ZWFkIG9mIHBheWluZyBp dCBhbGwgYXQgb25jZS4KICAqCiAgKiBTaW5jZSB3ZSBrbm93IHRoZSBQcm9jTnVtYmVyIGFu ZCB0aGUgUGlkIHRoZSBzaWduYWxpbmcgaXMgcXVpdGUgY2hlYXAuCiAgKgpAQCAtMTU4Myw2 ICsxNzIxLDkgQEAgU2lnbmFsQmFja2VuZHModm9pZCkKIAlpbnQzMgkgICAqcGlkczsKIAlQ cm9jTnVtYmVyICpwcm9jbm9zOwogCWludAkJCWNvdW50OworCUxpc3QJICAgKmNoYW5uZWxz OworCUxpc3RDZWxsICAgKmxjOworCWludDY0CQlxdWV1ZV9sZW5ndGg7CiAKIAkvKgogCSAq IElkZW50aWZ5IGJhY2tlbmRzIHRoYXQgd2UgbmVlZCB0byBzaWduYWwuICBXZSBkb24ndCB3 YW50IHRvIHNlbmQKQEAgLTE1OTYsMzcgKzE3MzcsMTA5IEBAIFNpZ25hbEJhY2tlbmRzKHZv aWQpCiAJcHJvY25vcyA9IChQcm9jTnVtYmVyICopIHBhbGxvYyhNYXhCYWNrZW5kcyAqIHNp emVvZihQcm9jTnVtYmVyKSk7CiAJY291bnQgPSAwOwogCisJY2hhbm5lbHMgPSBHZXRQZW5k aW5nTm90aWZ5Q2hhbm5lbHMoKTsKKwogCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVMb2Nr LCBMV19FWENMVVNJVkUpOwotCWZvciAoUHJvY051bWJlciBpID0gUVVFVUVfRklSU1RfTElT VEVORVI7IGkgIT0gSU5WQUxJRF9QUk9DX05VTUJFUjsgaSA9IFFVRVVFX05FWFRfTElTVEVO RVIoaSkpCisJZm9yZWFjaChsYywgY2hhbm5lbHMpCiAJewotCQlpbnQzMgkJcGlkID0gUVVF VUVfQkFDS0VORF9QSUQoaSk7Ci0JCVF1ZXVlUG9zaXRpb24gcG9zOworCQljaGFyCSAgICpj aGFubmVsID0gKGNoYXIgKikgbGZpcnN0KGxjKTsKKwkJQ2hhbm5lbEVudHJ5ICplbnRyeSA9 IE5VTEw7CisJCVByb2NOdW1iZXIgKmxpc3RlbmVyczsKIAotCQlBc3NlcnQocGlkICE9IElu dmFsaWRQaWQpOwotCQlwb3MgPSBRVUVVRV9CQUNLRU5EX1BPUyhpKTsKLQkJaWYgKFFVRVVF X0JBQ0tFTkRfREJPSUQoaSkgPT0gTXlEYXRhYmFzZUlkKQorCQlpZiAoY2hhbm5lbEhhc2gg IT0gTlVMTCkKIAkJewotCQkJLyoKLQkJCSAqIEFsd2F5cyBzaWduYWwgbGlzdGVuZXJzIGlu IG91ciBvd24gZGF0YWJhc2UsIHVubGVzcyB0aGV5J3JlCi0JCQkgKiBhbHJlYWR5IGNhdWdo dCB1cCAodW5saWtlbHksIGJ1dCBwb3NzaWJsZSkuCi0JCQkgKi8KKwkJCUNoYW5uZWxIYXNo S2V5IGtleTsKKworCQkJQ2hhbm5lbEhhc2hQcmVwYXJlS2V5KCZrZXksIE15RGF0YWJhc2VJ ZCwgY2hhbm5lbCk7CisJCQllbnRyeSA9IGRzaGFzaF9maW5kKGNoYW5uZWxIYXNoLCAma2V5 LCBmYWxzZSk7CisJCX0KKworCQlpZiAoZW50cnkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOwkJ CS8qIE5vIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciB0aGlzIGNoYW5uZWwgKi8KKworCQls aXN0ZW5lcnMgPSAoUHJvY051bWJlciAqKSBkc2FfZ2V0X2FkZHJlc3MoY2hhbm5lbERTQSwK KwkJCQkJCQkJCQkJCSAgIGVudHJ5LT5saXN0ZW5lcnNBcnJheSk7CisKKwkJZm9yIChpbnQg aiA9IDA7IGogPCBlbnRyeS0+bnVtTGlzdGVuZXJzOyBqKyspCisJCXsKKwkJCVByb2NOdW1i ZXIJaSA9IGxpc3RlbmVyc1tqXTsKKwkJCWludDMyCQlwaWQ7CisJCQlRdWV1ZVBvc2l0aW9u IHBvczsKKworCQkJaWYgKFFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoaSkpCisJCQkJ Y29udGludWU7CisKKwkJCXBvcyA9IFFVRVVFX0JBQ0tFTkRfUE9TKGkpOworCQkJcGlkID0g UVVFVUVfQkFDS0VORF9QSUQoaSk7CisKKwkJCS8qIFNraXAgaWYgY2F1Z2h0IHVwIG9yIHdy b25nIGRhdGFiYXNlICovCiAJCQlpZiAoUVVFVUVfUE9TX0VRVUFMKHBvcywgUVVFVUVfSEVB RCkpCiAJCQkJY29udGludWU7CisJCQlpZiAoUVVFVUVfQkFDS0VORF9EQk9JRChpKSAhPSBN eURhdGFiYXNlSWQpCisJCQkJY29udGludWU7CisKKwkJCUFzc2VydChwaWQgIT0gSW52YWxp ZFBpZCk7CisKKwkJCVFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoaSkgPSB0cnVlOwor CQkJcGlkc1tjb3VudF0gPSBwaWQ7CisJCQlwcm9jbm9zW2NvdW50XSA9IGk7CisJCQljb3Vu dCsrOwogCQl9Ci0JCWVsc2UKKworCQlkc2hhc2hfcmVsZWFzZV9sb2NrKGNoYW5uZWxIYXNo LCBlbnRyeSk7CisJfQorCisJcXVldWVfbGVuZ3RoID0gYXN5bmNRdWV1ZVBhZ2VEaWZmKFFV RVVFX1BPU19QQUdFKFFVRVVFX0hFQUQpLAorCQkJCQkJCQkJICBRVUVVRV9QT1NfUEFHRShR VUVVRV9UQUlMKSk7CisKKwkvKiBDaGVjayBmb3IgbGFnZ2luZyBiYWNrZW5kcyB3aGVuIHRo ZSBxdWV1ZSBzcGFucyBtdWx0aXBsZSBwYWdlcyAqLworCWlmIChxdWV1ZV9sZW5ndGggPiAw KQorCXsKKwkJYm9vbAkJdGFpbF93b2tlbiA9IGZhbHNlOworCisJCWZvciAoUHJvY051bWJl ciBpID0gUVVFVUVfRklSU1RfTElTVEVORVI7CisJCQkgaSAhPSBJTlZBTElEX1BST0NfTlVN QkVSOworCQkJIGkgPSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkpKQogCQl7Ci0JCQkvKgotCQkJ ICogTGlzdGVuZXJzIGluIG90aGVyIGRhdGFiYXNlcyBzaG91bGQgYmUgc2lnbmFsZWQgb25s eSBpZiB0aGV5Ci0JCQkgKiBhcmUgZmFyIGJlaGluZC4KLQkJCSAqLwotCQkJaWYgKGFzeW5j UXVldWVQYWdlRGlmZihRVUVVRV9QT1NfUEFHRShRVUVVRV9IRUFEKSwKLQkJCQkJCQkJICAg UVVFVUVfUE9TX1BBR0UocG9zKSkgPCBRVUVVRV9DTEVBTlVQX0RFTEFZKQorCQkJUXVldWVQ b3NpdGlvbiBwb3M7CisJCQlpbnQ2NAkJbGFnOworCQkJaW50MzIJCXBpZDsKKworCQkJaWYg KFFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoaSkpCiAJCQkJY29udGludWU7CisKKwkJ CXBvcyA9IFFVRVVFX0JBQ0tFTkRfUE9TKGkpOworCisJCQkvKiBTaWduYWwgb25lIGJhY2tl bmQgcG9zaXRpb25lZCBhdCB0aGUgZ2xvYmFsIHRhaWwgKi8KKwkJCWlmICghdGFpbF93b2tl biAmJiBhc3luY1F1ZXVlUGFnZURpZmYoUVVFVUVfUE9TX1BBR0UoUVVFVUVfVEFJTCksCisJ CQkJCQkJCQkJCQkgIFFVRVVFX1BPU19QQUdFKHBvcykpID09IDApCisJCQl7CisJCQkJcGlk ID0gUVVFVUVfQkFDS0VORF9QSUQoaSk7CisJCQkJQXNzZXJ0KHBpZCAhPSBJbnZhbGlkUGlk KTsKKworCQkJCVFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoaSkgPSB0cnVlOworCQkJ CXBpZHNbY291bnRdID0gcGlkOworCQkJCXByb2Nub3NbY291bnRdID0gaTsKKwkJCQljb3Vu dCsrOworCQkJCXRhaWxfd29rZW4gPSB0cnVlOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJ CQlsYWcgPSBhc3luY1F1ZXVlUGFnZURpZmYoUVVFVUVfUE9TX1BBR0UoUVVFVUVfSEVBRCks CisJCQkJCQkJCQkgUVVFVUVfUE9TX1BBR0UocG9zKSk7CisKKwkJCS8qIE5lZWQgdG8gc2ln bmFsIGlmIGEgYmFja2VuZCBoYXMgZmFsbGVuIHRvbyBmYXIgYmVoaW5kICovCisJCQlpZiAo bGFnID49IFFVRVVFX0NMRUFOVVBfREVMQVkpCisJCQl7CisJCQkJcGlkID0gUVVFVUVfQkFD S0VORF9QSUQoaSk7CisJCQkJQXNzZXJ0KHBpZCAhPSBJbnZhbGlkUGlkKTsKKworCQkJCVFV RVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoaSkgPSB0cnVlOworCQkJCXBpZHNbY291bnRd ID0gcGlkOworCQkJCXByb2Nub3NbY291bnRdID0gaTsKKwkJCQljb3VudCsrOworCQkJfQog CQl9Ci0JCS8qIE9LLCBuZWVkIHRvIHNpZ25hbCB0aGlzIG9uZSAqLwotCQlwaWRzW2NvdW50 XSA9IHBpZDsKLQkJcHJvY25vc1tjb3VudF0gPSBpOwotCQljb3VudCsrOwogCX0KIAlMV0xv Y2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7CiAKQEAgLTE4NjUsNiArMjA3OCw3IEBAIGFz eW5jUXVldWVSZWFkQWxsTm90aWZpY2F0aW9ucyh2b2lkKQogCUxXTG9ja0FjcXVpcmUoTm90 aWZ5UXVldWVMb2NrLCBMV19TSEFSRUQpOwogCS8qIEFzc2VydCBjaGVja3MgdGhhdCB3ZSBo YXZlIGEgdmFsaWQgc3RhdGUgZW50cnkgKi8KIAlBc3NlcnQoTXlQcm9jUGlkID09IFFVRVVF X0JBQ0tFTkRfUElEKE15UHJvY051bWJlcikpOworCVFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BF TkRJTkcoTXlQcm9jTnVtYmVyKSA9IGZhbHNlOwogCXBvcyA9IFFVRVVFX0JBQ0tFTkRfUE9T KE15UHJvY051bWJlcik7CiAJaGVhZCA9IFFVRVVFX0hFQUQ7CiAJTFdMb2NrUmVsZWFzZShO b3RpZnlRdWV1ZUxvY2spOwpAQCAtMjM5NSwzICsyNjA5LDE4MyBAQCBjaGVja19ub3RpZnlf YnVmZmVycyhpbnQgKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKQog ewogCXJldHVybiBjaGVja19zbHJ1X2J1ZmZlcnMoIm5vdGlmeV9idWZmZXJzIiwgbmV3dmFs KTsKIH0KKworCisvKgorICogQ2hhbm5lbEhhc2hQcmVwYXJlS2V5CisgKgkJUHJlcGFyZSBh IGNoYW5uZWwga2V5IGZvciB1c2UgYXMgYSBoYXNoIGtleS4KKyAqLworc3RhdGljIGlubGlu ZSB2b2lkCitDaGFubmVsSGFzaFByZXBhcmVLZXkoQ2hhbm5lbEhhc2hLZXkgKmtleSwgT2lk IGRib2lkLCBjb25zdCBjaGFyICpjaGFubmVsKQoreworCW1lbXNldChrZXksIDAsIHNpemVv ZihDaGFubmVsSGFzaEtleSkpOworCWtleS0+ZGJvaWQgPSBkYm9pZDsKKwlzdHJsY3B5KGtl eS0+Y2hhbm5lbCwgY2hhbm5lbCwgTkFNRURBVEFMRU4pOworfQorCisvKgorICogQ2hhbm5l bEhhc2hBZGRMaXN0ZW5lcgorICogICAgIFJlZ2lzdGVyIGFzIGEgbGlzdGVuZXIgZm9yIHRo ZSBzcGVjaWZpZWQgY2hhbm5lbC4KKyAqLworc3RhdGljIHZvaWQKK0NoYW5uZWxIYXNoQWRk TGlzdGVuZXIoY29uc3QgY2hhciAqY2hhbm5lbCkKK3sKKwlDaGFubmVsSGFzaEtleSBrZXk7 CisJQ2hhbm5lbEVudHJ5ICplbnRyeTsKKwlib29sCQlmb3VuZDsKKwlQcm9jTnVtYmVyICps aXN0ZW5lcnM7CisKKwlpbml0Q2hhbm5lbEhhc2goKTsKKworCUNoYW5uZWxIYXNoUHJlcGFy ZUtleSgma2V5LCBNeURhdGFiYXNlSWQsIGNoYW5uZWwpOworCisJLyoKKwkgKiBGb3IgbmV3 IGVudHJpZXMsIHdlIGluaXRpYWxpemUgbGlzdGVuZXJzQXJyYXkgdG8gSW52YWxpZERzYVBv aW50ZXIgYXMKKwkgKiBhIG1hcmtlci4gVGhpcyBoYW5kbGVzIGJvdGggdGhlIGluaXRpYWwg Y3JlYXRpb24gYW5kIHBvdGVudGlhbCByZXRyeQorCSAqIGFmdGVyIE9PTS4KKwkgKi8KKwll bnRyeSA9IGRzaGFzaF9maW5kX29yX2luc2VydChjaGFubmVsSGFzaCwgJmtleSwgJmZvdW5k KTsKKworCWlmICghZm91bmQpCisJCWVudHJ5LT5saXN0ZW5lcnNBcnJheSA9IEludmFsaWRE c2FQb2ludGVyOworCisJaWYgKCFEc2FQb2ludGVySXNWYWxpZChlbnRyeS0+bGlzdGVuZXJz QXJyYXkpKQorCXsKKwkJLyogRmlyc3QgbGlzdGVuZXIgZm9yIHRoaXMgY2hhbm5lbCAqLwor CQllbnRyeS0+bGlzdGVuZXJzQXJyYXkgPSBkc2FfYWxsb2NhdGUoY2hhbm5lbERTQSwKKwkJ CQkJCQkJCQkJICBzaXplb2YoUHJvY051bWJlcikgKiBJTklUSUFMX0xJU1RFTkVSU19BUlJB WV9TSVpFKTsKKwkJZW50cnktPm51bUxpc3RlbmVycyA9IDA7CisJCWVudHJ5LT5hbGxvY2F0 ZWRMaXN0ZW5lcnMgPSBJTklUSUFMX0xJU1RFTkVSU19BUlJBWV9TSVpFOworCX0KKworCWxp c3RlbmVycyA9IChQcm9jTnVtYmVyICopIGRzYV9nZXRfYWRkcmVzcyhjaGFubmVsRFNBLAor CQkJCQkJCQkJCQkgICBlbnRyeS0+bGlzdGVuZXJzQXJyYXkpOworCisJZm9yIChpbnQgaSA9 IDA7IGkgPCBlbnRyeS0+bnVtTGlzdGVuZXJzOyBpKyspCisJeworCQlpZiAobGlzdGVuZXJz W2ldID09IE15UHJvY051bWJlcikKKwkJeworCQkJZHNoYXNoX3JlbGVhc2VfbG9jayhjaGFu bmVsSGFzaCwgZW50cnkpOworCQkJcmV0dXJuOwkJCQkvKiBBbHJlYWR5IHJlZ2lzdGVyZWQg Ki8KKwkJfQorCX0KKworCS8qIE5lZWQgdG8gYWRkIHRoaXMgbGlzdGVuZXIgKi8KKwlpZiAo ZW50cnktPm51bUxpc3RlbmVycyA+PSBlbnRyeS0+YWxsb2NhdGVkTGlzdGVuZXJzKQorCXsK KwkJLyogR3JvdyB0aGUgYXJyYXkgKGRvdWJsZSB0aGUgc2l6ZSkgKi8KKwkJaW50CQkJbmV3 X3NpemUgPSBlbnRyeS0+YWxsb2NhdGVkTGlzdGVuZXJzICogMjsKKwkJZHNhX3BvaW50ZXIg bmV3X2FycmF5ID0gZHNhX2FsbG9jYXRlKGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJCSBzaXpl b2YoUHJvY051bWJlcikgKiBuZXdfc2l6ZSk7CisJCVByb2NOdW1iZXIgKm5ld19saXN0ZW5l cnMgPSAoUHJvY051bWJlciAqKSBkc2FfZ2V0X2FkZHJlc3MoY2hhbm5lbERTQSwKKwkJCQkJ CQkJCQkJCQkJCQkgICBuZXdfYXJyYXkpOworCisJCS8qIENvcHkgZXhpc3RpbmcgbGlzdGVu ZXJzICovCisJCW1lbWNweShuZXdfbGlzdGVuZXJzLCBsaXN0ZW5lcnMsCisJCQkgICBzaXpl b2YoUHJvY051bWJlcikgKiBlbnRyeS0+bnVtTGlzdGVuZXJzKTsKKworCQkvKiBGcmVlIG9s ZCBhcnJheSBhbmQgdXBkYXRlIGVudHJ5ICovCisJCWRzYV9mcmVlKGNoYW5uZWxEU0EsIGVu dHJ5LT5saXN0ZW5lcnNBcnJheSk7CisJCWVudHJ5LT5saXN0ZW5lcnNBcnJheSA9IG5ld19h cnJheTsKKwkJZW50cnktPmFsbG9jYXRlZExpc3RlbmVycyA9IG5ld19zaXplOworCQlsaXN0 ZW5lcnMgPSBuZXdfbGlzdGVuZXJzOworCX0KKworCS8qIEFkZCB0aGUgbmV3IGxpc3RlbmVy ICovCisJbGlzdGVuZXJzW2VudHJ5LT5udW1MaXN0ZW5lcnNdID0gTXlQcm9jTnVtYmVyOwor CWVudHJ5LT5udW1MaXN0ZW5lcnMrKzsKKworCWRzaGFzaF9yZWxlYXNlX2xvY2soY2hhbm5l bEhhc2gsIGVudHJ5KTsKK30KKworLyoKKyAqIENoYW5uZWxIYXNoUmVtb3ZlTGlzdGVuZXIK KyAqCQlVbnJlZ2lzdGVyIGFzIGEgbGlzdGVuZXIgZm9yIHRoZSBzcGVjaWZpZWQgY2hhbm5l bC4KKyAqLworc3RhdGljIHZvaWQKK0NoYW5uZWxIYXNoUmVtb3ZlTGlzdGVuZXIoY29uc3Qg Y2hhciAqY2hhbm5lbCkKK3sKKwlDaGFubmVsSGFzaEtleSBrZXk7CisJQ2hhbm5lbEVudHJ5 ICplbnRyeTsKKwlQcm9jTnVtYmVyICpsaXN0ZW5lcnM7CisJaW50CQkJaTsKKworCWlmIChj aGFubmVsSGFzaCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlDaGFubmVsSGFzaFByZXBhcmVL ZXkoJmtleSwgTXlEYXRhYmFzZUlkLCBjaGFubmVsKTsKKworCWVudHJ5ID0gZHNoYXNoX2Zp bmQoY2hhbm5lbEhhc2gsICZrZXksIHRydWUpOworCWlmIChlbnRyeSA9PSBOVUxMKQorCQly ZXR1cm47CisKKwlsaXN0ZW5lcnMgPSAoUHJvY051bWJlciAqKSBkc2FfZ2V0X2FkZHJlc3Mo Y2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJICAgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKwor CWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+bnVtTGlzdGVuZXJzOyBpKyspCisJeworCQlpZiAo bGlzdGVuZXJzW2ldID09IE15UHJvY051bWJlcikKKwkJeworCQkJLyogRm91bmQgaXQsIHJl bW92ZSBieSBzaGlmdGluZyByZW1haW5pbmcgZWxlbWVudHMgKi8KKwkJCWVudHJ5LT5udW1M aXN0ZW5lcnMtLTsKKwkJCWlmIChpIDwgZW50cnktPm51bUxpc3RlbmVycykKKwkJCXsKKwkJ CQltZW1tb3ZlKCZsaXN0ZW5lcnNbaV0sICZsaXN0ZW5lcnNbaSArIDFdLAorCQkJCQkJc2l6 ZW9mKFByb2NOdW1iZXIpICogKGVudHJ5LT5udW1MaXN0ZW5lcnMgLSBpKSk7CisJCQl9CisK KwkJCWlmIChlbnRyeS0+bnVtTGlzdGVuZXJzID09IDApCisJCQl7CisJCQkJZHNhX2ZyZWUo Y2hhbm5lbERTQSwgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKwkJCQlkc2hhc2hfZGVsZXRl X2VudHJ5KGNoYW5uZWxIYXNoLCBlbnRyeSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJ ZHNoYXNoX3JlbGVhc2VfbG9jayhjaGFubmVsSGFzaCwgZW50cnkpOworCQkJfQorCQkJcmV0 dXJuOworCQl9CisJfQorCisJLyogTm90IGZvdW5kIGluIGxpc3QgKi8KKwlkc2hhc2hfcmVs ZWFzZV9sb2NrKGNoYW5uZWxIYXNoLCBlbnRyeSk7Cit9CisKKy8qCisgKiBHZXRQZW5kaW5n Tm90aWZ5Q2hhbm5lbHMKKyAqCQlHZXQgbGlzdCBvZiB1bmlxdWUgY2hhbm5lbCBuYW1lcyBm cm9tIHBlbmRpbmcgbm90aWZpY2F0aW9ucy4KKyAqLworc3RhdGljIExpc3QgKgorR2V0UGVu ZGluZ05vdGlmeUNoYW5uZWxzKHZvaWQpCit7CisJTGlzdAkgICAqY2hhbm5lbHMgPSBOSUw7 CisJTGlzdENlbGwgICAqcDsKKwlMaXN0Q2VsbCAgICpxOworCWJvb2wJCWZvdW5kOworCisJ aWYgKCFwZW5kaW5nTm90aWZpZXMpCisJCXJldHVybiBOSUw7CisKKwlmb3JlYWNoKHAsIHBl bmRpbmdOb3RpZmllcy0+ZXZlbnRzKQorCXsKKwkJTm90aWZpY2F0aW9uICpuID0gKE5vdGlm aWNhdGlvbiAqKSBsZmlyc3QocCk7CisJCWNoYXIJICAgKmNoYW5uZWwgPSBuLT5kYXRhOwor CisJCWZvdW5kID0gZmFsc2U7CisJCWZvcmVhY2gocSwgY2hhbm5lbHMpCisJCXsKKwkJCWNo YXIJICAgKmV4aXN0aW5nID0gKGNoYXIgKikgbGZpcnN0KHEpOworCisJCQlpZiAoc3RyY21w KGV4aXN0aW5nLCBjaGFubmVsKSA9PSAwKQorCQkJeworCQkJCWZvdW5kID0gdHJ1ZTsKKwkJ CQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghZm91bmQpCisJCQljaGFubmVscyA9IGxh cHBlbmQoY2hhbm5lbHMsIGNoYW5uZWwpOworCX0KKworCXJldHVybiBjaGFubmVsczsKK30K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFt ZXMudHh0IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50 eHQKaW5kZXggNzU1M2Y2ZWFjZWYuLmE0ZmFkYmQwNzY3IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dAorKysgYi9zcmMvYmFj a2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dApAQCAtMzY2LDYgKzM2 Niw3IEBAIFN1YnRyYW5zQnVmZmVyCSJXYWl0aW5nIGZvciBJL08gb24gYSBzdWItdHJhbnNh Y3Rpb24gU0xSVSBidWZmZXIuIgogTXVsdGlYYWN0T2Zmc2V0QnVmZmVyCSJXYWl0aW5nIGZv ciBJL08gb24gYSBtdWx0aXhhY3Qgb2Zmc2V0IFNMUlUgYnVmZmVyLiIKIE11bHRpWGFjdE1l bWJlckJ1ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9uIGEgbXVsdGl4YWN0IG1lbWJlciBTTFJV IGJ1ZmZlci4iCiBOb3RpZnlCdWZmZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBhIDxjb21tYW5k Pk5PVElGWTwvY29tbWFuZD4gbWVzc2FnZSBTTFJVIGJ1ZmZlci4iCitOb3RpZnlDaGFubmVs SGFzaAkiV2FpdGluZyB0byBhY2Nlc3MgdGhlIDxjb21tYW5kPk5PVElGWTwvY29tbWFuZD4g Y2hhbm5lbCBoYXNoIHRhYmxlLiIKIFNlcmlhbEJ1ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9u IGEgc2VyaWFsaXphYmxlIHRyYW5zYWN0aW9uIGNvbmZsaWN0IFNMUlUgYnVmZmVyLiIKIFdB TEluc2VydAkiV2FpdGluZyB0byBpbnNlcnQgV0FMIGRhdGEgaW50byBhIG1lbW9yeSBidWZm ZXIuIgogQnVmZmVyQ29udGVudAkiV2FpdGluZyB0byBhY2Nlc3MgYSBkYXRhIHBhZ2UgaW4g bWVtb3J5LiIKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5o IGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmgKaW5kZXggMDZhMWZmZDRiMDgu LjI3NjhkZGY0NDE0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xp c3QuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaApAQCAtMTAwLDYg KzEwMCw3IEBAIFBHX0xXTE9DS1RSQU5DSEUoU1VCVFJBTlNfQlVGRkVSLCBTdWJ0cmFuc0J1 ZmZlcikKIFBHX0xXTE9DS1RSQU5DSEUoTVVMVElYQUNUT0ZGU0VUX0JVRkZFUiwgTXVsdGlY YWN0T2Zmc2V0QnVmZmVyKQogUEdfTFdMT0NLVFJBTkNIRShNVUxUSVhBQ1RNRU1CRVJfQlVG RkVSLCBNdWx0aVhhY3RNZW1iZXJCdWZmZXIpCiBQR19MV0xPQ0tUUkFOQ0hFKE5PVElGWV9C VUZGRVIsIE5vdGlmeUJ1ZmZlcikKK1BHX0xXTE9DS1RSQU5DSEUoTk9USUZZX0NIQU5ORUxf SEFTSCwgTm90aWZ5Q2hhbm5lbEhhc2gpCiBQR19MV0xPQ0tUUkFOQ0hFKFNFUklBTF9CVUZG RVIsIFNlcmlhbEJ1ZmZlcikKIFBHX0xXTE9DS1RSQU5DSEUoV0FMX0lOU0VSVCwgV0FMSW5z ZXJ0KQogUEdfTFdMT0NLVFJBTkNIRShCVUZGRVJfQ09OVEVOVCwgQnVmZmVyQ29udGVudCkK ZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggMzdmMjZmNmM2YjcuLjJkOWUyYWUy YjAyIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtNDExLDYgKzQxMSw4IEBA IENhdGFsb2dJZE1hcEVudHJ5CiBDYXRhbG9nSW5kZXhTdGF0ZQogQ2hhbmdlVmFyTm9kZXNf Y2FsbGJhY2sKIENoYW5nZVZhck5vZGVzX2NvbnRleHQKK0NoYW5uZWxFbnRyeQorQ2hhbm5l bEhhc2hLZXkKIENoZWNrUG9pbnQKIENoZWNrUG9pbnRTdG10CiBDaGVja3BvaW50U3RhdHNE YXRhCi0tIAoyLjUwLjEKCg== --ecbb2d09395740c0a1e5701b4a555ea9--