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 1rwOEi-001K6S-0s for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Apr 2024 15:27:12 +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 1rwOEf-00Do8f-Ns for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Apr 2024 15:27:09 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rwOEf-00Do8X-04 for pgsql-hackers@lists.postgresql.org; Mon, 15 Apr 2024 15:27:09 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rwOEX-002z1W-6z for pgsql-hackers@lists.postgresql.org; Mon, 15 Apr 2024 15:27:07 +0000 Received: from [172.30.11.66] (unknown [172.30.11.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: d.koval@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 9575BE20E94; Mon, 15 Apr 2024 18:26:57 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1713194817; bh=sokp0yQj7WkfMJ8hk+iEtBSQHyZHGV5Iqn7PfJwxokw=; h=Message-ID:Date:User-Agent:Subject:To:Cc:References:From: In-Reply-To:From; b=d1kFhcTkXgd2cBzjoN/FumD+s0TWkuXGEYW7eVFNs8ja6UuCbhyZI5hSDw06B57RS 32bMZ8NEI0JJyNHW+b6SuMjHYee4Lg80GsCY5orkl3rs5KsQ8i60Mt7ZweCnbg9SGB YDrWRx3VJzXIwE0qq6y/LkUhHvdEbgzhEfkcJZ3Ug3hQIHOkHKNCtj0/PAKi21diXA YDsroNMR4D3pBsgTMhtRQR2VRhJ/g01xpgD8lbFgUmtCL+xqBlMBfGao7SnK0RE3dw J/y9AzVc99DC5qEaUSM9YE3ktMTUsziPujowAlOsCg2fUm82eEO3oFHBGTeQekyoCt RJibJgk2rq+Vw== Content-Type: multipart/mixed; boundary="------------MAVXX70SfIkFmPpxo3OUXQLn" Message-ID: <56e0000c-6b39-44ce-90b4-d3c3062e408c@postgrespro.ru> Date: Mon, 15 Apr 2024 18:26:56 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Add SPLIT PARTITION/MERGE PARTITIONS commands To: Alexander Korotkov Cc: Alexander Lakhin , Robert Haas , PostgreSQL Hackers References: <86bfd241-a58c-479a-9a72-2c67a02becf8@postgrespro.ru> <0f655bcd-6487-4179-f9cf-c248efbad510@gmail.com> Content-Language: en-US From: Dmitry Koval In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------MAVXX70SfIkFmPpxo3OUXQLn Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi! > Please, find a my version of this fix attached. Is it possible to make a small addition to the file v6-0001 ... .patch (see attachment)? Most important: 1) Line 19: + mergePartName = makeRangeVar(cmd->name->schemaname, tmpRelName, -1); (temporary table should use the same schema as the partition); 2) Lines 116-123: +RESET search_path; + +-- Can't merge persistent partitions into a temporary partition +ALTER TABLE t MERGE PARTITIONS (tp_0_1, tp_1_2) INTO pg_temp.tp_0_2; + +SET search_path = pg_temp, public; (Alexandr Lakhin's test for using of pg_temp schema explicitly). The rest of the changes in v6_afterfix.diff are not very important and can be ignored. -- With best regards, Dmitry Koval Postgres Professional: http://postgrespro.com --------------MAVXX70SfIkFmPpxo3OUXQLn Content-Type: text/plain; charset=UTF-8; name="v6_afterfix.diff" Content-Disposition: attachment; filename="v6_afterfix.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggYzZjZTdiOTRkOS4uYmNlNWUzOWI2 NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTIxMTMwLDYgKzIxMTMwLDcg QEAgbW92ZVNwbGl0VGFibGVSb3dzKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gc3BsaXRSZWws IExpc3QgKnBhcnRsaXN0LCBMaXN0ICpuZXdQYXIKICAqCiAgKiBFbXVsYXRlcyBjb21tYW5k OiBDUkVBVEUgW1RFTVBdIFRBQkxFIDxuZXdQYXJ0TmFtZT4gKExJS0UgPG1vZGVsUmVsTmFt ZT4KICAqIElOQ0xVRElORyBBTEwgRVhDTFVESU5HIElOREVYRVMgRVhDTFVESU5HIElERU5U SVRZKQorICogRnVuY3Rpb24gbG9ja3MgY3JlYXRlZCByZWxhdGlvbiBpbiBBY2Nlc3NFeGNs dXNpdmVMb2NrIG1vZGUgYW5kIHJldHVybnMgaXQuCiAgKi8KIHN0YXRpYyBSZWxhdGlvbgog Y3JlYXRlUGFydGl0aW9uVGFibGUoUmVsYXRpb24gcmVsLCBSYW5nZVZhciAqbmV3UGFydE5h bWUsIFJhbmdlVmFyICptb2RlbFJlbE5hbWUsCkBAIC0yMTUwMCw4ICsyMTUwMSw3IEBAIEFU RXhlY01lcmdlUGFydGl0aW9ucyhMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0 YWIsIFJlbGF0aW9uIHJlbCwKIAl7CiAJCS8qIENyZWF0ZSBwYXJ0aXRpb24gdGFibGUgd2l0 aCBnZW5lcmF0ZWQgdGVtcGFyYXJ5IG5hbWUuICovCiAJCXNwcmludGYodG1wUmVsTmFtZSwg Im1lcmdlLSV1LSVYLXRtcCIsIFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgTXlQcm9jUGlkKTsK LQkJbWVyZ2VQYXJ0TmFtZSA9IG1ha2VSYW5nZVZhcihnZXRfbmFtZXNwYWNlX25hbWUoUmVs YXRpb25HZXROYW1lc3BhY2UocmVsKSksCi0JCQkJCQkJCQkgdG1wUmVsTmFtZSwgLTEpOwor CQltZXJnZVBhcnROYW1lID0gbWFrZVJhbmdlVmFyKGNtZC0+bmFtZS0+c2NoZW1hbmFtZSwg dG1wUmVsTmFtZSwgLTEpOwogCX0KIAogCW5ld1BhcnRSZWwgPSBjcmVhdGVQYXJ0aXRpb25U YWJsZShyZWwsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRp dGlvbl9tZXJnZS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9t ZXJnZS5vdXQKaW5kZXggYjFkMGI1MGIwYi4uMGE0MDIyZjcxNCAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fbWVyZ2Uub3V0CisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX21lcmdlLm91dApAQCAtNzkzLDIzICs3 OTMsNTggQEAgU0VMRUNUIGluZGV4bmFtZSBGUk9NIHBnX2luZGV4ZXMgV0hFUkUgdGFibGVu YW1lID0gJ3RwXzFfMic7CiAKIERST1AgVEFCTEUgdDsKIC0tCi0tLSBUcnkgY3JlYXRpbmcg YSBwYXJ0aXRpb24gaW4gdGhlIHRlbXBvcmFyeSBzY2hlbWEuCistLSBUcnkgbWl4aW5nIHBl cm1hbmVudCBhbmQgdGVtcG9yYXJ5IHBhcnRpdGlvbnMuCiAtLQogU0VUIHNlYXJjaF9wYXRo ID0gcHVibGljLCBwZ190ZW1wOwogQ1JFQVRFIFRBQkxFIHQgKGkgaW50KSBQQVJUSVRJT04g QlkgUkFOR0UgKGkpOwogQ1JFQVRFIFRBQkxFIHRwXzBfMSBQQVJUSVRJT04gT0YgdCBGT1Ig VkFMVUVTIEZST00gKDApIFRPICgxKTsKIENSRUFURSBUQUJMRSB0cF8xXzIgUEFSVElUSU9O IE9GIHQgRk9SIFZBTFVFUyBGUk9NICgxKSBUTyAoMik7CitTRUxFQ1QgYy5vaWQ6OnBnX2Nh dGFsb2cucmVnY2xhc3MsIGMucmVscGVyc2lzdGVuY2UgRlJPTSBwZ19jYXRhbG9nLnBnX2Ns YXNzIGMgV0hFUkUgYy5vaWQgPSAndCc6OnJlZ2NsYXNzOworIG9pZCB8IHJlbHBlcnNpc3Rl bmNlIAorLS0tLS0rLS0tLS0tLS0tLS0tLS0tLQorIHQgICB8IHAKKygxIHJvdykKKworU0VM RUNUIGMub2lkOjpwZ19jYXRhbG9nLnJlZ2NsYXNzLCBwZ19jYXRhbG9nLnBnX2dldF9leHBy KGMucmVscGFydGJvdW5kLCBjLm9pZCksIGMucmVscGVyc2lzdGVuY2UKKyAgRlJPTSBwZ19j YXRhbG9nLnBnX2NsYXNzIGMsIHBnX2NhdGFsb2cucGdfaW5oZXJpdHMgaQorICBXSEVSRSBj Lm9pZCA9IGkuaW5ocmVsaWQgQU5EIGkuaW5ocGFyZW50ID0gJ3QnOjpyZWdjbGFzcworICBP UkRFUiBCWSBwZ19jYXRhbG9nLnBnX2dldF9leHByKGMucmVscGFydGJvdW5kLCBjLm9pZCkg PSAnREVGQVVMVCcsIGMub2lkOjpwZ19jYXRhbG9nLnJlZ2NsYXNzOjpwZ19jYXRhbG9nLnRl eHQ7CisgIG9pZCAgIHwgICAgICAgIHBnX2dldF9leHByICAgICAgICAgfCByZWxwZXJzaXN0 ZW5jZSAKKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLQorIHRwXzBfMSB8IEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEpIHwgcAorIHRw XzFfMiB8IEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDIpIHwgcAorKDIgcm93cykKKwogU0VU IHNlYXJjaF9wYXRoID0gcGdfdGVtcCwgcHVibGljOwogLS0gQ2FuJ3QgbWVyZ2UgcGVyc2lz dGVudCBwYXJ0aXRpb25zIGludG8gYSB0ZW1wb3JhcnkgcGFydGl0aW9uCiBBTFRFUiBUQUJM RSB0IE1FUkdFIFBBUlRJVElPTlMgKHRwXzBfMSwgdHBfMV8yKSBJTlRPIHRwXzBfMjsKIEVS Uk9SOiAgY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSByZWxhdGlvbiBhcyBwYXJ0aXRpb24g b2YgcGVybWFuZW50IHJlbGF0aW9uICJ0IgorUkVTRVQgc2VhcmNoX3BhdGg7CistLSBDYW4n dCBtZXJnZSBwZXJzaXN0ZW50IHBhcnRpdGlvbnMgaW50byBhIHRlbXBvcmFyeSBwYXJ0aXRp b24KK0FMVEVSIFRBQkxFIHQgTUVSR0UgUEFSVElUSU9OUyAodHBfMF8xLCB0cF8xXzIpIElO VE8gcGdfdGVtcC50cF8wXzI7CitFUlJPUjogIGNhbm5vdCBjcmVhdGUgYSB0ZW1wb3Jhcnkg cmVsYXRpb24gYXMgcGFydGl0aW9uIG9mIHBlcm1hbmVudCByZWxhdGlvbiAidCIKIERST1Ag VEFCTEUgdDsKLURST1AgVEFibGUgdHBfMF8yOwotRVJST1I6ICB0YWJsZSAidHBfMF8yIiBk b2VzIG5vdCBleGlzdAorU0VUIHNlYXJjaF9wYXRoID0gcGdfdGVtcCwgcHVibGljOwogQkVH SU47CiBDUkVBVEUgVEFCTEUgdCAoaSBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaSk7CiBD UkVBVEUgVEFCTEUgdHBfMF8xIFBBUlRJVElPTiBPRiB0IEZPUiBWQUxVRVMgRlJPTSAoMCkg VE8gKDEpOwogQ1JFQVRFIFRBQkxFIHRwXzFfMiBQQVJUSVRJT04gT0YgdCBGT1IgVkFMVUVT IEZST00gKDEpIFRPICgyKTsKK1NFTEVDVCBjLm9pZDo6cGdfY2F0YWxvZy5yZWdjbGFzcywg Yy5yZWxwZXJzaXN0ZW5jZSBGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3MgYyBXSEVSRSBjLm9p ZCA9ICd0Jzo6cmVnY2xhc3M7Cisgb2lkIHwgcmVscGVyc2lzdGVuY2UgCistLS0tLSstLS0t LS0tLS0tLS0tLS0tCisgdCAgIHwgdAorKDEgcm93KQorCitTRUxFQ1QgYy5vaWQ6OnBnX2Nh dGFsb2cucmVnY2xhc3MsIHBnX2NhdGFsb2cucGdfZ2V0X2V4cHIoYy5yZWxwYXJ0Ym91bmQs IGMub2lkKSwgYy5yZWxwZXJzaXN0ZW5jZQorICBGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3Mg YywgcGdfY2F0YWxvZy5wZ19pbmhlcml0cyBpCisgIFdIRVJFIGMub2lkID0gaS5pbmhyZWxp ZCBBTkQgaS5pbmhwYXJlbnQgPSAndCc6OnJlZ2NsYXNzCisgIE9SREVSIEJZIHBnX2NhdGFs b2cucGdfZ2V0X2V4cHIoYy5yZWxwYXJ0Ym91bmQsIGMub2lkKSA9ICdERUZBVUxUJywgYy5v aWQ6OnBnX2NhdGFsb2cucmVnY2xhc3M6OnBnX2NhdGFsb2cudGV4dDsKKyAgb2lkICAgfCAg ICAgICAgcGdfZ2V0X2V4cHIgICAgICAgICB8IHJlbHBlcnNpc3RlbmNlIAorLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tCisgdHBfMF8x IHwgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMSkgfCB0CisgdHBfMV8yIHwgRk9SIFZBTFVF UyBGUk9NICgxKSBUTyAoMikgfCB0CisoMiByb3dzKQorCiBTRVQgc2VhcmNoX3BhdGggPSBw dWJsaWMsIHBnX3RlbXA7CiAtLSBDYW4ndCBtZXJnZSB0ZW1wb3JhcnkgcGFydGl0aW9ucyBp bnRvIGEgcGVyc2lzdGVudCBwYXJ0aXRpb24KIEFMVEVSIFRBQkxFIHQgTUVSR0UgUEFSVElU SU9OUyAodHBfMF8xLCB0cF8xXzIpIElOVE8gdHBfMF8yOwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX21lcmdlLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3BhcnRpdGlvbl9tZXJnZS5zcWwKaW5kZXggMmQ1NWUwZjVhMy4uNTZhZGNmNGJmYyAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX21lcmdlLnNxbAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fbWVyZ2Uuc3FsCkBAIC00ODQs MjUgKzQ4NCw0MyBAQCBTRUxFQ1QgaW5kZXhuYW1lIEZST00gcGdfaW5kZXhlcyBXSEVSRSB0 YWJsZW5hbWUgPSAndHBfMV8yJzsKIERST1AgVEFCTEUgdDsKIAogLS0KLS0tIFRyeSBjcmVh dGluZyBhIHBhcnRpdGlvbiBpbiB0aGUgdGVtcG9yYXJ5IHNjaGVtYS4KKy0tIFRyeSBtaXhp bmcgcGVybWFuZW50IGFuZCB0ZW1wb3JhcnkgcGFydGl0aW9ucy4KIC0tCiBTRVQgc2VhcmNo X3BhdGggPSBwdWJsaWMsIHBnX3RlbXA7CiBDUkVBVEUgVEFCTEUgdCAoaSBpbnQpIFBBUlRJ VElPTiBCWSBSQU5HRSAoaSk7CiBDUkVBVEUgVEFCTEUgdHBfMF8xIFBBUlRJVElPTiBPRiB0 IEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEpOwogQ1JFQVRFIFRBQkxFIHRwXzFfMiBQQVJU SVRJT04gT0YgdCBGT1IgVkFMVUVTIEZST00gKDEpIFRPICgyKTsKIAorU0VMRUNUIGMub2lk OjpwZ19jYXRhbG9nLnJlZ2NsYXNzLCBjLnJlbHBlcnNpc3RlbmNlIEZST00gcGdfY2F0YWxv Zy5wZ19jbGFzcyBjIFdIRVJFIGMub2lkID0gJ3QnOjpyZWdjbGFzczsKK1NFTEVDVCBjLm9p ZDo6cGdfY2F0YWxvZy5yZWdjbGFzcywgcGdfY2F0YWxvZy5wZ19nZXRfZXhwcihjLnJlbHBh cnRib3VuZCwgYy5vaWQpLCBjLnJlbHBlcnNpc3RlbmNlCisgIEZST00gcGdfY2F0YWxvZy5w Z19jbGFzcyBjLCBwZ19jYXRhbG9nLnBnX2luaGVyaXRzIGkKKyAgV0hFUkUgYy5vaWQgPSBp LmluaHJlbGlkIEFORCBpLmluaHBhcmVudCA9ICd0Jzo6cmVnY2xhc3MKKyAgT1JERVIgQlkg cGdfY2F0YWxvZy5wZ19nZXRfZXhwcihjLnJlbHBhcnRib3VuZCwgYy5vaWQpID0gJ0RFRkFV TFQnLCBjLm9pZDo6cGdfY2F0YWxvZy5yZWdjbGFzczo6cGdfY2F0YWxvZy50ZXh0OworCiBT RVQgc2VhcmNoX3BhdGggPSBwZ190ZW1wLCBwdWJsaWM7CiAKIC0tIENhbid0IG1lcmdlIHBl cnNpc3RlbnQgcGFydGl0aW9ucyBpbnRvIGEgdGVtcG9yYXJ5IHBhcnRpdGlvbgogQUxURVIg VEFCTEUgdCBNRVJHRSBQQVJUSVRJT05TICh0cF8wXzEsIHRwXzFfMikgSU5UTyB0cF8wXzI7 CisKK1JFU0VUIHNlYXJjaF9wYXRoOworCistLSBDYW4ndCBtZXJnZSBwZXJzaXN0ZW50IHBh cnRpdGlvbnMgaW50byBhIHRlbXBvcmFyeSBwYXJ0aXRpb24KK0FMVEVSIFRBQkxFIHQgTUVS R0UgUEFSVElUSU9OUyAodHBfMF8xLCB0cF8xXzIpIElOVE8gcGdfdGVtcC50cF8wXzI7CiBE Uk9QIFRBQkxFIHQ7Ci1EUk9QIFRBYmxlIHRwXzBfMjsKKworU0VUIHNlYXJjaF9wYXRoID0g cGdfdGVtcCwgcHVibGljOwogCiBCRUdJTjsKIENSRUFURSBUQUJMRSB0IChpIGludCkgUEFS VElUSU9OIEJZIFJBTkdFIChpKTsKIENSRUFURSBUQUJMRSB0cF8wXzEgUEFSVElUSU9OIE9G IHQgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMSk7CiBDUkVBVEUgVEFCTEUgdHBfMV8yIFBB UlRJVElPTiBPRiB0IEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDIpOwogCitTRUxFQ1QgYy5v aWQ6OnBnX2NhdGFsb2cucmVnY2xhc3MsIGMucmVscGVyc2lzdGVuY2UgRlJPTSBwZ19jYXRh bG9nLnBnX2NsYXNzIGMgV0hFUkUgYy5vaWQgPSAndCc6OnJlZ2NsYXNzOworU0VMRUNUIGMu b2lkOjpwZ19jYXRhbG9nLnJlZ2NsYXNzLCBwZ19jYXRhbG9nLnBnX2dldF9leHByKGMucmVs cGFydGJvdW5kLCBjLm9pZCksIGMucmVscGVyc2lzdGVuY2UKKyAgRlJPTSBwZ19jYXRhbG9n LnBnX2NsYXNzIGMsIHBnX2NhdGFsb2cucGdfaW5oZXJpdHMgaQorICBXSEVSRSBjLm9pZCA9 IGkuaW5ocmVsaWQgQU5EIGkuaW5ocGFyZW50ID0gJ3QnOjpyZWdjbGFzcworICBPUkRFUiBC WSBwZ19jYXRhbG9nLnBnX2dldF9leHByKGMucmVscGFydGJvdW5kLCBjLm9pZCkgPSAnREVG QVVMVCcsIGMub2lkOjpwZ19jYXRhbG9nLnJlZ2NsYXNzOjpwZ19jYXRhbG9nLnRleHQ7CisK IFNFVCBzZWFyY2hfcGF0aCA9IHB1YmxpYywgcGdfdGVtcDsKIAogLS0gQ2FuJ3QgbWVyZ2Ug dGVtcG9yYXJ5IHBhcnRpdGlvbnMgaW50byBhIHBlcnNpc3RlbnQgcGFydGl0aW9uCg== --------------MAVXX70SfIkFmPpxo3OUXQLn--