From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Anders Lindgren Newsgroups: gmane.emacs.bugs Subject: bug#15957: 24.3.50; Follow mode scrolling broken on Emacs trunk Date: Tue, 26 Nov 2013 12:01:13 +0100 Message-ID: References: <52909877.1070203@gmx.at> <5291D098.10507@gmx.at> <52937DED.9070304@gmx.at> <529440AD.6060505@yandex.ru> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=047d7bb039462046a504ec12661c X-Trace: ger.gmane.org 1385463732 23981 80.91.229.3 (26 Nov 2013 11:02:12 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 26 Nov 2013 11:02:12 +0000 (UTC) Cc: 15957@debbugs.gnu.org To: Dmitry Antipov Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Nov 26 12:02:16 2013 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1VlGPH-0006Ym-Ko for geb-bug-gnu-emacs@m.gmane.org; Tue, 26 Nov 2013 12:02:15 +0100 Original-Received: from localhost ([::1]:57840 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VlGPH-0001EC-83 for geb-bug-gnu-emacs@m.gmane.org; Tue, 26 Nov 2013 06:02:15 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:47862) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VlGP9-0001Cw-DR for bug-gnu-emacs@gnu.org; Tue, 26 Nov 2013 06:02:12 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VlGP4-0000Pf-Uq for bug-gnu-emacs@gnu.org; Tue, 26 Nov 2013 06:02:07 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:59653) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VlGP4-0000PB-Qc for bug-gnu-emacs@gnu.org; Tue, 26 Nov 2013 06:02:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1VlGP4-0008A8-9P for bug-gnu-emacs@gnu.org; Tue, 26 Nov 2013 06:02:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Anders Lindgren Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 26 Nov 2013 11:02:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 15957 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 15957-submit@debbugs.gnu.org id=B15957.138546368331325 (code B ref 15957); Tue, 26 Nov 2013 11:02:02 +0000 Original-Received: (at 15957) by debbugs.gnu.org; 26 Nov 2013 11:01:23 +0000 Original-Received: from localhost ([127.0.0.1]:45439 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VlGOQ-00089A-V0 for submit@debbugs.gnu.org; Tue, 26 Nov 2013 06:01:23 -0500 Original-Received: from mail-wi0-f180.google.com ([209.85.212.180]:60448) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VlGOO-00088v-5q for 15957@debbugs.gnu.org; Tue, 26 Nov 2013 06:01:21 -0500 Original-Received: by mail-wi0-f180.google.com with SMTP id hm4so6841849wib.1 for <15957@debbugs.gnu.org>; Tue, 26 Nov 2013 03:01:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=cJsFBNuW7zhmJjX49teNGDgs7zmuFNUieqt08Gn5d0I=; b=zLxnqPlpgnWU9uyXu7sW/KVmjHz+wGRML1A0eboSeNQuEcGwK02QFoCppRHSOS9Qnm /Y2OBzT/r2GktQ9iBOQFn5HrRiHpNRhIpvRS6OKAoazvuHCZikGM1YQkCBsHQOsUWre+ hzKtSxoCHJIkYXVL7BdlsISUT+X4Zzc8ccoeladydPEtiYgqKLzU9XXVQK+XdOPOdLVF OzIi2aE/YckdxfHQkNRWnUqR2dSMNKO947ryJQBkSMTXIfUXrOzfozR0su+Mk5MB7glh +/r9Cv8laHhuMDdeMhQxbRNmSJ3RJqDKRNnbJ2TlilrV0hiPq6lRAMJ6BzR4LPXjHqbp /tMA== X-Received: by 10.194.193.4 with SMTP id hk4mr1103149wjc.71.1385463673794; Tue, 26 Nov 2013 03:01:13 -0800 (PST) Original-Received: by 10.216.124.76 with HTTP; Tue, 26 Nov 2013 03:01:13 -0800 (PST) In-Reply-To: <529440AD.6060505@yandex.ru> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.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-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:80979 Archived-At: --047d7bb039462046a504ec12661c Content-Type: multipart/alternative; boundary=047d7bb039462046a104ec12661a --047d7bb039462046a104ec12661a Content-Type: text/plain; charset=ISO-8859-1 Hi Dmitry! The problem only occurs under certain circumstances. `window-end' must called from a post-command hook and the command that started it must be bound to a key (not using M-x). Also, sometimes it seems to work correctly, sometimes not, like every second time. (Take "must" with a grain of salt, it might be possible to trigger the bug under other circumstances as well.) I have attached a piece of lisp code which basically is the follow-mode code plus log commands, so that you clearly can see the return value of different functions, including the call to `windows-end'. I'm sure it would be possible to cut down the code to a minimal, now when we know that it's `window-end' that returns the incorrect value. (The logs I referred to in the previous mails were generated by this package.) I'm not familiar with the bug tracking system, but feel free to add this code to it. In case you are not familiar with follow-mode, it is a package that creates the illusion that you have one large window spread out over several side-by-side windows, you can move between the windows using the normal cursor keys, and when you scroll one window, the others follow (hence the name "Follow mode"). Technically, this is accomplished by a using a post-command hook that performs all the repositioning, plus a handful of new function performing operations that didn't exist before (like scrolling X pages, where X equal the number of windows the buffer is shown in). Do you think that you have everything that you need to find and fix the bug, or is there anything else that I can help you with? Sincerely, Anders Lindgren On Tue, Nov 26, 2013 at 7:33 AM, Dmitry Antipov wrote: > On 11/25/2013 08:42 PM, martin rudalics wrote: > >> Forwarding Anders Lindgren's mail to 15957@debbugs.gnu.org and Dmitry >> Antipov. >> >> Hi! >>> >>> I believe that I have found the problem. In `follow-calc-win-end', there >>> is >>> a call to `(window-end win t)'. The `t' means "compute the up-to-date >>> position >>> if it isn't already recorded." The return value from this function is >>> clearly incorrect. The fact that the wrong window is selected is simply a >>> consequence of this. >>> >>> In the older Emacs (up to bzr revision 113752), this seems to work >>> correctly. However, in the newer (starting from bzt revision 113753) this >>> is broken. >>> >> > Hm...I just add debug printf() at the end of Fwindow_end, and see an > identical output for 24.3 and r115239 for this simple example: > > ./src/emacs -Q -font 6x10 -geometry 200x65 > C-h t > M-x follow-delete-other-windows-and-split > C-c . C-v > > So if someone has a elisp code that clearly shows that window-end is > broken, > please attach it to this bug at least. > > Dmitry > > > --047d7bb039462046a104ec12661a Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
Hi Dmitry!

