From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Shane Mulligan Newsgroups: gmane.emacs.bugs Subject: bug#48500: 28.0.50; url-retrieve-synchronously exits abnormally due to pending keyboard input from terminal Date: Fri, 21 May 2021 11:35:27 +1200 Message-ID: References: <87pmxo4kiu.wl-mullikine@gmail.com> <8335ukrsj3.fsf@gnu.org> <83sg2kq8yc.fsf@gnu.org> <835yzfq6lm.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="0000000000009ae84405c2cb6681" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="39831"; mail-complaints-to="usenet@ciao.gmane.io" To: Eli Zaretskii , 48500@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Fri May 21 01:36:11 2021 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ljsD5-000A8U-8n for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 21 May 2021 01:36:11 +0200 Original-Received: from localhost ([::1]:44160 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ljsD4-0007yZ-BF for geb-bug-gnu-emacs@m.gmane-mx.org; Thu, 20 May 2021 19:36:10 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:47392) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ljsCw-0007yM-F3 for bug-gnu-emacs@gnu.org; Thu, 20 May 2021 19:36:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:52100) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ljsCw-0005gU-86 for bug-gnu-emacs@gnu.org; Thu, 20 May 2021 19:36:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1ljsCw-0001Nn-4u for bug-gnu-emacs@gnu.org; Thu, 20 May 2021 19:36:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Shane Mulligan Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 20 May 2021 23:36:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 48500 X-GNU-PR-Package: emacs Original-Received: via spool by 48500-submit@debbugs.gnu.org id=B48500.16215537475295 (code B ref 48500); Thu, 20 May 2021 23:36:02 +0000 Original-Received: (at 48500) by debbugs.gnu.org; 20 May 2021 23:35:47 +0000 Original-Received: from localhost ([127.0.0.1]:35413 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ljsCh-0001NL-3E for submit@debbugs.gnu.org; Thu, 20 May 2021 19:35:47 -0400 Original-Received: from mail-yb1-f174.google.com ([209.85.219.174]:43915) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ljsCf-0001N8-1b for 48500@debbugs.gnu.org; Thu, 20 May 2021 19:35:46 -0400 Original-Received: by mail-yb1-f174.google.com with SMTP id r7so3016845ybs.10 for <48500@debbugs.gnu.org>; Thu, 20 May 2021 16:35:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=IV1WsUgRr8U3nWTaYxnxdc+OEQgR/sHyYm6pDf8x7Yk=; b=jotqGmIWfiMcpDONkuLnK0uSzilvanMpyH2A70OxCKDRPsxLGWvDAkzIov3MousLr1 GXopdF0ZAUcFBJiTVTvt9UcjzrYCwpZHR4A8WTc2mtLP3pkyE1g5bdZjCrNBG35xJWqS zVj03rLh9TzvuxlgGa20PSHQYuAfZYY47lU8aZoCXR7CQCAjWqptKWJibq2Lcs5mB8Pu uB+1Uc8cgCcps5rSgFoDN1Oc7gz2bOfb+nRBH2W9FqMIWAhqcrd1/BOabNd0gF8CRTNP rXi8pRUrwdfvYSaHjk1keW9OkhKTk3yzO+AXKc8knLw44h894rz6XcZtqetQwqJe/THB HZJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=IV1WsUgRr8U3nWTaYxnxdc+OEQgR/sHyYm6pDf8x7Yk=; b=AuD0GBIxGo1Tz0bRwHVC4C6kWnbBtLi5eNLC0vyL4tJQv4r4YcLDT6DUahxdQZDw8l ALFqn17FG5lrgc/UelWsZoCMmSm1+lBk6ZWkt40DT5qI34Jkd0eTi/guHlVZvoIgWWRP P6D9Tl5uprwBDQwx0KQW4NqloruTAuqn9dT8o0djvgZwObOTLKhD7qBepbmydJt0t1dx qBnH5hx/WWiavvyMvxrzpmSKnL6Fhksgv0tYfg0gHUuQw+Bfe05o91hGGQgdVME/Q3OJ p6D9A90JaGHu5O0NydwZvuhi9yw6eQZOgwu1GULEjEy9uLz+jvJ7Z7XdUYWJu3N3Da+g WRnw== X-Gm-Message-State: AOAM53107CLT7tQxz5G0HuRHobWFUzLavi27OkHdCIBEdtvsb2YJzkv3 tFJeLlLDiHRM6Fs3NAAzrJGDBACsSDRPNEPBew== X-Google-Smtp-Source: ABdhPJx93nTArhxjkSCahe3T9j1//tbamuj8LQxv1Mw8kc3rGhJvX5P5upywUgvcAtZnEHYIF0Z/ZZhluh2zsKkfWbo= X-Received: by 2002:a25:a466:: with SMTP id f93mr10624734ybi.264.1621553739112; Thu, 20 May 2021 16:35:39 -0700 (PDT) In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:206973 Archived-At: --0000000000009ae84405c2cb6681 Content-Type: multipart/alternative; boundary="0000000000009ae84205c2cb667f" --0000000000009ae84205c2cb667f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hey Eli, A small update. I found that when I used internet from a slower connection, the hang returned, so I have a more robust workaround now. I simply abort the function if there is a hang. ``` 13c13,14 < (let ((retrieval-done nil) --- > (let ((inhibit-quit t) > (retrieval-done nil) 17c18,19 < (timed-out nil)) --- > (timed-out nil) > (abort-hang nil)) 29c31,32 < (let ((proc (get-buffer-process asynch-buffer))) --- > (let ((proc (get-buffer-process asynch-buffer)) > (counter 0)) 38a42 > (not abort-hang) 72,74c76,87 < (unless (or (with-local-quit < (accept-process-output proc 1)) < (null proc)) --- > (if (input-pending-p) > (progn > (setq counter (1+ counter)) > (if (> counter 20) > (setq abort-hang t)))) > ;; accept-process-output hangs without while-no-input; input has > ;; nowhere to go. So avoid it. > (unless (or > (while-no-input > (with-local-quit > (accept-process-output proc 0.1))) > (null proc)) ``` Shane Mulligan How to contact me: =F0=9F=87=A6=F0=9F=87=BA 00 61 421 641 250 =F0=9F=87=B3=F0=9F=87=BF 00 64 21 1462 759 <+64-21-1462-759> mullikine@gmail.com 13c13,14 < (let ((retrieval-done nil) --- > (let ((inhibit-quit t) > (retrieval-done nil) 17c18,19 < (timed-out nil)) --- > (timed-out nil) > (abort-hang nil)) 29c31,32 < (let ((proc (get-buffer-process asynch-buffer))) --- > (let ((proc (get-buffer-process asynch-buffer)) > (counter 0)) 38a42 > (not abort-hang) 72,74c76,87 < (unless (or (with-local-quit < (accept-process-output proc 1)) < (null proc)) --- > (if (input-pending-p) > (progn > (setq counter (1+ counter)) > (if (> counter 20) > (setq abort-hang t)))) > ;; accept-process-output hangs without while-no-input; input has > ;; nowhere to go. So avoid it. > (unless (or > (while-no-input > (with-local-quit > (accept-process-output proc 0.1))) > (null proc)) On Thu, May 20, 2021 at 1:12 AM Shane Mulligan wrote: > I will do some further studies to see if I can find exactly how quit is > being generated. > > Shane Mulligan > > How to contact me: > =F0=9F=87=A6=F0=9F=87=BA 00 61 421 641 250 > =F0=9F=87=B3=F0=9F=87=BF 00 64 21 1462 759 <+64-21-1462-759> > mullikine@gmail.com > > > On Wed, May 19, 2021 at 11:57 PM Eli Zaretskii wrote: > >> > From: Shane Mulligan >> > Date: Wed, 19 May 2021 18:48:09 +1200 >> > >> > I may have resolved this issue with the following patch to >> `url-retrieve-synchronously`. >> > What this achieves is to trigger a `quit` in a controlled environment >> rather than allowing it to occur when >> > `accept-process-output` is run. >> > It's not always wanted to trigger a quit when `(input-pending-p)` is >> `t`. But I noticed from placing >> > `while-no-input` around `accept-process-output` to avoid the `quit` >> that `url-retrieve-synchronously` would >> > then hang but with the controlled `quit` happening beforehand, >> `accept-process-output` no longer needs >> > `while-no-input` around it. The end result is buttery smooth helm with >> no accidental `quit` from typing too >> > fast. I think this may have resulted in GUI helm faster too. >> >> Thanks, but what causes a quit in the first place? >> > --0000000000009ae84205c2cb667f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hey Eli,

