From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Mauro Aranda Newsgroups: gmane.emacs.bugs Subject: bug#18: Fine-grained revert-buffer Date: Fri, 26 Apr 2019 19:42:02 -0300 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="00000000000072fe1f058776a54e" Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="20601"; mail-complaints-to="usenet@blaine.gmane.org" To: 18@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sat Apr 27 00:43:14 2019 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hK9Yo-0005Cc-7o for geb-bug-gnu-emacs@m.gmane.org; Sat, 27 Apr 2019 00:43:14 +0200 Original-Received: from localhost ([127.0.0.1]:52851 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hK9Yn-0000C3-1z for geb-bug-gnu-emacs@m.gmane.org; Fri, 26 Apr 2019 18:43:13 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:51707) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hK9Ye-0000BZ-MV for bug-gnu-emacs@gnu.org; Fri, 26 Apr 2019 18:43:07 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hK9Yc-0007CF-AQ for bug-gnu-emacs@gnu.org; Fri, 26 Apr 2019 18:43:04 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:48523) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hK9Yc-0007Bu-2P for bug-gnu-emacs@gnu.org; Fri, 26 Apr 2019 18:43:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1hK9Yb-0008UC-Sq for bug-gnu-emacs@gnu.org; Fri, 26 Apr 2019 18:43:01 -0400 X-Loop: help-debbugs@gnu.org In-Reply-To: Resent-From: Mauro Aranda Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 26 Apr 2019 22:43:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 18 X-GNU-PR-Package: emacs Original-Received: via spool by 18-submit@debbugs.gnu.org id=B18.155631854532572 (code B ref 18); Fri, 26 Apr 2019 22:43:01 +0000 Original-Received: (at 18) by debbugs.gnu.org; 26 Apr 2019 22:42:25 +0000 Original-Received: from localhost ([127.0.0.1]:33834 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hK9Y0-0008TG-OM for submit@debbugs.gnu.org; Fri, 26 Apr 2019 18:42:25 -0400 Original-Received: from mail-lj1-f182.google.com ([209.85.208.182]:42331) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hK9Xx-0008T2-I4 for 18@debbugs.gnu.org; Fri, 26 Apr 2019 18:42:22 -0400 Original-Received: by mail-lj1-f182.google.com with SMTP id i186so4298519lji.9 for <18@debbugs.gnu.org>; Fri, 26 Apr 2019 15:42:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=SAPWs0vL0XWxU1jyINCA+7x31EXgUWor64LlAlfVRpY=; b=QLhDEGAniCJqM4oTWhQbWi8FWAsGAKthQUZTSrycVNJYaVVu9q+nbZiG/4Q9qOnJmo V4zT9otZMGx3CPA008Bfdt+Qly6wI0BITB5yJloBeAYJPj4DadjJp+kJJHlrWhLHgt/P 4sqQDVwqBCgpBJh5ZudeQXNKLHfzO4AVPOvnLnqLKMzcHVVnpQHQCHWBhE/Sx0olbGOh bi301aTGvT2XqK0NMw3dIZIr6onp23ZdqBfDmKdxmk9XowuPt4RavZvyAtx+KIFBCAnL Fm6QesSpoAGnap0b5SlxzKHVLt5R97VvJ4V7yJSiQyNAWDD8CT4kgr1QDQooRufhisFG 8e0A== 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; bh=SAPWs0vL0XWxU1jyINCA+7x31EXgUWor64LlAlfVRpY=; b=Y7pFCl5vCLeGRo5Uj41QqOxylxDH0hynwxMKVtpcZMyawv+E/RDO7d2eEOCJzLGe/G WH4Y0lAdOf69BRQyVtZemRXi6osKTXWnbg2pJM59AdzLMTbQC4JZx6wHn3mTsxeBeFXa RFEQP+mYMS3Kh6vEpwVpcfQlaA7YKgEModFy4lObm7athzimc01OKeEAmO/KRLXNPgRK tTebzEqK6TREZGZiT5tgbCKokYLvTGHKh0bDaR6FqCteOK6RWpSisUePThcwGul0SpVG HmHgAeHveca0VHeGUyK86lhRs9vsmZBY9x25QaZad6xY+rCjnSITmYOjppHyKyJWlBNp 2+9Q== X-Gm-Message-State: APjAAAXVx07YfY6XlZ9QBbRswo7ujXY2rI1aoip7Nz/JGVWzloHDoTDt FR3GIEu/vspzh7ofutMVtQz6p0WodbMMtMDHsSEJsAIO X-Google-Smtp-Source: APXvYqy8D9qMvLVVN2BtTohWcr2eH7AqCyn1GUhuuUKISbqcb89amB6B6pOW9D9C0wiWgA8gfCUEXMc7cj6VZCMUfyU= X-Received: by 2002:a2e:9348:: with SMTP id m8mr7510350ljh.23.1556318535194; Fri, 26 Apr 2019 15:42:15 -0700 (PDT) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 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.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:158317 Archived-At: --00000000000072fe1f058776a54e Content-Type: multipart/alternative; boundary="00000000000072fe1d058776a54c" --00000000000072fe1d058776a54c Content-Type: text/plain; charset="UTF-8" Short story of how I got to this bug report: For a while now, I've been wanting to contribute to Emacs by doing something more than reporting bugs and try to provide trivial fixes for the bugs I found. So I looked into emacs-devel, to read about recomendations for beginning to contribute. Based on some of the mails I found [1], it looks like working on some wishlist items or minor bugs would be good. So I said to myself: OK, let's see what is the oldest one still open. And here I am. Now I'll make a summary of what I've understood from the bug report: The wish is to have a command that would act like 'revert-buffer' (e.g., modifying the buffer rightaway), but that tries to do a better job preserving markers. Also, it is desirable that undo info is preserved. It is known that 'revert-buffer' preserves undo info nowadays, but what I understand is that it would be good to keep undo info of parts of the total reverted change, so the undo of the reverted action can be made by steps, and not as a single undo operation. I think that the alternatives proposed after the report [2] do not fulfill the wish because they do not modify the buffer immediately. I'm not sure how they act in regards to preserving markers and the undo info, though. AFAIK, the functionality wanted is still not present, so I'd guess it's still relevant to work in this matter. So for a week or so now, I've been working in a command that does what I think it is wanted. The command is called 'revert-buffer-by-hunks' (I've added 'rbbh' as a prefix for sending the file for you to see/test), because it calls 'diff' and then with the output patches the buffer. At first, I wrote a command that used diff-mode under the hood, but I've been having troubles with preserving markers. So I took a step back, and wrote a new function that patches the buffer with the contents of the file visited on disk. With that done, I think it is time for me to show what I've written so far, in order to: 1) Know if the functionality is present (I don't think so, but I believe this is the first thing to know in order to advance). 2) There's still interest in having this command. 3) Know if working on this subject would be appreciated, or should I move on to other things. 4) Receieve feedback, suggestions, fixes on things I'm sure I'm missing. 5) Discuss some of the questions that have arisen while I've been working on this. I'll wait for answers regarding to 1-4. With regards to 5, I would like to read opinions about: a) What variables would you think should be customizable? b) After reverting by hunks, I think it would be desirable to navigate through the hunks reverted and toggle their state (i.e., go back and forth to the contents before the revert operation and the contens on disk). That is because I think it would be kinda annoying to want to undo some of the reverted hunks, and to do that having to undo sequentially from the Nth hunk reverted to the desired one. I attach a first draft of my work. I'm hoping to hear suggestions and corrections to improve it. Best regards, Mauro. [1] http://lists.gnu.org/archive/html/emacs-devel/2018-07/msg00451.html http://lists.gnu.org/archive/html/emacs-devel/2017-08/msg00675.html http://lists.gnu.org/archive/html/emacs-devel/2013-10/msg00805.html [2] Command diff-hl-revert-hunk, from diff-hl package Command diff-buffer-with-file Command ediff-current-file --00000000000072fe1d058776a54c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Short story of how I got to this bug repo= rt:

