Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qDc7W-00044O-TX for pgsql-hackers@arkaria.postgresql.org; Mon, 26 Jun 2023 02:38:27 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1qDc7V-0002e0-6j for pgsql-hackers@arkaria.postgresql.org; Mon, 26 Jun 2023 02:38:25 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qDc7U-0002XQ-KF for pgsql-hackers@lists.postgresql.org; Mon, 26 Jun 2023 02:38:24 +0000 Received: from forward501b.mail.yandex.net ([178.154.239.145]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qDc7Q-000Sur-17 for pgsql-hackers@postgresql.org; Mon, 26 Jun 2023 02:38:23 +0000 Received: from mail-nwsmtp-smtp-production-main-46.sas.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-46.sas.yp-c.yandex.net [IPv6:2a02:6b8:c08:4212:0:640:eaad:0]) by forward501b.mail.yandex.net (Yandex) with ESMTP id CA4B45E8CF; Mon, 26 Jun 2023 05:38:16 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-46.sas.yp-c.yandex.net (smtp/Yandex) with ESMTPSA id Ec9QAfsDTKo0-rHHYlUwb; Mon, 26 Jun 2023 05:38:16 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1687747096; bh=l/bMthy8X7OJIBOjWlRPncxXIW6eriYCjo6yeK66cFo=; h=In-Reply-To:Cc:Date:References:To:Subject:Message-ID:From; b=rK10km2MQTaEnFpKnQULgqAUW0tmsnahD3jfAmkGJd4dE9ysQu8IYqb5bcswj/rkO J1Celzz/1JSyuJAatxf4dK6up5olqQDSqwABIAbZHsYxyV5ONUwwqkXuZ3+p88DGbN YyxvK3/4AbW6bnMILJYZjGSrAmduBt6K3dkt76I8= Authentication-Results: mail-nwsmtp-smtp-production-main-46.sas.yp-c.yandex.net; dkim=pass header.i=@yandex.ru Content-Type: multipart/mixed; boundary="------------1QB6KQsDfiU8dpJczO0sOsxN" Message-ID: <4fd4319b-68cb-d866-90fa-0059b63ccbea@yandex.ru> Date: Mon, 26 Jun 2023 05:38:14 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Subject: Re: POC, WIP: OR-clause support for indexes Content-Language: en-US To: Marcos Pegoraro , Alena Rybakina Cc: Andrey Lepikhov , pgsql-hackers@postgresql.org, teodor@sigaev.ru References: <567ED6CA.2040504@sigaev.ru> <05838ca5-1c78-af81-34c1-19cae2516b61@postgrespro.ru> <919bfbcb-f812-758d-d687-71f89f0d9a68@postgrespro.ru> From: Alena Rybakina 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. --------------1QB6KQsDfiU8dpJczO0sOsxN Content-Type: multipart/alternative; boundary="------------1P56NGcmFX02IygSaJPNmBMY" --------------1P56NGcmFX02IygSaJPNmBMY Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Sorry,  I wrote the last sentence in a confusing way, I meant that I formed transformations for any number of "or" expressions (const_transform_or_limit=1). in regression tests, I noticed only diff changes of transformations of "or" expressions to "any". I attach a file with diff. On 26.06.2023 04:47, Alena Rybakina wrote: > > Hi, all! Sorry I haven't written for a long time. > > I finished writing the code patch for transformation "Or" expressions > to "Any" expressions. I didn't see any problems in regression tests, > even when I changed the constant at which the minimum or expression is > replaced by any at 0. I ran my patch on sqlancer and so far the code > has never fallen. > > On 14.01.2023 18:45, Marcos Pegoraro wrote: >> >> I agree with your idea and try to implement it and will soon >> attach a patch with a solution. >> >> Additionally, if those OR constants repeat you'll see ... >> If all constants are the same value, fine >> explain select * from x where ((ID = 1) OR (ID = 1) OR (ID = 1)); >> Index Only Scan using x_id on x  (cost=0.42..4.44 rows=1 width=4) >>   Index Cond: (id = 1) >> >> if all values are almost the same, ops >> explain select * from x where ((ID = 1) OR (ID = 1) OR (ID = 1) OR >> (ID = 2)); >> Bitmap Heap Scan on x  (cost=17.73..33.45 rows=4 width=4) >>   Recheck Cond: ((id = 1) OR (id = 1) OR (id = 1) OR (id = 2)) >>   ->  BitmapOr  (cost=17.73..17.73 rows=4 width=0) >>         ->  Bitmap Index Scan on x_id  (cost=0.00..4.43 rows=1 width=0) >>               Index Cond: (id = 1) >>         ->  Bitmap Index Scan on x_id  (cost=0.00..4.43 rows=1 width=0) >>               Index Cond: (id = 1) >>         ->  Bitmap Index Scan on x_id  (cost=0.00..4.43 rows=1 width=0) >>               Index Cond: (id = 1) >>         ->  Bitmap Index Scan on x_id  (cost=0.00..4.43 rows=1 width=0) >>               Index Cond: (id = 2) >> >> thanks >> Marcos >> > -- > > Regards, > > Alena Rybakina > --------------1P56NGcmFX02IygSaJPNmBMY Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit

Sorry,  I wrote the last sentence in a confusing way, I meant that I formed transformations for any number of "or" expressions (const_transform_or_limit=1). in regression tests, I noticed only diff changes of transformations of "or" expressions to "any". I attach a file with diff.

On 26.06.2023 04:47, Alena Rybakina wrote:

Hi, all! Sorry I haven't written for a long time.

I finished writing the code patch for transformation "Or" expressions to "Any" expressions. I didn't see any problems in regression tests, even when I changed the constant at which the minimum or expression is replaced by any at 0. I ran my patch on sqlancer and so far the code has never fallen.

On 14.01.2023 18:45, Marcos Pegoraro wrote:

I agree with your idea and try to implement it and will soon attach a patch with a solution.

Additionally, if those OR constants repeat you'll see ...
If all constants are the same value, fine
explain select * from x where ((ID = 1) OR (ID = 1) OR (ID = 1)); 
Index Only Scan using x_id on x  (cost=0.42..4.44 rows=1 width=4)
  Index Cond: (id = 1)

if all values are almost the same, ops
explain select * from x where ((ID = 1) OR (ID = 1) OR (ID = 1) OR (ID = 2));
Bitmap Heap Scan on x  (cost=17.73..33.45 rows=4 width=4)
  Recheck Cond: ((id = 1) OR (id = 1) OR (id = 1) OR (id = 2))
  ->  BitmapOr  (cost=17.73..17.73 rows=4 width=0)
        ->  Bitmap Index Scan on x_id  (cost=0.00..4.43 rows=1 width=0)
              Index Cond: (id = 1)
        ->  Bitmap Index Scan on x_id  (cost=0.00..4.43 rows=1 width=0)
              Index Cond: (id = 1)
        ->  Bitmap Index Scan on x_id  (cost=0.00..4.43 rows=1 width=0)
              Index Cond: (id = 1)
        ->  Bitmap Index Scan on x_id  (cost=0.00..4.43 rows=1 width=0)
              Index Cond: (id = 2)

thanks
Marcos

--

Regards,

Alena Rybakina