A small update.
I fo= und that when I used internet from a slower connection, the hang returned, = so I have a more robust workaround now. I simply abort the function=C2=A0if= there is a hang.

```
13c13,14
< = =C2=A0 (let ((retrieval-done nil)
---
> =C2=A0 (let ((inhibit-quit= t)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 (retrieval-done nil)
17c18,19< =C2=A0 =C2=A0 =C2=A0 =C2=A0 (timed-out nil))
---
> =C2=A0 = =C2=A0 =C2=A0 =C2=A0 (timed-out nil)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 (a= bort-hang nil))
29c31,32
< =C2=A0 =C2=A0 =C2=A0 (let ((proc (get-b= uffer-process asynch-buffer)))
---
> =C2=A0 =C2=A0 =C2=A0 (let ((p= roc (get-buffer-process asynch-buffer))
> =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 (counter 0))
38a42
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (not abort-hang)
72,74c76,87< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (unless (or (with-local-qu= it
< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 (accept-process-output proc 1))
< =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 (null proc))
---
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (= if (input-pending-p)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 (progn
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 (setq counter (1+ counter))
> =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (if (> counter 20)
> =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (set= q abort-hang t))))
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; acc= ept-process-output hangs without while-no-input; input has
> =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; nowhere to go. So avoid it.
> = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (unless (or
> =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(while-no-in= put
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0(with-local-quit
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(accept-proce= ss-output proc 0.1)))
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(null proc))
```
Shane Mulligan

