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 1qvbgi-006Crp-62 for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Oct 2023 11:04:37 +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 1qvbgf-002NCe-Qn for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Oct 2023 11:04:33 +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 1qvbgf-002NCV-0F for pgsql-hackers@lists.postgresql.org; Wed, 25 Oct 2023 11:04:33 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qvbgY-002EKA-VG for pgsql-hackers@postgresql.org; Wed, 25 Oct 2023 11:04:31 +0000 Received: from [10.4.15.192] (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 61395E20E62; Wed, 25 Oct 2023 14:04:24 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1698231864; bh=2lVVjjIeEMWYb2mHE7Rklq++VIM3p+wN99RzRKpb74o=; h=Message-ID:Date:User-Agent:Subject:To:Cc:References:From: In-Reply-To:From; b=p3Ra30O+26F1nedswLCni0JWnWlZbhC/j4FE551TYC78RvvtIxSXZ8k0Syvah6iSk WzCQJRS7rQs5ZHccC5uz9WMWQ2eS79v+UQOgig2wWftG6vkVVXr9XXQgvoGwpAKBXC +KhuNiaIlRlRoifF5m/16jYLPylixWAyo3j6ewhlVLRN7oyvxtD1AzE2jVtdAFh55J OtkpRT7QWUWJNT7X/D1uDeKdTaGizgL7LRcxn1s3/QmelGpvItAkBiLbEvzNuyFWqf /7I+17p2IPvDE8mp1U4vglN6XWK7CnztJcQqMth1TvZ7P4Lr89t1Du75poGk6aCNzL 0QodUYizvfAng== Content-Type: multipart/mixed; boundary="------------MfJgEh0LM0GhJabPE0zpuR0T" Message-ID: <3c539d4b-1c3c-4119-a3c9-e335b81c83cf@postgrespro.ru> Date: Wed, 25 Oct 2023 14:04:24 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: POC, WIP: OR-clause support for indexes To: Alexander Korotkov Cc: pgsql-hackers@postgresql.org, "Finnerty, Jim" , Marcos Pegoraro , Andrey Lepikhov , teodor@sigaev.ru, Ranier Vilela , Tomas Vondra , Peter Geoghegan , Peter Eisentraut References: <567ED6CA.2040504@sigaev.ru> <4bac271d-1700-db24-74ac-8414f2baf9fd@postgrespro.ru> <89fb769c-7d45-f0c5-a9b3-b706c9661c57@postgrespro.ru> <668892c1-fb11-3a79-ce5e-1c194b7b3263@postgrespro.ru> Content-Language: en-US From: "a.rybakina" In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------MfJgEh0LM0GhJabPE0zpuR0T Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi! On 15.10.2023 01:34, Alexander Korotkov wrote: > Hi, Alena! > > Thank you for your work on the subject. > > On Wed, Oct 4, 2023 at 10:21 PM a.rybakina wrote: >> I fixed the kernel dump issue and all the regression tests were successful, but I discovered another problem when I added my own regression tests. >> Some queries that contain "or" expressions do not convert to "ANY". I have described this in more detail using diff as expected and real results: >> >> diff -U3 /home/alena/postgrespro__copy6/src/test/regress/expected/create_index.out /home/alena/postgrespro__copy6/src/test/regress/results/create_index.out >> --- /home/alena/postgrespro__copy6/src/test/regress/expected/create_index.out 2023-10-04 21:54:12.496282667 +0300 >> +++ /home/alena/postgrespro__copy6/src/test/regress/results/create_index.out 2023-10-04 21:55:41.665422459 +0300 >> @@ -1925,17 +1925,20 @@ >> EXPLAIN (COSTS OFF) >> SELECT count(*) FROM tenk1 >> WHERE thousand = 42 AND (tenthous = 1 OR tenthous = 3) OR thousand = 41; >> - QUERY PLAN >> --------------------------------------------------------------------------------------------------------- >> + QUERY PLAN >> +--------------------------------------------------------------------------------------------------------------------------- >> Aggregate >> -> Bitmap Heap Scan on tenk1 >> - Recheck Cond: (((thousand = 42) AND (tenthous = ANY ('{1,3}'::integer[]))) OR (thousand = 41)) >> + Recheck Cond: ((((thousand = 42) AND (tenthous = 1)) OR ((thousand = 42) AND (tenthous = 3))) OR (thousand = 41)) >> -> BitmapOr >> - -> Bitmap Index Scan on tenk1_thous_tenthous >> - Index Cond: ((thousand = 42) AND (tenthous = ANY ('{1,3}'::integer[]))) >> + -> BitmapOr >> + -> Bitmap Index Scan on tenk1_thous_tenthous >> + Index Cond: ((thousand = 42) AND (tenthous = 1)) >> + -> Bitmap Index Scan on tenk1_thous_tenthous >> + Index Cond: ((thousand = 42) AND (tenthous = 3)) >> -> Bitmap Index Scan on tenk1_thous_tenthous >> Index Cond: (thousand = 41) >> -(8 rows) >> +(11 rows) > I think this query is not converted, because you only convert > top-level ORs in the transform_ors() function. But in the example > given, the target OR lays under AND, which in turn lays under another > OR. I think you need to make transform_ors() recursive to handle > cases like this. > > I wonder about the default value of the parameter or_transform_limit > of 500. In [1] and [2] you show the execution time degradation from 0 > to ~500 OR clauses. I made a simple SQL script with the query "SELECT > * FROM pgbench_accounts a WHERE aid = 1 OR aid = 2 OR ... OR aid = > 100;". The pgbench results for a single connection in prepared mode > are the following. > master: 936 tps > patched (or_transform_limit == 0) :1414 tps > So, transformation to ANY obviously accelerates the execution. > > I think it's important to identify the cases where this patch causes > the degradation. Generally, I don't see why ANY could be executed > slower than the equivalent OR clause. So, the possible degradation > cases are slower plan generation and worse plans. I managed to find > both. > > As you stated before, currently the OR transformation has a quadratic > complexity depending on the number of or-clause-groups. I made a > simple test to evaluate this. containing 10000 or-clause-groups. > SELECT * FROM pgbench_accounts a WHERE aid + 1 * bid = 1 OR aid + 2 * > bid = 1 OR ... OR aid + 10000 * bid = 1; > master: 316ms > patched: 7142ms > Note, that the current or_transform_limit GUC parameter is not capable > of cutting such cases, because it cuts cases lower than the limit not > higher than the limit. In the comment, you mention that we could > invent something like hash to handle this. Hash should be nice, but > the problem is that we currently don't have a generic facility to hash > nodes (or even order them). It would be nice to add this facility, > that would be quite a piece of work. I would propose to limit this > patch for now to handle just a single Var node as a non-const side of > the clause and implement a simple hash for Vars. > > Another problem is the possible generation of worse plans. I made an > example table with two partial indexes. > create table test as (select (random()*10)::int x, (random()*1000) y > from generate_series(1,1000000) i); > create index test_x_1_y on test (y) where x = 1; > create index test_x_2_y on test (y) where x = 2; > vacuum analyze test; > > Without the transformation of ORs to ANY, our planner manages to use > both indexes with a Bitmap scan. > # explain select * from test where (x = 1 or x = 2) and y = 100; > QUERY PLAN > -------------------------------------------------------------------------------------------------------------- > Bitmap Heap Scan on test (cost=8.60..12.62 rows=1 width=12) > Recheck Cond: (((y = '100'::double precision) AND (x = 1)) OR ((y = > '100'::double precision) AND (x = 2))) > -> BitmapOr (cost=8.60..8.60 rows=1 width=0) > -> Bitmap Index Scan on test_x_1_y (cost=0.00..4.30 rows=1 width=0) > Index Cond: (y = '100'::double precision) > -> Bitmap Index Scan on test_x_2_y (cost=0.00..4.30 rows=1 width=0) > Index Cond: (y = '100'::double precision) > (7 rows) > > With transformation, the planner can't use indexes. > # explain select * from test where (x = 1 or x = 2) and y = 100; > QUERY PLAN > ----------------------------------------------------------------------------- > Gather (cost=1000.00..12690.10 rows=1 width=12) > Workers Planned: 2 > -> Parallel Seq Scan on test (cost=0.00..11690.00 rows=1 width=12) > Filter: ((x = ANY (ARRAY[1, 2])) AND (y = '100'::double precision)) > (4 rows) > > The solution I see would be to tech Bitmap scan to handle ANY clause > in the same way as the OR clause. I think the entry point for the > relevant logic is the choose_bitmap_and() function. > > Regarding the GUC parameter, I don't see we need a limit. It's not > yet clear whether a small number or a large number of OR clauses are > more favorable for transformation. I propose to have just a boolean > enable_or_transformation GUC. > I removed the limit from the hook, left the option to enable it or not. I replaced the data structure so that the groups were formed not in a list, but in a hash table. It seems to work fine, but I haven't figured out yet why in some cases the regression test results are different and the function doesn't work. So far, I have formed a patch for the version where the conversion takes place in parsing, since so far this patch looks the most reliable for me For convenience, I have formed a patch for the very first version so far. I have a suspicion that the problem is in the part where we form a hash from a string. I'm still figuring it out. --------------MfJgEh0LM0GhJabPE0zpuR0T Content-Type: text/x-patch; charset=UTF-8; name="v8.0-Replace-OR-clause-to-ANY-expressions.-Replace-X-N1-O.patch" Content-Disposition: attachment; filename*0="v8.0-Replace-OR-clause-to-ANY-expressions.-Replace-X-N1-O.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAzNWI0Y2QzZWU0OGE1YzU4OTNhNzMxNDM5ZjUwOTljMjczNmEyYTY2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbGVuYSBSeWJha2luYSA8YS5yeWJha2luYUBwb3N0 Z3Jlc3Byby5ydT4KRGF0ZTogV2VkLCAyNSBPY3QgMjAyMyAxMzo1Mjo1NSArMDMwMApTdWJq ZWN0OiBbUEFUQ0hdIFJlcGxhY2UgT1IgY2xhdXNlIHRvIEFOWSBleHByZXNzaW9ucy4gUmVw bGFjZSAoWD1OMSkgT1IKIChYPU4yKSAuLi4gd2l0aCBYID0gQU5ZKE4xLCBOMikgb24gdGhl IHN0YWdlIG9mIHRoZSBvcHRpbWlzZXIgd2hlbiB3ZSBhcmUKIHN0aWxsIHdvcmtpbmcgd2l0 aCBhIHRyZWUgZXhwcmVzc2lvbi4gRmlyc3RseSwgd2UgZG8gbm90IHRyeSB0byBtYWtlIGEK IHRyYW5zZm9ybWF0aW9uIGZvciAibm9uLW9yIiBleHByZXNzaW9ucyBvciBpbmVxdWFsaXRp ZXMgYW5kIHRoZSBjcmVhdGlvbiBvZiBhCiByZWxhdGlvbiB3aXRoICJvciIgZXhwcmVzc2lv bnMgb2NjdXJzIGFjY29yZGluZyB0byB0aGUgc2FtZSBzY2VuYXJpby4KIFNlY29uZGx5LCB3 ZSBkbyBub3QgbWFrZSB0cmFuc2Zvcm1hdGlvbnMgaWYgdGhlcmUgYXJlIGxlc3MgdGhhbiBz ZXQKIG9yX3RyYW5zZm9ybV9saW1pdC4gVGhpcmRseSwgaXQgaXMgd29ydGggY29uc2lkZXJp bmcgdGhhdCB3ZSBjb25zaWRlciAib3IiCiBleHByZXNzaW9ucyBvbmx5IGF0IHRoZSBjdXJy ZW50IGxldmVsLgoKQXV0aG9yczogQWxlbmEgUnliYWtpbmEgPGxlbmEucmliYWNraW5hQHlh bmRleC5ydT4sIEFuZHJleSBMZXBpa2hvdiA8YS5sZXBpa2hvdkBwb3N0Z3Jlc3Byby5ydT4K UmV2aWV3ZWQtYnk6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4sIFJhbmllciBWaWxl bGEgPHJhbmllci52ZkBnbWFpbC5jb20+LCBBbGV4YW5kZXIgS29yb3Rrb3YgPGFla29yb3Rr b3ZAZ21haWwuY29tPgotLS0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMgICAg ICAgICAgICAgICB8IDI1NCArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxz L21pc2MvZ3VjX3RhYmxlcy5jICAgICAgICAgICB8ICAxMCArCiBzcmMvaW5jbHVkZS9wYXJz ZXIvcGFyc2VfZXhwci5oICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0ICAgIHwgMTE1ICsrKysrKysrCiBzcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2d1Yy5vdXQgICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQgICAgICAgICAgICB8ICA1MCArKysrCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9wcnVuZS5vdXQgfCAxNzkgKysr KysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RpZHNjYW4ub3V0ICAgICAg ICAgfCAgMTcgKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwgICAg ICAgICB8ICAzMiArKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsICAgICAgICAg ICAgICAgICB8ICAxMCArCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fcHJ1bmUu c3FsICAgICAgfCAgMjIgKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3RpZHNjYW4uc3FsICAg ICAgICAgICAgICB8ICAgNiArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAg ICAgICAgICAgICAgfCAgIDEgKwogMTMgZmlsZXMgY2hhbmdlZCwgNjk4IGluc2VydGlvbnMo KyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3Bh cnNlX2V4cHIuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMKaW5kZXggNjRj NTgyYzM0NGMuLjkzYWU1ZDJkYmM5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIv cGFyc2VfZXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMKQEAg LTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX2FnZ3JlZ2F0ZS5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5o IgorI2luY2x1ZGUgImNvbW1vbi9oYXNoZm4uaCIKICNpbmNsdWRlICJjb21tYW5kcy9kYmNv bW1hbmRzLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFr ZWZ1bmNzLmgiCkBAIC00Myw2ICs0NCw3IEBACiAKIC8qIEdVQyBwYXJhbWV0ZXJzICovCiBi b29sCQlUcmFuc2Zvcm1fbnVsbF9lcXVhbHMgPSBmYWxzZTsKK2Jvb2wJCW9yX3RyYW5zZm9y bV9saW1pdCA9IGZhbHNlOwogCiAKIHN0YXRpYyBOb2RlICp0cmFuc2Zvcm1FeHByUmVjdXJz ZShQYXJzZVN0YXRlICpwc3RhdGUsIE5vZGUgKmV4cHIpOwpAQCAtOTgsNyArMTAwLDI1NyBA QCBzdGF0aWMgRXhwciAqbWFrZV9kaXN0aW5jdF9vcChQYXJzZVN0YXRlICpwc3RhdGUsIExp c3QgKm9wbmFtZSwKIAkJCQkJCQkgIE5vZGUgKmx0cmVlLCBOb2RlICpydHJlZSwgaW50IGxv Y2F0aW9uKTsKIHN0YXRpYyBOb2RlICptYWtlX251bGx0ZXN0X2Zyb21fZGlzdGluY3QoUGFy c2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCQkJCSBBX0V4cHIgKmRpc3RpbmN0YSwgTm9kZSAq YXJnKTsKK3R5cGVkZWYgc3RydWN0IE9yQ2xhdXNlR3JvdXBFbnRyeQoreworCWNoYXIJCSAg ICpoYXNoX2xlZnR2YXJfa2V5OworCisJTm9kZQkJICAgKm5vZGU7CisJTGlzdAkJICAgKmNv bnN0czsKKwlPaWQJCQkJc2NhbGFyX3R5cGU7CisJT2lkCQkJCW9wbm87CisJRXhwciAJCSAg ICpleHByOworfSBPckNsYXVzZUdyb3VwRW50cnk7CisKK3N0YXRpYyBpbnQKK29yX25hbWVf bWF0Y2goY29uc3Qgdm9pZCAqa2V5MSwgY29uc3Qgdm9pZCAqa2V5MiwgU2l6ZSBrZXlzaXpl KQoreworCWNvbnN0IGNoYXIgKm5hbWUxID0gKihjb25zdCBjaGFyICpjb25zdCAqKSBrZXkx OworCWNvbnN0IGNoYXIgKm5hbWUyID0gKihjb25zdCBjaGFyICpjb25zdCAqKSBrZXkyOwor CisJcmV0dXJuIHN0cmNtcChuYW1lMSwgbmFtZTIpOworfQorCitzdGF0aWMgdWludDMyCitv cl9uYW1lX2hhc2goY29uc3Qgdm9pZCAqa2V5LCBTaXplIGtleXNpemUpCit7CisJY29uc3Qg Y2hhciAqbmFtZSA9ICooY29uc3QgY2hhciAqY29uc3QgKikga2V5OworCisJcmV0dXJuIERh dHVtR2V0SW50MzIoaGFzaF9hbnkoKHVuc2lnbmVkIGNoYXIgKiluYW1lLCBzdHJsZW4obmFt ZSkpKTsKK30KKworc3RhdGljIE5vZGUgKgordHJhbnNmb3JtQm9vbEV4cHJPcihQYXJzZVN0 YXRlICpwc3RhdGUsIEJvb2xFeHByICpleHByX29yaWcpCit7CisJTGlzdAkJICAgKm9yX2xp c3QgPSBOSUw7CisJTGlzdENlbGwJICAgKmxjOworCUhBU0hDVEwJCQlpbmZvOworCUhUQUIg CQkgICAqb3JfZ3JvdXBfaHRhYiA9IE5VTEw7CisJaW50IAkJCWxlbl9vcnMgPSBsaXN0X2xl bmd0aChleHByX29yaWctPmFyZ3MpOworCisJTWVtU2V0KCZpbmZvLCAwLCBzaXplb2YoaW5m bykpOworCWluZm8ua2V5c2l6ZSA9IHNpemVvZihjaGFyICopOworCWluZm8uZW50cnlzaXpl ID0gc2l6ZW9mKE9yQ2xhdXNlR3JvdXBFbnRyeSk7CisJaW5mby5oYXNoID0gb3JfbmFtZV9o YXNoOworCWluZm8ubWF0Y2ggPSBvcl9uYW1lX21hdGNoOworCW9yX2dyb3VwX2h0YWIgPSBo YXNoX2NyZWF0ZSgiT1IgR3JvdXBzIiwKKwkJCQkJCQkJCSAgbGVuX29ycywKKwkJCQkJCQkJ CSAgJmluZm8sCisJCQkJCQkJCQkgIEhBU0hfRUxFTSB8IEhBU0hfRlVOQ1RJT04gfCBIQVNI X0NPTVBBUkUpOworCisJLyogSWYgdGhpcyBpcyBub3QgYW4gJ09SJyBleHByZXNzaW9uLCBz a2lwIHRoZSB0cmFuc2Zvcm1hdGlvbiAqLworCWlmIChleHByX29yaWctPmJvb2xvcCAhPSBP Ul9FWFBSIHx8ICFvcl90cmFuc2Zvcm1fbGltaXQgfHwgbGVuX29ycyA9PSAxIHx8ICFvcl9n cm91cF9odGFiKQorCQlyZXR1cm4gdHJhbnNmb3JtQm9vbEV4cHIocHN0YXRlLCAoQm9vbEV4 cHIgKikgZXhwcl9vcmlnKTsKKworCWZvcmVhY2gobGMsIGV4cHJfb3JpZy0+YXJncykKKwl7 CisJCU5vZGUJCQkgICAqYXJnID0gbGZpcnN0KGxjKTsKKwkJTm9kZQkJCSAgICpvcnF1YWw7 CisJCU5vZGUJCQkgICAqY29uc3RfZXhwcjsKKwkJTm9kZQkJCSAgICpuY29uc3RfZXhwcjsK KwkJT3JDbGF1c2VHcm91cEVudHJ5ICpnZW50cnk7CisJCWJvb2wJCQkJZm91bmQ7CisJCWNo YXIJCSAgIAkgICAqc3RyOworCisJCS8qIEF0IGZpcnN0LCB0cmFuc2Zvcm0gdGhlIGFyZyBh bmQgZXZhbHVhdGUgY29uc3RhbnQgZXhwcmVzc2lvbnMuICovCisJCW9ycXVhbCA9IHRyYW5z Zm9ybUV4cHJSZWN1cnNlKHBzdGF0ZSwgKE5vZGUgKikgYXJnKTsKKwkJb3JxdWFsID0gY29l cmNlX3RvX2Jvb2xlYW4ocHN0YXRlLCBvcnF1YWwsICJPUiIpOworCQlvcnF1YWwgPSBldmFs X2NvbnN0X2V4cHJlc3Npb25zKE5VTEwsIG9ycXVhbCk7CisKKwkJaWYgKCFJc0Eob3JxdWFs LCBPcEV4cHIpKQorCQl7CisJCQlvcl9saXN0ID0gbGFwcGVuZChvcl9saXN0LCBvcnF1YWwp OworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBEZXRlY3QgdGhlIGNvbnN0YW50 IHNpZGUgb2YgdGhlIGNsYXVzZS4gUmVjYWxsIG5vbi1jb25zdGFudAorCQkgKiBleHByZXNz aW9uIGNhbiBiZSBtYWRlIG5vdCBvbmx5IHdpdGggVmFycywgYnV0IGFsc28gd2l0aCBQYXJh bXMsCisJCSAqIHdoaWNoIGlzIG5vdCBib25kZWQgd2l0aCBhbnkgcmVsYXRpb24uIFRodXMs IHdlIGRldGVjdCB0aGUgY29uc3QKKwkJICogc2lkZSAtIGlmIGFub3RoZXIgc2lkZSBpcyBj b25zdGFudCB0b28sIHRoZSBvcnF1YWwgY291bGRuJ3QgYmUKKwkJICogYW4gT3BFeHByLgor CQkgKiBHZXQgcG9pbnRlcnMgdG8gY29uc3RhbnQgYW5kIGV4cHJlc3Npb24gc2lkZXMgb2Yg dGhlIHF1YWwuCisJCSAqLworCQlpZiAoSXNBKGdldF9sZWZ0b3Aob3JxdWFsKSwgQ29uc3Qp KQorCQl7CisJCQluY29uc3RfZXhwciA9IGdldF9yaWdodG9wKG9ycXVhbCk7CisJCQljb25z dF9leHByID0gZ2V0X2xlZnRvcChvcnF1YWwpOworCQl9CisJCWVsc2UgaWYgKElzQShnZXRf cmlnaHRvcChvcnF1YWwpLCBDb25zdCkpCisJCXsKKwkJCWNvbnN0X2V4cHIgPSBnZXRfcmln aHRvcChvcnF1YWwpOworCQkJbmNvbnN0X2V4cHIgPSBnZXRfbGVmdG9wKG9ycXVhbCk7CisJ CX0KKwkJZWxzZQorCQl7CisJCQlvcl9saXN0ID0gbGFwcGVuZChvcl9saXN0LCBvcnF1YWwp OworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIW9wX21lcmdlam9pbmFibGUoKChPcEV4 cHIgKikgb3JxdWFsKS0+b3BubywgZXhwclR5cGUobmNvbnN0X2V4cHIpKSkKKwkJeworCQkJ b3JfbGlzdCA9IGxhcHBlbmQob3JfbGlzdCwgb3JxdWFsKTsKKwkJCWNvbnRpbnVlOworCQl9 CisKKwkJLyoKKwkJKiBBdCB0aGlzIHBvaW50IHdlIGRlZmluaXRlbHkgaGF2ZSBhIHRyYW5z Zm9ybWFibGUgY2xhdXNlLgorCQkqIENsYXNzaWZ5IGl0IGFuZCBhZGQgaW50byBzcGVjaWZp YyBncm91cCBvZiBjbGF1c2VzLCBvciBjcmVhdGUgbmV3CisJCSogZ3JvdXAuCisJCSogVE9E TzogdG8gbWFuYWdlIGNvbXBsZXhpdHkgaW4gdGhlIGNhc2Ugb2YgbWFueSBkaWZmZXJlbnQg Y2xhdXNlcworCQkqIChYMT1DMSkgT1IgKFgyPUMyIE9SKSAuLi4gKFhOID0gQ04pIHdlIGNv dWxkIGludmVudCBzb21ldGhpbmcKKwkJKiBsaWtlIGEgaGFzaCB0YWJsZS4gQnV0IGFsc28g d2UgYmVsaWV2ZSwgdGhhdCB0aGUgY2FzZSBvZiBtYW55CisJCSogZGlmZmVyZW50IHZhcmlh YmxlIHNpZGVzIGlzIHZlcnkgcmFyZS4KKwkJKi8KKwkJc3RyID0gbm9kZVRvU3RyaW5nKG5j b25zdF9leHByKTsKKwkJZ2VudHJ5ID0gaGFzaF9zZWFyY2gob3JfZ3JvdXBfaHRhYiwgJnN0 ciwgSEFTSF9GSU5ELCAmZm91bmQpOworCisJCWlmIChmb3VuZCkKKwkJeworCQkJZWxvZyhX QVJOSU5HLCAiZmluZCBhbnl0aGluZyIpOworCQkJZ2VudHJ5LT5jb25zdHMgPSBsYXBwZW5k KGdlbnRyeS0+Y29uc3RzLCBjb25zdF9leHByKTsKKwkJCS8qCisJCQkJKiBUaGUgY2xhdXNl IGNsYXNzaWZpZWQgc3VjY2Vzc2Z1bGx5IGFuZCBhZGRlZCBpbnRvIGV4aXN0ZWQKKwkJCQkq IGNsYXVzZSBncm91cC4KKwkJCQkqLworCQkJY29udGludWU7CisJCX0KKworCQkvKiBOZXcg Y2xhdXNlIGdyb3VwIG5lZWRlZCAqLworCQlnZW50cnkgPSBoYXNoX3NlYXJjaChvcl9ncm91 cF9odGFiLCAmc3RyLCBIQVNIX0VOVEVSLCAmZm91bmQpOworCQlnZW50cnktPm5vZGUgPSBu Y29uc3RfZXhwcjsKKwkJZ2VudHJ5LT5jb25zdHMgPSBsaXN0X21ha2UxKGNvbnN0X2V4cHIp OworCQlnZW50cnktPmV4cHIgPSAoRXhwciAqKSBvcnF1YWw7CisJCWdlbnRyeS0+aGFzaF9s ZWZ0dmFyX2tleSA9IHN0cjsKKwl9CisKKwlpZiAob3JfZ3JvdXBfaHRhYiAmJiBoYXNoX2dl dF9udW1fZW50cmllcyhvcl9ncm91cF9odGFiKSA8IDEpCisJeworCQkvKgorCQkqIE5vIGFu eSB0cmFuc2Zvcm1hdGlvbnMgcG9zc2libGUgd2l0aCB0aGlzIGxpc3Qgb2YgYXJndW1lbnRz LiBIZXJlIHdlCisJCSogYWxyZWFkeSBtYWRlIGFsbCB1bmRlcmx5aW5nIHRyYW5zZm9ybWF0 aW9ucy4gVGh1cywganVzdCByZXR1cm4gdGhlCisJCSogdHJhbnNmb3JtZWQgYm9vbCBleHBy ZXNzaW9uLgorCQkqLworCQlyZXR1cm4gKE5vZGUgKikgbWFrZUJvb2xFeHByKE9SX0VYUFIs IG9yX2xpc3QsIGV4cHJfb3JpZy0+bG9jYXRpb24pOworCX0KKwllbHNlCisJeworCQlIQVNI X1NFUV9TVEFUVVMJCWhhc2hfc2VxOworCQlPckNsYXVzZUdyb3VwRW50cnkgKmdlbnRyeTsK KworCQloYXNoX3NlcV9pbml0KCZoYXNoX3NlcSwgb3JfZ3JvdXBfaHRhYik7CisKKwkJLyog TGV0J3MgY29udmVydCBlYWNoIGdyb3VwIG9mIGNsYXVzZXMgdG8gYW4gSU4gb3BlcmF0aW9u LiAqLworCisJCS8qCisJCSogR28gdGhyb3VnaCB0aGUgbGlzdCBvZiBncm91cHMgYW5kIGNv bnZlcnQgZWFjaCwgd2hlcmUgbnVtYmVyIG9mCisJCSogY29uc3RzIG1vcmUgdGhhbiAxLiB0 cml2aWFsIGdyb3VwcyBtb3ZlIHRvIE9SLWxpc3QgYWdhaW4KKwkJKi8KKworCQl3aGlsZSAo KGdlbnRyeSA9IChPckNsYXVzZUdyb3VwRW50cnkgKikgaGFzaF9zZXFfc2VhcmNoKCZoYXNo X3NlcSkpICE9IE5VTEwpCisJCXsKKwkJCUxpc3QJCQkgICAqYWxsZXhwcnM7CisJCQlPaWQJ CQkJICAgIHNjYWxhcl90eXBlOworCQkJT2lkCQkJCQlhcnJheV90eXBlOworCisJCQlBc3Nl cnQobGlzdF9sZW5ndGgoZ2VudHJ5LT5jb25zdHMpID4gMCk7CisKKwkJCWlmIChsaXN0X2xl bmd0aChnZW50cnktPmNvbnN0cykgPT0gMSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIE9ubHkg b25lIGVsZW1lbnQgaW4gdGhlIGNsYXNzLiBSZXR1cm4gcmluZm8gaW50byB0aGUgQm9vbEV4 cHIKKwkJCQkgKiBhcmdzIGxpc3QgdW5jaGFuZ2VkLgorCQkJCSAqLworCQkJCWxpc3RfZnJl ZShnZW50cnktPmNvbnN0cyk7CisJCQkJb3JfbGlzdCA9IGxhcHBlbmQob3JfbGlzdCwgZ2Vu dHJ5LT5leHByKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIERvIHRo ZSB0cmFuc2Zvcm1hdGlvbi4KKwkJCSAqCisJCQkgKiBGaXJzdCBvZiBhbGwsIHRyeSB0byBz ZWxlY3QgYSBjb21tb24gdHlwZSBmb3IgdGhlIGFycmF5IGVsZW1lbnRzLgorCQkJICogTm90 ZSB0aGF0IHNpbmNlIHRoZSBMSFMnIHR5cGUgaXMgZmlyc3QgaW4gdGhlIGxpc3QsIGl0IHdp bGwgYmUKKwkJCSAqIHByZWZlcnJlZCB3aGVuIHRoZXJlIGlzIGRvdWJ0IChlZywgd2hlbiBh bGwgdGhlIFJIUyBpdGVtcyBhcmUKKwkJCSAqIHVua25vd24gbGl0ZXJhbHMpLgorCQkJICoK KwkJCSAqIE5vdGU6IHVzZSBsaXN0X2NvbmNhdCBoZXJlIG5vdCBsY29ucywgdG8gYXZvaWQg ZGFtYWdpbmcgcm5vbnZhcnMuCisJCQkgKgorCQkJICogQXMgYSBzb3VyY2Ugb2YgaW5zaWRl cywgdXNlIG1ha2Vfc2NhbGFyX2FycmF5X29wKCkKKwkJCSAqLworCQkJYWxsZXhwcnMgPSBs aXN0X2NvbmNhdChsaXN0X21ha2UxKGdlbnRyeS0+bm9kZSksIGdlbnRyeS0+Y29uc3RzKTsK KwkJCXNjYWxhcl90eXBlID0gc2VsZWN0X2NvbW1vbl90eXBlKE5VTEwsIGFsbGV4cHJzLCBO VUxMLCBOVUxMKTsKKworCQkJaWYgKHNjYWxhcl90eXBlICE9IFJFQ09SRE9JRCAmJiBPaWRJ c1ZhbGlkKHNjYWxhcl90eXBlKSkKKwkJCQlhcnJheV90eXBlID0gZ2V0X2FycmF5X3R5cGUo c2NhbGFyX3R5cGUpOworCQkJZWxzZQorCQkJCWFycmF5X3R5cGUgPSBJbnZhbGlkT2lkOwor CisJCQlpZiAoYXJyYXlfdHlwZSAhPSBJbnZhbGlkT2lkKQorCQkJeworCQkJCS8qCisJCQkJ ICogT0s6IGNvZXJjZSBhbGwgdGhlIHJpZ2h0LWhhbmQgbm9uLVZhciBpbnB1dHMgdG8gdGhl IGNvbW1vbgorCQkJCSAqIHR5cGUgYW5kIGJ1aWxkIGFuIEFycmF5RXhwciBmb3IgdGhlbS4K KwkJCQkgKi8KKwkJCQlMaXN0CSAgICphZXhwcnM7CisJCQkJQXJyYXlFeHByICAqbmV3YTsK KwkJCQlTY2FsYXJBcnJheU9wRXhwciAqc2FvcGV4cHI7CisJCQkJTGlzdENlbGwgKmw7CisK KwkJCQlhZXhwcnMgPSBOSUw7CisKKwkJCQlmb3JlYWNoKGwsIGdlbnRyeS0+Y29uc3RzKQor CQkJCXsKKwkJCQkJTm9kZQkgICAqcmV4cHIgPSAoTm9kZSAqKSBsZmlyc3QobCk7CiAKKwkJ CQkJcmV4cHIgPSBjb2VyY2VfdG9fY29tbW9uX3R5cGUocHN0YXRlLCByZXhwciwKKwkJCQkJ CQkJCQkJCXNjYWxhcl90eXBlLAorCQkJCQkJCQkJCQkJIklOIik7CisJCQkJCWFleHBycyA9 IGxhcHBlbmQoYWV4cHJzLCByZXhwcik7CisJCQkJfQorCisJCQkJbmV3YSA9IG1ha2VOb2Rl KEFycmF5RXhwcik7CisJCQkJLyogYXJyYXlfY29sbGlkIHdpbGwgYmUgc2V0IGJ5IHBhcnNl X2NvbGxhdGUuYyAqLworCQkJCW5ld2EtPmVsZW1lbnRfdHlwZWlkID0gc2NhbGFyX3R5cGU7 CisJCQkJbmV3YS0+YXJyYXlfdHlwZWlkID0gYXJyYXlfdHlwZTsKKwkJCQluZXdhLT5tdWx0 aWRpbXMgPSBmYWxzZTsKKwkJCQluZXdhLT5lbGVtZW50cyA9IGFleHByczsKKwkJCQluZXdh LT5sb2NhdGlvbiA9IC0xOworCisJCQkJc2FvcGV4cHIgPQorCQkJCQkoU2NhbGFyQXJyYXlP cEV4cHIgKikKKwkJCQkJCW1ha2Vfc2NhbGFyX2FycmF5X29wKHBzdGF0ZSwKKwkJCQkJCQkJ CQkJIGxpc3RfbWFrZTEobWFrZVN0cmluZygoY2hhciAqKSAiPSIpKSwKKwkJCQkJCQkJCQkJ IHRydWUsCisJCQkJCQkJCQkJCSBnZW50cnktPm5vZGUsCisJCQkJCQkJCQkJCSAoTm9kZSAq KSBuZXdhLAorCQkJCQkJCQkJCQkgLTEpOworCisJCQkJb3JfbGlzdCA9IGxhcHBlbmQob3Jf bGlzdCwgKHZvaWQgKikgc2FvcGV4cHIpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWxp c3RfZnJlZShnZW50cnktPmNvbnN0cyk7CisJCQkJb3JfbGlzdCA9IGxhcHBlbmQob3JfbGlz dCwgZ2VudHJ5LT5leHByKTsKKwkJCX0KKwkJCWhhc2hfc2VhcmNoKG9yX2dyb3VwX2h0YWIs ICZnZW50cnktPmhhc2hfbGVmdHZhcl9rZXksIEhBU0hfUkVNT1ZFLCBOVUxMKTsKKwkJfQor CX0KKworCS8qIE9uZSBtb3JlIHRyaWNrOiBhc3NlbWJsZSBjb3JyZWN0IGNsYXVzZSAqLwor CXJldHVybiAoTm9kZSAqKSAoKGxpc3RfbGVuZ3RoKG9yX2xpc3QpID4gMSkgPworCQkJCQkJ bWFrZUJvb2xFeHByKE9SX0VYUFIsIG9yX2xpc3QsIGV4cHJfb3JpZy0+bG9jYXRpb24pIDoK KwkJCQkJCWxpbml0aWFsKG9yX2xpc3QpKTsKK30KIAogLyoKICAqIHRyYW5zZm9ybUV4cHIg LQpAQCAtMjEyLDcgKzQ2NCw3IEBAIHRyYW5zZm9ybUV4cHJSZWN1cnNlKFBhcnNlU3RhdGUg KnBzdGF0ZSwgTm9kZSAqZXhwcikKIAkJCX0KIAogCQljYXNlIFRfQm9vbEV4cHI6Ci0JCQly ZXN1bHQgPSB0cmFuc2Zvcm1Cb29sRXhwcihwc3RhdGUsIChCb29sRXhwciAqKSBleHByKTsK KwkJCXJlc3VsdCA9IChOb2RlICopdHJhbnNmb3JtQm9vbEV4cHJPcihwc3RhdGUsIChCb29s RXhwciAqKSBleHByKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgVF9GdW5jQ2FsbDoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKaW5kZXggNGM1ODU3NDE2NjEuLjYzNGJlNTll NTM4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpAQCAtMTAzOCw2ICsx MDM4LDE2IEBAIHN0cnVjdCBjb25maWdfYm9vbCBDb25maWd1cmVOYW1lc0Jvb2xbXSA9CiAJ CXRydWUsCiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAorCXsKKwkJeyJvcl90cmFuc2Zvcm1f bGltaXQiLCBQR0NfVVNFUlNFVCwgUVVFUllfVFVOSU5HX09USEVSLAorCQkJZ2V0dGV4dF9u b29wKCJUcmFuc2Zvcm0gYSBzZXF1ZW5jZSBvZiBPUiBjbGF1c2VzIHRvIGFuIElOIGV4cHJl c3Npb24uIiksCisJCQlnZXR0ZXh0X25vb3AoIlRoZSBwbGFubmVyIHdpbGwgcmVwbGFjZSBj bGF1c2VzIGxpa2UgJ3g9YzEgT1IgeD1jMiAuLiIKKwkJCQkJCSAidG8gdGhlIGNsYXVzZSAn eCBJTiAoYzEsYzIsLi4uKSciKQorCQl9LAorCQkmb3JfdHJhbnNmb3JtX2xpbWl0LAorCQlm YWxzZSwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCiAJewogCQkvKgogCQkgKiBOb3QgZm9y IGdlbmVyYWwgdXNlIC0tLSB1c2VkIGJ5IFNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT04gYW5k IFNFVApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX2V4cHIuaCBiL3Ny Yy9pbmNsdWRlL3BhcnNlci9wYXJzZV9leHByLmgKaW5kZXggN2QzOGNhNzVmN2IuLjdhNjk0 M2MxMTZjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2VfZXhwci5oCisr KyBiL3NyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV9leHByLmgKQEAgLTE3LDYgKzE3LDcgQEAK IAogLyogR1VDIHBhcmFtZXRlcnMgKi8KIGV4dGVybiBQR0RMTElNUE9SVCBib29sIFRyYW5z Zm9ybV9udWxsX2VxdWFsczsKK2V4dGVybiBQR0RMTElNUE9SVCBib29sIG9yX3RyYW5zZm9y bV9saW1pdDsKIAogZXh0ZXJuIE5vZGUgKnRyYW5zZm9ybUV4cHIoUGFyc2VTdGF0ZSAqcHN0 YXRlLCBOb2RlICpleHByLCBQYXJzZUV4cHJLaW5kIGV4cHJLaW5kKTsKIApkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0IGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0CmluZGV4IGFjZmQ5ZDFmNGY3 Li4yOWMyYmM2YTJiMiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9j cmVhdGVfaW5kZXgub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRl X2luZGV4Lm91dApAQCAtMTg4Myw2ICsxODgzLDEyMSBAQCBTRUxFQ1QgY291bnQoKikgRlJP TSB0ZW5rMQogICAgIDEwCiAoMSByb3cpCiAKK1NFVCBvcl90cmFuc2Zvcm1fbGltaXQgPSBv bjsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gdGVuazEKKyAgV0hFUkUg dGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9IDMgT1IgdGVu dGhvdXMgPSA0Mik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgdGVuazFfdGhvdXNfdGVudGhvdXMgb24g dGVuazEKKyAgIEluZGV4IENvbmQ6ICgodGhvdXNhbmQgPSA0MikgQU5EICh0ZW50aG91cyA9 IEFOWSAoJ3sxLDMsNDJ9Jzo6aW50ZWdlcltdKSkpCisoMiByb3dzKQorCitTRUxFQ1QgKiBG Uk9NIHRlbmsxCisgIFdIRVJFIHRob3VzYW5kID0gNDIgQU5EICh0ZW50aG91cyA9IDEgT1Ig dGVudGhvdXMgPSAzIE9SIHRlbnRob3VzID0gNDIpOworIHVuaXF1ZTEgfCB1bmlxdWUyIHwg dHdvIHwgZm91ciB8IHRlbiB8IHR3ZW50eSB8IGh1bmRyZWQgfCB0aG91c2FuZCB8IHR3b3Ro b3VzYW5kIHwgZml2ZXRob3VzIHwgdGVudGhvdXMgfCBvZGQgfCBldmVuIHwgc3RyaW5ndTEg fCBzdHJpbmd1MiB8IHN0cmluZzQgCistLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tKy0tLS0t LSstLS0tLSstLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0tLS0KKyAgICAgIDQyIHwgICAgNTUzMCB8ICAgMCB8ICAgIDIgfCAgIDIgfCAg ICAgIDIgfCAgICAgIDQyIHwgICAgICAgNDIgfCAgICAgICAgICA0MiB8ICAgICAgICA0MiB8 ICAgICAgIDQyIHwgIDg0IHwgICA4NSB8IFFCQUFBQSAgIHwgU0VJQUFBICAgfCBPT09PeHgK KygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00g dGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0aG91 c2FuZCA9IDk5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgQml0bWFwIEhlYXAg U2NhbiBvbiB0ZW5rMQorICAgICAgICAgUmVjaGVjayBDb25kOiAoKGh1bmRyZWQgPSA0Mikg QU5EICh0aG91c2FuZCA9IEFOWSAoJ3s0Miw5OX0nOjppbnRlZ2VyW10pKSkKKyAgICAgICAg IC0+ICBCaXRtYXBBbmQKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBv biB0ZW5rMV9odW5kcmVkCisgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaHVu ZHJlZCA9IDQyKQorICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRl bmsxX3Rob3VzX3RlbnRob3VzCisgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAo dGhvdXNhbmQgPSBBTlkgKCd7NDIsOTl9Jzo6aW50ZWdlcltdKSkKKyg4IHJvd3MpCisKK1NF TEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRo b3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5OSk7CisgY291bnQgCistLS0tLS0tCisgICAg MTAKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZS T00gdGVuazEKKyAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0 ZW50aG91cyA9IDMpIE9SIHRob3VzYW5kID0gNDE7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBCaXRtYXAg SGVhcCBTY2FuIG9uIHRlbmsxCisgICAgICAgICBSZWNoZWNrIENvbmQ6ICgoKHRob3VzYW5k ID0gNDIpIEFORCAodGVudGhvdXMgPSBBTlkgKCd7MSwzfSc6OmludGVnZXJbXSkpKSBPUiAo dGhvdXNhbmQgPSA0MSkpCisgICAgICAgICAtPiAgQml0bWFwT3IKKyAgICAgICAgICAgICAg IC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cworICAgICAg ICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKCh0aG91c2FuZCA9IDQyKSBBTkQgKHRlbnRo b3VzID0gQU5ZICgnezEsM30nOjppbnRlZ2VyW10pKSkKKyAgICAgICAgICAgICAgIC0+ICBC aXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cworICAgICAgICAgICAg ICAgICAgICAgSW5kZXggQ29uZDogKHRob3VzYW5kID0gNDEpCisoOCByb3dzKQorCitTRUxF Q1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSB0aG91c2FuZCA9IDQyIEFORCAodGVu dGhvdXMgPSAxIE9SIHRlbnRob3VzID0gMykgT1IgdGhvdXNhbmQgPSA0MTsKKyBjb3VudCAK Ky0tLS0tLS0KKyAgICAxMAorKDEgcm93KQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxF Q1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91 c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gOTkgT1IgdGVudGhvdXMgPCAyKSBPUiB0aG91c2Fu ZCA9IDQxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVn YXRlCisgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0ZW5rMQorICAgICAgICAgUmVjaGVj ayBDb25kOiAoKChodW5kcmVkID0gNDIpIEFORCAoKHRlbnRob3VzIDwgMikgT1IgKHRob3Vz YW5kID0gQU5ZICgnezQyLDk5fSc6OmludGVnZXJbXSkpKSkgT1IgKHRob3VzYW5kID0gNDEp KQorICAgICAgICAgLT4gIEJpdG1hcE9yCisgICAgICAgICAgICAgICAtPiAgQml0bWFwQW5k CisgICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFf aHVuZHJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGh1bmRy ZWQgPSA0MikKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXBPcgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3Vz X3RlbnRob3VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25k OiAodGVudGhvdXMgPCAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEJpdG1h cCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGhvdXNhbmQgPSBBTlkgKCd7NDIsOTl9 Jzo6aW50ZWdlcltdKSkKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBv biB0ZW5rMV90aG91c190ZW50aG91cworICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29u ZDogKHRob3VzYW5kID0gNDEpCisoMTQgcm93cykKKworU0VMRUNUIGNvdW50KCopIEZST00g dGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0aG91 c2FuZCA9IDk5IE9SIHRlbnRob3VzIDwgMikgT1IgdGhvdXNhbmQgPSA0MTsKKyBjb3VudCAK Ky0tLS0tLS0KKyAgICAyMAorKDEgcm93KQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxF Q1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91 c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gNDEgT1IgdGhvdXNhbmQgPSA5OSBBTkQgdGVudGhv dXMgPSAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdn cmVnYXRlCisgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0ZW5rMQorICAgICAgICAgUmVj aGVjayBDb25kOiAoKGh1bmRyZWQgPSA0MikgQU5EICgoKHRob3VzYW5kID0gOTkpIEFORCAo dGVudGhvdXMgPSAyKSkgT1IgKHRob3VzYW5kID0gQU5ZICgnezQyLDQxfSc6OmludGVnZXJb XSkpKSkKKyAgICAgICAgIC0+ICBCaXRtYXBBbmQKKyAgICAgICAgICAgICAgIC0+ICBCaXRt YXAgSW5kZXggU2NhbiBvbiB0ZW5rMV9odW5kcmVkCisgICAgICAgICAgICAgICAgICAgICBJ bmRleCBDb25kOiAoaHVuZHJlZCA9IDQyKQorICAgICAgICAgICAgICAgLT4gIEJpdG1hcE9y CisgICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFf dGhvdXNfdGVudGhvdXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6 ICgodGhvdXNhbmQgPSA5OSkgQU5EICh0ZW50aG91cyA9IDIpKQorICAgICAgICAgICAgICAg ICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGhvdXNhbmQgPSBBTlkg KCd7NDIsNDF9Jzo6aW50ZWdlcltdKSkKKygxMSByb3dzKQorCitTRUxFQ1QgY291bnQoKikg RlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9S IHRob3VzYW5kID0gNDEgT1IgdGhvdXNhbmQgPSA5OSBBTkQgdGVudGhvdXMgPSAyKTsKKyBj b3VudCAKKy0tLS0tLS0KKyAgICAxMAorKDEgcm93KQorCitSRVNFVCBvcl90cmFuc2Zvcm1f bGltaXQ7CiAtLQogLS0gQ2hlY2sgYmVoYXZpb3Igd2l0aCBkdXBsaWNhdGUgaW5kZXggY29s dW1uIGNvbnRlbnRzCiAtLQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9ndWMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ndWMub3V0CmluZGV4IDEy N2M5NTMyOTc2Li5jMDUyYjExM2VlYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9ndWMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ3VjLm91 dApAQCAtODYxLDcgKzg2MSw4IEBAIFNFTEVDVCBuYW1lIEZST00gdGFiX3NldHRpbmdzX2Zs YWdzCiAgICAgICAgICAgIG5hbWUgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogIGRlZmF1bHRfc3RhdGlzdGljc190YXJnZXQKLSgxIHJvdykKKyBvcl90cmFu c2Zvcm1fbGltaXQKKygyIHJvd3MpCiAKIC0tIFJ1bnRpbWUtY29tcHV0ZWQgR1VDcyBzaG91 bGQgYmUgcGFydCBvZiB0aGUgcHJlc2V0IGNhdGVnb3J5LgogU0VMRUNUIG5hbWUgRlJPTSB0 YWJfc2V0dGluZ3NfZmxhZ3MKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvam9pbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0CmluZGV4 IGI5NWQzMGY2NTg2Li5hM2VmMWFmZDFmZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9qb2luLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pv aW4ub3V0CkBAIC00MjA3LDYgKzQyMDcsNTYgQEAgc2VsZWN0ICogZnJvbSB0ZW5rMSBhIGpv aW4gdGVuazEgYiBvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDog KHVuaXF1ZTIgPSA3KQogKDE5IHJvd3MpCiAKK1NFVCBvcl90cmFuc2Zvcm1fbGltaXQgPSBv bjsKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gdGVuazEgYSBqb2luIHRl bmsxIGIgb24KKyAgKGEudW5pcXVlMSA9IDEgYW5kIGIudW5pcXVlMSA9IDIpIG9yCisgICgo YS51bmlxdWUyID0gMyBvciBhLnVuaXF1ZTIgPSA3KSBhbmQgYi5odW5kcmVkID0gNCk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRl cjogKCgoYS51bmlxdWUxID0gMSkgQU5EIChiLnVuaXF1ZTEgPSAyKSkgT1IgKChhLnVuaXF1 ZTIgPSBBTlkgKCd7Myw3fSc6OmludGVnZXJbXSkpIEFORCAoYi5odW5kcmVkID0gNCkpKQor ICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVuazEgYgorICAgICAgICAgUmVjaGVjayBD b25kOiAoKHVuaXF1ZTEgPSAyKSBPUiAoaHVuZHJlZCA9IDQpKQorICAgICAgICAgLT4gIEJp dG1hcE9yCisgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFf dW5pcXVlMQorICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTEgPSAy KQorICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX2h1bmRy ZWQKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChodW5kcmVkID0gNCkKKyAg IC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVu azEgYQorICAgICAgICAgICAgICAgUmVjaGVjayBDb25kOiAoKHVuaXF1ZTEgPSAxKSBPUiAo dW5pcXVlMiA9IEFOWSAoJ3szLDd9Jzo6aW50ZWdlcltdKSkpCisgICAgICAgICAgICAgICAt PiAgQml0bWFwT3IKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2Nh biBvbiB0ZW5rMV91bmlxdWUxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBD b25kOiAodW5pcXVlMSA9IDEpCisgICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIElu ZGV4IFNjYW4gb24gdGVuazFfdW5pcXVlMgorICAgICAgICAgICAgICAgICAgICAgICAgICAg SW5kZXggQ29uZDogKHVuaXF1ZTIgPSBBTlkgKCd7Myw3fSc6OmludGVnZXJbXSkpCisoMTcg cm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSB0ZW5rMSBhIGpv aW4gdGVuazEgYiBvbgorICAoYS51bmlxdWUxIDwgMjAgb3IgYS51bmlxdWUxID0gMyBvciBh LnVuaXF1ZTEgPSAxIGFuZCBiLnVuaXF1ZTEgPSAyKSBvcgorICAoKGEudW5pcXVlMiA9IDMg b3IgYS51bmlxdWUyID0gNykgYW5kIGIuaHVuZHJlZCA9IDQpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAg Sm9pbiBGaWx0ZXI6ICgoYS51bmlxdWUxIDwgMjApIE9SICgoYS51bmlxdWUxID0gMSkgQU5E IChiLnVuaXF1ZTEgPSAyKSkgT1IgKChhLnVuaXF1ZTIgPSBBTlkgKCd7Myw3fSc6OmludGVn ZXJbXSkpIEFORCAoYi5odW5kcmVkID0gNCkpIE9SIChhLnVuaXF1ZTEgPSAzKSkKKyAgIC0+ ICBTZXEgU2NhbiBvbiB0ZW5rMSBiCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ ICBCaXRtYXAgSGVhcCBTY2FuIG9uIHRlbmsxIGEKKyAgICAgICAgICAgICAgIFJlY2hlY2sg Q29uZDogKCh1bmlxdWUxIDwgMjApIE9SICh1bmlxdWUxID0gMSkgT1IgKHVuaXF1ZTIgPSBB TlkgKCd7Myw3fSc6OmludGVnZXJbXSkpIE9SICh1bmlxdWUxID0gMykpCisgICAgICAgICAg ICAgICAtPiAgQml0bWFwT3IKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5k ZXggU2NhbiBvbiB0ZW5rMV91bmlxdWUxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJ bmRleCBDb25kOiAodW5pcXVlMSA8IDIwKQorICAgICAgICAgICAgICAgICAgICAgLT4gIEJp dG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3VuaXF1ZTEKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUxID0gMSkKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV91bmlxdWUyCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMiA9IEFOWSAoJ3szLDd9Jzo6aW50 ZWdlcltdKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBv biB0ZW5rMV91bmlxdWUxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25k OiAodW5pcXVlMSA9IDMpCisoMTUgcm93cykKKworUkVTRVQgb3JfdHJhbnNmb3JtX2xpbWl0 OwogLS0KIC0tIHRlc3QgcGxhY2VtZW50IG9mIG1vdmFibGUgcXVhbHMgaW4gYSBwYXJhbWV0 ZXJpemVkIGpvaW4gdHJlZQogLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcGFydGl0aW9uX3BydW5lLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cGFydGl0aW9uX3BydW5lLm91dAppbmRleCA5YTRjNDhjMDU1Ni4uMTc4OWQzYzFmZDcgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX3BydW5lLm91 dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9wcnVuZS5vdXQK QEAgLTEwMSw2ICsxMDEsMjggQEAgZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9t IGxwIHdoZXJlIGEgaXMgbm90IG51bGwgYW5kIChhID0gJ2EnIG9yIGEgPSAnYycKICAgICAg ICAgIEZpbHRlcjogKChhIElTIE5PVCBOVUxMKSBBTkQgKChhID0gJ2EnOjpicGNoYXIpIE9S IChhID0gJ2MnOjpicGNoYXIpKSkKICg1IHJvd3MpCiAKK1NFVCBvcl90cmFuc2Zvcm1fbGlt aXQgPSBvbjsKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBscCB3aGVyZSBh ID0gJ2EnIG9yIGEgPSAnYyc7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBTZXEgU2NhbiBvbiBscF9hZCBscF8xCisgICAg ICAgICBGaWx0ZXI6IChhID0gQU5ZICgne2EsY30nOjpicGNoYXJbXSkpCisgICAtPiAgU2Vx IFNjYW4gb24gbHBfYmMgbHBfMgorICAgICAgICAgRmlsdGVyOiAoYSA9IEFOWSAoJ3thLGN9 Jzo6YnBjaGFyW10pKQorKDUgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3Qg KiBmcm9tIGxwIHdoZXJlIGEgaXMgbm90IG51bGwgYW5kIChhID0gJ2EnIG9yIGEgPSAnYycp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBT ZXEgU2NhbiBvbiBscF9hZCBscF8xCisgICAgICAgICBGaWx0ZXI6ICgoYSBJUyBOT1QgTlVM TCkgQU5EIChhID0gQU5ZICgne2EsY30nOjpicGNoYXJbXSkpKQorICAgLT4gIFNlcSBTY2Fu IG9uIGxwX2JjIGxwXzIKKyAgICAgICAgIEZpbHRlcjogKChhIElTIE5PVCBOVUxMKSBBTkQg KGEgPSBBTlkgKCd7YSxjfSc6OmJwY2hhcltdKSkpCisoNSByb3dzKQorCitSRVNFVCBvcl90 cmFuc2Zvcm1fbGltaXQ7CiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gbHAg d2hlcmUgYSA8PiAnZyc7CiAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAK IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNjcxLDYgKzY5Mywx NjMgQEAgZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSAoYSA9 IDEgYW5kIGEgPSAzKSBvciAoYSA+IDEgYW5kIGEgPQogICAgICAgICAgRmlsdGVyOiAoKChh ID0gMSkgQU5EIChhID0gMykpIE9SICgoYSA+IDEpIEFORCAoYSA9IDE1KSkpCiAoMTEgcm93 cykKIAorU0VUIG9yX3RyYW5zZm9ybV9saW1pdCA9IG9uOworZXhwbGFpbiAoY29zdHMgb2Zm KSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhID0gMSBvciBhID0gNzsKKyAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcmxwMiBybHAKKyAgIEZpbHRl cjogKGEgPSBBTlkgKCd7MSw3fSc6OmludGVnZXJbXSkpCisoMiByb3dzKQorCitleHBsYWlu IChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPSAxIG9yIGIgPSAnYWIn OworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEFwcGVuZAorICAgLT4gIFNlcSBTY2FuIG9uIHJscDEgcmxwXzEKKyAgICAg ICAgIEZpbHRlcjogKChhID0gMSkgT1IgKChiKTo6dGV4dCA9ICdhYic6OnRleHQpKQorICAg LT4gIFNlcSBTY2FuIG9uIHJscDIgcmxwXzIKKyAgICAgICAgIEZpbHRlcjogKChhID0gMSkg T1IgKChiKTo6dGV4dCA9ICdhYic6OnRleHQpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDNh YmNkIHJscF8zCisgICAgICAgICBGaWx0ZXI6ICgoYSA9IDEpIE9SICgoYik6OnRleHQgPSAn YWInOjp0ZXh0KSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHA0XzEgcmxwXzQKKyAgICAgICAg IEZpbHRlcjogKChhID0gMSkgT1IgKChiKTo6dGV4dCA9ICdhYic6OnRleHQpKQorICAgLT4g IFNlcSBTY2FuIG9uIHJscDRfMiBybHBfNQorICAgICAgICAgRmlsdGVyOiAoKGEgPSAxKSBP UiAoKGIpOjp0ZXh0ID0gJ2FiJzo6dGV4dCkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwNF9k ZWZhdWx0IHJscF82CisgICAgICAgICBGaWx0ZXI6ICgoYSA9IDEpIE9SICgoYik6OnRleHQg PSAnYWInOjp0ZXh0KSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHA1XzEgcmxwXzcKKyAgICAg ICAgIEZpbHRlcjogKChhID0gMSkgT1IgKChiKTo6dGV4dCA9ICdhYic6OnRleHQpKQorICAg LT4gIFNlcSBTY2FuIG9uIHJscDVfZGVmYXVsdCBybHBfOAorICAgICAgICAgRmlsdGVyOiAo KGEgPSAxKSBPUiAoKGIpOjp0ZXh0ID0gJ2FiJzo6dGV4dCkpCisgICAtPiAgU2VxIFNjYW4g b24gcmxwX2RlZmF1bHRfMTAgcmxwXzkKKyAgICAgICAgIEZpbHRlcjogKChhID0gMSkgT1Ig KChiKTo6dGV4dCA9ICdhYic6OnRleHQpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscF9kZWZh dWx0XzMwIHJscF8xMAorICAgICAgICAgRmlsdGVyOiAoKGEgPSAxKSBPUiAoKGIpOjp0ZXh0 ID0gJ2FiJzo6dGV4dCkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwX2RlZmF1bHRfbnVsbCBy bHBfMTEKKyAgICAgICAgIEZpbHRlcjogKChhID0gMSkgT1IgKChiKTo6dGV4dCA9ICdhYic6 OnRleHQpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscF9kZWZhdWx0X2RlZmF1bHQgcmxwXzEy CisgICAgICAgICBGaWx0ZXI6ICgoYSA9IDEpIE9SICgoYik6OnRleHQgPSAnYWInOjp0ZXh0 KSkKKygyNSByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxw IHdoZXJlIGEgPiAyMCBhbmQgYSA8IDI3OworICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQXBwZW5kCisgICAtPiAgU2VxIFNjYW4gb24gcmxwNF8xIHJscF8xCisgICAgICAg ICBGaWx0ZXI6ICgoYSA+IDIwKSBBTkQgKGEgPCAyNykpCisgICAtPiAgU2VxIFNjYW4gb24g cmxwNF8yIHJscF8yCisgICAgICAgICBGaWx0ZXI6ICgoYSA+IDIwKSBBTkQgKGEgPCAyNykp CisoNSByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdo ZXJlIGEgPSAyOTsKKyAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcmxwNF9kZWZhdWx0IHJscAor ICAgRmlsdGVyOiAoYSA9IDI5KQorKDIgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKSBz ZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhID49IDI5OworICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHA0X2Rl ZmF1bHQgcmxwXzEKKyAgICAgICAgIEZpbHRlcjogKGEgPj0gMjkpCisgICAtPiAgU2VxIFNj YW4gb24gcmxwNV8xIHJscF8yCisgICAgICAgICBGaWx0ZXI6IChhID49IDI5KQorICAgLT4g IFNlcSBTY2FuIG9uIHJscDVfZGVmYXVsdCBybHBfMworICAgICAgICAgRmlsdGVyOiAoYSA+ PSAyOSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHBfZGVmYXVsdF8zMCBybHBfNAorICAgICAg ICAgRmlsdGVyOiAoYSA+PSAyOSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHBfZGVmYXVsdF9k ZWZhdWx0IHJscF81CisgICAgICAgICBGaWx0ZXI6IChhID49IDI5KQorKDExIHJvd3MpCisK K2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA8IDEgb3Ig KGEgPiAyMCBhbmQgYSA8IDI1KTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQXBwZW5kCisgICAtPiAgU2VxIFNjYW4gb24g cmxwMSBybHBfMQorICAgICAgICAgRmlsdGVyOiAoKGEgPCAxKSBPUiAoKGEgPiAyMCkgQU5E IChhIDwgMjUpKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHA0XzEgcmxwXzIKKyAgICAgICAg IEZpbHRlcjogKChhIDwgMSkgT1IgKChhID4gMjApIEFORCAoYSA8IDI1KSkpCisoNSByb3dz KQorCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPSAy MCBvciBhID0gNDA7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHA0XzEgcmxwXzEKKyAg ICAgICAgIEZpbHRlcjogKGEgPSBBTlkgKCd7MjAsNDB9Jzo6aW50ZWdlcltdKSkKKyAgIC0+ ICBTZXEgU2NhbiBvbiBybHA1X2RlZmF1bHQgcmxwXzIKKyAgICAgICAgIEZpbHRlcjogKGEg PSBBTlkgKCd7MjAsNDB9Jzo6aW50ZWdlcltdKSkKKyg1IHJvd3MpCisKK2V4cGxhaW4gKGNv c3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAzIHdoZXJlIGEgPSAyMDsgICAvKiBlbXB0eSAq LworICAgICAgICBRVUVSWSBQTEFOICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgUmVzdWx0CisgICBPbmUtVGltZSBGaWx0ZXI6IGZhbHNlCisoMiByb3dzKQorCitl eHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPiAxIGFuZCBh ID0gMTA7CS8qIG9ubHkgZGVmYXVsdCAqLworICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2Fu IG9uIHJscF9kZWZhdWx0XzEwIHJscAorICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQgKGEgPSAx MCkpCisoMiByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxw IHdoZXJlIGEgPiAxIGFuZCBhID49MTU7CS8qIHJscDMgb253YXJkcywgaW5jbHVkaW5nIGRl ZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBB cHBlbmQKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHAzYWJjZCBybHBfMQorICAgICAgICAgRmls dGVyOiAoKGEgPiAxKSBBTkQgKGEgPj0gMTUpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDNl ZmdoIHJscF8yCisgICAgICAgICBGaWx0ZXI6ICgoYSA+IDEpIEFORCAoYSA+PSAxNSkpCisg ICAtPiAgU2VxIFNjYW4gb24gcmxwM251bGx4eSBybHBfMworICAgICAgICAgRmlsdGVyOiAo KGEgPiAxKSBBTkQgKGEgPj0gMTUpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDNfZGVmYXVs dCBybHBfNAorICAgICAgICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQgKGEgPj0gMTUpKQorICAg LT4gIFNlcSBTY2FuIG9uIHJscDRfMSBybHBfNQorICAgICAgICAgRmlsdGVyOiAoKGEgPiAx KSBBTkQgKGEgPj0gMTUpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDRfMiBybHBfNgorICAg ICAgICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQgKGEgPj0gMTUpKQorICAgLT4gIFNlcSBTY2Fu IG9uIHJscDRfZGVmYXVsdCBybHBfNworICAgICAgICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQg KGEgPj0gMTUpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDVfMSBybHBfOAorICAgICAgICAg RmlsdGVyOiAoKGEgPiAxKSBBTkQgKGEgPj0gMTUpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJs cDVfZGVmYXVsdCBybHBfOQorICAgICAgICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQgKGEgPj0g MTUpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscF9kZWZhdWx0XzMwIHJscF8xMAorICAgICAg ICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQgKGEgPj0gMTUpKQorICAgLT4gIFNlcSBTY2FuIG9u IHJscF9kZWZhdWx0X2RlZmF1bHQgcmxwXzExCisgICAgICAgICBGaWx0ZXI6ICgoYSA+IDEp IEFORCAoYSA+PSAxNSkpCisoMjMgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxl Y3QgKiBmcm9tIHJscCB3aGVyZSBhID0gMSBhbmQgYSA9IDM7CS8qIGVtcHR5ICovCisgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBS ZXN1bHQKKyAgIE9uZS1UaW1lIEZpbHRlcjogZmFsc2UKKygyIHJvd3MpCisKK2V4cGxhaW4g KGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgKGEgPSAxIGFuZCBhID0gMykg b3IgKGEgPiAxIGFuZCBhID0gMTUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEFwcGVuZAorICAgLT4gIFNlcSBTY2FuIG9uIHJscDIgcmxwXzEKKyAgICAgICAgIEZpbHRl cjogKCgoYSA9IDEpIEFORCAoYSA9IDMpKSBPUiAoKGEgPiAxKSBBTkQgKGEgPSAxNSkpKQor ICAgLT4gIFNlcSBTY2FuIG9uIHJscDNhYmNkIHJscF8yCisgICAgICAgICBGaWx0ZXI6ICgo KGEgPSAxKSBBTkQgKGEgPSAzKSkgT1IgKChhID4gMSkgQU5EIChhID0gMTUpKSkKKyAgIC0+ ICBTZXEgU2NhbiBvbiBybHAzZWZnaCBybHBfMworICAgICAgICAgRmlsdGVyOiAoKChhID0g MSkgQU5EIChhID0gMykpIE9SICgoYSA+IDEpIEFORCAoYSA9IDE1KSkpCisgICAtPiAgU2Vx IFNjYW4gb24gcmxwM251bGx4eSBybHBfNAorICAgICAgICAgRmlsdGVyOiAoKChhID0gMSkg QU5EIChhID0gMykpIE9SICgoYSA+IDEpIEFORCAoYSA9IDE1KSkpCisgICAtPiAgU2VxIFNj YW4gb24gcmxwM19kZWZhdWx0IHJscF81CisgICAgICAgICBGaWx0ZXI6ICgoKGEgPSAxKSBB TkQgKGEgPSAzKSkgT1IgKChhID4gMSkgQU5EIChhID0gMTUpKSkKKygxMSByb3dzKQorCitS RVNFVCBvcl90cmFuc2Zvcm1fbGltaXQ7CiAtLSBtdWx0aS1jb2x1bW4ga2V5cwogY3JlYXRl IHRhYmxlIG1jM3AgKGEgaW50LCBiIGludCwgYyBpbnQpIHBhcnRpdGlvbiBieSByYW5nZSAo YSwgYWJzKGIpLCBjKTsKIGNyZWF0ZSB0YWJsZSBtYzNwX2RlZmF1bHQgcGFydGl0aW9uIG9m IG1jM3AgZGVmYXVsdDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv dGlkc2Nhbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RpZHNjYW4ub3V0Cmlu ZGV4IGYxMzNiNWE0YWM3Li44YTMxZTJlNjcwZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC90aWRzY2FuLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3RpZHNjYW4ub3V0CkBAIC01Niw2ICs1NiwyMyBAQCBTRUxFQ1QgY3RpZCwgKiBGUk9N IHRpZHNjYW4gV0hFUkUgY3RpZCA9ICcoMCwyKScgT1IgJygwLDEpJyA9IGN0aWQ7CiAgKDAs MikgfCAgMgogKDIgcm93cykKIAorU0VUIG9yX3RyYW5zZm9ybV9saW1pdCA9IG9uOworRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGN0aWQsICogRlJPTSB0aWRzY2FuIFdIRVJFIGN0 aWQgPSAnKDAsMiknIE9SICcoMCwxKScgPSBjdGlkOworICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRpZCBTY2FuIG9uIHRp ZHNjYW4KKyAgIFRJRCBDb25kOiAoY3RpZCA9IEFOWSAoJ3siKDAsMikiLCIoMCwxKSJ9Jzo6 dGlkW10pKQorKDIgcm93cykKKworU0VMRUNUIGN0aWQsICogRlJPTSB0aWRzY2FuIFdIRVJF IGN0aWQgPSAnKDAsMiknIE9SICcoMCwxKScgPSBjdGlkOworIGN0aWQgIHwgaWQgCistLS0t LS0tKy0tLS0KKyAoMCwxKSB8ICAxCisgKDAsMikgfCAgMgorKDIgcm93cykKKworUkVTRVQg b3JfdHJhbnNmb3JtX2xpbWl0OwogLS0gY3RpZCA9IFNjYWxhckFycmF5T3AgLSBpbXBsZW1l bnRlZCBhcyB0aWRzY2FuCiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgY3RpZCwgKiBG Uk9NIHRpZHNjYW4gV0hFUkUgY3RpZCA9IEFOWShBUlJBWVsnKDAsMSknLCAnKDAsMiknXTo6 dGlkW10pOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4 LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwKaW5kZXggZDQ5 Y2U5ZjMwMDcuLmE3MDliMmMxYWJjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9jcmVhdGVfaW5kZXguc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9p bmRleC5zcWwKQEAgLTczNyw2ICs3MzcsMzggQEAgU0VMRUNUIGNvdW50KCopIEZST00gdGVu azEKIFNFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCiAgIFdIRVJFIGh1bmRyZWQgPSA0MiBB TkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5OSk7CiAKK1NFVCBvcl90cmFuc2Zv cm1fbGltaXQgPSBvbjsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gdGVu azEKKyAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91 cyA9IDMgT1IgdGVudGhvdXMgPSA0Mik7CitTRUxFQ1QgKiBGUk9NIHRlbmsxCisgIFdIRVJF IHRob3VzYW5kID0gNDIgQU5EICh0ZW50aG91cyA9IDEgT1IgdGVudGhvdXMgPSAzIE9SIHRl bnRob3VzID0gNDIpOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikg RlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9S IHRob3VzYW5kID0gOTkpOworU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAgV0hFUkUg aHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9IDk5KTsKKwor RVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAgV0hF UkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9IDMpIE9S IHRob3VzYW5kID0gNDE7CitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSB0 aG91c2FuZCA9IDQyIEFORCAodGVudGhvdXMgPSAxIE9SIHRlbnRob3VzID0gMykgT1IgdGhv dXNhbmQgPSA0MTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZS T00gdGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0 aG91c2FuZCA9IDk5IE9SIHRlbnRob3VzIDwgMikgT1IgdGhvdXNhbmQgPSA0MTsKK1NFTEVD VCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3Vz YW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5OSBPUiB0ZW50aG91cyA8IDIpIE9SIHRob3VzYW5k ID0gNDE7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRl bmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNh bmQgPSA0MSBPUiB0aG91c2FuZCA9IDk5IEFORCB0ZW50aG91cyA9IDIpOworU0VMRUNUIGNv dW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQg PSA0MiBPUiB0aG91c2FuZCA9IDQxIE9SIHRob3VzYW5kID0gOTkgQU5EIHRlbnRob3VzID0g Mik7CitSRVNFVCBvcl90cmFuc2Zvcm1fbGltaXQ7CisKIC0tCiAtLSBDaGVjayBiZWhhdmlv ciB3aXRoIGR1cGxpY2F0ZSBpbmRleCBjb2x1bW4gY29udGVudHMKIC0tCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2pvaW4uc3FsCmluZGV4IDNlNTAzMmIwNGRkLi40ODE4OThjMjk4NyAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9z cWwvam9pbi5zcWwKQEAgLTEzOTYsNiArMTM5NiwxNiBAQCBleHBsYWluIChjb3N0cyBvZmYp CiBzZWxlY3QgKiBmcm9tIHRlbmsxIGEgam9pbiB0ZW5rMSBiIG9uCiAgIChhLnVuaXF1ZTEg PSAxIGFuZCBiLnVuaXF1ZTEgPSAyKSBvcgogICAoKGEudW5pcXVlMiA9IDMgb3IgYS51bmlx dWUyID0gNykgYW5kIGIuaHVuZHJlZCA9IDQpOworU0VUIG9yX3RyYW5zZm9ybV9saW1pdCA9 IG9uOworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSB0ZW5rMSBhIGpvaW4g dGVuazEgYiBvbgorICAoYS51bmlxdWUxID0gMSBhbmQgYi51bmlxdWUxID0gMikgb3IKKyAg KChhLnVuaXF1ZTIgPSAzIG9yIGEudW5pcXVlMiA9IDcpIGFuZCBiLmh1bmRyZWQgPSA0KTsK K2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gdGVuazEgYSBqb2luIHRlbmsx IGIgb24KKyAgKGEudW5pcXVlMSA8IDIwIG9yIGEudW5pcXVlMSA9IDMgb3IgYS51bmlxdWUx ID0gMSBhbmQgYi51bmlxdWUxID0gMikgb3IKKyAgKChhLnVuaXF1ZTIgPSAzIG9yIGEudW5p cXVlMiA9IDcpIGFuZCBiLmh1bmRyZWQgPSA0KTsKK1JFU0VUIG9yX3RyYW5zZm9ybV9saW1p dDsKIAogLS0KIC0tIHRlc3QgcGxhY2VtZW50IG9mIG1vdmFibGUgcXVhbHMgaW4gYSBwYXJh bWV0ZXJpemVkIGpvaW4gdHJlZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv cGFydGl0aW9uX3BydW5lLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9w cnVuZS5zcWwKaW5kZXggN2JmMzkyMDgyN2YuLjg4NzA5OTEwNTkyIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fcHJ1bmUuc3FsCisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9wcnVuZS5zcWwKQEAgLTIxLDYgKzIxLDEyIEBAIGV4 cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBscCB3aGVyZSBhIGlzIG5vdCBudWxs OwogZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgaXMgbnVs bDsKIGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBscCB3aGVyZSBhID0gJ2En IG9yIGEgPSAnYyc7CiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gbHAgd2hl cmUgYSBpcyBub3QgbnVsbCBhbmQgKGEgPSAnYScgb3IgYSA9ICdjJyk7CisKK1NFVCBvcl90 cmFuc2Zvcm1fbGltaXQgPSBvbjsKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJv bSBscCB3aGVyZSBhID0gJ2EnIG9yIGEgPSAnYyc7CitleHBsYWluIChjb3N0cyBvZmYpIHNl bGVjdCAqIGZyb20gbHAgd2hlcmUgYSBpcyBub3QgbnVsbCBhbmQgKGEgPSAnYScgb3IgYSA9 ICdjJyk7CitSRVNFVCBvcl90cmFuc2Zvcm1fbGltaXQ7CisKIGV4cGxhaW4gKGNvc3RzIG9m Zikgc2VsZWN0ICogZnJvbSBscCB3aGVyZSBhIDw+ICdnJzsKIGV4cGxhaW4gKGNvc3RzIG9m Zikgc2VsZWN0ICogZnJvbSBscCB3aGVyZSBhIDw+ICdhJyBhbmQgYSA8PiAnZCc7CiBleHBs YWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSBub3QgaW4gKCdhJywg J2QnKTsKQEAgLTk5LDYgKzEwNSwyMiBAQCBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAq IGZyb20gcmxwIHdoZXJlIGEgPiAxIGFuZCBhID49MTU7CS8qIHJscDMgb253YXJkcywgaQog ZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhID0gMSBhbmQg YSA9IDM7CS8qIGVtcHR5ICovCiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20g cmxwIHdoZXJlIChhID0gMSBhbmQgYSA9IDMpIG9yIChhID4gMSBhbmQgYSA9IDE1KTsKIAor CitTRVQgb3JfdHJhbnNmb3JtX2xpbWl0ID0gb247CitleHBsYWluIChjb3N0cyBvZmYpIHNl bGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPSAxIG9yIGEgPSA3OworZXhwbGFpbiAoY29zdHMg b2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhID0gMSBvciBiID0gJ2FiJzsKK2V4cGxh aW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA+IDIwIGFuZCBhIDwg Mjc7CitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPSAy OTsKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA+PSAy OTsKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA8IDEg b3IgKGEgPiAyMCBhbmQgYSA8IDI1KTsKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICog ZnJvbSBybHAgd2hlcmUgYSA9IDIwIG9yIGEgPSA0MDsKK2V4cGxhaW4gKGNvc3RzIG9mZikg c2VsZWN0ICogZnJvbSBybHAzIHdoZXJlIGEgPSAyMDsgICAvKiBlbXB0eSAqLworZXhwbGFp biAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhID4gMSBhbmQgYSA9IDEw OwkvKiBvbmx5IGRlZmF1bHQgKi8KK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJv bSBybHAgd2hlcmUgYSA+IDEgYW5kIGEgPj0xNTsJLyogcmxwMyBvbndhcmRzLCBpbmNsdWRp bmcgZGVmYXVsdCAqLworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3 aGVyZSBhID0gMSBhbmQgYSA9IDM7CS8qIGVtcHR5ICovCitleHBsYWluIChjb3N0cyBvZmYp IHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIChhID0gMSBhbmQgYSA9IDMpIG9yIChhID4gMSBh bmQgYSA9IDE1KTsKK1JFU0VUIG9yX3RyYW5zZm9ybV9saW1pdDsKKwogLS0gbXVsdGktY29s dW1uIGtleXMKIGNyZWF0ZSB0YWJsZSBtYzNwIChhIGludCwgYiBpbnQsIGMgaW50KSBwYXJ0 aXRpb24gYnkgcmFuZ2UgKGEsIGFicyhiKSwgYyk7CiBjcmVhdGUgdGFibGUgbWMzcF9kZWZh dWx0IHBhcnRpdGlvbiBvZiBtYzNwIGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC90aWRzY2FuLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3RpZHNjYW4u c3FsCmluZGV4IDMxM2UwZmI5YjY3Li5jNzM1ZTIxOTU4OSAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvdGlkc2Nhbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv dGlkc2Nhbi5zcWwKQEAgLTIyLDYgKzIyLDEyIEBAIEVYUExBSU4gKENPU1RTIE9GRikKIFNF TEVDVCBjdGlkLCAqIEZST00gdGlkc2NhbiBXSEVSRSBjdGlkID0gJygwLDIpJyBPUiAnKDAs MSknID0gY3RpZDsKIFNFTEVDVCBjdGlkLCAqIEZST00gdGlkc2NhbiBXSEVSRSBjdGlkID0g JygwLDIpJyBPUiAnKDAsMSknID0gY3RpZDsKIAorU0VUIG9yX3RyYW5zZm9ybV9saW1pdCA9 IG9uOworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGN0aWQsICogRlJPTSB0aWRzY2Fu IFdIRVJFIGN0aWQgPSAnKDAsMiknIE9SICcoMCwxKScgPSBjdGlkOworU0VMRUNUIGN0aWQs ICogRlJPTSB0aWRzY2FuIFdIRVJFIGN0aWQgPSAnKDAsMiknIE9SICcoMCwxKScgPSBjdGlk OworUkVTRVQgb3JfdHJhbnNmb3JtX2xpbWl0OworCiAtLSBjdGlkID0gU2NhbGFyQXJyYXlP cCAtIGltcGxlbWVudGVkIGFzIHRpZHNjYW4KIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVD VCBjdGlkLCAqIEZST00gdGlkc2NhbiBXSEVSRSBjdGlkID0gQU5ZKEFSUkFZWycoMCwxKScs ICcoMCwyKSddOjp0aWRbXSk7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDA2 YjI1NjE3YmM5Li43MDFiMTA3NWZmYyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK QEAgLTE2MzUsNiArMTYzNSw3IEBAIE51bWVyaWNWYXIKIE9NX3VpbnQzMgogT1AKIE9TQVBl ckdyb3VwU3RhdGUKK09yQ2xhdXNlR3JvdXBFbnRyeQogT1NBUGVyUXVlcnlTdGF0ZQogT1NJ bmZvCiBPU1NMQ2lwaGVyCi0tIAoyLjM0LjEKCg== --------------MfJgEh0LM0GhJabPE0zpuR0T--