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 1uOrsr-00ChAH-Hw for pgsql-hackers@arkaria.postgresql.org; Tue, 10 Jun 2025 05:50:53 +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 1uOrsp-000GzI-LO for pgsql-hackers@arkaria.postgresql.org; Tue, 10 Jun 2025 05:50:52 +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.94.2) (envelope-from ) id 1uOrsp-000Gxh-4H for pgsql-hackers@lists.postgresql.org; Tue, 10 Jun 2025 05:50:52 +0000 Received: from mail-vs1-xe30.google.com ([2607:f8b0:4864:20::e30]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uOrso-001CJJ-09 for pgsql-hackers@lists.postgresql.org; Tue, 10 Jun 2025 05:50:50 +0000 Received: by mail-vs1-xe30.google.com with SMTP id ada2fe7eead31-4e6312895d0so1636827137.3 for ; Mon, 09 Jun 2025 22:50:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749534649; x=1750139449; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=uF9hfxV3RU3VuJg8Mjo8Ii9/WVJYpSKT3KRkH8jXPqU=; b=G9Nk7icdzcfMSgOn6HcjAtAs0YzW9zdYP+W3ickbVi7MaXA7lVx3yfxY2UKw4Hx6PM b0hxig/GNskvFz+zlSivn0g3XIdVcRu/YpUSvi08D8pvJgr2au9mHldyIGZ2zNLpXj00 x9G8s6YZBTvohpT7Nt7O/jo/1eMnKUqn7qBCuodr+9/5CSXe1lL4XJVgSpz37zLo6icr B6IZIVrmxcDUjsDs27L7FUbL1FkE4gC8xcQ8pYMegZ5F0YzApq9p/kLIJqcfcWoFul3U 1uWFm6C0PWnlz8RsYaLauxoqa9lrURNOa7Q0w1eSFDVDuqDSXD/mlPMzHsT9JfWlxDl6 wHDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749534649; x=1750139449; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=uF9hfxV3RU3VuJg8Mjo8Ii9/WVJYpSKT3KRkH8jXPqU=; b=IcQqthfSrjllB/TxhazwFM71EQwhKgXhjwFopLpXdNiaw41wRI59jJqZ8R8j5zrDX0 Vl52sHmwaCSVhmKmcJhtExfv7CmKdDQmE1qDt97IzYpNSDxZ+mWdx2Up7AdLJa+ScG+K DbWsisRsFHHdytKZU44PYrOeTk2hfMTsLoLslxzF09G32ssKhPkdKFxAQCsDA9nzkcOc JbASw67BUO/IoYxmNRhBClKAsbu/7cwKY2Urzc+xfvqGBX8BLxZSsiLZMjmCeZzEeVX+ LqCFO1LH+DSI8yS5EJgrp/QiDchTqPPHCrRQJV5cBP90o3kralMP4GtQzpxzAC56OYs2 uQlw== X-Gm-Message-State: AOJu0Yz//TEifKukqIriQR51wCOloE6CKkvXaXDQFBZrU73tYIMsk/cY zAUVJlZWR4yw45chT+P+p6wXk9PGx8IxGVRecJkp2W2Aa899+lKmQfgBeardivX2ooUoDcLa9rb miB3qB7NDT6FxjREcdrUBG0bOXjAl7caxz4xT3rQ= X-Gm-Gg: ASbGnctsy9A/ipxVRiTIve+t+slPwpWSixKAPW0QqfZ4pO0bsAKUgH8WH7Qltp9j3xS ZBVYqcNawGKigy0711TiDurehuudNReKYByXQA9yCEJA1sgNkEL5gZXtNy6EGxNasEVvbP4J1y0 MCh4gYHrjhlZdn2G3Na0mBhHAJZkfZ3ccdncQ17gBUnA== X-Google-Smtp-Source: AGHT+IFZhhoKPkFLaA9veROM+HIP9hg33g1zwpPteAz7uq3reU9H+0lCCrb+h0IxfypfquGjvDEpJooGGeNIiezVjYE= X-Received: by 2002:a05:6102:3c83:b0:4e6:d629:ed41 with SMTP id ada2fe7eead31-4e77264f30fmr13808205137.0.1749534648961; Mon, 09 Jun 2025 22:50:48 -0700 (PDT) MIME-Version: 1.0 References: <171085360143.2046436.7217841141682511557.pgcf@coridan.postgresql.org> <4e2764f7-f6be-478f-8d7f-f921dbd10f5f@postgrespro.ru> <7fdaf3e8-4c05-4739-bee6-98acc068d1c7@postgrespro.ru> <4433b492-9e97-4334-96d9-ddaaa5083099@postgrespro.ru> <67ecf5fb-e63d-4284-be75-d0479eef81aa@postgrespro.ru> <884bcf9e-d6e3-4b0c-8dcb-7f2110070ac9@postgrespro.ru> In-Reply-To: <884bcf9e-d6e3-4b0c-8dcb-7f2110070ac9@postgrespro.ru> From: jian he Date: Tue, 10 Jun 2025 13:50:12 +0800 X-Gm-Features: AX0GCFsL66ewZDN70TH12IQzkUkPulEyQM0z0x70w2CnBBHLx_CUIcIgrPqXQq4 Message-ID: Subject: Re: Add SPLIT PARTITION/MERGE PARTITIONS commands To: Dmitry Koval Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000004644d706373147c4" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004644d706373147c4 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Jun 10, 2025 at 6:48=E2=80=AFAM Dmitry Koval wrote: > 3. > >i think, we can do the following way: > >if (modelRel->rd_rel->relam) > > elog(ERROR, "error"); > >relamId =3D modelRel->rd_rel->relam; > > Can you clarify what is reason to change the current AM-logic for > creating a new partition? > > + /* Look up the access method for new relation. */ > + relamId =3D (modelRel->rd_rel->relam !=3D InvalidOid) ? > modelRel->rd_rel->relam : HEAP_TABLE_AM_OID; > > (If AM is set for a partitioned table, then use it, otherwise use AM for > heap tables.) > I only want to allow HEAP_TABLE_AM_OID to be used in the merge partition, I guess that would avoid unintended consequences. I proposed change was +if (modelRel->rd_rel->relam !=3D HEAP_TABLE_AM_OID) + elog(ERROR, "only heap table method is allowed"); + relamId =3D modelRel->rd_rel->relam; RangeVarGetAndCheckCreationNamespace was called first on ATExecMergePartitions, then on createPartitionTable. Maybe we can pass the first ATExecMergePartitions call result to createPartitionTable to avoid calling it twice. CREATE TABLE pp (a int, b int) PARTITION BY LIST(a); CREATE TABLE pp_p1 PARTITION OF pp FOR VALUES IN (1, 2); CREATE TABLE pp_p2 PARTITION OF pp FOR VALUES IN (3, 4); INSERT INTO pp(a, b) SELECT random(min=3D>1, max=3D>6), random(min=3D>1::int, max=3D>10) FROM generate_series(0, 4) i; alter table pp add constraint cc check(a < 0) not valid; ALTER TABLE pp MERGE PARTITIONS (pp_p1, pp_p2) INTO pp_p1_2; src4=3D# \d+ pp_p1_2 Table "public.pp_p1_2" Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description --------+---------+-----------+----------+---------+---------+-------------= +--------------+------------- a | integer | | | | plain | | | b | integer | | | | plain | | | Partition of: pp FOR VALUES IN (1, 2, 3, 4) Partition constraint: ((a IS NOT NULL) AND (a =3D ANY (ARRAY[1, 2, 3, 4]))) Check constraints: "cc" CHECK (a < 0) Access method: heap constraint cc on pp_p1_2 should be NOT VALID. also if the partitioned table has NOT ENFORCED CHECK constraint, it will cause segfault. attached is a possible fix, and related tests.(based on v42). cosmetic changes: many of the "forach" can change to "foreach_node". for example in ATExecMergePartitions. we can change ``foreach(listptr, cmd->partlist)`` to ``foreach_node(RangeVar, name, cmd->partlist)` --0000000000004644d706373147c4 Content-Type: application/octet-stream; name="v42-0001-fix-MERGE-PARTITION-with-partitioned-table-not-enforc.no-cfbot" Content-Disposition: attachment; filename="v42-0001-fix-MERGE-PARTITION-with-partitioned-table-not-enforc.no-cfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mbq3opg80 RnJvbSBmYWUwOTBhMjBkY2RjOThhN2Q5Yzc3Y2NkMDNlM2YyMTg1ZTEwN2E2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMTAgSnVuIDIwMjUgMTM6MjE6NDQgKzA4MDAKU3ViamVjdDogW1BBVENIIHY0 MiAxLzFdIGZpeCBNRVJHRSBQQVJUSVRJT04gd2l0aCBwYXJ0aXRpb25lZCB0YWJsZSBub3QKIGVu Zm9yY2VkL3ZhbGlkIGNvbnN0cgoKYWRkIHRlc3RzIGZvciBNRVJHRSBQQVJUSVRJT04gd2hpbGUg cGFydGl0aW9uZWQgdGFibGUgaGF2ZQoqIG5vdCB2YWxpZCBub3QtbnVsbCBjb25zdHJhaW50Ciog bm90IGVuZm9yY2VkIGNoZWNrIGNvbnN0cmFpbnQKKiBub3QgdmFsaWQgY2hlY2sgY29uc3RyYWlu dAoqIG5vdCBlbmZvcmNlZCBmb3JlaWduIGtleSBjb25zdHJhaW50Ciogbm90IHZhbGlkIGZvcmVp Z24ga2V5IGNvbnN0cmFpbnQKCmFsc28gY2hhbmdlZCBjcmVhdGVUYWJsZUNvbnN0cmFpbnRzIHRv IG1ha2UgQUxURVIgVEFCTEUgTUVSR0UgUEFSVElUSU9OIHN1cHBvcnQKdGhlc2UgKG5vdCB2YWxp ZCwgbm90IGVuZm9yY2VkKSBjb25zdHJhaW50cy4KLS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL3Bn X2NvbnN0cmFpbnQuYyAgICAgICAgICAgfCAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFi bGVjbWRzLmMgICAgICAgICAgICAgIHwgMTAgKystCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3BhcnRpdGlvbl9tZXJnZS5vdXQgfCA2MiArKysrKysrKysrKysrKysrKystCiBzcmMvdGVzdC9y ZWdyZXNzL3NxbC9wYXJ0aXRpb25fbWVyZ2Uuc3FsICAgICAgfCAyOSArKysrKysrKysKIDQgZmls ZXMgY2hhbmdlZCwgOTggaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2NvbnN0cmFpbnQuYyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvcGdfY29uc3RyYWludC5jCmluZGV4IDJkNWFjMWVhODEzLi4xZjk0ODg3NmQ5OCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19jb25zdHJhaW50LmMKKysrIGIvc3JjL2JhY2tl bmQvY2F0YWxvZy9wZ19jb25zdHJhaW50LmMKQEAgLTg3NSw3ICs4NzUsNyBAQCBSZWxhdGlvbkdl dE5vdE51bGxDb25zdHJhaW50cyhPaWQgcmVsaWQsIGJvb2wgY29va2VkLCBib29sIGluY2x1ZGVf bm9pbmgpCiAJCQkJCQkJCQkJCQkJCQkgZmFsc2UpKSk7CiAJCQljb25zdHItPmlzX2VuZm9yY2Vk ID0gdHJ1ZTsKIAkJCWNvbnN0ci0+c2tpcF92YWxpZGF0aW9uID0gIWNvbkZvcm0tPmNvbnZhbGlk YXRlZDsKLQkJCWNvbnN0ci0+aW5pdGlhbGx5X3ZhbGlkID0gdHJ1ZTsKKwkJCWNvbnN0ci0+aW5p dGlhbGx5X3ZhbGlkID0gY29uRm9ybS0+Y29udmFsaWRhdGVkOwogCQkJY29uc3RyLT5pc19ub19p bmhlcml0ID0gY29uRm9ybS0+Y29ubm9pbmhlcml0OwogCQkJbm90bnVsbHMgPSBsYXBwZW5kKG5v dG51bGxzLCBjb25zdHIpOwogCQl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90 YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IGQ2Y2U4 N2RkOTY1Li4wMzc1ZTUyNTFmNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFi bGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTIyMjE1 LDYgKzIyMjE1LDcgQEAgY3JlYXRlVGFibGVDb25zdHJhaW50cyhSZWxhdGlvbiBtb2RlbFJlbCwg UmVsYXRpb24gbmV3UmVsKQogCQljaGFyCSAgICpjY2JpbiA9IGNvbnN0ci0+Y2hlY2tbY2NudW1d LmNjYmluOwogCQlib29sCQljY2VuZm9yY2VkID0gY29uc3RyLT5jaGVja1tjY251bV0uY2NlbmZv cmNlZDsKIAkJYm9vbAkJY2Nub2luaGVyaXQgPSBjb25zdHItPmNoZWNrW2NjbnVtXS5jY25vaW5o ZXJpdDsKKwkJYm9vbAkJY2N2YWxpZCA9IGNvbnN0ci0+Y2hlY2tbY2NudW1dLmNjdmFsaWQ7CiAJ CU5vZGUJICAgKmNjYmluX25vZGU7CiAJCWJvb2wJCWZvdW5kX3dob2xlX3JvdzsKIAkJQ29va2Vk Q29uc3RyYWludCAqY29va2VkOwpAQCAtMjIyNDUsNyArMjIyNDYsNyBAQCBjcmVhdGVUYWJsZUNv bnN0cmFpbnRzKFJlbGF0aW9uIG1vZGVsUmVsLCBSZWxhdGlvbiBuZXdSZWwpCiAJCWNvb2tlZC0+ YXR0bnVtID0gMDsKIAkJY29va2VkLT5leHByID0gY2NiaW5fbm9kZTsKIAkJY29va2VkLT5pc19l bmZvcmNlZCA9IGNjZW5mb3JjZWQ7Ci0JCWNvb2tlZC0+c2tpcF92YWxpZGF0aW9uID0gZmFsc2U7 CisJCWNvb2tlZC0+c2tpcF92YWxpZGF0aW9uID0gIWNjdmFsaWQ7CiAJCWNvb2tlZC0+aXNfbG9j YWwgPSB0cnVlOwogCQljb29rZWQtPmluaGNvdW50ID0gMDsKIAkJY29va2VkLT5pc19ub19pbmhl cml0ID0gY2Nub2luaGVyaXQ7CkBAIC0yMjI2Nyw3ICsyMjI2OCwxMiBAQCBjcmVhdGVUYWJsZUNv bnN0cmFpbnRzKFJlbGF0aW9uIG1vZGVsUmVsLCBSZWxhdGlvbiBuZXdSZWwpCiAJCQkJCQkJCQkJ CQkJICBmYWxzZSwgdHJ1ZSk7CiAKIAkJQXNzZXJ0KGxpc3RfbGVuZ3RoKG5uY29uc3RyYWludHMp ID4gMCk7Ci0JCUFkZFJlbGF0aW9uTm90TnVsbENvbnN0cmFpbnRzKG5ld1JlbCwgbm5jb25zdHJh aW50cywgTlVMTCk7CisKKwkJLyoKKwkJICogd2UgYWxyZWFkeSBzZXQgcGdfYXR0cmlidXRlLmF0 dG5vdG51bGwgaW4gY3JlYXRlUGFydGl0aW9uVGFibGUuICBubworCQkgKiBuZWVkIGNhbGwgc2V0 X2F0dG5vdG51bGwgYWdhaW4uCisJCSovCisJCUFkZFJlbGF0aW9uTmV3Q29uc3RyYWludHMobmV3 UmVsLCBOSUwsIG5uY29uc3RyYWludHMsIGZhbHNlLCB0cnVlLCB0cnVlLCBOVUxMKTsKIAl9CiB9 CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX21lcmdl Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX21lcmdlLm91dAppbmRl eCBmNzU0ODQ5MDM5ZS4uZmI3NDEzZDlmZWQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvcGFydGl0aW9uX21lcmdlLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3BhcnRpdGlvbl9tZXJnZS5vdXQKQEAgLTEwMzIsMjAgKzEwMzIsMjcgQEAgQ1JFQVRFIFNU QVRJU1RJQ1MgdF9zdGF0IChERVBFTkRFTkNJRVMpIG9uIGksIGIgZnJvbSB0OwogQ1JFQVRFIFNU QVRJU1RJQ1MgdHBfMF8xX3N0YXQgKERFUEVOREVOQ0lFUykgb24gaSwgYiBmcm9tIHRwXzBfMTsK IENSRUFURSBTVEFUSVNUSUNTIHRwXzFfMl9zdGF0IChERVBFTkRFTkNJRVMpIG9uIGksIGIgZnJv bSB0cF8xXzI7CiBBTFRFUiBUQUJMRSB0IEFERCBDT05TVFJBSU5UIHRfYl9jaGVjayBDSEVDSyAo YiA+IDApOworQUxURVIgVEFCTEUgdCBBREQgQ09OU1RSQUlOVCB0X2JfY2hlY2sxIENIRUNLIChi ID4gMCkgTk9UIEVORk9SQ0VEOworQUxURVIgVEFCTEUgdCBBREQgQ09OU1RSQUlOVCB0X2JfY2hl Y2syIENIRUNLIChiID4gMCkgTk9UIFZBTElEOworQUxURVIgVEFCTEUgdCBBREQgQ09OU1RSQUlO VCB0X2Jfbm4gTk9UIE5VTEwgYiBOT1QgVkFMSUQ7CiBcZCsgdHBfMF8xCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFibGUgInBhcnRpdGlvbnNfbWVyZ2Vf c2NoZW1hLnRwXzBfMSIKICBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUg fCAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgICAgICAgICAgICAgICAgICAgICB8IFN0b3Jh Z2UgfCBTdGF0cyB0YXJnZXQgfCBEZXNjcmlwdGlvbiAKIC0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KICBpICAg ICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBsYWluICAgfCAgICAgICAgICAgICAgfCB0 cF8wXzEuaQogIHQgICAgICB8IHRleHQgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8ICdkZWZh dWx0X3RwXzBfMSc6OnRleHQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbWFpbiAgICB8ICAg ICAgICAgICAgICB8IAotIGIgICAgICB8IGJpZ2ludCAgfCAgICAgICAgICAgfCAgICAgICAgICB8 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGxhaW4g ICB8ICAgICAgICAgICAgICB8IAorIGIgICAgICB8IGJpZ2ludCAgfCAgICAgICAgICAgfCBub3Qg bnVsbCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg cGxhaW4gICB8ICAgICAgICAgICAgICB8IAogIGQgICAgICB8IGRhdGUgICAgfCAgICAgICAgICAg fCAgICAgICAgICB8IGdlbmVyYXRlZCBhbHdheXMgYXMgKCcwMi0wMi0yMDIyJzo6ZGF0ZSkgc3Rv cmVkIHwgcGxhaW4gICB8ICAgICAgICAgICAgICB8IAogUGFydGl0aW9uIG9mOiB0IEZPUiBWQUxV RVMgRlJPTSAoMCkgVE8gKDEpCiBQYXJ0aXRpb24gY29uc3RyYWludDogKChhYnMoaSkgSVMgTk9U IE5VTEwpIEFORCAoYWJzKGkpID49IDApIEFORCAoYWJzKGkpIDwgMSkpCiBDaGVjayBjb25zdHJh aW50czoKICAgICAidF9iX2NoZWNrIiBDSEVDSyAoYiA+IDApCisgICAgInRfYl9jaGVjazEiIENI RUNLIChiID4gMCkgTk9UIEVORk9SQ0VECisgICAgInRfYl9jaGVjazIiIENIRUNLIChiID4gMCkg Tk9UIFZBTElECiBTdGF0aXN0aWNzIG9iamVjdHM6CiAgICAgInBhcnRpdGlvbnNfbWVyZ2Vfc2No ZW1hLnRwXzBfMV9zdGF0IiAoZGVwZW5kZW5jaWVzKSBPTiBpLCBiIEZST00gdHBfMF8xCitOb3Qt bnVsbCBjb25zdHJhaW50czoKKyAgICAidF9iX25uIiBOT1QgTlVMTCAiYiIgKGluaGVyaXRlZCkg Tk9UIFZBTElECiAKIEFMVEVSIFRBQkxFIHQgTUVSR0UgUEFSVElUSU9OUyAodHBfMF8xLCB0cF8x XzIpIElOVE8gdHBfMF8xOwogXGQrIHRwXzBfMQpAQCAtMTA1NCwxNCArMTA2MSw2NSBAQCBBTFRF UiBUQUJMRSB0IE1FUkdFIFBBUlRJVElPTlMgKHRwXzBfMSwgdHBfMV8yKSBJTlRPIHRwXzBfMTsK IC0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tCiAgaSAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAg ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBw bGFpbiAgICB8ICAgICAgICAgICAgICB8IAogIHQgICAgICB8IHRleHQgICAgfCAgICAgICAgICAg fCAgICAgICAgICB8ICdkZWZhdWx0X3QnOjp0ZXh0ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgZXh0ZW5kZWQgfCAgICAgICAgICAgICAgfCAKLSBiICAgICAgfCBiaWdpbnQgIHwgICAg ICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8IHBsYWluICAgIHwgICAgICAgICAgICAgIHwgCisgYiAgICAgIHwgYmlnaW50 ICB8ICAgICAgICAgICB8IG5vdCBudWxsIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCBwbGFpbiAgICB8ICAgICAgICAgICAgICB8IAogIGQgICAgICB8 IGRhdGUgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8IGdlbmVyYXRlZCBhbHdheXMgYXMgKCcw MS0wMS0yMDIyJzo6ZGF0ZSkgc3RvcmVkIHwgcGxhaW4gICAgfCAgICAgICAgICAgICAgfCAKIFBh cnRpdGlvbiBvZjogdCBGT1IgVkFMVUVTIEZST00gKDApIFRPICgyKQogUGFydGl0aW9uIGNvbnN0 cmFpbnQ6ICgoYWJzKGkpIElTIE5PVCBOVUxMKSBBTkQgKGFicyhpKSA+PSAwKSBBTkQgKGFicyhp KSA8IDIpKQogQ2hlY2sgY29uc3RyYWludHM6CiAgICAgInRfYl9jaGVjayIgQ0hFQ0sgKGIgPiAw KQorICAgICJ0X2JfY2hlY2sxIiBDSEVDSyAoYiA+IDApIE5PVCBFTkZPUkNFRAorICAgICJ0X2Jf Y2hlY2syIiBDSEVDSyAoYiA+IDApIE5PVCBWQUxJRAorTm90LW51bGwgY29uc3RyYWludHM6Cisg ICAgInRfYl9ubiIgTk9UIE5VTEwgImIiIChpbmhlcml0ZWQpIE5PVCBWQUxJRAogCiBEUk9QIFRB QkxFIHQ7CistLSBUZXN0IE1FUkdFIFBBUlRJVElPTlMgd2l0aCBub3QgdmFsaWQgb3Igbm90IGVu Zm9yY2VkIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQKK0NSRUFURSBUQUJMRSBwayAoaSBJTlQgUFJJ TUFSWSBLRVkpIFBBUlRJVElPTiBCWSBSQU5HRSAoaSk7CitDUkVBVEUgVEFCTEUgcGtfMSBQQVJU SVRJT04gT0YgcGsgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMSk7CitDUkVBVEUgVEFCTEUgcGtf MiBQQVJUSVRJT04gT0YgcGsgRk9SIFZBTFVFUyBGUk9NICgxKSBUTyAoMik7CitJTlNFUlQgSU5U TyBwayBWQUxVRVMgKDApLCAoMSk7CitDUkVBVEUgVEFCTEUgZmsgKGkgSU5UKTsKK0lOU0VSVCBJ TlRPIGZrIFZBTFVFUyAoMSksICgyKTsKK0FMVEVSIFRBQkxFIGZrIEFERCBDT05TVFJBSU5UIGZr X2lfZmtleSBGT1JFSUdOIEtFWSAoaSkgUkVGRVJFTkNFUyBwayBOT1QgVkFMSUQ7CitBTFRFUiBU QUJMRSBwayBNRVJHRSBQQVJUSVRJT05TIChwa18xLCBwa18yKSBJTlRPIHBrMTI7CitcZCBwazEy CisgICAgICAgVGFibGUgInBhcnRpdGlvbnNfbWVyZ2Vfc2NoZW1hLnBrMTIiCisgQ29sdW1uIHwg IFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgRGVmYXVsdCAKKy0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLQorIGkgICAgICB8IGludGVnZXIg fCAgICAgICAgICAgfCBub3QgbnVsbCB8IAorUGFydGl0aW9uIG9mOiBwayBGT1IgVkFMVUVTIEZS T00gKDApIFRPICgyKQorSW5kZXhlczoKKyAgICAicGsxMl9wa2V5IiBQUklNQVJZIEtFWSwgYnRy ZWUgKGkpCitSZWZlcmVuY2VkIGJ5OgorICAgIFRBQkxFICJmayIgQ09OU1RSQUlOVCAiZmtfaV9m a2V5IiBGT1JFSUdOIEtFWSAoaSkgUkVGRVJFTkNFUyBwayhpKSBOT1QgVkFMSUQKKworQUxURVIg VEFCTEUgZmsgdmFsaWRhdGUgY29uc3RyYWludCBma19pX2ZrZXk7IC0tZXJyb3IKK0VSUk9SOiAg aW5zZXJ0IG9yIHVwZGF0ZSBvbiB0YWJsZSAiZmsiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0 cmFpbnQgImZrX2lfZmtleSIKK0RFVEFJTDogIEtleSAoaSk9KDIpIGlzIG5vdCBwcmVzZW50IGlu IHRhYmxlICJwayIuCitEUk9QIFRBQkxFIElGIEVYSVNUUyBmaywgcGsgQ0FTQ0FERTsKK0NSRUFU RSBUQUJMRSBwayAoaSBJTlQgUFJJTUFSWSBLRVkpIFBBUlRJVElPTiBCWSBSQU5HRSAoaSk7CitD UkVBVEUgVEFCTEUgcGtfMSBQQVJUSVRJT04gT0YgcGsgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAo MSk7CitDUkVBVEUgVEFCTEUgcGtfMiBQQVJUSVRJT04gT0YgcGsgRk9SIFZBTFVFUyBGUk9NICgx KSBUTyAoMik7CitJTlNFUlQgSU5UTyBwayBWQUxVRVMgKDApLCAoMSk7CitDUkVBVEUgVEFCTEUg ZmsgKGkgSU5UKTsKK0lOU0VSVCBJTlRPIGZrIFZBTFVFUyAoMSksICgyKTsKK0FMVEVSIFRBQkxF IGZrIEFERCBDT05TVFJBSU5UIGZrX2lfZmtleSBGT1JFSUdOIEtFWSAoaSkgUkVGRVJFTkNFUyBw ayBOT1QgRU5GT1JDRUQ7CitBTFRFUiBUQUJMRSBwayBNRVJHRSBQQVJUSVRJT05TIChwa18xLCBw a18yKSBJTlRPIHBrMTI7CitcZCBwazEyCisgICAgICAgVGFibGUgInBhcnRpdGlvbnNfbWVyZ2Vf c2NoZW1hLnBrMTIiCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwg RGVmYXVsdCAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLQorIGkgICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCBub3QgbnVsbCB8IAorUGFydGl0 aW9uIG9mOiBwayBGT1IgVkFMVUVTIEZST00gKDApIFRPICgyKQorSW5kZXhlczoKKyAgICAicGsx Ml9wa2V5IiBQUklNQVJZIEtFWSwgYnRyZWUgKGkpCitSZWZlcmVuY2VkIGJ5OgorICAgIFRBQkxF ICJmayIgQ09OU1RSQUlOVCAiZmtfaV9ma2V5IiBGT1JFSUdOIEtFWSAoaSkgUkVGRVJFTkNFUyBw ayhpKSBOT1QgRU5GT1JDRUQKKworQUxURVIgVEFCTEUgZmsgQUxURVIgQ09OU1RSQUlOVCBma19p X2ZrZXkgRU5GT1JDRUQ7IC0tZXJyb3IKK0VSUk9SOiAgaW5zZXJ0IG9yIHVwZGF0ZSBvbiB0YWJs ZSAiZmsiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgImZrX2lfZmtleSIKK0RFVEFJ TDogIEtleSAoaSk9KDIpIGlzIG5vdCBwcmVzZW50IGluIHRhYmxlICJwayIuCitEUk9QIFRBQkxF IElGIEVYSVNUUyBmaywgcGsgQ0FTQ0FERTsKIFJFU0VUIHNlYXJjaF9wYXRoOwogLS0KIERST1Ag U0NIRU1BIHBhcnRpdGlvbnNfbWVyZ2Vfc2NoZW1hOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvcGFydGl0aW9uX21lcmdlLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRp dGlvbl9tZXJnZS5zcWwKaW5kZXggZjgzMjRmMDFlNWMuLmRmNDI0ZTQyZDEwIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fbWVyZ2Uuc3FsCisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9tZXJnZS5zcWwKQEAgLTY5Myw2ICs2OTMsOSBAQCBDUkVB VEUgU1RBVElTVElDUyB0cF8wXzFfc3RhdCAoREVQRU5ERU5DSUVTKSBvbiBpLCBiIGZyb20gdHBf MF8xOwogQ1JFQVRFIFNUQVRJU1RJQ1MgdHBfMV8yX3N0YXQgKERFUEVOREVOQ0lFUykgb24gaSwg YiBmcm9tIHRwXzFfMjsKIAogQUxURVIgVEFCTEUgdCBBREQgQ09OU1RSQUlOVCB0X2JfY2hlY2sg Q0hFQ0sgKGIgPiAwKTsKK0FMVEVSIFRBQkxFIHQgQUREIENPTlNUUkFJTlQgdF9iX2NoZWNrMSBD SEVDSyAoYiA+IDApIE5PVCBFTkZPUkNFRDsKK0FMVEVSIFRBQkxFIHQgQUREIENPTlNUUkFJTlQg dF9iX2NoZWNrMiBDSEVDSyAoYiA+IDApIE5PVCBWQUxJRDsKK0FMVEVSIFRBQkxFIHQgQUREIENP TlNUUkFJTlQgdF9iX25uIE5PVCBOVUxMIGIgTk9UIFZBTElEOwogCiBcZCsgdHBfMF8xCiBBTFRF UiBUQUJMRSB0IE1FUkdFIFBBUlRJVElPTlMgKHRwXzBfMSwgdHBfMV8yKSBJTlRPIHRwXzBfMTsK QEAgLTcwMCw2ICs3MDMsMzIgQEAgQUxURVIgVEFCTEUgdCBNRVJHRSBQQVJUSVRJT05TICh0cF8w XzEsIHRwXzFfMikgSU5UTyB0cF8wXzE7CiAKIERST1AgVEFCTEUgdDsKIAorLS0gVGVzdCBNRVJH RSBQQVJUSVRJT05TIHdpdGggbm90IHZhbGlkIG9yIG5vdCBlbmZvcmNlZCBmb3JlaWduIGtleSBj b25zdHJhaW50CitDUkVBVEUgVEFCTEUgcGsgKGkgSU5UIFBSSU1BUlkgS0VZKSBQQVJUSVRJT04g QlkgUkFOR0UgKGkpOworQ1JFQVRFIFRBQkxFIHBrXzEgUEFSVElUSU9OIE9GIHBrIEZPUiBWQUxV RVMgRlJPTSAoMCkgVE8gKDEpOworQ1JFQVRFIFRBQkxFIHBrXzIgUEFSVElUSU9OIE9GIHBrIEZP UiBWQUxVRVMgRlJPTSAoMSkgVE8gKDIpOworSU5TRVJUIElOVE8gcGsgVkFMVUVTICgwKSwgKDEp OworQ1JFQVRFIFRBQkxFIGZrIChpIElOVCk7CitJTlNFUlQgSU5UTyBmayBWQUxVRVMgKDEpLCAo Mik7CitBTFRFUiBUQUJMRSBmayBBREQgQ09OU1RSQUlOVCBma19pX2ZrZXkgRk9SRUlHTiBLRVkg KGkpIFJFRkVSRU5DRVMgcGsgTk9UIFZBTElEOworQUxURVIgVEFCTEUgcGsgTUVSR0UgUEFSVElU SU9OUyAocGtfMSwgcGtfMikgSU5UTyBwazEyOworXGQgcGsxMgorQUxURVIgVEFCTEUgZmsgdmFs aWRhdGUgY29uc3RyYWludCBma19pX2ZrZXk7IC0tZXJyb3IKKworRFJPUCBUQUJMRSBJRiBFWElT VFMgZmssIHBrIENBU0NBREU7CitDUkVBVEUgVEFCTEUgcGsgKGkgSU5UIFBSSU1BUlkgS0VZKSBQ QVJUSVRJT04gQlkgUkFOR0UgKGkpOworQ1JFQVRFIFRBQkxFIHBrXzEgUEFSVElUSU9OIE9GIHBr IEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEpOworQ1JFQVRFIFRBQkxFIHBrXzIgUEFSVElUSU9O IE9GIHBrIEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDIpOworSU5TRVJUIElOVE8gcGsgVkFMVUVT ICgwKSwgKDEpOworQ1JFQVRFIFRBQkxFIGZrIChpIElOVCk7CitJTlNFUlQgSU5UTyBmayBWQUxV RVMgKDEpLCAoMik7CisKK0FMVEVSIFRBQkxFIGZrIEFERCBDT05TVFJBSU5UIGZrX2lfZmtleSBG T1JFSUdOIEtFWSAoaSkgUkVGRVJFTkNFUyBwayBOT1QgRU5GT1JDRUQ7CitBTFRFUiBUQUJMRSBw ayBNRVJHRSBQQVJUSVRJT05TIChwa18xLCBwa18yKSBJTlRPIHBrMTI7CitcZCBwazEyCisKK0FM VEVSIFRBQkxFIGZrIEFMVEVSIENPTlNUUkFJTlQgZmtfaV9ma2V5IEVORk9SQ0VEOyAtLWVycm9y CitEUk9QIFRBQkxFIElGIEVYSVNUUyBmaywgcGsgQ0FTQ0FERTsKIAogUkVTRVQgc2VhcmNoX3Bh dGg7CiAKLS0gCjIuMzQuMQoK --0000000000004644d706373147c4--