How to contact me:<= /div>
3D""
=F0=9F=87=A6=F0=9F=87=BA00 61 421 641 250
=F0= =9F=87=B3=F0=9F=87=BF0= 0 64 21 1462 759
mullikine@gmail.com=

13c13,14
< =C2=A0 (let ((re= trieval-done nil)
---
> =C2=A0 (let ((inhibit-quit t)
> =C2= =A0 =C2=A0 =C2=A0 =C2=A0 (retrieval-done nil)
17c18,19
< =C2=A0 = =C2=A0 =C2=A0 =C2=A0 (timed-out nil))
---
> =C2=A0 =C2=A0 =C2=A0 = =C2=A0 (timed-out nil)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 (abort-hang nil)= )
29c31,32
< =C2=A0 =C2=A0 =C2=A0 (let ((proc (get-buffer-process = asynch-buffer)))
---
> =C2=A0 =C2=A0 =C2=A0 (let ((proc (get-buffe= r-process asynch-buffer))
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= (counter 0))
38a42
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 (not abort-hang)
72,74c76,87
< =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (unless (or (with-local-quit
< =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 (accept-process-output proc 1))
< =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (null proc))=
---
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (if (input-pendin= g-p)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (progn=
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (se= tq counter (1+ counter))
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 (if (> counter 20)
> =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setq abort-hang t))))=
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; accept-process-output= hangs without while-no-input; input has
> =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 ;; nowhere to go. So avoid it.
> =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 (unless (or
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(while-no-input
> =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0(with-local-quit
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(accept-process-output proc= 0.1)))
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0(null proc))


> From: Shane Mulligan <mullikine@gmail.com>
> Date: Wed, 19 May 2021 18:48:09 +1200
>
> I may have resolved this issue with the following patch to `url-retrie= ve-synchronously`.
> What this achieves is to trigger a `quit` in a controlled environment = rather than allowing it to occur when
> `accept-process-output` is run.
> It's not always wanted to trigger a quit when `(input-pending-p)` = is `t`. But I noticed from placing
> `while-no-input` around `accept-process-output` to avoid the `quit` th= at `url-retrieve-synchronously` would
> then hang but with the controlled `quit` happening beforehand, `accept= -process-output` no longer needs
> `while-no-input` around it. The end result is buttery smooth helm with= no accidental `quit` from typing too
> fast. I think this may have resulted in GUI helm faster too.

Thanks, but what causes a quit in the first place?
--0000000000009ae84205c2cb667f-- --0000000000009ae84405c2cb6681 Content-Type: text/x-emacs-lisp; charset="US-ASCII"; name="url-retrieve-synchronously.el" Content-Disposition: attachment; filename="url-retrieve-synchronously.el" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_koxj645p0 KGRlZnVuIHVybC1yZXRyaWV2ZS1zeW5jaHJvbm91c2x5ICh1cmwgJm9wdGlvbmFsIHNpbGVudCBp bmhpYml0LWNvb2tpZXMgdGltZW91dCkKICAiUmV0cmlldmUgVVJMIHN5bmNocm9ub3VzbHkuClJl dHVybiB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRhdGEsIG9yIG5pbCBpZiB0aGVyZSBhcmUg bm8gZGF0YQphc3NvY2lhdGVkIHdpdGggaXQgKHRoZSBjYXNlIGZvciBkaXJlZCwgaW5mbywgb3Ig bWFpbHRvIFVSTHMgdGhhdCBuZWVkCm5vIGZ1cnRoZXIgcHJvY2Vzc2luZykuICBVUkwgaXMgZWl0 aGVyIGEgc3RyaW5nIG9yIGEgcGFyc2VkIFVSTC4KCklmIFNJTEVOVCBpcyBub24tbmlsLCBkb24n dCBkbyBhbnkgbWVzc2FnaW5nIHdoaWxlIHJldHJpZXZpbmcuCklmIElOSElCSVQtQ09PS0lFUyBp cyBub24tbmlsLCByZWZ1c2UgdG8gc3RvcmUgY29va2llcy4gIElmClRJTUVPVVQgaXMgcGFzc2Vk LCBpdCBzaG91bGQgYmUgYSBudW1iZXIgdGhhdCBzYXlzIChpbiBzZWNvbmRzKQpob3cgbG9uZyB0 byB3YWl0IGZvciBhIHJlc3BvbnNlIGJlZm9yZSBnaXZpbmcgdXAuIgogICh1cmwtZG8tc2V0dXAp CgogIChsZXQgKChpbmhpYml0LXF1aXQgdCkKICAgICAgICAocmV0cmlldmFsLWRvbmUgbmlsKQog ICAgICAgIChzdGFydC10aW1lIChjdXJyZW50LXRpbWUpKQogICAgICAgICh1cmwtYXN5bmNocm9u b3VzIG5pbCkKICAgICAgICAoYXN5bmNoLWJ1ZmZlciBuaWwpCiAgICAgICAgKHRpbWVkLW91dCBu aWwpCiAgICAgICAgKGFib3J0LWhhbmcgbmlsKSkKICAgIChzZXRxIGFzeW5jaC1idWZmZXIKICAg ICAgICAgICh1cmwtcmV0cmlldmUgdXJsIChsYW1iZGEgKCZyZXN0IGlnbm9yZWQpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICh1cmwtZGVidWcgJ3JldHJpZXZhbCAiU3luY2hyb25vdXMg ZmV0Y2hpbmcgZG9uZSAoJVMpIiAoY3VycmVudC1idWZmZXIpKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoc2V0cSByZXRyaWV2YWwtZG9uZSB0CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFzeW5jaC1idWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkpCiAgICAgICAgICAg ICAgICAgICAgICAgIG5pbCBzaWxlbnQgaW5oaWJpdC1jb29raWVzKSkKICAgIChpZiAobnVsbCBh c3luY2gtYnVmZmVyKQogICAgICAgIDs7IFdlIGRvIG5vdCBuZWVkIHRvIGRvIGFueXRoaW5nLCBp dCB3YXMgYSBtYWlsdG8gb3Igc29tZXRoaW5nCiAgICAgICAgOzsgc2ltaWxhciB0aGF0IHRha2Vz IHByb2Nlc3NpbmcgY29tcGxldGVseSBvdXRzaWRlIG9mIHRoZSBVUkwKICAgICAgICA7OyBwYWNr YWdlLgogICAgICAgIG5pbAogICAgICAobGV0ICgocHJvYyAoZ2V0LWJ1ZmZlci1wcm9jZXNzIGFz eW5jaC1idWZmZXIpKQogICAgICAgICAgICAoY291bnRlciAwKSkKICAgICAgICA7OyBJZiB0aGUg YWNjZXNzIG1ldGhvZCB3YXMgc3luY2hyb25vdXMsIGByZXRyaWV2YWwtZG9uZScgc2hvdWxkCiAg ICAgICAgOzsgaG9wZWZ1bGx5IGFscmVhZHkgYmUgc2V0IHRvIHQuICBJZiBpdCBpcyBuaWwsIGFu ZCBgcHJvYycgaXMgYWxzbwogICAgICAgIDs7IG5pbCwgaXQgaW1wbGllcyB0aGF0IHRoZSBhc3lu YyBwcm9jZXNzIGlzIG5vdCBydW5uaW5nIGluCiAgICAgICAgOzsgYXN5bmNoLWJ1ZmZlci4gIFRo aXMgaGFwcGVucyBlLmcuIGZvciBGVFAgZmlsZXMuICBJbiBzdWNoIGEgY2FzZQogICAgICAgIDs7 IHVybC1maWxlLmVsIHNob3VsZCBwcm9iYWJseSBzZXQgc29tZXRoaW5nIGxpa2UgYSBgdXJsLXBy b2Nlc3MnCiAgICAgICAgOzsgYnVmZmVyLWxvY2FsIHZhcmlhYmxlIHNvIHdlIGNhbiBmaW5kIHRo ZSBleGFjdCBwcm9jZXNzIHRoYXQgd2UKICAgICAgICA7OyBzaG91bGQgYmUgd2FpdGluZyBmb3Iu ICBJbiB0aGUgbWVhbiB0aW1lLCB3ZSdsbCBqdXN0IHdhaXQgZm9yIGFueQogICAgICAgIDs7IHBy b2Nlc3Mgb3V0cHV0LgogICAgICAgICh3aGlsZSAoYW5kIChub3QgcmV0cmlldmFsLWRvbmUpCiAg ICAgICAgICAgICAgICAgICAgKG5vdCBhYm9ydC1oYW5nKQogICAgICAgICAgICAgICAgICAgIChv ciAobm90IHRpbWVvdXQpCiAgICAgICAgICAgICAgICAgICAgICAgIChub3QgKHNldHEgdGltZWQt b3V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRpbWUtbGVzcy1wIHRpbWVv dXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRpbWUt c2luY2Ugc3RhcnQtdGltZSkpKSkpKQogICAgICAgICAgKHVybC1kZWJ1ZyAncmV0cmlldmFsCiAg ICAgICAgICAgICAgICAgICAgICJTcGlubmluZyBpbiB1cmwtcmV0cmlldmUtc3luY2hyb25vdXNs eTogJVMgKCVTKSIKICAgICAgICAgICAgICAgICAgICAgcmV0cmlldmFsLWRvbmUgYXN5bmNoLWJ1 ZmZlcikKICAgICAgICAgIChpZiAoYnVmZmVyLWxvY2FsLXZhbHVlICd1cmwtcmVkaXJlY3QtYnVm ZmVyIGFzeW5jaC1idWZmZXIpCiAgICAgICAgICAgICAgKHNldHEgcHJvYyAoZ2V0LWJ1ZmZlci1w cm9jZXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNldHEgYXN5bmNoLWJ1ZmZlcgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChidWZmZXItbG9jYWwtdmFsdWUgJ3VybC1yZWRp cmVjdC1idWZmZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFzeW5jaC1idWZmZXIpKSkpCiAgICAgICAgICAgIChpZiAoYW5kIHByb2MgKG1lbXEg KHByb2Nlc3Mtc3RhdHVzIHByb2MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhj bG9zZWQgZXhpdCBzaWduYWwgZmFpbGVkKSkKICAgICAgICAgICAgICAgICAgICAgOzsgTWFrZSBz dXJlIGFub3RoZXIgcHJvY2VzcyBoYXNuJ3QgYmVlbiBzdGFydGVkLgogICAgICAgICAgICAgICAg ICAgICAoZXEgcHJvYyAob3IgKGdldC1idWZmZXItcHJvY2VzcyBhc3luY2gtYnVmZmVyKSBwcm9j KSkpCiAgICAgICAgICAgICAgICA7OyBGSVhNRTogSXQncyBub3QgY2xlYXIgd2hldGhlciB1cmwt cmV0cmlldmUncyBjYWxsYmFjayBpcwogICAgICAgICAgICAgICAgOzsgZ3VhcmFudGVlZCB0byBi ZSBjYWxsZWQgb3Igbm90LiAgSXQgc2VlbXMgdGhhdCB1cmwtaHR0cAogICAgICAgICAgICAgICAg OzsgZGVjaWRlcyBzb21ldGltZXMgY29uc2Npb3VzbHkgbm90IHRvIGNhbGwgaXQsIHNvIGl0J3Mg bm90CiAgICAgICAgICAgICAgICA7OyBjbGVhciB0aGF0IGl0J3MgYSBidWcsIGJ1dCBldmVuIHRo ZW4gd2UgbmVlZCB0byBkZWNpZGUgaG93CiAgICAgICAgICAgICAgICA7OyB1cmwtaHR0cCBjYW4g dGhlbiB3YXJuIHVzIHRoYXQgdGhlIGRvd25sb2FkIGhhcyBjb21wbGV0ZWQuCiAgICAgICAgICAg ICAgICA7OyBJbiB0aGUgbWVhbiB0aW1lLCB3ZSB1c2UgdGhpcyBoZXJlIHdvcmthcm91bmQuCiAg ICAgICAgICAgICAgICA7OyBYWFg6IFRoZSBjYWxsYmFjayBtdXN0IGFsd2F5cyBiZSBjYWxsZWQu ICBBbnkKICAgICAgICAgICAgICAgIDs7IGV4Y2VwdGlvbiBpcyBhIGJ1ZyB0aGF0IHNob3VsZCBi ZSBmaXhlZCwgbm90IHdvcmtlZAogICAgICAgICAgICAgICAgOzsgYXJvdW5kLgogICAgICAgICAg ICAgICAgKHByb2duIDs7IENhbGwgZGVsZXRlLXByb2Nlc3Mgc28gd2UgcnVuIGFueSBzZW50aW5l bCBub3cuCiAgICAgICAgICAgICAgICAgIChkZWxldGUtcHJvY2VzcyBwcm9jKQogICAgICAgICAg ICAgICAgICAoc2V0cSByZXRyaWV2YWwtZG9uZSB0KSkpCiAgICAgICAgICAgIDs7IFdlIHVzZWQg dG8gdXNlIGBzaXQtZm9yJyBoZXJlLCBidXQgaW4gc29tZSBjYXNlcyBpdCB3b3VsZG4ndAogICAg ICAgICAgICA7OyB3b3JrIGJlY2F1c2UgYXBwYXJlbnRseSBwZW5kaW5nIGtleWJvYXJkIGlucHV0 IHdvdWxkIGFsd2F5cwogICAgICAgICAgICA7OyBpbnRlcnJ1cHQgaXQgYmVmb3JlIGl0IGdvdCBh IGNoYW5jZSB0byBoYW5kbGUgcHJvY2VzcyBpbnB1dC4KICAgICAgICAgICAgOzsgYHNsZWVwLWZv cicgd2FzIHRyaWVkIGJ1dCBpdCBsZWFkIHRvIG90aGVyIGZvcm1zIG9mCiAgICAgICAgICAgIDs7 IGhhbmdpbmcuICAtLVN0ZWYKICAgICAgICAgICAgKGlmIChpbnB1dC1wZW5kaW5nLXApCiAgICAg ICAgICAgICAgICAocHJvZ24KICAgICAgICAgICAgICAgICAgKHNldHEgY291bnRlciAoMSsgY291 bnRlcikpCiAgICAgICAgICAgICAgICAgIChpZiAoPiBjb3VudGVyIDIwKQogICAgICAgICAgICAg ICAgICAgICAgKHNldHEgYWJvcnQtaGFuZyB0KSkpKQogICAgICAgICAgICA7OyBhY2NlcHQtcHJv Y2Vzcy1vdXRwdXQgaGFuZ3Mgd2l0aG91dCB3aGlsZS1uby1pbnB1dDsgaW5wdXQgaGFzCiAgICAg ICAgICAgIDs7IG5vd2hlcmUgdG8gZ28uIFNvIGF2b2lkIGl0LgogICAgICAgICAgICAodW5sZXNz IChvcgogICAgICAgICAgICAgICAgICAgICAod2hpbGUtbm8taW5wdXQKICAgICAgICAgICAgICAg ICAgICAgICAod2l0aC1sb2NhbC1xdWl0CiAgICAgICAgICAgICAgICAgICAgICAgICAoYWNjZXB0 LXByb2Nlc3Mtb3V0cHV0IHByb2MgMC4xKSkpCiAgICAgICAgICAgICAgICAgICAgIChudWxsIHBy b2MpKQogICAgICAgICAgICAgIDs7IGFjY2VwdC1wcm9jZXNzLW91dHB1dCByZXR1cm5lZCBuaWws IG1heWJlIGJlY2F1c2UgdGhlIHByb2Nlc3MKICAgICAgICAgICAgICA7OyBleGl0ZWQgKGFuZCBt YXkgaGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGggYW5vdGhlcikuICBJZiB3ZSBnb3QKICAgICAgICAg ICAgICA7OyBhIHF1aXQsIGp1c3Qgc3RvcC4KICAgICAgICAgICAgICAod2hlbiBxdWl0LWZsYWcK ICAgICAgICAgICAgICAgIChkZWxldGUtcHJvY2VzcyBwcm9jKSkKICAgICAgICAgICAgICAoc2V0 cSBwcm9jIChhbmQgKG5vdCBxdWl0LWZsYWcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChnZXQtYnVmZmVyLXByb2Nlc3MgYXN5bmNoLWJ1ZmZlcikpKSkpKQogICAgICAgIDs7IE9uIHRp bWVvdXRzLCBtYWtlIHN1cmUgd2Uga2lsbCBhbnkgcGVuZGluZyBwcm9jZXNzZXMuCiAgICAgICAg OzsgVGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgaWYgd2UgaGFkIGEgcmVkaXJlY3QuCiAgICAg ICAgKHdoZW4gdGltZWQtb3V0CiAgICAgICAgICAod2hlbiAocHJvY2Vzcy1saXZlLXAgcHJvYykK ICAgICAgICAgICAgKGRlbGV0ZS1wcm9jZXNzIHByb2MpKQogICAgICAgICAgKHdoZW4tbGV0ICgo YXByb2MgKGdldC1idWZmZXItcHJvY2VzcyBhc3luY2gtYnVmZmVyKSkpCiAgICAgICAgICAgICh3 aGVuIChwcm9jZXNzLWxpdmUtcCBhcHJvYykKICAgICAgICAgICAgICAoZGVsZXRlLXByb2Nlc3Mg YXByb2MpKSkpKSkKICAgIGFzeW5jaC1idWZmZXIpKQ== --0000000000009ae84405c2cb6681--