X-Authentication-Warning: delorie.com: mail set sender to geda-user-bounces using -f
X-Recipient: geda-user AT delorie DOT com
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
         :content-type;
        bh=aU1KkcJ/FxkBfu2AK/R2g9/XHxkdzZlStOfnWHXjFrY=;
        b=mYW8MVnjPQdTU4GFf6oQTsOnjDCEGHOnpEMcjm9I0tBcjV7PgMak6Wkj2hcV65n2W0
         gHM2Kx8Kx5i4TgBoioZ33/wcsGW31TAu8x3RfmXNfdDZTJr2WlWq4sI121ANL/RYNy1k
         MyqFn37bW41/ISsLh6MijpciiWj3Ed97g5Ywp/xO3allP8YMDZ5Iq/1jh4IYB4pJANj2
         1DfZcMe3rnV1YY5KO5/DDzIcALkcibTg44DiPmwmTZOO2l+KuAB0JOLYbdpM2K8u+PZ/
         JrfnUw3B2UXgJRhwluoPm2w5LShj36I+GdVOBvxpFbEWj12D0FwC0dCeL7gjShem0tUA
         shWg==
MIME-Version: 1.0
X-Received: by 10.182.117.195 with SMTP id kg3mr14547509obb.17.1391142223143;
 Thu, 30 Jan 2014 20:23:43 -0800 (PST)
In-Reply-To: <kp224q$20f$1@ger.gmane.org>
References: <CACPio-6QgmXwj8LwYoR6zq1hfXHh8ymmnDNhrJd5oEVg6pt0Gg AT mail DOT gmail DOT com>
	<CACPio-7zTB0N7x8hGALcZzGgaCAexKr5DUb4imd=QAzH7Pj61A AT mail DOT gmail DOT com>
	<CAG4ve9Jm00oyLb7uLgQjSTjfBpXOL9a0tXkjAQx09325ibChPg AT mail DOT gmail DOT com>
	<CACPio-7ucw-yxsykwOyV+p=+xUqKbwHLhQv1ODNS9Qd+gf3GPQ AT mail DOT gmail DOT com>
	<CAG4ve9KAB6POcUvMhh3KsCt3eRyWus8L+V1WFyupgL-4QckRJA AT mail DOT gmail DOT com>
	<CACPio-7yV1a08b99NyjrGtD0b7qdKWxLPQxA0nUr3qAL9yz7pQ AT mail DOT gmail DOT com>
	<CAG4ve9KKG_4Z6V0V3HCjAjo6jwD=t5AmwGdVgGqYJbM9q6B_zA AT mail DOT gmail DOT com>
	<CACPio-66SHLWYAusnwq0acYBL+QX0uwuuT8zeUotYE90a5pCHQ AT mail DOT gmail DOT com>
	<CAG4ve9KeBYS_Gs_5y2o6ZWVREq0tEFtJiEQbX692SbRzTdSxgw AT mail DOT gmail DOT com>
	<CAG4ve9+wP0VAnXAFpB+gJQHUphnNTYn71_wBphuMafL09k9YnQ AT mail DOT gmail DOT com>
	<koto2c$r5i$1 AT ger DOT gmane DOT org>
	<CAG4ve9KJeGATHFoUuosCnOeUNa9TcunM1+C9EJwxAbTQ3yU0dw AT mail DOT gmail DOT com>
	<kp224q$20f$1 AT ger DOT gmane DOT org>
Date: Fri, 31 Jan 2014 08:23:42 +0400
Message-ID: <CAG4ve9+RgrKFe7-F13QxMqb4sx3jYqQuaFxwzPnVuayPq9U8fw@mail.gmail.com>
Subject: Re: [geda-user] Re: refdes renumber
From: =?KOI8-R?B?4czFy9PFyiDowdLYy8/X08vJyg==?= <svetonomer AT gmail DOT com>
To: geda-user AT delorie DOT com
Content-Type: multipart/mixed; boundary=089e0149c5060b3ee304f13c8af8
Reply-To: geda-user AT delorie DOT com
Errors-To: nobody AT delorie DOT com
X-Mailing-List: geda-user AT delorie DOT com
X-Unsubscribes-To: listserv AT delorie DOT com
Precedence: bulk

--089e0149c5060b3ee304f13c8af8
Content-Type: multipart/alternative; boundary=089e0149c5060b3edf04f13c8af6

--089e0149c5060b3edf04f13c8af6
Content-Type: text/plain; charset=KOI8-R
Content-Transfer-Encoding: quoted-printable

2013-06-09 Kai-Martin Knaak <kmk AT familieknaak DOT de>