For a while now, I've been wanting to contribute to Emacs b= y doing
something more than reporting bugs and try to provide trivial fi= xes for
the bugs I found.=C2=A0 So I looked into emacs-devel, to read ab= out
recomendations for beginning to contribute.=C2=A0 Based on some of t= he mails
I found [1], it looks like working on some wishlist items or mi= nor bugs
would be good.=C2=A0 So I said to myself: OK, let's see wha= t is the oldest
one still open.=C2=A0 And here I am.


Now I= 9;ll make a summary of what I've understood from the bug report:
The wish is to have a command that would act like 'revert-buffer'<= br>(e.g., modifying the buffer rightaway), but that tries to do a better jo= b
preserving markers.=C2=A0 Also, it is desirable that undo info is pres= erved.
It is known that 'revert-buffer' preserves undo info nowa= days, but what I
understand is that it would be good to keep undo info o= f parts of the
total reverted change, so the undo of the reverted action= can be made by
steps, and not as a single undo operation.

I thin= k that the alternatives proposed after the report [2] do not
fulfill the= wish because they do not modify the buffer immediately.=C2=A0 I'm
n= ot sure how they act in regards to preserving markers and the undo
info,= though.

AFAIK, the functionality wanted is still not present, so I&= #39;d guess it's
still relevant to work in this matter.

So fo= r a week or so now, I've been working in a command that does what I
= think it is wanted.=C2=A0 The command is called 'revert-buffer-by-hunks= '
(I've added 'rbbh' as a prefix for sending the file fo= r you to
see/test), because it calls 'diff' and then with the ou= tput patches the
buffer.

At first, I wrote a command that used di= ff-mode under the hood, but I've
been having troubles with preservin= g markers.=C2=A0 So I took a step back,
and wrote a new function that pa= tches the buffer with the contents of
the file visited on disk.=C2=A0 Wi= th that done, I think it is time for me to
show what I've written so= far, in order to:

