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 1gxDKB-0005Js-5v for pgsql-hackers@arkaria.postgresql.org; Fri, 22 Feb 2019 16:05:20 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1gxDK9-0004l6-PC for pgsql-hackers@arkaria.postgresql.org; Fri, 22 Feb 2019 16:05:17 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1gxDK8-0004kz-Jt for pgsql-hackers@lists.postgresql.org; Fri, 22 Feb 2019 16:05:17 +0000 Received: from out2-smtp.messagingengine.com ([66.111.4.26]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1gxDK3-0006FP-5x for pgsql-hackers@postgresql.org; Fri, 22 Feb 2019 16:05:16 +0000 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id A479921D0A for ; Fri, 22 Feb 2019 11:05:09 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Fri, 22 Feb 2019 11:05:09 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:message-id :mime-version:subject:to:x-me-proxy:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm2; bh=4YeblnzVLoMqN4qqHNFv/zUpFb5wR 6OyYCJmtCMC9iE=; b=vvuyZLZzou04zOeAZZyaXv6m4A/n2S2Lu9h4yPG7yFMG+ 4MspMfYDX7J3Ev4y0W/geoSrdk+WcURQsDyPfb6TZdgqwKQ+1jjaT9dF7CG+QFnO dozjx85psOu0x35TOGaCC8uPxzGZrqgBmCFG9Iwu9LHYpIh0wbRLybvFRJ20dZeU AIc4dW6SDmc3ZKD/WvSH7duEZjUqg2zWaXY+uxe29TsNDj1JYca4zTUK6bZc1EMU qrHYVczYKuO3D20n5q9DHNYSqz0PU73JJHDeZ0407+VL0D4el1oMiTApH2Ocb4pF koRpiXmMtBTIK371UlCncmsqTJD11IDqLYfq6PBhg== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddruddtgdekieculddtuddrgedtledrtddtmd cutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfhuthen uceurghilhhouhhtmecufedttdenucenucfjughrpefhuffvohfkffgfgggtsehmtderre dtfeejnecuhfhrohhmpefrvghtvghrucfgihhsvghnthhrrghuthcuoehpvghtvghrrdgv ihhsvghnthhrrghuthesvdhnughquhgrughrrghnthdrtghomheqnecuffhomhgrihhnpe dvnhguqhhurggurhgrnhhtrdgtohhmnecukfhppeelfedrvdegfedrjedvrdduudelnecu rfgrrhgrmhepmhgrihhlfhhrohhmpehpvghtvghrrdgvihhsvghnthhrrghuthesvdhnug hquhgrughrrghnthdrtghomhenucevlhhushhtvghrufhiiigvpedt X-ME-Proxy: Received: from april.pezone.net (p5df34877.dip0.t-ipconnect.de [93.243.72.119]) by mail.messagingengine.com (Postfix) with ESMTPA id D5C1210340 for ; Fri, 22 Feb 2019 11:05:07 -0500 (EST) From: Peter Eisentraut Subject: some ri_triggers.c cleanup 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= To: pgsql-hackers Organization: 2ndQuadrant Message-ID: <0ccdd3e1-10b0-dd05-d8a7-183507c11eb1@2ndquadrant.com> Date: Fri, 22 Feb 2019 17:05:06 +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 Content-Type: multipart/mixed; boundary="------------4573FA42DDAF0E00FE827686" 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. --------------4573FA42DDAF0E00FE827686 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit ri_triggers.c is endlessly long and repetitive. I want to clean it up a bit (more). I looked into all these switch cases for the unimplemented MATCH PARTIAL option. I toyed around with how a MATCH PARTIAL implementation would actually look like, and it likely wouldn't use the existing code structure anyway, so let's just simplify this for now. First, have ri_FetchConstraintInfo() check that riinfo->confmatchtype is valid. Then we don't have to repeat that everywhere. In the various referential action functions, we don't need to pay attention to the match type at all right now, so remove all that code. A future MATCH PARTIAL implementation would probably have some conditions added to the present code, but it won't need an entirely separate switch branch in each case. In RI_FKey_fk_upd_check_required(), reorganize the code to make it much simpler. Separately, the comment style is also very generous and wasteful with vertical space. That can be shrunk a bit. Attached are some patches. Final score: branch wc -l REL9_6_STABLE 3671 REL_10_STABLE 3668 REL_11_STABLE 3179 master 3034 patch 2695 -- Peter Eisentraut http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services --------------4573FA42DDAF0E00FE827686 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="0001-Remove-unnecessary-unused-MATCH-PARTIAL-code.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-Remove-unnecessary-unused-MATCH-PARTIAL-code.patch" RnJvbSBmMmNmMzhjOGE2Y2NmOTljZDNmZTc1NTg5ZjY2MWMwNmFlMzkzYTQ1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogRnJpLCAyMiBGZWIgMjAxOSAxMjo0NToxMSArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggMS8zXSBSZW1vdmUgdW5uZWNlc3NhcnkgdW51c2VkIE1BVENIIFBBUlRJQUwg Y29kZQoKcmlfdHJpZ2dlcnMuYyBzcGVuZHMgYSBsb3Qgb2Ygc3BhY2UgY2F0ZXJpbmcgdG8g YSBub3QteWV0LWltcGxlbWVudGVkCk1BVENIIFBBUlRJQUwgb3B0aW9uLiAgQW4gYWN0dWFs IGltcGxlbWVudGF0aW9uIHdvdWxkIHByb2JhYmx5IG5vdCB1c2UKdGhlIGV4aXN0aW5nIGNv ZGUgc3RydWN0dXJlIGFueXdheSwgc28gbGV0J3MganVzdCBzaW1wbGlmeSB0aGlzIGZvcgpu b3cuCgpGaXJzdCwgaGF2ZSByaV9GZXRjaENvbnN0cmFpbnRJbmZvKCkgY2hlY2sgdGhhdCBy aWluZm8tPmNvbmZtYXRjaHR5cGUKaXMgdmFsaWQuICBUaGVuIHdlIGRvbid0IGhhdmUgdG8g cmVwZWF0IHRoYXQgZXZlcnl3aGVyZS4KCkluIHRoZSB2YXJpb3VzIHJlZmVyZW50aWFsIGFj dGlvbiBmdW5jdGlvbnMsIHdlIGRvbid0IG5lZWQgdG8gcGF5CmF0dGVudGlvbiB0byB0aGUg bWF0Y2ggdHlwZSBhdCBhbGwgcmlnaHQgbm93LCBzbyByZW1vdmUgYWxsIHRoYXQgY29kZS4K QSBmdXR1cmUgTUFUQ0ggUEFSVElBTCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBwcm9iYWJseSBo YXZlIHNvbWUKY29uZGl0aW9ucyBhZGRlZCB0byB0aGUgcHJlc2VudCBjb2RlLCBidXQgaXQg d29uJ3QgbmVlZCBhbiBlbnRpcmVseQpzZXBhcmF0ZSBzd2l0Y2ggYnJhbmNoIGluIGVhY2gg Y2FzZS4KCkluIFJJX0ZLZXlfZmtfdXBkX2NoZWNrX3JlcXVpcmVkKCksIHJlb3JnYW5pemUg dGhlIGNvZGUgdG8gbWFrZSBpdAptdWNoIHNpbXBsZXIuCi0tLQogc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3JpX3RyaWdnZXJzLmMgfCAxMDgzICsrKysrKysrKysrLS0tLS0tLS0tLS0tLS0t LQogMSBmaWxlIGNoYW5nZWQsIDQzNSBpbnNlcnRpb25zKCspLCA2NDggZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwppbmRleCBlMWFhM2QwMDQ0Li44 ZTdlNmExYTY0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dl cnMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwpAQCAtMjAs MTQgKzIwLDYgQEAKICAqIC0tLS0tLS0tLS0KICAqLwogCi0KLS8qIC0tLS0tLS0tLS0KLSAq IEludGVybmFsIFRPRE86Ci0gKgotICoJCUFkZCBNQVRDSCBQQVJUSUFMIGxvZ2ljLgotICog LS0tLS0tLS0tLQotICovCi0KICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAi YWNjZXNzL2hlYXBhbS5oIgpAQCAtMzAzLDExICsyOTUsNiBAQCBSSV9GS2V5X2NoZWNrKFRy aWdnZXJEYXRhICp0cmlnZGF0YSkKIAlma19yZWwgPSB0cmlnZGF0YS0+dGdfcmVsYXRpb247 CiAJcGtfcmVsID0gdGFibGVfb3BlbihyaWluZm8tPnBrX3JlbGlkLCBSb3dTaGFyZUxvY2sp OwogCi0JaWYgKHJpaW5mby0+Y29uZm1hdGNodHlwZSA9PSBGS0NPTlNUUl9NQVRDSF9QQVJU SUFMKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9O T1RfU1VQUE9SVEVEKSwKLQkJCQkgZXJybXNnKCJNQVRDSCBQQVJUSUFMIG5vdCB5ZXQgaW1w bGVtZW50ZWQiKSkpOwotCiAJc3dpdGNoIChyaV9OdWxsQ2hlY2soUmVsYXRpb25HZXREZXNj cihma19yZWwpLCBuZXdfcm93LCByaWluZm8sIGZhbHNlKSkKIAl7CiAJCWNhc2UgUklfS0VZ U19BTExfTlVMTDoKQEAgLTM1Myw2ICszNDAsNyBAQCBSSV9GS2V5X2NoZWNrKFRyaWdnZXJE YXRhICp0cmlnZGF0YSkKIAkJCQkJdGFibGVfY2xvc2UocGtfcmVsLCBSb3dTaGFyZUxvY2sp OwogCQkJCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOwogCisjaWZkZWYgTk9UX1VT RUQKIAkJCQljYXNlIEZLQ09OU1RSX01BVENIX1BBUlRJQUw6CiAKIAkJCQkJLyoKQEAgLTM2 MSwxNiArMzQ5LDggQEAgUklfRktleV9jaGVjayhUcmlnZ2VyRGF0YSAqdHJpZ2RhdGEpCiAJ CQkJCSAqIHRvIG9ubHkgaW5jbHVkZSBub24tbnVsbCBjb2x1bW5zLCBvciBieSB3cml0aW5n IGEKIAkJCQkJICogc3BlY2lhbCB2ZXJzaW9uIGhlcmUpCiAJCQkJCSAqLwotCQkJCQllcmVw b3J0KEVSUk9SLAotCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9S VEVEKSwKLQkJCQkJCQkgZXJybXNnKCJNQVRDSCBQQVJUSUFMIG5vdCB5ZXQgaW1wbGVtZW50 ZWQiKSkpOwotCQkJCQl0YWJsZV9jbG9zZShwa19yZWwsIFJvd1NoYXJlTG9jayk7Ci0JCQkJ CXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7Ci0KLQkJCQlkZWZhdWx0OgotCQkJCQll bG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGNvbmZtYXRjaHR5cGU6ICVkIiwKLQkJCQkJCSBy aWluZm8tPmNvbmZtYXRjaHR5cGUpOwogCQkJCQlicmVhazsKKyNlbmRpZgogCQkJfQogCiAJ CWNhc2UgUklfS0VZU19OT05FX05VTEw6CkBAIC03MTEsMTIzICs2OTEsOTAgQEAgcmlfcmVz dHJpY3QoVHJpZ2dlckRhdGEgKnRyaWdkYXRhLCBib29sIGlzX25vX2FjdGlvbikKIAlwa19y ZWwgPSB0cmlnZGF0YS0+dGdfcmVsYXRpb247CiAJb2xkX3JvdyA9IHRyaWdkYXRhLT50Z190 cmlndHVwbGU7CiAKLQlzd2l0Y2ggKHJpaW5mby0+Y29uZm1hdGNodHlwZSkKKwkvKgorCSAq IElmIGFub3RoZXIgUEsgcm93IG5vdyBleGlzdHMgcHJvdmlkaW5nIHRoZSBvbGQga2V5IHZh bHVlcywgd2UKKwkgKiBzaG91bGQgbm90IGRvIGFueXRoaW5nLiAgSG93ZXZlciwgdGhpcyBj aGVjayBzaG91bGQgb25seSBiZQorCSAqIG1hZGUgaW4gdGhlIE5PIEFDVElPTiBjYXNlOyBp biBSRVNUUklDVCBjYXNlcyB3ZSBkb24ndCB3aXNoIHRvCisJICogYWxsb3cgYW5vdGhlciBy b3cgdG8gYmUgc3Vic3RpdHV0ZWQuCisJICovCisJaWYgKGlzX25vX2FjdGlvbiAmJgorCQly aV9DaGVja19Qa19NYXRjaChwa19yZWwsIGZrX3JlbCwgb2xkX3JvdywgcmlpbmZvKSkKIAl7 Ci0JCQkvKiAtLS0tLS0tLS0tCi0JCQkgKiBTUUw6MjAwOCAxNS4xNyA8RXhlY3V0aW9uIG9m IHJlZmVyZW50aWFsIGFjdGlvbnM+Ci0JCQkgKglHZW5lcmFsIHJ1bGVzIDkpIGEpIGl2KToK LQkJCSAqCQlNQVRDSCBTSU1QTEUvRlVMTAotCQkJICoJCQkuLi4gT04gREVMRVRFIFJFU1RS SUNUCi0JCQkgKglHZW5lcmFsIHJ1bGVzIDEwKSBhKSBpdik6Ci0JCQkgKgkJTUFUQ0ggU0lN UExFL0ZVTEwKLQkJCSAqCQkJLi4uIE9OIFVQREFURSBSRVNUUklDVAotCQkJICogLS0tLS0t LS0tLQotCQkJICovCi0JCWNhc2UgRktDT05TVFJfTUFUQ0hfU0lNUExFOgotCQljYXNlIEZL Q09OU1RSX01BVENIX0ZVTEw6Ci0KLQkJCS8qCi0JCQkgKiBJZiBhbm90aGVyIFBLIHJvdyBu b3cgZXhpc3RzIHByb3ZpZGluZyB0aGUgb2xkIGtleSB2YWx1ZXMsIHdlCi0JCQkgKiBzaG91 bGQgbm90IGRvIGFueXRoaW5nLiAgSG93ZXZlciwgdGhpcyBjaGVjayBzaG91bGQgb25seSBi ZQotCQkJICogbWFkZSBpbiB0aGUgTk8gQUNUSU9OIGNhc2U7IGluIFJFU1RSSUNUIGNhc2Vz IHdlIGRvbid0IHdpc2ggdG8KLQkJCSAqIGFsbG93IGFub3RoZXIgcm93IHRvIGJlIHN1YnN0 aXR1dGVkLgotCQkJICovCi0JCQlpZiAoaXNfbm9fYWN0aW9uICYmCi0JCQkJcmlfQ2hlY2tf UGtfTWF0Y2gocGtfcmVsLCBma19yZWwsIG9sZF9yb3csIHJpaW5mbykpCi0JCQl7Ci0JCQkJ dGFibGVfY2xvc2UoZmtfcmVsLCBSb3dTaGFyZUxvY2spOwotCQkJCXJldHVybiBQb2ludGVy R2V0RGF0dW0oTlVMTCk7Ci0JCQl9Ci0KLQkJCWlmIChTUElfY29ubmVjdCgpICE9IFNQSV9P S19DT05ORUNUKQotCQkJCWVsb2coRVJST1IsICJTUElfY29ubmVjdCBmYWlsZWQiKTsKKwkJ dGFibGVfY2xvc2UoZmtfcmVsLCBSb3dTaGFyZUxvY2spOworCQlyZXR1cm4gUG9pbnRlckdl dERhdHVtKE5VTEwpOworCX0KIAotCQkJLyoKLQkJCSAqIEZldGNoIG9yIHByZXBhcmUgYSBz YXZlZCBwbGFuIGZvciB0aGUgcmVzdHJpY3QgbG9va3VwIChpdCdzIHRoZQotCQkJICogc2Ft ZSBxdWVyeSBmb3IgZGVsZXRlIGFuZCB1cGRhdGUgY2FzZXMpCi0JCQkgKi8KLQkJCXJpX0J1 aWxkUXVlcnlLZXkoJnFrZXksIHJpaW5mbywgUklfUExBTl9SRVNUUklDVF9DSEVDS1JFRik7 CisJaWYgKFNQSV9jb25uZWN0KCkgIT0gU1BJX09LX0NPTk5FQ1QpCisJCWVsb2coRVJST1Is ICJTUElfY29ubmVjdCBmYWlsZWQiKTsKIAotCQkJaWYgKChxcGxhbiA9IHJpX0ZldGNoUHJl cGFyZWRQbGFuKCZxa2V5KSkgPT0gTlVMTCkKLQkJCXsKLQkJCQlTdHJpbmdJbmZvRGF0YSBx dWVyeWJ1ZjsKLQkJCQljaGFyCQlma3JlbG5hbWVbTUFYX1FVT1RFRF9SRUxfTkFNRV9MRU5d OwotCQkJCWNoYXIJCWF0dG5hbWVbTUFYX1FVT1RFRF9OQU1FX0xFTl07Ci0JCQkJY2hhcgkJ cGFyYW1uYW1lWzE2XTsKLQkJCQljb25zdCBjaGFyICpxdWVyeXNlcDsKLQkJCQlPaWQJCQlx dWVyeW9pZHNbUklfTUFYX05VTUtFWVNdOwotCQkJCWNvbnN0IGNoYXIgKmZrX29ubHk7Ci0J CQkJaW50CQkJaTsKLQotCQkJCS8qIC0tLS0tLS0tLS0KLQkJCQkgKiBUaGUgcXVlcnkgc3Ry aW5nIGJ1aWx0IGlzCi0JCQkJICoJU0VMRUNUIDEgRlJPTSBbT05MWV0gPGZrdGFibGU+IHgg V0hFUkUgJDEgPSBma2F0dDEgW0FORCAuLi5dCi0JCQkJICoJCSAgIEZPUiBLRVkgU0hBUkUg T0YgeAotCQkJCSAqIFRoZSB0eXBlIGlkJ3MgZm9yIHRoZSAkIHBhcmFtZXRlcnMgYXJlIHRo b3NlIG9mIHRoZQotCQkJCSAqIGNvcnJlc3BvbmRpbmcgUEsgYXR0cmlidXRlcy4KLQkJCQkg KiAtLS0tLS0tLS0tCi0JCQkJICovCi0JCQkJaW5pdFN0cmluZ0luZm8oJnF1ZXJ5YnVmKTsK LQkJCQlma19vbmx5ID0gZmtfcmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJU SVRJT05FRF9UQUJMRSA/Ci0JCQkJCSIiIDogIk9OTFkgIjsKLQkJCQlxdW90ZVJlbGF0aW9u TmFtZShma3JlbG5hbWUsIGZrX3JlbCk7Ci0JCQkJYXBwZW5kU3RyaW5nSW5mbygmcXVlcnli dWYsICJTRUxFQ1QgMSBGUk9NICVzJXMgeCIsCi0JCQkJCQkJCSBma19vbmx5LCBma3JlbG5h bWUpOwotCQkJCXF1ZXJ5c2VwID0gIldIRVJFIjsKLQkJCQlmb3IgKGkgPSAwOyBpIDwgcmlp bmZvLT5ua2V5czsgaSsrKQotCQkJCXsKLQkJCQkJT2lkCQkJcGtfdHlwZSA9IFJJQXR0VHlw ZShwa19yZWwsIHJpaW5mby0+cGtfYXR0bnVtc1tpXSk7Ci0JCQkJCU9pZAkJCWZrX3R5cGUg PSBSSUF0dFR5cGUoZmtfcmVsLCByaWluZm8tPmZrX2F0dG51bXNbaV0pOwotCi0JCQkJCXF1 b3RlT25lTmFtZShhdHRuYW1lLAotCQkJCQkJCQkgUklBdHROYW1lKGZrX3JlbCwgcmlpbmZv LT5ma19hdHRudW1zW2ldKSk7Ci0JCQkJCXNwcmludGYocGFyYW1uYW1lLCAiJCVkIiwgaSAr IDEpOwotCQkJCQlyaV9HZW5lcmF0ZVF1YWwoJnF1ZXJ5YnVmLCBxdWVyeXNlcCwKLQkJCQkJ CQkJCXBhcmFtbmFtZSwgcGtfdHlwZSwKLQkJCQkJCQkJCXJpaW5mby0+cGZfZXFfb3Byc1tp XSwKLQkJCQkJCQkJCWF0dG5hbWUsIGZrX3R5cGUpOwotCQkJCQlxdWVyeXNlcCA9ICJBTkQi OwotCQkJCQlxdWVyeW9pZHNbaV0gPSBwa190eXBlOwotCQkJCX0KLQkJCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZxdWVyeWJ1ZiwgIiBGT1IgS0VZIFNIQVJFIE9GIHgiKTsKKwkvKgor CSAqIEZldGNoIG9yIHByZXBhcmUgYSBzYXZlZCBwbGFuIGZvciB0aGUgcmVzdHJpY3QgbG9v a3VwIChpdCdzIHRoZQorCSAqIHNhbWUgcXVlcnkgZm9yIGRlbGV0ZSBhbmQgdXBkYXRlIGNh c2VzKQorCSAqLworCXJpX0J1aWxkUXVlcnlLZXkoJnFrZXksIHJpaW5mbywgUklfUExBTl9S RVNUUklDVF9DSEVDS1JFRik7CiAKLQkJCQkvKiBQcmVwYXJlIGFuZCBzYXZlIHRoZSBwbGFu ICovCi0JCQkJcXBsYW4gPSByaV9QbGFuQ2hlY2socXVlcnlidWYuZGF0YSwgcmlpbmZvLT5u a2V5cywgcXVlcnlvaWRzLAotCQkJCQkJCQkJICZxa2V5LCBma19yZWwsIHBrX3JlbCwgdHJ1 ZSk7Ci0JCQl9CisJaWYgKChxcGxhbiA9IHJpX0ZldGNoUHJlcGFyZWRQbGFuKCZxa2V5KSkg PT0gTlVMTCkKKwl7CisJCVN0cmluZ0luZm9EYXRhIHF1ZXJ5YnVmOworCQljaGFyCQlma3Jl bG5hbWVbTUFYX1FVT1RFRF9SRUxfTkFNRV9MRU5dOworCQljaGFyCQlhdHRuYW1lW01BWF9R VU9URURfTkFNRV9MRU5dOworCQljaGFyCQlwYXJhbW5hbWVbMTZdOworCQljb25zdCBjaGFy ICpxdWVyeXNlcDsKKwkJT2lkCQkJcXVlcnlvaWRzW1JJX01BWF9OVU1LRVlTXTsKKwkJY29u c3QgY2hhciAqZmtfb25seTsKKwkJaW50CQkJaTsKIAotCQkJLyoKLQkJCSAqIFdlIGhhdmUg YSBwbGFuIG5vdy4gUnVuIGl0IHRvIGNoZWNrIGZvciBleGlzdGluZyByZWZlcmVuY2VzLgot CQkJICovCi0JCQlyaV9QZXJmb3JtQ2hlY2socmlpbmZvLCAmcWtleSwgcXBsYW4sCi0JCQkJ CQkJZmtfcmVsLCBwa19yZWwsCi0JCQkJCQkJb2xkX3JvdywgTlVMTCwKLQkJCQkJCQl0cnVl LAkvKiBtdXN0IGRldGVjdCBuZXcgcm93cyAqLwotCQkJCQkJCVNQSV9PS19TRUxFQ1QpOwor CQkvKiAtLS0tLS0tLS0tCisJCSAqIFRoZSBxdWVyeSBzdHJpbmcgYnVpbHQgaXMKKwkJICoJ U0VMRUNUIDEgRlJPTSBbT05MWV0gPGZrdGFibGU+IHggV0hFUkUgJDEgPSBma2F0dDEgW0FO RCAuLi5dCisJCSAqCQkgICBGT1IgS0VZIFNIQVJFIE9GIHgKKwkJICogVGhlIHR5cGUgaWQn cyBmb3IgdGhlICQgcGFyYW1ldGVycyBhcmUgdGhvc2Ugb2YgdGhlCisJCSAqIGNvcnJlc3Bv bmRpbmcgUEsgYXR0cmlidXRlcy4KKwkJICogLS0tLS0tLS0tLQorCQkgKi8KKwkJaW5pdFN0 cmluZ0luZm8oJnF1ZXJ5YnVmKTsKKwkJZmtfb25seSA9IGZrX3JlbC0+cmRfcmVsLT5yZWxr aW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUgPworCQkJIiIgOiAiT05MWSAiOwor CQlxdW90ZVJlbGF0aW9uTmFtZShma3JlbG5hbWUsIGZrX3JlbCk7CisJCWFwcGVuZFN0cmlu Z0luZm8oJnF1ZXJ5YnVmLCAiU0VMRUNUIDEgRlJPTSAlcyVzIHgiLAorCQkJCQkJIGZrX29u bHksIGZrcmVsbmFtZSk7CisJCXF1ZXJ5c2VwID0gIldIRVJFIjsKKwkJZm9yIChpID0gMDsg aSA8IHJpaW5mby0+bmtleXM7IGkrKykKKwkJeworCQkJT2lkCQkJcGtfdHlwZSA9IFJJQXR0 VHlwZShwa19yZWwsIHJpaW5mby0+cGtfYXR0bnVtc1tpXSk7CisJCQlPaWQJCQlma190eXBl ID0gUklBdHRUeXBlKGZrX3JlbCwgcmlpbmZvLT5ma19hdHRudW1zW2ldKTsKIAotCQkJaWYg KFNQSV9maW5pc2goKSAhPSBTUElfT0tfRklOSVNIKQotCQkJCWVsb2coRVJST1IsICJTUElf ZmluaXNoIGZhaWxlZCIpOworCQkJcXVvdGVPbmVOYW1lKGF0dG5hbWUsCisJCQkJCQkgUklB dHROYW1lKGZrX3JlbCwgcmlpbmZvLT5ma19hdHRudW1zW2ldKSk7CisJCQlzcHJpbnRmKHBh cmFtbmFtZSwgIiQlZCIsIGkgKyAxKTsKKwkJCXJpX0dlbmVyYXRlUXVhbCgmcXVlcnlidWYs IHF1ZXJ5c2VwLAorCQkJCQkJCXBhcmFtbmFtZSwgcGtfdHlwZSwKKwkJCQkJCQlyaWluZm8t PnBmX2VxX29wcnNbaV0sCisJCQkJCQkJYXR0bmFtZSwgZmtfdHlwZSk7CisJCQlxdWVyeXNl cCA9ICJBTkQiOworCQkJcXVlcnlvaWRzW2ldID0gcGtfdHlwZTsKKwkJfQorCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKCZxdWVyeWJ1ZiwgIiBGT1IgS0VZIFNIQVJFIE9GIHgiKTsKIAot CQkJdGFibGVfY2xvc2UoZmtfcmVsLCBSb3dTaGFyZUxvY2spOworCQkvKiBQcmVwYXJlIGFu ZCBzYXZlIHRoZSBwbGFuICovCisJCXFwbGFuID0gcmlfUGxhbkNoZWNrKHF1ZXJ5YnVmLmRh dGEsIHJpaW5mby0+bmtleXMsIHF1ZXJ5b2lkcywKKwkJCQkJCQkgJnFrZXksIGZrX3JlbCwg cGtfcmVsLCB0cnVlKTsKKwl9CiAKLQkJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7 CisJLyoKKwkgKiBXZSBoYXZlIGEgcGxhbiBub3cuIFJ1biBpdCB0byBjaGVjayBmb3IgZXhp c3RpbmcgcmVmZXJlbmNlcy4KKwkgKi8KKwlyaV9QZXJmb3JtQ2hlY2socmlpbmZvLCAmcWtl eSwgcXBsYW4sCisJCQkJCWZrX3JlbCwgcGtfcmVsLAorCQkJCQlvbGRfcm93LCBOVUxMLAor CQkJCQl0cnVlLAkvKiBtdXN0IGRldGVjdCBuZXcgcm93cyAqLworCQkJCQlTUElfT0tfU0VM RUNUKTsKIAotCQkJLyoKLQkJCSAqIEhhbmRsZSBNQVRDSCBQQVJUSUFMIHJlc3RyaWN0IGRl bGV0ZSBvciB1cGRhdGUuCi0JCQkgKi8KLQkJY2FzZSBGS0NPTlNUUl9NQVRDSF9QQVJUSUFM OgotCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05P VF9TVVBQT1JURUQpLAotCQkJCQkgZXJybXNnKCJNQVRDSCBQQVJUSUFMIG5vdCB5ZXQgaW1w bGVtZW50ZWQiKSkpOwotCQkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKKwlpZiAo U1BJX2ZpbmlzaCgpICE9IFNQSV9PS19GSU5JU0gpCisJCWVsb2coRVJST1IsICJTUElfZmlu aXNoIGZhaWxlZCIpOwogCi0JCWRlZmF1bHQ6Ci0JCQllbG9nKEVSUk9SLCAidW5yZWNvZ25p emVkIGNvbmZtYXRjaHR5cGU6ICVkIiwKLQkJCQkgcmlpbmZvLT5jb25mbWF0Y2h0eXBlKTsK LQkJCWJyZWFrOwotCX0KKwl0YWJsZV9jbG9zZShma19yZWwsIFJvd1NoYXJlTG9jayk7CiAK LQkvKiBOZXZlciByZWFjaGVkICovCiAJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsK IH0KIApAQCAtODcxLDEwMyArODE4LDc0IEBAIFJJX0ZLZXlfY2FzY2FkZV9kZWwoUEdfRlVO Q1RJT05fQVJHUykKIAlwa19yZWwgPSB0cmlnZGF0YS0+dGdfcmVsYXRpb247CiAJb2xkX3Jv dyA9IHRyaWdkYXRhLT50Z190cmlndHVwbGU7CiAKLQlzd2l0Y2ggKHJpaW5mby0+Y29uZm1h dGNodHlwZSkKLQl7Ci0JCQkvKiAtLS0tLS0tLS0tCi0JCQkgKiBTUUw6MjAwOCAxNS4xNyA8 RXhlY3V0aW9uIG9mIHJlZmVyZW50aWFsIGFjdGlvbnM+Ci0JCQkgKglHZW5lcmFsIHJ1bGVz IDkpIGEpIGkpOgotCQkJICoJCU1BVENIIFNJTVBMRS9GVUxMCi0JCQkgKgkJCS4uLiBPTiBE RUxFVEUgQ0FTQ0FERQotCQkJICogLS0tLS0tLS0tLQotCQkJICovCi0JCWNhc2UgRktDT05T VFJfTUFUQ0hfU0lNUExFOgotCQljYXNlIEZLQ09OU1RSX01BVENIX0ZVTEw6Ci0JCQlpZiAo U1BJX2Nvbm5lY3QoKSAhPSBTUElfT0tfQ09OTkVDVCkKLQkJCQllbG9nKEVSUk9SLCAiU1BJ X2Nvbm5lY3QgZmFpbGVkIik7Ci0KLQkJCS8qCi0JCQkgKiBGZXRjaCBvciBwcmVwYXJlIGEg c2F2ZWQgcGxhbiBmb3IgdGhlIGNhc2NhZGVkIGRlbGV0ZQotCQkJICovCi0JCQlyaV9CdWls ZFF1ZXJ5S2V5KCZxa2V5LCByaWluZm8sIFJJX1BMQU5fQ0FTQ0FERV9ERUxfRE9ERUxFVEUp OworCWlmIChTUElfY29ubmVjdCgpICE9IFNQSV9PS19DT05ORUNUKQorCQllbG9nKEVSUk9S LCAiU1BJX2Nvbm5lY3QgZmFpbGVkIik7CiAKLQkJCWlmICgocXBsYW4gPSByaV9GZXRjaFBy ZXBhcmVkUGxhbigmcWtleSkpID09IE5VTEwpCi0JCQl7Ci0JCQkJU3RyaW5nSW5mb0RhdGEg cXVlcnlidWY7Ci0JCQkJY2hhcgkJZmtyZWxuYW1lW01BWF9RVU9URURfUkVMX05BTUVfTEVO XTsKLQkJCQljaGFyCQlhdHRuYW1lW01BWF9RVU9URURfTkFNRV9MRU5dOwotCQkJCWNoYXIJ CXBhcmFtbmFtZVsxNl07Ci0JCQkJY29uc3QgY2hhciAqcXVlcnlzZXA7Ci0JCQkJT2lkCQkJ cXVlcnlvaWRzW1JJX01BWF9OVU1LRVlTXTsKLQkJCQljb25zdCBjaGFyICpma19vbmx5Owot Ci0JCQkJLyogLS0tLS0tLS0tLQotCQkJCSAqIFRoZSBxdWVyeSBzdHJpbmcgYnVpbHQgaXMK LQkJCQkgKglERUxFVEUgRlJPTSBbT05MWV0gPGZrdGFibGU+IFdIRVJFICQxID0gZmthdHQx IFtBTkQgLi4uXQotCQkJCSAqIFRoZSB0eXBlIGlkJ3MgZm9yIHRoZSAkIHBhcmFtZXRlcnMg YXJlIHRob3NlIG9mIHRoZQotCQkJCSAqIGNvcnJlc3BvbmRpbmcgUEsgYXR0cmlidXRlcy4K LQkJCQkgKiAtLS0tLS0tLS0tCi0JCQkJICovCi0JCQkJaW5pdFN0cmluZ0luZm8oJnF1ZXJ5 YnVmKTsKLQkJCQlma19vbmx5ID0gZmtfcmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lO RF9QQVJUSVRJT05FRF9UQUJMRSA/Ci0JCQkJCSIiIDogIk9OTFkgIjsKLQkJCQlxdW90ZVJl bGF0aW9uTmFtZShma3JlbG5hbWUsIGZrX3JlbCk7Ci0JCQkJYXBwZW5kU3RyaW5nSW5mbygm cXVlcnlidWYsICJERUxFVEUgRlJPTSAlcyVzIiwKLQkJCQkJCQkJIGZrX29ubHksIGZrcmVs bmFtZSk7Ci0JCQkJcXVlcnlzZXAgPSAiV0hFUkUiOwotCQkJCWZvciAoaSA9IDA7IGkgPCBy aWluZm8tPm5rZXlzOyBpKyspCi0JCQkJewotCQkJCQlPaWQJCQlwa190eXBlID0gUklBdHRU eXBlKHBrX3JlbCwgcmlpbmZvLT5wa19hdHRudW1zW2ldKTsKLQkJCQkJT2lkCQkJZmtfdHlw ZSA9IFJJQXR0VHlwZShma19yZWwsIHJpaW5mby0+ZmtfYXR0bnVtc1tpXSk7Ci0KLQkJCQkJ cXVvdGVPbmVOYW1lKGF0dG5hbWUsCi0JCQkJCQkJCSBSSUF0dE5hbWUoZmtfcmVsLCByaWlu Zm8tPmZrX2F0dG51bXNbaV0pKTsKLQkJCQkJc3ByaW50ZihwYXJhbW5hbWUsICIkJWQiLCBp ICsgMSk7Ci0JCQkJCXJpX0dlbmVyYXRlUXVhbCgmcXVlcnlidWYsIHF1ZXJ5c2VwLAotCQkJ CQkJCQkJcGFyYW1uYW1lLCBwa190eXBlLAotCQkJCQkJCQkJcmlpbmZvLT5wZl9lcV9vcHJz W2ldLAotCQkJCQkJCQkJYXR0bmFtZSwgZmtfdHlwZSk7Ci0JCQkJCXF1ZXJ5c2VwID0gIkFO RCI7Ci0JCQkJCXF1ZXJ5b2lkc1tpXSA9IHBrX3R5cGU7Ci0JCQkJfQorCS8qCisJICogRmV0 Y2ggb3IgcHJlcGFyZSBhIHNhdmVkIHBsYW4gZm9yIHRoZSBjYXNjYWRlZCBkZWxldGUKKwkg Ki8KKwlyaV9CdWlsZFF1ZXJ5S2V5KCZxa2V5LCByaWluZm8sIFJJX1BMQU5fQ0FTQ0FERV9E RUxfRE9ERUxFVEUpOwogCi0JCQkJLyogUHJlcGFyZSBhbmQgc2F2ZSB0aGUgcGxhbiAqLwot CQkJCXFwbGFuID0gcmlfUGxhbkNoZWNrKHF1ZXJ5YnVmLmRhdGEsIHJpaW5mby0+bmtleXMs IHF1ZXJ5b2lkcywKLQkJCQkJCQkJCSAmcWtleSwgZmtfcmVsLCBwa19yZWwsIHRydWUpOwot CQkJfQorCWlmICgocXBsYW4gPSByaV9GZXRjaFByZXBhcmVkUGxhbigmcWtleSkpID09IE5V TEwpCisJeworCQlTdHJpbmdJbmZvRGF0YSBxdWVyeWJ1ZjsKKwkJY2hhcgkJZmtyZWxuYW1l W01BWF9RVU9URURfUkVMX05BTUVfTEVOXTsKKwkJY2hhcgkJYXR0bmFtZVtNQVhfUVVPVEVE X05BTUVfTEVOXTsKKwkJY2hhcgkJcGFyYW1uYW1lWzE2XTsKKwkJY29uc3QgY2hhciAqcXVl cnlzZXA7CisJCU9pZAkJCXF1ZXJ5b2lkc1tSSV9NQVhfTlVNS0VZU107CisJCWNvbnN0IGNo YXIgKmZrX29ubHk7CiAKLQkJCS8qCi0JCQkgKiBXZSBoYXZlIGEgcGxhbiBub3cuIEJ1aWxk IHVwIHRoZSBhcmd1bWVudHMgZnJvbSB0aGUga2V5IHZhbHVlcwotCQkJICogaW4gdGhlIGRl bGV0ZWQgUEsgdHVwbGUgYW5kIGRlbGV0ZSB0aGUgcmVmZXJlbmNpbmcgcm93cwotCQkJICov Ci0JCQlyaV9QZXJmb3JtQ2hlY2socmlpbmZvLCAmcWtleSwgcXBsYW4sCi0JCQkJCQkJZmtf cmVsLCBwa19yZWwsCi0JCQkJCQkJb2xkX3JvdywgTlVMTCwKLQkJCQkJCQl0cnVlLAkvKiBt dXN0IGRldGVjdCBuZXcgcm93cyAqLwotCQkJCQkJCVNQSV9PS19ERUxFVEUpOworCQkvKiAt LS0tLS0tLS0tCisJCSAqIFRoZSBxdWVyeSBzdHJpbmcgYnVpbHQgaXMKKwkJICoJREVMRVRF IEZST00gW09OTFldIDxma3RhYmxlPiBXSEVSRSAkMSA9IGZrYXR0MSBbQU5EIC4uLl0KKwkJ ICogVGhlIHR5cGUgaWQncyBmb3IgdGhlICQgcGFyYW1ldGVycyBhcmUgdGhvc2Ugb2YgdGhl CisJCSAqIGNvcnJlc3BvbmRpbmcgUEsgYXR0cmlidXRlcy4KKwkJICogLS0tLS0tLS0tLQor CQkgKi8KKwkJaW5pdFN0cmluZ0luZm8oJnF1ZXJ5YnVmKTsKKwkJZmtfb25seSA9IGZrX3Jl bC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUgPworCQkJ IiIgOiAiT05MWSAiOworCQlxdW90ZVJlbGF0aW9uTmFtZShma3JlbG5hbWUsIGZrX3JlbCk7 CisJCWFwcGVuZFN0cmluZ0luZm8oJnF1ZXJ5YnVmLCAiREVMRVRFIEZST00gJXMlcyIsCisJ CQkJCQkgZmtfb25seSwgZmtyZWxuYW1lKTsKKwkJcXVlcnlzZXAgPSAiV0hFUkUiOworCQlm b3IgKGkgPSAwOyBpIDwgcmlpbmZvLT5ua2V5czsgaSsrKQorCQl7CisJCQlPaWQJCQlwa190 eXBlID0gUklBdHRUeXBlKHBrX3JlbCwgcmlpbmZvLT5wa19hdHRudW1zW2ldKTsKKwkJCU9p ZAkJCWZrX3R5cGUgPSBSSUF0dFR5cGUoZmtfcmVsLCByaWluZm8tPmZrX2F0dG51bXNbaV0p OwogCi0JCQlpZiAoU1BJX2ZpbmlzaCgpICE9IFNQSV9PS19GSU5JU0gpCi0JCQkJZWxvZyhF UlJPUiwgIlNQSV9maW5pc2ggZmFpbGVkIik7CisJCQlxdW90ZU9uZU5hbWUoYXR0bmFtZSwK KwkJCQkJCSBSSUF0dE5hbWUoZmtfcmVsLCByaWluZm8tPmZrX2F0dG51bXNbaV0pKTsKKwkJ CXNwcmludGYocGFyYW1uYW1lLCAiJCVkIiwgaSArIDEpOworCQkJcmlfR2VuZXJhdGVRdWFs KCZxdWVyeWJ1ZiwgcXVlcnlzZXAsCisJCQkJCQkJcGFyYW1uYW1lLCBwa190eXBlLAorCQkJ CQkJCXJpaW5mby0+cGZfZXFfb3Byc1tpXSwKKwkJCQkJCQlhdHRuYW1lLCBma190eXBlKTsK KwkJCXF1ZXJ5c2VwID0gIkFORCI7CisJCQlxdWVyeW9pZHNbaV0gPSBwa190eXBlOworCQl9 CiAKLQkJCXRhYmxlX2Nsb3NlKGZrX3JlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJCS8qIFBy ZXBhcmUgYW5kIHNhdmUgdGhlIHBsYW4gKi8KKwkJcXBsYW4gPSByaV9QbGFuQ2hlY2socXVl cnlidWYuZGF0YSwgcmlpbmZvLT5ua2V5cywgcXVlcnlvaWRzLAorCQkJCQkJCSAmcWtleSwg ZmtfcmVsLCBwa19yZWwsIHRydWUpOworCX0KIAotCQkJcmV0dXJuIFBvaW50ZXJHZXREYXR1 bShOVUxMKTsKKwkvKgorCSAqIFdlIGhhdmUgYSBwbGFuIG5vdy4gQnVpbGQgdXAgdGhlIGFy Z3VtZW50cyBmcm9tIHRoZSBrZXkgdmFsdWVzCisJICogaW4gdGhlIGRlbGV0ZWQgUEsgdHVw bGUgYW5kIGRlbGV0ZSB0aGUgcmVmZXJlbmNpbmcgcm93cworCSAqLworCXJpX1BlcmZvcm1D aGVjayhyaWluZm8sICZxa2V5LCBxcGxhbiwKKwkJCQkJZmtfcmVsLCBwa19yZWwsCisJCQkJ CW9sZF9yb3csIE5VTEwsCisJCQkJCXRydWUsCS8qIG11c3QgZGV0ZWN0IG5ldyByb3dzICov CisJCQkJCVNQSV9PS19ERUxFVEUpOwogCi0JCQkvKgotCQkJICogSGFuZGxlIE1BVENIIFBB UlRJQUwgY2FzY2FkZWQgZGVsZXRlLgotCQkJICovCi0JCWNhc2UgRktDT05TVFJfTUFUQ0hf UEFSVElBTDoKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfRkVB VFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkJIGVycm1zZygiTUFUQ0ggUEFSVElBTCBub3Qg eWV0IGltcGxlbWVudGVkIikpKTsKLQkJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7 CisJaWYgKFNQSV9maW5pc2goKSAhPSBTUElfT0tfRklOSVNIKQorCQllbG9nKEVSUk9SLCAi U1BJX2ZpbmlzaCBmYWlsZWQiKTsKIAotCQlkZWZhdWx0OgotCQkJZWxvZyhFUlJPUiwgInVu cmVjb2duaXplZCBjb25mbWF0Y2h0eXBlOiAlZCIsCi0JCQkJIHJpaW5mby0+Y29uZm1hdGNo dHlwZSk7Ci0JCQlicmVhazsKLQl9CisJdGFibGVfY2xvc2UoZmtfcmVsLCBSb3dFeGNsdXNp dmVMb2NrKTsKIAotCS8qIE5ldmVyIHJlYWNoZWQgKi8KIAlyZXR1cm4gUG9pbnRlckdldERh dHVtKE5VTEwpOwogfQogCkBAIC0xMDE1LDExNSArOTMzLDg2IEBAIFJJX0ZLZXlfY2FzY2Fk ZV91cGQoUEdfRlVOQ1RJT05fQVJHUykKIAluZXdfcm93ID0gdHJpZ2RhdGEtPnRnX25ld3R1 cGxlOwogCW9sZF9yb3cgPSB0cmlnZGF0YS0+dGdfdHJpZ3R1cGxlOwogCi0Jc3dpdGNoIChy aWluZm8tPmNvbmZtYXRjaHR5cGUpCi0JewotCQkJLyogLS0tLS0tLS0tLQotCQkJICogU1FM OjIwMDggMTUuMTcgPEV4ZWN1dGlvbiBvZiByZWZlcmVudGlhbCBhY3Rpb25zPgotCQkJICoJ R2VuZXJhbCBydWxlcyAxMCkgYSkgaSk6Ci0JCQkgKgkJTUFUQ0ggU0lNUExFL0ZVTEwKLQkJ CSAqCQkJLi4uIE9OIFVQREFURSBDQVNDQURFCi0JCQkgKiAtLS0tLS0tLS0tCi0JCQkgKi8K LQkJY2FzZSBGS0NPTlNUUl9NQVRDSF9TSU1QTEU6Ci0JCWNhc2UgRktDT05TVFJfTUFUQ0hf RlVMTDoKLQkJCWlmIChTUElfY29ubmVjdCgpICE9IFNQSV9PS19DT05ORUNUKQotCQkJCWVs b2coRVJST1IsICJTUElfY29ubmVjdCBmYWlsZWQiKTsKLQotCQkJLyoKLQkJCSAqIEZldGNo IG9yIHByZXBhcmUgYSBzYXZlZCBwbGFuIGZvciB0aGUgY2FzY2FkZWQgdXBkYXRlCi0JCQkg Ki8KLQkJCXJpX0J1aWxkUXVlcnlLZXkoJnFrZXksIHJpaW5mbywgUklfUExBTl9DQVNDQURF X1VQRF9ET1VQREFURSk7CisJaWYgKFNQSV9jb25uZWN0KCkgIT0gU1BJX09LX0NPTk5FQ1Qp CisJCWVsb2coRVJST1IsICJTUElfY29ubmVjdCBmYWlsZWQiKTsKIAotCQkJaWYgKChxcGxh biA9IHJpX0ZldGNoUHJlcGFyZWRQbGFuKCZxa2V5KSkgPT0gTlVMTCkKLQkJCXsKLQkJCQlT dHJpbmdJbmZvRGF0YSBxdWVyeWJ1ZjsKLQkJCQlTdHJpbmdJbmZvRGF0YSBxdWFsYnVmOwot CQkJCWNoYXIJCWZrcmVsbmFtZVtNQVhfUVVPVEVEX1JFTF9OQU1FX0xFTl07Ci0JCQkJY2hh cgkJYXR0bmFtZVtNQVhfUVVPVEVEX05BTUVfTEVOXTsKLQkJCQljaGFyCQlwYXJhbW5hbWVb MTZdOwotCQkJCWNvbnN0IGNoYXIgKnF1ZXJ5c2VwOwotCQkJCWNvbnN0IGNoYXIgKnF1YWxz ZXA7Ci0JCQkJT2lkCQkJcXVlcnlvaWRzW1JJX01BWF9OVU1LRVlTICogMl07Ci0JCQkJY29u c3QgY2hhciAqZmtfb25seTsKLQotCQkJCS8qIC0tLS0tLS0tLS0KLQkJCQkgKiBUaGUgcXVl cnkgc3RyaW5nIGJ1aWx0IGlzCi0JCQkJICoJVVBEQVRFIFtPTkxZXSA8Zmt0YWJsZT4gU0VU IGZrYXR0MSA9ICQxIFssIC4uLl0KLQkJCQkgKgkJCVdIRVJFICRuID0gZmthdHQxIFtBTkQg Li4uXQotCQkJCSAqIFRoZSB0eXBlIGlkJ3MgZm9yIHRoZSAkIHBhcmFtZXRlcnMgYXJlIHRo b3NlIG9mIHRoZQotCQkJCSAqIGNvcnJlc3BvbmRpbmcgUEsgYXR0cmlidXRlcy4gIE5vdGUg dGhhdCB3ZSBhcmUgYXNzdW1pbmcKLQkJCQkgKiB0aGVyZSBpcyBhbiBhc3NpZ25tZW50IGNh c3QgZnJvbSB0aGUgUEsgdG8gdGhlIEZLIHR5cGU7Ci0JCQkJICogZWxzZSB0aGUgcGFyc2Vy IHdpbGwgZmFpbC4KLQkJCQkgKiAtLS0tLS0tLS0tCi0JCQkJICovCi0JCQkJaW5pdFN0cmlu Z0luZm8oJnF1ZXJ5YnVmKTsKLQkJCQlpbml0U3RyaW5nSW5mbygmcXVhbGJ1Zik7Ci0JCQkJ Zmtfb25seSA9IGZrX3JlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9O RURfVEFCTEUgPwotCQkJCQkiIiA6ICJPTkxZICI7Ci0JCQkJcXVvdGVSZWxhdGlvbk5hbWUo ZmtyZWxuYW1lLCBma19yZWwpOwotCQkJCWFwcGVuZFN0cmluZ0luZm8oJnF1ZXJ5YnVmLCAi VVBEQVRFICVzJXMgU0VUIiwKLQkJCQkJCQkJIGZrX29ubHksIGZrcmVsbmFtZSk7Ci0JCQkJ cXVlcnlzZXAgPSAiIjsKLQkJCQlxdWFsc2VwID0gIldIRVJFIjsKLQkJCQlmb3IgKGkgPSAw LCBqID0gcmlpbmZvLT5ua2V5czsgaSA8IHJpaW5mby0+bmtleXM7IGkrKywgaisrKQotCQkJ CXsKLQkJCQkJT2lkCQkJcGtfdHlwZSA9IFJJQXR0VHlwZShwa19yZWwsIHJpaW5mby0+cGtf YXR0bnVtc1tpXSk7Ci0JCQkJCU9pZAkJCWZrX3R5cGUgPSBSSUF0dFR5cGUoZmtfcmVsLCBy aWluZm8tPmZrX2F0dG51bXNbaV0pOwotCi0JCQkJCXF1b3RlT25lTmFtZShhdHRuYW1lLAot CQkJCQkJCQkgUklBdHROYW1lKGZrX3JlbCwgcmlpbmZvLT5ma19hdHRudW1zW2ldKSk7Ci0J CQkJCWFwcGVuZFN0cmluZ0luZm8oJnF1ZXJ5YnVmLAotCQkJCQkJCQkJICIlcyAlcyA9ICQl ZCIsCi0JCQkJCQkJCQkgcXVlcnlzZXAsIGF0dG5hbWUsIGkgKyAxKTsKLQkJCQkJc3ByaW50 ZihwYXJhbW5hbWUsICIkJWQiLCBqICsgMSk7Ci0JCQkJCXJpX0dlbmVyYXRlUXVhbCgmcXVh bGJ1ZiwgcXVhbHNlcCwKLQkJCQkJCQkJCXBhcmFtbmFtZSwgcGtfdHlwZSwKLQkJCQkJCQkJ CXJpaW5mby0+cGZfZXFfb3Byc1tpXSwKLQkJCQkJCQkJCWF0dG5hbWUsIGZrX3R5cGUpOwot CQkJCQlxdWVyeXNlcCA9ICIsIjsKLQkJCQkJcXVhbHNlcCA9ICJBTkQiOwotCQkJCQlxdWVy eW9pZHNbaV0gPSBwa190eXBlOwotCQkJCQlxdWVyeW9pZHNbal0gPSBwa190eXBlOwotCQkJ CX0KLQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZxdWVyeWJ1ZiwgcXVhbGJ1Zi5kYXRh KTsKKwkvKgorCSAqIEZldGNoIG9yIHByZXBhcmUgYSBzYXZlZCBwbGFuIGZvciB0aGUgY2Fz Y2FkZWQgdXBkYXRlCisJICovCisJcmlfQnVpbGRRdWVyeUtleSgmcWtleSwgcmlpbmZvLCBS SV9QTEFOX0NBU0NBREVfVVBEX0RPVVBEQVRFKTsKIAotCQkJCS8qIFByZXBhcmUgYW5kIHNh dmUgdGhlIHBsYW4gKi8KLQkJCQlxcGxhbiA9IHJpX1BsYW5DaGVjayhxdWVyeWJ1Zi5kYXRh LCByaWluZm8tPm5rZXlzICogMiwgcXVlcnlvaWRzLAotCQkJCQkJCQkJICZxa2V5LCBma19y ZWwsIHBrX3JlbCwgdHJ1ZSk7Ci0JCQl9CisJaWYgKChxcGxhbiA9IHJpX0ZldGNoUHJlcGFy ZWRQbGFuKCZxa2V5KSkgPT0gTlVMTCkKKwl7CisJCVN0cmluZ0luZm9EYXRhIHF1ZXJ5YnVm OworCQlTdHJpbmdJbmZvRGF0YSBxdWFsYnVmOworCQljaGFyCQlma3JlbG5hbWVbTUFYX1FV T1RFRF9SRUxfTkFNRV9MRU5dOworCQljaGFyCQlhdHRuYW1lW01BWF9RVU9URURfTkFNRV9M RU5dOworCQljaGFyCQlwYXJhbW5hbWVbMTZdOworCQljb25zdCBjaGFyICpxdWVyeXNlcDsK KwkJY29uc3QgY2hhciAqcXVhbHNlcDsKKwkJT2lkCQkJcXVlcnlvaWRzW1JJX01BWF9OVU1L RVlTICogMl07CisJCWNvbnN0IGNoYXIgKmZrX29ubHk7CiAKLQkJCS8qCi0JCQkgKiBXZSBo YXZlIGEgcGxhbiBub3cuIFJ1biBpdCB0byB1cGRhdGUgdGhlIGV4aXN0aW5nIHJlZmVyZW5j ZXMuCi0JCQkgKi8KLQkJCXJpX1BlcmZvcm1DaGVjayhyaWluZm8sICZxa2V5LCBxcGxhbiwK LQkJCQkJCQlma19yZWwsIHBrX3JlbCwKLQkJCQkJCQlvbGRfcm93LCBuZXdfcm93LAotCQkJ CQkJCXRydWUsCS8qIG11c3QgZGV0ZWN0IG5ldyByb3dzICovCi0JCQkJCQkJU1BJX09LX1VQ REFURSk7CisJCS8qIC0tLS0tLS0tLS0KKwkJICogVGhlIHF1ZXJ5IHN0cmluZyBidWlsdCBp cworCQkgKglVUERBVEUgW09OTFldIDxma3RhYmxlPiBTRVQgZmthdHQxID0gJDEgWywgLi4u XQorCQkgKgkJCVdIRVJFICRuID0gZmthdHQxIFtBTkQgLi4uXQorCQkgKiBUaGUgdHlwZSBp ZCdzIGZvciB0aGUgJCBwYXJhbWV0ZXJzIGFyZSB0aG9zZSBvZiB0aGUKKwkJICogY29ycmVz cG9uZGluZyBQSyBhdHRyaWJ1dGVzLiAgTm90ZSB0aGF0IHdlIGFyZSBhc3N1bWluZworCQkg KiB0aGVyZSBpcyBhbiBhc3NpZ25tZW50IGNhc3QgZnJvbSB0aGUgUEsgdG8gdGhlIEZLIHR5 cGU7CisJCSAqIGVsc2UgdGhlIHBhcnNlciB3aWxsIGZhaWwuCisJCSAqIC0tLS0tLS0tLS0K KwkJICovCisJCWluaXRTdHJpbmdJbmZvKCZxdWVyeWJ1Zik7CisJCWluaXRTdHJpbmdJbmZv KCZxdWFsYnVmKTsKKwkJZmtfb25seSA9IGZrX3JlbC0+cmRfcmVsLT5yZWxraW5kID09IFJF TEtJTkRfUEFSVElUSU9ORURfVEFCTEUgPworCQkJIiIgOiAiT05MWSAiOworCQlxdW90ZVJl bGF0aW9uTmFtZShma3JlbG5hbWUsIGZrX3JlbCk7CisJCWFwcGVuZFN0cmluZ0luZm8oJnF1 ZXJ5YnVmLCAiVVBEQVRFICVzJXMgU0VUIiwKKwkJCQkJCSBma19vbmx5LCBma3JlbG5hbWUp OworCQlxdWVyeXNlcCA9ICIiOworCQlxdWFsc2VwID0gIldIRVJFIjsKKwkJZm9yIChpID0g MCwgaiA9IHJpaW5mby0+bmtleXM7IGkgPCByaWluZm8tPm5rZXlzOyBpKyssIGorKykKKwkJ eworCQkJT2lkCQkJcGtfdHlwZSA9IFJJQXR0VHlwZShwa19yZWwsIHJpaW5mby0+cGtfYXR0 bnVtc1tpXSk7CisJCQlPaWQJCQlma190eXBlID0gUklBdHRUeXBlKGZrX3JlbCwgcmlpbmZv LT5ma19hdHRudW1zW2ldKTsKIAotCQkJaWYgKFNQSV9maW5pc2goKSAhPSBTUElfT0tfRklO SVNIKQotCQkJCWVsb2coRVJST1IsICJTUElfZmluaXNoIGZhaWxlZCIpOworCQkJcXVvdGVP bmVOYW1lKGF0dG5hbWUsCisJCQkJCQkgUklBdHROYW1lKGZrX3JlbCwgcmlpbmZvLT5ma19h dHRudW1zW2ldKSk7CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZxdWVyeWJ1ZiwKKwkJCQkJCQkg IiVzICVzID0gJCVkIiwKKwkJCQkJCQkgcXVlcnlzZXAsIGF0dG5hbWUsIGkgKyAxKTsKKwkJ CXNwcmludGYocGFyYW1uYW1lLCAiJCVkIiwgaiArIDEpOworCQkJcmlfR2VuZXJhdGVRdWFs KCZxdWFsYnVmLCBxdWFsc2VwLAorCQkJCQkJCXBhcmFtbmFtZSwgcGtfdHlwZSwKKwkJCQkJ CQlyaWluZm8tPnBmX2VxX29wcnNbaV0sCisJCQkJCQkJYXR0bmFtZSwgZmtfdHlwZSk7CisJ CQlxdWVyeXNlcCA9ICIsIjsKKwkJCXF1YWxzZXAgPSAiQU5EIjsKKwkJCXF1ZXJ5b2lkc1tp XSA9IHBrX3R5cGU7CisJCQlxdWVyeW9pZHNbal0gPSBwa190eXBlOworCQl9CisJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJnF1ZXJ5YnVmLCBxdWFsYnVmLmRhdGEpOwogCi0JCQl0YWJs ZV9jbG9zZShma19yZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCQkvKiBQcmVwYXJlIGFuZCBz YXZlIHRoZSBwbGFuICovCisJCXFwbGFuID0gcmlfUGxhbkNoZWNrKHF1ZXJ5YnVmLmRhdGEs IHJpaW5mby0+bmtleXMgKiAyLCBxdWVyeW9pZHMsCisJCQkJCQkJICZxa2V5LCBma19yZWws IHBrX3JlbCwgdHJ1ZSk7CisJfQogCi0JCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwp OworCS8qCisJICogV2UgaGF2ZSBhIHBsYW4gbm93LiBSdW4gaXQgdG8gdXBkYXRlIHRoZSBl eGlzdGluZyByZWZlcmVuY2VzLgorCSAqLworCXJpX1BlcmZvcm1DaGVjayhyaWluZm8sICZx a2V5LCBxcGxhbiwKKwkJCQkJZmtfcmVsLCBwa19yZWwsCisJCQkJCW9sZF9yb3csIG5ld19y b3csCisJCQkJCXRydWUsCS8qIG11c3QgZGV0ZWN0IG5ldyByb3dzICovCisJCQkJCVNQSV9P S19VUERBVEUpOwogCi0JCQkvKgotCQkJICogSGFuZGxlIE1BVENIIFBBUlRJQUwgY2FzY2Fk ZSB1cGRhdGUuCi0JCQkgKi8KLQkJY2FzZSBGS0NPTlNUUl9NQVRDSF9QQVJUSUFMOgotCQkJ ZXJlcG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQ T1JURUQpLAotCQkJCQkgZXJybXNnKCJNQVRDSCBQQVJUSUFMIG5vdCB5ZXQgaW1wbGVtZW50 ZWQiKSkpOwotCQkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKKwlpZiAoU1BJX2Zp bmlzaCgpICE9IFNQSV9PS19GSU5JU0gpCisJCWVsb2coRVJST1IsICJTUElfZmluaXNoIGZh aWxlZCIpOwogCi0JCWRlZmF1bHQ6Ci0JCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGNv bmZtYXRjaHR5cGU6ICVkIiwKLQkJCQkgcmlpbmZvLT5jb25mbWF0Y2h0eXBlKTsKLQkJCWJy ZWFrOwotCX0KKwl0YWJsZV9jbG9zZShma19yZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOwogCi0J LyogTmV2ZXIgcmVhY2hlZCAqLwogCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CiB9 CiAKQEAgLTEyMDEsMTE2ICsxMDkwLDg0IEBAIHJpX3NldG51bGwoVHJpZ2dlckRhdGEgKnRy aWdkYXRhKQogCXBrX3JlbCA9IHRyaWdkYXRhLT50Z19yZWxhdGlvbjsKIAlvbGRfcm93ID0g dHJpZ2RhdGEtPnRnX3RyaWd0dXBsZTsKIAotCXN3aXRjaCAocmlpbmZvLT5jb25mbWF0Y2h0 eXBlKQotCXsKLQkJCS8qIC0tLS0tLS0tLS0KLQkJCSAqIFNRTDoyMDA4IDE1LjE3IDxFeGVj dXRpb24gb2YgcmVmZXJlbnRpYWwgYWN0aW9ucz4KLQkJCSAqCUdlbmVyYWwgcnVsZXMgOSkg YSkgaWkpOgotCQkJICoJCU1BVENIIFNJTVBMRS9GVUxMCi0JCQkgKgkJCS4uLiBPTiBERUxF VEUgU0VUIE5VTEwKLQkJCSAqCUdlbmVyYWwgcnVsZXMgMTApIGEpIGlpKToKLQkJCSAqCQlN QVRDSCBTSU1QTEUvRlVMTAotCQkJICoJCQkuLi4gT04gVVBEQVRFIFNFVCBOVUxMCi0JCQkg KiAtLS0tLS0tLS0tCi0JCQkgKi8KLQkJY2FzZSBGS0NPTlNUUl9NQVRDSF9TSU1QTEU6Ci0J CWNhc2UgRktDT05TVFJfTUFUQ0hfRlVMTDoKLQkJCWlmIChTUElfY29ubmVjdCgpICE9IFNQ SV9PS19DT05ORUNUKQotCQkJCWVsb2coRVJST1IsICJTUElfY29ubmVjdCBmYWlsZWQiKTsK LQotCQkJLyoKLQkJCSAqIEZldGNoIG9yIHByZXBhcmUgYSBzYXZlZCBwbGFuIGZvciB0aGUg c2V0IG51bGwgb3BlcmF0aW9uIChpdCdzCi0JCQkgKiB0aGUgc2FtZSBxdWVyeSBmb3IgZGVs ZXRlIGFuZCB1cGRhdGUgY2FzZXMpCi0JCQkgKi8KLQkJCXJpX0J1aWxkUXVlcnlLZXkoJnFr ZXksIHJpaW5mbywgUklfUExBTl9TRVROVUxMX0RPVVBEQVRFKTsKKwlpZiAoU1BJX2Nvbm5l Y3QoKSAhPSBTUElfT0tfQ09OTkVDVCkKKwkJZWxvZyhFUlJPUiwgIlNQSV9jb25uZWN0IGZh aWxlZCIpOwogCi0JCQlpZiAoKHFwbGFuID0gcmlfRmV0Y2hQcmVwYXJlZFBsYW4oJnFrZXkp KSA9PSBOVUxMKQotCQkJewotCQkJCVN0cmluZ0luZm9EYXRhIHF1ZXJ5YnVmOwotCQkJCVN0 cmluZ0luZm9EYXRhIHF1YWxidWY7Ci0JCQkJY2hhcgkJZmtyZWxuYW1lW01BWF9RVU9URURf UkVMX05BTUVfTEVOXTsKLQkJCQljaGFyCQlhdHRuYW1lW01BWF9RVU9URURfTkFNRV9MRU5d OwotCQkJCWNoYXIJCXBhcmFtbmFtZVsxNl07Ci0JCQkJY29uc3QgY2hhciAqcXVlcnlzZXA7 Ci0JCQkJY29uc3QgY2hhciAqcXVhbHNlcDsKLQkJCQljb25zdCBjaGFyICpma19vbmx5Owot CQkJCU9pZAkJCXF1ZXJ5b2lkc1tSSV9NQVhfTlVNS0VZU107Ci0KLQkJCQkvKiAtLS0tLS0t LS0tCi0JCQkJICogVGhlIHF1ZXJ5IHN0cmluZyBidWlsdCBpcwotCQkJCSAqCVVQREFURSBb T05MWV0gPGZrdGFibGU+IFNFVCBma2F0dDEgPSBOVUxMIFssIC4uLl0KLQkJCQkgKgkJCVdI RVJFICQxID0gZmthdHQxIFtBTkQgLi4uXQotCQkJCSAqIFRoZSB0eXBlIGlkJ3MgZm9yIHRo ZSAkIHBhcmFtZXRlcnMgYXJlIHRob3NlIG9mIHRoZQotCQkJCSAqIGNvcnJlc3BvbmRpbmcg UEsgYXR0cmlidXRlcy4KLQkJCQkgKiAtLS0tLS0tLS0tCi0JCQkJICovCi0JCQkJaW5pdFN0 cmluZ0luZm8oJnF1ZXJ5YnVmKTsKLQkJCQlpbml0U3RyaW5nSW5mbygmcXVhbGJ1Zik7Ci0J CQkJZmtfb25seSA9IGZrX3JlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElU SU9ORURfVEFCTEUgPwotCQkJCQkiIiA6ICJPTkxZICI7Ci0JCQkJcXVvdGVSZWxhdGlvbk5h bWUoZmtyZWxuYW1lLCBma19yZWwpOwotCQkJCWFwcGVuZFN0cmluZ0luZm8oJnF1ZXJ5YnVm LCAiVVBEQVRFICVzJXMgU0VUIiwKLQkJCQkJCQkJIGZrX29ubHksIGZrcmVsbmFtZSk7Ci0J CQkJcXVlcnlzZXAgPSAiIjsKLQkJCQlxdWFsc2VwID0gIldIRVJFIjsKLQkJCQlmb3IgKGkg PSAwOyBpIDwgcmlpbmZvLT5ua2V5czsgaSsrKQotCQkJCXsKLQkJCQkJT2lkCQkJcGtfdHlw ZSA9IFJJQXR0VHlwZShwa19yZWwsIHJpaW5mby0+cGtfYXR0bnVtc1tpXSk7Ci0JCQkJCU9p ZAkJCWZrX3R5cGUgPSBSSUF0dFR5cGUoZmtfcmVsLCByaWluZm8tPmZrX2F0dG51bXNbaV0p OwotCi0JCQkJCXF1b3RlT25lTmFtZShhdHRuYW1lLAotCQkJCQkJCQkgUklBdHROYW1lKGZr X3JlbCwgcmlpbmZvLT5ma19hdHRudW1zW2ldKSk7Ci0JCQkJCWFwcGVuZFN0cmluZ0luZm8o JnF1ZXJ5YnVmLAotCQkJCQkJCQkJICIlcyAlcyA9IE5VTEwiLAotCQkJCQkJCQkJIHF1ZXJ5 c2VwLCBhdHRuYW1lKTsKLQkJCQkJc3ByaW50ZihwYXJhbW5hbWUsICIkJWQiLCBpICsgMSk7 Ci0JCQkJCXJpX0dlbmVyYXRlUXVhbCgmcXVhbGJ1ZiwgcXVhbHNlcCwKLQkJCQkJCQkJCXBh cmFtbmFtZSwgcGtfdHlwZSwKLQkJCQkJCQkJCXJpaW5mby0+cGZfZXFfb3Byc1tpXSwKLQkJ CQkJCQkJCWF0dG5hbWUsIGZrX3R5cGUpOwotCQkJCQlxdWVyeXNlcCA9ICIsIjsKLQkJCQkJ cXVhbHNlcCA9ICJBTkQiOwotCQkJCQlxdWVyeW9pZHNbaV0gPSBwa190eXBlOwotCQkJCX0K LQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZxdWVyeWJ1ZiwgcXVhbGJ1Zi5kYXRhKTsK KwkvKgorCSAqIEZldGNoIG9yIHByZXBhcmUgYSBzYXZlZCBwbGFuIGZvciB0aGUgc2V0IG51 bGwgb3BlcmF0aW9uIChpdCdzCisJICogdGhlIHNhbWUgcXVlcnkgZm9yIGRlbGV0ZSBhbmQg dXBkYXRlIGNhc2VzKQorCSAqLworCXJpX0J1aWxkUXVlcnlLZXkoJnFrZXksIHJpaW5mbywg UklfUExBTl9TRVROVUxMX0RPVVBEQVRFKTsKIAotCQkJCS8qIFByZXBhcmUgYW5kIHNhdmUg dGhlIHBsYW4gKi8KLQkJCQlxcGxhbiA9IHJpX1BsYW5DaGVjayhxdWVyeWJ1Zi5kYXRhLCBy aWluZm8tPm5rZXlzLCBxdWVyeW9pZHMsCi0JCQkJCQkJCQkgJnFrZXksIGZrX3JlbCwgcGtf cmVsLCB0cnVlKTsKLQkJCX0KKwlpZiAoKHFwbGFuID0gcmlfRmV0Y2hQcmVwYXJlZFBsYW4o JnFrZXkpKSA9PSBOVUxMKQorCXsKKwkJU3RyaW5nSW5mb0RhdGEgcXVlcnlidWY7CisJCVN0 cmluZ0luZm9EYXRhIHF1YWxidWY7CisJCWNoYXIJCWZrcmVsbmFtZVtNQVhfUVVPVEVEX1JF TF9OQU1FX0xFTl07CisJCWNoYXIJCWF0dG5hbWVbTUFYX1FVT1RFRF9OQU1FX0xFTl07CisJ CWNoYXIJCXBhcmFtbmFtZVsxNl07CisJCWNvbnN0IGNoYXIgKnF1ZXJ5c2VwOworCQljb25z dCBjaGFyICpxdWFsc2VwOworCQljb25zdCBjaGFyICpma19vbmx5OworCQlPaWQJCQlxdWVy eW9pZHNbUklfTUFYX05VTUtFWVNdOwogCi0JCQkvKgotCQkJICogV2UgaGF2ZSBhIHBsYW4g bm93LiBSdW4gaXQgdG8gdXBkYXRlIHRoZSBleGlzdGluZyByZWZlcmVuY2VzLgotCQkJICov Ci0JCQlyaV9QZXJmb3JtQ2hlY2socmlpbmZvLCAmcWtleSwgcXBsYW4sCi0JCQkJCQkJZmtf cmVsLCBwa19yZWwsCi0JCQkJCQkJb2xkX3JvdywgTlVMTCwKLQkJCQkJCQl0cnVlLAkvKiBt dXN0IGRldGVjdCBuZXcgcm93cyAqLwotCQkJCQkJCVNQSV9PS19VUERBVEUpOworCQkvKiAt LS0tLS0tLS0tCisJCSAqIFRoZSBxdWVyeSBzdHJpbmcgYnVpbHQgaXMKKwkJICoJVVBEQVRF IFtPTkxZXSA8Zmt0YWJsZT4gU0VUIGZrYXR0MSA9IE5VTEwgWywgLi4uXQorCQkgKgkJCVdI RVJFICQxID0gZmthdHQxIFtBTkQgLi4uXQorCQkgKiBUaGUgdHlwZSBpZCdzIGZvciB0aGUg JCBwYXJhbWV0ZXJzIGFyZSB0aG9zZSBvZiB0aGUKKwkJICogY29ycmVzcG9uZGluZyBQSyBh dHRyaWJ1dGVzLgorCQkgKiAtLS0tLS0tLS0tCisJCSAqLworCQlpbml0U3RyaW5nSW5mbygm cXVlcnlidWYpOworCQlpbml0U3RyaW5nSW5mbygmcXVhbGJ1Zik7CisJCWZrX29ubHkgPSBm a19yZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFID8K KwkJCSIiIDogIk9OTFkgIjsKKwkJcXVvdGVSZWxhdGlvbk5hbWUoZmtyZWxuYW1lLCBma19y ZWwpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZxdWVyeWJ1ZiwgIlVQREFURSAlcyVzIFNFVCIs CisJCQkJCQkgZmtfb25seSwgZmtyZWxuYW1lKTsKKwkJcXVlcnlzZXAgPSAiIjsKKwkJcXVh bHNlcCA9ICJXSEVSRSI7CisJCWZvciAoaSA9IDA7IGkgPCByaWluZm8tPm5rZXlzOyBpKysp CisJCXsKKwkJCU9pZAkJCXBrX3R5cGUgPSBSSUF0dFR5cGUocGtfcmVsLCByaWluZm8tPnBr X2F0dG51bXNbaV0pOworCQkJT2lkCQkJZmtfdHlwZSA9IFJJQXR0VHlwZShma19yZWwsIHJp aW5mby0+ZmtfYXR0bnVtc1tpXSk7CiAKLQkJCWlmIChTUElfZmluaXNoKCkgIT0gU1BJX09L X0ZJTklTSCkKLQkJCQllbG9nKEVSUk9SLCAiU1BJX2ZpbmlzaCBmYWlsZWQiKTsKKwkJCXF1 b3RlT25lTmFtZShhdHRuYW1lLAorCQkJCQkJIFJJQXR0TmFtZShma19yZWwsIHJpaW5mby0+ ZmtfYXR0bnVtc1tpXSkpOworCQkJYXBwZW5kU3RyaW5nSW5mbygmcXVlcnlidWYsCisJCQkJ CQkJICIlcyAlcyA9IE5VTEwiLAorCQkJCQkJCSBxdWVyeXNlcCwgYXR0bmFtZSk7CisJCQlz cHJpbnRmKHBhcmFtbmFtZSwgIiQlZCIsIGkgKyAxKTsKKwkJCXJpX0dlbmVyYXRlUXVhbCgm cXVhbGJ1ZiwgcXVhbHNlcCwKKwkJCQkJCQlwYXJhbW5hbWUsIHBrX3R5cGUsCisJCQkJCQkJ cmlpbmZvLT5wZl9lcV9vcHJzW2ldLAorCQkJCQkJCWF0dG5hbWUsIGZrX3R5cGUpOworCQkJ cXVlcnlzZXAgPSAiLCI7CisJCQlxdWFsc2VwID0gIkFORCI7CisJCQlxdWVyeW9pZHNbaV0g PSBwa190eXBlOworCQl9CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnF1ZXJ5YnVmLCBx dWFsYnVmLmRhdGEpOwogCi0JCQl0YWJsZV9jbG9zZShma19yZWwsIFJvd0V4Y2x1c2l2ZUxv Y2spOworCQkvKiBQcmVwYXJlIGFuZCBzYXZlIHRoZSBwbGFuICovCisJCXFwbGFuID0gcmlf UGxhbkNoZWNrKHF1ZXJ5YnVmLmRhdGEsIHJpaW5mby0+bmtleXMsIHF1ZXJ5b2lkcywKKwkJ CQkJCQkgJnFrZXksIGZrX3JlbCwgcGtfcmVsLCB0cnVlKTsKKwl9CiAKLQkJCXJldHVybiBQ b2ludGVyR2V0RGF0dW0oTlVMTCk7CisJLyoKKwkgKiBXZSBoYXZlIGEgcGxhbiBub3cuIFJ1 biBpdCB0byB1cGRhdGUgdGhlIGV4aXN0aW5nIHJlZmVyZW5jZXMuCisJICovCisJcmlfUGVy Zm9ybUNoZWNrKHJpaW5mbywgJnFrZXksIHFwbGFuLAorCQkJCQlma19yZWwsIHBrX3JlbCwK KwkJCQkJb2xkX3JvdywgTlVMTCwKKwkJCQkJdHJ1ZSwJLyogbXVzdCBkZXRlY3QgbmV3IHJv d3MgKi8KKwkJCQkJU1BJX09LX1VQREFURSk7CiAKLQkJCS8qCi0JCQkgKiBIYW5kbGUgTUFU Q0ggUEFSVElBTCBzZXQgbnVsbCBkZWxldGUgb3IgdXBkYXRlLgotCQkJICovCi0JCWNhc2Ug RktDT05TVFJfTUFUQ0hfUEFSVElBTDoKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJj b2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkJIGVycm1zZygiTUFU Q0ggUEFSVElBTCBub3QgeWV0IGltcGxlbWVudGVkIikpKTsKLQkJCXJldHVybiBQb2ludGVy R2V0RGF0dW0oTlVMTCk7CisJaWYgKFNQSV9maW5pc2goKSAhPSBTUElfT0tfRklOSVNIKQor CQllbG9nKEVSUk9SLCAiU1BJX2ZpbmlzaCBmYWlsZWQiKTsKIAotCQlkZWZhdWx0OgotCQkJ ZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBjb25mbWF0Y2h0eXBlOiAlZCIsCi0JCQkJIHJp aW5mby0+Y29uZm1hdGNodHlwZSk7Ci0JCQlicmVhazsKLQl9CisJdGFibGVfY2xvc2UoZmtf cmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKIAotCS8qIE5ldmVyIHJlYWNoZWQgKi8KIAlyZXR1 cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOwogfQogCkBAIC0xMzg3LDEzMiArMTI0NCwxMDAg QEAgcmlfc2V0ZGVmYXVsdChUcmlnZ2VyRGF0YSAqdHJpZ2RhdGEpCiAJcGtfcmVsID0gdHJp Z2RhdGEtPnRnX3JlbGF0aW9uOwogCW9sZF9yb3cgPSB0cmlnZGF0YS0+dGdfdHJpZ3R1cGxl OwogCi0Jc3dpdGNoIChyaWluZm8tPmNvbmZtYXRjaHR5cGUpCi0JewotCQkJLyogLS0tLS0t LS0tLQotCQkJICogU1FMOjIwMDggMTUuMTcgPEV4ZWN1dGlvbiBvZiByZWZlcmVudGlhbCBh Y3Rpb25zPgotCQkJICoJR2VuZXJhbCBydWxlcyA5KSBhKSBpaWkpOgotCQkJICoJCU1BVENI IFNJTVBMRS9GVUxMCi0JCQkgKgkJCS4uLiBPTiBERUxFVEUgU0VUIERFRkFVTFQKLQkJCSAq CUdlbmVyYWwgcnVsZXMgMTApIGEpIGlpaSk6Ci0JCQkgKgkJTUFUQ0ggU0lNUExFL0ZVTEwK LQkJCSAqCQkJLi4uIE9OIFVQREFURSBTRVQgREVGQVVMVAotCQkJICogLS0tLS0tLS0tLQot CQkJICovCi0JCWNhc2UgRktDT05TVFJfTUFUQ0hfU0lNUExFOgotCQljYXNlIEZLQ09OU1RS X01BVENIX0ZVTEw6Ci0JCQlpZiAoU1BJX2Nvbm5lY3QoKSAhPSBTUElfT0tfQ09OTkVDVCkK LQkJCQllbG9nKEVSUk9SLCAiU1BJX2Nvbm5lY3QgZmFpbGVkIik7Ci0KLQkJCS8qCi0JCQkg KiBGZXRjaCBvciBwcmVwYXJlIGEgc2F2ZWQgcGxhbiBmb3IgdGhlIHNldCBkZWZhdWx0IG9w ZXJhdGlvbgotCQkJICogKGl0J3MgdGhlIHNhbWUgcXVlcnkgZm9yIGRlbGV0ZSBhbmQgdXBk YXRlIGNhc2VzKQotCQkJICovCi0JCQlyaV9CdWlsZFF1ZXJ5S2V5KCZxa2V5LCByaWluZm8s IFJJX1BMQU5fU0VUREVGQVVMVF9ET1VQREFURSk7CisJaWYgKFNQSV9jb25uZWN0KCkgIT0g U1BJX09LX0NPTk5FQ1QpCisJCWVsb2coRVJST1IsICJTUElfY29ubmVjdCBmYWlsZWQiKTsK IAotCQkJaWYgKChxcGxhbiA9IHJpX0ZldGNoUHJlcGFyZWRQbGFuKCZxa2V5KSkgPT0gTlVM TCkKLQkJCXsKLQkJCQlTdHJpbmdJbmZvRGF0YSBxdWVyeWJ1ZjsKLQkJCQlTdHJpbmdJbmZv RGF0YSBxdWFsYnVmOwotCQkJCWNoYXIJCWZrcmVsbmFtZVtNQVhfUVVPVEVEX1JFTF9OQU1F X0xFTl07Ci0JCQkJY2hhcgkJYXR0bmFtZVtNQVhfUVVPVEVEX05BTUVfTEVOXTsKLQkJCQlj aGFyCQlwYXJhbW5hbWVbMTZdOwotCQkJCWNvbnN0IGNoYXIgKnF1ZXJ5c2VwOwotCQkJCWNv bnN0IGNoYXIgKnF1YWxzZXA7Ci0JCQkJT2lkCQkJcXVlcnlvaWRzW1JJX01BWF9OVU1LRVlT XTsKLQkJCQljb25zdCBjaGFyICpma19vbmx5OwotCQkJCWludAkJCWk7Ci0KLQkJCQkvKiAt LS0tLS0tLS0tCi0JCQkJICogVGhlIHF1ZXJ5IHN0cmluZyBidWlsdCBpcwotCQkJCSAqCVVQ REFURSBbT05MWV0gPGZrdGFibGU+IFNFVCBma2F0dDEgPSBERUZBVUxUIFssIC4uLl0KLQkJ CQkgKgkJCVdIRVJFICQxID0gZmthdHQxIFtBTkQgLi4uXQotCQkJCSAqIFRoZSB0eXBlIGlk J3MgZm9yIHRoZSAkIHBhcmFtZXRlcnMgYXJlIHRob3NlIG9mIHRoZQotCQkJCSAqIGNvcnJl c3BvbmRpbmcgUEsgYXR0cmlidXRlcy4KLQkJCQkgKiAtLS0tLS0tLS0tCi0JCQkJICovCi0J CQkJaW5pdFN0cmluZ0luZm8oJnF1ZXJ5YnVmKTsKLQkJCQlpbml0U3RyaW5nSW5mbygmcXVh bGJ1Zik7Ci0JCQkJcXVvdGVSZWxhdGlvbk5hbWUoZmtyZWxuYW1lLCBma19yZWwpOwotCQkJ CWZrX29ubHkgPSBma19yZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElP TkVEX1RBQkxFID8KLQkJCQkJIiIgOiAiT05MWSAiOwotCQkJCWFwcGVuZFN0cmluZ0luZm8o JnF1ZXJ5YnVmLCAiVVBEQVRFICVzJXMgU0VUIiwKLQkJCQkJCQkJIGZrX29ubHksIGZrcmVs bmFtZSk7Ci0JCQkJcXVlcnlzZXAgPSAiIjsKLQkJCQlxdWFsc2VwID0gIldIRVJFIjsKLQkJ CQlmb3IgKGkgPSAwOyBpIDwgcmlpbmZvLT5ua2V5czsgaSsrKQotCQkJCXsKLQkJCQkJT2lk CQkJcGtfdHlwZSA9IFJJQXR0VHlwZShwa19yZWwsIHJpaW5mby0+cGtfYXR0bnVtc1tpXSk7 Ci0JCQkJCU9pZAkJCWZrX3R5cGUgPSBSSUF0dFR5cGUoZmtfcmVsLCByaWluZm8tPmZrX2F0 dG51bXNbaV0pOwotCi0JCQkJCXF1b3RlT25lTmFtZShhdHRuYW1lLAotCQkJCQkJCQkgUklB dHROYW1lKGZrX3JlbCwgcmlpbmZvLT5ma19hdHRudW1zW2ldKSk7Ci0JCQkJCWFwcGVuZFN0 cmluZ0luZm8oJnF1ZXJ5YnVmLAotCQkJCQkJCQkJICIlcyAlcyA9IERFRkFVTFQiLAotCQkJ CQkJCQkJIHF1ZXJ5c2VwLCBhdHRuYW1lKTsKLQkJCQkJc3ByaW50ZihwYXJhbW5hbWUsICIk JWQiLCBpICsgMSk7Ci0JCQkJCXJpX0dlbmVyYXRlUXVhbCgmcXVhbGJ1ZiwgcXVhbHNlcCwK LQkJCQkJCQkJCXBhcmFtbmFtZSwgcGtfdHlwZSwKLQkJCQkJCQkJCXJpaW5mby0+cGZfZXFf b3Byc1tpXSwKLQkJCQkJCQkJCWF0dG5hbWUsIGZrX3R5cGUpOwotCQkJCQlxdWVyeXNlcCA9 ICIsIjsKLQkJCQkJcXVhbHNlcCA9ICJBTkQiOwotCQkJCQlxdWVyeW9pZHNbaV0gPSBwa190 eXBlOwotCQkJCX0KLQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZxdWVyeWJ1ZiwgcXVh bGJ1Zi5kYXRhKTsKKwkvKgorCSAqIEZldGNoIG9yIHByZXBhcmUgYSBzYXZlZCBwbGFuIGZv ciB0aGUgc2V0IGRlZmF1bHQgb3BlcmF0aW9uCisJICogKGl0J3MgdGhlIHNhbWUgcXVlcnkg Zm9yIGRlbGV0ZSBhbmQgdXBkYXRlIGNhc2VzKQorCSAqLworCXJpX0J1aWxkUXVlcnlLZXko JnFrZXksIHJpaW5mbywgUklfUExBTl9TRVRERUZBVUxUX0RPVVBEQVRFKTsKIAotCQkJCS8q IFByZXBhcmUgYW5kIHNhdmUgdGhlIHBsYW4gKi8KLQkJCQlxcGxhbiA9IHJpX1BsYW5DaGVj ayhxdWVyeWJ1Zi5kYXRhLCByaWluZm8tPm5rZXlzLCBxdWVyeW9pZHMsCi0JCQkJCQkJCQkg JnFrZXksIGZrX3JlbCwgcGtfcmVsLCB0cnVlKTsKLQkJCX0KKwlpZiAoKHFwbGFuID0gcmlf RmV0Y2hQcmVwYXJlZFBsYW4oJnFrZXkpKSA9PSBOVUxMKQorCXsKKwkJU3RyaW5nSW5mb0Rh dGEgcXVlcnlidWY7CisJCVN0cmluZ0luZm9EYXRhIHF1YWxidWY7CisJCWNoYXIJCWZrcmVs bmFtZVtNQVhfUVVPVEVEX1JFTF9OQU1FX0xFTl07CisJCWNoYXIJCWF0dG5hbWVbTUFYX1FV T1RFRF9OQU1FX0xFTl07CisJCWNoYXIJCXBhcmFtbmFtZVsxNl07CisJCWNvbnN0IGNoYXIg KnF1ZXJ5c2VwOworCQljb25zdCBjaGFyICpxdWFsc2VwOworCQlPaWQJCQlxdWVyeW9pZHNb UklfTUFYX05VTUtFWVNdOworCQljb25zdCBjaGFyICpma19vbmx5OworCQlpbnQJCQlpOwog Ci0JCQkvKgotCQkJICogV2UgaGF2ZSBhIHBsYW4gbm93LiBSdW4gaXQgdG8gdXBkYXRlIHRo ZSBleGlzdGluZyByZWZlcmVuY2VzLgotCQkJICovCi0JCQlyaV9QZXJmb3JtQ2hlY2socmlp bmZvLCAmcWtleSwgcXBsYW4sCi0JCQkJCQkJZmtfcmVsLCBwa19yZWwsCi0JCQkJCQkJb2xk X3JvdywgTlVMTCwKLQkJCQkJCQl0cnVlLAkvKiBtdXN0IGRldGVjdCBuZXcgcm93cyAqLwot CQkJCQkJCVNQSV9PS19VUERBVEUpOworCQkvKiAtLS0tLS0tLS0tCisJCSAqIFRoZSBxdWVy eSBzdHJpbmcgYnVpbHQgaXMKKwkJICoJVVBEQVRFIFtPTkxZXSA8Zmt0YWJsZT4gU0VUIGZr YXR0MSA9IERFRkFVTFQgWywgLi4uXQorCQkgKgkJCVdIRVJFICQxID0gZmthdHQxIFtBTkQg Li4uXQorCQkgKiBUaGUgdHlwZSBpZCdzIGZvciB0aGUgJCBwYXJhbWV0ZXJzIGFyZSB0aG9z ZSBvZiB0aGUKKwkJICogY29ycmVzcG9uZGluZyBQSyBhdHRyaWJ1dGVzLgorCQkgKiAtLS0t LS0tLS0tCisJCSAqLworCQlpbml0U3RyaW5nSW5mbygmcXVlcnlidWYpOworCQlpbml0U3Ry aW5nSW5mbygmcXVhbGJ1Zik7CisJCXF1b3RlUmVsYXRpb25OYW1lKGZrcmVsbmFtZSwgZmtf cmVsKTsKKwkJZmtfb25seSA9IGZrX3JlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRf UEFSVElUSU9ORURfVEFCTEUgPworCQkJIiIgOiAiT05MWSAiOworCQlhcHBlbmRTdHJpbmdJ bmZvKCZxdWVyeWJ1ZiwgIlVQREFURSAlcyVzIFNFVCIsCisJCQkJCQkgZmtfb25seSwgZmty ZWxuYW1lKTsKKwkJcXVlcnlzZXAgPSAiIjsKKwkJcXVhbHNlcCA9ICJXSEVSRSI7CisJCWZv ciAoaSA9IDA7IGkgPCByaWluZm8tPm5rZXlzOyBpKyspCisJCXsKKwkJCU9pZAkJCXBrX3R5 cGUgPSBSSUF0dFR5cGUocGtfcmVsLCByaWluZm8tPnBrX2F0dG51bXNbaV0pOworCQkJT2lk CQkJZmtfdHlwZSA9IFJJQXR0VHlwZShma19yZWwsIHJpaW5mby0+ZmtfYXR0bnVtc1tpXSk7 CiAKLQkJCWlmIChTUElfZmluaXNoKCkgIT0gU1BJX09LX0ZJTklTSCkKLQkJCQllbG9nKEVS Uk9SLCAiU1BJX2ZpbmlzaCBmYWlsZWQiKTsKKwkJCXF1b3RlT25lTmFtZShhdHRuYW1lLAor CQkJCQkJIFJJQXR0TmFtZShma19yZWwsIHJpaW5mby0+ZmtfYXR0bnVtc1tpXSkpOworCQkJ YXBwZW5kU3RyaW5nSW5mbygmcXVlcnlidWYsCisJCQkJCQkJICIlcyAlcyA9IERFRkFVTFQi LAorCQkJCQkJCSBxdWVyeXNlcCwgYXR0bmFtZSk7CisJCQlzcHJpbnRmKHBhcmFtbmFtZSwg IiQlZCIsIGkgKyAxKTsKKwkJCXJpX0dlbmVyYXRlUXVhbCgmcXVhbGJ1ZiwgcXVhbHNlcCwK KwkJCQkJCQlwYXJhbW5hbWUsIHBrX3R5cGUsCisJCQkJCQkJcmlpbmZvLT5wZl9lcV9vcHJz W2ldLAorCQkJCQkJCWF0dG5hbWUsIGZrX3R5cGUpOworCQkJcXVlcnlzZXAgPSAiLCI7CisJ CQlxdWFsc2VwID0gIkFORCI7CisJCQlxdWVyeW9pZHNbaV0gPSBwa190eXBlOworCQl9CisJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnF1ZXJ5YnVmLCBxdWFsYnVmLmRhdGEpOwogCi0J CQl0YWJsZV9jbG9zZShma19yZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCQkvKiBQcmVwYXJl IGFuZCBzYXZlIHRoZSBwbGFuICovCisJCXFwbGFuID0gcmlfUGxhbkNoZWNrKHF1ZXJ5YnVm LmRhdGEsIHJpaW5mby0+bmtleXMsIHF1ZXJ5b2lkcywKKwkJCQkJCQkgJnFrZXksIGZrX3Jl bCwgcGtfcmVsLCB0cnVlKTsKKwl9CiAKLQkJCS8qCi0JCQkgKiBJZiB3ZSBqdXN0IGRlbGV0 ZWQgb3IgdXBkYXRlZCB0aGUgUEsgcm93IHdob3NlIGtleSB3YXMgZXF1YWwgdG8KLQkJCSAq IHRoZSBGSyBjb2x1bW5zJyBkZWZhdWx0IHZhbHVlcywgYW5kIGEgcmVmZXJlbmNpbmcgcm93 IGV4aXN0cyBpbgotCQkJICogdGhlIEZLIHRhYmxlLCB3ZSB3b3VsZCBoYXZlIHVwZGF0ZWQg dGhhdCByb3cgdG8gdGhlIHNhbWUgdmFsdWVzCi0JCQkgKiBpdCBhbHJlYWR5IGhhZCAtLS0g YW5kIFJJX0ZLZXlfZmtfdXBkX2NoZWNrX3JlcXVpcmVkIHdvdWxkCi0JCQkgKiBoZW5jZSBi ZWxpZXZlIG5vIGNoZWNrIGlzIG5lY2Vzc2FyeS4gIFNvIHdlIG5lZWQgdG8gZG8gYW5vdGhl cgotCQkJICogbG9va3VwIG5vdyBhbmQgaW4gY2FzZSBhIHJlZmVyZW5jZSBzdGlsbCBleGlz dHMsIGFib3J0IHRoZQotCQkJICogb3BlcmF0aW9uLiAgVGhhdCBpcyBhbHJlYWR5IGltcGxl bWVudGVkIGluIHRoZSBOTyBBQ1RJT04KLQkJCSAqIHRyaWdnZXIsIHNvIGp1c3QgcnVuIGl0 LiAgKFRoaXMgcmVjaGVjayBpcyBvbmx5IG5lZWRlZCBpbiB0aGUKLQkJCSAqIFNFVCBERUZB VUxUIGNhc2UsIHNpbmNlIENBU0NBREUgd291bGQgcmVtb3ZlIHN1Y2ggcm93cyBpbiBjYXNl Ci0JCQkgKiBvZiBhIERFTEVURSBvcGVyYXRpb24gb3Igd291bGQgY2hhbmdlIHRoZSBGSyBr ZXkgdmFsdWVzIGluIGNhc2UKLQkJCSAqIG9mIGFuIFVQREFURSwgd2hpbGUgU0VUIE5VTEwg aXMgY2VydGFpbiB0byByZXN1bHQgaW4gcm93cyB0aGF0Ci0JCQkgKiBzYXRpc2Z5IHRoZSBG SyBjb25zdHJhaW50LikKLQkJCSAqLwotCQkJcmV0dXJuIHJpX3Jlc3RyaWN0KHRyaWdkYXRh LCB0cnVlKTsKKwkvKgorCSAqIFdlIGhhdmUgYSBwbGFuIG5vdy4gUnVuIGl0IHRvIHVwZGF0 ZSB0aGUgZXhpc3RpbmcgcmVmZXJlbmNlcy4KKwkgKi8KKwlyaV9QZXJmb3JtQ2hlY2socmlp bmZvLCAmcWtleSwgcXBsYW4sCisJCQkJCWZrX3JlbCwgcGtfcmVsLAorCQkJCQlvbGRfcm93 LCBOVUxMLAorCQkJCQl0cnVlLAkvKiBtdXN0IGRldGVjdCBuZXcgcm93cyAqLworCQkJCQlT UElfT0tfVVBEQVRFKTsKIAotCQkJLyoKLQkJCSAqIEhhbmRsZSBNQVRDSCBQQVJUSUFMIHNl dCBkZWZhdWx0IGRlbGV0ZSBvciB1cGRhdGUuCi0JCQkgKi8KLQkJY2FzZSBGS0NPTlNUUl9N QVRDSF9QQVJUSUFMOgotCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09E RV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAotCQkJCQkgZXJybXNnKCJNQVRDSCBQQVJUSUFM IG5vdCB5ZXQgaW1wbGVtZW50ZWQiKSkpOwotCQkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShO VUxMKTsKKwlpZiAoU1BJX2ZpbmlzaCgpICE9IFNQSV9PS19GSU5JU0gpCisJCWVsb2coRVJS T1IsICJTUElfZmluaXNoIGZhaWxlZCIpOwogCi0JCWRlZmF1bHQ6Ci0JCQllbG9nKEVSUk9S LCAidW5yZWNvZ25pemVkIGNvbmZtYXRjaHR5cGU6ICVkIiwKLQkJCQkgcmlpbmZvLT5jb25m bWF0Y2h0eXBlKTsKLQkJCWJyZWFrOwotCX0KKwl0YWJsZV9jbG9zZShma19yZWwsIFJvd0V4 Y2x1c2l2ZUxvY2spOwogCi0JLyogTmV2ZXIgcmVhY2hlZCAqLwotCXJldHVybiBQb2ludGVy R2V0RGF0dW0oTlVMTCk7CisJLyoKKwkgKiBJZiB3ZSBqdXN0IGRlbGV0ZWQgb3IgdXBkYXRl ZCB0aGUgUEsgcm93IHdob3NlIGtleSB3YXMgZXF1YWwgdG8KKwkgKiB0aGUgRksgY29sdW1u cycgZGVmYXVsdCB2YWx1ZXMsIGFuZCBhIHJlZmVyZW5jaW5nIHJvdyBleGlzdHMgaW4KKwkg KiB0aGUgRksgdGFibGUsIHdlIHdvdWxkIGhhdmUgdXBkYXRlZCB0aGF0IHJvdyB0byB0aGUg c2FtZSB2YWx1ZXMKKwkgKiBpdCBhbHJlYWR5IGhhZCAtLS0gYW5kIFJJX0ZLZXlfZmtfdXBk X2NoZWNrX3JlcXVpcmVkIHdvdWxkCisJICogaGVuY2UgYmVsaWV2ZSBubyBjaGVjayBpcyBu ZWNlc3NhcnkuICBTbyB3ZSBuZWVkIHRvIGRvIGFub3RoZXIKKwkgKiBsb29rdXAgbm93IGFu ZCBpbiBjYXNlIGEgcmVmZXJlbmNlIHN0aWxsIGV4aXN0cywgYWJvcnQgdGhlCisJICogb3Bl cmF0aW9uLiAgVGhhdCBpcyBhbHJlYWR5IGltcGxlbWVudGVkIGluIHRoZSBOTyBBQ1RJT04K KwkgKiB0cmlnZ2VyLCBzbyBqdXN0IHJ1biBpdC4gIChUaGlzIHJlY2hlY2sgaXMgb25seSBu ZWVkZWQgaW4gdGhlCisJICogU0VUIERFRkFVTFQgY2FzZSwgc2luY2UgQ0FTQ0FERSB3b3Vs ZCByZW1vdmUgc3VjaCByb3dzIGluIGNhc2UKKwkgKiBvZiBhIERFTEVURSBvcGVyYXRpb24g b3Igd291bGQgY2hhbmdlIHRoZSBGSyBrZXkgdmFsdWVzIGluIGNhc2UKKwkgKiBvZiBhbiBV UERBVEUsIHdoaWxlIFNFVCBOVUxMIGlzIGNlcnRhaW4gdG8gcmVzdWx0IGluIHJvd3MgdGhh dAorCSAqIHNhdGlzZnkgdGhlIEZLIGNvbnN0cmFpbnQuKQorCSAqLworCXJldHVybiByaV9y ZXN0cmljdCh0cmlnZGF0YSwgdHJ1ZSk7CiB9CiAKIApAQCAtMTUzOSw0MCArMTM2NCwxOSBA QCBSSV9GS2V5X3BrX3VwZF9jaGVja19yZXF1aXJlZChUcmlnZ2VyICp0cmlnZ2VyLCBSZWxh dGlvbiBwa19yZWwsCiAJICovCiAJcmlpbmZvID0gcmlfRmV0Y2hDb25zdHJhaW50SW5mbyh0 cmlnZ2VyLCBwa19yZWwsIHRydWUpOwogCi0Jc3dpdGNoIChyaWluZm8tPmNvbmZtYXRjaHR5 cGUpCi0JewotCQljYXNlIEZLQ09OU1RSX01BVENIX1NJTVBMRToKLQkJY2FzZSBGS0NPTlNU Ul9NQVRDSF9GVUxMOgotCi0JCQkvKgotCQkJICogSWYgYW55IG9sZCBrZXkgdmFsdWUgaXMg TlVMTCwgdGhlIHJvdyBjb3VsZCBub3QgaGF2ZSBiZWVuCi0JCQkgKiByZWZlcmVuY2VkIGJ5 IGFuIEZLIHJvdywgc28gbm8gY2hlY2sgaXMgbmVlZGVkLgotCQkJICovCi0JCQlpZiAocmlf TnVsbENoZWNrKFJlbGF0aW9uR2V0RGVzY3IocGtfcmVsKSwgb2xkX3JvdywgcmlpbmZvLCB0 cnVlKSAhPSBSSV9LRVlTX05PTkVfTlVMTCkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0KLQkJCS8q IElmIGFsbCBvbGQgYW5kIG5ldyBrZXkgdmFsdWVzIGFyZSBlcXVhbCwgbm8gY2hlY2sgaXMg bmVlZGVkICovCi0JCQlpZiAobmV3X3JvdyAmJiByaV9LZXlzRXF1YWwocGtfcmVsLCBvbGRf cm93LCBuZXdfcm93LCByaWluZm8sIHRydWUpKQotCQkJCXJldHVybiBmYWxzZTsKLQotCQkJ LyogRWxzZSB3ZSBuZWVkIHRvIGZpcmUgdGhlIHRyaWdnZXIuICovCi0JCQlyZXR1cm4gdHJ1 ZTsKLQotCQkJLyogSGFuZGxlIE1BVENIIFBBUlRJQUwgY2hlY2suICovCi0JCWNhc2UgRktD T05TVFJfTUFUQ0hfUEFSVElBTDoKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2Rl KEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkJIGVycm1zZygiTUFUQ0gg UEFSVElBTCBub3QgeWV0IGltcGxlbWVudGVkIikpKTsKLQkJCWJyZWFrOworCS8qCisJICog SWYgYW55IG9sZCBrZXkgdmFsdWUgaXMgTlVMTCwgdGhlIHJvdyBjb3VsZCBub3QgaGF2ZSBi ZWVuCisJICogcmVmZXJlbmNlZCBieSBhbiBGSyByb3csIHNvIG5vIGNoZWNrIGlzIG5lZWRl ZC4KKwkgKi8KKwlpZiAocmlfTnVsbENoZWNrKFJlbGF0aW9uR2V0RGVzY3IocGtfcmVsKSwg b2xkX3JvdywgcmlpbmZvLCB0cnVlKSAhPSBSSV9LRVlTX05PTkVfTlVMTCkKKwkJcmV0dXJu IGZhbHNlOwogCi0JCWRlZmF1bHQ6Ci0JCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGNv bmZtYXRjaHR5cGU6ICVkIiwKLQkJCQkgcmlpbmZvLT5jb25mbWF0Y2h0eXBlKTsKLQkJCWJy ZWFrOwotCX0KKwkvKiBJZiBhbGwgb2xkIGFuZCBuZXcga2V5IHZhbHVlcyBhcmUgZXF1YWws IG5vIGNoZWNrIGlzIG5lZWRlZCAqLworCWlmIChuZXdfcm93ICYmIHJpX0tleXNFcXVhbChw a19yZWwsIG9sZF9yb3csIG5ld19yb3csIHJpaW5mbywgdHJ1ZSkpCisJCXJldHVybiBmYWxz ZTsKIAotCS8qIE5ldmVyIHJlYWNoZWQgKi8KLQlyZXR1cm4gZmFsc2U7CisJLyogRWxzZSB3 ZSBuZWVkIHRvIGZpcmUgdGhlIHRyaWdnZXIuICovCisJcmV0dXJuIHRydWU7CiB9CiAKIC8q IC0tLS0tLS0tLS0KQEAgLTE1OTAsOTQgKzEzOTQsNzUgQEAgUklfRktleV9ma191cGRfY2hl Y2tfcmVxdWlyZWQoVHJpZ2dlciAqdHJpZ2dlciwgUmVsYXRpb24gZmtfcmVsLAogCQkJCQkJ CSAgSGVhcFR1cGxlIG9sZF9yb3csIEhlYXBUdXBsZSBuZXdfcm93KQogewogCWNvbnN0IFJJ X0NvbnN0cmFpbnRJbmZvICpyaWluZm87CisJaW50CQkJcmlfbnVsbGNoZWNrOwogCiAJLyoK IAkgKiBHZXQgYXJndW1lbnRzLgogCSAqLwogCXJpaW5mbyA9IHJpX0ZldGNoQ29uc3RyYWlu dEluZm8odHJpZ2dlciwgZmtfcmVsLCBmYWxzZSk7CiAKLQlzd2l0Y2ggKHJpaW5mby0+Y29u Zm1hdGNodHlwZSkKLQl7Ci0JCWNhc2UgRktDT05TVFJfTUFUQ0hfU0lNUExFOgotCi0JCQkv KgotCQkJICogSWYgYW55IG5ldyBrZXkgdmFsdWUgaXMgTlVMTCwgdGhlIHJvdyBtdXN0IHNh dGlzZnkgdGhlCi0JCQkgKiBjb25zdHJhaW50LCBzbyBubyBjaGVjayBpcyBuZWVkZWQuCi0J CQkgKi8KLQkJCWlmIChyaV9OdWxsQ2hlY2soUmVsYXRpb25HZXREZXNjcihma19yZWwpLCBu ZXdfcm93LCByaWluZm8sIGZhbHNlKSAhPSBSSV9LRVlTX05PTkVfTlVMTCkKLQkJCQlyZXR1 cm4gZmFsc2U7Ci0KLQkJCS8qCi0JCQkgKiBJZiB0aGUgb3JpZ2luYWwgcm93IHdhcyBpbnNl cnRlZCBieSBvdXIgb3duIHRyYW5zYWN0aW9uLCB3ZQotCQkJICogbXVzdCBmaXJlIHRoZSB0 cmlnZ2VyIHdoZXRoZXIgb3Igbm90IHRoZSBrZXlzIGFyZSBlcXVhbC4gIFRoaXMKLQkJCSAq IGlzIGJlY2F1c2Ugb3VyIFVQREFURSB3aWxsIGludmFsaWRhdGUgdGhlIElOU0VSVCBzbyB0 aGF0IHRoZQotCQkJICogSU5TRVJUIFJJIHRyaWdnZXIgd2lsbCBub3QgZG8gYW55dGhpbmc7 IHNvIHdlIGhhZCBiZXR0ZXIgZG8gdGhlCi0JCQkgKiBVUERBVEUgY2hlY2suICAoV2UgY291 bGQgc2tpcCB0aGlzIGlmIHdlIGtuZXcgdGhlIElOU0VSVAotCQkJICogdHJpZ2dlciBhbHJl YWR5IGZpcmVkLCBidXQgdGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8ga25vdyB0aGF0LikKLQkJ CSAqLwotCQkJaWYgKFRyYW5zYWN0aW9uSWRJc0N1cnJlbnRUcmFuc2FjdGlvbklkKEhlYXBU dXBsZUhlYWRlckdldFhtaW4ob2xkX3Jvdy0+dF9kYXRhKSkpCi0JCQkJcmV0dXJuIHRydWU7 CisJcmlfbnVsbGNoZWNrID0gcmlfTnVsbENoZWNrKFJlbGF0aW9uR2V0RGVzY3IoZmtfcmVs KSwgbmV3X3JvdywgcmlpbmZvLCBmYWxzZSk7CiAKLQkJCS8qIElmIGFsbCBvbGQgYW5kIG5l dyBrZXkgdmFsdWVzIGFyZSBlcXVhbCwgbm8gY2hlY2sgaXMgbmVlZGVkICovCi0JCQlpZiAo cmlfS2V5c0VxdWFsKGZrX3JlbCwgb2xkX3JvdywgbmV3X3JvdywgcmlpbmZvLCBmYWxzZSkp CisJLyoKKwkgKiBJZiBhbGwgbmV3IGtleSB2YWx1ZXMgYXJlIE5VTEwsIHRoZSByb3cgc2F0 aXNmaWVzIHRoZSBjb25zdHJhaW50LCBzbyBubworCSAqIGNoZWNrIGlzIG5lZWRlZC4KKwkg Ki8KKwlpZiAocmlfbnVsbGNoZWNrID09IFJJX0tFWVNfQUxMX05VTEwpCisJCXJldHVybiBm YWxzZTsKKwkvKgorCSAqIElmIHNvbWUgbmV3IGtleSB2YWx1ZXMgYXJlIE5VTEwsIHRoZSBi ZWhhdmlvciBkZXBlbmRzIG9uIHRoZSBtYXRjaCB0eXBlLgorCSAqLworCWVsc2UgaWYgKHJp X251bGxjaGVjayA9PSBSSV9LRVlTX1NPTUVfTlVMTCkKKwl7CisJCXN3aXRjaCAocmlpbmZv LT5jb25mbWF0Y2h0eXBlKQorCQl7CisJCQljYXNlIEZLQ09OU1RSX01BVENIX1NJTVBMRToK KwkJCQkvKgorCQkJCSAqIElmIGFueSBuZXcga2V5IHZhbHVlIGlzIE5VTEwsIHRoZSByb3cg bXVzdCBzYXRpc2Z5IHRoZQorCQkJCSAqIGNvbnN0cmFpbnQsIHNvIG5vIGNoZWNrIGlzIG5l ZWRlZC4KKwkJCQkgKi8KIAkJCQlyZXR1cm4gZmFsc2U7CiAKLQkJCS8qIEVsc2Ugd2UgbmVl ZCB0byBmaXJlIHRoZSB0cmlnZ2VyLiAqLwotCQkJcmV0dXJuIHRydWU7Ci0KLQkJY2FzZSBG S0NPTlNUUl9NQVRDSF9GVUxMOgotCi0JCQkvKgotCQkJICogSWYgYWxsIG5ldyBrZXkgdmFs dWVzIGFyZSBOVUxMLCB0aGUgcm93IG11c3Qgc2F0aXNmeSB0aGUKLQkJCSAqIGNvbnN0cmFp bnQsIHNvIG5vIGNoZWNrIGlzIG5lZWRlZC4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBvbmx5 Ci0JCQkgKiBzb21lIG9mIHRoZW0gYXJlIE5VTEwsIHRoZSByb3cgbXVzdCBmYWlsIHRoZSBj b25zdHJhaW50LiAgV2UKLQkJCSAqIG11c3Qgbm90IHRocm93IGVycm9yIGhlcmUsIGJlY2F1 c2UgdGhlIHJvdyBtaWdodCBnZXQKLQkJCSAqIGludmFsaWRhdGVkIGJlZm9yZSB0aGUgY29u c3RyYWludCBpcyB0byBiZSBjaGVja2VkLCBidXQgd2UKLQkJCSAqIHNob3VsZCBxdWV1ZSB0 aGUgZXZlbnQgdG8gYXBwbHkgdGhlIGNoZWNrIGxhdGVyLgotCQkJICovCi0JCQlzd2l0Y2gg KHJpX051bGxDaGVjayhSZWxhdGlvbkdldERlc2NyKGZrX3JlbCksIG5ld19yb3csIHJpaW5m bywgZmFsc2UpKQotCQkJewotCQkJCWNhc2UgUklfS0VZU19BTExfTlVMTDoKLQkJCQkJcmV0 dXJuIGZhbHNlOwotCQkJCWNhc2UgUklfS0VZU19TT01FX05VTEw6Ci0JCQkJCXJldHVybiB0 cnVlOwotCQkJCWNhc2UgUklfS0VZU19OT05FX05VTEw6Ci0JCQkJCWJyZWFrOwkJLyogY29u dGludWUgd2l0aCB0aGUgY2hlY2sgKi8KLQkJCX0KKwkJCWNhc2UgRktDT05TVFJfTUFUQ0hf UEFSVElBTDoKKwkJCQkvKgorCQkJCSAqIERvbid0IGtub3csIG11c3QgcnVuIGZ1bGwgY2hl Y2suCisJCQkJICovCisJCQkJYnJlYWs7CiAKLQkJCS8qCi0JCQkgKiBJZiB0aGUgb3JpZ2lu YWwgcm93IHdhcyBpbnNlcnRlZCBieSBvdXIgb3duIHRyYW5zYWN0aW9uLCB3ZQotCQkJICog bXVzdCBmaXJlIHRoZSB0cmlnZ2VyIHdoZXRoZXIgb3Igbm90IHRoZSBrZXlzIGFyZSBlcXVh bC4gIFRoaXMKLQkJCSAqIGlzIGJlY2F1c2Ugb3VyIFVQREFURSB3aWxsIGludmFsaWRhdGUg dGhlIElOU0VSVCBzbyB0aGF0IHRoZQotCQkJICogSU5TRVJUIFJJIHRyaWdnZXIgd2lsbCBu b3QgZG8gYW55dGhpbmc7IHNvIHdlIGhhZCBiZXR0ZXIgZG8gdGhlCi0JCQkgKiBVUERBVEUg Y2hlY2suICAoV2UgY291bGQgc2tpcCB0aGlzIGlmIHdlIGtuZXcgdGhlIElOU0VSVAotCQkJ ICogdHJpZ2dlciBhbHJlYWR5IGZpcmVkLCBidXQgdGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8g a25vdyB0aGF0LikKLQkJCSAqLwotCQkJaWYgKFRyYW5zYWN0aW9uSWRJc0N1cnJlbnRUcmFu c2FjdGlvbklkKEhlYXBUdXBsZUhlYWRlckdldFhtaW4ob2xkX3Jvdy0+dF9kYXRhKSkpCisJ CQljYXNlIEZLQ09OU1RSX01BVENIX0ZVTEw6CisJCQkJLyoKKwkJCQkgKiBJZiBzb21lIG5l dyBrZXkgdmFsdWVzIGFyZSBOVUxMLCB0aGUgcm93IGZhaWxzIHRoZQorCQkJCSAqIGNvbnN0 cmFpbnQuICBXZSBtdXN0IG5vdCB0aHJvdyBlcnJvciBoZXJlLCBiZWNhdXNlIHRoZSByb3cK KwkJCQkgKiBtaWdodCBnZXQgaW52YWxpZGF0ZWQgYmVmb3JlIHRoZSBjb25zdHJhaW50IGlz IHRvIGJlCisJCQkJICogY2hlY2tlZCwgYnV0IHdlIHNob3VsZCBxdWV1ZSB0aGUgZXZlbnQg dG8gYXBwbHkgdGhlIGNoZWNrCisJCQkJICogbGF0ZXIuCisJCQkJICovCiAJCQkJcmV0dXJu IHRydWU7CisJCX0KKwl9CiAKLQkJCS8qIElmIGFsbCBvbGQgYW5kIG5ldyBrZXkgdmFsdWVz IGFyZSBlcXVhbCwgbm8gY2hlY2sgaXMgbmVlZGVkICovCi0JCQlpZiAocmlfS2V5c0VxdWFs KGZrX3JlbCwgb2xkX3JvdywgbmV3X3JvdywgcmlpbmZvLCBmYWxzZSkpCi0JCQkJcmV0dXJu IGZhbHNlOwotCi0JCQkvKiBFbHNlIHdlIG5lZWQgdG8gZmlyZSB0aGUgdHJpZ2dlci4gKi8K LQkJCXJldHVybiB0cnVlOworCS8qCisJICogQ29udGludWVzIGhlcmUgZm9yIG5vIG5ldyBr ZXkgdmFsdWVzIGFyZSBOVUxMLCBvciB3ZSBjb3VsZG4ndCBkZWNpZGUKKwkgKiB5ZXQuCisJ ICovCiAKLQkJCS8qIEhhbmRsZSBNQVRDSCBQQVJUSUFMIGNoZWNrLiAqLwotCQljYXNlIEZL Q09OU1RSX01BVENIX1BBUlRJQUw6Ci0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29k ZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJCSBlcnJtc2coIk1BVENI IFBBUlRJQUwgbm90IHlldCBpbXBsZW1lbnRlZCIpKSk7Ci0JCQlicmVhazsKKwkvKgorCSAq IElmIHRoZSBvcmlnaW5hbCByb3cgd2FzIGluc2VydGVkIGJ5IG91ciBvd24gdHJhbnNhY3Rp b24sIHdlCisJICogbXVzdCBmaXJlIHRoZSB0cmlnZ2VyIHdoZXRoZXIgb3Igbm90IHRoZSBr ZXlzIGFyZSBlcXVhbC4gIFRoaXMKKwkgKiBpcyBiZWNhdXNlIG91ciBVUERBVEUgd2lsbCBp bnZhbGlkYXRlIHRoZSBJTlNFUlQgc28gdGhhdCB0aGUKKwkgKiBJTlNFUlQgUkkgdHJpZ2dl ciB3aWxsIG5vdCBkbyBhbnl0aGluZzsgc28gd2UgaGFkIGJldHRlciBkbyB0aGUKKwkgKiBV UERBVEUgY2hlY2suICAoV2UgY291bGQgc2tpcCB0aGlzIGlmIHdlIGtuZXcgdGhlIElOU0VS VAorCSAqIHRyaWdnZXIgYWxyZWFkeSBmaXJlZCwgYnV0IHRoZXJlIGlzIG5vIGVhc3kgd2F5 IHRvIGtub3cgdGhhdC4pCisJICovCisJaWYgKFRyYW5zYWN0aW9uSWRJc0N1cnJlbnRUcmFu c2FjdGlvbklkKEhlYXBUdXBsZUhlYWRlckdldFhtaW4ob2xkX3Jvdy0+dF9kYXRhKSkpCisJ CXJldHVybiB0cnVlOwogCi0JCWRlZmF1bHQ6Ci0JCQllbG9nKEVSUk9SLCAidW5yZWNvZ25p emVkIGNvbmZtYXRjaHR5cGU6ICVkIiwKLQkJCQkgcmlpbmZvLT5jb25mbWF0Y2h0eXBlKTsK LQkJCWJyZWFrOwotCX0KKwkvKiBJZiBhbGwgb2xkIGFuZCBuZXcga2V5IHZhbHVlcyBhcmUg ZXF1YWwsIG5vIGNoZWNrIGlzIG5lZWRlZCAqLworCWlmIChyaV9LZXlzRXF1YWwoZmtfcmVs LCBvbGRfcm93LCBuZXdfcm93LCByaWluZm8sIGZhbHNlKSkKKwkJcmV0dXJuIGZhbHNlOwog Ci0JLyogTmV2ZXIgcmVhY2hlZCAqLwotCXJldHVybiBmYWxzZTsKKwkvKiBFbHNlIHdlIG5l ZWQgdG8gZmlyZSB0aGUgdHJpZ2dlci4gKi8KKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyogLS0t LS0tLS0tLQpAQCAtMTg0NiwxNSArMTYzMSw2IEBAIFJJX0luaXRpYWxfQ2hlY2soVHJpZ2dl ciAqdHJpZ2dlciwgUmVsYXRpb24gZmtfcmVsLCBSZWxhdGlvbiBwa19yZWwpCiAJCQljYXNl IEZLQ09OU1RSX01BVENIX0ZVTEw6CiAJCQkJc2VwID0gIiBPUiAiOwogCQkJCWJyZWFrOwot CQkJY2FzZSBGS0NPTlNUUl9NQVRDSF9QQVJUSUFMOgotCQkJCWVyZXBvcnQoRVJST1IsCi0J CQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJCQkg ZXJybXNnKCJNQVRDSCBQQVJUSUFMIG5vdCB5ZXQgaW1wbGVtZW50ZWQiKSkpOwotCQkJCWJy ZWFrOwotCQkJZGVmYXVsdDoKLQkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGNvbmZt YXRjaHR5cGU6ICVkIiwKLQkJCQkJIHJpaW5mby0+Y29uZm1hdGNodHlwZSk7Ci0JCQkJYnJl YWs7CiAJCX0KIAl9CiAJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJnF1ZXJ5YnVmLCAnKScpOwpA QCAtMjE3Niw2ICsxOTUyLDE3IEBAIHJpX0ZldGNoQ29uc3RyYWludEluZm8oVHJpZ2dlciAq dHJpZ2dlciwgUmVsYXRpb24gdHJpZ19yZWwsIGJvb2wgcmVsX2lzX3BrKQogCQkJCSB0cmln Z2VyLT50Z25hbWUsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHRyaWdfcmVsKSk7CiAJfQog CisJaWYgKHJpaW5mby0+Y29uZm1hdGNodHlwZSAhPSBGS0NPTlNUUl9NQVRDSF9GVUxMICYm CisJCXJpaW5mby0+Y29uZm1hdGNodHlwZSAhPSBGS0NPTlNUUl9NQVRDSF9QQVJUSUFMICYm CisJCXJpaW5mby0+Y29uZm1hdGNodHlwZSAhPSBGS0NPTlNUUl9NQVRDSF9TSU1QTEUpCisJ CWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgY29uZm1hdGNodHlwZTogJWQiLAorCQkJIHJp aW5mby0+Y29uZm1hdGNodHlwZSk7CisKKwlpZiAocmlpbmZvLT5jb25mbWF0Y2h0eXBlID09 IEZLQ09OU1RSX01BVENIX1BBUlRJQUwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2coIk1BVENI IFBBUlRJQUwgbm90IHlldCBpbXBsZW1lbnRlZCIpKSk7CisKIAlyZXR1cm4gcmlpbmZvOwog fQogCgpiYXNlLWNvbW1pdDogNTU0Y2E2OTU0ZWNiZmM1NGU3MTU5YTYwOWI1ZmZjNzkyMTY3 MDE4NQotLSAKMi4yMC4xCgo= --------------4573FA42DDAF0E00FE827686 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="0002-Reduce-comments.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0002-Reduce-comments.patch" RnJvbSA1MzA3MTg1ZjczNmU0OTFjN2JhZjRkYTg2Y2Y2ZTRhYjg2YWFmY2E3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogRnJpLCAyMiBGZWIgMjAxOSAxMjo0NToxMSArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggMi8zXSBSZWR1Y2UgY29tbWVudHMKClJlZHVjZSB0aGUgdmVydGljYWwgc3Bh Y2UgdXNlZCBieSBjb21tZW50cyBpbiByaV90cmlnZ2Vycy5jLCBtYWtpbmcKdGhlIGZpbGUg bG9uZ2VyIGFuZCBtb3JlIHRlZGlvdXMgdG8gcmVhZCB0aGFuIGl0IG5lZWRzIHRvIGJlLgot LS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jIHwgMzc5ICsrKysrKysr KystLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMzMgaW5zZXJ0aW9ucygr KSwgMjQ2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9yaV90cmlnZ2Vycy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMK aW5kZXggOGU3ZTZhMWE2NC4uYWE3M2YzMTE0NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Jp X3RyaWdnZXJzLmMKQEAgLTEsNCArMSw1IEBACi0vKiAtLS0tLS0tLS0tCisvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCiAgKiByaV90cmlnZ2Vycy5jCiAgKgogICoJR2VuZXJpYyB0cmln Z2VyIHByb2NlZHVyZXMgZm9yIHJlZmVyZW50aWFsIGludGVncml0eSBjb25zdHJhaW50CkBA IC0xNyw3ICsxOCw3IEBACiAgKgogICogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdn ZXJzLmMKICAqCi0gKiAtLS0tLS0tLS0tCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwog CiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKQEAgLTUyLDkgKzUzLDggQEAKICNpbmNsdWRlICJ1 dGlscy9zeXNjYWNoZS5oIgogCiAKLS8qIC0tLS0tLS0tLS0KKy8qCiAgKiBMb2NhbCBkZWZp bml0aW9ucwotICogLS0tLS0tLS0tLQogICovCiAKICNkZWZpbmUgUklfTUFYX05VTUtFWVMJ CQkJCUlOREVYX01BWF9LRVlTCkBAIC05MCwxMiArOTAsMTEgQEAKICNkZWZpbmUgUklfVFJJ R1RZUEVfREVMRVRFIDMKIAogCi0vKiAtLS0tLS0tLS0tCisvKgogICogUklfQ29uc3RyYWlu dEluZm8KICAqCi0gKglJbmZvcm1hdGlvbiBleHRyYWN0ZWQgZnJvbSBhbiBGSyBwZ19jb25z dHJhaW50IGVudHJ5LiAgVGhpcyBpcyBjYWNoZWQgaW4KLSAqCXJpX2NvbnN0cmFpbnRfY2Fj aGUuCi0gKiAtLS0tLS0tLS0tCisgKiBJbmZvcm1hdGlvbiBleHRyYWN0ZWQgZnJvbSBhbiBG SyBwZ19jb25zdHJhaW50IGVudHJ5LiAgVGhpcyBpcyBjYWNoZWQgaW4KKyAqIHJpX2NvbnN0 cmFpbnRfY2FjaGUuCiAgKi8KIHR5cGVkZWYgc3RydWN0IFJJX0NvbnN0cmFpbnRJbmZvCiB7 CkBAIC0xMTcsMTIgKzExNiwxMCBAQCB0eXBlZGVmIHN0cnVjdCBSSV9Db25zdHJhaW50SW5m bwogCWRsaXN0X25vZGUJdmFsaWRfbGluazsJCS8qIExpbmsgaW4gbGlzdCBvZiB2YWxpZCBl bnRyaWVzICovCiB9IFJJX0NvbnN0cmFpbnRJbmZvOwogCi0KLS8qIC0tLS0tLS0tLS0KKy8q CiAgKiBSSV9RdWVyeUtleQogICoKLSAqCVRoZSBrZXkgaWRlbnRpZnlpbmcgYSBwcmVwYXJl ZCBTUEkgcGxhbiBpbiBvdXIgcXVlcnkgaGFzaHRhYmxlCi0gKiAtLS0tLS0tLS0tCisgKiBU aGUga2V5IGlkZW50aWZ5aW5nIGEgcHJlcGFyZWQgU1BJIHBsYW4gaW4gb3VyIHF1ZXJ5IGhh c2h0YWJsZQogICovCiB0eXBlZGVmIHN0cnVjdCBSSV9RdWVyeUtleQogewpAQCAtMTMwLDEw ICsxMjcsOCBAQCB0eXBlZGVmIHN0cnVjdCBSSV9RdWVyeUtleQogCWludDMyCQljb25zdHJf cXVlcnlubzsgLyogcXVlcnkgdHlwZSBJRCwgc2VlIFJJX1BMQU5fWFhYIGFib3ZlICovCiB9 IFJJX1F1ZXJ5S2V5OwogCi0KLS8qIC0tLS0tLS0tLS0KKy8qCiAgKiBSSV9RdWVyeUhhc2hF bnRyeQotICogLS0tLS0tLS0tLQogICovCiB0eXBlZGVmIHN0cnVjdCBSSV9RdWVyeUhhc2hF bnRyeQogewpAQCAtMTQxLDEyICsxMzYsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgUklfUXVlcnlI YXNoRW50cnkKIAlTUElQbGFuUHRyCXBsYW47CiB9IFJJX1F1ZXJ5SGFzaEVudHJ5OwogCi0K LS8qIC0tLS0tLS0tLS0KKy8qCiAgKiBSSV9Db21wYXJlS2V5CiAgKgotICoJVGhlIGtleSBp ZGVudGlmeWluZyBhbiBlbnRyeSBzaG93aW5nIGhvdyB0byBjb21wYXJlIHR3byB2YWx1ZXMK LSAqIC0tLS0tLS0tLS0KKyAqIFRoZSBrZXkgaWRlbnRpZnlpbmcgYW4gZW50cnkgc2hvd2lu ZyBob3cgdG8gY29tcGFyZSB0d28gdmFsdWVzCiAgKi8KIHR5cGVkZWYgc3RydWN0IFJJX0Nv bXBhcmVLZXkKIHsKQEAgLTE1NCwxMCArMTQ3LDggQEAgdHlwZWRlZiBzdHJ1Y3QgUklfQ29t cGFyZUtleQogCU9pZAkJCXR5cGVpZDsJCQkvKiB0aGUgZGF0YSB0eXBlIHRvIGFwcGx5IGl0 IHRvICovCiB9IFJJX0NvbXBhcmVLZXk7CiAKLQotLyogLS0tLS0tLS0tLQorLyoKICAqIFJJ X0NvbXBhcmVIYXNoRW50cnkKLSAqIC0tLS0tLS0tLS0KICAqLwogdHlwZWRlZiBzdHJ1Y3Qg UklfQ29tcGFyZUhhc2hFbnRyeQogewpAQCAtMTY4LDkgKzE1OSw4IEBAIHR5cGVkZWYgc3Ry dWN0IFJJX0NvbXBhcmVIYXNoRW50cnkKIH0gUklfQ29tcGFyZUhhc2hFbnRyeTsKIAogCi0v KiAtLS0tLS0tLS0tCisvKgogICogTG9jYWwgZGF0YQotICogLS0tLS0tLS0tLQogICovCiBz dGF0aWMgSFRBQiAqcmlfY29uc3RyYWludF9jYWNoZSA9IE5VTEw7CiBzdGF0aWMgSFRBQiAq cmlfcXVlcnlfY2FjaGUgPSBOVUxMOwpAQCAtMTc5LDkgKzE2OSw4IEBAIHN0YXRpYyBkbGlz dF9oZWFkIHJpX2NvbnN0cmFpbnRfY2FjaGVfdmFsaWRfbGlzdDsKIHN0YXRpYyBpbnQJcmlf Y29uc3RyYWludF9jYWNoZV92YWxpZF9jb3VudCA9IDA7CiAKIAotLyogLS0tLS0tLS0tLQor LyoKICAqIExvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMKLSAqIC0tLS0tLS0tLS0KICAqLwog c3RhdGljIGJvb2wgcmlfQ2hlY2tfUGtfTWF0Y2goUmVsYXRpb24gcGtfcmVsLCBSZWxhdGlv biBma19yZWwsCiAJCQkJICBIZWFwVHVwbGUgb2xkX3JvdywKQEAgLTIzNSwxMSArMjI0LDEw IEBAIHN0YXRpYyB2b2lkIHJpX1JlcG9ydFZpb2xhdGlvbihjb25zdCBSSV9Db25zdHJhaW50 SW5mbyAqcmlpbmZvLAogCQkJCSAgIGludCBxdWVyeW5vKSBwZ19hdHRyaWJ1dGVfbm9yZXR1 cm4oKTsKIAogCi0vKiAtLS0tLS0tLS0tCisvKgogICogUklfRktleV9jaGVjayAtCiAgKgot ICoJQ2hlY2sgZm9yZWlnbiBrZXkgZXhpc3RlbmNlIChjb21iaW5lZCBmb3IgSU5TRVJUIGFu ZCBVUERBVEUpLgotICogLS0tLS0tLS0tLQorICogQ2hlY2sgZm9yZWlnbiBrZXkgZXhpc3Rl bmNlIChjb21iaW5lZCBmb3IgSU5TRVJUIGFuZCBVUERBVEUpLgogICovCiBzdGF0aWMgRGF0 dW0KIFJJX0ZLZXlfY2hlY2soVHJpZ2dlckRhdGEgKnRyaWdkYXRhKQpAQCAtMjUzLDkgKzI0 MSw2IEBAIFJJX0ZLZXlfY2hlY2soVHJpZ2dlckRhdGEgKnRyaWdkYXRhKQogCVNQSVBsYW5Q dHIJcXBsYW47CiAJaW50CQkJaTsKIAotCS8qCi0JICogR2V0IGFyZ3VtZW50cy4KLQkgKi8K IAlyaWluZm8gPSByaV9GZXRjaENvbnN0cmFpbnRJbmZvKHRyaWdkYXRhLT50Z190cmlnZ2Vy LAogCQkJCQkJCQkJdHJpZ2RhdGEtPnRnX3JlbGF0aW9uLCBmYWxzZSk7CiAKQEAgLTM2NSw5 ICszNTAsNyBAQCBSSV9GS2V5X2NoZWNrKFRyaWdnZXJEYXRhICp0cmlnZGF0YSkKIAlpZiAo U1BJX2Nvbm5lY3QoKSAhPSBTUElfT0tfQ09OTkVDVCkKIAkJZWxvZyhFUlJPUiwgIlNQSV9j b25uZWN0IGZhaWxlZCIpOwogCi0JLyoKLQkgKiBGZXRjaCBvciBwcmVwYXJlIGEgc2F2ZWQg cGxhbiBmb3IgdGhlIHJlYWwgY2hlY2sKLQkgKi8KKwkvKiBGZXRjaCBvciBwcmVwYXJlIGEg c2F2ZWQgcGxhbiBmb3IgdGhlIHJlYWwgY2hlY2sgKi8KIAlyaV9CdWlsZFF1ZXJ5S2V5KCZx a2V5LCByaWluZm8sIFJJX1BMQU5fQ0hFQ0tfTE9PS1VQUEspOwogCiAJaWYgKChxcGxhbiA9 IHJpX0ZldGNoUHJlcGFyZWRQbGFuKCZxa2V5KSkgPT0gTlVMTCkKQEAgLTQzMSw0OSArNDE0 LDM5IEBAIFJJX0ZLZXlfY2hlY2soVHJpZ2dlckRhdGEgKnRyaWdkYXRhKQogfQogCiAKLS8q IC0tLS0tLS0tLS0KKy8qCiAgKiBSSV9GS2V5X2NoZWNrX2lucyAtCiAgKgotICoJQ2hlY2sg Zm9yZWlnbiBrZXkgZXhpc3RlbmNlIGF0IGluc2VydCBldmVudCBvbiBGSyB0YWJsZS4KLSAq IC0tLS0tLS0tLS0KKyAqIENoZWNrIGZvcmVpZ24ga2V5IGV4aXN0ZW5jZSBhdCBpbnNlcnQg ZXZlbnQgb24gRksgdGFibGUuCiAgKi8KIERhdHVtCiBSSV9GS2V5X2NoZWNrX2lucyhQR19G VU5DVElPTl9BUkdTKQogewotCS8qCi0JICogQ2hlY2sgdGhhdCB0aGlzIGlzIGEgdmFsaWQg dHJpZ2dlciBjYWxsIG9uIHRoZSByaWdodCB0aW1lIGFuZCBldmVudC4KLQkgKi8KKwkvKiBD aGVjayB0aGF0IHRoaXMgaXMgYSB2YWxpZCB0cmlnZ2VyIGNhbGwgb24gdGhlIHJpZ2h0IHRp bWUgYW5kIGV2ZW50LiAqLwogCXJpX0NoZWNrVHJpZ2dlcihmY2luZm8sICJSSV9GS2V5X2No ZWNrX2lucyIsIFJJX1RSSUdUWVBFX0lOU0VSVCk7CiAKLQkvKgotCSAqIFNoYXJlIGNvZGUg d2l0aCBVUERBVEUgY2FzZS4KLQkgKi8KKwkvKiBTaGFyZSBjb2RlIHdpdGggVVBEQVRFIGNh c2UuICovCiAJcmV0dXJuIFJJX0ZLZXlfY2hlY2soKFRyaWdnZXJEYXRhICopIGZjaW5mby0+ Y29udGV4dCk7CiB9CiAKIAotLyogLS0tLS0tLS0tLQorLyoKICAqIFJJX0ZLZXlfY2hlY2tf dXBkIC0KICAqCi0gKglDaGVjayBmb3JlaWduIGtleSBleGlzdGVuY2UgYXQgdXBkYXRlIGV2 ZW50IG9uIEZLIHRhYmxlLgotICogLS0tLS0tLS0tLQorICogQ2hlY2sgZm9yZWlnbiBrZXkg ZXhpc3RlbmNlIGF0IHVwZGF0ZSBldmVudCBvbiBGSyB0YWJsZS4KICAqLwogRGF0dW0KIFJJ X0ZLZXlfY2hlY2tfdXBkKFBHX0ZVTkNUSU9OX0FSR1MpCiB7Ci0JLyoKLQkgKiBDaGVjayB0 aGF0IHRoaXMgaXMgYSB2YWxpZCB0cmlnZ2VyIGNhbGwgb24gdGhlIHJpZ2h0IHRpbWUgYW5k IGV2ZW50LgotCSAqLworCS8qIENoZWNrIHRoYXQgdGhpcyBpcyBhIHZhbGlkIHRyaWdnZXIg Y2FsbCBvbiB0aGUgcmlnaHQgdGltZSBhbmQgZXZlbnQuICovCiAJcmlfQ2hlY2tUcmlnZ2Vy KGZjaW5mbywgIlJJX0ZLZXlfY2hlY2tfdXBkIiwgUklfVFJJR1RZUEVfVVBEQVRFKTsKIAot CS8qCi0JICogU2hhcmUgY29kZSB3aXRoIElOU0VSVCBjYXNlLgotCSAqLworCS8qIFNoYXJl IGNvZGUgd2l0aCBJTlNFUlQgY2FzZS4gKi8KIAlyZXR1cm4gUklfRktleV9jaGVjaygoVHJp Z2dlckRhdGEgKikgZmNpbmZvLT5jb250ZXh0KTsKIH0KIAogCi0vKiAtLS0tLS0tLS0tCisv KgogICogcmlfQ2hlY2tfUGtfTWF0Y2gKICAqCiAgKiBDaGVjayB0byBzZWUgaWYgYW5vdGhl ciBQSyByb3cgaGFzIGJlZW4gY3JlYXRlZCB0aGF0IHByb3ZpZGVzIHRoZSBzYW1lCkBAIC00 ODIsNyArNDU1LDYgQEAgUklfRktleV9jaGVja191cGQoUEdfRlVOQ1RJT05fQVJHUykKICAq CiAgKiBXZSBhc3N1bWUgdGhlIGNhbGxlciBjaGVja2VkIHRoYXQgdGhlIG9sZF9yb3cgY29u dGFpbnMgbm8gTlVMTCBrZXkgdmFsdWVzLAogICogc2luY2Ugb3RoZXJ3aXNlIGEgbWF0Y2gg aXMgaW1wb3NzaWJsZS4KLSAqIC0tLS0tLS0tLS0KICAqLwogc3RhdGljIGJvb2wKIHJpX0No ZWNrX1BrX01hdGNoKFJlbGF0aW9uIHBrX3JlbCwgUmVsYXRpb24gZmtfcmVsLApAQCAtNTY0 LDEwNiArNTM2LDg1IEBAIHJpX0NoZWNrX1BrX01hdGNoKFJlbGF0aW9uIHBrX3JlbCwgUmVs YXRpb24gZmtfcmVsLAogfQogCiAKLS8qIC0tLS0tLS0tLS0KKy8qCiAgKiBSSV9GS2V5X25v YWN0aW9uX2RlbCAtCiAgKgotICoJR2l2ZSBhbiBlcnJvciBhbmQgcm9sbCBiYWNrIHRoZSBj dXJyZW50IHRyYW5zYWN0aW9uIGlmIHRoZQotICoJZGVsZXRlIGhhcyByZXN1bHRlZCBpbiBh IHZpb2xhdGlvbiBvZiB0aGUgZ2l2ZW4gcmVmZXJlbnRpYWwKLSAqCWludGVncml0eSBjb25z dHJhaW50LgotICogLS0tLS0tLS0tLQorICogR2l2ZSBhbiBlcnJvciBhbmQgcm9sbCBiYWNr IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlmIHRoZQorICogZGVsZXRlIGhhcyByZXN1bHRl ZCBpbiBhIHZpb2xhdGlvbiBvZiB0aGUgZ2l2ZW4gcmVmZXJlbnRpYWwKKyAqIGludGVncml0 eSBjb25zdHJhaW50LgogICovCiBEYXR1bQogUklfRktleV9ub2FjdGlvbl9kZWwoUEdfRlVO Q1RJT05fQVJHUykKIHsKLQkvKgotCSAqIENoZWNrIHRoYXQgdGhpcyBpcyBhIHZhbGlkIHRy aWdnZXIgY2FsbCBvbiB0aGUgcmlnaHQgdGltZSBhbmQgZXZlbnQuCi0JICovCisJLyogQ2hl Y2sgdGhhdCB0aGlzIGlzIGEgdmFsaWQgdHJpZ2dlciBjYWxsIG9uIHRoZSByaWdodCB0aW1l IGFuZCBldmVudC4gKi8KIAlyaV9DaGVja1RyaWdnZXIoZmNpbmZvLCAiUklfRktleV9ub2Fj dGlvbl9kZWwiLCBSSV9UUklHVFlQRV9ERUxFVEUpOwogCi0JLyoKLQkgKiBTaGFyZSBjb2Rl IHdpdGggUkVTVFJJQ1QvVVBEQVRFIGNhc2VzLgotCSAqLworCS8qIFNoYXJlIGNvZGUgd2l0 aCBSRVNUUklDVC9VUERBVEUgY2FzZXMuICovCiAJcmV0dXJuIHJpX3Jlc3RyaWN0KChUcmln Z2VyRGF0YSAqKSBmY2luZm8tPmNvbnRleHQsIHRydWUpOwogfQogCi0vKiAtLS0tLS0tLS0t CisvKgogICogUklfRktleV9yZXN0cmljdF9kZWwgLQogICoKLSAqCVJlc3RyaWN0IGRlbGV0 ZSBmcm9tIFBLIHRhYmxlIHRvIHJvd3MgdW5yZWZlcmVuY2VkIGJ5IGZvcmVpZ24ga2V5Lgor ICogUmVzdHJpY3QgZGVsZXRlIGZyb20gUEsgdGFibGUgdG8gcm93cyB1bnJlZmVyZW5jZWQg YnkgZm9yZWlnbiBrZXkuCiAgKgotICoJVGhlIFNRTCBzdGFuZGFyZCBpbnRlbmRzIHRoYXQg dGhpcyByZWZlcmVudGlhbCBhY3Rpb24gb2NjdXIgZXhhY3RseSB3aGVuCi0gKgl0aGUgZGVs ZXRlIGlzIHBlcmZvcm1lZCwgcmF0aGVyIHRoYW4gYWZ0ZXIuICBUaGlzIGFwcGVhcnMgdG8g YmUKLSAqCXRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiAiTk8gQUNUSU9OIiBhbmQgIlJF U1RSSUNUIi4gIEluIFBvc3RncmVzCi0gKgl3ZSBzdGlsbCBpbXBsZW1lbnQgdGhpcyBhcyBh biBBRlRFUiB0cmlnZ2VyLCBidXQgaXQncyBub24tZGVmZXJyYWJsZS4KLSAqIC0tLS0tLS0t LS0KKyAqIFRoZSBTUUwgc3RhbmRhcmQgaW50ZW5kcyB0aGF0IHRoaXMgcmVmZXJlbnRpYWwg YWN0aW9uIG9jY3VyIGV4YWN0bHkgd2hlbgorICogdGhlIGRlbGV0ZSBpcyBwZXJmb3JtZWQs IHJhdGhlciB0aGFuIGFmdGVyLiAgVGhpcyBhcHBlYXJzIHRvIGJlCisgKiB0aGUgb25seSBk aWZmZXJlbmNlIGJldHdlZW4gIk5PIEFDVElPTiIgYW5kICJSRVNUUklDVCIuICBJbiBQb3N0 Z3JlcworICogd2Ugc3RpbGwgaW1wbGVtZW50IHRoaXMgYXMgYW4gQUZURVIgdHJpZ2dlciwg YnV0IGl0J3Mgbm9uLWRlZmVycmFibGUuCiAgKi8KIERhdHVtCiBSSV9GS2V5X3Jlc3RyaWN0 X2RlbChQR19GVU5DVElPTl9BUkdTKQogewotCS8qCi0JICogQ2hlY2sgdGhhdCB0aGlzIGlz IGEgdmFsaWQgdHJpZ2dlciBjYWxsIG9uIHRoZSByaWdodCB0aW1lIGFuZCBldmVudC4KLQkg Ki8KKwkvKiBDaGVjayB0aGF0IHRoaXMgaXMgYSB2YWxpZCB0cmlnZ2VyIGNhbGwgb24gdGhl IHJpZ2h0IHRpbWUgYW5kIGV2ZW50LiAqLwogCXJpX0NoZWNrVHJpZ2dlcihmY2luZm8sICJS SV9GS2V5X3Jlc3RyaWN0X2RlbCIsIFJJX1RSSUdUWVBFX0RFTEVURSk7CiAKLQkvKgotCSAq IFNoYXJlIGNvZGUgd2l0aCBOTyBBQ1RJT04vVVBEQVRFIGNhc2VzLgotCSAqLworCS8qIFNo YXJlIGNvZGUgd2l0aCBOTyBBQ1RJT04vVVBEQVRFIGNhc2VzLiAqLwogCXJldHVybiByaV9y ZXN0cmljdCgoVHJpZ2dlckRhdGEgKikgZmNpbmZvLT5jb250ZXh0LCBmYWxzZSk7CiB9CiAK LS8qIC0tLS0tLS0tLS0KKy8qCiAgKiBSSV9GS2V5X25vYWN0aW9uX3VwZCAtCiAgKgotICoJ R2l2ZSBhbiBlcnJvciBhbmQgcm9sbCBiYWNrIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlm IHRoZQotICoJdXBkYXRlIGhhcyByZXN1bHRlZCBpbiBhIHZpb2xhdGlvbiBvZiB0aGUgZ2l2 ZW4gcmVmZXJlbnRpYWwKLSAqCWludGVncml0eSBjb25zdHJhaW50LgotICogLS0tLS0tLS0t LQorICogR2l2ZSBhbiBlcnJvciBhbmQgcm9sbCBiYWNrIHRoZSBjdXJyZW50IHRyYW5zYWN0 aW9uIGlmIHRoZQorICogdXBkYXRlIGhhcyByZXN1bHRlZCBpbiBhIHZpb2xhdGlvbiBvZiB0 aGUgZ2l2ZW4gcmVmZXJlbnRpYWwKKyAqIGludGVncml0eSBjb25zdHJhaW50LgogICovCiBE YXR1bQogUklfRktleV9ub2FjdGlvbl91cGQoUEdfRlVOQ1RJT05fQVJHUykKIHsKLQkvKgot CSAqIENoZWNrIHRoYXQgdGhpcyBpcyBhIHZhbGlkIHRyaWdnZXIgY2FsbCBvbiB0aGUgcmln aHQgdGltZSBhbmQgZXZlbnQuCi0JICovCisJLyogQ2hlY2sgdGhhdCB0aGlzIGlzIGEgdmFs aWQgdHJpZ2dlciBjYWxsIG9uIHRoZSByaWdodCB0aW1lIGFuZCBldmVudC4gKi8KIAlyaV9D aGVja1RyaWdnZXIoZmNpbmZvLCAiUklfRktleV9ub2FjdGlvbl91cGQiLCBSSV9UUklHVFlQ RV9VUERBVEUpOwogCi0JLyoKLQkgKiBTaGFyZSBjb2RlIHdpdGggUkVTVFJJQ1QvREVMRVRF IGNhc2VzLgotCSAqLworCS8qIFNoYXJlIGNvZGUgd2l0aCBSRVNUUklDVC9ERUxFVEUgY2Fz ZXMuICovCiAJcmV0dXJuIHJpX3Jlc3RyaWN0KChUcmlnZ2VyRGF0YSAqKSBmY2luZm8tPmNv bnRleHQsIHRydWUpOwogfQogCi0vKiAtLS0tLS0tLS0tCisvKgogICogUklfRktleV9yZXN0 cmljdF91cGQgLQogICoKLSAqCVJlc3RyaWN0IHVwZGF0ZSBvZiBQSyB0byByb3dzIHVucmVm ZXJlbmNlZCBieSBmb3JlaWduIGtleS4KKyAqIFJlc3RyaWN0IHVwZGF0ZSBvZiBQSyB0byBy b3dzIHVucmVmZXJlbmNlZCBieSBmb3JlaWduIGtleS4KICAqCi0gKglUaGUgU1FMIHN0YW5k YXJkIGludGVuZHMgdGhhdCB0aGlzIHJlZmVyZW50aWFsIGFjdGlvbiBvY2N1ciBleGFjdGx5 IHdoZW4KLSAqCXRoZSB1cGRhdGUgaXMgcGVyZm9ybWVkLCByYXRoZXIgdGhhbiBhZnRlci4g IFRoaXMgYXBwZWFycyB0byBiZQotICoJdGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuICJO TyBBQ1RJT04iIGFuZCAiUkVTVFJJQ1QiLiAgSW4gUG9zdGdyZXMKLSAqCXdlIHN0aWxsIGlt cGxlbWVudCB0aGlzIGFzIGFuIEFGVEVSIHRyaWdnZXIsIGJ1dCBpdCdzIG5vbi1kZWZlcnJh YmxlLgotICogLS0tLS0tLS0tLQorICogVGhlIFNRTCBzdGFuZGFyZCBpbnRlbmRzIHRoYXQg dGhpcyByZWZlcmVudGlhbCBhY3Rpb24gb2NjdXIgZXhhY3RseSB3aGVuCisgKiB0aGUgdXBk YXRlIGlzIHBlcmZvcm1lZCwgcmF0aGVyIHRoYW4gYWZ0ZXIuICBUaGlzIGFwcGVhcnMgdG8g YmUKKyAqIHRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiAiTk8gQUNUSU9OIiBhbmQgIlJF U1RSSUNUIi4gIEluIFBvc3RncmVzCisgKiB3ZSBzdGlsbCBpbXBsZW1lbnQgdGhpcyBhcyBh biBBRlRFUiB0cmlnZ2VyLCBidXQgaXQncyBub24tZGVmZXJyYWJsZS4KICAqLwogRGF0dW0K IFJJX0ZLZXlfcmVzdHJpY3RfdXBkKFBHX0ZVTkNUSU9OX0FSR1MpCiB7Ci0JLyoKLQkgKiBD aGVjayB0aGF0IHRoaXMgaXMgYSB2YWxpZCB0cmlnZ2VyIGNhbGwgb24gdGhlIHJpZ2h0IHRp bWUgYW5kIGV2ZW50LgotCSAqLworCS8qIENoZWNrIHRoYXQgdGhpcyBpcyBhIHZhbGlkIHRy aWdnZXIgY2FsbCBvbiB0aGUgcmlnaHQgdGltZSBhbmQgZXZlbnQuICovCiAJcmlfQ2hlY2tU cmlnZ2VyKGZjaW5mbywgIlJJX0ZLZXlfcmVzdHJpY3RfdXBkIiwgUklfVFJJR1RZUEVfVVBE QVRFKTsKIAotCS8qCi0JICogU2hhcmUgY29kZSB3aXRoIE5PIEFDVElPTi9ERUxFVEUgY2Fz ZXMuCi0JICovCisJLyogU2hhcmUgY29kZSB3aXRoIE5PIEFDVElPTi9ERUxFVEUgY2FzZXMu ICovCiAJcmV0dXJuIHJpX3Jlc3RyaWN0KChUcmlnZ2VyRGF0YSAqKSBmY2luZm8tPmNvbnRl eHQsIGZhbHNlKTsKIH0KIAotLyogLS0tLS0tLS0tLQorLyoKICAqIHJpX3Jlc3RyaWN0IC0K ICAqCi0gKglDb21tb24gY29kZSBmb3IgT04gREVMRVRFIFJFU1RSSUNULCBPTiBERUxFVEUg Tk8gQUNUSU9OLAotICoJT04gVVBEQVRFIFJFU1RSSUNULCBhbmQgT04gVVBEQVRFIE5PIEFD VElPTi4KLSAqIC0tLS0tLS0tLS0KKyAqIENvbW1vbiBjb2RlIGZvciBPTiBERUxFVEUgUkVT VFJJQ1QsIE9OIERFTEVURSBOTyBBQ1RJT04sCisgKiBPTiBVUERBVEUgUkVTVFJJQ1QsIGFu ZCBPTiBVUERBVEUgTk8gQUNUSU9OLgogICovCiBzdGF0aWMgRGF0dW0KIHJpX3Jlc3RyaWN0 KFRyaWdnZXJEYXRhICp0cmlnZGF0YSwgYm9vbCBpc19ub19hY3Rpb24pCkBAIC02NzUsOSAr NjI2LDYgQEAgcmlfcmVzdHJpY3QoVHJpZ2dlckRhdGEgKnRyaWdkYXRhLCBib29sIGlzX25v X2FjdGlvbikKIAlSSV9RdWVyeUtleSBxa2V5OwogCVNQSVBsYW5QdHIJcXBsYW47CiAKLQkv KgotCSAqIEdldCBhcmd1bWVudHMuCi0JICovCiAJcmlpbmZvID0gcmlfRmV0Y2hDb25zdHJh aW50SW5mbyh0cmlnZGF0YS0+dGdfdHJpZ2dlciwKIAkJCQkJCQkJCXRyaWdkYXRhLT50Z19y ZWxhdGlvbiwgdHJ1ZSk7CiAKQEAgLTc3OSwxMSArNzI3LDEwIEBAIHJpX3Jlc3RyaWN0KFRy aWdnZXJEYXRhICp0cmlnZGF0YSwgYm9vbCBpc19ub19hY3Rpb24pCiB9CiAKIAotLyogLS0t LS0tLS0tLQorLyoKICAqIFJJX0ZLZXlfY2FzY2FkZV9kZWwgLQogICoKLSAqCUNhc2NhZGVk IGRlbGV0ZSBmb3JlaWduIGtleSByZWZlcmVuY2VzIGF0IGRlbGV0ZSBldmVudCBvbiBQSyB0 YWJsZS4KLSAqIC0tLS0tLS0tLS0KKyAqIENhc2NhZGVkIGRlbGV0ZSBmb3JlaWduIGtleSBy ZWZlcmVuY2VzIGF0IGRlbGV0ZSBldmVudCBvbiBQSyB0YWJsZS4KICAqLwogRGF0dW0KIFJJ X0ZLZXlfY2FzY2FkZV9kZWwoUEdfRlVOQ1RJT05fQVJHUykKQEAgLTc5NywxNCArNzQ0LDkg QEAgUklfRktleV9jYXNjYWRlX2RlbChQR19GVU5DVElPTl9BUkdTKQogCVNQSVBsYW5QdHIJ cXBsYW47CiAJaW50CQkJaTsKIAotCS8qCi0JICogQ2hlY2sgdGhhdCB0aGlzIGlzIGEgdmFs aWQgdHJpZ2dlciBjYWxsIG9uIHRoZSByaWdodCB0aW1lIGFuZCBldmVudC4KLQkgKi8KKwkv KiBDaGVjayB0aGF0IHRoaXMgaXMgYSB2YWxpZCB0cmlnZ2VyIGNhbGwgb24gdGhlIHJpZ2h0 IHRpbWUgYW5kIGV2ZW50LiAqLwogCXJpX0NoZWNrVHJpZ2dlcihmY2luZm8sICJSSV9GS2V5 X2Nhc2NhZGVfZGVsIiwgUklfVFJJR1RZUEVfREVMRVRFKTsKIAotCS8qCi0JICogR2V0IGFy Z3VtZW50cy4KLQkgKi8KIAlyaWluZm8gPSByaV9GZXRjaENvbnN0cmFpbnRJbmZvKHRyaWdk YXRhLT50Z190cmlnZ2VyLAogCQkJCQkJCQkJdHJpZ2RhdGEtPnRnX3JlbGF0aW9uLCB0cnVl KTsKIApAQCAtODIxLDkgKzc2Myw3IEBAIFJJX0ZLZXlfY2FzY2FkZV9kZWwoUEdfRlVOQ1RJ T05fQVJHUykKIAlpZiAoU1BJX2Nvbm5lY3QoKSAhPSBTUElfT0tfQ09OTkVDVCkKIAkJZWxv ZyhFUlJPUiwgIlNQSV9jb25uZWN0IGZhaWxlZCIpOwogCi0JLyoKLQkgKiBGZXRjaCBvciBw cmVwYXJlIGEgc2F2ZWQgcGxhbiBmb3IgdGhlIGNhc2NhZGVkIGRlbGV0ZQotCSAqLworCS8q IEZldGNoIG9yIHByZXBhcmUgYSBzYXZlZCBwbGFuIGZvciB0aGUgY2FzY2FkZWQgZGVsZXRl ICovCiAJcmlfQnVpbGRRdWVyeUtleSgmcWtleSwgcmlpbmZvLCBSSV9QTEFOX0NBU0NBREVf REVMX0RPREVMRVRFKTsKIAogCWlmICgocXBsYW4gPSByaV9GZXRjaFByZXBhcmVkUGxhbigm cWtleSkpID09IE5VTEwpCkBAIC04OTAsMTEgKzgzMCwxMCBAQCBSSV9GS2V5X2Nhc2NhZGVf ZGVsKFBHX0ZVTkNUSU9OX0FSR1MpCiB9CiAKIAotLyogLS0tLS0tLS0tLQorLyoKICAqIFJJ X0ZLZXlfY2FzY2FkZV91cGQgLQogICoKLSAqCUNhc2NhZGVkIHVwZGF0ZSBmb3JlaWduIGtl eSByZWZlcmVuY2VzIGF0IHVwZGF0ZSBldmVudCBvbiBQSyB0YWJsZS4KLSAqIC0tLS0tLS0t LS0KKyAqIENhc2NhZGVkIHVwZGF0ZSBmb3JlaWduIGtleSByZWZlcmVuY2VzIGF0IHVwZGF0 ZSBldmVudCBvbiBQSyB0YWJsZS4KICAqLwogRGF0dW0KIFJJX0ZLZXlfY2FzY2FkZV91cGQo UEdfRlVOQ1RJT05fQVJHUykKQEAgLTkxMCwxNCArODQ5LDkgQEAgUklfRktleV9jYXNjYWRl X3VwZChQR19GVU5DVElPTl9BUkdTKQogCWludAkJCWk7CiAJaW50CQkJajsKIAotCS8qCi0J ICogQ2hlY2sgdGhhdCB0aGlzIGlzIGEgdmFsaWQgdHJpZ2dlciBjYWxsIG9uIHRoZSByaWdo dCB0aW1lIGFuZCBldmVudC4KLQkgKi8KKwkvKiBDaGVjayB0aGF0IHRoaXMgaXMgYSB2YWxp ZCB0cmlnZ2VyIGNhbGwgb24gdGhlIHJpZ2h0IHRpbWUgYW5kIGV2ZW50LiAqLwogCXJpX0No ZWNrVHJpZ2dlcihmY2luZm8sICJSSV9GS2V5X2Nhc2NhZGVfdXBkIiwgUklfVFJJR1RZUEVf VVBEQVRFKTsKIAotCS8qCi0JICogR2V0IGFyZ3VtZW50cy4KLQkgKi8KIAlyaWluZm8gPSBy aV9GZXRjaENvbnN0cmFpbnRJbmZvKHRyaWdkYXRhLT50Z190cmlnZ2VyLAogCQkJCQkJCQkJ dHJpZ2RhdGEtPnRnX3JlbGF0aW9uLCB0cnVlKTsKIApAQCAtOTM2LDkgKzg3MCw3IEBAIFJJ X0ZLZXlfY2FzY2FkZV91cGQoUEdfRlVOQ1RJT05fQVJHUykKIAlpZiAoU1BJX2Nvbm5lY3Qo KSAhPSBTUElfT0tfQ09OTkVDVCkKIAkJZWxvZyhFUlJPUiwgIlNQSV9jb25uZWN0IGZhaWxl ZCIpOwogCi0JLyoKLQkgKiBGZXRjaCBvciBwcmVwYXJlIGEgc2F2ZWQgcGxhbiBmb3IgdGhl IGNhc2NhZGVkIHVwZGF0ZQotCSAqLworCS8qIEZldGNoIG9yIHByZXBhcmUgYSBzYXZlZCBw bGFuIGZvciB0aGUgY2FzY2FkZWQgdXBkYXRlICovCiAJcmlfQnVpbGRRdWVyeUtleSgmcWtl eSwgcmlpbmZvLCBSSV9QTEFOX0NBU0NBREVfVVBEX0RPVVBEQVRFKTsKIAogCWlmICgocXBs YW4gPSByaV9GZXRjaFByZXBhcmVkUGxhbigmcWtleSkpID09IE5VTEwpCkBAIC0xMDE3LDUx ICs5NDksNDAgQEAgUklfRktleV9jYXNjYWRlX3VwZChQR19GVU5DVElPTl9BUkdTKQogfQog CiAKLS8qIC0tLS0tLS0tLS0KKy8qCiAgKiBSSV9GS2V5X3NldG51bGxfZGVsIC0KICAqCi0g KglTZXQgZm9yZWlnbiBrZXkgcmVmZXJlbmNlcyB0byBOVUxMIHZhbHVlcyBhdCBkZWxldGUg ZXZlbnQgb24gUEsgdGFibGUuCi0gKiAtLS0tLS0tLS0tCisgKiBTZXQgZm9yZWlnbiBrZXkg cmVmZXJlbmNlcyB0byBOVUxMIHZhbHVlcyBhdCBkZWxldGUgZXZlbnQgb24gUEsgdGFibGUu CiAgKi8KIERhdHVtCiBSSV9GS2V5X3NldG51bGxfZGVsKFBHX0ZVTkNUSU9OX0FSR1MpCiB7 Ci0JLyoKLQkgKiBDaGVjayB0aGF0IHRoaXMgaXMgYSB2YWxpZCB0cmlnZ2VyIGNhbGwgb24g dGhlIHJpZ2h0IHRpbWUgYW5kIGV2ZW50LgotCSAqLworCS8qIENoZWNrIHRoYXQgdGhpcyBp cyBhIHZhbGlkIHRyaWdnZXIgY2FsbCBvbiB0aGUgcmlnaHQgdGltZSBhbmQgZXZlbnQuICov CiAJcmlfQ2hlY2tUcmlnZ2VyKGZjaW5mbywgIlJJX0ZLZXlfc2V0bnVsbF9kZWwiLCBSSV9U UklHVFlQRV9ERUxFVEUpOwogCi0JLyoKLQkgKiBTaGFyZSBjb2RlIHdpdGggVVBEQVRFIGNh c2UKLQkgKi8KKwkvKiBTaGFyZSBjb2RlIHdpdGggVVBEQVRFIGNhc2UgKi8KIAlyZXR1cm4g cmlfc2V0bnVsbCgoVHJpZ2dlckRhdGEgKikgZmNpbmZvLT5jb250ZXh0KTsKIH0KIAotLyog LS0tLS0tLS0tLQorLyoKICAqIFJJX0ZLZXlfc2V0bnVsbF91cGQgLQogICoKLSAqCVNldCBm b3JlaWduIGtleSByZWZlcmVuY2VzIHRvIE5VTEwgYXQgdXBkYXRlIGV2ZW50IG9uIFBLIHRh YmxlLgotICogLS0tLS0tLS0tLQorICogU2V0IGZvcmVpZ24ga2V5IHJlZmVyZW5jZXMgdG8g TlVMTCBhdCB1cGRhdGUgZXZlbnQgb24gUEsgdGFibGUuCiAgKi8KIERhdHVtCiBSSV9GS2V5 X3NldG51bGxfdXBkKFBHX0ZVTkNUSU9OX0FSR1MpCiB7Ci0JLyoKLQkgKiBDaGVjayB0aGF0 IHRoaXMgaXMgYSB2YWxpZCB0cmlnZ2VyIGNhbGwgb24gdGhlIHJpZ2h0IHRpbWUgYW5kIGV2 ZW50LgotCSAqLworCS8qIENoZWNrIHRoYXQgdGhpcyBpcyBhIHZhbGlkIHRyaWdnZXIgY2Fs bCBvbiB0aGUgcmlnaHQgdGltZSBhbmQgZXZlbnQuICovCiAJcmlfQ2hlY2tUcmlnZ2VyKGZj aW5mbywgIlJJX0ZLZXlfc2V0bnVsbF91cGQiLCBSSV9UUklHVFlQRV9VUERBVEUpOwogCi0J LyoKLQkgKiBTaGFyZSBjb2RlIHdpdGggREVMRVRFIGNhc2UKLQkgKi8KKwkvKiBTaGFyZSBj b2RlIHdpdGggREVMRVRFIGNhc2UgKi8KIAlyZXR1cm4gcmlfc2V0bnVsbCgoVHJpZ2dlckRh dGEgKikgZmNpbmZvLT5jb250ZXh0KTsKIH0KIAotLyogLS0tLS0tLS0tLQorLyoKICAqIHJp X3NldG51bGwgLQogICoKLSAqCUNvbW1vbiBjb2RlIGZvciBPTiBERUxFVEUgU0VUIE5VTEwg YW5kIE9OIFVQREFURSBTRVQgTlVMTAotICogLS0tLS0tLS0tLQorICogQ29tbW9uIGNvZGUg Zm9yIE9OIERFTEVURSBTRVQgTlVMTCBhbmQgT04gVVBEQVRFIFNFVCBOVUxMCiAgKi8KIHN0 YXRpYyBEYXR1bQogcmlfc2V0bnVsbChUcmlnZ2VyRGF0YSAqdHJpZ2RhdGEpCkBAIC0xMDc0 LDkgKzk5NSw2IEBAIHJpX3NldG51bGwoVHJpZ2dlckRhdGEgKnRyaWdkYXRhKQogCVNQSVBs YW5QdHIJcXBsYW47CiAJaW50CQkJaTsKIAotCS8qCi0JICogR2V0IGFyZ3VtZW50cy4KLQkg Ki8KIAlyaWluZm8gPSByaV9GZXRjaENvbnN0cmFpbnRJbmZvKHRyaWdkYXRhLT50Z190cmln Z2VyLAogCQkJCQkJCQkJdHJpZ2RhdGEtPnRnX3JlbGF0aW9uLCB0cnVlKTsKIApAQCAtMTE3 Miw1MSArMTA5MCw0MCBAQCByaV9zZXRudWxsKFRyaWdnZXJEYXRhICp0cmlnZGF0YSkKIH0K IAogCi0vKiAtLS0tLS0tLS0tCisvKgogICogUklfRktleV9zZXRkZWZhdWx0X2RlbCAtCiAg KgotICoJU2V0IGZvcmVpZ24ga2V5IHJlZmVyZW5jZXMgdG8gZGVmYXVsdHMgYXQgZGVsZXRl IGV2ZW50IG9uIFBLIHRhYmxlLgotICogLS0tLS0tLS0tLQorICogU2V0IGZvcmVpZ24ga2V5 IHJlZmVyZW5jZXMgdG8gZGVmYXVsdHMgYXQgZGVsZXRlIGV2ZW50IG9uIFBLIHRhYmxlLgog ICovCiBEYXR1bQogUklfRktleV9zZXRkZWZhdWx0X2RlbChQR19GVU5DVElPTl9BUkdTKQog ewotCS8qCi0JICogQ2hlY2sgdGhhdCB0aGlzIGlzIGEgdmFsaWQgdHJpZ2dlciBjYWxsIG9u IHRoZSByaWdodCB0aW1lIGFuZCBldmVudC4KLQkgKi8KKwkvKiBDaGVjayB0aGF0IHRoaXMg aXMgYSB2YWxpZCB0cmlnZ2VyIGNhbGwgb24gdGhlIHJpZ2h0IHRpbWUgYW5kIGV2ZW50LiAq LwogCXJpX0NoZWNrVHJpZ2dlcihmY2luZm8sICJSSV9GS2V5X3NldGRlZmF1bHRfZGVsIiwg UklfVFJJR1RZUEVfREVMRVRFKTsKIAotCS8qCi0JICogU2hhcmUgY29kZSB3aXRoIFVQREFU RSBjYXNlCi0JICovCisJLyogU2hhcmUgY29kZSB3aXRoIFVQREFURSBjYXNlICovCiAJcmV0 dXJuIHJpX3NldGRlZmF1bHQoKFRyaWdnZXJEYXRhICopIGZjaW5mby0+Y29udGV4dCk7CiB9 CiAKLS8qIC0tLS0tLS0tLS0KKy8qCiAgKiBSSV9GS2V5X3NldGRlZmF1bHRfdXBkIC0KICAq Ci0gKglTZXQgZm9yZWlnbiBrZXkgcmVmZXJlbmNlcyB0byBkZWZhdWx0cyBhdCB1cGRhdGUg ZXZlbnQgb24gUEsgdGFibGUuCi0gKiAtLS0tLS0tLS0tCisgKiBTZXQgZm9yZWlnbiBrZXkg cmVmZXJlbmNlcyB0byBkZWZhdWx0cyBhdCB1cGRhdGUgZXZlbnQgb24gUEsgdGFibGUuCiAg Ki8KIERhdHVtCiBSSV9GS2V5X3NldGRlZmF1bHRfdXBkKFBHX0ZVTkNUSU9OX0FSR1MpCiB7 Ci0JLyoKLQkgKiBDaGVjayB0aGF0IHRoaXMgaXMgYSB2YWxpZCB0cmlnZ2VyIGNhbGwgb24g dGhlIHJpZ2h0IHRpbWUgYW5kIGV2ZW50LgotCSAqLworCS8qIENoZWNrIHRoYXQgdGhpcyBp cyBhIHZhbGlkIHRyaWdnZXIgY2FsbCBvbiB0aGUgcmlnaHQgdGltZSBhbmQgZXZlbnQuICov CiAJcmlfQ2hlY2tUcmlnZ2VyKGZjaW5mbywgIlJJX0ZLZXlfc2V0ZGVmYXVsdF91cGQiLCBS SV9UUklHVFlQRV9VUERBVEUpOwogCi0JLyoKLQkgKiBTaGFyZSBjb2RlIHdpdGggREVMRVRF IGNhc2UKLQkgKi8KKwkvKiBTaGFyZSBjb2RlIHdpdGggREVMRVRFIGNhc2UgKi8KIAlyZXR1 cm4gcmlfc2V0ZGVmYXVsdCgoVHJpZ2dlckRhdGEgKikgZmNpbmZvLT5jb250ZXh0KTsKIH0K IAotLyogLS0tLS0tLS0tLQorLyoKICAqIHJpX3NldGRlZmF1bHQgLQogICoKLSAqCUNvbW1v biBjb2RlIGZvciBPTiBERUxFVEUgU0VUIERFRkFVTFQgYW5kIE9OIFVQREFURSBTRVQgREVG QVVMVAotICogLS0tLS0tLS0tLQorICogQ29tbW9uIGNvZGUgZm9yIE9OIERFTEVURSBTRVQg REVGQVVMVCBhbmQgT04gVVBEQVRFIFNFVCBERUZBVUxUCiAgKi8KIHN0YXRpYyBEYXR1bQog cmlfc2V0ZGVmYXVsdChUcmlnZ2VyRGF0YSAqdHJpZ2RhdGEpCkBAIC0xMjI4LDkgKzExMzUs NiBAQCByaV9zZXRkZWZhdWx0KFRyaWdnZXJEYXRhICp0cmlnZGF0YSkKIAlSSV9RdWVyeUtl eSBxa2V5OwogCVNQSVBsYW5QdHIJcXBsYW47CiAKLQkvKgotCSAqIEdldCBhcmd1bWVudHMu Ci0JICovCiAJcmlpbmZvID0gcmlfRmV0Y2hDb25zdHJhaW50SW5mbyh0cmlnZGF0YS0+dGdf dHJpZ2dlciwKIAkJCQkJCQkJCXRyaWdkYXRhLT50Z19yZWxhdGlvbiwgdHJ1ZSk7CiAKQEAg LTEzNDEsMTcgKzEyNDUsMTYgQEAgcmlfc2V0ZGVmYXVsdChUcmlnZ2VyRGF0YSAqdHJpZ2Rh dGEpCiB9CiAKIAotLyogLS0tLS0tLS0tLQorLyoKICAqIFJJX0ZLZXlfcGtfdXBkX2NoZWNr X3JlcXVpcmVkIC0KICAqCi0gKglDaGVjayBpZiB3ZSByZWFsbHkgbmVlZCB0byBmaXJlIHRo ZSBSSSB0cmlnZ2VyIGZvciBhbiB1cGRhdGUgb3IgZGVsZXRlIHRvIGEgUEsKLSAqCXJlbGF0 aW9uLiAgVGhpcyBpcyBjYWxsZWQgYnkgdGhlIEFGVEVSIHRyaWdnZXIgcXVldWUgbWFuYWdl ciB0byBzZWUgaWYKLSAqCWl0IGNhbiBza2lwIHF1ZXVpbmcgYW4gaW5zdGFuY2Ugb2YgYW4g UkkgdHJpZ2dlci4gIFJldHVybnMgdHJ1ZSBpZiB0aGUKLSAqCXRyaWdnZXIgbXVzdCBiZSBm aXJlZCwgZmFsc2UgaWYgd2UgY2FuIHByb3ZlIHRoZSBjb25zdHJhaW50IHdpbGwgc3RpbGwK LSAqCWJlIHNhdGlzZmllZC4KKyAqIENoZWNrIGlmIHdlIHJlYWxseSBuZWVkIHRvIGZpcmUg dGhlIFJJIHRyaWdnZXIgZm9yIGFuIHVwZGF0ZSBvciBkZWxldGUgdG8gYSBQSworICogcmVs YXRpb24uICBUaGlzIGlzIGNhbGxlZCBieSB0aGUgQUZURVIgdHJpZ2dlciBxdWV1ZSBtYW5h Z2VyIHRvIHNlZSBpZgorICogaXQgY2FuIHNraXAgcXVldWluZyBhbiBpbnN0YW5jZSBvZiBh biBSSSB0cmlnZ2VyLiAgUmV0dXJucyB0cnVlIGlmIHRoZQorICogdHJpZ2dlciBtdXN0IGJl IGZpcmVkLCBmYWxzZSBpZiB3ZSBjYW4gcHJvdmUgdGhlIGNvbnN0cmFpbnQgd2lsbCBzdGls bAorICogYmUgc2F0aXNmaWVkLgogICoKLSAqCW5ld19yb3cgd2lsbCBiZSBOVUxMIGlmIHRo aXMgaXMgY2FsbGVkIGZvciBhIGRlbGV0ZS4KLSAqIC0tLS0tLS0tLS0KKyAqIG5ld19yb3cg d2lsbCBiZSBOVUxMIGlmIHRoaXMgaXMgY2FsbGVkIGZvciBhIGRlbGV0ZS4KICAqLwogYm9v bAogUklfRktleV9wa191cGRfY2hlY2tfcmVxdWlyZWQoVHJpZ2dlciAqdHJpZ2dlciwgUmVs YXRpb24gcGtfcmVsLApAQCAtMTM1OSw5ICsxMjYyLDYgQEAgUklfRktleV9wa191cGRfY2hl Y2tfcmVxdWlyZWQoVHJpZ2dlciAqdHJpZ2dlciwgUmVsYXRpb24gcGtfcmVsLAogewogCWNv bnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm87CiAKLQkvKgotCSAqIEdldCBhcmd1bWVu dHMuCi0JICovCiAJcmlpbmZvID0gcmlfRmV0Y2hDb25zdHJhaW50SW5mbyh0cmlnZ2VyLCBw a19yZWwsIHRydWUpOwogCiAJLyoKQEAgLTEzNzksMTUgKzEyNzksMTQgQEAgUklfRktleV9w a191cGRfY2hlY2tfcmVxdWlyZWQoVHJpZ2dlciAqdHJpZ2dlciwgUmVsYXRpb24gcGtfcmVs LAogCXJldHVybiB0cnVlOwogfQogCi0vKiAtLS0tLS0tLS0tCisvKgogICogUklfRktleV9m a191cGRfY2hlY2tfcmVxdWlyZWQgLQogICoKLSAqCUNoZWNrIGlmIHdlIHJlYWxseSBuZWVk IHRvIGZpcmUgdGhlIFJJIHRyaWdnZXIgZm9yIGFuIHVwZGF0ZSB0byBhbiBGSwotICoJcmVs YXRpb24uICBUaGlzIGlzIGNhbGxlZCBieSB0aGUgQUZURVIgdHJpZ2dlciBxdWV1ZSBtYW5h Z2VyIHRvIHNlZSBpZgotICoJaXQgY2FuIHNraXAgcXVldWluZyBhbiBpbnN0YW5jZSBvZiBh biBSSSB0cmlnZ2VyLiAgUmV0dXJucyB0cnVlIGlmIHRoZQotICoJdHJpZ2dlciBtdXN0IGJl IGZpcmVkLCBmYWxzZSBpZiB3ZSBjYW4gcHJvdmUgdGhlIGNvbnN0cmFpbnQgd2lsbCBzdGls bAotICoJYmUgc2F0aXNmaWVkLgotICogLS0tLS0tLS0tLQorICogQ2hlY2sgaWYgd2UgcmVh bGx5IG5lZWQgdG8gZmlyZSB0aGUgUkkgdHJpZ2dlciBmb3IgYW4gdXBkYXRlIHRvIGFuIEZL CisgKiByZWxhdGlvbi4gIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBBRlRFUiB0cmlnZ2VyIHF1 ZXVlIG1hbmFnZXIgdG8gc2VlIGlmCisgKiBpdCBjYW4gc2tpcCBxdWV1aW5nIGFuIGluc3Rh bmNlIG9mIGFuIFJJIHRyaWdnZXIuICBSZXR1cm5zIHRydWUgaWYgdGhlCisgKiB0cmlnZ2Vy IG11c3QgYmUgZmlyZWQsIGZhbHNlIGlmIHdlIGNhbiBwcm92ZSB0aGUgY29uc3RyYWludCB3 aWxsIHN0aWxsCisgKiBiZSBzYXRpc2ZpZWQuCiAgKi8KIGJvb2wKIFJJX0ZLZXlfZmtfdXBk X2NoZWNrX3JlcXVpcmVkKFRyaWdnZXIgKnRyaWdnZXIsIFJlbGF0aW9uIGZrX3JlbCwKQEAg LTEzOTYsOSArMTI5NSw2IEBAIFJJX0ZLZXlfZmtfdXBkX2NoZWNrX3JlcXVpcmVkKFRyaWdn ZXIgKnRyaWdnZXIsIFJlbGF0aW9uIGZrX3JlbCwKIAljb25zdCBSSV9Db25zdHJhaW50SW5m byAqcmlpbmZvOwogCWludAkJCXJpX251bGxjaGVjazsKIAotCS8qCi0JICogR2V0IGFyZ3Vt ZW50cy4KLQkgKi8KIAlyaWluZm8gPSByaV9GZXRjaENvbnN0cmFpbnRJbmZvKHRyaWdnZXIs IGZrX3JlbCwgZmFsc2UpOwogCiAJcmlfbnVsbGNoZWNrID0gcmlfTnVsbENoZWNrKFJlbGF0 aW9uR2V0RGVzY3IoZmtfcmVsKSwgbmV3X3JvdywgcmlpbmZvLCBmYWxzZSk7CkBAIC0xNDY1 LDIzICsxMzYxLDIyIEBAIFJJX0ZLZXlfZmtfdXBkX2NoZWNrX3JlcXVpcmVkKFRyaWdnZXIg KnRyaWdnZXIsIFJlbGF0aW9uIGZrX3JlbCwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyogLS0t LS0tLS0tLQorLyoKICAqIFJJX0luaXRpYWxfQ2hlY2sgLQogICoKLSAqCUNoZWNrIGFuIGVu dGlyZSB0YWJsZSBmb3Igbm9uLW1hdGNoaW5nIHZhbHVlcyB1c2luZyBhIHNpbmdsZSBxdWVy eS4KLSAqCVRoaXMgaXMgbm90IGEgdHJpZ2dlciBwcm9jZWR1cmUsIGJ1dCBpcyBjYWxsZWQg ZHVyaW5nIEFMVEVSIFRBQkxFCi0gKglBREQgRk9SRUlHTiBLRVkgdG8gdmFsaWRhdGUgdGhl IGluaXRpYWwgdGFibGUgY29udGVudHMuCisgKiBDaGVjayBhbiBlbnRpcmUgdGFibGUgZm9y IG5vbi1tYXRjaGluZyB2YWx1ZXMgdXNpbmcgYSBzaW5nbGUgcXVlcnkuCisgKiBUaGlzIGlz IG5vdCBhIHRyaWdnZXIgcHJvY2VkdXJlLCBidXQgaXMgY2FsbGVkIGR1cmluZyBBTFRFUiBU QUJMRQorICogQUREIEZPUkVJR04gS0VZIHRvIHZhbGlkYXRlIHRoZSBpbml0aWFsIHRhYmxl IGNvbnRlbnRzLgogICoKLSAqCVdlIGV4cGVjdCB0aGF0IHRoZSBjYWxsZXIgaGFzIG1hZGUg cHJvdmlzaW9uIHRvIHByZXZlbnQgYW55IHByb2JsZW1zCi0gKgljYXVzZWQgYnkgY29uY3Vy cmVudCBhY3Rpb25zLiBUaGlzIGNvdWxkIGJlIGVpdGhlciBieSBsb2NraW5nIHJlbCBhbmQK LSAqCXBrcmVsIGF0IFNoYXJlUm93RXhjbHVzaXZlTG9jayBvciBoaWdoZXIsIG9yIGJ5IG90 aGVyd2lzZSBlbnN1cmluZwotICoJdGhhdCB0cmlnZ2VycyBpbXBsZW1lbnRpbmcgdGhlIGNo ZWNrcyBhcmUgYWxyZWFkeSBhY3RpdmUuCi0gKglIZW5jZSwgd2UgZG8gbm90IG5lZWQgdG8g bG9jayBpbmRpdmlkdWFsIHJvd3MgZm9yIHRoZSBjaGVjay4KKyAqIFdlIGV4cGVjdCB0aGF0 IHRoZSBjYWxsZXIgaGFzIG1hZGUgcHJvdmlzaW9uIHRvIHByZXZlbnQgYW55IHByb2JsZW1z CisgKiBjYXVzZWQgYnkgY29uY3VycmVudCBhY3Rpb25zLiBUaGlzIGNvdWxkIGJlIGVpdGhl ciBieSBsb2NraW5nIHJlbCBhbmQKKyAqIHBrcmVsIGF0IFNoYXJlUm93RXhjbHVzaXZlTG9j ayBvciBoaWdoZXIsIG9yIGJ5IG90aGVyd2lzZSBlbnN1cmluZworICogdGhhdCB0cmlnZ2Vy cyBpbXBsZW1lbnRpbmcgdGhlIGNoZWNrcyBhcmUgYWxyZWFkeSBhY3RpdmUuCisgKiBIZW5j ZSwgd2UgZG8gbm90IG5lZWQgdG8gbG9jayBpbmRpdmlkdWFsIHJvd3MgZm9yIHRoZSBjaGVj ay4KICAqCi0gKglJZiB0aGUgY2hlY2sgZmFpbHMgYmVjYXVzZSB0aGUgY3VycmVudCB1c2Vy IGRvZXNuJ3QgaGF2ZSBwZXJtaXNzaW9ucwotICoJdG8gcmVhZCBib3RoIHRhYmxlcywgcmV0 dXJuIGZhbHNlIHRvIGxldCBvdXIgY2FsbGVyIGtub3cgdGhhdCB0aGV5IHdpbGwKLSAqCW5l ZWQgdG8gZG8gc29tZXRoaW5nIGVsc2UgdG8gY2hlY2sgdGhlIGNvbnN0cmFpbnQuCi0gKiAt LS0tLS0tLS0tCisgKiBJZiB0aGUgY2hlY2sgZmFpbHMgYmVjYXVzZSB0aGUgY3VycmVudCB1 c2VyIGRvZXNuJ3QgaGF2ZSBwZXJtaXNzaW9ucworICogdG8gcmVhZCBib3RoIHRhYmxlcywg cmV0dXJuIGZhbHNlIHRvIGxldCBvdXIgY2FsbGVyIGtub3cgdGhhdCB0aGV5IHdpbGwKKyAq IG5lZWQgdG8gZG8gc29tZXRoaW5nIGVsc2UgdG8gY2hlY2sgdGhlIGNvbnN0cmFpbnQuCiAg Ki8KIGJvb2wKIFJJX0luaXRpYWxfQ2hlY2soVHJpZ2dlciAqdHJpZ2dlciwgUmVsYXRpb24g ZmtfcmVsLCBSZWxhdGlvbiBwa19yZWwpCkBAIC0xNTAyLDcgKzEzOTcsNiBAQCBSSV9Jbml0 aWFsX0NoZWNrKFRyaWdnZXIgKnRyaWdnZXIsIFJlbGF0aW9uIGZrX3JlbCwgUmVsYXRpb24g cGtfcmVsKQogCWludAkJCXNwaV9yZXN1bHQ7CiAJU1BJUGxhblB0cglxcGxhbjsKIAotCS8q IEZldGNoIGNvbnN0cmFpbnQgaW5mby4gKi8KIAlyaWluZm8gPSByaV9GZXRjaENvbnN0cmFp bnRJbmZvKHRyaWdnZXIsIGZrX3JlbCwgZmFsc2UpOwogCiAJLyoKQEAgLTI0MzMsMTMgKzIz MjcsMTIgQEAgcmlfUmVwb3J0VmlvbGF0aW9uKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpy aWluZm8sCiB9CiAKIAotLyogLS0tLS0tLS0tLQorLyoKICAqIHJpX051bGxDaGVjayAtCiAg KgotICoJRGV0ZXJtaW5lIHRoZSBOVUxMIHN0YXRlIG9mIGFsbCBrZXkgdmFsdWVzIGluIGEg dHVwbGUKKyAqIERldGVybWluZSB0aGUgTlVMTCBzdGF0ZSBvZiBhbGwga2V5IHZhbHVlcyBp biBhIHR1cGxlCiAgKgotICoJUmV0dXJucyBvbmUgb2YgUklfS0VZU19BTExfTlVMTCwgUklf S0VZU19OT05FX05VTEwgb3IgUklfS0VZU19TT01FX05VTEwuCi0gKiAtLS0tLS0tLS0tCisg KiBSZXR1cm5zIG9uZSBvZiBSSV9LRVlTX0FMTF9OVUxMLCBSSV9LRVlTX05PTkVfTlVMTCBv ciBSSV9LRVlTX1NPTUVfTlVMTC4KICAqLwogc3RhdGljIGludAogcmlfTnVsbENoZWNrKFR1 cGxlRGVzYyB0dXBEZXNjLApAQCAtMjQ3NCwxMSArMjM2NywxMCBAQCByaV9OdWxsQ2hlY2so VHVwbGVEZXNjIHR1cERlc2MsCiB9CiAKIAotLyogLS0tLS0tLS0tLQorLyoKICAqIHJpX0lu aXRIYXNoVGFibGVzIC0KICAqCi0gKglJbml0aWFsaXplIG91ciBpbnRlcm5hbCBoYXNoIHRh Ymxlcy4KLSAqIC0tLS0tLS0tLS0KKyAqIEluaXRpYWxpemUgb3VyIGludGVybmFsIGhhc2gg dGFibGVzLgogICovCiBzdGF0aWMgdm9pZAogcmlfSW5pdEhhc2hUYWJsZXModm9pZCkKQEAg LTI1MTMsMTIgKzI0MDUsMTEgQEAgcmlfSW5pdEhhc2hUYWJsZXModm9pZCkKIH0KIAogCi0v KiAtLS0tLS0tLS0tCisvKgogICogcmlfRmV0Y2hQcmVwYXJlZFBsYW4gLQogICoKLSAqCUxv b2t1cCBmb3IgYSBxdWVyeSBrZXkgaW4gb3VyIHByaXZhdGUgaGFzaCB0YWJsZSBvZiBwcmVw YXJlZAotICoJYW5kIHNhdmVkIFNQSSBleGVjdXRpb24gcGxhbnMuIFJldHVybiB0aGUgcGxh biBpZiBmb3VuZCBvciBOVUxMLgotICogLS0tLS0tLS0tLQorICogTG9va3VwIGZvciBhIHF1 ZXJ5IGtleSBpbiBvdXIgcHJpdmF0ZSBoYXNoIHRhYmxlIG9mIHByZXBhcmVkCisgKiBhbmQg c2F2ZWQgU1BJIGV4ZWN1dGlvbiBwbGFucy4gUmV0dXJuIHRoZSBwbGFuIGlmIGZvdW5kIG9y IE5VTEwuCiAgKi8KIHN0YXRpYyBTUElQbGFuUHRyCiByaV9GZXRjaFByZXBhcmVkUGxhbihS SV9RdWVyeUtleSAqa2V5KQpAQCAtMjU2NywxMSArMjQ1OCwxMCBAQCByaV9GZXRjaFByZXBh cmVkUGxhbihSSV9RdWVyeUtleSAqa2V5KQogfQogCiAKLS8qIC0tLS0tLS0tLS0KKy8qCiAg KiByaV9IYXNoUHJlcGFyZWRQbGFuIC0KICAqCi0gKglBZGQgYW5vdGhlciBwbGFuIHRvIG91 ciBwcml2YXRlIFNQSSBxdWVyeSBwbGFuIGhhc2h0YWJsZS4KLSAqIC0tLS0tLS0tLS0KKyAq IEFkZCBhbm90aGVyIHBsYW4gdG8gb3VyIHByaXZhdGUgU1BJIHF1ZXJ5IHBsYW4gaGFzaHRh YmxlLgogICovCiBzdGF0aWMgdm9pZAogcmlfSGFzaFByZXBhcmVkUGxhbihSSV9RdWVyeUtl eSAqa2V5LCBTUElQbGFuUHRyIHBsYW4pCkBAIC0yNTk3LDE2ICsyNDg3LDE1IEBAIHJpX0hh c2hQcmVwYXJlZFBsYW4oUklfUXVlcnlLZXkgKmtleSwgU1BJUGxhblB0ciBwbGFuKQogfQog CiAKLS8qIC0tLS0tLS0tLS0KKy8qCiAgKiByaV9LZXlzRXF1YWwgLQogICoKLSAqCUNoZWNr IGlmIGFsbCBrZXkgdmFsdWVzIGluIE9MRCBhbmQgTkVXIGFyZSBlcXVhbC4KKyAqIENoZWNr IGlmIGFsbCBrZXkgdmFsdWVzIGluIE9MRCBhbmQgTkVXIGFyZSBlcXVhbC4KICAqCi0gKglO b3RlOiBhdCBzb21lIHBvaW50IHdlIG1pZ2h0IHdpc2ggdG8gcmVkZWZpbmUgdGhpcyBhcyBj aGVja2luZyBmb3IKLSAqCSJJUyBOT1QgRElTVElOQ1QiIHJhdGhlciB0aGFuICI9IiwgdGhh dCBpcywgYWxsb3cgdHdvIG51bGxzIHRvIGJlCi0gKgljb25zaWRlcmVkIGVxdWFsLiAgQ3Vy cmVudGx5IHRoZXJlIGlzIG5vIG5lZWQgc2luY2UgYWxsIGNhbGxlcnMgaGF2ZQotICoJcHJl dmlvdXNseSBmb3VuZCBhdCBsZWFzdCBvbmUgb2YgdGhlIHJvd3MgdG8gY29udGFpbiBubyBu dWxscy4KLSAqIC0tLS0tLS0tLS0KKyAqIE5vdGU6IGF0IHNvbWUgcG9pbnQgd2UgbWlnaHQg d2lzaCB0byByZWRlZmluZSB0aGlzIGFzIGNoZWNraW5nIGZvcgorICogIklTIE5PVCBESVNU SU5DVCIgcmF0aGVyIHRoYW4gIj0iLCB0aGF0IGlzLCBhbGxvdyB0d28gbnVsbHMgdG8gYmUK KyAqIGNvbnNpZGVyZWQgZXF1YWwuICBDdXJyZW50bHkgdGhlcmUgaXMgbm8gbmVlZCBzaW5j ZSBhbGwgY2FsbGVycyBoYXZlCisgKiBwcmV2aW91c2x5IGZvdW5kIGF0IGxlYXN0IG9uZSBv ZiB0aGUgcm93cyB0byBjb250YWluIG5vIG51bGxzLgogICovCiBzdGF0aWMgYm9vbAogcmlf S2V5c0VxdWFsKFJlbGF0aW9uIHJlbCwgSGVhcFR1cGxlIG9sZHR1cCwgSGVhcFR1cGxlIG5l d3R1cCwKQEAgLTI2NjAsMTMgKzI1NDksMTIgQEAgcmlfS2V5c0VxdWFsKFJlbGF0aW9uIHJl bCwgSGVhcFR1cGxlIG9sZHR1cCwgSGVhcFR1cGxlIG5ld3R1cCwKIH0KIAogCi0vKiAtLS0t LS0tLS0tCisvKgogICogcmlfQXR0cmlidXRlc0VxdWFsIC0KICAqCi0gKglDYWxsIHRoZSBh cHByb3ByaWF0ZSBlcXVhbGl0eSBjb21wYXJpc29uIG9wZXJhdG9yIGZvciB0d28gdmFsdWVz LgorICogQ2FsbCB0aGUgYXBwcm9wcmlhdGUgZXF1YWxpdHkgY29tcGFyaXNvbiBvcGVyYXRv ciBmb3IgdHdvIHZhbHVlcy4KICAqCi0gKglOQjogd2UgaGF2ZSBhbHJlYWR5IGNoZWNrZWQg dGhhdCBuZWl0aGVyIHZhbHVlIGlzIG51bGwuCi0gKiAtLS0tLS0tLS0tCisgKiBOQjogd2Ug aGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCBuZWl0aGVyIHZhbHVlIGlzIG51bGwuCiAgKi8K IHN0YXRpYyBib29sCiByaV9BdHRyaWJ1dGVzRXF1YWwoT2lkIGVxX29wciwgT2lkIHR5cGVp ZCwKQEAgLTI2OTUsMTIgKzI1ODMsMTEgQEAgcmlfQXR0cmlidXRlc0VxdWFsKE9pZCBlcV9v cHIsIE9pZCB0eXBlaWQsCiAJCQkJCQkJCQkgIG9sZHZhbHVlLCBuZXd2YWx1ZSkpOwogfQog Ci0vKiAtLS0tLS0tLS0tCisvKgogICogcmlfSGFzaENvbXBhcmVPcCAtCiAgKgotICoJU2Vl IGlmIHdlIGtub3cgaG93IHRvIGNvbXBhcmUgdHdvIHZhbHVlcywgYW5kIGNyZWF0ZSBhIG5l dyBoYXNoIGVudHJ5Ci0gKglpZiBub3QuCi0gKiAtLS0tLS0tLS0tCisgKiBTZWUgaWYgd2Ug a25vdyBob3cgdG8gY29tcGFyZSB0d28gdmFsdWVzLCBhbmQgY3JlYXRlIGEgbmV3IGhhc2gg ZW50cnkKKyAqIGlmIG5vdC4KICAqLwogc3RhdGljIFJJX0NvbXBhcmVIYXNoRW50cnkgKgog cmlfSGFzaENvbXBhcmVPcChPaWQgZXFfb3ByLCBPaWQgdHlwZWlkKQotLSAKMi4yMC4xCgo= --------------4573FA42DDAF0E00FE827686 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="0003-Compact-for-loops.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0003-Compact-for-loops.patch" RnJvbSBhNGE4MTU3ZGJmMjI3ODc4YjgwZWRiY2FjNzBmNDYyN2RlYWIzZGNlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogRnJpLCAyMiBGZWIgMjAxOSAxMjo0NToxMSArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggMy8zXSBDb21wYWN0IGZvciBsb29wcwoKRGVjbGFyZSBsb29wIHZhcmlhYmxl IGluIGZvciBsb29wLCBmb3IgcmVhZGFiaWxpdHkgYW5kIHRvIHNhdmUgc3BhY2UuCi0tLQog c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMgfCA0NyArKysrKysrKysrKy0t LS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE3IGluc2VydGlvbnMoKyksIDMw IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90 cmlnZ2Vycy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKaW5kZXgg YWE3M2YzMTE0Ni4uYmJlYTJlNDU4ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3JpX3RyaWdnZXJzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdn ZXJzLmMKQEAgLTIzOSw3ICsyMzksNiBAQCBSSV9GS2V5X2NoZWNrKFRyaWdnZXJEYXRhICp0 cmlnZGF0YSkKIAlCdWZmZXIJCW5ld19yb3dfYnVmOwogCVJJX1F1ZXJ5S2V5IHFrZXk7CiAJ U1BJUGxhblB0cglxcGxhbjsKLQlpbnQJCQlpOwogCiAJcmlpbmZvID0gcmlfRmV0Y2hDb25z dHJhaW50SW5mbyh0cmlnZGF0YS0+dGdfdHJpZ2dlciwKIAkJCQkJCQkJCXRyaWdkYXRhLT50 Z19yZWxhdGlvbiwgZmFsc2UpOwpAQCAtMzc0LDcgKzM3Myw3IEBAIFJJX0ZLZXlfY2hlY2so VHJpZ2dlckRhdGEgKnRyaWdkYXRhKQogCQlxdW90ZVJlbGF0aW9uTmFtZShwa3JlbG5hbWUs IHBrX3JlbCk7CiAJCWFwcGVuZFN0cmluZ0luZm8oJnF1ZXJ5YnVmLCAiU0VMRUNUIDEgRlJP TSBPTkxZICVzIHgiLCBwa3JlbG5hbWUpOwogCQlxdWVyeXNlcCA9ICJXSEVSRSI7Ci0JCWZv ciAoaSA9IDA7IGkgPCByaWluZm8tPm5rZXlzOyBpKyspCisJCWZvciAoaW50IGkgPSAwOyBp IDwgcmlpbmZvLT5ua2V5czsgaSsrKQogCQl7CiAJCQlPaWQJCQlwa190eXBlID0gUklBdHRU eXBlKHBrX3JlbCwgcmlpbmZvLT5wa19hdHRudW1zW2ldKTsKIAkJCU9pZAkJCWZrX3R5cGUg PSBSSUF0dFR5cGUoZmtfcmVsLCByaWluZm8tPmZrX2F0dG51bXNbaV0pOwpAQCAtNDYzLDcg KzQ2Miw2IEBAIHJpX0NoZWNrX1BrX01hdGNoKFJlbGF0aW9uIHBrX3JlbCwgUmVsYXRpb24g ZmtfcmVsLAogewogCVNQSVBsYW5QdHIJcXBsYW47CiAJUklfUXVlcnlLZXkgcWtleTsKLQlp bnQJCQlpOwogCWJvb2wJCXJlc3VsdDsKIAogCS8qIE9ubHkgY2FsbGVkIGZvciBub24tbnVs bCByb3dzICovCkBAIC00OTksNyArNDk3LDcgQEAgcmlfQ2hlY2tfUGtfTWF0Y2goUmVsYXRp b24gcGtfcmVsLCBSZWxhdGlvbiBma19yZWwsCiAJCXF1b3RlUmVsYXRpb25OYW1lKHBrcmVs bmFtZSwgcGtfcmVsKTsKIAkJYXBwZW5kU3RyaW5nSW5mbygmcXVlcnlidWYsICJTRUxFQ1Qg MSBGUk9NIE9OTFkgJXMgeCIsIHBrcmVsbmFtZSk7CiAJCXF1ZXJ5c2VwID0gIldIRVJFIjsK LQkJZm9yIChpID0gMDsgaSA8IHJpaW5mby0+bmtleXM7IGkrKykKKwkJZm9yIChpbnQgaSA9 IDA7IGkgPCByaWluZm8tPm5rZXlzOyBpKyspCiAJCXsKIAkJCU9pZAkJCXBrX3R5cGUgPSBS SUF0dFR5cGUocGtfcmVsLCByaWluZm8tPnBrX2F0dG51bXNbaV0pOwogCkBAIC02NzAsNyAr NjY4LDYgQEAgcmlfcmVzdHJpY3QoVHJpZ2dlckRhdGEgKnRyaWdkYXRhLCBib29sIGlzX25v X2FjdGlvbikKIAkJY29uc3QgY2hhciAqcXVlcnlzZXA7CiAJCU9pZAkJCXF1ZXJ5b2lkc1tS SV9NQVhfTlVNS0VZU107CiAJCWNvbnN0IGNoYXIgKmZrX29ubHk7Ci0JCWludAkJCWk7CiAK IAkJLyogLS0tLS0tLS0tLQogCQkgKiBUaGUgcXVlcnkgc3RyaW5nIGJ1aWx0IGlzCkBAIC02 ODcsNyArNjg0LDcgQEAgcmlfcmVzdHJpY3QoVHJpZ2dlckRhdGEgKnRyaWdkYXRhLCBib29s IGlzX25vX2FjdGlvbikKIAkJYXBwZW5kU3RyaW5nSW5mbygmcXVlcnlidWYsICJTRUxFQ1Qg MSBGUk9NICVzJXMgeCIsCiAJCQkJCQkgZmtfb25seSwgZmtyZWxuYW1lKTsKIAkJcXVlcnlz ZXAgPSAiV0hFUkUiOwotCQlmb3IgKGkgPSAwOyBpIDwgcmlpbmZvLT5ua2V5czsgaSsrKQor CQlmb3IgKGludCBpID0gMDsgaSA8IHJpaW5mby0+bmtleXM7IGkrKykKIAkJewogCQkJT2lk CQkJcGtfdHlwZSA9IFJJQXR0VHlwZShwa19yZWwsIHJpaW5mby0+cGtfYXR0bnVtc1tpXSk7 CiAJCQlPaWQJCQlma190eXBlID0gUklBdHRUeXBlKGZrX3JlbCwgcmlpbmZvLT5ma19hdHRu dW1zW2ldKTsKQEAgLTc0Miw3ICs3MzksNiBAQCBSSV9GS2V5X2Nhc2NhZGVfZGVsKFBHX0ZV TkNUSU9OX0FSR1MpCiAJSGVhcFR1cGxlCW9sZF9yb3c7CiAJUklfUXVlcnlLZXkgcWtleTsK IAlTUElQbGFuUHRyCXFwbGFuOwotCWludAkJCWk7CiAKIAkvKiBDaGVjayB0aGF0IHRoaXMg aXMgYSB2YWxpZCB0cmlnZ2VyIGNhbGwgb24gdGhlIHJpZ2h0IHRpbWUgYW5kIGV2ZW50LiAq LwogCXJpX0NoZWNrVHJpZ2dlcihmY2luZm8sICJSSV9GS2V5X2Nhc2NhZGVfZGVsIiwgUklf VFJJR1RZUEVfREVMRVRFKTsKQEAgLTc5MCw3ICs3ODYsNyBAQCBSSV9GS2V5X2Nhc2NhZGVf ZGVsKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCWFwcGVuZFN0cmluZ0luZm8oJnF1ZXJ5YnVmLCAi REVMRVRFIEZST00gJXMlcyIsCiAJCQkJCQkgZmtfb25seSwgZmtyZWxuYW1lKTsKIAkJcXVl cnlzZXAgPSAiV0hFUkUiOwotCQlmb3IgKGkgPSAwOyBpIDwgcmlpbmZvLT5ua2V5czsgaSsr KQorCQlmb3IgKGludCBpID0gMDsgaSA8IHJpaW5mby0+bmtleXM7IGkrKykKIAkJewogCQkJ T2lkCQkJcGtfdHlwZSA9IFJJQXR0VHlwZShwa19yZWwsIHJpaW5mby0+cGtfYXR0bnVtc1tp XSk7CiAJCQlPaWQJCQlma190eXBlID0gUklBdHRUeXBlKGZrX3JlbCwgcmlpbmZvLT5ma19h dHRudW1zW2ldKTsKQEAgLTg0Niw4ICs4NDIsNiBAQCBSSV9GS2V5X2Nhc2NhZGVfdXBkKFBH X0ZVTkNUSU9OX0FSR1MpCiAJSGVhcFR1cGxlCW9sZF9yb3c7CiAJUklfUXVlcnlLZXkgcWtl eTsKIAlTUElQbGFuUHRyCXFwbGFuOwotCWludAkJCWk7Ci0JaW50CQkJajsKIAogCS8qIENo ZWNrIHRoYXQgdGhpcyBpcyBhIHZhbGlkIHRyaWdnZXIgY2FsbCBvbiB0aGUgcmlnaHQgdGlt ZSBhbmQgZXZlbnQuICovCiAJcmlfQ2hlY2tUcmlnZ2VyKGZjaW5mbywgIlJJX0ZLZXlfY2Fz Y2FkZV91cGQiLCBSSV9UUklHVFlQRV9VUERBVEUpOwpAQCAtOTA0LDcgKzg5OCw3IEBAIFJJ X0ZLZXlfY2FzY2FkZV91cGQoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCSBma19vbmx5LCBm a3JlbG5hbWUpOwogCQlxdWVyeXNlcCA9ICIiOwogCQlxdWFsc2VwID0gIldIRVJFIjsKLQkJ Zm9yIChpID0gMCwgaiA9IHJpaW5mby0+bmtleXM7IGkgPCByaWluZm8tPm5rZXlzOyBpKyss IGorKykKKwkJZm9yIChpbnQgaSA9IDAsIGogPSByaWluZm8tPm5rZXlzOyBpIDwgcmlpbmZv LT5ua2V5czsgaSsrLCBqKyspCiAJCXsKIAkJCU9pZAkJCXBrX3R5cGUgPSBSSUF0dFR5cGUo cGtfcmVsLCByaWluZm8tPnBrX2F0dG51bXNbaV0pOwogCQkJT2lkCQkJZmtfdHlwZSA9IFJJ QXR0VHlwZShma19yZWwsIHJpaW5mby0+ZmtfYXR0bnVtc1tpXSk7CkBAIC05OTMsNyArOTg3 LDYgQEAgcmlfc2V0bnVsbChUcmlnZ2VyRGF0YSAqdHJpZ2RhdGEpCiAJSGVhcFR1cGxlCW9s ZF9yb3c7CiAJUklfUXVlcnlLZXkgcWtleTsKIAlTUElQbGFuUHRyCXFwbGFuOwotCWludAkJ CWk7CiAKIAlyaWluZm8gPSByaV9GZXRjaENvbnN0cmFpbnRJbmZvKHRyaWdkYXRhLT50Z190 cmlnZ2VyLAogCQkJCQkJCQkJdHJpZ2RhdGEtPnRnX3JlbGF0aW9uLCB0cnVlKTsKQEAgLTEw NDYsNyArMTAzOSw3IEBAIHJpX3NldG51bGwoVHJpZ2dlckRhdGEgKnRyaWdkYXRhKQogCQkJ CQkJIGZrX29ubHksIGZrcmVsbmFtZSk7CiAJCXF1ZXJ5c2VwID0gIiI7CiAJCXF1YWxzZXAg PSAiV0hFUkUiOwotCQlmb3IgKGkgPSAwOyBpIDwgcmlpbmZvLT5ua2V5czsgaSsrKQorCQlm b3IgKGludCBpID0gMDsgaSA8IHJpaW5mby0+bmtleXM7IGkrKykKIAkJewogCQkJT2lkCQkJ cGtfdHlwZSA9IFJJQXR0VHlwZShwa19yZWwsIHJpaW5mby0+cGtfYXR0bnVtc1tpXSk7CiAJ CQlPaWQJCQlma190eXBlID0gUklBdHRUeXBlKGZrX3JlbCwgcmlpbmZvLT5ma19hdHRudW1z W2ldKTsKQEAgLTExNjgsNyArMTE2MSw2IEBAIHJpX3NldGRlZmF1bHQoVHJpZ2dlckRhdGEg KnRyaWdkYXRhKQogCQljb25zdCBjaGFyICpxdWFsc2VwOwogCQlPaWQJCQlxdWVyeW9pZHNb UklfTUFYX05VTUtFWVNdOwogCQljb25zdCBjaGFyICpma19vbmx5OwotCQlpbnQJCQlpOwog CiAJCS8qIC0tLS0tLS0tLS0KIAkJICogVGhlIHF1ZXJ5IHN0cmluZyBidWlsdCBpcwpAQCAt MTE4Nyw3ICsxMTc5LDcgQEAgcmlfc2V0ZGVmYXVsdChUcmlnZ2VyRGF0YSAqdHJpZ2RhdGEp CiAJCQkJCQkgZmtfb25seSwgZmtyZWxuYW1lKTsKIAkJcXVlcnlzZXAgPSAiIjsKIAkJcXVh bHNlcCA9ICJXSEVSRSI7Ci0JCWZvciAoaSA9IDA7IGkgPCByaWluZm8tPm5rZXlzOyBpKysp CisJCWZvciAoaW50IGkgPSAwOyBpIDwgcmlpbmZvLT5ua2V5czsgaSsrKQogCQl7CiAJCQlP aWQJCQlwa190eXBlID0gUklBdHRUeXBlKHBrX3JlbCwgcmlpbmZvLT5wa19hdHRudW1zW2ld KTsKIAkJCU9pZAkJCWZrX3R5cGUgPSBSSUF0dFR5cGUoZmtfcmVsLCByaWluZm8tPmZrX2F0 dG51bXNbaV0pOwpAQCAtMTM5MSw3ICsxMzgzLDYgQEAgUklfSW5pdGlhbF9DaGVjayhUcmln Z2VyICp0cmlnZ2VyLCBSZWxhdGlvbiBma19yZWwsIFJlbGF0aW9uIHBrX3JlbCkKIAlSYW5n ZVRibEVudHJ5ICpma3J0ZTsKIAljb25zdCBjaGFyICpzZXA7CiAJY29uc3QgY2hhciAqZmtf b25seTsKLQlpbnQJCQlpOwogCWludAkJCXNhdmVfbmVzdGxldmVsOwogCWNoYXIJCXdvcmtt ZW1idWZbMzJdOwogCWludAkJCXNwaV9yZXN1bHQ7CkBAIC0xNDIwLDcgKzE0MTEsNyBAQCBS SV9Jbml0aWFsX0NoZWNrKFRyaWdnZXIgKnRyaWdnZXIsIFJlbGF0aW9uIGZrX3JlbCwgUmVs YXRpb24gcGtfcmVsKQogCWZrcnRlLT5yZWxsb2NrbW9kZSA9IEFjY2Vzc1NoYXJlTG9jazsK IAlma3J0ZS0+cmVxdWlyZWRQZXJtcyA9IEFDTF9TRUxFQ1Q7CiAKLQlmb3IgKGkgPSAwOyBp IDwgcmlpbmZvLT5ua2V5czsgaSsrKQorCWZvciAoaW50IGkgPSAwOyBpIDwgcmlpbmZvLT5u a2V5czsgaSsrKQogCXsKIAkJaW50CQkJYXR0bm87CiAKQEAgLTE0NjQsNyArMTQ1NSw3IEBA IFJJX0luaXRpYWxfQ2hlY2soVHJpZ2dlciAqdHJpZ2dlciwgUmVsYXRpb24gZmtfcmVsLCBS ZWxhdGlvbiBwa19yZWwpCiAJaW5pdFN0cmluZ0luZm8oJnF1ZXJ5YnVmKTsKIAlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKCZxdWVyeWJ1ZiwgIlNFTEVDVCAiKTsKIAlzZXAgPSAiIjsKLQlm b3IgKGkgPSAwOyBpIDwgcmlpbmZvLT5ua2V5czsgaSsrKQorCWZvciAoaW50IGkgPSAwOyBp IDwgcmlpbmZvLT5ua2V5czsgaSsrKQogCXsKIAkJcXVvdGVPbmVOYW1lKGZrYXR0bmFtZSwK IAkJCQkJIFJJQXR0TmFtZShma19yZWwsIHJpaW5mby0+ZmtfYXR0bnVtc1tpXSkpOwpAQCAt MTQ4Myw3ICsxNDc0LDcgQEAgUklfSW5pdGlhbF9DaGVjayhUcmlnZ2VyICp0cmlnZ2VyLCBS ZWxhdGlvbiBma19yZWwsIFJlbGF0aW9uIHBrX3JlbCkKIAlzdHJjcHkocGthdHRuYW1lLCAi cGsuIik7CiAJc3RyY3B5KGZrYXR0bmFtZSwgImZrLiIpOwogCXNlcCA9ICIoIjsKLQlmb3Ig KGkgPSAwOyBpIDwgcmlpbmZvLT5ua2V5czsgaSsrKQorCWZvciAoaW50IGkgPSAwOyBpIDwg cmlpbmZvLT5ua2V5czsgaSsrKQogCXsKIAkJT2lkCQkJcGtfdHlwZSA9IFJJQXR0VHlwZShw a19yZWwsIHJpaW5mby0+cGtfYXR0bnVtc1tpXSk7CiAJCU9pZAkJCWZrX3R5cGUgPSBSSUF0 dFR5cGUoZmtfcmVsLCByaWluZm8tPmZrX2F0dG51bXNbaV0pOwpAQCAtMTUxMSw3ICsxNTAy LDcgQEAgUklfSW5pdGlhbF9DaGVjayhUcmlnZ2VyICp0cmlnZ2VyLCBSZWxhdGlvbiBma19y ZWwsIFJlbGF0aW9uIHBrX3JlbCkKIAlhcHBlbmRTdHJpbmdJbmZvKCZxdWVyeWJ1ZiwgIikg V0hFUkUgcGsuJXMgSVMgTlVMTCBBTkQgKCIsIHBrYXR0bmFtZSk7CiAKIAlzZXAgPSAiIjsK LQlmb3IgKGkgPSAwOyBpIDwgcmlpbmZvLT5ua2V5czsgaSsrKQorCWZvciAoaW50IGkgPSAw OyBpIDwgcmlpbmZvLT5ua2V5czsgaSsrKQogCXsKIAkJcXVvdGVPbmVOYW1lKGZrYXR0bmFt ZSwgUklBdHROYW1lKGZrX3JlbCwgcmlpbmZvLT5ma19hdHRudW1zW2ldKSk7CiAJCWFwcGVu ZFN0cmluZ0luZm8oJnF1ZXJ5YnVmLApAQCAtMTU5NSw3ICsxNTg2LDcgQEAgUklfSW5pdGlh bF9DaGVjayhUcmlnZ2VyICp0cmlnZ2VyLCBSZWxhdGlvbiBma19yZWwsIFJlbGF0aW9uIHBr X3JlbCkKIAkJICogb3IgZmtfcmVsJ3MgdHVwZGVzYy4KIAkJICovCiAJCW1lbWNweSgmZmFr ZV9yaWluZm8sIHJpaW5mbywgc2l6ZW9mKFJJX0NvbnN0cmFpbnRJbmZvKSk7Ci0JCWZvciAo aSA9IDA7IGkgPCBmYWtlX3JpaW5mby5ua2V5czsgaSsrKQorCQlmb3IgKGludCBpID0gMDsg aSA8IGZha2VfcmlpbmZvLm5rZXlzOyBpKyspCiAJCQlmYWtlX3JpaW5mby5ma19hdHRudW1z W2ldID0gaSArIDE7CiAKIAkJLyoKQEAgLTIxNzYsNyArMjE2Nyw2IEBAIHJpX0V4dHJhY3RW YWx1ZXMoUmVsYXRpb24gcmVsLCBIZWFwVHVwbGUgdHVwLAogewogCVR1cGxlRGVzYwl0dXBk ZXNjID0gcmVsLT5yZF9hdHQ7CiAJY29uc3QgaW50MTYgKmF0dG51bXM7Ci0JaW50CQkJaTsK IAlib29sCQlpc251bGw7CiAKIAlpZiAocmVsX2lzX3BrKQpAQCAtMjE4NCw3ICsyMTc0LDcg QEAgcmlfRXh0cmFjdFZhbHVlcyhSZWxhdGlvbiByZWwsIEhlYXBUdXBsZSB0dXAsCiAJZWxz ZQogCQlhdHRudW1zID0gcmlpbmZvLT5ma19hdHRudW1zOwogCi0JZm9yIChpID0gMDsgaSA8 IHJpaW5mby0+bmtleXM7IGkrKykKKwlmb3IgKGludCBpID0gMDsgaSA8IHJpaW5mby0+bmtl eXM7IGkrKykKIAl7CiAJCXZhbHNbaV0gPSBoZWFwX2dldGF0dHIodHVwLCBhdHRudW1zW2ld LCB0dXBkZXNjLAogCQkJCQkJCSAgICZpc251bGwpOwpAQCAtMjIxMSw3ICsyMjAxLDYgQEAg cmlfUmVwb3J0VmlvbGF0aW9uKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCiAJ U3RyaW5nSW5mb0RhdGEga2V5X3ZhbHVlczsKIAlib29sCQlvbmZrOwogCWNvbnN0IGludDE2 ICphdHRudW1zOwotCWludAkJCWlkeDsKIAlPaWQJCQlyZWxfb2lkOwogCUFjbFJlc3VsdAlh Y2xyZXN1bHQ7CiAJYm9vbAkJaGFzX3Blcm0gPSB0cnVlOwpAQCAtMjI1Myw3ICsyMjQyLDcg QEAgcmlfUmVwb3J0VmlvbGF0aW9uKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8s CiAJCWlmIChhY2xyZXN1bHQgIT0gQUNMQ0hFQ0tfT0spCiAJCXsKIAkJCS8qIFRyeSBmb3Ig Y29sdW1uLWxldmVsIHBlcm1pc3Npb25zICovCi0JCQlmb3IgKGlkeCA9IDA7IGlkeCA8IHJp aW5mby0+bmtleXM7IGlkeCsrKQorCQkJZm9yIChpbnQgaWR4ID0gMDsgaWR4IDwgcmlpbmZv LT5ua2V5czsgaWR4KyspCiAJCQl7CiAJCQkJYWNscmVzdWx0ID0gcGdfYXR0cmlidXRlX2Fj bGNoZWNrKHJlbF9vaWQsIGF0dG51bXNbaWR4XSwKIAkJCQkJCQkJCQkJCSAgR2V0VXNlcklk KCksCkBAIC0yMjc2LDcgKzIyNjUsNyBAQCByaV9SZXBvcnRWaW9sYXRpb24oY29uc3QgUklf Q29uc3RyYWludEluZm8gKnJpaW5mbywKIAkJLyogR2V0IHByaW50YWJsZSB2ZXJzaW9ucyBv ZiB0aGUga2V5cyBpbnZvbHZlZCAqLwogCQlpbml0U3RyaW5nSW5mbygma2V5X25hbWVzKTsK IAkJaW5pdFN0cmluZ0luZm8oJmtleV92YWx1ZXMpOwotCQlmb3IgKGlkeCA9IDA7IGlkeCA8 IHJpaW5mby0+bmtleXM7IGlkeCsrKQorCQlmb3IgKGludCBpZHggPSAwOyBpZHggPCByaWlu Zm8tPm5rZXlzOyBpZHgrKykKIAkJewogCQkJaW50CQkJZm51bSA9IGF0dG51bXNbaWR4XTsK IAkJCWNoYXIJICAgKm5hbWUsCkBAIC0yMzQwLDcgKzIzMjksNiBAQCByaV9OdWxsQ2hlY2so VHVwbGVEZXNjIHR1cERlc2MsCiAJCQkgY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5m bywgYm9vbCByZWxfaXNfcGspCiB7CiAJY29uc3QgaW50MTYgKmF0dG51bXM7Ci0JaW50CQkJ aTsKIAlib29sCQlhbGxudWxsID0gdHJ1ZTsKIAlib29sCQlub25lbnVsbCA9IHRydWU7CiAK QEAgLTIzNDksNyArMjMzNyw3IEBAIHJpX051bGxDaGVjayhUdXBsZURlc2MgdHVwRGVzYywK IAllbHNlCiAJCWF0dG51bXMgPSByaWluZm8tPmZrX2F0dG51bXM7CiAKLQlmb3IgKGkgPSAw OyBpIDwgcmlpbmZvLT5ua2V5czsgaSsrKQorCWZvciAoaW50IGkgPSAwOyBpIDwgcmlpbmZv LT5ua2V5czsgaSsrKQogCXsKIAkJaWYgKGhlYXBfYXR0aXNudWxsKHR1cCwgYXR0bnVtc1tp XSwgdHVwRGVzYykpCiAJCQlub25lbnVsbCA9IGZhbHNlOwpAQCAtMjUwNCw3ICsyNDkyLDYg QEAgcmlfS2V5c0VxdWFsKFJlbGF0aW9uIHJlbCwgSGVhcFR1cGxlIG9sZHR1cCwgSGVhcFR1 cGxlIG5ld3R1cCwKIAlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVs KTsKIAljb25zdCBpbnQxNiAqYXR0bnVtczsKIAljb25zdCBPaWQgICplcV9vcHJzOwotCWlu dAkJCWk7CiAKIAlpZiAocmVsX2lzX3BrKQogCXsKQEAgLTI1MTcsNyArMjUwNCw3IEBAIHJp X0tleXNFcXVhbChSZWxhdGlvbiByZWwsIEhlYXBUdXBsZSBvbGR0dXAsIEhlYXBUdXBsZSBu ZXd0dXAsCiAJCWVxX29wcnMgPSByaWluZm8tPmZmX2VxX29wcnM7CiAJfQogCi0JZm9yIChp ID0gMDsgaSA8IHJpaW5mby0+bmtleXM7IGkrKykKKwlmb3IgKGludCBpID0gMDsgaSA8IHJp aW5mby0+bmtleXM7IGkrKykKIAl7CiAJCURhdHVtCQlvbGR2YWx1ZTsKIAkJRGF0dW0JCW5l d3ZhbHVlOwotLSAKMi4yMC4xCgo= --------------4573FA42DDAF0E00FE827686--