From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Mauro Aranda Newsgroups: gmane.emacs.bugs Subject: bug#44579: Unintended behaviour with =?UTF-8?Q?defcustom=E2=80=99s_?= =?UTF-8?Q?=E2=80=98choice=E2=80=99?= widgets and ":inline t" & Wrong documentation on "(elisp) Splicing into Lists" Date: Mon, 16 Nov 2020 20:48:54 -0300 Message-ID: References: <87lff7yksx.fsf@hidden> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="0000000000001e155f05b442068d" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="37257"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 44579@debbugs.gnu.org To: Leo Vivier Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Tue Nov 17 00:50:11 2020 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1keoGA-0009ax-KR for geb-bug-gnu-emacs@m.gmane-mx.org; Tue, 17 Nov 2020 00:50:10 +0100 Original-Received: from localhost ([::1]:46530 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1keoG9-0005Ab-Mr for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 16 Nov 2020 18:50:09 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:57208) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1keoG2-0005AM-92 for bug-gnu-emacs@gnu.org; Mon, 16 Nov 2020 18:50:02 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:46228) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1keoG1-0008Hn-UY for bug-gnu-emacs@gnu.org; Mon, 16 Nov 2020 18:50:01 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1keoG1-0005s5-RU for bug-gnu-emacs@gnu.org; Mon, 16 Nov 2020 18:50:01 -0500 X-Loop: help-debbugs@gnu.org In-Reply-To: <87lff7yksx.fsf@hidden> Resent-From: Mauro Aranda Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 16 Nov 2020 23:50:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 44579 X-GNU-PR-Package: emacs Original-Received: via spool by 44579-submit@debbugs.gnu.org id=B44579.160557055622505 (code B ref 44579); Mon, 16 Nov 2020 23:50:01 +0000 Original-Received: (at 44579) by debbugs.gnu.org; 16 Nov 2020 23:49:16 +0000 Original-Received: from localhost ([127.0.0.1]:57772 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1keoFH-0005qt-8Q for submit@debbugs.gnu.org; Mon, 16 Nov 2020 18:49:16 -0500 Original-Received: from mail-wm1-f54.google.com ([209.85.128.54]:37333) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1keoFE-0005qa-Ui for 44579@debbugs.gnu.org; Mon, 16 Nov 2020 18:49:14 -0500 Original-Received: by mail-wm1-f54.google.com with SMTP id h21so1176310wmb.2 for <44579@debbugs.gnu.org>; Mon, 16 Nov 2020 15:49:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to:cc; bh=Ivluq/k5i29Ad1M0sk+j+XJKN3m0CbJdHJ514mc5AOY=; b=krqsVHrIyOPv9l8rrNOxAA6JMm3tiehi4L9b/xk3tCcagT3HeizV8l/jcQHQG3oLwd BThafvoRY7jcg2OXqsoFiAaZkzgaPGl5Oh0jH8roXm/4uDaHjsTTfbDkngUmPBoHmokD Fxfx5UWiilg1ZeH117JNdHuRcaRIiN+xdt6cbABo9Efwr13TKE9k3lEubDoiQC+DA1oS E77ChgOT8DSBF/Rv0QzFQS27DhibhbrOvFye5ufJcH6GginOaezY0H/9Ft0jLc3Cmn4C 4duQ9On10JVmoAv8+zl2PQKjk9SD35pXpK8hYNXwyTLHUGsvU2zohyc45Kt/tHXkqht8 eq5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc; bh=Ivluq/k5i29Ad1M0sk+j+XJKN3m0CbJdHJ514mc5AOY=; b=DOWQhTKAA0QZvmZKaShhajpfb4Gn/La5h1rbCLFZb0vKWAsSfSe9nNAKdy7WLTcUJ+ QtLTSWasQej0TyGlsPLb33N3W7s7QEw04wZxIsT8lzYLyLrqfdhY5J8Q39L+GRzlI2WA GOQgLaGSKKdncUMin5qgDs/DSCedBxbe/me6PEPj1TgzmmG7c2PnAOFbHN7xrqFof3b0 CUkYMIAAlAmLq7VApDY8VVs3EaRq4PBXQF0uw71psQwx1v1pXeYgsU0F+YsqobCIjDxO +Ql6IXuv1nsuVcOTy5yYDEBAwVZTF5hfr3ABFxMzgdQ/zzGPu6Ja882ucii5Zm5stQ/5 3Pdg== X-Gm-Message-State: AOAM533PaOukFMx8LQS4JWmxwwK+2Aqd2kZDEXM7WWWqS6waRrFegCt/ b6rN/7WpCMIGWvLFDaznlZjJQ+EJ6JGtMwl7wuo= X-Google-Smtp-Source: ABdhPJyp1/UPCJH9tGhomIQpSjPncbLcRjkXVVcRiwvIuADUsb+U91NmWZxQuvSR6W2kNA1mASOKjq6K7bDRtTemob4= X-Received: by 2002:a1c:20c6:: with SMTP id g189mr1352700wmg.6.1605570547019; Mon, 16 Nov 2020 15:49:07 -0800 (PST) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:193506 Archived-At: --0000000000001e155f05b442068d Content-Type: multipart/alternative; boundary="0000000000001e155d05b442068b" --0000000000001e155d05b442068b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable tags 44579 patch quit Leo Vivier writes: > Hi there, > > There seems to be a problem in `defcustom' forms with the way the > `choice' widget handles `:inline t'. > > I=E2=80=99ve written an .el file to walk you through it: I=E2=80=99ve doc= umented the > bug, the explanation, and a tentative solution. > [...] > ;; > When the element-type is a =E2=80=98choice=E2=80=99, you use =E2= =80=98:inline=E2=80=99 not in the > ;; > =E2=80=98choice=E2=80=99 itself, but in (some of) the alternatives o= f the =E2=80=98choice=E2=80=99. For > ;; > example, to match a list which must start with a file name, followed > ;; > either by the symbol =E2=80=98t=E2=80=99 or two strings, use this cu= stomization type: > ;; > > ;; > (list file > ;; > (choice (const t) > ;; > (list :inline t string string))) > ;; > > ;; > If the user chooses the first alternative in the choice, then the > ;; > overall list has two elements and the second element is =E2=80=98t= =E2=80=99. If the > ;; > user chooses the second alternative, then the overall list has three > ;; > elements and the second and third must be strings. > > ;; The first option in =E2=80=98choice=E2=80=99 works. > (defcustom zp/testing '("foo" t) > "Testing variable." > :type > '(list file > (choice (const t) > (list :inline t > string > string)))) > > (customize-variable 'zp/testing) > ;; =3D> The form is recognised. > > ;; The second option in =E2=80=98choice=E2=80=99 doesn=E2=80=99t work. > (defcustom zp/testing '("foo" "bar" "baz") > "Testing variable." > :type > '(list file > (choice (const t) > (list :inline t > string > string)))) > > (customize-variable 'zp/testing) > ;; =3D> The form is *not* recognised. Confirmed. > ;;; SUGGESTED FIX > > ;; =E2=80=98choice=E2=80=99 needs to be made aware of the ":inline t" in = its options. > ;; > ;; Since =E2=80=98choice=E2=80=99 is intended to receed into the backgrou= nd once the > ;; appropriate option has been pattern-matched, it doesn=E2=80=99t make s= ense to have > ;; it carry the ":inline t". Instead, it should respect the ":inline t" that > ;; is present in its option when said option is matched. Yes, something like that. This bug happens because the choice widget is unable to tell to widget-match-inline that it wants to try to match more than one member of a list, when one of its choices is inline. So widget-match-inline only passes it one element, in this case a string, and one string won't match a list of two strings. So the choice widget needs to be able to tell widget-match-inline about that. To avoid a large impact of tweaking the code to fix this, I made a change to affect only choice widgets with inline choices, which are the ones that suffer exhibit this bug. The patch to wid-edit.el is a little larger, because once the choice widget can match inline values, then it has to be able to create them. I added tests for both matching choice widgets and creating the choice widgets as a part of other grouping widgets. In current master, the following tests should fail, exposing the bug: widget-test-choice-match-all-inline widget-test-choice-match-some-inline And without the changes to the create functions, the following tests would fail: widget-test-repeat-can-handle-inlinable-choice widget-test-list-can-handle-inlinable-choice widget-test-option-can-handle-inlinable-choice --0000000000001e155d05b442068b Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
tags 44579 patch
quit


