From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.text.pandoc/30707 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: William Lupton Newsgroups: gmane.text.pandoc Subject: Re: Printing lua tables Date: Tue, 7 Jun 2022 16:24:28 +0100 Message-ID: References: <551a3f2a8d364717bcc569baa974573a@unibe.ch> Reply-To: pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000f06b8f05e0dd2f08" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="2636"; mail-complaints-to="usenet@ciao.gmane.io" Cc: pandoc-discuss To: John MacFarlane Original-X-From: pandoc-discuss+bncBCS4HJ6WSAHBBOO37WKAMGQEPGQFGRI-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org Tue Jun 07 17:24:46 2022 Return-path: Envelope-to: gtp-pandoc-discuss@m.gmane-mx.org Original-Received: from mail-pl1-f185.google.com ([209.85.214.185]) by ciao.gmane.io with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nyb4X-0000LX-Iz for gtp-pandoc-discuss@m.gmane-mx.org; Tue, 07 Jun 2022 17:24:45 +0200 Original-Received: by mail-pl1-f185.google.com with SMTP id i8-20020a170902c94800b0016517194819sf9468386pla.7 for ; Tue, 07 Jun 2022 08:24:45 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1654615484; cv=pass; d=google.com; s=arc-20160816; b=CZaVZDAq6x4W2apM++tLiC5DEbA5YfeApEEgpY9uPnhXd6IzFa0NbQn8u04DsXiULK rt5f/p8EZ8drm5SXUDbMkvWrPUceNpliFk4+zmo1NZgshzy9dDGkox/rO29W6TEJIEwo rfqlVUqvh1de/1lINtkv/oxifEXDYWdPPfP/szEZk+Jw54lsJohwjEVpot0OVIM71s2Y YR+ZEp/NNHM9cPleyClMOqF7LXHX3x2iA4nc0/A342Smd7n255pX6OwB1jCFYq3ePdSj iKJKI0Q6sgVUmcHdaKP9G85lApHNT3x9NVVA04OUjaZ252BtzYdtj2NvgeyReV5mf/1W 4n5g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to:cc:to:subject:message-id :date:from:in-reply-to:references:mime-version:sender:dkim-signature; bh=WkWD3JBgj2efTuGtnKVI3FO4xQjx8YLFOWX6V0awwoU=; b=R5db1+DcyEukOEzFk3XQJPDcAgGrfDvB6UNenPKz7GTHc7kApap7npi3eIYhB2tM+0 Yr1KXDfN4AmgR7QAmIcZfiz/r68DgJn64PIvIKf59KACCF0WXmNQMNAjnyrRdpt4ZMjP zddcG7nhYMwxrwrr/khDeuG3P84HcYDwN+uw7nGfQc9byk4vw/hKvIrx2Lhzm1U0t6JN bJzJPgxJuBg64SZDKiTa5fSD1OSwZn43Yp9IDuRoXG0hXN8n37hAKRXOc1blqQBXRhcw RIY1UXVF6tYbLRjSzQU1SVQ0k1JD3chd+2z0c3/6oA44ahWMYKrpQ2vjl5AOmCbhVqFq nvaA== ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@broadband-forum-org.20210112.gappssmtp.com header.s=20210112 header.b=EpZtHH0s; spf=pass (google.com: domain of wlupton-QSt+ys/nuMyEUIsrzH9SikB+6BGkLq7r@public.gmane.org designates 2607:f8b0:4864:20::b2d as permitted sender) smtp.mailfrom=wlupton-QSt+ys/nuMyEUIsrzH9SikB+6BGkLq7r@public.gmane.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20210112; h=sender:mime-version:references:in-reply-to:from:date:message-id :subject:to:cc:x-original-sender:x-original-authentication-results :reply-to:precedence:mailing-list:list-id:list-post:list-help :list-archive:list-subscribe:list-unsubscribe; bh=WkWD3JBgj2efTuGtnKVI3FO4xQjx8YLFOWX6V0awwoU=; b=qRecsbGscjY62QnavBSGlfEqrrDjIiWbBgbeLjG9GtU727sadJtXl8tiZ1JFXDPC1M uCG1H065uJELCPKuQH9SepDgrsz1uMxflvIDxThK+UivHA36U66tvBiY8JT9ZmhoLjlA gqyQuMtzm7RNPEbQkYYoHWZCvR1phqsTpF8e3CwYxOPAmGmLSIMr2VsTAzQgfi5Xvn37 Tbx3bYcVC3XtZfp29yT1Bt1LU7R7Qsogog7cHhWCFP+a8yuEQmDuj78OzFgrGqIfEFeo F8ekcjeBvPIR8/6Vr6ABVOn1FBQSHEPfWBlXsckltOUVwDKtfydBViV3Zlf6UUXVz4wF w/NQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=sender:x-gm-message-state:mime-version:references:in-reply-to:from :date:message-id:subject:to:cc:x-original-sender :x-original-authentication-results:reply-to:precedence:mailing-list :list-id:x-spam-checked-in-group:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=WkWD3JBgj2efTuGtnKVI3FO4xQjx8YLFOWX6V0awwoU=; b=APwR9ZVo6djx7SdDEvLLvyGkgugggX0FIEHblxOjUtffgk4tpHbx3ZTsyS2N9xMsNW Xb7j1cF4ukBgfh+y1HfLM0w2XueYMQBLW6l7BdNGfjQqWz5Gd0MWwhcFTudHypPd2bO6 ePJ5o7phSKtT18zHunFCIEi/HhkDsE6aRGuSt7xI0k1sFpiXJMcfqRLv2NtdKSSG615w Q2fbvbc3f5VdLgDLbENIn4a3IQEYARbCddqjMIbxmwywtGBFntsLjWaAVwkL6uRkLvRh LGavBb2lq9a067PpLDS+sk2XcgM3GefCh3JlE0gZtw6s6g1/zeBXQCmzCK2EU5CMp5uo rjsw== Original-Sender: pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org X-Gm-Message-State: AOAM533YLNqEytBnGR+2KDZ5+VX70eNSOZsIoRRrb8ZugM2Hib5tFb6q 6DI+B1LGwrflvv5z+GwCxEU= X-Google-Smtp-Source: ABdhPJx+e/mt6fabxN5RxCo+Qnse/oTeRT2BVbgvC9cXwoh34SZLpvtY0gec86uWW9geONo7JY3pqQ== X-Received: by 2002:a17:902:9684:b0:161:5b2b:6ea2 with SMTP id n4-20020a170902968400b001615b2b6ea2mr28887039plp.71.1654615484253; Tue, 07 Jun 2022 08:24:44 -0700 (PDT) X-BeenThere: pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org Original-Received: by 2002:a17:90a:5a81:b0:1dc:e81d:6bb1 with SMTP id n1-20020a17090a5a8100b001dce81d6bb1ls2213533pji.0.gmail; Tue, 07 Jun 2022 08:24:41 -0700 (PDT) X-Received: by 2002:a17:902:f68b:b0:163:f358:d4ad with SMTP id l11-20020a170902f68b00b00163f358d4admr30093767plg.23.1654615480883; Tue, 07 Jun 2022 08:24:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654615480; cv=none; d=google.com; s=arc-20160816; b=ZHy4spC/KNKTHzS9y/i9BkFZ9ldfCkZh63tCYIHJZbgRT5BJa/F3jUunsufnUJrvKk x4jOu80R69U2w2OrYYFsHFlWbdnbuWbRMwN/B4xHUyzJpoqeY5xQIc1vVIq90fFlIdOw s2HthK01GJyXkhVv586lQOkD3CEl6xLa0cM8aNXY36nu5+uyu1Yo/HiIkgmyPH23YCf8 ie4AlyifUB8LsrskRDBqn56PcObKTKhvMC0vg6nHC+aXBRk6MHKq33QlN8eXTj63TcTn TgcJpkte0I9Lm9hdd3Bwq8DqXlT3u6oSemgvByPOIVA1A1m3dkDm+I8d0oAOllV67Gwn hDuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=qq1iLoZbSGrTiGLS9IikSZsu+/80gl7FDoIQ8wiMFzk=; b=DLzAmPMDuCRZYd8XU/D+lqonRB9x/WVO+2LlngYx2NxRs/DO7fwWLSkAwxCLwH4dCH 85Ef9Ad2M66h2hGRyLxwauZI/73J9yEISIEWbjRLpndVFU5eKOaBysgn5KEAjkatNkbr VHL99+SZY+zizpjkIDc8MhbVw2p48s9c3fzyhB4XX3CCqUefjkE0ezuHmTeuNT3ZiM45 FP+f1T3e8dKTrwzOt5CBUfRIwVdvGaQPwr+3oFPNn2NKLuueHqYraMAX6X7RZ/1nKDyo qfhkRmD6cXS5AhcbeQ8L2nHpGv7xVhPez4JnCPbIqwBeTq67zv/3lT9QFvKGmBIbIabj GhbA== ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@broadband-forum-org.20210112.gappssmtp.com header.s=20210112 header.b=EpZtHH0s; spf=pass (google.com: domain of wlupton-QSt+ys/nuMyEUIsrzH9SikB+6BGkLq7r@public.gmane.org designates 2607:f8b0:4864:20::b2d as permitted sender) smtp.mailfrom=wlupton-QSt+ys/nuMyEUIsrzH9SikB+6BGkLq7r@public.gmane.org Original-Received: from mail-yb1-xb2d.google.com (mail-yb1-xb2d.google.com. [2607:f8b0:4864:20::b2d]) by gmr-mx.google.com with ESMTPS id y203-20020a6264d4000000b004e1a39c4e87si725068pfb.0.2022.06.07.08.24.40 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 07 Jun 2022 08:24:40 -0700 (PDT) Received-SPF: pass (google.com: domain of wlupton-QSt+ys/nuMyEUIsrzH9SikB+6BGkLq7r@public.gmane.org designates 2607:f8b0:4864:20::b2d as permitted sender) client-ip=2607:f8b0:4864:20::b2d; Original-Received: by mail-yb1-xb2d.google.com with SMTP id y188so2240359ybe.11 for ; Tue, 07 Jun 2022 08:24:40 -0700 (PDT) X-Received: by 2002:a25:2c0e:0:b0:663:3ab5:82b8 with SMTP id s14-20020a252c0e000000b006633ab582b8mr17654148ybs.629.1654615480210; Tue, 07 Jun 2022 08:24:40 -0700 (PDT) In-Reply-To: X-Original-Sender: wlupton-QSt+ys/nuMyEUIsrzH9SikB+6BGkLq7r@public.gmane.org X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@broadband-forum-org.20210112.gappssmtp.com header.s=20210112 header.b=EpZtHH0s; spf=pass (google.com: domain of wlupton-QSt+ys/nuMyEUIsrzH9SikB+6BGkLq7r@public.gmane.org designates 2607:f8b0:4864:20::b2d as permitted sender) smtp.mailfrom=wlupton-QSt+ys/nuMyEUIsrzH9SikB+6BGkLq7r@public.gmane.org Precedence: list Mailing-list: list pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org; contact pandoc-discuss+owners-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org List-ID: X-Google-Group-Id: 1007024079513 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , Xref: news.gmane.io gmane.text.pandoc:30707 Archived-At: --000000000000f06b8f05e0dd2f08 Content-Type: multipart/alternative; boundary="000000000000f06b8c05e0dd2f06" --000000000000f06b8c05e0dd2f06 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable All, I've split this out into two functions (each currently in its own [attached as .lua.txt] file): - dump(value, maxlen=3D70) that returns a possibly multi-line string representation of a value - output(...) that's a utility function that outputs space-separated arguments, each passed to dump() and with a terminating newline if neede= d Here's an updated example filter (it uses output() and doesn't call dump() directly): local output =3D require 'output' function Pandoc(doc) output('meta', doc.meta) output('blocks', doc.blocks) end Please feel free to do whatever you like with these functions. In my environment I have an additional layer in which I derive a log-level from PANDOC_STATE.{trace,verbosity} and use this in a set of logging functions like this one (*please let me know if you'd like me to supply these too*): function error(...) if logLevel >=3D -1 then output('(E)', ...) end end Cheers, William On Tue, 7 Jun 2022 at 15:13, William Lupton wrote: > I'll need to extract the reporting functions. I'll do that soon, and post > the result. This is currently working in pandoc 2.16.1 (and earlier). I > haven't yet bitten the bullet of the move to 2.18. > > On Tue, 7 Jun 2022 at 14:55, John MacFarlane wrote: > >> >> That looks nice. Can you share your utils.lua? >> >> William Lupton writes: >> >> > I think I've mentioned this before... but I'd be happy to contribute >> (in a >> > suitable form) the somewhat-pandoc-aware utility that I use for this. >> > >> > Given this input: >> > >> > *% *cat doc.md >> > >> > --- >> > >> > a: 1 >> > >> > b: | >> > >> > 2 3 4 >> > >> > --- >> > >> > >> > # Header >> > >> > >> > This is a sentence (and a paragraph). >> > >> > >> > * This is a list item >> > >> > * And another >> > >> > >> > | Right | Left | Default | Center | >> > >> > |------:|:-----|---------|:------:| >> > >> > | 12 | 12 | 12 | 12 | >> > >> > | 123 | 123 | 123 | 123 | >> > >> > | 1 | 1 | 1 | 1 | >> > >> > >> > : Demonstration of pipe table syntax. >> > >> > and this filter: >> > >> > *% *cat rep.lua >> > >> > local utils =3D require 'utils' >> > >> > >> > -- do it this way to avoid reporting MetaBlocks twice >> > >> > function Pandoc(doc) >> > >> > utils.temp('meta', doc.meta) >> > >> > utils.temp('blocks', doc.blocks) >> > >> > end >> > >> > this command: >> > >> > pandoc doc.md -L rep.lua >/dev/null 2>doc.txt >> > >> > generates the attached. >> > >> > On Tue, 7 Jun 2022 at 08:57, wrote: >> > >> >> Hi, >> >> >> >> When playing around with filters I use pprint.lua or inspect.lua to >> >> visualize lua tables. Would it make sense to include some sort of >> =C2=ABprint >> >> the contents of this table=C2=BB to pandoc ? >> >> >> >> Best, >> >> >> >> Denis >> >> >> >> -- >> > --=20 You received this message because you are subscribed to the Google Groups "= pandoc-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an e= mail to pandoc-discuss+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To view this discussion on the web visit https://groups.google.com/d/msgid/= pandoc-discuss/CAEe_xxjopWC0y3Nk-ZrHSWDoAAj71szfHhivi%3Dc42zK_aFpZ4Q%40mail= .gmail.com. --000000000000f06b8c05e0dd2f06 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
All,

