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 1pjxNC-0008J2-9i for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Apr 2023 07:16:02 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pjxNB-0007a2-6N for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Apr 2023 07:16:01 +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 1pjxNA-0007Zt-Jd for pgsql-hackers@lists.postgresql.org; Wed, 05 Apr 2023 07:16:00 +0000 Received: from mail-oa1-x2c.google.com ([2001:4860:4864:20::2c]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pjxN3-00016X-W3 for pgsql-hackers@postgresql.org; Wed, 05 Apr 2023 07:15:59 +0000 Received: by mail-oa1-x2c.google.com with SMTP id 586e51a60fabf-17ebba88c60so37380065fac.3 for ; Wed, 05 Apr 2023 00:15:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1680678953; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=SA3zKiNCr0UGyPwUpxtox/VzGBglYqp7mGbEiZ2HTKM=; b=g4mZ8uD2gkq16inOT0TETDWSnCGmxbrH2KKWRdOBH9R+zJ67WczSndi1knEICed41S PkKYm6TnUm2cHyayMC6QQQ1zdUI7YMf9C9oLfMKpFhGMtemxPk4g0ggRAv4jFiQBL+wJ XLU8h2IlhuZtsmlYZ78T60si1Jv1dFzfNjzTKqzrkZK5vGf/gjVrIyYe5CNtJqSf3p25 wLBUnu1+CAANfEJ2dayCbvwZdKqAFAx0PJ9dbxJqBnKrED91HXhAoTsNsyie7I+q8pTu ZNQKOCfXSAOPCKdCwJYIVTZW7uk8Qqzc9qPxTplwqy9gqt2AgtPwhgYoR2KMlWKJBbOJ leng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680678953; 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=SA3zKiNCr0UGyPwUpxtox/VzGBglYqp7mGbEiZ2HTKM=; b=QfQCitn3B2Ep28t1nl6XiVqtmeFT32eWtsallAI2Su8EAiSNtVcBgh4t6oD5YJxXZl AcuAKQ2Werix44z+S1mFlBtZ/qu8J3wKYwu0dM6vSTz6ZxvnZOiTbuGv6nOjKq7aZ+bs ShFfWskG4ykTPVhiZKlQ4r0kNPxUsShXDGYYwqE4evdgMUHeFghYP9aV9nxjMbcgMogr 9rJhcsBojOPVdtYPi4uTaB+DlW+6Shkmi5pokciRp4xsCHjbHy5XaDSmHJX+gGiz2TcG U3BJHX/pQVjyLNT/xaDPaPdG7y4DiufkS75J5J7c6+zuePibywTfIIuscuOkxcQcLIDV oPhQ== X-Gm-Message-State: AAQBX9fLJtFBIjjWFanvX7sxE+IWGg8Jsk9Tiu/j/BXsFfkLLZd67ALU Myols4DPKGFwFH/RXkokcW4zKeyKqT5qCnUGdqxrWMjH0Qo= X-Google-Smtp-Source: AKy350b7Ahg4WVqw+akPrKAGsA97sjd9skIhO8qlzUpfLWaFsSAEb2OkETu98Qzd75G7ptCPG53cGIiCagZTF4ZVO7o= X-Received: by 2002:a05:6871:789:b0:17f:2918:2f46 with SMTP id o9-20020a056871078900b0017f29182f46mr2498217oap.5.1680678953329; Wed, 05 Apr 2023 00:15:53 -0700 (PDT) MIME-Version: 1.0 References: <247851.1668293143@sss.pgh.pa.us> In-Reply-To: <247851.1668293143@sss.pgh.pa.us> From: Andy Fan Date: Wed, 5 Apr 2023 15:15:42 +0800 Message-ID: Subject: Re: A new strategy for pull-up correlated ANY_SUBLINK To: Tom Lane , vignesh C , Richard Guo , Andrey Lepikhov Cc: pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000ff029e05f8918f7c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ff029e05f8918f7c Content-Type: multipart/alternative; boundary="000000000000ff029d05f8918f7a" --000000000000ff029d05f8918f7a Content-Type: text/plain; charset="UTF-8" Hi Tom: Sorry for the delayed response! I think my knowledge has been refreshed for this discussion. > One thing I'm not at all clear about is whether we need to restrict > the optimization so that it doesn't occur if the subquery contains > outer references falling outside available_rels. I think that that > case is covered by is_simple_subquery() deciding later to not pull up > the subquery based on LATERAL restrictions, but maybe that misses > something. > I think we need the restriction and that should be enough for this feature . Given the query Richard provided before: explain select * from tenk1 A where exists (select 1 from tenk2 B where A.hundred in (select C.hundred FROM tenk2 C WHERE c.odd = b.odd)); It first can be converted to the below format without any issue. SELECT * FROM tenk1 A SEMI JOIN tenk2 B on A.hundred in (select C.hundred FROM tenk2 C WHERE c.odd = b.odd); Then without the restriction, since we only pull the varnos from sublink->testexpr, then it is {A}, so it convert to SELECT * FROM (tenk1 A SEMI JOIN LATERAL (SELECT c.hundred FROM tenk2 C) ON c.odd = b.odd AND a.hundred = v.hundred) SEMI JOIN on tenk2 B ON TRUE; then the above query is NOT A VALID QUERY since: 1. The above query is *not* same as SELECT * FROM (tenk1 A SEMI JOIN tenk2 B) on true SEMI JOIN LATERAL (SELECT c.hundred FROM tenk2 C) v ON v.odd = b.odd; 2. The above query requires b.odd when B is not available. So it is right that an optimizer can't generate a plan for it. The fix would be to do the restriction before applying this optimization. I'm not sure pull-up-subquery can play any role here, IIUC, the bad thing happens before pull-up-subquery. I also write & analyze more test and found no issue by me 1. SELECT * FROM tenk1 A LEFT JOIN tenk2 B ON A.hundred in (SELECT c.hundred FROM tenk2 C WHERE c.odd = b.odd); ==> should not be pull-up to rarg of the left join since A.hundred is not available. 2. SELECT * FROM tenk1 A LEFT JOIN tenk2 B ON B.hundred in (SELECT c.hundred FROM tenk2 C WHERE c.odd = a.odd); ==> should not be pull-up to rarg of the left join since A.odd is not available. 3. SELECT * FROM tenk1 A LEFT JOIN tenk2 B ON B.hundred in (SELECT c.hundred FROM tenk2 C WHERE c.odd = b.odd); ==> should be pull-up to rarg of left join. 4. SELECT * FROM tenk1 A INNER JOIN tenk2 B ON A.hundred in (SELECT c.hundred FROM tenk2 C WHERE c.odd = b.odd); ==> pull-up as expected. 5. SELECT * FROM tenk1 A RIGHT JOIN tenk2 B ON A.hundred in (SELECT c.hundred FROM tenk2 C WHERE c.odd = b.odd); ==> should not be pull-up into larg of left join since b.odd is not available. About the existing test case changes because of this patch, they do requires on the sublink is planned to a subPlan, so I introduces the below changes to keep the original intention. Changes A in (SELECT A FROM ..) To (A, random() > 0) in (SELECT a, random() > 0 FROM ..); I'm also wondering whether the similar restriction in > convert_EXISTS_sublink_to_join could be removed similarly. > In this light it was a mistake for convert_EXISTS_sublink_to_join > to manage the pullup itself rather than doing it in the two-step > fashion that convert_ANY_sublink_to_join does it. > > Yes, it is true! I prefer to believe this deserves a separate patch. Any feedback is welcome! -- Best Regards Andy Fan --000000000000ff029d05f8918f7a Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Tom:
=C2=A0= =C2=A0
=C2=A0Sorry for the delayed response!=C2=A0 I think my kno= wledge has been refreshed
=C2=A0for this discussion.
= =C2=A0
One thing I'm not at all clear about is whether we need to restrict
the optimization so that it doesn't occur if the subquery contains
outer references falling outside available_rels.=C2=A0 I think that that case is covered by is_simple_subquery() deciding later to not pull up
the subquery based on LATERAL restrictions, but maybe that misses
something.

I think we need the restrict= ion and that should be enough for this feature
. Given the qu= ery Richard provided before:

explain
select * from tenk1 A wher= e exists
(select 1 from tenk2 B
where A.hundred in (select C.hundred = FROM tenk2 C
WHERE c.odd =3D b.odd));
It first can be converted to the below f= ormat without any issue.

SELECT * FROM tenk1 A SEMI JOIN tenk2 B
= on A.hundred in (select C.hundred FROM tenk2 C
WHERE c.odd =3D b.odd);
Then without the restriction, since we only pull the varnos from
s= ublink->testexpr, then it is {A}, so it convert to

SELECT * FROM= =C2=A0
(tenk1 A SEMI JOIN LATERAL (SELECT c= .hundred FROM tenk2 C)
ON c.odd =3D b.odd AND a.hundred =3D v.hundred)= =C2=A0
SEMI JOIN on tenk2 B ON TRUE;
then the above query is NOT A VALID QUERY since:
1. The above query is *not* same as

SELECT * FROM (tenk1 A SE= MI JOIN tenk2 B) on true
SEMI JOIN LATERAL (SELECT c.hundred FROM tenk2 = C) v=C2=A0
ON v.odd =3D b.odd;

2. The above query= requires b.odd when B is not available. So it is
right that an optimizer can't generate a plan for it. The fix wo= uld
be to do the restriction before applying this optimization.

I'm not su= re pull-up-subquery can play any role here, IIUC, the bad thing
happens = before pull-up-subquery.

I also write & analyze = more test and found no issue by me

1. SELECT * FROM tenk1 A LEFT JOI= N tenk2 B
ON A.hundred in (SELECT c.hundred FROM tenk2 C WHERE c.odd =3D= b.odd);
=3D=3D> should not be pull-up to rarg of the left join since= A.hundred is not
available.

2.=C2=A0 SELECT * FROM tenk1 A LEFT = JOIN tenk2 B
ON B.hundred in (SELECT c.hundred FROM tenk2 C WHERE c.odd = =3D a.odd);
=3D=3D> should not be pull-up to rarg of the left join si= nce A.odd is not
available.

3. SELECT * FROM tenk1 A LEFT JOIN te= nk2 B
ON B.hundred in (SELECT c.hundred FROM tenk2 C WHERE c.odd =3D b.o= dd);
=3D=3D> should be pull-up to rarg of left join.

4. SELECT= * FROM tenk1 A INNER JOIN tenk2 B
ON A.hundred in (SELECT c.hundred FRO= M tenk2 C WHERE c.odd =3D b.odd);
=3D=3D> pull-up as expected.
5. SELECT * FROM tenk1 A RIGHT JOIN tenk2 B
ON A.hundred in (SELECT c.h= undred FROM tenk2 C WHERE c.odd =3D b.odd);
=3D=3D> should not be pul= l-up into larg of left join since b.odd is not
available.
=

About the existing test case changes because of th= is patch, they do
requires on the sublink is planned to a subPlan, so I = introduces the below
changes to keep the original intention.
<= div>
Changes
A in (SELECT A FROM ..)
To
(A, random()= > 0) in (SELECT a, random() > 0 FROM ..);=C2=A0

=

I'm also wondering whether the similar restriction in
convert_EXISTS_sublink_to_join could be removed similarly.
In this light it was a mistake for convert_EXISTS_sublink_to_join
to manage the pullup itself rather than doing it in the two-step
fashion that convert_ANY_sublink_to_join does it.

=
Yes,=C2=A0 it is true!=C2=A0 I prefer to believe this deserv= es a separate patch.=C2=A0=C2=A0

Any feedbac= k is welcome!

--
=
Best Regards
Andy Fan
--000000000000ff029d05f8918f7a-- --000000000000ff029e05f8918f7c Content-Type: application/x-patch; name="v3-0001-Pull-up-direct-correlated-ANY_SUBLINK-using-later.patch" Content-Disposition: attachment; filename="v3-0001-Pull-up-direct-correlated-ANY_SUBLINK-using-later.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lg3cr1dt0 RnJvbSAzZTJjOGI0NjkyOGE3ZjI0NmVlNzA2NmI5YWQxNjBjZjE4YTJlOTUyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmR5IEZhbiA8emhpaHVpLmZhbjEyMTNAZ21haWwuY29tPgpE YXRlOiBXZWQsIDUgQXByIDIwMjMgMTQ6NDU6MTEgKzA4MDAKU3ViamVjdDogW1BBVENIIHYzXSBQ dWxsIHVwIGRpcmVjdC1jb3JyZWxhdGVkIEFOWV9TVUJMSU5LIHVzaW5nIGxhdGVyYWwgam9pbi4K Ci0tLQogLi4uL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0ICAgIHwgICA2 ICstCiBjb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbCAgICAgfCAgIDQg Ky0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3N1YnNlbGVjdC5jICAgICAgICB8ICAxOSAr KystCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0ICAgICAgICAgICAgfCAgMTQg Ky0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNlbGVjdC5vdXQgICAgICAgfCAxMDIg KysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbCAgICAgICAg ICAgICAgICAgfCAgIDggKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N1YnNlbGVjdC5zcWwgICAg ICAgICAgICB8ICAzMiArKysrKysKIDcgZmlsZXMgY2hhbmdlZCwgMTY0IGluc2VydGlvbnMoKyks IDIxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVj dGVkL3Bvc3RncmVzX2Zkdy5vdXQgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0 Z3Jlc19mZHcub3V0CmluZGV4IDA0YTNlZjQ1MGNmLi5kNDNmNzRlNDliZiAxMDA2NDQKLS0tIGEv Y29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAorKysgYi9jb250 cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CkBAIC0xMTU2Myw3ICsx MTU2Myw3IEBAIENSRUFURSBGT1JFSUdOIFRBQkxFIGZvcmVpZ25fdGJsIChiIGludCkKIENSRUFU RSBGT1JFSUdOIFRBQkxFIGZvcmVpZ25fdGJsMiAoKSBJTkhFUklUUyAoZm9yZWlnbl90YmwpCiAg IFNFUlZFUiBsb29wYmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdiYXNlX3RibCcpOwogRVhQTEFJ TiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQotU0VMRUNUIGEgRlJPTSBiYXNlX3RibCBXSEVSRSBhIElO IChTRUxFQ1QgYSBGUk9NIGZvcmVpZ25fdGJsKTsKK1NFTEVDVCBhIEZST00gYmFzZV90YmwgV0hF UkUgKGEsIHJhbmRvbSgpID4gMCkgSU4gKFNFTEVDVCBhLCByYW5kb20oKSA+IDAgRlJPTSBmb3Jl aWduX3RibCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBT ZXEgU2NhbiBvbiBwdWJsaWMuYmFzZV90YmwKQEAgLTExNTcxLDcgKzExNTcxLDcgQEAgU0VMRUNU IGEgRlJPTSBiYXNlX3RibCBXSEVSRSBhIElOIChTRUxFQ1QgYSBGUk9NIGZvcmVpZ25fdGJsKTsK ICAgIEZpbHRlcjogKFN1YlBsYW4gMSkKICAgIFN1YlBsYW4gMQogICAgICAtPiAgUmVzdWx0Ci0g ICAgICAgICAgIE91dHB1dDogYmFzZV90YmwuYQorICAgICAgICAgICBPdXRwdXQ6IGJhc2VfdGJs LmEsIChyYW5kb20oKSA+ICcwJzo6ZG91YmxlIHByZWNpc2lvbikKICAgICAgICAgICAgLT4gIEFw cGVuZAogICAgICAgICAgICAgICAgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5m b3JlaWduX3RibCBmb3JlaWduX3RibF8xCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbW90ZSBT UUw6IFNFTEVDVCBOVUxMIEZST00gcHVibGljLmJhc2VfdGJsCkBAIC0xMTU3OSw3ICsxMTU3OSw3 IEBAIFNFTEVDVCBhIEZST00gYmFzZV90YmwgV0hFUkUgYSBJTiAoU0VMRUNUIGEgRlJPTSBmb3Jl aWduX3RibCk7CiAgICAgICAgICAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBOVUxM IEZST00gcHVibGljLmJhc2VfdGJsCiAoMTEgcm93cykKIAotU0VMRUNUIGEgRlJPTSBiYXNlX3Ri bCBXSEVSRSBhIElOIChTRUxFQ1QgYSBGUk9NIGZvcmVpZ25fdGJsKTsKK1NFTEVDVCBhIEZST00g YmFzZV90YmwgV0hFUkUgKGEsIHJhbmRvbSgpID4gMCkgSU4gKFNFTEVDVCBhLCByYW5kb20oKSA+ IDAgRlJPTSBmb3JlaWduX3RibCk7CiAgYSAKIC0tLQogIDEKZGlmZiAtLWdpdCBhL2NvbnRyaWIv cG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcv c3FsL3Bvc3RncmVzX2Zkdy5zcWwKaW5kZXggNGYzMDg4YzAzZWEuLjhkNzc1ZmRjZjU3IDEwMDY0 NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbAorKysgYi9j b250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbApAQCAtMzgxNiw4ICszODE2 LDggQEAgQ1JFQVRFIEZPUkVJR04gVEFCTEUgZm9yZWlnbl90YmwyICgpIElOSEVSSVRTIChmb3Jl aWduX3RibCkKICAgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ2Jhc2VfdGJs Jyk7CiAKIEVYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKLVNFTEVDVCBhIEZST00gYmFzZV90 YmwgV0hFUkUgYSBJTiAoU0VMRUNUIGEgRlJPTSBmb3JlaWduX3RibCk7Ci1TRUxFQ1QgYSBGUk9N IGJhc2VfdGJsIFdIRVJFIGEgSU4gKFNFTEVDVCBhIEZST00gZm9yZWlnbl90YmwpOworU0VMRUNU IGEgRlJPTSBiYXNlX3RibCBXSEVSRSAoYSwgcmFuZG9tKCkgPiAwKSBJTiAoU0VMRUNUIGEsIHJh bmRvbSgpID4gMCBGUk9NIGZvcmVpZ25fdGJsKTsKK1NFTEVDVCBhIEZST00gYmFzZV90YmwgV0hF UkUgKGEsIHJhbmRvbSgpID4gMCkgSU4gKFNFTEVDVCBhLCByYW5kb20oKSA+IDAgRlJPTSBmb3Jl aWduX3RibCk7CiAKIC0tIENsZWFuIHVwCiBEUk9QIEZPUkVJR04gVEFCTEUgZm9yZWlnbl90Ymwg Q0FTQ0FERTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3N1YnNlbGVj dC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc3Vic2VsZWN0LmMKaW5kZXggMDUyMjYz YWVhNmQuLjQ3MDhhNTM2M2FjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9zdWJzZWxlY3QuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zdWJzZWxlY3Qu YwpAQCAtMTI3OSwxNSArMTI3OSwyNCBAQCBjb252ZXJ0X0FOWV9zdWJsaW5rX3RvX2pvaW4oUGxh bm5lckluZm8gKnJvb3QsIFN1YkxpbmsgKnN1YmxpbmssCiAJTGlzdAkgICAqc3VicXVlcnlfdmFy czsKIAlOb2RlCSAgICpxdWFsczsKIAlQYXJzZVN0YXRlICpwc3RhdGU7CisJUmVsaWRzIHN1Yl9y ZWZfb3V0ZXJfcmVsaWRzID0gTlVMTDsKKwlib29sIHVzZV9sYXRlcmFsID0gZmFsc2U7CiAKIAlB c3NlcnQoc3VibGluay0+c3ViTGlua1R5cGUgPT0gQU5ZX1NVQkxJTkspOwogCiAJLyoKLQkgKiBU aGUgc3ViLXNlbGVjdCBtdXN0IG5vdCByZWZlciB0byBhbnkgVmFycyBvZiB0aGUgcGFyZW50IHF1 ZXJ5LiAoVmFycyBvZgotCSAqIGhpZ2hlciBsZXZlbHMgc2hvdWxkIGJlIG9rYXksIHRob3VnaC4p CisJICogSWYgdGhlIHN1Yi1zZWxlY3QgcmVmZXJzIHRvIGFueSBWYXJzIG9mIHRoZSBwYXJlbnQg cXVlcnksIHdlIGhhdmUgdG8KKwkgKiB0cmVhdCBpdCBhcyBMQVRFUkFMLiAgKFZhcnMgb2YgaGln aGVyIGxldmVscyBkb24ndCBtYXR0ZXIgaGVyZS4pCiAJICovCi0JaWYgKGNvbnRhaW5fdmFyc19v Zl9sZXZlbCgoTm9kZSAqKSBzdWJzZWxlY3QsIDEpKQotCQlyZXR1cm4gTlVMTDsKKwlzdWJfcmVm X291dGVyX3JlbGlkcyA9IHB1bGxfdmFybm9zX29mX2xldmVsKE5VTEwsIChOb2RlICopIHN1YnNl bGVjdCwgMSk7CisKKwlpZiAoIWJtc19pc19lbXB0eShzdWJfcmVmX291dGVyX3JlbGlkcykpCisJ eworCQlpZiAoYm1zX2lzX3N1YnNldChzdWJfcmVmX291dGVyX3JlbGlkcywgYXZhaWxhYmxlX3Jl bHMpKQorCQkJdXNlX2xhdGVyYWwgPSB0cnVlOworCQllbHNlCisJCQlyZXR1cm4gTlVMTDsKKwl9 CiAKIAkvKgogCSAqIFRoZSB0ZXN0IGV4cHJlc3Npb24gbXVzdCBjb250YWluIHNvbWUgVmFycyBv ZiB0aGUgcGFyZW50IHF1ZXJ5LCBlbHNlCkBAIC0xMzI0LDcgKzEzMzMsNyBAQCBjb252ZXJ0X0FO WV9zdWJsaW5rX3RvX2pvaW4oUGxhbm5lckluZm8gKnJvb3QsIFN1YkxpbmsgKnN1YmxpbmssCiAJ bnNpdGVtID0gYWRkUmFuZ2VUYWJsZUVudHJ5Rm9yU3VicXVlcnkocHN0YXRlLAogCQkJCQkJCQkJ CSAgIHN1YnNlbGVjdCwKIAkJCQkJCQkJCQkgICBtYWtlQWxpYXMoIkFOWV9zdWJxdWVyeSIsIE5J TCksCi0JCQkJCQkJCQkJICAgZmFsc2UsCisJCQkJCQkJCQkJICAgdXNlX2xhdGVyYWwsCiAJCQkJ CQkJCQkJICAgZmFsc2UpOwogCXJ0ZSA9IG5zaXRlbS0+cF9ydGU7CiAJcGFyc2UtPnJ0YWJsZSA9 IGxhcHBlbmQocGFyc2UtPnJ0YWJsZSwgcnRlKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvam9pbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0 CmluZGV4IDVkNTllZDc4OTBmLi4zMTdkOTI0MGRmZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9qb2luLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pv aW4ub3V0CkBAIC00ODk4LDcgKzQ4OTgsNyBAQCByZXNldCBlbmFibGVfbmVzdGxvb3A7CiBleHBs YWluIChjb3N0cyBvZmYpCiBzZWxlY3QgYS51bmlxdWUxLCBiLnVuaXF1ZTIKICAgZnJvbSBvbmVr IGEgbGVmdCBqb2luIG9uZWsgYiBvbiBhLnVuaXF1ZTEgPSBiLnVuaXF1ZTIKLSAgd2hlcmUgYi51 bmlxdWUyID0gYW55IChzZWxlY3QgcTEgZnJvbSBpbnQ4X3RibCBjIHdoZXJlIGMucTEgPCBiLnVu aXF1ZTEpOworICB3aGVyZSAoYi51bmlxdWUyLCByYW5kb20oKSA+IDApID0gYW55IChzZWxlY3Qg cTEsIHJhbmRvbSgpID4gMCBmcm9tIGludDhfdGJsIGMgd2hlcmUgYy5xMSA8IGIudW5pcXVlMSk7 CiAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAgSGFzaCBKb2luCkBAIC00OTE0LDcgKzQ5MTQsNyBAQCBzZWxlY3QgYS51bmlxdWUx LCBiLnVuaXF1ZTIKIAogc2VsZWN0IGEudW5pcXVlMSwgYi51bmlxdWUyCiAgIGZyb20gb25layBh IGxlZnQgam9pbiBvbmVrIGIgb24gYS51bmlxdWUxID0gYi51bmlxdWUyCi0gIHdoZXJlIGIudW5p cXVlMiA9IGFueSAoc2VsZWN0IHExIGZyb20gaW50OF90YmwgYyB3aGVyZSBjLnExIDwgYi51bmlx dWUxKTsKKyAgd2hlcmUgKGIudW5pcXVlMiwgcmFuZG9tKCkgPiAwKSA9IGFueSAoc2VsZWN0IHEx LCByYW5kb20oKSA+IDAgZnJvbSBpbnQ4X3RibCBjIHdoZXJlIGMucTEgPCBiLnVuaXF1ZTEpOwog IHVuaXF1ZTEgfCB1bmlxdWUyIAogLS0tLS0tLS0tKy0tLS0tLS0tLQogICAgICAxMjMgfCAgICAg MTIzCkBAIC02Njg2LDEyICs2Njg2LDEyIEBAIHNlbGVjdCAqIGZyb20gKHZhbHVlcyAoMCksICgx KSkgdihpZCksCiBsYXRlcmFsIChzZWxlY3QgKiBmcm9tIGludDhfdGJsIHQxLAogICAgICAgICAg bGF0ZXJhbCAoc2VsZWN0ICogZnJvbQogICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ICogZnJv bSBpbnQ4X3RibCB0MgotICAgICAgICAgICAgICAgICAgICAgd2hlcmUgcTEgPSBhbnkgKHNlbGVj dCBxMiBmcm9tIGludDhfdGJsIHQzCisgICAgICAgICAgICAgICAgICAgICB3aGVyZSAocTEsIHJh bmRvbSgpID4gMCkgPSBhbnkgKHNlbGVjdCBxMiwgcmFuZG9tKCkgPiAwIGZyb20gaW50OF90Ymwg dDMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBxMiA9IChzZWxl Y3QgZ3JlYXRlc3QodDEucTEsdDIucTIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYW5kIChzZWxlY3Qgdi5pZD0wKSkgb2Zmc2V0IDApIHNzMikgc3MKICAgICAgICAg IHdoZXJlIHQxLnExID0gc3MucTIpIHNzMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBOZXN0ZWQg TG9vcAogICAgT3V0cHV0OiAiKlZBTFVFUyoiLmNvbHVtbjEsIHQxLnExLCB0MS5xMiwgc3MyLnEx LCBzczIucTIKICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuaW50OF90YmwgdDEKQEAgLTY3MDgs NyArNjcwOCw3IEBAIGxhdGVyYWwgKHNlbGVjdCAqIGZyb20gaW50OF90YmwgdDEsCiAgICAgICAg ICAgICAgICAgICAgICBGaWx0ZXI6IChTdWJQbGFuIDMpCiAgICAgICAgICAgICAgICAgICAgICBT dWJQbGFuIDMKICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFJlc3VsdAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzLnEyCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDMucTIsIChyYW5kb20oKSA+ICcwJzo6ZG91YmxlIHByZWNpc2lvbikKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT25lLVRpbWUgRmlsdGVyOiAkNAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBJbml0UGxhbiAxIChyZXR1cm5zICQyKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBSZXN1bHQKQEAgLTY3MjUsNyArNjcyNSw3IEBAIHNlbGVj dCAqIGZyb20gKHZhbHVlcyAoMCksICgxKSkgdihpZCksCiBsYXRlcmFsIChzZWxlY3QgKiBmcm9t IGludDhfdGJsIHQxLAogICAgICAgICAgbGF0ZXJhbCAoc2VsZWN0ICogZnJvbQogICAgICAgICAg ICAgICAgICAgICAoc2VsZWN0ICogZnJvbSBpbnQ4X3RibCB0MgotICAgICAgICAgICAgICAgICAg ICAgd2hlcmUgcTEgPSBhbnkgKHNlbGVjdCBxMiBmcm9tIGludDhfdGJsIHQzCisgICAgICAgICAg ICAgICAgICAgICB3aGVyZSAocTEsIHJhbmRvbSgpID4gMCkgPSBhbnkgKHNlbGVjdCBxMiwgcmFu ZG9tKCkgPiAwIGZyb20gaW50OF90YmwgdDMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB3aGVyZSBxMiA9IChzZWxlY3QgZ3JlYXRlc3QodDEucTEsdDIucTIpKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIChzZWxlY3Qgdi5pZD0wKSkgb2Zm c2V0IDApIHNzMikgc3MKICAgICAgICAgIHdoZXJlIHQxLnExID0gc3MucTIpIHNzMDsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dCBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dAppbmRleCAyMmFmOGZhZmExNy4uNDkzMjUw NThjNWQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91 dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNlbGVjdC5vdXQKQEAgLTE5MjYs MyArMTkyNiwxMDUgQEAgc2VsZWN0ICogZnJvbSB4IGZvciB1cGRhdGU7CiAgICBPdXRwdXQ6IHN1 YnNlbGVjdF90YmwuZjEsIHN1YnNlbGVjdF90YmwuZjIsIHN1YnNlbGVjdF90YmwuZjMKICgyIHJv d3MpCiAKKy0tIFB1bGwtdXAgdGhlIGRpcmVjdC1jb3JyZWxhdGVkIEFOWV9TVUJMSU5LCitleHBs YWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHRlbmsxIEEgd2hlcmUgaHVuZHJlZCBpbiAo c2VsZWN0IGh1bmRyZWQgZnJvbSB0ZW5rMiBCIHdoZXJlIEIub2RkID0gQS5vZGQpOworICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKChhLm9kZCA9IGIub2RkKSBBTkQgKGEuaHVu ZHJlZCA9IGIuaHVuZHJlZCkpCisgICAtPiAgU2VxIFNjYW4gb24gdGVuazEgYQorICAgLT4gIEhh c2gKKyAgICAgICAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBHcm91cCBLZXk6 IGIub2RkLCBiLmh1bmRyZWQKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0ZW5rMiBi CisoNyByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHRlbmsxIEEg d2hlcmUgZXhpc3RzCisoc2VsZWN0IDEgZnJvbSB0ZW5rMiBCCit3aGVyZSBBLmh1bmRyZWQgaW4g KHNlbGVjdCBDLmh1bmRyZWQgRlJPTSB0ZW5rMiBDCitXSEVSRSBjLm9kZCA9IGIub2RkKSk7Cisg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIFNlbWkgSm9pbgorICAgSm9pbiBGaWx0ZXI6IChTdWJQ bGFuIDEpCisgICAtPiAgU2VxIFNjYW4gb24gdGVuazEgYQorICAgLT4gIE1hdGVyaWFsaXplCisg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGVuazIgYgorICAgU3ViUGxhbiAxCisgICAgIC0+ICBT ZXEgU2NhbiBvbiB0ZW5rMiBjCisgICAgICAgICAgIEZpbHRlcjogKG9kZCA9IGIub2RkKQorKDgg cm93cykKKworLS0gd2Ugc2hvdWxkIG9ubHkgdHJ5IHRvIHB1bGwgdXAgdGhlIHN1YmxpbmsgaW50 byBSSFMgb2YgYSBsZWZ0IGpvaW4KKy0tIGJ1dCBhLmh1bmRyZWQgaXMgbm90IGF2YWlhYmxlLgor ZXhwbGFpbiAoY29zdHMgb2ZmKQorU0VMRUNUICogRlJPTSB0ZW5rMSBBIExFRlQgSk9JTiB0ZW5r MiBCCitPTiBBLmh1bmRyZWQgaW4gKFNFTEVDVCBjLmh1bmRyZWQgRlJPTSB0ZW5rMiBDIFdIRVJF IGMub2RkID0gYi5vZGQpOworICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAg IEpvaW4gRmlsdGVyOiAoU3ViUGxhbiAxKQorICAgLT4gIFNlcSBTY2FuIG9uIHRlbmsxIGEKKyAg IC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlbmsyIGIKKyAgIFN1 YlBsYW4gMQorICAgICAtPiAgU2VxIFNjYW4gb24gdGVuazIgYworICAgICAgICAgICBGaWx0ZXI6 IChvZGQgPSBiLm9kZCkKKyg4IHJvd3MpCisKKy0tIHdlIHNob3VsZCBvbmx5IHRyeSB0byBwdWxs IHVwIHRoZSBzdWJsaW5rIGludG8gUkhTIG9mIGEgbGVmdCBqb2luCistLSBidXQgYS5vZGQgaXMg bm90IGF2YWlhYmxlIGZvciB0aGlzLgorZXhwbGFpbiAoY29zdHMgb2ZmKQorU0VMRUNUICogRlJP TSB0ZW5rMSBBIExFRlQgSk9JTiB0ZW5rMiBCCitPTiBCLmh1bmRyZWQgaW4gKFNFTEVDVCBjLmh1 bmRyZWQgRlJPTSB0ZW5rMiBDIFdIRVJFIGMub2RkID0gYS5vZGQpOworICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBO ZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIEpvaW4gRmlsdGVyOiAoU3ViUGxhbiAxKQorICAgLT4g IFNlcSBTY2FuIG9uIHRlbmsxIGEKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHRlbmsyIGIKKyAgIFN1YlBsYW4gMQorICAgICAtPiAgU2VxIFNjYW4gb24gdGVu azIgYworICAgICAgICAgICBGaWx0ZXI6IChvZGQgPSBhLm9kZCkKKyg4IHJvd3MpCisKKy0tIHNo b3VsZCBiZSBhYmxlIHRvIHB1bGwgdXAgc2luY2UgYWxsIHRoZSByZWZlcmVuY2VzIGlzIGF2YWls YWJsZQorZXhwbGFpbiAoY29zdHMgb2ZmKQorU0VMRUNUICogRlJPTSB0ZW5rMSBBIExFRlQgSk9J TiB0ZW5rMiBCCitPTiBCLmh1bmRyZWQgaW4gKFNFTEVDVCBjLmh1bmRyZWQgRlJPTSB0ZW5rMiBD IFdIRVJFIGMub2RkID0gYi5vZGQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIC0+ICBTZXEgU2NhbiBvbiB0ZW5rMSBhCisgICAt PiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhh c2ggQ29uZDogKChiLm9kZCA9IGMub2RkKSBBTkQgKGIuaHVuZHJlZCA9IGMuaHVuZHJlZCkpCisg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGVuazIgYgorICAgICAgICAgICAgICAgLT4g IEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IGMub2RkLCBjLmh1bmRyZWQKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0ZW5rMiBjCisoMTAgcm93cykKKworLS0g d2UgY2FuIHB1bGwgdXAgdGhlIHN1YmxpbmsgaW50byB0aGUgaW5uZXIgSm9pbkV4cHIuCitleHBs YWluIChjb3N0cyBvZmYpCitTRUxFQ1QgKiBGUk9NIHRlbmsxIEEgSU5ORVIgSk9JTiB0ZW5rMiBC CitPTiBBLmh1bmRyZWQgaW4gKFNFTEVDVCBjLmh1bmRyZWQgRlJPTSB0ZW5rMiBDIFdIRVJFIGMu b2RkID0gYi5vZGQpOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoYy5vZGQgPSBiLm9kZCkKKyAgIC0+ICBIYXNo IEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGEuaHVuZHJlZCA9IGMuaHVuZHJlZCkKKyAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiB0ZW5rMSBhCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAg ICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTog Yy5vZGQsIGMuaHVuZHJlZAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRl bmsyIGMKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGVuazIgYgorKDEx IHJvd3MpCisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvam9pbi5zcWwKaW5kZXggYTYzMGY1OGI1NzEuLmU5MWQyNWMwOTE1 IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC9qb2luLnNxbApAQCAtMTcyMSwxMSArMTcyMSwxMSBAQCByZXNldCBlbmFi bGVfbmVzdGxvb3A7CiBleHBsYWluIChjb3N0cyBvZmYpCiBzZWxlY3QgYS51bmlxdWUxLCBiLnVu aXF1ZTIKICAgZnJvbSBvbmVrIGEgbGVmdCBqb2luIG9uZWsgYiBvbiBhLnVuaXF1ZTEgPSBiLnVu aXF1ZTIKLSAgd2hlcmUgYi51bmlxdWUyID0gYW55IChzZWxlY3QgcTEgZnJvbSBpbnQ4X3RibCBj IHdoZXJlIGMucTEgPCBiLnVuaXF1ZTEpOworICB3aGVyZSAoYi51bmlxdWUyLCByYW5kb20oKSA+ IDApID0gYW55IChzZWxlY3QgcTEsIHJhbmRvbSgpID4gMCBmcm9tIGludDhfdGJsIGMgd2hlcmUg Yy5xMSA8IGIudW5pcXVlMSk7CiAKIHNlbGVjdCBhLnVuaXF1ZTEsIGIudW5pcXVlMgogICBmcm9t IG9uZWsgYSBsZWZ0IGpvaW4gb25layBiIG9uIGEudW5pcXVlMSA9IGIudW5pcXVlMgotICB3aGVy ZSBiLnVuaXF1ZTIgPSBhbnkgKHNlbGVjdCBxMSBmcm9tIGludDhfdGJsIGMgd2hlcmUgYy5xMSA8 IGIudW5pcXVlMSk7CisgIHdoZXJlIChiLnVuaXF1ZTIsIHJhbmRvbSgpID4gMCkgPSBhbnkgKHNl bGVjdCBxMSwgcmFuZG9tKCkgPiAwIGZyb20gaW50OF90YmwgYyB3aGVyZSBjLnExIDwgYi51bmlx dWUxKTsKIAogLS0KIC0tIHRlc3QgZnVsbC1qb2luIHN0cmVuZ3RoIHJlZHVjdGlvbgpAQCAtMjM3 Myw3ICsyMzczLDcgQEAgc2VsZWN0ICogZnJvbSAodmFsdWVzICgwKSwgKDEpKSB2KGlkKSwKIGxh dGVyYWwgKHNlbGVjdCAqIGZyb20gaW50OF90YmwgdDEsCiAgICAgICAgICBsYXRlcmFsIChzZWxl Y3QgKiBmcm9tCiAgICAgICAgICAgICAgICAgICAgIChzZWxlY3QgKiBmcm9tIGludDhfdGJsIHQy Ci0gICAgICAgICAgICAgICAgICAgICB3aGVyZSBxMSA9IGFueSAoc2VsZWN0IHEyIGZyb20gaW50 OF90YmwgdDMKKyAgICAgICAgICAgICAgICAgICAgIHdoZXJlIChxMSwgcmFuZG9tKCkgPiAwKSA9 IGFueSAoc2VsZWN0IHEyLCByYW5kb20oKSA+IDAgZnJvbSBpbnQ4X3RibCB0MwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHEyID0gKHNlbGVjdCBncmVhdGVzdCh0 MS5xMSx0Mi5xMikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQg KHNlbGVjdCB2LmlkPTApKSBvZmZzZXQgMCkgc3MyKSBzcwogICAgICAgICAgd2hlcmUgdDEucTEg PSBzcy5xMikgc3MwOwpAQCAtMjM4Miw3ICsyMzgyLDcgQEAgc2VsZWN0ICogZnJvbSAodmFsdWVz ICgwKSwgKDEpKSB2KGlkKSwKIGxhdGVyYWwgKHNlbGVjdCAqIGZyb20gaW50OF90YmwgdDEsCiAg ICAgICAgICBsYXRlcmFsIChzZWxlY3QgKiBmcm9tCiAgICAgICAgICAgICAgICAgICAgIChzZWxl Y3QgKiBmcm9tIGludDhfdGJsIHQyCi0gICAgICAgICAgICAgICAgICAgICB3aGVyZSBxMSA9IGFu eSAoc2VsZWN0IHEyIGZyb20gaW50OF90YmwgdDMKKyAgICAgICAgICAgICAgICAgICAgIHdoZXJl IChxMSwgcmFuZG9tKCkgPiAwKSA9IGFueSAoc2VsZWN0IHEyLCByYW5kb20oKSA+IDAgZnJvbSBp bnQ4X3RibCB0MwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHEy ID0gKHNlbGVjdCBncmVhdGVzdCh0MS5xMSx0Mi5xMikpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhbmQgKHNlbGVjdCB2LmlkPTApKSBvZmZzZXQgMCkgc3MyKSBzcwog ICAgICAgICAgd2hlcmUgdDEucTEgPSBzcy5xMikgc3MwOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvc3Vic2VsZWN0LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N1YnNlbGVj dC5zcWwKaW5kZXggNDAyNzY3MDhjOTkuLmIyZGQwOTQ5ODNkIDEwMDY0NAotLS0gYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9zdWJzZWxlY3Quc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N1 YnNlbGVjdC5zcWwKQEAgLTk2OCwzICs5NjgsMzUgQEAgc2VsZWN0ICogZnJvbSAod2l0aCB4IGFz IChzZWxlY3QgMiBhcyB5KSBzZWxlY3QgKiBmcm9tIHgpIHNzOwogZXhwbGFpbiAodmVyYm9zZSwg Y29zdHMgb2ZmKQogd2l0aCB4IGFzIChzZWxlY3QgKiBmcm9tIHN1YnNlbGVjdF90YmwpCiBzZWxl Y3QgKiBmcm9tIHggZm9yIHVwZGF0ZTsKKworLS0gUHVsbC11cCB0aGUgZGlyZWN0LWNvcnJlbGF0 ZWQgQU5ZX1NVQkxJTksKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gdGVuazEg QSB3aGVyZSBodW5kcmVkIGluIChzZWxlY3QgaHVuZHJlZCBmcm9tIHRlbmsyIEIgd2hlcmUgQi5v ZGQgPSBBLm9kZCk7CisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gdGVuazEg QSB3aGVyZSBleGlzdHMKKyhzZWxlY3QgMSBmcm9tIHRlbmsyIEIKK3doZXJlIEEuaHVuZHJlZCBp biAoc2VsZWN0IEMuaHVuZHJlZCBGUk9NIHRlbmsyIEMKK1dIRVJFIGMub2RkID0gYi5vZGQpKTsK KworLS0gd2Ugc2hvdWxkIG9ubHkgdHJ5IHRvIHB1bGwgdXAgdGhlIHN1YmxpbmsgaW50byBSSFMg b2YgYSBsZWZ0IGpvaW4KKy0tIGJ1dCBhLmh1bmRyZWQgaXMgbm90IGF2YWlhYmxlLgorZXhwbGFp biAoY29zdHMgb2ZmKQorU0VMRUNUICogRlJPTSB0ZW5rMSBBIExFRlQgSk9JTiB0ZW5rMiBCCitP TiBBLmh1bmRyZWQgaW4gKFNFTEVDVCBjLmh1bmRyZWQgRlJPTSB0ZW5rMiBDIFdIRVJFIGMub2Rk ID0gYi5vZGQpOworCistLSB3ZSBzaG91bGQgb25seSB0cnkgdG8gcHVsbCB1cCB0aGUgc3VibGlu ayBpbnRvIFJIUyBvZiBhIGxlZnQgam9pbgorLS0gYnV0IGEub2RkIGlzIG5vdCBhdmFpYWJsZSBm b3IgdGhpcy4KK2V4cGxhaW4gKGNvc3RzIG9mZikKK1NFTEVDVCAqIEZST00gdGVuazEgQSBMRUZU IEpPSU4gdGVuazIgQgorT04gQi5odW5kcmVkIGluIChTRUxFQ1QgYy5odW5kcmVkIEZST00gdGVu azIgQyBXSEVSRSBjLm9kZCA9IGEub2RkKTsKKworLS0gc2hvdWxkIGJlIGFibGUgdG8gcHVsbCB1 cCBzaW5jZSBhbGwgdGhlIHJlZmVyZW5jZXMgaXMgYXZhaWxhYmxlCitleHBsYWluIChjb3N0cyBv ZmYpCitTRUxFQ1QgKiBGUk9NIHRlbmsxIEEgTEVGVCBKT0lOIHRlbmsyIEIKK09OIEIuaHVuZHJl ZCBpbiAoU0VMRUNUIGMuaHVuZHJlZCBGUk9NIHRlbmsyIEMgV0hFUkUgYy5vZGQgPSBiLm9kZCk7 CisKKy0tIHdlIGNhbiBwdWxsIHVwIHRoZSBzdWJsaW5rIGludG8gdGhlIGlubmVyIEpvaW5FeHBy LgorZXhwbGFpbiAoY29zdHMgb2ZmKQorU0VMRUNUICogRlJPTSB0ZW5rMSBBIElOTkVSIEpPSU4g dGVuazIgQgorT04gQS5odW5kcmVkIGluIChTRUxFQ1QgYy5odW5kcmVkIEZST00gdGVuazIgQyBX SEVSRSBjLm9kZCA9IGIub2RkKTsKLS0gCjIuMjEuMAoK --000000000000ff029e05f8918f7c--