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 1uzLoO-002TOw-DM for pgsql-hackers@arkaria.postgresql.org; Thu, 18 Sep 2025 21:05:05 +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 1uzLoM-0026SD-6U for pgsql-hackers@arkaria.postgresql.org; Thu, 18 Sep 2025 21:05:02 +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 1uzLoK-0026R6-W8 for pgsql-hackers@lists.postgresql.org; Thu, 18 Sep 2025 21:05:01 +0000 Received: from relay4-d.mail.gandi.net ([217.70.183.196]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1uzLoA-0019ft-0g for pgsql-hackers@lists.postgresql.org; Thu, 18 Sep 2025 21:04:59 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 1DE9C44592; Thu, 18 Sep 2025 21:04:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vondra.me; s=gm1; t=1758229487; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=69Jo/AGr3pccdGzqveJl3F0rALwCHqN3grw/X3VwTcw=; b=h9paZz+o/tMb9C6t5zLzkqZG8e+0lvCpjwuvQO7gykl1QUgcCd7cCf2Gjfk/r8WCvJsdAw hPmrTsVE/0ZTdPQaskRYRauBjoQq3zFd7nnGEdnUjvC87i/OhrUxMCo3zLCFwWRXnBRgUg 0Z2K930oIX7oalUtrZIVzn+nCBmw54D+6nzNpcJcx7OzaFDRb0rSJeeQAnXUSE5DUVSX5v ZFo6b/eWGqL8tLODHK+2MSkmP8PHG84Yk8ul0HUOoyoE4vCdcNHE7+pE+oxEf0Z6O9Eac+ qncAIMuGTFvZLENAEvgZTcwKHym8OJRWIdzNsow46pp5VuEgopi3Rr3JZk7pyA== Content-Type: multipart/mixed; boundary="------------7ugtFjYi6YRzRLN0MXp6Nj6F" Message-ID: <659c44a5-f616-492c-ab81-60273d2fe7f6@vondra.me> Date: Thu, 18 Sep 2025 23:04:45 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Adding basic NUMA awareness From: Tomas Vondra To: Andres Freund Cc: Jakub Wartak , PostgreSQL Hackers References: <5a2410f8-62a9-4483-bf0a-3a8331fb0808@vondra.me> <71a46484-053c-4b81-ba32-ddac050a8b5d@vondra.me> <1b5bf372-6d40-4022-bf4f-367ffb61ee51@vondra.me> <51e51832-7f47-412a-a1a6-b972101cc8cb@vondra.me> <874435bd-5e25-4a7c-a5d5-8ef0c262d788@vondra.me> <6636d842-e8a5-44bc-a206-6df415380a7b@vondra.me> Content-Language: en-US In-Reply-To: <6636d842-e8a5-44bc-a206-6df415380a7b@vondra.me> X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdegjeefiecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfitefpfffkpdcuggftfghnshhusghstghrihgsvgenuceurghilhhouhhtmecufedtudenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurheptgfkffggfgfuhffvvehfjgesmhdtreertddvjeenucfhrhhomhepvfhomhgrshcugghonhgurhgruceothhomhgrshesvhhonhgurhgrrdhmvgeqnecuggftrfgrthhtvghrnhepteehgedugeeigedviedtgeekteeitdehleevffeggffguedvudeuffeluedvveeunecukfhppeekiedrgeelrddvfedtrddvtdeinecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepkeeirdegledrvdeftddrvddtiedphhgvlhhopegluddtrddufeejrddtrddvngdpmhgrihhlfhhrohhmpehtohhmrghssehvohhnughrrgdrmhgvpdhnsggprhgtphhtthhopeefpdhrtghpthhtoheprghnughrvghssegrnhgrrhgriigvlhdruggvpdhrtghpthhtohepjhgrkhhusgdrfigrrhhtrghksegvnhhtvghrphhrihhsvggusgdrtghomhdprhgtphhtthhopehpghhsqhhlqdhhrggtkhgvrhhssehlihhsthhsrdhpohhsthhgrhgvshhqlhdrohhrgh X-GND-Sasl: tomas@vondra.me List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------7ugtFjYi6YRzRLN0MXp6Nj6F Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 9/11/25 10:32, Tomas Vondra wrote: > ... > > 8) I've realized some of the TAP tests occasionally fail with > > ERROR: no unpinned buffers > > and I think I know why. Some of the tests set shared_buffers to a very > low value - like 1MB or even 128kB, and StrategyGetBuffer() may search > only a single partition (but not always). We may run out of unpinned > buffers in that one partition. > > This apparently happens more easily on rpi5, due to the weird NUMA > layout (there are 8 nodes with memory, but getcpu() reports node 0 for > all cores). > > I suspect the correct fix is to ensure StrategyGetBuffer() scans all > partitions, if there are no unpinned buffers in the current one. On > realistic setups this shouldn't happen very often, I think. > > The other issue I just realized is that StrategyGetBuffer() recalculates > the partition index over and over, which seems unnecessary (and possibly > expensive, due to the modulo). And it also does too many loops, because > it used NBuffers instead of the partition size. I'll fix those later. Here's a version fixing this issue (in the 0006 part). It modifies StrategyGetBuffer() to walk through all the partitions, in a round-robin manner. The way it steps to the next partition is a bit ugly, but it works and I'll think about some better way. I haven't done anything about the other issue (the one with huge pages reserved on NUMA nodes, and SIGBUS). regards -- Tomas Vondra --------------7ugtFjYi6YRzRLN0MXp6Nj6F Content-Type: text/x-patch; charset=UTF-8; name="v20250918-0001-NUMA-shared-buffers-partitioning.patch" Content-Disposition: attachment; filename="v20250918-0001-NUMA-shared-buffers-partitioning.patch" Content-Transfer-Encoding: base64 RnJvbSA5MTQxYmI4OWJjZTQ4NTg3Mzk3OGUxYWUzOTg4YjQzZTY3NWVlMDQ3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogV2VkLCAxNyBTZXAgMjAyNSAyMzowNDoyOSArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUwOTE4IDEvNl0gTlVNQTogc2hhcmVkIGJ1ZmZlcnMgcGFydGl0aW9uaW5nCgpFbnN1 cmUgc2hhcmVkIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBmcm9tIGFsbCBOVU1BIG5vZGVzLCBp biBhIGJhbGFuY2VkCndheSwgaW5zdGVhZCBvZiBqdXN0IHVzaW5nIHRoZSBub2RlIHdoZXJl IFBvc3RncmVzIGluaXRpYWxseSBzdGFydHMsIG9yCndoZXJlIHRoZSBrZXJuZWwgZGVjaWRl cyB0byBtaWdyYXRlIHRoZSBwYWdlLCBldGMuIFdpdGggcHJlLXdhcm1pbmcKcGVyZm9ybWVk IGJ5IGEgc2luZ2xlIGJhY2tlbmQsIHRoaXMgY2FuIGVhc2lseSByZXN1bHQgaW4gc2V2ZXJl bHkKdW5iYWxhbmNlZCBtZW1vcnkgZGlzdHJpYnV0aW9uICh3aXRoIG1vc3QgZnJvbSBhIHNp bmdsZSBOVU1BIG5vZGUpLgoKVGhlIGtlcm5lbCB3b3VsZCBldmVudHVhbGx5IG1vdmUgc29t ZSBvZiB0aGUgbWVtb3J5IHRvIG90aGVyIG5vZGVzCih0aGFua3MgdG8gem9uZV9yZWNsYWlt KSwgYnV0IHRoYXQgdGVuZHMgdG8gdGFrZSBhIGxvbmcgdGltZS4gU28gdGhpcwpwYXRjaCBp bXByb3ZlcyBwcmVkaWN0YWJpbGl0eSwgcmVkdWNlcyB0aGUgdGltZSBuZWVkZWQgZm9yIHdh cm11cApkdXJpbmcgYmVuY2htYXJraW5nLCBldGMuICBJdCdzIGxlc3MgZGVwZW5kZW50IG9u IHdoYXQgdGhlIENQVQpzY2hlZHVsZXIgZG9lcywgZXRjLgoKRnVydGhlcm1vcmUsIHRoZSBi dWZmZXJzIGFyZSBtYXBwZWQgdG8gTlVNQSBub2RlcyBpbiBhIGRldGVybWluaXN0aWMKd2F5 LCBzbyB0aGlzIGFsc28gYWxsb3dzIGZ1cnRoZXIgaW1wcm92ZW1lbnRzIGxpa2UgYmFja2Vu ZHMgdXNpbmcKYnVmZmVycyBmcm9tIHRoZSBzYW1lIE5VTUEgbm9kZS4KClRoZSBlZmZlY3Qg aXMgc2ltaWxhciB0bwoKICAgICBudW1hY3RsIC0taW50ZXJsZWF2ZT1hbGwKCmJ1dCB0aGVy ZSdzIGEgbnVtYmVyIG9mIGltcG9ydGFudCBkaWZmZXJlbmNlcy4KCkZpcnN0bHksIGl0J3Mg YXBwbGllZCBvbmx5IHRvIHNoYXJlZCBidWZmZXJzIChhbmQgYWxzbyB0byBkZXNjcmlwdG9y cyksCm5vdCB0byB0aGUgd2hvbGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50LiBJdCdzIG5vdCBj bGVhciB3ZSdkIHdhbnQgdG8gdXNlCmludGVybGVhdmluZyBmb3IgYWxsIHBhcnRzLCBzdG9y aW5nIGVudHJpZXMgd2l0aCBkaWZmZXJlbnQgc2l6ZXMgYW5kCmxpZmUgY3ljbGVzIChlLmcu IFByb2NBcnJheSBtYXkgbmVlZCBkaWZmZXJlbnQgYXBwcm9hY2gpLgoKU2Vjb25kbHksIGl0 IGNvbnNpZGVycyB0aGUgcGFnZSBhbmQgYmxvY2sgc2l6ZSwgYW5kIG1ha2VzIHN1cmUgdG8g YWx3YXlzCnB1dCB0aGUgd2hvbGUgYnVmZmVyIG9uIGEgc2luZ2xlIE5VTUEgbm9kZSAoZXZl biBpZiBpdCBoYXBwZW5zIHRvIHVzZQptdWx0aXBsZSBtZW1vcnkgcGFnZXMpLCBhbmQgdG8g a2VlcCB0aGUgYnVmZmVyIGFuZCBpdCdzIGRlc2NyaXB0b3Igb24KdGhlIHNhbWUgTlVNQSBu b2RlLiBUaGUgc2VyaW91c25lc3MvbGlrZWxpaG9vZCBvZiB0aGVzZSBpc3N1ZXMgZGVwZW5k cwpvbiB0aGUgbWVtb3J5IHBhZ2Ugc2l6ZSAocmVndWxhciB2cy4gaHVnZSBwYWdlcykuCgpU aGUgbWFwcGluZyBvZiBtZW1vcnkgdG8gTlVNQSBub2RlcyBoYXBwZW5zIGluIGxhcmdlciBj aHVua3MuIFRoaXMgaXMKcmVxdWlyZWQgdG8gaGFuZGxlIGJ1ZmZlciBkZXNjcmlwdG9ycyAo d2hpY2ggYXJlIHNtYWxsZXIgdGhhbiBidWZmZXJzKSwKYW5kIHNvIG1hbnkgbW9yZSBmaXQg b250byBhIHNpbmdsZSBtZW1vcnkgcGFnZS4KClRoZSBudW1iZXIgb2YgYnVmZmVyIGRlc2Ny aXB0b3JzIHBlciBtZW1vcnkgcGFnZSBkZXRlcm1pbmVzIHRoZSBzbWFsbGVzdApudW1iZXIg b2YgYnVmZmVycyB0aGF0IGNhbiBiZSBwbGFjZWQgb24gYSBOVU1BIG5vZGUuIFdpdGggMk1C IGh1Z2UgcGFnZXMKdGhpcyBpcyAyNTZNQiwgd2l0aCA0S0IgcGFnZXMgdGhpcyBpcyA1MTJL QikuIE5vZGVzIGdldCBhIG11bHRpcGxlIG9mCnRoaXMsIGFuZCB3ZSB0cnkgdG8ga2VlcCB0 aGUgbm9kZXMgYmFsYW5jZWQgLSB0aGUgbGFzdCBub2RlIGNhbiBnZXQgbGVzcwptZW1vcnks IHRob3VnaC4KClRoZSAiYnVmZmVyIHBhcnRpdGlvbnMiIG1heSBub3QgYmUgMToxIHdpdGgg TlVNQSBub2Rlcy4gVGhlcmUncyBhCm1pbmltYWwgbnVtYmVyIG9mIHBhcnRpdGlvbnMgKGRl ZmF1bHQ6IDQpIHRoYXQgd2lsbCBiZSBjcmVhdGVkIGV2ZW4gd2l0aApmZXdlciBOVU1BIG5v ZGVzLCBvciBubyBOVU1BIGF0IGFsbC4gRWFjaCBub2RlIGdldHMgdGhlIHNhbWUgbnVtYmVy IG9mCnBhcnRpdGlvbnMsIHRvIGtlZXAgdGhpbmdzIHNpbXBsZS4gRm9yIGV4YW1wbGUsIHdp dGggMiBub2RlcyB0aGVyZSdsbCBiZQo0IHBhcnRpdGlvbnMsIHdpdGggZWFjaCBub2RlIGdl dHRpbmcgMiBvZiB0aGVtLiBXaXRoIDMgbm9kZXMgdGhlcmUnbGwgYmUKNiBwYXJ0aXRpb25z IChhZ2FpbiwgMiBwZXIgbm9kZSkuCgpUaGlzIGFsbG93cyBwYXJ0aXRpb25pbmcgY2xvY2st c3dlZXAgaW4gYSBsYXRlciBwYXRjaCwgd2l0aCBvbmUgY2xvY2sKaGFuZCBwZXIgcGFydGl0 aW9uLgoKVGhlIHBhdGNoIGludHJvZHVjZXMgYSBzaW1wbGUgInJlZ2lzdHJ5IiBvZiBidWZm ZXIgcGFydGl0aW9ucywga2VlcGluZwp0cmFjayBvZiB0aGUgZmlyc3QvbGFzdCBidWZmZXIs IE5VTUEgbm9kZSwgZXRjLiBUaGlzIHNlcnZlcyBhcyBhIHNvdXJjZQpvZiB0cnV0aCwgYm90 aCBmb3IgdGhpcyBwYXRjaCBhbmQgZm9yIGxhdGVyIHBhdGNoZXMgYnVpbGRpbmcgb24gdGhp cwpzYW1lIGJ1ZmZlciBwYXJ0aXRpb24gc3RydWN0dXJlLgoKV2l0aCB0aGUgZmVhdHVyZSBk aXNhYmxlZCAoR1VDIHNldCB0byBlbXB0eSBsaXN0KSwgdGhlcmUnbGwgYmUgYSBzaW5nbGUK cGFydGl0aW9uIGZvciBhbGwgdGhlIGJ1ZmZlcnMgKGFuZCBpdCB3b24ndCBiZSBtYXBwZWQg dG8gYSBOVU1BIG5vZGUpLgoKTm90ZXM6CgoqIFRoZSBmZWF0dXJlIGlzIGVuYWJsZWQgYnkg ZGVidWdfbnVtYSA9IGJ1ZmZlcnMgR1VDIChkZWZhdWx0OiBlbXB0eSksCiAgd2hpY2ggd29y a3Mgc2ltaWxhcmx5IHRvIGRlYnVnX2lvX2RpcmVjdC4KCiogVGhpcyBwYXRjaCBwYXJ0aXRp b25zIGp1c3Qgc2hhcmVkIGJ1ZmZlcnMsIG5vdCB0aGUgd2hvbGUgc2hhcmVkCiAgbWVtb3J5 LiBBIGxhdGVyIHBhdGNoIHdpbGwgZG8gdGhhdCBmb3IgUEdQUk9DLCBidXQgaXQncyB0cmlj a3kgYW5kCiAgcmVxdWlyZXMgYSBkaWZmZXJlbnQgYXBwcm9hY2ggYmVjYXVzZSBvZiBodWdl IHBhZ2VzLgotLS0KIGNvbnRyaWIvcGdfYnVmZmVyY2FjaGUvTWFrZWZpbGUgICAgICAgICAg ICAgICB8ICAgMiArLQogY29udHJpYi9wZ19idWZmZXJjYWNoZS9tZXNvbi5idWlsZCAgICAg ICAgICAgIHwgICAxICsKIC4uLi9wZ19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsICAgICAg ICAgICAgICB8ICAyNiArCiBjb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hl LmNvbnRyb2wgfCAgIDIgKy0KIGNvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2Fj aGVfcGFnZXMuYyB8ICA5MiArKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9p bml0LmMgICAgICAgICB8IDYyNyArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0ICAgICB8ICAxMCArCiBzcmMvYmFja2VuZC91 dGlscy9taXNjL2d1Y190YWJsZXMuYyAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUv cG9ydC9wZ19udW1hLmggICAgICAgICAgICAgICAgICAgIHwgICA2ICsKIHNyYy9pbmNsdWRl L3N0b3JhZ2UvYnVmX2ludGVybmFscy5oICAgICAgICAgICB8ICAxNiArLQogc3JjL2luY2x1 ZGUvc3RvcmFnZS9idWZtZ3IuaCAgICAgICAgICAgICAgICAgIHwgIDIzICsKIHNyYy9pbmNs dWRlL3V0aWxzL2d1Y19ob29rcy5oICAgICAgICAgICAgICAgICB8ICAgMyArCiBzcmMvcG9y dC9wZ19udW1hLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNjQgKysKIHNyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMiArCiAxNCBm aWxlcyBjaGFuZ2VkLCA4NTkgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0t MS42LS0xLjcuc3FsCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9NYWtl ZmlsZSBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvTWFrZWZpbGUKaW5kZXggNWY3NDg1NDNl MmUuLjBlNjE4ZjY2YWVjIDEwMDY0NAotLS0gYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL01h a2VmaWxlCisrKyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvTWFrZWZpbGUKQEAgLTksNyAr OSw3IEBAIEVYVEVOU0lPTiA9IHBnX2J1ZmZlcmNhY2hlCiBEQVRBID0gcGdfYnVmZmVyY2Fj aGUtLTEuMi5zcWwgcGdfYnVmZmVyY2FjaGUtLTEuMi0tMS4zLnNxbCBcCiAJcGdfYnVmZmVy Y2FjaGUtLTEuMS0tMS4yLnNxbCBwZ19idWZmZXJjYWNoZS0tMS4wLS0xLjEuc3FsIFwKIAlw Z19idWZmZXJjYWNoZS0tMS4zLS0xLjQuc3FsIHBnX2J1ZmZlcmNhY2hlLS0xLjQtLTEuNS5z cWwgXAotCXBnX2J1ZmZlcmNhY2hlLS0xLjUtLTEuNi5zcWwKKwlwZ19idWZmZXJjYWNoZS0t MS41LS0xLjYuc3FsIHBnX2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwKIFBHRklMRURFU0Mg PSAicGdfYnVmZmVyY2FjaGUgLSBtb25pdG9yaW5nIG9mIHNoYXJlZCBidWZmZXIgY2FjaGUg aW4gcmVhbC10aW1lIgogCiBSRUdSRVNTID0gcGdfYnVmZmVyY2FjaGUgcGdfYnVmZmVyY2Fj aGVfbnVtYQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9tZXNvbi5idWls ZCBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvbWVzb24uYnVpbGQKaW5kZXggN2NkMDM5YTFk ZjkuLjdjMzExNDE4ODFmIDEwMDY0NAotLS0gYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL21l c29uLmJ1aWxkCisrKyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvbWVzb24uYnVpbGQKQEAg LTI0LDYgKzI0LDcgQEAgaW5zdGFsbF9kYXRhKAogICAncGdfYnVmZmVyY2FjaGUtLTEuMy0t MS40LnNxbCcsCiAgICdwZ19idWZmZXJjYWNoZS0tMS40LS0xLjUuc3FsJywKICAgJ3BnX2J1 ZmZlcmNhY2hlLS0xLjUtLTEuNi5zcWwnLAorICAncGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43 LnNxbCcsCiAgICdwZ19idWZmZXJjYWNoZS5jb250cm9sJywKICAga3dhcmdzOiBjb250cmli X2RhdGFfYXJncywKICkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdf YnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbCBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdf YnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uZmI5MDAzYzAxMWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3Bn X2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwKQEAgLTAsMCArMSwy NiBAQAorLyogY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS42LS0x Ljcuc3FsICovCisKKy0tIGNvbXBsYWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWws IHJhdGhlciB0aGFuIHZpYSBDUkVBVEUgRVhURU5TSU9OCitcZWNobyBVc2UgIkFMVEVSIEVY VEVOU0lPTiBwZ19idWZmZXJjYWNoZSBVUERBVEUgVE8gJzEuNyciIHRvIGxvYWQgdGhpcyBm aWxlLiBccXVpdAorCistLSBSZWdpc3RlciB0aGUgbmV3IGZ1bmN0aW9ucy4KK0NSRUFURSBP UiBSRVBMQUNFIEZVTkNUSU9OIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMoKQorUkVUVVJO UyBTRVRPRiBSRUNPUkQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfYnVmZmVyY2FjaGVf cGFydGl0aW9ucycKK0xBTkdVQUdFIEMgUEFSQUxMRUwgU0FGRTsKKworLS0gQ3JlYXRlIGEg dmlldyBmb3IgY29udmVuaWVudCBhY2Nlc3MuCitDUkVBVEUgVklFVyBwZ19idWZmZXJjYWNo ZV9wYXJ0aXRpb25zIEFTCisJU0VMRUNUIFAuKiBGUk9NIHBnX2J1ZmZlcmNhY2hlX3BhcnRp dGlvbnMoKSBBUyBQCisJKHBhcnRpdGlvbiBpbnRlZ2VyLAkJCS0tIHBhcnRpdGlvbiBpbmRl eAorCSBudW1hX25vZGUgaW50ZWdlciwJCQktLSBOVU1BIG5vZGUgb2YgdGhlIHBhcnRpdGlv b24KKwkgbnVtX2J1ZmZlcnMgaW50ZWdlciwJCS0tIG51bWJlciBvZiBidWZmZXJzIGluIHRo ZSBwYXJ0aXRpb24KKwkgZmlyc3RfYnVmZmVyIGludGVnZXIsCQktLSBmaXJzdCBidWZmZXIg b2YgcGFydGl0aW9uCisJIGxhc3RfYnVmZmVyIGludGVnZXIpOwkJLS0gbGFzdCBidWZmZXIg b2YgcGFydGl0aW9uCisKKy0tIERvbid0IHdhbnQgdGhlc2UgdG8gYmUgYXZhaWxhYmxlIHRv IHB1YmxpYy4KK1JFVk9LRSBBTEwgT04gRlVOQ1RJT04gcGdfYnVmZmVyY2FjaGVfcGFydGl0 aW9ucygpIEZST00gUFVCTElDOworUkVWT0tFIEFMTCBPTiBwZ19idWZmZXJjYWNoZV9wYXJ0 aXRpb25zIEZST00gUFVCTElDOworCitHUkFOVCBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2J1 ZmZlcmNhY2hlX3BhcnRpdGlvbnMoKSBUTyBwZ19tb25pdG9yOworR1JBTlQgU0VMRUNUIE9O IHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMgVE8gcGdfbW9uaXRvcjsKZGlmZiAtLWdpdCBh L2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUuY29udHJvbCBiL2NvbnRy aWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUuY29udHJvbAppbmRleCBiMDMwYmEz YTZmYS4uMTE0OTk1NTA5NDUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUv cGdfYnVmZmVyY2FjaGUuY29udHJvbAorKysgYi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3Bn X2J1ZmZlcmNhY2hlLmNvbnRyb2wKQEAgLTEsNSArMSw1IEBACiAjIHBnX2J1ZmZlcmNhY2hl IGV4dGVuc2lvbgogY29tbWVudCA9ICdleGFtaW5lIHRoZSBzaGFyZWQgYnVmZmVyIGNhY2hl JwotZGVmYXVsdF92ZXJzaW9uID0gJzEuNicKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjcnCiBt b2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci9wZ19idWZmZXJjYWNoZScKIHJlbG9jYXRhYmxl ID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJj YWNoZV9wYWdlcy5jIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9w YWdlcy5jCmluZGV4IDNkZjA0Yzk4OTU5Li44YTBhNGJkNWNkNiAxMDA2NDQKLS0tIGEvY29u dHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jCisrKyBiL2NvbnRy aWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYwpAQCAtMjcsNiArMjcs NyBAQAogI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfRVZJQ1RfQUxMX0VMRU0gMwogCiAjZGVm aW5lIE5VTV9CVUZGRVJDQUNIRV9OVU1BX0VMRU0JMworI2RlZmluZSBOVU1fQlVGRkVSQ0FD SEVfUEFSVElUSU9OU19FTEVNCTUKIAogUEdfTU9EVUxFX01BR0lDX0VYVCgKIAkJCQkJLm5h bWUgPSAicGdfYnVmZmVyY2FjaGUiLApAQCAtMTAwLDYgKzEwMSw3IEBAIFBHX0ZVTkNUSU9O X0lORk9fVjEocGdfYnVmZmVyY2FjaGVfdXNhZ2VfY291bnRzKTsKIFBHX0ZVTkNUSU9OX0lO Rk9fVjEocGdfYnVmZmVyY2FjaGVfZXZpY3QpOwogUEdfRlVOQ1RJT05fSU5GT19WMShwZ19i dWZmZXJjYWNoZV9ldmljdF9yZWxhdGlvbik7CiBQR19GVU5DVElPTl9JTkZPX1YxKHBnX2J1 ZmZlcmNhY2hlX2V2aWN0X2FsbCk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2J1ZmZlcmNh Y2hlX3BhcnRpdGlvbnMpOwogCiAKIC8qIE9ubHkgbmVlZCB0byB0b3VjaCBtZW1vcnkgb25j ZSBwZXIgYmFja2VuZCBwcm9jZXNzIGxpZmV0aW1lICovCkBAIC03NzcsMyArNzc5LDkzIEBA IHBnX2J1ZmZlcmNhY2hlX2V2aWN0X2FsbChQR19GVU5DVElPTl9BUkdTKQogCiAJUEdfUkVU VVJOX0RBVFVNKHJlc3VsdCk7CiB9CisKKy8qCisgKiBJbnF1aXJlIGFib3V0IHBhcnRpdGlv bmluZyBvZiBidWZmZXJzIGJldHdlZW4gTlVNQSBub2Rlcy4KKyAqLworRGF0dW0KK3BnX2J1 ZmZlcmNhY2hlX3BhcnRpdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlGdW5jQ2FsbENv bnRleHQgKmZ1bmNjdHg7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCVR1cGxlRGVz Ywl0dXBsZWRlc2M7CisJVHVwbGVEZXNjCWV4cGVjdGVkX3R1cGxlZGVzYzsKKwlIZWFwVHVw bGUJdHVwbGU7CisJRGF0dW0JCXJlc3VsdDsKKworCWlmIChTUkZfSVNfRklSU1RDQUxMKCkp CisJeworCQlmdW5jY3R4ID0gU1JGX0ZJUlNUQ0FMTF9JTklUKCk7CisKKwkJLyogU3dpdGNo IGNvbnRleHQgd2hlbiBhbGxvY2F0aW5nIHN0dWZmIHRvIGJlIHVzZWQgaW4gbGF0ZXIgY2Fs bHMgKi8KKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5t dWx0aV9jYWxsX21lbW9yeV9jdHgpOworCisJCWlmIChnZXRfY2FsbF9yZXN1bHRfdHlwZShm Y2luZm8sIE5VTEwsICZleHBlY3RlZF90dXBsZWRlc2MpICE9IFRZUEVGVU5DX0NPTVBPU0lU RSkKKwkJCWVsb2coRVJST1IsICJyZXR1cm4gdHlwZSBtdXN0IGJlIGEgcm93IHR5cGUiKTsK KworCQlpZiAoZXhwZWN0ZWRfdHVwbGVkZXNjLT5uYXR0cyAhPSBOVU1fQlVGRkVSQ0FDSEVf UEFSVElUSU9OU19FTEVNKQorCQkJZWxvZyhFUlJPUiwgImluY29ycmVjdCBudW1iZXIgb2Yg b3V0cHV0IGFyZ3VtZW50cyIpOworCisJCS8qIENvbnN0cnVjdCBhIHR1cGxlIGRlc2NyaXB0 b3IgZm9yIHRoZSByZXN1bHQgcm93cy4gKi8KKwkJdHVwbGVkZXNjID0gQ3JlYXRlVGVtcGxh dGVUdXBsZURlc2MoZXhwZWN0ZWRfdHVwbGVkZXNjLT5uYXR0cyk7CisJCVR1cGxlRGVzY0lu aXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSAxLCAicGFydGl0aW9uIiwKKwkJCQkJ CSAgIElOVDRPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywg KEF0dHJOdW1iZXIpIDIsICJudW1hX25vZGUiLAorCQkJCQkJICAgSU5UNE9JRCwgLTEsIDAp OworCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgMywgIm51 bV9idWZmZXJzIiwKKwkJCQkJCSAgIElOVDRPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5p dEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDQsICJmaXJzdF9idWZmZXIiLAorCQkJ CQkJICAgSU5UNE9JRCwgLTEsIDApOworCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNj LCAoQXR0ck51bWJlcikgNSwgImxhc3RfYnVmZmVyIiwKKwkJCQkJCSAgIElOVDRPSUQsIC0x LCAwKTsKKworCQlmdW5jY3R4LT51c2VyX2ZjdHggPSBCbGVzc1R1cGxlRGVzYyh0dXBsZWRl c2MpOworCisJCS8qIFJldHVybiB0byBvcmlnaW5hbCBjb250ZXh0IHdoZW4gYWxsb2NhdGlu ZyB0cmFuc2llbnQgbWVtb3J5ICovCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250 ZXh0KTsKKworCQkvKiBTZXQgbWF4IGNhbGxzIGFuZCByZW1lbWJlciB0aGUgdXNlciBmdW5j dGlvbiBjb250ZXh0LiAqLworCQlmdW5jY3R4LT5tYXhfY2FsbHMgPSBCdWZmZXJQYXJ0aXRp b25Db3VudCgpOworCX0KKworCWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9TRVRVUCgpOworCisJ aWYgKGZ1bmNjdHgtPmNhbGxfY250ciA8IGZ1bmNjdHgtPm1heF9jYWxscykKKwl7CisJCXVp bnQzMgkJaSA9IGZ1bmNjdHgtPmNhbGxfY250cjsKKworCQlpbnQJCQludW1hX25vZGUsCisJ CQkJCW51bV9idWZmZXJzLAorCQkJCQlmaXJzdF9idWZmZXIsCisJCQkJCWxhc3RfYnVmZmVy OworCisJCURhdHVtCQl2YWx1ZXNbTlVNX0JVRkZFUkNBQ0hFX1BBUlRJVElPTlNfRUxFTV07 CisJCWJvb2wJCW51bGxzW05VTV9CVUZGRVJDQUNIRV9QQVJUSVRJT05TX0VMRU1dOworCisJ CUJ1ZmZlclBhcnRpdGlvbkdldChpLCAmbnVtYV9ub2RlLCAmbnVtX2J1ZmZlcnMsCisJCQkJ CQkgICAmZmlyc3RfYnVmZmVyLCAmbGFzdF9idWZmZXIpOworCisJCXZhbHVlc1swXSA9IElu dDMyR2V0RGF0dW0oaSk7CisJCW51bGxzWzBdID0gZmFsc2U7CisKKwkJdmFsdWVzWzFdID0g SW50MzJHZXREYXR1bShudW1hX25vZGUpOworCQludWxsc1sxXSA9IGZhbHNlOworCisJCXZh bHVlc1syXSA9IEludDMyR2V0RGF0dW0obnVtX2J1ZmZlcnMpOworCQludWxsc1syXSA9IGZh bHNlOworCisJCXZhbHVlc1szXSA9IEludDMyR2V0RGF0dW0oZmlyc3RfYnVmZmVyKTsKKwkJ bnVsbHNbM10gPSBmYWxzZTsKKworCQl2YWx1ZXNbNF0gPSBJbnQzMkdldERhdHVtKGxhc3Rf YnVmZmVyKTsKKwkJbnVsbHNbNF0gPSBmYWxzZTsKKworCQkvKiBCdWlsZCBhbmQgcmV0dXJu IHRoZSB0dXBsZS4gKi8KKwkJdHVwbGUgPSBoZWFwX2Zvcm1fdHVwbGUoKFR1cGxlRGVzYykg ZnVuY2N0eC0+dXNlcl9mY3R4LCB2YWx1ZXMsIG51bGxzKTsKKwkJcmVzdWx0ID0gSGVhcFR1 cGxlR2V0RGF0dW0odHVwbGUpOworCisJCVNSRl9SRVRVUk5fTkVYVChmdW5jY3R4LCByZXN1 bHQpOworCX0KKwllbHNlCisJCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jCmluZGV4IDZmZDNhNmJiYWM1Li5mNTFj N2RiNzg1NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2lu aXQuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jCkBAIC0x NCw5ICsxNCwyMCBAQAogICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2lmZGVmIFVT RV9MSUJOVU1BCisjaW5jbHVkZSA8bnVtYS5oPgorI2luY2x1ZGUgPG51bWFpZi5oPgorI2Vu ZGlmCisKKyNpbmNsdWRlICJwb3J0L3BnX251bWEuaCIKICNpbmNsdWRlICJzdG9yYWdlL2Fp by5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmX2ludGVybmFscy5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wZ19zaG1lbS5oIgorI2luY2x1 ZGUgInN0b3JhZ2UvcHJvYy5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorI2luY2x1ZGUg InV0aWxzL2d1Y19ob29rcy5oIgorI2luY2x1ZGUgInV0aWxzL3ZhcmxlbmEuaCIKIAogQnVm ZmVyRGVzY1BhZGRlZCAqQnVmZmVyRGVzY3JpcHRvcnM7CiBjaGFyCSAgICpCdWZmZXJCbG9j a3M7CkBAIC0yNCw2ICszNSwyMyBAQCBDb25kaXRpb25WYXJpYWJsZU1pbmltYWxseVBhZGRl ZCAqQnVmZmVySU9DVkFycmF5OwogV3JpdGViYWNrQ29udGV4dCBCYWNrZW5kV3JpdGViYWNr Q29udGV4dDsKIENrcHRTb3J0SXRlbSAqQ2twdEJ1ZmZlcklkczsKIAorLyoKKyAqIE1pbmlt dW0gbnVtYmVyIG9mIGJ1ZmZlciBwYXJ0aXRpb25zLCBubyBtYXR0ZXIgdGhlIG51bWJlciBv ZiBOVU1BIG5vZGVzLgorICovCisjZGVmaW5lIE1JTl9CVUZGRVJfUEFSVElUSU9OUwk0CisK Ky8qIEFycmF5IG9mIHN0cnVjdHMgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBidWZmZXIgcmFu Z2VzICovCitCdWZmZXJQYXJ0aXRpb25zICpCdWZmZXJQYXJ0aXRpb25zQXJyYXkgPSBOVUxM OworCitzdGF0aWMgdm9pZCBidWZmZXJfcGFydGl0aW9uc19wcmVwYXJlKHZvaWQpOworc3Rh dGljIHZvaWQgYnVmZmVyX3BhcnRpdGlvbnNfaW5pdCh2b2lkKTsKKworLyogbnVtYmVyIG9m IE5VTUEgbm9kZXMgKGFzIHJldHVybmVkIGJ5IG51bWFfbnVtX2NvbmZpZ3VyZWRfbm9kZXMp ICovCitzdGF0aWMgaW50CW51bWFfbm9kZXMgPSAtMTsJLyogbnVtYmVyIG9mIG5vZGVzIHdo ZW4gc2l6aW5nICovCitzdGF0aWMgU2l6ZSBudW1hX3BhZ2Vfc2l6ZSA9IDA7IC8qIHBhZ2Ug dXNlZCB0byBzaXplIHBhcnRpdGlvbnMgKi8KK3N0YXRpYyBib29sIG51bWFfY2FuX3BhcnRp dGlvbiA9IGZhbHNlOyAvKiBjYW4gbWFwIHRvIE5VTUEgbm9kZXM/ICovCitzdGF0aWMgaW50 CW51bWFfYnVmZmVyc19wZXJfbm9kZSA9IC0xOyAvKiBidWZmZXJzIHBlciBub2RlICovCitz dGF0aWMgaW50CW51bWFfcGFydGl0aW9ucyA9IDA7CS8qIHRvdGFsIChtdWx0aXBsZSBvZiBu b2RlcykgKi8KIAogLyoKICAqIERhdGEgU3RydWN0dXJlczoKQEAgLTcwLDE5ICs5OCw4NyBA QCBCdWZmZXJNYW5hZ2VyU2htZW1Jbml0KHZvaWQpCiAJYm9vbAkJZm91bmRCdWZzLAogCQkJ CWZvdW5kRGVzY3MsCiAJCQkJZm91bmRJT0NWLAotCQkJCWZvdW5kQnVmQ2twdDsKKwkJCQlm b3VuZEJ1ZkNrcHQsCisJCQkJZm91bmRQYXJ0czsKKwlTaXplCQlidWZmZXJfYWxpZ247CisK KwkvKgorCSAqIERldGVybWluZSB0aGUgbWVtb3J5IHBhZ2Ugc2l6ZSB1c2VkIHRvIHBhcnRp dGlvbiBzaGFyZWQgYnVmZmVycyBvdmVyCisJICogdGhlIGF2YWlsYWJsZSBOVU1BIG5vZGVz LgorCSAqCisJICogWFhYIFdlIGhhdmUgdG8gY2FsbCBwcmVwYXJlIGFnYWluLCBiZWNhdXNl IHdpdGggRVhFQ19CQUNLRU5EIHdlIG1heSBub3QKKwkgKiBzZWUgdGhlIHZhbHVlcyBhbHJl YWR5IGNhbGN1bGF0ZWQgaW4gQnVmZmVyTWFuYWdlclNobWVtU2l6ZSgpLgorCSAqCisJICog WFhYIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBnZXQgdGhlIHNhbWUgdmFsdWUgd2hlbiBj YWxjdWxhdGluZyB0aGUKKwkgKiBhbmQgdGhlbiBsYXRlciB3aGVuIGluaXRpYWxpemluZyB0 aGUgc3RydWN0cyBhZnRlciBhbGxvY2F0aW9uLCBvciB0byBub3QKKwkgKiBkZXBlbmQgb24g dGhhdCB2YWx1ZSB0b28gbXVjaC4gQmVmb3JlIHRoZSBhbGxvY2F0aW9uIHdlIGRvbid0IGtu b3cgaWYgd2UKKwkgKiBnZXQgaHVnZSBwYWdlcywgc28gd2UganVzdCBoYXZlIHRvIGFzc3Vt ZSB3ZSBkby4KKwkgKi8KKwlidWZmZXJfcGFydGl0aW9uc19wcmVwYXJlKCk7CisKKwkvKgor CSAqIFdpdGggTlVNQSB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgYnVmZmVycyBhcmUgcHJvcGVy bHkgYWxpZ25lZCBub3QganVzdAorCSAqIHRvIFBHX0lPX0FMSUdOX1NJWkUsIGJ1dCBhbHNv IHRvIG1lbW9yeSBwYWdlIHNpemUuIE5VTUEgd29ya3Mgb24gcGFnZQorCSAqIGdyYW51bGFy aXR5LCBhbmQgd2UgZG9uJ3Qgd2FudCBhIGJ1ZmZlciB0byBnZXQgc3BsaXQgdG8gbXVsdGlw bGUgbm9kZXMKKwkgKiAod2hlbiBzcGFubmluZyBtdWx0aXBsZSBtZW1vcnkgcGFnZXMpLgor CSAqCisJICogV2UgYWxzbyBkb24ndCB3YW50IHRvIGludGVyZmVyZSB3aXRoIG90aGVyIHBh cnRzIG9mIHNoYXJlZCBtZW1vcnksCisJICogd2hpY2ggY291bGQgZWFzaWx5IGhhcHBlbiB3 aXRoIGh1Z2UgcGFnZXMgKGUuZy4gd2l0aCBkYXRhIHN0b3JlZCBiZWZvcmUKKwkgKiBidWZm ZXJzKS4KKwkgKgorCSAqIFdlIGRvIHRoaXMgYnkgYWxpZ25pbmcgdG8gdGhlIGxhcmdlciBv ZiB0aGUgdHdvIHZhbHVlcyAod2Uga25vdyBib3RoCisJICogYXJlIHBvd2VyLW9mLXR3byB2 YWx1ZXMsIHNvIHRoZSBsYXJnZXIgdmFsdWUgaXMgYXV0b21hdGljYWxseSBhCisJICogbXVs dGlwbGUgb2YgdGhlIGxlc3NlciBvbmUpLgorCSAqCisJICogWFhYIE1heWJlIHRoZXJlJ3Mg YSB3YXkgdG8gdXNlIGxlc3MgYWxpZ25tZW50PworCSAqCisJICogWFhYIE1heWJlIHdpdGgg KG51bWFfcGFnZV9zaXplID4gUEdfSU9fQUxJR05fU0laRSksIHdlIGRvbid0IG5lZWQgdG8K KwkgKiBhbGlnbiB0byBudW1hX3BhZ2Vfc2l6ZT8gRXNwZWNpYWxseSBmb3IgdmVyeSBsYXJn ZSBodWdlIHBhZ2VzIChlLmcuIDFHQikKKwkgKiB0aGF0IGRvZXNuJ3Qgc2VlbSBxdWl0ZSB3 b3J0aCBpdC4gTWF5YmUgd2Ugc2hvdWxkIHNpbXBseSBhbGlnbiB0bworCSAqIEJMQ0tTWiwg c28gdGhhdCBidWZmZXJzIGRvbid0IGdldCBzcGxpdD8gU3RpbGwsIHdlIG1pZ2h0IGludGVy ZmVyZSB3aXRoCisJICogb3RoZXIgc3R1ZmYgc3RvcmVkIGluIHNoYXJlZCBtZW1vcnkgdGhh dCB3ZSB3YW50IHRvIGFsbG9jYXRlIG9uIGEKKwkgKiBwYXJ0aWN1bGFyIE5VTUEgbm9kZSAo ZS5nLiBQcm9jQXJyYXkpLgorCSAqCisJICogWFhYIE1heWJlIHdpdGggInRvbyBsYXJnZSIg aHVnZSBwYWdlcyB3ZSBzaG91bGQganVzdCBub3QgZG8gdGhpcywgb3IKKwkgKiBtYXliZSBk byB0aGlzIG9ubHkgZm9yIHN1ZmZpY2llbnRseSBsYXJnZSBhcmVhcyAoZS5nLiBzaGFyZWQg YnVmZmVycywKKwkgKiBidXQgbm90IFByb2NBcnJheSkuCisJICovCisJYnVmZmVyX2FsaWdu ID0gTWF4KG51bWFfcGFnZV9zaXplLCBQR19JT19BTElHTl9TSVpFKTsKKworCS8qIG9uZSBw YWdlIGlzIGEgbXVsdGlwbGUgb2YgdGhlIG90aGVyICovCisJQXNzZXJ0KCgobnVtYV9wYWdl X3NpemUgJSBQR19JT19BTElHTl9TSVpFKSA9PSAwKSB8fAorCQkgICAoKFBHX0lPX0FMSUdO X1NJWkUgJSBudW1hX3BhZ2Vfc2l6ZSkgPT0gMCkpOwogCi0JLyogQWxpZ24gZGVzY3JpcHRv cnMgdG8gYSBjYWNoZWxpbmUgYm91bmRhcnkuICovCisJLyogYWxsb2NhdGUgdGhlIHBhcnRp dGlvbiByZWdpc3RyeSBmaXJzdCAqLworCUJ1ZmZlclBhcnRpdGlvbnNBcnJheSA9IChCdWZm ZXJQYXJ0aXRpb25zICopCisJCVNobWVtSW5pdFN0cnVjdCgiQnVmZmVyIFBhcnRpdGlvbnMi LAorCQkJCQkJb2Zmc2V0b2YoQnVmZmVyUGFydGl0aW9ucywgcGFydGl0aW9ucykgKworCQkJ CQkJbXVsX3NpemUoc2l6ZW9mKEJ1ZmZlclBhcnRpdGlvbiksIG51bWFfcGFydGl0aW9ucyks CisJCQkJCQkmZm91bmRQYXJ0cyk7CisKKwkvKgorCSAqIEFsaWduIGRlc2NyaXB0b3JzIHRv IGEgY2FjaGVsaW5lIGJvdW5kYXJ5LCBhbmQgbWVtb3J5IHBhZ2UuCisJICoKKwkgKiBXZSB3 YW50IHRvIGRpc3RyaWJ1dGUgYm90aCB0byBOVU1BIG5vZGVzLCBzbyB0aGF0IGVhY2ggYnVm ZmVyIGFuZCBpdCdzCisJICogZGVzY3JpcHRvciBhcmUgb24gdGhlIHNhbWUgTlVNQSBub2Rl LiBTbyB3ZSBhbGlnbiBib3RoIHRoZSBzYW1lIHdheS4KKwkgKgorCSAqIFhYWCBUaGUgbWVt b3J5IHBhZ2UgaXMgYWx3YXlzIGxhcmdlciB0aGFuIGNhY2hlbGluZSwgc28gdGhlIGNhY2hl bGluZQorCSAqIHJlZmVyZW5jZSBpcyBhIGJpdCB1bm5lY2Vzc2FyeS4KKwkgKgorCSAqIFhY WCBJbiBwcmluY2lwbGUgd2Ugb25seSBuZWVkIHRvIGRvIHRoaXMgd2l0aCBOVU1BLCBvdGhl cndpc2Ugd2UgY291bGQKKwkgKiBzdGlsbCBhbGlnbiBqdXN0IHRvIGNhY2hlbGluZSwgYXMg YmVmb3JlLgorCSAqLwogCUJ1ZmZlckRlc2NyaXB0b3JzID0gKEJ1ZmZlckRlc2NQYWRkZWQg KikKLQkJU2htZW1Jbml0U3RydWN0KCJCdWZmZXIgRGVzY3JpcHRvcnMiLAotCQkJCQkJTkJ1 ZmZlcnMgKiBzaXplb2YoQnVmZmVyRGVzY1BhZGRlZCksCi0JCQkJCQkmZm91bmREZXNjcyk7 CisJCVRZUEVBTElHTihidWZmZXJfYWxpZ24sCisJCQkJICBTaG1lbUluaXRTdHJ1Y3QoIkJ1 ZmZlciBEZXNjcmlwdG9ycyIsCisJCQkJCQkJCSAgTkJ1ZmZlcnMgKiBzaXplb2YoQnVmZmVy RGVzY1BhZGRlZCkgKyBidWZmZXJfYWxpZ24sCisJCQkJCQkJCSAgJmZvdW5kRGVzY3MpKTsK IAogCS8qIEFsaWduIGJ1ZmZlciBwb29sIG9uIElPIHBhZ2Ugc2l6ZSBib3VuZGFyeS4gKi8K IAlCdWZmZXJCbG9ja3MgPSAoY2hhciAqKQotCQlUWVBFQUxJR04oUEdfSU9fQUxJR05fU0la RSwKKwkJVFlQRUFMSUdOKGJ1ZmZlcl9hbGlnbiwKIAkJCQkgIFNobWVtSW5pdFN0cnVjdCgi QnVmZmVyIEJsb2NrcyIsCi0JCQkJCQkJCSAgTkJ1ZmZlcnMgKiAoU2l6ZSkgQkxDS1NaICsg UEdfSU9fQUxJR05fU0laRSwKKwkJCQkJCQkJICBOQnVmZmVycyAqIChTaXplKSBCTENLU1og KyBidWZmZXJfYWxpZ24sCiAJCQkJCQkJCSAgJmZvdW5kQnVmcykpOwogCiAJLyogQWxpZ24g Y29uZGl0aW9uIHZhcmlhYmxlcyB0byBjYWNoZWxpbmUgYm91bmRhcnkuICovCkBAIC0xMTIs NiArMjA4LDEyIEBAIEJ1ZmZlck1hbmFnZXJTaG1lbUluaXQodm9pZCkKIAl7CiAJCWludAkJ CWk7CiAKKwkJLyoKKwkJICogSW5pdGlhbGl6ZSBidWZmZXIgcGFydGl0aW9ucywgaW5jbHVk aW5nIG1vdmluZyBtZW1vcnkgdG8gZGlmZmVyZW50CisJCSAqIE5VTUEgbm9kZXMgKGlmIGVu YWJsZWQgYnkgR1VDKS4KKwkJICovCisJCWJ1ZmZlcl9wYXJ0aXRpb25zX2luaXQoKTsKKwog CQkvKgogCQkgKiBJbml0aWFsaXplIGFsbCB0aGUgYnVmZmVyIGhlYWRlcnMuCiAJCSAqLwpA QCAtMTQ4LDE5ICsyNTAsMjYgQEAgQnVmZmVyTWFuYWdlclNobWVtSW5pdCh2b2lkKQogICoK ICAqIGNvbXB1dGUgdGhlIHNpemUgb2Ygc2hhcmVkIG1lbW9yeSBmb3IgdGhlIGJ1ZmZlciBw b29sIGluY2x1ZGluZwogICogZGF0YSBwYWdlcywgYnVmZmVyIGRlc2NyaXB0b3JzLCBoYXNo IHRhYmxlcywgZXRjLgorICoKKyAqIFhYWCBDYWxsZWQgYmVmb3JlIGFsbG9jYXRpb24sIHNv IHdlIGRvbid0IGtub3cgaWYgaHVnZSBwYWdlcyBnZXQgdXNlZCB5ZXQuCisgKiBTbyB3ZSBu ZWVkIHRvIGFzc3VtZSBodWdlIHBhZ2VzIGdldCB1c2VkLCBhbmQgdXNlIGdldF9tZW1vcnlf cGFnZV9zaXplKCkKKyAqIHRvIGNhbGN1bGF0ZSB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBtZW1v cnkgcGFnZS4KICAqLwogU2l6ZQogQnVmZmVyTWFuYWdlclNobWVtU2l6ZSh2b2lkKQogewog CVNpemUJCXNpemUgPSAwOwogCisJLyogY2FsY3VsYXRlIHBhcnRpdGlvbiBpbmZvIGZvciBi dWZmZXJzICovCisJYnVmZmVyX3BhcnRpdGlvbnNfcHJlcGFyZSgpOworCiAJLyogc2l6ZSBv ZiBidWZmZXIgZGVzY3JpcHRvcnMgKi8KIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3Np emUoTkJ1ZmZlcnMsIHNpemVvZihCdWZmZXJEZXNjUGFkZGVkKSkpOwogCS8qIHRvIGFsbG93 IGFsaWduaW5nIGJ1ZmZlciBkZXNjcmlwdG9ycyAqLwotCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBQR19DQUNIRV9MSU5FX1NJWkUpOworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBNYXgobnVt YV9wYWdlX3NpemUsIFBHX0lPX0FMSUdOX1NJWkUpKTsKIAogCS8qIHNpemUgb2YgZGF0YSBw YWdlcywgcGx1cyBhbGlnbm1lbnQgcGFkZGluZyAqLwotCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBQR19JT19BTElHTl9TSVpFKTsKKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgTWF4KG51bWFf cGFnZV9zaXplLCBQR19JT19BTElHTl9TSVpFKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUs IG11bF9zaXplKE5CdWZmZXJzLCBCTENLU1opKTsKIAogCS8qIHNpemUgb2Ygc3R1ZmYgY29u dHJvbGxlZCBieSBmcmVlbGlzdC5jICovCkBAIC0xNzUsNSArMjg0LDUwNSBAQCBCdWZmZXJN YW5hZ2VyU2htZW1TaXplKHZvaWQpCiAJLyogc2l6ZSBvZiBjaGVja3BvaW50IHNvcnQgYXJy YXkgaW4gYnVmbWdyLmMgKi8KIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoTkJ1 ZmZlcnMsIHNpemVvZihDa3B0U29ydEl0ZW0pKSk7CiAKKwkvKiBhY2NvdW50IGZvciByZWdp c3RyeSBvZiBOVU1BIHBhcnRpdGlvbnMgKi8KKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgTUFY QUxJR04ob2Zmc2V0b2YoQnVmZmVyUGFydGl0aW9ucywgcGFydGl0aW9ucykgKworCQkJCQkJ CQkgICBtdWxfc2l6ZShzaXplb2YoQnVmZmVyUGFydGl0aW9uKSwgbnVtYV9wYXJ0aXRpb25z KSkpOworCiAJcmV0dXJuIHNpemU7CiB9CisKKy8qCisgKiBDYWxjdWxhdGUgdGhlIE5VTUEg bm9kZSBmb3IgYSBnaXZlbiBidWZmZXIuCisgKi8KK2ludAorQnVmZmVyR2V0Tm9kZShCdWZm ZXIgYnVmZmVyKQoreworCS8qIG5vdCBOVU1BIHBhcnRpdGlvbmluZyAqLworCWlmIChudW1h X2J1ZmZlcnNfcGVyX25vZGUgPT0gLTEpCisJCXJldHVybiAwOworCisJcmV0dXJuIChidWZm ZXIgLyBudW1hX2J1ZmZlcnNfcGVyX25vZGUpOworfQorCisvKgorICogYnVmZmVyX3BhcnRp dGlvbnNfcHJlcGFyZQorICoJCUNhbGN1bGF0ZSBwYXJhbWV0ZXJzIGZvciBwYXJ0aXRpb25p bmcgYnVmZmVycy4KKyAqCisgKiBXZSB3YW50IHRvIHNwbGl0IHRoZSBzaGFyZWQgYnVmZmVy cyBpbnRvIG11bHRpcGxlIHBhcnRpdGlvbnMsIG9mIHJvdWdobHkKKyAqIHRoZSBzYW1lIHNp emUuIFRoaXMgaXMgbWVhbnQgdG8gc2VydmUgbXVsdGlwbGUgcHVycG9zZXMuIFdlIHdhbnQg dG8gbWFwCisgKiB0aGUgcGFydGl0aW9ucyB0byBkaWZmZXJlbnQgTlVNQSBub2RlcywgdG8g YmFsYW5jZSBtZW1vcnkgdXNhZ2UsIGFuZAorICogYWxsb3cgcGFydGl0aW9uaW5nIHNvbWUg ZGF0YSBzdHJ1Y3R1cmVzIGJ1aWx0IG9uIHRvcCBvZiBidWZmZXJzLCB0byBnaXZlCisgKiBw cmVmZXJlbmNlIHRvIGxvY2FsIGFjY2VzcyAoYnVmZmVycyBvbiB0aGUgc2FtZSBOVU1BIG5v ZGUpLiBUaGlzIGFwcGxpZXMKKyAqIG1vc3RseSB0byBmcmVlbGlzdHMgYW5kIGNsb2Nrc3dl ZXAuCisgKgorICogV2UgbWF5IHdhbnQgdG8gdXNlIHBhcnRpdGlvbmluZyBldmVuIG9uIG5v bi1OVU1BIHN5c3RlbXMsIG9yIHdoZW4gcnVubmluZworICogb24gYSBzaW5nbGUgTlVNQSBu b2RlLiBQYXJ0aXRpb25pbmcgdGhlIGZyZWVsaXN0L2Nsb2Nrc3dlZXAgaXMgYmVuZWZpY2lh bAorICogZXZlbiB3aXRob3V0IHRoZSBOVU1BIGVmZmVjdHMuCisgKgorICogU28gd2UgdHJ5 IHRvIGFsd2F5cyBidWlsZCBhdCBsZWFzdCA0IHBhcnRpdGlvbnMgKE1JTl9CVUZGRVJfUEFS VElUSU9OUykKKyAqIGluIHRvdGFsLCBvciBhdCBsZWFzdCBvbmUgcGFydGl0aW9uIHBlciBO VU1BIG5vZGUuIFdlIGFsd2F5cyBjcmVhdGUgdGhlCisgKiBzYW1lIG51bWJlciBvZiBwYXJ0 aXRpb25zIHBlciBOVU1BIG5vZGUuCisgKgorICogU29tZSBleGFtcGxlczoKKyAqCisgKiAt IG5vbi1OVU1BIHN5c3RlbSAob3IgMSBOVU1BIG5vZGUpOiA0IHBhcnRpdGlvbnMgZm9yIHRo ZSBzaW5nbGUgbm9kZQorICoKKyAqIC0gMiBOVU1BIG5vZGVzOiA0IHBhcnRpdGlvbnMsIDIg Zm9yIGVhY2ggbm9kZQorICoKKyAqIC0gMyBOVU1BIG5vZGVzOiA2IHBhcnRpdGlvbnMsIDIg Zm9yIGVhY2ggbm9kZQorICoKKyAqIC0gNCsgTlVNQSBub2Rlczogb25lIHBhcnRpdGlvbiBw ZXIgbm9kZQorICoKKyAqIE5VTUEgd29ya3Mgb24gdGhlIG1lbW9yeS1wYWdlIGdyYW51bGFy aXR5LCB3aGljaCBkZXRlcm1pbmVzIHRoZSBzbWFsbGVzdAorICogYW1vdW50IG9mIG1lbW9y eSB3ZSBjYW4gYWxsb2NhdGUgdG8gc2luZ2xlIG5vZGUuIFRoaXMgaXMgZGV0ZXJtaW5lZCBi eQorICogaG93IG1hbnkgQnVmZmVyRGVzY3JpcHRvcnMgZml0IG9udG8gYSBzaW5nbGUgbWVt b3J5IHBhZ2UsIHNvIHRoaXMgZGVwZW5kcworICogb24gaHVnZSBwYWdlIHN1cHBvcnQuIFdp dGggMk1CIGh1Z2UgcGFnZXMgKHR5cGljYWwgb24geDg2IExpbnV4KSwgdGhpcyBpcworICog MzI3NjggYnVmZmVycyAoMjU2TUIpLiBXaXRoIHJlZ3VsYXIgNGtCIHBhZ2VzLCBpdCdzIDY0 IGJ1ZmZlcnMgKDUxMktCKS4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGRldGVybWluZWQgYmVm b3JlIHRoZSBhbGxvY2F0aW9uLCBpLmUuIHdlIGRvbid0IGtub3cgaWYgdGhlCisgKiBhbGxv Y2F0aW9uIGdvdCB0byB1c2UgaHVnZSBwYWdlcy4gU28gdW5sZXNzIGh1Z2VfcGFnZXM9b2Zm IHdlIGFzc3VtZSB3ZSdyZQorICogdXNpbmcgaHVnZSBwYWdlcy4KKyAqCisgKiBUaGlzIG1p bmltYWwgc2l6ZSByZXF1aXJlbWVudCBvbmx5IG1hdHRlcnMgZm9yIHRoZSBwZXItbm9kZSBh bW91bnQgb2YKKyAqIG1lbW9yeSwgbm90IGZvciB0aGUgaW5kaXZpZHVhbCBwYXJ0aXRpb25z LiBUaGUgcGFydGl0aW9ucyBmb3IgdGhlIHNhbWUKKyAqIG5vZGUgYXJlIGEgY29udGlndW91 cyBjaHVuayBvZiBtZW1vcnksIHdoaWNoIGNhbiBiZSBzcGxpdCBhcmJpdHJhcmlseSwKKyAq IGl0J3MgaW5kZXBlbmRlbnQgb2YgdGhlIE5VTUEgZ3JhbnVsYXJpdHkuCisgKgorICogWFhY IFRoaXMgcGF0Y2ggb25seSBpbXBsZW1lbnRzIHBsYWNpbmcgdGhlIGJ1ZmZlcnMgb250byBk aWZmZXJlbnQgTlVNQQorICogbm9kZXMuIFRoZSBmcmVlbGlzdC9jbG9ja3N3ZWVwIHBhcnRp dGlvbmluZyBpcyBpbXBsZW1lbnRlZCBpbiBzZXBhcmF0ZQorICogcGF0Y2hlcyBsYXRlciBp biB0aGUgcGF0Y2ggc2VyaWVzLiBUaG9zZSBwYXRjaGVzIGhvd2V2ZXIgdXNlIHRoZSBzYW1l CisgKiBidWZmZXIgcGFydGl0aW9uIHJlZ2lzdHJ5LCB0byBhbGlnbiB0aGUgcGFydGl0aW9u cy4KKyAqCisgKgorICogWFhYIFRoaXMgbmVlZHMgdG8gY29uc2lkZXIgdGhlIG1pbmltdW0g Y2h1bmsgc2l6ZSwgaS5lLiB3ZSBjYW4ndCBzcGxpdAorICogYnVmZmVycyBiZXlvbmQgc29t ZSBwb2ludCwgYXQgc29tZSBwb2ludCBpdCBnZXRzIHdlIHJ1biBpbnRvIHRoZSBzaXplIG9m CisgKiBidWZmZXIgZGVzY3JpcHRvcnMuIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBnaXZlIHBy ZWZlcmVuY2UgdG8gb25lIG9mIHRoZXNlCisgKiAocHJvYmFibHkgYXQgbGVhc3QgcHJpbnQg YSB3YXJuaW5nKS4KKyAqCisgKiBYWFggV2Ugd2FudCB0byBkbyB0aGlzIGV2ZW4gd2l0aCBu dW1hX2J1ZmZlcnNfaW50ZXJsZWF2ZT1mYWxzZSwgc28gdGhhdCB0aGUKKyAqIG90aGVyIHBh dGNoZXMgY2FuIGRvIHRoZWlyIHBhcnRpdGlvbmluZy4gQnV0IGluIHRoYXQgY2FzZSB3ZSBk b24ndCBuZWVkIHRvCisgKiBlbmZvcmNlIHRoZSBtaW4gY2h1bmsgc2l6ZSAocHJvYmFibHkp PworICoKKyAqIFhYWCBXZSBuZWVkIHRvIG9ubHkgY2FsbCB0aGlzIG9uY2UsIHdoZW4gc2l6 aW5nIHRoZSBtZW1vcnkuIEJ1dCBhdCB0aGF0CisgKiBwb2ludCB3ZSBkb24ndCBrbm93IGlm IHdlIGdldCB0byB1c2UgaHVnZSBwYWdlcyBvciBub3QgKHVubGVzcyB3aGVuIGh1Z2UKKyAq IHBhZ2VzIGFyZSBkaXNhYmxlZCkuIFdlJ2xsIHByb2NlZWQgYXMgaWYgdGhlIGh1Z2UgcGFn ZXMgd2VyZSB1c2VkLCBhbmQgd2UKKyAqIG1heSBoYXZlIHRvIHVzZSBsYXJnZXIgcGFydGl0 aW9ucy4gTWF5YmUgdGhlcmUncyBzb21lIHNvcnQgb2YgZmFsbGJhY2ssCisgKiBidXQgZm9y IG5vdyB3ZSBzaW1wbHkgZGlzYWJsZSB0aGUgTlVNQSBwYXJ0aXRpb25pbmcgLSBpdCBzaW1w bHkgbWVhbnMgdGhlCisgKiBzaGFyZWQgYnVmZmVycyBhcmUgdG9vIHNtYWxsLgorICoKKyAq IFhYWCBXZSBkb24ndCBuZWVkIHRvIG1ha2UgZWFjaCBwYXJ0aXRpb24gYSBtdWx0aXBsZSBv ZiBtaW5fcGFydGl0aW9uX3NpemUuCisgKiBUaGF0J3Mgc29tZXRoaW5nIHdlIG5lZWQgdG8g ZG8gZm9yIGEgbm9kZSAoYmVjYXVzZSBOVU1BIHdvcmtzIGF0IGdyYW51bGFyaXR5CisgKiBv ZiBwYWdlcyksIGJ1dCBwYXJ0aXRpb25zIGZvciBhIHNpbmdsZSBub2RlIGNhbiBzcGxpdCB0 aGF0IGFyYml0cmFyaWx5LgorICogQWx0aG91Z2gga2VlcGluZyB0aGUgc2l6ZXMgcG93ZXIt b2YtdHdvIHdvdWxkIGFsbG93IGNhbGN1bGF0aW5nIGV2ZXJ5dGhpbmcKKyAqIGFzIHNoaWZ0 L21hc2ssIHdpdGhvdXQgZXhwZW5zaXZlIGRpdmlzaW9uL21vZHVsbyBvcGVyYXRpb25zLgor ICovCitzdGF0aWMgdm9pZAorYnVmZmVyX3BhcnRpdGlvbnNfcHJlcGFyZSh2b2lkKQorewor CS8qCisJICogTWluaW11bSBudW1iZXIgb2YgYnVmZmVycyB3ZSBjYW4gYWxsb2NhdGUgdG8g YSBOVU1BIG5vZGUgKGRldGVybWluZWQgYnkKKwkgKiBob3cgbWFueSBCdWZmZXJEZXNjcmlw dG9ycyBmaXQgb250byBhIG1lbW9yeSBwYWdlKS4KKwkgKi8KKwlpbnQJCQltaW5fbm9kZV9i dWZmZXJzOworCisJLyoKKwkgKiBNYXhpbXVtIG51bWJlciBvZiBub2RlcyB3ZSBjYW4gc3Bs aXQgc2hhcmVkIGJ1ZmZlcnMgdG8sIGFzc3VtaW5nIGVhY2gKKwkgKiBub2RlIGdldHMgdGhl IHNtYWxsZXN0IGFsbG9jYXRhYmxlIGNodW5rICh0aGUgbGFzdCBub2RlIGNhbiBnZXQgYQor CSAqIHNtYWxsZXIgYW1vdW50IG9mIG1lbW9yeSwgbm90IHRoZSBmdWxsIGNodW5rKS4KKwkg Ki8KKwlpbnQJCQltYXhfbm9kZXM7CisKKwkvKgorCSAqIEhvdyBtYW55IHBhcnRpdGlvbnMg dG8gY3JlYXRlIHBlciBub2RlLiBDb3VsZCBiZSBtb3JlIHRoYW4gMSBmb3Igc21hbGwKKwkg KiBudW1iZXIgb2Ygbm9kZXMgKG9mIG5vbi1OVU1BIHN5c3RlbXMpLgorCSAqLworCWludAkJ CW51bV9wYXJ0aXRpb25zX3Blcl9ub2RlOworCisJLyogYmFpbCBvdXQgaWYgYWxyZWFkeSBp bml0aWFsaXplZCAoY2FsY3VsYXRlIG9ubHkgb25jZSkgKi8KKwlpZiAobnVtYV9ub2RlcyAh PSAtMSkKKwkJcmV0dXJuOworCisJLyogWFhYIG9ubHkgZ2l2ZXMgdXMgdGhlIG51bWJlciwg dGhlIG5vZGVzIG1heSBub3QgYmUgMCwgMSwgMiwgLi4uICovCisjaWYgVVNFX0xJQk5VTUEK KwludW1hX25vZGVzID0gbnVtYV9udW1fY29uZmlndXJlZF9ub2RlcygpOworI2Vsc2UKKwkv KiB3aXRob3V0IE5VTUEsIGFzc3VtZSB0aGVyZSdzIGp1c3Qgb25lIG5vZGUgKi8KKwludW1h X25vZGVzID0gMTsKKyNlbmRpZgorCisJLyogd2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlIHdp dGhvdXQgYXQgbGVhc3Qgb25lIE5VTUEgbm9kZSAqLworCUFzc2VydChudW1hX25vZGVzID4g MCk7CisKKwkvKgorCSAqIFhYWCBBIGJpdCB3ZWlyZC4gRG8gd2UgbmVlZCB0byB3b3JyeSBh Ym91dCBwb3N0bWFzdGVyPyBDb3VsZCB0aGlzIGV2ZW4KKwkgKiBydW4gb3V0c2lkZSBwb3N0 bWFzdGVyPyBJIGRvbid0IHRoaW5rIHNvLgorCSAqCisJICogWFhYIEFub3RoZXIgaXNzdWUg aXMgd2UgbWF5IGdldCBkaWZmZXJlbnQgdmFsdWVzIHRoYW4gd2hlbiBzaXppbmcgdGhlCisJ ICogdGhlIG1lbW9yeSwgYmVjYXVzZSBhdCB0aGF0IHBvaW50IHdlIGRpZG4ndCBrbm93IGlm IHdlIGdldCBodWdlIHBhZ2VzLAorCSAqIHNvIHdlIGFzc3VtZWQgd2Ugd2lsbC4gU2hvdWxk bid0IGNhdXNlIGNyYXNoZXMsIGJ1dCB3ZSBtaWdodCBhbGxvY2F0ZQorCSAqIHNoYXJlZCBt ZW1vcnkgYW5kIHRoZW4gbm90IHVzZSBzb21lIG9mIGl0IChiZWNhdXNlIG9mIHRoZSBhbGln bm1lbnQKKwkgKiB0aGF0IHdlIGRvbid0IGFjdHVhbGx5IG5lZWQpLiBOb3Qgc3VyZSBhYm91 dCBiZXR0ZXIgd2F5LCBnb29kIGZvciBub3cuCisJICovCisJbnVtYV9wYWdlX3NpemUgPSBw Z19udW1hX3BhZ2Vfc2l6ZSgpOworCisJLyogbWFrZSBzdXJlIHRoZSBjaHVua3Mgd2lsbCBh bGlnbiBuaWNlbHkgKi8KKwlBc3NlcnQoQkxDS1NaICUgc2l6ZW9mKEJ1ZmZlckRlc2NQYWRk ZWQpID09IDApOworCUFzc2VydChudW1hX3BhZ2Vfc2l6ZSAlIHNpemVvZihCdWZmZXJEZXNj UGFkZGVkKSA9PSAwKTsKKwlBc3NlcnQoKChCTENLU1ogJSBudW1hX3BhZ2Vfc2l6ZSkgPT0g MCkgfHwgKChudW1hX3BhZ2Vfc2l6ZSAlIEJMQ0tTWikgPT0gMCkpOworCisJLyoKKwkgKiBU aGUgbWluaW11bSBudW1iZXIgb2YgYnVmZmVycyB3ZSBjYW4gYWxsb2NhdGUgZnJvbSBhIHNp bmdsZSBub2RlLCB1c2luZworCSAqIHRoZSBtZW1vcnkgcGFnZSBzaXplIChkZXRlcm1pbmVk IGJ5IGJ1ZmZlciBkZXNjcmlwdG9ycykuIE5VTUEgYWxsb2NhdGVzCisJICogbWVtb3J5IGlu IHBhZ2VzLCBhbmQgd2UgbmVlZCB0byBkbyB0aGF0IGZvciBib3RoIGJ1ZmZlcnMgYW5kCisJ ICogZGVzY3JpcHRvcnMgYXQgdGhlIHNhbWUgdGltZS4KKwkgKgorCSAqIEluIHByYWN0aWNl IHRoZSBCTENLU1ogZG9lc24ndCByZWFsbHkgbWF0dGVyLCBiZWNhdXNlIGl0J3MgbXVjaCBs YXJnZXIKKwkgKiB0aGFuIEJ1ZmZlckRlc2NQYWRkZWQsIHNvIHRoZSByZXN1bHQgaXMgZGV0 ZXJtaW5lZCBidWZmZXIgZGVzY3JpcHRvcnMuCisJICovCisJbWluX25vZGVfYnVmZmVycyA9 IChudW1hX3BhZ2Vfc2l6ZSAvIHNpemVvZihCdWZmZXJEZXNjUGFkZGVkKSk7CisKKwkvKgor CSAqIE1heGltdW0gbnVtYmVyIG9mIG5vZGVzIChlYWNoIGdldHRpbmcgbWluX25vZGVfYnVm ZmVycykgd2UgY2FuIGhhbmRsZQorCSAqIGdpdmVuIHRoZSBjdXJyZW50IHNoYXJlZCBidWZm ZXJzIHNpemUuIFRoZSBsYXN0IG5vZGUgaXMgYWxsb3dlZCB0byBiZQorCSAqIHNtYWxsZXIg KGhhbGYgb2YgdGhlIG90aGVyIG5vZGVzKS4KKwkgKi8KKwltYXhfbm9kZXMgPSAoTkJ1ZmZl cnMgKyAobWluX25vZGVfYnVmZmVycyAvIDIpKSAvIG1pbl9ub2RlX2J1ZmZlcnM7CisKKwkv KgorCSAqIENhbiB3ZSBhY3R1YWxseSBkbyBOVU1BIHBhcnRpdGlvbmluZyB3aXRoIHRoZXNl IHNldHRpbmdzPyBJZiB3ZSBjYW4ndAorCSAqIGhhbmRsZSB0aGUgY3VycmVudCBudW1iZXIg b2Ygbm9kZXMsIHRoZW4gbm8uCisJICoKKwkgKiBYWFggVGhpcyBzaG91bGRuJ3QgYmUgYSBi aWcgaXNzdWUgaW4gcHJhY3RpY2UuIE5VTUEgc3lzdGVtcyB0eXBpY2FsbHkKKwkgKiBydW4g d2l0aCBsYXJnZSBzaGFyZWQgYnVmZmVycywgd2hpY2ggYWxzbyBtYWtlcyB0aGUgaW1iYWxh bmNlIGlzc3VlcworCSAqIGZhaXJseSBzaWduaWZpY2FudCAoaXQncyBxdWljayB0byByZWJh bGFuY2UgMTI4TUIsIG11Y2ggc2xvd2VyIHRvIGRvCisJICogdGhhdCBmb3IgMjU2R0IpLgor CSAqLworCW51bWFfY2FuX3BhcnRpdGlvbiA9IHRydWU7CS8qIGFzc3VtZSB3ZSBjYW4gYWxs b2NhdGUgdG8gbm9kZXMgKi8KKwlpZiAobnVtYV9ub2RlcyA+IG1heF9ub2RlcykKKwl7CisJ CWVsb2coV0FSTklORywgInNoYXJlZCBidWZmZXJzIHRvbyBzbWFsbCBmb3IgJWQgbm9kZXMg KG1heCBub2RlcyAlZCkiLAorCQkJIG51bWFfbm9kZXMsIG1heF9ub2Rlcyk7CisJCW51bWFf Y2FuX3BhcnRpdGlvbiA9IGZhbHNlOworCX0KKworCS8qCisJICogV2Uga25vdyB3ZSBjYW4g cGFydGl0aW9uIHRvIHRoZSBkZXNpcmVkIG51bWJlciBvZiBub2Rlcywgbm93IGl0J3MgdGlt ZQorCSAqIHRvIGZpZ3VyZSBvdXQgaG93IG1hbnkgcGFydGl0aW9ucyB3ZSBuZWVkIHBlciBu b2RlLiBXZSBzaW1wbHkgYWRkCisJICogcGFydGl0aW9ucyBwZXIgbm9kZSB1bnRpbCB3ZSBy ZWFjaCBNSU5fQlVGRkVSX1BBUlRJVElPTlMuCisJICoKKwkgKiBYWFggTWF5YmUgd2Ugc2hv dWxkIG1ha2Ugc3VyZSB0byBrZWVwIHRoZSBhY3R1YWwgcGFydGl0aW9uIHNpemUgYSBwb3dl cgorCSAqIG9mIDIsIHRvIG1ha2UgdGhlIGNhbGN1bGF0aW9ucyBzaW1wbGVyIChzaGlmdCBp bnN0ZWFkIG9mIG1vZCkuCisJICovCisJbnVtX3BhcnRpdGlvbnNfcGVyX25vZGUgPSAxOwor CisJd2hpbGUgKG51bWFfbm9kZXMgKiBudW1fcGFydGl0aW9uc19wZXJfbm9kZSA8IE1JTl9C VUZGRVJfUEFSVElUSU9OUykKKwkJbnVtX3BhcnRpdGlvbnNfcGVyX25vZGUrKzsKKworCS8q IG5vdyB3ZSBrbm93IHRoZSB0b3RhbCBudW1iZXIgb2YgcGFydGl0aW9ucyAqLworCW51bWFf cGFydGl0aW9ucyA9IChudW1hX25vZGVzICogbnVtX3BhcnRpdGlvbnNfcGVyX25vZGUpOwor CisJLyoKKwkgKiBGaW5hbGx5LCBjYWxjdWxhdGUgaG93IG1hbnkgYnVmZmVycyB3ZSdsbCBh c3NpZ24gdG8gYSBzaW5nbGUgTlVNQSBub2RlLgorCSAqIElmIHdlIGhhdmUgb25seSBhIHNp bmdsZSBub2RlLCBvciBjYW4ndCBtYXAgdG8gdGhhdCBtYW55IG5vZGVzLCBqdXN0CisJICog dGFrZSBhICJmYWlyIHNoYXJlIiBvZiBidWZmZXJzLgorCSAqCisJICogWFhYIEluIGJvdGgg Y2FzZXMgdGhlIGxhc3Qgbm9kZSBjYW4gZ2V0IGZld2VyIGJ1ZmZlcnMuCisJICovCisJaWYg KCFudW1hX2Nhbl9wYXJ0aXRpb24pCisJeworCQludW1hX2J1ZmZlcnNfcGVyX25vZGUgPSAo TkJ1ZmZlcnMgKyAobnVtYV9ub2RlcyAtIDEpKSAvIG51bWFfbm9kZXM7CisJfQorCWVsc2UK Kwl7CisJCW51bWFfYnVmZmVyc19wZXJfbm9kZSA9IG1pbl9ub2RlX2J1ZmZlcnM7CisJCXdo aWxlIChudW1hX2J1ZmZlcnNfcGVyX25vZGUgKiBudW1hX25vZGVzIDwgTkJ1ZmZlcnMpCisJ CQludW1hX2J1ZmZlcnNfcGVyX25vZGUgKz0gbWluX25vZGVfYnVmZmVyczsKKworCQkvKiB0 aGUgbGFzdCBub2RlIHNob3VsZCBnZXQgYXQgbGVhc3Qgc29tZSBidWZmZXJzICovCisJCUFz c2VydChOQnVmZmVycyAtIChudW1hX25vZGVzIC0gMSkgKiBudW1hX2J1ZmZlcnNfcGVyX25v ZGUgPiAwKTsKKwl9CisKKwllbG9nKERFQlVHMSwgIk5VTUE6IGJ1ZmZlcnMgJWQgcGFydGl0 aW9ucyAlZCBudW1fbm9kZXMgJWQgcGVyX25vZGUgJWQgYnVmZmVyc19wZXJfbm9kZSAlZCAo bWluICVkKSIsCisJCSBOQnVmZmVycywgbnVtYV9wYXJ0aXRpb25zLCBudW1hX25vZGVzLCBu dW1fcGFydGl0aW9uc19wZXJfbm9kZSwKKwkJIG51bWFfYnVmZmVyc19wZXJfbm9kZSwgbWlu X25vZGVfYnVmZmVycyk7Cit9CisKKy8qCisgKiBTYW5pdHkgY2hlY2tzIG9mIGJ1ZmZlcnMg cGFydGl0aW9ucyAtIHRoZXJlIG11c3QgYmUgbm8gZ2FwcywgaXQgbXVzdCBjb3ZlcgorICog dGhlIHdob2xlIHJhbmdlIG9mIGJ1ZmZlcnMsIGV0Yy4KKyAqLworc3RhdGljIHZvaWQKK0Fz c2VydENoZWNrQnVmZmVyUGFydGl0aW9ucyh2b2lkKQoreworI2lmZGVmIFVTRV9BU1NFUlRf Q0hFQ0tJTkcKKwlpbnQJCQludW1fYnVmZmVycyA9IDA7CisKKwlBc3NlcnQoQnVmZmVyUGFy dGl0aW9uc0FycmF5LT5ucGFydGl0aW9ucyA+IDApOworCisJZm9yIChpbnQgaSA9IDA7IGkg PCBCdWZmZXJQYXJ0aXRpb25zQXJyYXktPm5wYXJ0aXRpb25zOyBpKyspCisJeworCQlCdWZm ZXJQYXJ0aXRpb24gKnBhcnQgPSAmQnVmZmVyUGFydGl0aW9uc0FycmF5LT5wYXJ0aXRpb25z W2ldOworCisJCS8qCisJCSAqIFdlIGNhbiBnZXQgYSBzaW5nbGUtYnVmZmVyIHBhcnRpdGlv biwgaWYgdGhlIHNpemluZyBmb3JjZXMgdGhlIGxhc3QKKwkJICogcGFydGl0aW9uIHRvIGJl IGp1c3Qgb25lIGJ1ZmZlci4gQnV0IGl0J3MgdW5saWtlbHkgKGFuZAorCQkgKiB1bmRlc2ly YWJsZSkuCisJCSAqLworCQlBc3NlcnQocGFydC0+Zmlyc3RfYnVmZmVyIDw9IHBhcnQtPmxh c3RfYnVmZmVyKTsKKwkJQXNzZXJ0KChwYXJ0LT5sYXN0X2J1ZmZlciAtIHBhcnQtPmZpcnN0 X2J1ZmZlciArIDEpID09IHBhcnQtPm51bV9idWZmZXJzKTsKKworCQludW1fYnVmZmVycyAr PSBwYXJ0LT5udW1fYnVmZmVyczsKKworCQkvKgorCQkgKiBUaGUgZmlyc3QgcGFydGl0aW9u IG5lZWRzIHRvIHN0YXJ0IG9uIGJ1ZmZlciAwLiBMYXRlciBwYXJ0aXRpb25zCisJCSAqIG5l ZWQgdG8gYmUgY29udGlndW91cywgd2l0aG91dCBza2lwcGluZyBhbnkgYnVmZmVycy4KKwkJ ICovCisJCWlmIChpID09IDApCisJCXsKKwkJCUFzc2VydChwYXJ0LT5maXJzdF9idWZmZXIg PT0gMCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlCdWZmZXJQYXJ0aXRpb24gKnByZXYgPSAm QnVmZmVyUGFydGl0aW9uc0FycmF5LT5wYXJ0aXRpb25zW2kgLSAxXTsKKworCQkJQXNzZXJ0 KChwYXJ0LT5maXJzdF9idWZmZXIgLSAxKSA9PSBwcmV2LT5sYXN0X2J1ZmZlcik7CisJCX0K KworCQkvKiB0aGUgbGFzdCBwYXJ0aXRpb24gbmVlZHMgdG8gZW5kIG9uIGJ1ZmZlciAoTkJ1 ZmZlcnMgLSAxKSAqLworCQlpZiAoaSA9PSAoQnVmZmVyUGFydGl0aW9uc0FycmF5LT5ucGFy dGl0aW9ucyAtIDEpKQorCQl7CisJCQlBc3NlcnQocGFydC0+bGFzdF9idWZmZXIgPT0gKE5C dWZmZXJzIC0gMSkpOworCQl9CisJfQorCisJQXNzZXJ0KG51bV9idWZmZXJzID09IE5CdWZm ZXJzKTsKKyNlbmRpZgorfQorCisvKgorICogYnVmZmVyX3BhcnRpdGlvbnNfaW5pdAorICoJ CUluaXRpYWxpemUgYXJyYXkgb2YgYnVmZmVyIHBhcnRpdGlvbnMuCisgKi8KK3N0YXRpYyB2 b2lkCitidWZmZXJfcGFydGl0aW9uc19pbml0KHZvaWQpCit7CisJaW50CQkJcmVtYWluaW5n X2J1ZmZlcnMgPSBOQnVmZmVyczsKKwlpbnQJCQlidWZmZXIgPSAwOworCWludAkJCXBhcnRz X3Blcl9ub2RlID0gKG51bWFfcGFydGl0aW9ucyAvIG51bWFfbm9kZXMpOworCWNoYXIJICAg KmJ1ZmZlcnNfcHRyLAorCQkJICAgKmRlc2NyaXB0b3JzX3B0cjsKKworCUJ1ZmZlclBhcnRp dGlvbnNBcnJheS0+bnBhcnRpdGlvbnMgPSBudW1hX3BhcnRpdGlvbnM7CisJQnVmZmVyUGFy dGl0aW9uc0FycmF5LT5ubm9kZXMgPSBudW1hX25vZGVzOworCisJZm9yIChpbnQgbiA9IDA7 IG4gPCBudW1hX25vZGVzOyBuKyspCisJeworCQkvKiBidWZmZXJzIHRoaXMgbm9kZSBzaG91 bGQgZ2V0IChsYXN0IG5vZGUgY2FuIGdldCBmZXdlcikgKi8KKwkJaW50CQkJbm9kZV9idWZm ZXJzID0gTWluKHJlbWFpbmluZ19idWZmZXJzLCBudW1hX2J1ZmZlcnNfcGVyX25vZGUpOwor CisJCS8qIHNwbGl0IG5vZGUgYnVmZmVycyBuZXR3ZWVuIHBhcnRpdGlvbnMgKGxhc3Qgb25l IGNhbiBnZXQgZmV3ZXIpICovCisJCWludAkJCXBhcnRfYnVmZmVycyA9IChub2RlX2J1ZmZl cnMgKyAocGFydHNfcGVyX25vZGUgLSAxKSkgLyBwYXJ0c19wZXJfbm9kZTsKKworCQlyZW1h aW5pbmdfYnVmZmVycyAtPSBub2RlX2J1ZmZlcnM7CisKKwkJQXNzZXJ0KChub2RlX2J1ZmZl cnMgPiAwKSAmJiAobm9kZV9idWZmZXJzIDw9IE5CdWZmZXJzKSk7CisJCUFzc2VydCgobiA+ PSAwKSAmJiAobiA8IG51bWFfbm9kZXMpKTsKKworCQlmb3IgKGludCBwID0gMDsgcCA8IHBh cnRzX3Blcl9ub2RlOyBwKyspCisJCXsKKwkJCWludAkJCWlkeCA9IChuICogcGFydHNfcGVy X25vZGUpICsgcDsKKwkJCUJ1ZmZlclBhcnRpdGlvbiAqcGFydCA9ICZCdWZmZXJQYXJ0aXRp b25zQXJyYXktPnBhcnRpdGlvbnNbaWR4XTsKKwkJCWludAkJCW51bV9idWZmZXJzID0gTWlu KG5vZGVfYnVmZmVycywgcGFydF9idWZmZXJzKTsKKworCQkJQXNzZXJ0KChpZHggPj0gMCkg JiYgKGlkeCA8IG51bWFfcGFydGl0aW9ucykpOworCQkJQXNzZXJ0KChidWZmZXIgPj0gMCkg JiYgKGJ1ZmZlciA8IE5CdWZmZXJzKSk7CisJCQlBc3NlcnQoKG51bV9idWZmZXJzID4gMCkg JiYgKG51bV9idWZmZXJzIDw9IHBhcnRfYnVmZmVycykpOworCisJCQkvKiBYWFggd2Ugc2hv dWxkIGdldCB0aGUgYWN0dWFsIG5vZGUgSUQgZnJvbSB0aGUgbWFzayAqLworCQkJaWYgKChu dW1hX2ZsYWdzICYgTlVNQV9CVUZGRVJTKSAhPSAwKQorCQkJCXBhcnQtPm51bWFfbm9kZSA9 IG47CisJCQllbHNlCisJCQkJcGFydC0+bnVtYV9ub2RlID0gLTE7CisKKwkJCXBhcnQtPm51 bV9idWZmZXJzID0gbnVtX2J1ZmZlcnM7CisJCQlwYXJ0LT5maXJzdF9idWZmZXIgPSBidWZm ZXI7CisJCQlwYXJ0LT5sYXN0X2J1ZmZlciA9IGJ1ZmZlciArIChudW1fYnVmZmVycyAtIDEp OworCisJCQllbG9nKERFQlVHMSwgIk5VTUE6IGJ1ZmZlciAlZCBub2RlICVkIHBhcnRpdGlv biAlZCBidWZmZXJzICVkIGZpcnN0ICVkIGxhc3QgJWQiLCBpZHgsIG4sIHAsIG51bV9idWZm ZXJzLCBidWZmZXIsIGJ1ZmZlciArIChudW1fYnVmZmVycyAtIDEpKTsKKworCQkJYnVmZmVy ICs9IG51bV9idWZmZXJzOworCQkJbm9kZV9idWZmZXJzIC09IHBhcnRfYnVmZmVyczsKKwkJ fQorCX0KKworCUFzc2VydENoZWNrQnVmZmVyUGFydGl0aW9ucygpOworCisJLyoKKwkgKiBX aXRoIGJ1ZmZlcnMgaW50ZXJsZWF2aW5nIGRpc2FibGVkIChvciBjYW4ndCBwYXJ0aXRpb24s IGJlY2F1c2Ugb2YKKwkgKiBzaGFyZWQgYnVmZmVycyBiZWluZyB0b28gc21hbGwpLCB3ZSdy ZSBkb25lLgorCSAqLworCWlmICgoKG51bWFfZmxhZ3MgJiBOVU1BX0JVRkZFUlMpID09IDAp IHx8ICFudW1hX2Nhbl9wYXJ0aXRpb24pCisJCXJldHVybjsKKworCS8qCisJICogQXNzaWdu IGNodW5rcyBvZiBidWZmZXJzIGFuZCBidWZmZXIgZGVzY3JpcHRvcnMgdG8gdGhlIGF2YWls YWJsZSBOVU1BCisJICogbm9kZXMuIFdlIGNhbid0IHVzZSB0aGUgcmVndWxhciBpbnRlcmxl YXZpbmcsIGJlY2F1c2Ugd2l0aCByZWd1bGFyCisJICogbWVtb3J5IHBhZ2VzIChzbWFsbGVy IHRoYW4gQkxDS1NaKSB3ZSdkIHNwbGl0IGFsbCBidWZmZXJzIHRvIG11bHRpcGxlCisJICog TlVNQSBub2Rlcy4gQW5kIHdlIGRvbid0IHdhbnQgdGhhdC4KKwkgKgorCSAqIEJ1dCBldmVu IHdpdGggaHVnZSBwYWdlcyBpdCBzZWVtcyBsaWtlIGEgZ29vZCBpZGVhIHRvIG5vdCBoYXZl IG1hcHBpbmcKKwkgKiBmb3IgZWFjaCBwYWdlLgorCSAqCisJICogU28gd2UgYWx3YXlzIGFz c2lnbiBhIGxhcmdlciBjb250aWd1b3VzIGNodW5rIG9mIGJ1ZmZlcnMgdG8gdGhlIHNhbWUK KwkgKiBOVU1BIG5vZGUsIGFzIGNhbGN1bGF0ZWQgYnkgY2hvb3NlX2NodW5rX2J1ZmZlcnMo KS4gV2UgdHJ5IHRvIGtlZXAgdGhlCisJICogY2h1bmtzIGxhcmdlIGVub3VnaCB0byB3b3Jr IGJvdGggZm9yIGJ1ZmZlcnMgYW5kIGJ1ZmZlciBkZXNjcmlwdG9ycywKKwkgKiBidXQgbm90 IHRvbyBsYXJnZS4gU2VlIHRoZSBjb21tZW50cyBhdCBjaG9vc2VfY2h1bmtfYnVmZmVycygp IGZvcgorCSAqIGRldGFpbHMuCisJICoKKwkgKiBUaGFua3MgdG8gdGhlIGVhcmxpZXIgYWxp Z25tZW50ICh0byBtZW1vcnkgcGFnZSBldGMuKSwgd2Uga25vdyB0aGUKKwkgKiBidWZmZXJz IHdvbid0IGdldCBzcGxpdCwgZXRjLgorCSAqCisJICogVGhpcyBhbHNvIG1ha2VzIGl0IGVh c2llciAvIHN0cmFpZ2h0Zm9yd2FyZCB0byBjYWxjdWxhdGUgd2hpY2ggTlVNQQorCSAqIG5v ZGUgYSBidWZmZXIgYmVsb25ncyB0byAoaXQncyBhIG1hdHRlciBvZiBkaXZpZGUgKyBtb2Qp LiBTZWUKKwkgKiBCdWZmZXJHZXROb2RlKCkuCisJICoKKwkgKiBXZSBuZWVkIHRvIGFjY291 bnQgZm9yIHBhcnRpdGlvbnMgYmVpbmcgb2YgZGlmZmVyZW50IGxlbmd0aCwgd2hlbiB0aGUK KwkgKiBOQnVmZmVycyBpcyBub3QgbmljZWx5IGRpdmlzaWJsZS4gVG8gZG8gdGhhdCB3ZSBr ZWVwIHRyYWNrIG9mIHRoZSBzdGFydAorCSAqIG9mIHRoZSBuZXh0IHBhcnRpdGlvbi4KKwkg Ki8KKwlidWZmZXJzX3B0ciA9IEJ1ZmZlckJsb2NrczsKKwlkZXNjcmlwdG9yc19wdHIgPSAo Y2hhciAqKSBCdWZmZXJEZXNjcmlwdG9yczsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbnVt YV9wYXJ0aXRpb25zOyBpKyspCisJeworCQlCdWZmZXJQYXJ0aXRpb24gKnBhcnQgPSAmQnVm ZmVyUGFydGl0aW9uc0FycmF5LT5wYXJ0aXRpb25zW2ldOworCQljaGFyCSAgICpzdGFydHB0 ciwKKwkJCQkgICAqZW5kcHRyOworCisJCS8qIGZpcnN0IG1hcCBidWZmZXJzICovCisJCXN0 YXJ0cHRyID0gYnVmZmVyc19wdHI7CisJCWVuZHB0ciA9IHN0YXJ0cHRyICsgKChTaXplKSBw YXJ0LT5udW1fYnVmZmVycyAqIEJMQ0tTWik7CisJCWJ1ZmZlcnNfcHRyID0gZW5kcHRyOwkv KiBzdGFydCBvZiB0aGUgbmV4dCBwYXJ0aXRpb24gKi8KKworCQllbG9nKERFQlVHMSwgIk5V TUE6IGJ1ZmZlcl9wYXJ0aXRpb25zX2luaXQ6ICVkID0+ICVkIGJ1ZmZlcnMgJWQgc3RhcnQg JXAgZW5kICVwIChzaXplICV6ZCkiLAorCQkJIGksIHBhcnQtPm51bWFfbm9kZSwgcGFydC0+ bnVtX2J1ZmZlcnMsIHN0YXJ0cHRyLCBlbmRwdHIsIChlbmRwdHIgLSBzdGFydHB0cikpOwor CisJCXBnX251bWFfbW92ZV90b19ub2RlKHN0YXJ0cHRyLCBlbmRwdHIsIHBhcnQtPm51bWFf bm9kZSk7CisKKwkJLyogbm93IGRvIHRoZSBzYW1lIGZvciBidWZmZXIgZGVzY3JpcHRvcnMg Ki8KKwkJc3RhcnRwdHIgPSBkZXNjcmlwdG9yc19wdHI7CisJCWVuZHB0ciA9IHN0YXJ0cHRy ICsgKChTaXplKSBwYXJ0LT5udW1fYnVmZmVycyAqIHNpemVvZihCdWZmZXJEZXNjUGFkZGVk KSk7CisJCWRlc2NyaXB0b3JzX3B0ciA9IGVuZHB0cjsKKworCQllbG9nKERFQlVHMSwgIk5V TUE6IGJ1ZmZlcl9wYXJ0aXRpb25zX2luaXQ6ICVkID0+ICVkIGRlc2NyaXB0b3JzICVkIHN0 YXJ0ICVwIGVuZCAlcCAoc2l6ZSAlemQpIiwKKwkJCSBpLCBwYXJ0LT5udW1hX25vZGUsIHBh cnQtPm51bV9idWZmZXJzLCBzdGFydHB0ciwgZW5kcHRyLCAoZW5kcHRyIC0gc3RhcnRwdHIp KTsKKworCQlwZ19udW1hX21vdmVfdG9fbm9kZShzdGFydHB0ciwgZW5kcHRyLCBwYXJ0LT5u dW1hX25vZGUpOworCX0KKworCS8qIHdlIHNob3VsZCBoYXZlIGNvbnN1bWVkIHRoZSBhcnJh eXMgZXhhY3RseSAqLworCUFzc2VydChidWZmZXJzX3B0ciA9PSBCdWZmZXJCbG9ja3MgKyAo U2l6ZSkgTkJ1ZmZlcnMgKiBCTENLU1opOworCUFzc2VydChkZXNjcmlwdG9yc19wdHIgPT0g KGNoYXIgKikgQnVmZmVyRGVzY3JpcHRvcnMgKyAoU2l6ZSkgTkJ1ZmZlcnMgKiBzaXplb2Yo QnVmZmVyRGVzY1BhZGRlZCkpOworfQorCitpbnQKK0J1ZmZlclBhcnRpdGlvbkNvdW50KHZv aWQpCit7CisJcmV0dXJuIEJ1ZmZlclBhcnRpdGlvbnNBcnJheS0+bnBhcnRpdGlvbnM7Cit9 CisKK2ludAorQnVmZmVyUGFydGl0aW9uTm9kZXModm9pZCkKK3sKKwlyZXR1cm4gQnVmZmVy UGFydGl0aW9uc0FycmF5LT5ubm9kZXM7Cit9CisKK3ZvaWQKK0J1ZmZlclBhcnRpdGlvbkdl dChpbnQgaWR4LCBpbnQgKm5vZGUsIGludCAqbnVtX2J1ZmZlcnMsCisJCQkJICAgaW50ICpm aXJzdF9idWZmZXIsIGludCAqbGFzdF9idWZmZXIpCit7CisJaWYgKChpZHggPj0gMCkgJiYg KGlkeCA8IEJ1ZmZlclBhcnRpdGlvbnNBcnJheS0+bnBhcnRpdGlvbnMpKQorCXsKKwkJQnVm ZmVyUGFydGl0aW9uICpwYXJ0ID0gJkJ1ZmZlclBhcnRpdGlvbnNBcnJheS0+cGFydGl0aW9u c1tpZHhdOworCisJCSpub2RlID0gcGFydC0+bnVtYV9ub2RlOworCQkqbnVtX2J1ZmZlcnMg PSBwYXJ0LT5udW1fYnVmZmVyczsKKwkJKmZpcnN0X2J1ZmZlciA9IHBhcnQtPmZpcnN0X2J1 ZmZlcjsKKwkJKmxhc3RfYnVmZmVyID0gcGFydC0+bGFzdF9idWZmZXI7CisKKwkJcmV0dXJu OworCX0KKworCWVsb2coRVJST1IsICJpbnZhbGlkIHBhcnRpdGlvbiBpbmRleCIpOworfQor CisvKiBYWFggdGhlIEdVQyBob29rcyBzaG91bGQgcHJvYmFibHkgYmUgc29tZXdoZXJlIGVs c2U/ICovCitib29sCitjaGVja19kZWJ1Z19udW1hKGNoYXIgKipuZXd2YWwsIHZvaWQgKipl eHRyYSwgR3VjU291cmNlIHNvdXJjZSkKK3sKKwlib29sCQlyZXN1bHQgPSB0cnVlOworCWlu dAkJCWZsYWdzOworCisjaWYgVVNFX0xJQk5VTUEgPT0gMAorCWlmIChzdHJjbXAoKm5ld3Zh bCwgIiIpICE9IDApCisJeworCQlHVUNfY2hlY2tfZXJyZGV0YWlsKCJcIiVzXCIgaXMgbm90 IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIsCisJCQkJCQkJImRlYnVnX251bWEiKTsK KwkJcmVzdWx0ID0gZmFsc2U7CisJfQorCWZsYWdzID0gMDsKKyNlbHNlCisJTGlzdAkgICAq ZWxlbWxpc3Q7CisJTGlzdENlbGwgICAqbDsKKwljaGFyCSAgICpyYXdzdHJpbmc7CisKKwkv KiBOZWVkIGEgbW9kaWZpYWJsZSBjb3B5IG9mIHN0cmluZyAqLworCXJhd3N0cmluZyA9IHBz dHJkdXAoKm5ld3ZhbCk7CisKKwlpZiAoIVNwbGl0R1VDTGlzdChyYXdzdHJpbmcsICcsJywg JmVsZW1saXN0KSkKKwl7CisJCUdVQ19jaGVja19lcnJkZXRhaWwoIkludmFsaWQgbGlzdCBz eW50YXggaW4gcGFyYW1ldGVyIFwiJXNcIi4iLAorCQkJCQkJCSJkZWJ1Z19udW1hIik7CisJ CXBmcmVlKHJhd3N0cmluZyk7CisJCWxpc3RfZnJlZShlbGVtbGlzdCk7CisJCXJldHVybiBm YWxzZTsKKwl9CisKKwlmbGFncyA9IDA7CisJZm9yZWFjaChsLCBlbGVtbGlzdCkKKwl7CisJ CWNoYXIJICAgKml0ZW0gPSAoY2hhciAqKSBsZmlyc3QobCk7CisKKwkJaWYgKHBnX3N0cmNh c2VjbXAoaXRlbSwgImJ1ZmZlcnMiKSA9PSAwKQorCQkJZmxhZ3MgfD0gTlVNQV9CVUZGRVJT OworCQllbHNlCisJCXsKKwkJCUdVQ19jaGVja19lcnJkZXRhaWwoIkludmFsaWQgb3B0aW9u IFwiJXNcIi4iLCBpdGVtKTsKKwkJCXJlc3VsdCA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0K Kwl9CisKKwlwZnJlZShyYXdzdHJpbmcpOworCWxpc3RfZnJlZShlbGVtbGlzdCk7CisjZW5k aWYKKworCWlmICghcmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJLyogU2F2ZSB0aGUg ZmxhZ3MgaW4gKmV4dHJhLCBmb3IgdXNlIGJ5IGFzc2lnbl9kZWJ1Z19pb19kaXJlY3QgKi8K KwkqZXh0cmEgPSBndWNfbWFsbG9jKExPRywgc2l6ZW9mKGludCkpOworCWlmICghKmV4dHJh KQorCQlyZXR1cm4gZmFsc2U7CisJKigoaW50ICopICpleHRyYSkgPSBmbGFnczsKKworCXJl dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQKK2Fzc2lnbl9kZWJ1Z19udW1hKGNvbnN0IGNoYXIg Km5ld3ZhbCwgdm9pZCAqZXh0cmEpCit7CisJaW50CQkgICAqZmxhZ3MgPSAoaW50ICopIGV4 dHJhOworCisJbnVtYV9mbGFncyA9ICpmbGFnczsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKaW5kZXggNmJjNmJlMTNkMmEuLjY1YmVmMmIzYzFi IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRh dAorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAt ODk5LDYgKzg5OSwxNiBAQAogICBib290X3ZhbCA9PiAndHJ1ZScsCiB9LAogCit7IG5hbWUg PT4gJ2RlYnVnX251bWEnLCB0eXBlID0+ICdzdHJpbmcnLCBjb250ZXh0ID0+ICdQR0NfUE9T VE1BU1RFUicsIGdyb3VwID0+ICdERVZFTE9QRVJfT1BUSU9OUycsCisgIHNob3J0X2Rlc2Mg PT4gJ05VTUEtYXdhcmUgcGFydGl0aW9uaW5nIG9mIHNoYXJlZCBtZW1vcnkuJywKKyAgbG9u Z19kZXNjID0+ICdBbiBlbXB0eSBzdHJpbmcgZGlzYWJsZXMgTlVNQS1hd2FyZSBwYXJ0aXRp b25pbmcuJywKKyAgZmxhZ3MgPT4gJ0dVQ19MSVNUX0lOUFVUIHwgR1VDX05PVF9JTl9TQU1Q TEUnLAorICB2YXJpYWJsZSA9PiAnZGVidWdfbnVtYV9zdHJpbmcnLAorICBib290X3ZhbCA9 PiAnIiInLAorICBjaGVja19ob29rID0+ICdjaGVja19kZWJ1Z19udW1hJywKKyAgYXNzaWdu X2hvb2sgPT4gJ2Fzc2lnbl9kZWJ1Z19udW1hJywKK30sCisKIHsgbmFtZSA9PiAnc3luY19y ZXBsaWNhdGlvbl9zbG90cycsIHR5cGUgPT4gJ2Jvb2wnLCBjb250ZXh0ID0+ICdQR0NfU0lH SFVQJywgZ3JvdXAgPT4gJ1JFUExJQ0FUSU9OX1NUQU5EQlknLAogICBzaG9ydF9kZXNjID0+ ICdFbmFibGVzIGEgcGh5c2ljYWwgc3RhbmRieSB0byBzeW5jaHJvbml6ZSBsb2dpY2FsIGZh aWxvdmVyIHJlcGxpY2F0aW9uIHNsb3RzIGZyb20gdGhlIHByaW1hcnkgc2VydmVyLicsCiAg IHZhcmlhYmxlID0+ICdzeW5jX3JlcGxpY2F0aW9uX3Nsb3RzJywKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9ndWNfdGFibGVzLmMKaW5kZXggMDBjODM3NmNmNGQuLmQxN2VlOWNhODYxIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpAQCAtNTk1LDYgKzU5NSw3IEBAIHN0 YXRpYyBjaGFyICpzZXJ2ZXJfdmVyc2lvbl9zdHJpbmc7CiBzdGF0aWMgaW50CXNlcnZlcl92 ZXJzaW9uX251bTsKIHN0YXRpYyBjaGFyICpkZWJ1Z19pb19kaXJlY3Rfc3RyaW5nOwogc3Rh dGljIGNoYXIgKnJlc3RyaWN0X25vbnN5c3RlbV9yZWxhdGlvbl9raW5kX3N0cmluZzsKK3N0 YXRpYyBjaGFyICpkZWJ1Z19udW1hX3N0cmluZzsKIAogI2lmZGVmIEhBVkVfU1lTTE9HCiAj ZGVmaW5lCURFRkFVTFRfU1lTTE9HX0ZBQ0lMSVRZIExPR19MT0NBTDAKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3BvcnQvcGdfbnVtYS5oIGIvc3JjL2luY2x1ZGUvcG9ydC9wZ19udW1h LmgKaW5kZXggOWQxZWE2ZDBkYjguLjk3MzRhYTMxNWZmIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9wb3J0L3BnX251bWEuaAorKysgYi9zcmMvaW5jbHVkZS9wb3J0L3BnX251bWEuaApA QCAtMTcsNiArMTcsMTIgQEAKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgcGdfbnVtYV9pbml0 KHZvaWQpOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBwZ19udW1hX3F1ZXJ5X3BhZ2VzKGlu dCBwaWQsIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKipwYWdlcywgaW50ICpzdGF0dXMp OwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBwZ19udW1hX2dldF9tYXhfbm9kZSh2b2lkKTsK K2V4dGVybiBQR0RMTElNUE9SVCBTaXplIHBnX251bWFfcGFnZV9zaXplKHZvaWQpOworZXh0 ZXJuIFBHRExMSU1QT1JUIHZvaWQgcGdfbnVtYV9tb3ZlX3RvX25vZGUoY2hhciAqc3RhcnRw dHIsIGNoYXIgKmVuZHB0ciwgaW50IG5vZGUpOworCitleHRlcm4gUEdETExJTVBPUlQgaW50 IG51bWFfZmxhZ3M7CisKKyNkZWZpbmUJCU5VTUFfQlVGRkVSUwkJMHgwMQogCiAjaWZkZWYg VVNFX0xJQk5VTUEKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50 ZXJuYWxzLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaAppbmRleCBk ZmQ2MTRmN2NhNC4uMjk0MTg4ZTIxYzUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvYnVmX2ludGVybmFscy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVy bmFscy5oCkBAIC0yNzUsMTAgKzI3NSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBCdWZmZXJEZXNj CiAgKiBsaW5lIHNpemVkLgogICoKICAqIFhYWDogQXMgdGhpcyBpcyBwcmltYXJpbHkgbWF0 dGVycyBpbiBoaWdobHkgY29uY3VycmVudCB3b3JrbG9hZHMgd2hpY2gKLSAqIHByb2JhYmx5 IGFsbCBhcmUgNjRiaXQgdGhlc2UgZGF5cywgYW5kIHRoZSBzcGFjZSB3YXN0YWdlIHdvdWxk IGJlIGEgYml0Ci0gKiBtb3JlIG5vdGljZWFibGUgb24gMzJiaXQgc3lzdGVtcywgd2UgZG9u J3QgZm9yY2UgdGhlIHN0cmlkZSB0byBiZSBjYWNoZQotICogbGluZSBzaXplZCBvbiB0aG9z ZS4gSWYgc29tZWJvZHkgZG9lcyBhY3R1YWwgcGVyZm9ybWFuY2UgdGVzdGluZywgd2UgY2Fu Ci0gKiByZWV2YWx1YXRlLgorICogcHJvYmFibHkgYWxsIGFyZSA2NGJpdCB0aGVzZSBkYXlz LiBXZSBmb3JjZSB0aGUgc3RyaWRlIHRvIGJlIGNhY2hlIGxpbmUKKyAqIHNpemVkIGV2ZW4g b24gMzJiaXQgc3lzdGVtcywgd2hlcmUgdGhlIHNwYWNlIHdhc3RhZ2UgaXMgYmUgYSBiaXQg bW9yZQorICogbm90aWNlYWJsZSwgdG8gYWxsb3cgcGFydGl0aW9uaW5nIG9mIHNoYXJlZCBi dWZmZXJzICh3aGljaCByZXF1aXJlcyB0aGUKKyAqIG1lbW9yeSBwYWdlIGJlIGEgbXVsdGlw bGUgb2YgYnVmZmVyIGRlc2NyaXB0b3IpLgogICoKICAqIE5vdGUgdGhhdCBsb2NhbCBidWZm ZXIgZGVzY3JpcHRvcnMgYXJlbid0IGZvcmNlZCB0byBiZSBhbGlnbmVkIC0gYXMgdGhlcmUn cwogICogbm8gY29uY3VycmVudCBhY2Nlc3MgdG8gdGhvc2UgaXQncyB1bmxpa2VseSB0byBi ZSBiZW5lZmljaWFsLgpAQCAtMjg4LDcgKzI4OCw3IEBAIHR5cGVkZWYgc3RydWN0IEJ1ZmZl ckRlc2MKICAqIHBsYXRmb3JtIHdpdGggZWl0aGVyIDMyIG9yIDEyOCBieXRlIGxpbmUgc2l6 ZXMsIGl0J3MgZ29vZCB0byBhbGlnbiB0bwogICogYm91bmRhcmllcyBhbmQgYXZvaWQgZmFs c2Ugc2hhcmluZy4KICAqLwotI2RlZmluZSBCVUZGRVJERVNDX1BBRF9UT19TSVpFCShTSVpF T0ZfVk9JRF9QID09IDggPyA2NCA6IDEpCisjZGVmaW5lIEJVRkZFUkRFU0NfUEFEX1RPX1NJ WkUJNjQKIAogdHlwZWRlZiB1bmlvbiBCdWZmZXJEZXNjUGFkZGVkCiB7CkBAIC0zMjEsNiAr MzIxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgV3JpdGViYWNrQ29udGV4dAogCiAvKiBpbiBidWZf aW5pdC5jICovCiBleHRlcm4gUEdETExJTVBPUlQgQnVmZmVyRGVzY1BhZGRlZCAqQnVmZmVy RGVzY3JpcHRvcnM7CitleHRlcm4gUEdETExJTVBPUlQgQnVmZmVyUGFydGl0aW9ucyAqQnVm ZmVyUGFydGl0aW9uc0FycmF5OwogZXh0ZXJuIFBHRExMSU1QT1JUIENvbmRpdGlvblZhcmlh YmxlTWluaW1hbGx5UGFkZGVkICpCdWZmZXJJT0NWQXJyYXk7CiBleHRlcm4gUEdETExJTVBP UlQgV3JpdGViYWNrQ29udGV4dCBCYWNrZW5kV3JpdGViYWNrQ29udGV4dDsKIApAQCAtNDgw LDQgKzQ4MSw5IEBAIGV4dGVybiB2b2lkIERyb3BSZWxhdGlvbkxvY2FsQnVmZmVycyhSZWxG aWxlTG9jYXRvciBybG9jYXRvciwKIGV4dGVybiB2b2lkIERyb3BSZWxhdGlvbkFsbExvY2Fs QnVmZmVycyhSZWxGaWxlTG9jYXRvciBybG9jYXRvcik7CiBleHRlcm4gdm9pZCBBdEVPWGFj dF9Mb2NhbEJ1ZmZlcnMoYm9vbCBpc0NvbW1pdCk7CiAKK2V4dGVybiBpbnQJQnVmZmVyUGFy dGl0aW9uQ291bnQodm9pZCk7CitleHRlcm4gaW50CUJ1ZmZlclBhcnRpdGlvbk5vZGVzKHZv aWQpOworZXh0ZXJuIHZvaWQgQnVmZmVyUGFydGl0aW9uR2V0KGludCBpZHgsIGludCAqbm9k ZSwgaW50ICpudW1fYnVmZmVycywKKwkJCQkJCQkgICBpbnQgKmZpcnN0X2J1ZmZlciwgaW50 ICpsYXN0X2J1ZmZlcik7CisKICNlbmRpZgkJCQkJCQkvKiBCVUZNR1JfSU5URVJOQUxTX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmggYi9zcmMvaW5j bHVkZS9zdG9yYWdlL2J1Zm1nci5oCmluZGV4IDQ3MzYwYTNkM2Q4Li4xNjE4Y2FmMWMyYyAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAorKysgYi9zcmMvaW5j bHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC0xNDYsNiArMTQ2LDI4IEBAIHN0cnVjdCBSZWFk QnVmZmVyc09wZXJhdGlvbgogCiB0eXBlZGVmIHN0cnVjdCBSZWFkQnVmZmVyc09wZXJhdGlv biBSZWFkQnVmZmVyc09wZXJhdGlvbjsKIAorLyoKKyAqIGluZm9ybWF0aW9uIGFib3V0IG9u ZSBwYXJ0aXRpb24gb2Ygc2hhcmVkIGJ1ZmZlcnMKKyAqCisgKiBudW1hX25vZCBzcGVjaWZp ZXMgbm9kZSBmb3IgdGhpcyBwYXJ0aXRpb24gKC0xIG1lYW5zIGFsbG9jYXRlZCBvbiBhbnkg bm9kZSkKKyAqIGZpcnN0L2xhc3QgYnVmZmVyIC0gdGhlIHZhbHVlcyBhcmUgaW5jbHVzaXZl CisgKi8KK3R5cGVkZWYgc3RydWN0IEJ1ZmZlclBhcnRpdGlvbgoreworCWludAkJCW51bWFf bm9kZTsJCS8qIE5VTUEgbm9kZSAoLTEgbm8gbm9kZSkgKi8KKwlpbnQJCQludW1fYnVmZmVy czsJLyogbnVtYmVyIG9mIGJ1ZmZlcnMgKi8KKwlpbnQJCQlmaXJzdF9idWZmZXI7CS8qIGZp cnN0IGJ1ZmZlciBvZiBwYXJ0aXRpb24gKi8KKwlpbnQJCQlsYXN0X2J1ZmZlcjsJLyogbGFz dCBidWZmZXIgb2YgcGFydGl0aW9uICovCit9IEJ1ZmZlclBhcnRpdGlvbjsKKworLyogYW4g YXJyYXkgb2YgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHBhcnRpdGlvbnMgKi8KK3R5cGVkZWYg c3RydWN0IEJ1ZmZlclBhcnRpdGlvbnMKK3sKKwlpbnQJCQlucGFydGl0aW9uczsJLyogbnVt YmVyIG9mIHBhcnRpdGlvbnMgKi8KKwlpbnQJCQlubm9kZXM7CQkJLyogbnVtYmVyIG9mIE5V TUEgbm9kZXMgKi8KKwlCdWZmZXJQYXJ0aXRpb24gcGFydGl0aW9uc1tGTEVYSUJMRV9BUlJB WV9NRU1CRVJdOworfSBCdWZmZXJQYXJ0aXRpb25zOworCiAvKiB0byBhdm9pZCBoYXZpbmcg dG8gZXhwb3NlIGJ1Zl9pbnRlcm5hbHMuaCBoZXJlICovCiB0eXBlZGVmIHN0cnVjdCBXcml0 ZWJhY2tDb250ZXh0IFdyaXRlYmFja0NvbnRleHQ7CiAKQEAgLTMxOSw2ICszNDEsNyBAQCBl eHRlcm4gdm9pZCBFdmljdFJlbFVucGlubmVkQnVmZmVycyhSZWxhdGlvbiByZWwsCiAvKiBp biBidWZfaW5pdC5jICovCiBleHRlcm4gdm9pZCBCdWZmZXJNYW5hZ2VyU2htZW1Jbml0KHZv aWQpOwogZXh0ZXJuIFNpemUgQnVmZmVyTWFuYWdlclNobWVtU2l6ZSh2b2lkKTsKK2V4dGVy biBpbnQJQnVmZmVyR2V0Tm9kZShCdWZmZXIgYnVmZmVyKTsKIAogLyogaW4gbG9jYWxidWYu YyAqLwogZXh0ZXJuIHZvaWQgQXRQcm9jRXhpdF9Mb2NhbEJ1ZmZlcnModm9pZCk7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9ndWNfaG9va3MuaCBiL3NyYy9pbmNsdWRlL3V0 aWxzL2d1Y19ob29rcy5oCmluZGV4IDgyYWM4NjQ2YThkLi4xNTMwNGRmMGRlNSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvZ3VjX2hvb2tzLmgKKysrIGIvc3JjL2luY2x1ZGUv dXRpbHMvZ3VjX2hvb2tzLmgKQEAgLTE3NSw0ICsxNzUsNyBAQCBleHRlcm4gYm9vbCBjaGVj a19zeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cyhjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0 cmEsCiAJCQkJCQkJCQkJCSBHdWNTb3VyY2Ugc291cmNlKTsKIGV4dGVybiB2b2lkIGFzc2ln bl9zeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cyhjb25zdCBjaGFyICpuZXd2YWwsIHZvaWQg KmV4dHJhKTsKIAorZXh0ZXJuIGJvb2wgY2hlY2tfZGVidWdfbnVtYShjaGFyICoqbmV3dmFs LCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpOworZXh0ZXJuIHZvaWQgYXNzaWdu X2RlYnVnX251bWEoY29uc3QgY2hhciAqbmV3dmFsLCB2b2lkICpleHRyYSk7CisKICNlbmRp ZgkJCQkJCQkvKiBHVUNfSE9PS1NfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BvcnQvcGdfbnVt YS5jIGIvc3JjL3BvcnQvcGdfbnVtYS5jCmluZGV4IDMzNjhhNDNhMzM4Li44ZWUwZTdkMjEx YyAxMDA2NDQKLS0tIGEvc3JjL3BvcnQvcGdfbnVtYS5jCisrKyBiL3NyYy9wb3J0L3BnX251 bWEuYwpAQCAtMTgsNiArMTgsOSBAQAogCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5j bHVkZSAicG9ydC9wZ19udW1hLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wZ19zaG1lbS5oIgor CitpbnQJbnVtYV9mbGFnczsKIAogLyoKICAqIEF0IHRoaXMgcG9pbnQgd2UgcHJvdmlkZSBz dXBwb3J0IG9ubHkgZm9yIExpbnV4IHRoYW5rcyB0byBsaWJudW1hLCBidXQgaW4KQEAgLTEw Niw2ICsxMDksMzYgQEAgcGdfbnVtYV9nZXRfbWF4X25vZGUodm9pZCkKIAlyZXR1cm4gbnVt YV9tYXhfbm9kZSgpOwogfQogCisvKgorICogcGdfbnVtYV9tb3ZlX3RvX25vZGUKKyAqCQlt b3ZlIG1lbW9yeSB0byBkaWZmZXJlbnQgTlVNQSBub2RlcyBpbiBsYXJnZXIgY2h1bmtzCisg KgorICogc3RhcnRwdHIgLSBzdGFydCBvZiB0aGUgcmVnaW9uIChzaG91bGQgYmUgYWxpZ25l ZCB0byBwYWdlIHNpemUpCisgKiBlbmRwdHIgLSBlbmQgb2YgdGhlIHJlZ2lvbiAoZG9lc24n dCBuZWVkIHRvIGJlIGFsaWduZWQpCisgKiBub2RlIC0gbm9kZSB0byBtb3ZlIHRoZSBtZW1v cnkgdG8KKyAqCisgKiBUaGUgInN0YXJ0cHRyIiBpcyBleHBlY3RlZCB0byBiZSBhIG11bHRp cGxlIG9mIHN5c3RlbSBtZW1vcnkgcGFnZSBzaXplLCBhcworICogZGV0ZXJtaW5lZCBieSBw Z19udW1hX3BhZ2Vfc2l6ZS4KKyAqCisgKiBYWFggV2Ugb25seSBleHBlY3QgdG8gZG8gdGhp cyBkdXJpbmcgc3RhcnR1cCwgd2hlbiB0aGUgc2hhcmVkIG1lbW9yeSBpcworICogc3RpbGwg YmVpbmcgc2V0dXAuCisgKi8KK3ZvaWQKK3BnX251bWFfbW92ZV90b19ub2RlKGNoYXIgKnN0 YXJ0cHRyLCBjaGFyICplbmRwdHIsIGludCBub2RlKQoreworCVNpemUJCXN6ID0gKGVuZHB0 ciAtIHN0YXJ0cHRyKTsKKworCUFzc2VydCgoaW50NjQpIHN0YXJ0cHRyICUgcGdfbnVtYV9w YWdlX3NpemUoKSA9PSAwKTsKKworCS8qCisJICogbnVtYV90b25vZGVfbWVtb3J5IGRvZXMg bm90IGFjdHVhbGx5IGNhdXNlIGEgcGFnZSBmYXVsdCwgYW5kIHRodXMgZG9lcworCSAqIG5v dCBsb2NhdGUgdGhlIG1lbW9yeSBvbiB0aGUgbm9kZS4gU28gaXQncyBmYXN0LCBhdCBsZWFz dCBjb21wYXJlZCB0bworCSAqIHBnX251bWFfcXVlcnlfcGFnZXMsIGFuZCBkb2VzIG5vdCBt YWtlIHN0YXJ0dXAgbG9uZ2VyLiBCdXQgaXQgYWxzbworCSAqIG1lYW5zIHRoZSBleHBlbnNp dmUgcGFydCBoYXBwZW4gbGF0ZXIsIG9uIHRoZSBmaXJzdCBhY2Nlc3MuCisJICovCisJbnVt YV90b25vZGVfbWVtb3J5KHN0YXJ0cHRyLCBzeiwgbm9kZSk7Cit9CisKICNlbHNlCiAKIC8q IEVtcHR5IHdyYXBwZXJzICovCkBAIC0xMjgsNCArMTYxLDM1IEBAIHBnX251bWFfZ2V0X21h eF9ub2RlKHZvaWQpCiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQKK3BnX251bWFfbW92ZV90b19u b2RlKGNoYXIgKnN0YXJ0cHRyLCBjaGFyICplbmRwdHIsIGludCBub2RlKQoreworCS8qIHdl IGRvbid0IGV4cGVjdCB0byBldmVyIGdldCBoZXJlIGluIGJ1aWxkcyB3aXRob3V0IGxpYm51 bWEgKi8KKwlBc3NlcnQoZmFsc2UpOworfQorCisjZW5kaWYKKworU2l6ZQorcGdfbnVtYV9w YWdlX3NpemUodm9pZCkKK3sKKwlTaXplCQlvc19wYWdlX3NpemU7CisJU2l6ZQkJaHVnZV9w YWdlX3NpemU7CisKKyNpZmRlZiBXSU4zMgorCVNZU1RFTV9JTkZPIHN5c2luZm87CisKKwlH ZXRTeXN0ZW1JbmZvKCZzeXNpbmZvKTsKKwlvc19wYWdlX3NpemUgPSBzeXNpbmZvLmR3UGFn ZVNpemU7CisjZWxzZQorCW9zX3BhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsK ICNlbmRpZgorCisJLyogYXNzdW1lIGh1Z2UgcGFnZXMgZ2V0IHVzZWQsIHVubGVzcyBIVUdF X1BBR0VTX09GRiAqLworCWlmIChodWdlX3BhZ2VzX3N0YXR1cyAhPSBIVUdFX1BBR0VTX09G RikKKwkJR2V0SHVnZVBhZ2VTaXplKCZodWdlX3BhZ2Vfc2l6ZSwgTlVMTCk7CisJZWxzZQor CQlodWdlX3BhZ2Vfc2l6ZSA9IDA7CisKKwlyZXR1cm4gTWF4KG9zX3BhZ2Vfc2l6ZSwgaHVn ZV9wYWdlX3NpemUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBlOTBh ZjViMmFkMy4uYjNmMDUwNDAwOGUgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBA IC0zNDYsNiArMzQ2LDggQEAgQnVmZmVyRGVzY1BhZGRlZAogQnVmZmVySGVhcFR1cGxlVGFi bGVTbG90CiBCdWZmZXJMb29rdXBFbnQKIEJ1ZmZlck1hbmFnZXJSZWxhdGlvbgorQnVmZmVy UGFydGl0aW9uCitCdWZmZXJQYXJ0aXRpb25zCiBCdWZmZXJTdHJhdGVneUNvbnRyb2wKIEJ1 ZmZlclRhZwogQnVmZmVyVXNhZ2UKLS0gCjIuNTEuMAoK --------------7ugtFjYi6YRzRLN0MXp6Nj6F Content-Type: text/x-patch; charset=UTF-8; name="v20250918-0002-NUMA-clockweep-partitioning.patch" Content-Disposition: attachment; filename="v20250918-0002-NUMA-clockweep-partitioning.patch" Content-Transfer-Encoding: base64 RnJvbSBlNzE0NWI3ZTc3MTQ4NzAxMmFhMGM3MjMzMDkzNTM3MjNkYjkzMTcyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogU3VuLCA4IEp1biAyMDI1IDE4OjUzOjEyICswMjAwClN1YmplY3Q6IFtQQVRDSCB2 MjAyNTA5MTggMi82XSBOVU1BOiBjbG9ja3dlZXAgcGFydGl0aW9uaW5nCgpTaW1pbGFyIHRv IHRoZSBmcmVsaXN0IHBhdGNoIC0gcGFydGl0aW9uIHRoZSAiY2xvY2tzd2VlcCIgYWxnb3Jp dGhtIHRvCndvcmsgb24gdGhlIHNlcXVlbmNlIG9mIHNtYWxsZXIgcGFydGl0aW9ucywgb25l IGJ5IG9uZS4KCkl0IGV4dGVuZHMgdGhlICJwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zIiB2 aWV3IHRvIGluY2x1ZGUgaW5mb3JtYXRpb24KYWJvdXQgdGhlIGNsb2Nrc3dlZXAgYWN0aXZp dHkuCgpOb3RlOiBUaGlzIG5lZWRzIHNvbWUgc29ydCBvZiAiYmFsYW5jaW5nIiB3aGVuIG9u ZSBvZiB0aGUgcGFydGl0aW9ucyBpcwptdWNoIGJ1c2llciB0aGFuIHRoZSByZXN0IChlLmcu IGJlY2F1c2UgdGhlcmUncyBhIHNpbmdsZSBiYWNrZW5kIGNvbnN1bWluZwphIGxvdCBvZiBi dWZmZXJzIGZyb20gaXQpLgoKTm90ZTogVGhlcmUncyBhIHByb2JsZW0gd2l0aCBzb21lIHRl c3RzIHJ1bm5pbmcgb3V0IG9mIHVucGlubmVkIGJ1ZmZlcnMsCmR1ZSB0byAoaW50ZW50aW9u YWxseSkgc2V0dGluZyBzaGFyZWQgYnVmZmVycyB2ZXJ5IGxvdy4gVGhhdCBoYXBwZW5zCmJl Y2F1c2UgU3RyYXRlZ3lHZXRCdWZmZXIoKSBvbmx5IHNlYXJjaGVzIGEgc2luZ2xlIHBhcnRp dGlvbiwgYW5kIGl0CmhhcyBhIGNvdXBsZSBtb3JlIGlzc3Vlcy4KLS0tCiAuLi4vcGdfYnVm ZmVyY2FjaGUtLTEuNi0tMS43LnNxbCAgICAgICAgICAgICAgfCAgIDggKy0KIGNvbnRyaWIv cGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYyB8ICAzMiArLQogc3JjL2Jh Y2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYyAgICAgICAgIHwgIDExICsKIHNyYy9i YWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jICAgICAgICAgICB8IDE4NiArKysrKy0t LS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMgICAgICAgICB8IDM1 MyArKysrKysrKysrKysrKysrLS0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFs cy5oICAgICAgICAgICB8ICAgNSArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCAg ICAgICAgICAgICAgICAgIHwgICA1ICsKIHNyYy90ZXN0L3JlY292ZXJ5L3QvMDI3X3N0cmVh bV9yZWdyZXNzLnBsICAgICB8ICAgNSArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCAgICAgICAgICAgICAgfCAgIDEgKwogOSBmaWxlcyBjaGFuZ2VkLCA1MDMgaW5zZXJ0 aW9ucygrKSwgMTAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYnVm ZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbCBiL2NvbnRyaWIvcGdfYnVm ZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbAppbmRleCBmYjkwMDNjMDEx ZS4uNjY3NmU4MDcwMzQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdf YnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbAorKysgYi9jb250cmliL3BnX2J1ZmZlcmNhY2hl L3BnX2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwKQEAgLTE2LDcgKzE2LDEzIEBAIENSRUFU RSBWSUVXIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMgQVMKIAkgbnVtYV9ub2RlIGludGVn ZXIsCQkJLS0gTlVNQSBub2RlIG9mIHRoZSBwYXJ0aXRpb29uCiAJIG51bV9idWZmZXJzIGlu dGVnZXIsCQktLSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcGFydGl0aW9uCiAJIGZpcnN0 X2J1ZmZlciBpbnRlZ2VyLAkJLS0gZmlyc3QgYnVmZmVyIG9mIHBhcnRpdGlvbgotCSBsYXN0 X2J1ZmZlciBpbnRlZ2VyKTsJCS0tIGxhc3QgYnVmZmVyIG9mIHBhcnRpdGlvbgorCSBsYXN0 X2J1ZmZlciBpbnRlZ2VyLAkJLS0gbGFzdCBidWZmZXIgb2YgcGFydGl0aW9uCisKKwkgLS0g Y2xvY2tzd2VlcCBjb3VudGVycworCSBudW1fcGFzc2VzIGJpZ2ludCwJCQktLSBjbG9ja3N3 ZWVwIHBhc3NlcworCSBuZXh0X2J1ZmZlciBpbnRlZ2VyLAkJLS0gbmV4dCB2aWN0aW0gYnVm ZmVyIGZvciBjbG9ja3N3ZWVwCisJIHRvdGFsX2FsbG9jcyBiaWdpbnQsCQktLSBoYW5kbGVk IGFsbG9jcyAocnVubmluZyB0b3RhbCkKKwkgbnVtX2FsbG9jcyBiaWdpbnQpOwkJLS0gaGFu ZGxlZCBhbGxvY3MgKGN1cnJlbnQgY3ljbGUpCiAKIC0tIERvbid0IHdhbnQgdGhlc2UgdG8g YmUgYXZhaWxhYmxlIHRvIHB1YmxpYy4KIFJFVk9LRSBBTEwgT04gRlVOQ1RJT04gcGdfYnVm ZmVyY2FjaGVfcGFydGl0aW9ucygpIEZST00gUFVCTElDOwpkaWZmIC0tZ2l0IGEvY29udHJp Yi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jIGIvY29udHJpYi9wZ19i dWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jCmluZGV4IDhhMGE0YmQ1Y2Q2Li5j OWRmYzhhMWI4MiAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZm ZXJjYWNoZV9wYWdlcy5jCisrKyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVy Y2FjaGVfcGFnZXMuYwpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBOVU1fQlVGRkVSQ0FD SEVfRVZJQ1RfQUxMX0VMRU0gMwogCiAjZGVmaW5lIE5VTV9CVUZGRVJDQUNIRV9OVU1BX0VM RU0JMwotI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfUEFSVElUSU9OU19FTEVNCTUKKyNkZWZp bmUgTlVNX0JVRkZFUkNBQ0hFX1BBUlRJVElPTlNfRUxFTQk5CiAKIFBHX01PRFVMRV9NQUdJ Q19FWFQoCiAJCQkJCS5uYW1lID0gInBnX2J1ZmZlcmNhY2hlIiwKQEAgLTgxOCw2ICs4MTgs MTQgQEAgcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCQkJ CQkJICAgSU5UNE9JRCwgLTEsIDApOwogCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNj LCAoQXR0ck51bWJlcikgNSwgImxhc3RfYnVmZmVyIiwKIAkJCQkJCSAgIElOVDRPSUQsIC0x LCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDYs ICJudW1fcGFzc2VzIiwKKwkJCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNj SW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDcsICJuZXh0X2J1ZmZlciIsCisJ CQkJCQkgICBJTlQ0T0lELCAtMSwgMCk7CisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRl c2MsIChBdHRyTnVtYmVyKSA4LCAidG90YWxfYWxsb2NzIiwKKwkJCQkJCSAgIElOVDhPSUQs IC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIp IDksICJudW1fYWxsb2NzIiwKKwkJCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKIAogCQlmdW5j Y3R4LT51c2VyX2ZjdHggPSBCbGVzc1R1cGxlRGVzYyh0dXBsZWRlc2MpOwogCkBAIC04Mzks MTIgKzg0NywyMiBAQCBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9OX0FS R1MpCiAJCQkJCWZpcnN0X2J1ZmZlciwKIAkJCQkJbGFzdF9idWZmZXI7CiAKKwkJdWludDY0 CQlidWZmZXJfdG90YWxfYWxsb2NzOworCisJCXVpbnQzMgkJY29tcGxldGVfcGFzc2VzLAor CQkJCQluZXh0X3ZpY3RpbV9idWZmZXIsCisJCQkJCWJ1ZmZlcl9hbGxvY3M7CisKIAkJRGF0 dW0JCXZhbHVlc1tOVU1fQlVGRkVSQ0FDSEVfUEFSVElUSU9OU19FTEVNXTsKIAkJYm9vbAkJ bnVsbHNbTlVNX0JVRkZFUkNBQ0hFX1BBUlRJVElPTlNfRUxFTV07CiAKIAkJQnVmZmVyUGFy dGl0aW9uR2V0KGksICZudW1hX25vZGUsICZudW1fYnVmZmVycywKIAkJCQkJCSAgICZmaXJz dF9idWZmZXIsICZsYXN0X2J1ZmZlcik7CiAKKwkJQ2xvY2tTd2VlcFBhcnRpdGlvbkdldElu Zm8oaSwKKwkJCQkJCQkJICAgJmNvbXBsZXRlX3Bhc3NlcywgJm5leHRfdmljdGltX2J1ZmZl ciwKKwkJCQkJCQkJICAgJmJ1ZmZlcl90b3RhbF9hbGxvY3MsICZidWZmZXJfYWxsb2NzKTsK KwogCQl2YWx1ZXNbMF0gPSBJbnQzMkdldERhdHVtKGkpOwogCQludWxsc1swXSA9IGZhbHNl OwogCkBAIC04NjAsNiArODc4LDE4IEBAIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMoUEdf RlVOQ1RJT05fQVJHUykKIAkJdmFsdWVzWzRdID0gSW50MzJHZXREYXR1bShsYXN0X2J1ZmZl cik7CiAJCW51bGxzWzRdID0gZmFsc2U7CiAKKwkJdmFsdWVzWzVdID0gSW50NjRHZXREYXR1 bShjb21wbGV0ZV9wYXNzZXMpOworCQludWxsc1s1XSA9IGZhbHNlOworCisJCXZhbHVlc1s2 XSA9IEludDMyR2V0RGF0dW0obmV4dF92aWN0aW1fYnVmZmVyKTsKKwkJbnVsbHNbNl0gPSBm YWxzZTsKKworCQl2YWx1ZXNbN10gPSBJbnQ2NEdldERhdHVtKGJ1ZmZlcl90b3RhbF9hbGxv Y3MpOworCQludWxsc1s3XSA9IGZhbHNlOworCisJCXZhbHVlc1s4XSA9IEludDY0R2V0RGF0 dW0oYnVmZmVyX2FsbG9jcyk7CisJCW51bGxzWzhdID0gZmFsc2U7CisKIAkJLyogQnVpbGQg YW5kIHJldHVybiB0aGUgdHVwbGUuICovCiAJCXR1cGxlID0gaGVhcF9mb3JtX3R1cGxlKChU dXBsZURlc2MpIGZ1bmNjdHgtPnVzZXJfZmN0eCwgdmFsdWVzLCBudWxscyk7CiAJCXJlc3Vs dCA9IEhlYXBUdXBsZUdldERhdHVtKHR1cGxlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZl ci9idWZfaW5pdC5jCmluZGV4IGY1MWM3ZGI3ODU1Li5kZDlmNTE1MjliNCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYworKysgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jCkBAIC03MTYsNiArNzE2LDE3IEBAIEJ1 ZmZlclBhcnRpdGlvbkdldChpbnQgaWR4LCBpbnQgKm5vZGUsIGludCAqbnVtX2J1ZmZlcnMs CiAJZWxvZyhFUlJPUiwgImludmFsaWQgcGFydGl0aW9uIGluZGV4Iik7CiB9CiAKKy8qIHJl dHVybiBwYXJhbWV0ZXJzIGJlZm9yZSB0aGUgcGFydGl0aW9ucyBhcmUgaW5pdGlhbGl6ZWQg KGR1cmluZyBzaXppbmcpICovCit2b2lkCitCdWZmZXJQYXJ0aXRpb25QYXJhbXMoaW50ICpu dW1fcGFydGl0aW9ucywgaW50ICpudW1fbm9kZXMpCit7CisJaWYgKG51bV9wYXJ0aXRpb25z KQorCQkqbnVtX3BhcnRpdGlvbnMgPSBudW1hX3BhcnRpdGlvbnM7CisKKwlpZiAobnVtX25v ZGVzKQorCQkqbnVtX25vZGVzID0gbnVtYV9ub2RlczsKK30KKwogLyogWFhYIHRoZSBHVUMg aG9va3Mgc2hvdWxkIHByb2JhYmx5IGJlIHNvbWV3aGVyZSBlbHNlPyAqLwogYm9vbAogY2hl Y2tfZGVidWdfbnVtYShjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBz b3VyY2UpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3Iu YyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4IGZlNDcwZGU2 M2YyLi4xMjExMzRiYjk0YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMK QEAgLTM1ODAsMzMgKzM1ODAsMjkgQEAgQnVmZmVyU3luYyhpbnQgZmxhZ3MpCiB9CiAKIC8q Ci0gKiBCZ0J1ZmZlclN5bmMgLS0gV3JpdGUgb3V0IHNvbWUgZGlydHkgYnVmZmVycyBpbiB0 aGUgcG9vbC4KKyAqIEluZm9ybWF0aW9uIHNhdmVkIGJldHdlZW4gY2FsbHMgc28gd2UgY2Fu IGRldGVybWluZSB0aGUgc3RyYXRlZ3kKKyAqIHBvaW50J3MgYWR2YW5jZSByYXRlIGFuZCBh dm9pZCBzY2FubmluZyBhbHJlYWR5LWNsZWFuZWQgYnVmZmVycy4KICAqCi0gKiBUaGlzIGlz IGNhbGxlZCBwZXJpb2RpY2FsbHkgYnkgdGhlIGJhY2tncm91bmQgd3JpdGVyIHByb2Nlc3Mu CisgKiBYWFggT25lIHZhbHVlIHBlciBwYXJ0aXRpb24uIFdlIGRvbid0IGtub3cgaG93IG1h bnkgcGFydGl0aW9ucyBhcmUKKyAqIHRoZXJlLCBzbyBhbGxvY2F0ZSAzMiwgc2hvdWxkIGJl IGVub3VnaCBmb3IgdGhlIFBvQyBwYXRjaC4KICAqCi0gKiBSZXR1cm5zIHRydWUgaWYgaXQn cyBhcHByb3ByaWF0ZSBmb3IgdGhlIGJnd3JpdGVyIHByb2Nlc3MgdG8gZ28gaW50bwotICog bG93LXBvd2VyIGhpYmVybmF0aW9uIG1vZGUuICAoVGhpcyBoYXBwZW5zIGlmIHRoZSBzdHJh dGVneSBjbG9jay1zd2VlcAotICogaGFzIGJlZW4gImxhcHBlZCIgYW5kIG5vIGJ1ZmZlciBh bGxvY2F0aW9ucyBoYXZlIG9jY3VycmVkIHJlY2VudGx5LAotICogb3IgaWYgdGhlIGJnd3Jp dGVyIGhhcyBiZWVuIGVmZmVjdGl2ZWx5IGRpc2FibGVkIGJ5IHNldHRpbmcKLSAqIGJnd3Jp dGVyX2xydV9tYXhwYWdlcyB0byAwLikKKyAqIFhYWCBtaWdodCBiZSBiZXR0ZXIgdG8gaGF2 ZSBhIHBlci1wYXJ0aXRpb24gc3RydWN0IHdpdGggYWxsIHRoZSBpbmZvCiAgKi8KLWJvb2wK LUJnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0KQorI2RlZmluZSBN QVhfQ0xPQ0tTV0VFUF9QQVJUSVRJT05TIDMyCitzdGF0aWMgYm9vbCBzYXZlZF9pbmZvX3Zh bGlkID0gZmFsc2U7CitzdGF0aWMgaW50CXByZXZfc3RyYXRlZ3lfYnVmX2lkW01BWF9DTE9D S1NXRUVQX1BBUlRJVElPTlNdOworc3RhdGljIHVpbnQzMiBwcmV2X3N0cmF0ZWd5X3Bhc3Nl c1tNQVhfQ0xPQ0tTV0VFUF9QQVJUSVRJT05TXTsKK3N0YXRpYyBpbnQJbmV4dF90b19jbGVh bltNQVhfQ0xPQ0tTV0VFUF9QQVJUSVRJT05TXTsKK3N0YXRpYyB1aW50MzIgbmV4dF9wYXNz ZXNbTUFYX0NMT0NLU1dFRVBfUEFSVElUSU9OU107CisKKworc3RhdGljIGJvb2wKK0JnQnVm ZmVyU3luY1BhcnRpdGlvbihXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0LCBpbnQgbnVt X3BhcnRpdGlvbnMsCisJCQkJCSAgaW50IHBhcnRpdGlvbiwgaW50IHJlY2VudF9hbGxvY19w YXJ0aXRpb24pCiB7CiAJLyogaW5mbyBvYnRhaW5lZCBmcm9tIGZyZWVsaXN0LmMgKi8KIAlp bnQJCQlzdHJhdGVneV9idWZfaWQ7CiAJdWludDMyCQlzdHJhdGVneV9wYXNzZXM7Ci0JdWlu dDMyCQlyZWNlbnRfYWxsb2M7Ci0KLQkvKgotCSAqIEluZm9ybWF0aW9uIHNhdmVkIGJldHdl ZW4gY2FsbHMgc28gd2UgY2FuIGRldGVybWluZSB0aGUgc3RyYXRlZ3kKLQkgKiBwb2ludCdz IGFkdmFuY2UgcmF0ZSBhbmQgYXZvaWQgc2Nhbm5pbmcgYWxyZWFkeS1jbGVhbmVkIGJ1ZmZl cnMuCi0JICovCi0Jc3RhdGljIGJvb2wgc2F2ZWRfaW5mb192YWxpZCA9IGZhbHNlOwotCXN0 YXRpYyBpbnQJcHJldl9zdHJhdGVneV9idWZfaWQ7Ci0Jc3RhdGljIHVpbnQzMiBwcmV2X3N0 cmF0ZWd5X3Bhc3NlczsKLQlzdGF0aWMgaW50CW5leHRfdG9fY2xlYW47Ci0Jc3RhdGljIHVp bnQzMiBuZXh0X3Bhc3NlczsKIAogCS8qIE1vdmluZyBhdmVyYWdlcyBvZiBhbGxvY2F0aW9u IHJhdGUgYW5kIGNsZWFuLWJ1ZmZlciBkZW5zaXR5ICovCiAJc3RhdGljIGZsb2F0IHNtb290 aGVkX2FsbG9jID0gMDsKQEAgLTM2MzQsMjUgKzM2MzAsMTYgQEAgQmdCdWZmZXJTeW5jKFdy aXRlYmFja0NvbnRleHQgKndiX2NvbnRleHQpCiAJbG9uZwkJbmV3X3N0cmF0ZWd5X2RlbHRh OwogCXVpbnQzMgkJbmV3X3JlY2VudF9hbGxvYzsKIAorCS8qIGJ1ZmZlciByYW5nZSBmb3Ig dGhlIGNsb2Nrc3dlZXAgcGFydGl0aW9uICovCisJaW50CQkJZmlyc3RfYnVmZmVyOworCWlu dAkJCW51bV9idWZmZXJzOworCiAJLyoKIAkgKiBGaW5kIG91dCB3aGVyZSB0aGUgY2xvY2st c3dlZXAgY3VycmVudGx5IGlzLCBhbmQgaG93IG1hbnkgYnVmZmVyCiAJICogYWxsb2NhdGlv bnMgaGF2ZSBoYXBwZW5lZCBzaW5jZSBvdXIgbGFzdCBjYWxsLgogCSAqLwotCXN0cmF0ZWd5 X2J1Zl9pZCA9IFN0cmF0ZWd5U3luY1N0YXJ0KCZzdHJhdGVneV9wYXNzZXMsICZyZWNlbnRf YWxsb2MpOwotCi0JLyogUmVwb3J0IGJ1ZmZlciBhbGxvYyBjb3VudHMgdG8gcGdzdGF0ICov Ci0JUGVuZGluZ0JnV3JpdGVyU3RhdHMuYnVmX2FsbG9jICs9IHJlY2VudF9hbGxvYzsKLQot CS8qCi0JICogSWYgd2UncmUgbm90IHJ1bm5pbmcgdGhlIExSVSBzY2FuLCBqdXN0IHN0b3Ag YWZ0ZXIgZG9pbmcgdGhlIHN0YXRzCi0JICogc3R1ZmYuICBXZSBtYXJrIHRoZSBzYXZlZCBz dGF0ZSBpbnZhbGlkIHNvIHRoYXQgd2UgY2FuIHJlY292ZXIgc2FuZWx5Ci0JICogaWYgTFJV IHNjYW4gaXMgdHVybmVkIGJhY2sgb24gbGF0ZXIuCi0JICovCi0JaWYgKGJnd3JpdGVyX2xy dV9tYXhwYWdlcyA8PSAwKQotCXsKLQkJc2F2ZWRfaW5mb192YWxpZCA9IGZhbHNlOwotCQly ZXR1cm4gdHJ1ZTsKLQl9CisJc3RyYXRlZ3lfYnVmX2lkID0gU3RyYXRlZ3lTeW5jU3RhcnQo cGFydGl0aW9uLCAmc3RyYXRlZ3lfcGFzc2VzLAorCQkJCQkJCQkJCSZmaXJzdF9idWZmZXIs ICZudW1fYnVmZmVycyk7CiAKIAkvKgogCSAqIENvbXB1dGUgc3RyYXRlZ3lfZGVsdGEgPSBo b3cgbWFueSBidWZmZXJzIGhhdmUgYmVlbiBzY2FubmVkIGJ5IHRoZQpAQCAtMzY2NCwxNyAr MzY1MSwxNyBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkK IAkgKi8KIAlpZiAoc2F2ZWRfaW5mb192YWxpZCkKIAl7Ci0JCWludDMyCQlwYXNzZXNfZGVs dGEgPSBzdHJhdGVneV9wYXNzZXMgLSBwcmV2X3N0cmF0ZWd5X3Bhc3NlczsKKwkJaW50MzIJ CXBhc3Nlc19kZWx0YSA9IHN0cmF0ZWd5X3Bhc3NlcyAtIHByZXZfc3RyYXRlZ3lfcGFzc2Vz W3BhcnRpdGlvbl07CiAKLQkJc3RyYXRlZ3lfZGVsdGEgPSBzdHJhdGVneV9idWZfaWQgLSBw cmV2X3N0cmF0ZWd5X2J1Zl9pZDsKLQkJc3RyYXRlZ3lfZGVsdGEgKz0gKGxvbmcpIHBhc3Nl c19kZWx0YSAqIE5CdWZmZXJzOworCQlzdHJhdGVneV9kZWx0YSA9IHN0cmF0ZWd5X2J1Zl9p ZCAtIHByZXZfc3RyYXRlZ3lfYnVmX2lkW3BhcnRpdGlvbl07CisJCXN0cmF0ZWd5X2RlbHRh ICs9IChsb25nKSBwYXNzZXNfZGVsdGEgKiBudW1fYnVmZmVyczsKIAogCQlBc3NlcnQoc3Ry YXRlZ3lfZGVsdGEgPj0gMCk7CiAKLQkJaWYgKChpbnQzMikgKG5leHRfcGFzc2VzIC0gc3Ry YXRlZ3lfcGFzc2VzKSA+IDApCisJCWlmICgoaW50MzIpIChuZXh0X3Bhc3Nlc1twYXJ0aXRp b25dIC0gc3RyYXRlZ3lfcGFzc2VzKSA+IDApCiAJCXsKIAkJCS8qIHdlJ3JlIG9uZSBwYXNz IGFoZWFkIG9mIHRoZSBzdHJhdGVneSBwb2ludCAqLwotCQkJYnVmc190b19sYXAgPSBzdHJh dGVneV9idWZfaWQgLSBuZXh0X3RvX2NsZWFuOworCQkJYnVmc190b19sYXAgPSBzdHJhdGVn eV9idWZfaWQgLSBuZXh0X3RvX2NsZWFuW3BhcnRpdGlvbl07CiAjaWZkZWYgQkdXX0RFQlVH CiAJCQllbG9nKERFQlVHMiwgImJnd3JpdGVyIGFoZWFkOiBiZ3cgJXUtJXUgc3RyYXRlZ3kg JXUtJXUgZGVsdGE9JWxkIGxhcD0lZCIsCiAJCQkJIG5leHRfcGFzc2VzLCBuZXh0X3RvX2Ns ZWFuLApAQCAtMzY4MiwxMSArMzY2OSwxMSBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29u dGV4dCAqd2JfY29udGV4dCkKIAkJCQkgc3RyYXRlZ3lfZGVsdGEsIGJ1ZnNfdG9fbGFwKTsK ICNlbmRpZgogCQl9Ci0JCWVsc2UgaWYgKG5leHRfcGFzc2VzID09IHN0cmF0ZWd5X3Bhc3Nl cyAmJgotCQkJCSBuZXh0X3RvX2NsZWFuID49IHN0cmF0ZWd5X2J1Zl9pZCkKKwkJZWxzZSBp ZiAobmV4dF9wYXNzZXNbcGFydGl0aW9uXSA9PSBzdHJhdGVneV9wYXNzZXMgJiYKKwkJCQkg bmV4dF90b19jbGVhbltwYXJ0aXRpb25dID49IHN0cmF0ZWd5X2J1Zl9pZCkKIAkJewogCQkJ Lyogb24gc2FtZSBwYXNzLCBidXQgYWhlYWQgb3IgYXQgbGVhc3Qgbm90IGJlaGluZCAqLwot CQkJYnVmc190b19sYXAgPSBOQnVmZmVycyAtIChuZXh0X3RvX2NsZWFuIC0gc3RyYXRlZ3lf YnVmX2lkKTsKKwkJCWJ1ZnNfdG9fbGFwID0gbnVtX2J1ZmZlcnMgLSAobmV4dF90b19jbGVh bltwYXJ0aXRpb25dIC0gc3RyYXRlZ3lfYnVmX2lkKTsKICNpZmRlZiBCR1dfREVCVUcKIAkJ CWVsb2coREVCVUcyLCAiYmd3cml0ZXIgYWhlYWQ6IGJndyAldS0ldSBzdHJhdGVneSAldS0l dSBkZWx0YT0lbGQgbGFwPSVkIiwKIAkJCQkgbmV4dF9wYXNzZXMsIG5leHRfdG9fY2xlYW4s CkBAIC0zNzA2LDkgKzM2OTMsOSBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAq d2JfY29udGV4dCkKIAkJCQkgc3RyYXRlZ3lfcGFzc2VzLCBzdHJhdGVneV9idWZfaWQsCiAJ CQkJIHN0cmF0ZWd5X2RlbHRhKTsKICNlbmRpZgotCQkJbmV4dF90b19jbGVhbiA9IHN0cmF0 ZWd5X2J1Zl9pZDsKLQkJCW5leHRfcGFzc2VzID0gc3RyYXRlZ3lfcGFzc2VzOwotCQkJYnVm c190b19sYXAgPSBOQnVmZmVyczsKKwkJCW5leHRfdG9fY2xlYW5bcGFydGl0aW9uXSA9IHN0 cmF0ZWd5X2J1Zl9pZDsKKwkJCW5leHRfcGFzc2VzW3BhcnRpdGlvbl0gPSBzdHJhdGVneV9w YXNzZXM7CisJCQlidWZzX3RvX2xhcCA9IG51bV9idWZmZXJzOwogCQl9CiAJfQogCWVsc2UK QEAgLTM3MjIsMTUgKzM3MDksMTYgQEAgQmdCdWZmZXJTeW5jKFdyaXRlYmFja0NvbnRleHQg KndiX2NvbnRleHQpCiAJCQkgc3RyYXRlZ3lfcGFzc2VzLCBzdHJhdGVneV9idWZfaWQpOwog I2VuZGlmCiAJCXN0cmF0ZWd5X2RlbHRhID0gMDsKLQkJbmV4dF90b19jbGVhbiA9IHN0cmF0 ZWd5X2J1Zl9pZDsKLQkJbmV4dF9wYXNzZXMgPSBzdHJhdGVneV9wYXNzZXM7Ci0JCWJ1ZnNf dG9fbGFwID0gTkJ1ZmZlcnM7CisJCW5leHRfdG9fY2xlYW5bcGFydGl0aW9uXSA9IHN0cmF0 ZWd5X2J1Zl9pZDsKKwkJbmV4dF9wYXNzZXNbcGFydGl0aW9uXSA9IHN0cmF0ZWd5X3Bhc3Nl czsKKwkJYnVmc190b19sYXAgPSBudW1fYnVmZmVyczsKIAl9CiAKIAkvKiBVcGRhdGUgc2F2 ZWQgaW5mbyBmb3IgbmV4dCB0aW1lICovCi0JcHJldl9zdHJhdGVneV9idWZfaWQgPSBzdHJh dGVneV9idWZfaWQ7Ci0JcHJldl9zdHJhdGVneV9wYXNzZXMgPSBzdHJhdGVneV9wYXNzZXM7 Ci0Jc2F2ZWRfaW5mb192YWxpZCA9IHRydWU7CisJcHJldl9zdHJhdGVneV9idWZfaWRbcGFy dGl0aW9uXSA9IHN0cmF0ZWd5X2J1Zl9pZDsKKwlwcmV2X3N0cmF0ZWd5X3Bhc3Nlc1twYXJ0 aXRpb25dID0gc3RyYXRlZ3lfcGFzc2VzOworCS8qIFhYWCB0aGlzIG5lZWRzIHRvIGhhcHBl biBvbmx5IGFmdGVyIGFsbCBwYXJ0aXRpb25zICovCisJLyogc2F2ZWRfaW5mb192YWxpZCA9 IHRydWU7ICovCiAKIAkvKgogCSAqIENvbXB1dGUgaG93IG1hbnkgYnVmZmVycyBoYWQgdG8g YmUgc2Nhbm5lZCBmb3IgZWFjaCBuZXcgYWxsb2NhdGlvbiwgaWUsCkBAIC0zNzM4LDkgKzM3 MjYsOSBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkKIAkg KgogCSAqIElmIHRoZSBzdHJhdGVneSBwb2ludCBkaWRuJ3QgbW92ZSwgd2UgZG9uJ3QgdXBk YXRlIHRoZSBkZW5zaXR5IGVzdGltYXRlCiAJICovCi0JaWYgKHN0cmF0ZWd5X2RlbHRhID4g MCAmJiByZWNlbnRfYWxsb2MgPiAwKQorCWlmIChzdHJhdGVneV9kZWx0YSA+IDAgJiYgcmVj ZW50X2FsbG9jX3BhcnRpdGlvbiA+IDApCiAJewotCQlzY2Fuc19wZXJfYWxsb2MgPSAoZmxv YXQpIHN0cmF0ZWd5X2RlbHRhIC8gKGZsb2F0KSByZWNlbnRfYWxsb2M7CisJCXNjYW5zX3Bl cl9hbGxvYyA9IChmbG9hdCkgc3RyYXRlZ3lfZGVsdGEgLyAoZmxvYXQpIHJlY2VudF9hbGxv Y19wYXJ0aXRpb247CiAJCXNtb290aGVkX2RlbnNpdHkgKz0gKHNjYW5zX3Blcl9hbGxvYyAt IHNtb290aGVkX2RlbnNpdHkpIC8KIAkJCXNtb290aGluZ19zYW1wbGVzOwogCX0KQEAgLTM3 NTAsNyArMzczOCw3IEBAIEJnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250 ZXh0KQogCSAqIHN0cmF0ZWd5IHBvaW50IGFuZCB3aGVyZSB3ZSd2ZSBzY2FubmVkIGFoZWFk IHRvLCBiYXNlZCBvbiB0aGUgc21vb3RoZWQKIAkgKiBkZW5zaXR5IGVzdGltYXRlLgogCSAq LwotCWJ1ZnNfYWhlYWQgPSBOQnVmZmVycyAtIGJ1ZnNfdG9fbGFwOworCWJ1ZnNfYWhlYWQg PSBudW1fYnVmZmVycyAtIGJ1ZnNfdG9fbGFwOwogCXJldXNhYmxlX2J1ZmZlcnNfZXN0ID0g KGZsb2F0KSBidWZzX2FoZWFkIC8gc21vb3RoZWRfZGVuc2l0eTsKIAogCS8qCkBAIC0zNzU4 LDEwICszNzQ2LDEwIEBAIEJnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250 ZXh0KQogCSAqIGEgdHJ1ZSBhdmVyYWdlIHdlIHdhbnQgYSBmYXN0LWF0dGFjaywgc2xvdy1k ZWNsaW5lIGJlaGF2aW9yOiB3ZQogCSAqIGltbWVkaWF0ZWx5IGZvbGxvdyBhbnkgaW5jcmVh c2UuCiAJICovCi0JaWYgKHNtb290aGVkX2FsbG9jIDw9IChmbG9hdCkgcmVjZW50X2FsbG9j KQotCQlzbW9vdGhlZF9hbGxvYyA9IHJlY2VudF9hbGxvYzsKKwlpZiAoc21vb3RoZWRfYWxs b2MgPD0gKGZsb2F0KSByZWNlbnRfYWxsb2NfcGFydGl0aW9uKQorCQlzbW9vdGhlZF9hbGxv YyA9IHJlY2VudF9hbGxvY19wYXJ0aXRpb247CiAJZWxzZQotCQlzbW9vdGhlZF9hbGxvYyAr PSAoKGZsb2F0KSByZWNlbnRfYWxsb2MgLSBzbW9vdGhlZF9hbGxvYykgLworCQlzbW9vdGhl ZF9hbGxvYyArPSAoKGZsb2F0KSByZWNlbnRfYWxsb2NfcGFydGl0aW9uIC0gc21vb3RoZWRf YWxsb2MpIC8KIAkJCXNtb290aGluZ19zYW1wbGVzOwogCiAJLyogU2NhbGUgdGhlIGVzdGlt YXRlIGJ5IGEgR1VDIHRvIGFsbG93IG1vcmUgYWdncmVzc2l2ZSB0dW5pbmcuICovCkBAIC0z Nzg4LDcgKzM3NzYsNyBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29u dGV4dCkKIAkgKiB0aGUgQkdXIHdpbGwgYmUgY2FsbGVkIGR1cmluZyB0aGUgc2Nhbl93aG9s ZV9wb29sIHRpbWU7IHNsaWNlIHRoZQogCSAqIGJ1ZmZlciBwb29sIGludG8gdGhhdCBtYW55 IHNlY3Rpb25zLgogCSAqLwotCW1pbl9zY2FuX2J1ZmZlcnMgPSAoaW50KSAoTkJ1ZmZlcnMg LyAoc2Nhbl93aG9sZV9wb29sX21pbGxpc2Vjb25kcyAvIEJnV3JpdGVyRGVsYXkpKTsKKwlt aW5fc2Nhbl9idWZmZXJzID0gKGludCkgKG51bV9idWZmZXJzIC8gKHNjYW5fd2hvbGVfcG9v bF9taWxsaXNlY29uZHMgLyBCZ1dyaXRlckRlbGF5KSk7CiAKIAlpZiAodXBjb21pbmdfYWxs b2NfZXN0IDwgKG1pbl9zY2FuX2J1ZmZlcnMgKyByZXVzYWJsZV9idWZmZXJzX2VzdCkpCiAJ ewpAQCAtMzgxMywyMCArMzgwMSwyMCBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4 dCAqd2JfY29udGV4dCkKIAkvKiBFeGVjdXRlIHRoZSBMUlUgc2NhbiAqLwogCXdoaWxlIChu dW1fdG9fc2NhbiA+IDAgJiYgcmV1c2FibGVfYnVmZmVycyA8IHVwY29taW5nX2FsbG9jX2Vz dCkKIAl7Ci0JCWludAkJCXN5bmNfc3RhdGUgPSBTeW5jT25lQnVmZmVyKG5leHRfdG9fY2xl YW4sIHRydWUsCisJCWludAkJCXN5bmNfc3RhdGUgPSBTeW5jT25lQnVmZmVyKG5leHRfdG9f Y2xlYW5bcGFydGl0aW9uXSwgdHJ1ZSwKIAkJCQkJCQkJCQkJICAgd2JfY29udGV4dCk7CiAK LQkJaWYgKCsrbmV4dF90b19jbGVhbiA+PSBOQnVmZmVycykKKwkJaWYgKCsrbmV4dF90b19j bGVhbltwYXJ0aXRpb25dID49IChmaXJzdF9idWZmZXIgKyBudW1fYnVmZmVycykpCiAJCXsK LQkJCW5leHRfdG9fY2xlYW4gPSAwOwotCQkJbmV4dF9wYXNzZXMrKzsKKwkJCW5leHRfdG9f Y2xlYW5bcGFydGl0aW9uXSA9IGZpcnN0X2J1ZmZlcjsKKwkJCW5leHRfcGFzc2VzW3BhcnRp dGlvbl0rKzsKIAkJfQogCQludW1fdG9fc2Nhbi0tOwogCiAJCWlmIChzeW5jX3N0YXRlICYg QlVGX1dSSVRURU4pCiAJCXsKIAkJCXJldXNhYmxlX2J1ZmZlcnMrKzsKLQkJCWlmICgrK251 bV93cml0dGVuID49IGJnd3JpdGVyX2xydV9tYXhwYWdlcykKKwkJCWlmICgrK251bV93cml0 dGVuID49IChiZ3dyaXRlcl9scnVfbWF4cGFnZXMgLyBudW1fcGFydGl0aW9ucykpCiAJCQl7 CiAJCQkJUGVuZGluZ0JnV3JpdGVyU3RhdHMubWF4d3JpdHRlbl9jbGVhbisrOwogCQkJCWJy ZWFrOwpAQCAtMzg0MCw3ICszODI4LDcgQEAgQmdCdWZmZXJTeW5jKFdyaXRlYmFja0NvbnRl eHQgKndiX2NvbnRleHQpCiAKICNpZmRlZiBCR1dfREVCVUcKIAllbG9nKERFQlVHMSwgImJn d3JpdGVyOiByZWNlbnRfYWxsb2M9JXUgc21vb3RoZWQ9JS4yZiBkZWx0YT0lbGQgYWhlYWQ9 JWQgZGVuc2l0eT0lLjJmIHJldXNhYmxlX2VzdD0lZCB1cGNvbWluZ19lc3Q9JWQgc2Nhbm5l ZD0lZCB3cm90ZT0lZCByZXVzYWJsZT0lZCIsCi0JCSByZWNlbnRfYWxsb2MsIHNtb290aGVk X2FsbG9jLCBzdHJhdGVneV9kZWx0YSwgYnVmc19haGVhZCwKKwkJIHJlY2VudF9hbGxvY19w YXJ0aXRpb24sIHNtb290aGVkX2FsbG9jLCBzdHJhdGVneV9kZWx0YSwgYnVmc19haGVhZCwK IAkJIHNtb290aGVkX2RlbnNpdHksIHJldXNhYmxlX2J1ZmZlcnNfZXN0LCB1cGNvbWluZ19h bGxvY19lc3QsCiAJCSBidWZzX3RvX2xhcCAtIG51bV90b19zY2FuLAogCQkgbnVtX3dyaXR0 ZW4sCkBAIC0zODcwLDggKzM4NTgsNzQgQEAgQmdCdWZmZXJTeW5jKFdyaXRlYmFja0NvbnRl eHQgKndiX2NvbnRleHQpCiAjZW5kaWYKIAl9CiAKKwkvKiBjYW4gdGhpcyBwYXJ0aXRpb24g aGliZXJuYXRlICovCisJcmV0dXJuIChidWZzX3RvX2xhcCA9PSAwICYmIHJlY2VudF9hbGxv Y19wYXJ0aXRpb24gPT0gMCk7Cit9CisKKy8qCisgKiBCZ0J1ZmZlclN5bmMgLS0gV3JpdGUg b3V0IHNvbWUgZGlydHkgYnVmZmVycyBpbiB0aGUgcG9vbC4KKyAqCisgKiBUaGlzIGlzIGNh bGxlZCBwZXJpb2RpY2FsbHkgYnkgdGhlIGJhY2tncm91bmQgd3JpdGVyIHByb2Nlc3MuCisg KgorICogUmV0dXJucyB0cnVlIGlmIGl0J3MgYXBwcm9wcmlhdGUgZm9yIHRoZSBiZ3dyaXRl ciBwcm9jZXNzIHRvIGdvIGludG8KKyAqIGxvdy1wb3dlciBoaWJlcm5hdGlvbiBtb2RlLiAg KFRoaXMgaGFwcGVucyBpZiB0aGUgc3RyYXRlZ3kgY2xvY2stc3dlZXAKKyAqIGhhcyBiZWVu ICJsYXBwZWQiIGFuZCBubyBidWZmZXIgYWxsb2NhdGlvbnMgaGF2ZSBvY2N1cnJlZCByZWNl bnRseSwKKyAqIG9yIGlmIHRoZSBiZ3dyaXRlciBoYXMgYmVlbiBlZmZlY3RpdmVseSBkaXNh YmxlZCBieSBzZXR0aW5nCisgKiBiZ3dyaXRlcl9scnVfbWF4cGFnZXMgdG8gMC4pCisgKi8K K2Jvb2wKK0JnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0KQorewor CS8qIGluZm8gb2J0YWluZWQgZnJvbSBmcmVlbGlzdC5jICovCisJdWludDMyCQlyZWNlbnRf YWxsb2M7CisJdWludDMyCQlyZWNlbnRfYWxsb2NfcGFydGl0aW9uOworCWludAkJCW51bV9w YXJ0aXRpb25zOworCisJLyogYXNzdW1lIHdlIGNhbiBoaWJlcm5hdGUsIGFueSBwYXJ0aXRp b24gY2FuIHNldCB0byBmYWxzZSAqLworCWJvb2wJCWhpYmVybmF0ZSA9IHRydWU7CisKKwkv KiBnZXQgdGhlIG51bWJlciBvZiBjbG9ja3N3ZWVwIHBhcnRpdGlvbnMsIGFuZCB0b3RhbCBh bGxvYyBjb3VudCAqLworCVN0cmF0ZWd5U3luY1ByZXBhcmUoJm51bV9wYXJ0aXRpb25zLCAm cmVjZW50X2FsbG9jKTsKKworCUFzc2VydChudW1fcGFydGl0aW9ucyA8PSBNQVhfQ0xPQ0tT V0VFUF9QQVJUSVRJT05TKTsKKworCS8qIFJlcG9ydCBidWZmZXIgYWxsb2MgY291bnRzIHRv IHBnc3RhdCAqLworCVBlbmRpbmdCZ1dyaXRlclN0YXRzLmJ1Zl9hbGxvYyArPSByZWNlbnRf YWxsb2M7CisKKwkvKiBhdmVyYWdlIGFsbG9jIGJ1ZmZlcnMgcGVyIHBhcnRpdGlvbiAqLwor CXJlY2VudF9hbGxvY19wYXJ0aXRpb24gPSAocmVjZW50X2FsbG9jIC8gbnVtX3BhcnRpdGlv bnMpOworCisJLyoKKwkgKiBJZiB3ZSdyZSBub3QgcnVubmluZyB0aGUgTFJVIHNjYW4sIGp1 c3Qgc3RvcCBhZnRlciBkb2luZyB0aGUgc3RhdHMKKwkgKiBzdHVmZi4gIFdlIG1hcmsgdGhl IHNhdmVkIHN0YXRlIGludmFsaWQgc28gdGhhdCB3ZSBjYW4gcmVjb3ZlciBzYW5lbHkKKwkg KiBpZiBMUlUgc2NhbiBpcyB0dXJuZWQgYmFjayBvbiBsYXRlci4KKwkgKi8KKwlpZiAoYmd3 cml0ZXJfbHJ1X21heHBhZ2VzIDw9IDApCisJeworCQlzYXZlZF9pbmZvX3ZhbGlkID0gZmFs c2U7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qCisJICogbm93IHByb2Nlc3MgdGhlIGNs b2Nrc3dlZXAgcGFydGl0aW9ucywgb25lIGJ5IG9uZSwgdXNpbmcgdGhlIHNhbWUKKwkgKiBj bGVhbnVwIHRoYXQgd2UgdXNlZCBmb3IgYWxsIGJ1ZmZlcnMKKwkgKgorCSAqIFhYWCBNYXli ZSB3ZSBzaG91bGQgcmFuZG9taXplIHRoZSBvcmRlciBvZiBwYXJ0aXRpb25zIGEgYml0LCBz byB0aGF0IHdlCisJICogZG9uJ3Qgc3RhcnQgZnJvbSBwYXJ0aXRpb24gMCBhbGwgdGhlIHRp bWU/IFBlcmhhcHMgbm90IGVudGlyZWx5LCBidXQgYXQKKwkgKiBsZWFzdCBwaWNrIGEgcmFu ZG9tIHN0YXJ0aW5nIHBvaW50PworCSAqLworCWZvciAoaW50IHBhcnRpdGlvbiA9IDA7IHBh cnRpdGlvbiA8IG51bV9wYXJ0aXRpb25zOyBwYXJ0aXRpb24rKykKKwl7CisJCS8qIGhpYmVy bmF0ZSBpZiBhbGwgcGFydGl0aW9ucyBjYW4gaGliZXJuYXRlICovCisJCWhpYmVybmF0ZSAm PSBCZ0J1ZmZlclN5bmNQYXJ0aXRpb24od2JfY29udGV4dCwgbnVtX3BhcnRpdGlvbnMsCisJ CQkJCQkJCQkJICAgcGFydGl0aW9uLCByZWNlbnRfYWxsb2NfcGFydGl0aW9uKTsKKwl9CisK KwkvKiBub3cgdGhhdCB3ZSd2ZSBzY2FubmVkIGFsbCBwYXJ0aXRpb25zLCBtYXJrIHRoZSBj YWNoZWQgaW5mbyBhcyB2YWxpZCAqLworCXNhdmVkX2luZm9fdmFsaWQgPSB0cnVlOworCiAJ LyogUmV0dXJuIHRydWUgaWYgT0sgdG8gaGliZXJuYXRlICovCi0JcmV0dXJuIChidWZzX3Rv X2xhcCA9PSAwICYmIHJlY2VudF9hbGxvYyA9PSAwKTsKKwlyZXR1cm4gaGliZXJuYXRlOwog fQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxp c3QuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKaW5kZXggN2Q1 OWE5MmJkMWEuLmQ1ZjhmMjhmNTYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdl L2J1ZmZlci9mcmVlbGlzdC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2Zy ZWVsaXN0LmMKQEAgLTE1LDI3ICsxNSw0NyBAQAogICovCiAjaW5jbHVkZSAicG9zdGdyZXMu aCIKIAorI2lmZGVmIFVTRV9MSUJOVU1BCisjaW5jbHVkZSA8c2NoZWQuaD4KKyNlbmRpZgor CisjaWZkZWYgVVNFX0xJQk5VTUEKKyNpbmNsdWRlIDxudW1hLmg+CisjaW5jbHVkZSA8bnVt YWlmLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvcnQv YXRvbWljcy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmX2ludGVybmFscy5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNs dWRlICJzdG9yYWdlL3Byb2MuaCIKIAogI2RlZmluZSBJTlRfQUNDRVNTX09OQ0UodmFyKQko KGludCkoKigodm9sYXRpbGUgaW50ICopJih2YXIpKSkpCiAKIAogLyoKLSAqIFRoZSBzaGFy ZWQgZnJlZWxpc3QgY29udHJvbCBpbmZvcm1hdGlvbi4KKyAqIEluZm9ybWF0aW9uIGFib3V0 IG9uZSBwYXJ0aXRpb24gb2YgdGhlIENsb2NrU3dlZXAgKG9uIGEgc3Vic2V0IG9mIGJ1ZmZl cnMpLgorICoKKyAqIFhYWCBTaG91bGQgYmUgY2FyZWZ1bCB0byBhbGlnbiB0aGlzIHRvIGNh Y2hlbGluZXMsIGV0Yy4KICAqLwogdHlwZWRlZiBzdHJ1Y3QKIHsKIAkvKiBTcGlubG9jazog cHJvdGVjdHMgdGhlIHZhbHVlcyBiZWxvdyAqLwotCXNsb2NrX3QJCWJ1ZmZlcl9zdHJhdGVn eV9sb2NrOworCXNsb2NrX3QJCWNsb2NrX3N3ZWVwX2xvY2s7CisKKwkvKiByYW5nZSBmb3Ig dGhpcyBjbG9jayB3ZWVwIHBhcnRpdGlvbiAqLworCWludDMyCQlmaXJzdEJ1ZmZlcjsKKwlp bnQzMgkJbnVtQnVmZmVyczsKIAogCS8qCiAJICogY2xvY2stc3dlZXAgaGFuZDogaW5kZXgg b2YgbmV4dCBidWZmZXIgdG8gY29uc2lkZXIgZ3JhYmJpbmcuIE5vdGUgdGhhdAogCSAqIHRo aXMgaXNuJ3QgYSBjb25jcmV0ZSBidWZmZXIgLSB3ZSBvbmx5IGV2ZXIgaW5jcmVhc2UgdGhl IHZhbHVlLiBTbywgdG8KIAkgKiBnZXQgYW4gYWN0dWFsIGJ1ZmZlciwgaXQgbmVlZHMgdG8g YmUgdXNlZCBtb2R1bG8gTkJ1ZmZlcnMuCisJICoKKwkgKiBYWFggVGhpcyBpcyByZWxhdGl2 ZSB0byBmaXJzdEJ1ZmZlciwgc28gbmVlZHMgdG8gYmUgb2Zmc2V0IHByb3Blcmx5LgorCSAq CisJICogWFhYIGZpcnN0QnVmZmVyICsgKG5leHRWaWN0aW1CdWZmZXIgJSBudW1CdWZmZXJz KQogCSAqLwogCXBnX2F0b21pY191aW50MzIgbmV4dFZpY3RpbUJ1ZmZlcjsKIApAQCAtNDYs MTEgKzY2LDM0IEBAIHR5cGVkZWYgc3RydWN0CiAJdWludDMyCQljb21wbGV0ZVBhc3Nlczsg LyogQ29tcGxldGUgY3ljbGVzIG9mIHRoZSBjbG9jay1zd2VlcCAqLwogCXBnX2F0b21pY191 aW50MzIgbnVtQnVmZmVyQWxsb2NzOwkvKiBCdWZmZXJzIGFsbG9jYXRlZCBzaW5jZSBsYXN0 IHJlc2V0ICovCiAKKwkvKiBydW5uaW5nIHRvdGFsIG9mIGFsbG9jcyAqLworCXBnX2F0b21p Y191aW50NjQgbnVtVG90YWxBbGxvY3M7CisKK30gQ2xvY2tTd2VlcDsKKworLyoKKyAqIFRo ZSBzaGFyZWQgZnJlZWxpc3QgY29udHJvbCBpbmZvcm1hdGlvbi4KKyAqLwordHlwZWRlZiBz dHJ1Y3QKK3sKKwkvKiBTcGlubG9jazogcHJvdGVjdHMgdGhlIHZhbHVlcyBiZWxvdyAqLwor CXNsb2NrX3QJCWJ1ZmZlcl9zdHJhdGVneV9sb2NrOworCiAJLyoKIAkgKiBCZ3dvcmtlciBw cm9jZXNzIHRvIGJlIG5vdGlmaWVkIHVwb24gYWN0aXZpdHkgb3IgLTEgaWYgbm9uZS4gU2Vl CiAJICogU3RyYXRlZ3lOb3RpZnlCZ1dyaXRlci4KIAkgKi8KIAlpbnQJCQliZ3dwcm9jbm87 CisJLy8gdGhlIF9hdHRyaWJ1dGVfIGRvZXMgbm90IHdvcmsgb24gV2luZG93cywgaXQgc2Vl bXMKKwkvL2ludAkJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoNjQpKSkgYmd3cHJvY25vOwor CisJLyogaW5mbyBhYm91dCBmcmVlbGlzdCBwYXJ0aXRpb25pbmcgKi8KKwlpbnQJCQludW1f bm9kZXM7CQkvKiBlZmZlY3RpdmVseSBudW1iZXIgb2YgTlVNQSBub2RlcyAqLworCWludAkJ CW51bV9wYXJ0aXRpb25zOworCWludAkJCW51bV9wYXJ0aXRpb25zX3Blcl9ub2RlOworCisJ LyogY2xvY2tzd2VlcCBwYXJ0aXRpb25zICovCisJQ2xvY2tTd2VlcAlzd2VlcHNbRkxFWElC TEVfQVJSQVlfTUVNQkVSXTsKIH0gQnVmZmVyU3RyYXRlZ3lDb250cm9sOwogCiAvKiBQb2lu dGVycyB0byBzaGFyZWQgc3RhdGUgKi8KQEAgLTg5LDYgKzEzMiw3IEBAIHN0YXRpYyBCdWZm ZXJEZXNjICpHZXRCdWZmZXJGcm9tUmluZyhCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVn eSwKIAkJCQkJCQkJCSB1aW50MzIgKmJ1Zl9zdGF0ZSk7CiBzdGF0aWMgdm9pZCBBZGRCdWZm ZXJUb1JpbmcoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiAJCQkJCQkJQnVmZmVy RGVzYyAqYnVmKTsKK3N0YXRpYyBDbG9ja1N3ZWVwICpDaG9vc2VDbG9ja1N3ZWVwKHZvaWQp OwogCiAvKgogICogQ2xvY2tTd2VlcFRpY2sgLSBIZWxwZXIgcm91dGluZSBmb3IgU3RyYXRl Z3lHZXRCdWZmZXIoKQpAQCAtMTAwLDYgKzE0NCw3IEBAIHN0YXRpYyBpbmxpbmUgdWludDMy CiBDbG9ja1N3ZWVwVGljayh2b2lkKQogewogCXVpbnQzMgkJdmljdGltOworCUNsb2NrU3dl ZXAgKnN3ZWVwID0gQ2hvb3NlQ2xvY2tTd2VlcCgpOwogCiAJLyoKIAkgKiBBdG9taWNhbGx5 IG1vdmUgaGFuZCBhaGVhZCBvbmUgYnVmZmVyIC0gaWYgdGhlcmUncyBzZXZlcmFsIHByb2Nl c3NlcwpAQCAtMTA3LDE0ICsxNTIsMTQgQEAgQ2xvY2tTd2VlcFRpY2sodm9pZCkKIAkgKiBh cHBhcmVudCBvcmRlci4KIAkgKi8KIAl2aWN0aW0gPQotCQlwZ19hdG9taWNfZmV0Y2hfYWRk X3UzMigmU3RyYXRlZ3lDb250cm9sLT5uZXh0VmljdGltQnVmZmVyLCAxKTsKKwkJcGdfYXRv bWljX2ZldGNoX2FkZF91MzIoJnN3ZWVwLT5uZXh0VmljdGltQnVmZmVyLCAxKTsKIAotCWlm ICh2aWN0aW0gPj0gTkJ1ZmZlcnMpCisJaWYgKHZpY3RpbSA+PSBzd2VlcC0+bnVtQnVmZmVy cykKIAl7CiAJCXVpbnQzMgkJb3JpZ2luYWxWaWN0aW0gPSB2aWN0aW07CiAKIAkJLyogYWx3 YXlzIHdyYXAgd2hhdCB3ZSBsb29rIHVwIGluIEJ1ZmZlckRlc2NyaXB0b3JzICovCi0JCXZp Y3RpbSA9IHZpY3RpbSAlIE5CdWZmZXJzOworCQl2aWN0aW0gPSB2aWN0aW0gJSBzd2VlcC0+ bnVtQnVmZmVyczsKIAogCQkvKgogCQkgKiBJZiB3ZSdyZSB0aGUgb25lIHRoYXQganVzdCBj YXVzZWQgYSB3cmFwYXJvdW5kLCBmb3JjZQpAQCAtMTQwLDE5ICsxODUsMTE3IEBAIENsb2Nr U3dlZXBUaWNrKHZvaWQpCiAJCQkJICogY291bGQgbGVhZCB0byBhbiBvdmVyZmxvdyBvZiBu ZXh0VmljdGltQnVmZmVycywgYnV0IHRoYXQncwogCQkJCSAqIGhpZ2hseSB1bmxpa2VseSBh bmQgd291bGRuJ3QgYmUgcGFydGljdWxhcmx5IGhhcm1mdWwuCiAJCQkJICovCi0JCQkJU3Bp bkxvY2tBY3F1aXJlKCZTdHJhdGVneUNvbnRyb2wtPmJ1ZmZlcl9zdHJhdGVneV9sb2NrKTsK KwkJCQlTcGluTG9ja0FjcXVpcmUoJnN3ZWVwLT5jbG9ja19zd2VlcF9sb2NrKTsKIAotCQkJ CXdyYXBwZWQgPSBleHBlY3RlZCAlIE5CdWZmZXJzOworCQkJCXdyYXBwZWQgPSBleHBlY3Rl ZCAlIHN3ZWVwLT5udW1CdWZmZXJzOwogCi0JCQkJc3VjY2VzcyA9IHBnX2F0b21pY19jb21w YXJlX2V4Y2hhbmdlX3UzMigmU3RyYXRlZ3lDb250cm9sLT5uZXh0VmljdGltQnVmZmVyLAor CQkJCXN1Y2Nlc3MgPSBwZ19hdG9taWNfY29tcGFyZV9leGNoYW5nZV91MzIoJnN3ZWVwLT5u ZXh0VmljdGltQnVmZmVyLAogCQkJCQkJCQkJCQkJCQkgJmV4cGVjdGVkLCB3cmFwcGVkKTsK IAkJCQlpZiAoc3VjY2VzcykKLQkJCQkJU3RyYXRlZ3lDb250cm9sLT5jb21wbGV0ZVBhc3Nl cysrOwotCQkJCVNwaW5Mb2NrUmVsZWFzZSgmU3RyYXRlZ3lDb250cm9sLT5idWZmZXJfc3Ry YXRlZ3lfbG9jayk7CisJCQkJCXN3ZWVwLT5jb21wbGV0ZVBhc3NlcysrOworCQkJCVNwaW5M b2NrUmVsZWFzZSgmc3dlZXAtPmNsb2NrX3N3ZWVwX2xvY2spOwogCQkJfQogCQl9CiAJfQot CXJldHVybiB2aWN0aW07CisKKwkvKiBYWFggYnVmZmVyIElEcyBhcmUgMS1iYXNlZCwgd2Un cmUgY2FsY3VsYXRpbmcgMC1iYXNlZCBpbmRleGVzICovCisJQXNzZXJ0KEJ1ZmZlcklzVmFs aWQoMSArIHN3ZWVwLT5maXJzdEJ1ZmZlciArICh2aWN0aW0gJSBzd2VlcC0+bnVtQnVmZmVy cykpKTsKKworCXJldHVybiBzd2VlcC0+Zmlyc3RCdWZmZXIgKyB2aWN0aW07Cit9CisKKy8q CisgKiBjYWxjdWxhdGVfcGFydGl0aW9uX2luZGV4CisgKgkJY2FsY3VsYXRlIHRoZSBidWZm ZXIgLyBjbG9jay1zd2VlcCBwYXJ0aXRpb24gdG8gdXNlCisgKgorICogV2l0aCBsaWJudW1h LCB1c2UgdGhlIE5VTUEgbm9kZSBhbmQgQ1BVIHRvIHBpY2sgdGhlIHBhcnRpdGlvbi4gT3Ro ZXJ3aXNlCisgKiB1c2UganVzdCBQSUQgaW5zdGVhZCBvZiBDUFUgKHdlIGFzc3VtZSBldmVy eXRoaW5nIGlzIGEgc2luZ2xlIE5VTUEgbm9kZSkuCisgKi8KK3N0YXRpYyBpbnQKK2NhbGN1 bGF0ZV9wYXJ0aXRpb25faW5kZXgodm9pZCkKK3sKKwlpbnQJCWNwdSwKKwkJCW5vZGUsCisJ CQlpbmRleDsKKworCS8qCisJICogVGhlIGJ1ZmZlcnMgYXJlIHBhcnRpdGlvbmVkLCBzbyBk ZXRlcm1pbmUgdGhlIENQVS9OVU1BIG5vZGUsIGFuZCBwaWNrIGEKKwkgKiBwYXJ0aXRpb24g YmFzZWQgb24gdGhhdC4KKwkgKgorCSAqIFdpdGhvdXQgTlVNQSBhc3N1bWUgZXZlcnl0aGlu ZyBpcyBhIHNpbmdsZSBOVU1BIG5vZGUsIGFuZCB3ZSBwaWNrIHRoZQorCSAqIHBhcnRpdGlv biBiYXNlZCBvbiBQSUQgKHdlIG1heSBub3QgaGF2ZSBzY2hlZF9nZXRjcHUpLgorCSAqLwor I2lmZGVmIFVTRV9MSUJOVU1BCisJY3B1ID0gc2NoZWRfZ2V0Y3B1KCk7CisKKwlpZiAoY3B1 IDwgMCkKKwkJZWxvZyhFUlJPUiwgInNjaGVkX2dldGNwdSBmYWlsZWQ6ICVtIik7CisKKwlu b2RlID0gbnVtYV9ub2RlX29mX2NwdShjcHUpOworI2Vsc2UKKwljcHUgPSBNeVByb2NQaWQ7 CisJbm9kZSA9IDA7CisjZW5kaWYKKworCUFzc2VydChTdHJhdGVneUNvbnRyb2wtPm51bV9w YXJ0aXRpb25zID09CisJCSAgIChTdHJhdGVneUNvbnRyb2wtPm51bV9ub2RlcyAqIFN0cmF0 ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnNfcGVyX25vZGUpKTsKKworCS8qCisJICogWFhY IFdlIHNob3VsZCd0IGdldCBub2RlcyB0aGF0IHdlIGhhdmVuJ3QgY29uc2lkZXJlZCB3aGls ZSBidWlsZGluZyB0aGUKKwkgKiBwYXJ0aXRpb25zLiBNYXliZSBpZiB3ZSBhbGxvdyB0aGlz IChlLmcuIGR1ZSB0byBzdXBwb3J0IGFkanVzdGluZyB0aGUKKwkgKiBOVU1BIHN0dWZmIGF0 IHJ1bnRpbWUpLCB3ZSBzaG91bGQganVzdCBkbyBvdXIgYmVzdCB0byBtaW5pbWl6ZSB0aGUK KwkgKiBjb25mbGljdHMgc29tZWhvdy4gQnV0IGl0J2xsIG1ha2UgdGhlIG1hcHBpbmcgaGFy ZGVyLCBzbyBmb3Igbm93IHdlCisJICogaWdub3JlIGl0LgorCSAqLworCWlmIChub2RlID4g U3RyYXRlZ3lDb250cm9sLT5udW1fbm9kZXMpCisJCWVsb2coRVJST1IsICJub2RlIG91dCBv ZiByYW5nZTogJWQgPiAldSIsIGNwdSwgU3RyYXRlZ3lDb250cm9sLT5udW1fbm9kZXMpOwor CisJLyoKKwkgKiBGaW5kIHRoZSBwYXJ0aXRpb24uIElmIHdlIGhhdmUgYSBzaW5nbGUgcGFy dGl0aW9uIHBlciBub2RlLCB3ZSBjYW4KKwkgKiBjYWxjdWxhdGUgdGhlIGluZGV4IGRpcmVj dGx5IGZyb20gbm9kZS4gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gZG8gdHdvCisJICogc3RlcHMs IHVzaW5nIG5vZGUgYW5kIHRoZW4gY3B1LgorCSAqLworCWlmIChTdHJhdGVneUNvbnRyb2wt Pm51bV9wYXJ0aXRpb25zX3Blcl9ub2RlID09IDEpCisJeworCQkvKiBmYXN0LXBhdGggKi8K KwkJaW5kZXggPSAobm9kZSAlIFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnMpOwor CX0KKwllbHNlCisJeworCQlpbnQJCQlpbmRleF9ncm91cCwKKwkJCQkJaW5kZXhfcGFydDsK KworCQkvKiB0d28gc3RlcHMgLSBjYWxjdWxhdGUgZ3JvdXAgZnJvbSBub2RlLCBwYXJ0aXRp b24gZnJvbSBjcHUgKi8KKwkJaW5kZXhfZ3JvdXAgPSAobm9kZSAlIFN0cmF0ZWd5Q29udHJv bC0+bnVtX25vZGVzKTsKKwkJaW5kZXhfcGFydCA9IChjcHUgJSBTdHJhdGVneUNvbnRyb2wt Pm51bV9wYXJ0aXRpb25zX3Blcl9ub2RlKTsKKworCQlpbmRleCA9IChpbmRleF9ncm91cCAq IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnNfcGVyX25vZGUpCisJCQkrIGluZGV4 X3BhcnQ7CisJfQorCisJcmV0dXJuIGluZGV4OworfQorCisvKgorICogQ2hvb3NlQ2xvY2tT d2VlcAorICoJCXBpY2sgYSBjbG9ja3N3ZWVwIHBhcnRpdGlvbiBiYXNlZCBvbiBOVU1BIG5v ZGUgYW5kIENQVQorICoKKyAqIFRoZSBudW1iZXIgb2YgY2xvY2tzd2VlcCBwYXJ0aXRpb25z IG1heSBub3QgbWF0Y2ggdGhlIG51bWJlciBvZiBOVU1BCisgKiBub2RlcywgYnV0IGl0IHNo b3VsZCBub3QgYmUgbG93ZXIuIEVhY2ggcGFydGl0aW9uIHNob3VsZCBiZSBtYXBwZWQgdG8K KyAqIGEgc2luZ2xlIE5VTUEgbm9kZSwgYnV0IGEgbm9kZSBtYXkgaGF2ZSBtdWx0aXBsZSBw YXJ0aXRpb25zLiBJZiB0aGVyZQorICogYXJlIG11bHRpcGxlIHBhcnRpdGlvbnMgcGVyIG5v ZGUgKGFsbCBub2RlcyBoYXZlIHRoZSBzYW1lIG51bWJlciBvZgorICogcGFydGl0aW9ucyks IHdlIHBpY2sgdGhlIHBhcnRpdGlvbiB1c2luZyBDUFUuCisgKgorICogWFhYIE1heWJlIHdl IHNob3VsZCBkbyBib3RoIHRoZSB0b3RhbCBhbmQgInBlciBncm91cCIgY291bnRzIGEgcG93 ZXIgb2YKKyAqIHR3bz8gVGhhdCdkIGFsbG93IHVzaW5nIHNoaWZ0cyBpbnN0ZWFkIG9mIGRp dmlzaW9ucyBpbiB0aGUgY2FsY3VsYXRpb24sCisgKiBhbmQgdGhhdCdzIGNoZWFwZXIuIEJ1 dCBob3cgd291bGQgdGhhdCBkZWFsIHdpdGggb2RkIG51bWJlciBvZiBub2Rlcz8KKyAqLwor c3RhdGljIENsb2NrU3dlZXAgKgorQ2hvb3NlQ2xvY2tTd2VlcCh2b2lkKQoreworCWludAkJ CWluZGV4ID0gY2FsY3VsYXRlX3BhcnRpdGlvbl9pbmRleCgpOworCisJcmV0dXJuICZTdHJh dGVneUNvbnRyb2wtPnN3ZWVwc1tpbmRleF07CiB9CiAKIC8qCkBAIC0yMjIsOSArMzY1LDM1 IEBAIFN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCB1 aW50MzIgKmJ1Zl9zdGF0ZSwgYm9vbCAqZnJvbV9yCiAJICogdGhlIHJhdGUgb2YgYnVmZmVy IGNvbnN1bXB0aW9uLiAgTm90ZSB0aGF0IGJ1ZmZlcnMgcmVjeWNsZWQgYnkgYQogCSAqIHN0 cmF0ZWd5IG9iamVjdCBhcmUgaW50ZW50aW9uYWxseSBub3QgY291bnRlZCBoZXJlLgogCSAq LwotCXBnX2F0b21pY19mZXRjaF9hZGRfdTMyKCZTdHJhdGVneUNvbnRyb2wtPm51bUJ1ZmZl ckFsbG9jcywgMSk7CisJcGdfYXRvbWljX2ZldGNoX2FkZF91MzIoJkNob29zZUNsb2NrU3dl ZXAoKS0+bnVtQnVmZmVyQWxsb2NzLCAxKTsKIAotCS8qIFVzZSB0aGUgImNsb2NrIHN3ZWVw IiBhbGdvcml0aG0gdG8gZmluZCBhIGZyZWUgYnVmZmVyICovCisJLyoKKwkgKiBVc2UgdGhl ICJjbG9jayBzd2VlcCIgYWxnb3JpdGhtIHRvIGZpbmQgYSBmcmVlIGJ1ZmZlcgorCSAqCisJ ICogWFhYIE5vdGUgdGhhdCBDbG9ja1N3ZWVwVGljaygpIGlzIE5VTUEtYXdhcmUsIGkuZS4g aXQgb25seSBsb29rcyBhdAorCSAqIGJ1ZmZlcnMgZnJvbSBhIHNpbmdsZSBwYXJ0aXRpb24s IGFsaWduZWQgd2l0aCB0aGUgTlVNQSBub2RlLiBUaGF0IG1lYW5zCisJICogaXQgb25seSBh Y2Nlc3NlcyBidWZmZXJzIGZyb20gdGhlIHNhbWUgTlVNQSBub2RlLgorCSAqCisJICogWFhY IFRoYXQgYWxzbyBtZWFucyBlYWNoIHByb2Nlc3MgInN3ZWVwcyIgb25seSBhIGZyYWN0aW9u IG9mIGJ1ZmZlcnMsCisJICogZXZlbiBpZiB0aGUgb3RoZXIgYnVmZmVycyBhcmUgYmV0dGVy IGNhbmRpZGF0ZXMgZm9yIGV2aWN0aW9uLiBNYXliZQorCSAqIHRoZXJlIHNob3VsZCBiZSBz b21lIGxvZ2ljIHRvICJzdGVhbCIgYnVmZmVycyBmcm9tIG90aGVyIGZyZWVsaXN0cyBvcgor CSAqIG90aGVyIG5vZGVzPworCSAqCisJICogWFhYIFdvdWxkIHRoYXQgYWxzbyBtZWFuIHdl J2QgaGF2ZSBtdWx0aXBsZSBiZ3dyaXRlcnMsIG9uZSBmb3IgZWFjaAorCSAqIG5vZGUsIG9y IHdvdWxkIG9uZSBiZ3dyaXRlciBoYW5kbGUgYWxsIG9mIHRoYXQ/CisJICoKKwkgKiBYWFgg VGhpcyBvbmx5IHNlYXJjaGVzIGEgc2luZ2xlIHBhcnRpdGlvbiwgd2hpY2ggY2FuIHJlc3Vs dCBpbiAibm8KKwkgKiB1bnBpbm5lZCBidWZmZXJzIGF2YWlsYWJsZSIgZXZlbiBpZiB0aGVy ZSBhcmUgYnVmZmVycyBpbiBvdGhlcgorCSAqIHBhcnRpdGlvbnMuIFNob3VsZCBiZSBmaXhl ZCBieSBmYWxsaW5nIGJhY2sgdG8gb3RoZXIgcGFydGl0aW9ucyBpZgorCSAqIG5lZWRlZC4K KwkgKgorCSAqIFhYWCBBbHNvLCB0aGUgdHJ5Y291bnRlciBzaG91bGQgbm90IGJlIHNldCB0 byBOQnVmZmVycywgYnV0IHRvIGJ1ZmZlcgorCSAqIGNvdW50IGZvciB0aGF0IG9uZSBwYXJ0 aXRpb24uIEluIGZhY3QsIHRoaXMgc2hvdWxkIG5vdCBjYWxsIENsb2NrU3dlZXBUaWNrCisJ ICogZm9yIGV2ZXJ5IGl0ZXJhdGlvbi4gVGhlIGNhbGwgaXMgbGlrZWx5IHF1aXRlIGV4cGVu c2l2ZSAoZG9lcyBhIGxvdAorCSAqIG9mIHN0dWZmKSwgYW5kIGFsc28gbWF5IHJldHVybiBh IGRpZmZlcmVudCBwYXJ0aXRpb24gb24gZWFjaCBjYWxsLgorCSAqIFdlIHNob3VsZCBqdXN0 IGRvIGl0IG9uY2UsIGFuZCB0aGVuIGRvIHRoZSBmb3IoOzspIGxvb3AuIEFuZCB0aGVuCisJ ICogbWF5YmUgYWR2YW5jZSB0byB0aGUgbmV4dCBwYXJ0aXRpb24sIHVudGlsIHdlIHNjYW4g dGhyb3VnaCBhbGwgb2YgdGhlbS4KKwkgKi8KIAl0cnljb3VudGVyID0gTkJ1ZmZlcnM7CiAJ Zm9yICg7OykKIAl7CkBAIC0yNjksNiArNDM4LDQ2IEBAIFN0cmF0ZWd5R2V0QnVmZmVyKEJ1 ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCB1aW50MzIgKmJ1Zl9zdGF0ZSwgYm9vbCAq ZnJvbV9yCiAJfQogfQogCisvKgorICogU3RyYXRlZ3lTeW5jUHJlcGFyZSAtLSBwcmVwYXJl IGZvciBzeW5jIG9mIGFsbCBwYXJ0aXRpb25zCisgKgorICogRGV0ZXJtaW5lIHRoZSBudW1i ZXIgb2YgY2xvY2tzd2VlcCBwYXJ0aXRpb25zLCBhbmQgY2FsY3VsYXRlIHRoZSByZWNlbnQK KyAqIGJ1ZmZlcnMgYWxsb2NzIChhcyBhIHN1bSBvZiBhbGwgdGhlIHBhcnRpdGlvbnMpLiBU aGlzIGFsbG93cyBCZ0J1ZmZlclN5bmMKKyAqIHRvIGNhbGN1bGF0ZSBhdmVyYWdlIG51bWJl ciBvZiBhbGxvY2F0aW9ucyBwZXIgcGFydGl0aW9uIGZvciB0aGUgbmV4dAorICogc3luYyBj eWNsZS4KKyAqCisgKiBJbiBhZGRpdGlvbiBpdCByZXR1cm5zIHRoZSBjb3VudCBvZiByZWNl bnQgYnVmZmVyIGFsbG9jcywgd2hpY2ggaXMgYSB0b3RhbAorICogc3VtbWVkIGZyb20gYWxs IHBhcnRpdGlvbnMuIFRoZSBhbGxvYyBjb3VudHMgYXJlIHJlc2V0IGFmdGVyIGJlaW5nIHJl YWQsCisgKiBhcyB0aGUgcGFydGl0aW9ucyBhcmUgd2Fsa2VkLgorICovCit2b2lkCitTdHJh dGVneVN5bmNQcmVwYXJlKGludCAqbnVtX3BhcnRzLCB1aW50MzIgKm51bV9idWZfYWxsb2Mp Cit7CisJKm51bV9idWZfYWxsb2MgPSAwOworCSpudW1fcGFydHMgPSBTdHJhdGVneUNvbnRy b2wtPm51bV9wYXJ0aXRpb25zOworCisJLyoKKwkgKiBXZSBsb2NrIHRoZSBwYXJ0aXRpb25z IG9uZSBieSBvbmUsIHNvIG5vdCBleGFjbHkgaW4gc3luYywgYnV0IHRoYXQKKwkgKiBzaG91 bGQgYmUgZmluZS4gV2UncmUgb25seSBsb29raW5nIGZvciBoZXVyaXN0aWNzIGFueXdheS4K KwkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRp dGlvbnM7IGkrKykKKwl7CisJCUNsb2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5Q29udHJv bC0+c3dlZXBzW2ldOworCisJCVNwaW5Mb2NrQWNxdWlyZSgmc3dlZXAtPmNsb2NrX3N3ZWVw X2xvY2spOworCQlpZiAobnVtX2J1Zl9hbGxvYykKKwkJeworCQkJdWludDMyCWFsbG9jcyA9 IHBnX2F0b21pY19leGNoYW5nZV91MzIoJnN3ZWVwLT5udW1CdWZmZXJBbGxvY3MsIDApOwor CisJCQkvKiBpbmNsdWRlIHRoZSBjb3VudCBpbiB0aGUgcnVubmluZyB0b3RhbCAqLworCQkJ cGdfYXRvbWljX2ZldGNoX2FkZF91NjQoJnN3ZWVwLT5udW1Ub3RhbEFsbG9jcywgYWxsb2Nz KTsKKworCQkJKm51bV9idWZfYWxsb2MgKz0gYWxsb2NzOworCQl9CisJCVNwaW5Mb2NrUmVs ZWFzZSgmc3dlZXAtPmNsb2NrX3N3ZWVwX2xvY2spOworCX0KK30KKwogLyoKICAqIFN0cmF0 ZWd5U3luY1N0YXJ0IC0tIHRlbGwgQmdCdWZmZXJTeW5jIHdoZXJlIHRvIHN0YXJ0IHN5bmNp bmcKICAqCkBAIC0yNzYsMzcgKzQ4NSw0NCBAQCBTdHJhdGVneUdldEJ1ZmZlcihCdWZmZXJB Y2Nlc3NTdHJhdGVneSBzdHJhdGVneSwgdWludDMyICpidWZfc3RhdGUsIGJvb2wgKmZyb21f cgogICogQmdCdWZmZXJTeW5jKCkgd2lsbCBwcm9jZWVkIGNpcmN1bGFybHkgYXJvdW5kIHRo ZSBidWZmZXIgYXJyYXkgZnJvbSB0aGVyZS4KICAqCiAgKiBJbiBhZGRpdGlvbiwgd2UgcmV0 dXJuIHRoZSBjb21wbGV0ZWQtcGFzcyBjb3VudCAod2hpY2ggaXMgZWZmZWN0aXZlbHkKLSAq IHRoZSBoaWdoZXItb3JkZXIgYml0cyBvZiBuZXh0VmljdGltQnVmZmVyKSBhbmQgdGhlIGNv dW50IG9mIHJlY2VudCBidWZmZXIKLSAqIGFsbG9jcyBpZiBub24tTlVMTCBwb2ludGVycyBh cmUgcGFzc2VkLiAgVGhlIGFsbG9jIGNvdW50IGlzIHJlc2V0IGFmdGVyCi0gKiBiZWluZyBy ZWFkLgorICogdGhlIGhpZ2hlci1vcmRlciBiaXRzIG9mIG5leHRWaWN0aW1CdWZmZXIpLgor ICoKKyAqIFRoaXMgb25seSBjb25zaWRlcnMgYSBzaW5nbGUgY2xvY2tzd2VlcCBwYXJ0aXRp b24sIGFzIEJnQnVmZmVyU3luYyBsb29rcworICogYXQgdGhlbSBvbmUgYnkgb25lLgogICov CiBpbnQKLVN0cmF0ZWd5U3luY1N0YXJ0KHVpbnQzMiAqY29tcGxldGVfcGFzc2VzLCB1aW50 MzIgKm51bV9idWZfYWxsb2MpCitTdHJhdGVneVN5bmNTdGFydChpbnQgcGFydGl0aW9uLCB1 aW50MzIgKmNvbXBsZXRlX3Bhc3NlcywKKwkJCQkgIGludCAqZmlyc3RfYnVmZmVyLCBpbnQg Km51bV9idWZmZXJzKQogewogCXVpbnQzMgkJbmV4dFZpY3RpbUJ1ZmZlcjsKIAlpbnQJCQly ZXN1bHQ7CisJQ2xvY2tTd2VlcCAqc3dlZXAgPSAmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNb cGFydGl0aW9uXTsKIAotCVNwaW5Mb2NrQWNxdWlyZSgmU3RyYXRlZ3lDb250cm9sLT5idWZm ZXJfc3RyYXRlZ3lfbG9jayk7Ci0JbmV4dFZpY3RpbUJ1ZmZlciA9IHBnX2F0b21pY19yZWFk X3UzMigmU3RyYXRlZ3lDb250cm9sLT5uZXh0VmljdGltQnVmZmVyKTsKLQlyZXN1bHQgPSBu ZXh0VmljdGltQnVmZmVyICUgTkJ1ZmZlcnM7CisJQXNzZXJ0KChwYXJ0aXRpb24gPj0gMCkg JiYgKHBhcnRpdGlvbiA8IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnMpKTsKKwor CVNwaW5Mb2NrQWNxdWlyZSgmc3dlZXAtPmNsb2NrX3N3ZWVwX2xvY2spOworCW5leHRWaWN0 aW1CdWZmZXIgPSBwZ19hdG9taWNfcmVhZF91MzIoJnN3ZWVwLT5uZXh0VmljdGltQnVmZmVy KTsKKwlyZXN1bHQgPSBuZXh0VmljdGltQnVmZmVyICUgc3dlZXAtPm51bUJ1ZmZlcnM7CisK KwkqZmlyc3RfYnVmZmVyID0gc3dlZXAtPmZpcnN0QnVmZmVyOworCSpudW1fYnVmZmVycyA9 IHN3ZWVwLT5udW1CdWZmZXJzOwogCiAJaWYgKGNvbXBsZXRlX3Bhc3NlcykKIAl7Ci0JCSpj b21wbGV0ZV9wYXNzZXMgPSBTdHJhdGVneUNvbnRyb2wtPmNvbXBsZXRlUGFzc2VzOworCQkq Y29tcGxldGVfcGFzc2VzID0gc3dlZXAtPmNvbXBsZXRlUGFzc2VzOwogCiAJCS8qCiAJCSAq IEFkZGl0aW9uYWxseSBhZGQgdGhlIG51bWJlciBvZiB3cmFwYXJvdW5kcyB0aGF0IGhhcHBl bmVkIGJlZm9yZQogCQkgKiBjb21wbGV0ZVBhc3NlcyBjb3VsZCBiZSBpbmNyZW1lbnRlZC4g Qy5mLiBDbG9ja1N3ZWVwVGljaygpLgogCQkgKi8KLQkJKmNvbXBsZXRlX3Bhc3NlcyArPSBu ZXh0VmljdGltQnVmZmVyIC8gTkJ1ZmZlcnM7CisJCSpjb21wbGV0ZV9wYXNzZXMgKz0gbmV4 dFZpY3RpbUJ1ZmZlciAvIHN3ZWVwLT5udW1CdWZmZXJzOwogCX0KKwlTcGluTG9ja1JlbGVh c2UoJnN3ZWVwLT5jbG9ja19zd2VlcF9sb2NrKTsKIAotCWlmIChudW1fYnVmX2FsbG9jKQot CXsKLQkJKm51bV9idWZfYWxsb2MgPSBwZ19hdG9taWNfZXhjaGFuZ2VfdTMyKCZTdHJhdGVn eUNvbnRyb2wtPm51bUJ1ZmZlckFsbG9jcywgMCk7Ci0JfQotCVNwaW5Mb2NrUmVsZWFzZSgm U3RyYXRlZ3lDb250cm9sLT5idWZmZXJfc3RyYXRlZ3lfbG9jayk7Ci0JcmV0dXJuIHJlc3Vs dDsKKwkvKiBYWFggYnVmZmVyIElEcyBzdGFydCBhdCAxLCB3ZSdyZSBjYWxjdWxhdGluZyAw LWJhc2VkIGluZGV4ZXMgKi8KKwlBc3NlcnQoQnVmZmVySXNWYWxpZCgxICsgc3dlZXAtPmZp cnN0QnVmZmVyICsgcmVzdWx0KSk7CisKKwlyZXR1cm4gc3dlZXAtPmZpcnN0QnVmZmVyICsg cmVzdWx0OwogfQogCiAvKgpAQCAtMzQzLDYgKzU1OSw5IEBAIFNpemUKIFN0cmF0ZWd5U2ht ZW1TaXplKHZvaWQpCiB7CiAJU2l6ZQkJc2l6ZSA9IDA7CisJaW50CQkJbnVtX3BhcnRpdGlv bnM7CisKKwlCdWZmZXJQYXJ0aXRpb25QYXJhbXMoJm51bV9wYXJ0aXRpb25zLCBOVUxMKTsK IAogCS8qIHNpemUgb2YgbG9va3VwIGhhc2ggdGFibGUgLi4uIHNlZSBjb21tZW50IGluIFN0 cmF0ZWd5SW5pdGlhbGl6ZSAqLwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBCdWZUYWJsZVNo bWVtU2l6ZShOQnVmZmVycyArIE5VTV9CVUZGRVJfUEFSVElUSU9OUykpOwpAQCAtMzUwLDYg KzU2OSwxMCBAQCBTdHJhdGVneVNobWVtU2l6ZSh2b2lkKQogCS8qIHNpemUgb2YgdGhlIHNo YXJlZCByZXBsYWNlbWVudCBzdHJhdGVneSBjb250cm9sIGJsb2NrICovCiAJc2l6ZSA9IGFk ZF9zaXplKHNpemUsIE1BWEFMSUdOKHNpemVvZihCdWZmZXJTdHJhdGVneUNvbnRyb2wpKSk7 CiAKKwkvKiBzaXplIG9mIGNsb2Nrc3dlZXAgcGFydGl0aW9ucyAoYXQgbGVhc3Qgb25lIHBl ciBOVU1BIG5vZGUpICovCisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIE1BWEFMSUdOKG11bF9z aXplKHNpemVvZihDbG9ja1N3ZWVwKSwKKwkJCQkJCQkJCQkJbnVtX3BhcnRpdGlvbnMpKSk7 CisKIAlyZXR1cm4gc2l6ZTsKIH0KIApAQCAtMzY1LDYgKzU4OCwxOCBAQCBTdHJhdGVneUlu aXRpYWxpemUoYm9vbCBpbml0KQogewogCWJvb2wJCWZvdW5kOwogCisJaW50CQkJbnVtX25v ZGVzOworCWludAkJCW51bV9wYXJ0aXRpb25zOworCWludAkJCW51bV9wYXJ0aXRpb25zX3Bl cl9ub2RlOworCisJbnVtX3BhcnRpdGlvbnMgPSBCdWZmZXJQYXJ0aXRpb25Db3VudCgpOwor CW51bV9ub2RlcyA9IEJ1ZmZlclBhcnRpdGlvbk5vZGVzKCk7CisKKwkvKiBhbHdheXMgYSBt dWx0aXBsZSBvZiBOVU1BIG5vZGVzICovCisJQXNzZXJ0KG51bV9wYXJ0aXRpb25zICUgbnVt X25vZGVzID09IDApOworCisJbnVtX3BhcnRpdGlvbnNfcGVyX25vZGUgPSAobnVtX3BhcnRp dGlvbnMgLyBudW1fbm9kZXMpOworCiAJLyoKIAkgKiBJbml0aWFsaXplIHRoZSBzaGFyZWQg YnVmZmVyIGxvb2t1cCBoYXNodGFibGUuCiAJICoKQEAgLTM4Miw3ICs2MTcsOCBAQCBTdHJh dGVneUluaXRpYWxpemUoYm9vbCBpbml0KQogCSAqLwogCVN0cmF0ZWd5Q29udHJvbCA9IChC dWZmZXJTdHJhdGVneUNvbnRyb2wgKikKIAkJU2htZW1Jbml0U3RydWN0KCJCdWZmZXIgU3Ry YXRlZ3kgU3RhdHVzIiwKLQkJCQkJCXNpemVvZihCdWZmZXJTdHJhdGVneUNvbnRyb2wpLAor CQkJCQkJTUFYQUxJR04ob2Zmc2V0b2YoQnVmZmVyU3RyYXRlZ3lDb250cm9sLCBzd2VlcHMp KSArCisJCQkJCQlNQVhBTElHTihzaXplb2YoQ2xvY2tTd2VlcCkgKiBudW1fcGFydGl0aW9u cyksCiAJCQkJCQkmZm91bmQpOwogCiAJaWYgKCFmb3VuZCkKQEAgLTM5NCwxNSArNjMwLDQ0 IEBAIFN0cmF0ZWd5SW5pdGlhbGl6ZShib29sIGluaXQpCiAKIAkJU3BpbkxvY2tJbml0KCZT dHJhdGVneUNvbnRyb2wtPmJ1ZmZlcl9zdHJhdGVneV9sb2NrKTsKIAotCQkvKiBJbml0aWFs aXplIHRoZSBjbG9jay1zd2VlcCBwb2ludGVyICovCi0JCXBnX2F0b21pY19pbml0X3UzMigm U3RyYXRlZ3lDb250cm9sLT5uZXh0VmljdGltQnVmZmVyLCAwKTsKKwkJLyogSW5pdGlhbGl6 ZSB0aGUgY2xvY2sgc3dlZXAgcG9pbnRlcnMgKGZvciBhbGwgcGFydGl0aW9ucykgKi8KKwkJ Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1fcGFydGl0aW9uczsgaSsrKQorCQl7CisJCQlpbnQJ CQlub2RlLAorCQkJCQkJbnVtX2J1ZmZlcnMsCisJCQkJCQlmaXJzdF9idWZmZXIsCisJCQkJ CQlsYXN0X2J1ZmZlcjsKKworCQkJU3BpbkxvY2tJbml0KCZTdHJhdGVneUNvbnRyb2wtPnN3 ZWVwc1tpXS5jbG9ja19zd2VlcF9sb2NrKTsKKworCQkJcGdfYXRvbWljX2luaXRfdTMyKCZT dHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXS5uZXh0VmljdGltQnVmZmVyLCAwKTsKIAotCQkv KiBDbGVhciBzdGF0aXN0aWNzICovCi0JCVN0cmF0ZWd5Q29udHJvbC0+Y29tcGxldGVQYXNz ZXMgPSAwOwotCQlwZ19hdG9taWNfaW5pdF91MzIoJlN0cmF0ZWd5Q29udHJvbC0+bnVtQnVm ZmVyQWxsb2NzLCAwKTsKKwkJCS8qIGdldCBpbmZvIGFib3V0IHRoZSBidWZmZXIgcGFydGl0 aW9uICovCisJCQlCdWZmZXJQYXJ0aXRpb25HZXQoaSwgJm5vZGUsICZudW1fYnVmZmVycywK KwkJCQkJCQkgICAmZmlyc3RfYnVmZmVyLCAmbGFzdF9idWZmZXIpOworCisJCQkvKgorCQkJ ICogRklYTUUgVGhpcyBtYXkgbm90IHF1aXRlIHJpZ2h0LCBiZWNhdXNlIGlmIE5CdWZmZXJz IGlzIG5vdCBhCisJCQkgKiBwZXJmZWN0IG11bHRpcGxlIG9mIG51bUJ1ZmZlcnMsIHRoZSBs YXN0IHBhcnRpdGlvbiB3aWxsIGhhdmUKKwkJCSAqIG51bUJ1ZmZlcnMgc2V0IHRvbyBoaWdo LiBidWZfaW5pdCBoYW5kbGVzIHRoaXMgYnkgdHJhY2tpbmcgdGhlCisJCQkgKiByZW1haW5p bmcgbnVtYmVyIG9mIGJ1ZmZlcnMsIGFuZCBub3Qgb3ZlcmZsb3dpbmcuCisJCQkgKi8KKwkJ CVN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ldLm51bUJ1ZmZlcnMgPSBudW1fYnVmZmVyczsK KwkJCVN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ldLmZpcnN0QnVmZmVyID0gZmlyc3RfYnVm ZmVyOworCisJCQkvKiBDbGVhciBzdGF0aXN0aWNzICovCisJCQlTdHJhdGVneUNvbnRyb2wt PnN3ZWVwc1tpXS5jb21wbGV0ZVBhc3NlcyA9IDA7CisJCQlwZ19hdG9taWNfaW5pdF91MzIo JlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ldLm51bUJ1ZmZlckFsbG9jcywgMCk7CisJCQlw Z19hdG9taWNfaW5pdF91NjQoJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ldLm51bVRvdGFs QWxsb2NzLCAwKTsKKwkJfQogCiAJCS8qIE5vIHBlbmRpbmcgbm90aWZpY2F0aW9uICovCiAJ CVN0cmF0ZWd5Q29udHJvbC0+Ymd3cHJvY25vID0gLTE7CisKKwkJLyogaW5pdGlhbGl6ZSB0 aGUgcGFydGl0aW9uZWQgY2xvY2tzd2VlcCAqLworCQlTdHJhdGVneUNvbnRyb2wtPm51bV9w YXJ0aXRpb25zID0gbnVtX3BhcnRpdGlvbnM7CisJCVN0cmF0ZWd5Q29udHJvbC0+bnVtX25v ZGVzID0gbnVtX25vZGVzOworCQlTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zX3Bl cl9ub2RlID0gbnVtX3BhcnRpdGlvbnNfcGVyX25vZGU7CiAJfQogCWVsc2UKIAkJQXNzZXJ0 KCFpbml0KTsKQEAgLTczOSwzICsxMDA0LDIzIEBAIFN0cmF0ZWd5UmVqZWN0QnVmZmVyKEJ1 ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCBCdWZmZXJEZXNjICpidWYsIGJvb2wgZnJv bV9yCiAKIAlyZXR1cm4gdHJ1ZTsKIH0KKwordm9pZAorQ2xvY2tTd2VlcFBhcnRpdGlvbkdl dEluZm8oaW50IGlkeCwKKwkJCQkJCSAgIHVpbnQzMiAqY29tcGxldGVfcGFzc2VzLCB1aW50 MzIgKm5leHRfdmljdGltX2J1ZmZlciwKKwkJCQkJCSAgIHVpbnQ2NCAqYnVmZmVyX3RvdGFs X2FsbG9jcywgdWludDMyICpidWZmZXJfYWxsb2NzKQoreworCUNsb2NrU3dlZXAgKnN3ZWVw ID0gJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2lkeF07CisKKwlBc3NlcnQoKGlkeCA+PSAw KSAmJiAoaWR4IDwgU3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9ucykpOworCisJLyog Z2V0IHRoZSBjbG9ja3N3ZWVwIHN0YXRzICovCisJKmNvbXBsZXRlX3Bhc3NlcyA9IHN3ZWVw LT5jb21wbGV0ZVBhc3NlczsKKwkqbmV4dF92aWN0aW1fYnVmZmVyID0gcGdfYXRvbWljX3Jl YWRfdTMyKCZzd2VlcC0+bmV4dFZpY3RpbUJ1ZmZlcik7CisKKwkqYnVmZmVyX2FsbG9jcyA9 IHBnX2F0b21pY19yZWFkX3UzMigmc3dlZXAtPm51bUJ1ZmZlckFsbG9jcyk7CisJKmJ1ZmZl cl90b3RhbF9hbGxvY3MgPSBwZ19hdG9taWNfcmVhZF91NjQoJnN3ZWVwLT5udW1Ub3RhbEFs bG9jcyk7CisKKwkvKiBjYWxjdWxhdGUgdGhlIGFjdHVhbCBidWZmZXIgSUQgKi8KKwkqbmV4 dF92aWN0aW1fYnVmZmVyID0gc3dlZXAtPmZpcnN0QnVmZmVyICsgKCpuZXh0X3ZpY3RpbV9i dWZmZXIgJSBzd2VlcC0+bnVtQnVmZmVycyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2lu dGVybmFscy5oCmluZGV4IDI5NDE4OGUyMWM1Li41Y2NlNjkwOTMzYiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmgKKysrIGIvc3JjL2luY2x1ZGUv c3RvcmFnZS9idWZfaW50ZXJuYWxzLmgKQEAgLTQzOSw3ICs0MzksOSBAQCBleHRlcm4gQnVm ZmVyRGVzYyAqU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRl Z3ksCiBleHRlcm4gYm9vbCBTdHJhdGVneVJlamVjdEJ1ZmZlcihCdWZmZXJBY2Nlc3NTdHJh dGVneSBzdHJhdGVneSwKIAkJCQkJCQkJIEJ1ZmZlckRlc2MgKmJ1ZiwgYm9vbCBmcm9tX3Jp bmcpOwogCi1leHRlcm4gaW50CVN0cmF0ZWd5U3luY1N0YXJ0KHVpbnQzMiAqY29tcGxldGVf cGFzc2VzLCB1aW50MzIgKm51bV9idWZfYWxsb2MpOworZXh0ZXJuIHZvaWQgU3RyYXRlZ3lT eW5jUHJlcGFyZShpbnQgKm51bV9wYXJ0cywgdWludDMyICpudW1fYnVmX2FsbG9jKTsKK2V4 dGVybiBpbnQJU3RyYXRlZ3lTeW5jU3RhcnQoaW50IHBhcnRpdGlvbiwgdWludDMyICpjb21w bGV0ZV9wYXNzZXMsCisJCQkJCQkJICBpbnQgKmZpcnN0X2J1ZmZlciwgaW50ICpudW1fYnVm ZmVycyk7CiBleHRlcm4gdm9pZCBTdHJhdGVneU5vdGlmeUJnV3JpdGVyKGludCBiZ3dwcm9j bm8pOwogCiBleHRlcm4gU2l6ZSBTdHJhdGVneVNobWVtU2l6ZSh2b2lkKTsKQEAgLTQ4NSw1 ICs0ODcsNiBAQCBleHRlcm4gaW50CUJ1ZmZlclBhcnRpdGlvbkNvdW50KHZvaWQpOwogZXh0 ZXJuIGludAlCdWZmZXJQYXJ0aXRpb25Ob2Rlcyh2b2lkKTsKIGV4dGVybiB2b2lkIEJ1ZmZl clBhcnRpdGlvbkdldChpbnQgaWR4LCBpbnQgKm5vZGUsIGludCAqbnVtX2J1ZmZlcnMsCiAJ CQkJCQkJICAgaW50ICpmaXJzdF9idWZmZXIsIGludCAqbGFzdF9idWZmZXIpOworZXh0ZXJu IHZvaWQgQnVmZmVyUGFydGl0aW9uUGFyYW1zKGludCAqbnVtX3BhcnRpdGlvbnMsIGludCAq bnVtX25vZGVzKTsKIAogI2VuZGlmCQkJCQkJCS8qIEJVRk1HUl9JTlRFUk5BTFNfSCAqLwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCBiL3NyYy9pbmNsdWRl L3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggMTYxOGNhZjFjMmMuLjdkNjZlODI3NmNkIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCisrKyBiL3NyYy9pbmNsdWRl L3N0b3JhZ2UvYnVmbWdyLmgKQEAgLTM1NSw2ICszNTUsMTEgQEAgZXh0ZXJuIGludAlHZXRB Y2Nlc3NTdHJhdGVneUJ1ZmZlckNvdW50KEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5 KTsKIGV4dGVybiBpbnQJR2V0QWNjZXNzU3RyYXRlZ3lQaW5MaW1pdChCdWZmZXJBY2Nlc3NT dHJhdGVneSBzdHJhdGVneSk7CiAKIGV4dGVybiB2b2lkIEZyZWVBY2Nlc3NTdHJhdGVneShC dWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSk7CitleHRlcm4gdm9pZCBDbG9ja1N3ZWVw UGFydGl0aW9uR2V0SW5mbyhpbnQgaWR4LAorCQkJCQkJCQkJICAgdWludDMyICpjb21wbGV0 ZV9wYXNzZXMsCisJCQkJCQkJCQkgICB1aW50MzIgKm5leHRfdmljdGltX2J1ZmZlciwKKwkJ CQkJCQkJCSAgIHVpbnQ2NCAqYnVmZmVyX3RvdGFsX2FsbG9jcywKKwkJCQkJCQkJCSAgIHVp bnQzMiAqYnVmZmVyX2FsbG9jcyk7CiAKIAogLyogaW5saW5lIGZ1bmN0aW9ucyAqLwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMjdfc3RyZWFtX3JlZ3Jlc3MucGwgYi9z cmMvdGVzdC9yZWNvdmVyeS90LzAyN19zdHJlYW1fcmVncmVzcy5wbAppbmRleCA1ODljNzlk OTdkMy4uOThiMTQ2ZWQ0YjcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDI3 X3N0cmVhbV9yZWdyZXNzLnBsCisrKyBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDI3X3N0cmVh bV9yZWdyZXNzLnBsCkBAIC0xOCw2ICsxOCwxMSBAQCAkbm9kZV9wcmltYXJ5LT5hZGp1c3Rf Y29uZigncG9zdGdyZXNxbC5jb25mJywgJ21heF9jb25uZWN0aW9ucycsICcyNScpOwogJG5v ZGVfcHJpbWFyeS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCiAJJ21heF9wcmVw YXJlZF90cmFuc2FjdGlvbnMgPSAxMCcpOwogCisjIFRoZSBkZWZhdWx0IGlzIDFNQiwgd2hp Y2ggaXMgbm90IGVub3VnaCB3aXRoIGNsb2NrLXN3ZWVwIHBhcnRpdGlvbmluZy4KKyMgSW5j cmVhc2UgdG8gMzJNQiwgc28gdGhhdCB3ZSBkb24ndCBnZXQgIm5vIHVucGlubmVkIGJ1ZmZl cnMiLgorJG5vZGVfcHJpbWFyeS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJ J3NoYXJlZF9idWZmZXJzID0gMzJNQicpOworCiAjIEVuYWJsZSBwZ19zdGF0X3N0YXRlbWVu dHMgdG8gZm9yY2UgdGVzdHMgdG8gZG8gcXVlcnkganVtYmxpbmcuCiAjIHBnX3N0YXRfc3Rh dGVtZW50cy5tYXggc2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUgZW50 cmllcwogIyBvZiB0aGUgcmVncmVzc2lvbiBkYXRhYmFzZS4KZGlmZiAtLWdpdCBhL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKaW5kZXggYjNmMDUwNDAwOGUuLjJiN2NlMmQwYjlmIDEwMDY0NAotLS0gYS9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdApAQCAtNDI3LDYgKzQyNyw3IEBAIENsaWVudENlcnROYW1lCiBD bGllbnRDb25uZWN0aW9uSW5mbwogQ2xpZW50RGF0YQogQ2xpZW50U29ja2V0CitDbG9ja1N3 ZWVwCiBDbG9uZVB0clR5cGUKIENsb3NlUG9ydGFsU3RtdAogQ2xvc2VQdHJUeXBlCi0tIAoy LjUxLjAKCg== --------------7ugtFjYi6YRzRLN0MXp6Nj6F Content-Type: text/x-patch; charset=UTF-8; name="v20250918-0003-NUMA-clocksweep-allocation-balancing.patch" Content-Disposition: attachment; filename*0="v20250918-0003-NUMA-clocksweep-allocation-balancing.patch" Content-Transfer-Encoding: base64 RnJvbSAxNzA3YWUxNWJlOGYwMzExMjE5YzRiYTg0YjE1YTQxZDliZGU2YzY5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogV2VkLCAxMCBTZXAgMjAyNSAxODo1NjoyOCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUwOTE4IDMvNl0gTlVNQTogY2xvY2tzd2VlcCBhbGxvY2F0aW9uIGJhbGFuY2luZwoK SWYgYmFja2VuZHMgb25seSBhbGxvY2F0ZSBidWZmZXJzIGZyb20gdGhlICJsb2NhbCIgcGFy dGl0aW9uLCB0aGlzIGNvdWxkCmNhdXNlIHNpZ25pZmljYW50IG1pc2JhbGFuY2UgLSBzb21l IHBhcnRpdGlvbnMgbWlnaHQgYmUgb3ZlcnVzZWQsIHdoaWxlCm90aGVyIHBhcnRpdGlvbnMg d291bGQgYmUgbGVmdCB1bnVzZWQuIEluIG90aGVyIHdvcmRzLCBzaGFyZWQgYnVmZmVycwp3 b3VsZCBub3QgYmUgdXNlZCBlZmZpY2llbnRseS4KCldlIHdhbnQgYWxsIHBhcnRpdGlvbnMg dG8gYmUgdXNlZCBhYm91dCB0aGUgc2FtZSwgaS5lLiBzZXJ2ZSBhYm91dCB0aGUKc2FtZSBu dW1iZXIgb2YgYWxsb2NhdGlvbnMuIFRvIGFjaGlldmUgdGhhdCwgYWxsb2NhdGlvbnMgZnJv bSBwYXJ0aXRpb25zCnRoYXQgYXJlICJ0b28gYnVzeSIgbWF5IGdldCByZWRpcmVjdGVkIHRv IG90aGVyIHBhcnRpdGlvbnMuIFRoZSBzeXN0ZW0KY291bnRzIGFsbG9jYXRpb25zIHJlcXVl c3RlZCBmcm9tIGVhY2ggcGFydGl0aW9uLCBjYWxjdWxhdGVzIHRoZSAiZmFpcgpzaGFyZSIg KGF2ZXJhZ2UgcGVyIHBhcnRpdGlvbiksIGFuZCB0aGVuIHJlZGlyZWN0c2V4Y2VzcyBhbGxv Y2F0aW9ucyB0bwpvdGhlciBwYXJ0aXRpb25zLgoKRWFjaCBwYXJ0aXRpb24gZ2V0cyBhIHNl dCBvZiBjb2VmZmljaWVudHMgZGV0ZXJtaW5pbmcgdGhlIGZyYWN0aW9uIG9mCmFsbG9jYXRp b25zIHRvIHJlZGlyZWN0IHRvIG90aGVyIHBhcnRpdGlvbnMuIFRoZSBjb2VmZmljaWVudHMg bWF5IGJlCmludGVycHJldGVkIGFzIGEgImJ1ZGdldCIgZm9yIGVhY2ggb2YgdGhlIHBhcnRp dGlvbiwgaS5lLiB0aGUgbnVtYmVyIG9mCmFsbG9jYXRpb25zIHRvIHNlcnZlIGZyb20gdGhh dCBwYXJ0aXRpb24sIGJlZm9yZSBtb3ZpbmcgdG8gdGhlIG5leHQKcGFydGl0aW9uIChpbiBh IHJvdW5kLXJvYmluIG1hbm5lcikuCgpBbGwgb2YgdGhpcyBpcyB0aWVkIHRvIHRoZSBwYXJ0 aXRpb24gd2hlcmUgdGhlIGFsbG9jYXRpb24gd2FzIHJlcXVlc3RlZC4KRWFjaCBwYXJ0aXRp b24gaGFzIGEgc2VwYXJhdGUgc2V0IG9mIGNvZWZmaWNpZW50cy4KCldlIG1pZ2h0IGFsc28g dHJlYXQgdGhlIGNvZWZmaWNpZW50cyBhcyBwcm9iYWJpbGl0aWVzLCBhbmQgdXNlIFBSTkcg dG8KZGV0ZXJtaW5lIHdoZXJlIHRvIGRpcmVjdCBpbmRpdmlkdWFsIHJlcXVlc3RzLiBCdXQg YSBQUk5HIHNlZW1zIGZhaXJseQpleHBlbnNpdmUsIGFuZCB0aGUgYnVkZ2V0IGFwcHJvYWNo IHdvcmtzIHdlbGwuCgpXZSBpbnRlbnRpb25hbGx5IGtlZXAgdGhlICJidWRnZXQiIGZhaXJs eSBsb3csIHdpdGggdGhlIHN1bSBmb3IgYSBnaXZlbgpwYXJ0aXRpb24gMTAwLiBUaGF0IG1l YW5zIHdlIGdldCB0byB0aGUgc2FtZSBwYXJ0aXRpb24gYWZ0ZXIgb25seSAxMDAKYWxsb2Nh dGlvbnMsIGtlZXBpbmcgaXQgbW9yZSBiYWxhbmNlZC4gSXQgd291bGRuJ3QgYmUgaGFyZCB0 byBtYWtlIHRoZQpidWRnZXRzIGhpZ2hlciAoZS5nLiBtYXRjaGluZyB0aGUgbnVtYmVyIG9m IGFsbG9jYXRpb25zIHBlciByb3VuZCksIGJ1dAppdCBtaWdodCBhbHNvIG1ha2UgdGhlIGJl aGF2aW9yIGxlc3Mgc21vb3RoIChsb25nIHBlcmlvZCBvZiBhbGxvY2F0aW9ucwpmcm9tIGVh Y2ggcGFydGl0aW9uKS4KClRoaXMgaXMgdmVyeSBzaW1wbGUvY2hlYXAsIGFuZCBvdmVyIG1h bnkgYWxsb2NhdGlvbnMgaXQgaGFzIHRoZSBzYW1lCmVmZmVjdC4gRm9yIHBlcmlvZHMgb2Yg bG93IGFjdGl2aXR5IGl0IG1heSBkaXZlcmdlLCBidXQgdGhhdCBkb2VzIG5vdAptYXR0ZXIg bXVjaCAod2UgY2FyZSBhYm91dCBoaWdoLWFjdGl2aXR5IHBlcmlvZHMgbXVjaCBtb3JlKS4K LS0tCiAuLi4vcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbCAgICAgICAgICAgICAgfCAg IDUgKy0KIGNvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYyB8 ICA0MyArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgICAgICAgICAg IHwgICAzICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMgICAgICAg ICB8IDM3NyArKysrKysrKysrKysrKysrKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2lu dGVybmFscy5oICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1n ci5oICAgICAgICAgICAgICAgICAgfCAgMTIgKy0KIDYgZmlsZXMgY2hhbmdlZCwgNDE5IGlu c2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdf YnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbCBiL2NvbnRyaWIvcGdf YnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbAppbmRleCA2Njc2ZTgw NzAzNC4uZGMyY2UwMTkyODMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUv cGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbAorKysgYi9jb250cmliL3BnX2J1ZmZlcmNh Y2hlL3BnX2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwKQEAgLTIyLDcgKzIyLDEwIEBAIENS RUFURSBWSUVXIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMgQVMKIAkgbnVtX3Bhc3NlcyBi aWdpbnQsCQkJLS0gY2xvY2tzd2VlcCBwYXNzZXMKIAkgbmV4dF9idWZmZXIgaW50ZWdlciwJ CS0tIG5leHQgdmljdGltIGJ1ZmZlciBmb3IgY2xvY2tzd2VlcAogCSB0b3RhbF9hbGxvY3Mg YmlnaW50LAkJLS0gaGFuZGxlZCBhbGxvY3MgKHJ1bm5pbmcgdG90YWwpCi0JIG51bV9hbGxv Y3MgYmlnaW50KTsJCS0tIGhhbmRsZWQgYWxsb2NzIChjdXJyZW50IGN5Y2xlKQorCSBudW1f YWxsb2NzIGJpZ2ludCwJCQktLSBoYW5kbGVkIGFsbG9jcyAoY3VycmVudCBjeWNsZSkKKwkg dG90YWxfcmVxX2FsbG9jcyBiaWdpbnQsCS0tIHJlcXVlc3RlZCBhbGxvY3MgKHJ1bm5pbmcg dG90YWwpCisJIG51bV9yZXFfYWxsb2NzIGJpZ2ludCwJCS0tIGhhbmRsZWQgYWxsb2NzIChj dXJyZW50IGN5Y2xlKQorCSB3ZWlnaHRzIGludFtdKTsJCQktLSBiYWxhbmNpbmcgd2VpZ2h0 cwogCiAtLSBEb24ndCB3YW50IHRoZXNlIHRvIGJlIGF2YWlsYWJsZSB0byBwdWJsaWMuCiBS RVZPS0UgQUxMIE9OIEZVTkNUSU9OIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMoKSBGUk9N IFBVQkxJQzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVy Y2FjaGVfcGFnZXMuYyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVf cGFnZXMuYwppbmRleCBjOWRmYzhhMWI4Mi4uZjY4MzFmNjBiOWUgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYworKysgYi9jb250 cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMKQEAgLTE1LDYgKzE1 LDggQEAKICNpbmNsdWRlICJwb3J0L3BnX251bWEuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1 Zl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgorI2luY2x1ZGUg InV0aWxzL2FycmF5LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRl ICJ1dGlscy9yZWwuaCIKIAogCkBAIC0yNyw3ICsyOSw3IEBACiAjZGVmaW5lIE5VTV9CVUZG RVJDQUNIRV9FVklDVF9BTExfRUxFTSAzCiAKICNkZWZpbmUgTlVNX0JVRkZFUkNBQ0hFX05V TUFfRUxFTQkzCi0jZGVmaW5lIE5VTV9CVUZGRVJDQUNIRV9QQVJUSVRJT05TX0VMRU0JOQor I2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfUEFSVElUSU9OU19FTEVNCTEyCiAKIFBHX01PRFVM RV9NQUdJQ19FWFQoCiAJCQkJCS5uYW1lID0gInBnX2J1ZmZlcmNhY2hlIiwKQEAgLTc5NSw2 ICs3OTcsOCBAQCBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9OX0FSR1Mp CiAKIAlpZiAoU1JGX0lTX0ZJUlNUQ0FMTCgpKQogCXsKKwkJVHlwZUNhY2hlRW50cnkgKnR5 cGVudHJ5ID0gbG9va3VwX3R5cGVfY2FjaGUoSU5UNE9JRCwgMCk7CisKIAkJZnVuY2N0eCA9 IFNSRl9GSVJTVENBTExfSU5JVCgpOwogCiAJCS8qIFN3aXRjaCBjb250ZXh0IHdoZW4gYWxs b2NhdGluZyBzdHVmZiB0byBiZSB1c2VkIGluIGxhdGVyIGNhbGxzICovCkBAIC04MjYsNiAr ODMwLDEyIEBAIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykK IAkJCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKIAkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxl ZGVzYywgKEF0dHJOdW1iZXIpIDksICJudW1fYWxsb2NzIiwKIAkJCQkJCSAgIElOVDhPSUQs IC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIp IDEwLCAidG90YWxfcmVxX2FsbG9jcyIsCisJCQkJCQkgICBJTlQ4T0lELCAtMSwgMCk7CisJ CVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSAxMSwgIm51bV9y ZXFfYWxsb2NzIiwKKwkJCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5p dEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDEyLCAid2VpZ3RocyIsCisJCQkJCQkg ICB0eXBlbnRyeS0+dHlwYXJyYXksIC0xLCAwKTsKIAogCQlmdW5jY3R4LT51c2VyX2ZjdHgg PSBCbGVzc1R1cGxlRGVzYyh0dXBsZWRlc2MpOwogCkBAIC04NDcsMTEgKzg1NywxNyBAQCBw Z19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCWZpcnN0 X2J1ZmZlciwKIAkJCQkJbGFzdF9idWZmZXI7CiAKLQkJdWludDY0CQlidWZmZXJfdG90YWxf YWxsb2NzOworCQl1aW50NjQJCWJ1ZmZlcl90b3RhbF9hbGxvY3MsCisJCQkJCWJ1ZmZlcl90 b3RhbF9yZXFfYWxsb2NzOwogCiAJCXVpbnQzMgkJY29tcGxldGVfcGFzc2VzLAogCQkJCQlu ZXh0X3ZpY3RpbV9idWZmZXIsCi0JCQkJCWJ1ZmZlcl9hbGxvY3M7CisJCQkJCWJ1ZmZlcl9h bGxvY3MsCisJCQkJCWJ1ZmZlcl9yZXFfYWxsb2NzOworCisJCWludAkJICAgKndlaWdodHM7 CisJCURhdHVtCSAgICpkd2VpZ2h0czsKKwkJQXJyYXlUeXBlICAqYXJyYXk7CiAKIAkJRGF0 dW0JCXZhbHVlc1tOVU1fQlVGRkVSQ0FDSEVfUEFSVElUSU9OU19FTEVNXTsKIAkJYm9vbAkJ bnVsbHNbTlVNX0JVRkZFUkNBQ0hFX1BBUlRJVElPTlNfRUxFTV07CkBAIC04NjAsOCArODc2 LDE2IEBAIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKIAkJ CQkJCSAgICZmaXJzdF9idWZmZXIsICZsYXN0X2J1ZmZlcik7CiAKIAkJQ2xvY2tTd2VlcFBh cnRpdGlvbkdldEluZm8oaSwKLQkJCQkJCQkJICAgJmNvbXBsZXRlX3Bhc3NlcywgJm5leHRf dmljdGltX2J1ZmZlciwKLQkJCQkJCQkJICAgJmJ1ZmZlcl90b3RhbF9hbGxvY3MsICZidWZm ZXJfYWxsb2NzKTsKKwkJCQkJCQkJICZjb21wbGV0ZV9wYXNzZXMsICZuZXh0X3ZpY3RpbV9i dWZmZXIsCisJCQkJCQkJCSAmYnVmZmVyX3RvdGFsX2FsbG9jcywgJmJ1ZmZlcl9hbGxvY3Ms CisJCQkJCQkJCSAmYnVmZmVyX3RvdGFsX3JlcV9hbGxvY3MsICZidWZmZXJfcmVxX2FsbG9j cywKKwkJCQkJCQkJICZ3ZWlnaHRzKTsKKworCQlkd2VpZ2h0cyA9IHBhbGxvY19hcnJheShE YXR1bSwgZnVuY2N0eC0+bWF4X2NhbGxzKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBmdW5j Y3R4LT5tYXhfY2FsbHM7IGkrKykKKwkJCWR3ZWlnaHRzW2ldID0gSW50MzJHZXREYXR1bSh3 ZWlnaHRzW2ldKTsKKworCQlhcnJheSA9IGNvbnN0cnVjdF9hcnJheV9idWlsdGluKGR3ZWln aHRzLCBmdW5jY3R4LT5tYXhfY2FsbHMsIElOVDRPSUQpOwogCiAJCXZhbHVlc1swXSA9IElu dDMyR2V0RGF0dW0oaSk7CiAJCW51bGxzWzBdID0gZmFsc2U7CkBAIC04OTAsNiArOTE0LDE1 IEBAIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKIAkJdmFs dWVzWzhdID0gSW50NjRHZXREYXR1bShidWZmZXJfYWxsb2NzKTsKIAkJbnVsbHNbOF0gPSBm YWxzZTsKIAorCQl2YWx1ZXNbOV0gPSBJbnQ2NEdldERhdHVtKGJ1ZmZlcl90b3RhbF9yZXFf YWxsb2NzKTsKKwkJbnVsbHNbOV0gPSBmYWxzZTsKKworCQl2YWx1ZXNbMTBdID0gSW50NjRH ZXREYXR1bShidWZmZXJfcmVxX2FsbG9jcyk7CisJCW51bGxzWzEwXSA9IGZhbHNlOworCisJ CXZhbHVlc1sxMV0gPSBQb2ludGVyR2V0RGF0dW0oYXJyYXkpOworCQludWxsc1sxMV0gPSBm YWxzZTsKKwogCQkvKiBCdWlsZCBhbmQgcmV0dXJuIHRoZSB0dXBsZS4gKi8KIAkJdHVwbGUg PSBoZWFwX2Zvcm1fdHVwbGUoKFR1cGxlRGVzYykgZnVuY2N0eC0+dXNlcl9mY3R4LCB2YWx1 ZXMsIG51bGxzKTsKIAkJcmVzdWx0ID0gSGVhcFR1cGxlR2V0RGF0dW0odHVwbGUpOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCAxMjExMzRiYjk0Yy4uODMxNTEw NTM5NGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5j CisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCkBAIC0zODg0LDYg KzM4ODQsOSBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkK IAkvKiBhc3N1bWUgd2UgY2FuIGhpYmVybmF0ZSwgYW55IHBhcnRpdGlvbiBjYW4gc2V0IHRv IGZhbHNlICovCiAJYm9vbAkJaGliZXJuYXRlID0gdHJ1ZTsKIAorCS8qIHRyaWdnZXIgcGFy dGl0aW9uIHJlYmFsYW5jaW5nIGZpcnN0ICovCisJU3RyYXRlZ3lTeW5jQmFsYW5jZSgpOwor CiAJLyogZ2V0IHRoZSBudW1iZXIgb2YgY2xvY2tzd2VlcCBwYXJ0aXRpb25zLCBhbmQgdG90 YWwgYWxsb2MgY291bnQgKi8KIAlTdHJhdGVneVN5bmNQcmVwYXJlKCZudW1fcGFydGl0aW9u cywgJnJlY2VudF9hbGxvYyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2ZyZWVsaXN0LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlz dC5jCmluZGV4IGQ1ZjhmMjhmNTYyLi4zNDliNjI2ZGIzYiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9mcmVlbGlzdC5jCkBAIC0zNCw2ICszNCwyMyBAQAogI2RlZmluZSBJTlRf QUNDRVNTX09OQ0UodmFyKQkoKGludCkoKigodm9sYXRpbGUgaW50ICopJih2YXIpKSkpCiAK IAorLyoKKyAqIFhYWCBuZWVkZWQgZm9yIG1ha2UgQ2xvY2tTd2VlcCBmaXhlZC1zaXplLCBz aG91bGQgYmUgdGllZCB0byB0aGUgbnVtYmVyCisgKiBvZiBidWZmZXIgcGFydGl0aW9ucyAo YnVmbWdyLmMgYWxyZWFkeSBoYXMgTUFYX0NMT0NLU1dFRVBfUEFSVElUSU9OUywgc28KKyAq IGF0IGxlYXN0IHNldCBpdCB0byB0aGUgc2FtZSB2YWx1ZSkuCisgKi8KKyNkZWZpbmUgTUFY X0JVRkZFUl9QQVJUSVRJT05TCQkzMgorCisvKgorICogQ29lZmZpY2llbnQgdXNlZCB0byBj b21iaW5lIHRoZSBvbGQgYW5kIG5ldyBiYWxhbmNlIGNvZWZmaWNpZW50cywgdXNpbmcKKyAq IHdlaWdodGVkIGF2ZXJhZ2UuIFRoZSBoaWdoZXIgdGhlIHZhbHVlLCB0aGUgbW9yZSB0aGUg b2xkIHZhbHVlIGFmZmVjdHMgdGhlCisgKiByZXN1bHQuCisgKgorICogWFhYIERvZXNuJ3Qg dGhpcyBpbnZhbGlkYXRlIHRoZSBpbnRlcnByZXRhdGlvbiBhcyBhIHByb2JhYmlsaXR5IHRv IGFsbG9jYXRlCisgKiBmcm9tIGEgZ2l2ZW4gcGFydGl0aW9uPyBEb2VzIGl0IHN0aWxsIHN1 bSB0byAxMDAlPworICovCisjZGVmaW5lIENMT0NLU1dFRVBfSElTVE9SWV9DT0VGRgkwLjUK KwogLyoKICAqIEluZm9ybWF0aW9uIGFib3V0IG9uZSBwYXJ0aXRpb24gb2YgdGhlIENsb2Nr U3dlZXAgKG9uIGEgc3Vic2V0IG9mIGJ1ZmZlcnMpLgogICoKQEAgLTY2LDkgKzgzLDI4IEBA IHR5cGVkZWYgc3RydWN0CiAJdWludDMyCQljb21wbGV0ZVBhc3NlczsgLyogQ29tcGxldGUg Y3ljbGVzIG9mIHRoZSBjbG9jay1zd2VlcCAqLwogCXBnX2F0b21pY191aW50MzIgbnVtQnVm ZmVyQWxsb2NzOwkvKiBCdWZmZXJzIGFsbG9jYXRlZCBzaW5jZSBsYXN0IHJlc2V0ICovCiAK KwkvKgorCSAqIEJ1ZmZlcnMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBpbiB0 aGlzIHBhcnRpdGlvbiAoYnV0IG1pZ2h0CisJICogaGF2ZSBiZWVuIHJlZGlyZWN0ZWQgdG8g a2VlcCBhbGxvY2F0aW9ucyBiYWxhbmNlZCkuCisJICovCisJcGdfYXRvbWljX3VpbnQzMiBu dW1SZXF1ZXN0ZWRBbGxvY3M7CisKIAkvKiBydW5uaW5nIHRvdGFsIG9mIGFsbG9jcyAqLwog CXBnX2F0b21pY191aW50NjQgbnVtVG90YWxBbGxvY3M7CisJcGdfYXRvbWljX3VpbnQ2NCBu dW1Ub3RhbFJlcXVlc3RlZEFsbG9jczsKIAorCS8qCisJICogV2VpZ2h0cyB0byBiYWxhbmNl IGJ1ZmZlciBhbGxvY2F0aW9ucyBmb3IgYWxsIHRoZSBwYXJ0aXRpb25zLiBFYWNoCisJICog cGFydGl0aW9uIGdldHMgYSB2ZWN0b3Igb2Ygd2VpZ2h0cyAwLTEwMCwgZGV0ZXJtaW5pbmcg d2hhdCBmcmFjdGlvbgorCSAqIG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUgZnJvbSB0aGF0IHBh cnRpY3VsYXIuIFNvIFs3NSwgMTUsIDUsIDVdIHdvdWxkCisJICogbWVhbiA3NSUgYWxsb2Nh dGlvbnMgc2hvdWxkIGdvIGZyb20gcGFydGl0aW9uIDAsIDE1JSBmcm9tIHBhcnRpdGlvbgor CSAqIDEsIGFuZCA1JSBmcm9tIHBhcnRpdGlvbnMgMiYzLiBFYWNoIHBhcnRpdGlvbiBnZXRz IGEgZGlmZmVyZW50IHZlY3RvcgorCSAqIG9mIHdlaWdodHMuCisJICoKKwkgKiBYWFggQWxs b2NhdGUgYSBmaXhlZC1sZW5ndGggYXJyYXksIHRvIHNpbXBsaWZ5IHdvcmtpbmcgd2l0aCBh cnJheSBvZgorCSAqIHRoZSBzdHJ1Y3RzLCBldGMuCisJICovCisJdWludDgJCWJhbGFuY2Vb TUFYX0JVRkZFUl9QQVJUSVRJT05TXTsKIH0gQ2xvY2tTd2VlcDsKIAogLyoKQEAgLTEzMiw3 ICsxNjgsMzMgQEAgc3RhdGljIEJ1ZmZlckRlc2MgKkdldEJ1ZmZlckZyb21SaW5nKEJ1ZmZl ckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJCQkJCQkJIHVpbnQzMiAqYnVmX3N0YXRl KTsKIHN0YXRpYyB2b2lkIEFkZEJ1ZmZlclRvUmluZyhCdWZmZXJBY2Nlc3NTdHJhdGVneSBz dHJhdGVneSwKIAkJCQkJCQlCdWZmZXJEZXNjICpidWYpOwotc3RhdGljIENsb2NrU3dlZXAg KkNob29zZUNsb2NrU3dlZXAodm9pZCk7CitzdGF0aWMgQ2xvY2tTd2VlcCAqQ2hvb3NlQ2xv Y2tTd2VlcChib29sIGJhbGFuY2UpOworCisvKgorICogY2xvY2tzd2VlcCBhbGxvY2F0aW9u IGJhbGFuY2luZworICoKKyAqIFRvIGJhbGFuY2UgYWxsb2NhdGlvbnMgZnJvbSBjbG9ja3N3 ZWVwIHBhcnRpdGlvbnMsIGVhY2ggcGFydGl0aW9uIGdldHMKKyAqIGEgc2V0IG9mICJ3ZWln aHRzIiBkZXRlcm1pbmluZyB0aGUgZnJhY3Rpb24gb2YgYWxsb2NhdGlvbnMgdG8gcmVkaXJl Y3QKKyAqIHRvIG90aGVyIHBhcnRpdGlvbnMuCisgKgorICogV2UgY291bGQgZG8gdGhhdCBi YXNlZCBvbiBhIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLCBidXQgdGhhdCBzZWVtcyB0b28K KyAqIGV4cGVuc2l2ZS4gU28gaW5zdGVhZCB3ZSBzaW1wbHkgdHJlYXQgdGhlIHByb2JhYmls aXRpZXMgYXMgYSBidWRnZXQsIGkuZS4KKyAqIGEgbnVtYmVyIG9mIGFsbG9jYXRpb25zIHRv IHNlcnZlIGZyb20gdGhhdCBwYXJ0aXRpb24sIGJlZm9yZSBtb3ZpbmcgdG8KKyAqIHRoZSBu ZXh0IHBhcnRpdGlvbiAoaW4gYSByb3VuZC1yb2JpbiBtYW5uZXIpLgorICoKKyAqIFRoaXMg aXMgdmVyeSBzaW1wbGUvY2hlYXAsIGFuZCBvdmVyIG1hbnkgYWxsb2NhdGlvbnMgaXQgaGFz IHRoZSBzYW1lCisgKiBlZmZlY3QuIEZvciBwZXJpb2RzIG9mIGxvdyBhY3Rpdml0eSBpdCBt YXkgZGl2ZXJnZSwgYnV0IHRoYXQgZG9lcyBub3QKKyAqIG1hdHRlciBtdWNoICh3ZSBjYXJl IGFib3V0IGhpZ2gtYWN0aXZpdHkgcGVyaW9kcyBtdWNoIG1vcmUpLgorICoKKyAqIFdlIGlu dGVudGlvbmFsbHkga2VlcCB0aGUgImJ1ZGdldCIgZmFpcmx5IGxvdywgd2l0aCB0aGUgc3Vt IGZvciBhIGdpdmVuCisgKiBwYXJ0aXRpb24gMTAwLiBUaGF0IG1lYW5zIHdlIGdldCB0byB0 aGUgc2FtZSBwYXJ0aXRpb24gYWZ0ZXIgb25seSAxMDAKKyAqIGFsbG9jYXRpb25zLCBrZWVw aW5nIGl0IG1vcmUgYmFsYW5jZXMuIEl0IHdvdWxkbid0IGJlIGhhcmQgdG8gbWFrZSB0aGUK KyAqIGJ1ZGdldHMgaGlnaGVyIChzYXksIHRvIG1hdGNoIHRoZSBleHBlY3RlZCBudW1iZXIg b2YgYWxsb2NhdGlvbnMsIGkuZS4KKyAqIGFib3V0IHRoZSBhdmVyYWdlIG51bWJlciBvZiBh bGxvY2F0aW9ucyBmcm9tIHRoZSBwYXN0IGludGVydmFsKS4KKyAqLworc3RhdGljIGludCBj bG9ja3N3ZWVwX3BhcnRpdGlvbl9vcHRpbWFsID0gLTE7CitzdGF0aWMgaW50IGNsb2Nrc3dl ZXBfcGFydGl0aW9uID0gLTE7CitzdGF0aWMgaW50IGNsb2Nrc3dlZXBfY291bnQgPSAwOwog CiAvKgogICogQ2xvY2tTd2VlcFRpY2sgLSBIZWxwZXIgcm91dGluZSBmb3IgU3RyYXRlZ3lH ZXRCdWZmZXIoKQpAQCAtMTQ0LDcgKzIwNiw3IEBAIHN0YXRpYyBpbmxpbmUgdWludDMyCiBD bG9ja1N3ZWVwVGljayh2b2lkKQogewogCXVpbnQzMgkJdmljdGltOwotCUNsb2NrU3dlZXAg KnN3ZWVwID0gQ2hvb3NlQ2xvY2tTd2VlcCgpOworCUNsb2NrU3dlZXAgKnN3ZWVwID0gQ2hv b3NlQ2xvY2tTd2VlcCh0cnVlKTsKIAogCS8qCiAJICogQXRvbWljYWxseSBtb3ZlIGhhbmQg YWhlYWQgb25lIGJ1ZmZlciAtIGlmIHRoZXJlJ3Mgc2V2ZXJhbCBwcm9jZXNzZXMKQEAgLTI5 MSwxMSArMzUzLDU5IEBAIGNhbGN1bGF0ZV9wYXJ0aXRpb25faW5kZXgodm9pZCkKICAqIGFu ZCB0aGF0J3MgY2hlYXBlci4gQnV0IGhvdyB3b3VsZCB0aGF0IGRlYWwgd2l0aCBvZGQgbnVt YmVyIG9mIG5vZGVzPwogICovCiBzdGF0aWMgQ2xvY2tTd2VlcCAqCi1DaG9vc2VDbG9ja1N3 ZWVwKHZvaWQpCitDaG9vc2VDbG9ja1N3ZWVwKGJvb2wgYmFsYW5jZSkKIHsKLQlpbnQJCQlp bmRleCA9IGNhbGN1bGF0ZV9wYXJ0aXRpb25faW5kZXgoKTsKKwkvKiBXaGF0J3MgdGhlICJv cHRpbWFsIiBwYXJ0aXRpb24/ICovCisJaW50CQlpbmRleCA9IGNhbGN1bGF0ZV9wYXJ0aXRp b25faW5kZXgoKTsKKwlDbG9ja1N3ZWVwICpzd2VlcCA9ICZTdHJhdGVneUNvbnRyb2wtPnN3 ZWVwc1tpbmRleF07CisKKwkvKgorCSAqIERpZCB3ZSBtaWdyYXRlIHRvIGEgZGlmZmVyZW50 IGNvcmUgLyBOVU1BIG5vZGUsIGFmZmVjdGluZyB0aGUKKwkgKiBjbG9ja3N3ZWVwIHBhcnRp dGlvbiB3ZSBzaG91bGQgdXNlPyBTd2l0Y2ggdG8gdGhhdCBwYXJ0aXRpb24uCisJICovCisJ aWYgKGNsb2Nrc3dlZXBfcGFydGl0aW9uX29wdGltYWwgIT0gaW5kZXgpCisJeworCQljbG9j a3N3ZWVwX3BhcnRpdGlvbl9vcHRpbWFsID0gaW5kZXg7CisJCWNsb2Nrc3dlZXBfcGFydGl0 aW9uID0gaW5kZXg7CisJCWNsb2Nrc3dlZXBfY291bnQgPSBzd2VlcC0+YmFsYW5jZVtpbmRl eF07CisJfQorCisJLyogd2Ugc2hvdWxkIGhhdmUgYSB2YWxpZCBwYXJ0aXRpb24gKi8KKwlB c3NlcnQoY2xvY2tzd2VlcF9wYXJ0aXRpb25fb3B0aW1hbCAhPSAtMSk7CisJQXNzZXJ0KGNs b2Nrc3dlZXBfcGFydGl0aW9uICE9IC0xKTsKKworCS8qCisJICogSWYgcmViYWxhbmNpbmcg aXMgZW5hYmxlZCwgdXNlIHRoZSB3ZWlnaHRzIHRvIHJlZGlyZWN0IHRoZSBhbGxvY2F0aW9u cworCSAqIHRvIG1hdGNoIHRoZSBkZXNpcmVkIGRpc3RyaWJ1dGlvbi4gV2UgZG8gdGhhdCBi eSB1c2luZyB0aGUgcGFydGl0aW9ucworCSAqIGluIGEgcm91bmQtcm9iaW4gd2F5LCBhZnRl ciBhbGxvY2F0aW5nIHRoZSAid2VpZ2h0IiBvZiBhbGxvY2F0aW9ucworCSAqIGZyb20gZWFj aCBwYXJ0aXRpb25zLgorCSAqLworCWlmIChiYWxhbmNlKQorCXsKKwkJLyoKKwkJICogUmFu IG91dCBvZiBhbGxvY2F0aW9ucyBmcm9tIHRoZSBjdXJyZW50IHBhcnRpdGlvbj8gTW92ZSB0 byB0aGUKKwkJICogbmV4dCBwYXJ0aXRpb24gd2l0aCBub24temVybyB3ZWlnaHQsIGFuZCB1 c2UgdGhlIHdlaWdodCBhcyBhCisJCSAqIGJ1ZGdldCBmb3IgYWxsb2NhdGlvbnMuCisJCSAq LworCQl3aGlsZSAoY2xvY2tzd2VlcF9jb3VudCA9PSAwKQorCQl7CisJCQljbG9ja3N3ZWVw X3BhcnRpdGlvbgorCQkJCT0gKGNsb2Nrc3dlZXBfcGFydGl0aW9uICsgMSkgJSBTdHJhdGVn eUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zOworCisJCQlBc3NlcnQoKGNsb2Nrc3dlZXBfcGFy dGl0aW9uID49IDApICYmCisJCQkJICAgKGNsb2Nrc3dlZXBfcGFydGl0aW9uIDwgU3RyYXRl Z3lDb250cm9sLT5udW1fcGFydGl0aW9ucykpOworCisJCQljbG9ja3N3ZWVwX2NvdW50ID0g c3dlZXAtPmJhbGFuY2VbY2xvY2tzd2VlcF9wYXJ0aXRpb25dOworCQl9CiAKLQlyZXR1cm4g JlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2luZGV4XTsKKwkJLyogYWNjb3VudCBmb3IgdGhl IGFsbG9jYXRpb24gLSB0YWtlIGl0IGZyb20gdGhlIGJ1ZGdldCAqLworCQktLWNsb2Nrc3dl ZXBfY291bnQ7CisKKwkJLyogYWNjb3VudCBmb3IgdGhlIGFsbG9jIGluIHRoZSAib3B0aW1h bCIgKG9yaWdpbmFsKSBwYXJ0aXRpb24gKi8KKwkJcGdfYXRvbWljX2ZldGNoX2FkZF91MzIo JnN3ZWVwLT5udW1SZXF1ZXN0ZWRBbGxvY3MsIDEpOworCX0KKworCXJldHVybiAmU3RyYXRl Z3lDb250cm9sLT5zd2VlcHNbY2xvY2tzd2VlcF9wYXJ0aXRpb25dOwogfQogCiAvKgpAQCAt MzY1LDcgKzQ3NSw3IEBAIFN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5 IHN0cmF0ZWd5LCB1aW50MzIgKmJ1Zl9zdGF0ZSwgYm9vbCAqZnJvbV9yCiAJICogdGhlIHJh dGUgb2YgYnVmZmVyIGNvbnN1bXB0aW9uLiAgTm90ZSB0aGF0IGJ1ZmZlcnMgcmVjeWNsZWQg YnkgYQogCSAqIHN0cmF0ZWd5IG9iamVjdCBhcmUgaW50ZW50aW9uYWxseSBub3QgY291bnRl ZCBoZXJlLgogCSAqLwotCXBnX2F0b21pY19mZXRjaF9hZGRfdTMyKCZDaG9vc2VDbG9ja1N3 ZWVwKCktPm51bUJ1ZmZlckFsbG9jcywgMSk7CisJcGdfYXRvbWljX2ZldGNoX2FkZF91MzIo JkNob29zZUNsb2NrU3dlZXAoZmFsc2UpLT5udW1CdWZmZXJBbGxvY3MsIDEpOwogCiAJLyoK IAkgKiBVc2UgdGhlICJjbG9jayBzd2VlcCIgYWxnb3JpdGhtIHRvIGZpbmQgYSBmcmVlIGJ1 ZmZlcgpAQCAtNDM4LDYgKzU0OCwyMjQgQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNj ZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQzMiAqYnVmX3N0YXRlLCBib29sICpmcm9tX3IK IAl9CiB9CiAKKy8qCisgKiBTdHJhdGVneVN5bmNCYWxhbmNlCisgKgkJdXBkYXRlIHBhcnRp dGlvbiB3ZWlnaHRzLCB0byBiYWxhbmNlIHRoZSBidWZmZXIgYWxsb2NhdGlvbnMKKyAqCisg KiBXZSB3YW50IHRvIGdpdmUgcHJlZmVyZW5jZSB0byBhbGxvY2F0aW5nIGJ1ZmZlcnMgb24g dGhlIHNhbWUgTlVNQSBub2RlLAorICogYnV0IHRoYXQgbWlnaHQgbGVhZCB0byBpbWJhbGFu Y2UgLSBhIHNpbmdsZSBwcm9jZXNzIHdvdWxkIG9ubHkgdXNlIGEKKyAqIGZyYWN0aW9uIG9m IHNoYXJlZCBidWZmZXJzLiBXZSBkb24ndCB3YW50IHRoYXQsIHdlIHdhbnQgdG8gdXRpbGl6 ZSB0aGUKKyAqIHdob2xlIHNoYXJlZCBidWZmZXJzLiBUaGUgbnVtYmVyIG9mIGFsbG9jYXRp b25zIGluIGVhY2ggcGFydGl0aW9uIG1heQorICogYWxzbyBjaGFuZ2Ugb3ZlciB0aW1lLCBz byB3ZSBuZWVkIHRvIGFkYXB0IHRvIHRoYXQuCisgKgorICogVG8gYWxsb3cgdGhpcyAiYWRh cHRpdmUgYmFsYW5jaW5nIiwgZWFjaCBwYXJ0aXRpb24gaGFzIGEgc2V0IG9mIHdlaWdodHMs CisgKiBkZXRlcm1pbmluZyB3aGF0IGZyYWN0aW9uIG9mIGFsbG9jYXRpb25zIHRvIGRpcmVj dCB0byBvdGhlciBwYXJ0aXRpb25zLgorICogRm9yIHNpbXBsaWNpdHkgdGhlIGNvZWZmaWNp ZW50cyBhcmUgaW50ZWdlcnMgMC0xMDAsIGV4cHJlc3NpbmcgdGhlCisgKiBwZXJjZW50YWdl IG9mIGFsbG9jYXRpb25zIHJlZGlyZWN0ZWQgdG8gdGhhdCBwYXJ0aXRpb24uCisgKgorICog Q29uc2lkZXIgZm9yIGV4YW1wbGUgd2VpZ2h0cyBbNTAsIDI1LCAyNSwgMF0gZm9yIG9uZSBv ZiA0IHBhcnRpdGlvbnMuCisgKiBUaGlzIG1lYW5zIDUwJSBvZiBhbGxvY2F0aW9ucyB3aWxs IGJlIHJlZGlyZWN0ZWQgdG8gcGFydGl0aW9uIDAsIDI1JQorICogdG8gcGFydGl0aW9ucyAx IGFuZCAyLCBhbmQgbm8gYWxsb2NhdGlvbnMgd2lsbCBnbyB0byBwYXJ0aXRpb24gMy4KKyAq CisgKiBUbyBjYWxjdWxhdGUgdGhlc2Ugd2VpZ2h0cywgYXNzdW1lIHdlIGtub3cgdGhlIG51 bWJlciBvZiBhbGxvY2F0aW9ucworICogcmVxdWVzdGVkIGZvciBlYWNoIHBhcnRpdGlvbiBp biB0aGUgcGFzdCBpbnRlcnZhbC4gV2UgY2FuIHVzZSB0aGlzIHRvCisgKiBjYWxjdWxhdGUg d2VpZ2h0cyBmb3IgdGhlIGZvbGxvd2luZyBpbnRlcnZhbCwgYWltaW5nIHRvIGFsbG9jYXRl IHRoZQorICogc2FtZSAoZmFpciBzaGFyZSkgbnVtYmVyIG9mIGJ1ZmZlcnMgZnJvbSBlYWNo IHBhcnRpdGlvbi4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGJhc2VkIG9uIG51bWJlciBvZiBh bGxvY2F0aW9ucyAib3JpZ2luYXRpbmciIGluIGEgZ2l2ZW4KKyAqIHBhcnRpdGlvbi4gSWYg YW4gYWxsb2NhdGlvbiBpcyByZXF1ZXN0ZWQgaW4gYSBwYXJ0aXRpb24gQSwgaXQncyBjb3Vu dGVkCisgKiBhcyBhbGxvY2F0aW9uIGZvciBBLCBldmVuIGlmIGl0IGdldHMgcmVkaXJlY3Rl ZCB0byBzb21lIG90aGVyIHBhcnRpdGlvbi4KKyAqIFRoZSBwYXRjaCBhZGRlcyBhIG5ldyBj b3VudGVyIHRvIHRyYWNrIHRoaXMuCisgKgorICogVGhlIG1haW4gb2JzZXJ2YXRpb24gaXMg dGhhdCBwYXJ0aXRpb25zIGdldCBkaXZpZGVkIGludG8gdHdvIGdyb3VwcywKKyAqIGRlcGVu ZGluZyBvbiB3aGV0aGVyIHRoZSBudW1iZXIgYWxsb2NhdGlvbnMgaXMgaGlnaGVyIG9yIGxv d2VyIHRoYW4gdGhlCisgKiB0YXJnZXQgYXZlcmFnZS4gQnV0IHRoZSAidG90YWwgZGVsdGEi IGZvciB0aGVzZSB0d28gZ3JvdXBzIGlzIHRoZQorICogc2FtZSwgaS5lLiBzdW0oYWJzKGFs bG9jcyAtIGF2Z19hbGxvY3MpKSBpcyB0aGUgc2FtZS4gVGhlcmVmb3JlLCB0aGUKKyAqIHRh c2sgaXMgdG8gImRpc3RyaWJ1dGUiIHRoZSBleGNlc3MgYWxsb2NhdGlvbnMgYmV0d2VlbiB0 aGUgcGFydGl0aW9ucworICogd2l0aCBub3QgZW5vdWdoIGFsbG9jYXRpb25zLgorICoKKyAq IFBhcnRpdGlvbnMgd2l0aCAobmFsbG9jcyA8IGF2Z19uYWxsb2NzKSBkb24ndCByZWRpcmVj dCBhbnkgYWxsb2NhdGlvbnMuCisgKgorICogUGFydGl0aW9ucyB3aXRoIChuYWxsb2NzID4g YXZnX25hbGxvY3MpIHJlZGlyZWN0IHRoZSBleHRyYSBhbGxvY2F0aW9ucywKKyAqIHdpdGgg ZWFjaCB0YXJnZXQgYWxsb2NhdGlvbiBnZXR0aW5nIGEgcHJvcG9ydGlvbmFsIHBhcnQgKHdp dGggcmVzcGVjdAorICogdG8gdGhlIHRvdGFsIGRlbHRhKS4KKyAqCisgKiBYWFggSW4gcHJp bmNpcGxlIHdlIG1pZ2h0IGRvIHdpdGhvdXQgdGhlIG5ldyAicmVxdWVzdGVkQWxsb2NzIiBj b3VudGVyLAorICogYnV0IHdlJ2QgbmVlZCB0byBzb2x2ZSB0aGUgbWF0cml4IGVxdWF0aW9u IEF4PWIsIHdpdGggW0EsYl0ga25vd24KKyAqICh3ZWlnaHRzIGFuZCBhbGxvY3MpLCBhbmQg Y2FsY3VsYXRlIHggKHJlcXVlc3RlZCBhbGxvY3MpLiBCdXQgaXQncyBub3QKKyAqIHF1aXRl IGNsZWFyIHRoaXMnZCBhbHdheXMgaGF2ZSBhIHNvbHV0aW9uLgorICovCit2b2lkCitTdHJh dGVneVN5bmNCYWxhbmNlKHZvaWQpCit7CisJLyogc25hcHNob3Qgb2YgYWxsb2NzIGZvciBw YXJ0aXRpb25zICovCisJdWludDMyCWFsbG9jc1tNQVhfQlVGRkVSX1BBUlRJVElPTlNdOwor CisJdWludDMyCXRvdGFsX2FsbG9jcyA9IDAsCS8qIHRvdGFsIG51bWJlciBvZiBhbGxvY2F0 aW9ucyAqLworCQkJYXZnX2FsbG9jcywJCQkvKiBhdmVyYWdlIGFsbG9jYXRpb25zIChwZXIg cGFydGl0aW9uKSAqLworCQkJZGVsdGFfYWxsb2NzID0gMDsJLyogc3VtIG9mIGFsbG9jcyBh Ym92ZSBhdmVyYWdlICovCisKKwkvKgorCSAqIENvbGxlY3QgdGhlIG51bWJlciBvZiBhbGxv Y2F0aW9ucyByZXF1ZXN0ZWQgaW4gdGhlIHBhc3QgaW50ZXJ2YWwuCisJICogV2hpbGUgYXQg aXQsIHJlc2V0IHRoZSBjb3VudGVyIHRvIHN0YXJ0IHRoZSBuZXcgaW50ZXJ2YWwuCisJICoK KwkgKiBXZSBsb2NrIHRoZSBwYXJ0aXRpb25zIG9uZSBieSBvbmUsIHNvIHRoaXMgaXMgbm90 IGV4YWN0bHkgY29uc2lzdGVudAorCSAqIHNuYXBzaG90IG9mIHRoZSBjb3VudHMsIGFuZCB0 aGUgcmVzZXRzIGhhcHBlbiBiZWZvcmUgd2UgdXBkYXRlIHRoZQorCSAqIHdlaWdodHMgdG9v LiBCdXQgd2UncmUgb25seSBsb29raW5nIGZvciBoZXVyaXN0aWNzIGFueXdheSwgc28gdGhp cworCSAqIHNob3VsZCBiZSBnb29kIGVub3VnaC4KKwkgKgorCSAqIEEgc2ltaWxhciBpc3N1 ZSBhcHBsaWVzIHRvIHRoZSBjb3VudGVyIHJlc2V0IC0gd2UgaGF2ZW4ndCB1cGRhdGVkCisJ ICogdGhlIHdlaWdodHMgeWV0LiBTaG91bGQgYmUgZmluZSwgd2UnbGwgc2ltcGx5IGNvbnNp ZGVyIHRoaXMgaW4gdGhlCisJICogbmV4dCBiYWxhbmNpbmcgY3ljbGUuCisJICoKKwkgKiBY WFggRG9lcyB0aGlzIG5lZWQgdG8gd29ycnkgYWJvdXQgdGhlIGNvbXBsZXRlUGFzc2VzIHRv bz8KKwkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3Bh cnRpdGlvbnM7IGkrKykKKwl7CisJCUNsb2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5Q29u dHJvbC0+c3dlZXBzW2ldOworCisJCS8qIG5vIG5lZWQgZm9yIGEgc3BpbmxvY2sgKi8KKwkJ YWxsb2NzW2ldID0gcGdfYXRvbWljX2V4Y2hhbmdlX3UzMigmc3dlZXAtPm51bVJlcXVlc3Rl ZEFsbG9jcywgMCk7CisKKwkJLyogYWRkIHRoZSBhbGxvY3MgdG8gcnVubmluZyB0b3RhbCAq LworCQlwZ19hdG9taWNfZmV0Y2hfYWRkX3U2NCgmc3dlZXAtPm51bVRvdGFsUmVxdWVzdGVk QWxsb2NzLCBhbGxvY3NbaV0pOworCisJCXRvdGFsX2FsbG9jcyArPSBhbGxvY3NbaV07CisJ fQorCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlICJmYWlyIHNoYXJlIiBvZiBhbGxvY2F0aW9u cyBwZXIgcGFydGl0aW9uLgorCSAqCisJICogWFhYIFRoZSBsYXN0IHBhcnRpdGlvbiBjb3Vs ZCBiZSBzbWFsbGVyLCBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBiZQorCSAqIGV4cGVjdGVk IHRvIGhhbmRsZSBmZXdlciBhbGxvY2F0aW9ucy4gU28gdGhpcyBzaG91bGQgYmUgYSB3ZWln aHRlZAorCSAqIGF2ZXJhZ2UuIEJ1dCBmb3Igbm93IGEgc2ltcGxlIGF2ZXJhZ2UgaXMgZ29v ZCBlbm91Z2guCisJICovCisJYXZnX2FsbG9jcyA9ICh0b3RhbF9hbGxvY3MgLyBTdHJhdGVn eUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zKTsKKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSAi ZGVsdGEiIGZyb20gYmFsYW5jZWQgc3RhdGUsIGkuZS4gaG93IG1hbnkgYWxsb2NhdGlvbnMK KwkgKiB3ZSdkIG5lZWQgdG8gcmVkaXN0cmlidXRlLgorCSAqLworCWZvciAoaW50IGkgPSAw OyBpIDwgU3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9uczsgaSsrKQorCXsKKwkJaWYg KGFsbG9jc1tpXSA+IGF2Z19hbGxvY3MpCisJCQlkZWx0YV9hbGxvY3MgKz0gKGFsbG9jc1tp XSAtIGF2Z19hbGxvY3MpOworCX0KKworCS8qCisJICogU2tpcCB0aGUgcmViYWxhbmNpbmcg d2hlbiB0aGVyZSdzIG5vdCBlbm91Z2ggYWN0aXZpdHkuIEluIHRoaXMgY2FzZQorCSAqIHdl IGp1c3Qga2VlcCB0aGUgY3VycmVudCB3ZWlnaHRzLgorCSAqCisJICogWFhYIFRoZSB0aHJl c2hvbGQgb2YgMTAwIGFsbG9jYXRpb24gaXMgcHJldHR5IGFyYml0cmFyeS4KKwkgKgorCSAq IFhYWCBNYXliZSBhIGJldHRlciBzdHJhdGVneSB3b3VsZCBiZSB0byBzbG93bHkgcmV0dXJu IHRvIHRoZSBkZWZhdWx0CisJICogd2VpZ2h0cywgd2l0aCBlYWNoIHBhcnRpdGlvbiBhbGxv Y2F0aW9uIG9ubHkgZnJvbSBpdHNlbGY/CisJICoKKwkgKiBYWFggTWF5YmUgd2Ugc2hvdWxk bid0IGV2ZW4gcmVzZXQgdGhlIGNvdW50ZXJzIGluIHRoaXMgY2FzZT8gQnV0IGl0CisJICog c2hvdWxkIG5vdCBtYXR0ZXIsIGlmIHRoZSBhY3Rpdml0eSBpcyBsb3cuCisJICovCisJaWYg KGF2Z19hbGxvY3MgPCAxMDApCisJeworCQllbG9nKExPRywgInJlYmFsYW5jZSBza2lwcGVk OiBub3QgZW5vdWdoIGFsbG9jYXRpb25zIChhbGxvY3M6ICV1KSIsCisJCQkgYXZnX2FsbG9j cyk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIExpa2V3aXNlLCBza2lwIHJlYmFsYW5j aW5nIGlmIHRoZSBtaXNiYWxhbmNlIGlzIG5vdCBzaWduaWZpY2FudC4gV2UKKwkgKiBjb25z aWRlciBpdCBhY2NlcHRhYmxlIGlmIHRoZSBhbW91bnQgb2YgYWxsb2NhdGlvbnMgd2UnZCBu ZWVkIHRvCisJICogcmVkaXN0cmlidXRlIGlzIGxlc3MgdGhhbiAxMCUgb2YgdGhlIGF2ZXJh Z2UuCisJICoKKwkgKiBYWFggQWdhaW4sIHRoZXNlIHRocmVzaG9sZCBhcmUgcmF0aGVyIGFy Yml0cmFyeS4KKwkgKi8KKwlpZiAoZGVsdGFfYWxsb2NzIDwgKGF2Z19hbGxvY3MgKiAwLjEp KQorCXsKKwkJZWxvZyhMT0csICJyZWJhbGFuY2Ugc2tpcHBlZDogZGVsdGEgd2l0aGluIGxp bWl0IChkZWx0YTogJXUsIHRocmVzaG9sZDogJXUpIiwKKwkJCSBkZWx0YV9hbGxvY3MsICh1 aW50MzIpIChhdmdfYWxsb2NzICogMC4xKSk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAq IEdvdCB0byBkbyB0aGUgcmViYWxhbmNpbmcuIEdvIHRocm91Z2ggdGhlIHBhcnRpdGlvbnMs IGFuZCBmb3IgZWFjaAorCSAqIHBhcnRpdGlvbiBkZWNpZGUgaWYgaXQgZ2V0cyB0byByZWRp cmVjdCBvciByZWNlaXZlIGFsbG9jYXRpb25zLgorCSAqCisJICogSWYgYSBwYXJ0aXRpb24g aGFzIGZld2VyIHRoYW4gYXZlcmFnZSBhbGxvY2F0aW9ucywgaXQgd29uJ3QgcmVkaXJlY3QK KwkgKiBhbnkgYWxsb2NhdGlvbnMgdG8gb3RoZXIgcGFydGl0aW9ucy4gU28gaXQgb25seSBo YXMgYSBzaW5nbGUgbm9uLXplcm8KKwkgKiB3ZWlnaHQsIGFuZCB0aGF0J3MgZm9yIGl0c2Vs Zi4KKwkgKgorCSAqIElmIGEgcGFydHRpb24gaGFzIG1vcmUgdGhhbiBhdmVyYWdlIGFsbG9j YXRpb25zLCBpdCB3b24ndCByZWNlaXZlCisJICogYW55IHJlZGlyZWN0ZWQgYWxsb2NhdGlv bnMuIEluc3RlYWQsIHRoZSBleGNlc3MgYWxsb2NhdGlvbnMgYXJlCisJICogcmVkaXJlY3Rl ZCB0byB0aGUgb3RoZXIgcGFydGl0aW9ucy4KKwkgKgorCSAqIFRoZSByZWRpc3RyaWJ1dGlv biBpcyAicHJvcG9ydGlvbmFsIiAtIGlmIHRoZSBleGNlc3MgYWxsb2NhdGlvbnMgb2YKKwkg KiBhIHBhcnRpdGlvbiByZXByZXNlbnQgMTAlIG9mIHRoZSAiZGVsdGEiLCB0aGVuIGVhY2gg cGFydGl0aW9uIHRoYXQKKwkgKiBuZWVkcyBtb3JlIGFsbG9jYXRpb25zIHdpbGwgZ2V0IDEw JSBvZiB0aGUgZ2FwIGZyb20gdGhpcyBvbmUuCisJICoKKwkgKiBYWFggV2Ugc2hvdWxkIGFk ZCBoeXN0ZXJlc2lzLCB0byAiZGFtcGVuIiB0aGUgY2hhbmdlcywgYW5kIG1ha2UKKwkgKiBz dXJlIGl0IGRvZXMgbm90IG9zY2lsbGF0ZSB0b28gbXVjaC4KKwkgKgorCSAqIFhYWCBJZGVh bGx5LCB0aGUgYWx0ZXJuYXRpdmUgcGFydGl0aW9ucyB0byB1c2UgZmlyc3Qgd291bGQgYmUg dGhlCisJICogb3RoZXIgcGFydGl0aW9ucyBmb3IgdGhlIHNhbWUgbm9kZSAoaWYgYW55KS4K KwkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRp dGlvbnM7IGkrKykKKwl7CisJCUNsb2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5Q29udHJv bC0+c3dlZXBzW2ldOworCQl1aW50OAkJYmFsYW5jZVtNQVhfQlVGRkVSX1BBUlRJVElPTlNd OworCisJCS8qIGxvY2ssIHdlJ3JlIGdvaW5nIHRvIG1vZGlmeSB0aGUgYmFsYW5jZSB3ZWln aHRzICovCisJCVNwaW5Mb2NrQWNxdWlyZSgmc3dlZXAtPmNsb2NrX3N3ZWVwX2xvY2spOwor CisJCS8qIHJlc2V0IHRoZSB3ZWlnaHRzIHRvIHN0YXJ0IGZyb20gc2NyYXRjaCAqLworCQlt ZW1zZXQoYmFsYW5jZSwgMCwgc2l6ZW9mKHVpbnQ4KSAqIE1BWF9CVUZGRVJfUEFSVElUSU9O Uyk7CisKKwkJLyogZG9lcyB0aGlzIHBhcnRpdGlvbiBoYXMgZmV3ZXIgb3IgbW9yZSB0aGFu IGF2Z19hbGxvY3M/ICovCisJCWlmIChhbGxvY3NbaV0gPCBhdmdfYWxsb2NzKQorCQl7CisJ CQkvKiBmZXdlciAtIGRvbid0IHJlZGlyZWN0IGFueSBhbGxvY2F0aW9ucyBlbHNld2hlcmUg Ki8KKwkJCWJhbGFuY2VbaV0gPSAxMDA7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJ ICogbW9yZSAtIHJlZGlzdHJpYnV0ZSB0aGUgZXhjZXNzIGFsbG9jYXRpb25zCisJCQkgKgor CQkJICogRWFjaCAidGFyZ2V0IiBwYXJ0aXRpb24gKHdpdGggbGVzcyB0aGFuIGF2Z19hbGxv Y3MpIHNob3VsZCBnZXQKKwkJCSAqIGEgZnJhY3Rpb24gcHJvcG9ydGlvbmFsIHRvIChleGNl c3MvZGVsdGEpIGZyb20gdGhpcyBvbmUuCisJCQkgKi8KKworCQkJLyogZnJhY3Rpb24gb2Yg dGhlICJ0b3RhbCIgZGVsdGEgKi8KKwkJCWRvdWJsZQlkZWx0YV9mcmFjID0gKGFsbG9jc1tp XSAtIGF2Z19hbGxvY3MpICogMS4wIC8gZGVsdGFfYWxsb2NzOworCisJCQkvKiBrZWVwIGp1 c3QgZW5vdWdoIGFsbG9jYXRpb25zIHRvIG1lZXQgdGhlIHRhcmdldCAqLworCQkJYmFsYW5j ZVtpXSA9ICgxMDAuMCAqIGF2Z19hbGxvY3MgLyBhbGxvY3NbaV0pOworCisJCQkvKiByZWRp cmVjdCB0aGUgZXh0cmEgYWxsb2NhdGlvbnMgKi8KKwkJCWZvciAoaW50IGogPSAwOyBqIDwg U3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9uczsgaisrKQorCQkJeworCQkJCS8qIEhv dyBtYW55IGFsbG9jYXRpb25zIHRvIHJlY2VpdmUgZnJvbSBpLXRoIHBhcnRpdGlvbj8gKi8K KwkJCQl1aW50MzIJcmVjZWl2ZV9hbGxvY3MgPSBkZWx0YV9mcmFjICogKGF2Z19hbGxvY3Mg LSBhbGxvY3Nbal0pOworCisJCQkJLyogaWdub3JlIHBhcnRpdGlvbnMgdGhhdCBkb24ndCBu ZWVkIGFkZGl0aW9uYWwgYWxsb2NhdGlvbnMgKi8KKwkJCQlpZiAoYWxsb2NzW2pdID4gYXZn X2FsbG9jcykKKwkJCQkJY29udGludWU7CisKKwkJCQkvKiBmcmFjdGlvbiB0byByZWRpcmVj dCAqLworCQkJCWJhbGFuY2Vbal0gPSAoMTAwLjAgKiByZWNlaXZlX2FsbG9jcyAvIGFsbG9j c1tpXSkgKyAwLjU7CisJCQl9CisJCX0KKworCQkvKiBjb21iaW5lIHRoZSBvbGQgYW5kIG5l dyB3ZWlnaHRzIChoeXN0ZXJlc2lzKSAqLworCQlmb3IgKGludCBqID0gMDsgaiA8IE1BWF9C VUZGRVJfUEFSVElUSU9OUzsgaisrKQorCQl7CisJCQlzd2VlcC0+YmFsYW5jZVtqXQorCQkJ CT0gQ0xPQ0tTV0VFUF9ISVNUT1JZX0NPRUZGICogc3dlZXAtPmJhbGFuY2Vbal0gKworCQkJ CSAgKDEuMCAtIENMT0NLU1dFRVBfSElTVE9SWV9DT0VGRikgKiBiYWxhbmNlW2pdOworCQl9 CisKKwkJU3BpbkxvY2tSZWxlYXNlKCZzd2VlcC0+Y2xvY2tfc3dlZXBfbG9jayk7CisJfQor fQorCiAvKgogICogU3RyYXRlZ3lTeW5jUHJlcGFyZSAtLSBwcmVwYXJlIGZvciBzeW5jIG9m IGFsbCBwYXJ0aXRpb25zCiAgKgpAQCAtNDY0LDYgKzc5Miw3IEBAIFN0cmF0ZWd5U3luY1By ZXBhcmUoaW50ICpudW1fcGFydHMsIHVpbnQzMiAqbnVtX2J1Zl9hbGxvYykKIAl7CiAJCUNs b2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ldOwogCisJCS8q IFhYWCB3ZSBkb24ndCBuZWVkIHRoZSBzcGlubG9jayB0byByZWFkIGF0b21pY3MsIG5vPyAq LwogCQlTcGluTG9ja0FjcXVpcmUoJnN3ZWVwLT5jbG9ja19zd2VlcF9sb2NrKTsKIAkJaWYg KG51bV9idWZfYWxsb2MpCiAJCXsKQEAgLTY1OCw3ICs5ODcsMjEgQEAgU3RyYXRlZ3lJbml0 aWFsaXplKGJvb2wgaW5pdCkKIAkJCS8qIENsZWFyIHN0YXRpc3RpY3MgKi8KIAkJCVN0cmF0 ZWd5Q29udHJvbC0+c3dlZXBzW2ldLmNvbXBsZXRlUGFzc2VzID0gMDsKIAkJCXBnX2F0b21p Y19pbml0X3UzMigmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaV0ubnVtQnVmZmVyQWxsb2Nz LCAwKTsKKwkJCXBnX2F0b21pY19pbml0X3UzMigmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNb aV0ubnVtUmVxdWVzdGVkQWxsb2NzLCAwKTsKIAkJCXBnX2F0b21pY19pbml0X3U2NCgmU3Ry YXRlZ3lDb250cm9sLT5zd2VlcHNbaV0ubnVtVG90YWxBbGxvY3MsIDApOworCQkJcGdfYXRv bWljX2luaXRfdTY0KCZTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXS5udW1Ub3RhbFJlcXVl c3RlZEFsbG9jcywgMCk7CisKKwkJCS8qCisJCQkgKiBJbml0aWFsaXplIHRoZSB3ZWlnaHRz IC0gc3RhcnQgYnkgYWxsb2NhdGluZyAxMDAlIGJ1ZmZlcnMgZnJvbQorCQkJICogdGhlIGN1 cnJlbnQgbm9kZSAvIHBhcnRpdGlvbi4KKwkJCSAqLworCQkJZm9yIChpbnQgaiA9IDA7IGog PCBNQVhfQlVGRkVSX1BBUlRJVElPTlM7IGorKykKKwkJCXsKKwkJCQlpZiAoaSA9PSBqKQor CQkJCQlTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXS5iYWxhbmNlW2ldID0gMTAwOworCQkJ CWVsc2UKKwkJCQkJU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaV0uYmFsYW5jZVtqXSA9IDA7 CisJCQl9CiAJCX0KIAogCQkvKiBObyBwZW5kaW5nIG5vdGlmaWNhdGlvbiAqLwpAQCAtMTAw Nyw4ICsxMzUwLDEwIEBAIFN0cmF0ZWd5UmVqZWN0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0 ZWd5IHN0cmF0ZWd5LCBCdWZmZXJEZXNjICpidWYsIGJvb2wgZnJvbV9yCiAKIHZvaWQKIENs b2NrU3dlZXBQYXJ0aXRpb25HZXRJbmZvKGludCBpZHgsCi0JCQkJCQkgICB1aW50MzIgKmNv bXBsZXRlX3Bhc3NlcywgdWludDMyICpuZXh0X3ZpY3RpbV9idWZmZXIsCi0JCQkJCQkgICB1 aW50NjQgKmJ1ZmZlcl90b3RhbF9hbGxvY3MsIHVpbnQzMiAqYnVmZmVyX2FsbG9jcykKKwkJ CQkJCSB1aW50MzIgKmNvbXBsZXRlX3Bhc3NlcywgdWludDMyICpuZXh0X3ZpY3RpbV9idWZm ZXIsCisJCQkJCQkgdWludDY0ICpidWZmZXJfdG90YWxfYWxsb2NzLCB1aW50MzIgKmJ1ZmZl cl9hbGxvY3MsCisJCQkJCQkgdWludDY0ICpidWZmZXJfdG90YWxfcmVxX2FsbG9jcywgdWlu dDMyICpidWZmZXJfcmVxX2FsbG9jcywKKwkJCQkJCSBpbnQgKip3ZWlnaHRzKQogewogCUNs b2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2lkeF07CiAKQEAg LTEwMTYsMTEgKzEzNjEsMjEgQEAgQ2xvY2tTd2VlcFBhcnRpdGlvbkdldEluZm8oaW50IGlk eCwKIAogCS8qIGdldCB0aGUgY2xvY2tzd2VlcCBzdGF0cyAqLwogCSpjb21wbGV0ZV9wYXNz ZXMgPSBzd2VlcC0+Y29tcGxldGVQYXNzZXM7CisKKwkvKiBjYWxjdWxhdGUgdGhlIGFjdHVh bCBidWZmZXIgSUQgKi8KIAkqbmV4dF92aWN0aW1fYnVmZmVyID0gcGdfYXRvbWljX3JlYWRf dTMyKCZzd2VlcC0+bmV4dFZpY3RpbUJ1ZmZlcik7CisJKm5leHRfdmljdGltX2J1ZmZlciA9 IHN3ZWVwLT5maXJzdEJ1ZmZlciArICgqbmV4dF92aWN0aW1fYnVmZmVyICUgc3dlZXAtPm51 bUJ1ZmZlcnMpOwogCi0JKmJ1ZmZlcl9hbGxvY3MgPSBwZ19hdG9taWNfcmVhZF91MzIoJnN3 ZWVwLT5udW1CdWZmZXJBbGxvY3MpOwogCSpidWZmZXJfdG90YWxfYWxsb2NzID0gcGdfYXRv bWljX3JlYWRfdTY0KCZzd2VlcC0+bnVtVG90YWxBbGxvY3MpOworCSpidWZmZXJfYWxsb2Nz ID0gcGdfYXRvbWljX3JlYWRfdTMyKCZzd2VlcC0+bnVtQnVmZmVyQWxsb2NzKTsKIAotCS8q IGNhbGN1bGF0ZSB0aGUgYWN0dWFsIGJ1ZmZlciBJRCAqLwotCSpuZXh0X3ZpY3RpbV9idWZm ZXIgPSBzd2VlcC0+Zmlyc3RCdWZmZXIgKyAoKm5leHRfdmljdGltX2J1ZmZlciAlIHN3ZWVw LT5udW1CdWZmZXJzKTsKKwkqYnVmZmVyX3RvdGFsX3JlcV9hbGxvY3MgPSBwZ19hdG9taWNf cmVhZF91NjQoJnN3ZWVwLT5udW1Ub3RhbFJlcXVlc3RlZEFsbG9jcyk7CisJKmJ1ZmZlcl9y ZXFfYWxsb2NzID0gcGdfYXRvbWljX3JlYWRfdTMyKCZzd2VlcC0+bnVtUmVxdWVzdGVkQWxs b2NzKTsKKworCS8qIHJldHVybiB0aGUgd2VpZ2h0cyBpbiBhIG5ld2x5IGFsbG9jYXRlZCBh cnJheSAqLworCSp3ZWlnaHRzID0gcGFsbG9jX2FycmF5KGludCwgU3RyYXRlZ3lDb250cm9s LT5udW1fcGFydGl0aW9ucyk7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBTdHJhdGVneUNvbnRy b2wtPm51bV9wYXJ0aXRpb25zOyBpKyspCisJeworCQkoKndlaWdodHMpW2ldID0gKGludCkg c3dlZXAtPmJhbGFuY2VbaV07CisJfQogfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3Rv cmFnZS9idWZfaW50ZXJuYWxzLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5h bHMuaAppbmRleCA1Y2NlNjkwOTMzYi4uMWI0ZGFlMTgwZTAgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvYnVmX2ludGVybmFscy5oCkBAIC00MzksNiArNDM5LDcgQEAgZXh0ZXJuIEJ1ZmZlckRl c2MgKlN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAog ZXh0ZXJuIGJvb2wgU3RyYXRlZ3lSZWplY3RCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kg c3RyYXRlZ3ksCiAJCQkJCQkJCSBCdWZmZXJEZXNjICpidWYsIGJvb2wgZnJvbV9yaW5nKTsK IAorZXh0ZXJuIHZvaWQgU3RyYXRlZ3lTeW5jQmFsYW5jZSh2b2lkKTsKIGV4dGVybiB2b2lk IFN0cmF0ZWd5U3luY1ByZXBhcmUoaW50ICpudW1fcGFydHMsIHVpbnQzMiAqbnVtX2J1Zl9h bGxvYyk7CiBleHRlcm4gaW50CVN0cmF0ZWd5U3luY1N0YXJ0KGludCBwYXJ0aXRpb24sIHVp bnQzMiAqY29tcGxldGVfcGFzc2VzLAogCQkJCQkJCSAgaW50ICpmaXJzdF9idWZmZXIsIGlu dCAqbnVtX2J1ZmZlcnMpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZt Z3IuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggN2Q2NmU4Mjc2Y2Qu LjFjYTBkNGMzNzVlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5o CisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKQEAgLTM1NiwxMSArMzU2LDEz IEBAIGV4dGVybiBpbnQJR2V0QWNjZXNzU3RyYXRlZ3lQaW5MaW1pdChCdWZmZXJBY2Nlc3NT dHJhdGVneSBzdHJhdGVneSk7CiAKIGV4dGVybiB2b2lkIEZyZWVBY2Nlc3NTdHJhdGVneShC dWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSk7CiBleHRlcm4gdm9pZCBDbG9ja1N3ZWVw UGFydGl0aW9uR2V0SW5mbyhpbnQgaWR4LAotCQkJCQkJCQkJICAgdWludDMyICpjb21wbGV0 ZV9wYXNzZXMsCi0JCQkJCQkJCQkgICB1aW50MzIgKm5leHRfdmljdGltX2J1ZmZlciwKLQkJ CQkJCQkJCSAgIHVpbnQ2NCAqYnVmZmVyX3RvdGFsX2FsbG9jcywKLQkJCQkJCQkJCSAgIHVp bnQzMiAqYnVmZmVyX2FsbG9jcyk7Ci0KKwkJCQkJCQkJCSB1aW50MzIgKmNvbXBsZXRlX3Bh c3NlcywKKwkJCQkJCQkJCSB1aW50MzIgKm5leHRfdmljdGltX2J1ZmZlciwKKwkJCQkJCQkJ CSB1aW50NjQgKmJ1ZmZlcl90b3RhbF9hbGxvY3MsCisJCQkJCQkJCQkgdWludDMyICpidWZm ZXJfYWxsb2NzLAorCQkJCQkJCQkJIHVpbnQ2NCAqYnVmZmVyX3RvdGFsX3JlcV9hbGxvY3Ms CisJCQkJCQkJCQkgdWludDMyICpidWZmZXJfcmVxX2FsbG9jcywKKwkJCQkJCQkJCSBpbnQg Kip3ZWlnaHRzKTsKIAogLyogaW5saW5lIGZ1bmN0aW9ucyAqLwogCi0tIAoyLjUxLjAKCg== --------------7ugtFjYi6YRzRLN0MXp6Nj6F Content-Type: text/x-patch; charset=UTF-8; name="v20250918-0004-NUMA-weighted-clocksweep-balancing.patch" Content-Disposition: attachment; filename="v20250918-0004-NUMA-weighted-clocksweep-balancing.patch" Content-Transfer-Encoding: base64 RnJvbSA1NjMxY2QxNWYwN2MzNjgxNTMwMTQ0NjRjNGNlNThhYjA4MzhhMzE3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogV2VkLCA2IEF1ZyAyMDI1IDAxOjA5OjU3ICswMjAwClN1YmplY3Q6IFtQQVRDSCB2 MjAyNTA5MTggNC82XSBOVU1BOiB3ZWlnaHRlZCBjbG9ja3N3ZWVwIGJhbGFuY2luZwoKVGhl IHBhcnRpdGlvbnMgbWF5IG5vdCBiZSBvZiBleGFjdGx5IHRoZSBzYW1lIHNpemUsIHNvIGNv bnNpZGVyIHRoYXQKd2hlbiBiYWxhbmNpbmcgY2xvY2tzd2VlcCBhbGxvY2F0aW9ucy4KLS0t CiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jIHwgNjMgKysrKysrKysr KysrKysrKysrKysrKy0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNTMgaW5zZXJ0aW9ucygrKSwg MTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvZnJlZWxpc3QuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMK aW5kZXggMzQ5YjYyNmRiM2IuLjVjZjlhNTY1OTE0IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2ZyZWVsaXN0LmMKQEAgLTYwNSw2ICs2MDUsMjAgQEAgU3RyYXRlZ3lTeW5jQmFs YW5jZSh2b2lkKQogCQkJYXZnX2FsbG9jcywJCQkvKiBhdmVyYWdlIGFsbG9jYXRpb25zIChw ZXIgcGFydGl0aW9uKSAqLwogCQkJZGVsdGFfYWxsb2NzID0gMDsJLyogc3VtIG9mIGFsbG9j cyBhYm92ZSBhdmVyYWdlICovCiAKKwkvKgorCSAqIFNpemUgb2YgYSBwYXJ0aXRpb24sIHVz ZWQgdG8gY2FsY3VsYXRlIHdlaWdodGVkIGF2ZXJhZ2UgKHRoZSBmaXJzdAorCSAqIHBhcnRp dGlvbiBpcyBleHBlY3RlZCB0byBiZSB0aGUgbGFyZ2VzdCBvbmUsIGFuZCBzbyB3aWxsIGJl IGNvdW50ZWQKKwkgKiBhcyBhICJ1bml0IiBwYXJ0aXRpb24gd2l0aCB3ZWlnaHQgMS4wKS4K KwkgKi8KKwlpbnQzMgludW1fYnVmZmVycyA9IFN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzWzBd Lm51bUJ1ZmZlcnM7CisKKwkvKgorCSAqIFRvdGFsIHdlaWdodCBvZiBwYXJ0aXRpb25zLiBJ ZiB0aGUgcGFydGl0aW9ucyBoYXZlIHRoZSBzYW1lIHNpemUsCisJICogdGhlIHdlaWdodCBz aG91bGQgYmUgZXF1YWwgdGhlIHBhcnRpdGlvbiBjb3VudCAobW9kdWxvIHJvdW5kaW5nCisJ ICogZXJyb3JzLCBldGMuKQorCSAqLworCWRvdWJsZQl3ZWlnaHQgPSAwLjA7CisKIAkvKgog CSAqIENvbGxlY3QgdGhlIG51bWJlciBvZiBhbGxvY2F0aW9ucyByZXF1ZXN0ZWQgaW4gdGhl IHBhc3QgaW50ZXJ2YWwuCiAJICogV2hpbGUgYXQgaXQsIHJlc2V0IHRoZSBjb3VudGVyIHRv IHN0YXJ0IHRoZSBuZXcgaW50ZXJ2YWwuCkBAIC02MzEsMTYgKzY0NSwyNyBAQCBTdHJhdGVn eVN5bmNCYWxhbmNlKHZvaWQpCiAJCXBnX2F0b21pY19mZXRjaF9hZGRfdTY0KCZzd2VlcC0+ bnVtVG90YWxSZXF1ZXN0ZWRBbGxvY3MsIGFsbG9jc1tpXSk7CiAKIAkJdG90YWxfYWxsb2Nz ICs9IGFsbG9jc1tpXTsKKworCQkvKiB3ZWlnaHQgb2YgdGhlIHBhcnRpdGlvbiwgcmVsYXRp dmUgdG8gdGhlICJ1bml0IiBwYXJ0aXRpb24gKi8KKwkJd2VpZ2h0ICs9IChzd2VlcC0+bnVt QnVmZmVycyAqIDEuMCAvIG51bV9idWZmZXJzKTsKIAl9CiAKIAkvKgotCSAqIENhbGN1bGF0 ZSB0aGUgImZhaXIgc2hhcmUiIG9mIGFsbG9jYXRpb25zIHBlciBwYXJ0aXRpb24uCisJICog WFhYIE5vdCBzdXJlIGlmIHRoZSB0b3RhbF93ZWlnaHQgbWlnaHQgZXhjZWVkIG51bV9wYXJ0 aXRpb25zIGR1ZSB0bworCSAqIHJvdW5kaW5nIGVycm9ycy4KKwkgKi8KKwlBc3NlcnQoKHdl aWdodCA+IDAuMCkgJiYgKHdlaWdodCA8PSBTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRp b25zKSk7CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgImZhaXIgc2hhcmUiIG9mIGFsbG9j YXRpb25zIHBlciBwYXJ0aXRpb24uIFRoaXMgaXMgdGhlCisJICogbnVtYmVyIG9mIGFsbG9j YXRpb25zIGZvciB0aGUgInVuaXQiIHBhcnRpdGlvbiB3aXRoIG51bV9idWZmZXJzLCB3ZSds bAorCSAqIG5lZWQgdG8gYWRqdXN0IGl0IHVzaW5nIHRoZSBwZXItcGFydGl0aW9uIHdlaWdo dC4KIAkgKgogCSAqIFhYWCBUaGUgbGFzdCBwYXJ0aXRpb24gY291bGQgYmUgc21hbGxlciwg aW4gd2hpY2ggY2FzZSBpdCBzaG91bGQgYmUKIAkgKiBleHBlY3RlZCB0byBoYW5kbGUgZmV3 ZXIgYWxsb2NhdGlvbnMuIFNvIHRoaXMgc2hvdWxkIGJlIGEgd2VpZ2h0ZWQKIAkgKiBhdmVy YWdlLiBCdXQgZm9yIG5vdyBhIHNpbXBsZSBhdmVyYWdlIGlzIGdvb2QgZW5vdWdoLgogCSAq LwotCWF2Z19hbGxvY3MgPSAodG90YWxfYWxsb2NzIC8gU3RyYXRlZ3lDb250cm9sLT5udW1f cGFydGl0aW9ucyk7CisJYXZnX2FsbG9jcyA9ICh0b3RhbF9hbGxvY3MgLyB3ZWlnaHQpOwog CiAJLyoKIAkgKiBDYWxjdWxhdGUgdGhlICJkZWx0YSIgZnJvbSBiYWxhbmNlZCBzdGF0ZSwg aS5lLiBob3cgbWFueSBhbGxvY2F0aW9ucwpAQCAtNjQ4LDggKzY3MywxNCBAQCBTdHJhdGVn eVN5bmNCYWxhbmNlKHZvaWQpCiAJICovCiAJZm9yIChpbnQgaSA9IDA7IGkgPCBTdHJhdGVn eUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zOyBpKyspCiAJewotCQlpZiAoYWxsb2NzW2ldID4g YXZnX2FsbG9jcykKLQkJCWRlbHRhX2FsbG9jcyArPSAoYWxsb2NzW2ldIC0gYXZnX2FsbG9j cyk7CisJCUNsb2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ld OworCisJCS8qIG51bWJlciBvZiBhbGxvY2F0aW9ucyBleHBlY3RlZCBmb3IgdGhpcyBwYXJ0 aXRpb24gKi8KKwkJZG91YmxlCXBhcnRfd2VpZ2h0ID0gKHN3ZWVwLT5udW1CdWZmZXJzICog MS4wIC8gbnVtX2J1ZmZlcnMpOworCQl1aW50MzIJcGFydF9hbGxvY3MgPSBhdmdfYWxsb2Nz ICogcGFydF93ZWlnaHQ7CisKKwkJaWYgKGFsbG9jc1tpXSA+IHBhcnRfYWxsb2NzKQorCQkJ ZGVsdGFfYWxsb2NzICs9IChhbGxvY3NbaV0gLSBwYXJ0X2FsbG9jcyk7CiAJfQogCiAJLyoK QEAgLTcxMiw2ICs3NDMsMTAgQEAgU3RyYXRlZ3lTeW5jQmFsYW5jZSh2b2lkKQogCQlDbG9j a1N3ZWVwICpzd2VlcCA9ICZTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXTsKIAkJdWludDgJ CWJhbGFuY2VbTUFYX0JVRkZFUl9QQVJUSVRJT05TXTsKIAorCQkvKiBudW1iZXIgb2YgYWxs b2NhdGlvbnMgZXhwZWN0ZWQgZm9yIHRoaXMgcGFydGl0aW9uICovCisJCWRvdWJsZQlwYXJ0 X3dlaWdodCA9IChzd2VlcC0+bnVtQnVmZmVycyAqIDEuMCAvIG51bV9idWZmZXJzKTsKKwkJ dWludDMyCXBhcnRfYWxsb2NzID0gYXZnX2FsbG9jcyAqIHBhcnRfd2VpZ2h0OworCiAJCS8q IGxvY2ssIHdlJ3JlIGdvaW5nIHRvIG1vZGlmeSB0aGUgYmFsYW5jZSB3ZWlnaHRzICovCiAJ CVNwaW5Mb2NrQWNxdWlyZSgmc3dlZXAtPmNsb2NrX3N3ZWVwX2xvY2spOwogCkBAIC03MTks NyArNzU0LDcgQEAgU3RyYXRlZ3lTeW5jQmFsYW5jZSh2b2lkKQogCQltZW1zZXQoYmFsYW5j ZSwgMCwgc2l6ZW9mKHVpbnQ4KSAqIE1BWF9CVUZGRVJfUEFSVElUSU9OUyk7CiAKIAkJLyog ZG9lcyB0aGlzIHBhcnRpdGlvbiBoYXMgZmV3ZXIgb3IgbW9yZSB0aGFuIGF2Z19hbGxvY3M/ ICovCi0JCWlmIChhbGxvY3NbaV0gPCBhdmdfYWxsb2NzKQorCQlpZiAoYWxsb2NzW2ldIDwg cGFydF9hbGxvY3MpCiAJCXsKIAkJCS8qIGZld2VyIC0gZG9uJ3QgcmVkaXJlY3QgYW55IGFs bG9jYXRpb25zIGVsc2V3aGVyZSAqLwogCQkJYmFsYW5jZVtpXSA9IDEwMDsKQEAgLTczMywy MiArNzY4LDMwIEBAIFN0cmF0ZWd5U3luY0JhbGFuY2Uodm9pZCkKIAkJCSAqIGEgZnJhY3Rp b24gcHJvcG9ydGlvbmFsIHRvIChleGNlc3MvZGVsdGEpIGZyb20gdGhpcyBvbmUuCiAJCQkg Ki8KIAotCQkJLyogZnJhY3Rpb24gb2YgdGhlICJ0b3RhbCIgZGVsdGEgKi8KLQkJCWRvdWJs ZQlkZWx0YV9mcmFjID0gKGFsbG9jc1tpXSAtIGF2Z19hbGxvY3MpICogMS4wIC8gZGVsdGFf YWxsb2NzOworCQkJLyogZnJhY3Rpb24gb2YgdGhlICJ0b3RhbCIgZGVsdGEgcmVwcmVzZW50 ZWQgYnkgImV4Y2VzcyIgYWxsb2NhdGlvbnMgKi8KKwkJCWRvdWJsZQlkZWx0YV9mcmFjID0g KGFsbG9jc1tpXSAtIHBhcnRfYWxsb2NzKSAqIDEuMCAvIGRlbHRhX2FsbG9jczsKIAogCQkJ Lyoga2VlcCBqdXN0IGVub3VnaCBhbGxvY2F0aW9ucyB0byBtZWV0IHRoZSB0YXJnZXQgKi8K LQkJCWJhbGFuY2VbaV0gPSAoMTAwLjAgKiBhdmdfYWxsb2NzIC8gYWxsb2NzW2ldKTsKKwkJ CWJhbGFuY2VbaV0gPSAoMTAwLjAgKiBwYXJ0X2FsbG9jcyAvIGFsbG9jc1tpXSk7CiAKIAkJ CS8qIHJlZGlyZWN0IHRoZSBleHRyYSBhbGxvY2F0aW9ucyAqLwogCQkJZm9yIChpbnQgaiA9 IDA7IGogPCBTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zOyBqKyspCiAJCQl7CisJ CQkJQ2xvY2tTd2VlcCAqc3dlZXAyID0gJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2pdOwor CisJCQkJLyogbnVtYmVyIG9mIGFsbG9jYXRpb25zIGV4cGVjdGVkIGZvciB0aGlzIHBhcnRp dGlvbiAqLworCQkJCWRvdWJsZQlwYXJ0X3dlaWdodF8yID0gKHN3ZWVwMi0+bnVtQnVmZmVy cyAqIDEuMCAvIG51bV9idWZmZXJzKTsKKwkJCQl1aW50MzIJcGFydF9hbGxvY3NfMiA9IGF2 Z19hbGxvY3MgKiBwYXJ0X3dlaWdodF8yOworCiAJCQkJLyogSG93IG1hbnkgYWxsb2NhdGlv bnMgdG8gcmVjZWl2ZSBmcm9tIGktdGggcGFydGl0aW9uPyAqLwotCQkJCXVpbnQzMglyZWNl aXZlX2FsbG9jcyA9IGRlbHRhX2ZyYWMgKiAoYXZnX2FsbG9jcyAtIGFsbG9jc1tqXSk7CisJ CQkJdWludDMyCXJlY2VpdmVfYWxsb2NzID0gZGVsdGFfZnJhYyAqIChwYXJ0X2FsbG9jc18y IC0gYWxsb2NzW2pdKTsKIAogCQkJCS8qIGlnbm9yZSBwYXJ0aXRpb25zIHRoYXQgZG9uJ3Qg bmVlZCBhZGRpdGlvbmFsIGFsbG9jYXRpb25zICovCi0JCQkJaWYgKGFsbG9jc1tqXSA+IGF2 Z19hbGxvY3MpCisJCQkJaWYgKGFsbG9jc1tqXSA+IHBhcnRfYWxsb2NzXzIpCiAJCQkJCWNv bnRpbnVlOwogCisJCQkJQXNzZXJ0KHJlY2VpdmVfYWxsb2NzID49IDApOworCiAJCQkJLyog ZnJhY3Rpb24gdG8gcmVkaXJlY3QgKi8KIAkJCQliYWxhbmNlW2pdID0gKDEwMC4wICogcmVj ZWl2ZV9hbGxvY3MgLyBhbGxvY3NbaV0pICsgMC41OwogCQkJfQotLSAKMi41MS4wCgo= --------------7ugtFjYi6YRzRLN0MXp6Nj6F Content-Type: text/x-patch; charset=UTF-8; name="v20250918-0005-NUMA-partition-PGPROC.patch" Content-Disposition: attachment; filename="v20250918-0005-NUMA-partition-PGPROC.patch" Content-Transfer-Encoding: base64 RnJvbSA1MjQ3YmYxYzE0N2VjOTU5M2U3MjE2OGZlYzM1Nzk5MTBiNGYyNjJjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogTW9uLCA4IFNlcCAyMDI1IDEzOjExOjAyICswMjAwClN1YmplY3Q6IFtQQVRDSCB2 MjAyNTA5MTggNS82XSBOVU1BOiBwYXJ0aXRpb24gUEdQUk9DCgpUaGUgZ29hbCBpcyB0byBk aXN0cmlidXRlIFByb2NBcnJheSAob3IgcmF0aGVyIFBHUFJPQyBlbnRyaWVzIGFuZAphc3Nv Y2lhdGVkIGZhc3QtcGF0aCBhcnJheXMpIHRvIE5VTUEgbm9kZXMuCgpXZSBjYW4ndCBkbyB0 aGlzIGJ5IHNpbXBseSBpbnRlcmxlYXZpbmcgcGFnZXMsIGJlY2F1c2UgdGhhdCB3b3VsZG4n dAp3b3JrIGZvciBib3RoIHBhcnRzIGF0IHRoZSBzYW1lIHRpbWUuIFdlIHdhbnQgdG8gcGxh Y2UgdGhlIFBHUFJPQyBhbmQKaXQncyBmYXN0LXBhdGggbG9ja2luZyBzdHJ1Y3RzIG9uIHRo ZSBzYW1lIG5vZGUsIGJ1dCB0aGUgc3RydWN0cyBhcmUKb2YgZGlmZmVyZW50IHNpemVzLCBl dGMuCgpBbm90aGVyIHByb2JsZW0gaXMgdGhhdCBQR1BST0MgZW50cmllcyBhcmUgZmFpcmx5 IHNtYWxsLCBzbyB3aXRoIGh1Z2UKcGFnZXMgYW5kIHJlYXNvbmFibGUgdmFsdWVzIG9mIG1h eF9jb25uZWN0aW9ucyBldmVyeXRoaW5nIGZpdHMgb250byBhCnNpbmdsZSBwYWdlLiBXZSBk b24ndCB3YW50IHRvIG1ha2UgdGhpcyBpbmNvbXBhdGlibGUgd2l0aCBodWdlIHBhZ2VzLgoK Tm90ZTogSWYgd2UgZXZlbnR1YWxseSBzd2l0Y2ggdG8gYWxsb2NhdGluZyBzZXBhcmF0ZSBz aGFyZWQgc2VnbWVudHMgZm9yCmRpZmZlcmVudCBwYXJ0cyAodG8gYWxsb3cgb24tbGluZSBy ZXNpemluZyksIHdlIGNvdWxkIGtlZXAgdXNpbmcgcmVndWxhcgpwYWdlcyBmb3IgcHJvY2Fy cmF5LCBhbmQgdGhpcyB3b3VsZCBub3QgYmUgc3VjaCBhbiBpc3N1ZS4KClRvIG1ha2UgdGhp cyB3b3JrLCB3ZSBzcGxpdCB0aGUgUEdQUk9DIGFycmF5IGludG8gcGVyLW5vZGUgc2VnbWVu dHMsCmVhY2ggd2l0aCBhYm91dCAoTWF4QmFja2VuZHMgLyBudW1hX25vZGVzKSBlbnRyaWVz LCBhbmQgb25lIHNlZ21lbnQgZm9yCmF1eGlsaWFyeSBwcm9jZXNzZXMgYW5kIHByZXBhcmVk IHRyYW5zYXRpb25zLiBBbmQgd2UgZG8gdGhlIHNhbWUgdGhpbmcKZm9yIGZhc3QtcGF0aCBh cnJheXMuCgpUaGUgUEdQUk9DIHNlZ21lbnRzIGFyZSBsYWlkIG91dCBsaWtlIHRoaXMgKGUu Zy4gZm9yIDIgTlVNQSBub2Rlcyk6CgogLSBQR1BST0MgYXJyYXkgLyBub2RlICMwCiAtIFBH UFJPQyBhcnJheSAvIG5vZGUgIzEKIC0gUEdQUk9DIGFycmF5IC8gYXV4IHByb2Nlc3NlcyAr IDJQQyB0cmFuc2FjdGlvbnMKIC0gZmFzdC1wYXRoIGFycmF5cyAvIG5vZGUgIzAKIC0gZmFz dC1wYXRoIGFycmF5cyAvIG5vZGUgIzEKIC0gZmFzdC1wYXRoIGFycmF5cyAvIGF1eCBwcm9j ZXNzZXMgKyAyUEMgdHJhbnNhY3Rpb24KCkVhY2ggc2VnbWVudCBpcyBhbGlnbmVkIHRvIChz dGFydHMgYXQpIG1lbW9yeSBwYWdlLCBhbmQgaXMgZWZmZWN0aXZlbHkgYQptdWx0aXBsZSBv ZiBtdWx0aXBsZSBtZW1vcnkgcGFnZXMuCgpIYXZpbmcgYSBzaW5nbGUgUEdQUk9DIGFycmF5 IG1hZGUgY2VydGFpbiBvcGVyYXRpb25zIGVhc2llcnMgLSBlLmcuIGl0CndhcyBwb3NzaWJs ZSB0byBpdGVyYXRlIHRoZSBhcnJheSwgYW5kIEdldE51bWJlckZyb21QR1Byb2MoKSBjb3Vs ZApjYWxjdWxhdGUgb2Zmc2V0IGJ5IHNpbXBseSBzdWJ0cmFjdGluZyBQR1BST0MgcG9pbnRl cnMuIFdpdGggbXVsdGlwbGUKc2VnbWVudHMgdGhhdCdzIG5vdCBwb3NzaWJsZSwgYnV0IHRo ZSBmYWxsb3V0IGlzIG1pbmltYWwuCgpNb3N0IHBsYWNlcyBhY2Nlc3NlZCBQR1BST0MgdGhy b3VnaCBQUk9DX0hEUi0+YWxsUHJvY3MsIGFuZCBjYW4gY29udGludWUKdG8gZG8gc28sIGV4 Y2VwdCB0aGF0IG5vdyB0aGV5IGdldCBhIHBvaW50ZXIgdG8gdGhlIFBHUFJPQyAod2hpY2gg bW9zdApwbGFjZXMgd2FudGVkIGFueXdheSkuCgpXaXRoIHRoZSBmZWF0dXJlIGRpc2FibGVk LCB0aGVyZSdzIG9ubHkgYSBzaW5nbGUgInBhcnRpdGlvbiIgZm9yIGFsbApQR1BST0MgZW50 cmllcy4KClNpbWlsYXJseSB0byB0aGUgYnVmZmVyIHBhcnRpdGlvbmluZywgdGhpcyBpbnRy b2R1Y2VzIGEgc21hbGwgInJlZ2lzdHJ5IgpvZiBwYXJ0aXRpb25zLCBhcyBhIHNvdXJjZSBv ZiB0cnV0aC4gQW5kIHRoZW4gYWxzbyBhIG5ldyAic3lzdGVtIiB2aWV3CiJwZ19idWZmZXJj YWNoZV9wZ3Byb2MiIHNob3dpbmcgYmFzaWMgaW5mcm9tYXRpb24gYWJvdXV0IHRoZSBwYXJ0 aXRpb25zLgoKTm90ZTogVGhlcmUncyBhbiBpbmRpcmVjdGlvbiwgdGhvdWdoLiBCdXQgdGhl IHBvaW50ZXIgZG9lcyBub3QgY2hhbmdlLApzbyBob3BlZnVsbHkgdGhhdCdzIG5vdCBhbiBp c3N1ZS4gQW5kIGVhY2ggUEdQUk9DIGVudHJ5IGdldHMgYW4gZXhwbGljaXQKcHJvY251bWJl ciBmaWVsZCwgd2hpY2ggaXMgdGhlIGluZGV4IGluIGFsbFByb2NzLCBHZXROdW1iZXJGcm9t UEdQcm9jCmNhbiBzaW1wbHkgcmV0dXJuIHRoYXQuCgpFYWNoIFBHUFJPQyBhbHNvIGdldHMg bnVtYV9ub2RlLCB0cmFja2luZyB0aGUgTlVNQSBub2RlLCBzbyB0aGF0IHdlCmRvbid0IGhh dmUgdG8gcmVjYWxjdWxhdGUgdGhhdC4gVGhpcyBpcyB1c2VkIGJ5IEluaXRQcm9jZXNzKCkg dG8gcGljawphIFBHUFJPQyBlbnRyeSBmcm9tIHRoZSBsb2NhbCBOVU1BIG5vZGUuCgpOb3Rl OiBUaGUgc2NoZWR1bGVyIG1heSBtaWdyYXRlIHRoZSBwcm9jZXNzIHRvIGEgZGlmZmVyZW50 IENQVS9ub2RlCmxhdGVyLiBNYXliZSB3ZSBzaG91bGQgY29uc2lkZXIgcGlubmluZyB0aGUg cHJvY2VzcyB0byB0aGUgbm9kZT8KCk5vdGU6IFRoZXJlJ3Mgc29tZSBjaGFsbGVuZ2VzIGlu IG1ha2luZyB0aGlzIHdvcmsgb24gRVhFQ19CQUNLRU5ELCBldmVuCmlmIHdlIGRvbid0IHN1 cHBvcnQgTlVNQSBvbiBwbGF0Zm9ybXMgdGhhdCByZXF1aXJlIHRoaXMuCi0tLQogLi4uL3Bn X2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwgICAgICAgICAgICAgIHwgIDE5ICsKIGNvbnRy aWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYyB8ICA5NCArKysrCiBz cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMgICAgICAgICAgICAgfCAgIDQgKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMgICAgICAgICB8ICAgMyAr LQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jICAgICAgIHwgICA0 ICstCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jICAgICAgICAgICAgICAgfCAg IDIgKy0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jICAgICAgICB8 ICAgMiArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYyAgICAgICAg IHwgICAyICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMgICAgICAg ICB8ICAgMiArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgICAgICAg ICAgIHwgIDg1ICstLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYyAgICAgICAg ICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jICAgICAg ICAgICAgICAgfCA1MzIgKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9wb3J0L3Bn X251bWEuaCAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvc3RvcmFn ZS9wcm9jLmggICAgICAgICAgICAgICAgICAgIHwgIDE4ICstCiBzcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDEgKwogMTUgZmlsZXMgY2hhbmdl ZCwgNzA1IGluc2VydGlvbnMoKyksIDcwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbCBiL2Nv bnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbAppbmRl eCBkYzJjZTAxOTI4My4uMzA2MDYzZTE1OWUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfYnVm ZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbAorKysgYi9jb250cmliL3Bn X2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwKQEAgLTMzLDMgKzMz LDIyIEBAIFJFVk9LRSBBTEwgT04gcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyBGUk9NIFBV QkxJQzsKIAogR1JBTlQgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19idWZmZXJjYWNoZV9wYXJ0 aXRpb25zKCkgVE8gcGdfbW9uaXRvcjsKIEdSQU5UIFNFTEVDVCBPTiBwZ19idWZmZXJjYWNo ZV9wYXJ0aXRpb25zIFRPIHBnX21vbml0b3I7CisKKy0tIFJlZ2lzdGVyIHRoZSBuZXcgZnVu Y3Rpb25zLgorQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gcGdfYnVmZmVyY2FjaGVfcGdw cm9jKCkKK1JFVFVSTlMgU0VUT0YgUkVDT1JECitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3Bn X2J1ZmZlcmNhY2hlX3BncHJvYycKK0xBTkdVQUdFIEMgUEFSQUxMRUwgU0FGRTsKKworLS0g Q3JlYXRlIGEgdmlldyBmb3IgY29udmVuaWVudCBhY2Nlc3MuCitDUkVBVEUgVklFVyBwZ19i dWZmZXJjYWNoZV9wZ3Byb2MgQVMKKwlTRUxFQ1QgUC4qIEZST00gcGdfYnVmZmVyY2FjaGVf cGdwcm9jKCkgQVMgUAorCShwYXJ0aXRpb24gaW50ZWdlciwKKwkgbnVtYV9ub2RlIGludGVn ZXIsIG51bV9wcm9jcyBpbnRlZ2VyLCBwZ3Byb2NfcHRyIGJpZ2ludCwgZmFzdHBhdGhfcHRy IGJpZ2ludCk7CisKKy0tIERvbid0IHdhbnQgdGhlc2UgdG8gYmUgYXZhaWxhYmxlIHRvIHB1 YmxpYy4KK1JFVk9LRSBBTEwgT04gRlVOQ1RJT04gcGdfYnVmZmVyY2FjaGVfcGdwcm9jKCkg RlJPTSBQVUJMSUM7CitSRVZPS0UgQUxMIE9OIHBnX2J1ZmZlcmNhY2hlX3BncHJvYyBGUk9N IFBVQkxJQzsKKworR1JBTlQgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19idWZmZXJjYWNoZV9w Z3Byb2MoKSBUTyBwZ19tb25pdG9yOworR1JBTlQgU0VMRUNUIE9OIHBnX2J1ZmZlcmNhY2hl X3BncHJvYyBUTyBwZ19tb25pdG9yOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19idWZmZXJj YWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9w Z19idWZmZXJjYWNoZV9wYWdlcy5jCmluZGV4IGY2ODMxZjYwYjllLi5hODU5OTYyZjVmOCAx MDA2NDQKLS0tIGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdl cy5jCisrKyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMu YwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgInBvcnQvcGdfbnVtYS5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvYnVmX2ludGVybmFscy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdy LmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAidXRpbHMvYXJyYXku aCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5o IgpAQCAtMzAsNiArMzEsNyBAQAogCiAjZGVmaW5lIE5VTV9CVUZGRVJDQUNIRV9OVU1BX0VM RU0JMwogI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfUEFSVElUSU9OU19FTEVNCTEyCisjZGVm aW5lIE5VTV9CVUZGRVJDQUNIRV9QR1BST0NfRUxFTQk1CiAKIFBHX01PRFVMRV9NQUdJQ19F WFQoCiAJCQkJCS5uYW1lID0gInBnX2J1ZmZlcmNhY2hlIiwKQEAgLTEwNCw2ICsxMDYsNyBA QCBQR19GVU5DVElPTl9JTkZPX1YxKHBnX2J1ZmZlcmNhY2hlX2V2aWN0KTsKIFBHX0ZVTkNU SU9OX0lORk9fVjEocGdfYnVmZmVyY2FjaGVfZXZpY3RfcmVsYXRpb24pOwogUEdfRlVOQ1RJ T05fSU5GT19WMShwZ19idWZmZXJjYWNoZV9ldmljdF9hbGwpOwogUEdfRlVOQ1RJT05fSU5G T19WMShwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEo cGdfYnVmZmVyY2FjaGVfcGdwcm9jKTsKIAogCiAvKiBPbmx5IG5lZWQgdG8gdG91Y2ggbWVt b3J5IG9uY2UgcGVyIGJhY2tlbmQgcHJvY2VzcyBsaWZldGltZSAqLwpAQCAtOTMyLDMgKzkz NSw5NCBAQCBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ ZWxzZQogCQlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7CiB9CisKKy8qCisgKiBJbnF1aXJl IGFib3V0IHBhcnRpdGlvbmluZyBvZiBQR1BST0MgYXJyYXkuCisgKi8KK0RhdHVtCitwZ19i dWZmZXJjYWNoZV9wZ3Byb2MoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlGdW5jQ2FsbENvbnRl eHQgKmZ1bmNjdHg7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCVR1cGxlRGVzYwl0 dXBsZWRlc2M7CisJVHVwbGVEZXNjCWV4cGVjdGVkX3R1cGxlZGVzYzsKKwlIZWFwVHVwbGUJ dHVwbGU7CisJRGF0dW0JCXJlc3VsdDsKKworCWlmIChTUkZfSVNfRklSU1RDQUxMKCkpCisJ eworCQlmdW5jY3R4ID0gU1JGX0ZJUlNUQ0FMTF9JTklUKCk7CisKKwkJLyogU3dpdGNoIGNv bnRleHQgd2hlbiBhbGxvY2F0aW5nIHN0dWZmIHRvIGJlIHVzZWQgaW4gbGF0ZXIgY2FsbHMg Ki8KKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0 aV9jYWxsX21lbW9yeV9jdHgpOworCisJCWlmIChnZXRfY2FsbF9yZXN1bHRfdHlwZShmY2lu Zm8sIE5VTEwsICZleHBlY3RlZF90dXBsZWRlc2MpICE9IFRZUEVGVU5DX0NPTVBPU0lURSkK KwkJCWVsb2coRVJST1IsICJyZXR1cm4gdHlwZSBtdXN0IGJlIGEgcm93IHR5cGUiKTsKKwor CQlpZiAoZXhwZWN0ZWRfdHVwbGVkZXNjLT5uYXR0cyAhPSBOVU1fQlVGRkVSQ0FDSEVfUEdQ Uk9DX0VMRU0pCisJCQllbG9nKEVSUk9SLCAiaW5jb3JyZWN0IG51bWJlciBvZiBvdXRwdXQg YXJndW1lbnRzIik7CisKKwkJLyogQ29uc3RydWN0IGEgdHVwbGUgZGVzY3JpcHRvciBmb3Ig dGhlIHJlc3VsdCByb3dzLiAqLworCQl0dXBsZWRlc2MgPSBDcmVhdGVUZW1wbGF0ZVR1cGxl RGVzYyhleHBlY3RlZF90dXBsZWRlc2MtPm5hdHRzKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5 KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDEsICJwYXJ0aXRpb24iLAorCQkJCQkJICAgSU5U NE9JRCwgLTEsIDApOworCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51 bWJlcikgMiwgIm51bWFfbm9kZSIsCisJCQkJCQkgICBJTlQ0T0lELCAtMSwgMCk7CisJCVR1 cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSAzLCAibnVtX3Byb2Nz IiwKKwkJCQkJCSAgIElOVDRPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1 cGxlZGVzYywgKEF0dHJOdW1iZXIpIDQsICJwZ3Byb2NfcHRyIiwKKwkJCQkJCSAgIElOVDhP SUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1i ZXIpIDUsICJmYXN0cGF0aF9wdHIiLAorCQkJCQkJICAgSU5UOE9JRCwgLTEsIDApOworCisJ CWZ1bmNjdHgtPnVzZXJfZmN0eCA9IEJsZXNzVHVwbGVEZXNjKHR1cGxlZGVzYyk7CisKKwkJ LyogUmV0dXJuIHRvIG9yaWdpbmFsIGNvbnRleHQgd2hlbiBhbGxvY2F0aW5nIHRyYW5zaWVu dCBtZW1vcnkgKi8KKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJ CS8qIFNldCBtYXggY2FsbHMgYW5kIHJlbWVtYmVyIHRoZSB1c2VyIGZ1bmN0aW9uIGNvbnRl eHQuICovCisJCWZ1bmNjdHgtPm1heF9jYWxscyA9IFByb2NQYXJ0aXRpb25Db3VudCgpOwor CX0KKworCWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9TRVRVUCgpOworCisJaWYgKGZ1bmNjdHgt PmNhbGxfY250ciA8IGZ1bmNjdHgtPm1heF9jYWxscykKKwl7CisJCXVpbnQzMgkJaSA9IGZ1 bmNjdHgtPmNhbGxfY250cjsKKworCQlpbnQJCQludW1hX25vZGUsCisJCQkJCW51bV9wcm9j czsKKworCQl2b2lkCSAgICpwZ3Byb2NfcHRyLAorCQkJCSAgICpmYXN0cGF0aF9wdHI7CisK KwkJRGF0dW0JCXZhbHVlc1tOVU1fQlVGRkVSQ0FDSEVfUEdQUk9DX0VMRU1dOworCQlib29s CQludWxsc1tOVU1fQlVGRkVSQ0FDSEVfUEdQUk9DX0VMRU1dOworCisJCVByb2NQYXJ0aXRp b25HZXQoaSwgJm51bWFfbm9kZSwgJm51bV9wcm9jcywKKwkJCQkJCSAmcGdwcm9jX3B0ciwg JmZhc3RwYXRoX3B0cik7CisKKwkJdmFsdWVzWzBdID0gSW50MzJHZXREYXR1bShpKTsKKwkJ bnVsbHNbMF0gPSBmYWxzZTsKKworCQl2YWx1ZXNbMV0gPSBJbnQzMkdldERhdHVtKG51bWFf bm9kZSk7CisJCW51bGxzWzFdID0gZmFsc2U7CisKKwkJdmFsdWVzWzJdID0gSW50MzJHZXRE YXR1bShudW1fcHJvY3MpOworCQludWxsc1syXSA9IGZhbHNlOworCisJCXZhbHVlc1szXSA9 IFBvaW50ZXJHZXREYXR1bShwZ3Byb2NfcHRyKTsKKwkJbnVsbHNbM10gPSBmYWxzZTsKKwor CQl2YWx1ZXNbNF0gPSBQb2ludGVyR2V0RGF0dW0oZmFzdHBhdGhfcHRyKTsKKwkJbnVsbHNb NF0gPSBmYWxzZTsKKworCQkvKiBCdWlsZCBhbmQgcmV0dXJuIHRoZSB0dXBsZS4gKi8KKwkJ dHVwbGUgPSBoZWFwX2Zvcm1fdHVwbGUoKFR1cGxlRGVzYykgZnVuY2N0eC0+dXNlcl9mY3R4 LCB2YWx1ZXMsIG51bGxzKTsKKwkJcmVzdWx0ID0gSGVhcFR1cGxlR2V0RGF0dW0odHVwbGUp OworCisJCVNSRl9SRVRVUk5fTkVYVChmdW5jY3R4LCByZXN1bHQpOworCX0KKwllbHNlCisJ CVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL2Nsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Ns b2cuYwppbmRleCBlODBmYmUxMDljZi4uOTI4ZDEyNmQwZWUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS9jbG9nLmMKQEAgLTU3NCw3ICs1NzQsNyBAQCBUcmFuc2FjdGlvbkdyb3VwVXBk YXRlWGlkU3RhdHVzKFRyYW5zYWN0aW9uSWQgeGlkLCBYaWRTdGF0dXMgc3RhdHVzLAogCS8q IFdhbGsgdGhlIGxpc3QgYW5kIHVwZGF0ZSB0aGUgc3RhdHVzIG9mIGFsbCBYSURzLiAqLwog CXdoaWxlIChuZXh0aWR4ICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCiAJewotCQlQR1BST0MJ ICAgKm5leHRwcm9jID0gJlByb2NHbG9iYWwtPmFsbFByb2NzW25leHRpZHhdOworCQlQR1BS T0MJICAgKm5leHRwcm9jID0gUHJvY0dsb2JhbC0+YWxsUHJvY3NbbmV4dGlkeF07CiAJCWlu dDY0CQl0aGlzcGFnZW5vID0gbmV4dHByb2MtPmNsb2dHcm91cE1lbWJlclBhZ2U7CiAKIAkJ LyoKQEAgLTYzMyw3ICs2MzMsNyBAQCBUcmFuc2FjdGlvbkdyb3VwVXBkYXRlWGlkU3RhdHVz KFRyYW5zYWN0aW9uSWQgeGlkLCBYaWRTdGF0dXMgc3RhdHVzLAogCSAqLwogCXdoaWxlICh3 YWtlaWR4ICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCiAJewotCQlQR1BST0MJICAgKndha2Vw cm9jID0gJlByb2NHbG9iYWwtPmFsbFByb2NzW3dha2VpZHhdOworCQlQR1BST0MJICAgKndh a2Vwcm9jID0gUHJvY0dsb2JhbC0+YWxsUHJvY3Nbd2FrZWlkeF07CiAKIAkJd2FrZWlkeCA9 IHBnX2F0b21pY19yZWFkX3UzMigmd2FrZXByb2MtPmNsb2dHcm91cE5leHQpOwogCQlwZ19h dG9taWNfd3JpdGVfdTMyKCZ3YWtlcHJvYy0+Y2xvZ0dyb3VwTmV4dCwgSU5WQUxJRF9QUk9D X05VTUJFUik7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29w aGFzZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwppbmRleCBk OGUyZmNlMmM5OS4uNzc0NWExOTc0NzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3R3b3BoYXNlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v dHdvcGhhc2UuYwpAQCAtMjgyLDcgKzI4Miw3IEBAIFR3b1BoYXNlU2htZW1Jbml0KHZvaWQp CiAJCQlUd29QaGFzZVN0YXRlLT5mcmVlR1hhY3RzID0gJmd4YWN0c1tpXTsKIAogCQkJLyog YXNzb2NpYXRlIGl0IHdpdGggYSBQR1BST0MgYXNzaWduZWQgYnkgSW5pdFByb2NHbG9iYWwg Ki8KLQkJCWd4YWN0c1tpXS5wZ3Byb2NubyA9IEdldE51bWJlckZyb21QR1Byb2MoJlByZXBh cmVkWGFjdFByb2NzW2ldKTsKKwkJCWd4YWN0c1tpXS5wZ3Byb2NubyA9IEdldE51bWJlckZy b21QR1Byb2MoUHJlcGFyZWRYYWN0UHJvY3NbaV0pOwogCQl9CiAJfQogCWVsc2UKQEAgLTQ0 Nyw2ICs0NDcsNyBAQCBNYXJrQXNQcmVwYXJpbmdHdXRzKEdsb2JhbFRyYW5zYWN0aW9uIGd4 YWN0LCBGdWxsVHJhbnNhY3Rpb25JZCBmeGlkLAogCiAJLyogSW5pdGlhbGl6ZSB0aGUgUEdQ Uk9DIGVudHJ5ICovCiAJTWVtU2V0KHByb2MsIDAsIHNpemVvZihQR1BST0MpKTsKKwlwcm9j LT5wcm9jbnVtYmVyID0gZ3hhY3QtPnBncHJvY25vOwogCWRsaXN0X25vZGVfaW5pdCgmcHJv Yy0+bGlua3MpOwogCXByb2MtPndhaXRTdGF0dXMgPSBQUk9DX1dBSVRfU1RBVFVTX09LOwog CWlmIChMb2NhbFRyYW5zYWN0aW9uSWRJc1ZhbGlkKE15UHJvYy0+dnhpZC5seGlkKSkKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYyBiL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYwppbmRleCA3OTcwOGU1OTI1 OS4uOTJkYjY3ZmE1ZjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1 bmNoX2JhY2tlbmQuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2xhdW5jaF9iYWNr ZW5kLmMKQEAgLTEwNyw4ICsxMDcsOCBAQCB0eXBlZGVmIHN0cnVjdAogCUxXTG9ja1BhZGRl ZCAqTWFpbkxXTG9ja0FycmF5OwogCXNsb2NrX3QgICAgKlByb2NTdHJ1Y3RMb2NrOwogCVBS T0NfSERSICAgKlByb2NHbG9iYWw7Ci0JUEdQUk9DCSAgICpBdXhpbGlhcnlQcm9jczsKLQlQ R1BST0MJICAgKlByZXBhcmVkWGFjdFByb2NzOworCVBHUFJPQwkgICAqKkF1eGlsaWFyeVBy b2NzOworCVBHUFJPQwkgICAqKlByZXBhcmVkWGFjdFByb2NzOwogCXZvbGF0aWxlIFBNU2ln bmFsRGF0YSAqUE1TaWduYWxTdGF0ZTsKIAlQcm9jU2lnbmFsSGVhZGVyICpQcm9jU2lnbmFs OwogCXBpZF90CQlQb3N0bWFzdGVyUGlkOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9wZ2FyY2guYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMKaW5k ZXggNzhlMzllNWY4NjYuLmUyOGUwZjdkM2JkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL3BnYXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNo LmMKQEAgLTI4OSw3ICsyODksNyBAQCBQZ0FyY2hXYWtldXAodm9pZCkKIAkgKiBiZSByZWxh dW5jaGVkIHNob3J0bHkgYW5kIHdpbGwgc3RhcnQgYXJjaGl2aW5nLgogCSAqLwogCWlmIChh cmNoX3BncHJvY25vICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCi0JCVNldExhdGNoKCZQcm9j R2xvYmFsLT5hbGxQcm9jc1thcmNoX3BncHJvY25vXS5wcm9jTGF0Y2gpOworCQlTZXRMYXRj aCgmUHJvY0dsb2JhbC0+YWxsUHJvY3NbYXJjaF9wZ3Byb2Nub10tPnByb2NMYXRjaCk7CiB9 CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVy LmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYwppbmRleCBlMWYx NDJmMjBjNy4uMDExZmVjZmM1OGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvd2Fsc3VtbWFyaXplci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3Vt bWFyaXplci5jCkBAIC02NDksNyArNjQ5LDcgQEAgV2FrZXVwV2FsU3VtbWFyaXplcih2b2lk KQogCUxXTG9ja1JlbGVhc2UoV0FMU3VtbWFyaXplckxvY2spOwogCiAJaWYgKHBncHJvY25v ICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCi0JCVNldExhdGNoKCZQcm9jR2xvYmFsLT5hbGxQ cm9jc1twZ3Byb2Nub10ucHJvY0xhdGNoKTsKKwkJU2V0TGF0Y2goJlByb2NHbG9iYWwtPmFs bFByb2NzW3BncHJvY25vXS0+cHJvY0xhdGNoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZfaW5pdC5jCmluZGV4IGRkOWY1MTUyOWI0Li4yZmQ3ZjkzN2ZmYiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYworKysg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jCkBAIC03NjYsNiArNzY2 LDggQEAgY2hlY2tfZGVidWdfbnVtYShjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1 Y1NvdXJjZSBzb3VyY2UpCiAKIAkJaWYgKHBnX3N0cmNhc2VjbXAoaXRlbSwgImJ1ZmZlcnMi KSA9PSAwKQogCQkJZmxhZ3MgfD0gTlVNQV9CVUZGRVJTOworCQllbHNlIGlmIChwZ19zdHJj YXNlY21wKGl0ZW0sICJwcm9jcyIpID09IDApCisJCQlmbGFncyB8PSBOVU1BX1BST0NTOwog CQllbHNlCiAJCXsKIAkJCUdVQ19jaGVja19lcnJkZXRhaWwoIkludmFsaWQgb3B0aW9uIFwi JXNcIi4iLCBpdGVtKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVy L2ZyZWVsaXN0LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jCmlu ZGV4IDVjZjlhNTY1OTE0Li5hNjY1N2MwZmMxMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9mcmVlbGlzdC5jCkBAIC00NjcsNyArNDY3LDcgQEAgU3RyYXRlZ3lHZXRCdWZmZXIo QnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQzMiAqYnVmX3N0YXRlLCBib29s ICpmcm9tX3IKIAkJICogYWN0dWFsbHkgZmluZSBiZWNhdXNlIHByb2NMYXRjaCBpc24ndCBl dmVyIGZyZWVkLCBzbyB3ZSBqdXN0IGNhbgogCQkgKiBwb3RlbnRpYWxseSBzZXQgdGhlIHdy b25nIHByb2Nlc3MnIChvciBubyBwcm9jZXNzJykgbGF0Y2guCiAJCSAqLwotCQlTZXRMYXRj aCgmUHJvY0dsb2JhbC0+YWxsUHJvY3NbYmd3cHJvY25vXS5wcm9jTGF0Y2gpOworCQlTZXRM YXRjaCgmUHJvY0dsb2JhbC0+YWxsUHJvY3NbYmd3cHJvY25vXS0+cHJvY0xhdGNoKTsKIAl9 CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5 LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYwppbmRleCAyMDBmNzJj NmUyNS4uN2UyOGZiZGZlYTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3Byb2NhcnJheS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5j CkBAIC0yNjgsNyArMjY4LDcgQEAgdHlwZWRlZiBlbnVtIEtBWENvbXByZXNzUmVhc29uCiAK IHN0YXRpYyBQcm9jQXJyYXlTdHJ1Y3QgKnByb2NBcnJheTsKIAotc3RhdGljIFBHUFJPQyAq YWxsUHJvY3M7CitzdGF0aWMgUEdQUk9DICoqYWxsUHJvY3M7CiAKIC8qCiAgKiBDYWNoZSB0 byByZWR1Y2Ugb3ZlcmhlYWQgb2YgcmVwZWF0ZWQgY2FsbHMgdG8gVHJhbnNhY3Rpb25JZElz SW5Qcm9ncmVzcygpCkBAIC0zNjksNiArMzY5LDggQEAgc3RhdGljIGlubGluZSBGdWxsVHJh bnNhY3Rpb25JZCBGdWxsWGlkUmVsYXRpdmVUbyhGdWxsVHJhbnNhY3Rpb25JZCByZWwsCiAJ CQkJCQkJCQkJCQkgIFRyYW5zYWN0aW9uSWQgeGlkKTsKIHN0YXRpYyB2b2lkIEdsb2JhbFZp c1VwZGF0ZUFwcGx5KENvbXB1dGVYaWRIb3Jpem9uc1Jlc3VsdCAqaG9yaXpvbnMpOwogCitz dGF0aWMgdm9pZCBBc3NlcnRDaGVja0FsbFByb2NzKHZvaWQpOworCiAvKgogICogUmVwb3J0 IHNoYXJlZC1tZW1vcnkgc3BhY2UgbmVlZGVkIGJ5IFByb2NBcnJheVNobWVtSW5pdAogICov CkBAIC00NzYsNiArNDc4LDggQEAgUHJvY0FycmF5QWRkKFBHUFJPQyAqcHJvYykKIAlMV0xv Y2tBY3F1aXJlKFByb2NBcnJheUxvY2ssIExXX0VYQ0xVU0lWRSk7CiAJTFdMb2NrQWNxdWly ZShYaWRHZW5Mb2NrLCBMV19FWENMVVNJVkUpOwogCisJQXNzZXJ0Q2hlY2tBbGxQcm9jcygp OworCiAJaWYgKGFycmF5UC0+bnVtUHJvY3MgPj0gYXJyYXlQLT5tYXhQcm9jcykKIAl7CiAJ CS8qCkBAIC01MDIsNyArNTA2LDcgQEAgUHJvY0FycmF5QWRkKFBHUFJPQyAqcHJvYykKIAkJ aW50CQkJdGhpc19wcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07CiAKIAkJQXNz ZXJ0KHRoaXNfcHJvY25vID49IDAgJiYgdGhpc19wcm9jbm8gPCAoYXJyYXlQLT5tYXhQcm9j cyArIE5VTV9BVVhJTElBUllfUFJPQ1MpKTsKLQkJQXNzZXJ0KGFsbFByb2NzW3RoaXNfcHJv Y25vXS5wZ3hhY3RvZmYgPT0gaW5kZXgpOworCQlBc3NlcnQoYWxsUHJvY3NbdGhpc19wcm9j bm9dLT5wZ3hhY3RvZmYgPT0gaW5kZXgpOwogCiAJCS8qIElmIHdlIGhhdmUgZm91bmQgb3Vy IHJpZ2h0IHBvc2l0aW9uIGluIHRoZSBhcnJheSwgYnJlYWsgKi8KIAkJaWYgKHRoaXNfcHJv Y25vID4gcGdwcm9jbm8pCkBAIC01MzgsMTEgKzU0MiwxMyBAQCBQcm9jQXJyYXlBZGQoUEdQ Uk9DICpwcm9jKQogCQlpbnQJCQlwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07 CiAKIAkJQXNzZXJ0KHByb2NubyA+PSAwICYmIHByb2NubyA8IChhcnJheVAtPm1heFByb2Nz ICsgTlVNX0FVWElMSUFSWV9QUk9DUykpOwotCQlBc3NlcnQoYWxsUHJvY3NbcHJvY25vXS5w Z3hhY3RvZmYgPT0gaW5kZXggLSAxKTsKKwkJQXNzZXJ0KGFsbFByb2NzW3Byb2Nub10tPnBn eGFjdG9mZiA9PSBpbmRleCAtIDEpOwogCi0JCWFsbFByb2NzW3Byb2Nub10ucGd4YWN0b2Zm ID0gaW5kZXg7CisJCWFsbFByb2NzW3Byb2Nub10tPnBneGFjdG9mZiA9IGluZGV4OwogCX0K IAorCUFzc2VydENoZWNrQWxsUHJvY3MoKTsKKwogCS8qCiAJICogUmVsZWFzZSBpbiByZXZl cnNlZCBhY3F1aXNpdGlvbiBvcmRlciwgdG8gcmVkdWNlIGZyZXF1ZW5jeSBvZiBoYXZpbmcg dG8KIAkgKiB3YWl0IGZvciBYaWRHZW5Mb2NrIHdoaWxlIGhvbGRpbmcgUHJvY0FycmF5TG9j ay4KQEAgLTU3OCwxMCArNTg0LDEyIEBAIFByb2NBcnJheVJlbW92ZShQR1BST0MgKnByb2Ms IFRyYW5zYWN0aW9uSWQgbGF0ZXN0WGlkKQogCUxXTG9ja0FjcXVpcmUoUHJvY0FycmF5TG9j aywgTFdfRVhDTFVTSVZFKTsKIAlMV0xvY2tBY3F1aXJlKFhpZEdlbkxvY2ssIExXX0VYQ0xV U0lWRSk7CiAKKwlBc3NlcnRDaGVja0FsbFByb2NzKCk7CisKIAlteW9mZiA9IHByb2MtPnBn eGFjdG9mZjsKIAogCUFzc2VydChteW9mZiA+PSAwICYmIG15b2ZmIDwgYXJyYXlQLT5udW1Q cm9jcyk7Ci0JQXNzZXJ0KFByb2NHbG9iYWwtPmFsbFByb2NzW2FycmF5UC0+cGdwcm9jbm9z W215b2ZmXV0ucGd4YWN0b2ZmID09IG15b2ZmKTsKKwlBc3NlcnQoUHJvY0dsb2JhbC0+YWxs UHJvY3NbYXJyYXlQLT5wZ3Byb2Nub3NbbXlvZmZdXS0+cGd4YWN0b2ZmID09IG15b2ZmKTsK IAogCWlmIChUcmFuc2FjdGlvbklkSXNWYWxpZChsYXRlc3RYaWQpKQogCXsKQEAgLTYzNiwx MSArNjQ0LDEzIEBAIFByb2NBcnJheVJlbW92ZShQR1BST0MgKnByb2MsIFRyYW5zYWN0aW9u SWQgbGF0ZXN0WGlkKQogCQlpbnQJCQlwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRl eF07CiAKIAkJQXNzZXJ0KHByb2NubyA+PSAwICYmIHByb2NubyA8IChhcnJheVAtPm1heFBy b2NzICsgTlVNX0FVWElMSUFSWV9QUk9DUykpOwotCQlBc3NlcnQoYWxsUHJvY3NbcHJvY25v XS5wZ3hhY3RvZmYgLSAxID09IGluZGV4KTsKKwkJQXNzZXJ0KGFsbFByb2NzW3Byb2Nub10t PnBneGFjdG9mZiAtIDEgPT0gaW5kZXgpOwogCi0JCWFsbFByb2NzW3Byb2Nub10ucGd4YWN0 b2ZmID0gaW5kZXg7CisJCWFsbFByb2NzW3Byb2Nub10tPnBneGFjdG9mZiA9IGluZGV4Owog CX0KIAorCUFzc2VydENoZWNrQWxsUHJvY3MoKTsKKwogCS8qCiAJICogUmVsZWFzZSBpbiBy ZXZlcnNlZCBhY3F1aXNpdGlvbiBvcmRlciwgdG8gcmVkdWNlIGZyZXF1ZW5jeSBvZiBoYXZp bmcgdG8KIAkgKiB3YWl0IGZvciBYaWRHZW5Mb2NrIHdoaWxlIGhvbGRpbmcgUHJvY0FycmF5 TG9jay4KQEAgLTg2MCw3ICs4NzAsNyBAQCBQcm9jQXJyYXlHcm91cENsZWFyWGlkKFBHUFJP QyAqcHJvYywgVHJhbnNhY3Rpb25JZCBsYXRlc3RYaWQpCiAJLyogV2FsayB0aGUgbGlzdCBh bmQgY2xlYXIgYWxsIFhJRHMuICovCiAJd2hpbGUgKG5leHRpZHggIT0gSU5WQUxJRF9QUk9D X05VTUJFUikKIAl7Ci0JCVBHUFJPQwkgICAqbmV4dHByb2MgPSAmYWxsUHJvY3NbbmV4dGlk eF07CisJCVBHUFJPQwkgICAqbmV4dHByb2MgPSBhbGxQcm9jc1tuZXh0aWR4XTsKIAogCQlQ cm9jQXJyYXlFbmRUcmFuc2FjdGlvbkludGVybmFsKG5leHRwcm9jLCBuZXh0cHJvYy0+cHJv Y0FycmF5R3JvdXBNZW1iZXJYaWQpOwogCkBAIC04ODAsNyArODkwLDcgQEAgUHJvY0FycmF5 R3JvdXBDbGVhclhpZChQR1BST0MgKnByb2MsIFRyYW5zYWN0aW9uSWQgbGF0ZXN0WGlkKQog CSAqLwogCXdoaWxlICh3YWtlaWR4ICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCiAJewotCQlQ R1BST0MJICAgKm5leHRwcm9jID0gJmFsbFByb2NzW3dha2VpZHhdOworCQlQR1BST0MJICAg Km5leHRwcm9jID0gYWxsUHJvY3Nbd2FrZWlkeF07CiAKIAkJd2FrZWlkeCA9IHBnX2F0b21p Y19yZWFkX3UzMigmbmV4dHByb2MtPnByb2NBcnJheUdyb3VwTmV4dCk7CiAJCXBnX2F0b21p Y193cml0ZV91MzIoJm5leHRwcm9jLT5wcm9jQXJyYXlHcm91cE5leHQsIElOVkFMSURfUFJP Q19OVU1CRVIpOwpAQCAtMTUyNiw3ICsxNTM2LDcgQEAgVHJhbnNhY3Rpb25JZElzSW5Qcm9n cmVzcyhUcmFuc2FjdGlvbklkIHhpZCkKIAkJcHhpZHMgPSBvdGhlcl9zdWJ4aWRzdGF0ZXNb cGd4YWN0b2ZmXS5jb3VudDsKIAkJcGdfcmVhZF9iYXJyaWVyKCk7CQkvKiBwYWlycyB3aXRo IGJhcnJpZXIgaW4gR2V0TmV3VHJhbnNhY3Rpb25JZCgpICovCiAJCXBncHJvY25vID0gYXJy YXlQLT5wZ3Byb2Nub3NbcGd4YWN0b2ZmXTsKLQkJcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nu b107CisJCXByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAJCWZvciAoaiA9IHB4aWRzIC0g MTsgaiA+PSAwOyBqLS0pCiAJCXsKIAkJCS8qIEZldGNoIHhpZCBqdXN0IG9uY2UgLSBzZWUg R2V0TmV3VHJhbnNhY3Rpb25JZCAqLwpAQCAtMTYyMiw3ICsxNjMyLDYgQEAgVHJhbnNhY3Rp b25JZElzSW5Qcm9ncmVzcyhUcmFuc2FjdGlvbklkIHhpZCkKIAlyZXR1cm4gZmFsc2U7CiB9 CiAKLQogLyoKICAqIERldGVybWluZSBYSUQgaG9yaXpvbnMuCiAgKgpAQCAtMTc0MCw3ICsx NzQ5LDcgQEAgQ29tcHV0ZVhpZEhvcml6b25zKENvbXB1dGVYaWRIb3Jpem9uc1Jlc3VsdCAq aCkKIAlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5k ZXgrKykKIAl7CiAJCWludAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhd OwotCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQlQR1BST0MJ ICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAJCWludDgJCXN0YXR1c0ZsYWdzID0g UHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3NbaW5kZXhdOwogCQlUcmFuc2FjdGlvbklkIHhpZDsK IAkJVHJhbnNhY3Rpb25JZCB4bWluOwpAQCAtMjIyNCw3ICsyMjMzLDcgQEAgR2V0U25hcHNo b3REYXRhKFNuYXBzaG90IHNuYXBzaG90KQogCQkJVHJhbnNhY3Rpb25JZCB4aWQgPSBVSU5U MzJfQUNDRVNTX09OQ0Uob3RoZXJfeGlkc1twZ3hhY3RvZmZdKTsKIAkJCXVpbnQ4CQlzdGF0 dXNGbGFnczsKIAotCQkJQXNzZXJ0KGFsbFByb2NzW2FycmF5UC0+cGdwcm9jbm9zW3BneGFj dG9mZl1dLnBneGFjdG9mZiA9PSBwZ3hhY3RvZmYpOworCQkJQXNzZXJ0KGFsbFByb2NzW2Fy cmF5UC0+cGdwcm9jbm9zW3BneGFjdG9mZl1dLT5wZ3hhY3RvZmYgPT0gcGd4YWN0b2ZmKTsK IAogCQkJLyoKIAkJCSAqIElmIHRoZSB0cmFuc2FjdGlvbiBoYXMgbm8gWElEIGFzc2lnbmVk LCB3ZSBjYW4gc2tpcCBpdDsgaXQKQEAgLTIyOTgsNyArMjMwNyw3IEBAIEdldFNuYXBzaG90 RGF0YShTbmFwc2hvdCBzbmFwc2hvdCkKIAkJCQkJaWYgKG5zdWJ4aWRzID4gMCkKIAkJCQkJ ewogCQkJCQkJaW50CQkJcGdwcm9jbm8gPSBwZ3Byb2Nub3NbcGd4YWN0b2ZmXTsKLQkJCQkJ CVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCQkJCQlQR1BST0MJ ICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAKIAkJCQkJCXBnX3JlYWRfYmFycmll cigpOwkvKiBwYWlycyB3aXRoIEdldE5ld1RyYW5zYWN0aW9uSWQgKi8KIApAQCAtMjQ5OSw3 ICsyNTA4LDcgQEAgUHJvY0FycmF5SW5zdGFsbEltcG9ydGVkWG1pbihUcmFuc2FjdGlvbklk IHhtaW4sCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5k ZXgrKykKIAl7CiAJCWludAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhd OwotCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQlQR1BST0MJ ICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAJCWludAkJCXN0YXR1c0ZsYWdzID0g UHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3NbaW5kZXhdOwogCQlUcmFuc2FjdGlvbklkIHhpZDsK IApAQCAtMjcyNSw3ICsyNzM0LDcgQEAgR2V0UnVubmluZ1RyYW5zYWN0aW9uRGF0YSh2b2lk KQogCQlpZiAoVHJhbnNhY3Rpb25JZFByZWNlZGVzKHhpZCwgb2xkZXN0RGF0YWJhc2VSdW5u aW5nWGlkKSkKIAkJewogCQkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tp bmRleF07Ci0JCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQkJ UEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCiAJCQlpZiAocHJvYy0+ ZGF0YWJhc2VJZCA9PSBNeURhdGFiYXNlSWQpCiAJCQkJb2xkZXN0RGF0YWJhc2VSdW5uaW5n WGlkID0geGlkOwpAQCAtMjc1Niw3ICsyNzY1LDcgQEAgR2V0UnVubmluZ1RyYW5zYWN0aW9u RGF0YSh2b2lkKQogCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAtPm51bVByb2Nz OyBpbmRleCsrKQogCQl7CiAJCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9z W2luZGV4XTsKLQkJCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJ CQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAJCQlpbnQJCQluc3Vi eGlkczsKIAogCQkJLyoKQEAgLTI4NTgsNyArMjg2Nyw3IEBAIEdldE9sZGVzdEFjdGl2ZVRy YW5zYWN0aW9uSWQoYm9vbCBpbkNvbW1pdE9ubHksIGJvb2wgYWxsRGJzKQogCXsKIAkJVHJh bnNhY3Rpb25JZCB4aWQ7CiAJCWludAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3Nb aW5kZXhdOwotCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQlQ R1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAKIAkJLyogRmV0Y2ggeGlk IGp1c3Qgb25jZSAtIHNlZSBHZXROZXdUcmFuc2FjdGlvbklkICovCiAJCXhpZCA9IFVJTlQz Ml9BQ0NFU1NfT05DRShvdGhlcl94aWRzW2luZGV4XSk7CkBAIC0zMDIwLDcgKzMwMjksNyBA QCBHZXRWaXJ0dWFsWElEc0RlbGF5aW5nQ2hrcHQoaW50ICpudnhpZHMsIGludCB0eXBlKQog CWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5UC0+bnVtUHJvY3M7IGluZGV4KyspCiAJ ewogCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKLQkJUEdQ Uk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJUEdQUk9DCSAgICpwcm9j ID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCiAJCWlmICgocHJvYy0+ZGVsYXlDaGtwdEZsYWdz ICYgdHlwZSkgIT0gMCkKIAkJewpAQCAtMzA2MSw3ICszMDcwLDcgQEAgSGF2ZVZpcnR1YWxY SURzRGVsYXlpbmdDaGtwdChWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqdnhpZHMsIGludCBudnhp ZHMsIGludCB0eXBlKQogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5UC0+bnVtUHJv Y3M7IGluZGV4KyspCiAJewogCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9z W2luZGV4XTsKLQkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJ UEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCQlWaXJ0dWFsVHJhbnNh Y3Rpb25JZCB2eGlkOwogCiAJCUdFVF9WWElEX0ZST01fUEdQUk9DKHZ4aWQsICpwcm9jKTsK QEAgLTMxODksNyArMzE5OCw3IEBAIEJhY2tlbmRQaWRHZXRQcm9jV2l0aExvY2soaW50IHBp ZCkKIAogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5UC0+bnVtUHJvY3M7IGluZGV4 KyspCiAJewotCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbYXJyYXlQLT5wZ3Byb2Nu b3NbaW5kZXhdXTsKKwkJUEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbYXJyYXlQLT5wZ3By b2Nub3NbaW5kZXhdXTsKIAogCQlpZiAocHJvYy0+cGlkID09IHBpZCkKIAkJewpAQCAtMzIz Miw3ICszMjQxLDcgQEAgQmFja2VuZFhpZEdldFBpZChUcmFuc2FjdGlvbklkIHhpZCkKIAkJ aWYgKG90aGVyX3hpZHNbaW5kZXhdID09IHhpZCkKIAkJewogCQkJaW50CQkJcGdwcm9jbm8g PSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07Ci0JCQlQR1BST0MJICAgKnByb2MgPSAmYWxs UHJvY3NbcGdwcm9jbm9dOworCQkJUEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdwcm9j bm9dOwogCiAJCQlyZXN1bHQgPSBwcm9jLT5waWQ7CiAJCQlicmVhazsKQEAgLTMzMDEsNyAr MzMxMCw3IEBAIEdldEN1cnJlbnRWaXJ0dWFsWElEcyhUcmFuc2FjdGlvbklkIGxpbWl0WG1p biwgYm9vbCBleGNsdWRlWG1pbjAsCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlQ LT5udW1Qcm9jczsgaW5kZXgrKykKIAl7CiAJCWludAkJCXBncHJvY25vID0gYXJyYXlQLT5w Z3Byb2Nub3NbaW5kZXhdOwotCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9j bm9dOworCQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAJCXVpbnQ4 CQlzdGF0dXNGbGFncyA9IFByb2NHbG9iYWwtPnN0YXR1c0ZsYWdzW2luZGV4XTsKIAogCQlp ZiAocHJvYyA9PSBNeVByb2MpCkBAIC0zNDAzLDcgKzM0MTIsNyBAQCBHZXRDb25mbGljdGlu Z1ZpcnR1YWxYSURzKFRyYW5zYWN0aW9uSWQgbGltaXRYbWluLCBPaWQgZGJPaWQpCiAJZm9y IChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5kZXgrKykKIAl7CiAJ CWludAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwotCQlQR1BST0MJ ICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQlQR1BST0MJICAgKnByb2MgPSBh bGxQcm9jc1twZ3Byb2Nub107CiAKIAkJLyogRXhjbHVkZSBwcmVwYXJlZCB0cmFuc2FjdGlv bnMgKi8KIAkJaWYgKHByb2MtPnBpZCA9PSAwKQpAQCAtMzQ2OCw3ICszNDc3LDcgQEAgU2ln bmFsVmlydHVhbFRyYW5zYWN0aW9uKFZpcnR1YWxUcmFuc2FjdGlvbklkIHZ4aWQsIFByb2NT aWduYWxSZWFzb24gc2lnbW9kZSwKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAt Pm51bVByb2NzOyBpbmRleCsrKQogCXsKIAkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBn cHJvY25vc1tpbmRleF07Ci0JCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nu b107CisJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAkJVmlydHVh bFRyYW5zYWN0aW9uSWQgcHJvY3Z4aWQ7CiAKIAkJR0VUX1ZYSURfRlJPTV9QR1BST0MocHJv Y3Z4aWQsICpwcm9jKTsKQEAgLTM1MjMsNyArMzUzMiw3IEBAIE1pbmltdW1BY3RpdmVCYWNr ZW5kcyhpbnQgbWluKQogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5UC0+bnVtUHJv Y3M7IGluZGV4KyspCiAJewogCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9z W2luZGV4XTsKLQkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJ UEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCiAJCS8qCiAJCSAqIFNp bmNlIHdlJ3JlIG5vdCBob2xkaW5nIGEgbG9jaywgbmVlZCB0byBiZSBwcmVwYXJlZCB0byBk ZWFsIHdpdGgKQEAgLTM1NjksNyArMzU3OCw3IEBAIENvdW50REJCYWNrZW5kcyhPaWQgZGF0 YWJhc2VpZCkKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAtPm51bVByb2NzOyBp bmRleCsrKQogCXsKIAkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRl eF07Ci0JCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCVBHUFJP QwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAogCQlpZiAocHJvYy0+cGlkID09 IDApCiAJCQljb250aW51ZTsJCQkvKiBkbyBub3QgY291bnQgcHJlcGFyZWQgeGFjdHMgKi8K QEAgLTM1OTgsNyArMzYwNyw3IEBAIENvdW50REJDb25uZWN0aW9ucyhPaWQgZGF0YWJhc2Vp ZCkKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAtPm51bVByb2NzOyBpbmRleCsr KQogCXsKIAkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07Ci0J CVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCVBHUFJPQwkgICAq cHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAogCQlpZiAocHJvYy0+cGlkID09IDApCiAJ CQljb250aW51ZTsJCQkvKiBkbyBub3QgY291bnQgcHJlcGFyZWQgeGFjdHMgKi8KQEAgLTM2 MjksNyArMzYzOCw3IEBAIENhbmNlbERCQmFja2VuZHMoT2lkIGRhdGFiYXNlaWQsIFByb2NT aWduYWxSZWFzb24gc2lnbW9kZSwgYm9vbCBjb25mbGljdFBlbmRpbmcpCiAJZm9yIChpbmRl eCA9IDA7IGluZGV4IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5kZXgrKykKIAl7CiAJCWludAkJ CXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwotCQlQR1BST0MJICAgKnBy b2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9j c1twZ3Byb2Nub107CiAKIAkJaWYgKGRhdGFiYXNlaWQgPT0gSW52YWxpZE9pZCB8fCBwcm9j LT5kYXRhYmFzZUlkID09IGRhdGFiYXNlaWQpCiAJCXsKQEAgLTM2NzAsNyArMzY3OSw3IEBA IENvdW50VXNlckJhY2tlbmRzKE9pZCByb2xlaWQpCiAJZm9yIChpbmRleCA9IDA7IGluZGV4 IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5kZXgrKykKIAl7CiAJCWludAkJCXBncHJvY25vID0g YXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwotCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJv Y3NbcGdwcm9jbm9dOworCQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107 CiAKIAkJaWYgKHByb2MtPnBpZCA9PSAwKQogCQkJY29udGludWU7CQkJLyogZG8gbm90IGNv dW50IHByZXBhcmVkIHhhY3RzICovCkBAIC0zNzMzLDcgKzM3NDIsNyBAQCBDb3VudE90aGVy REJCYWNrZW5kcyhPaWQgZGF0YWJhc2VJZCwgaW50ICpuYmFja2VuZHMsIGludCAqbnByZXBh cmVkKQogCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAtPm51bVByb2NzOyBpbmRl eCsrKQogCQl7CiAJCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4 XTsKLQkJCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCQlQR1BS T0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAJCQl1aW50OAkJc3RhdHVzRmxh Z3MgPSBQcm9jR2xvYmFsLT5zdGF0dXNGbGFnc1tpbmRleF07CiAKIAkJCWlmIChwcm9jLT5k YXRhYmFzZUlkICE9IGRhdGFiYXNlSWQpCkBAIC0zNzk5LDcgKzM4MDgsNyBAQCBUZXJtaW5h dGVPdGhlckRCQmFja2VuZHMoT2lkIGRhdGFiYXNlSWQpCiAJZm9yIChpID0gMDsgaSA8IHBy b2NBcnJheS0+bnVtUHJvY3M7IGkrKykKIAl7CiAJCWludAkJCXBncHJvY25vID0gYXJyYXlQ LT5wZ3Byb2Nub3NbaV07Ci0JCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nu b107CisJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAogCQlpZiAo cHJvYy0+ZGF0YWJhc2VJZCAhPSBkYXRhYmFzZUlkKQogCQkJY29udGludWU7CkBAIC01MjI3 LDMgKzUyMzYsMTUgQEAgS25vd25Bc3NpZ25lZFhpZHNSZXNldCh2b2lkKQogCiAJTFdMb2Nr UmVsZWFzZShQcm9jQXJyYXlMb2NrKTsKIH0KKworc3RhdGljIHZvaWQKK0Fzc2VydENoZWNr QWxsUHJvY3Modm9pZCkKK3sKKwlQcm9jQXJyYXlTdHJ1Y3QgKmFycmF5UCA9IHByb2NBcnJh eTsKKwlpbnQJCW51bVByb2NzID0gYXJyYXlQLT5udW1Qcm9jczsKKworCWZvciAoaW50IHBn eGFjdG9mZiA9IDA7IHBneGFjdG9mZiA8IG51bVByb2NzOyBwZ3hhY3RvZmYrKykKKwl7CisJ CUFzc2VydChhbGxQcm9jc1thcnJheVAtPnBncHJvY25vc1twZ3hhY3RvZmZdXS0+cGd4YWN0 b2ZmID09IHBneGFjdG9mZik7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9sbWdyL2xvY2suYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMKaW5k ZXggNGNjN2Y2NDVjMzEuLmQwMWY0ODY4NzZkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9z dG9yYWdlL2xtZ3IvbG9jay5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2Nr LmMKQEAgLTI4NzYsNyArMjg3Niw3IEBAIEZhc3RQYXRoVHJhbnNmZXJSZWxhdGlvbkxvY2tz KExvY2tNZXRob2QgbG9ja01ldGhvZFRhYmxlLCBjb25zdCBMT0NLVEFHICpsb2NrdGFnCiAJ ICovCiAJZm9yIChpID0gMDsgaSA8IFByb2NHbG9iYWwtPmFsbFByb2NDb3VudDsgaSsrKQog CXsKLQkJUEdQUk9DCSAgICpwcm9jID0gJlByb2NHbG9iYWwtPmFsbFByb2NzW2ldOworCQlQ R1BST0MJICAgKnByb2MgPSBQcm9jR2xvYmFsLT5hbGxQcm9jc1tpXTsKIAkJdWludDMyCQlq OwogCiAJCUxXTG9ja0FjcXVpcmUoJnByb2MtPmZwSW5mb0xvY2ssIExXX0VYQ0xVU0lWRSk7 CkBAIC0zMTM1LDcgKzMxMzUsNyBAQCBHZXRMb2NrQ29uZmxpY3RzKGNvbnN0IExPQ0tUQUcg KmxvY2t0YWcsIExPQ0tNT0RFIGxvY2ttb2RlLCBpbnQgKmNvdW50cCkKIAkJICovCiAJCWZv ciAoaSA9IDA7IGkgPCBQcm9jR2xvYmFsLT5hbGxQcm9jQ291bnQ7IGkrKykKIAkJewotCQkJ UEdQUk9DCSAgICpwcm9jID0gJlByb2NHbG9iYWwtPmFsbFByb2NzW2ldOworCQkJUEdQUk9D CSAgICpwcm9jID0gUHJvY0dsb2JhbC0+YWxsUHJvY3NbaV07CiAJCQl1aW50MzIJCWo7CiAK IAkJCS8qIEEgYmFja2VuZCBuZXZlciBibG9ja3MgaXRzZWxmICovCkBAIC0zODIyLDcgKzM4 MjIsNyBAQCBHZXRMb2NrU3RhdHVzRGF0YSh2b2lkKQogCSAqLwogCWZvciAoaSA9IDA7IGkg PCBQcm9jR2xvYmFsLT5hbGxQcm9jQ291bnQ7ICsraSkKIAl7Ci0JCVBHUFJPQwkgICAqcHJv YyA9ICZQcm9jR2xvYmFsLT5hbGxQcm9jc1tpXTsKKwkJUEdQUk9DCSAgICpwcm9jID0gUHJv Y0dsb2JhbC0+YWxsUHJvY3NbaV07CiAKIAkJLyogU2tpcCBiYWNrZW5kcyB3aXRoIHBpZD0w LCBhcyB0aGV5IGRvbid0IGhvbGQgZmFzdC1wYXRoIGxvY2tzICovCiAJCWlmIChwcm9jLT5w aWQgPT0gMCkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCmluZGV4IDk2ZjI5YWFmYzM5Li43 MGNjZmViZWY1NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2Mu YworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCkBAIC0yOSwyMSArMjks MzIgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpZmRlZiBVU0VfTElCTlVN QQorI2luY2x1ZGUgPHNjaGVkLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPHNpZ25hbC5oPgog I2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAKKyNpZmRlZiBV U0VfTElCTlVNQQorI2luY2x1ZGUgPG51bWEuaD4KKyNpbmNsdWRlIDxudW1haWYuaD4KKyNl bmRpZgorCiAjaW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKICNpbmNsdWRlICJhY2Nlc3Mv dHdvcGhhc2UuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3V0aWxzLmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicG9ydC9wZ19u dW1hLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCiAjaW5jbHVkZSAi cmVwbGljYXRpb24vc2xvdHN5bmMuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zeW5jcmVw LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9jb25kaXRpb25fdmFyaWFibGUuaCIKICNpbmNsdWRl ICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgorI2luY2x1ZGUg InN0b3JhZ2UvcGdfc2htZW0uaCIKICNpbmNsdWRlICJzdG9yYWdlL3Btc2lnbmFsLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXku aCIKQEAgLTc2LDggKzg3LDggQEAgTk9OX0VYRUNfU1RBVElDIHNsb2NrX3QgKlByb2NTdHJ1 Y3RMb2NrID0gTlVMTDsKIAogLyogUG9pbnRlcnMgdG8gc2hhcmVkLW1lbW9yeSBzdHJ1Y3R1 cmVzICovCiBQUk9DX0hEUiAgICpQcm9jR2xvYmFsID0gTlVMTDsKLU5PTl9FWEVDX1NUQVRJ QyBQR1BST0MgKkF1eGlsaWFyeVByb2NzID0gTlVMTDsKLVBHUFJPQwkgICAqUHJlcGFyZWRY YWN0UHJvY3MgPSBOVUxMOworTk9OX0VYRUNfU1RBVElDIFBHUFJPQyAqKkF1eGlsaWFyeVBy b2NzID0gTlVMTDsKK1BHUFJPQwkgICAqKlByZXBhcmVkWGFjdFByb2NzID0gTlVMTDsKIAog c3RhdGljIERlYWRMb2NrU3RhdGUgZGVhZGxvY2tfc3RhdGUgPSBEU19OT1RfWUVUX0NIRUNL RUQ7CiAKQEAgLTkwLDYgKzEwMSwyOSBAQCBzdGF0aWMgdm9pZCBBdXhpbGlhcnlQcm9jS2ls bChpbnQgY29kZSwgRGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lkIENoZWNrRGVhZExvY2sodm9p ZCk7CiAKIAorLyogbnVtYmVyIG9mIE5VTUEgbm9kZXMgKGFzIHJldHVybmVkIGJ5IG51bWFf bnVtX2NvbmZpZ3VyZWRfbm9kZXMpICovCitzdGF0aWMgaW50CW51bWFfbm9kZXMgPSAtMTsJ LyogbnVtYmVyIG9mIG5vZGVzIHdoZW4gc2l6aW5nICovCitzdGF0aWMgU2l6ZSBudW1hX3Bh Z2Vfc2l6ZSA9IDA7IC8qIHBhZ2UgdXNlZCB0byBzaXplIHBhcnRpdGlvbnMgKi8KK3N0YXRp YyBib29sIG51bWFfY2FuX3BhcnRpdGlvbiA9IGZhbHNlOyAvKiBjYW4gbWFwIHRvIE5VTUEg bm9kZXM/ICovCitzdGF0aWMgaW50CW51bWFfcHJvY3NfcGVyX25vZGUgPSAtMTsJLyogcGdw cm9jcyBwZXIgbm9kZSAqLworCitzdGF0aWMgdm9pZCBwZ3Byb2NfcGFydGl0aW9uc19wcmVw YXJlKHZvaWQpOworc3RhdGljIGNoYXIgKnBncHJvY19wYXJ0aXRpb25faW5pdChjaGFyICpw dHIsIGludCBudW1fcHJvY3MsCisJCQkJCQkJCSAgIGludCBhbGxwcm9jc19pbmRleCwgaW50 IG5vZGUpOworc3RhdGljIGNoYXIgKmZhc3RwYXRoX3BhcnRpdGlvbl9pbml0KGNoYXIgKnB0 ciwgaW50IG51bV9wcm9jcywKKwkJCQkJCQkJCSBpbnQgYWxscHJvY3NfaW5kZXgsIGludCBu b2RlLAorCQkJCQkJCQkJIFNpemUgZnBMb2NrQml0c1NpemUsIFNpemUgZnBSZWxJZFNpemUp OworCit0eXBlZGVmIHN0cnVjdCBQR1Byb2NQYXJ0aXRpb24KK3sKKwlpbnQJCQludW1fcHJv Y3M7CisJaW50CQkJbnVtYV9ub2RlOworCXZvaWQJICAgKnBncHJvY19wdHI7CisJdm9pZAkg ICAqZmFzdHBhdGhfcHRyOworfSBQR1Byb2NQYXJ0aXRpb247CisKK3N0YXRpYyBQR1Byb2NQ YXJ0aXRpb24gKnBhcnRpdGlvbnMgPSBOVUxMOworCiAvKgogICogUmVwb3J0IHNoYXJlZC1t ZW1vcnkgc3BhY2UgbmVlZGVkIGJ5IFBHUFJPQy4KICAqLwpAQCAtMTAwLDExICsxMzQsMzYg QEAgUEdQcm9jU2htZW1TaXplKHZvaWQpCiAJU2l6ZQkJVG90YWxQcm9jcyA9CiAJCWFkZF9z aXplKE1heEJhY2tlbmRzLCBhZGRfc2l6ZShOVU1fQVVYSUxJQVJZX1BST0NTLCBtYXhfcHJl cGFyZWRfeGFjdHMpKTsKIAorCXNpemUgPSBhZGRfc2l6ZShzaXplLCBDQUNIRUxJTkVBTElH TihtdWxfc2l6ZShUb3RhbFByb2NzLCBzaXplb2YoUEdQUk9DICopKSkpOwogCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShUb3RhbFByb2NzLCBzaXplb2YoUEdQUk9DKSkpOwog CXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShUb3RhbFByb2NzLCBzaXplb2YoKlBy b2NHbG9iYWwtPnhpZHMpKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRv dGFsUHJvY3MsIHNpemVvZigqUHJvY0dsb2JhbC0+c3VieGlkU3RhdGVzKSkpOwogCXNpemUg PSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShUb3RhbFByb2NzLCBzaXplb2YoKlByb2NHbG9i YWwtPnN0YXR1c0ZsYWdzKSkpOwogCisJLyoKKwkgKiBUbyBzdXBwb3J0IE5VTUEgcGFydGl0 aW9uaW5nLCB0aGUgUEdQUk9DIGFycmF5IHdpbGwgYmUgZGl2aWRlZCBpbnRvCisJICogbXVs dGlwbGUgY2h1bmtzIC0gb25lIHBlciBOVU1BIG5vZGUsIGFuZCBvbmUgZXh0cmEgZm9yIGF1 eGlsaWFyeS8yUEMKKwkgKiBlbnRyaWVzICh3aGljaCBhcmUgbm90IGFzc2lnbmVkIHRvIGFu eSBOVU1BIG5vZGUpLgorCSAqCisJICogV2UgY2FuJ3Qgc2ltcGx5IG1hcCBwYWdlcyBvZiBh IHNpbmdsZSBjb250aW51b3VzIGFycmF5LCBiZWNhdXNlIHRoZQorCSAqIFBHUFJPQyBlbnRy aWVzIGFyZSB2ZXJ5IHNtYWxsIGFuZCB0b28gbWFueSBvZiB0aGVtIHdvdWxkIGZpdCBvbiBh CisJICogc2luZ2xlIHBhZ2UgKGF0IGxlYXN0IHdpdGggaHVnZSBwYWdlcykuIEZhciBtb3Jl IHRoYW4gcmVhc29uYWJsZSB2YWx1ZXMKKwkgKiBvZiBtYXhfY29ubmVjdGlvbnMuIFNvIGlu c3RlYWQgd2UgY3V0IHRoZSBhcnJheSBpbnRvIHNlcGFyYXRlIHBpZWNlcworCSAqIGZvciBl YWNoIG5vZGUuCisJICoKKwkgKiBFYWNoIHBpZWNlIG1heSBuZWVkIHVwIHRvIG9uZSBtZW1v cnkgcGFnZSBvZiBwYWRkaW5nLCB0byBtYWtlIGl0CisJICogYWxpZ25lZCB3aXRoIG1lbW9y eSBwYWdlIChmb3IgTlVNQSksIFNvIHdlIGp1c3QgYWRkIGEgcGFnZSAtIGl0J3MgYSBiaXQK KwkgKiB3YXN0ZWZ1bCwgYnV0IHNob3VsZCBub3QgbWF0dGVyIG11Y2ggLSBOVU1BIGlzIG1l YW50IGZvciBsYXJnZSBib3hlcywKKwkgKiBzbyBhIGNvdXBsZSBwYWdlcyBpcyBuZWdsaWdp YmxlLgorCSAqCisJICogV2Ugb25seSBkbyB0aGlzIHdpdGggTlVNQSBwYXJ0aXRpb25pbmcu IFdpdGggdGhlIEdVQyBkaXNhYmxlZCwgb3Igd2hlbgorCSAqIHdlIGZpbmQgd2UgY2FuJ3Qg ZG8gdGhhdCBmb3Igc29tZSByZWFzb24sIHdlIGp1c3QgYWxsb2NhdGUgdGhlIFBHUFJPQwor CSAqIGFycmF5IGFzIGEgc2luZ2xlIGNodW5rLiBUaGlzIGlzIGRldGVybWluZWQgYnkgdGhl IGVhcmxpZXIgY2FsbCB0bworCSAqIHBncHJvY19wYXJ0aXRpb25zX3ByZXBhcmUoKS4KKwkg KgorCSAqIFhYWCBJdCBtaWdodCBiZSBtb3JlIHBhaW5mdWwgd2l0aCB2ZXJ5IGxhcmdlIGh1 Z2UgcGFnZXMgKGUuZy4gMUdCKS4KKwkgKi8KKwogCXJldHVybiBzaXplOwogfQogCkBAIC0x MjksNiArMTg4LDYwIEBAIEZhc3RQYXRoTG9ja1NobWVtU2l6ZSh2b2lkKQogCiAJc2l6ZSA9 IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIChmcExvY2tCaXRzU2l6ZSAr IGZwUmVsSWRTaXplKSkpOwogCisJLyoKKwkgKiBXaGVuIGFwcGx5aW5nIE5VTUEgdG8gdGhl IGZhc3QtcGF0aCBsb2Nrcywgd2UgZm9sbG93IHRoZSBzYW1lIGxvZ2ljIGFzCisJICogZm9y IFBHUFJPQyBlbnRyaWVzLiBTZWUgdGhlIGNvbW1lbnRzIGluIFBHUHJvY1NobWVtU2l6ZSgp LgorCSAqCisJICogSWYgUEdQUk9DIHBhcnRpdGlvbmluZyBpcyBlbmFibGVkLCBhbmQgd2Ug ZGVjaWRlZCBpdCdzIHBvc3NpYmxlLCB3ZQorCSAqIG5lZWQgdG8gYWRkIG9uZSBtZW1vcnkg cGFnZSBwZXIgTlVNQSBub2RlIChhbmQgb25lIGZvciBhdXhpbGlhcnkvMlBDCisJICogcHJv Y2Vzc2VzKSB0byBhbGxvdyBwcm9wZXIgYWxpZ25tZW50LgorCSAqCisJICogWFhYIFRoaXMg aXMgYSBhIGJpdCB3YXN0ZWZ1bCwgYmVjYXVzZSBpdCBtaWdodCBhY3R1YWxseSBhZGQgcGFn ZXMgZXZlbgorCSAqIHdoZW4gbm90IHN0cmljdGx5IG5lZWRlZCAoaWYgaXQncyBhbHJlYWR5 IGFsaWduZWQpLiBBbmQgd2UgYWx3YXlzCisJICogYXNzdW1lIHdlJ2xsIGFkZCBhIHdob2xl IHBhZ2UsIGV2ZW4gaWYgdGhlIGFsaWdubWVudCBuZWVkcyBvbmx5IGxlc3MKKwkgKiBtZW1v cnkuCisJICovCisJaWYgKCgobnVtYV9mbGFncyAmIE5VTUFfUFJPQ1MpICE9IDApICYmIG51 bWFfY2FuX3BhcnRpdGlvbikKKwl7CisJCUFzc2VydChudW1hX25vZGVzID4gMCk7CisJCXNp emUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZSgobnVtYV9ub2RlcyArIDEpLCBudW1hX3Bh Z2Vfc2l6ZSkpOworCX0KKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgU2l6ZQorUEdQ cm9jUGFydGl0aW9uc1NobWVtU2l6ZSh2b2lkKQoreworCVNpemUJCXNpemUgPSAwOworCisJ LyoKKwkgKiBJZiBQR1BST0MgcGFydGl0aW9uaW5nIGlzIGVuYWJsZWQsIGFuZCB3ZSBkZWNp ZGVkIGl0J3MgcG9zc2libGUsIHdlCisJICogbmVlZCB0byBhZGQgb25lIG1lbW9yeSBwYWdl IHBlciBOVU1BIG5vZGUgKGFuZCBvbmUgZm9yIGF1eGlsaWFyeS8yUEMKKwkgKiBwcm9jZXNz ZXMpIHRvIGFsbG93IHByb3BlciBhbGlnbm1lbnQuCisJICoKKwkgKiBYWFggVGhpcyBpcyBh IGEgYml0IHdhc3RlZnVsLCBiZWNhdXNlIGl0IG1pZ2h0IGFjdHVhbGx5IGFkZCBwYWdlcyBl dmVuCisJICogd2hlbiBub3Qgc3RyaWN0bHkgbmVlZGVkIChpZiBpdCdzIGFscmVhZHkgYWxp Z25lZCkuIEFuZCB3ZSBhbHdheXMKKwkgKiBhc3N1bWUgd2UnbGwgYWRkIGEgd2hvbGUgcGFn ZSwgZXZlbiBpZiB0aGUgYWxpZ25tZW50IG5lZWRzIG9ubHkgbGVzcworCSAqIG1lbW9yeS4K KwkgKi8KKwlpZiAoKChudW1hX2ZsYWdzICYgTlVNQV9QUk9DUykgIT0gMCkgJiYgbnVtYV9j YW5fcGFydGl0aW9uKQorCXsKKwkJQXNzZXJ0KG51bWFfbm9kZXMgPiAwKTsKKwkJc2l6ZSA9 IGFkZF9zaXplKHNpemUsIG11bF9zaXplKChudW1hX25vZGVzICsgMSksIG51bWFfcGFnZV9z aXplKSk7CisKKwkJLyoKKwkJICogQWxzbyBhY2NvdW50IGZvciBhIHNtYWxsIHJlZ2lzdHJ5 IG9mIHBhcnRpdGlvbnMsIGEgc2ltcGxlIGFycmF5IG9mCisJCSAqIHBhcnRpdGlvbnMgYXQg dGhlIGJlZ2lubmluZy4KKwkJICovCisJCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6 ZSgobnVtYV9ub2RlcyArIDEpLCBzaXplb2YoUEdQcm9jUGFydGl0aW9uKSkpOworCX0KKwll bHNlCisJeworCQkvKiBvdGhlcndpc2UgYWRkIG9ubHkgYSB0aW55IHJlZ2lzdHJ5LCB3aXRo IGEgc2luZ2xlIHBhcnRpdGlvbiAqLworCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgc2l6ZW9m KFBHUHJvY1BhcnRpdGlvbikpOworCX0KKwogCXJldHVybiBzaXplOwogfQogCkBAIC0xNDAs MTIgKzI1MywxNiBAQCBQcm9jR2xvYmFsU2htZW1TaXplKHZvaWQpCiB7CiAJU2l6ZQkJc2l6 ZSA9IDA7CiAKKwkvKiBjYWxjdWxhdGUgcGFydGl0aW9uIGluZm8gZm9yIHBncHJvYyBlbnRy aWVzIGV0YyAqLworCXBncHJvY19wYXJ0aXRpb25zX3ByZXBhcmUoKTsKKwogCS8qIFByb2NH bG9iYWwgKi8KIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgc2l6ZW9mKFBST0NfSERSKSk7CiAJ c2l6ZSA9IGFkZF9zaXplKHNpemUsIHNpemVvZihzbG9ja190KSk7CiAKIAlzaXplID0gYWRk X3NpemUoc2l6ZSwgUEdQcm9jU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBGYXN0UGF0aExvY2tTaG1lbVNpemUoKSk7CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFBH UHJvY1BhcnRpdGlvbnNTaG1lbVNpemUoKSk7CiAKIAlyZXR1cm4gc2l6ZTsKIH0KQEAgLTE5 MSw3ICszMDgsNyBAQCBQcm9jR2xvYmFsU2VtYXModm9pZCkKIHZvaWQKIEluaXRQcm9jR2xv YmFsKHZvaWQpCiB7Ci0JUEdQUk9DCSAgICpwcm9jczsKKwlQR1BST0MJICAqKnByb2NzOwog CWludAkJCWksCiAJCQkJajsKIAlib29sCQlmb3VuZDsKQEAgLTIxMCw2ICszMjcsOSBAQCBJ bml0UHJvY0dsb2JhbCh2b2lkKQogCQlTaG1lbUluaXRTdHJ1Y3QoIlByb2MgSGVhZGVyIiwg c2l6ZW9mKFBST0NfSERSKSwgJmZvdW5kKTsKIAlBc3NlcnQoIWZvdW5kKTsKIAorCS8qIFhY WCBjYWxsIGFnYWluLCBFWEVDX0JBQ0tFTkQgbWF5IG5vdCBzZWUgdGhlIGFscmVhZHkgY29t cHV0ZWQgdmFsdWUgKi8KKwlwZ3Byb2NfcGFydGl0aW9uc19wcmVwYXJlKCk7CisKIAkvKgog CSAqIEluaXRpYWxpemUgdGhlIGRhdGEgc3RydWN0dXJlcy4KIAkgKi8KQEAgLTIyNCw2ICsz NDQsMTUgQEAgSW5pdFByb2NHbG9iYWwodm9pZCkKIAlwZ19hdG9taWNfaW5pdF91MzIoJlBy b2NHbG9iYWwtPnByb2NBcnJheUdyb3VwRmlyc3QsIElOVkFMSURfUFJPQ19OVU1CRVIpOwog CXBnX2F0b21pY19pbml0X3UzMigmUHJvY0dsb2JhbC0+Y2xvZ0dyb3VwRmlyc3QsIElOVkFM SURfUFJPQ19OVU1CRVIpOwogCisJLyogUEdQUk9DIHBhcnRpdGlvbiByZWdpc3RyeSAqLwor CXJlcXVlc3RTaXplID0gUEdQcm9jUGFydGl0aW9uc1NobWVtU2l6ZSgpOworCisJcHRyID0g U2htZW1Jbml0U3RydWN0KCJQR1BST0MgcGFydGl0aW9ucyIsCisJCQkJCQkgIHJlcXVlc3RT aXplLAorCQkJCQkJICAmZm91bmQpOworCisJcGFydGl0aW9ucyA9IChQR1Byb2NQYXJ0aXRp b24gKikgcHRyOworCiAJLyoKIAkgKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgYWxsIHRoZSBQ R1BST0Mgc3RydWN0dXJlcyB3ZSdsbCBuZWVkLiAgVGhlcmUgYXJlCiAJICogc2l4IHNlcGFy YXRlIGNvbnN1bWVyczogKDEpIG5vcm1hbCBiYWNrZW5kcywgKDIpIGF1dG92YWN1dW0gd29y a2VycyBhbmQKQEAgLTI0MSwxOSArMzcwLDEwNCBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQog CiAJTWVtU2V0KHB0ciwgMCwgcmVxdWVzdFNpemUpOwogCi0JcHJvY3MgPSAoUEdQUk9DICop IHB0cjsKLQlwdHIgPSAoY2hhciAqKSBwdHIgKyBUb3RhbFByb2NzICogc2l6ZW9mKFBHUFJP Qyk7CisJLyogYWxscHJvY3MgKGFycmF5IG9mIHBvaW50ZXJzIHRvIFBHUFJPQyBlbnRyaWVz KSAqLworCXByb2NzID0gKFBHUFJPQyAqKikgcHRyOworCXB0ciA9IChjaGFyICopIHB0ciAr IENBQ0hFTElORUFMSUdOKFRvdGFsUHJvY3MgKiBzaXplb2YoUEdQUk9DICopKTsKIAogCVBy b2NHbG9iYWwtPmFsbFByb2NzID0gcHJvY3M7CiAJLyogWFhYIGFsbFByb2NDb3VudCBpc24n dCByZWFsbHkgYWxsIG9mIHRoZW07IGl0IGV4Y2x1ZGVzIHByZXBhcmVkIHhhY3RzICovCiAJ UHJvY0dsb2JhbC0+YWxsUHJvY0NvdW50ID0gTWF4QmFja2VuZHMgKyBOVU1fQVVYSUxJQVJZ X1BST0NTOwogCisJLyoKKwkgKiBJZiBOVU1BIHBhcnRpdGlvbmluZyBpcyBlbmFibGVkLCBh bmQgd2UgZGVjaWRlZCB3ZSBhY3R1YWxseSBjYW4gZG8gdGhlCisJICogcGFydGl0aW9uaW5n LCBhbGxvY2F0ZSB0aGUgY2h1bmtzLgorCSAqCisJICogT3RoZXJ3aXNlIHdlJ2xsIGFsbG9j YXRlIGEgc2luZ2xlIGFycmF5IGZvciBldmVyeXRoaW5nLiBJdCdzIG5vdCBxdWl0ZQorCSAq IHdoYXQgd2UgZGlkIHdpdGhvdXQgTlVNQSwgYmVjYXVzZSB0aGVyZSdzIGFuIGV4dHJhIGxl dmVsIG9mCisJICogaW5kaXJlY3Rpb24sIGJ1dCBpdCdzIHRoZSBiZXN0IHdlIGNhbiBkby4K KwkgKi8KKwlpZiAoKChudW1hX2ZsYWdzICYgTlVNQV9QUk9DUykgIT0gMCkgJiYgbnVtYV9j YW5fcGFydGl0aW9uKQorCXsKKwkJaW50CQkJbm9kZV9wcm9jczsKKwkJaW50CQkJdG90YWxf cHJvY3MgPSAwOworCisJCUFzc2VydChudW1hX3Byb2NzX3Blcl9ub2RlID4gMCk7CisJCUFz c2VydChudW1hX25vZGVzID4gMCk7CisKKwkJLyoKKwkJICogTm93IGluaXRpYWxpemUgdGhl IFBHUFJPQyBwYXJ0aXRpb24gcmVnaXN0cnkgd2l0aCBvbmUgcGFydGl0aW9uCisJCSAqIHBl ciBOVU1BIG5vZGUgKGFuZCB0aGVuIG9uZSBleHRyYSBwYXJ0aXRpb24gZm9yIGF1eGlsaWFy eSBwcm9jcykuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgbnVtYV9ub2RlczsgaSsrKQor CQl7CisJCQkvKiB0aGUgbGFzdCBOVU1BIG5vZGUgbWF5IGdldCBmZXdlciBQR1BST0MgZW50 cmllcywgYnV0IG1laCAqLworCQkJbm9kZV9wcm9jcyA9IE1pbihudW1hX3Byb2NzX3Blcl9u b2RlLCBNYXhCYWNrZW5kcyAtIHRvdGFsX3Byb2NzKTsKKworCQkJLyogbWFrZSBzdXJlIHRv IGFsaWduIHRoZSBQR1BST0MgYXJyYXkgdG8gbWVtb3J5IHBhZ2UgKi8KKwkJCXB0ciA9IChj aGFyICopIFRZUEVBTElHTihudW1hX3BhZ2Vfc2l6ZSwgcHRyKTsKKworCQkJLyogZmlsbCBp biB0aGUgcGFydGl0aW9uIGluZm8gKi8KKwkJCXBhcnRpdGlvbnNbaV0ubnVtX3Byb2NzID0g bm9kZV9wcm9jczsKKwkJCXBhcnRpdGlvbnNbaV0ubnVtYV9ub2RlID0gaTsKKwkJCXBhcnRp dGlvbnNbaV0ucGdwcm9jX3B0ciA9IHB0cjsKKworCQkJcHRyID0gcGdwcm9jX3BhcnRpdGlv bl9pbml0KHB0ciwgbm9kZV9wcm9jcywgdG90YWxfcHJvY3MsIGkpOworCisJCQl0b3RhbF9w cm9jcyArPSBub2RlX3Byb2NzOworCisJCQkvKiBkb24ndCB1bmRlcmZsb3cvb3ZlcmZsb3cg dGhlIGFsbG9jYXRpb24gKi8KKwkJCUFzc2VydCgocHRyID4gKGNoYXIgKikgcHJvY3MpICYm IChwdHIgPD0gKGNoYXIgKikgcHJvY3MgKyByZXF1ZXN0U2l6ZSkpOworCQl9CisKKwkJQXNz ZXJ0KHRvdGFsX3Byb2NzID09IE1heEJhY2tlbmRzKTsKKworCQkvKgorCQkgKiBBbHNvIGJ1 aWxkIFBHUFJPQyBlbnRyaWVzIGZvciBhdXhpbGlhcnkgcHJvY3MgLyBwcmVwYXJlZCB4YWN0 cyAod2UKKwkJICogaG93ZXZlciBkb24ndCBhc3NpZ24gdGhvc2UgdG8gYW55IE5VTUEgbm9k ZSkuCisJCSAqLworCQlub2RlX3Byb2NzID0gKE5VTV9BVVhJTElBUllfUFJPQ1MgKyBtYXhf cHJlcGFyZWRfeGFjdHMpOworCisJCS8qIG1ha2Ugc3VyZSB0byBhbGlnbiB0aGUgUEdQUk9D IGFycmF5IHRvIG1lbW9yeSBwYWdlICovCisJCXB0ciA9IChjaGFyICopIFRZUEVBTElHTihu dW1hX3BhZ2Vfc2l6ZSwgcHRyKTsKKworCQkvKiBmaWxsIGluIHRoZSBwYXJ0aXRpb24gaW5m byAqLworCQlwYXJ0aXRpb25zW251bWFfbm9kZXNdLm51bV9wcm9jcyA9IG5vZGVfcHJvY3M7 CisJCXBhcnRpdGlvbnNbbnVtYV9ub2Rlc10ubnVtYV9ub2RlID0gLTE7CisJCXBhcnRpdGlv bnNbbnVtYV9ub2Rlc10ucGdwcm9jX3B0ciA9IHB0cjsKKworCQlwdHIgPSBwZ3Byb2NfcGFy dGl0aW9uX2luaXQocHRyLCBub2RlX3Byb2NzLCB0b3RhbF9wcm9jcywgLTEpOworCisJCXRv dGFsX3Byb2NzICs9IG5vZGVfcHJvY3M7CisKKwkJLyogZG9uJ3Qgb3ZlcmZsb3cgdGhlIGFs bG9jYXRpb24gKi8KKwkJQXNzZXJ0KChwdHIgPiAoY2hhciAqKSBwcm9jcykgJiYgKHB0ciA8 PSAoY2hhciAqKSBwcm9jcyArIHJlcXVlc3RTaXplKSk7CisKKwkJQXNzZXJ0KHRvdGFsX3By b2NzID0gVG90YWxQcm9jcyk7CisJfQorCWVsc2UKKwl7CisJCS8qIGp1c3QgdHJlYXQgZXZl cnl0aGluZyBhcyBhIHNpbmdsZSBhcnJheSwgd2l0aCBubyBhbGlnbm1lbnQgKi8KKwkJcHRy ID0gcGdwcm9jX3BhcnRpdGlvbl9pbml0KHB0ciwgVG90YWxQcm9jcywgMCwgLTEpOworCisJ CS8qIGZpbGwgaW4gdGhlIHBhcnRpdGlvbiBpbmZvICovCisJCXBhcnRpdGlvbnNbMF0ubnVt X3Byb2NzID0gVG90YWxQcm9jczsKKwkJcGFydGl0aW9uc1swXS5udW1hX25vZGUgPSAtMTsK KwkJcGFydGl0aW9uc1swXS5wZ3Byb2NfcHRyID0gcHRyOworCisJCS8qIGRvbid0IG92ZXJm bG93IHRoZSBhbGxvY2F0aW9uICovCisJCUFzc2VydCgocHRyID4gKGNoYXIgKikgcHJvY3Mp ICYmIChwdHIgPD0gKGNoYXIgKikgcHJvY3MgKyByZXF1ZXN0U2l6ZSkpOworCX0KKwogCS8q CiAJICogQWxsb2NhdGUgYXJyYXlzIG1pcnJvcmluZyBQR1BST0MgZmllbGRzIGluIGEgZGVu c2UgbWFubmVyLiBTZWUKIAkgKiBQUk9DX0hEUi4KIAkgKgogCSAqIFhYWDogSXQgbWlnaHQg bWFrZSBzZW5zZSB0byBpbmNyZWFzZSBwYWRkaW5nIGZvciB0aGVzZSBhcnJheXMsIGdpdmVu CiAJICogaG93IGhvdGx5IHRoZXkgYXJlIGFjY2Vzc2VkLgorCSAqCisJICogWFhYIFdvdWxk IGl0IG1ha2Ugc2Vuc2UgdG8gTlVNQS1wYXJ0aXRpb24gdGhlc2UgY2h1bmtzIHRvbywgc29t ZWhvdz8KKwkgKiBCdXQgdGhvc2UgYXJyYXlzIGFyZSB0aW55LCBmaXQgaW50byBhIHNpbmds ZSBtZW1vcnkgcGFnZSwgc28gd291bGQgbmVlZAorCSAqIHRvIGJlIG1hZGUgbW9yZSBjb21w bGV4LiBOb3Qgc3VyZS4KIAkgKi8KIAlQcm9jR2xvYmFsLT54aWRzID0gKFRyYW5zYWN0aW9u SWQgKikgcHRyOwogCXB0ciA9IChjaGFyICopIHB0ciArIChUb3RhbFByb2NzICogc2l6ZW9m KCpQcm9jR2xvYmFsLT54aWRzKSk7CkBAIC0yODYsMjQgKzUwMCw5MiBAQCBJbml0UHJvY0ds b2JhbCh2b2lkKQogCS8qIEZvciBhc3NlcnRzIGNoZWNraW5nIHdlIGRpZCBub3Qgb3ZlcmZs b3cuICovCiAJZnBFbmRQdHIgPSBmcFB0ciArIHJlcXVlc3RTaXplOwogCi0JZm9yIChpID0g MDsgaSA8IFRvdGFsUHJvY3M7IGkrKykKKwkvKgorCSAqIE1pbWljIHRoZSBsb2dpYyB3ZSB1 c2VkIHRvIHBhcnRpdGlvbiBQR1BST0MgZW50cmllcy4KKwkgKi8KKworCS8qCisJICogSWYg TlVNQSBwYXJ0aXRpb25pbmcgaXMgZW5hYmxlZCwgYW5kIHdlIGRlY2lkZWQgd2UgYWN0dWFs bHkgY2FuIGRvIHRoZQorCSAqIHBhcnRpdGlvbmluZywgYWxsb2NhdGUgdGhlIGNodW5rcy4K KwkgKgorCSAqIE90aGVyd2lzZSB3ZSdsbCBhbGxvY2F0ZSBhIHNpbmdsZSBhcnJheSBmb3Ig ZXZlcnl0aGluZy4gSXQncyBub3QgcXVpdGUKKwkgKiB3aGF0IHdlIGRpZCB3aXRob3V0IE5V TUEsIGJlY2F1c2UgdGhlcmUncyBhbiBleHRyYSBsZXZlbCBvZgorCSAqIGluZGlyZWN0aW9u LCBidXQgaXQncyB0aGUgYmVzdCB3ZSBjYW4gZG8uCisJICovCisJaWYgKCgobnVtYV9mbGFn cyAmIE5VTUFfUFJPQ1MpICE9IDApICYmIG51bWFfY2FuX3BhcnRpdGlvbikKIAl7Ci0JCVBH UFJPQwkgICAqcHJvYyA9ICZwcm9jc1tpXTsKKwkJaW50CQkJbm9kZV9wcm9jczsKKwkJaW50 CQkJdG90YWxfcHJvY3MgPSAwOworCisJCUFzc2VydChudW1hX3Byb2NzX3Blcl9ub2RlID4g MCk7CisKKwkJLyogYnVpbGQgUEdQUk9DIGVudHJpZXMgZm9yIE5VTUEgbm9kZXMgKi8KKwkJ Zm9yIChpID0gMDsgaSA8IG51bWFfbm9kZXM7IGkrKykKKwkJeworCQkJLyogdGhlIGxhc3Qg TlVNQSBub2RlIG1heSBnZXQgZmV3ZXIgUEdQUk9DIGVudHJpZXMsIGJ1dCBtZWggKi8KKwkJ CW5vZGVfcHJvY3MgPSBNaW4obnVtYV9wcm9jc19wZXJfbm9kZSwgTWF4QmFja2VuZHMgLSB0 b3RhbF9wcm9jcyk7CiAKLQkJLyogQ29tbW9uIGluaXRpYWxpemF0aW9uIGZvciBhbGwgUEdQ Uk9DcywgcmVnYXJkbGVzcyBvZiB0eXBlLiAqLworCQkJLyogbWFrZSBzdXJlIHRvIGFsaWdu IHRoZSBQR1BST0MgYXJyYXkgdG8gbWVtb3J5IHBhZ2UgKi8KKwkJCWZwUHRyID0gKGNoYXIg KikgVFlQRUFMSUdOKG51bWFfcGFnZV9zaXplLCBmcFB0cik7CisKKwkJCS8qIHJlbWVtYmVy IHRoaXMgcG9pbnRlciB0b28gKi8KKwkJCXBhcnRpdGlvbnNbaV0uZmFzdHBhdGhfcHRyID0g ZnBQdHI7CisJCQlBc3NlcnQobm9kZV9wcm9jcyA9PSBwYXJ0aXRpb25zW2ldLm51bV9wcm9j cyk7CisKKwkJCWZwUHRyID0gZmFzdHBhdGhfcGFydGl0aW9uX2luaXQoZnBQdHIsIG5vZGVf cHJvY3MsIHRvdGFsX3Byb2NzLCBpLAorCQkJCQkJCQkJCQlmcExvY2tCaXRzU2l6ZSwgZnBS ZWxJZFNpemUpOworCisJCQl0b3RhbF9wcm9jcyArPSBub2RlX3Byb2NzOworCisJCQkvKiBk b24ndCBvdmVyZmxvdyB0aGUgYWxsb2NhdGlvbiAqLworCQkJQXNzZXJ0KGZwUHRyIDw9IGZw RW5kUHRyKTsKKwkJfQorCisJCUFzc2VydCh0b3RhbF9wcm9jcyA9PSBNYXhCYWNrZW5kcyk7 CiAKIAkJLyoKLQkJICogU2V0IHRoZSBmYXN0LXBhdGggbG9jayBhcnJheXMsIGFuZCBtb3Zl IHRoZSBwb2ludGVyLiBXZSBpbnRlcmxlYXZlCi0JCSAqIHRoZSB0d28gYXJyYXlzLCB0byAo aG9wZWZ1bGx5KSBnZXQgc29tZSBsb2NhbGl0eSBmb3IgZWFjaCBiYWNrZW5kLgorCQkgKiBB bHNvIGJ1aWxkIFBHUFJPQyBlbnRyaWVzIGZvciBhdXhpbGlhcnkgcHJvY3MgLyBwcmVwYXJl ZCB4YWN0cyAod2UKKwkJICogaG93ZXZlciBkb24ndCBhc3NpZ24gdGhvc2UgdG8gYW55IE5V TUEgbm9kZSkuCiAJCSAqLwotCQlwcm9jLT5mcExvY2tCaXRzID0gKHVpbnQ2NCAqKSBmcFB0 cjsKLQkJZnBQdHIgKz0gZnBMb2NrQml0c1NpemU7CisJCW5vZGVfcHJvY3MgPSAoTlVNX0FV WElMSUFSWV9QUk9DUyArIG1heF9wcmVwYXJlZF94YWN0cyk7CisKKwkJLyogbWFrZSBzdXJl IHRvIGFsaWduIHRoZSBQR1BST0MgYXJyYXkgdG8gbWVtb3J5IHBhZ2UgKi8KKwkJZnBQdHIg PSAoY2hhciAqKSBUWVBFQUxJR04obnVtYV9wYWdlX3NpemUsIGZwUHRyKTsKKworCQkvKiBy ZW1lbWJlciB0aGlzIHBvaW50ZXIgdG9vICovCisJCXBhcnRpdGlvbnNbbnVtYV9ub2Rlc10u ZmFzdHBhdGhfcHRyID0gZnBQdHI7CisJCUFzc2VydChub2RlX3Byb2NzID09IHBhcnRpdGlv bnNbbnVtYV9ub2Rlc10ubnVtX3Byb2NzKTsKIAotCQlwcm9jLT5mcFJlbElkID0gKE9pZCAq KSBmcFB0cjsKLQkJZnBQdHIgKz0gZnBSZWxJZFNpemU7CisJCWZwUHRyID0gZmFzdHBhdGhf cGFydGl0aW9uX2luaXQoZnBQdHIsIG5vZGVfcHJvY3MsIHRvdGFsX3Byb2NzLCAtMSwKKwkJ CQkJCQkJCQlmcExvY2tCaXRzU2l6ZSwgZnBSZWxJZFNpemUpOwogCisJCXRvdGFsX3Byb2Nz ICs9IG5vZGVfcHJvY3M7CisKKwkJLyogZG9uJ3Qgb3ZlcmZsb3cgdGhlIGFsbG9jYXRpb24g Ki8KIAkJQXNzZXJ0KGZwUHRyIDw9IGZwRW5kUHRyKTsKIAorCQlBc3NlcnQodG90YWxfcHJv Y3MgPSBUb3RhbFByb2NzKTsKKwl9CisJZWxzZQorCXsKKwkJLyogcmVtZW1iZXIgdGhpcyBw b2ludGVyIHRvbyAqLworCQlwYXJ0aXRpb25zWzBdLmZhc3RwYXRoX3B0ciA9IGZwUHRyOwor CQlBc3NlcnQoVG90YWxQcm9jcyA9PSBwYXJ0aXRpb25zWzBdLm51bV9wcm9jcyk7CisKKwkJ LyoganVzdCB0cmVhdCBldmVyeXRoaW5nIGFzIGEgc2luZ2xlIGFycmF5LCB3aXRoIG5vIGFs aWdubWVudCAqLworCQlmcFB0ciA9IGZhc3RwYXRoX3BhcnRpdGlvbl9pbml0KGZwUHRyLCBU b3RhbFByb2NzLCAwLCAtMSwKKwkJCQkJCQkJCQlmcExvY2tCaXRzU2l6ZSwgZnBSZWxJZFNp emUpOworCisJCS8qIGRvbid0IG92ZXJmbG93IHRoZSBhbGxvY2F0aW9uICovCisJCUFzc2Vy dChmcFB0ciA8PSBmcEVuZFB0cik7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFRvdGFsUHJv Y3M7IGkrKykKKwl7CisJCVBHUFJPQwkgICAqcHJvYyA9IHByb2NzW2ldOworCisJCUFzc2Vy dChwcm9jLT5wcm9jbnVtYmVyID09IGkpOworCiAJCS8qCiAJCSAqIFNldCB1cCBwZXItUEdQ Uk9DIHNlbWFwaG9yZSwgbGF0Y2gsIGFuZCBmcEluZm9Mb2NrLiAgUHJlcGFyZWQgeGFjdAog CQkgKiBkdW1teSBQR1BST0NzIGRvbid0IG5lZWQgdGhlc2UgdGhvdWdoIC0gdGhleSdyZSBu ZXZlciBhc3NvY2lhdGVkCkBAIC0zNjYsOSArNjQ4LDYgQEAgSW5pdFByb2NHbG9iYWwodm9p ZCkKIAkJcGdfYXRvbWljX2luaXRfdTY0KCYocHJvYy0+d2FpdFN0YXJ0KSwgMCk7CiAJfQog Ci0JLyogU2hvdWxkIGhhdmUgY29uc3VtZWQgZXhhY3RseSB0aGUgZXhwZWN0ZWQgYW1vdW50 IG9mIGZhc3QtcGF0aCBtZW1vcnkuICovCi0JQXNzZXJ0KGZwUHRyID09IGZwRW5kUHRyKTsK LQogCS8qCiAJICogU2F2ZSBwb2ludGVycyB0byB0aGUgYmxvY2tzIG9mIFBHUFJPQyBzdHJ1 Y3R1cmVzIHJlc2VydmVkIGZvciBhdXhpbGlhcnkKIAkgKiBwcm9jZXNzZXMgYW5kIHByZXBh cmVkIHRyYW5zYWN0aW9ucy4KQEAgLTQzNSw3ICs3MTQsNTEgQEAgSW5pdFByb2Nlc3Modm9p ZCkKIAogCWlmICghZGxpc3RfaXNfZW1wdHkocHJvY2dsb2JhbGxpc3QpKQogCXsKLQkJTXlQ cm9jID0gZGxpc3RfY29udGFpbmVyKFBHUFJPQywgbGlua3MsIGRsaXN0X3BvcF9oZWFkX25v ZGUocHJvY2dsb2JhbGxpc3QpKTsKKwkJLyoKKwkJICogV2l0aCBudW1hIGludGVybGVhdmlu ZyBvZiBQR1BST0MsIHRyeSB0byBnZXQgYSBQUk9DIGVudHJ5IGZyb20gdGhlCisJCSAqIHJp Z2h0IE5VTUEgbm9kZSAod2hlbiB0aGUgcHJvY2VzcyBzdGFydHMpLgorCQkgKgorCQkgKiBY WFggVGhlIHByb2Nlc3MgbWF5IG1vdmUgdG8gYSBkaWZmZXJlbnQgTlVNQSBub2RlIGxhdGVy LCBidXQKKwkJICogdGhlcmUncyBub3QgbXVjaCB3ZSBjYW4gZG8gYWJvdXQgdGhhdC4KKwkJ ICovCisJCWlmICgobnVtYV9mbGFncyAmIE5VTUFfUFJPQ1MpICE9IDApCisJCXsKKwkJCWRs aXN0X211dGFibGVfaXRlciBpdGVyOworCQkJaW50CQlub2RlOworCisjaWZkZWYgVVNFX0xJ Qk5VTUEKKwkJCWludAljcHUgPSBzY2hlZF9nZXRjcHUoKTsKKworCQkJaWYgKGNwdSA8IDAp CisJCQkJZWxvZyhFUlJPUiwgImdldGNwdSBmYWlsZWQ6ICVtIik7CisKKwkJCW5vZGUgPSBu dW1hX25vZGVfb2ZfY3B1KGNwdSk7CisjZWxzZQorCQkJLyogRklYTUUgaXMgZGVmYXVsdGlu ZyB0byAwIGNvcnJlY3Q/ICovCisJCQlub2RlID0gMDsKKyNlbmRpZgorCisJCQlNeVByb2Mg PSBOVUxMOworCisJCQlkbGlzdF9mb3JlYWNoX21vZGlmeShpdGVyLCBwcm9jZ2xvYmFsbGlz dCkKKwkJCXsKKwkJCQlQR1BST0MJICAgKnByb2M7CisKKwkJCQlwcm9jID0gZGxpc3RfY29u dGFpbmVyKFBHUFJPQywgbGlua3MsIGl0ZXIuY3VyKTsKKworCQkJCWlmIChwcm9jLT5udW1h X25vZGUgPT0gbm9kZSkKKwkJCQl7CisJCQkJCU15UHJvYyA9IHByb2M7CisJCQkJCWRsaXN0 X2RlbGV0ZShpdGVyLmN1cik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJ CS8qIGRpZG4ndCBmaW5kIFBHUFJPQyBmcm9tIHRoZSBjb3JyZWN0IE5VTUEgbm9kZSwgcGlj ayBhbnkgZnJlZSBvbmUgKi8KKwkJaWYgKE15UHJvYyA9PSBOVUxMKQorCQkJTXlQcm9jID0g ZGxpc3RfY29udGFpbmVyKFBHUFJPQywgbGlua3MsIGRsaXN0X3BvcF9oZWFkX25vZGUocHJv Y2dsb2JhbGxpc3QpKTsKKwogCQlTcGluTG9ja1JlbGVhc2UoUHJvY1N0cnVjdExvY2spOwog CX0KIAllbHNlCkBAIC02NDYsNyArOTY5LDcgQEAgSW5pdEF1eGlsaWFyeVByb2Nlc3Modm9p ZCkKIAkgKi8KIAlmb3IgKHByb2N0eXBlID0gMDsgcHJvY3R5cGUgPCBOVU1fQVVYSUxJQVJZ X1BST0NTOyBwcm9jdHlwZSsrKQogCXsKLQkJYXV4cHJvYyA9ICZBdXhpbGlhcnlQcm9jc1tw cm9jdHlwZV07CisJCWF1eHByb2MgPSBBdXhpbGlhcnlQcm9jc1twcm9jdHlwZV07CiAJCWlm IChhdXhwcm9jLT5waWQgPT0gMCkKIAkJCWJyZWFrOwogCX0KQEAgLTEwNDksNyArMTM3Miw3 IEBAIEF1eGlsaWFyeVByb2NLaWxsKGludCBjb2RlLCBEYXR1bSBhcmcpCiAJaWYgKE15UHJv Yy0+cGlkICE9IChpbnQpIGdldHBpZCgpKQogCQllbG9nKFBBTklDLCAiQXV4aWxpYXJ5UHJv Y0tpbGwoKSBjYWxsZWQgaW4gY2hpbGQgcHJvY2VzcyIpOwogCi0JYXV4cHJvYyA9ICZBdXhp bGlhcnlQcm9jc1twcm9jdHlwZV07CisJYXV4cHJvYyA9IEF1eGlsaWFyeVByb2NzW3Byb2N0 eXBlXTsKIAogCUFzc2VydChNeVByb2MgPT0gYXV4cHJvYyk7CiAKQEAgLTEwOTgsNyArMTQy MSw3IEBAIEF1eGlsaWFyeVBpZEdldFByb2MoaW50IHBpZCkKIAogCWZvciAoaW5kZXggPSAw OyBpbmRleCA8IE5VTV9BVVhJTElBUllfUFJPQ1M7IGluZGV4KyspCiAJewotCQlQR1BST0MJ ICAgKnByb2MgPSAmQXV4aWxpYXJ5UHJvY3NbaW5kZXhdOworCQlQR1BST0MJICAgKnByb2Mg PSBBdXhpbGlhcnlQcm9jc1tpbmRleF07CiAKIAkJaWYgKHByb2MtPnBpZCA9PSBwaWQpCiAJ CXsKQEAgLTE5ODgsNyArMjMxMSw3IEBAIFByb2NTZW5kU2lnbmFsKFByb2NOdW1iZXIgcHJv Y051bWJlcikKIAlpZiAocHJvY051bWJlciA8IDAgfHwgcHJvY051bWJlciA+PSBQcm9jR2xv YmFsLT5hbGxQcm9jQ291bnQpCiAJCWVsb2coRVJST1IsICJwcm9jTnVtYmVyIG91dCBvZiBy YW5nZSIpOwogCi0JU2V0TGF0Y2goJlByb2NHbG9iYWwtPmFsbFByb2NzW3Byb2NOdW1iZXJd LnByb2NMYXRjaCk7CisJU2V0TGF0Y2goJlByb2NHbG9iYWwtPmFsbFByb2NzW3Byb2NOdW1i ZXJdLT5wcm9jTGF0Y2gpOwogfQogCiAvKgpAQCAtMjA2MywzICsyMzg2LDE2OCBAQCBCZWNv bWVMb2NrR3JvdXBNZW1iZXIoUEdQUk9DICpsZWFkZXIsIGludCBwaWQpCiAKIAlyZXR1cm4g b2s7CiB9CisKKy8qCisgKiBwZ3Byb2NfcGFydGl0aW9uc19wcmVwYXJlCisgKgkJQ2FsY3Vs YXRlIHBhcmFtZXRlcnMgZm9yIHBhcnRpdGlvbmluZyBidWZmZXJzLgorICoKKyAqIE5VTUEg cGFydGl0aW9uaW5nCisgKgorICogTm93IGJ1aWxkIHRoZSBhY3R1YWwgUEdQUk9DIGFycmF5 cywgb25lICJjaHVuayIgcGVyIE5VTUEgbm9kZSAoYW5kIG9uZQorICogZXh0cmEgZm9yIGF1 eGlsaWFyeSBwcm9jZXNzZXMgYW5kIDJQQyB0cmFuc2FjdGlvbnMsIG5vdCBhc3NvY2lhdGVk IHdpdGgKKyAqIGFueSBwYXJ0aWN1bGFyIG5vZGUpLgorICoKKyAqIEZpcnN0IGRldGVybWlu ZSBob3cgbWFueSAiYmFja2VuZCIgcHJvY3MgdG8gYWxsb2NhdGUgcGVyIE5VTUEgbm9kZS4g VGhlCisgKiBjb3VudCBtYXkgbm90IGJlIGV4YWN0bHkgZGl2aXNpYmxlLCBidXQgd2UgbW9z dGx5IGlnbm9yZSB0aGF0LiBUaGUgbGFzdAorICogbm9kZSBtYXkgZ2V0IHNvbWV3aGF0IGZl d2VyIFBHUFJPQyBlbnRyaWVzLCBidXQgdGhlIGltYmFsYW5jZSBvdWdodCB0bworICogYmUg cHJldHR5IHNtYWxsIChpZiBNYXhCYWNrZW5kcyA+PiBudW1hX25vZGVzKS4KKyAqCisgKiBY WFggQSBmYWlyZXIgZGlzdHJpYnV0aW9uIGlzIHBvc3NpYmxlLCBidXQgbm90IHdvcnRoIGl0 IGZvciBub3cuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3Byb2NfcGFydGl0aW9uc19wcmVwYXJl KHZvaWQpCit7CisJLyogYmFpbCBvdXQgaWYgYWxyZWFkeSBpbml0aWFsaXplZCAoY2FsY3Vs YXRlIG9ubHkgb25jZSkgKi8KKwlpZiAobnVtYV9ub2RlcyAhPSAtMSkKKwkJcmV0dXJuOwor CisJLyogWFhYIG9ubHkgZ2l2ZXMgdXMgdGhlIG51bWJlciwgdGhlIG5vZGVzIG1heSBub3Qg YmUgMCwgMSwgMiwgLi4uICovCisjaWZkZWYgVVNFX0xJQk5VTUEKKwludW1hX25vZGVzID0g bnVtYV9udW1fY29uZmlndXJlZF9ub2RlcygpOworI2Vsc2UKKwludW1hX25vZGVzID0gMTsK KyNlbmRpZgorCisJLyogWFhYIGNhbiB0aGlzIGhhcHBlbj8gKi8KKwlpZiAobnVtYV9ub2Rl cyA8IDEpCisJCW51bWFfbm9kZXMgPSAxOworCisJLyoKKwkgKiBYWFggQSBiaXQgd2VpcmQu IERvIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQgcG9zdG1hc3Rlcj8gQ291bGQgdGhpcyBldmVu CisJICogcnVuIG91dHNpZGUgcG9zdG1hc3Rlcj8gSSBkb24ndCB0aGluayBzby4KKwkgKgor CSAqIFhYWCBBbm90aGVyIGlzc3VlIGlzIHdlIG1heSBnZXQgZGlmZmVyZW50IHZhbHVlcyB0 aGFuIHdoZW4gc2l6aW5nIHRoZQorCSAqIHRoZSBtZW1vcnksIGJlY2F1c2UgYXQgdGhhdCBw b2ludCB3ZSBkaWRuJ3Qga25vdyBpZiB3ZSBnZXQgaHVnZSBwYWdlcywKKwkgKiBzbyB3ZSBh c3N1bWVkIHdlIHdpbGwuIFNob3VsZG4ndCBjYXVzZSBjcmFzaGVzLCBidXQgd2UgbWlnaHQg YWxsb2NhdGUKKwkgKiBzaGFyZWQgbWVtb3J5IGFuZCB0aGVuIG5vdCB1c2Ugc29tZSBvZiBp dCAoYmVjYXVzZSBvZiB0aGUgYWxpZ25tZW50CisJICogdGhhdCB3ZSBkb24ndCBhY3R1YWxs eSBuZWVkKS4gTm90IHN1cmUgYWJvdXQgYmV0dGVyIHdheSwgZ29vZCBmb3Igbm93LgorCSAq LworCS8vIEFzc2VydCghSXNVbmRlclBvc3RtYXN0ZXIpOworCisJbnVtYV9wYWdlX3NpemUg PSBwZ19udW1hX3BhZ2Vfc2l6ZSgpOworCisJbnVtYV9wcm9jc19wZXJfbm9kZSA9IChNYXhC YWNrZW5kcyArIChudW1hX25vZGVzIC0gMSkpIC8gbnVtYV9ub2RlczsKKworCWVsb2coREVC VUcxLCAiTlVNQTogcGdwcm9jIGJhY2tlbmRzICVkIG51bV9ub2RlcyAlZCBwZXJfbm9kZSAl ZCIsCisJCSBNYXhCYWNrZW5kcywgbnVtYV9ub2RlcywgbnVtYV9wcm9jc19wZXJfbm9kZSk7 CisKKwlBc3NlcnQobnVtYV9ub2RlcyAqIG51bWFfcHJvY3NfcGVyX25vZGUgPj0gTWF4QmFj a2VuZHMpOworCisJLyogc3VjY2VzcyAqLworCW51bWFfY2FuX3BhcnRpdGlvbiA9IHRydWU7 Cit9CisKKy8qCisgKiBkb2Vzbid0IGRvIGFsaWdubWVudAorICovCitzdGF0aWMgY2hhciAq CitwZ3Byb2NfcGFydGl0aW9uX2luaXQoY2hhciAqcHRyLCBpbnQgbnVtX3Byb2NzLCBpbnQg YWxscHJvY3NfaW5kZXgsIGludCBub2RlKQoreworCVBHUFJPQwkgICAqcHJvY3Nfbm9kZTsK KworCS8qIGFsbG9jYXRlIHRoZSBQR1BST0MgY2h1bmsgZm9yIHRoaXMgbm9kZSAqLworCXBy b2NzX25vZGUgPSAoUEdQUk9DICopIHB0cjsKKworCS8qIHBvaW50ZXIgcmlnaHQgYWZ0ZXIg dGhpcyBhcnJheSAqLworCXB0ciA9IChjaGFyICopIHB0ciArIG51bV9wcm9jcyAqIHNpemVv ZihQR1BST0MpOworCisJZWxvZyhERUJVRzEsICJOVU1BOiBwZ3Byb2NfaW5pdF9wYXJ0aXRp b24gcHJvY3MgJXAgZW5kcHRyICVwIG51bV9wcm9jcyAlZCBub2RlICVkIiwKKwkJIHByb2Nz X25vZGUsIHB0ciwgbnVtX3Byb2NzLCBub2RlKTsKKworCS8qCisJICogaWYgbm9kZSBzcGVj aWZpZWQsIG1vdmUgdG8gbm9kZSAtIGRvIHRoaXMgYmVmb3JlIHdlIHN0YXJ0IHRvdWNoaW5n IHRoZQorCSAqIG1lbW9yeSwgdG8gbWFrZSBzdXJlIGl0J3Mgbm90IG1hcHBlZCB0byBhbnkg bm9kZSB5ZXQKKwkgKi8KKwlpZiAobm9kZSAhPSAtMSkKKwkJcGdfbnVtYV9tb3ZlX3RvX25v ZGUoKGNoYXIgKikgcHJvY3Nfbm9kZSwgcHRyLCBub2RlKTsKKworCS8qIGFkZCBwb2ludGVy cyB0byB0aGUgUEdQUk9DIGVudHJpZXMgdG8gYWxsUHJvY3MgKi8KKwlmb3IgKGludCBpID0g MDsgaSA8IG51bV9wcm9jczsgaSsrKQorCXsKKwkJcHJvY3Nfbm9kZVtpXS5udW1hX25vZGUg PSBub2RlOworCQlwcm9jc19ub2RlW2ldLnByb2NudW1iZXIgPSBhbGxwcm9jc19pbmRleDsK KworCQlQcm9jR2xvYmFsLT5hbGxQcm9jc1thbGxwcm9jc19pbmRleF0gPSAmcHJvY3Nfbm9k ZVtpXTsKKworCQlhbGxwcm9jc19pbmRleCsrOworCX0KKworCXJldHVybiBwdHI7Cit9CisK K3N0YXRpYyBjaGFyICoKK2Zhc3RwYXRoX3BhcnRpdGlvbl9pbml0KGNoYXIgKnB0ciwgaW50 IG51bV9wcm9jcywgaW50IGFsbHByb2NzX2luZGV4LCBpbnQgbm9kZSwKKwkJCQkJCVNpemUg ZnBMb2NrQml0c1NpemUsIFNpemUgZnBSZWxJZFNpemUpCit7CisJY2hhcgkgICAqZW5kcHRy ID0gcHRyICsgbnVtX3Byb2NzICogKGZwTG9ja0JpdHNTaXplICsgZnBSZWxJZFNpemUpOwor CisJLyoKKwkgKiBpZiBub2RlIHNwZWNpZmllZCwgbW92ZSB0byBub2RlIC0gZG8gdGhpcyBi ZWZvcmUgd2Ugc3RhcnQgdG91Y2hpbmcgdGhlCisJICogbWVtb3J5LCB0byBtYWtlIHN1cmUg aXQncyBub3QgbWFwcGVkIHRvIGFueSBub2RlIHlldAorCSAqLworCWlmIChub2RlICE9IC0x KQorCQlwZ19udW1hX21vdmVfdG9fbm9kZShwdHIsIGVuZHB0ciwgbm9kZSk7CisKKwkvKgor CSAqIE5vdyBwb2ludCB0aGUgUEdQUk9DIGVudHJpZXMgdG8gdGhlIGZhc3QtcGF0aCBhcnJh eXMsIGFuZCBhbHNvIGFkdmFuY2UKKwkgKiB0aGUgZnBQdHIuCisJICovCisJZm9yIChpbnQg aSA9IDA7IGkgPCBudW1fcHJvY3M7IGkrKykKKwl7CisJCVBHUFJPQwkgICAqcHJvYyA9IFBy b2NHbG9iYWwtPmFsbFByb2NzW2FsbHByb2NzX2luZGV4XTsKKworCQkvKiBjcm9zcy1jaGVj ayB3ZSBnb3QgdGhlIGV4cGVjdGVkIE5VTUEgbm9kZSAqLworCQlBc3NlcnQocHJvYy0+bnVt YV9ub2RlID09IG5vZGUpOworCQlBc3NlcnQocHJvYy0+cHJvY251bWJlciA9PSBhbGxwcm9j c19pbmRleCk7CisKKwkJLyoKKwkJICogU2V0IHRoZSBmYXN0LXBhdGggbG9jayBhcnJheXMs IGFuZCBtb3ZlIHRoZSBwb2ludGVyLiBXZSBpbnRlcmxlYXZlCisJCSAqIHRoZSB0d28gYXJy YXlzLCB0byAoaG9wZWZ1bGx5KSBnZXQgc29tZSBsb2NhbGl0eSBmb3IgZWFjaCBiYWNrZW5k LgorCQkgKi8KKwkJcHJvYy0+ZnBMb2NrQml0cyA9ICh1aW50NjQgKikgcHRyOworCQlwdHIg Kz0gZnBMb2NrQml0c1NpemU7CisKKwkJcHJvYy0+ZnBSZWxJZCA9IChPaWQgKikgcHRyOwor CQlwdHIgKz0gZnBSZWxJZFNpemU7CisKKwkJQXNzZXJ0KHB0ciA8PSBlbmRwdHIpOworCisJ CWFsbHByb2NzX2luZGV4Kys7CisJfQorCisJQXNzZXJ0KHB0ciA9PSBlbmRwdHIpOworCisJ cmV0dXJuIGVuZHB0cjsKK30KKworaW50CitQcm9jUGFydGl0aW9uQ291bnQodm9pZCkKK3sK KwlpZiAoKChudW1hX2ZsYWdzICYgTlVNQV9QUk9DUykgIT0gMCkgJiYgbnVtYV9jYW5fcGFy dGl0aW9uKQorCQlyZXR1cm4gKG51bWFfbm9kZXMgKyAxKTsKKworCXJldHVybiAxOworfQor Cit2b2lkCitQcm9jUGFydGl0aW9uR2V0KGludCBpZHgsIGludCAqbm9kZSwgaW50ICpucHJv Y3MsIHZvaWQgKipwcm9jc3B0ciwgdm9pZCAqKmZwcHRyKQoreworCVBHUHJvY1BhcnRpdGlv biAqcGFydCA9ICZwYXJ0aXRpb25zW2lkeF07CisKKwlBc3NlcnQoKGlkeCA+PSAwKSAmJiAo aWR4IDwgUHJvY1BhcnRpdGlvbkNvdW50KCkpKTsKKworCSpucHJvY3MgPSBwYXJ0LT5udW1f cHJvY3M7CisJKnByb2NzcHRyID0gcGFydC0+cGdwcm9jX3B0cjsKKwkqZnBwdHIgPSBwYXJ0 LT5mYXN0cGF0aF9wdHI7CisJKm5vZGUgPSBwYXJ0LT5udW1hX25vZGU7Cit9CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9wb3J0L3BnX251bWEuaCBiL3NyYy9pbmNsdWRlL3BvcnQvcGdf bnVtYS5oCmluZGV4IDk3MzRhYTMxNWZmLi5hYTUyNGY2ZjdmMyAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvcG9ydC9wZ19udW1hLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9ydC9wZ19udW1h LmgKQEAgLTIzLDYgKzIzLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIHZvaWQgcGdfbnVtYV9t b3ZlX3RvX25vZGUoY2hhciAqc3RhcnRwdHIsIGNoYXIgKmVuZHB0ciwgaW50IG4KIGV4dGVy biBQR0RMTElNUE9SVCBpbnQgbnVtYV9mbGFnczsKIAogI2RlZmluZQkJTlVNQV9CVUZGRVJT CQkweDAxCisjZGVmaW5lCQlOVU1BX1BST0NTCQkJMHgwMgogCiAjaWZkZWYgVVNFX0xJQk5V TUEKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmggYi9zcmMvaW5j bHVkZS9zdG9yYWdlL3Byb2MuaAppbmRleCBjNmY1ZWJjZWVmZC4uMjFmMjYxOWZkNDAgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCisrKyBiL3NyYy9pbmNsdWRl L3N0b3JhZ2UvcHJvYy5oCkBAIC0yMDIsNiArMjAyLDggQEAgc3RydWN0IFBHUFJPQwogCQkJ CQkJCQkgKiB2YWN1dW0gbXVzdCBub3QgcmVtb3ZlIHR1cGxlcyBkZWxldGVkIGJ5CiAJCQkJ CQkJCSAqIHhpZCA+PSB4bWluICEgKi8KIAorCWludAkJCXByb2NudW1iZXI7CQkvKiBpbmRl eCBpbiBQcm9jR2xvYmFsLT5hbGxQcm9jcyAqLworCiAJaW50CQkJcGlkOwkJCS8qIEJhY2tl bmQncyBwcm9jZXNzIElEOyAwIGlmIHByZXBhcmVkIHhhY3QgKi8KIAogCWludAkJCXBneGFj dG9mZjsJCS8qIG9mZnNldCBpbnRvIHZhcmlvdXMgUHJvY0dsb2JhbC0+YXJyYXlzIHdpdGgK QEAgLTMyNyw2ICszMjksOSBAQCBzdHJ1Y3QgUEdQUk9DCiAJUEdQUk9DCSAgICpsb2NrR3Jv dXBMZWFkZXI7CS8qIGxvY2sgZ3JvdXAgbGVhZGVyLCBpZiBJJ20gYSBtZW1iZXIgKi8KIAlk bGlzdF9oZWFkCWxvY2tHcm91cE1lbWJlcnM7CS8qIGxpc3Qgb2YgbWVtYmVycywgaWYgSSdt IGEgbGVhZGVyICovCiAJZGxpc3Rfbm9kZQlsb2NrR3JvdXBMaW5rOwkvKiBteSBtZW1iZXIg bGluaywgaWYgSSdtIGEgbWVtYmVyICovCisKKwkvKiBOVU1BIG5vZGUgKi8KKwlpbnQJCQlu dW1hX25vZGU7CiB9OwogCiAvKiBOT1RFOiAidHlwZWRlZiBzdHJ1Y3QgUEdQUk9DIFBHUFJP QyIgYXBwZWFycyBpbiBzdG9yYWdlL2xvY2suaC4gKi8KQEAgLTM5MSw3ICszOTYsNyBAQCBl eHRlcm4gUEdETExJTVBPUlQgUEdQUk9DICpNeVByb2M7CiB0eXBlZGVmIHN0cnVjdCBQUk9D X0hEUgogewogCS8qIEFycmF5IG9mIFBHUFJPQyBzdHJ1Y3R1cmVzIChub3QgaW5jbHVkaW5n IGR1bW1pZXMgZm9yIHByZXBhcmVkIHR4bnMpICovCi0JUEdQUk9DCSAgICphbGxQcm9jczsK KwlQR1BST0MJICAqKmFsbFByb2NzOwogCiAJLyogQXJyYXkgbWlycm9yaW5nIFBHUFJPQy54 aWQgZm9yIGVhY2ggUEdQUk9DIGN1cnJlbnRseSBpbiB0aGUgcHJvY2FycmF5ICovCiAJVHJh bnNhY3Rpb25JZCAqeGlkczsKQEAgLTQzOCwxMyArNDQzLDEzIEBAIHR5cGVkZWYgc3RydWN0 IFBST0NfSERSCiAKIGV4dGVybiBQR0RMTElNUE9SVCBQUk9DX0hEUiAqUHJvY0dsb2JhbDsK IAotZXh0ZXJuIFBHRExMSU1QT1JUIFBHUFJPQyAqUHJlcGFyZWRYYWN0UHJvY3M7CitleHRl cm4gUEdETExJTVBPUlQgUEdQUk9DICoqUHJlcGFyZWRYYWN0UHJvY3M7CiAKIC8qCiAgKiBB Y2Nlc3NvcnMgZm9yIGdldHRpbmcgUEdQUk9DIGdpdmVuIGEgUHJvY051bWJlciBhbmQgdmlj ZSB2ZXJzYS4KICAqLwotI2RlZmluZSBHZXRQR1Byb2NCeU51bWJlcihuKSAoJlByb2NHbG9i YWwtPmFsbFByb2NzWyhuKV0pCi0jZGVmaW5lIEdldE51bWJlckZyb21QR1Byb2MocHJvYykg KChwcm9jKSAtICZQcm9jR2xvYmFsLT5hbGxQcm9jc1swXSkKKyNkZWZpbmUgR2V0UEdQcm9j QnlOdW1iZXIobikgKFByb2NHbG9iYWwtPmFsbFByb2NzWyhuKV0pCisjZGVmaW5lIEdldE51 bWJlckZyb21QR1Byb2MocHJvYykgKChwcm9jKS0+cHJvY251bWJlcikKIAogLyoKICAqIFdl IHNldCBhc2lkZSBzb21lIGV4dHJhIFBHUFJPQyBzdHJ1Y3R1cmVzIGZvciAic3BlY2lhbCB3 b3JrZXIiIHByb2Nlc3NlcywKQEAgLTQ4MCw3ICs0ODUsNyBAQCBleHRlcm4gUEdETExJTVBP UlQgYm9vbCBsb2dfbG9ja193YWl0czsKIAogI2lmZGVmIEVYRUNfQkFDS0VORAogZXh0ZXJu IFBHRExMSU1QT1JUIHNsb2NrX3QgKlByb2NTdHJ1Y3RMb2NrOwotZXh0ZXJuIFBHRExMSU1Q T1JUIFBHUFJPQyAqQXV4aWxpYXJ5UHJvY3M7CitleHRlcm4gUEdETExJTVBPUlQgUEdQUk9D ICoqQXV4aWxpYXJ5UHJvY3M7CiAjZW5kaWYKIAogCkBAIC01MjAsNCArNTI1LDcgQEAgZXh0 ZXJuIFBHUFJPQyAqQXV4aWxpYXJ5UGlkR2V0UHJvYyhpbnQgcGlkKTsKIGV4dGVybiB2b2lk IEJlY29tZUxvY2tHcm91cExlYWRlcih2b2lkKTsKIGV4dGVybiBib29sIEJlY29tZUxvY2tH cm91cE1lbWJlcihQR1BST0MgKmxlYWRlciwgaW50IHBpZCk7CiAKK2V4dGVybiBpbnQJUHJv Y1BhcnRpdGlvbkNvdW50KHZvaWQpOworZXh0ZXJuIHZvaWQgUHJvY1BhcnRpdGlvbkdldChp bnQgaWR4LCBpbnQgKm5vZGUsIGludCAqbnByb2NzLCB2b2lkICoqcHJvY3NwdHIsIHZvaWQg KipmcHB0cik7CisKICNlbmRpZgkJCQkJCQkvKiBfUFJPQ19IXyAqLwpkaWZmIC0tZ2l0IGEv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAppbmRleCAyYjdjZTJkMGI5Zi4uOTEyZGQ0YWMxMDAgMTAwNjQ0Ci0t LSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xODc2LDYgKzE4NzYsNyBAQCBQR1BfTVBJCiBQ R1BfUHViS2V5CiBQR1BfUzJLCiBQR1BpbmcKK1BHUHJvY1BhcnRpdGlvbgogUEdRdWVyeUNs YXNzCiBQR1JVc2FnZQogUEdTZW1hcGhvcmUKLS0gCjIuNTEuMAoK --------------7ugtFjYi6YRzRLN0MXp6Nj6F Content-Type: text/x-patch; charset=UTF-8; name="v20250918-0006-fixup-StrategyGetBuffer.patch" Content-Disposition: attachment; filename="v20250918-0006-fixup-StrategyGetBuffer.patch" Content-Transfer-Encoding: base64 RnJvbSBlNzhmMzdmNDc2OTIyNTUyMmVjNGNlODI4ZmJjM2EzZTQ2YmNkZjZlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogV2VkLCAxNyBTZXAgMjAyNSAyMzo0MjozNCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUwOTE4IDYvNl0gZml4dXA6IFN0cmF0ZWd5R2V0QnVmZmVyCgpTdHJhdGVneUdldEJ1 ZmZlciBpcyBleHBlY3RlZCB0byBzY2FuIGFsbCBjbG9jay1zd2VlcCBwYXJ0aXRpb25zLCBu b3QKanVzdCB0aGUgImxvY2FsIiBvbmUuIFNvIHN0YXJ0IGF0IHRoZSBvcHRpbWFsIG9uZSAo YXMgY2FsY3VsYXRlZCBieQpDaG9vc2VDbG9ja1N3ZWVwKSwgYW5kIHRoZW4gYWR2YW5jZSB0 byB0aGUgbmV4dCBvbmUgaW4gYSByb3VuZC1yb2Jpbgp3YXksIHVudGlsIHdlIGZpbmQgYSBm cmVlIC8gdW5waW5uZWQgYnVmZmVyLgotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVy L2ZyZWVsaXN0LmMgICAgIHwgOTQgKysrKysrKysrKysrKysrKy0tLS0tLS0KIHNyYy90ZXN0 L3JlY292ZXJ5L3QvMDI3X3N0cmVhbV9yZWdyZXNzLnBsIHwgIDUgLS0KIDIgZmlsZXMgY2hh bmdlZCwgNjUgaW5zZXJ0aW9ucygrKSwgMzQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKaW5kZXggYTY2NTdjMGZjMTMuLmQ5MTE5ODZkN2Nl IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKQEAgLTE2OSw2ICsx NjksOSBAQCBzdGF0aWMgQnVmZmVyRGVzYyAqR2V0QnVmZmVyRnJvbVJpbmcoQnVmZmVyQWNj ZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiBzdGF0aWMgdm9pZCBBZGRCdWZmZXJUb1JpbmcoQnVm ZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiAJCQkJCQkJQnVmZmVyRGVzYyAqYnVmKTsK IHN0YXRpYyBDbG9ja1N3ZWVwICpDaG9vc2VDbG9ja1N3ZWVwKGJvb2wgYmFsYW5jZSk7Citz dGF0aWMgQnVmZmVyRGVzYyAqU3RyYXRlZ3lHZXRCdWZmZXJQYXJ0aXRpb24oQ2xvY2tTd2Vl cCAqc3dlZXAsCisJCQkJCQkJCQkJCSAgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ks CisJCQkJCQkJCQkJCSAgdWludDMyICpidWZfc3RhdGUpOwogCiAvKgogICogY2xvY2tzd2Vl cCBhbGxvY2F0aW9uIGJhbGFuY2luZwpAQCAtMjAzLDEwICsyMDYsOSBAQCBzdGF0aWMgaW50 IGNsb2Nrc3dlZXBfY291bnQgPSAwOwogICogaWQgb2YgdGhlIGJ1ZmZlciBub3cgdW5kZXIg dGhlIGhhbmQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdWludDMyCi1DbG9ja1N3ZWVwVGljayh2 b2lkKQorQ2xvY2tTd2VlcFRpY2soQ2xvY2tTd2VlcCAqc3dlZXApCiB7CiAJdWludDMyCQl2 aWN0aW07Ci0JQ2xvY2tTd2VlcCAqc3dlZXAgPSBDaG9vc2VDbG9ja1N3ZWVwKHRydWUpOwog CiAJLyoKIAkgKiBBdG9taWNhbGx5IG1vdmUgaGFuZCBhaGVhZCBvbmUgYnVmZmVyIC0gaWYg dGhlcmUncyBzZXZlcmFsIHByb2Nlc3NlcwpAQCAtNDI1LDggKzQyNyw4IEBAIFN0cmF0ZWd5 R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCB1aW50MzIgKmJ1Zl9z dGF0ZSwgYm9vbCAqZnJvbV9yCiB7CiAJQnVmZmVyRGVzYyAqYnVmOwogCWludAkJCWJnd3By b2NubzsKLQlpbnQJCQl0cnljb3VudGVyOwotCXVpbnQzMgkJbG9jYWxfYnVmX3N0YXRlOwkv KiB0byBhdm9pZCByZXBlYXRlZCAoZGUtKXJlZmVyZW5jaW5nICovCisJQ2xvY2tTd2VlcCAq c3dlZXAsCisJCQkgICAqc3dlZXBfc3RhcnQ7CQkvKiBzdGFydGluZyBjbG9jay1zd2VlcCBw YXJ0aXRpb24gKi8KIAogCSpmcm9tX3JpbmcgPSBmYWxzZTsKIApAQCAtNDgwLDM0ICs0ODIs NjggQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ks IHVpbnQzMiAqYnVmX3N0YXRlLCBib29sICpmcm9tX3IKIAkvKgogCSAqIFVzZSB0aGUgImNs b2NrIHN3ZWVwIiBhbGdvcml0aG0gdG8gZmluZCBhIGZyZWUgYnVmZmVyCiAJICoKLQkgKiBY WFggTm90ZSB0aGF0IENsb2NrU3dlZXBUaWNrKCkgaXMgTlVNQS1hd2FyZSwgaS5lLiBpdCBv bmx5IGxvb2tzIGF0Ci0JICogYnVmZmVycyBmcm9tIGEgc2luZ2xlIHBhcnRpdGlvbiwgYWxp Z25lZCB3aXRoIHRoZSBOVU1BIG5vZGUuIFRoYXQgbWVhbnMKLQkgKiBpdCBvbmx5IGFjY2Vz c2VzIGJ1ZmZlcnMgZnJvbSB0aGUgc2FtZSBOVU1BIG5vZGUuCi0JICoKLQkgKiBYWFggVGhh dCBhbHNvIG1lYW5zIGVhY2ggcHJvY2VzcyAic3dlZXBzIiBvbmx5IGEgZnJhY3Rpb24gb2Yg YnVmZmVycywKLQkgKiBldmVuIGlmIHRoZSBvdGhlciBidWZmZXJzIGFyZSBiZXR0ZXIgY2Fu ZGlkYXRlcyBmb3IgZXZpY3Rpb24uIE1heWJlCi0JICogdGhlcmUgc2hvdWxkIGJlIHNvbWUg bG9naWMgdG8gInN0ZWFsIiBidWZmZXJzIGZyb20gb3RoZXIgZnJlZWxpc3RzIG9yCi0JICog b3RoZXIgbm9kZXM/Ci0JICoKLQkgKiBYWFggV291bGQgdGhhdCBhbHNvIG1lYW4gd2UnZCBo YXZlIG11bHRpcGxlIGJnd3JpdGVycywgb25lIGZvciBlYWNoCi0JICogbm9kZSwgb3Igd291 bGQgb25lIGJnd3JpdGVyIGhhbmRsZSBhbGwgb2YgdGhhdD8KKwkgKiBTdGFydCB3aXRoIHRo ZSAicHJlZmVycmVkIiBwYXJ0aXRpb24sIGFuZCB0aGVuIHByb2NlZWQgaW4gYSByb3VuZC1y b2JpbgorCSAqIG1hbm5lci4gSWYgd2UgY3ljbGUgYmFjayB0byB0aGUgc3RhcnRpbmcgcGFy dGl0aW9uLCBpdCBtZWFucyBub25lIG9mIHRoZQorCSAqIHBhcnRpdGlvbnMgaGFzIHVucGlu bmVkIGJ1ZmZlcnMuCiAJICoKLQkgKiBYWFggVGhpcyBvbmx5IHNlYXJjaGVzIGEgc2luZ2xl IHBhcnRpdGlvbiwgd2hpY2ggY2FuIHJlc3VsdCBpbiAibm8KLQkgKiB1bnBpbm5lZCBidWZm ZXJzIGF2YWlsYWJsZSIgZXZlbiBpZiB0aGVyZSBhcmUgYnVmZmVycyBpbiBvdGhlcgotCSAq IHBhcnRpdGlvbnMuIFNob3VsZCBiZSBmaXhlZCBieSBmYWxsaW5nIGJhY2sgdG8gb3RoZXIg cGFydGl0aW9ucyBpZgotCSAqIG5lZWRlZC4KKwkgKiBYWFggRG9lcyB0aGlzIG5lZWQgdG8g ZG8gc2ltaWxhciBiYWxhbmNpbmcgImJhbGFuY2luZyIgYXMgZm9yIGJnd3JpdGVyCisJICog aW4gU3RyYXRlZ3lTeW5jQmFsYW5jZT8gTWF5YmUgaXQncyBiZSBlbm91Z2ggdG8gc2ltcGx5 IHBpY2sgdGhlIGluaXRpYWwKKwkgKiBwYXJ0aXRpb24gdGhhdCB3YXk/IFdlJ2Qgb25seSBn ZXR0aW5nIGEgc2luZ2xlIGJ1ZmZlciwgc28gbm90IG11Y2ggY2hhbmNlCisJICogdG8gYmFs YW5jZSBvdmVyIG1hbnkgYWxsb2NhdGlvbnMuCiAJICoKLQkgKiBYWFggQWxzbywgdGhlIHRy eWNvdW50ZXIgc2hvdWxkIG5vdCBiZSBzZXQgdG8gTkJ1ZmZlcnMsIGJ1dCB0byBidWZmZXIK LQkgKiBjb3VudCBmb3IgdGhhdCBvbmUgcGFydGl0aW9uLiBJbiBmYWN0LCB0aGlzIHNob3Vs ZCBub3QgY2FsbCBDbG9ja1N3ZWVwVGljawotCSAqIGZvciBldmVyeSBpdGVyYXRpb24uIFRo ZSBjYWxsIGlzIGxpa2VseSBxdWl0ZSBleHBlbnNpdmUgKGRvZXMgYSBsb3QKLQkgKiBvZiBz dHVmZiksIGFuZCBhbHNvIG1heSByZXR1cm4gYSBkaWZmZXJlbnQgcGFydGl0aW9uIG9uIGVh Y2ggY2FsbC4KLQkgKiBXZSBzaG91bGQganVzdCBkbyBpdCBvbmNlLCBhbmQgdGhlbiBkbyB0 aGUgZm9yKDs7KSBsb29wLiBBbmQgdGhlbgotCSAqIG1heWJlIGFkdmFuY2UgdG8gdGhlIG5l eHQgcGFydGl0aW9uLCB1bnRpbCB3ZSBzY2FuIHRocm91Z2ggYWxsIG9mIHRoZW0uCisJICog WFhYIEJ1dCBhY3R1YWxseSwgd2UncmUgY2FsbGluZyBDaG9vc2VDbG9ja1N3ZWVwKCkgd2l0 aCBiYWxhbmNlPXRydWUsIHNvCisJICogbWF5YmUgaXQgYWxyZWFkeSBkb2VzIGJhbGFuY2lu Zz8KIAkgKi8KLQl0cnljb3VudGVyID0gTkJ1ZmZlcnM7CisJc3dlZXAgPSBDaG9vc2VDbG9j a1N3ZWVwKHRydWUpOworCXN3ZWVwX3N0YXJ0ID0gc3dlZXA7CisKIAlmb3IgKDs7KQogCXsK LQkJYnVmID0gR2V0QnVmZmVyRGVzY3JpcHRvcihDbG9ja1N3ZWVwVGljaygpKTsKKwkJYnVm ID0gU3RyYXRlZ3lHZXRCdWZmZXJQYXJ0aXRpb24oc3dlZXAsIHN0cmF0ZWd5LCBidWZfc3Rh dGUpOworCisJCS8qIGZvdW5kIGEgYnVmZmVyIGluIHRoZSAic3dlZXAiIHBhcnRpdGlvbiwg d2UncmUgZG9uZSAqLworCQlpZiAoYnVmICE9IE5VTEwpCisJCQlyZXR1cm4gYnVmOworCisJ CS8qCisJCSAqIFRyeSBhZHZhbmNpbmcgdG8gdGhlIG5leHQgcGFydGl0aW9uLCByb3VuZC1y b2JpbiAoaWYgbGFzdCBwYXJ0aXRpb24sCisJCSAqIHdyYXAgYXJvdW5kIHRvIHRoZSBiZWdp bm5pbmcpLgorCQkgKgorCQkgKiBYWFggVGhpcyBpcyBhIGJpdCB1Z2x5LCB0aGVyZSBtdXN0 IGJlIGEgYmV0dGVyIHdheSB0byBhZHZhbmNlIHRvIHRoZQorCQkgKiBuZXh0IHBhcnRpdGlv bi4KKwkJICovCisJCWlmIChzd2VlcCA9PSAmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbU3Ry YXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9ucyAtIDFdKQorCQkJc3dlZXAgPSBTdHJhdGVn eUNvbnRyb2wtPnN3ZWVwczsKKwkJZWxzZQorCQkJc3dlZXArKzsKKworCQkvKiB3ZSd2ZSBz Y2FubmVkIGFsbCBwYXJ0aXRpb25zICovCisJCWlmIChzd2VlcCA9PSBzd2VlcF9zdGFydCkK KwkJCWJyZWFrOworCX0KKworCS8qIHdlIHNob3VsZG4ndCBnZXQgaGVyZSBpZiB0aGVyZSBh cmUgdW5waW5uZWQgYnVmZmVycyAqLworCWVsb2coRVJST1IsICJubyB1bnBpbm5lZCBidWZm ZXJzIGF2YWlsYWJsZSIpOworfQorCisvKgorICogU3RyYXRlZ3lHZXRCdWZmZXJQYXJ0aXRp b24KKyAqCQlnZXQgYSBmcmVlIGJ1ZmZlciBmcm9tIGEgc2luZ2xlIGNsb2NrLXN3ZWVwIHBh cnRpdGlvbgorICoKKyAqIFJldHVybnMgTlVMTCBpZiB0aGVyZSBhcmUgbm8gZnJlZSAodW5w aW5uZWQpIGJ1ZmZlcnMgaW4gdGhlIHBhcnRpdGlvbi4KKyovCitzdGF0aWMgQnVmZmVyRGVz YyAqCitTdHJhdGVneUdldEJ1ZmZlclBhcnRpdGlvbihDbG9ja1N3ZWVwICpzd2VlcCwgQnVm ZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCisJCQkJCQkgICB1aW50MzIgKmJ1Zl9zdGF0 ZSkKK3sKKwlCdWZmZXJEZXNjICpidWY7CisJaW50CQkJdHJ5Y291bnRlcjsKKwl1aW50MzIJ CWxvY2FsX2J1Zl9zdGF0ZTsJLyogdG8gYXZvaWQgcmVwZWF0ZWQgKGRlLSlyZWZlcmVuY2lu ZyAqLworCisJdHJ5Y291bnRlciA9IHN3ZWVwLT5udW1CdWZmZXJzOworCWZvciAoOzspCisJ eworCQlidWYgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKENsb2NrU3dlZXBUaWNrKHN3ZWVwKSk7 CiAKIAkJLyoKIAkJICogSWYgdGhlIGJ1ZmZlciBpcyBwaW5uZWQgb3IgaGFzIGEgbm9uemVy byB1c2FnZV9jb3VudCwgd2UgY2Fubm90IHVzZQpAQCAtNTIxLDcgKzU1Nyw3IEBAIFN0cmF0 ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCB1aW50MzIgKmJ1 Zl9zdGF0ZSwgYm9vbCAqZnJvbV9yCiAJCQl7CiAJCQkJbG9jYWxfYnVmX3N0YXRlIC09IEJV Rl9VU0FHRUNPVU5UX09ORTsKIAotCQkJCXRyeWNvdW50ZXIgPSBOQnVmZmVyczsKKwkJCQl0 cnljb3VudGVyID0gc3dlZXAtPm51bUJ1ZmZlcnM7CiAJCQl9CiAJCQllbHNlCiAJCQl7CkBA IC01NDIsNyArNTc4LDcgQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRl Z3kgc3RyYXRlZ3ksIHVpbnQzMiAqYnVmX3N0YXRlLCBib29sICpmcm9tX3IKIAkJCSAqIGlu ZmluaXRlIGxvb3AuCiAJCQkgKi8KIAkJCVVubG9ja0J1ZkhkcihidWYsIGxvY2FsX2J1Zl9z dGF0ZSk7Ci0JCQllbG9nKEVSUk9SLCAibm8gdW5waW5uZWQgYnVmZmVycyBhdmFpbGFibGUi KTsKKwkJCXJldHVybiBOVUxMOwogCQl9CiAJCVVubG9ja0J1ZkhkcihidWYsIGxvY2FsX2J1 Zl9zdGF0ZSk7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMjdfc3Ry ZWFtX3JlZ3Jlc3MucGwgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAyN19zdHJlYW1fcmVncmVz cy5wbAppbmRleCA5OGIxNDZlZDRiNy4uNTg5Yzc5ZDk3ZDMgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlY292ZXJ5L3QvMDI3X3N0cmVhbV9yZWdyZXNzLnBsCisrKyBiL3NyYy90ZXN0L3Jl Y292ZXJ5L3QvMDI3X3N0cmVhbV9yZWdyZXNzLnBsCkBAIC0xOCwxMSArMTgsNiBAQCAkbm9k ZV9wcmltYXJ5LT5hZGp1c3RfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ21heF9jb25uZWN0 aW9ucycsICcyNScpOwogJG5vZGVfcHJpbWFyeS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwu Y29uZicsCiAJJ21heF9wcmVwYXJlZF90cmFuc2FjdGlvbnMgPSAxMCcpOwogCi0jIFRoZSBk ZWZhdWx0IGlzIDFNQiwgd2hpY2ggaXMgbm90IGVub3VnaCB3aXRoIGNsb2NrLXN3ZWVwIHBh cnRpdGlvbmluZy4KLSMgSW5jcmVhc2UgdG8gMzJNQiwgc28gdGhhdCB3ZSBkb24ndCBnZXQg Im5vIHVucGlubmVkIGJ1ZmZlcnMiLgotJG5vZGVfcHJpbWFyeS0+YXBwZW5kX2NvbmYoJ3Bv c3RncmVzcWwuY29uZicsCi0JJ3NoYXJlZF9idWZmZXJzID0gMzJNQicpOwotCiAjIEVuYWJs ZSBwZ19zdGF0X3N0YXRlbWVudHMgdG8gZm9yY2UgdGVzdHMgdG8gZG8gcXVlcnkganVtYmxp bmcuCiAjIHBnX3N0YXRfc3RhdGVtZW50cy5tYXggc2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0 byBob2xkIGFsbCB0aGUgZW50cmllcwogIyBvZiB0aGUgcmVncmVzc2lvbiBkYXRhYmFzZS4K LS0gCjIuNTEuMAoK --------------7ugtFjYi6YRzRLN0MXp6Nj6F--