--------------1P56NGcmFX02IygSaJPNmBMY-- --------------1QB6KQsDfiU8dpJczO0sOsxN Content-Type: text/plain; charset=UTF-8; name="regression.diffs" Content-Disposition: attachment; filename="regression.diffs" Content-Transfer-Encoding: base64 ZGlmZiAtVTMgL2hvbWUvYWxlbmEvcG9zdGdyZXNwcm85L3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvY3JlYXRlX2luZGV4Lm91dCAvaG9tZS9hbGVuYS9wb3N0Z3Jlc3Bybzkvc3JjL3Rl c3QvcmVncmVzcy9yZXN1bHRzL2NyZWF0ZV9pbmRleC5vdXQKLS0tIC9ob21lL2FsZW5hL3Bv c3RncmVzcHJvOS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQJ MjAyMy0wNi0yNiAwNDowODoyMi45MDMyOTQzNDIgKzAzMDAKKysrIC9ob21lL2FsZW5hL3Bv c3RncmVzcHJvOS9zcmMvdGVzdC9yZWdyZXNzL3Jlc3VsdHMvY3JlYXRlX2luZGV4Lm91dAky MDIzLTA2LTI2IDA1OjM2OjMxLjkwNDIwNTk4NiArMDMwMApAQCAtMTgzOCwxOCArMTgzOCwx MSBAQAogRVhQTEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNUICogRlJPTSB0ZW5rMQogICBXSEVS RSB0aG91c2FuZCA9IDQyIEFORCAodGVudGhvdXMgPSAxIE9SIHRlbnRob3VzID0gMyBPUiB0 ZW50aG91cyA9IDQyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVuazEKLSAg IFJlY2hlY2sgQ29uZDogKCgodGhvdXNhbmQgPSA0MikgQU5EICh0ZW50aG91cyA9IDEpKSBP UiAoKHRob3VzYW5kID0gNDIpIEFORCAodGVudGhvdXMgPSAzKSkgT1IgKCh0aG91c2FuZCA9 IDQyKSBBTkQgKHRlbnRob3VzID0gNDIpKSkKLSAgIC0+ICBCaXRtYXBPcgotICAgICAgICAg LT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCi0gICAgICAg ICAgICAgICBJbmRleCBDb25kOiAoKHRob3VzYW5kID0gNDIpIEFORCAodGVudGhvdXMgPSAx KSkKLSAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50 aG91cwotICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKCh0aG91c2FuZCA9IDQyKSBBTkQg KHRlbnRob3VzID0gMykpCi0gICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVu azFfdGhvdXNfdGVudGhvdXMKLSAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICgodGhvdXNh bmQgPSA0MikgQU5EICh0ZW50aG91cyA9IDQyKSkKLSg5IHJvd3MpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNp bmcgdGVuazFfdGhvdXNfdGVudGhvdXMgb24gdGVuazEKKyAgIEluZGV4IENvbmQ6ICgodGhv dXNhbmQgPSA0MikgQU5EICh0ZW50aG91cyA9IEFOWSAoJ3sxLDMsNDJ9Jzo6aW50ZWdlcltd KSkpCisoMiByb3dzKQogCiBTRUxFQ1QgKiBGUk9NIHRlbmsxCiAgIFdIRVJFIHRob3VzYW5k ID0gNDIgQU5EICh0ZW50aG91cyA9IDEgT1IgdGVudGhvdXMgPSAzIE9SIHRlbnRob3VzID0g NDIpOwpAQCAtMTg2MSwyMCArMTg1NCwxNyBAQAogRVhQTEFJTiAoQ09TVFMgT0ZGKQogU0VM RUNUIGNvdW50KCopIEZST00gdGVuazEKICAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhv dXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9IDk5KTsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEFnZ3JlZ2F0 ZQogICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVuazEKLSAgICAgICAgIFJlY2hlY2sg Q29uZDogKChodW5kcmVkID0gNDIpIEFORCAoKHRob3VzYW5kID0gNDIpIE9SICh0aG91c2Fu ZCA9IDk5KSkpCisgICAgICAgICBSZWNoZWNrIENvbmQ6ICgoaHVuZHJlZCA9IDQyKSBBTkQg KHRob3VzYW5kID0gQU5ZICgnezQyLDk5fSc6OmludGVnZXJbXSkpKQogICAgICAgICAgLT4g IEJpdG1hcEFuZAogICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRl bmsxX2h1bmRyZWQKICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChodW5kcmVk ID0gNDIpCi0gICAgICAgICAgICAgICAtPiAgQml0bWFwT3IKLSAgICAgICAgICAgICAgICAg ICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHRob3VzYW5kID0gNDIpCi0g ICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdGhv dXNfdGVudGhvdXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh0 aG91c2FuZCA9IDk5KQotKDExIHJvd3MpCisgICAgICAgICAgICAgICAtPiAgQml0bWFwIElu ZGV4IFNjYW4gb24gdGVuazFfdGhvdXNfdGVudGhvdXMKKyAgICAgICAgICAgICAgICAgICAg IEluZGV4IENvbmQ6ICh0aG91c2FuZCA9IEFOWSAoJ3s0Miw5OX0nOjppbnRlZ2VyW10pKQor KDggcm93cykKIAogU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKICAgV0hFUkUgaHVuZHJl ZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9IDk5KTsKZGlmZiAtVTMg L2hvbWUvYWxlbmEvcG9zdGdyZXNwcm85L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9p bi5vdXQgL2hvbWUvYWxlbmEvcG9zdGdyZXNwcm85L3NyYy90ZXN0L3JlZ3Jlc3MvcmVzdWx0 cy9qb2luLm91dAotLS0gL2hvbWUvYWxlbmEvcG9zdGdyZXNwcm85L3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvam9pbi5vdXQJMjAyMy0wNi0yNiAwNDowODoyMi45MDMyOTQzNDIgKzAz MDAKKysrIC9ob21lL2FsZW5hL3Bvc3RncmVzcHJvOS9zcmMvdGVzdC9yZWdyZXNzL3Jlc3Vs dHMvam9pbi5vdXQJMjAyMy0wNi0yNiAwNTozNjozNi43NDgxOTE2OTkgKzAzMDAKQEAgLTQx ODQsMTAgKzQxODQsMTAgQEAKIHNlbGVjdCAqIGZyb20gdGVuazEgYSBqb2luIHRlbmsxIGIg b24KICAgKGEudW5pcXVlMSA9IDEgYW5kIGIudW5pcXVlMSA9IDIpIG9yCiAgICgoYS51bmlx dWUyID0gMyBvciBhLnVuaXF1ZTIgPSA3KSBhbmQgYi5odW5kcmVkID0gNCk7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIE5lc3RlZCBM b29wCi0gICBKb2luIEZpbHRlcjogKCgoYS51bmlxdWUxID0gMSkgQU5EIChiLnVuaXF1ZTEg PSAyKSkgT1IgKCgoYS51bmlxdWUyID0gMykgT1IgKGEudW5pcXVlMiA9IDcpKSBBTkQgKGIu aHVuZHJlZCA9IDQpKSkKKyAgIEpvaW4gRmlsdGVyOiAoKChhLnVuaXF1ZTEgPSAxKSBBTkQg KGIudW5pcXVlMSA9IDIpKSBPUiAoKGEudW5pcXVlMiA9IEFOWSAoJ3szLDd9Jzo6aW50ZWdl cltdKSkgQU5EIChiLmh1bmRyZWQgPSA0KSkpCiAgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBv biB0ZW5rMSBiCiAgICAgICAgICBSZWNoZWNrIENvbmQ6ICgodW5pcXVlMSA9IDIpIE9SICho dW5kcmVkID0gNCkpCiAgICAgICAgICAtPiAgQml0bWFwT3IKQEAgLTQxOTcsMTUgKzQxOTcs MTMgQEAKICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChodW5kcmVkID0gNCkK ICAgIC0+ICBNYXRlcmlhbGl6ZQogICAgICAgICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24g dGVuazEgYQotICAgICAgICAgICAgICAgUmVjaGVjayBDb25kOiAoKHVuaXF1ZTEgPSAxKSBP UiAodW5pcXVlMiA9IDMpIE9SICh1bmlxdWUyID0gNykpCisgICAgICAgICAgICAgICBSZWNo ZWNrIENvbmQ6ICgodW5pcXVlMSA9IDEpIE9SICh1bmlxdWUyID0gQU5ZICgnezMsN30nOjpp bnRlZ2VyW10pKSkKICAgICAgICAgICAgICAgIC0+ICBCaXRtYXBPcgogICAgICAgICAgICAg ICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3VuaXF1ZTEKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUxID0gMSkKICAgICAg ICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV91bmlxdWUy Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMiA9IDMp Ci0gICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFf dW5pcXVlMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1 ZTIgPSA3KQotKDE5IHJvd3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBD b25kOiAodW5pcXVlMiA9IEFOWSAoJ3szLDd9Jzo6aW50ZWdlcltdKSkKKygxNyByb3dzKQog CiAtLQogLS0gdGVzdCBwbGFjZW1lbnQgb2YgbW92YWJsZSBxdWFscyBpbiBhIHBhcmFtZXRl cml6ZWQgam9pbiB0cmVlCmRpZmYgLVUzIC9ob21lL2FsZW5hL3Bvc3RncmVzcHJvOS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2V4dC5vdXQgL2hvbWUvYWxlbmEvcG9zdGdy ZXNwcm85L3NyYy90ZXN0L3JlZ3Jlc3MvcmVzdWx0cy9zdGF0c19leHQub3V0Ci0tLSAvaG9t ZS9hbGVuYS9wb3N0Z3Jlc3Bybzkvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0c19l eHQub3V0CTIwMjMtMDYtMjYgMDQ6MDQ6MjYuNTYwNDM1MDk0ICswMzAwCisrKyAvaG9tZS9h bGVuYS9wb3N0Z3Jlc3Bybzkvc3JjL3Rlc3QvcmVncmVzcy9yZXN1bHRzL3N0YXRzX2V4dC5v dXQJMjAyMy0wNi0yNiAwNTozNjo0OC4zMDAxNTU2NjcgKzAzMDAKQEAgLTEzMjIsMTkgKzEz MjIsMTkgQEAKIFNFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJ1NFTEVDVCAq IEZST00gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgV0hFUkUgKGEgPSAxIE9SIGEgPSA1MSkg QU5EIGIgPSAnJzEnJycpOwogIGVzdGltYXRlZCB8IGFjdHVhbCAKIC0tLS0tLS0tLS0tKy0t LS0tLS0tCi0gICAgICAgIDk5IHwgICAgMTAwCisgICAgICAgMTAwIHwgICAgMTAwCiAoMSBy b3cpCiAKIFNFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJ1NFTEVDVCAqIEZS T00gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgV0hFUkUgKGEgPSAxIE9SIGEgPSA1MSkgQU5E IChiID0gJycxJycgT1IgYiA9ICcnMicnKScpOwogIGVzdGltYXRlZCB8IGFjdHVhbCAKIC0t LS0tLS0tLS0tKy0tLS0tLS0tCi0gICAgICAgIDk5IHwgICAgMTAwCisgICAgICAgMTAwIHwg ICAgMTAwCiAoMSByb3cpCiAKIFNFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3Mo J1NFTEVDVCAqIEZST00gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgV0hFUkUgKGEgPSAxIE9S IGEgPSAyIE9SIGEgPSA1MSBPUiBhID0gNTIpIEFORCAoYiA9ICcnMScnIE9SIGIgPSAnJzIn JyknKTsKICBlc3RpbWF0ZWQgfCBhY3R1YWwgCiAtLS0tLS0tLS0tLSstLS0tLS0tLQotICAg ICAgIDE5NyB8ICAgIDIwMAorICAgICAgIDIwMCB8ICAgIDIwMAogKDEgcm93KQogCiAtLSBP UiBjbGF1c2VzIHJlZmVyZW5jaW5nIGRpZmZlcmVudCBhdHRyaWJ1dGVzIGFyZSBpbmNvbXBh dGlibGUKQEAgLTE2NjQsMTkgKzE2NjQsMTkgQEAKIFNFTEVDVCAqIEZST00gY2hlY2tfZXN0 aW1hdGVkX3Jvd3MoJ1NFTEVDVCAqIEZST00gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgV0hF UkUgKChhICogMikgPSAyIE9SIChhICogMikgPSAxMDIpIEFORCB1cHBlcihiKSA9ICcnMScn Jyk7CiAgZXN0aW1hdGVkIHwgYWN0dWFsIAogLS0tLS0tLS0tLS0rLS0tLS0tLS0KLSAgICAg ICAgOTkgfCAgICAxMDAKKyAgICAgICAxMDAgfCAgICAxMDAKICgxIHJvdykKIAogU0VMRUNU ICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnU0VMRUNUICogRlJPTSBmdW5jdGlvbmFs X2RlcGVuZGVuY2llcyBXSEVSRSAoKGEgKiAyKSA9IDIgT1IgKGEgKiAyKSA9IDEwMikgQU5E ICh1cHBlcihiKSA9ICcnMScnIE9SIHVwcGVyKGIpID0gJycyJycpJyk7CiAgZXN0aW1hdGVk IHwgYWN0dWFsIAogLS0tLS0tLS0tLS0rLS0tLS0tLS0KLSAgICAgICAgOTkgfCAgICAxMDAK KyAgICAgICAxMDAgfCAgICAxMDAKICgxIHJvdykKIAogU0VMRUNUICogRlJPTSBjaGVja19l c3RpbWF0ZWRfcm93cygnU0VMRUNUICogRlJPTSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyBX SEVSRSAoKGEgKiAyKSA9IDIgT1IgKGEgKiAyKSA9IDQgT1IgKGEgKiAyKSA9IDEwMiBPUiAo YSAqIDIpID0gMTA0KSBBTkQgKHVwcGVyKGIpID0gJycxJycgT1IgdXBwZXIoYikgPSAnJzIn JyknKTsKICBlc3RpbWF0ZWQgfCBhY3R1YWwgCiAtLS0tLS0tLS0tLSstLS0tLS0tLQotICAg ICAgIDE5NyB8ICAgIDIwMAorICAgICAgIDIwMCB8ICAgIDIwMAogKDEgcm93KQogCiAtLSBP UiBjbGF1c2VzIHJlZmVyZW5jaW5nIGRpZmZlcmVudCBhdHRyaWJ1dGVzCmRpZmYgLVUzIC9o b21lL2FsZW5hL3Bvc3RncmVzcHJvOS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRp dGlvbl9wcnVuZS5vdXQgL2hvbWUvYWxlbmEvcG9zdGdyZXNwcm85L3NyYy90ZXN0L3JlZ3Jl c3MvcmVzdWx0cy9wYXJ0aXRpb25fcHJ1bmUub3V0Ci0tLSAvaG9tZS9hbGVuYS9wb3N0Z3Jl c3Bybzkvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fcHJ1bmUub3V0CTIw MjMtMDYtMjYgMDQ6MDU6MzAuMzA1MjA5NTkwICswMzAwCisrKyAvaG9tZS9hbGVuYS9wb3N0 Z3Jlc3Bybzkvc3JjL3Rlc3QvcmVncmVzcy9yZXN1bHRzL3BhcnRpdGlvbl9wcnVuZS5vdXQJ MjAyMy0wNi0yNiAwNTozNjo1OC45MTIxMjAxNjMgKzAzMDAKQEAgLTgyLDIzICs4MiwyMyBA QAogKDIgcm93cykKIAogZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxwIHdo ZXJlIGEgPSAnYScgb3IgYSA9ICdjJzsKLSAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEFwcGVuZAogICAgLT4gIFNlcSBTY2FuIG9u IGxwX2FkIGxwXzEKLSAgICAgICAgIEZpbHRlcjogKChhID0gJ2EnOjpicGNoYXIpIE9SIChh ID0gJ2MnOjpicGNoYXIpKQorICAgICAgICAgRmlsdGVyOiAoYSA9IEFOWSAoJ3thLGN9Jzo6 YnBjaGFyW10pKQogICAgLT4gIFNlcSBTY2FuIG9uIGxwX2JjIGxwXzIKLSAgICAgICAgIEZp bHRlcjogKChhID0gJ2EnOjpicGNoYXIpIE9SIChhID0gJ2MnOjpicGNoYXIpKQorICAgICAg ICAgRmlsdGVyOiAoYSA9IEFOWSAoJ3thLGN9Jzo6YnBjaGFyW10pKQogKDUgcm93cykKIAog ZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgaXMgbm90IG51 bGwgYW5kIChhID0gJ2EnIG9yIGEgPSAnYycpOwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogIEFwcGVuZAogICAgLT4gIFNlcSBTY2FuIG9uIGxwX2FkIGxwXzEKLSAg ICAgICAgIEZpbHRlcjogKChhIElTIE5PVCBOVUxMKSBBTkQgKChhID0gJ2EnOjpicGNoYXIp IE9SIChhID0gJ2MnOjpicGNoYXIpKSkKKyAgICAgICAgIEZpbHRlcjogKChhIElTIE5PVCBO VUxMKSBBTkQgKGEgPSBBTlkgKCd7YSxjfSc6OmJwY2hhcltdKSkpCiAgICAtPiAgU2VxIFNj YW4gb24gbHBfYmMgbHBfMgotICAgICAgICAgRmlsdGVyOiAoKGEgSVMgTk9UIE5VTEwpIEFO RCAoKGEgPSAnYSc6OmJwY2hhcikgT1IgKGEgPSAnYyc6OmJwY2hhcikpKQorICAgICAgICAg RmlsdGVyOiAoKGEgSVMgTk9UIE5VTEwpIEFORCAoYSA9IEFOWSAoJ3thLGN9Jzo6YnBjaGFy W10pKSkKICg1IHJvd3MpCiAKIGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBs cCB3aGVyZSBhIDw+ICdnJzsKQEAgLTUxNSwxMCArNTE1LDEwIEBACiAoMjcgcm93cykKIAog ZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhID0gMSBvciBh ID0gNzsKLSAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K ICBTZXEgU2NhbiBvbiBybHAyIHJscAotICAgRmlsdGVyOiAoKGEgPSAxKSBPUiAoYSA9IDcp KQorICAgRmlsdGVyOiAoYSA9IEFOWSAoJ3sxLDd9Jzo6aW50ZWdlcltdKSkKICgyIHJvd3Mp CiAKIGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA9IDEg b3IgYiA9ICdhYic7CkBAIC01OTYsMTMgKzU5NiwxMyBAQAogCiAtLSB3aGVyZSBjbGF1c2Ug Y29udHJhZGljdHMgc3ViLXBhcnRpdGlvbidzIGNvbnN0cmFpbnQKIGV4cGxhaW4gKGNvc3Rz IG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA9IDIwIG9yIGEgPSA0MDsKLSAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogIEFwcGVuZAogICAgLT4gIFNlcSBTY2FuIG9uIHJscDRf MSBybHBfMQotICAgICAgICAgRmlsdGVyOiAoKGEgPSAyMCkgT1IgKGEgPSA0MCkpCisgICAg ICAgICBGaWx0ZXI6IChhID0gQU5ZICgnezIwLDQwfSc6OmludGVnZXJbXSkpCiAgICAtPiAg U2VxIFNjYW4gb24gcmxwNV9kZWZhdWx0IHJscF8yCi0gICAgICAgICBGaWx0ZXI6ICgoYSA9 IDIwKSBPUiAoYSA9IDQwKSkKKyAgICAgICAgIEZpbHRlcjogKGEgPSBBTlkgKCd7MjAsNDB9 Jzo6aW50ZWdlcltdKSkKICg1IHJvd3MpCiAKIGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0 ICogZnJvbSBybHAzIHdoZXJlIGEgPSAyMDsgICAvKiBlbXB0eSAqLwpAQCAtMTkzMywxMCAr MTkzMywxMCBAQAogCiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gaHAgd2hl cmUgYSA9IDEgYW5kIGIgPSAnYWJjZGUnIGFuZAogICAoYyA9IDIgb3IgYyA9IDMpOwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgU2VxIFNjYW4gb24gaHAyIGhw Ci0gICBGaWx0ZXI6ICgoYSA9IDEpIEFORCAoYiA9ICdhYmNkZSc6OnRleHQpIEFORCAoKGMg PSAyKSBPUiAoYyA9IDMpKSkKKyAgIEZpbHRlcjogKChjID0gQU5ZICgnezIsM30nOjppbnRl Z2VyW10pKSBBTkQgKGEgPSAxKSBBTkQgKGIgPSAnYWJjZGUnOjp0ZXh0KSkKICgyIHJvd3Mp CiAKIGRyb3AgdGFibGUgaHAyOwpAQCAtMjI2NSwxMSArMjI2NSwxMSBAQAogICAgICAgICAg V29ya2VycyBMYXVuY2hlZDogTgogICAgICAgICAgLT4gIFBhcmFsbGVsIEFwcGVuZCAoYWN0 dWFsIHJvd3M9TiBsb29wcz1OKQogICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBT Y2FuIG9uIGFiX2ExX2IyIGFiXzEgKGFjdHVhbCByb3dzPU4gbG9vcHM9TikKLSAgICAgICAg ICAgICAgICAgICAgIEZpbHRlcjogKChiID0gMikgQU5EICgoYSA9ICQwKSBPUiAoYSA9ICQx KSkpCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICgoYSA9IEFOWSAoQVJSQVlbJDAs ICQxXSkpIEFORCAoYiA9IDIpKQogICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBT Y2FuIG9uIGFiX2EyX2IyIGFiXzIgKG5ldmVyIGV4ZWN1dGVkKQotICAgICAgICAgICAgICAg ICAgICAgRmlsdGVyOiAoKGIgPSAyKSBBTkQgKChhID0gJDApIE9SIChhID0gJDEpKSkKKyAg ICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKChhID0gQU5ZIChBUlJBWVskMCwgJDFdKSkg QU5EIChiID0gMikpCiAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24g YWJfYTNfYjIgYWJfMyAoYWN0dWFsIHJvd3M9TiBsb29wcz1OKQotICAgICAgICAgICAgICAg ICAgICAgRmlsdGVyOiAoKGIgPSAyKSBBTkQgKChhID0gJDApIE9SIChhID0gJDEpKSkKKyAg ICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKChhID0gQU5ZIChBUlJBWVskMCwgJDFdKSkg QU5EIChiID0gMikpCiAoMTYgcm93cykKIAogLS0gVGVzdCBwcnVuaW5nIGR1cmluZyBwYXJh bGxlbCBuZXN0ZWQgbG9vcCBxdWVyeQo= --------------1QB6KQsDfiU8dpJczO0sOsxN--