The problem only occurs unde= r certain circumstances. `window-end' must called from a post-command h= ook and the command that started it must be bound to a key (not using M-x).= Also, sometimes it seems to work correctly, sometimes not, like every seco= nd time. (Take "must" with a grain of salt, it might be possible = to trigger the bug under other circumstances as well.)=A0

I have attached a piece of lisp code which basically is= the follow-mode code plus log commands, so that you clearly can see the re= turn value of different functions, including the call to `windows-end'.= I'm sure it would be possible to cut down the code to a minimal, now w= hen we know that it's `window-end' that returns the incorrect value= . (The logs I referred to in the previous mails were generated by this pack= age.) I'm not familiar with the bug tracking system, but feel free to a= dd this code to it.

In case you are not familiar with follow-mode, it is a = package that creates the illusion that you have one large window spread out= over several side-by-side windows, you can move between the windows using = the normal cursor keys, and when you scroll one window, the others follow (= hence the name "Follow mode"). Technically, this is accomplished = by a using a post-command hook that performs all the repositioning, plus a = handful of new function performing operations that didn't exist before = (like scrolling X pages, where X equal the number of windows the buffer is = shown in).

Do you think that you have everything that you need to = find and fix the bug, or is there anything else that I can help you with?

Sincerely,
=A0 =A0 Anders Lindgren


On Tue, Nov 26, 2013 at 7:33 AM, Dmitry Antipov = <dmantipov@yand= ex.ru> wrote:
On 11/25/2013 08:42 PM, martin rudalics wrote:
Forwarding Anders Lindgren's mail to 15957@debbugs.gnu.org and Dmitry Antipov.

Hi!

I believe that I have found the problem. In `follow-calc-win-end', ther= e is
a call to `(window-end win t)'. The `t' means "compute the up-= to-date
position
if it isn't already recorded." The return value from this function= is
clearly incorrect. The fact that the wrong window is selected is simply a consequence of this.

In the older Emacs (up to bzr revision 113752), this seems to work
correctly. However, in the newer (starting from bzt revision 113753) this is broken.

Hm...I just add debug printf() at the end of Fwindow_end, and see an
identical output for 24.3 and r115239 for this simple example:

./src/emacs -Q -font 6x10 -geometry 200x65
C-h t
M-x follow-delete-other-windows-and-split
C-c . C-v

So if someone has a elisp code that clearly shows that window-end is broken= ,
please attach it to this bug at least.

Dmitry



