From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steve Sprang Subject: Re: [PATCH] substitute: Improve readability of substitute-related output. Date: Tue, 15 Sep 2015 22:00:06 -0700 Message-ID: References: <87si6gdrc0.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001a11367cca10659e051fd62c57 Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:46637) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zc4pG-0008Pi-T0 for guix-devel@gnu.org; Wed, 16 Sep 2015 01:00:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zc4pE-0006uK-Hz for guix-devel@gnu.org; Wed, 16 Sep 2015 01:00:10 -0400 In-Reply-To: <87si6gdrc0.fsf@gnu.org> List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: =?UTF-8?Q?Ludovic_Court=C3=A8s?= Cc: guix-devel@gnu.org --001a11367cca10659e051fd62c57 Content-Type: multipart/alternative; boundary=001a11367cca106596051fd62c55 --001a11367cca106596051fd62c55 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Thanks for the feedback! Here's an updated patch. Let me know if I missed anything. I agree that we can drop hours from the elapsed time (or adaptively add them if needed). I will send a fix for that in a subsequent patch. On Tue, Sep 15, 2015 at 1:22 AM, Ludovic Court=C3=A8s wrote: > Steve Sprang skribis: > > > I added newlines to split up output and visually separate multiple > > substitutions. Since the download size is unknown, we can't use a > progress > > bar, but I made the output more consistent with the progress bar > behavior. > > I also shortened the hash after it's been repeated in full twice (once > for > > the store and once for the download URL). > > Nice. > > > Patched behavior: > > > > Found valid signature for > > /gnu/store/sin6c3n1440f8kza0k4hdms38fbb4dv0-boost-1.58.0 > > From > http://hydra.gnu.org/nar/sin6c3n1440f8kza0k4hdms38fbb4dv0-boost-1.58.0 > > Downloading sin6c3=E2=80=A6boost-1.58.0 (110.6MiB installed)... > > sin6c3=E2=80=A6boost-1.58.0 911KiB/s 00:00:11 | 9= .4MiB > > transferred > > Looks good to me. > > Regarding elapsed time, I wonder if we should get rid of hours=E2=80=93i.= e., > print =E2=80=9C00:11=E2=80=9D in this case. Most of the time downloads l= ast less than > an hour, and when it lasts more, it=E2=80=99s OK to either print 100:11 o= r > 01:03:11. WDYT? > > > From 95936bf25394d2985f9331cb8fa08d5b30cb64a5 Mon Sep 17 00:00:00 2001 > > From: Steve Sprang > > Date: Mon, 14 Sep 2015 22:31:11 -0700 > > Subject: [PATCH] substitute: Improve readability of substitute-related > output. > > > > * guix/build/download.scm (flexible-space, truncated-url): New > procedures. > > (progress-proc): Generate a better indeterminate progress string. > > (nearest-exact-integer, seconds->string, byte-count->string): Move > to... > > * guix/utils.scm: ...here. > > * guix/store.scm (truncated-store-path): New procedure. > > * guix/scripts/substitute.scm (assert-valid-narinfo): Add newlines to > output. > > (process-substitution): Use byte-count->string and > truncated-store-path. > > In general, it is best to make a separate patch that simply moves > procedures from one file to another. > > However, most of the time, (guix build =E2=80=A6) modules must not use (g= uix =E2=80=A6) > modules (info "(guix) G-Expressions"). This is the case here. > > So what I would suggest is to export those helper procedures from (guix > build download) itself, as is done for =E2=80=98progress-proc=E2=80=99 et= al. > > > +(define* (flexible-space left right #:optional (columns 80)) > > + "Return a string of spaces which can be used to separate LEFT and > RIGHT so > > +that RIGHT is justified to a width of COLUMNS." > > What about this slightly more idiomatic procedure instead: > > (define (string-pad-middle left right len) > ;; + docstring > (string-append left > (string-pad right (max 0 (- len (string-length > left)))))) > > > +(define (truncated-url url) > > + "Return a friendlier version of URL for display." > > + (let ((store-path (string-append (%store-prefix) "/" (basename url))= )) > > + ;; take advantage of the implementation for store paths > > + (truncated-store-path store-path))) > > What about calling it =E2=80=98store-url-abbreviation=E2=80=99, to convey= that it=E2=80=99s > similar in spirit to =E2=80=98uri-abbreviation=E2=80=99, but specialized? > > > (define* (progress-proc file size #:optional (log-port > (current-output-port))) > > "Return a procedure to show the progress of FILE's download, which i= s > SIZE > > bytes long. The returned procedure is suitable for use as an argument > to > > @@ -130,24 +115,26 @@ bytes long. The returned procedure is suitable > for use as an argument to > > (seconds->string elapsed) > > (progress-bar %) %)) > > ;; TODO: Make this adapt to the actual terminal > width. > > - (cols 80) > > - (num-spaces (max 1 (- cols (+ (string-length left= ) > > - (string-length > right))))) > > - (gap (make-string num-spaces #\space))) > > + (gap (flexible-space left right))) > > (format log-port "~a~a~a" left gap right) > > This would become: > > (display (string-pad-middle left right cols) log-port) > > Could you send an updated patch? > > Thank you! > > Ludo=E2=80=99. > --001a11367cca106596051fd62c55 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Thanks for the feedback! Here's an updated patch.= Let me know if I missed anything.

I agree that we can drop hours from the elapsed time (or adaptively add=20 them if needed). I will send a fix for that in a subsequent patch.

On Tue, Sep 15, 2015= at 1:22 AM, Ludovic Court=C3=A8s <ludo@gnu.org> wrote:
Steve Sprang <steve.sprang@gmail.com> skribis:

> I added newlines to split up output and visually separate multiple
> substitutions. Since the download size is unknown, we can't use a = progress
> bar, but I made the output more consistent with the progress bar behav= ior.
> I also shortened the hash after it's been repeated in full twice (= once for
> the store and once for the download URL).

Nice.

> Patched behavior:
>
> Found valid signature for
> /gnu/store/sin6c3n1440f8kza0k4hdms38fbb4dv0-boost-1.58.0
> From http://hydra.gnu.org= /nar/sin6c3n1440f8kza0k4hdms38fbb4dv0-boost-1.58.0
> Downloading sin6c3=E2=80=A6boost-1.58.0 (110.6MiB installed)...
>=C2=A0 sin6c3=E2=80=A6boost-1.58.0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 911KiB/s 00:00:11 | 9.4MiB
> transferred

Looks good to me.

Regarding elapsed time, I wonder if we should get rid of hours=E2=80=93i.e.= ,
print =E2=80=9C00:11=E2=80=9D in this case.=C2=A0 Most of the time download= s last less than
an hour, and when it lasts more, it=E2=80=99s OK to either print 100:11 or<= br> 01:03:11.=C2=A0 WDYT?

> From 95936bf25394d2985f9331cb8fa08d5b30cb64a5 Mon Sep 17 00:00:00 2001=
> From: Steve Sprang <scs@stev= esprang.com>
> Date: Mon, 14 Sep 2015 22:31:11 -0700
> Subject: [PATCH] substitute: Improve readability of substitute-related= output.
>
> * guix/build/download.scm (flexible-space, truncated-url): New procedu= res.
>=C2=A0 =C2=A0(progress-proc): Generate a better indeterminate progress = string.
>=C2=A0 =C2=A0(nearest-exact-integer, seconds->string, byte-count->= ;string): Move to...
> * guix/utils.scm: ...here.
> * guix/store.scm (truncated-store-path): New procedure.
> * guix/scripts/substitute.scm (assert-valid-narinfo): Add newlines to = output.
>=C2=A0 =C2=A0(process-substitution): Use byte-count->string and trun= cated-store-path.

In general, it is best to make a separate patch that simply moves
procedures from one file to another.

However, most of the time, (guix build =E2=80=A6) modules must not use (gui= x =E2=80=A6)
modules (info "(guix) G-Expressions").=C2=A0 This is the case her= e.

So what I would suggest is to export those helper procedures from (guix
build download) itself, as is done for =E2=80=98progress-proc=E2=80=99 et a= l.

> +(define* (flexible-space left right #:optional (columns 80))
> +=C2=A0 "Return a string of spaces which can be used to separate = LEFT and RIGHT so
> +that RIGHT is justified to a width of COLUMNS."

What about this slightly more idiomatic procedure instead:

=C2=A0 (define (string-pad-middle left right len)
=C2=A0 =C2=A0 ;; + docstring
=C2=A0 =C2=A0 (string-append left
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(strin= g-pad right (max 0 (- len (string-length left))))))

> +(define (truncated-url url)
> +=C2=A0 "Return a friendlier version of URL for display." > +=C2=A0 (let ((store-path (string-append (%store-prefix) "/"= (basename url))))
> +=C2=A0 =C2=A0 ;; take advantage of the implementation for store paths=
> +=C2=A0 =C2=A0 (truncated-store-path store-path)))

What about calling it =E2=80=98store-url-abbreviation=E2=80=99, to convey t= hat it=E2=80=99s
similar in spirit to =E2=80=98uri-abbreviation=E2=80=99, but specialized?
>=C2=A0 (define* (progress-proc file size #:optional (log-port (current-= output-port)))
>=C2=A0 =C2=A0 "Return a procedure to show the progress of FILE'= ;s download, which is SIZE
>=C2=A0 bytes long.=C2=A0 The returned procedure is suitable for use as = an argument to
> @@ -130,24 +115,26 @@ bytes long.=C2=A0 The returned procedure is suit= able for use as an argument to
>=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 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0(seconds->string elapsed)
>=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 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0(progress-bar %) %))
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0;; TODO: Make this adapt to the actual terminal width.
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0(cols=C2=A0 =C2=A0 =C2=A0 =C2=A080)
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0(num-spaces (max 1 (- cols (+ (string-length left)
> -=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 =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(string-length right)))))
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0(gap=C2=A0 =C2=A0 =C2=A0 =C2=A0 (make-string num-spaces #\space))) > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0(gap=C2=A0 =C2=A0 =C2=A0 =C2=A0 (flexible-space left right)))
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (format = log-port "~a~a~a" left gap right)

This would become:

=C2=A0 (display (string-pad-middle left right cols) log-port)

Could you send an updated patch?

Thank you!

Ludo=E2=80=99.

--001a11367cca106596051fd62c55-- --001a11367cca10659e051fd62c57 Content-Type: text/x-patch; charset=UTF-8; name="prettier-substitute-2.patch" Content-Disposition: attachment; filename="prettier-substitute-2.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iembijqz0 RnJvbSBjOGEwNGFjNzFlMzQ3ZGU0OWEyNzk1YzRlZjUwM2E1YWJhYzJmODgyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGV2ZSBTcHJhbmcgPHNjc0BzdGV2ZXNwcmFuZy5jb20+CkRh dGU6IE1vbiwgMTQgU2VwIDIwMTUgMjI6MzE6MTEgLTA3MDAKU3ViamVjdDogW1BBVENIXSBzdWJz dGl0dXRlOiBJbXByb3ZlIHJlYWRhYmlsaXR5IG9mIHN1YnN0aXR1dGUtcmVsYXRlZCBvdXRwdXQu CgoqIGd1aXgvYnVpbGQvZG93bmxvYWQuc2NtCiAgKHN0cmluZy1wYWQtbWlkZGxlLCBzdG9yZS11 cmwtYWJicmV2aWF0aW9uKTogTmV3IHByb2NlZHVyZXMuCiAgKHByb2dyZXNzLXByb2MpOiBHZW5l cmF0ZSBhIGJldHRlciBpbmRldGVybWluYXRlIHByb2dyZXNzIHN0cmluZy4KKiBndWl4L3N0b3Jl LnNjbSAodHJ1bmNhdGVkLXN0b3JlLXBhdGgpOiBOZXcgcHJvY2VkdXJlLgoqIGd1aXgvc2NyaXB0 cy9zdWJzdGl0dXRlLnNjbSAoYXNzZXJ0LXZhbGlkLW5hcmluZm8pOiBBZGQgbmV3bGluZXMgdG8g b3V0cHV0LgogIChwcm9jZXNzLXN1YnN0aXR1dGlvbik6IFVzZSBieXRlLWNvdW50LT5zdHJpbmcg YW5kIHRydW5jYXRlZC1zdG9yZS1wYXRoLgotLS0KIGd1aXgvYnVpbGQvZG93bmxvYWQuc2NtICAg ICB8IDQyICsrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQogZ3VpeC9z Y3JpcHRzL3N1YnN0aXR1dGUuc2NtIHwgMTMgKysrKysrKy0tLS0tLQogZ3VpeC9zdG9yZS5zY20g ICAgICAgICAgICAgIHwgMTEgKysrKysrKysrKy0KIDMgZmlsZXMgY2hhbmdlZCwgNDUgaW5zZXJ0 aW9ucygrKSwgMjEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ3VpeC9idWlsZC9kb3dubG9h ZC5zY20gYi9ndWl4L2J1aWxkL2Rvd25sb2FkLnNjbQppbmRleCAzMWQ2MGZiLi4wMzU4MTM2IDEw MDY0NAotLS0gYS9ndWl4L2J1aWxkL2Rvd25sb2FkLnNjbQorKysgYi9ndWl4L2J1aWxkL2Rvd25s b2FkLnNjbQpAQCAtMjQsNiArMjQsNyBAQAogICAjOnVzZS1tb2R1bGUgKHdlYiByZXNwb25zZSkK ICAgIzp1c2UtbW9kdWxlIChndWl4IGZ0cC1jbGllbnQpCiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBi dWlsZCB1dGlscykKKyAgIzp1c2UtbW9kdWxlIChndWl4IHN0b3JlKQogICAjOnVzZS1tb2R1bGUg KHJucnMgaW8gcG9ydHMpCiAgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTEpCiAgICM6dXNlLW1v ZHVsZSAoc3JmaSBzcmZpLTExKQpAQCAtMzYsNiArMzcsNyBAQAogICAgICAgICAgICAgcmVzb2x2 ZS11cmktcmVmZXJlbmNlCiAgICAgICAgICAgICBtYXliZS1leHBhbmQtbWlycm9ycwogICAgICAg ICAgICAgdXJsLWZldGNoCisgICAgICAgICAgICBieXRlLWNvdW50LT5zdHJpbmcKICAgICAgICAg ICAgIHByb2dyZXNzLXByb2MKICAgICAgICAgICAgIHVyaS1hYmJyZXZpYXRpb24pKQogCkBAIC05 Niw2ICs5OCwxOCBAQCB3aWR0aCBvZiB0aGUgYmFyIGlzIEJBUi1XSURUSC4iCiAgICAgICAgICAg ICAobWFrZS1zdHJpbmcgZmlsbGVkICNcIykKICAgICAgICAgICAgIChtYWtlLXN0cmluZyBlbXB0 eSAjXHNwYWNlKSkpKQogCisoZGVmaW5lIChzdHJpbmctcGFkLW1pZGRsZSBsZWZ0IHJpZ2h0IGxl bikKKyAgICAiQ29tYmluZSBMRUZUIGFuZCBSSUdIVCB3aXRoIGVub3VnaCBwYWRkaW5nIGluIHRo ZSBtaWRkbGUgc28gdGhhdCB0aGUKK3Jlc3VsdGluZyBzdHJpbmcgaGFzIGxlbmd0aCBhdCBsZWFz dCBMRU4uICBUaGlzIHJpZ2h0IGp1c3RpZmllcyBSSUdIVC4iCisgICAgKHN0cmluZy1hcHBlbmQg bGVmdAorICAgICAgICAgICAgICAgICAgIChzdHJpbmctcGFkIHJpZ2h0IChtYXggMCAoLSBsZW4g KHN0cmluZy1sZW5ndGggbGVmdCkpKSkpKQorCisoZGVmaW5lIChzdG9yZS11cmwtYWJicmV2aWF0 aW9uIHVybCkKKyAgIlJldHVybiBhIGZyaWVuZGxpZXIgdmVyc2lvbiBvZiBVUkwgZm9yIGRpc3Bs YXkuIgorICAobGV0ICgoc3RvcmUtcGF0aCAoc3RyaW5nLWFwcGVuZCAoJXN0b3JlLXByZWZpeCkg Ii8iIChiYXNlbmFtZSB1cmwpKSkpCisgICAgOzsgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGltcGxl bWVudGF0aW9uIGZvciBzdG9yZSBwYXRocworICAgICh0cnVuY2F0ZWQtc3RvcmUtcGF0aCBzdG9y ZS1wYXRoKSkpCisKIChkZWZpbmUqIChwcm9ncmVzcy1wcm9jIGZpbGUgc2l6ZSAjOm9wdGlvbmFs IChsb2ctcG9ydCAoY3VycmVudC1vdXRwdXQtcG9ydCkpKQogICAiUmV0dXJuIGEgcHJvY2VkdXJl IHRvIHNob3cgdGhlIHByb2dyZXNzIG9mIEZJTEUncyBkb3dubG9hZCwgd2hpY2ggaXMgU0laRQog Ynl0ZXMgbG9uZy4gIFRoZSByZXR1cm5lZCBwcm9jZWR1cmUgaXMgc3VpdGFibGUgZm9yIHVzZSBh cyBhbiBhcmd1bWVudCB0bwpAQCAtMTI4LDI2ICsxNDIsMjYgQEAgYnl0ZXMgbG9uZy4gIFRoZSBy ZXR1cm5lZCBwcm9jZWR1cmUgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyBhbiBhcmd1bWVudCB0bwog ICAgICAgICAgICAgICAgICAgICAgKHJpZ2h0ICAgICAgKGZvcm1hdCAjZiAifmEvcyB+YSB+YX42 LDFmJSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGUtY291 bnQtPnN0cmluZyB0aHJvdWdocHV0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoc2Vjb25kcy0+c3RyaW5nIGVsYXBzZWQpCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChwcm9ncmVzcy1iYXIgJSkgJSkpCi0gICAgICAgICAgICAgICAg ICAgICA7OyBUT0RPOiBNYWtlIHRoaXMgYWRhcHQgdG8gdGhlIGFjdHVhbCB0ZXJtaW5hbCB3aWR0 aC4KLSAgICAgICAgICAgICAgICAgICAgIChjb2xzICAgICAgIDgwKQotICAgICAgICAgICAgICAg ICAgICAgKG51bS1zcGFjZXMgKG1heCAxICgtIGNvbHMgKCsgKHN0cmluZy1sZW5ndGggbGVmdCkK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJp bmctbGVuZ3RoIHJpZ2h0KSkpKSkKLSAgICAgICAgICAgICAgICAgICAgIChnYXAgICAgICAgICht YWtlLXN0cmluZyBudW0tc3BhY2VzICNcc3BhY2UpKSkKLSAgICAgICAgICAgICAgICAoZm9ybWF0 IGxvZy1wb3J0ICJ+YX5hfmEiIGxlZnQgZ2FwIHJpZ2h0KQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAocHJvZ3Jlc3MtYmFyICUpICUpKSkKKyAgICAgICAgICAgICAg ICA7OyBUT0RPOiBNYWtlIHRoaXMgYWRhcHQgdG8gdGhlIGFjdHVhbCB0ZXJtaW5hbCB3aWR0aC4K KyAgICAgICAgICAgICAgICAoZGlzcGxheSAoc3RyaW5nLXBhZC1taWRkbGUgbGVmdCByaWdodCA4 MCkgbG9nLXBvcnQpCiAgICAgICAgICAgICAgICAgKGRpc3BsYXkgI1xjciBsb2ctcG9ydCkKICAg ICAgICAgICAgICAgICAoZmx1c2gtb3V0cHV0LXBvcnQgbG9nLXBvcnQpCiAgICAgICAgICAgICAg ICAgKGNvbnQpKSkpCiAgICAgICAgICAgKGxhbWJkYSAodHJhbnNmZXJyZWQgY29udCkKICAgICAg ICAgICAgICh3aXRoLWVsYXBzZWQtdGltZSBlbGFwc2VkCi0gICAgICAgICAgICAgIChsZXQgKCh0 aHJvdWdocHV0IChpZiBlbGFwc2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoLyB0cmFuc2ZlcnJlZCBlbGFwc2VkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMCkpKQorICAgICAgICAgICAgICAobGV0KiAoKHRocm91Z2hwdXQgKGlmIGVsYXBzZWQK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLyB0cmFuc2ZlcnJlZCBlbGFw c2VkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKQorICAgICAgICAg ICAgICAgICAgICAgKGxlZnQgICAgICAgKGZvcm1hdCAjZiAiIH5hIgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RvcmUtdXJsLWFiYnJldmlhdGlvbiBmaWxlKSkp CisgICAgICAgICAgICAgICAgICAgICAocmlnaHQgICAgICAoZm9ybWF0ICNmICJ+YS9zIH5hIHwg fmEgdHJhbnNmZXJyZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChieXRlLWNvdW50LT5zdHJpbmcgdGhyb3VnaHB1dCkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHNlY29uZHMtPnN0cmluZyBlbGFwc2VkKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnl0ZS1jb3VudC0+c3RyaW5nIHRyYW5zZmVy cmVkKSkpKQorICAgICAgICAgICAgICAgIDs7IFRPRE86IE1ha2UgdGhpcyBhZGFwdCB0byB0aGUg YWN0dWFsIHRlcm1pbmFsIHdpZHRoLgorICAgICAgICAgICAgICAgIChkaXNwbGF5IChzdHJpbmct cGFkLW1pZGRsZSBsZWZ0IHJpZ2h0IDgwKSBsb2ctcG9ydCkKICAgICAgICAgICAgICAgICAoZGlz cGxheSAjXGNyIGxvZy1wb3J0KQotICAgICAgICAgICAgICAgIChmb3JtYXQgbG9nLXBvcnQgIn5h XHR+YSB0cmFuc2ZlcnJlZCAofmEvcykiCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlCi0g ICAgICAgICAgICAgICAgICAgICAgICAoYnl0ZS1jb3VudC0+c3RyaW5nIHRyYW5zZmVycmVkKQot ICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGUtY291bnQtPnN0cmluZyB0aHJvdWdocHV0KSkK ICAgICAgICAgICAgICAgICAoZmx1c2gtb3V0cHV0LXBvcnQgbG9nLXBvcnQpCiAgICAgICAgICAg ICAgICAgKGNvbnQpKSkpKSkpKQogCmRpZmYgLS1naXQgYS9ndWl4L3NjcmlwdHMvc3Vic3RpdHV0 ZS5zY20gYi9ndWl4L3NjcmlwdHMvc3Vic3RpdHV0ZS5zY20KaW5kZXggZTkwOGJjOS4uOWM2ZTA0 NyAxMDA3NTUKLS0tIGEvZ3VpeC9zY3JpcHRzL3N1YnN0aXR1dGUuc2NtCisrKyBiL2d1aXgvc2Ny aXB0cy9zdWJzdGl0dXRlLnNjbQpAQCAtMjksOSArMjksMTAgQEAKICAgIzp1c2UtbW9kdWxlIChn dWl4IGJhc2U2NCkKICAgIzp1c2UtbW9kdWxlIChndWl4IHBrLWNyeXB0bykKICAgIzp1c2UtbW9k dWxlIChndWl4IHBraSkKKyAgIzp1c2UtbW9kdWxlIChndWl4IHN0b3JlKQogICAjOnVzZS1tb2R1 bGUgKChndWl4IGJ1aWxkIHV0aWxzKSAjOnNlbGVjdCAobWtkaXItcCBkdW1wLXBvcnQpKQogICAj OnVzZS1tb2R1bGUgKChndWl4IGJ1aWxkIGRvd25sb2FkKQotICAgICAgICAgICAgICAgICM6c2Vs ZWN0IChwcm9ncmVzcy1wcm9jIHVyaS1hYmJyZXZpYXRpb24pKQorICAgICAgICAgICAgICAgICM6 c2VsZWN0IChwcm9ncmVzcy1wcm9jIHVyaS1hYmJyZXZpYXRpb24gYnl0ZS1jb3VudC0+c3RyaW5n KSkKICAgIzp1c2UtbW9kdWxlIChpY2UtOSByZGVsaW0pCiAgICM6dXNlLW1vZHVsZSAoaWNlLTkg cmVnZXgpCiAgICM6dXNlLW1vZHVsZSAoaWNlLTkgbWF0Y2gpCkBAIC0zMzcsOCArMzM4LDkgQEAg b3IgaXMgc2lnbmVkIGJ5IGFuIHVuYXV0aG9yaXplZCBrZXkuIgogICAgICAgICAgICh1bmxlc3Mg JWFsbG93LXVuYXV0aGVudGljYXRlZC1zdWJzdGl0dXRlcz8KICAgICAgICAgICAgIChhc3NlcnQt dmFsaWQtc2lnbmF0dXJlIG5hcmluZm8gc2lnbmF0dXJlIGhhc2ggYWNsKQogICAgICAgICAgICAg KHdoZW4gdmVyYm9zZT8KKyAgICAgICAgICAgICAgOzsgdmlzdWFsbHkgc2VwYXJhdGUgc3Vic3Rp dHV0aW9ucyB3aXRoIGEgbmV3bGluZQogICAgICAgICAgICAgICAoZm9ybWF0IChjdXJyZW50LWVy cm9yLXBvcnQpCi0gICAgICAgICAgICAgICAgICAgICAgImZvdW5kIHZhbGlkIHNpZ25hdHVyZSBm b3IgJ35hJywgZnJvbSAnfmEnfiUiCisgICAgICAgICAgICAgICAgICAgICAgIn4lRm91bmQgdmFs aWQgc2lnbmF0dXJlIGZvciB+YX4lRnJvbSB+YX4lIgogICAgICAgICAgICAgICAgICAgICAgIChu YXJpbmZvLXBhdGggbmFyaW5mbykKICAgICAgICAgICAgICAgICAgICAgICAodXJpLT5zdHJpbmcg KG5hcmluZm8tdXJpIG5hcmluZm8pKSkpKQogICAgICAgICAgIG5hcmluZm8pKSkpCkBAIC03NTMs MTMgKzc1NSwxMiBAQCBERVNUSU5BVElPTiBhcyBhIG5hciBmaWxlLiAgVmVyaWZ5IHRoZSBzdWJz dGl0dXRlIGFnYWluc3QgQUNMLiIKICAgICA7OyBUZWxsIHRoZSBkYWVtb24gd2hhdCB0aGUgZXhw ZWN0ZWQgaGFzaCBvZiB0aGUgTmFyIGl0c2VsZiBpcy4KICAgICAoZm9ybWF0ICN0ICJ+YX4lIiAo bmFyaW5mby1oYXNoIG5hcmluZm8pKQogCi0gICAgKGZvcm1hdCAoY3VycmVudC1lcnJvci1wb3J0 KSAiZG93bmxvYWRpbmcgYH5hJ346W34qfjsgKH4sMWYgTWlCIGluc3RhbGxlZCl+XS4uLn4lIgot ICAgICAgICAgICAgc3RvcmUtaXRlbQotCisgICAgKGZvcm1hdCAoY3VycmVudC1lcnJvci1wb3J0 KSAiRG93bmxvYWRpbmcgfmF+Olt+Kn47ICh+YSBpbnN0YWxsZWQpfl0uLi5+JSIKKyAgICAgICAg ICAgICh0cnVuY2F0ZWQtc3RvcmUtcGF0aCBzdG9yZS1pdGVtKQogICAgICAgICAgICAgOzsgVXNl IHRoZSBOYXIgc2l6ZSBhcyBhbiBlc3RpbWF0ZSBvZiB0aGUgaW5zdGFsbGVkIHNpemUuCiAgICAg ICAgICAgICAobmFyaW5mby1zaXplIG5hcmluZm8pCiAgICAgICAgICAgICAoYW5kPT4gKG5hcmlu Zm8tc2l6ZSBuYXJpbmZvKQotICAgICAgICAgICAgICAgICAgIChjdXRlIC8gPD4gKGV4cHQgMi4g MjApKSkpCisgICAgICAgICAgICAgICAgICAgKGN1dGUgYnl0ZS1jb3VudC0+c3RyaW5nIDw+KSkp CiAgICAgKGxldCotdmFsdWVzICgoKHJhdyBkb3dubG9hZC1zaXplKQogICAgICAgICAgICAgICAg ICAgIDs7IE5vdGUgdGhhdCBIeWRyYSBjdXJyZW50bHkgZ2VuZXJhdGVzIE5hcnMgb24gdGhlIGZs eQogICAgICAgICAgICAgICAgICAgIDs7IGFuZCBkb2Vzbid0IHNwZWNpZnkgYSBDb250ZW50LUxl bmd0aCwgc28KZGlmZiAtLWdpdCBhL2d1aXgvc3RvcmUuc2NtIGIvZ3VpeC9zdG9yZS5zY20KaW5k ZXggMTMyYjhhMy4uYTFiNzZlMyAxMDA2NDQKLS0tIGEvZ3VpeC9zdG9yZS5zY20KKysrIGIvZ3Vp eC9zdG9yZS5zY20KQEAgLTEyNCw3ICsxMjQsOCBAQAogICAgICAgICAgICAgc3RvcmUtcGF0aC1w YWNrYWdlLW5hbWUKICAgICAgICAgICAgIHN0b3JlLXBhdGgtaGFzaC1wYXJ0CiAgICAgICAgICAg ICBkaXJlY3Qtc3RvcmUtcGF0aAotICAgICAgICAgICAgbG9nLWZpbGUpKQorICAgICAgICAgICAg bG9nLWZpbGUKKyAgICAgICAgICAgIHRydW5jYXRlZC1zdG9yZS1wYXRoKSkKIAogKGRlZmluZSAl cHJvdG9jb2wtdmVyc2lvbiAjeDEwYykKIApAQCAtMTA4OCwzICsxMDg5LDExIEBAIG11c3QgYmUg YW4gYWJzb2x1dGUgc3RvcmUgZmlsZSBuYW1lLCBvciBhIGRlcml2YXRpb24gZmlsZSBuYW1lLiIK ICAgICAgICAgICAgIDs7IFJldHVybiB0aGUgZmlyc3QgdGhhdCB3b3Jrcy4KICAgICAgICAgICAg IChhbnkgKGN1dCBsb2ctZmlsZSBzdG9yZSA8PikgZGVyaXZlcnMpKQogICAgICAgICAgICAoXyAj ZikpKSkpCisKKyhkZWZpbmUqICh0cnVuY2F0ZWQtc3RvcmUtcGF0aCBzdG9yZS1wYXRoICM6b3B0 aW9uYWwgKHByZWZpeC1sZW5ndGggNikpCisgICJSZXR1cm4gYSBmcmllbmRsaWVyIHZlcnNpb24g b2YgU1RPUkUtUEFUSCBmb3IgZGlzcGxheS4iCisgIChsZXQqICgoaGFzaC1wYXJ0ICAgIChzdG9y ZS1wYXRoLWhhc2gtcGFydCBzdG9yZS1wYXRoKSkKKyAgICAgICAgIChwYWNrYWdlLW5hbWUgKHN0 b3JlLXBhdGgtcGFja2FnZS1uYW1lIHN0b3JlLXBhdGgpKQorICAgICAgICAgKHNhZmUtbGVuZ3Ro ICAobWF4IDAgKG1pbiBwcmVmaXgtbGVuZ3RoIDI0KSkpCisgICAgICAgICAocHJlZml4ICAgICAg IChzdHJpbmctdGFrZSBoYXNoLXBhcnQgc2FmZS1sZW5ndGgpKSkKKyAgICAoc3RyaW5nLWFwcGVu ZCBwcmVmaXggIuKApiIgcGFja2FnZS1uYW1lKSkpCi0tIAoyLjUuMAoK --001a11367cca10659e051fd62c57--