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.96) (envelope-from ) id 1vxRP9-00EEVf-1T for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Mar 2026 15:11:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vxRP7-007SrG-2N for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Mar 2026 15:11:22 +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.96) (envelope-from ) id 1vxRP7-007SqM-0r for pgsql-hackers@lists.postgresql.org; Tue, 03 Mar 2026 15:11:21 +0000 Received: from lahtoruutu.iki.fi ([185.185.170.37]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vxRP4-00000000C7M-3jLJ for pgsql-hackers@lists.postgresql.org; Tue, 03 Mar 2026 15:11:20 +0000 Received: from [10.0.2.15] (unknown [130.41.208.2]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4fQK4x46lzz49Pv9; Tue, 03 Mar 2026 17:11:13 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1772550674; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=zXd1U/QzDGs+z0pwRlEXUcKxIGGmakRes/BltKmCikk=; b=WrdrbOVtVe6chFSnwEgKLp2ycGEZnAP5BHr/ukp8ddfZYS5z72yi7zYc+g1uCEj5VIVSdA WUb35dKXm4VfIMgG2BjbFl4fIlKJL38pDs3ppf8ag7/ZRFfhiPKTk7CFIVWdMPMZ8aI7ds aafHdeqsUumXNCGQR5yxpV4ipEXWj9hb1xzfxOz14gs/WaEPdxzJHlOJGlgDhtOx0k6a0O dlB0+BACQfgTtPK7yMsChkMcfR+XO+1Wbovr3BS1ZroPB7jYNR3sPyKYhq/GYOU87X5ops /3gNFRslJllfOcUSL2Roh0w2alsuidxy1t6RTDskCcoEefS0IlJ5dM5G9hZubQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1772550674; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=zXd1U/QzDGs+z0pwRlEXUcKxIGGmakRes/BltKmCikk=; b=cniDCjjS70A7RG4mKH7wpD8FLV7kAtT5CnzblLwSI9Ts/XNbU4N7wGq1EDx7YBUvVIOHhZ iTYbr6dc4ACy5/MACwP+Efqt/LJxpzckd8mWJ1pbWsvTl2LiyOMlWfxa3FBrb6I9IbpxYJ trt/ena4Gy8tZJu/GZf1sJ4EPk1RouEyYbn/Clz1SnCXm7KRT78tFldMWG7LXEYoTDC8Ai IZeB0ii0AECqHAc1H3sPb2jc2FoZTnxbf83SXSBAMf45U7Yd09/cHl5pwoVh6DzoX7kSfK C5h41/iw1juTlWHUMXpS/YVs/yliYds5Wyc8+s6Ps6Sms48y4wfPkyg6SFFiRQ== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Seal: i=1; a=rsa-sha256; d=iki.fi; s=lahtoruutu; cv=none; t=1772550674; b=dLDCZWNenx4RZXrlMAfYTR7/socDnuJDmrK5jWEJaYEmfT9kIgBlq8mfnd8WfxfoM0Wf5u 6Ox0pwQ42Ku1jojjrJlttYMMZ9M+IIvkwGxuMlOrsHSQqy+54jMUtrOB6MABcaL5MppHGY /3RlJvhLMEkNGOWrfg/8/kpZKFXFA0NQB2WHdfR0JUwby2YD0X0n5RYZvGXacJP2rUAUW4 yGAxswYHWOD+oe/qnWEpd5py/PyFpwF5bs5KsaCWXOjAhN6MYIINbX7y/AN/RFBNmfJXtO QwUOttu0gN+ec5+ZnUvbbXoYDV9nXMv/XO0GmX/VfBDHI6GjgXuAPwYHnvc1vQ== Content-Type: multipart/mixed; boundary="------------kDns9JPkEMOyzrK7sQ2zADnv" Message-ID: Date: Tue, 3 Mar 2026 17:11:05 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Fix bug in multixact Oldest*MXactId initialization and access To: Yura Sokolov , Sami Imseih Cc: Chao Li , "pgsql-hackers@lists.postgresql.org" References: <7acc94b0-ea82-4657-b1b0-77842cb7a60c@postgrespro.ru> <3d7a2207-0e61-4d95-bc00-e5248956a32b@postgrespro.ru> <366b6f95-613d-4ef8-82e4-bb2fd06d9c4d@iki.fi> <231cd950-73e9-4db5-a516-c5216af7b93a@iki.fi> <944d7897-3ec3-47bb-9e93-b99f2ef3124a@postgrespro.ru> <120550bf-ca50-4a07-91b1-a88f1434ee8b@postgrespro.ru> Content-Language: en-US From: Heikki Linnakangas In-Reply-To: <120550bf-ca50-4a07-91b1-a88f1434ee8b@postgrespro.ru> 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. --------------kDns9JPkEMOyzrK7sQ2zADnv Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 03/03/2026 14:02, Yura Sokolov wrote: > 02.03.2026 22:09, Sami Imseih пишет: >>>> It says “Each is indexed by ProcNumber”, but it’s no longer accurate for OldestMemberMXactId prepared-xact entries, which now use index (procno - FIRST_PREPARED_XACT_PROC_NUMBER). >>> >>> Fixed those and some other comment work, and pushed. Thanks! >>> >> >> Thanks! what are your thoughts about adding a test like the one >> here [1] ? This allows us to test correct handling of prepared >> transaction dummy procs. The asserts added will not cover >> this case. >> >> What do you think? >> >> [1] [https://www.postgresql.org/message-id/CAA5RZ0twq5bNMq0r0QNoopQnAEv%2BJ3qJNCrLs7HVqTEntBhJ%3Dg%40mail.gmail.com] > I support: test for bug fixed is a good thing. Ok, here's another version of Sami's repro. I realized that it doesn't even need concurrent sessions, so I moved it to the main regression test suite, into the 'prepared_xacts' test. Looks good? - Heikki --------------kDns9JPkEMOyzrK7sQ2zADnv Content-Type: text/x-patch; charset=UTF-8; name="0001-Add-test-for-row-locking-and-multixids-with-prepared.patch" Content-Disposition: attachment; filename*0="0001-Add-test-for-row-locking-and-multixids-with-prepared.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAyZTBmODFlNzVkODllYjNlYjRkY2M2NDExNzIzY2FjM2QwN2FmMjVlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFR1ZSwgMyBNYXIgMjAyNiAxNzowMzoyMyArMDIwMApT dWJqZWN0OiBbUEFUQ0ggMS8xXSBBZGQgdGVzdCBmb3Igcm93LWxvY2tpbmcgYW5kIG11bHRp eGlkcyB3aXRoIHByZXBhcmVkCiB0cmFuc2FjdGlvbnMKClRoaXMgaXMgYSByZXBybyBmb3Ig dGhlIGlzc3VlIGZpeGVkIGluIGNvbW1pdCBjY2FlOTBhYmRiLiBCYWNrcGF0Y2ggdG8KdjE3 IGxpa2UgdGhhdCBjb21taXQsIGFsdGhvdWdoIHRoYXQncyBhIGxpdHRsZSBhcmJpdHJhcnkg YXMgdGhpcyB0ZXN0CndvdWxkIHdvcmsgb24gb2xkZXIgdmVyc2lvbnMgdG9vLgoKQXV0aG9y OiBTYW1pIEltc2VpaCA8c2FtaW1zZWloQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogWFhYCkJh Y2twYXRjaC10aHJvdWdoOiAxNwotLS0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHJl cGFyZWRfeGFjdHMub3V0ICB8IDMwICsrKysrKysrKysrKysKIC4uLi9yZWdyZXNzL2V4cGVj dGVkL3ByZXBhcmVkX3hhY3RzXzEub3V0ICAgICB8IDQ0ICsrKysrKysrKysrKysrKysrKysK IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3ByZXBhcmVkX3hhY3RzLnNxbCAgICAgICB8IDI1ICsr KysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDk5IGluc2VydGlvbnMoKykKCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3ByZXBhcmVkX3hhY3RzLm91dCBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHJlcGFyZWRfeGFjdHMub3V0CmluZGV4IDUxNWEy YWRhOWQxLi43MWQyZTU5MTYyMiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9wcmVwYXJlZF94YWN0cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9wcmVwYXJlZF94YWN0cy5vdXQKQEAgLTI2Myw4ICsyNjMsMzggQEAgU0VMRUNUIGdpZCBG Uk9NIHBnX3ByZXBhcmVkX3hhY3RzIFdIRVJFIGdpZCB+ICdecmVncmVzc18nIE9SREVSIEJZ IGdpZDsKIC0tLS0tCiAoMCByb3dzKQogCistLSBUZXN0IHJvdy1sZXZlbCBsb2NrcyBoZWxk IGJ5IHByZXBhcmVkIHRyYW5zYWN0aW9ucworQ1JFQVRFIFRBQkxFIHB4dGVzdF9yb3dsb2Nr IChpZCBpbnQgUFJJTUFSWSBLRVksIGRhdGEgdGV4dCk7CitJTlNFUlQgSU5UTyBweHRlc3Rf cm93bG9jayBWQUxVRVMgKDEsICd0ZXN0IGRhdGEnKTsKK0JFR0lOOworU0VMRUNUICogRlJP TSBweHRlc3Rfcm93bG9jayBXSEVSRSBpZCA9IDEgRk9SIFNIQVJFOworIGlkIHwgICBkYXRh ICAgIAorLS0tLSstLS0tLS0tLS0tLQorICAxIHwgdGVzdCBkYXRhCisoMSByb3cpCisKK1BS RVBBUkUgVFJBTlNBQ1RJT04gJ3JlZ3Jlc3NfcDEnOworLS0gU2hvdWxkIGZhaWwgYmVjYXVz ZSB0aGUgcm93IGlzIGxvY2tlZAorU0VMRUNUICogRlJPTSBweHRlc3Rfcm93bG9jayBXSEVS RSBpZCA9IDEgRk9SIFVQREFURSBOT1dBSVQ7CitFUlJPUjogIGNvdWxkIG5vdCBvYnRhaW4g bG9jayBvbiByb3cgaW4gcmVsYXRpb24gInB4dGVzdF9yb3dsb2NrIgorLS0gVGVzdCBwcmVw YXJlZCB0cmFuc2FjdGlvbnMgdGhhdCBwYXJ0aWNpcGF0ZSBpbiBtdWx0aXhhY3RzLiBGb3IK Ky0tIHRoYXQsIGxvY2sgdGhlIHNhbWUgcm93IGFnYWluLCBjcmVhdGluZyBhIG11bHRpeGlk LgorQkVHSU47CitTRUxFQ1QgKiBGUk9NIHB4dGVzdF9yb3dsb2NrIFdIRVJFIGlkID0gMSBG T1IgU0hBUkU7CisgaWQgfCAgIGRhdGEgICAgCistLS0tKy0tLS0tLS0tLS0tCisgIDEgfCB0 ZXN0IGRhdGEKKygxIHJvdykKKworUFJFUEFSRSBUUkFOU0FDVElPTiAncmVncmVzc19wMic7 CistLSBTaG91bGQgZmFpbCBiZWNhdXNlIHRoZSByb3cgaXMgbG9ja2VkCitTRUxFQ1QgKiBG Uk9NIHB4dGVzdF9yb3dsb2NrIFdIRVJFIGlkID0gMSBGT1IgVVBEQVRFIE5PV0FJVDsKK0VS Uk9SOiAgY291bGQgbm90IG9idGFpbiBsb2NrIG9uIHJvdyBpbiByZWxhdGlvbiAicHh0ZXN0 X3Jvd2xvY2siCitST0xMQkFDSyBQUkVQQVJFRCAncmVncmVzc19wMSc7CitST0xMQkFDSyBQ UkVQQVJFRCAncmVncmVzc19wMic7CiAtLSBDbGVhbiB1cAogRFJPUCBUQUJMRSBweHRlc3Qy OwogRFJPUCBUQUJMRSBweHRlc3QzOyAgLS0gd2lsbCBzdGlsbCBiZSB0aGVyZSBpZiBwcmVw YXJlZCB4YWN0cyBhcmUgZGlzYWJsZWQKIEVSUk9SOiAgdGFibGUgInB4dGVzdDMiIGRvZXMg bm90IGV4aXN0CiBEUk9QIFRBQkxFIHB4dGVzdDQ7CitEUk9QIFRBQkxFIHB4dGVzdF9yb3ds b2NrOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wcmVwYXJlZF94 YWN0c18xLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHJlcGFyZWRfeGFjdHNf MS5vdXQKaW5kZXggNmFkM2QxMTg5OGEuLmY3MGI0NzI0ZmM1IDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3ByZXBhcmVkX3hhY3RzXzEub3V0CisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHJlcGFyZWRfeGFjdHNfMS5vdXQKQEAgLTI1OCw5ICsy NTgsNTMgQEAgU0VMRUNUIGdpZCBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzIFdIRVJFIGdpZCB+ ICdecmVncmVzc18nIE9SREVSIEJZIGdpZDsKIC0tLS0tCiAoMCByb3dzKQogCistLSBUZXN0 IHJvdy1sZXZlbCBsb2NrcyBoZWxkIGJ5IHByZXBhcmVkIHRyYW5zYWN0aW9ucworQ1JFQVRF IFRBQkxFIHB4dGVzdF9yb3dsb2NrIChpZCBpbnQgUFJJTUFSWSBLRVksIGRhdGEgdGV4dCk7 CitJTlNFUlQgSU5UTyBweHRlc3Rfcm93bG9jayBWQUxVRVMgKDEsICd0ZXN0IGRhdGEnKTsK K0JFR0lOOworU0VMRUNUICogRlJPTSBweHRlc3Rfcm93bG9jayBXSEVSRSBpZCA9IDEgRk9S IFNIQVJFOworIGlkIHwgICBkYXRhICAgIAorLS0tLSstLS0tLS0tLS0tLQorICAxIHwgdGVz dCBkYXRhCisoMSByb3cpCisKK1BSRVBBUkUgVFJBTlNBQ1RJT04gJ3JlZ3Jlc3NfcDEnOwor RVJST1I6ICBwcmVwYXJlZCB0cmFuc2FjdGlvbnMgYXJlIGRpc2FibGVkCitISU5UOiAgU2V0 ICJtYXhfcHJlcGFyZWRfdHJhbnNhY3Rpb25zIiB0byBhIG5vbnplcm8gdmFsdWUuCistLSBT aG91bGQgZmFpbCBiZWNhdXNlIHRoZSByb3cgaXMgbG9ja2VkCitTRUxFQ1QgKiBGUk9NIHB4 dGVzdF9yb3dsb2NrIFdIRVJFIGlkID0gMSBGT1IgVVBEQVRFIE5PV0FJVDsKKyBpZCB8ICAg ZGF0YSAgICAKKy0tLS0rLS0tLS0tLS0tLS0KKyAgMSB8IHRlc3QgZGF0YQorKDEgcm93KQor CistLSBUZXN0IHByZXBhcmVkIHRyYW5zYWN0aW9ucyB0aGF0IHBhcnRpY2lwYXRlIGluIG11 bHRpeGFjdHMuIEZvcgorLS0gdGhhdCwgbG9jayB0aGUgc2FtZSByb3cgYWdhaW4sIGNyZWF0 aW5nIGEgbXVsdGl4aWQuCitCRUdJTjsKK1NFTEVDVCAqIEZST00gcHh0ZXN0X3Jvd2xvY2sg V0hFUkUgaWQgPSAxIEZPUiBTSEFSRTsKKyBpZCB8ICAgZGF0YSAgICAKKy0tLS0rLS0tLS0t LS0tLS0KKyAgMSB8IHRlc3QgZGF0YQorKDEgcm93KQorCitQUkVQQVJFIFRSQU5TQUNUSU9O ICdyZWdyZXNzX3AyJzsKK0VSUk9SOiAgcHJlcGFyZWQgdHJhbnNhY3Rpb25zIGFyZSBkaXNh YmxlZAorSElOVDogIFNldCAibWF4X3ByZXBhcmVkX3RyYW5zYWN0aW9ucyIgdG8gYSBub256 ZXJvIHZhbHVlLgorLS0gU2hvdWxkIGZhaWwgYmVjYXVzZSB0aGUgcm93IGlzIGxvY2tlZAor U0VMRUNUICogRlJPTSBweHRlc3Rfcm93bG9jayBXSEVSRSBpZCA9IDEgRk9SIFVQREFURSBO T1dBSVQ7CisgaWQgfCAgIGRhdGEgICAgCistLS0tKy0tLS0tLS0tLS0tCisgIDEgfCB0ZXN0 IGRhdGEKKygxIHJvdykKKworUk9MTEJBQ0sgUFJFUEFSRUQgJ3JlZ3Jlc3NfcDEnOworRVJS T1I6ICBwcmVwYXJlZCB0cmFuc2FjdGlvbiB3aXRoIGlkZW50aWZpZXIgInJlZ3Jlc3NfcDEi IGRvZXMgbm90IGV4aXN0CitST0xMQkFDSyBQUkVQQVJFRCAncmVncmVzc19wMic7CitFUlJP UjogIHByZXBhcmVkIHRyYW5zYWN0aW9uIHdpdGggaWRlbnRpZmllciAicmVncmVzc19wMiIg ZG9lcyBub3QgZXhpc3QKIC0tIENsZWFuIHVwCiBEUk9QIFRBQkxFIHB4dGVzdDI7CiBFUlJP UjogIHRhYmxlICJweHRlc3QyIiBkb2VzIG5vdCBleGlzdAogRFJPUCBUQUJMRSBweHRlc3Qz OyAgLS0gd2lsbCBzdGlsbCBiZSB0aGVyZSBpZiBwcmVwYXJlZCB4YWN0cyBhcmUgZGlzYWJs ZWQKIERST1AgVEFCTEUgcHh0ZXN0NDsKIEVSUk9SOiAgdGFibGUgInB4dGVzdDQiIGRvZXMg bm90IGV4aXN0CitEUk9QIFRBQkxFIHB4dGVzdF9yb3dsb2NrOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvcHJlcGFyZWRfeGFjdHMuc3FsIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvcHJlcGFyZWRfeGFjdHMuc3FsCmluZGV4IGFkZTNhMjY3MmE4Li41ZDJmMDY3OThj NiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHJlcGFyZWRfeGFjdHMuc3Fs CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3ByZXBhcmVkX3hhY3RzLnNxbApAQCAtMTU4 LDcgKzE1OCwzMiBAQCBTRUxFQ1QgKiBGUk9NIHB4dGVzdDM7CiAtLSBUaGVyZSBzaG91bGQg YmUgbm8gcHJlcGFyZWQgdHJhbnNhY3Rpb25zCiBTRUxFQ1QgZ2lkIEZST00gcGdfcHJlcGFy ZWRfeGFjdHMgV0hFUkUgZ2lkIH4gJ15yZWdyZXNzXycgT1JERVIgQlkgZ2lkOwogCisKKy0t IFRlc3Qgcm93LWxldmVsIGxvY2tzIGhlbGQgYnkgcHJlcGFyZWQgdHJhbnNhY3Rpb25zCitD UkVBVEUgVEFCTEUgcHh0ZXN0X3Jvd2xvY2sgKGlkIGludCBQUklNQVJZIEtFWSwgZGF0YSB0 ZXh0KTsKK0lOU0VSVCBJTlRPIHB4dGVzdF9yb3dsb2NrIFZBTFVFUyAoMSwgJ3Rlc3QgZGF0 YScpOworCitCRUdJTjsKK1NFTEVDVCAqIEZST00gcHh0ZXN0X3Jvd2xvY2sgV0hFUkUgaWQg PSAxIEZPUiBTSEFSRTsKK1BSRVBBUkUgVFJBTlNBQ1RJT04gJ3JlZ3Jlc3NfcDEnOworCist LSBTaG91bGQgZmFpbCBiZWNhdXNlIHRoZSByb3cgaXMgbG9ja2VkCitTRUxFQ1QgKiBGUk9N IHB4dGVzdF9yb3dsb2NrIFdIRVJFIGlkID0gMSBGT1IgVVBEQVRFIE5PV0FJVDsKKworLS0g VGVzdCBwcmVwYXJlZCB0cmFuc2FjdGlvbnMgdGhhdCBwYXJ0aWNpcGF0ZSBpbiBtdWx0aXhh Y3RzLiBGb3IKKy0tIHRoYXQsIGxvY2sgdGhlIHNhbWUgcm93IGFnYWluLCBjcmVhdGluZyBh IG11bHRpeGlkLgorQkVHSU47CitTRUxFQ1QgKiBGUk9NIHB4dGVzdF9yb3dsb2NrIFdIRVJF IGlkID0gMSBGT1IgU0hBUkU7CitQUkVQQVJFIFRSQU5TQUNUSU9OICdyZWdyZXNzX3AyJzsK KworLS0gU2hvdWxkIGZhaWwgYmVjYXVzZSB0aGUgcm93IGlzIGxvY2tlZAorU0VMRUNUICog RlJPTSBweHRlc3Rfcm93bG9jayBXSEVSRSBpZCA9IDEgRk9SIFVQREFURSBOT1dBSVQ7CisK K1JPTExCQUNLIFBSRVBBUkVEICdyZWdyZXNzX3AxJzsKK1JPTExCQUNLIFBSRVBBUkVEICdy ZWdyZXNzX3AyJzsKKwogLS0gQ2xlYW4gdXAKIERST1AgVEFCTEUgcHh0ZXN0MjsKIERST1Ag VEFCTEUgcHh0ZXN0MzsgIC0tIHdpbGwgc3RpbGwgYmUgdGhlcmUgaWYgcHJlcGFyZWQgeGFj dHMgYXJlIGRpc2FibGVkCiBEUk9QIFRBQkxFIHB4dGVzdDQ7CitEUk9QIFRBQkxFIHB4dGVz dF9yb3dsb2NrOwotLSAKMi40Ny4zCgo= --------------kDns9JPkEMOyzrK7sQ2zADnv--