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 1rAy6P-008urN-PL for pgsql-hackers@arkaria.postgresql.org; Wed, 06 Dec 2023 20:02:38 +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 1rAy6M-00CJYJ-HY for pgsql-hackers@arkaria.postgresql.org; Wed, 06 Dec 2023 20:02:34 +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 1rAy6K-00CJYB-O8 for pgsql-hackers@lists.postgresql.org; Wed, 06 Dec 2023 20:02:34 +0000 Received: from out5-smtp.messagingengine.com ([66.111.4.29]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rAy6F-00ARPi-6z for pgsql-hackers@postgresql.org; Wed, 06 Dec 2023 20:02:31 +0000 Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id BF6775C01AA for ; Wed, 6 Dec 2023 15:02:23 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute6.internal (MEProxy); Wed, 06 Dec 2023 15:02:23 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eisentraut.org; h=cc:content-type:content-type:date:date:from:from:in-reply-to :message-id:mime-version:reply-to:sender:subject:subject:to:to; s=fm3; t=1701892943; x=1701979343; bh=aLJut37Xb4VZf+EEQ1+79QuzZ M0s+CawvIm+o0zSVPY=; b=caMAAVknxgt4q2k6hVXWw2KtMrsleNfyWIsnfLzn2 EPAIsPr+pAHqKVVO8gK9dFhnEO0r7g7MvdR8F7+8ff0Vm80KEHsXhhEbJ104IsfV QlEJfFtR/1AXnyDsHkK7IT6rWBZ/PNhMK9lZbUb/goYep+dXV/G/+pbt02QQezdt k8RqJH5emeGzrM8b6hPG6B103adbCzkSc1MrfF7dG6sAxF+Xy1RbI0P12yWG1Rw7 mWzY5fC9YMsFxA5TscIy8liJRJPIjKcNIYZi3pGa0tDkVVztf7zy9SDpdlcUnl58 kYM4MvzP4L/bbkr7DU9amotAN8EcN3LDzz5FYKV15HtKQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:content-type:date:date :feedback-id:feedback-id: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=fm1; t= 1701892943; x=1701979343; bh=aLJut37Xb4VZf+EEQ1+79QuzZM0s+CawvIm +o0zSVPY=; b=g0Cx//6oSB3L502AdPzzhVw448WYtNQfkULF4IK7JvfuTN4KXri gxmugBHkcA7vTd5LIYc42h8hfoSk/9uyDScE1ccV1x7ntOnj+f5Ncy72nLUUSJON C49gNESm1hwsd/4JIZqONaWkDewU7GMWl572KY0qIHVKIuAzyuqHNibQ60JTZ5Fb OKRjvw5QdefOdXsKX34VAhscKWU3sNIf8CxtPDpAR4rLVkkAISI2fpjVXXkFVakP 3UcMU+RMFbn+eJ4+wz5CxbUWuMGoRQWBnKOwYooYK0DL490iScrCrCERYT2UymyR PKe8A58P5YONIOCWBTZm3aXq9rYnH1j+SKA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrudektddgudefhecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecunecujfgurheptgfkffggfgfhuffvsehmtderre dtvdejnecuhfhrohhmpefrvghtvghrucfgihhsvghnthhrrghuthcuoehpvghtvghrsegv ihhsvghnthhrrghuthdrohhrgheqnecuggftrfgrthhtvghrnhephfehgeefiefgkeduve efgffggeelfedvjeekfeetveekgffhiedvuedvvdfggedtnecuffhomhgrihhnpehpohhs thhgrhgvshhqlhdrohhrghenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmh grihhlfhhrohhmpehpvghtvghrsegvihhsvghnthhrrghuthdrohhrgh X-ME-Proxy: Feedback-ID: ie0a040ee:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Wed, 6 Dec 2023 15:02:22 -0500 (EST) Content-Type: multipart/mixed; boundary="------------N1PpMOf8DDh6nQQHYLDzgCsZ" Message-ID: <4b27fc50-8cd6-46f5-ab20-88dbaadca645@eisentraut.org> Date: Wed, 6 Dec 2023 21:02:20 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US From: Peter Eisentraut Subject: automating RangeTblEntry node support 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. --------------N1PpMOf8DDh6nQQHYLDzgCsZ Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit I have been looking into what it would take to get rid of the custom_read_write and custom_query_jumble for the RangeTblEntry node type. This is one of the larger and more complex exceptions left. (Similar considerations would also apply to the Constraint node type.) Allegedly, only certain fields of RangeTblEntry are valid based on rtekind. But exactly which ones seems to be documented and handled inconsistently. It seems that over time, new RTE kinds have "borrowed" fields that notionally belong to other RTE kinds, which is technically not a problem but creates a bit of a mess when trying to understand all this. I have some WIP patches to accompany this discussion. Let's start with the jumble function. I suppose that this was just carried over from the pg_stat_statements-specific code without any detailed review. For example, the "inh" field is documented to be valid in all RTEs, but it's only jumbled for RTE_RELATION. The "lateral" field isn't looked at at all. I wouldn't be surprised if there are more cases like this. In the first attached patch, I remove _jumbleRangeTblEntry() and instead add per-field query_jumble_ignore annotations to approximately match the behavior of the previous custom code. The pg_stat_statements test suite has some coverage of this. I get rid of switch on rtekind; this should be technically correct, since we do the equal and copy functions like this also. So for example the "inh" field is now considered in each case. But I left "lateral" alone. I suspect several of these new query_jumble_ignore should actually be dropped because the code was wrong before. In the second patch, I'm removing the switch on rtekind from range_table_mutator_impl(). This should be fine because all the subroutines can handle unset/NULL fields. And it removes one more place that needs to track knowledge about which fields are valid when. In the third patch, I'm removing the custom read/write functions for RangeTblEntry. Those functions wanted to have a few fields at the front to make the dump more legible; I'm doing that now by moving the fields up in the actual struct. Not done here, but something we should do is restructure the documentation of RangeTblEntry itself. I'm still thinking about the best way to structure this, but I'm thinking more like noting for each field when it's used, instead by block like it is now, which makes it awkward if a new RTE wants to borrow some fields. Now one could probably rightfully complain that having all these unused fields dumped would make the RangeTblEntry serialization bigger. I'm not sure who big of a problem that actually is, considering how many often-unset fields other node types have. But it deserves some consideration. I think the best way to work around that would be to have a mode that omits fields that have their default value (zero). This would be more generally useful; for example Query also has a bunch of fields that are not often set. I think this would be pretty easy to implement, for example like #define WRITE_INT_FIELD(fldname) \ if (full_mode || node->fldname) \ appendStringInfo(str, " :" CppAsString(fldname) " %d", node->fldname) There is also the discussion over at [0] about larger redesigns of the node serialization format. I'm also interested in that, but here I'm mainly trying to remove more special cases to make that kind of work easier in the future. Any thoughts about the direction? [0]: https://www.postgresql.org/message-id/flat/CACxu%3DvL_SD%3DWJiFSJyyBuZAp_2v_XBqb1x9JBiqz52a_g9z3jA%40mail.gmail.com --------------N1PpMOf8DDh6nQQHYLDzgCsZ Content-Type: text/plain; charset=UTF-8; name="v1-0001-Remove-custom-_jumbleRangeTblEntry.patch" Content-Disposition: attachment; filename="v1-0001-Remove-custom-_jumbleRangeTblEntry.patch" Content-Transfer-Encoding: base64 RnJvbSBlZjA4MDYxYTZkOGYwMWU3ZGIzNTBiNzRlYWEyZDQwM2RmNjA3OWI5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogRnJpLCAxIERlYyAyMDIzIDExOjQ1OjUwICswMTAwClN1YmplY3Q6 IFtQQVRDSCB2MSAxLzNdIFJlbW92ZSBjdXN0b20gX2p1bWJsZVJhbmdlVGJsRW50cnkoKQoK LS0tCiBzcmMvYmFja2VuZC9ub2Rlcy9xdWVyeWp1bWJsZWZ1bmNzLmMgfCA0OCAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgg ICAgICAgfCA0MiArKysrKysrKysrKystLS0tLS0tLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwg MjEgaW5zZXJ0aW9ucygrKSwgNjkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvbm9kZXMvcXVlcnlqdW1ibGVmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvcXVl cnlqdW1ibGVmdW5jcy5jCmluZGV4IDI4MTkwN2E0ZDguLjkwOTRlYTAyZDggMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL25vZGVzL3F1ZXJ5anVtYmxlZnVuY3MuYworKysgYi9zcmMvYmFj a2VuZC9ub2Rlcy9xdWVyeWp1bWJsZWZ1bmNzLmMKQEAgLTM0Nyw1MSArMzQ3LDMgQEAgX2p1 bWJsZUFfQ29uc3QoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgTm9kZSAqbm9kZSkKIAkJfQogCX0K IH0KLQotc3RhdGljIHZvaWQKLV9qdW1ibGVSYW5nZVRibEVudHJ5KEp1bWJsZVN0YXRlICpq c3RhdGUsIE5vZGUgKm5vZGUpCi17Ci0JUmFuZ2VUYmxFbnRyeSAqZXhwciA9IChSYW5nZVRi bEVudHJ5ICopIG5vZGU7Ci0KLQlKVU1CTEVfRklFTEQocnRla2luZCk7Ci0Jc3dpdGNoIChl eHByLT5ydGVraW5kKQotCXsKLQkJY2FzZSBSVEVfUkVMQVRJT046Ci0JCQlKVU1CTEVfRklF TEQocmVsaWQpOwotCQkJSlVNQkxFX05PREUodGFibGVzYW1wbGUpOwotCQkJSlVNQkxFX0ZJ RUxEKGluaCk7Ci0JCQlicmVhazsKLQkJY2FzZSBSVEVfU1VCUVVFUlk6Ci0JCQlKVU1CTEVf Tk9ERShzdWJxdWVyeSk7Ci0JCQlicmVhazsKLQkJY2FzZSBSVEVfSk9JTjoKLQkJCUpVTUJM RV9GSUVMRChqb2ludHlwZSk7Ci0JCQlicmVhazsKLQkJY2FzZSBSVEVfRlVOQ1RJT046Ci0J CQlKVU1CTEVfTk9ERShmdW5jdGlvbnMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX1RBQkxF RlVOQzoKLQkJCUpVTUJMRV9OT0RFKHRhYmxlZnVuYyk7Ci0JCQlicmVhazsKLQkJY2FzZSBS VEVfVkFMVUVTOgotCQkJSlVNQkxFX05PREUodmFsdWVzX2xpc3RzKTsKLQkJCWJyZWFrOwot CQljYXNlIFJURV9DVEU6Ci0KLQkJCS8qCi0JCQkgKiBEZXBlbmRpbmcgb24gdGhlIENURSBu YW1lIGhlcmUgaXNuJ3QgaWRlYWwsIGJ1dCBpdCdzIHRoZSBvbmx5Ci0JCQkgKiBpbmZvIHdl IGhhdmUgdG8gaWRlbnRpZnkgdGhlIHJlZmVyZW5jZWQgV0lUSCBpdGVtLgotCQkJICovCi0J CQlKVU1CTEVfU1RSSU5HKGN0ZW5hbWUpOwotCQkJSlVNQkxFX0ZJRUxEKGN0ZWxldmVsc3Vw KTsKLQkJCWJyZWFrOwotCQljYXNlIFJURV9OQU1FRFRVUExFU1RPUkU6Ci0JCQlKVU1CTEVf U1RSSU5HKGVucm5hbWUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX1JFU1VMVDoKLQkJCWJy ZWFrOwotCQlkZWZhdWx0OgotCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBSVEUga2lu ZDogJWQiLCAoaW50KSBleHByLT5ydGVraW5kKTsKLQkJCWJyZWFrOwotCX0KLX0KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25v ZGVzL3BhcnNlbm9kZXMuaAppbmRleCBlNDk0MzA5ZGE4Li5hOTdmM2NiMTZmIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUv bm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC0xMDE4LDcgKzEwMTgsNyBAQCB0eXBlZGVmIGVudW0g UlRFS2luZAogCiB0eXBlZGVmIHN0cnVjdCBSYW5nZVRibEVudHJ5CiB7Ci0JcGdfbm9kZV9h dHRyKGN1c3RvbV9yZWFkX3dyaXRlLCBjdXN0b21fcXVlcnlfanVtYmxlKQorCXBnX25vZGVf YXR0cihjdXN0b21fcmVhZF93cml0ZSkKIAogCU5vZGVUYWcJCXR5cGU7CiAKQEAgLTEwNjIs MTYgKzEwNjIsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgUmFuZ2VUYmxFbnRyeQogCSAqIHRhYmxl cyB0byBiZSBpbnZhbGlkYXRlZCBpZiB0aGUgdW5kZXJseWluZyB0YWJsZSBpcyBhbHRlcmVk LgogCSAqLwogCU9pZAkJCXJlbGlkOwkJCS8qIE9JRCBvZiB0aGUgcmVsYXRpb24gKi8KLQlj aGFyCQlyZWxraW5kOwkJLyogcmVsYXRpb24ga2luZCAoc2VlIHBnX2NsYXNzLnJlbGtpbmQp ICovCi0JaW50CQkJcmVsbG9ja21vZGU7CS8qIGxvY2sgbGV2ZWwgdGhhdCBxdWVyeSByZXF1 aXJlcyBvbiB0aGUgcmVsICovCisJY2hhcgkJcmVsa2luZCBwZ19ub2RlX2F0dHIocXVlcnlf anVtYmxlX2lnbm9yZSk7CQkvKiByZWxhdGlvbiBraW5kIChzZWUgcGdfY2xhc3MucmVsa2lu ZCkgKi8KKwlpbnQJCQlyZWxsb2NrbW9kZSBwZ19ub2RlX2F0dHIocXVlcnlfanVtYmxlX2ln bm9yZSk7CS8qIGxvY2sgbGV2ZWwgdGhhdCBxdWVyeSByZXF1aXJlcyBvbiB0aGUgcmVsICov CiAJc3RydWN0IFRhYmxlU2FtcGxlQ2xhdXNlICp0YWJsZXNhbXBsZTsJLyogc2FtcGxpbmcg aW5mbywgb3IgTlVMTCAqLwotCUluZGV4CQlwZXJtaW5mb2luZGV4OworCUluZGV4CQlwZXJt aW5mb2luZGV4IHBnX25vZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdub3JlKTsKIAogCS8qCiAJ ICogRmllbGRzIHZhbGlkIGZvciBhIHN1YnF1ZXJ5IFJURSAoZWxzZSBOVUxMKToKIAkgKi8K IAlRdWVyeQkgICAqc3VicXVlcnk7CQkvKiB0aGUgc3ViLXF1ZXJ5ICovCi0JYm9vbAkJc2Vj dXJpdHlfYmFycmllcjsJLyogaXMgZnJvbSBzZWN1cml0eV9iYXJyaWVyIHZpZXc/ICovCisJ Ym9vbAkJc2VjdXJpdHlfYmFycmllciBwZ19ub2RlX2F0dHIocXVlcnlfanVtYmxlX2lnbm9y ZSk7CS8qIGlzIGZyb20gc2VjdXJpdHlfYmFycmllciB2aWV3PyAqLwogCiAJLyoKIAkgKiBG aWVsZHMgdmFsaWQgZm9yIGEgam9pbiBSVEUgKGVsc2UgTlVMTC96ZXJvKToKQEAgLTExMTcs MTcgKzExMTcsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QgUmFuZ2VUYmxFbnRyeQogCSAqIGpvaW5s ZWZ0Y29scy9qb2lucmlnaHR0Y29scy4KIAkgKi8KIAlKb2luVHlwZQlqb2ludHlwZTsJCS8q IHR5cGUgb2Ygam9pbiAqLwotCWludAkJCWpvaW5tZXJnZWRjb2xzOyAvKiBudW1iZXIgb2Yg bWVyZ2VkIChKT0lOIFVTSU5HKSBjb2x1bW5zICovCi0JTGlzdAkgICAqam9pbmFsaWFzdmFy czsJLyogbGlzdCBvZiBhbGlhcy12YXIgZXhwYW5zaW9ucyAqLwotCUxpc3QJICAgKmpvaW5s ZWZ0Y29sczsJLyogbGVmdC1zaWRlIGlucHV0IGNvbHVtbiBudW1iZXJzICovCi0JTGlzdAkg ICAqam9pbnJpZ2h0Y29sczsJLyogcmlnaHQtc2lkZSBpbnB1dCBjb2x1bW4gbnVtYmVycyAq LworCWludAkJCWpvaW5tZXJnZWRjb2xzIHBnX25vZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdu b3JlKTsgLyogbnVtYmVyIG9mIG1lcmdlZCAoSk9JTiBVU0lORykgY29sdW1ucyAqLworCUxp c3QJICAgKmpvaW5hbGlhc3ZhcnMgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25vcmUp OwkvKiBsaXN0IG9mIGFsaWFzLXZhciBleHBhbnNpb25zICovCisJTGlzdAkgICAqam9pbmxl ZnRjb2xzIHBnX25vZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdub3JlKTsJLyogbGVmdC1zaWRl IGlucHV0IGNvbHVtbiBudW1iZXJzICovCisJTGlzdAkgICAqam9pbnJpZ2h0Y29scyBwZ19u b2RlX2F0dHIocXVlcnlfanVtYmxlX2lnbm9yZSk7CS8qIHJpZ2h0LXNpZGUgaW5wdXQgY29s dW1uIG51bWJlcnMgKi8KIAogCS8qCiAJICogam9pbl91c2luZ19hbGlhcyBpcyBhbiBhbGlh cyBjbGF1c2UgYXR0YWNoZWQgZGlyZWN0bHkgdG8gSk9JTi9VU0lORy4gSXQKIAkgKiBpcyBk aWZmZXJlbnQgZnJvbSB0aGUgYWxpYXMgZmllbGQgKGJlbG93KSBpbiB0aGF0IGl0IGRvZXMg bm90IGhpZGUgdGhlCiAJICogcmFuZ2UgdmFyaWFibGVzIG9mIHRoZSB0YWJsZXMgYmVpbmcg am9pbmVkLgogCSAqLwotCUFsaWFzCSAgICpqb2luX3VzaW5nX2FsaWFzOworCUFsaWFzCSAg ICpqb2luX3VzaW5nX2FsaWFzIHBnX25vZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdub3JlKTsK IAogCS8qCiAJICogRmllbGRzIHZhbGlkIGZvciBhIGZ1bmN0aW9uIFJURSAoZWxzZSBOSUwv emVybyk6CkBAIC0xMTM4LDcgKzExMzgsNyBAQCB0eXBlZGVmIHN0cnVjdCBSYW5nZVRibEVu dHJ5CiAJICogZXhwYW5kUlRFKCkuCiAJICovCiAJTGlzdAkgICAqZnVuY3Rpb25zOwkJLyog bGlzdCBvZiBSYW5nZVRibEZ1bmN0aW9uIG5vZGVzICovCi0JYm9vbAkJZnVuY29yZGluYWxp dHk7IC8qIGlzIHRoaXMgY2FsbGVkIFdJVEggT1JESU5BTElUWT8gKi8KKwlib29sCQlmdW5j b3JkaW5hbGl0eSBwZ19ub2RlX2F0dHIocXVlcnlfanVtYmxlX2lnbm9yZSk7IC8qIGlzIHRo aXMgY2FsbGVkIFdJVEggT1JESU5BTElUWT8gKi8KIAogCS8qCiAJICogRmllbGRzIHZhbGlk IGZvciBhIFRhYmxlRnVuYyBSVEUgKGVsc2UgTlVMTCk6CkBAIC0xMTU1LDcgKzExNTUsNyBA QCB0eXBlZGVmIHN0cnVjdCBSYW5nZVRibEVudHJ5CiAJICovCiAJY2hhcgkgICAqY3RlbmFt ZTsJCS8qIG5hbWUgb2YgdGhlIFdJVEggbGlzdCBpdGVtICovCiAJSW5kZXgJCWN0ZWxldmVs c3VwOwkvKiBudW1iZXIgb2YgcXVlcnkgbGV2ZWxzIHVwICovCi0JYm9vbAkJc2VsZl9yZWZl cmVuY2U7IC8qIGlzIHRoaXMgYSByZWN1cnNpdmUgc2VsZi1yZWZlcmVuY2U/ICovCisJYm9v bAkJc2VsZl9yZWZlcmVuY2UgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25vcmUpOyAv KiBpcyB0aGlzIGEgcmVjdXJzaXZlIHNlbGYtcmVmZXJlbmNlPyAqLwogCiAJLyoKIAkgKiBG aWVsZHMgdmFsaWQgZm9yIENURSwgVkFMVUVTLCBFTlIsIGFuZCBUYWJsZUZ1bmMgUlRFcyAo ZWxzZSBOSUwpOgpAQCAtMTE3NSwyNSArMTE3NSwyNSBAQCB0eXBlZGVmIHN0cnVjdCBSYW5n ZVRibEVudHJ5CiAJICogYWxsIHRocmVlIGxpc3RzIChhcyB3ZWxsIGFzIGFuIGVtcHR5LXN0 cmluZyBlbnRyeSBpbiBlcmVmKS4gIFRlc3RpbmcKIAkgKiBmb3IgemVybyBjb2x0eXBlIGlz IHRoZSBzdGFuZGFyZCB3YXkgdG8gZGV0ZWN0IGEgZHJvcHBlZCBjb2x1bW4uCiAJICovCi0J TGlzdAkgICAqY29sdHlwZXM7CQkvKiBPSUQgbGlzdCBvZiBjb2x1bW4gdHlwZSBPSURzICov Ci0JTGlzdAkgICAqY29sdHlwbW9kczsJCS8qIGludGVnZXIgbGlzdCBvZiBjb2x1bW4gdHlw bW9kcyAqLwotCUxpc3QJICAgKmNvbGNvbGxhdGlvbnM7CS8qIE9JRCBsaXN0IG9mIGNvbHVt biBjb2xsYXRpb24gT0lEcyAqLworCUxpc3QJICAgKmNvbHR5cGVzIHBnX25vZGVfYXR0cihx dWVyeV9qdW1ibGVfaWdub3JlKTsJCS8qIE9JRCBsaXN0IG9mIGNvbHVtbiB0eXBlIE9JRHMg Ki8KKwlMaXN0CSAgICpjb2x0eXBtb2RzIHBnX25vZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdu b3JlKTsJCS8qIGludGVnZXIgbGlzdCBvZiBjb2x1bW4gdHlwbW9kcyAqLworCUxpc3QJICAg KmNvbGNvbGxhdGlvbnMgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25vcmUpOwkvKiBP SUQgbGlzdCBvZiBjb2x1bW4gY29sbGF0aW9uIE9JRHMgKi8KIAogCS8qCiAJICogRmllbGRz IHZhbGlkIGZvciBFTlIgUlRFcyAoZWxzZSBOVUxML3plcm8pOgogCSAqLwogCWNoYXIJICAg KmVucm5hbWU7CQkvKiBuYW1lIG9mIGVwaGVtZXJhbCBuYW1lZCByZWxhdGlvbiAqLwotCUNh cmRpbmFsaXR5IGVucnR1cGxlczsJCS8qIGVzdGltYXRlZCBvciBhY3R1YWwgZnJvbSBjYWxs ZXIgKi8KKwlDYXJkaW5hbGl0eSBlbnJ0dXBsZXMgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJs ZV9pZ25vcmUpOwkJLyogZXN0aW1hdGVkIG9yIGFjdHVhbCBmcm9tIGNhbGxlciAqLwogCiAJ LyoKIAkgKiBGaWVsZHMgdmFsaWQgaW4gYWxsIFJURXM6CiAJICovCi0JQWxpYXMJICAgKmFs aWFzOwkJCS8qIHVzZXItd3JpdHRlbiBhbGlhcyBjbGF1c2UsIGlmIGFueSAqLwotCUFsaWFz CSAgICplcmVmOwkJCS8qIGV4cGFuZGVkIHJlZmVyZW5jZSBuYW1lcyAqLwotCWJvb2wJCWxh dGVyYWw7CQkvKiBzdWJxdWVyeSwgZnVuY3Rpb24sIG9yIHZhbHVlcyBpcyBMQVRFUkFMPyAq LworCUFsaWFzCSAgICphbGlhcyBwZ19ub2RlX2F0dHIocXVlcnlfanVtYmxlX2lnbm9yZSk7 CQkJLyogdXNlci13cml0dGVuIGFsaWFzIGNsYXVzZSwgaWYgYW55ICovCisJQWxpYXMJICAg KmVyZWYgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25vcmUpOwkJCS8qIGV4cGFuZGVk IHJlZmVyZW5jZSBuYW1lcyAqLworCWJvb2wJCWxhdGVyYWwgcGdfbm9kZV9hdHRyKHF1ZXJ5 X2p1bWJsZV9pZ25vcmUpOwkJLyogc3VicXVlcnksIGZ1bmN0aW9uLCBvciB2YWx1ZXMgaXMg TEFURVJBTD8gKi8KIAlib29sCQlpbmg7CQkJLyogaW5oZXJpdGFuY2UgcmVxdWVzdGVkPyAq LwotCWJvb2wJCWluRnJvbUNsOwkJLyogcHJlc2VudCBpbiBGUk9NIGNsYXVzZT8gKi8KLQlM aXN0CSAgICpzZWN1cml0eVF1YWxzOwkvKiBzZWN1cml0eSBiYXJyaWVyIHF1YWxzIHRvIGFw cGx5LCBpZiBhbnkgKi8KKwlib29sCQlpbkZyb21DbCBwZ19ub2RlX2F0dHIocXVlcnlfanVt YmxlX2lnbm9yZSk7CQkvKiBwcmVzZW50IGluIEZST00gY2xhdXNlPyAqLworCUxpc3QJICAg KnNlY3VyaXR5UXVhbHMgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25vcmUpOwkvKiBz ZWN1cml0eSBiYXJyaWVyIHF1YWxzIHRvIGFwcGx5LCBpZiBhbnkgKi8KIH0gUmFuZ2VUYmxF bnRyeTsKIAogLyoKLS0gCjIuNDMuMAoK --------------N1PpMOf8DDh6nQQHYLDzgCsZ Content-Type: text/plain; charset=UTF-8; name="v1-0002-Simplify-range_table_mutator_impl.patch" Content-Disposition: attachment; filename="v1-0002-Simplify-range_table_mutator_impl.patch" Content-Transfer-Encoding: base64 RnJvbSA0YTVlZmE0MDU3YmE4ZWRkYWQzZmU2MmI5YTc4OWJkM2E1ZTAzZGI4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogRnJpLCAxIERlYyAyMDIzIDExOjU0OjI2ICswMTAwClN1YmplY3Q6 IFtQQVRDSCB2MSAyLzNdIFNpbXBsaWZ5IHJhbmdlX3RhYmxlX211dGF0b3JfaW1wbCgpCgot LS0KIHNyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jIHwgNjEgKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCsp LCAzOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9ub2Rl RnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCmluZGV4IGMwM2Y0ZjIz ZTIuLmFjMTk1OTMwYWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5j cy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCkBAIC0zNjg4LDQ3ICsz Njg4LDMyIEBAIHJhbmdlX3RhYmxlX211dGF0b3JfaW1wbChMaXN0ICpydGFibGUsCiAJCVJh bmdlVGJsRW50cnkgKm5ld3J0ZTsKIAogCQlGTEFUQ09QWShuZXdydGUsIHJ0ZSwgUmFuZ2VU YmxFbnRyeSk7Ci0JCXN3aXRjaCAocnRlLT5ydGVraW5kKQorCisJCU1VVEFURShuZXdydGUt PnRhYmxlc2FtcGxlLCBydGUtPnRhYmxlc2FtcGxlLCBUYWJsZVNhbXBsZUNsYXVzZSAqKTsK KworCQlpZiAoIShmbGFncyAmIFFUV19JR05PUkVfUlRfU1VCUVVFUklFUykpCisJCQlNVVRB VEUobmV3cnRlLT5zdWJxdWVyeSwgcnRlLT5zdWJxdWVyeSwgUXVlcnkgKik7CisJCWVsc2UK IAkJewotCQkJY2FzZSBSVEVfUkVMQVRJT046Ci0JCQkJTVVUQVRFKG5ld3J0ZS0+dGFibGVz YW1wbGUsIHJ0ZS0+dGFibGVzYW1wbGUsCi0JCQkJCSAgIFRhYmxlU2FtcGxlQ2xhdXNlICop OwotCQkJCS8qIHdlIGRvbid0IGJvdGhlciB0byBjb3B5IGVyZWYsIGFsaWFzZXMsIGV0Yzsg T0s/ICovCi0JCQkJYnJlYWs7Ci0JCQljYXNlIFJURV9TVUJRVUVSWToKLQkJCQlpZiAoIShm bGFncyAmIFFUV19JR05PUkVfUlRfU1VCUVVFUklFUykpCi0JCQkJCU1VVEFURShuZXdydGUt PnN1YnF1ZXJ5LCBydGUtPnN1YnF1ZXJ5LCBRdWVyeSAqKTsKLQkJCQllbHNlCi0JCQkJewot CQkJCQkvKiBlbHNlLCBjb3B5IFJUIHN1YnF1ZXJpZXMgYXMtaXMgKi8KLQkJCQkJbmV3cnRl LT5zdWJxdWVyeSA9IGNvcHlPYmplY3QocnRlLT5zdWJxdWVyeSk7Ci0JCQkJfQotCQkJCWJy ZWFrOwotCQkJY2FzZSBSVEVfSk9JTjoKLQkJCQlpZiAoIShmbGFncyAmIFFUV19JR05PUkVf Sk9JTkFMSUFTRVMpKQotCQkJCQlNVVRBVEUobmV3cnRlLT5qb2luYWxpYXN2YXJzLCBydGUt PmpvaW5hbGlhc3ZhcnMsIExpc3QgKik7Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJLyogZWxz ZSwgY29weSBqb2luIGFsaWFzZXMgYXMtaXMgKi8KLQkJCQkJbmV3cnRlLT5qb2luYWxpYXN2 YXJzID0gY29weU9iamVjdChydGUtPmpvaW5hbGlhc3ZhcnMpOwotCQkJCX0KLQkJCQlicmVh azsKLQkJCWNhc2UgUlRFX0ZVTkNUSU9OOgotCQkJCU1VVEFURShuZXdydGUtPmZ1bmN0aW9u cywgcnRlLT5mdW5jdGlvbnMsIExpc3QgKik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFJURV9U QUJMRUZVTkM6Ci0JCQkJTVVUQVRFKG5ld3J0ZS0+dGFibGVmdW5jLCBydGUtPnRhYmxlZnVu YywgVGFibGVGdW5jICopOwotCQkJCWJyZWFrOwotCQkJY2FzZSBSVEVfVkFMVUVTOgotCQkJ CU1VVEFURShuZXdydGUtPnZhbHVlc19saXN0cywgcnRlLT52YWx1ZXNfbGlzdHMsIExpc3Qg Kik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFJURV9DVEU6Ci0JCQljYXNlIFJURV9OQU1FRFRV UExFU1RPUkU6Ci0JCQljYXNlIFJURV9SRVNVTFQ6Ci0JCQkJLyogbm90aGluZyB0byBkbyAq LwotCQkJCWJyZWFrOworCQkJLyogZWxzZSwgY29weSBSVCBzdWJxdWVyaWVzIGFzLWlzICov CisJCQluZXdydGUtPnN1YnF1ZXJ5ID0gY29weU9iamVjdChydGUtPnN1YnF1ZXJ5KTsKKwkJ fQorCisJCWlmICghKGZsYWdzICYgUVRXX0lHTk9SRV9KT0lOQUxJQVNFUykpCisJCQlNVVRB VEUobmV3cnRlLT5qb2luYWxpYXN2YXJzLCBydGUtPmpvaW5hbGlhc3ZhcnMsIExpc3QgKik7 CisJCWVsc2UKKwkJeworCQkJLyogZWxzZSwgY29weSBqb2luIGFsaWFzZXMgYXMtaXMgKi8K KwkJCW5ld3J0ZS0+am9pbmFsaWFzdmFycyA9IGNvcHlPYmplY3QocnRlLT5qb2luYWxpYXN2 YXJzKTsKIAkJfQorCisJCU1VVEFURShuZXdydGUtPmZ1bmN0aW9ucywgcnRlLT5mdW5jdGlv bnMsIExpc3QgKik7CisJCU1VVEFURShuZXdydGUtPnRhYmxlZnVuYywgcnRlLT50YWJsZWZ1 bmMsIFRhYmxlRnVuYyAqKTsKKwkJTVVUQVRFKG5ld3J0ZS0+dmFsdWVzX2xpc3RzLCBydGUt PnZhbHVlc19saXN0cywgTGlzdCAqKTsKIAkJTVVUQVRFKG5ld3J0ZS0+c2VjdXJpdHlRdWFs cywgcnRlLT5zZWN1cml0eVF1YWxzLCBMaXN0ICopOworCisJCS8qIHdlIGRvbid0IGJvdGhl ciB0byBjb3B5IGVyZWYsIGFsaWFzZXMsIGV0YzsgT0s/ICovCisKIAkJbmV3cnQgPSBsYXBw ZW5kKG5ld3J0LCBuZXdydGUpOwogCX0KIAlyZXR1cm4gbmV3cnQ7Ci0tIAoyLjQzLjAKCg== --------------N1PpMOf8DDh6nQQHYLDzgCsZ Content-Type: text/plain; charset=UTF-8; name="v1-0003-Remove-custom-RangeTblEntry-read-write.patch" Content-Disposition: attachment; filename="v1-0003-Remove-custom-RangeTblEntry-read-write.patch" Content-Transfer-Encoding: base64 RnJvbSAwZWNmZDg4YWZjNTZkNTY0YjFjNGM2MDQ5MmM4MGNhNzE2Njk0ZWM2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogRnJpLCAxIERlYyAyMDIzIDEyOjEyOjMxICswMTAwClN1YmplY3Q6 IFtQQVRDSCB2MSAzLzNdIFJlbW92ZSBjdXN0b20gUmFuZ2VUYmxFbnRyeSByZWFkL3dyaXRl CgotLS0KIHNyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMgICB8IDgwIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYyAgfCA5 MiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9ub2Rl cy9wYXJzZW5vZGVzLmggfCAxMiArKystLQogMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlv bnMoKyksIDE3NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rl cy9vdXRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwppbmRleCBlNjZh OTkyNDdlLi5kZWQzYzU5Yjc2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRm dW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKQEAgLTQ4OSw4NiAr NDg5LDYgQEAgX291dEV4dGVuc2libGVOb2RlKFN0cmluZ0luZm8gc3RyLCBjb25zdCBFeHRl bnNpYmxlTm9kZSAqbm9kZSkKIAltZXRob2RzLT5ub2RlT3V0KHN0ciwgbm9kZSk7CiB9CiAK LXN0YXRpYyB2b2lkCi1fb3V0UmFuZ2VUYmxFbnRyeShTdHJpbmdJbmZvIHN0ciwgY29uc3Qg UmFuZ2VUYmxFbnRyeSAqbm9kZSkKLXsKLQlXUklURV9OT0RFX1RZUEUoIlJBTkdFVEJMRU5U UlkiKTsKLQotCS8qIHB1dCBhbGlhcyArIGVyZWYgZmlyc3QgdG8gbWFrZSBkdW1wIG1vcmUg bGVnaWJsZSAqLwotCVdSSVRFX05PREVfRklFTEQoYWxpYXMpOwotCVdSSVRFX05PREVfRklF TEQoZXJlZik7Ci0JV1JJVEVfRU5VTV9GSUVMRChydGVraW5kLCBSVEVLaW5kKTsKLQotCXN3 aXRjaCAobm9kZS0+cnRla2luZCkKLQl7Ci0JCWNhc2UgUlRFX1JFTEFUSU9OOgotCQkJV1JJ VEVfT0lEX0ZJRUxEKHJlbGlkKTsKLQkJCVdSSVRFX0NIQVJfRklFTEQocmVsa2luZCk7Ci0J CQlXUklURV9JTlRfRklFTEQocmVsbG9ja21vZGUpOwotCQkJV1JJVEVfTk9ERV9GSUVMRCh0 YWJsZXNhbXBsZSk7Ci0JCQlXUklURV9VSU5UX0ZJRUxEKHBlcm1pbmZvaW5kZXgpOwotCQkJ YnJlYWs7Ci0JCWNhc2UgUlRFX1NVQlFVRVJZOgotCQkJV1JJVEVfTk9ERV9GSUVMRChzdWJx dWVyeSk7Ci0JCQlXUklURV9CT09MX0ZJRUxEKHNlY3VyaXR5X2JhcnJpZXIpOwotCQkJLyog d2UgcmUtdXNlIHRoZXNlIFJFTEFUSU9OIGZpZWxkcywgdG9vOiAqLwotCQkJV1JJVEVfT0lE X0ZJRUxEKHJlbGlkKTsKLQkJCVdSSVRFX0NIQVJfRklFTEQocmVsa2luZCk7Ci0JCQlXUklU RV9JTlRfRklFTEQocmVsbG9ja21vZGUpOwotCQkJV1JJVEVfVUlOVF9GSUVMRChwZXJtaW5m b2luZGV4KTsKLQkJCWJyZWFrOwotCQljYXNlIFJURV9KT0lOOgotCQkJV1JJVEVfRU5VTV9G SUVMRChqb2ludHlwZSwgSm9pblR5cGUpOwotCQkJV1JJVEVfSU5UX0ZJRUxEKGpvaW5tZXJn ZWRjb2xzKTsKLQkJCVdSSVRFX05PREVfRklFTEQoam9pbmFsaWFzdmFycyk7Ci0JCQlXUklU RV9OT0RFX0ZJRUxEKGpvaW5sZWZ0Y29scyk7Ci0JCQlXUklURV9OT0RFX0ZJRUxEKGpvaW5y aWdodGNvbHMpOwotCQkJV1JJVEVfTk9ERV9GSUVMRChqb2luX3VzaW5nX2FsaWFzKTsKLQkJ CWJyZWFrOwotCQljYXNlIFJURV9GVU5DVElPTjoKLQkJCVdSSVRFX05PREVfRklFTEQoZnVu Y3Rpb25zKTsKLQkJCVdSSVRFX0JPT0xfRklFTEQoZnVuY29yZGluYWxpdHkpOwotCQkJYnJl YWs7Ci0JCWNhc2UgUlRFX1RBQkxFRlVOQzoKLQkJCVdSSVRFX05PREVfRklFTEQodGFibGVm dW5jKTsKLQkJCWJyZWFrOwotCQljYXNlIFJURV9WQUxVRVM6Ci0JCQlXUklURV9OT0RFX0ZJ RUxEKHZhbHVlc19saXN0cyk7Ci0JCQlXUklURV9OT0RFX0ZJRUxEKGNvbHR5cGVzKTsKLQkJ CVdSSVRFX05PREVfRklFTEQoY29sdHlwbW9kcyk7Ci0JCQlXUklURV9OT0RFX0ZJRUxEKGNv bGNvbGxhdGlvbnMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0NURToKLQkJCVdSSVRFX1NU UklOR19GSUVMRChjdGVuYW1lKTsKLQkJCVdSSVRFX1VJTlRfRklFTEQoY3RlbGV2ZWxzdXAp OwotCQkJV1JJVEVfQk9PTF9GSUVMRChzZWxmX3JlZmVyZW5jZSk7Ci0JCQlXUklURV9OT0RF X0ZJRUxEKGNvbHR5cGVzKTsKLQkJCVdSSVRFX05PREVfRklFTEQoY29sdHlwbW9kcyk7Ci0J CQlXUklURV9OT0RFX0ZJRUxEKGNvbGNvbGxhdGlvbnMpOwotCQkJYnJlYWs7Ci0JCWNhc2Ug UlRFX05BTUVEVFVQTEVTVE9SRToKLQkJCVdSSVRFX1NUUklOR19GSUVMRChlbnJuYW1lKTsK LQkJCVdSSVRFX0ZMT0FUX0ZJRUxEKGVucnR1cGxlcyk7Ci0JCQlXUklURV9OT0RFX0ZJRUxE KGNvbHR5cGVzKTsKLQkJCVdSSVRFX05PREVfRklFTEQoY29sdHlwbW9kcyk7Ci0JCQlXUklU RV9OT0RFX0ZJRUxEKGNvbGNvbGxhdGlvbnMpOwotCQkJLyogd2UgcmUtdXNlIHRoZXNlIFJF TEFUSU9OIGZpZWxkcywgdG9vOiAqLwotCQkJV1JJVEVfT0lEX0ZJRUxEKHJlbGlkKTsKLQkJ CWJyZWFrOwotCQljYXNlIFJURV9SRVNVTFQ6Ci0JCQkvKiBubyBleHRyYSBmaWVsZHMgKi8K LQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBS VEUga2luZDogJWQiLCAoaW50KSBub2RlLT5ydGVraW5kKTsKLQkJCWJyZWFrOwotCX0KLQot CVdSSVRFX0JPT0xfRklFTEQobGF0ZXJhbCk7Ci0JV1JJVEVfQk9PTF9GSUVMRChpbmgpOwot CVdSSVRFX0JPT0xfRklFTEQoaW5Gcm9tQ2wpOwotCVdSSVRFX05PREVfRklFTEQoc2VjdXJp dHlRdWFscyk7Ci19Ci0KIHN0YXRpYyB2b2lkCiBfb3V0QV9FeHByKFN0cmluZ0luZm8gc3Ry LCBjb25zdCBBX0V4cHIgKm5vZGUpCiB7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rl cy9yZWFkZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCmluZGV4IGNj MjAyMWMxZjcuLjBjNjRlMDZjMzggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL3Jl YWRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCkBAIC00ODYs OTggKzQ4Niw2IEBAIF9yZWFkQ29uc3RyYWludCh2b2lkKQogCVJFQURfRE9ORSgpOwogfQog Ci1zdGF0aWMgUmFuZ2VUYmxFbnRyeSAqCi1fcmVhZFJhbmdlVGJsRW50cnkodm9pZCkKLXsK LQlSRUFEX0xPQ0FMUyhSYW5nZVRibEVudHJ5KTsKLQotCS8qIHB1dCBhbGlhcyArIGVyZWYg Zmlyc3QgdG8gbWFrZSBkdW1wIG1vcmUgbGVnaWJsZSAqLwotCVJFQURfTk9ERV9GSUVMRChh bGlhcyk7Ci0JUkVBRF9OT0RFX0ZJRUxEKGVyZWYpOwotCVJFQURfRU5VTV9GSUVMRChydGVr aW5kLCBSVEVLaW5kKTsKLQotCXN3aXRjaCAobG9jYWxfbm9kZS0+cnRla2luZCkKLQl7Ci0J CWNhc2UgUlRFX1JFTEFUSU9OOgotCQkJUkVBRF9PSURfRklFTEQocmVsaWQpOwotCQkJUkVB RF9DSEFSX0ZJRUxEKHJlbGtpbmQpOwotCQkJUkVBRF9JTlRfRklFTEQocmVsbG9ja21vZGUp OwotCQkJUkVBRF9OT0RFX0ZJRUxEKHRhYmxlc2FtcGxlKTsKLQkJCVJFQURfVUlOVF9GSUVM RChwZXJtaW5mb2luZGV4KTsKLQkJCWJyZWFrOwotCQljYXNlIFJURV9TVUJRVUVSWToKLQkJ CVJFQURfTk9ERV9GSUVMRChzdWJxdWVyeSk7Ci0JCQlSRUFEX0JPT0xfRklFTEQoc2VjdXJp dHlfYmFycmllcik7Ci0JCQkvKiB3ZSByZS11c2UgdGhlc2UgUkVMQVRJT04gZmllbGRzLCB0 b286ICovCi0JCQlSRUFEX09JRF9GSUVMRChyZWxpZCk7Ci0JCQlSRUFEX0NIQVJfRklFTEQo cmVsa2luZCk7Ci0JCQlSRUFEX0lOVF9GSUVMRChyZWxsb2NrbW9kZSk7Ci0JCQlSRUFEX1VJ TlRfRklFTEQocGVybWluZm9pbmRleCk7Ci0JCQlicmVhazsKLQkJY2FzZSBSVEVfSk9JTjoK LQkJCVJFQURfRU5VTV9GSUVMRChqb2ludHlwZSwgSm9pblR5cGUpOwotCQkJUkVBRF9JTlRf RklFTEQoam9pbm1lcmdlZGNvbHMpOwotCQkJUkVBRF9OT0RFX0ZJRUxEKGpvaW5hbGlhc3Zh cnMpOwotCQkJUkVBRF9OT0RFX0ZJRUxEKGpvaW5sZWZ0Y29scyk7Ci0JCQlSRUFEX05PREVf RklFTEQoam9pbnJpZ2h0Y29scyk7Ci0JCQlSRUFEX05PREVfRklFTEQoam9pbl91c2luZ19h bGlhcyk7Ci0JCQlicmVhazsKLQkJY2FzZSBSVEVfRlVOQ1RJT046Ci0JCQlSRUFEX05PREVf RklFTEQoZnVuY3Rpb25zKTsKLQkJCVJFQURfQk9PTF9GSUVMRChmdW5jb3JkaW5hbGl0eSk7 Ci0JCQlicmVhazsKLQkJY2FzZSBSVEVfVEFCTEVGVU5DOgotCQkJUkVBRF9OT0RFX0ZJRUxE KHRhYmxlZnVuYyk7Ci0JCQkvKiBUaGUgUlRFIG11c3QgaGF2ZSBhIGNvcHkgb2YgdGhlIGNv bHVtbiB0eXBlIGluZm8sIGlmIGFueSAqLwotCQkJaWYgKGxvY2FsX25vZGUtPnRhYmxlZnVu YykKLQkJCXsKLQkJCQlUYWJsZUZ1bmMgICp0ZiA9IGxvY2FsX25vZGUtPnRhYmxlZnVuYzsK LQotCQkJCWxvY2FsX25vZGUtPmNvbHR5cGVzID0gdGYtPmNvbHR5cGVzOwotCQkJCWxvY2Fs X25vZGUtPmNvbHR5cG1vZHMgPSB0Zi0+Y29sdHlwbW9kczsKLQkJCQlsb2NhbF9ub2RlLT5j b2xjb2xsYXRpb25zID0gdGYtPmNvbGNvbGxhdGlvbnM7Ci0JCQl9Ci0JCQlicmVhazsKLQkJ Y2FzZSBSVEVfVkFMVUVTOgotCQkJUkVBRF9OT0RFX0ZJRUxEKHZhbHVlc19saXN0cyk7Ci0J CQlSRUFEX05PREVfRklFTEQoY29sdHlwZXMpOwotCQkJUkVBRF9OT0RFX0ZJRUxEKGNvbHR5 cG1vZHMpOwotCQkJUkVBRF9OT0RFX0ZJRUxEKGNvbGNvbGxhdGlvbnMpOwotCQkJYnJlYWs7 Ci0JCWNhc2UgUlRFX0NURToKLQkJCVJFQURfU1RSSU5HX0ZJRUxEKGN0ZW5hbWUpOwotCQkJ UkVBRF9VSU5UX0ZJRUxEKGN0ZWxldmVsc3VwKTsKLQkJCVJFQURfQk9PTF9GSUVMRChzZWxm X3JlZmVyZW5jZSk7Ci0JCQlSRUFEX05PREVfRklFTEQoY29sdHlwZXMpOwotCQkJUkVBRF9O T0RFX0ZJRUxEKGNvbHR5cG1vZHMpOwotCQkJUkVBRF9OT0RFX0ZJRUxEKGNvbGNvbGxhdGlv bnMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX05BTUVEVFVQTEVTVE9SRToKLQkJCVJFQURf U1RSSU5HX0ZJRUxEKGVucm5hbWUpOwotCQkJUkVBRF9GTE9BVF9GSUVMRChlbnJ0dXBsZXMp OwotCQkJUkVBRF9OT0RFX0ZJRUxEKGNvbHR5cGVzKTsKLQkJCVJFQURfTk9ERV9GSUVMRChj b2x0eXBtb2RzKTsKLQkJCVJFQURfTk9ERV9GSUVMRChjb2xjb2xsYXRpb25zKTsKLQkJCS8q IHdlIHJlLXVzZSB0aGVzZSBSRUxBVElPTiBmaWVsZHMsIHRvbzogKi8KLQkJCVJFQURfT0lE X0ZJRUxEKHJlbGlkKTsKLQkJCWJyZWFrOwotCQljYXNlIFJURV9SRVNVTFQ6Ci0JCQkvKiBu byBleHRyYSBmaWVsZHMgKi8KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZWxvZyhFUlJP UiwgInVucmVjb2duaXplZCBSVEUga2luZDogJWQiLAotCQkJCSAoaW50KSBsb2NhbF9ub2Rl LT5ydGVraW5kKTsKLQkJCWJyZWFrOwotCX0KLQotCVJFQURfQk9PTF9GSUVMRChsYXRlcmFs KTsKLQlSRUFEX0JPT0xfRklFTEQoaW5oKTsKLQlSRUFEX0JPT0xfRklFTEQoaW5Gcm9tQ2wp OwotCVJFQURfTk9ERV9GSUVMRChzZWN1cml0eVF1YWxzKTsKLQotCVJFQURfRE9ORSgpOwot fQotCiBzdGF0aWMgQV9FeHByICoKIF9yZWFkQV9FeHByKHZvaWQpCiB7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9w YXJzZW5vZGVzLmgKaW5kZXggYTk3ZjNjYjE2Zi4uZDNiMWFmNjUzMSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVz L3BhcnNlbm9kZXMuaApAQCAtMTAxOCw4ICsxMDE4LDYgQEAgdHlwZWRlZiBlbnVtIFJURUtp bmQKIAogdHlwZWRlZiBzdHJ1Y3QgUmFuZ2VUYmxFbnRyeQogewotCXBnX25vZGVfYXR0cihj dXN0b21fcmVhZF93cml0ZSkKLQogCU5vZGVUYWcJCXR5cGU7CiAKIAlSVEVLaW5kCQlydGVr aW5kOwkJLyogc2VlIGFib3ZlICovCkBAIC0xMDMwLDYgKzEwMjgsMTQgQEAgdHlwZWRlZiBz dHJ1Y3QgUmFuZ2VUYmxFbnRyeQogCSAqIGNvZGUgdGhhdCBpcyBiZWluZyBhY3RpdmVseSB3 b3JrZWQgb24uICBGSVhNRSBzb21lZGF5LgogCSAqLwogCisJLyoKKwkgKiBGaWVsZHMgdmFs aWQgaW4gYWxsIFJURXM6CisJICoKKwkgKiBwdXQgYWxpYXMgKyBlcmVmIGZpcnN0IHRvIG1h a2UgZHVtcCBtb3JlIGxlZ2libGUKKwkgKi8KKwlBbGlhcwkgICAqYWxpYXMgcGdfbm9kZV9h dHRyKHF1ZXJ5X2p1bWJsZV9pZ25vcmUpOwkJCS8qIHVzZXItd3JpdHRlbiBhbGlhcyBjbGF1 c2UsIGlmIGFueSAqLworCUFsaWFzCSAgICplcmVmIHBnX25vZGVfYXR0cihxdWVyeV9qdW1i bGVfaWdub3JlKTsJCQkvKiBleHBhbmRlZCByZWZlcmVuY2UgbmFtZXMgKi8KKwogCS8qCiAJ ICogRmllbGRzIHZhbGlkIGZvciBhIHBsYWluIHJlbGF0aW9uIFJURSAoZWxzZSB6ZXJvKToK IAkgKgpAQCAtMTE4OCw4ICsxMTk0LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgUmFuZ2VUYmxFbnRy eQogCS8qCiAJICogRmllbGRzIHZhbGlkIGluIGFsbCBSVEVzOgogCSAqLwotCUFsaWFzCSAg ICphbGlhcyBwZ19ub2RlX2F0dHIocXVlcnlfanVtYmxlX2lnbm9yZSk7CQkJLyogdXNlci13 cml0dGVuIGFsaWFzIGNsYXVzZSwgaWYgYW55ICovCi0JQWxpYXMJICAgKmVyZWYgcGdfbm9k ZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25vcmUpOwkJCS8qIGV4cGFuZGVkIHJlZmVyZW5jZSBu YW1lcyAqLwogCWJvb2wJCWxhdGVyYWwgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25v cmUpOwkJLyogc3VicXVlcnksIGZ1bmN0aW9uLCBvciB2YWx1ZXMgaXMgTEFURVJBTD8gKi8K IAlib29sCQlpbmg7CQkJLyogaW5oZXJpdGFuY2UgcmVxdWVzdGVkPyAqLwogCWJvb2wJCWlu RnJvbUNsIHBnX25vZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdub3JlKTsJCS8qIHByZXNlbnQg aW4gRlJPTSBjbGF1c2U/ICovCi0tIAoyLjQzLjAKCg== --------------N1PpMOf8DDh6nQQHYLDzgCsZ--