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 1u2r0r-006sX3-LF for pgsql-bugs@arkaria.postgresql.org; Thu, 10 Apr 2025 12:28: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 1u2r0q-00BDct-2R for pgsql-bugs@arkaria.postgresql.org; Thu, 10 Apr 2025 12:28:08 +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 1u2r0p-00BDcj-NV for pgsql-bugs@lists.postgresql.org; Thu, 10 Apr 2025 12:28:08 +0000 Received: from mail-lj1-x236.google.com ([2a00:1450:4864:20::236]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1u2r0l-004WQK-2r for pgsql-bugs@lists.postgresql.org; Thu, 10 Apr 2025 12:28:07 +0000 Received: by mail-lj1-x236.google.com with SMTP id 38308e7fff4ca-30c0517142bso6069111fa.1 for ; Thu, 10 Apr 2025 05:28:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744288083; x=1744892883; darn=lists.postgresql.org; h=in-reply-to:from:content-language:references:to:subject:user-agent :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=2CtEVNuLjbUFz1KrtifV5jlCctBBcJpSo6RQv93FSHY=; b=nBzovxAAUJ01rjC3WrlpVsol7nD6VDd3WA4bhFdP8OAO9mS2NVsVDoP3TMbFKwTKaj JzjeS6n4Y21mRic2VIxhk8Y83mig4CeacIxDqmgv1GLIc5PRwRqkTNRNJfFds+9TmWNj i70axbWeRZ6eVEVBCIUL220PI/cS+JEN0TzQPUQvwjSgjbuNjk+TDiL0M7pj5vMymskt 6PQGyug5JKK/FrBZV7p5SCSLJg/9lieYdfF3EtiXBpobhSXLPAuFEQjMgEK6qlc8ZtO6 nMuza4+eE4FjeJ56KUK6+oxk64m5erp42mAOC2nnUif0MHv96gG5M3MUx2zKTJYZSiTb j4HQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744288083; x=1744892883; h=in-reply-to:from:content-language:references:to:subject:user-agent :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=2CtEVNuLjbUFz1KrtifV5jlCctBBcJpSo6RQv93FSHY=; b=gqhQP00Avg0QqICqpJ3kSZeNKX08q0nDuGdKzv7kX7F06TN7ZXHYwK1NKa/mpBR5tf ZF/0G9LLvLSM/ciAJxNd64dBPuhdiIqePKQMxPSGU86AqhZiz/N+thmJvp+ncDYcKDDW UcqEo1EHnzTS9HjUrp/LHZKezsnVBXHirQ+ysThv5QkhQ63HUdlBW02RCf9oelU7t+4r VSOGiW0Q/s4IBMBU1SXUgYOKFbbEg7mOQol0XyYayX+EZBGkinlWBvUoR4qKebs4RzRd URMBwDCW2c0uXowtDxWaSzXdHzluq43u1gEWWn4xzPZi0RppkuqlelT+A085nDxTMI67 eZfA== X-Forwarded-Encrypted: i=1; AJvYcCUJ9Y5DKq9iFNs7BWz1Bnffq1whkcq921GXBkm8CHCXikS7NA081YPudsFNsLkEgzwJcDma7G9hlFtl@lists.postgresql.org X-Gm-Message-State: AOJu0YwiV98Q+tk8VDgZ/WKCZA23q87h/S8y9sou8YOAoSaeA5tFifwp YWA2MGhM3Q4+gSF85JW3F9lPfU6zStkrGIUYKyLC1H6iqepYD8Ix X-Gm-Gg: ASbGncuPt3yPoBIV/GLYuDaehb14k/ny+ZlGbaz0mfpJDhj63s2dS+Y0V1Let5bw8pW eO2kADQLFfIQmPIe1F47vfP6xJB8CG/e6P/OIbLRZMUs+OpsvlxETDsqlRV3xzeLE5ga+m08tuW UnTj7iTdagP19i62O5UcOcSCCObjEaJDZ0BI0pIZN0G95Qtq9OC0LzGwGtZ3y0Zd0aV79h5Ow4D A5+zWF6m0boiCCfb+zX6ou09c9grVf1x5N+ycr8daSDE4efmnle+cn4BmxBlZ/DLibf7fLyDpXQ M1waitjIt6gerzlzPp2XLugNPbRvIkVgAysdQT8= X-Google-Smtp-Source: AGHT+IFIB9epw5A5p13afJ5/WnqRXFaZ9QVWhlqV9mfGb7FFGga6EgcEfcTQ82RJ2Jd0t2EHyfrXhg== X-Received: by 2002:a05:651c:146f:b0:30c:4346:b1ae with SMTP id 38308e7fff4ca-30faccb8852mr10760691fa.33.1744288082428; Thu, 10 Apr 2025 05:28:02 -0700 (PDT) Received: from [10.4.15.162] ([93.174.131.141]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-30f464e9f2dsm4686591fa.53.2025.04.10.05.28.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 10 Apr 2025 05:28:01 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------0OB4SBRN3XulxAxplQSleC0P" Message-ID: Date: Thu, 10 Apr 2025 14:28:01 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: BUG #18885: ERROR: corrupt MVNDistinct entry - 2 To: tharakan@gmail.com, pgsql-bugs@lists.postgresql.org, PG Bug reporting form , Alexander Korotkov References: <18885-da51324078588253@postgresql.org> Content-Language: en-AU From: Andrei Lepikhov In-Reply-To: <18885-da51324078588253@postgresql.org> 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. --------------0OB4SBRN3XulxAxplQSleC0P Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 4/9/25 15:46, PG Bug reporting form wrote: > The following SQL triggers "ERROR: corrupt MVNDistinct entry", however this > seems to be unrelated to a recent bugfix[1] for a similar issue (thus '2' in > the $SUBJECT). That's my fault. We wanted to avoid using of the add_unique_group_var, but forgot it does some necessary stuff. Here, I attempt to use this routine in the hash join bucket size estimation. I transformed it a little, made it more general. Not sure it is the best design, but it is debatable. -- regards, Andrei Lepikhov --------------0OB4SBRN3XulxAxplQSleC0P Content-Type: text/x-patch; charset=UTF-8; name="0001-Be-more-conventional-estimating-hash-join-bucket-siz.patch" Content-Disposition: attachment; filename*0="0001-Be-more-conventional-estimating-hash-join-bucket-siz.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBjODI0MTU5NDkzYjVjYWYyN2RiOWZlMGVjYjBmNjlhNWUyNWY3NzEzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmVpIFYuIExlcGlraG92IiA8bGVwaWhvdkBn bWFpbC5jb20+CkRhdGU6IFRodSwgMTAgQXByIDIwMjUgMTQ6MTY6NDQgKzAyMDAKU3ViamVj dDogW1BBVENIXSBCZSBtb3JlIGNvbnZlbnRpb25hbCBlc3RpbWF0aW5nIGhhc2ggam9pbiBi dWNrZXQgc2l6ZS4KCkltcGxlbWVudGluZyBlc3RpbWF0aW9uIG9mIGhhc2ggam9pbiBidWNr ZXQgc2l6ZSBieSBleHRlbmRlZCBzdGF0aXN0aWNzCndlIHdhbnRlZCB0byBhdm9pZCB1c2Ug b2YgYWRkX3VuaXF1ZV9ncm91cF92YXIgYmVjYXVzZSBpdHMgbG9naWMgaXMgdG9vCnNwZWNp ZmljIGZvciB0aGUgZ3JvdXBzIG51bWJlciBlc3RpbWF0aW9uIHJvdXRpbmUuIEJ1dCB3ZSBm b3Jnb3QgdGhhdCB0aGlzCnJvdXRpbmUgYWxzbyBkb2VzIG92ZXIgc3R1ZmYsIGxpa2UgZHVw bGljYXRlcyByZW1vdmFsIGZyb20gdGhlIGxpc3QKb2YgZXN0aW1hdGVkIGNsYXVzZXMuCgpX aXRoIHRoaXMgY29tbWl0IHdlIG1ha2UgYWRkX3VuaXF1ZV9ncm91cF92YXIgYSBsaXR0bGUg bW9yZSBnZW5lcmFsIHRoYXQgYWxsb3dzCnRvIHVzZSBpdCBkdXJpbmcgdGhlIGJ1Y2tldCBl c3RpbWF0aW9uLgotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jICAgICAg ICB8IDM1ICsrKysrKysrKysrKystLS0tLS0tLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvc3RhdHNfZXh0Lm91dCB8IDE2ICsrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNz L3NxbC9zdGF0c19leHQuc3FsICAgICAgfCAgOCArKysrKysKIDMgZmlsZXMgY2hhbmdlZCwg NDIgaW5zZXJ0aW9ucygrKSwgMTcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2Vs ZnVuY3MuYwppbmRleCA1ODhkOTkxZmE1Ny4uODAxNmM0ZGQzYjAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9zZWxmdW5jcy5jCkBAIC0zMzEzLDE2ICszMzEzLDEyIEBAIHR5cGVkZWYgc3RydWN0 CiB9IEdyb3VwVmFySW5mbzsKIAogc3RhdGljIExpc3QgKgotYWRkX3VuaXF1ZV9ncm91cF92 YXIoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKnZhcmluZm9zLAotCQkJCQkgTm9kZSAqdmFy LCBWYXJpYWJsZVN0YXREYXRhICp2YXJkYXRhKQorYWRkX3VuaXF1ZV9ncm91cF92YXIoUGxh bm5lckluZm8gKnJvb3QsIExpc3QgKnZhcmluZm9zLCBOb2RlICp2YXIsCisJCQkJCSBSZWxP cHRJbmZvICpyZWwsIGRvdWJsZSBuZGlzdGluY3QsIGJvb2wgaXNkZWZhdWx0KQogewogCUdy b3VwVmFySW5mbyAqdmFyaW5mbzsKLQlkb3VibGUJCW5kaXN0aW5jdDsKLQlib29sCQlpc2Rl ZmF1bHQ7CiAJTGlzdENlbGwgICAqbGM7CiAKLQluZGlzdGluY3QgPSBnZXRfdmFyaWFibGVf bnVtZGlzdGluY3QodmFyZGF0YSwgJmlzZGVmYXVsdCk7Ci0KIAkvKgogCSAqIFRoZSBudWxs aW5ncmVscyBiaXRzIHdpdGhpbiB0aGUgdmFyIGNvdWxkIGNhdXNlIHRoZSBzYW1lIHZhciB0 byBiZQogCSAqIGNvdW50ZWQgbXVsdGlwbGUgdGltZXMgaWYgaXQncyBtYXJrZWQgd2l0aCBk aWZmZXJlbnQgbnVsbGluZ3JlbHMuICBUaGV5CkBAIC0zMzQ1LDcgKzMzNDEsNyBAQCBhZGRf dW5pcXVlX2dyb3VwX3ZhcihQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqdmFyaW5mb3MsCiAJ CSAqIHJlbGF0aW9ucyAoc2VlIGNvbW1lbnRzIGZvciBlc3RpbWF0ZV9udW1fZ3JvdXBzKS4g IFdlIGFyZW4ndCB0b28KIAkJICogZnVzc3kgYWJvdXQgdGhlIHNlbWFudGljcyBvZiAiZXF1 YWwiIGhlcmUuCiAJCSAqLwotCQlpZiAodmFyZGF0YS0+cmVsICE9IHZhcmluZm8tPnJlbCAm JgorCQlpZiAocmVsICE9IHZhcmluZm8tPnJlbCAmJgogCQkJZXhwcnNfa25vd25fZXF1YWwo cm9vdCwgdmFyLCB2YXJpbmZvLT52YXIsIEludmFsaWRPaWQpKQogCQl7CiAJCQlpZiAodmFy aW5mby0+bmRpc3RpbmN0IDw9IG5kaXN0aW5jdCkKQEAgLTMzNjQsNyArMzM2MCw3IEBAIGFk ZF91bmlxdWVfZ3JvdXBfdmFyKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICp2YXJpbmZvcywK IAl2YXJpbmZvID0gKEdyb3VwVmFySW5mbyAqKSBwYWxsb2Moc2l6ZW9mKEdyb3VwVmFySW5m bykpOwogCiAJdmFyaW5mby0+dmFyID0gdmFyOwotCXZhcmluZm8tPnJlbCA9IHZhcmRhdGEt PnJlbDsKKwl2YXJpbmZvLT5yZWwgPSByZWw7CiAJdmFyaW5mby0+bmRpc3RpbmN0ID0gbmRp c3RpbmN0OwogCXZhcmluZm8tPmlzZGVmYXVsdCA9IGlzZGVmYXVsdDsKIAl2YXJpbmZvcyA9 IGxhcHBlbmQodmFyaW5mb3MsIHZhcmluZm8pOwpAQCAtMzUzMiw4ICszNTI4LDEyIEBAIGVz dGltYXRlX251bV9ncm91cHMoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmdyb3VwRXhwcnMs IGRvdWJsZSBpbnB1dF9yb3dzLAogCQlleGFtaW5lX3ZhcmlhYmxlKHJvb3QsIGdyb3VwZXhw ciwgMCwgJnZhcmRhdGEpOwogCQlpZiAoSGVhcFR1cGxlSXNWYWxpZCh2YXJkYXRhLnN0YXRz VHVwbGUpIHx8IHZhcmRhdGEuaXN1bmlxdWUpCiAJCXsKLQkJCXZhcmluZm9zID0gYWRkX3Vu aXF1ZV9ncm91cF92YXIocm9vdCwgdmFyaW5mb3MsCi0JCQkJCQkJCQkJCWdyb3VwZXhwciwg JnZhcmRhdGEpOworCQkJZG91YmxlCW5kaXN0aW5jdDsKKwkJCWJvb2wJaXNkZWZhdWx0Owor CisJCQluZGlzdGluY3QgPSBnZXRfdmFyaWFibGVfbnVtZGlzdGluY3QoJnZhcmRhdGEsICZp c2RlZmF1bHQpOworCQkJdmFyaW5mb3MgPSBhZGRfdW5pcXVlX2dyb3VwX3Zhcihyb290LCB2 YXJpbmZvcywgZ3JvdXBleHByLAorCQkJCQkJCQkJCQl2YXJkYXRhLnJlbCwgbmRpc3RpbmN0 LCBpc2RlZmF1bHQpOwogCQkJUmVsZWFzZVZhcmlhYmxlU3RhdHModmFyZGF0YSk7CiAJCQlj b250aW51ZTsKIAkJfQpAQCAtMzU2OSw5ICszNTY5LDEzIEBAIGVzdGltYXRlX251bV9ncm91 cHMoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmdyb3VwRXhwcnMsIGRvdWJsZSBpbnB1dF9y b3dzLAogCQlmb3JlYWNoKGwyLCB2YXJzaGVyZSkKIAkJewogCQkJTm9kZQkgICAqdmFyID0g KE5vZGUgKikgbGZpcnN0KGwyKTsKKwkJCWRvdWJsZQkJbmRpc3RpbmN0OworCQkJYm9vbAkJ aXNkZWZhdWx0OwogCiAJCQlleGFtaW5lX3ZhcmlhYmxlKHJvb3QsIHZhciwgMCwgJnZhcmRh dGEpOwotCQkJdmFyaW5mb3MgPSBhZGRfdW5pcXVlX2dyb3VwX3Zhcihyb290LCB2YXJpbmZv cywgdmFyLCAmdmFyZGF0YSk7CisJCQluZGlzdGluY3QgPSBnZXRfdmFyaWFibGVfbnVtZGlz dGluY3QoJnZhcmRhdGEsICZpc2RlZmF1bHQpOworCQkJdmFyaW5mb3MgPSBhZGRfdW5pcXVl X2dyb3VwX3Zhcihyb290LCB2YXJpbmZvcywgdmFyLCB2YXJkYXRhLnJlbCwKKwkJCQkJCQkJ CQkJbmRpc3RpbmN0LCBpc2RlZmF1bHQpOwogCQkJUmVsZWFzZVZhcmlhYmxlU3RhdHModmFy ZGF0YSk7CiAJCX0KIAl9CkBAIC0zODgwLDEyICszODg0LDkgQEAgZXN0aW1hdGVfbXVsdGl2 YXJpYXRlX2J1Y2tldHNpemUoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlubmVy LAogCQkJCQkgKi8KIAkJCQkJY29udGludWU7CiAKLQkJCQl2YXJpbmZvID0gKEdyb3VwVmFy SW5mbyAqKSBwYWxsb2Moc2l6ZW9mKEdyb3VwVmFySW5mbykpOwotCQkJCXZhcmluZm8tPnZh ciA9IGV4cHI7Ci0JCQkJdmFyaW5mby0+cmVsID0gcm9vdC0+c2ltcGxlX3JlbF9hcnJheVty ZWxpZF07Ci0JCQkJdmFyaW5mby0+bmRpc3RpbmN0ID0gMC4wOwotCQkJCXZhcmluZm8tPmlz ZGVmYXVsdCA9IGZhbHNlOwotCQkJCXZhcmluZm9zID0gbGFwcGVuZCh2YXJpbmZvcywgdmFy aW5mbyk7CisJCQkJdmFyaW5mb3MgPSBhZGRfdW5pcXVlX2dyb3VwX3Zhcihyb290LCB2YXJp bmZvcywgZXhwciwKKwkJCQkJCQkJCQkJCXJvb3QtPnNpbXBsZV9yZWxfYXJyYXlbcmVsaWRd LAorCQkJCQkJCQkJCQkJMC4wLCBmYWxzZSk7CiAKIAkJCQkvKgogCQkJCSAqIFJlbWVtYmVy IHRoZSBsaW5rIHRvIFJlc3RyaWN0SW5mbyBmb3IgdGhlIGNhc2UgdGhlIGNsYXVzZQpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0c19leHQub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0c19leHQub3V0CmluZGV4IDY4NmQ4YzkzYWE4 Li40NzJlZjBlNDRhZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9z dGF0c19leHQub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0 Lm91dApAQCAtMzQyNyw0ICszNDI3LDIwIEBAIFNFTEVDVCAqIEZST00gc2JfMSBhLCBzYl8y IGIgV0hFUkUgYS54ID0gYi54IEFORCBhLnkgPSBiLnkgQU5EIGEueiA9IGIuejsKICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBzYl8yIGIKICg1IHJvd3MpCiAKKy0tIENoZWNrIHRoYXQg dGhlIEhhc2ggSm9pbiBidWNrZXQgc2l6ZSBlc3RpbWF0b3IgZGV0ZWN0cyBlcXVhbCBjbGF1 c2VzIGNvcnJlY3RseS4KK1NFVCBlbmFibGVfbmVzdGxvb3AgPSAnb2ZmJzsKK1NFVCBlbmFi bGVfbWVyZ2Vqb2luID0gJ29mZic7CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgRlJP TSBzYl8xIExFRlQgSk9JTiBzYl8yIE9OIChzYl8yLng9c2JfMS54KSBBTkQgKHNiXzEueD1z Yl8yLngpOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgSGFzaCBMZWZ0IEpvaW4KKyAgIEhhc2ggQ29uZDogKChzYl8x LnggPSBzYl8yLngpIEFORCAoc2JfMS54ID0gc2JfMi54KSkKKyAgIC0+ICBTZXEgU2NhbiBv biBzYl8xCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNiXzIKKyg1 IHJvd3MpCisKK1JFU0VUIGVuYWJsZV9uZXN0bG9vcDsKK1JFU0VUIGVuYWJsZV9tZXJnZWpv aW47CiBEUk9QIFRBQkxFIHNiXzEsIHNiXzIgQ0FTQ0FERTsKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzX2V4dC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9z dGF0c19leHQuc3FsCmluZGV4IGI3MWE2Y2QwODlmLi4wMDFlYzcyMDI2YSAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNfZXh0LnNxbAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9zdGF0c19leHQuc3FsCkBAIC0xNzQ3LDQgKzE3NDcsMTIgQEAgQU5BTFla RSBzYl8yOwogRVhQTEFJTiAoQ09TVFMgT0ZGKSAtLSBDaG9vc2UgaGFzaCBqb2luCiBTRUxF Q1QgKiBGUk9NIHNiXzEgYSwgc2JfMiBiIFdIRVJFIGEueCA9IGIueCBBTkQgYS55ID0gYi55 IEFORCBhLnogPSBiLno7CiAKKy0tIENoZWNrIHRoYXQgdGhlIEhhc2ggSm9pbiBidWNrZXQg c2l6ZSBlc3RpbWF0b3IgZGV0ZWN0cyBlcXVhbCBjbGF1c2VzIGNvcnJlY3RseS4KK1NFVCBl bmFibGVfbmVzdGxvb3AgPSAnb2ZmJzsKK1NFVCBlbmFibGVfbWVyZ2Vqb2luID0gJ29mZic7 CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgRlJPTSBzYl8xIExFRlQgSk9JTiBzYl8y IE9OIChzYl8yLng9c2JfMS54KSBBTkQgKHNiXzEueD1zYl8yLngpOworUkVTRVQgZW5hYmxl X25lc3Rsb29wOworUkVTRVQgZW5hYmxlX21lcmdlam9pbjsKKwogRFJPUCBUQUJMRSBzYl8x LCBzYl8yIENBU0NBREU7Ci0tIAoyLjM5LjUKCg== --------------0OB4SBRN3XulxAxplQSleC0P--