Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vppNO-00Gw1U-1n for pgsql-hackers@arkaria.postgresql.org; Tue, 10 Feb 2026 15:10:07 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vppNN-00Fmiw-1I for pgsql-hackers@arkaria.postgresql.org; Tue, 10 Feb 2026 15:10:05 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vppNM-00Fmij-1v for pgsql-hackers@lists.postgresql.org; Tue, 10 Feb 2026 15:10:04 +0000 Received: from fhigh-a3-smtp.messagingengine.com ([103.168.172.154]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vppNH-000000021S9-2dMO for pgsql-hackers@postgresql.org; Tue, 10 Feb 2026 15:10:04 +0000 Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfhigh.phl.internal (Postfix) with ESMTP id E05591400199 for ; Tue, 10 Feb 2026 10:09:56 -0500 (EST) Received: from phl-imap-14 ([10.202.2.87]) by phl-compute-02.internal (MEProxy); Tue, 10 Feb 2026 10:09:56 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burd.me; h=cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1770736196; x=1770822596; bh=9Kj+oCsc4M HDzdN5dEtgHgxYf04g0efMumjl93oA+Ds=; b=KK1QGXhx4PvdKfcQUI5XxyK9fH qnQfuZ5hoRYSawJSiRUgjfo5B53pel+GEBQjN9p+M2KlyPhoOktqd//cy+/GSHv+ EQ0jvYLWAjWgXRYpISHiMUH/YuT49g70jinDr1v0qrFBSPszFFyrzNgCZdJ3tEab +LwNu0+4EKVUhjodzwF0977Q+jhxw4FhmfLbvKsF9D8t64AIpLM7j2aphLk3Irvw GuGWWjuKx6J4RnRnr7uEbcqJeMAcZ+KOmVTlqAZaWAcZzocQObaw2B7RiVI+dWnd D9a1I6MCFAvC9Du7YF1lkq5mWmF1TqMUjFJX7fTLzgS5vnu/AzkLv5SpHOjA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t= 1770736196; x=1770822596; bh=9Kj+oCsc4MHDzdN5dEtgHgxYf04g0efMumj l93oA+Ds=; b=UNdb5N8fWyf9iMIi3f5GS/sYJbc5ZW0lC9YULHIHIhWyDl5EGoW LMfEfJIJSKtbgW5qXJjZI42OnULjVWsd2FX0WPwvLpAFaS2gdPEBnOvLpww2mJuP i+DQP+DwpK8bIzVyDy+K2UmJZ2qXo+KQquiDysICy2XX/RlzQiOB8GN0sCOFB2mD D+cJ/0OScMG5VZiguxsnx+49D++UUGwujswmFEs1sgF+AHFgwbLulHuTZam8o8lx V88wdkldKXddDIj1TLuT8trVcICpQ2Csoyd2gaGd1QZfjJNCwWkqiI7IFUBA+a+s 0Amey2c3Z/fwL/CzGxbiLVKDKhwX5RThVuA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefgedrtddtgddvtddttddtucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpefoggffhffvkfgjfhfutgesmhdtreerre dtjeenucfhrhhomhepfdfirhgvghcuuehurhgufdcuoehgrhgvghessghurhgurdhmvgeq necuggftrfgrthhtvghrnhepffevudelffevuefffffgudegieefkeevlefhtdegffefff dttdeguedvgeefjeefnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghi lhhfrhhomhepghhrvghgsegsuhhrugdrmhgvpdhnsggprhgtphhtthhopedupdhmohguvg epshhmthhpohhuthdprhgtphhtthhopehpghhsqhhlqdhhrggtkhgvrhhssehpohhsthhg rhgvshhqlhdrohhrgh X-ME-Proxy: Feedback-ID: i675e48f3:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id 95427C4006E; Tue, 10 Feb 2026 10:09:56 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: A1gxZgRQNkgk Date: Tue, 10 Feb 2026 10:09:36 -0500 From: "Greg Burd" To: pgsql-hackers Message-Id: <97769442-2ed7-4fe0-a393-7e2b5ff7ff58@app.fastmail.com> In-Reply-To: <9394564A-5764-4DCA-8845-8AE102DE61DC@greg.burd.me> References: <5165C147-B476-4E3D-AAA9-11C0B966FC4D@greg.burd.me> <9394564A-5764-4DCA-8845-8AE102DE61DC@greg.burd.me> Subject: Re: Expanding HOT updates for expression and partial indexes Content-Type: multipart/mixed; boundary=f70e65a2f25740fea16fe12777451009 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --f70e65a2f25740fea16fe12777451009 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hello, TL;DR, I'm going to put a pin in this idea for now. I'll net out where this patch set is quickly and leave the majority of t= he detail for anyone curious in an addendum below. The patch set enables HOT updates a few new cases: * when expressions on indexes remain constant * when updates fall outside partial index predicates * when indexes report that their keys are unchanged by the update The benefits are: * more HOT updates * reduced index bloat * modified index attributes identified ahead of table AM update The drawbacks are: * the overhead of doing net-new work determining modified attributes * higher concurrency causing retries, compounding that work * index and predicate expressions executed more frequently Performance: ------------ The good, * HOT improvements: 95-100% * Bloat reduction: 50-98% * Update 100 rows at once: +27% throughput, -98% bloat the bad, * -2% to -6% throughput regression on updates across the board and the ugly. - net new work finding modified indexed attributes - net new retries on update due to added concurrency (TU_Updated) - retries then must re-identify modified indexed attributes While I still believe in expanding HOT updates and that moving the logic= for finding the set of modified index attributes into the executor was a goo= d idea, it is late in the v19 cycle and at this stage the trade-offs feel unacce= ptable. So I'm going to withdraw this patch and pause here on development and re= consider my approach in the v20 cycle. I have some ideas on how to avoid the need= to evaluate these expressions entirely and I still have a fondness for the = idea of only updating those indexes that changed (PHOT/WARM/whatever) on update,= maybe I'll combine the ideas. best. -greg ADDENDUM: ExecUpdate (nodeModifyTable.c) -> [PATCHED] after the l2: label, ExecCheckIndexedAttrsForChanges() -> [UNPATCHED] (nothing at this point...) -> table_tuple_update() -> heap_update() -> LockBuffer(BUFFER_LOCK_EXCLUSIVE) -> [UNPATCHED] HeapDetermineColumnsInfo() // uses memcmp() for dat= um comparison -> returns TM_Updated immediately, frees modified_attrs -> EvalPlanQual() // recheck with updated tuple -> ExecUpdate (retry) -> [PATCHED] ExecCheckIndexedAttrsForChanges() // second evaluation -> [UNPATCHED] (nothing at this point...) -> table_tuple_update() -> heap_update() -> LockBuffer(BUFFER_LOCK_EXCLUSIVE) -> HeapDetermineColumnsInfo() // second evaluation As illustrated above, the patches move indexed attribute checking from HeapDetermineColumnsInfo() (called once in heap_update under buffer lock BUFFER_LOCK_EXCLUSIVE) to ExecCheckIndexedAttrsForChanges() (called in t= he executor before calling table_tuple_update() when the buffer with the ol= d tuple is pinned, but not holding locked exclusively). In the unpatched code, w= hen heap_update() returns TM_Updated due to a concurrent update, it immediat= ely returns to the executor without retrying - the modified_attrs bitmapset = is freed and the executor performs an EPQ (EvalPlanQual) recheck before calling table_tuple_update() again. On this second call, the unpatched code re-e= xecutes HeapDetermineColumnsInfo() with the new tuple because the modified_attrs= may have changed. The patched code similarly calls ExecCheckIndexedAttrsForC= hanges() again, as it will have jumped to the l2: label, before retrying table_tuple_update(). Both versions re-evaluate to find the modified attributes bitmap on conc= urrent conflicts, the key differences are: 1) the patched version performs richer comparisons (partial index predic= ates, index AM amcomparedatums(), expression evaluation) while the unpatched version only does binary datum comparison using memcmp() and, 2) under high contention running outside the buffer lock has increased t= he probability TM_Updated because he window for concurrent modifications= has increased. It may be that expanding the window for concurrency (2) during updates i= s a mistake as it is impossible for the heap to update two different tuples = on the same page concurrently so this has no potential benefit and compounds the expense. However, it is entirely possible that other table AMs could have differe= nt concurrency models and so in theory we should allow for that. Consider = how some LSMs work, concurrent updates are just appends to the current log file. = Maybe the table AM should indicate a need for a buffer lock or not during upda= tes? PATCHES: 0001: Refactors heapam_tuple_update()/heap_update() by removing some cod= e in the beginning of heap_update() into both heapam_tuple_update() and simple_heap_update() as a preface for removing the need for HeapDetermineColumnsInfo() when calling heapam_tuple_update(). 0002: Moves the detection of modified indexed columns from within heap i= nto the executor in a new function ExecWhichIndexesRequireUpdates() that r= eplaces HeapDetermineColumnsInfo(). This shift now detects the set of modified indexed columns earlier= in the query execution process (just after the l2: label in nodeModifyTab= le.c) and crucially outside of an exclusive buffer page lock as was the = case before in heap_update(). ExecCheckIndexedAttrsForChanges() returns a Bitmapset, identical to HeapDetermineColumsInfo(), of the modified indexed columns. While = similar in spirit to HeapDetermineColumsInfo(), this new function also eva= luates expressions, and potentially calls into a new index AM API amcomparedatums(). This is the key change that enables HOT updates= when expressions are unchanged on update. The new optional index AM function amcomparedatums() allows index implementations to define their own custom logic for determining i= f a datum has changed and if that change requires that the index be up= dated or not. This has been implemented for GIN and HASH. The patch also updates the replication logic in execReplication() = to correctly provide the set of modified indexed attributes extracted= from the replicated tuples to avoid overhead of rediscovery later on. Catalog tuple updates are unchanged and continue to use simple_heap_update() which in turn calls HeapDetermineColumsInfo()= . Note that I proposed a separate patch set to remove HeapDetermineColums= Info() from simple_heap_update() by changing the way catalog tuples are u= pdated, but that has since been abandoned. See cf-6221 for more details on= this. 0003: Removes the now-redundant index_unchanged_by_update() function. Its functionality is superseded by simply reusing the Bitmapset create= d by ExecWhichIndexesRequireUpdates() and stored in ri_ChangedIndexedCo= ls. 0004: Moves the evaluation of partial index predicates from after the ta= ble update to before it, within the ExecWhichIndexesRequireUpdates(). = If both the old and new tuples are outside the index's predicate, the inde= x is not considered impacted, and so the attributes in the predicate are not recorded in the resulting Bitmapset potentially allowing for a HOT= update. PERFORMANCE TEST RESULTS: Platform: FreeBSD 15 (Intel NUC) Duration: 600 seconds (10 minutes) per-test, ~3.5 hours total Baseline: 8ebdf41c262 (origin/master) Patched: bdfe58c4537 (origin/master + 4 patches) HOT Update Percentages: =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Test Baseline Patched =CE=94 =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 JSONB BTREE expression index 0.0% 95.0% 95.0% JSONB GIN expression index 0.0% 98.1% 98.1% Partial index 0.0% 96.3% 96.3% 3 expression indexes 0.0% 98.2% 98.2% 6 expression indexes 0.0% 100.0% 100.0% Array expression index 0.0% 97.8% 97.8% UPDATE 100 rows 0.0% 99.7% 99.7% Control: indexed field changes 47.7% 48.2% .5% Control: expensive expression 0.0% 0.0% 0% Control: Induced TU_Updated 0.1% 0.1% 0% Throughput (10 clients): =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Test Baseline Patched =CE=94 =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 JSONB BTREE expression index 563.6 543.2 -3.6% JSONB GIN expression index 556.5 536.6 -3.5% Partial index 415.6 406.4 -2.2% 3 expression indexes 553.6 535.1 -3.3% 6 expression indexes 528.9 511.8 -3.2% Array expression index 560.7 542.6 -3.2% UPDATE 100 rows 840.9 1066.7 26.8% Control: indexed field changes 564.6 529.0 -6.3% Control: expensive expression 563.4 527.3 -6.4% Control: Induced TU_Updated 1677.5 1730.4 3.1% Index Bloat After Updates (MB): =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Test Baseline Patched Reduction =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 JSONB BTREE expression index 8.2 2.9 64.6% JSONB GIN expression index 8.8 6.3 27.3% Partial index 4.3 2.1 49.8% 3 expression indexes 13.4 4.1 68.7% 6 expression indexes 26.7 5.9 77.7% Array expression index 12.8 4.3 66.5% UPDATE 100 rows 453.5 6.9 98.4% Control: indexed field changes 4.6 4.5 .6% Control: expensive expression 27.2 25.9 4.8% Control: Induced TU_Updated 7.9 7.9 0% --f70e65a2f25740fea16fe12777451009 Content-Disposition: attachment; filename="perf-cf5556" Content-Type: application/octet-stream; name="perf-cf5556" Content-Transfer-Encoding: base64 IyEvdXNyL2Jpbi9lbnYgYmFzaAoKc2V0IC1ldSAtbyBwaXBlZmFpbAoKIyBDb25maWd1cmF0 aW9uClRFU1RfRFVSQVRJT049JHtURVNUX0RVUkFUSU9OOi0xODB9ClBSRUxPQUQ9MTAwMDAw CkNMSUVOVFM9MTAKCldPUktESVI9IiR7V09SS0RJUjotJChwd2QpfSIKUkVTVUxUU19ESVI9 IiRXT1JLRElSL2NmLTU1NTYtcmVzdWx0cy0kKGRhdGUgKyVZJW0lZF8lSCVNJVMpIgpta2Rp ciAtcCAiJFJFU1VMVFNfRElSIgoKY2QgIiRXT1JLRElSIgpCQVNFTElORV9DT01NSVQ9JChn aXQgcmV2LXBhcnNlIC0tc2hvcnQ9MTEgb3JpZ2luL21hc3RlcikKClBBVENIRVM9KCQobHMg LTEgdj8/LSoucGF0Y2ggMj4vZGV2L251bGwgfCBzb3J0KSkKaWYgWyAkeyNQQVRDSEVTW0Bd fSAtZXEgMCBdOyB0aGVuCiAgICBlY2hvICJFcnJvcjogTm8gdj8/LSoucGF0Y2ggZmlsZXMg Zm91bmQgaW4gJFdPUktESVIiCiAgICBleGl0IDEKZmkKClBBVENIRURfQlJBTkNIPSJjZi01 NTU2LXRlc3QtcGF0Y2hlZCIKZ2l0IGJyYW5jaCAtRCAiJFBBVENIRURfQlJBTkNIIiAyPi9k ZXYvbnVsbCB8fCB0cnVlCmdpdCBjaGVja291dCAtcSBvcmlnaW4vbWFzdGVyCmdpdCBjaGVj a291dCAtcSAtYiAiJFBBVENIRURfQlJBTkNIIgoKZm9yIHBhdGNoIGluICIke1BBVENIRVNb QF19IjsgZG8KICAgIGdpdCBhbSAiJHBhdGNoIiA+IC9kZXYvbnVsbCAyPiYxIHx8IHsKCWVj aG8gIkVycm9yOiBGYWlsZWQgdG8gYXBwbHkgJHBhdGNoIgoJZ2l0IGFtIC0tYWJvcnQgMj4v ZGV2L251bGwgfHwgdHJ1ZQoJZXhpdCAxCiAgICB9CmRvbmUKClBBVENIRURfQ09NTUlUPSQo Z2l0IHJldi1wYXJzZSAtLXNob3J0PTExIEhFQUQpCgplY2hvICJUZXN0IGR1cmF0aW9uOiAk e1RFU1RfRFVSQVRJT059IHNlY29uZHMgcGVyIHRlc3QiCmVjaG8gIkJhc2VsaW5lOiAkQkFT RUxJTkVfQ09NTUlUIChvcmlnaW4vbWFzdGVyKSIKZWNobyAiUGF0Y2hlZDogICRQQVRDSEVE X0NPTU1JVCAob3JpZ2luL21hc3RlciArICR7I1BBVENIRVNbQF19IHBhdGNoZXMpIgplY2hv ICJSZXN1bHRzOiAgJFJFU1VMVFNfRElSIgplY2hvICIiCgojIFRlc3QgZGVmaW5pdGlvbnM6 IG5hbWUsIGluaXRfc3FsLCBiZW5jaF9zcWwKZGVjbGFyZSAtYSBURVNUUz0oCiAgICAiSlNP TkIgQlRSRUUgZXhwcmVzc2lvbiBpbmRleCIKICAgICJDUkVBVEUgVEFCTEUgdCAoaWQgaW50 IFBSSU1BUlkgS0VZLCBkYXRhIGpzb25iKTsKICAgICBDUkVBVEUgSU5ERVggaWR4IE9OIHQo KGRhdGEtPj4nY2F0ZWdvcnknKSk7CiAgICAgSU5TRVJUIElOVE8gdCBTRUxFQ1QgaSwganNv bmJfYnVpbGRfb2JqZWN0KCdjYXRlZ29yeScsICdBJywgJ3ZhbHVlJywgMCkgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwgJFBSRUxPQUQpIGk7IgogICAgIlVQREFURSB0IFNFVCBkYXRhID0g anNvbmJfc2V0KGRhdGEsICd7dmFsdWV9JywgdG9fanNvbmIoKHJhbmRvbSgpICogMTAwMDAw MCk6OmludCkpCiAgICAgV0hFUkUgaWQgPSBmbG9vcihyYW5kb20oKSAqICgkUFJFTE9BRCAv ICRDTElFTlRTKSk6OmludCAqICRDTElFTlRTICsgOmNsaWVudF9pZDsiCgogICAgIkpTT05C IEdJTiBleHByZXNzaW9uIGluZGV4IgogICAgIkNSRUFURSBUQUJMRSB0IChpZCBpbnQgUFJJ TUFSWSBLRVksIGRhdGEganNvbmIpOwogICAgIENSRUFURSBJTkRFWCBpZHggT04gdCBVU0lO RyBnaW4oKGRhdGEtPid0YWdzJykpOwogICAgIElOU0VSVCBJTlRPIHQgU0VMRUNUIGksIGpz b25iX2J1aWxkX29iamVjdCgndGFncycsIGpzb25iX2J1aWxkX2FycmF5KCdwb3N0Z3Jlcycs ICdzcWwnKSwgJ2NvdW50ZXInLCAwKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAkUFJFTE9B RCkgaTsiCiAgICAiVVBEQVRFIHQgU0VUIGRhdGEgPSBqc29uYl9zZXQoZGF0YSwgJ3tjb3Vu dGVyfScsIHRvX2pzb25iKChyYW5kb20oKSAqIDEwMDAwMDApOjppbnQpKQogICAgIFdIRVJF IGlkID0gZmxvb3IocmFuZG9tKCkgKiAoJFBSRUxPQUQgLyAkQ0xJRU5UUykpOjppbnQgKiAk Q0xJRU5UUyArIDpjbGllbnRfaWQ7IgoKICAgICJQYXJ0aWFsIGluZGV4IgogICAgIkNSRUFU RSBUQUJMRSB0IChpZCBpbnQgUFJJTUFSWSBLRVksIHN0YXR1cyB0ZXh0LCB2YWx1ZSBpbnQp OwogICAgIENSRUFURSBJTkRFWCBpZHggT04gdCh2YWx1ZSkgV0hFUkUgc3RhdHVzID0gJ2Fj dGl2ZSc7CiAgICAgSU5TRVJUIElOVE8gdCBTRUxFQ1QgaSwgJ2luYWN0aXZlJywgaSBGUk9N IGdlbmVyYXRlX3NlcmllcygxLCAkUFJFTE9BRCkgaTsiCiAgICAiVVBEQVRFIHQgU0VUIHZh bHVlID0gdmFsdWUgKyAxIFdIRVJFIHN0YXR1cyA9ICdpbmFjdGl2ZScKICAgICBBTkQgaWQg PSBmbG9vcihyYW5kb20oKSAqICgkUFJFTE9BRCAvICRDTElFTlRTKSk6OmludCAqICRDTElF TlRTICsgOmNsaWVudF9pZDsiCgogICAgIjMgZXhwcmVzc2lvbiBpbmRleGVzIgogICAgIkNS RUFURSBUQUJMRSB0IChpZCBpbnQgUFJJTUFSWSBLRVksIGRhdGEganNvbmIpOwogICAgIENS RUFURSBJTkRFWCBpZHgxIE9OIHQoKGRhdGEtPj4nZmllbGQxJykpOwogICAgIENSRUFURSBJ TkRFWCBpZHgyIE9OIHQoKGRhdGEtPj4nZmllbGQyJykpOwogICAgIENSRUFURSBJTkRFWCBp ZHgzIE9OIHQoKGRhdGEtPj4nZmllbGQzJykpOwogICAgIElOU0VSVCBJTlRPIHQgU0VMRUNU IGksIGpzb25iX2J1aWxkX29iamVjdCgnZmllbGQxJywgJ0EnLCAnZmllbGQyJywgJ0InLCAn ZmllbGQzJywgJ0MnLCAnY291bnRlcicsIDApIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsICRQ UkVMT0FEKSBpOyIKICAgICJVUERBVEUgdCBTRVQgZGF0YSA9IGpzb25iX3NldChkYXRhLCAn e2NvdW50ZXJ9JywgdG9fanNvbmIoKHJhbmRvbSgpICogMTAwMDAwMCk6OmludCkpCiAgICAg V0hFUkUgaWQgPSBmbG9vcihyYW5kb20oKSAqICgkUFJFTE9BRCAvICRDTElFTlRTKSk6Omlu dCAqICRDTElFTlRTICsgOmNsaWVudF9pZDsiCgogICAgIjYgZXhwcmVzc2lvbiBpbmRleGVz IgogICAgIkNSRUFURSBUQUJMRSB0IChpZCBpbnQgUFJJTUFSWSBLRVksIGRhdGEganNvbmIp IFdJVEggKGZpbGxmYWN0b3IgPSA3MCk7CiAgICAgQ1JFQVRFIElOREVYIGlkeDEgT04gdCgo ZGF0YS0+PidmMScpKTsKICAgICBDUkVBVEUgSU5ERVggaWR4MiBPTiB0KChkYXRhLT4+J2Yy JykpOwogICAgIENSRUFURSBJTkRFWCBpZHgzIE9OIHQoKGRhdGEtPj4nZjMnKSk7CiAgICAg Q1JFQVRFIElOREVYIGlkeDQgT04gdCgoZGF0YS0+PidmNCcpKTsKICAgICBDUkVBVEUgSU5E RVggaWR4NSBPTiB0KChkYXRhLT4+J2Y1JykpOwogICAgIENSRUFURSBJTkRFWCBpZHg2IE9O IHQoKGRhdGEtPj4nZjYnKSk7CiAgICAgSU5TRVJUIElOVE8gdCBTRUxFQ1QgaSwganNvbmJf YnVpbGRfb2JqZWN0KCdmMScsJ0EnLCdmMicsJ0InLCdmMycsJ0MnLCdmNCcsJ0QnLCdmNScs J0UnLCdmNicsJ0YnLCdjb3VudGVyJywwKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAkUFJF TE9BRCkgaTsiCiAgICAiVVBEQVRFIHQgU0VUIGRhdGEgPSBqc29uYl9zZXQoZGF0YSwgJ3tj b3VudGVyfScsIHRvX2pzb25iKChyYW5kb20oKSAqIDEwMDAwMDApOjppbnQpKQogICAgIFdI RVJFIGlkID0gZmxvb3IocmFuZG9tKCkgKiAoJFBSRUxPQUQgLyAkQ0xJRU5UUykpOjppbnQg KiAkQ0xJRU5UUyArIDpjbGllbnRfaWQ7IgoKICAgICJBcnJheSBleHByZXNzaW9uIGluZGV4 IgogICAgIkNSRUFURSBUQUJMRSB0IChpZCBpbnQgUFJJTUFSWSBLRVksIGFyciBpbnRbXSk7 CiAgICAgQ1JFQVRFIElOREVYIGlkeCBPTiB0KChhcnJbNV0pKTsKICAgICBJTlNFUlQgSU5U TyB0IFNFTEVDVCBpLCBBUlJBWVtpLCBpKzEsIGkrMiwgaSszLCBpKzQsIGkrNSwgaSs2XSBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLCAkUFJFTE9BRCkgaTsiCiAgICAiVVBEQVRFIHQgU0VU IGFyclszXSA9IChyYW5kb20oKSAqIDEwMDAwMDApOjppbnQKICAgICBXSEVSRSBpZCA9IGZs b29yKHJhbmRvbSgpICogKCRQUkVMT0FEIC8gJENMSUVOVFMpKTo6aW50ICogJENMSUVOVFMg KyA6Y2xpZW50X2lkOyIKCiAgICAiVVBEQVRFIDEwMCByb3dzIgogICAgIkNSRUFURSBUQUJM RSB0IChpZCBpbnQgUFJJTUFSWSBLRVksIGRhdGEganNvbmIpOwogICAgIENSRUFURSBJTkRF WCBpZHggT04gdCgoZGF0YS0+PidjYXRlZ29yeScpKTsKICAgICBJTlNFUlQgSU5UTyB0IFNF TEVDVCBpLCBqc29uYl9idWlsZF9vYmplY3QoJ2NhdGVnb3J5JywgJ0EnLCAndmFsdWUnLCAw KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAkUFJFTE9BRCkgaTsiCiAgICAiXHNldCBzdGFy dF9pZCByYW5kb20oMSwgJFBSRUxPQUQgLSAxMDApClVQREFURSB0IFNFVCBkYXRhID0ganNv bmJfc2V0KGRhdGEsICd7dmFsdWV9JywgdG9fanNvbmIoKHJhbmRvbSgpICogMTAwMDAwMCk6 OmludCkpIFdIRVJFIGlkIEJFVFdFRU4gOnN0YXJ0X2lkIEFORCA6c3RhcnRfaWQgKyA5OTsi CgogICAgIkNvbnRyb2w6IGluZGV4ZWQgZmllbGQgY2hhbmdlcyIKICAgICJDUkVBVEUgVEFC TEUgdCAoaWQgaW50IFBSSU1BUlkgS0VZLCBkYXRhIGpzb25iKTsKICAgICBDUkVBVEUgSU5E RVggaWR4IE9OIHQoKGRhdGEtPj4nc3RhdHVzJykpOwogICAgIElOU0VSVCBJTlRPIHQgU0VM RUNUIGksIGpzb25iX2J1aWxkX29iamVjdCgnc3RhdHVzJywgJ2FjdGl2ZScsICdjb3VudGVy JywgMCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgJFBSRUxPQUQpIGk7IgogICAgIlVQREFU RSB0IFNFVCBkYXRhID0ganNvbmJfc2V0KGRhdGEsICd7c3RhdHVzfScsIHRvX2pzb25iKENB U0UgV0hFTiByYW5kb20oKSA8IDAuNSBUSEVOICdhY3RpdmUnIEVMU0UgJ2luYWN0aXZlJyBF TkQpKQogICAgIFdIRVJFIGlkID0gZmxvb3IocmFuZG9tKCkgKiAoJFBSRUxPQUQgLyAkQ0xJ RU5UUykpOjppbnQgKiAkQ0xJRU5UUyArIDpjbGllbnRfaWQ7IgoKICAgICJDb250cm9sOiBl eHBlbnNpdmUgZXhwcmVzc2lvbiIKICAgICJDUkVBVEUgVEFCTEUgdCAoaWQgaW50IFBSSU1B UlkgS0VZLCBkYXRhIGpzb25iKTsKICAgICBDUkVBVEUgSU5ERVggaWR4IE9OIHQoKG1kNShk YXRhOjp0ZXh0KSkpOwogICAgIElOU0VSVCBJTlRPIHQgU0VMRUNUIGksIGpzb25iX2J1aWxk X29iamVjdCgndmFsdWUnLCAwKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAkUFJFTE9BRCkg aTsiCiAgICAiVVBEQVRFIHQgU0VUIGRhdGEgPSBqc29uYl9zZXQoZGF0YSwgJ3t2YWx1ZX0n LCB0b19qc29uYigocmFuZG9tKCkgKiAxMDAwMDAwKTo6aW50KSkKICAgICBXSEVSRSBpZCA9 IGZsb29yKHJhbmRvbSgpICogKCRQUkVMT0FEIC8gJENMSUVOVFMpKTo6aW50ICogJENMSUVO VFMgKyA6Y2xpZW50X2lkOyIKCiAgICAiSW5kdWNlZCBUVV9VcGRhdGVkOiBlc3QgfjEwJSBj b250ZW50aW9uIgogICAgIkNSRUFURSBUQUJMRSB0IChpZCBpbnQgUFJJTUFSWSBLRVksIGFt dCBJTlQpOwogICAgIENSRUFURSBJTkRFWCBpZHggT04gdChhbXQpOwogICAgIElOU0VSVCBJ TlRPIHQgU0VMRUNUIGksIDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwMCkgaTsiCiAg ICAiVVBEQVRFIHQgU0VUIGFtdCA9IChyYW5kb20oKSAqIDEwMDApOjppbnQgV0hFUkUgaWQg PSBmbG9vcihyYW5kb20oKSAqIDEwMCArIDEpOjppbnQ7IgopCgpydW5fdGVzdCgpIHsKICAg IGxvY2FsIHZlcnNpb249JDEKICAgIGxvY2FsIGNvbW1pdD0kMgogICAgbG9jYWwgY29tbWl0 X3Nob3J0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0PTExICIkY29tbWl0IikKICAgIGxvY2Fs IGJ1aWxkX2Rpcj0iJFdPUktESVIvYnVpbGQtJGNvbW1pdF9zaG9ydCIKICAgIGxvY2FsIGlu c3RhbGxfZGlyPSIkV09SS0RJUi9pbnN0YWxsLSRjb21taXRfc2hvcnQiCiAgICBsb2NhbCBk YXRhZGlyPSIvdG1wL3BnZGF0YV8kdmVyc2lvbiIKCiAgICBlY2hvICLilIHilIHilIHilIHi lIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHi lIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHi lIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHi lIHilIHilIHilIEiCiAgICBlY2hvICJUZXN0aW5nOiAkdmVyc2lvbiAoJGNvbW1pdF9zaG9y dCkiCiAgICBlY2hvICLilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHi lIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHi lIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHi lIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIEiCgogICAgZ2l0IGNoZWNr b3V0IC1xICIkY29tbWl0IgoKICAgIGlmIFsgLWQgIiRpbnN0YWxsX2RpciIgXSAmJiBbIC1m ICIkaW5zdGFsbF9kaXIvYmluL3Bvc3RncmVzIiBdOyB0aGVuCgllY2hvICJVc2luZyBleGlz dGluZyBidWlsZCBpbiAkaW5zdGFsbF9kaXIg4pyTIgogICAgZWxzZQoJZWNobyAtbiAiQnVp bGRpbmcuLi4gIgoJbWVzb24gLUMgIiRidWlsZF9kaXIiIGNsZWFuID4gL2Rldi9udWxsIDI+ JjEgfHwgdHJ1ZQoJbWVzb24gc2V0dXAgLS1yZWNvbmZpZ3VyZSAtLWJ1aWxkdHlwZT1kZWJ1 Z29wdGltaXplZCAtRHJlYWRsaW5lPWRpc2FibGVkIC0tcHJlZml4PSIkaW5zdGFsbF9kaXIi ICIkYnVpbGRfZGlyIiAiJFdPUktESVIiID4gIiRSRVNVTFRTX0RJUi8ke3ZlcnNpb259X2J1 aWxkLmxvZyIgMj4mMQoJbWVzb24gY29tcGlsZSAtQyAiJGJ1aWxkX2RpciIgPj4gIiRSRVNV TFRTX0RJUi8ke3ZlcnNpb259X2J1aWxkLmxvZyIgMj4mMQoJbWVzb24gaW5zdGFsbCAtQyAi JGJ1aWxkX2RpciIgPj4gIiRSRVNVTFRTX0RJUi8ke3ZlcnNpb259X2J1aWxkLmxvZyIgMj4m MQoJZWNobyAi4pyTIgogICAgZmkKCiAgICBlY2hvIC1uICJTdGFydGluZyBzZXJ2ZXIuLi4g IgogICAgIiRpbnN0YWxsX2Rpci9iaW4vcGdfY3RsIiAtRCAiJGRhdGFkaXIiIHN0b3AgPiAv ZGV2L251bGwgMj4mMSB8fCB0cnVlCiAgICBwa2lsbCAtOSBwb3N0Z3JlcyA+IC9kZXYvbnVs bCAyPiYxIHx8IHRydWUKICAgIHJtIC1yZiAiJGRhdGFkaXIiCiAgICAiJGluc3RhbGxfZGly L2Jpbi9pbml0ZGIiIC1EICIkZGF0YWRpciIgPiAvZGV2L251bGwgMj4mMQogICAgZWNobyAi YXV0b3ZhY3V1bSA9IG9mZiIgPj4gIiRkYXRhZGlyL3Bvc3RncmVzcWwuY29uZiIKICAgICIk aW5zdGFsbF9kaXIvYmluL3BnX2N0bCIgLUQgIiRkYXRhZGlyIiAtbCAiJFJFU1VMVFNfRElS LyR7dmVyc2lvbn1fc2VydmVyLmxvZyIgc3RhcnQgPiAvZGV2L251bGwgMj4mMQogICAgc2xl ZXAgMgogICAgZWNobyAi4pyTIgoKICAgICMgUnVuIHRlc3RzCiAgICBmb3IgKChpPTA7IGk8 JHsjVEVTVFNbQF19OyBpKz0zKSk7IGRvCglsb2NhbCB0ZXN0X251bT0kKChpLzMgKyAxKSkK CWxvY2FsIHRlc3RfbmFtZT0iJHtURVNUU1skaV19IgoJbG9jYWwgaW5pdF9zcWw9IiR7VEVT VFNbJGkrMV19IgoJbG9jYWwgYmVuY2hfc3FsPSIke1RFU1RTWyRpKzJdfSIKCgllY2hvIC1u ICIgIFRlc3QgJHRlc3RfbnVtICgkdGVzdF9uYW1lKS4uLiAiCgoJIiRpbnN0YWxsX2Rpci9i aW4vY3JlYXRlZGIiICJ0ZXN0JHRlc3RfbnVtIiA+IC9kZXYvbnVsbCAyPiYxIHx8IHRydWUK CSIkaW5zdGFsbF9kaXIvYmluL3BzcWwiIC1xIC1BIC10IC1YICJ0ZXN0JHRlc3RfbnVtIiAt YyAiJGluaXRfc3FsIiA+IC9kZXYvbnVsbCAyPiYxCgkiJGluc3RhbGxfZGlyL2Jpbi9wc3Fs IiAtcSAtQSAtdCAtWCAidGVzdCR0ZXN0X251bSIgLWMgIlZBQ1VVTSBBTkFMWVpFIHQ7IiA+ IC9kZXYvbnVsbCAyPiYxCgoJIyBNdWx0aS1jbGllbnQgdGVzdAoJZWNobyAiJGJlbmNoX3Nx bCIgfCAiJGluc3RhbGxfZGlyL2Jpbi9wZ2JlbmNoIiAtbiAtYyAkQ0xJRU5UUyAtaiA0IC1U ICRURVNUX0RVUkFUSU9OIC1mIC0gInRlc3QkdGVzdF9udW0iIFwKCSAgICA+ICIkUkVTVUxU U19ESVIvJHt2ZXJzaW9ufV90ZXN0JHt0ZXN0X251bX1fYmVuY2gudHh0IiAyPiYxCgoJIyBT dGF0cwoJIiRpbnN0YWxsX2Rpci9iaW4vcHNxbCIgLXEgLUEgLXQgLVggInRlc3QkdGVzdF9u dW0iID4gIiRSRVNVTFRTX0RJUi8ke3ZlcnNpb259X3Rlc3Qke3Rlc3RfbnVtfV9zdGF0cy50 eHQiIDI+JjEgPDxFT0YKU0VMRUNUICckdGVzdF9uYW1lJyBhcyB0ZXN0X25hbWU7CldJVEgg dGFibGVfc3RhdHMgQVMgKAogIFNFTEVDVAogICAgQ0FTRQogICAgICBXSEVOIEVYSVNUUyAo U0VMRUNUIDEgRlJPTSBwZ19pbmhlcml0cyBXSEVSRSBpbmhwYXJlbnQgPSAndCc6OnJlZ2Ns YXNzKQogICAgICBUSEVOIChTRUxFQ1Qgc3VtKHBnX3N0YXRfZ2V0X3R1cGxlc191cGRhdGVk KGluaHJlbGlkKSkgRlJPTSBwZ19pbmhlcml0cyBXSEVSRSBpbmhwYXJlbnQgPSAndCc6OnJl Z2NsYXNzKQogICAgICBFTFNFIHBnX3N0YXRfZ2V0X3R1cGxlc191cGRhdGVkKCd0Jzo6cmVn Y2xhc3MpCiAgICBFTkQgYXMgdXBkYXRlcywKICAgIENBU0UKICAgICAgV0hFTiBFWElTVFMg KFNFTEVDVCAxIEZST00gcGdfaW5oZXJpdHMgV0hFUkUgaW5ocGFyZW50ID0gJ3QnOjpyZWdj bGFzcykKICAgICAgVEhFTiAoU0VMRUNUIHN1bShwZ19zdGF0X2dldF90dXBsZXNfaG90X3Vw ZGF0ZWQoaW5ocmVsaWQpKSBGUk9NIHBnX2luaGVyaXRzIFdIRVJFIGluaHBhcmVudCA9ICd0 Jzo6cmVnY2xhc3MpCiAgICAgIEVMU0UgcGdfc3RhdF9nZXRfdHVwbGVzX2hvdF91cGRhdGVk KCd0Jzo6cmVnY2xhc3MpCiAgICBFTkQgYXMgaG90CikKU0VMRUNUIHVwZGF0ZXMsIGhvdCwK ICAgICAgIHJvdW5kKDEwMC4wICogaG90IC8gTlVMTElGKHVwZGF0ZXMsIDApLCAxKSBhcyBo b3RfcGN0CkZST00gdGFibGVfc3RhdHM7ClNFTEVDVCBwZ19yZWxhdGlvbl9zaXplKCd0Jykg YXMgaGVhcF9hZnRlciwKICAgICAgIChTRUxFQ1Qgc3VtKHBnX3JlbGF0aW9uX3NpemUoaW5k ZXhyZWxpZCkpIEZST00gcGdfaW5kZXggV0hFUkUgaW5kcmVsaWQgPSAndCc6OnJlZ2NsYXNz KSBhcyBpbmRleF9hZnRlcjsKRU9GCgoJZWNobyAi4pyTIgogICAgZG9uZQoKICAgIGVjaG8g LW4gIlN0b3BwaW5nIHNlcnZlci4uLiAiCiAgICAiJGluc3RhbGxfZGlyL2Jpbi9wZ19jdGwi IC1EICIkZGF0YWRpciIgc3RvcCA+IC9kZXYvbnVsbCAyPiYxCiAgICBwa2lsbCAtOSBwb3N0 Z3JlcyA+IC9kZXYvbnVsbCAyPiYxIHx8IHRydWUKICAgIGVjaG8gIuKckyIKICAgIGVjaG8g IiIKfQoKcnVuX3Rlc3QgImJhc2VsaW5lIiAiJEJBU0VMSU5FX0NPTU1JVCIKcnVuX3Rlc3Qg InBhdGNoZWQiICIkUEFUQ0hFRF9DT01NSVQiCgojIEdlbmVyYXRlIHJlcG9ydAplY2hvICLi lZTilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZciCmVjaG8gIuKVkSAgICAgICAg ICAgICAgICAgICAgICBSRVNVTFRTIFNVTU1BUlkgICAgICAgICAgICAgICAgICAgICAgICAg ICDilZEiCmVjaG8gIuKVmuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVnSIKZWNo byAiIgoKdGVzdF9uYW1lcz0oKQpmb3IgKChpPTA7IGk8JHsjVEVTVFNbQF19OyBpKz0zKSk7 IGRvCiAgICB0ZXN0X25hbWVzKz0oIiR7VEVTVFNbJGldfSIpCmRvbmUKCmVjaG8gIkhPVCBV cGRhdGUgUGVyY2VudGFnZXM6IgplY2hvICLilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIAiCnByaW50ZiAiJS0zNXMgJTEwcyAlMTBzICUxMHNcbiIgIlRlc3QiICJCYXNlbGluZSIg IlBhdGNoZWQiICLOlCIKZWNobyAi4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIgoK Zm9yIGkgaW4gJChzZXEgMSAkeyN0ZXN0X25hbWVzW0BdfSk7IGRvCiAgICBiYXNlbGluZV9o b3Q9JChncmVwIC12ICJUaW1lOiIgIiRSRVNVTFRTX0RJUi9iYXNlbGluZV90ZXN0JHtpfV9z dGF0cy50eHQiIDI+L2Rldi9udWxsIHwgZ3JlcCAifCIgfCBoZWFkIC0xIHwgY3V0IC1kJ3wn IC1mMykKICAgIHBhdGNoZWRfaG90PSQoZ3JlcCAtdiAiVGltZToiICIkUkVTVUxUU19ESVIv cGF0Y2hlZF90ZXN0JHtpfV9zdGF0cy50eHQiIDI+L2Rldi9udWxsIHwgZ3JlcCAifCIgfCBo ZWFkIC0xIHwgY3V0IC1kJ3wnIC1mMykKCiAgICBpZiBbIC1uICIkYmFzZWxpbmVfaG90IiBd ICYmIFsgLW4gIiRwYXRjaGVkX2hvdCIgXTsgdGhlbgoJZGVsdGE9JChlY2hvICIkcGF0Y2hl ZF9ob3QgLSAkYmFzZWxpbmVfaG90IiB8IGJjKQoJcHJpbnRmICIlLTM1cyAlOXMlJSAlOXMl JSAlKzlzJSVcbiIgIiR7dGVzdF9uYW1lc1skKChpLTEpKV19IiAiJGJhc2VsaW5lX2hvdCIg IiRwYXRjaGVkX2hvdCIgIiRkZWx0YSIKICAgIGZpCmRvbmUKCmVjaG8gIiIKZWNobyAiVGhy b3VnaHB1dCAoMTAgY2xpZW50cyk6IgplY2hvICLilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIAiCnByaW50ZiAiJS0zNXMgJTEycyAlMTJzICUxMHNcbiIgIlRlc3QiICJCYXNlbGlu ZSIgIlBhdGNoZWQiICLOlCIKZWNobyAi4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA IgoKZm9yIGkgaW4gJChzZXEgMSAkeyN0ZXN0X25hbWVzW0BdfSk7IGRvCiAgICBiYXNlbGlu ZV90cHM9JChncmVwICJ0cHMgPSAiICIkUkVTVUxUU19ESVIvYmFzZWxpbmVfdGVzdCR7aX1f YmVuY2gudHh0IiAyPi9kZXYvbnVsbCB8IGF3ayAne3ByaW50ICQzfScpCiAgICBwYXRjaGVk X3Rwcz0kKGdyZXAgInRwcyA9ICIgIiRSRVNVTFRTX0RJUi9wYXRjaGVkX3Rlc3Qke2l9X2Jl bmNoLnR4dCIgMj4vZGV2L251bGwgfCBhd2sgJ3twcmludCAkM30nKQoKICAgIGlmIFsgLW4g IiRiYXNlbGluZV90cHMiIF0gJiYgWyAtbiAiJHBhdGNoZWRfdHBzIiBdOyB0aGVuCglkZWx0 YT0kKGVjaG8gInNjYWxlPTE7IDEwMCAqICgkcGF0Y2hlZF90cHMgLSAkYmFzZWxpbmVfdHBz KSAvICRiYXNlbGluZV90cHMiIHwgYmMpCglwcmludGYgIiUtMzVzICUxMi4xZiAlMTIuMWYg JSs5cyUlXG4iICIke3Rlc3RfbmFtZXNbJCgoaS0xKSldfSIgIiRiYXNlbGluZV90cHMiICIk cGF0Y2hlZF90cHMiICIkZGVsdGEiCiAgICBmaQpkb25lCgplY2hvICIiCmVjaG8gIkluZGV4 IEJsb2F0IEFmdGVyIFVwZGF0ZXMgKE1CKToiCmVjaG8gIuKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgCIKcHJpbnRmICIlLTM1cyAlMTBzICUxMHMgJTEwc1xuIiAiVGVzdCIgIkJh c2VsaW5lIiAiUGF0Y2hlZCIgIlJlZHVjdGlvbiIKZWNobyAi4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSAIgoKZm9yIGkgaW4gJChzZXEgMSAkeyN0ZXN0X25hbWVzW0BdfSk7IGRv CiAgICBiYXNlbGluZV9pZHg9JChncmVwIC12ICJUaW1lOiIgIiRSRVNVTFRTX0RJUi9iYXNl bGluZV90ZXN0JHtpfV9zdGF0cy50eHQiIDI+L2Rldi9udWxsIHwgZ3JlcCAifCIgfCB0YWls IC0xIHwgY3V0IC1kJ3wnIC1mMikKICAgIHBhdGNoZWRfaWR4PSQoZ3JlcCAtdiAiVGltZToi ICIkUkVTVUxUU19ESVIvcGF0Y2hlZF90ZXN0JHtpfV9zdGF0cy50eHQiIDI+L2Rldi9udWxs IHwgZ3JlcCAifCIgfCB0YWlsIC0xIHwgY3V0IC1kJ3wnIC1mMikKCiAgICBpZiBbIC1uICIk YmFzZWxpbmVfaWR4IiBdICYmIFsgLW4gIiRwYXRjaGVkX2lkeCIgXSAmJiBbICIkYmFzZWxp bmVfaWR4IiAhPSAiMCIgXTsgdGhlbgoJYmFzZWxpbmVfbWI9JChlY2hvICJzY2FsZT0xOyAk YmFzZWxpbmVfaWR4IC8gMTA0ODU3NiIgfCBiYykKCXBhdGNoZWRfbWI9JChlY2hvICJzY2Fs ZT0xOyAkcGF0Y2hlZF9pZHggLyAxMDQ4NTc2IiB8IGJjKQoJcmVkdWN0aW9uPSQoZWNobyAi c2NhbGU9MTsgMTAwICogKCRiYXNlbGluZV9pZHggLSAkcGF0Y2hlZF9pZHgpIC8gJGJhc2Vs aW5lX2lkeCIgfCBiYykKCXByaW50ZiAiJS0zNXMgJTkuMWYgJTkuMWYgJTlzJSVcbiIgIiR7 dGVzdF9uYW1lc1skKChpLTEpKV19IiAiJGJhc2VsaW5lX21iIiAiJHBhdGNoZWRfbWIiICIk cmVkdWN0aW9uIgogICAgZmkKZG9uZQoKZWNobyAiIgplY2hvICLilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIAiCmVjaG8gIkZ1bGwgcmVzdWx0czogJFJFU1VMVFNfRElSIgplY2hv ICLilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAiCgpnaXQgY2hlY2tvdXQgLXEgLQo= --f70e65a2f25740fea16fe12777451009 Content-Disposition: attachment; filename*0="v29-0001-Prepare-heapam_tuple_update-and-simple_heap_upda.pat"; filename*1="ch" Content-Type: text/x-patch; name="=?UTF-8?Q?v29-0001-Prepare-heapam=5Ftuple=5Fupdate-and-simple=5Fheap=5Fu?= =?UTF-8?Q?pda.patch?=" Content-Transfer-Encoding: base64 RnJvbSA3ZWU1MGY4Yzk5MzU1YWUwMjJiYjBiODdlMmNjNTYxYTM2MjhjODk5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTog U3VuLCAyIE5vdiAyMDI1IDExOjM2OjIwIC0wNTAwClN1YmplY3Q6IFtQQVRDSCB2MjkgMS80 XSBQcmVwYXJlIGhlYXBhbV90dXBsZV91cGRhdGUoKSBhbmQKIHNpbXBsZV9oZWFwX3VwZGF0 ZSgpIGZvciBkaXZlcmdlbmNlCgpUaGlzIGNvbW1pdCBsYXlzIHRoZSBmb3VuZGF0aW9uIGZv ciBsYXJnZXIgY2hhbmdlcyB0byBjb21lIGJ5IHRha2luZyB0aGUKZmlyc3QgcG9ydGlvbiBv ZiBoZWFwX3VwZGF0ZSgpIHRocm91Z2ggdGhlIEhlYXBEZXRlcm1pbkNvbHVtbnNJbmZvKCkg YW5kCnJlcGxpY2F0aW5nIHRoYXQgbG9naWMgaW4gYm90aCBoZWFwYW1fdHVwbGVfdXBkYXRl KCkgYW5kCnNpbXBsZV9oZWFwX3VwYXRlKCkuICBUaGlzIGlzIGRvbmUgc28gdGhhdCB0aGVz ZSB0d28gcGF0aHMgbWlnaHQgZGl2ZXJnZQppbiBpbXBsZW1lbnRhdGlvbiBsYXRlciBvbi4g IFRoZSBzaW1wbGVfaGVhcF91cGRhdGUoKSBwYXRoIGRlYWxzIHNvbGVseQp3aXRoIHVwZGF0 ZXMgdG8gY2F0YWxvZyB0dXBsZXMgd2hpY2ggY291bGQgcmVjb3JkIHRoZWlyIG1vZGlmaWVk CmF0dHJpYnV0ZXMgcmF0aGVyIHRoYW4gcmVsZWFybiB0aGVtLiAgVGhlIHJlbWFpbmluZyBj YWxscyBmcm9tIHRoZQpleGVjdXRvciBpbnRvIHRoZSB0YWJsZSBBTSB1cGRhdGUgQVBJIGNv dWxkIGluY2x1ZGUgdGhlIHNldCBvZiB1cGRhdGVkCmF0dHJpYnV0ZXMuICBUaGlzIGlzIGZv cmVzaGFkb3dpbmcuLi4gb2YgY291cnNlLCBhcyB0aGF0J3Mgd2hhdCB0aGUgbmV4dApjb21t aXQgd2lsbCBzdGFydCB0byBkby4KCkFzIHBhcnQgb2YgdGhpcyByZW9yZ2FuaXphdGlvbiwg dGhlIGhhbmRsaW5nIG9mIHJlcGxpY2EgaWRlbnRpdHkga2V5CmF0dHJpYnV0ZXMgaGFzIGJl ZW4gYWRqdXN0ZWQuIEluc3RlYWQgb2YgZmV0Y2hpbmcgYSBzZWNvbmQgY29weSBvZgp0aGUg Yml0bWFwIGR1cmluZyBhbiB1cGRhdGUgb3BlcmF0aW9uLCB0aGUgY2FsbGVyIGlzIG5vdyBy ZXF1aXJlZCB0bwpwcm92aWRlIGl0LiBUaGlzIGNoYW5nZSBhcHBsaWVzIHRvIGJvdGggaGVh cF91cGRhdGUoKSBhbmQKaGVhcF9kZWxldGUoKS4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW0uYyAgICAgICAgIHwgNTY4ICsrKysrKysrKysrLS0tLS0tLS0tLS0tCiBz cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIHwgMTE3ICsrKystCiBz cmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgIHwgIDI0ICstCiAzIGZp bGVzIGNoYW5nZWQsIDQxMCBpbnNlcnRpb25zKCspLCAyOTkgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwppbmRleCAzMDA0OTY0YWI3Zi4uNzNjMWQzZDJjYjgg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCkBAIC0zOSwxOCArMzksMjQgQEAKICNp bmNsdWRlICJhY2Nlc3Mvc3luY3NjYW4uaCIKICNpbmNsdWRlICJhY2Nlc3MvdmFsaWQuaCIK ICNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5oIgorI2luY2x1ZGUgImFjY2Vzcy94 YWN0LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dpbnNlcnQuaCIKKyNpbmNsdWRlICJjYXRh bG9nL2NhdGFsb2cuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2RhdGFiYXNlLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19kYXRhYmFzZV9kLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdmFj dXVtLmgiCisjaW5jbHVkZSAibm9kZXMvYml0bWFwc2V0LmgiCiAjaW5jbHVkZSAicGdzdGF0 LmgiCiAjaW5jbHVkZSAicG9ydC9wZ19iaXR1dGlscy5oIgorI2luY2x1ZGUgInN0b3JhZ2Uv YnVmbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9pdGVtcHRyLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRl ICJzdG9yYWdlL3Byb2NhcnJheS5oIgogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCiAjaW5j bHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCiAjaW5jbHVkZSAidXRpbHMvaW52YWwu aCIKKyNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3NwY2Nh Y2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIApAQCAtNjIsMTYgKzY4LDgg QEAgc3RhdGljIFhMb2dSZWNQdHIgbG9nX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbG4sIEJ1 ZmZlciBvbGRidWYsCiAJCQkJCQkJCSAgSGVhcFR1cGxlIG5ld3R1cCwgSGVhcFR1cGxlIG9s ZF9rZXlfdHVwbGUsCiAJCQkJCQkJCSAgYm9vbCBhbGxfdmlzaWJsZV9jbGVhcmVkLCBib29s IG5ld19hbGxfdmlzaWJsZV9jbGVhcmVkKTsKICNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5H Ci1zdGF0aWMgdm9pZCBjaGVja19sb2NrX2lmX2lucGxhY2VfdXBkYXRlYWJsZV9yZWwoUmVs YXRpb24gcmVsYXRpb24sCi0JCQkJCQkJCQkJCQkgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpv dGlkLAotCQkJCQkJCQkJCQkJIEhlYXBUdXBsZSBuZXd0dXApOwogc3RhdGljIHZvaWQgY2hl Y2tfaW5wbGFjZV9yZWxfbG9jayhIZWFwVHVwbGUgb2xkdHVwKTsKICNlbmRpZgotc3RhdGlj IEJpdG1hcHNldCAqSGVhcERldGVybWluZUNvbHVtbnNJbmZvKFJlbGF0aW9uIHJlbGF0aW9u LAotCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqaW50ZXJlc3RpbmdfY29scywKLQkJCQkJCQkJ CQkgICBCaXRtYXBzZXQgKmV4dGVybmFsX2NvbHMsCi0JCQkJCQkJCQkJICAgSGVhcFR1cGxl IG9sZHR1cCwgSGVhcFR1cGxlIG5ld3R1cCwKLQkJCQkJCQkJCQkgICBib29sICpoYXNfZXh0 ZXJuYWwpOwogc3RhdGljIGJvb2wgaGVhcF9hY3F1aXJlX3R1cGxvY2soUmVsYXRpb24gcmVs YXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkLAogCQkJCQkJCQkgTG9ja1R1cGxl TW9kZSBtb2RlLCBMb2NrV2FpdFBvbGljeSB3YWl0X3BvbGljeSwKIAkJCQkJCQkJIGJvb2wg KmhhdmVfdHVwbGVfbG9jayk7CkBAIC0xMDYsMTAgKzEwNCwxMCBAQCBzdGF0aWMgYm9vbCBD b25kaXRpb25hbE11bHRpWGFjdElkV2FpdChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0 U3RhdHVzIHN0YXR1cwogc3RhdGljIHZvaWQgaW5kZXhfZGVsZXRlX3NvcnQoVE1fSW5kZXhE ZWxldGVPcCAqZGVsc3RhdGUpOwogc3RhdGljIGludAlib3R0b211cF9zb3J0X2FuZF9zaHJp bmsoVE1fSW5kZXhEZWxldGVPcCAqZGVsc3RhdGUpOwogc3RhdGljIFhMb2dSZWNQdHIgbG9n X2hlYXBfbmV3X2NpZChSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHR1cCk7Ci1zdGF0 aWMgSGVhcFR1cGxlIEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkoUmVsYXRpb24gcmVsYXRpb24s IEhlYXBUdXBsZSB0cCwgYm9vbCBrZXlfcmVxdWlyZWQsCitzdGF0aWMgSGVhcFR1cGxlIEV4 dHJhY3RSZXBsaWNhSWRlbnRpdHkoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0cCwK KwkJCQkJCQkJCQlCaXRtYXBzZXQgKnJpZF9hdHRycywgYm9vbCBrZXlfcmVxdWlyZWQsCiAJ CQkJCQkJCQkJYm9vbCAqY29weSk7CiAKLQogLyoKICAqIFRoaXMgdGFibGUgbGlzdHMgdGhl IGhlYXZ5d2VpZ2h0IGxvY2sgbW9kZSB0aGF0IGNvcnJlc3BvbmRzIHRvIGVhY2ggdHVwbGUK ICAqIGxvY2sgbW9kZSwgYXMgd2VsbCBhcyBvbmUgb3IgdHdvIGNvcnJlc3BvbmRpbmcgTXVs dGlYYWN0U3RhdHVzIHZhbHVlczoKQEAgLTI4NTIsNiArMjg1MCw3IEBAIGhlYXBfZGVsZXRl KFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKnRpZCwKIAlCdWZm ZXIJCWJ1ZmZlcjsKIAlCdWZmZXIJCXZtYnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKIAlUcmFu c2FjdGlvbklkIG5ld194bWF4OworCUJpdG1hcHNldCAgKnJpZF9hdHRyczsKIAl1aW50MTYJ CW5ld19pbmZvbWFzaywKIAkJCQluZXdfaW5mb21hc2syOwogCWJvb2wJCWhhdmVfdHVwbGVf bG9jayA9IGZhbHNlOwpAQCAtMjg2NCw2ICsyODYzLDggQEAgaGVhcF9kZWxldGUoUmVsYXRp b24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkLAogCiAJQXNzZXJ0SGFz U25hcHNob3RGb3JUb2FzdChyZWxhdGlvbik7CiAKKwlyaWRfYXR0cnMgPSBSZWxhdGlvbkdl dEluZGV4QXR0ckJpdG1hcChyZWxhdGlvbiwgSU5ERVhfQVRUUl9CSVRNQVBfSURFTlRJVFlf S0VZKTsKKwogCS8qCiAJICogRm9yYmlkIHRoaXMgZHVyaW5nIGEgcGFyYWxsZWwgb3BlcmF0 aW9uLCBsZXN0IGl0IGFsbG9jYXRlIGEgY29tYm8gQ0lELgogCSAqIE90aGVyIHdvcmtlcnMg bWlnaHQgbmVlZCB0aGF0IGNvbWJvIENJRCBmb3IgdmlzaWJpbGl0eSBjaGVja3MsIGFuZCB3 ZQpAQCAtMzA2Nyw2ICszMDY4LDcgQEAgbDE6CiAJCQlVbmxvY2tUdXBsZVR1cGxvY2socmVs YXRpb24sICYodHAudF9zZWxmKSwgTG9ja1R1cGxlRXhjbHVzaXZlKTsKIAkJaWYgKHZtYnVm ZmVyICE9IEludmFsaWRCdWZmZXIpCiAJCQlSZWxlYXNlQnVmZmVyKHZtYnVmZmVyKTsKKwkJ Ym1zX2ZyZWUocmlkX2F0dHJzKTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAKQEAgLTMwODgs NyArMzA5MCwxMCBAQCBsMToKIAkgKiBDb21wdXRlIHJlcGxpY2EgaWRlbnRpdHkgdHVwbGUg YmVmb3JlIGVudGVyaW5nIHRoZSBjcml0aWNhbCBzZWN0aW9uIHNvCiAJICogd2UgZG9uJ3Qg UEFOSUMgdXBvbiBhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuCiAJICovCi0Jb2xkX2tl eV90dXBsZSA9IEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkocmVsYXRpb24sICZ0cCwgdHJ1ZSwg Jm9sZF9rZXlfY29waWVkKTsKKwlvbGRfa2V5X3R1cGxlID0gRXh0cmFjdFJlcGxpY2FJZGVu dGl0eShyZWxhdGlvbiwgJnRwLCByaWRfYXR0cnMsCisJCQkJCQkJCQkJICAgdHJ1ZSwgJm9s ZF9rZXlfY29waWVkKTsKKwlibXNfZnJlZShyaWRfYXR0cnMpOworCXJpZF9hdHRycyA9IE5V TEw7CiAKIAkvKgogCSAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IHBvc3NpYmx5LW11bHRpeGFj dC1hYmxlIG9wZXJhdGlvbiBpbiB0aGUgY3VycmVudApAQCAtMzMwMCw3ICszMzA1LDEwIEBA IHNpbXBsZV9oZWFwX2RlbGV0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50 ZXJEYXRhICp0aWQpCiAgKgloZWFwX3VwZGF0ZSAtIHJlcGxhY2UgYSB0dXBsZQogICoKICAq IFNlZSB0YWJsZV90dXBsZV91cGRhdGUoKSBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIHBh cmFtZXRlcnMsIGV4Y2VwdCB0aGF0Ci0gKiB0aGlzIHJvdXRpbmUgZGlyZWN0bHkgdGFrZXMg YSB0dXBsZSByYXRoZXIgdGhhbiBhIHNsb3QuCisgKiB0aGlzIHJvdXRpbmUgZGlyZWN0bHkg dGFrZXMgYSBoZWFwIHR1cGxlIHJhdGhlciB0aGFuIGEgc2xvdC4KKyAqCisgKiBJdCdzIHJl cXVpcmVkIHRoYXQgdGhlIGNhbGxlciBoYXMgYWNxdWlyZWQgdGhlIHBpbiBhbmQgbG9jayBv biB0aGUgYnVmZmVyLgorICogVGhhdCBsb2NrIGFuZCBwaW4gd2lsbCBiZSBtYW5hZ2VkIGhl cmUsIG5vdCBpbiB0aGUgY2FsbGVyLgogICoKICAqIEluIHRoZSBmYWlsdXJlIGNhc2VzLCB0 aGUgcm91dGluZSBmaWxscyAqdG1mZCB3aXRoIHRoZSB0dXBsZSdzIHRfY3RpZCwKICAqIHRf eG1heCAocmVzb2x2aW5nIGEgcG9zc2libGUgTXVsdGlYYWN0LCBpZiBuZWNlc3NhcnkpLCBh bmQgdF9jbWF4ICh0aGUgbGFzdApAQCAtMzMwOCwzMCArMzMxNiwyMSBAQCBzaW1wbGVfaGVh cF9kZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlk KQogICogZ2VuZXJhdGVkIGJ5IGFub3RoZXIgdHJhbnNhY3Rpb24pLgogICovCiBUTV9SZXN1 bHQKLWhlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRh dGEgKm90aWQsIEhlYXBUdXBsZSBuZXd0dXAsCi0JCQlDb21tYW5kSWQgY2lkLCBTbmFwc2hv dCBjcm9zc2NoZWNrLCBib29sIHdhaXQsCi0JCQlUTV9GYWlsdXJlRGF0YSAqdG1mZCwgTG9j a1R1cGxlTW9kZSAqbG9ja21vZGUsCi0JCQlUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5k ZXhlcykKK2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGVEYXRhICpv bGR0dXAsCisJCQlIZWFwVHVwbGUgbmV3dHVwLCBDb21tYW5kSWQgY2lkLCBTbmFwc2hvdCBj cm9zc2NoZWNrLCBib29sIHdhaXQsCisJCQlUTV9GYWlsdXJlRGF0YSAqdG1mZCwgTG9ja1R1 cGxlTW9kZSAqbG9ja21vZGUsIEJ1ZmZlciBidWZmZXIsCisJCQlQYWdlIHBhZ2UsIEJsb2Nr TnVtYmVyIGJsb2NrLCBJdGVtSWQgbHAsIEJpdG1hcHNldCAqaG90X2F0dHJzLAorCQkJQml0 bWFwc2V0ICpzdW1fYXR0cnMsIEJpdG1hcHNldCAqcGtfYXR0cnMsIEJpdG1hcHNldCAqcmlk X2F0dHJzLAorCQkJQml0bWFwc2V0ICptaXhfYXR0cnMsIEJ1ZmZlciAqdm1idWZmZXIsCisJ CQlib29sIHJlcF9pZF9rZXlfcmVxdWlyZWQsIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9p bmRleGVzKQogewogCVRNX1Jlc3VsdAlyZXN1bHQ7CiAJVHJhbnNhY3Rpb25JZCB4aWQgPSBH ZXRDdXJyZW50VHJhbnNhY3Rpb25JZCgpOwotCUJpdG1hcHNldCAgKmhvdF9hdHRyczsKLQlC aXRtYXBzZXQgICpzdW1fYXR0cnM7Ci0JQml0bWFwc2V0ICAqa2V5X2F0dHJzOwotCUJpdG1h cHNldCAgKmlkX2F0dHJzOwotCUJpdG1hcHNldCAgKmludGVyZXN0aW5nX2F0dHJzOwotCUJp dG1hcHNldCAgKm1vZGlmaWVkX2F0dHJzOwotCUl0ZW1JZAkJbHA7Ci0JSGVhcFR1cGxlRGF0 YSBvbGR0dXA7CiAJSGVhcFR1cGxlCWhlYXB0dXA7CiAJSGVhcFR1cGxlCW9sZF9rZXlfdHVw bGUgPSBOVUxMOwogCWJvb2wJCW9sZF9rZXlfY29waWVkID0gZmFsc2U7Ci0JUGFnZQkJcGFn ZTsKLQlCbG9ja051bWJlciBibG9jazsKIAlNdWx0aVhhY3RTdGF0dXMgbXhhY3Rfc3RhdHVz OwotCUJ1ZmZlcgkJYnVmZmVyLAotCQkJCW5ld2J1ZiwKLQkJCQl2bWJ1ZmZlciA9IEludmFs aWRCdWZmZXIsCisJQnVmZmVyCQluZXdidWYsCiAJCQkJdm1idWZmZXJfbmV3ID0gSW52YWxp ZEJ1ZmZlcjsKIAlib29sCQluZWVkX3RvYXN0OwogCVNpemUJCW5ld3R1cHNpemUsCkBAIC0z MzQ1LDcgKzMzNDQsNiBAQCBoZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3Qg SXRlbVBvaW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgbmV3dHVwLAogCWJvb2wJCWFsbF92 aXNpYmxlX2NsZWFyZWRfbmV3ID0gZmFsc2U7CiAJYm9vbAkJY2hlY2tlZF9sb2NrZXJzOwog CWJvb2wJCWxvY2tlcl9yZW1haW5zOwotCWJvb2wJCWlkX2hhc19leHRlcm5hbCA9IGZhbHNl OwogCVRyYW5zYWN0aW9uSWQgeG1heF9uZXdfdHVwbGUsCiAJCQkJeG1heF9vbGRfdHVwbGU7 CiAJdWludDE2CQlpbmZvbWFza19vbGRfdHVwbGUsCkBAIC0zMzUzLDE0NCArMzM1MSwxMyBA QCBoZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRh ICpvdGlkLCBIZWFwVHVwbGUgbmV3dHVwLAogCQkJCWluZm9tYXNrX25ld190dXBsZSwKIAkJ CQlpbmZvbWFzazJfbmV3X3R1cGxlOwogCi0JQXNzZXJ0KEl0ZW1Qb2ludGVySXNWYWxpZChv dGlkKSk7Ci0KLQkvKiBDaGVhcCwgc2ltcGxpc3RpYyBjaGVjayB0aGF0IHRoZSB0dXBsZSBt YXRjaGVzIHRoZSByZWwncyByb3d0eXBlLiAqLwotCUFzc2VydChIZWFwVHVwbGVIZWFkZXJH ZXROYXR0cyhuZXd0dXAtPnRfZGF0YSkgPD0KLQkJICAgUmVsYXRpb25HZXROdW1iZXJPZkF0 dHJpYnV0ZXMocmVsYXRpb24pKTsKLQorCUFzc2VydChCdWZmZXJJc0xvY2tlZEJ5TWUoYnVm ZmVyKSk7CisJQXNzZXJ0KEl0ZW1JZElzTm9ybWFsKGxwKSk7CiAJQXNzZXJ0SGFzU25hcHNo b3RGb3JUb2FzdChyZWxhdGlvbik7CiAKLQkvKgotCSAqIEZvcmJpZCB0aGlzIGR1cmluZyBh IHBhcmFsbGVsIG9wZXJhdGlvbiwgbGVzdCBpdCBhbGxvY2F0ZSBhIGNvbWJvIENJRC4KLQkg KiBPdGhlciB3b3JrZXJzIG1pZ2h0IG5lZWQgdGhhdCBjb21ibyBDSUQgZm9yIHZpc2liaWxp dHkgY2hlY2tzLCBhbmQgd2UKLQkgKiBoYXZlIG5vIHByb3Zpc2lvbiBmb3IgYnJvYWRjYXN0 aW5nIGl0IHRvIHRoZW0uCi0JICovCi0JaWYgKElzSW5QYXJhbGxlbE1vZGUoKSkKLQkJZXJl cG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfVFJBTlNBQ1RJT05f U1RBVEUpLAotCQkJCSBlcnJtc2coImNhbm5vdCB1cGRhdGUgdHVwbGVzIGR1cmluZyBhIHBh cmFsbGVsIG9wZXJhdGlvbiIpKSk7Ci0KLSNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCi0J Y2hlY2tfbG9ja19pZl9pbnBsYWNlX3VwZGF0ZWFibGVfcmVsKHJlbGF0aW9uLCBvdGlkLCBu ZXd0dXApOwotI2VuZGlmCi0KLQkvKgotCSAqIEZldGNoIHRoZSBsaXN0IG9mIGF0dHJpYnV0 ZXMgdG8gYmUgY2hlY2tlZCBmb3IgdmFyaW91cyBvcGVyYXRpb25zLgotCSAqCi0JICogRm9y IEhPVCBjb25zaWRlcmF0aW9ucywgdGhpcyBpcyB3YXN0ZWQgZWZmb3J0IGlmIHdlIGZhaWwg dG8gdXBkYXRlIG9yCi0JICogaGF2ZSB0byBwdXQgdGhlIG5ldyB0dXBsZSBvbiBhIGRpZmZl cmVudCBwYWdlLiAgQnV0IHdlIG11c3QgY29tcHV0ZSB0aGUKLQkgKiBsaXN0IGJlZm9yZSBv YnRhaW5pbmcgYnVmZmVyIGxvY2sgLS0tIGluIHRoZSB3b3JzdCBjYXNlLCBpZiB3ZSBhcmUK LQkgKiBkb2luZyBhbiB1cGRhdGUgb24gb25lIG9mIHRoZSByZWxldmFudCBzeXN0ZW0gY2F0 YWxvZ3MsIHdlIGNvdWxkCi0JICogZGVhZGxvY2sgaWYgd2UgdHJ5IHRvIGZldGNoIHRoZSBs aXN0IGxhdGVyLiAgSW4gYW55IGNhc2UsIHRoZSByZWxjYWNoZQotCSAqIGNhY2hlcyB0aGUg ZGF0YSBzbyB0aGlzIGlzIHVzdWFsbHkgcHJldHR5IGNoZWFwLgotCSAqCi0JICogV2UgYWxz byBuZWVkIGNvbHVtbnMgdXNlZCBieSB0aGUgcmVwbGljYSBpZGVudGl0eSBhbmQgY29sdW1u cyB0aGF0IGFyZQotCSAqIGNvbnNpZGVyZWQgdGhlICJrZXkiIG9mIHJvd3MgaW4gdGhlIHRh YmxlLgotCSAqCi0JICogTm90ZSB0aGF0IHdlIGdldCBjb3BpZXMgb2YgZWFjaCBiaXRtYXAs IHNvIHdlIG5lZWQgbm90IHdvcnJ5IGFib3V0Ci0JICogcmVsY2FjaGUgZmx1c2ggaGFwcGVu aW5nIG1pZHdheSB0aHJvdWdoLgotCSAqLwotCWhvdF9hdHRycyA9IFJlbGF0aW9uR2V0SW5k ZXhBdHRyQml0bWFwKHJlbGF0aW9uLAotCQkJCQkJCQkJCSAgIElOREVYX0FUVFJfQklUTUFQ X0hPVF9CTE9DS0lORyk7Ci0Jc3VtX2F0dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRt YXAocmVsYXRpb24sCi0JCQkJCQkJCQkJICAgSU5ERVhfQVRUUl9CSVRNQVBfU1VNTUFSSVpF RCk7Ci0Ja2V5X2F0dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24s IElOREVYX0FUVFJfQklUTUFQX0tFWSk7Ci0JaWRfYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4 QXR0ckJpdG1hcChyZWxhdGlvbiwKLQkJCQkJCQkJCQkgIElOREVYX0FUVFJfQklUTUFQX0lE RU5USVRZX0tFWSk7Ci0JaW50ZXJlc3RpbmdfYXR0cnMgPSBOVUxMOwotCWludGVyZXN0aW5n X2F0dHJzID0gYm1zX2FkZF9tZW1iZXJzKGludGVyZXN0aW5nX2F0dHJzLCBob3RfYXR0cnMp OwotCWludGVyZXN0aW5nX2F0dHJzID0gYm1zX2FkZF9tZW1iZXJzKGludGVyZXN0aW5nX2F0 dHJzLCBzdW1fYXR0cnMpOwotCWludGVyZXN0aW5nX2F0dHJzID0gYm1zX2FkZF9tZW1iZXJz KGludGVyZXN0aW5nX2F0dHJzLCBrZXlfYXR0cnMpOwotCWludGVyZXN0aW5nX2F0dHJzID0g Ym1zX2FkZF9tZW1iZXJzKGludGVyZXN0aW5nX2F0dHJzLCBpZF9hdHRycyk7Ci0KLQlibG9j ayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIob3RpZCk7Ci0JSU5KRUNUSU9OX1BPSU5U KCJoZWFwX3VwZGF0ZS1iZWZvcmUtcGluIiwgTlVMTCk7Ci0JYnVmZmVyID0gUmVhZEJ1ZmZl cihyZWxhdGlvbiwgYmxvY2spOwotCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7Ci0K LQkvKgotCSAqIEJlZm9yZSBsb2NraW5nIHRoZSBidWZmZXIsIHBpbiB0aGUgdmlzaWJpbGl0 eSBtYXAgcGFnZSBpZiBpdCBhcHBlYXJzIHRvCi0JICogYmUgbmVjZXNzYXJ5LiAgU2luY2Ug d2UgaGF2ZW4ndCBnb3QgdGhlIGxvY2sgeWV0LCBzb21lb25lIGVsc2UgbWlnaHQgYmUKLQkg KiBpbiB0aGUgbWlkZGxlIG9mIGNoYW5naW5nIHRoaXMsIHNvIHdlJ2xsIG5lZWQgdG8gcmVj aGVjayBhZnRlciB3ZSBoYXZlCi0JICogdGhlIGxvY2suCi0JICovCi0JaWYgKFBhZ2VJc0Fs bFZpc2libGUocGFnZSkpCi0JCXZpc2liaWxpdHltYXBfcGluKHJlbGF0aW9uLCBibG9jaywg JnZtYnVmZmVyKTsKLQotCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJ VkUpOwotCi0JbHAgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIEl0ZW1Qb2ludGVyR2V0T2Zmc2V0 TnVtYmVyKG90aWQpKTsKLQotCS8qCi0JICogVXN1YWxseSwgYSBidWZmZXIgcGluIGFuZC9v ciBzbmFwc2hvdCBibG9ja3MgcHJ1bmluZyBvZiBvdGlkLCBlbnN1cmluZwotCSAqIHdlIHNl ZSBMUF9OT1JNQUwgaGVyZS4gIFdoZW4gdGhlIG90aWQgb3JpZ2luIGlzIGEgc3lzY2FjaGUs IHdlIG1heSBoYXZlCi0JICogbmVpdGhlciBhIHBpbiBub3IgYSBzbmFwc2hvdC4gIEhlbmNl LCB3ZSBtYXkgc2VlIG90aGVyIExQXyBzdGF0ZXMsIGVhY2gKLQkgKiBvZiB3aGljaCBpbmRp Y2F0ZXMgY29uY3VycmVudCBwcnVuaW5nLgotCSAqCi0JICogRmFpbGluZyB3aXRoIFRNX1Vw ZGF0ZWQgd291bGQgYmUgbW9zdCBhY2N1cmF0ZS4gIEhvd2V2ZXIsIHVubGlrZSBvdGhlcgot CSAqIFRNX1VwZGF0ZWQgc2NlbmFyaW9zLCB3ZSBkb24ndCBrbm93IHRoZSBzdWNjZXNzb3Ig Y3RpZCBpbiBMUF9VTlVTRUQgYW5kCi0JICogTFBfREVBRCBjYXNlcy4gIFdoaWxlIHRoZSBk aXN0aW5jdGlvbiBiZXR3ZWVuIFRNX1VwZGF0ZWQgYW5kIFRNX0RlbGV0ZWQKLQkgKiBkb2Vz IG1hdHRlciB0byBTUUwgc3RhdGVtZW50cyBVUERBVEUgYW5kIE1FUkdFLCB0aG9zZSBTUUwg c3RhdGVtZW50cwotCSAqIGhvbGQgYSBzbmFwc2hvdCB0aGF0IGVuc3VyZXMgTFBfTk9STUFM LiAgSGVuY2UsIHRoZSBjaG9pY2UgYmV0d2VlbgotCSAqIFRNX1VwZGF0ZWQgYW5kIFRNX0Rl bGV0ZWQgYWZmZWN0cyBvbmx5IHRoZSB3b3JkaW5nIG9mIGVycm9yIG1lc3NhZ2VzLgotCSAq IFNldHRsZSBvbiBUTV9EZWxldGVkLCBmb3IgdHdvIHJlYXNvbnMuICBGaXJzdCwgaXQgYXZv aWRzIGNvbXBsaWNhdGluZwotCSAqIHRoZSBzcGVjaWZpY2F0aW9uIG9mIHdoZW4gdG1mZC0+ Y3RpZCBpcyB2YWxpZC4gIFNlY29uZCwgaXQgY3JlYXRlcwotCSAqIGVycm9yIGxvZyBldmlk ZW5jZSB0aGF0IHdlIHRvb2sgdGhpcyBicmFuY2guCi0JICoKLQkgKiBTaW5jZSBpdCdzIHBv c3NpYmxlIHRvIHNlZSBMUF9VTlVTRUQgYXQgb3RpZCwgaXQncyBhbHNvIHBvc3NpYmxlIHRv IHNlZQotCSAqIExQX05PUk1BTCBmb3IgYSB0dXBsZSB0aGF0IHJlcGxhY2VkIExQX1VOVVNF RC4gIElmIGl0J3MgYSB0dXBsZSBmb3IgYW4KLQkgKiB1bnJlbGF0ZWQgcm93LCB3ZSdsbCBm YWlsIHdpdGggImR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVlIi4KLQkgKiBY WFggaWYgb3RpZCBpcyB0aGUgbGl2ZSwgbmV3ZXIgdmVyc2lvbiBvZiB0aGUgbmV3dHVwIHJv dywgd2UnbGwgZGlzY2FyZAotCSAqIGNoYW5nZXMgb3JpZ2luYXRpbmcgaW4gdmVyc2lvbnMg b2YgdGhpcyBjYXRhbG9nIHJvdyBhZnRlciB0aGUgdmVyc2lvbgotCSAqIHRoZSBjYWxsZXIg Z290IGZyb20gc3lzY2FjaGUuICBTZWUgc3lzY2FjaGUtdXBkYXRlLXBydW5lZC5zcGVjLgot CSAqLwotCWlmICghSXRlbUlkSXNOb3JtYWwobHApKQotCXsKLQkJQXNzZXJ0KFJlbGF0aW9u U3VwcG9ydHNTeXNDYWNoZShSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKSkpOwotCi0JCVVu bG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKLQkJQXNzZXJ0KCFoYXZlX3R1cGxlX2xvY2sp OwotCQlpZiAodm1idWZmZXIgIT0gSW52YWxpZEJ1ZmZlcikKLQkJCVJlbGVhc2VCdWZmZXIo dm1idWZmZXIpOwotCQl0bWZkLT5jdGlkID0gKm90aWQ7Ci0JCXRtZmQtPnhtYXggPSBJbnZh bGlkVHJhbnNhY3Rpb25JZDsKLQkJdG1mZC0+Y21heCA9IEludmFsaWRDb21tYW5kSWQ7Ci0J CSp1cGRhdGVfaW5kZXhlcyA9IFRVX05vbmU7Ci0KLQkJYm1zX2ZyZWUoaG90X2F0dHJzKTsK LQkJYm1zX2ZyZWUoc3VtX2F0dHJzKTsKLQkJYm1zX2ZyZWUoa2V5X2F0dHJzKTsKLQkJYm1z X2ZyZWUoaWRfYXR0cnMpOwotCQkvKiBtb2RpZmllZF9hdHRycyBub3QgeWV0IGluaXRpYWxp emVkICovCi0JCWJtc19mcmVlKGludGVyZXN0aW5nX2F0dHJzKTsKLQkJcmV0dXJuIFRNX0Rl bGV0ZWQ7Ci0JfQotCi0JLyoKLQkgKiBGaWxsIGluIGVub3VnaCBkYXRhIGluIG9sZHR1cCBm b3IgSGVhcERldGVybWluZUNvbHVtbnNJbmZvIHRvIHdvcmsKLQkgKiBwcm9wZXJseS4KLQkg Ki8KLQlvbGR0dXAudF90YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOwot CW9sZHR1cC50X2RhdGEgPSAoSGVhcFR1cGxlSGVhZGVyKSBQYWdlR2V0SXRlbShwYWdlLCBs cCk7Ci0Jb2xkdHVwLnRfbGVuID0gSXRlbUlkR2V0TGVuZ3RoKGxwKTsKLQlvbGR0dXAudF9z ZWxmID0gKm90aWQ7Ci0KLQkvKiB0aGUgbmV3IHR1cGxlIGlzIHJlYWR5LCBleGNlcHQgZm9y IHRoaXM6ICovCisJLyogVGhlIG5ldyB0dXBsZSBpcyByZWFkeSwgZXhjZXB0IGZvciB0aGlz ICovCiAJbmV3dHVwLT50X3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7 CiAKLQkvKgotCSAqIERldGVybWluZSBjb2x1bW5zIG1vZGlmaWVkIGJ5IHRoZSB1cGRhdGUu ICBBZGRpdGlvbmFsbHksIGlkZW50aWZ5Ci0JICogd2hldGhlciBhbnkgb2YgdGhlIHVubW9k aWZpZWQgcmVwbGljYSBpZGVudGl0eSBrZXkgYXR0cmlidXRlcyBpbiB0aGUKLQkgKiBvbGQg dHVwbGUgaXMgZXh0ZXJuYWxseSBzdG9yZWQgb3Igbm90LiAgVGhpcyBpcyByZXF1aXJlZCBi ZWNhdXNlIGZvcgotCSAqIHN1Y2ggYXR0cmlidXRlcyB0aGUgZmxhdHRlbmVkIHZhbHVlIHdv bid0IGJlIFdBTCBsb2dnZWQgYXMgcGFydCBvZiB0aGUKLQkgKiBuZXcgdHVwbGUgc28gd2Ug bXVzdCBpbmNsdWRlIGl0IGFzIHBhcnQgb2YgdGhlIG9sZF9rZXlfdHVwbGUuICBTZWUKLQkg KiBFeHRyYWN0UmVwbGljYUlkZW50aXR5LgotCSAqLwotCW1vZGlmaWVkX2F0dHJzID0gSGVh cERldGVybWluZUNvbHVtbnNJbmZvKHJlbGF0aW9uLCBpbnRlcmVzdGluZ19hdHRycywKLQkJ CQkJCQkJCQkJICBpZF9hdHRycywgJm9sZHR1cCwKLQkJCQkJCQkJCQkJICBuZXd0dXAsICZp ZF9oYXNfZXh0ZXJuYWwpOwotCiAJLyoKIAkgKiBJZiB3ZSdyZSBub3QgdXBkYXRpbmcgYW55 ICJrZXkiIGNvbHVtbiwgd2UgY2FuIGdyYWIgYSB3ZWFrZXIgbG9jayB0eXBlLgogCSAqIFRo aXMgYWxsb3dzIGZvciBtb3JlIGNvbmN1cnJlbmN5IHdoZW4gd2UgYXJlIHJ1bm5pbmcgc2lt dWx0YW5lb3VzbHkKQEAgLTM1MDIsNyArMzM2OSw3IEBAIGhlYXBfdXBkYXRlKFJlbGF0aW9u IHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBsZSBuZXd0 dXAsCiAJICogaXMgdXBkYXRlcyB0aGF0IGRvbid0IG1hbmlwdWxhdGUga2V5IGNvbHVtbnMs IG5vdCB0aG9zZSB0aGF0CiAJICogc2VyZW5kaXBpdG91c2x5IGFycml2ZSBhdCB0aGUgc2Ft ZSBrZXkgdmFsdWVzLgogCSAqLwotCWlmICghYm1zX292ZXJsYXAobW9kaWZpZWRfYXR0cnMs IGtleV9hdHRycykpCisJaWYgKCFibXNfb3ZlcmxhcChtaXhfYXR0cnMsIHBrX2F0dHJzKSkK IAl7CiAJCSpsb2NrbW9kZSA9IExvY2tUdXBsZU5vS2V5RXhjbHVzaXZlOwogCQlteGFjdF9z dGF0dXMgPSBNdWx0aVhhY3RTdGF0dXNOb0tleVVwZGF0ZTsKQEAgLTM1MjYsMTcgKzMzOTMs MTAgQEAgaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVy RGF0YSAqb3RpZCwgSGVhcFR1cGxlIG5ld3R1cCwKIAkJa2V5X2ludGFjdCA9IGZhbHNlOwog CX0KIAotCS8qCi0JICogTm90ZTogYmV5b25kIHRoaXMgcG9pbnQsIHVzZSBvbGR0dXAgbm90 IG90aWQgdG8gcmVmZXIgdG8gb2xkIHR1cGxlLgotCSAqIG90aWQgbWF5IHZlcnkgd2VsbCBw b2ludCBhdCBuZXd0dXAtPnRfc2VsZiwgd2hpY2ggd2Ugd2lsbCBvdmVyd3JpdGUKLQkgKiB3 aXRoIHRoZSBuZXcgdHVwbGUncyBsb2NhdGlvbiwgc28gdGhlcmUncyBncmVhdCByaXNrIG9m IGNvbmZ1c2lvbiBpZiB3ZQotCSAqIHVzZSBvdGlkIGFueW1vcmUuCi0JICovCi0KIGwyOgog CWNoZWNrZWRfbG9ja2VycyA9IGZhbHNlOwogCWxvY2tlcl9yZW1haW5zID0gZmFsc2U7Ci0J cmVzdWx0ID0gSGVhcFR1cGxlU2F0aXNmaWVzVXBkYXRlKCZvbGR0dXAsIGNpZCwgYnVmZmVy KTsKKwlyZXN1bHQgPSBIZWFwVHVwbGVTYXRpc2ZpZXNVcGRhdGUob2xkdHVwLCBjaWQsIGJ1 ZmZlcik7CiAKIAkvKiBzZWUgYmVsb3cgYWJvdXQgdGhlICJubyB3YWl0IiBjYXNlICovCiAJ QXNzZXJ0KHJlc3VsdCAhPSBUTV9CZWluZ01vZGlmaWVkIHx8IHdhaXQpOwpAQCAtMzU2OCw4 ICszNDI4LDggQEAgbDI6CiAJCSAqLwogCiAJCS8qIG11c3QgY29weSBzdGF0ZSBkYXRhIGJl Zm9yZSB1bmxvY2tpbmcgYnVmZmVyICovCi0JCXh3YWl0ID0gSGVhcFR1cGxlSGVhZGVyR2V0 UmF3WG1heChvbGR0dXAudF9kYXRhKTsKLQkJaW5mb21hc2sgPSBvbGR0dXAudF9kYXRhLT50 X2luZm9tYXNrOworCQl4d2FpdCA9IEhlYXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVw LT50X2RhdGEpOworCQlpbmZvbWFzayA9IG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrOwog CiAJCS8qCiAJCSAqIE5vdyB3ZSBoYXZlIHRvIGRvIHNvbWV0aGluZyBhYm91dCB0aGUgZXhp c3RpbmcgbG9ja2VyLiAgSWYgaXQncyBhCkBAIC0zNjA5LDEzICszNDY5LDEyIEBAIGwyOgog CQkJCSAqIHJlcXVlc3RpbmcgYSBsb2NrIGFuZCBhbHJlYWR5IGhhdmUgb25lOyBhdm9pZHMg ZGVhZGxvY2spLgogCQkJCSAqLwogCQkJCWlmICghY3VycmVudF9pc19tZW1iZXIpCi0JCQkJ CWhlYXBfYWNxdWlyZV90dXBsb2NrKHJlbGF0aW9uLCAmKG9sZHR1cC50X3NlbGYpLCAqbG9j a21vZGUsCisJCQkJCWhlYXBfYWNxdWlyZV90dXBsb2NrKHJlbGF0aW9uLCAmb2xkdHVwLT50 X3NlbGYsICpsb2NrbW9kZSwKIAkJCQkJCQkJCQkgTG9ja1dhaXRCbG9jaywgJmhhdmVfdHVw bGVfbG9jayk7CiAKIAkJCQkvKiB3YWl0IGZvciBtdWx0aXhhY3QgKi8KIAkJCQlNdWx0aVhh Y3RJZFdhaXQoKE11bHRpWGFjdElkKSB4d2FpdCwgbXhhY3Rfc3RhdHVzLCBpbmZvbWFzaywK LQkJCQkJCQkJcmVsYXRpb24sICZvbGR0dXAudF9zZWxmLCBYTFRXX1VwZGF0ZSwKLQkJCQkJ CQkJJnJlbWFpbik7CisJCQkJCQkJCXJlbGF0aW9uLCAmb2xkdHVwLT50X3NlbGYsIFhMVFdf VXBkYXRlLCAmcmVtYWluKTsKIAkJCQljaGVja2VkX2xvY2tlcnMgPSB0cnVlOwogCQkJCWxv Y2tlcl9yZW1haW5zID0gcmVtYWluICE9IDA7CiAJCQkJTG9ja0J1ZmZlcihidWZmZXIsIEJV RkZFUl9MT0NLX0VYQ0xVU0lWRSk7CkBAIC0zNjI1LDkgKzM0ODQsOSBAQCBsMjoKIAkJCQkg KiBjb3VsZCB1cGRhdGUgdGhpcyB0dXBsZSBiZWZvcmUgd2UgZ2V0IHRvIHRoaXMgcG9pbnQu ICBDaGVjawogCQkJCSAqIGZvciB4bWF4IGNoYW5nZSwgYW5kIHN0YXJ0IG92ZXIgaWYgc28u CiAJCQkJICovCi0JCQkJaWYgKHhtYXhfaW5mb21hc2tfY2hhbmdlZChvbGR0dXAudF9kYXRh LT50X2luZm9tYXNrLAorCQkJCWlmICh4bWF4X2luZm9tYXNrX2NoYW5nZWQob2xkdHVwLT50 X2RhdGEtPnRfaW5mb21hc2ssCiAJCQkJCQkJCQkJICBpbmZvbWFzaykgfHwKLQkJCQkJIVRy YW5zYWN0aW9uSWRFcXVhbHMoSGVhcFR1cGxlSGVhZGVyR2V0UmF3WG1heChvbGR0dXAudF9k YXRhKSwKKwkJCQkJIVRyYW5zYWN0aW9uSWRFcXVhbHMoSGVhcFR1cGxlSGVhZGVyR2V0UmF3 WG1heChvbGR0dXAtPnRfZGF0YSksCiAJCQkJCQkJCQkJIHh3YWl0KSkKIAkJCQkJZ290byBs MjsKIAkJCX0KQEAgLTM2NTIsOCArMzUxMSw4IEBAIGwyOgogCQkJICogYmVmb3JlIHRoaXMg b25lLCB3aGljaCBhcmUgaW1wb3J0YW50IHRvIGtlZXAgaW4gY2FzZSB0aGlzCiAJCQkgKiBz dWJ4YWN0IGFib3J0cy4KIAkJCSAqLwotCQkJaWYgKCFIRUFQX1hNQVhfSVNfTE9DS0VEX09O TFkob2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzaykpCi0JCQkJdXBkYXRlX3hhY3QgPSBIZWFw VHVwbGVHZXRVcGRhdGVYaWQob2xkdHVwLnRfZGF0YSk7CisJCQlpZiAoIUhFQVBfWE1BWF9J U19MT0NLRURfT05MWShvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzaykpCisJCQkJdXBkYXRl X3hhY3QgPSBIZWFwVHVwbGVHZXRVcGRhdGVYaWQob2xkdHVwLT50X2RhdGEpOwogCQkJZWxz ZQogCQkJCXVwZGF0ZV94YWN0ID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAKQEAgLTM2OTQs OSArMzU1Myw5IEBAIGwyOgogCQkJICogbG9jay4KIAkJCSAqLwogCQkJTG9ja0J1ZmZlcihi dWZmZXIsIEJVRkZFUl9MT0NLX1VOTE9DSyk7Ci0JCQloZWFwX2FjcXVpcmVfdHVwbG9jayhy ZWxhdGlvbiwgJihvbGR0dXAudF9zZWxmKSwgKmxvY2ttb2RlLAorCQkJaGVhcF9hY3F1aXJl X3R1cGxvY2socmVsYXRpb24sICZvbGR0dXAtPnRfc2VsZiwgKmxvY2ttb2RlLAogCQkJCQkJ CQkgTG9ja1dhaXRCbG9jaywgJmhhdmVfdHVwbGVfbG9jayk7Ci0JCQlYYWN0TG9ja1RhYmxl V2FpdCh4d2FpdCwgcmVsYXRpb24sICZvbGR0dXAudF9zZWxmLAorCQkJWGFjdExvY2tUYWJs ZVdhaXQoeHdhaXQsIHJlbGF0aW9uLCAmb2xkdHVwLT50X3NlbGYsCiAJCQkJCQkJICBYTFRX X1VwZGF0ZSk7CiAJCQljaGVja2VkX2xvY2tlcnMgPSB0cnVlOwogCQkJTG9ja0J1ZmZlcihi dWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CkBAIC0zNzA2LDIwICszNTY1LDIwIEBA IGwyOgogCQkJICogb3RoZXIgeGFjdCBjb3VsZCB1cGRhdGUgdGhpcyB0dXBsZSBiZWZvcmUg d2UgZ2V0IHRvIHRoaXMgcG9pbnQuCiAJCQkgKiBDaGVjayBmb3IgeG1heCBjaGFuZ2UsIGFu ZCBzdGFydCBvdmVyIGlmIHNvLgogCQkJICovCi0JCQlpZiAoeG1heF9pbmZvbWFza19jaGFu Z2VkKG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2ssIGluZm9tYXNrKSB8fAorCQkJaWYgKHht YXhfaW5mb21hc2tfY2hhbmdlZChvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzaywgaW5mb21h c2spIHx8CiAJCQkJIVRyYW5zYWN0aW9uSWRFcXVhbHMoeHdhaXQsCi0JCQkJCQkJCQkgSGVh cFR1cGxlSGVhZGVyR2V0UmF3WG1heChvbGR0dXAudF9kYXRhKSkpCisJCQkJCQkJCQkgSGVh cFR1cGxlSGVhZGVyR2V0UmF3WG1heChvbGR0dXAtPnRfZGF0YSkpKQogCQkJCWdvdG8gbDI7 CiAKIAkJCS8qIE90aGVyd2lzZSBjaGVjayBpZiBpdCBjb21taXR0ZWQgb3IgYWJvcnRlZCAq LwotCQkJVXBkYXRlWG1heEhpbnRCaXRzKG9sZHR1cC50X2RhdGEsIGJ1ZmZlciwgeHdhaXQp OwotCQkJaWYgKG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2sgJiBIRUFQX1hNQVhfSU5WQUxJ RCkKKwkJCVVwZGF0ZVhtYXhIaW50Qml0cyhvbGR0dXAtPnRfZGF0YSwgYnVmZmVyLCB4d2Fp dCk7CisJCQlpZiAob2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2sgJiBIRUFQX1hNQVhfSU5W QUxJRCkKIAkJCQljYW5fY29udGludWUgPSB0cnVlOwogCQl9CiAKIAkJaWYgKGNhbl9jb250 aW51ZSkKIAkJCXJlc3VsdCA9IFRNX09rOwotCQllbHNlIGlmICghSXRlbVBvaW50ZXJFcXVh bHMoJm9sZHR1cC50X3NlbGYsICZvbGR0dXAudF9kYXRhLT50X2N0aWQpKQorCQllbHNlIGlm ICghSXRlbVBvaW50ZXJFcXVhbHMoJm9sZHR1cC0+dF9zZWxmLCAmb2xkdHVwLT50X2RhdGEt PnRfY3RpZCkpCiAJCQlyZXN1bHQgPSBUTV9VcGRhdGVkOwogCQllbHNlCiAJCQlyZXN1bHQg PSBUTV9EZWxldGVkOwpAQCAtMzczMiwzOSArMzU5MSwzMyBAQCBsMjoKIAkJCSAgIHJlc3Vs dCA9PSBUTV9VcGRhdGVkIHx8CiAJCQkgICByZXN1bHQgPT0gVE1fRGVsZXRlZCB8fAogCQkJ ICAgcmVzdWx0ID09IFRNX0JlaW5nTW9kaWZpZWQpOwotCQlBc3NlcnQoIShvbGR0dXAudF9k YXRhLT50X2luZm9tYXNrICYgSEVBUF9YTUFYX0lOVkFMSUQpKTsKKwkJQXNzZXJ0KCEob2xk dHVwLT50X2RhdGEtPnRfaW5mb21hc2sgJiBIRUFQX1hNQVhfSU5WQUxJRCkpOwogCQlBc3Nl cnQocmVzdWx0ICE9IFRNX1VwZGF0ZWQgfHwKLQkJCSAgICFJdGVtUG9pbnRlckVxdWFscygm b2xkdHVwLnRfc2VsZiwgJm9sZHR1cC50X2RhdGEtPnRfY3RpZCkpOworCQkJICAgIUl0ZW1Q b2ludGVyRXF1YWxzKCZvbGR0dXAtPnRfc2VsZiwgJm9sZHR1cC0+dF9kYXRhLT50X2N0aWQp KTsKIAl9CiAKIAlpZiAoY3Jvc3NjaGVjayAhPSBJbnZhbGlkU25hcHNob3QgJiYgcmVzdWx0 ID09IFRNX09rKQogCXsKIAkJLyogUGVyZm9ybSBhZGRpdGlvbmFsIGNoZWNrIGZvciB0cmFu c2FjdGlvbi1zbmFwc2hvdCBtb2RlIFJJIHVwZGF0ZXMgKi8KLQkJaWYgKCFIZWFwVHVwbGVT YXRpc2ZpZXNWaXNpYmlsaXR5KCZvbGR0dXAsIGNyb3NzY2hlY2ssIGJ1ZmZlcikpCisJCWlm ICghSGVhcFR1cGxlU2F0aXNmaWVzVmlzaWJpbGl0eShvbGR0dXAsIGNyb3NzY2hlY2ssIGJ1 ZmZlcikpCiAJCQlyZXN1bHQgPSBUTV9VcGRhdGVkOwogCX0KIAogCWlmIChyZXN1bHQgIT0g VE1fT2spCiAJewotCQl0bWZkLT5jdGlkID0gb2xkdHVwLnRfZGF0YS0+dF9jdGlkOwotCQl0 bWZkLT54bWF4ID0gSGVhcFR1cGxlSGVhZGVyR2V0VXBkYXRlWGlkKG9sZHR1cC50X2RhdGEp OworCQl0bWZkLT5jdGlkID0gb2xkdHVwLT50X2RhdGEtPnRfY3RpZDsKKwkJdG1mZC0+eG1h eCA9IEhlYXBUdXBsZUhlYWRlckdldFVwZGF0ZVhpZChvbGR0dXAtPnRfZGF0YSk7CiAJCWlm IChyZXN1bHQgPT0gVE1fU2VsZk1vZGlmaWVkKQotCQkJdG1mZC0+Y21heCA9IEhlYXBUdXBs ZUhlYWRlckdldENtYXgob2xkdHVwLnRfZGF0YSk7CisJCQl0bWZkLT5jbWF4ID0gSGVhcFR1 cGxlSGVhZGVyR2V0Q21heChvbGR0dXAtPnRfZGF0YSk7CiAJCWVsc2UKIAkJCXRtZmQtPmNt YXggPSBJbnZhbGlkQ29tbWFuZElkOwogCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7 CiAJCWlmIChoYXZlX3R1cGxlX2xvY2spCi0JCQlVbmxvY2tUdXBsZVR1cGxvY2socmVsYXRp b24sICYob2xkdHVwLnRfc2VsZiksICpsb2NrbW9kZSk7Ci0JCWlmICh2bWJ1ZmZlciAhPSBJ bnZhbGlkQnVmZmVyKQotCQkJUmVsZWFzZUJ1ZmZlcih2bWJ1ZmZlcik7CisJCQlVbmxvY2tU dXBsZVR1cGxvY2socmVsYXRpb24sICZvbGR0dXAtPnRfc2VsZiwgKmxvY2ttb2RlKTsKKwkJ aWYgKCp2bWJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVyKQorCQkJUmVsZWFzZUJ1ZmZlcigqdm1i dWZmZXIpOwogCQkqdXBkYXRlX2luZGV4ZXMgPSBUVV9Ob25lOwogCi0JCWJtc19mcmVlKGhv dF9hdHRycyk7Ci0JCWJtc19mcmVlKHN1bV9hdHRycyk7Ci0JCWJtc19mcmVlKGtleV9hdHRy cyk7Ci0JCWJtc19mcmVlKGlkX2F0dHJzKTsKLQkJYm1zX2ZyZWUobW9kaWZpZWRfYXR0cnMp OwotCQlibXNfZnJlZShpbnRlcmVzdGluZ19hdHRycyk7CiAJCXJldHVybiByZXN1bHQ7CiAJ fQogCkBAIC0zNzc3LDEwICszNjMwLDEwIEBAIGwyOgogCSAqIHR1cGxlIGhhcyBiZWVuIGxv Y2tlZCBvciB1cGRhdGVkIHVuZGVyIHVzLCBidXQgaG9wZWZ1bGx5IGl0IHdvbid0CiAJICog aGFwcGVuIHZlcnkgb2Z0ZW4uCiAJICovCi0JaWYgKHZtYnVmZmVyID09IEludmFsaWRCdWZm ZXIgJiYgUGFnZUlzQWxsVmlzaWJsZShwYWdlKSkKKwlpZiAoKnZtYnVmZmVyID09IEludmFs aWRCdWZmZXIgJiYgUGFnZUlzQWxsVmlzaWJsZShwYWdlKSkKIAl7CiAJCUxvY2tCdWZmZXIo YnVmZmVyLCBCVUZGRVJfTE9DS19VTkxPQ0spOwotCQl2aXNpYmlsaXR5bWFwX3BpbihyZWxh dGlvbiwgYmxvY2ssICZ2bWJ1ZmZlcik7CisJCXZpc2liaWxpdHltYXBfcGluKHJlbGF0aW9u LCBibG9jaywgdm1idWZmZXIpOwogCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tf RVhDTFVTSVZFKTsKIAkJZ290byBsMjsKIAl9CkBAIC0zNzkxLDkgKzM2NDQsOSBAQCBsMjoK IAkgKiBJZiB0aGUgdHVwbGUgd2UncmUgdXBkYXRpbmcgaXMgbG9ja2VkLCB3ZSBuZWVkIHRv IHByZXNlcnZlIHRoZSBsb2NraW5nCiAJICogaW5mbyBpbiB0aGUgb2xkIHR1cGxlJ3MgWG1h eC4gIFByZXBhcmUgYSBuZXcgWG1heCB2YWx1ZSBmb3IgdGhpcy4KIAkgKi8KLQljb21wdXRl X25ld194bWF4X2luZm9tYXNrKEhlYXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLnRf ZGF0YSksCi0JCQkJCQkJICBvbGR0dXAudF9kYXRhLT50X2luZm9tYXNrLAotCQkJCQkJCSAg b2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzazIsCisJY29tcHV0ZV9uZXdfeG1heF9pbmZvbWFz ayhIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWF4KG9sZHR1cC0+dF9kYXRhKSwKKwkJCQkJCQkg IG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrLAorCQkJCQkJCSAgb2xkdHVwLT50X2RhdGEt PnRfaW5mb21hc2syLAogCQkJCQkJCSAgeGlkLCAqbG9ja21vZGUsIHRydWUsCiAJCQkJCQkJ ICAmeG1heF9vbGRfdHVwbGUsICZpbmZvbWFza19vbGRfdHVwbGUsCiAJCQkJCQkJICAmaW5m b21hc2syX29sZF90dXBsZSk7CkBAIC0zODA1LDEyICszNjU4LDEyIEBAIGwyOgogCSAqIHR1 cGxlLiAgKEluIHJhcmUgY2FzZXMgdGhhdCBtaWdodCBhbHNvIGJlIEludmFsaWRUcmFuc2Fj dGlvbklkIGFuZCB5ZXQKIAkgKiBub3QgaGF2ZSB0aGUgSEVBUF9YTUFYX0lOVkFMSUQgYml0 IHNldDsgdGhhdCdzIGZpbmUuKQogCSAqLwotCWlmICgob2xkdHVwLnRfZGF0YS0+dF9pbmZv bWFzayAmIEhFQVBfWE1BWF9JTlZBTElEKSB8fAotCQlIRUFQX0xPQ0tFRF9VUEdSQURFRChv bGR0dXAudF9kYXRhLT50X2luZm9tYXNrKSB8fAorCWlmICgob2xkdHVwLT50X2RhdGEtPnRf aW5mb21hc2sgJiBIRUFQX1hNQVhfSU5WQUxJRCkgfHwKKwkJSEVBUF9MT0NLRURfVVBHUkFE RUQob2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2spIHx8CiAJCShjaGVja2VkX2xvY2tlcnMg JiYgIWxvY2tlcl9yZW1haW5zKSkKIAkJeG1heF9uZXdfdHVwbGUgPSBJbnZhbGlkVHJhbnNh Y3Rpb25JZDsKIAllbHNlCi0JCXhtYXhfbmV3X3R1cGxlID0gSGVhcFR1cGxlSGVhZGVyR2V0 UmF3WG1heChvbGR0dXAudF9kYXRhKTsKKwkJeG1heF9uZXdfdHVwbGUgPSBIZWFwVHVwbGVI ZWFkZXJHZXRSYXdYbWF4KG9sZHR1cC0+dF9kYXRhKTsKIAogCWlmICghVHJhbnNhY3Rpb25J ZElzVmFsaWQoeG1heF9uZXdfdHVwbGUpKQogCXsKQEAgLTM4MjUsNyArMzY3OCw3IEBAIGwy OgogCQkgKiBOb3RlIHRoYXQgc2luY2Ugd2UncmUgZG9pbmcgYW4gdXBkYXRlLCB0aGUgb25s eSBwb3NzaWJpbGl0eSBpcyB0aGF0CiAJCSAqIHRoZSBsb2NrZXJzIGhhZCBGT1IgS0VZIFNI QVJFIGxvY2suCiAJCSAqLwotCQlpZiAob2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzayAmIEhF QVBfWE1BWF9JU19NVUxUSSkKKwkJaWYgKG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrICYg SEVBUF9YTUFYX0lTX01VTFRJKQogCQl7CiAJCQlHZXRNdWx0aVhhY3RJZEhpbnRCaXRzKHht YXhfbmV3X3R1cGxlLCAmaW5mb21hc2tfbmV3X3R1cGxlLAogCQkJCQkJCQkgICAmaW5mb21h c2syX25ld190dXBsZSk7CkBAIC0zODUzLDcgKzM3MDYsNyBAQCBsMjoKIAkgKiBSZXBsYWNl IGNpZCB3aXRoIGEgY29tYm8gQ0lEIGlmIG5lY2Vzc2FyeS4gIE5vdGUgdGhhdCB3ZSBhbHJl YWR5IHB1dAogCSAqIHRoZSBwbGFpbiBjaWQgaW50byB0aGUgbmV3IHR1cGxlLgogCSAqLwot CUhlYXBUdXBsZUhlYWRlckFkanVzdENtYXgob2xkdHVwLnRfZGF0YSwgJmNpZCwgJmlzY29t Ym8pOworCUhlYXBUdXBsZUhlYWRlckFkanVzdENtYXgob2xkdHVwLT50X2RhdGEsICZjaWQs ICZpc2NvbWJvKTsKIAogCS8qCiAJICogSWYgdGhlIHRvYXN0ZXIgbmVlZHMgdG8gYmUgYWN0 aXZhdGVkLCBPUiBpZiB0aGUgbmV3IHR1cGxlIHdpbGwgbm90IGZpdApAQCAtMzg3MCwxMiAr MzcyMywxMiBAQCBsMjoKIAkJcmVsYXRpb24tPnJkX3JlbC0+cmVsa2luZCAhPSBSRUxLSU5E X01BVFZJRVcpCiAJewogCQkvKiB0b2FzdCB0YWJsZSBlbnRyaWVzIHNob3VsZCBuZXZlciBi ZSByZWN1cnNpdmVseSB0b2FzdGVkICovCi0JCUFzc2VydCghSGVhcFR1cGxlSGFzRXh0ZXJu YWwoJm9sZHR1cCkpOworCQlBc3NlcnQoIUhlYXBUdXBsZUhhc0V4dGVybmFsKG9sZHR1cCkp OwogCQlBc3NlcnQoIUhlYXBUdXBsZUhhc0V4dGVybmFsKG5ld3R1cCkpOwogCQluZWVkX3Rv YXN0ID0gZmFsc2U7CiAJfQogCWVsc2UKLQkJbmVlZF90b2FzdCA9IChIZWFwVHVwbGVIYXNF eHRlcm5hbCgmb2xkdHVwKSB8fAorCQluZWVkX3RvYXN0ID0gKEhlYXBUdXBsZUhhc0V4dGVy bmFsKG9sZHR1cCkgfHwKIAkJCQkJICBIZWFwVHVwbGVIYXNFeHRlcm5hbChuZXd0dXApIHx8 CiAJCQkJCSAgbmV3dHVwLT50X2xlbiA+IFRPQVNUX1RVUExFX1RIUkVTSE9MRCk7CiAKQEAg LTM5MDgsOSArMzc2MSw5IEBAIGwyOgogCQkgKiB1cGRhdGluZywgYmVjYXVzZSB0aGUgcG90 ZW50aWFsbHkgY3JlYXRlZCBtdWx0aXhhY3Qgd291bGQgb3RoZXJ3aXNlCiAJCSAqIGJlIHdy b25nLgogCQkgKi8KLQkJY29tcHV0ZV9uZXdfeG1heF9pbmZvbWFzayhIZWFwVHVwbGVIZWFk ZXJHZXRSYXdYbWF4KG9sZHR1cC50X2RhdGEpLAotCQkJCQkJCQkgIG9sZHR1cC50X2RhdGEt PnRfaW5mb21hc2ssCi0JCQkJCQkJCSAgb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzazIsCisJ CWNvbXB1dGVfbmV3X3htYXhfaW5mb21hc2soSGVhcFR1cGxlSGVhZGVyR2V0UmF3WG1heChv bGR0dXAtPnRfZGF0YSksCisJCQkJCQkJCSAgb2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2ss CisJCQkJCQkJCSAgb2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2syLAogCQkJCQkJCQkgIHhp ZCwgKmxvY2ttb2RlLCBmYWxzZSwKIAkJCQkJCQkJICAmeG1heF9sb2NrX29sZF90dXBsZSwg JmluZm9tYXNrX2xvY2tfb2xkX3R1cGxlLAogCQkJCQkJCQkgICZpbmZvbWFzazJfbG9ja19v bGRfdHVwbGUpOwpAQCAtMzkyMCwxOCArMzc3MywxOCBAQCBsMjoKIAkJU1RBUlRfQ1JJVF9T RUNUSU9OKCk7CiAKIAkJLyogQ2xlYXIgb2Jzb2xldGUgdmlzaWJpbGl0eSBmbGFncyAuLi4g Ki8KLQkJb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzayAmPSB+KEhFQVBfWE1BWF9CSVRTIHwg SEVBUF9NT1ZFRCk7Ci0JCW9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2syICY9IH5IRUFQX0tF WVNfVVBEQVRFRDsKLQkJSGVhcFR1cGxlQ2xlYXJIb3RVcGRhdGVkKCZvbGR0dXApOworCQlv bGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzayAmPSB+KEhFQVBfWE1BWF9CSVRTIHwgSEVBUF9N T1ZFRCk7CisJCW9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrMiAmPSB+SEVBUF9LRVlTX1VQ REFURUQ7CisJCUhlYXBUdXBsZUNsZWFySG90VXBkYXRlZChvbGR0dXApOwogCQkvKiAuLi4g YW5kIHN0b3JlIGluZm8gYWJvdXQgdHJhbnNhY3Rpb24gdXBkYXRpbmcgdGhpcyB0dXBsZSAq LwogCQlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoeG1heF9sb2NrX29sZF90dXBsZSkp OwotCQlIZWFwVHVwbGVIZWFkZXJTZXRYbWF4KG9sZHR1cC50X2RhdGEsIHhtYXhfbG9ja19v bGRfdHVwbGUpOwotCQlvbGR0dXAudF9kYXRhLT50X2luZm9tYXNrIHw9IGluZm9tYXNrX2xv Y2tfb2xkX3R1cGxlOwotCQlvbGR0dXAudF9kYXRhLT50X2luZm9tYXNrMiB8PSBpbmZvbWFz azJfbG9ja19vbGRfdHVwbGU7Ci0JCUhlYXBUdXBsZUhlYWRlclNldENtYXgob2xkdHVwLnRf ZGF0YSwgY2lkLCBpc2NvbWJvKTsKKwkJSGVhcFR1cGxlSGVhZGVyU2V0WG1heChvbGR0dXAt PnRfZGF0YSwgeG1heF9sb2NrX29sZF90dXBsZSk7CisJCW9sZHR1cC0+dF9kYXRhLT50X2lu Zm9tYXNrIHw9IGluZm9tYXNrX2xvY2tfb2xkX3R1cGxlOworCQlvbGR0dXAtPnRfZGF0YS0+ dF9pbmZvbWFzazIgfD0gaW5mb21hc2syX2xvY2tfb2xkX3R1cGxlOworCQlIZWFwVHVwbGVI ZWFkZXJTZXRDbWF4KG9sZHR1cC0+dF9kYXRhLCBjaWQsIGlzY29tYm8pOwogCiAJCS8qIHRl bXBvcmFyaWx5IG1ha2UgaXQgbG9vayBub3QtdXBkYXRlZCwgYnV0IGxvY2tlZCAqLwotCQlv bGR0dXAudF9kYXRhLT50X2N0aWQgPSBvbGR0dXAudF9zZWxmOworCQlvbGR0dXAtPnRfZGF0 YS0+dF9jdGlkID0gb2xkdHVwLT50X3NlbGY7CiAKIAkJLyoKIAkJICogQ2xlYXIgYWxsLWZy b3plbiBiaXQgb24gdmlzaWJpbGl0eSBtYXAgaWYgbmVlZGVkLiBXZSBjb3VsZApAQCAtMzk0 MCw3ICszNzkzLDcgQEAgbDI6CiAJCSAqIHdvcnRod2hpbGUuCiAJCSAqLwogCQlpZiAoUGFn ZUlzQWxsVmlzaWJsZShwYWdlKSAmJgotCQkJdmlzaWJpbGl0eW1hcF9jbGVhcihyZWxhdGlv biwgYmxvY2ssIHZtYnVmZmVyLAorCQkJdmlzaWJpbGl0eW1hcF9jbGVhcihyZWxhdGlvbiwg YmxvY2ssICp2bWJ1ZmZlciwKIAkJCQkJCQkJVklTSUJJTElUWU1BUF9BTExfRlJPWkVOKSkK IAkJCWNsZWFyZWRfYWxsX2Zyb3plbiA9IHRydWU7CiAKQEAgLTM5NTQsMTAgKzM4MDcsMTAg QEAgbDI6CiAJCQlYTG9nQmVnaW5JbnNlcnQoKTsKIAkJCVhMb2dSZWdpc3RlckJ1ZmZlcigw LCBidWZmZXIsIFJFR0JVRl9TVEFOREFSRCk7CiAKLQkJCXhscmVjLm9mZm51bSA9IEl0ZW1Q b2ludGVyR2V0T2Zmc2V0TnVtYmVyKCZvbGR0dXAudF9zZWxmKTsKKwkJCXhscmVjLm9mZm51 bSA9IEl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyKCZvbGR0dXAtPnRfc2VsZik7CiAJCQl4 bHJlYy54bWF4ID0geG1heF9sb2NrX29sZF90dXBsZTsKLQkJCXhscmVjLmluZm9iaXRzX3Nl dCA9IGNvbXB1dGVfaW5mb2JpdHMob2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzaywKLQkJCQkJ CQkJCQkJCSAgb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzazIpOworCQkJeGxyZWMuaW5mb2Jp dHNfc2V0ID0gY29tcHV0ZV9pbmZvYml0cyhvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzaywK KwkJCQkJCQkJCQkJCSAgb2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2syKTsKIAkJCXhscmVj LmZsYWdzID0KIAkJCQljbGVhcmVkX2FsbF9mcm96ZW4gPyBYTEhfTE9DS19BTExfRlJPWkVO X0NMRUFSRUQgOiAwOwogCQkJWExvZ1JlZ2lzdGVyRGF0YSgmeGxyZWMsIFNpemVPZkhlYXBM b2NrKTsKQEAgLTM5NzksNyArMzgzMiw3IEBAIGwyOgogCQlpZiAobmVlZF90b2FzdCkKIAkJ ewogCQkJLyogTm90ZSB3ZSBhbHdheXMgdXNlIFdBTCBhbmQgRlNNIGR1cmluZyB1cGRhdGVz ICovCi0JCQloZWFwdHVwID0gaGVhcF90b2FzdF9pbnNlcnRfb3JfdXBkYXRlKHJlbGF0aW9u LCBuZXd0dXAsICZvbGR0dXAsIDApOworCQkJaGVhcHR1cCA9IGhlYXBfdG9hc3RfaW5zZXJ0 X29yX3VwZGF0ZShyZWxhdGlvbiwgbmV3dHVwLCBvbGR0dXAsIDApOwogCQkJbmV3dHVwc2l6 ZSA9IE1BWEFMSUdOKGhlYXB0dXAtPnRfbGVuKTsKIAkJfQogCQllbHNlCkBAIC00MDE1LDIw ICszODY4LDIwIEBAIGwyOgogCQkJCS8qIEl0IGRvZXNuJ3QgZml0LCBtdXN0IHVzZSBSZWxh dGlvbkdldEJ1ZmZlckZvclR1cGxlLiAqLwogCQkJCW5ld2J1ZiA9IFJlbGF0aW9uR2V0QnVm ZmVyRm9yVHVwbGUocmVsYXRpb24sIGhlYXB0dXAtPnRfbGVuLAogCQkJCQkJCQkJCQkJICAg YnVmZmVyLCAwLCBOVUxMLAotCQkJCQkJCQkJCQkJICAgJnZtYnVmZmVyX25ldywgJnZtYnVm ZmVyLAorCQkJCQkJCQkJCQkJICAgJnZtYnVmZmVyX25ldywgdm1idWZmZXIsCiAJCQkJCQkJ CQkJCQkgICAwKTsKIAkJCQkvKiBXZSdyZSBhbGwgZG9uZS4gKi8KIAkJCQlicmVhazsKIAkJ CX0KIAkJCS8qIEFjcXVpcmUgVk0gcGFnZSBwaW4gaWYgbmVlZGVkIGFuZCB3ZSBkb24ndCBo YXZlIGl0LiAqLwotCQkJaWYgKHZtYnVmZmVyID09IEludmFsaWRCdWZmZXIgJiYgUGFnZUlz QWxsVmlzaWJsZShwYWdlKSkKLQkJCQl2aXNpYmlsaXR5bWFwX3BpbihyZWxhdGlvbiwgYmxv Y2ssICZ2bWJ1ZmZlcik7CisJCQlpZiAoKnZtYnVmZmVyID09IEludmFsaWRCdWZmZXIgJiYg UGFnZUlzQWxsVmlzaWJsZShwYWdlKSkKKwkJCQl2aXNpYmlsaXR5bWFwX3BpbihyZWxhdGlv biwgYmxvY2ssIHZtYnVmZmVyKTsKIAkJCS8qIFJlLWFjcXVpcmUgdGhlIGxvY2sgb24gdGhl IG9sZCB0dXBsZSdzIHBhZ2UuICovCiAJCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xP Q0tfRVhDTFVTSVZFKTsKIAkJCS8qIFJlLWNoZWNrIHVzaW5nIHRoZSB1cC10by1kYXRlIGZy ZWUgc3BhY2UgKi8KIAkJCXBhZ2VmcmVlID0gUGFnZUdldEhlYXBGcmVlU3BhY2UocGFnZSk7 CiAJCQlpZiAobmV3dHVwc2l6ZSA+IHBhZ2VmcmVlIHx8Ci0JCQkJKHZtYnVmZmVyID09IElu dmFsaWRCdWZmZXIgJiYgUGFnZUlzQWxsVmlzaWJsZShwYWdlKSkpCisJCQkJKCp2bWJ1ZmZl ciA9PSBJbnZhbGlkQnVmZmVyICYmIFBhZ2VJc0FsbFZpc2libGUocGFnZSkpKQogCQkJewog CQkJCS8qCiAJCQkJICogUmF0cywgaXQgZG9lc24ndCBmaXQgYW55bW9yZSwgb3Igc29tZWJv ZHkganVzdCBub3cgc2V0IHRoZQpAQCAtNDA2Niw3ICszOTE5LDcgQEAgbDI6CiAJICogd2ls bCBpbmNsdWRlIGNoZWNraW5nIHRoZSByZWxhdGlvbiBsZXZlbCwgdGhlcmUgaXMgbm8gYmVu ZWZpdCB0byBhCiAJICogc2VwYXJhdGUgY2hlY2sgZm9yIHRoZSBuZXcgdHVwbGUuCiAJICov Ci0JQ2hlY2tGb3JTZXJpYWxpemFibGVDb25mbGljdEluKHJlbGF0aW9uLCAmb2xkdHVwLnRf c2VsZiwKKwlDaGVja0ZvclNlcmlhbGl6YWJsZUNvbmZsaWN0SW4ocmVsYXRpb24sICZvbGR0 dXAtPnRfc2VsZiwKIAkJCQkJCQkJICAgQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmZmVyKSk7 CiAKIAkvKgpAQCAtNDA3NCw3ICszOTI3LDYgQEAgbDI6CiAJICogaGFzIGVub3VnaCBzcGFj ZSBmb3IgdGhlIG5ldyB0dXBsZS4gIElmIHRoZXkgYXJlIHRoZSBzYW1lIGJ1ZmZlciwgb25s eQogCSAqIG9uZSBwaW4gaXMgaGVsZC4KIAkgKi8KLQogCWlmIChuZXdidWYgPT0gYnVmZmVy KQogCXsKIAkJLyoKQEAgLTQwODIsNyArMzkzNCw3IEBAIGwyOgogCQkgKiB0byBkbyBhIEhP VCB1cGRhdGUuICBDaGVjayBpZiBhbnkgb2YgdGhlIGluZGV4IGNvbHVtbnMgaGF2ZSBiZWVu CiAJCSAqIGNoYW5nZWQuCiAJCSAqLwotCQlpZiAoIWJtc19vdmVybGFwKG1vZGlmaWVkX2F0 dHJzLCBob3RfYXR0cnMpKQorCQlpZiAoIWJtc19vdmVybGFwKG1peF9hdHRycywgaG90X2F0 dHJzKSkKIAkJewogCQkJdXNlX2hvdF91cGRhdGUgPSB0cnVlOwogCkBAIC00MDkzLDcgKzM5 NDUsNyBAQCBsMjoKIAkJCSAqIGluZGV4ZXMgaWYgdGhlIGNvbHVtbnMgd2VyZSB1cGRhdGVk LCBvciB3ZSBtYXkgZmFpbCB0byBkZXRlY3QKIAkJCSAqIGUuZy4gdmFsdWUgYm91bmQgY2hh bmdlcyBpbiBCUklOIG1pbm1heCBpbmRleGVzLgogCQkJICovCi0JCQlpZiAoYm1zX292ZXJs YXAobW9kaWZpZWRfYXR0cnMsIHN1bV9hdHRycykpCisJCQlpZiAoYm1zX292ZXJsYXAobWl4 X2F0dHJzLCBzdW1fYXR0cnMpKQogCQkJCXN1bW1hcml6ZWRfdXBkYXRlID0gdHJ1ZTsKIAkJ fQogCX0KQEAgLTQxMTAsMTAgKzM5NjIsOCBAQCBsMjoKIAkgKiBsb2dnZWQuICBQYXNzIG9s ZCBrZXkgcmVxdWlyZWQgYXMgdHJ1ZSBvbmx5IGlmIHRoZSByZXBsaWNhIGlkZW50aXR5IGtl eQogCSAqIGNvbHVtbnMgYXJlIG1vZGlmaWVkIG9yIGl0IGhhcyBleHRlcm5hbCBkYXRhLgog CSAqLwotCW9sZF9rZXlfdHVwbGUgPSBFeHRyYWN0UmVwbGljYUlkZW50aXR5KHJlbGF0aW9u LCAmb2xkdHVwLAotCQkJCQkJCQkJCSAgIGJtc19vdmVybGFwKG1vZGlmaWVkX2F0dHJzLCBp ZF9hdHRycykgfHwKLQkJCQkJCQkJCQkgICBpZF9oYXNfZXh0ZXJuYWwsCi0JCQkJCQkJCQkJ ICAgJm9sZF9rZXlfY29waWVkKTsKKwlvbGRfa2V5X3R1cGxlID0gRXh0cmFjdFJlcGxpY2FJ ZGVudGl0eShyZWxhdGlvbiwgb2xkdHVwLCByaWRfYXR0cnMsCisJCQkJCQkJCQkJICAgcmVw X2lkX2tleV9yZXF1aXJlZCwgJm9sZF9rZXlfY29waWVkKTsKIAogCS8qIE5PIEVSRVBPUlQo RVJST1IpIGZyb20gaGVyZSB0aWxsIGNoYW5nZXMgYXJlIGxvZ2dlZCAqLwogCVNUQVJUX0NS SVRfU0VDVElPTigpOwpAQCAtNDEzNSw3ICszOTg1LDcgQEAgbDI6CiAJaWYgKHVzZV9ob3Rf dXBkYXRlKQogCXsKIAkJLyogTWFyayB0aGUgb2xkIHR1cGxlIGFzIEhPVC11cGRhdGVkICov Ci0JCUhlYXBUdXBsZVNldEhvdFVwZGF0ZWQoJm9sZHR1cCk7CisJCUhlYXBUdXBsZVNldEhv dFVwZGF0ZWQob2xkdHVwKTsKIAkJLyogQW5kIG1hcmsgdGhlIG5ldyB0dXBsZSBhcyBoZWFw LW9ubHkgKi8KIAkJSGVhcFR1cGxlU2V0SGVhcE9ubHkoaGVhcHR1cCk7CiAJCS8qIE1hcmsg dGhlIGNhbGxlcidzIGNvcHkgdG9vLCBpbiBjYXNlIGRpZmZlcmVudCBmcm9tIGhlYXB0dXAg Ki8KQEAgLTQxNDQsNyArMzk5NCw3IEBAIGwyOgogCWVsc2UKIAl7CiAJCS8qIE1ha2Ugc3Vy ZSB0dXBsZXMgYXJlIGNvcnJlY3RseSBtYXJrZWQgYXMgbm90LUhPVCAqLwotCQlIZWFwVHVw bGVDbGVhckhvdFVwZGF0ZWQoJm9sZHR1cCk7CisJCUhlYXBUdXBsZUNsZWFySG90VXBkYXRl ZChvbGR0dXApOwogCQlIZWFwVHVwbGVDbGVhckhlYXBPbmx5KGhlYXB0dXApOwogCQlIZWFw VHVwbGVDbGVhckhlYXBPbmx5KG5ld3R1cCk7CiAJfQpAQCAtNDE1MywxNyArNDAwMywxNyBA QCBsMjoKIAogCiAJLyogQ2xlYXIgb2Jzb2xldGUgdmlzaWJpbGl0eSBmbGFncywgcG9zc2li bHkgc2V0IGJ5IG91cnNlbHZlcyBhYm92ZS4uLiAqLwotCW9sZHR1cC50X2RhdGEtPnRfaW5m b21hc2sgJj0gfihIRUFQX1hNQVhfQklUUyB8IEhFQVBfTU9WRUQpOwotCW9sZHR1cC50X2Rh dGEtPnRfaW5mb21hc2syICY9IH5IRUFQX0tFWVNfVVBEQVRFRDsKKwlvbGR0dXAtPnRfZGF0 YS0+dF9pbmZvbWFzayAmPSB+KEhFQVBfWE1BWF9CSVRTIHwgSEVBUF9NT1ZFRCk7CisJb2xk dHVwLT50X2RhdGEtPnRfaW5mb21hc2syICY9IH5IRUFQX0tFWVNfVVBEQVRFRDsKIAkvKiAu Li4gYW5kIHN0b3JlIGluZm8gYWJvdXQgdHJhbnNhY3Rpb24gdXBkYXRpbmcgdGhpcyB0dXBs ZSAqLwogCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZCh4bWF4X29sZF90dXBsZSkpOwot CUhlYXBUdXBsZUhlYWRlclNldFhtYXgob2xkdHVwLnRfZGF0YSwgeG1heF9vbGRfdHVwbGUp OwotCW9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2sgfD0gaW5mb21hc2tfb2xkX3R1cGxlOwot CW9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2syIHw9IGluZm9tYXNrMl9vbGRfdHVwbGU7Ci0J SGVhcFR1cGxlSGVhZGVyU2V0Q21heChvbGR0dXAudF9kYXRhLCBjaWQsIGlzY29tYm8pOwor CUhlYXBUdXBsZUhlYWRlclNldFhtYXgob2xkdHVwLT50X2RhdGEsIHhtYXhfb2xkX3R1cGxl KTsKKwlvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzayB8PSBpbmZvbWFza19vbGRfdHVwbGU7 CisJb2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2syIHw9IGluZm9tYXNrMl9vbGRfdHVwbGU7 CisJSGVhcFR1cGxlSGVhZGVyU2V0Q21heChvbGR0dXAtPnRfZGF0YSwgY2lkLCBpc2NvbWJv KTsKIAogCS8qIHJlY29yZCBhZGRyZXNzIG9mIG5ldyB0dXBsZSBpbiB0X2N0aWQgb2Ygb2xk IG9uZSAqLwotCW9sZHR1cC50X2RhdGEtPnRfY3RpZCA9IGhlYXB0dXAtPnRfc2VsZjsKKwlv bGR0dXAtPnRfZGF0YS0+dF9jdGlkID0gaGVhcHR1cC0+dF9zZWxmOwogCiAJLyogY2xlYXIg UERfQUxMX1ZJU0lCTEUgZmxhZ3MsIHJlc2V0IGFsbCB2aXNpYmlsaXR5bWFwIGJpdHMgKi8K IAlpZiAoUGFnZUlzQWxsVmlzaWJsZShCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpKQpAQCAtNDE3 MSw3ICs0MDIxLDcgQEAgbDI6CiAJCWFsbF92aXNpYmxlX2NsZWFyZWQgPSB0cnVlOwogCQlQ YWdlQ2xlYXJBbGxWaXNpYmxlKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSk7CiAJCXZpc2liaWxp dHltYXBfY2xlYXIocmVsYXRpb24sIEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1ZmZlciksCi0J CQkJCQkJdm1idWZmZXIsIFZJU0lCSUxJVFlNQVBfVkFMSURfQklUUyk7CisJCQkJCQkJKnZt YnVmZmVyLCBWSVNJQklMSVRZTUFQX1ZBTElEX0JJVFMpOwogCX0KIAlpZiAobmV3YnVmICE9 IGJ1ZmZlciAmJiBQYWdlSXNBbGxWaXNpYmxlKEJ1ZmZlckdldFBhZ2UobmV3YnVmKSkpCiAJ ewpAQCAtNDE5NiwxMiArNDA0NiwxMiBAQCBsMjoKIAkJICovCiAJCWlmIChSZWxhdGlvbklz QWNjZXNzaWJsZUluTG9naWNhbERlY29kaW5nKHJlbGF0aW9uKSkKIAkJewotCQkJbG9nX2hl YXBfbmV3X2NpZChyZWxhdGlvbiwgJm9sZHR1cCk7CisJCQlsb2dfaGVhcF9uZXdfY2lkKHJl bGF0aW9uLCBvbGR0dXApOwogCQkJbG9nX2hlYXBfbmV3X2NpZChyZWxhdGlvbiwgaGVhcHR1 cCk7CiAJCX0KIAogCQlyZWNwdHIgPSBsb2dfaGVhcF91cGRhdGUocmVsYXRpb24sIGJ1ZmZl ciwKLQkJCQkJCQkJIG5ld2J1ZiwgJm9sZHR1cCwgaGVhcHR1cCwKKwkJCQkJCQkJIG5ld2J1 Ziwgb2xkdHVwLCBoZWFwdHVwLAogCQkJCQkJCQkgb2xkX2tleV90dXBsZSwKIAkJCQkJCQkJ IGFsbF92aXNpYmxlX2NsZWFyZWQsCiAJCQkJCQkJCSBhbGxfdmlzaWJsZV9jbGVhcmVkX25l dyk7CkBAIC00MjI2LDcgKzQwNzYsNyBAQCBsMjoKIAkgKiBib3RoIHR1cGxlIHZlcnNpb25z IGluIG9uZSBjYWxsIHRvIGludmFsLmMgc28gd2UgY2FuIGF2b2lkIHJlZHVuZGFudAogCSAq IHNpbnZhbCBtZXNzYWdlcy4pCiAJICovCi0JQ2FjaGVJbnZhbGlkYXRlSGVhcFR1cGxlKHJl bGF0aW9uLCAmb2xkdHVwLCBoZWFwdHVwKTsKKwlDYWNoZUludmFsaWRhdGVIZWFwVHVwbGUo cmVsYXRpb24sIG9sZHR1cCwgaGVhcHR1cCk7CiAKIAkvKiBOb3cgd2UgY2FuIHJlbGVhc2Ug dGhlIGJ1ZmZlcihzKSAqLwogCWlmIChuZXdidWYgIT0gYnVmZmVyKQpAQCAtNDIzNCwxNCAr NDA4NCwxNCBAQCBsMjoKIAlSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAJaWYgKEJ1ZmZlcklz VmFsaWQodm1idWZmZXJfbmV3KSkKIAkJUmVsZWFzZUJ1ZmZlcih2bWJ1ZmZlcl9uZXcpOwot CWlmIChCdWZmZXJJc1ZhbGlkKHZtYnVmZmVyKSkKLQkJUmVsZWFzZUJ1ZmZlcih2bWJ1ZmZl cik7CisJaWYgKEJ1ZmZlcklzVmFsaWQoKnZtYnVmZmVyKSkKKwkJUmVsZWFzZUJ1ZmZlcigq dm1idWZmZXIpOwogCiAJLyoKIAkgKiBSZWxlYXNlIHRoZSBsbWdyIHR1cGxlIGxvY2ssIGlm IHdlIGhhZCBpdC4KIAkgKi8KIAlpZiAoaGF2ZV90dXBsZV9sb2NrKQotCQlVbmxvY2tUdXBs ZVR1cGxvY2socmVsYXRpb24sICYob2xkdHVwLnRfc2VsZiksICpsb2NrbW9kZSk7CisJCVVu bG9ja1R1cGxlVHVwbG9jayhyZWxhdGlvbiwgJm9sZHR1cC0+dF9zZWxmLCAqbG9ja21vZGUp OwogCiAJcGdzdGF0X2NvdW50X2hlYXBfdXBkYXRlKHJlbGF0aW9uLCB1c2VfaG90X3VwZGF0 ZSwgbmV3YnVmICE9IGJ1ZmZlcik7CiAKQEAgLTQyNzQsMTMgKzQxMjQsNiBAQCBsMjoKIAlp ZiAob2xkX2tleV90dXBsZSAhPSBOVUxMICYmIG9sZF9rZXlfY29waWVkKQogCQloZWFwX2Zy ZWV0dXBsZShvbGRfa2V5X3R1cGxlKTsKIAotCWJtc19mcmVlKGhvdF9hdHRycyk7Ci0JYm1z X2ZyZWUoc3VtX2F0dHJzKTsKLQlibXNfZnJlZShrZXlfYXR0cnMpOwotCWJtc19mcmVlKGlk X2F0dHJzKTsKLQlibXNfZnJlZShtb2RpZmllZF9hdHRycyk7Ci0JYm1zX2ZyZWUoaW50ZXJl c3RpbmdfYXR0cnMpOwotCiAJcmV0dXJuIFRNX09rOwogfQogCkBAIC00Mjg5LDcgKzQxMzIs NyBAQCBsMjoKICAqIENvbmZpcm0gYWRlcXVhdGUgbG9jayBoZWxkIGR1cmluZyBoZWFwX3Vw ZGF0ZSgpLCBwZXIgcnVsZXMgZnJvbQogICogUkVBRE1FLnR1cGxvY2sgc2VjdGlvbiAiTG9j a2luZyB0byB3cml0ZSBpbnBsYWNlLXVwZGF0ZWQgdGFibGVzIi4KICAqLwotc3RhdGljIHZv aWQKK3ZvaWQKIGNoZWNrX2xvY2tfaWZfaW5wbGFjZV91cGRhdGVhYmxlX3JlbChSZWxhdGlv biByZWxhdGlvbiwKIAkJCQkJCQkJCSBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsCiAJ CQkJCQkJCQkgSGVhcFR1cGxlIG5ld3R1cCkKQEAgLTQ0NjEsNyArNDMwNCw3IEBAIGhlYXBf YXR0cl9lcXVhbHMoVHVwbGVEZXNjIHR1cGRlc2MsIGludCBhdHRybnVtLCBEYXR1bSB2YWx1 ZTEsIERhdHVtIHZhbHVlMiwKICAqIGxpc3RlZCBhcyBpbnRlcmVzdGluZykgb2YgdGhlIG9s ZCB0dXBsZSBpcyBhIG1lbWJlciBvZiBleHRlcm5hbF9jb2xzIGFuZCBpcwogICogc3RvcmVk IGV4dGVybmFsbHkuCiAgKi8KLXN0YXRpYyBCaXRtYXBzZXQgKgorQml0bWFwc2V0ICoKIEhl YXBEZXRlcm1pbmVDb2x1bW5zSW5mbyhSZWxhdGlvbiByZWxhdGlvbiwKIAkJCQkJCSBCaXRt YXBzZXQgKmludGVyZXN0aW5nX2NvbHMsCiAJCQkJCQkgQml0bWFwc2V0ICpleHRlcm5hbF9j b2xzLApAQCAtNDU0NCwyNSArNDM4NywxNzUgQEAgSGVhcERldGVybWluZUNvbHVtbnNJbmZv KFJlbGF0aW9uIHJlbGF0aW9uLAogfQogCiAvKgotICoJc2ltcGxlX2hlYXBfdXBkYXRlIC0g cmVwbGFjZSBhIHR1cGxlCi0gKgotICogVGhpcyByb3V0aW5lIG1heSBiZSB1c2VkIHRvIHVw ZGF0ZSBhIHR1cGxlIHdoZW4gY29uY3VycmVudCB1cGRhdGVzIG9mCi0gKiB0aGUgdGFyZ2V0 IHR1cGxlIGFyZSBub3QgZXhwZWN0ZWQgKGZvciBleGFtcGxlLCBiZWNhdXNlIHdlIGhhdmUg YSBsb2NrCi0gKiBvbiB0aGUgcmVsYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSB0dXBsZSku ICBBbnkgZmFpbHVyZSBpcyByZXBvcnRlZAotICogdmlhIGVyZXBvcnQoKS4KKyAqIFRoaXMg cm91dGluZSBtYXkgYmUgdXNlZCB0byB1cGRhdGUgYSB0dXBsZSB3aGVuIGNvbmN1cnJlbnQg dXBkYXRlcyBvZiB0aGUKKyAqIHRhcmdldCB0dXBsZSBhcmUgbm90IGV4cGVjdGVkIChmb3Ig ZXhhbXBsZSwgYmVjYXVzZSB3ZSBoYXZlIGEgbG9jayBvbiB0aGUKKyAqIHJlbGF0aW9uIGFz c29jaWF0ZWQgd2l0aCB0aGUgdHVwbGUpLiAgQW55IGZhaWx1cmUgaXMgcmVwb3J0ZWQgdmlh IGVyZXBvcnQoKS4KICAqLwogdm9pZAotc2ltcGxlX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJl bGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBsZSB0dXAsCitz aW1wbGVfaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVy RGF0YSAqb3RpZCwgSGVhcFR1cGxlIHR1cGxlLAogCQkJCSAgIFRVX1VwZGF0ZUluZGV4ZXMg KnVwZGF0ZV9pbmRleGVzKQogewogCVRNX1Jlc3VsdAlyZXN1bHQ7CiAJVE1fRmFpbHVyZURh dGEgdG1mZDsKIAlMb2NrVHVwbGVNb2RlIGxvY2ttb2RlOworCUJ1ZmZlcgkJYnVmZmVyOwor CUJ1ZmZlcgkJdm1idWZmZXIgPSBJbnZhbGlkQnVmZmVyOworCVBhZ2UJCXBhZ2U7CisJQmxv Y2tOdW1iZXIgYmxvY2s7CisJQml0bWFwc2V0ICAqaG90X2F0dHJzLAorCQkJICAgKnN1bV9h dHRycywKKwkJCSAgICpwa19hdHRycywKKwkJCSAgICpyaWRfYXR0cnMsCisJCQkgICAqbWl4 X2F0dHJzLAorCQkJICAgKmlkeF9hdHRyczsKKwlJdGVtSWQJCWxwOworCUhlYXBUdXBsZURh dGEgb2xkdHVwOworCWJvb2wJCXJlcF9pZF9rZXlfcmVxdWlyZWQgPSBmYWxzZTsKKworCUFz c2VydChJdGVtUG9pbnRlcklzVmFsaWQob3RpZCkpOworCisJLyogQ2hlYXAsIHNpbXBsaXN0 aWMgY2hlY2sgdGhhdCB0aGUgdHVwbGUgbWF0Y2hlcyB0aGUgcmVsJ3Mgcm93dHlwZS4gKi8K KwlBc3NlcnQoSGVhcFR1cGxlSGVhZGVyR2V0TmF0dHModHVwbGUtPnRfZGF0YSkgPD0KKwkJ ICAgUmVsYXRpb25HZXROdW1iZXJPZkF0dHJpYnV0ZXMocmVsYXRpb24pKTsKKworCS8qCisJ ICogRm9yYmlkIHRoaXMgZHVyaW5nIGEgcGFyYWxsZWwgb3BlcmF0aW9uLCBsZXN0IGl0IGFs bG9jYXRlIGEgY29tYm8gQ0lELgorCSAqIE90aGVyIHdvcmtlcnMgbWlnaHQgbmVlZCB0aGF0 IGNvbWJvIENJRCBmb3IgdmlzaWJpbGl0eSBjaGVja3MsIGFuZCB3ZQorCSAqIGhhdmUgbm8g cHJvdmlzaW9uIGZvciBicm9hZGNhc3RpbmcgaXQgdG8gdGhlbS4KKwkgKi8KKwlpZiAoSXNJ blBhcmFsbGVsTW9kZSgpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9UUkFOU0FDVElPTl9TVEFURSksCisJCQkJIGVycm1zZygiY2Fubm90IHVw ZGF0ZSB0dXBsZXMgZHVyaW5nIGEgcGFyYWxsZWwgb3BlcmF0aW9uIikpKTsKKworI2lmZGVm IFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwljaGVja19sb2NrX2lmX2lucGxhY2VfdXBkYXRlYWJs ZV9yZWwocmVsYXRpb24sIG90aWQsIHR1cGxlKTsKKyNlbmRpZgorCisJLyoKKwkgKiBGZXRj aCB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHRvIGJlIGNoZWNrZWQgZm9yIHZhcmlvdXMgb3Bl cmF0aW9ucy4KKwkgKgorCSAqIEZvciBIT1QgY29uc2lkZXJhdGlvbnMsIHRoaXMgaXMgd2Fz dGVkIGVmZm9ydCBpZiB3ZSBmYWlsIHRvIHVwZGF0ZSBvcgorCSAqIGhhdmUgdG8gcHV0IHRo ZSBuZXcgdHVwbGUgb24gYSBkaWZmZXJlbnQgcGFnZS4gIEJ1dCB3ZSBtdXN0IGNvbXB1dGUg dGhlCisJICogbGlzdCBiZWZvcmUgb2J0YWluaW5nIGJ1ZmZlciBsb2NrIC0tLSBpbiB0aGUg d29yc3QgY2FzZSwgaWYgd2UgYXJlCisJICogZG9pbmcgYW4gdXBkYXRlIG9uIG9uZSBvZiB0 aGUgcmVsZXZhbnQgc3lzdGVtIGNhdGFsb2dzLCB3ZSBjb3VsZAorCSAqIGRlYWRsb2NrIGlm IHdlIHRyeSB0byBmZXRjaCB0aGUgbGlzdCBsYXRlci4gIEluIGFueSBjYXNlLCB0aGUgcmVs Y2FjaGUKKwkgKiBjYWNoZXMgdGhlIGRhdGEgc28gdGhpcyBpcyB1c3VhbGx5IHByZXR0eSBj aGVhcC4KKwkgKgorCSAqIFdlIGFsc28gbmVlZCBjb2x1bW5zIHVzZWQgYnkgdGhlIHJlcGxp Y2EgaWRlbnRpdHkgYW5kIGNvbHVtbnMgdGhhdCBhcmUKKwkgKiBjb25zaWRlcmVkIHRoZSAi a2V5IiBvZiByb3dzIGluIHRoZSB0YWJsZS4KKwkgKgorCSAqIE5vdGUgdGhhdCB3ZSBnZXQg Y29waWVzIG9mIGVhY2ggYml0bWFwLCBzbyB3ZSBuZWVkIG5vdCB3b3JyeSBhYm91dAorCSAq IHJlbGNhY2hlIGZsdXNoIGhhcHBlbmluZyBtaWR3YXkgdGhyb3VnaC4KKwkgKi8KKwlob3Rf YXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChyZWxhdGlvbiwKKwkJCQkJCQkJ CQkgICBJTkRFWF9BVFRSX0JJVE1BUF9IT1RfQkxPQ0tJTkcpOworCXN1bV9hdHRycyA9IFJl bGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLAorCQkJCQkJCQkJCSAgIElOREVY X0FUVFJfQklUTUFQX1NVTU1BUklaRUQpOworCXBrX2F0dHJzID0gUmVsYXRpb25HZXRJbmRl eEF0dHJCaXRtYXAocmVsYXRpb24sIElOREVYX0FUVFJfQklUTUFQX0tFWSk7CisJcmlkX2F0 dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sCisJCQkJCQkJCQkJ ICAgSU5ERVhfQVRUUl9CSVRNQVBfSURFTlRJVFlfS0VZKTsKKworCWlkeF9hdHRycyA9IGJt c19jb3B5KGhvdF9hdHRycyk7CisJaWR4X2F0dHJzID0gYm1zX2FkZF9tZW1iZXJzKGlkeF9h dHRycywgc3VtX2F0dHJzKTsKKwlpZHhfYXR0cnMgPSBibXNfYWRkX21lbWJlcnMoaWR4X2F0 dHJzLCBwa19hdHRycyk7CisJaWR4X2F0dHJzID0gYm1zX2FkZF9tZW1iZXJzKGlkeF9hdHRy cywgcmlkX2F0dHJzKTsKKworCWJsb2NrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcihv dGlkKTsKKwlJTkpFQ1RJT05fUE9JTlQoImhlYXBfdXBkYXRlLWJlZm9yZS1waW4iLCBOVUxM KTsKKwlidWZmZXIgPSBSZWFkQnVmZmVyKHJlbGF0aW9uLCBibG9jayk7CisJcGFnZSA9IEJ1 ZmZlckdldFBhZ2UoYnVmZmVyKTsKKworCS8qCisJICogQmVmb3JlIGxvY2tpbmcgdGhlIGJ1 ZmZlciwgcGluIHRoZSB2aXNpYmlsaXR5IG1hcCBwYWdlIGlmIGl0IGFwcGVhcnMgdG8KKwkg KiBiZSBuZWNlc3NhcnkuICBTaW5jZSB3ZSBoYXZlbid0IGdvdCB0aGUgbG9jayB5ZXQsIHNv bWVvbmUgZWxzZSBtaWdodCBiZQorCSAqIGluIHRoZSBtaWRkbGUgb2YgY2hhbmdpbmcgdGhp cywgc28gd2UnbGwgbmVlZCB0byByZWNoZWNrIGFmdGVyIHdlIGhhdmUKKwkgKiB0aGUgbG9j ay4KKwkgKi8KKwlpZiAoUGFnZUlzQWxsVmlzaWJsZShwYWdlKSkKKwkJdmlzaWJpbGl0eW1h cF9waW4ocmVsYXRpb24sIGJsb2NrLCAmdm1idWZmZXIpOworCisJTG9ja0J1ZmZlcihidWZm ZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CisKKwlscCA9IFBhZ2VHZXRJdGVtSWQocGFn ZSwgSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIob3RpZCkpOworCisJLyoKKwkgKiBVc3Vh bGx5LCBhIGJ1ZmZlciBwaW4gYW5kL29yIHNuYXBzaG90IGJsb2NrcyBwcnVuaW5nIG9mIG90 aWQsIGVuc3VyaW5nCisJICogd2Ugc2VlIExQX05PUk1BTCBoZXJlLiAgV2hlbiB0aGUgb3Rp ZCBvcmlnaW4gaXMgYSBzeXNjYWNoZSwgd2UgbWF5IGhhdmUKKwkgKiBuZWl0aGVyIGEgcGlu IG5vciBhIHNuYXBzaG90LiAgSGVuY2UsIHdlIG1heSBzZWUgb3RoZXIgTFBfIHN0YXRlcywg ZWFjaAorCSAqIG9mIHdoaWNoIGluZGljYXRlcyBjb25jdXJyZW50IHBydW5pbmcuCisJICoK KwkgKiBGYWlsaW5nIHdpdGggVE1fVXBkYXRlZCB3b3VsZCBiZSBtb3N0IGFjY3VyYXRlLiAg SG93ZXZlciwgdW5saWtlIG90aGVyCisJICogVE1fVXBkYXRlZCBzY2VuYXJpb3MsIHdlIGRv bid0IGtub3cgdGhlIHN1Y2Nlc3NvciBjdGlkIGluIExQX1VOVVNFRCBhbmQKKwkgKiBMUF9E RUFEIGNhc2VzLiAgV2hpbGUgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gVE1fVXBkYXRlZCBh bmQgVE1fRGVsZXRlZAorCSAqIGRvZXMgbWF0dGVyIHRvIFNRTCBzdGF0ZW1lbnRzIFVQREFU RSBhbmQgTUVSR0UsIHRob3NlIFNRTCBzdGF0ZW1lbnRzCisJICogaG9sZCBhIHNuYXBzaG90 IHRoYXQgZW5zdXJlcyBMUF9OT1JNQUwuICBIZW5jZSwgdGhlIGNob2ljZSBiZXR3ZWVuCisJ ICogVE1fVXBkYXRlZCBhbmQgVE1fRGVsZXRlZCBhZmZlY3RzIG9ubHkgdGhlIHdvcmRpbmcg b2YgZXJyb3IgbWVzc2FnZXMuCisJICogU2V0dGxlIG9uIFRNX0RlbGV0ZWQsIGZvciB0d28g cmVhc29ucy4gIEZpcnN0LCBpdCBhdm9pZHMgY29tcGxpY2F0aW5nCisJICogdGhlIHNwZWNp ZmljYXRpb24gb2Ygd2hlbiB0bWZkLT5jdGlkIGlzIHZhbGlkLiAgU2Vjb25kLCBpdCBjcmVh dGVzCisJICogZXJyb3IgbG9nIGV2aWRlbmNlIHRoYXQgd2UgdG9vayB0aGlzIGJyYW5jaC4K KwkgKgorCSAqIFNpbmNlIGl0J3MgcG9zc2libGUgdG8gc2VlIExQX1VOVVNFRCBhdCBvdGlk LCBpdCdzIGFsc28gcG9zc2libGUgdG8gc2VlCisJICogTFBfTk9STUFMIGZvciBhIHR1cGxl IHRoYXQgcmVwbGFjZWQgTFBfVU5VU0VELiAgSWYgaXQncyBhIHR1cGxlIGZvciBhbgorCSAq IHVucmVsYXRlZCByb3csIHdlJ2xsIGZhaWwgd2l0aCAiZHVwbGljYXRlIGtleSB2YWx1ZSB2 aW9sYXRlcyB1bmlxdWUiLgorCSAqIFhYWCBpZiBvdGlkIGlzIHRoZSBsaXZlLCBuZXdlciB2 ZXJzaW9uIG9mIHRoZSBuZXd0dXAgcm93LCB3ZSdsbCBkaXNjYXJkCisJICogY2hhbmdlcyBv cmlnaW5hdGluZyBpbiB2ZXJzaW9ucyBvZiB0aGlzIGNhdGFsb2cgcm93IGFmdGVyIHRoZSB2 ZXJzaW9uCisJICogdGhlIGNhbGxlciBnb3QgZnJvbSBzeXNjYWNoZS4gIFNlZSBzeXNjYWNo ZS11cGRhdGUtcHJ1bmVkLnNwZWMuCisJICovCisJaWYgKCFJdGVtSWRJc05vcm1hbChscCkp CisJeworCQlBc3NlcnQoUmVsYXRpb25TdXBwb3J0c1N5c0NhY2hlKFJlbGF0aW9uR2V0UmVs aWQocmVsYXRpb24pKSk7CisKKwkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOworCQlp ZiAodm1idWZmZXIgIT0gSW52YWxpZEJ1ZmZlcikKKwkJCVJlbGVhc2VCdWZmZXIodm1idWZm ZXIpOworCQkqdXBkYXRlX2luZGV4ZXMgPSBUVV9Ob25lOworCisJCWJtc19mcmVlKGhvdF9h dHRycyk7CisJCWJtc19mcmVlKHN1bV9hdHRycyk7CisJCWJtc19mcmVlKHBrX2F0dHJzKTsK KwkJYm1zX2ZyZWUocmlkX2F0dHJzKTsKKwkJYm1zX2ZyZWUoaWR4X2F0dHJzKTsKKwkJLyog bWl4X2F0dHJzIG5vdCB5ZXQgaW5pdGlhbGl6ZWQgKi8KKworCQllbG9nKEVSUk9SLCAidHVw bGUgY29uY3VycmVudGx5IGRlbGV0ZWQiKTsKKworCQlyZXR1cm47CisJfQorCisJLyoKKwkg KiBQYXJ0aWFsbHkgY29uc3RydWN0IHRoZSBvbGR0dXAgZm9yIEhlYXBEZXRlcm1pbmVDb2x1 bW5zSW5mbyB0byB3b3JrIGFuZAorCSAqIHRoZW4gcGFzcyB0aGF0IG9uIHRvIGhlYXBfdXBk YXRlLgorCSAqLworCW9sZHR1cC50X3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChyZWxh dGlvbik7CisJb2xkdHVwLnRfZGF0YSA9IChIZWFwVHVwbGVIZWFkZXIpIFBhZ2VHZXRJdGVt KHBhZ2UsIGxwKTsKKwlvbGR0dXAudF9sZW4gPSBJdGVtSWRHZXRMZW5ndGgobHApOworCW9s ZHR1cC50X3NlbGYgPSAqb3RpZDsKKworCW1peF9hdHRycyA9IEhlYXBEZXRlcm1pbmVDb2x1 bW5zSW5mbyhyZWxhdGlvbiwgaWR4X2F0dHJzLCByaWRfYXR0cnMsCisJCQkJCQkJCQkJICZv bGR0dXAsIHR1cGxlLCAmcmVwX2lkX2tleV9yZXF1aXJlZCk7CisKKwkvKgorCSAqIFdlJ2xs IG5lZWQgdG8gV0FMIGxvZyB0aGUgcmVwbGljYSBpZGVudGl0eSBhdHRyaWJ1dGVzIGlmIGVp dGhlciB0aGV5CisJICogb3ZlcmxhcCB3aXRoIHRoZSBtb2RpZmllZCBpbmRleGVkIGF0dHJp YnV0ZXMgb3IsIGFzIHdlJ3ZlIGNoZWNrZWQgZm9yCisJICoganVzdCBub3cgaW4gSGVhcERl dGVybWluZUNvbHVtbnNJbmZvLCB0aGV5IHdlcmUgdW5tb2RpZmllZCBleHRlcm5hbAorCSAq IGluZGV4ZWQgYXR0cmlidXRlcy4KKwkgKi8KKwlyZXBfaWRfa2V5X3JlcXVpcmVkID0gcmVw X2lkX2tleV9yZXF1aXJlZCB8fCBibXNfb3ZlcmxhcChtaXhfYXR0cnMsIHJpZF9hdHRycyk7 CisKKwlyZXN1bHQgPSBoZWFwX3VwZGF0ZShyZWxhdGlvbiwgJm9sZHR1cCwgdHVwbGUsIEdl dEN1cnJlbnRDb21tYW5kSWQodHJ1ZSksCisJCQkJCQkgSW52YWxpZFNuYXBzaG90LCB0cnVl IC8qIHdhaXQgZm9yIGNvbW1pdCAqLyAsICZ0bWZkLCAmbG9ja21vZGUsCisJCQkJCQkgYnVm ZmVyLCBwYWdlLCBibG9jaywgbHAsIGhvdF9hdHRycywgc3VtX2F0dHJzLCBwa19hdHRycywK KwkJCQkJCSByaWRfYXR0cnMsIG1peF9hdHRycywgJnZtYnVmZmVyLCByZXBfaWRfa2V5X3Jl cXVpcmVkLAorCQkJCQkJIHVwZGF0ZV9pbmRleGVzKTsKKworCWJtc19mcmVlKGhvdF9hdHRy cyk7CisJYm1zX2ZyZWUoc3VtX2F0dHJzKTsKKwlibXNfZnJlZShwa19hdHRycyk7CisJYm1z X2ZyZWUocmlkX2F0dHJzKTsKKwlibXNfZnJlZShtaXhfYXR0cnMpOworCWJtc19mcmVlKGlk eF9hdHRycyk7CiAKLQlyZXN1bHQgPSBoZWFwX3VwZGF0ZShyZWxhdGlvbiwgb3RpZCwgdHVw LAotCQkJCQkJIEdldEN1cnJlbnRDb21tYW5kSWQodHJ1ZSksIEludmFsaWRTbmFwc2hvdCwK LQkJCQkJCSB0cnVlIC8qIHdhaXQgZm9yIGNvbW1pdCAqLyAsCi0JCQkJCQkgJnRtZmQsICZs b2NrbW9kZSwgdXBkYXRlX2luZGV4ZXMpOwogCXN3aXRjaCAocmVzdWx0KQogCXsKIAkJY2Fz ZSBUTV9TZWxmTW9kaWZpZWQ6CkBAIC05MjE4LDEyICs5MjExLDExIEBAIGxvZ19oZWFwX25l d19jaWQoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXApCiAgKiB0aGUgc2FtZSB0 dXBsZSB0aGF0IHdhcyBwYXNzZWQgaW4uCiAgKi8KIHN0YXRpYyBIZWFwVHVwbGUKLUV4dHJh Y3RSZXBsaWNhSWRlbnRpdHkoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0cCwgYm9v bCBrZXlfcmVxdWlyZWQsCi0JCQkJCSAgIGJvb2wgKmNvcHkpCitFeHRyYWN0UmVwbGljYUlk ZW50aXR5KFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGUgdHAsIEJpdG1hcHNldCAqcmlk X2F0dHJzLAorCQkJCQkgICBib29sIGtleV9yZXF1aXJlZCwgYm9vbCAqY29weSkKIHsKIAlU dXBsZURlc2MJZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsYXRpb24pOwogCWNoYXIJCXJl cGxpZGVudCA9IHJlbGF0aW9uLT5yZF9yZWwtPnJlbHJlcGxpZGVudDsKLQlCaXRtYXBzZXQg ICppZGF0dHJzOwogCUhlYXBUdXBsZQlrZXlfdHVwbGU7CiAJYm9vbAkJbnVsbHNbTWF4SGVh cEF0dHJpYnV0ZU51bWJlcl07CiAJRGF0dW0JCXZhbHVlc1tNYXhIZWFwQXR0cmlidXRlTnVt YmVyXTsKQEAgLTkyNTQsMTcgKzkyNDYsMTMgQEAgRXh0cmFjdFJlcGxpY2FJZGVudGl0eShS ZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHRwLCBib29sIGtleV9yZXF1aXJlZCwKIAlp ZiAoIWtleV9yZXF1aXJlZCkKIAkJcmV0dXJuIE5VTEw7CiAKLQkvKiBmaW5kIG91dCB0aGUg cmVwbGljYSBpZGVudGl0eSBjb2x1bW5zICovCi0JaWRhdHRycyA9IFJlbGF0aW9uR2V0SW5k ZXhBdHRyQml0bWFwKHJlbGF0aW9uLAotCQkJCQkJCQkJCSBJTkRFWF9BVFRSX0JJVE1BUF9J REVOVElUWV9LRVkpOwotCiAJLyoKIAkgKiBJZiB0aGVyZSdzIG5vIGRlZmluZWQgcmVwbGlj YSBpZGVudGl0eSBjb2x1bW5zLCB0cmVhdCBhcyAha2V5X3JlcXVpcmVkLgogCSAqIChUaGlz IGNhc2Ugc2hvdWxkIG5vdCBiZSByZWFjaGFibGUgZnJvbSBoZWFwX3VwZGF0ZSwgc2luY2Ug dGhhdCBzaG91bGQKIAkgKiBjYWxjdWxhdGUga2V5X3JlcXVpcmVkIGFjY3VyYXRlbHkuICBC dXQgaGVhcF9kZWxldGUganVzdCBwYXNzZXMKIAkgKiBjb25zdGFudCB0cnVlIGZvciBrZXlf cmVxdWlyZWQsIHNvIHdlIGNhbiBoaXQgdGhpcyBjYXNlIGluIGRlbGV0ZXMuKQogCSAqLwot CWlmIChibXNfaXNfZW1wdHkoaWRhdHRycykpCisJaWYgKGJtc19pc19lbXB0eShyaWRfYXR0 cnMpKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qCkBAIC05Mjc3LDcgKzkyNjUsNyBAQCBFeHRy YWN0UmVwbGljYUlkZW50aXR5KFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGUgdHAsIGJv b2wga2V5X3JlcXVpcmVkLAogCWZvciAoaW50IGkgPSAwOyBpIDwgZGVzYy0+bmF0dHM7IGkr KykKIAl7CiAJCWlmIChibXNfaXNfbWVtYmVyKGkgKyAxIC0gRmlyc3RMb3dJbnZhbGlkSGVh cEF0dHJpYnV0ZU51bWJlciwKLQkJCQkJCSAgaWRhdHRycykpCisJCQkJCQkgIHJpZF9hdHRy cykpCiAJCQlBc3NlcnQoIW51bGxzW2ldKTsKIAkJZWxzZQogCQkJbnVsbHNbaV0gPSB0cnVl OwpAQCAtOTI4Niw4ICs5Mjc0LDYgQEAgRXh0cmFjdFJlcGxpY2FJZGVudGl0eShSZWxhdGlv biByZWxhdGlvbiwgSGVhcFR1cGxlIHRwLCBib29sIGtleV9yZXF1aXJlZCwKIAlrZXlfdHVw bGUgPSBoZWFwX2Zvcm1fdHVwbGUoZGVzYywgdmFsdWVzLCBudWxscyk7CiAJKmNvcHkgPSB0 cnVlOwogCi0JYm1zX2ZyZWUoaWRhdHRycyk7Ci0KIAkvKgogCSAqIElmIHRoZSB0dXBsZSwg d2hpY2ggYnkgaGVyZSBvbmx5IGNvbnRhaW5zIGluZGV4ZWQgY29sdW1ucywgc3RpbGwgaGFz CiAJICogdG9hc3RlZCBjb2x1bW5zLCBmb3JjZSB0aGVtIHRvIGJlIGlubGluZWQuIFRoaXMg aXMgc29tZXdoYXQgdW5saWtlbHkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1f aGFuZGxlci5jCmluZGV4IGNiZWY3M2U1ZDRiLi41NGMwMjFmZjIwOSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC00NCw2ICs0NCw3IEBACiAj aW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NtZ3Iu aCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2luamVj dGlvbl9wb2ludC5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiBzdGF0aWMgdm9pZCBy ZWZvcm1fYW5kX3Jld3JpdGVfdHVwbGUoSGVhcFR1cGxlIHR1cGxlLApAQCAtMzEyLDIzICsz MTMsMTMzIEBAIGhlYXBhbV90dXBsZV9kZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Q b2ludGVyIHRpZCwgQ29tbWFuZElkIGNpZCwKIAlyZXR1cm4gaGVhcF9kZWxldGUocmVsYXRp b24sIHRpZCwgY2lkLCBjcm9zc2NoZWNrLCB3YWl0LCB0bWZkLCBjaGFuZ2luZ1BhcnQpOwog fQogCi0KIHN0YXRpYyBUTV9SZXN1bHQKIGhlYXBhbV90dXBsZV91cGRhdGUoUmVsYXRpb24g cmVsYXRpb24sIEl0ZW1Qb2ludGVyIG90aWQsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJ CQlDb21tYW5kSWQgY2lkLCBTbmFwc2hvdCBzbmFwc2hvdCwgU25hcHNob3QgY3Jvc3NjaGVj aywKIAkJCQkJYm9vbCB3YWl0LCBUTV9GYWlsdXJlRGF0YSAqdG1mZCwKIAkJCQkJTG9ja1R1 cGxlTW9kZSAqbG9ja21vZGUsIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQog eworCWJvb2wJCXJlcF9pZF9rZXlfcmVxdWlyZWQgPSBmYWxzZTsKIAlib29sCQlzaG91bGRG cmVlID0gdHJ1ZTsKIAlIZWFwVHVwbGUJdHVwbGUgPSBFeGVjRmV0Y2hTbG90SGVhcFR1cGxl KHNsb3QsIHRydWUsICZzaG91bGRGcmVlKTsKKwlIZWFwVHVwbGVEYXRhIG9sZHR1cDsKKwlC dWZmZXIJCWJ1ZmZlcjsKKwlCdWZmZXIJCXZtYnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKKwlQ YWdlCQlwYWdlOworCUJsb2NrTnVtYmVyIGJsb2NrOworCUl0ZW1JZAkJbHA7CisJQml0bWFw c2V0ICAqaG90X2F0dHJzLAorCQkJICAgKnN1bV9hdHRycywKKwkJCSAgICpwa19hdHRycywK KwkJCSAgICpyaWRfYXR0cnMsCisJCQkgICAqbWl4X2F0dHJzLAorCQkJICAgKmlkeF9hdHRy czsKIAlUTV9SZXN1bHQJcmVzdWx0OwogCisJQXNzZXJ0KEl0ZW1Qb2ludGVySXNWYWxpZChv dGlkKSk7CisKKwkvKiBDaGVhcCwgc2ltcGxpc3RpYyBjaGVjayB0aGF0IHRoZSB0dXBsZSBt YXRjaGVzIHRoZSByZWwncyByb3d0eXBlLiAqLworCUFzc2VydChIZWFwVHVwbGVIZWFkZXJH ZXROYXR0cyh0dXBsZS0+dF9kYXRhKSA8PQorCQkgICBSZWxhdGlvbkdldE51bWJlck9mQXR0 cmlidXRlcyhyZWxhdGlvbikpOworCisJLyoKKwkgKiBGb3JiaWQgdGhpcyBkdXJpbmcgYSBw YXJhbGxlbCBvcGVyYXRpb24sIGxlc3QgaXQgYWxsb2NhdGUgYSBjb21ibyBDSUQuCisJICog T3RoZXIgd29ya2VycyBtaWdodCBuZWVkIHRoYXQgY29tYm8gQ0lEIGZvciB2aXNpYmlsaXR5 IGNoZWNrcywgYW5kIHdlCisJICogaGF2ZSBubyBwcm92aXNpb24gZm9yIGJyb2FkY2FzdGlu ZyBpdCB0byB0aGVtLgorCSAqLworCWlmIChJc0luUGFyYWxsZWxNb2RlKCkpCisJCWVyZXBv cnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RSQU5TQUNUSU9OX1NU QVRFKSwKKwkJCQkgZXJybXNnKCJjYW5ub3QgdXBkYXRlIHR1cGxlcyBkdXJpbmcgYSBwYXJh bGxlbCBvcGVyYXRpb24iKSkpOworCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCWNo ZWNrX2xvY2tfaWZfaW5wbGFjZV91cGRhdGVhYmxlX3JlbChyZWxhdGlvbiwgb3RpZCwgdHVw bGUpOworI2VuZGlmCisKKwkvKgorCSAqIEZldGNoIHRoZSBsaXN0IG9mIGF0dHJpYnV0ZXMg dG8gYmUgY2hlY2tlZCBmb3IgdmFyaW91cyBvcGVyYXRpb25zLgorCSAqCisJICogRm9yIEhP VCBjb25zaWRlcmF0aW9ucywgdGhpcyBpcyB3YXN0ZWQgZWZmb3J0IGlmIHdlIGZhaWwgdG8g dXBkYXRlIG9yCisJICogaGF2ZSB0byBwdXQgdGhlIG5ldyB0dXBsZSBvbiBhIGRpZmZlcmVu dCBwYWdlLiAgQnV0IHdlIG11c3QgY29tcHV0ZSB0aGUKKwkgKiBsaXN0IGJlZm9yZSBvYnRh aW5pbmcgYnVmZmVyIGxvY2sgLS0tIGluIHRoZSB3b3JzdCBjYXNlLCBpZiB3ZSBhcmUKKwkg KiBkb2luZyBhbiB1cGRhdGUgb24gb25lIG9mIHRoZSByZWxldmFudCBzeXN0ZW0gY2F0YWxv Z3MsIHdlIGNvdWxkCisJICogZGVhZGxvY2sgaWYgd2UgdHJ5IHRvIGZldGNoIHRoZSBsaXN0 IGxhdGVyLiAgSW4gYW55IGNhc2UsIHRoZSByZWxjYWNoZQorCSAqIGNhY2hlcyB0aGUgZGF0 YSBzbyB0aGlzIGlzIHVzdWFsbHkgcHJldHR5IGNoZWFwLgorCSAqCisJICogV2UgYWxzbyBu ZWVkIGNvbHVtbnMgdXNlZCBieSB0aGUgcmVwbGljYSBpZGVudGl0eSBhbmQgY29sdW1ucyB0 aGF0IGFyZQorCSAqIGNvbnNpZGVyZWQgdGhlICJrZXkiIG9mIHJvd3MgaW4gdGhlIHRhYmxl LgorCSAqCisJICogTm90ZSB0aGF0IHdlIGdldCBjb3BpZXMgb2YgZWFjaCBiaXRtYXAsIHNv IHdlIG5lZWQgbm90IHdvcnJ5IGFib3V0CisJICogcmVsY2FjaGUgZmx1c2ggaGFwcGVuaW5n IG1pZHdheSB0aHJvdWdoLgorCSAqLworCWhvdF9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhB dHRyQml0bWFwKHJlbGF0aW9uLAorCQkJCQkJCQkJCSAgIElOREVYX0FUVFJfQklUTUFQX0hP VF9CTE9DS0lORyk7CisJc3VtX2F0dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAo cmVsYXRpb24sCisJCQkJCQkJCQkJICAgSU5ERVhfQVRUUl9CSVRNQVBfU1VNTUFSSVpFRCk7 CisJcGtfYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChyZWxhdGlvbiwgSU5E RVhfQVRUUl9CSVRNQVBfS0VZKTsKKwlyaWRfYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0 ckJpdG1hcChyZWxhdGlvbiwKKwkJCQkJCQkJCQkgICBJTkRFWF9BVFRSX0JJVE1BUF9JREVO VElUWV9LRVkpOworCisJaWR4X2F0dHJzID0gYm1zX2NvcHkoaG90X2F0dHJzKTsKKwlpZHhf YXR0cnMgPSBibXNfYWRkX21lbWJlcnMoaWR4X2F0dHJzLCBzdW1fYXR0cnMpOworCWlkeF9h dHRycyA9IGJtc19hZGRfbWVtYmVycyhpZHhfYXR0cnMsIHBrX2F0dHJzKTsKKwlpZHhfYXR0 cnMgPSBibXNfYWRkX21lbWJlcnMoaWR4X2F0dHJzLCByaWRfYXR0cnMpOworCisJYmxvY2sg PSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKG90aWQpOworCUlOSkVDVElPTl9QT0lOVCgi aGVhcF91cGRhdGUtYmVmb3JlLXBpbiIsIE5VTEwpOworCWJ1ZmZlciA9IFJlYWRCdWZmZXIo cmVsYXRpb24sIGJsb2NrKTsKKwlwYWdlID0gQnVmZmVyR2V0UGFnZShidWZmZXIpOworCisJ LyoKKwkgKiBCZWZvcmUgbG9ja2luZyB0aGUgYnVmZmVyLCBwaW4gdGhlIHZpc2liaWxpdHkg bWFwIHBhZ2UgaWYgaXQgYXBwZWFycyB0bworCSAqIGJlIG5lY2Vzc2FyeS4gIFNpbmNlIHdl IGhhdmVuJ3QgZ290IHRoZSBsb2NrIHlldCwgc29tZW9uZSBlbHNlIG1pZ2h0IGJlCisJICog aW4gdGhlIG1pZGRsZSBvZiBjaGFuZ2luZyB0aGlzLCBzbyB3ZSdsbCBuZWVkIHRvIHJlY2hl Y2sgYWZ0ZXIgd2UgaGF2ZQorCSAqIHRoZSBsb2NrLgorCSAqLworCWlmIChQYWdlSXNBbGxW aXNpYmxlKHBhZ2UpKQorCQl2aXNpYmlsaXR5bWFwX3BpbihyZWxhdGlvbiwgYmxvY2ssICZ2 bWJ1ZmZlcik7CisKKwlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZF KTsKKworCWxwID0gUGFnZUdldEl0ZW1JZChwYWdlLCBJdGVtUG9pbnRlckdldE9mZnNldE51 bWJlcihvdGlkKSk7CisKKwlBc3NlcnQoSXRlbUlkSXNOb3JtYWwobHApKTsKKworCS8qCisJ ICogUGFydGlhbGx5IGNvbnN0cnVjdCB0aGUgb2xkdHVwIGZvciBIZWFwRGV0ZXJtaW5lQ29s dW1uc0luZm8gdG8gd29yayBhbmQKKwkgKiB0aGVuIHBhc3MgdGhhdCBvbiB0byBoZWFwX3Vw ZGF0ZS4KKwkgKi8KKwlvbGR0dXAudF90YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVs YXRpb24pOworCW9sZHR1cC50X2RhdGEgPSAoSGVhcFR1cGxlSGVhZGVyKSBQYWdlR2V0SXRl bShwYWdlLCBscCk7CisJb2xkdHVwLnRfbGVuID0gSXRlbUlkR2V0TGVuZ3RoKGxwKTsKKwlv bGR0dXAudF9zZWxmID0gKm90aWQ7CisKKwltaXhfYXR0cnMgPSBIZWFwRGV0ZXJtaW5lQ29s dW1uc0luZm8ocmVsYXRpb24sIGlkeF9hdHRycywgcmlkX2F0dHJzLAorCQkJCQkJCQkJCSAm b2xkdHVwLCB0dXBsZSwgJnJlcF9pZF9rZXlfcmVxdWlyZWQpOworCisJLyoKKwkgKiBXZSds bCBuZWVkIHRvIFdBTCBsb2cgdGhlIHJlcGxpY2EgaWRlbnRpdHkgYXR0cmlidXRlcyBpZiBl aXRoZXIgdGhleQorCSAqIG92ZXJsYXAgd2l0aCB0aGUgbW9kaWZpZWQgaW5kZXhlZCBhdHRy aWJ1dGVzIG9yLCBhcyB3ZSd2ZSBjaGVja2VkIGZvcgorCSAqIGp1c3Qgbm93IGluIEhlYXBE ZXRlcm1pbmVDb2x1bW5zSW5mbywgdGhleSB3ZXJlIHVubW9kaWZpZWQgZXh0ZXJuYWwKKwkg KiBpbmRleGVkIGF0dHJpYnV0ZXMuCisJICovCisJcmVwX2lkX2tleV9yZXF1aXJlZCA9IHJl cF9pZF9rZXlfcmVxdWlyZWQgfHwgYm1zX292ZXJsYXAobWl4X2F0dHJzLCByaWRfYXR0cnMp OworCiAJLyogVXBkYXRlIHRoZSB0dXBsZSB3aXRoIHRhYmxlIG9pZCAqLwogCXNsb3QtPnR0 c190YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOwogCXR1cGxlLT50X3Rh YmxlT2lkID0gc2xvdC0+dHRzX3RhYmxlT2lkOwogCi0JcmVzdWx0ID0gaGVhcF91cGRhdGUo cmVsYXRpb24sIG90aWQsIHR1cGxlLCBjaWQsIGNyb3NzY2hlY2ssIHdhaXQsCi0JCQkJCQkg dG1mZCwgbG9ja21vZGUsIHVwZGF0ZV9pbmRleGVzKTsKKwlyZXN1bHQgPSBoZWFwX3VwZGF0 ZShyZWxhdGlvbiwgJm9sZHR1cCwgdHVwbGUsIGNpZCwgY3Jvc3NjaGVjaywgd2FpdCwgdG1m ZCwgbG9ja21vZGUsCisJCQkJCQkgYnVmZmVyLCBwYWdlLCBibG9jaywgbHAsIGhvdF9hdHRy cywgc3VtX2F0dHJzLCBwa19hdHRycywKKwkJCQkJCSByaWRfYXR0cnMsIG1peF9hdHRycywg JnZtYnVmZmVyLCByZXBfaWRfa2V5X3JlcXVpcmVkLCB1cGRhdGVfaW5kZXhlcyk7CisKKwli bXNfZnJlZShob3RfYXR0cnMpOworCWJtc19mcmVlKHN1bV9hdHRycyk7CisJYm1zX2ZyZWUo cGtfYXR0cnMpOworCWJtc19mcmVlKHJpZF9hdHRycyk7CisJYm1zX2ZyZWUobWl4X2F0dHJz KTsKKwlibXNfZnJlZShpZHhfYXR0cnMpOworCiAJSXRlbVBvaW50ZXJDb3B5KCZ0dXBsZS0+ dF9zZWxmLCAmc2xvdC0+dHRzX3RpZCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4 IDNjMDk2MWFiMzZiLi4zOGY5NDQ3NzFkYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNj ZXNzL2hlYXBhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMzY0 LDExICszNjQsMTMgQEAgZXh0ZXJuIFRNX1Jlc3VsdCBoZWFwX2RlbGV0ZShSZWxhdGlvbiBy ZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICp0aWQsCiAJCQkJCQkJIFRNX0ZhaWx1 cmVEYXRhICp0bWZkLCBib29sIGNoYW5naW5nUGFydCk7CiBleHRlcm4gdm9pZCBoZWFwX2Zp bmlzaF9zcGVjdWxhdGl2ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJE YXRhICp0aWQpOwogZXh0ZXJuIHZvaWQgaGVhcF9hYm9ydF9zcGVjdWxhdGl2ZShSZWxhdGlv biByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICp0aWQpOwotZXh0ZXJuIFRNX1Jl c3VsdCBoZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJE YXRhICpvdGlkLAotCQkJCQkJCSBIZWFwVHVwbGUgbmV3dHVwLAotCQkJCQkJCSBDb21tYW5k SWQgY2lkLCBTbmFwc2hvdCBjcm9zc2NoZWNrLCBib29sIHdhaXQsCi0JCQkJCQkJIFRNX0Zh aWx1cmVEYXRhICp0bWZkLCBMb2NrVHVwbGVNb2RlICpsb2NrbW9kZSwKLQkJCQkJCQkgVFVf VXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpOworZXh0ZXJuIFRNX1Jlc3VsdCBoZWFw X3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlRGF0YSAqb2xkdHVwLAorCQkJ CQkJCSBIZWFwVHVwbGUgbmV3dHVwLCBDb21tYW5kSWQgY2lkLCBTbmFwc2hvdCBjcm9zc2No ZWNrLCBib29sIHdhaXQsCisJCQkJCQkJIFRNX0ZhaWx1cmVEYXRhICp0bWZkLCBMb2NrVHVw bGVNb2RlICpsb2NrbW9kZSwgQnVmZmVyIGJ1ZmZlciwKKwkJCQkJCQkgUGFnZSBwYWdlLCBC bG9ja051bWJlciBibG9jaywgSXRlbUlkIGxwLCBCaXRtYXBzZXQgKmhvdF9hdHRycywKKwkJ CQkJCQkgQml0bWFwc2V0ICpzdW1fYXR0cnMsIEJpdG1hcHNldCAqcGtfYXR0cnMsIEJpdG1h cHNldCAqcmlkX2F0dHJzLAorCQkJCQkJCSBCaXRtYXBzZXQgKm1peF9hdHRycywgQnVmZmVy ICp2bWJ1ZmZlciwKKwkJCQkJCQkgYm9vbCByZXBfaWRfa2V5X3JlcXVpcmVkLCBUVV9VcGRh dGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcyk7CiBleHRlcm4gVE1fUmVzdWx0IGhlYXBfbG9j a190dXBsZShSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHR1cGxlLAogCQkJCQkJCQkg Q29tbWFuZElkIGNpZCwgTG9ja1R1cGxlTW9kZSBtb2RlLCBMb2NrV2FpdFBvbGljeSB3YWl0 X3BvbGljeSwKIAkJCQkJCQkJIGJvb2wgZm9sbG93X3VwZGF0ZXMsCkBAIC00MzAsNiArNDMy LDE4IEBAIGV4dGVybiB2b2lkIGxvZ19oZWFwX3BydW5lX2FuZF9mcmVlemUoUmVsYXRpb24g cmVsYXRpb24sIEJ1ZmZlciBidWZmZXIsCiAJCQkJCQkJCQkgIE9mZnNldE51bWJlciAqZGVh ZCwgaW50IG5kZWFkLAogCQkJCQkJCQkJICBPZmZzZXROdW1iZXIgKnVudXNlZCwgaW50IG51 bnVzZWQpOwogCisvKiBpbiBoZWFwL2hlYXBhbS5jICovCitleHRlcm4gQml0bWFwc2V0ICpI ZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8oUmVsYXRpb24gcmVsYXRpb24sCisJCQkJCQkJCQkJ ICAgQml0bWFwc2V0ICppbnRlcmVzdGluZ19jb2xzLAorCQkJCQkJCQkJCSAgIEJpdG1hcHNl dCAqZXh0ZXJuYWxfY29scywKKwkJCQkJCQkJCQkgICBIZWFwVHVwbGUgb2xkdHVwLCBIZWFw VHVwbGUgbmV3dHVwLAorCQkJCQkJCQkJCSAgIGJvb2wgKmhhc19leHRlcm5hbCk7CisjaWZk ZWYgVVNFX0FTU0VSVF9DSEVDS0lORworZXh0ZXJuIHZvaWQgY2hlY2tfbG9ja19pZl9pbnBs YWNlX3VwZGF0ZWFibGVfcmVsKFJlbGF0aW9uIHJlbGF0aW9uLAorCQkJCQkJCQkJCQkJIGNv bnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwKKwkJCQkJCQkJCQkJCSBIZWFwVHVwbGUgbmV3 dHVwKTsKKyNlbmRpZgorCiAvKiBpbiBoZWFwL3ZhY3V1bWxhenkuYyAqLwogZXh0ZXJuIHZv aWQgaGVhcF92YWN1dW1fcmVsKFJlbGF0aW9uIHJlbCwKIAkJCQkJCQljb25zdCBWYWN1dW1Q YXJhbXMgcGFyYW1zLCBCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kpOwotLSAKMi41 MS4yCgo= --f70e65a2f25740fea16fe12777451009 Content-Disposition: attachment; filename*0="v29-0002-Track-changed-indexed-columns-in-the-executor-du.pat"; filename*1="ch" Content-Type: text/x-patch; name="=?UTF-8?Q?v29-0002-Track-changed-indexed-columns-in-the-executor-du.patc?= =?UTF-8?Q?h?=" Content-Transfer-Encoding: base64 RnJvbSAzYzQ4MGFhYjg1ODZhMTczZmYwMWRhMGRjNmE3NGFhZWMxNTk5MzVmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTog U3VuLCAyNiBPY3QgMjAyNSAxMDo0OToyNSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjI5IDIv NF0gVHJhY2sgY2hhbmdlZCBpbmRleGVkIGNvbHVtbnMgaW4gdGhlIGV4ZWN1dG9yIGR1cmlu ZwogVVBEQVRFcwoKUmVmYWN0b3IgZXhlY3V0b3IgdXBkYXRlIGxvZ2ljIHRvIGRldGVybWlu ZSB3aGljaCBpbmRleGVkIGNvbHVtbnMgaGF2ZQphY3R1YWxseSBjaGFuZ2VkIGR1cmluZyBh biBVUERBVEUgb3BlcmF0aW9uIHJhdGhlciB0aGFuIGxlYXZpbmcgdGhpcyB1cAp0byBIZWFw RGV0ZXJtaW5lQ29sdW1uc0luZm8oKSBpbiBoZWFwX3VwZGF0ZSgpLgoKRXhlY1doaWNoSW5k ZXhlc1JlcXVpcmVVcGRhdGVzKCkgcmVwbGFjZXMgSGVhcERldGVybWluZXNDb2x1bW5zSW5m bygpCndoZW4gaW52b2tlZCBmcm9tIHRoZSB0YWJsZSBBTSBBUEkgdmlhIGhlYXBhbV90dXBs ZV91cGRhdGUoKS4gVGhlCnRlc3QgZm9yIGVxdWFsaXR5IHJlbWFpbnMgZGF0dW1Jc0VxdWFs KCkgYXMgYmVmb3JlLgoKVGhpcyBjaGFuZ2UgbmVjZXNzaXRhdGVkIHNvbWUgbG9naWMgY2hh bmdlcyBpbiBleGVjUmVwbGljYXRpb24oKSBhcyBpdApwZXJmb3JtcyB1cGRhdGVzIG5vdyBt dXN0IHByb3ZpZGUgdGhlIHNldCBvZiBhdHRyaWJ1dGVzIHRoYXQgYXJlIGJvdGgKY2hhbmdl ZCBhbmQgcmVmZXJlbmNlZCBieSBpbmRleGVzLiAgTHVja2lsbHksIHRoaXMgaXMgYXZhaWxh YmxlIHdpdGhpbgpjYWxscyB0byBzbG90X21vZGlmeV9kYXRhKCkgd2hlcmUgTG9naWNhbFJl cFR1cGxlRGF0YSBpcyBwcm9jZXNzZWQgYW5kCmhhcyBhIHJlY29yZCBvZiB1cGRhdGVkIGF0 dHJpYnV0ZXMuICBJbiB0aGlzIGNhc2UgcmF0aGVyIHRoYW4gdXNpbmcKRXhlY1doaWNoSW5k ZXhlc1JlcXVpcmVVcGRhdGVzKCkgd2UgY2FuIHByZXNldmUgd2hhdCBzbG90X21vZGlmeV9k YXRhKCkKaWRlbnRpZmllcyBhcyB0aGUgbW9kaWZpZWQgc2V0IGFuZCB0aGVuIGludGVyc2Vj dCB0aGF0IHdpdGggdGhlIHNldCBvZgppbmRleGVzIG9uIHRoZSByZWxhdGlvbiBhbmQgZ2V0 IHRoZSBjb3JyZWN0IHNldCBvZiBtb2RpZmllZCBpbmRleGVkCmF0dHJpYnV0ZXMgcmVxdWly ZWQgb24gaGVhcF91cGRhdGUoKS4KClRoaXMgY29tbWl0IGFsc28gZXh0ZW5kcyB0aGUgcm9s ZSBpbmRleCBBTXMgcGxheSBkZXRlcm1pbmluZyBpZiB0aGV5CnJlcXVpcmUgYW4gdXBkYXRl LiBBIG5ldyBvcHRpb25hbCBpbmRleCBBTSBBUEksIGFtY29tcGFyZWRhdHVtcygpLCBpcwph ZGRlZCB0byBhbGxvdyBpbmRleCBhY2Nlc3MgbWV0aG9kcyB0byBwcm92aWRlIGN1c3RvbSBs b2dpYyBmb3IKY29tcGFyaW5nIGRhdHVtcy4gSGFzaCBhbmQgR2luIGluZGV4ZXMgbm93IGlt cGxlbWVudCB0aGlzIGZ1bmN0aW9uLiBXaGVuCm5vdCBpbXBsZW1lbnRlZCB0aGUgZXhlY3V0 b3Igd2lsbCBjb21wYXJlIFR1cGxlVGFibGVTbG90IGRhdHVtIGZvcgplcXVhbGl0eSB1c2lu ZyBkYXR1bUlzRXF1YWwoKSBhcyBiZWZvcmUuCgpCZWNhdXNlIGhlYXBfdXBkYXRlKCkgbm93 IHJlcXVpcmVzIHRoZSBjYWxsZXIgdG8gcHJvdmlkZSB0aGUgbW9kaWZpZWQKaW5kZXhlZCBj b2x1bW5zIHNpbXBsZV9oZWFwX3VwZGF0ZSgpIGhhcyBiZWNvbWUgYSB0YWQgbW9yZSBjb21w bGV4LiAgSXQKaXMgb25seSBjYWxsZWQgZnJvbSBDYXRhbG9nVHVwbGVVcGRhdGUoKSB3aGlj aCBlaXRoZXIgdXBkYXRlcyBoZWFwCnR1cGxlcyB2aWEgdGhlaXIgRm9ybV9YWFggb3IgYnkg Y2FsbGluZyBoZWFwX21vZGlmeV90dXBsZSgpLiAgSW4gYm90aApjYXNlcyB0aGUgY2FsbGVy IGRvZXMga25vdyB0aGUgbW9kaWZpZWQgc2V0IG9mIGF0dHJpYnV0ZXMsIGJ1dCBzYWRseQp0 aG9zZSBhdHRyaWJ1dGVzIGFyZSBsb3N0IGJlZm9yZSBiZWluZyBwcm92aWRlZCB0byBzaW1w bGVfaGVhcF91cGRhdGUoKS4KRHVlIHRvIHRoYXQgdGhlICJzaW1wbGUiIHBhdGggaGFzIHRv IChmb3Igbm93KSByZXRhaW4gdGhlCkhlYXBEZXRlcm1pbmVDb2x1bW5zSW5mbygpIGxvZ2lj IGluIG9yZGVyIGZvciBjYXRhbG9nIHVwZGF0ZXMgdG8KcG90ZW50aWFsbHkgdGFrZSB0aGUg SE9UIHBhdGguCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jICAgICAgICAg ICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jICAgICAg ICAgICAgICB8ICA5MCArKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyAgICAg ICAgICAgICAgICB8ICA0NCArKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMg ICAgICAgICAgICAgIHwgIDIwICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1f aGFuZGxlci5jICAgICAgfCAgNzYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 cmVlLmMgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFi bGVhbS5jICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iYWNrZW5kL2Jvb3RzdHJhcC9ib290 c3RyYXAuYyAgICAgICAgICAgICB8ICAgOCArCiBzcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4 LmMgICAgICAgICAgICAgICAgICAgfCAgNTcgKysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvaW5k ZXhpbmcuYyAgICAgICAgICAgICAgICB8ICAxNiArLQogc3JjL2JhY2tlbmQvY2F0YWxvZy90 b2FzdGluZy5jICAgICAgICAgICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNJbmRleGluZy5jICAgICAgICAgICB8ICA0MSArLQogc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY01haW4uYyAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNSZXBsaWNhdGlvbi5jICAgICAgICB8ICAgNyArCiBzcmMvYmFja2VuZC9leGVj dXRvci9ub2RlTW9kaWZ5VGFibGUuYyAgICAgICAgfCAyODggKysrKysrKy0KIHNyYy9iYWNr ZW5kL25vZGVzL2JpdG1hcHNldC5jICAgICAgICAgICAgICAgICB8ICAgNCArCiBzcmMvYmFj a2VuZC9ub2Rlcy9tYWtlZnVuY3MuYyAgICAgICAgICAgICAgICAgfCAgIDQgKwogc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAgICAgIHwgIDcwICstCiBzcmMv YmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgICAgfCAgMTUgKwogc3Jj L2luY2x1ZGUvYWNjZXNzL2FtYXBpLmggICAgICAgICAgICAgICAgICAgIHwgIDI4ICsKIHNy Yy9pbmNsdWRlL2FjY2Vzcy9naW4uaCAgICAgICAgICAgICAgICAgICAgICB8ICAgMyArCiBz cmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgICAgICAgfCAgIDYgKy0K IHNyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCAgICAgICAgICAgICAgICAgICB8ICAgNCAr CiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAgICAgICAgfCAgIDgg Ky0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaCAgICAgICAgICAgICAgICAgICB8ICAg MSArCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oICAgICAgICAgICAgICAgfCAg IDkgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgICAgIHwg IDIwICsKIHNyYy9pbmNsdWRlL3V0aWxzL3JlbC5oICAgICAgICAgICAgICAgICAgICAgICB8 ICAgMSArCiBzcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5oICAgICAgICAgICAgICAgICAg fCAgIDEgKwogLi4uL2V4cGVjdGVkL2luc2VydC1jb25mbGljdC1zcGVjY29uZmxpY3Qub3V0 IHwgIDIwICsKIC4uLi9yZWdyZXNzL2V4cGVjdGVkL2hlYXBfaG90X3VwZGF0ZXMub3V0ICAg ICB8IDY1MCArKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxf c2NoZWR1bGUgICAgICAgICAgICB8ICAgNiArCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9oZWFw X2hvdF91cGRhdGVzLnNxbCAgICAgfCA1MTMgKysrKysrKysrKysrKysKIHNyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMSArCiAzNCBmaWxlcyBj aGFuZ2VkLCAxOTQ5IGluc2VydGlvbnMoKyksIDc0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaGVhcF9ob3RfdXBkYXRlcy5v dXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL3NxbC9oZWFwX2hvdF91 cGRhdGVzLnNxbAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4u YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwppbmRleCA2ODg3ZTQyMTQ0Mi4u YWE5ZmQxMTA4MDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4u YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKQEAgLTI5MCw2ICsyOTAs NyBAQCBicmluaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1wcm9wZXJ0eSA9IE5V TEwsCiAJCS5hbWJ1aWxkcGhhc2VuYW1lID0gTlVMTCwKIAkJLmFtdmFsaWRhdGUgPSBicmlu dmFsaWRhdGUsCisJCS5hbWNvbXBhcmVkYXR1bXMgPSBOVUxMLAogCQkuYW1hZGp1c3RtZW1i ZXJzID0gTlVMTCwKIAkJLmFtYmVnaW5zY2FuID0gYnJpbmJlZ2luc2NhbiwKIAkJLmFtcmVz Y2FuID0gYnJpbnJlc2NhbiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4v Z2ludXRpbC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKaW5kZXggZDIw NTA5M2UyMWQuLjc2NDViNGVlMGYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv Z2luL2dpbnV0aWwuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYwpA QCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvaW5kZXhmc20uaCIKICNpbmNs dWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2luZGV4X3NlbGZ1bmNz LmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwu aCIKICNpbmNsdWRlICJ1dGlscy90eXBjYWNoZS5oIgogCkBAIC03OCw2ICs3OSw3IEBAIGdp bmhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtcHJvcGVydHkgPSBOVUxMLAogCQku YW1idWlsZHBoYXNlbmFtZSA9IGdpbmJ1aWxkcGhhc2VuYW1lLAogCQkuYW12YWxpZGF0ZSA9 IGdpbnZhbGlkYXRlLAorCQkuYW1jb21wYXJlZGF0dW1zID0gZ2luY29tcGFyZWRhdHVtcywK IAkJLmFtYWRqdXN0bWVtYmVycyA9IGdpbmFkanVzdG1lbWJlcnMsCiAJCS5hbWJlZ2luc2Nh biA9IGdpbmJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gZ2lucmVzY2FuLApAQCAtNDQwLDEz ICs0NDIsNiBAQCBjbXBFbnRyaWVzKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIHZv aWQgKmFyZykKIAlyZXR1cm4gcmVzOwogfQogCi0KLS8qCi0gKiBFeHRyYWN0IHRoZSBpbmRl eCBrZXkgdmFsdWVzIGZyb20gYW4gaW5kZXhhYmxlIGl0ZW0KLSAqCi0gKiBUaGUgcmVzdWx0 aW5nIGtleSB2YWx1ZXMgYXJlIHNvcnRlZCwgYW5kIGFueSBkdXBsaWNhdGVzIGFyZSByZW1v dmVkLgotICogVGhpcyBhdm9pZHMgZ2VuZXJhdGluZyByZWR1bmRhbnQgaW5kZXggZW50cmll cy4KLSAqLwogRGF0dW0gKgogZ2luRXh0cmFjdEVudHJpZXMoR2luU3RhdGUgKmdpbnN0YXRl LCBPZmZzZXROdW1iZXIgYXR0bnVtLAogCQkJCSAgRGF0dW0gdmFsdWUsIGJvb2wgaXNOdWxs LApAQCAtNjkyLDMgKzY4Nyw4NCBAQCBnaW5idWlsZHBoYXNlbmFtZShpbnQ2NCBwaGFzZW51 bSkKIAkJCXJldHVybiBOVUxMOwogCX0KIH0KKworLyoKKyAqIGdpbmNvbXBhcmVkYXR1bXMg LSBDb21wYXJlIGRhdHVtcyB0byBkZXRlcm1pbmUgaWYgdGhleSBwcm9kdWNlIGlkZW50aWNh bCBrZXlzCisgKgorICogVGhpcyBmdW5jdGlvbiBleHRyYWN0cyBrZXlzIGZyb20gYm90aCBv bGRfZGF0dW0gYW5kIG5ld19kYXR1bSB1c2luZyB0aGUKKyAqIG9wY2xhc3MncyBleHRyYWN0 VmFsdWUgZnVuY3Rpb24sIHRoZW4gY29tcGFyZXMgdGhlIGV4dHJhY3RlZCBrZXkgYXJyYXlz LgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBrZXkgc2V0cyBhcmUgaWRlbnRpY2FsIChzYW1l IGtleXMsIHNhbWUgY291bnRzKS4KKyAqCisgKiBUaGlzIGVuYWJsZXMgSE9UIHVwZGF0ZXMg Zm9yIEdJTiBpbmRleGVzIHdoZW4gdGhlIGluZGV4ZWQgcG9ydGlvbnMgb2YgYQorICogdmFs dWUgaGF2ZW4ndCBjaGFuZ2VkLCBldmVuIGlmIHRoZSB2YWx1ZSBpdHNlbGYgaGFzIGNoYW5n ZWQuCisgKgorICogRXhhbXBsZTogSlNPTkIgY29sdW1uIHdpdGggR0lOIGluZGV4LiBJZiBh biB1cGRhdGUgY2hhbmdlcyBhIG5vbi1pbmRleGVkCisgKiBrZXkgaW4gdGhlIEpTT05CIGRv Y3VtZW50LCB0aGUgZXh0cmFjdGVkIGtleXMgYXJlIGlkZW50aWNhbCBhbmQgd2UgY2FuCisg KiBkbyBhIEhPVCB1cGRhdGUuCisgKi8KK2Jvb2wKK2dpbmNvbXBhcmVkYXR1bXMoUmVsYXRp b24gaW5kZXgsIGludCBhdHRudW0sCisJCQkJIERhdHVtIG9sZF9kYXR1bSwgYm9vbCBvbGRf aXNudWxsLAorCQkJCSBEYXR1bSBuZXdfZGF0dW0sIGJvb2wgbmV3X2lzbnVsbCkKK3sKKwlH aW5TdGF0ZQlnaW5zdGF0ZTsKKwlEYXR1bQkgICAqb2xkX2tleXM7CisJRGF0dW0JICAgKm5l d19rZXlzOworCUdpbk51bGxDYXRlZ29yeSAqb2xkX2NhdGVnb3JpZXM7CisJR2luTnVsbENh dGVnb3J5ICpuZXdfY2F0ZWdvcmllczsKKwlpbnQzMgkJb2xkX25rZXlzOworCWludDMyCQlu ZXdfbmtleXM7CisJTWVtb3J5Q29udGV4dCB0bXBjb250ZXh0OworCU1lbW9yeUNvbnRleHQg b2xkY29udGV4dDsKKwlib29sCQlyZXN1bHQgPSB0cnVlOworCisJLyogSGFuZGxlIE5VTEwg Y2FzZXMgKi8KKwlpZiAob2xkX2lzbnVsbCAhPSBuZXdfaXNudWxsKQorCQlyZXR1cm4gZmFs c2U7CisJaWYgKG9sZF9pc251bGwpCisJCXJldHVybiB0cnVlOworCisJLyogQ3JlYXRlIHRl bXBvcmFyeSBjb250ZXh0IGZvciBleHRyYWN0aW9uIHdvcmsgKi8KKwl0bXBjb250ZXh0ID0g QWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJ ICAgIkdJTiBkYXR1bSBjb21wYXJpc29uIiwKKwkJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFV TFRfU0laRVMpOworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY29u dGV4dCk7CisKKwlpbml0R2luU3RhdGUoJmdpbnN0YXRlLCBpbmRleCk7CisKKwkvKiBFeHRy YWN0IGtleXMgZnJvbSBib3RoIGRhdHVtcyB1c2luZyBleGlzdGluZyBHSU4gaW5mcmFzdHJ1 Y3R1cmUgKi8KKwlvbGRfa2V5cyA9IGdpbkV4dHJhY3RFbnRyaWVzKCZnaW5zdGF0ZSwgYXR0 bnVtLCBvbGRfZGF0dW0sIG9sZF9pc251bGwsCisJCQkJCQkJCSAmb2xkX25rZXlzLCAmb2xk X2NhdGVnb3JpZXMpOworCW5ld19rZXlzID0gZ2luRXh0cmFjdEVudHJpZXMoJmdpbnN0YXRl LCBhdHRudW0sIG5ld19kYXR1bSwgbmV3X2lzbnVsbCwKKwkJCQkJCQkJICZuZXdfbmtleXMs ICZuZXdfY2F0ZWdvcmllcyk7CisKKwkvKiBEaWZmZXJlbnQgbnVtYmVyIG9mIGtleXMsIGRl ZmluaXRlbHkgZGlmZmVyZW50ICovCisJaWYgKG9sZF9ua2V5cyAhPSBuZXdfbmtleXMpCisJ eworCQlyZXN1bHQgPSBmYWxzZTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCS8qCisJICog Q29tcGFyZSB0aGUgc29ydGVkIGtleSBhcnJheXMgZWxlbWVudC1ieS1lbGVtZW50LiBTaW5j ZSBib3RoIGFycmF5cyBhcmUKKwkgKiBhbHJlYWR5IHNvcnRlZCBieSBnaW5FeHRyYWN0RW50 cmllcywgd2UgY2FuIGRvIGEgc2ltcGxlIE8obikKKwkgKiBjb21wYXJpc29uLgorCSAqLwor CWZvciAoaW50IGkgPSAwOyBpIDwgb2xkX25rZXlzOyBpKyspCisJeworCQlpZiAoZ2luQ29t cGFyZUVudHJpZXMoJmdpbnN0YXRlLCBhdHRudW0sCisJCQkJCQkJICBvbGRfa2V5c1tpXSwg b2xkX2NhdGVnb3JpZXNbaV0sCisJCQkJCQkJICBuZXdfa2V5c1tpXSwgbmV3X2NhdGVnb3Jp ZXNbaV0pICE9IDApCisJCXsKKwkJCXJlc3VsdCA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0K Kwl9CisKK2NsZWFudXA6CisJLyogQ2xlYW4gdXAgKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY29udGV4dCk7CisJTWVtb3J5Q29udGV4dERlbGV0ZSh0bXBjb250ZXh0KTsKKwor CXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKaW5kZXggZTg4ZGRi MzJhMDUuLjQ5YTk5OTk4MDgzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCkBAIC01MCw2 ICs1MCwxMCBAQCBzdGF0aWMgdm9pZCBoYXNoYnVpbGRDYWxsYmFjayhSZWxhdGlvbiBpbmRl eCwKIAkJCQkJCQkgIHZvaWQgKnN0YXRlKTsKIAogCitzdGF0aWMgYm9vbCBoYXNoY29tcGFy ZWRhdHVtcyhSZWxhdGlvbiBpbmRleCwgaW50IGF0dG51bSwKKwkJCQkJCQkgIERhdHVtIG9s ZF9kYXR1bSwgYm9vbCBvbGRfaXNudWxsLAorCQkJCQkJCSAgRGF0dW0gbmV3X2RhdHVtLCBi b29sIG5ld19pc251bGwpOworCiAvKgogICogSGFzaCBoYW5kbGVyIGZ1bmN0aW9uOiByZXR1 cm4gSW5kZXhBbVJvdXRpbmUgd2l0aCBhY2Nlc3MgbWV0aG9kIHBhcmFtZXRlcnMKICAqIGFu ZCBjYWxsYmFja3MuCkBAIC05OCw2ICsxMDIsNyBAQCBoYXNoaGFuZGxlcihQR19GVU5DVElP Tl9BUkdTKQogCQkuYW1wcm9wZXJ0eSA9IE5VTEwsCiAJCS5hbWJ1aWxkcGhhc2VuYW1lID0g TlVMTCwKIAkJLmFtdmFsaWRhdGUgPSBoYXNodmFsaWRhdGUsCisJCS5hbWNvbXBhcmVkYXR1 bXMgPSBoYXNoY29tcGFyZWRhdHVtcywKIAkJLmFtYWRqdXN0bWVtYmVycyA9IGhhc2hhZGp1 c3RtZW1iZXJzLAogCQkuYW1iZWdpbnNjYW4gPSBoYXNoYmVnaW5zY2FuLAogCQkuYW1yZXNj YW4gPSBoYXNocmVzY2FuLApAQCAtOTQ0LDMgKzk0OSw0MiBAQCBoYXNodHJhbnNsYXRlY21w dHlwZShDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHkpCiAJCXJldHVybiBIVEVx dWFsU3RyYXRlZ3lOdW1iZXI7CiAJcmV0dXJuIEludmFsaWRTdHJhdGVneTsKIH0KKworLyoK KyAqIGhhc2hjb21wYXJlZGF0dW1zIC0gQ29tcGFyZSBkYXR1bXMgdG8gZGV0ZXJtaW5lIGlm IHRoZXkgcHJvZHVjZSBpZGVudGljYWwga2V5cworICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0 aGUgaGFzaCB2YWx1ZXMgYXJlIGlkZW50aWNhbCAoaW5kZXggZG9lc24ndCBuZWVkIHVwZGF0 ZSkuCisgKi8KK2Jvb2wKK2hhc2hjb21wYXJlZGF0dW1zKFJlbGF0aW9uIGluZGV4LCBpbnQg YXR0bnVtLAorCQkJCSAgRGF0dW0gb2xkX2RhdHVtLCBib29sIG9sZF9pc251bGwsCisJCQkJ ICBEYXR1bSBuZXdfZGF0dW0sIGJvb2wgbmV3X2lzbnVsbCkKK3sKKwl1aW50MzIJCW9sZF9o YXNoa2V5OworCXVpbnQzMgkJbmV3X2hhc2hrZXk7CisKKwkvKiBJZiBib3RoIGFyZSBOVUxM LCB0aGV5J3JlIGVxdWFsICovCisJaWYgKG9sZF9pc251bGwgJiYgbmV3X2lzbnVsbCkKKwkJ cmV0dXJuIHRydWU7CisKKwkvKiBJZiBOVUxMIHN0YXR1cyBkaWZmZXJzLCB0aGV5J3JlIG5v dCBlcXVhbCAqLworCWlmIChvbGRfaXNudWxsICE9IG5ld19pc251bGwpCisJCXJldHVybiBm YWxzZTsKKworCS8qCisJICogX2hhc2hfZGF0dW0yaGFzaGtleSgpIGlzIHVzZWQgYmVjYXVz ZSB3ZSBrbm93IHRoaXMgY2FuJ3QgYmUgYSBjcm9zcworCSAqIHR5cGUgY29tcGFyaXNvbi4K KwkgKi8KKwlvbGRfaGFzaGtleSA9IF9oYXNoX2RhdHVtMmhhc2hrZXkoaW5kZXgsIG9sZF9k YXR1bSk7CisJbmV3X2hhc2hrZXkgPSBfaGFzaF9kYXR1bTJoYXNoa2V5KGluZGV4LCBuZXdf ZGF0dW0pOworCisJLyoKKwkgKiBJZiBoYXNoIGtleXMgYXJlIGlkZW50aWNhbCwgdGhlIGlu ZGV4IGVudHJ5IHdvdWxkIGJlIHRoZSBzYW1lLiBSZXR1cm4KKwkgKiB0cnVlIHRvIGluZGlj YXRlIG5vIGluZGV4IHVwZGF0ZSBuZWVkZWQuCisJICoKKwkgKiBOb3RlOiBIYXNoIGNvbGxp c2lvbnMgYXJlIHJhcmUgYnV0IHBvc3NpYmxlLiBJZiBoYXNoKHgpID09IGhhc2goeSkgYnV0 CisJICogeCAhPSB5LCB0aGUgaGFzaCBpbmRleCBzdGlsbCB0cmVhdHMgdGhlbSBpZGVudGlj YWxseSwgc28gd2UgY29ycmVjdGx5CisJICogcmV0dXJuIHRydWUuCisJICovCisJcmV0dXJu IChvbGRfaGFzaGtleSA9PSBuZXdfaGFzaGtleSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbS5jCmluZGV4IDczYzFkM2QyY2I4Li5mYzllNDY1M2RlOSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtLmMKQEAgLTMzMTYsMTIgKzMzMTYsMTIgQEAgc2ltcGxlX2hlYXBfZGVs ZXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKnRpZCkKICAq IGdlbmVyYXRlZCBieSBhbm90aGVyIHRyYW5zYWN0aW9uKS4KICAqLwogVE1fUmVzdWx0Ci1o ZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlRGF0YSAqb2xkdHVwLAot CQkJSGVhcFR1cGxlIG5ld3R1cCwgQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVj aywgYm9vbCB3YWl0LAotCQkJVE1fRmFpbHVyZURhdGEgKnRtZmQsIExvY2tUdXBsZU1vZGUg KmxvY2ttb2RlLCBCdWZmZXIgYnVmZmVyLAotCQkJUGFnZSBwYWdlLCBCbG9ja051bWJlciBi bG9jaywgSXRlbUlkIGxwLCBCaXRtYXBzZXQgKmhvdF9hdHRycywKLQkJCUJpdG1hcHNldCAq c3VtX2F0dHJzLCBCaXRtYXBzZXQgKnBrX2F0dHJzLCBCaXRtYXBzZXQgKnJpZF9hdHRycywK LQkJCUJpdG1hcHNldCAqbWl4X2F0dHJzLCBCdWZmZXIgKnZtYnVmZmVyLAoraGVhcF91cGRh dGUoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZURhdGEgKm9sZHR1cCwgSGVhcFR1cGxl IG5ld3R1cCwKKwkJCUNvbW1hbmRJZCBjaWQsIFNuYXBzaG90IGNyb3NzY2hlY2ssIGJvb2wg d2FpdCwKKwkJCVRNX0ZhaWx1cmVEYXRhICp0bWZkLCBMb2NrVHVwbGVNb2RlICpsb2NrbW9k ZSwKKwkJCUJ1ZmZlciBidWZmZXIsIFBhZ2UgcGFnZSwgQmxvY2tOdW1iZXIgYmxvY2ssIEl0 ZW1JZCBscCwKKwkJCUJpdG1hcHNldCAqaG90X2F0dHJzLCBCaXRtYXBzZXQgKnN1bV9hdHRy cywgQml0bWFwc2V0ICpwa19hdHRycywKKwkJCUJpdG1hcHNldCAqcmlkX2F0dHJzLCBjb25z dCBCaXRtYXBzZXQgKm1peF9hdHRycywgQnVmZmVyICp2bWJ1ZmZlciwKIAkJCWJvb2wgcmVw X2lkX2tleV9yZXF1aXJlZCwgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpCiB7 CiAJVE1fUmVzdWx0CXJlc3VsdDsKQEAgLTQzOTAsOCArNDM5MCw5IEBAIEhlYXBEZXRlcm1p bmVDb2x1bW5zSW5mbyhSZWxhdGlvbiByZWxhdGlvbiwKICAqIFRoaXMgcm91dGluZSBtYXkg YmUgdXNlZCB0byB1cGRhdGUgYSB0dXBsZSB3aGVuIGNvbmN1cnJlbnQgdXBkYXRlcyBvZiB0 aGUKICAqIHRhcmdldCB0dXBsZSBhcmUgbm90IGV4cGVjdGVkIChmb3IgZXhhbXBsZSwgYmVj YXVzZSB3ZSBoYXZlIGEgbG9jayBvbiB0aGUKICAqIHJlbGF0aW9uIGFzc29jaWF0ZWQgd2l0 aCB0aGUgdHVwbGUpLiAgQW55IGZhaWx1cmUgaXMgcmVwb3J0ZWQgdmlhIGVyZXBvcnQoKS4K KyAqIFJldHVybnMgdGhlIHNldCBvZiBtb2RpZmllZCBpbmRleGVkIGF0dHJpYnV0ZXMuCiAg Ki8KLXZvaWQKK0JpdG1hcHNldCAqCiBzaW1wbGVfaGVhcF91cGRhdGUoUmVsYXRpb24gcmVs YXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIHR1cGxlLAog CQkJCSAgIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQogewpAQCAtNDUyMCw3 ICs0NTIxLDcgQEAgc2ltcGxlX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25z dCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBsZSB0dXAKIAogCQllbG9nKEVSUk9S LCAidHVwbGUgY29uY3VycmVudGx5IGRlbGV0ZWQiKTsKIAotCQlyZXR1cm47CisJCXJldHVy biBOVUxMOwogCX0KIAogCS8qCkBAIC00NTUzLDcgKzQ1NTQsNiBAQCBzaW1wbGVfaGVhcF91 cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwg SGVhcFR1cGxlIHR1cAogCWJtc19mcmVlKHN1bV9hdHRycyk7CiAJYm1zX2ZyZWUocGtfYXR0 cnMpOwogCWJtc19mcmVlKHJpZF9hdHRycyk7Ci0JYm1zX2ZyZWUobWl4X2F0dHJzKTsKIAli bXNfZnJlZShpZHhfYXR0cnMpOwogCiAJc3dpdGNoIChyZXN1bHQpCkBAIC00NTc5LDYgKzQ1 NzksOCBAQCBzaW1wbGVfaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0 ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIHR1cAogCQkJZWxvZyhFUlJPUiwgInVu cmVjb2duaXplZCBoZWFwX3VwZGF0ZSBzdGF0dXM6ICV1IiwgcmVzdWx0KTsKIAkJCWJyZWFr OwogCX0KKworCXJldHVybiBtaXhfYXR0cnM7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggNTRjMDIxZmYyMDkuLmZmMDMxOWM0ODUw IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTMx NSw5ICszMTUsMTIgQEAgaGVhcGFtX3R1cGxlX2RlbGV0ZShSZWxhdGlvbiByZWxhdGlvbiwg SXRlbVBvaW50ZXIgdGlkLCBDb21tYW5kSWQgY2lkLAogCiBzdGF0aWMgVE1fUmVzdWx0CiBo ZWFwYW1fdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciBvdGlk LCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKLQkJCQkJQ29tbWFuZElkIGNpZCwgU25hcHNob3Qg c25hcHNob3QsIFNuYXBzaG90IGNyb3NzY2hlY2ssCi0JCQkJCWJvb2wgd2FpdCwgVE1fRmFp bHVyZURhdGEgKnRtZmQsCi0JCQkJCUxvY2tUdXBsZU1vZGUgKmxvY2ttb2RlLCBUVV9VcGRh dGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykKKwkJCQkJQ29tbWFuZElkIGNpZCwgU25hcHNo b3Qgc25hcHNob3QsCisJCQkJCVNuYXBzaG90IGNyb3NzY2hlY2ssIGJvb2wgd2FpdCwKKwkJ CQkJVE1fRmFpbHVyZURhdGEgKnRtZmQsCisJCQkJCUxvY2tUdXBsZU1vZGUgKmxvY2ttb2Rl LAorCQkJCQljb25zdCBCaXRtYXBzZXQgKm1peF9hdHRycywKKwkJCQkJVFVfVXBkYXRlSW5k ZXhlcyAqdXBkYXRlX2luZGV4ZXMpCiB7CiAJYm9vbAkJcmVwX2lkX2tleV9yZXF1aXJlZCA9 IGZhbHNlOwogCWJvb2wJCXNob3VsZEZyZWUgPSB0cnVlOwpAQCAtMzMyLDcgKzMzNSw2IEBA IGhlYXBhbV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIG90 aWQsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJICAgKnN1bV9hdHRycywKIAkJCSAgICpw a19hdHRycywKIAkJCSAgICpyaWRfYXR0cnMsCi0JCQkgICAqbWl4X2F0dHJzLAogCQkJICAg KmlkeF9hdHRyczsKIAlUTV9SZXN1bHQJcmVzdWx0OwogCkBAIC00MDUsMjUgKzQwNyw2NiBA QCBoZWFwYW1fdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciBv dGlkLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAogCUFzc2VydChJdGVtSWRJc05vcm1hbChs cCkpOwogCi0JLyoKLQkgKiBQYXJ0aWFsbHkgY29uc3RydWN0IHRoZSBvbGR0dXAgZm9yIEhl YXBEZXRlcm1pbmVDb2x1bW5zSW5mbyB0byB3b3JrIGFuZAotCSAqIHRoZW4gcGFzcyB0aGF0 IG9uIHRvIGhlYXBfdXBkYXRlLgotCSAqLwogCW9sZHR1cC50X3RhYmxlT2lkID0gUmVsYXRp b25HZXRSZWxpZChyZWxhdGlvbik7CiAJb2xkdHVwLnRfZGF0YSA9IChIZWFwVHVwbGVIZWFk ZXIpIFBhZ2VHZXRJdGVtKHBhZ2UsIGxwKTsKIAlvbGR0dXAudF9sZW4gPSBJdGVtSWRHZXRM ZW5ndGgobHApOwogCW9sZHR1cC50X3NlbGYgPSAqb3RpZDsKIAotCW1peF9hdHRycyA9IEhl YXBEZXRlcm1pbmVDb2x1bW5zSW5mbyhyZWxhdGlvbiwgaWR4X2F0dHJzLCByaWRfYXR0cnMs Ci0JCQkJCQkJCQkJICZvbGR0dXAsIHR1cGxlLCAmcmVwX2lkX2tleV9yZXF1aXJlZCk7Ci0K IAkvKgotCSAqIFdlJ2xsIG5lZWQgdG8gV0FMIGxvZyB0aGUgcmVwbGljYSBpZGVudGl0eSBh dHRyaWJ1dGVzIGlmIGVpdGhlciB0aGV5Ci0JICogb3ZlcmxhcCB3aXRoIHRoZSBtb2RpZmll ZCBpbmRleGVkIGF0dHJpYnV0ZXMgb3IsIGFzIHdlJ3ZlIGNoZWNrZWQgZm9yCi0JICoganVz dCBub3cgaW4gSGVhcERldGVybWluZUNvbHVtbnNJbmZvLCB0aGV5IHdlcmUgdW5tb2RpZmll ZCBleHRlcm5hbAotCSAqIGluZGV4ZWQgYXR0cmlidXRlcy4KKwkgKiBXZSdsbCBuZWVkIHRv IGluY2x1ZGUgdGhlIHJlcGxpY2EgaWRlbnRpdHkga2V5IHdoZW4gZWl0aGVyIHRoZSBpZGVu dGl0eQorCSAqIGtleSBhdHRyaWJ1dGVzIG92ZXJsYXAgd2l0aCB0aGUgbW9kaWZpZWQgaW5k ZXggYXR0cmlidXRlcyBvciB3aGVuIHRoZQorCSAqIHJlcGxpY2EgaWRlbnRpdHkgYXR0cmli dXRlcyBhcmUgc3RvcmVkIGV4dGVybmFsbHkuICBUaGlzIGlzIHJlcXVpcmVkCisJICogYmVj YXVzZSBmb3Igc3VjaCBhdHRyaWJ1dGVzIHRoZSBmbGF0dGVuZWQgdmFsdWUgd29uJ3QgYmUg V0FMIGxvZ2dlZCBhcworCSAqIHBhcnQgb2YgdGhlIG5ldyB0dXBsZSBzbyB3ZSBtdXN0IGRl dGVybWluZSBpZiB3ZSBuZWVkIHRvIGV4dHJhY3QgYW5kCisJICogaW5jbHVkZSB0aGVtIGFz IHBhcnQgb2YgdGhlIG9sZF9rZXlfdHVwbGUgKHNlZSBFeHRyYWN0UmVwbGljYUlkZW50aXR5 KS4KIAkgKi8KLQlyZXBfaWRfa2V5X3JlcXVpcmVkID0gcmVwX2lkX2tleV9yZXF1aXJlZCB8 fCBibXNfb3ZlcmxhcChtaXhfYXR0cnMsIHJpZF9hdHRycyk7CisJcmVwX2lkX2tleV9yZXF1 aXJlZCA9IGJtc19vdmVybGFwKG1peF9hdHRycywgcmlkX2F0dHJzKTsKKwlpZiAoIXJlcF9p ZF9rZXlfcmVxdWlyZWQpCisJeworCQlCaXRtYXBzZXQgICphdHRyczsKKwkJVHVwbGVEZXNj CXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbGF0aW9uKTsKKwkJaW50CQkJYXR0aWR4 ID0gLTE7CisKKwkJLyoKKwkJICogV2UgZG9uJ3Qgb3duIGlkeF9hdHRycyBzbyB3ZSdsbCBj b3B5IGl0IGFuZCByZW1vdmUgdGhlIG1vZGlmaWVkIHNldAorCQkgKiB0byByZWR1Y2UgdGhl IGF0dHJpYnV0ZXMgd2UgbmVlZCB0byB0ZXN0IGluIHRoZSB3aGlsZSBsb29wIGFuZAorCQkg KiBhdm9pZCBhIHR3byBicmFuY2hlcyBpbiB0aGUgbG9vcC4KKwkJICovCisJCWF0dHJzID0g Ym1zX2RpZmZlcmVuY2UoaWR4X2F0dHJzLCBtaXhfYXR0cnMpOworCQlhdHRycyA9IGJtc19p bnRfbWVtYmVycyhhdHRycywgcmlkX2F0dHJzKTsKKworCQl3aGlsZSAoKGF0dGlkeCA9IGJt c19uZXh0X21lbWJlcihhdHRycywgYXR0aWR4KSkgPj0gMCkKKwkJeworCQkJLyoKKwkJCSAq IGF0dGlkeCBpcyB6ZXJvLWJhc2VkLCBhdHRybnVtIGlzIHRoZSBub3JtYWwgYXR0cmlidXRl IG51bWJlcgorCQkJICovCisJCQlBdHRyTnVtYmVyCWF0dHJudW0gPSBhdHRpZHggKyBGaXJz dExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyOworCQkJRGF0dW0JCXZhbHVlOworCQkJ Ym9vbAkJaXNudWxsOworCisJCQkvKgorCQkJICogU3lzdGVtIGF0dHJpYnV0ZXMgYXJlIG5v dCBhZGRlZCBpbnRvIGludGVyZXN0aW5nX2F0dHJzIGluCisJCQkgKiByZWxjYWNoZQorCQkJ ICovCisJCQlBc3NlcnQoYXR0cm51bSA+IDApOworCisJCQl2YWx1ZSA9IGhlYXBfZ2V0YXR0 cigmb2xkdHVwLCBhdHRybnVtLCB0dXBkZXNjLCAmaXNudWxsKTsKKworCQkJLyogTm8gbmVl ZCB0byBjaGVjayBhdHRyaWJ1dGVzIHRoYXQgY2FuJ3QgYmUgc3RvcmVkIGV4dGVybmFsbHkg Ki8KKwkJCWlmIChpc251bGwgfHwKKwkJCQlUdXBsZURlc2NDb21wYWN0QXR0cih0dXBkZXNj LCBhdHRybnVtIC0gMSktPmF0dGxlbiAhPSAtMSkKKwkJCQljb250aW51ZTsKKworCQkJLyog Q2hlY2sgaWYgdGhlIG9sZCB0dXBsZSdzIGF0dHJpYnV0ZSBpcyBzdG9yZWQgZXh0ZXJuYWxs eSAqLworCQkJaWYgKFZBUkFUVF9JU19FWFRFUk5BTCgoc3RydWN0IHZhcmxlbmEgKikgRGF0 dW1HZXRQb2ludGVyKHZhbHVlKSkpCisJCQl7CisJCQkJcmVwX2lkX2tleV9yZXF1aXJlZCA9 IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlibXNfZnJlZShhdHRycyk7CisJ fQogCiAJLyogVXBkYXRlIHRoZSB0dXBsZSB3aXRoIHRhYmxlIG9pZCAqLwogCXNsb3QtPnR0 c190YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOwpAQCAtNDM3LDcgKzQ4 MCw2IEBAIGhlYXBhbV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2lu dGVyIG90aWQsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCWJtc19mcmVlKHN1bV9hdHRycyk7 CiAJYm1zX2ZyZWUocGtfYXR0cnMpOwogCWJtc19mcmVlKHJpZF9hdHRycyk7Ci0JYm1zX2Zy ZWUobWl4X2F0dHJzKTsKIAlibXNfZnJlZShpZHhfYXR0cnMpOwogCiAJSXRlbVBvaW50ZXJD b3B5KCZ0dXBsZS0+dF9zZWxmLCAmc2xvdC0+dHRzX3RpZCk7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnRyZWUuYwppbmRleCAzZGVjMWVlNjU3ZC4uYjk3NTYxMmJiZGQgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwpAQCAtMTU2LDYgKzE1Niw3IEBAIGJ0aGFuZGxl cihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1wcm9wZXJ0eSA9IGJ0cHJvcGVydHksCiAJCS5h bWJ1aWxkcGhhc2VuYW1lID0gYnRidWlsZHBoYXNlbmFtZSwKIAkJLmFtdmFsaWRhdGUgPSBi dHZhbGlkYXRlLAorCQkuYW1jb21wYXJlZGF0dW1zID0gTlVMTCwKIAkJLmFtYWRqdXN0bWVt YmVycyA9IGJ0YWRqdXN0bWVtYmVycywKIAkJLmFtYmVnaW5zY2FuID0gYnRiZWdpbnNjYW4s CiAJCS5hbXJlc2NhbiA9IGJ0cmVzY2FuLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3RhYmxlL3RhYmxlYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFt LmMKaW5kZXggZGZkYTFhZjQxMmUuLjQyYWNkNWIxN2E5IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90 YWJsZS90YWJsZWFtLmMKQEAgLTM1OSw2ICszNTksNyBAQCB2b2lkCiBzaW1wbGVfdGFibGVf dHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgb3RpZCwKIAkJCQkJCSAg VHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LAorCQkJ CQkJICBjb25zdCBCaXRtYXBzZXQgKm1peF9hdHRycywKIAkJCQkJCSAgVFVfVXBkYXRlSW5k ZXhlcyAqdXBkYXRlX2luZGV4ZXMpCiB7CiAJVE1fUmVzdWx0CXJlc3VsdDsKQEAgLTM2OSw3 ICszNzAsOSBAQCBzaW1wbGVfdGFibGVfdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbCwgSXRl bVBvaW50ZXIgb3RpZCwKIAkJCQkJCQkJR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwKIAkJ CQkJCQkJc25hcHNob3QsIEludmFsaWRTbmFwc2hvdCwKIAkJCQkJCQkJdHJ1ZSAvKiB3YWl0 IGZvciBjb21taXQgKi8gLAotCQkJCQkJCQkmdG1mZCwgJmxvY2ttb2RlLCB1cGRhdGVfaW5k ZXhlcyk7CisJCQkJCQkJCSZ0bWZkLCAmbG9ja21vZGUsCisJCQkJCQkJCW1peF9hdHRycywK KwkJCQkJCQkJdXBkYXRlX2luZGV4ZXMpOwogCiAJc3dpdGNoIChyZXN1bHQpCiAJewpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jIGIvc3JjL2JhY2tl bmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jCmluZGV4IDdkMzJjZDBlMTU5Li5kZmMzMmRiNGYx NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jCisrKyBi L3NyYy9iYWNrZW5kL2Jvb3RzdHJhcC9ib290c3RyYXAuYwpAQCAtOTYzLDEwICs5NjMsMTgg QEAgaW5kZXhfcmVnaXN0ZXIoT2lkIGhlYXAsCiAJbmV3aW5kLT5pbF9pbmZvLT5paV9FeHBy ZXNzaW9ucyA9CiAJCWNvcHlPYmplY3QoaW5kZXhJbmZvLT5paV9FeHByZXNzaW9ucyk7CiAJ bmV3aW5kLT5pbF9pbmZvLT5paV9FeHByZXNzaW9uc1N0YXRlID0gTklMOworCS8qIGV4cHJl c3Npb24gYXR0cnMgd2lsbCBsaWtlbHkgYmUgbnVsbCwgYnV0IG1heSBhcyB3ZWxsIGNvcHkg aXQgKi8KKwluZXdpbmQtPmlsX2luZm8tPmlpX0V4cHJlc3Npb25zQXR0cnMgPQorCQljb3B5 T2JqZWN0KGluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnNBdHRycyk7CiAJLyogcHJlZGljYXRl IHdpbGwgbGlrZWx5IGJlIG51bGwsIGJ1dCBtYXkgYXMgd2VsbCBjb3B5IGl0ICovCiAJbmV3 aW5kLT5pbF9pbmZvLT5paV9QcmVkaWNhdGUgPQogCQljb3B5T2JqZWN0KGluZGV4SW5mby0+ aWlfUHJlZGljYXRlKTsKIAluZXdpbmQtPmlsX2luZm8tPmlpX1ByZWRpY2F0ZVN0YXRlID0g TlVMTDsKKwkvKiBwcmVkaWNhdGUgYXR0cnMgd2lsbCBsaWtlbHkgYmUgbnVsbCwgYnV0IG1h eSBhcyB3ZWxsIGNvcHkgaXQgKi8KKwluZXdpbmQtPmlsX2luZm8tPmlpX1ByZWRpY2F0ZUF0 dHJzID0KKwkJY29weU9iamVjdChpbmRleEluZm8tPmlpX1ByZWRpY2F0ZUF0dHJzKTsKKwlu ZXdpbmQtPmlsX2luZm8tPmlpX0NoZWNrZWRQcmVkaWNhdGUgPSBmYWxzZTsKKwluZXdpbmQt PmlsX2luZm8tPmlpX1ByZWRpY2F0ZVNhdGlzZmllZCA9IGZhbHNlOwogCS8qIG5vIGV4Y2x1 c2lvbiBjb25zdHJhaW50cyBhdCBib290c3RyYXAgdGltZSwgc28gbm8gbmVlZCB0byBjb3B5 ICovCiAJQXNzZXJ0KGluZGV4SW5mby0+aWlfRXhjbHVzaW9uT3BzID09IE5VTEwpOwogCUFz c2VydChpbmRleEluZm8tPmlpX0V4Y2x1c2lvblByb2NzID09IE5VTEwpOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9p bmRleC5jCmluZGV4IDQzZGU0MmNlMzllLi5mZTUzNmM5NzQwZiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5k ZXguYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW0uaCIKICNp bmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4u aCIKKyNpbmNsdWRlICJhY2Nlc3Mvc3lzYXR0ci5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJs ZWFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RvYXN0X2NvbXByZXNzaW9uLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL3RyYW5zYW0uaCIKQEAgLTU4LDYgKzU5LDcgQEAKICNpbmNsdWRlICJjb21t YW5kcy90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNs dWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIKICNpbmNs dWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIK ICNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCkBAIC0yNDEyLDYgKzI0MTQsNjEg QEAgaW5kZXhfZHJvcChPaWQgaW5kZXhJZCwgYm9vbCBjb25jdXJyZW50LCBib29sIGNvbmN1 cnJlbnRfbG9ja19tb2RlKQogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKKy8qIC0tLS0tLS0tLS0t LS0tLS0KKyAqIEJ1aWxkVXBkYXRlSW5kZXhJbmZvCisgKgorICogRm9yIGV4cHJlc3Npb24g aW5kZXhlcyB1cGRhdGVzIG1heSBub3QgY2hhbmdlIHRoZSBpbmRleGVkIHZhbHVlIGFsbG93 aW5nCisgKiBmb3IgYSBIT1QgdXBkYXRlLiAgQWRkIGluZm9ybWF0aW9uIHRvIHRoZSBJbmRl eEluZm8gdG8gYWxsb3cgZm9yIGNoZWNraW5nCisgKiBpZiB0aGUgaW5kZXhlZCB2YWx1ZSBo YXMgY2hhbmdlZC4KKyAqCisgKiBEbyB0aGlzIHByb2Nlc3NpbmcgaGVyZSByYXRoZXIgdGhh biBpbiBCdWlsZEluZGV4SW5mbygpIHRvIG5vdCBpbmN1ciB0aGUKKyAqIG92ZXJoZWFkIGlu IHRoZSBjb21tb24gbm9uLWV4cHJlc3Npb24gY2FzZXMuCisgKiAtLS0tLS0tLS0tLS0tLS0t CisgKi8KK3ZvaWQKK0J1aWxkVXBkYXRlSW5kZXhJbmZvKFJlc3VsdFJlbEluZm8gKnJlc3Vs dFJlbEluZm8pCit7CisJZm9yIChpbnQgaiA9IDA7IGogPCByZXN1bHRSZWxJbmZvLT5yaV9O dW1JbmRpY2VzOyBqKyspCisJeworCQlpbnQJCQlpOworCQlpbnQJCQlpbmRuYXR0czsKKwkJ Qml0bWFwc2V0ICAqYXR0cnMgPSBOVUxMOworCQlJbmRleEluZm8gICppaSA9IHJlc3VsdFJl bEluZm8tPnJpX0luZGV4UmVsYXRpb25JbmZvW2pdOworCisJCWluZG5hdHRzID0gaWktPmlp X051bUluZGV4QXR0cnM7CisKKwkJLyogQ29sbGVjdCBrZXkgYXR0cmlidXRlcyB1c2VkIGJ5 IHRoZSBpbmRleCwga2V5IGFuZCBpbmNsdWRpbmcgKi8KKwkJZm9yIChpID0gMDsgaSA8IGlu ZG5hdHRzOyBpKyspCisJCXsKKwkJCUF0dHJOdW1iZXIJYXR0bnVtID0gaWktPmlpX0luZGV4 QXR0ck51bWJlcnNbaV07CisKKwkJCWlmIChhdHRudW0gIT0gMCkKKwkJCQlhdHRycyA9IGJt c19hZGRfbWVtYmVyKGF0dHJzLCBhdHRudW0gLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmli dXRlTnVtYmVyKTsKKwkJfQorCisJCS8qIENvbGxlY3QgYXR0cmlidXRlcyB1c2VkIGluIHRo ZSBleHByZXNzaW9uICovCisJCWlmIChpaS0+aWlfRXhwcmVzc2lvbnMpCisJCQlwdWxsX3Zh cmF0dG5vcygoTm9kZSAqKSBpaS0+aWlfRXhwcmVzc2lvbnMsCisJCQkJCQkgICByZXN1bHRS ZWxJbmZvLT5yaV9SYW5nZVRhYmxlSW5kZXgsCisJCQkJCQkgICAmaWktPmlpX0V4cHJlc3Np b25zQXR0cnMpOworCisJCS8qIENvbGxlY3QgYXR0cmlidXRlcyB1c2VkIGluIHRoZSBwcmVk aWNhdGUgKi8KKwkJaWYgKGlpLT5paV9QcmVkaWNhdGUpCisJCQlwdWxsX3ZhcmF0dG5vcygo Tm9kZSAqKSBpaS0+aWlfUHJlZGljYXRlLAorCQkJCQkJICAgcmVzdWx0UmVsSW5mby0+cmlf UmFuZ2VUYWJsZUluZGV4LAorCQkJCQkJICAgJmlpLT5paV9QcmVkaWNhdGVBdHRycyk7CisK KwkJLyoKKwkJICogQ29tYmluZSBrZXksIGluY2x1ZGluZywgYW5kIGV4cHJlc3Npb24sIGJ1 dCBub3QgcGFydGlhbCBpbmRleAorCQkgKiBwcmVkaWNhdGUgYXR0cmlidXRlcy4KKwkJICov CisJCWlpLT5paV9JbmRleGVkQXR0cnMgPSBibXNfdW5pb24oYXR0cnMsIGlpLT5paV9FeHBy ZXNzaW9uc0F0dHJzKTsKKworCQkvKiBBbGwgaW5kZXhlcyBzaG91bGQgaW5kZXggKnNvbWV0 aGluZyohICovCisJCUFzc2VydCghYm1zX2lzX2VtcHR5KGlpLT5paV9JbmRleGVkQXR0cnMp KTsKKwl9Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCQlCdWlsZEluZGV4SW5mbwog ICoJCQlDb25zdHJ1Y3QgYW4gSW5kZXhJbmZvIHJlY29yZCBmb3IgYW4gb3BlbiBpbmRleApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleGluZy5jIGIvc3JjL2JhY2tl bmQvY2F0YWxvZy9pbmRleGluZy5jCmluZGV4IDBhMWE2OGUwNjQ0Li42OTBhMjUxMTAyMyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleGluZy5jCisrKyBiL3NyYy9i YWNrZW5kL2NhdGFsb2cvaW5kZXhpbmcuYwpAQCAtMTAyLDcgKzEwMiw3IEBAIENhdGFsb2dJ bmRleEluc2VydChDYXRhbG9nSW5kZXhTdGF0ZSBpbmRzdGF0ZSwgSGVhcFR1cGxlIGhlYXBU dXBsZSwKIAkgKiBHZXQgaW5mb3JtYXRpb24gZnJvbSB0aGUgc3RhdGUgc3RydWN0dXJlLiAg RmFsbCBvdXQgaWYgbm90aGluZyB0byBkby4KIAkgKi8KIAludW1JbmRleGVzID0gaW5kc3Rh dGUtPnJpX051bUluZGljZXM7Ci0JaWYgKG51bUluZGV4ZXMgPT0gMCkKKwlpZiAobnVtSW5k ZXhlcyA9PSAwIHx8IHVwZGF0ZUluZGV4ZXMgPT0gVFVfTm9uZSkKIAkJcmV0dXJuOwogCXJl bGF0aW9uRGVzY3MgPSBpbmRzdGF0ZS0+cmlfSW5kZXhSZWxhdGlvbkRlc2NzOwogCWluZGV4 SW5mb0FycmF5ID0gaW5kc3RhdGUtPnJpX0luZGV4UmVsYXRpb25JbmZvOwpAQCAtMzE0LDE1 ICszMTQsMTggQEAgQ2F0YWxvZ1R1cGxlVXBkYXRlKFJlbGF0aW9uIGhlYXBSZWwsIGNvbnN0 IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIHR1cCkKIHsKIAlDYXRhbG9nSW5k ZXhTdGF0ZSBpbmRzdGF0ZTsKIAlUVV9VcGRhdGVJbmRleGVzIHVwZGF0ZUluZGV4ZXMgPSBU VV9BbGw7CisJQml0bWFwc2V0ICAqdXBkYXRlZEF0dHJzOwogCiAJQ2F0YWxvZ1R1cGxlQ2hl Y2tDb25zdHJhaW50cyhoZWFwUmVsLCB0dXApOwogCiAJaW5kc3RhdGUgPSBDYXRhbG9nT3Bl bkluZGV4ZXMoaGVhcFJlbCk7CiAKLQlzaW1wbGVfaGVhcF91cGRhdGUoaGVhcFJlbCwgb3Rp ZCwgdHVwLCAmdXBkYXRlSW5kZXhlcyk7Ci0KKwl1cGRhdGVkQXR0cnMgPSBzaW1wbGVfaGVh cF91cGRhdGUoaGVhcFJlbCwgb3RpZCwgdHVwLCAmdXBkYXRlSW5kZXhlcyk7CisJKChSZXN1 bHRSZWxJbmZvICopIGluZHN0YXRlKS0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xzID0gdXBkYXRl ZEF0dHJzOwogCUNhdGFsb2dJbmRleEluc2VydChpbmRzdGF0ZSwgdHVwLCB1cGRhdGVJbmRl eGVzKTsKKwogCUNhdGFsb2dDbG9zZUluZGV4ZXMoaW5kc3RhdGUpOworCWJtc19mcmVlKHVw ZGF0ZWRBdHRycyk7CiB9CiAKIC8qCkBAIC0zMzgsMTIgKzM0MSwxNSBAQCBDYXRhbG9nVHVw bGVVcGRhdGVXaXRoSW5mbyhSZWxhdGlvbiBoZWFwUmVsLCBjb25zdCBJdGVtUG9pbnRlckRh dGEgKm90aWQsIEhlYXBUdQogCQkJCQkJICAgQ2F0YWxvZ0luZGV4U3RhdGUgaW5kc3RhdGUp CiB7CiAJVFVfVXBkYXRlSW5kZXhlcyB1cGRhdGVJbmRleGVzID0gVFVfQWxsOworCUJpdG1h cHNldCAgKnVwZGF0ZWRBdHRyczsKIAogCUNhdGFsb2dUdXBsZUNoZWNrQ29uc3RyYWludHMo aGVhcFJlbCwgdHVwKTsKIAotCXNpbXBsZV9oZWFwX3VwZGF0ZShoZWFwUmVsLCBvdGlkLCB0 dXAsICZ1cGRhdGVJbmRleGVzKTsKLQorCXVwZGF0ZWRBdHRycyA9IHNpbXBsZV9oZWFwX3Vw ZGF0ZShoZWFwUmVsLCBvdGlkLCB0dXAsICZ1cGRhdGVJbmRleGVzKTsKKwkoKFJlc3VsdFJl bEluZm8gKikgaW5kc3RhdGUpLT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMgPSB1cGRhdGVkQXR0 cnM7CiAJQ2F0YWxvZ0luZGV4SW5zZXJ0KGluZHN0YXRlLCB0dXAsIHVwZGF0ZUluZGV4ZXMp OworCSgoUmVzdWx0UmVsSW5mbyAqKSBpbmRzdGF0ZSktPnJpX0NoYW5nZWRJbmRleGVkQ29s cyA9IE5VTEw7CisJYm1zX2ZyZWUodXBkYXRlZEF0dHJzKTsKIH0KIAogLyoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvdG9hc3RpbmcuYwppbmRleCBjNzhkY2VhOThjMS4uZmY4ZGE1YmU1ZjggMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYworKysgYi9zcmMvYmFja2VuZC9j YXRhbG9nL3RvYXN0aW5nLmMKQEAgLTI5Miw4ICsyOTIsMTIgQEAgY3JlYXRlX3RvYXN0X3Rh YmxlKFJlbGF0aW9uIHJlbCwgT2lkIHRvYXN0T2lkLCBPaWQgdG9hc3RJbmRleE9pZCwKIAlp bmRleEluZm8tPmlpX0luZGV4QXR0ck51bWJlcnNbMV0gPSAyOwogCWluZGV4SW5mby0+aWlf RXhwcmVzc2lvbnMgPSBOSUw7CiAJaW5kZXhJbmZvLT5paV9FeHByZXNzaW9uc1N0YXRlID0g TklMOworCWluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnNBdHRycyA9IE5VTEw7CiAJaW5kZXhJ bmZvLT5paV9QcmVkaWNhdGUgPSBOSUw7CiAJaW5kZXhJbmZvLT5paV9QcmVkaWNhdGVTdGF0 ZSA9IE5VTEw7CisJaW5kZXhJbmZvLT5paV9QcmVkaWNhdGVBdHRycyA9IE5VTEw7CisJaW5k ZXhJbmZvLT5paV9DaGVja2VkUHJlZGljYXRlID0gZmFsc2U7CisJaW5kZXhJbmZvLT5paV9Q cmVkaWNhdGVTYXRpc2ZpZWQgPSBmYWxzZTsKIAlpbmRleEluZm8tPmlpX0V4Y2x1c2lvbk9w cyA9IE5VTEw7CiAJaW5kZXhJbmZvLT5paV9FeGNsdXNpb25Qcm9jcyA9IE5VTEw7CiAJaW5k ZXhJbmZvLT5paV9FeGNsdXNpb25TdHJhdHMgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjSW5kZXhpbmcuYwppbmRleCA2YWUwZjk1OTU5Mi4uMTI3NWZlZmZhZTkgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBAIC0xMDksMTEgKzEwOSwxNSBAQAogI2lu Y2x1ZGUgImFjY2Vzcy9nZW5hbS5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAj aW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKKyNpbmNsdWRlICJhY2Nlc3Mvc3lzYXR0ci5o IgogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9pbmRleC5o IgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCisjaW5jbHVkZSAibm9kZXMvYml0 bWFwc2V0LmgiCisjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVzLmgiCiAjaW5jbHVkZSAibm9k ZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCisjaW5jbHVkZSAi dXRpbHMvZGF0dW0uaCIKICNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKICNp bmNsdWRlICJ1dGlscy9tdWx0aXJhbmdldHlwZXMuaCIKICNpbmNsdWRlICJ1dGlscy9yYW5n ZXR5cGVzLmgiCkBAIC0zMjQsOCArMzI4LDggQEAgRXhlY0luc2VydEluZGV4VHVwbGVzKFJl c3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJUmVsYXRpb24JaGVhcFJlbGF0aW9uOwog CUluZGV4SW5mbyAqKmluZGV4SW5mb0FycmF5OwogCUV4cHJDb250ZXh0ICplY29udGV4dDsK LQlEYXR1bQkJdmFsdWVzW0lOREVYX01BWF9LRVlTXTsKLQlib29sCQlpc251bGxbSU5ERVhf TUFYX0tFWVNdOworCURhdHVtCQlsb2NfdmFsdWVzW0lOREVYX01BWF9LRVlTXTsKKwlib29s CQlsb2NfaXNudWxsW0lOREVYX01BWF9LRVlTXTsKIAogCUFzc2VydChJdGVtUG9pbnRlcklz VmFsaWQodHVwbGVpZCkpOwogCkBAIC0zNDksMTMgKzM1MywxMyBAQCBFeGVjSW5zZXJ0SW5k ZXhUdXBsZXMoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKIAkvKiBBcnJhbmdlIGZv ciBlY29udGV4dCdzIHNjYW4gdHVwbGUgdG8gYmUgdGhlIHR1cGxlIHVuZGVyIHRlc3QgKi8K IAllY29udGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBzbG90OwogCi0JLyoKLQkgKiBmb3IgZWFj aCBpbmRleCwgZm9ybSBhbmQgaW5zZXJ0IHRoZSBpbmRleCB0dXBsZQotCSAqLworCS8qIElu c2VydCBpbnRvIGVhY2ggaW5kZXggdGhhdCBuZWVkcyB1cGRhdGluZyAqLwogCWZvciAoaSA9 IDA7IGkgPCBudW1JbmRpY2VzOyBpKyspCiAJewogCQlSZWxhdGlvbglpbmRleFJlbGF0aW9u ID0gcmVsYXRpb25EZXNjc1tpXTsKIAkJSW5kZXhJbmZvICAqaW5kZXhJbmZvOworCQlEYXR1 bQkgICAqdmFsdWVzOworCQlib29sCSAgICppc251bGw7CiAJCWJvb2wJCWFwcGx5Tm9EdXBF cnI7CiAJCUluZGV4VW5pcXVlQ2hlY2sgY2hlY2tVbmlxdWU7CiAJCWJvb2wJCWluZGV4VW5j aGFuZ2VkOwpAQCAtMzcyLDcgKzM3Niw3IEBAIEV4ZWNJbnNlcnRJbmRleFR1cGxlcyhSZXN1 bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCiAJCS8qCiAJCSAqIFNraXAgcHJvY2Vzc2lu ZyBvZiBub24tc3VtbWFyaXppbmcgaW5kZXhlcyBpZiB3ZSBvbmx5IHVwZGF0ZQotCQkgKiBz dW1tYXJpemluZyBpbmRleGVzCisJCSAqIHN1bW1hcml6aW5nIGluZGV4ZXMgb3IgaWYgdGhp cyBpbmRleCBpcyB1bmNoYW5nZWQuCiAJCSAqLwogCQlpZiAob25seVN1bW1hcml6aW5nICYm ICFpbmRleEluZm8tPmlpX1N1bW1hcml6aW5nKQogCQkJY29udGludWU7CkBAIC0zOTMsOCAr Mzk3LDE1IEBAIEV4ZWNJbnNlcnRJbmRleFR1cGxlcyhSZXN1bHRSZWxJbmZvICpyZXN1bHRS ZWxJbmZvLAogCQkJCWluZGV4SW5mby0+aWlfUHJlZGljYXRlU3RhdGUgPSBwcmVkaWNhdGU7 CiAJCQl9CiAKKwkJCS8qIENoZWNrIHRoZSBpbmRleCBwcmVkaWNhdGUgaWYgd2UgaGF2ZW4n dCBkb25lIHNvIGVhcmxpZXIgb24gKi8KKwkJCWlmICghaW5kZXhJbmZvLT5paV9DaGVja2Vk UHJlZGljYXRlKQorCQkJeworCQkJCWluZGV4SW5mby0+aWlfUHJlZGljYXRlU2F0aXNmaWVk ID0gRXhlY1F1YWwocHJlZGljYXRlLCBlY29udGV4dCk7CisJCQkJaW5kZXhJbmZvLT5paV9D aGVja2VkUHJlZGljYXRlID0gdHJ1ZTsKKwkJCX0KKwogCQkJLyogU2tpcCB0aGlzIGluZGV4 LXVwZGF0ZSBpZiB0aGUgcHJlZGljYXRlIGlzbid0IHNhdGlzZmllZCAqLwotCQkJaWYgKCFF eGVjUXVhbChwcmVkaWNhdGUsIGVjb250ZXh0KSkKKwkJCWlmICghaW5kZXhJbmZvLT5paV9Q cmVkaWNhdGVTYXRpc2ZpZWQpCiAJCQkJY29udGludWU7CiAJCX0KIApAQCAtNDAyLDExICs0 MTMsMTAgQEAgRXhlY0luc2VydEluZGV4VHVwbGVzKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJl bEluZm8sCiAJCSAqIEZvcm1JbmRleERhdHVtIGZpbGxzIGluIGl0cyB2YWx1ZXMgYW5kIGlz bnVsbCBwYXJhbWV0ZXJzIHdpdGggdGhlCiAJCSAqIGFwcHJvcHJpYXRlIHZhbHVlcyBmb3Ig dGhlIGNvbHVtbihzKSBvZiB0aGUgaW5kZXguCiAJCSAqLwotCQlGb3JtSW5kZXhEYXR1bShp bmRleEluZm8sCi0JCQkJCSAgIHNsb3QsCi0JCQkJCSAgIGVzdGF0ZSwKLQkJCQkJICAgdmFs dWVzLAotCQkJCQkgICBpc251bGwpOworCQlGb3JtSW5kZXhEYXR1bShpbmRleEluZm8sIHNs b3QsIGVzdGF0ZSwgbG9jX3ZhbHVlcywgbG9jX2lzbnVsbCk7CisKKwkJdmFsdWVzID0gbG9j X3ZhbHVlczsKKwkJaXNudWxsID0gbG9jX2lzbnVsbDsKIAogCQkvKiBDaGVjayB3aGV0aGVy IHRvIGFwcGx5IG5vRHVwRXJyIHRvIHRoaXMgaW5kZXggKi8KIAkJYXBwbHlOb0R1cEVyciA9 IG5vRHVwRXJyICYmCkBAIC02MTMsNyArNjIzLDEyIEBAIEV4ZWNDaGVja0luZGV4Q29uc3Ry YWludHMoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywgVHVwbGVUYWJsZVNsb3QgKnNs b3QsCiAJCWNoZWNrZWRJbmRleCA9IHRydWU7CiAKIAkJLyogQ2hlY2sgZm9yIHBhcnRpYWwg aW5kZXggKi8KLQkJaWYgKGluZGV4SW5mby0+aWlfUHJlZGljYXRlICE9IE5JTCkKKwkJaWYg KGluZGV4SW5mby0+aWlfQ2hlY2tlZFByZWRpY2F0ZSAmJiAhaW5kZXhJbmZvLT5paV9QcmVk aWNhdGVTYXRpc2ZpZWQpCisJCXsKKwkJCS8qIFdlJ3ZlIGFscmVhZHkgY2hlY2tlZCBhbmQg dGhlIHByZWRpY2F0ZSB3YXNuJ3Qgc2F0aXNmaWVkLiAqLworCQkJY29udGludWU7CisJCX0K KwkJZWxzZSBpZiAoaW5kZXhJbmZvLT5paV9QcmVkaWNhdGUgIT0gTklMKQogCQl7CiAJCQlF eHByU3RhdGUgICpwcmVkaWNhdGU7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNNYWluLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCmluZGV4 IGJmZDNlYmM2MDFlLi5jZDdhZTRhZWVjMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY01haW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5j CkBAIC0xMjg2LDYgKzEyODYsNyBAQCBJbml0UmVzdWx0UmVsSW5mbyhSZXN1bHRSZWxJbmZv ICpyZXN1bHRSZWxJbmZvLAogCS8qIFRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBzZXQgbGF0 ZXIgaWYgbmVlZGVkICovCiAJcmVzdWx0UmVsSW5mby0+cmlfUm93SWRBdHRObyA9IDA7CiAJ cmVzdWx0UmVsSW5mby0+cmlfZXh0cmFVcGRhdGVkQ29scyA9IE5VTEw7CisJcmVzdWx0UmVs SW5mby0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xzID0gTlVMTDsKIAlyZXN1bHRSZWxJbmZvLT5y aV9wcm9qZWN0TmV3ID0gTlVMTDsKIAlyZXN1bHRSZWxJbmZvLT5yaV9uZXdUdXBsZVNsb3Qg PSBOVUxMOwogCXJlc3VsdFJlbEluZm8tPnJpX29sZFR1cGxlU2xvdCA9IE5VTEw7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCmluZGV4IDc0M2IxZWUyYjI4Li43 MDQwYTY5YzI3NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxp Y2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMK QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1 ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgorI2luY2x1 ZGUgInV0aWxzL3JlbGNhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogI2lu Y2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvdHlwY2FjaGUuaCIK QEAgLTkzNyw3ICs5MzgsMTMgQEAgRXhlY1NpbXBsZVJlbGF0aW9uVXBkYXRlKFJlc3VsdFJl bEluZm8gKnJlc3VsdFJlbEluZm8sCiAJCWlmIChyZWwtPnJkX3JlbC0+cmVsaXNwYXJ0aXRp b24pCiAJCQlFeGVjUGFydGl0aW9uQ2hlY2socmVzdWx0UmVsSW5mbywgc2xvdCwgZXN0YXRl LCB0cnVlKTsKIAorCQkvKgorCQkgKiBXZSdyZSBub3QgZ29pbmcgdG8gY2FsbCBFeGVjQ2hl Y2tJbmRleGVkQXR0cnNGb3JDaGFuZ2VzIGhlcmUKKwkJICogYmVjYXVzZSB3ZSd2ZSBhbHJl YWR5IGlkZW50aWZpZWQgdGhlIGNoYW5nZXMgZWFybGllciBvbiB0aGFua3MgdG8KKwkJICog c2xvdF9tb2RpZnlfZGF0YS4KKwkJICovCiAJCXNpbXBsZV90YWJsZV90dXBsZV91cGRhdGUo cmVsLCB0aWQsIHNsb3QsIGVzdGF0ZS0+ZXNfc25hcHNob3QsCisJCQkJCQkJCSAgcmVzdWx0 UmVsSW5mby0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xzLAogCQkJCQkJCQkgICZ1cGRhdGVfaW5k ZXhlcyk7CiAKIAkJY29uZmxpY3RpbmRleGVzID0gcmVzdWx0UmVsSW5mby0+cmlfb25Db25m bGljdEFyYml0ZXJJbmRleGVzOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZU1vZGlmeVRhYmxlLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFi bGUuYwppbmRleCBmNWU5ZDM2OTk0MC4uMjJiMWNhMjVlYmYgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCkBAIC0xNyw2ICsxNyw3IEBACiAgKgkJRXhlY01v ZGlmeVRhYmxlCQktIHJldHJpZXZlIHRoZSBuZXh0IHR1cGxlIGZyb20gdGhlIG5vZGUKICAq CQlFeGVjRW5kTW9kaWZ5VGFibGUJLSBzaHV0IGRvd24gdGhlIE1vZGlmeVRhYmxlIG5vZGUK ICAqCQlFeGVjUmVTY2FuTW9kaWZ5VGFibGUgLSByZXNjYW4gdGhlIE1vZGlmeVRhYmxlIG5v ZGUKKyAqCQlFeGVjQ2hlY2tJbmRleGVkQXR0cnNGb3JDaGFuZ2VzIC0gZmluZCBzZXQgb2Yg dXBkYXRlZCBpbmRleGVkIGNvbHVtbnMKICAqCiAgKgkgTk9URVMKICAqCQlUaGUgTW9kaWZ5 VGFibGUgbm9kZSByZWNlaXZlcyBpbnB1dCBmcm9tIGl0cyBvdXRlclBsYW4sIHdoaWNoIGlz CkBAIC01MiwxMyArNTMsMjAgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNs dWRlICJhY2Nlc3MvYW1hcGkuaCIKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgi CisjaW5jbHVkZSAiYWNjZXNzL2F0dG51bS5oIgorI2luY2x1ZGUgImFjY2Vzcy9zeXNhdHRy LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKKyNpbmNsdWRlICJhY2Nlc3MvdHVw Y29udmVydC5oIgorI2luY2x1ZGUgImFjY2Vzcy90dXBkZXNjLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL2luZGV4LmgiCiAjaW5jbHVkZSAiY29t bWFuZHMvdHJpZ2dlci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCIK ICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25v ZGVNb2RpZnlUYWJsZS5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL3R1cHRhYmxlLmgiCiAjaW5j bHVkZSAiZm9yZWlnbi9mZHdhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNs dWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKQEAgLTY4LDggKzc2LDExIEBACiAjaW5jbHVkZSAi c3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRl ICJ1dGlscy9kYXR1bS5oIgorI2luY2x1ZGUgInV0aWxzL2Zsb2F0LmgiCiAjaW5jbHVkZSAi dXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgi CiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCisjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIK ICNpbmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCiAKIApAQCAtMTc2LDYgKzE4NywyMjQgQEAg c3RhdGljIFR1cGxlVGFibGVTbG90ICpFeGVjTWVyZ2VOb3RNYXRjaGVkKE1vZGlmeVRhYmxl Q29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJCQkgICBSZXN1bHRSZWxJbmZvICpyZXN1bHRS ZWxJbmZvLAogCQkJCQkJCQkJCSAgIGJvb2wgY2FuU2V0VGFnKTsKIAorLyoKKyAqIEV4ZWND aGVja0luZGV4ZWRBdHRyc0ZvckNoYW5nZXMKKyAqCisgKiBEZXRlcm1pbmUgd2hpY2ggaW5k ZXhlcyBuZWVkIHVwZGF0aW5nIGJ5IGZpbmRpbmcgdGhlIHNldCBvZiBtb2RpZmllZCBpbmRl eGVkCisgKiBhdHRyaWJ1dGVzLgorICoKKyAqIEZvciB3aGljaCBpbXBsZW1lbnQgdGhlIGFt Y29tcGFyZWRhdHVtcygpIGluZGV4IEFNIEFQSSB3ZSdsbCBuZWVkIHRvIGZvcm0KKyAqIGlu ZGV4IGRhdHVtIGFuZCBjb21wYXJlIGVhY2ggYXR0cmlidXRlIHRvIHNlZSBpZiBhbnl0aGlu ZyBhY3R1YWxseSBjaGFuZ2VkLgorICoKKyAqIFRoZSBnb2FsIGlzIGZvciB0aGUgZXhlY3V0 b3IgdG8ga25vdywgYWhlYWQgb2YgY2FsbGluZyBpbnRvIHRoZSB0YWJsZSBBTSB0bworICog cHJvY2VzcyB0aGUgdXBkYXRlIGFuZCBiZWZvcmUgY2FsbGluZyBpbnRvIHRoZSBpbmRleCBB TSBmb3IgaW5zZXJ0aW5nIG5ldworICogaW5kZXggdHVwbGVzLCB3aGljaCBhdHRyaWJ1dGVz IGluIHRoZSBuZXcgVHVwbGVUYWJsZVNsb3QsIGlmIGFueSwgdHJ1ZWx5CisgKiBuZWNlc3Np dGF0ZSBhIG5ldyBpbmRleCB0dXBsZS4KKyAqCisgKiBSZXR1cm5zIGEgQml0bWFwc2V0IG9m IGF0dHJpYnV0ZXMgdGhhdCBpbnRlcnNlY3RzIHdpdGggaW5kZXhlcyB3aGljaCByZXF1aXJl CisgKiBhIG5ldyBpbmRleCB0dXBsZS4KKyAqLworQml0bWFwc2V0ICoKK0V4ZWNDaGVja0lu ZGV4ZWRBdHRyc0ZvckNoYW5nZXMoUmVzdWx0UmVsSW5mbyAqcmVsaW5mbywKKwkJCQkJCQkJ RVN0YXRlICplc3RhdGUsCisJCQkJCQkJCVR1cGxlVGFibGVTbG90ICpvbGRfdHRzLAorCQkJ CQkJCQlUdXBsZVRhYmxlU2xvdCAqbmV3X3R0cykKK3sKKwlSZWxhdGlvbglyZWxhdGlvbiA9 IHJlbGluZm8tPnJpX1JlbGF0aW9uRGVzYzsKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0 aW9uR2V0RGVzY3IocmVsYXRpb24pOworCUJpdG1hcHNldCAgKm1peF9hdHRycyA9IE5VTEw7 CS8qIG1vZGlmaWVkIGluZGV4ZWQgYXR0cmlidXRlcyAqLworCisJLyogSWYgbm8gaW5kZXhl cywgd2UncmUgZG9uZSAqLworCWlmIChyZWxpbmZvLT5yaV9OdW1JbmRpY2VzID09IDApCisJ CXJldHVybiBOVUxMOworCisJLyogRmluZCB0aGUgaW5kZXhlcyB0aGF0IHJlZmVyZW5jZSB0 aGlzIGF0dHJpYnV0ZSAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgcmVsaW5mby0+cmlfTnVt SW5kaWNlczsgaSsrKQorCXsKKwkJUmVsYXRpb24JaW5kZXggPSByZWxpbmZvLT5yaV9JbmRl eFJlbGF0aW9uRGVzY3NbaV07CisJCWNvbnN0IEluZGV4QW1Sb3V0aW5lICphbXJvdXRpbmUg PSBpbmRleC0+cmRfaW5kYW07CisJCUluZGV4SW5mbyAgKmluZGV4SW5mbyA9IHJlbGluZm8t PnJpX0luZGV4UmVsYXRpb25JbmZvW2ldOworCQlCaXRtYXBzZXQgICptX2F0dHJzID0gTlVM TDsgLyogKHBvc3NpYmx5KSBtb2RpZmllZCBpbmRleGVkIGF0dHJzICovCisJCUJpdG1hcHNl dCAgKnBfYXR0cnMgPSBOVUxMOyAvKiAocG9zc2libHkpIG1vZGlmaWVkIHByZWRpY2F0ZSBh dHRycyAqLworCQlCaXRtYXBzZXQgICp1X2F0dHJzID0gTlVMTDsgLyogdW5tb2RpZmllZCBp bmRleGVkIGF0dHJzICovCisJCWJvb2wJCWhhc19hbV9jb21wYXJlID0gKGFtcm91dGluZS0+ YW1jb21wYXJlZGF0dW1zICE9IE5VTEwpOworCQlib29sCQlzdXBwb3J0c19pb3MgPSAoYW1y b3V0aW5lLT5hbWNhbnJldHVybiAhPSBOVUxMKTsKKwkJYm9vbAkJaXNfcGFydGlhbCA9IChp bmRleEluZm8tPmlpX1ByZWRpY2F0ZSAhPSBOSUwpOworCQlFeHByQ29udGV4dCAqZWNvbnRl eHQgPSBHZXRQZXJUdXBsZUV4cHJDb250ZXh0KGVzdGF0ZSk7CisJCWludAkJCW51bV9kYXR1 bXMgPSBzdXBwb3J0c19pb3MgPworCQkJaW5kZXhJbmZvLT5paV9OdW1JbmRleEF0dHJzIDog aW5kZXhJbmZvLT5paV9OdW1JbmRleEtleUF0dHJzOworCisJCS8qIElmIHdlJ3ZlIHJldmll d2VkIGFsbCB0aGUgYXR0cmlidXRlcyBvbiB0aGlzIGluZGV4LCBtb3ZlIG9uICovCisJCWlm IChibXNfaXNfc3Vic2V0KGluZGV4SW5mby0+aWlfSW5kZXhlZEF0dHJzLCBtaXhfYXR0cnMp KQorCQkJY29udGludWU7CisKKwkJLyogQWRkIHBhcnRpYWwgaW5kZXggYXR0cmlidXRlcyAq LworCQlpZiAoaXNfcGFydGlhbCkKKwkJCXBfYXR0cnMgPSBibXNfYWRkX21lbWJlcnMocF9h dHRycywgaW5kZXhJbmZvLT5paV9QcmVkaWNhdGVBdHRycyk7CisKKwkJLyogQ29tcGFyZSB0 aGUgaW5kZXggZGF0dW1zIGZvciBlcXVhbGl0eSAqLworCQlmb3IgKGludCBqID0gMDsgaiA8 IG51bV9kYXR1bXM7IGorKykKKwkJeworCQkJQXR0ck51bWJlcglyZWxfYXR0cm51bSA9IGlu ZGV4SW5mby0+aWlfSW5kZXhBdHRyTnVtYmVyc1tqXTsKKwkJCWludAkJCXJlbF9hdHRyaWR4 ID0gcmVsX2F0dHJudW0gLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyOwor CQkJaW50CQkJbnRoX2V4cHIgPSAwOworCQkJaW50MTYJCXR5cGxlbjsKKwkJCWJvb2wJCXR5 cGJ5dmFsOworCQkJRGF0dW0JCW9sZF92YWx1ZTsKKwkJCURhdHVtCQluZXdfdmFsdWU7CisJ CQlib29sCQlvbGRfbnVsbDsKKwkJCWJvb2wJCW5ld19udWxsOworCQkJYm9vbAkJdmFsdWVz X2VxdWFsID0gZmFsc2U7CisKKwkJCS8qIFN5c3RlbSBhdHRyaWJ1dGVzICovCisJCQlpZiAo cmVsX2F0dHJudW0gPCAwKQorCQkJeworCQkJCS8qIEV4dHJhY3Qgc3lzdGVtIHZhbHVlcyBm cm9tIGJvdGggc2xvdHMgZm9yIHRoaXMgYXR0cmlidXRlICovCisJCQkJb2xkX3ZhbHVlID0g c2xvdF9nZXRzeXNhdHRyKG9sZF90dHMsIHJlbF9hdHRybnVtLCAmb2xkX251bGwpOworCQkJ CW5ld192YWx1ZSA9IHNsb3RfZ2V0c3lzYXR0cihuZXdfdHRzLCByZWxfYXR0cm51bSwgJm5l d19udWxsKTsKKworCQkJCS8qIFRoZSBvbmx5IGFsbG93ZWQgc3lzdGVtIGNvbHVtbnMgYXJl IE9JRHMsIHNvIGRvIHRoaXMgKi8KKwkJCQl2YWx1ZXNfZXF1YWwgPSAoRGF0dW1HZXRPYmpl Y3RJZChvbGRfdmFsdWUpID09IERhdHVtR2V0T2JqZWN0SWQobmV3X3ZhbHVlKSk7CisJCQkJ Z290byBlcXVhbGl0eV9kZXRlcm1pbmVkOworCQkJfQorCisJCQkvKgorCQkJICogVGhpcyBp cyBhbiBleHByZXNzaW9uIGF0dHJpYnV0ZSwgYnV0IGluIGFuIGVmZm9ydCB0byBhdm9pZCB0 aGUKKwkJCSAqIGV4cGVuc2Ugb2YgSW5kZXhGb3JtRGF0dW0gd2UncmUgbm93IGZhY2VkIHdp dGggdGVzdGluZyBmb3IKKwkJCSAqIGVxdWFsaXR5IHNvIHdlJ2xsIGhhdmUgdG8gZXhlYyB0 aGUgZXhwcmVzc2lvbnMgYW5kIHRlc3QgZm9yCisJCQkgKiBiaW5hcnkgZXF1YWxpdHkgb2Yg dGhlIHJlc3VsdHMuCisJCQkgKi8KKwkJCWVsc2UgaWYgKHJlbF9hdHRybnVtID09IDApCisJ CQl7CisJCQkJVHVwbGVUYWJsZVNsb3QgKnNhdmVfc2NhbnR1cGxlID0gZWNvbnRleHQtPmVj eHRfc2NhbnR1cGxlOworCQkJCU9pZAkJCWV4cHJfdHlwZV9vaWQ7CisJCQkJRXhwcgkgICAq ZXhwciA9IChFeHByICopIGxpc3RfbnRoKGluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnMsIG50 aF9leHByKTsKKwkJCQlFeHByU3RhdGUgICpzdGF0ZTsKKworCQkJCWlmIChpbmRleEluZm8t PmlpX0V4cHJlc3Npb25zU3RhdGUgPT0gTklMKQorCQkJCXsKKwkJCQkJLyogRmlyc3QgdGlt ZSB0aHJvdWdoLCBzZXQgdXAgZXhwcmVzc2lvbiBldmFsdWF0aW9uIHN0YXRlICovCisJCQkJ CWluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnNTdGF0ZSA9CisJCQkJCQlFeGVjUHJlcGFyZUV4 cHJMaXN0KGluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnMsIGVzdGF0ZSk7CisJCQkJfQorCisJ CQkJc3RhdGUgPSAoRXhwclN0YXRlICopIGxpc3RfbnRoKGluZGV4SW5mby0+aWlfRXhwcmVz c2lvbnNTdGF0ZSwgbnRoX2V4cHIpOworCisJCQkJZWNvbnRleHQtPmVjeHRfc2NhbnR1cGxl ID0gb2xkX3R0czsKKwkJCQlvbGRfdmFsdWUgPSBFeGVjRXZhbEV4cHJTd2l0Y2hDb250ZXh0 KHN0YXRlLAorCQkJCQkJCQkJCQkJCSAgR2V0UGVyVHVwbGVFeHByQ29udGV4dChlc3RhdGUp LAorCQkJCQkJCQkJCQkJCSAgJm9sZF9udWxsKTsKKworCQkJCWVjb250ZXh0LT5lY3h0X3Nj YW50dXBsZSA9IG5ld190dHM7CisJCQkJbmV3X3ZhbHVlID0gRXhlY0V2YWxFeHByU3dpdGNo Q29udGV4dChzdGF0ZSwKKwkJCQkJCQkJCQkJCQkgIEdldFBlclR1cGxlRXhwckNvbnRleHQo ZXN0YXRlKSwKKwkJCQkJCQkJCQkJCQkgICZuZXdfbnVsbCk7CisKKwkJCQllY29udGV4dC0+ ZWN4dF9zY2FudHVwbGUgPSBzYXZlX3NjYW50dXBsZTsKKworCQkJCS8qCisJCQkJICogTk9U RTogdGVzdCBmb3IgTlVMTCBjYXNlcyBoZXJlIHRvIHBvdGVudGlhbGx5IGF2b2lkIGxvb2tp bmcKKwkJCQkgKiB1cCB0aGUgdHlwZSBpbmZvcm1hdGlvbi4gIEl0J3MgYSB0YWQgcmVkdW5k YW50LCBidXQgd29ydGgKKwkJCQkgKiBpdC4KKwkJCQkgKi8KKworCQkJCS8qIEEgY2hhbmdl IHRvL2Zyb20gTlVMTCwgc28gbm90IGVxdWFsICovCisJCQkJaWYgKG9sZF9udWxsICE9IG5l d19udWxsKQorCQkJCXsKKwkJCQkJdmFsdWVzX2VxdWFsID0gZmFsc2U7CisJCQkJCWdvdG8g ZXF1YWxpdHlfZGV0ZXJtaW5lZDsKKwkJCQl9CisKKwkJCQkvKiBCb3RoIE5VTEwsIG5vIGNo YW5nZSByZWNvcmQgYXMgdW5tb2RpZmllZCAqLworCQkJCWlmIChvbGRfbnVsbCkKKwkJCQl7 CisJCQkJCXZhbHVlc19lcXVhbCA9IHRydWU7CisJCQkJCWdvdG8gZXF1YWxpdHlfZGV0ZXJt aW5lZDsKKwkJCQl9CisKKwkJCQkvKiBHZXQgdHlwZSBPSUQgZnJvbSB0aGUgZXhwcmVzc2lv biAqLworCQkJCWV4cHJfdHlwZV9vaWQgPSBleHByVHlwZSgoTm9kZSAqKSBleHByKTsKKwor CQkJCS8qIEdldCB0eXBlIGluZm9ybWF0aW9uIGZyb20gdGhlIE9JRCAqLworCQkJCWdldF90 eXBsZW5ieXZhbChleHByX3R5cGVfb2lkLCAmdHlwbGVuLCAmdHlwYnl2YWwpOworCQkJfQor CQkJLyogTm90IGEgc3lzdGVtIG9yIGV4cHJlc3Npb24gYXR0cmlidXRlICovCisJCQllbHNl CisJCQl7CisJCQkJQ29tcGFjdEF0dHJpYnV0ZSAqYXR0ID0gVHVwbGVEZXNjQ29tcGFjdEF0 dHIodHVwZGVzYywgcmVsX2F0dHJudW0gLSAxKTsKKworCQkJCS8qIEV4dHJhY3QgdmFsdWVz IGZyb20gYm90aCBzbG90cyBmb3IgdGhpcyBhdHRyaWJ1dGUgKi8KKwkJCQlvbGRfdmFsdWUg PSBzbG90X2dldGF0dHIob2xkX3R0cywgcmVsX2F0dHJudW0sICZvbGRfbnVsbCk7CisJCQkJ bmV3X3ZhbHVlID0gc2xvdF9nZXRhdHRyKG5ld190dHMsIHJlbF9hdHRybnVtLCAmbmV3X251 bGwpOworCisJCQkJdHlwbGVuID0gYXR0LT5hdHRsZW47CisJCQkJdHlwYnl2YWwgPSBhdHQt PmF0dGJ5dmFsOworCQkJfQorCisJCQkvKiBBIGNoYW5nZSB0by9mcm9tIE5VTEwsIHNvIG5v dCBlcXVhbCAqLworCQkJaWYgKG9sZF9udWxsICE9IG5ld19udWxsKQorCQkJeworCQkJCXZh bHVlc19lcXVhbCA9IGZhbHNlOworCQkJCWdvdG8gZXF1YWxpdHlfZGV0ZXJtaW5lZDsKKwkJ CX0KKworCQkJLyogQm90aCBOVUxMLCBubyBjaGFuZ2UgcmVjb3JkIGFzIHVubW9kaWZpZWQg Ki8KKwkJCWlmIChvbGRfbnVsbCkKKwkJCXsKKwkJCQl2YWx1ZXNfZXF1YWwgPSB0cnVlOwor CQkJCWdvdG8gZXF1YWxpdHlfZGV0ZXJtaW5lZDsKKwkJCX0KKworCQkJaWYgKGhhc19hbV9j b21wYXJlKQorCQkJeworCQkJCS8qCisJCQkJICogTk9URTogRm9yIEFNIGNvbXBhcmlzb24s IHBhc3MgdGhlIDEtYmFzZWQgaW5kZXggYXR0cmlidXRlCisJCQkJICogbnVtYmVyLiBUaGUg QU0ncyBjb21wYXJlIGZ1bmN0aW9uIGV4cGVjdHMgdGhlIHNhbWUKKwkJCQkgKiBudW1iZXJp bmcgYXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBBTS4KKwkJCQkgKi8KKwkJCQl2YWx1ZXNf ZXF1YWwgPSBhbXJvdXRpbmUtPmFtY29tcGFyZWRhdHVtcyhpbmRleCwgaiArIDEsCisJCQkJ CQkJCQkJCQkJCSAgb2xkX3ZhbHVlLCBvbGRfbnVsbCwKKwkJCQkJCQkJCQkJCQkJICBuZXdf dmFsdWUsIG5ld19udWxsKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQl2YWx1ZXNfZXF1 YWwgPSBkYXR1bUlzRXF1YWwob2xkX3ZhbHVlLCBuZXdfdmFsdWUsIHR5cGJ5dmFsLCB0eXBs ZW4pOworCQkJfQorCisJZXF1YWxpdHlfZGV0ZXJtaW5lZDo7CisJCQlpZiAoIXZhbHVlc19l cXVhbCkKKwkJCQlpZiAocmVsX2F0dHJudW0gPT0gMCkKKwkJCQl7CisJCQkJCUV4cHIJICAg KmV4cHIgPSAoRXhwciAqKSBsaXN0X250aChpbmRleEluZm8tPmlpX0V4cHJlc3Npb25zLCBu dGhfZXhwcik7CisKKwkJCQkJcHVsbF92YXJhdHRub3MoKE5vZGUgKikgZXhwciwgcmVsaW5m by0+cmlfUmFuZ2VUYWJsZUluZGV4LCAmbV9hdHRycyk7CisJCQkJfQorCQkJCWVsc2UKKwkJ CQkJbV9hdHRycyA9IGJtc19hZGRfbWVtYmVyKG1fYXR0cnMsIHJlbF9hdHRyaWR4KTsKKwkJ CWVsc2UKKwkJCQl1X2F0dHJzID0gYm1zX2FkZF9tZW1iZXIodV9hdHRycywgcmVsX2F0dHJp ZHgpOworCisJCQlpZiAocmVsX2F0dHJudW0gPT0gMCkKKwkJCQludGhfZXhwcisrOworCQl9 CisKKwkJLyoKKwkJICogSGVyZSB3ZSBrbm93IGFsbCB0aGUgYXR0cmlidXRlcyB0aGF0IG1p Z2h0IGJlIG1vZGlmaWVkIGFuZCBhbGwKKwkJICogdGhvc2Ugd2Uga25vdyBoYXZlbid0IGJl ZW4gYWNyb3NzIGFsbCBpbmRleGVzLiAgVGFrZSB0aGUgZGlmZmVyZW5jZQorCQkgKiBhbmQg YWRkIGl0IHRvIHRoZSBtb2RpZmllZCBpbmRleGVkIGF0dHJpYnV0ZXMgc2V0LgorCQkgKi8K KwkJbV9hdHRycyA9IGJtc19kZWxfbWVtYmVycyhtX2F0dHJzLCB1X2F0dHJzKTsKKwkJcF9h dHRycyA9IGJtc19kZWxfbWVtYmVycyhwX2F0dHJzLCB1X2F0dHJzKTsKKwkJbWl4X2F0dHJz ID0gYm1zX2FkZF9tZW1iZXJzKG1peF9hdHRycywgbV9hdHRycyk7CisJCW1peF9hdHRycyA9 IGJtc19hZGRfbWVtYmVycyhtaXhfYXR0cnMsIHBfYXR0cnMpOworCisJCWJtc19mcmVlKG1f YXR0cnMpOworCQlibXNfZnJlZSh1X2F0dHJzKTsKKwkJYm1zX2ZyZWUocF9hdHRycyk7CisJ fQorCisJcmV0dXJuIG1peF9hdHRyczsKK30KIAogLyoKICAqIFZlcmlmeSB0aGF0IHRoZSB0 dXBsZXMgdG8gYmUgcHJvZHVjZWQgYnkgSU5TRVJUIG1hdGNoIHRoZQpAQCAtMjE2OCwxNCAr MjM5NywxNyBAQCBFeGVjVXBkYXRlUHJlcGFyZVNsb3QoUmVzdWx0UmVsSW5mbyAqcmVzdWx0 UmVsSW5mbywKICAqLwogc3RhdGljIFRNX1Jlc3VsdAogRXhlY1VwZGF0ZUFjdChNb2RpZnlU YWJsZUNvbnRleHQgKmNvbnRleHQsIFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCi0J CQkgIEl0ZW1Qb2ludGVyIHR1cGxlaWQsIEhlYXBUdXBsZSBvbGR0dXBsZSwgVHVwbGVUYWJs ZVNsb3QgKnNsb3QsCi0JCQkgIGJvb2wgY2FuU2V0VGFnLCBVcGRhdGVDb250ZXh0ICp1cGRh dGVDeHQpCisJCQkgIEl0ZW1Qb2ludGVyIHR1cGxlaWQsIEhlYXBUdXBsZSBvbGR0dXBsZSwg VHVwbGVUYWJsZVNsb3QgKm9sZFNsb3QsCisJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LCBi b29sIGNhblNldFRhZywgVXBkYXRlQ29udGV4dCAqdXBkYXRlQ3h0KQogewogCUVTdGF0ZQkg ICAqZXN0YXRlID0gY29udGV4dC0+ZXN0YXRlOwogCVJlbGF0aW9uCXJlc3VsdFJlbGF0aW9u RGVzYyA9IHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYzsKIAlib29sCQlwYXJ0aXRp b25fY29uc3RyYWludF9mYWlsZWQ7CiAJVE1fUmVzdWx0CXJlc3VsdDsKIAorCS8qIFRoZSBz ZXQgb2YgbW9kaWZpZWQgaW5kZXhlZCBhdHRyaWJ1dGVzIHRoYXQgdHJpZ2dlciBuZXcgaW5k ZXggZW50cmllcyAqLworCUJpdG1hcHNldCAgKm1peF9hdHRycyA9IE5VTEw7CisKIAl1cGRh dGVDeHQtPmNyb3NzUGFydFVwZGF0ZSA9IGZhbHNlOwogCiAJLyoKQEAgLTIyOTIsOSArMjUy NCwzOCBAQCBscmVwbGFjZToKIAkJRXhlY0NvbnN0cmFpbnRzKHJlc3VsdFJlbEluZm8sIHNs b3QsIGVzdGF0ZSk7CiAKIAkvKgotCSAqIHJlcGxhY2UgdGhlIGhlYXAgdHVwbGUKKwkgKiBJ ZGVudGlmeSB3aGljaCwgaWYgYW55LCBpbmRleGVkIGF0dHJpYnV0ZXMgd2VyZSBtb2RpZmll ZCBoZXJlIHNvIHRoYXQKKwkgKiB3ZSBtaWdodCByZXVzZSBpdCBpbiBhIGZldyBwbGFjZXMu CisJICovCisJYm1zX2ZyZWUocmVzdWx0UmVsSW5mby0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xz KTsKKwlyZXN1bHRSZWxJbmZvLT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMgPSBOVUxMOworCisJ LyoKKwkgKiBEdXJpbmcgdXBkYXRlcyB3ZSdsbCBuZWVkIGEgYml0IG1vcmUgaW5mb3JtYXRp b24gaW4gSW5kZXhJbmZvIGJ1dCB3ZSd2ZQorCSAqIGRlbGF5ZWQgYWRkaW5nIGl0IHVudGls IGhlcmUuICBXZSBjaGVjayB0byBlbnN1cmUgdGhhdCB0aGVyZSBhcmUKKwkgKiBpbmRleGVz LCB0aGF0IHNvbWV0aGluZyBoYXMgY2hhbmdlZCB0aGF0IGlzIGluZGV4ZWQsIGFuZCB0aGF0 IHRoZSBmaXJzdAorCSAqIGluZGV4IGRvZXNuJ3QgeWV0IGhhdmUgaWlfSW5kZXhlZEF0dHJz IHNldCBhcyBhIHdheSB0byBlbnN1cmUgd2Ugb25seQorCSAqIGJ1aWxkIHRoaXMgd2hlbiBu ZWVkZWQgYW5kIG9ubHkgb25jZS4gIFdlIGRvbid0IGJ1aWxkIHRoaXMgaW4KKwkgKiBFeGVj T3BlbkluZGljaWVzKCkgYXMgaXQgaXMgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQgd2hlbiBub3Qg cGVyZm9ybWluZyBhbgorCSAqIHVwZGF0ZS4KKwkgKi8KKwlpZiAocmVzdWx0UmVsSW5mby0+ cmlfTnVtSW5kaWNlcyA+IDAgJiYKKwkJYm1zX2lzX2VtcHR5KHJlc3VsdFJlbEluZm8tPnJp X0luZGV4UmVsYXRpb25JbmZvWzBdLT5paV9JbmRleGVkQXR0cnMpKQorCQlCdWlsZFVwZGF0 ZUluZGV4SW5mbyhyZXN1bHRSZWxJbmZvKTsKKworCS8qCisJICogTmV4dCB1cCB3ZSBuZWVk IHRvIGZpbmQgb3V0IHRoZSBzZXQgb2YgaW5kZXhlZCBhdHRyaWJ1dGVzIHRoYXQgaGF2ZQor CSAqIGNoYW5nZWQgaW4gdmFsdWUgYW5kIHNob3VsZCB0cmlnZ2VyIGEgbmV3IGluZGV4IHR1 cGxlLiAgV2UgY291bGQgc3RhcnQKKwkgKiB3aXRoIHRoZSBzZXQgb2YgdXBkYXRlZCBjb2x1 bW5zIHZpYSBFeGVjR2V0VXBkYXRlZENvbHMoKSwgYnV0IGlmIHdlIGRvCisJICogd2Ugd2ls bCBvdmVybG9vayBhdHRyaWJ1dGVzIGRpcmVjdGx5IG1vZGlmaWVkIGJ5IGhlYXBfbW9kaWZ5 X3R1cGxlKCkKKwkgKiB3aGljaCBhcmUgbm90IGtub3duIHRvIEV4ZWNHZXRVcGRhdGVkQ29s cygpLgorCSAqLworCW1peF9hdHRycyA9IEV4ZWNDaGVja0luZGV4ZWRBdHRyc0ZvckNoYW5n ZXMocmVzdWx0UmVsSW5mbywgZXN0YXRlLCBvbGRTbG90LCBzbG90KTsKKworCS8qCisJICog Q2FsbCBpbnRvIHRoZSB0YWJsZSBBTSB0byB1cGRhdGUgdGhlIGhlYXAgdHVwbGUuCiAJICoK LQkgKiBOb3RlOiBpZiBlc19jcm9zc2NoZWNrX3NuYXBzaG90IGlzbid0IEludmFsaWRTbmFw c2hvdCwgd2UgY2hlY2sgdGhhdAorCSAqIE5PVEU6IGlmIGVzX2Nyb3NzY2hlY2tfc25hcHNo b3QgaXNuJ3QgSW52YWxpZFNuYXBzaG90LCB3ZSBjaGVjayB0aGF0CiAJICogdGhlIHJvdyB0 byBiZSB1cGRhdGVkIGlzIHZpc2libGUgdG8gdGhhdCBzbmFwc2hvdCwgYW5kIHRocm93IGEK IAkgKiBjYW4ndC1zZXJpYWxpemUgZXJyb3IgaWYgbm90LiBUaGlzIGlzIGEgc3BlY2lhbC1j YXNlIGJlaGF2aW9yIG5lZWRlZAogCSAqIGZvciByZWZlcmVudGlhbCBpbnRlZ3JpdHkgdXBk YXRlcyBpbiB0cmFuc2FjdGlvbi1zbmFwc2hvdCBtb2RlCkBAIC0yMzA2LDggKzI1NjcsMTIg QEAgbHJlcGxhY2U6CiAJCQkJCQkJCWVzdGF0ZS0+ZXNfY3Jvc3NjaGVja19zbmFwc2hvdCwK IAkJCQkJCQkJdHJ1ZSAvKiB3YWl0IGZvciBjb21taXQgKi8gLAogCQkJCQkJCQkmY29udGV4 dC0+dG1mZCwgJnVwZGF0ZUN4dC0+bG9ja21vZGUsCisJCQkJCQkJCW1peF9hdHRycywKIAkJ CQkJCQkJJnVwZGF0ZUN4dC0+dXBkYXRlSW5kZXhlcyk7CiAKKwlBc3NlcnQoYm1zX2lzX2Vt cHR5KHJlc3VsdFJlbEluZm8tPnJpX0NoYW5nZWRJbmRleGVkQ29scykpOworCXJlc3VsdFJl bEluZm8tPnJpX0NoYW5nZWRJbmRleGVkQ29scyA9IG1peF9hdHRyczsKKwogCXJldHVybiBy ZXN1bHQ7CiB9CiAKQEAgLTIzMjUsNyArMjU5MCw3IEBAIEV4ZWNVcGRhdGVFcGlsb2d1ZShN b2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsIFVwZGF0ZUNvbnRleHQgKnVwZGF0ZUN4dCwK IAlNb2RpZnlUYWJsZVN0YXRlICptdHN0YXRlID0gY29udGV4dC0+bXRzdGF0ZTsKIAlMaXN0 CSAgICpyZWNoZWNrSW5kZXhlcyA9IE5JTDsKIAotCS8qIGluc2VydCBpbmRleCBlbnRyaWVz IGZvciB0dXBsZSBpZiBuZWNlc3NhcnkgKi8KKwkvKiBJbnNlcnQgaW5kZXggZW50cmllcyBm b3IgdHVwbGUgaWYgbmVjZXNzYXJ5ICovCiAJaWYgKHJlc3VsdFJlbEluZm8tPnJpX051bUlu ZGljZXMgPiAwICYmICh1cGRhdGVDeHQtPnVwZGF0ZUluZGV4ZXMgIT0gVFVfTm9uZSkpCiAJ CXJlY2hlY2tJbmRleGVzID0gRXhlY0luc2VydEluZGV4VHVwbGVzKHJlc3VsdFJlbEluZm8s CiAJCQkJCQkJCQkJCSAgIHNsb3QsIGNvbnRleHQtPmVzdGF0ZSwKQEAgLTI1MjQsOCArMjc4 OSw5IEBAIEV4ZWNVcGRhdGUoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LCBSZXN1bHRS ZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQkgKi8KIHJlZG9fYWN0OgogCQlsb2NrZWR0aWQg PSAqdHVwbGVpZDsKLQkJcmVzdWx0ID0gRXhlY1VwZGF0ZUFjdChjb250ZXh0LCByZXN1bHRS ZWxJbmZvLCB0dXBsZWlkLCBvbGR0dXBsZSwgc2xvdCwKLQkJCQkJCQkgICBjYW5TZXRUYWcs ICZ1cGRhdGVDeHQpOworCisJCXJlc3VsdCA9IEV4ZWNVcGRhdGVBY3QoY29udGV4dCwgcmVz dWx0UmVsSW5mbywgdHVwbGVpZCwgb2xkdHVwbGUsIG9sZFNsb3QsCisJCQkJCQkJICAgc2xv dCwgY2FuU2V0VGFnLCAmdXBkYXRlQ3h0KTsKIAogCQkvKgogCQkgKiBJZiBFeGVjVXBkYXRl QWN0IHJlcG9ydHMgdGhhdCBhIGNyb3NzLXBhcnRpdGlvbiB1cGRhdGUgd2FzIGRvbmUsCkBA IC0zMjEzLDggKzM0NzksOCBAQCBsbWVyZ2VfbWF0Y2hlZDoKIAkJCQkJQXNzZXJ0KG9sZHR1 cGxlID09IE5VTEwpOwogCiAJCQkJCXJlc3VsdCA9IEV4ZWNVcGRhdGVBY3QoY29udGV4dCwg cmVzdWx0UmVsSW5mbywgdHVwbGVpZCwKLQkJCQkJCQkJCQkgICBOVUxMLCBuZXdzbG90LCBj YW5TZXRUYWcsCi0JCQkJCQkJCQkJICAgJnVwZGF0ZUN4dCk7CisJCQkJCQkJCQkJICAgTlVM TCwgcmVzdWx0UmVsSW5mby0+cmlfb2xkVHVwbGVTbG90LAorCQkJCQkJCQkJCSAgIG5ld3Ns b3QsIGNhblNldFRhZywgJnVwZGF0ZUN4dCk7CiAKIAkJCQkJLyoKIAkJCQkJICogQXMgaW4g RXhlY1VwZGF0ZSgpLCBpZiBFeGVjVXBkYXRlQWN0KCkgcmVwb3J0cyB0aGF0IGEKQEAgLTMy MzksNiArMzUwNSw3IEBAIGxtZXJnZV9tYXRjaGVkOgogCQkJCQkJCQkJICAgdHVwbGVpZCwg TlVMTCwgbmV3c2xvdCk7CiAJCQkJCW10c3RhdGUtPm10X21lcmdlX3VwZGF0ZWQgKz0gMTsK IAkJCQl9CisKIAkJCQlicmVhazsKIAogCQkJY2FzZSBDTURfREVMRVRFOgpAQCAtNDM0NSw3 ICs0NjEyLDcgQEAgRXhlY01vZGlmeVRhYmxlKFBsYW5TdGF0ZSAqcHN0YXRlKQogCQkgKiBG b3IgVVBEQVRFL0RFTEVURS9NRVJHRSwgZmV0Y2ggdGhlIHJvdyBpZGVudGl0eSBpbmZvIGZv ciB0aGUgdHVwbGUKIAkJICogdG8gYmUgdXBkYXRlZC9kZWxldGVkL21lcmdlZC4gIEZvciBh IGhlYXAgcmVsYXRpb24sIHRoYXQncyBhIFRJRDsKIAkJICogb3RoZXJ3aXNlIHdlIG1heSBo YXZlIGEgd2hvbGVyb3cganVuayBhdHRyIHRoYXQgY2FycmllcyB0aGUgb2xkCi0JCSAqIHR1 cGxlIGluIHRvdG8uICBLZWVwIHRoaXMgaW4gc3RlcCB3aXRoIHRoZSBwYXJ0IG9mCisJCSAq IHR1cGxlIGluIHRvdGFsLiAgS2VlcCB0aGlzIGluIHN0ZXAgd2l0aCB0aGUgcGFydCBvZgog CQkgKiBFeGVjSW5pdE1vZGlmeVRhYmxlIHRoYXQgc2V0cyB1cCByaV9Sb3dJZEF0dE5vLgog CQkgKi8KIAkJaWYgKG9wZXJhdGlvbiA9PSBDTURfVVBEQVRFIHx8IG9wZXJhdGlvbiA9PSBD TURfREVMRVRFIHx8CkBAIC00NTI1LDYgKzQ3OTIsNyBAQCBFeGVjTW9kaWZ5VGFibGUoUGxh blN0YXRlICpwc3RhdGUpCiAJCQkJLyogTm93IGFwcGx5IHRoZSB1cGRhdGUuICovCiAJCQkJ c2xvdCA9IEV4ZWNVcGRhdGUoJmNvbnRleHQsIHJlc3VsdFJlbEluZm8sIHR1cGxlaWQsIG9s ZHR1cGxlLAogCQkJCQkJCQkgIG9sZFNsb3QsIHNsb3QsIG5vZGUtPmNhblNldFRhZyk7CisK IAkJCQlpZiAodHVwbG9jaykKIAkJCQkJVW5sb2NrVHVwbGUocmVzdWx0UmVsSW5mby0+cmlf UmVsYXRpb25EZXNjLCB0dXBsZWlkLAogCQkJCQkJCQlJbnBsYWNlVXBkYXRlVHVwbGVMb2Nr KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL2JpdG1hcHNldC5jIGIvc3JjL2Jh Y2tlbmQvbm9kZXMvYml0bWFwc2V0LmMKaW5kZXggYTQ3NjU4NzZjMzEuLjE3ZjVmNjZiMjVm IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9iaXRtYXBzZXQuYworKysgYi9zcmMv YmFja2VuZC9ub2Rlcy9iaXRtYXBzZXQuYwpAQCAtMjM4LDYgKzIzOCwxMCBAQCBibXNfbWFr ZV9zaW5nbGV0b24oaW50IHgpCiB2b2lkCiBibXNfZnJlZShCaXRtYXBzZXQgKmEpCiB7Cisj aWYgVVNFX0FTU0VSVF9DSEVDS0lORworCUFzc2VydChibXNfaXNfdmFsaWRfc2V0KGEpKTsK KyNlbmRpZgorCiAJaWYgKGEpCiAJCXBmcmVlKGEpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3Mu YwppbmRleCAyY2FlYzYyMWQ3My4uZGQwOTJiYWNhZDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL25vZGVzL21ha2VmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5j cy5jCkBAIC04NTcsMTAgKzg1NywxNCBAQCBtYWtlSW5kZXhJbmZvKGludCBudW1hdHRycywg aW50IG51bWtleWF0dHJzLCBPaWQgYW1vaWQsIExpc3QgKmV4cHJlc3Npb25zLAogCS8qIGV4 cHJlc3Npb25zICovCiAJbi0+aWlfRXhwcmVzc2lvbnMgPSBleHByZXNzaW9uczsKIAluLT5p aV9FeHByZXNzaW9uc1N0YXRlID0gTklMOworCW4tPmlpX0V4cHJlc3Npb25zQXR0cnMgPSBO VUxMOwogCiAJLyogcHJlZGljYXRlcyAgKi8KIAluLT5paV9QcmVkaWNhdGUgPSBwcmVkaWNh dGVzOwogCW4tPmlpX1ByZWRpY2F0ZVN0YXRlID0gTlVMTDsKKwluLT5paV9QcmVkaWNhdGVB dHRycyA9IE5VTEw7CisJbi0+aWlfQ2hlY2tlZFByZWRpY2F0ZSA9IGZhbHNlOworCW4tPmlp X1ByZWRpY2F0ZVNhdGlzZmllZCA9IGZhbHNlOwogCiAJLyogZXhjbHVzaW9uIGNvbnN0cmFp bnRzICovCiAJbi0+aWlfRXhjbHVzaW9uT3BzID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IDMyNzI1YzQ4NjIzLi43NGM2NzQ5OWQx YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIu YworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCkBAIC0y NzUsNyArMjc1LDYgQEAKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRpb24u aCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgiCiAjaW5jbHVkZSAi cmVwbGljYXRpb24vb3JpZ2luLmgiCi0jaW5jbHVkZSAicmVwbGljYXRpb24vc2xvdC5oIgog I2luY2x1ZGUgInJlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgiCiAjaW5jbHVkZSAicmVwbGlj YXRpb24vd29ya2VyX2ludGVybmFsLmgiCiAjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlSGFu ZGxlci5oIgpAQCAtMjg1LDEyICsyODQsMTQgQEAKICNpbmNsdWRlICJzdG9yYWdlL3Byb2Nh cnJheS5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9h Y2wuaCIKKyNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1ZGUgInV0aWxzL2d1Yy5o IgogI2luY2x1ZGUgInV0aWxzL2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hl LmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9wZ19s c24uaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWxjYWNo ZS5oIgogI2luY2x1ZGUgInV0aWxzL3Jscy5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3Iu aCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgpAQCAtMTExMCwxNSArMTExMSwxOCBA QCBzbG90X3N0b3JlX2RhdGEoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIExvZ2ljYWxSZXBSZWxN YXBFbnRyeSAqcmVsLAogICogInNsb3QiIGlzIGZpbGxlZCB3aXRoIGEgY29weSBvZiB0aGUg dHVwbGUgaW4gInNyY3Nsb3QiLCByZXBsYWNpbmcKICAqIGNvbHVtbnMgcHJvdmlkZWQgaW4g InR1cGxlRGF0YSIgYW5kIGxlYXZpbmcgb3RoZXJzIGFzLWlzLgogICoKKyAqIFJldHVybnMg YSBiaXRtYXAgb2YgdGhlIG1vZGlmaWVkIGNvbHVtbnMuCisgKgogICogQ2F1dGlvbjogdW5y ZXBsYWNlZCBwYXNzLWJ5LXJlZiBjb2x1bW5zIGluICJzbG90IiB3aWxsIHBvaW50IGludG8g dGhlCiAgKiBzdG9yYWdlIGZvciAic3Jjc2xvdCIuICBUaGlzIGlzIE9LIGZvciBjdXJyZW50 IHVzYWdlLCBidXQgc29tZWRheSB3ZSBtYXkKICAqIG5lZWQgdG8gbWF0ZXJpYWxpemUgInNs b3QiIGF0IHRoZSBlbmQgdG8gbWFrZSBpdCBpbmRlcGVuZGVudCBvZiAic3Jjc2xvdCIuCiAg Ki8KLXN0YXRpYyB2b2lkCitzdGF0aWMgQml0bWFwc2V0ICoKIHNsb3RfbW9kaWZ5X2RhdGEo VHVwbGVUYWJsZVNsb3QgKnNsb3QsIFR1cGxlVGFibGVTbG90ICpzcmNzbG90LAogCQkJCSBM b2dpY2FsUmVwUmVsTWFwRW50cnkgKnJlbCwKIAkJCQkgTG9naWNhbFJlcFR1cGxlRGF0YSAq dHVwbGVEYXRhKQogeworCUJpdG1hcHNldCAgKm1vZGlmaWVkID0gTlVMTDsKIAlpbnQJCQlu YXR0cyA9IHNsb3QtPnR0c190dXBsZURlc2NyaXB0b3ItPm5hdHRzOwogCWludAkJCWk7CiAK QEAgLTExOTUsNiArMTE5OSwyNyBAQCBzbG90X21vZGlmeV9kYXRhKFR1cGxlVGFibGVTbG90 ICpzbG90LCBUdXBsZVRhYmxlU2xvdCAqc3Jjc2xvdCwKIAkJCQlzbG90LT50dHNfaXNudWxs W2ldID0gdHJ1ZTsKIAkJCX0KIAorCQkJLyoKKwkJCSAqIERldGVybWluZSBpZiB0aGUgcmVw bGljYXRlZCB2YWx1ZSBjaGFuZ2VkIHRoZSBsb2NhbCB2YWx1ZSBieQorCQkJICogY29tcGFy aW5nIHNsb3RzLiAgVGhpcyBpcyBhIHN1YnNldCBvZgorCQkJICogRXhlY0NoZWNrSW5kZXhl ZEF0dHJzRm9yQ2hhbmdlcy4KKwkJCSAqLworCQkJaWYgKHNyY3Nsb3QtPnR0c19pc251bGxb aV0gIT0gc2xvdC0+dHRzX2lzbnVsbFtpXSkKKwkJCXsKKwkJCQkvKiBPbmUgaXMgTlVMTCwg dGhlIG90aGVyIGlzIG5vdCBzbyB0aGUgdmFsdWUgY2hhbmdlZCAqLworCQkJCW1vZGlmaWVk ID0gYm1zX2FkZF9tZW1iZXIobW9kaWZpZWQsIGkgKyAxIC0gRmlyc3RMb3dJbnZhbGlkSGVh cEF0dHJpYnV0ZU51bWJlcik7CisJCQl9CisJCQllbHNlIGlmICghc3Jjc2xvdC0+dHRzX2lz bnVsbFtpXSkKKwkJCXsKKwkJCQkvKiBCb3RoIGFyZSBub3QgTlVMTCwgY29tcGFyZSB0aGVp ciB2YWx1ZXMgKi8KKworCQkJCWlmICghZGF0dW1Jc0VxdWFsKHNyY3Nsb3QtPnR0c192YWx1 ZXNbaV0sCisJCQkJCQkJCSAgc2xvdC0+dHRzX3ZhbHVlc1tpXSwKKwkJCQkJCQkJICBhdHQt PmF0dGJ5dmFsLAorCQkJCQkJCQkgIGF0dC0+YXR0bGVuKSkKKwkJCQkJbW9kaWZpZWQgPSBi bXNfYWRkX21lbWJlcihtb2RpZmllZCwgaSArIDEgLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0 cmlidXRlTnVtYmVyKTsKKwkJCX0KKwogCQkJLyogUmVzZXQgYXR0bnVtIGZvciBlcnJvciBj YWxsYmFjayAqLwogCQkJYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnLnJlbW90ZV9hdHRudW0g PSAtMTsKIAkJfQpAQCAtMTIwMiw2ICsxMjI3LDggQEAgc2xvdF9tb2RpZnlfZGF0YShUdXBs ZVRhYmxlU2xvdCAqc2xvdCwgVHVwbGVUYWJsZVNsb3QgKnNyY3Nsb3QsCiAKIAkvKiBBbmQg ZmluYWxseSwgZGVjbGFyZSB0aGF0ICJzbG90IiBjb250YWlucyBhIHZhbGlkIHZpcnR1YWwg dHVwbGUgKi8KIAlFeGVjU3RvcmVWaXJ0dWFsVHVwbGUoc2xvdCk7CisKKwlyZXR1cm4gbW9k aWZpZWQ7CiB9CiAKIC8qCkBAIC0yOTE4LDYgKzI5NDUsNyBAQCBhcHBseV9oYW5kbGVfdXBk YXRlX2ludGVybmFsKEFwcGx5RXhlY3V0aW9uRGF0YSAqZWRhdGEsCiAJQ29uZmxpY3RUdXBs ZUluZm8gY29uZmxpY3R0dXBsZSA9IHswfTsKIAlib29sCQlmb3VuZDsKIAlNZW1vcnlDb250 ZXh0IG9sZGN0eDsKKwlCaXRtYXBzZXQgICppbmRleGVkID0gTlVMTDsKIAogCUV2YWxQbGFu UXVhbEluaXQoJmVwcXN0YXRlLCBlc3RhdGUsIE5VTEwsIE5JTCwgLTEsIE5JTCk7CiAJRXhl Y09wZW5JbmRpY2VzKHJlbGluZm8sIGZhbHNlKTsKQEAgLTI5MzQsNiArMjk2Miw4IEBAIGFw cGx5X2hhbmRsZV91cGRhdGVfaW50ZXJuYWwoQXBwbHlFeGVjdXRpb25EYXRhICplZGF0YSwK IAkgKi8KIAlpZiAoZm91bmQpCiAJeworCQlCaXRtYXBzZXQgICptb2RpZmllZCA9IE5VTEw7 CisKIAkJLyoKIAkJICogUmVwb3J0IHRoZSBjb25mbGljdCBpZiB0aGUgdHVwbGUgd2FzIG1v ZGlmaWVkIGJ5IGEgZGlmZmVyZW50CiAJCSAqIG9yaWdpbi4KQEAgLTI5NTcsMTUgKzI5ODcs MjkgQEAgYXBwbHlfaGFuZGxlX3VwZGF0ZV9pbnRlcm5hbChBcHBseUV4ZWN1dGlvbkRhdGEg KmVkYXRhLAogCiAJCS8qIFByb2Nlc3MgYW5kIHN0b3JlIHJlbW90ZSB0dXBsZSBpbiB0aGUg c2xvdCAqLwogCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oR2V0UGVyVHVwbGVN ZW1vcnlDb250ZXh0KGVzdGF0ZSkpOwotCQlzbG90X21vZGlmeV9kYXRhKHJlbW90ZXNsb3Qs IGxvY2Fsc2xvdCwgcmVsbWFwZW50cnksIG5ld3R1cCk7CisJCW1vZGlmaWVkID0gc2xvdF9t b2RpZnlfZGF0YShyZW1vdGVzbG90LCBsb2NhbHNsb3QsIHJlbG1hcGVudHJ5LCBuZXd0dXAp OwogCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKIAorCQkvKgorCQkgKiBOb3Jt YWxseSB3ZSdkIGNhbGwgRXhlY0NoZWNrSW5kZXhlZEF0dHJGb3JDaGFuZ2VzIGJ1dCBoZXJl IHdlIGhhdmUKKwkJICogdGhlIHJlY29yZCBvZiBjaGFuZ2VkIGNvbHVtbnMgaW4gdGhlIHJl cGxpY2F0aW9uIHN0YXRlLCBzbyBsZXQncworCQkgKiB1c2UgdGhhdCBpbnN0ZWFkLgorCQkg Ki8KKwkJaW5kZXhlZCA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGluZm8tPnJp X1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJCQkJIElOREVYX0FUVFJfQklUTUFQX0lOREVYRUQp OworCisJCWJtc19mcmVlKHJlbGluZm8tPnJpX0NoYW5nZWRJbmRleGVkQ29scyk7CisJCXJl bGluZm8tPnJpX0NoYW5nZWRJbmRleGVkQ29scyA9IGJtc19pbnRfbWVtYmVycyhtb2RpZmll ZCwgaW5kZXhlZCk7CisJCWJtc19mcmVlKGluZGV4ZWQpOworCiAJCUV2YWxQbGFuUXVhbFNl dFNsb3QoJmVwcXN0YXRlLCByZW1vdGVzbG90KTsKIAogCQlJbml0Q29uZmxpY3RJbmRleGVz KHJlbGluZm8pOwogCi0JCS8qIERvIHRoZSBhY3R1YWwgdXBkYXRlLiAqLworCQkvKiBGaXJz dCBjaGVjayBwcml2aWxlZ2VzICovCiAJCVRhcmdldFByaXZpbGVnZXNDaGVjayhyZWxpbmZv LT5yaV9SZWxhdGlvbkRlc2MsIEFDTF9VUERBVEUpOworCisJCS8qIFRoZW4gZG8gdGhlIGFj dHVhbCB1cGRhdGUuICovCiAJCUV4ZWNTaW1wbGVSZWxhdGlvblVwZGF0ZShyZWxpbmZvLCBl c3RhdGUsICZlcHFzdGF0ZSwgbG9jYWxzbG90LAogCQkJCQkJCQkgcmVtb3Rlc2xvdCk7CiAJ fQpAQCAtMzQ1NSw2ICszNDk5LDggQEAgYXBwbHlfaGFuZGxlX3R1cGxlX3JvdXRpbmcoQXBw bHlFeGVjdXRpb25EYXRhICplZGF0YSwKIAkJCQlib29sCQlmb3VuZDsKIAkJCQlFUFFTdGF0 ZQllcHFzdGF0ZTsKIAkJCQlDb25mbGljdFR1cGxlSW5mbyBjb25mbGljdHR1cGxlID0gezB9 OworCQkJCUJpdG1hcHNldCAgKm1vZGlmaWVkID0gTlVMTDsKKwkJCQlCaXRtYXBzZXQgICpp bmRleGVkOwogCiAJCQkJLyogR2V0IHRoZSBtYXRjaGluZyBsb2NhbCB0dXBsZSBmcm9tIHRo ZSBwYXJ0aXRpb24uICovCiAJCQkJZm91bmQgPSBGaW5kUmVwbFR1cGxlSW5Mb2NhbFJlbChl ZGF0YSwgcGFydHJlbCwKQEAgLTM1MjMsOCArMzU2OSw4IEBAIGFwcGx5X2hhbmRsZV90dXBs ZV9yb3V0aW5nKEFwcGx5RXhlY3V0aW9uRGF0YSAqZWRhdGEsCiAJCQkJICogcmVtb3Rlc2xv dF9wYXJ0LgogCQkJCSAqLwogCQkJCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhH ZXRQZXJUdXBsZU1lbW9yeUNvbnRleHQoZXN0YXRlKSk7Ci0JCQkJc2xvdF9tb2RpZnlfZGF0 YShyZW1vdGVzbG90X3BhcnQsIGxvY2Fsc2xvdCwgcGFydF9lbnRyeSwKLQkJCQkJCQkJIG5l d3R1cCk7CisJCQkJbW9kaWZpZWQgPSBzbG90X21vZGlmeV9kYXRhKHJlbW90ZXNsb3RfcGFy dCwgbG9jYWxzbG90LCBwYXJ0X2VudHJ5LAorCQkJCQkJCQkJCQluZXd0dXApOwogCQkJCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOwogCiAJCQkJRXZhbFBsYW5RdWFsSW5pdCgm ZXBxc3RhdGUsIGVzdGF0ZSwgTlVMTCwgTklMLCAtMSwgTklMKTsKQEAgLTM1NDksNiArMzU5 NSwxOCBAQCBhcHBseV9oYW5kbGVfdHVwbGVfcm91dGluZyhBcHBseUV4ZWN1dGlvbkRhdGEg KmVkYXRhLAogCQkJCQlFdmFsUGxhblF1YWxTZXRTbG90KCZlcHFzdGF0ZSwgcmVtb3Rlc2xv dF9wYXJ0KTsKIAkJCQkJVGFyZ2V0UHJpdmlsZWdlc0NoZWNrKHBhcnRyZWxpbmZvLT5yaV9S ZWxhdGlvbkRlc2MsCiAJCQkJCQkJCQkJICBBQ0xfVVBEQVRFKTsKKworCQkJCQkvKgorCQkJ CQkgKiBOb3JtYWxseSB3ZSdkIGNhbGwgRXhlY0NoZWNrSW5kZXhlZEF0dHJGb3JDaGFuZ2Vz IGJ1dAorCQkJCQkgKiBoZXJlIHdlIGhhdmUgdGhlIHJlY29yZCBvZiBjaGFuZ2VkIGNvbHVt bnMgaW4gdGhlCisJCQkJCSAqIHJlcGxpY2F0aW9uIHN0YXRlLCBzbyBsZXQncyB1c2UgdGhh dCBpbnN0ZWFkLgorCQkJCQkgKi8KKwkJCQkJaW5kZXhlZCA9IFJlbGF0aW9uR2V0SW5kZXhB dHRyQml0bWFwKHBhcnRyZWxpbmZvLT5yaV9SZWxhdGlvbkRlc2MsCisJCQkJCQkJCQkJCQkJ CSBJTkRFWF9BVFRSX0JJVE1BUF9JTkRFWEVEKTsKKwkJCQkJYm1zX2ZyZWUocGFydHJlbGlu Zm8tPnJpX0NoYW5nZWRJbmRleGVkQ29scyk7CisJCQkJCXBhcnRyZWxpbmZvLT5yaV9DaGFu Z2VkSW5kZXhlZENvbHMgPSBibXNfaW50X21lbWJlcnMobW9kaWZpZWQsIGluZGV4ZWQpOwor CQkJCQlibXNfZnJlZShpbmRleGVkKTsKKwogCQkJCQlFeGVjU2ltcGxlUmVsYXRpb25VcGRh dGUocGFydHJlbGluZm8sIGVzdGF0ZSwgJmVwcXN0YXRlLAogCQkJCQkJCQkJCQkgbG9jYWxz bG90LCByZW1vdGVzbG90X3BhcnQpOwogCQkJCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxj YWNoZS5jCmluZGV4IDZiNjM0YzlmZmYxLi44Y2M5N2U0ZmJjYSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9jYWNoZS9yZWxjYWNoZS5jCkBAIC0yNDc3LDYgKzI0NzcsNyBAQCBSZWxhdGlvbkRlc3Ry b3lSZWxhdGlvbihSZWxhdGlvbiByZWxhdGlvbiwgYm9vbCByZW1lbWJlcl90dXBkZXNjKQog CWJtc19mcmVlKHJlbGF0aW9uLT5yZF9pZGF0dHIpOwogCWJtc19mcmVlKHJlbGF0aW9uLT5y ZF9ob3RibG9ja2luZ2F0dHIpOwogCWJtc19mcmVlKHJlbGF0aW9uLT5yZF9zdW1tYXJpemVk YXR0cik7CisJYm1zX2ZyZWUocmVsYXRpb24tPnJkX2luZGV4ZWRhdHRyKTsKIAlpZiAocmVs YXRpb24tPnJkX3B1YmRlc2MpCiAJCXBmcmVlKHJlbGF0aW9uLT5yZF9wdWJkZXNjKTsKIAlp ZiAocmVsYXRpb24tPnJkX29wdGlvbnMpCkBAIC01Mjc4LDYgKzUyNzksNyBAQCBSZWxhdGlv bkdldEluZGV4UHJlZGljYXRlKFJlbGF0aW9uIHJlbGF0aW9uKQogICoJCQkJCQkJCQlpbmRl eCAoZW1wdHkgaWYgRlVMTCkKICAqCUlOREVYX0FUVFJfQklUTUFQX0hPVF9CTE9DS0lORwlD b2x1bW5zIHRoYXQgYmxvY2sgdXBkYXRlcyBmcm9tIGJlaW5nIEhPVAogICoJSU5ERVhfQVRU Ul9CSVRNQVBfU1VNTUFSSVpFRAlDb2x1bW5zIGluY2x1ZGVkIGluIHN1bW1hcml6aW5nIGlu ZGV4ZXMKKyAqCUlOREVYX0FUVFJfQklUTUFQX0lOREVYRUQJCUNvbHVtbnMgcmVmZXJlbmNl ZCBieSBpbmRleGVzCiAgKgogICogQXR0cmlidXRlIG51bWJlcnMgYXJlIG9mZnNldCBieSBG aXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyIHNvIHRoYXQKICAqIHdlIGNhbiBp bmNsdWRlIHN5c3RlbSBhdHRyaWJ1dGVzIChlLmcuLCBPSUQpIGluIHRoZSBiaXRtYXAgcmVw cmVzZW50YXRpb24uCkBAIC01MzAyLDYgKzUzMDQsNyBAQCBSZWxhdGlvbkdldEluZGV4QXR0 ckJpdG1hcChSZWxhdGlvbiByZWxhdGlvbiwgSW5kZXhBdHRyQml0bWFwS2luZCBhdHRyS2lu ZCkKIAlCaXRtYXBzZXQgICppZGluZGV4YXR0cnM7CS8qIGNvbHVtbnMgaW4gdGhlIHJlcGxp Y2EgaWRlbnRpdHkgKi8KIAlCaXRtYXBzZXQgICpob3RibG9ja2luZ2F0dHJzOwkvKiBjb2x1 bW5zIHdpdGggSE9UIGJsb2NraW5nIGluZGV4ZXMgKi8KIAlCaXRtYXBzZXQgICpzdW1tYXJp emVkYXR0cnM7CS8qIGNvbHVtbnMgd2l0aCBzdW1tYXJpemluZyBpbmRleGVzICovCisJQml0 bWFwc2V0ICAqaW5kZXhlZGF0dHJzOwkvKiBjb2x1bW5zIHJlZmVyZW5jZWQgYnkgaW5kZXhl cyAqLwogCUxpc3QJICAgKmluZGV4b2lkbGlzdDsKIAlMaXN0CSAgICpuZXdpbmRleG9pZGxp c3Q7CiAJT2lkCQkJcmVscGtpbmRleDsKQEAgLTUzMjQsNiArNTMyNyw4IEBAIFJlbGF0aW9u R2V0SW5kZXhBdHRyQml0bWFwKFJlbGF0aW9uIHJlbGF0aW9uLCBJbmRleEF0dHJCaXRtYXBL aW5kIGF0dHJLaW5kKQogCQkJCXJldHVybiBibXNfY29weShyZWxhdGlvbi0+cmRfaG90Ymxv Y2tpbmdhdHRyKTsKIAkJCWNhc2UgSU5ERVhfQVRUUl9CSVRNQVBfU1VNTUFSSVpFRDoKIAkJ CQlyZXR1cm4gYm1zX2NvcHkocmVsYXRpb24tPnJkX3N1bW1hcml6ZWRhdHRyKTsKKwkJCWNh c2UgSU5ERVhfQVRUUl9CSVRNQVBfSU5ERVhFRDoKKwkJCQlyZXR1cm4gYm1zX2NvcHkocmVs YXRpb24tPnJkX2luZGV4ZWRhdHRyKTsKIAkJCWRlZmF1bHQ6CiAJCQkJZWxvZyhFUlJPUiwg InVua25vd24gYXR0cktpbmQgJXUiLCBhdHRyS2luZCk7CiAJCX0KQEAgLTUzNjgsNiArNTM3 Myw3IEBAIHJlc3RhcnQ6CiAJaWRpbmRleGF0dHJzID0gTlVMTDsKIAlob3RibG9ja2luZ2F0 dHJzID0gTlVMTDsKIAlzdW1tYXJpemVkYXR0cnMgPSBOVUxMOworCWluZGV4ZWRhdHRycyA9 IE5VTEw7CiAJZm9yZWFjaChsLCBpbmRleG9pZGxpc3QpCiAJewogCQlPaWQJCQlpbmRleE9p ZCA9IGxmaXJzdF9vaWQobCk7CkBAIC01NTAwLDEwICs1NTA2LDE0IEBAIHJlc3RhcnQ6CiAJ CWJtc19mcmVlKGlkaW5kZXhhdHRycyk7CiAJCWJtc19mcmVlKGhvdGJsb2NraW5nYXR0cnMp OwogCQlibXNfZnJlZShzdW1tYXJpemVkYXR0cnMpOworCQlibXNfZnJlZShpbmRleGVkYXR0 cnMpOwogCiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKKwkvKiBDb21iaW5lIGFsbCBpbmRleCBh dHRyaWJ1dGVzICovCisJaW5kZXhlZGF0dHJzID0gYm1zX3VuaW9uKGhvdGJsb2NraW5nYXR0 cnMsIHN1bW1hcml6ZWRhdHRycyk7CisKIAkvKiBEb24ndCBsZWFrIHRoZSBvbGQgdmFsdWVz IG9mIHRoZXNlIGJpdG1hcHMsIGlmIGFueSAqLwogCXJlbGF0aW9uLT5yZF9hdHRyc3ZhbGlk ID0gZmFsc2U7CiAJYm1zX2ZyZWUocmVsYXRpb24tPnJkX2tleWF0dHIpOwpAQCAtNTUxNiw2 ICs1NTI2LDggQEAgcmVzdGFydDoKIAlyZWxhdGlvbi0+cmRfaG90YmxvY2tpbmdhdHRyID0g TlVMTDsKIAlibXNfZnJlZShyZWxhdGlvbi0+cmRfc3VtbWFyaXplZGF0dHIpOwogCXJlbGF0 aW9uLT5yZF9zdW1tYXJpemVkYXR0ciA9IE5VTEw7CisJYm1zX2ZyZWUocmVsYXRpb24tPnJk X2luZGV4ZWRhdHRyKTsKKwlyZWxhdGlvbi0+cmRfaW5kZXhlZGF0dHIgPSBOVUxMOwogCiAJ LyoKIAkgKiBOb3cgc2F2ZSBjb3BpZXMgb2YgdGhlIGJpdG1hcHMgaW4gdGhlIHJlbGNhY2hl IGVudHJ5LiAgV2UgaW50ZW50aW9uYWxseQpAQCAtNTUzMCw2ICs1NTQyLDcgQEAgcmVzdGFy dDoKIAlyZWxhdGlvbi0+cmRfaWRhdHRyID0gYm1zX2NvcHkoaWRpbmRleGF0dHJzKTsKIAly ZWxhdGlvbi0+cmRfaG90YmxvY2tpbmdhdHRyID0gYm1zX2NvcHkoaG90YmxvY2tpbmdhdHRy cyk7CiAJcmVsYXRpb24tPnJkX3N1bW1hcml6ZWRhdHRyID0gYm1zX2NvcHkoc3VtbWFyaXpl ZGF0dHJzKTsKKwlyZWxhdGlvbi0+cmRfaW5kZXhlZGF0dHIgPSBibXNfY29weShpbmRleGVk YXR0cnMpOwogCXJlbGF0aW9uLT5yZF9hdHRyc3ZhbGlkID0gdHJ1ZTsKIAlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY3h0KTsKIApAQCAtNTU0Niw2ICs1NTU5LDggQEAgcmVzdGFydDoK IAkJCXJldHVybiBob3RibG9ja2luZ2F0dHJzOwogCQljYXNlIElOREVYX0FUVFJfQklUTUFQ X1NVTU1BUklaRUQ6CiAJCQlyZXR1cm4gc3VtbWFyaXplZGF0dHJzOworCQljYXNlIElOREVY X0FUVFJfQklUTUFQX0lOREVYRUQ6CisJCQlyZXR1cm4gaW5kZXhlZGF0dHJzOwogCQlkZWZh dWx0OgogCQkJZWxvZyhFUlJPUiwgInVua25vd24gYXR0cktpbmQgJXUiLCBhdHRyS2luZCk7 CiAJCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFw aS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKaW5kZXggZWNmYmQwMTdkNjYuLjJh MzZiN2U0YTE4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaAorKysg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaApAQCAtMjExLDYgKzIxMSwzMyBAQCB0eXBl ZGVmIHZvaWQgKCphbW1hcmtwb3NfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4pOwog LyogcmVzdG9yZSBtYXJrZWQgc2NhbiBwb3NpdGlvbiAqLwogdHlwZWRlZiB2b2lkICgqYW1y ZXN0cnBvc19mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKKy8qCisgKiBhbWNv bXBhcmVkYXR1bXMgLSBDb21wYXJlIGRhdHVtcyB0byBkZXRlcm1pbmUgaWYgaW5kZXggdXBk YXRlIGlzIG5lZWRlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29tcGFyZXMgb2xkX2RhdHVt IGFuZCBuZXdfZGF0dW0gdG8gZGV0ZXJtaW5lIGlmIHRoZXkgd291bGQKKyAqIHByb2R1Y2Ug ZGlmZmVyZW50IGluZGV4IGVudHJpZXMuIEZvciBleHRyYWN0aW9uLWJhc2VkIGluZGV4ZXMg KEdJTiwgUlVNKSwKKyAqIHRoaXMgc2hvdWxkOgorICogIDEuIEV4dHJhY3Qga2V5cyBmcm9t IG9sZF9kYXR1bSB1c2luZyB0aGUgb3BjbGFzcydzIGV4dHJhY3RWYWx1ZSBmdW5jdGlvbgor ICogIDIuIEV4dHJhY3Qga2V5cyBmcm9tIG5ld19kYXR1bSB1c2luZyB0aGUgb3BjbGFzcydz IGV4dHJhY3RWYWx1ZSBmdW5jdGlvbgorICogIDMuIENvbXBhcmUgdGhlIHR3byBzZXRzIG9m IGtleXMgdXNpbmcgYXBwcm9wcmlhdGUgZXF1YWxpdHkgb3BlcmF0b3JzCisgKiAgNC4gUmV0 dXJuIHRydWUgaWYgdGhlIHNldHMgYXJlIGVxdWFsIChubyBpbmRleCB1cGRhdGUgbmVlZGVk KQorICoKKyAqIFRoZSBjb21wYXJpc29uIHNob3VsZCBhY2NvdW50IGZvcjoKKyAqICAtIERp ZmZlcmVudCBudW1iZXJzIG9mIGV4dHJhY3RlZCBrZXlzCisgKiAgLSBOVUxMIHZhbHVlcwor ICogIC0gVHlwZS1zcGVjaWZpYyBlcXVhbGl0eSAobm90IGp1c3QgYmluYXJ5IGVxdWFsaXR5 KQorICogIC0gT3BjbGFzcyBwYXJhbWV0ZXJzIChlLmcuLCBwYXRoIGluIGJzb25fcnVtX3Np bmdsZV9wYXRoX29wcykKKyAqCisgKiBGb3IgdGhlIERvY3VtZW50REIgZXhhbXBsZSB3aXRo IHBhdGg9J2EnLCB0aGlzIHdvdWxkIGV4dHJhY3QgdmFsdWVzIGF0CisgKiBwYXRoICdhJyBm cm9tIGJvdGggb2xkIGFuZCBuZXcgQlNPTiBkb2N1bWVudHMgYW5kIGNvbXBhcmUgdGhlbSB1 c2luZworICogQlNPTidzIGVxdWFsaXR5IG9wZXJhdG9yLgorICovCisvKiBpZGVudGlmeSBp ZiB1cGRhdGVkIGRhdHVtcyB3b3VsZCBwcm9kdWNlIG9uZSBvciBtb3JlIGluZGV4IGVudHJp ZXMgKi8KK3R5cGVkZWYgYm9vbCAoKmFtY29tcGFyZWRhdHVtc19mdW5jdGlvbikgKFJlbGF0 aW9uIGluZGV4UmVsYXRpb24sCisJCQkJCQkJCQkJICBpbnQgYXR0bm8sCisJCQkJCQkJCQkJ ICBEYXR1bSBvbGRfZGF0dW0sIGJvb2wgb2xkX2lzbnVsbCwKKwkJCQkJCQkJCQkgIERhdHVt IG5ld19kYXR1bSwgYm9vbCBuZXdfaXNudWxsKTsKKwogLyoKICAqIENhbGxiYWNrIGZ1bmN0 aW9uIHNpZ25hdHVyZXMgLSBmb3IgcGFyYWxsZWwgaW5kZXggc2NhbnMuCiAgKi8KQEAgLTMx Myw2ICszNDAsNyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEFtUm91dGluZQogCWFtZW5kc2Nh bl9mdW5jdGlvbiBhbWVuZHNjYW47CiAJYW1tYXJrcG9zX2Z1bmN0aW9uIGFtbWFya3BvczsJ LyogY2FuIGJlIE5VTEwgKi8KIAlhbXJlc3RycG9zX2Z1bmN0aW9uIGFtcmVzdHJwb3M7IC8q IGNhbiBiZSBOVUxMICovCisJYW1jb21wYXJlZGF0dW1zX2Z1bmN0aW9uIGFtY29tcGFyZWRh dHVtczsJLyogY2FuIGJlIE5VTEwgKi8KIAogCS8qIGludGVyZmFjZSBmdW5jdGlvbnMgdG8g c3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2FucyAqLwogCWFtZXN0aW1hdGVwYXJhbGxlbHNj YW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbjsgLyogY2FuIGJlIE5VTEwgKi8K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9naW4uaCBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9naW4uaAppbmRleCBmYTFhM2IyMGUwOS4uNjk3NzFmZTk0N2IgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9naW4uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lu LmgKQEAgLTEwMCw2ICsxMDAsOSBAQCBleHRlcm4gUEdETExJTVBPUlQgaW50IGdpbl9wZW5k aW5nX2xpc3RfbGltaXQ7CiBleHRlcm4gdm9pZCBnaW5HZXRTdGF0cyhSZWxhdGlvbiBpbmRl eCwgR2luU3RhdHNEYXRhICpzdGF0cyk7CiBleHRlcm4gdm9pZCBnaW5VcGRhdGVTdGF0cyhS ZWxhdGlvbiBpbmRleCwgY29uc3QgR2luU3RhdHNEYXRhICpzdGF0cywKIAkJCQkJCSAgIGJv b2wgaXNfYnVpbGQpOworZXh0ZXJuIGJvb2wgZ2luY29tcGFyZWRhdHVtcyhSZWxhdGlvbiBp bmRleCwgaW50IGF0dG51bSwKKwkJCQkJCQkgRGF0dW0gb2xkX2RhdHVtLCBib29sIG9sZF9p c251bGwsCisJCQkJCQkJIERhdHVtIG5ld19kYXR1bSwgYm9vbCBuZXdfaXNudWxsKTsKIAog ZXh0ZXJuIHZvaWQgX2dpbl9wYXJhbGxlbF9idWlsZF9tYWluKGRzbV9zZWdtZW50ICpzZWcs IHNobV90b2MgKnRvYyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFw YW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCAzOGY5NDQ3NzFkYi4u NDg4ODkxOGU0NzkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTM2OSw3ICszNjksNyBAQCBl eHRlcm4gVE1fUmVzdWx0IGhlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVw bGVEYXRhICpvbGR0dXAsCiAJCQkJCQkJIFRNX0ZhaWx1cmVEYXRhICp0bWZkLCBMb2NrVHVw bGVNb2RlICpsb2NrbW9kZSwgQnVmZmVyIGJ1ZmZlciwKIAkJCQkJCQkgUGFnZSBwYWdlLCBC bG9ja051bWJlciBibG9jaywgSXRlbUlkIGxwLCBCaXRtYXBzZXQgKmhvdF9hdHRycywKIAkJ CQkJCQkgQml0bWFwc2V0ICpzdW1fYXR0cnMsIEJpdG1hcHNldCAqcGtfYXR0cnMsIEJpdG1h cHNldCAqcmlkX2F0dHJzLAotCQkJCQkJCSBCaXRtYXBzZXQgKm1peF9hdHRycywgQnVmZmVy ICp2bWJ1ZmZlciwKKwkJCQkJCQkgY29uc3QgQml0bWFwc2V0ICptaXhfYXR0cnMsIEJ1ZmZl ciAqdm1idWZmZXIsCiAJCQkJCQkJIGJvb2wgcmVwX2lkX2tleV9yZXF1aXJlZCwgVFVfVXBk YXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpOwogZXh0ZXJuIFRNX1Jlc3VsdCBoZWFwX2xv Y2tfdHVwbGUoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXBsZSwKIAkJCQkJCQkJ IENvbW1hbmRJZCBjaWQsIExvY2tUdXBsZU1vZGUgbW9kZSwgTG9ja1dhaXRQb2xpY3kgd2Fp dF9wb2xpY3ksCkBAIC00MDQsOCArNDA0LDggQEAgZXh0ZXJuIGJvb2wgaGVhcF90dXBsZV9u ZWVkc19ldmVudHVhbF9mcmVlemUoSGVhcFR1cGxlSGVhZGVyIHR1cGxlKTsKIAogZXh0ZXJu IHZvaWQgc2ltcGxlX2hlYXBfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGUg dHVwKTsKIGV4dGVybiB2b2lkIHNpbXBsZV9oZWFwX2RlbGV0ZShSZWxhdGlvbiByZWxhdGlv biwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICp0aWQpOwotZXh0ZXJuIHZvaWQgc2ltcGxlX2hl YXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90 aWQsCi0JCQkJCQkJICAgSGVhcFR1cGxlIHR1cCwgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRl X2luZGV4ZXMpOworZXh0ZXJuIEJpdG1hcHNldCAqc2ltcGxlX2hlYXBfdXBkYXRlKFJlbGF0 aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsCisJCQkJCQkJCQkg SGVhcFR1cGxlIHR1cCwgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpOwogCiBl eHRlcm4gVHJhbnNhY3Rpb25JZCBoZWFwX2luZGV4X2RlbGV0ZV90dXBsZXMoUmVsYXRpb24g cmVsLAogCQkJCQkJCQkJCQkgIFRNX0luZGV4RGVsZXRlT3AgKmRlbHN0YXRlKTsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9uYnRyZWUuaAppbmRleCA3NzIyNDg1OTY4NS4uNTMyNjU2YTQ4N2YgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv bmJ0cmVlLmgKQEAgLTExNzksNiArMTE3OSwxMCBAQCBleHRlcm4gaW50CWJ0Z2V0dHJlZWhl aWdodChSZWxhdGlvbiByZWwpOwogCiBleHRlcm4gQ29tcGFyZVR5cGUgYnR0cmFuc2xhdGVz dHJhdGVneShTdHJhdGVneU51bWJlciBzdHJhdGVneSwgT2lkIG9wZmFtaWx5KTsKIGV4dGVy biBTdHJhdGVneU51bWJlciBidHRyYW5zbGF0ZWNtcHR5cGUoQ29tcGFyZVR5cGUgY21wdHlw ZSwgT2lkIG9wZmFtaWx5KTsKK2V4dGVybiBib29sIGJ0Y29tcGFyZWRhdHVtcyhSZWxhdGlv biBpbmRleCwgaW50IGF0dG51bSwKKwkJCQkJCQlEYXR1bSBvbGRfZGF0dW0sIGJvb2wgb2xk X2lzbnVsbCwKKwkJCQkJCQlEYXR1bSBuZXdfZGF0dW0sIGJvb2wgbmV3X2lzbnVsbCk7CisK IAogLyoKICAqIHByb3RvdHlwZXMgZm9yIGludGVybmFsIGZ1bmN0aW9ucyBpbiBuYnRyZWUu YwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCBiL3NyYy9pbmNs dWRlL2FjY2Vzcy90YWJsZWFtLmgKaW5kZXggNzI2MGI3YjNkNTIuLjgxZjdlYWQ0OTMyIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9pbmNs dWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTU0OSw2ICs1NDksNyBAQCB0eXBlZGVmIHN0cnVj dCBUYWJsZUFtUm91dGluZQogCQkJCQkJCQkgYm9vbCB3YWl0LAogCQkJCQkJCQkgVE1fRmFp bHVyZURhdGEgKnRtZmQsCiAJCQkJCQkJCSBMb2NrVHVwbGVNb2RlICpsb2NrbW9kZSwKKwkJ CQkJCQkJIGNvbnN0IEJpdG1hcHNldCAqdXBkYXRlZF9jb2xzLAogCQkJCQkJCQkgVFVfVXBk YXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpOwogCiAJLyogc2VlIHRhYmxlX3R1cGxlX2xv Y2soKSBmb3IgcmVmZXJlbmNlIGFib3V0IHBhcmFtZXRlcnMgKi8KQEAgLTE1MjQsMTIgKzE1 MjUsMTIgQEAgc3RhdGljIGlubGluZSBUTV9SZXN1bHQKIHRhYmxlX3R1cGxlX3VwZGF0ZShS ZWxhdGlvbiByZWwsIEl0ZW1Qb2ludGVyIG90aWQsIFR1cGxlVGFibGVTbG90ICpzbG90LAog CQkJCSAgIENvbW1hbmRJZCBjaWQsIFNuYXBzaG90IHNuYXBzaG90LCBTbmFwc2hvdCBjcm9z c2NoZWNrLAogCQkJCSAgIGJvb2wgd2FpdCwgVE1fRmFpbHVyZURhdGEgKnRtZmQsIExvY2tU dXBsZU1vZGUgKmxvY2ttb2RlLAotCQkJCSAgIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9p bmRleGVzKQorCQkJCSAgIGNvbnN0IEJpdG1hcHNldCAqbWl4X2NvbHMsIFRVX1VwZGF0ZUlu ZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQogewogCXJldHVybiByZWwtPnJkX3RhYmxlYW0tPnR1 cGxlX3VwZGF0ZShyZWwsIG90aWQsIHNsb3QsCiAJCQkJCQkJCQkJIGNpZCwgc25hcHNob3Qs IGNyb3NzY2hlY2ssCi0JCQkJCQkJCQkJIHdhaXQsIHRtZmQsCi0JCQkJCQkJCQkJIGxvY2tt b2RlLCB1cGRhdGVfaW5kZXhlcyk7CisJCQkJCQkJCQkJIHdhaXQsIHRtZmQsIGxvY2ttb2Rl LAorCQkJCQkJCQkJCSBtaXhfY29scywgdXBkYXRlX2luZGV4ZXMpOwogfQogCiAvKgpAQCAt MjAxMCw2ICsyMDExLDcgQEAgZXh0ZXJuIHZvaWQgc2ltcGxlX3RhYmxlX3R1cGxlX2RlbGV0 ZShSZWxhdGlvbiByZWwsIEl0ZW1Qb2ludGVyIHRpZCwKIAkJCQkJCQkJCSAgU25hcHNob3Qg c25hcHNob3QpOwogZXh0ZXJuIHZvaWQgc2ltcGxlX3RhYmxlX3R1cGxlX3VwZGF0ZShSZWxh dGlvbiByZWwsIEl0ZW1Qb2ludGVyIG90aWQsCiAJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90 ICpzbG90LCBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkJCSAgY29uc3QgQml0bWFwc2V0 ICptaXhfYXR0cnMsCiAJCQkJCQkJCQkgIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRl eGVzKTsKIAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmggYi9z cmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmgKaW5kZXggYjI1OWM0MTQxZWQuLjE0YTM5YmVh YjZlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmgKKysrIGIvc3Jj L2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oCkBAIC0xMzIsNiArMTMyLDcgQEAgZXh0ZXJuIGJv b2wgQ29tcGFyZUluZGV4SW5mbyhjb25zdCBJbmRleEluZm8gKmluZm8xLCBjb25zdCBJbmRl eEluZm8gKmluZm8yLAogCQkJCQkJCSBjb25zdCBBdHRyTWFwICphdHRtYXApOwogCiBleHRl cm4gdm9pZCBCdWlsZFNwZWN1bGF0aXZlSW5kZXhJbmZvKFJlbGF0aW9uIGluZGV4LCBJbmRl eEluZm8gKmlpKTsKK2V4dGVybiB2b2lkIEJ1aWxkVXBkYXRlSW5kZXhJbmZvKFJlc3VsdFJl bEluZm8gKnJlc3VsdFJlbEluZm8pOwogCiBleHRlcm4gdm9pZCBGb3JtSW5kZXhEYXR1bShJ bmRleEluZm8gKmluZGV4SW5mbywKIAkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90LApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCBiL3NyYy9pbmNs dWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKaW5kZXggNTVhN2Q5MzBkMjYuLmYwYjQ5M2ZmNTQx IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCisrKyBiL3Ny Yy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKQEAgLTczOSw2ICs3MzksMTEgQEAgZXh0 ZXJuIEJpdG1hcHNldCAqRXhlY0dldEFsbFVwZGF0ZWRDb2xzKFJlc3VsdFJlbEluZm8gKnJl bGluZm8sIEVTdGF0ZSAqZXN0YXRlKTsKICAqLwogZXh0ZXJuIHZvaWQgRXhlY09wZW5JbmRp Y2VzKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sIGJvb2wgc3BlY3VsYXRpdmUpOwog ZXh0ZXJuIHZvaWQgRXhlY0Nsb3NlSW5kaWNlcyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJ bmZvKTsKK2V4dGVybiBCaXRtYXBzZXQgKkV4ZWNXaGljaEluZGV4ZXNSZXF1aXJlVXBkYXRl cyhSZXN1bHRSZWxJbmZvICpyZWxpbmZvLAorCQkJCQkJCQkJCQkJIEJpdG1hcHNldCAqbWl4 X2F0dHJzLAorCQkJCQkJCQkJCQkJIEVTdGF0ZSAqZXN0YXRlLAorCQkJCQkJCQkJCQkJIFR1 cGxlVGFibGVTbG90ICpvbGRfdHRzLAorCQkJCQkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpu ZXdfdHRzKTsKIGV4dGVybiBMaXN0ICpFeGVjSW5zZXJ0SW5kZXhUdXBsZXMoUmVzdWx0UmVs SW5mbyAqcmVzdWx0UmVsSW5mbywKIAkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3Qs IEVTdGF0ZSAqZXN0YXRlLAogCQkJCQkJCQkgICBib29sIHVwZGF0ZSwKQEAgLTgwMCw1ICs4 MDUsOSBAQCBleHRlcm4gUmVzdWx0UmVsSW5mbyAqRXhlY0xvb2t1cFJlc3VsdFJlbEJ5T2lk KE1vZGlmeVRhYmxlU3RhdGUgKm5vZGUsCiAJCQkJCQkJCQkJCSAgIE9pZCByZXN1bHRvaWQs CiAJCQkJCQkJCQkJCSAgIGJvb2wgbWlzc2luZ19vaywKIAkJCQkJCQkJCQkJICAgYm9vbCB1 cGRhdGVfY2FjaGUpOworZXh0ZXJuIEJpdG1hcHNldCAqRXhlY0NoZWNrSW5kZXhlZEF0dHJz Rm9yQ2hhbmdlcyhSZXN1bHRSZWxJbmZvICpyZWxpbmZvLAorCQkJCQkJCQkJCQkJICBFU3Rh dGUgKmVzdGF0ZSwKKwkJCQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKm9sZF90dHMsCisJ CQkJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpuZXdfdHRzKTsKIAogI2VuZGlmCQkJCQkJ CS8qIEVYRUNVVE9SX0ggICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVj bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IGY4MDUzZDll NTcyLi44YTkwYWZlMzE1ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25v ZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE3NiwxNSAr MTc2LDI5IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4SW5mbwogCSAqLwogCUF0dHJOdW1iZXIJ aWlfSW5kZXhBdHRyTnVtYmVyc1tJTkRFWF9NQVhfS0VZU107CiAKKwkvKgorCSAqIEFsbCBr ZXksIGV4cHJlc3Npb24sIHN1bWFyaXppbmcsIGFuZCBwYXJ0aXRpb24gYXR0cmlidXRlcyBy ZWZlcmVuY2VkIGJ5CisJICogdGhpcyBpbmRleAorCSAqLworCUJpdG1hcHNldCAgKmlpX0lu ZGV4ZWRBdHRyczsKKwogCS8qIGV4cHIgdHJlZXMgZm9yIGV4cHJlc3Npb24gZW50cmllcywg b3IgTklMIGlmIG5vbmUgKi8KIAlMaXN0CSAgICppaV9FeHByZXNzaW9uczsgLyogbGlzdCBv ZiBFeHByICovCiAJLyogZXhlYyBzdGF0ZSBmb3IgZXhwcmVzc2lvbnMsIG9yIE5JTCBpZiBu b25lICovCiAJTGlzdAkgICAqaWlfRXhwcmVzc2lvbnNTdGF0ZTsJLyogbGlzdCBvZiBFeHBy U3RhdGUgKi8KKwkvKiBhdHRyaWJ1dGVzIGV4Y2x1c2l2ZWx5IHJlZmVyZW5jZWQgYnkgZXhw cmVzc2lvbiBpbmRleGVzICovCisJQml0bWFwc2V0ICAqaWlfRXhwcmVzc2lvbnNBdHRyczsK IAogCS8qIHBhcnRpYWwtaW5kZXggcHJlZGljYXRlLCBvciBOSUwgaWYgbm9uZSAqLwogCUxp c3QJICAgKmlpX1ByZWRpY2F0ZTsJLyogbGlzdCBvZiBFeHByICovCiAJLyogZXhlYyBzdGF0 ZSBmb3IgZXhwcmVzc2lvbnMsIG9yIE5JTCBpZiBub25lICovCiAJRXhwclN0YXRlICAqaWlf UHJlZGljYXRlU3RhdGU7CisJLyogYXR0cmlidXRlcyByZWZlcmVuY2VkIGJ5IHRoZSBwcmVk aWNhdGUgKi8KKwlCaXRtYXBzZXQgICppaV9QcmVkaWNhdGVBdHRyczsKKwkvKiBwYXJ0aWFs IGluZGV4IHByZWRpY2F0ZSBkZXRlcm1pbmVkIHlldD8gKi8KKwlib29sCQlpaV9DaGVja2Vk UHJlZGljYXRlOworCS8qIGFtdXBkYXRlIGhpbnQgdXNlZCB0byBhdm9pZCByZWNoZWNraW5n IHByZWRpY2F0ZSAqLworCWJvb2wJCWlpX1ByZWRpY2F0ZVNhdGlzZmllZDsKIAogCS8qIFBl ci1jb2x1bW4gZXhjbHVzaW9uIG9wZXJhdG9ycywgb3IgTlVMTCBpZiBub25lICovCiAJT2lk CQkgICAqaWlfRXhjbHVzaW9uT3BzOwkvKiBhcnJheSB3aXRoIG9uZSBlbnRyeSBwZXIgY29s dW1uICovCkBAIC01MDEsNiArNTE1LDEyIEBAIHR5cGVkZWYgc3RydWN0IFJlc3VsdFJlbElu Zm8KIAkvKiB0cnVlIGlmIHRoZSBhYm92ZSBoYXMgYmVlbiBjb21wdXRlZCAqLwogCWJvb2wJ CXJpX2V4dHJhVXBkYXRlZENvbHNfdmFsaWQ7CiAKKwkvKgorCSAqIEZvciBVUERBVEUgYSBC aXRtYXBzZXQgb2YgdGhlIGF0dHJpYnV0ZXMgdGhhdCBhcmUgYm90aCBpbmRleGVkIGFuZCBo YXZlCisJICogY2hhbmdlZCBpbiB2YWx1ZS4KKwkgKi8KKwlCaXRtYXBzZXQgICpyaV9DaGFu Z2VkSW5kZXhlZENvbHM7CisKIAkvKiBQcm9qZWN0aW9uIHRvIGdlbmVyYXRlIG5ldyB0dXBs ZSBpbiBhbiBJTlNFUlQvVVBEQVRFICovCiAJUHJvamVjdGlvbkluZm8gKnJpX3Byb2plY3RO ZXc7CiAJLyogU2xvdCB0byBob2xkIHRoYXQgdHVwbGUgKi8KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3V0aWxzL3JlbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKaW5kZXggMjM2 ODMwZjZiOTMuLmRmNTQyNmZkN2ZiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9y ZWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9yZWwuaApAQCAtMTY0LDYgKzE2NCw3IEBA IHR5cGVkZWYgc3RydWN0IFJlbGF0aW9uRGF0YQogCUJpdG1hcHNldCAgKnJkX2lkYXR0cjsJ CS8qIGluY2x1ZGVkIGluIHJlcGxpY2EgaWRlbnRpdHkgaW5kZXggKi8KIAlCaXRtYXBzZXQg ICpyZF9ob3RibG9ja2luZ2F0dHI7IC8qIGNvbHMgYmxvY2tpbmcgSE9UIHVwZGF0ZSAqLwog CUJpdG1hcHNldCAgKnJkX3N1bW1hcml6ZWRhdHRyOwkvKiBjb2xzIGluZGV4ZWQgYnkgc3Vt bWFyaXppbmcgaW5kZXhlcyAqLworCUJpdG1hcHNldCAgKnJkX2luZGV4ZWRhdHRyOyAvKiBh bGwgY29scyByZWZlcmVuY2VkIGJ5IGluZGV4ZXMgKi8KIAogCVB1YmxpY2F0aW9uRGVzYyAq cmRfcHViZGVzYzsJLyogcHVibGljYXRpb24gZGVzY3JpcHRvciwgb3IgTlVMTCAqLwogCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5oIGIvc3JjL2luY2x1ZGUv dXRpbHMvcmVsY2FjaGUuaAppbmRleCAyNzAwMjI0OTM5YS4uNTgzNGFiN2I5MDMgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbGNhY2hlLmgKKysrIGIvc3JjL2luY2x1ZGUv dXRpbHMvcmVsY2FjaGUuaApAQCAtNzEsNiArNzEsNyBAQCB0eXBlZGVmIGVudW0gSW5kZXhB dHRyQml0bWFwS2luZAogCUlOREVYX0FUVFJfQklUTUFQX0lERU5USVRZX0tFWSwKIAlJTkRF WF9BVFRSX0JJVE1BUF9IT1RfQkxPQ0tJTkcsCiAJSU5ERVhfQVRUUl9CSVRNQVBfU1VNTUFS SVpFRCwKKwlJTkRFWF9BVFRSX0JJVE1BUF9JTkRFWEVELAogfSBJbmRleEF0dHJCaXRtYXBL aW5kOwogCiBleHRlcm4gQml0bWFwc2V0ICpSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChS ZWxhdGlvbiByZWxhdGlvbiwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBl Y3RlZC9pbnNlcnQtY29uZmxpY3Qtc3BlY2NvbmZsaWN0Lm91dCBiL3NyYy90ZXN0L2lzb2xh dGlvbi9leHBlY3RlZC9pbnNlcnQtY29uZmxpY3Qtc3BlY2NvbmZsaWN0Lm91dAppbmRleCBl MzRhODIxYzQwMy4uNTRiMzk4MTkxOGMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2lzb2xhdGlv bi9leHBlY3RlZC9pbnNlcnQtY29uZmxpY3Qtc3BlY2NvbmZsaWN0Lm91dAorKysgYi9zcmMv dGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvaW5zZXJ0LWNvbmZsaWN0LXNwZWNjb25mbGljdC5v dXQKQEAgLTgwLDYgKzgwLDEwIEBAIHBnX2Fkdmlzb3J5X3VubG9jawogdCAgICAgICAgICAg ICAgICAgCiAoMSByb3cpCiAKK3MxOiBOT1RJQ0U6ICBibHVydF9hbmRfbG9ja18xMjMoKSBj YWxsZWQgZm9yIGsxIGluIHNlc3Npb24gMQorczE6IE5PVElDRTogIGFjcXVpcmluZyBhZHZp c29yeSBsb2NrIG9uIDIKK3MxOiBOT1RJQ0U6ICBibHVydF9hbmRfbG9ja18xMjMoKSBjYWxs ZWQgZm9yIGsxIGluIHNlc3Npb24gMQorczE6IE5PVElDRTogIGFjcXVpcmluZyBhZHZpc29y eSBsb2NrIG9uIDIKIHMxOiBOT1RJQ0U6ICBibHVydF9hbmRfbG9ja18xMjMoKSBjYWxsZWQg Zm9yIGsxIGluIHNlc3Npb24gMQogczE6IE5PVElDRTogIGFjcXVpcmluZyBhZHZpc29yeSBs b2NrIG9uIDIKIHMxOiBOT1RJQ0U6ICBibHVydF9hbmRfbG9ja18xMjMoKSBjYWxsZWQgZm9y IGsxIGluIHNlc3Npb24gMQpAQCAtMTcyLDYgKzE3NiwxMCBAQCBwZ19hZHZpc29yeV91bmxv Y2sKIHQgICAgICAgICAgICAgICAgIAogKDEgcm93KQogCitzMjogTk9USUNFOiAgYmx1cnRf YW5kX2xvY2tfMTIzKCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDIKK3MyOiBOT1RJQ0U6 ICBhY3F1aXJpbmcgYWR2aXNvcnkgbG9jayBvbiAyCitzMjogTk9USUNFOiAgYmx1cnRfYW5k X2xvY2tfMTIzKCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDIKK3MyOiBOT1RJQ0U6ICBh Y3F1aXJpbmcgYWR2aXNvcnkgbG9jayBvbiAyCiBzMjogTk9USUNFOiAgYmx1cnRfYW5kX2xv Y2tfMTIzKCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDIKIHMyOiBOT1RJQ0U6ICBhY3F1 aXJpbmcgYWR2aXNvcnkgbG9jayBvbiAyCiBzMjogTk9USUNFOiAgYmx1cnRfYW5kX2xvY2tf MTIzKCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDIKQEAgLTM2OSw2ICszNzcsMTAgQEAg a2V5fGRhdGEKIHN0ZXAgczFfY29tbWl0OiBDT01NSVQ7CiBzMjogTk9USUNFOiAgYmx1cnRf YW5kX2xvY2tfMTIzKCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDIKIHMyOiBOT1RJQ0U6 ICBhY3F1aXJpbmcgYWR2aXNvcnkgbG9jayBvbiAyCitzMjogTk9USUNFOiAgYmx1cnRfYW5k X2xvY2tfMTIzKCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDIKK3MyOiBOT1RJQ0U6ICBh Y3F1aXJpbmcgYWR2aXNvcnkgbG9jayBvbiAyCitzMjogTk9USUNFOiAgYmx1cnRfYW5kX2xv Y2tfMTIzKCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDIKK3MyOiBOT1RJQ0U6ICBhY3F1 aXJpbmcgYWR2aXNvcnkgbG9jayBvbiAyCiBzdGVwIHMyX3Vwc2VydDogPC4uLiBjb21wbGV0 ZWQ+CiBzdGVwIGNvbnRyb2xsZXJfc2hvdzogU0VMRUNUICogRlJPTSB1cHNlcnR0ZXN0Owog a2V5fGRhdGEgICAgICAgCkBAIC01MzAsNiArNTQyLDE0IEBAIGlzb2xhdGlvbi9pbnNlcnQt Y29uZmxpY3Qtc3BlY2NvbmZsaWN0L3MyfHRyYW5zYWN0aW9uaWR8RXhjbHVzaXZlTG9ja3x0 CiBzdGVwIHMyX2NvbW1pdDogQ09NTUlUOwogczE6IE5PVElDRTogIGJsdXJ0X2FuZF9sb2Nr XzEyMygpIGNhbGxlZCBmb3IgazEgaW4gc2Vzc2lvbiAxCiBzMTogTk9USUNFOiAgYWNxdWly aW5nIGFkdmlzb3J5IGxvY2sgb24gMgorczE6IE5PVElDRTogIGJsdXJ0X2FuZF9sb2NrXzEy MygpIGNhbGxlZCBmb3IgazEgaW4gc2Vzc2lvbiAxCitzMTogTk9USUNFOiAgYWNxdWlyaW5n IGFkdmlzb3J5IGxvY2sgb24gMgorczE6IE5PVElDRTogIGJsdXJ0X2FuZF9sb2NrXzEyMygp IGNhbGxlZCBmb3IgazEgaW4gc2Vzc2lvbiAxCitzMTogTk9USUNFOiAgYWNxdWlyaW5nIGFk dmlzb3J5IGxvY2sgb24gMgorczE6IE5PVElDRTogIGJsdXJ0X2FuZF9sb2NrXzQoKSBjYWxs ZWQgZm9yIGsxIGluIHNlc3Npb24gMQorczE6IE5PVElDRTogIGFjcXVpcmluZyBhZHZpc29y eSBsb2NrIG9uIDQKK3MxOiBOT1RJQ0U6ICBibHVydF9hbmRfbG9ja180KCkgY2FsbGVkIGZv ciBrMSBpbiBzZXNzaW9uIDEKK3MxOiBOT1RJQ0U6ICBhY3F1aXJpbmcgYWR2aXNvcnkgbG9j ayBvbiA0CiBzdGVwIHMxX3Vwc2VydDogPC4uLiBjb21wbGV0ZWQ+CiBzdGVwIHMxX25vb3A6 IAogc3RlcCBjb250cm9sbGVyX3Nob3c6IFNFTEVDVCAqIEZST00gdXBzZXJ0dGVzdDsKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaGVhcF9ob3RfdXBkYXRlcy5v dXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2hlYXBfaG90X3VwZGF0ZXMub3V0Cm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xNDI3NmUzY2JjYQotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaGVhcF9ob3RfdXBk YXRlcy5vdXQKQEAgLTAsMCArMSw2NTAgQEAKKy0tID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFRlc3QgU3Vp dGUgZm9yIEhlYXAtb25seSAoSE9UKSBVcGRhdGVzCistLSA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBTZXR1 cDogQ3JlYXRlIGZ1bmN0aW9uIHRvIG1lYXN1cmUgSE9UIHVwZGF0ZXMKK0NSRUFURSBPUiBS RVBMQUNFIEZVTkNUSU9OIGNoZWNrX2hvdF91cGRhdGVzKAorICAgIGV4cGVjdGVkIElOVCwK KyAgICBwX3RhYmxlX25hbWUgVEVYVCBERUZBVUxUICd0JywKKyAgICBwX3NjaGVtYV9uYW1l IFRFWFQgREVGQVVMVCBjdXJyZW50X3NjaGVtYSgpCispCitSRVRVUk5TIFRBQkxFICgKKyAg ICB0YWJsZV9uYW1lIFRFWFQsCisgICAgdG90YWxfdXBkYXRlcyBCSUdJTlQsCisgICAgaG90 X3VwZGF0ZXMgQklHSU5ULAorICAgIGhvdF91cGRhdGVfcGVyY2VudGFnZSBOVU1FUklDLAor ICAgIG1hdGNoZXNfZXhwZWN0ZWQgQk9PTEVBTgorKQorTEFOR1VBR0UgcGxwZ3NxbAorQVMg JCQKK0RFQ0xBUkUKKyAgICB2X3JlbGlkIG9pZDsKKyAgICB2X3F1YWxpZmllZF9uYW1lIFRF WFQ7CisgICAgdl9ob3RfdXBkYXRlcyBCSUdJTlQ7CisgICAgdl91cGRhdGVzIEJJR0lOVDsK KyAgICB2X3hhY3RfaG90X3VwZGF0ZXMgQklHSU5UOworICAgIHZfeGFjdF91cGRhdGVzIEJJ R0lOVDsKK0JFR0lOCisgICAgLS0gRm9yY2Ugc3RhdGlzdGljcyB1cGRhdGUKKyAgICBQRVJG T1JNIHBnX3N0YXRfZm9yY2VfbmV4dF9mbHVzaCgpOworCisgICAgLS0gR2V0IHRhYmxlIE9J RAorICAgIHZfcXVhbGlmaWVkX25hbWUgOj0gcXVvdGVfaWRlbnQocF9zY2hlbWFfbmFtZSkg fHwgJy4nIHx8IHF1b3RlX2lkZW50KHBfdGFibGVfbmFtZSk7CisgICAgdl9yZWxpZCA6PSB2 X3F1YWxpZmllZF9uYW1lOjpyZWdjbGFzczsKKworICAgIElGIHZfcmVsaWQgSVMgTlVMTCBU SEVOCisJUkFJU0UgRVhDRVBUSU9OICdUYWJsZSAlLiUgbm90IGZvdW5kJywgcF9zY2hlbWFf bmFtZSwgcF90YWJsZV9uYW1lOworICAgIEVORCBJRjsKKworICAgIC0tIEdldCBjdW11bGF0 aXZlICsgdHJhbnNhY3Rpb24gc3RhdHMKKyAgICB2X2hvdF91cGRhdGVzIDo9IENPQUxFU0NF KHBnX3N0YXRfZ2V0X3R1cGxlc19ob3RfdXBkYXRlZCh2X3JlbGlkKSwgMCk7CisgICAgdl91 cGRhdGVzIDo9IENPQUxFU0NFKHBnX3N0YXRfZ2V0X3R1cGxlc191cGRhdGVkKHZfcmVsaWQp LCAwKTsKKyAgICB2X3hhY3RfaG90X3VwZGF0ZXMgOj0gQ09BTEVTQ0UocGdfc3RhdF9nZXRf eGFjdF90dXBsZXNfaG90X3VwZGF0ZWQodl9yZWxpZCksIDApOworICAgIHZfeGFjdF91cGRh dGVzIDo9IENPQUxFU0NFKHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX3VwZGF0ZWQodl9yZWxp ZCksIDApOworCisgICAgdl9ob3RfdXBkYXRlcyA6PSB2X2hvdF91cGRhdGVzICsgdl94YWN0 X2hvdF91cGRhdGVzOworICAgIHZfdXBkYXRlcyA6PSB2X3VwZGF0ZXMgKyB2X3hhY3RfdXBk YXRlczsKKworICAgIFJFVFVSTiBRVUVSWQorICAgIFNFTEVDVAorCXBfdGFibGVfbmFtZTo6 VEVYVCwKKwl2X3VwZGF0ZXM6OkJJR0lOVCwKKwl2X2hvdF91cGRhdGVzOjpCSUdJTlQsCisJ Q0FTRSBXSEVOIHZfdXBkYXRlcyA+IDAKKwkgICAgIFRIRU4gUk9VTkQoKHZfaG90X3VwZGF0 ZXM6Om51bWVyaWMgLyB2X3VwZGF0ZXM6Om51bWVyaWMgKiAxMDApOjpudW1lcmljLCAyKQor CSAgICAgRUxTRSAwCisJRU5ELAorCSh2X2hvdF91cGRhdGVzID0gZXhwZWN0ZWQpOjpCT09M RUFOOworRU5EOworJCQ7CitDUkVBVEUgQ09MTEFUSU9OIGNhc2VfaW5zZW5zaXRpdmUgKAor ICAgIHByb3ZpZGVyID0gbGliYywKKyAgICBsb2NhbGUgPSAnQycKKyk7CistLSA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CistLSBHSU4gSW5kZXggb24gSlNPTkIKKy0tID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJM RSB0KGlkIElOVCwgZGF0YSBKU09OQikKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9naW5faWR4IE9OIHQg VVNJTkcgZ2luKGRhdGEpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsICd7InRhZ3MiOiBb InBvc3RncmVzIiwgImRhdGFiYXNlIl19Jyk7CistLSBDaGFuZ2UgdGFncyAtIEdJTiBrZXlz IGNoYW5nZWQsIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InRh Z3MiOiBbInBvc3RncmVzIiwgInNxbCJdfScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJP TSBjaGVja19ob3RfdXBkYXRlcygwKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8 IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3Rl ZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAg ICAgICAgICAgMSB8ICAgICAgICAgICAwIHwgICAgICAgICAgICAgICAgICAwLjAwIHwgdAor KDEgcm93KQorCistLSBDaGFuZ2UgdGFncyBhZ2FpbiAtIEdJTiBrZXlzIGNoYW5nZWQsIHNo b3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InRhZ3MiOiBbIm15c3Fs IiwgInNxbCJdfScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBk YXRlcygwKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwg aG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMiB8ICAg ICAgICAgICAwIHwgICAgICAgICAgICAgICAgICAwLjAwIHwgdAorKDEgcm93KQorCistLSBB ZGQgZmllbGQgd2l0aG91dCBjaGFuZ2luZyBleGlzdGluZyBrZXlzIC0gR0lOIGtleXMgY2hh bmdlZCAoYWRkZWQgIm5vdGUiKSwgTk9UIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJ0 YWdzIjogWyJteXNxbCIsICJzcWwiXSwgIm5vdGUiOiAidGVzdCJ9JyBXSEVSRSBpZCA9IDE7 CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDApOworIHRhYmxlX25hbWUgfCB0 b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBt YXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQg ICAgICAgICAgfCAgICAgICAgICAgICAzIHwgICAgICAgICAgIDAgfCAgICAgICAgICAgICAg ICAgIDAuMDAgfCB0CisoMSByb3cpCisKK0RST1AgVEFCTEUgdDsKKy0tID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K Ky0tIEdJTiBJbmRleCB3aXRoIFVuY2hhbmdlZCBLZXlzCistLSA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVB VEUgVEFCTEUgdChpZCBJTlQsIGRhdGEgSlNPTkIpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9l bmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworLS0gQ3JlYXRlIEdJTiBpbmRleCBv biBzcGVjaWZpYyBwYXRoCitDUkVBVEUgSU5ERVggdF9naW5faWR4IE9OIHQgVVNJTkcgZ2lu KChkYXRhLT4ndGFncycpKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAneyJ0YWdzIjog WyJwb3N0Z3JlcyIsICJzcWwiXSwgInN0YXR1cyI6ICJhY3RpdmUifScpOworLS0gQ2hhbmdl IG5vbi1pbmRleGVkIGZpZWxkIC0gR0lOIGtleXMgb24gJ3RhZ3MnIHVuY2hhbmdlZCwgc2hv dWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJ0YWdzIjogWyJwb3N0Z3JlcyIs ICJzcWwiXSwgInN0YXR1cyI6ICJpbmFjdGl2ZSJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1Qg KiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRh dGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4 cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAg fCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAxMDAuMDAg fCB0CisoMSByb3cpCisKKy0tIENoYW5nZSBpbmRleGVkIHRhZ3MgLSBHSU4ga2V5cyBjaGFu Z2VkLCBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJ0YWdzIjog WyJteXNxbCIsICJzcWwiXSwgInN0YXR1cyI6ICJpbmFjdGl2ZSJ9JyBXSEVSRSBpZCA9IDE7 CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworIHRhYmxlX25hbWUgfCB0 b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBt YXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQg ICAgICAgICAgfCAgICAgICAgICAgICAyIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAg ICAgNTAuMDAgfCB0CisoMSByb3cpCisKK0RST1AgVEFCTEUgdDsKKy0tID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K Ky0tIEdJTiB3aXRoIGpzb25iX3BhdGhfb3BzCistLSA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFC TEUgdChpZCBJTlQsIGRhdGEgSlNPTkIpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVk ID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfZ2luX2lkeCBPTiB0 IFVTSU5HIGdpbihkYXRhIGpzb25iX3BhdGhfb3BzKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVT ICgxLCAneyJ1c2VyIjogeyJuYW1lIjogImFsaWNlIn0sICJ0YWdzIjogWyJhIiwgImIiXX0n KTsKKy0tIENoYW5nZSB2YWx1ZSBhdCBkaWZmZXJlbnQgcGF0aCAtIGtleXMgY2hhbmdlZCwg Tk9UIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJ1c2VyIjogeyJuYW1lIjogImJvYiJ9 LCAidGFncyI6IFsiYSIsICJiIl19JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNo ZWNrX2hvdF91cGRhdGVzKDApOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90 X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAor LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAg ICAgICAxIHwgICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAgIDAuMDAgfCB0CisoMSBy b3cpCisKK0RST1AgVEFCTEUgdDsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIE1peGVkIEluZGV4IFR5 cGVzIChCUklOICsgRXhwcmVzc2lvbikKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0 KGlkIElOVCwgdmFsdWUgSU5ULCBkYXRhIEpTT05CKQorICAgIFdJVEggKGF1dG92YWN1dW1f ZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2JyaW5f aWR4IE9OIHQgVVNJTkcgYnJpbih2YWx1ZSk7CitDUkVBVEUgSU5ERVggdF9leHByX2lkeCBP TiB0KChkYXRhLT4nc3RhdHVzJykpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsIDEwMCwg J3sic3RhdHVzIjogImFjdGl2ZSJ9Jyk7CistLSBVcGRhdGUgb25seSBCUklOIGNvbHVtbiAt IHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCB2YWx1ZSA9IDIwMCBXSEVSRSBpZCA9IDE7 CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworIHRhYmxlX25hbWUgfCB0 b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBt YXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQg ICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAg ICAxMDAuMDAgfCB0CisoMSByb3cpCisKKy0tIFVwZGF0ZSBvbmx5IGV4cHJlc3Npb24gY29s dW1uIC0gc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3sic3RhdHVz IjogImluYWN0aXZlIn0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90 X3VwZGF0ZXMoMSk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRl cyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDIg fCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICA1MC4wMCB8IHQKKygxIHJvdykKKwor LS0gVXBkYXRlIGJvdGggLSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIHZhbHVl ID0gMzAwLCBkYXRhID0gJ3sic3RhdHVzIjogInBlbmRpbmcifScgV0hFUkUgaWQgPSAxOwor U0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90 YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0 Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAg ICAgICAgIHwgICAgICAgICAgICAgMyB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAg IDMzLjMzIHwgdAorKDEgcm93KQorCitEUk9QIFRBQkxFIHQ7CistLSA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cist LSBHSU4gQXJyYXkgSW5kZXggLSBPcmRlciBJbnNlbnNpdGl2ZSBFeHRyYWN0aW9uCistLSA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CitDUkVBVEUgVEFCTEUgdCgKKyAgICBpZCBJTlQgUFJJTUFSWSBLRVksCisg ICAgZGF0YSBKU09OQgorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxm YWN0b3IgPSA3MCk7CistLSBHSU4gaW5kZXggb24gSlNPTkIgYXJyYXkgKGV4dHJhY3RzIGFs bCBlbGVtZW50cykKK0NSRUFURSBJTkRFWCB0X2l0ZW1zX2dpbiBPTiB0IFVTSU5HIEdJTiAo KGRhdGEtPidpdGVtcycpKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAneyJpdGVtcyI6 IFsxLCAyLCAzXSwgInN0YXR1cyI6ICJhY3RpdmUifScpOworLS0gVXBkYXRlOiBSZW9yZGVy IGFycmF5IGVsZW1lbnRzCistLSBKU09OQiBlcXVhbGl0eTogTk9UIGVxdWFsIChkaWZmZXJl bnQgYXJyYXlzKQorLS0gR0lOIGV4dHJhY3Rpb246IFNhbWUgZWxlbWVudHMgZXh0cmFjdGVk IChtaWdodCBhbGxvdyBIT1QgaWYgbm90IGNhcmVmdWwpCitVUERBVEUgdCBTRVQgZGF0YSA9 ICd7Iml0ZW1zIjogWzMsIDIsIDFdLCAic3RhdHVzIjogImFjdGl2ZSJ9JyBXSEVSRSBpZCA9 IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworIHRhYmxlX25hbWUg fCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2Ug fCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQor IHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDEgfCAgICAgICAgICAg ICAgICAxMDAuMDAgfCB0CisoMSByb3cpCisKKy0tIFVwZGF0ZTogQWRkL3JlbW92ZSBlbGVt ZW50CitVUERBVEUgdCBTRVQgZGF0YSA9ICd7Iml0ZW1zIjogWzEsIDIsIDMsIDRdLCAic3Rh dHVzIjogImFjdGl2ZSJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hv dF91cGRhdGVzKDEpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0 ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAy IHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgNTAuMDAgfCB0CisoMSByb3cpCisK K0RST1AgVEFCTEUgdDsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFRFU1Q6IEdJTiB3aXRoIFRPQVNU ZWQgVEVYVCAodHN2ZWN0b3IpCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJ TlQsIGNvbnRlbnQgVEVYVCwgc2VhcmNoX3ZlYyB0c3ZlY3RvcikKKyAgICBXSVRIIChhdXRv dmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CistLSBDcmVhdGUgdHJp Z2dlciB0byBtYWludGFpbiB0c3ZlY3RvcgorQ1JFQVRFIFRSSUdHRVIgdHN2ZWN0b3J1cGRh dGVfdG9hc3QKKyAgICBCRUZPUkUgSU5TRVJUIE9SIFVQREFURSBPTiB0CisgICAgRk9SIEVB Q0ggUk9XIEVYRUNVVEUgRlVOQ1RJT04KKyAgICB0c3ZlY3Rvcl91cGRhdGVfdHJpZ2dlcihz ZWFyY2hfdmVjLCAncGdfY2F0YWxvZy5lbmdsaXNoJywgY29udGVudCk7CitDUkVBVEUgSU5E RVggdF9naW4gT04gdCBVU0lORyBnaW4oc2VhcmNoX3ZlYyk7CistLSBJbnNlcnQgd2l0aCBs YXJnZSBjb250ZW50ICh3aWxsIGJlIFRPQVNUZWQpCitJTlNFUlQgSU5UTyB0IChpZCwgY29u dGVudCkgVkFMVUVTCisgICAgKDEsIHJlcGVhdCgnaW1wb3J0YW50IGtleXdvcmQgJywgMTAw MCkgfHwgcmVwZWF0KCdmaWxsZXIgdGV4dCAnLCAxMDAwMCkpOworLS0gVmVyaWZ5IGluaXRp YWwgc3RhdGUKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHQgV0hFUkUgc2VhcmNoX3ZlYyBAQCB0 b190c3F1ZXJ5KCdpbXBvcnRhbnQnKTsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAgMQorKDEg cm93KQorCistLSBFeHBlY3RlZDogMSByb3cKKy0tIElNUE9SVEFOVDogVGhlIEJFRk9SRSBV UERBVEUgdHJpZ2dlciBtb2RpZmllcyBzZWFyY2hfdmVjLCBzbyBieSB0aGUgdGltZQorLS0g RXhlY1doaWNoSW5kZXhlc1JlcXVpcmVVcGRhdGVzKCkgcnVucywgc2VhcmNoX3ZlYyBoYXMg YWxyZWFkeSBjaGFuZ2VkLgorLS0gVGhpcyBtZWFucyB0aGUgY29tcGFyaXNvbiBzZWVzIG9s ZCB0c3ZlY3RvciB2cy4gdHJpZ2dlci1tb2RpZmllZCB0c3ZlY3RvciwKKy0tIG5vdCB0aGUg bmF0dXJhbCBwcm9ncmVzc2lvbi4gSE9UIHdvbid0IGhhcHBlbiBiZWNhdXNlIHRoZSB0cmln Z2VyIGNoYW5nZWQKKy0tIHRoZSBpbmRleGVkIGNvbHVtbi4KKy0tIFVwZGF0ZTogRXZlbiB0 aG91Z2ggY29udGVudCBrZXl3b3JkcyB1bmNoYW5nZWQsIHRyaWdnZXIgc3RpbGwgZmlyZXMK K1VQREFURSB0CitTRVQgY29udGVudCA9IHJlcGVhdCgnaW1wb3J0YW50IGtleXdvcmQgJywg MTAwMCkgfHwgcmVwZWF0KCdkaWZmZXJlbnQgZmlsbGVyICcsIDEwMDAwKQorV0hFUkUgaWQg PSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwKTsKKyB0YWJsZV9uYW1l IHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdl IHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0K KyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAwIHwgICAgICAgICAg ICAgICAgICAwLjAwIHwgdAorKDEgcm93KQorCistLSBFeHBlY3RlZDogMCBIT1QgKHRyaWdn ZXIgbW9kaWZpZXMgc2VhcmNoX3ZlYywgYmxvY2tpbmcgSE9UKQorLS0gVGhpcyBpcyBhY3R1 YWxseSBjb3JyZWN0IGJlaGF2aW9yIC0gdGhlIHRyaWdnZXIgdXBkYXRlZCBhbiBpbmRleGVk IGNvbHVtbgorLS0gVXBkYXRlOiBDaGFuZ2UgaW5kZXhlZCBrZXl3b3JkcworVVBEQVRFIHQK K1NFVCBjb250ZW50ID0gcmVwZWF0KCdjcml0aWNhbCBrZXl3b3JkICcsIDEwMDApIHx8IHJl cGVhdCgnZGlmZmVyZW50IGZpbGxlciAnLCAxMDAwMCkKK1dIRVJFIGlkID0gMTsKK1NFTEVD VCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3Vw ZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNf ZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAg ICB8ICAgICAgICAgICAgIDIgfCAgICAgICAgICAgMCB8ICAgICAgICAgICAgICAgICAgMC4w MCB8IHQKKygxIHJvdykKKworLS0gRXhwZWN0ZWQ6IDAgSE9UIChpbmRleCBrZXlzIGNoYW5n ZWQpCistLSBWZXJpZnkgcXVlcnkgY29ycmVjdG5lc3MKK1NFTEVDVCBjb3VudCgqKSBGUk9N IHQgV0hFUkUgc2VhcmNoX3ZlYyBAQCB0b190c3F1ZXJ5KCdjcml0aWNhbCcpOworIGNvdW50 IAorLS0tLS0tLQorICAgICAxCisoMSByb3cpCisKKy0tIEV4cGVjdGVkOiAxIHJvdworRFJP UCBUQUJMRSB0IENBU0NBREU7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBURVNUOiBHSU4gd2l0aCBB cnJheSBvZiBMYXJnZSBTdHJpbmdzCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChp ZCBJTlQsIHRhZ3MgVEVYVFtdKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9m ZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2dpbiBPTiB0IFVTSU5HIGdp bih0YWdzKTsKKy0tIEluc2VydCB3aXRoIGxhcmdlIGFycmF5IGVsZW1lbnRzIChtaWdodCBi ZSBUT0FTVGVkKQorSU5TRVJUIElOVE8gdCAoaWQsIHRhZ3MpIFZBTFVFUworICAgICgxLCBB UlJBWVtyZXBlYXQoJ3RhZzEnLCAxMDAwKSwgcmVwZWF0KCd0YWcyJywgMTAwMCldKTsKKy0t IFVwZGF0ZTogQ2hhbmdlIHRvIGRpZmZlcmVudCBsYXJnZSB2YWx1ZXMgLSBOT1QgSE9UCitV UERBVEUgdAorU0VUIHRhZ3MgPSBBUlJBWVtyZXBlYXQoJ3RhZzMnLCAxMDAwKSwgcmVwZWF0 KCd0YWc0JywgMTAwMCldCitXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hv dF91cGRhdGVzKDApOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0 ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAx IHwgICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAgIDAuMDAgfCB0CisoMSByb3cpCisK Ky0tIEV4cGVjdGVkOiAwIEhPVCAoa2V5cyBhY3R1YWxseSBjaGFuZ2VkKQorLS0gVXBkYXRl OiBLZWVwIHNhbWUgdGFnIHZhbHVlcywganVzdCByZW9yZGVyIC0gU0hPVUxEIEJFIEhPVAor LS0gKEdJTiBpcyBvcmRlci1pbnNlbnNpdGl2ZTogYm90aCBbdGFnMyx0YWc0XSBhbmQgW3Rh ZzQsdGFnM10KKy0tIGV4dHJhY3QgdG8gdGhlIHNhbWUgc29ydGVkIGtleSBzZXQgWyd0YWcz JywndGFnNCddKQorVVBEQVRFIHQKK1NFVCB0YWdzID0gQVJSQVlbcmVwZWF0KCd0YWc0Jywg MTAwMCksIHJlcGVhdCgndGFnMycsIDEwMDApXQorV0hFUkUgaWQgPSAxOworU0VMRUNUICog RlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRl cyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBl Y3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwg ICAgICAgICAgICAgMiB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDUwLjAwIHwg dAorKDEgcm93KQorCistLSBFeHBlY3RlZDogMSBIT1QgKEdJTiBrZXlzIHNlbWFudGljYWxs eSBpZGVudGljYWwpCistLSBVcGRhdGU6IFJlbW92ZSBhbiBlbGVtZW50IC0gTk9UIEhPVCAo a2V5cyBjaGFuZ2VkKQorVVBEQVRFIHQKK1NFVCB0YWdzID0gQVJSQVlbcmVwZWF0KCd0YWc0 JywgMTAwMCldCitXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRh dGVzKDEpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBo b3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAzIHwgICAg ICAgICAgIDEgfCAgICAgICAgICAgICAgICAgMzMuMzMgfCB0CisoMSByb3cpCisKKy0tIEV4 cGVjdGVkOiBTdGlsbCAxIEhPVCAobm90IHRoaXMgb25lKQorRFJPUCBUQUJMRSB0IENBU0NB REU7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CistLSBCUklOIEluZGV4IHdpdGggUGFydGlhbCBQcmVkaWNh dGUKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KAorICAgIGlkIElOVCBQUklNQVJZ IEtFWSwKKyAgICB2YWx1ZSBJTlQsCisgICAgZGVzY3JpcHRpb24gVEVYVAorKSBXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5E RVggdF9icmluX3BhcnRpYWxfaWR4IE9OIHQgVVNJTkcgYnJpbih2YWx1ZSkgV0hFUkUgdmFs dWUgPiAxMDA7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgNTAsICdiZWxvdyByYW5nZScp OworLS0gVGVzdCAxOiBPdXRzaWRlIHByZWRpY2F0ZQorVVBEQVRFIHQgU0VUIGRlc2NyaXB0 aW9uID0gJ3VwZGF0ZWQnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90 X3VwZGF0ZXMoMSk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRl cyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDEg fCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgIDEwMC4wMCB8IHQKKygxIHJvdykKKwor LS0gVmFsaWRhdGU6IFByZWRpY2F0ZSBxdWVyeSByZXR1cm5zIDAgcm93cworU0VMRUNUIENP VU5UKCopIGFzIGNudCBGUk9NIHQgV0hFUkUgdmFsdWUgPiAxMDA7CisgY250IAorLS0tLS0K KyAgIDAKKygxIHJvdykKKworLS0gVGVzdCAyOiBUcmFuc2l0aW9uIGludG8gcHJlZGljYXRl CitVUERBVEUgdCBTRVQgdmFsdWUgPSAxNTAgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJP TSBjaGVja19ob3RfdXBkYXRlcygyKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8 IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3Rl ZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAg ICAgICAgICAgMiB8ICAgICAgICAgICAyIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdAor KDEgcm93KQorCistLSBWYWxpZGF0ZTogUHJlZGljYXRlIHF1ZXJ5IHJldHVybnMgMSByb3cg d2l0aCBjb3JyZWN0IHZhbHVlCitTRUxFQ1QgQ09VTlQoKikgYXMgY250LCBNQVgodmFsdWUp IGFzIG1heF92YWwgRlJPTSB0IFdIRVJFIHZhbHVlID4gMTAwOworIGNudCB8IG1heF92YWwg CistLS0tLSstLS0tLS0tLS0KKyAgIDEgfCAgICAgMTUwCisoMSByb3cpCisKKy0tIFRlc3Qg MzogSW5zaWRlIHByZWRpY2F0ZSwgdmFsdWUgY2hhbmdlcworVVBEQVRFIHQgU0VUIHZhbHVl ID0gMTYwLCBkZXNjcmlwdGlvbiA9ICd1cGRhdGVkIGFnYWluJyBXSEVSRSBpZCA9IDE7CitT RUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDMpOworIHRhYmxlX25hbWUgfCB0b3Rh bF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRj aGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAg ICAgICAgfCAgICAgICAgICAgICAzIHwgICAgICAgICAgIDMgfCAgICAgICAgICAgICAgICAx MDAuMDAgfCB0CisoMSByb3cpCisKKy0tIFZhbGlkYXRlOiBVcGRhdGVkIHZhbHVlICgxNjAp IGlzIHJldHVybmVkCitTRUxFQ1QgQ09VTlQoKikgYXMgY250LCBNQVgodmFsdWUpIGFzIG1h eF92YWwgRlJPTSB0IFdIRVJFIHZhbHVlID4gMTAwOworIGNudCB8IG1heF92YWwgCistLS0t LSstLS0tLS0tLS0KKyAgIDEgfCAgICAgMTYwCisoMSByb3cpCisKKy0tIFRlc3QgNDogVHJh bnNpdGlvbiBvdXQgb2YgcHJlZGljYXRlCitVUERBVEUgdCBTRVQgdmFsdWUgPSA1MCBXSEVS RSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDQpOworIHRhYmxl X25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNl bnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICA0IHwgICAgICAgICAgIDQgfCAgICAg ICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cpCisKK1NFTEVDVCBDT1VOVCgqKSBhcyBj bnQgRlJPTSB0IFdIRVJFIHZhbHVlID4gMTAwOworIGNudCAKKy0tLS0tCisgICAwCisoMSBy b3cpCisKK1NFTEVDVCBpZCwgdmFsdWUsIGRlc2NyaXB0aW9uIEZST00gdDsKKyBpZCB8IHZh bHVlIHwgIGRlc2NyaXB0aW9uICAKKy0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0KKyAg MSB8ICAgIDUwIHwgdXBkYXRlZCBhZ2FpbgorKDEgcm93KQorCitEUk9QIFRBQkxFIHQgQ0FT Q0FERTsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKy0tIEhBU0ggSW5kZXggKFNpbXBsZSBDb2x1bW4pCist LSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGNvZGUgVkFSQ0hBUigyMCks IGRlc2NyaXB0aW9uIFRFWFQpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2Zm LCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfaGFzaF9pZHggT04gdCBVU0lO RyBoYXNoKGNvZGUpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsICdDT0RFMDAxJywgJ2lu aXRpYWwnKTsKKy0tIFVwZGF0ZSBub24taW5kZXhlZCBjb2x1bW4gLSBzaG91bGQgYmUgSE9U CitVUERBVEUgdCBTRVQgZGVzY3JpcHRpb24gPSAndXBkYXRlZCcgV0hFUkUgaWQgPSAxOwor U0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90 YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0 Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAg ICAgICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAg MTAwLjAwIHwgdAorKDEgcm93KQorCistLSBVcGRhdGUgaW5kZXhlZCBjb2x1bW4gLSBIQVNI IGluZGV4IHJlcXVpcmVzIHVwZGF0ZSwgTk9UIEhPVAorVVBEQVRFIHQgU0VUIGNvZGUgPSAn Q09ERTAwMicgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRl cygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90 X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMiB8ICAgICAg ICAgICAxIHwgICAgICAgICAgICAgICAgIDUwLjAwIHwgdAorKDEgcm93KQorCistLSBVcGRh dGUgYm90aCAtIE5PVCBIT1QKK1VQREFURSB0IFNFVCBjb2RlID0gJ0NPREUwMDMnLCBkZXNj cmlwdGlvbiA9ICdjaGFuZ2VkJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNr X2hvdF91cGRhdGVzKDEpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3Vw ZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAg ICAzIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgMzMuMzMgfCB0CisoMSByb3cp CisKKy0tIEJhY2sgdG8gb3JpZ2luYWwgY29kZSAtIE5PVCBIT1QgKGRpZmZlcmVudCBoYXNo IGJ1Y2tldCBsb2NhdGlvbikKK1VQREFURSB0IFNFVCBjb2RlID0gJ0NPREUwMDEnIFdIRVJF IGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVf bmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2Vu dGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDQgfCAgICAgICAgICAgMSB8ICAgICAg ICAgICAgICAgICAyNS4wMCB8IHQKKygxIHJvdykKKworRFJPUCBUQUJMRSB0IENBU0NBREU7 CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CistLSBIQVNIIEluZGV4IG9uIEV4cHJlc3Npb24KKy0tID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgZW1haWwgVEVYVCwgZGF0YSBKU09OQikK KyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7 CitDUkVBVEUgSU5ERVggdF9oYXNoX2xvd2VyX2VtYWlsX2lkeCBPTiB0IFVTSU5HIEhBU0go bG93ZXIoZW1haWwpKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAnQWxpY2VARXhhbXBs ZS5jb20nLCAneyJzdGF0dXMiOiAibmV3In0nKTsKKy0tIFVwZGF0ZSBub24taW5kZXhlZCBm aWVsZCAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3sic3RhdHVzIjog ImFjdGl2ZSJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRh dGVzKDEpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBo b3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAg ICAgICAgIDEgfCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cpCisKKy0tIFVw ZGF0ZSBlbWFpbCB3aXRoIGNhc2UgY2hhbmdlIG9ubHkgKHNhbWUgbG93ZXJjYXNlKSAtIHNo b3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBlbWFpbCA9ICdhbGljZUBleGFtcGxlLmNvbScg V0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygyKTsKKyB0 YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9w ZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMiB8ICAgICAgICAgICAyIHwg ICAgICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEgcm93KQorCistLSBVcGRhdGUgZW1haWwg dG8gZGlmZmVyZW50IGxvd2VyY2FzZSAtIE5PVCBIT1QKK1VQREFURSB0IFNFVCBlbWFpbCA9 ICdib2JAZXhhbXBsZS5jb20nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tf aG90X3VwZGF0ZXMoMik7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBk YXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAg IDMgfCAgICAgICAgICAgMiB8ICAgICAgICAgICAgICAgICA2Ni42NyB8IHQKKygxIHJvdykK KworRFJPUCBUQUJMRSB0IENBU0NBREU7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBNdWx0aXBsZSBI QVNIIEluZGV4ZXMKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgY2F0 ZWdvcnkgVkFSQ0hBUiwgc3RhdHVzIFZBUkNIQVIsIHZhbHVlIElOVCkKKyAgICBXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5E RVggdF9oYXNoX2NhdGVnb3J5X2lkeCBPTiB0IFVTSU5HIGhhc2goY2F0ZWdvcnkpOworQ1JF QVRFIElOREVYIHRfaGFzaF9zdGF0dXNfaWR4IE9OIHQgVVNJTkcgaGFzaChzdGF0dXMpOwor SU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsICdlbGVjdHJvbmljcycsICdhY3RpdmUnLCAxMDAp OworLS0gVXBkYXRlIG5vbi1pbmRleGVkIGNvbHVtbiAtIHNob3VsZCBiZSBIT1QKK1VQREFU RSB0IFNFVCB2YWx1ZSA9IDE1MCBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNr X2hvdF91cGRhdGVzKDEpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3Vw ZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAg ICAxIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cp CisKKy0tIFVwZGF0ZSBvbmUgaW5kZXhlZCBjb2x1bW4gLSBOT1QgSE9UCitVUERBVEUgdCBT RVQgY2F0ZWdvcnkgPSAnYm9va3MnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hl Y2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3Rf dXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCist LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAg ICAgIDIgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICA1MC4wMCB8IHQKKygxIHJv dykKKworLS0gVXBkYXRlIG90aGVyIGluZGV4ZWQgY29sdW1uIC0gTk9UIEhPVAorVVBEQVRF IHQgU0VUIHN0YXR1cyA9ICdpbmFjdGl2ZScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJP TSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8 IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3Rl ZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAg ICAgICAgICAgMyB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDMzLjMzIHwgdAor KDEgcm93KQorCistLSBVcGRhdGUgYm90aCBpbmRleGVkIGNvbHVtbnMgLSBOT1QgSE9UCitV UERBVEUgdCBTRVQgY2F0ZWdvcnkgPSAndmlkZW9zJywgc3RhdHVzID0gJ3BlbmRpbmcnIFdI RVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFi bGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVy Y2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDQgfCAgICAgICAgICAgMSB8ICAg ICAgICAgICAgICAgICAyNS4wMCB8IHQKKygxIHJvdykKKworRFJPUCBUQUJMRSB0IENBU0NB REU7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CistLSBCUklOIHZzIEhBU0ggQ29tcGFyaXNvbgorLS0gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorQ1JFQVRFIFRBQkxFIHRfYnJpbihpZCBJTlQsIHZhbHVlIElOVCwgZGF0YSBU RVhUKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9 IDcwKTsKK0NSRUFURSBUQUJMRSB0X2hhc2goaWQgSU5ULCB2YWx1ZSBJTlQsIGRhdGEgVEVY VCkKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3 MCk7CitDUkVBVEUgSU5ERVggdF9icmluX3ZhbHVlX2lkeCBPTiB0X2JyaW4gVVNJTkcgYnJp bih2YWx1ZSk7CitDUkVBVEUgSU5ERVggdF9oYXNoX3ZhbHVlX2lkeCBPTiB0X2hhc2ggVVNJ TkcgaGFzaCh2YWx1ZSk7CitJTlNFUlQgSU5UTyB0X2JyaW4gVkFMVUVTICgxLCAxMDAsICdp bml0aWFsJyk7CitJTlNFUlQgSU5UTyB0X2hhc2ggVkFMVUVTICgxLCAxMDAsICdpbml0aWFs Jyk7CistLSBTYW1lIHVwZGF0ZSBvbiBib3RoIC0gZGlmZmVyZW50IEhPVCBiZWhhdmlvciBl eHBlY3RlZAorLS0gQlJJTjogbWlnaHQgYWxsb3cgSE9UIChyYW5nZSBzdW1tYXJ5IHVuY2hh bmdlZCkKKy0tIEhBU0g6IGJsb2NrcyBIT1QgKGhhc2ggYnVja2V0IGNoYW5nZWQpCitVUERB VEUgdF9icmluIFNFVCB2YWx1ZSA9IDE1MCBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9N IGNoZWNrX2hvdF91cGRhdGVzKDEsICd0X2JyaW4nKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxf dXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hl c19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0X2JyaW4g ICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgMTAw LjAwIHwgdAorKDEgcm93KQorCistLSBFeHBlY3RlZDogMSBIT1QgKEJSSU4gYWxsb3dzIGl0 IGZvciBzaW5nbGUgcm93KQorVVBEQVRFIHRfaGFzaCBTRVQgdmFsdWUgPSAxNTAgV0hFUkUg aWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwLCAndF9oYXNoJyk7 CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRh dGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tCisgdF9oYXNoICAgICB8ICAgICAgICAgICAgIDEgfCAgICAgICAgICAg MCB8ICAgICAgICAgICAgICAgICAgMC4wMCB8IHQKKygxIHJvdykKKworLS0gRXhwZWN0ZWQ6 IDAgSE9UIChIQVNIIGJsb2NrcyBpdCkKK0RST1AgVEFCTEUgdF9icmluIENBU0NBREU7CitE Uk9QIFRBQkxFIHRfaGFzaCBDQVNDQURFOworLS0gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gSEFTSCBJbmRl eCB3aXRoIE5VTEwgVmFsdWVzCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJ TlQsIGNhdGVnb3J5IFZBUkNIQVIsIGRhdGEgVEVYVCkKKyAgICBXSVRIIChhdXRvdmFjdXVt X2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9oYXNo X2NhdGVnb3J5X2lkeCBPTiB0IFVTSU5HIGhhc2goY2F0ZWdvcnkpOworSU5TRVJUIElOVE8g dCBWQUxVRVMgKDEsICdlbGVjdHJvbmljcycsICdpbml0aWFsJyk7CistLSBVcGRhdGUgaW5k ZXhlZCBjb2x1bW4gdG8gTlVMTCAtIE5PVCBIT1QgKGhhc2ggdmFsdWUgY2hhbmdlZCkKK1VQ REFURSB0IFNFVCBjYXRlZ29yeSA9IE5VTEwgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJP TSBjaGVja19ob3RfdXBkYXRlcygwKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8 IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3Rl ZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAg ICAgICAgICAgMSB8ICAgICAgICAgICAwIHwgICAgICAgICAgICAgICAgICAwLjAwIHwgdAor KDEgcm93KQorCistLSBFeHBlY3RlZDogMCBIT1QKKy0tIFVwZGF0ZSBpbmRleGVkIGNvbHVt biBmcm9tIE5VTEwgdG8gdmFsdWUgLSBOT1QgSE9UCitVUERBVEUgdCBTRVQgY2F0ZWdvcnkg PSAnYm9va3MnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0 ZXMoMCk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhv dF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDIgfCAgICAg ICAgICAgMCB8ICAgICAgICAgICAgICAgICAgMC4wMCB8IHQKKygxIHJvdykKKworLS0gRXhw ZWN0ZWQ6IDAgSE9UCistLSBVcGRhdGUgbm9uLWluZGV4ZWQgY29sdW1uIC0gc2hvdWxkIGJl IEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAndXBkYXRlZCcgV0hFUkUgaWQgPSAxOworU0VM RUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxf dXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hl c19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAg ICAgIHwgICAgICAgICAgICAgMyB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDMz LjMzIHwgdAorKDEgcm93KQorCistLSBFeHBlY3RlZDogMSBIT1QKK0RST1AgVEFCTEUgdCBD QVNDQURFOworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorLS0gQlJJTiBvbiBKU09OQiBGaWVsZAorLS0gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBtZXRyaWNzIEpTT05CKQorICAgIFdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKKy0tIEJS SU4gZG9lc24ndCBkaXJlY3RseSBzdXBwb3J0IEpTT05CLCBidXQgd2UgY2FuIHRlc3Qgb24g ZXhwcmVzc2lvbgorQ1JFQVRFIElOREVYIHRfYnJpbl9jb3VudF9pZHggT04gdCBVU0lORyBi cmluKAorICAgIENBU1QobWV0cmljcy0+Pidjb3VudCcgQVMgSU5URUdFUikKKyk7CitJTlNF UlQgSU5UTyB0IFZBTFVFUyAoMSwgJ3siY291bnQiOiAiMTAwIiwgInRpbWVzdGFtcCI6ICIy MDI0LTAxLTAxIn0nKTsKKy0tIFVwZGF0ZSBub24taW5kZXhlZCBKU09OQiBmaWVsZCAtIHNo b3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBtZXRyaWNzID0gJ3siY291bnQiOiAiMTAwIiwg InRpbWVzdGFtcCI6ICIyMDI0LTAxLTAyIn0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZS T00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMg fCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0 ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAg ICAgICAgICAgIDEgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgIDEwMC4wMCB8IHQK KygxIHJvdykKKworLS0gRXhwZWN0ZWQ6IDEgSE9UCistLSBVcGRhdGUgaW5kZXhlZCBmaWVs ZCAtIEJSSU4gYWxsb3dzIEhPVCBmb3Igc2luZ2xlIHJvdworVVBEQVRFIHQgU0VUIG1ldHJp Y3MgPSAneyJjb3VudCI6ICIxNTAiLCAidGltZXN0YW1wIjogIjIwMjQtMDEtMDIifScgV0hF UkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygyKTsKKyB0YWJs ZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJj ZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMiB8ICAgICAgICAgICAyIHwgICAg ICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEgcm93KQorCistLSBFeHBlY3RlZDogMiBIT1Qg KEJSSU4gcGVybWl0cyBzaW5nbGUtcm93IHVwZGF0ZXMpCitEUk9QIFRBQkxFIHQgQ0FTQ0FE RTsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKy0tIE1peGVkIEJSSU4gKyBIQVNIIG9uIFNhbWUgVGFibGUK Ky0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgY2F0ZWdvcnkgVkFSQ0hB UiwgdGltZXN0YW1wIFRJTUVTVEFNUCwgcHJpY2UgTlVNRVJJQywgZGF0YSBURVhUKQorICAg IFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NS RUFURSBJTkRFWCB0X2JyaW5fdGltZXN0YW1wX2lkeCBPTiB0IFVTSU5HIGJyaW4odGltZXN0 YW1wKTsKK0NSRUFURSBJTkRFWCB0X2hhc2hfY2F0ZWdvcnlfaWR4IE9OIHQgVVNJTkcgaGFz aChjYXRlZ29yeSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ2Jvb2tzJywgJzIwMjQt MDEtMDEgMTA6MDA6MDAnLCAyOS45OSwgJ2luaXRpYWwnKTsKKy0tIFVwZGF0ZSBub24taW5k ZXhlZCBjb2x1bW4gLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd1cGRh dGVkJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEp OworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBk YXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAg IDEgfCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cpCisKKy0tIEV4cGVjdGVk OiAxIEhPVAorLS0gVXBkYXRlIEJSSU4gaW5kZXhlZCBjb2x1bW4gLSBhbGxvd3MgSE9UCitV UERBVEUgdCBTRVQgdGltZXN0YW1wID0gJzIwMjQtMDEtMDIgMTA6MDA6MDAnIFdIRVJFIGlk ID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMik7CisgdGFibGVfbmFt ZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFn ZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t CisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDIgfCAgICAgICAgICAgMiB8ICAgICAgICAg ICAgICAgIDEwMC4wMCB8IHQKKygxIHJvdykKKworLS0gRXhwZWN0ZWQ6IDIgSE9UCistLSBV cGRhdGUgSEFTSCBpbmRleGVkIGNvbHVtbiAtIGJsb2NrcyBIT1QKK1VQREFURSB0IFNFVCBj YXRlZ29yeSA9ICd2aWRlb3MnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tf aG90X3VwZGF0ZXMoMik7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBk YXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAg IDMgfCAgICAgICAgICAgMiB8ICAgICAgICAgICAgICAgICA2Ni42NyB8IHQKKygxIHJvdykK KworLS0gRXhwZWN0ZWQ6IDIgSE9UIChIQVNIIGJsb2NrcyBpdCkKKy0tIFVwZGF0ZSBwcmlj ZSAobm9uLWluZGV4ZWQpIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIHByaWNlID0g MzkuOTkgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygz KTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3Vw ZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgNCB8ICAgICAgICAg ICAzIHwgICAgICAgICAgICAgICAgIDc1LjAwIHwgdAorKDEgcm93KQorCistLSBFeHBlY3Rl ZDogMyBIT1QKK0RST1AgVEFCTEUgdCBDQVNDQURFOworLS0gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gSW5k ZXggYm90aCBvbiBhIGZpZWxkIGluIGEgSlNPTkIgZG9jdW1lbnQsIGFuZCB0aGUgZG9jdW1l bnQKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCBQUklNQVJZIEtFWSwg ZG9jcyBKU09OQikgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9y ID0gNzApOworQ1JFQVRFIElOREVYIHRfZG9jc19pZHggT04gdCgoZG9jcy0+J25hbWUnKSk7 CitDUkVBVEUgSU5ERVggdF9kb2NzX2NvbF9pZHggT04gdChkb2NzKTsKK0lOU0VSVCBJTlRP IHQgVkFMVUVTICgxLCAneyJuYW1lIjogImpvaG4iLCAiZGF0YSI6ICJzb21lIGRhdGEifScp OworLS0gVXBkYXRlIGltcGFjdHMgaW5kZXggb24gd2hvbGUgZG9jbWVudCBhdHRyaWJ1dGUs IGNhbid0IGdvIEhPVAorVVBEQVRFIHQgU0VUIGRvY3M9J3sibmFtZSI6ICJqb2huIiwgImRh dGEiOiAic29tZSBvdGhlciBkYXRhIn0nIFdIRVJFIGlkPTE7CitTRUxFQ1QgKiBGUk9NIGNo ZWNrX2hvdF91cGRhdGVzKDApOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90 X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAor LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAg ICAgICAxIHwgICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAgIDAuMDAgfCB0CisoMSBy b3cpCisKK0RST1AgVEFCTEUgdCBDQVNDQURFOworLS0gQ2xlYW51cAorRFJPUCBGVU5DVElP TiBjaGVja19ob3RfdXBkYXRlcyhpbnQsIHRleHQsIHRleHQpOworRFJPUCBDT0xMQVRJT04g Y2FzZV9pbnNlbnNpdGl2ZTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxs ZWxfc2NoZWR1bGUgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCmluZGV4 IDU0OWU5YjJkN2JlLi4xNTc2ZjY2NDU1ZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9wYXJhbGxlbF9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3Nj aGVkdWxlCkBAIC0xMjUsNiArMTI1LDEyIEBAIHRlc3Q6IHBsYW5jYWNoZSBsaW1pdCBwbHBn c3FsIGNvcHkyIHRlbXAgZG9tYWluIHJhbmdlZnVuY3MgcHJlcGFyZSBjb252ZXJzaW9uIHRy CiAjIC0tLS0tLS0tLS0KIHRlc3Q6IHBhcnRpdGlvbl9tZXJnZSBwYXJ0aXRpb25fc3BsaXQg cGFydGl0aW9uX2pvaW4gcGFydGl0aW9uX3BydW5lIHJlbG9wdGlvbnMgaGFzaF9wYXJ0IGlu ZGV4aW5nIHBhcnRpdGlvbl9hZ2dyZWdhdGUgcGFydGl0aW9uX2luZm8gdHVwbGVzb3J0IGV4 cGxhaW4gY29tcHJlc3Npb24gY29tcHJlc3Npb25fbHo0IG1lbW9pemUgc3RhdHMgcHJlZGlj YXRlIG51bWEgZWFnZXJfYWdncmVnYXRlCiAKKworIyAtLS0tLS0tLS0tCisjIEFub3RoZXIg Z3JvdXAgb2YgcGFyYWxsZWwgdGVzdHMsIHRoZXNlIGZvY3VzZWQgb24gaGVhcCBIT1QgdXBk YXRlcworIyAtLS0tLS0tLS0tCit0ZXN0OiBoZWFwX2hvdF91cGRhdGVzCisKICMgZXZlbnRf dHJpZ2dlciBkZXBlbmRzIG9uIGNyZWF0ZV9hbSBhbmQgY2Fubm90IHJ1biBjb25jdXJyZW50 bHkgd2l0aAogIyBhbnkgdGVzdCB0aGF0IHJ1bnMgRERMCiAjIG9pZGpvaW5zIGlzIHJlYWQt b25seSwgdGhvdWdoLCBhbmQgc2hvdWxkIHJ1biBsYXRlIGZvciBiZXN0IGNvdmVyYWdlCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9oZWFwX2hvdF91cGRhdGVzLnNxbCBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2hlYXBfaG90X3VwZGF0ZXMuc3FsCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lMDQ3YmNkZGY1YwotLS0gL2Rldi9udWxs CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2hlYXBfaG90X3VwZGF0ZXMuc3FsCkBAIC0w LDAgKzEsNTEzIEBACistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBUZXN0IFN1aXRlIGZvciBIZWFwLW9u bHkgKEhPVCkgVXBkYXRlcworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCistLSBTZXR1cDogQ3JlYXRlIGZ1 bmN0aW9uIHRvIG1lYXN1cmUgSE9UIHVwZGF0ZXMKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNU SU9OIGNoZWNrX2hvdF91cGRhdGVzKAorICAgIGV4cGVjdGVkIElOVCwKKyAgICBwX3RhYmxl X25hbWUgVEVYVCBERUZBVUxUICd0JywKKyAgICBwX3NjaGVtYV9uYW1lIFRFWFQgREVGQVVM VCBjdXJyZW50X3NjaGVtYSgpCispCitSRVRVUk5TIFRBQkxFICgKKyAgICB0YWJsZV9uYW1l IFRFWFQsCisgICAgdG90YWxfdXBkYXRlcyBCSUdJTlQsCisgICAgaG90X3VwZGF0ZXMgQklH SU5ULAorICAgIGhvdF91cGRhdGVfcGVyY2VudGFnZSBOVU1FUklDLAorICAgIG1hdGNoZXNf ZXhwZWN0ZWQgQk9PTEVBTgorKQorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0RFQ0xBUkUK KyAgICB2X3JlbGlkIG9pZDsKKyAgICB2X3F1YWxpZmllZF9uYW1lIFRFWFQ7CisgICAgdl9o b3RfdXBkYXRlcyBCSUdJTlQ7CisgICAgdl91cGRhdGVzIEJJR0lOVDsKKyAgICB2X3hhY3Rf aG90X3VwZGF0ZXMgQklHSU5UOworICAgIHZfeGFjdF91cGRhdGVzIEJJR0lOVDsKK0JFR0lO CisgICAgLS0gRm9yY2Ugc3RhdGlzdGljcyB1cGRhdGUKKyAgICBQRVJGT1JNIHBnX3N0YXRf Zm9yY2VfbmV4dF9mbHVzaCgpOworCisgICAgLS0gR2V0IHRhYmxlIE9JRAorICAgIHZfcXVh bGlmaWVkX25hbWUgOj0gcXVvdGVfaWRlbnQocF9zY2hlbWFfbmFtZSkgfHwgJy4nIHx8IHF1 b3RlX2lkZW50KHBfdGFibGVfbmFtZSk7CisgICAgdl9yZWxpZCA6PSB2X3F1YWxpZmllZF9u YW1lOjpyZWdjbGFzczsKKworICAgIElGIHZfcmVsaWQgSVMgTlVMTCBUSEVOCisJUkFJU0Ug RVhDRVBUSU9OICdUYWJsZSAlLiUgbm90IGZvdW5kJywgcF9zY2hlbWFfbmFtZSwgcF90YWJs ZV9uYW1lOworICAgIEVORCBJRjsKKworICAgIC0tIEdldCBjdW11bGF0aXZlICsgdHJhbnNh Y3Rpb24gc3RhdHMKKyAgICB2X2hvdF91cGRhdGVzIDo9IENPQUxFU0NFKHBnX3N0YXRfZ2V0 X3R1cGxlc19ob3RfdXBkYXRlZCh2X3JlbGlkKSwgMCk7CisgICAgdl91cGRhdGVzIDo9IENP QUxFU0NFKHBnX3N0YXRfZ2V0X3R1cGxlc191cGRhdGVkKHZfcmVsaWQpLCAwKTsKKyAgICB2 X3hhY3RfaG90X3VwZGF0ZXMgOj0gQ09BTEVTQ0UocGdfc3RhdF9nZXRfeGFjdF90dXBsZXNf aG90X3VwZGF0ZWQodl9yZWxpZCksIDApOworICAgIHZfeGFjdF91cGRhdGVzIDo9IENPQUxF U0NFKHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX3VwZGF0ZWQodl9yZWxpZCksIDApOworCisg ICAgdl9ob3RfdXBkYXRlcyA6PSB2X2hvdF91cGRhdGVzICsgdl94YWN0X2hvdF91cGRhdGVz OworICAgIHZfdXBkYXRlcyA6PSB2X3VwZGF0ZXMgKyB2X3hhY3RfdXBkYXRlczsKKworICAg IFJFVFVSTiBRVUVSWQorICAgIFNFTEVDVAorCXBfdGFibGVfbmFtZTo6VEVYVCwKKwl2X3Vw ZGF0ZXM6OkJJR0lOVCwKKwl2X2hvdF91cGRhdGVzOjpCSUdJTlQsCisJQ0FTRSBXSEVOIHZf dXBkYXRlcyA+IDAKKwkgICAgIFRIRU4gUk9VTkQoKHZfaG90X3VwZGF0ZXM6Om51bWVyaWMg LyB2X3VwZGF0ZXM6Om51bWVyaWMgKiAxMDApOjpudW1lcmljLCAyKQorCSAgICAgRUxTRSAw CisJRU5ELAorCSh2X2hvdF91cGRhdGVzID0gZXhwZWN0ZWQpOjpCT09MRUFOOworRU5EOwor JCQ7CisKK0NSRUFURSBDT0xMQVRJT04gY2FzZV9pbnNlbnNpdGl2ZSAoCisgICAgcHJvdmlk ZXIgPSBsaWJjLAorICAgIGxvY2FsZSA9ICdDJworKTsKKworCistLSA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cist LSBHSU4gSW5kZXggb24gSlNPTkIKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlk IElOVCwgZGF0YSBKU09OQikKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYs IGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9naW5faWR4IE9OIHQgVVNJTkcg Z2luKGRhdGEpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsICd7InRhZ3MiOiBbInBvc3Rn cmVzIiwgImRhdGFiYXNlIl19Jyk7CisKKy0tIENoYW5nZSB0YWdzIC0gR0lOIGtleXMgY2hh bmdlZCwgc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3sidGFncyI6 IFsicG9zdGdyZXMiLCAic3FsIl19JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNo ZWNrX2hvdF91cGRhdGVzKDApOworCistLSBDaGFuZ2UgdGFncyBhZ2FpbiAtIEdJTiBrZXlz IGNoYW5nZWQsIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InRh Z3MiOiBbIm15c3FsIiwgInNxbCJdfScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBj aGVja19ob3RfdXBkYXRlcygwKTsKKworLS0gQWRkIGZpZWxkIHdpdGhvdXQgY2hhbmdpbmcg ZXhpc3Rpbmcga2V5cyAtIEdJTiBrZXlzIGNoYW5nZWQgKGFkZGVkICJub3RlIiksIE5PVCBI T1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3sidGFncyI6IFsibXlzcWwiLCAic3FsIl0sICJu b3RlIjogInRlc3QifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3Rf dXBkYXRlcygwKTsKKworRFJPUCBUQUJMRSB0OworCisKKy0tID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEdJ TiBJbmRleCB3aXRoIFVuY2hhbmdlZCBLZXlzCistLSA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFC TEUgdChpZCBJTlQsIGRhdGEgSlNPTkIpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVk ID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworLS0gQ3JlYXRlIEdJTiBpbmRleCBvbiBzcGVj aWZpYyBwYXRoCitDUkVBVEUgSU5ERVggdF9naW5faWR4IE9OIHQgVVNJTkcgZ2luKChkYXRh LT4ndGFncycpKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAneyJ0YWdzIjogWyJwb3N0 Z3JlcyIsICJzcWwiXSwgInN0YXR1cyI6ICJhY3RpdmUifScpOworCistLSBDaGFuZ2Ugbm9u LWluZGV4ZWQgZmllbGQgLSBHSU4ga2V5cyBvbiAndGFncycgdW5jaGFuZ2VkLCBzaG91bGQg YmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InRhZ3MiOiBbInBvc3RncmVzIiwgInNx bCJdLCAic3RhdHVzIjogImluYWN0aXZlIn0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZS T00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisKKy0tIENoYW5nZSBpbmRleGVkIHRhZ3MgLSBH SU4ga2V5cyBjaGFuZ2VkLCBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEg PSAneyJ0YWdzIjogWyJteXNxbCIsICJzcWwiXSwgInN0YXR1cyI6ICJpbmFjdGl2ZSJ9JyBX SEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworCitE Uk9QIFRBQkxFIHQ7CisKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gR0lOIHdpdGgganNvbmJfcGF0 aF9vcHMKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgZGF0YSBKU09O QikKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3 MCk7CitDUkVBVEUgSU5ERVggdF9naW5faWR4IE9OIHQgVVNJTkcgZ2luKGRhdGEganNvbmJf cGF0aF9vcHMpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsICd7InVzZXIiOiB7Im5hbWUi OiAiYWxpY2UifSwgInRhZ3MiOiBbImEiLCAiYiJdfScpOworCistLSBDaGFuZ2UgdmFsdWUg YXQgZGlmZmVyZW50IHBhdGggLSBrZXlzIGNoYW5nZWQsIE5PVCBIT1QKK1VQREFURSB0IFNF VCBkYXRhID0gJ3sidXNlciI6IHsibmFtZSI6ICJib2IifSwgInRhZ3MiOiBbImEiLCAiYiJd fScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwKTsK KworRFJPUCBUQUJMRSB0OworCisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIE1peGVkIEluZGV4IFR5 cGVzIChCUklOICsgRXhwcmVzc2lvbikKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0 KGlkIElOVCwgdmFsdWUgSU5ULCBkYXRhIEpTT05CKQorICAgIFdJVEggKGF1dG92YWN1dW1f ZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2JyaW5f aWR4IE9OIHQgVVNJTkcgYnJpbih2YWx1ZSk7CitDUkVBVEUgSU5ERVggdF9leHByX2lkeCBP TiB0KChkYXRhLT4nc3RhdHVzJykpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsIDEwMCwg J3sic3RhdHVzIjogImFjdGl2ZSJ9Jyk7CisKKy0tIFVwZGF0ZSBvbmx5IEJSSU4gY29sdW1u IC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIHZhbHVlID0gMjAwIFdIRVJFIGlkID0g MTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisKKy0tIFVwZGF0ZSBv bmx5IGV4cHJlc3Npb24gY29sdW1uIC0gc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNF VCBkYXRhID0gJ3sic3RhdHVzIjogImluYWN0aXZlIn0nIFdIRVJFIGlkID0gMTsKK1NFTEVD VCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisKKy0tIFVwZGF0ZSBib3RoIC0gc2hv dWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCB2YWx1ZSA9IDMwMCwgZGF0YSA9ICd7InN0 YXR1cyI6ICJwZW5kaW5nIn0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tf aG90X3VwZGF0ZXMoMSk7CisKK0RST1AgVEFCTEUgdDsKKworCistLSA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cist LSBHSU4gQXJyYXkgSW5kZXggLSBPcmRlciBJbnNlbnNpdGl2ZSBFeHRyYWN0aW9uCistLSA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CitDUkVBVEUgVEFCTEUgdCgKKyAgICBpZCBJTlQgUFJJTUFSWSBLRVksCisg ICAgZGF0YSBKU09OQgorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxm YWN0b3IgPSA3MCk7CisKKy0tIEdJTiBpbmRleCBvbiBKU09OQiBhcnJheSAoZXh0cmFjdHMg YWxsIGVsZW1lbnRzKQorQ1JFQVRFIElOREVYIHRfaXRlbXNfZ2luIE9OIHQgVVNJTkcgR0lO ICgoZGF0YS0+J2l0ZW1zJykpOworCitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ3siaXRl bXMiOiBbMSwgMiwgM10sICJzdGF0dXMiOiAiYWN0aXZlIn0nKTsKKworLS0gVXBkYXRlOiBS ZW9yZGVyIGFycmF5IGVsZW1lbnRzCistLSBKU09OQiBlcXVhbGl0eTogTk9UIGVxdWFsIChk aWZmZXJlbnQgYXJyYXlzKQorLS0gR0lOIGV4dHJhY3Rpb246IFNhbWUgZWxlbWVudHMgZXh0 cmFjdGVkIChtaWdodCBhbGxvdyBIT1QgaWYgbm90IGNhcmVmdWwpCitVUERBVEUgdCBTRVQg ZGF0YSA9ICd7Iml0ZW1zIjogWzMsIDIsIDFdLCAic3RhdHVzIjogImFjdGl2ZSJ9JyBXSEVS RSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworCistLSBV cGRhdGU6IEFkZC9yZW1vdmUgZWxlbWVudAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJpdGVt cyI6IFsxLCAyLCAzLCA0XSwgInN0YXR1cyI6ICJhY3RpdmUifScgV0hFUkUgaWQgPSAxOwor U0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKworRFJPUCBUQUJMRSB0Owor CisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKy0tIFRFU1Q6IEdJTiB3aXRoIFRPQVNUZWQgVEVYVCAodHN2 ZWN0b3IpCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGNvbnRlbnQg VEVYVCwgc2VhcmNoX3ZlYyB0c3ZlY3RvcikKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJs ZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CisKKy0tIENyZWF0ZSB0cmlnZ2VyIHRvIG1h aW50YWluIHRzdmVjdG9yCitDUkVBVEUgVFJJR0dFUiB0c3ZlY3RvcnVwZGF0ZV90b2FzdAor ICAgIEJFRk9SRSBJTlNFUlQgT1IgVVBEQVRFIE9OIHQKKyAgICBGT1IgRUFDSCBST1cgRVhF Q1VURSBGVU5DVElPTgorICAgIHRzdmVjdG9yX3VwZGF0ZV90cmlnZ2VyKHNlYXJjaF92ZWMs ICdwZ19jYXRhbG9nLmVuZ2xpc2gnLCBjb250ZW50KTsKKworQ1JFQVRFIElOREVYIHRfZ2lu IE9OIHQgVVNJTkcgZ2luKHNlYXJjaF92ZWMpOworCistLSBJbnNlcnQgd2l0aCBsYXJnZSBj b250ZW50ICh3aWxsIGJlIFRPQVNUZWQpCitJTlNFUlQgSU5UTyB0IChpZCwgY29udGVudCkg VkFMVUVTCisgICAgKDEsIHJlcGVhdCgnaW1wb3J0YW50IGtleXdvcmQgJywgMTAwMCkgfHwg cmVwZWF0KCdmaWxsZXIgdGV4dCAnLCAxMDAwMCkpOworCistLSBWZXJpZnkgaW5pdGlhbCBz dGF0ZQorU0VMRUNUIGNvdW50KCopIEZST00gdCBXSEVSRSBzZWFyY2hfdmVjIEBAIHRvX3Rz cXVlcnkoJ2ltcG9ydGFudCcpOworLS0gRXhwZWN0ZWQ6IDEgcm93CisKKy0tIElNUE9SVEFO VDogVGhlIEJFRk9SRSBVUERBVEUgdHJpZ2dlciBtb2RpZmllcyBzZWFyY2hfdmVjLCBzbyBi eSB0aGUgdGltZQorLS0gRXhlY1doaWNoSW5kZXhlc1JlcXVpcmVVcGRhdGVzKCkgcnVucywg c2VhcmNoX3ZlYyBoYXMgYWxyZWFkeSBjaGFuZ2VkLgorLS0gVGhpcyBtZWFucyB0aGUgY29t cGFyaXNvbiBzZWVzIG9sZCB0c3ZlY3RvciB2cy4gdHJpZ2dlci1tb2RpZmllZCB0c3ZlY3Rv ciwKKy0tIG5vdCB0aGUgbmF0dXJhbCBwcm9ncmVzc2lvbi4gSE9UIHdvbid0IGhhcHBlbiBi ZWNhdXNlIHRoZSB0cmlnZ2VyIGNoYW5nZWQKKy0tIHRoZSBpbmRleGVkIGNvbHVtbi4KKwor LS0gVXBkYXRlOiBFdmVuIHRob3VnaCBjb250ZW50IGtleXdvcmRzIHVuY2hhbmdlZCwgdHJp Z2dlciBzdGlsbCBmaXJlcworVVBEQVRFIHQKK1NFVCBjb250ZW50ID0gcmVwZWF0KCdpbXBv cnRhbnQga2V5d29yZCAnLCAxMDAwKSB8fCByZXBlYXQoJ2RpZmZlcmVudCBmaWxsZXIgJywg MTAwMDApCitXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVz KDApOworLS0gRXhwZWN0ZWQ6IDAgSE9UICh0cmlnZ2VyIG1vZGlmaWVzIHNlYXJjaF92ZWMs IGJsb2NraW5nIEhPVCkKKy0tIFRoaXMgaXMgYWN0dWFsbHkgY29ycmVjdCBiZWhhdmlvciAt IHRoZSB0cmlnZ2VyIHVwZGF0ZWQgYW4gaW5kZXhlZCBjb2x1bW4KKworLS0gVXBkYXRlOiBD aGFuZ2UgaW5kZXhlZCBrZXl3b3JkcworVVBEQVRFIHQKK1NFVCBjb250ZW50ID0gcmVwZWF0 KCdjcml0aWNhbCBrZXl3b3JkICcsIDEwMDApIHx8IHJlcGVhdCgnZGlmZmVyZW50IGZpbGxl ciAnLCAxMDAwMCkKK1dIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3Vw ZGF0ZXMoMCk7CistLSBFeHBlY3RlZDogMCBIT1QgKGluZGV4IGtleXMgY2hhbmdlZCkKKwor LS0gVmVyaWZ5IHF1ZXJ5IGNvcnJlY3RuZXNzCitTRUxFQ1QgY291bnQoKikgRlJPTSB0IFdI RVJFIHNlYXJjaF92ZWMgQEAgdG9fdHNxdWVyeSgnY3JpdGljYWwnKTsKKy0tIEV4cGVjdGVk OiAxIHJvdworCitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKworCistLSA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cist LSBURVNUOiBHSU4gd2l0aCBBcnJheSBvZiBMYXJnZSBTdHJpbmdzCistLSA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIHRhZ3MgVEVYVFtdKQorICAgIFdJVEggKGF1dG92 YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0 X2dpbiBPTiB0IFVTSU5HIGdpbih0YWdzKTsKKworLS0gSW5zZXJ0IHdpdGggbGFyZ2UgYXJy YXkgZWxlbWVudHMgKG1pZ2h0IGJlIFRPQVNUZWQpCitJTlNFUlQgSU5UTyB0IChpZCwgdGFn cykgVkFMVUVTCisgICAgKDEsIEFSUkFZW3JlcGVhdCgndGFnMScsIDEwMDApLCByZXBlYXQo J3RhZzInLCAxMDAwKV0pOworCistLSBVcGRhdGU6IENoYW5nZSB0byBkaWZmZXJlbnQgbGFy Z2UgdmFsdWVzIC0gTk9UIEhPVAorVVBEQVRFIHQKK1NFVCB0YWdzID0gQVJSQVlbcmVwZWF0 KCd0YWczJywgMTAwMCksIHJlcGVhdCgndGFnNCcsIDEwMDApXQorV0hFUkUgaWQgPSAxOwor U0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwKTsKKy0tIEV4cGVjdGVkOiAwIEhP VCAoa2V5cyBhY3R1YWxseSBjaGFuZ2VkKQorCistLSBVcGRhdGU6IEtlZXAgc2FtZSB0YWcg dmFsdWVzLCBqdXN0IHJlb3JkZXIgLSBTSE9VTEQgQkUgSE9UCistLSAoR0lOIGlzIG9yZGVy LWluc2Vuc2l0aXZlOiBib3RoIFt0YWczLHRhZzRdIGFuZCBbdGFnNCx0YWczXQorLS0gZXh0 cmFjdCB0byB0aGUgc2FtZSBzb3J0ZWQga2V5IHNldCBbJ3RhZzMnLCd0YWc0J10pCitVUERB VEUgdAorU0VUIHRhZ3MgPSBBUlJBWVtyZXBlYXQoJ3RhZzQnLCAxMDAwKSwgcmVwZWF0KCd0 YWczJywgMTAwMCldCitXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91 cGRhdGVzKDEpOworLS0gRXhwZWN0ZWQ6IDEgSE9UIChHSU4ga2V5cyBzZW1hbnRpY2FsbHkg aWRlbnRpY2FsKQorCistLSBVcGRhdGU6IFJlbW92ZSBhbiBlbGVtZW50IC0gTk9UIEhPVCAo a2V5cyBjaGFuZ2VkKQorVVBEQVRFIHQKK1NFVCB0YWdzID0gQVJSQVlbcmVwZWF0KCd0YWc0 JywgMTAwMCldCitXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRh dGVzKDEpOworLS0gRXhwZWN0ZWQ6IFN0aWxsIDEgSE9UIChub3QgdGhpcyBvbmUpCisKK0RS T1AgVEFCTEUgdCBDQVNDQURFOworCisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEJSSU4gSW5kZXgg d2l0aCBQYXJ0aWFsIFByZWRpY2F0ZQorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQo CisgICAgaWQgSU5UIFBSSU1BUlkgS0VZLAorICAgIHZhbHVlIElOVCwKKyAgICBkZXNjcmlw dGlvbiBURVhUCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3Rv ciA9IDcwKTsKKworQ1JFQVRFIElOREVYIHRfYnJpbl9wYXJ0aWFsX2lkeCBPTiB0IFVTSU5H IGJyaW4odmFsdWUpIFdIRVJFIHZhbHVlID4gMTAwOworCitJTlNFUlQgSU5UTyB0IFZBTFVF UyAoMSwgNTAsICdiZWxvdyByYW5nZScpOworCistLSBUZXN0IDE6IE91dHNpZGUgcHJlZGlj YXRlCitVUERBVEUgdCBTRVQgZGVzY3JpcHRpb24gPSAndXBkYXRlZCcgV0hFUkUgaWQgPSAx OworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKworLS0gVmFsaWRhdGU6 IFByZWRpY2F0ZSBxdWVyeSByZXR1cm5zIDAgcm93cworU0VMRUNUIENPVU5UKCopIGFzIGNu dCBGUk9NIHQgV0hFUkUgdmFsdWUgPiAxMDA7CisKKy0tIFRlc3QgMjogVHJhbnNpdGlvbiBp bnRvIHByZWRpY2F0ZQorVVBEQVRFIHQgU0VUIHZhbHVlID0gMTUwIFdIRVJFIGlkID0gMTsK K1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMik7CisKKy0tIFZhbGlkYXRlOiBQ cmVkaWNhdGUgcXVlcnkgcmV0dXJucyAxIHJvdyB3aXRoIGNvcnJlY3QgdmFsdWUKK1NFTEVD VCBDT1VOVCgqKSBhcyBjbnQsIE1BWCh2YWx1ZSkgYXMgbWF4X3ZhbCBGUk9NIHQgV0hFUkUg dmFsdWUgPiAxMDA7CisKKy0tIFRlc3QgMzogSW5zaWRlIHByZWRpY2F0ZSwgdmFsdWUgY2hh bmdlcworVVBEQVRFIHQgU0VUIHZhbHVlID0gMTYwLCBkZXNjcmlwdGlvbiA9ICd1cGRhdGVk IGFnYWluJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVz KDMpOworCistLSBWYWxpZGF0ZTogVXBkYXRlZCB2YWx1ZSAoMTYwKSBpcyByZXR1cm5lZAor U0VMRUNUIENPVU5UKCopIGFzIGNudCwgTUFYKHZhbHVlKSBhcyBtYXhfdmFsIEZST00gdCBX SEVSRSB2YWx1ZSA+IDEwMDsKKworLS0gVGVzdCA0OiBUcmFuc2l0aW9uIG91dCBvZiBwcmVk aWNhdGUKK1VQREFURSB0IFNFVCB2YWx1ZSA9IDUwIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAq IEZST00gY2hlY2tfaG90X3VwZGF0ZXMoNCk7CisKK1NFTEVDVCBDT1VOVCgqKSBhcyBjbnQg RlJPTSB0IFdIRVJFIHZhbHVlID4gMTAwOworCitTRUxFQ1QgaWQsIHZhbHVlLCBkZXNjcmlw dGlvbiBGUk9NIHQ7CisKK0RST1AgVEFCTEUgdCBDQVNDQURFOworCisKKy0tID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKy0tIEhBU0ggSW5kZXggKFNpbXBsZSBDb2x1bW4pCistLSA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVB VEUgVEFCTEUgdChpZCBJTlQsIGNvZGUgVkFSQ0hBUigyMCksIGRlc2NyaXB0aW9uIFRFWFQp CisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzAp OworQ1JFQVRFIElOREVYIHRfaGFzaF9pZHggT04gdCBVU0lORyBoYXNoKGNvZGUpOworSU5T RVJUIElOVE8gdCBWQUxVRVMgKDEsICdDT0RFMDAxJywgJ2luaXRpYWwnKTsKKworLS0gVXBk YXRlIG5vbi1pbmRleGVkIGNvbHVtbiAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBk ZXNjcmlwdGlvbiA9ICd1cGRhdGVkJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNo ZWNrX2hvdF91cGRhdGVzKDEpOworCistLSBVcGRhdGUgaW5kZXhlZCBjb2x1bW4gLSBIQVNI IGluZGV4IHJlcXVpcmVzIHVwZGF0ZSwgTk9UIEhPVAorVVBEQVRFIHQgU0VUIGNvZGUgPSAn Q09ERTAwMicgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRl cygxKTsKKworLS0gVXBkYXRlIGJvdGggLSBOT1QgSE9UCitVUERBVEUgdCBTRVQgY29kZSA9 ICdDT0RFMDAzJywgZGVzY3JpcHRpb24gPSAnY2hhbmdlZCcgV0hFUkUgaWQgPSAxOworU0VM RUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKworLS0gQmFjayB0byBvcmlnaW5h bCBjb2RlIC0gTk9UIEhPVCAoZGlmZmVyZW50IGhhc2ggYnVja2V0IGxvY2F0aW9uKQorVVBE QVRFIHQgU0VUIGNvZGUgPSAnQ09ERTAwMScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJP TSBjaGVja19ob3RfdXBkYXRlcygxKTsKKworRFJPUCBUQUJMRSB0IENBU0NBREU7CisKKwor LS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorLS0gSEFTSCBJbmRleCBvbiBFeHByZXNzaW9uCistLSA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGVtYWlsIFRFWFQsIGRhdGEgSlNPTkIpCisg ICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOwor Q1JFQVRFIElOREVYIHRfaGFzaF9sb3dlcl9lbWFpbF9pZHggT04gdCBVU0lORyBIQVNIKGxv d2VyKGVtYWlsKSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ0FsaWNlQEV4YW1wbGUu Y29tJywgJ3sic3RhdHVzIjogIm5ldyJ9Jyk7CisKKy0tIFVwZGF0ZSBub24taW5kZXhlZCBm aWVsZCAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3sic3RhdHVzIjog ImFjdGl2ZSJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRh dGVzKDEpOworCistLSBVcGRhdGUgZW1haWwgd2l0aCBjYXNlIGNoYW5nZSBvbmx5IChzYW1l IGxvd2VyY2FzZSkgLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgZW1haWwgPSAnYWxp Y2VAZXhhbXBsZS5jb20nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90 X3VwZGF0ZXMoMik7CisKKy0tIFVwZGF0ZSBlbWFpbCB0byBkaWZmZXJlbnQgbG93ZXJjYXNl IC0gTk9UIEhPVAorVVBEQVRFIHQgU0VUIGVtYWlsID0gJ2JvYkBleGFtcGxlLmNvbScgV0hF UkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygyKTsKKworRFJP UCBUQUJMRSB0IENBU0NBREU7CisKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gTXVsdGlwbGUgSEFT SCBJbmRleGVzCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGNhdGVn b3J5IFZBUkNIQVIsIHN0YXR1cyBWQVJDSEFSLCB2YWx1ZSBJTlQpCisgICAgV0lUSCAoYXV0 b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVY IHRfaGFzaF9jYXRlZ29yeV9pZHggT04gdCBVU0lORyBoYXNoKGNhdGVnb3J5KTsKK0NSRUFU RSBJTkRFWCB0X2hhc2hfc3RhdHVzX2lkeCBPTiB0IFVTSU5HIGhhc2goc3RhdHVzKTsKK0lO U0VSVCBJTlRPIHQgVkFMVUVTICgxLCAnZWxlY3Ryb25pY3MnLCAnYWN0aXZlJywgMTAwKTsK KworLS0gVXBkYXRlIG5vbi1pbmRleGVkIGNvbHVtbiAtIHNob3VsZCBiZSBIT1QKK1VQREFU RSB0IFNFVCB2YWx1ZSA9IDE1MCBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNr X2hvdF91cGRhdGVzKDEpOworCistLSBVcGRhdGUgb25lIGluZGV4ZWQgY29sdW1uIC0gTk9U IEhPVAorVVBEQVRFIHQgU0VUIGNhdGVnb3J5ID0gJ2Jvb2tzJyBXSEVSRSBpZCA9IDE7CitT RUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworCistLSBVcGRhdGUgb3RoZXIg aW5kZXhlZCBjb2x1bW4gLSBOT1QgSE9UCitVUERBVEUgdCBTRVQgc3RhdHVzID0gJ2luYWN0 aXZlJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEp OworCistLSBVcGRhdGUgYm90aCBpbmRleGVkIGNvbHVtbnMgLSBOT1QgSE9UCitVUERBVEUg dCBTRVQgY2F0ZWdvcnkgPSAndmlkZW9zJywgc3RhdHVzID0gJ3BlbmRpbmcnIFdIRVJFIGlk ID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisKK0RST1AgVEFC TEUgdCBDQVNDQURFOworCisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEJSSU4gdnMgSEFTSCBDb21w YXJpc29uCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdF9icmluKGlkIElOVCwgdmFs dWUgSU5ULCBkYXRhIFRFWFQpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2Zm LCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIFRBQkxFIHRfaGFzaChpZCBJTlQsIHZhbHVl IElOVCwgZGF0YSBURVhUKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwg ZmlsbGZhY3RvciA9IDcwKTsKKworQ1JFQVRFIElOREVYIHRfYnJpbl92YWx1ZV9pZHggT04g dF9icmluIFVTSU5HIGJyaW4odmFsdWUpOworQ1JFQVRFIElOREVYIHRfaGFzaF92YWx1ZV9p ZHggT04gdF9oYXNoIFVTSU5HIGhhc2godmFsdWUpOworCitJTlNFUlQgSU5UTyB0X2JyaW4g VkFMVUVTICgxLCAxMDAsICdpbml0aWFsJyk7CitJTlNFUlQgSU5UTyB0X2hhc2ggVkFMVUVT ICgxLCAxMDAsICdpbml0aWFsJyk7CisKKy0tIFNhbWUgdXBkYXRlIG9uIGJvdGggLSBkaWZm ZXJlbnQgSE9UIGJlaGF2aW9yIGV4cGVjdGVkCistLSBCUklOOiBtaWdodCBhbGxvdyBIT1Qg KHJhbmdlIHN1bW1hcnkgdW5jaGFuZ2VkKQorLS0gSEFTSDogYmxvY2tzIEhPVCAoaGFzaCBi dWNrZXQgY2hhbmdlZCkKK1VQREFURSB0X2JyaW4gU0VUIHZhbHVlID0gMTUwIFdIRVJFIGlk ID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3RfYnJpbicpOwor LS0gRXhwZWN0ZWQ6IDEgSE9UIChCUklOIGFsbG93cyBpdCBmb3Igc2luZ2xlIHJvdykKKwor VVBEQVRFIHRfaGFzaCBTRVQgdmFsdWUgPSAxNTAgV0hFUkUgaWQgPSAxOworU0VMRUNUICog RlJPTSBjaGVja19ob3RfdXBkYXRlcygwLCAndF9oYXNoJyk7CistLSBFeHBlY3RlZDogMCBI T1QgKEhBU0ggYmxvY2tzIGl0KQorCitEUk9QIFRBQkxFIHRfYnJpbiBDQVNDQURFOworRFJP UCBUQUJMRSB0X2hhc2ggQ0FTQ0FERTsKKworCistLSA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBIQVNIIElu ZGV4IHdpdGggTlVMTCBWYWx1ZXMKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlk IElOVCwgY2F0ZWdvcnkgVkFSQ0hBUiwgZGF0YSBURVhUKQorICAgIFdJVEggKGF1dG92YWN1 dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2hh c2hfY2F0ZWdvcnlfaWR4IE9OIHQgVVNJTkcgaGFzaChjYXRlZ29yeSk7CitJTlNFUlQgSU5U TyB0IFZBTFVFUyAoMSwgJ2VsZWN0cm9uaWNzJywgJ2luaXRpYWwnKTsKKworLS0gVXBkYXRl IGluZGV4ZWQgY29sdW1uIHRvIE5VTEwgLSBOT1QgSE9UIChoYXNoIHZhbHVlIGNoYW5nZWQp CitVUERBVEUgdCBTRVQgY2F0ZWdvcnkgPSBOVUxMIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAq IEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCk7CistLSBFeHBlY3RlZDogMCBIT1QKKworLS0g VXBkYXRlIGluZGV4ZWQgY29sdW1uIGZyb20gTlVMTCB0byB2YWx1ZSAtIE5PVCBIT1QKK1VQ REFURSB0IFNFVCBjYXRlZ29yeSA9ICdib29rcycgV0hFUkUgaWQgPSAxOworU0VMRUNUICog RlJPTSBjaGVja19ob3RfdXBkYXRlcygwKTsKKy0tIEV4cGVjdGVkOiAwIEhPVAorCistLSBV cGRhdGUgbm9uLWluZGV4ZWQgY29sdW1uIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VU IGRhdGEgPSAndXBkYXRlZCcgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19o b3RfdXBkYXRlcygxKTsKKy0tIEV4cGVjdGVkOiAxIEhPVAorCitEUk9QIFRBQkxFIHQgQ0FT Q0FERTsKKworCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CistLSBCUklOIG9uIEpTT05CIEZpZWxkCistLSA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIG1ldHJpY3MgSlNPTkIpCisgICAg V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworLS0g QlJJTiBkb2Vzbid0IGRpcmVjdGx5IHN1cHBvcnQgSlNPTkIsIGJ1dCB3ZSBjYW4gdGVzdCBv biBleHByZXNzaW9uCitDUkVBVEUgSU5ERVggdF9icmluX2NvdW50X2lkeCBPTiB0IFVTSU5H IGJyaW4oCisgICAgQ0FTVChtZXRyaWNzLT4+J2NvdW50JyBBUyBJTlRFR0VSKQorKTsKK0lO U0VSVCBJTlRPIHQgVkFMVUVTICgxLCAneyJjb3VudCI6ICIxMDAiLCAidGltZXN0YW1wIjog IjIwMjQtMDEtMDEifScpOworCistLSBVcGRhdGUgbm9uLWluZGV4ZWQgSlNPTkIgZmllbGQg LSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgbWV0cmljcyA9ICd7ImNvdW50IjogIjEw MCIsICJ0aW1lc3RhbXAiOiAiMjAyNC0wMS0wMiJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1Qg KiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworLS0gRXhwZWN0ZWQ6IDEgSE9UCisKKy0t IFVwZGF0ZSBpbmRleGVkIGZpZWxkIC0gQlJJTiBhbGxvd3MgSE9UIGZvciBzaW5nbGUgcm93 CitVUERBVEUgdCBTRVQgbWV0cmljcyA9ICd7ImNvdW50IjogIjE1MCIsICJ0aW1lc3RhbXAi OiAiMjAyNC0wMS0wMiJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hv dF91cGRhdGVzKDIpOworLS0gRXhwZWN0ZWQ6IDIgSE9UIChCUklOIHBlcm1pdHMgc2luZ2xl LXJvdyB1cGRhdGVzKQorCitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKworCistLSA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CistLSBNaXhlZCBCUklOICsgSEFTSCBvbiBTYW1lIFRhYmxlCistLSA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGNhdGVnb3J5IFZBUkNIQVIsIHRpbWVzdGFtcCBU SU1FU1RBTVAsIHByaWNlIE5VTUVSSUMsIGRhdGEgVEVYVCkKKyAgICBXSVRIIChhdXRvdmFj dXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9i cmluX3RpbWVzdGFtcF9pZHggT04gdCBVU0lORyBicmluKHRpbWVzdGFtcCk7CitDUkVBVEUg SU5ERVggdF9oYXNoX2NhdGVnb3J5X2lkeCBPTiB0IFVTSU5HIGhhc2goY2F0ZWdvcnkpOwor SU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsICdib29rcycsICcyMDI0LTAxLTAxIDEwOjAwOjAw JywgMjkuOTksICdpbml0aWFsJyk7CisKKy0tIFVwZGF0ZSBub24taW5kZXhlZCBjb2x1bW4g LSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd1cGRhdGVkJyBXSEVSRSBp ZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworLS0gRXhwZWN0 ZWQ6IDEgSE9UCisKKy0tIFVwZGF0ZSBCUklOIGluZGV4ZWQgY29sdW1uIC0gYWxsb3dzIEhP VAorVVBEQVRFIHQgU0VUIHRpbWVzdGFtcCA9ICcyMDI0LTAxLTAyIDEwOjAwOjAwJyBXSEVS RSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDIpOworLS0gRXhw ZWN0ZWQ6IDIgSE9UCisKKy0tIFVwZGF0ZSBIQVNIIGluZGV4ZWQgY29sdW1uIC0gYmxvY2tz IEhPVAorVVBEQVRFIHQgU0VUIGNhdGVnb3J5ID0gJ3ZpZGVvcycgV0hFUkUgaWQgPSAxOwor U0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygyKTsKKy0tIEV4cGVjdGVkOiAyIEhP VCAoSEFTSCBibG9ja3MgaXQpCisKKy0tIFVwZGF0ZSBwcmljZSAobm9uLWluZGV4ZWQpIC0g c2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIHByaWNlID0gMzkuOTkgV0hFUkUgaWQgPSAx OworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygzKTsKKy0tIEV4cGVjdGVkOiAz IEhPVAorCitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKworCistLSA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBJ bmRleCBib3RoIG9uIGEgZmllbGQgaW4gYSBKU09OQiBkb2N1bWVudCwgYW5kIHRoZSBkb2N1 bWVudAorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5UIFBSSU1BUlkgS0VZ LCBkb2NzIEpTT05CKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0 b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9kb2NzX2lkeCBPTiB0KChkb2NzLT4nbmFtZScp KTsKK0NSRUFURSBJTkRFWCB0X2RvY3NfY29sX2lkeCBPTiB0KGRvY3MpOworSU5TRVJUIElO VE8gdCBWQUxVRVMgKDEsICd7Im5hbWUiOiAiam9obiIsICJkYXRhIjogInNvbWUgZGF0YSJ9 Jyk7CisKKy0tIFVwZGF0ZSBpbXBhY3RzIGluZGV4IG9uIHdob2xlIGRvY21lbnQgYXR0cmli dXRlLCBjYW4ndCBnbyBIT1QKK1VQREFURSB0IFNFVCBkb2NzPSd7Im5hbWUiOiAiam9obiIs ICJkYXRhIjogInNvbWUgb3RoZXIgZGF0YSJ9JyBXSEVSRSBpZD0xOworU0VMRUNUICogRlJP TSBjaGVja19ob3RfdXBkYXRlcygwKTsKKworRFJPUCBUQUJMRSB0IENBU0NBREU7CisKKwor LS0gQ2xlYW51cAorRFJPUCBGVU5DVElPTiBjaGVja19ob3RfdXBkYXRlcyhpbnQsIHRleHQs IHRleHQpOworRFJPUCBDT0xMQVRJT04gY2FzZV9pbnNlbnNpdGl2ZTsKZGlmZiAtLWdpdCBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QKaW5kZXggNzYxOTg0NWZiYTkuLmI2ZGIyOWVmOWZjIDEwMDY0NAot LS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtNDAwLDYgKzQwMCw3IEBAIENhY2hlZEZ1bmN0 aW9uQ29tcGlsZUNhbGxiYWNrCiBDYWNoZWRGdW5jdGlvbkRlbGV0ZUNhbGxiYWNrCiBDYWNo ZWRGdW5jdGlvbkhhc2hFbnRyeQogQ2FjaGVkRnVuY3Rpb25IYXNoS2V5CitDYWNoZWRJbmRl eERhdHVtCiBDYWNoZWRQbGFuCiBDYWNoZWRQbGFuU291cmNlCiBDYWxsQ29udGV4dAotLSAK Mi41MS4yCgo= --f70e65a2f25740fea16fe12777451009 Content-Disposition: attachment; filename*0="v29-0003-Replace-index_unchanged_by_update-with-ri_Change.pat"; filename*1="ch" Content-Type: text/x-patch; name="=?UTF-8?Q?v29-0003-Replace-index=5Funchanged=5Fby=5Fupdate-with-ri=5FCha?= =?UTF-8?Q?nge.patch?=" Content-Transfer-Encoding: base64 RnJvbSBiZTg1NWYwMTAyMTIwOWVhOTNlYmMzNDVjZGI5Mjc2MDAzZGRlNjI2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTog RnJpLCAzMSBPY3QgMjAyNSAxNDo1NToyNSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjI5IDMv NF0gUmVwbGFjZSBpbmRleF91bmNoYW5nZWRfYnlfdXBkYXRlKCkgd2l0aAogcmlfQ2hhbmdl ZEluZGV4ZWRDb2xzCgpJbiBleGVjSW5kZXhpbmcgb24gdXBkYXRlcyB3ZSdkIGxpa2UgdG8g cGFzcyBhIGhpbnQgdG8gdGhlIGluZGV4aW5nIGNvZGUKd2hlbiB0aGUgaW5kZXhlZCBhdHRy aWJ1dGVzIGFyZSB1bmNoYW5nZWQuICBUaGlzIGNvbW1pdCByZXBsYWNlcyB0aGUgbm93CnJl ZHVuZGFudCBjb2RlIGluIGluZGV4X3VuY2hhbmdlZF9ieV91cGRhdGUoKSB3aXRoIHRoZSBz YW1lIGluZm9ybWF0aW9uCmZvdW5kIGVhcmxpZXIgaW4gRXhlY1doaWNoSW5kZXhlc1JlcXVp cmVVcGRhdGVzKCkgYW5kIHN0YXNoZWQgaW4KcmlfQ2hhbmdlZEluZGV4ZWRDb2xzLgotLS0K IHNyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYyAgICAgIHwgICAyIC0KIHNyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jIHwgMTU2ICstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KIHNyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jICAgICAgIHwgICAyIC0K IHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgIHwgICA0IC0KIDQgZmlsZXMg Y2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDE2MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9n L3RvYXN0aW5nLmMKaW5kZXggZmY4ZGE1YmU1ZjguLjU2NzVjNmY4ZWE5IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0 YWxvZy90b2FzdGluZy5jCkBAIC0zMDQsOCArMzA0LDYgQEAgY3JlYXRlX3RvYXN0X3RhYmxl KFJlbGF0aW9uIHJlbCwgT2lkIHRvYXN0T2lkLCBPaWQgdG9hc3RJbmRleE9pZCwKIAlpbmRl eEluZm8tPmlpX1VuaXF1ZSA9IHRydWU7CiAJaW5kZXhJbmZvLT5paV9OdWxsc05vdERpc3Rp bmN0ID0gZmFsc2U7CiAJaW5kZXhJbmZvLT5paV9SZWFkeUZvckluc2VydHMgPSB0cnVlOwot CWluZGV4SW5mby0+aWlfQ2hlY2tlZFVuY2hhbmdlZCA9IGZhbHNlOwotCWluZGV4SW5mby0+ aWlfSW5kZXhVbmNoYW5nZWQgPSBmYWxzZTsKIAlpbmRleEluZm8tPmlpX0NvbmN1cnJlbnQg PSBmYWxzZTsKIAlpbmRleEluZm8tPmlpX0Jyb2tlbkhvdENoYWluID0gZmFsc2U7CiAJaW5k ZXhJbmZvLT5paV9QYXJhbGxlbFdvcmtlcnMgPSAwOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj SW5kZXhpbmcuYwppbmRleCAxMjc1ZmVmZmFlOS4uYjc1ZTc2NDAxZDIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCisrKyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBAIC0xNDMsMTEgKzE0Myw2IEBAIHN0YXRpYyBi b29sIGNoZWNrX2V4Y2x1c2lvbl9vcl91bmlxdWVfY29uc3RyYWludChSZWxhdGlvbiBoZWFw LCBSZWxhdGlvbiBpbmRleCwKIHN0YXRpYyBib29sIGluZGV4X3JlY2hlY2tfY29uc3RyYWlu dChSZWxhdGlvbiBpbmRleCwgY29uc3QgT2lkICpjb25zdHJfcHJvY3MsCiAJCQkJCQkJCQkg Y29uc3QgRGF0dW0gKmV4aXN0aW5nX3ZhbHVlcywgY29uc3QgYm9vbCAqZXhpc3RpbmdfaXNu dWxsLAogCQkJCQkJCQkJIGNvbnN0IERhdHVtICpuZXdfdmFsdWVzKTsKLXN0YXRpYyBib29s IGluZGV4X3VuY2hhbmdlZF9ieV91cGRhdGUoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5m bywKLQkJCQkJCQkJCSAgRVN0YXRlICplc3RhdGUsIEluZGV4SW5mbyAqaW5kZXhJbmZvLAot CQkJCQkJCQkJICBSZWxhdGlvbiBpbmRleFJlbGF0aW9uKTsKLXN0YXRpYyBib29sIGluZGV4 X2V4cHJlc3Npb25fY2hhbmdlZF93YWxrZXIoTm9kZSAqbm9kZSwKLQkJCQkJCQkJCQkJQml0 bWFwc2V0ICphbGxVcGRhdGVkQ29scyk7CiBzdGF0aWMgdm9pZCBFeGVjV2l0aG91dE92ZXJs YXBzTm90RW1wdHkoUmVsYXRpb24gcmVsLCBOYW1lRGF0YSBhdHRuYW1lLCBEYXR1bSBhdHR2 YWwsCiAJCQkJCQkJCQkJY2hhciB0eXB0eXBlLCBPaWQgYXR0dHlwaWQpOwogCkBAIC00NTEs MTAgKzQ0Niw3IEBAIEV4ZWNJbnNlcnRJbmRleFR1cGxlcyhSZXN1bHRSZWxJbmZvICpyZXN1 bHRSZWxJbmZvLAogCQkgKiBpbmRleC4gIElmIHdlJ3JlIGJlaW5nIGNhbGxlZCBhcyBwYXJ0 IG9mIGFuIFVQREFURSBzdGF0ZW1lbnQsCiAJCSAqIGNvbnNpZGVyIGlmIHRoZSAnaW5kZXhV bmNoYW5nZWQnID0gdHJ1ZSBoaW50IHNob3VsZCBiZSBwYXNzZWQuCiAJCSAqLwotCQlpbmRl eFVuY2hhbmdlZCA9IHVwZGF0ZSAmJiBpbmRleF91bmNoYW5nZWRfYnlfdXBkYXRlKHJlc3Vs dFJlbEluZm8sCi0JCQkJCQkJCQkJCQkJCQkgZXN0YXRlLAotCQkJCQkJCQkJCQkJCQkJIGlu ZGV4SW5mbywKLQkJCQkJCQkJCQkJCQkJCSBpbmRleFJlbGF0aW9uKTsKKwkJaW5kZXhVbmNo YW5nZWQgPSB1cGRhdGUgJiYgYm1zX2lzX2VtcHR5KHJlc3VsdFJlbEluZm8tPnJpX0NoYW5n ZWRJbmRleGVkQ29scyk7CiAKIAkJc2F0aXNmaWVzQ29uc3RyYWludCA9CiAJCQlpbmRleF9p bnNlcnQoaW5kZXhSZWxhdGlvbiwgLyogaW5kZXggcmVsYXRpb24gKi8KQEAgLTEwMTQsMTUy ICsxMDA2LDYgQEAgaW5kZXhfcmVjaGVja19jb25zdHJhaW50KFJlbGF0aW9uIGluZGV4LCBj b25zdCBPaWQgKmNvbnN0cl9wcm9jcywKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyoKLSAqIENo ZWNrIGlmIEV4ZWNJbnNlcnRJbmRleFR1cGxlcygpIHNob3VsZCBwYXNzIGluZGV4VW5jaGFu Z2VkIGhpbnQuCi0gKgotICogV2hlbiB0aGUgZXhlY3V0b3IgcGVyZm9ybXMgYW4gVVBEQVRF IHRoYXQgcmVxdWlyZXMgYSBuZXcgcm91bmQgb2YgaW5kZXgKLSAqIHR1cGxlcywgZGV0ZXJt aW5lIGlmIHdlIHNob3VsZCBwYXNzICdpbmRleFVuY2hhbmdlZCcgPSB0cnVlIGhpbnQgZm9y IG9uZQotICogc2luZ2xlIGluZGV4LgotICovCi1zdGF0aWMgYm9vbAotaW5kZXhfdW5jaGFu Z2VkX2J5X3VwZGF0ZShSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLCBFU3RhdGUgKmVz dGF0ZSwKLQkJCQkJCSAgSW5kZXhJbmZvICppbmRleEluZm8sIFJlbGF0aW9uIGluZGV4UmVs YXRpb24pCi17Ci0JQml0bWFwc2V0ICAqdXBkYXRlZENvbHM7Ci0JQml0bWFwc2V0ICAqZXh0 cmFVcGRhdGVkQ29sczsKLQlCaXRtYXBzZXQgICphbGxVcGRhdGVkQ29sczsKLQlib29sCQlo YXNleHByZXNzaW9uID0gZmFsc2U7Ci0JTGlzdAkgICAqaWR4RXhwcnM7Ci0KLQkvKgotCSAq IENoZWNrIGNhY2hlIGZpcnN0Ci0JICovCi0JaWYgKGluZGV4SW5mby0+aWlfQ2hlY2tlZFVu Y2hhbmdlZCkKLQkJcmV0dXJuIGluZGV4SW5mby0+aWlfSW5kZXhVbmNoYW5nZWQ7Ci0JaW5k ZXhJbmZvLT5paV9DaGVja2VkVW5jaGFuZ2VkID0gdHJ1ZTsKLQotCS8qCi0JICogQ2hlY2sg Zm9yIGluZGV4ZWQgYXR0cmlidXRlIG92ZXJsYXAgd2l0aCB1cGRhdGVkIGNvbHVtbnMuCi0J ICoKLQkgKiBPbmx5IGRvIHRoaXMgZm9yIGtleSBjb2x1bW5zLiAgQSBjaGFuZ2UgdG8gYSBu b24ta2V5IGNvbHVtbiB3aXRoaW4gYW4KLQkgKiBJTkNMVURFIGluZGV4IHNob3VsZCBub3Qg YmUgY291bnRlZCBoZXJlLiAgTm9uLWtleSBjb2x1bW4gdmFsdWVzIGFyZQotCSAqIG9wYXF1 ZSBwYXlsb2FkIHN0YXRlIHRvIHRoZSBpbmRleCBBTSwgYSBsaXR0bGUgbGlrZSBhbiBleHRy YSB0YWJsZSBUSUQuCi0JICoKLQkgKiBOb3RlIHRoYXQgcm93LWxldmVsIEJFRk9SRSB0cmln Z2VycyB3b24ndCBhZmZlY3Qgb3VyIGJlaGF2aW9yLCBzaW5jZQotCSAqIHRoZXkgZG9uJ3Qg YWZmZWN0IHRoZSB1cGRhdGVkQ29scyBiaXRtYXBzIGdlbmVyYWxseS4gIEl0IGRvZXNuJ3Qg c2VlbQotCSAqIHdvcnRoIHRoZSB0cm91YmxlIG9mIGNoZWNraW5nIHdoaWNoIGF0dHJpYnV0 ZXMgd2VyZSBjaGFuZ2VkIGRpcmVjdGx5LgotCSAqLwotCXVwZGF0ZWRDb2xzID0gRXhlY0dl dFVwZGF0ZWRDb2xzKHJlc3VsdFJlbEluZm8sIGVzdGF0ZSk7Ci0JZXh0cmFVcGRhdGVkQ29s cyA9IEV4ZWNHZXRFeHRyYVVwZGF0ZWRDb2xzKHJlc3VsdFJlbEluZm8sIGVzdGF0ZSk7Ci0J Zm9yIChpbnQgYXR0ciA9IDA7IGF0dHIgPCBpbmRleEluZm8tPmlpX051bUluZGV4S2V5QXR0 cnM7IGF0dHIrKykKLQl7Ci0JCWludAkJCWtleWNvbCA9IGluZGV4SW5mby0+aWlfSW5kZXhB dHRyTnVtYmVyc1thdHRyXTsKLQotCQlpZiAoa2V5Y29sIDw9IDApCi0JCXsKLQkJCS8qCi0J CQkgKiBTa2lwIGV4cHJlc3Npb25zIGZvciBub3csIGJ1dCByZW1lbWJlciB0byBkZWFsIHdp dGggdGhlbSBsYXRlcgotCQkJICogb24KLQkJCSAqLwotCQkJaGFzZXhwcmVzc2lvbiA9IHRy dWU7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChibXNfaXNfbWVtYmVyKGtleWNvbCAt IEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIsCi0JCQkJCQkgIHVwZGF0ZWRD b2xzKSB8fAotCQkJYm1zX2lzX21lbWJlcihrZXljb2wgLSBGaXJzdExvd0ludmFsaWRIZWFw QXR0cmlidXRlTnVtYmVyLAotCQkJCQkJICBleHRyYVVwZGF0ZWRDb2xzKSkKLQkJewotCQkJ LyogQ2hhbmdlZCBrZXkgY29sdW1uIC0tIGRvbid0IGhpbnQgZm9yIHRoaXMgaW5kZXggKi8K LQkJCWluZGV4SW5mby0+aWlfSW5kZXhVbmNoYW5nZWQgPSBmYWxzZTsKLQkJCXJldHVybiBm YWxzZTsKLQkJfQotCX0KLQotCS8qCi0JICogV2hlbiB3ZSBnZXQgdGhpcyBmYXIgYW5kIGlu ZGV4IGhhcyBubyBleHByZXNzaW9ucywgcmV0dXJuIHRydWUgc28gdGhhdAotCSAqIGluZGV4 X2luc2VydCgpIGNhbGwgd2lsbCBnbyBvbiB0byBwYXNzICdpbmRleFVuY2hhbmdlZCcgPSB0 cnVlIGhpbnQuCi0JICoKLQkgKiBUaGUgX2Fic2VuY2VfIG9mIGFuIGluZGV4ZWQga2V5IGF0 dHJpYnV0ZSB0aGF0IG92ZXJsYXBzIHdpdGggdXBkYXRlZAotCSAqIGF0dHJpYnV0ZXMgKGlu IGFkZGl0aW9uIHRvIHRoZSB0b3RhbCBhYnNlbmNlIG9mIGluZGV4ZWQgZXhwcmVzc2lvbnMp Ci0JICogc2hvd3MgdGhhdCB0aGUgaW5kZXggYXMgYSB3aG9sZSBpcyBsb2dpY2FsbHkgdW5j aGFuZ2VkIGJ5IFVQREFURS4KLQkgKi8KLQlpZiAoIWhhc2V4cHJlc3Npb24pCi0JewotCQlp bmRleEluZm8tPmlpX0luZGV4VW5jaGFuZ2VkID0gdHJ1ZTsKLQkJcmV0dXJuIHRydWU7Ci0J fQotCi0JLyoKLQkgKiBOZWVkIHRvIHBhc3Mgb25seSBvbmUgYm1zIHRvIGV4cHJlc3Npb25f dHJlZV93YWxrZXIgaGVscGVyIGZ1bmN0aW9uLgotCSAqIEF2b2lkIGFsbG9jYXRpbmcgbWVt b3J5IGluIGNvbW1vbiBjYXNlIHdoZXJlIHRoZXJlIGFyZSBubyBleHRyYSBjb2xzLgotCSAq LwotCWlmICghZXh0cmFVcGRhdGVkQ29scykKLQkJYWxsVXBkYXRlZENvbHMgPSB1cGRhdGVk Q29sczsKLQllbHNlCi0JCWFsbFVwZGF0ZWRDb2xzID0gYm1zX3VuaW9uKHVwZGF0ZWRDb2xz LCBleHRyYVVwZGF0ZWRDb2xzKTsKLQotCS8qCi0JICogV2UgaGF2ZSB0byB3b3JrIHNsaWdo dGx5IGhhcmRlciBpbiB0aGUgZXZlbnQgb2YgaW5kZXhlZCBleHByZXNzaW9ucywKLQkgKiBi dXQgdGhlIHByaW5jaXBsZSBpcyB0aGUgc2FtZSBhcyBiZWZvcmU6IHRyeSB0byBmaW5kIGNv bHVtbnMgKFZhcnMsCi0JICogYWN0dWFsbHkpIHRoYXQgb3ZlcmxhcCB3aXRoIGtub3duLXVw ZGF0ZWQgY29sdW1ucy4KLQkgKgotCSAqIElmIHdlIGZpbmQgYW55IG1hdGNoaW5nIFZhcnMs IGRvbid0IHBhc3MgaGludCBmb3IgaW5kZXguICBPdGhlcndpc2UKLQkgKiBwYXNzIGhpbnQu Ci0JICovCi0JaWR4RXhwcnMgPSBSZWxhdGlvbkdldEluZGV4RXhwcmVzc2lvbnMoaW5kZXhS ZWxhdGlvbik7Ci0JaGFzZXhwcmVzc2lvbiA9IGluZGV4X2V4cHJlc3Npb25fY2hhbmdlZF93 YWxrZXIoKE5vZGUgKikgaWR4RXhwcnMsCi0JCQkJCQkJCQkJCQkJYWxsVXBkYXRlZENvbHMp OwotCWxpc3RfZnJlZShpZHhFeHBycyk7Ci0JaWYgKGV4dHJhVXBkYXRlZENvbHMpCi0JCWJt c19mcmVlKGFsbFVwZGF0ZWRDb2xzKTsKLQotCWlmIChoYXNleHByZXNzaW9uKQotCXsKLQkJ aW5kZXhJbmZvLT5paV9JbmRleFVuY2hhbmdlZCA9IGZhbHNlOwotCQlyZXR1cm4gZmFsc2U7 Ci0JfQotCi0JLyoKLQkgKiBEZWxpYmVyYXRlbHkgZG9uJ3QgY29uc2lkZXIgaW5kZXggcHJl ZGljYXRlcy4gIFdlIHNob3VsZCBldmVuIGdpdmUgdGhlCi0JICogaGludCB3aGVuIHJlc3Vs dCByZWwncyAidXBkYXRlZCB0dXBsZSIgaGFzIG5vIGNvcnJlc3BvbmRpbmcgaW5kZXgKLQkg KiB0dXBsZSwgd2hpY2ggaXMgcG9zc2libGUgd2l0aCBhIHBhcnRpYWwgaW5kZXggKHByb3Zp ZGVkIHRoZSB1c3VhbAotCSAqIGNvbmRpdGlvbnMgYXJlIG1ldCkuCi0JICovCi0JaW5kZXhJ bmZvLT5paV9JbmRleFVuY2hhbmdlZCA9IHRydWU7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLS8q Ci0gKiBJbmRleGVkIGV4cHJlc3Npb24gaGVscGVyIGZvciBpbmRleF91bmNoYW5nZWRfYnlf dXBkYXRlKCkuCi0gKgotICogUmV0dXJucyB0cnVlIHdoZW4gVmFyIHRoYXQgYXBwZWFycyB3 aXRoaW4gYWxsVXBkYXRlZENvbHMgbG9jYXRlZC4KLSAqLwotc3RhdGljIGJvb2wKLWluZGV4 X2V4cHJlc3Npb25fY2hhbmdlZF93YWxrZXIoTm9kZSAqbm9kZSwgQml0bWFwc2V0ICphbGxV cGRhdGVkQ29scykKLXsKLQlpZiAobm9kZSA9PSBOVUxMKQotCQlyZXR1cm4gZmFsc2U7Ci0K LQlpZiAoSXNBKG5vZGUsIFZhcikpCi0JewotCQlWYXIJCSAgICp2YXIgPSAoVmFyICopIG5v ZGU7Ci0KLQkJaWYgKGJtc19pc19tZW1iZXIodmFyLT52YXJhdHRubyAtIEZpcnN0TG93SW52 YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIsCi0JCQkJCQkgIGFsbFVwZGF0ZWRDb2xzKSkKLQkJ ewotCQkJLyogVmFyIHdhcyB1cGRhdGVkIC0tIGluZGljYXRlcyB0aGF0IHdlIHNob3VsZCBu b3QgaGludCAqLwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQkvKiBTdGlsbCBoYXZlbid0 IGZvdW5kIGEgcmVhc29uIHRvIG5vdCBwYXNzIHRoZSBoaW50ICovCi0JCXJldHVybiBmYWxz ZTsKLQl9Ci0KLQlyZXR1cm4gZXhwcmVzc2lvbl90cmVlX3dhbGtlcihub2RlLCBpbmRleF9l eHByZXNzaW9uX2NoYW5nZWRfd2Fsa2VyLAotCQkJCQkJCQkgIGFsbFVwZGF0ZWRDb2xzKTsK LX0KLQogLyoKICAqIEV4ZWNXaXRob3V0T3ZlcmxhcHNOb3RFbXB0eSAtIHJhaXNlIGFuIGVy cm9yIGlmIHRoZSB0dXBsZSBoYXMgYW4gZW1wdHkKICAqIHJhbmdlIG9yIG11bHRpcmFuZ2Ug aW4gdGhlIGdpdmVuIGF0dHJpYnV0ZS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVz L21ha2VmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKaW5kZXggZGQw OTJiYWNhZDkuLjlkM2E1Yjc5ZDI3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9t YWtlZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYwpAQCAtODQ1 LDggKzg0NSw2IEBAIG1ha2VJbmRleEluZm8oaW50IG51bWF0dHJzLCBpbnQgbnVta2V5YXR0 cnMsIE9pZCBhbW9pZCwgTGlzdCAqZXhwcmVzc2lvbnMsCiAJbi0+aWlfVW5pcXVlID0gdW5p cXVlOwogCW4tPmlpX051bGxzTm90RGlzdGluY3QgPSBudWxsc19ub3RfZGlzdGluY3Q7CiAJ bi0+aWlfUmVhZHlGb3JJbnNlcnRzID0gaXNyZWFkeTsKLQluLT5paV9DaGVja2VkVW5jaGFu Z2VkID0gZmFsc2U7Ci0Jbi0+aWlfSW5kZXhVbmNoYW5nZWQgPSBmYWxzZTsKIAluLT5paV9D b25jdXJyZW50ID0gY29uY3VycmVudDsKIAluLT5paV9TdW1tYXJpemluZyA9IHN1bW1hcml6 aW5nOwogCW4tPmlpX1dpdGhvdXRPdmVybGFwcyA9IHdpdGhvdXRvdmVybGFwczsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9k ZXMvZXhlY25vZGVzLmgKaW5kZXggOGE5MGFmZTMxNWQuLmIxNThlNDk2YjYzIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaApAQCAtMjE4LDEwICsyMTgsNiBAQCB0eXBlZGVmIHN0cnVjdCBJ bmRleEluZm8KIAlib29sCQlpaV9OdWxsc05vdERpc3RpbmN0OwogCS8qIGlzIGl0IHZhbGlk IGZvciBpbnNlcnRzPyAqLwogCWJvb2wJCWlpX1JlYWR5Rm9ySW5zZXJ0czsKLQkvKiBJbmRl eFVuY2hhbmdlZCBzdGF0dXMgZGV0ZXJtaW5lZCB5ZXQ/ICovCi0JYm9vbAkJaWlfQ2hlY2tl ZFVuY2hhbmdlZDsKLQkvKiBhbWluc2VydCBoaW50LCBjYWNoZWQgZm9yIHJldGFpbCBpbnNl cnRzICovCi0JYm9vbAkJaWlfSW5kZXhVbmNoYW5nZWQ7CiAJLyogYXJlIHdlIGRvaW5nIGEg Y29uY3VycmVudCBpbmRleCBidWlsZD8gKi8KIAlib29sCQlpaV9Db25jdXJyZW50OwogCS8q IGRpZCB3ZSBkZXRlY3QgYW55IGJyb2tlbiBIT1QgY2hhaW5zPyAqLwotLSAKMi41MS4yCgo= --f70e65a2f25740fea16fe12777451009 Content-Disposition: attachment; filename*0="v29-0004-Identify-if-partial-indexes-are-impacted-by-an-u.pat"; filename*1="ch" Content-Type: text/x-patch; name="=?UTF-8?Q?v29-0004-Identify-if-partial-indexes-are-impacted-by-an-u.patc?= =?UTF-8?Q?h?=" Content-Transfer-Encoding: base64 RnJvbSAwNTc2YTgzM2ZiNjc5ZDVkNjEzYTQ2MDgyNGU1YWZkNTk5M2RmOThhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTog RnJpLCA1IERlYyAyMDI1IDEzOjQyOjEzIC0wNTAwClN1YmplY3Q6IFtQQVRDSCB2MjkgNC80 XSBJZGVudGlmeSBpZiBwYXJ0aWFsIGluZGV4ZXMgYXJlIGltcGFjdGVkIGJ5IGFuCiB1cGRh dGUuCgpUaGUgZXhlY3V0b3Igbm93IGRldGVybWluZXMgd2hpY2gsIGlmIGFueSwgYXR0cmli dXRlcyB0aGF0IGFyZSBpbmRleGVkCmFyZSBib3RoIG1vZGlmaWVkIGFuZCBmb3JjZSBuZXcg aW5kZXggdHVwbGVzIHRvIGJlIGluc2VydGVkIGFoZWFkIG9mCmNhbGxpbmcgaW50byB0aGUg dGFibGUgQU0gdXBkYXRlIGZ1bmN0aW9uLiAgUHJpb3IgdG8gdGhpcyBjb21taXQgdGhlCnRl c3QgZm9yIHBhcnRpYWwgaW5kZXhlcyBoYXBwZW5lZCBhZnRlciB0YWJsZSB1cGRhdGUsIHRo aXMgY2hhbmdlcyB0aGF0CnRvIGJlZm9yZSBzbyB0aGF0IGluIGNhc2VzIHdoZXJlIHRoZSBi ZWZvcmUgYW5kIGFmdGVyIHR1cGxlcyBib3RoIGxpZQpvdXRzaWRlIHRoZSBwcmVkaWNhdGUg dGhlIGF0dHJpYnV0ZXMgZm9yIHRoZSBwcmVkaWNhdGUgYXJlIG5vdCBpbmNsdWRlZAppbiB0 aGUgIm1vZGlmaWVkIGluZGV4ZWQgYXR0cmlidXRlcyIgYml0bWFwc2V0LgotLS0KIHNyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jIHwgNTMgKysrKysrKysrKysrKysr KysrKysrKysrLS0KIDEgZmlsZSBjaGFuZ2VkLCA0OSBpbnNlcnRpb25zKCspLCA0IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlU YWJsZS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKaW5kZXgg MjJiMWNhMjVlYmYuLjU0MzlkYzQ2YjU2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlTW9kaWZ5VGFibGUuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl TW9kaWZ5VGFibGUuYwpAQCAtMjI3LDkgKzIyNywxMSBAQCBFeGVjQ2hlY2tJbmRleGVkQXR0 cnNGb3JDaGFuZ2VzKFJlc3VsdFJlbEluZm8gKnJlbGluZm8sCiAJCUJpdG1hcHNldCAgKm1f YXR0cnMgPSBOVUxMOyAvKiAocG9zc2libHkpIG1vZGlmaWVkIGluZGV4ZWQgYXR0cnMgKi8K IAkJQml0bWFwc2V0ICAqcF9hdHRycyA9IE5VTEw7IC8qIChwb3NzaWJseSkgbW9kaWZpZWQg cHJlZGljYXRlIGF0dHJzICovCiAJCUJpdG1hcHNldCAgKnVfYXR0cnMgPSBOVUxMOyAvKiB1 bm1vZGlmaWVkIGluZGV4ZWQgYXR0cnMgKi8KKwkJQml0bWFwc2V0ICAqcHJlX2F0dHJzID0g aW5kZXhJbmZvLT5paV9QcmVkaWNhdGVBdHRyczsKIAkJYm9vbAkJaGFzX2FtX2NvbXBhcmUg PSAoYW1yb3V0aW5lLT5hbWNvbXBhcmVkYXR1bXMgIT0gTlVMTCk7CiAJCWJvb2wJCXN1cHBv cnRzX2lvcyA9IChhbXJvdXRpbmUtPmFtY2FucmV0dXJuICE9IE5VTEwpOwogCQlib29sCQlp c19wYXJ0aWFsID0gKGluZGV4SW5mby0+aWlfUHJlZGljYXRlICE9IE5JTCk7CisJCVR1cGxl VGFibGVTbG90ICpzYXZlX3NjYW50dXBsZTsKIAkJRXhwckNvbnRleHQgKmVjb250ZXh0ID0g R2V0UGVyVHVwbGVFeHByQ29udGV4dChlc3RhdGUpOwogCQlpbnQJCQludW1fZGF0dW1zID0g c3VwcG9ydHNfaW9zID8KIAkJCWluZGV4SW5mby0+aWlfTnVtSW5kZXhBdHRycyA6IGluZGV4 SW5mby0+aWlfTnVtSW5kZXhLZXlBdHRyczsKQEAgLTIzOCw5ICsyNDAsNTEgQEAgRXhlY0No ZWNrSW5kZXhlZEF0dHJzRm9yQ2hhbmdlcyhSZXN1bHRSZWxJbmZvICpyZWxpbmZvLAogCQlp ZiAoYm1zX2lzX3N1YnNldChpbmRleEluZm8tPmlpX0luZGV4ZWRBdHRycywgbWl4X2F0dHJz KSkKIAkJCWNvbnRpbnVlOwogCi0JCS8qIEFkZCBwYXJ0aWFsIGluZGV4IGF0dHJpYnV0ZXMg Ki8KLQkJaWYgKGlzX3BhcnRpYWwpCi0JCQlwX2F0dHJzID0gYm1zX2FkZF9tZW1iZXJzKHBf YXR0cnMsIGluZGV4SW5mby0+aWlfUHJlZGljYXRlQXR0cnMpOworCQkvKiBDaGVja2luZyBw YXJ0aWFsIGF0IHRoaXMgcG9pbnQgaXNuJ3QgdmlhYmxlIHdoZW4gd2UncmUgc2VyaWFsaXph YmxlICovCisJCWlmIChpc19wYXJ0aWFsICYmIElzb2xhdGlvbklzU2VyaWFsaXphYmxlKCkp CisJCXsKKwkJCXBfYXR0cnMgPSBibXNfYWRkX21lbWJlcnMocF9hdHRycywgcHJlX2F0dHJz KTsKKwkJfQorCQkvKiBDaGVjayBwYXJ0aWFsIGluZGV4IHByZWRpY2F0ZSAqLworCQllbHNl IGlmIChpc19wYXJ0aWFsKQorCQl7CisJCQlFeHByU3RhdGUgICpwc3RhdGU7CisJCQlib29s CQlvbGRfcXVhbGlmaWVzLAorCQkJCQkJbmV3X3F1YWxpZmllczsKKworCisJCQlpZiAoIWlu ZGV4SW5mby0+aWlfQ2hlY2tlZFByZWRpY2F0ZSkKKwkJCQlwc3RhdGUgPSBFeGVjUHJlcGFy ZVF1YWwoaW5kZXhJbmZvLT5paV9QcmVkaWNhdGUsIGVzdGF0ZSk7CisJCQllbHNlCisJCQkJ cHN0YXRlID0gaW5kZXhJbmZvLT5paV9QcmVkaWNhdGVTdGF0ZTsKKworCQkJc2F2ZV9zY2Fu dHVwbGUgPSBlY29udGV4dC0+ZWN4dF9zY2FudHVwbGU7CisKKwkJCWVjb250ZXh0LT5lY3h0 X3NjYW50dXBsZSA9IG9sZF90dHM7CisJCQlvbGRfcXVhbGlmaWVzID0gRXhlY1F1YWwocHN0 YXRlLCBlY29udGV4dCk7CisKKwkJCWVjb250ZXh0LT5lY3h0X3NjYW50dXBsZSA9IG5ld190 dHM7CisJCQluZXdfcXVhbGlmaWVzID0gRXhlY1F1YWwocHN0YXRlLCBlY29udGV4dCk7CisK KwkJCWVjb250ZXh0LT5lY3h0X3NjYW50dXBsZSA9IHNhdmVfc2NhbnR1cGxlOworCisJCQlp bmRleEluZm8tPmlpX0NoZWNrZWRQcmVkaWNhdGUgPSB0cnVlOworCQkJaW5kZXhJbmZvLT5p aV9QcmVkaWNhdGVTdGF0ZSA9IHBzdGF0ZTsKKwkJCWluZGV4SW5mby0+aWlfUHJlZGljYXRl U2F0aXNmaWVkID0gbmV3X3F1YWxpZmllczsKKworCQkJLyogQm90aCBvdXRzaWRlIHByZWRp Y2F0ZSwgaW5kZXggZG9lc24ndCBuZWVkIHVwZGF0ZSAqLworCQkJaWYgKCFvbGRfcXVhbGlm aWVzICYmICFuZXdfcXVhbGlmaWVzKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBBIHRyYW5z aXRpb24gbWVhbnMgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGluZGV4ICovCisJCQlpZiAob2xk X3F1YWxpZmllcyAhPSBuZXdfcXVhbGlmaWVzKQorCQkJCXBfYXR0cnMgPSBibXNfY29weShw cmVfYXR0cnMpOworCisJCQkvKgorCQkJICogV2hlbiBib3RoIGFyZSB3aXRoaW4gdGhlIHBy ZWRpY2F0ZSB3ZSBtdXN0IHVwZGF0ZSB0aGlzIGluZGV4LAorCQkJICogYnV0IG9ubHkgaWYg b25lIG9mIHRoZSBpbmRleCBrZXkgYXR0cmlidXRlcyBjaGFuZ2VkLgorCQkJICovCisJCX0K IAogCQkvKiBDb21wYXJlIHRoZSBpbmRleCBkYXR1bXMgZm9yIGVxdWFsaXR5ICovCiAJCWZv ciAoaW50IGogPSAwOyBqIDwgbnVtX2RhdHVtczsgaisrKQpAQCAtMjc2LDExICszMjAsMTIg QEAgRXhlY0NoZWNrSW5kZXhlZEF0dHJzRm9yQ2hhbmdlcyhSZXN1bHRSZWxJbmZvICpyZWxp bmZvLAogCQkJICovCiAJCQllbHNlIGlmIChyZWxfYXR0cm51bSA9PSAwKQogCQkJewotCQkJ CVR1cGxlVGFibGVTbG90ICpzYXZlX3NjYW50dXBsZSA9IGVjb250ZXh0LT5lY3h0X3NjYW50 dXBsZTsKIAkJCQlPaWQJCQlleHByX3R5cGVfb2lkOwogCQkJCUV4cHIJICAgKmV4cHIgPSAo RXhwciAqKSBsaXN0X250aChpbmRleEluZm8tPmlpX0V4cHJlc3Npb25zLCBudGhfZXhwcik7 CiAJCQkJRXhwclN0YXRlICAqc3RhdGU7CiAKKwkJCQlzYXZlX3NjYW50dXBsZSA9IGVjb250 ZXh0LT5lY3h0X3NjYW50dXBsZTsKKwogCQkJCWlmIChpbmRleEluZm8tPmlpX0V4cHJlc3Np b25zU3RhdGUgPT0gTklMKQogCQkJCXsKIAkJCQkJLyogRmlyc3QgdGltZSB0aHJvdWdoLCBz ZXQgdXAgZXhwcmVzc2lvbiBldmFsdWF0aW9uIHN0YXRlICovCi0tIAoyLjUxLjIKCg== --f70e65a2f25740fea16fe12777451009--