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 1qmHOg-006Obw-6o for pgsql-hackers@arkaria.postgresql.org; Fri, 29 Sep 2023 17:35:27 +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 1qmHOe-002mSI-GP for pgsql-hackers@arkaria.postgresql.org; Fri, 29 Sep 2023 17:35:24 +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 1qmHOd-002mQq-KL for pgsql-hackers@lists.postgresql.org; Fri, 29 Sep 2023 17:35:24 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qmHOX-007Jin-5j for pgsql-hackers@postgresql.org; Fri, 29 Sep 2023 17:35:22 +0000 Received: from [10.4.14.189] (unknown [93.174.131.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: a.rybakina@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 288D1E20FD8; Fri, 29 Sep 2023 20:35:14 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1696008914; bh=4o4vReSTtbhGxA+euybwucJm7tEu08VpzUC6FF7PwGo=; h=Message-ID:Date:User-Agent:Subject:From:To:Cc:References: In-Reply-To:From; b=XGflwAaF4b9NLv2rXpX6i3NQi0C3hmhLPYBGdUDVBZ7WWD4ZXxHxrS4foIf9J0PlJ 64kkGmxpQ/jgO9o9j1FK/k0WbXUfbrWYai5yVjlzn8/y4983P4CPI0lhxrFtmM47rM 4qW51TD0GLSGTlEyAtYorruphQijFgVztVI37py6HNeAhJ/5S2zXf8d6igc8VSujZF LvcFut/phV/0dUPXH7Jp8K0raFxMt3tVQ1GptZu9I7SEpSED/YD2dtWsXS73BcjWfF OSXAkhp9w8o0mo3H9I3Fafa8JqRRynZVFnNo4Rk1nQUG61qteesgl+KlT8tkaTYjjv MWx25hq1ohpwg== Content-Type: multipart/mixed; boundary="------------lj50Z2vNsWwWnWX7WabrEJ8n" Message-ID: <89fb769c-7d45-f0c5-a9b3-b706c9661c57@postgrespro.ru> Date: Fri, 29 Sep 2023 20:35:13 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: Re: POC, WIP: OR-clause support for indexes Content-Language: en-US From: "a.rybakina" To: pgsql-hackers@postgresql.org Cc: "Finnerty, Jim" , Marcos Pegoraro , Andrey Lepikhov , teodor@sigaev.ru, Ranier Vilela , Tomas Vondra , Peter Geoghegan , Peter Eisentraut References: <567ED6CA.2040504@sigaev.ru> <08f5ff34-1497-2123-8701-461a299035c9@yandex.ru> <8d714510-af73-a908-99c8-fc14536f2669@yandex.ru> <4bac271d-1700-db24-74ac-8414f2baf9fd@postgrespro.ru> 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. --------------lj50Z2vNsWwWnWX7WabrEJ8n Content-Type: multipart/alternative; boundary="------------r0MdVaYvIXDuZNll6OW7tZZo" --------------r0MdVaYvIXDuZNll6OW7tZZo Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit > I'm sorry I didn't write for a long time, but I really had a very > difficult month, now I'm fully back to work. > > *I was able to implement the patches to the end and moved the > transformation of "OR" expressions to ANY.* I haven't seen a big > difference between them yet, one has a transformation before > calculating selectivity (v7.1-Replace-OR-clause-to-ANY.patch), the > other after (v7.2-Replace-OR-clause-to-ANY.patch). Regression tests > are passing, I don't see any problems with selectivity, nothing has > fallen into the coredump, but I found some incorrect transformations. > What is the reason for these inaccuracies, I have not found, but, to > be honest, they look unusual). Gave the error below. > > In the patch, I don't like that I had to drag three libraries from > parsing until I found a way around it.The advantage of this approach > compared to the other ([1]) is that at this stage all possible or > transformations are performed, compared to the patch, where the > transformation was done at the parsing stage. That is, here, for > example, there are such optimizations in the transformation: > > > I took the common element out of the bracket and the rest is converted > to ANY, while, as noted by Peter Geoghegan, we did not have several > bitmapscans, but only one scan through the array. > > postgres=# explain analyze SELECT p1.oid, p1.proname > FROM pg_proc as p1 > WHERE prolang = 13 AND prolang=1 OR prolang = 13 AND prolang = 2 OR > prolang = 13 AND prolang = 3; >                                               QUERY PLAN > ------------------------------------------------------------------------------------------------------- >  Seq Scan on pg_proc p1  (cost=0.00..151.66 rows=1 width=68) (actual > time=1.167..1.168 rows=0 loops=1) >    Filter: ((prolang = '13'::oid) AND (prolang = ANY (ARRAY['1'::oid, > '2'::oid, '3'::oid]))) >    Rows Removed by Filter: 3302 >  Planning Time: 0.146 ms >  Execution Time: 1.191 ms > (5 rows) > *Falls into coredump at me:* > explain analyze SELECT p1.oid, p1.proname > FROM pg_proc as p1 > WHERE prolang = 13 OR prolang = 2 AND prolang = 2 OR prolang = 13; > I continue to try to move transformations of "OR" expressions at the optimization stage, unfortunately I have not been able to figure out coredump yet, but I saw an important thing that it is already necessary to process RestrictInfo expressions here. I corrected it. To be honest, despite some significant advantages in the fact that we are already processing pre-converted "or" expressions (logical transformations have been performed and duplicates have been removed), I have big doubts about this approach. We already have quite a lot of objects at this stage that can refer to the RestrictInfo variable in ReplOptInfo, and updating these links can be costly for us. By the way, right now I suspect that the current coredump appeared precisely because there is a link somewhere that refers to an un-updated RestrictInfo, but so far I can't find this place. coredump occurs at the request execution stage, looks like this: Core was generated by `postgres: alena regression [local] SELECT                                     '. --Type for more, q to quit, c to continue without paging-- Program terminated with signal SIGSEGV, Segmentation fault. #0  0x00005565f3ec4947 in ExecInitExprRec (node=0x5565f530b290, state=0x5565f53383d8, resv=0x5565f53383e0, resnull=0x5565f53383dd) at execExpr.c:1331 1331                                            Expr       *arg = (Expr *) lfirst(lc); (gdb) bt #0  0x00005565f3ec4947 in ExecInitExprRec (node=0x5565f530b290, state=0x5565f53383d8, resv=0x5565f53383e0, resnull=0x5565f53383dd) at execExpr.c:1331 #1  0x00005565f3ec2708 in ExecInitQual (qual=0x5565f531d950, parent=0x5565f5337948) at execExpr.c:258 #2  0x00005565f3f2f080 in ExecInitSeqScan (node=0x5565f5309700, estate=0x5565f5337700, eflags=32) at nodeSeqscan.c:172 #3  0x00005565f3ee70c9 in ExecInitNode (node=0x5565f5309700, estate=0x5565f5337700, eflags=32) at execProcnode.c:210 #4  0x00005565f3edbe3a in InitPlan (queryDesc=0x5565f53372f0, eflags=32) at execMain.c:968 #5  0x00005565f3edabe3 in standard_ExecutorStart (queryDesc=0x5565f53372f0, eflags=32) at execMain.c:266 #6  0x00005565f3eda927 in ExecutorStart (queryDesc=0x5565f53372f0, eflags=0) at execMain.c:145 #7  0x00005565f419921e in PortalStart (portal=0x5565f52ace90, params=0x0, eflags=0, snapshot=0x0) at pquery.c:517 #8  0x00005565f4192635 in exec_simple_query (     query_string=0x5565f5233af0 "SELECT p1.oid, p1.proname\nFROM pg_proc as p1\nWHERE prolang = 13 AND (probin IS NULL OR probin = '' OR probin = '-');") at postgres.c:1233 #9  0x00005565f41976ef in PostgresMain (dbname=0x5565f526ad10 "regression", username=0x5565f526acf8 "alena") at postgres.c:4652 #10 0x00005565f40b8417 in BackendRun (port=0x5565f525f830) at postmaster.c:4439 #11 0x00005565f40b7ca3 in BackendStartup (port=0x5565f525f830) at postmaster.c:4167 #12 0x00005565f40b40f1 in ServerLoop () at postmaster.c:1781 #13 0x00005565f40b399b in PostmasterMain (argc=8, argv=0x5565f522c110) at postmaster.c:1465 #14 0x00005565f3f6560e in main (argc=8, argv=0x5565f522c110) at main.c:198 I have saved my experimental version of the "or" transfer in the diff file, I am attaching the main patch in the ".patch" format so that the tests are checked against this version. Let me remind you that the main patch contains the code for converting "OR" expressions to "ANY" at the parsing stage. --------------r0MdVaYvIXDuZNll6OW7tZZo Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit

I'm sorry I didn't write for a long time, but I really had a very difficult month, now I'm fully back to work.

I was able to implement the patches to the end and moved the transformation of "OR" expressions to ANY. I haven't seen a big difference between them yet, one has a transformation before calculating selectivity (v7.1-Replace-OR-clause-to-ANY.patch), the other after (v7.2-Replace-OR-clause-to-ANY.patch). Regression tests are passing, I don't see any problems with selectivity, nothing has fallen into the coredump, but I found some incorrect transformations. What is the reason for these inaccuracies, I have not found, but, to be honest, they look unusual). Gave the error below.

In the patch, I don't like that I had to drag three libraries from parsing until I found a way around it.The advantage of this approach compared to the other ([1]) is that at this stage all possible or transformations are performed, compared to the patch, where the transformation was done at the parsing stage. That is, here, for example, there are such optimizations in the transformation:


I took the common element out of the bracket and the rest is converted to ANY, while, as noted by Peter Geoghegan, we did not have several bitmapscans, but only one scan through the array.

postgres=# explain analyze SELECT p1.oid, p1.proname
FROM pg_proc as p1
WHERE prolang = 13 AND prolang=1 OR prolang = 13 AND prolang = 2 OR prolang = 13 AND prolang = 3;
                                              QUERY PLAN                                               
-------------------------------------------------------------------------------------------------------
 Seq Scan on pg_proc p1  (cost=0.00..151.66 rows=1 width=68) (actual time=1.167..1.168 rows=0 loops=1)
   Filter: ((prolang = '13'::oid) AND (prolang = ANY (ARRAY['1'::oid, '2'::oid, '3'::oid])))
   Rows Removed by Filter: 3302
 Planning Time: 0.146 ms
 Execution Time: 1.191 ms
(5 rows)

Falls into coredump at me:
explain analyze SELECT p1.oid, p1.proname
FROM pg_proc as p1
WHERE prolang = 13 OR prolang = 2 AND prolang = 2 OR prolang = 13;


I continue to try to move transformations of "OR" expressions at the optimization stage, unfortunately I have not been able to figure out coredump yet, but I saw an important thing that it is already necessary to process RestrictInfo expressions here. I corrected it.

To be honest, despite some significant advantages in the fact that we are already processing pre-converted "or" expressions (logical transformations have been performed and duplicates have been removed), I have big doubts about this approach. We already have quite a lot of objects at this stage that can refer to the RestrictInfo variable in ReplOptInfo, and updating these links can be costly for us. By the way, right now I suspect that the current coredump appeared precisely because there is a link somewhere that refers to an un-updated RestrictInfo, but so far I can't find this place. coredump occurs at the request execution stage, looks like this:

Core was generated by `postgres: alena regression [local] SELECT                                     '.
--Type <RET> for more, q to quit, c to continue without paging--
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00005565f3ec4947 in ExecInitExprRec (node=0x5565f530b290, state=0x5565f53383d8, resv=0x5565f53383e0, resnull=0x5565f53383dd) at execExpr.c:1331
1331                                            Expr       *arg = (Expr *) lfirst(lc);
(gdb) bt
#0  0x00005565f3ec4947 in ExecInitExprRec (node=0x5565f530b290, state=0x5565f53383d8, resv=0x5565f53383e0, resnull=0x5565f53383dd) at execExpr.c:1331
#1  0x00005565f3ec2708 in ExecInitQual (qual=0x5565f531d950, parent=0x5565f5337948) at execExpr.c:258
#2  0x00005565f3f2f080 in ExecInitSeqScan (node=0x5565f5309700, estate=0x5565f5337700, eflags=32) at nodeSeqscan.c:172
#3  0x00005565f3ee70c9 in ExecInitNode (node=0x5565f5309700, estate=0x5565f5337700, eflags=32) at execProcnode.c:210
#4  0x00005565f3edbe3a in InitPlan (queryDesc=0x5565f53372f0, eflags=32) at execMain.c:968
#5  0x00005565f3edabe3 in standard_ExecutorStart (queryDesc=0x5565f53372f0, eflags=32) at execMain.c:266
#6  0x00005565f3eda927 in ExecutorStart (queryDesc=0x5565f53372f0, eflags=0) at execMain.c:145
#7  0x00005565f419921e in PortalStart (portal=0x5565f52ace90, params=0x0, eflags=0, snapshot=0x0) at pquery.c:517
#8  0x00005565f4192635 in exec_simple_query (
    query_string=0x5565f5233af0 "SELECT p1.oid, p1.proname\nFROM pg_proc as p1\nWHERE prolang = 13 AND (probin IS NULL OR probin = '' OR probin = '-');") at postgres.c:1233
#9  0x00005565f41976ef in PostgresMain (dbname=0x5565f526ad10 "regression", username=0x5565f526acf8 "alena") at postgres.c:4652
#10 0x00005565f40b8417 in BackendRun (port=0x5565f525f830) at postmaster.c:4439
#11 0x00005565f40b7ca3 in BackendStartup (port=0x5565f525f830) at postmaster.c:4167
#12 0x00005565f40b40f1 in ServerLoop () at postmaster.c:1781
#13 0x00005565f40b399b in PostmasterMain (argc=8, argv=0x5565f522c110) at postmaster.c:1465
#14 0x00005565f3f6560e in main (argc=8, argv=0x5565f522c110) at main.c:198

I have saved my experimental version of the "or" transfer in the diff file, I am attaching the main patch in the ".patch" format so that the tests are checked against this version. Let me remind you that the main patch contains the code for converting "OR" expressions to "ANY" at the parsing stage.

--------------r0MdVaYvIXDuZNll6OW7tZZo-- --------------lj50Z2vNsWwWnWX7WabrEJ8n Content-Type: text/x-patch; charset=UTF-8; name="experimantal_version.diff" Content-Disposition: attachment; filename="experimantal_version.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL29yY2xhdXNlcy5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvb3JjbGF1c2VzLmMKaW5kZXggNmVmOWQxNGI5 MDIuLmQwMWMwOWYyOGUyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRp bC9vcmNsYXVzZXMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9vcmNsYXVz ZXMuYwpAQCAtMjIsNiArMjIsMTAgQEAKICNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVy LmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL29yY2xhdXNlcy5oIgogI2luY2x1ZGUgIm9wdGlt aXplci9yZXN0cmljdGluZm8uaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNp bmNsdWRlICJwYXJzZXIvcGFyc2VfZXhwci5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZV9j b2VyY2UuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2Vfb3Blci5oIgogCiAKIHN0YXRpYyBi b29sIGlzX3NhZmVfcmVzdHJpY3Rpb25fY2xhdXNlX2ZvcihSZXN0cmljdEluZm8gKnJpbmZv LCBSZWxPcHRJbmZvICpyZWwpOwpAQCAtMzAsNiArMzQsMjkyIEBAIHN0YXRpYyB2b2lkIGNv bnNpZGVyX25ld19vcl9jbGF1c2UoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCwKIAkJCQkJCQkJICAgRXhwciAqb3JjbGF1c2UsIFJlc3RyaWN0SW5mbyAqam9pbl9vcl9y aW5mbyk7CiAKIAoraW50CQkJb3JfdHJhbnNmb3JtX2xpbWl0ID0gMjsKKwordHlwZWRlZiBz dHJ1Y3QgT3JDbGF1c2VHcm91cEVudHJ5Cit7CisJTm9kZQkJICAgKm5vZGU7CisJTGlzdAkJ ICAgKmNvbnN0czsKKwlPaWQJCQkJc2NhbGFyX3R5cGU7CisJT2lkCQkJCW9wbm87CisJRXhw ciAJCSAgICpleHByOworCVJlc3RyaWN0SW5mbyAgICpyaW5mbzsKK30gT3JDbGF1c2VHcm91 cEVudHJ5OworCitzdGF0aWMgTGlzdCAqCit0cmFuc2Zvcm1fb3JzKFBsYW5uZXJJbmZvICpy b290LCBMaXN0ICpiYXNlcmVzdHJpY3RpbmZvKQoreworCUxpc3RDZWxsCSAgICpsY19jbGF1 c2U7CisJTGlzdAkgICAJICAgKm1vZGlmaWVkX3JpbmZvID0gTklMOworCWJvb2wJCSAgICBz b21ldGhpbmdfY2hhbmdlZCA9IGZhbHNlOworCisKKwlmb3JlYWNoIChsY19jbGF1c2UsIGJh c2VyZXN0cmljdGluZm8pCisJeworCQlSZXN0cmljdEluZm8gICAJICAgKnJpbmZvID0gbGZp cnN0X25vZGUoUmVzdHJpY3RJbmZvLCBsY19jbGF1c2UpOworCQlSZXN0cmljdEluZm8JICAg KnJpbmZvX2Jhc2UgPSBjb3B5T2JqZWN0KHJpbmZvKTsKKwkJTGlzdAkJICAgCSAgICpncm91 cHNfbGlzdCA9IE5JTDsKKwkJTGlzdAkJICAgICAgICpvcl9saXN0ID0gTklMOworCQlMaXN0 Q2VsbAkgICAJICAgKmxjX2VhcmdzLAorCQkJCQkgICAJICAgKmxjX3JhcmdzOworCisJCWlm ICghcmVzdHJpY3Rpb25faXNfb3JfY2xhdXNlKHJpbmZvKSB8fAorCQkJbGlzdF9sZW5ndGgo KChCb29sRXhwciAqKSByaW5mby0+Y2xhdXNlKS0+YXJncykgPCBvcl90cmFuc2Zvcm1fbGlt aXQpCisJCXsKKwkJCS8qIEFkZCBhIGNsYXVzZSB3aXRob3V0IGNoYW5nZXMgKi8KKwkJCW1v ZGlmaWVkX3JpbmZvID0gbGFwcGVuZChtb2RpZmllZF9yaW5mbywgcmluZm8pOworCQkJY29u dGludWU7CisJCX0KKwkJZm9yYm90aChsY19lYXJncywgKChCb29sRXhwciAqKSByaW5mby0+ Y2xhdXNlKS0+YXJncywKKwkJCQlsY19yYXJncywgKChCb29sRXhwciAqKSByaW5mby0+b3Jj bGF1c2UpLT5hcmdzKQorCQl7CisJCQlFeHByCQkJICAgKm9ycXVhbCA9IChFeHByICopIGxm aXJzdChsY19lYXJncyk7CisJCQlOb2RlCQkJICAgKmNvbnN0X2V4cHI7CisJCQlOb2RlCQkJ ICAgKm5jb25zdF9leHByOworCQkJTGlzdENlbGwJCSAgICpsY19ncm91cHM7CisJCQlPckNs YXVzZUdyb3VwRW50cnkgKmdlbnRyeTsKKwkJCVJlc3RyaWN0SW5mbwkgICAqc3ViX3JpbmZv OworCisJCQkvKiBJZiB0aGlzIGlzIG5vdCBhbiAnT1InIGV4cHJlc3Npb24sIHNraXAgdGhl IHRyYW5zZm9ybWF0aW9uICovCisJCQlpZiAoIUlzQShsZmlyc3QobGNfcmFyZ3MpLCBSZXN0 cmljdEluZm8pKQorCQkJeworCQkJCW9yX2xpc3QgPSBsYXBwZW5kKG9yX2xpc3QsIG9ycXVh bCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlzdWJfcmluZm8gPSBsZmlyc3Rfbm9kZShS ZXN0cmljdEluZm8sIGxjX3JhcmdzKTsKKworCQkJLyogQ2hlY2s6IGl0IGlzIGFuIGV4cHIg b2YgdGhlIGZvcm0gJ0YoeCkgb3BlciBDb25zdEV4cHInICovCisJCQlpZiAoIUlzQShvcnF1 YWwsIE9wRXhwcikgfHwKKwkJCSAgICAhKGJtc19pc19lbXB0eShzdWJfcmluZm8tPmxlZnRf cmVsaWRzKSBeCisJCQkJYm1zX2lzX2VtcHR5KHN1Yl9yaW5mby0+cmlnaHRfcmVsaWRzKSkg fHwKKwkJCQljb250YWluX3ZvbGF0aWxlX2Z1bmN0aW9ucygoTm9kZSAqKSBvcnF1YWwpKQor CQkJeworCQkJCS8qIEFnYWluLCBpdCdzIG5vdCB0aGUgZXhwciB3ZSBjYW4gdHJhbnNmb3Jt ICovCisJCQkJb3JfbGlzdCA9IGxhcHBlbmQob3JfbGlzdCwgKHZvaWQgKikgb3JxdWFsKTsK KwkJCQljb250aW51ZTsKKwkJCX0KKworCisJCQkvKgorCQkJKiBEZXRlY3QgdGhlIGNvbnN0 YW50IHNpZGUgb2YgdGhlIGNsYXVzZS4gUmVjYWxsIG5vbi1jb25zdGFudAorCQkJKiBleHBy ZXNzaW9uIGNhbiBiZSBtYWRlIG5vdCBvbmx5IHdpdGggVmFycywgYnV0IGFsc28gd2l0aCBQ YXJhbXMsCisJCQkqIHdoaWNoIGlzIG5vdCBib25kZWQgd2l0aCBhbnkgcmVsYXRpb24uIFRo dXMsIHdlIGRldGVjdCB0aGUgY29uc3QKKwkJCSogc2lkZSAtIGlmIGFub3RoZXIgc2lkZSBp cyBjb25zdGFudCB0b28sIHRoZSBvcnF1YWwgY291bGRuJ3QgYmUKKwkJCSogYW4gT3BFeHBy LgorCQkJKiBHZXQgcG9pbnRlcnMgdG8gY29uc3RhbnQgYW5kIGV4cHJlc3Npb24gc2lkZXMg b2YgdGhlIHF1YWwuCisJCQkqLworCQkJY29uc3RfZXhwciA9Ym1zX2lzX2VtcHR5KHN1Yl9y aW5mby0+bGVmdF9yZWxpZHMpID8KKwkJCQkJCQkJCQkJCWdldF9sZWZ0b3Aoc3ViX3JpbmZv LT5jbGF1c2UpIDoKKwkJCQkJCQkJCQkJCWdldF9yaWdodG9wKHN1Yl9yaW5mby0+Y2xhdXNl KTsKKwkJCW5jb25zdF9leHByID0gYm1zX2lzX2VtcHR5KHN1Yl9yaW5mby0+bGVmdF9yZWxp ZHMpID8KKwkJCQkJCQkJCQkJCWdldF9yaWdodG9wKHN1Yl9yaW5mby0+Y2xhdXNlKSA6CisJ CQkJCQkJCQkJCQlnZXRfbGVmdG9wKHN1Yl9yaW5mby0+Y2xhdXNlKTsKKworCQkJaWYgKCFv cF9tZXJnZWpvaW5hYmxlKCgoT3BFeHByICopIHN1Yl9yaW5mby0+Y2xhdXNlKS0+b3Bubywg ZXhwclR5cGUobmNvbnN0X2V4cHIpKSkKKwkJCXsKKwkJCQlvcl9saXN0ID0gbGFwcGVuZChv cl9saXN0LCAodm9pZCAqKSBvcnF1YWwpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkv KgorCQkJKiBBdCB0aGlzIHBvaW50IHdlIGRlZmluaXRlbHkgaGF2ZSBhIHRyYW5zZm9ybWFi bGUgY2xhdXNlLgorCQkJKiBDbGFzc2lmeSBpdCBhbmQgYWRkIGludG8gc3BlY2lmaWMgZ3Jv dXAgb2YgY2xhdXNlcywgb3IgY3JlYXRlIG5ldworCQkJKiBncm91cC4KKwkJCSogVE9ETzog dG8gbWFuYWdlIGNvbXBsZXhpdHkgaW4gdGhlIGNhc2Ugb2YgbWFueSBkaWZmZXJlbnQgY2xh dXNlcworCQkJKiAoWDE9QzEpIE9SIChYMj1DMiBPUikgLi4uIChYTiA9IENOKSB3ZSBjb3Vs ZCBpbnZlbnQgc29tZXRoaW5nCisJCQkqIGxpa2UgYSBoYXNoIHRhYmxlLiBCdXQgYWxzbyB3 ZSBiZWxpZXZlLCB0aGF0IHRoZSBjYXNlIG9mIG1hbnkKKwkJCSogZGlmZmVyZW50IHZhcmlh YmxlIHNpZGVzIGlzIHZlcnkgcmFyZS4KKwkJCSovCisJCQlmb3JlYWNoKGxjX2dyb3Vwcywg Z3JvdXBzX2xpc3QpCisJCQl7CisJCQkJT3JDbGF1c2VHcm91cEVudHJ5ICp2ID0gKE9yQ2xh dXNlR3JvdXBFbnRyeSAqKSBsZmlyc3QobGNfZ3JvdXBzKTsKKworCQkJCUFzc2VydCh2LT5u b2RlICE9IE5VTEwpOworCisJCQkJaWYgKGVxdWFsKHYtPm5vZGUsIG5jb25zdF9leHByKSkK KwkJCQl7CisJCQkJCXYtPmNvbnN0cyA9IGxhcHBlbmQodi0+Y29uc3RzLCBjb25zdF9leHBy KTsKKwkJCQkJbmNvbnN0X2V4cHIgPSBOVUxMOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9 CisKKwkJCWlmIChuY29uc3RfZXhwciA9PSBOVUxMKQorCQkJCS8qCisJCQkJCSogVGhlIGNs YXVzZSBjbGFzc2lmaWVkIHN1Y2Nlc3NmdWxseSBhbmQgYWRkZWQgaW50byBleGlzdGVkCisJ CQkJCSogY2xhdXNlIGdyb3VwLgorCQkJCQkqLworCQkJCWNvbnRpbnVlOworCisJCQkvKiBO ZXcgY2xhdXNlIGdyb3VwIG5lZWRlZCAqLworCQkJZ2VudHJ5ID0gcGFsbG9jKHNpemVvZihP ckNsYXVzZUdyb3VwRW50cnkpKTsKKwkJCWdlbnRyeS0+bm9kZSA9IG5jb25zdF9leHByOwor CQkJZ2VudHJ5LT5jb25zdHMgPSBsaXN0X21ha2UxKGNvbnN0X2V4cHIpOworCQkJZ2VudHJ5 LT5yaW5mbyA9IHN1Yl9yaW5mbzsKKwkJCWdyb3Vwc19saXN0ID0gbGFwcGVuZChncm91cHNf bGlzdCwgICh2b2lkICopIGdlbnRyeSk7CisJCX0KKworCQlpZiAoZ3JvdXBzX2xpc3QgPT0g TklMKQorCQl7CisJCQkvKgorCQkJKiBObyBhbnkgdHJhbnNmb3JtYXRpb25zIHBvc3NpYmxl IHdpdGggdGhpcyBsaXN0IG9mIGFyZ3VtZW50cy4gSGVyZSB3ZQorCQkJKiBhbHJlYWR5IG1h ZGUgYWxsIHVuZGVybHlpbmcgdHJhbnNmb3JtYXRpb25zLiBUaHVzLCBqdXN0IHJldHVybiB0 aGUKKwkJCSogdHJhbnNmb3JtZWQgYm9vbCBleHByZXNzaW9uLgorCQkJKi8KKwkJCW1vZGlm aWVkX3JpbmZvID0gbGFwcGVuZChtb2RpZmllZF9yaW5mbywgcmluZm8pOworCQkJY29udGlu dWU7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMaXN0Q2VsbAkgICAqbGNfYXJnczsKKworCQkJ LyogTGV0J3MgY29udmVydCBlYWNoIGdyb3VwIG9mIGNsYXVzZXMgdG8gYW4gSU4gb3BlcmF0 aW9uLiAqLworCisJCQkvKgorCQkJKiBHbyB0aHJvdWdoIHRoZSBsaXN0IG9mIGdyb3VwcyBh bmQgY29udmVydCBlYWNoLCB3aGVyZSBudW1iZXIgb2YKKwkJCSogY29uc3RzIG1vcmUgdGhh biAxLiB0cml2aWFsIGdyb3VwcyBtb3ZlIHRvIE9SLWxpc3QgYWdhaW4KKwkJCSovCisKKwkJ CWZvcmVhY2gobGNfYXJncywgZ3JvdXBzX2xpc3QpCisJCQl7CisJCQkJTGlzdAkJCSAgICph bGxleHByczsKKwkJCQlPaWQJCQkJICAgIHNjYWxhcl90eXBlOworCQkJCU9pZAkJCQkJYXJy YXlfdHlwZTsKKwkJCQlPckNsYXVzZUdyb3VwRW50cnkgKmdlbnRyeSA9IChPckNsYXVzZUdy b3VwRW50cnkgKikgbGZpcnN0KGxjX2FyZ3MpOworCisJCQkJQXNzZXJ0KGxpc3RfbGVuZ3Ro KGdlbnRyeS0+Y29uc3RzKSA+IDApOworCisJCQkJaWYgKGxpc3RfbGVuZ3RoKGdlbnRyeS0+ Y29uc3RzKSA9PSAxKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJKiBPbmx5IG9uZSBlbGVtZW50 IGluIHRoZSBjbGFzcy4gUmV0dXJuIHJpbmZvIGludG8gdGhlIEJvb2xFeHByCisJCQkJCSog YXJncyBsaXN0IHVuY2hhbmdlZC4KKwkJCQkJKi8KKwkJCQkJbGlzdF9mcmVlKGdlbnRyeS0+ Y29uc3RzKTsKKwkJCQkJb3JfbGlzdCA9IGxhcHBlbmQob3JfbGlzdCwgZ2VudHJ5LT5yaW5m by0+Y2xhdXNlKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJLyoKKwkJCQkqIERv IHRoZSB0cmFuc2Zvcm1hdGlvbi4KKwkJCQkqCisJCQkJKiBGaXJzdCBvZiBhbGwsIHRyeSB0 byBzZWxlY3QgYSBjb21tb24gdHlwZSBmb3IgdGhlIGFycmF5IGVsZW1lbnRzLgorCQkJCSog Tm90ZSB0aGF0IHNpbmNlIHRoZSBMSFMnIHR5cGUgaXMgZmlyc3QgaW4gdGhlIGxpc3QsIGl0 IHdpbGwgYmUKKwkJCQkqIHByZWZlcnJlZCB3aGVuIHRoZXJlIGlzIGRvdWJ0IChlZywgd2hl biBhbGwgdGhlIFJIUyBpdGVtcyBhcmUKKwkJCQkqIHVua25vd24gbGl0ZXJhbHMpLgorCQkJ CSoKKwkJCQkqIE5vdGU6IHVzZSBsaXN0X2NvbmNhdCBoZXJlIG5vdCBsY29ucywgdG8gYXZv aWQgZGFtYWdpbmcgcm5vbnZhcnMuCisJCQkJKgorCQkJCSogQXMgYSBzb3VyY2Ugb2YgaW5z aWRlcywgdXNlIG1ha2Vfc2NhbGFyX2FycmF5X29wKCkKKwkJCQkqLworCQkJCWFsbGV4cHJz ID0gbGlzdF9jb25jYXQobGlzdF9tYWtlMShnZW50cnktPm5vZGUpLCBnZW50cnktPmNvbnN0 cyk7CisJCQkJc2NhbGFyX3R5cGUgPSBzZWxlY3RfY29tbW9uX3R5cGUoTlVMTCwgYWxsZXhw cnMsIE5VTEwsIE5VTEwpOworCisJCQkJaWYgKHNjYWxhcl90eXBlICE9IFJFQ09SRE9JRCAm JiBPaWRJc1ZhbGlkKHNjYWxhcl90eXBlKSkKKwkJCQkJYXJyYXlfdHlwZSA9IGdldF9hcnJh eV90eXBlKHNjYWxhcl90eXBlKTsKKwkJCQllbHNlCisJCQkJCWFycmF5X3R5cGUgPSBJbnZh bGlkT2lkOworCisJCQkJaWYgKGFycmF5X3R5cGUgIT0gSW52YWxpZE9pZCAmJiBzY2FsYXJf dHlwZSAhPSBJbnZhbGlkT2lkKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJKiBPSzogY29lcmNl IGFsbCB0aGUgcmlnaHQtaGFuZCBub24tVmFyIGlucHV0cyB0byB0aGUgY29tbW9uCisJCQkJ CSogdHlwZSBhbmQgYnVpbGQgYW4gQXJyYXlFeHByIGZvciB0aGVtLgorCQkJCQkqLworCQkJ CQlMaXN0CSAgICphZXhwcnM7CisJCQkJCUFycmF5RXhwciAgKm5ld2E7CisJCQkJCVNjYWxh ckFycmF5T3BFeHByICpzYW9wZXhwcjsKKwkJCQkJTGlzdENlbGwgKmw7CisKKwkJCQkJYWV4 cHJzID0gTklMOworCisJCQkJCWZvcmVhY2gobCwgZ2VudHJ5LT5jb25zdHMpCisJCQkJCXsK KwkJCQkJCU5vZGUJICAgKnJleHByID0gKE5vZGUgKikgbGZpcnN0KGwpOworCisJCQkJCQly ZXhwciA9IGNvZXJjZV90b19jb21tb25fdHlwZShOVUxMLCByZXhwciwKKwkJCQkJCQkJCQkJ CQlzY2FsYXJfdHlwZSwKKwkJCQkJCQkJCQkJCQkiSU4iKTsKKwkJCQkJCWFleHBycyA9IGxh cHBlbmQoYWV4cHJzLCByZXhwcik7CisJCQkJCX0KKworCQkJCQluZXdhID0gbWFrZU5vZGUo QXJyYXlFeHByKTsKKwkJCQkJLyogYXJyYXlfY29sbGlkIHdpbGwgYmUgc2V0IGJ5IHBhcnNl X2NvbGxhdGUuYyAqLworCQkJCQluZXdhLT5lbGVtZW50X3R5cGVpZCA9IHNjYWxhcl90eXBl OworCQkJCQluZXdhLT5hcnJheV90eXBlaWQgPSBhcnJheV90eXBlOworCQkJCQluZXdhLT5t dWx0aWRpbXMgPSBmYWxzZTsKKwkJCQkJbmV3YS0+ZWxlbWVudHMgPSBhZXhwcnM7CisJCQkJ CW5ld2EtPmxvY2F0aW9uID0gLTE7CisKKwkJCQkJc2FvcGV4cHIgPQorCQkJCQkJKFNjYWxh ckFycmF5T3BFeHByICopCisJCQkJCQkJbWFrZV9zY2FsYXJfYXJyYXlfb3AoTlVMTCwKKwkJ CQkJCQkJCQkJCWxpc3RfbWFrZTEobWFrZVN0cmluZygoY2hhciAqKSAiPSIpKSwKKwkJCQkJ CQkJCQkJCXRydWUsCisJCQkJCQkJCQkJCQlnZW50cnktPm5vZGUsCisJCQkJCQkJCQkJCQko Tm9kZSAqKSBuZXdhLAorCQkJCQkJCQkJCQkJLTEpOworCQkJCQlzYW9wZXhwci0+aW5wdXRj b2xsaWQgPSBleHBySW5wdXRDb2xsYXRpb24oKE5vZGUgKilnZW50cnktPnJpbmZvLT5jbGF1 c2UpOworCisJCQkJCW9yX2xpc3QgPSBsYXBwZW5kKG9yX2xpc3QsICh2b2lkICopIHNhb3Bl eHByKTsKKworCQkJCQlzb21ldGhpbmdfY2hhbmdlZCA9IHRydWU7CisJCQkJfQorCQkJCWVs c2UKKwkJCQl7CisJCQkJCS8qCisJCQkJCSogRWFjaCBncm91cCBjb250YWlucyBvbmx5IG9u ZSBlbGVtZW50IC0gdXNlIHJpbmZvIGFzIGlzLgorCQkJCQkqLworCQkJCQlsaXN0X2ZyZWUo Z2VudHJ5LT5jb25zdHMpOworCQkJCQlvcl9saXN0ID0gbGFwcGVuZChvcl9saXN0LCBnZW50 cnktPmV4cHIpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQkvKgorCQkJCSogTWFr ZSBhIG5ldyB2ZXJzaW9uIG9mIHRoZSByZXN0cmljdGlvbi4gUmVtZW1iZXIgc291cmNlIHJl c3RyaWN0aW9uCisJCQkJKiBjYW4gYmUgdXNlZCBpbiBhbm90aGVyIHBhdGggKFNlcVNjYW4s IGZvciBleGFtcGxlKS4KKwkJCQkqLworCisJCQkJLyogT25lIG1vcmUgdHJpY2s6IGFzc2Vt YmxlIGNvcnJlY3QgY2xhdXNlICovCisJCQkJcmluZm8gPSBtYWtlX3Jlc3RyaWN0aW5mbyhy b290LAorCQkJCQkJbGlzdF9sZW5ndGgob3JfbGlzdCkgPiAxID8gbWFrZV9vcmNsYXVzZShv cl9saXN0KSA6CisJCQkJCQkJCQkJCQkJKEV4cHIgKikgbGluaXRpYWwob3JfbGlzdCksCisJ CQkJCQlyaW5mby0+aGFzX2Nsb25lLAorCQkJCQkJcmluZm8tPmlzX2Nsb25lLAorCQkJCQkJ cmluZm8tPmlzX3B1c2hlZF9kb3duLAorCQkJCQkJcmluZm8tPnBzZXVkb2NvbnN0YW50LAor CQkJCQkJcmluZm8tPnNlY3VyaXR5X2xldmVsLAorCQkJCQkJcmluZm8tPnJlcXVpcmVkX3Jl bGlkcywKKwkJCQkJCXJpbmZvLT5vdXRlcl9yZWxpZHMsCisJCQkJCQlyaW5mby0+b3V0ZXJf cmVsaWRzKTsKKwkJCQlyaW5mby0+ZXZhbF9jb3N0PXJpbmZvX2Jhc2UtPmV2YWxfY29zdDsK KwkJCQlyaW5mby0+bm9ybV9zZWxlYz1yaW5mb19iYXNlLT5ub3JtX3NlbGVjOworCQkJCXJp bmZvLT5vdXRlcl9zZWxlYz1yaW5mb19iYXNlLT5vdXRlcl9zZWxlYzsKKwkJCQlyaW5mby0+ bGVmdF9idWNrZXRzaXplPXJpbmZvX2Jhc2UtPmxlZnRfYnVja2V0c2l6ZTsKKwkJCQlyaW5m by0+cmlnaHRfYnVja2V0c2l6ZT1yaW5mb19iYXNlLT5yaWdodF9idWNrZXRzaXplOworCQkJ CXJpbmZvLT5sZWZ0X21jdmZyZXE9cmluZm9fYmFzZS0+bGVmdF9tY3ZmcmVxOworCQkJCXJp bmZvLT5yaWdodF9tY3ZmcmVxPXJpbmZvX2Jhc2UtPnJpZ2h0X21jdmZyZXE7CisJCQkJbW9k aWZpZWRfcmluZm8gPSBsYXBwZW5kKG1vZGlmaWVkX3JpbmZvLCByaW5mbyk7CisJCQkJc29t ZXRoaW5nX2NoYW5nZWQgPSB0cnVlOworCQkJfQorCQl9CisJCWxpc3RfZnJlZShvcl9saXN0 KTsKKwkJbGlzdF9mcmVlX2RlZXAoZ3JvdXBzX2xpc3QpOworCX0KKworCS8qCisJCSogQ2hl Y2sgaWYgdHJhbnNmb3JtYXRpb24gaGFzIG1hZGUuIElmIG5vdGhpbmcgY2hhbmdlZCAtIHJl dHVybgorCQkqIGJhc2VyZXN0cmljdGluZm8gYXMgaXMuCisJCSovCisJaWYgKHNvbWV0aGlu Z19jaGFuZ2VkKQorCXsKKwkJcmV0dXJuIG1vZGlmaWVkX3JpbmZvOworCX0KKworCWxpc3Rf ZnJlZShtb2RpZmllZF9yaW5mbyk7CisJcmV0dXJuIGJhc2VyZXN0cmljdGluZm87Cit9CisK IC8qCiAgKiBleHRyYWN0X3Jlc3RyaWN0aW9uX29yX2NsYXVzZXMKICAqCSAgRXhhbWluZSBq b2luIE9SLW9mLUFORCBjbGF1c2VzIHRvIHNlZSBpZiBhbnkgdXNlZnVsIHJlc3RyaWN0aW9u IE9SCkBAIC05Myw2ICszODMsOSBAQCBleHRyYWN0X3Jlc3RyaWN0aW9uX29yX2NsYXVzZXMo UGxhbm5lckluZm8gKnJvb3QpCiAJCWlmIChyZWwtPnJlbG9wdGtpbmQgIT0gUkVMT1BUX0JB U0VSRUwpCiAJCQljb250aW51ZTsKIAorCQlyZWwtPmJhc2VyZXN0cmljdGluZm8gID0gdHJh bnNmb3JtX29ycyhyb290LCByZWwtPmJhc2VyZXN0cmljdGluZm8pOworCQkvL3JlbC0+am9p bmluZm8gPSB0cmFuc2Zvcm1fb3JzKHJvb3QsIHJlbC0+am9pbmluZm8pOworCiAJCS8qCiAJ CSAqIEZpbmQgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgT1Igam9pbmNsYXVzZXMuICBXZSBj YW4gdXNlIGFueQogCQkgKiBqb2luY2xhdXNlIHRoYXQgaXMgY29uc2lkZXJlZCBzYWZlIHRv IG1vdmUgdG8gdGhpcyByZWwgYnkgdGhlCkBAIC0xMTQsNyArNDA3LDkgQEAgZXh0cmFjdF9y ZXN0cmljdGlvbl9vcl9jbGF1c2VzKFBsYW5uZXJJbmZvICpyb290KQogCQkJCSAqIGFuZCBp bnNlcnQgaXQgaW50byB0aGUgcmVsJ3MgcmVzdHJpY3RpbmZvIGxpc3QgaWYgc28uCiAJCQkJ ICovCiAJCQkJaWYgKG9yY2xhdXNlKQorCQkJCXsKIAkJCQkJY29uc2lkZXJfbmV3X29yX2Ns YXVzZShyb290LCByZWwsIG9yY2xhdXNlLCByaW5mbyk7CisJCQkJfQogCQkJfQogCQl9CiAJ fQo= --------------lj50Z2vNsWwWnWX7WabrEJ8n Content-Type: text/x-patch; charset=UTF-8; name="v7.0-Replace-OR-clause-to-ANY.patch" Content-Disposition: attachment; filename="v7.0-Replace-OR-clause-to-ANY.patch" Content-Transfer-Encoding: base64 RnJvbSAwODcxMjVjYzQxMzQyOWJkYTA1ZjIyZWJiZDUxMTE1YzIzODE5Mjg1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbGVuYSBSeWJha2luYSA8YS5yeWJha2luYUBwb3N0 Z3Jlc3Byby5ydT4KRGF0ZTogVHVlLCAxOCBKdWwgMjAyMyAxNzoxOTo1MyArMDMwMApTdWJq ZWN0OiBbUEFUQ0hdIFJlcGxhY2UgT1IgY2xhdXNlIHRvIEFOWSBleHByZXNzaW9ucy4gUmVw bGFjZSAoWD1OMSkgT1IKIChYPU4yKSAuLi4gd2l0aCBYID0gQU5ZKE4xLCBOMikgb24gdGhl IHN0YWdlIG9mIHRoZSBvcHRpbWlzZXIgd2hlbiB3ZSBhcmUKIHN0aWxsIHdvcmtpbmcgd2l0 aCBhIHRyZWUgZXhwcmVzc2lvbi4gRmlyc3RseSwgd2UgZG8gbm90IHRyeSB0byBtYWtlIGEK IHRyYW5zZm9ybWF0aW9uIGZvciAibm9uLW9yIiBleHByZXNzaW9ucyBvciBpbmVxdWFsaXRp ZXMgYW5kIHRoZSBjcmVhdGlvbiBvZiBhCiByZWxhdGlvbiB3aXRoICJvciIgZXhwcmVzc2lv bnMgb2NjdXJzIGFjY29yZGluZyB0byB0aGUgc2FtZSBzY2VuYXJpby4KIFNlY29uZGx5LCB3 ZSBkbyBub3QgbWFrZSB0cmFuc2Zvcm1hdGlvbnMgaWYgdGhlcmUgYXJlIGxlc3MgdGhhbiBz ZXQKIG9yX3RyYW5zZm9ybV9saW1pdC4gVGhpcmRseSwgaXQgaXMgd29ydGggY29uc2lkZXJp bmcgdGhhdCB3ZSBjb25zaWRlciAib3IiCiBleHByZXNzaW9ucyBvbmx5IGF0IHRoZSBjdXJy ZW50IGxldmVsLgoKQXV0aG9yczogQWxlbmEgUnliYWtpbmEgPGxlbmEucmliYWNraW5hQHlh bmRleC5ydT4sIEFuZHJleSBMZXBpa2hvdiA8YS5sZXBpa2hvdkBwb3N0Z3Jlc3Byby5ydT4K UmV2aWV3ZWQtYnk6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4sIFJhbmllciBWaWxl bGEgPHJhbmllci52ZkBnbWFpbC5jb20+Ci0tLQogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNl X2V4cHIuYyAgICAgICAgICAgICAgIHwgMjMwICsrKysrKysrKysrKysrKysrLQogc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgICAgICAgICAgIHwgIDEwICsKIHNyYy9p bmNsdWRlL3BhcnNlci9wYXJzZV9leHByLmggICAgICAgICAgICAgICB8ICAgMSArCiBzcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQgICAgfCAxMTUgKysrKysr KysrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2d1Yy5vdXQgICAgICAgICAgICAgfCAg IDMgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQgICAgICAgICAgICB8 ICA1MCArKysrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9wcnVuZS5v dXQgfCAxNzkgKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdGlk c2Nhbi5vdXQgICAgICAgICB8ICAxNyArKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRl X2luZGV4LnNxbCAgICAgICAgIHwgIDMyICsrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9p bi5zcWwgICAgICAgICAgICAgICAgIHwgIDEwICsKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Bh cnRpdGlvbl9wcnVuZS5zcWwgICAgICB8ICAyMiArKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwv dGlkc2Nhbi5zcWwgICAgICAgICAgICAgIHwgICA2ICsKIHNyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMSArCiAxMyBmaWxlcyBjaGFuZ2VkLCA2 NzQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4 cHIuYwppbmRleCA1YTA1Y2FhODc0NC4uYjIyOTRhZjBmNDMgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3Bh cnNlX2V4cHIuYwpAQCAtNDMsNiArNDMsNyBAQAogCiAvKiBHVUMgcGFyYW1ldGVycyAqLwog Ym9vbAkJVHJhbnNmb3JtX251bGxfZXF1YWxzID0gZmFsc2U7CitpbnQJCQlvcl90cmFuc2Zv cm1fbGltaXQgPSA1MDA7CiAKIAogc3RhdGljIE5vZGUgKnRyYW5zZm9ybUV4cHJSZWN1cnNl KFBhcnNlU3RhdGUgKnBzdGF0ZSwgTm9kZSAqZXhwcik7CkBAIC05NSw2ICs5NiwyMzMgQEAg c3RhdGljIEV4cHIgKm1ha2VfZGlzdGluY3Rfb3AoUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0 ICpvcG5hbWUsCiBzdGF0aWMgTm9kZSAqbWFrZV9udWxsdGVzdF9mcm9tX2Rpc3RpbmN0KFBh cnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQkJCQkgQV9FeHByICpkaXN0aW5jdGEsIE5vZGUg KmFyZyk7CiAKK3R5cGVkZWYgc3RydWN0IE9yQ2xhdXNlR3JvdXBFbnRyeQoreworCU5vZGUJ CSAgICpub2RlOworCUxpc3QJCSAgICpjb25zdHM7CisJT2lkCQkJCXNjYWxhcl90eXBlOwor CU9pZAkJCQlvcG5vOworCUV4cHIgCQkgICAqZXhwcjsKK30gT3JDbGF1c2VHcm91cEVudHJ5 OworCitzdGF0aWMgTm9kZSAqCit0cmFuc2Zvcm1Cb29sRXhwck9yKFBhcnNlU3RhdGUgKnBz dGF0ZSwgQm9vbEV4cHIgKmV4cHJfb3JpZykKK3sKKwlMaXN0CQkgICAqb3JfbGlzdCA9IE5J TDsKKwlMaXN0CQkgICAqZ3JvdXBzX2xpc3QgPSBOSUw7CisJTGlzdENlbGwJICAgKmxjOwor CisJLyogSWYgdGhpcyBpcyBub3QgYW4gJ09SJyBleHByZXNzaW9uLCBza2lwIHRoZSB0cmFu c2Zvcm1hdGlvbiAqLworCWlmIChleHByX29yaWctPmJvb2xvcCAhPSBPUl9FWFBSIHx8CisJ CWxpc3RfbGVuZ3RoKGV4cHJfb3JpZy0+YXJncykgPCBvcl90cmFuc2Zvcm1fbGltaXQpCisJ CXJldHVybiB0cmFuc2Zvcm1Cb29sRXhwcihwc3RhdGUsIChCb29sRXhwciAqKSBleHByX29y aWcpOworCisJZm9yZWFjaChsYywgZXhwcl9vcmlnLT5hcmdzKQorCXsKKwkJTm9kZQkJCSAg ICphcmcgPSBsZmlyc3QobGMpOworCQlOb2RlCQkJICAgKm9ycXVhbDsKKwkJTm9kZQkJCSAg ICpjb25zdF9leHByOworCQlOb2RlCQkJICAgKm5jb25zdF9leHByOworCQlMaXN0Q2VsbAkJ ICAgKmxjX2dyb3VwczsKKwkJT3JDbGF1c2VHcm91cEVudHJ5ICpnZW50cnk7CisKKwkJLyog QXQgZmlyc3QsIHRyYW5zZm9ybSB0aGUgYXJnIGFuZCBldmFsdWF0ZSBjb25zdGFudCBleHBy ZXNzaW9ucy4gKi8KKwkJb3JxdWFsID0gdHJhbnNmb3JtRXhwclJlY3Vyc2UocHN0YXRlLCAo Tm9kZSAqKSBhcmcpOworCQlvcnF1YWwgPSBjb2VyY2VfdG9fYm9vbGVhbihwc3RhdGUsIG9y cXVhbCwgIk9SIik7CisJCW9ycXVhbCA9IGV2YWxfY29uc3RfZXhwcmVzc2lvbnMoTlVMTCwg b3JxdWFsKTsKKworCQlpZiAoIUlzQShvcnF1YWwsIE9wRXhwcikpCisJCXsKKwkJCW9yX2xp c3QgPSBsYXBwZW5kKG9yX2xpc3QsIG9ycXVhbCk7CisJCQljb250aW51ZTsKKwkJfQorCisJ CS8qCisJCSAqIERldGVjdCB0aGUgY29uc3RhbnQgc2lkZSBvZiB0aGUgY2xhdXNlLiBSZWNh bGwgbm9uLWNvbnN0YW50CisJCSAqIGV4cHJlc3Npb24gY2FuIGJlIG1hZGUgbm90IG9ubHkg d2l0aCBWYXJzLCBidXQgYWxzbyB3aXRoIFBhcmFtcywKKwkJICogd2hpY2ggaXMgbm90IGJv bmRlZCB3aXRoIGFueSByZWxhdGlvbi4gVGh1cywgd2UgZGV0ZWN0IHRoZSBjb25zdAorCQkg KiBzaWRlIC0gaWYgYW5vdGhlciBzaWRlIGlzIGNvbnN0YW50IHRvbywgdGhlIG9ycXVhbCBj b3VsZG4ndCBiZQorCQkgKiBhbiBPcEV4cHIuCisJCSAqIEdldCBwb2ludGVycyB0byBjb25z dGFudCBhbmQgZXhwcmVzc2lvbiBzaWRlcyBvZiB0aGUgcXVhbC4KKwkJICovCisJCWlmIChJ c0EoZ2V0X2xlZnRvcChvcnF1YWwpLCBDb25zdCkpCisJCXsKKwkJCW5jb25zdF9leHByID0g Z2V0X3JpZ2h0b3Aob3JxdWFsKTsKKwkJCWNvbnN0X2V4cHIgPSBnZXRfbGVmdG9wKG9ycXVh bCk7CisJCX0KKwkJZWxzZSBpZiAoSXNBKGdldF9yaWdodG9wKG9ycXVhbCksIENvbnN0KSkK KwkJeworCQkJY29uc3RfZXhwciA9IGdldF9yaWdodG9wKG9ycXVhbCk7CisJCQluY29uc3Rf ZXhwciA9IGdldF9sZWZ0b3Aob3JxdWFsKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCW9yX2xp c3QgPSBsYXBwZW5kKG9yX2xpc3QsIG9ycXVhbCk7CisJCQljb250aW51ZTsKKwkJfQorCisJ CWlmICghb3BfbWVyZ2Vqb2luYWJsZSgoKE9wRXhwciAqKSBvcnF1YWwpLT5vcG5vLCBleHBy VHlwZShuY29uc3RfZXhwcikpKQorCQl7CisJCQlvcl9saXN0ID0gbGFwcGVuZChvcl9saXN0 LCBvcnF1YWwpOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkqIEF0IHRoaXMgcG9p bnQgd2UgZGVmaW5pdGVseSBoYXZlIGEgdHJhbnNmb3JtYWJsZSBjbGF1c2UuCisJCSogQ2xh c3NpZnkgaXQgYW5kIGFkZCBpbnRvIHNwZWNpZmljIGdyb3VwIG9mIGNsYXVzZXMsIG9yIGNy ZWF0ZSBuZXcKKwkJKiBncm91cC4KKwkJKiBUT0RPOiB0byBtYW5hZ2UgY29tcGxleGl0eSBp biB0aGUgY2FzZSBvZiBtYW55IGRpZmZlcmVudCBjbGF1c2VzCisJCSogKFgxPUMxKSBPUiAo WDI9QzIgT1IpIC4uLiAoWE4gPSBDTikgd2UgY291bGQgaW52ZW50IHNvbWV0aGluZworCQkq IGxpa2UgYSBoYXNoIHRhYmxlLiBCdXQgYWxzbyB3ZSBiZWxpZXZlLCB0aGF0IHRoZSBjYXNl IG9mIG1hbnkKKwkJKiBkaWZmZXJlbnQgdmFyaWFibGUgc2lkZXMgaXMgdmVyeSByYXJlLgor CQkqLworCQlmb3JlYWNoKGxjX2dyb3VwcywgZ3JvdXBzX2xpc3QpCisJCXsKKwkJCU9yQ2xh dXNlR3JvdXBFbnRyeSAqdiA9IChPckNsYXVzZUdyb3VwRW50cnkgKikgbGZpcnN0KGxjX2dy b3Vwcyk7CisKKwkJCUFzc2VydCh2LT5ub2RlICE9IE5VTEwpOworCisJCQlpZiAoZXF1YWwo di0+bm9kZSwgbmNvbnN0X2V4cHIpKQorCQkJeworCQkJCXYtPmNvbnN0cyA9IGxhcHBlbmQo di0+Y29uc3RzLCBjb25zdF9leHByKTsKKwkJCQluY29uc3RfZXhwciA9IE5VTEw7CisJCQkJ YnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAobmNvbnN0X2V4cHIgPT0gTlVMTCkKKwkJCS8q CisJCQkJKiBUaGUgY2xhdXNlIGNsYXNzaWZpZWQgc3VjY2Vzc2Z1bGx5IGFuZCBhZGRlZCBp bnRvIGV4aXN0ZWQKKwkJCQkqIGNsYXVzZSBncm91cC4KKwkJCQkqLworCQkJY29udGludWU7 CisKKwkJLyogTmV3IGNsYXVzZSBncm91cCBuZWVkZWQgKi8KKwkJZ2VudHJ5ID0gcGFsbG9j KHNpemVvZihPckNsYXVzZUdyb3VwRW50cnkpKTsKKwkJZ2VudHJ5LT5ub2RlID0gbmNvbnN0 X2V4cHI7CisJCWdlbnRyeS0+Y29uc3RzID0gbGlzdF9tYWtlMShjb25zdF9leHByKTsKKwkJ Z2VudHJ5LT5leHByID0gKEV4cHIgKikgb3JxdWFsOworCQlncm91cHNfbGlzdCA9IGxhcHBl bmQoZ3JvdXBzX2xpc3QsICAodm9pZCAqKSBnZW50cnkpOworCX0KKworCWlmIChncm91cHNf bGlzdCA9PSBOSUwpCisJeworCQkvKgorCQkqIE5vIGFueSB0cmFuc2Zvcm1hdGlvbnMgcG9z c2libGUgd2l0aCB0aGlzIGxpc3Qgb2YgYXJndW1lbnRzLiBIZXJlIHdlCisJCSogYWxyZWFk eSBtYWRlIGFsbCB1bmRlcmx5aW5nIHRyYW5zZm9ybWF0aW9ucy4gVGh1cywganVzdCByZXR1 cm4gdGhlCisJCSogdHJhbnNmb3JtZWQgYm9vbCBleHByZXNzaW9uLgorCQkqLworCQlyZXR1 cm4gKE5vZGUgKikgbWFrZUJvb2xFeHByKE9SX0VYUFIsIG9yX2xpc3QsIGV4cHJfb3JpZy0+ bG9jYXRpb24pOworCX0KKwllbHNlCisJeworCQlMaXN0Q2VsbAkgICAqbGNfYXJnczsKKwor CQkvKiBMZXQncyBjb252ZXJ0IGVhY2ggZ3JvdXAgb2YgY2xhdXNlcyB0byBhbiBJTiBvcGVy YXRpb24uICovCisKKwkJLyoKKwkJKiBHbyB0aHJvdWdoIHRoZSBsaXN0IG9mIGdyb3VwcyBh bmQgY29udmVydCBlYWNoLCB3aGVyZSBudW1iZXIgb2YKKwkJKiBjb25zdHMgbW9yZSB0aGFu IDEuIHRyaXZpYWwgZ3JvdXBzIG1vdmUgdG8gT1ItbGlzdCBhZ2FpbgorCQkqLworCisJCWZv cmVhY2gobGNfYXJncywgZ3JvdXBzX2xpc3QpCisJCXsKKwkJCU9yQ2xhdXNlR3JvdXBFbnRy eSAqZ2VudHJ5ID0gKE9yQ2xhdXNlR3JvdXBFbnRyeSAqKSBsZmlyc3QobGNfYXJncyk7CisJ CQlMaXN0CQkJICAgKmFsbGV4cHJzOworCQkJT2lkCQkJCSAgICBzY2FsYXJfdHlwZTsKKwkJ CU9pZAkJCQkJYXJyYXlfdHlwZTsKKworCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKGdlbnRyeS0+ Y29uc3RzKSA+IDApOworCisJCQlpZiAobGlzdF9sZW5ndGgoZ2VudHJ5LT5jb25zdHMpID09 IDEpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBPbmx5IG9uZSBlbGVtZW50IGluIHRoZSBjbGFz cy4gUmV0dXJuIHJpbmZvIGludG8gdGhlIEJvb2xFeHByCisJCQkJICogYXJncyBsaXN0IHVu Y2hhbmdlZC4KKwkJCQkgKi8KKwkJCQlsaXN0X2ZyZWUoZ2VudHJ5LT5jb25zdHMpOworCQkJ CW9yX2xpc3QgPSBsYXBwZW5kKG9yX2xpc3QsIGdlbnRyeS0+ZXhwcik7CisJCQkJY29udGlu dWU7CisJCQl9CisKKwkJCS8qCisJCQkgKiBEbyB0aGUgdHJhbnNmb3JtYXRpb24uCisJCQkg KgorCQkJICogRmlyc3Qgb2YgYWxsLCB0cnkgdG8gc2VsZWN0IGEgY29tbW9uIHR5cGUgZm9y IHRoZSBhcnJheSBlbGVtZW50cy4KKwkJCSAqIE5vdGUgdGhhdCBzaW5jZSB0aGUgTEhTJyB0 eXBlIGlzIGZpcnN0IGluIHRoZSBsaXN0LCBpdCB3aWxsIGJlCisJCQkgKiBwcmVmZXJyZWQg d2hlbiB0aGVyZSBpcyBkb3VidCAoZWcsIHdoZW4gYWxsIHRoZSBSSFMgaXRlbXMgYXJlCisJ CQkgKiB1bmtub3duIGxpdGVyYWxzKS4KKwkJCSAqCisJCQkgKiBOb3RlOiB1c2UgbGlzdF9j b25jYXQgaGVyZSBub3QgbGNvbnMsIHRvIGF2b2lkIGRhbWFnaW5nIHJub252YXJzLgorCQkJ ICoKKwkJCSAqIEFzIGEgc291cmNlIG9mIGluc2lkZXMsIHVzZSBtYWtlX3NjYWxhcl9hcnJh eV9vcCgpCisJCQkgKi8KKwkJCWFsbGV4cHJzID0gbGlzdF9jb25jYXQobGlzdF9tYWtlMShn ZW50cnktPm5vZGUpLCBnZW50cnktPmNvbnN0cyk7CisJCQlzY2FsYXJfdHlwZSA9IHNlbGVj dF9jb21tb25fdHlwZShOVUxMLCBhbGxleHBycywgTlVMTCwgTlVMTCk7CisKKwkJCWlmIChz Y2FsYXJfdHlwZSAhPSBSRUNPUkRPSUQgJiYgT2lkSXNWYWxpZChzY2FsYXJfdHlwZSkpCisJ CQkJYXJyYXlfdHlwZSA9IGdldF9hcnJheV90eXBlKHNjYWxhcl90eXBlKTsKKwkJCWVsc2UK KwkJCQlhcnJheV90eXBlID0gSW52YWxpZE9pZDsKKworCQkJaWYgKGFycmF5X3R5cGUgIT0g SW52YWxpZE9pZCkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIE9LOiBjb2VyY2UgYWxsIHRoZSBy aWdodC1oYW5kIG5vbi1WYXIgaW5wdXRzIHRvIHRoZSBjb21tb24KKwkJCQkgKiB0eXBlIGFu ZCBidWlsZCBhbiBBcnJheUV4cHIgZm9yIHRoZW0uCisJCQkJICovCisJCQkJTGlzdAkgICAq YWV4cHJzOworCQkJCUFycmF5RXhwciAgKm5ld2E7CisJCQkJU2NhbGFyQXJyYXlPcEV4cHIg KnNhb3BleHByOworCQkJCUxpc3RDZWxsICpsOworCisJCQkJYWV4cHJzID0gTklMOworCisJ CQkJZm9yZWFjaChsLCBnZW50cnktPmNvbnN0cykKKwkJCQl7CisJCQkJCU5vZGUJICAgKnJl eHByID0gKE5vZGUgKikgbGZpcnN0KGwpOworCisJCQkJCXJleHByID0gY29lcmNlX3RvX2Nv bW1vbl90eXBlKHBzdGF0ZSwgcmV4cHIsCisJCQkJCQkJCQkJCQlzY2FsYXJfdHlwZSwKKwkJ CQkJCQkJCQkJCSJJTiIpOworCQkJCQlhZXhwcnMgPSBsYXBwZW5kKGFleHBycywgcmV4cHIp OworCQkJCX0KKworCQkJCW5ld2EgPSBtYWtlTm9kZShBcnJheUV4cHIpOworCQkJCS8qIGFy cmF5X2NvbGxpZCB3aWxsIGJlIHNldCBieSBwYXJzZV9jb2xsYXRlLmMgKi8KKwkJCQluZXdh LT5lbGVtZW50X3R5cGVpZCA9IHNjYWxhcl90eXBlOworCQkJCW5ld2EtPmFycmF5X3R5cGVp ZCA9IGFycmF5X3R5cGU7CisJCQkJbmV3YS0+bXVsdGlkaW1zID0gZmFsc2U7CisJCQkJbmV3 YS0+ZWxlbWVudHMgPSBhZXhwcnM7CisJCQkJbmV3YS0+bG9jYXRpb24gPSAtMTsKKworCQkJ CXNhb3BleHByID0KKwkJCQkJKFNjYWxhckFycmF5T3BFeHByICopCisJCQkJCQltYWtlX3Nj YWxhcl9hcnJheV9vcChwc3RhdGUsCisJCQkJCQkJCQkJCSBsaXN0X21ha2UxKG1ha2VTdHJp bmcoKGNoYXIgKikgIj0iKSksCisJCQkJCQkJCQkJCSB0cnVlLAorCQkJCQkJCQkJCQkgZ2Vu dHJ5LT5ub2RlLAorCQkJCQkJCQkJCQkgKE5vZGUgKikgbmV3YSwKKwkJCQkJCQkJCQkJIC0x KTsKKworCQkJCW9yX2xpc3QgPSBsYXBwZW5kKG9yX2xpc3QsICh2b2lkICopIHNhb3BleHBy KTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlsaXN0X2ZyZWUoZ2VudHJ5LT5jb25zdHMp OworCQkJCW9yX2xpc3QgPSBsYXBwZW5kKG9yX2xpc3QsIGdlbnRyeS0+ZXhwcik7CisJCQkJ Y29udGludWU7CisJCQl9CisJCX0KKworCQlsaXN0X2ZyZWVfZGVlcChncm91cHNfbGlzdCk7 CisJfQorCisJLyogT25lIG1vcmUgdHJpY2s6IGFzc2VtYmxlIGNvcnJlY3QgY2xhdXNlICov CisJcmV0dXJuIChOb2RlICopICgobGlzdF9sZW5ndGgob3JfbGlzdCkgPiAxKSA/CisJCQkJ CQltYWtlQm9vbEV4cHIoT1JfRVhQUiwgb3JfbGlzdCwgZXhwcl9vcmlnLT5sb2NhdGlvbikg OgorCQkJCQkJbGluaXRpYWwob3JfbGlzdCkpOworfQogCiAvKgogICogdHJhbnNmb3JtRXhw ciAtCkBAIC0yMDgsNyArNDM2LDcgQEAgdHJhbnNmb3JtRXhwclJlY3Vyc2UoUGFyc2VTdGF0 ZSAqcHN0YXRlLCBOb2RlICpleHByKQogCQkJfQogCiAJCWNhc2UgVF9Cb29sRXhwcjoKLQkJ CXJlc3VsdCA9IHRyYW5zZm9ybUJvb2xFeHByKHBzdGF0ZSwgKEJvb2xFeHByICopIGV4cHIp OworCQkJcmVzdWx0ID0gKE5vZGUgKil0cmFuc2Zvcm1Cb29sRXhwck9yKHBzdGF0ZSwgKEJv b2xFeHByICopIGV4cHIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBUX0Z1bmNDYWxsOgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMvYmFj a2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwppbmRleCBmOWRiYTQzYjhjMC4uZGRjMjdl MjI3N2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBAIC0yMDQwLDYg KzIwNDAsMTYgQEAgc3RydWN0IGNvbmZpZ19pbnQgQ29uZmlndXJlTmFtZXNJbnRbXSA9CiAJ CTEwMCwgMSwgTUFYX1NUQVRJU1RJQ1NfVEFSR0VULAogCQlOVUxMLCBOVUxMLCBOVUxMCiAJ fSwKKwl7CisJCXsib3JfdHJhbnNmb3JtX2xpbWl0IiwgUEdDX1VTRVJTRVQsIFFVRVJZX1RV TklOR19PVEhFUiwKKwkJCWdldHRleHRfbm9vcCgiVHJhbnNmb3JtIGEgc2VxdWVuY2Ugb2Yg T1IgY2xhdXNlcyB0byBhbiBJTiBleHByZXNzaW9uLiIpLAorCQkJZ2V0dGV4dF9ub29wKCJU aGUgcGxhbm5lciB3aWxsIHJlcGxhY2UgY2xhdXNlcyBsaWtlICd4PWMxIE9SIHg9YzIgLi4i CisJCQkJCQkgInRvIHRoZSBjbGF1c2UgJ3ggSU4gKGMxLGMyLC4uLiknIikKKwkJfSwKKwkJ Jm9yX3RyYW5zZm9ybV9saW1pdCwKKwkJNTAwLCAwLCBJTlRfTUFYLAorCQlOVUxMLCBOVUxM LCBOVUxMCisJfSwKIAl7CiAJCXsiZnJvbV9jb2xsYXBzZV9saW1pdCIsIFBHQ19VU0VSU0VU LCBRVUVSWV9UVU5JTkdfT1RIRVIsCiAJCQlnZXR0ZXh0X25vb3AoIlNldHMgdGhlIEZST00t bGlzdCBzaXplIGJleW9uZCB3aGljaCBzdWJxdWVyaWVzICIKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3BhcnNlci9wYXJzZV9leHByLmggYi9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2Vf ZXhwci5oCmluZGV4IDdkMzhjYTc1ZjdiLi44OTFlNmE0NjJiOSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvcGFyc2VyL3BhcnNlX2V4cHIuaAorKysgYi9zcmMvaW5jbHVkZS9wYXJzZXIv cGFyc2VfZXhwci5oCkBAIC0xNyw2ICsxNyw3IEBACiAKIC8qIEdVQyBwYXJhbWV0ZXJzICov CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBUcmFuc2Zvcm1fbnVsbF9lcXVhbHM7CitleHRl cm4gUEdETExJTVBPUlQgaW50IG9yX3RyYW5zZm9ybV9saW1pdDsKIAogZXh0ZXJuIE5vZGUg KnRyYW5zZm9ybUV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpleHByLCBQYXJzZUV4 cHJLaW5kIGV4cHJLaW5kKTsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9jcmVhdGVfaW5kZXgub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVh dGVfaW5kZXgub3V0CmluZGV4IGFjZmQ5ZDFmNGY3Li5jYzIyOWQ0ZGNhZiAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dApAQCAtMTg4Myw2ICsx ODgzLDEyMSBAQCBTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQogICAgIDEwCiAoMSByb3cp CiAKK1NFVCBvcl90cmFuc2Zvcm1fbGltaXQgPSAwOworRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUICogRlJPTSB0ZW5rMQorICBXSEVSRSB0aG91c2FuZCA9IDQyIEFORCAodGVudGhv dXMgPSAxIE9SIHRlbnRob3VzID0gMyBPUiB0ZW50aG91cyA9IDQyKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1 c2luZyB0ZW5rMV90aG91c190ZW50aG91cyBvbiB0ZW5rMQorICAgSW5kZXggQ29uZDogKCh0 aG91c2FuZCA9IDQyKSBBTkQgKHRlbnRob3VzID0gQU5ZICgnezEsMyw0Mn0nOjppbnRlZ2Vy W10pKSkKKygyIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdGVuazEKKyAgV0hFUkUgdGhvdXNh bmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9IDMgT1IgdGVudGhvdXMg PSA0Mik7CisgdW5pcXVlMSB8IHVuaXF1ZTIgfCB0d28gfCBmb3VyIHwgdGVuIHwgdHdlbnR5 IHwgaHVuZHJlZCB8IHRob3VzYW5kIHwgdHdvdGhvdXNhbmQgfCBmaXZldGhvdXMgfCB0ZW50 aG91cyB8IG9kZCB8IGV2ZW4gfCBzdHJpbmd1MSB8IHN0cmluZ3UyIHwgc3RyaW5nNCAKKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tKy0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LSstLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLQorICAgICAgNDIgfCAg ICA1NTMwIHwgICAwIHwgICAgMiB8ICAgMiB8ICAgICAgMiB8ICAgICAgNDIgfCAgICAgICA0 MiB8ICAgICAgICAgIDQyIHwgICAgICAgIDQyIHwgICAgICAgNDIgfCAgODQgfCAgIDg1IHwg UUJBQUFBICAgfCBTRUlBQUEgICB8IE9PT094eAorKDEgcm93KQorCitFWFBMQUlOIChDT1NU UyBPRkYpCitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0g NDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gOTkpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBB Z2dyZWdhdGUKKyAgIC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9uIHRlbmsxCisgICAgICAgICBS ZWNoZWNrIENvbmQ6ICgoaHVuZHJlZCA9IDQyKSBBTkQgKHRob3VzYW5kID0gQU5ZICgnezQy LDk5fSc6OmludGVnZXJbXSkpKQorICAgICAgICAgLT4gIEJpdG1hcEFuZAorICAgICAgICAg ICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX2h1bmRyZWQKKyAgICAgICAg ICAgICAgICAgICAgIEluZGV4IENvbmQ6IChodW5kcmVkID0gNDIpCisgICAgICAgICAgICAg ICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdGhvdXNfdGVudGhvdXMKKyAgICAg ICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh0aG91c2FuZCA9IEFOWSAoJ3s0Miw5OX0n OjppbnRlZ2VyW10pKQorKDggcm93cykKKworU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEK KyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9 IDk5KTsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAxMAorKDEgcm93KQorCitFWFBMQUlOIChD T1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSB0aG91c2Fu ZCA9IDQyIEFORCAodGVudGhvdXMgPSAxIE9SIHRlbnRob3VzID0gMykgT1IgdGhvdXNhbmQg PSA0MTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEFnZ3JlZ2F0ZQorICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVuazEKKyAgICAg ICAgIFJlY2hlY2sgQ29uZDogKCgodGhvdXNhbmQgPSA0MikgQU5EICh0ZW50aG91cyA9IEFO WSAoJ3sxLDN9Jzo6aW50ZWdlcltdKSkpIE9SICh0aG91c2FuZCA9IDQxKSkKKyAgICAgICAg IC0+ICBCaXRtYXBPcgorICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9u IHRlbmsxX3Rob3VzX3RlbnRob3VzCisgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25k OiAoKHRob3VzYW5kID0gNDIpIEFORCAodGVudGhvdXMgPSBBTlkgKCd7MSwzfSc6OmludGVn ZXJbXSkpKQorICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsx X3Rob3VzX3RlbnRob3VzCisgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGhv dXNhbmQgPSA0MSkKKyg4IHJvd3MpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisg IFdIRVJFIHRob3VzYW5kID0gNDIgQU5EICh0ZW50aG91cyA9IDEgT1IgdGVudGhvdXMgPSAz KSBPUiB0aG91c2FuZCA9IDQxOworIGNvdW50IAorLS0tLS0tLQorICAgIDEwCisoMSByb3cp CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisg IFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5 OSBPUiB0ZW50aG91cyA8IDIpIE9SIHRob3VzYW5kID0gNDE7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBCaXRtYXAgSGVhcCBT Y2FuIG9uIHRlbmsxCisgICAgICAgICBSZWNoZWNrIENvbmQ6ICgoKGh1bmRyZWQgPSA0Mikg QU5EICgodGVudGhvdXMgPCAyKSBPUiAodGhvdXNhbmQgPSBBTlkgKCd7NDIsOTl9Jzo6aW50 ZWdlcltdKSkpKSBPUiAodGhvdXNhbmQgPSA0MSkpCisgICAgICAgICAtPiAgQml0bWFwT3IK KyAgICAgICAgICAgICAgIC0+ICBCaXRtYXBBbmQKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV9odW5kcmVkCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBJbmRleCBDb25kOiAoaHVuZHJlZCA9IDQyKQorICAgICAgICAgICAgICAg ICAgICAgLT4gIEJpdG1hcE9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgQml0 bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdGhvdXNfdGVudGhvdXMKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh0ZW50aG91cyA8IDIpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdGhv dXNfdGVudGhvdXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENv bmQ6ICh0aG91c2FuZCA9IEFOWSAoJ3s0Miw5OX0nOjppbnRlZ2VyW10pKQorICAgICAgICAg ICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCisg ICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGhvdXNhbmQgPSA0MSkKKygxNCBy b3dzKQorCitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0g NDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gOTkgT1IgdGVudGhvdXMgPCAy KSBPUiB0aG91c2FuZCA9IDQxOworIGNvdW50IAorLS0tLS0tLQorICAgIDIwCisoMSByb3cp CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisg IFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA0 MSBPUiB0aG91c2FuZCA9IDk5IEFORCB0ZW50aG91cyA9IDIpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBCaXRtYXAgSGVh cCBTY2FuIG9uIHRlbmsxCisgICAgICAgICBSZWNoZWNrIENvbmQ6ICgoaHVuZHJlZCA9IDQy KSBBTkQgKCgodGhvdXNhbmQgPSA5OSkgQU5EICh0ZW50aG91cyA9IDIpKSBPUiAodGhvdXNh bmQgPSBBTlkgKCd7NDIsNDF9Jzo6aW50ZWdlcltdKSkpKQorICAgICAgICAgLT4gIEJpdG1h cEFuZAorICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX2h1 bmRyZWQKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChodW5kcmVkID0gNDIp CisgICAgICAgICAgICAgICAtPiAgQml0bWFwT3IKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cworICAgICAgICAg ICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKCh0aG91c2FuZCA9IDk5KSBBTkQgKHRl bnRob3VzID0gMikpCisgICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNj YW4gb24gdGVuazFfdGhvdXNfdGVudGhvdXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IEluZGV4IENvbmQ6ICh0aG91c2FuZCA9IEFOWSAoJ3s0Miw0MX0nOjppbnRlZ2VyW10pKQor KDExIHJvd3MpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRy ZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA0MSBPUiB0aG91c2Fu ZCA9IDk5IEFORCB0ZW50aG91cyA9IDIpOworIGNvdW50IAorLS0tLS0tLQorICAgIDEwCiso MSByb3cpCisKK1JFU0VUIG9yX3RyYW5zZm9ybV9saW1pdDsKIC0tCiAtLSBDaGVjayBiZWhh dmlvciB3aXRoIGR1cGxpY2F0ZSBpbmRleCBjb2x1bW4gY29udGVudHMKIC0tCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2d1Yy5vdXQgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2d1Yy5vdXQKaW5kZXggMTI3Yzk1MzI5NzYuLmMwNTJiMTEzZWVhIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2d1Yy5vdXQKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ndWMub3V0CkBAIC04NjEsNyArODYxLDggQEAgU0VM RUNUIG5hbWUgRlJPTSB0YWJfc2V0dGluZ3NfZmxhZ3MKICAgICAgICAgICAgbmFtZSAgICAg ICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgZGVmYXVsdF9zdGF0aXN0 aWNzX3RhcmdldAotKDEgcm93KQorIG9yX3RyYW5zZm9ybV9saW1pdAorKDIgcm93cykKIAog LS0gUnVudGltZS1jb21wdXRlZCBHVUNzIHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBwcmVzZXQg Y2F0ZWdvcnkuCiBTRUxFQ1QgbmFtZSBGUk9NIHRhYl9zZXR0aW5nc19mbGFncwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQKaW5kZXggOWI4NjM4ZjI4NmEuLjIzMTRkOTJhNmQ0 IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0CisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQKQEAgLTQyMDcsNiArNDIwNyw1 NiBAQCBzZWxlY3QgKiBmcm9tIHRlbmsxIGEgam9pbiB0ZW5rMSBiIG9uCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMiA9IDcpCiAoMTkgcm93cykK IAorU0VUIG9yX3RyYW5zZm9ybV9saW1pdCA9IDA7CitleHBsYWluIChjb3N0cyBvZmYpCitz ZWxlY3QgKiBmcm9tIHRlbmsxIGEgam9pbiB0ZW5rMSBiIG9uCisgIChhLnVuaXF1ZTEgPSAx IGFuZCBiLnVuaXF1ZTEgPSAyKSBvcgorICAoKGEudW5pcXVlMiA9IDMgb3IgYS51bmlxdWUy ID0gNykgYW5kIGIuaHVuZHJlZCA9IDQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICgoKGEudW5pcXVlMSA9IDEpIEFORCAo Yi51bmlxdWUxID0gMikpIE9SICgoYS51bmlxdWUyID0gQU5ZICgnezMsN30nOjppbnRlZ2Vy W10pKSBBTkQgKGIuaHVuZHJlZCA9IDQpKSkKKyAgIC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9u IHRlbmsxIGIKKyAgICAgICAgIFJlY2hlY2sgQ29uZDogKCh1bmlxdWUxID0gMikgT1IgKGh1 bmRyZWQgPSA0KSkKKyAgICAgICAgIC0+ICBCaXRtYXBPcgorICAgICAgICAgICAgICAgLT4g IEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3VuaXF1ZTEKKyAgICAgICAgICAgICAgICAg ICAgIEluZGV4IENvbmQ6ICh1bmlxdWUxID0gMikKKyAgICAgICAgICAgICAgIC0+ICBCaXRt YXAgSW5kZXggU2NhbiBvbiB0ZW5rMV9odW5kcmVkCisgICAgICAgICAgICAgICAgICAgICBJ bmRleCBDb25kOiAoaHVuZHJlZCA9IDQpCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAg IC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9uIHRlbmsxIGEKKyAgICAgICAgICAgICAgIFJlY2hl Y2sgQ29uZDogKCh1bmlxdWUxID0gMSkgT1IgKHVuaXF1ZTIgPSBBTlkgKCd7Myw3fSc6Omlu dGVnZXJbXSkpKQorICAgICAgICAgICAgICAgLT4gIEJpdG1hcE9yCisgICAgICAgICAgICAg ICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdW5pcXVlMQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTEgPSAxKQorICAgICAg ICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3VuaXF1ZTIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUyID0gQU5Z ICgnezMsN30nOjppbnRlZ2VyW10pKQorKDE3IHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9m ZikKK3NlbGVjdCAqIGZyb20gdGVuazEgYSBqb2luIHRlbmsxIGIgb24KKyAgKGEudW5pcXVl MSA8IDIwIG9yIGEudW5pcXVlMSA9IDMgb3IgYS51bmlxdWUxID0gMSBhbmQgYi51bmlxdWUx ID0gMikgb3IKKyAgKChhLnVuaXF1ZTIgPSAzIG9yIGEudW5pcXVlMiA9IDcpIGFuZCBiLmh1 bmRyZWQgPSA0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoKGEudW5pcXVlMSA8 IDIwKSBPUiAoKGEudW5pcXVlMSA9IDEpIEFORCAoYi51bmlxdWUxID0gMikpIE9SICgoYS51 bmlxdWUyID0gQU5ZICgnezMsN30nOjppbnRlZ2VyW10pKSBBTkQgKGIuaHVuZHJlZCA9IDQp KSBPUiAoYS51bmlxdWUxID0gMykpCisgICAtPiAgU2VxIFNjYW4gb24gdGVuazEgYgorICAg LT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0ZW5r MSBhCisgICAgICAgICAgICAgICBSZWNoZWNrIENvbmQ6ICgodW5pcXVlMSA8IDIwKSBPUiAo dW5pcXVlMSA9IDEpIE9SICh1bmlxdWUyID0gQU5ZICgnezMsN30nOjppbnRlZ2VyW10pKSBP UiAodW5pcXVlMSA9IDMpKQorICAgICAgICAgICAgICAgLT4gIEJpdG1hcE9yCisgICAgICAg ICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdW5pcXVlMQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTEgPCAyMCkK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV91 bmlxdWUxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVl MSA9IDEpCisgICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24g dGVuazFfdW5pcXVlMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDog KHVuaXF1ZTIgPSBBTlkgKCd7Myw3fSc6OmludGVnZXJbXSkpCisgICAgICAgICAgICAgICAg ICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdW5pcXVlMQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTEgPSAzKQorKDE1IHJvd3Mp CisKK1JFU0VUIG9yX3RyYW5zZm9ybV9saW1pdDsKIC0tCiAtLSB0ZXN0IHBsYWNlbWVudCBv ZiBtb3ZhYmxlIHF1YWxzIGluIGEgcGFyYW1ldGVyaXplZCBqb2luIHRyZWUKIC0tCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9wcnVuZS5vdXQg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9wcnVuZS5vdXQKaW5kZXgg MWViMzQ3NTAzYWEuLmQxYzVjZThiZTA5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3BhcnRpdGlvbl9wcnVuZS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9wYXJ0aXRpb25fcHJ1bmUub3V0CkBAIC0xMDEsNiArMTAxLDI4IEBAIGV4cGxh aW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBscCB3aGVyZSBhIGlzIG5vdCBudWxsIGFu ZCAoYSA9ICdhJyBvciBhID0gJ2MnCiAgICAgICAgICBGaWx0ZXI6ICgoYSBJUyBOT1QgTlVM TCkgQU5EICgoYSA9ICdhJzo6YnBjaGFyKSBPUiAoYSA9ICdjJzo6YnBjaGFyKSkpCiAoNSBy b3dzKQogCitTRVQgb3JfdHJhbnNmb3JtX2xpbWl0ID0gMDsKK2V4cGxhaW4gKGNvc3RzIG9m Zikgc2VsZWN0ICogZnJvbSBscCB3aGVyZSBhID0gJ2EnIG9yIGEgPSAnYyc7CisgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBT ZXEgU2NhbiBvbiBscF9hZCBscF8xCisgICAgICAgICBGaWx0ZXI6IChhID0gQU5ZICgne2Es Y30nOjpicGNoYXJbXSkpCisgICAtPiAgU2VxIFNjYW4gb24gbHBfYmMgbHBfMgorICAgICAg ICAgRmlsdGVyOiAoYSA9IEFOWSAoJ3thLGN9Jzo6YnBjaGFyW10pKQorKDUgcm93cykKKwor ZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgaXMgbm90IG51 bGwgYW5kIChhID0gJ2EnIG9yIGEgPSAnYycpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBTZXEgU2NhbiBvbiBscF9hZCBscF8xCisgICAg ICAgICBGaWx0ZXI6ICgoYSBJUyBOT1QgTlVMTCkgQU5EIChhID0gQU5ZICgne2EsY30nOjpi cGNoYXJbXSkpKQorICAgLT4gIFNlcSBTY2FuIG9uIGxwX2JjIGxwXzIKKyAgICAgICAgIEZp bHRlcjogKChhIElTIE5PVCBOVUxMKSBBTkQgKGEgPSBBTlkgKCd7YSxjfSc6OmJwY2hhcltd KSkpCisoNSByb3dzKQorCitSRVNFVCBvcl90cmFuc2Zvcm1fbGltaXQ7CiBleHBsYWluIChj b3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSA8PiAnZyc7CiAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpAQCAtNjcxLDYgKzY5MywxNjMgQEAgZXhwbGFpbiAoY29zdHMgb2ZmKSBz ZWxlY3QgKiBmcm9tIHJscCB3aGVyZSAoYSA9IDEgYW5kIGEgPSAzKSBvciAoYSA+IDEgYW5k IGEgPQogICAgICAgICAgRmlsdGVyOiAoKChhID0gMSkgQU5EIChhID0gMykpIE9SICgoYSA+ IDEpIEFORCAoYSA9IDE1KSkpCiAoMTEgcm93cykKIAorU0VUIG9yX3RyYW5zZm9ybV9saW1p dCA9IDA7CitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEg PSAxIG9yIGEgPSA3OworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEg U2NhbiBvbiBybHAyIHJscAorICAgRmlsdGVyOiAoYSA9IEFOWSAoJ3sxLDd9Jzo6aW50ZWdl cltdKSkKKygyIHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBy bHAgd2hlcmUgYSA9IDEgb3IgYiA9ICdhYic7CisgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQXBwZW5kCisgICAtPiAgU2Vx IFNjYW4gb24gcmxwMSBybHBfMQorICAgICAgICAgRmlsdGVyOiAoKGEgPSAxKSBPUiAoKGIp Ojp0ZXh0ID0gJ2FiJzo6dGV4dCkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwMiBybHBfMgor ICAgICAgICAgRmlsdGVyOiAoKGEgPSAxKSBPUiAoKGIpOjp0ZXh0ID0gJ2FiJzo6dGV4dCkp CisgICAtPiAgU2VxIFNjYW4gb24gcmxwM2FiY2QgcmxwXzMKKyAgICAgICAgIEZpbHRlcjog KChhID0gMSkgT1IgKChiKTo6dGV4dCA9ICdhYic6OnRleHQpKQorICAgLT4gIFNlcSBTY2Fu IG9uIHJscDRfMSBybHBfNAorICAgICAgICAgRmlsdGVyOiAoKGEgPSAxKSBPUiAoKGIpOjp0 ZXh0ID0gJ2FiJzo6dGV4dCkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwNF8yIHJscF81Cisg ICAgICAgICBGaWx0ZXI6ICgoYSA9IDEpIE9SICgoYik6OnRleHQgPSAnYWInOjp0ZXh0KSkK KyAgIC0+ICBTZXEgU2NhbiBvbiBybHA0X2RlZmF1bHQgcmxwXzYKKyAgICAgICAgIEZpbHRl cjogKChhID0gMSkgT1IgKChiKTo6dGV4dCA9ICdhYic6OnRleHQpKQorICAgLT4gIFNlcSBT Y2FuIG9uIHJscDVfMSBybHBfNworICAgICAgICAgRmlsdGVyOiAoKGEgPSAxKSBPUiAoKGIp Ojp0ZXh0ID0gJ2FiJzo6dGV4dCkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwNV9kZWZhdWx0 IHJscF84CisgICAgICAgICBGaWx0ZXI6ICgoYSA9IDEpIE9SICgoYik6OnRleHQgPSAnYWIn Ojp0ZXh0KSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHBfZGVmYXVsdF8xMCBybHBfOQorICAg ICAgICAgRmlsdGVyOiAoKGEgPSAxKSBPUiAoKGIpOjp0ZXh0ID0gJ2FiJzo6dGV4dCkpCisg ICAtPiAgU2VxIFNjYW4gb24gcmxwX2RlZmF1bHRfMzAgcmxwXzEwCisgICAgICAgICBGaWx0 ZXI6ICgoYSA9IDEpIE9SICgoYik6OnRleHQgPSAnYWInOjp0ZXh0KSkKKyAgIC0+ICBTZXEg U2NhbiBvbiBybHBfZGVmYXVsdF9udWxsIHJscF8xMQorICAgICAgICAgRmlsdGVyOiAoKGEg PSAxKSBPUiAoKGIpOjp0ZXh0ID0gJ2FiJzo6dGV4dCkpCisgICAtPiAgU2VxIFNjYW4gb24g cmxwX2RlZmF1bHRfZGVmYXVsdCBybHBfMTIKKyAgICAgICAgIEZpbHRlcjogKChhID0gMSkg T1IgKChiKTo6dGV4dCA9ICdhYic6OnRleHQpKQorKDI1IHJvd3MpCisKK2V4cGxhaW4gKGNv c3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA+IDIwIGFuZCBhIDwgMjc7Cisg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBTZXEgU2Nh biBvbiBybHA0XzEgcmxwXzEKKyAgICAgICAgIEZpbHRlcjogKChhID4gMjApIEFORCAoYSA8 IDI3KSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHA0XzIgcmxwXzIKKyAgICAgICAgIEZpbHRl cjogKChhID4gMjApIEFORCAoYSA8IDI3KSkKKyg1IHJvd3MpCisKK2V4cGxhaW4gKGNvc3Rz IG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA9IDI5OworICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEg U2NhbiBvbiBybHA0X2RlZmF1bHQgcmxwCisgICBGaWx0ZXI6IChhID0gMjkpCisoMiByb3dz KQorCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPj0g Mjk7CisgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAor ICAgLT4gIFNlcSBTY2FuIG9uIHJscDRfZGVmYXVsdCBybHBfMQorICAgICAgICAgRmlsdGVy OiAoYSA+PSAyOSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHA1XzEgcmxwXzIKKyAgICAgICAg IEZpbHRlcjogKGEgPj0gMjkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwNV9kZWZhdWx0IHJs cF8zCisgICAgICAgICBGaWx0ZXI6IChhID49IDI5KQorICAgLT4gIFNlcSBTY2FuIG9uIHJs cF9kZWZhdWx0XzMwIHJscF80CisgICAgICAgICBGaWx0ZXI6IChhID49IDI5KQorICAgLT4g IFNlcSBTY2FuIG9uIHJscF9kZWZhdWx0X2RlZmF1bHQgcmxwXzUKKyAgICAgICAgIEZpbHRl cjogKGEgPj0gMjkpCisoMTEgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3Qg KiBmcm9tIHJscCB3aGVyZSBhIDwgMSBvciAoYSA+IDIwIGFuZCBhIDwgMjUpOworICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBB cHBlbmQKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHAxIHJscF8xCisgICAgICAgICBGaWx0ZXI6 ICgoYSA8IDEpIE9SICgoYSA+IDIwKSBBTkQgKGEgPCAyNSkpKQorICAgLT4gIFNlcSBTY2Fu IG9uIHJscDRfMSBybHBfMgorICAgICAgICAgRmlsdGVyOiAoKGEgPCAxKSBPUiAoKGEgPiAy MCkgQU5EIChhIDwgMjUpKSkKKyg1IHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2Vs ZWN0ICogZnJvbSBybHAgd2hlcmUgYSA9IDIwIG9yIGEgPSA0MDsKKyAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4gIFNl cSBTY2FuIG9uIHJscDRfMSBybHBfMQorICAgICAgICAgRmlsdGVyOiAoYSA9IEFOWSAoJ3sy MCw0MH0nOjppbnRlZ2VyW10pKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDVfZGVmYXVsdCBy bHBfMgorICAgICAgICAgRmlsdGVyOiAoYSA9IEFOWSAoJ3syMCw0MH0nOjppbnRlZ2VyW10p KQorKDUgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscDMg d2hlcmUgYSA9IDIwOyAgIC8qIGVtcHR5ICovCisgICAgICAgIFFVRVJZIFBMQU4gICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyAgIE9uZS1UaW1lIEZp bHRlcjogZmFsc2UKKygyIHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICog ZnJvbSBybHAgd2hlcmUgYSA+IDEgYW5kIGEgPSAxMDsJLyogb25seSBkZWZhdWx0ICovCisg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcmxwX2RlZmF1bHRfMTAgcmxwCisgICBG aWx0ZXI6ICgoYSA+IDEpIEFORCAoYSA9IDEwKSkKKygyIHJvd3MpCisKK2V4cGxhaW4gKGNv c3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA+IDEgYW5kIGEgPj0xNTsJLyog cmxwMyBvbndhcmRzLCBpbmNsdWRpbmcgZGVmYXVsdCAqLworICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4gIFNlcSBTY2FuIG9uIHJs cDNhYmNkIHJscF8xCisgICAgICAgICBGaWx0ZXI6ICgoYSA+IDEpIEFORCAoYSA+PSAxNSkp CisgICAtPiAgU2VxIFNjYW4gb24gcmxwM2VmZ2ggcmxwXzIKKyAgICAgICAgIEZpbHRlcjog KChhID4gMSkgQU5EIChhID49IDE1KSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHAzbnVsbHh5 IHJscF8zCisgICAgICAgICBGaWx0ZXI6ICgoYSA+IDEpIEFORCAoYSA+PSAxNSkpCisgICAt PiAgU2VxIFNjYW4gb24gcmxwM19kZWZhdWx0IHJscF80CisgICAgICAgICBGaWx0ZXI6ICgo YSA+IDEpIEFORCAoYSA+PSAxNSkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwNF8xIHJscF81 CisgICAgICAgICBGaWx0ZXI6ICgoYSA+IDEpIEFORCAoYSA+PSAxNSkpCisgICAtPiAgU2Vx IFNjYW4gb24gcmxwNF8yIHJscF82CisgICAgICAgICBGaWx0ZXI6ICgoYSA+IDEpIEFORCAo YSA+PSAxNSkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwNF9kZWZhdWx0IHJscF83CisgICAg ICAgICBGaWx0ZXI6ICgoYSA+IDEpIEFORCAoYSA+PSAxNSkpCisgICAtPiAgU2VxIFNjYW4g b24gcmxwNV8xIHJscF84CisgICAgICAgICBGaWx0ZXI6ICgoYSA+IDEpIEFORCAoYSA+PSAx NSkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwNV9kZWZhdWx0IHJscF85CisgICAgICAgICBG aWx0ZXI6ICgoYSA+IDEpIEFORCAoYSA+PSAxNSkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxw X2RlZmF1bHRfMzAgcmxwXzEwCisgICAgICAgICBGaWx0ZXI6ICgoYSA+IDEpIEFORCAoYSA+ PSAxNSkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwX2RlZmF1bHRfZGVmYXVsdCBybHBfMTEK KyAgICAgICAgIEZpbHRlcjogKChhID4gMSkgQU5EIChhID49IDE1KSkKKygyMyByb3dzKQor CitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPSAxIGFu ZCBhID0gMzsJLyogZW1wdHkgKi8KKyAgICAgICAgUVVFUlkgUExBTiAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorICAgT25lLVRpbWUgRmlsdGVyOiBm YWxzZQorKDIgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJs cCB3aGVyZSAoYSA9IDEgYW5kIGEgPSAzKSBvciAoYSA+IDEgYW5kIGEgPSAxNSk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQXBwZW5kCisgICAtPiAgU2VxIFNjYW4gb24g cmxwMiBybHBfMQorICAgICAgICAgRmlsdGVyOiAoKChhID0gMSkgQU5EIChhID0gMykpIE9S ICgoYSA+IDEpIEFORCAoYSA9IDE1KSkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwM2FiY2Qg cmxwXzIKKyAgICAgICAgIEZpbHRlcjogKCgoYSA9IDEpIEFORCAoYSA9IDMpKSBPUiAoKGEg PiAxKSBBTkQgKGEgPSAxNSkpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDNlZmdoIHJscF8z CisgICAgICAgICBGaWx0ZXI6ICgoKGEgPSAxKSBBTkQgKGEgPSAzKSkgT1IgKChhID4gMSkg QU5EIChhID0gMTUpKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHAzbnVsbHh5IHJscF80Cisg ICAgICAgICBGaWx0ZXI6ICgoKGEgPSAxKSBBTkQgKGEgPSAzKSkgT1IgKChhID4gMSkgQU5E IChhID0gMTUpKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHAzX2RlZmF1bHQgcmxwXzUKKyAg ICAgICAgIEZpbHRlcjogKCgoYSA9IDEpIEFORCAoYSA9IDMpKSBPUiAoKGEgPiAxKSBBTkQg KGEgPSAxNSkpKQorKDExIHJvd3MpCisKK1JFU0VUIG9yX3RyYW5zZm9ybV9saW1pdDsKIC0t IG11bHRpLWNvbHVtbiBrZXlzCiBjcmVhdGUgdGFibGUgbWMzcCAoYSBpbnQsIGIgaW50LCBj IGludCkgcGFydGl0aW9uIGJ5IHJhbmdlIChhLCBhYnMoYiksIGMpOwogY3JlYXRlIHRhYmxl IG1jM3BfZGVmYXVsdCBwYXJ0aXRpb24gb2YgbWMzcCBkZWZhdWx0OwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC90aWRzY2FuLm91dCBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvdGlkc2Nhbi5vdXQKaW5kZXggZjEzM2I1YTRhYzcuLmEyOTQ5ZDNkNjk5 IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RpZHNjYW4ub3V0Cisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdGlkc2Nhbi5vdXQKQEAgLTU2LDYgKzU2 LDIzIEBAIFNFTEVDVCBjdGlkLCAqIEZST00gdGlkc2NhbiBXSEVSRSBjdGlkID0gJygwLDIp JyBPUiAnKDAsMSknID0gY3RpZDsKICAoMCwyKSB8ICAyCiAoMiByb3dzKQogCitTRVQgb3Jf dHJhbnNmb3JtX2xpbWl0ID0gMDsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjdGlk LCAqIEZST00gdGlkc2NhbiBXSEVSRSBjdGlkID0gJygwLDIpJyBPUiAnKDAsMSknID0gY3Rp ZDsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBUaWQgU2NhbiBvbiB0aWRzY2FuCisgICBUSUQgQ29uZDogKGN0aWQgPSBB TlkgKCd7IigwLDIpIiwiKDAsMSkifSc6OnRpZFtdKSkKKygyIHJvd3MpCisKK1NFTEVDVCBj dGlkLCAqIEZST00gdGlkc2NhbiBXSEVSRSBjdGlkID0gJygwLDIpJyBPUiAnKDAsMSknID0g Y3RpZDsKKyBjdGlkICB8IGlkIAorLS0tLS0tLSstLS0tCisgKDAsMSkgfCAgMQorICgwLDIp IHwgIDIKKygyIHJvd3MpCisKK1JFU0VUIG9yX3RyYW5zZm9ybV9saW1pdDsKIC0tIGN0aWQg PSBTY2FsYXJBcnJheU9wIC0gaW1wbGVtZW50ZWQgYXMgdGlkc2NhbgogRVhQTEFJTiAoQ09T VFMgT0ZGKQogU0VMRUNUIGN0aWQsICogRlJPTSB0aWRzY2FuIFdIRVJFIGN0aWQgPSBBTlko QVJSQVlbJygwLDEpJywgJygwLDIpJ106OnRpZFtdKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9j cmVhdGVfaW5kZXguc3FsCmluZGV4IGQ0OWNlOWYzMDA3Li45YzZiYWFjZTBlMiAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsCkBAIC03MzcsNiArNzM3LDM4IEBA IFNFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCiBTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5r MQogICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5k ID0gOTkpOwogCitTRVQgb3JfdHJhbnNmb3JtX2xpbWl0ID0gMDsKK0VYUExBSU4gKENPU1RT IE9GRikKK1NFTEVDVCAqIEZST00gdGVuazEKKyAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQg KHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9IDMgT1IgdGVudGhvdXMgPSA0Mik7CitTRUxF Q1QgKiBGUk9NIHRlbmsxCisgIFdIRVJFIHRob3VzYW5kID0gNDIgQU5EICh0ZW50aG91cyA9 IDEgT1IgdGVudGhvdXMgPSAzIE9SIHRlbnRob3VzID0gNDIpOworCitFWFBMQUlOIChDT1NU UyBPRkYpCitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0g NDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gOTkpOworU0VMRUNUIGNvdW50 KCopIEZST00gdGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0 MiBPUiB0aG91c2FuZCA9IDk5KTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNv dW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRob3Vz ID0gMSBPUiB0ZW50aG91cyA9IDMpIE9SIHRob3VzYW5kID0gNDE7CitTRUxFQ1QgY291bnQo KikgRlJPTSB0ZW5rMQorICBXSEVSRSB0aG91c2FuZCA9IDQyIEFORCAodGVudGhvdXMgPSAx IE9SIHRlbnRob3VzID0gMykgT1IgdGhvdXNhbmQgPSA0MTsKKworRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9IDQy IEFORCAodGhvdXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9IDk5IE9SIHRlbnRob3VzIDwgMikg T1IgdGhvdXNhbmQgPSA0MTsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJF IGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5OSBPUiB0 ZW50aG91cyA8IDIpIE9SIHRob3VzYW5kID0gNDE7CisKK0VYUExBSU4gKENPU1RTIE9GRikK K1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQg KHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA0MSBPUiB0aG91c2FuZCA9IDk5IEFORCB0 ZW50aG91cyA9IDIpOworU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgaHVu ZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9IDQxIE9SIHRob3Vz YW5kID0gOTkgQU5EIHRlbnRob3VzID0gMik7CitSRVNFVCBvcl90cmFuc2Zvcm1fbGltaXQ7 CisKIC0tCiAtLSBDaGVjayBiZWhhdmlvciB3aXRoIGR1cGxpY2F0ZSBpbmRleCBjb2x1bW4g Y29udGVudHMKIC0tCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNx bCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsCmluZGV4IDNlNTAzMmIwNGRkLi5k NGQ3ZDg1M2E0YSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbi5zcWwK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbi5zcWwKQEAgLTEzOTYsNiArMTM5Niwx NiBAQCBleHBsYWluIChjb3N0cyBvZmYpCiBzZWxlY3QgKiBmcm9tIHRlbmsxIGEgam9pbiB0 ZW5rMSBiIG9uCiAgIChhLnVuaXF1ZTEgPSAxIGFuZCBiLnVuaXF1ZTEgPSAyKSBvcgogICAo KGEudW5pcXVlMiA9IDMgb3IgYS51bmlxdWUyID0gNykgYW5kIGIuaHVuZHJlZCA9IDQpOwor U0VUIG9yX3RyYW5zZm9ybV9saW1pdCA9IDA7CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxl Y3QgKiBmcm9tIHRlbmsxIGEgam9pbiB0ZW5rMSBiIG9uCisgIChhLnVuaXF1ZTEgPSAxIGFu ZCBiLnVuaXF1ZTEgPSAyKSBvcgorICAoKGEudW5pcXVlMiA9IDMgb3IgYS51bmlxdWUyID0g NykgYW5kIGIuaHVuZHJlZCA9IDQpOworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICog ZnJvbSB0ZW5rMSBhIGpvaW4gdGVuazEgYiBvbgorICAoYS51bmlxdWUxIDwgMjAgb3IgYS51 bmlxdWUxID0gMyBvciBhLnVuaXF1ZTEgPSAxIGFuZCBiLnVuaXF1ZTEgPSAyKSBvcgorICAo KGEudW5pcXVlMiA9IDMgb3IgYS51bmlxdWUyID0gNykgYW5kIGIuaHVuZHJlZCA9IDQpOwor UkVTRVQgb3JfdHJhbnNmb3JtX2xpbWl0OwogCiAtLQogLS0gdGVzdCBwbGFjZW1lbnQgb2Yg bW92YWJsZSBxdWFscyBpbiBhIHBhcmFtZXRlcml6ZWQgam9pbiB0cmVlCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fcHJ1bmUuc3FsIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvcGFydGl0aW9uX3BydW5lLnNxbAppbmRleCBkMWM2MGI4ZmU5ZC4uNzdm M2U2YzNiOWIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9w cnVuZS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX3BydW5lLnNx bApAQCAtMjEsNiArMjEsMTIgQEAgZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9t IGxwIHdoZXJlIGEgaXMgbm90IG51bGw7CiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAq IGZyb20gbHAgd2hlcmUgYSBpcyBudWxsOwogZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3Qg KiBmcm9tIGxwIHdoZXJlIGEgPSAnYScgb3IgYSA9ICdjJzsKIGV4cGxhaW4gKGNvc3RzIG9m Zikgc2VsZWN0ICogZnJvbSBscCB3aGVyZSBhIGlzIG5vdCBudWxsIGFuZCAoYSA9ICdhJyBv ciBhID0gJ2MnKTsKKworU0VUIG9yX3RyYW5zZm9ybV9saW1pdCA9IDA7CitleHBsYWluIChj b3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSA9ICdhJyBvciBhID0gJ2MnOwor ZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgaXMgbm90IG51 bGwgYW5kIChhID0gJ2EnIG9yIGEgPSAnYycpOworUkVTRVQgb3JfdHJhbnNmb3JtX2xpbWl0 OworCiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSA8PiAn Zyc7CiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSA8PiAn YScgYW5kIGEgPD4gJ2QnOwogZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxw IHdoZXJlIGEgbm90IGluICgnYScsICdkJyk7CkBAIC05OSw2ICsxMDUsMjIgQEAgZXhwbGFp biAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhID4gMSBhbmQgYSA+PTE1 OwkvKiBybHAzIG9ud2FyZHMsIGkKIGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJv bSBybHAgd2hlcmUgYSA9IDEgYW5kIGEgPSAzOwkvKiBlbXB0eSAqLwogZXhwbGFpbiAoY29z dHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSAoYSA9IDEgYW5kIGEgPSAzKSBvciAo YSA+IDEgYW5kIGEgPSAxNSk7CiAKKworU0VUIG9yX3RyYW5zZm9ybV9saW1pdCA9IDA7Citl eHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPSAxIG9yIGEg PSA3OworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhID0g MSBvciBiID0gJ2FiJzsKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAg d2hlcmUgYSA+IDIwIGFuZCBhIDwgMjc7CitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAq IGZyb20gcmxwIHdoZXJlIGEgPSAyOTsKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICog ZnJvbSBybHAgd2hlcmUgYSA+PSAyOTsKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICog ZnJvbSBybHAgd2hlcmUgYSA8IDEgb3IgKGEgPiAyMCBhbmQgYSA8IDI1KTsKK2V4cGxhaW4g KGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA9IDIwIG9yIGEgPSA0MDsK K2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAzIHdoZXJlIGEgPSAyMDsg ICAvKiBlbXB0eSAqLworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3 aGVyZSBhID4gMSBhbmQgYSA9IDEwOwkvKiBvbmx5IGRlZmF1bHQgKi8KK2V4cGxhaW4gKGNv c3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA+IDEgYW5kIGEgPj0xNTsJLyog cmxwMyBvbndhcmRzLCBpbmNsdWRpbmcgZGVmYXVsdCAqLworZXhwbGFpbiAoY29zdHMgb2Zm KSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhID0gMSBhbmQgYSA9IDM7CS8qIGVtcHR5ICov CitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIChhID0gMSBh bmQgYSA9IDMpIG9yIChhID4gMSBhbmQgYSA9IDE1KTsKK1JFU0VUIG9yX3RyYW5zZm9ybV9s aW1pdDsKKwogLS0gbXVsdGktY29sdW1uIGtleXMKIGNyZWF0ZSB0YWJsZSBtYzNwIChhIGlu dCwgYiBpbnQsIGMgaW50KSBwYXJ0aXRpb24gYnkgcmFuZ2UgKGEsIGFicyhiKSwgYyk7CiBj cmVhdGUgdGFibGUgbWMzcF9kZWZhdWx0IHBhcnRpdGlvbiBvZiBtYzNwIGRlZmF1bHQ7CmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC90aWRzY2FuLnNxbCBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3RpZHNjYW4uc3FsCmluZGV4IDMxM2UwZmI5YjY3Li42MzRiZjA4ZTVm YyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdGlkc2Nhbi5zcWwKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvdGlkc2Nhbi5zcWwKQEAgLTIyLDYgKzIyLDEyIEBAIEVY UExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCBjdGlkLCAqIEZST00gdGlkc2NhbiBXSEVSRSBj dGlkID0gJygwLDIpJyBPUiAnKDAsMSknID0gY3RpZDsKIFNFTEVDVCBjdGlkLCAqIEZST00g dGlkc2NhbiBXSEVSRSBjdGlkID0gJygwLDIpJyBPUiAnKDAsMSknID0gY3RpZDsKIAorU0VU IG9yX3RyYW5zZm9ybV9saW1pdCA9IDA7CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1Qg Y3RpZCwgKiBGUk9NIHRpZHNjYW4gV0hFUkUgY3RpZCA9ICcoMCwyKScgT1IgJygwLDEpJyA9 IGN0aWQ7CitTRUxFQ1QgY3RpZCwgKiBGUk9NIHRpZHNjYW4gV0hFUkUgY3RpZCA9ICcoMCwy KScgT1IgJygwLDEpJyA9IGN0aWQ7CitSRVNFVCBvcl90cmFuc2Zvcm1fbGltaXQ7CisKIC0t IGN0aWQgPSBTY2FsYXJBcnJheU9wIC0gaW1wbGVtZW50ZWQgYXMgdGlkc2NhbgogRVhQTEFJ TiAoQ09TVFMgT0ZGKQogU0VMRUNUIGN0aWQsICogRlJPTSB0aWRzY2FuIFdIRVJFIGN0aWQg PSBBTlkoQVJSQVlbJygwLDEpJywgJygwLDIpJ106OnRpZFtdKTsKZGlmZiAtLWdpdCBhL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKaW5kZXggZTk0MWZiNmM4MmYuLmMzYWJiNzI1YzhjIDEwMDY0NAotLS0g YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTYzMSw2ICsxNjMxLDcgQEAgTnVtZXJpY1Zhcgog T01fdWludDMyCiBPUAogT1NBUGVyR3JvdXBTdGF0ZQorT3JDbGF1c2VHcm91cEVudHJ5CiBP U0FQZXJRdWVyeVN0YXRlCiBPU0luZm8KIE9TU0xDaXBoZXIKLS0gCjYuMC4xCgo= --------------lj50Z2vNsWwWnWX7WabrEJ8n--