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 1v7TNx-003Equ-8u for pgsql-hackers@arkaria.postgresql.org; Sat, 11 Oct 2025 06:47:21 +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 1v7TMu-00FXGN-HY for pgsql-hackers@arkaria.postgresql.org; Sat, 11 Oct 2025 06:46:17 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v7TMt-00FXGE-8J for pgsql-hackers@lists.postgresql.org; Sat, 11 Oct 2025 06:46:17 +0000 Received: from fout-a5-smtp.messagingengine.com ([103.168.172.148]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1v7TMo-001A53-2x for pgsql-hackers@postgresql.org; Sat, 11 Oct 2025 06:46:15 +0000 Received: from phl-compute-04.internal (phl-compute-04.internal [10.202.2.44]) by mailfout.phl.internal (Postfix) with ESMTP id 67A79EC01E8; Sat, 11 Oct 2025 02:46:09 -0400 (EDT) Received: from phl-imap-03 ([10.202.2.93]) by phl-compute-04.internal (MEProxy); Sat, 11 Oct 2025 02:46:09 -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=1760165169; x=1760251569; bh=S+Nk3nNoyo D3M4A5Bx7kZXqVosboMRKVMQol8rLUtsk=; b=BvyxbIpjgCeXRBKtG8usmX3NvE QEfvZO9aoztsfprmZ4CLKkl0A10+rljSgC+1onYUrwuSDGgB5EaE0QpYe8TPj8sL OKM+5QpuPd3Iq8t67xc3J4gAwtnYor4uMeDwAVeV1laXr5NWa/gnq+Apl+Yl7B+H g0uhQORZSF5zNSaOZ3gut0jf/6GIX5hFE8hdJ+iqO/YNZ6TZk3vun8x6ASAqAP+J w9YldXTl4ReSbGqCjt55Dww4615kcz6B4nTm0i0gidKd697o+o8qsbamJCb8JwKU 4MTEGVgWBMWwUFn5DG1XKLliGhByf3/kRtMWb1Qvj85sQWvJNnCR3wMRn94A== 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= 1760165169; x=1760251569; bh=S+Nk3nNoyoD3M4A5Bx7kZXqVosboMRKVMQo l8rLUtsk=; b=xsNbjXdGBUdbxjH8p0SORQ6LVdClKlyqDd9X/SXpJqAZHJFG6Lt 2J4YsP+DD8sx3fO3mUJjW0F5mUfV6CjjNEITBoK9BXN52dQkaQM60FiPxQVwL44D sq+ThWzI+scBi3ILIX6Vum7d5xp7/mRrFf4G71PPIhcesqg5hAUMS53H78BYxsc2 T69RQsRCZD3jpiAS2N/O8yKLJKj7mEq+Orcp7FiQW9yZ0ONu1A2hCsoDg0X6aEyd b7e3Sp1alVZ6ek98Fg5fi18dc+gCDjLi5rKUJSf3FzW0wxJ5rLNGmHBlBHb5N+c6 trKgIZRK6/lkyVi4j0HFg6++HeLYZqCAcLw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdduudduvddtucetufdoteggodetrf 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 AD93118E0054; Sat, 11 Oct 2025 02:46:08 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: AZ7XRsRLdGms Date: Sat, 11 Oct 2025 08:43:51 +0200 From: "Joel Jacobson" To: "Tom Lane" Cc: "Matheus Alcantara" , pgsql-hackers Message-Id: <9eba307f-f2fb-48f0-9507-2e197f39ef9e@app.fastmail.com> In-Reply-To: <8bfca2be-1ec0-4e15-aafb-0b7b661fe936@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> Subject: Re: Optimize LISTEN/NOTIFY Content-Type: multipart/mixed; boundary=5ad333c78b0644278947e72051debe82 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --5ad333c78b0644278947e72051debe82 Content-Type: text/plain Content-Transfer-Encoding: 7bit On Fri, Oct 10, 2025, at 20:46, Joel Jacobson wrote: > On Wed, Oct 8, 2025, at 20:46, Tom Lane wrote: >> "Joel Jacobson" writes: >>> On Tue, Oct 7, 2025, at 22:15, Tom Lane wrote: >>>> 5. ChannelHashAddListener: "already registered" case is not reached, >>>> which surprises me a bit, and neither is the "grow the array" stanza. >> >>> 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. >> >> Maybe we should remove the check for "already registered" then, >> or reduce it to an Assert? Seems pointless to check twice. >> >> Or thinking a little bigger: why are we maintaining the set of >> channels-listened-to both as a list and a hash? Could we remove >> the list form? > > Yes, it was indeed possible to remove the list form. > > Some functions got a bit more complex, but I think it's worth it since a > single source of truth seems like an important design goal. > > This also made LISTEN faster when a backend is listening on plenty of > channels, since we can now lookup the channel in the hash, instead of > having to go through the list as before. The additional linear scan of > the listenersArray didn't add any noticeable extra cost even with > thousands of listening backends for the channel. > > I also tried to keep listenersArray sorted and binary-search it, but > even with thousands of listening backends, I couldn't measure any > overall latency difference of LISTEN, so I kept the linear scan to keep > it simple. > > In Exec_ListenCommit, I've now inlined code that is similar to > IsListeningOn. I didn't want to use IsListeningOn since it felt wasteful > having to do dshash_find, when we instead can just use > dshash_find_or_insert, to handle both cases. > > I also added a static int numChannelsListeningOn variable, to avoid the > possibly expensive operation of going through the entire hash, to be > able to check `numChannelsListeningOn == 0` instead of the now removed > `listenChannels == NIL`. It's of course critical to keep > numChannelsListeningOn in sync, but I think it should be safe? Would of > course be better to avoid this variable. Maybe the extra cycles that > would cost would be worth it? In addition to previously suggested optimization, there is another major one that seems doable, that would mean a great improvement for workload having large traffic differences between channels, i.e. some low traffic and some high traffic. I'm not entirely sure this approach is correct though, I've might misunderstood the guarantees of the heavyweight lock. My assumption is based on that there can only be one backend that is currently running the code in PreCommit_Notify after having aquired the heavyweight lock. If this is not true, then it doesn't work. What made me worried is the exclusive lock we also take inside the same function, I don't see the point of it since we're already holding the heavyweight lock, but maybe this is just to "allows deadlocks to be detected" like the comment says? --- Patches: * 0001-optimize_listen_notify-v14.patch: Just adds additional test coverage of async.c * 0002-optimize_listen_notify-v14.patch: Adds the shared channel hash. Unchanged since 0002-optimize_listen_notify-v13.patch. * 0003-optimize_listen_notify-v14.patch: Optimize LISTEN/NOTIFY by advancing idle backends directly Building on the previous channel-specific listener tracking optimization, this patch further reduces context switching by detecting idle listening backends that don't listen to any of the channels being notified and advancing their queue positions directly without waking them up. When a backend commits notifications, it now saves both the queue head position before and after writing. In SignalBackends(), backends that are at the old queue head and weren't marked for wakeup (meaning they don't listen to any of the notified channels) are advanced directly to the new queue head. This eliminates unnecessary wakeups for these backends, which would otherwise wake up, scan through all the notifications, skip each one, and advance to the same position anyway. The implementation carefully handles the race condition where other backends may write notifications after the heavyweight lock is released but before SignalBackends() is called. By saving queueHeadAfterWrite immediately after writing (before releasing the lock), we ensure backends are only advanced over the exact notifications we wrote, not notifications from other concurrent backends. --- Benchmark: % ./pgbench_patched --listen-notify-benchmark --notify-round-trips=10000 --notify-idle-step=10 pgbench_patched: starting LISTEN/NOTIFY round-trip benchmark pgbench_patched: round-trips per iteration: 10000 pgbench_patched: idle listeners added per iteration: 10 master: idle_listeners round_trips_per_sec max_latency_usec 0 33592.9 2278 10 14251.1 1041 20 9258.7 1367 30 6144.2 2277 40 4653.1 1690 50 3780.7 2869 60 3234.9 3215 70 2818.9 3652 80 2458.7 3219 90 2203.1 3505 100 1951.9 1739 0002-optimize_listen_notify-v14.patch: idle_listeners round_trips_per_sec max_latency_usec 0 33936.2 889 10 30631.9 1233 20 22404.7 7862 30 19446.2 9539 40 16013.3 13963 50 14310.1 16983 60 12827.0 21363 70 11271.9 24775 80 10764.4 28703 90 9568.1 31693 100 9241.3 32724 0003-optimize_listen_notify-v14.patch: idle_listeners round_trips_per_sec max_latency_usec 0 33236.8 1090 10 34681.0 1338 20 34530.4 1372 30 34061.6 1339 40 33084.5 913 50 33847.5 955 60 33675.8 1239 70 28857.4 20443 80 33324.9 786 90 33612.3 758 100 31259.2 7706 As we can see, with 0002, the ping-pong round-trips per second degrades much slower than master, but the wakeup of idle listening backends still needs to happen at some point, much fewer wakeups, and staggered over time, but still makes it go down from 33k to 9k due to 100 idle listening backends. With 0003, the round-trips per second is sustained, unaffected by additional idle listening backends. I've also attached the pgbench patch as a .txt in pgbench-listen-notify-benchmark-patch.txt, since it's not part of this patch, it's just provided to help others verify the results. /Joel --5ad333c78b0644278947e72051debe82 Content-Disposition: attachment; filename*0="0001-optimize_listen_notify-v14.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0001-optimize=5Flisten=5Fnotify-v14.patch?=" Content-Transfer-Encoding: base64 RnJvbSAxODNjOGExMDY3MDVhNjM5MWNkNjhmNDA2MDE5MjUzZDM2NjgwZGE0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogV2VkLCA4IE9jdCAyMDI1IDA5OjMwOjU0ICswMjAwClN1YmplY3Q6IFtQQVRD SCAxLzNdIEltcHJvdmUgTElTVEVOL05PVElGWSB0ZXN0IGNvdmVyYWdlCgpUaGlzIGFkZHMg 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= --5ad333c78b0644278947e72051debe82 Content-Disposition: attachment; filename*0="0002-optimize_listen_notify-v14.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0002-optimize=5Flisten=5Fnotify-v14.patch?=" Content-Transfer-Encoding: base64 RnJvbSBiMzljNWI3MWY2ZDZiMjE5YWIwNmM2YjczMWUyMzE3ZjQ4MGVkZjVkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogVHVlLCA3IE9jdCAyMDI1IDIwOjU2OjQ3ICswMjAwClN1YmplY3Q6IFtQQVRD SCAyLzNdIE9wdGltaXplIExJU1RFTi9OT1RJRlkgd2l0aCBjaGFubmVsLXNwZWNpZmljIGxp c3RlbmVyCiB0cmFja2luZwoKQ3VycmVudGx5LCBpZGxlIGxpc3RlbmluZyBiYWNrZW5kcyBj YXVzZSBhIGRyYW1hdGljIHNsb3dkb3duIGR1ZSB0bwpjb250ZXh0IHN3aXRjaGluZyB3aGVu IHRoZXkgYXJlIHNpZ25hbGVkIGFuZCB3YWtlIHVwLiBUaGlzIGlzIHdhc3RlZnVsCndoZW4g dGhleSBhcmUgbm90IGxpc3RlbmluZyB0byB0aGUgY2hhbm5lbCBiZWluZyBub3RpZmllZC4K Ckp1c3QgMTAgZXh0cmEgaWRsZSBsaXN0ZW5pbmcgY29ubmVjdGlvbnMgY2F1c2UgYSBzbG93 ZG93biBmcm9tIDg3MDAgVFBTCnRvIDYxMDAgVFBTLCAxMDAgZXh0cmEgY2F1c2UgaXQgdG8g ZHJvcCB0byAyMDAwIFRQUywgYW5kIGF0IDEwMDAgZXh0cmEKaXQgZmFsbHMgdG8gMjUwIFRQ Uy4KClRoaXMgcGF0Y2ggaW50cm9kdWNlcyB0YXJnZXRlZCBzaWduYWxpbmcgZm9yIExJU1RF Ti9OT1RJRlksIGltcHJvdmluZwpzY2FsYWJpbGl0eSBpbiB3b3JrbG9hZHMgd2l0aCBtYW55 IGlkbGUgbGlzdGVuZXJzLgoKQSBkeW5hbWljIHNoYXJlZCBoYXNoIHRhYmxlIG5vdyB0cmFj a3Mgd2hpY2ggYmFja2VuZHMgbGlzdGVuIG9uIGVhY2gKKGRhdGFiYXNlLCBjaGFubmVsKSBw YWlyLCB3aGljaCBTaWduYWxCYWNrZW5kcygpIHVzZXMgdG8gcGVyZm9ybQp0YXJnZXRlZCBz aWduYWxpbmcuICBJbiBhZGRpdGlvbiwgaXQgc3RhZ2dlcnMgd2FrZXVwcyBieSBzaWduYWxp bmcgb25lCmJhY2tlbmQgYXQgdGhlIGdsb2JhbCB0YWlsIHRvIGhlbHAgaXQgYWR2YW5jZSBn cmFkdWFsbHksIGFuZCBmb3JjZXMgYW55CmV4Y2Vzc2l2ZWx5IGxhZ2dpbmcgYmFja2VuZHMg dG8gY2F0Y2ggdXAuICBBIHBlci1iYWNrZW5kIHdha2V1cF9wZW5kaW5nCmZsYWcgYXZvaWRz IHJlZHVuZGFudCBzaWduYWxzLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMg ICAgICAgICAgICAgICAgICB8IDU5MSArKysrKysrKysrKysrKystLS0KIC4uLi91dGlscy9h Y3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dCAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVk ZS9zdG9yYWdlL2x3bG9ja2xpc3QuaCAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAyICsKIDQgZmlsZXMg Y2hhbmdlZCwgNTA1IGluc2VydGlvbnMoKyksIDkwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9hc3luYy5jCmluZGV4IDRiZDM3ZDViZWI1Li5iYjVlYmZhYjI2ZCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9hc3luYy5jCkBAIC0yNCw4ICsyNCwxMCBAQAogICoJICBBbGwgbm90aWZpY2F0aW9uIG1l c3NhZ2VzIGFyZSBwbGFjZWQgaW4gdGhlIHF1ZXVlIGFuZCBsYXRlciByZWFkIG91dAogICoJ ICBieSBsaXN0ZW5pbmcgYmFja2VuZHMuCiAgKgotICoJICBUaGVyZSBpcyBubyBjZW50cmFs IGtub3dsZWRnZSBvZiB3aGljaCBiYWNrZW5kIGxpc3RlbnMgb24gd2hpY2ggY2hhbm5lbDsK LSAqCSAgZXZlcnkgYmFja2VuZCBoYXMgaXRzIG93biBsaXN0IG9mIGludGVyZXN0aW5nIGNo YW5uZWxzLgorICoJICBXZSBhbHNvIG1haW50YWluIGEgZHluYW1pYyBzaGFyZWQgaGFzaCB0 YWJsZSAoZHNoYXNoKSB0aGF0IG1hcHMgY2hhbm5lbAorICoJICBuYW1lcyB0byB0aGUgc2V0 IG9mIGJhY2tlbmRzIGxpc3RlbmluZyBvbiBlYWNoIGNoYW5uZWwuIFRoaXMgdGFibGUgaXMK KyAqCSAgY3JlYXRlZCBsYXppbHkgb24gdGhlIGZpcnN0IExJU1RFTiBjb21tYW5kIGFuZCBn cm93cyBkeW5hbWljYWxseSBhcworICoJICBuZWVkZWQuCiAgKgogICoJICBBbHRob3VnaCB0 aGVyZSBpcyBvbmx5IG9uZSBxdWV1ZSwgbm90aWZpY2F0aW9ucyBhcmUgdHJlYXRlZCBhcyBi ZWluZwogICoJICBkYXRhYmFzZS1sb2NhbDsgdGhpcyBpcyBkb25lIGJ5IGluY2x1ZGluZyB0 aGUgc2VuZGVyJ3MgZGF0YWJhc2UgT0lECkBAIC02OCwxNiArNzAsMjAgQEAKICAqCSAgQ29t bWl0VHJhbnNhY3Rpb24oKSB3aGljaCB3aWxsIHRoZW4gZG8gdGhlIGFjdHVhbCB0cmFuc2Fj dGlvbiBjb21taXQuCiAgKgogICoJICBBZnRlciBjb21taXQgd2UgYXJlIGNhbGxlZCBhbm90 aGVyIHRpbWUgKEF0Q29tbWl0X05vdGlmeSgpKS4gSGVyZSB3ZQotICoJICBtYWtlIGFueSBh Y3R1YWwgdXBkYXRlcyB0byB0aGUgZWZmZWN0aXZlIGxpc3RlbiBzdGF0ZSAobGlzdGVuQ2hh bm5lbHMpLgorICoJICBtYWtlIGFueSBhY3R1YWwgdXBkYXRlcyB0byB0aGUgZWZmZWN0aXZl IGxpc3RlbiBzdGF0ZSAoY2hhbm5lbEhhc2gpLgogICoJICBUaGVuIHdlIHNpZ25hbCBhbnkg YmFja2VuZHMgdGhhdCBtYXkgYmUgaW50ZXJlc3RlZCBpbiBvdXIgbWVzc2FnZXMKICAqCSAg KGluY2x1ZGluZyBvdXIgb3duIGJhY2tlbmQsIGlmIGxpc3RlbmluZykuICBUaGlzIGlzIGRv bmUgYnkKLSAqCSAgU2lnbmFsQmFja2VuZHMoKSwgd2hpY2ggc2NhbnMgdGhlIGxpc3Qgb2Yg bGlzdGVuaW5nIGJhY2tlbmRzIGFuZCBzZW5kcyBhCi0gKgkgIFBST0NTSUdfTk9USUZZX0lO VEVSUlVQVCBzaWduYWwgdG8gZXZlcnkgbGlzdGVuaW5nIGJhY2tlbmQgKHdlIGRvbid0Ci0g KgkgIGtub3cgd2hpY2ggYmFja2VuZCBpcyBsaXN0ZW5pbmcgb24gd2hpY2ggY2hhbm5lbCBz byB3ZSBtdXN0IHNpZ25hbCB0aGVtCi0gKgkgIGFsbCkuICBXZSBjYW4gZXhjbHVkZSBiYWNr ZW5kcyB0aGF0IGFyZSBhbHJlYWR5IHVwIHRvIGRhdGUsIHRob3VnaCwgYW5kCi0gKgkgIHdl IGNhbiBhbHNvIGV4Y2x1ZGUgYmFja2VuZHMgdGhhdCBhcmUgaW4gb3RoZXIgZGF0YWJhc2Vz ICh1bmxlc3MgdGhleQotICoJICBhcmUgd2F5IGJlaGluZCBhbmQgc2hvdWxkIGJlIGtpY2tl ZCB0byBtYWtlIHRoZW0gYWR2YW5jZSB0aGVpcgotICoJICBwb2ludGVycykuCisgKgkgIFNp Z25hbEJhY2tlbmRzKCksIHdoaWNoIGNvbnN1bHRzIHRoZSBzaGFyZWQgY2hhbm5lbCBoYXNo IHRhYmxlIHRvCisgKgkgIGlkZW50aWZ5IGxpc3RlbmVycyBmb3IgdGhlIGNoYW5uZWxzIHRo YXQgaGF2ZSBwZW5kaW5nIG5vdGlmaWNhdGlvbnMKKyAqCSAgaW4gdGhlIGN1cnJlbnQgZGF0 YWJhc2UuICBFYWNoIHNlbGVjdGVkIGJhY2tlbmQgaXMgbWFya2VkIGFzIGhhdmluZyBhCisg KgkgIHdha2V1cCBwZW5kaW5nIHRvIGF2b2lkIGR1cGxpY2F0ZSBzaWduYWxzLCBhbmQgYSBQ Uk9DU0lHX05PVElGWV9JTlRFUlJVUFQKKyAqCSAgc2lnbmFsIGlzIHNlbnQgdG8gaXQuCisg KgorICoJICBUbyBtYWludGFpbiBxdWV1ZSBoZWFsdGgsIFNpZ25hbEJhY2tlbmRzKCkgYWxz byB3YWtlcyBvbmUgYmFja2VuZAorICoJICBwb3NpdGlvbmVkIGF0IHRoZSBnbG9iYWwgcXVl dWUgdGFpbCB0byBoZWxwIGFkdmFuY2UgaXQsIGFuZCBzaWduYWxzCisgKgkgIGFueSBiYWNr ZW5kIHRoYXQgaGFzIGZhbGxlbiB0b28gZmFyIGJlaGluZCB0byBjYXRjaCB1cC4gIFRoZXNl IG1lYXN1cmVzCisgKgkgIHByZXZlbnQgdGhlIG5vdGlmaWNhdGlvbiBxdWV1ZSBmcm9tIGdy b3dpbmcgaW5kZWZpbml0ZWx5LCB3aGlsZSBtb3N0bHkKKyAqCSAgbGltaXRpbmcgd2FrZXVw cyB0byB0aGUgYmFja2VuZHMgdGhhdCBhY3R1YWxseSBuZWVkIHRoZW0uCiAgKgogICoJICBG aW5hbGx5LCBhZnRlciB3ZSBhcmUgb3V0IG9mIHRoZSB0cmFuc2FjdGlvbiBhbHRvZ2V0aGVy IGFuZCBhYm91dCB0byBnbwogICoJICBpZGxlLCB3ZSBzY2FuIHRoZSBxdWV1ZSBmb3IgbWVz c2FnZXMgdGhhdCBuZWVkIHRvIGJlIHNlbnQgdG8gb3VyCkBAIC0xMjgsNiArMTM0LDcgQEAK ICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxz aWduYWwuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KIAogI2luY2x1ZGUgImFjY2Vzcy9wYXJh bGxlbC5oIgogI2luY2x1ZGUgImFjY2Vzcy9zbHJ1LmgiCkBAIC0xMzcsMTQgKzE0NCwxNyBA QAogI2luY2x1ZGUgImNvbW1hbmRzL2FzeW5jLmgiCiAjaW5jbHVkZSAiY29tbW9uL2hhc2hm bi5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJsaWIvZHNoYXNoLmgiCiAj aW5jbHVkZSAibGlicHEvbGlicHEuaCIKICNpbmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvZHNtX3JlZ2lzdHJ5 LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3Iu aCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NzaWduYWwuaCIKICNpbmNsdWRlICJ0Y29wL3Rj b3Bwcm90LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGls cy9kc2EuaCIKICNpbmNsdWRlICJ1dGlscy9ndWNfaG9va3MuaCIKICNpbmNsdWRlICJ1dGls cy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3BzX3N0YXR1cy5oIgpAQCAtMTYyLDYg KzE3MiwyOSBAQAogICovCiAjZGVmaW5lIE5PVElGWV9QQVlMT0FEX01BWF9MRU5HVEgJKEJM Q0tTWiAtIE5BTUVEQVRBTEVOIC0gMTI4KQogCisvKgorICogQ2hhbm5lbCBoYXNoIHRhYmxl IGRlZmluaXRpb25zCisgKgorICogVGhpcyBoYXNoIHRhYmxlIG1hcHMgKGRhdGFiYXNlIE9J RCwgY2hhbm5lbCBuYW1lKSBrZXlzIHRvIGFycmF5cyBvZgorICogUHJvY051bWJlcnMgcmVw cmVzZW50aW5nIHRoZSBiYWNrZW5kcyBsaXN0ZW5pbmcgb24gZWFjaCBjaGFubmVsLgorICov CisKKyNkZWZpbmUgSU5JVElBTF9MSVNURU5FUlNfQVJSQVlfU0laRSA0CisKK3R5cGVkZWYg c3RydWN0IENoYW5uZWxIYXNoS2V5Cit7CisJT2lkCQkJZGJvaWQ7CisJY2hhcgkJY2hhbm5l bFtOQU1FREFUQUxFTl07Cit9IENoYW5uZWxIYXNoS2V5OworCit0eXBlZGVmIHN0cnVjdCBD aGFubmVsRW50cnkKK3sKKwlDaGFubmVsSGFzaEtleSBrZXk7CisJZHNhX3BvaW50ZXIgbGlz dGVuZXJzQXJyYXk7IC8qIERTQSBwb2ludGVyIHRvIFByb2NOdW1iZXIgYXJyYXkgKi8KKwlp bnQJCQludW1MaXN0ZW5lcnM7CS8qIE51bWJlciBvZiBsaXN0ZW5lcnMgY3VycmVudGx5IHN0 b3JlZCAqLworCWludAkJCWFsbG9jYXRlZExpc3RlbmVyczsgLyogQWxsb2NhdGVkIHNpemUg b2YgYXJyYXkgKi8KK30gQ2hhbm5lbEVudHJ5OworCiAvKgogICogU3RydWN0IHJlcHJlc2Vu dGluZyBhbiBlbnRyeSBpbiB0aGUgZ2xvYmFsIG5vdGlmeSBxdWV1ZQogICoKQEAgLTIyNyw4 ICsyNjAsOCBAQCB0eXBlZGVmIHN0cnVjdCBRdWV1ZVBvc2l0aW9uCiAvKgogICogUGFyYW1l dGVyIGRldGVybWluaW5nIGhvdyBvZnRlbiB3ZSB0cnkgdG8gYWR2YW5jZSB0aGUgdGFpbCBw b2ludGVyOgogICogd2UgZG8gdGhhdCBhZnRlciBldmVyeSBRVUVVRV9DTEVBTlVQX0RFTEFZ IHBhZ2VzIG9mIE5PVElGWSBkYXRhLiAgVGhpcyBpcwotICogYWxzbyB0aGUgZGlzdGFuY2Ug Ynkgd2hpY2ggYSBiYWNrZW5kIGluIGFub3RoZXIgZGF0YWJhc2UgbmVlZHMgdG8gYmUKLSAq IGJlaGluZCBiZWZvcmUgd2UnbGwgZGVjaWRlIHdlIG5lZWQgdG8gd2FrZSBpdCB1cCB0byBh ZHZhbmNlIGl0cyBwb2ludGVyLgorICogYWxzbyB0aGUgZGlzdGFuY2UgYnkgd2hpY2ggYSBi YWNrZW5kIG5lZWRzIHRvIGJlIGJlaGluZCBiZWZvcmUgd2UnbGwKKyAqIGRlY2lkZSB3ZSBu ZWVkIHRvIHdha2UgaXQgdXAgdG8gYWR2YW5jZSBpdHMgcG9pbnRlci4KICAqCiAgKiBSZXNp c3QgdGhlIHRlbXB0YXRpb24gdG8gbWFrZSB0aGlzIHJlYWxseSBsYXJnZS4gIFdoaWxlIHRo YXQgd291bGQgc2F2ZQogICogd29yayBpbiBzb21lIHBsYWNlcywgaXQgd291bGQgYWRkIGNv c3QgaW4gb3RoZXJzLiAgSW4gcGFydGljdWxhciwgdGhpcwpAQCAtMjQ2LDYgKzI3OSw3IEBA IHR5cGVkZWYgc3RydWN0IFF1ZXVlQmFja2VuZFN0YXR1cwogCU9pZAkJCWRib2lkOwkJCS8q IGJhY2tlbmQncyBkYXRhYmFzZSBPSUQsIG9yIEludmFsaWRPaWQgKi8KIAlQcm9jTnVtYmVy CW5leHRMaXN0ZW5lcjsJLyogaWQgb2YgbmV4dCBsaXN0ZW5lciwgb3IgSU5WQUxJRF9QUk9D X05VTUJFUiAqLwogCVF1ZXVlUG9zaXRpb24gcG9zOwkJCS8qIGJhY2tlbmQgaGFzIHJlYWQg cXVldWUgdXAgdG8gaGVyZSAqLworCWJvb2wJCXdha2V1cFBlbmRpbmc7CS8qIHNpZ25hbCBz ZW50IGJ1dCBub3QgeWV0IHByb2Nlc3NlZCAqLwogfSBRdWV1ZUJhY2tlbmRTdGF0dXM7CiAK IC8qCkBAIC0yODgsMTEgKzMyMiw5MSBAQCB0eXBlZGVmIHN0cnVjdCBBc3luY1F1ZXVlQ29u dHJvbAogCVByb2NOdW1iZXIJZmlyc3RMaXN0ZW5lcjsJLyogaWQgb2YgZmlyc3QgbGlzdGVu ZXIsIG9yCiAJCQkJCQkJCSAqIElOVkFMSURfUFJPQ19OVU1CRVIgKi8KIAlUaW1lc3RhbXBU eiBsYXN0UXVldWVGaWxsV2FybjsJLyogdGltZSBvZiBsYXN0IHF1ZXVlLWZ1bGwgbXNnICov CisJZHNhX2hhbmRsZQljaGFubmVsSGFzaERTQTsKKwlkc2hhc2hfdGFibGVfaGFuZGxlIGNo YW5uZWxIYXNoRFNIOwogCVF1ZXVlQmFja2VuZFN0YXR1cyBiYWNrZW5kW0ZMRVhJQkxFX0FS UkFZX01FTUJFUl07CiB9IEFzeW5jUXVldWVDb250cm9sOwogCiBzdGF0aWMgQXN5bmNRdWV1 ZUNvbnRyb2wgKmFzeW5jUXVldWVDb250cm9sOwogCitzdGF0aWMgZHNhX2FyZWEgKmNoYW5u ZWxEU0EgPSBOVUxMOworc3RhdGljIGRzaGFzaF90YWJsZSAqY2hhbm5lbEhhc2ggPSBOVUxM Oworc3RhdGljIGRzaGFzaF9oYXNoIGNoYW5uZWxIYXNoRnVuYyhjb25zdCB2b2lkICprZXks IHNpemVfdCBzaXplLCB2b2lkICphcmcpOworCisvKiBwYXJhbWV0ZXJzIGZvciB0aGUgY2hh bm5lbCBoYXNoIHRhYmxlICovCitzdGF0aWMgY29uc3QgZHNoYXNoX3BhcmFtZXRlcnMgY2hh bm5lbERTSFBhcmFtcyA9IHsKKwlzaXplb2YoQ2hhbm5lbEhhc2hLZXkpLAorCXNpemVvZihD aGFubmVsRW50cnkpLAorCWRzaGFzaF9tZW1jbXAsCisJY2hhbm5lbEhhc2hGdW5jLAorCWRz aGFzaF9tZW1jcHksCisJTFdUUkFOQ0hFX05PVElGWV9DSEFOTkVMX0hBU0gKK307CisKKy8q CisgKiBjaGFubmVsSGFzaEZ1bmMKKyAqCQlIYXNoIGZ1bmN0aW9uIGZvciBjaGFubmVsIGtl eXMuCisgKi8KK3N0YXRpYyBkc2hhc2hfaGFzaAorY2hhbm5lbEhhc2hGdW5jKGNvbnN0IHZv aWQgKmtleSwgc2l6ZV90IHNpemUsIHZvaWQgKmFyZykKK3sKKwljb25zdCBDaGFubmVsSGFz aEtleSAqayA9IChjb25zdCBDaGFubmVsSGFzaEtleSAqKSBrZXk7CisJZHNoYXNoX2hhc2gg aDsKKworCWggPSBEYXR1bUdldFVJbnQzMihoYXNoX3VpbnQzMihrLT5kYm9pZCkpOworCWgg Xj0gRGF0dW1HZXRVSW50MzIoaGFzaF9hbnkoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgay0+ Y2hhbm5lbCwKKwkJCQkJCQkJIHN0cm5sZW4oay0+Y2hhbm5lbCwgTkFNRURBVEFMRU4pKSk7 CisKKwlyZXR1cm4gaDsKK30KKworLyoKKyAqIGluaXRDaGFubmVsSGFzaAorICoJCUxhenkg aW5pdGlhbGl6YXRpb24gb2YgdGhlIGNoYW5uZWwgaGFzaCB0YWJsZS4KKyAqLworc3RhdGlj IHZvaWQKK2luaXRDaGFubmVsSGFzaCh2b2lkKQoreworCU1lbW9yeUNvbnRleHQgb2xkY29u dGV4dDsKKworCS8qIFF1aWNrIGV4aXQgaWYgd2UgYWxyZWFkeSBkaWQgdGhpcyAqLworCWlm IChhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0ggIT0gRFNIQVNIX0hBTkRMRV9J TlZBTElEICYmCisJCWNoYW5uZWxIYXNoICE9IE5VTEwpCisJCXJldHVybjsKKworCS8qIE90 aGVyd2lzZSwgdXNlIGEgbG9jayB0byBlbnN1cmUgb25seSBvbmUgcHJvY2VzcyBjcmVhdGVz IHRoZSB0YWJsZSAqLworCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVMb2NrLCBMV19FWENM VVNJVkUpOworCisJLyogQmUgc3VyZSBhbnkgbG9jYWwgbWVtb3J5IGFsbG9jYXRlZCBieSBE U0Egcm91dGluZXMgaXMgcGVyc2lzdGVudCAqLworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250 ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7CisKKwlpZiAoYXN5bmNRdWV1ZUNvbnRy b2wtPmNoYW5uZWxIYXNoRFNIID09IERTSEFTSF9IQU5ETEVfSU5WQUxJRCkKKwl7CisJCS8q IEluaXRpYWxpemUgZHluYW1pYyBzaGFyZWQgaGFzaCB0YWJsZSBmb3IgY2hhbm5lbCBoYXNo ICovCisJCWNoYW5uZWxEU0EgPSBkc2FfY3JlYXRlKExXVFJBTkNIRV9OT1RJRllfQ0hBTk5F TF9IQVNIKTsKKwkJZHNhX3BpbihjaGFubmVsRFNBKTsKKwkJZHNhX3Bpbl9tYXBwaW5nKGNo YW5uZWxEU0EpOworCQljaGFubmVsSGFzaCA9IGRzaGFzaF9jcmVhdGUoY2hhbm5lbERTQSwg JmNoYW5uZWxEU0hQYXJhbXMsIE5VTEwpOworCisJCS8qIFN0b3JlIGhhbmRsZXMgaW4gc2hh cmVkIG1lbW9yeSBmb3Igb3RoZXIgYmFja2VuZHMgdG8gdXNlICovCisJCWFzeW5jUXVldWVD b250cm9sLT5jaGFubmVsSGFzaERTQSA9IGRzYV9nZXRfaGFuZGxlKGNoYW5uZWxEU0EpOwor CQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0ggPQorCQkJZHNoYXNoX2dldF9o YXNoX3RhYmxlX2hhbmRsZShjaGFubmVsSGFzaCk7CisJfQorCWVsc2UgaWYgKCFjaGFubmVs SGFzaCkKKwl7CisJCS8qIEF0dGFjaCB0byBleGlzdGluZyBkeW5hbWljIHNoYXJlZCBoYXNo IHRhYmxlICovCisJCWNoYW5uZWxEU0EgPSBkc2FfYXR0YWNoKGFzeW5jUXVldWVDb250cm9s LT5jaGFubmVsSGFzaERTQSk7CisJCWRzYV9waW5fbWFwcGluZyhjaGFubmVsRFNBKTsKKwkJ Y2hhbm5lbEhhc2ggPSBkc2hhc2hfYXR0YWNoKGNoYW5uZWxEU0EsICZjaGFubmVsRFNIUGFy YW1zLAorCQkJCQkJCQkJYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxIYXNoRFNILAorCQkJ CQkJCQkJTlVMTCk7CisJfQorCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQp OworCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2NrKTsKK30KKwogI2RlZmluZSBRVUVV RV9IRUFECQkJCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmhlYWQpCiAjZGVmaW5lIFFVRVVFX1RB SUwJCQkJCShhc3luY1F1ZXVlQ29udHJvbC0+dGFpbCkKICNkZWZpbmUgUVVFVUVfU1RPUF9Q QUdFCQkJCShhc3luY1F1ZXVlQ29udHJvbC0+c3RvcFBhZ2UpCkBAIC0zMDEsNiArNDE1LDcg QEAgc3RhdGljIEFzeW5jUXVldWVDb250cm9sICphc3luY1F1ZXVlQ29udHJvbDsKICNkZWZp bmUgUVVFVUVfQkFDS0VORF9EQk9JRChpKQkJKGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5k W2ldLmRib2lkKQogI2RlZmluZSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkpCQkoYXN5bmNRdWV1 ZUNvbnRyb2wtPmJhY2tlbmRbaV0ubmV4dExpc3RlbmVyKQogI2RlZmluZSBRVUVVRV9CQUNL RU5EX1BPUyhpKQkJKGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLnBvcykKKyNkZWZp bmUgUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhpKQkoYXN5bmNRdWV1ZUNvbnRyb2wt PmJhY2tlbmRbaV0ud2FrZXVwUGVuZGluZykKIAogLyoKICAqIFRoZSBTTFJVIGJ1ZmZlciBh cmVhIHRocm91Z2ggd2hpY2ggd2UgYWNjZXNzIHRoZSBub3RpZmljYXRpb24gcXVldWUKQEAg LTMxMiwxNyArNDI3LDExIEBAIHN0YXRpYyBTbHJ1Q3RsRGF0YSBOb3RpZnlDdGxEYXRhOwog CiAjZGVmaW5lIFFVRVVFX0ZVTExfV0FSTl9JTlRFUlZBTAk1MDAwCS8qIHdhcm4gYXQgbW9z dCBvbmNlIGV2ZXJ5IDVzICovCiAKLS8qCi0gKiBsaXN0ZW5DaGFubmVscyBpZGVudGlmaWVz IHRoZSBjaGFubmVscyB3ZSBhcmUgYWN0dWFsbHkgbGlzdGVuaW5nIHRvCi0gKiAoaWUsIGhh dmUgY29tbWl0dGVkIGEgTElTVEVOIG9uKS4gIEl0IGlzIGEgc2ltcGxlIGxpc3Qgb2YgY2hh bm5lbCBuYW1lcywKLSAqIGFsbG9jYXRlZCBpbiBUb3BNZW1vcnlDb250ZXh0LgotICovCi1z dGF0aWMgTGlzdCAqbGlzdGVuQ2hhbm5lbHMgPSBOSUw7CS8qIGxpc3Qgb2YgQyBzdHJpbmdz ICovCi0KIC8qCiAgKiBTdGF0ZSBmb3IgcGVuZGluZyBMSVNURU4vVU5MSVNURU4gYWN0aW9u cyBjb25zaXN0cyBvZiBhbiBvcmRlcmVkIGxpc3Qgb2YKICAqIGFsbCBhY3Rpb25zIHJlcXVl c3RlZCBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4gIEFzIGV4cGxhaW5lZCBhYm92ZSwK LSAqIHdlIGRvbid0IGFjdHVhbGx5IGNoYW5nZSBsaXN0ZW5DaGFubmVscyB1bnRpbCB3ZSBy ZWFjaCB0cmFuc2FjdGlvbiBjb21taXQuCisgKiB3ZSBkb24ndCBhY3R1YWxseSBjaGFuZ2Ug dGhlIHNoYXJlZCBjaGFubmVsSGFzaCB1bnRpbCB3ZSByZWFjaCB0cmFuc2FjdGlvbgorICog Y29tbWl0LgogICoKICAqIFRoZSBsaXN0IGlzIGtlcHQgaW4gQ3VyVHJhbnNhY3Rpb25Db250 ZXh0LiAgSW4gc3VidHJhbnNhY3Rpb25zLCBlYWNoCiAgKiBzdWJ0cmFuc2FjdGlvbiBoYXMg aXRzIG93biBsaXN0IGluIGl0cyBvd24gQ3VyVHJhbnNhY3Rpb25Db250ZXh0LCBidXQKQEAg LTQxOCw2ICs1MjcsOSBAQCBzdGF0aWMgYm9vbCB1bmxpc3RlbkV4aXRSZWdpc3RlcmVkID0g ZmFsc2U7CiAvKiBUcnVlIGlmIHdlJ3JlIGN1cnJlbnRseSByZWdpc3RlcmVkIGFzIGEgbGlz dGVuZXIgaW4gYXN5bmNRdWV1ZUNvbnRyb2wgKi8KIHN0YXRpYyBib29sIGFtUmVnaXN0ZXJl ZExpc3RlbmVyID0gZmFsc2U7CiAKKy8qIENvdW50IG9mIGNoYW5uZWxzIHdlJ3JlIGN1cnJl bnRseSBsaXN0ZW5pbmcgb24gKi8KK3N0YXRpYyBpbnQJbnVtQ2hhbm5lbHNMaXN0ZW5pbmdP biA9IDA7CisKIC8qIGhhdmUgd2UgYWR2YW5jZWQgdG8gYSBwYWdlIHRoYXQncyBhIG11bHRp cGxlIG9mIFFVRVVFX0NMRUFOVVBfREVMQVk/ICovCiBzdGF0aWMgYm9vbCB0cnlBZHZhbmNl VGFpbCA9IGZhbHNlOwogCkBAIC00NTcsNiArNTY5LDggQEAgc3RhdGljIHZvaWQgQWRkRXZl bnRUb1BlbmRpbmdOb3RpZmllcyhOb3RpZmljYXRpb24gKm4pOwogc3RhdGljIHVpbnQzMiBu b3RpZmljYXRpb25faGFzaChjb25zdCB2b2lkICprZXksIFNpemUga2V5c2l6ZSk7CiBzdGF0 aWMgaW50CW5vdGlmaWNhdGlvbl9tYXRjaChjb25zdCB2b2lkICprZXkxLCBjb25zdCB2b2lk ICprZXkyLCBTaXplIGtleXNpemUpOwogc3RhdGljIHZvaWQgQ2xlYXJQZW5kaW5nQWN0aW9u c0FuZE5vdGlmaWVzKHZvaWQpOworc3RhdGljIGlubGluZSB2b2lkIENoYW5uZWxIYXNoUHJl cGFyZUtleShDaGFubmVsSGFzaEtleSAqa2V5LCBPaWQgZGJvaWQsIGNvbnN0IGNoYXIgKmNo YW5uZWwpOworc3RhdGljIExpc3QgKkdldFBlbmRpbmdOb3RpZnlDaGFubmVscyh2b2lkKTsK IAogLyoKICAqIENvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gcXVldWUgcGFn ZSBudW1iZXJzLgpAQCAtNTIxLDEyICs2MzUsMTYgQEAgQXN5bmNTaG1lbUluaXQodm9pZCkK IAkJUVVFVUVfU1RPUF9QQUdFID0gMDsKIAkJUVVFVUVfRklSU1RfTElTVEVORVIgPSBJTlZB TElEX1BST0NfTlVNQkVSOwogCQlhc3luY1F1ZXVlQ29udHJvbC0+bGFzdFF1ZXVlRmlsbFdh cm4gPSAwOworCQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0EgPSBEU0FfSEFO RExFX0lOVkFMSUQ7CisJCWFzeW5jUXVldWVDb250cm9sLT5jaGFubmVsSGFzaERTSCA9IERT SEFTSF9IQU5ETEVfSU5WQUxJRDsKKwogCQlmb3IgKGludCBpID0gMDsgaSA8IE1heEJhY2tl bmRzOyBpKyspCiAJCXsKIAkJCVFVRVVFX0JBQ0tFTkRfUElEKGkpID0gSW52YWxpZFBpZDsK IAkJCVFVRVVFX0JBQ0tFTkRfREJPSUQoaSkgPSBJbnZhbGlkT2lkOwogCQkJUVVFVUVfTkVY VF9MSVNURU5FUihpKSA9IElOVkFMSURfUFJPQ19OVU1CRVI7CiAJCQlTRVRfUVVFVUVfUE9T KFFVRVVFX0JBQ0tFTkRfUE9TKGkpLCAwLCAwKTsKKwkJCVFVRVVFX0JBQ0tFTkRfV0FLRVVQ X1BFTkRJTkcoaSkgPSBmYWxzZTsKIAkJfQogCX0KIApAQCAtNjgzLDcgKzgwMSw3IEBAIEFz eW5jX05vdGlmeShjb25zdCBjaGFyICpjaGFubmVsLCBjb25zdCBjaGFyICpwYXlsb2FkKQog ICoJCUNvbW1vbiBjb2RlIGZvciBsaXN0ZW4sIHVubGlzdGVuLCB1bmxpc3RlbiBhbGwgY29t bWFuZHMuCiAgKgogICoJCUFkZHMgdGhlIHJlcXVlc3QgdG8gdGhlIGxpc3Qgb2YgcGVuZGlu ZyBhY3Rpb25zLgotICoJCUFjdHVhbCB1cGRhdGUgb2YgdGhlIGxpc3RlbkNoYW5uZWxzIGxp c3QgaGFwcGVucyBkdXJpbmcgdHJhbnNhY3Rpb24KKyAqCQlBY3R1YWwgdXBkYXRlIG9mIHRo ZSBzaGFyZWQgY2hhbm5lbEhhc2ggaGFwcGVucyBkdXJpbmcgdHJhbnNhY3Rpb24KICAqCQlj b21taXQuCiAgKi8KIHN0YXRpYyB2b2lkCkBAIC03ODIsMjQgKzkwMCw2MCBAQCBBc3luY19V bmxpc3RlbkFsbCh2b2lkKQogLyoKICAqIFNRTCBmdW5jdGlvbjogcmV0dXJuIGEgc2V0IG9m IHRoZSBjaGFubmVsIG5hbWVzIHRoaXMgYmFja2VuZCBpcyBhY3RpdmVseQogICogbGlzdGVu aW5nIHRvLgotICoKLSAqIE5vdGU6IHRoaXMgY29kaW5nIHJlbGllcyBvbiB0aGUgZmFjdCB0 aGF0IHRoZSBsaXN0ZW5DaGFubmVscyBsaXN0IGNhbm5vdAotICogY2hhbmdlIHdpdGhpbiBh IHRyYW5zYWN0aW9uLgogICovCiBEYXR1bQogcGdfbGlzdGVuaW5nX2NoYW5uZWxzKFBHX0ZV TkNUSU9OX0FSR1MpCiB7CiAJRnVuY0NhbGxDb250ZXh0ICpmdW5jY3R4OworCUxpc3QJICAg Kmxpc3RlbkNoYW5uZWxzOwogCiAJLyogc3R1ZmYgZG9uZSBvbmx5IG9uIHRoZSBmaXJzdCBj YWxsIG9mIHRoZSBmdW5jdGlvbiAqLwogCWlmIChTUkZfSVNfRklSU1RDQUxMKCkpCiAJewor CQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJCWRzaGFzaF9zZXFfc3RhdHVzIHN0YXR1 czsKKwkJQ2hhbm5lbEVudHJ5ICplbnRyeTsKKwogCQkvKiBjcmVhdGUgYSBmdW5jdGlvbiBj b250ZXh0IGZvciBjcm9zcy1jYWxsIHBlcnNpc3RlbmNlICovCiAJCWZ1bmNjdHggPSBTUkZf RklSU1RDQUxMX0lOSVQoKTsKKworCQkvKiBnZXQgY2hhbm5lbHMgZnJvbSBjaGFubmVsSGFz aCBhbmQgc3RvcmUgaW4gZnVuY3Rpb24gY29udGV4dCAqLworCQlvbGRjb250ZXh0ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKGZ1bmNjdHgtPm11bHRpX2NhbGxfbWVtb3J5X2N0eCk7CisK KwkJbGlzdGVuQ2hhbm5lbHMgPSBOSUw7CisKKwkJaWYgKGNoYW5uZWxIYXNoICE9IE5VTEwp CisJCXsKKwkJCWRzaGFzaF9zZXFfaW5pdCgmc3RhdHVzLCBjaGFubmVsSGFzaCwgZmFsc2Up OworCQkJd2hpbGUgKChlbnRyeSA9IGRzaGFzaF9zZXFfbmV4dCgmc3RhdHVzKSkgIT0gTlVM TCkKKwkJCXsKKwkJCQlpZiAoZW50cnktPmtleS5kYm9pZCA9PSBNeURhdGFiYXNlSWQpCisJ CQkJeworCQkJCQlQcm9jTnVtYmVyICpsaXN0ZW5lcnM7CisKKwkJCQkJbGlzdGVuZXJzID0g KFByb2NOdW1iZXIgKikgZHNhX2dldF9hZGRyZXNzKGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJ CQkJCQkgICBlbnRyeS0+bGlzdGVuZXJzQXJyYXkpOworCisJCQkJCWZvciAoaW50IGkgPSAw OyBpIDwgZW50cnktPm51bUxpc3RlbmVyczsgaSsrKQorCQkJCQl7CisJCQkJCQlpZiAobGlz dGVuZXJzW2ldID09IE15UHJvY051bWJlcikKKwkJCQkJCXsKKwkJCQkJCQlsaXN0ZW5DaGFu bmVscyA9IGxhcHBlbmQobGlzdGVuQ2hhbm5lbHMsIHBzdHJkdXAoZW50cnktPmtleS5jaGFu bmVsKSk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJ CQlkc2hhc2hfc2VxX3Rlcm0oJnN0YXR1cyk7CisJCX0KKworCQlmdW5jY3R4LT51c2VyX2Zj dHggPSBsaXN0ZW5DaGFubmVsczsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRl eHQpOwogCX0KIAogCS8qIHN0dWZmIGRvbmUgb24gZXZlcnkgY2FsbCBvZiB0aGUgZnVuY3Rp b24gKi8KIAlmdW5jY3R4ID0gU1JGX1BFUkNBTExfU0VUVVAoKTsKKwlsaXN0ZW5DaGFubmVs cyA9IChMaXN0ICopIGZ1bmNjdHgtPnVzZXJfZmN0eDsKIAogCWlmIChmdW5jY3R4LT5jYWxs X2NudHIgPCBsaXN0X2xlbmd0aChsaXN0ZW5DaGFubmVscykpCiAJewpAQCAtOTU3LDcgKzEx MTEsNyBAQCBQcmVDb21taXRfTm90aWZ5KHZvaWQpCiAgKgogICoJCVRoaXMgaXMgY2FsbGVk IGF0IHRyYW5zYWN0aW9uIGNvbW1pdCwgYWZ0ZXIgY29tbWl0dGluZyB0byBjbG9nLgogICoK LSAqCQlVcGRhdGUgbGlzdGVuQ2hhbm5lbHMgYW5kIGNsZWFyIHRyYW5zYWN0aW9uLWxvY2Fs IHN0YXRlLgorICoJCVVwZGF0ZSBjaGFubmVsSGFzaCBhbmQgY2xlYXIgdHJhbnNhY3Rpb24t bG9jYWwgc3RhdGUuCiAgKgogICoJCUlmIHdlIGlzc3VlZCBhbnkgbm90aWZpY2F0aW9ucyBp biB0aGUgdHJhbnNhY3Rpb24sIHNlbmQgc2lnbmFscyB0bwogICoJCWxpc3RlbmluZyBiYWNr ZW5kcyAocG9zc2libHkgaW5jbHVkaW5nIG91cnNlbHZlcykgdG8gcHJvY2VzcyB0aGVtLgpA QCAtMTAwMiw3ICsxMTU2LDcgQEAgQXRDb21taXRfTm90aWZ5KHZvaWQpCiAJfQogCiAJLyog SWYgbm8gbG9uZ2VyIGxpc3RlbmluZyB0byBhbnl0aGluZywgZ2V0IG91dCBvZiBsaXN0ZW5l ciBhcnJheSAqLwotCWlmIChhbVJlZ2lzdGVyZWRMaXN0ZW5lciAmJiBsaXN0ZW5DaGFubmVs cyA9PSBOSUwpCisJaWYgKGFtUmVnaXN0ZXJlZExpc3RlbmVyICYmIG51bUNoYW5uZWxzTGlz dGVuaW5nT24gPT0gMCkKIAkJYXN5bmNRdWV1ZVVucmVnaXN0ZXIoKTsKIAogCS8qCkBAIC0x MTMwLDU1ICsxMjg0LDEzMSBAQCBFeGVjX0xpc3RlblByZUNvbW1pdCh2b2lkKQogLyoKICAq IEV4ZWNfTGlzdGVuQ29tbWl0IC0tLSBzdWJyb3V0aW5lIGZvciBBdENvbW1pdF9Ob3RpZnkK ICAqCi0gKiBBZGQgdGhlIGNoYW5uZWwgdG8gdGhlIGxpc3Qgb2YgY2hhbm5lbHMgd2UgYXJl IGxpc3RlbmluZyBvbi4KKyAqIEFkZCB0aGUgY2hhbm5lbCB0byB0aGUgc2hhcmVkIGNoYW5u ZWxIYXNoLgogICovCiBzdGF0aWMgdm9pZAogRXhlY19MaXN0ZW5Db21taXQoY29uc3QgY2hh ciAqY2hhbm5lbCkKIHsKLQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJQ2hhbm5lbEhh c2hLZXkga2V5OworCUNoYW5uZWxFbnRyeSAqZW50cnk7CisJYm9vbAkJZm91bmQ7CisJUHJv Y051bWJlciAqbGlzdGVuZXJzOwogCi0JLyogRG8gbm90aGluZyBpZiB3ZSBhcmUgYWxyZWFk eSBsaXN0ZW5pbmcgb24gdGhpcyBjaGFubmVsICovCi0JaWYgKElzTGlzdGVuaW5nT24oY2hh bm5lbCkpCi0JCXJldHVybjsKKwlpbml0Q2hhbm5lbEhhc2goKTsKKworCUNoYW5uZWxIYXNo UHJlcGFyZUtleSgma2V5LCBNeURhdGFiYXNlSWQsIGNoYW5uZWwpOwogCiAJLyoKLQkgKiBB ZGQgdGhlIG5ldyBjaGFubmVsIG5hbWUgdG8gbGlzdGVuQ2hhbm5lbHMuCi0JICoKLQkgKiBY WFggSXQgaXMgdGhlb3JldGljYWxseSBwb3NzaWJsZSB0byBnZXQgYW4gb3V0LW9mLW1lbW9y eSBmYWlsdXJlIGhlcmUsCi0JICogd2hpY2ggd291bGQgYmUgYmFkIGJlY2F1c2Ugd2UgYWxy ZWFkeSBjb21taXR0ZWQuICBGb3IgdGhlIG1vbWVudCBpdAotCSAqIGRvZXNuJ3Qgc2VlbSB3 b3J0aCB0cnlpbmcgdG8gZ3VhcmQgYWdhaW5zdCB0aGF0LCBidXQgbWF5YmUgaW1wcm92ZSB0 aGlzCi0JICogbGF0ZXIuCisJICogRm9yIG5ldyBlbnRyaWVzLCB3ZSBpbml0aWFsaXplIGxp c3RlbmVyc0FycmF5IHRvIEludmFsaWREc2FQb2ludGVyIGFzIGEKKwkgKiBtYXJrZXIuIFRo aXMgaGFuZGxlcyBib3RoIHRoZSBpbml0aWFsIGNyZWF0aW9uIGFuZCBwb3RlbnRpYWwgcmV0 cnkKKwkgKiBhZnRlciBPT00uCiAJICovCi0Jb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhUb3BNZW1vcnlDb250ZXh0KTsKLQlsaXN0ZW5DaGFubmVscyA9IGxhcHBlbmQo bGlzdGVuQ2hhbm5lbHMsIHBzdHJkdXAoY2hhbm5lbCkpOwotCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhvbGRjb250ZXh0KTsKKwllbnRyeSA9IGRzaGFzaF9maW5kX29yX2luc2VydChjaGFu bmVsSGFzaCwgJmtleSwgJmZvdW5kKTsKKworCWlmICghZm91bmQpCisJCWVudHJ5LT5saXN0 ZW5lcnNBcnJheSA9IEludmFsaWREc2FQb2ludGVyOworCisJaWYgKCFEc2FQb2ludGVySXNW YWxpZChlbnRyeS0+bGlzdGVuZXJzQXJyYXkpKQorCXsKKwkJLyogRmlyc3QgbGlzdGVuZXIg Zm9yIHRoaXMgY2hhbm5lbCAqLworCQllbnRyeS0+bGlzdGVuZXJzQXJyYXkgPSBkc2FfYWxs b2NhdGUoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJIHNpemVvZihQcm9jTnVtYmVyKSAqIElO SVRJQUxfTElTVEVORVJTX0FSUkFZX1NJWkUpOworCQllbnRyeS0+bnVtTGlzdGVuZXJzID0g MDsKKwkJZW50cnktPmFsbG9jYXRlZExpc3RlbmVycyA9IElOSVRJQUxfTElTVEVORVJTX0FS UkFZX1NJWkU7CisJfQorCisJbGlzdGVuZXJzID0gKFByb2NOdW1iZXIgKikgZHNhX2dldF9h ZGRyZXNzKGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJCSAgIGVudHJ5LT5saXN0ZW5lcnNBcnJh eSk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IGVudHJ5LT5udW1MaXN0ZW5lcnM7IGkrKykK Kwl7CisJCWlmIChsaXN0ZW5lcnNbaV0gPT0gTXlQcm9jTnVtYmVyKQorCQl7CisJCQlkc2hh c2hfcmVsZWFzZV9sb2NrKGNoYW5uZWxIYXNoLCBlbnRyeSk7CisJCQlyZXR1cm47CQkJCS8q IEFscmVhZHkgcmVnaXN0ZXJlZCAqLworCQl9CisJfQorCisJaWYgKGVudHJ5LT5udW1MaXN0 ZW5lcnMgPj0gZW50cnktPmFsbG9jYXRlZExpc3RlbmVycykKKwl7CisJCWludAkJCW5ld19z aXplID0gZW50cnktPmFsbG9jYXRlZExpc3RlbmVycyAqIDI7CisJCWRzYV9wb2ludGVyIG5l d19hcnJheSA9IGRzYV9hbGxvY2F0ZShjaGFubmVsRFNBLAorCQkJCQkJCQkJCQkgc2l6ZW9m KFByb2NOdW1iZXIpICogbmV3X3NpemUpOworCQlQcm9jTnVtYmVyICpuZXdfbGlzdGVuZXJz ID0gKFByb2NOdW1iZXIgKikgZHNhX2dldF9hZGRyZXNzKGNoYW5uZWxEU0EsCisJCQkJCQkJ CQkJCQkJCQkJICAgbmV3X2FycmF5KTsKKworCQltZW1jcHkobmV3X2xpc3RlbmVycywgbGlz dGVuZXJzLAorCQkJICAgc2l6ZW9mKFByb2NOdW1iZXIpICogZW50cnktPm51bUxpc3RlbmVy cyk7CisKKwkJZHNhX2ZyZWUoY2hhbm5lbERTQSwgZW50cnktPmxpc3RlbmVyc0FycmF5KTsK KwkJZW50cnktPmxpc3RlbmVyc0FycmF5ID0gbmV3X2FycmF5OworCQllbnRyeS0+YWxsb2Nh dGVkTGlzdGVuZXJzID0gbmV3X3NpemU7CisJCWxpc3RlbmVycyA9IG5ld19saXN0ZW5lcnM7 CisJfQorCisJbGlzdGVuZXJzW2VudHJ5LT5udW1MaXN0ZW5lcnNdID0gTXlQcm9jTnVtYmVy OworCWVudHJ5LT5udW1MaXN0ZW5lcnMrKzsKKwludW1DaGFubmVsc0xpc3RlbmluZ09uKys7 CisKKwlkc2hhc2hfcmVsZWFzZV9sb2NrKGNoYW5uZWxIYXNoLCBlbnRyeSk7CiB9CiAKIC8q CiAgKiBFeGVjX1VubGlzdGVuQ29tbWl0IC0tLSBzdWJyb3V0aW5lIGZvciBBdENvbW1pdF9O b3RpZnkKICAqCi0gKiBSZW1vdmUgdGhlIHNwZWNpZmllZCBjaGFubmVsIG5hbWUgZnJvbSBs aXN0ZW5DaGFubmVscy4KKyAqIFJlbW92ZSB0aGUgc3BlY2lmaWVkIGNoYW5uZWwgZnJvbSBj aGFubmVsSGFzaC4KICAqLwogc3RhdGljIHZvaWQKIEV4ZWNfVW5saXN0ZW5Db21taXQoY29u c3QgY2hhciAqY2hhbm5lbCkKIHsKLQlMaXN0Q2VsbCAgICpxOworCUNoYW5uZWxIYXNoS2V5 IGtleTsKKwlDaGFubmVsRW50cnkgKmVudHJ5OworCVByb2NOdW1iZXIgKmxpc3RlbmVyczsK KwlpbnQJCQlpOwogCiAJaWYgKFRyYWNlX25vdGlmeSkKIAkJZWxvZyhERUJVRzEsICJFeGVj X1VubGlzdGVuQ29tbWl0KCVzLCVkKSIsIGNoYW5uZWwsIE15UHJvY1BpZCk7CiAKLQlmb3Jl YWNoKHEsIGxpc3RlbkNoYW5uZWxzKQorCWlmIChjaGFubmVsSGFzaCA9PSBOVUxMKQorCQly ZXR1cm47CisKKwlDaGFubmVsSGFzaFByZXBhcmVLZXkoJmtleSwgTXlEYXRhYmFzZUlkLCBj aGFubmVsKTsKKworCS8qIExvb2sgdXAgdGhlIGNoYW5uZWwgd2l0aCBleGNsdXNpdmUgbG9j ayBzbyB3ZSBjYW4gbW9kaWZ5IGl0ICovCisJZW50cnkgPSBkc2hhc2hfZmluZChjaGFubmVs SGFzaCwgJmtleSwgdHJ1ZSk7CisJaWYgKGVudHJ5ID09IE5VTEwpCisJCXJldHVybjsKKwor CWxpc3RlbmVycyA9IChQcm9jTnVtYmVyICopIGRzYV9nZXRfYWRkcmVzcyhjaGFubmVsRFNB LAorCQkJCQkJCQkJCQkgICBlbnRyeS0+bGlzdGVuZXJzQXJyYXkpOworCisJZm9yIChpID0g MDsgaSA8IGVudHJ5LT5udW1MaXN0ZW5lcnM7IGkrKykKIAl7Ci0JCWNoYXIJICAgKmxjaGFu ID0gKGNoYXIgKikgbGZpcnN0KHEpOwotCi0JCWlmIChzdHJjbXAobGNoYW4sIGNoYW5uZWwp ID09IDApCisJCWlmIChsaXN0ZW5lcnNbaV0gPT0gTXlQcm9jTnVtYmVyKQogCQl7Ci0JCQls aXN0ZW5DaGFubmVscyA9IGZvcmVhY2hfZGVsZXRlX2N1cnJlbnQobGlzdGVuQ2hhbm5lbHMs IHEpOwotCQkJcGZyZWUobGNoYW4pOwotCQkJYnJlYWs7CisJCQllbnRyeS0+bnVtTGlzdGVu ZXJzLS07CisJCQlpZiAoaSA8IGVudHJ5LT5udW1MaXN0ZW5lcnMpCisJCQkJbWVtbW92ZSgm bGlzdGVuZXJzW2ldLCAmbGlzdGVuZXJzW2kgKyAxXSwKKwkJCQkJCXNpemVvZihQcm9jTnVt YmVyKSAqIChlbnRyeS0+bnVtTGlzdGVuZXJzIC0gaSkpOworCisJCQlpZiAoZW50cnktPm51 bUxpc3RlbmVycyA9PSAwKQorCQkJeworCQkJCS8qIExhc3QgbGlzdGVuZXIgZm9yIHRoaXMg Y2hhbm5lbCAqLworCQkJCWRzYV9mcmVlKGNoYW5uZWxEU0EsIGVudHJ5LT5saXN0ZW5lcnNB cnJheSk7CisJCQkJZHNoYXNoX2RlbGV0ZV9lbnRyeShjaGFubmVsSGFzaCwgZW50cnkpOwor CQkJfQorCQkJZWxzZQorCQkJeworCQkJCWRzaGFzaF9yZWxlYXNlX2xvY2soY2hhbm5lbEhh c2gsIGVudHJ5KTsKKwkJCX0KKworCQkJbnVtQ2hhbm5lbHNMaXN0ZW5pbmdPbi0tOworCQkJ cmV0dXJuOwogCQl9CiAJfQogCisJZHNoYXNoX3JlbGVhc2VfbG9jayhjaGFubmVsSGFzaCwg ZW50cnkpOworCiAJLyoKIAkgKiBXZSBkbyBub3QgY29tcGxhaW4gYWJvdXQgdW5saXN0ZW5p bmcgc29tZXRoaW5nIG5vdCBiZWluZyBsaXN0ZW5lZDsKIAkgKiBzaG91bGQgd2U/CkBAIC0x MTkzLDMzICsxNDIzLDgyIEBAIEV4ZWNfVW5saXN0ZW5Db21taXQoY29uc3QgY2hhciAqY2hh bm5lbCkKIHN0YXRpYyB2b2lkCiBFeGVjX1VubGlzdGVuQWxsQ29tbWl0KHZvaWQpCiB7CisJ ZHNoYXNoX3NlcV9zdGF0dXMgc3RhdHVzOworCUNoYW5uZWxFbnRyeSAqZW50cnk7CisKIAlp ZiAoVHJhY2Vfbm90aWZ5KQogCQllbG9nKERFQlVHMSwgIkV4ZWNfVW5saXN0ZW5BbGxDb21t aXQoJWQpIiwgTXlQcm9jUGlkKTsKIAotCWxpc3RfZnJlZV9kZWVwKGxpc3RlbkNoYW5uZWxz KTsKLQlsaXN0ZW5DaGFubmVscyA9IE5JTDsKKwlpZiAoY2hhbm5lbEhhc2ggPT0gTlVMTCkK KwkJcmV0dXJuOworCisJZHNoYXNoX3NlcV9pbml0KCZzdGF0dXMsIGNoYW5uZWxIYXNoLCB0 cnVlKTsKKwl3aGlsZSAoKGVudHJ5ID0gZHNoYXNoX3NlcV9uZXh0KCZzdGF0dXMpKSAhPSBO VUxMKQorCXsKKwkJaWYgKGVudHJ5LT5rZXkuZGJvaWQgPT0gTXlEYXRhYmFzZUlkKQorCQl7 CisJCQlQcm9jTnVtYmVyICpsaXN0ZW5lcnM7CisJCQlpbnQJCQlpOworCisJCQlsaXN0ZW5l cnMgPSAoUHJvY051bWJlciAqKSBkc2FfZ2V0X2FkZHJlc3MoY2hhbm5lbERTQSwKKwkJCQkJ CQkJCQkJCQkgICBlbnRyeS0+bGlzdGVuZXJzQXJyYXkpOworCisJCQlmb3IgKGkgPSAwOyBp IDwgZW50cnktPm51bUxpc3RlbmVyczsgaSsrKQorCQkJeworCQkJCWlmIChsaXN0ZW5lcnNb aV0gPT0gTXlQcm9jTnVtYmVyKQorCQkJCXsKKwkJCQkJZW50cnktPm51bUxpc3RlbmVycy0t OworCQkJCQlpZiAoaSA8IGVudHJ5LT5udW1MaXN0ZW5lcnMpCisJCQkJCQltZW1tb3ZlKCZs aXN0ZW5lcnNbaV0sICZsaXN0ZW5lcnNbaSArIDFdLAorCQkJCQkJCQlzaXplb2YoUHJvY051 bWJlcikgKiAoZW50cnktPm51bUxpc3RlbmVycyAtIGkpKTsKKworCQkJCQlpZiAoZW50cnkt Pm51bUxpc3RlbmVycyA9PSAwKQorCQkJCQl7CisJCQkJCQlkc2FfZnJlZShjaGFubmVsRFNB LCBlbnRyeS0+bGlzdGVuZXJzQXJyYXkpOworCQkJCQkJZHNoYXNoX2RlbGV0ZV9jdXJyZW50 KCZzdGF0dXMpOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0K Kwlkc2hhc2hfc2VxX3Rlcm0oJnN0YXR1cyk7CisJbnVtQ2hhbm5lbHNMaXN0ZW5pbmdPbiA9 IDA7CiB9CiAKIC8qCiAgKiBUZXN0IHdoZXRoZXIgd2UgYXJlIGFjdGl2ZWx5IGxpc3Rlbmlu ZyBvbiB0aGUgZ2l2ZW4gY2hhbm5lbCBuYW1lLgogICoKICAqIE5vdGU6IHRoaXMgZnVuY3Rp b24gaXMgZXhlY3V0ZWQgZm9yIGV2ZXJ5IG5vdGlmaWNhdGlvbiBmb3VuZCBpbiB0aGUgcXVl dWUuCi0gKiBQZXJoYXBzIGl0IGlzIHdvcnRoIGZ1cnRoZXIgb3B0aW1pemF0aW9uLCBlZyBj b252ZXJ0IHRoZSBsaXN0IHRvIGEgc29ydGVkCi0gKiBhcnJheSBzbyB3ZSBjYW4gYmluYXJ5 LXNlYXJjaCBpdC4gIEluIHByYWN0aWNlIHRoZSBsaXN0IGlzIGxpa2VseSB0byBiZQotICog ZmFpcmx5IHNob3J0LCB0aG91Z2guCiAgKi8KIHN0YXRpYyBib29sCiBJc0xpc3RlbmluZ09u KGNvbnN0IGNoYXIgKmNoYW5uZWwpCiB7Ci0JTGlzdENlbGwgICAqcDsKKwlDaGFubmVsSGFz aEtleSBrZXk7CisJQ2hhbm5lbEVudHJ5ICplbnRyeTsKKwlQcm9jTnVtYmVyICpsaXN0ZW5l cnM7CiAKLQlmb3JlYWNoKHAsIGxpc3RlbkNoYW5uZWxzKQorCWluaXRDaGFubmVsSGFzaCgp OworCisJQ2hhbm5lbEhhc2hQcmVwYXJlS2V5KCZrZXksIE15RGF0YWJhc2VJZCwgY2hhbm5l bCk7CisKKwllbnRyeSA9IGRzaGFzaF9maW5kKGNoYW5uZWxIYXNoLCAma2V5LCBmYWxzZSk7 CisJaWYgKGVudHJ5ID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsJCQkvKiBObyBsaXN0ZW5l cnMgcmVnaXN0ZXJlZCBmb3IgdGhpcyBjaGFubmVsICovCisKKwlsaXN0ZW5lcnMgPSAoUHJv Y051bWJlciAqKSBkc2FfZ2V0X2FkZHJlc3MoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJICAg ZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgZW50cnkt Pm51bUxpc3RlbmVyczsgaSsrKQogCXsKLQkJY2hhcgkgICAqbGNoYW4gPSAoY2hhciAqKSBs Zmlyc3QocCk7Ci0KLQkJaWYgKHN0cmNtcChsY2hhbiwgY2hhbm5lbCkgPT0gMCkKKwkJaWYg KGxpc3RlbmVyc1tpXSA9PSBNeVByb2NOdW1iZXIpCisJCXsKKwkJCWRzaGFzaF9yZWxlYXNl X2xvY2soY2hhbm5lbEhhc2gsIGVudHJ5KTsKIAkJCXJldHVybiB0cnVlOworCQl9CiAJfQor CisJZHNoYXNoX3JlbGVhc2VfbG9jayhjaGFubmVsSGFzaCwgZW50cnkpOwogCXJldHVybiBm YWxzZTsKIH0KIApAQCAtMTIzMCw3ICsxNTA5LDcgQEAgSXNMaXN0ZW5pbmdPbihjb25zdCBj aGFyICpjaGFubmVsKQogc3RhdGljIHZvaWQKIGFzeW5jUXVldWVVbnJlZ2lzdGVyKHZvaWQp CiB7Ci0JQXNzZXJ0KGxpc3RlbkNoYW5uZWxzID09IE5JTCk7CS8qIGVsc2UgY2FsbGVyIGVy cm9yICovCisJQXNzZXJ0KG51bUNoYW5uZWxzTGlzdGVuaW5nT24gPT0gMCk7CS8qIGVsc2Ug Y2FsbGVyIGVycm9yICovCiAKIAlpZiAoIWFtUmVnaXN0ZXJlZExpc3RlbmVyKQkvKiBub3Ro aW5nIHRvIGRvICovCiAJCXJldHVybjsKQEAgLTE1NjUsMTIgKzE4NDQsMTYgQEAgYXN5bmNR dWV1ZUZpbGxXYXJuaW5nKHZvaWQpCiAvKgogICogU2VuZCBzaWduYWxzIHRvIGxpc3Rlbmlu ZyBiYWNrZW5kcy4KICAqCi0gKiBOb3JtYWxseSB3ZSBzaWduYWwgb25seSBiYWNrZW5kcyBp biBvdXIgb3duIGRhdGFiYXNlLCBzaW5jZSBvbmx5IHRob3NlCi0gKiBiYWNrZW5kcyBjb3Vs ZCBiZSBpbnRlcmVzdGVkIGluIG5vdGlmaWVzIHdlIHNlbmQuICBIb3dldmVyLCBpZiB0aGVy ZSdzCi0gKiBub3RpZnkgdHJhZmZpYyBpbiBvdXIgZGF0YWJhc2UgYnV0IG5vIHRyYWZmaWMg aW4gYW5vdGhlciBkYXRhYmFzZSB0aGF0Ci0gKiBkb2VzIGhhdmUgbGlzdGVuZXIocyksIHRo b3NlIGxpc3RlbmVycyB3aWxsIGZhbGwgZnVydGhlciBhbmQgZnVydGhlcgotICogYmVoaW5k LiAgV2FrZW4gdGhlbSBhbnl3YXkgaWYgdGhleSdyZSBmYXIgZW5vdWdoIGJlaGluZCwgc28g dGhhdCB0aGV5J2xsCi0gKiBhZHZhbmNlIHRoZWlyIHF1ZXVlIHBvc2l0aW9uIHBvaW50ZXJz LCBhbGxvd2luZyB0aGUgZ2xvYmFsIHRhaWwgdG8gYWR2YW5jZS4KKyAqIE5vcm1hbGx5IHdl IHNpZ25hbCBvbmx5IGJhY2tlbmRzIHJlZ2lzdGVyZWQgYXMgbGlzdGVuZXJzIGZvciBjaGFu bmVscworICogd2l0aCBwZW5kaW5nIG5vdGlmaWNhdGlvbnMuICBIb3dldmVyLCB3aGVuIHRo ZXJlIGlzIG5vIHRyYWZmaWMgb24gc29tZQorICogY2hhbm5lbHMsIGxpc3RlbmVycyBvbiBz dWNoIGNoYW5uZWxzIHdpbGwgZmFsbCBmdXJ0aGVyIGFuZCBmdXJ0aGVyCisgKiBiZWhpbmQu ICBXYWtlbiB0aGVtIGlmIHRoZXkgYXJlIHRvbyBmYXIgYmVoaW5kLCBzbyB0aGF0IHRoZXkn bGwKKyAqIGFkdmFuY2UgdGhlaXIgcXVldWUgcG9zaXRpb24gcG9pbnRlcnMsIGFsbG93aW5n IHRoZSBnbG9iYWwgdGFpbCB0bworICogYWR2YW5jZS4KKyAqCisgKiBUbyBzdGFnZ2VyIHdh a2V1cHMgb2YgbGFnZ2luZyBiYWNrZW5kcywgd2FrZSB0aGUgYmFja2VuZCBmdXJ0aGVzdAor ICogYmVoaW5kIChhdCB0aGUgdGFpbCksIGFtb3J0aXppbmcgdGhlIGNvbnRleHQtc3dpdGNo aW5nIGNvc3QgYWNyb3NzCisgKiBzdWNjZXNzaXZlIG5vdGlmaWNhdGlvbnMgaW5zdGVhZCBv ZiBwYXlpbmcgaXQgYWxsIGF0IG9uY2UuCiAgKgogICogU2luY2Ugd2Uga25vdyB0aGUgUHJv Y051bWJlciBhbmQgdGhlIFBpZCB0aGUgc2lnbmFsaW5nIGlzIHF1aXRlIGNoZWFwLgogICoK QEAgLTE1ODMsNiArMTg2Niw5IEBAIFNpZ25hbEJhY2tlbmRzKHZvaWQpCiAJaW50MzIJICAg KnBpZHM7CiAJUHJvY051bWJlciAqcHJvY25vczsKIAlpbnQJCQljb3VudDsKKwlMaXN0CSAg ICpjaGFubmVsczsKKwlMaXN0Q2VsbCAgICpsYzsKKwlpbnQ2NAkJcXVldWVfbGVuZ3RoOwog CiAJLyoKIAkgKiBJZGVudGlmeSBiYWNrZW5kcyB0aGF0IHdlIG5lZWQgdG8gc2lnbmFsLiAg V2UgZG9uJ3Qgd2FudCB0byBzZW5kCkBAIC0xNTk2LDM3ICsxODgyLDEwOSBAQCBTaWduYWxC YWNrZW5kcyh2b2lkKQogCXByb2Nub3MgPSAoUHJvY051bWJlciAqKSBwYWxsb2MoTWF4QmFj a2VuZHMgKiBzaXplb2YoUHJvY051bWJlcikpOwogCWNvdW50ID0gMDsKIAorCWNoYW5uZWxz ID0gR2V0UGVuZGluZ05vdGlmeUNoYW5uZWxzKCk7CisKIAlMV0xvY2tBY3F1aXJlKE5vdGlm eVF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKTsKLQlmb3IgKFByb2NOdW1iZXIgaSA9IFFVRVVF X0ZJUlNUX0xJU1RFTkVSOyBpICE9IElOVkFMSURfUFJPQ19OVU1CRVI7IGkgPSBRVUVVRV9O RVhUX0xJU1RFTkVSKGkpKQorCWZvcmVhY2gobGMsIGNoYW5uZWxzKQogCXsKLQkJaW50MzIJ CXBpZCA9IFFVRVVFX0JBQ0tFTkRfUElEKGkpOwotCQlRdWV1ZVBvc2l0aW9uIHBvczsKKwkJ Y2hhcgkgICAqY2hhbm5lbCA9IChjaGFyICopIGxmaXJzdChsYyk7CisJCUNoYW5uZWxFbnRy eSAqZW50cnkgPSBOVUxMOworCQlQcm9jTnVtYmVyICpsaXN0ZW5lcnM7CiAKLQkJQXNzZXJ0 KHBpZCAhPSBJbnZhbGlkUGlkKTsKLQkJcG9zID0gUVVFVUVfQkFDS0VORF9QT1MoaSk7Ci0J CWlmIChRVUVVRV9CQUNLRU5EX0RCT0lEKGkpID09IE15RGF0YWJhc2VJZCkKKwkJaWYgKGNo YW5uZWxIYXNoICE9IE5VTEwpCiAJCXsKLQkJCS8qCi0JCQkgKiBBbHdheXMgc2lnbmFsIGxp c3RlbmVycyBpbiBvdXIgb3duIGRhdGFiYXNlLCB1bmxlc3MgdGhleSdyZQotCQkJICogYWxy ZWFkeSBjYXVnaHQgdXAgKHVubGlrZWx5LCBidXQgcG9zc2libGUpLgotCQkJICovCisJCQlD aGFubmVsSGFzaEtleSBrZXk7CisKKwkJCUNoYW5uZWxIYXNoUHJlcGFyZUtleSgma2V5LCBN eURhdGFiYXNlSWQsIGNoYW5uZWwpOworCQkJZW50cnkgPSBkc2hhc2hfZmluZChjaGFubmVs SGFzaCwgJmtleSwgZmFsc2UpOworCQl9CisKKwkJaWYgKGVudHJ5ID09IE5VTEwpCisJCQlj b250aW51ZTsJCQkvKiBObyBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgdGhpcyBjaGFubmVs ICovCisKKwkJbGlzdGVuZXJzID0gKFByb2NOdW1iZXIgKikgZHNhX2dldF9hZGRyZXNzKGNo YW5uZWxEU0EsCisJCQkJCQkJCQkJCQkgICBlbnRyeS0+bGlzdGVuZXJzQXJyYXkpOworCisJ CWZvciAoaW50IGogPSAwOyBqIDwgZW50cnktPm51bUxpc3RlbmVyczsgaisrKQorCQl7CisJ CQlQcm9jTnVtYmVyCWkgPSBsaXN0ZW5lcnNbal07CisJCQlpbnQzMgkJcGlkOworCQkJUXVl dWVQb3NpdGlvbiBwb3M7CisKKwkJCWlmIChRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5H KGkpKQorCQkJCWNvbnRpbnVlOworCisJCQlwb3MgPSBRVUVVRV9CQUNLRU5EX1BPUyhpKTsK KwkJCXBpZCA9IFFVRVVFX0JBQ0tFTkRfUElEKGkpOworCisJCQkvKiBTa2lwIGlmIGNhdWdo dCB1cCBvciB3cm9uZyBkYXRhYmFzZSAqLwogCQkJaWYgKFFVRVVFX1BPU19FUVVBTChwb3Ms IFFVRVVFX0hFQUQpKQogCQkJCWNvbnRpbnVlOworCQkJaWYgKFFVRVVFX0JBQ0tFTkRfREJP SUQoaSkgIT0gTXlEYXRhYmFzZUlkKQorCQkJCWNvbnRpbnVlOworCisJCQlBc3NlcnQocGlk ICE9IEludmFsaWRQaWQpOworCisJCQlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkp ID0gdHJ1ZTsKKwkJCXBpZHNbY291bnRdID0gcGlkOworCQkJcHJvY25vc1tjb3VudF0gPSBp OworCQkJY291bnQrKzsKIAkJfQotCQllbHNlCisKKwkJZHNoYXNoX3JlbGVhc2VfbG9jayhj aGFubmVsSGFzaCwgZW50cnkpOworCX0KKworCXF1ZXVlX2xlbmd0aCA9IGFzeW5jUXVldWVQ YWdlRGlmZihRVUVVRV9QT1NfUEFHRShRVUVVRV9IRUFEKSwKKwkJCQkJCQkJCSAgUVVFVUVf UE9TX1BBR0UoUVVFVUVfVEFJTCkpOworCisJLyogQ2hlY2sgZm9yIGxhZ2dpbmcgYmFja2Vu ZHMgd2hlbiB0aGUgcXVldWUgc3BhbnMgbXVsdGlwbGUgcGFnZXMgKi8KKwlpZiAocXVldWVf bGVuZ3RoID4gMCkKKwl7CisJCWJvb2wJCXRhaWxfd29rZW4gPSBmYWxzZTsKKworCQlmb3Ig KFByb2NOdW1iZXIgaSA9IFFVRVVFX0ZJUlNUX0xJU1RFTkVSOworCQkJIGkgIT0gSU5WQUxJ RF9QUk9DX05VTUJFUjsKKwkJCSBpID0gUVVFVUVfTkVYVF9MSVNURU5FUihpKSkKIAkJewot CQkJLyoKLQkJCSAqIExpc3RlbmVycyBpbiBvdGhlciBkYXRhYmFzZXMgc2hvdWxkIGJlIHNp Z25hbGVkIG9ubHkgaWYgdGhleQotCQkJICogYXJlIGZhciBiZWhpbmQuCi0JCQkgKi8KLQkJ CWlmIChhc3luY1F1ZXVlUGFnZURpZmYoUVVFVUVfUE9TX1BBR0UoUVVFVUVfSEVBRCksCi0J CQkJCQkJCSAgIFFVRVVFX1BPU19QQUdFKHBvcykpIDwgUVVFVUVfQ0xFQU5VUF9ERUxBWSkK KwkJCVF1ZXVlUG9zaXRpb24gcG9zOworCQkJaW50NjQJCWxhZzsKKwkJCWludDMyCQlwaWQ7 CisKKwkJCWlmIChRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpKQogCQkJCWNvbnRp bnVlOworCisJCQlwb3MgPSBRVUVVRV9CQUNLRU5EX1BPUyhpKTsKKworCQkJLyogU2lnbmFs IG9uZSBiYWNrZW5kIHBvc2l0aW9uZWQgYXQgdGhlIGdsb2JhbCB0YWlsICovCisJCQlpZiAo IXRhaWxfd29rZW4gJiYgYXN5bmNRdWV1ZVBhZ2VEaWZmKFFVRVVFX1BPU19QQUdFKFFVRVVF X1RBSUwpLAorCQkJCQkJCQkJCQkJICBRVUVVRV9QT1NfUEFHRShwb3MpKSA9PSAwKQorCQkJ eworCQkJCXBpZCA9IFFVRVVFX0JBQ0tFTkRfUElEKGkpOworCQkJCUFzc2VydChwaWQgIT0g SW52YWxpZFBpZCk7CisKKwkJCQlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpID0g dHJ1ZTsKKwkJCQlwaWRzW2NvdW50XSA9IHBpZDsKKwkJCQlwcm9jbm9zW2NvdW50XSA9IGk7 CisJCQkJY291bnQrKzsKKwkJCQl0YWlsX3dva2VuID0gdHJ1ZTsKKwkJCQljb250aW51ZTsK KwkJCX0KKworCQkJbGFnID0gYXN5bmNRdWV1ZVBhZ2VEaWZmKFFVRVVFX1BPU19QQUdFKFFV RVVFX0hFQUQpLAorCQkJCQkJCQkJIFFVRVVFX1BPU19QQUdFKHBvcykpOworCisJCQkvKiBO ZWVkIHRvIHNpZ25hbCBpZiBhIGJhY2tlbmQgaGFzIGZhbGxlbiB0b28gZmFyIGJlaGluZCAq LworCQkJaWYgKGxhZyA+PSBRVUVVRV9DTEVBTlVQX0RFTEFZKQorCQkJeworCQkJCXBpZCA9 IFFVRVVFX0JBQ0tFTkRfUElEKGkpOworCQkJCUFzc2VydChwaWQgIT0gSW52YWxpZFBpZCk7 CisKKwkJCQlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpID0gdHJ1ZTsKKwkJCQlw aWRzW2NvdW50XSA9IHBpZDsKKwkJCQlwcm9jbm9zW2NvdW50XSA9IGk7CisJCQkJY291bnQr KzsKKwkJCX0KIAkJfQotCQkvKiBPSywgbmVlZCB0byBzaWduYWwgdGhpcyBvbmUgKi8KLQkJ cGlkc1tjb3VudF0gPSBwaWQ7Ci0JCXByb2Nub3NbY291bnRdID0gaTsKLQkJY291bnQrKzsK IAl9CiAJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwogCkBAIC0xNjczLDkgKzIw MzEsOSBAQCBBdEFib3J0X05vdGlmeSh2b2lkKQogCS8qCiAJICogSWYgd2UgTElTVEVOIGJ1 dCB0aGVuIHJvbGwgYmFjayB0aGUgdHJhbnNhY3Rpb24gYWZ0ZXIgUHJlQ29tbWl0X05vdGlm eSwKIAkgKiB3ZSBoYXZlIHJlZ2lzdGVyZWQgYXMgYSBsaXN0ZW5lciBidXQgaGF2ZSBub3Qg bWFkZSBhbnkgZW50cnkgaW4KLQkgKiBsaXN0ZW5DaGFubmVscy4gIEluIHRoYXQgY2FzZSwg ZGVyZWdpc3RlciBhZ2Fpbi4KKwkgKiBjaGFubmVsSGFzaC4gIEluIHRoYXQgY2FzZSwgZGVy ZWdpc3RlciBhZ2Fpbi4KIAkgKi8KLQlpZiAoYW1SZWdpc3RlcmVkTGlzdGVuZXIgJiYgbGlz dGVuQ2hhbm5lbHMgPT0gTklMKQorCWlmIChhbVJlZ2lzdGVyZWRMaXN0ZW5lciAmJiBudW1D aGFubmVsc0xpc3RlbmluZ09uID09IDApCiAJCWFzeW5jUXVldWVVbnJlZ2lzdGVyKCk7CiAK IAkvKiBBbmQgY2xlYW4gdXAgKi8KQEAgLTE4NjUsNiArMjIyMyw3IEBAIGFzeW5jUXVldWVS ZWFkQWxsTm90aWZpY2F0aW9ucyh2b2lkKQogCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVM b2NrLCBMV19TSEFSRUQpOwogCS8qIEFzc2VydCBjaGVja3MgdGhhdCB3ZSBoYXZlIGEgdmFs aWQgc3RhdGUgZW50cnkgKi8KIAlBc3NlcnQoTXlQcm9jUGlkID09IFFVRVVFX0JBQ0tFTkRf UElEKE15UHJvY051bWJlcikpOworCVFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoTXlQ cm9jTnVtYmVyKSA9IGZhbHNlOwogCXBvcyA9IFFVRVVFX0JBQ0tFTkRfUE9TKE15UHJvY051 bWJlcik7CiAJaGVhZCA9IFFVRVVFX0hFQUQ7CiAJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1 ZUxvY2spOwpAQCAtMjE4Niw3ICsyNTQ1LDcgQEAgUHJvY2Vzc0luY29taW5nTm90aWZ5KGJv b2wgZmx1c2gpCiAJbm90aWZ5SW50ZXJydXB0UGVuZGluZyA9IGZhbHNlOwogCiAJLyogRG8g bm90aGluZyBlbHNlIGlmIHdlIGFyZW4ndCBhY3RpdmVseSBsaXN0ZW5pbmcgKi8KLQlpZiAo bGlzdGVuQ2hhbm5lbHMgPT0gTklMKQorCWlmIChudW1DaGFubmVsc0xpc3RlbmluZ09uID09 IDApCiAJCXJldHVybjsKIAogCWlmIChUcmFjZV9ub3RpZnkpCkBAIC0yMzk1LDMgKzI3NTQs NTUgQEAgY2hlY2tfbm90aWZ5X2J1ZmZlcnMoaW50ICpuZXd2YWwsIHZvaWQgKipleHRyYSwg R3VjU291cmNlIHNvdXJjZSkKIHsKIAlyZXR1cm4gY2hlY2tfc2xydV9idWZmZXJzKCJub3Rp ZnlfYnVmZmVycyIsIG5ld3ZhbCk7CiB9CisKKworLyoKKyAqIENoYW5uZWxIYXNoUHJlcGFy ZUtleQorICoJCVByZXBhcmUgYSBjaGFubmVsIGtleSBmb3IgdXNlIGFzIGEgaGFzaCBrZXku CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorQ2hhbm5lbEhhc2hQcmVwYXJlS2V5KENoYW5u ZWxIYXNoS2V5ICprZXksIE9pZCBkYm9pZCwgY29uc3QgY2hhciAqY2hhbm5lbCkKK3sKKwlt ZW1zZXQoa2V5LCAwLCBzaXplb2YoQ2hhbm5lbEhhc2hLZXkpKTsKKwlrZXktPmRib2lkID0g ZGJvaWQ7CisJc3RybGNweShrZXktPmNoYW5uZWwsIGNoYW5uZWwsIE5BTUVEQVRBTEVOKTsK K30KKworLyoKKyAqIEdldFBlbmRpbmdOb3RpZnlDaGFubmVscworICoJCUdldCBsaXN0IG9m IHVuaXF1ZSBjaGFubmVsIG5hbWVzIGZyb20gcGVuZGluZyBub3RpZmljYXRpb25zLgorICov CitzdGF0aWMgTGlzdCAqCitHZXRQZW5kaW5nTm90aWZ5Q2hhbm5lbHModm9pZCkKK3sKKwlM aXN0CSAgICpjaGFubmVscyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpwOworCUxpc3RDZWxsICAg KnE7CisJYm9vbAkJZm91bmQ7CisKKwlpZiAoIXBlbmRpbmdOb3RpZmllcykKKwkJcmV0dXJu IE5JTDsKKworCWZvcmVhY2gocCwgcGVuZGluZ05vdGlmaWVzLT5ldmVudHMpCisJeworCQlO b3RpZmljYXRpb24gKm4gPSAoTm90aWZpY2F0aW9uICopIGxmaXJzdChwKTsKKwkJY2hhcgkg ICAqY2hhbm5lbCA9IG4tPmRhdGE7CisKKwkJZm91bmQgPSBmYWxzZTsKKwkJZm9yZWFjaChx LCBjaGFubmVscykKKwkJeworCQkJY2hhcgkgICAqZXhpc3RpbmcgPSAoY2hhciAqKSBsZmly c3QocSk7CisKKwkJCWlmIChzdHJjbXAoZXhpc3RpbmcsIGNoYW5uZWwpID09IDApCisJCQl7 CisJCQkJZm91bmQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCFm b3VuZCkKKwkJCWNoYW5uZWxzID0gbGFwcGVuZChjaGFubmVscywgY2hhbm5lbCk7CisJfQor CisJcmV0dXJuIGNoYW5uZWxzOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv YWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rp dml0eS93YWl0X2V2ZW50X25hbWVzLnR4dAppbmRleCA3NTUzZjZlYWNlZi4uYTRmYWRiZDA3 NjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRf bmFtZXMudHh0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRf bmFtZXMudHh0CkBAIC0zNjYsNiArMzY2LDcgQEAgU3VidHJhbnNCdWZmZXIJIldhaXRpbmcg Zm9yIEkvTyBvbiBhIHN1Yi10cmFuc2FjdGlvbiBTTFJVIGJ1ZmZlci4iCiBNdWx0aVhhY3RP ZmZzZXRCdWZmZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBhIG11bHRpeGFjdCBvZmZzZXQgU0xS VSBidWZmZXIuIgogTXVsdGlYYWN0TWVtYmVyQnVmZmVyCSJXYWl0aW5nIGZvciBJL08gb24g YSBtdWx0aXhhY3QgbWVtYmVyIFNMUlUgYnVmZmVyLiIKIE5vdGlmeUJ1ZmZlcgkiV2FpdGlu ZyBmb3IgSS9PIG9uIGEgPGNvbW1hbmQ+Tk9USUZZPC9jb21tYW5kPiBtZXNzYWdlIFNMUlUg YnVmZmVyLiIKK05vdGlmeUNoYW5uZWxIYXNoCSJXYWl0aW5nIHRvIGFjY2VzcyB0aGUgPGNv bW1hbmQ+Tk9USUZZPC9jb21tYW5kPiBjaGFubmVsIGhhc2ggdGFibGUuIgogU2VyaWFsQnVm ZmVyCSJXYWl0aW5nIGZvciBJL08gb24gYSBzZXJpYWxpemFibGUgdHJhbnNhY3Rpb24gY29u ZmxpY3QgU0xSVSBidWZmZXIuIgogV0FMSW5zZXJ0CSJXYWl0aW5nIHRvIGluc2VydCBXQUwg ZGF0YSBpbnRvIGEgbWVtb3J5IGJ1ZmZlci4iCiBCdWZmZXJDb250ZW50CSJXYWl0aW5nIHRv IGFjY2VzcyBhIGRhdGEgcGFnZSBpbiBtZW1vcnkuIgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xp c3QuaAppbmRleCAwNmExZmZkNGIwOC4uMjc2OGRkZjQ0MTQgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv bHdsb2NrbGlzdC5oCkBAIC0xMDAsNiArMTAwLDcgQEAgUEdfTFdMT0NLVFJBTkNIRShTVUJU UkFOU19CVUZGRVIsIFN1YnRyYW5zQnVmZmVyKQogUEdfTFdMT0NLVFJBTkNIRShNVUxUSVhB Q1RPRkZTRVRfQlVGRkVSLCBNdWx0aVhhY3RPZmZzZXRCdWZmZXIpCiBQR19MV0xPQ0tUUkFO Q0hFKE1VTFRJWEFDVE1FTUJFUl9CVUZGRVIsIE11bHRpWGFjdE1lbWJlckJ1ZmZlcikKIFBH X0xXTE9DS1RSQU5DSEUoTk9USUZZX0JVRkZFUiwgTm90aWZ5QnVmZmVyKQorUEdfTFdMT0NL VFJBTkNIRShOT1RJRllfQ0hBTk5FTF9IQVNILCBOb3RpZnlDaGFubmVsSGFzaCkKIFBHX0xX TE9DS1RSQU5DSEUoU0VSSUFMX0JVRkZFUiwgU2VyaWFsQnVmZmVyKQogUEdfTFdMT0NLVFJB TkNIRShXQUxfSU5TRVJULCBXQUxJbnNlcnQpCiBQR19MV0xPQ0tUUkFOQ0hFKEJVRkZFUl9D T05URU5ULCBCdWZmZXJDb250ZW50KQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRl eCA1MjkwYjkxZTgzZS4uNWNjZGQ0MDQzZTggMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CkBAIC00MTIsNiArNDEyLDggQEAgQ2F0YWxvZ0lkTWFwRW50cnkKIENhdGFsb2dJbmRl eFN0YXRlCiBDaGFuZ2VWYXJOb2Rlc19jYWxsYmFjawogQ2hhbmdlVmFyTm9kZXNfY29udGV4 dAorQ2hhbm5lbEVudHJ5CitDaGFubmVsSGFzaEtleQogQ2hlY2tQb2ludAogQ2hlY2tQb2lu dFN0bXQKIENoZWNrcG9pbnRTdGF0c0RhdGEKLS0gCjIuNTAuMQoK --5ad333c78b0644278947e72051debe82 Content-Disposition: attachment; filename*0="0003-optimize_listen_notify-v14.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0003-optimize=5Flisten=5Fnotify-v14.patch?=" Content-Transfer-Encoding: base64 RnJvbSBlOGRjZDllMWQwMzVkOGQ3MTEzMTJhODNkYWE3OTFkYTZkODkwNmE5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogU2F0LCAxMSBPY3QgMjAyNSAwNzoyODo1NyArMDIwMApTdWJqZWN0OiBbUEFU Q0ggMy8zXSBPcHRpbWl6ZSBMSVNURU4vTk9USUZZIGJ5IGFkdmFuY2luZyBpZGxlIGJhY2tl bmRzCiBkaXJlY3RseQoKQnVpbGRpbmcgb24gdGhlIHByZXZpb3VzIGNoYW5uZWwtc3BlY2lm aWMgbGlzdGVuZXIgdHJhY2tpbmcKb3B0aW1pemF0aW9uLCB0aGlzIHBhdGNoIGZ1cnRoZXIg cmVkdWNlcyBjb250ZXh0IHN3aXRjaGluZyBieSBkZXRlY3RpbmcKaWRsZSBsaXN0ZW5pbmcg YmFja2VuZHMgdGhhdCBkb24ndCBsaXN0ZW4gdG8gYW55IG9mIHRoZSBjaGFubmVscyBiZWlu Zwpub3RpZmllZCBhbmQgYWR2YW5jaW5nIHRoZWlyIHF1ZXVlIHBvc2l0aW9ucyBkaXJlY3Rs eSB3aXRob3V0IHdha2luZwp0aGVtIHVwLgoKV2hlbiBhIGJhY2tlbmQgY29tbWl0cyBub3Rp ZmljYXRpb25zLCBpdCBub3cgc2F2ZXMgYm90aCB0aGUgcXVldWUgaGVhZApwb3NpdGlvbiBi ZWZvcmUgYW5kIGFmdGVyIHdyaXRpbmcuIEluIFNpZ25hbEJhY2tlbmRzKCksIGJhY2tlbmRz IHRoYXQKYXJlIGF0IHRoZSBvbGQgcXVldWUgaGVhZCBhbmQgd2VyZW4ndCBtYXJrZWQgZm9y IHdha2V1cCAobWVhbmluZyB0aGV5CmRvbid0IGxpc3RlbiB0byBhbnkgb2YgdGhlIG5vdGlm aWVkIGNoYW5uZWxzKSBhcmUgYWR2YW5jZWQgZGlyZWN0bHkgdG8KdGhlIG5ldyBxdWV1ZSBo ZWFkLiBUaGlzIGVsaW1pbmF0ZXMgdW5uZWNlc3Nhcnkgd2FrZXVwcyBmb3IgdGhlc2UKYmFj a2VuZHMsIHdoaWNoIHdvdWxkIG90aGVyd2lzZSB3YWtlIHVwLCBzY2FuIHRocm91Z2ggYWxs IHRoZQpub3RpZmljYXRpb25zLCBza2lwIGVhY2ggb25lLCBhbmQgYWR2YW5jZSB0byB0aGUg c2FtZSBwb3NpdGlvbiBhbnl3YXkuCgpUaGUgaW1wbGVtZW50YXRpb24gY2FyZWZ1bGx5IGhh bmRsZXMgdGhlIHJhY2UgY29uZGl0aW9uIHdoZXJlIG90aGVyCmJhY2tlbmRzIG1heSB3cml0 ZSBub3RpZmljYXRpb25zIGFmdGVyIHRoZSBoZWF2eXdlaWdodCBsb2NrIGlzIHJlbGVhc2Vk CmJ1dCBiZWZvcmUgU2lnbmFsQmFja2VuZHMoKSBpcyBjYWxsZWQuIEJ5IHNhdmluZyBxdWV1 ZUhlYWRBZnRlcldyaXRlCmltbWVkaWF0ZWx5IGFmdGVyIHdyaXRpbmcgKGJlZm9yZSByZWxl YXNpbmcgdGhlIGxvY2spLCB3ZSBlbnN1cmUKYmFja2VuZHMgYXJlIG9ubHkgYWR2YW5jZWQg b3ZlciB0aGUgZXhhY3Qgbm90aWZpY2F0aW9ucyB3ZSB3cm90ZSwgbm90Cm5vdGlmaWNhdGlv bnMgZnJvbSBvdGhlciBjb25jdXJyZW50IGJhY2tlbmRzLgotLS0KIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL2FzeW5jLmMgfCA2MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKIDEgZmlsZSBjaGFuZ2VkLCA2MiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5j LmMKaW5kZXggYmI1ZWJmYWIyNmQuLmE0Y2M3Mzk1YzA4IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9hc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5j LmMKQEAgLTUwMCw2ICs1MDAsOCBAQCB0eXBlZGVmIHN0cnVjdCBOb3RpZmljYXRpb25MaXN0 CiAJaW50CQkJbmVzdGluZ0xldmVsOwkvKiBjdXJyZW50IHRyYW5zYWN0aW9uIG5lc3Rpbmcg ZGVwdGggKi8KIAlMaXN0CSAgICpldmVudHM7CQkJLyogbGlzdCBvZiBOb3RpZmljYXRpb24g c3RydWN0cyAqLwogCUhUQUIJICAgKmhhc2h0YWI7CQkvKiBoYXNoIG9mIE5vdGlmaWNhdGlv bkhhc2ggc3RydWN0cywgb3IgTlVMTCAqLworCVF1ZXVlUG9zaXRpb24gcXVldWVIZWFkQmVm b3JlV3JpdGU7IC8qIFFVRVVFX0hFQUQgYmVmb3JlIHdyaXRpbmcgbm90aWZpZXMgKi8KKwlR dWV1ZVBvc2l0aW9uIHF1ZXVlSGVhZEFmdGVyV3JpdGU7CS8qIFFVRVVFX0hFQUQgYWZ0ZXIg d3JpdGluZyBub3RpZmllcyAqLwogCXN0cnVjdCBOb3RpZmljYXRpb25MaXN0ICp1cHBlcjsg LyogZGV0YWlscyBmb3IgdXBwZXIgdHJhbnNhY3Rpb24gbGV2ZWxzICovCiB9IE5vdGlmaWNh dGlvbkxpc3Q7CiAKQEAgLTEwNDgsNiArMTA1MCw3IEBAIFByZUNvbW1pdF9Ob3RpZnkodm9p ZCkKIAlpZiAocGVuZGluZ05vdGlmaWVzKQogCXsKIAkJTGlzdENlbGwgICAqbmV4dE5vdGlm eTsKKwkJYm9vbAkJZmlyc3RJdGVyYXRpb24gPSB0cnVlOwogCiAJCS8qCiAJCSAqIE1ha2Ug c3VyZSB0aGF0IHdlIGhhdmUgYW4gWElEIGFzc2lnbmVkIHRvIHRoZSBjdXJyZW50IHRyYW5z YWN0aW9uLgpAQCAtMTA3Niw2ICsxMDc5LDkgQEAgUHJlQ29tbWl0X05vdGlmeSh2b2lkKQog CQlMb2NrU2hhcmVkT2JqZWN0KERhdGFiYXNlUmVsYXRpb25JZCwgSW52YWxpZE9pZCwgMCwK IAkJCQkJCSBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKIAorCQkvKiBJbml0aWFsaXplIHF1ZXVl SGVhZEJlZm9yZVdyaXRlIHRvIGEgc2FmZSBkZWZhdWx0ICovCisJCVNFVF9RVUVVRV9QT1Mo cGVuZGluZ05vdGlmaWVzLT5xdWV1ZUhlYWRCZWZvcmVXcml0ZSwgMCwgMCk7CisKIAkJLyog Tm93IHB1c2ggdGhlIG5vdGlmaWNhdGlvbnMgaW50byB0aGUgcXVldWUgKi8KIAkJbmV4dE5v dGlmeSA9IGxpc3RfaGVhZChwZW5kaW5nTm90aWZpZXMtPmV2ZW50cyk7CiAJCXdoaWxlIChu ZXh0Tm90aWZ5ICE9IE5VTEwpCkBAIC0xMDkzLDYgKzEwOTksMTkgQEAgUHJlQ29tbWl0X05v dGlmeSh2b2lkKQogCQkJICogcG9pbnQgaW4gdGltZSB3ZSBjYW4gc3RpbGwgcm9sbCB0aGUg dHJhbnNhY3Rpb24gYmFjay4KIAkJCSAqLwogCQkJTFdMb2NrQWNxdWlyZShOb3RpZnlRdWV1 ZUxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwkJCS8qCisJCQkgKiBPbiB0aGUgZmlyc3QgaXRl cmF0aW9uLCBzYXZlIHRoZSBxdWV1ZSBoZWFkIHBvc2l0aW9uIGJlZm9yZSB3ZQorCQkJICog d3JpdGUgYW55IG5vdGlmaWNhdGlvbnMuICBUaGlzIGlzIHVzZWQgYnkgU2lnbmFsQmFja2Vu ZHMoKSB0bworCQkJICogaWRlbnRpZnkgYmFja2VuZHMgdGhhdCBjYW4gYmUgYWR2YW5jZWQg ZGlyZWN0bHkgd2l0aG91dCB3YWtpbmcKKwkJCSAqIHRoZW0gdXAuCisJCQkgKi8KKwkJCWlm IChmaXJzdEl0ZXJhdGlvbikKKwkJCXsKKwkJCQlwZW5kaW5nTm90aWZpZXMtPnF1ZXVlSGVh ZEJlZm9yZVdyaXRlID0gUVVFVUVfSEVBRDsKKwkJCQlmaXJzdEl0ZXJhdGlvbiA9IGZhbHNl OworCQkJfQorCiAJCQlhc3luY1F1ZXVlRmlsbFdhcm5pbmcoKTsKIAkJCWlmIChhc3luY1F1 ZXVlSXNGdWxsKCkpCiAJCQkJZXJlcG9ydChFUlJPUiwKQEAgLTExMDIsNiArMTEyMSwxOCBA QCBQcmVDb21taXRfTm90aWZ5KHZvaWQpCiAJCQlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVl TG9jayk7CiAJCX0KIAorCQkvKgorCQkgKiBTYXZlIHRoZSBxdWV1ZSBoZWFkIGFmdGVyIHdy aXRpbmcgYWxsIG91ciBub3RpZmljYXRpb25zLiAgVGhpcyBpcworCQkgKiB1c2VkIGJ5IFNp Z25hbEJhY2tlbmRzKCkgdG8ga25vdyB3aGVyZSB0byBhZHZhbmNlIGlkbGUgYmFja2VuZHMg dG8uCisJCSAqIFdlIG11c3Qgc2F2ZSB0aGlzIG5vdyBiZWNhdXNlIG90aGVyIGJhY2tlbmRz IG1heSB3cml0ZSB0aGVpciBvd24KKwkJICogbm90aWZpY2F0aW9ucyBhZnRlciB3ZSByZWxl YXNlIHRoZSBoZWF2eXdlaWdodCBsb2NrIGJ1dCBiZWZvcmUgd2UKKwkJICogY2FsbCBTaWdu YWxCYWNrZW5kcygpLCBhbmQgd2UgbXVzdCBub3QgYWR2YW5jZSBiYWNrZW5kcyBvdmVyIHRo b3NlCisJCSAqIG90aGVyIG5vdGlmaWNhdGlvbnMuCisJCSAqLworCQlMV0xvY2tBY3F1aXJl KE5vdGlmeVF1ZXVlTG9jaywgTFdfU0hBUkVEKTsKKwkJcGVuZGluZ05vdGlmaWVzLT5xdWV1 ZUhlYWRBZnRlcldyaXRlID0gUVVFVUVfSEVBRDsKKwkJTFdMb2NrUmVsZWFzZShOb3RpZnlR dWV1ZUxvY2spOworCiAJCS8qIE5vdGUgdGhhdCB3ZSBkb24ndCBjbGVhciBwZW5kaW5nTm90 aWZpZXM7IEF0Q29tbWl0X05vdGlmeSB3aWxsLiAqLwogCX0KIH0KQEAgLTE5MzQsNiArMTk2 NSwzNyBAQCBTaWduYWxCYWNrZW5kcyh2b2lkKQogCQlkc2hhc2hfcmVsZWFzZV9sb2NrKGNo YW5uZWxIYXNoLCBlbnRyeSk7CiAJfQogCisJLyoKKwkgKiBBdm9pZCBuZWVkaW5nIHRvIHdh a2UgbGlzdGVuaW5nIGJhY2tlbmRzIHRoYXQgYXJlIGF0IHRoZSBvbGQgcXVldWUgaGVhZAor CSAqIChiZWZvcmUgd2Ugd3JvdGUgb3VyIG5vdGlmaWNhdGlvbnMpIHRoYXQgd2Uga25vdyBh cmUgbm90IGludGVyZXN0ZWQgaW4KKwkgKiBvdXIgbm90aWZpY2F0aW9ucywgc2luY2Ugb3Ro ZXJ3aXNlIHRoZXkgd291bGQgaGF2ZSBiZWVuIG1hcmtlZCBmb3IKKwkgKiB3YWtldXAgYnkg bm93LiAgRG8gdGhpcyBieSBhZHZhbmNpbmcgdGhlbSBkaXJlY3RseSB0byB0aGUgbmV3IHF1 ZXVlCisJICogaGVhZC4KKwkgKi8KKwlpZiAocGVuZGluZ05vdGlmaWVzICE9IE5VTEwpCisJ eworCQlRdWV1ZVBvc2l0aW9uIG9sZEhlYWQgPSBwZW5kaW5nTm90aWZpZXMtPnF1ZXVlSGVh ZEJlZm9yZVdyaXRlOworCQlRdWV1ZVBvc2l0aW9uIG5ld0hlYWQgPSBwZW5kaW5nTm90aWZp ZXMtPnF1ZXVlSGVhZEFmdGVyV3JpdGU7CisKKwkJZm9yIChQcm9jTnVtYmVyIGkgPSBRVUVV RV9GSVJTVF9MSVNURU5FUjsKKwkJCSBpICE9IElOVkFMSURfUFJPQ19OVU1CRVI7CisJCQkg aSA9IFFVRVVFX05FWFRfTElTVEVORVIoaSkpCisJCXsKKwkJCVF1ZXVlUG9zaXRpb24gcG9z OworCisJCQlpZiAoUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhpKSkKKwkJCQljb250 aW51ZTsKKworCQkJcG9zID0gUVVFVUVfQkFDS0VORF9QT1MoaSk7CisKKwkJCWlmIChRVUVV RV9QT1NfRVFVQUwocG9zLCBvbGRIZWFkKSAmJgorCQkJCVFVRVVFX0JBQ0tFTkRfREJPSUQo aSkgPT0gTXlEYXRhYmFzZUlkKQorCQkJeworCQkJCVFVRVVFX0JBQ0tFTkRfUE9TKGkpID0g bmV3SGVhZDsKKwkJCX0KKwkJfQorCX0KKwogCXF1ZXVlX2xlbmd0aCA9IGFzeW5jUXVldWVQ YWdlRGlmZihRVUVVRV9QT1NfUEFHRShRVUVVRV9IRUFEKSwKIAkJCQkJCQkJCSAgUVVFVUVf UE9TX1BBR0UoUVVFVUVfVEFJTCkpOwogCi0tIAoyLjUwLjEKCg== --5ad333c78b0644278947e72051debe82 Content-Disposition: attachment; filename*0="pgbench-listen-notify-benchmark-patch.txt" Content-Type: text/plain; name="pgbench-listen-notify-benchmark-patch.txt" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgYi9zcmMvYmluL3BnYmVu Y2gvcGdiZW5jaC5jCmluZGV4IDE1MTVlZDQwNWJhLi5iNDYyZGNjODM0OCAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYworKysgYi9zcmMvYmluL3BnYmVuY2gvcGdi ZW5jaC5jCkBAIC0zNSw2ICszNSw3IEBACiAKICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1 ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KICNpbmNsdWRlIDxsaW1pdHMu aD4KICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CkBAIC0yMzcsNiAr MjM4LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBQQVJUSVRJT05fTUVUSE9EW10g PSB7Im5vbmUiLCAicmFuZ2UiLCAiaGFzaCJ9OwogLyogcmFuZG9tIHNlZWQgdXNlZCB0byBp bml0aWFsaXplIGJhc2VfcmFuZG9tX3NlcXVlbmNlICovCiBzdGF0aWMgaW50NjQgcmFuZG9t X3NlZWQgPSAtMTsKIAorLyogTElTVEVOL05PVElGWSBiZW5jaG1hcmsgbW9kZSBwYXJhbWV0 ZXJzICovCitzdGF0aWMgYm9vbCBsaXN0ZW5fbm90aWZ5X21vZGUgPSBmYWxzZTsJLyogZW5h YmxlIExJU1RFTi9OT1RJRlkgYmVuY2htYXJrICovCitzdGF0aWMgaW50CW5vdGlmeV9yb3Vu ZF90cmlwcyA9IDEwMDsJLyogbnVtYmVyIG9mIHJvdW5kLXRyaXBzIHBlciBpdGVyYXRpb24g Ki8KK3N0YXRpYyBpbnQJbm90aWZ5X2lkbGVfc3RlcCA9IDEwOwkJLyogaWRsZSBsaXN0ZW5l cnMgdG8gYWRkIHBlciBpdGVyYXRpb24gKi8KKwogLyoKICAqIGVuZCBvZiBjb25maWd1cmFi bGUgcGFyYW1ldGVycwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTkzMCw2ICs5MzYsMTAgQEAg dXNhZ2Uodm9pZCkKIAkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIChzYW1lIGFz IFwiLWIgc2ltcGxlLXVwZGF0ZVwiKVxuIgogCQkgICAiICAtUywgLS1zZWxlY3Qtb25seSAg ICAgICAgcGVyZm9ybSBTRUxFQ1Qtb25seSB0cmFuc2FjdGlvbnNcbiIKIAkJICAgIiAgICAg ICAgICAgICAgICAgICAgICAgICAgIChzYW1lIGFzIFwiLWIgc2VsZWN0LW9ubHlcIilcbiIK KwkJICAgIiAgLS1saXN0ZW4tbm90aWZ5LWJlbmNobWFya1xuIgorCQkgICAiICAgICAgICAg ICAgICAgICAgICAgICAgICAgcnVuIExJU1RFTi9OT1RJRlkgcm91bmQtdHJpcCBiZW5jaG1h cmtcbiIKKwkJICAgIiAgLS1ub3RpZnktcm91bmQtdHJpcHM9TlVNIG51bWJlciBvZiByb3Vu ZC10cmlwcyBwZXIgaXRlcmF0aW9uIChkZWZhdWx0OiAxMDApXG4iCisJCSAgICIgIC0tbm90 aWZ5LWlkbGUtc3RlcD1OVU0gICBpZGxlIGxpc3RlbmVycyB0byBhZGQgcGVyIGl0ZXJhdGlv biAoZGVmYXVsdDogMTApXG4iCiAJCSAgICJcbkJlbmNobWFya2luZyBvcHRpb25zOlxuIgog CQkgICAiICAtYywgLS1jbGllbnQ9TlVNICAgICAgICAgbnVtYmVyIG9mIGNvbmN1cnJlbnQg ZGF0YWJhc2UgY2xpZW50cyAoZGVmYXVsdDogMSlcbiIKIAkJICAgIiAgLUMsIC0tY29ubmVj dCAgICAgICAgICAgIGVzdGFibGlzaCBuZXcgY29ubmVjdGlvbiBmb3IgZWFjaCB0cmFuc2Fj dGlvblxuIgpAQCAtNjY4OSw2ICs2Njk5LDIxNiBAQCBzZXRfcmFuZG9tX3NlZWQoY29uc3Qg Y2hhciAqc2VlZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyoKKyAqIFJ1biBMSVNURU4vTk9U SUZZIHJvdW5kLXRyaXAgYmVuY2htYXJrCisgKgorICogVGhpcyBiZW5jaG1hcmsgbWVhc3Vy ZXMgdGhlIHJvdW5kLXRyaXAgdGltZSBiZXR3ZWVuIHR3byBwcm9jZXNzZXMgdGhhdAorICog cGluZy1wb25nIE5PVElGWSBtZXNzYWdlcyB3aGlsZSBhZGRpbmcgaWRsZSBsaXN0ZW5pbmcg Y29ubmVjdGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkCitydW5MaXN0ZW5Ob3RpZnlCZW5jaG1h cmsodm9pZCkKK3sKKwlQR2Nvbm4JICAgKmNvbm4xID0gTlVMTDsKKwlQR2Nvbm4JICAgKmNv bm4yID0gTlVMTDsKKwlQR2Nvbm4JICAqKmlkbGVfY29ubnMgPSBOVUxMOworCWludAkJCW51 bV9pZGxlID0gMDsKKwlpbnQJCQltYXhfaWRsZSA9IDEwMDAwOwkvKiByZWFzb25hYmxlIHVw cGVyIGxpbWl0ICovCisJUEdyZXN1bHQgICAqcmVzOworCWNoYXIJCWNoYW5uZWwxW10gPSAi cGdiZW5jaF9jaGFubmVsXzEiOworCWNoYXIJCWNoYW5uZWwyW10gPSAicGdiZW5jaF9jaGFu bmVsXzIiOworCWNoYXIJCW5vdGlmeV9jbWRbMjU2XTsKKwlib29sCQlmaXJzdF9mYWlsdXJl ID0gZmFsc2U7CisKKwlwZ19sb2dfaW5mbygic3RhcnRpbmcgTElTVEVOL05PVElGWSByb3Vu ZC10cmlwIGJlbmNobWFyayIpOworCXBnX2xvZ19pbmZvKCJyb3VuZC10cmlwcyBwZXIgaXRl cmF0aW9uOiAlZCIsIG5vdGlmeV9yb3VuZF90cmlwcyk7CisJcGdfbG9nX2luZm8oImlkbGUg bGlzdGVuZXJzIGFkZGVkIHBlciBpdGVyYXRpb246ICVkIiwgbm90aWZ5X2lkbGVfc3RlcCk7 CisJcHJpbnRmKCJcbiUxNHMgICUxOXMgICUxOXNcbiIsICJpZGxlX2xpc3RlbmVycyIsICJy b3VuZF90cmlwc19wZXJfc2VjIiwgIm1heF9sYXRlbmN5X3VzZWMiKTsKKworCS8qIEFsbG9j YXRlIGFycmF5IGZvciBpZGxlIGNvbm5lY3Rpb25zICovCisJaWRsZV9jb25ucyA9IChQR2Nv bm4gKiopIHBnX21hbGxvYzAobWF4X2lkbGUgKiBzaXplb2YoUEdjb25uICopKTsKKworCS8q IENyZWF0ZSB0d28gYWN0aXZlIGNvbm5lY3Rpb25zIGZvciBwaW5nLXBvbmcgKi8KKwljb25u MSA9IGRvQ29ubmVjdCgpOworCWlmIChjb25uMSA9PSBOVUxMKQorCQlwZ19mYXRhbCgiZmFp bGVkIHRvIGNyZWF0ZSBjb25uZWN0aW9uIDEiKTsKKworCWNvbm4yID0gZG9Db25uZWN0KCk7 CisJaWYgKGNvbm4yID09IE5VTEwpCisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gY3JlYXRlIGNv bm5lY3Rpb24gMiIpOworCisJLyogU2V0IHVwIExJU1RFTiBvbiBib3RoIGNvbm5lY3Rpb25z ICovCisJc25wcmludGYobm90aWZ5X2NtZCwgc2l6ZW9mKG5vdGlmeV9jbWQpLCAiTElTVEVO ICVzIiwgY2hhbm5lbDEpOworCXJlcyA9IFBRZXhlYyhjb25uMSwgbm90aWZ5X2NtZCk7CisJ aWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJcGdfZmF0 YWwoIkxJU1RFTiBmYWlsZWQgb24gY29ubmVjdGlvbiAxOiAlcyIsIFBRZXJyb3JNZXNzYWdl KGNvbm4xKSk7CisJUFFjbGVhcihyZXMpOworCisJc25wcmludGYobm90aWZ5X2NtZCwgc2l6 ZW9mKG5vdGlmeV9jbWQpLCAiTElTVEVOICVzIiwgY2hhbm5lbDIpOworCXJlcyA9IFBRZXhl Yyhjb25uMiwgbm90aWZ5X2NtZCk7CisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdS RVNfQ09NTUFORF9PSykKKwkJcGdfZmF0YWwoIkxJU1RFTiBmYWlsZWQgb24gY29ubmVjdGlv biAyOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4yKSk7CisJUFFjbGVhcihyZXMpOworCisJ LyogTWFpbiBiZW5jaG1hcmsgbG9vcDogbWVhc3VyZSByb3VuZC10cmlwcyB0aGVuIGFkZCBp ZGxlIGNvbm5lY3Rpb25zICovCisJd2hpbGUgKG51bV9pZGxlIDwgbWF4X2lkbGUpCisJewor CQlpbnQJCQlpOworCQlpbnQ2NAkJdG90YWxfbGF0ZW5jeSA9IDA7CisJCWludDY0CQltYXhf bGF0ZW5jeSA9IDA7CisKKwkJLyogUGVyZm9ybSByb3VuZC10cmlwIG1lYXN1cmVtZW50cyAq LworCQlmb3IgKGkgPSAwOyBpIDwgbm90aWZ5X3JvdW5kX3RyaXBzOyBpKyspCisJCXsKKwkJ CXBnX3RpbWVfdXNlY190IHN0YXJ0X3RpbWUsCisJCQkJCQllbmRfdGltZTsKKwkJCWludDY0 CQlsYXRlbmN5OworCQkJUEdub3RpZnkgICAqbm90aWZ5OworCQkJaW50CQkJc29jazsKKwkJ CWZkX3NldAkJaW5wdXRfbWFzazsKKwkJCXN0cnVjdCB0aW1ldmFsIHR2OworCisJCQkvKiBD bGVhciBhbnkgcGVuZGluZyBub3RpZmljYXRpb25zICovCisJCQlQUWNvbnN1bWVJbnB1dChj b25uMSk7CisJCQl3aGlsZSAoKG5vdGlmeSA9IFBRbm90aWZpZXMoY29ubjEpKSAhPSBOVUxM KQorCQkJCVBRZnJlZW1lbShub3RpZnkpOworCQkJUFFjb25zdW1lSW5wdXQoY29ubjIpOwor CQkJd2hpbGUgKChub3RpZnkgPSBQUW5vdGlmaWVzKGNvbm4yKSkgIT0gTlVMTCkKKwkJCQlQ UWZyZWVtZW0obm90aWZ5KTsKKworCQkJLyogU3RhcnQgdGltZXIgYW5kIHNlbmQgbm90aWZp Y2F0aW9uIGZyb20gY29ubjEgKi8KKwkJCXN0YXJ0X3RpbWUgPSBwZ190aW1lX25vdygpOwor CQkJc25wcmludGYobm90aWZ5X2NtZCwgc2l6ZW9mKG5vdGlmeV9jbWQpLCAiTk9USUZZICVz IiwgY2hhbm5lbDIpOworCQkJcmVzID0gUFFleGVjKGNvbm4xLCBub3RpZnlfY21kKTsKKwkJ CWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0spCisJCQkJcGdf ZmF0YWwoIk5PVElGWSBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubjEpKTsKKwkJ CVBRY2xlYXIocmVzKTsKKworCQkJLyogV2FpdCBmb3Igbm90aWZpY2F0aW9uIG9uIGNvbm4y ICovCisJCQlzb2NrID0gUFFzb2NrZXQoY29ubjIpOworCQkJbm90aWZ5ID0gTlVMTDsKKwkJ CXdoaWxlIChub3RpZnkgPT0gTlVMTCkKKwkJCXsKKwkJCQlQUWNvbnN1bWVJbnB1dChjb25u Mik7CisJCQkJbm90aWZ5ID0gUFFub3RpZmllcyhjb25uMik7CisJCQkJaWYgKG5vdGlmeSA9 PSBOVUxMKQorCQkJCXsKKwkJCQkJLyogV2FpdCBmb3IgZGF0YSBvbiBzb2NrZXQgKi8KKwkJ CQkJRkRfWkVSTygmaW5wdXRfbWFzayk7CisJCQkJCUZEX1NFVChzb2NrLCAmaW5wdXRfbWFz ayk7CisJCQkJCXR2LnR2X3NlYyA9IDEwOwkvKiAxMCBzZWNvbmQgdGltZW91dCAqLworCQkJ CQl0di50dl91c2VjID0gMDsKKwkJCQkJaWYgKHNlbGVjdChzb2NrICsgMSwgJmlucHV0X21h c2ssIE5VTEwsIE5VTEwsICZ0dikgPCAwKQorCQkJCQkJcGdfZmF0YWwoInNlbGVjdCgpIGZh aWxlZDogJW0iKTsKKwkJCQl9CisJCQl9CisJCQlQUWZyZWVtZW0obm90aWZ5KTsKKworCQkJ LyogU2VuZCBub3RpZmljYXRpb24gYmFjayBmcm9tIGNvbm4yICovCisJCQlzbnByaW50Zihu b3RpZnlfY21kLCBzaXplb2Yobm90aWZ5X2NtZCksICJOT1RJRlkgJXMiLCBjaGFubmVsMSk7 CisJCQlyZXMgPSBQUWV4ZWMoY29ubjIsIG5vdGlmeV9jbWQpOworCQkJaWYgKFBRcmVzdWx0 U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJCQlwZ19mYXRhbCgiTk9USUZZ IGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uMikpOworCQkJUFFjbGVhcihyZXMp OworCisJCQkvKiBXYWl0IGZvciBub3RpZmljYXRpb24gb24gY29ubjEgKi8KKwkJCXNvY2sg PSBQUXNvY2tldChjb25uMSk7CisJCQlub3RpZnkgPSBOVUxMOworCQkJd2hpbGUgKG5vdGlm eSA9PSBOVUxMKQorCQkJeworCQkJCVBRY29uc3VtZUlucHV0KGNvbm4xKTsKKwkJCQlub3Rp ZnkgPSBQUW5vdGlmaWVzKGNvbm4xKTsKKwkJCQlpZiAobm90aWZ5ID09IE5VTEwpCisJCQkJ eworCQkJCQkvKiBXYWl0IGZvciBkYXRhIG9uIHNvY2tldCAqLworCQkJCQlGRF9aRVJPKCZp bnB1dF9tYXNrKTsKKwkJCQkJRkRfU0VUKHNvY2ssICZpbnB1dF9tYXNrKTsKKwkJCQkJdHYu dHZfc2VjID0gMTA7CS8qIDEwIHNlY29uZCB0aW1lb3V0ICovCisJCQkJCXR2LnR2X3VzZWMg PSAwOworCQkJCQlpZiAoc2VsZWN0KHNvY2sgKyAxLCAmaW5wdXRfbWFzaywgTlVMTCwgTlVM TCwgJnR2KSA8IDApCisJCQkJCQlwZ19mYXRhbCgic2VsZWN0KCkgZmFpbGVkOiAlbSIpOwor CQkJCX0KKwkJCX0KKwkJCVBRZnJlZW1lbShub3RpZnkpOworCisJCQkvKiBFbmQgdGltZXIg Ki8KKwkJCWVuZF90aW1lID0gcGdfdGltZV9ub3coKTsKKworCQkJLyogQ2FsY3VsYXRlIGlu ZGl2aWR1YWwgcm91bmQtdHJpcCBsYXRlbmN5ICovCisJCQlsYXRlbmN5ID0gZW5kX3RpbWUg LSBzdGFydF90aW1lOworCisJCQkvKiBBY2N1bXVsYXRlIHRvdGFsIGxhdGVuY3kgYW5kIHRy YWNrIG1heGltdW0gKi8KKwkJCXRvdGFsX2xhdGVuY3kgKz0gbGF0ZW5jeTsKKwkJCWlmIChs YXRlbmN5ID4gbWF4X2xhdGVuY3kpCisJCQkJbWF4X2xhdGVuY3kgPSBsYXRlbmN5OworCQl9 CisKKwkJLyogQ2FsY3VsYXRlIGFuZCByZXBvcnQgcm91bmQtdHJpcHMgcGVyIHNlY29uZCBh bmQgbWF4IGxhdGVuY3kgKi8KKwkJZnByaW50ZihzdGRvdXQsICIlMTRkICAlMTkuMWYgICUx OSIgUFJJZDY0ICJcbiIsCisJCQkJbnVtX2lkbGUsCisJCQkJMTAwMDAwMC4wICogbm90aWZ5 X3JvdW5kX3RyaXBzIC8gdG90YWxfbGF0ZW5jeSwKKwkJCQltYXhfbGF0ZW5jeSk7CisJCWZm bHVzaChzdGRvdXQpOworCisJCS8qIFN0b3AgaWYgd2UgaGl0IGNvbm5lY3Rpb24gbGltaXQg Ki8KKwkJaWYgKGZpcnN0X2ZhaWx1cmUpCisJCQlicmVhazsKKworCQkvKiBBZGQgaWRsZSBs aXN0ZW5pbmcgY29ubmVjdGlvbnMgKi8KKwkJZm9yIChpID0gMDsgaSA8IG5vdGlmeV9pZGxl X3N0ZXAgJiYgbnVtX2lkbGUgPCBtYXhfaWRsZTsgaSsrKQorCQl7CisJCQlQR2Nvbm4JICAg KmlkbGVfY29ubjsKKwkJCWNoYXIJCWlkbGVfY2hhbm5lbFsyNTZdOworCisJCQlpZGxlX2Nv bm4gPSBkb0Nvbm5lY3QoKTsKKwkJCWlmIChpZGxlX2Nvbm4gPT0gTlVMTCkKKwkJCXsKKwkJ CQlpZiAoIWZpcnN0X2ZhaWx1cmUpCisJCQkJeworCQkJCQlwZ19sb2dfaW5mbygicmVhY2hl ZCBtYXhfY29ubmVjdGlvbnMgYXQgJWQgaWRsZSBsaXN0ZW5lcnMiLCBudW1faWRsZSk7CisJ CQkJCWZpcnN0X2ZhaWx1cmUgPSB0cnVlOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwor CQkJLyogRWFjaCBpZGxlIGNvbm5lY3Rpb24gbGlzdGVucyBvbiBhIHVuaXF1ZSBjaGFubmVs ICovCisJCQlzbnByaW50ZihpZGxlX2NoYW5uZWwsIHNpemVvZihpZGxlX2NoYW5uZWwpLCAi aWRsZV8lZCIsIG51bV9pZGxlKTsKKwkJCXNucHJpbnRmKG5vdGlmeV9jbWQsIHNpemVvZihu b3RpZnlfY21kKSwgIkxJU1RFTiAlcyIsIGlkbGVfY2hhbm5lbCk7CisKKwkJCXJlcyA9IFBR ZXhlYyhpZGxlX2Nvbm4sIG5vdGlmeV9jbWQpOworCQkJaWYgKFBRcmVzdWx0U3RhdHVzKHJl cykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJCXsKKwkJCQlwZ19sb2dfd2FybmluZygiTElT VEVOIGZhaWxlZCBvbiBpZGxlIGNvbm5lY3Rpb24gJWQ6ICVzIiwKKwkJCQkJCQkgICBudW1f aWRsZSwgUFFlcnJvck1lc3NhZ2UoaWRsZV9jb25uKSk7CisJCQkJUFFmaW5pc2goaWRsZV9j b25uKTsKKwkJCQlQUWNsZWFyKHJlcyk7CisJCQkJZmlyc3RfZmFpbHVyZSA9IHRydWU7CisJ CQkJYnJlYWs7CisJCQl9CisJCQlQUWNsZWFyKHJlcyk7CisKKwkJCWlkbGVfY29ubnNbbnVt X2lkbGVdID0gaWRsZV9jb25uOworCQkJbnVtX2lkbGUrKzsKKwkJfQorCisJCS8qIFN0b3Ag aWYgd2UgY291bGRuJ3QgYWRkIGFueSBjb25uZWN0aW9ucyAqLworCQlpZiAoZmlyc3RfZmFp bHVyZSAmJiBpID09IDApCisJCQlicmVhazsKKwl9CisKKwkvKiBDbGVhbiB1cCAqLworCXBn X2xvZ19pbmZvKCJjbGVhbmluZyB1cCBjb25uZWN0aW9ucyIpOworCVBRZmluaXNoKGNvbm4x KTsKKwlQUWZpbmlzaChjb25uMik7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1faWRsZTsg aSsrKQorCXsKKwkJaWYgKGlkbGVfY29ubnNbaV0pCisJCQlQUWZpbmlzaChpZGxlX2Nvbm5z W2ldKTsKKwl9CisJcGdfZnJlZShpZGxlX2Nvbm5zKTsKKworCXBnX2xvZ19pbmZvKCJMSVNU RU4vTk9USUZZIGJlbmNobWFyayBjb21wbGV0ZWQiKTsKK30KKwogaW50CiBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKIHsKQEAgLTY3MzksNiArNjk1OSw5IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQogCQl7InZlcmJvc2UtZXJyb3JzIiwgbm9fYXJndW1lbnQsIE5V TEwsIDE1fSwKIAkJeyJleGl0LW9uLWFib3J0Iiwgbm9fYXJndW1lbnQsIE5VTEwsIDE2fSwK IAkJeyJkZWJ1ZyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAxN30sCisJCXsibGlzdGVuLW5vdGlm eS1iZW5jaG1hcmsiLCBub19hcmd1bWVudCwgTlVMTCwgMTh9LAorCQl7Im5vdGlmeS1yb3Vu ZC10cmlwcyIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAxOX0sCisJCXsibm90aWZ5LWlk bGUtc3RlcCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAyMH0sCiAJCXtOVUxMLCAwLCBO VUxMLCAwfQogCX07CiAKQEAgLTcwOTIsNiArNzMxNSwyMiBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAkJCWNhc2UgMTc6CQkJLyogZGVidWcgKi8KIAkJCQlwZ19sb2dnaW5n X2luY3JlYXNlX3ZlcmJvc2l0eSgpOwogCQkJCWJyZWFrOworCQkJY2FzZSAxODoJCQkvKiBs aXN0ZW4tbm90aWZ5LWJlbmNobWFyayAqLworCQkJCWxpc3Rlbl9ub3RpZnlfbW9kZSA9IHRy dWU7CisJCQkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOworCQkJCWJyZWFrOwor CQkJY2FzZSAxOToJCQkvKiBub3RpZnktcm91bmQtdHJpcHMgKi8KKwkJCQliZW5jaG1hcmtp bmdfb3B0aW9uX3NldCA9IHRydWU7CisJCQkJaWYgKCFvcHRpb25fcGFyc2VfaW50KG9wdGFy ZywgIi0tbm90aWZ5LXJvdW5kLXRyaXBzIiwgMSwgSU5UX01BWCwKKwkJCQkJCQkJCSAgJm5v dGlmeV9yb3VuZF90cmlwcykpCisJCQkJCWV4aXQoMSk7CisJCQkJYnJlYWs7CisJCQljYXNl IDIwOgkJCS8qIG5vdGlmeS1pZGxlLXN0ZXAgKi8KKwkJCQliZW5jaG1hcmtpbmdfb3B0aW9u X3NldCA9IHRydWU7CisJCQkJaWYgKCFvcHRpb25fcGFyc2VfaW50KG9wdGFyZywgIi0tbm90 aWZ5LWlkbGUtc3RlcCIsIDEsIElOVF9NQVgsCisJCQkJCQkJCQkgICZub3RpZnlfaWRsZV9z dGVwKSkKKwkJCQkJZXhpdCgxKTsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJLyog Z2V0b3B0X2xvbmcgYWxyZWFkeSBlbWl0dGVkIGEgY29tcGxhaW50ICovCiAJCQkJcGdfbG9n X2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIs IHByb2duYW1lKTsKQEAgLTcyMTAsNiArNzQ0OSwyMCBAQCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKIAkJCXBnX2ZhdGFsKCJzb21lIG9mIHRoZSBzcGVjaWZpZWQgb3B0aW9ucyBj YW5ub3QgYmUgdXNlZCBpbiBiZW5jaG1hcmtpbmcgbW9kZSIpOwogCX0KIAorCS8qIEhhbmRs ZSBMSVNURU4vTk9USUZZIGJlbmNobWFyayBtb2RlICovCisJaWYgKGxpc3Rlbl9ub3RpZnlf bW9kZSkKKwl7CisJCS8qIEVzdGFibGlzaCBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gZm9yIHNl dHVwICovCisJCWlmICgoY29uID0gZG9Db25uZWN0KCkpID09IE5VTEwpCisJCQlwZ19mYXRh bCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UiKTsKKworCQkvKiBSdW4gdGhlIExJ U1RFTi9OT1RJRlkgYmVuY2htYXJrICovCisJCXJ1bkxpc3Rlbk5vdGlmeUJlbmNobWFyaygp OworCisJCVBRZmluaXNoKGNvbik7CisJCWV4aXQoMCk7CisJfQorCiAJaWYgKG54YWN0cyA+ IDAgJiYgZHVyYXRpb24gPiAwKQogCQlwZ19mYXRhbCgic3BlY2lmeSBlaXRoZXIgYSBudW1i ZXIgb2YgdHJhbnNhY3Rpb25zICgtdCkgb3IgYSBkdXJhdGlvbiAoLVQpLCBub3QgYm90aCIp OwogCg== --5ad333c78b0644278947e72051debe82--