From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Tianxiang Xiong Newsgroups: gmane.emacs.devel Subject: Re: Proposal: font lock for `describe-variable` Date: Tue, 27 Sep 2016 20:45:08 -0700 Message-ID: References: <1474949378.32234.5.camel@gmail.com> <83shslbax3.fsf@gnu.org> <83ponpb5rv.fsf@gnu.org> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001a114d72a4012c2e053d893042 X-Trace: blaine.gmane.org 1475034348 14450 195.159.176.226 (28 Sep 2016 03:45:48 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Wed, 28 Sep 2016 03:45:48 +0000 (UTC) Cc: =?UTF-8?B?Q2zDqW1lbnQgUGl0LS1DbGF1ZGVs?= , monnier@iro.umontreal.ca, emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Sep 28 05:45:43 2016 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bp5oG-0001TS-By for ged-emacs-devel@m.gmane.org; Wed, 28 Sep 2016 05:45:28 +0200 Original-Received: from localhost ([::1]:55815 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bp5oE-00064M-Gj for ged-emacs-devel@m.gmane.org; Tue, 27 Sep 2016 23:45:26 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:41689) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bp5o4-00064A-VY for emacs-devel@gnu.org; Tue, 27 Sep 2016 23:45:19 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bp5o1-0001RW-3Z for emacs-devel@gnu.org; Tue, 27 Sep 2016 23:45:15 -0400 Original-Received: from mail-yw0-x229.google.com ([2607:f8b0:4002:c05::229]:34188) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bp5nx-0001Oh-9N; Tue, 27 Sep 2016 23:45:09 -0400 Original-Received: by mail-yw0-x229.google.com with SMTP id g192so21217831ywh.1; Tue, 27 Sep 2016 20:45:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=Vct/SiL3PuLOy59YQJ+6CbjCn1pAGjtAcqj1ySdUjZM=; b=Xsje472XJFUVPElmj75E13X5r0aNhEWyT7HH4V90wd75L3138HJ1k5btfjNAKS5T1d POpNzTDifD0rDyMGaV44fCLt9UZE7KGa+W/k33mRhMqf5sPJ1UhKqHRO/6k0VGXDnIN9 1Fh1phjnVbCNMZZgaJEMEIywLtsHnb0tohvPSXHN4YyhaZLd+O27laJlzTBNbJdDWLiW fnIRW8YkrgCXYns6Z0wcBNMZxg7CAjsnrBdQvZVzC+4RbsKMhsIt3QeyA7Y3oHcNCeAY rsCEdLcnodYVDjMDBRr5+TVDTRIrDfkNDUc1NsjfMqA3bI6E+e1PcnIq90cjl6KxUtOB ElaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=Vct/SiL3PuLOy59YQJ+6CbjCn1pAGjtAcqj1ySdUjZM=; b=U1TgvDm05hwU/xk0/8JGxPt2vNOAnRRSe8hkY10aVh3R7U+IkaVbPTUItA+ED4lqAh negaK9YpMZfpnCdLzFzTrN4j6Md7cNtKeWkCGVNfwAhJDJeyQsnkMpasjSx2kRWYpjoR PAAKe9cCWfc0h6I12WbR+RFgtE/BeZDV9CxDXrCZrYfocimRaTyNadUPf5/61cu9NkKu YQczqvQZGQtprLmMmp56fnPg5l8fSgsfjR0rxU5XaTsKtuowTxaLnSEck0G1fevXlePX OlKpSwC9LlhriSVh9YWby4iKyeg4m8NHEAOia9UhLj7k/78VSo8Nmu7HTegt3QorPtVZ ggtw== X-Gm-Message-State: AE9vXwORbveNCY+92/0y9lvUZQS4JVh9g76ZF9de6nnQfsoXvxWD9F7TKdqFnWP0zktj1uXwD9MPnF4dTc2J9Q== X-Received: by 10.129.70.11 with SMTP id t11mr22792864ywa.131.1475034308743; Tue, 27 Sep 2016 20:45:08 -0700 (PDT) Original-Received: by 10.129.104.67 with HTTP; Tue, 27 Sep 2016 20:45:08 -0700 (PDT) In-Reply-To: <83ponpb5rv.fsf@gnu.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2607:f8b0:4002:c05::229 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:207846 Archived-At: --001a114d72a4012c2e053d893042 Content-Type: multipart/alternative; boundary=001a114d72a4012c2a053d893040 --001a114d72a4012c2a053d893040 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable @Eli I don't know what you mean, then. The diffs in the 0002 version are definitely not due to whitespace changes; I explicitly removed the whitespace-only changes from 0001. There *is* a good amount of refactoring, simply because the previous code was very hard to follow. The new code is ~40 lines shorter and, if I do say so myself, much clearer. I've attached the 0002 version again in case there's something wrong with the previous one. 2016-09-27 10:40 GMT-07:00 Eli Zaretskii : > > From: Tianxiang Xiong > > Date: Tue, 27 Sep 2016 09:30:18 -0700 > > Cc: emacs-devel@gnu.org, monnier@iro.umontreal.ca, > > Cl=C3=A9ment Pit--Claudel > > > > Even the 0002 version? > > Yes. > --001a114d72a4012c2a053d893040 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
@Eli I don't know what you mean, then. The diffs in th= e 0002 version are definitely not due to whitespace changes; I explicitly r= emoved the whitespace-only changes from 0001.

There i= s=C2=A0a good amount of refactoring, simply because the previous code w= as very hard to follow. The new code is ~40 lines shorter and, if I do say = so myself, much clearer.

I've attached the 0002 = version again in case there's something wrong with the previous one.

2016-09-27 10:40= GMT-07:00 Eli Zaretskii <eliz@gnu.org>:
> From: Tianxiang Xiong <tianxiang.xiong@gmail.com>
> Date: Tue, 27 Sep 2016 09:30:18 -0700
> Cc: emacs-devel@gnu.org, monnier@iro.umontreal.ca,
>=C2=A0 =C2=A0 =C2=A0 =C2=A0Cl=C3=A9ment Pit--Claudel <clement.pit@gmail.com>
>
> Even the 0002 version?

Yes.

--001a114d72a4012c2a053d893040-- --001a114d72a4012c2e053d893042 Content-Type: text/x-patch; charset=US-ASCII; name="0002-Use-font-lock-for-describe-variable.patch" Content-Disposition: attachment; filename="0002-Use-font-lock-for-describe-variable.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_itmd93g60 RnJvbSA4ZGZmZmMxYzc2NjFjMjdjMjdlYzAxNzgyYjkxYjUxNDEwZjMxM2ZhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaWFueGlhbmcgWGlvbmcgPHRpYW54aWFuZy54aW9uZ0BnbWFp bC5jb20+CkRhdGU6IFNhdCwgMjQgU2VwIDIwMTYgMTk6NTc6MjEgLTA3MDAKU3ViamVjdDogW1BB VENIXSBVc2UgZm9udC1sb2NrIGZvciBgZGVzY3JpYmUtdmFyaWFibGVgCgpBcyBhIHNpZGUgZWZm ZWN0LCBjbGVhbiB1cCBjb2RlLgotLS0KIGxpc3AvaGVscC1mbnMuZWwgfCA1NzAgKysrKysrKysr KysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNo YW5nZWQsIDI2MyBpbnNlcnRpb25zKCspLCAzMDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv bGlzcC9oZWxwLWZucy5lbCBiL2xpc3AvaGVscC1mbnMuZWwKaW5kZXggZTRlMjMzMy4uNzY4YTI4 OCAxMDA2NDQKLS0tIGEvbGlzcC9oZWxwLWZucy5lbAorKysgYi9saXNwL2hlbHAtZm5zLmVsCkBA IC0zNSw2ICszNSw3IEBACiAocmVxdWlyZSAnY2wtbGliKQogKHJlcXVpcmUgJ2hlbHAtbW9kZSkK IChyZXF1aXJlICdyYWRpeC10cmVlKQorKHJlcXVpcmUgJ3N1YnIteCkKIAogKGRlZnZhciBoZWxw LWZucy1kZXNjcmliZS1mdW5jdGlvbi1mdW5jdGlvbnMgbmlsCiAgICJMaXN0IG9mIGZ1bmN0aW9u cyB0byBydW4gaW4gaGVscCBidWZmZXIgaW4gYGRlc2NyaWJlLWZ1bmN0aW9uJy4KQEAgLTczMywz MzQgKzczNCwyODkgQEAgZGVzY3JpYmUtdmFyaWFibGUtY3VzdG9tLXZlcnNpb24taW5mbwogCShj cHYgKGdldCB2YXJpYWJsZSAnY3VzdG9tLXBhY2thZ2UtdmVyc2lvbikpCiAJKG91dHB1dCBuaWwp KQogICAgIChpZiBjdXN0b20tdmVyc2lvbgotCShzZXRxIG91dHB1dAotCSAgICAgIChmb3JtYXQg IlRoaXMgdmFyaWFibGUgd2FzIGludHJvZHVjZWQsIG9yIGl0cyBkZWZhdWx0IHZhbHVlIHdhcyBj aGFuZ2VkLCBpblxudmVyc2lvbiAlcyBvZiBFbWFjcy5cbiIKLQkJICAgICAgY3VzdG9tLXZlcnNp b24pKQorICAgICAgICAoc2V0cSBvdXRwdXQKKyAgICAgICAgICAgICAgKGZvcm1hdCAiVGhpcyB2 YXJpYWJsZSB3YXMgaW50cm9kdWNlZCwgb3IgaXRzIGRlZmF1bHQgdmFsdWUgd2FzIGNoYW5nZWQs IGluIHZlcnNpb24gJXMgb2YgRW1hY3MuXG4iCisgICAgICAgICAgICAgICAgICAgICAgY3VzdG9t LXZlcnNpb24pKQogICAgICAgKHdoZW4gY3B2Ci0JKGxldCogKChwYWNrYWdlIChjYXItc2FmZSBj cHYpKQotCSAgICAgICAodmVyc2lvbiAoaWYgKGxpc3RwIChjZHItc2FmZSBjcHYpKQotCQkJICAg IChjYXIgKGNkci1zYWZlIGNwdikpCi0JCQkgIChjZHItc2FmZSBjcHYpKSkKLQkgICAgICAgKHBr Zy12ZXJzaW9ucyAoYXNzcSBwYWNrYWdlIGN1c3RvbWl6ZS1wYWNrYWdlLWVtYWNzLXZlcnNpb24t YWxpc3QpKQotCSAgICAgICAoZW1hY3N2IChjZHIgKGFzc29jIHZlcnNpb24gcGtnLXZlcnNpb25z KSkpKQotCSAgKGlmIChhbmQgcGFja2FnZSB2ZXJzaW9uKQotCSAgICAgIChzZXRxIG91dHB1dAot CQkgICAgKGZvcm1hdCAoY29uY2F0ICJUaGlzIHZhcmlhYmxlIHdhcyBpbnRyb2R1Y2VkLCBvciBp dHMgZGVmYXVsdCB2YWx1ZSB3YXMgY2hhbmdlZCwgaW5cbnZlcnNpb24gJXMgb2YgdGhlICVzIHBh Y2thZ2UiCi0JCQkJICAgIChpZiBlbWFjc3YKLQkJCQkJKGZvcm1hdCAiIHRoYXQgaXMgcGFydCBv ZiBFbWFjcyAlcyIgZW1hY3N2KSkKLQkJCQkgICAgIi5cbiIpCi0JCQkgICAgdmVyc2lvbiBwYWNr YWdlKSkpKSkpCisgICAgICAgIChsZXQqICgocGFja2FnZSAoY2FyLXNhZmUgY3B2KSkKKyAgICAg ICAgICAgICAgICh2ZXJzaW9uIChpZiAobGlzdHAgKGNkci1zYWZlIGNwdikpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGNhciAoY2RyLXNhZmUgY3B2KSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNkci1zYWZlIGNwdikpKQorICAgICAgICAgICAgICAgKHBrZy12ZXJzaW9ucyAo YXNzcSBwYWNrYWdlIGN1c3RvbWl6ZS1wYWNrYWdlLWVtYWNzLXZlcnNpb24tYWxpc3QpKQorICAg ICAgICAgICAgICAgKGVtYWNzdiAoY2RyIChhc3NvYyB2ZXJzaW9uIHBrZy12ZXJzaW9ucykpKSkK KyAgICAgICAgICAoaWYgKGFuZCBwYWNrYWdlIHZlcnNpb24pCisgICAgICAgICAgICAgIChzZXRx IG91dHB1dAorICAgICAgICAgICAgICAgICAgICAoZm9ybWF0IChjb25jYXQgIlRoaXMgdmFyaWFi bGUgd2FzIGludHJvZHVjZWQsIG9yIGl0cyBkZWZhdWx0IHZhbHVlIHdhcyBjaGFuZ2VkLCBpbiB2 ZXJzaW9uICVzIG9mIHRoZSAlcyBwYWNrYWdlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGlmIGVtYWNzdgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChmb3JtYXQgIiB0aGF0IGlzIHBhcnQgb2YgRW1hY3MgJXMiIGVtYWNzdikpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLlxuIikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2ZXJzaW9uIHBhY2thZ2UpKSkpKSkKICAgICBvdXRwdXQpKQogCiA7OzsjIyNhdXRv bG9hZAogKGRlZnVuIGRlc2NyaWJlLXZhcmlhYmxlICh2YXJpYWJsZSAmb3B0aW9uYWwgYnVmZmVy IGZyYW1lKQogICAiRGlzcGxheSB0aGUgZnVsbCBkb2N1bWVudGF0aW9uIG9mIFZBUklBQkxFIChh IHN5bWJvbCkuCi1SZXR1cm5zIHRoZSBkb2N1bWVudGF0aW9uIGFzIGEgc3RyaW5nLCBhbHNvLgot SWYgVkFSSUFCTEUgaGFzIGEgYnVmZmVyLWxvY2FsIHZhbHVlIGluIEJVRkZFUiBvciBGUkFNRQot XChkZWZhdWx0IHRvIHRoZSBjdXJyZW50IGJ1ZmZlciBhbmQgY3VycmVudCBmcmFtZSksCi1pdCBp cyBkaXNwbGF5ZWQgYWxvbmcgd2l0aCB0aGUgZ2xvYmFsIHZhbHVlLiIKKworUmV0dXJucyB0aGUg ZG9jdW1lbnRhdGlvbiBhcyBhIHN0cmluZy4KKworSWYgVkFSSUFCTEUgaGFzIGEgYnVmZmVyLWxv Y2FsIHZhbHVlIGluIEJVRkZFUiBvciBGUkFNRSAoZGVmYXVsdAordG8gdGhlIGN1cnJlbnQgYnVm ZmVyIGFuZCBmcmFtZSksIGl0IGlzIGRpc3BsYXllZCBhbG9uZword2l0aCB0aGUgZ2xvYmFsIHZh bHVlLiIKICAgKGludGVyYWN0aXZlCi0gICAobGV0ICgodiAodmFyaWFibGUtYXQtcG9pbnQpKQot CSAoZW5hYmxlLXJlY3Vyc2l2ZS1taW5pYnVmZmVycyB0KQotICAgICAgICAgKG9yaWctYnVmZmVy IChjdXJyZW50LWJ1ZmZlcikpCi0JIHZhbCkKLSAgICAgKHNldHEgdmFsIChjb21wbGV0aW5nLXJl YWQKKyAgIChsZXQqICgodiAodmFyaWFibGUtYXQtcG9pbnQpKQorICAgICAgICAgIChlbmFibGUt cmVjdXJzaXZlLW1pbmlidWZmZXJzIHQpCisgICAgICAgICAgKG9yaWctYnVmZmVyIChjdXJyZW50 LWJ1ZmZlcikpCisgICAgICAgICAgKHZhbCAoY29tcGxldGluZy1yZWFkCiAgICAgICAgICAgICAg ICAgKGlmIChzeW1ib2xwIHYpCiAgICAgICAgICAgICAgICAgICAgIChmb3JtYXQKICAgICAgICAg ICAgICAgICAgICAgICJEZXNjcmliZSB2YXJpYWJsZSAoZGVmYXVsdCAlcyk6ICIgdikKICAgICAg ICAgICAgICAgICAgICJEZXNjcmliZSB2YXJpYWJsZTogIikKICAgICAgICAgICAgICAgICAjJ2hl bHAtLXN5bWJvbC1jb21wbGV0aW9uLXRhYmxlCiAgICAgICAgICAgICAgICAgKGxhbWJkYSAodnYp Ci0gICAgICAgICAgICAgICAgICA7OyBJbiBjYXNlIHRoZSB2YXJpYWJsZSBvbmx5IGV4aXN0cyBp biB0aGUgYnVmZmVyCi0gICAgICAgICAgICAgICAgICA7OyB0aGUgY29tbWFuZCB3ZSBzd2l0Y2gg YmFjayB0byB0aGF0IGJ1ZmZlciBiZWZvcmUKLSAgICAgICAgICAgICAgICAgIDs7IHdlIGV4YW1p bmUgdGhlIHZhcmlhYmxlLgogICAgICAgICAgICAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIg b3JpZy1idWZmZXIKICAgICAgICAgICAgICAgICAgICAgKG9yIChnZXQgdnYgJ3ZhcmlhYmxlLWRv Y3VtZW50YXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAoYW5kIChib3VuZHAgdnYpIChu b3QgKGtleXdvcmRwIHZ2KSkpKSkpCi0gICAgICAgICAgICAgICAgdCBuaWwgbmlsCi0gICAgICAg ICAgICAgICAgKGlmIChzeW1ib2xwIHYpIChzeW1ib2wtbmFtZSB2KSkpKQotICAgICAobGlzdCAo aWYgKGVxdWFsIHZhbCAiIikKLQkgICAgICAgdiAoaW50ZXJuIHZhbCkpKSkpCi0gIChsZXQgKGZp bGUtbmFtZSkKLSAgICAodW5sZXNzIChidWZmZXItbGl2ZS1wIGJ1ZmZlcikgKHNldHEgYnVmZmVy IChjdXJyZW50LWJ1ZmZlcikpKQotICAgICh1bmxlc3MgKGZyYW1lLWxpdmUtcCBmcmFtZSkgKHNl dHEgZnJhbWUgKHNlbGVjdGVkLWZyYW1lKSkpCi0gICAgKGlmIChub3QgKHN5bWJvbHAgdmFyaWFi bGUpKQotCShtZXNzYWdlICJZb3UgZGlkIG5vdCBzcGVjaWZ5IGEgdmFyaWFibGUiKQotICAgICAg KHNhdmUtZXhjdXJzaW9uCi0JKGxldCAoKHZhbHZvaWQgKG5vdCAod2l0aC1jdXJyZW50LWJ1ZmZl ciBidWZmZXIgKGJvdW5kcCB2YXJpYWJsZSkpKSkKLQkgICAgICAocGVybWFuZW50LWxvY2FsIChn ZXQgdmFyaWFibGUgJ3Blcm1hbmVudC1sb2NhbCkpCi0JICAgICAgdmFsIHZhbC1zdGFydC1wb3Mg bG9jdXMpCi0JICA7OyBFeHRyYWN0IHRoZSB2YWx1ZSBiZWZvcmUgc2V0dGluZyB1cCB0aGUgb3V0 cHV0IGJ1ZmZlciwKLQkgIDs7IGluIGNhc2UgYGJ1ZmZlcicgKmlzKiB0aGUgb3V0cHV0IGJ1ZmZl ci4KLQkgICh1bmxlc3MgdmFsdm9pZAotCSAgICAod2l0aC1zZWxlY3RlZC1mcmFtZSBmcmFtZQot CSAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZmZlcgotCQkoc2V0cSB2YWwgKHN5bWJvbC12 YWx1ZSB2YXJpYWJsZSkKLQkJICAgICAgbG9jdXMgKHZhcmlhYmxlLWJpbmRpbmctbG9jdXMgdmFy aWFibGUpKSkpKQotCSAgKGhlbHAtc2V0dXAteHJlZiAobGlzdCAjJ2Rlc2NyaWJlLXZhcmlhYmxl IHZhcmlhYmxlIGJ1ZmZlcikKLQkJCSAgIChjYWxsZWQtaW50ZXJhY3RpdmVseS1wICdpbnRlcmFj dGl2ZSkpCi0JICAod2l0aC1oZWxwLXdpbmRvdyAoaGVscC1idWZmZXIpCi0JICAgICh3aXRoLWN1 cnJlbnQtYnVmZmVyIGJ1ZmZlcgotCSAgICAgIChwcmluMSB2YXJpYWJsZSkKLQkgICAgICAoc2V0 cSBmaWxlLW5hbWUgKGZpbmQtbGlzcC1vYmplY3QtZmlsZS1uYW1lIHZhcmlhYmxlICdkZWZ2YXIp KQotCi0JICAgICAgKGlmIGZpbGUtbmFtZQotCQkgIChwcm9nbgotCQkgICAgKHByaW5jIChmb3Jt YXQtbWVzc2FnZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaXMgYSB2YXJpYWJsZSBk ZWZpbmVkIGluIGAlcycuXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChlcSBm aWxlLW5hbWUgJ0Mtc291cmNlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQyBz b3VyY2UgY29kZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlLW5hbWUtbm9u ZGlyZWN0b3J5IGZpbGUtbmFtZSkpKSkKLQkJICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIHN0YW5k YXJkLW91dHB1dAotCQkgICAgICAoc2F2ZS1leGN1cnNpb24KLQkJCShyZS1zZWFyY2gtYmFja3dh cmQgKHN1YnN0aXR1dGUtY29tbWFuZC1rZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiYFxcKFteYCddK1xcKSciKQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuaWwgdCkKLQkJCShoZWxwLXhyZWYtYnV0dG9uIDEgJ2hl bHAtdmFyaWFibGUtZGVmCi0JCQkJCSAgdmFyaWFibGUgZmlsZS1uYW1lKSkpCi0JCSAgICAoaWYg dmFsdm9pZAotCQkJKHByaW5jICJJdCBpcyB2b2lkIGFzIGEgdmFyaWFibGUuIikKLQkJICAgICAg KHByaW5jICJJdHMgIikpKQotCQkoaWYgdmFsdm9pZAotCQkgICAgKHByaW5jICIgaXMgdm9pZCBh cyBhIHZhcmlhYmxlLiIpCi0JCSAgKHByaW5jIChzdWJzdGl0dXRlLWNvbW1hbmQta2V5cyAiJ3Mg IikpKSkpCi0JICAgICh1bmxlc3MgdmFsdm9pZAotCSAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVy IHN0YW5kYXJkLW91dHB1dAotCQkoc2V0cSB2YWwtc3RhcnQtcG9zIChwb2ludCkpCi0JCShwcmlu YyAidmFsdWUgaXMiKQotCQkobGV0ICgobGluZS1iZWcgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9u KSkKLQkJICAgICAgKHByaW50LXJlcAotCQkgICAgICAgKGxldCAoKHJlcAotCQkJICAgICAgKGxl dCAoKHByaW50LXF1b3RlZCB0KSkKLQkJCQkocHJpbjEtdG8tc3RyaW5nIHZhbCkpKSkKLQkJCSAo aWYgKGFuZCAoc3ltYm9scCB2YWwpIChub3QgKGJvb2xlYW5wIHZhbCkpKQotCQkJICAgICAoZm9y bWF0LW1lc3NhZ2UgImAlcyciIHJlcCkKLQkJCSAgIHJlcCkpKSkKLQkJICAoaWYgKDwgKCsgKGxl bmd0aCBwcmludC1yZXApIChwb2ludCkgKC0gbGluZS1iZWcpKSA2OCkKLQkJICAgICAgKGluc2Vy dCAiICIgcHJpbnQtcmVwKQotCQkgICAgKHRlcnByaSkKLQkJICAgIChwcCB2YWwpCi0gICAgICAg ICAgICAgICAgICAgIDs7IFJlbW92ZSB0cmFpbGluZyBuZXdsaW5lLgotICAgICAgICAgICAgICAg ICAgICAoZGVsZXRlLWNoYXIgLTEpKQotCQkgIChsZXQqICgoc3YgKGdldCB2YXJpYWJsZSAnc3Rh bmRhcmQtdmFsdWUpKQotCQkJIChvcmlndmFsIChhbmQgKGNvbnNwIHN2KQotCQkJCSAgICAgICAo Y29uZGl0aW9uLWNhc2UgbmlsCi0JCQkJCSAgIChldmFsIChjYXIgc3YpKQotCQkJCQkgKGVycm9y IDpoZWxwLWV2YWwtZXJyb3IpKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSkKLQkJ ICAgICh3aGVuIChhbmQgKGNvbnNwIHN2KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChub3QgKGVxdWFsIG9yaWd2YWwgdmFsKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAobm90IChlcXVhbCBvcmlndmFsIDpoZWxwLWV2YWwtZXJyb3IpKSkKLQkJICAgICAgKHByaW5j ICJcbk9yaWdpbmFsIHZhbHVlIHdhcyBcbiIpCi0JCSAgICAgIChzZXRxIGZyb20gKHBvaW50KSkK LQkJICAgICAgKHBwIG9yaWd2YWwpCi0JCSAgICAgIChpZiAoPCAocG9pbnQpICgrIGZyb20gMjAp KQotCQkJICAoZGVsZXRlLXJlZ2lvbiAoMS0gZnJvbSkgZnJvbSkpKSkpKSkKLQkgICAgKHRlcnBy aSkKLQkgICAgKHdoZW4gbG9jdXMKLQkgICAgICAoY29uZAorICAgICAgICAgICAgICAgIHQKKyAg ICAgICAgICAgICAgICBuaWwKKyAgICAgICAgICAgICAgICBuaWwKKyAgICAgICAgICAgICAgICAo d2hlbiAoc3ltYm9scCB2KSAoc3ltYm9sLW5hbWUgdikpKSkpCisgICAgIChsaXN0IChpZiAoZXF1 YWwgdmFsICIiKSB2IChpbnRlcm4gdmFsKSkpKSkKKyAgKHVubGVzcyAoYnVmZmVyLWxpdmUtcCBi dWZmZXIpIChzZXRxIGJ1ZmZlciAoY3VycmVudC1idWZmZXIpKSkKKyAgKHVubGVzcyAoZnJhbWUt bGl2ZS1wIGZyYW1lKSAoc2V0cSBmcmFtZSAoc2VsZWN0ZWQtZnJhbWUpKSkKKworICA7OyBFcnJv ciBpZiBubyB2YXJpYWJsZSBpcyBzcGVjaWZpZWQKKyAgKGlmIChub3QgKHN5bWJvbHAgdmFyaWFi bGUpKQorICAgICAgKHVzZXItZXJyb3IgIiVzIiAiWW91IGRpZCBub3Qgc3BlY2lmeSBhIHZhcmlh YmxlIikpCisKKyAgKHNhdmUtZXhjdXJzaW9uCisgICAgKGxldCogKCh2b2lkIChub3QgKHdpdGgt Y3VycmVudC1idWZmZXIgYnVmZmVyIChib3VuZHAgdmFyaWFibGUpKSkpCisgICAgICAgICAgICh2 YWwgKGlmIHZvaWQgbmlsIChzeW1ib2wtdmFsdWUgdmFyaWFibGUpKSkKKyAgICAgICAgICAgKGxv Y3VzICh2YXJpYWJsZS1iaW5kaW5nLWxvY3VzIHZhcmlhYmxlKSkpCisgICAgICAoY2wtZmxldCAo KHZhbHVlLXByZXR0eSAobGFtYmRhICh2YWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICh3aXRoLXRlbXAtYnVmZmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxldCAoKGxhcmdlIChhbmQgKHNlcXVlbmNlcCB2YWwpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKD4gKGxlbmd0aCB2YWwpIDUwMCkpKSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiBsYXJnZQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcmluYyB2YWwpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChwcCB2YWwgKGN1cnJlbnQtYnVmZmVyKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdoZW4gKGFuZCAobm90IChudWxsIHZhbCkp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vdCAo c3RyaW5ncCB2YWwpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChzZXF1ZW5jZXAgdmFsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoa2lsbC1iYWNrd2FyZC1jaGFycyAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGVtYWNzLWxpc3AtbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHR1cm4tb24tZm9udC1sb2NrKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoZm9udC1sb2NrLWVuc3VyZSkpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoYnVmZmVyLXN0cmluZykpKSkpKQorICAgICAgICA7OyBTZXR1cCB4 cmVmcworICAgICAgICAoaGVscC1zZXR1cC14cmVmIChsaXN0ICMnZGVzY3JpYmUtdmFyaWFibGUg dmFyaWFibGUgYnVmZmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgIChjYWxsZWQtaW50ZXJh Y3RpdmVseS1wICdpbnRlcmFjdGl2ZSkpCisKKyAgICAgICAgKHdpdGgtaGVscC13aW5kb3cgKGhl bHAtYnVmZmVyKQorICAgICAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIHN0YW5kYXJkLW91dHB1 dAorICAgICAgICAgICAgOzsgVmFyaWFibGUgbmFtZQorICAgICAgICAgICAgKGluc2VydCAocHJv cGVydGl6ZSAoc3ltYm9sLW5hbWUgdmFyaWFibGUpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICdmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpKQorCisgICAgICAgICAg ICA7OyBEZWZpbml0aW9uIGZpbGUKKyAgICAgICAgICAgIChpZi1sZXQgKChmaWxlLW5hbWUgKGZp bmQtbGlzcC1vYmplY3QtZmlsZS1uYW1lIHZhcmlhYmxlICdkZWZ2YXIpKSkKKyAgICAgICAgICAg ICAgICAocHJvZ24KKyAgICAgICAgICAgICAgICAgIChpbnNlcnQgIiBpcyBhIHZhcmlhYmxlIGRl ZmluZWQgaW4gIikKKyAgICAgICAgICAgICAgICAgIChpZiAoZXEgZmlsZS1uYW1lICdDLXNvdXJj ZSkKKyAgICAgICAgICAgICAgICAgICAgICAoaW5zZXJ0ICJDIHNvdXJjZSBjb2RlLiIpCisgICAg ICAgICAgICAgICAgICAgIChoZWxwLWluc2VydC14cmVmLWJ1dHRvbiAoZmlsZS1uYW1lLW5vbmRp cmVjdG9yeSBmaWxlLW5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnaGVscC12YXJpYWJsZS1kZWYgdmFyaWFibGUgZmlsZS1uYW1lKQorICAgICAgICAg ICAgICAgICAgICAoaW5zZXJ0ICIuIikpKSkKKyAgICAgICAgICAgIChpbnNlcnQgIlxuXG4iKQor CisgICAgICAgICAgICA7OyBWYWx1ZQorICAgICAgICAgICAgKGlmIHZvaWQKKyAgICAgICAgICAg ICAgICAoaW5zZXJ0ICJJdCBpcyB2b2lkIGFzIGEgdmFyaWFibGUuIikKKyAgICAgICAgICAgICAg KGlmIChhbmQgKG9yIChudWxsIHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJp bmdwIHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChub3QgKHNlcXVlbmNlcCB2YWwp KSkKKyAgICAgICAgICAgICAgICAgICAgICAgKDwgKGxlbmd0aCAocHJpbjEtdG8tc3RyaW5nIHZh bCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICgtIGZpbGwtY29sdW1uIDEzKSkpCisgICAg ICAgICAgICAgICAgICAoaW5zZXJ0IChmb3JtYXQtbWVzc2FnZSAiSXRzIHZhbHVlIGlzICVzLlxu IiAodmFsdWUtcHJldHR5IHZhbCkpKQorICAgICAgICAgICAgICAgIChpbnNlcnQgKGZvcm1hdC1t ZXNzYWdlICJJdHMgdmFsdWUgaXM6XG5cbiVzXG4iICh2YWx1ZS1wcmV0dHkgdmFsKSkpKQorCisg ICAgICAgICAgICAgIDs7IE9yaWdpbmFsIHZhbHVlCisgICAgICAgICAgICAgIChsZXQqICgoc3Yg KGdldCB2YXJpYWJsZSAnc3RhbmRhcmQtdmFsdWUpKQorICAgICAgICAgICAgICAgICAgICAgKG9y aWd2YWwgKGFuZCAoY29uc3Agc3YpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChjb25kaXRpb24tY2FzZSBuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChldmFsIChjYXIgc3YpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChlcnJvciA6aGVscC1ldmFsLWVycm9yKSkpKSkKKyAgICAgICAgICAgICAgICAod2hlbiAoYW5k IChjb25zcCBzdikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChub3QgKGVxdWFsIG9yaWd2 YWwgdmFsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChub3QgKGVxdWFsIG9yaWd2YWwg OmhlbHAtZXZhbC1lcnJvcikpKQorICAgICAgICAgICAgICAgICAgKGlmICg8IChsZW5ndGggKHBy aW4xLXRvLXN0cmluZyBvcmlndmFsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAoLSBmaWxs LWNvbHVtbiAxOSkpCisgICAgICAgICAgICAgICAgICAgICAgKGluc2VydCAoZm9ybWF0ICJPcmln aW5hbCB2YWx1ZSB3YXMgJXMuXG4iICh2YWx1ZS1wcmV0dHkgb3JpZ3ZhbCkpKQorICAgICAgICAg ICAgICAgICAgICAoaW5zZXJ0IChmb3JtYXQgIk9yaWdpbmFsIHZhbHVlIHdhczogXG5cbiVzIiAo dmFsdWUtcHJldHR5IG9yaWd2YWwpKSkpKSkpCisgICAgICAgICAgICAoaW5zZXJ0ICJcbiIpCisK KyAgICAgICAgICAgIDs7IExvY3VzICh3aGVyZSB2YXJpYWJsZSdzIGJpbmRpbmcgY29tZXMgZnJv bSkKKyAgICAgICAgICAgICh3aGVuIGxvY3VzCisgICAgICAgICAgICAgIChjb25kCiAgICAgICAg ICAgICAgICAoKGJ1ZmZlcnAgbG9jdXMpCi0gICAgICAgICAgICAgICAgKHByaW5jIChmb3JtYXQg IkxvY2FsIGluIGJ1ZmZlciAlczsgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChi dWZmZXItbmFtZSBidWZmZXIpKSkpCisgICAgICAgICAgICAgICAgKGluc2VydCAoZm9ybWF0ICJJ dCBpcyBsb2NhbCB0byBidWZmZXIgJXM7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGJ1ZmZlci1uYW1lIGxvY3VzKSkpKQogICAgICAgICAgICAgICAgKChmcmFtZXAgbG9jdXMp Ci0gICAgICAgICAgICAgICAgKHByaW5jIChmb3JtYXQgIkl0IGlzIGEgZnJhbWUtbG9jYWwgdmFy aWFibGU7ICIpKSkKKyAgICAgICAgICAgICAgICAoaW5zZXJ0IChmb3JtYXQgIkl0IGlzIGxvY2Fs IHRvIGZyYW1lICVzOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcmludDEt dG8tc3RyaW5nIGxvY3VzKSkpKQogICAgICAgICAgICAgICAgKCh0ZXJtaW5hbC1saXZlLXAgbG9j dXMpCi0gICAgICAgICAgICAgICAgKHByaW5jIChmb3JtYXQgIkl0IGlzIGEgdGVybWluYWwtbG9j YWwgdmFyaWFibGU7ICIpKSkKKyAgICAgICAgICAgICAgICAoaW5zZXJ0IChmb3JtYXQgIkl0IGlz IGxvY2FsIHRvIHRlcm1pbmFsICVzOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChwcmluMS10by1zdHJpbmcgbG9jdXMpKSkpCiAgICAgICAgICAgICAgICAodAotICAgICAgICAg ICAgICAgIChwcmluYyAoZm9ybWF0ICJJdCBpcyBsb2NhbCB0byAlUyIgbG9jdXMpKSkpCi0JICAg ICAgKGlmIChub3QgKGRlZmF1bHQtYm91bmRwIHZhcmlhYmxlKSkKLQkJICAocHJpbmMgImdsb2Jh bGx5IHZvaWQiKQotCQkobGV0ICgoZ2xvYmFsLXZhbCAoZGVmYXVsdC12YWx1ZSB2YXJpYWJsZSkp KQotCQkgICh3aXRoLWN1cnJlbnQtYnVmZmVyIHN0YW5kYXJkLW91dHB1dAotCQkgICAgKHByaW5j ICJnbG9iYWwgdmFsdWUgaXMgIikKLQkJICAgIChpZiAoZXEgdmFsIGdsb2JhbC12YWwpCi0JCQko cHJpbmMgInRoZSBzYW1lLiIpCi0JCSAgICAgICh0ZXJwcmkpCi0JCSAgICAgIDs7IEZpeG1lOiBw cCBjYW4gdGFrZSBhbiBhZ2UgaWYgeW91IGhhcHBlbiB0bwotCQkgICAgICA7OyBhc2sgZm9yIGEg dmVyeSBsYXJnZSBleHByZXNzaW9uLiAgV2Ugc2hvdWxkCi0JCSAgICAgIDs7IHByb2JhYmx5IHBy aW50IGl0IHJhdyBvbmNlIGFuZCBjaGVjayBpdCdzIGEKLQkJICAgICAgOzsgc2Vuc2libGUgc2l6 ZSBiZWZvcmUgcHJldHR5cHJpbnRpbmcuICAtLSBmeAotCQkgICAgICAobGV0ICgoZnJvbSAocG9p bnQpKSkKLQkJCShwcCBnbG9iYWwtdmFsKQotCQkJOzsgU2VlIHByZXZpb3VzIGNvbW1lbnQgZm9y IHRoaXMgZnVuY3Rpb24uCi0JCQk7OyAoaGVscC14cmVmLW9uLXBwIGZyb20gKHBvaW50KSkKLQkJ CShpZiAoPCAocG9pbnQpICgrIGZyb20gMjApKQotCQkJICAgIChkZWxldGUtcmVnaW9uICgxLSBm cm9tKSBmcm9tKSkpKSkpKQotICAgICAgICAgICAgICAodGVycHJpKSkKLQotCSAgICA7OyBJZiB0 aGUgdmFsdWUgaXMgbGFyZ2UsIG1vdmUgaXQgdG8gdGhlIGVuZC4KLQkgICAgKHdpdGgtY3VycmVu dC1idWZmZXIgc3RhbmRhcmQtb3V0cHV0Ci0JICAgICAgKHdoZW4gKD4gKGNvdW50LWxpbmVzIChw b2ludC1taW4pIChwb2ludC1tYXgpKSAxMCkKLQkJOzsgTm90ZSB0aGF0IHNldHRpbmcgdGhlIHN5 bnRheCB0YWJsZSBsaWtlIGJlbG93Ci0JCTs7IG1ha2VzIGZvcndhcmQtc2V4cCBtb3ZlIG92ZXIg YSBgJ3MnIGF0IHRoZSBlbmQKLQkJOzsgb2YgYSBzeW1ib2wuCi0JCShzZXQtc3ludGF4LXRhYmxl IGVtYWNzLWxpc3AtbW9kZS1zeW50YXgtdGFibGUpCi0JCShnb3RvLWNoYXIgdmFsLXN0YXJ0LXBv cykKLQkJOzsgVGhlIGxpbmUgYmVsb3cgcHJldmlvdXNseSByZWFkIGFzCi0JCTs7IChkZWxldGUt cmVnaW9uIChwb2ludCkgKHByb2duIChlbmQtb2YtbGluZSkgKHBvaW50KSkpCi0JCTs7IHdoaWNo IHN1cHByZXNzZWQgZGlzcGxheSBvZiB0aGUgYnVmZmVyIGxvY2FsIHZhbHVlIGZvcgotCQk7OyBs YXJnZSB2YWx1ZXMuCi0JCSh3aGVuIChsb29raW5nLWF0ICJ2YWx1ZSBpcyIpIChyZXBsYWNlLW1h dGNoICIiKSkKLQkJKHNhdmUtZXhjdXJzaW9uCi0JCSAgKGluc2VydCAiXG5cblZhbHVlOiIpCi0J CSAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnaGVscC1idXR0b24tY2FjaGUpCi0JCSAgICAg ICAocG9pbnQtbWFya2VyKSkpCi0JCShpbnNlcnQgInZhbHVlIGlzIHNob3duICIpCi0JCShpbnNl cnQtYnV0dG9uICJiZWxvdyIKLQkJCSAgICAgICAnYWN0aW9uIGhlbHAtYnV0dG9uLWNhY2hlCi0J CQkgICAgICAgJ2ZvbGxvdy1saW5rIHQKLQkJCSAgICAgICAnaGVscC1lY2hvICJtb3VzZS0yLCBS RVQ6IHNob3cgdmFsdWUiKQotCQkoaW5zZXJ0ICIuXG4iKSkpCi0gICAgICAgICAgICAodGVycHJp KQotCi0gICAgICAgICAgICAobGV0KiAoKGFsaWFzIChjb25kaXRpb24tY2FzZSBuaWwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChpbmRpcmVjdC12YXJpYWJsZSB2YXJpYWJsZSkKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IgdmFyaWFibGUpKSkKLSAgICAgICAgICAg ICAgICAgICAob2Jzb2xldGUgKGdldCB2YXJpYWJsZSAnYnl0ZS1vYnNvbGV0ZS12YXJpYWJsZSkp Ci0JCSAgICh1c2UgKGNhciBvYnNvbGV0ZSkpCi0JCSAgIChzYWZlLXZhciAoZ2V0IHZhcmlhYmxl ICdzYWZlLWxvY2FsLXZhcmlhYmxlKSkKLSAgICAgICAgICAgICAgICAgICAoZG9jIChvciAoZG9j dW1lbnRhdGlvbi1wcm9wZXJ0eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJs ZSAndmFyaWFibGUtZG9jdW1lbnRhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAo ZG9jdW1lbnRhdGlvbi1wcm9wZXJ0eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlh cyAndmFyaWFibGUtZG9jdW1lbnRhdGlvbikpKQotICAgICAgICAgICAgICAgICAgIChleHRyYS1s aW5lIG5pbCkpCi0KLQkgICAgICA7OyBNZW50aW9uIGlmIGl0J3MgYSBsb2NhbCB2YXJpYWJsZS4K LQkgICAgICAoY29uZAotCSAgICAgICAoKGFuZCAobG9jYWwtdmFyaWFibGUtaWYtc2V0LXAgdmFy aWFibGUpCi0JCSAgICAgKG9yIChub3QgKGxvY2FsLXZhcmlhYmxlLXAgdmFyaWFibGUpKQotCQkJ ICh3aXRoLXRlbXAtYnVmZmVyCi0JCQkgICAobG9jYWwtdmFyaWFibGUtaWYtc2V0LXAgdmFyaWFi bGUpKSkpCi0gICAgICAgICAgICAgICAgKHNldHEgZXh0cmEtbGluZSB0KQotICAgICAgICAgICAg ICAgIChwcmluYyAiICBBdXRvbWF0aWNhbGx5IGJlY29tZXMgIikKLQkJKGlmIHBlcm1hbmVudC1s b2NhbAotCQkgICAgKHByaW5jICJwZXJtYW5lbnRseSAiKSkKLQkJKHByaW5jICJidWZmZXItbG9j YWwgd2hlbiBzZXQuXG4iKSkKLQkgICAgICAgKChub3QgcGVybWFuZW50LWxvY2FsKSkKLQkgICAg ICAgKChidWZmZXJwIGxvY3VzKQotCQkoc2V0cSBleHRyYS1saW5lIHQpCi0JCShwcmluYwotCQkg KHN1YnN0aXR1dGUtY29tbWFuZC1rZXlzCi0JCSAgIiAgVGhpcyB2YXJpYWJsZSdzIGJ1ZmZlci1s b2NhbCB2YWx1ZSBpcyBwZXJtYW5lbnQuXG4iKSkpCi0JICAgICAgICh0Ci0JCShzZXRxIGV4dHJh LWxpbmUgdCkKLSAgICAgICAgICAgICAgICAocHJpbmMgKHN1YnN0aXR1dGUtY29tbWFuZC1rZXlz Ci0JCQkiICBUaGlzIHZhcmlhYmxlJ3MgdmFsdWUgaXMgcGVybWFuZW50IFwKLWlmIGl0IGlzIGdp dmVuIGEgbG9jYWwgYmluZGluZy5cbiIpKSkpCi0KLQkgICAgICA7OyBNZW50aW9uIGlmIGl0J3Mg YW4gYWxpYXMuCisgICAgICAgICAgICAgICAgKGluc2VydCAoZm9ybWF0ICJJdCBpcyBsb2NhbCB0 byAlcyIgbG9jdXMpKSkpCisgICAgICAgICAgICAgIChpZiAobm90IChkZWZhdWx0LWJvdW5kcCB2 YXJpYWJsZSkpCisgICAgICAgICAgICAgICAgICAoaW5zZXJ0ICJnbG9iYWxseSB2b2lkIikKKyAg ICAgICAgICAgICAgICAobGV0ICgoZ2xvYmFsLXZhbCAoZGVmYXVsdC12YWx1ZSB2YXJpYWJsZSkp KQorICAgICAgICAgICAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgc3RhbmRhcmQtb3V0cHV0 CisgICAgICAgICAgICAgICAgICAgIChpbnNlcnQgImdsb2JhbCB2YWx1ZSBpcyAiKQorICAgICAg ICAgICAgICAgICAgICAoaWYgKGVxIHZhbCBnbG9iYWwtdmFsKQorICAgICAgICAgICAgICAgICAg ICAgICAgKGluc2VydCAidGhlIHNhbWUuIikKKyAgICAgICAgICAgICAgICAgICAgICAoaW5zZXJ0 ICJcbiIpCisgICAgICAgICAgICAgICAgICAgICAgOzsgRml4bWU6IHBwIGNhbiB0YWtlIGFuIGFn ZSBpZiB5b3UgaGFwcGVuIHRvCisgICAgICAgICAgICAgICAgICAgICAgOzsgYXNrIGZvciBhIHZl cnkgbGFyZ2UgZXhwcmVzc2lvbi4gIFdlIHNob3VsZAorICAgICAgICAgICAgICAgICAgICAgIDs7 IHByb2JhYmx5IHByaW50IGl0IHJhdyBvbmNlIGFuZCBjaGVjayBpdCdzIGEKKyAgICAgICAgICAg ICAgICAgICAgICA7OyBzZW5zaWJsZSBzaXplIGJlZm9yZSBwcmV0dHlwcmludGluZy4gIC0tIGZ4 CisgICAgICAgICAgICAgICAgICAgICAgKGxldCAoKGZyb20gKHBvaW50KSkpCisgICAgICAgICAg ICAgICAgICAgICAgICAocHAgZ2xvYmFsLXZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7 IFNlZSBwcmV2aW91cyBjb21tZW50IGZvciB0aGlzIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAg ICAgICAgICAgOzsgKGhlbHAteHJlZi1vbi1wcCBmcm9tIChwb2ludCkpCisgICAgICAgICAgICAg ICAgICAgICAgICAoaWYgKDwgKHBvaW50KSAoKyBmcm9tIDIwKSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoZGVsZXRlLXJlZ2lvbiAoMS0gZnJvbSkgZnJvbSkpKSkpKSkpCisKKyAgICAg ICAgICAgIDs7IEJ1ZmZlciBsb2NhbAorICAgICAgICAgICAgKGNvbmQKKyAgICAgICAgICAgICAo KGFuZCAobG9jYWwtdmFyaWFibGUtaWYtc2V0LXAgdmFyaWFibGUpCisgICAgICAgICAgICAgICAg ICAgKG9yIChub3QgKGxvY2FsLXZhcmlhYmxlLXAgdmFyaWFibGUpKQorICAgICAgICAgICAgICAg ICAgICAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgICAgICAgICAgICAgICAgICAgIChsb2Nh bC12YXJpYWJsZS1pZi1zZXQtcCB2YXJpYWJsZSkpKSkKKyAgICAgICAgICAgICAgKGluc2VydCAi QXV0b21hdGljYWxseSBiZWNvbWVzICIpCisgICAgICAgICAgICAgIChpZiAoZ2V0IHZhcmlhYmxl ICdwZXJtYW5lbnQtbG9jYWwpCisgICAgICAgICAgICAgICAgICAoaW5zZXJ0ICJwZXJtYW5lbnRs eSAiKSkKKyAgICAgICAgICAgICAgKGluc2VydCAiYnVmZmVyLWxvY2FsIHdoZW4gc2V0LlxuXG4i KSkKKyAgICAgICAgICAgICAoKG5vdCAoZ2V0IHZhcmlhYmxlICdwZXJtYW5lbnQtbG9jYWwpKSkK KyAgICAgICAgICAgICAoKGJ1ZmZlcnAgbG9jdXMpCisgICAgICAgICAgICAgIChpbnNlcnQKKyAg ICAgICAgICAgICAgIChzdWJzdGl0dXRlLWNvbW1hbmQta2V5cworICAgICAgICAgICAgICAgICJU aGlzIHZhcmlhYmxlJ3MgYnVmZmVyLWxvY2FsIHZhbHVlIGlzIHBlcm1hbmVudC5cblxuIikpKQor ICAgICAgICAgICAgICh0CisgICAgICAgICAgICAgIChpbnNlcnQgIlRoaXMgdmFyaWFibGUncyB2 YWx1ZSBpcyBwZXJtYW5lbnQgaWYgaXQgaXMgZ2l2ZW4gYSBsb2NhbCBiaW5kaW5nLlxuXG4iKSkp CisKKyAgICAgICAgICAgIDs7IEFsaWFzCisgICAgICAgICAgICAobGV0ICgoYWxpYXMgKGNvbmRp dGlvbi1jYXNlIG5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5kaXJlY3QtdmFy aWFibGUgdmFyaWFibGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IgdmFyaWFi bGUpKSkpCiAgICAgICAgICAgICAgICh1bmxlc3MgKGVxIGFsaWFzIHZhcmlhYmxlKQotICAgICAg ICAgICAgICAgIChzZXRxIGV4dHJhLWxpbmUgdCkKLSAgICAgICAgICAgICAgICAocHJpbmMgKGZv cm1hdC1tZXNzYWdlCi0gICAgICAgICAgICAgICAgICAgICAgICAiICBUaGlzIHZhcmlhYmxlIGlz IGFuIGFsaWFzIGZvciBgJXMnLlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgYWxpYXMpKSkK LQotICAgICAgICAgICAgICAod2hlbiBvYnNvbGV0ZQotICAgICAgICAgICAgICAgIChzZXRxIGV4 dHJhLWxpbmUgdCkKLSAgICAgICAgICAgICAgICAocHJpbmMgIiAgVGhpcyB2YXJpYWJsZSBpcyBv YnNvbGV0ZSIpCi0gICAgICAgICAgICAgICAgKGlmIChudGggMiBvYnNvbGV0ZSkKLSAgICAgICAg ICAgICAgICAgICAgKHByaW5jIChmb3JtYXQgIiBzaW5jZSAlcyIgKG50aCAyIG9ic29sZXRlKSkp KQotCQkocHJpbmMgKGNvbmQgKChzdHJpbmdwIHVzZSkgKGNvbmNhdCAiO1xuICAiIHVzZSkpCi0J CQkgICAgICh1c2UgKGZvcm1hdC1tZXNzYWdlICI7XG4gIHVzZSBgJXMnIGluc3RlYWQuIgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FyIG9ic29s ZXRlKSkpCi0JCQkgICAgICh0ICIuIikpKQotICAgICAgICAgICAgICAgICh0ZXJwcmkpKQotCi0J ICAgICAgKHdoZW4gKG1lbWJlciAoY29ucyB2YXJpYWJsZSB2YWwpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBmaWxlLWxvY2FsLXZhcmlhYmxlcy1hbGlzdCkpCi0JCShzZXRxIGV4dHJh LWxpbmUgdCkKLQkJKGlmIChtZW1iZXIgKGNvbnMgdmFyaWFibGUgdmFsKQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBidWZmZXIKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkaXItbG9jYWwtdmFyaWFibGVzLWFsaXN0KSkKLQkJICAgIChs ZXQgKChmaWxlIChhbmQgKGJ1ZmZlci1maWxlLW5hbWUgYnVmZmVyKQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobm90IChmaWxlLXJlbW90ZS1wCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChidWZmZXItZmlsZS1uYW1lIGJ1ZmZlcikp KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlyLWxvY2Fscy1maW5k LWZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChidWZmZXItZmls ZS1uYW1lIGJ1ZmZlcikpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzLWRpcmVjdG9y eSBuaWwpKQotCQkgICAgICAocHJpbmMgKHN1YnN0aXR1dGUtY29tbWFuZC1rZXlzCi0JCQkgICAg ICAiICBUaGlzIHZhcmlhYmxlJ3MgdmFsdWUgaXMgZGlyZWN0b3J5LWxvY2FsIikpCi0gICAgICAg ICAgICAgICAgICAgICAgKHdoZW4gKGNvbnNwIGZpbGUpIDsgcmVzdWx0IGZyb20gY2FjaGUKLSAg ICAgICAgICAgICAgICAgICAgICAgIDs7IElmIHRoZSBjYWNoZSBlbGVtZW50IGhhcyBhbiBtdGlt ZSwgd2UKLSAgICAgICAgICAgICAgICAgICAgICAgIDs7IGFzc3VtZSBpdCBjYW1lIGZyb20gYSBm aWxlLgotICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChudGggMiBmaWxlKQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDs7IChjYXIgZmlsZSkgaXMgYSBkaXJlY3RvcnkuCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHNldHEgZmlsZSAoZGlyLWxvY2Fscy0tYWxsLWZpbGVzIChj YXIgZmlsZSkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBPdGhlcndpc2UsIGFzc3Vt ZSBpdCB3YXMgc2V0IGRpcmVjdGx5LgotICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSBm aWxlIChjYXIgZmlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMtZGlyZWN0 b3J5IHQpKSkKLSAgICAgICAgICAgICAgICAgICAgICAoaWYgKG51bGwgZmlsZSkKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgKHByaW5jICIuXG4iKQotICAgICAgICAgICAgICAgICAgICAgICAg KHByaW5jICIsIHNldCAiKQotICAgICAgICAgICAgICAgICAgICAgICAgKHByaW5jIChzdWJzdGl0 dXRlLWNvbW1hbmQta2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uZAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzLWRpcmVjdG9yeSAiZm9yIHRoZSBk aXJlY3RvcnlcbiAgYCIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBNYW55 IGZpbGVzIG1hdGNoZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGFuZCAo Y29uc3AgZmlsZSkgKGNkciBmaWxlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoc2V0cSBmaWxlIChmaWxlLW5hbWUtZGlyZWN0b3J5IChjYXIgZmlsZSkpKQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtYXQgImJ5IG9uZSBvZiB0aGVcbiAgJXMgZmls ZXMgaW4gdGhlIGRpcmVjdG9yeVxuICBgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGlyLWxvY2Fscy1maWxlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICh0IChzZXRxIGZpbGUgKGNhciBmaWxlKSkKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJieSB0aGUgZmlsZVxuICBgIikpKSkKLQkJCSh3aXRoLWN1cnJlbnQtYnVm ZmVyIHN0YW5kYXJkLW91dHB1dAotCQkJICAoaW5zZXJ0LXRleHQtYnV0dG9uCi0JCQkgICBmaWxl ICd0eXBlICdoZWxwLWRpci1sb2NhbC12YXItZGVmCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdoZWxwLWFyZ3MgKGxpc3QgdmFyaWFibGUgZmlsZSkpKQotCQkJKHByaW5jIChzdWJzdGl0 dXRlLWNvbW1hbmQta2V5cyAiJy5cbiIpKSkpCi0JCSAgKHByaW5jIChzdWJzdGl0dXRlLWNvbW1h bmQta2V5cwotCQkJICAiICBUaGlzIHZhcmlhYmxlJ3MgdmFsdWUgaXMgZmlsZS1sb2NhbC5cbiIp KSkpCi0KLQkgICAgICAod2hlbiAobWVtcSB2YXJpYWJsZSBpZ25vcmVkLWxvY2FsLXZhcmlhYmxl cykKLQkJKHNldHEgZXh0cmEtbGluZSB0KQotCQkocHJpbmMgIiAgVGhpcyB2YXJpYWJsZSBpcyBp Z25vcmVkIGFzIGEgZmlsZS1sb2NhbCBcCi12YXJpYWJsZS5cbiIpKQotCi0JICAgICAgOzsgQ2Fu IGJlIGJvdGggcmlza3kgYW5kIHNhZmUsIGVnIGF1dG8tZmlsbC1mdW5jdGlvbi4KLQkgICAgICAo d2hlbiAocmlza3ktbG9jYWwtdmFyaWFibGUtcCB2YXJpYWJsZSkKLQkJKHNldHEgZXh0cmEtbGlu ZSB0KQotCQkocHJpbmMgIiAgVGhpcyB2YXJpYWJsZSBtYXkgYmUgcmlza3kgaWYgdXNlZCBhcyBh IFwKLWZpbGUtbG9jYWwgdmFyaWFibGUuXG4iKQotCQkod2hlbiAoYXNzcSB2YXJpYWJsZSBzYWZl LWxvY2FsLXZhcmlhYmxlLXZhbHVlcykKLQkJICAocHJpbmMgKHN1YnN0aXR1dGUtY29tbWFuZC1r ZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIgIEhvd2V2ZXIsIHlvdSBoYXZlIGFkZGVk IGl0IHRvIFwKLWBzYWZlLWxvY2FsLXZhcmlhYmxlLXZhbHVlcycuXG4iKSkpKQotCi0JICAgICAg KHdoZW4gc2FmZS12YXIKLSAgICAgICAgICAgICAgICAoc2V0cSBleHRyYS1saW5lIHQpCi0JCShw cmluYyAiICBUaGlzIHZhcmlhYmxlIGlzIHNhZmUgYXMgYSBmaWxlIGxvY2FsIHZhcmlhYmxlICIp Ci0JCShwcmluYyAiaWYgaXRzIHZhbHVlXG4gIHNhdGlzZmllcyB0aGUgcHJlZGljYXRlICIpCi0J CShwcmluYyAoaWYgKGJ5dGUtY29kZS1mdW5jdGlvbi1wIHNhZmUtdmFyKQotCQkJICAgIndoaWNo IGlzIGEgYnl0ZS1jb21waWxlZCBleHByZXNzaW9uLlxuIgotCQkJIChmb3JtYXQtbWVzc2FnZSAi YCVzJy5cbiIgc2FmZS12YXIpKSkpCi0KLSAgICAgICAgICAgICAgKGlmIGV4dHJhLWxpbmUgKHRl cnByaSkpCi0JICAgICAgKHByaW5jICJEb2N1bWVudGF0aW9uOlxuIikKLQkgICAgICAod2l0aC1j dXJyZW50LWJ1ZmZlciBzdGFuZGFyZC1vdXRwdXQKLQkJKGluc2VydCAob3IgZG9jICJOb3QgZG9j dW1lbnRlZCBhcyBhIHZhcmlhYmxlLiIpKSkpCi0KLQkgICAgOzsgTWFrZSBhIGxpbmsgdG8gY3Vz dG9taXplIGlmIHRoaXMgdmFyaWFibGUgY2FuIGJlIGN1c3RvbWl6ZWQuCi0JICAgICh3aGVuIChj dXN0b20tdmFyaWFibGUtcCB2YXJpYWJsZSkKLQkgICAgICAobGV0ICgoY3VzdG9taXplLWxhYmVs ICJjdXN0b21pemUiKSkKLQkJKHRlcnByaSkKLQkJKHRlcnByaSkKLQkJKHByaW5jIChjb25jYXQg IllvdSBjYW4gIiBjdXN0b21pemUtbGFiZWwgIiB0aGlzIHZhcmlhYmxlLiIpKQotCQkod2l0aC1j dXJyZW50LWJ1ZmZlciBzdGFuZGFyZC1vdXRwdXQKLQkJICAoc2F2ZS1leGN1cnNpb24KLQkJICAg IChyZS1zZWFyY2gtYmFja3dhcmQKLQkJICAgICAoY29uY2F0ICJcXCgiIGN1c3RvbWl6ZS1sYWJl bCAiXFwpIikgbmlsIHQpCi0JCSAgICAoaGVscC14cmVmLWJ1dHRvbiAxICdoZWxwLWN1c3RvbWl6 ZS12YXJpYWJsZSB2YXJpYWJsZSkpKSkKLQkgICAgICA7OyBOb3RlIHZhcmlhYmxlJ3MgdmVyc2lv biBvciBwYWNrYWdlIHZlcnNpb24uCi0JICAgICAgKGxldCAoKG91dHB1dCAoZGVzY3JpYmUtdmFy aWFibGUtY3VzdG9tLXZlcnNpb24taW5mbyB2YXJpYWJsZSkpKQotCQkod2hlbiBvdXRwdXQKLQkJ ICAodGVycHJpKQotCQkgICh0ZXJwcmkpCi0JCSAgKHByaW5jIG91dHB1dCkpKSkKLQotCSAgICAo d2l0aC1jdXJyZW50LWJ1ZmZlciBzdGFuZGFyZC1vdXRwdXQKLQkgICAgICA7OyBSZXR1cm4gdGhl IHRleHQgd2UgZGlzcGxheWVkLgotCSAgICAgIChidWZmZXItc3RyaW5nKSkpKSkpKSkKLQorICAg ICAgICAgICAgICAgIChpbnNlcnQgKGZvcm1hdC1tZXNzYWdlCisgICAgICAgICAgICAgICAgICAg ICAgICAgIlRoaXMgdmFyaWFibGUgaXMgYW4gYWxpYXMgZm9yIGAlcycuXG5cbiIgYWxpYXMpKSkp CisKKyAgICAgICAgICAgIDs7IE9ic29sZXRlCisgICAgICAgICAgICAobGV0KiAoKG9ic29sZXRl IChnZXQgdmFyaWFibGUgJ2J5dGUtb2Jzb2xldGUtdmFyaWFibGUpKQorICAgICAgICAgICAgICAg ICAgIChvYnNvbGV0ZS1zaW5jZSAobnRoIDIgb2Jzb2xldGUpKQorICAgICAgICAgICAgICAgICAg ICh1c2UgKGNhciBvYnNvbGV0ZSkpKQorICAgICAgICAgICAgICAod2hlbiBvYnNvbGV0ZS1zaW5j ZQorICAgICAgICAgICAgICAgIChpbnNlcnQgKHByb3BlcnRpemUgKGZvcm1hdC1tZXNzYWdlICJU aGlzIHZhcmlhYmxlIGlzIG9ic29sZXRlIHNpbmNlICVzIiBvYnNvbGV0ZS1zaW5jZSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWNlICdlcnJvcikpCisgICAgICAgICAg ICAgICAgKGluc2VydCAocHJvcGVydGl6ZSAoY29uZCAoKHN0cmluZ3AgdXNlKSAoY29uY2F0ICI7 ICIgdXNlICJcbiIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHVzZSAoZm9ybWF0LW1lc3NhZ2UgIjsgdXNlIGAlcycgaW5zdGVhZC5cbiIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYXIg b2Jzb2xldGUpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0 ICIuXG4iKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWNlICdlcnJv cikpCisgICAgICAgICAgICAgICAgKGluc2VydCAiXG4iKSkpCisKKyAgICAgICAgICAgIDs7IEZp bGUgb3IgZGlyZWN0b3J5IGxvY2FsCisgICAgICAgICAgICAod2hlbiAobWVtYmVyIChjb25zIHZh cmlhYmxlIHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHdpdGgtY3VycmVudC1idWZm ZXIgYnVmZmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS1sb2NhbC12YXJpYWJs ZXMtYWxpc3QpKQorICAgICAgICAgICAgICAoc2V0cSBleHRyYS1saW5lIHQpCisgICAgICAgICAg ICAgIChpZiAobWVtYmVyIChjb25zIHZhcmlhYmxlIHZhbCkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGlyLWxvY2FsLXZhcmlhYmxlcy1hbGlzdCkpCisgICAgICAgICAgICAgICAgICAobGV0 ICgoZmlsZSAoYW5kIChidWZmZXItZmlsZS1uYW1lIGJ1ZmZlcikKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKG5vdCAoZmlsZS1yZW1vdGUtcAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlci1maWxlLW5hbWUgYnVmZmVyKSkpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXItbG9jYWxzLWZpbmQtZmlsZQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlci1maWxlLW5hbWUgYnVmZmVyKSkp KQorICAgICAgICAgICAgICAgICAgICAgICAgKGlzLWRpcmVjdG9yeSBuaWwpKQorICAgICAgICAg ICAgICAgICAgICAoaW5zZXJ0ICJUaGlzIHZhcmlhYmxlJ3MgdmFsdWUgaXMgZGlyZWN0b3J5LWxv Y2FsIikKKyAgICAgICAgICAgICAgICAgICAgKHdoZW4gKGNvbnNwIGZpbGUpICA7IHJlc3VsdCBm cm9tIGNhY2hlCisgICAgICAgICAgICAgICAgICAgICAgOzsgSWYgdGhlIGNhY2hlIGVsZW1lbnQg aGFzIGFuIG10aW1lLCB3ZQorICAgICAgICAgICAgICAgICAgICAgIDs7IGFzc3VtZSBpdCBjYW1l IGZyb20gYSBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgIChpZiAobnRoIDIgZmlsZSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgOzsgKGNhciBmaWxlKSBpcyBhIGRpcmVjdG9yeS4KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgKHNldHEgZmlsZSAoZGlyLWxvY2Fscy0tYWxsLWZpbGVz IChjYXIgZmlsZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgOzsgT3RoZXJ3aXNlLCBhc3N1 bWUgaXQgd2FzIHNldCBkaXJlY3RseS4KKyAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIGZp bGUgKGNhciBmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMtZGlyZWN0b3J5 IHQpKSkKKyAgICAgICAgICAgICAgICAgICAgKGlmIChudWxsIGZpbGUpCisgICAgICAgICAgICAg ICAgICAgICAgICAoaW5zZXJ0ICIuXG4iKQorICAgICAgICAgICAgICAgICAgICAgIChpbnNlcnQg Iiwgc2V0ICIpCisgICAgICAgICAgICAgICAgICAgICAgKGluc2VydCAoc3Vic3RpdHV0ZS1jb21t YW5kLWtleXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uZAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoaXMtZGlyZWN0b3J5ICJmb3IgdGhlIGRpcmVjdG9yeVxu ICBgIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgTWFueSBmaWxlcyBtYXRj aGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGFuZCAoY29uc3AgZmlsZSkg KGNkciBmaWxlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIGZpbGUg KGZpbGUtbmFtZS1kaXJlY3RvcnkgKGNhciBmaWxlKSkpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoZm9ybWF0ICJieSBvbmUgb2YgdGhlXG4gICVzIGZpbGVzIGluIHRoZSBkaXJl Y3RvcnlcbiAgYCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGly LWxvY2Fscy1maWxlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHQgKHNldHEg ZmlsZSAoY2FyIGZpbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnkg dGhlIGZpbGVcbiAgYCIpKSkpCisgICAgICAgICAgICAgICAgICAgICAgKGhlbHAtaW5zZXJ0LXhy ZWYtYnV0dG9uIGZpbGUgJ2hlbHAtZGlyLWxvY2FsLXZhci1kZWYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZmlsZSkKKyAgICAgICAgICAg ICAgICAgICAgICAoaW5zZXJ0IChzdWJzdGl0dXRlLWNvbW1hbmQta2V5cyAiJy5cbiIpKSkpCisg ICAgICAgICAgICAgICAgKGluc2VydCAiVGhpcyB2YXJpYWJsZSdzIHZhbHVlIGlzIGZpbGUtbG9j YWwuXG4iKSkpCisKKyAgICAgICAgICAgIDs7IElnbm9yZWQgbG9jYWwKKyAgICAgICAgICAgICh3 aGVuIChtZW1xIHZhcmlhYmxlIGlnbm9yZWQtbG9jYWwtdmFyaWFibGVzKQorICAgICAgICAgICAg ICAoaW5zZXJ0ICJUaGlzIHZhcmlhYmxlIGlzIGlnbm9yZWQgYXMgYSBmaWxlLWxvY2FsIHZhcmlh YmxlLlxuXG4iKSkKKworICAgICAgICAgICAgOzsgUmlza3kgbG9jYWwKKyAgICAgICAgICAgICh3 aGVuIChyaXNreS1sb2NhbC12YXJpYWJsZS1wIHZhcmlhYmxlKQorICAgICAgICAgICAgICAoaW5z ZXJ0IChwcm9wZXJ0aXplICJUaGlzIHZhcmlhYmxlIG1heSBiZSByaXNreSBpZiB1c2VkIGFzIGEg ZmlsZS1sb2NhbCB2YXJpYWJsZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn ZmFjZSBmb250LWxvY2std2FybmluZy1mYWNlKSkKKyAgICAgICAgICAgICAgKGlmIChhc3NxIHZh cmlhYmxlIHNhZmUtbG9jYWwtdmFyaWFibGUtdmFsdWVzKQorICAgICAgICAgICAgICAgICAgKGlu c2VydCAiOyBob3dldmVyLCB5b3UgaGF2ZSBhZGRlZCBpdCB0byBgc2FmZS1sb2NhbC12YXJpYWJs ZS12YWx1ZXMnLlxuIikpCisgICAgICAgICAgICAgIChpbnNlcnQgIi5cblxuIikpCisKKyAgICAg ICAgICAgIDs7IFNhZmUgbG9jYWwKKyAgICAgICAgICAgICh3aGVuLWxldCAoKHNhZmUtdmFyIChn ZXQgdmFyaWFibGUgJ3NhZmUtbG9jYWwtdmFyaWFibGUpKSkKKyAgICAgICAgICAgICAgKGluc2Vy dCAiVGhpcyB2YXJpYWJsZSBpcyBzYWZlIGFzIGEgZmlsZSBsb2NhbCB2YXJpYWJsZSIpCisgICAg ICAgICAgICAgIChpbnNlcnQgImlmIGl0cyB2YWx1ZSBzYXRpc2ZpZXMgdGhlIHByZWRpY2F0ZSAi KQorICAgICAgICAgICAgICAoaW5zZXJ0IChpZiAoYnl0ZS1jb2RlLWZ1bmN0aW9uLXAgc2FmZS12 YXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGljaCBpcyBhIGJ5dGUtY29tcGlsZWQg ZXhwcmVzc2lvbi5cblxuIgorICAgICAgICAgICAgICAgICAgICAgICAgKGZvcm1hdC1tZXNzYWdl ICJgJXMnLlxuXG4iIHNhZmUtdmFyKSkpKQorCisgICAgICAgICAgICA7OyBEb2N1bWVudGF0aW9u CisgICAgICAgICAgICAodW5sZXNzIHZvaWQKKyAgICAgICAgICAgICAgKGxldCogKChhbGlhcyAo Y29uZGl0aW9uLWNhc2UgbmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbmRp cmVjdC12YXJpYWJsZSB2YXJpYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChl cnJvciB2YXJpYWJsZSkpKQorICAgICAgICAgICAgICAgICAgICAgKGRvYyAob3IgKGRvY3VtZW50 YXRpb24tcHJvcGVydHkgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICd2YXJpYWJsZS1kb2N1bWVudGF0aW9uKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGRvY3VtZW50YXRpb24tcHJvcGVydHkgYWxpYXMKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2YXJpYWJs ZS1kb2N1bWVudGF0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vdCBkb2N1 bWVudGVkIGFzIGEgdmFyaWFibGUuIikpKQorICAgICAgICAgICAgICAgIChpbnNlcnQgIkRvY3Vt ZW50YXRpb246XG5cbiIpCisgICAgICAgICAgICAgICAgKGluc2VydCAocHJvcGVydGl6ZSBkb2Mg J2ZhY2UgZm9udC1sb2NrLWRvYy1mYWNlKSkKKyAgICAgICAgICAgICAgICAoaW5zZXJ0ICJcblxu IikpKQorCisgICAgICAgICAgICA7OyBNYWtlIGEgbGluayB0byBjdXN0b21pemUgaWYgdGhpcyB2 YXJpYWJsZSBjYW4gYmUKKyAgICAgICAgICAgIDs7IGN1c3RvbWl6ZWQuCisgICAgICAgICAgICAo d2hlbiAoY3VzdG9tLXZhcmlhYmxlLXAgdmFyaWFibGUpCisgICAgICAgICAgICAgIChpbnNlcnQg IllvdSBjYW4gIikKKyAgICAgICAgICAgICAgKGhlbHAtaW5zZXJ0LXhyZWYtYnV0dG9uICJjdXN0 b21pemUiICdoZWxwLWN1c3RvbWl6ZS12YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdmFyaWFibGUpCisgICAgICAgICAgICAgIChpbnNlcnQgIiB0aGlzIHZh cmlhYmxlLiIpCisgICAgICAgICAgICAgIDs7IE5vdGUgdmFyaWFibGUncyB2ZXJzaW9uIG9yIHBh Y2thZ2UgdmVyc2lvbi4KKyAgICAgICAgICAgICAgKHdoZW4tbGV0ICgob3V0cHV0IChkZXNjcmli ZS12YXJpYWJsZS1jdXN0b20tdmVyc2lvbi1pbmZvIHZhcmlhYmxlKSkpCisgICAgICAgICAgICAg ICAgKGluc2VydCAiXG5cbiIpCisgICAgICAgICAgICAgICAgKGluc2VydCBvdXRwdXQpKSkKKwor ICAgICAgICAgICAgOzsgUmV0dXJuIHRoZSBIZWxwIGJ1ZmZlciBzdHJpbmcKKyAgICAgICAgICAg IChidWZmZXItc3RyaW5nKSkpKSkpKQogCiAoZGVmdmFyIGhlbHAteHJlZi1zdGFjay1pdGVtKQog Ci0tIAoyLjcuNAoK --001a114d72a4012c2e053d893042--