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 1uovRH-00D5dO-WA for pgsql-hackers@arkaria.postgresql.org; Thu, 21 Aug 2025 02:54:09 +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 1uovRG-00DDxx-H0 for pgsql-hackers@arkaria.postgresql.org; Thu, 21 Aug 2025 02:54:07 +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 1uovRG-00DDxp-3f for pgsql-hackers@lists.postgresql.org; Thu, 21 Aug 2025 02:54:06 +0000 Received: from mail-ua1-x929.google.com ([2607:f8b0:4864:20::929]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uovRE-000wo8-0h for pgsql-hackers@lists.postgresql.org; Thu, 21 Aug 2025 02:54:05 +0000 Received: by mail-ua1-x929.google.com with SMTP id a1e0cc1a2514c-89018ec3597so282241241.0 for ; Wed, 20 Aug 2025 19:54:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755744844; x=1756349644; 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=pGeCO7uEr9KjDxT/LkukCi9K7AqA+orxW9kWvX1GsXQ=; b=CcQpRYyH0HGVk9MFbNSbuysiYC3yUSaE3x3DUD0PL8YAIKFot/E3BPoCTRo6b5FdI1 Q+7LjtAhUx8s122L9zUGKxw74RQUFAP9TmqjZEftq1RohhEt0e99tEPjQ/u4UGGfTJp9 nDR6p+4Uf0lwvVzyWLj8zG3UBAXxkmWYd/q3gwca03DhBL/6BWG3JsHV07EnFpkQyuNA NrJeEUF3igRqG/Hme06D+yMBgkEEhCglRFKOb8eTv9pCMuIhIMTPraoXWWt4PMcjd918 WkEoGu9b/+v1aUCGw3W/Z7j6EgzV/k2bYBcn0qhekQ+zKi0wWboe5j0Sswj0uQ9vNaXX wNiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755744844; x=1756349644; 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=pGeCO7uEr9KjDxT/LkukCi9K7AqA+orxW9kWvX1GsXQ=; b=lAu0xdiAzj84lXVdK6QF9VluIxayWqltRFa7bT0C95huvga6fO/qNvuBW2ZZdCg9Yh 6py5AGrPdy8LCZE4k1jdQCpPCS47ICjr1Kf77AJ9qWzdb9lpl80CU26qRMI1zGQUdYmh 4kka73bAQYo6MXt90ShvWOnIwPxstVi7NG78LuvAtZq4rbCM5wnSq/wlef0epnsMxscV gpw2T0LmrA+wDZbDMgoDkUyy7fj5Cj0YK4zlOO+YnwIqyNUpgy68fjmqxQA/PJnZiNVU 38Ve0NLt4TWje2IqeTfnsluWKEZ3Jz0O3Z6e3BUrYT8Rv44/eGwAcqisxA72i0n1NrnE JOow== X-Forwarded-Encrypted: i=1; AJvYcCXyzyJYj8doC42duxP+e87majwLJTb0e74ic6tb5+FSyYanI52qDAR5PqthYZakyU+xIrfwqP+zkp7KHhtj@lists.postgresql.org X-Gm-Message-State: AOJu0YwkrkUkl2/dRf/phYdPM4pXpumfeBxeCEvMGUACOjvedHvj9E0G wLVNVl/9WOGXrXBrN2k8skP89RGoskcL8LCm/xi9FqW0/ztBKGMlV7yirIzjQSE6d83FCmJz9Kp SzcQvnqBn4UyKCiTSBgx3PqP40g7lZdw= X-Gm-Gg: ASbGncv0eYQKM9bNmgh43EnDtJbPfTxzqZ01mM+WNSt8aKEMhBcuR2cM4nj+JeRW6Xj QJmjHySt6UvJlxqtpAFsDMNjc2Uf0glBs/pfgEW4Kw0ARQZ+FnHkrmRJwhugTuQM7C/uyM1a5K9 HioTJ9y+ZR2R+gKA0JA7Oxxe5iHT3UyOrZSsRadcyyk9c3vJHBJBr9m9zcGz8sMQsrq+jVlY0ct EBCLdjq6+IX476D97INhNTZV0t7y+JVmz5AYlQ= X-Google-Smtp-Source: AGHT+IEfZB/455XLGc8o1OYjxq+F2piIUvu4YvcDKVRhCl/Lbj111aEDhkzWrI0cdjyVURoBy3WCcdyOw0N/t1JhrkM= X-Received: by 2002:a05:6102:3f02:b0:511:db31:acc2 with SMTP id ada2fe7eead31-51bdf0401a2mr297984137.4.1755744843687; Wed, 20 Aug 2025 19:54:03 -0700 (PDT) MIME-Version: 1.0 References: <171085360143.2046436.7217841141682511557.pgcf@coridan.postgresql.org> <0b3907b4-83b9-4873-9feb-2b60b29cda33@postgrespro.ru> <4f19550b-eb41-4649-8bf5-566dc020a720@postgrespro.ru> <195b67ee-ef41-4451-9396-844442eef1a4@postgrespro.ru> In-Reply-To: From: jian he Date: Thu, 21 Aug 2025 10:53:27 +0800 X-Gm-Features: Ac12FXyjQrnBoB6Tf7DKWdle6Jll8-dZ6_E8SgeLmBoFWSSdPPlbPlYaYBv3hr8 Message-ID: Subject: Re: Add SPLIT PARTITION/MERGE PARTITIONS commands To: Dmitry Koval Cc: Alexander Korotkov , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000b9993c063cd7337b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b9993c063cd7337b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Aug 20, 2025 at 5:22=E2=80=AFPM jian he wrote: > > this time, I only checked > v52-0001-Implement-ALTER-TABLE-.-MERGE-PARTITIONS-.-comma.patch > > typedef struct PartitionCmd > { > NodeTag type; > RangeVar *name; /* name of partition to attach/detach/me= rge */ > PartitionBoundSpec *bound; /* FOR VALUES, if attaching */ > List *partlist; /* list of partitions, for MERGE PARTITI= ON > * command */ > bool concurrent; > } PartitionCmd; /* * PartitionCmd - info for ALTER TABLE/INDEX ATTACH/DETACH PARTITION comman= ds */ typedef struct PartitionCmd the above comments also need to be updated? +-- Use indexscan for testing indexes after merging partitions +SET enable_seqscan =3D OFF; + +SELECT * FROM sales_all WHERE sales_state =3D 'Warsaw'; +SELECT * FROM sales_list WHERE sales_state =3D 'Warsaw'; +SELECT * FROM sales_list WHERE salesperson_name =3D 'Ivanov'; + +RESET enable_seqscan; ``+SELECT * FROM sales_all WHERE sales_state =3D 'Warsaw';`` may ultimately fall back to using seqscan? so we need to use ``explain(costs off)`` to see if it use indexscan or not. + /* + * We reject whole-row variables because the whole point of LIKE is + * that the new table's rowtype might later diverge from the parent's. + * So, while translation might be possible right now, it wouldn't be + * possible to guarantee it would work in future. + */ + if (found_whole_row) + ereport(ERROR, + errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot convert whole-row table reference"), + errdetail("Constraint \"%s\" contains a whole-row reference to table \"%s= \".", + ccname, + RelationGetRelationName(parent_rel))); this error is unlikely to happen, we can simply use elog(ERROR, ....), rather than ereport. evaluateGeneratedExpressionsAndCheckConstraints seem not necessary? we should make the MergePartitionsMoveRows code pattern aligned with ATRewriteTable. by comparing these two function, i found that before call table_scan_getnex= tslot we need to switch memory context to EState->ecxt_per_tuple_memor please check the attached changes. --000000000000b9993c063cd7337b Content-Type: application/octet-stream; name="v52-0001-refactor-MergePartitionsMoveRows.no-cfbot" Content-Disposition: attachment; filename="v52-0001-refactor-MergePartitionsMoveRows.no-cfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mekt3t9t0 RnJvbSBhODliY2U0ZjM5YzE2ZGM5ZTNhZDI0NzQwMWIyMzg1NTRlNTIwYjg3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFRodSwgMjEgQXVnIDIwMjUgMTA6NDk6NTAgKzA4MDAKU3ViamVjdDogW1BBVENIIHY1 MiAxLzFdIHJlZmFjdG9yIE1lcmdlUGFydGl0aW9uc01vdmVSb3dzCgptYWlubHkgbWFrZSBNZXJn ZVBhcnRpdGlvbnNNb3ZlUm93cyBtb3JlIGFsaWduZWQgd2l0aCBBVFJld3JpdGVUYWJsZS4KYmFz ZWQgb24gdjUyLTAwMDEtSW1wbGVtZW50LUFMVEVSLVRBQkxFLS4tTUVSR0UtUEFSVElUSU9OUy0u LWNvbW1hLnBhdGNoCgphbHNvIGNvbnZlcnQgb25lIGVyZXBvcnQoRVJST1IuLi4pIHRvIGVsb2co RVJST1IgLi4uKQp3aXRoaW4gY3JlYXRlVGFibGVDb25zdHJhaW50cy4KLS0tCiBzcmMvYmFja2Vu ZC9jb21tYW5kcy90YWJsZWNtZHMuYyB8IDEwNSArKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0t LS0tCiAxIGZpbGUgY2hhbmdlZCwgNDggaW5zZXJ0aW9ucygrKSwgNTcgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCBjYzI0YTkyYzUwNC4uOWVjZDE4MzgwNzcgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC0yMjEzMyw1MiArMjIxMzMsNiBAQCBidWlsZEV4 cHJlc3Npb25FeGVjdXRpb25TdGF0ZXMoQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbiBu ZXdQYXJ0UmVsLCBFU3RhdAogCX0KIH0KIAotLyoKLSAqIGV2YWx1YXRlR2VuZXJhdGVkRXhwcmVz c2lvbnNBbmRDaGVja0NvbnN0cmFpbnRzOiBldmFsdWF0ZSBhbnkgZ2VuZXJhdGVkCi0gKiBleHBy ZXNzaW9ucyBmb3IgInRhYiIgKEFsdGVyZWRUYWJsZUluZm8gc3RydWN0dXJlKSB3aG9zZSBpbnB1 dHMgY29tZSBmcm9tCi0gKiB0aGUgbmV3IHR1cGxlIChpbnNlcnRzbG90KSBvZiBuZXcgcGFydGl0 aW9uIChuZXdQYXJ0UmVsKS4KLSAqLwotc3RhdGljIHZvaWQKLWV2YWx1YXRlR2VuZXJhdGVkRXhw cmVzc2lvbnNBbmRDaGVja0NvbnN0cmFpbnRzKEFsdGVyZWRUYWJsZUluZm8gKnRhYiwKLQkJCQkJ CQkJCQkJCVJlbGF0aW9uIG5ld1BhcnRSZWwsCi0JCQkJCQkJCQkJCQlUdXBsZVRhYmxlU2xvdCAq aW5zZXJ0c2xvdCwKLQkJCQkJCQkJCQkJCUV4cHJDb250ZXh0ICplY29udGV4dCkKLXsKLQllY29u dGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBpbnNlcnRzbG90OwotCi0JZm9yZWFjaF9wdHIoTmV3Q29s dW1uVmFsdWUsIGV4LCB0YWItPm5ld3ZhbHMpCi0JewotCQlpZiAoIWV4LT5pc19nZW5lcmF0ZWQp Ci0JCQljb250aW51ZTsKLQotCQlpbnNlcnRzbG90LT50dHNfdmFsdWVzW2V4LT5hdHRudW0gLSAx XQotCQkJPSBFeGVjRXZhbEV4cHIoZXgtPmV4cHJzdGF0ZSwKLQkJCQkJCSAgIGVjb250ZXh0LAot CQkJCQkJICAgJmluc2VydHNsb3QtPnR0c19pc251bGxbZXgtPmF0dG51bSAtIDFdKTsKLQl9Ci0K LQlmb3JlYWNoX3B0cihOZXdDb25zdHJhaW50LCBjb24sIHRhYi0+Y29uc3RyYWludHMpCi0Jewot CQlzd2l0Y2ggKGNvbi0+Y29udHlwZSkKLQkJewotCQkJY2FzZSBDT05TVFJfQ0hFQ0s6Ci0JCQkJ aWYgKCFFeGVjQ2hlY2soY29uLT5xdWFsc3RhdGUsIGVjb250ZXh0KSkKLQkJCQkJZXJlcG9ydChF UlJPUiwKLQkJCQkJCQllcnJjb2RlKEVSUkNPREVfQ0hFQ0tfVklPTEFUSU9OKSwKLQkJCQkJCQll cnJtc2coImNoZWNrIGNvbnN0cmFpbnQgXCIlc1wiIG9mIHJlbGF0aW9uIFwiJXNcIiBpcyB2aW9s YXRlZCBieSBzb21lIHJvdyIsCi0JCQkJCQkJCSAgIGNvbi0+bmFtZSwgUmVsYXRpb25HZXRSZWxh dGlvbk5hbWUobmV3UGFydFJlbCkpLAotCQkJCQkJCWVycnRhYmxlY29uc3RyYWludChuZXdQYXJ0 UmVsLCBjb24tPm5hbWUpKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQ09OU1RSX05PVE5VTEw6Ci0J CQljYXNlIENPTlNUUl9GT1JFSUdOOgotCQkJCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSAqLwotCQkJ CWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGNvbnN0 cmFpbnQgdHlwZTogJWQiLAotCQkJCQkgKGludCkgY29uLT5jb250eXBlKTsKLQkJfQotCX0KLX0K IAogLyoKICAqIGdldEF0dHJpYnV0ZXNMaXN0OiBidWlsZCBhIGxpc3Qgb2YgY29sdW1ucyAoQ29s dW1uRGVmKSBiYXNlZCBvbiBwYXJlbnRfcmVsCkBAIC0yMjM2MywxMiArMjIzMTcsOSBAQCBjcmVh dGVUYWJsZUNvbnN0cmFpbnRzKExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwK IAkJICogcG9zc2libGUgdG8gZ3VhcmFudGVlIGl0IHdvdWxkIHdvcmsgaW4gZnV0dXJlLgogCQkg Ki8KIAkJaWYgKGZvdW5kX3dob2xlX3JvdykKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCWVycmNv ZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAotCQkJCQllcnJtc2coImNhbm5vdCBj b252ZXJ0IHdob2xlLXJvdyB0YWJsZSByZWZlcmVuY2UiKSwKLQkJCQkJZXJyZGV0YWlsKCJDb25z dHJhaW50IFwiJXNcIiBjb250YWlucyBhIHdob2xlLXJvdyByZWZlcmVuY2UgdG8gdGFibGUgXCIl c1wiLiIsCi0JCQkJCQkJICBjY25hbWUsCi0JCQkJCQkJICBSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShwYXJlbnRfcmVsKSkpOworCQkJZWxvZyhFUlJPUiwgIkNvbnN0cmFpbnQgXCIlc1wiIGNvbnRh aW5zIGEgd2hvbGUtcm93IHJlZmVyZW5jZSB0byB0YWJsZSBcIiVzXCIuIiwKKwkJCQkJCSBjY25h bWUsCisJCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocGFyZW50X3JlbCkpOwogCiAJCWNv bnN0ciA9IG1ha2VOb2RlKENvbnN0cmFpbnQpOwogCQljb25zdHItPmNvbnR5cGUgPSBDT05TVFJf Q0hFQ0s7CkBAIC0yMjU4MCw3ICsyMjUzMSw2IEBAIE1lcmdlUGFydGl0aW9uc01vdmVSb3dzKExp c3QgKip3cXVldWUsIExpc3QgKm1lcmdpbmdQYXJ0aXRpb25zLCBSZWxhdGlvbiBuZXdQYXJ0CiB7 CiAJQ29tbWFuZElkCW15Y2lkOwogCUVTdGF0ZQkgICAqZXN0YXRlOwotCUV4cHJDb250ZXh0ICpl Y29udGV4dDsKIAlBbHRlcmVkVGFibGVJbmZvICp0YWI7CiAJTGlzdENlbGwgICAqbHRhYjsKIApA QCAtMjI1OTcsOCArMjI1NDcsNiBAQCBNZXJnZVBhcnRpdGlvbnNNb3ZlUm93cyhMaXN0ICoqd3F1 ZXVlLCBMaXN0ICptZXJnaW5nUGFydGl0aW9ucywgUmVsYXRpb24gbmV3UGFydAogCiAJYnVpbGRF eHByZXNzaW9uRXhlY3V0aW9uU3RhdGVzKHRhYiwgbmV3UGFydFJlbCwgZXN0YXRlKTsKIAotCWVj b250ZXh0ID0gR2V0UGVyVHVwbGVFeHByQ29udGV4dChlc3RhdGUpOwotCiAJbXljaWQgPSBHZXRD dXJyZW50Q29tbWFuZElkKHRydWUpOwogCiAJLyogUHJlcGFyZSBhIEJ1bGtJbnNlcnRTdGF0ZSBm b3IgdGFibGVfdHVwbGVfaW5zZXJ0LiAqLwpAQCAtMjI2MDksMTIgKzIyNTU3LDE2IEBAIE1lcmdl UGFydGl0aW9uc01vdmVSb3dzKExpc3QgKip3cXVldWUsIExpc3QgKm1lcmdpbmdQYXJ0aXRpb25z LCBSZWxhdGlvbiBuZXdQYXJ0CiAKIAlmb3JlYWNoX29pZChtZXJnaW5nX29pZCwgbWVyZ2luZ1Bh cnRpdGlvbnMpCiAJeworCQlFeHByQ29udGV4dCAqZWNvbnRleHQ7CiAJCVR1cGxlVGFibGVTbG90 ICpzcmNzbG90OwogCQlUdXBsZUNvbnZlcnNpb25NYXAgKnR1cGxlX21hcDsKIAkJVGFibGVTY2Fu RGVzYyBzY2FuOworCQlNZW1vcnlDb250ZXh0IG9sZEN4dDsKIAkJU25hcHNob3QJc25hcHNob3Q7 CiAJCVJlbGF0aW9uCW1lcmdpbmdQYXJ0aXRpb247CiAKKwkJZWNvbnRleHQgPSBHZXRQZXJUdXBs ZUV4cHJDb250ZXh0KGVzdGF0ZSk7CisKIAkJLyoKIAkJICogUGFydGl0aW9uIGlzIGFscmVhZHkg bG9ja2VkIGluIHRoZSB0cmFuc2Zvcm1QYXJ0aXRpb25DbWRGb3JNZXJnZQogCQkgKiBmdW5jdGlv bi4KQEAgLTIyNjM1LDYgKzIyNTg3LDEyIEBAIE1lcmdlUGFydGl0aW9uc01vdmVSb3dzKExpc3Qg Kip3cXVldWUsIExpc3QgKm1lcmdpbmdQYXJ0aXRpb25zLCBSZWxhdGlvbiBuZXdQYXJ0CiAJCXNu YXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hvdChHZXRMYXRlc3RTbmFwc2hvdCgpKTsKIAkJc2NhbiA9 IHRhYmxlX2JlZ2luc2NhbihtZXJnaW5nUGFydGl0aW9uLCBzbmFwc2hvdCwgMCwgTlVMTCk7CiAK KwkJLyoKKwkJICogU3dpdGNoIHRvIHBlci10dXBsZSBtZW1vcnkgY29udGV4dCBhbmQgcmVzZXQg aXQgZm9yIGVhY2ggdHVwbGUKKwkJICogcHJvZHVjZWQsIHNvIHdlIGRvbid0IGxlYWsgbWVtb3J5 LgorCQkgKi8KKwkJb2xkQ3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEdldFBlclR1cGxlTWVt b3J5Q29udGV4dChlc3RhdGUpKTsKKwogCQl3aGlsZSAodGFibGVfc2Nhbl9nZXRuZXh0c2xvdChz Y2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc3Jjc2xvdCkpCiAJCXsKIAkJCVR1cGxlVGFibGVT bG90ICppbnNlcnRzbG90OwpAQCAtMjI2NzYsOSArMjI2MzQsNDEgQEAgTWVyZ2VQYXJ0aXRpb25z TW92ZVJvd3MoTGlzdCAqKndxdWV1ZSwgTGlzdCAqbWVyZ2luZ1BhcnRpdGlvbnMsIFJlbGF0aW9u IG5ld1BhcnQKIAkJCSAqIHRoZSBuZXcgdHVwbGUuICBXZSBhc3N1bWUgdGhlc2UgY29sdW1ucyB3 b24ndCByZWZlcmVuY2UgZWFjaAogCQkJICogb3RoZXIsIHNvIHRoYXQgdGhlcmUncyBubyBvcmRl cmluZyBkZXBlbmRlbmN5LgogCQkJICovCi0JCQlldmFsdWF0ZUdlbmVyYXRlZEV4cHJlc3Npb25z QW5kQ2hlY2tDb25zdHJhaW50cyh0YWIsIG5ld1BhcnRSZWwsCi0JCQkJCQkJCQkJCQkJCQlpbnNl cnRzbG90LCBlY29udGV4dCk7CisJCQllY29udGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBpbnNlcnRz bG90OwogCisJCQlmb3JlYWNoX3B0cihOZXdDb2x1bW5WYWx1ZSwgZXgsIHRhYi0+bmV3dmFscykK KwkJCXsKKwkJCQlpZiAoIWV4LT5pc19nZW5lcmF0ZWQpCisJCQkJCWNvbnRpbnVlOworCisJCQkJ aW5zZXJ0c2xvdC0+dHRzX3ZhbHVlc1tleC0+YXR0bnVtIC0gMV0KKwkJCQkJPSBFeGVjRXZhbEV4 cHIoZXgtPmV4cHJzdGF0ZSwKKwkJCQkJCQkJZWNvbnRleHQsCisJCQkJCQkJCSZpbnNlcnRzbG90 LT50dHNfaXNudWxsW2V4LT5hdHRudW0gLSAxXSk7CisJCQl9CisKKwkJCS8qIE5vdyBjaGVjayBh bnkgY29uc3RyYWludHMgKi8KKwkJCWZvcmVhY2hfcHRyKE5ld0NvbnN0cmFpbnQsIGNvbiwgdGFi LT5jb25zdHJhaW50cykKKwkJCXsKKwkJCQlzd2l0Y2ggKGNvbi0+Y29udHlwZSkKKwkJCQl7CisJ CQkJCWNhc2UgQ09OU1RSX0NIRUNLOgorCQkJCQkJaWYgKCFFeGVjQ2hlY2soY29uLT5xdWFsc3Rh dGUsIGVjb250ZXh0KSkKKwkJCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCQkJZXJyY29kZShF UlJDT0RFX0NIRUNLX1ZJT0xBVElPTiksCisJCQkJCQkJCQllcnJtc2coImNoZWNrIGNvbnN0cmFp bnQgXCIlc1wiIG9mIHJlbGF0aW9uIFwiJXNcIiBpcyB2aW9sYXRlZCBieSBzb21lIHJvdyIsCisJ CQkJCQkJCQkJICAgY29uLT5uYW1lLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShuZXdQYXJ0UmVs KSksCisJCQkJCQkJCQllcnJ0YWJsZWNvbnN0cmFpbnQobmV3UGFydFJlbCwgY29uLT5uYW1lKSk7 CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBDT05TVFJfTk9UTlVMTDoKKwkJCQkJY2FzZSBDT05T VFJfRk9SRUlHTjoKKwkJCQkJCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSAqLworCQkJCQkJYnJlYWs7 CisJCQkJCWRlZmF1bHQ6CisJCQkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGNvbnN0cmFp bnQgdHlwZTogJWQiLAorCQkJCQkJCQkJKGludCkgY29uLT5jb250eXBlKTsKKwkJCQl9CisJCQl9 CiAJCQkvKiBXcml0ZSB0aGUgdHVwbGUgb3V0IHRvIHRoZSBuZXcgcmVsYXRpb24uICovCiAJCQl0 YWJsZV90dXBsZV9pbnNlcnQobmV3UGFydFJlbCwgaW5zZXJ0c2xvdCwgbXljaWQsCiAJCQkJCQkJ ICAgdGlfb3B0aW9ucywgYmlzdGF0ZSk7CkBAIC0yMjY4Niw2ICsyMjY3Niw3IEBAIE1lcmdlUGFy dGl0aW9uc01vdmVSb3dzKExpc3QgKip3cXVldWUsIExpc3QgKm1lcmdpbmdQYXJ0aXRpb25zLCBS ZWxhdGlvbiBuZXdQYXJ0CiAJCQlSZXNldEV4cHJDb250ZXh0KGVjb250ZXh0KTsKIAkJfQogCisJ CU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRDeHQpOwogCQl0YWJsZV9lbmRzY2FuKHNjYW4pOwog CQlVbnJlZ2lzdGVyU25hcHNob3Qoc25hcHNob3QpOwogCi0tIAoyLjM0LjEKCg== --000000000000b9993c063cd7337b--