1) Know if the functionality is present (I don= 9;t think so, but I believe
this is the first thing to know in order to = advance).
2) There's still interest in having this command.
3) Kn= ow if working on this subject would be appreciated, or should I
move on = to other things.
4) Receieve feedback, suggestions, fixes on things I= 9;m sure I'm missing.
5) Discuss some of the questions that have ari= sen while I've been
working on this.

I'll wait for answer= s regarding to 1-4.=C2=A0 With regards to 5, I would like
to read opinio= ns about:
a) What variables would you think should be customizable?
b= ) After reverting by hunks, I think it would be desirable to navigate
th= rough the hunks reverted and toggle their state (i.e., go back and
forth= to the contents before the revert operation and the contens on
disk).= =C2=A0 That is because I think it would be kinda annoying to want to
und= o some of the reverted hunks, and to do that having to undo
sequentially= from the Nth hunk reverted to the desired one.

I attach a first dra= ft of my work.=C2=A0 I'm hoping to hear suggestions and
corrections = to improve it.

Best regards,
=
Mauro.

--00000000000072fe1d058776a54c-- --00000000000072fe1f058776a54e Content-Type: text/x-emacs-lisp; charset="US-ASCII"; name="rbbh-bug18.el" Content-Disposition: attachment; filename="rbbh-bug18.el" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_juynptjq0 Ozs7IHJiYmguZWwgLS0tIFJldmVydCBCdWZmZXIgQnkgSHVua3MgLSotIGxleGljYWwtYmluZGlu ZzogdCAtKi0KCihyZXF1aXJlICdkaWZmKQoKOzsgQXQgbGVhc3QgZm9yIG5vdywgdGhpcyBhcmUg ZGVmY29uc3QuCgooZGVmY29uc3QgcmJiaC1kaWZmLWNvbW1hbmQgImRpZmYiCiAgIk5hbWUgb2Yg dGhlIGNvbW1hbmQgdG8gcnVuIGRpZmYiKQoKKGRlZmNvbnN0IHJiYmgtZGlmZi1zd2l0Y2hlcyAi LS1ub3JtYWwiCiAgIlN3aXRjaGVzIHRvIHBhc3MgdG8gZGlmZi4iKQoKKGRlZmNvbnN0IHJiYmgt ZGlmZi1jaGFuZ2UtY29tbWFuZC1yZWdleHAKICAobGV0ICgocm5nICJcXChbMC05XStcXClcXChc XHwsXFwoWzAtOV0rXFwpXFwpIikpCiAgICAoY29uY2F0ICJeIiBybmcgIlxcKFthY2RdXFwpIiBy bmcgIiQiKSkKICAiUmVndWxhciBleHByZXNzaW9uIHRoYXQgbWF0Y2hlcyB0aGUgY2hhbmdlIGNv bW1hbmRzIGZvciBlYWNoIGh1bmsKU2hvdWxkIGJlIGluIHN5bmNoIHdpdGggdGhlIHN3aXRjaCB1 c2VkIHRvIGNhbGwgZGlmZi4iKQoKKGRlZmNvbnN0IHJiYmgtZGlmZi1idWZmZXItbmFtZSAiKlJC QkgtRGlmZioiCiAgIlRoZSBuYW1lIG9mIHRoZSBkaWZmIGJ1ZmZlciBpbnRlcm5hbGx5IGNyZWF0 ZWQgYnkgYHJiYmgtLXJ1bi1kaWZmJy4iKQoKKGRlZnZhciByYmJoLWN1cnJlbnQtZGlmZi1idWZm ZXItbmFtZSBuaWwKICAiTmFtZSBvZiB0aGUgY3VycmVudCBkaWZmIGJ1ZmZlci4iKQoKKGRlZnZh ciByYmJoLXRvdGFsLWh1bmtzIDAKICAiVG90YWwgaHVua3MgaW4gdGhlIGRpZmYgb3V0cHV0LiIp Cgo7OyBJZiBgZGlmZicgYW5kIGBkaWZmLW1vZGUnIGFyZSBub3QgdG8gYmUgcmVxdWlyZWQsIHRo aXMgZnVuY3Rpb24gc2hvdWxkIGJlCjs7IGNoYW5nZWQgdG8gZG8gYSBsb3Qgb2Ygd2hhdCBgZGlm Zi1uby1zZWxlY3QnIGRvZXMuCihkZWZ1biByYmJoLS1ydW4tZGlmZiAoYnVmKQogICJDb21wYXJl IGNvbnRlbnRzIG9mIGJ1ZmZlciBCVUYgd2l0aCB0aG9zZSBvZiB0aGUgZmlsZSBpdCB2aXNpdHMu ClJ1bnMgYHJiYmgtZGlmZi1jb21tYW5kJyBjb21tYW5kIHRvIG1ha2UgdGhlIGNvbXBhcmlzb24s IGFuZCBwdXRzIGl0cyBvdXRwdXQKaW4gYSBidWZmZXIsIHdpdGggYmFzZW5hbWUgYHJiYmgtZGlm Zi1idWZmZXItbmFtZScuClRoZSBjb21tYW5kIGlzIHJ1biB3aXRoIHRoZSBzd2l0Y2hlcyBgcmJi aC1kaWZmLXN3aXRjaGVzJy4iCiAgKGxldCAoKGRpZmYtY29tbWFuZCByYmJoLWRpZmYtY29tbWFu ZCkKCShkaWZmLXVzZS1sYWJlbHMgbmlsKSkgOyBEb24ndCBjYXJlIGFib3V0IGxhYmVscy4KICAg IChzZXRxIHJiYmgtY3VycmVudC1kaWZmLWJ1ZmZlci1uYW1lIChnZW5lcmF0ZS1uZXctYnVmZmVy CgkJCQkJIHJiYmgtZGlmZi1idWZmZXItbmFtZSkpCiAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBi dWYKICAgICAgKGRpZmYtbm8tc2VsZWN0IGJ1ZiBidWZmZXItZmlsZS1uYW1lIHJiYmgtZGlmZi1z d2l0Y2hlcwoJCSAgICAgIHQgcmJiaC1jdXJyZW50LWRpZmYtYnVmZmVyLW5hbWUpKSkpCgo7OyBX aXRoIHRoaXMsIHJldmVydGVkIGh1bmtzIGNhbiBiZSB1bmRvbmUgb25lIGJ5IG9uZS4KKGRlZnN1 YnN0IHJiYmgtLXNwbGl0LXVuZG8taHVuayAoYnVmKQogICJGb3JjZSB1bmRvIGhpc3RvcnkgdG8g c2VwYXJhdGUgaHVuayByZXBsYWNlbWVudHMgaW4gYnVmZmVyIEJVRi4iCiAgKHdpdGgtY3VycmVu dC1idWZmZXIgYnVmCiAgICAodW5kby1ib3VuZGFyeSkpKQoKKGRlZnVuIHJiYmgtZGVsZXRlLWxp bmUgKCZvcHRpb25hbCBhcmcpCiAgIkRlbGV0ZSBBUkcgbGluZXMgKG9yIHRoZSBjdXJyZW50IGxp bmUsIGlmIEFSRyBpcyAwKS4KRG9lcyBub3QgcHV0IHRoZSBraWxsZWQgdGV4dCBpbiB0aGUgYGtp bGwtcmluZycuICBTZWUgYGtpbGwtd2hvbGUtbGluZScgZm9yCmRldGFpbHMgb24gQVJHLiIKICAo c2V0cSBhcmcgKG9yIGFyZyAxKSkKICAoaWYgKGFuZCAoPiBhcmcgMCkKCSAgIChlb2JwKQoJICAg KHNhdmUtZXhjdXJzaW9uIChmb3J3YXJkLXZpc2libGUtbGluZSAwKQoJCQkgICAoZW9icCkpKQog ICAgICAoc2lnbmFsICdlbmQtb2YtYnVmZmVyIG5pbCkpCiAgKGlmIChhbmQgKDwgYXJnIDApCgkg ICAoYm9icCkKCSAgIChzYXZlLWV4Y3Vyc2lvbiAoZW5kLW9mLXZpc2libGUtbGluZSkgKGJvYnAp KSkKICAgICAgKHNpZ25hbCAnYmVnaW5uaW5nLW9mLWJ1ZmZlciBuaWwpKQogIChjb25kICgoemVy b3AgYXJnKQogICAgICAgICAoZGVsZXRlLXJlZ2lvbiAocHJvZ24gKGZvcndhcmQtdmlzaWJsZS1s aW5lIDApIChwb2ludCkpCiAgICAgICAgICAgICAgICAgICAgICAgIChwcm9nbiAoZW5kLW9mLXZp c2libGUtbGluZSkgKHBvaW50KSkpKQogICAgICAgICgoPCBhcmcgMCkKICAgICAgICAgKGRlbGV0 ZS1yZWdpb24gKHByb2duIChlbmQtb2YtdmlzaWJsZS1saW5lKSAocG9pbnQpKQogICAgICAgICAg ICAgICAgICAgICAgICAocHJvZ24gKGZvcndhcmQtdmlzaWJsZS1saW5lICgxKyBhcmcpKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVubGVzcyAoYm9icCkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGJhY2t3YXJkLWNoYXIpKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHBvaW50KSkpKQogICAgICAgICh0CiAgICAgICAgIChkZWxldGUtcmVnaW9uIChw cm9nbiAoZm9yd2FyZC12aXNpYmxlLWxpbmUgMCkgKHBvaW50KSkKCQkJKHByb2duIChmb3J3YXJk LXZpc2libGUtbGluZSBhcmcpIChwb2ludCkpKSkpKQoKKGRlZnN1YnN0IHJiYmgtY291bnQtdG90 YWwtaHVua3MgKGRpZmYtYnVmICZvcHRpb25hbCBjaGFuZ2UtY29tbWFuZC1yZSkKICAod2l0aC1j dXJyZW50LWJ1ZmZlciBkaWZmLWJ1ZgogICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgIChnb3RvLWNo YXIgKHBvaW50LW1pbikpCiAgICAgIChsZXQgKChjb3VudCAwKQoJICAgIChyZSAob3IgY2hhbmdl LWNvbW1hbmQtcmUgcmJiaC1kaWZmLWNoYW5nZS1jb21tYW5kLXJlZ2V4cCkpKQoJKHdoaWxlIChy ZS1zZWFyY2gtZm9yd2FyZCByZSBuaWwgdCkKCSAgKHNldHEgY291bnQgKDErIGNvdW50KSkpCglj b3VudCkpKSkKCihkZWZzdWJzdCByYmJoLWdldC1odW5rLWNvbnRlbnRzIChiZWcgZW5kKQogICJH ZXQgdGhlIGh1bmsgY29udGVudHMgZnJvbSBwb3NpdGlvbnMgQkVHIHRvIEVORC4KRXhwZWN0cyB0 aGF0IGEgZGlmZiBidWZmZXIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLiIKICAobGV0ICgoc3RhcnQg KHBvaW50KSkpCiAgICAoZm9yd2FyZC1saW5lICgxKyAoLSBiZWcgZW5kKSkpCiAgICAobGV0ICgo dGV4dCAoYnVmZmVyLXN1YnN0cmluZyBzdGFydCAocG9pbnQpKSkpCiAgICAgIDs7IFJlbWVtYmVy IHRoYXQgd2UgYXJlIHVzaW5nIHRoZSAtLW5vcm1hbCBzd2l0Y2gsIGhlbmNlIHRoZSA+IGFuZCA8 CiAgICAgIDs7IHJlcGxhY2VtZW50LgogICAgICAoc2V0cSB0ZXh0IChyZXBsYWNlLXJlZ2V4cC1p bi1zdHJpbmcgIl5bPjxdICIgIiIgdGV4dCkpCiAgICAgIHRleHQpKSkKCihkZWZ1biByYmJoLXBh dGNoLWJ1ZmZlciAoYnVmIGRpZmYtYnVmKQogICJQYXRjaCB0aGUgYnVmZmVyIEJVRiBhY2NvcmRp bmcgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBkaWZmIGJ1ZmZlciBESUZGLUJVRi4KSXQgd29ya3Mg d2l0aCBhIGRpZmYgYnVmZmVyIHRoYXQgY29udGFpbnMgYSAtLW5vcm1hbCBvdXRwdXQgZnJvbSBk aWZmLiIKICA7OyBsaW5lLW9mZnNldCBrZWVwcyBtZW1vcnkgb2YgdGhlIGxpbmVzIGFkZGVkIGFu ZCBkZWxldGVkIHRvIHRoZSBidWZmZXIgQlVGLAogIDs7IGFuZCBpdCBpcyBuZWNlc3NhcnkgYmVj YXVzZSB0aGUgZGlmZiBvdXRwdXQgd2lsbCBzdGF5IHRoZSBzYW1lIChsaW5lCiAgOzsgcmVmZXJl bmNlcyB3aWxsIHN0YXkgcmVsYXRpdmUgdG8gdGhlIHVucGF0Y2hlZCBidWZmZXIpLgogIDs7IEFk ZGVkIGxpbmVzIGRlY3JlbWVudHMgb2Zmc2V0LCBhbmQgZGVsZXRlZCBsaW5lcyBpbmNyZW1lbnQg aXQuCiAgKGxldCAoKGxpbmUtb2Zmc2V0IDApCgkoY29sdW1uIChjdXJyZW50LWNvbHVtbikpKSA7 IFRvIHJlc3RvcmUgcG9pbnQganVzdCByaWdodC4KICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAo d2l0aC1jdXJyZW50LWJ1ZmZlciBkaWZmLWJ1ZgoJKGdvdG8tY2hhciAocG9pbnQtbWluKSkKCShz YXZlLWV4Y3Vyc2lvbgoJICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkIHJiYmgtZGlmZi1jaGFu Z2UtY29tbWFuZC1yZWdleHAgbmlsIHQpCgkgICAgKHJiYmgtLXNwbGl0LXVuZG8taHVuayBidWYp ICA7IE1ha2UgZWFjaCBjaGFuZ2Ugb2YgaHVuayB1bmRvYWJsZS4KCSAgICAoZm9yd2FyZC1saW5l KSA7IHNraXAgdGhlIGNvbW1hbmQuCgkgICAgOzsgR2V0IHJhbmdlcyBhbmQgdGhlIGFjdGlvbiwg ZnJvbSB0aGUgcHJldmlvdXMgbWF0Y2guCgkgICAgKGxldCogKChhY3Rpb24tY21kIChtYXRjaC1z dHJpbmcgNCkpCgkJICAgKG9sZC1mcm9tIChzdHJpbmctdG8tbnVtYmVyIChtYXRjaC1zdHJpbmcg MSkpKQoJCSAgIChvbGQtdG8gKGlmIChtYXRjaC1iZWdpbm5pbmcgMykKCQkJICAgICAgIChzdHJp bmctdG8tbnVtYmVyIChtYXRjaC1zdHJpbmcgMykpCgkJCSAgICAgb2xkLWZyb20pKQoJCSAgIChu ZXctZnJvbSAoc3RyaW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDUpKSkKCQkgICAobmV3LXRv IChpZiAobWF0Y2gtYmVnaW5uaW5nIDcpCgkJCSAgICAgICAoc3RyaW5nLXRvLW51bWJlciAobWF0 Y2gtc3RyaW5nIDcpKQoJCQkgICAgIG5ldy1mcm9tKSkpCgkgICAgICAoY29uZCAoKGVxdWFsIGFj dGlvbi1jbWQgImEiKQoJCSAgICAgOzsgV2hlbiBhZGRpbmcsIHdlIHRha2UgdGhlIHRleHQgYW5k IHJlbW92ZSA+IGFuZCA8CgkJICAgICA7OyAoZGlmZiB3YXMgY2FsbGVkIHdpdGggLS1ub3JtYWwg c3dpdGNoKS4KCQkgICAgIDs7IFRoZW4gbmF2aWdhdGUgdG8gdGhlIGxpbmUsIGFjY291bnRpbmcg dGhlIG9mZnNldCwKCQkgICAgIDs7IGFuZCBpbnNlcnQgdGhlIHRleHQuCgkJICAgICAobGV0ICgo dGV4dCAocmJiaC1nZXQtaHVuay1jb250ZW50cyBuZXctdG8gbmV3LWZyb20pKSkKCQkgICAgICAg KHdpdGgtY3VycmVudC1idWZmZXIgYnVmCgkJCSAoZ290by1jaGFyIChwb2ludC1taW4pKQoJCQkg KGZvcndhcmQtbGluZSAoLSBvbGQtZnJvbSBsaW5lLW9mZnNldCkpCgkJCSAoc2V0cSBsaW5lLW9m ZnNldCAoLSBsaW5lLW9mZnNldCAoMSsgKC0gbmV3LXRvCgkJCQkJCQkJIG5ldy1mcm9tKSkpKQoJ CQkgKGluc2VydCB0ZXh0KSkpKQoJCSAgICAoKGVxdWFsIGFjdGlvbi1jbWQgImQiKQoJCSAgICAg OzsgV2hlbiBkZWxldGluZywgbmF2aWdhdGUgdG8gdGhlIGNvcnJlY3QgbGluZSBhbmQga2lsbAoJ CSAgICAgOzsgYXMgbWFueSBsaW5lcyBhcyB0aGUgcmFuZ2UgaW4gdGhlIGRpZmYgb3V0cHV0IHNh eXMuCgkJICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBidWYKCQkgICAgICAgKGdvdG8tY2hhciAo cG9pbnQtbWluKSkKCQkgICAgICAgKGZvcndhcmQtbGluZSAoMS0gKC0gb2xkLWZyb20gbGluZS1v ZmZzZXQpKSkKCQkgICAgICAgKHNldHEgbGluZS1vZmZzZXQgKCsgbGluZS1vZmZzZXQgKDErCgkJ CQkJCQkgKC0gb2xkLXRvIG9sZC1mcm9tKSkpKQoJCSAgICAgICAocmJiaC1kZWxldGUtbGluZSAo MSsgKC0gb2xkLXRvIG9sZC1mcm9tKSkpKSkKCQkgICAgKChlcXVhbCBhY3Rpb24tY21kICJjIikK CQkgICAgIDs7IFdoZW4gY2hhbmdpbmcsIGlzIGEgY29tYmluYXRpb24gb2YgYWRkaW5nIGFuZCBk ZWxldGluZy4KCQkgICAgIDs7IEdldCB0aGUgdGV4dCBhZnRlciAiLS0tIiwgYW5kIGFjdCBzaW1p bGFyIGFzIHdlIHdvdWxkCgkJICAgICA7OyB3aXRoIGFkZGluZy4KCQkgICAgIDs7IEJ1dCBiZWZv cmUsIGtpbGwgdGhlIGxpbmVzLCBhcyB3ZSBkbyB3aGVuIGRlbGV0aW5nLgoJCSAgICAgKHJlLXNl YXJjaC1mb3J3YXJkICJeLS0tIikKCQkgICAgIChmb3J3YXJkLWxpbmUpCgkJICAgICAobGV0ICgo dGV4dCAocmJiaC1nZXQtaHVuay1jb250ZW50cyBuZXctdG8gbmV3LWZyb20pKSkKCQkgICAgICAg KHdpdGgtY3VycmVudC1idWZmZXIgYnVmCgkJCSAoZ290by1jaGFyIChwb2ludC1taW4pKQoJCQkg KGZvcndhcmQtbGluZSAoMS0gKC0gb2xkLWZyb20gbGluZS1vZmZzZXQpKSkKCQkJIChyYmJoLWRl bGV0ZS1saW5lICgxKyAoLSBvbGQtdG8gb2xkLWZyb20pKSkKCQkJIChzZXRxIGxpbmUtb2Zmc2V0 ICgrIGxpbmUtb2Zmc2V0ICgtIG9sZC10byBvbGQtZnJvbSkKCQkJCQkgICAgICBuZXctZnJvbSAo LSBuZXctdG8pKSkKCQkJIChpbnNlcnQgdGV4dCkpKSkKCQkgICAgKHQKCQkgICAgIChlcnJvciAi VW5rbm93biBjb21tYW5kIGFjdGlvbiBpbiBkaWZmIG91dHB1dCIpKSkpKSkpKQogICAgKG1vdmUt dG8tY29sdW1uIGNvbHVtbikpKSA7IFJlc3RvcmUgY29sdW1uLgoKOzsgTm90IHN1cmUgaWYgdGhl IGZ1bmN0aW9uIHdvdWxkIGJlIGEgZ29vZCBjYW5kaWRhdGUgZm9yCjs7IGByZXZlcnQtYnVmZmVy LWZ1bmN0aW9uJy4KOzsgQnV0IGp1c3QgaW4gY2FzZSwgbWFrZSBpdCB0YWtlIF9pZ25vcmUtYXV0 byBhcyBhbiBhcmd1bWVudC4KOzsgTm90ZSB0aGF0IHJldmVydGluZyB3aXRoIHRoZSBjb250ZW50 cyBvZiBhbiBhdXRvIHNhdmUgZmlsZSBpcyBub3Qgc3VwcG9ydGVkLgo7OyBJdCBjb3VsZCBiZSBh ZGRlZCwgaWYgc3VnZ2VzdGVkLgooZGVmdW4gcmJiaC1yZXZlcnQtYnVmZmVyLWJ5LWh1bmtzICgm b3B0aW9uYWwgX2lnbm9yZS1hdXRvIG5vY29uZmlybSkKICAiUmV2ZXJ0IGJ1ZmZlciBieSBodW5r cywgaW5zdGVhZCBvZiBkb2luZyBhIHNpbmdsZSBkZWxldGlvbiBwbHVzIGluc2VydGlvbi4KVGhp cyBhY3Rpb24gaXMgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gcmV2ZXJ0IGEgYnVmZmVyIChsaWtl IHlvdSB3b3VsZCBkbyB3aXRoCmByZXZlcnQtYnVmZmVyJyksIGJ1dCB0aGVuIHdvdWxkIGxpa2Ug dG8gdW5kbyBzb21lIG9mIHRoZSByZXZlcnRpbmcuCldoZW4gdGhlIGJ1ZmZlciBoYXNuJ3QgYmVl biBtb2RpZmllZCwgbm90aGluZyBpcyBkb25lLgpUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZnVs IGZvciBidWZmZXJzIHZpc3RpbmcgZmlsZXMuCkFmdGVyIHJldmVydGluZywgaXQgbWFya3MgdGhl IGJ1ZmZlciBhcyBub3QgbW9kaWZpZWQuCgpXaGVuIE5PQ09ORklSTSBpcyBub24tbmlsLCBkb24n dCBhc2sgZm9yIGNvbmZpcm1hdGlvbiBiZWZvcmUgcmV2ZXJ0aW5nLiAgVGhlCm90aGVyIHdheSBv ZiBhdm9pZGluZyB0aGUgcXVlcnkgaXMgcHJvdmlkZWQgYnkgdGhlIHZhcmlhYmxlIApgcmV2ZXJ0 LXdpdGhvdXQtcXVlcnknLiAgTmV2ZXJ0aGVsZXNzLCB5b3Ugd2lsbCBiZSBhbHdheXMgcHJvbXB0 ZWQsIGlmIHRoZQpmaWxlIHdhcyBjaGFuZ2VkIGV4dGVybmFsbHkuCgpUaGUgb3B0aW9uYWwgYXJn dW1lbnQgX0lHTk9SRS1BVVRPIGlzIGlnbm9yZWQgYW5kIGlzIHByb3ZpZGVkIG9ubHkgZm9yCmNv bXBhdGliaWxpdHkgd2l0aCBgcmV2ZXJ0LWJ1ZmZlcicuICBUaHVzLCBpdCBpcyBhIGNhbmRpZGF0 ZSBmb3IgdGhlIHZhcmlhYmxlCmByZXZlcnQtYnVmZmVyLWZ1bmN0aW9uJy4iCiAgKGludGVyYWN0 aXZlKQogICh3aXRoLWN1cnJlbnQtYnVmZmVyIChvciAoYnVmZmVyLWJhc2UtYnVmZmVyIChjdXJy ZW50LWJ1ZmZlcikpCgkJCSAgIChjdXJyZW50LWJ1ZmZlcikpCiAgICAoc2F2ZS1leGN1cnNpb24K ICAgICAgKGxldCAoKGZpbGUtbmFtZSBidWZmZXItZmlsZS1uYW1lKQoJICAgIChidWYgKGN1cnJl bnQtYnVmZmVyKSkKCSAgICA7OyBKdXN0IGluIGNhc2Ugd2UgYXJlIG5vdCB0aGUgcmV2ZXJ0LWJ1 ZmZlci1mdW5jdGlvbi4KCSAgICAocmV2ZXJ0LWJ1ZmZlci1pbi1wcm9ncmVzcy1wIHQpKQoJOzsg UmVwZWF0IHNvbWUgb2Ygd2hhdCByZXZlcnQtYnVmZmVyLS1kZWZhdWx0IGRvZXMsIGJlY2F1c2Ug aXQgaXMgbm90Cgk7OyBzdXJlIHJldmVydGluZyBieSBodW5rcyBpcyBhIGNhbmRpZGF0ZSBmb3Ig cmV2ZXJ0LWJ1ZmZlci1mdW5jdGlvbi4KCShjb25kICgobnVsbCBmaWxlLW5hbWUpCgkgICAgICAg KGVycm9yICJCdWZmZXIgZG9lcyBub3Qgc2VlbSB0byBiZSBhc3NvY2lhdGVkIHdpdGggYW55IGZp bGUiKSkKCSAgICAgICgob3IgKGFuZCAobm90ICh2ZXJpZnktdmlzaXRlZC1maWxlLW1vZHRpbWUg YnVmKSkKCQkJKHllcy1vci1uby1wCgkJCSAoZm9ybWF0ICJGaWxlICVzIHdhcyBtb2RpZmllZCBv dXRzaWRlIG9mIEVtYWNzLiAgUmVhbGx5IHJldmVydD8iCgkJCQkgZmlsZS1uYW1lKSkpCgkJICAg bm9jb25maXJtCgkJICAgOzsgUmVzcGVjdCB1c2VyIGNob2ljZS4KCQkgICAoY2F0Y2ggJ2ZvdW5k CgkJICAgICAoZG9saXN0IChyZWdleHAgcmV2ZXJ0LXdpdGhvdXQtcXVlcnkpCgkJICAgICAgICh3 aGVuIChzdHJpbmctbWF0Y2ggcmVnZXhwIGZpbGUtbmFtZSkKCQkJICh0aHJvdyAnZm91bmQgdCkp KSkKCQkgICAoeWVzLW9yLW5vLXAgKGZvcm1hdCAiUmV2ZXJ0IGJ1ZmZlciBmcm9tIGZpbGUgJXM/ ICIKCQkJCQlmaWxlLW5hbWUpKSkKCSAgICAgICAocnVuLWhvb2tzICdiZWZvcmUtcmV2ZXJ0LWhv b2spCgkgICAgICAgKHJiYmgtLXJ1bi1kaWZmIGJ1ZikKCSAgICAgICAocmJiaC1wYXRjaC1idWZm ZXIgYnVmIHJiYmgtY3VycmVudC1kaWZmLWJ1ZmZlci1uYW1lKQoJICAgICAgIDs7IE1hcmsgdGhl IGJ1ZmZlciBhcyBub3QgbW9kaWZpZWQsIGxpa2UgaXQgd291bGQgaGFwcGVuIHdpdGgKCSAgICAg ICA7OyB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiByZXZlcnQtYnVmZmVyLgoJICAgICAgIChzZXQt YnVmZmVyLW1vZGlmaWVkLXAgbmlsKQoJICAgICAgIDs7IFJlcG9ydCB0byB0aGUgdXNlciAodGhp cyBjb3VsZCBiZSBtYWRlIG9wdGlvbmFsKS4KCSAgICAgICAoc2V0cSByYmJoLXRvdGFsLWh1bmtz IChyYmJoLWNvdW50LXRvdGFsLWh1bmtzCgkJCQkgICAgICAgcmJiaC1jdXJyZW50LWRpZmYtYnVm ZmVyLW5hbWUpKQoJICAgICAgIChtZXNzYWdlICIlZCAlcyByZXZlcnRlZCIgcmJiaC10b3RhbC1o dW5rcwoJCQkoaWYgKD0gcmJiaC10b3RhbC1odW5rcyAxKQoJCQkgICAgImh1bmsiCgkJCSAgImh1 bmtzIikpCgkgICAgICAgOzsgS2lsbCB0aGUgZGlmZiBidWZmZXIgd2UgdXNlZC4KCSAgICAgICAo a2lsbC1idWZmZXIgcmJiaC1jdXJyZW50LWRpZmYtYnVmZmVyLW5hbWUpCgkgICAgICAgKHJ1bi1o b29rcyAnYWZ0ZXItcmV2ZXJ0LWhvb2spKQoJICAgICAgKHQKCSAgICAgICAobWVzc2FnZSAiUmV2 ZXJ0IGFib3J0ZWQiKSkpKSkpKQoKKHByb3ZpZGUgJ3JiYmgpCgo7OzsgcmJiaC5lbCBlbmRzIGhl cmUK --00000000000072fe1f058776a54e--