--047d7bb039462046a104ec12661a-- --047d7bb039462046a504ec12661c Content-Type: application/octet-stream; name="check-follow-scroll-bug.el" Content-Disposition: attachment; filename="check-follow-scroll-bug.el" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hoh0asi00 OzsgUXVpY2tuJ2RpcnR5IGZvbGxvdy1tb2RlIGRlYnVnIGxvZyBwYWNrYWdlLgoKKHJlcXVpcmUg J2ZvbGxvdykKCihkZWZ1biBteS13cmFwLWZvbGxvdy1zY3JvbGwtdXAgKCZvcHRpb25hbCBhcmcp CiAgKGludGVyYWN0aXZlICJQIikKICAoc2V0cSBteS1mMSAoc2VsZWN0ZWQtd2luZG93KSkKICAo Zm9sbG93LXNjcm9sbC11cCBhcmcpCiAgKHNldHEgbXktZjIgKHNlbGVjdGVkLXdpbmRvdykpKQoK OzsgVGhlIHByb2JsZW0gb2JseSBtYW5pZmVzdHMgaXRzZWxmIHdoZW4gYm91bmQgdG8gYSBrZXku CihnbG9iYWwtc2V0LWtleSAoa2JkICJDLXoiKSAnbXktd3JhcC1mb2xsb3ctc2Nyb2xsLXVwKQoK KGRlZnZhciBteS1wb3N0LWxvZyBuaWwpCihkZWZ2YXIgbXktcG9zdC1kby1sb2cgbmlsKQoKKGRl ZnVuIGNoZWNrLWZvbGxvdy1sb2cgKHdoYXQgJnJlc3QgZXh0cmEpCiAgKGlmIG15LXBvc3QtZG8t bG9nCiAgICAgIChzZXRxIG15LXBvc3QtbG9nIChjb25zIChjb25zIHdoYXQgKGNvbnMgKHNlbGVj dGVkLXdpbmRvdykgZXh0cmEpKSBteS1wb3N0LWxvZykpKSkKCihkZWZ1biBjaGVjay1mb2xsb3ct cmVwb3J0LWxvZyAoKQogIChpbnRlcmFjdGl2ZSkKICAod2l0aC1vdXRwdXQtdG8tdGVtcC1idWZm ZXIgIipGb2xsb3cgbG9nKiIKICAgIChkb2xpc3QgKHggKHJldmVyc2UgbXktcG9zdC1sb2cpKQog ICAgICAocHJpbmMgeCkKICAgICAgKHRlcnByaSkpKSkKCjs7IE1vZGlmaWVkIHRvIHN1cHBvcnQg bG9nZ2luZy4KKGRlZnVuIGZvbGxvdy1jYWxjLXdpbi1lbmQgKCZvcHRpb25hbCB3aW4pCiAgIkNh bGN1bGF0ZSB0aGUgZW5kIHBvc2l0aW9uIGZvciB3aW5kb3cgV0lOLgpSZXR1cm4gKEVORC1QT1Mg RU5ELU9GLUJVRkZFUikuCgpBY3R1YWxseSwgdGhlIHBvc2l0aW9uIHJldHVybmVkIGlzIHRoZSBz dGFydCBvZiB0aGUgbGluZSBhZnRlcgp0aGUgbGFzdCBmdWxseS12aXNpYmxlIGxpbmUgaW4gV0lO LiAgSWYgV0lOIGlzIG5pbCwgdGhlIHNlbGVjdGVkCndpbmRvdyBpcyB1c2VkLiIKICAoY2hlY2st Zm9sbG93LWxvZyAiZm9sbG93LWNhbGMtd2luLWVuZCIpCiAgKGxldCAoKHdpbiAob3Igd2luIChz ZWxlY3RlZC13aW5kb3cpKSkpCiAgICAobGV0ICgoZWRnZXMgKHdpbmRvdy1pbnNpZGUtcGl4ZWwt ZWRnZXMgd2luKSkpCiAgICAgIChjaGVjay1mb2xsb3ctbG9nICIgIGVkZ2VzIiBlZGdlcykKICAg ICAgKGxldCAoKGh0ICgtIChudGggMyBlZGdlcykgKG50aCAxIGVkZ2VzKSkpKQoJKGNoZWNrLWZv bGxvdy1sb2cgIiAgaHQiIGh0KQoJKGxldCAoKGxhc3QtbGluZS1wb3MgKHBvc24tcG9pbnQgKHBv c24tYXQteC15IDAgKDEtIGh0KSB3aW4pKSkpCgkgIChjaGVjay1mb2xsb3ctbG9nICIgIGxhc3Qt bGluZS1wb3MiIGxhc3QtbGluZS1wb3MpCgkgIChpZiAocG9zLXZpc2libGUtaW4td2luZG93LXAg bGFzdC1saW5lLXBvcyB3aW4pCgkgICAgICAocHJvZ24KCQkoY2hlY2stZm9sbG93LWxvZyAiICBQ b3MgdmlzaWJsZSIpCgkJKGxldCAoKGVuZCAod2luZG93LWVuZCB3aW4gdCkpKQoJCSAgKGNoZWNr LWZvbGxvdy1sb2cgIiAgZW5kIiBlbmQpCgkJICAobGlzdCBlbmQgKD0gZW5kIChwb2ludC1tYXgp KSkpKQoJICAgIChjaGVjay1mb2xsb3ctbG9nICIgIFBvcyBub3QgdmlzaWJsZSIpCgkgICAgKGxp c3QgbGFzdC1saW5lLXBvcyBuaWwpKSkpKSkpCgo7OyBNb2RpZmllZCB0byBzdXBwb3J0IGxvZ2dp bmcuCihkZWZ1biBmb2xsb3ctcG9zdC1jb21tYW5kLWhvb2sgKCkKICAiRW5zdXJlIHRoYXQgdGhl IHdpbmRvd3MgaW4gRm9sbG93IG1vZGUgYXJlIGFkamFjZW50IGFmdGVyIGVhY2ggY29tbWFuZC4i CiAgKHVubGVzcyAoaW5wdXQtcGVuZGluZy1wKQogICAgKGxldCAoKGZvbGxvdy1pbnNpZGUtcG9z dC1jb21tYW5kLWhvb2sgdCkKCSAgKHdpbiAoc2VsZWN0ZWQtd2luZG93KSkpCiAgICAgIDs7IFdv cmsgaW4gdGhlIHNlbGVjdGVkIHdpbmRvdywgbm90IGluIHRoZSBjdXJyZW50IGJ1ZmZlci4KICAg ICAgKHdpdGgtY3VycmVudC1idWZmZXIgKHdpbmRvdy1idWZmZXIgd2luKQoJKHVubGVzcyAoYW5k IChzeW1ib2xwIHRoaXMtY29tbWFuZCkKCQkgICAgIChnZXQgdGhpcy1jb21tYW5kICdmb2xsb3ct bW9kZS11c2UtY2FjaGUpKQoJICAoc2V0cSBmb2xsb3ctd2luZG93cy1zdGFydC1lbmQtY2FjaGUg bmlsKSkpCiAgICAgIChzZXRxIG15LXBvc3QtZG8tbG9nIChlcSB0aGlzLWNvbW1hbmQgJ215LXdy YXAtZm9sbG93LXNjcm9sbC11cCkpCiAgICAgIChpZiBteS1wb3N0LWRvLWxvZwoJICAoc2V0cSBt eS1wb3N0LWxvZyAnKCkpKQogICAgICAoY2hlY2stZm9sbG93LWFkanVzdC13aW5kb3cgd2luIChw b2ludCkpKSkpCgo7OyBTcGVjaWFsIHZlcnNpb24gb2YgYGZvbGxvdy1hZGp1c3Qtd2luZG93Jy4K KGRlZnVuIGNoZWNrLWZvbGxvdy1hZGp1c3Qtd2luZG93ICh3aW4gZGVzdCkKICA7OyBBZGp1c3Qg dGhlIHdpbmRvdyBXSU4gYW5kIGl0cyBmb2xsb3dlcnMuCiAgKGNoZWNrLWZvbGxvdy1sb2cgIlN0 YXJ0IikKICAod2l0aC1jdXJyZW50LWJ1ZmZlciAod2luZG93LWJ1ZmZlciB3aW4pCiAgICAoY2hl Y2stZm9sbG93LWxvZyAiU3RhcnQgKGluc2lkZSB3LWMtYikiKQogICAgKHdoZW4gKGFuZCBmb2xs b3ctbW9kZQoJICAgICAgIChub3QgKHdpbmRvdy1taW5pYnVmZmVyLXAgd2luKSkpCjsgICAgICAo Y2hlY2stZm9sbG93LWxvZyAid2luZG93LXN0YXJ0IiAod2luZG93LXN0YXJ0IChjYXIgKGZvbGxv dy1hbGwtZm9sbG93ZXJzKSkpKQo7ICAgICAgKGNoZWNrLWZvbGxvdy1sb2cgIndpbmRvdy1lbmQi ICh3aW5kb3ctZW5kIChjYXIgKGZvbGxvdy1hbGwtZm9sbG93ZXJzKSkpKQo7ICAgICAgKGNoZWNr LWZvbGxvdy1sb2cgImZvbGxvdy1jYWxjLXdpbi1lbmQiIChmb2xsb3ctY2FsYy13aW4tZW5kIChj YXIgKGZvbGxvdy1hbGwtZm9sbG93ZXJzKSkpKQo7ICAgICAgKGNoZWNrLWZvbGxvdy1sb2cgImZv bGxvdy13aW5kb3dzLXN0YXJ0LWVuZCIgKGZvbGxvdy13aW5kb3dzLXN0YXJ0LWVuZCAoZm9sbG93 LWFsbC1mb2xsb3dlcnMpKSkKICAgICAgKGxldCogKCh3aW5kb3dzIChmb2xsb3ctYWxsLWZvbGxv d2VycyB3aW4pKQoJICAgICAod2luLXN0YXJ0LWVuZCAocHJvZ24KCQkJICAgICAgKGZvbGxvdy11 cGRhdGUtd2luZG93LXN0YXJ0IChjYXIgd2luZG93cykpCgkJCSAgICAgIChmb2xsb3ctd2luZG93 cy1zdGFydC1lbmQgd2luZG93cykpKQoJICAgICAoYWxpZ25lZCAoZm9sbG93LXdpbmRvd3MtYWxp Z25lZC1wIHdpbi1zdGFydC1lbmQpKQoJICAgICAodmlzaWJsZSAoZm9sbG93LXBvcy12aXNpYmxl IGRlc3Qgd2luIHdpbi1zdGFydC1lbmQpKQoJICAgICBzZWxlY3RlZC13aW5kb3ctdXAtdG8tZGF0 ZSkKCShjaGVjay1mb2xsb3ctbG9nICJWaXNpYmxlIiB2aXNpYmxlKQoJKGNoZWNrLWZvbGxvdy1s b2cgIndpbi1zdGFydC1lbmQiIHdpbi1zdGFydC1lbmQpCgkodW5sZXNzIChhbmQgYWxpZ25lZCB2 aXNpYmxlKQoJICAoc2V0cSBmb2xsb3ctd2luZG93cy1zdGFydC1lbmQtY2FjaGUgbmlsKSkKCgko Y2hlY2stZm9sbG93LWxvZyAiQmVmb3JlIGludGVybmFsLWZvcmVjZS1yZWRpc3BsYXkgY2hlY2si KQoJOzsgU2VsZWN0IGEgd2luZG93IHRvIGRpc3BsYXkgcG9pbnQuCgkodW5sZXNzIGZvbGxvdy1p bnRlcm5hbC1mb3JjZS1yZWRpc3BsYXkKCSAgKGlmIChlcSBkZXN0IChwb2ludC1tYXgpKQoJICAg ICAgOzsgQmUgY2FyZWZ1bCBhdCBwb2ludC1tYXg6IHRoZSBkaXNwbGF5IGNhbiBiZSBhbGlnbmVk CgkgICAgICA7OyB3aGlsZSBERVNUIGNhbiBiZSB2aXNpYmxlIGluIHNldmVyYWwgd2luZG93cy4K CSAgICAgIChjb25kCgkgICAgICAgOzsgU2VsZWN0IHRoZSBjdXJyZW50IHdpbmRvdywgYnV0IG9u bHkgd2hlbiB0aGUgZGlzcGxheQoJICAgICAgIDs7IGlzIGNvcnJlY3QuIChXaGVuIGluc2VydGlu ZyBjaGFyYWN0ZXJzIGluIGEgdGFpbAoJICAgICAgIDs7IHdpbmRvdywgdGhlIGRpc3BsYXkgaXMg bm90IGNvcnJlY3QsIGFzIHRoZXkgYXJlCgkgICAgICAgOzsgc2hvd24gdHdpY2UuKQoJICAgICAg IDs7CgkgICAgICAgOzsgTmV2ZXIgc3RpY2sgdG8gdGhlIGN1cnJlbnQgd2luZG93IGFmdGVyIGEg ZGVsZXRpb24uCgkgICAgICAgOzsgT3RoZXJ3aXNlLCB3aGVuIHR5cGluZyBgREVMJyBpbiBhIHdp bmRvdyBzaG93aW5nCgkgICAgICAgOzsgb25seSB0aGUgZW5kIG9mIHRoZSBmaWxlLCBhIGNoYXJh Y3RlciB3b3VsZCBiZQoJICAgICAgIDs7IHJlbW92ZWQgZnJvbSB0aGUgd2luZG93IGFib3ZlLCB3 aGljaCBpcyB2ZXJ5CgkgICAgICAgOzsgdW5pbnR1aXRpdmUuCgkgICAgICAgKChhbmQgdmlzaWJs ZQoJCSAgICAgYWxpZ25lZAoJCSAgICAgKG5vdCAobWVtcSB0aGlzLWNvbW1hbmQKCQkJCScoYmFj a3dhcmQtZGVsZXRlLWNoYXIKCQkJCSAgZGVsZXRlLWJhY2t3YXJkLWNoYXIKCQkJCSAgYmFja3dh cmQtZGVsZXRlLWNoYXItdW50YWJpZnkKCQkJCSAga2lsbC1yZWdpb24pKSkpCgkJKGNoZWNrLWZv bGxvdy1sb2cgIkNhc2UgMSIpCgkJKGZvbGxvdy1kZWJ1Zy1tZXNzYWdlICJNYXg6IHNhbWUiKSkK CSAgICAgICA7OyBJZiB0aGUgZW5kIGlzIHZpc2libGUsIGFuZCB0aGUgd2luZG93IGRvZXNuJ3QK CSAgICAgICA7OyBzZWVtcyBsaWtlIGl0IGp1c3QgaGFzIGJlZW4gbW92ZWQsIHNlbGVjdCBpdC4K CSAgICAgICAoKGZvbGxvdy1zZWxlY3QtaWYtZW5kLXZpc2libGUgd2luLXN0YXJ0LWVuZCkKCQko Y2hlY2stZm9sbG93LWxvZyAiQ2FzZSAyIikKCQkoZm9sbG93LWRlYnVnLW1lc3NhZ2UgIk1heDog ZW5kIHZpc2libGUiKQoJCShzZXRxIHZpc2libGUgdCBhbGlnbmVkIG5pbCkKCQkoZ290by1jaGFy IGRlc3QpKQoJICAgICAgIDs7IEp1c3Qgc2hvdyB0aGUgZW5kLi4uCgkgICAgICAgKHQKCQkoY2hl Y2stZm9sbG93LWxvZyAiQ2FzZSAzIikKCQkoZm9sbG93LWRlYnVnLW1lc3NhZ2UgIk1heDogZGVm YXVsdCIpCgkJKHNlbGVjdC13aW5kb3cgKGNhciAobGFzdCB3aW5kb3dzKSkpCgkJKGdvdG8tY2hh ciBkZXN0KQoJCShzZXRxIHZpc2libGUgbmlsIGFsaWduZWQgbmlsKSkpCgoJICAgIDs7IFdlJ3Jl IG5vdCBhdCB0aGUgZW5kLCBoZXJlIGxpZmUgaXMgbXVjaCBzaW1wbGVyLgoJICAgIChjb25kCgkg ICAgIDs7IFRoaXMgaXMgdGhlIG5vcm1hbCBjYXNlIQoJICAgICA7OyBJdCBzaG91bGQgYmUgb3B0 aW1pemVkIGZvciBzcGVlZC4KCSAgICAgKChhbmQgdmlzaWJsZSBhbGlnbmVkKQoJICAgICAgKGNo ZWNrLWZvbGxvdy1sb2cgIkNhc2UgNCIpCgkgICAgICAoZm9sbG93LWRlYnVnLW1lc3NhZ2UgInNh bWUiKSkKCSAgICAgOzsgUGljayBhIHBvc2l0aW9uIGluIGFueSB3aW5kb3cuICBJZiB0aGUgZGlz cGxheSBpcyBvaywKCSAgICAgOzsgdGhpcyBwaWNrcyB0aGUgYGNvcnJlY3QnIHdpbmRvdy4KCSAg ICAgKChmb2xsb3ctc2VsZWN0LWlmLXZpc2libGUgZGVzdCB3aW4tc3RhcnQtZW5kKQoJICAgICAg KGNoZWNrLWZvbGxvdy1sb2cgIkNhc2UgNSIpCgkgICAgICAoZm9sbG93LWRlYnVnLW1lc3NhZ2Ug InZpc2libGUiKQoJICAgICAgKGdvdG8tY2hhciBkZXN0KQoJICAgICAgOzsgUGVyZm9ybSByZWRp c3BsYXksIGluIGNhc2UgbGluZSBpcyBwYXJ0aWFsbHkgdmlzaWJsZS4KCSAgICAgIChzZXRxIHZp c2libGUgbmlsKSkKCSAgICAgOzsgTm90IHZpc2libGUgYW55d2hlcmUgZWxzZSwgbGV0cyBwaWNr IHRoaXMgb25lLgoJICAgICAodmlzaWJsZQoJICAgICAgKGNoZWNrLWZvbGxvdy1sb2cgIkNhc2Ug NiIpCgkgICAgICAoZm9sbG93LWRlYnVnLW1lc3NhZ2UgInZpc2libGUgaW4gc2VsZWN0ZWQuIikp CgkgICAgIDs7IElmIERFU1QgaXMgYmVmb3JlIHRoZSBmaXJzdCB3aW5kb3cgc3RhcnQsIHNlbGVj dCB0aGUKCSAgICAgOzsgZmlyc3Qgd2luZG93LgoJICAgICAoKDwgZGVzdCAobnRoIDEgKGNhciB3 aW4tc3RhcnQtZW5kKSkpCgkgICAgICAoY2hlY2stZm9sbG93LWxvZyAiQ2FzZSA3IikKCSAgICAg IChmb2xsb3ctZGVidWctbWVzc2FnZSAiYmVmb3JlIGZpcnN0IikKCSAgICAgIChzZWxlY3Qtd2lu ZG93IChjYXIgd2luZG93cykpCgkgICAgICAoZ290by1jaGFyIGRlc3QpCgkgICAgICAoc2V0cSB2 aXNpYmxlIG5pbCBhbGlnbmVkIG5pbCkpCgkgICAgIDs7IElmIHdlIGNhbiBwb3NpdGlvbiB0aGUg Y3Vyc29yIHdpdGhvdXQgbW92aW5nIHRoZSBmaXJzdAoJICAgICA7OyB3aW5kb3csIGRvIGl0LiBU aGlzIGlzIHRoZSBjYXNlIHRoYXQgY2F0Y2hlcyBgUkVUJyBhdAoJICAgICA7OyB0aGUgYm90dG9t IG9mIGEgd2luZG93LgoJICAgICAoKGZvbGxvdy1zZWxlY3QtaWYtdmlzaWJsZS1mcm9tLWZpcnN0 IGRlc3Qgd2luZG93cykKCSAgICAgIChjaGVjay1mb2xsb3ctbG9nICJDYXNlIDciKQoJICAgICAg KGZvbGxvdy1kZWJ1Zy1tZXNzYWdlICJCZWxvdyBmaXJzdCIpCgkgICAgICAoc2V0cSB2aXNpYmxl IHQgYWxpZ25lZCB0KSkKCSAgICAgOzsgTm9uZSBvZiB0aGUgYWJvdmUuICBTdGljayB0byB0aGUg c2VsZWN0ZWQgd2luZG93LgoJICAgICAodAoJICAgICAgKGNoZWNrLWZvbGxvdy1sb2cgIkNhc2Ug OCIpCgkgICAgICAoZm9sbG93LWRlYnVnLW1lc3NhZ2UgIk5vbmUiKQoJICAgICAgKHNldHEgdmlz aWJsZSBuaWwgYWxpZ25lZCBuaWwpKSkpCgoJICAoY2hlY2stZm9sbG93LWxvZyAiQmVmb3JlIHNl bGVjdGVkIHdpbmRvdyBjaGVjayIpCgkgIDs7IElmIGEgbmV3IHdpbmRvdyB3YXMgc2VsZWN0ZWQs IG1ha2Ugc3VyZSB0aGF0IHRoZSBvbGQgaXMKCSAgOzsgbm90IHNjcm9sbGVkIHdoZW4gdGhlIHBv aW50IGlzIG91dHNpZGUgdGhlIHdpbmRvdy4KCSAgKHVubGVzcyAoZXEgd2luIChzZWxlY3RlZC13 aW5kb3cpKQoJICAgIChsZXQgKChwICh3aW5kb3ctcG9pbnQgd2luKSkpCgkgICAgICAoc2V0LXdp bmRvdy1zdGFydCB3aW4gKHdpbmRvdy1zdGFydCB3aW4pIG5pbCkKCSAgICAgIChzZXQtd2luZG93 LXBvaW50IHdpbiBwKSkpKQoKCSh1bmxlc3MgdmlzaWJsZQoJICA7OyBJZiBwb2ludCBtYXkgbm90 IGJlIHZpc2libGUgaW4gdGhlIHNlbGVjdGVkIHdpbmRvdywKCSAgOzsgcGVyZm9ybSBhIHJlZGlz cGxheTsgdGhpcyBlbnN1cmVzIHNjcm9sbGluZy4KCSAgKGxldCAoKG9wb2ludCAocG9pbnQpKSkK CSAgICAocmVkaXNwbGF5KQoJICAgIDs7IElmIHRoaXMgYHJlZGlzcGxheScgbW92ZWQgcG9pbnQs IHdlIGdvdCBjbG9iYmVyZWQgYnkgYQoJICAgIDs7IHByZXZpb3VzIGNhbGwgdG8gYHNldC13aW5k b3ctc3RhcnQnLiAgVHJ5IGFnYWluLgoJICAgICh3aGVuICgvPSAocG9pbnQpIG9wb2ludCkKCSAg ICAgIChnb3RvLWNoYXIgb3BvaW50KQoJICAgICAgKHJlZGlzcGxheSkpKQoKCSAgKHNldHEgc2Vs ZWN0ZWQtd2luZG93LXVwLXRvLWRhdGUgdCkKCSAgKGNoZWNrLWZvbGxvdy1sb2cgIkFBQSIpCgoJ ICAoZm9sbG93LWF2b2lkLXRhaWwtcmVjZW50ZXIpCgkgIChzZXRxIHdpbi1zdGFydC1lbmQgKGZv bGxvdy13aW5kb3dzLXN0YXJ0LWVuZCB3aW5kb3dzKQoJCWZvbGxvdy13aW5kb3dzLXN0YXJ0LWVu ZC1jYWNoZSBuaWwKCQlhbGlnbmVkIG5pbCkpCgoJOzsgTm93IHJlZHJhdyB0aGUgd2luZG93cyBh cm91bmQgdGhlIHNlbGVjdGVkIHdpbmRvdy4KCShjaGVjay1mb2xsb3ctbG9nICJCQkIiKQoJKHVu bGVzcyAoYW5kIChub3QgZm9sbG93LWludGVybmFsLWZvcmNlLXJlZGlzcGxheSkKCQkgICAgIChv ciBhbGlnbmVkCgkJCSAoZm9sbG93LXdpbmRvd3MtYWxpZ25lZC1wIHdpbi1zdGFydC1lbmQpKQoJ CSAgICAgKGZvbGxvdy1wb2ludC12aXNpYmxlLWFsbC13aW5kb3dzLXAgd2luLXN0YXJ0LWVuZCkp CgkgIChzZXRxIGZvbGxvdy1pbnRlcm5hbC1mb3JjZS1yZWRpc3BsYXkgbmlsKQoJICAoZm9sbG93 LXJlZGlzcGxheSB3aW5kb3dzIChzZWxlY3RlZC13aW5kb3cpCgkJCSAgICBzZWxlY3RlZC13aW5k b3ctdXAtdG8tZGF0ZSkKCSAgKHNldHEgd2luLXN0YXJ0LWVuZCAoZm9sbG93LXdpbmRvd3Mtc3Rh cnQtZW5kIHdpbmRvd3MpCgkJZm9sbG93LXdpbmRvd3Mtc3RhcnQtZW5kLWNhY2hlIG5pbCkKCSAg OzsgVGhlIHBvaW50IGNhbiBlbmRzIHVwIGluIGFub3RoZXIgd2luZG93IHdoZW4gREVTVCBpcyBh dAoJICA7OyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgYW5kIHRoZSBzZWxlY3RlZCB3aW5k b3cgaXMKCSAgOzsgbm90IHRoZSBmaXJzdC4gIEl0IGNhbiBhbHNvIGhhcHBlbiB3aGVuIGxvbmcg bGluZXMgYXJlCgkgIDs7IHVzZWQgYW5kIHRoZXJlIGlzIGEgYmlnIGRpZmZlcmVuY2UgYmV0d2Vl biB0aGUgd2lkdGggb2YKCSAgOzsgdGhlIHdpbmRvd3MuICAoV2hlbiBzY3JvbGxpbmcgb25lIGxp bmUgaW4gYSB3aWRlIHdpbmRvdwoJICA7OyB3aGljaCB3aWxsIGNhdXNlIGEgbW92ZSBsYXJnZXIg dGhhdCBhbiBlbnRpcmUgc21hbGwKCSAgOzsgd2luZG93LikKCSAgKHVubGVzcyAoZm9sbG93LXBv cy12aXNpYmxlIGRlc3Qgd2luIHdpbi1zdGFydC1lbmQpCgkgICAgKGZvbGxvdy1zZWxlY3QtaWYt dmlzaWJsZSBkZXN0IHdpbi1zdGFydC1lbmQpCgkgICAgKGdvdG8tY2hhciBkZXN0KSkpCgoJKGNo ZWNrLWZvbGxvdy1sb2cgIkNDQyIpCgoJOzsgSWYgdGhlIHJlZ2lvbiBpcyB2aXNpYmxlLCBtYWtl IGl0IGxvb2sgZ29vZCB3aGVuIHNwYW5uaW5nCgk7OyBtdWx0aXBsZSB3aW5kb3dzLgoKCTs7IEZJ WE1FOiBXaHkgbm90IHVzZSBgdXNlLXJlZ2lvbi1wJyBoZXJlPwoJKHdoZW4gKHJlZ2lvbi1hY3Rp dmUtcCkKCSAgKGZvbGxvdy1tYXhpbWl6ZS1yZWdpb24KCSAgIChzZWxlY3RlZC13aW5kb3cpIHdp bmRvd3Mgd2luLXN0YXJ0LWVuZCkpKQoKICAgICAgKGNoZWNrLWZvbGxvdy1sb2cgIkRERCIpCiAg ICAgIDs7IFdoZXRoZXIgb3Igbm90IHRoZSBidWZmZXIgd2FzIGluIGZvbGxvdyBtb2RlLCB1cGRh dGUgd2luZG93cwogICAgICA7OyBkaXNwbGF5aW5nIHRoZSB0YWlsIHNvIHRoYXQgRW1hY3Mgd29u J3QgcmVjZW50ZXIgdGhlbS4KICAgICAgKGZvbGxvdy1hdm9pZC10YWlsLXJlY2VudGVyKSkKICAg IChjaGVjay1mb2xsb3ctbG9nICJFbmQgKGluc2lkZSB3LWMtYikiKSkKICAoY2hlY2stZm9sbG93 LWxvZyAiRW5kIikpCg== --047d7bb039462046a504ec12661c--