Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nGz3F-0006OW-BR for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Feb 2022 08:07:09 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nGz3D-0001NE-Og for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Feb 2022 08:07:07 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nGz3D-0001N5-6J for pgsql-hackers@lists.postgresql.org; Mon, 07 Feb 2022 08:07:07 +0000 Received: from out4-smtp.messagingengine.com ([66.111.4.28]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nGz34-0006qy-Uc for pgsql-hackers@postgresql.org; Mon, 07 Feb 2022 08:07:05 +0000 Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailout.nyi.internal (Postfix) with ESMTP id 26C305C0130 for ; Mon, 7 Feb 2022 03:06:57 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute5.internal (MEProxy); Mon, 07 Feb 2022 03:06:57 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:date:from:from :in-reply-to:message-id:mime-version:reply-to:sender:subject :subject:to:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm2; bh=+kqjEOQ8hqgSkeNey7UoYZA/L7E+PRex7OizSY+7z Gk=; b=S1nW+lj92DR7LxpDCtHz63QLO7pKG7gRcklGlC9g7P/QVAM9BstXXDou8 jodoftEkrIrZxytV1zv/89J2AxsJ5WKbmJmLY+rJH48iftAnriyoY3Iy0MBQ92G3 c2+Qux61N5m0TIksNwOT+tjU8fcaPTCWokBs7Ue549xpVv8OOIAan9zZlbr+QIXr HZcFEiOGhLdswJpDC8VgvpWZLZE2BJNryQ4xPfauMgsUu+05PuapTOsUvGI3dUzY QD/0LWKXXS/D/BrgFu5+t3GIzyv+dFJlFWGrcgd4hWe8mGCtBKQtg2mU9rq84Z7Z i/Oaqv09LAvFiJXW1XPM5wzTzP/DQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvvddrheeggdduuddvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpegtkfffgggfhffuvfesmhdtreertd efjeenucfhrhhomheprfgvthgvrhcugfhishgvnhhtrhgruhhtuceophgvthgvrhdrvghi shgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomheqnecuggftrfgrthhtvg hrnhepteevuedvieekieeghfevfffhhfdvjeevleelfeeikeeikedvffegteekuddtfeel necuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepphgvth gvrhdrvghishgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomh X-ME-Proxy: Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Mon, 7 Feb 2022 03:06:56 -0500 (EST) Content-Type: multipart/mixed; boundary="------------kciR9YhMtX0snK000j3zIKKM" Message-ID: <3df848ce-f0cc-3211-2df5-abe19c11a8e9@enterprisedb.com> Date: Mon, 7 Feb 2022 09:06:54 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.5.1 Content-Language: en-US From: Peter Eisentraut Subject: Use JOIN USING aliases in ruleutils.c To: pgsql-hackers 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. --------------kciR9YhMtX0snK000j3zIKKM Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit When reverse-compiling a query, ruleutils.c has some complicated code to handle the join output columns of a JOIN USING join. There used to be no way to qualify those columns, and so if there was a naming conflict anywhere in the query, those output columns had to be renamed to be unique throughout the query. Since PostgreSQL 14, we have a new feature that allows adding an alias to a JOIN USING clause. This provides a better solution to this problem. This patch changes the logic in ruleutils.c so that if naming conflicts with JOIN USING output columns are found in the query, these JOIN USING aliases with generated names are attached everywhere and the columns are then qualified everywhere. The test output changes show the effects nicely. Obviously, the copy-and-paste code in set_rtable_names() could be refactored a bit better, perhaps. I also just named the generated aliases "ju" with numbers added, maybe there are other ideas for how to generate these names. --------------kciR9YhMtX0snK000j3zIKKM Content-Type: text/plain; charset=UTF-8; name="0001-Use-JOIN-USING-aliases-in-ruleutils.c.patch" Content-Disposition: attachment; filename="0001-Use-JOIN-USING-aliases-in-ruleutils.c.patch" Content-Transfer-Encoding: base64 RnJvbSBhZTZhYTk2MWFlYjA1NDViZDA1YjliZTNiM2Y3OWJjNzlmMTkwMjkzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogTW9uLCA3IEZlYiAyMDIyIDA5OjA0OjAyICswMTAwClN1YmplY3Q6 IFtQQVRDSF0gVXNlIEpPSU4gVVNJTkcgYWxpYXNlcyBpbiBydWxldXRpbHMuYwoKV2hlbiBy ZXZlcnNlLWNvbXBpbGluZyBhIHF1ZXJ5LCBydWxldXRpbHMuYyBoYXMgc29tZSBjb21wbGlj YXRlZCBjb2RlCnRvIGhhbmRsZSB0aGUgam9pbiBvdXRwdXQgY29sdW1ucyBvZiBhIEpPSU4g VVNJTkcgam9pbi4gIFRoZXJlIHVzZWQgdG8KYmUgbm8gd2F5IHRvIHF1YWxpZnkgdGhvc2Ug Y29sdW1ucywgYW5kIHNvIGlmIHRoZXJlIHdhcyBhIG5hbWluZwpjb25mbGljdCBhbnl3aGVy ZSBpbiB0aGUgcXVlcnksIHRob3NlIG91dHB1dCBjb2x1bW5zIGhhZCB0byBiZSByZW5hbWVk CnRvIGJlIHVuaXF1ZSB0aHJvdWdob3V0IHRoZSBxdWVyeS4KClNpbmNlIFBvc3RncmVTUUwg MTQsIHdlIGhhdmUgYSBuZXcgZmVhdHVyZSB0aGF0IGFsbG93cyBhZGRpbmcgYW4gYWxpYXMK dG8gYSBKT0lOIFVTSU5HIGNsYXVzZS4gIFRoaXMgcHJvdmlkZXMgYSBiZXR0ZXIgc29sdXRp b24gdG8gdGhpcwpwcm9ibGVtLiAgVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBsb2dpYyBpbiBy dWxldXRpbHMuYyBzbyB0aGF0IGlmCm5hbWluZyBjb25mbGljdHMgd2l0aCBKT0lOIFVTSU5H IG91dHB1dCBjb2x1bW5zIGFyZSBmb3VuZCBpbiB0aGUKcXVlcnksIHRoZXNlIEpPSU4gVVNJ TkcgYWxpYXNlcyB3aXRoIGdlbmVyYXRlZCBuYW1lcyBhcmUgYXR0YWNoZWQKZXZlcnl3aGVy ZSBhbmQgdGhlIGNvbHVtbnMgYXJlIHRoZW4gcXVhbGlmaWVkIGV2ZXJ5d2hlcmUuCi0tLQog c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICAgICAgfCAxMDIgKysrKysr KystLS0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV92aWV3Lm91dCB8IDE5 NCArKysrKysrKysrKy0tLS0tLS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDE2OSBpbnNlcnRp b25zKCspLCAxMjcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5j CmluZGV4IGIxNjUyNmU2NWUuLjVmMTg5OTVkM2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVs ZXV0aWxzLmMKQEAgLTEzOCwxMSArMTM4LDYgQEAgdHlwZWRlZiBzdHJ1Y3QKICAqIGFycmF5 IG9mIEFwcGVuZFJlbEluZm8gbm9kZXMsIGluZGV4ZWQgYnkgY2hpbGQgcmVsaWQuICBXZSB1 c2UgdGhhdCB0byBtYXAKICAqIGNoaWxkLXRhYmxlIFZhcnMgdG8gdGhlaXIgaW5oZXJpdGFu Y2UgcGFyZW50cy4KICAqCi0gKiBJbiBzb21lIGNhc2VzIHdlIG5lZWQgdG8gbWFrZSBuYW1l cyBvZiBtZXJnZWQgSk9JTiBVU0lORyBjb2x1bW5zIHVuaXF1ZQotICogYWNyb3NzIHRoZSB3 aG9sZSBxdWVyeSwgbm90IG9ubHkgcGVyLVJURS4gIElmIHNvLCB1bmlxdWVfdXNpbmcgaXMg dHJ1ZQotICogYW5kIHVzaW5nX25hbWVzIGlzIGEgbGlzdCBvZiBDIHN0cmluZ3MgcmVwcmVz ZW50aW5nIG5hbWVzIGFscmVhZHkgYXNzaWduZWQKLSAqIHRvIFVTSU5HIGNvbHVtbnMuCi0g KgogICogV2hlbiBkZXBhcnNpbmcgcGxhbiB0cmVlcywgdGhlcmUgaXMgYWx3YXlzIGp1c3Qg YSBzaW5nbGUgaXRlbSBpbiB0aGUKICAqIGRlcGFyc2VfbmFtZXNwYWNlIGxpc3QgKHNpbmNl IGEgcGxhbiB0cmVlIG5ldmVyIGNvbnRhaW5zIFZhcnMgd2l0aAogICogdmFybGV2ZWxzdXAg PiAwKS4gIFdlIHN0b3JlIHRoZSBQbGFuIG5vZGUgdGhhdCBpcyB0aGUgaW1tZWRpYXRlCkBA IC0xNTcsMTMgKzE1MiwxMyBAQCB0eXBlZGVmIHN0cnVjdAogewogCUxpc3QJICAgKnJ0YWJs ZTsJCQkvKiBMaXN0IG9mIFJhbmdlVGJsRW50cnkgbm9kZXMgKi8KIAlMaXN0CSAgICpydGFi bGVfbmFtZXM7CS8qIFBhcmFsbGVsIGxpc3Qgb2YgbmFtZXMgZm9yIFJURXMgKi8KKwlMaXN0 CSAgICpqb2luX3VzaW5nX2FsaWFzZXM7CS8qIFBhcmFsbGVsIGxpc3Qgb2Ygam9pbiB1c2lu ZyBhbGlhc2VzICovCiAJTGlzdAkgICAqcnRhYmxlX2NvbHVtbnM7IC8qIFBhcmFsbGVsIGxp c3Qgb2YgZGVwYXJzZV9jb2x1bW5zIHN0cnVjdHMgKi8KIAlMaXN0CSAgICpzdWJwbGFuczsJ CS8qIExpc3Qgb2YgUGxhbiB0cmVlcyBmb3IgU3ViUGxhbnMgKi8KIAlMaXN0CSAgICpjdGVz OwkJCS8qIExpc3Qgb2YgQ29tbW9uVGFibGVFeHByIG5vZGVzICovCiAJQXBwZW5kUmVsSW5m byAqKmFwcGVuZHJlbHM7IC8qIEFycmF5IG9mIEFwcGVuZFJlbEluZm8gbm9kZXMsIG9yIE5V TEwgKi8KIAkvKiBXb3Jrc3BhY2UgZm9yIGNvbHVtbiBhbGlhcyBhc3NpZ25tZW50OiAqLwog CWJvb2wJCXVuaXF1ZV91c2luZzsJLyogQXJlIHdlIG1ha2luZyBVU0lORyBuYW1lcyBnbG9i YWxseSB1bmlxdWUgKi8KLQlMaXN0CSAgICp1c2luZ19uYW1lczsJLyogTGlzdCBvZiBhc3Np Z25lZCBuYW1lcyBmb3IgVVNJTkcgY29sdW1ucyAqLwogCS8qIFJlbWFpbmluZyBmaWVsZHMg YXJlIHVzZWQgb25seSB3aGVuIGRlcGFyc2luZyBhIFBsYW4gdHJlZTogKi8KIAlQbGFuCSAg ICpwbGFuOwkJCS8qIGltbWVkaWF0ZSBwYXJlbnQgb2YgY3VycmVudCBleHByZXNzaW9uICov CiAJTGlzdAkgICAqYW5jZXN0b3JzOwkJLyogYW5jZXN0b3JzIG9mIHBsYW4gKi8KQEAgLTM4 NDEsNiArMzgzNiw3IEBAIHNldF9ydGFibGVfbmFtZXMoZGVwYXJzZV9uYW1lc3BhY2UgKmRw bnMsIExpc3QgKnBhcmVudF9uYW1lc3BhY2VzLAogCXsKIAkJUmFuZ2VUYmxFbnRyeSAqcnRl ID0gKFJhbmdlVGJsRW50cnkgKikgbGZpcnN0KGxjKTsKIAkJY2hhcgkgICAqcmVmbmFtZTsK KwkJY2hhcgkgICAqam9pbl91c2luZ19hbGlhczsKIAogCQkvKiBKdXN0IGluIGNhc2UgdGhp cyB0YWtlcyBhbiB1bnJlYXNvbmFibGUgYW1vdW50IG9mIHRpbWUgLi4uICovCiAJCUNIRUNL X0ZPUl9JTlRFUlJVUFRTKCk7CkBAIC0zODcxLDYgKzM4NjcsMTYgQEAgc2V0X3J0YWJsZV9u YW1lcyhkZXBhcnNlX25hbWVzcGFjZSAqZHBucywgTGlzdCAqcGFyZW50X25hbWVzcGFjZXMs CiAJCQlyZWZuYW1lID0gcnRlLT5lcmVmLT5hbGlhc25hbWU7CiAJCX0KIAorCQlpZiAocnRl LT5ydGVraW5kID09IFJURV9KT0lOICYmIHJ0ZS0+am9pbm1lcmdlZGNvbHMpCisJCXsKKwkJ CWlmIChydGUtPmpvaW5fdXNpbmdfYWxpYXMpCisJCQkJam9pbl91c2luZ19hbGlhcyA9IHJ0 ZS0+am9pbl91c2luZ19hbGlhcy0+YWxpYXNuYW1lOworCQkJZWxzZQorCQkJCWpvaW5fdXNp bmdfYWxpYXMgPSAianUiOworCQl9CisJCWVsc2UKKwkJCWpvaW5fdXNpbmdfYWxpYXMgPSBO VUxMOworCiAJCS8qCiAJCSAqIElmIHRoZSBzZWxlY3RlZCBuYW1lIGlzbid0IHVuaXF1ZSwg YXBwZW5kIGRpZ2l0cyB0byBtYWtlIGl0IHNvLCBhbmQKIAkJICogbWFrZSBhIG5ldyBoYXNo IGVudHJ5IGZvciBpdCBvbmNlIHdlJ3ZlIGdvdCBhIHVuaXF1ZSBuYW1lLiAgRm9yIGEKQEAg LTM5MTgsNyArMzkyNCw0OSBAQCBzZXRfcnRhYmxlX25hbWVzKGRlcGFyc2VfbmFtZXNwYWNl ICpkcG5zLCBMaXN0ICpwYXJlbnRfbmFtZXNwYWNlcywKIAkJCX0KIAkJfQogCisJCWlmIChq b2luX3VzaW5nX2FsaWFzKQorCQl7CisJCQloZW50cnkgPSAoTmFtZUhhc2hFbnRyeSAqKSBo YXNoX3NlYXJjaChuYW1lc19oYXNoLAorCQkJCQkJCQkJCQkJICAgam9pbl91c2luZ19hbGlh cywKKwkJCQkJCQkJCQkJCSAgIEhBU0hfRU5URVIsCisJCQkJCQkJCQkJCQkgICAmZm91bmQp OworCQkJaWYgKGZvdW5kKQorCQkJeworCQkJCS8qIE5hbWUgYWxyZWFkeSBpbiB1c2UsIG11 c3QgY2hvb3NlIGEgbmV3IG9uZSAqLworCQkJCWludAkJCXJlZm5hbWVsZW4gPSBzdHJsZW4o am9pbl91c2luZ19hbGlhcyk7CisJCQkJY2hhcgkgICAqbW9kbmFtZSA9IChjaGFyICopIHBh bGxvYyhyZWZuYW1lbGVuICsgMTYpOworCQkJCU5hbWVIYXNoRW50cnkgKmhlbnRyeTI7CisK KwkJCQlkbworCQkJCXsKKwkJCQkJaGVudHJ5LT5jb3VudGVyKys7CisJCQkJCWZvciAoOzsp CisJCQkJCXsKKwkJCQkJCW1lbWNweShtb2RuYW1lLCBqb2luX3VzaW5nX2FsaWFzLCByZWZu YW1lbGVuKTsKKwkJCQkJCXNwcmludGYobW9kbmFtZSArIHJlZm5hbWVsZW4sICJfJWQiLCBo ZW50cnktPmNvdW50ZXIpOworCQkJCQkJaWYgKHN0cmxlbihtb2RuYW1lKSA8IE5BTUVEQVRB TEVOKQorCQkJCQkJCWJyZWFrOworCQkJCQkJLyogZHJvcCBjaGFycyBmcm9tIHJlZm5hbWUg dG8ga2VlcCBhbGwgdGhlIGRpZ2l0cyAqLworCQkJCQkJcmVmbmFtZWxlbiA9IHBnX21iY2xp cGxlbihqb2luX3VzaW5nX2FsaWFzLCByZWZuYW1lbGVuLAorCQkJCQkJCQkJCQkJICByZWZu YW1lbGVuIC0gMSk7CisJCQkJCX0KKwkJCQkJaGVudHJ5MiA9IChOYW1lSGFzaEVudHJ5ICop IGhhc2hfc2VhcmNoKG5hbWVzX2hhc2gsCisJCQkJCQkJCQkJCQkJCQltb2RuYW1lLAorCQkJ CQkJCQkJCQkJCQkJSEFTSF9FTlRFUiwKKwkJCQkJCQkJCQkJCQkJCSZmb3VuZCk7CisJCQkJ fSB3aGlsZSAoZm91bmQpOworCQkJCWhlbnRyeTItPmNvdW50ZXIgPSAwOwkvKiBpbml0IG5l dyBoYXNoIGVudHJ5ICovCisJCQkJam9pbl91c2luZ19hbGlhcyA9IG1vZG5hbWU7CisJCQl9 CisJCQllbHNlCisJCQl7CisJCQkJLyogTmFtZSBub3QgcHJldmlvdXNseSB1c2VkLCBuZWVk IG9ubHkgaW5pdGlhbGl6ZSBoZW50cnkgKi8KKwkJCQloZW50cnktPmNvdW50ZXIgPSAwOwor CQkJfQorCQl9CisKIAkJZHBucy0+cnRhYmxlX25hbWVzID0gbGFwcGVuZChkcG5zLT5ydGFi bGVfbmFtZXMsIHJlZm5hbWUpOworCQlkcG5zLT5qb2luX3VzaW5nX2FsaWFzZXMgPSBsYXBw ZW5kKGRwbnMtPmpvaW5fdXNpbmdfYWxpYXNlcywgam9pbl91c2luZ19hbGlhcyk7CiAJCXJ0 aW5kZXgrKzsKIAl9CiAKQEAgLTQyMTksOSArNDI2Nyw2IEBAIHNldF91c2luZ19uYW1lcyhk ZXBhcnNlX25hbWVzcGFjZSAqZHBucywgTm9kZSAqanRub2RlLCBMaXN0ICpwYXJlbnRVc2lu ZykKIAkJCQkJCWNvbG5hbWUgPSBzdHJWYWwobGlzdF9udGgocnRlLT5hbGlhcy0+Y29sbmFt ZXMsIGkpKTsKIAkJCQkJLyogTWFrZSBpdCBhcHByb3ByaWF0ZWx5IHVuaXF1ZSAqLwogCQkJ CQljb2xuYW1lID0gbWFrZV9jb2xuYW1lX3VuaXF1ZShjb2xuYW1lLCBkcG5zLCBjb2xpbmZv KTsKLQkJCQkJaWYgKGRwbnMtPnVuaXF1ZV91c2luZykKLQkJCQkJCWRwbnMtPnVzaW5nX25h bWVzID0gbGFwcGVuZChkcG5zLT51c2luZ19uYW1lcywKLQkJCQkJCQkJCQkJCQljb2xuYW1l KTsKIAkJCQkJLyogU2F2ZSBpdCBhcyBvdXRwdXQgY29sdW1uIG5hbWUsIHRvbyAqLwogCQkJ CQljb2xpbmZvLT5jb2xuYW1lc1tpXSA9IGNvbG5hbWU7CiAJCQkJfQpAQCAtNDcwNSw3ICs0 NzUwLDYgQEAgY29sbmFtZV9pc191bmlxdWUoY29uc3QgY2hhciAqY29sbmFtZSwgZGVwYXJz ZV9uYW1lc3BhY2UgKmRwbnMsCiAJCQkJICBkZXBhcnNlX2NvbHVtbnMgKmNvbGluZm8pCiB7 CiAJaW50CQkJaTsKLQlMaXN0Q2VsbCAgICpsYzsKIAogCS8qIENoZWNrIGFnYWluc3QgYWxy ZWFkeS1hc3NpZ25lZCBjb2x1bW4gYWxpYXNlcyB3aXRoaW4gUlRFICovCiAJZm9yIChpID0g MDsgaSA8IGNvbGluZm8tPm51bV9jb2xzOyBpKyspCkBAIC00NzI4LDI0ICs0NzcyLDYgQEAg Y29sbmFtZV9pc191bmlxdWUoY29uc3QgY2hhciAqY29sbmFtZSwgZGVwYXJzZV9uYW1lc3Bh Y2UgKmRwbnMsCiAJCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JLyogQWxzbyBjaGVjayBhZ2Fp bnN0IFVTSU5HLWNvbHVtbiBuYW1lcyB0aGF0IG11c3QgYmUgZ2xvYmFsbHkgdW5pcXVlICov Ci0JZm9yZWFjaChsYywgZHBucy0+dXNpbmdfbmFtZXMpCi0JewotCQljaGFyCSAgICpvbGRu YW1lID0gKGNoYXIgKikgbGZpcnN0KGxjKTsKLQotCQlpZiAoc3RyY21wKG9sZG5hbWUsIGNv bG5hbWUpID09IDApCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyogQWxzbyBjaGVjayBh Z2FpbnN0IG5hbWVzIGFscmVhZHkgYXNzaWduZWQgZm9yIHBhcmVudC1qb2luIFVTSU5HIGNv bHMgKi8KLQlmb3JlYWNoKGxjLCBjb2xpbmZvLT5wYXJlbnRVc2luZykKLQl7Ci0JCWNoYXIJ ICAgKm9sZG5hbWUgPSAoY2hhciAqKSBsZmlyc3QobGMpOwotCi0JCWlmIChzdHJjbXAob2xk bmFtZSwgY29sbmFtZSkgPT0gMCkKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci0KIAlyZXR1cm4g dHJ1ZTsKIH0KIApAQCAtNzA0Nyw2ICs3MDczLDcgQEAgZ2V0X3ZhcmlhYmxlKFZhciAqdmFy LCBpbnQgbGV2ZWxzdXAsIGJvb2wgaXN0b3BsZXZlbCwgZGVwYXJzZV9jb250ZXh0ICpjb250 ZXh0KQogCUF0dHJOdW1iZXIJdmFyYXR0bm87CiAJZGVwYXJzZV9jb2x1bW5zICpjb2xpbmZv OwogCWNoYXIJICAgKnJlZm5hbWU7CisJY2hhcgkgICAqam9pbl91c2luZ19hbGlhczsKIAlj aGFyCSAgICphdHRuYW1lOwogCiAJLyogRmluZCBhcHByb3ByaWF0ZSBuZXN0aW5nIGRlcHRo ICovCkBAIC03MTMwLDYgKzcxNTcsMTAgQEAgZ2V0X3ZhcmlhYmxlKFZhciAqdmFyLCBpbnQg bGV2ZWxzdXAsIGJvb2wgaXN0b3BsZXZlbCwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KQog CiAJCXJ0ZSA9IHJ0X2ZldGNoKHZhcm5vLCBkcG5zLT5ydGFibGUpOwogCQlyZWZuYW1lID0g KGNoYXIgKikgbGlzdF9udGgoZHBucy0+cnRhYmxlX25hbWVzLCB2YXJubyAtIDEpOworCQlp ZiAoZHBucy0+am9pbl91c2luZ19hbGlhc2VzKQorCQkJam9pbl91c2luZ19hbGlhcyA9IChj aGFyICopIGxpc3RfbnRoKGRwbnMtPmpvaW5fdXNpbmdfYWxpYXNlcywgdmFybm8gLSAxKTsK KwkJZWxzZQorCQkJam9pbl91c2luZ19hbGlhcyA9IE5VTEw7CiAJCWNvbGluZm8gPSBkZXBh cnNlX2NvbHVtbnNfZmV0Y2godmFybm8sIGRwbnMpOwogCQlhdHRudW0gPSB2YXJhdHRubzsK IAl9CkBAIC03MjQxLDYgKzcyNzIsMTEgQEAgZ2V0X3ZhcmlhYmxlKFZhciAqdmFyLCBpbnQg bGV2ZWxzdXAsIGJvb2wgaXN0b3BsZXZlbCwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KQog CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgcXVvdGVfaWRlbnRpZmllcihyZWZuYW1l KSk7CiAJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJy4nKTsKIAl9CisJZWxzZSBpZiAo am9pbl91c2luZ19hbGlhcyAmJiAoY29udGV4dC0+dmFycHJlZml4IHx8IGF0dG5hbWUgPT0g TlVMTCkpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgcXVvdGVfaWRlbnRp Zmllcihqb2luX3VzaW5nX2FsaWFzKSk7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1Ziwg Jy4nKTsKKwl9CiAJaWYgKGF0dG5hbWUpCiAJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVm LCBxdW90ZV9pZGVudGlmaWVyKGF0dG5hbWUpKTsKIAllbHNlCkBAIC0xMTAyMiw2ICsxMTA1 OCw3IEBAIGdldF9mcm9tX2NsYXVzZV9pdGVtKE5vZGUgKmp0bm9kZSwgUXVlcnkgKnF1ZXJ5 LCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpCiAJCUpvaW5FeHByICAgKmogPSAoSm9pbkV4 cHIgKikganRub2RlOwogCQlkZXBhcnNlX2NvbHVtbnMgKmNvbGluZm8gPSBkZXBhcnNlX2Nv bHVtbnNfZmV0Y2goai0+cnRpbmRleCwgZHBucyk7CiAJCWJvb2wJCW5lZWRfcGFyZW5fb25f cmlnaHQ7CisJCWNoYXIJICAgKmpvaW5fdXNpbmdfYWxpYXMgPSBsaXN0X250aChkcG5zLT5q b2luX3VzaW5nX2FsaWFzZXMsIGotPnJ0aW5kZXggLSAxKTsKIAogCQluZWVkX3BhcmVuX29u X3JpZ2h0ID0gUFJFVFRZX1BBUkVOKGNvbnRleHQpICYmCiAJCQkhSXNBKGotPnJhcmcsIFJh bmdlVGJsUmVmKSAmJgpAQCAtMTEwOTQsOSArMTExMzEsMTQgQEAgZ2V0X2Zyb21fY2xhdXNl X2l0ZW0oTm9kZSAqanRub2RlLCBRdWVyeSAqcXVlcnksIGRlcGFyc2VfY29udGV4dCAqY29u dGV4dCkKIAkJCX0KIAkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyknKTsKIAotCQkJ aWYgKGotPmpvaW5fdXNpbmdfYWxpYXMpCisJCQkvKgorCQkJICogSWYgaXQncyBhIGdlbmVy YXRlZCBKT0lOIFVTSU5HIGFsaWFzLCBvbmx5IHByaW50IGl0IGlmIHdlCisJCQkgKiByZWFs bHkgbmVlZCBpdCB0byBxdWFsaWZ5IHNvbWUgY29sdW1uLgorCQkJICovCisJCQlpZiAoai0+ am9pbl91c2luZ19hbGlhcyB8fAorCQkJCShqb2luX3VzaW5nX2FsaWFzICYmIGRwbnMtPnVu aXF1ZV91c2luZykpCiAJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgQVMgJXMiLAotCQkJ CQkJCQkgcXVvdGVfaWRlbnRpZmllcihqLT5qb2luX3VzaW5nX2FsaWFzLT5hbGlhc25hbWUp KTsKKwkJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoam9pbl91c2luZ19hbGlhcykpOwogCQl9 CiAJCWVsc2UgaWYgKGotPnF1YWxzKQogCQl7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2NyZWF0ZV92aWV3Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvY3JlYXRlX3ZpZXcub3V0CmluZGV4IDUwOWU5MzBmYzcuLjBlYjY4Y2I2ZDcgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3ZpZXcub3V0CisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3ZpZXcub3V0CkBAIC05MTAsMTcg KzkxMCwxNyBAQCBzZWxlY3QgcGdfZ2V0X3ZpZXdkZWYoJ3YyYScsIHRydWUpOwogKDEgcm93 KQogCiBzZWxlY3QgcGdfZ2V0X3ZpZXdkZWYoJ3YzJywgdHJ1ZSk7Ci0gICAgICAgIHBnX2dl dF92aWV3ZGVmICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0g IFNFTEVDVCBiLCAgICAgICAgICAgICAgICAgICArCi0gICAgIHR0My5jLCAgICAgICAgICAg ICAgICAgICArCi0gICAgIHR0Mi5hLCAgICAgICAgICAgICAgICAgICArCi0gICAgIHR0My5h eCwgICAgICAgICAgICAgICAgICArCi0gICAgIHR0NC5heSwgICAgICAgICAgICAgICAgICAr Ci0gICAgIHR0NC5xICAgICAgICAgICAgICAgICAgICArCi0gICAgRlJPTSB0dDIgICAgICAg ICAgICAgICAgICArCi0gICAgICBKT0lOIHR0MyBVU0lORyAoYiwgYykgICArCi0gICAgICBG VUxMIEpPSU4gdHQ0IFVTSU5HIChiKTsKKyAgICAgICAgICAgIHBnX2dldF92aWV3ZGVmICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg IFNFTEVDVCBqdV8xLmIsICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgdHQzLmMsICAg ICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICB0dDIuYSwgICAgICAgICAgICAgICAg ICAgICAgICAgICArCisgICAgIHR0My5heCwgICAgICAgICAgICAgICAgICAgICAgICAgICsK KyAgICAgdHQ0LmF5LCAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICB0dDQucSAg ICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgRlJPTSB0dDIgICAgICAgICAgICAg ICAgICAgICAgICAgICsKKyAgICAgIEpPSU4gdHQzIFVTSU5HIChiLCBjKSBBUyBqdSAgICAg KworICAgICAgRlVMTCBKT0lOIHR0NCBVU0lORyAoYikgQVMganVfMTsKICgxIHJvdykKIAog YWx0ZXIgdGFibGUgdHQyIGFkZCBjb2x1bW4gZCBpbnQ7CkBAIC05NzYsMTcgKzk3NiwxNyBA QCBzZWxlY3QgcGdfZ2V0X3ZpZXdkZWYoJ3YyYScsIHRydWUpOwogKDEgcm93KQogCiBzZWxl Y3QgcGdfZ2V0X3ZpZXdkZWYoJ3YzJywgdHJ1ZSk7Ci0gICAgICAgIHBnX2dldF92aWV3ZGVm ICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIFNFTEVDVCBi LCAgICAgICAgICAgICAgICAgICArCi0gICAgIHR0My5jLCAgICAgICAgICAgICAgICAgICAr Ci0gICAgIHR0Mi5hLCAgICAgICAgICAgICAgICAgICArCi0gICAgIHR0My5heCwgICAgICAg ICAgICAgICAgICArCi0gICAgIHR0NC5heSwgICAgICAgICAgICAgICAgICArCi0gICAgIHR0 NC5xICAgICAgICAgICAgICAgICAgICArCi0gICAgRlJPTSB0dDIgICAgICAgICAgICAgICAg ICArCi0gICAgICBKT0lOIHR0MyBVU0lORyAoYiwgYykgICArCi0gICAgICBGVUxMIEpPSU4g dHQ0IFVTSU5HIChiKTsKKyAgICAgICAgICAgIHBnX2dldF92aWV3ZGVmICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFNFTEVDVCBq dV8xLmIsICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgdHQzLmMsICAgICAgICAgICAg ICAgICAgICAgICAgICAgKworICAgICB0dDIuYSwgICAgICAgICAgICAgICAgICAgICAgICAg ICArCisgICAgIHR0My5heCwgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgdHQ0 LmF5LCAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICB0dDQucSAgICAgICAgICAg ICAgICAgICAgICAgICAgICArCisgICAgRlJPTSB0dDIgICAgICAgICAgICAgICAgICAgICAg ICAgICsKKyAgICAgIEpPSU4gdHQzIFVTSU5HIChiLCBjKSBBUyBqdSAgICAgKworICAgICAg RlVMTCBKT0lOIHR0NCBVU0lORyAoYikgQVMganVfMTsKICgxIHJvdykKIAogYWx0ZXIgdGFi bGUgdHQzIHJlbmFtZSBjIHRvIGQ7CkBAIC0xMDQxLDE3ICsxMDQxLDE3IEBAIHNlbGVjdCBw Z19nZXRfdmlld2RlZigndjJhJywgdHJ1ZSk7CiAoMSByb3cpCiAKIHNlbGVjdCBwZ19nZXRf dmlld2RlZigndjMnLCB0cnVlKTsKLSAgICAgICAgICAgICAgcGdfZ2V0X3ZpZXdkZWYgICAg ICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ci0gIFNFTEVDVCBiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKLSAgICAgdHQz LmMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwotICAgICB0dDIuYSwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICArCi0gICAgIHR0My5heCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICsKLSAgICAgdHQ0LmF5LCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKwotICAgICB0dDQucSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCi0gICAg RlJPTSB0dDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKLSAgICAgIEpPSU4gdHQz IHR0MyhheCwgYiwgYykgVVNJTkcgKGIsIGMpKwotICAgICAgRlVMTCBKT0lOIHR0NCBVU0lO RyAoYik7CisgICAgICAgICAgICAgICAgIHBnX2dldF92aWV3ZGVmICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICBTRUxFQ1QganVfMS5iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAg IHR0My5jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgdHQy LmEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICB0dDMuYXgs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgIHR0NC5heSwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgdHQ0LnEgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgIEZST00gdHQyICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICBKT0lOIHR0MyB0dDMoYXgsIGIsIGMp IFVTSU5HIChiLCBjKSBBUyBqdSsKKyAgICAgIEZVTEwgSk9JTiB0dDQgVVNJTkcgKGIpIEFT IGp1XzE7CiAoMSByb3cpCiAKIGFsdGVyIHRhYmxlIHR0MyBhZGQgY29sdW1uIGMgaW50OwpA QCAtMTEwNywxNyArMTEwNywxNyBAQCBzZWxlY3QgcGdfZ2V0X3ZpZXdkZWYoJ3YyYScsIHRy dWUpOwogKDEgcm93KQogCiBzZWxlY3QgcGdfZ2V0X3ZpZXdkZWYoJ3YzJywgdHJ1ZSk7Ci0g ICAgICAgICAgICAgICAgICBwZ19nZXRfdmlld2RlZiAgICAgICAgICAgICAgICAgIAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgU0VM RUNUIGIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCi0gICAgIHR0 My5jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwotICAgICB0dDIu YSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKLSAgICAgdHQzLmF4 LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCi0gICAgIHR0NC5heSwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwotICAgICB0dDQucSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKLSAgICBGUk9NIHR0MiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCi0gICAgICBKT0lOIHR0MyB0dDMo YXgsIGIsIGMsIGNfMSwgZSkgVVNJTkcgKGIsIGMpKwotICAgICAgRlVMTCBKT0lOIHR0NCBV U0lORyAoYik7CisgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdmlld2RlZiAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAgU0VMRUNUIGp1XzEuYiwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICArCisgICAgIHR0My5jLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICB0dDIuYSwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgdHQzLmF4LCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgIHR0NC5heSwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICB0dDQucSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICBGUk9NIHR0 MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICBK T0lOIHR0MyB0dDMoYXgsIGIsIGMsIGNfMSwgZSkgVVNJTkcgKGIsIGMpIEFTIGp1KworICAg ICAgRlVMTCBKT0lOIHR0NCBVU0lORyAoYikgQVMganVfMTsKICgxIHJvdykKIAogYWx0ZXIg dGFibGUgdHQyIGRyb3AgY29sdW1uIGQ7CkBAIC0xMTcyLDE3ICsxMTcyLDE3IEBAIHNlbGVj dCBwZ19nZXRfdmlld2RlZigndjJhJywgdHJ1ZSk7CiAoMSByb3cpCiAKIHNlbGVjdCBwZ19n ZXRfdmlld2RlZigndjMnLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgIHBnX2dldF92aWV3 ZGVmICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQotICBTRUxFQ1QgYiwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICsKLSAgICAgdHQzLmMsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArCi0gICAgIHR0Mi5hLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKwotICAgICB0dDMuYXgsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICsKLSAgICAgdHQ0LmF5LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICArCi0gICAgIHR0NC5xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKwotICAgIEZST00gdHQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICsKLSAgICAgIEpPSU4gdHQzIHR0MyhheCwgYiwgYywgY18xLCBlKSBVU0lORyAoYiwg YykrCi0gICAgICBGVUxMIEpPSU4gdHQ0IFVTSU5HIChiKTsKKyAgICAgICAgICAgICAgICAg ICAgIHBnX2dldF92aWV3ZGVmICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBTRUxFQ1Qg anVfMS5iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAg dHQzLmMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisg ICAgIHR0Mi5hLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KworICAgICB0dDMuYXgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICsKKyAgICAgdHQ0LmF5LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICArCisgICAgIHR0NC5xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKworICAgIEZST00gdHQyICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICsKKyAgICAgIEpPSU4gdHQzIHR0MyhheCwgYiwgYywgY18xLCBl KSBVU0lORyAoYiwgYykgQVMganUrCisgICAgICBGVUxMIEpPSU4gdHQ0IFVTSU5HIChiKSBB UyBqdV8xOwogKDEgcm93KQogCiBjcmVhdGUgdGFibGUgdHQ1IChhIGludCwgYiBpbnQpOwpA QCAtMTI3NiwxNCArMTI3NiwxNCBAQCBzZWxlY3QgcGdfZ2V0X3ZpZXdkZWYoJ3Z2MicsIHRy dWUpOwogICAgICB2LmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAr CiAgICAgRlJPTSAoIFZBTFVFUyAoMSwyLDMsNCw1KSkgdihhLCBiLCBjLCBkLCBlKSsKICBV TklPTiBBTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwotICBTRUxF Q1QgeCBBUyBhLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgIFNFTEVDVCBq dS54IEFTIGEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgdHQ3LnkgQVMg YiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICB0dDgueiBBUyBjLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCi0gICAgIHR0OHgueF8xIEFTIGQsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgdHQ4eC54IEFTIGQsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKwogICAgICB0dDh4LnogQVMgZSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICArCiAgICAgRlJPTSB0dDcgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICsKLSAgICAgIEZVTEwgSk9JTiB0dDggVVNJTkcgKHgpLCAgICAgICAg ICAgICAgICAgKwotICAgICB0dDggdHQ4eCh4XzEsIHopOworICAgICAgRlVMTCBKT0lOIHR0 OCBVU0lORyAoeCkgQVMganUsICAgICAgICAgICArCisgICAgIHR0OCB0dDh4OwogKDEgcm93 KQogCiBjcmVhdGUgdmlldyB2djMgYXMKQEAgLTEzMDMsMTYgKzEzMDMsMTYgQEAgc2VsZWN0 IHBnX2dldF92aWV3ZGVmKCd2djMnLCB0cnVlKTsKICAgICAgdi5mICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgRlJPTSAoIFZBTFVFUyAoMSwy LDMsNCw1LDYpKSB2KGEsIGIsIGMsIHgsIGUsIGYpKwogIFVOSU9OIEFMTCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKLSAgU0VMRUNUIHggQVMgYSwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgIFNFTEVDVCBqdS54IEFTIGEs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICB0dDcueSBBUyBiLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgdHQ4LnogQVMgYywg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCi0gICAgIHhfMSBBUyB4LCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICBqdV8xLngsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgdHQ3eC55IEFT IGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgIHR0OHgueiBB UyBmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgIEZST00gdHQ3 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKLSAgICAgIEZVTEwg Sk9JTiB0dDggVVNJTkcgKHgpLCAgICAgICAgICAgICAgICAgICAgICArCi0gICAgIHR0NyB0 dDd4KHhfMSwgeSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwotICAgICAgRlVM TCBKT0lOIHR0OCB0dDh4KHhfMSwgeikgVVNJTkcgKHhfMSk7CisgICAgICBGVUxMIEpPSU4g dHQ4IFVTSU5HICh4KSBBUyBqdSwgICAgICAgICAgICAgICAgKworICAgICB0dDcgdHQ3eCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgIEZVTEwgSk9J TiB0dDggdHQ4eCBVU0lORyAoeCkgQVMganVfMTsKICgxIHJvdykKIAogY3JlYXRlIHZpZXcg dnY0IGFzCkBAIC0xMzMzLDE4ICsxMzMzLDE4IEBAIHNlbGVjdCBwZ19nZXRfdmlld2RlZign dnY0JywgdHJ1ZSk7CiAgICAgIHYuZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICArCiAgICAgRlJPTSAoIFZBTFVFUyAoMSwyLDMsNCw1LDYsNykp IHYoYSwgYiwgYywgeCwgZSwgZiwgZykrCiAgVU5JT04gQUxMICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCi0gIFNFTEVDVCB4IEFTIGEsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgIFNFTEVDVCBqdS54IEFT IGEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgIHR0Ny55 IEFTIGIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAg IHR0OC56IEFTIGMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAr Ci0gICAgIHhfMSBBUyB4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICArCisgICAgIGp1XzIueCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICArCiAgICAgIHR0N3gueSBBUyBlLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICArCiAgICAgIHR0OHgueiBBUyBmLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgIHR0OHkueiBBUyBnICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgRlJPTSB0dDcgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCi0gICAgICBGVUxMIEpPSU4g dHQ4IFVTSU5HICh4KSwgICAgICAgICAgICAgICAgICAgICAgICAgICArCi0gICAgIHR0NyB0 dDd4KHhfMSwgeSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCi0gICAg ICBGVUxMIEpPSU4gdHQ4IHR0OHgoeF8xLCB6KSBVU0lORyAoeF8xKSAgICAgICAgICAgICAr Ci0gICAgICBGVUxMIEpPSU4gdHQ4IHR0OHkoeF8xLCB6KSBVU0lORyAoeF8xKTsKKyAgICAg IEZVTEwgSk9JTiB0dDggVVNJTkcgKHgpIEFTIGp1LCAgICAgICAgICAgICAgICAgICAgICsK KyAgICAgdHQ3IHR0N3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICsKKyAgICAgIEZVTEwgSk9JTiB0dDggdHQ4eCBVU0lORyAoeCkgQVMganVfMSAgICAg ICAgICAgICAgICsKKyAgICAgIEZVTEwgSk9JTiB0dDggdHQ4eSBVU0lORyAoeCkgQVMganVf MjsKICgxIHJvdykKIAogYWx0ZXIgdGFibGUgdHQ3IGFkZCBjb2x1bW4genogaW50OwpAQCAt MTM2MSwxNCArMTM2MSwxNCBAQCBzZWxlY3QgcGdfZ2V0X3ZpZXdkZWYoJ3Z2MicsIHRydWUp OwogICAgICB2LmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAg ICAgRlJPTSAoIFZBTFVFUyAoMSwyLDMsNCw1KSkgdihhLCBiLCBjLCBkLCBlKSsKICBVTklP TiBBTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwotICBTRUxFQ1Qg eCBBUyBhLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgIFNFTEVDVCBqdS54 IEFTIGEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgdHQ3LnkgQVMgYiwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICB0dDgueiBBUyBjLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICArCi0gICAgIHR0OHgueF8xIEFTIGQsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgdHQ4eC54IEFTIGQsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKwogICAgICB0dDh4LnogQVMgZSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArCiAgICAgRlJPTSB0dDcgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICsKLSAgICAgIEZVTEwgSk9JTiB0dDggVVNJTkcgKHgpLCAgICAgICAgICAg ICAgICAgKwotICAgICB0dDggdHQ4eCh4XzEsIHosIHoyKTsKKyAgICAgIEZVTEwgSk9JTiB0 dDggVVNJTkcgKHgpIEFTIGp1LCAgICAgICAgICAgKworICAgICB0dDggdHQ4eDsKICgxIHJv dykKIAogc2VsZWN0IHBnX2dldF92aWV3ZGVmKCd2djMnLCB0cnVlKTsKQEAgLTEzODIsMTYg KzEzODIsMTYgQEAgc2VsZWN0IHBnX2dldF92aWV3ZGVmKCd2djMnLCB0cnVlKTsKICAgICAg di5mICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAg RlJPTSAoIFZBTFVFUyAoMSwyLDMsNCw1LDYpKSB2KGEsIGIsIGMsIHgsIGUsIGYpKwogIFVO SU9OIEFMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKLSAg U0VMRUNUIHggQVMgYSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisg IFNFTEVDVCBqdS54IEFTIGEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwog ICAgICB0dDcueSBBUyBiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsK ICAgICAgdHQ4LnogQVMgYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAr Ci0gICAgIHhfMSBBUyB4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KworICAgICBqdV8xLngsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICsKICAgICAgdHQ3eC55IEFTIGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICArCiAgICAgIHR0OHgueiBBUyBmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKwogICAgIEZST00gdHQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICsKLSAgICAgIEZVTEwgSk9JTiB0dDggVVNJTkcgKHgpLCAgICAgICAgICAgICAgICAg ICAgICArCi0gICAgIHR0NyB0dDd4KHhfMSwgeSwgeikgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKwotICAgICAgRlVMTCBKT0lOIHR0OCB0dDh4KHhfMSwgeiwgejIpIFVTSU5HICh4 XzEpOworICAgICAgRlVMTCBKT0lOIHR0OCBVU0lORyAoeCkgQVMganUsICAgICAgICAgICAg ICAgICsKKyAgICAgdHQ3IHR0N3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICArCisgICAgICBGVUxMIEpPSU4gdHQ4IHR0OHggVVNJTkcgKHgpIEFTIGp1XzE7CiAo MSByb3cpCiAKIHNlbGVjdCBwZ19nZXRfdmlld2RlZigndnY0JywgdHJ1ZSk7CkBAIC0xNDA2 LDE4ICsxNDA2LDE4IEBAIHNlbGVjdCBwZ19nZXRfdmlld2RlZigndnY0JywgdHJ1ZSk7CiAg ICAgIHYuZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICArCiAgICAgRlJPTSAoIFZBTFVFUyAoMSwyLDMsNCw1LDYsNykpIHYoYSwgYiwgYywgeCwg ZSwgZiwgZykrCiAgVU5JT04gQUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArCi0gIFNFTEVDVCB4IEFTIGEsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICArCisgIFNFTEVDVCBqdS54IEFTIGEsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgIHR0Ny55IEFTIGIsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgIHR0OC56IEFTIGMsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCi0gICAgIHhfMSBBUyB4 LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgIGp1 XzIueCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAg ICAgIHR0N3gueSBBUyBlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICArCiAgICAgIHR0OHgueiBBUyBmLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICArCiAgICAgIHR0OHkueiBBUyBnICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArCiAgICAgRlJPTSB0dDcgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICArCi0gICAgICBGVUxMIEpPSU4gdHQ4IFVTSU5HICh4KSwg ICAgICAgICAgICAgICAgICAgICAgICAgICArCi0gICAgIHR0NyB0dDd4KHhfMSwgeSwgeikg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCi0gICAgICBGVUxMIEpPSU4gdHQ4 IHR0OHgoeF8xLCB6LCB6MikgVVNJTkcgKHhfMSkgICAgICAgICArCi0gICAgICBGVUxMIEpP SU4gdHQ4IHR0OHkoeF8xLCB6LCB6MikgVVNJTkcgKHhfMSk7CisgICAgICBGVUxMIEpPSU4g dHQ4IFVTSU5HICh4KSBBUyBqdSwgICAgICAgICAgICAgICAgICAgICArCisgICAgIHR0NyB0 dDd4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAg ICBGVUxMIEpPSU4gdHQ4IHR0OHggVVNJTkcgKHgpIEFTIGp1XzEgICAgICAgICAgICAgICAr CisgICAgICBGVUxMIEpPSU4gdHQ4IHR0OHkgVVNJTkcgKHgpIEFTIGp1XzI7CiAoMSByb3cp CiAKIC0tIEltcGxpY2l0IGNvZXJjaW9ucyBpbiBhIEpPSU4gVVNJTkcgY3JlYXRlIGlzc3Vl cyBzaW1pbGFyIHRvIEZVTEwgSk9JTgpAQCAtMTQzOCwxNCArMTQzOCwxNCBAQCBzZWxlY3Qg cGdfZ2V0X3ZpZXdkZWYoJ3Z2MmEnLCB0cnVlKTsKICAgICAgdi5lICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgRlJPTSAoIFZBTFVFUyAo bm93KCksMiwzLG5vdygpLDUpKSB2KGEsIGIsIGMsIGQsIGUpKwogIFVOSU9OIEFMTCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKLSAgU0VMRUNUIHgg QVMgYSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgIFNFTEVD VCBqdS54IEFTIGEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAg ICB0dDdhLnkgQVMgYiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsK ICAgICAgdHQ4YS56IEFTIGMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICArCi0gICAgIHR0OGF4LnhfMSBBUyBkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKworICAgICB0dDhheC54IEFTIGQsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICsKICAgICAgdHQ4YXgueiBBUyBlICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArCiAgICAgRlJPTSB0dDdhICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKwotICAgICAgTEVGVCBKT0lOIHR0OGEgVVNJTkcgKHgpLCAg ICAgICAgICAgICAgICAgICAgICAgICsKLSAgICAgdHQ4YSB0dDhheCh4XzEsIHopOworICAg ICAgTEVGVCBKT0lOIHR0OGEgVVNJTkcgKHgpIEFTIGp1LCAgICAgICAgICAgICAgICAgICsK KyAgICAgdHQ4YSB0dDhheDsKICgxIHJvdykKIAogLS0KQEAgLTE0OTgsMTQgKzE0OTgsMTQg QEAgc2VsZWN0IHBnX2dldF92aWV3ZGVmKCd2djYnLCB0cnVlKTsKIAogYWx0ZXIgdGFibGUg dHQxMSBhZGQgY29sdW1uIHogaW50Owogc2VsZWN0IHBnX2dldF92aWV3ZGVmKCd2djYnLCB0 cnVlKTsKLSAgICAgICAgcGdfZ2V0X3ZpZXdkZWYgICAgICAgIAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCi0gIFNFTEVDVCB0dDExLngsICAgICAgICAgICAgICsKLSAgICAg dHQxMS55LCAgICAgICAgICAgICAgICAgKwotICAgICB0dDEyLnosICAgICAgICAgICAgICAg ICArCi0gICAgIHR0MTMucSAgICAgICAgICAgICAgICAgICsKLSAgICBGUk9NIHR0MTEgdHQx MSh4LCB5LCB6XzEpKwotICAgICAgSk9JTiB0dDEyIFVTSU5HICh4KSAgICArCisgICAgICBw Z19nZXRfdmlld2RlZiAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBT RUxFQ1QgdHQxMS54LCAgICAgICAgICArCisgICAgIHR0MTEueSwgICAgICAgICAgICAgICsK KyAgICAgdHQxMi56LCAgICAgICAgICAgICAgKworICAgICB0dDEzLnEgICAgICAgICAgICAg ICArCisgICAgRlJPTSB0dDExICAgICAgICAgICAgICsKKyAgICAgIEpPSU4gdHQxMiBVU0lO RyAoeCkgKwogICAgICAgSk9JTiB0dDEzIFVTSU5HICh6KTsKICgxIHJvdykKIAotLSAKMi4z NS4xCgo= --------------kciR9YhMtX0snK000j3zIKKM--