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: Sat, 8 Oct 2016 14:51:52 -0700 Message-ID: References: <1474949378.32234.5.camel@gmail.com> <83shslbax3.fsf@gnu.org> <83ponpb5rv.fsf@gnu.org> <57d030e9-1f2e-bc8e-f032-6ac345798c5f@gmail.com> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001a1141cbbceb357a053e6188c4 X-Trace: blaine.gmane.org 1475963568 9897 195.159.176.226 (8 Oct 2016 21:52:48 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sat, 8 Oct 2016 21:52:48 +0000 (UTC) Cc: Eli Zaretskii , Emacs developers , =?UTF-8?B?Q2zDqW1lbnQgUGl0LS1DbGF1ZGVs?= , monnier@iro.umontreal.ca To: Tino Calancha Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sat Oct 08 23:52:39 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 1bszXV-0007Bo-1W for ged-emacs-devel@m.gmane.org; Sat, 08 Oct 2016 23:52:17 +0200 Original-Received: from localhost ([::1]:42473 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bszXS-0001Fq-Gf for ged-emacs-devel@m.gmane.org; Sat, 08 Oct 2016 17:52:14 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:37295) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bszXH-0001FN-81 for emacs-devel@gnu.org; Sat, 08 Oct 2016 17:52:06 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bszXD-0000Lr-US for emacs-devel@gnu.org; Sat, 08 Oct 2016 17:52:03 -0400 Original-Received: from mail-yw0-x22a.google.com ([2607:f8b0:4002:c05::22a]:35093) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bszX8-0000J0-7J; Sat, 08 Oct 2016 17:51:54 -0400 Original-Received: by mail-yw0-x22a.google.com with SMTP id t193so51246992ywc.2; Sat, 08 Oct 2016 14:51:53 -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=TC2wfwC+fjll+vU8j8E3gq2YjsxXzffEyf5is9k2M/c=; b=D3R3CXJlp9faS5BLN8F0gKQWOBauFVBnooX+eZfvKUZZShmD639RNsyaTlACfPitk8 D6n1OHXFSMQ7dohGecu25XuhehQ4apPllLSf1qCWHZqYpqGfQGyIQAoF1mIG+lvjDPHh yO+AmU9uTRWzqWg6pLf56aA3/Cz7+qFt9n36KiTChiKjqFGZHgIKT++G0ZpeinVkW5PT gVZzhBBA14AiLcSFZpyij8CHfcL2lHUwBlonJCe/0+S7uMG82LjKtCjckL95Y01SDkqy 2N7SN42Xzwnv24zvp3lTOw4UQxrokdObQqI0mlXYMr2OPbw7mtaZgDUtcN2zZTET459o 2Jcg== 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=TC2wfwC+fjll+vU8j8E3gq2YjsxXzffEyf5is9k2M/c=; b=Pevbu35wqIjm3ZkpmZsq49sXGmW4DIdZNlfrq9kdf+UJcCr9TEhNCnoLqXv+BJ8KBb 3ZUjFcggbsIlqFVWcIQO1TErCWS2nRqXeJbCLrrYbhHOk/bl7OklVBCACySXLbu5U6x5 c6jYGRyw9E6wq9/CadCqhVJwL9BxiLolLiV5DPGiWD7WuPtmqxYu5RCxTGflKjJrF5u8 OAkyTIn6+iHIOjfCsT6hn2debR5scJg/rjYiqRgbmVx3la5guvcAdGRRNBH7uAg7x3F6 GD8OyJ8EVcmJwnSrhK5NlL4Py45/uO7df9h9Y6amaoQmQ6oPI4p/AFlB0cfoMlaVmo9Z aA5Q== X-Gm-Message-State: AA6/9RloP7gr6FzyNbNOKcCCGzq7VXDESXz+KpP4QYC4kcML/J2ruYlSvRCmEv8hqnJm5vbKTX8rC5mkqSX/1A== X-Received: by 10.129.116.65 with SMTP id p62mr10897254ywc.151.1475963513409; Sat, 08 Oct 2016 14:51:53 -0700 (PDT) Original-Received: by 10.129.80.195 with HTTP; Sat, 8 Oct 2016 14:51:52 -0700 (PDT) In-Reply-To: X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2607:f8b0:4002:c05::22a 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:208111 Archived-At: --001a1141cbbceb357a053e6188c4 Content-Type: multipart/alternative; boundary=001a1141cbbceb3576053e6188c2 --001a1141cbbceb3576053e6188c2 Content-Type: text/plain; charset=UTF-8 Here's a version that fixes a few issues: 1. Rings are handled separately. Surprisingly, rings are sequences (satisfy `sequencep`), but cannot be arguments to `length`. This seems like an error. See this StackOverlow question for more: http://emacs.stackexchange.com/questions/27335/rings-and-sequences 2. Large values are printed at the end, as before. 3. Regions have been tabified (is using tabs Emac Lisp style? It's considered bad style for most languages). 4. Newlines in strings have been put back in place. @Tino Seems to me that the use of `princ` is bad form for plain text, as is wrapping separate sections in `(with-current-buffer standard-output)`. It's easier to wrap everything in a top-level `(with-current-buffer standard-output)` anyway. TX On Mon, Oct 3, 2016 at 6:57 AM, Tino Calancha wrote: > > > On Fri, 30 Sep 2016, Tianxiang Xiong wrote: > > OK, I'll try to remove the whitespace changes. >> > Hi Tianxiang, > > i have three suggestions: > > I) > > i see your patch modified two functions: > `describe-variable-custom-version-info' > `describe-variable' > > maybe, in addition to the patch, you can provide the log message > of the commit in Emacs format, i mean: > > * lisp/help-fns.el (describe-variable-custom-version-info): blah, blah. > (describe-variable): blah, blah. > > that could make much clear what is the rationale of your changes. > > II) > I suggest to exclude from the patch the changes > princ --> insert > i guess the use of `princ' is intentional, in order to redirect the > standard output using: > (with-current-buffer standard-output > > If you like, you might provide a patch made of two commits: the first one > without > any princ --> insert changes, and then, > add a commit on top of the previous one providing these (princ ---> > insert) changes. > > III) > Do not drop embedded new lines as in: > (format "This variable was introduced, or its default value was changed, > in\nversion %s of Emacs.\n" > or in: > (format (concat "This variable was introduced, or its default value was > changed, in\nversion %s of the %s package" > > Those newlines prevent to having lines longer than 80 lines. They are > important. > > Regards, > Tino > --001a1141cbbceb3576053e6188c2 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Here's a version that fixes a few issues:

1. Rings are handled separately. Surprisingly, rings are sequences (= satisfy `sequencep`), but cannot be arguments to `length`. This seems like = an error. See this StackOverlow question for more:=C2=A0http://emacs.st= ackexchange.com/questions/27335/rings-and-sequences

2. Large values are printed at the end, as before.

3. Regions have been tabified (is using tabs Emac Lisp style? It'= ;s considered bad style for most languages).

4. Ne= wlines in strings have been put back in place.

@Ti= no Seems to me that the use of `princ` is bad form for plain text, as is wr= apping separate sections in `(with-current-buffer standard-output)`. It'= ;s easier to wrap everything in a top-level `(with-current-buffer standard-= output)` anyway.

TX


On Mon, Oct 3, 2016 a= t 6:57 AM, Tino Calancha <tino.calancha@gmail.com> wro= te:


On Fri, 30 Sep 2016, Tianxiang Xiong wrote:

OK, I'll try to remove the whitespace changes.
Hi Tianxiang,

i have three suggestions:

I)

i see your patch modified two functions:
`describe-variable-custom-version-info'
`describe-variable'

maybe, in addition to the patch,=C2=A0 you can provide the log message
of the commit in Emacs format, i mean:

* lisp/help-fns.el (describe-variable-custom-version-info): blah, blah= .
(describe-variable): blah, blah.

that could make much clear what is the rationale of your changes.

II)
I suggest to exclude from the patch the changes
princ --> insert
i guess the use of `princ' is intentional, in order to redirect the
standard output using:
(with-current-buffer standard-output

If you like, you might provide a patch made of two commits: the first one w= ithout
any princ --> insert changes, and then,
add a commit on top of the previous one providing these (princ ---> inse= rt) changes.

III)
Do not drop embedded new lines as in:
(format "This variable was introduced, or its default value was change= d, in\nversion %s of Emacs.\n"
or in:
(format (concat "This variable was introduced, or its default value wa= s changed, in\nversion %s of the %s package"

Those newlines prevent to having lines longer than 80 lines.=C2=A0 They are= important.

Regards,
Tino

--001a1141cbbceb3576053e6188c2-- --001a1141cbbceb357a053e6188c4 Content-Type: text/x-patch; charset=US-ASCII; name="0003-Use-font-lock-for-describe-variable.patch" Content-Disposition: attachment; filename="0003-Use-font-lock-for-describe-variable.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iu1qkcsx0 RnJvbSA4Mzc4ZDM4ODM5ZTRiYWYzY2Y4MDlhNjg4ZjFhZDBkNDhhMWRhMjc5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaWFueGlhbmcgWGlvbmcgPHRpYW54aWFuZy54aW9uZ0BnbWFp bC5jb20+CkRhdGU6IFNhdCwgMjQgU2VwIDIwMTYgMTk6NTc6MjEgLTA3MDAKU3ViamVjdDogW1BB VENIXSBVc2UgZm9udC1sb2NrIGZvciBgZGVzY3JpYmUtdmFyaWFibGVgCgpBcyBhIHNpZGUgZWZm ZWN0LCBjbGVhbiB1cCBjb2RlLgotLS0KIENoYW5nZUxvZy4yICAgICAgfCAgIDQgKwogbGlzcC9o ZWxwLWZucy5lbCB8IDU0OSArKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDI2MCBpbnNlcnRpb25zKCspLCAyOTMg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLjIgYi9DaGFuZ2VMb2cuMgppbmRl eCA0ZTc5Mjk1Li5jN2ViY2YwIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cuMgorKysgYi9DaGFuZ2VM b2cuMgpAQCAtMSwzICsxLDcgQEAKKzIwMTYtMTAtMDggIFRpYW5pYW5nIFhpb25nICA8dGlhbnhp YW5nLnhpb25nQGdtYWlsLmNvbT4KKworCSogbGlzcC9oZWxwLWZucy5lbCAoZGVzY3JpYmUtdmFy aWFibGUpOiBVc2UgZm9udCBsb2NrLCBjbGVhbiB1cAorCWNvZGUgZXRjLgogMjAxNi0wOC0yMiAg UGhpbGlwcCBTdGVwaGFuaSAgPHBoc3RAZ29vZ2xlLmNvbT4KIAogCVNvbWUgYXNzb3J0ZWQgZG9j dW1lbnRhdGlvbiBjbGFyaWZpY2F0aW9ucwpkaWZmIC0tZ2l0IGEvbGlzcC9oZWxwLWZucy5lbCBi L2xpc3AvaGVscC1mbnMuZWwKaW5kZXggZTRlMjMzMy4uOTY3M2NlNCAxMDA2NDQKLS0tIGEvbGlz cC9oZWxwLWZucy5lbAorKysgYi9saXNwL2hlbHAtZm5zLmVsCkBAIC0zNSw2ICszNSw3IEBACiAo cmVxdWlyZSAnY2wtbGliKQogKHJlcXVpcmUgJ2hlbHAtbW9kZSkKIChyZXF1aXJlICdyYWRpeC10 cmVlKQorKHJlcXVpcmUgJ3N1YnIteCkKIAogKGRlZnZhciBoZWxwLWZucy1kZXNjcmliZS1mdW5j dGlvbi1mdW5jdGlvbnMgbmlsCiAgICJMaXN0IG9mIGZ1bmN0aW9ucyB0byBydW4gaW4gaGVscCBi dWZmZXIgaW4gYGRlc2NyaWJlLWZ1bmN0aW9uJy4KQEAgLTc1NSwzMTMgKzc1NiwyNzUgQEAgZGVz Y3JpYmUtdmFyaWFibGUtY3VzdG9tLXZlcnNpb24taW5mbwogOzs7IyMjYXV0b2xvYWQKIChkZWZ1 biBkZXNjcmliZS12YXJpYWJsZSAodmFyaWFibGUgJm9wdGlvbmFsIGJ1ZmZlciBmcmFtZSkKICAg IkRpc3BsYXkgdGhlIGZ1bGwgZG9jdW1lbnRhdGlvbiBvZiBWQVJJQUJMRSAoYSBzeW1ib2wpLgot UmV0dXJucyB0aGUgZG9jdW1lbnRhdGlvbiBhcyBhIHN0cmluZywgYWxzby4KLUlmIFZBUklBQkxF IGhhcyBhIGJ1ZmZlci1sb2NhbCB2YWx1ZSBpbiBCVUZGRVIgb3IgRlJBTUUKLVwoZGVmYXVsdCB0 byB0aGUgY3VycmVudCBidWZmZXIgYW5kIGN1cnJlbnQgZnJhbWUpLAotaXQgaXMgZGlzcGxheWVk IGFsb25nIHdpdGggdGhlIGdsb2JhbCB2YWx1ZS4iCisKK1JldHVybnMgdGhlIGRvY3VtZW50YXRp b24gYXMgYSBzdHJpbmcuCisKK0lmIFZBUklBQkxFIGhhcyBhIGJ1ZmZlci1sb2NhbCB2YWx1ZSBp biBCVUZGRVIgb3IgRlJBTUUgKGRlZmF1bHQKK3RvIHRoZSBjdXJyZW50IGJ1ZmZlciBhbmQgZnJh bWUpLCBpdCBpcyBkaXNwbGF5ZWQgYWxvbmcKK3dpdGggdGhlIGdsb2JhbCB2YWx1ZS4iCiAgIChp bnRlcmFjdGl2ZQotICAgKGxldCAoKHYgKHZhcmlhYmxlLWF0LXBvaW50KSkKLQkgKGVuYWJsZS1y ZWN1cnNpdmUtbWluaWJ1ZmZlcnMgdCkKLSAgICAgICAgIChvcmlnLWJ1ZmZlciAoY3VycmVudC1i dWZmZXIpKQotCSB2YWwpCi0gICAgIChzZXRxIHZhbCAoY29tcGxldGluZy1yZWFkCi0gICAgICAg ICAgICAgICAgKGlmIChzeW1ib2xwIHYpCi0gICAgICAgICAgICAgICAgICAgIChmb3JtYXQKLSAg ICAgICAgICAgICAgICAgICAgICJEZXNjcmliZSB2YXJpYWJsZSAoZGVmYXVsdCAlcyk6ICIgdikK LSAgICAgICAgICAgICAgICAgICJEZXNjcmliZSB2YXJpYWJsZTogIikKLSAgICAgICAgICAgICAg ICAjJ2hlbHAtLXN5bWJvbC1jb21wbGV0aW9uLXRhYmxlCi0gICAgICAgICAgICAgICAgKGxhbWJk YSAodnYpCi0gICAgICAgICAgICAgICAgICA7OyBJbiBjYXNlIHRoZSB2YXJpYWJsZSBvbmx5IGV4 aXN0cyBpbiB0aGUgYnVmZmVyCi0gICAgICAgICAgICAgICAgICA7OyB0aGUgY29tbWFuZCB3ZSBz d2l0Y2ggYmFjayB0byB0aGF0IGJ1ZmZlciBiZWZvcmUKLSAgICAgICAgICAgICAgICAgIDs7IHdl IGV4YW1pbmUgdGhlIHZhcmlhYmxlLgotICAgICAgICAgICAgICAgICAgKHdpdGgtY3VycmVudC1i dWZmZXIgb3JpZy1idWZmZXIKLSAgICAgICAgICAgICAgICAgICAgKG9yIChnZXQgdnYgJ3Zhcmlh YmxlLWRvY3VtZW50YXRpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICAoYW5kIChib3VuZHAg dnYpIChub3QgKGtleXdvcmRwIHZ2KSkpKSkpCi0gICAgICAgICAgICAgICAgdCBuaWwgbmlsCi0g ICAgICAgICAgICAgICAgKGlmIChzeW1ib2xwIHYpIChzeW1ib2wtbmFtZSB2KSkpKQotICAgICAo bGlzdCAoaWYgKGVxdWFsIHZhbCAiIikKLQkgICAgICAgdiAoaW50ZXJuIHZhbCkpKSkpCi0gIChs ZXQgKGZpbGUtbmFtZSkKLSAgICAodW5sZXNzIChidWZmZXItbGl2ZS1wIGJ1ZmZlcikgKHNldHEg YnVmZmVyIChjdXJyZW50LWJ1ZmZlcikpKQotICAgICh1bmxlc3MgKGZyYW1lLWxpdmUtcCBmcmFt ZSkgKHNldHEgZnJhbWUgKHNlbGVjdGVkLWZyYW1lKSkpCi0gICAgKGlmIChub3QgKHN5bWJvbHAg dmFyaWFibGUpKQotCShtZXNzYWdlICJZb3UgZGlkIG5vdCBzcGVjaWZ5IGEgdmFyaWFibGUiKQot ICAgICAgKHNhdmUtZXhjdXJzaW9uCi0JKGxldCAoKHZhbHZvaWQgKG5vdCAod2l0aC1jdXJyZW50 LWJ1ZmZlciBidWZmZXIgKGJvdW5kcCB2YXJpYWJsZSkpKSkKLQkgICAgICAocGVybWFuZW50LWxv Y2FsIChnZXQgdmFyaWFibGUgJ3Blcm1hbmVudC1sb2NhbCkpCi0JICAgICAgdmFsIHZhbC1zdGFy dC1wb3MgbG9jdXMpCi0JICA7OyBFeHRyYWN0IHRoZSB2YWx1ZSBiZWZvcmUgc2V0dGluZyB1cCB0 aGUgb3V0cHV0IGJ1ZmZlciwKLQkgIDs7IGluIGNhc2UgYGJ1ZmZlcicgKmlzKiB0aGUgb3V0cHV0 IGJ1ZmZlci4KLQkgICh1bmxlc3MgdmFsdm9pZAotCSAgICAod2l0aC1zZWxlY3RlZC1mcmFtZSBm cmFtZQotCSAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZmZlcgotCQkoc2V0cSB2YWwgKHN5 bWJvbC12YWx1ZSB2YXJpYWJsZSkKLQkJICAgICAgbG9jdXMgKHZhcmlhYmxlLWJpbmRpbmctbG9j dXMgdmFyaWFibGUpKSkpKQotCSAgKGhlbHAtc2V0dXAteHJlZiAobGlzdCAjJ2Rlc2NyaWJlLXZh cmlhYmxlIHZhcmlhYmxlIGJ1ZmZlcikKLQkJCSAgIChjYWxsZWQtaW50ZXJhY3RpdmVseS1wICdp bnRlcmFjdGl2ZSkpCi0JICAod2l0aC1oZWxwLXdpbmRvdyAoaGVscC1idWZmZXIpCi0JICAgICh3 aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZmZlcgotCSAgICAgIChwcmluMSB2YXJpYWJsZSkKLQkgICAg ICAoc2V0cSBmaWxlLW5hbWUgKGZpbmQtbGlzcC1vYmplY3QtZmlsZS1uYW1lIHZhcmlhYmxlICdk ZWZ2YXIpKQotCi0JICAgICAgKGlmIGZpbGUtbmFtZQotCQkgIChwcm9nbgotCQkgICAgKHByaW5j IChmb3JtYXQtbWVzc2FnZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaXMgYSB2YXJp YWJsZSBkZWZpbmVkIGluIGAlcycuXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlm IChlcSBmaWxlLW5hbWUgJ0Mtc291cmNlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiQyBzb3VyY2UgY29kZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlLW5h bWUtbm9uZGlyZWN0b3J5IGZpbGUtbmFtZSkpKSkKLQkJICAgICh3aXRoLWN1cnJlbnQtYnVmZmVy IHN0YW5kYXJkLW91dHB1dAotCQkgICAgICAoc2F2ZS1leGN1cnNpb24KLQkJCShyZS1zZWFyY2gt YmFja3dhcmQgKHN1YnN0aXR1dGUtY29tbWFuZC1rZXlzCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiYFxcKFteYCddK1xcKSciKQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwgdCkKLQkJCShoZWxwLXhyZWYtYnV0dG9u IDEgJ2hlbHAtdmFyaWFibGUtZGVmCi0JCQkJCSAgdmFyaWFibGUgZmlsZS1uYW1lKSkpCi0JCSAg ICAoaWYgdmFsdm9pZAotCQkJKHByaW5jICJJdCBpcyB2b2lkIGFzIGEgdmFyaWFibGUuIikKLQkJ ICAgICAgKHByaW5jICJJdHMgIikpKQotCQkoaWYgdmFsdm9pZAotCQkgICAgKHByaW5jICIgaXMg dm9pZCBhcyBhIHZhcmlhYmxlLiIpCi0JCSAgKHByaW5jIChzdWJzdGl0dXRlLWNvbW1hbmQta2V5 cyAiJ3MgIikpKSkpCi0JICAgICh1bmxlc3MgdmFsdm9pZAotCSAgICAgICh3aXRoLWN1cnJlbnQt YnVmZmVyIHN0YW5kYXJkLW91dHB1dAotCQkoc2V0cSB2YWwtc3RhcnQtcG9zIChwb2ludCkpCi0J CShwcmluYyAidmFsdWUgaXMiKQotCQkobGV0ICgobGluZS1iZWcgKGxpbmUtYmVnaW5uaW5nLXBv c2l0aW9uKSkKLQkJICAgICAgKHByaW50LXJlcAotCQkgICAgICAgKGxldCAoKHJlcAotCQkJICAg ICAgKGxldCAoKHByaW50LXF1b3RlZCB0KSkKLQkJCQkocHJpbjEtdG8tc3RyaW5nIHZhbCkpKSkK LQkJCSAoaWYgKGFuZCAoc3ltYm9scCB2YWwpIChub3QgKGJvb2xlYW5wIHZhbCkpKQotCQkJICAg ICAoZm9ybWF0LW1lc3NhZ2UgImAlcyciIHJlcCkKLQkJCSAgIHJlcCkpKSkKLQkJICAoaWYgKDwg KCsgKGxlbmd0aCBwcmludC1yZXApIChwb2ludCkgKC0gbGluZS1iZWcpKSA2OCkKLQkJICAgICAg KGluc2VydCAiICIgcHJpbnQtcmVwKQotCQkgICAgKHRlcnByaSkKLQkJICAgIChwcCB2YWwpCi0g ICAgICAgICAgICAgICAgICAgIDs7IFJlbW92ZSB0cmFpbGluZyBuZXdsaW5lLgotICAgICAgICAg ICAgICAgICAgICAoZGVsZXRlLWNoYXIgLTEpKQotCQkgIChsZXQqICgoc3YgKGdldCB2YXJpYWJs ZSAnc3RhbmRhcmQtdmFsdWUpKQotCQkJIChvcmlndmFsIChhbmQgKGNvbnNwIHN2KQotCQkJCSAg ICAgICAoY29uZGl0aW9uLWNhc2UgbmlsCi0JCQkJCSAgIChldmFsIChjYXIgc3YpKQotCQkJCQkg KGVycm9yIDpoZWxwLWV2YWwtZXJyb3IpKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgZnJv bSkKLQkJICAgICh3aGVuIChhbmQgKGNvbnNwIHN2KQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChub3QgKGVxdWFsIG9yaWd2YWwgdmFsKSkKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAobm90IChlcXVhbCBvcmlndmFsIDpoZWxwLWV2YWwtZXJyb3IpKSkKLQkJICAgICAg KHByaW5jICJcbk9yaWdpbmFsIHZhbHVlIHdhcyBcbiIpCi0JCSAgICAgIChzZXRxIGZyb20gKHBv aW50KSkKLQkJICAgICAgKHBwIG9yaWd2YWwpCi0JCSAgICAgIChpZiAoPCAocG9pbnQpICgrIGZy b20gMjApKQotCQkJICAoZGVsZXRlLXJlZ2lvbiAoMS0gZnJvbSkgZnJvbSkpKSkpKSkKLQkgICAg KHRlcnByaSkKKyAgIChsZXQqICgodiAodmFyaWFibGUtYXQtcG9pbnQpKQorCSAgKGVuYWJsZS1y ZWN1cnNpdmUtbWluaWJ1ZmZlcnMgdCkKKwkgIChvcmlnLWJ1ZmZlciAoY3VycmVudC1idWZmZXIp KQorCSAgKHZhbCAoY29tcGxldGluZy1yZWFkCisJCShpZiAoc3ltYm9scCB2KQorCQkgICAgKGZv cm1hdAorCQkgICAgICJEZXNjcmliZSB2YXJpYWJsZSAoZGVmYXVsdCAlcyk6ICIgdikKKwkJICAi RGVzY3JpYmUgdmFyaWFibGU6ICIpCisJCSMnaGVscC0tc3ltYm9sLWNvbXBsZXRpb24tdGFibGUK KwkJKGxhbWJkYSAodnYpCisJCSAgKHdpdGgtY3VycmVudC1idWZmZXIgb3JpZy1idWZmZXIKKwkJ ICAgIChvciAoZ2V0IHZ2ICd2YXJpYWJsZS1kb2N1bWVudGF0aW9uKQorCQkJKGFuZCAoYm91bmRw IHZ2KSAobm90IChrZXl3b3JkcCB2dikpKSkpKQorCQl0CisJCW5pbAorCQluaWwKKwkJKHdoZW4g KHN5bWJvbHAgdikgKHN5bWJvbC1uYW1lIHYpKSkpKQorICAgICAobGlzdCAoaWYgKGVxdWFsIHZh bCAiIikgdiAoaW50ZXJuIHZhbCkpKSkpCisgICh1bmxlc3MgKGJ1ZmZlci1saXZlLXAgYnVmZmVy KSAoc2V0cSBidWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkpCisgICh1bmxlc3MgKGZyYW1lLWxpdmUt cCBmcmFtZSkgKHNldHEgZnJhbWUgKHNlbGVjdGVkLWZyYW1lKSkpCisKKyAgOzsgRXJyb3IgaWYg bm8gdmFyaWFibGUgaXMgc3BlY2lmaWVkCisgIChpZiAobm90IChzeW1ib2xwIHZhcmlhYmxlKSkK KyAgICAgICh1c2VyLWVycm9yICIlcyIgIllvdSBkaWQgbm90IHNwZWNpZnkgYSB2YXJpYWJsZSIp KQorCisgIChzYXZlLWV4Y3Vyc2lvbgorICAgIChsZXQqICgodm9pZCAobm90ICh3aXRoLWN1cnJl bnQtYnVmZmVyIGJ1ZmZlciAoYm91bmRwIHZhcmlhYmxlKSkpKQorCSAgICh2YWwgKGlmIHZvaWQg bmlsIChzeW1ib2wtdmFsdWUgdmFyaWFibGUpKSkKKwkgICAoc2hvdWxkLXBwIChhbmQgKHNlcXVl bmNlcCB2YWwpCisJCQkgICAobGV0ICgobCAoaWYgKHJpbmctcCB2YWwpCisJCQkJCShyaW5nLWxl bmd0aCB2YWwpCisJCQkJICAgICAgKGxlbmd0aCB2YWwpKSkpCisJCQkgICAgICg8IGwgNTAwKSkp KQorCSAgIChwbGFjZS1hdC1lbmQgKD4gKGxlbmd0aCAocHJpbjEtdG8tc3RyaW5nIHZhbCkpIDMw MDApKQorCSAgIChsb2N1cyAodmFyaWFibGUtYmluZGluZy1sb2N1cyB2YXJpYWJsZSkpKQorICAg ICAgKGNsLWxhYmVscyAoKHByZXR0eS1tYXliZSAodmFsKQorCQkJCSh3aXRoLXRlbXAtYnVmZmVy CisJCQkJICAoaWYgKG5vdCBzaG91bGQtcHApCisJCQkJICAgICAgKHByaW5jIHZhbCAoY3VycmVu dC1idWZmZXIpKQorCQkJCSAgICAocHAgdmFsIChjdXJyZW50LWJ1ZmZlcikpCisJCQkJICAgICh3 aGVuIChhbmQgKG5vdCAobnVsbCB2YWwpKQorCQkJCQkgICAgICAgKG5vdCAoc3RyaW5ncCB2YWwp KQorCQkJCQkgICAgICAgKHNlcXVlbmNlcCB2YWwpKQorCQkJCSAgICAgIChraWxsLWJhY2t3YXJk LWNoYXJzIDEpKQorCQkJCSAgICAoZW1hY3MtbGlzcC1tb2RlKQorCQkJCSAgICAodHVybi1vbi1m b250LWxvY2spCisJCQkJICAgIChmb250LWxvY2stZW5zdXJlKSkKKwkJCQkgIChidWZmZXItc3Ry aW5nKSkpCisJCSAgKGluc2VydC12YWx1ZS1zZWN0aW9uICh2YWwpCisJCQkJKGlmIHZvaWQKKwkJ CQkgICAgKGluc2VydCAiSXQgaXMgdm9pZCBhcyBhIHZhcmlhYmxlLiIpCisJCQkJICAoaWYgKGFu ZCAob3IgKG51bGwgdmFsKQorCQkJCQkgICAgICAgKHN0cmluZ3AgdmFsKQorCQkJCQkgICAgICAg KG5vdCAoc2VxdWVuY2VwIHZhbCkpKQorCQkJCQkgICAoPCAobGVuZ3RoIChwcmluMS10by1zdHJp bmcgdmFsKSkKKwkJCQkJICAgICAgKC0gZmlsbC1jb2x1bW4gMTMpKSkKKwkJCQkgICAgICAoaW5z ZXJ0IChmb3JtYXQtbWVzc2FnZSAiSXRzIHZhbHVlIGlzICVzLlxuIiAocHJldHR5LW1heWJlIHZh bCkpKQorCQkJCSAgICAoaW5zZXJ0IChmb3JtYXQtbWVzc2FnZSAiSXRzIHZhbHVlIGlzOlxuXG4l c1xuIiAocHJldHR5LW1heWJlIHZhbCkpKSkKKworCQkJCSAgOzsgT3JpZ2luYWwgdmFsdWUKKwkJ CQkgIChsZXQqICgoc3YgKGdldCB2YXJpYWJsZSAnc3RhbmRhcmQtdmFsdWUpKQorCQkJCQkgKG9y aWd2YWwgKGFuZCAoY29uc3Agc3YpCisJCQkJCQkgICAgICAgKGNvbmRpdGlvbi1jYXNlIG5pbAor CQkJCQkJCSAgIChldmFsIChjYXIgc3YpKQorCQkJCQkJCSAoZXJyb3IgOmhlbHAtZXZhbC1lcnJv cikpKSkpCisJCQkJICAgICh3aGVuIChhbmQgKGNvbnNwIHN2KQorCQkJCQkgICAgICAgKG5vdCAo ZXF1YWwgb3JpZ3ZhbCB2YWwpKQorCQkJCQkgICAgICAgKG5vdCAoZXF1YWwgb3JpZ3ZhbCA6aGVs cC1ldmFsLWVycm9yKSkpCisJCQkJICAgICAgKGlmICg8IChsZW5ndGggKHByaW4xLXRvLXN0cmlu ZyBvcmlndmFsKSkKKwkJCQkJICAgICAoLSBmaWxsLWNvbHVtbiAxOSkpCisJCQkJCSAgKGluc2Vy dCAoZm9ybWF0ICJPcmlnaW5hbCB2YWx1ZSB3YXMgJXMuXG4iIChwcmV0dHktbWF5YmUgb3JpZ3Zh bCkpKQorCQkJCQkoaW5zZXJ0IChmb3JtYXQgIk9yaWdpbmFsIHZhbHVlIHdhczogXG5cbiVzIiAo cHJldHR5LW1heWJlIG9yaWd2YWwpKSkpKSkpKSkKKwk7OyBTZXR1cCB4cmVmcworCShoZWxwLXNl dHVwLXhyZWYgKGxpc3QgIydkZXNjcmliZS12YXJpYWJsZSB2YXJpYWJsZSBidWZmZXIpCisJCQkg KGNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAgJ2ludGVyYWN0aXZlKSkKKworCSh3aXRoLWhlbHAtd2lu ZG93IChoZWxwLWJ1ZmZlcikKKwkgICh3aXRoLWN1cnJlbnQtYnVmZmVyIHN0YW5kYXJkLW91dHB1 dAorCSAgICA7OyBWYXJpYWJsZSBuYW1lCisJICAgIChpbnNlcnQgKHByb3BlcnRpemUgKHN5bWJv bC1uYW1lIHZhcmlhYmxlKQorCQkJCSdmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2Up KQorCisJICAgIDs7IERlZmluaXRpb24gZmlsZQorCSAgICAoaWYtbGV0ICgoZmlsZS1uYW1lIChm aW5kLWxpc3Atb2JqZWN0LWZpbGUtbmFtZSB2YXJpYWJsZSAnZGVmdmFyKSkpCisJCShwcm9nbgor CQkgIChpbnNlcnQgIiBpcyBhIHZhcmlhYmxlIGRlZmluZWQgaW4gIikKKwkJICAoaWYgKGVxIGZp bGUtbmFtZSAnQy1zb3VyY2UpCisJCSAgICAgIChpbnNlcnQgIkMgc291cmNlIGNvZGUuIikKKwkJ ICAgIChoZWxwLWluc2VydC14cmVmLWJ1dHRvbiAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSBmaWxl LW5hbWUpCisJCQkJCSAgICAgJ2hlbHAtdmFyaWFibGUtZGVmIHZhcmlhYmxlIGZpbGUtbmFtZSkK KwkJICAgIChpbnNlcnQgIi4iKSkpKQorCSAgICAoaW5zZXJ0ICJcblxuIikKKworCSAgICA7OyBJ ZiB2YWx1ZSBpcyBub3QgbGFyZ2UsIGluc2VydCBpdCBoZXJlCisJICAgIDs7IE90aGVyd2lzZSwg aW5zZXJ0IGl0IGxhdGVyCisJICAgICh3aGVuIChub3QgcGxhY2UtYXQtZW5kKQorCSAgICAgIChp bnNlcnQtdmFsdWUtc2VjdGlvbiB2YWwpCisJICAgICAgKGluc2VydCAiXG4iKSkKKworCSAgICA7 OyBMb2N1cyAod2hlcmUgdmFyaWFibGUncyBiaW5kaW5nIGNvbWVzIGZyb20pCiAJICAgICh3aGVu IGxvY3VzCiAJICAgICAgKGNvbmQKLSAgICAgICAgICAgICAgICgoYnVmZmVycCBsb2N1cykKLSAg ICAgICAgICAgICAgICAocHJpbmMgKGZvcm1hdCAiTG9jYWwgaW4gYnVmZmVyICVzOyAiCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlci1uYW1lIGJ1ZmZlcikpKSkKLSAgICAg ICAgICAgICAgICgoZnJhbWVwIGxvY3VzKQotICAgICAgICAgICAgICAgIChwcmluYyAoZm9ybWF0 ICJJdCBpcyBhIGZyYW1lLWxvY2FsIHZhcmlhYmxlOyAiKSkpCi0gICAgICAgICAgICAgICAoKHRl cm1pbmFsLWxpdmUtcCBsb2N1cykKLSAgICAgICAgICAgICAgICAocHJpbmMgKGZvcm1hdCAiSXQg aXMgYSB0ZXJtaW5hbC1sb2NhbCB2YXJpYWJsZTsgIikpKQotICAgICAgICAgICAgICAgKHQKLSAg ICAgICAgICAgICAgICAocHJpbmMgKGZvcm1hdCAiSXQgaXMgbG9jYWwgdG8gJVMiIGxvY3VzKSkp KQorCSAgICAgICAoKGJ1ZmZlcnAgbG9jdXMpCisJCShpbnNlcnQgKGZvcm1hdCAiSXQgaXMgbG9j YWwgdG8gYnVmZmVyICVzOyAiCisJCQkJKGJ1ZmZlci1uYW1lIGxvY3VzKSkpKQorCSAgICAgICAo KGZyYW1lcCBsb2N1cykKKwkJKGluc2VydCAoZm9ybWF0ICJJdCBpcyBsb2NhbCB0byBmcmFtZSAl czsgIgorCQkJCShwcmludDEtdG8tc3RyaW5nIGxvY3VzKSkpKQorCSAgICAgICAoKHRlcm1pbmFs LWxpdmUtcCBsb2N1cykKKwkJKGluc2VydCAoZm9ybWF0ICJJdCBpcyBsb2NhbCB0byB0ZXJtaW5h bCAlczsgIgorCQkJCShwcmluMS10by1zdHJpbmcgbG9jdXMpKSkpCisJICAgICAgICh0CisJCShp bnNlcnQgKGZvcm1hdCAiSXQgaXMgbG9jYWwgdG8gJXMiIGxvY3VzKSkpKQogCSAgICAgIChpZiAo bm90IChkZWZhdWx0LWJvdW5kcCB2YXJpYWJsZSkpCi0JCSAgKHByaW5jICJnbG9iYWxseSB2b2lk IikKKwkJICAoaW5zZXJ0ICJnbG9iYWxseSB2b2lkIikKIAkJKGxldCAoKGdsb2JhbC12YWwgKGRl ZmF1bHQtdmFsdWUgdmFyaWFibGUpKSkKIAkJICAod2l0aC1jdXJyZW50LWJ1ZmZlciBzdGFuZGFy ZC1vdXRwdXQKLQkJICAgIChwcmluYyAiZ2xvYmFsIHZhbHVlIGlzICIpCisJCSAgICAoaW5zZXJ0 ICJnbG9iYWwgdmFsdWUgaXMgIikKIAkJICAgIChpZiAoZXEgdmFsIGdsb2JhbC12YWwpCi0JCQko cHJpbmMgInRoZSBzYW1lLiIpCi0JCSAgICAgICh0ZXJwcmkpCi0JCSAgICAgIDs7IEZpeG1lOiBw cCBjYW4gdGFrZSBhbiBhZ2UgaWYgeW91IGhhcHBlbiB0bwotCQkgICAgICA7OyBhc2sgZm9yIGEg dmVyeSBsYXJnZSBleHByZXNzaW9uLiAgV2Ugc2hvdWxkCi0JCSAgICAgIDs7IHByb2JhYmx5IHBy aW50IGl0IHJhdyBvbmNlIGFuZCBjaGVjayBpdCdzIGEKLQkJICAgICAgOzsgc2Vuc2libGUgc2l6 ZSBiZWZvcmUgcHJldHR5cHJpbnRpbmcuICAtLSBmeAorCQkJKGluc2VydCAidGhlIHNhbWUuIikK KwkJICAgICAgKGluc2VydCAiXG4iKQogCQkgICAgICAobGV0ICgoZnJvbSAocG9pbnQpKSkKLQkJ CShwcCBnbG9iYWwtdmFsKQorCQkJKHByZXR0eS1tYXliZSBnbG9iYWwtdmFsKQogCQkJOzsgU2Vl IHByZXZpb3VzIGNvbW1lbnQgZm9yIHRoaXMgZnVuY3Rpb24uCiAJCQk7OyAoaGVscC14cmVmLW9u LXBwIGZyb20gKHBvaW50KSkKIAkJCShpZiAoPCAocG9pbnQpICgrIGZyb20gMjApKQotCQkJICAg IChkZWxldGUtcmVnaW9uICgxLSBmcm9tKSBmcm9tKSkpKSkpKQotICAgICAgICAgICAgICAodGVy cHJpKSkKLQotCSAgICA7OyBJZiB0aGUgdmFsdWUgaXMgbGFyZ2UsIG1vdmUgaXQgdG8gdGhlIGVu ZC4KLQkgICAgKHdpdGgtY3VycmVudC1idWZmZXIgc3RhbmRhcmQtb3V0cHV0Ci0JICAgICAgKHdo ZW4gKD4gKGNvdW50LWxpbmVzIChwb2ludC1taW4pIChwb2ludC1tYXgpKSAxMCkKLQkJOzsgTm90 ZSB0aGF0IHNldHRpbmcgdGhlIHN5bnRheCB0YWJsZSBsaWtlIGJlbG93Ci0JCTs7IG1ha2VzIGZv cndhcmQtc2V4cCBtb3ZlIG92ZXIgYSBgJ3MnIGF0IHRoZSBlbmQKLQkJOzsgb2YgYSBzeW1ib2wu Ci0JCShzZXQtc3ludGF4LXRhYmxlIGVtYWNzLWxpc3AtbW9kZS1zeW50YXgtdGFibGUpCi0JCShn b3RvLWNoYXIgdmFsLXN0YXJ0LXBvcykKLQkJOzsgVGhlIGxpbmUgYmVsb3cgcHJldmlvdXNseSBy ZWFkIGFzCi0JCTs7IChkZWxldGUtcmVnaW9uIChwb2ludCkgKHByb2duIChlbmQtb2YtbGluZSkg KHBvaW50KSkpCi0JCTs7IHdoaWNoIHN1cHByZXNzZWQgZGlzcGxheSBvZiB0aGUgYnVmZmVyIGxv Y2FsIHZhbHVlIGZvcgotCQk7OyBsYXJnZSB2YWx1ZXMuCi0JCSh3aGVuIChsb29raW5nLWF0ICJ2 YWx1ZSBpcyIpIChyZXBsYWNlLW1hdGNoICIiKSkKLQkJKHNhdmUtZXhjdXJzaW9uCi0JCSAgKGlu c2VydCAiXG5cblZhbHVlOiIpCi0JCSAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnaGVscC1i dXR0b24tY2FjaGUpCi0JCSAgICAgICAocG9pbnQtbWFya2VyKSkpCi0JCShpbnNlcnQgInZhbHVl IGlzIHNob3duICIpCi0JCShpbnNlcnQtYnV0dG9uICJiZWxvdyIKLQkJCSAgICAgICAnYWN0aW9u IGhlbHAtYnV0dG9uLWNhY2hlCi0JCQkgICAgICAgJ2ZvbGxvdy1saW5rIHQKLQkJCSAgICAgICAn aGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IHNob3cgdmFsdWUiKQotCQkoaW5zZXJ0ICIuXG4iKSkp Ci0gICAgICAgICAgICAodGVycHJpKQotCi0gICAgICAgICAgICAobGV0KiAoKGFsaWFzIChjb25k aXRpb24tY2FzZSBuaWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbmRpcmVjdC12 YXJpYWJsZSB2YXJpYWJsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IgdmFy aWFibGUpKSkKLSAgICAgICAgICAgICAgICAgICAob2Jzb2xldGUgKGdldCB2YXJpYWJsZSAnYnl0 ZS1vYnNvbGV0ZS12YXJpYWJsZSkpCi0JCSAgICh1c2UgKGNhciBvYnNvbGV0ZSkpCi0JCSAgIChz YWZlLXZhciAoZ2V0IHZhcmlhYmxlICdzYWZlLWxvY2FsLXZhcmlhYmxlKSkKLSAgICAgICAgICAg ICAgICAgICAoZG9jIChvciAoZG9jdW1lbnRhdGlvbi1wcm9wZXJ0eQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2YXJpYWJsZSAndmFyaWFibGUtZG9jdW1lbnRhdGlvbikKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoZG9jdW1lbnRhdGlvbi1wcm9wZXJ0eQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhbGlhcyAndmFyaWFibGUtZG9jdW1lbnRhdGlvbikpKQotICAgICAg ICAgICAgICAgICAgIChleHRyYS1saW5lIG5pbCkpCi0KLQkgICAgICA7OyBNZW50aW9uIGlmIGl0 J3MgYSBsb2NhbCB2YXJpYWJsZS4KLQkgICAgICAoY29uZAotCSAgICAgICAoKGFuZCAobG9jYWwt dmFyaWFibGUtaWYtc2V0LXAgdmFyaWFibGUpCi0JCSAgICAgKG9yIChub3QgKGxvY2FsLXZhcmlh YmxlLXAgdmFyaWFibGUpKQotCQkJICh3aXRoLXRlbXAtYnVmZmVyCi0JCQkgICAobG9jYWwtdmFy aWFibGUtaWYtc2V0LXAgdmFyaWFibGUpKSkpCi0gICAgICAgICAgICAgICAgKHNldHEgZXh0cmEt bGluZSB0KQotICAgICAgICAgICAgICAgIChwcmluYyAiICBBdXRvbWF0aWNhbGx5IGJlY29tZXMg IikKLQkJKGlmIHBlcm1hbmVudC1sb2NhbAotCQkgICAgKHByaW5jICJwZXJtYW5lbnRseSAiKSkK LQkJKHByaW5jICJidWZmZXItbG9jYWwgd2hlbiBzZXQuXG4iKSkKLQkgICAgICAgKChub3QgcGVy bWFuZW50LWxvY2FsKSkKLQkgICAgICAgKChidWZmZXJwIGxvY3VzKQotCQkoc2V0cSBleHRyYS1s aW5lIHQpCi0JCShwcmluYwotCQkgKHN1YnN0aXR1dGUtY29tbWFuZC1rZXlzCi0JCSAgIiAgVGhp cyB2YXJpYWJsZSdzIGJ1ZmZlci1sb2NhbCB2YWx1ZSBpcyBwZXJtYW5lbnQuXG4iKSkpCi0JICAg ICAgICh0Ci0JCShzZXRxIGV4dHJhLWxpbmUgdCkKLSAgICAgICAgICAgICAgICAocHJpbmMgKHN1 YnN0aXR1dGUtY29tbWFuZC1rZXlzCi0JCQkiICBUaGlzIHZhcmlhYmxlJ3MgdmFsdWUgaXMgcGVy bWFuZW50IFwKLWlmIGl0IGlzIGdpdmVuIGEgbG9jYWwgYmluZGluZy5cbiIpKSkpCi0KLQkgICAg ICA7OyBNZW50aW9uIGlmIGl0J3MgYW4gYWxpYXMuCi0gICAgICAgICAgICAgICh1bmxlc3MgKGVx IGFsaWFzIHZhcmlhYmxlKQotICAgICAgICAgICAgICAgIChzZXRxIGV4dHJhLWxpbmUgdCkKLSAg ICAgICAgICAgICAgICAocHJpbmMgKGZvcm1hdC1tZXNzYWdlCi0gICAgICAgICAgICAgICAgICAg ICAgICAiICBUaGlzIHZhcmlhYmxlIGlzIGFuIGFsaWFzIGZvciBgJXMnLlxuIgotICAgICAgICAg ICAgICAgICAgICAgICAgYWxpYXMpKSkKLQotICAgICAgICAgICAgICAod2hlbiBvYnNvbGV0ZQot ICAgICAgICAgICAgICAgIChzZXRxIGV4dHJhLWxpbmUgdCkKLSAgICAgICAgICAgICAgICAocHJp bmMgIiAgVGhpcyB2YXJpYWJsZSBpcyBvYnNvbGV0ZSIpCi0gICAgICAgICAgICAgICAgKGlmIChu dGggMiBvYnNvbGV0ZSkKLSAgICAgICAgICAgICAgICAgICAgKHByaW5jIChmb3JtYXQgIiBzaW5j ZSAlcyIgKG50aCAyIG9ic29sZXRlKSkpKQotCQkocHJpbmMgKGNvbmQgKChzdHJpbmdwIHVzZSkg KGNvbmNhdCAiO1xuICAiIHVzZSkpCi0JCQkgICAgICh1c2UgKGZvcm1hdC1tZXNzYWdlICI7XG4g IHVzZSBgJXMnIGluc3RlYWQuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY2FyIG9ic29sZXRlKSkpCi0JCQkgICAgICh0ICIuIikpKQotICAgICAg ICAgICAgICAgICh0ZXJwcmkpKQotCi0JICAgICAgKHdoZW4gKG1lbWJlciAoY29ucyB2YXJpYWJs ZSB2YWwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIg YnVmZmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLWxvY2FsLXZhcmlhYmxl cy1hbGlzdCkpCi0JCShzZXRxIGV4dHJhLWxpbmUgdCkKLQkJKGlmIChtZW1iZXIgKGNvbnMgdmFy aWFibGUgdmFsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod2l0aC1jdXJyZW50LWJ1 ZmZlciBidWZmZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXItbG9jYWwtdmFy aWFibGVzLWFsaXN0KSkKLQkJICAgIChsZXQgKChmaWxlIChhbmQgKGJ1ZmZlci1maWxlLW5hbWUg YnVmZmVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm90IChmaWxl LXJlbW90ZS1wCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChi dWZmZXItZmlsZS1uYW1lIGJ1ZmZlcikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoZGlyLWxvY2Fscy1maW5kLWZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChidWZmZXItZmlsZS1uYW1lIGJ1ZmZlcikpKSkKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgKGlzLWRpcmVjdG9yeSBuaWwpKQotCQkgICAgICAocHJpbmMgKHN1YnN0aXR1 dGUtY29tbWFuZC1rZXlzCi0JCQkgICAgICAiICBUaGlzIHZhcmlhYmxlJ3MgdmFsdWUgaXMgZGly ZWN0b3J5LWxvY2FsIikpCi0gICAgICAgICAgICAgICAgICAgICAgKHdoZW4gKGNvbnNwIGZpbGUp IDsgcmVzdWx0IGZyb20gY2FjaGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDs7IElmIHRoZSBj YWNoZSBlbGVtZW50IGhhcyBhbiBtdGltZSwgd2UKLSAgICAgICAgICAgICAgICAgICAgICAgIDs7 IGFzc3VtZSBpdCBjYW1lIGZyb20gYSBmaWxlLgotICAgICAgICAgICAgICAgICAgICAgICAgKGlm IChudGggMiBmaWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IChjYXIgZmlsZSkg aXMgYSBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNldHEgZmlsZSAo ZGlyLWxvY2Fscy0tYWxsLWZpbGVzIChjYXIgZmlsZSkpKQotICAgICAgICAgICAgICAgICAgICAg ICAgICA7OyBPdGhlcndpc2UsIGFzc3VtZSBpdCB3YXMgc2V0IGRpcmVjdGx5LgotICAgICAgICAg ICAgICAgICAgICAgICAgICAoc2V0cSBmaWxlIChjYXIgZmlsZSkKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaXMtZGlyZWN0b3J5IHQpKSkKLSAgICAgICAgICAgICAgICAgICAgICAo aWYgKG51bGwgZmlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHByaW5jICIuXG4iKQot ICAgICAgICAgICAgICAgICAgICAgICAgKHByaW5jICIsIHNldCAiKQotICAgICAgICAgICAgICAg ICAgICAgICAgKHByaW5jIChzdWJzdGl0dXRlLWNvbW1hbmQta2V5cwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY29uZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGlzLWRpcmVjdG9yeSAiZm9yIHRoZSBkaXJlY3RvcnlcbiAgYCIpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7OyBNYW55IGZpbGVzIG1hdGNoZWQuCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoKGFuZCAoY29uc3AgZmlsZSkgKGNkciBmaWxlKSkKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSBmaWxlIChmaWxlLW5hbWUtZGlyZWN0b3J5 IChjYXIgZmlsZSkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtYXQg ImJ5IG9uZSBvZiB0aGVcbiAgJXMgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeVxuICBgIgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyLWxvY2Fscy1maWxlKSkKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0IChzZXRxIGZpbGUgKGNhciBmaWxlKSkK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJieSB0aGUgZmlsZVxuICBgIikp KSkKLQkJCSh3aXRoLWN1cnJlbnQtYnVmZmVyIHN0YW5kYXJkLW91dHB1dAotCQkJICAoaW5zZXJ0 LXRleHQtYnV0dG9uCi0JCQkgICBmaWxlICd0eXBlICdoZWxwLWRpci1sb2NhbC12YXItZGVmCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWxwLWFyZ3MgKGxpc3QgdmFyaWFibGUgZmls ZSkpKQotCQkJKHByaW5jIChzdWJzdGl0dXRlLWNvbW1hbmQta2V5cyAiJy5cbiIpKSkpCi0JCSAg KHByaW5jIChzdWJzdGl0dXRlLWNvbW1hbmQta2V5cwotCQkJICAiICBUaGlzIHZhcmlhYmxlJ3Mg dmFsdWUgaXMgZmlsZS1sb2NhbC5cbiIpKSkpCi0KLQkgICAgICAod2hlbiAobWVtcSB2YXJpYWJs ZSBpZ25vcmVkLWxvY2FsLXZhcmlhYmxlcykKLQkJKHNldHEgZXh0cmEtbGluZSB0KQotCQkocHJp bmMgIiAgVGhpcyB2YXJpYWJsZSBpcyBpZ25vcmVkIGFzIGEgZmlsZS1sb2NhbCBcCi12YXJpYWJs ZS5cbiIpKQotCi0JICAgICAgOzsgQ2FuIGJlIGJvdGggcmlza3kgYW5kIHNhZmUsIGVnIGF1dG8t ZmlsbC1mdW5jdGlvbi4KLQkgICAgICAod2hlbiAocmlza3ktbG9jYWwtdmFyaWFibGUtcCB2YXJp YWJsZSkKLQkJKHNldHEgZXh0cmEtbGluZSB0KQotCQkocHJpbmMgIiAgVGhpcyB2YXJpYWJsZSBt YXkgYmUgcmlza3kgaWYgdXNlZCBhcyBhIFwKLWZpbGUtbG9jYWwgdmFyaWFibGUuXG4iKQotCQko d2hlbiAoYXNzcSB2YXJpYWJsZSBzYWZlLWxvY2FsLXZhcmlhYmxlLXZhbHVlcykKLQkJICAocHJp bmMgKHN1YnN0aXR1dGUtY29tbWFuZC1rZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIg IEhvd2V2ZXIsIHlvdSBoYXZlIGFkZGVkIGl0IHRvIFwKLWBzYWZlLWxvY2FsLXZhcmlhYmxlLXZh bHVlcycuXG4iKSkpKQotCi0JICAgICAgKHdoZW4gc2FmZS12YXIKLSAgICAgICAgICAgICAgICAo c2V0cSBleHRyYS1saW5lIHQpCi0JCShwcmluYyAiICBUaGlzIHZhcmlhYmxlIGlzIHNhZmUgYXMg YSBmaWxlIGxvY2FsIHZhcmlhYmxlICIpCi0JCShwcmluYyAiaWYgaXRzIHZhbHVlXG4gIHNhdGlz ZmllcyB0aGUgcHJlZGljYXRlICIpCi0JCShwcmluYyAoaWYgKGJ5dGUtY29kZS1mdW5jdGlvbi1w IHNhZmUtdmFyKQotCQkJICAgIndoaWNoIGlzIGEgYnl0ZS1jb21waWxlZCBleHByZXNzaW9uLlxu IgotCQkJIChmb3JtYXQtbWVzc2FnZSAiYCVzJy5cbiIgc2FmZS12YXIpKSkpCi0KLSAgICAgICAg ICAgICAgKGlmIGV4dHJhLWxpbmUgKHRlcnByaSkpCi0JICAgICAgKHByaW5jICJEb2N1bWVudGF0 aW9uOlxuIikKLQkgICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBzdGFuZGFyZC1vdXRwdXQKLQkJ KGluc2VydCAob3IgZG9jICJOb3QgZG9jdW1lbnRlZCBhcyBhIHZhcmlhYmxlLiIpKSkpCi0KLQkg ICAgOzsgTWFrZSBhIGxpbmsgdG8gY3VzdG9taXplIGlmIHRoaXMgdmFyaWFibGUgY2FuIGJlIGN1 c3RvbWl6ZWQuCisJCQkgICAgKGRlbGV0ZS1yZWdpb24gKDEtIGZyb20pIGZyb20pKSkpKSkpKQor CisJICAgIDs7IEJ1ZmZlciBsb2NhbAorCSAgICAoY29uZAorCSAgICAgKChhbmQgKGxvY2FsLXZh cmlhYmxlLWlmLXNldC1wIHZhcmlhYmxlKQorCQkgICAob3IgKG5vdCAobG9jYWwtdmFyaWFibGUt cCB2YXJpYWJsZSkpCisJCSAgICAgICAod2l0aC10ZW1wLWJ1ZmZlcgorCQkJIChsb2NhbC12YXJp YWJsZS1pZi1zZXQtcCB2YXJpYWJsZSkpKSkKKwkgICAgICAoaW5zZXJ0ICJBdXRvbWF0aWNhbGx5 IGJlY29tZXMgIikKKwkgICAgICAoaWYgKGdldCB2YXJpYWJsZSAncGVybWFuZW50LWxvY2FsKQor CQkgIChpbnNlcnQgInBlcm1hbmVudGx5ICIpKQorCSAgICAgIChpbnNlcnQgImJ1ZmZlci1sb2Nh bCB3aGVuIHNldC5cblxuIikpCisJICAgICAoKG5vdCAoZ2V0IHZhcmlhYmxlICdwZXJtYW5lbnQt bG9jYWwpKSkKKwkgICAgICgoYnVmZmVycCBsb2N1cykKKwkgICAgICAoaW5zZXJ0CisJICAgICAg IChzdWJzdGl0dXRlLWNvbW1hbmQta2V5cworCQkiVGhpcyB2YXJpYWJsZSdzIGJ1ZmZlci1sb2Nh bCB2YWx1ZSBpcyBwZXJtYW5lbnQuXG5cbiIpKSkKKwkgICAgICh0CisJICAgICAgKGluc2VydCAi VGhpcyB2YXJpYWJsZSdzIHZhbHVlIGlzIHBlcm1hbmVudCBpZiBpdCBpcyBnaXZlbiBhIGxvY2Fs IGJpbmRpbmcuXG5cbiIpKSkKKworCSAgICA7OyBBbGlhcworCSAgICAobGV0ICgoYWxpYXMgKGNv bmRpdGlvbi1jYXNlIG5pbAorCQkJICAgICAoaW5kaXJlY3QtdmFyaWFibGUgdmFyaWFibGUpCisJ CQkgICAoZXJyb3IgdmFyaWFibGUpKSkpCisJICAgICAgKHVubGVzcyAoZXEgYWxpYXMgdmFyaWFi bGUpCisJCShpbnNlcnQgKGZvcm1hdC1tZXNzYWdlCisJCQkgIlRoaXMgdmFyaWFibGUgaXMgYW4g YWxpYXMgZm9yIGAlcycuXG5cbiIgYWxpYXMpKSkpCisKKwkgICAgOzsgT2Jzb2xldGUKKwkgICAg KGxldCogKChvYnNvbGV0ZSAoZ2V0IHZhcmlhYmxlICdieXRlLW9ic29sZXRlLXZhcmlhYmxlKSkK KwkJICAgKG9ic29sZXRlLXNpbmNlIChudGggMiBvYnNvbGV0ZSkpCisJCSAgICh1c2UgKGNhciBv YnNvbGV0ZSkpKQorCSAgICAgICh3aGVuIG9ic29sZXRlLXNpbmNlCisJCShpbnNlcnQgKHByb3Bl cnRpemUgKGZvcm1hdC1tZXNzYWdlICJUaGlzIHZhcmlhYmxlIGlzIG9ic29sZXRlIHNpbmNlICVz IiBvYnNvbGV0ZS1zaW5jZSkKKwkJCQkgICAgJ2ZhY2UgJ2Vycm9yKSkKKwkJKGluc2VydCAocHJv cGVydGl6ZSAoY29uZCAoKHN0cmluZ3AgdXNlKSAoY29uY2F0ICI7ICIgdXNlICJcbiIpKQorCQkJ CQkgICh1c2UgKGZvcm1hdC1tZXNzYWdlICI7IHVzZSBgJXMnIGluc3RlYWQuXG4iCisJCQkJCQkJ ICAgICAgIChjYXIgb2Jzb2xldGUpKSkKKwkJCQkJICAodCAiLlxuIikpCisJCQkJICAgICdmYWNl ICdlcnJvcikpCisJCShpbnNlcnQgIlxuIikpKQorCisJICAgIDs7IEZpbGUgb3IgZGlyZWN0b3J5 IGxvY2FsCisJICAgICh3aGVuIChtZW1iZXIgKGNvbnMgdmFyaWFibGUgdmFsKQorCQkJICAod2l0 aC1jdXJyZW50LWJ1ZmZlciBidWZmZXIKKwkJCSAgICBmaWxlLWxvY2FsLXZhcmlhYmxlcy1hbGlz dCkpCisJICAgICAgKHNldHEgZXh0cmEtbGluZSB0KQorCSAgICAgIChpZiAobWVtYmVyIChjb25z IHZhcmlhYmxlIHZhbCkKKwkJCSAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyCisJCQkgICAg ZGlyLWxvY2FsLXZhcmlhYmxlcy1hbGlzdCkpCisJCSAgKGxldCAoKGZpbGUgKGFuZCAoYnVmZmVy LWZpbGUtbmFtZSBidWZmZXIpCisJCQkJICAgKG5vdCAoZmlsZS1yZW1vdGUtcAorCQkJCQkgKGJ1 ZmZlci1maWxlLW5hbWUgYnVmZmVyKSkpCisJCQkJICAgKGRpci1sb2NhbHMtZmluZC1maWxlCisJ CQkJICAgIChidWZmZXItZmlsZS1uYW1lIGJ1ZmZlcikpKSkKKwkJCShpcy1kaXJlY3Rvcnkgbmls KSkKKwkJICAgIChpbnNlcnQgIlRoaXMgdmFyaWFibGUncyB2YWx1ZSBpcyBkaXJlY3RvcnktbG9j YWwiKQorCQkgICAgKHdoZW4gKGNvbnNwIGZpbGUpCTsgcmVzdWx0IGZyb20gY2FjaGUKKwkJICAg ICAgOzsgSWYgdGhlIGNhY2hlIGVsZW1lbnQgaGFzIGFuIG10aW1lLCB3ZQorCQkgICAgICA7OyBh c3N1bWUgaXQgY2FtZSBmcm9tIGEgZmlsZS4KKwkJICAgICAgKGlmIChudGggMiBmaWxlKQorCQkJ ICA7OyAoY2FyIGZpbGUpIGlzIGEgZGlyZWN0b3J5LgorCQkJICAoc2V0cSBmaWxlIChkaXItbG9j YWxzLS1hbGwtZmlsZXMgKGNhciBmaWxlKSkpCisJCQk7OyBPdGhlcndpc2UsIGFzc3VtZSBpdCB3 YXMgc2V0IGRpcmVjdGx5LgorCQkJKHNldHEgZmlsZSAoY2FyIGZpbGUpCisJCQkgICAgICBpcy1k aXJlY3RvcnkgdCkpKQorCQkgICAgKGlmIChudWxsIGZpbGUpCisJCQkoaW5zZXJ0ICIuXG4iKQor CQkgICAgICAoaW5zZXJ0ICIsIHNldCAiKQorCQkgICAgICAoaW5zZXJ0IChzdWJzdGl0dXRlLWNv bW1hbmQta2V5cworCQkJICAgICAgIChjb25kCisJCQkJKGlzLWRpcmVjdG9yeSAiZm9yIHRoZSBk aXJlY3RvcnlcbiAgYCIpCisJCQkJOzsgTWFueSBmaWxlcyBtYXRjaGVkLgorCQkJCSgoYW5kIChj b25zcCBmaWxlKSAoY2RyIGZpbGUpKQorCQkJCSAoc2V0cSBmaWxlIChmaWxlLW5hbWUtZGlyZWN0 b3J5IChjYXIgZmlsZSkpKQorCQkJCSAoZm9ybWF0ICJieSBvbmUgb2YgdGhlXG4gICVzIGZpbGVz IGluIHRoZSBkaXJlY3RvcnlcbglgIgorCQkJCQkgZGlyLWxvY2Fscy1maWxlKSkKKwkJCQkodCAo c2V0cSBmaWxlIChjYXIgZmlsZSkpCisJCQkJICAgImJ5IHRoZSBmaWxlXG4gIGAiKSkpKQorCQkg ICAgICAoaGVscC1pbnNlcnQteHJlZi1idXR0b24gZmlsZSAnaGVscC1kaXItbG9jYWwtdmFyLWRl ZgorCQkJCQkgICAgICAgdmFyaWFibGUgZmlsZSkKKwkJICAgICAgKGluc2VydCAoc3Vic3RpdHV0 ZS1jb21tYW5kLWtleXMgIicuXG4iKSkpKQorCQkoaW5zZXJ0ICJUaGlzIHZhcmlhYmxlJ3MgdmFs dWUgaXMgZmlsZS1sb2NhbC5cbiIpKSkKKworCSAgICA7OyBJZ25vcmVkIGxvY2FsCisJICAgICh3 aGVuIChtZW1xIHZhcmlhYmxlIGlnbm9yZWQtbG9jYWwtdmFyaWFibGVzKQorCSAgICAgIChpbnNl cnQgIlRoaXMgdmFyaWFibGUgaXMgaWdub3JlZCBhcyBhIGZpbGUtbG9jYWwgdmFyaWFibGUuXG5c biIpKQorCisJICAgIDs7IFJpc2t5IGxvY2FsCisJICAgICh3aGVuIChyaXNreS1sb2NhbC12YXJp YWJsZS1wIHZhcmlhYmxlKQorCSAgICAgIChpbnNlcnQgKHByb3BlcnRpemUgIlRoaXMgdmFyaWFi bGUgbWF5IGJlIHJpc2t5IGlmIHVzZWQgYXMgYSBmaWxlLWxvY2FsIHZhcmlhYmxlIgorCQkJCSAg J2ZhY2UgZm9udC1sb2NrLXdhcm5pbmctZmFjZSkpCisJICAgICAgKGlmIChhc3NxIHZhcmlhYmxl IHNhZmUtbG9jYWwtdmFyaWFibGUtdmFsdWVzKQorCQkgIChpbnNlcnQgIjsgaG93ZXZlciwgeW91 IGhhdmUgYWRkZWQgaXQgdG8gYHNhZmUtbG9jYWwtdmFyaWFibGUtdmFsdWVzJy5cbiIpKQorCSAg ICAgIChpbnNlcnQgIi5cblxuIikpCisKKwkgICAgOzsgU2FmZSBsb2NhbAorCSAgICAod2hlbi1s ZXQgKChzYWZlLXZhciAoZ2V0IHZhcmlhYmxlICdzYWZlLWxvY2FsLXZhcmlhYmxlKSkpCisJICAg ICAgKGluc2VydCAiVGhpcyB2YXJpYWJsZSBpcyBzYWZlIGFzIGEgZmlsZSBsb2NhbCB2YXJpYWJs ZSAiKQorCSAgICAgIChpbnNlcnQgImlmIGl0cyB2YWx1ZSBzYXRpc2ZpZXNcbnRoZSBwcmVkaWNh dGUgIikKKwkgICAgICAoaW5zZXJ0IChpZiAoYnl0ZS1jb2RlLWZ1bmN0aW9uLXAgc2FmZS12YXIp CisJCQkgICJ3aGljaCBpcyBhIGJ5dGUtY29tcGlsZWQgZXhwcmVzc2lvbi5cblxuIgorCQkJKGZv cm1hdC1tZXNzYWdlICJgJXMnLlxuXG4iIHNhZmUtdmFyKSkpKQorCisJICAgIDs7IERvY3VtZW50 YXRpb24KKwkgICAgKHVubGVzcyB2b2lkCisJICAgICAgKGxldCogKChhbGlhcyAoY29uZGl0aW9u LWNhc2UgbmlsCisJCQkJKGluZGlyZWN0LXZhcmlhYmxlIHZhcmlhYmxlKQorCQkJICAgICAgKGVy cm9yIHZhcmlhYmxlKSkpCisJCSAgICAgKGRvYyAob3IgKGRvY3VtZW50YXRpb24tcHJvcGVydHkg dmFyaWFibGUKKwkJCQkJCSAgICAgICd2YXJpYWJsZS1kb2N1bWVudGF0aW9uKQorCQkJICAgICAg KGRvY3VtZW50YXRpb24tcHJvcGVydHkgYWxpYXMKKwkJCQkJCSAgICAgICd2YXJpYWJsZS1kb2N1 bWVudGF0aW9uKQorCQkJICAgICAgIk5vdCBkb2N1bWVudGVkIGFzIGEgdmFyaWFibGUuIikpKQor CQkoaW5zZXJ0ICJEb2N1bWVudGF0aW9uOlxuXG4iKQorCQkoaW5zZXJ0IChwcm9wZXJ0aXplIGRv YyAnZmFjZSBmb250LWxvY2stZG9jLWZhY2UpKQorCQkoaW5zZXJ0ICJcblxuIikpKQorCisJICAg IDs7IElmIHZhbHVlIGlzIGxhcmdlLCBpbnNlcnQgaXQgaGVyZQorCSAgICAod2hlbiBwbGFjZS1h dC1lbmQKKwkgICAgICAoaW5zZXJ0LXZhbHVlLXNlY3Rpb24gdmFsKSkKKworCSAgICA7OyBNYWtl IGEgbGluayB0byBjdXN0b21pemUgaWYgdGhpcyB2YXJpYWJsZSBjYW4gYmUKKwkgICAgOzsgY3Vz dG9taXplZC4KIAkgICAgKHdoZW4gKGN1c3RvbS12YXJpYWJsZS1wIHZhcmlhYmxlKQotCSAgICAg IChsZXQgKChjdXN0b21pemUtbGFiZWwgImN1c3RvbWl6ZSIpKQotCQkodGVycHJpKQotCQkodGVy cHJpKQotCQkocHJpbmMgKGNvbmNhdCAiWW91IGNhbiAiIGN1c3RvbWl6ZS1sYWJlbCAiIHRoaXMg dmFyaWFibGUuIikpCi0JCSh3aXRoLWN1cnJlbnQtYnVmZmVyIHN0YW5kYXJkLW91dHB1dAotCQkg IChzYXZlLWV4Y3Vyc2lvbgotCQkgICAgKHJlLXNlYXJjaC1iYWNrd2FyZAotCQkgICAgIChjb25j YXQgIlxcKCIgY3VzdG9taXplLWxhYmVsICJcXCkiKSBuaWwgdCkKLQkJICAgIChoZWxwLXhyZWYt YnV0dG9uIDEgJ2hlbHAtY3VzdG9taXplLXZhcmlhYmxlIHZhcmlhYmxlKSkpKQorCSAgICAgIChp bnNlcnQgIllvdSBjYW4gIikKKwkgICAgICAoaGVscC1pbnNlcnQteHJlZi1idXR0b24gImN1c3Rv bWl6ZSIgJ2hlbHAtY3VzdG9taXplLXZhcmlhYmxlCisJCQkJICAgICAgIHZhcmlhYmxlKQorCSAg ICAgIChpbnNlcnQgIiB0aGlzIHZhcmlhYmxlLiIpCiAJICAgICAgOzsgTm90ZSB2YXJpYWJsZSdz IHZlcnNpb24gb3IgcGFja2FnZSB2ZXJzaW9uLgotCSAgICAgIChsZXQgKChvdXRwdXQgKGRlc2Ny aWJlLXZhcmlhYmxlLWN1c3RvbS12ZXJzaW9uLWluZm8gdmFyaWFibGUpKSkKLQkJKHdoZW4gb3V0 cHV0Ci0JCSAgKHRlcnByaSkKLQkJICAodGVycHJpKQotCQkgIChwcmluYyBvdXRwdXQpKSkpCi0K LQkgICAgKHdpdGgtY3VycmVudC1idWZmZXIgc3RhbmRhcmQtb3V0cHV0Ci0JICAgICAgOzsgUmV0 dXJuIHRoZSB0ZXh0IHdlIGRpc3BsYXllZC4KLQkgICAgICAoYnVmZmVyLXN0cmluZykpKSkpKSkp Ci0KKwkgICAgICAod2hlbi1sZXQgKChvdXRwdXQgKGRlc2NyaWJlLXZhcmlhYmxlLWN1c3RvbS12 ZXJzaW9uLWluZm8gdmFyaWFibGUpKSkKKwkJKGluc2VydCAiXG5cbiIpCisJCShpbnNlcnQgb3V0 cHV0KSkpCiAKKwkgICAgOzsgUmV0dXJuIHRoZSBIZWxwIGJ1ZmZlciBzdHJpbmcKKwkgICAgKGJ1 ZmZlci1zdHJpbmcpKSkpKSkpCiAoZGVmdmFyIGhlbHAteHJlZi1zdGFjay1pdGVtKQogCiA7Ozsj IyNhdXRvbG9hZAotLSAKMi43LjQKCg== --001a1141cbbceb357a053e6188c4--