Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1h8RS0-0004Zz-Hq for pgsql-hackers@arkaria.postgresql.org; Mon, 25 Mar 2019 15:23:49 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1h8RRy-0001FU-PT for pgsql-hackers@arkaria.postgresql.org; Mon, 25 Mar 2019 15:23:46 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1h8RRx-0001FM-US for pgsql-hackers@lists.postgresql.org; Mon, 25 Mar 2019 15:23:46 +0000 Received: from out3-smtp.messagingengine.com ([66.111.4.27]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1h8RRr-0004IM-M8 for pgsql-hackers@lists.postgresql.org; Mon, 25 Mar 2019 15:23:44 +0000 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id D1F4A22326; Mon, 25 Mar 2019 11:23:38 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Mon, 25 Mar 2019 11:23:38 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=X+QU9E NDUCozUiLZuc04FnII9qs2+2NYgAqYaiS9mEM=; b=nefJ3poEvOoNv4NlpgHKKJ WiPQrMvAk44+/sm+6qbWQwVtO/vbEo01KUZCjBk4+892fdScPYTctGwizGwWWgA+ Kovr9hyskEgIjtJBxC5VO6CtAzTSRmScq1BqWXMXXe3vsIwQ3fTGdnfbNC50Sn6v Br79Y0QZl7WjkZg2jMGzKgDMO7S5y2DYWFDGNxJwDf1YMjsCRE4L5MIiyQ2kYwy1 wX3vVQ7KtS1eBKq5eafsyKY8oNzCwYHwNzX1caMBgvyPO4O4JYhGM2NlF27Q4FbA 73NgwM7qYm9ffc6RBfFHhz7WI/ubh+brVdj5ARodPqLxwYdFc0FfQzgEVwWdAtUA == X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrjeekgdejkecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefuvfhfhfhokffffgggjggtsehmtderredtfeejnecuhfhrohhmpefrvghtvghr ucfgihhsvghnthhrrghuthcuoehpvghtvghrrdgvihhsvghnthhrrghuthesvdhnughquh grughrrghnthdrtghomheqnecuffhomhgrihhnpedvnhguqhhurggurhgrnhhtrdgtohhm necukfhppeelfedrvdegfedrudekkedruddvvdenucfrrghrrghmpehmrghilhhfrhhomh epphgvthgvrhdrvghishgvnhhtrhgruhhtsedvnhguqhhurggurhgrnhhtrdgtohhmnecu vehluhhsthgvrhfuihiivgeptd X-ME-Proxy: Received: from april.pezone.net (p5df3bc7a.dip0.t-ipconnect.de [93.243.188.122]) by mail.messagingengine.com (Postfix) with ESMTPA id AA3F7E4176; Mon, 25 Mar 2019 11:23:36 -0400 (EDT) Subject: Re: REINDEX CONCURRENTLY 2.0 To: Sergei Kornilov , "pgsql-hackers@lists.postgresql.org" References: <154954968565.11785.6973123402105637191.pgcf@coridan.postgresql.org> <1730471552486423@myt1-cd60b8ae9bb9.qloud-c.yandex.net> <3b33640c-5493-4eea-fd5f-71d37626fe2f@2ndquadrant.com> <1907751553367887@myt6-23299ba78d64.qloud-c.yandex.net> From: Peter Eisentraut Openpgp: preference=signencrypt Autocrypt: addr=peter.eisentraut@2ndquadrant.com; prefer-encrypt=mutual; keydata= xsFNBFUUt6kBEADZd9NNTBJbHmAXXJgPGOdd6Q73l80oifIVgn2tRxP9dYkCfTlo/yLqbKTl JNqTcyM6XrJDnB2sMEUGYCewYZXl+9C4bBJWyNqcEI1ae9u71vEq/fknFLArJ+2wN+f7QuRx Q8d94ZJAiJQ5g3fNk2HVeedCQCKP5dCzU+ZLt2dbsx1PDZLjTO9gf+JswWuGFb5wY5PZVM5V hq66Xk7ZJzHuARacza2RT7J2fkMmQBY+kr7L98Perb0GhafnlhXB0PvUB+N3xpmggMfwuhTu BngS/G/r3GvemxJuFxouw8xsMqrsfdksJXA2gLXYtwRCssdPV3PO0rlD9twqDo8URfIJ5fb6 1g/MV8aTOKjg3Q8MpJPtkwJqN4o3PvbwYdedeFnOVkkYAJdu/aX1v1BeCBDu7Hy3sF52scD3 pQbyQSl9vUDpTLarASAxNbAV0NRJE8dp4vfW6AH1ccryGiFqw/czPK/iN0+MT8wsjAW6WW4w hvjm5UPA1KTwi3ZT8eT5uycuH7QpuNk7LnGGXQ6KaRALFywzkr0A0V0AvFNa+l4wstMaXaB6 dmMXyF0/hfryqyOeu1gAdq4q0/PNC2dPgb/6uoh4eMjN6A5GXcprilhz5DulmsilY21hfSoU S64ODed96pKhprsOxjZiDRsN1QM5MwB+uwVWUNfsX7fIxE0BrwARAQABzSdQZXRlciBFaXNl bnRyYXV0IDxwZXRlckBlaXNlbnRyYXV0Lm9yZz7CwXoEEwEIACQCGwMFCwkIBwMFFQoJCAsF FgIDAQACHgECF4AFAlUUuKQCGQEACgkQoZ8SQ+xBJp8llw//RbGoXnF72FZTlOFsnNyxnWbF vViPCfdAlZl1GGK9OYCvV1dp/956HuhB0wpaGQHiBmQfOPJf/jLOPjXFYm2iEChEycrBChuE j4TSYemMp5BSPILYk9Uwd16kVD/+U6fQfK6H5pOhfBvbM6asMnmpY2wQuvktxHvaGlytFw84 EzFWNZtAZfxkw28w3AhIQkKe9hJanfyDL750RcbyEr8AAHty5IErrvS7tM5vQwIeh5BF26ND CyKPRdZgOgMpcwFfROKBDpAt052CgWIpNdhBdfIKlkCs4/ILxmC3rT/Mb/qZiHcoMMwEu6k+ T7vRAFZZAk62Yrr/U8/vUGKlzRZQoo86fyojCfI0ibCIc0z8rwCVY9P40G9wD9BTCZS/z8Vh jjpBlNnIKw2hM6hbxavKndCJjFFJD08rXrTyrLF/of18xD37vNdYooP9VATB5QjOWFRrscSZ 4a89e+to3m7YVnd4xdXwGp47dYusoax84C8tg1gZrH38ol9dPmnKX6GZrXeS7tH9k8VeUpJ8 HQbRThQRWAT936QpYbLConBmOtmbLmjQOGtiXPo1oK57X/7U/WBja5vWmm2q+Yxtt+3uHGVg DdDU4CJpXo4lX0v2n3QV5EBSW9hjdF3bNfl6GFBb1pPEhqNcMDUc7zkx/2uENdAdk/BnqMgH umip7b0pVfvOwU0EVRS3qQEQAJf6p0P7D+hMYUgCPkvgrcz6OJYsAYdUMUmokfqmkKwK0oJM ew8TNGM53ocKAgQGma5f10rwbZNPlpVPNRX5hwUmwVlcwSut0oE+JfUBH7mpysWvpF05RKIy q9RCoJZrAbXS7Tig56A1QD8IcM00rERZMcCOlI1+q9m4u9AOI+0LyGGSH+VvoyDHD/Jew4R2 TmPEF8Pu7lYiNYK88Q6u0kBkc+Tz3BNlyc6fi3HxnFfp0b75HLXPSTu2SwA/0Q31wHZXwrEU BR9KgSn/qbgy8ydPc97i82fhiFE3cbGexfPrQSMYmDGi+dcQ0s+AMQwC3XyMC0JkHpYUuFkR QdlIvaIhgFUUN2Vr4xF2ADaNTNFc4DYaiPHFAgHZw+3pZWqS4uIiWgJynrEaHw4F3QWU8/JB iyEWDhNq4WBrRA0u914TCCAoFOOKMnRdl8eJrRQKM/5/lXbHFjjlI/LDKhLRFsuQsnJJ3331 RjCzpHPZG5/p5KR1RHiAXa0p/DW5lXyq21hS3kjDlleoHqOxCN/cy0Jgz7qLDq1vZoCl67Sy RAH60c2Xu4may9SVltmot0OzWVHdrfS+85FQGp9580DaeLio7YMFKy2bfEvwQJ/c9xD2QPB+ oSb3V8ueSznXBG5+dyfOsZFRPxceA0wA2rSWZSjxLdKxvyGTj9vsCjaDu13rABEBAAHCwV8E GAEIAAkFAlUUt6kCGwwACgkQoZ8SQ+xBJp+HJhAAxmSTsC5y7p9Zu+nnLpucv/h88oEx985e qWeXzQiwM3pfRZS+PdTH9TyzHK0KOgKoAiubk0vt+BrT91D9d0G5kVQaTctAErGBoMkTaZJT XVEcNphiPzysdSqvprjojMp1y7rG8AP+Xd6m0rE1LRnkRRm8HyI8vdXsuLQPITGWXDLMjaNq AOV3BUnzkgtjMuIYw7SCr+12ZOb5dEKvaG4kjC4kaJ/TLbuBhVANcXkC90yp0AOZLs/cB1Dj OAXno/RUUruJ3r27a+pFv768UAi9QWcdw58yPxreMNMLqAgsS9oTHwHfGNWcB2dJ4UW+GMLJ hTf9TjQ2f+N/sIx5XMQ9pYw6CAJMK29qPx6/ZayrPxf22EXf0D3zTwIEZgwfSkynFVwV25L7 awQq60fifdMYheSxq7GbhpsixmcD+e161cCmLIt75YDt5bQ0B1yf7EmxG8n7pGZAOM6LoNsU fkSldba5XVwh8LuN5mK0nQBELGW6Os4TDq4REggLpfcvFC215zpuo0iCGnmE/Bns4nowqUSP u4tkWL+nxW4qgv8wo8HJ52jd79EJ8iqfIBoidBfy9AIUiEUApGQzWPu6yWcI8fY0rN5D+tc+ Yw1Zt6Mm+huYJpgCRsTcfzEcahnBn521CWcWvhW1ff3KFileFMtNmnBBhMncmRKHphtTKEpN 3jI= Organization: 2ndQuadrant Message-ID: <64744529-d34e-9aae-e7e3-e2263c24fb3b@2ndquadrant.com> Date: Mon, 25 Mar 2019 16:23:34 +0100 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <1907751553367887@myt6-23299ba78d64.qloud-c.yandex.net> Content-Type: multipart/mixed; boundary="------------538B636B40149E6883FF5BFE" Content-Language: en-US List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------538B636B40149E6883FF5BFE Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit On 2019-03-23 20:04, Sergei Kornilov wrote: >> An index build with the CONCURRENTLY option failed, leaving >> an invalid index. Such indexes are useless but it can be >> - convenient to use REINDEX to rebuild them. Note that >> - REINDEX will not perform a concurrent build. To build the >> - index without interfering with production you should drop the index and >> - reissue the CREATE INDEX CONCURRENTLY command. >> + convenient to use REINDEX to rebuild them. > > Not sure we can just say "use REINDEX" since only non-concurrently reindex can rebuild such index. I propose to not change this part. Yeah, I reverted that and adjusted the wording a bit. >> + Old indexes have pg_index.indisready switched to false >> + to prevent any new tuple insertions after waiting for running queries which >> + may reference the old index to complete. This step is done within a single >> + transaction for each temporary entry. > > According to the code index_concurrently_swap is called in loop inside one transaction for all processed indexes of table. Same for index_concurrently_set_dead and index_concurrently_drop calls. So this part of documentation seems incorrect. I rewrote that whole procedure to make it a bit simpler. > And few questions: > - reindexdb has concurrently flag logic even in reindex_system_catalogs, but "reindex concurrently" can not reindex system catalog. Is this expected? If support is ever added, then reindexdb supports it automatically. It seems simpler to not have to repeat the same checks in two places. > - should reindexdb check server version? For example, binary from patched HEAD can reindex v11 cluster and obviously fail if --concurrently was requested. Added. > - psql/tab-complete.c vs old releases? Seems we need suggest CONCURRENTLY keyword only for releases with concurrently support. It seems we don't do version checks for tab completion of keywords. > Well, i still have no new questions about backend logic. Maybe we need mark patch as "Ready for Committer" in order to get more attention from other committers? Let's do it. :-) I've gone over this patch a few more times. I've read all the discussion since 2012 again and made sure all the issues were addressed. I made particularly sure that during the refactoring nothing in CREATE INDEX CONCURRENTLY and DROP INDEX CONCURRENTLY was inadvertently changed. I checked all the steps again. I'm happy with it. One more change I made was in the drop phase. I had to hack it up a bit so that we can call index_drop() with a concurrent lock but not actually doing the concurrent processing (that would be a bit recursive). The previous patch was actually taking too strong a lock here. -- Peter Eisentraut http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services --------------538B636B40149E6883FF5BFE Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="v10-0001-REINDEX-CONCURRENTLY.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v10-0001-REINDEX-CONCURRENTLY.patch" RnJvbSA2YTc0YTUyOTkyMDQ3MWQxYzUzODUwYjNlMzcxOTgxNGQyOTAyZTQyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogTW9uLCAyNSBNYXIgMjAxOSAxNjoxNzoyMyArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggdjEwXSBSRUlOREVYIENPTkNVUlJFTlRMWQoKVGhpcyBhZGRzIHRoZSBDT05D VVJSRU5UTFkgb3B0aW9uIHRvIHRoZSBSRUlOREVYIGNvbW1hbmQuICBBIFJFSU5ERVgKQ09O Q1VSUkVOVExZIG9uIGEgc3BlY2lmaWMgaW5kZXggY3JlYXRlcyBhIG5ldyBpbmRleCAobGlr ZSBDUkVBVEUKSU5ERVggQ09OQ1VSUkVOVExZKSwgdGhlbiByZW5hbWVzIHRoZSBvbGQgaW5k ZXggYXdheSBhbmQgdGhlIG5ldyBpbmRleAppbiBwbGFjZSBhbmQgYWRqdXN0cyB0aGUgZGVw ZW5kZW5jaWVzLCBhbmQgdGhlbiBkcm9wcyB0aGUgb2xkCmluZGV4IChsaWtlIERST1AgSU5E RVggQ09OQ1VSUkVOVExZKS4gIFRoZSBSRUlOREVYIGNvbW1hbmQgYWxzbyBoYXMKdGhlIGNh cGFiaWxpdHkgdG8gcnVuIGl0cyBvdGhlciB2YXJpYW50cyAoVEFCTEUsIERBVEFCQVNFKSB3 aXRoIHRoZQpDT05DVVJSRU5UTFkgb3B0aW9uIChidXQgbm90IFNZU1RFTSkuCgpUaGUgcmVp bmRleGRiIGNvbW1hbmQgZ2V0cyB0aGUgLS1jb25jdXJyZW50bHkgb3B0aW9uLgoKQXV0aG9y OiBNaWNoYWVsIFBhcXVpZXIsIEFuZHJlYXMgS2FybHNzb24sIFBldGVyIEVpc2VudHJhdXQK UmV2aWV3ZWQtYnk6IEFuZHJlcyBGcmV1bmQsIEZ1amlpIE1hc2FvLCBKaW0gTmFzYnksIFNl cmdlaSBLb3JuaWxvdgpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9t ZXNzYWdlLWlkL2ZsYXQvNjAwNTI5ODYtOTU2Yi00NDc4LTQ1ZWQtOGJkMTE5ZTliOWNmJTQw Mm5kcXVhZHJhbnQuY29tIzc0OTQ4YTEwNDRjNTZjNWU4MTdhNTA1MGY1NTRkZGVlCi0tLQog ZG9jL3NyYy9zZ21sL212Y2Muc2dtbCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsK IGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwgICAgICAgICAgICB8ICAgMSAr CiBkb2Mvc3JjL3NnbWwvcmVmL3JlaW5kZXguc2dtbCAgICAgICAgICAgICAgICAgfCAxOTAg KysrLQogZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4ZGIuc2dtbCAgICAgICAgICAgICAgIHwg IDEwICsKIHNyYy9iYWNrZW5kL2NhdGFsb2cvZGVwZW5kZW5jeS5jICAgICAgICAgICAgICB8 ICAgNyArLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jICAgICAgICAgICAgICAgICAg IHwgNTA1ICsrKysrKysrKy0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfZGVwZW5kLmMgICAg ICAgICAgICAgICB8IDE0MyArKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5j ICAgICAgICAgICAgICB8IDg4OSArKysrKysrKysrKysrKystLS0KIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL3RhYmxlY21kcy5jICAgICAgICAgICAgICB8ICAzMiArLQogc3JjL2JhY2tlbmQv bm9kZXMvY29weWZ1bmNzLmMgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5k L25vZGVzL2VxdWFsZnVuY3MuYyAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2Vu ZC9wYXJzZXIvZ3JhbS55ICAgICAgICAgICAgICAgICAgICAgfCAgMjIgKy0KIHNyYy9iYWNr ZW5kL3Rjb3AvdXRpbGl0eS5jICAgICAgICAgICAgICAgICAgICB8ICAxMCArLQogc3JjL2Jp bi9wc3FsL2NvbW1vbi5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsKIHNyYy9i aW4vcHNxbC90YWItY29tcGxldGUuYyAgICAgICAgICAgICAgICAgICB8ICAxOCArLQogc3Jj L2Jpbi9zY3JpcHRzL3JlaW5kZXhkYi5jICAgICAgICAgICAgICAgICAgIHwgIDUwICstCiBz cmMvYmluL3NjcmlwdHMvdC8wOTBfcmVpbmRleGRiLnBsICAgICAgICAgICAgfCAgMjkgKy0K IHNyYy9pbmNsdWRlL2NhdGFsb2cvZGVwZW5kZW5jeS5oICAgICAgICAgICAgICB8ICAgNiAr CiBzcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmggICAgICAgICAgICAgICAgICAgfCAgMTYg Ky0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2RlZnJlbS5oICAgICAgICAgICAgICAgICB8ICAg NiArLQogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAgICAgICAgICAgICAgIHwg ICAxICsKIC4uLi9leHBlY3RlZC9yZWluZGV4LWNvbmN1cnJlbnRseS5vdXQgICAgICAgICB8 ICA3OCArKwogc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbl9zY2hlZHVsZSAgICAgICAg IHwgICAxICsKIC4uLi9pc29sYXRpb24vc3BlY3MvcmVpbmRleC1jb25jdXJyZW50bHkuc3Bl YyB8ICA0MCArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQg ICAgfCAgOTcgKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwgICAg ICAgICB8ICA2MiArKwogMjYgZmlsZXMgY2hhbmdlZCwgMjA0OSBpbnNlcnRpb25zKCspLCAx ODMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvaXNvbGF0aW9u L2V4cGVjdGVkL3JlaW5kZXgtY29uY3VycmVudGx5Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy90ZXN0L2lzb2xhdGlvbi9zcGVjcy9yZWluZGV4LWNvbmN1cnJlbnRseS5zcGVjCgpk aWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL212Y2Muc2dtbCBiL2RvYy9zcmMvc2dtbC9tdmNj LnNnbWwKaW5kZXggYmVkZDlhMDA4ZC4uOWI3ZWY4YmYwOSAxMDA2NDQKLS0tIGEvZG9jL3Ny Yy9zZ21sL212Y2Muc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvbXZjYy5zZ21sCkBAIC05MjYs NiArOTI2LDcgQEAgPHRpdGxlPlRhYmxlLWxldmVsIExvY2sgTW9kZXM8L3RpdGxlPgogICAg ICAgICA8cGFyYT4KICAgICAgICAgIEFjcXVpcmVkIGJ5IDxjb21tYW5kPlZBQ1VVTTwvY29t bWFuZD4gKHdpdGhvdXQgPG9wdGlvbj5GVUxMPC9vcHRpb24+KSwKICAgICAgICAgIDxjb21t YW5kPkFOQUxZWkU8L2NvbW1hbmQ+LCA8Y29tbWFuZD5DUkVBVEUgSU5ERVggQ09OQ1VSUkVO VExZPC9jb21tYW5kPiwKKyAgICAgICAgIDxjb21tYW5kPlJFSU5ERVggQ09OQ1VSUkVOVExZ PC9jb21tYW5kPiwKICAgICAgICAgIDxjb21tYW5kPkNSRUFURSBTVEFUSVNUSUNTPC9jb21t YW5kPiwgYW5kIGNlcnRhaW4gPGNvbW1hbmQ+QUxURVIKICAgICAgICAgIElOREVYPC9jb21t YW5kPiBhbmQgPGNvbW1hbmQ+QUxURVIgVEFCTEU8L2NvbW1hbmQ+IHZhcmlhbnRzIChmb3Ig ZnVsbAogICAgICAgICAgZGV0YWlscyBzZWUgPHhyZWYgbGlua2VuZD0ic3FsLWFsdGVyaW5k ZXgiLz4gYW5kIDx4cmVmCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9p bmRleC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbAppbmRleCBk OGYwMThmNGRhLi5kOWQ5NWIyMGUzIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2Ny ZWF0ZV9pbmRleC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNn bWwKQEAgLTg0NCw2ICs4NDQsNyBAQCA8dGl0bGU+U2VlIEFsc288L3RpdGxlPgogICA8c2lt cGxlbGlzdCB0eXBlPSJpbmxpbmUiPgogICAgPG1lbWJlcj48eHJlZiBsaW5rZW5kPSJzcWwt YWx0ZXJpbmRleCIvPjwvbWVtYmVyPgogICAgPG1lbWJlcj48eHJlZiBsaW5rZW5kPSJzcWwt ZHJvcGluZGV4Ii8+PC9tZW1iZXI+CisgICA8bWVtYmVyPjx4cmVmIGxpbmtlbmQ9InNxbC1y ZWluZGV4Ii8+PC9tZW1iZXI+CiAgIDwvc2ltcGxlbGlzdD4KICA8L3JlZnNlY3QxPgogPC9y ZWZlbnRyeT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcmVpbmRleC5zZ21sIGIv ZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwKaW5kZXggNDdjZWY5ODdkNC4uY2NhYmIz MzBjYiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwKKysrIGIv ZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwKQEAgLTIxLDcgKzIxLDcgQEAKIAogIDxy ZWZzeW5vcHNpc2Rpdj4KIDxzeW5vcHNpcz4KLVJFSU5ERVggWyAoIFZFUkJPU0UgKSBdIHsg SU5ERVggfCBUQUJMRSB8IFNDSEVNQSB8IERBVEFCQVNFIHwgU1lTVEVNIH0gPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPgorUkVJTkRFWCBbICgg VkVSQk9TRSApIF0geyBJTkRFWCB8IFRBQkxFIHwgU0NIRU1BIHwgREFUQUJBU0UgfCBTWVNU RU0gfSBbIENPTkNVUlJFTlRMWSBdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5u YW1lPC9yZXBsYWNlYWJsZT4KIDwvc3lub3BzaXM+CiAgPC9yZWZzeW5vcHNpc2Rpdj4KIApA QCAtNjgsNyArNjgsNyBAQCA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgogICAgICAgQW4g aW5kZXggYnVpbGQgd2l0aCB0aGUgPGxpdGVyYWw+Q09OQ1VSUkVOVExZPC9saXRlcmFsPiBv cHRpb24gZmFpbGVkLCBsZWF2aW5nCiAgICAgICBhbiA8cXVvdGU+aW52YWxpZDwvcXVvdGU+ IGluZGV4LiBTdWNoIGluZGV4ZXMgYXJlIHVzZWxlc3MgYnV0IGl0IGNhbiBiZQogICAgICAg Y29udmVuaWVudCB0byB1c2UgPGNvbW1hbmQ+UkVJTkRFWDwvY29tbWFuZD4gdG8gcmVidWls ZCB0aGVtLiBOb3RlIHRoYXQKLSAgICAgIDxjb21tYW5kPlJFSU5ERVg8L2NvbW1hbmQ+IHdp bGwgbm90IHBlcmZvcm0gYSBjb25jdXJyZW50IGJ1aWxkLiBUbyBidWlsZCB0aGUKKyAgICAg IDxjb21tYW5kPlJFSU5ERVg8L2NvbW1hbmQ+IHdpbGwgbm90IHBlcmZvcm0gYSBjb25jdXJy ZW50IGJ1aWxkIG9uIGFuIGludmFsaWQgaW5kZXguIFRvIGJ1aWxkIHRoZQogICAgICAgaW5k ZXggd2l0aG91dCBpbnRlcmZlcmluZyB3aXRoIHByb2R1Y3Rpb24geW91IHNob3VsZCBkcm9w IHRoZSBpbmRleCBhbmQKICAgICAgIHJlaXNzdWUgdGhlIDxjb21tYW5kPkNSRUFURSBJTkRF WCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+IGNvbW1hbmQuCiAgICAgIDwvcGFyYT4KQEAgLTE1 MSw2ICsxNTEsMjEgQEAgPHRpdGxlPlBhcmFtZXRlcnM8L3RpdGxlPgogICAgIDwvbGlzdGl0 ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVy bT48bGl0ZXJhbD5DT05DVVJSRU5UTFk8L2xpdGVyYWw+PC90ZXJtPgorICAgIDxsaXN0aXRl bT4KKyAgICAgPHBhcmE+CisgICAgICBXaGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQsIDxwcm9k dWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gd2lsbCByZWJ1aWxkIHRoZQorICAg ICAgaW5kZXggd2l0aG91dCB0YWtpbmcgYW55IGxvY2tzIHRoYXQgcHJldmVudCBjb25jdXJy ZW50IGluc2VydHMsCisgICAgICB1cGRhdGVzLCBvciBkZWxldGVzIG9uIHRoZSB0YWJsZTsg d2hlcmVhcyBhIHN0YW5kYXJkIHJlaW5kZXggYnVpbGQKKyAgICAgIGxvY2tzIG91dCB3cml0 ZXMgKGJ1dCBub3QgcmVhZHMpIG9uIHRoZSB0YWJsZSB1bnRpbCBpdCdzIGRvbmUuCisgICAg ICBUaGVyZSBhcmUgc2V2ZXJhbCBjYXZlYXRzIHRvIGJlIGF3YXJlIG9mIHdoZW4gdXNpbmcg dGhpcyBvcHRpb24KKyAgICAgICZtZGFzaDsgc2VlIDx4cmVmIGxpbmtlbmQ9InNxbC1yZWlu ZGV4LWNvbmN1cnJlbnRseSIKKyAgICAgIGVuZHRlcm09InNxbC1yZWluZGV4LWNvbmN1cnJl bnRseS10aXRsZSIvPi4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zh cmxpc3RlbnRyeT4KKwogICAgPHZhcmxpc3RlbnRyeT4KICAgICA8dGVybT48bGl0ZXJhbD5W RVJCT1NFPC9saXRlcmFsPjwvdGVybT4KICAgICA8bGlzdGl0ZW0+CkBAIC0yNDEsNiArMjU2 LDE1OSBAQCA8dGl0bGU+Tm90ZXM8L3RpdGxlPgogICAgRWFjaCBpbmRpdmlkdWFsIHBhcnRp dGlvbiBjYW4gYmUgcmVpbmRleGVkIHNlcGFyYXRlbHkgaW5zdGVhZC4KICAgPC9wYXJhPgog CisgIDxyZWZzZWN0MiBpZD0ic3FsLXJlaW5kZXgtY29uY3VycmVudGx5Ij4KKyAgIDx0aXRs ZSBpZD0ic3FsLXJlaW5kZXgtY29uY3VycmVudGx5LXRpdGxlIj5SZWJ1aWxkaW5nIEluZGV4 ZXMgQ29uY3VycmVudGx5PC90aXRsZT4KKworICAgPGluZGV4dGVybSB6b25lPSJzcWwtcmVp bmRleC1jb25jdXJyZW50bHkiPgorICAgIDxwcmltYXJ5PmluZGV4PC9wcmltYXJ5PgorICAg IDxzZWNvbmRhcnk+cmVidWlsZGluZyBjb25jdXJyZW50bHk8L3NlY29uZGFyeT4KKyAgIDwv aW5kZXh0ZXJtPgorCisgICA8cGFyYT4KKyAgICBSZWJ1aWxkaW5nIGFuIGluZGV4IGNhbiBp bnRlcmZlcmUgd2l0aCByZWd1bGFyIG9wZXJhdGlvbiBvZiBhIGRhdGFiYXNlLgorICAgIE5v cm1hbGx5IDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gbG9ja3MgdGhl IHRhYmxlIHdob3NlIGluZGV4IGlzIHJlYnVpbHQKKyAgICBhZ2FpbnN0IHdyaXRlcyBhbmQg cGVyZm9ybXMgdGhlIGVudGlyZSBpbmRleCBidWlsZCB3aXRoIGEgc2luZ2xlIHNjYW4gb2Yg dGhlCisgICAgdGFibGUuIE90aGVyIHRyYW5zYWN0aW9ucyBjYW4gc3RpbGwgcmVhZCB0aGUg dGFibGUsIGJ1dCBpZiB0aGV5IHRyeSB0bworICAgIGluc2VydCwgdXBkYXRlLCBvciBkZWxl dGUgcm93cyBpbiB0aGUgdGFibGUgdGhleSB3aWxsIGJsb2NrIHVudGlsIHRoZQorICAgIGlu ZGV4IHJlYnVpbGQgaXMgZmluaXNoZWQuIFRoaXMgY291bGQgaGF2ZSBhIHNldmVyZSBlZmZl Y3QgaWYgdGhlIHN5c3RlbSBpcworICAgIGEgbGl2ZSBwcm9kdWN0aW9uIGRhdGFiYXNlLiBW ZXJ5IGxhcmdlIHRhYmxlcyBjYW4gdGFrZSBtYW55IGhvdXJzIHRvIGJlCisgICAgaW5kZXhl ZCwgYW5kIGV2ZW4gZm9yIHNtYWxsZXIgdGFibGVzLCBhbiBpbmRleCByZWJ1aWxkIGNhbiBs b2NrIG91dCB3cml0ZXJzCisgICAgZm9yIHBlcmlvZHMgdGhhdCBhcmUgdW5hY2NlcHRhYmx5 IGxvbmcgZm9yIGEgcHJvZHVjdGlvbiBzeXN0ZW0uCisgICA8L3BhcmE+CisKKyAgIDxwYXJh PgorICAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gc3VwcG9ydHMg cmVidWlsZGluZyBpbmRleGVzIHdpdGggbWluaW11bSBsb2NraW5nCisgICAgb2Ygd3JpdGVz LiAgVGhpcyBtZXRob2QgaXMgaW52b2tlZCBieSBzcGVjaWZ5aW5nIHRoZQorICAgIDxsaXRl cmFsPkNPTkNVUlJFTlRMWTwvbGl0ZXJhbD4gb3B0aW9uIG9mIDxjb21tYW5kPlJFSU5ERVg8 L2NvbW1hbmQ+LiBXaGVuIHRoaXMgb3B0aW9uCisgICAgaXMgdXNlZCwgPHByb2R1Y3RuYW1l PlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBtdXN0IHBlcmZvcm0gdHdvIHNjYW5zIG9mIHRo ZSB0YWJsZQorICAgIGZvciBlYWNoIGluZGV4IHRoYXQgbmVlZHMgdG8gYmUgcmVidWlsZCBh bmQgaW4gYWRkaXRpb24gaXQgbXVzdCB3YWl0IGZvcgorICAgIGFsbCBleGlzdGluZyB0cmFu c2FjdGlvbnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSB1c2UgdGhlIGluZGV4IHRvCisgICAg dGVybWluYXRlLiBUaGlzIG1ldGhvZCByZXF1aXJlcyBtb3JlIHRvdGFsIHdvcmsgdGhhbiBh IHN0YW5kYXJkIGluZGV4CisgICAgcmVidWlsZCBhbmQgdGFrZXMgc2lnbmlmaWNhbnRseSBs b25nZXIgdG8gY29tcGxldGUgYXMgaXQgbmVlZHMgdG8gd2FpdAorICAgIGZvciB1bmZpbmlz aGVkIHRyYW5zYWN0aW9ucyB0aGF0IG1pZ2h0IG1vZGlmeSB0aGUgaW5kZXguIEhvd2V2ZXIs IHNpbmNlCisgICAgaXQgYWxsb3dzIG5vcm1hbCBvcGVyYXRpb25zIHRvIGNvbnRpbnVlIHdo aWxlIHRoZSBpbmRleCBpcyByZWJ1aWx0LCB0aGlzCisgICAgbWV0aG9kIGlzIHVzZWZ1bCBm b3IgcmVidWlsZGluZyBpbmRleGVzIGluIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudC4gT2YK KyAgICBjb3Vyc2UsIHRoZSBleHRyYSBDUFUsIG1lbW9yeSBhbmQgSS9PIGxvYWQgaW1wb3Nl ZCBieSB0aGUgaW5kZXggcmVidWlsZAorICAgIG1heSBzbG93IGRvd24gb3RoZXIgb3BlcmF0 aW9ucy4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlIGZvbGxvd2luZyBzdGVw cyBvY2N1ciBpbiBhIGNvbmN1cnJlbnQgcmVpbmRleC4gIEVhY2ggc3RlcCBpcyBydW4gaW4g YQorICAgIHNlcGFyYXRlIHRyYW5zYWN0aW9uLiAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIGlu ZGV4ZXMgdG8gYmUgcmVidWlsdCwgdGhlbgorICAgIGVhY2ggc3RlcCBsb29wcyB0aHJvdWdo IGFsbCB0aGUgaW5kZXhlcyBiZWZvcmUgbW92aW5nIHRvIHRoZSBuZXh0IHN0ZXAuCisKKyAg ICA8b3JkZXJlZGxpc3Q+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAg IEEgbmV3IHRlbXBvcmFyeSBpbmRleCBkZWZpbml0aW9uIGlzIGFkZGVkIGludG8gdGhlIGNh dGFsb2cKKyAgICAgICA8bGl0ZXJhbD5wZ19pbmRleDwvbGl0ZXJhbD4uICBUaGlzIGRlZmlu aXRpb24gd2lsbCBiZSB1c2VkIHRvIHJlcGxhY2UKKyAgICAgICB0aGUgb2xkIGluZGV4LiAg QSA8bGl0ZXJhbD5TSEFSRSBVUERBVEUgRVhDTFVTSVZFPC9saXRlcmFsPiBsb2NrIGF0Cisg ICAgICAgc2Vzc2lvbiBsZXZlbCBpcyB0YWtlbiBvbiB0aGUgaW5kZXhlcyBiZWluZyByZWlu ZGV4ZWQgYXMgd2VsbCBhcyBpdHMKKyAgICAgICBhc3NvY2lhdGVkIHRhYmxlIHRvIHByZXZl bnQgYW55IHNjaGVtYSBtb2RpZmljYXRpb24gd2hpbGUgcHJvY2Vzc2luZy4KKyAgICAgIDwv cGFyYT4KKyAgICAgPC9saXN0aXRlbT4KKworICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFy YT4KKyAgICAgICBBIGZpcnN0IHBhc3MgdG8gYnVpbGQgdGhlIGluZGV4IGlzIGRvbmUgZm9y IGVhY2ggbmV3IGluZGV4LiAgT25jZSB0aGUKKyAgICAgICBpbmRleCBpcyBidWlsdCwgaXRz IGZsYWcgPGxpdGVyYWw+cGdfaW5kZXguaW5kaXNyZWFkeTwvbGl0ZXJhbD4gaXMKKyAgICAg ICBzd2l0Y2hlZCB0byA8cXVvdGU+dHJ1ZTwvcXVvdGU+IHRvIG1ha2UgcmVhZHkgZm9yIGlu c2VydHMsIG1ha2luZyBpdAorICAgICAgIHZpc2libGUgdG8gb3RoZXIgc2Vzc2lvbnMgb25j ZSB0aGUgdHJhbnNhY3Rpb24gdGhhdCBwZXJmb3JtZWQgdGhlIGJ1aWxkCisgICAgICAgaXMg ZmluaXNoZWQuICBUaGlzIHN0ZXAgaXMgZG9uZSBpbiBhIHNlcGFyYXRlIHRyYW5zYWN0aW9u IGZvciBlYWNoCisgICAgICAgaW5kZXguCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0 ZW0+CisKKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgVGhlbiBhIHNl Y29uZCBwYXNzIGlzIHBlcmZvcm1lZCB0byBhZGQgdHVwbGVzIHRoYXQgd2VyZSBhZGRlZCB3 aGlsZSB0aGUKKyAgICAgICBmaXJzdCBwYXNzIGJ1aWxkIHdhcyBydW5uaW5nLiAgVGhpcyBz dGVwIGlzIGFsc28gZG9uZSBpbiBhIHNlcGFyYXRlCisgICAgICAgdHJhbnNhY3Rpb24gZm9y IGVhY2ggaW5kZXguCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAg PGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgQWxsIHRoZSBjb25zdHJhaW50cyB0 aGF0IHJlZmVyIHRvIHRoZSBpbmRleCBhcmUgY2hhbmdlZCB0byByZWZlciB0byB0aGUKKyAg ICAgICBuZXcgaW5kZXggZGVmaW5pdGlvbiwgYW5kIHRoZSBuYW1lcyBvZiB0aGUgaW5kZXhl cyBhcmUgY2hhbmdlZC4gIEF0CisgICAgICAgdGhpcyBwb2ludCA8bGl0ZXJhbD5wZ19pbmRl eC5pbmRpc3ZhbGlkPC9saXRlcmFsPiBpcyBzd2l0Y2hlZCB0bworICAgICAgIDxxdW90ZT50 cnVlPC9xdW90ZT4gZm9yIHRoZSBuZXcgaW5kZXggYW5kIHRvIDxxdW90ZT5mYWxzZTwvcXVv dGU+IGZvcgorICAgICAgIHRoZSBvbGQsIGFuZCBhIGNhY2hlIGludmFsaWRhdGlvbiBpcyBk b25lIHNvIGFzIGFsbCB0aGUgc2Vzc2lvbnMgdGhhdAorICAgICAgIHJlZmVyZW5jZWQgdGhl IG9sZCBpbmRleCBhcmUgaW52YWxpZGF0ZWQuCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlz dGl0ZW0+CisKKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgVGhlIG9s ZCBpbmRleGVzIGhhdmUgPGxpdGVyYWw+cGdfaW5kZXguaW5kaXNyZWFkeTwvbGl0ZXJhbD4g c3dpdGNoZWQgdG8KKyAgICAgICA8cXVvdGU+ZmFsc2U8L3F1b3RlPiB0byBwcmV2ZW50IGFu eSBuZXcgdHVwbGUgaW5zZXJ0aW9ucywgYWZ0ZXIgd2FpdGluZworICAgICAgIGZvciBydW5u aW5nIHF1ZXJpZXMgdGhhdCBtaWdodCByZWZlcmVuY2UgdGhlIG9sZCBpbmRleCB0byBjb21w bGV0ZS4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4KKworICAgICA8bGlzdGl0 ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICBUaGUgb2xkIGluZGV4ZXMgYXJlIGRyb3BwZWQu ICBUaGUgPGxpdGVyYWw+U0hBUkUgVVBEQVRFCisgICAgICAgRVhDTFVTSVZFPC9saXRlcmFs PiBzZXNzaW9uIGxvY2tzIGZvciB0aGUgaW5kZXhlcyBhbmQgdGhlIHRhYmxlIGFyCisgICAg ICAgcmVsZWFzZWQuCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC9v cmRlcmVkbGlzdD4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgSWYgYSBwcm9ibGVt IGFyaXNlcyB3aGlsZSByZWJ1aWxkaW5nIHRoZSBpbmRleGVzLCBzdWNoIGFzIGEKKyAgICB1 bmlxdWVuZXNzIHZpb2xhdGlvbiBpbiBhIHVuaXF1ZSBpbmRleCwgdGhlIDxjb21tYW5kPlJF SU5ERVg8L2NvbW1hbmQ+CisgICAgY29tbWFuZCB3aWxsIGZhaWwgYnV0IGxlYXZlIGJlaGlu ZCBhbiA8cXVvdGU+aW52YWxpZDwvcXVvdGU+IG5ldyBpbmRleCBvbiB0b3AKKyAgICBvZiB0 aGUgZXhpc3Rpbmcgb25lLiBUaGlzIGluZGV4IHdpbGwgYmUgaWdub3JlZCBmb3IgcXVlcnlp bmcgcHVycG9zZXMKKyAgICBiZWNhdXNlIGl0IG1pZ2h0IGJlIGluY29tcGxldGU7IGhvd2V2 ZXIgaXQgd2lsbCBzdGlsbCBjb25zdW1lIHVwZGF0ZQorICAgIG92ZXJoZWFkLiBUaGUgPGFw cGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPiA8Y29tbWFuZD5cZDwvY29tbWFuZD4gY29t bWFuZCB3aWxsIHJlcG9ydAorICAgIHN1Y2ggYW4gaW5kZXggYXMgPGxpdGVyYWw+SU5WQUxJ RDwvbGl0ZXJhbD46CisKKzxwcm9ncmFtbGlzdGluZz4KK3Bvc3RncmVzPSMgXGQgdGFiCisg ICAgICAgVGFibGUgInB1YmxpYy50YWIiCisgQ29sdW1uIHwgIFR5cGUgICB8IE1vZGlmaWVy cworLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tCisgY29sICAgIHwgaW50ZWdlciB8 CitJbmRleGVzOgorICAgICJpZHgiIGJ0cmVlIChjb2wpCisgICAgImlkeF9jY25ldyIgYnRy ZWUgKGNvbCkgSU5WQUxJRAorPC9wcm9ncmFtbGlzdGluZz4KKworICAgIFRoZSByZWNvbW1l bmRlZCByZWNvdmVyeSBtZXRob2QgaW4gc3VjaCBjYXNlcyBpcyB0byBkcm9wIHRoZSBpbnZh bGlkIGluZGV4CisgICAgYW5kIHRyeSBhZ2FpbiB0byBwZXJmb3JtIDxjb21tYW5kPlJFSU5E RVggQ09OQ1VSUkVOVExZPC9jb21tYW5kPi4gIFRoZQorICAgIGNvbmN1cnJlbnQgaW5kZXgg Y3JlYXRlZCBkdXJpbmcgdGhlIHByb2Nlc3NpbmcgaGFzIGEgbmFtZSBlbmRpbmcgaW4gdGhl CisgICAgc3VmZml4IDxsaXRlcmFsPmNjbmV3PC9saXRlcmFsPiwgb3IgPGxpdGVyYWw+Y2Nv bGQ8L2xpdGVyYWw+IGlmIGl0IGlzIGFuCisgICAgb2xkIGluZGV4IGRlZmluaXRpb24gd2hp Y2ggd2UgZmFpbGVkIHRvIGRyb3AuIEludmFsaWQgaW5kZXhlcyBjYW4gYmUKKyAgICBkcm9w cGVkIHVzaW5nIDxsaXRlcmFsPkRST1AgSU5ERVg8L2xpdGVyYWw+LCBpbmNsdWRpbmcgaW52 YWxpZCB0b2FzdAorICAgIGluZGV4ZXMuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAg IFJlZ3VsYXIgaW5kZXggYnVpbGRzIHBlcm1pdCBvdGhlciByZWd1bGFyIGluZGV4IGJ1aWxk cyBvbiB0aGUgc2FtZSB0YWJsZQorICAgIHRvIG9jY3VyIGluIHBhcmFsbGVsLCBidXQgb25s eSBvbmUgY29uY3VycmVudCBpbmRleCBidWlsZCBjYW4gb2NjdXIgb24gYQorICAgIHRhYmxl IGF0IGEgdGltZS4gSW4gYm90aCBjYXNlcywgbm8gb3RoZXIgdHlwZXMgb2Ygc2NoZW1hIG1v ZGlmaWNhdGlvbiBvbgorICAgIHRoZSB0YWJsZSBhcmUgYWxsb3dlZCBtZWFud2hpbGUuICBB bm90aGVyIGRpZmZlcmVuY2UgaXMgdGhhdCBhIHJlZ3VsYXIKKyAgICA8Y29tbWFuZD5SRUlO REVYIFRBQkxFPC9jb21tYW5kPiBvciA8Y29tbWFuZD5SRUlOREVYIElOREVYPC9jb21tYW5k PgorICAgIGNvbW1hbmQgY2FuIGJlIHBlcmZvcm1lZCB3aXRoaW4gYSB0cmFuc2FjdGlvbiBi bG9jaywgYnV0IDxjb21tYW5kPlJFSU5ERVgKKyAgICBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+ IGNhbm5vdC4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgPGNvbW1hbmQ+UkVJTkRF WCBTWVNURU08L2NvbW1hbmQ+IGRvZXMgbm90IHN1cHBvcnQKKyAgICA8Y29tbWFuZD5DT05D VVJSRU5UTFk8L2NvbW1hbmQ+IHNpbmNlIHN5c3RlbSBjYXRhbG9ncyBjYW5ub3QgYmUgcmVp bmRleGVkCisgICAgY29uY3VycmVudGx5LgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAg ICBGdXJ0aGVybW9yZSwgaW5kZXhlcyBmb3IgZXhjbHVzaW9uIGNvbnN0cmFpbnRzIGNhbm5v dCBiZSByZWluZGV4ZWQKKyAgICBjb25jdXJyZW50bHkuICBJZiBzdWNoIGFuIGluZGV4IGlz IG5hbWVkIGRpcmVjdGx5IGluIHRoaXMgY29tbWFuZCwgYW4KKyAgICBlcnJvciBpcyByYWlz ZWQuICBJZiBhIHRhYmxlIG9yIGRhdGFiYXNlIHdpdGggZXhjbHVzaW9uIGNvbnN0cmFpbnQg aW5kZXhlcworICAgIGlzIHJlaW5kZXhlZCBjb25jdXJyZW50bHksIHRob3NlIGluZGV4ZXMg d2lsbCBiZSBza2lwcGVkLiAgKEl0IGlzIHBvc3NpYmxlCisgICAgdG8gcmVpbmRleCBzdWNo IGluZGV4ZXMgd2l0aG91dCB0aGUgY29uY3VycmVudGx5IG9wdGlvbi4pCisgICA8L3BhcmE+ CisgIDwvcmVmc2VjdDI+CiAgPC9yZWZzZWN0MT4KIAogIDxyZWZzZWN0MT4KQEAgLTI3Miw2 ICs0NDAsMTQgQEAgPHRpdGxlPkV4YW1wbGVzPC90aXRsZT4KIC4uLgogYnJva2VuX2RiPSZn dDsgUkVJTkRFWCBEQVRBQkFTRSBicm9rZW5fZGI7CiBicm9rZW5fZGI9Jmd0OyBccQorPC9w cm9ncmFtbGlzdGluZz48L3BhcmE+CisKKyAgPHBhcmE+CisgICBSZWJ1aWxkIGEgdGFibGUg d2hpbGUgYXV0aG9yaXppbmcgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvbiBpbnZvbHZl ZAorICAgcmVsYXRpb25zIHdoZW4gcGVyZm9ybWVkOgorCis8cHJvZ3JhbWxpc3Rpbmc+CitS RUlOREVYIFRBQkxFIENPTkNVUlJFTlRMWSBteV9icm9rZW5fdGFibGU7CiA8L3Byb2dyYW1s aXN0aW5nPjwvcGFyYT4KICA8L3JlZnNlY3QxPgogCkBAIC0yODIsNCArNDU4LDE0IEBAIDx0 aXRsZT5Db21wYXRpYmlsaXR5PC90aXRsZT4KICAgIFRoZXJlIGlzIG5vIDxjb21tYW5kPlJF SU5ERVg8L2NvbW1hbmQ+IGNvbW1hbmQgaW4gdGhlIFNRTCBzdGFuZGFyZC4KICAgPC9wYXJh PgogIDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5TZWUgQWxzbzwvdGl0 bGU+CisKKyAgPHNpbXBsZWxpc3QgdHlwZT0iaW5saW5lIj4KKyAgIDxtZW1iZXI+PHhyZWYg bGlua2VuZD0ic3FsLWNyZWF0ZWluZGV4Ii8+PC9tZW1iZXI+CisgICA8bWVtYmVyPjx4cmVm IGxpbmtlbmQ9InNxbC1kcm9waW5kZXgiLz48L21lbWJlcj4KKyAgIDxtZW1iZXI+PHhyZWYg bGlua2VuZD0iYXBwLXJlaW5kZXhkYiIvPjwvbWVtYmVyPgorICA8L3NpbXBsZWxpc3Q+Cisg PC9yZWZzZWN0MT4KIDwvcmVmZW50cnk+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVm L3JlaW5kZXhkYi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4ZGIuc2dtbAppbmRl eCAxMjczZGFkODA3Li5jZGZhYzNmZTRmIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVm L3JlaW5kZXhkYi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcmVpbmRleGRiLnNnbWwK QEAgLTExOCw2ICsxMTgsMTYgQEAgPHRpdGxlPk9wdGlvbnM8L3RpdGxlPgogICAgICAgPC9s aXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4K KyAgICAgIDx0ZXJtPjxvcHRpb24+LS1jb25jdXJyZW50bHk8L29wdGlvbj48L3Rlcm0+Cisg ICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFVzZSB0aGUgPGxpdGVy YWw+Q09OQ1VSUkVOVExZPC9saXRlcmFsPiBvcHRpb24uICBTZWUgPHhyZWYKKyAgICAgICAg bGlua2VuZD0ic3FsLXJlaW5kZXgiLz4gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCisgICAg ICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisK ICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+PG9wdGlvbmFsPi1k PC9vcHRpb25hbD4gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmRibmFtZTwvcmVw bGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgogICAgICAgPHRlcm0+PG9wdGlvbj48b3B0aW9u YWw+LS1kYm5hbWU9PC9vcHRpb25hbD48cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ ZGJuYW1lPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jYXRhbG9nL2RlcGVuZGVuY3kuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvZGVw ZW5kZW5jeS5jCmluZGV4IGY3YWNiNDEwM2UuLjdhZjE2NzBjMGQgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvZGVwZW5kZW5jeS5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvZGVwZW5kZW5jeS5jCkBAIC0zMDYsNiArMzA2LDEwIEBAIGRlbGV0ZU9iamVjdHNJbkxp c3QoT2JqZWN0QWRkcmVzc2VzICp0YXJnZXRPYmplY3RzLCBSZWxhdGlvbiAqZGVwUmVsLAog ICogUEVSRk9STV9ERUxFVElPTl9TS0lQX0VYVEVOU0lPTlM6IGRvIG5vdCBkZWxldGUgZXh0 ZW5zaW9ucywgZXZlbiB3aGVuCiAgKiBkZWxldGluZyBvYmplY3RzIHRoYXQgYXJlIHBhcnQg b2YgYW4gZXh0ZW5zaW9uLiAgVGhpcyBzaG91bGQgZ2VuZXJhbGx5CiAgKiBiZSB1c2VkIG9u bHkgd2hlbiBkcm9wcGluZyB0ZW1wb3Jhcnkgb2JqZWN0cy4KKyAqCisgKiBQRVJGT1JNX0RF TEVUSU9OX0NPTkNVUlJFTlRfTE9DSzogcGVyZm9ybSB0aGUgZHJvcCBub3JtYWxseSBidXQg d2l0aCBhIGxvY2sKKyAqIGFzIGlmIGl0IHdlcmUgY29uY3VycmVudC4gIFRoaXMgaXMgdXNl ZCBieSBSRUlOREVYIENPTkNVUlJFTlRMWS4KKyAqCiAgKi8KIHZvaWQKIHBlcmZvcm1EZWxl dGlvbihjb25zdCBPYmplY3RBZGRyZXNzICpvYmplY3QsCkBAIC0xMzE2LDkgKzEzMjAsMTAg QEAgZG9EZWxldGlvbihjb25zdCBPYmplY3RBZGRyZXNzICpvYmplY3QsIGludCBmbGFncykK IAkJCQkJcmVsS2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX0lOREVYKQogCQkJCXsKIAkJ CQkJYm9vbAkJY29uY3VycmVudCA9ICgoZmxhZ3MgJiBQRVJGT1JNX0RFTEVUSU9OX0NPTkNV UlJFTlRMWSkgIT0gMCk7CisJCQkJCWJvb2wJCWNvbmN1cnJlbnRfbG9ja19tb2RlID0gKChm bGFncyAmIFBFUkZPUk1fREVMRVRJT05fQ09OQ1VSUkVOVF9MT0NLKSAhPSAwKTsKIAogCQkJ CQlBc3NlcnQob2JqZWN0LT5vYmplY3RTdWJJZCA9PSAwKTsKLQkJCQkJaW5kZXhfZHJvcChv YmplY3QtPm9iamVjdElkLCBjb25jdXJyZW50KTsKKwkJCQkJaW5kZXhfZHJvcChvYmplY3Qt Pm9iamVjdElkLCBjb25jdXJyZW50LCBjb25jdXJyZW50X2xvY2tfbW9kZSk7CiAJCQkJfQog CQkJCWVsc2UKIAkJCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4 LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKaW5kZXggY2IyYzAwMTAxNy4uZTdi ODhjMzg2NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCisrKyBi L3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1 ZGUgImNhdGFsb2cvcGdfYW0uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5o IgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29uc3RyYWludC5oIgorI2luY2x1ZGUgImNhdGFs b2cvcGdfZGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2RlcGVuZC5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfaW5oZXJpdHMuaCIKICNpbmNsdWRlICJjYXRhbG9nL3Bn X29wZXJhdG9yLmgiCkBAIC01OSw2ICs2MCw3IEBACiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1 bmNzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgogI2luY2x1ZGUgInBh cnNlci9wYXJzZXIuaCIKKyNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJyZXdyaXRl L3Jld3JpdGVNYW5pcC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9sbWdyLmgiCkBAIC03OTEsMTEgKzc5MywxMSBAQCBpbmRleF9jcmVhdGUo UmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCSBlcnJtc2coInVzZXItZGVmaW5lZCBpbmRl eGVzIG9uIHN5c3RlbSBjYXRhbG9nIHRhYmxlcyBhcmUgbm90IHN1cHBvcnRlZCIpKSk7CiAK IAkvKgotCSAqIGNvbmN1cnJlbnQgaW5kZXggYnVpbGQgb24gYSBzeXN0ZW0gY2F0YWxvZyBp cyB1bnNhZmUgYmVjYXVzZSB3ZSB0ZW5kIHRvCi0JICogcmVsZWFzZSBsb2NrcyBiZWZvcmUg Y29tbWl0dGluZyBpbiBjYXRhbG9ncworCSAqIENvbmN1cnJlbnQgaW5kZXggYnVpbGQgb24g YSBzeXN0ZW0gY2F0YWxvZyBpcyB1bnNhZmUgYmVjYXVzZSB3ZSB0ZW5kIHRvCisJICogcmVs ZWFzZSBsb2NrcyBiZWZvcmUgY29tbWl0dGluZyBpbiBjYXRhbG9ncy4KIAkgKi8KIAlpZiAo Y29uY3VycmVudCAmJgotCQlJc1N5c3RlbVJlbGF0aW9uKGhlYXBSZWxhdGlvbikpCisJCUlz Q2F0YWxvZ1JlbGF0aW9uKGhlYXBSZWxhdGlvbikpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJ KGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2co ImNvbmN1cnJlbnQgaW5kZXggY3JlYXRpb24gb24gc3lzdGVtIGNhdGFsb2cgdGFibGVzIGlz IG5vdCBzdXBwb3J0ZWQiKSkpOwpAQCAtMTIxMCw2ICsxMjEyLDQ2MiBAQCBpbmRleF9jcmVh dGUoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCXJldHVybiBpbmRleFJlbGF0aW9uSWQ7CiB9 CiAKKy8qCisgKiBpbmRleF9jb25jdXJyZW50bHlfY3JlYXRlX2NvcHkKKyAqCisgKiBDcmVh dGUgY29uY3VycmVudGx5IGFuIGluZGV4IGJhc2VkIG9uIHRoZSBkZWZpbml0aW9uIG9mIHRo ZSBvbmUgcHJvdmlkZWQgYnkKKyAqIGNhbGxlci4gIFRoZSBpbmRleCBpcyBpbnNlcnRlZCBp bnRvIGNhdGFsb2dzIGFuZCBuZWVkcyB0byBiZSBidWlsdCBsYXRlcgorICogb24uICBUaGlz IGlzIGNhbGxlZCBkdXJpbmcgY29uY3VycmVudCByZWluZGV4IHByb2Nlc3NpbmcuCisgKi8K K09pZAoraW5kZXhfY29uY3VycmVudGx5X2NyZWF0ZV9jb3B5KFJlbGF0aW9uIGhlYXBSZWxh dGlvbiwgT2lkIG9sZEluZGV4SWQsIGNvbnN0IGNoYXIgKm5ld05hbWUpCit7CisJUmVsYXRp b24JaW5kZXhSZWxhdGlvbjsKKwlJbmRleEluZm8gICppbmRleEluZm87CisJT2lkCQkJbmV3 SW5kZXhJZCA9IEludmFsaWRPaWQ7CisJSGVhcFR1cGxlCWluZGV4VHVwbGUsCisJCQkJY2xh c3NUdXBsZTsKKwlEYXR1bQkJaW5kY2xhc3NEYXR1bSwKKwkJCQljb2xPcHRpb25EYXR1bSwK KwkJCQlvcHRpb25EYXR1bTsKKwlvaWR2ZWN0b3IgICppbmRjbGFzczsKKwlpbnQydmVjdG9y ICppbmRjb2xvcHRpb25zOworCWJvb2wJCWlzbnVsbDsKKwlMaXN0CSAgICppbmRleENvbE5h bWVzID0gTklMOworCisJaW5kZXhSZWxhdGlvbiA9IGluZGV4X29wZW4ob2xkSW5kZXhJZCwg Um93RXhjbHVzaXZlTG9jayk7CisKKwkvKiBOZXcgaW5kZXggdXNlcyB0aGUgc2FtZSBpbmRl eCBpbmZvcm1hdGlvbiBhcyBvbGQgaW5kZXggKi8KKwlpbmRleEluZm8gPSBCdWlsZEluZGV4 SW5mbyhpbmRleFJlbGF0aW9uKTsKKworCS8qIEdldCB0aGUgYXJyYXkgb2YgY2xhc3MgYW5k IGNvbHVtbiBvcHRpb25zIElEcyBmcm9tIGluZGV4IGluZm8gKi8KKwlpbmRleFR1cGxlID0g U2VhcmNoU3lzQ2FjaGUxKElOREVYUkVMSUQsIE9iamVjdElkR2V0RGF0dW0ob2xkSW5kZXhJ ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChpbmRleFR1cGxlKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGluZGV4ICV1Iiwgb2xkSW5kZXhJZCk7CisJ aW5kY2xhc3NEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBpbmRleFR1cGxl LAorCQkJCQkJCQkJQW51bV9wZ19pbmRleF9pbmRjbGFzcywgJmlzbnVsbCk7CisJQXNzZXJ0 KCFpc251bGwpOworCWluZGNsYXNzID0gKG9pZHZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIo aW5kY2xhc3NEYXR1bSk7CisKKwljb2xPcHRpb25EYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJ TkRFWFJFTElELCBpbmRleFR1cGxlLAorCQkJCQkJCQkJIEFudW1fcGdfaW5kZXhfaW5kb3B0 aW9uLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7CisJaW5kY29sb3B0aW9ucyA9IChp bnQydmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihjb2xPcHRpb25EYXR1bSk7CisKKwkvKiBG ZXRjaCBvcHRpb25zIG9mIGluZGV4IGlmIGFueSAqLworCWNsYXNzVHVwbGUgPSBTZWFyY2hT eXNDYWNoZTEoUkVMT0lELCBvbGRJbmRleElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo Y2xhc3NUdXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBy ZWxhdGlvbiAldSIsIG9sZEluZGV4SWQpOworCW9wdGlvbkRhdHVtID0gU3lzQ2FjaGVHZXRB dHRyKFJFTE9JRCwgY2xhc3NUdXBsZSwKKwkJCQkJCQkJICBBbnVtX3BnX2NsYXNzX3JlbG9w dGlvbnMsICZpc251bGwpOworCisJLyoKKwkgKiBFeHRyYWN0IHRoZSBsaXN0IG9mIGNvbHVt biBuYW1lcyB0byBiZSB1c2VkIGZvciB0aGUgaW5kZXgKKwkgKiBjcmVhdGlvbi4KKwkgKi8K Kwlmb3IgKGludCBpID0gMDsgaSA8IGluZGV4SW5mby0+aWlfTnVtSW5kZXhBdHRyczsgaSsr KQorCXsKKwkJVHVwbGVEZXNjCWluZGV4VHVwRGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IoaW5k ZXhSZWxhdGlvbik7CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIo aW5kZXhUdXBEZXNjLCBpKTsKKworCQlpbmRleENvbE5hbWVzID0gbGFwcGVuZChpbmRleENv bE5hbWVzLCBOYW1lU3RyKGF0dC0+YXR0bmFtZSkpOworCX0KKworCS8qIE5vdyBjcmVhdGUg dGhlIG5ldyBpbmRleCAqLworCW5ld0luZGV4SWQgPSBpbmRleF9jcmVhdGUoaGVhcFJlbGF0 aW9uLAorCQkJCQkJCSAgbmV3TmFtZSwKKwkJCQkJCQkgIEludmFsaWRPaWQsCS8qIGluZGV4 UmVsYXRpb25JZCAqLworCQkJCQkJCSAgSW52YWxpZE9pZCwJLyogcGFyZW50SW5kZXhSZWxp ZCAqLworCQkJCQkJCSAgSW52YWxpZE9pZCwJLyogcGFyZW50Q29uc3RyYWludElkICovCisJ CQkJCQkJICBJbnZhbGlkT2lkLAkvKiByZWxGaWxlTm9kZSAqLworCQkJCQkJCSAgaW5kZXhJ bmZvLAorCQkJCQkJCSAgaW5kZXhDb2xOYW1lcywKKwkJCQkJCQkgIGluZGV4UmVsYXRpb24t PnJkX3JlbC0+cmVsYW0sCisJCQkJCQkJICBpbmRleFJlbGF0aW9uLT5yZF9yZWwtPnJlbHRh Ymxlc3BhY2UsCisJCQkJCQkJICBpbmRleFJlbGF0aW9uLT5yZF9pbmRjb2xsYXRpb24sCisJ CQkJCQkJICBpbmRjbGFzcy0+dmFsdWVzLAorCQkJCQkJCSAgaW5kY29sb3B0aW9ucy0+dmFs dWVzLAorCQkJCQkJCSAgb3B0aW9uRGF0dW0sCisJCQkJCQkJICBJTkRFWF9DUkVBVEVfU0tJ UF9CVUlMRCB8IElOREVYX0NSRUFURV9DT05DVVJSRU5ULAorCQkJCQkJCSAgMCwKKwkJCQkJ CQkgIHRydWUsCS8qIGFsbG93IHRhYmxlIHRvIGJlIGEgc3lzdGVtIGNhdGFsb2c/ICovCisJ CQkJCQkJICBmYWxzZSwgLyogaXNfaW50ZXJuYWw/ICovCisJCQkJCQkJICBOVUxMKTsKKwor CS8qIENsb3NlIHRoZSByZWxhdGlvbnMgdXNlZCBhbmQgY2xlYW4gdXAgKi8KKwlpbmRleF9j bG9zZShpbmRleFJlbGF0aW9uLCBOb0xvY2spOworCVJlbGVhc2VTeXNDYWNoZShpbmRleFR1 cGxlKTsKKwlSZWxlYXNlU3lzQ2FjaGUoY2xhc3NUdXBsZSk7CisKKwlyZXR1cm4gbmV3SW5k ZXhJZDsKK30KKworLyoKKyAqIGluZGV4X2NvbmN1cnJlbnRseV9idWlsZAorICoKKyAqIEJ1 aWxkIGluZGV4IGZvciBhIGNvbmN1cnJlbnQgb3BlcmF0aW9uLiAgTG93LWxldmVsIGxvY2tz IGFyZSB0YWtlbiB3aGVuCisgKiB0aGlzIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgdG8gcHJl dmVudCBvbmx5IHNjaGVtYSBjaGFuZ2VzLCBidXQgdGhleSBuZWVkCisgKiB0byBiZSBrZXB0 IHVudGlsIHRoZSBlbmQgb2YgdGhlIHRyYW5zYWN0aW9uIHBlcmZvcm1pbmcgdGhpcyBvcGVy YXRpb24uCisgKiAnaW5kZXhPaWQnIHJlZmVycyB0byBhbiBpbmRleCByZWxhdGlvbiBPSUQg YWxyZWFkeSBjcmVhdGVkIGFzIHBhcnQgb2YKKyAqIHByZXZpb3VzIHByb2Nlc3NpbmcsIGFu ZCAnaGVhcE9pZCcgcmVmZXJzIHRvIGl0cyBwYXJlbnQgaGVhcCByZWxhdGlvbi4KKyAqLwor dm9pZAoraW5kZXhfY29uY3VycmVudGx5X2J1aWxkKE9pZCBoZWFwUmVsYXRpb25JZCwKKwkJ CQkJCSBPaWQgaW5kZXhSZWxhdGlvbklkKQoreworCVJlbGF0aW9uCWhlYXBSZWw7CisJUmVs YXRpb24JaW5kZXhSZWxhdGlvbjsKKwlJbmRleEluZm8gICppbmRleEluZm87CisKKwkvKiBU aGlzIGhhZCBiZXR0ZXIgbWFrZSBzdXJlIHRoYXQgYSBzbmFwc2hvdCBpcyBhY3RpdmUgKi8K KwlBc3NlcnQoQWN0aXZlU25hcHNob3RTZXQoKSk7CisKKwkvKiBPcGVuIGFuZCBsb2NrIHRo ZSBwYXJlbnQgaGVhcCByZWxhdGlvbiAqLworCWhlYXBSZWwgPSB0YWJsZV9vcGVuKGhlYXBS ZWxhdGlvbklkLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOworCisJLyogQW5kIHRoZSB0 YXJnZXQgaW5kZXggcmVsYXRpb24gKi8KKwlpbmRleFJlbGF0aW9uID0gaW5kZXhfb3Blbihp bmRleFJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJLyoKKwkgKiBXZSBoYXZl IHRvIHJlLWJ1aWxkIHRoZSBJbmRleEluZm8gc3RydWN0LCBzaW5jZSBpdCB3YXMgbG9zdCBp biB0aGUKKwkgKiBjb21taXQgb2YgdGhlIHRyYW5zYWN0aW9uIHdoZXJlIHRoaXMgY29uY3Vy cmVudCBpbmRleCB3YXMgY3JlYXRlZCBhdAorCSAqIHRoZSBjYXRhbG9nIGxldmVsLgorCSAq LworCWluZGV4SW5mbyA9IEJ1aWxkSW5kZXhJbmZvKGluZGV4UmVsYXRpb24pOworCUFzc2Vy dCghaW5kZXhJbmZvLT5paV9SZWFkeUZvckluc2VydHMpOworCWluZGV4SW5mby0+aWlfQ29u Y3VycmVudCA9IHRydWU7CisJaW5kZXhJbmZvLT5paV9Ccm9rZW5Ib3RDaGFpbiA9IGZhbHNl OworCisJLyogTm93IGJ1aWxkIHRoZSBpbmRleCAqLworCWluZGV4X2J1aWxkKGhlYXBSZWws IGluZGV4UmVsYXRpb24sIGluZGV4SW5mbywgZmFsc2UsIHRydWUpOworCisJLyogQ2xvc2Ug Ym90aCB0aGUgcmVsYXRpb25zLCBidXQga2VlcCB0aGUgbG9ja3MgKi8KKwl0YWJsZV9jbG9z ZShoZWFwUmVsLCBOb0xvY2spOworCWluZGV4X2Nsb3NlKGluZGV4UmVsYXRpb24sIE5vTG9j ayk7CisKKwkvKgorCSAqIFVwZGF0ZSB0aGUgcGdfaW5kZXggcm93IHRvIG1hcmsgdGhlIGlu ZGV4IGFzIHJlYWR5IGZvciBpbnNlcnRzLiBPbmNlIHdlCisJICogY29tbWl0IHRoaXMgdHJh bnNhY3Rpb24sIGFueSBuZXcgdHJhbnNhY3Rpb25zIHRoYXQgb3BlbiB0aGUgdGFibGUgbXVz dAorCSAqIGluc2VydCBuZXcgZW50cmllcyBpbnRvIHRoZSBpbmRleCBmb3IgaW5zZXJ0aW9u cyBhbmQgbm9uLUhPVCB1cGRhdGVzLgorCSAqLworCWluZGV4X3NldF9zdGF0ZV9mbGFncyhp bmRleFJlbGF0aW9uSWQsIElOREVYX0NSRUFURV9TRVRfUkVBRFkpOworfQorCisvKgorICog aW5kZXhfY29uY3VycmVudGx5X3N3YXAKKyAqCisgKiBTd2FwIG5hbWUsIGRlcGVuZGVuY2ll cywgYW5kIGNvbnN0cmFpbnRzIG9mIHRoZSBvbGQgaW5kZXggb3ZlciB0byB0aGUgbmV3Cisg KiBpbmRleCwgd2hpbGUgbWFya2luZyB0aGUgb2xkIGluZGV4IGFzIGludmFsaWQgYW5kIHRo ZSBuZXcgYXMgdmFsaWQuCisgKi8KK3ZvaWQKK2luZGV4X2NvbmN1cnJlbnRseV9zd2FwKE9p ZCBuZXdJbmRleElkLCBPaWQgb2xkSW5kZXhJZCwgY29uc3QgY2hhciAqb2xkTmFtZSkKK3sK KwlSZWxhdGlvbglwZ19jbGFzcywKKwkJCQlwZ19pbmRleCwKKwkJCQlwZ19jb25zdHJhaW50 LAorCQkJCXBnX3RyaWdnZXI7CisJUmVsYXRpb24Jb2xkQ2xhc3NSZWwsCisJCQkJbmV3Q2xh c3NSZWw7CisJSGVhcFR1cGxlCW9sZENsYXNzVHVwbGUsCisJCQkJbmV3Q2xhc3NUdXBsZTsK KwlGb3JtX3BnX2NsYXNzIG9sZENsYXNzRm9ybSwKKwkJCQluZXdDbGFzc0Zvcm07CisJSGVh cFR1cGxlCW9sZEluZGV4VHVwbGUsCisJCQkJbmV3SW5kZXhUdXBsZTsKKwlGb3JtX3BnX2lu ZGV4IG9sZEluZGV4Rm9ybSwKKwkJCQluZXdJbmRleEZvcm07CisJT2lkCQkJaW5kZXhDb25z dHJhaW50T2lkOworCUxpc3QJICAgKmNvbnN0cmFpbnRPaWRzID0gTklMOworCUxpc3RDZWxs ICAgKmxjOworCisJLyoKKwkgKiBUYWtlIGEgbmVjZXNzYXJ5IGxvY2sgb24gdGhlIG9sZCBh bmQgbmV3IGluZGV4IGJlZm9yZSBzd2FwcGluZyB0aGVtLgorCSAqLworCW9sZENsYXNzUmVs ID0gcmVsYXRpb25fb3BlbihvbGRJbmRleElkLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sp OworCW5ld0NsYXNzUmVsID0gcmVsYXRpb25fb3BlbihuZXdJbmRleElkLCBTaGFyZVVwZGF0 ZUV4Y2x1c2l2ZUxvY2spOworCisJLyogTm93IHN3YXAgbmFtZXMgYW5kIGRlcGVuZGVuY2ll cyBvZiB0aG9zZSBpbmRleGVzICovCisJcGdfY2xhc3MgPSB0YWJsZV9vcGVuKFJlbGF0aW9u UmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlvbGRDbGFzc1R1cGxlID0gU2Vh cmNoU3lzQ2FjaGVDb3B5MShSRUxPSUQsCisJCQkJCQkJCQkJT2JqZWN0SWRHZXREYXR1bShv bGRJbmRleElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9sZENsYXNzVHVwbGUpKQor CQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQgdHVwbGUgZm9yIHJlbGF0aW9uICV1Iiwg b2xkSW5kZXhJZCk7CisJbmV3Q2xhc3NUdXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEoUkVM T0lELAorCQkJCQkJCQkJCU9iamVjdElkR2V0RGF0dW0obmV3SW5kZXhJZCkpOworCWlmICgh SGVhcFR1cGxlSXNWYWxpZChuZXdDbGFzc1R1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNvdWxk IG5vdCBmaW5kIHR1cGxlIGZvciByZWxhdGlvbiAldSIsIG5ld0luZGV4SWQpOworCisJb2xk Q2xhc3NGb3JtID0gKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVChvbGRDbGFzc1R1cGxlKTsK KwluZXdDbGFzc0Zvcm0gPSAoRm9ybV9wZ19jbGFzcykgR0VUU1RSVUNUKG5ld0NsYXNzVHVw bGUpOworCisJLyogU3dhcCB0aGUgbmFtZXMgKi8KKwluYW1lc3RyY3B5KCZuZXdDbGFzc0Zv cm0tPnJlbG5hbWUsIE5hbWVTdHIob2xkQ2xhc3NGb3JtLT5yZWxuYW1lKSk7CisJbmFtZXN0 cmNweSgmb2xkQ2xhc3NGb3JtLT5yZWxuYW1lLCBvbGROYW1lKTsKKworCUNhdGFsb2dUdXBs ZVVwZGF0ZShwZ19jbGFzcywgJm9sZENsYXNzVHVwbGUtPnRfc2VsZiwgb2xkQ2xhc3NUdXBs ZSk7CisJQ2F0YWxvZ1R1cGxlVXBkYXRlKHBnX2NsYXNzLCAmbmV3Q2xhc3NUdXBsZS0+dF9z ZWxmLCBuZXdDbGFzc1R1cGxlKTsKKworCWhlYXBfZnJlZXR1cGxlKG9sZENsYXNzVHVwbGUp OworCWhlYXBfZnJlZXR1cGxlKG5ld0NsYXNzVHVwbGUpOworCisJLyogTm93IHN3YXAgaW5k ZXggaW5mbyAqLworCXBnX2luZGV4ID0gdGFibGVfb3BlbihJbmRleFJlbGF0aW9uSWQsIFJv d0V4Y2x1c2l2ZUxvY2spOworCisJb2xkSW5kZXhUdXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29w eTEoSU5ERVhSRUxJRCwKKwkJCQkJCQkJCQlPYmplY3RJZEdldERhdHVtKG9sZEluZGV4SWQp KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob2xkSW5kZXhUdXBsZSkpCisJCWVsb2coRVJS T1IsICJjb3VsZCBub3QgZmluZCB0dXBsZSBmb3IgcmVsYXRpb24gJXUiLCBvbGRJbmRleElk KTsKKwluZXdJbmRleFR1cGxlID0gU2VhcmNoU3lzQ2FjaGVDb3B5MShJTkRFWFJFTElELAor CQkJCQkJCQkJCU9iamVjdElkR2V0RGF0dW0obmV3SW5kZXhJZCkpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZChuZXdJbmRleFR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBm aW5kIHR1cGxlIGZvciByZWxhdGlvbiAldSIsIG5ld0luZGV4SWQpOworCisJb2xkSW5kZXhG b3JtID0gKEZvcm1fcGdfaW5kZXgpIEdFVFNUUlVDVChvbGRJbmRleFR1cGxlKTsKKwluZXdJ bmRleEZvcm0gPSAoRm9ybV9wZ19pbmRleCkgR0VUU1RSVUNUKG5ld0luZGV4VHVwbGUpOwor CisJLyoKKwkgKiBDb3B5IGNvbnN0cmFpbnQgZmxhZ3MgZnJvbSB0aGUgb2xkIGluZGV4LiBU aGlzIGlzIHNhZmUgYmVjYXVzZSB0aGUgb2xkCisJICogaW5kZXggZ3VhcmFudGVlZCB1bmlx dWVuZXNzLgorCSAqLworCW5ld0luZGV4Rm9ybS0+aW5kaXNwcmltYXJ5ID0gb2xkSW5kZXhG b3JtLT5pbmRpc3ByaW1hcnk7CisJb2xkSW5kZXhGb3JtLT5pbmRpc3ByaW1hcnkgPSBmYWxz ZTsKKwluZXdJbmRleEZvcm0tPmluZGlzZXhjbHVzaW9uID0gb2xkSW5kZXhGb3JtLT5pbmRp c2V4Y2x1c2lvbjsKKwlvbGRJbmRleEZvcm0tPmluZGlzZXhjbHVzaW9uID0gZmFsc2U7CisJ bmV3SW5kZXhGb3JtLT5pbmRpbW1lZGlhdGUgPSBvbGRJbmRleEZvcm0tPmluZGltbWVkaWF0 ZTsKKwlvbGRJbmRleEZvcm0tPmluZGltbWVkaWF0ZSA9IHRydWU7CisKKwkvKiBNYXJrIG9s ZCBpbmRleCBhcyB2YWxpZCBhbmQgbmV3IGFzIGludmFsaWQgYXMgaW5kZXhfc2V0X3N0YXRl X2ZsYWdzICovCisJbmV3SW5kZXhGb3JtLT5pbmRpc3ZhbGlkID0gdHJ1ZTsKKwlvbGRJbmRl eEZvcm0tPmluZGlzdmFsaWQgPSBmYWxzZTsKKwlvbGRJbmRleEZvcm0tPmluZGlzY2x1c3Rl cmVkID0gZmFsc2U7CisKKwlDYXRhbG9nVHVwbGVVcGRhdGUocGdfaW5kZXgsICZvbGRJbmRl eFR1cGxlLT50X3NlbGYsIG9sZEluZGV4VHVwbGUpOworCUNhdGFsb2dUdXBsZVVwZGF0ZShw Z19pbmRleCwgJm5ld0luZGV4VHVwbGUtPnRfc2VsZiwgbmV3SW5kZXhUdXBsZSk7CisKKwlo ZWFwX2ZyZWV0dXBsZShvbGRJbmRleFR1cGxlKTsKKwloZWFwX2ZyZWV0dXBsZShuZXdJbmRl eFR1cGxlKTsKKworCS8qCisJICogTW92ZSBjb25zdHJhaW50cyBhbmQgdHJpZ2dlcnMgb3Zl ciB0byB0aGUgbmV3IGluZGV4CisJICovCisKKwljb25zdHJhaW50T2lkcyA9IGdldF9pbmRl eF9yZWZfY29uc3RyYWludHMob2xkSW5kZXhJZCk7CisKKwlpbmRleENvbnN0cmFpbnRPaWQg PSBnZXRfaW5kZXhfY29uc3RyYWludChvbGRJbmRleElkKTsKKworCWlmIChPaWRJc1ZhbGlk KGluZGV4Q29uc3RyYWludE9pZCkpCisJCWNvbnN0cmFpbnRPaWRzID0gbGFwcGVuZF9vaWQo Y29uc3RyYWludE9pZHMsIGluZGV4Q29uc3RyYWludE9pZCk7CisKKwlwZ19jb25zdHJhaW50 ID0gdGFibGVfb3BlbihDb25zdHJhaW50UmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7 CisJcGdfdHJpZ2dlciA9IHRhYmxlX29wZW4oVHJpZ2dlclJlbGF0aW9uSWQsIFJvd0V4Y2x1 c2l2ZUxvY2spOworCisJZm9yZWFjaChsYywgY29uc3RyYWludE9pZHMpCisJeworCQlIZWFw VHVwbGUJY29uc3RyYWludFR1cGxlLAorCQkJCQl0cmlnZ2VyVHVwbGU7CisJCUZvcm1fcGdf Y29uc3RyYWludCBjb25Gb3JtOworCQlTY2FuS2V5RGF0YSBrZXlbMV07CisJCVN5c1NjYW5E ZXNjIHNjYW47CisJCU9pZAkJCWNvbnN0cmFpbnRPaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwor CQkvKiBNb3ZlIHRoZSBjb25zdHJhaW50IGZyb20gdGhlIG9sZCB0byB0aGUgbmV3IGluZGV4 ICovCisJCWNvbnN0cmFpbnRUdXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEoQ09OU1RST0lE LAorCQkJCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oY29uc3RyYWludE9pZCkpOworCQlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQoY29uc3RyYWludFR1cGxlKSkKKwkJCWVsb2coRVJST1Is ICJjb3VsZCBub3QgZmluZCB0dXBsZSBmb3IgY29uc3RyYWludCAldSIsIGNvbnN0cmFpbnRP aWQpOworCisJCWNvbkZvcm0gPSAoKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKGNv bnN0cmFpbnRUdXBsZSkpOworCisJCWlmIChjb25Gb3JtLT5jb25pbmRpZCA9PSBvbGRJbmRl eElkKQorCQl7CisJCQljb25Gb3JtLT5jb25pbmRpZCA9IG5ld0luZGV4SWQ7CisKKwkJCUNh dGFsb2dUdXBsZVVwZGF0ZShwZ19jb25zdHJhaW50LCAmY29uc3RyYWludFR1cGxlLT50X3Nl bGYsIGNvbnN0cmFpbnRUdXBsZSk7CisJCX0KKworCQloZWFwX2ZyZWV0dXBsZShjb25zdHJh aW50VHVwbGUpOworCisJCS8qIFNlYXJjaCBmb3IgdHJpZ2dlciByZWNvcmRzICovCisJCVNj YW5LZXlJbml0KCZrZXlbMF0sCisJCQkJCUFudW1fcGdfdHJpZ2dlcl90Z2NvbnN0cmFpbnQs CisJCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRH ZXREYXR1bShjb25zdHJhaW50T2lkKSk7CisKKwkJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nh bihwZ190cmlnZ2VyLCBUcmlnZ2VyQ29uc3RyYWludEluZGV4SWQsIHRydWUsCisJCQkJCQkJ CSAgTlVMTCwgMSwga2V5KTsKKworCQl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCgodHJpZ2dl clR1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpKQorCQl7CisJCQlGb3JtX3BnX3Ry aWdnZXIgdGdGb3JtID0gKEZvcm1fcGdfdHJpZ2dlcikgR0VUU1RSVUNUKHRyaWdnZXJUdXBs ZSk7CisKKwkJCWlmICh0Z0Zvcm0tPnRnY29uc3RyaW5kaWQgIT0gb2xkSW5kZXhJZCkKKwkJ CQljb250aW51ZTsKKworCQkJLyogTWFrZSBhIG1vZGlmaWFibGUgY29weSAqLworCQkJdHJp Z2dlclR1cGxlID0gaGVhcF9jb3B5dHVwbGUodHJpZ2dlclR1cGxlKTsKKwkJCXRnRm9ybSA9 IChGb3JtX3BnX3RyaWdnZXIpIEdFVFNUUlVDVCh0cmlnZ2VyVHVwbGUpOworCisJCQl0Z0Zv cm0tPnRnY29uc3RyaW5kaWQgPSBuZXdJbmRleElkOworCisJCQlDYXRhbG9nVHVwbGVVcGRh dGUocGdfdHJpZ2dlciwgJnRyaWdnZXJUdXBsZS0+dF9zZWxmLCB0cmlnZ2VyVHVwbGUpOwor CisJCQloZWFwX2ZyZWV0dXBsZSh0cmlnZ2VyVHVwbGUpOworCQl9CisKKwkJc3lzdGFibGVf ZW5kc2NhbihzY2FuKTsKKwl9CisKKwkvKgorCSAqIE1vdmUgY29tbWVudCBpZiBhbnkKKwkg Ki8KKwl7CisJCVJlbGF0aW9uCWRlc2NyaXB0aW9uOworCQlTY2FuS2V5RGF0YSBza2V5WzNd OworCQlTeXNTY2FuRGVzYyBzZDsKKwkJSGVhcFR1cGxlCXR1cGxlOworCQlEYXR1bQkJdmFs dWVzW05hdHRzX3BnX2Rlc2NyaXB0aW9uXSA9IHswfTsKKwkJYm9vbAkJbnVsbHNbTmF0dHNf cGdfZGVzY3JpcHRpb25dID0gezB9OworCQlib29sCQlyZXBsYWNlc1tOYXR0c19wZ19kZXNj cmlwdGlvbl0gPSB7MH07CisKKwkJdmFsdWVzW0FudW1fcGdfZGVzY3JpcHRpb25fb2Jqb2lk IC0gMV0gPSBPYmplY3RJZEdldERhdHVtKG5ld0luZGV4SWQpOworCQlyZXBsYWNlc1tBbnVt X3BnX2Rlc2NyaXB0aW9uX29iam9pZCAtIDFdID0gdHJ1ZTsKKworCQlTY2FuS2V5SW5pdCgm c2tleVswXSwKKwkJCQkJQW51bV9wZ19kZXNjcmlwdGlvbl9vYmpvaWQsCisJCQkJCUJURXF1 YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShvbGRJ bmRleElkKSk7CisJCVNjYW5LZXlJbml0KCZza2V5WzFdLAorCQkJCQlBbnVtX3BnX2Rlc2Ny aXB0aW9uX2NsYXNzb2lkLAorCQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEs CisJCQkJCU9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25SZWxhdGlvbklkKSk7CisJCVNjYW5L ZXlJbml0KCZza2V5WzJdLAorCQkJCQlBbnVtX3BnX2Rlc2NyaXB0aW9uX29ianN1YmlkLAor CQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfSU5UNEVRLAorCQkJCQlJbnQzMkdldERh dHVtKDApKTsKKworCQlkZXNjcmlwdGlvbiA9IHRhYmxlX29wZW4oRGVzY3JpcHRpb25SZWxh dGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCQlzZCA9IHN5c3RhYmxlX2JlZ2luc2Nh bihkZXNjcmlwdGlvbiwgRGVzY3JpcHRpb25PYmpJbmRleElkLCB0cnVlLAorCQkJCQkJCQlO VUxMLCAzLCBza2V5KTsKKworCQl3aGlsZSAoKHR1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChz ZCkpICE9IE5VTEwpCisJCXsKKwkJCXR1cGxlID0gaGVhcF9tb2RpZnlfdHVwbGUodHVwbGUs IFJlbGF0aW9uR2V0RGVzY3IoZGVzY3JpcHRpb24pLAorCQkJCQkJCQkJICB2YWx1ZXMsIG51 bGxzLCByZXBsYWNlcyk7CisJCQlDYXRhbG9nVHVwbGVVcGRhdGUoZGVzY3JpcHRpb24sICZ0 dXBsZS0+dF9zZWxmLCB0dXBsZSk7CisKKwkJCWJyZWFrOwkJCQkJLyogQXNzdW1lIHRoZXJl IGNhbiBiZSBvbmx5IG9uZSBtYXRjaCAqLworCQl9CisKKwkJc3lzdGFibGVfZW5kc2Nhbihz ZCk7CisJCXRhYmxlX2Nsb3NlKGRlc2NyaXB0aW9uLCBOb0xvY2spOworCX0KKworCS8qCisJ ICogTW92ZSBhbGwgZGVwZW5kZW5jaWVzIG9uIHRoZSBvbGQgaW5kZXggdG8gdGhlIG5ldyBv bmUKKwkgKi8KKworCWlmIChPaWRJc1ZhbGlkKGluZGV4Q29uc3RyYWludE9pZCkpCisJewor CQlPYmplY3RBZGRyZXNzIG15c2VsZiwKKwkJCQkJcmVmZXJlbmNlZDsKKworCQkvKiBDaGFu Z2UgdG8gaGF2aW5nIHRoZSBuZXcgaW5kZXggZGVwZW5kIG9uIHRoZSBjb25zdHJhaW50ICov CisJCWRlbGV0ZURlcGVuZGVuY3lSZWNvcmRzRm9yQ2xhc3MoUmVsYXRpb25SZWxhdGlvbklk LCBvbGRJbmRleElkLAorCQkJCQkJCQkJCUNvbnN0cmFpbnRSZWxhdGlvbklkLCBERVBFTkRF TkNZX0lOVEVSTkFMKTsKKworCQlteXNlbGYuY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25J ZDsKKwkJbXlzZWxmLm9iamVjdElkID0gbmV3SW5kZXhJZDsKKwkJbXlzZWxmLm9iamVjdFN1 YklkID0gMDsKKworCQlyZWZlcmVuY2VkLmNsYXNzSWQgPSBDb25zdHJhaW50UmVsYXRpb25J ZDsKKwkJcmVmZXJlbmNlZC5vYmplY3RJZCA9IGluZGV4Q29uc3RyYWludE9pZDsKKwkJcmVm ZXJlbmNlZC5vYmplY3RTdWJJZCA9IDA7CisKKwkJcmVjb3JkRGVwZW5kZW5jeU9uKCZteXNl bGYsICZyZWZlcmVuY2VkLCBERVBFTkRFTkNZX0lOVEVSTkFMKTsKKwl9CisKKwljaGFuZ2VE ZXBlbmRlbmNpZXNPbihSZWxhdGlvblJlbGF0aW9uSWQsIG9sZEluZGV4SWQsIG5ld0luZGV4 SWQpOworCisJLyoKKwkgKiBDb3B5IG92ZXIgc3RhdGlzdGljcyBmcm9tIG9sZCB0byBuZXcg aW5kZXgKKwkgKi8KKwl7CisJCVBnU3RhdF9TdGF0VGFiRW50cnkgKnRhYmVudHJ5OworCisJ CXRhYmVudHJ5ID0gcGdzdGF0X2ZldGNoX3N0YXRfdGFiZW50cnkob2xkSW5kZXhJZCk7CisJ CWlmICh0YWJlbnRyeSkKKwkJeworCQkJaWYgKG5ld0NsYXNzUmVsLT5wZ3N0YXRfaW5mbykK KwkJCXsKKwkJCQluZXdDbGFzc1JlbC0+cGdzdGF0X2luZm8tPnRfY291bnRzLnRfbnVtc2Nh bnMgPSB0YWJlbnRyeS0+bnVtc2NhbnM7CisJCQkJbmV3Q2xhc3NSZWwtPnBnc3RhdF9pbmZv LT50X2NvdW50cy50X3R1cGxlc19yZXR1cm5lZCA9IHRhYmVudHJ5LT50dXBsZXNfcmV0dXJu ZWQ7CisJCQkJbmV3Q2xhc3NSZWwtPnBnc3RhdF9pbmZvLT50X2NvdW50cy50X3R1cGxlc19m ZXRjaGVkID0gdGFiZW50cnktPnR1cGxlc19mZXRjaGVkOworCQkJCW5ld0NsYXNzUmVsLT5w Z3N0YXRfaW5mby0+dF9jb3VudHMudF9ibG9ja3NfZmV0Y2hlZCA9IHRhYmVudHJ5LT5ibG9j a3NfZmV0Y2hlZDsKKwkJCQluZXdDbGFzc1JlbC0+cGdzdGF0X2luZm8tPnRfY291bnRzLnRf YmxvY2tzX2hpdCA9IHRhYmVudHJ5LT5ibG9ja3NfaGl0OworCQkJCS8qIFRoZSBkYXRhIHdp bGwgYmUgc2VudCBieSB0aGUgbmV4dCBwZ3N0YXRfcmVwb3J0X3N0YXQoKSBjYWxsLiAqLwor CQkJfQorCQl9CisJfQorCisJLyogQ2xvc2UgcmVsYXRpb25zICovCisJdGFibGVfY2xvc2Uo cGdfY2xhc3MsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXRhYmxlX2Nsb3NlKHBnX2luZGV4LCBS b3dFeGNsdXNpdmVMb2NrKTsKKwl0YWJsZV9jbG9zZShwZ19jb25zdHJhaW50LCBSb3dFeGNs dXNpdmVMb2NrKTsKKwl0YWJsZV9jbG9zZShwZ190cmlnZ2VyLCBSb3dFeGNsdXNpdmVMb2Nr KTsKKworCS8qIFRoZSBsb2NrIHRha2VuIHByZXZpb3VzbHkgaXMgbm90IHJlbGVhc2VkIHVu dGlsIHRoZSBlbmQgb2YgdHJhbnNhY3Rpb24gKi8KKwlyZWxhdGlvbl9jbG9zZShvbGRDbGFz c1JlbCwgTm9Mb2NrKTsKKwlyZWxhdGlvbl9jbG9zZShuZXdDbGFzc1JlbCwgTm9Mb2NrKTsK K30KKworLyoKKyAqIGluZGV4X2NvbmN1cnJlbnRseV9zZXRfZGVhZAorICoKKyAqIFBlcmZv cm0gdGhlIGxhc3QgaW52YWxpZGF0aW9uIHN0YWdlIG9mIERST1AgSU5ERVggQ09OQ1VSUkVO VExZIG9yIFJFSU5ERVgKKyAqIENPTkNVUlJFTlRMWSBiZWZvcmUgYWN0dWFsbHkgZHJvcHBp bmcgdGhlIGluZGV4LiAgQWZ0ZXIgY2FsbGluZyB0aGlzCisgKiBmdW5jdGlvbiwgdGhlIGlu ZGV4IGlzIHNlZW4gYnkgYWxsIHRoZSBiYWNrZW5kcyBhcyBkZWFkLiAgTG93LWxldmVsIGxv Y2tzCisgKiB0YWtlbiBoZXJlIGFyZSBrZXB0IHVudGlsIHRoZSBlbmQgb2YgdGhlIHRyYW5z YWN0aW9uIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqLwordm9pZAoraW5kZXhfY29uY3Vy cmVudGx5X3NldF9kZWFkKE9pZCBoZWFwSWQsIE9pZCBpbmRleElkKQoreworCVJlbGF0aW9u CXVzZXJIZWFwUmVsYXRpb247CisJUmVsYXRpb24JdXNlckluZGV4UmVsYXRpb247CisKKwkv KgorCSAqIE5vIG1vcmUgcHJlZGljYXRlIGxvY2tzIHdpbGwgYmUgYWNxdWlyZWQgb24gdGhp cyBpbmRleCwgYW5kIHdlJ3JlCisJICogYWJvdXQgdG8gc3RvcCBkb2luZyBpbnNlcnRzIGlu dG8gdGhlIGluZGV4IHdoaWNoIGNvdWxkIHNob3cKKwkgKiBjb25mbGljdHMgd2l0aCBleGlz dGluZyBwcmVkaWNhdGUgbG9ja3MsIHNvIG5vdyBpcyB0aGUgdGltZSB0byBtb3ZlCisJICog dGhlbSB0byB0aGUgaGVhcCByZWxhdGlvbi4KKwkgKi8KKwl1c2VySGVhcFJlbGF0aW9uID0g dGFibGVfb3BlbihoZWFwSWQsIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CisJdXNlcklu ZGV4UmVsYXRpb24gPSBpbmRleF9vcGVuKGluZGV4SWQsIFNoYXJlVXBkYXRlRXhjbHVzaXZl TG9jayk7CisJVHJhbnNmZXJQcmVkaWNhdGVMb2Nrc1RvSGVhcFJlbGF0aW9uKHVzZXJJbmRl eFJlbGF0aW9uKTsKKworCS8qCisJICogTm93IHdlIGFyZSBzdXJlIHRoYXQgbm9ib2R5IHVz ZXMgdGhlIGluZGV4IGZvciBxdWVyaWVzOyB0aGV5IGp1c3QKKwkgKiBtaWdodCBoYXZlIGl0 IG9wZW4gZm9yIHVwZGF0aW5nIGl0LiAgU28gbm93IHdlIGNhbiB1bnNldCBpbmRpc3JlYWR5 CisJICogYW5kIGluZGlzbGl2ZSwgdGhlbiB3YWl0IHRpbGwgbm9ib2R5IGNvdWxkIGJlIHVz aW5nIGl0IGF0IGFsbAorCSAqIGFueW1vcmUuCisJICovCisJaW5kZXhfc2V0X3N0YXRlX2Zs YWdzKGluZGV4SWQsIElOREVYX0RST1BfU0VUX0RFQUQpOworCisJLyoKKwkgKiBJbnZhbGlk YXRlIHRoZSByZWxjYWNoZSBmb3IgdGhlIHRhYmxlLCBzbyB0aGF0IGFmdGVyIHRoaXMgY29t bWl0CisJICogYWxsIHNlc3Npb25zIHdpbGwgcmVmcmVzaCB0aGUgdGFibGUncyBpbmRleCBs aXN0LiAgRm9yZ2V0dGluZyBqdXN0CisJICogdGhlIGluZGV4J3MgcmVsY2FjaGUgZW50cnkg aXMgbm90IGVub3VnaC4KKwkgKi8KKwlDYWNoZUludmFsaWRhdGVSZWxjYWNoZSh1c2VySGVh cFJlbGF0aW9uKTsKKworCS8qCisJICogQ2xvc2UgdGhlIHJlbGF0aW9ucyBhZ2FpbiwgdGhv dWdoIHN0aWxsIGhvbGRpbmcgc2Vzc2lvbiBsb2NrLgorCSAqLworCXRhYmxlX2Nsb3NlKHVz ZXJIZWFwUmVsYXRpb24sIE5vTG9jayk7CisJaW5kZXhfY2xvc2UodXNlckluZGV4UmVsYXRp b24sIE5vTG9jayk7Cit9CisKIC8qCiAgKiBpbmRleF9jb25zdHJhaW50X2NyZWF0ZQogICoK QEAgLTE0NDcsOSArMTkwNSwxNCBAQCBpbmRleF9jb25zdHJhaW50X2NyZWF0ZShSZWxhdGlv biBoZWFwUmVsYXRpb24sCiAgKgogICogTk9URTogdGhpcyByb3V0aW5lIHNob3VsZCBub3cg b25seSBiZSBjYWxsZWQgdGhyb3VnaCBwZXJmb3JtRGVsZXRpb24oKSwKICAqIGVsc2UgYXNz b2NpYXRlZCBkZXBlbmRlbmNpZXMgd29uJ3QgYmUgY2xlYW5lZCB1cC4KKyAqCisgKiBJZiBj b25jdXJyZW50IGlzIHRydWUsIGRvIGEgRFJPUCBJTkRFWCBDT05DVVJSRU5UTFkuICBJZiBj b25jdXJyZW50IGlzCisgKiBmYWxzZSBidXQgY29uY3VycmVudF9sb2NrX21vZGUgaXMgdHJ1 ZSwgdGhlbiBkbyBhIG5vcm1hbCBEUk9QIElOREVYIGJ1dAorICogdGFrZSBhIGxvY2sgZm9y IENPTkNVUlJFTlRMWSBwcm9jZXNzaW5nLiAgVGhhdCBpcyB1c2VkIGFzIHBhcnQgb2YgUkVJ TkRFWAorICogQ09OQ1VSUkVOVExZLgogICovCiB2b2lkCi1pbmRleF9kcm9wKE9pZCBpbmRl eElkLCBib29sIGNvbmN1cnJlbnQpCitpbmRleF9kcm9wKE9pZCBpbmRleElkLCBib29sIGNv bmN1cnJlbnQsIGJvb2wgY29uY3VycmVudF9sb2NrX21vZGUpCiB7CiAJT2lkCQkJaGVhcElk OwogCVJlbGF0aW9uCXVzZXJIZWFwUmVsYXRpb247CkBAIC0xNDgxLDcgKzE5NDQsNyBAQCBp bmRleF9kcm9wKE9pZCBpbmRleElkLCBib29sIGNvbmN1cnJlbnQpCiAJICogdXNpbmcgaXQu KQogCSAqLwogCWhlYXBJZCA9IEluZGV4R2V0UmVsYXRpb24oaW5kZXhJZCwgZmFsc2UpOwot CWxvY2ttb2RlID0gY29uY3VycmVudCA/IFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayA6IEFj Y2Vzc0V4Y2x1c2l2ZUxvY2s7CisJbG9ja21vZGUgPSAoY29uY3VycmVudCB8fCBjb25jdXJy ZW50X2xvY2tfbW9kZSkgPyBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sgOiBBY2Nlc3NFeGNs dXNpdmVMb2NrOwogCXVzZXJIZWFwUmVsYXRpb24gPSB0YWJsZV9vcGVuKGhlYXBJZCwgbG9j a21vZGUpOwogCXVzZXJJbmRleFJlbGF0aW9uID0gaW5kZXhfb3BlbihpbmRleElkLCBsb2Nr bW9kZSk7CiAKQEAgLTE1OTYsMzYgKzIwNTksOCBAQCBpbmRleF9kcm9wKE9pZCBpbmRleElk LCBib29sIGNvbmN1cnJlbnQpCiAJCSAqLwogCQlXYWl0Rm9yTG9ja2VycyhoZWFwbG9ja3Rh ZywgQWNjZXNzRXhjbHVzaXZlTG9jayk7CiAKLQkJLyoKLQkJICogTm8gbW9yZSBwcmVkaWNh dGUgbG9ja3Mgd2lsbCBiZSBhY3F1aXJlZCBvbiB0aGlzIGluZGV4LCBhbmQgd2UncmUKLQkJ ICogYWJvdXQgdG8gc3RvcCBkb2luZyBpbnNlcnRzIGludG8gdGhlIGluZGV4IHdoaWNoIGNv dWxkIHNob3cKLQkJICogY29uZmxpY3RzIHdpdGggZXhpc3RpbmcgcHJlZGljYXRlIGxvY2tz LCBzbyBub3cgaXMgdGhlIHRpbWUgdG8gbW92ZQotCQkgKiB0aGVtIHRvIHRoZSBoZWFwIHJl bGF0aW9uLgotCQkgKi8KLQkJdXNlckhlYXBSZWxhdGlvbiA9IHRhYmxlX29wZW4oaGVhcElk LCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOwotCQl1c2VySW5kZXhSZWxhdGlvbiA9IGlu ZGV4X29wZW4oaW5kZXhJZCwgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsKLQkJVHJhbnNm ZXJQcmVkaWNhdGVMb2Nrc1RvSGVhcFJlbGF0aW9uKHVzZXJJbmRleFJlbGF0aW9uKTsKLQot CQkvKgotCQkgKiBOb3cgd2UgYXJlIHN1cmUgdGhhdCBub2JvZHkgdXNlcyB0aGUgaW5kZXgg Zm9yIHF1ZXJpZXM7IHRoZXkganVzdAotCQkgKiBtaWdodCBoYXZlIGl0IG9wZW4gZm9yIHVw ZGF0aW5nIGl0LiAgU28gbm93IHdlIGNhbiB1bnNldCBpbmRpc3JlYWR5Ci0JCSAqIGFuZCBp bmRpc2xpdmUsIHRoZW4gd2FpdCB0aWxsIG5vYm9keSBjb3VsZCBiZSB1c2luZyBpdCBhdCBh bGwKLQkJICogYW55bW9yZS4KLQkJICovCi0JCWluZGV4X3NldF9zdGF0ZV9mbGFncyhpbmRl eElkLCBJTkRFWF9EUk9QX1NFVF9ERUFEKTsKLQotCQkvKgotCQkgKiBJbnZhbGlkYXRlIHRo ZSByZWxjYWNoZSBmb3IgdGhlIHRhYmxlLCBzbyB0aGF0IGFmdGVyIHRoaXMgY29tbWl0Ci0J CSAqIGFsbCBzZXNzaW9ucyB3aWxsIHJlZnJlc2ggdGhlIHRhYmxlJ3MgaW5kZXggbGlzdC4g IEZvcmdldHRpbmcganVzdAotCQkgKiB0aGUgaW5kZXgncyByZWxjYWNoZSBlbnRyeSBpcyBu b3QgZW5vdWdoLgotCQkgKi8KLQkJQ2FjaGVJbnZhbGlkYXRlUmVsY2FjaGUodXNlckhlYXBS ZWxhdGlvbik7Ci0KLQkJLyoKLQkJICogQ2xvc2UgdGhlIHJlbGF0aW9ucyBhZ2FpbiwgdGhv dWdoIHN0aWxsIGhvbGRpbmcgc2Vzc2lvbiBsb2NrLgotCQkgKi8KLQkJdGFibGVfY2xvc2Uo dXNlckhlYXBSZWxhdGlvbiwgTm9Mb2NrKTsKLQkJaW5kZXhfY2xvc2UodXNlckluZGV4UmVs YXRpb24sIE5vTG9jayk7CisJCS8qIEZpbmlzaCBpbnZhbGlkYXRpb24gb2YgaW5kZXggYW5k IG1hcmsgaXQgYXMgZGVhZCAqLworCQlpbmRleF9jb25jdXJyZW50bHlfc2V0X2RlYWQoaGVh cElkLCBpbmRleElkKTsKIAogCQkvKgogCQkgKiBBZ2FpbiwgY29tbWl0IHRoZSB0cmFuc2Fj dGlvbiB0byBtYWtlIHRoZSBwZ19pbmRleCB1cGRhdGUgdmlzaWJsZQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19kZXBlbmQuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cv cGdfZGVwZW5kLmMKaW5kZXggMjNiMDFmODQxZS4uZDYzYmY1ZTU2ZCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19kZXBlbmQuYworKysgYi9zcmMvYmFja2VuZC9jYXRh bG9nL3BnX2RlcGVuZC5jCkBAIC0zOTUsNiArMzk1LDk0IEBAIGNoYW5nZURlcGVuZGVuY3lG b3IoT2lkIGNsYXNzSWQsIE9pZCBvYmplY3RJZCwKIAlyZXR1cm4gY291bnQ7CiB9CiAKKy8q CisgKiBBZGp1c3QgYWxsIGRlcGVuZGVuY3kgcmVjb3JkcyB0byBwb2ludCB0byBhIGRpZmZl cmVudCBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZQorICoKKyAqIHJlZkNsYXNzSWQvb2xkUmVm T2JqZWN0SWQgc3BlY2lmeSB0aGUgb2xkIHJlZmVyZW5jZWQgb2JqZWN0LgorICogbmV3UmVm T2JqZWN0SWQgaXMgdGhlIG5ldyByZWZlcmVuY2VkIG9iamVjdCAobXVzdCBiZSBvZiBjbGFz cyByZWZDbGFzc0lkKS4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVjb3JkcyB1 cGRhdGVkLgorICovCitsb25nCitjaGFuZ2VEZXBlbmRlbmNpZXNPbihPaWQgcmVmQ2xhc3NJ ZCwgT2lkIG9sZFJlZk9iamVjdElkLAorCQkJCQkgT2lkIG5ld1JlZk9iamVjdElkKQorewor CWxvbmcJCWNvdW50ID0gMDsKKwlSZWxhdGlvbglkZXBSZWw7CisJU2NhbktleURhdGEga2V5 WzJdOworCVN5c1NjYW5EZXNjIHNjYW47CisJSGVhcFR1cGxlCXR1cDsKKwlPYmplY3RBZGRy ZXNzIG9iakFkZHI7CisJYm9vbAkJbmV3SXNQaW5uZWQ7CisKKwlkZXBSZWwgPSB0YWJsZV9v cGVuKERlcGVuZFJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJLyoKKwkgKiBJ ZiBvbGRSZWZPYmplY3RJZCBpcyBwaW5uZWQsIHRoZXJlIHdvbid0IGJlIGFueSBkZXBlbmRl bmN5IGVudHJpZXMgb24KKwkgKiBpdCAtLS0gd2UgY2FuJ3QgY29wZSBpbiB0aGF0IGNhc2Uu ICAoVGhpcyBpc24ndCByZWFsbHkgd29ydGggZXhwZW5kaW5nCisJICogY29kZSB0byBmaXgs IGluIGN1cnJlbnQgdXNhZ2U7IGl0IGp1c3QgbWVhbnMgeW91IGNhbid0IHJlbmFtZSBzdHVm ZiBvdXQKKwkgKiBvZiBwZ19jYXRhbG9nLCB3aGljaCB3b3VsZCBsaWtlbHkgYmUgYSBiYWQg bW92ZSBhbnl3YXkuKQorCSAqLworCW9iakFkZHIuY2xhc3NJZCA9IHJlZkNsYXNzSWQ7CisJ b2JqQWRkci5vYmplY3RJZCA9IG9sZFJlZk9iamVjdElkOworCW9iakFkZHIub2JqZWN0U3Vi SWQgPSAwOworCisJaWYgKGlzT2JqZWN0UGlubmVkKCZvYmpBZGRyLCBkZXBSZWwpKQorCQll cmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9S VEVEKSwKKwkJCQkgZXJybXNnKCJjYW5ub3QgcmVtb3ZlIGRlcGVuZGVuY3kgb24gJXMgYmVj YXVzZSBpdCBpcyBhIHN5c3RlbSBvYmplY3QiLAorCQkJCQkJZ2V0T2JqZWN0RGVzY3JpcHRp b24oJm9iakFkZHIpKSkpOworCisJLyoKKwkgKiBXZSBjYW4gaGFuZGxlIGFkZGluZyBhIGRl cGVuZGVuY3kgb24gc29tZXRoaW5nIHBpbm5lZCwgdGhvdWdoLCBzaW5jZQorCSAqIHRoYXQg anVzdCBtZWFucyBkZWxldGluZyB0aGUgZGVwZW5kZW5jeSBlbnRyeS4KKwkgKi8KKwlvYmpB ZGRyLm9iamVjdElkID0gbmV3UmVmT2JqZWN0SWQ7CisKKwluZXdJc1Bpbm5lZCA9IGlzT2Jq ZWN0UGlubmVkKCZvYmpBZGRyLCBkZXBSZWwpOworCisJLyogTm93IHNlYXJjaCBmb3IgZGVw ZW5kZW5jeSByZWNvcmRzICovCisJU2NhbktleUluaXQoJmtleVswXSwKKwkJCQlBbnVtX3Bn X2RlcGVuZF9yZWZjbGFzc2lkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURF USwKKwkJCQlPYmplY3RJZEdldERhdHVtKHJlZkNsYXNzSWQpKTsKKwlTY2FuS2V5SW5pdCgm a2V5WzFdLAorCQkJCUFudW1fcGdfZGVwZW5kX3JlZm9iamlkLAorCQkJCUJURXF1YWxTdHJh dGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKG9sZFJlZk9iamVj dElkKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGRlcFJlbCwgRGVwZW5kUmVm ZXJlbmNlSW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDIsIGtleSk7CisKKwl3aGls ZSAoSGVhcFR1cGxlSXNWYWxpZCgodHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpKQor CXsKKwkJRm9ybV9wZ19kZXBlbmQgZGVwZm9ybSA9IChGb3JtX3BnX2RlcGVuZCkgR0VUU1RS VUNUKHR1cCk7CisKKwkJaWYgKG5ld0lzUGlubmVkKQorCQkJQ2F0YWxvZ1R1cGxlRGVsZXRl KGRlcFJlbCwgJnR1cC0+dF9zZWxmKTsKKwkJZWxzZQorCQl7CisJCQkvKiBtYWtlIGEgbW9k aWZpYWJsZSBjb3B5ICovCisJCQl0dXAgPSBoZWFwX2NvcHl0dXBsZSh0dXApOworCQkJZGVw Zm9ybSA9IChGb3JtX3BnX2RlcGVuZCkgR0VUU1RSVUNUKHR1cCk7CisKKwkJCWRlcGZvcm0t PnJlZm9iamlkID0gbmV3UmVmT2JqZWN0SWQ7CisKKwkJCUNhdGFsb2dUdXBsZVVwZGF0ZShk ZXBSZWwsICZ0dXAtPnRfc2VsZiwgdHVwKTsKKworCQkJaGVhcF9mcmVldHVwbGUodHVwKTsK KwkJfQorCisJCWNvdW50Kys7CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwor CXRhYmxlX2Nsb3NlKGRlcFJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gY291 bnQ7Cit9CisKIC8qCiAgKiBpc09iamVjdFBpbm5lZCgpCiAgKgpAQCAtNzU0LDMgKzg0Miw1 OCBAQCBnZXRfaW5kZXhfY29uc3RyYWludChPaWQgaW5kZXhJZCkKIAogCXJldHVybiBjb25z dHJhaW50SWQ7CiB9CisKKy8qCisgKiBnZXRfaW5kZXhfcmVmX2NvbnN0cmFpbnRzCisgKgkJ R2l2ZW4gdGhlIE9JRCBvZiBhbiBpbmRleCwgcmV0dXJuIHRoZSBPSUQgb2YgYWxsIGZvcmVp Z24ga2V5CisgKgkJY29uc3RyYWludHMgd2hpY2ggcmVmZXJlbmNlIHRoZSBpbmRleC4KKyAq LworTGlzdCAqCitnZXRfaW5kZXhfcmVmX2NvbnN0cmFpbnRzKE9pZCBpbmRleElkKQorewor CUxpc3QJICAgKnJlc3VsdCA9IE5JTDsKKwlSZWxhdGlvbglkZXBSZWw7CisJU2NhbktleURh dGEga2V5WzNdOworCVN5c1NjYW5EZXNjIHNjYW47CisJSGVhcFR1cGxlCXR1cDsKKworCS8q IFNlYXJjaCB0aGUgZGVwZW5kZW5jeSB0YWJsZSBmb3IgdGhlIGluZGV4ICovCisJZGVwUmVs ID0gdGFibGVfb3BlbihEZXBlbmRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJ U2NhbktleUluaXQoJmtleVswXSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9yZWZjbGFzc2lkLAor CQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERh dHVtKFJlbGF0aW9uUmVsYXRpb25JZCkpOworCVNjYW5LZXlJbml0KCZrZXlbMV0sCisJCQkJ QW51bV9wZ19kZXBlbmRfcmVmb2JqaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBG X09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0oaW5kZXhJZCkpOworCVNjYW5LZXlJbml0 KCZrZXlbMl0sCisJCQkJQW51bV9wZ19kZXBlbmRfcmVmb2Jqc3ViaWQsCisJCQkJQlRFcXVh bFN0cmF0ZWd5TnVtYmVyLCBGX0lOVDRFUSwKKwkJCQlJbnQzMkdldERhdHVtKDApKTsKKwor CXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oZGVwUmVsLCBEZXBlbmRSZWZlcmVuY2VJbmRl eElkLCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMywga2V5KTsKKworCXdoaWxlIChIZWFwVHVw bGVJc1ZhbGlkKHR1cCA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJRm9ybV9w Z19kZXBlbmQgZGVwcmVjID0gKEZvcm1fcGdfZGVwZW5kKSBHRVRTVFJVQ1QodHVwKTsKKwor CQkvKgorCQkgKiBXZSBhc3N1bWUgYW55IG5vcm1hbCBkZXBlbmRlbmN5IGZyb20gYSBjb25z dHJhaW50IG11c3QgYmUgd2hhdCB3ZQorCQkgKiBhcmUgbG9va2luZyBmb3IuCisJCSAqLwor CQlpZiAoZGVwcmVjLT5jbGFzc2lkID09IENvbnN0cmFpbnRSZWxhdGlvbklkICYmCisJCQlk ZXByZWMtPm9ianN1YmlkID09IDAgJiYKKwkJCWRlcHJlYy0+ZGVwdHlwZSA9PSBERVBFTkRF TkNZX05PUk1BTCkKKwkJeworCQkJcmVzdWx0ID0gbGFwcGVuZF9vaWQocmVzdWx0LCBkZXBy ZWMtPm9iamlkKTsKKwkJfQorCX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFi bGVfY2xvc2UoZGVwUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJlc3VsdDsK K30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKaW5kZXggYzNhNTNkODFhYS4uNjJjNDU3 YThhNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKQEAgLTU4LDYgKzU4LDcgQEAK ICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGls cy5oIgogI2luY2x1ZGUgInV0aWxzL3BhcnRjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL3Bn X3J1c2FnZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlZ3Byb2MuaCIKICNpbmNsdWRlICJ1dGls cy9zbmFwbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKQEAgLTgzLDYgKzg0 LDcgQEAgc3RhdGljIGNoYXIgKkNob29zZUluZGV4TmFtZUFkZGl0aW9uKExpc3QgKmNvbG5h bWVzKTsKIHN0YXRpYyBMaXN0ICpDaG9vc2VJbmRleENvbHVtbk5hbWVzKExpc3QgKmluZGV4 RWxlbXMpOwogc3RhdGljIHZvaWQgUmFuZ2VWYXJDYWxsYmFja0ZvclJlaW5kZXhJbmRleChj b25zdCBSYW5nZVZhciAqcmVsYXRpb24sCiAJCQkJCQkJCU9pZCByZWxJZCwgT2lkIG9sZFJl bElkLCB2b2lkICphcmcpOworc3RhdGljIGJvb2wgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVu dGx5KE9pZCByZWxhdGlvbk9pZCwgaW50IG9wdGlvbnMpOwogc3RhdGljIHZvaWQgUmVpbmRl eFBhcnRpdGlvbmVkSW5kZXgoUmVsYXRpb24gcGFyZW50SWR4KTsKIAogLyoKQEAgLTI5Nyw2 ICsyOTksOTAgQEAgQ2hlY2tJbmRleENvbXBhdGlibGUoT2lkIG9sZElkLAogCXJldHVybiBy ZXQ7CiB9CiAKKworLyoKKyAqIFdhaXRGb3JPbGRlclNuYXBzaG90cworICoKKyAqIFdhaXQg Zm9yIHRyYW5zYWN0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgYW4gb2xkZXIgc25hcHNob3QgdGhh biB0aGUgZ2l2ZW4geG1pbgorICogbGltaXQsIGJlY2F1c2UgaXQgbWlnaHQgbm90IGNvbnRh aW4gdHVwbGVzIGRlbGV0ZWQganVzdCBiZWZvcmUgaXQgaGFzCisgKiBiZWVuIHRha2VuLiBP YnRhaW4gYSBsaXN0IG9mIFZYSURzIG9mIHN1Y2ggdHJhbnNhY3Rpb25zLCBhbmQgd2FpdCBm b3IgdGhlbQorICogaW5kaXZpZHVhbGx5LiBUaGlzIGlzIHVzZWQgd2hlbiBidWlsZGluZyBh biBpbmRleCBjb25jdXJyZW50bHkuCisgKgorICogV2UgY2FuIGV4Y2x1ZGUgYW55IHJ1bm5p bmcgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSB4bWluID4gdGhlIHhtaW4gZ2l2ZW47CisgKiB0 aGVpciBvbGRlc3Qgc25hcHNob3QgbXVzdCBiZSBuZXdlciB0aGFuIG91ciB4bWluIGxpbWl0 LgorICogV2UgY2FuIGFsc28gZXhjbHVkZSBhbnkgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSB4 bWluID0gemVybywgc2luY2UgdGhleQorICogZXZpZGVudGx5IGhhdmUgbm8gbGl2ZSBzbmFw c2hvdCBhdCBhbGwgKGFuZCBhbnkgb25lIHRoZXkgbWlnaHQgYmUgaW4KKyAqIHByb2Nlc3Mg b2YgdGFraW5nIGlzIGNlcnRhaW5seSBuZXdlciB0aGFuIG91cnMpLiAgVHJhbnNhY3Rpb25z IGluIG90aGVyCisgKiBEQnMgY2FuIGJlIGlnbm9yZWQgdG9vLCBzaW5jZSB0aGV5J2xsIG5l dmVyIGV2ZW4gYmUgYWJsZSB0byBzZWUgdGhlCisgKiBpbmRleCBiZWluZyB3b3JrZWQgb24u CisgKgorICogV2UgY2FuIGFsc28gZXhjbHVkZSBhdXRvdmFjdXVtIHByb2Nlc3NlcyBhbmQg cHJvY2Vzc2VzIHJ1bm5pbmcgbWFudWFsCisgKiBsYXp5IFZBQ1VVTXMsIGJlY2F1c2UgdGhl eSB3b24ndCBiZSBmYXplZCBieSBtaXNzaW5nIGluZGV4IGVudHJpZXMKKyAqIGVpdGhlci4g IChNYW51YWwgQU5BTFlaRXMsIGhvd2V2ZXIsIGNhbid0IGJlIGV4Y2x1ZGVkIGJlY2F1c2Ug dGhleQorICogbWlnaHQgYmUgd2l0aGluIHRyYW5zYWN0aW9ucyB0aGF0IGFyZSBnb2luZyB0 byBkbyBhcmJpdHJhcnkgb3BlcmF0aW9ucworICogbGF0ZXIuKQorICoKKyAqIEFsc28sIEdl dEN1cnJlbnRWaXJ0dWFsWElEcyBuZXZlciByZXBvcnRzIG91ciBvd24gdnhpZCwgc28gd2Ug bmVlZCBub3QKKyAqIGNoZWNrIGZvciB0aGF0LgorICoKKyAqIElmIGEgcHJvY2VzcyBnb2Vz IGlkbGUtaW4tdHJhbnNhY3Rpb24gd2l0aCB4bWluIHplcm8sIHdlIGRvIG5vdCBuZWVkIHRv CisgKiB3YWl0IGZvciBpdCBhbnltb3JlLCBwZXIgdGhlIGFib3ZlIGFyZ3VtZW50LiAgV2Ug ZG8gbm90IGhhdmUgdGhlCisgKiBpbmZyYXN0cnVjdHVyZSByaWdodCBub3cgdG8gc3RvcCB3 YWl0aW5nIGlmIHRoYXQgaGFwcGVucywgYnV0IHdlIGNhbiBhdAorICogbGVhc3QgYXZvaWQg dGhlIGZvbGx5IG9mIHdhaXRpbmcgd2hlbiBpdCBpcyBpZGxlIGF0IHRoZSB0aW1lIHdlIHdv dWxkCisgKiBiZWdpbiB0byB3YWl0LiAgV2UgZG8gdGhpcyBieSByZXBlYXRlZGx5IHJlY2hl Y2tpbmcgdGhlIG91dHB1dCBvZgorICogR2V0Q3VycmVudFZpcnR1YWxYSURzLiAgSWYsIGR1 cmluZyBhbnkgaXRlcmF0aW9uLCBhIHBhcnRpY3VsYXIgdnhpZAorICogZG9lc24ndCBzaG93 IHVwIGluIHRoZSBvdXRwdXQsIHdlIGtub3cgd2UgY2FuIGZvcmdldCBhYm91dCBpdC4KKyAq Lworc3RhdGljIHZvaWQKK1dhaXRGb3JPbGRlclNuYXBzaG90cyhUcmFuc2FjdGlvbklkIGxp bWl0WG1pbikKK3sKKwlpbnQJCQluX29sZF9zbmFwc2hvdHM7CisJaW50CQkJaTsKKwlWaXJ0 dWFsVHJhbnNhY3Rpb25JZCAqb2xkX3NuYXBzaG90czsKKworCW9sZF9zbmFwc2hvdHMgPSBH ZXRDdXJyZW50VmlydHVhbFhJRHMobGltaXRYbWluLCB0cnVlLCBmYWxzZSwKKwkJCQkJCQkJ CQkgIFBST0NfSVNfQVVUT1ZBQ1VVTSB8IFBST0NfSU5fVkFDVVVNLAorCQkJCQkJCQkJCSAg Jm5fb2xkX3NuYXBzaG90cyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbl9vbGRfc25hcHNob3Rz OyBpKyspCisJeworCQlpZiAoIVZpcnR1YWxUcmFuc2FjdGlvbklkSXNWYWxpZChvbGRfc25h cHNob3RzW2ldKSkKKwkJCWNvbnRpbnVlOwkJCS8qIGZvdW5kIHVuaW50ZXJlc3RpbmcgaW4g cHJldmlvdXMgY3ljbGUgKi8KKworCQlpZiAoaSA+IDApCisJCXsKKwkJCS8qIHNlZSBpZiBh bnl0aGluZydzIGNoYW5nZWQgLi4uICovCisJCQlWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqbmV3 ZXJfc25hcHNob3RzOworCQkJaW50CQkJbl9uZXdlcl9zbmFwc2hvdHM7CisJCQlpbnQJCQlq OworCQkJaW50CQkJazsKKworCQkJbmV3ZXJfc25hcHNob3RzID0gR2V0Q3VycmVudFZpcnR1 YWxYSURzKGxpbWl0WG1pbiwKKwkJCQkJCQkJCQkJCQl0cnVlLCBmYWxzZSwKKwkJCQkJCQkJ CQkJCQlQUk9DX0lTX0FVVE9WQUNVVU0gfCBQUk9DX0lOX1ZBQ1VVTSwKKwkJCQkJCQkJCQkJ CQkmbl9uZXdlcl9zbmFwc2hvdHMpOworCQkJZm9yIChqID0gaTsgaiA8IG5fb2xkX3NuYXBz aG90czsgaisrKQorCQkJeworCQkJCWlmICghVmlydHVhbFRyYW5zYWN0aW9uSWRJc1ZhbGlk KG9sZF9zbmFwc2hvdHNbal0pKQorCQkJCQljb250aW51ZTsJLyogZm91bmQgdW5pbnRlcmVz dGluZyBpbiBwcmV2aW91cyBjeWNsZSAqLworCQkJCWZvciAoayA9IDA7IGsgPCBuX25ld2Vy X3NuYXBzaG90czsgaysrKQorCQkJCXsKKwkJCQkJaWYgKFZpcnR1YWxUcmFuc2FjdGlvbklk RXF1YWxzKG9sZF9zbmFwc2hvdHNbal0sCisJCQkJCQkJCQkJCQkgICBuZXdlcl9zbmFwc2hv dHNba10pKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChrID49IG5fbmV3ZXJfc25h cHNob3RzKSAvKiBub3QgdGhlcmUgYW55bW9yZSAqLworCQkJCQlTZXRJbnZhbGlkVmlydHVh bFRyYW5zYWN0aW9uSWQob2xkX3NuYXBzaG90c1tqXSk7CisJCQl9CisJCQlwZnJlZShuZXdl cl9zbmFwc2hvdHMpOworCQl9CisKKwkJaWYgKFZpcnR1YWxUcmFuc2FjdGlvbklkSXNWYWxp ZChvbGRfc25hcHNob3RzW2ldKSkKKwkJCVZpcnR1YWxYYWN0TG9jayhvbGRfc25hcHNob3Rz W2ldLCB0cnVlKTsKKwl9Cit9CisKKwogLyoKICAqIERlZmluZUluZGV4CiAgKgkJQ3JlYXRl cyBhIG5ldyBpbmRleC4KQEAgLTM0NSw3ICs0MzEsNiBAQCBEZWZpbmVJbmRleChPaWQgcmVs YXRpb25JZCwKIAlMaXN0CSAgICppbmRleENvbE5hbWVzOwogCUxpc3QJICAgKmFsbEluZGV4 UGFyYW1zOwogCVJlbGF0aW9uCXJlbDsKLQlSZWxhdGlvbglpbmRleFJlbGF0aW9uOwogCUhl YXBUdXBsZQl0dXBsZTsKIAlGb3JtX3BnX2FtCWFjY2Vzc01ldGhvZEZvcm07CiAJSW5kZXhB bVJvdXRpbmUgKmFtUm91dGluZTsKQEAgLTM2MCw5ICs0NDUsNyBAQCBEZWZpbmVJbmRleChP aWQgcmVsYXRpb25JZCwKIAlpbnQJCQludW1iZXJPZkF0dHJpYnV0ZXM7CiAJaW50CQkJbnVt YmVyT2ZLZXlBdHRyaWJ1dGVzOwogCVRyYW5zYWN0aW9uSWQgbGltaXRYbWluOwotCVZpcnR1 YWxUcmFuc2FjdGlvbklkICpvbGRfc25hcHNob3RzOwogCU9iamVjdEFkZHJlc3MgYWRkcmVz czsKLQlpbnQJCQluX29sZF9zbmFwc2hvdHM7CiAJTG9ja1JlbElkCWhlYXByZWxpZDsKIAlM T0NLVEFHCQloZWFwbG9ja3RhZzsKIAlMT0NLTU9ERQlsb2NrbW9kZTsKQEAgLTExNTIsMzQg KzEyMzUsMTEgQEAgRGVmaW5lSW5kZXgoT2lkIHJlbGF0aW9uSWQsCiAJICogSE9ULWNoYWlu IG9yIHRoZSBleHRlbnNpb24gb2YgdGhlIGNoYWluIGlzIEhPVC1zYWZlIGZvciB0aGlzIGlu ZGV4LgogCSAqLwogCi0JLyogT3BlbiBhbmQgbG9jayB0aGUgcGFyZW50IGhlYXAgcmVsYXRp b24gKi8KLQlyZWwgPSB0YWJsZV9vcGVuKHJlbGF0aW9uSWQsIFNoYXJlVXBkYXRlRXhjbHVz aXZlTG9jayk7Ci0KLQkvKiBBbmQgdGhlIHRhcmdldCBpbmRleCByZWxhdGlvbiAqLwotCWlu ZGV4UmVsYXRpb24gPSBpbmRleF9vcGVuKGluZGV4UmVsYXRpb25JZCwgUm93RXhjbHVzaXZl TG9jayk7Ci0KIAkvKiBTZXQgQWN0aXZlU25hcHNob3Qgc2luY2UgZnVuY3Rpb25zIGluIHRo ZSBpbmRleGVzIG1heSBuZWVkIGl0ICovCiAJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5z YWN0aW9uU25hcHNob3QoKSk7CiAKLQkvKiBXZSBoYXZlIHRvIHJlLWJ1aWxkIHRoZSBJbmRl eEluZm8gc3RydWN0LCBzaW5jZSBpdCB3YXMgbG9zdCBpbiBjb21taXQgKi8KLQlpbmRleElu Zm8gPSBCdWlsZEluZGV4SW5mbyhpbmRleFJlbGF0aW9uKTsKLQlBc3NlcnQoIWluZGV4SW5m by0+aWlfUmVhZHlGb3JJbnNlcnRzKTsKLQlpbmRleEluZm8tPmlpX0NvbmN1cnJlbnQgPSB0 cnVlOwotCWluZGV4SW5mby0+aWlfQnJva2VuSG90Q2hhaW4gPSBmYWxzZTsKLQotCS8qIE5v dyBidWlsZCB0aGUgaW5kZXggKi8KLQlpbmRleF9idWlsZChyZWwsIGluZGV4UmVsYXRpb24s IGluZGV4SW5mbywgZmFsc2UsIHRydWUpOwotCi0JLyogQ2xvc2UgYm90aCB0aGUgcmVsYXRp b25zLCBidXQga2VlcCB0aGUgbG9ja3MgKi8KLQl0YWJsZV9jbG9zZShyZWwsIE5vTG9jayk7 Ci0JaW5kZXhfY2xvc2UoaW5kZXhSZWxhdGlvbiwgTm9Mb2NrKTsKLQotCS8qCi0JICogVXBk YXRlIHRoZSBwZ19pbmRleCByb3cgdG8gbWFyayB0aGUgaW5kZXggYXMgcmVhZHkgZm9yIGlu c2VydHMuIE9uY2Ugd2UKLQkgKiBjb21taXQgdGhpcyB0cmFuc2FjdGlvbiwgYW55IG5ldyB0 cmFuc2FjdGlvbnMgdGhhdCBvcGVuIHRoZSB0YWJsZSBtdXN0Ci0JICogaW5zZXJ0IG5ldyBl bnRyaWVzIGludG8gdGhlIGluZGV4IGZvciBpbnNlcnRpb25zIGFuZCBub24tSE9UIHVwZGF0 ZXMuCi0JICovCi0JaW5kZXhfc2V0X3N0YXRlX2ZsYWdzKGluZGV4UmVsYXRpb25JZCwgSU5E RVhfQ1JFQVRFX1NFVF9SRUFEWSk7CisJLyogUGVyZm9ybSBjb25jdXJyZW50IGJ1aWxkIG9m IGluZGV4ICovCisJaW5kZXhfY29uY3VycmVudGx5X2J1aWxkKHJlbGF0aW9uSWQsIGluZGV4 UmVsYXRpb25JZCk7CiAKIAkvKiB3ZSBjYW4gZG8gYXdheSB3aXRoIG91ciBzbmFwc2hvdCAq LwogCVBvcEFjdGl2ZVNuYXBzaG90KCk7CkBAIC0xMjUxLDc0ICsxMzExLDkgQEAgRGVmaW5l SW5kZXgoT2lkIHJlbGF0aW9uSWQsCiAJICogVGhlIGluZGV4IGlzIG5vdyB2YWxpZCBpbiB0 aGUgc2Vuc2UgdGhhdCBpdCBjb250YWlucyBhbGwgY3VycmVudGx5CiAJICogaW50ZXJlc3Rp bmcgdHVwbGVzLiAgQnV0IHNpbmNlIGl0IG1pZ2h0IG5vdCBjb250YWluIHR1cGxlcyBkZWxl dGVkIGp1c3QKIAkgKiBiZWZvcmUgdGhlIHJlZmVyZW5jZSBzbmFwIHdhcyB0YWtlbiwgd2Ug aGF2ZSB0byB3YWl0IG91dCBhbnkKLQkgKiB0cmFuc2FjdGlvbnMgdGhhdCBtaWdodCBoYXZl IG9sZGVyIHNuYXBzaG90cy4gIE9idGFpbiBhIGxpc3Qgb2YgVlhJRHMKLQkgKiBvZiBzdWNo IHRyYW5zYWN0aW9ucywgYW5kIHdhaXQgZm9yIHRoZW0gaW5kaXZpZHVhbGx5LgotCSAqCi0J ICogV2UgY2FuIGV4Y2x1ZGUgYW55IHJ1bm5pbmcgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSB4 bWluID4gdGhlIHhtaW4gb2YKLQkgKiBvdXIgcmVmZXJlbmNlIHNuYXBzaG90OyB0aGVpciBv bGRlc3Qgc25hcHNob3QgbXVzdCBiZSBuZXdlciB0aGFuIG91cnMuCi0JICogV2UgY2FuIGFs c28gZXhjbHVkZSBhbnkgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSB4bWluID0gemVybywgc2lu Y2UgdGhleQotCSAqIGV2aWRlbnRseSBoYXZlIG5vIGxpdmUgc25hcHNob3QgYXQgYWxsIChh bmQgYW55IG9uZSB0aGV5IG1pZ2h0IGJlIGluCi0JICogcHJvY2VzcyBvZiB0YWtpbmcgaXMg Y2VydGFpbmx5IG5ld2VyIHRoYW4gb3VycykuICBUcmFuc2FjdGlvbnMgaW4gb3RoZXIKLQkg KiBEQnMgY2FuIGJlIGlnbm9yZWQgdG9vLCBzaW5jZSB0aGV5J2xsIG5ldmVyIGV2ZW4gYmUg YWJsZSB0byBzZWUgdGhpcwotCSAqIGluZGV4LgotCSAqCi0JICogV2UgY2FuIGFsc28gZXhj bHVkZSBhdXRvdmFjdXVtIHByb2Nlc3NlcyBhbmQgcHJvY2Vzc2VzIHJ1bm5pbmcgbWFudWFs Ci0JICogbGF6eSBWQUNVVU1zLCBiZWNhdXNlIHRoZXkgd29uJ3QgYmUgZmF6ZWQgYnkgbWlz c2luZyBpbmRleCBlbnRyaWVzCi0JICogZWl0aGVyLiAgKE1hbnVhbCBBTkFMWVpFcywgaG93 ZXZlciwgY2FuJ3QgYmUgZXhjbHVkZWQgYmVjYXVzZSB0aGV5Ci0JICogbWlnaHQgYmUgd2l0 aGluIHRyYW5zYWN0aW9ucyB0aGF0IGFyZSBnb2luZyB0byBkbyBhcmJpdHJhcnkgb3BlcmF0 aW9ucwotCSAqIGxhdGVyLikKLQkgKgotCSAqIEFsc28sIEdldEN1cnJlbnRWaXJ0dWFsWElE cyBuZXZlciByZXBvcnRzIG91ciBvd24gdnhpZCwgc28gd2UgbmVlZCBub3QKLQkgKiBjaGVj ayBmb3IgdGhhdC4KLQkgKgotCSAqIElmIGEgcHJvY2VzcyBnb2VzIGlkbGUtaW4tdHJhbnNh Y3Rpb24gd2l0aCB4bWluIHplcm8sIHdlIGRvIG5vdCBuZWVkIHRvCi0JICogd2FpdCBmb3Ig aXQgYW55bW9yZSwgcGVyIHRoZSBhYm92ZSBhcmd1bWVudC4gIFdlIGRvIG5vdCBoYXZlIHRo ZQotCSAqIGluZnJhc3RydWN0dXJlIHJpZ2h0IG5vdyB0byBzdG9wIHdhaXRpbmcgaWYgdGhh dCBoYXBwZW5zLCBidXQgd2UgY2FuIGF0Ci0JICogbGVhc3QgYXZvaWQgdGhlIGZvbGx5IG9m IHdhaXRpbmcgd2hlbiBpdCBpcyBpZGxlIGF0IHRoZSB0aW1lIHdlIHdvdWxkCi0JICogYmVn aW4gdG8gd2FpdC4gIFdlIGRvIHRoaXMgYnkgcmVwZWF0ZWRseSByZWNoZWNraW5nIHRoZSBv dXRwdXQgb2YKLQkgKiBHZXRDdXJyZW50VmlydHVhbFhJRHMuICBJZiwgZHVyaW5nIGFueSBp dGVyYXRpb24sIGEgcGFydGljdWxhciB2eGlkCi0JICogZG9lc24ndCBzaG93IHVwIGluIHRo ZSBvdXRwdXQsIHdlIGtub3cgd2UgY2FuIGZvcmdldCBhYm91dCBpdC4KKwkgKiB0cmFuc2Fj dGlvbnMgdGhhdCBtaWdodCBoYXZlIG9sZGVyIHNuYXBzaG90cy4KIAkgKi8KLQlvbGRfc25h cHNob3RzID0gR2V0Q3VycmVudFZpcnR1YWxYSURzKGxpbWl0WG1pbiwgdHJ1ZSwgZmFsc2Us Ci0JCQkJCQkJCQkJICBQUk9DX0lTX0FVVE9WQUNVVU0gfCBQUk9DX0lOX1ZBQ1VVTSwKLQkJ CQkJCQkJCQkgICZuX29sZF9zbmFwc2hvdHMpOwotCi0JZm9yIChpID0gMDsgaSA8IG5fb2xk X3NuYXBzaG90czsgaSsrKQotCXsKLQkJaWYgKCFWaXJ0dWFsVHJhbnNhY3Rpb25JZElzVmFs aWQob2xkX3NuYXBzaG90c1tpXSkpCi0JCQljb250aW51ZTsJCQkvKiBmb3VuZCB1bmludGVy ZXN0aW5nIGluIHByZXZpb3VzIGN5Y2xlICovCi0KLQkJaWYgKGkgPiAwKQotCQl7Ci0JCQkv KiBzZWUgaWYgYW55dGhpbmcncyBjaGFuZ2VkIC4uLiAqLwotCQkJVmlydHVhbFRyYW5zYWN0 aW9uSWQgKm5ld2VyX3NuYXBzaG90czsKLQkJCWludAkJCW5fbmV3ZXJfc25hcHNob3RzOwot CQkJaW50CQkJajsKLQkJCWludAkJCWs7Ci0KLQkJCW5ld2VyX3NuYXBzaG90cyA9IEdldEN1 cnJlbnRWaXJ0dWFsWElEcyhsaW1pdFhtaW4sCi0JCQkJCQkJCQkJCQkJdHJ1ZSwgZmFsc2Us Ci0JCQkJCQkJCQkJCQkJUFJPQ19JU19BVVRPVkFDVVVNIHwgUFJPQ19JTl9WQUNVVU0sCi0J CQkJCQkJCQkJCQkJJm5fbmV3ZXJfc25hcHNob3RzKTsKLQkJCWZvciAoaiA9IGk7IGogPCBu X29sZF9zbmFwc2hvdHM7IGorKykKLQkJCXsKLQkJCQlpZiAoIVZpcnR1YWxUcmFuc2FjdGlv bklkSXNWYWxpZChvbGRfc25hcHNob3RzW2pdKSkKLQkJCQkJY29udGludWU7CS8qIGZvdW5k IHVuaW50ZXJlc3RpbmcgaW4gcHJldmlvdXMgY3ljbGUgKi8KLQkJCQlmb3IgKGsgPSAwOyBr IDwgbl9uZXdlcl9zbmFwc2hvdHM7IGsrKykKLQkJCQl7Ci0JCQkJCWlmIChWaXJ0dWFsVHJh bnNhY3Rpb25JZEVxdWFscyhvbGRfc25hcHNob3RzW2pdLAotCQkJCQkJCQkJCQkJICAgbmV3 ZXJfc25hcHNob3RzW2tdKSkKLQkJCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlpZiAoayA+PSBu X25ld2VyX3NuYXBzaG90cykgLyogbm90IHRoZXJlIGFueW1vcmUgKi8KLQkJCQkJU2V0SW52 YWxpZFZpcnR1YWxUcmFuc2FjdGlvbklkKG9sZF9zbmFwc2hvdHNbal0pOwotCQkJfQotCQkJ cGZyZWUobmV3ZXJfc25hcHNob3RzKTsKLQkJfQotCi0JCWlmIChWaXJ0dWFsVHJhbnNhY3Rp b25JZElzVmFsaWQob2xkX3NuYXBzaG90c1tpXSkpCi0JCQlWaXJ0dWFsWGFjdExvY2sob2xk X3NuYXBzaG90c1tpXSwgdHJ1ZSk7Ci0JfQorCVdhaXRGb3JPbGRlclNuYXBzaG90cyhsaW1p dFhtaW4pOwogCiAJLyoKIAkgKiBJbmRleCBjYW4gbm93IGJlIG1hcmtlZCB2YWxpZCAtLSB1 cGRhdGUgaXRzIHBnX2luZGV4IGVudHJ5CkBAIC0yMjA1LDcgKzIyMDAsNyBAQCBDaG9vc2VJ bmRleENvbHVtbk5hbWVzKExpc3QgKmluZGV4RWxlbXMpCiAgKgkJUmVjcmVhdGUgYSBzcGVj aWZpYyBpbmRleC4KICAqLwogdm9pZAotUmVpbmRleEluZGV4KFJhbmdlVmFyICppbmRleFJl bGF0aW9uLCBpbnQgb3B0aW9ucykKK1JlaW5kZXhJbmRleChSYW5nZVZhciAqaW5kZXhSZWxh dGlvbiwgaW50IG9wdGlvbnMsIGJvb2wgY29uY3VycmVudCkKIHsKIAlPaWQJCQlpbmRPaWQ7 CiAJT2lkCQkJaGVhcE9pZCA9IEludmFsaWRPaWQ7CkBAIC0yMjE3LDcgKzIyMTIsOCBAQCBS ZWluZGV4SW5kZXgoUmFuZ2VWYXIgKmluZGV4UmVsYXRpb24sIGludCBvcHRpb25zKQogCSAq IG9idGFpbiBsb2NrIG9uIHRhYmxlIGZpcnN0LCB0byBhdm9pZCBkZWFkbG9jayBoYXphcmQu ICBUaGUgbG9jayBsZXZlbAogCSAqIHVzZWQgaGVyZSBtdXN0IG1hdGNoIHRoZSBpbmRleCBs b2NrIG9idGFpbmVkIGluIHJlaW5kZXhfaW5kZXgoKS4KIAkgKi8KLQlpbmRPaWQgPSBSYW5n ZVZhckdldFJlbGlkRXh0ZW5kZWQoaW5kZXhSZWxhdGlvbiwgQWNjZXNzRXhjbHVzaXZlTG9j aywKKwlpbmRPaWQgPSBSYW5nZVZhckdldFJlbGlkRXh0ZW5kZWQoaW5kZXhSZWxhdGlvbiwK KwkJCQkJCQkJCSAgY29uY3VycmVudCA/IFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayA6IEFj Y2Vzc0V4Y2x1c2l2ZUxvY2ssCiAJCQkJCQkJCQkgIDAsCiAJCQkJCQkJCQkgIFJhbmdlVmFy Q2FsbGJhY2tGb3JSZWluZGV4SW5kZXgsCiAJCQkJCQkJCQkgICh2b2lkICopICZoZWFwT2lk KTsKQEAgLTIyMzcsNyArMjIzMywxMCBAQCBSZWluZGV4SW5kZXgoUmFuZ2VWYXIgKmluZGV4 UmVsYXRpb24sIGludCBvcHRpb25zKQogCXBlcnNpc3RlbmNlID0gaXJlbC0+cmRfcmVsLT5y ZWxwZXJzaXN0ZW5jZTsKIAlpbmRleF9jbG9zZShpcmVsLCBOb0xvY2spOwogCi0JcmVpbmRl eF9pbmRleChpbmRPaWQsIGZhbHNlLCBwZXJzaXN0ZW5jZSwgb3B0aW9ucyk7CisJaWYgKGNv bmN1cnJlbnQpCisJCVJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShpbmRPaWQsIG9wdGlv bnMpOworCWVsc2UKKwkJcmVpbmRleF9pbmRleChpbmRPaWQsIGZhbHNlLCBwZXJzaXN0ZW5j ZSwgb3B0aW9ucyk7CiB9CiAKIC8qCkBAIC0yMzA1LDE4ICsyMzA0LDI2IEBAIFJhbmdlVmFy Q2FsbGJhY2tGb3JSZWluZGV4SW5kZXgoY29uc3QgUmFuZ2VWYXIgKnJlbGF0aW9uLAogICoJ CVJlY3JlYXRlIGFsbCBpbmRleGVzIG9mIGEgdGFibGUgKGFuZCBvZiBpdHMgdG9hc3QgdGFi bGUsIGlmIGFueSkKICAqLwogT2lkCi1SZWluZGV4VGFibGUoUmFuZ2VWYXIgKnJlbGF0aW9u LCBpbnQgb3B0aW9ucykKK1JlaW5kZXhUYWJsZShSYW5nZVZhciAqcmVsYXRpb24sIGludCBv cHRpb25zLCBib29sIGNvbmN1cnJlbnQpCiB7CiAJT2lkCQkJaGVhcE9pZDsKKwlib29sCQly ZXN1bHQ7CiAKIAkvKiBUaGUgbG9jayBsZXZlbCB1c2VkIGhlcmUgc2hvdWxkIG1hdGNoIHJl aW5kZXhfcmVsYXRpb24oKS4gKi8KLQloZWFwT2lkID0gUmFuZ2VWYXJHZXRSZWxpZEV4dGVu ZGVkKHJlbGF0aW9uLCBTaGFyZUxvY2ssIDAsCisJaGVhcE9pZCA9IFJhbmdlVmFyR2V0UmVs aWRFeHRlbmRlZChyZWxhdGlvbiwKKwkJCQkJCQkJCSAgIGNvbmN1cnJlbnQgPyBTaGFyZVVw ZGF0ZUV4Y2x1c2l2ZUxvY2sgOiBTaGFyZUxvY2ssCisJCQkJCQkJCQkgICAwLAogCQkJCQkJ CQkJICAgUmFuZ2VWYXJDYWxsYmFja093bnNUYWJsZSwgTlVMTCk7CiAKLQlpZiAoIXJlaW5k ZXhfcmVsYXRpb24oaGVhcE9pZCwKLQkJCQkJCSAgUkVJTkRFWF9SRUxfUFJPQ0VTU19UT0FT VCB8Ci0JCQkJCQkgIFJFSU5ERVhfUkVMX0NIRUNLX0NPTlNUUkFJTlRTLAotCQkJCQkJICBv cHRpb25zKSkKKwlpZiAoY29uY3VycmVudCkKKwkJcmVzdWx0ID0gUmVpbmRleFJlbGF0aW9u Q29uY3VycmVudGx5KGhlYXBPaWQsIG9wdGlvbnMpOworCWVsc2UKKwkJcmVzdWx0ID0gcmVp bmRleF9yZWxhdGlvbihoZWFwT2lkLAorCQkJCQkJCQkgIFJFSU5ERVhfUkVMX1BST0NFU1Nf VE9BU1QgfAorCQkJCQkJCQkgIFJFSU5ERVhfUkVMX0NIRUNLX0NPTlNUUkFJTlRTLAorCQkJ CQkJCQkgIG9wdGlvbnMpOworCisJaWYgKCFyZXN1bHQpCiAJCWVyZXBvcnQoTk9USUNFLAog CQkJCShlcnJtc2coInRhYmxlIFwiJXNcIiBoYXMgbm8gaW5kZXhlcyIsCiAJCQkJCQlyZWxh dGlvbi0+cmVsbmFtZSkpKTsKQEAgLTIzMzQsNyArMjM0MSw3IEBAIFJlaW5kZXhUYWJsZShS YW5nZVZhciAqcmVsYXRpb24sIGludCBvcHRpb25zKQogICovCiB2b2lkCiBSZWluZGV4TXVs dGlwbGVUYWJsZXMoY29uc3QgY2hhciAqb2JqZWN0TmFtZSwgUmVpbmRleE9iamVjdFR5cGUg b2JqZWN0S2luZCwKLQkJCQkJICBpbnQgb3B0aW9ucykKKwkJCQkJICBpbnQgb3B0aW9ucywg Ym9vbCBjb25jdXJyZW50KQogewogCU9pZAkJCW9iamVjdE9pZDsKIAlSZWxhdGlvbglyZWxh dGlvblJlbGF0aW9uOwpAQCAtMjM0NiwxMiArMjM1MywxOCBAQCBSZWluZGV4TXVsdGlwbGVU YWJsZXMoY29uc3QgY2hhciAqb2JqZWN0TmFtZSwgUmVpbmRleE9iamVjdFR5cGUgb2JqZWN0 S2luZCwKIAlMaXN0CSAgICpyZWxpZHMgPSBOSUw7CiAJTGlzdENlbGwgICAqbDsKIAlpbnQJ CQludW1fa2V5czsKKwlib29sCQljb25jdXJyZW50X3dhcm5pbmcgPSBmYWxzZTsKIAogCUFz c2VydEFyZyhvYmplY3ROYW1lKTsKIAlBc3NlcnQob2JqZWN0S2luZCA9PSBSRUlOREVYX09C SkVDVF9TQ0hFTUEgfHwKIAkJICAgb2JqZWN0S2luZCA9PSBSRUlOREVYX09CSkVDVF9TWVNU RU0gfHwKIAkJICAgb2JqZWN0S2luZCA9PSBSRUlOREVYX09CSkVDVF9EQVRBQkFTRSk7CiAK KwlpZiAob2JqZWN0S2luZCA9PSBSRUlOREVYX09CSkVDVF9TWVNURU0gJiYgY29uY3VycmVu dCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9U X1NVUFBPUlRFRCksCisJCQkJIGVycm1zZygiY29uY3VycmVudCByZWluZGV4IG9mIHN5c3Rl bSBjYXRhbG9ncyBpcyBub3Qgc3VwcG9ydGVkIikpKTsKKwogCS8qCiAJICogR2V0IE9JRCBv ZiBvYmplY3QgdG8gcmVpbmRleCwgYmVpbmcgdGhlIGRhdGFiYXNlIGN1cnJlbnRseSBiZWlu ZyB1c2VkCiAJICogYnkgc2Vzc2lvbiBmb3IgYSBkYXRhYmFzZSBvciBmb3Igc3lzdGVtIGNh dGFsb2dzLCBvciB0aGUgc2NoZW1hIGRlZmluZWQKQEAgLTI0NTQsNiArMjQ2NywyNSBAQCBS ZWluZGV4TXVsdGlwbGVUYWJsZXMoY29uc3QgY2hhciAqb2JqZWN0TmFtZSwgUmVpbmRleE9i amVjdFR5cGUgb2JqZWN0S2luZCwKIAkJCSFwZ19jbGFzc19vd25lcmNoZWNrKHJlbGlkLCBH ZXRVc2VySWQoKSkpCiAJCQljb250aW51ZTsKIAorCQkvKgorCQkgKiBTa2lwIHN5c3RlbSB0 YWJsZXMgdGhhdCBpbmRleF9jcmVhdGUoKSB3b3VsZCByZWplY3QgdG8gaW5kZXgKKwkJICog Y29uY3VycmVudGx5LiAgWFhYIFdlIG5lZWQgdGhlIGFkZGl0aW9uYWwgY2hlY2sgZm9yCisJ CSAqIEZpcnN0Tm9ybWFsT2JqZWN0SWQgdG8gc2tpcCBpbmZvcm1hdGlvbl9zY2hlbWEgdGFi bGVzLCBiZWNhdXNlCisJCSAqIElzQ2F0YWxvZ0NsYXNzKCkgaGVyZSBkb2VzIG5vdCBjb3Zl ciBpbmZvcm1hdGlvbl9zY2hlbWEsIGJ1dCB0aGUKKwkJICogY2hlY2sgaW4gaW5kZXhfY3Jl YXRlKCkgd2lsbCBlcnJvciBvbiB0aGUgVE9BU1QgdGFibGVzIG9mCisJCSAqIGluZm9ybWF0 aW9uX3NjaGVtYSB0YWJsZXMuCisJCSAqLworCQlpZiAoY29uY3VycmVudCAmJgorCQkJKElz Q2F0YWxvZ0NsYXNzKHJlbGlkLCBjbGFzc3R1cGxlKSB8fCByZWxpZCA8IEZpcnN0Tm9ybWFs T2JqZWN0SWQpKQorCQl7CisJCQlpZiAoIWNvbmN1cnJlbnRfd2FybmluZykKKwkJCQllcmVw b3J0KFdBUk5JTkcsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBP UlRFRCksCisJCQkJCQkgZXJybXNnKCJjb25jdXJyZW50IHJlaW5kZXggaXMgbm90IHN1cHBv cnRlZCBmb3IgY2F0YWxvZyByZWxhdGlvbnMsIHNraXBwaW5nIGFsbCIpKSk7CisJCQljb25j dXJyZW50X3dhcm5pbmcgPSB0cnVlOworCQkJY29udGludWU7CisJCX0KKwogCQkvKiBTYXZl IHRoZSBsaXN0IG9mIHJlbGF0aW9uIE9JRHMgaW4gcHJpdmF0ZSBjb250ZXh0ICovCiAJCW9s ZCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwcml2YXRlX2NvbnRleHQpOwogCkBAIC0yNDgw LDI2ICsyNTEyLDY2MyBAQCBSZWluZGV4TXVsdGlwbGVUYWJsZXMoY29uc3QgY2hhciAqb2Jq ZWN0TmFtZSwgUmVpbmRleE9iamVjdFR5cGUgb2JqZWN0S2luZCwKIAlmb3JlYWNoKGwsIHJl bGlkcykKIAl7CiAJCU9pZAkJCXJlbGlkID0gbGZpcnN0X29pZChsKTsKKwkJYm9vbAkJcmVz dWx0OwogCiAJCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAJCS8qIGZ1bmN0aW9ucyBp biBpbmRleGVzIG1heSB3YW50IGEgc25hcHNob3Qgc2V0ICovCiAJCVB1c2hBY3RpdmVTbmFw c2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwotCQlpZiAocmVpbmRleF9yZWxhdGlv bihyZWxpZCwKLQkJCQkJCQkgUkVJTkRFWF9SRUxfUFJPQ0VTU19UT0FTVCB8Ci0JCQkJCQkJ IFJFSU5ERVhfUkVMX0NIRUNLX0NPTlNUUkFJTlRTLAotCQkJCQkJCSBvcHRpb25zKSkKIAot CQkJaWYgKG9wdGlvbnMgJiBSRUlOREVYT1BUX1ZFUkJPU0UpCisJCWlmIChjb25jdXJyZW50 KQorCQl7CisJCQlyZXN1bHQgPSBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkocmVsaWQs IG9wdGlvbnMpOworCQkJLyogUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KCkgZG9lcyB0 aGUgdmVyYm9zZSBvdXRwdXQgKi8KKwkJfQorCQllbHNlCisJCXsKKwkJCXJlc3VsdCA9IHJl aW5kZXhfcmVsYXRpb24ocmVsaWQsCisJCQkJCQkJCQkgIFJFSU5ERVhfUkVMX1BST0NFU1Nf VE9BU1QgfAorCQkJCQkJCQkJICBSRUlOREVYX1JFTF9DSEVDS19DT05TVFJBSU5UUywKKwkJ CQkJCQkJCSAgb3B0aW9ucyk7CisKKwkJCWlmIChyZXN1bHQgJiYgKG9wdGlvbnMgJiBSRUlO REVYT1BUX1ZFUkJPU0UpKQogCQkJCWVyZXBvcnQoSU5GTywKIAkJCQkJCShlcnJtc2coInRh YmxlIFwiJXMuJXNcIiB3YXMgcmVpbmRleGVkIiwKIAkJCQkJCQkJZ2V0X25hbWVzcGFjZV9u YW1lKGdldF9yZWxfbmFtZXNwYWNlKHJlbGlkKSksCiAJCQkJCQkJCWdldF9yZWxfbmFtZShy ZWxpZCkpKSk7CisKKwkJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisJCX0KKworCQlDb21taXRU cmFuc2FjdGlvbkNvbW1hbmQoKTsKKwl9CisJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsK KworCU1lbW9yeUNvbnRleHREZWxldGUocHJpdmF0ZV9jb250ZXh0KTsKK30KKworCisvKgor ICogUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5IC0gcHJvY2VzcyBSRUlOREVYIENPTkNV UlJFTlRMWSBmb3IgZ2l2ZW4KKyAqIHJlbGF0aW9uIE9JRAorICoKKyAqIFRoZSByZWxhdGlv biBjYW4gYmUgZWl0aGVyIGFuIGluZGV4IG9yIGEgdGFibGUuICBJZiBpdCBpcyBhIHRhYmxl LCBhbGwgaXRzCisgKiB2YWxpZCBpbmRleGVzIHdpbGwgYmUgcmVidWlsdCwgaW5jbHVkaW5n IGl0cyBhc3NvY2lhdGVkIHRvYXN0IHRhYmxlCisgKiBpbmRleGVzLiAgSWYgaXQgaXMgYW4g aW5kZXgsIHRoaXMgaW5kZXggaXRzZWxmIHdpbGwgYmUgcmVidWlsdC4KKyAqCisgKiBUaGUg bG9ja3MgdGFrZW4gb24gcGFyZW50IHRhYmxlcyBhbmQgaW52b2x2ZWQgaW5kZXhlcyBhcmUg a2VwdCB1bnRpbCB0aGUKKyAqIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCwgYXQgd2hpY2gg cG9pbnQgYSBzZXNzaW9uIGxvY2sgaXMgdGFrZW4gb24gZWFjaAorICogcmVsYXRpb24uICBC b3RoIG9mIHRoZXNlIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IHNjaGVtYSBjaGFuZ2Vz LgorICovCitzdGF0aWMgYm9vbAorUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KE9pZCBy ZWxhdGlvbk9pZCwgaW50IG9wdGlvbnMpCit7CisJTGlzdAkgICAqaGVhcFJlbGF0aW9uSWRz ID0gTklMOworCUxpc3QJICAgKmluZGV4SWRzID0gTklMOworCUxpc3QJICAgKm5ld0luZGV4 SWRzID0gTklMOworCUxpc3QJICAgKnJlbGF0aW9uTG9ja3MgPSBOSUw7CisJTGlzdAkgICAq bG9ja1RhZ3MgPSBOSUw7CisJTGlzdENlbGwgICAqbGMsCisJCQkgICAqbGMyOworCU1lbW9y eUNvbnRleHQgcHJpdmF0ZV9jb250ZXh0OworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsK KwljaGFyCQlyZWxraW5kOworCWNoYXIJICAgKnJlbGF0aW9uTmFtZSA9IE5VTEw7CisJY2hh cgkgICAqcmVsYXRpb25OYW1lc3BhY2UgPSBOVUxMOworCVBHUlVzYWdlCXJ1MDsKKworCS8q CisJICogQ3JlYXRlIGEgbWVtb3J5IGNvbnRleHQgdGhhdCB3aWxsIHN1cnZpdmUgZm9yY2Vk IHRyYW5zYWN0aW9uIGNvbW1pdHMgd2UKKwkgKiBkbyBiZWxvdy4gIFNpbmNlIGl0IGlzIGEg Y2hpbGQgb2YgUG9ydGFsQ29udGV4dCwgaXQgd2lsbCBnbyBhd2F5CisJICogZXZlbnR1YWxs eSBldmVuIGlmIHdlIHN1ZmZlciBhbiBlcnJvcjsgdGhlcmUncyBubyBuZWVkIGZvciBzcGVj aWFsCisJICogYWJvcnQgY2xlYW51cCBsb2dpYy4KKwkgKi8KKwlwcml2YXRlX2NvbnRleHQg PSBBbGxvY1NldENvbnRleHRDcmVhdGUoUG9ydGFsQ29udGV4dCwKKwkJCQkJCQkJCQkJIlJl aW5kZXhDb25jdXJyZW50IiwKKwkJCQkJCQkJCQkJQUxMT0NTRVRfU01BTExfU0laRVMpOwor CisJaWYgKG9wdGlvbnMgJiBSRUlOREVYT1BUX1ZFUkJPU0UpCisJeworCQkvKiBTYXZlIGRh dGEgbmVlZGVkIGJ5IFJFSU5ERVggVkVSQk9TRSBpbiBwcml2YXRlIGNvbnRleHQgKi8KKwkJ b2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwcml2YXRlX2NvbnRleHQpOwor CisJCXJlbGF0aW9uTmFtZSA9IGdldF9yZWxfbmFtZShyZWxhdGlvbk9pZCk7CisJCXJlbGF0 aW9uTmFtZXNwYWNlID0gZ2V0X25hbWVzcGFjZV9uYW1lKGdldF9yZWxfbmFtZXNwYWNlKHJl bGF0aW9uT2lkKSk7CisKKwkJcGdfcnVzYWdlX2luaXQoJnJ1MCk7CisKKwkJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCX0KKworCXJlbGtpbmQgPSBnZXRfcmVsX3Jl bGtpbmQocmVsYXRpb25PaWQpOworCisJLyoKKwkgKiBFeHRyYWN0IHRoZSBsaXN0IG9mIGlu ZGV4ZXMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgcmVidWlsdCBiYXNlZCBvbiB0aGUKKwkgKiBs aXN0IG9mIHJlbGF0aW9uIE9pZHMgZ2l2ZW4gYnkgY2FsbGVyLgorCSAqLworCXN3aXRjaCAo cmVsa2luZCkKKwl7CisJCWNhc2UgUkVMS0lORF9SRUxBVElPTjoKKwkJY2FzZSBSRUxLSU5E X01BVFZJRVc6CisJCWNhc2UgUkVMS0lORF9UT0FTVFZBTFVFOgorCQkJeworCQkJCS8qCisJ CQkJICogSW4gdGhlIGNhc2Ugb2YgYSByZWxhdGlvbiwgZmluZCBhbGwgaXRzIGluZGV4ZXMg aW5jbHVkaW5nCisJCQkJICogdG9hc3QgaW5kZXhlcy4KKwkJCQkgKi8KKwkJCQlSZWxhdGlv bgloZWFwUmVsYXRpb247CisKKwkJCQkvKiBTYXZlIHRoZSBsaXN0IG9mIHJlbGF0aW9uIE9J RHMgaW4gcHJpdmF0ZSBjb250ZXh0ICovCisJCQkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhwcml2YXRlX2NvbnRleHQpOworCisJCQkJLyogVHJhY2sgdGhpcyByZWxh dGlvbiBmb3Igc2Vzc2lvbiBsb2NrcyAqLworCQkJCWhlYXBSZWxhdGlvbklkcyA9IGxhcHBl bmRfb2lkKGhlYXBSZWxhdGlvbklkcywgcmVsYXRpb25PaWQpOworCisJCQkJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJCQkJLyogT3BlbiByZWxhdGlvbiB0byBn ZXQgaXRzIGluZGV4ZXMgKi8KKwkJCQloZWFwUmVsYXRpb24gPSB0YWJsZV9vcGVuKHJlbGF0 aW9uT2lkLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOworCisJCQkJLyogQWRkIGFsbCB0 aGUgdmFsaWQgaW5kZXhlcyBvZiByZWxhdGlvbiB0byBsaXN0ICovCisJCQkJZm9yZWFjaChs YywgUmVsYXRpb25HZXRJbmRleExpc3QoaGVhcFJlbGF0aW9uKSkKKwkJCQl7CisJCQkJCU9p ZAkJCWNlbGxPaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJCQkJUmVsYXRpb24JaW5kZXhSZWxh dGlvbiA9IGluZGV4X29wZW4oY2VsbE9pZCwKKwkJCQkJCQkJCQkJCQkJICAgU2hhcmVVcGRh dGVFeGNsdXNpdmVMb2NrKTsKKworCQkJCQlpZiAoIWluZGV4UmVsYXRpb24tPnJkX2luZGV4 LT5pbmRpc3ZhbGlkKQorCQkJCQkJZXJlcG9ydChXQVJOSU5HLAorCQkJCQkJCQkoZXJyY29k ZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCQkJCSBlcnJtc2coImNh bm5vdCByZWluZGV4IGNvbmN1cnJlbnRseSBpbnZhbGlkIGluZGV4IFwiJXMuJXNcIiwgc2tp cHBpbmciLAorCQkJCQkJCQkJCWdldF9uYW1lc3BhY2VfbmFtZShnZXRfcmVsX25hbWVzcGFj ZShjZWxsT2lkKSksCisJCQkJCQkJCQkJZ2V0X3JlbF9uYW1lKGNlbGxPaWQpKSkpOworCQkJ CQllbHNlIGlmIChpbmRleFJlbGF0aW9uLT5yZF9pbmRleC0+aW5kaXNleGNsdXNpb24pCisJ CQkJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVS RV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJCQkJIGVycm1zZygiY2Fubm90IHJlaW5kZXggY29u Y3VycmVudGx5IGV4Y2x1c2lvbiBjb25zdHJhaW50IGluZGV4IFwiJXMuJXNcIiwgc2tpcHBp bmciLAorCQkJCQkJCQkJCWdldF9uYW1lc3BhY2VfbmFtZShnZXRfcmVsX25hbWVzcGFjZShj ZWxsT2lkKSksCisJCQkJCQkJCQkJZ2V0X3JlbF9uYW1lKGNlbGxPaWQpKSkpOworCQkJCQll bHNlCisJCQkJCXsKKwkJCQkJCS8qIFNhdmUgdGhlIGxpc3Qgb2YgcmVsYXRpb24gT0lEcyBp biBwcml2YXRlIGNvbnRleHQgKi8KKwkJCQkJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8ocHJpdmF0ZV9jb250ZXh0KTsKKworCQkJCQkJaW5kZXhJZHMgPSBsYXBwZW5k X29pZChpbmRleElkcywgY2VsbE9pZCk7CisKKwkJCQkJCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhvbGRjb250ZXh0KTsKKwkJCQkJfQorCisJCQkJCWluZGV4X2Nsb3NlKGluZGV4UmVsYXRp b24sIE5vTG9jayk7CisJCQkJfQorCisJCQkJLyogQWxzbyBhZGQgdGhlIHRvYXN0IGluZGV4 ZXMgKi8KKwkJCQlpZiAoT2lkSXNWYWxpZChoZWFwUmVsYXRpb24tPnJkX3JlbC0+cmVsdG9h c3RyZWxpZCkpCisJCQkJeworCQkJCQlPaWQJCQl0b2FzdE9pZCA9IGhlYXBSZWxhdGlvbi0+ cmRfcmVsLT5yZWx0b2FzdHJlbGlkOworCQkJCQlSZWxhdGlvbgl0b2FzdFJlbGF0aW9uID0g dGFibGVfb3Blbih0b2FzdE9pZCwKKwkJCQkJCQkJCQkJCQkJICAgU2hhcmVVcGRhdGVFeGNs dXNpdmVMb2NrKTsKKworCQkJCQkvKiBTYXZlIHRoZSBsaXN0IG9mIHJlbGF0aW9uIE9JRHMg aW4gcHJpdmF0ZSBjb250ZXh0ICovCisJCQkJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8ocHJpdmF0ZV9jb250ZXh0KTsKKworCQkJCQkvKiBUcmFjayB0aGlzIHJlbGF0 aW9uIGZvciBzZXNzaW9uIGxvY2tzICovCisJCQkJCWhlYXBSZWxhdGlvbklkcyA9IGxhcHBl bmRfb2lkKGhlYXBSZWxhdGlvbklkcywgdG9hc3RPaWQpOworCisJCQkJCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCQkJCQlmb3JlYWNoKGxjMiwgUmVsYXRpb25H ZXRJbmRleExpc3QodG9hc3RSZWxhdGlvbikpCisJCQkJCXsKKwkJCQkJCU9pZAkJCWNlbGxP aWQgPSBsZmlyc3Rfb2lkKGxjMik7CisJCQkJCQlSZWxhdGlvbglpbmRleFJlbGF0aW9uID0g aW5kZXhfb3BlbihjZWxsT2lkLAorCQkJCQkJCQkJCQkJCQkJICAgU2hhcmVVcGRhdGVFeGNs dXNpdmVMb2NrKTsKKworCQkJCQkJaWYgKCFpbmRleFJlbGF0aW9uLT5yZF9pbmRleC0+aW5k aXN2YWxpZCkKKwkJCQkJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCQkJCQkoZXJyY29kZShF UlJDT0RFX0lOREVYX0NPUlJVUFRFRCksCisJCQkJCQkJCQkgZXJybXNnKCJjYW5ub3QgcmVp bmRleCBjb25jdXJyZW50bHkgaW52YWxpZCBpbmRleCBcIiVzLiVzXCIsIHNraXBwaW5nIiwK KwkJCQkJCQkJCQkJZ2V0X25hbWVzcGFjZV9uYW1lKGdldF9yZWxfbmFtZXNwYWNlKGNlbGxP aWQpKSwKKwkJCQkJCQkJCQkJZ2V0X3JlbF9uYW1lKGNlbGxPaWQpKSkpOworCQkJCQkJZWxz ZQorCQkJCQkJeworCQkJCQkJCS8qCisJCQkJCQkJICogU2F2ZSB0aGUgbGlzdCBvZiByZWxh dGlvbiBPSURzIGluIHByaXZhdGUKKwkJCQkJCQkgKiBjb250ZXh0CisJCQkJCQkJICovCisJ CQkJCQkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwcml2YXRlX2NvbnRl eHQpOworCisJCQkJCQkJaW5kZXhJZHMgPSBsYXBwZW5kX29pZChpbmRleElkcywgY2VsbE9p ZCk7CisKKwkJCQkJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJCQkJ CQl9CisKKwkJCQkJCWluZGV4X2Nsb3NlKGluZGV4UmVsYXRpb24sIE5vTG9jayk7CisJCQkJ CX0KKworCQkJCQl0YWJsZV9jbG9zZSh0b2FzdFJlbGF0aW9uLCBOb0xvY2spOworCQkJCX0K KworCQkJCXRhYmxlX2Nsb3NlKGhlYXBSZWxhdGlvbiwgTm9Mb2NrKTsKKwkJCQlicmVhazsK KwkJCX0KKwkJY2FzZSBSRUxLSU5EX0lOREVYOgorCQkJeworCQkJCS8qCisJCQkJICogRm9y IGFuIGluZGV4IHNpbXBseSBhZGQgaXRzIE9pZCB0byBsaXN0LiBJbnZhbGlkIGluZGV4ZXMK KwkJCQkgKiBjYW5ub3QgYmUgaW5jbHVkZWQgaW4gbGlzdC4KKwkJCQkgKi8KKwkJCQlSZWxh dGlvbglpbmRleFJlbGF0aW9uID0gaW5kZXhfb3BlbihyZWxhdGlvbk9pZCwgU2hhcmVVcGRh dGVFeGNsdXNpdmVMb2NrKTsKKwkJCQlPaWQJCQloZWFwSWQgPSBJbmRleEdldFJlbGF0aW9u KHJlbGF0aW9uT2lkLCBmYWxzZSk7CisKKwkJCQkvKiBBIHNoYXJlZCByZWxhdGlvbiBjYW5u b3QgYmUgcmVpbmRleGVkIGNvbmN1cnJlbnRseSAqLworCQkJCWlmIChJc1NoYXJlZFJlbGF0 aW9uKGhlYXBJZCkpCisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVycmNvZGUoRVJS Q09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkJCSBlcnJtc2coImNvbmN1cnJl bnQgcmVpbmRleCBpcyBub3Qgc3VwcG9ydGVkIGZvciBzaGFyZWQgcmVsYXRpb25zIikpKTsK KworCQkJCS8qIEEgc3lzdGVtIGNhdGFsb2cgY2Fubm90IGJlIHJlaW5kZXhlZCBjb25jdXJy ZW50bHkgKi8KKwkJCQlpZiAoSXNTeXN0ZW1OYW1lc3BhY2UoZ2V0X3JlbF9uYW1lc3BhY2Uo aGVhcElkKSkpCisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVycmNvZGUoRVJSQ09E RV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkJCSBlcnJtc2coImNvbmN1cnJlbnQg cmVpbmRleCBpcyBub3Qgc3VwcG9ydGVkIGZvciBjYXRhbG9nIHJlbGF0aW9ucyIpKSk7CisK KwkJCQkvKiBTYXZlIHRoZSBsaXN0IG9mIHJlbGF0aW9uIE9JRHMgaW4gcHJpdmF0ZSBjb250 ZXh0ICovCisJCQkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwcml2YXRl X2NvbnRleHQpOworCisJCQkJLyogVHJhY2sgdGhlIGhlYXAgcmVsYXRpb24gb2YgdGhpcyBp bmRleCBmb3Igc2Vzc2lvbiBsb2NrcyAqLworCQkJCWhlYXBSZWxhdGlvbklkcyA9IGxpc3Rf bWFrZTFfb2lkKGhlYXBJZCk7CisKKwkJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29u dGV4dCk7CisKKwkJCQlpZiAoIWluZGV4UmVsYXRpb24tPnJkX2luZGV4LT5pbmRpc3ZhbGlk KQorCQkJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTkRF WF9DT1JSVVBURUQpLAorCQkJCQkJCSBlcnJtc2coImNhbm5vdCByZWluZGV4IGNvbmN1cnJl bnRseSBpbnZhbGlkIGluZGV4IFwiJXMuJXNcIiwgc2tpcHBpbmciLAorCQkJCQkJCQkJZ2V0 X25hbWVzcGFjZV9uYW1lKGdldF9yZWxfbmFtZXNwYWNlKHJlbGF0aW9uT2lkKSksCisJCQkJ CQkJCQlnZXRfcmVsX25hbWUocmVsYXRpb25PaWQpKSkpOworCQkJCWVsc2UKKwkJCQl7CisJ CQkJCS8qIFNhdmUgdGhlIGxpc3Qgb2YgcmVsYXRpb24gT0lEcyBpbiBwcml2YXRlIGNvbnRl eHQgKi8KKwkJCQkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwcml2YXRl X2NvbnRleHQpOworCisJCQkJCWluZGV4SWRzID0gbGFwcGVuZF9vaWQoaW5kZXhJZHMsIHJl bGF0aW9uT2lkKTsKKworCQkJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7 CisJCQkJfQorCisJCQkJaW5kZXhfY2xvc2UoaW5kZXhSZWxhdGlvbiwgTm9Mb2NrKTsKKwkJ CQlicmVhazsKKwkJCX0KKwkJY2FzZSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFOgorCQkJ Lyogc2VlIHJlaW5kZXhfcmVsYXRpb24oKSAqLworCQkJZXJlcG9ydChXQVJOSU5HLAorCQkJ CQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCSBlcnJt c2coIlJFSU5ERVggb2YgcGFydGl0aW9uZWQgdGFibGVzIGlzIG5vdCB5ZXQgaW1wbGVtZW50 ZWQsIHNraXBwaW5nIFwiJXNcIiIsCisJCQkJCQkJZ2V0X3JlbF9uYW1lKHJlbGF0aW9uT2lk KSkpKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJZGVmYXVsdDoKKwkJCS8qIFJldHVybiBlcnJv ciBpZiB0eXBlIG9mIHJlbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgKi8KKwkJCWVyZXBvcnQo RVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAorCQkJ CQkgZXJybXNnKCJjYW5ub3QgcmVpbmRleCBjb25jdXJyZW50bHkgdGhpcyB0eXBlIG9mIHJl bGF0aW9uIikpKTsKKwkJCWJyZWFrOworCX0KKworCS8qIERlZmluaXRlbHkgbm8gaW5kZXhl cywgc28gbGVhdmUgKi8KKwlpZiAoaW5kZXhJZHMgPT0gTklMKQorCXsKKwkJUG9wQWN0aXZl U25hcHNob3QoKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCUFzc2VydChoZWFwUmVsYXRp b25JZHMgIT0gTklMKTsKKworCS8qLS0tLS0KKwkgKiBOb3cgd2UgaGF2ZSBhbGwgdGhlIGlu ZGV4ZXMgd2Ugd2FudCB0byBwcm9jZXNzIGluIGluZGV4SWRzLgorCSAqCisJICogVGhlIHBo YXNlcyBub3cgYXJlOgorCSAqCisJICogMS4gY3JlYXRlIG5ldyBpbmRleGVzIGluIHRoZSBj YXRhbG9nCisJICogMi4gYnVpbGQgbmV3IGluZGV4ZXMKKwkgKiAzLiBsZXQgbmV3IGluZGV4 ZXMgY2F0Y2ggdXAgd2l0aCB0dXBsZXMgaW5zZXJ0ZWQgaW4gdGhlIG1lYW50aW1lCisJICog NC4gc3dhcCBpbmRleCBuYW1lcworCSAqIDUuIG1hcmsgb2xkIGluZGV4ZXMgYXMgZGVhZAor CSAqIDYuIGRyb3Agb2xkIGluZGV4ZXMKKwkgKgorCSAqIFdlIHByb2Nlc3MgZWFjaCBwaGFz ZSBmb3IgYWxsIGluZGV4ZXMgYmVmb3JlIG1vdmluZyB0byB0aGUgbmV4dCBwaGFzZSwKKwkg KiBmb3IgZWZmaWNpZW5jeS4KKwkgKi8KKworCS8qCisJICogUGhhc2UgMSBvZiBSRUlOREVY IENPTkNVUlJFTlRMWQorCSAqCisJICogQ3JlYXRlIGEgbmV3IGluZGV4IHdpdGggdGhlIHNh bWUgcHJvcGVydGllcyBhcyB0aGUgb2xkIG9uZSwgYnV0IGl0IGlzCisJICogb25seSByZWdp c3RlcmVkIGluIGNhdGFsb2dzIGFuZCB3aWxsIGJlIGJ1aWx0IGxhdGVyLiAgVGhlbiBnZXQg c2Vzc2lvbgorCSAqIGxvY2tzIG9uIGFsbCBpbnZvbHZlZCB0YWJsZXMuICBTZWUgYW5hbG9n b3VzIGNvZGUgaW4gRGVmaW5lSW5kZXgoKSBmb3IKKwkgKiBtb3JlIGRldGFpbGVkIGNvbW1l bnRzLgorCSAqLworCisJZm9yZWFjaChsYywgaW5kZXhJZHMpCisJeworCQljaGFyCSAgICpj b25jdXJyZW50TmFtZTsKKwkJT2lkCQkJaW5kZXhJZCA9IGxmaXJzdF9vaWQobGMpOworCQlP aWQJCQluZXdJbmRleElkOworCQlSZWxhdGlvbglpbmRleFJlbDsKKwkJUmVsYXRpb24JaGVh cFJlbDsKKwkJUmVsYXRpb24JbmV3SW5kZXhSZWw7CisJCUxvY2tSZWxJZAlsb2NrcmVsaWQ7 CisKKwkJaW5kZXhSZWwgPSBpbmRleF9vcGVuKGluZGV4SWQsIFNoYXJlVXBkYXRlRXhjbHVz aXZlTG9jayk7CisJCWhlYXBSZWwgPSB0YWJsZV9vcGVuKGluZGV4UmVsLT5yZF9pbmRleC0+ aW5kcmVsaWQsCisJCQkJCQkJIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CisKKwkJLyog Q2hvb3NlIGEgdGVtcG9yYXJ5IHJlbGF0aW9uIG5hbWUgZm9yIHRoZSBuZXcgaW5kZXggKi8K KwkJY29uY3VycmVudE5hbWUgPSBDaG9vc2VSZWxhdGlvbk5hbWUoZ2V0X3JlbF9uYW1lKGlu ZGV4SWQpLAorCQkJCQkJCQkJCQlOVUxMLAorCQkJCQkJCQkJCQkiY2NuZXciLAorCQkJCQkJ CQkJCQlnZXRfcmVsX25hbWVzcGFjZShpbmRleFJlbC0+cmRfaW5kZXgtPmluZHJlbGlkKSwK KwkJCQkJCQkJCQkJZmFsc2UpOworCisJCS8qIENyZWF0ZSBuZXcgaW5kZXggZGVmaW5pdGlv biBiYXNlZCBvbiBnaXZlbiBpbmRleCAqLworCQluZXdJbmRleElkID0gaW5kZXhfY29uY3Vy cmVudGx5X2NyZWF0ZV9jb3B5KGhlYXBSZWwsCisJCQkJCQkJCQkJCQkJaW5kZXhJZCwKKwkJ CQkJCQkJCQkJCQljb25jdXJyZW50TmFtZSk7CisKKwkJLyogTm93IG9wZW4gdGhlIHJlbGF0 aW9uIG9mIHRoZSBuZXcgaW5kZXgsIGEgbG9jayBpcyBhbHNvIG5lZWRlZCBvbiBpdCAqLwor CQluZXdJbmRleFJlbCA9IGluZGV4X29wZW4oaW5kZXhJZCwgU2hhcmVVcGRhdGVFeGNsdXNp dmVMb2NrKTsKKworCQkvKgorCQkgKiBTYXZlIHRoZSBsaXN0IG9mIE9JRHMgYW5kIGxvY2tz IGluIHByaXZhdGUgY29udGV4dAorCQkgKi8KKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhwcml2YXRlX2NvbnRleHQpOworCisJCW5ld0luZGV4SWRzID0gbGFwcGVu ZF9vaWQobmV3SW5kZXhJZHMsIG5ld0luZGV4SWQpOworCisJCS8qCisJCSAqIFNhdmUgbG9j a3JlbGlkIHRvIHByb3RlY3QgZWFjaCByZWxhdGlvbiBmcm9tIGRyb3AgdGhlbiBjbG9zZQor CQkgKiByZWxhdGlvbnMuIFRoZSBsb2NrcmVsaWQgb24gcGFyZW50IHJlbGF0aW9uIGlzIG5v dCB0YWtlbiBoZXJlIHRvCisJCSAqIGF2b2lkIG11bHRpcGxlIGxvY2tzIHRha2VuIG9uIHRo ZSBzYW1lIHJlbGF0aW9uLCBpbnN0ZWFkIHdlIHJlbHkgb24KKwkJICogcGFyZW50UmVsYXRp b25JZHMgYnVpbHQgZWFybGllci4KKwkJICovCisJCWxvY2tyZWxpZCA9IGluZGV4UmVsLT5y ZF9sb2NrSW5mby5sb2NrUmVsSWQ7CisJCXJlbGF0aW9uTG9ja3MgPSBsYXBwZW5kKHJlbGF0 aW9uTG9ja3MsICZsb2NrcmVsaWQpOworCQlsb2NrcmVsaWQgPSBuZXdJbmRleFJlbC0+cmRf bG9ja0luZm8ubG9ja1JlbElkOworCQlyZWxhdGlvbkxvY2tzID0gbGFwcGVuZChyZWxhdGlv bkxvY2tzLCAmbG9ja3JlbGlkKTsKKworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29u dGV4dCk7CisKKwkJaW5kZXhfY2xvc2UoaW5kZXhSZWwsIE5vTG9jayk7CisJCWluZGV4X2Ns b3NlKG5ld0luZGV4UmVsLCBOb0xvY2spOworCQl0YWJsZV9jbG9zZShoZWFwUmVsLCBOb0xv Y2spOworCX0KKworCS8qCisJICogU2F2ZSB0aGUgaGVhcCBsb2NrIGZvciBmb2xsb3dpbmcg dmlzaWJpbGl0eSBjaGVja3Mgd2l0aCBvdGhlciBiYWNrZW5kcworCSAqIG1pZ2h0IGNvbmZs aWN0IHdpdGggdGhpcyBzZXNzaW9uLgorCSAqLworCWZvcmVhY2gobGMsIGhlYXBSZWxhdGlv bklkcykKKwl7CisJCVJlbGF0aW9uCWhlYXBSZWxhdGlvbiA9IHRhYmxlX29wZW4obGZpcnN0 X29pZChsYyksIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CisJCUxvY2tSZWxJZAlsb2Nr cmVsaWQgPSBoZWFwUmVsYXRpb24tPnJkX2xvY2tJbmZvLmxvY2tSZWxJZDsKKwkJTE9DS1RB RyAgICAqaGVhcGxvY2t0YWc7CisKKwkJLyogU2F2ZSB0aGUgbGlzdCBvZiBsb2NrcyBpbiBw cml2YXRlIGNvbnRleHQgKi8KKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhwcml2YXRlX2NvbnRleHQpOworCisJCS8qIEFkZCBsb2NrcmVsaWQgb2YgaGVhcCByZWxh dGlvbiB0byB0aGUgbGlzdCBvZiBsb2NrZWQgcmVsYXRpb25zICovCisJCXJlbGF0aW9uTG9j a3MgPSBsYXBwZW5kKHJlbGF0aW9uTG9ja3MsICZsb2NrcmVsaWQpOworCisJCWhlYXBsb2Nr dGFnID0gKExPQ0tUQUcgKikgcGFsbG9jKHNpemVvZihMT0NLVEFHKSk7CisKKwkJLyogU2F2 ZSB0aGUgTE9DS1RBRyBmb3IgdGhpcyBwYXJlbnQgcmVsYXRpb24gZm9yIHRoZSB3YWl0IHBo YXNlICovCisJCVNFVF9MT0NLVEFHX1JFTEFUSU9OKCpoZWFwbG9ja3RhZywgbG9ja3JlbGlk LmRiSWQsIGxvY2tyZWxpZC5yZWxJZCk7CisJCWxvY2tUYWdzID0gbGFwcGVuZChsb2NrVGFn cywgaGVhcGxvY2t0YWcpOworCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0 KTsKKworCQkvKiBDbG9zZSBoZWFwIHJlbGF0aW9uICovCisJCXRhYmxlX2Nsb3NlKGhlYXBS ZWxhdGlvbiwgTm9Mb2NrKTsKKwl9CisKKwkvKiBHZXQgYSBzZXNzaW9uLWxldmVsIGxvY2sg b24gZWFjaCB0YWJsZS4gKi8KKwlmb3JlYWNoKGxjLCByZWxhdGlvbkxvY2tzKQorCXsKKwkJ TG9ja1JlbElkCWxvY2tSZWwgPSAqKChMb2NrUmVsSWQgKikgbGZpcnN0KGxjKSk7CisKKwkJ TG9ja1JlbGF0aW9uSWRGb3JTZXNzaW9uKCZsb2NrUmVsLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2 ZUxvY2spOworCX0KKworCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisJQ29tbWl0VHJhbnNhY3Rp b25Db21tYW5kKCk7CisJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCS8qCisJICog UGhhc2UgMiBvZiBSRUlOREVYIENPTkNVUlJFTlRMWQorCSAqCisJICogQnVpbGQgdGhlIG5l dyBpbmRleGVzIGluIGEgc2VwYXJhdGUgdHJhbnNhY3Rpb24gZm9yIGVhY2ggaW5kZXggdG8g YXZvaWQKKwkgKiBoYXZpbmcgb3BlbiB0cmFuc2FjdGlvbnMgZm9yIGFuIHVubmVjZXNzYXJ5 IGxvbmcgdGltZS4gIEJ1dCBiZWZvcmUKKwkgKiBkb2luZyB0aGF0LCB3YWl0IHVudGlsIG5v IHJ1bm5pbmcgdHJhbnNhY3Rpb25zIGNvdWxkIGhhdmUgdGhlIHRhYmxlIG9mCisJICogdGhl IGluZGV4IG9wZW4gd2l0aCB0aGUgb2xkIGxpc3Qgb2YgaW5kZXhlcy4gIFNlZSAicGhhc2Ug MiIgaW4KKwkgKiBEZWZpbmVJbmRleCgpIGZvciBtb3JlIGRldGFpbHMuCisJICovCisKKwlX YWl0Rm9yTG9ja2Vyc011bHRpcGxlKGxvY2tUYWdzLCBTaGFyZUxvY2spOworCUNvbW1pdFRy YW5zYWN0aW9uQ29tbWFuZCgpOworCisJZm9yYm90aChsYywgaW5kZXhJZHMsIGxjMiwgbmV3 SW5kZXhJZHMpCisJeworCQlSZWxhdGlvbglpbmRleFJlbDsKKwkJT2lkCQkJb2xkSW5kZXhJ ZCA9IGxmaXJzdF9vaWQobGMpOworCQlPaWQJCQluZXdJbmRleElkID0gbGZpcnN0X29pZChs YzIpOworCQlPaWQJCQloZWFwSWQ7CisKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwor CQkvKiBTdGFydCBuZXcgdHJhbnNhY3Rpb24gZm9yIHRoaXMgaW5kZXgncyBjb25jdXJyZW50 IGJ1aWxkICovCisJCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkJLyogU2V0IEFj dGl2ZVNuYXBzaG90IHNpbmNlIGZ1bmN0aW9ucyBpbiB0aGUgaW5kZXhlcyBtYXkgbmVlZCBp dCAqLworCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsK KworCQkvKgorCQkgKiBJbmRleCByZWxhdGlvbiBoYXMgYmVlbiBjbG9zZWQgYnkgcHJldmlv dXMgY29tbWl0LCBzbyByZW9wZW4gaXQgdG8KKwkJICogZ2V0IGl0cyBpbmZvcm1hdGlvbi4K KwkJICovCisJCWluZGV4UmVsID0gaW5kZXhfb3BlbihvbGRJbmRleElkLCBTaGFyZVVwZGF0 ZUV4Y2x1c2l2ZUxvY2spOworCQloZWFwSWQgPSBpbmRleFJlbC0+cmRfaW5kZXgtPmluZHJl bGlkOworCQlpbmRleF9jbG9zZShpbmRleFJlbCwgTm9Mb2NrKTsKKworCQkvKiBQZXJmb3Jt IGNvbmN1cnJlbnQgYnVpbGQgb2YgbmV3IGluZGV4ICovCisJCWluZGV4X2NvbmN1cnJlbnRs eV9idWlsZChoZWFwSWQsIG5ld0luZGV4SWQpOworCisJCVBvcEFjdGl2ZVNuYXBzaG90KCk7 CisJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCX0KKwlTdGFydFRyYW5zYWN0aW9u Q29tbWFuZCgpOworCisJLyoKKwkgKiBQaGFzZSAzIG9mIFJFSU5ERVggQ09OQ1VSUkVOVExZ CisJICoKKwkgKiBEdXJpbmcgdGhpcyBwaGFzZSB0aGUgb2xkIGluZGV4ZXMgY2F0Y2ggdXAg d2l0aCBhbnkgbmV3IHR1cGxlcyB0aGF0CisJICogd2VyZSBjcmVhdGVkIGR1cmluZyB0aGUg cHJldmlvdXMgcGhhc2UuICBTZWUgInBoYXNlIDMiIGluIERlZmluZUluZGV4KCkKKwkgKiBm b3IgbW9yZSBkZXRhaWxzLgorCSAqLworCisJV2FpdEZvckxvY2tlcnNNdWx0aXBsZShsb2Nr VGFncywgU2hhcmVMb2NrKTsKKwlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCWZv cmVhY2gobGMsIG5ld0luZGV4SWRzKQorCXsKKwkJT2lkCQkJbmV3SW5kZXhJZCA9IGxmaXJz dF9vaWQobGMpOworCQlPaWQJCQloZWFwSWQ7CisJCVRyYW5zYWN0aW9uSWQgbGltaXRYbWlu OworCQlTbmFwc2hvdAlzbmFwc2hvdDsKKworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwor CisJCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkJaGVhcElkID0gSW5kZXhHZXRS ZWxhdGlvbihuZXdJbmRleElkLCBmYWxzZSk7CisKKwkJLyoKKwkJICogVGFrZSB0aGUgInJl ZmVyZW5jZSBzbmFwc2hvdCIgdGhhdCB3aWxsIGJlIHVzZWQgYnkgdmFsaWRhdGVfaW5kZXgo KQorCQkgKiB0byBmaWx0ZXIgY2FuZGlkYXRlIHR1cGxlcy4KKwkJICovCisJCXNuYXBzaG90 ID0gUmVnaXN0ZXJTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOworCQlQdXNo QWN0aXZlU25hcHNob3Qoc25hcHNob3QpOworCisJCXZhbGlkYXRlX2luZGV4KGhlYXBJZCwg bmV3SW5kZXhJZCwgc25hcHNob3QpOworCisJCS8qCisJCSAqIFdlIGNhbiBub3cgZG8gYXdh eSB3aXRoIG91ciBhY3RpdmUgc25hcHNob3QsIHdlIHN0aWxsIG5lZWQgdG8gc2F2ZQorCQkg KiB0aGUgeG1pbiBsaW1pdCB0byB3YWl0IGZvciBvbGRlciBzbmFwc2hvdHMuCisJCSAqLwor CQlsaW1pdFhtaW4gPSBzbmFwc2hvdC0+eG1pbjsKKwogCQlQb3BBY3RpdmVTbmFwc2hvdCgp OworCQlVbnJlZ2lzdGVyU25hcHNob3Qoc25hcHNob3QpOworCisJCS8qCisJCSAqIFRvIGVu c3VyZSBubyBkZWFkbG9ja3MsIHdlIG11c3QgY29tbWl0IGFuZCBzdGFydCB5ZXQgYW5vdGhl cgorCQkgKiB0cmFuc2FjdGlvbiwgYW5kIGRvIG91ciB3YWl0IGJlZm9yZSBhbnkgc25hcHNo b3QgaGFzIGJlZW4gdGFrZW4gaW4KKwkJICogaXQuCisJCSAqLworCQlDb21taXRUcmFuc2Fj dGlvbkNvbW1hbmQoKTsKKwkJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCQkvKgor CQkgKiBUaGUgaW5kZXggaXMgbm93IHZhbGlkIGluIHRoZSBzZW5zZSB0aGF0IGl0IGNvbnRh aW5zIGFsbCBjdXJyZW50bHkKKwkJICogaW50ZXJlc3RpbmcgdHVwbGVzLiAgQnV0IHNpbmNl IGl0IG1pZ2h0IG5vdCBjb250YWluIHR1cGxlcyBkZWxldGVkIGp1c3QKKwkJICogYmVmb3Jl IHRoZSByZWZlcmVuY2Ugc25hcCB3YXMgdGFrZW4sIHdlIGhhdmUgdG8gd2FpdCBvdXQgYW55 CisJCSAqIHRyYW5zYWN0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgb2xkZXIgc25hcHNob3RzLgor CQkgKi8KKwkJV2FpdEZvck9sZGVyU25hcHNob3RzKGxpbWl0WG1pbik7CisKIAkJQ29tbWl0 VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAJfQorCisJLyoKKwkgKiBQaGFzZSA0IG9mIFJFSU5E RVggQ09OQ1VSUkVOVExZCisJICoKKwkgKiBOb3cgdGhhdCB0aGUgbmV3IGluZGV4ZXMgaGF2 ZSBiZWVuIHZhbGlkYXRlZCwgc3dhcCBlYWNoIG5ldyBpbmRleCB3aXRoCisJICogaXRzIGNv cnJlc3BvbmRpbmcgb2xkIGluZGV4LgorCSAqCisJICogV2UgbWFyayB0aGUgbmV3IGluZGV4 ZXMgYXMgdmFsaWQgYW5kIHRoZSBvbGQgaW5kZXhlcyBhcyBub3QgdmFsaWQgYXQKKwkgKiB0 aGUgc2FtZSB0aW1lIHRvIG1ha2Ugc3VyZSB3ZSBvbmx5IGdldCBjb25zdHJhaW50IHZpb2xh dGlvbnMgZnJvbSB0aGUKKwkgKiBpbmRleGVzIHdpdGggdGhlIGNvcnJlY3QgbmFtZXMuCisJ ICovCisKIAlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCisJZm9yYm90aChsYywgaW5k ZXhJZHMsIGxjMiwgbmV3SW5kZXhJZHMpCisJeworCQljaGFyCSAgICpvbGROYW1lOworCQlP aWQJCQlvbGRJbmRleElkID0gbGZpcnN0X29pZChsYyk7CisJCU9pZAkJCW5ld0luZGV4SWQg PSBsZmlyc3Rfb2lkKGxjMik7CisJCU9pZAkJCWhlYXBJZDsKKworCQlDSEVDS19GT1JfSU5U RVJSVVBUUygpOworCisJCWhlYXBJZCA9IEluZGV4R2V0UmVsYXRpb24ob2xkSW5kZXhJZCwg ZmFsc2UpOworCisJCS8qIENob29zZSBhIHJlbGF0aW9uIG5hbWUgZm9yIG9sZCBpbmRleCAq LworCQlvbGROYW1lID0gQ2hvb3NlUmVsYXRpb25OYW1lKGdldF9yZWxfbmFtZShvbGRJbmRl eElkKSwKKwkJCQkJCQkJCSBOVUxMLAorCQkJCQkJCQkJICJjY29sZCIsCisJCQkJCQkJCQkg Z2V0X3JlbF9uYW1lc3BhY2UoaGVhcElkKSwKKwkJCQkJCQkJCSBmYWxzZSk7CisKKwkJLyoK KwkJICogU3dhcCBvbGQgaW5kZXggd2l0aCB0aGUgbmV3IG9uZS4gIFRoaXMgYWxzbyBtYXJr cyB0aGUgbmV3IG9uZSBhcworCQkgKiB2YWxpZCBhbmQgdGhlIG9sZCBvbmUgYXMgbm90IHZh bGlkLgorCQkgKi8KKwkJaW5kZXhfY29uY3VycmVudGx5X3N3YXAobmV3SW5kZXhJZCwgb2xk SW5kZXhJZCwgb2xkTmFtZSk7CisKKwkJLyoKKwkJICogSW52YWxpZGF0ZSB0aGUgcmVsY2Fj aGUgZm9yIHRoZSB0YWJsZSwgc28gdGhhdCBhZnRlciB0aGlzIGNvbW1pdAorCQkgKiBhbGwg c2Vzc2lvbnMgd2lsbCByZWZyZXNoIGFueSBjYWNoZWQgcGxhbnMgdGhhdCBtaWdodCByZWZl cmVuY2UgdGhlCisJCSAqIGluZGV4LgorCQkgKi8KKwkJQ2FjaGVJbnZhbGlkYXRlUmVsY2Fj aGVCeVJlbGlkKGhlYXBJZCk7CisKKwkJLyoKKwkJICogQ0NJIGhlcmUgc28gdGhhdCBzdWJz ZXF1ZW50IGl0ZXJhdGlvbnMgc2VlIHRoZSBvbGROYW1lIGluIHRoZQorCQkgKiBjYXRhbG9n IGFuZCBjYW4gY2hvb3NlIGEgbm9uY29uZmxpY3RpbmcgbmFtZSBmb3IgdGhlaXIgb2xkTmFt ZS4KKwkJICogT3RoZXJ3aXNlLCB0aGlzIGNvdWxkIGxlYWQgdG8gY29uZmxpY3RzIGlmIGEg dGFibGUgaGFzIHR3byBpbmRleGVzCisJCSAqIHdob3NlIG5hbWVzIGFyZSBlcXVhbCBmb3Ig dGhlIGZpcnN0IE5BTUVEQVRBTEVOLW1pbnVzLWEtZmV3CisJCSAqIGNoYXJhY3RlcnMuCisJ CSAqLworCQlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOworCX0KKworCS8qIENvbW1pdCB0 aGlzIHRyYW5zYWN0aW9uIGFuZCBtYWtlIGluZGV4IHN3YXBzIHZpc2libGUgKi8KKwlDb21t aXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOwor CisJLyoKKwkgKiBQaGFzZSA1IG9mIFJFSU5ERVggQ09OQ1VSUkVOVExZCisJICoKKwkgKiBN YXJrIHRoZSBvbGQgaW5kZXhlcyBhcyBkZWFkLiAgRmlyc3Qgd2UgbXVzdCB3YWl0IHVudGls IG5vIHJ1bm5pbmcKKwkgKiB0cmFuc2FjdGlvbiBjb3VsZCBiZSB1c2luZyB0aGUgaW5kZXgg Zm9yIGEgcXVlcnkuICBTZWUgYWxzbworCSAqIGluZGV4X2Ryb3AoKSBmb3IgbW9yZSBkZXRh aWxzLgorCSAqLworCisJV2FpdEZvckxvY2tlcnNNdWx0aXBsZShsb2NrVGFncywgQWNjZXNz RXhjbHVzaXZlTG9jayk7CisKKwlmb3JlYWNoKGxjLCBpbmRleElkcykKKwl7CisJCU9pZAkJ CW9sZEluZGV4SWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJT2lkCQkJaGVhcElkOworCisJCUNI RUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisJCWhlYXBJZCA9IEluZGV4R2V0UmVsYXRpb24ob2xk SW5kZXhJZCwgZmFsc2UpOworCQlpbmRleF9jb25jdXJyZW50bHlfc2V0X2RlYWQoaGVhcElk LCBvbGRJbmRleElkKTsKKwl9CisKKwkvKiBDb21taXQgdGhpcyB0cmFuc2FjdGlvbiB0byBt YWtlIHRoZSB1cGRhdGVzIHZpc2libGUuICovCisJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5k KCk7CisJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCS8qCisJICogUGhhc2UgNiBv ZiBSRUlOREVYIENPTkNVUlJFTlRMWQorCSAqCisJICogRHJvcCB0aGUgb2xkIGluZGV4ZXMu CisJICovCisKKwlXYWl0Rm9yTG9ja2Vyc011bHRpcGxlKGxvY2tUYWdzLCBBY2Nlc3NFeGNs dXNpdmVMb2NrKTsKKworCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBz aG90KCkpOworCisJeworCQlPYmplY3RBZGRyZXNzZXMgKm9iamVjdHMgPSBuZXdfb2JqZWN0 X2FkZHJlc3NlcygpOworCisJCWZvcmVhY2gobGMsIGluZGV4SWRzKQorCQl7CisJCQlPaWQJ CQlvbGRJbmRleElkID0gbGZpcnN0X29pZChsYyk7CisJCQlPYmplY3RBZGRyZXNzICpvYmpl Y3QgPSBwYWxsb2Moc2l6ZW9mKE9iamVjdEFkZHJlc3MpKTsKKworCQkJb2JqZWN0LT5jbGFz c0lkID0gUmVsYXRpb25SZWxhdGlvbklkOworCQkJb2JqZWN0LT5vYmplY3RJZCA9IG9sZElu ZGV4SWQ7CisJCQlvYmplY3QtPm9iamVjdFN1YklkID0gMDsKKworCQkJYWRkX2V4YWN0X29i amVjdF9hZGRyZXNzKG9iamVjdCwgb2JqZWN0cyk7CisJCX0KKworCQkvKgorCQkgKiBVc2Ug UEVSRk9STV9ERUxFVElPTl9DT05DVVJSRU5UX0xPQ0sgc28gdGhhdCBpbmRleF9kcm9wKCkg dXNlcyB0aGUKKwkJICogcmlnaHQgbG9jayBsZXZlbC4KKwkJICovCisJCXBlcmZvcm1NdWx0 aXBsZURlbGV0aW9ucyhvYmplY3RzLCBEUk9QX1JFU1RSSUNULAorCQkJCQkJCQkgUEVSRk9S TV9ERUxFVElPTl9DT05DVVJSRU5UX0xPQ0sgfCBQRVJGT1JNX0RFTEVUSU9OX0lOVEVSTkFM KTsKKwl9CisKKwlQb3BBY3RpdmVTbmFwc2hvdCgpOworCUNvbW1pdFRyYW5zYWN0aW9uQ29t bWFuZCgpOworCisJLyoKKwkgKiBGaW5hbGx5LCByZWxlYXNlIHRoZSBzZXNzaW9uLWxldmVs IGxvY2sgb24gdGhlIHRhYmxlLgorCSAqLworCWZvcmVhY2gobGMsIHJlbGF0aW9uTG9ja3Mp CisJeworCQlMb2NrUmVsSWQJbG9ja1JlbCA9ICooKExvY2tSZWxJZCAqKSBsZmlyc3QobGMp KTsKKworCQlVbmxvY2tSZWxhdGlvbklkRm9yU2Vzc2lvbigmbG9ja1JlbCwgU2hhcmVVcGRh dGVFeGNsdXNpdmVMb2NrKTsKKwl9CisKKwkvKiBTdGFydCBhIG5ldyB0cmFuc2FjdGlvbiB0 byBmaW5pc2ggcHJvY2VzcyBwcm9wZXJseSAqLworCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5k KCk7CisKKwkvKiBMb2cgd2hhdCB3ZSBkaWQgKi8KKwlpZiAob3B0aW9ucyAmIFJFSU5ERVhP UFRfVkVSQk9TRSkKKwl7CisJCWlmIChyZWxraW5kID09IFJFTEtJTkRfSU5ERVgpCisJCQll cmVwb3J0KElORk8sCisJCQkJCShlcnJtc2coImluZGV4IFwiJXMuJXNcIiB3YXMgcmVpbmRl eGVkIiwKKwkJCQkJCQlyZWxhdGlvbk5hbWVzcGFjZSwgcmVsYXRpb25OYW1lKSwKKwkJCQkJ IGVycmRldGFpbCgiJXMuIiwKKwkJCQkJCQkgICBwZ19ydXNhZ2Vfc2hvdygmcnUwKSkpKTsK KwkJZWxzZQorCQl7CisJCQlmb3JlYWNoKGxjLCBuZXdJbmRleElkcykKKwkJCXsKKwkJCQlP aWQJCQlpbmRPaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKworCQkJCWVyZXBvcnQoSU5GTywKKwkJ CQkJCShlcnJtc2coImluZGV4IFwiJXMuJXNcIiB3YXMgcmVpbmRleGVkIiwKKwkJCQkJCQkJ Z2V0X25hbWVzcGFjZV9uYW1lKGdldF9yZWxfbmFtZXNwYWNlKGluZE9pZCkpLAorCQkJCQkJ CQlnZXRfcmVsX25hbWUoaW5kT2lkKSkpKTsKKwkJCQkvKiBEb24ndCBzaG93IHJ1c2FnZSBo ZXJlLCBzaW5jZSBpdCdzIG5vdCBwZXIgaW5kZXguICovCisJCQl9CisKKwkJCWVyZXBvcnQo SU5GTywKKwkJCQkJKGVycm1zZygidGFibGUgXCIlcy4lc1wiIHdhcyByZWluZGV4ZWQiLAor CQkJCQkJCXJlbGF0aW9uTmFtZXNwYWNlLCByZWxhdGlvbk5hbWUpLAorCQkJCQkgZXJyZGV0 YWlsKCIlcy4iLAorCQkJCQkJCSAgIHBnX3J1c2FnZV9zaG93KCZydTApKSkpOworCQl9CisJ fQorCiAJTWVtb3J5Q29udGV4dERlbGV0ZShwcml2YXRlX2NvbnRleHQpOworCisJcmV0dXJu IHRydWU7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJs ZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IDMxODNi MmFhYTEuLjdiZDQ5ZmRiN2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3Rh YmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC0x Mjk5LDYgKzEyOTksNyBAQCBSYW5nZVZhckNhbGxiYWNrRm9yRHJvcFJlbGF0aW9uKGNvbnN0 IFJhbmdlVmFyICpyZWwsIE9pZCByZWxPaWQsIE9pZCBvbGRSZWxPaWQsCiAJYm9vbAkJaXNf cGFydGl0aW9uOwogCUZvcm1fcGdfY2xhc3MgY2xhc3Nmb3JtOwogCUxPQ0tNT0RFCWhlYXBf bG9ja21vZGU7CisJYm9vbAkJaW52YWxpZF9zeXN0ZW1faW5kZXggPSBmYWxzZTsKIAogCXN0 YXRlID0gKHN0cnVjdCBEcm9wUmVsYXRpb25DYWxsYmFja1N0YXRlICopIGFyZzsKIAlyZWxr aW5kID0gc3RhdGUtPnJlbGtpbmQ7CkBAIC0xMzYxLDcgKzEzNjIsMzYgQEAgUmFuZ2VWYXJD YWxsYmFja0ZvckRyb3BSZWxhdGlvbihjb25zdCBSYW5nZVZhciAqcmVsLCBPaWQgcmVsT2lk LCBPaWQgb2xkUmVsT2lkLAogCQlhY2xjaGVja19lcnJvcihBQ0xDSEVDS19OT1RfT1dORVIs IGdldF9yZWxraW5kX29ianR5cGUoZ2V0X3JlbF9yZWxraW5kKHJlbE9pZCkpLAogCQkJCQkg ICByZWwtPnJlbG5hbWUpOwogCi0JaWYgKCFhbGxvd1N5c3RlbVRhYmxlTW9kcyAmJiBJc1N5 c3RlbUNsYXNzKHJlbE9pZCwgY2xhc3Nmb3JtKSkKKwkvKgorCSAqIENoZWNrIHRoZSBjYXNl IG9mIGEgc3lzdGVtIGluZGV4IHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGludmFsaWRhdGVkIGJ5 IGEKKwkgKiBmYWlsZWQgY29uY3VycmVudCBwcm9jZXNzIGFuZCBhbGxvdyBpdHMgZHJvcC4g Rm9yIHRoZSB0aW1lIGJlaW5nLCB0aGlzCisJICogb25seSBjb25jZXJucyBpbmRleGVzIG9m IHRvYXN0IHJlbGF0aW9ucyB0aGF0IGJlY2FtZSBpbnZhbGlkIGR1cmluZyBhCisJICogUkVJ TkRFWCBDT05DVVJSRU5UTFkgcHJvY2Vzcy4KKwkgKi8KKwlpZiAoSXNTeXN0ZW1DbGFzcyhy ZWxPaWQsIGNsYXNzZm9ybSkgJiYgcmVsa2luZCA9PSBSRUxLSU5EX0lOREVYKQorCXsKKwkJ SGVhcFR1cGxlCQlsb2NUdXBsZTsKKwkJRm9ybV9wZ19pbmRleAlpbmRleGZvcm07CisJCWJv b2wJCQlpbmRpc3ZhbGlkOworCisJCWxvY1R1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKElOREVY UkVMSUQsIE9iamVjdElkR2V0RGF0dW0ocmVsT2lkKSk7CisJCWlmICghSGVhcFR1cGxlSXNW YWxpZChsb2NUdXBsZSkpCisJCXsKKwkJCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7CisJCQly ZXR1cm47CisJCX0KKworCQlpbmRleGZvcm0gPSAoRm9ybV9wZ19pbmRleCkgR0VUU1RSVUNU KGxvY1R1cGxlKTsKKwkJaW5kaXN2YWxpZCA9IGluZGV4Zm9ybS0+aW5kaXN2YWxpZDsKKwkJ UmVsZWFzZVN5c0NhY2hlKGxvY1R1cGxlKTsKKworCQkvKiBNYXJrIG9iamVjdCBhcyBiZWlu ZyBhbiBpbnZhbGlkIGluZGV4IG9mIHN5c3RlbSBjYXRhbG9ncyAqLworCQlpZiAoIWluZGlz dmFsaWQpCisJCQlpbnZhbGlkX3N5c3RlbV9pbmRleCA9IHRydWU7CisJfQorCisJLyogSW4g dGhlIGNhc2Ugb2YgYW4gaW52YWxpZCBpbmRleCwgaXQgaXMgZmluZSB0byBieXBhc3MgdGhp cyBjaGVjayAqLworCWlmICghaW52YWxpZF9zeXN0ZW1faW5kZXggJiYgIWFsbG93U3lzdGVt VGFibGVNb2RzICYmIElzU3lzdGVtQ2xhc3MocmVsT2lkLCBjbGFzc2Zvcm0pKQogCQllcmVw b3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVH RSksCiAJCQkJIGVycm1zZygicGVybWlzc2lvbiBkZW5pZWQ6IFwiJXNcIiBpcyBhIHN5c3Rl bSBjYXRhbG9nIiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5j IGIvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKaW5kZXggZDk3NzgxZTFjYi4uOWEy NDAwYzAxNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKKysr IGIvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKQEAgLTQzNjcsNiArNDM2Nyw3IEBA IF9jb3B5UmVpbmRleFN0bXQoY29uc3QgUmVpbmRleFN0bXQgKmZyb20pCiAJQ09QWV9OT0RF X0ZJRUxEKHJlbGF0aW9uKTsKIAlDT1BZX1NUUklOR19GSUVMRChuYW1lKTsKIAlDT1BZX1ND QUxBUl9GSUVMRChvcHRpb25zKTsKKwlDT1BZX1NDQUxBUl9GSUVMRChjb25jdXJyZW50KTsK IAogCXJldHVybiBuZXdub2RlOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMv ZXF1YWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jCmluZGV4IDkx YzAwN2FkNWIuLjdlYjlmMWRkOTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL2Vx dWFsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMKQEAgLTIx MDMsNiArMjEwMyw3IEBAIF9lcXVhbFJlaW5kZXhTdG10KGNvbnN0IFJlaW5kZXhTdG10ICph LCBjb25zdCBSZWluZGV4U3RtdCAqYikKIAlDT01QQVJFX05PREVfRklFTEQocmVsYXRpb24p OwogCUNPTVBBUkVfU1RSSU5HX0ZJRUxEKG5hbWUpOwogCUNPTVBBUkVfU0NBTEFSX0ZJRUxE KG9wdGlvbnMpOworCUNPTVBBUkVfU0NBTEFSX0ZJRUxEKGNvbmN1cnJlbnQpOwogCiAJcmV0 dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55IGIv c3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQppbmRleCAwYTQ4MjI4MjlhLi5kNzExZjlhNzM2 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CisrKyBiL3NyYy9iYWNr ZW5kL3BhcnNlci9ncmFtLnkKQEAgLTgzMDAsNDIgKzgzMDAsNDYgQEAgRHJvcFRyYW5zZm9y bVN0bXQ6IERST1AgVFJBTlNGT1JNIG9wdF9pZl9leGlzdHMgRk9SIFR5cGVuYW1lIExBTkdV QUdFIG5hbWUgb3B0X2QKICAqCiAgKgkJUVVFUlk6CiAgKgotICoJCVJFSU5ERVggWyAob3B0 aW9ucykgXSB0eXBlIDxuYW1lPgorICoJCVJFSU5ERVggWyAob3B0aW9ucykgXSB0eXBlIFtD T05DVVJSRU5UTFldIDxuYW1lPgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBSZWlu ZGV4U3RtdDoKLQkJCVJFSU5ERVggcmVpbmRleF90YXJnZXRfdHlwZSBxdWFsaWZpZWRfbmFt ZQorCQkJUkVJTkRFWCByZWluZGV4X3RhcmdldF90eXBlIG9wdF9jb25jdXJyZW50bHkgcXVh bGlmaWVkX25hbWUKIAkJCQl7CiAJCQkJCVJlaW5kZXhTdG10ICpuID0gbWFrZU5vZGUoUmVp bmRleFN0bXQpOwogCQkJCQluLT5raW5kID0gJDI7Ci0JCQkJCW4tPnJlbGF0aW9uID0gJDM7 CisJCQkJCW4tPmNvbmN1cnJlbnQgPSAkMzsKKwkJCQkJbi0+cmVsYXRpb24gPSAkNDsKIAkJ CQkJbi0+bmFtZSA9IE5VTEw7CiAJCQkJCW4tPm9wdGlvbnMgPSAwOwogCQkJCQkkJCA9IChO b2RlICopbjsKIAkJCQl9Ci0JCQl8IFJFSU5ERVggcmVpbmRleF90YXJnZXRfbXVsdGl0YWJs ZSBuYW1lCisJCQl8IFJFSU5ERVggcmVpbmRleF90YXJnZXRfbXVsdGl0YWJsZSBvcHRfY29u Y3VycmVudGx5IG5hbWUKIAkJCQl7CiAJCQkJCVJlaW5kZXhTdG10ICpuID0gbWFrZU5vZGUo UmVpbmRleFN0bXQpOwogCQkJCQluLT5raW5kID0gJDI7Ci0JCQkJCW4tPm5hbWUgPSAkMzsK KwkJCQkJbi0+Y29uY3VycmVudCA9ICQzOworCQkJCQluLT5uYW1lID0gJDQ7CiAJCQkJCW4t PnJlbGF0aW9uID0gTlVMTDsKIAkJCQkJbi0+b3B0aW9ucyA9IDA7CiAJCQkJCSQkID0gKE5v ZGUgKiluOwogCQkJCX0KLQkJCXwgUkVJTkRFWCAnKCcgcmVpbmRleF9vcHRpb25fbGlzdCAn KScgcmVpbmRleF90YXJnZXRfdHlwZSBxdWFsaWZpZWRfbmFtZQorCQkJfCBSRUlOREVYICco JyByZWluZGV4X29wdGlvbl9saXN0ICcpJyByZWluZGV4X3RhcmdldF90eXBlIG9wdF9jb25j dXJyZW50bHkgcXVhbGlmaWVkX25hbWUKIAkJCQl7CiAJCQkJCVJlaW5kZXhTdG10ICpuID0g bWFrZU5vZGUoUmVpbmRleFN0bXQpOwogCQkJCQluLT5raW5kID0gJDU7Ci0JCQkJCW4tPnJl bGF0aW9uID0gJDY7CisJCQkJCW4tPmNvbmN1cnJlbnQgPSAkNjsKKwkJCQkJbi0+cmVsYXRp b24gPSAkNzsKIAkJCQkJbi0+bmFtZSA9IE5VTEw7CiAJCQkJCW4tPm9wdGlvbnMgPSAkMzsK IAkJCQkJJCQgPSAoTm9kZSAqKW47CiAJCQkJfQotCQkJfCBSRUlOREVYICcoJyByZWluZGV4 X29wdGlvbl9saXN0ICcpJyByZWluZGV4X3RhcmdldF9tdWx0aXRhYmxlIG5hbWUKKwkJCXwg UkVJTkRFWCAnKCcgcmVpbmRleF9vcHRpb25fbGlzdCAnKScgcmVpbmRleF90YXJnZXRfbXVs dGl0YWJsZSBvcHRfY29uY3VycmVudGx5IG5hbWUKIAkJCQl7CiAJCQkJCVJlaW5kZXhTdG10 ICpuID0gbWFrZU5vZGUoUmVpbmRleFN0bXQpOwogCQkJCQluLT5raW5kID0gJDU7Ci0JCQkJ CW4tPm5hbWUgPSAkNjsKKwkJCQkJbi0+Y29uY3VycmVudCA9ICQ2OworCQkJCQluLT5uYW1l ID0gJDc7CiAJCQkJCW4tPnJlbGF0aW9uID0gTlVMTDsKIAkJCQkJbi0+b3B0aW9ucyA9ICQz OwogCQkJCQkkJCA9IChOb2RlICopbjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3Av dXRpbGl0eS5jIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKaW5kZXggODU3YjdhOGI0 My4uZWRmMjRjNDM4YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMK KysrIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKQEAgLTc3NCwxNiArNzc0LDIwIEBA IHN0YW5kYXJkX1Byb2Nlc3NVdGlsaXR5KFBsYW5uZWRTdG10ICpwc3RtdCwKIAkJCXsKIAkJ CQlSZWluZGV4U3RtdCAqc3RtdCA9IChSZWluZGV4U3RtdCAqKSBwYXJzZXRyZWU7CiAKKwkJ CQlpZiAoc3RtdC0+Y29uY3VycmVudCkKKwkJCQkJUHJldmVudEluVHJhbnNhY3Rpb25CbG9j ayhpc1RvcExldmVsLAorCQkJCQkJCQkJCQkgICJSRUlOREVYIENPTkNVUlJFTlRMWSIpOwor CiAJCQkJLyogd2UgY2hvb3NlIHRvIGFsbG93IHRoaXMgZHVyaW5nICJyZWFkIG9ubHkiIHRy YW5zYWN0aW9ucyAqLwogCQkJCVByZXZlbnRDb21tYW5kRHVyaW5nUmVjb3ZlcnkoIlJFSU5E RVgiKTsKIAkJCQkvKiBmb3JiaWRkZW4gaW4gcGFyYWxsZWwgbW9kZSBkdWUgdG8gQ29tbWFu ZElzUmVhZE9ubHkgKi8KIAkJCQlzd2l0Y2ggKHN0bXQtPmtpbmQpCiAJCQkJewogCQkJCQlj YXNlIFJFSU5ERVhfT0JKRUNUX0lOREVYOgotCQkJCQkJUmVpbmRleEluZGV4KHN0bXQtPnJl bGF0aW9uLCBzdG10LT5vcHRpb25zKTsKKwkJCQkJCVJlaW5kZXhJbmRleChzdG10LT5yZWxh dGlvbiwgc3RtdC0+b3B0aW9ucywgc3RtdC0+Y29uY3VycmVudCk7CiAJCQkJCQlicmVhazsK IAkJCQkJY2FzZSBSRUlOREVYX09CSkVDVF9UQUJMRToKLQkJCQkJCVJlaW5kZXhUYWJsZShz dG10LT5yZWxhdGlvbiwgc3RtdC0+b3B0aW9ucyk7CisJCQkJCQlSZWluZGV4VGFibGUoc3Rt dC0+cmVsYXRpb24sIHN0bXQtPm9wdGlvbnMsIHN0bXQtPmNvbmN1cnJlbnQpOwogCQkJCQkJ YnJlYWs7CiAJCQkJCWNhc2UgUkVJTkRFWF9PQkpFQ1RfU0NIRU1BOgogCQkJCQljYXNlIFJF SU5ERVhfT0JKRUNUX1NZU1RFTToKQEAgLTc5OSw3ICs4MDMsNyBAQCBzdGFuZGFyZF9Qcm9j ZXNzVXRpbGl0eShQbGFubmVkU3RtdCAqcHN0bXQsCiAJCQkJCQkJCQkJCQkgIChzdG10LT5r aW5kID09IFJFSU5ERVhfT0JKRUNUX1NDSEVNQSkgPyAiUkVJTkRFWCBTQ0hFTUEiIDoKIAkJ CQkJCQkJCQkJCSAgKHN0bXQtPmtpbmQgPT0gUkVJTkRFWF9PQkpFQ1RfU1lTVEVNKSA/ICJS RUlOREVYIFNZU1RFTSIgOgogCQkJCQkJCQkJCQkJICAiUkVJTkRFWCBEQVRBQkFTRSIpOwot CQkJCQkJUmVpbmRleE11bHRpcGxlVGFibGVzKHN0bXQtPm5hbWUsIHN0bXQtPmtpbmQsIHN0 bXQtPm9wdGlvbnMpOworCQkJCQkJUmVpbmRleE11bHRpcGxlVGFibGVzKHN0bXQtPm5hbWUs IHN0bXQtPmtpbmQsIHN0bXQtPm9wdGlvbnMsIHN0bXQtPmNvbmN1cnJlbnQpOwogCQkJCQkJ YnJlYWs7CiAJCQkJCWRlZmF1bHQ6CiAJCQkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVk IG9iamVjdCB0eXBlOiAlZCIsCmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvY29tbW9uLmMg Yi9zcmMvYmluL3BzcWwvY29tbW9uLmMKaW5kZXggNWQ4NjM0ZDgxOC4uODI1MTFlMzRhYyAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2NvbW1vbi5jCisrKyBiL3NyYy9iaW4vcHNxbC9j b21tb24uYwpAQCAtMjE5Miw2ICsyMTkyLDIyIEBAIGNvbW1hbmRfbm9fYmVnaW4oY29uc3Qg Y2hhciAqcXVlcnkpCiAJCQlyZXR1cm4gdHJ1ZTsKIAkJaWYgKHdvcmRsZW4gPT0gMTAgJiYg cGdfc3RybmNhc2VjbXAocXVlcnksICJ0YWJsZXNwYWNlIiwgMTApID09IDApCiAJCQlyZXR1 cm4gdHJ1ZTsKKwkJaWYgKHdvcmRsZW4gPT0gNSAmJiAocGdfc3RybmNhc2VjbXAocXVlcnks ICJpbmRleCIsIDUpID09IDAgfHwKKwkJCQkJCQkgcGdfc3RybmNhc2VjbXAocXVlcnksICJ0 YWJsZSIsIDUpID09IDApKQorCQl7CisJCQlxdWVyeSArPSB3b3JkbGVuOworCQkJcXVlcnkg PSBza2lwX3doaXRlX3NwYWNlKHF1ZXJ5KTsKKwkJCXdvcmRsZW4gPSAwOworCQkJd2hpbGUg KGlzYWxwaGEoKHVuc2lnbmVkIGNoYXIpIHF1ZXJ5W3dvcmRsZW5dKSkKKwkJCQl3b3JkbGVu ICs9IFBRbWJsZW4oJnF1ZXJ5W3dvcmRsZW5dLCBwc2V0LmVuY29kaW5nKTsKKworCQkJLyoK KwkJCSAqIFJFSU5ERVggWyBUQUJMRSB8IElOREVYIF0gQ09OQ1VSUkVOVExZIGFyZSBub3Qg YWxsb3dlZCBpbgorCQkJICogeGFjdHMuCisJCQkgKi8KKwkJCWlmICh3b3JkbGVuID09IDEy ICYmIHBnX3N0cm5jYXNlY21wKHF1ZXJ5LCAiY29uY3VycmVudGx5IiwgMTIpID09IDApCisJ CQkJcmV0dXJuIHRydWU7CisJCX0KIAogCQkvKiBEUk9QIElOREVYIENPTkNVUlJFTlRMWSBp c24ndCBhbGxvd2VkIGluIHhhY3RzICovCiAJCWlmICh3b3JkbGVuID09IDUgJiYgcGdfc3Ry bmNhc2VjbXAocXVlcnksICJpbmRleCIsIDUpID09IDApCmRpZmYgLS1naXQgYS9zcmMvYmlu L3BzcWwvdGFiLWNvbXBsZXRlLmMgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMKaW5k ZXggM2JhMzQ5ODQ5Ni4uMjI3MGZjNWJlYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL3Rh Yi1jb21wbGV0ZS5jCisrKyBiL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYwpAQCAtMzIx MywxMiArMzIxMywyNCBAQCBwc3FsX2NvbXBsZXRpb24oY29uc3QgY2hhciAqdGV4dCwgaW50 IHN0YXJ0LCBpbnQgZW5kKQogCWVsc2UgaWYgKE1hdGNoZXMoIlJFSU5ERVgiKSkKIAkJQ09N UExFVEVfV0lUSCgiVEFCTEUiLCAiSU5ERVgiLCAiU1lTVEVNIiwgIlNDSEVNQSIsICJEQVRB QkFTRSIpOwogCWVsc2UgaWYgKE1hdGNoZXMoIlJFSU5ERVgiLCAiVEFCTEUiKSkKLQkJQ09N UExFVEVfV0lUSF9TQ0hFTUFfUVVFUlkoUXVlcnlfZm9yX2xpc3Rfb2ZfaW5kZXhhYmxlcywg TlVMTCk7CisJCUNPTVBMRVRFX1dJVEhfU0NIRU1BX1FVRVJZKFF1ZXJ5X2Zvcl9saXN0X29m X2luZGV4YWJsZXMsCisJCQkJCQkJCSAgICIgVU5JT04gU0VMRUNUICdDT05DVVJSRU5UTFkn Iik7CiAJZWxzZSBpZiAoTWF0Y2hlcygiUkVJTkRFWCIsICJJTkRFWCIpKQotCQlDT01QTEVU RV9XSVRIX1NDSEVNQV9RVUVSWShRdWVyeV9mb3JfbGlzdF9vZl9pbmRleGVzLCBOVUxMKTsK KwkJQ09NUExFVEVfV0lUSF9TQ0hFTUFfUVVFUlkoUXVlcnlfZm9yX2xpc3Rfb2ZfaW5kZXhl cywKKwkJCQkJCQkJICAgIiBVTklPTiBTRUxFQ1QgJ0NPTkNVUlJFTlRMWSciKTsKIAllbHNl IGlmIChNYXRjaGVzKCJSRUlOREVYIiwgIlNDSEVNQSIpKQotCQlDT01QTEVURV9XSVRIX1FV RVJZKFF1ZXJ5X2Zvcl9saXN0X29mX3NjaGVtYXMpOworCQlDT01QTEVURV9XSVRIX1FVRVJZ KFF1ZXJ5X2Zvcl9saXN0X29mX3NjaGVtYXMKKwkJCQkJCQkiIFVOSU9OIFNFTEVDVCAnQ09O Q1VSUkVOVExZJyIpOwogCWVsc2UgaWYgKE1hdGNoZXMoIlJFSU5ERVgiLCAiU1lTVEVNfERB VEFCQVNFIikpCisJCUNPTVBMRVRFX1dJVEhfUVVFUlkoUXVlcnlfZm9yX2xpc3Rfb2ZfZGF0 YWJhc2VzCisJCQkJCQkJIiBVTklPTiBTRUxFQ1QgJ0NPTkNVUlJFTlRMWSciKTsKKwllbHNl IGlmIChNYXRjaGVzKCJSRUlOREVYIiwgIlRBQkxFIiwgIkNPTkNVUlJFTlRMWSIpKQorCQlD T01QTEVURV9XSVRIX1NDSEVNQV9RVUVSWShRdWVyeV9mb3JfbGlzdF9vZl9pbmRleGFibGVz LCBOVUxMKTsKKwllbHNlIGlmIChNYXRjaGVzKCJSRUlOREVYIiwgIklOREVYIiwgIkNPTkNV UlJFTlRMWSIpKQorCQlDT01QTEVURV9XSVRIX1NDSEVNQV9RVUVSWShRdWVyeV9mb3JfbGlz dF9vZl9pbmRleGVzLCBOVUxMKTsKKwllbHNlIGlmIChNYXRjaGVzKCJSRUlOREVYIiwgIlND SEVNQSIsICJDT05DVVJSRU5UTFkiKSkKKwkJQ09NUExFVEVfV0lUSF9RVUVSWShRdWVyeV9m b3JfbGlzdF9vZl9zY2hlbWFzKTsKKwllbHNlIGlmIChNYXRjaGVzKCJSRUlOREVYIiwgIlNZ U1RFTXxEQVRBQkFTRSIsICJDT05DVVJSRU5UTFkiKSkKIAkJQ09NUExFVEVfV0lUSF9RVUVS WShRdWVyeV9mb3JfbGlzdF9vZl9kYXRhYmFzZXMpOwogCiAvKiBTRUNVUklUWSBMQUJFTCAq LwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9zY3JpcHRzL3JlaW5kZXhkYi5jIGIvc3JjL2Jpbi9z Y3JpcHRzL3JlaW5kZXhkYi5jCmluZGV4IDFjZDFjY2M5NTEuLjQzODUwMGNiMDggMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vc2NyaXB0cy9yZWluZGV4ZGIuYworKysgYi9zcmMvYmluL3Njcmlw dHMvcmVpbmRleGRiLmMKQEAgLTE5LDE2ICsxOSwxNyBAQCBzdGF0aWMgdm9pZCByZWluZGV4 X29uZV9kYXRhYmFzZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkYm5hbWUsCiAJ CQkJCSBjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICpob3N0LAogCQkJCQkgY29uc3Qg Y2hhciAqcG9ydCwgY29uc3QgY2hhciAqdXNlcm5hbWUsCiAJCQkJCSBlbnVtIHRyaXZhbHVl IHByb21wdF9wYXNzd29yZCwgY29uc3QgY2hhciAqcHJvZ25hbWUsCi0JCQkJCSBib29sIGVj aG8sIGJvb2wgdmVyYm9zZSk7CisJCQkJCSBib29sIGVjaG8sIGJvb2wgdmVyYm9zZSwgYm9v bCBjb25jdXJyZW50bHkpOwogc3RhdGljIHZvaWQgcmVpbmRleF9hbGxfZGF0YWJhc2VzKGNv bnN0IGNoYXIgKm1haW50ZW5hbmNlX2RiLAogCQkJCQkgIGNvbnN0IGNoYXIgKmhvc3QsIGNv bnN0IGNoYXIgKnBvcnQsCiAJCQkJCSAgY29uc3QgY2hhciAqdXNlcm5hbWUsIGVudW0gdHJp dmFsdWUgcHJvbXB0X3Bhc3N3b3JkLAogCQkJCQkgIGNvbnN0IGNoYXIgKnByb2duYW1lLCBi b29sIGVjaG8sCi0JCQkJCSAgYm9vbCBxdWlldCwgYm9vbCB2ZXJib3NlKTsKKwkJCQkJICBi b29sIHF1aWV0LCBib29sIHZlcmJvc2UsIGJvb2wgY29uY3VycmVudGx5KTsKIHN0YXRpYyB2 b2lkIHJlaW5kZXhfc3lzdGVtX2NhdGFsb2dzKGNvbnN0IGNoYXIgKmRibmFtZSwKIAkJCQkJ CWNvbnN0IGNoYXIgKmhvc3QsIGNvbnN0IGNoYXIgKnBvcnQsCiAJCQkJCQljb25zdCBjaGFy ICp1c2VybmFtZSwgZW51bSB0cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQsCi0JCQkJCQljb25z dCBjaGFyICpwcm9nbmFtZSwgYm9vbCBlY2hvLCBib29sIHZlcmJvc2UpOworCQkJCQkJY29u c3QgY2hhciAqcHJvZ25hbWUsIGJvb2wgZWNobywgYm9vbCB2ZXJib3NlLAorCQkJCQkJYm9v bCBjb25jdXJyZW50bHkpOwogc3RhdGljIHZvaWQgaGVscChjb25zdCBjaGFyICpwcm9nbmFt ZSk7CiAKIGludApAQCAtNDksNiArNTAsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2 W10pCiAJCXsidGFibGUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3QnfSwKIAkJeyJp bmRleCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnaSd9LAogCQl7InZlcmJvc2UiLCBu b19hcmd1bWVudCwgTlVMTCwgJ3YnfSwKKwkJeyJjb25jdXJyZW50bHkiLCBub19hcmd1bWVu dCwgTlVMTCwgMX0sCiAJCXsibWFpbnRlbmFuY2UtZGIiLCByZXF1aXJlZF9hcmd1bWVudCwg TlVMTCwgMn0sCiAJCXtOVUxMLCAwLCBOVUxMLCAwfQogCX07CkBAIC02OCw2ICs3MCw3IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlib29sCQllY2hvID0gZmFsc2U7CiAJ Ym9vbAkJcXVpZXQgPSBmYWxzZTsKIAlib29sCQl2ZXJib3NlID0gZmFsc2U7CisJYm9vbAkJ Y29uY3VycmVudGx5ID0gZmFsc2U7CiAJU2ltcGxlU3RyaW5nTGlzdCBpbmRleGVzID0ge05V TEwsIE5VTEx9OwogCVNpbXBsZVN0cmluZ0xpc3QgdGFibGVzID0ge05VTEwsIE5VTEx9Owog CVNpbXBsZVN0cmluZ0xpc3Qgc2NoZW1hcyA9IHtOVUxMLCBOVUxMfTsKQEAgLTEyNCw2ICsx MjcsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQljYXNlICd2JzoKIAkJ CQl2ZXJib3NlID0gdHJ1ZTsKIAkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQljb25jdXJy ZW50bHkgPSB0cnVlOworCQkJCWJyZWFrOwogCQkJY2FzZSAyOgogCQkJCW1haW50ZW5hbmNl X2RiID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CkBAIC0xODIsNyArMTg4LDcg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQl9CiAKIAkJcmVpbmRleF9hbGxf ZGF0YWJhc2VzKG1haW50ZW5hbmNlX2RiLCBob3N0LCBwb3J0LCB1c2VybmFtZSwKLQkJCQkJ CQkgIHByb21wdF9wYXNzd29yZCwgcHJvZ25hbWUsIGVjaG8sIHF1aWV0LCB2ZXJib3NlKTsK KwkJCQkJCQkgIHByb21wdF9wYXNzd29yZCwgcHJvZ25hbWUsIGVjaG8sIHF1aWV0LCB2ZXJi b3NlLCBjb25jdXJyZW50bHkpOwogCX0KIAllbHNlIGlmIChzeXNjYXRhbG9nKQogCXsKQEAg LTIxMyw3ICsyMTksNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCX0KIAog CQlyZWluZGV4X3N5c3RlbV9jYXRhbG9ncyhkYm5hbWUsIGhvc3QsIHBvcnQsIHVzZXJuYW1l LCBwcm9tcHRfcGFzc3dvcmQsCi0JCQkJCQkJCXByb2duYW1lLCBlY2hvLCB2ZXJib3NlKTsK KwkJCQkJCQkJcHJvZ25hbWUsIGVjaG8sIHZlcmJvc2UsIGNvbmN1cnJlbnRseSk7CiAJfQog CWVsc2UKIAl7CkBAIC0yMzQsNyArMjQwLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQogCQkJZm9yIChjZWxsID0gc2NoZW1hcy5oZWFkOyBjZWxsOyBjZWxsID0gY2VsbC0+ bmV4dCkKIAkJCXsKIAkJCQlyZWluZGV4X29uZV9kYXRhYmFzZShjZWxsLT52YWwsIGRibmFt ZSwgIlNDSEVNQSIsIGhvc3QsIHBvcnQsCi0JCQkJCQkJCQkgdXNlcm5hbWUsIHByb21wdF9w YXNzd29yZCwgcHJvZ25hbWUsIGVjaG8sIHZlcmJvc2UpOworCQkJCQkJCQkJIHVzZXJuYW1l LCBwcm9tcHRfcGFzc3dvcmQsIHByb2duYW1lLCBlY2hvLCB2ZXJib3NlLCBjb25jdXJyZW50 bHkpOwogCQkJfQogCQl9CiAKQEAgLTI0NSw3ICsyNTEsNyBAQCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCiAJCQlmb3IgKGNlbGwgPSBpbmRleGVzLmhlYWQ7IGNlbGw7IGNlbGwg PSBjZWxsLT5uZXh0KQogCQkJewogCQkJCXJlaW5kZXhfb25lX2RhdGFiYXNlKGNlbGwtPnZh bCwgZGJuYW1lLCAiSU5ERVgiLCBob3N0LCBwb3J0LAotCQkJCQkJCQkJIHVzZXJuYW1lLCBw cm9tcHRfcGFzc3dvcmQsIHByb2duYW1lLCBlY2hvLCB2ZXJib3NlKTsKKwkJCQkJCQkJCSB1 c2VybmFtZSwgcHJvbXB0X3Bhc3N3b3JkLCBwcm9nbmFtZSwgZWNobywgdmVyYm9zZSwgY29u Y3VycmVudGx5KTsKIAkJCX0KIAkJfQogCQlpZiAodGFibGVzLmhlYWQgIT0gTlVMTCkKQEAg LTI1NSw3ICsyNjEsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQlmb3Ig KGNlbGwgPSB0YWJsZXMuaGVhZDsgY2VsbDsgY2VsbCA9IGNlbGwtPm5leHQpCiAJCQl7CiAJ CQkJcmVpbmRleF9vbmVfZGF0YWJhc2UoY2VsbC0+dmFsLCBkYm5hbWUsICJUQUJMRSIsIGhv c3QsIHBvcnQsCi0JCQkJCQkJCQkgdXNlcm5hbWUsIHByb21wdF9wYXNzd29yZCwgcHJvZ25h bWUsIGVjaG8sIHZlcmJvc2UpOworCQkJCQkJCQkJIHVzZXJuYW1lLCBwcm9tcHRfcGFzc3dv cmQsIHByb2duYW1lLCBlY2hvLCB2ZXJib3NlLCBjb25jdXJyZW50bHkpOwogCQkJfQogCQl9 CiAKQEAgLTI2NSw3ICsyNzEsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJ CSAqLwogCQlpZiAoaW5kZXhlcy5oZWFkID09IE5VTEwgJiYgdGFibGVzLmhlYWQgPT0gTlVM TCAmJiBzY2hlbWFzLmhlYWQgPT0gTlVMTCkKIAkJCXJlaW5kZXhfb25lX2RhdGFiYXNlKE5V TEwsIGRibmFtZSwgIkRBVEFCQVNFIiwgaG9zdCwgcG9ydCwKLQkJCQkJCQkJIHVzZXJuYW1l LCBwcm9tcHRfcGFzc3dvcmQsIHByb2duYW1lLCBlY2hvLCB2ZXJib3NlKTsKKwkJCQkJCQkJ IHVzZXJuYW1lLCBwcm9tcHRfcGFzc3dvcmQsIHByb2duYW1lLCBlY2hvLCB2ZXJib3NlLCBj b25jdXJyZW50bHkpOwogCX0KIAogCWV4aXQoMCk7CkBAIC0yNzUsNyArMjgxLDcgQEAgc3Rh dGljIHZvaWQKIHJlaW5kZXhfb25lX2RhdGFiYXNlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0 IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqdHlwZSwKIAkJCQkJIGNvbnN0IGNoYXIgKmhv c3QsIGNvbnN0IGNoYXIgKnBvcnQsIGNvbnN0IGNoYXIgKnVzZXJuYW1lLAogCQkJCQkgZW51 bSB0cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQsIGNvbnN0IGNoYXIgKnByb2duYW1lLCBib29s IGVjaG8sCi0JCQkJCSBib29sIHZlcmJvc2UpCisJCQkJCSBib29sIHZlcmJvc2UsIGJvb2wg Y29uY3VycmVudGx5KQogewogCVBRRXhwQnVmZmVyRGF0YSBzcWw7CiAKQEAgLTI4NCw2ICsy OTAsMTQgQEAgcmVpbmRleF9vbmVfZGF0YWJhc2UoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qg Y2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICp0eXBlLAogCWNvbm4gPSBjb25uZWN0RGF0YWJh c2UoZGJuYW1lLCBob3N0LCBwb3J0LCB1c2VybmFtZSwgcHJvbXB0X3Bhc3N3b3JkLAogCQkJ CQkJICAgcHJvZ25hbWUsIGVjaG8sIGZhbHNlLCBmYWxzZSk7CiAKKwlpZiAoY29uY3VycmVu dGx5ICYmIFBRc2VydmVyVmVyc2lvbihjb25uKSA8IDEyMDAwMCkKKwl7CisJCVBRZmluaXNo KGNvbm4pOworCQlmcHJpbnRmKHN0ZGVyciwgXygiJXM6IGNhbm5vdCB1c2UgdGhlIFwiJXNc IiBvcHRpb24gb24gc2VydmVyIHZlcnNpb25zIG9sZGVyIHRoYW4gUG9zdGdyZVNRTCAlc1xu IiksCisJCQkJcHJvZ25hbWUsICJjb25jdXJyZW50bHkiLCAiMTIiKTsKKwkJZXhpdCgxKTsK Kwl9CisKIAlpbml0UFFFeHBCdWZmZXIoJnNxbCk7CiAKIAlhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmc3FsLCAiUkVJTkRFWCAiKTsKQEAgLTI5Myw2ICszMDcsOCBAQCByZWluZGV4X29uZV9k YXRhYmFzZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNo YXIgKnR5cGUsCiAKIAlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmc3FsLCB0eXBlKTsKIAlhcHBl bmRQUUV4cEJ1ZmZlckNoYXIoJnNxbCwgJyAnKTsKKwlpZiAoY29uY3VycmVudGx5KQorCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cigmc3FsLCAiQ09OQ1VSUkVOVExZICIpOwogCWlmIChzdHJj bXAodHlwZSwgIlRBQkxFIikgPT0gMCB8fAogCQlzdHJjbXAodHlwZSwgIklOREVYIikgPT0g MCkKIAkJYXBwZW5kUXVhbGlmaWVkUmVsYXRpb24oJnNxbCwgbmFtZSwgY29ubiwgcHJvZ25h bWUsIGVjaG8pOwpAQCAtMzI4LDcgKzM0NCw4IEBAIHN0YXRpYyB2b2lkCiByZWluZGV4X2Fs bF9kYXRhYmFzZXMoY29uc3QgY2hhciAqbWFpbnRlbmFuY2VfZGIsCiAJCQkJCSAgY29uc3Qg Y2hhciAqaG9zdCwgY29uc3QgY2hhciAqcG9ydCwKIAkJCQkJICBjb25zdCBjaGFyICp1c2Vy bmFtZSwgZW51bSB0cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQsCi0JCQkJCSAgY29uc3QgY2hh ciAqcHJvZ25hbWUsIGJvb2wgZWNobywgYm9vbCBxdWlldCwgYm9vbCB2ZXJib3NlKQorCQkJ CQkgIGNvbnN0IGNoYXIgKnByb2duYW1lLCBib29sIGVjaG8sIGJvb2wgcXVpZXQsIGJvb2wg dmVyYm9zZSwKKwkJCQkJICBib29sIGNvbmN1cnJlbnRseSkKIHsKIAlQR2Nvbm4JICAgKmNv bm47CiAJUEdyZXN1bHQgICAqcmVzdWx0OwpAQCAtMzU3LDcgKzM3NCw3IEBAIHJlaW5kZXhf YWxsX2RhdGFiYXNlcyhjb25zdCBjaGFyICptYWludGVuYW5jZV9kYiwKIAogCQlyZWluZGV4 X29uZV9kYXRhYmFzZShOVUxMLCBjb25uc3RyLmRhdGEsICJEQVRBQkFTRSIsIGhvc3QsCiAJ CQkJCQkJIHBvcnQsIHVzZXJuYW1lLCBwcm9tcHRfcGFzc3dvcmQsCi0JCQkJCQkJIHByb2du YW1lLCBlY2hvLCB2ZXJib3NlKTsKKwkJCQkJCQkgcHJvZ25hbWUsIGVjaG8sIHZlcmJvc2Us IGNvbmN1cnJlbnRseSk7CiAJfQogCXRlcm1QUUV4cEJ1ZmZlcigmY29ubnN0cik7CiAKQEAg LTM2Nyw3ICszODQsNyBAQCByZWluZGV4X2FsbF9kYXRhYmFzZXMoY29uc3QgY2hhciAqbWFp bnRlbmFuY2VfZGIsCiBzdGF0aWMgdm9pZAogcmVpbmRleF9zeXN0ZW1fY2F0YWxvZ3MoY29u c3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFyICpwb3J0LAog CQkJCQkJY29uc3QgY2hhciAqdXNlcm5hbWUsIGVudW0gdHJpdmFsdWUgcHJvbXB0X3Bhc3N3 b3JkLAotCQkJCQkJY29uc3QgY2hhciAqcHJvZ25hbWUsIGJvb2wgZWNobywgYm9vbCB2ZXJi b3NlKQorCQkJCQkJY29uc3QgY2hhciAqcHJvZ25hbWUsIGJvb2wgZWNobywgYm9vbCB2ZXJi b3NlLCBib29sIGNvbmN1cnJlbnRseSkKIHsKIAlQR2Nvbm4JICAgKmNvbm47CiAJUFFFeHBC dWZmZXJEYXRhIHNxbDsKQEAgLTM4Miw3ICszOTksMTEgQEAgcmVpbmRleF9zeXN0ZW1fY2F0 YWxvZ3MoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFy ICpwb3J0LAogCWlmICh2ZXJib3NlKQogCQlhcHBlbmRQUUV4cEJ1ZmZlcigmc3FsLCAiIChW RVJCT1NFKSIpOwogCi0JYXBwZW5kUFFFeHBCdWZmZXIoJnNxbCwgIiBTWVNURU0gJXM7Iiwg Zm10SWQoUFFkYihjb25uKSkpOworCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZzcWwsICIgU1lT VEVNICIpOworCWlmIChjb25jdXJyZW50bHkpCisJCWFwcGVuZFBRRXhwQnVmZmVyKCZzcWws ICJDT05DVVJSRU5UTFkgIik7CisJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJnNxbCwgZm10SWQo UFFkYihjb25uKSkpOworCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcigmc3FsLCAnOycpOwogCiAJ aWYgKCFleGVjdXRlTWFpbnRlbmFuY2VDb21tYW5kKGNvbm4sIHNxbC5kYXRhLCBlY2hvKSkK IAl7CkBAIC00MDMsNiArNDI0LDcgQEAgaGVscChjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlw cmludGYoXygiICAlcyBbT1BUSU9OXS4uLiBbREJOQU1FXVxuIiksIHByb2duYW1lKTsKIAlw cmludGYoXygiXG5PcHRpb25zOlxuIikpOwogCXByaW50ZihfKCIgIC1hLCAtLWFsbCAgICAg ICAgICAgICAgICAgcmVpbmRleCBhbGwgZGF0YWJhc2VzXG4iKSk7CisJcHJpbnRmKF8oIiAg ICAgIC0tY29uY3VycmVudGx5ICAgICAgICByZWluZGV4IGNvbmN1cnJlbnRseVxuIikpOwog CXByaW50ZihfKCIgIC1kLCAtLWRibmFtZT1EQk5BTUUgICAgICAgZGF0YWJhc2UgdG8gcmVp bmRleFxuIikpOwogCXByaW50ZihfKCIgIC1lLCAtLWVjaG8gICAgICAgICAgICAgICAgc2hv dyB0aGUgY29tbWFuZHMgYmVpbmcgc2VudCB0byB0aGUgc2VydmVyXG4iKSk7CiAJcHJpbnRm KF8oIiAgLWksIC0taW5kZXg9SU5ERVggICAgICAgICByZWNyZWF0ZSBzcGVjaWZpYyBpbmRl eChlcykgb25seVxuIikpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9zY3JpcHRzL3QvMDkwX3Jl aW5kZXhkYi5wbCBiL3NyYy9iaW4vc2NyaXB0cy90LzA5MF9yZWluZGV4ZGIucGwKaW5kZXgg ZTU3YTVlMmJhZC4uZWY4M2JlNzY3YSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9zY3JpcHRzL3Qv MDkwX3JlaW5kZXhkYi5wbAorKysgYi9zcmMvYmluL3NjcmlwdHMvdC8wOTBfcmVpbmRleGRi LnBsCkBAIC0zLDcgKzMsNyBAQAogCiB1c2UgUG9zdGdyZXNOb2RlOwogdXNlIFRlc3RMaWI7 Ci11c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAyMzsKK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+ IDM0OwogCiBwcm9ncmFtX2hlbHBfb2soJ3JlaW5kZXhkYicpOwogcHJvZ3JhbV92ZXJzaW9u X29rKCdyZWluZGV4ZGInKTsKQEAgLTQzLDYgKzQzLDMzIEBACiAJcXIvc3RhdGVtZW50OiBS RUlOREVYIFwoVkVSQk9TRVwpIFRBQkxFIHB1YmxpY1wudGVzdDE7LywKIAkncmVpbmRleCB3 aXRoIHZlcmJvc2Ugb3V0cHV0Jyk7CiAKKyMgdGhlIHNhbWUgd2l0aCAtLWNvbmN1cnJlbnRs eQorJG5vZGUtPmlzc3Vlc19zcWxfbGlrZSgKKwlbICdyZWluZGV4ZGInLCAnLS1jb25jdXJy ZW50bHknLCAncG9zdGdyZXMnIF0sCisJcXIvc3RhdGVtZW50OiBSRUlOREVYIERBVEFCQVNF IENPTkNVUlJFTlRMWSBwb3N0Z3JlczsvLAorCSdTUUwgUkVJTkRFWCBDT05DVVJSRU5UTFkg cnVuJyk7CisKKyRub2RlLT5pc3N1ZXNfc3FsX2xpa2UoCisJWyAncmVpbmRleGRiJywgJy0t Y29uY3VycmVudGx5JywgJy10JywgJ3Rlc3QxJywgJ3Bvc3RncmVzJyBdLAorCXFyL3N0YXRl bWVudDogUkVJTkRFWCBUQUJMRSBDT05DVVJSRU5UTFkgcHVibGljXC50ZXN0MTsvLAorCSdy ZWluZGV4IHNwZWNpZmljIHRhYmxlIGNvbmN1cnJlbnRseScpOworJG5vZGUtPmlzc3Vlc19z cWxfbGlrZSgKKwlbICdyZWluZGV4ZGInLCAnLS1jb25jdXJyZW50bHknLCAnLWknLCAndGVz dDF4JywgJ3Bvc3RncmVzJyBdLAorCXFyL3N0YXRlbWVudDogUkVJTkRFWCBJTkRFWCBDT05D VVJSRU5UTFkgcHVibGljXC50ZXN0MXg7LywKKwkncmVpbmRleCBzcGVjaWZpYyBpbmRleCBj b25jdXJyZW50bHknKTsKKyRub2RlLT5pc3N1ZXNfc3FsX2xpa2UoCisJWyAncmVpbmRleGRi JywgJy0tY29uY3VycmVudGx5JywgJy1TJywgJ3B1YmxpYycsICdwb3N0Z3JlcycgXSwKKwlx ci9zdGF0ZW1lbnQ6IFJFSU5ERVggU0NIRU1BIENPTkNVUlJFTlRMWSBwdWJsaWM7LywKKwkn cmVpbmRleCBzcGVjaWZpYyBzY2hlbWEgY29uY3VycmVudGx5Jyk7Ciskbm9kZS0+Y29tbWFu ZF9mYWlscygKKwlbICdyZWluZGV4ZGInLCAnLS1jb25jdXJyZW50bHknLCAnLXMnLCAncG9z dGdyZXMnIF0sCisJJ3JlaW5kZXggc3lzdGVtIHRhYmxlcyBjb25jdXJyZW50bHknKTsKKyRu b2RlLT5pc3N1ZXNfc3FsX2xpa2UoCisJWyAncmVpbmRleGRiJywgJy12JywgJy10JywgJ3Rl c3QxJywgJ3Bvc3RncmVzJyBdLAorCXFyL3N0YXRlbWVudDogUkVJTkRFWCBcKFZFUkJPU0Vc KSBUQUJMRSBwdWJsaWNcLnRlc3QxOy8sCisJJ3JlaW5kZXggd2l0aCB2ZXJib3NlIG91dHB1 dCcpOworCisjIGNvbm5lY3Rpb24gc3RyaW5ncwogJG5vZGUtPmNvbW1hbmRfb2soW3F3KHJl aW5kZXhkYiAtLWVjaG8gLS10YWJsZT1wZ19hbSBkYm5hbWU9dGVtcGxhdGUxKV0sCiAJJ3Jl aW5kZXhkYiB0YWJsZSB3aXRoIGNvbm5lY3Rpb24gc3RyaW5nJyk7CiAkbm9kZS0+Y29tbWFu ZF9vaygKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvZGVwZW5kZW5jeS5oIGIv c3JjL2luY2x1ZGUvY2F0YWxvZy9kZXBlbmRlbmN5LmgKaW5kZXggZjUzN2YwMTU4Ny4uNGY5 ZGRlOWRmOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9kZXBlbmRlbmN5LmgK KysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9kZXBlbmRlbmN5LmgKQEAgLTEzNiw2ICsxMzYs NyBAQCB0eXBlZGVmIGVudW0gT2JqZWN0Q2xhc3MKICNkZWZpbmUgUEVSRk9STV9ERUxFVElP Tl9RVUlFVExZCQkJMHgwMDA0CS8qIHN1cHByZXNzIG5vdGljZXMgKi8KICNkZWZpbmUgUEVS Rk9STV9ERUxFVElPTl9TS0lQX09SSUdJTkFMCQkweDAwMDgJLyoga2VlcCBvcmlnaW5hbCBv YmogKi8KICNkZWZpbmUgUEVSRk9STV9ERUxFVElPTl9TS0lQX0VYVEVOU0lPTlMJMHgwMDEw CS8qIGtlZXAgZXh0ZW5zaW9ucyAqLworI2RlZmluZSBQRVJGT1JNX0RFTEVUSU9OX0NPTkNV UlJFTlRfTE9DSwkweDAwMjAJLyogbm9ybWFsIGRyb3Agd2l0aCBjb25jdXJyZW50IGxvY2sg bW9kZSAqLwogCiAKIC8qIGluIGRlcGVuZGVuY3kuYyAqLwpAQCAtMTk4LDYgKzE5OSw5IEBA IGV4dGVybiBsb25nIGNoYW5nZURlcGVuZGVuY3lGb3IoT2lkIGNsYXNzSWQsIE9pZCBvYmpl Y3RJZCwKIAkJCQkJT2lkIHJlZkNsYXNzSWQsIE9pZCBvbGRSZWZPYmplY3RJZCwKIAkJCQkJ T2lkIG5ld1JlZk9iamVjdElkKTsKIAorZXh0ZXJuIGxvbmcgY2hhbmdlRGVwZW5kZW5jaWVz T24oT2lkIHJlZkNsYXNzSWQsIE9pZCBvbGRSZWZPYmplY3RJZCwKKwkJCQkJCQkJIE9pZCBu ZXdSZWZPYmplY3RJZCk7CisKIGV4dGVybiBPaWQJZ2V0RXh0ZW5zaW9uT2ZPYmplY3QoT2lk IGNsYXNzSWQsIE9pZCBvYmplY3RJZCk7CiAKIGV4dGVybiBib29sIHNlcXVlbmNlSXNPd25l ZChPaWQgc2VxSWQsIGNoYXIgZGVwdHlwZSwgT2lkICp0YWJsZUlkLCBpbnQzMiAqY29sSWQp OwpAQCAtMjA4LDYgKzIxMiw4IEBAIGV4dGVybiBPaWQJZ2V0X2NvbnN0cmFpbnRfaW5kZXgo T2lkIGNvbnN0cmFpbnRJZCk7CiAKIGV4dGVybiBPaWQJZ2V0X2luZGV4X2NvbnN0cmFpbnQo T2lkIGluZGV4SWQpOwogCitleHRlcm4gTGlzdCAqZ2V0X2luZGV4X3JlZl9jb25zdHJhaW50 cyhPaWQgaW5kZXhJZCk7CisKIC8qIGluIHBnX3NoZGVwZW5kLmMgKi8KIAogZXh0ZXJuIHZv aWQgcmVjb3JkU2hhcmVkRGVwZW5kZW5jeU9uKE9iamVjdEFkZHJlc3MgKmRlcGVuZGVyLApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oIGIvc3JjL2luY2x1ZGUv Y2F0YWxvZy9pbmRleC5oCmluZGV4IDI5ZjdlZDYyMzcuLjcwYjM1YmRmY2IgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaAorKysgYi9zcmMvaW5jbHVkZS9jYXRh bG9nL2luZGV4LmgKQEAgLTc3LDYgKzc3LDIwIEBAIGV4dGVybiBPaWQgaW5kZXhfY3JlYXRl KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKICNkZWZpbmUJSU5ERVhfQ09OU1RSX0NSRUFURV9V UERBVEVfSU5ERVgJKDEgPDwgMykKICNkZWZpbmUJSU5ERVhfQ09OU1RSX0NSRUFURV9SRU1P VkVfT0xEX0RFUFMJKDEgPDwgNCkKIAorZXh0ZXJuIE9pZCBpbmRleF9jb25jdXJyZW50bHlf Y3JlYXRlX2NvcHkoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAorCQkJCQkJCQkJCSAgT2lkIG9s ZEluZGV4SWQsCisJCQkJCQkJCQkJICBjb25zdCBjaGFyICpuZXdOYW1lKTsKKworZXh0ZXJu IHZvaWQgaW5kZXhfY29uY3VycmVudGx5X2J1aWxkKE9pZCBoZWFwUmVsYXRpb25JZCwKKwkJ CQkJCQkJCSBPaWQgaW5kZXhSZWxhdGlvbklkKTsKKworZXh0ZXJuIHZvaWQgaW5kZXhfY29u Y3VycmVudGx5X3N3YXAoT2lkIG5ld0luZGV4SWQsCisJCQkJCQkJCQlPaWQgb2xkSW5kZXhJ ZCwKKwkJCQkJCQkJCWNvbnN0IGNoYXIgKm9sZE5hbWUpOworCitleHRlcm4gdm9pZCBpbmRl eF9jb25jdXJyZW50bHlfc2V0X2RlYWQoT2lkIGhlYXBJZCwKKwkJCQkJCQkJCQlPaWQgaW5k ZXhJZCk7CisKIGV4dGVybiBPYmplY3RBZGRyZXNzIGluZGV4X2NvbnN0cmFpbnRfY3JlYXRl KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQkJCU9pZCBpbmRleFJlbGF0aW9uSWQsCiAJ CQkJCQlPaWQgcGFyZW50Q29uc3RyYWludElkLApAQCAtODcsNyArMTAxLDcgQEAgZXh0ZXJu IE9iamVjdEFkZHJlc3MgaW5kZXhfY29uc3RyYWludF9jcmVhdGUoUmVsYXRpb24gaGVhcFJl bGF0aW9uLAogCQkJCQkJYm9vbCBhbGxvd19zeXN0ZW1fdGFibGVfbW9kcywKIAkJCQkJCWJv b2wgaXNfaW50ZXJuYWwpOwogCi1leHRlcm4gdm9pZCBpbmRleF9kcm9wKE9pZCBpbmRleElk LCBib29sIGNvbmN1cnJlbnQpOworZXh0ZXJuIHZvaWQgaW5kZXhfZHJvcChPaWQgaW5kZXhJ ZCwgYm9vbCBjb25jdXJyZW50LCBib29sIGNvbmN1cnJlbnRfbG9ja19tb2RlKTsKIAogZXh0 ZXJuIEluZGV4SW5mbyAqQnVpbGRJbmRleEluZm8oUmVsYXRpb24gaW5kZXgpOwogCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9kZWZyZW0uaCBiL3NyYy9pbmNsdWRlL2Nv bW1hbmRzL2RlZnJlbS5oCmluZGV4IDNiYzJlOGViMTYuLjdmNDk2MjU5ODcgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2RlZnJlbS5oCisrKyBiL3NyYy9pbmNsdWRlL2Nv bW1hbmRzL2RlZnJlbS5oCkBAIC0zNCwxMCArMzQsMTAgQEAgZXh0ZXJuIE9iamVjdEFkZHJl c3MgRGVmaW5lSW5kZXgoT2lkIHJlbGF0aW9uSWQsCiAJCQlib29sIGNoZWNrX25vdF9pbl91 c2UsCiAJCQlib29sIHNraXBfYnVpbGQsCiAJCQlib29sIHF1aWV0KTsKLWV4dGVybiB2b2lk IFJlaW5kZXhJbmRleChSYW5nZVZhciAqaW5kZXhSZWxhdGlvbiwgaW50IG9wdGlvbnMpOwot ZXh0ZXJuIE9pZAlSZWluZGV4VGFibGUoUmFuZ2VWYXIgKnJlbGF0aW9uLCBpbnQgb3B0aW9u cyk7CitleHRlcm4gdm9pZCBSZWluZGV4SW5kZXgoUmFuZ2VWYXIgKmluZGV4UmVsYXRpb24s IGludCBvcHRpb25zLCBib29sIGNvbmN1cnJlbnQpOworZXh0ZXJuIE9pZAlSZWluZGV4VGFi bGUoUmFuZ2VWYXIgKnJlbGF0aW9uLCBpbnQgb3B0aW9ucywgYm9vbCBjb25jdXJyZW50KTsK IGV4dGVybiB2b2lkIFJlaW5kZXhNdWx0aXBsZVRhYmxlcyhjb25zdCBjaGFyICpvYmplY3RO YW1lLCBSZWluZGV4T2JqZWN0VHlwZSBvYmplY3RLaW5kLAotCQkJCQkgIGludCBvcHRpb25z KTsKKwkJCQkJICBpbnQgb3B0aW9ucywgYm9vbCBjb25jdXJyZW50KTsKIGV4dGVybiBjaGFy ICptYWtlT2JqZWN0TmFtZShjb25zdCBjaGFyICpuYW1lMSwgY29uc3QgY2hhciAqbmFtZTIs CiAJCQkgICBjb25zdCBjaGFyICpsYWJlbCk7CiBleHRlcm4gY2hhciAqQ2hvb3NlUmVsYXRp b25OYW1lKGNvbnN0IGNoYXIgKm5hbWUxLCBjb25zdCBjaGFyICpuYW1lMiwKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVz L3BhcnNlbm9kZXMuaAppbmRleCBiZGQyYmQyZmQ5Li5lODFjNjI2OTEzIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9k ZXMvcGFyc2Vub2Rlcy5oCkBAIC0zMzA1LDYgKzMzMDUsNyBAQCB0eXBlZGVmIHN0cnVjdCBS ZWluZGV4U3RtdAogCVJhbmdlVmFyICAgKnJlbGF0aW9uOwkJLyogVGFibGUgb3IgaW5kZXgg dG8gcmVpbmRleCAqLwogCWNvbnN0IGNoYXIgKm5hbWU7CQkJLyogbmFtZSBvZiBkYXRhYmFz ZSB0byByZWluZGV4ICovCiAJaW50CQkJb3B0aW9uczsJCS8qIFJlaW5kZXggb3B0aW9ucyBm bGFncyAqLworCWJvb2wJCWNvbmN1cnJlbnQ7CQkvKiByZWluZGV4IGNvbmN1cnJlbnRseT8g Ki8KIH0gUmVpbmRleFN0bXQ7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAt LWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9yZWluZGV4LWNvbmN1cnJlbnRs eS5vdXQgYi9zcmMvdGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvcmVpbmRleC1jb25jdXJyZW50 bHkub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjllMDQxNjli MmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvcmVp bmRleC1jb25jdXJyZW50bHkub3V0CkBAIC0wLDAgKzEsNzggQEAKK1BhcnNlZCB0ZXN0IHNw ZWMgd2l0aCAzIHNlc3Npb25zCisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiByZWluZGV4IHNl bDEgdXBkMiBpbnMyIGRlbDIgZW5kMSBlbmQyCitzdGVwIHJlaW5kZXg6IFJFSU5ERVggVEFC TEUgQ09OQ1VSUkVOVExZIHJlaW5kX2Nvbl90YWI7CitzdGVwIHNlbDE6IFNFTEVDVCBkYXRh IEZST00gcmVpbmRfY29uX3RhYiBXSEVSRSBpZCA9IDM7CitkYXRhICAgICAgICAgICAKKwor YWFhYSAgICAgICAgICAgCitzdGVwIHVwZDI6IFVQREFURSByZWluZF9jb25fdGFiIFNFVCBk YXRhID0gJ2JiYmInIFdIRVJFIGlkID0gMzsKK3N0ZXAgaW5zMjogSU5TRVJUIElOVE8gcmVp bmRfY29uX3RhYihkYXRhKSBWQUxVRVMgKCdjY2NjJyk7CitzdGVwIGRlbDI6IERFTEVURSBG Uk9NIHJlaW5kX2Nvbl90YWIgV0hFUkUgZGF0YSA9ICdjY2NjJzsKK3N0ZXAgZW5kMTogQ09N TUlUOworc3RlcCBlbmQyOiBDT01NSVQ7CisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBzZWwx IHJlaW5kZXggdXBkMiBpbnMyIGRlbDIgZW5kMSBlbmQyCitzdGVwIHNlbDE6IFNFTEVDVCBk YXRhIEZST00gcmVpbmRfY29uX3RhYiBXSEVSRSBpZCA9IDM7CitkYXRhICAgICAgICAgICAK KworYWFhYSAgICAgICAgICAgCitzdGVwIHJlaW5kZXg6IFJFSU5ERVggVEFCTEUgQ09OQ1VS UkVOVExZIHJlaW5kX2Nvbl90YWI7IDx3YWl0aW5nIC4uLj4KK3N0ZXAgdXBkMjogVVBEQVRF IHJlaW5kX2Nvbl90YWIgU0VUIGRhdGEgPSAnYmJiYicgV0hFUkUgaWQgPSAzOworc3RlcCBp bnMyOiBJTlNFUlQgSU5UTyByZWluZF9jb25fdGFiKGRhdGEpIFZBTFVFUyAoJ2NjY2MnKTsK K3N0ZXAgZGVsMjogREVMRVRFIEZST00gcmVpbmRfY29uX3RhYiBXSEVSRSBkYXRhID0gJ2Nj Y2MnOworc3RlcCBlbmQxOiBDT01NSVQ7CitzdGVwIGVuZDI6IENPTU1JVDsKK3N0ZXAgcmVp bmRleDogPC4uLiBjb21wbGV0ZWQ+CisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBzZWwxIHVw ZDIgcmVpbmRleCBpbnMyIGRlbDIgZW5kMSBlbmQyCitzdGVwIHNlbDE6IFNFTEVDVCBkYXRh IEZST00gcmVpbmRfY29uX3RhYiBXSEVSRSBpZCA9IDM7CitkYXRhICAgICAgICAgICAKKwor YWFhYSAgICAgICAgICAgCitzdGVwIHVwZDI6IFVQREFURSByZWluZF9jb25fdGFiIFNFVCBk YXRhID0gJ2JiYmInIFdIRVJFIGlkID0gMzsKK3N0ZXAgcmVpbmRleDogUkVJTkRFWCBUQUJM RSBDT05DVVJSRU5UTFkgcmVpbmRfY29uX3RhYjsgPHdhaXRpbmcgLi4uPgorc3RlcCBpbnMy OiBJTlNFUlQgSU5UTyByZWluZF9jb25fdGFiKGRhdGEpIFZBTFVFUyAoJ2NjY2MnKTsKK3N0 ZXAgZGVsMjogREVMRVRFIEZST00gcmVpbmRfY29uX3RhYiBXSEVSRSBkYXRhID0gJ2NjY2Mn Oworc3RlcCBlbmQxOiBDT01NSVQ7CitzdGVwIGVuZDI6IENPTU1JVDsKK3N0ZXAgcmVpbmRl eDogPC4uLiBjb21wbGV0ZWQ+CisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBzZWwxIHVwZDIg aW5zMiByZWluZGV4IGRlbDIgZW5kMSBlbmQyCitzdGVwIHNlbDE6IFNFTEVDVCBkYXRhIEZS T00gcmVpbmRfY29uX3RhYiBXSEVSRSBpZCA9IDM7CitkYXRhICAgICAgICAgICAKKworYWFh YSAgICAgICAgICAgCitzdGVwIHVwZDI6IFVQREFURSByZWluZF9jb25fdGFiIFNFVCBkYXRh ID0gJ2JiYmInIFdIRVJFIGlkID0gMzsKK3N0ZXAgaW5zMjogSU5TRVJUIElOVE8gcmVpbmRf Y29uX3RhYihkYXRhKSBWQUxVRVMgKCdjY2NjJyk7CitzdGVwIHJlaW5kZXg6IFJFSU5ERVgg VEFCTEUgQ09OQ1VSUkVOVExZIHJlaW5kX2Nvbl90YWI7IDx3YWl0aW5nIC4uLj4KK3N0ZXAg ZGVsMjogREVMRVRFIEZST00gcmVpbmRfY29uX3RhYiBXSEVSRSBkYXRhID0gJ2NjY2MnOwor c3RlcCBlbmQxOiBDT01NSVQ7CitzdGVwIGVuZDI6IENPTU1JVDsKK3N0ZXAgcmVpbmRleDog PC4uLiBjb21wbGV0ZWQ+CisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBzZWwxIHVwZDIgaW5z MiBkZWwyIHJlaW5kZXggZW5kMSBlbmQyCitzdGVwIHNlbDE6IFNFTEVDVCBkYXRhIEZST00g cmVpbmRfY29uX3RhYiBXSEVSRSBpZCA9IDM7CitkYXRhICAgICAgICAgICAKKworYWFhYSAg ICAgICAgICAgCitzdGVwIHVwZDI6IFVQREFURSByZWluZF9jb25fdGFiIFNFVCBkYXRhID0g J2JiYmInIFdIRVJFIGlkID0gMzsKK3N0ZXAgaW5zMjogSU5TRVJUIElOVE8gcmVpbmRfY29u X3RhYihkYXRhKSBWQUxVRVMgKCdjY2NjJyk7CitzdGVwIGRlbDI6IERFTEVURSBGUk9NIHJl aW5kX2Nvbl90YWIgV0hFUkUgZGF0YSA9ICdjY2NjJzsKK3N0ZXAgcmVpbmRleDogUkVJTkRF WCBUQUJMRSBDT05DVVJSRU5UTFkgcmVpbmRfY29uX3RhYjsgPHdhaXRpbmcgLi4uPgorc3Rl cCBlbmQxOiBDT01NSVQ7CitzdGVwIGVuZDI6IENPTU1JVDsKK3N0ZXAgcmVpbmRleDogPC4u LiBjb21wbGV0ZWQ+CisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBzZWwxIHVwZDIgaW5zMiBk ZWwyIGVuZDEgcmVpbmRleCBlbmQyCitzdGVwIHNlbDE6IFNFTEVDVCBkYXRhIEZST00gcmVp bmRfY29uX3RhYiBXSEVSRSBpZCA9IDM7CitkYXRhICAgICAgICAgICAKKworYWFhYSAgICAg ICAgICAgCitzdGVwIHVwZDI6IFVQREFURSByZWluZF9jb25fdGFiIFNFVCBkYXRhID0gJ2Ji YmInIFdIRVJFIGlkID0gMzsKK3N0ZXAgaW5zMjogSU5TRVJUIElOVE8gcmVpbmRfY29uX3Rh YihkYXRhKSBWQUxVRVMgKCdjY2NjJyk7CitzdGVwIGRlbDI6IERFTEVURSBGUk9NIHJlaW5k X2Nvbl90YWIgV0hFUkUgZGF0YSA9ICdjY2NjJzsKK3N0ZXAgZW5kMTogQ09NTUlUOworc3Rl cCByZWluZGV4OiBSRUlOREVYIFRBQkxFIENPTkNVUlJFTlRMWSByZWluZF9jb25fdGFiOyA8 d2FpdGluZyAuLi4+CitzdGVwIGVuZDI6IENPTU1JVDsKK3N0ZXAgcmVpbmRleDogPC4uLiBj b21wbGV0ZWQ+CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9pc29sYXRpb24vaXNvbGF0aW9uX3Nj aGVkdWxlIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbl9zY2hlZHVsZQppbmRleCA3 MGQ0N2IzZTY4Li5mMWFlNTBlNWJhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9pc29sYXRpb24v aXNvbGF0aW9uX3NjaGVkdWxlCisrKyBiL3NyYy90ZXN0L2lzb2xhdGlvbi9pc29sYXRpb25f c2NoZWR1bGUKQEAgLTQyLDYgKzQyLDcgQEAgdGVzdDogbXVsdGl4YWN0LW5vLWZvcmdldAog dGVzdDogbG9jay1jb21taXR0ZWQtdXBkYXRlCiB0ZXN0OiBsb2NrLWNvbW1pdHRlZC1rZXl1 cGRhdGUKIHRlc3Q6IHVwZGF0ZS1sb2NrZWQtdHVwbGUKK3Rlc3Q6IHJlaW5kZXgtY29uY3Vy cmVudGx5CiB0ZXN0OiBwcm9wYWdhdGUtbG9jay1kZWxldGUKIHRlc3Q6IHR1cGxlbG9jay1j b25mbGljdAogdGVzdDogdHVwbGVsb2NrLXVwZGF0ZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv aXNvbGF0aW9uL3NwZWNzL3JlaW5kZXgtY29uY3VycmVudGx5LnNwZWMgYi9zcmMvdGVzdC9p c29sYXRpb24vc3BlY3MvcmVpbmRleC1jb25jdXJyZW50bHkuc3BlYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5lYjU5ZmUwY2JhCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL3JlaW5kZXgtY29uY3VycmVudGx5LnNwZWMK QEAgLTAsMCArMSw0MCBAQAorIyBSRUlOREVYIENPTkNVUlJFTlRMWQorIworIyBFbnN1cmUg dGhhdCBjb25jdXJyZW50IG9wZXJhdGlvbnMgd29yayBjb3JyZWN0bHkgd2hlbiBhIFJFSU5E RVggaXMgcGVyZm9ybWVkCisjIGNvbmN1cnJlbnRseS4KKworc2V0dXAKK3sKKwlDUkVBVEUg VEFCTEUgcmVpbmRfY29uX3RhYihpZCBzZXJpYWwgcHJpbWFyeSBrZXksIGRhdGEgdGV4dCk7 CisJSU5TRVJUIElOVE8gcmVpbmRfY29uX3RhYihkYXRhKSBWQUxVRVMgKCdhYScpOworCUlO U0VSVCBJTlRPIHJlaW5kX2Nvbl90YWIoZGF0YSkgVkFMVUVTICgnYWFhJyk7CisJSU5TRVJU IElOVE8gcmVpbmRfY29uX3RhYihkYXRhKSBWQUxVRVMgKCdhYWFhJyk7CisJSU5TRVJUIElO VE8gcmVpbmRfY29uX3RhYihkYXRhKSBWQUxVRVMgKCdhYWFhYScpOworfQorCit0ZWFyZG93 bgoreworCURST1AgVEFCTEUgcmVpbmRfY29uX3RhYjsKK30KKworc2Vzc2lvbiAiczEiCitz ZXR1cCB7IEJFR0lOOyB9CitzdGVwICJzZWwxIiB7IFNFTEVDVCBkYXRhIEZST00gcmVpbmRf Y29uX3RhYiBXSEVSRSBpZCA9IDM7IH0KK3N0ZXAgImVuZDEiIHsgQ09NTUlUOyB9CisKK3Nl c3Npb24gInMyIgorc2V0dXAgeyBCRUdJTjsgfQorc3RlcCAidXBkMiIgeyBVUERBVEUgcmVp bmRfY29uX3RhYiBTRVQgZGF0YSA9ICdiYmJiJyBXSEVSRSBpZCA9IDM7IH0KK3N0ZXAgImlu czIiIHsgSU5TRVJUIElOVE8gcmVpbmRfY29uX3RhYihkYXRhKSBWQUxVRVMgKCdjY2NjJyk7 IH0KK3N0ZXAgImRlbDIiIHsgREVMRVRFIEZST00gcmVpbmRfY29uX3RhYiBXSEVSRSBkYXRh ID0gJ2NjY2MnOyB9CitzdGVwICJlbmQyIiB7IENPTU1JVDsgfQorCitzZXNzaW9uICJzMyIK K3N0ZXAgInJlaW5kZXgiIHsgUkVJTkRFWCBUQUJMRSBDT05DVVJSRU5UTFkgcmVpbmRfY29u X3RhYjsgfQorCitwZXJtdXRhdGlvbiAicmVpbmRleCIgInNlbDEiICJ1cGQyIiAiaW5zMiIg ImRlbDIiICJlbmQxIiAiZW5kMiIKK3Blcm11dGF0aW9uICJzZWwxIiAicmVpbmRleCIgInVw ZDIiICJpbnMyIiAiZGVsMiIgImVuZDEiICJlbmQyIgorcGVybXV0YXRpb24gInNlbDEiICJ1 cGQyIiAicmVpbmRleCIgImluczIiICJkZWwyIiAiZW5kMSIgImVuZDIiCitwZXJtdXRhdGlv biAic2VsMSIgInVwZDIiICJpbnMyIiAicmVpbmRleCIgImRlbDIiICJlbmQxIiAiZW5kMiIK K3Blcm11dGF0aW9uICJzZWwxIiAidXBkMiIgImluczIiICJkZWwyIiAicmVpbmRleCIgImVu ZDEiICJlbmQyIgorcGVybXV0YXRpb24gInNlbDEiICJ1cGQyIiAiaW5zMiIgImRlbDIiICJl bmQxIiAicmVpbmRleCIgImVuZDIiCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Ny ZWF0ZV9pbmRleC5vdXQKaW5kZXggY2MzZGRhNGM3MC4uNmI3N2QyNWRlYiAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dApAQCAtMzI1MCw2ICsz MjUwLDEwMSBAQCBJTkZPOiAgaW5kZXggInJlaW5kZXhfdmVyYm9zZV9wa2V5IiB3YXMgcmVp bmRleGVkCiBcc2V0IFZFUkJPU0lUWSBkZWZhdWx0CiBEUk9QIFRBQkxFIHJlaW5kZXhfdmVy Ym9zZTsKIC0tCistLSBSRUlOREVYIENPTkNVUlJFTlRMWQorLS0KK0NSRUFURSBUQUJMRSBj b25jdXJfcmVpbmRleF90YWIgKGMxIGludCk7CistLSBSRUlOREVYCitSRUlOREVYIFRBQkxF IGNvbmN1cl9yZWluZGV4X3RhYjsgLS0gbm90aWNlCitOT1RJQ0U6ICB0YWJsZSAiY29uY3Vy X3JlaW5kZXhfdGFiIiBoYXMgbm8gaW5kZXhlcworUkVJTkRFWCBUQUJMRSBDT05DVVJSRU5U TFkgY29uY3VyX3JlaW5kZXhfdGFiOyAtLSBub3RpY2UKK05PVElDRTogIHRhYmxlICJjb25j dXJfcmVpbmRleF90YWIiIGhhcyBubyBpbmRleGVzCitBTFRFUiBUQUJMRSBjb25jdXJfcmVp bmRleF90YWIgQUREIENPTFVNTiBjMiB0ZXh0OyAtLSBhZGQgdG9hc3QgaW5kZXgKKy0tIE5v cm1hbCBpbmRleCB3aXRoIGludGVnZXIgY29sdW1uCitDUkVBVEUgVU5JUVVFIElOREVYIGNv bmN1cl9yZWluZGV4X2luZDEgT04gY29uY3VyX3JlaW5kZXhfdGFiKGMxKTsKKy0tIE5vcm1h bCBpbmRleCB3aXRoIHRleHQgY29sdW1uCitDUkVBVEUgSU5ERVggY29uY3VyX3JlaW5kZXhf aW5kMiBPTiBjb25jdXJfcmVpbmRleF90YWIoYzIpOworLS0gVU5JUVVFIGluZGV4IHdpdGgg ZXhwcmVzc2lvbgorQ1JFQVRFIFVOSVFVRSBJTkRFWCBjb25jdXJfcmVpbmRleF9pbmQzIE9O IGNvbmN1cl9yZWluZGV4X3RhYihhYnMoYzEpKTsKKy0tIER1cGxpY2F0ZSBjb2x1bW4gbmFt ZXMKK0NSRUFURSBJTkRFWCBjb25jdXJfcmVpbmRleF9pbmQ0IE9OIGNvbmN1cl9yZWluZGV4 X3RhYihjMSwgYzEsIGMyKTsKKy0tIENyZWF0ZSB0YWJsZSBmb3IgY2hlY2sgb24gZm9yZWln biBrZXkgZGVwZW5kZW5jZSBzd2l0Y2ggd2l0aCBpbmRleGVzIHN3YXBwZWQKK0FMVEVSIFRB QkxFIGNvbmN1cl9yZWluZGV4X3RhYiBBREQgUFJJTUFSWSBLRVkgVVNJTkcgSU5ERVggY29u Y3VyX3JlaW5kZXhfaW5kMTsKK0NSRUFURSBUQUJMRSBjb25jdXJfcmVpbmRleF90YWIyIChj MSBpbnQgUkVGRVJFTkNFUyBjb25jdXJfcmVpbmRleF90YWIpOworSU5TRVJUIElOVE8gY29u Y3VyX3JlaW5kZXhfdGFiIFZBTFVFUyAgKDEsICdhJyk7CitJTlNFUlQgSU5UTyBjb25jdXJf cmVpbmRleF90YWIgVkFMVUVTICAoMiwgJ2EnKTsKKy0tIFJlaW5kZXggY29uY3VycmVudGx5 IG9mIGV4Y2x1c2lvbiBjb25zdHJhaW50IGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkCitDUkVB VEUgVEFCTEUgY29uY3VyX3JlaW5kZXhfdGFiMyAoYzEgaW50LCBjMiBpbnQ0cmFuZ2UsIEVY Q0xVREUgVVNJTkcgZ2lzdCAoYzIgV0lUSCAmJikpOworSU5TRVJUIElOVE8gY29uY3VyX3Jl aW5kZXhfdGFiMyBWQUxVRVMgICgzLCAnWzEsMl0nKTsKK1JFSU5ERVggSU5ERVggQ09OQ1VS UkVOVExZICBjb25jdXJfcmVpbmRleF90YWIzX2MyX2V4Y2w7ICAtLSBlcnJvcgorRVJST1I6 ICBjb25jdXJyZW50IGluZGV4IGNyZWF0aW9uIGZvciBleGNsdXNpb24gY29uc3RyYWludHMg aXMgbm90IHN1cHBvcnRlZAorUkVJTkRFWCBUQUJMRSBDT05DVVJSRU5UTFkgY29uY3VyX3Jl aW5kZXhfdGFiMzsgIC0tIHN1Y2NlZWRzIHdpdGggd2FybmluZworV0FSTklORzogIGNhbm5v dCByZWluZGV4IGNvbmN1cnJlbnRseSBleGNsdXNpb24gY29uc3RyYWludCBpbmRleCAicHVi bGljLmNvbmN1cl9yZWluZGV4X3RhYjNfYzJfZXhjbCIsIHNraXBwaW5nCitJTlNFUlQgSU5U TyBjb25jdXJfcmVpbmRleF90YWIzIFZBTFVFUyAgKDQsICdbMiw0XScpOworRVJST1I6ICBj b25mbGljdGluZyBrZXkgdmFsdWUgdmlvbGF0ZXMgZXhjbHVzaW9uIGNvbnN0cmFpbnQgImNv bmN1cl9yZWluZGV4X3RhYjNfYzJfZXhjbCIKK0RFVEFJTDogIEtleSAoYzIpPShbMiw1KSkg Y29uZmxpY3RzIHdpdGggZXhpc3Rpbmcga2V5IChjMik9KFsxLDMpKS4KKy0tIENoZWNrIG1h dGVyaWFsaXplZCB2aWV3cworQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXIGNvbmN1cl9yZWlu ZGV4X21hdHZpZXcgQVMgU0VMRUNUICogRlJPTSBjb25jdXJfcmVpbmRleF90YWI7CitSRUlO REVYIElOREVYIENPTkNVUlJFTlRMWSBjb25jdXJfcmVpbmRleF9pbmQxOworUkVJTkRFWCBU QUJMRSBDT05DVVJSRU5UTFkgY29uY3VyX3JlaW5kZXhfdGFiOworUkVJTkRFWCBUQUJMRSBD T05DVVJSRU5UTFkgY29uY3VyX3JlaW5kZXhfbWF0dmlldzsKKy0tIENoZWNrIHRoYXQgY29t bWVudHMgYXJlIHByZXNlcnZlZAorQ1JFQVRFIFRBQkxFIHRlc3Rjb21tZW50IChpIGludCk7 CitDUkVBVEUgSU5ERVggdGVzdGNvbW1lbnRfaWR4MSBPTiB0ZXN0Y29tbWVudCAoaSk7CitD T01NRU5UIE9OIElOREVYIHRlc3Rjb21tZW50X2lkeDEgSVMgJ3Rlc3QgY29tbWVudCc7CitT RUxFQ1Qgb2JqX2Rlc2NyaXB0aW9uKCd0ZXN0Y29tbWVudF9pZHgxJzo6cmVnY2xhc3MsICdw Z19jbGFzcycpOworIG9ial9kZXNjcmlwdGlvbiAKKy0tLS0tLS0tLS0tLS0tLS0tCisgdGVz dCBjb21tZW50CisoMSByb3cpCisKK1JFSU5ERVggVEFCTEUgdGVzdGNvbW1lbnQ7CitTRUxF Q1Qgb2JqX2Rlc2NyaXB0aW9uKCd0ZXN0Y29tbWVudF9pZHgxJzo6cmVnY2xhc3MsICdwZ19j bGFzcycpOworIG9ial9kZXNjcmlwdGlvbiAKKy0tLS0tLS0tLS0tLS0tLS0tCisgdGVzdCBj b21tZW50CisoMSByb3cpCisKK1JFSU5ERVggVEFCTEUgQ09OQ1VSUkVOVExZIHRlc3Rjb21t ZW50IDsKK1NFTEVDVCBvYmpfZGVzY3JpcHRpb24oJ3Rlc3Rjb21tZW50X2lkeDEnOjpyZWdj bGFzcywgJ3BnX2NsYXNzJyk7Cisgb2JqX2Rlc2NyaXB0aW9uIAorLS0tLS0tLS0tLS0tLS0t LS0KKyB0ZXN0IGNvbW1lbnQKKygxIHJvdykKKworRFJPUCBUQUJMRSB0ZXN0Y29tbWVudDsK Ky0tIENoZWNrIGVycm9ycworLS0gQ2Fubm90IHJ1biBpbnNpZGUgYSB0cmFuc2FjdGlvbiBi bG9jaworQkVHSU47CitSRUlOREVYIFRBQkxFIENPTkNVUlJFTlRMWSBjb25jdXJfcmVpbmRl eF90YWI7CitFUlJPUjogIFJFSU5ERVggQ09OQ1VSUkVOVExZIGNhbm5vdCBydW4gaW5zaWRl IGEgdHJhbnNhY3Rpb24gYmxvY2sKK0NPTU1JVDsKK1JFSU5ERVggVEFCTEUgQ09OQ1VSUkVO VExZIHBnX2RhdGFiYXNlOyAtLSBubyBzaGFyZWQgcmVsYXRpb24KK0VSUk9SOiAgY29uY3Vy cmVudCBpbmRleCBjcmVhdGlvbiBvbiBzeXN0ZW0gY2F0YWxvZyB0YWJsZXMgaXMgbm90IHN1 cHBvcnRlZAorUkVJTkRFWCBUQUJMRSBDT05DVVJSRU5UTFkgcGdfY2xhc3M7IC0tIG5vIGNh dGFsb2cgcmVsYXRpb25zCitFUlJPUjogIGNvbmN1cnJlbnQgaW5kZXggY3JlYXRpb24gb24g c3lzdGVtIGNhdGFsb2cgdGFibGVzIGlzIG5vdCBzdXBwb3J0ZWQKK1JFSU5ERVggU1lTVEVN IENPTkNVUlJFTlRMWSBwb3N0Z3JlczsgLS0gbm90IGFsbG93ZWQgZm9yIFNZU1RFTQorRVJS T1I6ICBjb25jdXJyZW50IHJlaW5kZXggb2Ygc3lzdGVtIGNhdGFsb2dzIGlzIG5vdCBzdXBw b3J0ZWQKKy0tIFdhcm5zIGFib3V0IGNhdGFsb2cgcmVsYXRpb25zCitSRUlOREVYIFNDSEVN QSBDT05DVVJSRU5UTFkgcGdfY2F0YWxvZzsKK1dBUk5JTkc6ICBjb25jdXJyZW50IHJlaW5k ZXggaXMgbm90IHN1cHBvcnRlZCBmb3IgY2F0YWxvZyByZWxhdGlvbnMsIHNraXBwaW5nIGFs bAorLS0gQ2hlY2sgdGhlIHJlbGF0aW9uIHN0YXR1cywgdGhlcmUgc2hvdWxkIG5vdCBiZSBp bnZhbGlkIGluZGV4ZXMKK1xkIGNvbmN1cl9yZWluZGV4X3RhYgorICAgICAgICAgVGFibGUg InB1YmxpYy5jb25jdXJfcmVpbmRleF90YWIiCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxh dGlvbiB8IE51bGxhYmxlIHwgRGVmYXVsdCAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLQorIGMxICAgICB8IGludGVnZXIgfCAgICAgICAg ICAgfCBub3QgbnVsbCB8IAorIGMyICAgICB8IHRleHQgICAgfCAgICAgICAgICAgfCAgICAg ICAgICB8IAorSW5kZXhlczoKKyAgICAiY29uY3VyX3JlaW5kZXhfaW5kMSIgUFJJTUFSWSBL RVksIGJ0cmVlIChjMSkKKyAgICAiY29uY3VyX3JlaW5kZXhfaW5kMyIgVU5JUVVFLCBidHJl ZSAoYWJzKGMxKSkKKyAgICAiY29uY3VyX3JlaW5kZXhfaW5kMiIgYnRyZWUgKGMyKQorICAg ICJjb25jdXJfcmVpbmRleF9pbmQ0IiBidHJlZSAoYzEsIGMxLCBjMikKK1JlZmVyZW5jZWQg Ynk6CisgICAgVEFCTEUgImNvbmN1cl9yZWluZGV4X3RhYjIiIENPTlNUUkFJTlQgImNvbmN1 cl9yZWluZGV4X3RhYjJfYzFfZmtleSIgRk9SRUlHTiBLRVkgKGMxKSBSRUZFUkVOQ0VTIGNv bmN1cl9yZWluZGV4X3RhYihjMSkKKworRFJPUCBNQVRFUklBTElaRUQgVklFVyBjb25jdXJf cmVpbmRleF9tYXR2aWV3OworRFJPUCBUQUJMRSBjb25jdXJfcmVpbmRleF90YWIsIGNvbmN1 cl9yZWluZGV4X3RhYjIsIGNvbmN1cl9yZWluZGV4X3RhYjM7CistLQogLS0gUkVJTkRFWCBT Q0hFTUEKIC0tCiBSRUlOREVYIFNDSEVNQSBzY2hlbWFfdG9fcmVpbmRleDsgLS0gZmFpbHVy ZSwgc2NoZW1hIGRvZXMgbm90IGV4aXN0CkBAIC0zMzA4LDYgKzM0MDMsOCBAQCBCRUdJTjsK IFJFSU5ERVggU0NIRU1BIHNjaGVtYV90b19yZWluZGV4OyAtLSBmYWlsdXJlLCBjYW5ub3Qg cnVuIGluIGEgdHJhbnNhY3Rpb24KIEVSUk9SOiAgUkVJTkRFWCBTQ0hFTUEgY2Fubm90IHJ1 biBpbnNpZGUgYSB0cmFuc2FjdGlvbiBibG9jawogRU5EOworLS0gY29uY3VycmVudGx5CitS RUlOREVYIFNDSEVNQSBDT05DVVJSRU5UTFkgc2NoZW1hX3RvX3JlaW5kZXg7CiAtLSBGYWls dXJlIGZvciB1bmF1dGhvcml6ZWQgdXNlcgogQ1JFQVRFIFJPTEUgcmVncmVzc19yZWluZGV4 dXNlciBOT0xPR0lOOwogU0VUIFNFU1NJT04gUk9MRSByZWdyZXNzX3JlaW5kZXh1c2VyOwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbCBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwKaW5kZXggMTVjMGYxZjVkMS4u OWZmMmRjNjhmZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2lu ZGV4LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsCkBA IC0xMTcyLDYgKzExNzIsNjUgQEAgQ1JFQVRFIFRBQkxFIHJlaW5kZXhfdmVyYm9zZShpZCBp bnRlZ2VyIHByaW1hcnkga2V5KTsKIFxzZXQgVkVSQk9TSVRZIGRlZmF1bHQKIERST1AgVEFC TEUgcmVpbmRleF92ZXJib3NlOwogCistLQorLS0gUkVJTkRFWCBDT05DVVJSRU5UTFkKKy0t CitDUkVBVEUgVEFCTEUgY29uY3VyX3JlaW5kZXhfdGFiIChjMSBpbnQpOworLS0gUkVJTkRF WAorUkVJTkRFWCBUQUJMRSBjb25jdXJfcmVpbmRleF90YWI7IC0tIG5vdGljZQorUkVJTkRF WCBUQUJMRSBDT05DVVJSRU5UTFkgY29uY3VyX3JlaW5kZXhfdGFiOyAtLSBub3RpY2UKK0FM VEVSIFRBQkxFIGNvbmN1cl9yZWluZGV4X3RhYiBBREQgQ09MVU1OIGMyIHRleHQ7IC0tIGFk ZCB0b2FzdCBpbmRleAorLS0gTm9ybWFsIGluZGV4IHdpdGggaW50ZWdlciBjb2x1bW4KK0NS RUFURSBVTklRVUUgSU5ERVggY29uY3VyX3JlaW5kZXhfaW5kMSBPTiBjb25jdXJfcmVpbmRl eF90YWIoYzEpOworLS0gTm9ybWFsIGluZGV4IHdpdGggdGV4dCBjb2x1bW4KK0NSRUFURSBJ TkRFWCBjb25jdXJfcmVpbmRleF9pbmQyIE9OIGNvbmN1cl9yZWluZGV4X3RhYihjMik7Cist LSBVTklRVUUgaW5kZXggd2l0aCBleHByZXNzaW9uCitDUkVBVEUgVU5JUVVFIElOREVYIGNv bmN1cl9yZWluZGV4X2luZDMgT04gY29uY3VyX3JlaW5kZXhfdGFiKGFicyhjMSkpOworLS0g RHVwbGljYXRlIGNvbHVtbiBuYW1lcworQ1JFQVRFIElOREVYIGNvbmN1cl9yZWluZGV4X2lu ZDQgT04gY29uY3VyX3JlaW5kZXhfdGFiKGMxLCBjMSwgYzIpOworLS0gQ3JlYXRlIHRhYmxl IGZvciBjaGVjayBvbiBmb3JlaWduIGtleSBkZXBlbmRlbmNlIHN3aXRjaCB3aXRoIGluZGV4 ZXMgc3dhcHBlZAorQUxURVIgVEFCTEUgY29uY3VyX3JlaW5kZXhfdGFiIEFERCBQUklNQVJZ IEtFWSBVU0lORyBJTkRFWCBjb25jdXJfcmVpbmRleF9pbmQxOworQ1JFQVRFIFRBQkxFIGNv bmN1cl9yZWluZGV4X3RhYjIgKGMxIGludCBSRUZFUkVOQ0VTIGNvbmN1cl9yZWluZGV4X3Rh Yik7CitJTlNFUlQgSU5UTyBjb25jdXJfcmVpbmRleF90YWIgVkFMVUVTICAoMSwgJ2EnKTsK K0lOU0VSVCBJTlRPIGNvbmN1cl9yZWluZGV4X3RhYiBWQUxVRVMgICgyLCAnYScpOworLS0g UmVpbmRleCBjb25jdXJyZW50bHkgb2YgZXhjbHVzaW9uIGNvbnN0cmFpbnQgY3VycmVudGx5 IG5vdCBzdXBwb3J0ZWQKK0NSRUFURSBUQUJMRSBjb25jdXJfcmVpbmRleF90YWIzIChjMSBp bnQsIGMyIGludDRyYW5nZSwgRVhDTFVERSBVU0lORyBnaXN0IChjMiBXSVRIICYmKSk7CitJ TlNFUlQgSU5UTyBjb25jdXJfcmVpbmRleF90YWIzIFZBTFVFUyAgKDMsICdbMSwyXScpOwor UkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgIGNvbmN1cl9yZWluZGV4X3RhYjNfYzJfZXhj bDsgIC0tIGVycm9yCitSRUlOREVYIFRBQkxFIENPTkNVUlJFTlRMWSBjb25jdXJfcmVpbmRl eF90YWIzOyAgLS0gc3VjY2VlZHMgd2l0aCB3YXJuaW5nCitJTlNFUlQgSU5UTyBjb25jdXJf cmVpbmRleF90YWIzIFZBTFVFUyAgKDQsICdbMiw0XScpOworLS0gQ2hlY2sgbWF0ZXJpYWxp emVkIHZpZXdzCitDUkVBVEUgTUFURVJJQUxJWkVEIFZJRVcgY29uY3VyX3JlaW5kZXhfbWF0 dmlldyBBUyBTRUxFQ1QgKiBGUk9NIGNvbmN1cl9yZWluZGV4X3RhYjsKK1JFSU5ERVggSU5E RVggQ09OQ1VSUkVOVExZIGNvbmN1cl9yZWluZGV4X2luZDE7CitSRUlOREVYIFRBQkxFIENP TkNVUlJFTlRMWSBjb25jdXJfcmVpbmRleF90YWI7CitSRUlOREVYIFRBQkxFIENPTkNVUlJF TlRMWSBjb25jdXJfcmVpbmRleF9tYXR2aWV3OworLS0gQ2hlY2sgdGhhdCBjb21tZW50cyBh cmUgcHJlc2VydmVkCitDUkVBVEUgVEFCTEUgdGVzdGNvbW1lbnQgKGkgaW50KTsKK0NSRUFU RSBJTkRFWCB0ZXN0Y29tbWVudF9pZHgxIE9OIHRlc3Rjb21tZW50IChpKTsKK0NPTU1FTlQg T04gSU5ERVggdGVzdGNvbW1lbnRfaWR4MSBJUyAndGVzdCBjb21tZW50JzsKK1NFTEVDVCBv YmpfZGVzY3JpcHRpb24oJ3Rlc3Rjb21tZW50X2lkeDEnOjpyZWdjbGFzcywgJ3BnX2NsYXNz Jyk7CitSRUlOREVYIFRBQkxFIHRlc3Rjb21tZW50OworU0VMRUNUIG9ial9kZXNjcmlwdGlv bigndGVzdGNvbW1lbnRfaWR4MSc6OnJlZ2NsYXNzLCAncGdfY2xhc3MnKTsKK1JFSU5ERVgg VEFCTEUgQ09OQ1VSUkVOVExZIHRlc3Rjb21tZW50IDsKK1NFTEVDVCBvYmpfZGVzY3JpcHRp b24oJ3Rlc3Rjb21tZW50X2lkeDEnOjpyZWdjbGFzcywgJ3BnX2NsYXNzJyk7CitEUk9QIFRB QkxFIHRlc3Rjb21tZW50OworCistLSBDaGVjayBlcnJvcnMKKy0tIENhbm5vdCBydW4gaW5z aWRlIGEgdHJhbnNhY3Rpb24gYmxvY2sKK0JFR0lOOworUkVJTkRFWCBUQUJMRSBDT05DVVJS RU5UTFkgY29uY3VyX3JlaW5kZXhfdGFiOworQ09NTUlUOworUkVJTkRFWCBUQUJMRSBDT05D VVJSRU5UTFkgcGdfZGF0YWJhc2U7IC0tIG5vIHNoYXJlZCByZWxhdGlvbgorUkVJTkRFWCBU QUJMRSBDT05DVVJSRU5UTFkgcGdfY2xhc3M7IC0tIG5vIGNhdGFsb2cgcmVsYXRpb25zCitS RUlOREVYIFNZU1RFTSBDT05DVVJSRU5UTFkgcG9zdGdyZXM7IC0tIG5vdCBhbGxvd2VkIGZv ciBTWVNURU0KKy0tIFdhcm5zIGFib3V0IGNhdGFsb2cgcmVsYXRpb25zCitSRUlOREVYIFND SEVNQSBDT05DVVJSRU5UTFkgcGdfY2F0YWxvZzsKKworLS0gQ2hlY2sgdGhlIHJlbGF0aW9u IHN0YXR1cywgdGhlcmUgc2hvdWxkIG5vdCBiZSBpbnZhbGlkIGluZGV4ZXMKK1xkIGNvbmN1 cl9yZWluZGV4X3RhYgorRFJPUCBNQVRFUklBTElaRUQgVklFVyBjb25jdXJfcmVpbmRleF9t YXR2aWV3OworRFJPUCBUQUJMRSBjb25jdXJfcmVpbmRleF90YWIsIGNvbmN1cl9yZWluZGV4 X3RhYjIsIGNvbmN1cl9yZWluZGV4X3RhYjM7CisKIC0tCiAtLSBSRUlOREVYIFNDSEVNQQog LS0KQEAgLTEyMTQsNiArMTI3Myw5IEBAIENSRUFURSBUQUJMRSByZWluZGV4X2FmdGVyIEFT IFNFTEVDVCBvaWQsIHJlbG5hbWUsIHJlbGZpbGVub2RlLCByZWxraW5kCiBSRUlOREVYIFND SEVNQSBzY2hlbWFfdG9fcmVpbmRleDsgLS0gZmFpbHVyZSwgY2Fubm90IHJ1biBpbiBhIHRy YW5zYWN0aW9uCiBFTkQ7CiAKKy0tIGNvbmN1cnJlbnRseQorUkVJTkRFWCBTQ0hFTUEgQ09O Q1VSUkVOVExZIHNjaGVtYV90b19yZWluZGV4OworCiAtLSBGYWlsdXJlIGZvciB1bmF1dGhv cml6ZWQgdXNlcgogQ1JFQVRFIFJPTEUgcmVncmVzc19yZWluZGV4dXNlciBOT0xPR0lOOwog U0VUIFNFU1NJT04gUk9MRSByZWdyZXNzX3JlaW5kZXh1c2VyOwoKYmFzZS1jb21taXQ6IDE0 OGNmNWY0NjJlNTNmMzc0YTIwODViMmZhOGRjZGU5NDQ1MzliMDMKLS0gCjIuMjEuMAoK --------------538B636B40149E6883FF5BFE--