Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sYsoI-00EmJW-Uf for pgsql-hackers@arkaria.postgresql.org; Tue, 30 Jul 2024 19:47:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sYsoG-00D0mj-NQ for pgsql-hackers@arkaria.postgresql.org; Tue, 30 Jul 2024 19:47:00 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sYsoF-00D0mZ-2I for pgsql-hackers@lists.postgresql.org; Tue, 30 Jul 2024 19:47:00 +0000 Received: from fout5-smtp.messagingengine.com ([103.168.172.148]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sYso9-002J9Z-6y for pgsql-hackers@postgresql.org; Tue, 30 Jul 2024 19:46:58 +0000 Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailfout.nyi.internal (Postfix) with ESMTP id 9EF291380777; Tue, 30 Jul 2024 15:46:50 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute5.internal (MEProxy); Tue, 30 Jul 2024 15:46:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eisentraut.org; h=cc:cc:content-type:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm2; t=1722368810; x= 1722455210; bh=SfcP9eKau+F2YENXRsLJFJzvWskzKDq5yoAXPV+wJv8=; b=6 GeCZloO4tU2QgpKIz2xANBHn9o1zrClkiyCe6LwnHWx90h+8KprD1o5GwSouguLR zuWq9VctMBFEKHuwHxiuwSFklYR3o7bQoQOzuRjogOnHBQUxmcTmjmK1UbTc4Xl3 NDRU3vr/aN9jACVoIYfwOsIbE53xnUEMAlk20QhLCGf8FVq5+EAlzPFOk4+AqlDM 7xo4HxYNjfkp96hj8zxBLaxdwlRZdvwprQ9zaVXkPzCLOC8WRRtEJSOaeL69b/Hc 4fnvuImsgwTVwwDj9tTo6aKu1BVCx/ZTDfguLiSRVg9W8i0SEmALoB9CBu1rW+BO JLXWfE4PrMHLGq/ZXJpeQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1722368810; x=1722455210; bh=SfcP9eKau+F2YENXRsLJFJzvWskz KDq5yoAXPV+wJv8=; b=PDdsaJWQPFDjD1GrD1k5w/q0y1fn6MifKufQrnmUgoJ3 nkAM5W7H0ceJlVKmzlsYzv5sCavhHrZ7FcydfXooEzblvkAiC/TOF3vm1gdKZkNg 4NBJjvze31QqoF3mmbkyrgYYxVtiRSQn8gEPp3rvEiJYThVWZ7oo9s+VtIykpf23 LvplB3WOins0gSW4SoWp7zKoAp3nPosn4vb0G2Ls9tIszMcd2WOTnodd63tGfeyV t3bSHaBinaIxszqmT5fb9zv89jaz2YFTzDAep9IxH7Rff5Oiw66LwRXCk0fcHZnv tlWmqJM2j5VyfV5BOitcc/qNSR0dodmDMWoAiKHwTw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddrjeeggddugeefucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurheptgfkffggfgfuvfevfhfhjgesmhdtreertddvjeenucfhrhhomheprfgvthgv rhcugfhishgvnhhtrhgruhhtuceophgvthgvrhesvghishgvnhhtrhgruhhtrdhorhhgqe enucggtffrrghtthgvrhhnpeektdeutdfhvdfhveeigfffteegvdejvdfhhfevfeevgfdt gfelgeehieevhffgieenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrih hlfhhrohhmpehpvghtvghrsegvihhsvghnthhrrghuthdrohhrghdpnhgspghrtghpthht oheptd X-ME-Proxy: Feedback-ID: ie0a040ee:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 30 Jul 2024 15:46:49 -0400 (EDT) Content-Type: multipart/mixed; boundary="------------TwlRYwTymzqqtCo0zfwWvbAJ" Message-ID: Date: Tue, 30 Jul 2024 21:46:47 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Support LIKE with nondeterministic collations To: Paul A Jungwirth Cc: pgsql-hackers , Daniel Verite References: Content-Language: en-US From: Peter Eisentraut In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------TwlRYwTymzqqtCo0zfwWvbAJ Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 27.07.24 00:32, Paul A Jungwirth wrote: > On Thu, Jun 27, 2024 at 11:31 PM Peter Eisentraut wrote: >> Here is an updated patch for this. > > I took a look at this. I added some tests and found a few that give > the wrong result (I believe). The new tests are included in the > attached patch, along with the results I expect. Here are the > failures: Thanks, these are great test cases. > > -- inner %% matches b then zero: > SELECT U&'cb\0061\0308' LIKE U&'c%%\00E4' COLLATE ignore_accents; > ?column? > ---------- > - t > + f > (1 row) > > -- trailing _ matches two codepoints that form one char: > SELECT U&'cb\0061\0308' LIKE U&'cb_' COLLATE ignore_accents; > ?column? > ---------- > - t > + f > (1 row) > > -- leading % matches zero: > SELECT U&'\0061\0308bc' LIKE U&'%\00E4bc' COLLATE ignore_accents; > ?column? > ---------- > - t > + f > (1 row) > > -- leading % matches zero (with later %): > SELECT U&'\0061\0308bc' LIKE U&'%\00E4%c' COLLATE ignore_accents; > ?column? > ---------- > - t > + f > (1 row) > > I think the 1st, 3rd, and 4th failures are all from % not backtracking > to match zero chars. These are all because of this in like_match.c: * Otherwise, scan for a text position at which we can match the * rest of the pattern. The first remaining pattern char is known * to be a regular or escaped literal character, so we can compare * the first pattern byte to each text byte to avoid recursing * more than we have to. [...] This shortcut doesn't work with nondeterministic collations, so we have to recurse in any case here. I have fixed that in the new patch; these test cases work now. > The 2nd failure I'm not sure about. Maybe my expectation is wrong, but > then why does the same test pass with __ leading not trailing? Surely > they should be consistent. The question is why is SELECT U&'cb\0061\0308' LIKE U&'cb_' COLLATE ignore_accents; -- false but SELECT U&'\0061\0308bc' LIKE U&'_bc' COLLATE ignore_accents; -- true The second one matches because SELECT U&'\0308bc' = 'bc' COLLATE ignore_accents; So the accent character will be ignored if it's adjacent to another fixed substring in the pattern. --------------TwlRYwTymzqqtCo0zfwWvbAJ Content-Type: text/plain; charset=UTF-8; name="v4-0001-Support-LIKE-with-nondeterministic-collations.patch" Content-Disposition: attachment; filename*0="v4-0001-Support-LIKE-with-nondeterministic-collations.patch" Content-Transfer-Encoding: base64 RnJvbSBlOWNjMDExOTQ2YjcxNGNlM2Q0ZjA0MzAwNzA1MjE3MDY5MzZhMzExIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogVHVlLCAzMCBKdWwgMjAyNCAyMTozMzo0OSArMDIwMApTdWJqZWN0 OiBbUEFUQ0ggdjRdIFN1cHBvcnQgTElLRSB3aXRoIG5vbmRldGVybWluaXN0aWMgY29sbGF0 aW9ucwpNSU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJz ZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAoKVGhpcyBhbGxvd3Mg Zm9yIGV4YW1wbGUgdXNpbmcgTElLRSB3aXRoIGNhc2UtaW5zZW5zaXRpdmUgY29sbGF0aW9u cy4KVGhlcmUgd2FzIHByZXZpb3VzbHkgbm8gaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2Yg dGhpcywgc28gaXQgd2FzIG1ldAp3aXRoIGEgbm90LXN1cHBvcnRlZCBlcnJvci4gIFRoaXMg YWRkcyB0aGUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gYW5kCnJlbW92ZXMgdGhlIGVycm9y LgoKVW5saWtlIHdpdGggZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25zLCB0aGUgTElLRSBtYXRj aGluZyBjYW5ub3QgZ28KY2hhcmFjdGVyIGJ5IGNoYXJhY3RlciBidXQgaGFzIHRvIGdvIHN1 YnN0cmluZyBieSBzdWJzdHJpbmcuICBGb3IKZXhhbXBsZSwgaWYgd2UgYXJlIG1hdGNoaW5n IGFnYWluc3QgTElLRSAnZm9vJWJhcicsIHdlIGNhbid0IHN0YXJ0IGJ5Cmxvb2tpbmcgZm9y IGFuICdmJywgdGhlbiBhbiAnbycsIGJ1dCBpbnN0ZWFkIHdpdGggaGF2ZSB0byBmaW5kCnNv bWV0aGluZyB0aGF0IG1hdGNoZXMgJ2ZvbycuICBUaGlzIGlzIGJlY2F1c2UgdGhlIGNvbGxh dGlvbiBjb3VsZApjb25zaWRlciBzdWJzdHJpbmdzIG9mIGRpZmZlcmVudCBsZW5ndGhzIHRv IGJlIGVxdWFsLiAgVGhpcyBpcyBhbGwKaW50ZXJuYWwgdG8gTWF0Y2hUZXh0KCkgaW4gbGlr ZV9tYXRjaC5jLgoKVGhlIGNoYW5nZXMgaW4gR2VuZXJpY01hdGNoVGV4dCgpIGluIGxpa2Uu YyBqdXN0IHBhc3MgdGhyb3VnaCB0aGUKbG9jYWxlIGluZm9ybWF0aW9uIHRvIE1hdGNoVGV4 dCgpLCB3aGljaCB3YXMgcHJldmlvdXNseSBub3QgbmVlZGVkLgpUaGlzIG1hdGNoZXMgZXhh Y3RseSBHZW5lcmljX1RleHRfSUNfbGlrZSgpIGJlbG93LgoKTm90ZSB0aGF0IElMSUtFIGlz IG5vdCBhZmZlY3RlZC4gIEl0J3MgdW5jbGVhciB3aGV0aGVyIElMSUtFIG1ha2VzCnNlbnNl IHVuZGVyIG5vbmRldGVybWluaXN0aWMgY29sbGF0aW9ucy4KClRoaXMgYWxzbyB1cGRhdGVz IG1hdGNoX3BhdHRlcm5fcHJlZml4KCkgaW4gbGlrZV9zdXBwb3J0LmMgdG8gc3VwcG9ydApv cHRpbWl6aW5nIHRoZSBjYXNlIG9mIGFuIGV4YWN0IHBhdHRlcm4gd2l0aCBub25kZXRlcm1p bmlzdGljCmNvbGxhdGlvbnMuICBUaGlzIHdhcyBhbHJlYWR5IGFsbHVkZWQgdG8gaW4gdGhl IHByZXZpb3VzIGNvZGUuCgooaW5jbHVkZXMgZG9jdW1lbnRhdGlvbiBleGFtcGxlcyBmcm9t IERhbmllbCBWw6lyaXTDqSBhbmQgdGVzdCBjYXNlcwpmcm9tIFBhdWwgQSBKdW5nd2lydGgp CgpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2Zs YXQvNzAwZDJlODYtYmY3NS00NjA3LTljZjItZjViNzgwMmY2ZTg4QGVpc2VudHJhdXQub3Jn Ci0tLQogZG9jL3NyYy9zZ21sL2NoYXJzZXQuc2dtbCAgICAgICAgICAgICAgICAgICAgIHwg ICAyICstCiBkb2Mvc3JjL3NnbWwvZnVuYy5zZ21sICAgICAgICAgICAgICAgICAgICAgICAg fCAgNTEgKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9saWtlLmMgICAgICAgICAgICAg ICAgICB8ICAzMCArKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9saWtlX21hdGNoLmMgICAg ICAgICAgICB8IDEyNCArKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9saWtl X3N1cHBvcnQuYyAgICAgICAgICB8ICAyOSArKy0KIC4uLi9yZWdyZXNzL2V4cGVjdGVkL2Nv bGxhdGUuaWN1LnV0Zjgub3V0ICAgICB8IDE4NiArKysrKysrKysrKysrKysrKy0KIHNyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2NvbGxhdGUuaWN1LnV0Zjguc3FsICAgICB8ICA1MyArKysrLQog NyBmaWxlcyBjaGFuZ2VkLCA0MzEgaW5zZXJ0aW9ucygrKSwgNDQgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NoYXJzZXQuc2dtbCBiL2RvYy9zcmMvc2dtbC9j aGFyc2V0LnNnbWwKaW5kZXggODM0Y2IzMGM4NWEuLjUzM2IzYWY5MDQ1IDEwMDY0NAotLS0g YS9kb2Mvc3JjL3NnbWwvY2hhcnNldC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jaGFyc2V0 LnNnbWwKQEAgLTExOTcsNyArMTE5Nyw3IEBAIDx0aXRsZT5Ob25kZXRlcm1pbmlzdGljIENv bGxhdGlvbnM8L3RpdGxlPgogICAgICB0byBhIHBlcmZvcm1hbmNlIHBlbmFsdHkuICBOb3Rl LCBpbiBwYXJ0aWN1bGFyLCB0aGF0IEItdHJlZSBjYW5ub3QgdXNlCiAgICAgIGRlZHVwbGlj YXRpb24gd2l0aCBpbmRleGVzIHRoYXQgdXNlIGEgbm9uZGV0ZXJtaW5pc3RpYyBjb2xsYXRp b24uICBBbHNvLAogICAgICBjZXJ0YWluIG9wZXJhdGlvbnMgYXJlIG5vdCBwb3NzaWJsZSB3 aXRoIG5vbmRldGVybWluaXN0aWMgY29sbGF0aW9ucywKLSAgICAgc3VjaCBhcyBwYXR0ZXJu IG1hdGNoaW5nIG9wZXJhdGlvbnMuICBUaGVyZWZvcmUsIHRoZXkgc2hvdWxkIGJlIHVzZWQK KyAgICAgc3VjaCBhcyBzb21lIHBhdHRlcm4gbWF0Y2hpbmcgb3BlcmF0aW9ucy4gIFRoZXJl Zm9yZSwgdGhleSBzaG91bGQgYmUgdXNlZAogICAgICBvbmx5IGluIGNhc2VzIHdoZXJlIHRo ZXkgYXJlIHNwZWNpZmljYWxseSB3YW50ZWQuCiAgICAgPC9wYXJhPgogCmRpZmYgLS1naXQg YS9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAppbmRl eCBiMzlmOTdkYzhkZS4uMmJlMzI3ZmQxMTcgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9m dW5jLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbApAQCAtNTM4MCw5ICs1Mzgw LDEwIEBAIDx0aXRsZT5QYXR0ZXJuIE1hdGNoaW5nPC90aXRsZT4KICAgIDwvY2F1dGlvbj4K IAogICAgPHBhcmE+Ci0gICAgVGhlIHBhdHRlcm4gbWF0Y2hpbmcgb3BlcmF0b3JzIG9mIGFs bCB0aHJlZSBraW5kcyBkbyBub3Qgc3VwcG9ydAotICAgIG5vbmRldGVybWluaXN0aWMgY29s bGF0aW9ucy4gIElmIHJlcXVpcmVkLCBhcHBseSBhIGRpZmZlcmVudCBjb2xsYXRpb24gdG8K LSAgICB0aGUgZXhwcmVzc2lvbiB0byB3b3JrIGFyb3VuZCB0aGlzIGxpbWl0YXRpb24uCisg ICAgPGZ1bmN0aW9uPlNJTUlMQVIgVE88L2Z1bmN0aW9uPiBhbmQgPGFjcm9ueW0+UE9TSVg8 L2Fjcm9ueW0+LXN0eWxlIHJlZ3VsYXIKKyAgICBleHByZXNzaW9ucyBkbyBub3Qgc3VwcG9y dCBub25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbnMuICBJZiByZXF1aXJlZCwgdXNlCisgICAg PGZ1bmN0aW9uPkxJS0U8L2Z1bmN0aW9uPiBvciBhcHBseSBhIGRpZmZlcmVudCBjb2xsYXRp b24gdG8gdGhlIGV4cHJlc3Npb24KKyAgICB0byB3b3JrIGFyb3VuZCB0aGlzIGxpbWl0YXRp b24uCiAgICA8L3BhcmE+CiAKICAgPHNlY3QyIGlkPSJmdW5jdGlvbnMtbGlrZSI+CkBAIC01 NDI4LDYgKzU0MjksNDUgQEAgPHRpdGxlPjxmdW5jdGlvbj5MSUtFPC9mdW5jdGlvbj48L3Rp dGxlPgogPC9wcm9ncmFtbGlzdGluZz4KICAgIDwvcGFyYT4KIAorICAgPHBhcmE+CisgICAg PGZ1bmN0aW9uPkxJS0U8L2Z1bmN0aW9uPiBwYXR0ZXJuIG1hdGNoaW5nIHN1cHBvcnRzIG5v bmRldGVybWluaXN0aWMKKyAgICBjb2xsYXRpb25zIChzZWUgPHhyZWYgbGlua2VuZD0iY29s bGF0aW9uLW5vbmRldGVybWluaXN0aWMiLz4pLCBzdWNoIGFzCisgICAgY2FzZS1pbnNlbnNp dGl2ZSBjb2xsYXRpb25zIG9yIGNvbGxhdGlvbnMgdGhhdCwgc2F5LCBpZ25vcmUgcHVuY3R1 YXRpb24uCisgICAgU28gd2l0aCBhIGNhc2UtaW5zZW5zaXRpdmUgY29sbGF0aW9uLCBvbmUg Y291bGQgaGF2ZToKKzxwcm9ncmFtbGlzdGluZz4KKydBYkMnIExJS0UgJ2FiYycgQ09MTEFU RSBjYXNlX2luc2Vuc2l0aXZlICAgIDxsaW5lYW5ub3RhdGlvbj50cnVlPC9saW5lYW5ub3Rh dGlvbj4KKydBYkMnIExJS0UgJ2ElJyBDT0xMQVRFIGNhc2VfaW5zZW5zaXRpdmUgICAgIDxs aW5lYW5ub3RhdGlvbj50cnVlPC9saW5lYW5ub3RhdGlvbj4KKzwvcHJvZ3JhbWxpc3Rpbmc+ CisgICAgV2l0aCBjb2xsYXRpb25zIHRoYXQgaWdub3JlIGNlcnRhaW4gY2hhcmFjdGVycyBv ciBpbiBnZW5lcmFsIHRoYXQgY29uc2lkZXIKKyAgICBzdHJpbmdzIG9mIGRpZmZlcmVudCBs ZW5ndGhzIGVxdWFsLCB0aGUgc2VtYW50aWNzIGNhbiBiZWNvbWUgYSBiaXQgbW9yZQorICAg IGNvbXBsaWNhdGVkLiAgQ29uc2lkZXIgdGhlc2UgZXhhbXBsZXM6Cis8cHJvZ3JhbWxpc3Rp bmc+CisnLmZvby4nIExJS0UgJ2ZvbycgQ09MTEFURSBpZ25fcHVuY3QgICAgPGxpbmVhbm5v dGF0aW9uPnRydWU8L2xpbmVhbm5vdGF0aW9uPgorJy5mb28uJyBMSUtFICdmX28nIENPTExB VEUgaWduX3B1bmN0ICAgIDxsaW5lYW5ub3RhdGlvbj50cnVlPC9saW5lYW5ub3RhdGlvbj4K KycuZm9vLicgTElLRSAnX29vJyBDT0xMQVRFIGlnbl9wdW5jdCAgICA8bGluZWFubm90YXRp b24+ZmFsc2U8L2xpbmVhbm5vdGF0aW9uPgorPC9wcm9ncmFtbGlzdGluZz4KKyAgICBUaGUg d2F5IHRoZSBtYXRjaGluZyB3b3JrcyBpcyB0aGF0IHRoZSBwYXR0ZXJuIGlzIHBhcnRpdGlv bmVkIGludG8KKyAgICBzZXF1ZW5jZXMgb2Ygd2lsZGNhcmRzIGFuZCBub24td2lsZGNhcmQg c3RyaW5ncy4gIEZvciBleGFtcGxlLCB0aGUgcGF0dGVybgorICAgIDxsaXRlcmFsPmZfbzwv bGl0ZXJhbD4gaXMgcGFydGl0aW9uZWQgaW50byA8bGl0ZXJhbD5mLCBfLCBvPC9saXRlcmFs PiwgdGhlCisgICAgcGF0dGVybiA8bGl0ZXJhbD5fb288L2xpdGVyYWw+IGlzIHBhcnRpdGlv bmVkIGludG8gPGxpdGVyYWw+XywKKyAgICBvbzwvbGl0ZXJhbD4uICBUaGUgaW5wdXQgc3Ry aW5nIG1hdGNoZXMgdGhlIHBhdHRlcm4gaWYgaXQgY2FuIGJlCisgICAgcGFydGl0aW9uZWQg aW4gc3VjaCBhIHdheSB0aGF0IHRoZSB3aWxkY2FyZHMgbWF0Y2ggb25lIGNoYXJhY3RlciBv ciBhbnkKKyAgICBudW1iZXIgb2YgY2hhcmFjdGVycyByZXNwZWN0aXZlbHkgYW5kIHRoZSBu b24td2lsZGNhcmQgcGFydGl0aW9ucyBhcmUKKyAgICBlcXVhbCB1bmRlciB0aGUgYXBwbGlj YWJsZSBjb2xsYXRpb24uICBTbyBmb3IgZXhhbXBsZSwgPGxpdGVyYWw+Jy5mb28uJworICAg IExJS0UgJ2ZfbycgQ09MTEFURSBpZ25fcHVuY3Q8L2xpdGVyYWw+IGlzIHRydWUgYmVjYXVz ZSBvbmUgY2FuIHBhcnRpdGlvbgorICAgIDxsaXRlcmFsPi5mb28uPC9saXRlcmFsPiBpbnRv IDxsaXRlcmFsPi5mLCBvLCBvLjwvbGl0ZXJhbD4sIGFuZCB0aGVuCisgICAgPGxpdGVyYWw+ Jy5mJyA9ICdmJyBDT0xMQVRFIGlnbl9wdW5jdDwvbGl0ZXJhbD4sIDxsaXRlcmFsPidvJzwv bGl0ZXJhbD4KKyAgICBtYXRjaGVzIHRoZSA8bGl0ZXJhbD5fPC9saXRlcmFsPiB3aWxkY2Fy ZCwgYW5kIDxsaXRlcmFsPidvLicgPSAnbycgQ09MTEFURQorICAgIGlnbl9wdW5jdDwvbGl0 ZXJhbD4uICBCdXQgPGxpdGVyYWw+Jy5mb28uJyBMSUtFICdfb28nIENPTExBVEUKKyAgICBp Z25fcHVuY3Q8L2xpdGVyYWw+IGlzIGZhbHNlIGJlY2F1c2UgPGxpdGVyYWw+LmZvby48L2xp dGVyYWw+IGNhbm5vdCBiZQorICAgIHBhcnRpdGlvbmVkIGluIGEgd2F5IHRoYXQgdGhlIGZp cnN0IGNoYXJhY3RlciBpcyBhbnkgY2hhcmFjdGVyIGFuZCB0aGUKKyAgICByZXN0IG9mIHRo ZSBzdHJpbmcgY29tcGFyZXMgZXF1YWwgdG8gPGxpdGVyYWw+b288L2xpdGVyYWw+LiAgKE5v dGUgdGhhdAorICAgIHRoZSBzaW5nbGUtY2hhcmFjdGVyIHdpbGRjYXJkIGFsd2F5cyBtYXRj aGVzIGV4YWN0bHkgb25lIGNoYXJhY3RlciwKKyAgICBpbmRlcGVuZGVudCBvZiB0aGUgY29s bGF0aW9uLiAgU28gaW4gdGhpcyBleGFtcGxlLCB0aGUKKyAgICA8bGl0ZXJhbD5fPC9saXRl cmFsPiB3b3VsZCBtYXRjaCA8bGl0ZXJhbD4uPC9saXRlcmFsPiwgYnV0IHRoZW4gdGhlIHJl c3QKKyAgICBvZiB0aGUgaW5wdXQgc3RyaW5nIHdvbid0IG1hdGNoIHRoZSByZXN0IG9mIHRo ZSBwYXR0ZXJuLikKKyAgIDwvcGFyYT4KKwogICAgPHBhcmE+CiAgICAgPGZ1bmN0aW9uPkxJ S0U8L2Z1bmN0aW9uPiBwYXR0ZXJuIG1hdGNoaW5nIGFsd2F5cyBjb3ZlcnMgdGhlIGVudGly ZQogICAgIHN0cmluZy4gIFRoZXJlZm9yZSwgaWYgaXQncyBkZXNpcmVkIHRvIG1hdGNoIGEg c2VxdWVuY2UgYW55d2hlcmUgd2l0aGluCkBAIC01NDY5LDggKzU1MDksOSBAQCA8dGl0bGU+ PGZ1bmN0aW9uPkxJS0U8L2Z1bmN0aW9uPjwvdGl0bGU+CiAKICAgIDxwYXJhPgogICAgIFRo ZSBrZXkgd29yZCA8dG9rZW4+SUxJS0U8L3Rva2VuPiBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9m Ci0gICAgPHRva2VuPkxJS0U8L3Rva2VuPiB0byBtYWtlIHRoZSBtYXRjaCBjYXNlLWluc2Vu c2l0aXZlIGFjY29yZGluZwotICAgIHRvIHRoZSBhY3RpdmUgbG9jYWxlLiAgVGhpcyBpcyBu b3QgaW4gdGhlIDxhY3JvbnltPlNRTDwvYWNyb255bT4gc3RhbmRhcmQgYnV0IGlzIGEKKyAg ICA8dG9rZW4+TElLRTwvdG9rZW4+IHRvIG1ha2UgdGhlIG1hdGNoIGNhc2UtaW5zZW5zaXRp dmUgYWNjb3JkaW5nIHRvIHRoZQorICAgIGFjdGl2ZSBsb2NhbGUuICAoQnV0IHRoaXMgZG9l cyBub3Qgc3VwcG9ydCBub25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbnMuKQorICAgIFRoaXMg aXMgbm90IGluIHRoZSA8YWNyb255bT5TUUw8L2Fjcm9ueW0+IHN0YW5kYXJkIGJ1dCBpcyBh CiAgICAgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBleHRlbnNpb24u CiAgICA8L3BhcmE+CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9saWtl LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbGlrZS5jCmluZGV4IDU3ZWFkNjZiNWFhLi5i YmJlNmMwOWQxOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xpa2UuYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbGlrZS5jCkBAIC0xNDksMjIgKzE0OSwzMiBA QCBTQl9sb3dlcl9jaGFyKHVuc2lnbmVkIGNoYXIgYywgcGdfbG9jYWxlX3QgbG9jYWxlLCBi b29sIGxvY2FsZV9pc19jKQogc3RhdGljIGlubGluZSBpbnQKIEdlbmVyaWNNYXRjaFRleHQo Y29uc3QgY2hhciAqcywgaW50IHNsZW4sIGNvbnN0IGNoYXIgKnAsIGludCBwbGVuLCBPaWQg Y29sbGF0aW9uKQogewotCWlmIChjb2xsYXRpb24gJiYgIWxjX2N0eXBlX2lzX2MoY29sbGF0 aW9uKSkKLQl7Ci0JCXBnX2xvY2FsZV90IGxvY2FsZSA9IHBnX25ld2xvY2FsZV9mcm9tX2Nv bGxhdGlvbihjb2xsYXRpb24pOworCXBnX2xvY2FsZV90IGxvY2FsZSA9IDA7CisJYm9vbAkJ bG9jYWxlX2lzX2MgPSBmYWxzZTsKIAotCQlpZiAoIXBnX2xvY2FsZV9kZXRlcm1pbmlzdGlj KGxvY2FsZSkpCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZF QVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJCSBlcnJtc2coIm5vbmRldGVybWluaXN0aWMg Y29sbGF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgTElLRSIpKSk7CisJaWYgKCFPaWRJ c1ZhbGlkKGNvbGxhdGlvbikpCisJeworCQkvKgorCQkgKiBUaGlzIHR5cGljYWxseSBtZWFu cyB0aGF0IHRoZSBwYXJzZXIgY291bGQgbm90IHJlc29sdmUgYSBjb25mbGljdAorCQkgKiBv ZiBpbXBsaWNpdCBjb2xsYXRpb25zLCBzbyByZXBvcnQgaXQgdGhhdCB3YXkuCisJCSAqLwor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5ERVRFUk1JTkFURV9D T0xMQVRJT04pLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBkZXRlcm1pbmUgd2hpY2ggY29s bGF0aW9uIHRvIHVzZSBmb3IgTElLRSIpLAorCQkJCSBlcnJoaW50KCJVc2UgdGhlIENPTExB VEUgY2xhdXNlIHRvIHNldCB0aGUgY29sbGF0aW9uIGV4cGxpY2l0bHkuIikpKTsKIAl9CiAK KwlpZiAobGNfY3R5cGVfaXNfYyhjb2xsYXRpb24pKQorCQlsb2NhbGVfaXNfYyA9IHRydWU7 CisJZWxzZQorCQlsb2NhbGUgPSBwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oY29sbGF0 aW9uKTsKKwogCWlmIChwZ19kYXRhYmFzZV9lbmNvZGluZ19tYXhfbGVuZ3RoKCkgPT0gMSkK LQkJcmV0dXJuIFNCX01hdGNoVGV4dChzLCBzbGVuLCBwLCBwbGVuLCAwLCB0cnVlKTsKKwkJ cmV0dXJuIFNCX01hdGNoVGV4dChzLCBzbGVuLCBwLCBwbGVuLCBsb2NhbGUsIGxvY2FsZV9p c19jKTsKIAllbHNlIGlmIChHZXREYXRhYmFzZUVuY29kaW5nKCkgPT0gUEdfVVRGOCkKLQkJ cmV0dXJuIFVURjhfTWF0Y2hUZXh0KHMsIHNsZW4sIHAsIHBsZW4sIDAsIHRydWUpOworCQly ZXR1cm4gVVRGOF9NYXRjaFRleHQocywgc2xlbiwgcCwgcGxlbiwgbG9jYWxlLCBsb2NhbGVf aXNfYyk7CiAJZWxzZQotCQlyZXR1cm4gTUJfTWF0Y2hUZXh0KHMsIHNsZW4sIHAsIHBsZW4s IDAsIHRydWUpOworCQlyZXR1cm4gTUJfTWF0Y2hUZXh0KHMsIHNsZW4sIHAsIHBsZW4sIGxv Y2FsZSwgbG9jYWxlX2lzX2MpOwogfQogCiBzdGF0aWMgaW5saW5lIGludApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xpa2VfbWF0Y2guYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9saWtlX21hdGNoLmMKaW5kZXggZjI5OTBlZGZmN2UuLjQzZTk5MWZkOTMyIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbGlrZV9tYXRjaC5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9saWtlX21hdGNoLmMKQEAgLTE1OCw3ICsxNTgsOSBAQCBN YXRjaFRleHQoY29uc3QgY2hhciAqdCwgaW50IHRsZW4sIGNvbnN0IGNoYXIgKnAsIGludCBw bGVuLAogCQkJICogdGhlIGZpcnN0IHBhdHRlcm4gYnl0ZSB0byBlYWNoIHRleHQgYnl0ZSB0 byBhdm9pZCByZWN1cnNpbmcKIAkJCSAqIG1vcmUgdGhhbiB3ZSBoYXZlIHRvLiAgVGhpcyBm YWN0IGFsc28gZ3VhcmFudGVlcyB0aGF0IHdlIGRvbid0CiAJCQkgKiBoYXZlIHRvIGNvbnNp ZGVyIGEgbWF0Y2ggdG8gdGhlIHplcm8tbGVuZ3RoIHN1YnN0cmluZyBhdCB0aGUKLQkJCSAq IGVuZCBvZiB0aGUgdGV4dC4KKwkJCSAqIGVuZCBvZiB0aGUgdGV4dC4gIFdpdGggYSBub25k ZXRlcm1pbmlzdGljIGNvbGxhdGlvbiwgd2UgY2FuJ3QKKwkJCSAqIHJlbHkgb24gdGhlIGZp cnN0IGJ5dGVzIGJlaW5nIGVxdWFsLCBzbyB3ZSBoYXZlIHRvIHJlY3Vyc2UgaW4KKwkJCSAq IGFueSBjYXNlLgogCQkJICovCiAJCQlpZiAoKnAgPT0gJ1xcJykKIAkJCXsKQEAgLTE3Myw3 ICsxNzUsNyBAQCBNYXRjaFRleHQoY29uc3QgY2hhciAqdCwgaW50IHRsZW4sIGNvbnN0IGNo YXIgKnAsIGludCBwbGVuLAogCiAJCQl3aGlsZSAodGxlbiA+IDApCiAJCQl7Ci0JCQkJaWYg KEdFVENIQVIoKnQpID09IGZpcnN0cGF0KQorCQkJCWlmIChHRVRDSEFSKCp0KSA9PSBmaXJz dHBhdCB8fCAobG9jYWxlICYmICFsb2NhbGUtPmRldGVybWluaXN0aWMpKQogCQkJCXsKIAkJ CQkJaW50CQkJbWF0Y2hlZCA9IE1hdGNoVGV4dCh0LCB0bGVuLCBwLCBwbGVuLAogCQkJCQkJ CQkJCQkJCWxvY2FsZSwgbG9jYWxlX2lzX2MpOwpAQCAtMTk4LDYgKzIwMCwxMjQgQEAgTWF0 Y2hUZXh0KGNvbnN0IGNoYXIgKnQsIGludCB0bGVuLCBjb25zdCBjaGFyICpwLCBpbnQgcGxl biwKIAkJCU5leHRCeXRlKHAsIHBsZW4pOwogCQkJY29udGludWU7CiAJCX0KKwkJZWxzZSBp ZiAobG9jYWxlICYmICFsb2NhbGUtPmRldGVybWluaXN0aWMpCisJCXsKKwkJCS8qCisJCQkg KiBGb3Igbm9uZGV0ZXJtaW5pc3RpYyBsb2NhbGVzLCB3ZSBmaW5kIHRoZSBuZXh0IHN1YnN0 cmluZyBvZiB0aGUKKwkJCSAqIHBhdHRlcm4gdGhhdCBkb2VzIG5vdCBjb250YWluIHdpbGRj YXJkcyBhbmQgdHJ5IHRvIGZpbmQgYQorCQkJICogbWF0Y2hpbmcgc3Vic3RyaW5nIGluIHRo ZSB0ZXh0LiAgQ3J1Y2lhbGx5LCB3ZSBjYW5ub3QgZG8gdGhpcworCQkJICogY2hhcmFjdGVy IGJ5IGNoYXJhY3RlciwgYXMgaW4gdGhlIG5vcm1hbCBjYXNlLCBidXQgbXVzdCBkbyBpdAor CQkJICogc3Vic3RyaW5nIGJ5IHN1YnN0cmluZywgcGFydGl0aW9uZWQgYnkgdGhlIHdpbGRj YXJkIGNoYXJhY3RlcnMuCisJCQkgKi8KKwkJCWNvbnN0IGNoYXIgKnAxOworCQkJc2l6ZV90 CQlwMWxlbjsKKwkJCWNvbnN0IGNoYXIgKnQxOworCQkJc2l6ZV90CQl0MWxlbjsKKwkJCWJv b2wJCWZvdW5kX2VzY2FwZTsKKwkJCWNvbnN0IGNoYXIgKnN1YnBhdDsKKwkJCXNpemVfdAkJ c3VicGF0bGVuOworCQkJY2hhcgkgICAqYnVmID0gTlVMTDsKKworCQkJLyoKKwkJCSAqIERl dGVybWluZSBuZXh0IHN1YnN0cmluZyBvZiBwYXR0ZXJuIHdpdGhvdXQgd2lsZGNhcmRzLiAg cCBpcworCQkJICogdGhlIHN0YXJ0IG9mIHRoZSBzdWJwYXR0ZXJuLCBwMSBpcyBvbmUgcGFz dCB0aGUgbGFzdCBieXRlLiBBbHNvCisJCQkgKiB0cmFjayBpZiB3ZSBmb3VuZCBhbiBlc2Nh cGUgY2hhcmFjdGVyLgorCQkJICovCisJCQlwMSA9IHA7CisJCQlwMWxlbiA9IHBsZW47CisJ CQlmb3VuZF9lc2NhcGUgPSBmYWxzZTsKKwkJCXdoaWxlIChwMWxlbiA+IDApCisJCQl7CisJ CQkJaWYgKCpwMSA9PSAnXFwnKQorCQkJCXsKKwkJCQkJZm91bmRfZXNjYXBlID0gdHJ1ZTsK KwkJCQkJTmV4dEJ5dGUocDEsIHAxbGVuKTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoKnAxID09 ICdfJyB8fCAqcDEgPT0gJyUnKQorCQkJCQlicmVhazsKKwkJCQlOZXh0Qnl0ZShwMSwgcDFs ZW4pOworCQkJfQorCisJCQkvKgorCQkJICogSWYgd2UgZm91bmQgYW4gZXNjYXBlIGNoYXJh Y3RlciwgdGhlbiBtYWtlIGFuIHVuZXNjYXBlZCBjb3B5IG9mCisJCQkgKiB0aGUgc3VicGF0 dGVybi4KKwkJCSAqLworCQkJaWYgKGZvdW5kX2VzY2FwZSkKKwkJCXsKKwkJCQljaGFyCSAg ICpiOworCisJCQkJYiA9IGJ1ZiA9IHBhbGxvYyhwMSAtIHApOworCQkJCWZvciAoY29uc3Qg Y2hhciAqYyA9IHA7IGMgPCBwMTsgYysrKQorCQkJCXsKKwkJCQkJaWYgKCpjID09ICdcXCcp CisJCQkJCQk7CisJCQkJCWVsc2UKKwkJCQkJCSooYisrKSA9ICpjOworCQkJCX0KKworCQkJ CXN1YnBhdCA9IGJ1ZjsKKwkJCQlzdWJwYXRsZW4gPSBiIC0gYnVmOworCQkJfQorCQkJZWxz ZQorCQkJeworCQkJCXN1YnBhdCA9IHA7CisJCQkJc3VicGF0bGVuID0gcDEgLSBwOworCQkJ fQorCisJCQkvKgorCQkJICogTm93IGJ1aWxkIGEgc3Vic3RyaW5nIG9mIHRoZSB0ZXh0IGFu ZCB0cnkgdG8gbWF0Y2ggaXQgYWdhaW5zdAorCQkJICogdGhlIHN1YnBhdHRlcm4uICB0IGlz IHRoZSBzdGFydCBvZiB0aGUgdGV4dCwgdDEgaXMgb25lIHBhc3QgdGhlCisJCQkgKiBsYXN0 IGJ5dGUuICBXZSBzdGFydCB3aXRoIGEgemVyby1sZW5ndGggc3RyaW5nLgorCQkJICovCisJ CQl0MSA9IHQ7CisJCQl0MWxlbiA9IHRsZW47CisJCQlmb3IgKDs7KQorCQkJeworCQkJCWlu dAkJCWNtcDsKKworCQkJCWNtcCA9IHBnX3N0cm5jb2xsKHN1YnBhdCwgc3VicGF0bGVuLCB0 LCAodDEgLSB0KSwgbG9jYWxlKTsKKworCQkJCS8qCisJCQkJICogSWYgd2UgZm91bmQgYSBt YXRjaCwgd2UgaGF2ZSB0byB0ZXN0IGlmIHRoZSByZXN0IG9mIHBhdHRlcm4KKwkJCQkgKiBj YW4gbWF0Y2ggYWdhaW5zdCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nLiAgT3RoZXJ3aXNlIHdl CisJCQkJICogaGF2ZSB0byBjb250aW51ZSBoZXJlIHRyeSBtYXRjaGluZyB3aXRoIGEgbG9u Z2VyIHN1YnN0cmluZy4KKwkJCQkgKiAoVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSByZWN1cnNp b24gZm9yIHRoZSAnJScgd2lsZGNhcmQKKwkJCQkgKiBhYm92ZS4pCisJCQkJICoKKwkJCQkg KiBOb3RlIHRoYXQgd2UgY2FuJ3QganVzdCB3aW5kIGZvcndhcmQgcCBhbmQgdCBhbmQgY29u dGludWUKKwkJCQkgKiB3aXRoIHRoZSBtYWluIGxvb3AuICBUaGlzIHdvdWxkIGZhaWwgZm9y IGV4YW1wbGUgd2l0aAorCQkJCSAqCisJCQkJICogVSYnXDAwNjFcMDMwOGJjJyBMSUtFIFUm J1wwMEU0X2MnIENPTExBVEUgaWdub3JlX2FjY2VudHMKKwkJCQkgKgorCQkJCSAqIFlvdSdk IGZpbmQgdGhhdCB0PVwwMDYxIG1hdGNoZXMgcD1cMDBFNCwgYnV0IHRoZW4gdGhlIHJlc3QK KwkJCQkgKiB3b24ndCBtYXRjaDsgYnV0IHQ9XDAwNjFcMDMwOCBhbHNvIG1hdGNoZXMgcD1c MDBFNCwgYW5kCisJCQkJICogdGhlbiB0aGUgcmVzdCB3aWxsIG1hdGNoLgorCQkJCSAqLwor CQkJCWlmIChjbXAgPT0gMCkKKwkJCQl7CisJCQkJCWludAkJCW1hdGNoZWQgPSBNYXRjaFRl eHQodDEsIHQxbGVuLCBwMSwgcDFsZW4sIGxvY2FsZSwgbG9jYWxlX2lzX2MpOworCisJCQkJ CWlmIChtYXRjaGVkID09IExJS0VfVFJVRSkKKwkJCQkJeworCQkJCQkJaWYgKGJ1ZikKKwkJ CQkJCQlwZnJlZShidWYpOworCQkJCQkJcmV0dXJuIG1hdGNoZWQ7CisJCQkJCX0KKwkJCQl9 CisKKwkJCQkvKgorCQkJCSAqIERpZG4ndCBtYXRjaC4gIElmIHdlIHVzZWQgdXAgdGhlIHdo b2xlIHRleHQsIHRoZW4gdGhlIG1hdGNoCisJCQkJICogZmFpbHMuICBPdGhlcndpc2UsIHRy eSBhZ2FpbiB3aXRoIGEgbG9uZ2VyIHN1YnN0cmluZy4KKwkJCQkgKi8KKwkJCQlpZiAodDFs ZW4gPT0gMCkKKwkJCQkJcmV0dXJuIExJS0VfRkFMU0U7CisJCQkJZWxzZQorCQkJCQlOZXh0 Q2hhcih0MSwgdDFsZW4pOworCQkJfQorCQkJaWYgKGJ1ZikKKwkJCQlwZnJlZShidWYpOwor CQkJY29udGludWU7CisJCX0KIAkJZWxzZSBpZiAoR0VUQ0hBUigqcCkgIT0gR0VUQ0hBUigq dCkpCiAJCXsKIAkJCS8qIG5vbi13aWxkY2FyZCBwYXR0ZXJuIGNoYXIgZmFpbHMgdG8gbWF0 Y2ggdGV4dCBjaGFyICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbGlr ZV9zdXBwb3J0LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbGlrZV9zdXBwb3J0LmMKaW5k ZXggMjYzNTA1MDg2MWYuLjNjNjkxYTVjYzk1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvbGlrZV9zdXBwb3J0LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xp a2Vfc3VwcG9ydC5jCkBAIC0yNzIsMjIgKzI3Miw2IEBAIG1hdGNoX3BhdHRlcm5fcHJlZml4 KE5vZGUgKmxlZnRvcCwKIAkJcmV0dXJuIE5JTDsKIAlwYXR0ID0gKENvbnN0ICopIHJpZ2h0 b3A7CiAKLQkvKgotCSAqIE5vdCBzdXBwb3J0ZWQgaWYgdGhlIGV4cHJlc3Npb24gY29sbGF0 aW9uIGlzIG5vbmRldGVybWluaXN0aWMuICBUaGUKLQkgKiBvcHRpbWl6ZWQgZXF1YWxpdHkg b3IgcHJlZml4IHRlc3RzIHVzZSBieXRld2lzZSBjb21wYXJpc29ucywgd2hpY2ggaXMKLQkg KiBub3QgY29uc2lzdGVudCB3aXRoIG5vbmRldGVybWluaXN0aWMgY29sbGF0aW9ucy4gIFRo ZSBhY3R1YWwKLQkgKiBwYXR0ZXJuLW1hdGNoaW5nIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9u cyB3aWxsIGxhdGVyIGVycm9yIG91dCB0aGF0Ci0JICogcGF0dGVybi1tYXRjaGluZyBpcyBu b3Qgc3VwcG9ydGVkIHdpdGggbm9uZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25zLiAoV2UKLQkg KiBjb3VsZCBhbHNvIGVycm9yIG91dCBoZXJlLCBidXQgYnkgZG9pbmcgaXQgbGF0ZXIgd2Ug Z2V0IG1vcmUgcHJlY2lzZQotCSAqIGVycm9yIG1lc3NhZ2VzLikgIChJdCBzaG91bGQgYmUg cG9zc2libGUgdG8gc3VwcG9ydCBhdCBsZWFzdAotCSAqIFBhdHRlcm5fUHJlZml4X0V4YWN0 LCBidXQgbm8gcG9pbnQgYXMgbG9uZyBhcyB0aGUgYWN0dWFsCi0JICogcGF0dGVybi1tYXRj aGluZyBpbXBsZW1lbnRhdGlvbnMgZG9uJ3Qgc3VwcG9ydCBpdC4pCi0JICoKLQkgKiBleHBy X2NvbGwgaXMgbm90IHNldCBmb3IgYSBub24tY29sbGF0aW9uLWF3YXJlIGRhdGEgdHlwZSBz dWNoIGFzIGJ5dGVhLgotCSAqLwotCWlmIChleHByX2NvbGwgJiYgIWdldF9jb2xsYXRpb25f aXNkZXRlcm1pbmlzdGljKGV4cHJfY29sbCkpCi0JCXJldHVybiBOSUw7Ci0KIAkvKgogCSAq IFRyeSB0byBleHRyYWN0IGEgZml4ZWQgcHJlZml4IGZyb20gdGhlIHBhdHRlcm4uCiAJICov CkBAIC00MDQsNiArMzg4LDggQEAgbWF0Y2hfcGF0dGVybl9wcmVmaXgoTm9kZSAqbGVmdG9w LAogCXsKIAkJaWYgKCFvcF9pbl9vcGZhbWlseShlcW9wciwgb3BmYW1pbHkpKQogCQkJcmV0 dXJuIE5JTDsKKwkJaWYgKGluZGV4Y29sbGF0aW9uICE9IGV4cHJfY29sbCkKKwkJCXJldHVy biBOSUw7CiAJCWV4cHIgPSBtYWtlX29wY2xhdXNlKGVxb3ByLCBCT09MT0lELCBmYWxzZSwK IAkJCQkJCQkgKEV4cHIgKikgbGVmdG9wLCAoRXhwciAqKSBwcmVmaXgsCiAJCQkJCQkJIElu dmFsaWRPaWQsIGluZGV4Y29sbGF0aW9uKTsKQEAgLTQxMSw2ICszOTcsMTcgQEAgbWF0Y2hf cGF0dGVybl9wcmVmaXgoTm9kZSAqbGVmdG9wLAogCQlyZXR1cm4gcmVzdWx0OwogCX0KIAor CS8qCisJICogQW55dGhpbmcgb3RoZXIgdGhhbiBQYXR0ZXJuX1ByZWZpeF9FeGFjdCBpcyBu b3Qgc3VwcG9ydGVkIGlmIHRoZQorCSAqIGV4cHJlc3Npb24gY29sbGF0aW9uIGlzIG5vbmRl dGVybWluaXN0aWMuICBUaGUgb3B0aW1pemVkIGVxdWFsaXR5IG9yCisJICogcHJlZml4IHRl c3RzIHVzZSBieXRld2lzZSBjb21wYXJpc29ucywgd2hpY2ggaXMgbm90IGNvbnNpc3RlbnQg d2l0aAorCSAqIG5vbmRldGVybWluaXN0aWMgY29sbGF0aW9ucy4KKwkgKgorCSAqIGV4cHJf Y29sbCBpcyBub3Qgc2V0IGZvciBhIG5vbi1jb2xsYXRpb24tYXdhcmUgZGF0YSB0eXBlIHN1 Y2ggYXMgYnl0ZWEuCisJICovCisJaWYgKGV4cHJfY29sbCAmJiAhZ2V0X2NvbGxhdGlvbl9p c2RldGVybWluaXN0aWMoZXhwcl9jb2xsKSkKKwkJcmV0dXJuIE5JTDsKKwogCS8qCiAJICog T3RoZXJ3aXNlLCB3ZSBoYXZlIGEgbm9uZW1wdHkgcmVxdWlyZWQgcHJlZml4IG9mIHRoZSB2 YWx1ZXMuICBTb21lCiAJICogb3BjbGFzc2VzIHN1cHBvcnQgcHJlZml4IGNoZWNrcyBkaXJl Y3RseSwgb3RoZXJ3aXNlIHdlJ2xsIHRyeSB0bwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9jb2xsYXRlLmljdS51dGY4Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvY29sbGF0ZS5pY3UudXRmOC5vdXQKaW5kZXggN2Q1OWZiNDQzMTYuLjBjYjc3 NzQ1MmFiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbGxhdGUu aWN1LnV0Zjgub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29sbGF0ZS5p Y3UudXRmOC5vdXQKQEAgLTEyNzIsNiArMTI3MiwzMCBAQCBDUkVBVEUgQ09MTEFUSU9OIGN0 ZXN0X2RldCAocHJvdmlkZXIgPSBpY3UsIGxvY2FsZSA9ICcnLCBkZXRlcm1pbmlzdGljID0g dHJ1ZSk7CiBOT1RJQ0U6ICB1c2luZyBzdGFuZGFyZCBmb3JtICJ1bmQiIGZvciBJQ1UgbG9j YWxlICIiCiBDUkVBVEUgQ09MTEFUSU9OIGN0ZXN0X25vbmRldCAocHJvdmlkZXIgPSBpY3Us IGxvY2FsZSA9ICcnLCBkZXRlcm1pbmlzdGljID0gZmFsc2UpOwogTk9USUNFOiAgdXNpbmcg c3RhbmRhcmQgZm9ybSAidW5kIiBmb3IgSUNVIGxvY2FsZSAiIgorU0VMRUNUICdhYmMnIExJ S0UgJ2FiYycgQ09MTEFURSBjdGVzdF9kZXQ7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisg dAorKDEgcm93KQorCitTRUxFQ1QgJ2FiYycgTElLRSAnYVxiYycgQ09MTEFURSBjdGVzdF9k ZXQ7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgJ2Fi YycgTElLRSAnYWJjJyBDT0xMQVRFIGN0ZXN0X25vbmRldDsKKyA/Y29sdW1uPyAKKy0tLS0t LS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCAnYWJjJyBMSUtFICdhXGJjJyBDT0xMQVRF IGN0ZXN0X25vbmRldDsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisK IENSRUFURSBUQUJMRSB0ZXN0NiAoYSBpbnQsIGIgdGV4dCk7CiAtLSBzYW1lIHN0cmluZyBp biBkaWZmZXJlbnQgbm9ybWFsIGZvcm1zCiBJTlNFUlQgSU5UTyB0ZXN0NiBWQUxVRVMgKDEs IFUmJ1wwMEU0YmMnKTsKQEAgLTEyOTYsNiArMTMyMCwxOSBAQCBTRUxFQ1QgKiBGUk9NIHRl c3Q2IFdIRVJFIGIgPSAnw6RiYycgQ09MTEFURSBjdGVzdF9ub25kZXQ7CiAgMiB8IGHMiGJj CiAoMiByb3dzKQogCitTRUxFQ1QgKiBGUk9NIHRlc3Q2IFdIRVJFIGIgTElLRSAnw6RiYycg Q09MTEFURSBjdGVzdF9kZXQ7CisgYSB8ICBiICAKKy0tLSstLS0tLQorIDEgfCDDpGJjCiso MSByb3cpCisKK1NFTEVDVCAqIEZST00gdGVzdDYgV0hFUkUgYiBMSUtFICfDpGJjJyBDT0xM QVRFIGN0ZXN0X25vbmRldDsKKyBhIHwgIGIgIAorLS0tKy0tLS0tCisgMSB8IMOkYmMKKyAy IHwgYcyIYmMKKygyIHJvd3MpCisKIC0tIHNhbWUgd2l0aCBhcnJheXMKIENSRUFURSBUQUJM RSB0ZXN0NmEgKGEgaW50LCBiIHRleHRbXSk7CiBJTlNFUlQgSU5UTyB0ZXN0NmEgVkFMVUVT ICgxLCBBUlJBWVtVJidcMDBFNGJjJ10pOwpAQCAtMTUxMiw3ICsxNTQ5LDEyIEBAIFNFTEVD VCB4IEZST00gdGVzdDNjaSBXSEVSRSB4IDw+ICdhYmMnOwogKDIgcm93cykKIAogU0VMRUNU IHggRlJPTSB0ZXN0M2NpIFdIRVJFIHggTElLRSAnYSUnOwotRVJST1I6ICBub25kZXRlcm1p bmlzdGljIGNvbGxhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIExJS0UKKyAgeCAgCist LS0tLQorIGFiYworIEFCQworKDIgcm93cykKKwogU0VMRUNUIHggRlJPTSB0ZXN0M2NpIFdI RVJFIHggSUxJS0UgJ2ElJzsKIEVSUk9SOiAgbm9uZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25z IGFyZSBub3Qgc3VwcG9ydGVkIGZvciBJTElLRQogU0VMRUNUIHggRlJPTSB0ZXN0M2NpIFdI RVJFIHggU0lNSUxBUiBUTyAnYSUnOwpAQCAtMTYzMCw3ICsxNjcyLDEyIEBAIFNFTEVDVCB4 IEZST00gdGVzdDNicGNpIFdIRVJFIHggPD4gJ2FiYyc7CiAoMiByb3dzKQogCiBTRUxFQ1Qg eCBGUk9NIHRlc3QzYnBjaSBXSEVSRSB4IExJS0UgJ2ElJzsKLUVSUk9SOiAgbm9uZGV0ZXJt aW5pc3RpYyBjb2xsYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBMSUtFCisgIHggIAor LS0tLS0KKyBhYmMKKyBBQkMKKygyIHJvd3MpCisKIFNFTEVDVCB4IEZST00gdGVzdDNicGNp IFdIRVJFIHggSUxJS0UgJ2ElJzsKIEVSUk9SOiAgbm9uZGV0ZXJtaW5pc3RpYyBjb2xsYXRp b25zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBJTElLRQogU0VMRUNUIHggRlJPTSB0ZXN0M2Jw Y2kgV0hFUkUgeCBTSU1JTEFSIFRPICdhJSc7CkBAIC0xNzI3LDcgKzE3NzQsNyBAQCBTRUxF Q1Qgc3RyaW5nX3RvX2FycmF5KCdBQkNERUZHSEknOjpjaGFyKDkpIENPTExBVEUgY2FzZV9p bnNlbnNpdGl2ZSwgTlVMTCwgJ2InKQogLS0gVGhpcyB0ZXN0cyB0aGUgaXNzdWUgZGVzY3Jp YmVkIGluIG1hdGNoX3BhdHRlcm5fcHJlZml4KCkuICBJbiB0aGUKIC0tIGFic2VuY2Ugb2Yg dGhhdCBjaGVjaywgdGhlIGNhc2VfaW5zZW5zaXRpdmUgdGVzdHMgYmVsb3cgd291bGQKIC0t IHJldHVybiBubyByb3dzIHdoZXJlIHRoZXkgc2hvdWxkIGxvZ2ljYWxseSByZXR1cm4gb25l LgotQ1JFQVRFIFRBQkxFIHRlc3Q0YyAoeCB0ZXh0IENPTExBVEUgIkMiKTsKK0NSRUFURSBU QUJMRSB0ZXN0NGMgKHggdGV4dCBDT0xMQVRFIGNhc2VfaW5zZW5zaXRpdmUpOwogSU5TRVJU IElOVE8gdGVzdDRjIFZBTFVFUyAoJ2FiYycpOwogQ1JFQVRFIElOREVYIE9OIHRlc3Q0YyAo eCk7CiBTRVQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7CkBAIC0xNzQxLDEwICsxNzg4LDE4IEBA IFNFTEVDVCB4IEZST00gdGVzdDRjIFdIRVJFIHggTElLRSAnQUJDJScgQ09MTEFURSBjYXNl X3NlbnNpdGl2ZTsgIC0tIG9rLCBubyByb3dzCiAtLS0KICgwIHJvd3MpCiAKLVNFTEVDVCB4 IEZST00gdGVzdDRjIFdIRVJFIHggTElLRSAnQUJDJyBDT0xMQVRFIGNhc2VfaW5zZW5zaXRp dmU7ICAtLSBlcnJvcgotRVJST1I6ICBub25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbnMgYXJl IG5vdCBzdXBwb3J0ZWQgZm9yIExJS0UKLVNFTEVDVCB4IEZST00gdGVzdDRjIFdIRVJFIHgg TElLRSAnQUJDJScgQ09MTEFURSBjYXNlX2luc2Vuc2l0aXZlOyAgLS0gZXJyb3IKLUVSUk9S OiAgbm9uZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBM SUtFCitTRUxFQ1QgeCBGUk9NIHRlc3Q0YyBXSEVSRSB4IExJS0UgJ0FCQycgQ09MTEFURSBj YXNlX2luc2Vuc2l0aXZlOyAgLS0gb2sKKyAgeCAgCistLS0tLQorIGFiYworKDEgcm93KQor CitTRUxFQ1QgeCBGUk9NIHRlc3Q0YyBXSEVSRSB4IExJS0UgJ0FCQyUnIENPTExBVEUgY2Fz ZV9pbnNlbnNpdGl2ZTsgIC0tIG9rCisgIHggIAorLS0tLS0KKyBhYmMKKygxIHJvdykKKwog UkVTRVQgZW5hYmxlX3NlcXNjYW47CiAtLSBVbmljb2RlIHNwZWNpYWwgY2FzZTogZGlmZmVy ZW50IHZhcmlhbnRzIG9mIEdyZWVrIGxvd2VyIGNhc2Ugc2lnbWEuCiAtLSBBIG5haXZlIGlt cGxlbWVudGF0aW9uIGxpa2UgY2l0ZXh0IHRoYXQganVzdCBkb2VzIGxvd2VyKHgpID0KQEAg LTE4MzgsNiArMTg5MywxMjMgQEAgU0VMRUNUICogRlJPTSB0ZXN0NCBXSEVSRSBiID0gJ0Nv dGUnIENPTExBVEUgY2FzZV9pbnNlbnNpdGl2ZTsKICAxIHwgY290ZQogKDEgcm93KQogCist LSBUaGlzIGlzIGEgdHJpY2t5IG9uZS4gIEEgbmFpdmUgaW1wbGVtZW50YXRpb24gd291bGQg Zmlyc3QgdGVzdAorLS0gXDAwRTQgbWF0Y2hlcyBcMDA2MSwgd2hpY2ggaXMgdHJ1ZSB1bmRl ciBpZ25vcmVfYWNjZW50cywgYnV0IHRoZW4KKy0tIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcg d29uJ3QgbWF0Y2ggYW55bW9yZS4gIFRoZXJlZm9yZSwgdGhlCistLSBhbGdvcml0aG0gaGFz IHRvIHRlc3Qgd2hldGhlciB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIG1hdGNoZXMsIGFuZAor LS0gaWYgbm90IHRyeSBtYXRjaGluZyBcMDBFNCBhZ2FpbnN0IGEgbG9uZ2VyIHN1YnN0cmlu ZyBsaWtlCistLSBcMDA2MVwwMzA4LCB3aGljaCB3aWxsIHRoZW4gd29yayBvdXQuCitTRUxF Q1QgVSYnXDAwNjFcMDMwOGJjJyBMSUtFIFUmJ1wwMEU0X2MnIENPTExBVEUgaWdub3JlX2Fj Y2VudHM7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgdAorKDEgcm93KQorCistLSBhbmQg aW4gcmV2ZXJzZToKK1NFTEVDVCBVJidcMDBFNGJjJyBMSUtFIFUmJ1wwMDYxXDAzMDhfYycg Q09MTEFURSBpZ25vcmVfYWNjZW50czsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyB0Ciso MSByb3cpCisKKy0tIGlubmVyICUgbWF0Y2hlcyBiOgorU0VMRUNUIFUmJ1wwMDYxXDAzMDhi YycgTElLRSBVJidcMDBFNCVjJyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworID9jb2x1bW4/ IAorLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gaW5uZXIgJSUgbWF0Y2hlcyBiIHRo ZW4gemVybzoKK1NFTEVDVCBVJidcMDA2MVwwMzA4YmMnIExJS0UgVSYnXDAwRTQlJWMnIENP TExBVEUgaWdub3JlX2FjY2VudHM7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgdAorKDEg cm93KQorCistLSBpbm5lciAlJSBtYXRjaGVzIGIgdGhlbiB6ZXJvOgorU0VMRUNUIFUmJ2Ni XDAwNjFcMDMwOCcgTElLRSBVJidjJSVcMDBFNCcgQ09MTEFURSBpZ25vcmVfYWNjZW50czsK KyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKKy0tIHRyYWlsaW5nIF8g bWF0Y2hlcyB0d28gY29kZXBvaW50cyB0aGF0IGZvcm0gb25lIGdyYXBoZW1lOgorU0VMRUNU IFUmJ2NiXDAwNjFcMDMwOCcgTElLRSBVJidjYl8nIENPTExBVEUgaWdub3JlX2FjY2VudHM7 CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgZgorKDEgcm93KQorCistLSB0cmFpbGluZyBf XyBtYXRjaGVzIHR3byBjb2RlcG9pbnRzIHRoYXQgZm9ybSBvbmUgZ3JhcGhlbWU6CitTRUxF Q1QgVSYnY2JcMDA2MVwwMzA4JyBMSUtFIFUmJ2NiX18nIENPTExBVEUgaWdub3JlX2FjY2Vu dHM7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgdAorKDEgcm93KQorCistLSBsZWFkaW5n ICUgbWF0Y2hlcyB6ZXJvOgorU0VMRUNUIFUmJ1wwMDYxXDAzMDhiYycgTElLRSBVJiclXDAw RTRiYycgQ09MTEFURSBpZ25vcmVfYWNjZW50czsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0K KyB0CisoMSByb3cpCisKKy0tIGxlYWRpbmcgJSBtYXRjaGVzIHplcm8gKHdpdGggbGF0ZXIg JSk6CitTRUxFQ1QgVSYnXDAwNjFcMDMwOGJjJyBMSUtFIFUmJyVcMDBFNCVjJyBDT0xMQVRF IGlnbm9yZV9hY2NlbnRzOworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIHQKKygxIHJvdykK KworLS0gdHJhaWxpbmcgJSBtYXRjaGVzIHplcm86CitTRUxFQ1QgVSYnXDAwNjFcMDMwOGJj JyBMSUtFIFUmJ1wwMEU0YmMlJyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworID9jb2x1bW4/ IAorLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gdHJhaWxpbmcgJSBtYXRjaGVzIHpl cm8gKHdpdGggcHJldmlvdXMgJSk6CitTRUxFQ1QgVSYnXDAwNjFcMDMwOGJjJyBMSUtFIFUm J1wwMEU0JWMlJyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworID9jb2x1bW4/IAorLS0tLS0t LS0tLQorIHQKKygxIHJvdykKKworLS0gXyB2ZXJzdXMgdHdvIGNvZGVwb2ludHMgdGhhdCBm b3JtIG9uZSBncmFwaGVtZToKK1NFTEVDVCBVJidcMDA2MVwwMzA4YmMnIExJS0UgVSYnX2Jj JyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIHQK KygxIHJvdykKKworLS0gKGFjdHVhbGx5IHRoaXMgbWF0Y2hlcyBiZWNhdXNlKQorU0VMRUNU IFUmJ1wwMzA4YmMnID0gJ2JjJyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworID9jb2x1bW4/ IAorLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gX18gbWF0Y2hlcyB0d28gY29kZXBv aW50cyB0aGF0IGZvcm0gb25lIGdyYXBoZW1lOgorU0VMRUNUIFUmJ1wwMDYxXDAzMDhiYycg TElLRSBVJidfX2JjJyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworID9jb2x1bW4/IAorLS0t LS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gXyBtYXRjaGVzIG9uZSBjb2RlcG9pbnQgdGhh dCBmb3JtcyBoYWxmIGEgZ3JhcGhlbWU6CitTRUxFQ1QgVSYnXDAwNjFcMDMwOGJjJyBMSUtF IFUmJ19cMDMwOGJjJyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworID9jb2x1bW4/IAorLS0t LS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gZG9lc24ndCBtYXRjaCBiZWNhdXNlIFwwMGU0 IGRvZXNuJ3QgbWF0Y2ggb25seSBcMDMwOAorU0VMRUNUIFUmJ1wwMDYxXDAzMDhiYycgTElL RSBVJidfXDAwZTRiYycgQ09MTEFURSBpZ25vcmVfYWNjZW50czsKKyA/Y29sdW1uPyAKKy0t LS0tLS0tLS0KKyBmCisoMSByb3cpCisKIC0tIGZvcmVpZ24ga2V5cyAoc2hvdWxkIHVzZSBj b2xsYXRpb24gb2YgcHJpbWFyeSBrZXkpCiAtLSBQSyBpcyBjYXNlLXNlbnNpdGl2ZSwgRksg aXMgY2FzZS1pbnNlbnNpdGl2ZQogQ1JFQVRFIFRBQkxFIHRlc3QxMHBrICh4IHRleHQgQ09M TEFURSBjYXNlX3NlbnNpdGl2ZSBQUklNQVJZIEtFWSk7CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9jb2xsYXRlLmljdS51dGY4LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2NvbGxhdGUuaWN1LnV0Zjguc3FsCmluZGV4IDgwZjI4YTk3ZDc4Li5lMDhkMTQzMjk0 MSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29sbGF0ZS5pY3UudXRmOC5z cWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29sbGF0ZS5pY3UudXRmOC5zcWwKQEAg LTUxNCw2ICs1MTQsMTIgQEAgQ1JFQVRFIENPTExBVElPTiB0ZXN0Y29sbF9ydWxlc3ggKHBy b3ZpZGVyID0gaWN1LCBsb2NhbGUgPSAnJywgcnVsZXMgPSAnISF3cm9uZyEKIENSRUFURSBD T0xMQVRJT04gY3Rlc3RfZGV0IChwcm92aWRlciA9IGljdSwgbG9jYWxlID0gJycsIGRldGVy bWluaXN0aWMgPSB0cnVlKTsKIENSRUFURSBDT0xMQVRJT04gY3Rlc3Rfbm9uZGV0IChwcm92 aWRlciA9IGljdSwgbG9jYWxlID0gJycsIGRldGVybWluaXN0aWMgPSBmYWxzZSk7CiAKK1NF TEVDVCAnYWJjJyBMSUtFICdhYmMnIENPTExBVEUgY3Rlc3RfZGV0OworU0VMRUNUICdhYmMn IExJS0UgJ2FcYmMnIENPTExBVEUgY3Rlc3RfZGV0OworCitTRUxFQ1QgJ2FiYycgTElLRSAn YWJjJyBDT0xMQVRFIGN0ZXN0X25vbmRldDsKK1NFTEVDVCAnYWJjJyBMSUtFICdhXGJjJyBD T0xMQVRFIGN0ZXN0X25vbmRldDsKKwogQ1JFQVRFIFRBQkxFIHRlc3Q2IChhIGludCwgYiB0 ZXh0KTsKIC0tIHNhbWUgc3RyaW5nIGluIGRpZmZlcmVudCBub3JtYWwgZm9ybXMKIElOU0VS VCBJTlRPIHRlc3Q2IFZBTFVFUyAoMSwgVSYnXDAwRTRiYycpOwpAQCAtNTIyLDYgKzUyOCw5 IEBAIENSRUFURSBUQUJMRSB0ZXN0NiAoYSBpbnQsIGIgdGV4dCk7CiBTRUxFQ1QgKiBGUk9N IHRlc3Q2IFdIRVJFIGIgPSAnw6RiYycgQ09MTEFURSBjdGVzdF9kZXQ7CiBTRUxFQ1QgKiBG Uk9NIHRlc3Q2IFdIRVJFIGIgPSAnw6RiYycgQ09MTEFURSBjdGVzdF9ub25kZXQ7CiAKK1NF TEVDVCAqIEZST00gdGVzdDYgV0hFUkUgYiBMSUtFICfDpGJjJyBDT0xMQVRFIGN0ZXN0X2Rl dDsKK1NFTEVDVCAqIEZST00gdGVzdDYgV0hFUkUgYiBMSUtFICfDpGJjJyBDT0xMQVRFIGN0 ZXN0X25vbmRldDsKKwogLS0gc2FtZSB3aXRoIGFycmF5cwogQ1JFQVRFIFRBQkxFIHRlc3Q2 YSAoYSBpbnQsIGIgdGV4dFtdKTsKIElOU0VSVCBJTlRPIHRlc3Q2YSBWQUxVRVMgKDEsIEFS UkFZW1UmJ1wwMEU0YmMnXSk7CkBAIC02MzcsMTQgKzY0NiwxNCBAQCBDUkVBVEUgVU5JUVVF IElOREVYIE9OIHRlc3QzYnBjaSAoeCk7ICAtLSBlcnJvcgogLS0gVGhpcyB0ZXN0cyB0aGUg aXNzdWUgZGVzY3JpYmVkIGluIG1hdGNoX3BhdHRlcm5fcHJlZml4KCkuICBJbiB0aGUKIC0t IGFic2VuY2Ugb2YgdGhhdCBjaGVjaywgdGhlIGNhc2VfaW5zZW5zaXRpdmUgdGVzdHMgYmVs b3cgd291bGQKIC0tIHJldHVybiBubyByb3dzIHdoZXJlIHRoZXkgc2hvdWxkIGxvZ2ljYWxs eSByZXR1cm4gb25lLgotQ1JFQVRFIFRBQkxFIHRlc3Q0YyAoeCB0ZXh0IENPTExBVEUgIkMi KTsKK0NSRUFURSBUQUJMRSB0ZXN0NGMgKHggdGV4dCBDT0xMQVRFIGNhc2VfaW5zZW5zaXRp dmUpOwogSU5TRVJUIElOVE8gdGVzdDRjIFZBTFVFUyAoJ2FiYycpOwogQ1JFQVRFIElOREVY IE9OIHRlc3Q0YyAoeCk7CiBTRVQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7CiBTRUxFQ1QgeCBG Uk9NIHRlc3Q0YyBXSEVSRSB4IExJS0UgJ0FCQycgQ09MTEFURSBjYXNlX3NlbnNpdGl2ZTsg IC0tIG9rLCBubyByb3dzCiBTRUxFQ1QgeCBGUk9NIHRlc3Q0YyBXSEVSRSB4IExJS0UgJ0FC QyUnIENPTExBVEUgY2FzZV9zZW5zaXRpdmU7ICAtLSBvaywgbm8gcm93cwotU0VMRUNUIHgg RlJPTSB0ZXN0NGMgV0hFUkUgeCBMSUtFICdBQkMnIENPTExBVEUgY2FzZV9pbnNlbnNpdGl2 ZTsgIC0tIGVycm9yCi1TRUxFQ1QgeCBGUk9NIHRlc3Q0YyBXSEVSRSB4IExJS0UgJ0FCQyUn IENPTExBVEUgY2FzZV9pbnNlbnNpdGl2ZTsgIC0tIGVycm9yCitTRUxFQ1QgeCBGUk9NIHRl c3Q0YyBXSEVSRSB4IExJS0UgJ0FCQycgQ09MTEFURSBjYXNlX2luc2Vuc2l0aXZlOyAgLS0g b2sKK1NFTEVDVCB4IEZST00gdGVzdDRjIFdIRVJFIHggTElLRSAnQUJDJScgQ09MTEFURSBj YXNlX2luc2Vuc2l0aXZlOyAgLS0gb2sKIFJFU0VUIGVuYWJsZV9zZXFzY2FuOwogCiAtLSBV bmljb2RlIHNwZWNpYWwgY2FzZTogZGlmZmVyZW50IHZhcmlhbnRzIG9mIEdyZWVrIGxvd2Vy IGNhc2Ugc2lnbWEuCkBAIC02ODcsNiArNjk2LDQ0IEBAIENSRUFURSBUQUJMRSB0ZXN0NCAo YSBpbnQsIGIgdGV4dCk7CiBTRUxFQ1QgKiBGUk9NIHRlc3Q0IFdIRVJFIGIgPSAnQ290ZScg Q09MTEFURSBpZ25vcmVfYWNjZW50czsgIC0tIHN0aWxsIGNhc2Utc2Vuc2l0aXZlCiBTRUxF Q1QgKiBGUk9NIHRlc3Q0IFdIRVJFIGIgPSAnQ290ZScgQ09MTEFURSBjYXNlX2luc2Vuc2l0 aXZlOwogCistLSBUaGlzIGlzIGEgdHJpY2t5IG9uZS4gIEEgbmFpdmUgaW1wbGVtZW50YXRp b24gd291bGQgZmlyc3QgdGVzdAorLS0gXDAwRTQgbWF0Y2hlcyBcMDA2MSwgd2hpY2ggaXMg dHJ1ZSB1bmRlciBpZ25vcmVfYWNjZW50cywgYnV0IHRoZW4KKy0tIHRoZSByZXN0IG9mIHRo ZSBzdHJpbmcgd29uJ3QgbWF0Y2ggYW55bW9yZS4gIFRoZXJlZm9yZSwgdGhlCistLSBhbGdv cml0aG0gaGFzIHRvIHRlc3Qgd2hldGhlciB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIG1hdGNo ZXMsIGFuZAorLS0gaWYgbm90IHRyeSBtYXRjaGluZyBcMDBFNCBhZ2FpbnN0IGEgbG9uZ2Vy IHN1YnN0cmluZyBsaWtlCistLSBcMDA2MVwwMzA4LCB3aGljaCB3aWxsIHRoZW4gd29yayBv dXQuCitTRUxFQ1QgVSYnXDAwNjFcMDMwOGJjJyBMSUtFIFUmJ1wwMEU0X2MnIENPTExBVEUg aWdub3JlX2FjY2VudHM7CistLSBhbmQgaW4gcmV2ZXJzZToKK1NFTEVDVCBVJidcMDBFNGJj JyBMSUtFIFUmJ1wwMDYxXDAzMDhfYycgQ09MTEFURSBpZ25vcmVfYWNjZW50czsKKy0tIGlu bmVyICUgbWF0Y2hlcyBiOgorU0VMRUNUIFUmJ1wwMDYxXDAzMDhiYycgTElLRSBVJidcMDBF NCVjJyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworLS0gaW5uZXIgJSUgbWF0Y2hlcyBiIHRo ZW4gemVybzoKK1NFTEVDVCBVJidcMDA2MVwwMzA4YmMnIExJS0UgVSYnXDAwRTQlJWMnIENP TExBVEUgaWdub3JlX2FjY2VudHM7CistLSBpbm5lciAlJSBtYXRjaGVzIGIgdGhlbiB6ZXJv OgorU0VMRUNUIFUmJ2NiXDAwNjFcMDMwOCcgTElLRSBVJidjJSVcMDBFNCcgQ09MTEFURSBp Z25vcmVfYWNjZW50czsKKy0tIHRyYWlsaW5nIF8gbWF0Y2hlcyB0d28gY29kZXBvaW50cyB0 aGF0IGZvcm0gb25lIGdyYXBoZW1lOgorU0VMRUNUIFUmJ2NiXDAwNjFcMDMwOCcgTElLRSBV JidjYl8nIENPTExBVEUgaWdub3JlX2FjY2VudHM7CistLSB0cmFpbGluZyBfXyBtYXRjaGVz IHR3byBjb2RlcG9pbnRzIHRoYXQgZm9ybSBvbmUgZ3JhcGhlbWU6CitTRUxFQ1QgVSYnY2Jc MDA2MVwwMzA4JyBMSUtFIFUmJ2NiX18nIENPTExBVEUgaWdub3JlX2FjY2VudHM7CistLSBs ZWFkaW5nICUgbWF0Y2hlcyB6ZXJvOgorU0VMRUNUIFUmJ1wwMDYxXDAzMDhiYycgTElLRSBV JiclXDAwRTRiYycgQ09MTEFURSBpZ25vcmVfYWNjZW50czsKKy0tIGxlYWRpbmcgJSBtYXRj aGVzIHplcm8gKHdpdGggbGF0ZXIgJSk6CitTRUxFQ1QgVSYnXDAwNjFcMDMwOGJjJyBMSUtF IFUmJyVcMDBFNCVjJyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworLS0gdHJhaWxpbmcgJSBt YXRjaGVzIHplcm86CitTRUxFQ1QgVSYnXDAwNjFcMDMwOGJjJyBMSUtFIFUmJ1wwMEU0YmMl JyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworLS0gdHJhaWxpbmcgJSBtYXRjaGVzIHplcm8g KHdpdGggcHJldmlvdXMgJSk6CitTRUxFQ1QgVSYnXDAwNjFcMDMwOGJjJyBMSUtFIFUmJ1ww MEU0JWMlJyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworLS0gXyB2ZXJzdXMgdHdvIGNvZGVw b2ludHMgdGhhdCBmb3JtIG9uZSBncmFwaGVtZToKK1NFTEVDVCBVJidcMDA2MVwwMzA4YmMn IExJS0UgVSYnX2JjJyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworLS0gKGFjdHVhbGx5IHRo aXMgbWF0Y2hlcyBiZWNhdXNlKQorU0VMRUNUIFUmJ1wwMzA4YmMnID0gJ2JjJyBDT0xMQVRF IGlnbm9yZV9hY2NlbnRzOworLS0gX18gbWF0Y2hlcyB0d28gY29kZXBvaW50cyB0aGF0IGZv cm0gb25lIGdyYXBoZW1lOgorU0VMRUNUIFUmJ1wwMDYxXDAzMDhiYycgTElLRSBVJidfX2Jj JyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworLS0gXyBtYXRjaGVzIG9uZSBjb2RlcG9pbnQg dGhhdCBmb3JtcyBoYWxmIGEgZ3JhcGhlbWU6CitTRUxFQ1QgVSYnXDAwNjFcMDMwOGJjJyBM SUtFIFUmJ19cMDMwOGJjJyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworLS0gZG9lc24ndCBt YXRjaCBiZWNhdXNlIFwwMGU0IGRvZXNuJ3QgbWF0Y2ggb25seSBcMDMwOAorU0VMRUNUIFUm J1wwMDYxXDAzMDhiYycgTElLRSBVJidfXDAwZTRiYycgQ09MTEFURSBpZ25vcmVfYWNjZW50 czsKKwogLS0gZm9yZWlnbiBrZXlzIChzaG91bGQgdXNlIGNvbGxhdGlvbiBvZiBwcmltYXJ5 IGtleSkKIAogLS0gUEsgaXMgY2FzZS1zZW5zaXRpdmUsIEZLIGlzIGNhc2UtaW5zZW5zaXRp dmUKCmJhc2UtY29tbWl0OiBmODIyYmUzOTYyOWNkMjRhOGFkMWY4ZjZhYTQ0NGUwYzlhZTFl YWFkCi0tIAoyLjQ1LjIKCg== --------------TwlRYwTymzqqtCo0zfwWvbAJ--