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 1sTs8i-003MH6-1C for pgsql-hackers@arkaria.postgresql.org; Wed, 17 Jul 2024 00:03:24 +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 1sTs8f-0052EC-Hj for pgsql-hackers@arkaria.postgresql.org; Wed, 17 Jul 2024 00:03:21 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sTs8f-0052E2-2k for pgsql-hackers@lists.postgresql.org; Wed, 17 Jul 2024 00:03:21 +0000 Received: from mail-yb1-xb2f.google.com ([2607:f8b0:4864:20::b2f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sTs8c-002Ug4-3u for pgsql-hackers@postgresql.org; Wed, 17 Jul 2024 00:03:20 +0000 Received: by mail-yb1-xb2f.google.com with SMTP id 3f1490d57ef6-e03db345b0cso5785248276.1 for ; Tue, 16 Jul 2024 17:03:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1721174596; x=1721779396; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=CtJDUH7CmScK0+LsZGqv7tBQlZOdpzfTweGA7tOEz9w=; b=P9FWqBRnUZz5qCM+CNWrowSKZQ9m2B5vUM2WAQi+VXZLyy9/Ussu9Wp14ZlP4u9xUF VQz1WJTdka0p4FrgAAA7fohURg9Anh4RQz/ewR8CGFiv9MTh9XGYg4Jdfgk3fFZw1KdP D6A+ABfdwzcdCPB9WLOLG6LrFA14qrWriDxJktwFJ30rT9rhfvcrkrwUJwNWNenxMlNN AF1NP/DDEMsQJ8WKZb16IfLHz0RLOy0g5jJBQtD16y1QyhhOB9T65s0jLi/iBaTECW2L Ys9h7oomGJP7xRHyCY6wPEEG2lDcB4e0cjN5Q95UplbQlWaol0aQx3fnWQoMuJJ3FqzW OcAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721174596; x=1721779396; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=CtJDUH7CmScK0+LsZGqv7tBQlZOdpzfTweGA7tOEz9w=; b=A04L4xtq/aMXH5VtNLlo8lcuYUgHxREAlwF7x9J4olHEuLiJTO/QHTYv0SkKXsWwDO zF3VkRb4H+SN7bLQ7gg5uEy6mWohVx993v9INuhbahmZaZpCtmicoPD5cV9Imk780mlm hDVIKSatNlgTdOUAXqQeB+f+D7K/SLzOL/wXhnMfK1keZI6E3IzRvPOu+s/PBDVtlYLX rJ9wfTCd1kK5rPWWcqFMJjYL6mjljYKd8uFxSUy+P7t5Pm3L4ZMIEgPoc3viVsRM8w4s SIUY49PGAzBTbN1Png1EqXIcMM5jC8jlPpkkSBlPhmG5JVP/YC2GyusV6q2OJk7mRKYb YQ1A== X-Forwarded-Encrypted: i=1; AJvYcCXkkT+8DXz9tleV03dHC1UmF1MxVkpegQ1D9THkbvS0ZrjhCa/QW5JKQOcYB/GAYHJMu7sh6VjlGUIQR5MzA81/h7Sk3L9Yv6plaRAA X-Gm-Message-State: AOJu0Yw2DJ2xMui2IkyX5b/6Q0DcKcM7shrDT9LY3bjiBvji7wYotc1M Cvm2LWXi0W6/8rlsHM6N5BjtGPr60u3RHZUTosoPJnE/UgRv/D5TVqJW6Ha9BBfxiqK8JO38gN5 G6VDXdGIbGcQrCaCAxOmcAKcr4BU= X-Google-Smtp-Source: AGHT+IEqPzL/DMIvhBPihMQ4gmE7E+8/tAG1n5+rH1nXgNdt1PnwoJ+Q0JxkizOFZAGZEGr0mPkOqgRDlwV3zIMWeCw= X-Received: by 2002:a05:6902:2182:b0:e05:a978:7728 with SMTP id 3f1490d57ef6-e05ed558bd3mr157892276.0.1721174595609; Tue, 16 Jul 2024 17:03:15 -0700 (PDT) MIME-Version: 1.0 References: <567ED6CA.2040504@sigaev.ru> <196b44d5-f4e5-41a0-9a8f-9fbf26a13760@postgrespro.ru> <9736220.CDJkKcVGEf@thinkpad-pgpro> <2193851.QkHrqEjB74@thinkpad-pgpro> <3b9bb831-da52-4779-8f3e-f8b6b83ba41f@postgrespro.ru> In-Reply-To: <3b9bb831-da52-4779-8f3e-f8b6b83ba41f@postgrespro.ru> From: Alexander Korotkov Date: Wed, 17 Jul 2024 03:03:03 +0300 Message-ID: Subject: Re: POC, WIP: OR-clause support for indexes To: Alena Rybakina Cc: Nikolay Shaplov , pgsql-hackers@lists.postgresql.org, Andrei Lepikhov , jian he , Robert Haas , pgsql-hackers@postgresql.org, Peter Geoghegan , "Finnerty, Jim" , Marcos Pegoraro , teodor@sigaev.ru, Tomas Vondra , Peter Eisentraut , Ranier Vilela Content-Type: multipart/mixed; boundary="0000000000005e45d4061d6630af" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005e45d4061d6630af Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, Alena! On Thu, Jul 11, 2024 at 7:17=E2=80=AFPM Alena Rybakina wrote: > I have finished patch and processed almost your suggestions (from [0], [1= ], [2]). It remains only to add tests where the conversion should work, but= I will add this in the next version. > > [0] https://www.postgresql.org/message-id/3381819.e9J7NaK4W3%40thinkpad-p= gpro > > [1] https://www.postgresql.org/message-id/9736220.CDJkKcVGEf%40thinkpad-p= gpro > > [2] https://www.postgresql.org/message-id/2193851.QkHrqEjB74%40thinkpad-p= gpro I dare making another revision of this patch. In this version I moved the transformation to match_clause_to_indexcol(). Therefore, this allows to successfully construct index scans with SAOP, but has no degradation in generation of bitmap scans which I observed in [1] and [2]. BTW, I found that my description in [2] lacks of t_b_c_idx index definition. Sorry for that. Given that now we're doing OR-to-ANY transformation solely to match an index we don't need complex analysis of OR-list, which potentially could take quadratic time. Instead, we're trying to match every OR element to an index and quit immediately on failure. I'd like to head a feedback on the new place to apply the transformation. It looks like significant simplification for me and the way to go. Also, I have addressed some of notes by Robert Haas [3]. In v27 we don't use expression evaluation, but directly construct an array constant when possible. Also we don't transform operator id to string and back, but directly construct SAOP instead. Links. 1. https://www.postgresql.org/message-id/CAPpHfduJtO0s9E%3DSHUTzrCD88BH0eik= 0UNog1_q3XBF2wLmH6g%40mail.gmail.com 2. https://www.postgresql.org/message-id/CAPpHfdtSXxhdv3mLOLjEewGeXJ%2BFtfh= jqodn1WWuq5JLsKx48g%40mail.gmail.com 3. https://www.postgresql.org/message-id/CA%2BTgmobu0DUFCTF28DuAi975mEc4xYq= X3xyt8RA0WbnyrYg%2BFw%40mail.gmail.com ------ Regards, Alexander Korotkov Supabase --0000000000005e45d4061d6630af Content-Type: application/octet-stream; name="v27-0001-Transform-OR-clauses-to-ANY-expression.patch" Content-Disposition: attachment; filename="v27-0001-Transform-OR-clauses-to-ANY-expression.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lyp2ig7r0 RnJvbSA3NWQxZDZhMjBhN2VkYTk0YjBlYzkxNjExODQwZTliM2YyOTVjNGNhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGVuYSBSeWJha2luYSA8YS5yeWJha2luYUBwb3N0Z3Jlc3By by5ydT4KRGF0ZTogVGh1LCAxMSBKdWwgMjAyNCAxOTowMToxMCArMDMwMApTdWJqZWN0OiBbUEFU Q0ggdjI3XSBUcmFuc2Zvcm0gT1IgY2xhdXNlcyB0byBBTlkgZXhwcmVzc2lvbgoKUmVwbGFjZSAo ZXhwciBvcCBDMSkgT1IgKGV4cHIgb3AgQzIpIC4uLiB3aXRoIGV4cHIgb3AgQU5ZKEFSUkFZW0Mx LCBDMiwgLi4uXSkKZHVyaW5nIG1hdGNoaW5nIGEgY2xhdXNlIHRvIGluZGV4LgoKSGVyZSBDbiBp cyBhIG4tdGggY29uc3RhbnQgb3IgcGFyYW1ldGVycyBleHByZXNzaW9uLCAnZXhwcicgaXMgbm9u LWNvbnN0YW50CmV4cHJlc3Npb24sICdvcCcgaXMgYW4gb3BlcmF0b3Igd2hpY2ggcmV0dXJucyBi b29sZWFuIHJlc3VsdCBhbmQgaGFzIGEgY29tbXV0ZXIKKGZvciB0aGUgY2FzZSBvZiByZXZlcnNl IG9yZGVyIG9mIGNvbnN0YW50IGFuZCBub24tY29uc3RhbnQgcGFydHMgb2YgdGhlCmV4cHJlc3Np b24sIGxpa2UgJ0NuIG9wIGV4cHInKS4KCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20v NTY3RUQ2Q0EuMjA0MDUwNCU0MHNpZ2Fldi5ydQpBdXRob3I6IEFsZW5hIFJ5YmFraW5hIDxsZW5h LnJpYmFja2luYUB5YW5kZXgucnU+CkF1dGhvcjogQW5kcmV5IExlcGlraG92IDxhLmxlcGlraG92 QHBvc3RncmVzcHJvLnJ1PgpSZXZpZXdlZC1ieTogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0Lmll PgpSZXZpZXdlZC1ieTogUmFuaWVyIFZpbGVsYSA8cmFuaWVyLnZmQGdtYWlsLmNvbT4KUmV2aWV3 ZWQtYnk6IEFsZXhhbmRlciBLb3JvdGtvdiA8YWVrb3JvdGtvdkBnbWFpbC5jb20+ClJldmlld2Vk LWJ5OiBSb2JlcnQgSGFhcyA8cm9iZXJ0bWhhYXNAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogSmlh biBIZSA8amlhbi51bml2ZXJzYWxpdHlAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogVG9tIExhbmUg PHRnbEBzc3MucGdoLnBhLnVzPgpSZXZpZXdlZC1ieTogTmlrb2xheSBTaGFwbG92IDxkaHlhbkBu YXRhcmFqLnN1PgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgICAg ICB8IDI0MSArKysrKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv Y3JlYXRlX2luZGV4Lm91dCB8IDE4MyArKysrKysrKysrKysrKy0tCiBzcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2pvaW4ub3V0ICAgICAgICAgfCAgNTcgKysrKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2NyZWF0ZV9pbmRleC5zcWwgICAgICB8ICA0MiArKysrCiBzcmMvdGVzdC9yZWdyZXNzL3Nx bC9qb2luLnNxbCAgICAgICAgICAgICAgfCAgIDkgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgICAgICAgICAgIHwgICAxICsKIDYgZmlsZXMgY2hhbmdlZCwgNTExIGluc2VydGlv bnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2luZHhwYXRoLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5j CmluZGV4IGMwZmNjN2Q3OGRmLi40ZmQwYmJjZTJjZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvaW5keHBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9pbmR4cGF0aC5jCkBAIC0xOSwxMCArMTksMTIgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9zdHJh dG51bS5oIgogI2luY2x1ZGUgImFjY2Vzcy9zeXNhdHRyLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9u YW1lc3BhY2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ19vcGVyYXRvci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BmYW1pbHkuaCIKICNpbmNs dWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJub2Rlcy9iaXRtYXBzZXQuaCIKICNp bmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIK ICNpbmNsdWRlICJub2Rlcy9zdXBwb3J0bm9kZXMuaCIKQEAgLTMwLDkgKzMyLDE0IEBACiAjaW5j bHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wYXRobm9k ZS5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wYXRocy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9w bGFubWFpbi5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wcmVwLmgiCiAjaW5jbHVkZSAib3B0aW1p emVyL3Jlc3RyaWN0aW5mby5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZV9vcGVyLmgiCisjaW5j bHVkZSAicG9zdGdyZXNfZXh0LmgiCisjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKICNpbmNsdWRl ICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogI2luY2x1 ZGUgInV0aWxzL3NlbGZ1bmNzLmgiCiAKIApAQCAtMTc3LDYgKzE4NCwxMCBAQCBzdGF0aWMgSW5k ZXhDbGF1c2UgKm1hdGNoX3Jvd2NvbXBhcmVfdG9faW5kZXhjb2woUGxhbm5lckluZm8gKnJvb3Qs CiAJCQkJCQkJCQkJCQkgUmVzdHJpY3RJbmZvICpyaW5mbywKIAkJCQkJCQkJCQkJCSBpbnQgaW5k ZXhjb2wsCiAJCQkJCQkJCQkJCQkgSW5kZXhPcHRJbmZvICppbmRleCk7CitzdGF0aWMgSW5kZXhD bGF1c2UgKm1hdGNoX29yY2xhdXNlX3RvX2luZGV4Y29sKFBsYW5uZXJJbmZvICpyb290LAorCQkJ CQkJCQkJCQkgICBSZXN0cmljdEluZm8gKnJpbmZvLAorCQkJCQkJCQkJCQkgICBpbnQgaW5kZXhj b2wsCisJCQkJCQkJCQkJCSAgIEluZGV4T3B0SW5mbyAqaW5kZXgpOwogc3RhdGljIEluZGV4Q2xh dXNlICpleHBhbmRfaW5kZXhxdWFsX3Jvd2NvbXBhcmUoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJ CQkJCQkJCQlSZXN0cmljdEluZm8gKnJpbmZvLAogCQkJCQkJCQkJCQkJaW50IGluZGV4Y29sLApA QCAtMjI0OCw2ICsyMjU5LDEwIEBAIG1hdGNoX2NsYXVzZV90b19pbmRleGNvbChQbGFubmVySW5m byAqcm9vdCwKIAl7CiAJCXJldHVybiBtYXRjaF9yb3djb21wYXJlX3RvX2luZGV4Y29sKHJvb3Qs IHJpbmZvLCBpbmRleGNvbCwgaW5kZXgpOwogCX0KKwllbHNlIGlmIChyZXN0cmljdGlvbl9pc19v cl9jbGF1c2UocmluZm8pKQorCXsKKwkJcmV0dXJuIG1hdGNoX29yY2xhdXNlX3RvX2luZGV4Y29s KHJvb3QsIHJpbmZvLCBpbmRleGNvbCwgaW5kZXgpOworCX0KIAllbHNlIGlmIChpbmRleC0+YW1z ZWFyY2hudWxscyAmJiBJc0EoY2xhdXNlLCBOdWxsVGVzdCkpCiAJewogCQlOdWxsVGVzdCAgICpu dCA9IChOdWxsVGVzdCAqKSBjbGF1c2U7CkBAIC0yNzcxLDYgKzI3ODYsMjMyIEBAIG1hdGNoX3Jv d2NvbXBhcmVfdG9faW5kZXhjb2woUGxhbm5lckluZm8gKnJvb3QsCiAJcmV0dXJuIE5VTEw7CiB9 CiAKKy8qCisgKiBtYXRjaF9vcmNsYXVzZV90b19pbmRleGNvbCgpCisgKgkgIEhhbmRsZXMgdGhl IE9SLWV4cHIgY2FzZSBmb3IgbWF0Y2hfY2xhdXNlX3RvX2luZGV4Y29sKCkgaW4gdGhlIGNhc2UK KyAqCSAgd2hlcmUgaXQgY291bGQgYmUgdHJhbnNmb3JtZWQgdG8gU2NhbGFyQXJyYXlPcEV4cHIu CisgKi8KK3N0YXRpYyBJbmRleENsYXVzZSAqCittYXRjaF9vcmNsYXVzZV90b19pbmRleGNvbChQ bGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCSAgIFJlc3RyaWN0SW5mbyAqcmluZm8sCisJCQkJCQkg ICBpbnQgaW5kZXhjb2wsCisJCQkJCQkgICBJbmRleE9wdEluZm8gKmluZGV4KQoreworCUxpc3RD ZWxsICAgKmxjOworCUJvb2xFeHByICAgKm9yY2xhdXNlID0gKEJvb2xFeHByICopIHJpbmZvLT5v cmNsYXVzZTsKKwlOb2RlCSAgICppbmRleEV4cHIgPSBOVUxMOworCUxpc3QJICAgKmNvbnN0cyA9 IE5JTDsKKwlOb2RlCSAgICpuZXdhID0gTlVMTDsKKwlTY2FsYXJBcnJheU9wRXhwciAqc2FvcGV4 cHIgPSBOVUxMOworCUhlYXBUdXBsZQlvcGVydHVwOworCUZvcm1fcGdfb3BlcmF0b3Igb3BlcmZv cm07CisJT2lkCQkJbWF0Y2hPcG5vID0gSW52YWxpZE9pZDsKKwlJbmRleENsYXVzZSAqaWNsYXVz ZTsKKwlPaWQJCQljb25zdHR5cGUgPSBJbnZhbGlkT2lkOworCU9pZAkJCWFycmF5dHlwZSA9IElu dmFsaWRPaWQ7CisJT2lkCQkJaW5wdXRjb2xsaWQgPSBJbnZhbGlkT2lkOworCWJvb2wJCWhhdmVf cGFyYW0gPSBmYWxzZTsKKworCUFzc2VydChJc0Eob3JjbGF1c2UsIEJvb2xFeHByKSk7CisJQXNz ZXJ0KG9yY2xhdXNlLT5ib29sb3AgPT0gT1JfRVhQUik7CisKKwlpZiAoYm1zX2lzX21lbWJlcihp bmRleC0+cmVsLT5yZWxpZCwgcmluZm8tPnJpZ2h0X3JlbGlkcykpCisJCXJldHVybiBOVUxMOwor CisJZm9yZWFjaChsYywgb3JjbGF1c2UtPmFyZ3MpCisJeworCQlSZXN0cmljdEluZm8gKnN1Yl9y aW5mbzsKKwkJT3BFeHByCSAgICpzdWJfcXVhbDsKKwkJT2lkCQkJb3BubzsKKwkJTm9kZQkgICAq bGVmdG9wLAorCQkJCSAgICpyaWdodG9wOworCQlOb2RlCSAgICpjb25zdF9leHByOworCQlOb2Rl CSAgICpuY29uc3RfZXhwcjsKKworCQlpZiAoIUlzQShsZmlyc3QobGMpLCBSZXN0cmljdEluZm8p KQorCQkJcmV0dXJuIE5VTEw7CisKKwkJc3ViX3JpbmZvID0gKFJlc3RyaWN0SW5mbyAqKSBsZmly c3QobGMpOworCQlzdWJfcXVhbCA9IChPcEV4cHIgKikgc3ViX3JpbmZvLT5jbGF1c2U7CisJCW9w bm8gPSBzdWJfcXVhbC0+b3BubzsKKworCQlpZiAoIUlzQShzdWJfcmluZm8tPmNsYXVzZSwgT3BF eHByKSkKKwkJCXJldHVybiBOVUxMOworCisJCWlmIChzdWJfcmluZm8tPmlzX3B1c2hlZF9kb3du ICE9IHJpbmZvLT5pc19wdXNoZWRfZG93biB8fAorCQkJc3ViX3JpbmZvLT5pc19jbG9uZSAhPSBy aW5mby0+aXNfY2xvbmUgfHwKKwkJCXN1Yl9yaW5mby0+c2VjdXJpdHlfbGV2ZWwgIT0gcmluZm8t PnNlY3VyaXR5X2xldmVsIHx8CisJCQkhYm1zX2VxdWFsKHN1Yl9yaW5mby0+cmVxdWlyZWRfcmVs aWRzLCByaW5mby0+cmVxdWlyZWRfcmVsaWRzKSB8fAorCQkJIWJtc19lcXVhbChzdWJfcmluZm8t PmluY29tcGF0aWJsZV9yZWxpZHMsIHJpbmZvLT5pbmNvbXBhdGlibGVfcmVsaWRzKSB8fAorCQkJ IWJtc19lcXVhbChzdWJfcmluZm8tPm91dGVyX3JlbGlkcywgcmluZm8tPm91dGVyX3JlbGlkcykp CisJCXsKKwkJCS8qIFJlc3RyaWN0SW5mbyBwYXJhbWV0ZXJzIGRvbid0IG1hdGNoIHBhcmVudCwg c28gYmFpbCBvdXQgKi8KKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJaWYgKGdldF9vcF9yZXR0 eXBlKG9wbm8pICE9IEJPT0xPSUQpCisJCXsKKwkJCS8qIE9ubHkgb3BlcmF0b3IgcmV0dXJuaW5n IGJvb2xlYW4gc3VpdHMgT1IgLT4gQU5ZIHRyYW5zZm9ybWF0aW9uICovCisJCQlyZXR1cm4gTlVM TDsKKwkJfQorCisJCS8qCisJCSAqIERldGVjdCB0aGUgY29uc3RhbnQgc2lkZSBvZiB0aGUgY2xh dXNlLiBSZWNhbGwgbm9uLWNvbnN0YW50CisJCSAqIGV4cHJlc3Npb24gY2FuIGJlIG1hZGUgbm90 IG9ubHkgd2l0aCBWYXJzLCBidXQgYWxzbyB3aXRoIFBhcmFtcywKKwkJICogd2hpY2ggaXMgbm90 IGJvbmRlZCB3aXRoIGFueSByZWxhdGlvbi4gVGh1cywgd2UgZGV0ZWN0IHRoZSBjb25zdAorCQkg KiBzaWRlIC0gaWYgYW5vdGhlciBzaWRlIGlzIGNvbnN0YW50IHRvbywgdGhlIG9ycXVhbCBjb3Vs ZG4ndCBiZSBhbgorCQkgKiBPcEV4cHIuICBHZXQgcG9pbnRlcnMgdG8gY29uc3RhbnQgYW5kIGV4 cHJlc3Npb24gc2lkZXMgb2YgdGhlIHF1YWwuCisJCSAqLworCisJCWxlZnRvcCA9IGdldF9sZWZ0 b3Aoc3ViX3F1YWwpOworCQlpZiAoSXNBKGxlZnRvcCwgUmVsYWJlbFR5cGUpKQorCQkJbGVmdG9w ID0gKE5vZGUgKikgKChSZWxhYmVsVHlwZSAqKSBsZWZ0b3ApLT5hcmc7CisKKwkJcmlnaHRvcCA9 IGdldF9yaWdodG9wKHN1Yl9xdWFsKTsKKwkJaWYgKElzQShyaWdodG9wLCBSZWxhYmVsVHlwZSkp CisJCQlyaWdodG9wID0gKE5vZGUgKikgKChSZWxhYmVsVHlwZSAqKSByaWdodG9wKS0+YXJnOwor CisJCWlmIChJc0EobGVmdG9wLCBDb25zdCkgfHwgSXNBKGxlZnRvcCwgUGFyYW0pKQorCQl7CisJ CQlvcG5vID0gZ2V0X2NvbW11dGF0b3Iob3Bubyk7CisKKwkJCWlmICghT2lkSXNWYWxpZChvcG5v KSkKKwkJCXsKKwkJCQkvKiBjb21tdXRhdG9yIGRvZXNuJ3QgZXhpc3QsIHdlIGNhbid0IHJldmVy c2UgdGhlIG9yZGVyICovCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQluY29uc3RfZXhw ciA9IHJpZ2h0b3A7CisJCQljb25zdF9leHByID0gbGVmdG9wOworCQl9CisJCWVsc2UgaWYgKElz QShyaWdodG9wLCBDb25zdCkgfHwgSXNBKHJpZ2h0b3AsIFBhcmFtKSkKKwkJeworCQkJY29uc3Rf ZXhwciA9IHJpZ2h0b3A7CisJCQluY29uc3RfZXhwciA9IGxlZnRvcDsKKwkJfQorCQllbHNlCisJ CXsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJaWYgKCFtYXRjaF9pbmRleF90b19vcGVyYW5k KG5jb25zdF9leHByLCBpbmRleGNvbCwgaW5kZXgpKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJLyoK KwkJICogRm9yYmlkIHRyYW5zZm9ybWF0aW9uIGZvciBjb21wb3NpdGUgdHlwZXMsIHJlY29yZHMu CisJCSAqLworCQlpZiAodHlwZV9pc19yb3d0eXBlKGV4cHJUeXBlKG5jb25zdF9leHByKSkgfHwK KwkJCXR5cGVfaXNfcm93dHlwZShleHByVHlwZShjb25zdF9leHByKSkpCisJCXsKKwkJCXJldHVy biBOVUxMOworCQl9CisKKwkJaWYgKCFPaWRJc1ZhbGlkKG1hdGNoT3BubykpCisJCXsKKwkJCW1h dGNoT3BubyA9IG9wbm87CisJCQlpbmRleEV4cHIgPSBuY29uc3RfZXhwcjsKKwkJCWNvbnN0dHlw ZSA9IGV4cHJUeXBlKGNvbnN0X2V4cHIpOworCQkJYXJyYXl0eXBlID0gZ2V0X2FycmF5X3R5cGUo Y29uc3R0eXBlKTsKKwkJCWlucHV0Y29sbGlkID0gc3ViX3F1YWwtPmlucHV0Y29sbGlkOworCQkJ aWYgKCFPaWRJc1ZhbGlkKGFycmF5dHlwZSkpCisJCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJZWxz ZQorCQl7CisJCQlpZiAob3BubyAhPSBtYXRjaE9wbm8gfHwKKwkJCQlpbnB1dGNvbGxpZCAhPSBz dWJfcXVhbC0+aW5wdXRjb2xsaWQpCisJCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlpZiAoSXNB KGNvbnN0X2V4cHIsIFBhcmFtKSkKKwkJCWhhdmVfcGFyYW0gPSB0cnVlOworCQljb25zdHMgPSBs YXBwZW5kKGNvbnN0cywgY29uc3RfZXhwcik7CisJfQorCisJaWYgKGhhdmVfcGFyYW0pCisJewor CQkvKgorCQkgKiBXZSBuZWVkIHRvIGNvbnN0cnVjdCBhbiBBcnJheUV4cHIgZ2l2ZW4gd2UgaGF2 ZSBQYXJhbSdzIG5vdCBqdXN0CisJCSAqIENvbnN0J3MuCisJCSAqLworCQlBcnJheUV4cHIgICph cmV4cHIgPSBtYWtlTm9kZShBcnJheUV4cHIpOworCisJCS8qIGFycmF5X2NvbGxpZCB3aWxsIGJl IHNldCBieSBwYXJzZV9jb2xsYXRlLmMgKi8KKwkJYXJleHByLT5lbGVtZW50X3R5cGVpZCA9IGNv bnN0dHlwZTsKKwkJYXJleHByLT5hcnJheV90eXBlaWQgPSBhcnJheXR5cGU7CisJCWFyZXhwci0+ bXVsdGlkaW1zID0gZmFsc2U7CisJCWFyZXhwci0+ZWxlbWVudHMgPSBjb25zdHM7CisJCWFyZXhw ci0+bG9jYXRpb24gPSAtMTsKKworCQluZXdhID0gKE5vZGUgKikgYXJleHByOworCX0KKwllbHNl CisJeworCQkvKiBXZSBoYXZlIG9ubHkgQ29zdHMncy4gIENhbiBnZW5lcmF0ZSBjb25zdGFudCBh cnJheS4gKi8KKworCQlpbnQxNgkJdHlwbGVuOworCQlib29sCQl0eXBieXZhbDsKKwkJY2hhcgkJ dHlwYWxpZ247CisJCURhdHVtCSAgICplbGVtczsKKwkJaW50CQkJaSA9IDA7CisJCUFycmF5VHlw ZSAgKmFyOworCisJCWdldF90eXBsZW5ieXZhbGFsaWduKGNvbnN0dHlwZSwgJnR5cGxlbiwgJnR5 cGJ5dmFsLCAmdHlwYWxpZ24pOworCisJCWVsZW1zID0gKERhdHVtICopIHBhbGxvYyhzaXplb2Yo RGF0dW0pICogbGlzdF9sZW5ndGgoY29uc3RzKSk7CisJCWZvcmVhY2gobGMsIGNvbnN0cykKKwkJ eworCQkJTm9kZQkgICAqZWxlbSA9IChOb2RlICopIGxmaXJzdChsYyk7CisKKwkJCWVsZW1zW2kr K10gPSAoKENvbnN0ICopIGVsZW0pLT5jb25zdHZhbHVlOworCQl9CisKKwkJYXIgPSBjb25zdHJ1 Y3RfYXJyYXkoZWxlbXMsIGksIGNvbnN0dHlwZSwgdHlwbGVuLCB0eXBieXZhbCwgdHlwYWxpZ24p OworCQluZXdhID0gKE5vZGUgKikgbWFrZUNvbnN0KGFycmF5dHlwZSwgLTEsIGlucHV0Y29sbGlk LCAtMSwgUG9pbnRlckdldERhdHVtKGFyKSwgZmFsc2UsIGZhbHNlKTsKKworCQlwZnJlZShlbGVt cyk7CisJCWxpc3RfZnJlZShjb25zdHMpOworCX0KKworCW9wZXJ0dXAgPSBTZWFyY2hTeXNDYWNo ZTEoT1BFUk9JRCwKKwkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0obWF0Y2hPcG5vKSk7CisJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKG9wZXJ0dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3Igb3BlcmF0b3IgJXUiLCBtYXRjaE9wbm8pOworCisJb3BlcmZvcm0gPSAoRm9y bV9wZ19vcGVyYXRvcikgR0VUU1RSVUNUKG9wZXJ0dXApOworCisJLyogYW5kIGJ1aWxkIHRoZSBl eHByZXNzaW9uIG5vZGUgKi8KKwlzYW9wZXhwciA9IG1ha2VOb2RlKFNjYWxhckFycmF5T3BFeHBy KTsKKwlzYW9wZXhwci0+b3BubyA9IG1hdGNoT3BubzsKKwlzYW9wZXhwci0+b3BmdW5jaWQgPSBv cGVyZm9ybS0+b3ByY29kZTsKKwlzYW9wZXhwci0+aGFzaGZ1bmNpZCA9IEludmFsaWRPaWQ7CisJ c2FvcGV4cHItPm5lZ2Z1bmNpZCA9IEludmFsaWRPaWQ7CisJc2FvcGV4cHItPnVzZU9yID0gdHJ1 ZTsKKwlzYW9wZXhwci0+aW5wdXRjb2xsaWQgPSBpbnB1dGNvbGxpZDsKKwkvKiBpbnB1dGNvbGxp ZCB3aWxsIGJlIHNldCBieSBwYXJzZV9jb2xsYXRlLmMgKi8KKwlzYW9wZXhwci0+YXJncyA9IGxp c3RfbWFrZTIoaW5kZXhFeHByLCBuZXdhKTsKKwlzYW9wZXhwci0+bG9jYXRpb24gPSAtMTsKKwor CVJlbGVhc2VTeXNDYWNoZShvcGVydHVwKTsKKworCWljbGF1c2UgPSBtYWtlTm9kZShJbmRleENs YXVzZSk7CisJaWNsYXVzZS0+cmluZm8gPSBtYWtlX3Jlc3RyaWN0aW5mbyhyb290LAorCQkJCQkJ CQkJICAgJnNhb3BleHByLT54cHIsCisJCQkJCQkJCQkgICByaW5mby0+aXNfcHVzaGVkX2Rvd24s CisJCQkJCQkJCQkgICByaW5mby0+aGFzX2Nsb25lLAorCQkJCQkJCQkJICAgcmluZm8tPmlzX2Ns b25lLAorCQkJCQkJCQkJICAgcmluZm8tPnBzZXVkb2NvbnN0YW50LAorCQkJCQkJCQkJICAgcmlu Zm8tPnNlY3VyaXR5X2xldmVsLAorCQkJCQkJCQkJICAgcmluZm8tPnJlcXVpcmVkX3JlbGlkcywK KwkJCQkJCQkJCSAgIHJpbmZvLT5pbmNvbXBhdGlibGVfcmVsaWRzLAorCQkJCQkJCQkJICAgcmlu Zm8tPm91dGVyX3JlbGlkcyk7CisJaWNsYXVzZS0+aW5kZXhxdWFscyA9IGxpc3RfbWFrZTEoaWNs YXVzZS0+cmluZm8pOworCWljbGF1c2UtPmxvc3N5ID0gZmFsc2U7CisJaWNsYXVzZS0+aW5kZXhj b2wgPSBpbmRleGNvbDsKKwlpY2xhdXNlLT5pbmRleGNvbHMgPSBOSUw7CisJcmV0dXJuIGljbGF1 c2U7Cit9CisKIC8qCiAgKiBleHBhbmRfaW5kZXhxdWFsX3Jvd2NvbXBhcmUgLS0tIGV4cGFuZCBh IHNpbmdsZSBpbmRleHF1YWwgY29uZGl0aW9uCiAgKgkJdGhhdCBpcyBhIFJvd0NvbXBhcmVFeHBy CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQKaW5kZXggY2Y2ZWFj NTczNDkuLmMyYjI1OTM2YzhjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2NyZWF0ZV9pbmRleC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVf aW5kZXgub3V0CkBAIC0xODQ0LDE4ICsxODQ0LDExIEBAIERST1AgVEFCTEUgb25la193aXRoX251 bGw7CiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgKiBGUk9NIHRlbmsxCiAgIFdIRVJFIHRo b3VzYW5kID0gNDIgQU5EICh0ZW50aG91cyA9IDEgT1IgdGVudGhvdXMgPSAzIE9SIHRlbnRob3Vz ID0gNDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ci0gQml0bWFwIEhlYXAgU2NhbiBvbiB0ZW5rMQotICAgUmVjaGVjayBDb25kOiAoKCh0aG91c2Fu ZCA9IDQyKSBBTkQgKHRlbnRob3VzID0gMSkpIE9SICgodGhvdXNhbmQgPSA0MikgQU5EICh0ZW50 aG91cyA9IDMpKSBPUiAoKHRob3VzYW5kID0gNDIpIEFORCAodGVudGhvdXMgPSA0MikpKQotICAg LT4gIEJpdG1hcE9yCi0gICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdGhv dXNfdGVudGhvdXMKLSAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICgodGhvdXNhbmQgPSA0Mikg QU5EICh0ZW50aG91cyA9IDEpKQotICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRl bmsxX3Rob3VzX3RlbnRob3VzCi0gICAgICAgICAgICAgICBJbmRleCBDb25kOiAoKHRob3VzYW5k ID0gNDIpIEFORCAodGVudGhvdXMgPSAzKSkKLSAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2Nh biBvbiB0ZW5rMV90aG91c190ZW50aG91cwotICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKCh0 aG91c2FuZCA9IDQyKSBBTkQgKHRlbnRob3VzID0gNDIpKQotKDkgcm93cykKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyB0ZW5r MV90aG91c190ZW50aG91cyBvbiB0ZW5rMQorICAgSW5kZXggQ29uZDogKCh0aG91c2FuZCA9IDQy KSBBTkQgKHRlbnRob3VzID0gQU5ZICgnezEsMyw0Mn0nOjppbnRlZ2VyW10pKSkKKygyIHJvd3Mp CiAKIFNFTEVDVCAqIEZST00gdGVuazEKICAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRo b3VzID0gMSBPUiB0ZW50aG91cyA9IDMgT1IgdGVudGhvdXMgPSA0Mik7CkBAIC0xODY0LDE0ICsx ODU3LDE2NiBAQCBTRUxFQ1QgKiBGUk9NIHRlbmsxCiAgICAgICA0MiB8ICAgIDU1MzAgfCAgIDAg fCAgICAyIHwgICAyIHwgICAgICAyIHwgICAgICA0MiB8ICAgICAgIDQyIHwgICAgICAgICAgNDIg fCAgICAgICAgNDIgfCAgICAgICA0MiB8ICA4NCB8ICAgODUgfCBRQkFBQUEgICB8IFNFSUFBQSAg IHwgT09PT3h4CiAoMSByb3cpCiAKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00g dGVuazEKKyAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91 cyA9IChTRUxFQ1QgMSArIDIpIE9SIHRlbnRob3VzID0gNDIpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNj YW4gdXNpbmcgdGVuazFfdGhvdXNfdGVudGhvdXMgb24gdGVuazEKKyAgIEluZGV4IENvbmQ6ICgo dGhvdXNhbmQgPSA0MikgQU5EICh0ZW50aG91cyA9IEFOWSAoQVJSQVlbMSwgKEluaXRQbGFuIDEp LmNvbDEsIDQyXSkpKQorICAgSW5pdFBsYW4gMQorICAgICAtPiAgUmVzdWx0CisoNCByb3dzKQor CitTRUxFQ1QgKiBGUk9NIHRlbmsxCisgIFdIRVJFIHRob3VzYW5kID0gNDIgQU5EICh0ZW50aG91 cyA9IDEgT1IgdGVudGhvdXMgPSAoU0VMRUNUIDEgKyAyKSBPUiB0ZW50aG91cyA9IDQyKTsKKyB1 bmlxdWUxIHwgdW5pcXVlMiB8IHR3byB8IGZvdXIgfCB0ZW4gfCB0d2VudHkgfCBodW5kcmVkIHwg dGhvdXNhbmQgfCB0d290aG91c2FuZCB8IGZpdmV0aG91cyB8IHRlbnRob3VzIHwgb2RkIHwgZXZl biB8IHN0cmluZ3UxIHwgc3RyaW5ndTIgfCBzdHJpbmc0IAorLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLSstLS0tLS0rLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tLS0tCisgICAgICA0MiB8ICAgIDU1MzAgfCAgIDAgfCAgICAyIHwgICAyIHwg ICAgICAyIHwgICAgICA0MiB8ICAgICAgIDQyIHwgICAgICAgICAgNDIgfCAgICAgICAgNDIgfCAg ICAgICA0MiB8ICA4NCB8ICAgODUgfCBRQkFBQUEgICB8IFNFSUFBQSAgIHwgT09PT3h4CisoMSBy b3cpCisKIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCiAg IFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5OSk7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBB Z2dyZWdhdGUKICAgIC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9uIHRlbmsxCi0gICAgICAgICBSZWNo ZWNrIENvbmQ6ICgoaHVuZHJlZCA9IDQyKSBBTkQgKCh0aG91c2FuZCA9IDQyKSBPUiAodGhvdXNh bmQgPSA5OSkpKQorICAgICAgICAgUmVjaGVjayBDb25kOiAoKGh1bmRyZWQgPSA0MikgQU5EICh0 aG91c2FuZCA9IEFOWSAoJ3s0Miw5OX0nOjppbnRlZ2VyW10pKSkKKyAgICAgICAgIC0+ICBCaXRt YXBBbmQKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV9odW5k cmVkCisgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaHVuZHJlZCA9IDQyKQorICAg ICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3Vz CisgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGhvdXNhbmQgPSBBTlkgKCd7NDIs OTl9Jzo6aW50ZWdlcltdKSkKKyg4IHJvd3MpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsx CisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5 OSk7CisgY291bnQgCistLS0tLS0tCisgICAgMTAKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSB0ZW5rMQorICBXSEVSRSB0aG91c2FuZCA9IDQyIEFORCAodGVu dGhvdXMgPSAxIE9SIHRlbnRob3VzID0gMyBPUiB0ZW50aG91cyA9IDQyKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyB0ZW5r MV90aG91c190ZW50aG91cyBvbiB0ZW5rMQorICAgSW5kZXggQ29uZDogKCh0aG91c2FuZCA9IDQy KSBBTkQgKHRlbnRob3VzID0gQU5ZICgnezEsMyw0Mn0nOjppbnRlZ2VyW10pKSkKKygyIHJvd3Mp CisKK1NFTEVDVCAqIEZST00gdGVuazEKKyAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRo b3VzID0gMSBPUiB0ZW50aG91cyA9IDMgT1IgdGVudGhvdXMgPSA0Mik7CisgdW5pcXVlMSB8IHVu aXF1ZTIgfCB0d28gfCBmb3VyIHwgdGVuIHwgdHdlbnR5IHwgaHVuZHJlZCB8IHRob3VzYW5kIHwg dHdvdGhvdXNhbmQgfCBmaXZldGhvdXMgfCB0ZW50aG91cyB8IG9kZCB8IGV2ZW4gfCBzdHJpbmd1 MSB8IHN0cmluZ3UyIHwgc3RyaW5nNCAKKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0rLS0tLS0t Ky0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLQorICAgICAgNDIgfCAgICA1NTMwIHwgICAwIHwgICAgMiB8ICAgMiB8ICAgICAgMiB8ICAg ICAgNDIgfCAgICAgICA0MiB8ICAgICAgICAgIDQyIHwgICAgICAgIDQyIHwgICAgICAgNDIgfCAg ODQgfCAgIDg1IHwgUUJBQUFBICAgfCBTRUlBQUEgICB8IE9PT094eAorKDEgcm93KQorCitFWFBM QUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5k cmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gOTkpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdh dGUKKyAgIC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9uIHRlbmsxCisgICAgICAgICBSZWNoZWNrIENv bmQ6ICgoaHVuZHJlZCA9IDQyKSBBTkQgKHRob3VzYW5kID0gQU5ZICgnezQyLDk5fSc6OmludGVn ZXJbXSkpKQorICAgICAgICAgLT4gIEJpdG1hcEFuZAorICAgICAgICAgICAgICAgLT4gIEJpdG1h cCBJbmRleCBTY2FuIG9uIHRlbmsxX2h1bmRyZWQKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4 IENvbmQ6IChodW5kcmVkID0gNDIpCisgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNj YW4gb24gdGVuazFfdGhvdXNfdGVudGhvdXMKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENv bmQ6ICh0aG91c2FuZCA9IEFOWSAoJ3s0Miw5OX0nOjppbnRlZ2VyW10pKQorKDggcm93cykKKwor U0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhv dXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9IDk5KTsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAxMAor KDEgcm93KQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5r MQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA8IDQyIE9SIHRob3VzYW5kIDwg OTkgT1IgNDMgPiB0aG91c2FuZCBPUiA0MiA+IHRob3VzYW5kKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdn cmVnYXRlCisgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0ZW5rMQorICAgICAgICAgUmVjaGVj ayBDb25kOiAoKGh1bmRyZWQgPSA0MikgQU5EICh0aG91c2FuZCA8IEFOWSAoJ3s0Miw5OSw0Myw0 Mn0nOjppbnRlZ2VyW10pKSkKKyAgICAgICAgIC0+ICBCaXRtYXBBbmQKKyAgICAgICAgICAgICAg IC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV9odW5kcmVkCisgICAgICAgICAgICAgICAg ICAgICBJbmRleCBDb25kOiAoaHVuZHJlZCA9IDQyKQorICAgICAgICAgICAgICAgLT4gIEJpdG1h cCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCisgICAgICAgICAgICAgICAgICAg ICBJbmRleCBDb25kOiAodGhvdXNhbmQgPCBBTlkgKCd7NDIsOTksNDMsNDJ9Jzo6aW50ZWdlcltd KSkKKyg4IHJvd3MpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRy ZWQgPSA0MiBBTkQgKHRob3VzYW5kIDwgNDIgT1IgdGhvdXNhbmQgPCA5OSBPUiA0MyA+IHRob3Vz YW5kIE9SIDQyID4gdGhvdXNhbmQpOworIGNvdW50IAorLS0tLS0tLQorICAgIDEwCisoMSByb3cp CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdI RVJFIHRob3VzYW5kID0gNDIgQU5EICh0ZW50aG91cyA9IDEgT1IgdGVudGhvdXMgPSAzKSBPUiB0 aG91c2FuZCA9IDQxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg QWdncmVnYXRlCisgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0ZW5rMQorICAgICAgICAgUmVj aGVjayBDb25kOiAoKCh0aG91c2FuZCA9IDQyKSBBTkQgKHRlbnRob3VzID0gQU5ZICgnezEsM30n OjppbnRlZ2VyW10pKSkgT1IgKHRob3VzYW5kID0gNDEpKQorICAgICAgICAgLT4gIEJpdG1hcE9y CisgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdGhvdXNfdGVu dGhvdXMKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICgodGhvdXNhbmQgPSA0Mikg QU5EICh0ZW50aG91cyA9IEFOWSAoJ3sxLDN9Jzo6aW50ZWdlcltdKSkpCisgICAgICAgICAgICAg ICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdGhvdXNfdGVudGhvdXMKKyAgICAgICAg ICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh0aG91c2FuZCA9IDQxKQorKDggcm93cykKKworU0VM RUNUIGNvdW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRo b3VzID0gMSBPUiB0ZW50aG91cyA9IDMpIE9SIHRob3VzYW5kID0gNDE7CisgY291bnQgCistLS0t LS0tCisgICAgMTAKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50 KCopIEZST00gdGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBP UiB0aG91c2FuZCA9IDk5IE9SIHRlbnRob3VzIDwgMikgT1IgdGhvdXNhbmQgPSA0MTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0ZW5rMQor ICAgICAgICAgUmVjaGVjayBDb25kOiAoKChodW5kcmVkID0gNDIpIEFORCAoKHRob3VzYW5kID0g NDIpIE9SICh0aG91c2FuZCA9IDk5KSBPUiAodGVudGhvdXMgPCAyKSkpIE9SICh0aG91c2FuZCA9 IDQxKSkKKyAgICAgICAgIC0+ICBCaXRtYXBPcgorICAgICAgICAgICAgICAgLT4gIEJpdG1hcEFu ZAorICAgICAgICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX2h1 bmRyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChodW5kcmVkID0g NDIpCisgICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwT3IKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHRob3VzYW5kID0g NDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24g dGVuazFfdGhvdXNfdGVudGhvdXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElu ZGV4IENvbmQ6ICh0aG91c2FuZCA9IDk5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGVudGhvdXMgPCAyKQorICAgICAgICAg ICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCisgICAg ICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGhvdXNhbmQgPSA0MSkKKygxNiByb3dzKQor CitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0 aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gOTkgT1IgdGVudGhvdXMgPCAyKSBPUiB0aG91c2Fu ZCA9IDQxOworIGNvdW50IAorLS0tLS0tLQorICAgIDIwCisoMSByb3cpCisKK0VYUExBSU4gKENP U1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0 MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA0MSBPUiB0aG91c2FuZCA9IDk5IEFO RCB0ZW50aG91cyA9IDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIEJp dG1hcCBIZWFwIFNjYW4gb24gdGVuazEKKyAgICAgICAgIFJlY2hlY2sgQ29uZDogKChodW5kcmVk ID0gNDIpIEFORCAoKHRob3VzYW5kID0gNDIpIE9SICh0aG91c2FuZCA9IDQxKSBPUiAoKHRob3Vz YW5kID0gOTkpIEFORCAodGVudGhvdXMgPSAyKSkpKQogICAgICAgICAgLT4gIEJpdG1hcEFuZAog ICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX2h1bmRyZWQKICAg ICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChodW5kcmVkID0gNDIpCkBAIC0xODc5LDEx ICsyMDI0LDEzIEBAIFNFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCiAgICAgICAgICAgICAgICAg ICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdGhvdXNfdGVudGhvdXMKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh0aG91c2FuZCA9IDQyKQogICAgICAg ICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRo b3VzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGhvdXNhbmQgPSA5 OSkKLSgxMSByb3dzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHRo b3VzYW5kID0gNDEpCisgICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4g b24gdGVuazFfdGhvdXNfdGVudGhvdXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4 IENvbmQ6ICgodGhvdXNhbmQgPSA5OSkgQU5EICh0ZW50aG91cyA9IDIpKQorKDEzIHJvd3MpCiAK IFNFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCi0gIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRo b3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5OSk7CisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQg KHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA0MSBPUiB0aG91c2FuZCA9IDk5IEFORCB0ZW50 aG91cyA9IDIpOwogIGNvdW50IAogLS0tLS0tLQogICAgIDEwCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9q b2luLm91dAppbmRleCA1M2Y3MGQ3MmVkNi4uYWJlOThmZjNjNTMgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9qb2luLm91dApAQCAtNDI3OCwxNSArNDI3OCw2NCBAQCBzZWxlY3QgKiBmcm9tIHRlbmsx IGEgam9pbiB0ZW5rMSBiIG9uCiAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaHVu ZHJlZCA9IDQpCiAgICAtPiAgTWF0ZXJpYWxpemUKICAgICAgICAgIC0+ICBCaXRtYXAgSGVhcCBT Y2FuIG9uIHRlbmsxIGEKLSAgICAgICAgICAgICAgIFJlY2hlY2sgQ29uZDogKCh1bmlxdWUxID0g MSkgT1IgKHVuaXF1ZTIgPSAzKSBPUiAodW5pcXVlMiA9IDcpKQorICAgICAgICAgICAgICAgUmVj aGVjayBDb25kOiAoKHVuaXF1ZTEgPSAxKSBPUiAodW5pcXVlMiA9IEFOWSAoJ3szLDd9Jzo6aW50 ZWdlcltdKSkpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICgodW5pcXVlMSA9IDEpIE9SICh1bmlx dWUyID0gMykgT1IgKHVuaXF1ZTIgPSA3KSkKICAgICAgICAgICAgICAgIC0+ICBCaXRtYXBPcgog ICAgICAgICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3VuaXF1 ZTEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUxID0gMSkK ICAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV91bmlx dWUyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMiA9IDMp CisgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMiA9IEFOWSAo J3szLDd9Jzo6aW50ZWdlcltdKSkKKygxOCByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpCitz ZWxlY3QgKiBmcm9tIHRlbmsxIGEgam9pbiB0ZW5rMSBiIG9uCisgIChhLnVuaXF1ZTEgPSAxIGFu ZCBiLnVuaXF1ZTEgPSAyKSBvcgorICAoKGEudW5pcXVlMiA9IDMgb3IgYS51bmlxdWUyID0gNykg YW5kIGIuaHVuZHJlZCA9IDQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZp bHRlcjogKCgoYS51bmlxdWUxID0gMSkgQU5EIChiLnVuaXF1ZTEgPSAyKSkgT1IgKCgoYS51bmlx dWUyID0gMykgT1IgKGEudW5pcXVlMiA9IDcpKSBBTkQgKGIuaHVuZHJlZCA9IDQpKSkKKyAgIC0+ ICBCaXRtYXAgSGVhcCBTY2FuIG9uIHRlbmsxIGIKKyAgICAgICAgIFJlY2hlY2sgQ29uZDogKCh1 bmlxdWUxID0gMikgT1IgKGh1bmRyZWQgPSA0KSkKKyAgICAgICAgIC0+ICBCaXRtYXBPcgorICAg ICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3VuaXF1ZTEKKyAgICAg ICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUxID0gMikKKyAgICAgICAgICAgICAg IC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV9odW5kcmVkCisgICAgICAgICAgICAgICAg ICAgICBJbmRleCBDb25kOiAoaHVuZHJlZCA9IDQpCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAg ICAgIC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9uIHRlbmsxIGEKKyAgICAgICAgICAgICAgIFJlY2hl Y2sgQ29uZDogKCh1bmlxdWUxID0gMSkgT1IgKHVuaXF1ZTIgPSBBTlkgKCd7Myw3fSc6OmludGVn ZXJbXSkpKQorICAgICAgICAgICAgICAgRmlsdGVyOiAoKHVuaXF1ZTEgPSAxKSBPUiAodW5pcXVl MiA9IDMpIE9SICh1bmlxdWUyID0gNykpCisgICAgICAgICAgICAgICAtPiAgQml0bWFwT3IKKyAg ICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV91bmlxdWUx CisgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMSA9IDEpCiAg ICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdW5pcXVl MgotICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTIgPSA3KQot KDE5IHJvd3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVl MiA9IEFOWSAoJ3szLDd9Jzo6aW50ZWdlcltdKSkKKygxOCByb3dzKQorCitleHBsYWluIChjb3N0 cyBvZmYpCitzZWxlY3QgKiBmcm9tIHRlbmsxIGEgam9pbiB0ZW5rMSBiIG9uCisgIChhLnVuaXF1 ZTEgPCAyMCBvciBhLnVuaXF1ZTEgPSAzIG9yIGEudW5pcXVlMSA9IDEgYW5kIGIudW5pcXVlMSA9 IDIpIG9yCisgICgoYS51bmlxdWUyID0gMyBvciBhLnVuaXF1ZTIgPSA3KSBhbmQgYi5odW5kcmVk ID0gNCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAg IEpvaW4gRmlsdGVyOiAoKGEudW5pcXVlMSA8IDIwKSBPUiAoYS51bmlxdWUxID0gMykgT1IgKChh LnVuaXF1ZTEgPSAxKSBBTkQgKGIudW5pcXVlMSA9IDIpKSBPUiAoKChhLnVuaXF1ZTIgPSAzKSBP UiAoYS51bmlxdWUyID0gNykpIEFORCAoYi5odW5kcmVkID0gNCkpKQorICAgLT4gIFNlcSBTY2Fu IG9uIHRlbmsxIGIKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIEJpdG1hcCBIZWFw IFNjYW4gb24gdGVuazEgYQorICAgICAgICAgICAgICAgUmVjaGVjayBDb25kOiAoKHVuaXF1ZTEg PCAyMCkgT1IgKHVuaXF1ZTEgPSAzKSBPUiAodW5pcXVlMSA9IDEpIE9SICh1bmlxdWUyID0gQU5Z ICgnezMsN30nOjppbnRlZ2VyW10pKSkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKCh1bmlxdWUx IDwgMjApIE9SICh1bmlxdWUxID0gMykgT1IgKHVuaXF1ZTEgPSAxKSBPUiAodW5pcXVlMiA9IDMp IE9SICh1bmlxdWUyID0gNykpCisgICAgICAgICAgICAgICAtPiAgQml0bWFwT3IKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV91bmlxdWUxCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMSA8IDIwKQorICAgICAg ICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3VuaXF1ZTEKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUxID0gMykKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV91bmlxdWUxCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMSA9IDEpCisgICAg ICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdW5pcXVlMgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTIgPSBBTlkgKCd7 Myw3fSc6OmludGVnZXJbXSkpCisoMTYgcm93cykKIAogLS0KIC0tIHRlc3QgcGxhY2VtZW50IG9m IG1vdmFibGUgcXVhbHMgaW4gYSBwYXJhbWV0ZXJpemVkIGpvaW4gdHJlZQpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2NyZWF0ZV9pbmRleC5zcWwKaW5kZXggZTI5Njg5MWNhYjguLmY3NGFkNDE1ZmJmIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsCisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwKQEAgLTcyNiw2ICs3MjYsMjQgQEAgRFJP UCBUQUJMRSBvbmVrX3dpdGhfbnVsbDsKIC0tIENoZWNrIGJpdG1hcCBpbmRleCBwYXRoIHBsYW5u aW5nCiAtLQogCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHRlbmsxCisgIFdI RVJFIHRob3VzYW5kID0gNDIgQU5EICh0ZW50aG91cyA9IDEgT1IgdGVudGhvdXMgPSAzIE9SIHRl bnRob3VzID0gNDIpOworU0VMRUNUICogRlJPTSB0ZW5rMQorICBXSEVSRSB0aG91c2FuZCA9IDQy IEFORCAodGVudGhvdXMgPSAxIE9SIHRlbnRob3VzID0gMyBPUiB0ZW50aG91cyA9IDQyKTsKKwor RVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSB0ZW5rMQorICBXSEVSRSB0aG91c2Fu ZCA9IDQyIEFORCAodGVudGhvdXMgPSAxIE9SIHRlbnRob3VzID0gKFNFTEVDVCAxICsgMikgT1Ig dGVudGhvdXMgPSA0Mik7CitTRUxFQ1QgKiBGUk9NIHRlbmsxCisgIFdIRVJFIHRob3VzYW5kID0g NDIgQU5EICh0ZW50aG91cyA9IDEgT1IgdGVudGhvdXMgPSAoU0VMRUNUIDEgKyAyKSBPUiB0ZW50 aG91cyA9IDQyKTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00g dGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0aG91c2Fu ZCA9IDk5KTsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0 MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5OSk7CisKIEVYUExBSU4gKENPU1RT IE9GRikKIFNFTEVDVCAqIEZST00gdGVuazEKICAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRl bnRob3VzID0gMSBPUiB0ZW50aG91cyA9IDMgT1IgdGVudGhvdXMgPSA0Mik7CkBAIC03MzgsNiAr NzU2LDMwIEBAIFNFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCiBTRUxFQ1QgY291bnQoKikgRlJP TSB0ZW5rMQogICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3Vz YW5kID0gOTkpOwogCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikgRlJPTSB0 ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA8IDQyIE9SIHRob3VzYW5k IDwgOTkgT1IgNDMgPiB0aG91c2FuZCBPUiA0MiA+IHRob3VzYW5kKTsKK1NFTEVDVCBjb3VudCgq KSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kIDwgNDIgT1Ig dGhvdXNhbmQgPCA5OSBPUiA0MyA+IHRob3VzYW5kIE9SIDQyID4gdGhvdXNhbmQpOworCitFWFBM QUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSB0aG91 c2FuZCA9IDQyIEFORCAodGVudGhvdXMgPSAxIE9SIHRlbnRob3VzID0gMykgT1IgdGhvdXNhbmQg PSA0MTsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIHRob3VzYW5kID0gNDIg QU5EICh0ZW50aG91cyA9IDEgT1IgdGVudGhvdXMgPSAzKSBPUiB0aG91c2FuZCA9IDQxOworCitF WFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSBo dW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gOTkgT1IgdGVudGhv dXMgPCAyKSBPUiB0aG91c2FuZCA9IDQxOworU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAg V0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9IDk5IE9S IHRlbnRob3VzIDwgMikgT1IgdGhvdXNhbmQgPSA0MTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhv dXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9IDQxIE9SIHRob3VzYW5kID0gOTkgQU5EIHRlbnRob3Vz ID0gMik7CitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIg QU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gNDEgT1IgdGhvdXNhbmQgPSA5OSBBTkQg dGVudGhvdXMgPSAyKTsKKwogLS0KIC0tIENoZWNrIGJlaGF2aW9yIHdpdGggZHVwbGljYXRlIGlu ZGV4IGNvbHVtbiBjb250ZW50cwogLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2pvaW4uc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbi5zcWwKaW5kZXggZDgxZmY2M2Jl NTMuLjQ0NzNiOGYwNGQ1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNx bAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbApAQCAtMTQzMyw2ICsxNDMzLDE1 IEBAIHNlbGVjdCAqIGZyb20gdGVuazEgYSBqb2luIHRlbmsxIGIgb24KICAgKGEudW5pcXVlMSA9 IDEgYW5kIGIudW5pcXVlMSA9IDIpIG9yCiAgICgoYS51bmlxdWUyID0gMyBvciBhLnVuaXF1ZTIg PSA3KSBhbmQgYi5odW5kcmVkID0gNCk7CiAKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAq IGZyb20gdGVuazEgYSBqb2luIHRlbmsxIGIgb24KKyAgKGEudW5pcXVlMSA9IDEgYW5kIGIudW5p cXVlMSA9IDIpIG9yCisgICgoYS51bmlxdWUyID0gMyBvciBhLnVuaXF1ZTIgPSA3KSBhbmQgYi5o dW5kcmVkID0gNCk7CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHRlbmsxIGEg am9pbiB0ZW5rMSBiIG9uCisgIChhLnVuaXF1ZTEgPCAyMCBvciBhLnVuaXF1ZTEgPSAzIG9yIGEu dW5pcXVlMSA9IDEgYW5kIGIudW5pcXVlMSA9IDIpIG9yCisgICgoYS51bmlxdWUyID0gMyBvciBh LnVuaXF1ZTIgPSA3KSBhbmQgYi5odW5kcmVkID0gNCk7CisKIC0tCiAtLSB0ZXN0IHBsYWNlbWVu dCBvZiBtb3ZhYmxlIHF1YWxzIGluIGEgcGFyYW1ldGVyaXplZCBqb2luIHRyZWUKIC0tCmRpZmYg LS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGI0ZDdmOTIxN2NlLi45OTJjODBmOTM1MCAxMDA2NDQK LS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE3MTcsNiArMTcxNyw3IEBAIE51bWVyaWNWYXIKIE9N X3VpbnQzMgogT1AKIE9TQVBlckdyb3VwU3RhdGUKK09yQ2xhdXNlR3JvdXAKIE9TQVBlclF1ZXJ5 U3RhdGUKIE9TSW5mbwogT1NTTENpcGhlcgotLSAKMi4zOS4zIChBcHBsZSBHaXQtMTQ1KQoK --0000000000005e45d4061d6630af--