I've sp= lit this out into two functions (each currently in its own [attached as .lu= a.txt] file):
  • dump(value, maxlen=3D70)= that returns a possibly multi-line string representation of a value=
  • output(...) that's a utility f= unction that outputs space-separated arguments, each passed to dump() and w= ith a terminating newline if needed
Here's an updated exa= mple filter (it uses output() and doesn'= ;t call dump() directly):

local output =3D require 'output'<= br>function Pandoc(doc)
=C2=A0 =C2=A0 output('meta', doc.meta)=C2=A0 =C2=A0 output('blocks', doc.blocks)
end


Please feel free to do whatever you like with these functions.

In my environment I have an additional layer= in which I derive a log-level from PANDOC_STATE.{= trace,verbosity} and use this in a set of logging functions like thi= s one (please let me know if you'd like me to supply these too):=

function error(...= )
=C2=A0 =C2=A0 if logLevel >=3D -1 then
=C2=A0 =C2=A0 =C2=A0 =C2= =A0 output('(E)', ...)
=C2=A0 =C2=A0 end
end

=

Cheers,
William

On Tue, 7 Jun 2022 at 15:13, W= illiam Lupton <wlupton@br= oadband-forum.org> wrote:
I'll need to extract the reporting fu= nctions. I'll do that soon, and post the result. This is currently work= ing in pandoc 2.16.1 (and earlier). I haven't yet bitten the bullet of = the move to 2.18.

On Tue, 7 Jun 2022 at 14:55, John MacFarlane <jgm-TVLZxgkOlNX2fBVCVOL8/A@public.gmane.org> wro= te:

That looks nice.=C2=A0 Can you share your utils.lua?

William Lupton <wlupton-QSt+ys/nuMyEUIsrzH9SikB+6BGkLq7r@public.gmane.org> writes:

> I think I've mentioned this before... but I'd be happy to cont= ribute (in a
> suitable form) the somewhat-pandoc-aware utility that I use for this.<= br> >
> Given this input:
>
> *% *cat doc.md
>
> ---
>
> a: 1
>
> b: |
>
>=C2=A0 =C2=A02 3 4
>
> ---
>
>
> # Header
>
>
> This is a sentence (and a paragraph).
>
>
> * This is a list item
>
> * And another
>
>
> | Right | Left | Default | Center |
>
> |------:|:-----|---------|:------:|
>
> |=C2=A0 =C2=A012=C2=A0 |=C2=A0 12=C2=A0 |=C2=A0 =C2=A0 12=C2=A0 =C2=A0= |=C2=A0 =C2=A0 12=C2=A0 |
>
> |=C2=A0 123=C2=A0 |=C2=A0 123 |=C2=A0 =C2=A0123=C2=A0 =C2=A0|=C2=A0 = =C2=A0123=C2=A0 |
>
> |=C2=A0 =C2=A0 1=C2=A0 |=C2=A0 =C2=A0 1 |=C2=A0 =C2=A0 =C2=A01=C2=A0 = =C2=A0|=C2=A0 =C2=A0 =C2=A01=C2=A0 |
>
>
> : Demonstration of pipe table syntax.
>
> and this filter:
>
> *% *cat rep.lua
>
> local utils =3D require 'utils'
>
>
> -- do it this way to avoid reporting MetaBlocks twice
>
> function Pandoc(doc)
>
>=C2=A0 =C2=A0 =C2=A0utils.temp('meta', doc.meta)
>
>=C2=A0 =C2=A0 =C2=A0utils.temp('blocks', doc.blocks)
>
> end
>
> this command:
>
> pandoc doc.md -L rep.lua >/dev/null 2>doc.txt
>
> generates the attached.
>
> On Tue, 7 Jun 2022 at 08:57, <denis.maier-NSENcxR/0n0@public.gmane.org> wrote:
>
>> Hi,
>>
>> When playing around with filters I use pprint.lua or inspect.lua t= o
>> visualize lua tables. Would it make sense to include some sort of = =C2=ABprint
>> the contents of this table=C2=BB to pandoc ?
>>
>> Best,
>>
>> Denis
>>
>> --

--
You received this message because you are subscribed to the Google Groups &= quot;pandoc-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an e= mail to pand= oc-discuss+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
To view this discussion on the web visit https://group= s.google.com/d/msgid/pandoc-discuss/CAEe_xxjopWC0y3Nk-ZrHSWDoAAj71szfHhivi%= 3Dc42zK_aFpZ4Q%40mail.gmail.com.
--000000000000f06b8c05e0dd2f06-- --000000000000f06b8f05e0dd2f08 Content-Type: text/plain; charset="US-ASCII"; name="output.lua.txt" Content-Disposition: attachment; filename="output.lua.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l44ba5m20 LS0gb3V0cHV0KCkgb3V0cHV0cyB0byBzdGRlcnIKCmxvY2FsIGR1bXAgPSByZXF1aXJlICdkdW1w JwoKbG9jYWwgZnVuY3Rpb24gb3V0cHV0KC4uLikKICAgIGxvY2FsIG5lZWRfbmV3bGluZSA9IGZh bHNlCiAgICBmb3IgaSwgaXRlbSBpbiBpcGFpcnMoey4uLn0pIGRvCiAgICAgICAgLS0gWFhYIHNw YWNlIGxvZ2ljIGNvdWxkIGJlIGNsZXZlcmVyLCBlLmcuIG5vIHNwYWNlIGFmdGVyIG5ld2xpbmUK ICAgICAgICBsb2NhbCBtYXliZV9zcGFjZSA9IGkgPiAxIGFuZCAnICcgb3IgJycKICAgICAgICBs b2NhbCB0ZXh0ID0gKHt0YWJsZT0xLCB1c2VyZGF0YT0xfSlbdHlwZShpdGVtKV0gYW5kCiAgICAg ICAgICAgIGR1bXAoaXRlbSkgb3IgdG9zdHJpbmcoaXRlbSkKICAgICAgICBpby5zdGRlcnI6d3Jp dGUobWF5YmVfc3BhY2UsIHRleHQpCiAgICAgICAgbmVlZF9uZXdsaW5lID0gdGV4dDpzdWIoLTEp IH49ICdcbicKICAgIGVuZAogICAgaWYgbmVlZF9uZXdsaW5lIHRoZW4KICAgICAgICBpby5zdGRl cnI6d3JpdGUoJ1xuJykKICAgIGVuZAplbmQKCnJldHVybiBvdXRwdXQK --000000000000f06b8f05e0dd2f08 Content-Type: text/plain; charset="US-ASCII"; name="dump.lua.txt" Content-Disposition: attachment; filename="dump.lua.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l44ba5m51 LS0gcGFuZG9jLWF3YXJlIG9iamVjdCBkdW1wZXIKCi0tIGhlbHBlciBmdW5jdGlvbiB0byByZXR1 cm4gYSBzZW5zaWJsZSB0eXBlbmFtZQotLSBYWFggaXMgdGhlcmUgYSBiZXR0ZXIgd2F5IG9mIGRv aW5nIHRoaXM/IHVzaW5nIG1ldGF0YWJsZXM/CmxvY2FsIGZ1bmN0aW9uIGdldFR5cGVuYW1lKHZh bHVlKQogICAgbG9jYWwgdHlwID0gdHlwZSh2YWx1ZSkKICAgIGlmIHR5cCA9PSAndGFibGUnIGFu ZCB2YWx1ZS50YWcgYW5kIHZhbHVlLnQgdGhlbgogICAgICAgIHJldHVybiB2YWx1ZS50YWcKICAg IGVsc2VpZiB0eXAgPT0gJ3VzZXJkYXRhJyB0aGVuCiAgICAgICAgaWYgdmFsdWUudGFnIGFuZCB2 YWx1ZS50IHRoZW4KICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRhZwogICAgICAgIGVsc2UKICAg ICAgICAgICAgLS0gZS5nLiwgQXR0cmlidXRlcyBpcyB1c2VyZGF0YSBidXQgZG9lc24ndCBoYXZl IHRhZyBhbmQgdAogICAgICAgICAgICByZXR1cm4gdHlwCiAgICAgICAgZW5kCiAgICBlbHNlCiAg ICAgICAgcmV0dXJuIHR5cAogICAgZW5kCmVuZAoKLS0gaGVscGVyIGZ1bmN0aW9uCi0tIG5vdGU6 IGRvbid0IHVzZSBhbnl0aGluZyBmcm9tIHRoZSBwYW5kb2MgbW9kdWxlIChzbyBjYW4gdGVzdCBz dGFuZGFsb25lKQotLSBYWFggc2hvdWxkIGRldGVjdCByZXBldGl0aW9uL3JlY3Vyc2lvbgotLSBY WFggd291bGQgbGlrZSBtYXhsZW4gbG9naWMgdG8gYXBwbHkgYXQgYWxsIGxldmVscz8gYnV0IG5v dCB0cml2aWFsCmxvY2FsIGZ1bmN0aW9uIGhlbHBlcihwcmVmaXgsIHZhbHVlLCBtYXhsZW4sIGxl dmVsLCBhZGQpCiAgICBsb2NhbCBidWZmZXIgPSB7fQogICAgaWYgcHJlZml4ID09IG5pbCB0aGVu IHByZWZpeCA9ICcnIGVuZAogICAgaWYgbGV2ZWwgPT0gbmlsIHRoZW4gbGV2ZWwgPSAwIGVuZAog ICAgaWYgYWRkID09IG5pbCB0aGVuIGFkZCA9IGZ1bmN0aW9uKGl0ZW0pIHRhYmxlLmluc2VydChi dWZmZXIsIGl0ZW0pIGVuZCBlbmQKICAgIGxvY2FsIGluZGVudCA9IG1heGxlbiBhbmQgJycgb3Ig KCcgICcpOnJlcChsZXZlbCkKICAgIGxvY2FsIHR5cGVuYW1lID0gZ2V0VHlwZW5hbWUodmFsdWUp CiAgICBsb2NhbCB0eXAgPSAoKHtib29sZWFuPTEsIG51bWJlcj0xLCBzdHJpbmc9MSwgdGFibGU9 MSwgdXNlcmRhdGE9MX0pCiAgICAgICAgICAgICAgICAgW3R5cGVuYW1lXSBhbmQgJycgb3IgdHlw ZW5hbWUpCiAgICBpZiAoe3RhYmxlPTEsIHVzZXJkYXRhPTF9KVt0eXBlKHZhbHVlKV0gdGhlbgog ICAgICAgIGxvY2FsIG51bUtleXMsIGxhc3RLZXkgPSAwLCBuaWwKICAgICAgICBmb3Iga2V5LCB2 YWwgaW4gcGFpcnModmFsdWUpIGRvCiAgICAgICAgICAgIC0tIHBhbmRvYyA+PSAyLjE1IGluY2x1 ZGVzICd0YWcnLCBuaWwgdmFsdWVzIGFuZCBmdW5jdGlvbnMKICAgICAgICAgICAgaWYga2V5IH49 ICd0YWcnIGFuZCB2YWwgYW5kIHR5cGUodmFsKSB+PSAnZnVuY3Rpb24nIHRoZW4KICAgICAgICAg ICAgICAgIG51bUtleXMgPSBudW1LZXlzICsgMQogICAgICAgICAgICAgICAgbGFzdEtleSA9IGtl eQogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgICAgICBpZiBudW1LZXlzID09IDAgdGhl bgogICAgICAgICAgICAtLSBYWFggdGhpcyB3b3VsZG4ndCBiZSBuZWVkZWQgd2l0aCBwcm9wZXIg bWF4bGVuIGhhbmRsaW5nCiAgICAgICAgICAgIHZhbHVlID0gJ3t9JwogICAgICAgIGVsc2VpZiBu dW1LZXlzID09IDEgYW5kIGxhc3RLZXkgPT0gJ2NvbnRlbnQnIHRoZW4KICAgICAgICAgICAgdHlw ID0gc3RyaW5nLmZvcm1hdCgnY29udGVudDogJXMnLCB0eXApCiAgICAgICAgICAgIHZhbHVlID0g dmFsdWUuY29udGVudAogICAgICAgIGVsc2VpZiBudW1LZXlzID09IDEgYW5kIGxhc3RLZXkgPT0g J3RleHQnIGFuZCB0eXBlbmFtZSA9PSAnU3RyJyB0aGVuCiAgICAgICAgICAgIHR5cGVuYW1lID0g J3N0cmluZycKICAgICAgICAgICAgdHlwID0gJ1N0ciB0ZXh0OicKICAgICAgICAgICAgdmFsdWUg PSB2YWx1ZS50ZXh0CiAgICAgICAgZW5kCiAgICBlbmQKICAgIGxvY2FsIHByZXNlcCA9ICNwcmVm aXggPiAwIGFuZCAnICcgb3IgJycKICAgIGxvY2FsIHR5cHNlcCA9ICN0eXAgPiAwIGFuZCAnICcg b3IgJycKICAgIGxvY2FsIHZhbHR5cCA9IHR5cGUodmFsdWUpCiAgICBpZiAoe2Jvb2xlYW49MSwg bnVtYmVyPTEsIHN0cmluZz0xfSlbdmFsdHlwXSB0aGVuCiAgICAgICAgbG9jYWwgZm10ID0gdHlw ZW5hbWUgPT0gJ3N0cmluZycgYW5kICclcScgb3IgJyVzJwogICAgICAgIGFkZChzdHJpbmcuZm9y bWF0KCclcyVzJXMlcyVzJyAuLiBmbXQsIGluZGVudCwgcHJlZml4LCBwcmVzZXAsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgdHlwLCB0eXBzZXAsIHZhbHVlKSkKICAgIGVsc2VpZiAoe3RhYmxl PTEsIHVzZXJkYXRhPTF9KVt2YWx0eXBdIHRoZW4KICAgICAgICBhZGQoc3RyaW5nLmZvcm1hdCgn JXMlcyVzJXMlc3snLCBpbmRlbnQsIHByZWZpeCwgcHJlc2VwLCB0eXAsIHR5cHNlcCkpCiAgICAg ICAgLS0gQXR0ciBhbmQgQXR0ci5hdHRyaWJ1dGVzIGhhdmUgYm90aCBudW1lcmljIGFuZCBzdHJp bmcga2V5cywgc28KICAgICAgICAtLSBpZ25vcmUgdGhlIG51bWVyaWMgb25lcyAobm8gbG9uZ2Vy IHRoZSBjYXNlIGZvciBwYW5kb2MgPj0gMi4xNT8pCiAgICAgICAgaWYgcHJlZml4IH49ICdhdHRy aWJ1dGVzOicgYW5kIHR5cCB+PSAnQXR0cicgdGhlbgogICAgICAgICAgICBmb3IgaSwgdmFsIGlu IGlwYWlycyh2YWx1ZSkgZG8KICAgICAgICAgICAgICAgIGxvY2FsIHByZSA9IG1heGxlbiBhbmQg aSA+IDEgYW5kICcsICcgb3IgJycKICAgICAgICAgICAgICAgIGxvY2FsIHRleHQgPSBoZWxwZXIo c3RyaW5nLmZvcm1hdCgnJXNbJXNdJywgcHJlLCBpKSwgdmFsLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtYXhsZW4sIGxldmVsICsgMSwgYWRkKQogICAgICAgICAgICBlbmQK ICAgICAgICBlbmQKICAgICAgICBsb2NhbCBmaXJzdCA9IHRydWUKICAgICAgICBmb3Iga2V5LCB2 YWwgaW4gcGFpcnModmFsdWUpIGRvCiAgICAgICAgICAgIC0tIHBhbmRvYyA+PSAyLjE1IGluY2x1 ZGVzICd0YWcnCiAgICAgICAgICAgIGlmIG5vdCB0b251bWJlcihrZXkpIGFuZCBrZXkgfj0gJ3Rh ZycgdGhlbgogICAgICAgICAgICAgICAgbG9jYWwgcHJlID0gbWF4bGVuIGFuZCBub3QgZmlyc3Qg YW5kICcsICcgb3IgJycKICAgICAgICAgICAgICAgIGxvY2FsIHRleHQgPSBoZWxwZXIoc3RyaW5n LmZvcm1hdCgnJXMlczonLCBwcmUsIGtleSksIHZhbCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbWF4bGVuLCBsZXZlbCArIDEsIGFkZCkKICAgICAgICAgICAgZW5kCiAgICAg ICAgICAgIGZpcnN0ID0gZmFsc2UKICAgICAgICBlbmQKICAgICAgICBhZGQoc3RyaW5nLmZvcm1h dCgnJXN9JywgaW5kZW50KSkKICAgIGVuZAogICAgcmV0dXJuIHRhYmxlLmNvbmNhdChidWZmZXIs IG1heGxlbiBhbmQgJycgb3IgJ1xuJykKZW5kCgpsb2NhbCBmdW5jdGlvbiBkdW1wKHZhbHVlLCBt YXhsZW4pCiAgICBpZiBtYXhsZW4gPT0gbmlsIHRoZW4gbWF4bGVuID0gNzAgZW5kCiAgICBsb2Nh bCB0ZXh0ID0gaGVscGVyKG5pbCwgdmFsdWUsIG1heGxlbikKICAgIGlmICN0ZXh0ID4gbWF4bGVu IHRoZW4KICAgICAgICB0ZXh0ID0gaGVscGVyKG5pbCwgdmFsdWUsIG5pbCkKICAgIGVuZAogICAg cmV0dXJuIHRleHQKZW5kCgpyZXR1cm4gZHVtcAo= --000000000000f06b8f05e0dd2f08--