> Hi there,
>
> There seems to be a = problem in `defcustom' forms with the way the
> `choice' widg= et handles `:inline t'.
>
> I=E2=80=99ve written an .el fil= e to walk you through it: I=E2=80=99ve documented the
> bug, the expl= anation, and a tentative solution.
>

[...]

> ;; >= =C2=A0 =C2=A0When the element-type is a =E2=80=98choice=E2=80=99, you use = =E2=80=98:inline=E2=80=99 not in the
> ;; > =E2=80=98choice=E2=80= =99 itself, but in (some of) the alternatives of the =E2=80=98choice=E2=80= =99.=C2=A0 For
> ;; > example, to match a list which must start wi= th a file name, followed
> ;; > either by the symbol =E2=80=98t=E2= =80=99 or two strings, use this customization type:
> ;; >
>= ;; > =C2=A0 =C2=A0 =C2=A0(list file
> ;; > =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0(choice (const t)
> ;; > =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(list :inline t string = string)))
> ;; >
> ;; > If the user chooses the first alt= ernative in the choice, then the
> ;; > overall list has two eleme= nts and the second element is =E2=80=98t=E2=80=99.=C2=A0 If the
> ;; = > user chooses the second alternative, then the overall list has three> ;; > elements and the second and third must be strings.
> <= br>> ;; The first option in =E2=80=98choice=E2=80=99 works.
> (def= custom zp/testing '("foo" t)
> =C2=A0 "Testing var= iable."
> =C2=A0 :type
> =C2=A0 '(list file
> = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(choice (const t)
> =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(list :inline t
> =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0string> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= string))))
>
> (customize-variable 'zp/testing)
> ;;= =3D> The form is recognised.
>
> ;; The second option in = =E2=80=98choice=E2=80=99 doesn=E2=80=99t work.
> (defcustom zp/testin= g '("foo" "bar" "baz")
> =C2=A0 &qu= ot;Testing variable."
> =C2=A0 :type
> =C2=A0 '(list f= ile
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(choice (const t)
> =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(list :inline t<= br>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0string
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0string))))
>
> (customize-variable 'zp/testin= g)
> ;; =3D> The form is *not* recognised.

Confirmed.
> ;;; SUGGESTED FIX
>
> ;; =E2=80=98choice=E2=80=99 needs= to be made aware of the ":inline t" in its options.
> ;;> ;; Since =E2=80=98choice=E2=80=99 is intended to receed into the bac= kground once the
> ;; appropriate option has been pattern-matched, it= doesn=E2=80=99t make sense to have
> ;; it carry the ":inline t= ".=C2=A0 Instead, it should respect the ":inline t" that
= > ;; is present in its option when said option is matched.

Yes, s= omething like that.=C2=A0 This bug happens because the choice widget is
= unable to tell to widget-match-inline that it wants to try to match morethan one member of a list, when one of its choices is inline.=C2=A0 So
= widget-match-inline only passes it one element, in this case a string,
a= nd one string won't match a list of two strings.

So the choice w= idget needs to be able to tell widget-match-inline about
that.=C2=A0 To = avoid a large impact of tweaking the code to fix this, I made
a change t= o affect only choice widgets with inline choices, which are
the ones tha= t suffer exhibit this bug.

The patch to wid-edit.el is a little larg= er, because once the choice
widget can match inline values, then it has = to be able to create them.

I added tests for both matching choice wi= dgets and creating the choice
widgets as a part of other grouping widget= s.=C2=A0 In current master, the
following tests should fail, exposing th= e bug:
widget-test-choice-match-all-inline
widget-test-choice-match-s= ome-inline

And without the changes to the create functions, the foll= owing tests
would fail:
widget-test-repeat-can-handle-inlinable-choic= e
widget-test-list-can-handle-inlinable-choice
widget-test-option-can= -handle-inlinable-choice
--0000000000001e155d05b442068b-- --0000000000001e155f05b442068d Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Fix-matching-of-inline-choices-for-the-choice-widget.patch" Content-Disposition: attachment; filename="0001-Fix-matching-of-inline-choices-for-the-choice-widget.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_khl73o1m0 RnJvbSBhZmNlOGRiOWU0MmFiMjBiZjBlMjdmYjA4N2I5YzE3YTQxYWViNzBhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXVybyBBcmFuZGEgPG1hdXJvb2FyYW5kYUBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMTYgTm92IDIwMjAgMjA6MDU6MDQgLTAzMDAKU3ViamVjdDogW1BBVENIXSBG aXggbWF0Y2hpbmcgb2YgaW5saW5lIGNob2ljZXMgZm9yIHRoZSBjaG9pY2Ugd2lkZ2V0CgpBIGNo b2ljZSB3aWRnZXQgc2hvdWxkIGJlIGFibGUgdG8gbWF0Y2ggZWl0aGVyIG5vIGlubGluZSB2YWx1 ZXMgb3IKaW5saW5lIHZhbHVlcywgdXBvbiByZXF1ZXN0LiAgKEJ1ZyM0NDU3OSkKCiogbGlzcC93 aWQtZWRpdC5lbCAoY2hvaWNlKTogTmV3IHByb3BlcnR5LCA6aW5saW5lLWJ1YmJsZXMtcC4gIEEK cHJlZGljYXRlIHRoYXQgcmV0dXJucyBub24tbmlsIGlmIHRoZSBjaG9pY2Ugd2lkZ2V0IGNhbiBh Y3QgYXMgYW4KaW5saW5lIHdpZGdldC4gIERvY3VtZW50IGl0Lgood2lkZ2V0LWNob2ljZS1pbmxp bmUtYnViYmxlcy1wKTogTmV3IGZ1bmN0aW9uLCBmb3IgdGhlCjppbmxpbmUtYnViYmxlcy1wIHBy b3BlcnR5IG9mIHRoZSBjaG9pY2Ugd2lkZ2V0Lgood2lkZ2V0LWlubGluZS1wKTogTmV3IGZ1bmN0 aW9uLiAgVXNlIHRoZSA6aW5saW5lLWJ1YmJsZXMtcCBwcm9wZXJ0eQpvZiB0aGUgd2lkZ2V0LCBp ZiBhbnkuCih3aWRnZXQtbWF0Y2gtaW5saW5lKTogVXNlIHRoZSBhYm92ZSB0byBzZWUgaWYgdGhl IHdpZGdldCBjYW4gYWN0IGxpa2UKYW4gaW5saW5lIHdpZGdldC4gIERvY3VtZW50IGl0Lgood2lk Z2V0LWNob2ljZS12YWx1ZS1jcmVhdGUpOiBBY2NvdW50IGZvciB0aGUgY2FzZSBvZiBhIGNob2lj ZSB3aWRnZXQKdGhhdCBoYXMgaW5saW5lIG1lbWJlcnMuCih3aWRnZXQtY2hlY2tsaXN0LWFkZC1p dGVtLCB3aWRnZXQtZWRpdGFibGUtbGlzdC12YWx1ZS1jcmVhdGUpCih3aWRnZXQtZ3JvdXAtdmFs dWUtY3JlYXRlKTogVXNlIHdpZGdldC1pbmxpbmUtcCByYXRoZXIgdGhhbiBqdXN0CmNoZWNraW5n IGZvciBhIG5vbi1uaWwgOmlubGluZSBwcm9wZXJ0eSwgYWxsb3dpbmcgdGhlc2UgZnVuY3Rpb25z IHRvCnBhc3MgdGhlIGNvbXBsZXRlIGluZm9ybWF0aW9uIHRvIHdpZGdldHMgbGlrZSB0aGUgY2hv aWNlIHdpZGdldCB0bwpjcmVhdGUgdGhlaXIgdmFsdWVzLgoKKiB0ZXN0L2xpc3Avd2lkLWVkaXQt dGVzdHMuZWwgKHdpZGdldC10ZXN0LWNob2ljZS1tYXRjaC1uby1pbmxpbmUpCih3aWRnZXQtdGVz dC1jaG9pY2UtbWF0Y2gtYWxsLWlubGluZSkKd2lkZ2V0LXRlc3QtY2hvaWNlLW1hdGNoLXNvbWUt aW5saW5lKTogTmV3IHRlc3RzLCB0byBjaGVjayB0aGF0IGNob2ljZQp3aWRnZXRzIGNhbiBtYXRj aCBpdHMgY2hvaWNlcywgaW5saW5lIG9yIG5vdC4KKHdpZGdldC10ZXN0LWlubGluZS1wKTogTmV3 IHRlc3QsIGZvciB0aGUgbmV3IGZ1bmN0aW9uCndpZGdldC1pbmxpbmUtcC4KKHdpZGdldC10ZXN0 LXJlcGVhdC1jYW4taGFuZGxlLWNob2ljZSkKKHdpZGdldC10ZXN0LXJlcGVhdC1jYW4taGFuZGxl LWlubGluYWJsZS1jaG9pY2UpCih3aWRnZXQtdGVzdC1saXN0LWNhbi1oYW5kbGUtY2hvaWNlKQoo d2lkZ2V0LXRlc3QtbGlzdC1jYW4taGFuZGxlLWlubGluYWJsZS1jaG9pY2UpCih3aWRnZXQtdGVz dC1vcHRpb24tY2FuLWhhbmRsZS1jaG9pY2UpCih3aWRnZXQtdGVzdC1vcHRpb24tY2FuLWhhbmRs ZS1pbmxpbmFibGUtY2hvaWNlKTogTmV3IHRlc3RzLiAgVGhpcwpncm91cGluZyB3aWRnZXRzIG5l ZWQgdG8gYmUgYWJsZSB0byBjcmVhdGUgYSBjaG9pY2Ugd2lkZ2V0IHJlZ2FyZGxlc3MKaWYgaXQg aGFzIGlubGluZSBjaG9pY2VzIG9yIG5vdC4KLS0tCiBsaXNwL3dpZC1lZGl0LmVsICAgICAgICAg ICAgfCAgNzIgKysrKysrKysrKysrKy0tLS0KIHRlc3QvbGlzcC93aWQtZWRpdC10ZXN0cy5lbCB8 IDE1MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdl ZCwgMjExIGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpc3Av d2lkLWVkaXQuZWwgYi9saXNwL3dpZC1lZGl0LmVsCmluZGV4IDRlMmNmNzQxNmQuLjgyNTAzMTZi Y2MgMTAwNjQ0Ci0tLSBhL2xpc3Avd2lkLWVkaXQuZWwKKysrIGIvbGlzcC93aWQtZWRpdC5lbApA QCAtNTkxLDkgKzU5MSwyNSBAQCB3aWRnZXQtZGVmYXVsdC1nZXQKIAkJCSAgKHdpZGdldC1wdXQg d2lkZ2V0IDphcmdzIGFyZ3MpKSkKIAkJICAgICAgKHdpZGdldC1hcHBseSB3aWRnZXQgOmRlZmF1 bHQtZ2V0KSkpKSkKIAorKGRlZnVuIHdpZGdldC1pbmxpbmUtcCAod2lkZ2V0ICZvcHRpb25hbCBi dWJibGVwKQorICAiTm9uLW5pbCBpZiB0aGUgd2lkZ2V0IFdJREdFVCBpcyBpbmxpbmUuCisKK1dp dGggQlVCQkxFUCBub24tbmlsLCBjaGVjayBhbHNvIGlmIFdJREdFVCBoYXMgYSBtZW1iZXIgdGhh dCBidWJibGVzIGl0cyBpbmxpbmUKK3Byb3BlcnR5IChpZiBhbnkpLCB1cCB0byBXSURHRVQsIHNv IHRoYXQgV0lER0VUIGNhbiBhY3QgYXMgYW4gaW5saW5lIHdpZGdldC4iCisgIChvciAod2lkZ2V0 LWdldCB3aWRnZXQgOmlubGluZSkKKyAgICAgIChhbmQgYnViYmxlcAorICAgICAgICAgICAod2lk Z2V0LWdldCB3aWRnZXQgOmlubGluZS1idWJibGVzLXApCisgICAgICAgICAgICh3aWRnZXQtYXBw bHkgd2lkZ2V0IDppbmxpbmUtYnViYmxlcy1wKSkpKQorCiAoZGVmdW4gd2lkZ2V0LW1hdGNoLWlu bGluZSAod2lkZ2V0IHZhbHMpCi0gICJJbiBXSURHRVQsIG1hdGNoIHRoZSBzdGFydCBvZiBWQUxT LiIKLSAgKGNvbmQgKCh3aWRnZXQtZ2V0IHdpZGdldCA6aW5saW5lKQorICAiSW4gV0lER0VULCBt YXRjaCB0aGUgc3RhcnQgb2YgVkFMUy4KKworRm9yIGFuIGlubGluZSB3aWRnZXQgb3IgZm9yIGEg d2lkZ2V0IHRoYXQgYWN0cyBsaWtlIG9uZSAoc2VlIGB3aWRnZXQtaW5saW5lLXAnKSwKK3RyeSB0 byBtYXRjaCBlbGVtZW50cyBpbiBWQUxTIGFzIGZhciBhcyBwb3NzaWJsZS4gIE90aGVyd2lzZSwg bWF0Y2ggdGhlIGZpcnN0CitlbGVtZW50IG9mIHRoZSBsaXN0IFZBTFMuCisKK1JldHVybiBhIGxp c3Qgd2hvc2UgY2FyIGNvbnRhaW5zIGFsbCBtZW1iZXJzIG9mIFZBTFMgdGhhdCBtYXRjaGVkIFdJ REdFVC4iCisgIChjb25kICgod2lkZ2V0LWlubGluZS1wIHdpZGdldCB0KQogCSAod2lkZ2V0LWFw cGx5IHdpZGdldCA6bWF0Y2gtaW5saW5lIHZhbHMpKQogCSgoYW5kIChsaXN0cCB2YWxzKQogCSAg ICAgICh3aWRnZXQtYXBwbHkgd2lkZ2V0IDptYXRjaCAoY2FyIHZhbHMpKSkKQEAgLTIxOTgsNyAr MjIxNCw3IEBAIHdpZGdldC1jaG9pY2UtdmFsdWUtY3JlYXRlCiAgIChsZXQgKCh2YWx1ZSAod2lk Z2V0LWdldCB3aWRnZXQgOnZhbHVlKSkKIAkoYXJncyAod2lkZ2V0LWdldCB3aWRnZXQgOmFyZ3Mp KQogCShleHBsaWNpdCAod2lkZ2V0LWdldCB3aWRnZXQgOmV4cGxpY2l0LWNob2ljZSkpCi0JY3Vy cmVudCkKKyAgICAgICAgY3VycmVudCB2YWwgaW5saW5lLXAgZnVuKQogICAgIChpZiBleHBsaWNp dAogCShwcm9nbgogCSAgOzsgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIHRoZSBjaG9pY2UgZm9yIHRo aXMgdmFsdWUsCkBAIC0yMjA3LDE1ICsyMjIzLDI0IEBAIHdpZGdldC1jaG9pY2UtdmFsdWUtY3Jl YXRlCiAJCQkJCSAgICAgIHdpZGdldCBleHBsaWNpdCB2YWx1ZSkpKQogCSAgKHdpZGdldC1wdXQg d2lkZ2V0IDpjaG9pY2UgZXhwbGljaXQpCiAJICAod2lkZ2V0LXB1dCB3aWRnZXQgOmV4cGxpY2l0 LWNob2ljZSBuaWwpKQorICAgICAgKHNldHEgaW5saW5lLXAgKHdpZGdldC1pbmxpbmUtcCB3aWRn ZXQgdCkpCiAgICAgICAod2hpbGUgYXJncwogCShzZXRxIGN1cnJlbnQgKGNhciBhcmdzKQogCSAg ICAgIGFyZ3MgKGNkciBhcmdzKSkKLQkod2hlbiAod2lkZ2V0LWFwcGx5IGN1cnJlbnQgOm1hdGNo IHZhbHVlKQotCSAgKHdpZGdldC1wdXQgd2lkZ2V0IDpjaGlsZHJlbiAobGlzdCAod2lkZ2V0LWNy ZWF0ZS1jaGlsZC12YWx1ZQotCQkJCQkgICAgICB3aWRnZXQgY3VycmVudCB2YWx1ZSkpKQotCSAg KHdpZGdldC1wdXQgd2lkZ2V0IDpjaG9pY2UgY3VycmVudCkKLQkgIChzZXRxIGFyZ3MgbmlsCi0J CWN1cnJlbnQgbmlsKSkpCisgICAgICAgIChpZiBpbmxpbmUtcAorICAgICAgICAgICAgKGlmICh3 aWRnZXQtZ2V0IGN1cnJlbnQgOmlubGluZSkKKyAgICAgICAgICAgICAgICAoc2V0cSB2YWwgdmFs dWUKKyAgICAgICAgICAgICAgICAgICAgICBmdW4gOm1hdGNoLWlubGluZSkKKyAgICAgICAgICAg ICAgKHNldHEgdmFsIChjYXIgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGZ1biA6bWF0Y2gp KQorICAgICAgICAgIChzZXRxIHZhbCB2YWx1ZQorICAgICAgICAgICAgICAgIGZ1biA6bWF0Y2gp KQorICAgICAgICAod2hlbiAod2lkZ2V0LWFwcGx5IGN1cnJlbnQgZnVuIHZhbCkKKyAgICAgICAg ICAod2lkZ2V0LXB1dCB3aWRnZXQgOmNoaWxkcmVuIChsaXN0ICh3aWRnZXQtY3JlYXRlLWNoaWxk LXZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lk Z2V0IGN1cnJlbnQgdmFsKSkpCisgICAgICAgICAgKHdpZGdldC1wdXQgd2lkZ2V0IDpjaG9pY2Ug Y3VycmVudCkKKyAgICAgICAgICAoc2V0cSBhcmdzIG5pbAorICAgICAgICAgICAgICAgIGN1cnJl bnQgbmlsKSkpCiAgICAgICAod2hlbiBjdXJyZW50CiAJKGxldCAoKHZvaWQgKHdpZGdldC1nZXQg d2lkZ2V0IDp2b2lkKSkpCiAJICAod2lkZ2V0LXB1dCB3aWRnZXQgOmNoaWxkcmVuIChsaXN0ICh3 aWRnZXQtY3JlYXRlLWNoaWxkLWFuZC1jb252ZXJ0CkBAIC0yNDM4LDcgKzI0NjMsNyBAQCB3aWRn ZXQtY2hlY2tsaXN0LWFkZC1pdGVtCiAJCQkgICAgIChsZXQgKChjaGlsZCAod2lkZ2V0LWNyZWF0 ZS1jaGlsZCB3aWRnZXQgdHlwZSkpKQogCQkJICAgICAgICh3aWRnZXQtYXBwbHkgY2hpbGQgOmRl YWN0aXZhdGUpCiAJCQkgICAgICAgY2hpbGQpKQotCQkJICAgICgod2lkZ2V0LWdldCB0eXBlIDpp bmxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh3aWRnZXQtaW5saW5lLXAgdHlw ZSB0KQogCQkJICAgICAod2lkZ2V0LWNyZWF0ZS1jaGlsZC12YWx1ZQogCQkJICAgICAgd2lkZ2V0 IHR5cGUgKGNkciBjaG9zZW4pKSkKIAkJCSAgICAodApAQCAtMjc5NSw3ICsyODIwLDcgQEAgd2lk Z2V0LWVkaXRhYmxlLWxpc3QtdmFsdWUtY3JlYXRlCiAJKGlmIGFuc3dlcgogCSAgICAoc2V0cSBj aGlsZHJlbiAoY29ucyAod2lkZ2V0LWVkaXRhYmxlLWxpc3QtZW50cnktY3JlYXRlCiAJCQkJICB3 aWRnZXQKLQkJCQkgIChpZiAod2lkZ2V0LWdldCB0eXBlIDppbmxpbmUpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGlmICh3aWRnZXQtaW5saW5lLXAgdHlwZSB0KQogCQkJCSAg ICAgIChjYXIgYW5zd2VyKQogCQkJCSAgICAoY2FyIChjYXIgYW5zd2VyKSkpCiAJCQkJICB0KQpA QCAtMjk3OSw3ICszMDA0LDcgQEAgd2lkZ2V0LWdyb3VwLXZhbHVlLWNyZWF0ZQogCSAgIChpbnNl cnQtY2hhciA/XHMgKHdpZGdldC1nZXQgd2lkZ2V0IDppbmRlbnQpKSkKICAgICAgIChwdXNoIChj b25kICgobnVsbCBhbnN3ZXIpCiAJCSAgICh3aWRnZXQtY3JlYXRlLWNoaWxkIHdpZGdldCBhcmcp KQotCQkgICgod2lkZ2V0LWdldCBhcmcgOmlubGluZSkKKyAgICAgICAgICAgICAgICAgICgod2lk Z2V0LWlubGluZS1wIGFyZyB0KQogCQkgICAod2lkZ2V0LWNyZWF0ZS1jaGlsZC12YWx1ZSB3aWRn ZXQgYXJnIChjYXIgYW5zd2VyKSkpCiAJCSAgKHQKIAkJICAgKHdpZGdldC1jcmVhdGUtY2hpbGQt dmFsdWUgd2lkZ2V0IGFyZyAoY2FyIChjYXIgYW5zd2VyKSkpKSkKQEAgLTM5MDAsMTIgKzM5MjUs MTcgQEAgd2lkZ2V0LWFsaXN0LWNvbnZlcnQtb3B0aW9uCiAgICAgYChjb25zIDpmb3JtYXQgIktl eTogJXYiICxrZXktdHlwZSAsdmFsdWUtdHlwZSkpKQogDAogKGRlZmluZS13aWRnZXQgJ2Nob2lj ZSAnbWVudS1jaG9pY2UKLSAgIkEgdW5pb24gb2Ygc2V2ZXJhbCBzZXhwIHR5cGVzLiIKKyAgIkEg dW5pb24gb2Ygc2V2ZXJhbCBzZXhwIHR5cGVzLgorCitJZiBvbmUgb2YgdGhlIGNob2ljZXMgb2Yg YSBjaG9pY2Ugd2lkZ2V0IGhhcyBhbiA6aW5saW5lIHQgcHJvcGVydHksCit0aGVuIHRoZSBjaG9p Y2Ugd2lkZ2V0IGNhbiBhY3QgYXMgYW4gaW5saW5lIHdpZGdldCBvbiBpdHMgb3duIGlmIHRoZQor Y3VycmVudCBjaG9pY2UgaXMgaW5saW5lLiIKICAgOnRhZyAiQ2hvaWNlIgogICA6Zm9ybWF0ICIl eyV0JX06ICVbVmFsdWUgTWVudSVdICV2IgogICA6YnV0dG9uLXByZWZpeCAnd2lkZ2V0LXB1c2gt YnV0dG9uLXByZWZpeAogICA6YnV0dG9uLXN1ZmZpeCAnd2lkZ2V0LXB1c2gtYnV0dG9uLXN1ZmZp eAotICA6cHJvbXB0LXZhbHVlICd3aWRnZXQtY2hvaWNlLXByb21wdC12YWx1ZSkKKyAgOnByb21w dC12YWx1ZSAnd2lkZ2V0LWNob2ljZS1wcm9tcHQtdmFsdWUKKyAgOmlubGluZS1idWJibGVzLXAg Iyd3aWRnZXQtY2hvaWNlLWlubGluZS1idWJibGVzLXApCiAKIChkZWZ1biB3aWRnZXQtY2hvaWNl LXByb21wdC12YWx1ZSAod2lkZ2V0IHByb21wdCB2YWx1ZSBfdW5ib3VuZCkKICAgIk1ha2UgYSBj aG9pY2UuIgpAQCAtMzk0OCw2ICszOTc4LDIwIEBAIHdpZGdldC1jaG9pY2UtcHJvbXB0LXZhbHVl CiAgICAgKGlmIGN1cnJlbnQKIAkod2lkZ2V0LXByb21wdC12YWx1ZSBjdXJyZW50IHByb21wdCBu aWwgdCkKICAgICAgIHZhbHVlKSkpCisKKyhkZWZ1biB3aWRnZXQtY2hvaWNlLWlubGluZS1idWJi bGVzLXAgKHdpZGdldCkKKyAgIk5vbi1uaWwgaWYgdGhlIGNob2ljZSBXSURHRVQgaGFzIGF0IGxl YXN0IG9uZSBjaG9pY2UgdGhhdCBpcyBpbmxpbmUuCitUaGlzIGlzIHVzZWQgd2hlbiBtYXRjaGlu ZyB2YWx1ZXMsIGJlY2F1c2UgYSBjaG9pY2Ugd2lkZ2V0IG5lZWRzIHRvCittYXRjaCBhIHZhbHVl IGlubGluZSByYXRoZXIgdGhhbiBqdXN0IG1hdGNoIGl0IGlmIGF0IGxlYXN0IG9uZSBvZiBpdHMg Y2hvaWNlcworaXMgaW5saW5lLiIKKyAgKGxldCAoKGFyZ3MgKHdpZGdldC1nZXQgd2lkZ2V0IDph cmdzKSkKKyAgICAgICAgY3VyIGZvdW5kKQorICAgICh3aGlsZSAoYW5kIGFyZ3MgKG5vdCBmb3Vu ZCkpCisgICAgICAoc2V0cSBjdXIgKGNhciBhcmdzKQorICAgICAgICAgICAgYXJncyAoY2RyIGFy Z3MpCisgICAgICAgICAgICBmb3VuZCAod2lkZ2V0LWdldCBjdXIgOmlubGluZSkpKQorICAgIGZv dW5kKSkKKwogDAogKGRlZmluZS13aWRnZXQgJ3JhZGlvICdyYWRpby1idXR0b24tY2hvaWNlCiAg ICJBIHVuaW9uIG9mIHNldmVyYWwgc2V4cCB0eXBlcy4iCmRpZmYgLS1naXQgYS90ZXN0L2xpc3Av d2lkLWVkaXQtdGVzdHMuZWwgYi90ZXN0L2xpc3Avd2lkLWVkaXQtdGVzdHMuZWwKaW5kZXggNDUw OGI2ODAyMy4uMWJkNDI5NzM2ZSAxMDA2NDQKLS0tIGEvdGVzdC9saXNwL3dpZC1lZGl0LXRlc3Rz LmVsCisrKyBiL3Rlc3QvbGlzcC93aWQtZWRpdC10ZXN0cy5lbApAQCAtMTQ4LDQgKzE0OCwxNTcg QEAgd2lkZ2V0LXRlc3QtbW92aW5nLWVkaXRhYmxlLWxpc3QtaXRlbQogICAgICAgOzsgQ2hlY2sg dGhhdCB3ZSBlZmZlY3RpdmVseSBtb3ZlZCB0aGUgaXRlbSB0byB0aGUgbGFzdCBwb3NpdGlvbi4K ICAgICAgIChzaG91bGQgKGVxdWFsICh3aWRnZXQtdmFsdWUgbHN0KSAnKCJiZWciICJtaWRkbGUi ICJlbmQiKSkpKSkpCiAKKyhlcnQtZGVmdGVzdCB3aWRnZXQtdGVzdC1jaG9pY2UtbWF0Y2gtbm8t aW5saW5lICgpCisgICJUZXN0IHRoYXQgYSBuby1pbmxpbmUgY2hvaWNlIHdpZGdldCBjYW4gbWF0 Y2ggaXRzIHZhbHVlcy4iCisgIChsZXQqICgoY2hvaWNlICcoY2hvaWNlIChjb25zdCBuaWwpIChj b25zdCB0KSBzdHJpbmcgZnVuY3Rpb24pKQorICAgICAgICAgKHdpZGdldCAod2lkZ2V0LWNvbnZl cnQgY2hvaWNlKSkpCisgICAgKHNob3VsZCAod2lkZ2V0LWFwcGx5IHdpZGdldCA6bWF0Y2ggbmls KSkKKyAgICAoc2hvdWxkICh3aWRnZXQtYXBwbHkgd2lkZ2V0IDptYXRjaCB0KSkKKyAgICAoc2hv dWxkICh3aWRnZXQtYXBwbHkgd2lkZ2V0IDptYXRjaCAiIikpCisgICAgKHNob3VsZCAod2lkZ2V0 LWFwcGx5IHdpZGdldCA6bWF0Y2ggJ2lnbm9yZSkpKSkKKworKGVydC1kZWZ0ZXN0IHdpZGdldC10 ZXN0LWNob2ljZS1tYXRjaC1hbGwtaW5saW5lICgpCisgICJUZXN0IHRoYXQgYSBjaG9pY2Ugd2lk Z2V0IHdpdGggYWxsIGlubGluZSBtZW1iZXJzIGNhbiBtYXRjaCBpdHMgdmFsdWVzLiIKKyAgKGxl dCogKChsc3QgJyhsaXN0IChjaG9pY2UgKGxpc3QgOmlubGluZSB0IHN5bWJvbCBudW1iZXIpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0IDppbmxpbmUgdCBzeW1ib2wgcmVnZXhw KSkpKQorICAgICAgICAgKHdpZGdldCAod2lkZ2V0LWNvbnZlcnQgbHN0KSkpCisgICAgKHNob3Vs ZC1ub3QgKHdpZGdldC1hcHBseSB3aWRnZXQgOm1hdGNoIG5pbCkpCisgICAgKHNob3VsZCAod2lk Z2V0LWFwcGx5IHdpZGdldCA6bWF0Y2ggJyg6dGVzdCAyKSkpCisgICAgKHNob3VsZCAod2lkZ2V0 LWFwcGx5IHdpZGdldCA6bWF0Y2ggJyg6dGVzdCAiLioiKSkpCisgICAgKHNob3VsZC1ub3QgKHdp ZGdldC1hcHBseSB3aWRnZXQgOm1hdGNoICcoOnRlc3QgaWdub3JlKSkpKSkKKworKGVydC1kZWZ0 ZXN0IHdpZGdldC10ZXN0LWNob2ljZS1tYXRjaC1zb21lLWlubGluZSAoKQorICAiVGVzdCB0aGF0 IGEgY2hvaWNlIHdpZGdldCB3aXRoIHNvbWUgaW5saW5lIG1lbWJlcnMgY2FuIG1hdGNoIGl0cyB2 YWx1ZXMuIgorICAobGV0KiAoKGxzdCAnKGxpc3Qgc3RyaW5nCisgICAgICAgICAgICAgICAgICAg ICAoY2hvaWNlIChjb25zdCB0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCA6 aW5saW5lIHQgc3ltYm9sIG51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxp c3QgOmlubGluZSB0IHN5bWJvbCByZWdleHApKSkpCisgICAgICAgICAod2lkZ2V0ICh3aWRnZXQt Y29udmVydCBsc3QpKSkKKyAgICAoc2hvdWxkLW5vdCAod2lkZ2V0LWFwcGx5IHdpZGdldCA6bWF0 Y2ggbmlsKSkKKyAgICAoc2hvdWxkICh3aWRnZXQtYXBwbHkgd2lkZ2V0IDptYXRjaCAnKCIiIHQp KSkKKyAgICAoc2hvdWxkICh3aWRnZXQtYXBwbHkgd2lkZ2V0IDptYXRjaCAnKCIiIDp0ZXN0IDIp KSkKKyAgICAoc2hvdWxkICh3aWRnZXQtYXBwbHkgd2lkZ2V0IDptYXRjaCAnKCIiIDp0ZXN0ICIu KiIpKSkKKyAgICAoc2hvdWxkLW5vdCAod2lkZ2V0LWFwcGx5IHdpZGdldCA6bWF0Y2ggJyg6dGVz dCBpZ25vcmUpKSkpKQorCisoZXJ0LWRlZnRlc3Qgd2lkZ2V0LXRlc3QtaW5saW5lLXAgKCkKKyAg IlRlc3QgYHdpZGdldC1pbmxpbmUtcCcuCitGb3Igd2lkZ2V0cyB3aXRob3V0IGFuIDppbmxpbmUg dCBwcm9wZXJ0eSwgYHdpZGdldC1pbmxpbmUtcCcgaGFzIHRvIHJldHVybiBuaWwuCitCdXQgaWYg dGhlIHdpZGdldCBpcyBhIGNob2ljZSB3aWRnZXQsIGl0IGhhcyB0byByZXR1cm4gbmlsIGlmIHBh c3NlZCBuaWwgYXMKK3RoZSBidWJibGVwIGFyZ3VtZW50LCBvciBub24tbmlsIGlmIG9uZSBvZiB0 aGUgbWVtYmVycyBvZiB0aGUgY2hvaWNlIHdpZGdldCBoYXMKK2FuIDppbmxpbmUgdCBwcm9wZXJ0 eSBhbmQgd2UgcGFzcyBhIG5vbi1uaWwgYnViYmxlcCBhcmd1bWVudC4gIElmIG5vIG1lbWJlcnMg b2YKK3RoZSBjaG9pY2Ugd2lkZ2V0IGhhdmUgYW4gOmlubGluZSB0IHByb3BlcnR5LCB0aGVuIGB3 aWRnZXQtaW5saW5lLXAnIGhhcyB0bworcmV0dXJuIG5pbCwgZXZlbiB3aXRoIGEgbm9uLW5pbCBi dWJibGVwIGFyZ3VtZW50LiIKKyAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAod2lkZ2V0LWluc2Vy dCAiVGVzdGluZy5cblxuIikKKyAgICAobGV0KiAoKHdpZGdldCAod2lkZ2V0LWNyZWF0ZSAncmVw ZWF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnZhbHVlICcobmlsKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoY2hvaWNlIChjb25zdCBuaWwpIChjb25z dCB0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0IDpp bmxpbmUgdCBzeW1ib2wgbnVtYmVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnKGNob2ljZSAoY29uc3QgbmlsKSAoY29uc3QgdCkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAobGlzdCBmdW5jdGlvbiBzdHJpbmcpKSkpCisgICAgICAgICAg IChjaGlsZHJlbiAod2lkZ2V0LWdldCB3aWRnZXQgOmNoaWxkcmVuKSkKKyAgICAgICAgICAgKGNo aWxkLTEgKGNhciBjaGlsZHJlbikpCisgICAgICAgICAgIChjaGlsZC0yIChjYWRyIGNoaWxkcmVu KSkpCisgICAgICAoc2hvdWxkLW5vdCAod2lkZ2V0LWlubGluZS1wIHdpZGdldCkpCisgICAgICAo c2hvdWxkLW5vdCAod2lkZ2V0LWlubGluZS1wIGNoaWxkLTEpKQorICAgICAgKHNob3VsZCAod2lk Z2V0LWlubGluZS1wIGNoaWxkLTEgJ2J1YmJsZSkpCisgICAgICAoc2hvdWxkLW5vdCAod2lkZ2V0 LWlubGluZS1wIGNoaWxkLTIpKQorICAgICAgKHNob3VsZC1ub3QgKHdpZGdldC1pbmxpbmUtcCBj aGlsZC0yICdidWJibGUpKSkpKQorCisoZXJ0LWRlZnRlc3Qgd2lkZ2V0LXRlc3QtcmVwZWF0LWNh bi1oYW5kbGUtY2hvaWNlICgpCisgICJUZXN0IHRoYXQgd2UgY2FuIGNyZWF0ZSBhIHJlcGVhdCB3 aWRnZXQgd2l0aCBhIGNob2ljZSBjb3JyZWN0bHkuIgorICAod2l0aC10ZW1wLWJ1ZmZlcgorICAg ICh3aWRnZXQtaW5zZXJ0ICJUZXN0aW5nLlxuXG4iKQorICAgIChsZXQqICgod2lkZ2V0ICh3aWRn ZXQtY3JlYXRlICdyZXBlYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZW50 cnktZm9ybWF0ICIlaSAlZCAldiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 dmFsdWUgJygoOnRlc3QgMikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhj aG9pY2UgKGNvbnN0IG5pbCkgKGNvbnN0IHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGxpc3Qgc3ltYm9sIG51bWJlcikpKSkKKyAgICAgICAgICAgKGNoaWxk IChjYXIgKHdpZGdldC1nZXQgd2lkZ2V0IDpjaGlsZHJlbikpKSkKKyAgICAgICh3aWRnZXQtaW5z ZXJ0ICJcbiIpCisgICAgICAodXNlLWxvY2FsLW1hcCB3aWRnZXQta2V5bWFwKQorICAgICAgKHdp ZGdldC1zZXR1cCkKKyAgICAgIChzaG91bGQgY2hpbGQpCisgICAgICAoc2hvdWxkIChlcXVhbCAo d2lkZ2V0LXZhbHVlIHdpZGdldCkgJygoOnRlc3QgMikpKSkpKSkKKworKGVydC1kZWZ0ZXN0IHdp ZGdldC10ZXN0LXJlcGVhdC1jYW4taGFuZGxlLWlubGluYWJsZS1jaG9pY2UgKCkKKyAgIlRlc3Qg dGhhdCB3ZSBjYW4gY3JlYXRlIGEgcmVwZWF0IHdpZGdldCB3aXRoIGFuIGlubGluYWJsZSBjaG9p Y2UgY29ycmVjdGx5LiIKKyAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAod2lkZ2V0LWluc2VydCAi VGVzdGluZy5cblxuIikKKyAgICAobGV0KiAoKHdpZGdldCAod2lkZ2V0LWNyZWF0ZSAncmVwZWF0 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmVudHJ5LWZvcm1hdCAiJWkgJWQg JXYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnZhbHVlICcoOnRlc3QgMikK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKGNob2ljZSAoY29uc3QgbmlsKSAo Y29uc3QgdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlz dCA6aW5saW5lIHQgc3ltYm9sIG51bWJlcikpKSkKKyAgICAgICAgICAgKGNoaWxkICh3aWRnZXQt Z2V0IHdpZGdldCA6Y2hpbGRyZW4pKSkKKyAgICAgICh3aWRnZXQtaW5zZXJ0ICJcbiIpCisgICAg ICAodXNlLWxvY2FsLW1hcCB3aWRnZXQta2V5bWFwKQorICAgICAgKHdpZGdldC1zZXR1cCkKKyAg ICAgIChzaG91bGQgY2hpbGQpCisgICAgICAoc2hvdWxkIChlcXVhbCAod2lkZ2V0LXZhbHVlIHdp ZGdldCkgJyg6dGVzdCAyKSkpKSkpCisKKyhlcnQtZGVmdGVzdCB3aWRnZXQtdGVzdC1saXN0LWNh bi1oYW5kbGUtY2hvaWNlICgpCisgICJUZXN0IHRoYXQgd2UgY2FuIGNyZWF0ZSBhIGxpc3Qgd2lk Z2V0IHdpdGggYSBjaG9pY2UgY29ycmVjdGx5LiIKKyAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAo d2lkZ2V0LWluc2VydCAiVGVzdGluZy5cblxuIikKKyAgICAobGV0KiAoKHdpZGdldCAod2lkZ2V0 LWNyZWF0ZSAnbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp2YWx1ZSAn KCgxICJPbmUiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKGNob2ljZSBz dHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCBu dW1iZXIgc3RyaW5nKSkpKQorICAgICAgICAgICAoY2hpbGQgKGNhciAod2lkZ2V0LWdldCB3aWRn ZXQgOmNoaWxkcmVuKSkpKQorICAgICAgKHdpZGdldC1pbnNlcnQgIlxuIikKKyAgICAgICh1c2Ut bG9jYWwtbWFwIHdpZGdldC1rZXltYXApCisgICAgICAod2lkZ2V0LXNldHVwKQorICAgICAgKHNo b3VsZCBjaGlsZCkKKyAgICAgIChzaG91bGQgKGVxdWFsICh3aWRnZXQtdmFsdWUgd2lkZ2V0KSAn KCgxICJPbmUiKSkpKSkpKQorCisoZXJ0LWRlZnRlc3Qgd2lkZ2V0LXRlc3QtbGlzdC1jYW4taGFu ZGxlLWlubGluYWJsZS1jaG9pY2UgKCkKKyAgIlRlc3QgdGhhdCB3ZSBjYW4gY3JlYXRlIGEgbGlz dCB3aWRnZXQgd2l0aCBhbiBpbmxpbmFibGUgY2hvaWNlIGNvcnJlY3RseS4iCisgICh3aXRoLXRl bXAtYnVmZmVyCisgICAgKHdpZGdldC1pbnNlcnQgIlRlc3RpbmcuXG5cbiIpCisgICAgKGxldCog KCh3aWRnZXQgKHdpZGdldC1jcmVhdGUgJ2xpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6dmFsdWUgJygxICJPbmUiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICcoY2hvaWNlIHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChsaXN0IDppbmxpbmUgdCBudW1iZXIgc3RyaW5nKSkpKQorICAgICAgICAgICAoY2hp bGQgKGNhciAod2lkZ2V0LWdldCB3aWRnZXQgOmNoaWxkcmVuKSkpKQorICAgICAgKHdpZGdldC1p bnNlcnQgIlxuIikKKyAgICAgICh1c2UtbG9jYWwtbWFwIHdpZGdldC1rZXltYXApCisgICAgICAo d2lkZ2V0LXNldHVwKQorICAgICAgKHNob3VsZCBjaGlsZCkKKyAgICAgIChzaG91bGQgKGVxdWFs ICh3aWRnZXQtdmFsdWUgd2lkZ2V0KSAnKDEgIk9uZSIpKSkpKSkKKworKGVydC1kZWZ0ZXN0IHdp ZGdldC10ZXN0LW9wdGlvbi1jYW4taGFuZGxlLWNob2ljZSAoKQorICAiVGVzdCB0aGF0IHdlIGNh biBjcmVhdGUgYSBvcHRpb24gd2lkZ2V0IHdpdGggYSBjaG9pY2UgY29ycmVjdGx5LiIKKyAgKHdp dGgtdGVtcC1idWZmZXIKKyAgICAod2lkZ2V0LWluc2VydCAiVGVzdGluZy5cblxuIikKKyAgICAo bGV0KiAoKHdpZGdldCAod2lkZ2V0LWNyZWF0ZSAncmVwZWF0CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOnZhbHVlICcoKCJmb28iKSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAnKGxpc3QgKG9wdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGNob2ljZSBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxpc3QgOmlubGluZSB0CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBzdHJpbmcpKSkpKSkK KyAgICAgICAgICAgKGNoaWxkIChjYXIgKHdpZGdldC1nZXQgd2lkZ2V0IDpjaGlsZHJlbikpKSkK KyAgICAgICh3aWRnZXQtaW5zZXJ0ICJcbiIpCisgICAgICAodXNlLWxvY2FsLW1hcCB3aWRnZXQt a2V5bWFwKQorICAgICAgKHdpZGdldC1zZXR1cCkKKyAgICAgIChzaG91bGQgY2hpbGQpCisgICAg ICAoc2hvdWxkIChlcXVhbCAod2lkZ2V0LXZhbHVlIHdpZGdldCkgJygoImZvbyIpKSkpKSkpCisK KyhlcnQtZGVmdGVzdCB3aWRnZXQtdGVzdC1vcHRpb24tY2FuLWhhbmRsZS1pbmxpbmFibGUtY2hv aWNlICgpCisgICJUZXN0IHRoYXQgd2UgY2FuIGNyZWF0ZSBhIG9wdGlvbiB3aWRnZXQgd2l0aCBh biBpbmxpbmFibGUgY2hvaWNlIGNvcnJlY3RseS4iCisgICh3aXRoLXRlbXAtYnVmZmVyCisgICAg KHdpZGdldC1pbnNlcnQgIlRlc3RpbmcuXG5cbiIpCisgICAgKGxldCogKCh3aWRnZXQgKHdpZGdl dC1jcmVhdGUgJ3JlcGVhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp2YWx1 ZSAnKCgxICJPbmUiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKGxpc3Qg KG9wdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNob2lj ZSBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxpc3QgOmlubGluZSB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG51bWJlciBzdHJpbmcpKSkpKSkKKyAgICAgICAgICAgKGNoaWxk IChjYXIgKHdpZGdldC1nZXQgd2lkZ2V0IDpjaGlsZHJlbikpKSkKKyAgICAgICh3aWRnZXQtaW5z ZXJ0ICJcbiIpCisgICAgICAodXNlLWxvY2FsLW1hcCB3aWRnZXQta2V5bWFwKQorICAgICAgKHdp ZGdldC1zZXR1cCkKKyAgICAgIChzaG91bGQgY2hpbGQpCisgICAgICAoc2hvdWxkIChlcXVhbCAo d2lkZ2V0LXZhbHVlIHdpZGdldCkgJygoMSAiT25lIikpKSkpKSkKKwogOzs7IHdpZC1lZGl0LXRl c3RzLmVsIGVuZHMgaGVyZQotLSAKMi4yOS4yCgo= --0000000000001e155f05b442068d--