Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vdsTe-0064De-16 for pgsql-hackers@arkaria.postgresql.org; Thu, 08 Jan 2026 16:03:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vdsTc-002uNq-1l for pgsql-hackers@arkaria.postgresql.org; Thu, 08 Jan 2026 16:03:09 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vdsTb-002uNS-1s for pgsql-hackers@lists.postgresql.org; Thu, 08 Jan 2026 16:03:09 +0000 Received: from fhigh-a1-smtp.messagingengine.com ([103.168.172.152]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vdsTZ-004uYx-38 for pgsql-hackers@lists.postgresql.org; Thu, 08 Jan 2026 16:03:07 +0000 Received: from phl-compute-12.internal (phl-compute-12.internal [10.202.2.52]) by mailfhigh.phl.internal (Postfix) with ESMTP id E7E1314000CB; Thu, 8 Jan 2026 11:03:04 -0500 (EST) Received: from phl-frontend-03 ([10.202.2.162]) by phl-compute-12.internal (MEProxy); Thu, 08 Jan 2026 11:03:04 -0500 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=fm1; t=1767888184; x= 1767974584; bh=ybeYpr1fhag5kk0DWg4BLSkKo97BQWrlTR0BpD+yYC0=; b=k nvgG05F1puHij3RXTSbaqObI4gFs+l8rreOcG83PlTtFm5BWSR7MXKg6/q9ZoZrc VZwFtA0BSp0Gkz7Z2GRj/OcPlocrM2m+sutP55fVIedIZkBZwxDARy05dHI6lGKV P+ryZF2lpvYhH3ELnj88KMLXX5RUrV2CSJTThWRL1gIDiOQk+ummLO6/7Yx+TDjV TDu4964bZs/WEy9HqJxCqZUMFgjREuIb+fEb5yy2Im/lDV44Tk2MfWZ/A670f4O1 AyYdDbuwplN490KcqK3h66LSEo8kvZCF2QkPGx6g6y4uKTMces1lkahta0MnMb0u +4vZIqn+YgnrLmoIWIy5w== 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-sender:x-me-sender:x-sasl-enc; s=fm2; t= 1767888184; x=1767974584; bh=ybeYpr1fhag5kk0DWg4BLSkKo97BQWrlTR0 BpD+yYC0=; b=OYQ5lwvQxEYWRVJYb8adCS3jy3uKiqPOwocG+/2eNVQ6Kx5I+SH FL97/0kiyv14y0oRJSLaC/l5ulnUGVDTeqBWNktqNEWytveZ6hBZ3c3eL4OZXSlh m+Hf6nmwFZLZ6y9Xje3BJrF5H+5q1a6QG/WQtqeunGZD+dsI29RlPo1nHb1486Ug VcESA0ZfJhNsSDUGCT2bHPeS5BVaDTDqHb+NH1ypzLDq2QVpGz2t3omqzTmh1GXY F0nZClZp4qCdLQZHXPlozJgIEi8NKwCDvjswF82r4N8ghXwj1GmwXENKUJsm6hkc RzLCbanTVY9Y1F+A/dvNe2iFA5feh/1Ei7Q== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefgedrtddtgddutdeifeejucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujf gurheptgfkffggfgfuvfevfhfhjgesmhdtreertddvjeenucfhrhhomheprfgvthgvrhcu gfhishgvnhhtrhgruhhtuceophgvthgvrhesvghishgvnhhtrhgruhhtrdhorhhgqeenuc ggtffrrghtthgvrhhnpeektdeutdfhvdfhveeigfffteegvdejvdfhhfevfeevgfdtgfel geehieevhffgieenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfh hrohhmpehpvghtvghrsegvihhsvghnthhrrghuthdrohhrghdpnhgspghrtghpthhtohep fedpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepphhjsehilhhluhhmihhnrghtvg gutghomhhpuhhtihhnghdrtghomhdprhgtphhtthhopehlihdrvghvrghnrdgthhgrohes ghhmrghilhdrtghomhdprhgtphhtthhopehpghhsqhhlqdhhrggtkhgvrhhssehlihhsth hsrdhpohhsthhgrhgvshhqlhdrohhrgh X-ME-Proxy: Feedback-ID: ie0a040ee:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu, 8 Jan 2026 11:03:04 -0500 (EST) Content-Type: multipart/mixed; boundary="------------v1iuUpXTyf1o1307Cky5EQtw" Message-ID: <7d63ddfa-c735-4dfe-8c7a-4f1e2a621058@eisentraut.org> Date: Thu, 8 Jan 2026 17:03:02 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: SQL:2011 Application Time Update & Delete To: Paul A Jungwirth Cc: Chao Li , PostgreSQL Hackers References: <2f5364f3-a1d3-4410-98f3-d788b11e6525@eisentraut.org> <1ace7bc1-9dd4-42c9-a473-517cef37cce9@eisentraut.org> <6F8D7105-BD1C-432D-84F3-BC688C0C8EDC@gmail.com> <9B820A52-D2F6-465D-B258-6FE8EBA59FAE@gmail.com> <53a13f97-340f-4d04-9dcc-77ca3ffb6a6a@eisentraut.org> <85ac7f0e-d95f-4377-ade0-8941fd328012@eisentraut.org> 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. --------------v1iuUpXTyf1o1307Cky5EQtw Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 06.12.25 01:42, Paul A Jungwirth wrote: >> transformForPortionOfClause(): >> >> Using get_typname_and_namespace() to get the name of a range type and >> then using that to construct a function call of the same name is >> fragile. >> >> Also, it leads to unexpected error messages when the types don't >> match: >> >> DELETE FROM for_portion_of_test >> FOR PORTION OF valid_at FROM 1 TO 2; >> ERROR: function pg_catalog.daterange(integer, integer) does not exist >> >> Well, you cover that in the tests, but I don't think it's right. >> >> There should be a way to go into the catalogs and get the correct >> range constructor function for a range type using only OID references. >> Then you can build a FuncExpr node directly and don't need to go the >> detour of building a fake FuncCall node to transform. (You'd still >> need to transform the arguments separately in that case.) > I added a function, get_range_constructor2, which I call to build a > FuncExpr now. I got rid of get_typname_and_namespace. That said, > looking up the constructor is tricky, because there isn't a direct oid > lookup you can make. The rule is that it has the same name as the > rangetype, with two args both matching the subtype. At least the rule > is encapsulated now. And I think this function will be useful for the > PERIODs patch, which needs similar don't-parse-your-own-node-trees > work. How about an alternative approach: We record the required constructor functions in the pg_range catalog, and then just look them up from there. I have put together a quick patch for this, see attached. Maybe we don't need to record all of them. In particular, some of the multirange constructor functions seem to only exist to serve as cast functions. Do you foresee down the road needing to look up any other ones starting from the range type? --------------v1iuUpXTyf1o1307Cky5EQtw Content-Type: text/plain; charset=UTF-8; name="0001-Record-range-constructor-functions-in-pg_range.patch" Content-Disposition: attachment; filename*0="0001-Record-range-constructor-functions-in-pg_range.patch" Content-Transfer-Encoding: base64 RnJvbSA4YzI2ODRlZTE5N2M4ODJiZjAzNWU1MTYzYzNiZTc3N2NkNjMyODBjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogVGh1LCA4IEphbiAyMDI2IDE1OjU2OjEyICswMTAwClN1YmplY3Q6 IFtQQVRDSF0gUmVjb3JkIHJhbmdlIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyBpbiBwZ19yYW5n ZQoKLS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX3JhbmdlLmMgICAgICAgICAgICB8ICA5 ICsrKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3R5cGVjbWRzLmMgICAgICAgICAgIHwgMzIg KysrKysrKysrLS0tLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19yYW5nZS5kYXQgICAgICAg ICAgfCAxMiArKysrKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19yYW5nZS5oICAgICAgICAg ICAgfCAxMyArKysrKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2lkam9pbnMub3V0 ICAgIHwgIDUgKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdHlwZV9zYW5pdHkub3V0 IHwgNTYgKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3R5 cGVfc2FuaXR5LnNxbCAgICAgIHwgNDQgKysrKysrKysrKysrKysrKystCiA3IGZpbGVzIGNo YW5nZWQsIDE1NyBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3JhbmdlLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9n L3BnX3JhbmdlLmMKaW5kZXggY2QyMWM4NGM4ZmQuLjNkMTk0ZTY3ZmJmIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3JhbmdlLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0 YWxvZy9wZ19yYW5nZS5jCkBAIC0zNSw3ICszNSw5IEBACiB2b2lkCiBSYW5nZUNyZWF0ZShP aWQgcmFuZ2VUeXBlT2lkLCBPaWQgcmFuZ2VTdWJUeXBlLCBPaWQgcmFuZ2VDb2xsYXRpb24s CiAJCQlPaWQgcmFuZ2VTdWJPcGNsYXNzLCBSZWdQcm9jZWR1cmUgcmFuZ2VDYW5vbmljYWws Ci0JCQlSZWdQcm9jZWR1cmUgcmFuZ2VTdWJEaWZmLCBPaWQgbXVsdGlyYW5nZVR5cGVPaWQp CisJCQlSZWdQcm9jZWR1cmUgcmFuZ2VTdWJEaWZmLCBPaWQgbXVsdGlyYW5nZVR5cGVPaWQs CisJCQlSZWdQcm9jZWR1cmUgcmFuZ2VDb25zdHIyLCBSZWdQcm9jZWR1cmUgcmFuZ2VDb25z dHIzLAorCQkJUmVnUHJvY2VkdXJlIG11bHRpcmFuZ2VDb25zdHIwLCBSZWdQcm9jZWR1cmUg bXVsdGlyYW5nZUNvbnN0cjEsIFJlZ1Byb2NlZHVyZSBtdWx0aXJhbmdlQ29uc3RyMikKIHsK IAlSZWxhdGlvbglwZ19yYW5nZTsKIAlEYXR1bQkJdmFsdWVzW05hdHRzX3BnX3JhbmdlXTsK QEAgLTU3LDYgKzU5LDExIEBAIFJhbmdlQ3JlYXRlKE9pZCByYW5nZVR5cGVPaWQsIE9pZCBy YW5nZVN1YlR5cGUsIE9pZCByYW5nZUNvbGxhdGlvbiwKIAl2YWx1ZXNbQW51bV9wZ19yYW5n ZV9ybmdjYW5vbmljYWwgLSAxXSA9IE9iamVjdElkR2V0RGF0dW0ocmFuZ2VDYW5vbmljYWwp OwogCXZhbHVlc1tBbnVtX3BnX3JhbmdlX3JuZ3N1YmRpZmYgLSAxXSA9IE9iamVjdElkR2V0 RGF0dW0ocmFuZ2VTdWJEaWZmKTsKIAl2YWx1ZXNbQW51bV9wZ19yYW5nZV9ybmdtdWx0aXR5 cGlkIC0gMV0gPSBPYmplY3RJZEdldERhdHVtKG11bHRpcmFuZ2VUeXBlT2lkKTsKKwl2YWx1 ZXNbQW51bV9wZ19yYW5nZV9ybmdjb25zdHIyIC0gMV0gPSBPYmplY3RJZEdldERhdHVtKHJh bmdlQ29uc3RyMik7CisJdmFsdWVzW0FudW1fcGdfcmFuZ2Vfcm5nY29uc3RyMyAtIDFdID0g T2JqZWN0SWRHZXREYXR1bShyYW5nZUNvbnN0cjMpOworCXZhbHVlc1tBbnVtX3BnX3Jhbmdl X3JuZ21jb25zdHIwIC0gMV0gPSBPYmplY3RJZEdldERhdHVtKG11bHRpcmFuZ2VDb25zdHIw KTsKKwl2YWx1ZXNbQW51bV9wZ19yYW5nZV9ybmdtY29uc3RyMSAtIDFdID0gT2JqZWN0SWRH ZXREYXR1bShtdWx0aXJhbmdlQ29uc3RyMSk7CisJdmFsdWVzW0FudW1fcGdfcmFuZ2Vfcm5n bWNvbnN0cjIgLSAxXSA9IE9iamVjdElkR2V0RGF0dW0obXVsdGlyYW5nZUNvbnN0cjIpOwog CiAJdHVwID0gaGVhcF9mb3JtX3R1cGxlKFJlbGF0aW9uR2V0RGVzY3IocGdfcmFuZ2UpLCB2 YWx1ZXMsIG51bGxzKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHlw ZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3R5cGVjbWRzLmMKaW5kZXggZTVmYTA1 Nzg4ODkuLjBhOTI2ODhiMjk4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90 eXBlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3R5cGVjbWRzLmMKQEAgLTEx MSwxMCArMTExLDEyIEBAIE9pZAkJCWJpbmFyeV91cGdyYWRlX25leHRfbXJuZ19wZ190eXBl X29pZCA9IEludmFsaWRPaWQ7CiBPaWQJCQliaW5hcnlfdXBncmFkZV9uZXh0X21ybmdfYXJy YXlfcGdfdHlwZV9vaWQgPSBJbnZhbGlkT2lkOwogCiBzdGF0aWMgdm9pZCBtYWtlUmFuZ2VD b25zdHJ1Y3RvcnMoY29uc3QgY2hhciAqbmFtZSwgT2lkIG5hbWVzcGFjZSwKLQkJCQkJCQkJ ICBPaWQgcmFuZ2VPaWQsIE9pZCBzdWJ0eXBlKTsKKwkJCQkJCQkJICBPaWQgcmFuZ2VPaWQs IE9pZCBzdWJ0eXBlLAorCQkJCQkJCQkgIE9pZCByYW5nZUNvbnN0ck9pZHNbXSk7CiBzdGF0 aWMgdm9pZCBtYWtlTXVsdGlyYW5nZUNvbnN0cnVjdG9ycyhjb25zdCBjaGFyICpuYW1lLCBP aWQgbmFtZXNwYWNlLAogCQkJCQkJCQkJICAgT2lkIG11bHRpcmFuZ2VPaWQsIE9pZCByYW5n ZU9pZCwKLQkJCQkJCQkJCSAgIE9pZCByYW5nZUFycmF5T2lkLCBPaWQgKmNhc3RGdW5jT2lk KTsKKwkJCQkJCQkJCSAgIE9pZCByYW5nZUFycmF5T2lkLCBPaWQgKmNhc3RGdW5jT2lkLAor CQkJCQkJCQkJICAgT2lkIG11bHRpcmFuZ2VDb25zdHJPaWRzW10pOwogc3RhdGljIE9pZAlm aW5kVHlwZUlucHV0RnVuY3Rpb24oTGlzdCAqcHJvY25hbWUsIE9pZCB0eXBlT2lkKTsKIHN0 YXRpYyBPaWQJZmluZFR5cGVPdXRwdXRGdW5jdGlvbihMaXN0ICpwcm9jbmFtZSwgT2lkIHR5 cGVPaWQpOwogc3RhdGljIE9pZAlmaW5kVHlwZVJlY2VpdmVGdW5jdGlvbihMaXN0ICpwcm9j bmFtZSwgT2lkIHR5cGVPaWQpOwpAQCAtMTQwNiw2ICsxNDA4LDggQEAgRGVmaW5lUmFuZ2Uo UGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVSYW5nZVN0bXQgKnN0bXQpCiAJTGlzdENlbGwg ICAqbGM7CiAJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOwogCU9iamVjdEFkZHJlc3MgbWx0cm5n YWRkcmVzcyBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7CisJT2lkCQkJcmFuZ2VDb25zdHJP aWRzWzJdOworCU9pZAkJCW11bHRpcmFuZ2VDb25zdHJPaWRzWzNdOwogCU9pZAkJCWNhc3RG dW5jT2lkOwogCiAJLyogQ29udmVydCBsaXN0IG9mIG5hbWVzIHRvIGEgbmFtZSBhbmQgbmFt ZXNwYWNlICovCkBAIC0xNjYxLDEwICsxNjY1LDYgQEAgRGVmaW5lUmFuZ2UoUGFyc2VTdGF0 ZSAqcHN0YXRlLCBDcmVhdGVSYW5nZVN0bXQgKnN0bXQpCiAJCQkJICAgSW52YWxpZE9pZCk7 IC8qIHR5cGUncyBjb2xsYXRpb24gKHJhbmdlcyBuZXZlciBoYXZlIG9uZSkgKi8KIAlBc3Nl cnQobXVsdGlyYW5nZU9pZCA9PSBtbHRybmdhZGRyZXNzLm9iamVjdElkKTsKIAotCS8qIENy ZWF0ZSB0aGUgZW50cnkgaW4gcGdfcmFuZ2UgKi8KLQlSYW5nZUNyZWF0ZSh0eXBvaWQsIHJh bmdlU3VidHlwZSwgcmFuZ2VDb2xsYXRpb24sIHJhbmdlU3ViT3BjbGFzcywKLQkJCQlyYW5n ZUNhbm9uaWNhbCwgcmFuZ2VTdWJ0eXBlRGlmZiwgbXVsdGlyYW5nZU9pZCk7Ci0KIAkvKgog CSAqIENyZWF0ZSB0aGUgYXJyYXkgdHlwZSB0aGF0IGdvZXMgd2l0aCBpdC4KIAkgKi8KQEAg LTE3NDYsMTAgKzE3NDYsMTYgQEAgRGVmaW5lUmFuZ2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBD cmVhdGVSYW5nZVN0bXQgKnN0bXQpCiAJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKIAog CS8qIEFuZCBjcmVhdGUgdGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyBmb3IgdGhpcyByYW5n ZSB0eXBlICovCi0JbWFrZVJhbmdlQ29uc3RydWN0b3JzKHR5cGVOYW1lLCB0eXBlTmFtZXNw YWNlLCB0eXBvaWQsIHJhbmdlU3VidHlwZSk7CisJbWFrZVJhbmdlQ29uc3RydWN0b3JzKHR5 cGVOYW1lLCB0eXBlTmFtZXNwYWNlLCB0eXBvaWQsIHJhbmdlU3VidHlwZSwgcmFuZ2VDb25z dHJPaWRzKTsKIAltYWtlTXVsdGlyYW5nZUNvbnN0cnVjdG9ycyhtdWx0aXJhbmdlVHlwZU5h bWUsIHR5cGVOYW1lc3BhY2UsCiAJCQkJCQkJICAgbXVsdGlyYW5nZU9pZCwgdHlwb2lkLCBy YW5nZUFycmF5T2lkLAotCQkJCQkJCSAgICZjYXN0RnVuY09pZCk7CisJCQkJCQkJICAgJmNh c3RGdW5jT2lkLCBtdWx0aXJhbmdlQ29uc3RyT2lkcyk7CisKKwkvKiBDcmVhdGUgdGhlIGVu dHJ5IGluIHBnX3JhbmdlICovCisJUmFuZ2VDcmVhdGUodHlwb2lkLCByYW5nZVN1YnR5cGUs IHJhbmdlQ29sbGF0aW9uLCByYW5nZVN1Yk9wY2xhc3MsCisJCQkJcmFuZ2VDYW5vbmljYWws IHJhbmdlU3VidHlwZURpZmYsIG11bHRpcmFuZ2VPaWQsCisJCQkJcmFuZ2VDb25zdHJPaWRz WzBdLCByYW5nZUNvbnN0ck9pZHNbMV0sCisJCQkJbXVsdGlyYW5nZUNvbnN0ck9pZHNbMF0s IG11bHRpcmFuZ2VDb25zdHJPaWRzWzFdLCBtdWx0aXJhbmdlQ29uc3RyT2lkc1syXSk7CiAK IAkvKiBDcmVhdGUgY2FzdCBmcm9tIHRoZSByYW5nZSB0eXBlIHRvIGl0cyBtdWx0aXJhbmdl IHR5cGUgKi8KIAlDYXN0Q3JlYXRlKHR5cG9pZCwgbXVsdGlyYW5nZU9pZCwgY2FzdEZ1bmNP aWQsIEludmFsaWRPaWQsIEludmFsaWRPaWQsCkBAIC0xNzcyLDcgKzE3NzgsOCBAQCBEZWZp bmVSYW5nZShQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVJhbmdlU3RtdCAqc3RtdCkKICAq Lwogc3RhdGljIHZvaWQKIG1ha2VSYW5nZUNvbnN0cnVjdG9ycyhjb25zdCBjaGFyICpuYW1l LCBPaWQgbmFtZXNwYWNlLAotCQkJCQkgIE9pZCByYW5nZU9pZCwgT2lkIHN1YnR5cGUpCisJ CQkJCSAgT2lkIHJhbmdlT2lkLCBPaWQgc3VidHlwZSwKKwkJCQkJICBPaWQgcmFuZ2VDb25z dHJPaWRzW10pCiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHByb3NyY1syXSA9IHsi cmFuZ2VfY29uc3RydWN0b3IyIiwKIAkicmFuZ2VfY29uc3RydWN0b3IzIn07CkBAIC0xODMz LDYgKzE4NDAsOCBAQCBtYWtlUmFuZ2VDb25zdHJ1Y3RvcnMoY29uc3QgY2hhciAqbmFtZSwg T2lkIG5hbWVzcGFjZSwKIAkJICogcGdfZHVtcCBkZXBlbmRzIG9uIHRoaXMgY2hvaWNlIHRv IGF2b2lkIGR1bXBpbmcgdGhlIGNvbnN0cnVjdG9ycy4KIAkJICovCiAJCXJlY29yZERlcGVu ZGVuY3lPbigmbXlzZWxmLCAmcmVmZXJlbmNlZCwgREVQRU5ERU5DWV9JTlRFUk5BTCk7CisK KwkJcmFuZ2VDb25zdHJPaWRzW2ldID0gbXlzZWxmLm9iamVjdElkOwogCX0KIH0KIApAQCAt MTg0OCw3ICsxODU3LDcgQEAgbWFrZVJhbmdlQ29uc3RydWN0b3JzKGNvbnN0IGNoYXIgKm5h bWUsIE9pZCBuYW1lc3BhY2UsCiBzdGF0aWMgdm9pZAogbWFrZU11bHRpcmFuZ2VDb25zdHJ1 Y3RvcnMoY29uc3QgY2hhciAqbmFtZSwgT2lkIG5hbWVzcGFjZSwKIAkJCQkJCSAgIE9pZCBt dWx0aXJhbmdlT2lkLCBPaWQgcmFuZ2VPaWQsIE9pZCByYW5nZUFycmF5T2lkLAotCQkJCQkJ ICAgT2lkICpjYXN0RnVuY09pZCkKKwkJCQkJCSAgIE9pZCAqY2FzdEZ1bmNPaWQsIE9pZCBt dWx0aXJhbmdlQ29uc3RyT2lkc1tdKQogewogCU9iamVjdEFkZHJlc3MgbXlzZWxmLAogCQkJ CXJlZmVyZW5jZWQ7CkBAIC0xODk5LDYgKzE5MDgsNyBAQCBtYWtlTXVsdGlyYW5nZUNvbnN0 cnVjdG9ycyhjb25zdCBjaGFyICpuYW1lLCBPaWQgbmFtZXNwYWNlLAogCSAqIGRlcGVuZHMg b24gdGhpcyBjaG9pY2UgdG8gYXZvaWQgZHVtcGluZyB0aGUgY29uc3RydWN0b3JzLgogCSAq LwogCXJlY29yZERlcGVuZGVuY3lPbigmbXlzZWxmLCAmcmVmZXJlbmNlZCwgREVQRU5ERU5D WV9JTlRFUk5BTCk7CisJbXVsdGlyYW5nZUNvbnN0ck9pZHNbMF0gPSBteXNlbGYub2JqZWN0 SWQ7CiAJcGZyZWUoYXJndHlwZXMpOwogCiAJLyoKQEAgLTE5MzksNiArMTk0OSw3IEBAIG1h a2VNdWx0aXJhbmdlQ29uc3RydWN0b3JzKGNvbnN0IGNoYXIgKm5hbWUsIE9pZCBuYW1lc3Bh Y2UsCiAJCQkJCQkJIDAuMCk7CS8qIHByb3Jvd3MgKi8KIAkvKiBkaXR0byAqLwogCXJlY29y ZERlcGVuZGVuY3lPbigmbXlzZWxmLCAmcmVmZXJlbmNlZCwgREVQRU5ERU5DWV9JTlRFUk5B TCk7CisJbXVsdGlyYW5nZUNvbnN0ck9pZHNbMV0gPSBteXNlbGYub2JqZWN0SWQ7CiAJcGZy ZWUoYXJndHlwZXMpOwogCSpjYXN0RnVuY09pZCA9IG15c2VsZi5vYmplY3RJZDsKIApAQCAt MTk3OCw2ICsxOTg5LDcgQEAgbWFrZU11bHRpcmFuZ2VDb25zdHJ1Y3RvcnMoY29uc3QgY2hh ciAqbmFtZSwgT2lkIG5hbWVzcGFjZSwKIAkJCQkJCQkgMC4wKTsJLyogcHJvcm93cyAqLwog CS8qIGRpdHRvICovCiAJcmVjb3JkRGVwZW5kZW5jeU9uKCZteXNlbGYsICZyZWZlcmVuY2Vk LCBERVBFTkRFTkNZX0lOVEVSTkFMKTsKKwltdWx0aXJhbmdlQ29uc3RyT2lkc1syXSA9IG15 c2VsZi5vYmplY3RJZDsKIAlwZnJlZShhcmd0eXBlcyk7CiAJcGZyZWUoYWxsUGFyYW1ldGVy VHlwZXMpOwogCXBmcmVlKHBhcmFtZXRlck1vZGVzKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcmFuZ2UuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19yYW5n ZS5kYXQKaW5kZXggODMwOTcxYzQ5NDQuLmYxZTQ2YTlkODMwIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3JhbmdlLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3JhbmdlLmRhdApAQCAtMTQsMjEgKzE0LDMzIEBACiAKIHsgcm5ndHlwaWQgPT4gJ2lu dDRyYW5nZScsIHJuZ3N1YnR5cGUgPT4gJ2ludDQnLAogICBybmdtdWx0aXR5cGlkID0+ICdp bnQ0bXVsdGlyYW5nZScsIHJuZ3N1Ym9wYyA9PiAnYnRyZWUvaW50NF9vcHMnLAorICBybmdj b25zdHIyID0+ICdpbnQ0cmFuZ2UoaW50NCxpbnQ0KScsIHJuZ2NvbnN0cjMgPT4gJ2ludDRy YW5nZShpbnQ0LGludDQsdGV4dCknLAorICBybmdtY29uc3RyMCA9PiAnaW50NG11bHRpcmFu Z2UoKScsIHJuZ21jb25zdHIxID0+ICdpbnQ0bXVsdGlyYW5nZShpbnQ0cmFuZ2UpJywgcm5n bWNvbnN0cjIgPT4gJ2ludDRtdWx0aXJhbmdlKF9pbnQ0cmFuZ2UpJywKICAgcm5nY2Fub25p Y2FsID0+ICdpbnQ0cmFuZ2VfY2Fub25pY2FsJywgcm5nc3ViZGlmZiA9PiAnaW50NHJhbmdl X3N1YmRpZmYnIH0sCiB7IHJuZ3R5cGlkID0+ICdudW1yYW5nZScsIHJuZ3N1YnR5cGUgPT4g J251bWVyaWMnLAogICBybmdtdWx0aXR5cGlkID0+ICdudW1tdWx0aXJhbmdlJywgcm5nc3Vi b3BjID0+ICdidHJlZS9udW1lcmljX29wcycsCisgIHJuZ2NvbnN0cjIgPT4gJ251bXJhbmdl KG51bWVyaWMsbnVtZXJpYyknLCBybmdjb25zdHIzID0+ICdudW1yYW5nZShudW1lcmljLG51 bWVyaWMsdGV4dCknLAorICBybmdtY29uc3RyMCA9PiAnbnVtbXVsdGlyYW5nZSgpJywgcm5n bWNvbnN0cjEgPT4gJ251bW11bHRpcmFuZ2UobnVtcmFuZ2UpJywgcm5nbWNvbnN0cjIgPT4g J251bW11bHRpcmFuZ2UoX251bXJhbmdlKScsCiAgIHJuZ2Nhbm9uaWNhbCA9PiAnLScsIHJu Z3N1YmRpZmYgPT4gJ251bXJhbmdlX3N1YmRpZmYnIH0sCiB7IHJuZ3R5cGlkID0+ICd0c3Jh bmdlJywgcm5nc3VidHlwZSA9PiAndGltZXN0YW1wJywKICAgcm5nbXVsdGl0eXBpZCA9PiAn dHNtdWx0aXJhbmdlJywgcm5nc3Vib3BjID0+ICdidHJlZS90aW1lc3RhbXBfb3BzJywKKyAg cm5nY29uc3RyMiA9PiAndHNyYW5nZSh0aW1lc3RhbXAsdGltZXN0YW1wKScsIHJuZ2NvbnN0 cjMgPT4gJ3RzcmFuZ2UodGltZXN0YW1wLHRpbWVzdGFtcCx0ZXh0KScsCisgIHJuZ21jb25z dHIwID0+ICd0c211bHRpcmFuZ2UoKScsIHJuZ21jb25zdHIxID0+ICd0c211bHRpcmFuZ2Uo dHNyYW5nZSknLCBybmdtY29uc3RyMiA9PiAndHNtdWx0aXJhbmdlKF90c3JhbmdlKScsCiAg IHJuZ2Nhbm9uaWNhbCA9PiAnLScsIHJuZ3N1YmRpZmYgPT4gJ3RzcmFuZ2Vfc3ViZGlmZicg fSwKIHsgcm5ndHlwaWQgPT4gJ3RzdHpyYW5nZScsIHJuZ3N1YnR5cGUgPT4gJ3RpbWVzdGFt cHR6JywKICAgcm5nbXVsdGl0eXBpZCA9PiAndHN0em11bHRpcmFuZ2UnLCBybmdzdWJvcGMg PT4gJ2J0cmVlL3RpbWVzdGFtcHR6X29wcycsCisgIHJuZ2NvbnN0cjIgPT4gJ3RzdHpyYW5n ZSh0aW1lc3RhbXB0eix0aW1lc3RhbXB0eiknLCBybmdjb25zdHIzID0+ICd0c3R6cmFuZ2Uo dGltZXN0YW1wdHosdGltZXN0YW1wdHosdGV4dCknLAorICBybmdtY29uc3RyMCA9PiAndHN0 em11bHRpcmFuZ2UoKScsIHJuZ21jb25zdHIxID0+ICd0c3R6bXVsdGlyYW5nZSh0c3R6cmFu Z2UpJywgcm5nbWNvbnN0cjIgPT4gJ3RzdHptdWx0aXJhbmdlKF90c3R6cmFuZ2UpJywKICAg cm5nY2Fub25pY2FsID0+ICctJywgcm5nc3ViZGlmZiA9PiAndHN0enJhbmdlX3N1YmRpZmYn IH0sCiB7IHJuZ3R5cGlkID0+ICdkYXRlcmFuZ2UnLCBybmdzdWJ0eXBlID0+ICdkYXRlJywK ICAgcm5nbXVsdGl0eXBpZCA9PiAnZGF0ZW11bHRpcmFuZ2UnLCBybmdzdWJvcGMgPT4gJ2J0 cmVlL2RhdGVfb3BzJywKKyAgcm5nY29uc3RyMiA9PiAnZGF0ZXJhbmdlKGRhdGUsZGF0ZSkn LCBybmdjb25zdHIzID0+ICdkYXRlcmFuZ2UoZGF0ZSxkYXRlLHRleHQpJywKKyAgcm5nbWNv bnN0cjAgPT4gJ2RhdGVtdWx0aXJhbmdlKCknLCBybmdtY29uc3RyMSA9PiAnZGF0ZW11bHRp cmFuZ2UoZGF0ZXJhbmdlKScsIHJuZ21jb25zdHIyID0+ICdkYXRlbXVsdGlyYW5nZShfZGF0 ZXJhbmdlKScsCiAgIHJuZ2Nhbm9uaWNhbCA9PiAnZGF0ZXJhbmdlX2Nhbm9uaWNhbCcsIHJu Z3N1YmRpZmYgPT4gJ2RhdGVyYW5nZV9zdWJkaWZmJyB9LAogeyBybmd0eXBpZCA9PiAnaW50 OHJhbmdlJywgcm5nc3VidHlwZSA9PiAnaW50OCcsCiAgIHJuZ211bHRpdHlwaWQgPT4gJ2lu dDhtdWx0aXJhbmdlJywgcm5nc3Vib3BjID0+ICdidHJlZS9pbnQ4X29wcycsCisgIHJuZ2Nv bnN0cjIgPT4gJ2ludDhyYW5nZShpbnQ4LGludDgpJywgcm5nY29uc3RyMyA9PiAnaW50OHJh bmdlKGludDgsaW50OCx0ZXh0KScsCisgIHJuZ21jb25zdHIwID0+ICdpbnQ4bXVsdGlyYW5n ZSgpJywgcm5nbWNvbnN0cjEgPT4gJ2ludDhtdWx0aXJhbmdlKGludDhyYW5nZSknLCBybmdt Y29uc3RyMiA9PiAnaW50OG11bHRpcmFuZ2UoX2ludDhyYW5nZSknLAogICBybmdjYW5vbmlj YWwgPT4gJ2ludDhyYW5nZV9jYW5vbmljYWwnLCBybmdzdWJkaWZmID0+ICdpbnQ4cmFuZ2Vf c3ViZGlmZicgfSwKIAogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19y YW5nZS5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19yYW5nZS5oCmluZGV4IDViNGY0NjE1 OTA1Li5hZDRkMWU5MTg3ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19y YW5nZS5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcmFuZ2UuaApAQCAtNDMsNiAr NDMsMTUgQEAgQ0FUQUxPRyhwZ19yYW5nZSwzNTQxLFJhbmdlUmVsYXRpb25JZCkKIAkvKiBz dWJ0eXBlJ3MgYnRyZWUgb3BjbGFzcyAqLwogCU9pZAkJCXJuZ3N1Ym9wYyBCS0lfTE9PS1VQ KHBnX29wY2xhc3MpOwogCisJLyogcmFuZ2UgY29uc3RydWN0b3IgZnVuY3Rpb25zICovCisJ cmVncHJvYwkJcm5nY29uc3RyMiBCS0lfTE9PS1VQKHBnX3Byb2MpOworCXJlZ3Byb2MJCXJu Z2NvbnN0cjMgQktJX0xPT0tVUChwZ19wcm9jKTsKKworCS8qIG11bHRpcmFuZ2UgY29uc3Ry dWN0b3IgZnVuY3Rpb25zICovCisJcmVncHJvYwkJcm5nbWNvbnN0cjAgQktJX0xPT0tVUChw Z19wcm9jKTsKKwlyZWdwcm9jCQlybmdtY29uc3RyMSBCS0lfTE9PS1VQKHBnX3Byb2MpOwor CXJlZ3Byb2MJCXJuZ21jb25zdHIyIEJLSV9MT09LVVAocGdfcHJvYyk7CisKIAkvKiBjYW5v bmljYWxpemUgcmFuZ2UsIG9yIDAgKi8KIAlyZWdwcm9jCQlybmdjYW5vbmljYWwgQktJX0xP T0tVUF9PUFQocGdfcHJvYyk7CiAKQEAgLTY5LDcgKzc4LDkgQEAgTUFLRV9TWVNDQUNIRShS QU5HRU1VTFRJUkFOR0UsIHBnX3JhbmdlX3JuZ211bHRpdHlwaWRfaW5kZXgsIDQpOwogCiBl eHRlcm4gdm9pZCBSYW5nZUNyZWF0ZShPaWQgcmFuZ2VUeXBlT2lkLCBPaWQgcmFuZ2VTdWJU eXBlLCBPaWQgcmFuZ2VDb2xsYXRpb24sCiAJCQkJCQlPaWQgcmFuZ2VTdWJPcGNsYXNzLCBS ZWdQcm9jZWR1cmUgcmFuZ2VDYW5vbmljYWwsCi0JCQkJCQlSZWdQcm9jZWR1cmUgcmFuZ2VT dWJEaWZmLCBPaWQgbXVsdGlyYW5nZVR5cGVPaWQpOworCQkJCQkJUmVnUHJvY2VkdXJlIHJh bmdlU3ViRGlmZiwgT2lkIG11bHRpcmFuZ2VUeXBlT2lkLAorCQkJCQkJUmVnUHJvY2VkdXJl IHJhbmdlQ29uc3RyMiwgUmVnUHJvY2VkdXJlIHJhbmdlQ29uc3RyMywKKwkJCQkJCVJlZ1By b2NlZHVyZSBtdWx0aXJhbmdlQ29uc3RyMCwgUmVnUHJvY2VkdXJlIG11bHRpcmFuZ2VDb25z dHIxLCBSZWdQcm9jZWR1cmUgbXVsdGlyYW5nZUNvbnN0cjIpOwogZXh0ZXJuIHZvaWQgUmFu Z2VEZWxldGUoT2lkIHJhbmdlVHlwZU9pZCk7CiAKICNlbmRpZgkJCQkJCQkvKiBQR19SQU5H RV9IICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29pZGpvaW5z Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2lkam9pbnMub3V0CmluZGV4IDIx NWViODk5YmUzLi5mMmQ3MzFhMzAxNyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9vaWRqb2lucy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9v aWRqb2lucy5vdXQKQEAgLTI0OSw2ICsyNDksMTEgQEAgTk9USUNFOiAgY2hlY2tpbmcgcGdf cmFuZ2Uge3JuZ3N1YnR5cGV9ID0+IHBnX3R5cGUge29pZH0KIE5PVElDRTogIGNoZWNraW5n IHBnX3JhbmdlIHtybmdtdWx0aXR5cGlkfSA9PiBwZ190eXBlIHtvaWR9CiBOT1RJQ0U6ICBj aGVja2luZyBwZ19yYW5nZSB7cm5nY29sbGF0aW9ufSA9PiBwZ19jb2xsYXRpb24ge29pZH0K IE5PVElDRTogIGNoZWNraW5nIHBnX3JhbmdlIHtybmdzdWJvcGN9ID0+IHBnX29wY2xhc3Mg e29pZH0KK05PVElDRTogIGNoZWNraW5nIHBnX3JhbmdlIHtybmdjb25zdHIyfSA9PiBwZ19w cm9jIHtvaWR9CitOT1RJQ0U6ICBjaGVja2luZyBwZ19yYW5nZSB7cm5nY29uc3RyM30gPT4g cGdfcHJvYyB7b2lkfQorTk9USUNFOiAgY2hlY2tpbmcgcGdfcmFuZ2Uge3JuZ21jb25zdHIw fSA9PiBwZ19wcm9jIHtvaWR9CitOT1RJQ0U6ICBjaGVja2luZyBwZ19yYW5nZSB7cm5nbWNv bnN0cjF9ID0+IHBnX3Byb2Mge29pZH0KK05PVElDRTogIGNoZWNraW5nIHBnX3JhbmdlIHty bmdtY29uc3RyMn0gPT4gcGdfcHJvYyB7b2lkfQogTk9USUNFOiAgY2hlY2tpbmcgcGdfcmFu Z2Uge3JuZ2Nhbm9uaWNhbH0gPT4gcGdfcHJvYyB7b2lkfQogTk9USUNFOiAgY2hlY2tpbmcg cGdfcmFuZ2Uge3JuZ3N1YmRpZmZ9ID0+IHBnX3Byb2Mge29pZH0KIE5PVElDRTogIGNoZWNr aW5nIHBnX3RyYW5zZm9ybSB7dHJmdHlwZX0gPT4gcGdfdHlwZSB7b2lkfQpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC90eXBlX3Nhbml0eS5vdXQgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3R5cGVfc2FuaXR5Lm91dAppbmRleCA5ZGRjYWNlYzZiZi4u MWQ5NDFkMjBiNmIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdHlw ZV9zYW5pdHkub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdHlwZV9zYW5p dHkub3V0CkBAIC02MTAsNyArNjEwLDkgQEAgV0hFUkUgKGlzX2NhdGFsb2dfdGV4dF91bmlx dWVfaW5kZXhfb2lkKGluZGV4cmVsaWQpIDw+CiAtLSBMb29rIGZvciBpbGxlZ2FsIHZhbHVl cyBpbiBwZ19yYW5nZSBmaWVsZHMuCiBTRUxFQ1Qgci5ybmd0eXBpZCwgci5ybmdzdWJ0eXBl CiBGUk9NIHBnX3JhbmdlIGFzIHIKLVdIRVJFIHIucm5ndHlwaWQgPSAwIE9SIHIucm5nc3Vi dHlwZSA9IDAgT1Igci5ybmdzdWJvcGMgPSAwOworV0hFUkUgci5ybmd0eXBpZCA9IDAgT1Ig ci5ybmdzdWJ0eXBlID0gMCBPUiByLnJuZ3N1Ym9wYyA9IDAKKyAgICBPUiByLnJuZ2NvbnN0 cjIgPSAwIE9SIHIucm5nY29uc3RyMyA9IDAKKyAgICBPUiByLnJuZ21jb25zdHIwID0gMCBP UiByLnJuZ21jb25zdHIxID0gMCBPUiByLnJuZ21jb25zdHIyID0gMDsKICBybmd0eXBpZCB8 IHJuZ3N1YnR5cGUgCiAtLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQogKDAgcm93cykKQEAgLTY2 Myw2ICs2NjUsNTggQEAgV0hFUkUgci5ybmdtdWx0aXR5cGlkIElTIE5VTEwgT1Igci5ybmdt dWx0aXR5cGlkID0gMDsKIC0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LQogKDAgcm93cykKIAorLS0gY2hlY2sgY29uc3RydWN0b3IgZnVuY3Rpb24gYXJndW1lbnRz IGFuZCByZXR1cm4gdHlwZXMKKy0tIHByb25hbWUgYW5kIHByb3NyYyBhcmUgbm90IHJlcXVp cmVkIGJ1dCBtYXRjaCB3aGF0IERlZmluZVJhbmdlKCkgcHJvZHVjZXMgYW5kIHNlcnZlcyB0 byBzYW5pdHktY2hlY2sgdGhlIGNhdGFsb2cgZW50cmllcyBmb3IgYnVpbHQtaW4gdHlwZXMu CitTRUxFQ1Qgci5ybmd0eXBpZCwgci5ybmdzdWJ0eXBlLCBwLnByb25hbWUKK0ZST00gcGdf cmFuZ2UgciBKT0lOIHBnX3Byb2MgcCBPTiBwLm9pZCA9IHIucm5nY29uc3RyMiBKT0lOIHBn X3R5cGUgdCBPTiByLnJuZ3R5cGlkID0gdC5vaWQKK1dIRVJFIHAucHJvbmFyZ3MgIT0gMgor ICAgIE9SIHAucHJvYXJndHlwZXNbMF0gIT0gci5ybmdzdWJ0eXBlIE9SIHAucHJvYXJndHlw ZXNbMV0gIT0gci5ybmdzdWJ0eXBlCisgICAgT1IgcC5wcm9yZXR0eXBlICE9IHIucm5ndHlw aWQKKyAgICBPUiBwLnByb25hbWUgIT0gdC50eXBuYW1lIE9SIHAucHJvc3JjICE9ICdyYW5n ZV9jb25zdHJ1Y3RvcjInOworIHJuZ3R5cGlkIHwgcm5nc3VidHlwZSB8IHByb25hbWUgCist LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0KKygwIHJvd3MpCisKK1NFTEVDVCBy LnJuZ3R5cGlkLCByLnJuZ3N1YnR5cGUsIHAucHJvbmFtZQorRlJPTSBwZ19yYW5nZSByIEpP SU4gcGdfcHJvYyBwIE9OIHAub2lkID0gci5ybmdjb25zdHIzIEpPSU4gcGdfdHlwZSB0IE9O IHIucm5ndHlwaWQgPSB0Lm9pZAorV0hFUkUgcC5wcm9uYXJncyAhPSAzCisgICAgT1IgcC5w cm9hcmd0eXBlc1swXSAhPSByLnJuZ3N1YnR5cGUgT1IgcC5wcm9hcmd0eXBlc1sxXSAhPSBy LnJuZ3N1YnR5cGUgT1IgcC5wcm9hcmd0eXBlc1syXSAhPSAncGdfY2F0YWxvZy50ZXh0Jzo6 cmVndHlwZQorICAgIE9SIHAucHJvcmV0dHlwZSAhPSByLnJuZ3R5cGlkCisgICAgT1IgcC5w cm9uYW1lICE9IHQudHlwbmFtZSBPUiBwLnByb3NyYyAhPSAncmFuZ2VfY29uc3RydWN0b3Iz JzsKKyBybmd0eXBpZCB8IHJuZ3N1YnR5cGUgfCBwcm9uYW1lIAorLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tCisoMCByb3dzKQorCitTRUxFQ1Qgci5ybmd0eXBpZCwgci5y bmdzdWJ0eXBlLCBwLnByb25hbWUKK0ZST00gcGdfcmFuZ2UgciBKT0lOIHBnX3Byb2MgcCBP TiBwLm9pZCA9IHIucm5nbWNvbnN0cjAgSk9JTiBwZ190eXBlIHQgT04gci5ybmdtdWx0aXR5 cGlkID0gdC5vaWQKK1dIRVJFIHAucHJvbmFyZ3MgIT0gMAorICAgIE9SIHAucHJvcmV0dHlw ZSAhPSByLnJuZ211bHRpdHlwaWQKKyAgICBPUiBwLnByb25hbWUgIT0gdC50eXBuYW1lIE9S IHAucHJvc3JjICE9ICdtdWx0aXJhbmdlX2NvbnN0cnVjdG9yMCc7Cisgcm5ndHlwaWQgfCBy bmdzdWJ0eXBlIHwgcHJvbmFtZSAKKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LQorKDAgcm93cykKKworU0VMRUNUIHIucm5ndHlwaWQsIHIucm5nc3VidHlwZSwgcC5wcm9u YW1lCitGUk9NIHBnX3JhbmdlIHIgSk9JTiBwZ19wcm9jIHAgT04gcC5vaWQgPSByLnJuZ21j b25zdHIxIEpPSU4gcGdfdHlwZSB0IE9OIHIucm5nbXVsdGl0eXBpZCA9IHQub2lkCitXSEVS RSBwLnByb25hcmdzICE9IDEKKyAgICBPUiBwLnByb2FyZ3R5cGVzWzBdICE9IHIucm5ndHlw aWQKKyAgICBPUiBwLnByb3JldHR5cGUgIT0gci5ybmdtdWx0aXR5cGlkCisgICAgT1IgcC5w cm9uYW1lICE9IHQudHlwbmFtZSBPUiBwLnByb3NyYyAhPSAnbXVsdGlyYW5nZV9jb25zdHJ1 Y3RvcjEnOworIHJuZ3R5cGlkIHwgcm5nc3VidHlwZSB8IHByb25hbWUgCistLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0KKygwIHJvd3MpCisKK1NFTEVDVCByLnJuZ3R5cGlk LCByLnJuZ3N1YnR5cGUsIHAucHJvbmFtZQorRlJPTSBwZ19yYW5nZSByIEpPSU4gcGdfcHJv YyBwIE9OIHAub2lkID0gci5ybmdtY29uc3RyMiBKT0lOIHBnX3R5cGUgdCBPTiByLnJuZ211 bHRpdHlwaWQgPSB0Lm9pZCBKT0lOIHBnX3R5cGUgdDIgT04gci5ybmd0eXBpZCA9IHQyLm9p ZAorV0hFUkUgcC5wcm9uYXJncyAhPSAxCisgICAgT1IgcC5wcm9hcmd0eXBlc1swXSAhPSB0 Mi50eXBhcnJheQorICAgIE9SIHAucHJvcmV0dHlwZSAhPSByLnJuZ211bHRpdHlwaWQKKyAg ICBPUiBwLnByb25hbWUgIT0gdC50eXBuYW1lIE9SIHAucHJvc3JjICE9ICdtdWx0aXJhbmdl X2NvbnN0cnVjdG9yMic7Cisgcm5ndHlwaWQgfCBybmdzdWJ0eXBlIHwgcHJvbmFtZSAKKy0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLQorKDAgcm93cykKKworLS0gKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAtLSBDcmVhdGUgYSB0YWJs ZSB0aGF0IGhvbGRzIGFsbCB0aGUga25vd24gaW4tY29yZSBkYXRhIHR5cGVzIGFuZCBsZWF2 ZSBpdAogLS0gYXJvdW5kIHNvIGFzIHBnX3VwZ3JhZGUgaXMgYWJsZSB0byB0ZXN0IHRoZWly IGJpbmFyeSBjb21wYXRpYmlsaXR5LgogQ1JFQVRFIFRBQkxFIHRhYl9jb3JlX3R5cGVzIEFT IFNFTEVDVApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdHlwZV9zYW5pdHku c3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdHlwZV9zYW5pdHkuc3FsCmluZGV4IGMyNDk2 ODIzZDkwLi4xYTFiZDNmMTRhNyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv dHlwZV9zYW5pdHkuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3R5cGVfc2FuaXR5 LnNxbApAQCAtNDUxLDcgKzQ1MSw5IEBAIENSRUFURSBGVU5DVElPTiBpc19jYXRhbG9nX3Rl eHRfdW5pcXVlX2luZGV4X29pZChvaWQpIFJFVFVSTlMgYm9vbAogCiBTRUxFQ1Qgci5ybmd0 eXBpZCwgci5ybmdzdWJ0eXBlCiBGUk9NIHBnX3JhbmdlIGFzIHIKLVdIRVJFIHIucm5ndHlw aWQgPSAwIE9SIHIucm5nc3VidHlwZSA9IDAgT1Igci5ybmdzdWJvcGMgPSAwOworV0hFUkUg ci5ybmd0eXBpZCA9IDAgT1Igci5ybmdzdWJ0eXBlID0gMCBPUiByLnJuZ3N1Ym9wYyA9IDAK KyAgICBPUiByLnJuZ2NvbnN0cjIgPSAwIE9SIHIucm5nY29uc3RyMyA9IDAKKyAgICBPUiBy LnJuZ21jb25zdHIwID0gMCBPUiByLnJuZ21jb25zdHIxID0gMCBPUiByLnJuZ21jb25zdHIy ID0gMDsKIAogLS0gcm5nY29sbGF0aW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgaWZmIHN1YnR5 cGUgaXMgY29sbGF0YWJsZQogCkBAIC00OTEsNiArNDkzLDQ2IEBAIENSRUFURSBGVU5DVElP TiBpc19jYXRhbG9nX3RleHRfdW5pcXVlX2luZGV4X29pZChvaWQpIFJFVFVSTlMgYm9vbAog RlJPTSBwZ19yYW5nZSByCiBXSEVSRSByLnJuZ211bHRpdHlwaWQgSVMgTlVMTCBPUiByLnJu Z211bHRpdHlwaWQgPSAwOwogCistLSBjaGVjayBjb25zdHJ1Y3RvciBmdW5jdGlvbiBhcmd1 bWVudHMgYW5kIHJldHVybiB0eXBlcworLS0gcHJvbmFtZSBhbmQgcHJvc3JjIGFyZSBub3Qg cmVxdWlyZWQgYnV0IG1hdGNoIHdoYXQgRGVmaW5lUmFuZ2UoKSBwcm9kdWNlcyBhbmQgc2Vy dmVzIHRvIHNhbml0eS1jaGVjayB0aGUgY2F0YWxvZyBlbnRyaWVzIGZvciBidWlsdC1pbiB0 eXBlcy4KKworU0VMRUNUIHIucm5ndHlwaWQsIHIucm5nc3VidHlwZSwgcC5wcm9uYW1lCitG Uk9NIHBnX3JhbmdlIHIgSk9JTiBwZ19wcm9jIHAgT04gcC5vaWQgPSByLnJuZ2NvbnN0cjIg Sk9JTiBwZ190eXBlIHQgT04gci5ybmd0eXBpZCA9IHQub2lkCitXSEVSRSBwLnByb25hcmdz ICE9IDIKKyAgICBPUiBwLnByb2FyZ3R5cGVzWzBdICE9IHIucm5nc3VidHlwZSBPUiBwLnBy b2FyZ3R5cGVzWzFdICE9IHIucm5nc3VidHlwZQorICAgIE9SIHAucHJvcmV0dHlwZSAhPSBy LnJuZ3R5cGlkCisgICAgT1IgcC5wcm9uYW1lICE9IHQudHlwbmFtZSBPUiBwLnByb3NyYyAh PSAncmFuZ2VfY29uc3RydWN0b3IyJzsKKworU0VMRUNUIHIucm5ndHlwaWQsIHIucm5nc3Vi dHlwZSwgcC5wcm9uYW1lCitGUk9NIHBnX3JhbmdlIHIgSk9JTiBwZ19wcm9jIHAgT04gcC5v aWQgPSByLnJuZ2NvbnN0cjMgSk9JTiBwZ190eXBlIHQgT04gci5ybmd0eXBpZCA9IHQub2lk CitXSEVSRSBwLnByb25hcmdzICE9IDMKKyAgICBPUiBwLnByb2FyZ3R5cGVzWzBdICE9IHIu cm5nc3VidHlwZSBPUiBwLnByb2FyZ3R5cGVzWzFdICE9IHIucm5nc3VidHlwZSBPUiBwLnBy b2FyZ3R5cGVzWzJdICE9ICdwZ19jYXRhbG9nLnRleHQnOjpyZWd0eXBlCisgICAgT1IgcC5w cm9yZXR0eXBlICE9IHIucm5ndHlwaWQKKyAgICBPUiBwLnByb25hbWUgIT0gdC50eXBuYW1l IE9SIHAucHJvc3JjICE9ICdyYW5nZV9jb25zdHJ1Y3RvcjMnOworCitTRUxFQ1Qgci5ybmd0 eXBpZCwgci5ybmdzdWJ0eXBlLCBwLnByb25hbWUKK0ZST00gcGdfcmFuZ2UgciBKT0lOIHBn X3Byb2MgcCBPTiBwLm9pZCA9IHIucm5nbWNvbnN0cjAgSk9JTiBwZ190eXBlIHQgT04gci5y bmdtdWx0aXR5cGlkID0gdC5vaWQKK1dIRVJFIHAucHJvbmFyZ3MgIT0gMAorICAgIE9SIHAu cHJvcmV0dHlwZSAhPSByLnJuZ211bHRpdHlwaWQKKyAgICBPUiBwLnByb25hbWUgIT0gdC50 eXBuYW1lIE9SIHAucHJvc3JjICE9ICdtdWx0aXJhbmdlX2NvbnN0cnVjdG9yMCc7CisKK1NF TEVDVCByLnJuZ3R5cGlkLCByLnJuZ3N1YnR5cGUsIHAucHJvbmFtZQorRlJPTSBwZ19yYW5n ZSByIEpPSU4gcGdfcHJvYyBwIE9OIHAub2lkID0gci5ybmdtY29uc3RyMSBKT0lOIHBnX3R5 cGUgdCBPTiByLnJuZ211bHRpdHlwaWQgPSB0Lm9pZAorV0hFUkUgcC5wcm9uYXJncyAhPSAx CisgICAgT1IgcC5wcm9hcmd0eXBlc1swXSAhPSByLnJuZ3R5cGlkCisgICAgT1IgcC5wcm9y ZXR0eXBlICE9IHIucm5nbXVsdGl0eXBpZAorICAgIE9SIHAucHJvbmFtZSAhPSB0LnR5cG5h bWUgT1IgcC5wcm9zcmMgIT0gJ211bHRpcmFuZ2VfY29uc3RydWN0b3IxJzsKKworU0VMRUNU IHIucm5ndHlwaWQsIHIucm5nc3VidHlwZSwgcC5wcm9uYW1lCitGUk9NIHBnX3JhbmdlIHIg Sk9JTiBwZ19wcm9jIHAgT04gcC5vaWQgPSByLnJuZ21jb25zdHIyIEpPSU4gcGdfdHlwZSB0 IE9OIHIucm5nbXVsdGl0eXBpZCA9IHQub2lkIEpPSU4gcGdfdHlwZSB0MiBPTiByLnJuZ3R5 cGlkID0gdDIub2lkCitXSEVSRSBwLnByb25hcmdzICE9IDEKKyAgICBPUiBwLnByb2FyZ3R5 cGVzWzBdICE9IHQyLnR5cGFycmF5CisgICAgT1IgcC5wcm9yZXR0eXBlICE9IHIucm5nbXVs dGl0eXBpZAorICAgIE9SIHAucHJvbmFtZSAhPSB0LnR5cG5hbWUgT1IgcC5wcm9zcmMgIT0g J211bHRpcmFuZ2VfY29uc3RydWN0b3IyJzsKKworCistLSAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKKwogLS0gQ3JlYXRlIGEgdGFibGUgdGhhdCBob2xk cyBhbGwgdGhlIGtub3duIGluLWNvcmUgZGF0YSB0eXBlcyBhbmQgbGVhdmUgaXQKIC0tIGFy b3VuZCBzbyBhcyBwZ191cGdyYWRlIGlzIGFibGUgdG8gdGVzdCB0aGVpciBiaW5hcnkgY29t cGF0aWJpbGl0eS4KIENSRUFURSBUQUJMRSB0YWJfY29yZV90eXBlcyBBUyBTRUxFQ1QKLS0g CjIuNTIuMAoK --------------v1iuUpXTyf1o1307Cky5EQtw--