> =E1=CC=C5=CB=D3=C5=CA =E8=C1=D2=D8=CB=CF=D7=D3=CB=C9=CA wrote:
>
> >>> My most pressing wish with regard to renumber scripts:
> >>>Play nice with multi part symbols.
> >>>
> >>>It is good practice to split power pins or function blocks of
> >>>integrated components into separate symbols. Thy all share the same
> >>>value of the refdes attribute. This sameness of refdes values lets
> >>>gedalib know that two symbols are meant to refer to the same
> >>>component. The same applies to slotted symbols.
> > Attach Example please. I do not using separate symbols, but I have
> > interesting.
>
> I attached my symbols for a dual operational amplifier. The symbol
> opamp_dual.sym contains the triangle with input and output pins. It
> features two slots for the two opamps the device contains.
>
> Then there is opamp_dual_pwr.sym . This is a rectangle with just the
> two supply pins of the component. I usually put all the power symbol
> somewhere on the bottom of the schematic, connect them to power nets
> and attach the necessary 100 nF capacitors. That way, power connection
> is explicitely visible in the schematic. But it does not clutter the
> functional part of the schematic. See the attached PDF of my favorite
> photo diode amplifier for an example.
>
> ---<)kaimartin(>---
> --
> Kai-Martin Knaak
>


This is added.
Read help more.

--089e0149c5060b3edf04f13c8af6
Content-Type: text/html; charset=KOI8-R
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><br><div class=3D"gmail=
_quote">2013-06-09 Kai-Martin Knaak <span dir=3D"ltr">&lt;<a href=3D"mailto=
:kmk AT familieknaak DOT de" target=3D"_blank">kmk AT familieknaak DOT de</a>&gt;</span><=
br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left=
:1px #ccc solid;padding-left:1ex">
<div class=3D"im">=E1=CC=C5=CB=D3=C5=CA =E8=C1=D2=D8=CB=CF=D7=D3=CB=C9=CA w=
rote:<br>
<br>
&gt;&gt;&gt; My most pressing wish with regard to renumber scripts:<br>
&gt;&gt;&gt;Play nice with multi part symbols.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;It is good practice to split power pins or function blocks of<b=
r>
&gt;&gt;&gt;integrated components into separate symbols. Thy all share the =
same<br>
&gt;&gt;&gt;value of the refdes attribute. This sameness of refdes values l=
ets<br>
&gt;&gt;&gt;gedalib know that two symbols are meant to refer to the same<br=
>
&gt;&gt;&gt;component. The same applies to slotted symbols.<br>
&gt; Attach Example please. I do not using separate symbols, but I have<br>
&gt; interesting.<br>
<br>
</div>I attached my symbols for a dual operational amplifier. The symbol<br=
>
opamp_dual.sym contains the triangle with input and output pins. It<br>
features two slots for the two opamps the device contains.<br>
<br>
Then there is opamp_dual_pwr.sym . This is a rectangle with just the<br>
two supply pins of the component. I usually put all the power symbol<br>
somewhere on the bottom of the schematic, connect them to power nets<br>
and attach the necessary 100 nF capacitors. That way, power connection<br>
is explicitely visible in the schematic. But it does not clutter the<br>
functional part of the schematic. See the attached PDF of my favorite<br>
photo diode amplifier for an example.<br>
<div class=3D"HOEnZb"><div class=3D"h5"><br>
---&lt;)kaimartin(&gt;---<br>
--<br>
Kai-Martin Knaak</div></div></blockquote></div><br><br></div><div class=3D"=
gmail_extra">This is added.<br></div><div class=3D"gmail_extra">Read help m=
ore.<br></div></div>

--089e0149c5060b3edf04f13c8af6--
--089e0149c5060b3ee304f13c8af8
Content-Type: text/x-python; charset=US-ASCII; name="refdes_renum.py"
Content-Disposition: attachment; filename="refdes_renum.py"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hr2y70se3

IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMgoKaGVscCA9ICIiIgpVc2FnZToKCglyZWZkZXNfcmVudW0u
cHkgWy0tbm9jb3B5XSBbLS1wZ3NraXAgW251bWJlcl0gXSBmaWxlMS5zY2ggW2ZpbGUyLnNjaCBm
aWxlLnBjYiBbIHBhdGh0by9wcm9qZWN0ZmlsZSBdIF0KCXJlZmRlc19yZW51bS5weSAtLWhlbHAK
CXJlZmRlc19yZW51bS5weSAtLXZlcnNpb24KCnJlZmRlc19yZW51bS5weSByZWFkcyBhIGdzY2hl
bSBzY2hlbWF0aWMgZmlsZSBvciBmaWxlcyBhbmQgcmVudW1iZXJzIGFsbCByZWZlcmVuY2UKZGVz
aWduYXRvcnMuICBUaGUgcmVmZXJlbmNlIGRlc2lnbmF0b3JzIGFyZSBudW1iZXJlZCBzdGFydGlu
ZyB3aXRoIDEgYW5kIHRoZQpvbGQgc2NoZW1hdGljIGZpbGUgaXMgcmVwbGFjZWQgYnkgdGhlIG1v
ZGlmaWVkIHNjaGVtYXRpYyBmaWxlLiBBbHNvIHJlcGxhY2VkIFJFRkRFU3MgaW4gcGNiIGZpbGUo
cykgYWNjb3JkaW5nbHkgdG8gc2NoZW1hdGljIGZpbGUocykuCnJlZmRlc19yZW51bS5weSBjYW4g
cmVhZCB0aGUgcHJvamVjdCBmaWxlKGZpbGVzKSBhbmQgcmVudW1iZXIgYWxsIFJFRkRFU3MgaW4g
cHJvamVjdC4KCldhcm5pbmc6IEZvciBwcm9wZXJseSByZW51bWJlciBvZiBzbG90dGVkIGFuZCBj
b21wbGV4KG1hbnkgc3ltYm9scykgY29tcG9uZW50cyBZb3UgbXVzdCBwbGFjZSBpZGVudGljYWwg
UkVGREVTIHRvIGhpbS4gCkV4YW1wbGU6IFUxLCBVMSBvciBVMTAxLCBVMTAxLCBVMTAxCgpyZWZk
ZXNfcmVudW0ucHkgYWNjZXB0cyB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CgogICAgLS1oZWxwICAg
ICAgRGlzcGxheXMgdGhpcyBoZWxwIG1lc3NhZ2UuCgogICAgLS1ub2NvcHkgICAgSWYgZ2l2ZW4s
IHRoaXMgZmxhZyBsZWF2ZXMgdGhlIG1vZGlmaWVkIGZpbGVzIGluIG5ldyBmaWxlcwogICAgICAg
ICAgICAgICAgd2hvc2UgbmFtZXMgYXJlIGdlbmVyYXRlZCBieSBhcHBlbmRpbmcgYSAiLnJlbnVt
IiB0byB0aGUKICAgICAgICAgICAgICAgIG9yaWdpbmFsIGZpbGUgbmFtZXMuICBUaGUgZGVmYXVs
dCBpcyB0byBvdmVyd3JpdGUgdGhlIG9yaWdpbmFsLgoKICAgIC0tcGdza2lwIE4gIFdoZW4gdGhp
cyBmbGFnIGlzIHVzZWQsIGNvbXBvbmVudHMgb24gdGhlIGZpcnN0IHNjaGVtYXRpYyBzaGVldAog
ICAgICAgICAgICAgICAgYXJlIG51bWJlcmVkIHN0YXJ0aW5nIHdpdGggMTAxLiAgT24gdGhlIHNl
Y29uZCBzaGVldCwgdGhleSBzdGFydAogICAgICAgICAgICAgICAgd2l0aCAyMDEsIGV0YyAgU3Bl
Y2lmeWluZyBhIHZhbHVlIChOKSBnaXZlcyB0aGUgc3RlcCBiZXR3ZWVuIHBhZ2VzLgogICAgICAg
ICAgICAgICAgRm9yIGV4YW1wbGUgLS1wZ3NraXAgMTAgd2lsbCBzdGFydCB3aXRoIDExLCAyMSwg
MzEsIGV0Yy4KCiAgICAtLWdlbnRsZSAgICBUaGlzIGZsYWcgdGVsbHMgcmVmZGVzX3JlbnVtLnB5
IHRvIGxlYXZlIGFueSByZWZkZXNlcwogICAgICAgICAgICAgICAgYWxvbmUgaWYgdGhleSBhbHJl
YWR5IGhhdmUgbnVtYmVycy4gIFVzZSB0aGlzIG9wdGlvbiB0byBudW1iZXIKICAgICAgICAgICAg
ICAgIG5ldyBjb21wb25lbnRzIGluIGEgc2NoZW1hdGljIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4g
bnVtYmVyZWQuCiAgICAgICAgICAgICAgICBOb3RlIHRoYXQgLS1nZW50bGUgaXMgc2V0IGJ5IGRl
ZmF1bHQhCgogICAgLS1mb3JjZSAgICAgU2V0IHRoaXMgZmxhZyB0byByZW51bWJlciBhbGwgcmVm
ZGVzZXMsIHdoZXRoZXIgdGhleSBhcmUgYWxyZWFkeQogICAgICAgICAgICAgICAgbnVtYmVyZWQg
b3Igbm90LgoKCS0tc29ydCBBTEcJU2V0IHRoZSBzb3J0ZWQgYWxnb3JpdGhtLgoJCQkJUGVybWlz
c2libGUgdmFsdWUgZm9yIC0tc29ydCBvcHRpb24gKEFMRykgaXM6CgkJZGlhZwkJLSBEaWFnb25h
bCByZW51bWJlciAoYXMgZ3NjaGVtIHByb2dyYW0pCgkJdG9wdG9ib3QJLSBSZW51bWJlciByZWZk
ZXMgYmVnYW4gd2l0aCB0b3AgYW5kIGVuZHMgYXQgYm90dG9tLgoJCWJvdHRvdG9wCS0gUmVudW1i
ZXIgcmVmZGVzIGNvbnRyYXJpd2lzZSBhcyB0b3B0b2JvdAoJCWxlZnR0b3JpZ2h0CS0gUmVudW1i
ZXIgcmVmZGVzIGJlZ2FuIHdpdGggbGVmdCBhbmQgdG8gcmlnaHQKCQlyaWdodHRvbGVmdCAtIFJl
bnVtYmVyIHJlZmRlcyBjb250cmFyaXdpc2UgYXMgbGVmdHRvcmlnaHQKCQlmaWxlCQktIFJlbnVt
YmVyIHJlZmRlcyBhcyB0ZXh0IGZpbGUgb3JkZXIKCgktLWxvZwkJUHJpbnQgcmVudW1iZXIgaW5m
b3JtYXRoaW9uIHRvIHN0ZG91dAoKCS0tY29tcG9uZW50IFJlbnVtYmVyIHJlZmRlcyB3aXRoIGNv
bXBvbmVudCBjb29yZGluYXRlcwoJCQkJQnkgZGVmYXVsdCByZWZkZXNfcmVudW0ucHkgcHJvZ3Jh
bSB1c2luZyBjb29yZGluYXRlcyBvZiAicmVmZGVzIiBhdHRyaWJ1dGVzCgoJLS1hdHRyIE5hbWUJ
U2V0IGF0dHJpYnV0ZSBuYW1lIGZvciByZW51bWJlcmluZy4gQXQgZGVmYXVsdCBSRUZERVMKCiAg
ICAtLXZlcmJvc2UgICBFbmFibGVzIHZlcmJvc2Ugb3V0cHV0LgoKICAgIC0tdmVyc2lvbiAgIFNo
b3dzIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcHJvZ3JhbS4KCgpSZXR1cm4gY29kZXM6CgoJcmVmZGVz
X3JlbnVtLnB5IHJldHVybnMgdGhlIGZvbGxvd2luZyBjb2RlcyB0byB0aGUgc2hlbGwgdXBvbiBj
b21wbGV0aW9uOgoKICAgICAgICAgIDAgICBQcm9ncmFtIHJhbiBzdWNjZXNzZnVsbHkuCiAgICAg
ICAgICAxICAgRXJyb3Igb3BlbmluZyBvciByZWFkaW5nIGlucHV0IGZpbGUuCiAgICAgICAgICAy
ICAgRXJyb3Igb3BlbmluZyBvciB3cml0aW5nIG91dHB1dCBmaWxlLgogICAgICAgICAgMyAgIFRv
byBtYW55IGNvbXBvbmVudHMgZm9yIC0tcGdza2lwIHNldHRpbmcuCiAgICAgICAgICA0ICAgSW50
ZXJuYWwgZXJyb3IgKHByb2dyYW0gYnVnIGVuY291bnRlcmVkKS4KClVzYWdlIGV4YW1wbGVzOgoK
MS4JVG8gcmVudW1iZXIgdGhlIHJlZmVyZW5jZSBkZXNpZ25hdG9ycyBpbiBhIHNpbmdsZSBwYWdl
IHNjaGVtYXRpYwoJbXlzY2guc2NoOgoKCQlyZWZkZXNfcmVudW0ucHkgbXlzY2guc2NoCgkJCgoy
LglUbyByZW51bWJlciB0aGUgcmVmZXJlbmNlIGRlc2lnbmF0b3JzIGluIHNjaGVtYXRpYyBwYWdl
cyBwZzEuc2NoLAoJcGcyLnNjaCBhbmQgcGczLnNjaCwgd2l0aCB0aGUgcmVmZXJlbmNlIGRlc2ln
bmF0b3JzIG9uIHBnMS5zY2gKCWJlZ2lubmluZyBhdCAxMDEsIHRoZSBkZXNpZ25hdG9ycyBvbiBw
ZzIuc2NoIGJlZ2lubmluZyBhdCAyMDEsCglhbmQgdGhlIGRlc2lnbmF0b3JzIG9uIHBnMy5zY2gg
YmVnaW5uaW5nIGF0IDMwMToKCgkJcmVmZGVzX3JlbnVtLnB5IC0tcGdza2lwIHBnMS5zY2ggcGcy
LnNjaCBwZzMuc2NoCgoJCjMuCUZvcmNlIHJlcGxhY2VkIHRoZSBSRUZERVNzIGluIHNjaGVtYXRp
YyBhbmQgUENCIGZpbGVzLgoJTm8gZm9yZ290IGdzY2gycGNiIHByb2dyYW0gZm9yIGdlbmVyYXRl
IHByb3BlciBuZXRsaXN0IDopCgkJCgkJcmVmZGVzX3JlbnVtLnB5IC0tZm9yY2UgZm9vMS5zY2gg
Zm9vMi5zY2ggZm9vLnBjYgoJCgo0LglGb3JjZSByZXBsYWNlZCB0aGUgUkVGREVTcyBpbiBjdXJy
ZW50IChvciBub24gY3VycmVudCkgd29ya2VkIHByb2plY3QuCgkJCgkJcmVmZGVzX3JlbnVtLnB5
IC0tZm9yY2UgcHJvamVjdAoJCXJlZmRlc19yZW51bS5weSAtLWZvcmNlIC4uLy4uL2Rlc2lnbi9n
ZWRhL3Byb2plY3QKCQoKNS4JUmVwbGFjaW5nIHdpdGggbm9uIGRlZmF1bHQgc29ydGluZyBhbGdv
cml0aG0KCgkJcmVmZGVzX3JlbnVtLnB5IC0tZm9yY2UgcHJvamVjdCAtLXNvcnQgbGVmdHRvcmln
aHQKCQoKCnJlZmRlc19yZW51bS5weSB3YXMgd3JpdHRlbiBieSBLaGFya292c2t5IEFsZXhleSA8
c3ZldG9ub21lckBnbWFpbC5jb20+CiIiIgoKdmVyc2lvbj0ncmVmZGVzX3JlbnVtLnB5IHYxLjAg
YnkgS2hhcmtvdnNreSBBbGV4ZXkgOiknCnNvcnRfbWV0aG9kID0gWydkaWFnJywndG9wdG9ib3Qn
LCdib3R0b3RvcCcsJ2xlZnR0b3JpZ2h0JywncmlnaHR0b2xlZnQnLCdmaWxlJ10KCmltcG9ydCBz
eXMsb3MKaW1wb3J0IHJlCgppZiBsZW4oc3lzLmFyZ3YpID09IDE6CglwcmludCBoZWxwCglleGl0
KDApCgppZiAnLS1oZWxwJyBpbiBzeXMuYXJndjoKCXByaW50IGhlbHAKCWV4aXQoMCkKCmlmICct
LXZlcnNpb24nIGluIHN5cy5hcmd2OgoJcHJpbnQgdmVyc2lvbgoJZXhpdCgwKQoKaWYgJy0tbm9j
b3B5JyAgaW4gc3lzLmFyZ3Y6CglTdWZmaXggPSAnLnJlbnVtJwoJc3lzLmFyZ3YucmVtb3ZlKCct
LW5vY29weScpCmVsc2U6CglTdWZmaXggPSAnJwoKaWYgJy0tcGdza2lwJyAgaW4gc3lzLmFyZ3Y6
CglpZiBzeXMuYXJndltzeXMuYXJndi5pbmRleCgnLS1wZ3NraXAnKSsxXSBpcyBpbnQ6CgkJYWRk
X3BhZ2VfbnVtID0gc3lzLmFyZ3Zbc3lzLmFyZ3YuaW5kZXgoJy0tcGdza2lwJykrMV0KCWVsc2U6
YWRkX3BhZ2VfbnVtID0gMTAwICNQYWdlIGluY3JlbWVudCAKCXN5cy5hcmd2ID0gc3lzLmFyZ3Zb
OnN5cy5hcmd2LmluZGV4KCctLXBnc2tpcCcpXSArIHN5cy5hcmd2W3N5cy5hcmd2LmluZGV4KCct
LXBnc2tpcCcpKzI6XQplbHNlOgoJYWRkX3BhZ2VfbnVtID0gMCNQYWdlIGluY3JlbWVudCAKCmlm
ICctLWdlbnRsZScgIGluIHN5cy5hcmd2OgoJc3lzLmFyZ3YucmVtb3ZlKCctLWdlbnRsZScpCglp
ZiAnLS1mb3JjZScgIGluIHN5cy5hcmd2OgoJCXByaW50ICdEbyBub3QgdXNlIFwiLS1nZW50bGVc
IiBhbmQgXCItLWZvcmNlXCIgc3VtYWx0ZW51b3VzbHknCgkJZXhpdCgwKQoKaWYgJy0tZm9yY2Un
ICBpbiBzeXMuYXJndjoKCWZvcmNlID0gVHJ1ZQoJc3lzLmFyZ3YucmVtb3ZlKCctLWZvcmNlJykK
ZWxzZToKCWZvcmNlID0gRmFsc2UKCmlmICctLXZlcmJvc2UnICBpbiBzeXMuYXJndjoKCXZlcmJv
c2UgPSBUcnVlCglzeXMuYXJndi5yZW1vdmUoJy0tdmVyYm9zZScpCmVsc2U6Cgl2ZXJib3NlID0g
RmFsc2UKCmlmICctLXNvcnQnICBpbiBzeXMuYXJndjoKCWlmIHN5cy5hcmd2W3N5cy5hcmd2Lmlu
ZGV4KCctLXNvcnQnKSsxXSBpbiBzb3J0X21ldGhvZDoKCQlzb3J0ID0gc3lzLmFyZ3Zbc3lzLmFy
Z3YuaW5kZXgoJy0tc29ydCcpKzFdICNzb3J0IG1ldGhvZAoJZWxzZToKCQlwcmludCAnVW5rbm93
biBhcmd1bWVudCBmb3IgLS1zb3J0IG9yIHNvcnQgbWV0aG9kIGlzIHNraXBwZWQnCgkJcHJpbnQg
J1RoZSBwZXJtaXNzaWJsZSB2YWx1ZSBmb3Igc29ydCBtZXRob2Q6ICcgLCBzdHIoc29ydF9tZXRo
b2QpCgkJZXhpdCgwKQoJc3lzLmFyZ3YgPSBzeXMuYXJndls6c3lzLmFyZ3YuaW5kZXgoJy0tc29y
dCcpXSArIHN5cy5hcmd2W3N5cy5hcmd2LmluZGV4KCctLXNvcnQnKSsyOl0KZWxzZToKCXNvcnQg
PSAndG9wdG9ib3QnCgppZiAnLS1sb2cnIGluIHN5cy5hcmd2OgoJbG9nID0gVHJ1ZQoJc3lzLmFy
Z3YucmVtb3ZlKCctLWxvZycpCmVsc2U6Cglsb2cgPSBGYWxzZQoKaWYgJy0tY29tcG9uZW50JyBp
biBzeXMuYXJndjoKCWF0dHJfY29vcmQgPSBGYWxzZSAjIGZvciBjb21wb25lbnQgY29vcmRpbmF0
ZXMgdXNpbmcKCXN5cy5hcmd2LnJlbW92ZSgnLS1jb21wb25lbnQnKSAKZWxzZToKCWF0dHJfY29v
cmQgPSBUcnVlCgppZiAnLS1hdHRyJyAgaW4gc3lzLmFyZ3Y6CglhdHRyID0gc3lzLmFyZ3Zbc3lz
LmFyZ3YuaW5kZXgoJy0tYXR0cicpKzFdICNhdHRyIG1ldGhvZAoJc3lzLmFyZ3YgPSBzeXMuYXJn
dls6c3lzLmFyZ3YuaW5kZXgoJy0tYXR0cicpXSArIHN5cy5hcmd2W3N5cy5hcmd2LmluZGV4KCct
LWF0dHInKSsyOl0KZWxzZToKCWF0dHIgPSAncmVmZGVzJwoKaWYgJy0tYXR0ci1wcmVmaXgnIGlu
IHN5cy5hcmd2OgoJYXR0cl9wcmVmaXggPSBzeXMuYXJndltzeXMuYXJndi5pbmRleCgnLS1hdHRy
LXByZWZpeCcpKzFdICNhdHRyIG1ldGhvZAoJc3lzLmFyZ3YgPSBzeXMuYXJndls6c3lzLmFyZ3Yu
aW5kZXgoJy0tYXR0cl9wcmVmaXgnKV0gKyBzeXMuYXJndltzeXMuYXJndi5pbmRleCgnLS1hdHRy
JykrMjpdCmVsc2U6CglhdHRyX3ByZWZpeCA9ICcnCgpwY2JuYW1lcyA9IFtdCnBjYmNvbnRlbnQg
PSBbXQpzY2hlbV9uYW1lcyA9IFtdCmZvciBpIGluIHN5cy5hcmd2WzE6XToKCWlmIHJlLnNlYXJj
aCgnLipcLnBjYiQnLGksZmxhZ3M9cmUuRE9UQUxMKTogI1RydWUgaWYgZW5kIG9mIGZpbGVuYW1l
IGlzIC5wY2IKCQlpZiBpIG5vdCBpbiBwY2JuYW1lczoKCQkJcGNibmFtZXMuYXBwZW5kKGkpCgll
bGlmIHJlLnNlYXJjaCgnLipcLnNjaCQnLGksZmxhZ3M9cmUuRE9UQUxMKTogI1RydWUgaWYgZW5k
IG9mIGZpbGVuYW1lIGlzIC5zY2gKCQlpZiBpIG5vdCBpbiBzY2hlbV9uYW1lczoKCQkJc2NoZW1f
bmFtZXMuYXBwZW5kKGkpCgllbHNlOiAjZmlsZSBpcyBub3QgcGNiIGFuZCBzY2ggPT4gdGhpcyBm
aWxlIGlzIHByb2plY3QgZmlsZQoJCWZpbGU9b3BlbihpLCdydCcpCgkJY29udGVudCA9IGZpbGUu
cmVhZCgpCgkJZmlsZS5jbG9zZSgpCgkJZm9yIHRlbXAxIGluIHJlLmZpbmRhbGwoJ3NjaGVtYXRp
Y3NccysuKlwuc2NoJyxjb250ZW50LGZsYWdzPXJlLkRPVEFMTCk6ICNUaGlzIHN0cmluZyBhcmUg
Y29udGFuaW5nIHRoZSBzY2hlbWF0aWMgZmlsZSBuYW1lcwoJCQlmb3IgdGVtcCBpbiB0ZW1wMS5z
cGxpdCgpWzE6XToKCQkJCXRlbXAgPSBvcy5wYXRoLmRpcm5hbWUoaSkrJy8nKyB0ZW1wICMgQWRk
IHBhdGggdG8gZmlsZSAoVXNlZnVsIGlmIHByb2plY3QgZmlsZSBub3QgaW4gY3VycmVudCBkaXJl
Y3RvcnkpCgkJCQlpZiB0ZW1wIG5vdCBpbiBzY2hlbV9uYW1lczoKCQkJCQlzY2hlbV9uYW1lcy5h
cHBlbmQodGVtcCkKCQlmb3IgdGVtcDEgaW4gcmUuZmluZGFsbCgnb3V0cHV0LW5hbWVccysuKlwu
cGNiJyxjb250ZW50LGZsYWdzPXJlLkRPVEFMTCk6I1RoaXMgc3RyaW5nIGFyZSBjb250YW5pbmcg
dGhlIHNjaGVtYXRpYyBmaWxlIG5hbWVzCgkJCWZvciB0ZW1wIGluIHRlbXAxLnNwbGl0KClbMTpd
OgoJCQkJdGVtcCA9IG9zLnBhdGguZGlybmFtZShpKSsnLycrIHRlbXAgKyAnLnBjYicjIEFkZCBw
YXRoIHRvIGZpbGUgKFVzZWZ1bCBpZiBwcm9qZWN0IGZpbGUgbm90IGluIGN1cnJlbnQgZGlyZWN0
b3J5KS4gQWZ0ZXIgYWRkIC5wY2IgKGFjdHVhbCBmb3IgcHJvamVjdCBmaWxlKSAKI1doZW4gaW4g
cHJvamVjdCBmaWxlICJvdXRwdXQtbmFtZSBmb28ucGNiIiwgZ3NjaDJwY2IgY3JlYXRlICBmb28u
cGNiLnBjYiwgdGhlcmVmb3JlIHRoaXMgZmlsZSBJUyBtYWluIFBDQi4KCQkJCWlmIHRlbXAgbm90
IGluIHBjYm5hbWVzOgoJCQkJCXBjYm5hbWVzLmFwcGVuZCh0ZW1wKQojIFJlYWQgY29udGVudCBv
ZiBQQ0IgZmlsZQpmb3IgaSBpbiBwY2JuYW1lczoKCWZpbGU9b3BlbihpLCdydCcpCglwY2Jjb250
ZW50LmFwcGVuZChmaWxlLnJlYWQoKSkKCWZpbGUuY2xvc2UoKQojIFJlYWQgY29udGVudCBvZiBQ
Q0IgZmlsZXMgCgpwYWdlX251bSA9IDAKZm9yIGZpbGVuYW1lIGluIHNjaGVtX25hbWVzOiAjIFRo
aXMgCgkjUmVhZCBjb250ZW50IFNDSCBmaWxlcyBvbmUgYXQgYSB0aW1lISEhIEluIGZ1dHVyZSBt
YXkgYmUgcmVwbGFjZSBmb3IgcmVhZCBjb250ZW50IGFsbCBTQ0ggZmlsZXMKCWZpbGU9b3Blbihm
aWxlbmFtZSwncnQnKQoJY29udGVudCA9IGZpbGUucmVhZCgpCglmaWxlLmNsb3NlKCkKCglwcmlu
dCBhdHRyCiNGaW5kIGFsbCByZXBsYWNpbmcgc3RyaW5ncyBpbiBjdXJyZW50IHNjaGVtYXRpYwoJ
aWYgYXR0cl9jb29yZD09VHJ1ZTogI0lmIHVzZWQgcmVmZGVzIGF0dHJpYnV0ZSBjb29yZGluYXRl
cwoJCWlmIGZvcmNlOiMgQWxsIHJlZmRlcyBhdHRyaWJ1dGVzIGFyZSBzZWxlY3RlZAoJCQljb21w
X2xpc3QgID0gcmUuZmluZGFsbCgnVFteXG5dK1xzKyVzPVx3Klw/PycgJShhdHRyKSAsY29udGVu
dCxmbGFncz1yZS5ET1RBTEwpCgkJZWxzZTojIE9ubHkgTk9OIG51bWJlcmluZyByZWZkZXMgYXR0
cmlidXRlcyBhcmUgc2VsZWN0ZWQgKEV4YW1wbGU6IFI/IEREPyBldGMuKQoJCQljb21wX2xpc3Qg
ID0gcmUuZmluZGFsbCgnVFteXG5dK1xzKyVzPVx3Klw/JyAlKGF0dHIpICxjb250ZW50LGZsYWdz
PXJlLkRPVEFMTCkKCQkKCWVsc2U6ICNJZiB1c2VkIGNvbXBvbmVudCBjb29yZGluYXRlcyAobGlz
dCBvZiBzdHJpbmdzKQoJCWlmIGZvcmNlOgoJCQkjZm9yIGVtYmVkZGVkIGNvbXBvbmVudHMKCQkJ
Y29tcF9saXN0ICA9IHJlLmZpbmRhbGwoJ0NccytcZCtccytcZCtccytcZCtccytcZCtccytcZCtc
cytFTUJFRERFRC4rP1xbLis/XF1ccytce1tee31dKiVzPVx3Klw/P1tee31dKlx9JyAlKGF0dHIp
ICxjb250ZW50LGZsYWdzPXJlLkRPVEFMTCkKCQkJI2ZvciBub24gZW1iZWRkZWQgY29tcG9uZW50
cwoJCQljb21wX2xpc3QgKz0gcmUuZmluZGFsbCgnQ1xzK1xkK1xzK1xkK1xzK1xkK1xzK1xkK1xz
K1xkK1teXG5dK1xzK1x7W157fV0qJXM9XHcqXD8/W157fV0qXH0nICUoYXR0cikgLGNvbnRlbnQs
ZmxhZ3M9cmUuRE9UQUxMKQoJCWVsc2U6CgkJCSNmb3IgZW1iZWRkZWQgY29tcG9uZW50cwoJCQlj
b21wX2xpc3QgID0gcmUuZmluZGFsbCgnQ1xzK1xkK1xzK1xkK1xzK1xkK1xzK1xkK1xzK1xkK1xz
K0VNQkVEREVELis/XFsuKz9cXVxzK1x7W157fV0qJXM9XHcqXD9bXnt9XSpcfScgJShhdHRyKSAs
Y29udGVudCxmbGFncz1yZS5ET1RBTEwpCgkJCSNmb3Igbm9uIGVtYmVkZGVkIGNvbXBvbmVudHMK
CQkJY29tcF9saXN0ICs9IHJlLmZpbmRhbGwoJ0NccytcZCtccytcZCtccytcZCtccytcZCtccytc
ZCtbXlxuXStccytce1tee31dKiVzPVx3Klw/W157fV0qXH0nICUoYXR0cikgLGNvbnRlbnQsZmxh
Z3M9cmUuRE9UQUxMKQoKCWlmIG5vdCBjb21wX2xpc3Q6ICNUcnVlIGlmIG5vIFJFRkRFU3MgZm9y
IHJlcGxhY2luZwoJCXByaW50IGNvbXBfbGlzdAoJCWNvbnRpbnVlCgkKCXBhZ2VfbnVtICs9IGFk
ZF9wYWdlX251bSAgIyBBZGRpbmcgUGFnZSBiaWFzIGZvciBuZXcgZmlsZSAKCSMgT2J0YWluaW5n
IHRoZSBjb21wb25lbnQgbGlzdAoJZm9yIGkgaW4gcmFuZ2UoMCxsZW4oY29tcF9saXN0KSk6ICNG
aW5kIGNvb3JkaW5hdGVzIHRvIHJlcGxhY2luZwoJCXh5ID0gY29tcF9saXN0W2ldLnNwbGl0KE5v
bmUsMylbMTozXQoJCXh5WzBdID0gaW50KHh5WzBdKQoJCXh5WzFdID0gaW50KHh5WzFdKQoKI1Nl
bGVjdCByZXBsYWNpbmcgYWxnb3J5dGhtIGJ5IHByb3BlciBzZXR1cCBjb29yZGluYXRlcyBsb2Nh
dGlvbiBvcmRlciBhbmQgc29tZSBjb21wdXRhdGlvbgoJCWlmIHNvcnQgPT0gJ2RpYWcnOgoJCQlj
b21wX2xpc3RbaV0gPSBbeHlbMF0gLSB4eVsxXV0gKyBbY29tcF9saXN0W2ldXQoJCWVsaWYgc29y
dCA9PSAnbGVmdHRvcmlnaHQnOgoJCQljb21wX2xpc3RbaV0gPSBbeHlbMF1dICsgWy14eVsxXV0g
KyBbY29tcF9saXN0W2ldXQoJCWVsaWYgc29ydCA9PSAndG9wdG9ib3QnOgoJCQljb21wX2xpc3Rb
aV0gPSBbLXh5WzFdXSArIFt4eVswXV0gKyBbY29tcF9saXN0W2ldXQoJCWVsaWYgc29ydCA9PSAn
cmlnaHR0b2xlZnQnOgoJCQljb21wX2xpc3RbaV0gPSBbLXh5WzBdXSArIFt4eVsxXV0gKyBbY29t
cF9saXN0W2ldXQoJCWVsaWYgc29ydCA9PSAnYm90dG90b3AnOgoJCQljb21wX2xpc3RbaV0gPSBb
eHlbMV1dICsgWy14eVswXV0gKyBbY29tcF9saXN0W2ldXQoJCWVsc2U6CgkJCWNvbXBfbGlzdFtp
XSA9IFtjb21wX2xpc3RbaV1dCgoJCSNjb21wX2xpc3QgY29udGVudDogW2Nvb3JkMSwgY29vcmQy
LCAncmVwbGFjZWQgc3RyaW5nIG9mIGZpbGUnXQoJCSNFeGFtcGxlOgkJCVstNTA4MDAgLCA2NTEw
MCAsICdDIDY1MTAwIDUwODAwIC4uLiByZXNpc3Rvci0xLnN5bSB7Li4uLnJlZmRlcz1SMTIuLi59
J10KCQkKCQkjRmluZCB0aGUgcmVwbGFjZWQgUkVGREVTIGxldHRlciBwcmVmaXggYW5kIG51bWJl
ciBzdWZmaXggYW5kIEFERCB0byBjb21wb25lbnQgbGlzdCAKCQlyZWZkZXM9cmUuc2VhcmNoKCco
LiopJXM9KFthLXpBLVpdKikoXGQrfFw/KiknICUoYXR0cikgLGNvbXBfbGlzdFtpXVstMV0sZmxh
Z3M9cmUuRE9UQUxMKQoJCWNvbXBfbGlzdFtpXS5pbnNlcnQoMCxyZWZkZXMuZ3JvdXAoMikpCgkJ
Y29tcF9saXN0W2ldLmFwcGVuZChyZWZkZXMuZ3JvdXAoMykgaWYgcmVmZGVzLmdyb3VwKDMpIGVs
c2UgJycpICNGb3IgbGV0dGVycyBvbmx5IFJFRkRFU3MgKGluIGZ1dHVyZSBXZSBjYW4gcmVtb3Zl
IHRoZXkgZnJvbSByZWNwbGFjaW5nIGxpc3QpCgoJCSNjb21wX2xpc3QgY29udGVudDogWydSRUZE
RVMgcHJlZml4JywgY29vcmQxLCBjb29yZDIsICdyZXBsYWNlZCBzdHJpbmcgb2YgZmlsZScJCQkJ
CQkJCSwnT2xkIE5VTUJFUiBvZiBSRUZERVMnXQoJCSNFeGFtcGxlOgkJCVsgICdSJwkJCSwgLTUw
ODAwICwgNjUxMDAgLCAnQyA2NTEwMCA1MDgwMCAuLi4gcmVzaXN0b3ItMS5zeW0gey4uLi5yZWZk
ZXM9UjEyLi4ufSwnMTInXQoKCgkjIFNvcnRpbmcgdGhlIHJlcGxhY2VkIGNvbXBvbmVudC9yZWZk
ZXMgbGlzdCB3aXRoIFJFRkRFU3MgcHJlZml4IGFuZCBhZnRlciB3aXRoIHNlbGVjdGVkIHNvcnQg
YWxnb3JpdGhtCgljb21wX2xpc3QgPSBzb3J0ZWQoY29tcF9saXN0KQoJCglyZWZfY3Vycl9wcmVm
PScwJyAjVGhpcyBpcyBOT04gYWxmYWJldGljIGZvciBhdmFpbGFibGUgcmVudW1iZXIgb2YgZW1w
dHkgcmVmZGVzcyAoZS5nLiAiMSIsICIyIiwgIjIzNCIpCglpZiAncmVmX2xhc3RfbnVtcycgbm90
IGluIGxvY2FscygpOgoJCXJlZl9sYXN0X251bXM9e30gI0xhc3RzIG51bWJlcnMgZm9yIFJFRkRF
U3MgcHJldmlvdXMgc2NoZW1hdGljIChGb3IgZGlzY29udGludW91cyByZW51bWJlciAod2l0aG91
dCAtLXBnc2tpcCkpIAoJCSNFeGFtcGxlIG9mIHRoaXMgZGljdCBjb250ZW50OiB7J0REJzo1LCAn
Uic6MTQsICdDJzo0NX0KCglmb3IgaSBpbiByYW5nZShsZW4oY29tcF9saXN0KSk6ICNSZXBsYWNp
bmcgc29ydGVkIGF0dHJpYnV0ZXMKCQkjQ29tcGxleCBjYWxjdWxhdGUgb2YgY3VycmVudCBudW1i
ZXIgb2YgYXR0cmlidXRlCgkJaWYgcmVmX2N1cnJfcHJlZiA9PSBjb21wX2xpc3RbaV1bMF06ICMg
VGhpcyBBdHRyaWJ1cmUgKHdpdGggY3VycmVudCBwcmVmaXgpIGlzIG5vdCBmaXJzdCBpbiB0aGlz
IFNjaGVtYXRpYyBmaWxlCgkJCWlmIGNvbXBfbGlzdFtpXVt+MF0hPSc/JyBhbmQgY29tcF9saXN0
W2ldW34wXSBpbiBtYXAobGFtYmRhIHg6eFt+MV0sY29tcF9saXN0W2lfZmlyc3RfcHJlZml4Omld
KTogI1JlcGVhdGluZyBhdHRyaWJ1dGUsIGUuZyBOZXcgU0xPVCBvZiBleGlzdGluZyBSRUZERVMp
CgkJCQljb21wX2xpc3RbaV0uYXBwZW5kKHN0cihjb21wX2xpc3RbaV9maXJzdF9wcmVmaXgrbWFw
KGxhbWJkYSB4OnhbfjFdLGNvbXBfbGlzdFtpX2ZpcnN0X3ByZWZpeDppXSkuaW5kZXgoY29tcF9s
aXN0W2ldW34wXSldW34wXSkpICNBZGQgcHJldmlvdXMgbnVtYmVyIG9mIHRoaXMgc3ltYm9sIGZv
ciB0aGlzIFNMT1Qgb3IgUEFSVChmb3IgbWFueSBzeW1ib2xzIGNvbXBvbmVudCkKCQkJZWxzZTog
I05leHQgbnVtYmVyIGF0dHJpYnV0ZQoJCQkJcmVmX2N1cnJfbnVtICs9IDEKCQkJCWNvbXBfbGlz
dFtpXS5hcHBlbmQoc3RyKHJlZl9jdXJyX251bSkpICNBZGQgY3VycmVudCBudW1iZXIgdG8gY29t
cG9uZW50IGxpc3QKCQllbHNlOgoJCQl0cnk6cmVmX2N1cnJfbnVtID0gcGFnZV9udW0gKyAxIGlm
IHBhZ2VfbnVtICE9IDAgZWxzZSByZWZfbGFzdF9udW1zW2NvbXBfbGlzdFtpXVswXV0gKyAxIAoJ
CQlleGNlcHQ6cmVmX2N1cnJfbnVtPTEKCQkJY29tcF9saXN0W2ldLmFwcGVuZChzdHIocmVmX2N1
cnJfbnVtKSkgI0FkZCBjdXJyZW50IG51bWJlciB0byBjb21wb25lbnQgbGlzdAoJCQlyZWZfY3Vy
cl9wcmVmID0gY29tcF9saXN0W2ldWzBdCiAgICAgICAgICAgICAgICAgICAgICAgIGlfZmlyc3Rf
cHJlZml4ID0gaSAjIEJlZ2luIG9mIGN1cnJlbnQgcHJlZml4CgkJcmVmX2xhc3RfbnVtc1tyZWZf
Y3Vycl9wcmVmXT1yZWZfY3Vycl9udW0gIyBBZGQgY3VycmVudCBSRUZERVMgaW4gbGFzdCBudW1i
ZXJzCgoJCSNjb21wX2xpc3QgY29udGVudDogWydSRUZERVMgcHJlZml4JywgY29vcmQxLCBjb29y
ZDIsICdyZXBsYWNlZCBzdHJpbmcgb2YgZmlsZScJCQkJLCdPbGQgTlVNQkVSJywnTmV3IE5VTUJF
UiddCgkJI0V4YW1wbGU6CQkJWyAgJ1InCQkJLCAtNTA4MDAgLCA2NTEwMCAsICdDIDY1MTAwIDUw
ODAwIC4uLnsuLi4ucmVmZGVzPVIxMi4uLn0sCScxMicJICwJJzQnXQoJCQoJCWNvbnRlbnQgPSBj
b250ZW50LnJlcGxhY2UoY29tcF9saXN0W2ldW34yXSxjb21wX2xpc3RbaV1bfjJdLnJlcGxhY2Uo
JyVzPScgJShhdHRyKSArY29tcF9saXN0W2ldWzBdK2NvbXBfbGlzdFtpXVt+MV0sJyVzPScgJShh
dHRyKSArY29tcF9saXN0W2ldWzBdK2NvbXBfbGlzdFtpXVt+MF0pKSAjUmVwbGFjaW5nIGN1cnJl
bnQgc3RyaW5nIHdpdGggTmV3IFJFRkRFUwoJCWlmIGxvZyBhbmQgdmVyYm9zZToKCQkJcHJpbnQg
J1JlcGxhY2luZyBpbiBzY2ggOiAnLCBjb21wX2xpc3RbaV1bMF0rY29tcF9saXN0W2ldW34xXSwg
JyA9PiAnLCBjb21wX2xpc3RbaV1bMF0rY29tcF9saXN0W2ldW34wXQoJCQlwcmludCAnPDw8ICcs
IGNvbXBfbGlzdFtpXVt+Ml0KCQkJcHJpbnQgJz4+PiAnLCBjb21wX2xpc3RbaV1bfjJdLnJlcGxh
Y2UoJyVzPScgJShhdHRyKSArY29tcF9saXN0W2ldWzBdK2NvbXBfbGlzdFtpXVt+MV0sJyVzPScg
JShhdHRyKSArY29tcF9saXN0W2ldWzBdK2NvbXBfbGlzdFtpXVt+MF0pCgkJCXByaW50ICctLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nCgoJCWlmIGF0dHI9PSdyZWZkZXMnOgoJ
CQlmb3IgcGNiX2luZGV4IGluIHJhbmdlKDAsbGVuKHBjYmNvbnRlbnQpKTogI1NlYXJjaCBjdXJy
ZW50IFJFRkRFUyBpbiBwY2IgZmlsZXMgYW5kIEFERCBjb250ZXh0IG9mIFJFRkRFUyAoYXBwcm9w
cmlhdGUgZWxlbWVudCBvbnRleCBjb21wbGV0ZWx5KSB0byBsaXN0IG9mIHJlcGxhY2VzCgkJCQll
bGVtID0gcmUuc2VhcmNoKCdFbGVtZW50XFtbXltcXV0qIiVzIlteW1xdXSpcXScgJShjb21wX2xp
c3RbaV1bMF0rY29tcF9saXN0W2ldW34xXSkscGNiY29udGVudFtwY2JfaW5kZXhdICxmbGFncz1y
ZS5ET1RBTEwpCgkJCQlpZiBlbGVtOgoJCQkJCXRyeToKCQkJCQkJcGNiX3JlcGxhY2VzLmFwcGVu
ZChbcGNiX2luZGV4LGVsZW0uZ3JvdXAoKSxlbGVtLmdyb3VwKCkucmVwbGFjZShjb21wX2xpc3Rb
aV1bMF0rY29tcF9saXN0W2ldW34xXSxjb21wX2xpc3RbaV1bMF0rY29tcF9saXN0W2ldW34wXSld
KSAKCQkJCQlleGNlcHQ6cGNiX3JlcGxhY2VzID0gIFtbcGNiX2luZGV4LGVsZW0uZ3JvdXAoKSxl
bGVtLmdyb3VwKCkucmVwbGFjZShjb21wX2xpc3RbaV1bMF0rY29tcF9saXN0W2ldW34xXSxjb21w
X2xpc3RbaV1bMF0rY29tcF9saXN0W2ldW34wXSldXSAjQ3JlYXRlIG5ldyByZXBsYWNlIGxpc3QK
CQkJCQlpZiBsb2cgYW5kIHZlcmJvc2U6CgkJCQkJCXByaW50ICdSZXBsYWNpbmcgaW4gcGNiOiAn
LCBjb21wX2xpc3RbaV1bMF0rY29tcF9saXN0W2ldW34xXSwgJyA9PiAnLCBjb21wX2xpc3RbaV1b
MF0rY29tcF9saXN0W2ldW34wXQoJCQkJCQlwcmludCAnPDw8ICcsIGVsZW0uZ3JvdXAoKQoJCQkJ
CQlwcmludCAnPj4+ICcsIGVsZW0uZ3JvdXAoKS5yZXBsYWNlKGNvbXBfbGlzdFtpXVswXStjb21w
X2xpc3RbaV1bfjFdLGNvbXBfbGlzdFtpXVswXStjb21wX2xpc3RbaV1bfjBdKQoJCQkJCQlwcmlu
dCAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJwoKCWlmICdwY2JfcmVwbGFj
ZXMnIGluIHZhcnMoKTogI0lmIFBDQiByZXBsYWNlIGxpc3QgYXJlIGV4aXN0cwoJCWZvciBpIGlu
IHBjYl9yZXBsYWNlczoJI1JlcGxhY2UgY29ycmVzcG9uZGluZyBlbGVtZW50cyBjb250ZXh0cywg
Y29udGFpbmluZyByZXBsYWNlZCBSRUZERVNzCgkJCXBjYmNvbnRlbnRbaVswXV0gPSBwY2Jjb250
ZW50W2lbMF1dLnJlcGxhY2UoaVsxXSxpWzJdKQoKIyBXcml0ZSBjdXJyZW50IHJlcGxhY2VkIGNv
bnRlbnQgKHNjaGVtYXRpYykgdG8gY3VycmVudCBzY2hlbWF0aWMgZmlsZQoJZmlsZT1vcGVuKGZp
bGVuYW1lK1N1ZmZpeCwnd3QnKQoJZmlsZS53cml0ZShjb250ZW50KQoJZmlsZS5jbG9zZSgpCgoj
V3JpdGUgYWxsIFBDQiByZXBsYWNlZCBjb250ZW50cyB0byBjb3JyZXNwb25pbmcgUENCIGZpbGUK
Zm9yIGkgaW4gcmFuZ2UoMCxsZW4ocGNiY29udGVudCkpOgoJZmlsZT1vcGVuKHBjYm5hbWVzW2ld
K1N1ZmZpeCwnd3QnKQoJZmlsZS53cml0ZShwY2Jjb250ZW50W2ldKQoJZmlsZS5jbG9zZSgpCgoj
UHJpbnQgbG9nIG1lc3NhZ2UgdG8gc3Rkb3V0IChzdW1tYXJ5IHJlcGxhY2VkKQppZiBsb2c6Cglw
cmludCAnU3VtbWFyeSByZXBsYWNlZCcKCWZvciBpIGluIGNvbXBfbGlzdDoKCQlwcmludCBpWzBd
K2lbfjFdLCAnID0+ICcsIGlbMF0raVt+MF0KCQkKCg==
--089e0149c5060b3ee304f13c8af8--