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.96) (envelope-from ) id 1wAYvd-0005gb-1f for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 19:51:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wAYvb-001rLP-1H for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 19:51:08 +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.96) (envelope-from ) id 1wAYva-001rL8-3D for pgsql-hackers@lists.postgresql.org; Wed, 08 Apr 2026 19:51:07 +0000 Received: from mail-yx1-xb129.google.com ([2607:f8b0:4864:20::b129]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wAYvZ-000000003fv-2rmz for pgsql-hackers@lists.postgresql.org; Wed, 08 Apr 2026 19:51:07 +0000 Received: by mail-yx1-xb129.google.com with SMTP id 956f58d0204a3-64eaf8aa893so131882d50.3 for ; Wed, 08 Apr 2026 12:51:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775677863; cv=none; d=google.com; s=arc-20240605; b=EfwRbWiIqAv5KEeCt4mBy8hdHHmljqvCJqEVrrhhWy63VLx9PyEZvGBEjG8ND4ZIKJ +j9N26HgY6iWE3jZdte/z4n+GeTqvCyW4D25i5+0fOOfjmbXQP/Sves1fS4v1fWuaQIK wcTePklmfAeL6rvDSbDh92v+Cst0e7U8BZXlkcqmXaERbxAnkxWEDbyAFTpoAO9DgBnk iY5sMuuR8rmAfUTyrVy4QKFsFNYuPa3cT8C6BOGuaDVgZaX9M6x42kwqyYkiuc7tLQ0i qytjOssEkxMVITTSrYO5O9zPfTDfiLCyM8o5URj74SOob2n6r0fNMt4VHhKOfIsN/O86 D/Vw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=H9+AuqZFTKde4Z2b8UJIeFPT+xlf15noUFxASXd5+is=; fh=HlUBAWPH7C1QZPM7AZEptaxvSkTPp5HmUU+0MGBbsv0=; b=VcjlKxujr7ZY85KlpWWaOFjJIme5u/eQ51lbUuttmAcSeLlTUEQ7iylTnOv1XDo9pD LcgLOxvVauBywy8Q2HvjuiQF5IbVN2981yAistklxKT07znEk+29oX1Tq1EKCGBfSfU+ 1g0pEtUdAQFF90S1pWMOTdlSz9agYro/lCMgssmuxrMfUUV3QNZHsQZvNlaU043IcOjy edD750BhXpNg5hulULbEz3hZ0kWjO1eQvNP3kabffhPpSsf/EWDcfBnBB08CzyEjGtrr HifFMssXjbB7tCp98n3U3Svlo9Xdtp86N5LBBatq8tUpdOwL2NQxPisIWGbkMG+cG3+U QpDA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775677863; x=1776282663; darn=lists.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=H9+AuqZFTKde4Z2b8UJIeFPT+xlf15noUFxASXd5+is=; b=AWa3/HeHZC1IfZO44bENtG5h7yE/c6F1QxgoU5tBOY9WUDrT5u2HIQ2YZk13gW7nSU G3F20hyt6FrOG/1RdsA0yVByb4W1+8KPV/js2Nvc8hm87Mj9NPHn+N+WTAm8x9ZWfLbP 7r41TsW+xipS2rdiGF1Ho8S5R9QyO1F9ockY1j7la+IAmHcxjune7KMVjpFrXNZp2IFB PBFbtz+I3IzukUctNcDQIgCjvsbC9pq2S/bzRF9JVhLpS5CqtXFb54Z3oO5zZy6dUP+V QpjdRPw7g8pcPYJ7HlGvfYyBR4PbVYQEAYTJsf/bzCPSLkID+fmRd62zdbk2/9O8PVz/ VJrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775677863; x=1776282663; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=H9+AuqZFTKde4Z2b8UJIeFPT+xlf15noUFxASXd5+is=; b=ICwbF2e/WO/aI2UnFtEjdBn0EAmBs+X+VqztAr0/w9cmZEjywsdYTWWa1lw/IgevA+ QT10cbZRo01LmavvbcsUMX46UQ8tL44ibJnsJLbOYu2bPIICl0VJ/gljMSFftnYs87lW eeT0e4A53X2RcmgBCzeh7S0zMOCn4iTocmeEGwZhoabmMccU4WQOKTesbXoYsEcpPCQN V8rbFaNKc9S5KK3PkTL6maBvBD8mCMcG8eF/YYvEH6SAuNBlHO6uyVkbflA4imdlolCY wUkMq4Id+Q7/fNZ8XliBvXle2cTCE7blOZixVjnXPJ1HHWeSYH2558HfqYo1fVe+AERy NhqA== X-Forwarded-Encrypted: i=1; AJvYcCUllkvmmdOGLiKxRqbQ/zD4oS15f8Lu0IP7RGhUct87yFgblWOgPrVvok+Tby0kdJM1yaeXZbmQGRqovX7X@lists.postgresql.org X-Gm-Message-State: AOJu0Yx6syGMOeSXZOVtzz1qFoTSdpHzzP0CzNN8olUsUaIH5DVUoOrN qjKmmFRyFCxkkaYJDGW3UeDeuneZl9EirgG89n9HdBm2ZkCX/S7gMRTKKVRlI4wO3oOGXe55Z1j 9dDbwktWj8ILorZSQI4TDXonORdbRKD0= X-Gm-Gg: AeBDieu7ykZJw1fZ1Vefd2lGJfR2hzQLQFlu3480QqJ0XzG0A90XfNkWIBFA86uW1Vq za3JcqBXCT3cFwGg0YjPoGUQplAeAs6uIHsO8W0E6xp5+0U9Hit4YTQYnG9M1hSOpWBIU+4nbr8 xxxFIGs4w/aH2oJCCkhD+HPjToJdYoWh7Dx5uUWxrUl7fdCfvfdLK6e83jQtSajYvEz52JrDmnE 2Qjgc2eS/2YNq1Qxa3wI/3kGCTjeG6NaZphu7eMafgl290TLeTEeHe8/sckFgRYrciaJsiV7O2r JW80Dg+KChQgHCdoVeM44zV80VvxNDVe8gkD0a34Y4iDtumLqAA= X-Received: by 2002:a05:690e:120c:b0:650:211f:1d4 with SMTP id 956f58d0204a3-651877d7249mr709232d50.47.1775677862562; Wed, 08 Apr 2026 12:51:02 -0700 (PDT) MIME-Version: 1.0 References: <87r0hmvuvr.fsf@163.com> <8102ff5b-b156-409e-a48f-e53e63a39b36@eisentraut.org> <8734t6c5rh.fsf@163.com> <87o7bn7z56.fsf@163.com> <875xx197bp.fsf@163.com> <87ttk0lgcx.fsf@163.com> <8734m5fua1.fsf@163.com> <87a5dx4cfb.fsf@163.com> <7487A577-7BDC-4B94-9FFA-741E95439BFC@gmail.com> <873417fgc0.fsf@163.com> <87eckqz5i9.fsf@163.com> In-Reply-To: From: Haibo Yan Date: Wed, 8 Apr 2026 12:50:50 -0700 X-Gm-Features: AQROBzDJudKq09D2_qTQcx9pJhHY7AiUoHaN16armffM36fdQ12spUcaCI61c-s Message-ID: Subject: Re: Extract numeric filed in JSONB more effectively To: Andy Fan Cc: Dmitry Dolgov <9erthalion6@gmail.com>, David Rowley , Peter Eisentraut , Amit Langote , Alvaro Herrera , jian he , Chapman Flack , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000003c006f064ef8383a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003c006f064ef8383a Content-Type: multipart/alternative; boundary="0000000000003c006d064ef83838" --0000000000003c006d064ef83838 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Apr 7, 2026 at 6:21=E2=80=AFPM Haibo Yan wr= ote: > On Tue, Apr 7, 2026 at 5:00=E2=80=AFPM Andy Fan w= rote: > >> Haibo Yan writes: >> >> Hi Haibo, >> >> > I agree that if this approach is extended to the full matrix naively, >> > duplication will become a real issue. >> >> Could you summary how it would be? I think it would be helpful for >> others to review. Otherwise every reviewer needs to count them many >> times. >> >> -- >> Best Regards >> Andy Fan >> > Hi Andy, > Sure. > > My current thought is to extend it in stages, rather than trying to solve > the full matrix in a single patch. > > A rough plan would be: > > 1. Keep the current stage-1 patch small and validate the basic approach > first > > > - > > jsonb_object_field / -> / equivalent subscripting form > - > > casts to numeric and bool > - > > support-function rewrite directly to explicit typed extractor function= s > > 2. Extend target types before extending extractor families > > > - > > add int4 / int8 / float8 for the same object-field family first > - > > keep the SQL-visible rewrite targets explicit, e.g. > > - > > jsonb_object_field_int4 > - > > jsonb_object_field_int8 > - > > jsonb_object_field_float8 > > - > > avoid the previous numeric-intermediate rewrite shape > > 3. Then extend to other extractor families with the same overall pattern > > > - > > likely starting with jsonb_array_element and jsonb_extract_path > - > > and possibly jsonb_path_query_first later > - > > each family would still rewrite to explicit typed extractor entry > points, e.g. > > - > > jsonb_array_element_numeric > - > > jsonb_extract_path_bool > - > > jsonb_path_query_first_int4 > > > 4. Keep duplication manageable by sharing the implementation underneath > > > - > > keep the SQL/catalog-level rewrite targets explicit for readability > and reviewability > - > > but factor the C implementation into: > > - > > extractor-family lookup helpers > - > > target-type conversion helpers > - > > thin wrappers, possibly generated with small macros > > So the idea would be: explicit rewrite targets at the SQL/catalog level, > but shared lookup/conversion code underneath, instead of going back to th= e > earlier start/finish/internal pipeline. > > I agree that if this is extended naively across the full matrix, > duplication will become a real issue. My reason for keeping the current > patch narrow is that I wanted to first validate this simpler rewrite shap= e > on a small subset before deciding how best to scale it further. > > Regards, > > Haibo > > Hi all, Following up on our previous discussion, I want to clarify the current patch plan together with the updated first patch. Earlier I described this work roughly as a 4-patch line. After iterating on the implementation and trying to keep each step reviewable, I now think the cleaner split is a 5-patch series: 1. object-field casts to scalar types 2. array-element casts to scalar types 3. extract-path casts to scalar types 4. multi-subscript casts via extract-path lowering 5. jsonpath-first casts to scalar types (jsonb_path_query_first and _tz) The overall design is unchanged: use the cast function=E2=80=99s support ho= ok to recognize cast(extract(...)) over scalar-returning jsonb extraction functions, and rewrite that directly to explicit typed extractor calls. Supported target types remain: - numeric - bool - int4 - int8 - float8 One point I also want to make explicit is that I do not plan to include jsonb_path_query in this series. After looking at it more carefully, I do not think it fits the same model as the rest of the series. The patches here are all about scalar-returning extraction functions, where the cast prosupport hook can see and rewrite a scalar expression pair. jsonb_path_query is set-returning, so optimizing casts over it would likely need a different mechanism, probably at planner or executor level, rather than one more patch in this prosupport-based series. Attached here is the updated first patch in the current plan. This patch covers object-field extraction only: - jsonb_object_field - -> with text key - key subscripting and rewrites casts to: - numeric - bool - int4 - int8 - float8 to direct typed extractor calls. Thanks again for the earlier comments. I plan to send the remaining patches in follow-up emails in the order above. Regards, Haibo --0000000000003c006d064ef83838 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Tue, Apr 7, 2026 at 6:21=E2=80=AFPM Ha= ibo Yan <tristan.yim@gmail.com<= /a>> wrote:
Haibo Yan <tristan.yim@gmail.com> writes:

Hi Haibo,

> I agree that if this approach is extended to the full matrix naively,<= br> > duplication will become a real issue.

Could you summary how it would be? I think it would be helpful for
others to review.=C2=A0 Otherwise every reviewer needs to count them many times.

--
Best Regards
Andy Fan
Hi Andy,
Sure.

My current thought is to extend it in stages, rather than trying to solv= e the full matrix in a single patch.

A rough plan would be:

1. Keep the current stage-1 patch small and validate th= e basic approach first

  • jsonb_object_field / -> / equivalent subscr= ipting form

  • casts to numeric and bool

  • support-function rewrite directly to explicit typed extractor functions<= /p>

2. Extend target types before extending extractor families

<= span>

  • add int4 / int8 / float8 for the = same object-field family first

  • keep the SQL-visible rewrite targets explicit, e.g.

    • jsonb_object_field_int4

    • jsonb_object_field_int8

    • jsonb_object_field_float8

  • avoid the previous numeric-intermediate rewrite shape

3. Th= en extend to other extractor families with the same overall pattern

  • likely starting with jsonb_array_element and j= sonb_extract_path

  • and possibly jsonb_path_query_first later

  • each family would still rewrite to explicit typed extractor entry points= , e.g.

    • jsonb_array_element_numeric

    • jsonb_extract_path_bool

    • jsonb_path_query_first_int4

4. Keep duplication manageable by sharing the implementati= on underneath

  • keep the SQL/catalog-level rewrite targets explicit for readability and = reviewability

  • but factor the C implementation into:

    • extractor-family lookup helpers

    • target-type conversion helpers

    • thin wrappers, possibly generated with small macros

  • So the idea would be: explicit rewrite targets at the SQL/catalog level,= but shared lookup/conversion code underneath, instead of going back to the= earlier start/finish/internal pipeline.

    I agree that if this is extended naively across the full matrix, duplica= tion will become a real issue. My reason for keeping the current patch narr= ow is that I wanted to first validate this simpler rewrite shape on a small= subset before deciding how best to scale it further.

    Regards,

    Haibo


Hi all,

Following up on our previous discussion, I want to cl= arify the current patch plan together with the updated first patch.

Earlier I described this work roughly as a 4-patch li= ne. After iterating on the implementation and trying to keep each step revi= ewable, I now think the cleaner split is a 5-patch series:

    <= li>

    object-field casts to scalar types

  1. array-element casts to scalar types

  2. extract-path casts to scalar types

  3. multi-subscript casts via extract-path lowering

  4. jsonpath-first casts to scalar types (jsonb_path_query_first and _tz)

The overall design is unchanged: use the cast functio= n=E2=80=99s support hook to recognize cast(extract= (...)) over scalar-returning jsonb e= xtraction functions, and rewrite that directly to explicit typed extractor = calls.

Supported target types remain:

  • numeric
  • bool
  • int4
  • int8
  • float8

One point I also want to make explicit is that I do <= span class=3D"gmail-s3" style=3D"">not plan to include jsonb_path_query in this series.

After looking at it more carefully, I do not think it= fits the same model as the rest of the series. The patches here are all ab= out scalar-returning extraction functions, where the cast prosupport hook c= an see and rewrite a scalar expression pair. jsonb= _path_query is set-returning, so optimizing casts over it would like= ly need a different mechanism, probably at planner or executor level, rathe= r than one more patch in this prosupport-based series.

Attached here is the updated first patch in the curre= nt plan.

This patch covers object-field extraction only:

  • jsonb_obj= ect_field
  • -> with text key
  • <= li>key subscripting

and rewrites casts to:

  • numeric
  • bool
  • int4
  • int8
  • float8

to direct typed extractor calls.

Thanks again for the earlier comments. I plan to send= the remaining patches in follow-up emails in the order above.

Regards,

Haibo=C2=A0
--0000000000003c006d064ef83838-- --0000000000003c006f064ef8383a Content-Type: application/octet-stream; name="v4-0001-jsonb-optimize-object-field-casts-to-scalar-types.patch" Content-Disposition: attachment; filename="v4-0001-jsonb-optimize-object-field-casts-to-scalar-types.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnqgoqrm0 RnJvbSA3Mzg4M2QwNmNjMjAxMTcyMDUxNjBmYzIzNDIwYzA0N2Q0ZGQ4N2M5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIYWlibyBZYW4gPGhhaWJvLnlhbkBhcHBsZS5jb20+CkRhdGU6 IFRodSwgMiBBcHIgMjAyNiAyMToyMjo1NCAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjQgMS81XSBq c29uYjogb3B0aW1pemUgb2JqZWN0LWZpZWxkIGNhc3RzIHRvIHNjYWxhciB0eXBlcwoKRXh0ZW5k IHRoZSBleGlzdGluZyBzdXBwb3J0LWZ1bmN0aW9uIHJld3JpdGUgZm9yIGpzb25iIG9iamVjdC1m aWVsZApleHRyYWN0aW9uLCBpbmNsdWRpbmcganNvbmJfb2JqZWN0X2ZpZWxkKCksIC0+LCBhbmQg a2V5IHN1YnNjcmlwdGluZy4KClRoaXMga2VlcHMgb3JkaW5hcnkgU1FMIHN5bnRheCB1bmNoYW5n ZWQgYW5kIHJld3JpdGVzIHN1cHBvcnRlZCBjYXN0cwpkaXJlY3RseSB0byBleHBsaWNpdCB0eXBl ZCBleHRyYWN0b3IgZnVuY3Rpb25zIGZvciBudW1lcmljLCBib29sLAppbnQ0LCBpbnQ4LCBhbmQg ZmxvYXQ4LgoKQ28tYXV0aG9yZWQtYnk6IEFuZHkgRmFuIDx6aGlodWlmYW4xMjEzQDE2My5jb20+ Ci0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMgICAgICAgfCAxNDIgKysrKysrKysr KysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYyAgIHwgMTczICsrKysrKysrKysr KysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgIHwgIDM5ICsrLQogc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9qc29uYi5vdXQgfCAzNjggKysrKysrKysrKysrKysrKysrKysr KysrKysrLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmIuc3FsICAgICAgfCAgOTYgKysrKysr Ky0KIDUgZmlsZXMgY2hhbmdlZCwgODEwIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvanNvbmIuYwppbmRleCA4NjRjNWFjMWM4NS4uMjU0OTUwMDcwNzYgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYi5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9qc29uYi5jCkBAIC0xNyw2ICsxNyw5IEBACiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2lu Y2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVk ZSAibm9kZXMvbWFrZWZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisjaW5j bHVkZSAibm9kZXMvc3VwcG9ydG5vZGVzLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIK ICNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgogI2luY2x1ZGUgInV0aWxzL2pzb24uaCIKQEAg LTE4MTYsNiArMTgxOSwxNDUgQEAgY2Fubm90Q2FzdEpzb25iVmFsdWUoZW51bSBqYnZUeXBlIHR5 cGUsIGNvbnN0IGNoYXIgKnNxbHR5cGUsIE5vZGUgKmVzY29udGV4dCkKIAlyZXR1cm4gKERhdHVt KSAwOwogfQogCisvKgorICoganNvbmJfY2FzdF9zdXBwb3J0KCkKKyAqCisgKiBQbGFubmVyIHN1 cHBvcnQgZnVuY3Rpb24gZm9yIGpzb25iLXRvLXNjYWxhciBjYXN0IGZ1bmN0aW9ucywgYXR0YWNo ZWQgdmlhCisgKiBwcm9zdXBwb3J0IG9uIHRoZSBqc29uYl9udW1lcmljLCBqc29uYl9ib29sLCBq c29uYl9pbnQ0LCBqc29uYl9pbnQ4LCBhbmQKKyAqIGpzb25iX2Zsb2F0OCBjYXRhbG9nIGVudHJp ZXMuCisgKgorICogV2hlbiB0aGUgc29sZSBhcmd1bWVudCB0byB0aGUgY2FzdCBpcyBhIGpzb25i X29iamVjdF9maWVsZCgpIGNhbGwgKHRoZSAtPgorICogb3BlcmF0b3IpLCB3ZSByZXBsYWNlIHRo ZSB0d28tc3RlcCBjYXN0KGV4dHJhY3QoLi4uKSkgZXhwcmVzc2lvbiB3aXRoIGEKKyAqIHNpbmds ZSB0eXBlZCBleHRyYWN0b3IgdGhhdCByZWFkcyB0aGUgc2NhbGFyIGRpcmVjdGx5IGZyb20gdGhl IGluLW1lbW9yeQorICogSnNvbmJWYWx1ZSwgYXZvaWRpbmcgYSByb3VuZC10cmlwIHRocm91Z2gg SnNvbmJWYWx1ZVRvSnNvbmIuCisgKgorICogRm9yIGV4YW1wbGUsIChqIC0+ICdhJyk6Om51bWVy aWMgaXMgcGFyc2VkIGFzOgorICogICBqc29uYl9udW1lcmljKGpzb25iX29iamVjdF9maWVsZChq LCAnYScpKQorICogYW5kIGlzIHJld3JpdHRlbiB0bzoKKyAqICAganNvbmJfb2JqZWN0X2ZpZWxk X251bWVyaWMoaiwgJ2EnKQorICovCitEYXR1bQoranNvbmJfY2FzdF9zdXBwb3J0KFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJTm9kZQkgICAqcmF3cmVxID0gKE5vZGUgKikgUEdfR0VUQVJHX1BPSU5U RVIoMCk7CisJTm9kZQkgICAqcmV0ID0gTlVMTDsKKworCWlmIChJc0EocmF3cmVxLCBTdXBwb3J0 UmVxdWVzdFNpbXBsaWZ5KSkKKwl7CisJCVN1cHBvcnRSZXF1ZXN0U2ltcGxpZnkgKnJlcSA9IChT dXBwb3J0UmVxdWVzdFNpbXBsaWZ5ICopIHJhd3JlcTsKKwkJRnVuY0V4cHIgICAqZmV4cHIgPSBy ZXEtPmZjYWxsOworCQlOb2RlCSAgICphcmc7CisJCU9pZAkJCWlubmVyX2Z1bmNpZDsKKwkJTGlz dAkgICAqaW5uZXJfYXJnczsKKwkJaW50CQkJbG9jYXRpb247CisJCU9pZAkJCXJlcGxhY2VtZW50 X2Z1bmNpZDsKKwkJT2lkCQkJcmVwbGFjZW1lbnRfcmV0dHlwZTsKKwkJRnVuY0V4cHIgICAqbmV3 ZmV4cHI7CisKKwkJLyogVGhlIGNhc3QgZnVuY3Rpb24gbXVzdCBoYXZlIGV4YWN0bHkgb25lIGFy Z3VtZW50ICovCisJCWlmIChsaXN0X2xlbmd0aChmZXhwci0+YXJncykgIT0gMSkKKwkJCVBHX1JF VFVSTl9QT0lOVEVSKE5VTEwpOworCisJCWFyZyA9IChOb2RlICopIGxpbml0aWFsKGZleHByLT5h cmdzKTsKKworCQkvKgorCQkgKiBJZGVudGlmeSB0aGUgaW5uZXIgZXh0cmFjdGlvbiBleHByZXNz aW9uLiAgSXQgbWF5IGFwcGVhciBhcyBhCisJCSAqIEZ1bmNFeHByLCBhbiBPcEV4cHIsIG9yIGEg U3Vic2NyaXB0aW5nUmVmLCBkZXBlbmRpbmcgb24gaG93IHRoZQorCQkgKiBleHByZXNzaW9uIGlz IHJlcHJlc2VudGVkIGF0IHRoaXMgcG9pbnQuICBBY2NlcHQgdGhlIHN1cHBvcnRlZAorCQkgKiBm b3Jtcy4KKwkJICovCisJCWlmIChJc0EoYXJnLCBGdW5jRXhwcikpCisJCXsKKwkJCUZ1bmNFeHBy ICAgKmlubmVyID0gKEZ1bmNFeHByICopIGFyZzsKKworCQkJaW5uZXJfZnVuY2lkID0gaW5uZXIt PmZ1bmNpZDsKKwkJCWlubmVyX2FyZ3MgPSBpbm5lci0+YXJnczsKKwkJCWxvY2F0aW9uID0gaW5u ZXItPmxvY2F0aW9uOworCQl9CisJCWVsc2UgaWYgKElzQShhcmcsIE9wRXhwcikpCisJCXsKKwkJ CU9wRXhwcgkgICAqaW5uZXIgPSAoT3BFeHByICopIGFyZzsKKworCQkJaW5uZXJfZnVuY2lkID0g aW5uZXItPm9wZnVuY2lkOworCQkJaW5uZXJfYXJncyA9IGlubmVyLT5hcmdzOworCQkJbG9jYXRp b24gPSBpbm5lci0+bG9jYXRpb247CisJCX0KKwkJZWxzZSBpZiAoSXNBKGFyZywgU3Vic2NyaXB0 aW5nUmVmKSkKKwkJeworCQkJU3Vic2NyaXB0aW5nUmVmICpzYnNyZWYgPSAoU3Vic2NyaXB0aW5n UmVmICopIGFyZzsKKwkJCU5vZGUJICAgKnN1YnNjcmlwdDsKKworCQkJLyoKKwkJCSAqIE9ubHkg aGFuZGxlIHRoZSBuYXJyb3cgY2FzZSBlcXVpdmFsZW50IHRvIG9iamVjdC1maWVsZAorCQkJICog ZXh0cmFjdGlvbjogYSBzaW5nbGUgdGV4dC10eXBlZCBzdWJzY3JpcHQgb24gYSBqc29uYgorCQkJ ICogY29udGFpbmVyLCB3aXRoIG5vIHNsaWNlIGFuZCBubyBhc3NpZ25tZW50LgorCQkJICovCisJ CQlpZiAoc2JzcmVmLT5yZWZjb250YWluZXJ0eXBlICE9IEpTT05CT0lEKQorCQkJCVBHX1JFVFVS Tl9QT0lOVEVSKE5VTEwpOworCQkJaWYgKGxpc3RfbGVuZ3RoKHNic3JlZi0+cmVmdXBwZXJpbmRl eHByKSAhPSAxKQorCQkJCVBHX1JFVFVSTl9QT0lOVEVSKE5VTEwpOworCQkJaWYgKHNic3JlZi0+ cmVmbG93ZXJpbmRleHByICE9IE5JTCkKKwkJCQlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKKwkJ CWlmIChzYnNyZWYtPnJlZmFzc2duZXhwciAhPSBOVUxMKQorCQkJCVBHX1JFVFVSTl9QT0lOVEVS KE5VTEwpOworCisJCQlzdWJzY3JpcHQgPSAoTm9kZSAqKSBsaW5pdGlhbChzYnNyZWYtPnJlZnVw cGVyaW5kZXhwcik7CisJCQlpZiAoZXhwclR5cGUoc3Vic2NyaXB0KSAhPSBURVhUT0lEKQorCQkJ CVBHX1JFVFVSTl9QT0lOVEVSKE5VTEwpOworCisJCQlpbm5lcl9mdW5jaWQgPSBGX0pTT05CX09C SkVDVF9GSUVMRDsKKwkJCWlubmVyX2FyZ3MgPSBsaXN0X21ha2UyKHNic3JlZi0+cmVmZXhwciwg c3Vic2NyaXB0KTsKKwkJCWxvY2F0aW9uID0gZXhwckxvY2F0aW9uKGFyZyk7CisJCX0KKwkJZWxz ZQorCQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CisKKwkJLyogT25seSByZXdyaXRlIGpzb25i X29iamVjdF9maWVsZChqc29uYiwgdGV4dCk7IHZlcmlmeSBhcml0eSB0b28gKi8KKwkJaWYgKGlu bmVyX2Z1bmNpZCAhPSBGX0pTT05CX09CSkVDVF9GSUVMRCkKKwkJCVBHX1JFVFVSTl9QT0lOVEVS KE5VTEwpOworCQlpZiAobGlzdF9sZW5ndGgoaW5uZXJfYXJncykgIT0gMikKKwkJCVBHX1JFVFVS Tl9QT0lOVEVSKE5VTEwpOworCisJCS8qIE1hcCB0aGUgb3V0ZXIgY2FzdCB0byB0aGUgY29ycmVz cG9uZGluZyB0eXBlZCBleHRyYWN0b3IgKi8KKwkJaWYgKGZleHByLT5mdW5jaWQgPT0gRl9OVU1F UklDX0pTT05CKQorCQl7CisJCQlyZXBsYWNlbWVudF9mdW5jaWQgPSBGX0pTT05CX09CSkVDVF9G SUVMRF9OVU1FUklDOworCQkJcmVwbGFjZW1lbnRfcmV0dHlwZSA9IE5VTUVSSUNPSUQ7CisJCX0K KwkJZWxzZSBpZiAoZmV4cHItPmZ1bmNpZCA9PSBGX0JPT0xfSlNPTkIpCisJCXsKKwkJCXJlcGxh Y2VtZW50X2Z1bmNpZCA9IEZfSlNPTkJfT0JKRUNUX0ZJRUxEX0JPT0w7CisJCQlyZXBsYWNlbWVu dF9yZXR0eXBlID0gQk9PTE9JRDsKKwkJfQorCQllbHNlIGlmIChmZXhwci0+ZnVuY2lkID09IEZf SU5UNF9KU09OQikKKwkJeworCQkJcmVwbGFjZW1lbnRfZnVuY2lkID0gRl9KU09OQl9PQkpFQ1Rf RklFTERfSU5UNDsKKwkJCXJlcGxhY2VtZW50X3JldHR5cGUgPSBJTlQ0T0lEOworCQl9CisJCWVs c2UgaWYgKGZleHByLT5mdW5jaWQgPT0gRl9JTlQ4X0pTT05CKQorCQl7CisJCQlyZXBsYWNlbWVu dF9mdW5jaWQgPSBGX0pTT05CX09CSkVDVF9GSUVMRF9JTlQ4OworCQkJcmVwbGFjZW1lbnRfcmV0 dHlwZSA9IElOVDhPSUQ7CisJCX0KKwkJZWxzZSBpZiAoZmV4cHItPmZ1bmNpZCA9PSBGX0ZMT0FU OF9KU09OQikKKwkJeworCQkJcmVwbGFjZW1lbnRfZnVuY2lkID0gRl9KU09OQl9PQkpFQ1RfRklF TERfRkxPQVQ4OworCQkJcmVwbGFjZW1lbnRfcmV0dHlwZSA9IEZMT0FUOE9JRDsKKwkJfQorCQll bHNlCisJCQlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKKworCQkvKiBCdWlsZCB0aGUgcmVwbGFj ZW1lbnQgZnVuY3Rpb24gY2FsbCAqLworCQluZXdmZXhwciA9IG1ha2VGdW5jRXhwcihyZXBsYWNl bWVudF9mdW5jaWQsIHJlcGxhY2VtZW50X3JldHR5cGUsCisJCQkJCQkJCWlubmVyX2FyZ3MsIElu dmFsaWRPaWQsIEludmFsaWRPaWQsCisJCQkJCQkJCUNPRVJDRV9FWFBMSUNJVF9DQUxMKTsKKwkJ bmV3ZmV4cHItPmxvY2F0aW9uID0gbG9jYXRpb247CisJCXJldCA9IChOb2RlICopIG5ld2ZleHBy OworCX0KKworCVBHX1JFVFVSTl9QT0lOVEVSKHJldCk7Cit9CisKIERhdHVtCiBqc29uYl9ib29s KFBHX0ZVTkNUSU9OX0FSR1MpCiB7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQv anNvbmZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKaW5kZXggOTdj YzNkNjAzNDAuLmZmYzViODU2ZTEzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQv anNvbmZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jCkBAIC05 MjEsNiArOTIxLDE3OSBAQCBqc29uYl9vYmplY3RfZmllbGRfdGV4dChQR19GVU5DVElPTl9BUkdT KQogCVBHX1JFVFVSTl9OVUxMKCk7CiB9CiAKKy8qCisgKiBUeXBlZCBzY2FsYXIgZXh0cmFjdGlv biBmcm9tIGpzb25iIG9iamVjdCBmaWVsZHMuCisgKgorICogVGhlc2UgZnVuY3Rpb25zIGV4dHJh Y3QgYSB0eXBlZCBzY2FsYXIgZGlyZWN0bHkgZnJvbSB0aGUgaW4tbWVtb3J5CisgKiBKc29uYlZh bHVlIGZvdW5kIGJ5IGtleSBsb29rdXAsIHNraXBwaW5nIHRoZSBpbnRlcm1lZGlhdGUgSnNvbmIK KyAqIHNlcmlhbGl6YXRpb24gdGhhdCBvY2N1cnMgd2l0aCB0aGUgdW5vcHRpbWl6ZWQgY2FzdC1v dmVyLWV4dHJhY3Rpb24gcGF0aC4KKyAqCisgKiBUaGV5IGxpdmUgaGVyZSBhbG9uZ3NpZGUganNv bmJfb2JqZWN0X2ZpZWxkKCkgYmVjYXVzZSB0aGV5IHNoYXJlIHRoZQorICogc2FtZSBrZXktbG9v a3VwIGxvZ2ljIChnZXRLZXlKc29uVmFsdWVGcm9tQ29udGFpbmVyKS4KKyAqCisgKiBSZWdpc3Rl cmVkIGluIHBnX3Byb2MgYXMgb3JkaW5hcnkgU1FMLWNhbGxhYmxlIGJ1aWx0aW5zOyBhbHNvIHNl cnZlIGFzCisgKiBwbGFubmVyIHJld3JpdGUgdGFyZ2V0cyBmb3IganNvbmJfY2FzdF9zdXBwb3J0 KCkgaW4ganNvbmIuYy4KKyAqCisgKiBOVUxMIHNlbWFudGljcyBtYXRjaCB0aGUgZXhpc3Rpbmcg Y2FzdCBwYXRoOiBhIG1pc3Npbmcga2V5IG9yIGEgSlNPTgorICogbnVsbCB2YWx1ZSBib3RoIHBy b2R1Y2UgU1FMIE5VTEw7IGEgdHlwZSBtaXNtYXRjaCByYWlzZXMgRVJST1IuCisgKi8KKworLyoK KyAqIExvb2sgdXAgYSBrZXkgaW4gYSBqc29uYiBvYmplY3QgYW5kIHJldHVybiB0aGUgSnNvbmJW YWx1ZSwgb3IgTlVMTC4KKyAqIFJldHVybnMgTlVMTCAod2l0aG91dCBlcnJvcikgd2hlbiB0aGUg aW5wdXQgaXMgbm90IGFuIG9iamVjdCwgdGhlIGtleQorICogaXMgYWJzZW50LCBvciB0aGUgdmFs dWUgaXMgSlNPTiBudWxsLgorICovCitzdGF0aWMgSnNvbmJWYWx1ZSAqCitqc29uYl9vYmplY3Rf ZmllbGRfbG9va3VwKEpzb25iICpqYiwgdGV4dCAqa2V5LCBKc29uYlZhbHVlICp2YnVmKQorewor CUpzb25iVmFsdWUgKnY7CisKKwlpZiAoIUpCX1JPT1RfSVNfT0JKRUNUKGpiKSkKKwkJcmV0dXJu IE5VTEw7CisKKwl2ID0gZ2V0S2V5SnNvblZhbHVlRnJvbUNvbnRhaW5lcigmamItPnJvb3QsCisJ CQkJCQkJCQkgVkFSREFUQV9BTlkoa2V5KSwKKwkJCQkJCQkJCSBWQVJTSVpFX0FOWV9FWEhEUihr ZXkpLAorCQkJCQkJCQkJIHZidWYpOworCisJLyogTWlzc2luZyBrZXkgb3IgSlNPTiBudWxsIGJv dGggbWFwIHRvIFNRTCBOVUxMICovCisJaWYgKHYgPT0gTlVMTCB8fCB2LT50eXBlID09IGpidk51 bGwpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHY7Cit9CisKKy8qCisgKiBSYWlzZSBhIHR5 cGUtbWlzbWF0Y2ggZXJyb3IgZm9yIHR5cGVkIGZpZWxkIGV4dHJhY3Rpb24uCisgKgorICogVGhl IG1lc3NhZ2Ugd29yZGluZyBtYXRjaGVzIGNhbm5vdENhc3RKc29uYlZhbHVlKCkgaW4ganNvbmIu YyBzbyB0aGF0CisgKiB0aGUgb3B0aW1pemVkIGFuZCB1bm9wdGltaXplZCBwYXRocyBwcm9kdWNl IGlkZW50aWNhbCBlcnJvcnMuCisgKi8KK3N0YXRpYyB2b2lkCitqc29uYl9maWVsZF9jYXN0X2Vy cm9yKEpzb25iVmFsdWUgKnYsIGNvbnN0IGNoYXIgKnNxbHR5cGUpCit7CisJY29uc3QgY2hhciAq anNvbnR5cGU7CisKKwlzd2l0Y2ggKHYtPnR5cGUpCisJeworCQljYXNlIGpidk51bGw6CisJCQlq c29udHlwZSA9ICJudWxsIjsKKwkJCWJyZWFrOworCQljYXNlIGpidlN0cmluZzoKKwkJCWpzb250 eXBlID0gInN0cmluZyI7CisJCQlicmVhazsKKwkJY2FzZSBqYnZOdW1lcmljOgorCQkJanNvbnR5 cGUgPSAibnVtZXJpYyI7CisJCQlicmVhazsKKwkJY2FzZSBqYnZCb29sOgorCQkJanNvbnR5cGUg PSAiYm9vbGVhbiI7CisJCQlicmVhazsKKwkJY2FzZSBqYnZBcnJheToKKwkJCWpzb250eXBlID0g ImFycmF5IjsKKwkJCWJyZWFrOworCQljYXNlIGpidk9iamVjdDoKKwkJCWpzb250eXBlID0gIm9i amVjdCI7CisJCQlicmVhazsKKwkJY2FzZSBqYnZCaW5hcnk6CisJCQlqc29udHlwZSA9ICJhcnJh eSBvciBvYmplY3QiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5r bm93biBqc29uYiB0eXBlOiAlZCIsIChpbnQpIHYtPnR5cGUpOworCQkJanNvbnR5cGUgPSBOVUxM OwkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCisJfQorCisJZXJlcG9ydChFUlJPUiwKKwkJCShl cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJIGVycm1zZygiY2Fu bm90IGNhc3QganNvbmIgJXMgdG8gdHlwZSAlcyIsCisJCQkJCWpzb250eXBlLCBzcWx0eXBlKSkp OworfQorCisvKgorICogUGVyLXR5cGUgY29udmVyc2lvbiBoZWxwZXJzIGZvciB0eXBlZCBmaWVs ZCBleHRyYWN0aW9uLgorICoKKyAqIEVhY2ggdmFsaWRhdGVzIHRoZSBleHBlY3RlZCBKc29uYlZh bHVlIHR5cGUsIHJhaXNlcyBhIHR5cGUtbWlzbWF0Y2gKKyAqIGVycm9yICh2aWEganNvbmJfZmll bGRfY2FzdF9lcnJvcikgaWYgd3JvbmcsIGFuZCByZXR1cm5zIHRoZSBjb252ZXJ0ZWQKKyAqIHZh bHVlIGFzIERhdHVtLiAgVGhlc2UgYXJlIHRoZSBvbmx5IHBsYWNlIHdoZXJlIGNvbnZlcnNpb24g c2VtYW50aWNzCisgKiBsaXZlOyB0aGUgd3JhcHBlciBtYWNybyBiZWxvdyBpcyBpbnRlbnRpb25h bGx5IGtlcHQgdGhpbi4KKyAqLworc3RhdGljIERhdHVtCitqc29uYl92YWx1ZV90b19udW1lcmlj X2RhdHVtKEpzb25iVmFsdWUgKnYpCit7CisJaWYgKHYtPnR5cGUgIT0gamJ2TnVtZXJpYykKKwkJ anNvbmJfZmllbGRfY2FzdF9lcnJvcih2LCAibnVtZXJpYyIpOworCisJcmV0dXJuIE51bWVyaWNH ZXREYXR1bShEYXR1bUdldE51bWVyaWNDb3B5KE51bWVyaWNHZXREYXR1bSh2LT52YWwubnVtZXJp YykpKTsKK30KKworc3RhdGljIERhdHVtCitqc29uYl92YWx1ZV90b19ib29sX2RhdHVtKEpzb25i VmFsdWUgKnYpCit7CisJaWYgKHYtPnR5cGUgIT0gamJ2Qm9vbCkKKwkJanNvbmJfZmllbGRfY2Fz dF9lcnJvcih2LCAiYm9vbGVhbiIpOworCisJcmV0dXJuIEJvb2xHZXREYXR1bSh2LT52YWwuYm9v bGVhbik7Cit9CisKK3N0YXRpYyBEYXR1bQoranNvbmJfdmFsdWVfdG9faW50NF9kYXR1bShKc29u YlZhbHVlICp2KQoreworCWlmICh2LT50eXBlICE9IGpidk51bWVyaWMpCisJCWpzb25iX2ZpZWxk X2Nhc3RfZXJyb3IodiwgImludGVnZXIiKTsKKworCXJldHVybiBEaXJlY3RGdW5jdGlvbkNhbGwx KG51bWVyaWNfaW50NCwgTnVtZXJpY0dldERhdHVtKHYtPnZhbC5udW1lcmljKSk7Cit9CisKK3N0 YXRpYyBEYXR1bQoranNvbmJfdmFsdWVfdG9faW50OF9kYXR1bShKc29uYlZhbHVlICp2KQorewor CWlmICh2LT50eXBlICE9IGpidk51bWVyaWMpCisJCWpzb25iX2ZpZWxkX2Nhc3RfZXJyb3Iodiwg ImJpZ2ludCIpOworCisJcmV0dXJuIERpcmVjdEZ1bmN0aW9uQ2FsbDEobnVtZXJpY19pbnQ4LCBO dW1lcmljR2V0RGF0dW0odi0+dmFsLm51bWVyaWMpKTsKK30KKworc3RhdGljIERhdHVtCitqc29u Yl92YWx1ZV90b19mbG9hdDhfZGF0dW0oSnNvbmJWYWx1ZSAqdikKK3sKKwlpZiAodi0+dHlwZSAh PSBqYnZOdW1lcmljKQorCQlqc29uYl9maWVsZF9jYXN0X2Vycm9yKHYsICJkb3VibGUgcHJlY2lz aW9uIik7CisKKwlyZXR1cm4gRGlyZWN0RnVuY3Rpb25DYWxsMShudW1lcmljX2Zsb2F0OCwgTnVt ZXJpY0dldERhdHVtKHYtPnZhbC5udW1lcmljKSk7Cit9CisKKy8qCisgKiBUaGluLXdyYXBwZXIg bWFjcm8gZm9yIHRoZSBqc29uYl9vYmplY3RfZmllbGRfPHR5cGU+IGV4dHJhY3RvciBmYW1pbHku CisgKiBSZWR1Y2VzIHJlcGV0aXRpb246IGVhY2ggd3JhcHBlciBkb2VzIGxvb2t1cCwgTlVMTCBo YW5kbGluZywgYW5kIGRlbGVnYXRlcworICogdG8gYSB0eXBlLXNwZWNpZmljIGNvbnZlcnNpb24g aGVscGVyIHRoYXQgaG9sZHMgdGhlIGFjdHVhbCBzZW1hbnRpY3MuCisgKi8KKyNkZWZpbmUgREVG SU5FX0pTT05CX09CSkVDVF9GSUVMRF9UWVBFRChmbmFtZSwgY29udmZuKSBcCitEYXR1bSBcCitm bmFtZShQR19GVU5DVElPTl9BUkdTKSBcCit7IFwKKwlKc29uYgkgICAqamIgPSBQR19HRVRBUkdf SlNPTkJfUCgwKTsgXAorCXRleHQJICAgKmtleSA9IFBHX0dFVEFSR19URVhUX1BQKDEpOyBcCisJ SnNvbmJWYWx1ZQl2YnVmOyBcCisJSnNvbmJWYWx1ZSAqdjsgXAorCURhdHVtCQlyZXN1bHQ7IFwK K1wKKwl2ID0ganNvbmJfb2JqZWN0X2ZpZWxkX2xvb2t1cChqYiwga2V5LCAmdmJ1Zik7IFwKKwlp ZiAodiA9PSBOVUxMKSBcCisJeyBcCisJCVBHX0ZSRUVfSUZfQ09QWShqYiwgMCk7IFwKKwkJUEdf UkVUVVJOX05VTEwoKTsgXAorCX0gXAorXAorCXJlc3VsdCA9IGNvbnZmbih2KTsgXAorCVBHX0ZS RUVfSUZfQ09QWShqYiwgMCk7IFwKKwlyZXR1cm4gcmVzdWx0OyBcCit9CisKK0RFRklORV9KU09O Ql9PQkpFQ1RfRklFTERfVFlQRUQoanNvbmJfb2JqZWN0X2ZpZWxkX251bWVyaWMsIGpzb25iX3Zh bHVlX3RvX251bWVyaWNfZGF0dW0pCitERUZJTkVfSlNPTkJfT0JKRUNUX0ZJRUxEX1RZUEVEKGpz b25iX29iamVjdF9maWVsZF9ib29sLCBqc29uYl92YWx1ZV90b19ib29sX2RhdHVtKQorREVGSU5F X0pTT05CX09CSkVDVF9GSUVMRF9UWVBFRChqc29uYl9vYmplY3RfZmllbGRfaW50NCwganNvbmJf dmFsdWVfdG9faW50NF9kYXR1bSkKK0RFRklORV9KU09OQl9PQkpFQ1RfRklFTERfVFlQRUQoanNv bmJfb2JqZWN0X2ZpZWxkX2ludDgsIGpzb25iX3ZhbHVlX3RvX2ludDhfZGF0dW0pCitERUZJTkVf SlNPTkJfT0JKRUNUX0ZJRUxEX1RZUEVEKGpzb25iX29iamVjdF9maWVsZF9mbG9hdDgsIGpzb25i X3ZhbHVlX3RvX2Zsb2F0OF9kYXR1bSkKKwogRGF0dW0KIGpzb25fYXJyYXlfZWxlbWVudChQR19G VU5DVElPTl9BUkdTKQogewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggZmE5YWU3OTA4MmIu LmUwYmNmZjQ2NDQxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTQ3OTgsMjUgKzQ3OTgs MjggQEAKICAgcHJvc3JjID0+ICdudW1lcmljX3BnX2xzbicgfSwKIAogeyBvaWQgPT4gJzM1NTYn LCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBib29sZWFuJywKLSAgcHJvbmFtZSA9PiAnYm9v bCcsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLCBwcm9hcmd0eXBlcyA9PiAnanNvbmInLAorICBwcm9u YW1lID0+ICdib29sJywgcHJvc3VwcG9ydCA9PiAnanNvbmJfY2FzdF9zdXBwb3J0JywgcHJvcmV0 dHlwZSA9PiAnYm9vbCcsIHByb2FyZ3R5cGVzID0+ICdqc29uYicsCiAgIHByb3NyYyA9PiAnanNv bmJfYm9vbCcgfSwKIHsgb2lkID0+ICczNDQ5JywgZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIgdG8g bnVtZXJpYycsCi0gIHByb25hbWUgPT4gJ251bWVyaWMnLCBwcm9yZXR0eXBlID0+ICdudW1lcmlj JywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywKKyAgcHJvbmFtZSA9PiAnbnVtZXJpYycsIHByb3N1 cHBvcnQgPT4gJ2pzb25iX2Nhc3Rfc3VwcG9ydCcsIHByb3JldHR5cGUgPT4gJ251bWVyaWMnLCBw cm9hcmd0eXBlcyA9PiAnanNvbmInLAogICBwcm9zcmMgPT4gJ2pzb25iX251bWVyaWMnIH0sCiB7 IG9pZCA9PiAnMzQ1MCcsIGRlc2NyID0+ICdjb252ZXJ0IGpzb25iIHRvIGludDInLAogICBwcm9u YW1lID0+ICdpbnQyJywgcHJvcmV0dHlwZSA9PiAnaW50MicsIHByb2FyZ3R5cGVzID0+ICdqc29u YicsCiAgIHByb3NyYyA9PiAnanNvbmJfaW50MicgfSwKIHsgb2lkID0+ICczNDUxJywgZGVzY3Ig PT4gJ2NvbnZlcnQganNvbmIgdG8gaW50NCcsCi0gIHByb25hbWUgPT4gJ2ludDQnLCBwcm9yZXR0 eXBlID0+ICdpbnQ0JywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywKKyAgcHJvbmFtZSA9PiAnaW50 NCcsIHByb3N1cHBvcnQgPT4gJ2pzb25iX2Nhc3Rfc3VwcG9ydCcsCisgIHByb3JldHR5cGUgPT4g J2ludDQnLCBwcm9hcmd0eXBlcyA9PiAnanNvbmInLAogICBwcm9zcmMgPT4gJ2pzb25iX2ludDQn IH0sCiB7IG9pZCA9PiAnMzQ1MicsIGRlc2NyID0+ICdjb252ZXJ0IGpzb25iIHRvIGludDgnLAot ICBwcm9uYW1lID0+ICdpbnQ4JywgcHJvcmV0dHlwZSA9PiAnaW50OCcsIHByb2FyZ3R5cGVzID0+ ICdqc29uYicsCisgIHByb25hbWUgPT4gJ2ludDgnLCBwcm9zdXBwb3J0ID0+ICdqc29uYl9jYXN0 X3N1cHBvcnQnLAorICBwcm9yZXR0eXBlID0+ICdpbnQ4JywgcHJvYXJndHlwZXMgPT4gJ2pzb25i JywKICAgcHJvc3JjID0+ICdqc29uYl9pbnQ4JyB9LAogeyBvaWQgPT4gJzM0NTMnLCBkZXNjciA9 PiAnY29udmVydCBqc29uYiB0byBmbG9hdDQnLAogICBwcm9uYW1lID0+ICdmbG9hdDQnLCBwcm9y ZXR0eXBlID0+ICdmbG9hdDQnLCBwcm9hcmd0eXBlcyA9PiAnanNvbmInLAogICBwcm9zcmMgPT4g J2pzb25iX2Zsb2F0NCcgfSwKIHsgb2lkID0+ICcyNTgwJywgZGVzY3IgPT4gJ2NvbnZlcnQganNv bmIgdG8gZmxvYXQ4JywKLSAgcHJvbmFtZSA9PiAnZmxvYXQ4JywgcHJvcmV0dHlwZSA9PiAnZmxv YXQ4JywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywKKyAgcHJvbmFtZSA9PiAnZmxvYXQ4JywgcHJv c3VwcG9ydCA9PiAnanNvbmJfY2FzdF9zdXBwb3J0JywKKyAgcHJvcmV0dHlwZSA9PiAnZmxvYXQ4 JywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywKICAgcHJvc3JjID0+ICdqc29uYl9mbG9hdDgnIH0s CiAKICMgZm9ybWF0dGluZwpAQCAtMTI3NjksNCArMTI3NzIsMzAgQEAKICAgcHJvbmFtZSA9PiAn aGFzaG9pZDhleHRlbmRlZCcsIHByb3JldHR5cGUgPT4gJ2ludDgnLAogICBwcm9hcmd0eXBlcyA9 PiAnb2lkOCBpbnQ4JywgcHJvc3JjID0+ICdoYXNob2lkOGV4dGVuZGVkJyB9LAogCisKKyMganNv bmIgY2FzdCBvcHRpbWl6YXRpb24gc3VwcG9ydCBmdW5jdGlvbnMKK3sgb2lkID0+ICc5OTUwJywg ZGVzY3IgPT4gJ3BsYW5uZXIgc3VwcG9ydCBmb3IganNvbmIgY2FzdHMnLAorICBwcm9uYW1lID0+ ICdqc29uYl9jYXN0X3N1cHBvcnQnLCBwcm9yZXR0eXBlID0+ICdpbnRlcm5hbCcsCisgIHByb2Fy Z3R5cGVzID0+ICdpbnRlcm5hbCcsIHByb3NyYyA9PiAnanNvbmJfY2FzdF9zdXBwb3J0JyB9LAor eyBvaWQgPT4gJzk5NTMnLCBkZXNjciA9PiAnZXh0cmFjdCBudW1lcmljIGZyb20ganNvbmIgb2Jq ZWN0IGJ5IGZpZWxkIG5hbWUnLAorICBwcm9uYW1lID0+ICdqc29uYl9vYmplY3RfZmllbGRfbnVt ZXJpYycsIHByb3JldHR5cGUgPT4gJ251bWVyaWMnLAorICBwcm9hcmd0eXBlcyA9PiAnanNvbmIg dGV4dCcsIHByb2FyZ25hbWVzID0+ICd7ZnJvbV9qc29uLGZpZWxkX25hbWV9JywKKyAgcHJvc3Jj ID0+ICdqc29uYl9vYmplY3RfZmllbGRfbnVtZXJpYycgfSwKK3sgb2lkID0+ICc5OTU0JywgZGVz Y3IgPT4gJ2V4dHJhY3QgYm9vbGVhbiBmcm9tIGpzb25iIG9iamVjdCBieSBmaWVsZCBuYW1lJywK KyAgcHJvbmFtZSA9PiAnanNvbmJfb2JqZWN0X2ZpZWxkX2Jvb2wnLCBwcm9yZXR0eXBlID0+ICdi b29sJywKKyAgcHJvYXJndHlwZXMgPT4gJ2pzb25iIHRleHQnLCBwcm9hcmduYW1lcyA9PiAne2Zy b21fanNvbixmaWVsZF9uYW1lfScsCisgIHByb3NyYyA9PiAnanNvbmJfb2JqZWN0X2ZpZWxkX2Jv b2wnIH0sCit7IG9pZCA9PiAnOTk1NScsIGRlc2NyID0+ICdleHRyYWN0IGludDQgZnJvbSBqc29u YiBvYmplY3QgYnkgZmllbGQgbmFtZScsCisgIHByb25hbWUgPT4gJ2pzb25iX29iamVjdF9maWVs ZF9pbnQ0JywgcHJvcmV0dHlwZSA9PiAnaW50NCcsCisgIHByb2FyZ3R5cGVzID0+ICdqc29uYiB0 ZXh0JywgcHJvYXJnbmFtZXMgPT4gJ3tmcm9tX2pzb24sZmllbGRfbmFtZX0nLAorICBwcm9zcmMg PT4gJ2pzb25iX29iamVjdF9maWVsZF9pbnQ0JyB9LAoreyBvaWQgPT4gJzk5NTYnLCBkZXNjciA9 PiAnZXh0cmFjdCBpbnQ4IGZyb20ganNvbmIgb2JqZWN0IGJ5IGZpZWxkIG5hbWUnLAorICBwcm9u YW1lID0+ICdqc29uYl9vYmplY3RfZmllbGRfaW50OCcsIHByb3JldHR5cGUgPT4gJ2ludDgnLAor ICBwcm9hcmd0eXBlcyA9PiAnanNvbmIgdGV4dCcsIHByb2FyZ25hbWVzID0+ICd7ZnJvbV9qc29u LGZpZWxkX25hbWV9JywKKyAgcHJvc3JjID0+ICdqc29uYl9vYmplY3RfZmllbGRfaW50OCcgfSwK K3sgb2lkID0+ICc5OTU3JywgZGVzY3IgPT4gJ2V4dHJhY3QgZmxvYXQ4IGZyb20ganNvbmIgb2Jq ZWN0IGJ5IGZpZWxkIG5hbWUnLAorICBwcm9uYW1lID0+ICdqc29uYl9vYmplY3RfZmllbGRfZmxv YXQ4JywgcHJvcmV0dHlwZSA9PiAnZmxvYXQ4JywKKyAgcHJvYXJndHlwZXMgPT4gJ2pzb25iIHRl eHQnLCBwcm9hcmduYW1lcyA9PiAne2Zyb21fanNvbixmaWVsZF9uYW1lfScsCisgIHByb3NyYyA9 PiAnanNvbmJfb2JqZWN0X2ZpZWxkX2Zsb2F0OCcgfSwKKwogXQpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9qc29uYi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2pzb25iLm91dAppbmRleCA0ZTI0Njc4NTJkYi4uN2Y0YzY2NzM3NjAgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmIub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvanNvbmIub3V0CkBAIC00NTgsNyArNDU4LDM3MCBAQCBDUkVBVEUgVEVNUCBUQUJM RSB0ZXN0X2pzb25iICgKIElOU0VSVCBJTlRPIHRlc3RfanNvbmIgVkFMVUVTCiAoJ3NjYWxhcics JyJhIHNjYWxhciInKSwKICgnYXJyYXknLCdbInplcm8iLCAib25lIiwidHdvIixudWxsLCJmb3Vy IiwiZml2ZSIsIFsxLDIsM10seyJmMSI6OX1dJyksCi0oJ29iamVjdCcsJ3siZmllbGQxIjoidmFs MSIsImZpZWxkMiI6InZhbDIiLCJmaWVsZDMiOm51bGwsICJmaWVsZDQiOiA0LCAiZmllbGQ1Ijog WzEsMiwzXSwgImZpZWxkNiI6IHsiZjEiOjl9fScpOworKCdvYmplY3QnLCd7ImZpZWxkMSI6InZh bDEiLCJmaWVsZDIiOiJ2YWwyIiwiZmllbGQzIjpudWxsLCAiZmllbGQ0IjogNCwgImZpZWxkNSI6 IFsxLDIsM10sICJmaWVsZDYiOiB7ImYxIjo5fSwgImZpZWxkNyI6IHRydWV9Jyk7CistLSBPcHRp bWl6ZWQgdHlwZWQgZXh0cmFjdGlvbjogdGhlIHBsYW5uZXIgcmV3cml0ZXMgKGotPidrZXknKTo6 dHlwZSBpbnRvIGEKKy0tIGRpcmVjdCB0eXBlZCBleHRyYWN0b3IgY2FsbCwgY3VycmVudGx5IGZv ciBudW1lcmljLCBib29sLCBpbnQ0LCBpbnQ4LCBmbG9hdDguCistLSBTZWN0aW9uIDE6IHBsYW5u ZXIgcmV3cml0ZSB2ZXJpZmljYXRpb24gKHJld3JpdHRlbiB0YXJnZXRzKQorRVhQTEFJTiAoVkVS Qk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6Om51bWVyaWMg RlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgU2VxIFNjYW4gb24gcGdfdGVtcC50ZXN0X2pzb25iCisgICBPdXRwdXQ6IGpzb25i X29iamVjdF9maWVsZF9udW1lcmljKHRlc3RfanNvbiwgJ2ZpZWxkNCc6OnRleHQpCisgICBGaWx0 ZXI6ICh0ZXN0X2pzb25iLmpzb25fdHlwZSA9ICdvYmplY3QnOjp0ZXh0KQorKDMgcm93cykKKwor RVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ3 Jyk6OmJvb2wgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcGdfdGVtcC50ZXN0X2pzb25iCisgICBPdXRwdXQ6IGpz b25iX29iamVjdF9maWVsZF9ib29sKHRlc3RfanNvbiwgJ2ZpZWxkNyc6OnRleHQpCisgICBGaWx0 ZXI6ICh0ZXN0X2pzb25iLmpzb25fdHlwZSA9ICdvYmplY3QnOjp0ZXh0KQorKDMgcm93cykKKwor RVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0 Jyk6OmludDQgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcGdfdGVtcC50ZXN0X2pzb25iCisgICBPdXRwdXQ6IGpz b25iX29iamVjdF9maWVsZF9pbnQ0KHRlc3RfanNvbiwgJ2ZpZWxkNCc6OnRleHQpCisgICBGaWx0 ZXI6ICh0ZXN0X2pzb25iLmpzb25fdHlwZSA9ICdvYmplY3QnOjp0ZXh0KQorKDMgcm93cykKKwor RVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0 Jyk6OmludDggRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcGdfdGVtcC50ZXN0X2pzb25iCisgICBPdXRwdXQ6IGpz b25iX29iamVjdF9maWVsZF9pbnQ4KHRlc3RfanNvbiwgJ2ZpZWxkNCc6OnRleHQpCisgICBGaWx0 ZXI6ICh0ZXN0X2pzb25iLmpzb25fdHlwZSA9ICdvYmplY3QnOjp0ZXh0KQorKDMgcm93cykKKwor RVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0 Jyk6OmZsb2F0OCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcGdfdGVtcC50ZXN0X2pzb25iCisgICBPdXRw dXQ6IGpzb25iX29iamVjdF9maWVsZF9mbG9hdDgodGVzdF9qc29uLCAnZmllbGQ0Jzo6dGV4dCkK KyAgIEZpbHRlcjogKHRlc3RfanNvbmIuanNvbl90eXBlID0gJ29iamVjdCc6OnRleHQpCisoMyBy b3dzKQorCistLSBTZWN0aW9uIDFiOiBwbGFubmVyIHJld3JpdGUgdmVyaWZpY2F0aW9uIGZvciBz dWJzY3JpcHRpbmcgc3ludGF4CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAo dGVzdF9qc29uWydmaWVsZDQnXSk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25f dHlwZSA9ICdvYmplY3QnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcGdfdGVt cC50ZXN0X2pzb25iCisgICBPdXRwdXQ6IGpzb25iX29iamVjdF9maWVsZF9udW1lcmljKHRlc3Rf anNvbiwgJ2ZpZWxkNCc6OnRleHQpCisgICBGaWx0ZXI6ICh0ZXN0X2pzb25iLmpzb25fdHlwZSA9 ICdvYmplY3QnOjp0ZXh0KQorKDMgcm93cykKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZG KSBTRUxFQ1QgKHRlc3RfanNvblsnZmllbGQ3J10pOjpib29sIEZST00gdGVzdF9qc29uYiBXSEVS RSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHBnX3Rl bXAudGVzdF9qc29uYgorICAgT3V0cHV0OiBqc29uYl9vYmplY3RfZmllbGRfYm9vbCh0ZXN0X2pz b24sICdmaWVsZDcnOjp0ZXh0KQorICAgRmlsdGVyOiAodGVzdF9qc29uYi5qc29uX3R5cGUgPSAn b2JqZWN0Jzo6dGV4dCkKKygzIHJvd3MpCisKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikg U0VMRUNUICh0ZXN0X2pzb25bJ2ZpZWxkNCddKTo6aW50NCBGUk9NIHRlc3RfanNvbmIgV0hFUkUg anNvbl90eXBlID0gJ29iamVjdCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwZ190ZW1w LnRlc3RfanNvbmIKKyAgIE91dHB1dDoganNvbmJfb2JqZWN0X2ZpZWxkX2ludDQodGVzdF9qc29u LCAnZmllbGQ0Jzo6dGV4dCkKKyAgIEZpbHRlcjogKHRlc3RfanNvbmIuanNvbl90eXBlID0gJ29i amVjdCc6OnRleHQpCisoMyByb3dzKQorCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNF TEVDVCAodGVzdF9qc29uWydmaWVsZDQnXSk6OmludDggRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpz b25fdHlwZSA9ICdvYmplY3QnOworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcGdfdGVtcC50 ZXN0X2pzb25iCisgICBPdXRwdXQ6IGpzb25iX29iamVjdF9maWVsZF9pbnQ4KHRlc3RfanNvbiwg J2ZpZWxkNCc6OnRleHQpCisgICBGaWx0ZXI6ICh0ZXN0X2pzb25iLmpzb25fdHlwZSA9ICdvYmpl Y3QnOjp0ZXh0KQorKDMgcm93cykKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxF Q1QgKHRlc3RfanNvblsnZmllbGQ0J10pOjpmbG9hdDggRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpz b25fdHlwZSA9ICdvYmplY3QnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHBnX3Rl bXAudGVzdF9qc29uYgorICAgT3V0cHV0OiBqc29uYl9vYmplY3RfZmllbGRfZmxvYXQ4KHRlc3Rf anNvbiwgJ2ZpZWxkNCc6OnRleHQpCisgICBGaWx0ZXI6ICh0ZXN0X2pzb25iLmpzb25fdHlwZSA9 ICdvYmplY3QnOjp0ZXh0KQorKDMgcm93cykKKworLS0gVmVyaWZ5IHRoYXQgdW5zdXBwb3J0ZWQg Y2FzdCB0YXJnZXRzIGFyZSBOT1QgcmV3cml0dGVuIGJ5IHRoaXMgcGF0Y2guCistLSBpbnQyIGFu ZCBmbG9hdDQgY2FzdHMgcmVtYWluIG9uIHRoZSBvcmlnaW5hbCBqc29uYl9vYmplY3RfZmllbGQg KyBjYXN0IHBhdGguCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAodGVzdF9q c29uIC0+ICdmaWVsZDQnKTo6aW50MiBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0g J29iamVjdCc7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBTZXEgU2NhbiBvbiBwZ190ZW1wLnRlc3RfanNvbmIKKyAgIE91dHB1dDogKCh0ZXN0 X2pzb24gLT4gJ2ZpZWxkNCc6OnRleHQpKTo6c21hbGxpbnQKKyAgIEZpbHRlcjogKHRlc3RfanNv bmIuanNvbl90eXBlID0gJ29iamVjdCc6OnRleHQpCisoMyByb3dzKQorCitFWFBMQUlOIChWRVJC T1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDQnKTo6ZmxvYXQ0IEZS T00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKKyAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcGdfdGVtcC50 ZXN0X2pzb25iCisgICBPdXRwdXQ6ICgodGVzdF9qc29uIC0+ICdmaWVsZDQnOjp0ZXh0KSk6OnJl YWwKKyAgIEZpbHRlcjogKHRlc3RfanNvbmIuanNvbl90eXBlID0gJ29iamVjdCc6OnRleHQpCiso MyByb3dzKQorCistLSBTZWN0aW9uIDI6IGNvcnJlY3QgZXhlY3V0aW9uIHRocm91Z2ggdGhlIHJl d3JpdHRlbiBwYXRoCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6Om51bWVyaWMgRlJP TSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworIG51bWVyaWMgCistLS0t LS0tLS0KKyAgICAgICA0CisoMSByb3cpCisKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDcn KTo6Ym9vbCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CisgYm9v bCAKKy0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcp OjppbnQ0IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKKyBpbnQ0 IAorLS0tLS0tCisgICAgNAorKDEgcm93KQorCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0 Jyk6OmludDggRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworIGlu dDggCistLS0tLS0KKyAgICA0CisoMSByb3cpCisKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVs ZDQnKTo6ZmxvYXQ4IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsK KyBmbG9hdDggCistLS0tLS0tLQorICAgICAgNAorKDEgcm93KQorCistLSBTZWN0aW9uIDJiOiBj b3JyZWN0IGV4ZWN1dGlvbiB0aHJvdWdoIHN1YnNjcmlwdGluZyBzeW50YXgKK1NFTEVDVCAodGVz dF9qc29uWydmaWVsZDQnXSk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlw ZSA9ICdvYmplY3QnOworIHRlc3RfanNvbiAKKy0tLS0tLS0tLS0tCisgICAgICAgICA0CisoMSBy b3cpCisKK1NFTEVDVCAodGVzdF9qc29uWydmaWVsZDcnXSk6OmJvb2wgRlJPTSB0ZXN0X2pzb25i IFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworIHRlc3RfanNvbiAKKy0tLS0tLS0tLS0tCisg dAorKDEgcm93KQorCitTRUxFQ1QgKHRlc3RfanNvblsnZmllbGQ0J10pOjppbnQ0IEZST00gdGVz dF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKKyB0ZXN0X2pzb24gCistLS0tLS0t LS0tLQorICAgICAgICAgNAorKDEgcm93KQorCitTRUxFQ1QgKHRlc3RfanNvblsnZmllbGQ0J10p OjppbnQ4IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKKyB0ZXN0 X2pzb24gCistLS0tLS0tLS0tLQorICAgICAgICAgNAorKDEgcm93KQorCitTRUxFQ1QgKHRlc3Rf anNvblsnZmllbGQ0J10pOjpmbG9hdDggRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9 ICdvYmplY3QnOworIHRlc3RfanNvbiAKKy0tLS0tLS0tLS0tCisgICAgICAgICA0CisoMSByb3cp CisKKy0tIFVuc3VwcG9ydGVkIHRhcmdldHMgc3RpbGwgd29yayBjb3JyZWN0bHkgdGhyb3VnaCB0 aGUgb3JpZ2luYWwgcGF0aAorU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjppbnQyIEZS T00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKKyBpbnQyIAorLS0tLS0t CisgICAgNAorKDEgcm93KQorCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6OmZsb2F0 NCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CisgZmxvYXQ0IAor LS0tLS0tLS0KKyAgICAgIDQKKygxIHJvdykKKworLS0gU2VjdGlvbiAzOiBOVUxMIHNlbWFudGlj cyAobWlzc2luZyBrZXksIEpTT04gbnVsbCwgbm9uLW9iamVjdCBpbnB1dCkKK1NFTEVDVCAodGVz dF9qc29uIC0+ICdmaWVsZDMnKTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90 eXBlID0gJ29iamVjdCc7ICAtLSBKU09OIG51bGwKKyBudW1lcmljIAorLS0tLS0tLS0tCisgICAg ICAgIAorKDEgcm93KQorCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnbm9uZXhpc3RlbnQnKTo6bnVt ZXJpYyBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7ICAtLSBtaXNz aW5nIGtleQorIG51bWVyaWMgCistLS0tLS0tLS0KKyAgICAgICAgCisoMSByb3cpCisKK1NFTEVD VCAodGVzdF9qc29uIC0+ICd4Jyk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25f dHlwZSA9ICdhcnJheSc7ICAtLSBub24tb2JqZWN0CisgbnVtZXJpYyAKKy0tLS0tLS0tLQorICAg ICAgICAKKygxIHJvdykKKworU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkMycpOjpib29sIEZS T00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0tIEpTT04gbnVsbCwg Ym9vbCBwYXRoCisgYm9vbCAKKy0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgKHRlc3RfanNv biAtPiAnZmllbGQzJyk6OmludDQgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdv YmplY3QnOyAgLS0gSlNPTiBudWxsLCBpbnQ0IHBhdGgKKyBpbnQ0IAorLS0tLS0tCisgICAgIAor KDEgcm93KQorCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnbm9uZXhpc3RlbnQnKTo6aW50NCBGUk9N IHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7ICAtLSBtaXNzaW5nIGtleSwg aW50NAorIGludDQgCistLS0tLS0KKyAgICAgCisoMSByb3cpCisKK1NFTEVDVCAodGVzdF9qc29u IC0+ICdmaWVsZDMnKTo6ZmxvYXQ4IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAn b2JqZWN0JzsgIC0tIEpTT04gbnVsbCwgZmxvYXQ4IHBhdGgKKyBmbG9hdDggCistLS0tLS0tLQor ICAgICAgIAorKDEgcm93KQorCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnbm9uZXhpc3RlbnQnKTo6 ZmxvYXQ4IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0tIG1p c3Npbmcga2V5LCBmbG9hdDgKKyBmbG9hdDggCistLS0tLS0tLQorICAgICAgIAorKDEgcm93KQor CistLSBTZWN0aW9uIDNiOiBOVUxMIHNlbWFudGljcyB0aHJvdWdoIHN1YnNjcmlwdGluZyBzeW50 YXgKK1NFTEVDVCAodGVzdF9qc29uWydmaWVsZDMnXSk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25i IFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOyAgLS0gSlNPTiBudWxsCisgdGVzdF9qc29uIAor LS0tLS0tLS0tLS0KKyAgICAgICAgICAKKygxIHJvdykKKworU0VMRUNUICh0ZXN0X2pzb25bJ25v bmV4aXN0ZW50J10pOjpudW1lcmljIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAn b2JqZWN0JzsgIC0tIG1pc3Npbmcga2V5CisgdGVzdF9qc29uIAorLS0tLS0tLS0tLS0KKyAgICAg ICAgICAKKygxIHJvdykKKworU0VMRUNUICh0ZXN0X2pzb25bJ25vbmV4aXN0ZW50J10pOjpmbG9h dDggRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOyAgLS0gbWlzc2lu ZyBrZXksIGZsb2F0OAorIHRlc3RfanNvbiAKKy0tLS0tLS0tLS0tCisgICAgICAgICAgCisoMSBy b3cpCisKKy0tIFNlY3Rpb24gNDogdHlwZS1taXNtYXRjaCBlcnJvcnMgKHNjYWxhciBhbmQgY29u dGFpbmVyIHR5cGVzKQorU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkMScpOjpudW1lcmljIEZS T00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0tIHN0cmluZyB0byBu dW1lcmljCitFUlJPUjogIGNhbm5vdCBjYXN0IGpzb25iIHN0cmluZyB0byB0eXBlIG51bWVyaWMK K1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDEnKTo6Ym9vbCBGUk9NIHRlc3RfanNvbmIgV0hF UkUganNvbl90eXBlID0gJ29iamVjdCc7ICAtLSBzdHJpbmcgdG8gYm9vbAorRVJST1I6ICBjYW5u b3QgY2FzdCBqc29uYiBzdHJpbmcgdG8gdHlwZSBib29sZWFuCitTRUxFQ1QgKHRlc3RfanNvbiAt PiAnZmllbGQ1Jyk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdv YmplY3QnOyAgLS0gYXJyYXkgdG8gbnVtZXJpYworRVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBh cnJheSBvciBvYmplY3QgdG8gdHlwZSBudW1lcmljCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmll bGQxJyk6OmludDQgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOyAg LS0gc3RyaW5nIHRvIGludDQKK0VSUk9SOiAgY2Fubm90IGNhc3QganNvbmIgc3RyaW5nIHRvIHR5 cGUgaW50ZWdlcgorU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkMScpOjppbnQ4IEZST00gdGVz dF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0tIHN0cmluZyB0byBpbnQ4CitF UlJPUjogIGNhbm5vdCBjYXN0IGpzb25iIHN0cmluZyB0byB0eXBlIGJpZ2ludAorU0VMRUNUICh0 ZXN0X2pzb24gLT4gJ2ZpZWxkMScpOjpmbG9hdDggRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25f dHlwZSA9ICdvYmplY3QnOyAgLS0gc3RyaW5nIHRvIGZsb2F0OAorRVJST1I6ICBjYW5ub3QgY2Fz dCBqc29uYiBzdHJpbmcgdG8gdHlwZSBkb3VibGUgcHJlY2lzaW9uCitTRUxFQ1QgKHRlc3RfanNv biAtPiAnZmllbGQ1Jyk6OmludDQgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdv YmplY3QnOyAgLS0gYXJyYXkgdG8gaW50NAorRVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBhcnJh eSBvciBvYmplY3QgdG8gdHlwZSBpbnRlZ2VyCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ1 Jyk6OmZsb2F0OCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7ICAt LSBhcnJheSB0byBmbG9hdDgKK0VSUk9SOiAgY2Fubm90IGNhc3QganNvbmIgYXJyYXkgb3Igb2Jq ZWN0IHRvIHR5cGUgZG91YmxlIHByZWNpc2lvbgorLS0gU2VjdGlvbiA0YjogdHlwZS1taXNtYXRj aCBlcnJvciB0aHJvdWdoIHN1YnNjcmlwdGluZyBzeW50YXgKK1NFTEVDVCAodGVzdF9qc29uWydm aWVsZDEnXSk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmpl Y3QnOyAgLS0gc3RyaW5nIHRvIG51bWVyaWMKK0VSUk9SOiAgY2Fubm90IGNhc3QganNvbmIgc3Ry aW5nIHRvIHR5cGUgbnVtZXJpYworU0VMRUNUICh0ZXN0X2pzb25bJ2ZpZWxkMSddKTo6aW50OCBG Uk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7ICAtLSBzdHJpbmcgdG8g aW50OAorRVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBzdHJpbmcgdG8gdHlwZSBiaWdpbnQKKy0t IFNlY3Rpb24gNTogZGlyZWN0IGNhbGxzIHRvIHR5cGVkIGV4dHJhY3RvciBidWlsdGlucworU0VM RUNUIGpzb25iX29iamVjdF9maWVsZF9udW1lcmljKCd7ImEiOiAxfSc6Ompzb25iLCAnYScpOwor IGpzb25iX29iamVjdF9maWVsZF9udW1lcmljIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICAgICAgICAgICAgICAgICAgICAgICAgICAxCisoMSByb3cpCisKK1NFTEVDVCBqc29uYl9v YmplY3RfZmllbGRfbnVtZXJpYygneyJhIjogMy4xNH0nOjpqc29uYiwgJ2EnKTsKKyBqc29uYl9v YmplY3RfZmllbGRfbnVtZXJpYyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAg ICAgICAgICAgICAgICAgICAgMy4xNAorKDEgcm93KQorCitTRUxFQ1QganNvbmJfb2JqZWN0X2Zp ZWxkX2Jvb2woJ3siYSI6IHRydWV9Jzo6anNvbmIsICdhJyk7CisganNvbmJfb2JqZWN0X2ZpZWxk X2Jvb2wgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1Qg anNvbmJfb2JqZWN0X2ZpZWxkX2Jvb2woJ3siYSI6IGZhbHNlfSc6Ompzb25iLCAnYScpOworIGpz b25iX29iamVjdF9maWVsZF9ib29sIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGYKKygx IHJvdykKKworU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9pbnQ0KCd7ImEiOiA0Mn0nOjpqc29u YiwgJ2EnKTsKKyBqc29uYl9vYmplY3RfZmllbGRfaW50NCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICA0MgorKDEgcm93KQorCitTRUxFQ1QganNvbmJf b2JqZWN0X2ZpZWxkX2ludDgoJ3siYSI6IDk4NzY1NDMyMTB9Jzo6anNvbmIsICdhJyk7CisganNv bmJfb2JqZWN0X2ZpZWxkX2ludDggCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAg ICAgICAgIDk4NzY1NDMyMTAKKygxIHJvdykKKworU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9m bG9hdDgoJ3siYSI6IDMuMTR9Jzo6anNvbmIsICdhJyk7CisganNvbmJfb2JqZWN0X2ZpZWxkX2Zs b2F0OCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAg IDMuMTQKKygxIHJvdykKKworLS0gZGlyZWN0IGNhbGxzOiBOVUxMIHNlbWFudGljcworU0VMRUNU IGpzb25iX29iamVjdF9maWVsZF9udW1lcmljKCd7ImEiOiAxfSc6Ompzb25iLCAnbWlzc2luZycp OworIGpzb25iX29iamVjdF9maWVsZF9udW1lcmljIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgCisoMSByb3cpCisKK1NFTEVDVCBqc29u Yl9vYmplY3RfZmllbGRfbnVtZXJpYygneyJhIjogbnVsbH0nOjpqc29uYiwgJ2EnKTsKKyBqc29u Yl9vYmplY3RfZmllbGRfbnVtZXJpYyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorKDEgcm93KQorCitTRUxFQ1QganNvbmJfb2JqZWN0 X2ZpZWxkX2Jvb2woJ3siYSI6IHRydWV9Jzo6anNvbmIsICdtaXNzaW5nJyk7CisganNvbmJfb2Jq ZWN0X2ZpZWxkX2Jvb2wgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisK K1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfaW50NCgneyJhIjogMX0nOjpqc29uYiwgJ21pc3Np bmcnKTsKKyBqc29uYl9vYmplY3RfZmllbGRfaW50NCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorKDEgcm93KQorCitTRUxFQ1QganNvbmJfb2Jq ZWN0X2ZpZWxkX2ludDQoJ3siYSI6IG51bGx9Jzo6anNvbmIsICdhJyk7CisganNvbmJfb2JqZWN0 X2ZpZWxkX2ludDQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAg ICAgICAgICAKKygxIHJvdykKKworU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9mbG9hdDgoJ3si YSI6IDEuMH0nOjpqc29uYiwgJ21pc3NpbmcnKTsKKyBqc29uYl9vYmplY3RfZmllbGRfZmxvYXQ4 IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAg IAorKDEgcm93KQorCistLSBkaXJlY3QgY2FsbHM6IHR5cGUtbWlzbWF0Y2ggZXJyb3JzCitTRUxF Q1QganNvbmJfb2JqZWN0X2ZpZWxkX251bWVyaWMoJ3siYSI6ICJ0ZXh0In0nOjpqc29uYiwgJ2En KTsKK0VSUk9SOiAgY2Fubm90IGNhc3QganNvbmIgc3RyaW5nIHRvIHR5cGUgbnVtZXJpYworU0VM RUNUIGpzb25iX29iamVjdF9maWVsZF9ib29sKCd7ImEiOiAxfSc6Ompzb25iLCAnYScpOworRVJS T1I6ICBjYW5ub3QgY2FzdCBqc29uYiBudW1lcmljIHRvIHR5cGUgYm9vbGVhbgorU0VMRUNUIGpz b25iX29iamVjdF9maWVsZF9udW1lcmljKCd7ImEiOiB7IngiOjF9fSc6Ompzb25iLCAnYScpOyAg LS0gY29udGFpbmVyIHRvIHNjYWxhcgorRVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBhcnJheSBv ciBvYmplY3QgdG8gdHlwZSBudW1lcmljCitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX2ludDQo J3siYSI6ICJ0ZXh0In0nOjpqc29uYiwgJ2EnKTsKK0VSUk9SOiAgY2Fubm90IGNhc3QganNvbmIg c3RyaW5nIHRvIHR5cGUgaW50ZWdlcgorU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9pbnQ4KCd7 ImEiOiB0cnVlfSc6Ompzb25iLCAnYScpOworRVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBib29s ZWFuIHRvIHR5cGUgYmlnaW50CitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX2Zsb2F0OCgneyJh IjogWzEsMl19Jzo6anNvbmIsICdhJyk7ICAtLSBjb250YWluZXIgdG8gZmxvYXQ4CitFUlJPUjog IGNhbm5vdCBjYXN0IGpzb25iIGFycmF5IG9yIG9iamVjdCB0byB0eXBlIGRvdWJsZSBwcmVjaXNp b24KKy0tIGRpcmVjdCBjYWxsczogaW50ZWdlciBvdmVyZmxvdworU0VMRUNUIGpzb25iX29iamVj dF9maWVsZF9pbnQ0KCd7ImEiOiA5OTk5OTk5OTk5fSc6Ompzb25iLCAnYScpOworRVJST1I6ICBp bnRlZ2VyIG91dCBvZiByYW5nZQogU0VMRUNUIHRlc3RfanNvbiAtPiAneCcgRlJPTSB0ZXN0X2pz b25iIFdIRVJFIGpzb25fdHlwZSA9ICdzY2FsYXInOwogID9jb2x1bW4/IAogLS0tLS0tLS0tLQpA QCAtNTg2LDcgKzk0OSw4IEBAIFNFTEVDVCBqc29uYl9vYmplY3Rfa2V5cyh0ZXN0X2pzb24pIEZS T00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKICBmaWVsZDQKICBmaWVs ZDUKICBmaWVsZDYKLSg2IHJvd3MpCisgZmllbGQ3CisoNyByb3dzKQogCiAtLSBudWxscwogU0VM RUNUICh0ZXN0X2pzb24tPidmaWVsZDMnKSBJUyBOVUxMIEFTIGV4cGVjdF9mYWxzZSBGUk9NIHRl c3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9qc29uYi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYi5zcWwK aW5kZXggZDI4ZWQxYzFlODUuLjdlNGQ4NmIwYmRkIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9qc29uYi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmIuc3FsCkBA IC0xNTUsNyArMTU1LDEwMSBAQCBDUkVBVEUgVEVNUCBUQUJMRSB0ZXN0X2pzb25iICgKIElOU0VS VCBJTlRPIHRlc3RfanNvbmIgVkFMVUVTCiAoJ3NjYWxhcicsJyJhIHNjYWxhciInKSwKICgnYXJy YXknLCdbInplcm8iLCAib25lIiwidHdvIixudWxsLCJmb3VyIiwiZml2ZSIsIFsxLDIsM10seyJm MSI6OX1dJyksCi0oJ29iamVjdCcsJ3siZmllbGQxIjoidmFsMSIsImZpZWxkMiI6InZhbDIiLCJm aWVsZDMiOm51bGwsICJmaWVsZDQiOiA0LCAiZmllbGQ1IjogWzEsMiwzXSwgImZpZWxkNiI6IHsi ZjEiOjl9fScpOworKCdvYmplY3QnLCd7ImZpZWxkMSI6InZhbDEiLCJmaWVsZDIiOiJ2YWwyIiwi ZmllbGQzIjpudWxsLCAiZmllbGQ0IjogNCwgImZpZWxkNSI6IFsxLDIsM10sICJmaWVsZDYiOiB7 ImYxIjo5fSwgImZpZWxkNyI6IHRydWV9Jyk7CisKKy0tIE9wdGltaXplZCB0eXBlZCBleHRyYWN0 aW9uOiB0aGUgcGxhbm5lciByZXdyaXRlcyAoai0+J2tleScpOjp0eXBlIGludG8gYQorLS0gZGly ZWN0IHR5cGVkIGV4dHJhY3RvciBjYWxsLCBjdXJyZW50bHkgZm9yIG51bWVyaWMsIGJvb2wsIGlu dDQsIGludDgsIGZsb2F0OC4KKworLS0gU2VjdGlvbiAxOiBwbGFubmVyIHJld3JpdGUgdmVyaWZp Y2F0aW9uIChyZXdyaXR0ZW4gdGFyZ2V0cykKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikg U0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjpudW1lcmljIEZST00gdGVzdF9qc29uYiBX SEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikg U0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkNycpOjpib29sIEZST00gdGVzdF9qc29uYiBXSEVS RSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VM RUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjppbnQ0IEZST00gdGVzdF9qc29uYiBXSEVSRSBq c29uX3R5cGUgPSAnb2JqZWN0JzsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNU ICh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjppbnQ4IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29u X3R5cGUgPSAnb2JqZWN0JzsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUICh0 ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjpmbG9hdDggRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25f dHlwZSA9ICdvYmplY3QnOworCistLSBTZWN0aW9uIDFiOiBwbGFubmVyIHJld3JpdGUgdmVyaWZp Y2F0aW9uIGZvciBzdWJzY3JpcHRpbmcgc3ludGF4CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBP RkYpIFNFTEVDVCAodGVzdF9qc29uWydmaWVsZDQnXSk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25i IFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZG KSBTRUxFQ1QgKHRlc3RfanNvblsnZmllbGQ3J10pOjpib29sIEZST00gdGVzdF9qc29uYiBXSEVS RSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VM RUNUICh0ZXN0X2pzb25bJ2ZpZWxkNCddKTo6aW50NCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNv bl90eXBlID0gJ29iamVjdCc7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAo dGVzdF9qc29uWydmaWVsZDQnXSk6OmludDggRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlw ZSA9ICdvYmplY3QnOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3Rf anNvblsnZmllbGQ0J10pOjpmbG9hdDggRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9 ICdvYmplY3QnOworCistLSBWZXJpZnkgdGhhdCB1bnN1cHBvcnRlZCBjYXN0IHRhcmdldHMgYXJl IE5PVCByZXdyaXR0ZW4gYnkgdGhpcyBwYXRjaC4KKy0tIGludDIgYW5kIGZsb2F0NCBjYXN0cyBy ZW1haW4gb24gdGhlIG9yaWdpbmFsIGpzb25iX29iamVjdF9maWVsZCArIGNhc3QgcGF0aC4KK0VY UExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcp OjppbnQyIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKK0VYUExB SU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjpm bG9hdDQgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworCistLSBT ZWN0aW9uIDI6IGNvcnJlY3QgZXhlY3V0aW9uIHRocm91Z2ggdGhlIHJld3JpdHRlbiBwYXRoCitT RUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdI RVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkNycp Ojpib29sIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKK1NFTEVD VCAodGVzdF9qc29uIC0+ICdmaWVsZDQnKTo6aW50NCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNv bl90eXBlID0gJ29iamVjdCc7CitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6OmludDgg RlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworU0VMRUNUICh0ZXN0 X2pzb24gLT4gJ2ZpZWxkNCcpOjpmbG9hdDggRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlw ZSA9ICdvYmplY3QnOworCistLSBTZWN0aW9uIDJiOiBjb3JyZWN0IGV4ZWN1dGlvbiB0aHJvdWdo IHN1YnNjcmlwdGluZyBzeW50YXgKK1NFTEVDVCAodGVzdF9qc29uWydmaWVsZDQnXSk6Om51bWVy aWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworU0VMRUNUICh0 ZXN0X2pzb25bJ2ZpZWxkNyddKTo6Ym9vbCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBl ID0gJ29iamVjdCc7CitTRUxFQ1QgKHRlc3RfanNvblsnZmllbGQ0J10pOjppbnQ0IEZST00gdGVz dF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKK1NFTEVDVCAodGVzdF9qc29uWydm aWVsZDQnXSk6OmludDggRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3Qn OworU0VMRUNUICh0ZXN0X2pzb25bJ2ZpZWxkNCddKTo6ZmxvYXQ4IEZST00gdGVzdF9qc29uYiBX SEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKKworLS0gVW5zdXBwb3J0ZWQgdGFyZ2V0cyBzdGls bCB3b3JrIGNvcnJlY3RseSB0aHJvdWdoIHRoZSBvcmlnaW5hbCBwYXRoCitTRUxFQ1QgKHRlc3Rf anNvbiAtPiAnZmllbGQ0Jyk6OmludDIgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9 ICdvYmplY3QnOworU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjpmbG9hdDQgRlJPTSB0 ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworCistLSBTZWN0aW9uIDM6IE5V TEwgc2VtYW50aWNzIChtaXNzaW5nIGtleSwgSlNPTiBudWxsLCBub24tb2JqZWN0IGlucHV0KQor U0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkMycpOjpudW1lcmljIEZST00gdGVzdF9qc29uYiBX SEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0tIEpTT04gbnVsbAorU0VMRUNUICh0ZXN0X2pz b24gLT4gJ25vbmV4aXN0ZW50Jyk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25f dHlwZSA9ICdvYmplY3QnOyAgLS0gbWlzc2luZyBrZXkKK1NFTEVDVCAodGVzdF9qc29uIC0+ICd4 Jyk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdhcnJheSc7ICAt LSBub24tb2JqZWN0CitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQzJyk6OmJvb2wgRlJPTSB0 ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOyAgLS0gSlNPTiBudWxsLCBib29s IHBhdGgKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDMnKTo6aW50NCBGUk9NIHRlc3RfanNv bmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7ICAtLSBKU09OIG51bGwsIGludDQgcGF0aAor U0VMRUNUICh0ZXN0X2pzb24gLT4gJ25vbmV4aXN0ZW50Jyk6OmludDQgRlJPTSB0ZXN0X2pzb25i IFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOyAgLS0gbWlzc2luZyBrZXksIGludDQKK1NFTEVD VCAodGVzdF9qc29uIC0+ICdmaWVsZDMnKTo6ZmxvYXQ4IEZST00gdGVzdF9qc29uYiBXSEVSRSBq c29uX3R5cGUgPSAnb2JqZWN0JzsgIC0tIEpTT04gbnVsbCwgZmxvYXQ4IHBhdGgKK1NFTEVDVCAo dGVzdF9qc29uIC0+ICdub25leGlzdGVudCcpOjpmbG9hdDggRlJPTSB0ZXN0X2pzb25iIFdIRVJF IGpzb25fdHlwZSA9ICdvYmplY3QnOyAgLS0gbWlzc2luZyBrZXksIGZsb2F0OAorCistLSBTZWN0 aW9uIDNiOiBOVUxMIHNlbWFudGljcyB0aHJvdWdoIHN1YnNjcmlwdGluZyBzeW50YXgKK1NFTEVD VCAodGVzdF9qc29uWydmaWVsZDMnXSk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpz b25fdHlwZSA9ICdvYmplY3QnOyAgLS0gSlNPTiBudWxsCitTRUxFQ1QgKHRlc3RfanNvblsnbm9u ZXhpc3RlbnQnXSk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdv YmplY3QnOyAgLS0gbWlzc2luZyBrZXkKK1NFTEVDVCAodGVzdF9qc29uWydub25leGlzdGVudCdd KTo6ZmxvYXQ4IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0t IG1pc3Npbmcga2V5LCBmbG9hdDgKKworLS0gU2VjdGlvbiA0OiB0eXBlLW1pc21hdGNoIGVycm9y cyAoc2NhbGFyIGFuZCBjb250YWluZXIgdHlwZXMpCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmll bGQxJyk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3Qn OyAgLS0gc3RyaW5nIHRvIG51bWVyaWMKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDEnKTo6 Ym9vbCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7ICAtLSBzdHJp bmcgdG8gYm9vbAorU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkNScpOjpudW1lcmljIEZST00g dGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0tIGFycmF5IHRvIG51bWVy aWMKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDEnKTo6aW50NCBGUk9NIHRlc3RfanNvbmIg V0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7ICAtLSBzdHJpbmcgdG8gaW50NAorU0VMRUNUICh0 ZXN0X2pzb24gLT4gJ2ZpZWxkMScpOjppbnQ4IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5 cGUgPSAnb2JqZWN0JzsgIC0tIHN0cmluZyB0byBpbnQ4CitTRUxFQ1QgKHRlc3RfanNvbiAtPiAn ZmllbGQxJyk6OmZsb2F0OCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVj dCc7ICAtLSBzdHJpbmcgdG8gZmxvYXQ4CitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ1Jyk6 OmludDQgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOyAgLS0gYXJy YXkgdG8gaW50NAorU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkNScpOjpmbG9hdDggRlJPTSB0 ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOyAgLS0gYXJyYXkgdG8gZmxvYXQ4 CisKKy0tIFNlY3Rpb24gNGI6IHR5cGUtbWlzbWF0Y2ggZXJyb3IgdGhyb3VnaCBzdWJzY3JpcHRp bmcgc3ludGF4CitTRUxFQ1QgKHRlc3RfanNvblsnZmllbGQxJ10pOjpudW1lcmljIEZST00gdGVz dF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0tIHN0cmluZyB0byBudW1lcmlj CitTRUxFQ1QgKHRlc3RfanNvblsnZmllbGQxJ10pOjppbnQ4IEZST00gdGVzdF9qc29uYiBXSEVS RSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0tIHN0cmluZyB0byBpbnQ4CisKKy0tIFNlY3Rpb24g NTogZGlyZWN0IGNhbGxzIHRvIHR5cGVkIGV4dHJhY3RvciBidWlsdGlucworU0VMRUNUIGpzb25i X29iamVjdF9maWVsZF9udW1lcmljKCd7ImEiOiAxfSc6Ompzb25iLCAnYScpOworU0VMRUNUIGpz b25iX29iamVjdF9maWVsZF9udW1lcmljKCd7ImEiOiAzLjE0fSc6Ompzb25iLCAnYScpOworU0VM RUNUIGpzb25iX29iamVjdF9maWVsZF9ib29sKCd7ImEiOiB0cnVlfSc6Ompzb25iLCAnYScpOwor U0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9ib29sKCd7ImEiOiBmYWxzZX0nOjpqc29uYiwgJ2En KTsKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfaW50NCgneyJhIjogNDJ9Jzo6anNvbmIsICdh Jyk7CitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX2ludDgoJ3siYSI6IDk4NzY1NDMyMTB9Jzo6 anNvbmIsICdhJyk7CitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX2Zsb2F0OCgneyJhIjogMy4x NH0nOjpqc29uYiwgJ2EnKTsKKy0tIGRpcmVjdCBjYWxsczogTlVMTCBzZW1hbnRpY3MKK1NFTEVD VCBqc29uYl9vYmplY3RfZmllbGRfbnVtZXJpYygneyJhIjogMX0nOjpqc29uYiwgJ21pc3Npbmcn KTsKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfbnVtZXJpYygneyJhIjogbnVsbH0nOjpqc29u YiwgJ2EnKTsKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfYm9vbCgneyJhIjogdHJ1ZX0nOjpq c29uYiwgJ21pc3NpbmcnKTsKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfaW50NCgneyJhIjog MX0nOjpqc29uYiwgJ21pc3NpbmcnKTsKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfaW50NCgn eyJhIjogbnVsbH0nOjpqc29uYiwgJ2EnKTsKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfZmxv YXQ4KCd7ImEiOiAxLjB9Jzo6anNvbmIsICdtaXNzaW5nJyk7CistLSBkaXJlY3QgY2FsbHM6IHR5 cGUtbWlzbWF0Y2ggZXJyb3JzCitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX251bWVyaWMoJ3si YSI6ICJ0ZXh0In0nOjpqc29uYiwgJ2EnKTsKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfYm9v bCgneyJhIjogMX0nOjpqc29uYiwgJ2EnKTsKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfbnVt ZXJpYygneyJhIjogeyJ4IjoxfX0nOjpqc29uYiwgJ2EnKTsgIC0tIGNvbnRhaW5lciB0byBzY2Fs YXIKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfaW50NCgneyJhIjogInRleHQifSc6Ompzb25i LCAnYScpOworU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9pbnQ4KCd7ImEiOiB0cnVlfSc6Ompz b25iLCAnYScpOworU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9mbG9hdDgoJ3siYSI6IFsxLDJd fSc6Ompzb25iLCAnYScpOyAgLS0gY29udGFpbmVyIHRvIGZsb2F0OAorLS0gZGlyZWN0IGNhbGxz OiBpbnRlZ2VyIG92ZXJmbG93CitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX2ludDQoJ3siYSI6 IDk5OTk5OTk5OTl9Jzo6anNvbmIsICdhJyk7CiAKIFNFTEVDVCB0ZXN0X2pzb24gLT4gJ3gnIEZS T00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnc2NhbGFyJzsKIFNFTEVDVCB0ZXN0X2pz b24gLT4gJ3gnIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnYXJyYXknOwotLSAK Mi41Mi4wCgo= --0000000000003c006f064ef8383a--