From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1RtKYW-00017P-EM for garchives@archives.gentoo.org; Fri, 03 Feb 2012 14:56:12 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 212E7E06C1; Fri, 3 Feb 2012 14:55:27 +0000 (UTC) Received: from mail-iy0-f181.google.com (mail-iy0-f181.google.com [209.85.210.181]) by pigeon.gentoo.org (Postfix) with ESMTP id DC406E0686 for ; Fri, 3 Feb 2012 14:52:19 +0000 (UTC) Received: by iakl21 with SMTP id l21so6034426iak.40 for ; Fri, 03 Feb 2012 06:52:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:from:date:message-id:subject:to:content-type; bh=t5oZ5mAbYLS5djmB1RZGbbbxziUdjCoxFuHcb0hvqno=; b=LLcBTvaceA54L2LGmJC1Hb2reL3qdTictlpG+3rtYSZISHRHzggqOH13uiokbmHRfJ kihrqiw+3RvWnH3+ivpot4nRnHBsc7wMYLRTk//LZOYq+hPMrVccCOnvlf96SnlahGIP Fwf6OsE1AsZ03Jjhaoxpehh65Bhzp5lmXDV4I= Received: by 10.42.20.73 with SMTP id f9mr2427054icb.22.1328280739449; Fri, 03 Feb 2012 06:52:19 -0800 (PST) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-user@lists.gentoo.org Reply-to: gentoo-user@lists.gentoo.org MIME-Version: 1.0 Received: by 10.50.11.230 with HTTP; Fri, 3 Feb 2012 06:51:58 -0800 (PST) From: =?UTF-8?B?6auY6YeR5Z+5?= Date: Fri, 3 Feb 2012 22:51:58 +0800 Message-ID: Subject: [gentoo-user] Build librsvg-2.34.2 Error To: gentoo-user@lists.gentoo.org Content-Type: multipart/mixed; boundary=20cf30244fefa30c3404b8107590 X-Archives-Salt: 0d7dd232-2d6b-40ed-94db-985c4162a7b0 X-Archives-Hash: cfd20ec0fd7ecbac465c3612d33d3809 --20cf30244fefa30c3404b8107590 Content-Type: multipart/alternative; boundary=20cf30244fefa30c2504b810758e --20cf30244fefa30c2504b810758e Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable CC librsvg_2_la-librsvg-enum-types.lo /bin/sh ./libtool --silent --tag=3DCC --mode=3Dcompile i686-pc-linux-gnu-= gcc -DHAVE_CONFIG_H -I. -I. -I. -DG_LOG_DOMAIN=3D\"librsvg\" -DLIBRSVG_DATADIR=3D"\"/usr/share\"" -pthread -I/usr/include/gdk-pixbuf-2= .0 -I/usr/include/libpng15 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libxml2 -I/usr/include/pango-1.0 -I/usr/include/freetype2 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/libdrm -I/usr/include/libcroco-0.6 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libxml2 -DHAVE_LIBCROCO=3D1 -O2 -march=3Dpentium-m -pipe -c -o librsvg_2_la-librsvg-enum-types.lo `test -f 'librsvg-enum-types.c' || echo './'`librsvg-enum-types.c CCLD librsvg-2.la CCLD rsvg-convert GISCAN Rsvg-2.0.gir CCLD rsvg-view In file included from :19:0: /var/tmp/portage/gnome-base/librsvg-2.34.2/work/librsvg-2.34.2/rsvg-cairo-r= ender.h:32:19: fatal error: cairo.h: No such file or directory compilation terminated. Error while processing the source. make[2]: *** [Rsvg-2.0.gir] Error 1 make[2]: *** Waiting for unfinished jobs.... make[2]: Leaving directory `/var/tmp/portage/gnome-base/librsvg-2.34.2/work/librsvg-2.34.2' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/var/tmp/portage/gnome-base/librsvg-2.34.2/work/librsvg-2.34.2' make: *** [all] Error 2 * ERROR: gnome-base/librsvg-2.34.2 failed (compile phase): * emake failed * * If you need support, post the output of 'emerge --info =3Dgnome-base/librsvg-2.34.2', * the complete build log and the output of 'emerge -pqv =3Dgnome-base/librsvg-2.34.2'. * The complete build log is located at '/var/tmp/portage/gnome-base/librsvg-2.34.2/temp/build.log'. * The ebuild environment file is located at '/var/tmp/portage/gnome-base/librsvg-2.34.2/temp/environment'. * S: '/var/tmp/portage/gnome-base/librsvg-2.34.2/work/librsvg-2.34.2' --=20 =E9=AB=98=E9=87=91=E5=9F=B9 --20cf30244fefa30c2504b810758e Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
=C2=A0 CC =C2=A0 =C2=A0 librsvg_2_la-librsvg= -enum-types.lo
/bin/sh ./libtool --silent --tag=3DCC =C2=A0 --mode=3Dcompile i686-p= c-linux-gnu-gcc -DHAVE_CONFIG_H -I. =C2=A0-I. -I. -DG_LOG_DOMAIN=3D\"l= ibrsvg\" -DLIBRSVG_DATADIR=3D"\"/usr/share\"" =C2= =A0 -pthread -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng15 -I/usr/i= nclude/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libxml2 -I/usr/i= nclude/pango-1.0 -I/usr/include/freetype2 -I/usr/include/cairo -I/usr/inclu= de/pixman-1 -I/usr/include/libdrm =C2=A0 -I/usr/include/libcroco-0.6 -I/usr= /include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libxml2 =C2=A0= -DHAVE_LIBCROCO=3D1 =C2=A0 -O2 -march=3Dpentium-m -pipe -c -o librsvg_2_la= -librsvg-enum-types.lo `test -f 'librsvg-enum-types.c' || echo '= ;./'`librsvg-enum-types.c
=C2=A0 CCLD =C2=A0 <= a href=3D"http://librsvg-2.la">librsvg-2.la
=C2=A0 CCLD =C2=A0 rsvg-convert
=C2=A0 GISC= AN Rsvg-2.0.gir
=C2=A0 CCLD =C2=A0 r= svg-view
In file included from <stdin>:19:0:
/var/tmp/portage/gnome-base/librsvg-2.34= .2/work/librsvg-2.34.2/rsvg-cairo-render.h:32:19: fatal error: cairo.h: No = such file or directory
compilation terminat= ed.
Erro= r while processing the source.
make[2]: *** [Rsvg-2.0.gir] Error 1
make[2]: *** Waiting= for unfinished jobs....
make[2]: Leaving directory `/var/tmp/portage/gnome-base/li= brsvg-2.34.2/work/librsvg-2.34.2'
make[1]: *** [all-re= cursive] Error 1
make[1]: Leaving directory `/var/tmp/portage/gnome-base/librsvg-2.= 34.2/work/librsvg-2.34.2'
make: *** [all] Erro= r 2
=C2= =A0* ERROR: gnome-base/librsvg-2.34.2 failed (compile phase):
<= div>=C2=A0* =C2=A0 emake = failed
=C2=A0*=C2=A0=
=C2=A0* If you= need support, post the output of 'emerge --info =3Dgnome-base/librsvg-= 2.34.2',
=C2=A0* the complete= build log and the output of 'emerge -pqv =3Dgnome-base/librsvg-2.34.2&= #39;.
= =C2=A0* The complete build log is located at '/var/tmp/portage/gnome-ba= se/librsvg-2.34.2/temp/build.log'.
=C2=A0* The ebuild e= nvironment file is located at '/var/tmp/portage/gnome-base/librsvg-2.34= .2/temp/environment'.
=C2=A0* S: '/var/tmp/portage/gnome-base/librsvg-2.34.= 2/work/librsvg-2.34.2'


=
--
=E9=AB=98=E9=87=91=E5=9F=B9
--20cf30244fefa30c2504b810758e-- --20cf30244fefa30c3404b8107590 Content-Type: application/octet-stream; name=environment Content-Disposition: attachment; filename=environment Content-Transfer-Encoding: base64 X-Attachment-Id: f_gy7c0sgk1 ZGVjbGFyZSAteCBBTFNBX0NBUkRTPSIiCmRlY2xhcmUgLXggQUxTQV9QQ01fUExVR0lOUz0iYWRw Y20gYWxhdyBhc3ltIGNvcHkgZG1peCBkc2hhcmUgZHNub29wIGVtcHR5IGV4dHBsdWcgZmlsZSBo b29rcyBpZWM5NTggaW9wbHVnIGxhZHNwYSBsZmxvYXQgbGluZWFyIG1ldGVyIG1tYXBfZW11bCBt dWxhdyBtdWx0aSBudWxsIHBsdWcgcmF0ZSByb3V0ZSBzaGFyZSBzaG0gc29mdHZvbCIKZGVjbGFy ZSAteCBBUEFDSEUyX01PRFVMRVM9ImFjdGlvbnMgYWxpYXMgYXV0aF9iYXNpYyBhdXRobl9hbGlh cyBhdXRobl9hbm9uIGF1dGhuX2RibSBhdXRobl9kZWZhdWx0IGF1dGhuX2ZpbGUgYXV0aHpfZGJt IGF1dGh6X2RlZmF1bHQgYXV0aHpfZ3JvdXBmaWxlIGF1dGh6X2hvc3QgYXV0aHpfb3duZXIgYXV0 aHpfdXNlciBhdXRvaW5kZXggY2FjaGUgY2dpIGNnaWQgZGF2IGRhdl9mcyBkYXZfbG9jayBkZWZs YXRlIGRpciBkaXNrX2NhY2hlIGVudiBleHBpcmVzIGV4dF9maWx0ZXIgZmlsZV9jYWNoZSBmaWx0 ZXIgaGVhZGVycyBpbmNsdWRlIGluZm8gbG9nX2NvbmZpZyBsb2dpbyBtZW1fY2FjaGUgbWltZSBt aW1lX21hZ2ljIG5lZ290aWF0aW9uIHJld3JpdGUgc2V0ZW52aWYgc3BlbGluZyBzdGF0dXMgdW5p cXVlX2lkIHVzZXJkaXIgdXNlcnRyYWNrIHZob3N0X2FsaWFzIgpkZWNsYXJlIC14IEFSQ0g9Ing4 NiIKZGVjbGFyZSAtLSBBVF9NNERJUj0iIgpkZWNsYXJlIC0tIEFUX1NZU19NNERJUj0iIgpkZWNs YXJlIC0tIEFVVE9UT09MU19BVVRPX0RFUEVORD0ieWVzIgpkZWNsYXJlIC0tIEFVVE9UT09MU19E RVBFTkQ9Inx8ICggPXN5cy1kZXZlbC9hdXRvbWFrZS0xLjExKiAgKSA+PXN5cy1kZXZlbC9hdXRv Y29uZi0yLjYxIHN5cy1kZXZlbC9saWJ0b29sIgpkZWNsYXJlIC14IEJPT1RTVFJBUF9VU0U9ImN4 eCB1bmljb2RlIgpkZWNsYXJlIC14IENBTExJR1JBX0ZFQVRVUkVTPSJrZXhpIHdvcmRzIGZsb3cg cGxhbiBzdGFnZSB0YWJsZXMga3JpdGEga2FyYm9uIGJyYWluZHVtcCIKZGVjbGFyZSAteCBDQU1F UkFTPSJwdHAyIgpkZWNsYXJlIC14IENCVUlMRD0iaTY4Ni1wYy1saW51eC1nbnUiCmRlY2xhcmUg LXggQ0ZMQUdTPSItTzIgLW1hcmNoPXBlbnRpdW0tbSAtcGlwZSIKZGVjbGFyZSAteCBDRkxBR1Nf ZGVmYXVsdApkZWNsYXJlIC14IENIT1NUPSJpNjg2LXBjLWxpbnV4LWdudSIKZGVjbGFyZSAteCBD SE9TVF9kZWZhdWx0PSJpNjg2LXBjLWxpbnV4LWdudSIKZGVjbGFyZSAteCBDT0xMRUNURF9QTFVH SU5TPSJkZiBpbnRlcmZhY2UgaXJxIGxvYWQgbWVtb3J5IHJyZHRvb2wgc3dhcCBzeXNsb2ciCmRl Y2xhcmUgLXggQ1JPU1NDT01QSUxFX09QVFM9IiIKZGVjbGFyZSAteCBDVEFSR0VUX2RlZmF1bHQ9 Imk2ODYtcGMtbGludXgtZ251IgpkZWNsYXJlIC14IENYWEZMQUdTPSItTzIgLW1hcmNoPXBlbnRp dW0tbSAtcGlwZSIKZGVjbGFyZSAteCBERUZBVUxUX0FCST0iZGVmYXVsdCIKZGVjbGFyZSAteCBE RUZJTkVEX1BIQVNFUz0iIGNvbXBpbGUgY29uZmlndXJlIGluc3RhbGwgcG9zdGluc3QgcG9zdHJt IHByZWluc3QgcHJlcGFyZSBzZXR1cCB1bnBhY2siCmRlY2xhcmUgREVQRU5EPSI+PW1lZGlhLWxp YnMvZm9udGNvbmZpZy0xLjAuMQoJPj1tZWRpYS1saWJzL2ZyZWV0eXBlLTIKCT49ZGV2LWxpYnMv Z2xpYi0yLjI0OjIKCT49eDExLWxpYnMvY2Fpcm8tMS4yCgk+PXgxMS1saWJzL3BhbmdvLTEuMTAK CT49ZGV2LWxpYnMvbGlieG1sMi0yLjQuNzoyCgk+PWRldi1saWJzL2xpYmNyb2NvLTAuNi4xCgl4 MTEtbGlicy9nZGstcGl4YnVmOjJbaW50cm9zcGVjdGlvbj9dCglndGs/ICggPj14MTEtbGlicy9n dGsrLTIuMTY6MiApCglndGszPyAoID49eDExLWxpYnMvZ3RrKy0yLjkwLjA6MyApCglpbnRyb3Nw ZWN0aW9uPyAoID49ZGV2LWxpYnMvZ29iamVjdC1pbnRyb3NwZWN0aW9uLTAuMTAuOCApCgk+PWRl di11dGlsL3BrZ2NvbmZpZy0wLjEyCglkb2M/ICggPj1kZXYtdXRpbC9ndGstZG9jLTEuMTMgKQoK CT49ZGV2LXV0aWwvZ3RrLWRvYy1hbS0xLjEzICBhcHAtYXJjaC94ei11dGlscyA+PXN5cy1hcHBz L3NlZC00IHx8ICggPXN5cy1kZXZlbC9hdXRvbWFrZS0xLjExKiAgKSA+PXN5cy1kZXZlbC9hdXRv Y29uZi0yLjYxIHN5cy1kZXZlbC9saWJ0b29sID49YXBwLWFkbWluL2VzZWxlY3QtcHl0aG9uLTIw MDkxMjMwID1kZXYtbGFuZy9weXRob24tMioiCmRlY2xhcmUgREVTQ1JJUFRJT049IlNjYWxhYmxl IFZlY3RvciBHcmFwaGljcyAoU1ZHKSByZW5kZXJpbmcgbGlicmFyeSIKZGVjbGFyZSAteCBERVNL VE9QX1NFU1NJT049Imdub21lIgpkZWNsYXJlIC14IERFU1RUUkVFPSIvdXNyIgpkZWNsYXJlIC14 IERJUk9QVElPTlM9Ii1tMDc1NSIKZGVjbGFyZSAtLSBET0NTPSJBVVRIT1JTIENoYW5nZUxvZyBS RUFETUUgTkVXUyBUT0RPIgpkZWNsYXJlIC14IEVBUEk9IjQiCmRlY2xhcmUgLS0gRUNMQVNTRElS X0xPQ0FMPSIvdXNyL3BvcnRhZ2UvZWNsYXNzIgpkZWNsYXJlIC0tIEVDT05GX1NPVVJDRT0iLiIK ZGVjbGFyZSAteCBFTElCQz0iZ2xpYmMiCmRlY2xhcmUgLS0gRUxUQ09ORj0iIgpkZWNsYXJlIC14 IEVMVF9BUFBMSUVEX1BBVENIRVM9IiIKZGVjbGFyZSAtLSBFUEFUQ0hfRVhDTFVERT0iIgpkZWNs YXJlIC0tIEVQQVRDSF9GT1JDRT0ibm8iCmRlY2xhcmUgLS0gRVBBVENIX01VTFRJX01TRz0iQXBw bHlpbmcgdmFyaW91cyBwYXRjaGVzIChidWdmaXhlcy91cGRhdGVzKSAuLi4iCmRlY2xhcmUgLS0g RVBBVENIX09QVFM9Ii1nMCAtRSAtLW5vLWJhY2t1cC1pZi1taXNtYXRjaCIKZGVjbGFyZSAtLSBF UEFUQ0hfU0lOR0xFX01TRz0iIgpkZWNsYXJlIC0tIEVQQVRDSF9TT1VSQ0U9Ii92YXIvdG1wL3Bv cnRhZ2UvZ25vbWUtYmFzZS9saWJyc3ZnLTIuMzQuMi93b3JrL3BhdGNoIgpkZWNsYXJlIC0tIEVQ QVRDSF9TVUZGSVg9InBhdGNoLmJ6MiIKZGVjbGFyZSAteCBFUFlUSE9OPSJweXRob24yLjciCmRl Y2xhcmUgLXggRVhFT1BUSU9OUz0iLW0wNzU1IgpkZWNsYXJlIC14IEZDRkxBR1M9IiIKZGVjbGFy ZSAteCBGRVRDSENPTU1BTkRfU1NIPSJiYXNoIC1jIFwieD1cXFwkezIjc3NoOi8vfSA7IGhvc3Q9 XFxcJHt4JSUvKn0gOyBwb3J0PVxcXCR7aG9zdCMjKjp9IDsgaG9zdD1cXFwke2hvc3QlOip9IDsg W1sgXFxcJHtob3N0fSA9IFxcXCR7cG9ydH0gXV0gJiYgcG9ydD0yMiA7IGV4ZWMgcnN5bmMgLS1y c2g9XFxcInNzaCAtcFxcXCR7cG9ydH1cXFwiIC1hdlAgXFxcIlxcXCR7aG9zdH06L1xcXCR7eCMq L31cXFwiIFxcXCJcXFwkMVxcXCJcIiByc3luYyBcIlwke0RJU1RESVJ9L1wke0ZJTEV9XCIgXCJc JHtVUkl9XCIiCmRlY2xhcmUgLXggRkZMQUdTPSIiCmRlY2xhcmUgLS0gRzJDT05GPSIKCQktLWRp c2FibGUtc3RhdGljCgkJLS1kaXNhYmxlLXRvb2xzCgkJLS1lbmFibGUtZ3RrLXRoZW1lCgkJLS1l bmFibGUtaW50cm9zcGVjdGlvbgoJCS0td2l0aC1jcm9jbwoJCS0tZW5hYmxlLXBpeGJ1Zi1sb2Fk ZXIgLS13aXRoLWd0az0yLjAgLS1kaXNhYmxlLWd0ay1kb2MgLS1kaXNhYmxlLW1haW50YWluZXIt bW9kZSIKZGVjbGFyZSAteCBHQ0NfU1BFQ1M9IiIKZGVjbGFyZSAtLSBHQ09ORlRPT0xfQklOPSIv dXNyL2Jpbi9nY29uZnRvb2wtMiIKZGVjbGFyZSAtLSBHQ09ORl9ERUJVRz0ibm8iCmRlY2xhcmUg LXggR0RLX1VTRV9YRlQ9IjEiCmRlY2xhcmUgLXggR0RNU0VTU0lPTj0iZ25vbWUiCmRlY2xhcmUg LXggR0RNX0xBTkc9ImVuX1VTLlVURi04IgpkZWNsYXJlIC14IEdETV9YU0VSVkVSX0xPQ0FUSU9O PSJsb2NhbCIKZGVjbGFyZSAtLSBHTElCX0NPTVBJTEVfU0NIRU1BUz0iL3Vzci9iaW4vZ2xpYi1j b21waWxlLXNjaGVtYXMiCmRlY2xhcmUgLS0gR05PTUUyX0xBX1BVTlQ9InllcyIKZGVjbGFyZSAt eCBHTk9NRV9ERVNLVE9QX1NFU1NJT05fSUQ9InRoaXMtaXMtZGVwcmVjYXRlZCIKZGVjbGFyZSAt eCBHTk9NRV9LRVlSSU5HX0NPTlRST0w9Ii90bXAva2V5cmluZy1iOUJReWUiCmRlY2xhcmUgLXgg R05PTUVfS0VZUklOR19QSUQ9IjExODIiCmRlY2xhcmUgLS0gR05PTUVfT1JHX01PRFVMRT0ibGli cnN2ZyIKZGVjbGFyZSAtLSBHTk9NRV9PUkdfUFZQPSIyLjM0IgpkZWNsYXJlIC0tIEdOT01FX1RB UkJBTExfU1VGRklYPSJ4eiIKZGVjbGFyZSAteCBHUFNEX1BST1RPQ09MUz0iYXNodGVjaCBhaXZk bSBlYXJ0aG1hdGUgZXZlcm1vcmUgZnYxOCBnYXJtaW4gZ2FybWludHh0IGdwc2Nsb2NrIGl0cmF4 IG10azMzMDEgbm1lYSBudHJpcCBuYXZjb20gb2NlYW5zZXJ2ZXIgb2xkc3R5bGUgb25jb3JlIHJ0 Y20xMDR2MiBydGNtMTA0djMgc2lyZiBzdXBlcnN0YXIyIHRpbWluZyB0c2lwIHRyaXBtYXRlIHRu dCB1YngiCmRlY2xhcmUgLXggR1JVQl9QTEFURk9STVM9IiIKZGVjbGFyZSAteCBHU0VUVElOR1Nf QkFDS0VORD0iZGNvbmYiCmRlY2xhcmUgLXggR1NUX1JFR0lTVFJZPSIvdmFyL3RtcC9wb3J0YWdl L2dub21lLWJhc2UvbGlicnN2Zy0yLjM0LjIvdGVtcC9yZWdpc3RyeS54bWwiCmRlY2xhcmUgLS0g R1RLX1VQREFURV9JQ09OX0NBQ0hFPSIvdXNyL2Jpbi9ndGstdXBkYXRlLWljb24tY2FjaGUiCmRl Y2xhcmUgLXggR19IT01FPSIvdmFyL3RtcC9wb3J0YWdlL2dub21lLWJhc2UvbGlicnN2Zy0yLjM0 LjIvdGVtcCIKZGVjbGFyZSAteCBIRz0iL3Vzci9iaW4vaGciCmRlY2xhcmUgSE9NRVBBR0U9Imh0 dHA6Ly9saWJyc3ZnLnNvdXJjZWZvcmdlLm5ldC8iCmRlY2xhcmUgLXggSU5IRVJJVEVEPSIgZmRv LW1pbWUgbXVsdGlsaWIgdG9vbGNoYWluLWZ1bmNzIGxpYnRvb2wgcG9ydGFiaWxpdHkgdXNlciBl dXRpbHMgdmVyc2lvbmF0b3IgZ25vbWUub3JnIGdub21lMi11dGlscyBnbm9tZTIgYXV0b3Rvb2xz IHB5dGhvbiIKZGVjbGFyZSAteCBJTlBVVF9ERVZJQ0VTPSJrZXlib2FyZCBtb3VzZSBldmRldiIK ZGVjbGFyZSAteCBJTlNERVNUVFJFRT0iIgpkZWNsYXJlIC14IElOU09QVElPTlM9Ii1tMDY0NCIK ZGVjbGFyZSBJVVNFPSJkb2MgK2d0ayBndGszICtpbnRyb3NwZWN0aW9uIHRvb2xzICIKZGVjbGFy ZSAteCBKQVZBQz0iL2V0Yy9qYXZhLWNvbmZpZy0yL2N1cnJlbnQtc3lzdGVtLXZtL2Jpbi9qYXZh YyIKZGVjbGFyZSAteCBKQVZBX0hPTUU9Ii9ldGMvamF2YS1jb25maWctMi9jdXJyZW50LXN5c3Rl bS12bSIKZGVjbGFyZSAteCBKREtfSE9NRT0iL2V0Yy9qYXZhLWNvbmZpZy0yL2N1cnJlbnQtc3lz dGVtLXZtIgpkZWNsYXJlIC14IEpZVEhPTl9TWVNURU1fQ0FDSEVESVI9IjEiCmRlY2xhcmUgLXgg S0VSTkVMPSJsaW51eCIKZGVjbGFyZSAteCBLRVJORUxfQUJJPSJkZWZhdWx0IgpkZWNsYXJlIC14 IEtFWVdPUkRTPSJ+YWxwaGEgYW1kNjQgYXJtIGhwcGEgfmlhNjQgfm1pcHMgfnBwYyB+cHBjNjQg fnNoIH5zcGFyYyB4ODYgfng4Ni1mYnNkIH54ODYtZnJlZWJzZCB+eDg2LWludGVyaXggfmFtZDY0 LWxpbnV4IH54ODYtbGludXggfng4Ni1tYWNvcyB+c3BhcmMtc29sYXJpcyB+eDY0LXNvbGFyaXMg fng4Ni1zb2xhcmlzIgpkZWNsYXJlIC14IExBTkc9ImVuX1VTLnV0ZjgiCmRlY2xhcmUgLXggTENE X0RFVklDRVM9ImJheXJhZCBjZm9udHogY2ZvbnR6NjMzIGdsayBoZDQ0NzgwIGxiMjE2IGxjZG0w MDEgbXR4b3JiIG5jdXJzZXMgdGV4dCIKZGVjbGFyZSAteCBMREZMQUdTPSItV2wsLU8xIC1XbCwt LWFzLW5lZWRlZCIKZGVjbGFyZSAteCBMREZMQUdTX2RlZmF1bHQKZGVjbGFyZSAteCBMSUJESVJf ZGVmYXVsdD0ibGliIgpkZWNsYXJlIC14IExJQk9QVElPTlM9Ii1tMDY0NCIKZGVjbGFyZSAteCBM SUNFTlNFPSJMR1BMLTIiCmRlY2xhcmUgLXggTElOR1VBUz0iZW4gZW5fVVMgemggemhfQ04iCmRl Y2xhcmUgLXggTUFLRU9QVFM9Ii1qMiIKZGVjbGFyZSAteCBNVUxUSUxJQl9BQklTPSJkZWZhdWx0 IgpkZWNsYXJlIC14IE5FVEJFQU5TPSJhcGlzdXBwb3J0IGNuZCBncm9vdnkgZ3NmIGhhcm5lc3Mg aWRlIGlkZW50aXR5IGoyZWUgamF2YSBtb2JpbGl0eSBuYiBwaHAgcHJvZmlsZXIgc29hIHZpc3Vh bHdlYiB3ZWJjb21tb24gd2Vic3ZjY29tbW9uIHhtbCIKZGVjbGFyZSAteCBPUEVOR0xfUFJPRklM RT0ieG9yZy14MTEiCmRlY2xhcmUgLXggT1JCSVRfU09DS0VURElSPSIvdG1wL29yYml0LXJvb3Qi CmRlY2xhcmUgLXggUEFUSD0iL3Vzci9saWIvcG9ydGFnZS9iaW4vZWJ1aWxkLWhlbHBlcnMvNDov dXNyL2xpYi9wb3J0YWdlL2Jpbi9lYnVpbGQtaGVscGVyczovdXNyL2xvY2FsL3NiaW46L3Vzci9s b2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW46L29wdC9iaW46L3Vzci9pNjg2 LXBjLWxpbnV4LWdudS9nY2MtYmluLzQuNS4zIgpkZWNsYXJlIFBERVBFTkQ9IiIKZGVjbGFyZSAt eCBQSFBfVEFSR0VUUz0iIgpkZWNsYXJlIC1hIFBPUlRBR0VfRE9DT01QUkVTUz0nKFswXT0iL3Vz ci9zaGFyZS9kb2MiIFsxXT0iL3Vzci9zaGFyZS9pbmZvIiBbMl09Ii91c3Ivc2hhcmUvbWFuIikn CmRlY2xhcmUgLWEgUE9SVEFHRV9ET0NPTVBSRVNTX1NLSVA9JyhbMF09Ii91c3Ivc2hhcmUvZG9j L2xpYnJzdmctMi4zNC4yL2h0bWwiKScKZGVjbGFyZSAteCBQUkVMSU5LX1BBVEhfTUFTSz0iL3Vz ci9saWIvbGliZnJlZWJsMy5zbzovdXNyL2xpYi9saWJuc3NkYm0zLnNvOi91c3IvbGliL2xpYnNv ZnRva24zLnNvIgpkZWNsYXJlIC14IFBST0ZJTEVfT05MWV9WQVJJQUJMRVM9IkFSQ0ggRUxJQkMg S0VSTkVMIFVTRVJMQU5EIgpkZWNsYXJlIC14IFBST1BFUlRJRVM9IiIKZGVjbGFyZSAteCBQUk9W SURFPSIiCmRlY2xhcmUgLXggUFlUSE9ORE9DU18yXzc9Ii91c3Ivc2hhcmUvZG9jL3B5dGhvbi1k b2NzLTIuNy4xL2h0bWwvbGlicmFyeSIKZGVjbGFyZSAteCBQWVRIT05ET05UV1JJVEVCWVRFQ09E RT0iMSIKZGVjbGFyZSAtLSBQWVRIT05fQUJJPSIyLjciCmRlY2xhcmUgLS0gUFlUSE9OX0NPTE9S Uz0iMCIKZGVjbGFyZSAtLSBQWVRIT05fREVQRU5EPSIyIgpkZWNsYXJlIC0tIFBZVEhPTl9QS0df U0VUVVBfRVhFQ1VURUQ9IjEiCmRlY2xhcmUgLS0gUFlUSE9OX1JFUVVFU1RFRF9BQ1RJVkVfVkVS U0lPTj0iMiIKZGVjbGFyZSAtLSBQWVRIT05fU0FOSVRZX0NIRUNLU19FWEVDVVRFRD0iMSIKZGVj bGFyZSAtLSBQWVRIT05fVEVTVF9WRVJCT1NJVFk9IjEiCmRlY2xhcmUgLXggUUVNVV9TT0ZUTU1V X1RBUkdFVFM9ImkzODYiCmRlY2xhcmUgLXggUUVNVV9VU0VSX1RBUkdFVFM9ImkzODYiCmRlY2xh cmUgUkRFUEVORD0iPj1tZWRpYS1saWJzL2ZvbnRjb25maWctMS4wLjEKCT49bWVkaWEtbGlicy9m cmVldHlwZS0yCgk+PWRldi1saWJzL2dsaWItMi4yNDoyCgk+PXgxMS1saWJzL2NhaXJvLTEuMgoJ Pj14MTEtbGlicy9wYW5nby0xLjEwCgk+PWRldi1saWJzL2xpYnhtbDItMi40Ljc6MgoJPj1kZXYt bGlicy9saWJjcm9jby0wLjYuMQoJeDExLWxpYnMvZ2RrLXBpeGJ1ZjoyW2ludHJvc3BlY3Rpb24/ XQoJZ3RrPyAoID49eDExLWxpYnMvZ3RrKy0yLjE2OjIgKQoJZ3RrMz8gKCA+PXgxMS1saWJzL2d0 aystMi45MC4wOjMgKQoJaW50cm9zcGVjdGlvbj8gKCA+PWRldi1saWJzL2dvYmplY3QtaW50cm9z cGVjdGlvbi0wLjEwLjggKSA+PWFwcC1hZG1pbi9lc2VsZWN0LXB5dGhvbi0yMDA5MTIzMCA9ZGV2 LWxhbmcvcHl0aG9uLTIqIgpkZWNsYXJlIFJFUVVJUkVEX1VTRT0iIgpkZWNsYXJlIC14IFJFU1RS SUNUPSIiCmRlY2xhcmUgLXggUkVTVU1FQ09NTUFORF9TU0g9ImJhc2ggLWMgXCJ4PVxcXCR7MiNz c2g6Ly99IDsgaG9zdD1cXFwke3glJS8qfSA7IHBvcnQ9XFxcJHtob3N0IyMqOn0gOyBob3N0PVxc XCR7aG9zdCU6Kn0gOyBbWyBcXFwke2hvc3R9ID0gXFxcJHtwb3J0fSBdXSAmJiBwb3J0PTIyIDsg ZXhlYyByc3luYyAtLXJzaD1cXFwic3NoIC1wXFxcJHtwb3J0fVxcXCIgLWF2UCBcXFwiXFxcJHto b3N0fTovXFxcJHt4IyovfVxcXCIgXFxcIlxcXCQxXFxcIlwiIHJzeW5jIFwiXCR7RElTVERJUn0v XCR7RklMRX1cIiBcIlwke1VSSX1cIiIKZGVjbGFyZSAteCBSVUJZX1RBUkdFVFM9IiIKZGVjbGFy ZSAteCBTPSIvdmFyL3RtcC9wb3J0YWdlL2dub21lLWJhc2UvbGlicnN2Zy0yLjM0LjIvd29yay9s aWJyc3ZnLTIuMzQuMiIKZGVjbGFyZSAteCBTQU5EQk9YX0RFQlVHPSIwIgpkZWNsYXJlIC14IFNB TkRCT1hfREVOWT0iIgpkZWNsYXJlIC14IFNBTkRCT1hfUElEPSIyMjE1OCIKZGVjbGFyZSAteCBT QU5EQk9YX1BSRURJQ1Q9Ii92YXIvdG1wL3BvcnRhZ2UvZ25vbWUtYmFzZS9saWJyc3ZnLTIuMzQu Mi9ob21lZGlyOi9kZXYvY3J5cHRvOi9kZXYvcmFuZG9tOi9wcm9jL3NlbGYvY29yZWR1bXBfZmls dGVyOi9kZXYvcmFuZG9tOi9wcm9jL3NlbGYvY29yZWR1bXBfZmlsdGVyOi92YXIvY2FjaGUvZm9u dGNvbmZpZyIKZGVjbGFyZSAteCBTQU5EQk9YX1JFQUQ9Ii86L3Zhci90bXAiCmRlY2xhcmUgLXgg U0FOREJPWF9WRVJCT1NFPSIxIgpkZWNsYXJlIC14IFNBTkRCT1hfV1JJVEU9IjovZGV2L2NvbnNv bGU6L2Rldi9mZDovZGV2L2Z1bGw6L2Rldi9udWxsOi9kZXYvcHRzLzovZGV2L3B0eTovZGV2L3No bTovZGV2L3R0czovZGV2L3R0eTovZGV2L3ZjLzovZGV2L3plcm86L3Byb2Mvc2VsZi9mZDovdG1w LzovdXNyL2xpYjMyL2NmOi91c3IvbGliMzIvY29uZnRlc3Q6L3Vzci9saWI2NC9jZjovdXNyL2xp YjY0L2NvbmZ0ZXN0Oi91c3IvbGliL2NmOi91c3IvbGliL2NvbmZ0ZXN0Oi91c3IvdG1wL2NmOi91 c3IvdG1wL2NvbmZ0ZXN0Oi92YXIvY2FjaGUvanl0aG9uOi92YXIvdG1wOi92YXIvdG1wLzovdmFy L3RtcC9wb3J0YWdlL2dub21lLWJhc2UvbGlicnN2Zy0yLjM0LjIvaG9tZWRpci8uYmFzaF9oaXN0 b3J5Oi9yb290Ly5nbm9tZTIiCmRlY2xhcmUgLS0gU0NST0xMS0VFUEVSX0RJUj0iL3Zhci9saWIv c2Nyb2xsa2VlcGVyIgpkZWNsYXJlIC0tIFNDUk9MTEtFRVBFUl9VUERBVEU9IjEiCmRlY2xhcmUg LS0gU0NST0xMS0VFUEVSX1VQREFURV9CSU49Ii91c3IvYmluL3Njcm9sbGtlZXBlci11cGRhdGUi CmRlY2xhcmUgLXggU0VTU0lPTl9NQU5BR0VSPSJsb2NhbC9MYXB0b3A6QC90bXAvLklDRS11bml4 LzEyNTgsdW5peC9MYXB0b3A6L3RtcC8uSUNFLXVuaXgvMTI1OCIKZGVjbGFyZSAteCBTTE9UPSIy IgpkZWNsYXJlIFNSQ19VUkk9Im1pcnJvcjovL2dub21lL3NvdXJjZXMvbGlicnN2Zy8yLjM0L2xp YnJzdmctMi4zNC4yLnRhci54eiBtaXJyb3I6Ly9nZW50b28vaW50cm9zcGVjdGlvbi5tNC5iejIi CmRlY2xhcmUgLXggVVNFPSJlbGliY19nbGliYyBndGsgaW50cm9zcGVjdGlvbiBrZXJuZWxfbGlu dXggdXNlcmxhbmRfR05VIHg4NiIKZGVjbGFyZSAteCBVU0VSTEFORD0iR05VIgpkZWNsYXJlIC14 IFVTRVJOQU1FPSJHYW9KaW5wZWkiCmRlY2xhcmUgLS0gVVNFX0VJTlNUQUxMPSIiCmRlY2xhcmUg LXggVkJPWF9BUFBfSE9NRT0iL29wdC9WaXJ0dWFsQm94IgpkZWNsYXJlIC14IFZJREVPX0NBUkRT PSIiCmRlY2xhcmUgLXggVklTVUFMPSIvdXNyL2Jpbi92aSIKZGVjbGFyZSAteCBXQU5UX0FVVE9D T05GPSIyLjUiCmRlY2xhcmUgLXggV0FOVF9BVVRPTUFLRT0iMS4xMSIKZGVjbGFyZSAteCBXQU5U X0xJQlRPT0w9ImxhdGVzdCIKZGVjbGFyZSAteCBXSU5ET1dJRD0iNjA4MTc0MTIiCmRlY2xhcmUg LXggV0lORE9XUEFUSD0iNyIKZGVjbGFyZSAteCBYREdfQ0FDSEVfSE9NRT0iL3Zhci90bXAvcG9y dGFnZS9nbm9tZS1iYXNlL2xpYnJzdmctMi4zNC4yL3RlbXAvLmNhY2hlIgpkZWNsYXJlIC14IFhE R19DT05GSUdfRElSUz0iL2V0Yy94ZGciCmRlY2xhcmUgLXggWERHX0NPTkZJR19IT01FPSIvdmFy L3RtcC9wb3J0YWdlL2dub21lLWJhc2UvbGlicnN2Zy0yLjM0LjIvdGVtcC8uY29uZmlnIgpkZWNs YXJlIC14IFhER19EQVRBX0RJUlM9Ii91c3IvbG9jYWwvc2hhcmU6L3Vzci9zaGFyZTovdXNyL3No YXJlL2dkbSIKZGVjbGFyZSAteCBYREdfREFUQV9IT01FPSIvdmFyL3RtcC9wb3J0YWdlL2dub21l LWJhc2UvbGlicnN2Zy0yLjM0LjIvdGVtcC8ubG9jYWwvc2hhcmUiCmRlY2xhcmUgLXggWERHX01F TlVfUFJFRklYPSJnbm9tZS0iCmRlY2xhcmUgLXggWERHX1JVTlRJTUVfRElSPSIvdmFyL3RtcC9w b3J0YWdlL2dub21lLWJhc2UvbGlicnN2Zy0yLjM0LjIvdGVtcC9ydW4iCmRlY2xhcmUgLXggWERH X1NFU1NJT05fQ09PS0lFPSI3ZDA1ZGNmMjA3NTRjYzYxM2I4ODljY2UwMDAwMDBiYy0xMzI4MjY4 OTkyLjE5MjQ1MS0xMTIzNzIxNzQ1IgpkZWNsYXJlIC14IFhUQUJMRVNfQURET05TPSJxdW90YTIg cHNkIHBrbm9jayBsc2NhbiBsZW5ndGgyIGlwdjRvcHRpb25zIGlwc2V0IGlwcDJwIGlmYWNlIGdl b2lwIGZ1enp5IGNvbmRpdGlvbiB0ZWUgdGFycGl0IHN5c3JxIHN0ZWFsIHJhd25hdCBsb2dtYXJr IGlwbWFyayBkaGNwbWFjIGRlbHVkZSBjaGFvcyBhY2NvdW50IgpkZWNsYXJlIC1hIF9DUFlUSE9O Ml9HTE9CQUxMWV9TVVBQT1JURURfQUJJUz0nKFswXT0iMi40IiBbMV09IjIuNSIgWzJdPSIyLjYi IFszXT0iMi43IiknCmRlY2xhcmUgLWEgX0NQWVRIT04zX0dMT0JBTExZX1NVUFBPUlRFRF9BQklT PScoWzBdPSIzLjEiIFsxXT0iMy4yIiknCmRlY2xhcmUgLXggX0VfRE9DREVTVFRSRUVfPSIiCmRl Y2xhcmUgLXggX0VfRVhFREVTVFRSRUVfPSIiCmRlY2xhcmUgLWEgX0pZVEhPTl9HTE9CQUxMWV9T VVBQT1JURURfQUJJUz0nKFswXT0iMi41LWp5dGhvbiIpJwpkZWNsYXJlIC0tIF9MQVRFU1RfQVVU T01BS0U9IjEuMTEiCmRlY2xhcmUgLWEgX1BZUFlfR0xPQkFMTFlfU1VQUE9SVEVEX0FCSVM9Jyhb MF09IjIuNy1weXB5LTEuNyIpJwpkZWNsYXJlIC0tIF9QWVRIT05fQUJJX0VYVFJBQ1RJT05fQ09N TUFORD0iaW1wb3J0IHBsYXRmb3JtCmltcG9ydCBzeXMKc3lzLnN0ZG91dC53cml0ZShcIi5cIi5q b2luKHN0cih4KSBmb3IgeCBpbiBzeXMudmVyc2lvbl9pbmZvWzoyXSkpCmlmIHBsYXRmb3JtLnN5 c3RlbSgpWzo0XSA9PSBcIkphdmFcIjoKCXN5cy5zdGRvdXQud3JpdGUoXCItanl0aG9uXCIpCmVs aWYgaGFzYXR0cihwbGF0Zm9ybSwgXCJweXRob25faW1wbGVtZW50YXRpb25cIikgYW5kIHBsYXRm b3JtLnB5dGhvbl9pbXBsZW1lbnRhdGlvbigpID09IFwiUHlQeVwiOgoJc3lzLnN0ZG91dC53cml0 ZShcIi1weXB5LVwiICsgXCIuXCIuam9pbihzdHIoeCkgZm9yIHggaW4gc3lzLnB5cHlfdmVyc2lv bl9pbmZvWzoyXSkpIgpkZWNsYXJlIC0tIF9QWVRIT05fQUJJX1BBVFRFUk5fUkVHRVg9IihbWzph bG51bTpdXXxcXC58LXxcXCp8XFxbfFxcXSkrIgpkZWNsYXJlIC0tIF9QWVRIT05fRUNMQVNTX0lO SEVSSVRFRD0iMSIKZGVjbGFyZSAtYSBfUFlUSE9OX0dMT0JBTExZX1NVUFBPUlRFRF9BQklTPSco WzBdPSIyLjQiIFsxXT0iMi41IiBbMl09IjIuNiIgWzNdPSIyLjciIFs0XT0iMy4xIiBbNV09IjMu MiIgWzZdPSIyLjUtanl0aG9uIiBbN109IjIuNy1weXB5LTEuNyIpJwpkZWNsYXJlIC0tIF9QWVRI T05fU0hFQkFOR19CQVNFX1BBUlRfUkVHRVg9Il4jIVtbOnNwYWNlOl1dKihbXls6c3BhY2U6XV0q L3Vzci9iaW4vZW52W1s6c3BhY2U6XV0rKT8oW15bOnNwYWNlOl1dKi8pPyhqeXRob258cHlweS1j fHB5dGhvbikiCmRlY2xhcmUgLS0gX19FTFRfTk9URURfVE1QPSJ0cnVlIgpkZWNsYXJlIC0tIF9f X0VDTEFTU19PTkNFX0FVVE9UT09MUz0icmVjdXIgLV8rXitfLSBzcGFuayIKZGVjbGFyZSAtLSBf X19FQ0xBU1NfT05DRV9FVVRJTFM9InJlY3VyIC1fK14rXy0gc3BhbmsiCmRlY2xhcmUgLS0gX19f RUNMQVNTX09OQ0VfTElCVE9PTD0icmVjdXIgLV8rXitfLSBzcGFuayIKZGVjbGFyZSAtLSBfX19F Q0xBU1NfT05DRV9NVUxUSUxJQj0icmVjdXIgLV8rXitfLSBzcGFuayIKZGVjbGFyZSAtLSBfX19F Q0xBU1NfT05DRV9QT1JUQUJJTElUWT0icmVjdXIgLV8rXitfLSBzcGFuayIKZGVjbGFyZSAtLSBf X19FQ0xBU1NfT05DRV9UT09MQ0hBSU5fRlVOQ1M9InJlY3VyIC1fK14rXy0gc3BhbmsiCmRlY2xh cmUgLS0gX19fRUNMQVNTX09OQ0VfVVNFUj0icmVjdXIgLV8rXitfLSBzcGFuayIKZGVjbGFyZSAt LSBfX19FQ0xBU1NfT05DRV9WRVJTSU9OQVRPUj0icmVjdXIgLV8rXitfLSBzcGFuayIKZGVjbGFy ZSAtLSBfbGlidG9vbF9hdG9tPSJzeXMtZGV2ZWwvbGlidG9vbCIKZGVjbGFyZSAtLSBvbWY9Ii4v dG9vbHMvTWFrZWZpbGUuaW4iCmRlY2xhcmUgLS0gcGhhc2VfZnVuYwpFTFRfbGlidG9vbF92ZXJz aW9uICgpIAp7IAogICAgKCB1bnNldCBWRVJTSU9OOwogICAgZXZhbCAkKGdyZXAgLWUgJ15bWzpz cGFjZTpdXSpWRVJTSU9OPScgIiQxIik7CiAgICBlY2hvICIke1ZFUlNJT046LTB9IiApCn0KRUxU X3RyeV9hbmRfYXBwbHlfcGF0Y2ggKCkgCnsgCiAgICBsb2NhbCByZXQ9MDsKICAgIGxvY2FsIGZp bGU9JDE7CiAgICBsb2NhbCBwYXRjaD0kMjsKICAgIGxvY2FsIHNyYz0kMzsKICAgIGxvY2FsIGRp c3A9IiR7c3JjfSBwYXRjaCI7CiAgICBsb2NhbCBsb2c9IiR7VH0vZWxpYnRvb2wubG9nIjsKICAg IGlmIFtbIC16ICR7X19FTFRfTk9URURfVE1QfSBdXTsgdGhlbgogICAgICAgIF9fRUxUX05PVEVE X1RNUD10cnVlOwogICAgICAgIHByaW50ZiAndGVtcCBwYXRjaDogJXNcbicgIiR7cGF0Y2h9IiA+ ICIke2xvZ30iOwogICAgZmk7CiAgICBwcmludGYgJ1xuVHJ5aW5nICVzXG4nICIke2Rpc3B9IiA+ PiAiJHtsb2d9IjsKICAgIGlmIHBhdGNoIC1wMCAtLWRyeS1ydW4gIiR7ZmlsZX0iICIke3BhdGNo fSIgPj4gIiR7bG9nfSIgMj4mMTsgdGhlbgogICAgICAgIGVpbmZvICIgIEFwcGx5aW5nICR7ZGlz cH0gLi4uIjsKICAgICAgICBwYXRjaCAtcDAgLWcwIC0tbm8tYmFja3VwLWlmLW1pc21hdGNoICIk e2ZpbGV9IiAiJHtwYXRjaH0iID4+ICIke2xvZ30iIDI+JjE7CiAgICAgICAgcmV0PSQ/OwogICAg ICAgIGV4cG9ydCBFTFRfQVBQTElFRF9QQVRDSEVTPSIke0VMVF9BUFBMSUVEX1BBVENIRVN9ICR7 c3JjfSI7CiAgICBlbHNlCiAgICAgICAgcmV0PTE7CiAgICBmaTsKICAgIHJldHVybiAiJHtyZXR9 Igp9CkVMVF93YWxrX3BhdGNoZXMgKCkgCnsgCiAgICBsb2NhbCBwYXRjaCB0bXA7CiAgICBsb2Nh bCByZXQ9MTsKICAgIGxvY2FsIGZpbGU9JDE7CiAgICBsb2NhbCBwYXRjaF9zZXQ9JDI7CiAgICBs b2NhbCBwYXRjaF9kaXI9IiQoZWx0X3BhdGNoX2RpcikvJHtwYXRjaF9zZXR9IjsKICAgIGxvY2Fs IHJlbV9pbnRfZGVwPSQzOwogICAgW1sgLXogJHtwYXRjaF9zZXR9IF1dICYmIHJldHVybiAxOwog ICAgW1sgISAtZCAke3BhdGNoX2Rpcn0gXV0gJiYgcmV0dXJuIDE7CiAgICBsb2NhbCBzZWRfYXJn cz0oLWUgInM6QEdFTlRPT19MSUJESVJAOiQoZ2V0X2xpYmRpcik6ZyIpOwogICAgaWYgW1sgLW4g JHtyZW1faW50X2RlcH0gXV07IHRoZW4KICAgICAgICBzZWRfYXJncys9KC1lICJzfEBSRU1fSU5U X0RFUEB8JHtyZW1faW50X2RlcH18ZyIpOwogICAgZmk7CiAgICBwdXNoZCAiJChlbHRfcGF0Y2hf ZGlyKSIgPiAvZGV2L251bGwgfHwgZGllOwogICAgZm9yIHBhdGNoIGluICQoZmluZCAiJHtwYXRj aF9zZXR9IiAtbWF4ZGVwdGggMSAtdHlwZSBmIHwgTENfQUxMPUMgc29ydCAtcik7CiAgICBkbwog ICAgICAgIHRtcD0iJHtUfS9saWJ0b29sLWVsdC5wYXRjaCI7CiAgICAgICAgc2VkICIke3NlZF9h cmdzW0BdfSIgIiR7cGF0Y2h9IiA+ICIke3RtcH0iIHx8IGRpZTsKICAgICAgICBpZiBFTFRfdHJ5 X2FuZF9hcHBseV9wYXRjaCAiJHtmaWxlfSIgIiR7dG1wfSIgIiR7cGF0Y2h9IjsgdGhlbgogICAg ICAgICAgICByZXQ9MDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZmk7CiAgICBkb25lOwog ICAgcG9wZCA+IC9kZXYvbnVsbDsKICAgIHJldHVybiAke3JldH0KfQpQWVRIT04gKCkgCnsgCiAg ICBfcHl0aG9uX2NoZWNrX3B5dGhvbl9wa2dfc2V0dXBfZXhlY3V0aW9uOwogICAgbG9jYWwgQUJJ X291dHB1dD0iMCIgYWJzb2x1dGVfcGF0aF9vdXRwdXQ9IjAiIGZpbmFsX0FCST0iMCIgUFlUSE9O X0FCST0iJHtQWVRIT05fQUJJfSIgcHl0aG9uX2ludGVycHJldGVyIHB5dGhvbjI9IjAiIHB5dGhv bjM9IjAiOwogICAgd2hpbGUgKCgkIykpOyBkbwogICAgICAgIGNhc2UgIiQxIiBpbiAKICAgICAg ICAgICAgLTIpCiAgICAgICAgICAgICAgICBweXRob24yPSIxIgogICAgICAgICAgICA7OwogICAg ICAgICAgICAtMykKICAgICAgICAgICAgICAgIHB5dGhvbjM9IjEiCiAgICAgICAgICAgIDs7CiAg ICAgICAgICAgIC0tQUJJKQogICAgICAgICAgICAgICAgQUJJX291dHB1dD0iMSIKICAgICAgICAg ICAgOzsKICAgICAgICAgICAgLWEgfCAtLWFic29sdXRlLXBhdGgpCiAgICAgICAgICAgICAgICBh YnNvbHV0ZV9wYXRoX291dHB1dD0iMSIKICAgICAgICAgICAgOzsKICAgICAgICAgICAgLWYgfCAt LWZpbmFsLUFCSSkKICAgICAgICAgICAgICAgIGZpbmFsX0FCST0iMSIKICAgICAgICAgICAgOzsK ICAgICAgICAgICAgLS0pCiAgICAgICAgICAgICAgICBzaGlmdDsKICAgICAgICAgICAgICAgIGJy ZWFrCiAgICAgICAgICAgIDs7CiAgICAgICAgICAgIC0qKQogICAgICAgICAgICAgICAgZGllICIk e0ZVTkNOQU1FfSgpOiBVbnJlY29nbml6ZWQgb3B0aW9uICckMSciCiAgICAgICAgICAgIDs7CiAg ICAgICAgICAgICopCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICA7OwogICAgICAg IGVzYWM7CiAgICAgICAgc2hpZnQ7CiAgICBkb25lOwogICAgaWYgW1sgIiR7QUJJX291dHB1dH0i ID09ICIxIiAmJiAiJHthYnNvbHV0ZV9wYXRoX291dHB1dH0iID09ICIxIiBdXTsgdGhlbgogICAg ICAgIGRpZSAiJHtGVU5DTkFNRX0oKTogJy0tQUJJJyBhbmQgJy0tYWJzb2x1dGUtcGF0aCcgb3B0 aW9ucyBjYW5ub3QgYmUgc3BlY2lmaWVkIHNpbXVsdGFuZW91c2x5IjsKICAgIGZpOwogICAgaWYg W1sgIiQoKCR7cHl0aG9uMn0gKyAke3B5dGhvbjN9ICsgJHtmaW5hbF9BQkl9KSkiIC1ndCAxIF1d OyB0aGVuCiAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpOiAnLTInLCAnLTMnIG9yICctLWZpbmFs LUFCSScgb3B0aW9ucyBjYW5ub3QgYmUgc3BlY2lmaWVkIHNpbXVsdGFuZW91c2x5IjsKICAgIGZp OwogICAgaWYgW1sgIiQjIiAtZXEgMCBdXTsgdGhlbgogICAgICAgIGlmIFtbICIke2ZpbmFsX0FC SX0iID09ICIxIiBdXTsgdGhlbgogICAgICAgICAgICBpZiAhIF9weXRob25fcGFja2FnZV9zdXBw b3J0aW5nX2luc3RhbGxhdGlvbl9mb3JfbXVsdGlwbGVfcHl0aG9uX2FiaXM7IHRoZW4KICAgICAg ICAgICAgICAgIGRpZSAiJHtGVU5DTkFNRX0oKTogJy0tZmluYWwtQUJJJyBvcHRpb24gY2Fubm90 IGJlIHVzZWQgaW4gZWJ1aWxkcyBvZiBwYWNrYWdlcyBub3Qgc3VwcG9ydGluZyBpbnN0YWxsYXRp b24gZm9yIG11bHRpcGxlIFB5dGhvbiBBQklzIjsKICAgICAgICAgICAgZmk7CiAgICAgICAgICAg IF9weXRob25fY2FsY3VsYXRlX1BZVEhPTl9BQklTOwogICAgICAgICAgICBQWVRIT05fQUJJPSIk e1BZVEhPTl9BQklTIyMqIH0iOwogICAgICAgIGVsc2UKICAgICAgICAgICAgaWYgW1sgIiR7cHl0 aG9uMn0iID09ICIxIiBdXTsgdGhlbgogICAgICAgICAgICAgICAgUFlUSE9OX0FCST0iJChST09U PSIvIiBlc2VsZWN0IHB5dGhvbiBzaG93IC0tcHl0aG9uMiAtLUFCSSkiOwogICAgICAgICAgICAg ICAgaWYgW1sgLXogIiR7UFlUSE9OX0FCSX0iIF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAg ZGllICIke0ZVTkNOQU1FfSgpOiBBY3RpdmUgdmVyc2lvbiBvZiBDUHl0aG9uIDIgbm90IHNldCI7 CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgaWYgW1sgIiR7UFlUSE9O X0FCSX0iICE9ICIyLiIqIF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGRpZSAiJHtG VU5DTkFNRX0oKTogSW50ZXJuYWwgZXJyb3IgaW4gXGBlc2VsZWN0IHB5dGhvbiBzaG93IC0tcHl0 aG9uMlxgIjsKICAgICAgICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgICAgIGZpOwogICAg ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBpZiBbWyAiJHtweXRob24zfSIgPT0gIjEiIF1d OyB0aGVuCiAgICAgICAgICAgICAgICAgICAgUFlUSE9OX0FCST0iJChST09UPSIvIiBlc2VsZWN0 IHB5dGhvbiBzaG93IC0tcHl0aG9uMyAtLUFCSSkiOwogICAgICAgICAgICAgICAgICAgIGlmIFtb IC16ICIke1BZVEhPTl9BQkl9IiBdXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBkaWUg IiR7RlVOQ05BTUV9KCk6IEFjdGl2ZSB2ZXJzaW9uIG9mIENQeXRob24gMyBub3Qgc2V0IjsKICAg ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIFtbICIke1BZ VEhPTl9BQkl9IiAhPSAiMy4iKiBdXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGllICIke0ZVTkNOQU1FfSgpOiBJbnRlcm5hbCBlcnJvciBpbiBcYGVzZWxlY3QgcHl0aG9uIHNo b3cgLS1weXRob24zXGAiOwogICAgICAgICAgICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAg ICAgICAgICBmaTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBpZiBf cHl0aG9uX3BhY2thZ2Vfc3VwcG9ydGluZ19pbnN0YWxsYXRpb25fZm9yX211bHRpcGxlX3B5dGhv bl9hYmlzOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICEgX3B5dGhvbl9hYmktc3Bl Y2lmaWNfbG9jYWxfc2NvcGU7IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZSAi JHtGVU5DTkFNRX0oKSBzaG91bGQgYmUgdXNlZCBpbiBBQkktc3BlY2lmaWMgbG9jYWwgc2NvcGUi OwogICAgICAgICAgICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICAgICAgICAgIFBZVEhPTl9BQkk9IiQoIiR7RVBSRUZJWH0vdXNyL2Jpbi9w eXRob24iIC1jICIke19QWVRIT05fQUJJX0VYVFJBQ1RJT05fQ09NTUFORH0iKSI7CiAgICAgICAg ICAgICAgICAgICAgICAgIGlmIFtbIC16ICIke1BZVEhPTl9BQkl9IiBdXTsgdGhlbgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpOiBGYWlsdXJlIG9mIGV4dHJh Y3Rpb24gb2YgbG9jYWxseSBhY3RpdmUgdmVyc2lvbiBvZiBQeXRob24iOwogICAgICAgICAgICAg ICAgICAgICAgICBmaTsKICAgICAgICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgICAgIGZp OwogICAgICAgICAgICBmaTsKICAgICAgICBmaTsKICAgIGVsc2UKICAgICAgICBpZiBbWyAiJCMi IC1lcSAxIF1dOyB0aGVuCiAgICAgICAgICAgIGlmIFtbICIke2ZpbmFsX0FCSX0iID09ICIxIiBd XTsgdGhlbgogICAgICAgICAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpOiAnLS1maW5hbC1BQkkn IG9wdGlvbiBhbmQgUHl0aG9uIEFCSSBjYW5ub3QgYmUgc3BlY2lmaWVkIHNpbXVsdGFuZW91c2x5 IjsKICAgICAgICAgICAgZmk7CiAgICAgICAgICAgIGlmIFtbICIke3B5dGhvbjJ9IiA9PSAiMSIg XV07IHRoZW4KICAgICAgICAgICAgICAgIGRpZSAiJHtGVU5DTkFNRX0oKTogJy0yJyBvcHRpb24g YW5kIFB5dGhvbiBBQkkgY2Fubm90IGJlIHNwZWNpZmllZCBzaW11bHRhbmVvdXNseSI7CiAgICAg ICAgICAgIGZpOwogICAgICAgICAgICBpZiBbWyAiJHtweXRob24zfSIgPT0gIjEiIF1dOyB0aGVu CiAgICAgICAgICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6ICctMycgb3B0aW9uIGFuZCBQeXRo b24gQUJJIGNhbm5vdCBiZSBzcGVjaWZpZWQgc2ltdWx0YW5lb3VzbHkiOwogICAgICAgICAgICBm aTsKICAgICAgICAgICAgUFlUSE9OX0FCST0iJDEiOwogICAgICAgIGVsc2UKICAgICAgICAgICAg ZGllICIke0ZVTkNOQU1FfSgpOiBJbnZhbGlkIHVzYWdlIjsKICAgICAgICBmaTsKICAgIGZpOwog ICAgaWYgW1sgIiR7QUJJX291dHB1dH0iID09ICIxIiBdXTsgdGhlbgogICAgICAgIGVjaG8gLW4g IiR7UFlUSE9OX0FCSX0iOwogICAgICAgIHJldHVybjsKICAgIGVsc2UKICAgICAgICBpZiBbWyAi JChfcHl0aG9uX2dldF9pbXBsZW1lbnRhdGlvbiAiJHtQWVRIT05fQUJJfSIpIiA9PSAiQ1B5dGhv biIgXV07IHRoZW4KICAgICAgICAgICAgcHl0aG9uX2ludGVycHJldGVyPSJweXRob24ke1BZVEhP Tl9BQkl9IjsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGlmIFtbICIkKF9weXRob25fZ2V0X2lt cGxlbWVudGF0aW9uICIke1BZVEhPTl9BQkl9IikiID09ICJKeXRob24iIF1dOyB0aGVuCiAgICAg ICAgICAgICAgICBweXRob25faW50ZXJwcmV0ZXI9Imp5dGhvbiR7UFlUSE9OX0FCSSUtanl0aG9u fSI7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGlmIFtbICIkKF9weXRob25fZ2V0 X2ltcGxlbWVudGF0aW9uICIke1BZVEhPTl9BQkl9IikiID09ICJQeVB5IiBdXTsgdGhlbgogICAg ICAgICAgICAgICAgICAgIHB5dGhvbl9pbnRlcnByZXRlcj0icHlweS1jJHtQWVRIT05fQUJJIyot cHlweS19IjsKICAgICAgICAgICAgICAgIGZpOwogICAgICAgICAgICBmaTsKICAgICAgICBmaTsK ICAgICAgICBpZiBbWyAiJHthYnNvbHV0ZV9wYXRoX291dHB1dH0iID09ICIxIiBdXTsgdGhlbgog ICAgICAgICAgICBlY2hvIC1uICIke0VQUkVGSVh9L3Vzci9iaW4vJHtweXRob25faW50ZXJwcmV0 ZXJ9IjsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGVjaG8gLW4gIiR7cHl0aG9uX2ludGVycHJl dGVyfSI7CiAgICAgICAgZmk7CiAgICBmaTsKICAgIGlmIFtbIC1uICIke0FCSX0iICYmICIke0FC SX0iICE9ICIke0RFRkFVTFRfQUJJfSIgJiYgIiR7REVGQVVMVF9BQkl9IiAhPSAiZGVmYXVsdCIg XV07IHRoZW4KICAgICAgICBlY2hvIC1uICItJHtBQkl9IjsKICAgIGZpCn0KVkVSX21ham9yICgp IAp7IAogICAgW1sgLXogJDEgXV0gJiYgcmV0dXJuIDE7CiAgICBsb2NhbCBWRVI9JEA7CiAgICBl Y2hvICIke1ZFUiUlW15bOmRpZ2l0Ol1dKn0iCn0KVkVSX21pY3JvICgpIAp7IAogICAgW1sgLXog JDEgXV0gJiYgcmV0dXJuIDE7CiAgICBsb2NhbCBWRVI9JEA7CiAgICBWRVI9JHtWRVIjKi4qLn07 CiAgICBlY2hvICIke1ZFUiUlW15bOmRpZ2l0Ol1dKn0iCn0KVkVSX21pbm9yICgpIAp7IAogICAg W1sgLXogJDEgXV0gJiYgcmV0dXJuIDE7CiAgICBsb2NhbCBWRVI9JEA7CiAgICBWRVI9JHtWRVIj Ki59OwogICAgZWNobyAiJHtWRVIlJVteWzpkaWdpdDpdXSp9Igp9ClZFUl90b19pbnQgKCkgCnsg CiAgICBbWyAteiAkMSBdXSAmJiByZXR1cm4gMTsKICAgIGxvY2FsIFZFUl9NQUpPUj0kKFZFUl9t YWpvciAiJDEiKTsKICAgIGxvY2FsIFZFUl9NSU5PUj0kKFZFUl9taW5vciAiJDEiKTsKICAgIGxv Y2FsIFZFUl9NSUNSTz0kKFZFUl9taWNybyAiJDEiKTsKICAgIGxvY2FsIFZFUl9pbnQ9JCgoIFZF Ul9NQUpPUiAqIDY1NTM2ICsgVkVSX01JTk9SICogMjU2ICsgVkVSX01JQ1JPICkpOwogICAgaWYg W1sgJHtWRVJfaW50fSAtZ2UgNjU1MzYgXV07IHRoZW4KICAgICAgICBlY2hvICIke1ZFUl9pbnR9 IjsKICAgICAgICByZXR1cm4gMDsKICAgIGZpOwogICAgZWNobyAxOwogICAgcmV0dXJuIDEKfQpf YXNzZXJ0X3BrZ19lYnVpbGRfcGhhc2UgKCkgCnsgCiAgICBjYXNlICR7RUJVSUxEX1BIQVNFfSBp biAKICAgICAgICBzZXR1cCB8IHByZWluc3QgfCBwb3N0aW5zdCkKCiAgICAgICAgOzsKICAgICAg ICAqKQogICAgICAgICAgICBlZXJyb3IgIickMSgpJyBjYWxsZWQgZnJvbSAnJHtFQlVJTERfUEhB U0V9JyBwaGFzZSB3aGljaCBpcyBub3QgT0s6IjsKICAgICAgICAgICAgZWVycm9yICJZb3UgbWF5 IG9ubHkgY2FsbCBmcm9tIHBrZ197c2V0dXAscHJlaW5zdCxwb3N0aW5zdH0gZnVuY3Rpb25zLiI7 CiAgICAgICAgICAgIGVlcnJvciAiUGFja2FnZSBmYWlscyBhdCBRQSBhbmQgYXQgbGlmZS4gIFBs ZWFzZSBmaWxlIGEgYnVnLiI7CiAgICAgICAgICAgIGRpZSAiQmFkIHBhY2thZ2UhICAkMSBpcyBv bmx5IGZvciB1c2UgaW4gc29tZSBwa2dfKiBmdW5jdGlvbnMhIgogICAgICAgIDs7CiAgICBlc2Fj Cn0KX2F1dG90b29sc19tNGRpcl9pbmNsdWRlICgpIAp7IAogICAgbG9jYWwgeCBpbmNsdWRlX29w dHM7CiAgICBmb3IgeCBpbiAiJEAiOwogICAgZG8KICAgICAgICBjYXNlICR7eH0gaW4gCiAgICAg ICAgICAgIC1JKQoKICAgICAgICAgICAgOzsKICAgICAgICAgICAgKikKICAgICAgICAgICAgICAg IFtbICEgLWQgJHt4fSBdXSAmJiBld2FybiAiYXV0b3Rvb2xzLmVjbGFzczogJyR7eH0nIGRvZXMg bm90IGV4aXN0IjsKICAgICAgICAgICAgICAgIGluY2x1ZGVfb3B0cys9IiAtSSAke3h9IgogICAg ICAgICAgICA7OwogICAgICAgIGVzYWM7CiAgICBkb25lOwogICAgZWNobyAke2luY2x1ZGVfb3B0 c30KfQpfY2Ryb21fbG9jYXRlX2ZpbGVfb25fY2QgKCkgCnsgCiAgICBsb2NhbCBtbGluZT0iIjsK ICAgIGxvY2FsIHNob3dlZG1zZz0wIHNob3dqb2xpZXRtc2c9MDsKICAgIHdoaWxlIFtbIC16ICR7 Q0RST01fUk9PVH0gXV07IGRvCiAgICAgICAgbG9jYWwgaT0wOwogICAgICAgIGxvY2FsIC1hIGNk c2V0PSgkeyovLzovIH0pOwogICAgICAgIGlmIFtbIC1uICR7Q0RST01fU0VUfSBdXTsgdGhlbgog ICAgICAgICAgICBjZHNldD0oJHtjZHNldFske0NEUk9NX1NFVH1dfSk7CiAgICAgICAgZmk7CiAg ICAgICAgd2hpbGUgW1sgLW4gJHtjZHNldFske2l9XX0gXV07IGRvCiAgICAgICAgICAgIGxvY2Fs IGRpcj0kKGRpcm5hbWUgJHtjZHNldFske2l9XX0pOwogICAgICAgICAgICBsb2NhbCBmaWxlPSQo YmFzZW5hbWUgJHtjZHNldFske2l9XX0pOwogICAgICAgICAgICBsb2NhbCBwb2ludD0gbm9kZT0g ZnM9IGZvbz07CiAgICAgICAgICAgIHdoaWxlIHJlYWQgcG9pbnQgbm9kZSBmcyBmb287IGRvCiAg ICAgICAgICAgICAgICBbWyAiIGNkOTY2MCBpc285NjYwIHVkZiAiICE9ICoiICR7ZnN9ICIqIF1d ICYmICEgW1sgJHtmc30gPT0gInN1YmZzIiAmJiAiLCR7b3B0c30sIiA9PSAqIixmcz1jZGZzcywi KiBdXSAmJiBjb250aW51ZTsKICAgICAgICAgICAgICAgIHBvaW50PSR7cG9pbnQvL1wwNDAvIH07 CiAgICAgICAgICAgICAgICBbWyAhIC1kICR7cG9pbnR9LyR7ZGlyfSBdXSAmJiBjb250aW51ZTsK ICAgICAgICAgICAgICAgIFtbIC16ICQoZmluZCAiJHtwb2ludH0vJHtkaXJ9IiAtbWF4ZGVwdGgg MSAtaW5hbWUgIiR7ZmlsZX0iKSBdXSAmJiBjb250aW51ZTsKICAgICAgICAgICAgICAgIGV4cG9y dCBDRFJPTV9ST09UPSR7cG9pbnR9OwogICAgICAgICAgICAgICAgZXhwb3J0IENEUk9NX1NFVD0k e2l9OwogICAgICAgICAgICAgICAgZXhwb3J0IENEUk9NX01BVENIPSR7Y2RzZXRbJHtpfV19Owog ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBkb25lIDw8PCAiJChnZXRfbW91bnRz KSI7CiAgICAgICAgICAgICgoKytpKSk7CiAgICAgICAgZG9uZTsKICAgICAgICBlY2hvOwogICAg ICAgIGlmIFtbICR7c2hvd2VkbXNnfSAtZXEgMCBdXTsgdGhlbgogICAgICAgICAgICBpZiBbWyAk e0NEUk9NX1RPVEFMX0NEU30gLWVxIDEgXV07IHRoZW4KICAgICAgICAgICAgICAgIGlmIFtbIC16 ICR7Q0RST01fTkFNRX0gXV07IHRoZW4KICAgICAgICAgICAgICAgICAgICBlaW5mbyAiUGxlYXNl IGluc2VydCttb3VudCB0aGUgY2Ryb20gZm9yICR7UE59IG5vdyAhIjsKICAgICAgICAgICAgICAg IGVsc2UKICAgICAgICAgICAgICAgICAgICBlaW5mbyAiUGxlYXNlIGluc2VydCttb3VudCB0aGUg JHtDRFJPTV9OQU1FfSBjZHJvbSBub3cgISI7CiAgICAgICAgICAgICAgICBmaTsKICAgICAgICAg ICAgZWxzZQogICAgICAgICAgICAgICAgaWYgW1sgLXogJHtDRFJPTV9OQU1FXzF9IF1dOyB0aGVu CiAgICAgICAgICAgICAgICAgICAgZWluZm8gIlBsZWFzZSBpbnNlcnQrbW91bnQgY2QgIyR7Q0RS T01fQ1VSUkVOVF9DRH0gZm9yICR7UE59IG5vdyAhIjsKICAgICAgICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgICAgICAgICBsb2NhbCB2YXI9IkNEUk9NX05BTUVfJHtDRFJPTV9DVVJSRU5UX0NE fSI7CiAgICAgICAgICAgICAgICAgICAgZWluZm8gIlBsZWFzZSBpbnNlcnQrbW91bnQgdGhlICR7 IXZhcn0gY2Ryb20gbm93ICEiOwogICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgIGZpOwog ICAgICAgICAgICBzaG93ZWRtc2c9MTsKICAgICAgICBmaTsKICAgICAgICBlaW5mbyAiUHJlc3Mg cmV0dXJuIHRvIHNjYW4gZm9yIHRoZSBjZCBhZ2FpbiI7CiAgICAgICAgZWluZm8gIm9yIGhpdCBD VFJMK0MgdG8gYWJvcnQgdGhlIGVtZXJnZS4iOwogICAgICAgIGVjaG87CiAgICAgICAgaWYgW1sg JHtzaG93am9saWV0bXNnfSAtZXEgMCBdXTsgdGhlbgogICAgICAgICAgICBzaG93am9saWV0bXNn PTE7CiAgICAgICAgZWxzZQogICAgICAgICAgICBld2FybiAiSWYgeW91IGFyZSBoYXZpbmcgdHJv dWJsZSB3aXRoIHRoZSBkZXRlY3Rpb24iOwogICAgICAgICAgICBld2FybiAib2YgeW91ciBDRCwg aXQgaXMgcG9zc2libGUgdGhhdCB5b3UgZG8gbm90IGhhdmUiOwogICAgICAgICAgICBld2FybiAi Sm9saWV0IHN1cHBvcnQgZW5hYmxlZCBpbiB5b3VyIGtlcm5lbC4gIFBsZWFzZSI7CiAgICAgICAg ICAgIGV3YXJuICJjaGVjayB0aGF0IENPTkZJR19KT0xJRVQgaXMgZW5hYmxlZCBpbiB5b3VyIGtl cm5lbC4iOwogICAgICAgICAgICBlYmVlcCA1OwogICAgICAgIGZpOwogICAgICAgIHJlYWQgfHwg ZGllICJzb21ldGhpbmcgaXMgc2NyZXdlZCB3aXRoIHlvdXIgc3lzdGVtIjsKICAgIGRvbmUKfQpf ZGVhZF9wb3J0YWJpbGl0eV91c2VyX2Z1bmNzICgpIAp7IAogICAgZGllICJpZiB5b3UgcmVhbGx5 IG5lZWQgdGhpcywgcGxlYXNlIGZpbGUgYSBidWcgZm9yIGJhc2Utc3lzdGVtQGdlbnRvby5vcmci Cn0KX2VsaWJ0b29saXplICgpIAp7IAogICAgbG9jYWwgb3B0cyBnPTsKICAgIFtbIC1uICQoYXV0 b3Rvb2xzX2NoZWNrX21hY3JvIEFDX1BST0dfTElCVE9PTCBBTV9QUk9HX0xJQlRPT0wgTFRfSU5J VCkgXV0gfHwgcmV0dXJuIDA7CiAgICBbWyAtZiBHTlVtYWtlZmlsZS5hbSB8fCAtZiBNYWtlZmls ZS5hbSBdXSAmJiBvcHRzPSItLWF1dG9tYWtlIjsKICAgIFtbICR7Q0hPU1R9ID09ICotZGFyd2lu KiBdXSAmJiBnPWc7CiAgICBhdXRvdG9vbHNfcnVuX3Rvb2wgJHtMSUJUT09MSVpFOi0ke2d9bGli dG9vbGl6ZX0gIiRAIiAke29wdHN9OwogICAgZWFjbG9jYWwKfQpfZXBhdGNoX2RyYXdfbGluZSAo KSAKeyAKICAgIFtbIC16ICQxIF1dICYmIHNldCAiJChwcmludGYgIiU2NXMiICcnKSI7CiAgICBl Y2hvICIkezEvLz8vPX0iCn0KX2djYy1pbnN0YWxsLWRpciAoKSAKeyAKICAgIGVjaG8gIiQoTENf QUxMPUMgJCh0Yy1nZXRDQykgLXByaW50LXNlYXJjaC1kaXJzIDI+IC9kZXYvbnVsbCB8CQlhd2sg JyQxPT0iaW5zdGFsbDoiIHtwcmludCAkMn0nKSIKfQpfZ2NjLXNwZWNzLWRpcmVjdGl2ZV9yYXcg KCkgCnsgCiAgICBsb2NhbCBjYz0kKHRjLWdldENDKTsKICAgIGxvY2FsIHNwZWNmaWxlcz0kKExD X0FMTD1DICR7Y2N9IC12IDI+JjEgfCBhd2sgJyQxPT0iUmVhZGluZyIge3ByaW50ICRORn0nKTsK ICAgICR7Y2N9IC1kdW1wc3BlY3MgMj4gL2Rldi9udWxsIHwgY2F0IC0gJHtzcGVjZmlsZXN9IHwg YXdrIC12IGRpcmVjdGl2ZT0kMSAnQkVHSU4JeyBwc3BlYz0iIjsgc3BlYz0iIjsgb3V0c2lkZT0x IH0KJDE9PSIqImRpcmVjdGl2ZSI6IiAgeyBwc3BlYz1zcGVjOyBzcGVjPSIiOyBvdXRzaWRlPTA7 IG5leHQgfQoJb3V0c2lkZSB8fCBORj09MCB8fCAoIHN1YnN0cigkMSwxLDEpPT0iKiIgJiYgc3Vi c3RyKCQxLGxlbmd0aCgkMSksMSk9PSI6IiApIHsgb3V0c2lkZT0xOyBuZXh0IH0KCXNwZWM9PSIi ICYmIHN1YnN0cigkMCwxLDEpPT0iKyIgeyBzcGVjPXBzcGVjICIgIiBzdWJzdHIoJDAsMik7IG5l eHQgfQoJeyBzcGVjPXNwZWMgJDAgfQpFTkQJeyBwcmludCBzcGVjIH0nOwogICAgcmV0dXJuIDAK fQpfZ2NjLXNwZWNzLWV4aXN0cyAoKSAKeyAKICAgIFtbIC1mICQoX2djYy1pbnN0YWxsLWRpcikv JDEgXV0KfQpfZ2NjX2Z1bGx2ZXJzaW9uICgpIAp7IAogICAgbG9jYWwgdmVyPSIkMSI7CiAgICBz aGlmdDsKICAgIHNldCAtLSBgJCh0Yy1nZXRDUFAgIiRAIikgLUUgLVAgLSA8PDwiX19HTlVDX18g X19HTlVDX01JTk9SX18gX19HTlVDX1BBVENITEVWRUxfXyJgOwogICAgZXZhbCBlY2hvICIkdmVy Igp9Cl9weXRob25fYWJpLXNwZWNpZmljX2xvY2FsX3Njb3BlICgpIAp7IAogICAgW1sgIiAke0ZV TkNOQU1FW0BdOjJ9ICIgPX4gIiAiKF9weXRob25fZmluYWxfc2FuaXR5X2NoZWNrc3xweXRob25f ZXhlY3V0ZV9mdW5jdGlvbnxweXRob25fbW9kX29wdGltaXplfHB5dGhvbl9tb2RfY2xlYW51cCki ICIgXV0KfQpfcHl0aG9uX2NhbGN1bGF0ZV9QWVRIT05fQUJJUyAoKSAKeyAKICAgIGlmICEgX3B5 dGhvbl9wYWNrYWdlX3N1cHBvcnRpbmdfaW5zdGFsbGF0aW9uX2Zvcl9tdWx0aXBsZV9weXRob25f YWJpczsgdGhlbgogICAgICAgIGRpZSAiJHtGVU5DTkFNRX0oKSBjYW5ub3QgYmUgdXNlZCBpbiBl YnVpbGRzIG9mIHBhY2thZ2VzIG5vdCBzdXBwb3J0aW5nIGluc3RhbGxhdGlvbiBmb3IgbXVsdGlw bGUgUHl0aG9uIEFCSXMiOwogICAgZmk7CiAgICBfcHl0aG9uX2luaXRpYWxfc2FuaXR5X2NoZWNr czsKICAgIGlmIFtbICIkKGRlY2xhcmUgLXAgUFlUSE9OX0FCSVMgMj4gL2Rldi9udWxsKSIgIT0g ImRlY2xhcmUgLXggUFlUSE9OX0FCSVM9IiogXV0gJiYgaGFzICIke0VBUEk6LTB9IiAwIDEgMiAz IDQ7IHRoZW4KICAgICAgICBsb2NhbCBQWVRIT05fQUJJOwogICAgICAgIGlmIFtbICIkKGRlY2xh cmUgLXAgVVNFX1BZVEhPTiAyPiAvZGV2L251bGwpIiA9PSAiZGVjbGFyZSAteCBVU0VfUFlUSE9O PSIqIF1dOyB0aGVuCiAgICAgICAgICAgIGxvY2FsIGNweXRob25fZW5hYmxlZD0iMCI7CiAgICAg ICAgICAgIGlmIFtbIC16ICIke1VTRV9QWVRIT059IiBdXTsgdGhlbgogICAgICAgICAgICAgICAg ZGllICJVU0VfUFlUSE9OIHZhcmlhYmxlIGlzIGVtcHR5IjsKICAgICAgICAgICAgZmk7CiAgICAg ICAgICAgIGZvciBQWVRIT05fQUJJIGluICR7VVNFX1BZVEhPTn07CiAgICAgICAgICAgIGRvCiAg ICAgICAgICAgICAgICBpZiAhIGhhcyAiJHtQWVRIT05fQUJJfSIgIiR7X1BZVEhPTl9HTE9CQUxM WV9TVVBQT1JURURfQUJJU1tAXX0iOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgZGllICJVU0Vf UFlUSE9OIHZhcmlhYmxlIGNvbnRhaW5zIGludmFsaWQgdmFsdWUgJyR7UFlUSE9OX0FCSX0nIjsK ICAgICAgICAgICAgICAgIGZpOwogICAgICAgICAgICAgICAgaWYgaGFzICIke1BZVEhPTl9BQkl9 IiAiJHtfQ1BZVEhPTjJfR0xPQkFMTFlfU1VQUE9SVEVEX0FCSVNbQF19IiAiJHtfQ1BZVEhPTjNf R0xPQkFMTFlfU1VQUE9SVEVEX0FCSVNbQF19IjsgdGhlbgogICAgICAgICAgICAgICAgICAgIGNw eXRob25fZW5hYmxlZD0iMSI7CiAgICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgICAgIGlm ICEgX3B5dGhvbl9jaGVja19weXRob25fYWJpX21hdGNoaW5nIC0tcGF0dGVybnMtbGlzdCAiJHtQ WVRIT05fQUJJfSIgIiR7UkVTVFJJQ1RfUFlUSE9OX0FCSVN9IjsgdGhlbgogICAgICAgICAgICAg ICAgICAgIGV4cG9ydCBQWVRIT05fQUJJUys9IiR7UFlUSE9OX0FCSVM6KyB9JHtQWVRIT05fQUJJ fSI7CiAgICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgZG9uZTsKICAgICAgICAgICAgaWYg W1sgLXogIiR7UFlUSE9OX0FCSVMvL1ske0lGU31dL30iIF1dOyB0aGVuCiAgICAgICAgICAgICAg ICBkaWUgIlVTRV9QWVRIT04gdmFyaWFibGUgZG9lcyBub3QgZW5hYmxlIGFueSBQeXRob24gQUJJ IHN1cHBvcnRlZCBieSAke0NBVEVHT1JZfS8ke1BGfSI7CiAgICAgICAgICAgIGZpOwogICAgICAg ICAgICBpZiBbWyAiJHtjcHl0aG9uX2VuYWJsZWR9IiA9PSAiMCIgXV07IHRoZW4KICAgICAgICAg ICAgICAgIGRpZSAiVVNFX1BZVEhPTiB2YXJpYWJsZSBkb2VzIG5vdCBlbmFibGUgYW55IENQeXRo b24gQUJJIjsKICAgICAgICAgICAgZmk7CiAgICAgICAgZWxzZQogICAgICAgICAgICBsb2NhbCBw eXRob25fdmVyc2lvbiBweXRob24yX3ZlcnNpb24gcHl0aG9uM192ZXJzaW9uIHN1cHBvcnRfcHl0 aG9uX21ham9yX3ZlcnNpb247CiAgICAgICAgICAgIGlmICEgaGFzX3ZlcnNpb24gImRldi1sYW5n L3B5dGhvbiI7IHRoZW4KICAgICAgICAgICAgICAgIGRpZSAiJHtGVU5DTkFNRX0oKTogJ2Rldi1s YW5nL3B5dGhvbicgaXMgbm90IGluc3RhbGxlZCI7CiAgICAgICAgICAgIGZpOwogICAgICAgICAg ICBweXRob25fdmVyc2lvbj0iJCgiJHtFUFJFRklYfS91c3IvYmluL3B5dGhvbiIgLWMgJ2Zyb20g c3lzIGltcG9ydCB2ZXJzaW9uX2luZm87IHByaW50KCIuIi5qb2luKHN0cih4KSBmb3IgeCBpbiB2 ZXJzaW9uX2luZm9bOjJdKSknKSI7CiAgICAgICAgICAgIGlmIGhhc192ZXJzaW9uICI9ZGV2LWxh bmcvcHl0aG9uLTIqIjsgdGhlbgogICAgICAgICAgICAgICAgaWYgW1sgIiQocmVhZGxpbmsgIiR7 RVBSRUZJWH0vdXNyL2Jpbi9weXRob24yIikiICE9ICJweXRob24yLiIqIF1dOyB0aGVuCiAgICAg ICAgICAgICAgICAgICAgZGllICInJHtFUFJFRklYfS91c3IvYmluL3B5dGhvbjInIGlzIG5vdCB2 YWxpZCBzeW1saW5rIjsKICAgICAgICAgICAgICAgIGZpOwogICAgICAgICAgICAgICAgcHl0aG9u Ml92ZXJzaW9uPSIkKCIke0VQUkVGSVh9L3Vzci9iaW4vcHl0aG9uMiIgLWMgJ2Zyb20gc3lzIGlt cG9ydCB2ZXJzaW9uX2luZm87IHByaW50KCIuIi5qb2luKHN0cih4KSBmb3IgeCBpbiB2ZXJzaW9u X2luZm9bOjJdKSknKSI7CiAgICAgICAgICAgICAgICBzdXBwb3J0X3B5dGhvbl9tYWpvcl92ZXJz aW9uPSIwIjsKICAgICAgICAgICAgICAgIGZvciBQWVRIT05fQUJJIGluICIke19DUFlUSE9OMl9H TE9CQUxMWV9TVVBQT1JURURfQUJJU1tAXX0iOwogICAgICAgICAgICAgICAgZG8KICAgICAgICAg ICAgICAgICAgICBpZiAhIF9weXRob25fY2hlY2tfcHl0aG9uX2FiaV9tYXRjaGluZyAtLXBhdHRl cm5zLWxpc3QgIiR7UFlUSE9OX0FCSX0iICIke1JFU1RSSUNUX1BZVEhPTl9BQklTfSI7IHRoZW4K ICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydF9weXRob25fbWFqb3JfdmVyc2lvbj0iMSI7 CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGZpOwog ICAgICAgICAgICAgICAgZG9uZTsKICAgICAgICAgICAgICAgIGlmIFtbICIke3N1cHBvcnRfcHl0 aG9uX21ham9yX3ZlcnNpb259IiA9PSAiMSIgXV07IHRoZW4KICAgICAgICAgICAgICAgICAgICBp ZiBfcHl0aG9uX2NoZWNrX3B5dGhvbl9hYmlfbWF0Y2hpbmcgLS1wYXR0ZXJucy1saXN0ICIke3B5 dGhvbjJfdmVyc2lvbn0iICIke1JFU1RSSUNUX1BZVEhPTl9BQklTfSI7IHRoZW4KICAgICAgICAg ICAgICAgICAgICAgICAgZGllICJBY3RpdmUgdmVyc2lvbiBvZiBDUHl0aG9uIDIgaXMgbm90IHN1 cHBvcnRlZCBieSAke0NBVEVHT1JZfS8ke1BGfSI7CiAgICAgICAgICAgICAgICAgICAgZmk7CiAg ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgcHl0aG9uMl92ZXJzaW9uPSIi OwogICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgIGZpOwogICAgICAgICAgICBpZiBoYXNf dmVyc2lvbiAiPWRldi1sYW5nL3B5dGhvbi0zKiI7IHRoZW4KICAgICAgICAgICAgICAgIGlmIFtb ICIkKHJlYWRsaW5rICIke0VQUkVGSVh9L3Vzci9iaW4vcHl0aG9uMyIpIiAhPSAicHl0aG9uMy4i KiBdXTsgdGhlbgogICAgICAgICAgICAgICAgICAgIGRpZSAiJyR7RVBSRUZJWH0vdXNyL2Jpbi9w eXRob24zJyBpcyBub3QgdmFsaWQgc3ltbGluayI7CiAgICAgICAgICAgICAgICBmaTsKICAgICAg ICAgICAgICAgIHB5dGhvbjNfdmVyc2lvbj0iJCgiJHtFUFJFRklYfS91c3IvYmluL3B5dGhvbjMi IC1jICdmcm9tIHN5cyBpbXBvcnQgdmVyc2lvbl9pbmZvOyBwcmludCgiLiIuam9pbihzdHIoeCkg Zm9yIHggaW4gdmVyc2lvbl9pbmZvWzoyXSkpJykiOwogICAgICAgICAgICAgICAgc3VwcG9ydF9w eXRob25fbWFqb3JfdmVyc2lvbj0iMCI7CiAgICAgICAgICAgICAgICBmb3IgUFlUSE9OX0FCSSBp biAiJHtfQ1BZVEhPTjNfR0xPQkFMTFlfU1VQUE9SVEVEX0FCSVNbQF19IjsKICAgICAgICAgICAg ICAgIGRvCiAgICAgICAgICAgICAgICAgICAgaWYgISBfcHl0aG9uX2NoZWNrX3B5dGhvbl9hYmlf bWF0Y2hpbmcgLS1wYXR0ZXJucy1saXN0ICIke1BZVEhPTl9BQkl9IiAiJHtSRVNUUklDVF9QWVRI T05fQUJJU30iOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRfcHl0aG9uX21h am9yX3ZlcnNpb249IjEiOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg ICAgICAgICAgICBmaTsKICAgICAgICAgICAgICAgIGRvbmU7CiAgICAgICAgICAgICAgICBpZiBb WyAiJHtzdXBwb3J0X3B5dGhvbl9tYWpvcl92ZXJzaW9ufSIgPT0gIjEiIF1dOyB0aGVuCiAgICAg ICAgICAgICAgICAgICAgaWYgX3B5dGhvbl9jaGVja19weXRob25fYWJpX21hdGNoaW5nIC0tcGF0 dGVybnMtbGlzdCAiJHtweXRob24zX3ZlcnNpb259IiAiJHtSRVNUUklDVF9QWVRIT05fQUJJU30i OyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGRpZSAiQWN0aXZlIHZlcnNpb24gb2YgQ1B5 dGhvbiAzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgJHtDQVRFR09SWX0vJHtQRn0iOwogICAgICAgICAg ICAgICAgICAgIGZpOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHB5 dGhvbjNfdmVyc2lvbj0iIjsKICAgICAgICAgICAgICAgIGZpOwogICAgICAgICAgICBmaTsKICAg ICAgICAgICAgaWYgW1sgLW4gIiR7cHl0aG9uMl92ZXJzaW9ufSIgJiYgIiR7cHl0aG9uX3ZlcnNp b259IiA9PSAiMi4iKiAmJiAiJHtweXRob25fdmVyc2lvbn0iICE9ICIke3B5dGhvbjJfdmVyc2lv bn0iIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBlZXJyb3IgIlB5dGhvbiB3cmFwcGVyIGlzIGNv bmZpZ3VyZWQgaW5jb3JyZWN0bHkgb3IgJyR7RVBSRUZJWH0vdXNyL2Jpbi9weXRob24yJyBzeW1s aW5rIjsKICAgICAgICAgICAgICAgIGVlcnJvciAiaXMgc2V0IGluY29ycmVjdGx5LiBVc2UgXGBl c2VsZWN0IHB5dGhvblxgIHRvIGZpeCBjb25maWd1cmF0aW9uLiI7CiAgICAgICAgICAgICAgICBk aWUgIkluY29ycmVjdCBjb25maWd1cmF0aW9uIG9mIFB5dGhvbiI7CiAgICAgICAgICAgIGZpOwog ICAgICAgICAgICBpZiBbWyAtbiAiJHtweXRob24zX3ZlcnNpb259IiAmJiAiJHtweXRob25fdmVy c2lvbn0iID09ICIzLiIqICYmICIke3B5dGhvbl92ZXJzaW9ufSIgIT0gIiR7cHl0aG9uM192ZXJz aW9ufSIgXV07IHRoZW4KICAgICAgICAgICAgICAgIGVlcnJvciAiUHl0aG9uIHdyYXBwZXIgaXMg Y29uZmlndXJlZCBpbmNvcnJlY3RseSBvciAnJHtFUFJFRklYfS91c3IvYmluL3B5dGhvbjMnIHN5 bWxpbmsiOwogICAgICAgICAgICAgICAgZWVycm9yICJpcyBzZXQgaW5jb3JyZWN0bHkuIFVzZSBc YGVzZWxlY3QgcHl0aG9uXGAgdG8gZml4IGNvbmZpZ3VyYXRpb24uIjsKICAgICAgICAgICAgICAg IGRpZSAiSW5jb3JyZWN0IGNvbmZpZ3VyYXRpb24gb2YgUHl0aG9uIjsKICAgICAgICAgICAgZmk7 CiAgICAgICAgICAgIFBZVEhPTl9BQklTPSIke3B5dGhvbjJfdmVyc2lvbn0gJHtweXRob24zX3Zl cnNpb259IjsKICAgICAgICAgICAgUFlUSE9OX0FCSVM9IiR7UFlUSE9OX0FCSVMjIH0iOwogICAg ICAgICAgICBleHBvcnQgUFlUSE9OX0FCSVM9IiR7UFlUSE9OX0FCSVMlIH0iOwogICAgICAgIGZp OwogICAgZmk7CiAgICBfcHl0aG9uX2ZpbmFsX3Nhbml0eV9jaGVja3MKfQpfcHl0aG9uX2NoZWNr X3B5dGhvbl9hYmlfbWF0Y2hpbmcgKCkgCnsgCiAgICBsb2NhbCBwYXR0ZXJuIHBhdHRlcm5zIHBh dHRlcm5zX2xpc3Q9IjAiIFBZVEhPTl9BQkk7CiAgICB3aGlsZSAoKCQjKSk7IGRvCiAgICAgICAg Y2FzZSAiJDEiIGluIAogICAgICAgICAgICAtLXBhdHRlcm5zLWxpc3QpCiAgICAgICAgICAgICAg ICBwYXR0ZXJuc19saXN0PSIxIgogICAgICAgICAgICA7OwogICAgICAgICAgICAtLSkKICAgICAg ICAgICAgICAgIHNoaWZ0OwogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgOzsKICAg ICAgICAgICAgLSopCiAgICAgICAgICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6IFVucmVjb2du aXplZCBvcHRpb24gJyQxJyIKICAgICAgICAgICAgOzsKICAgICAgICAgICAgKikKICAgICAgICAg ICAgICAgIGJyZWFrCiAgICAgICAgICAgIDs7CiAgICAgICAgZXNhYzsKICAgICAgICBzaGlmdDsK ICAgIGRvbmU7CiAgICBpZiBbWyAiJCMiIC1uZSAyIF1dOyB0aGVuCiAgICAgICAgZGllICIke0ZV TkNOQU1FfSgpIHJlcXVpcmVzIDIgYXJndW1lbnRzIjsKICAgIGZpOwogICAgUFlUSE9OX0FCST0i JDEiOwogICAgaWYgW1sgIiR7cGF0dGVybnNfbGlzdH0iID09ICIwIiBdXTsgdGhlbgogICAgICAg IHBhdHRlcm49IiQyIjsKICAgICAgICBpZiBbWyAiJHtwYXR0ZXJufSIgPT0gKiItY3B5dGhvbiIg XV07IHRoZW4KICAgICAgICAgICAgW1sgIiR7UFlUSE9OX0FCSX0iID1+IF5bWzpkaWdpdDpdXStc LltbOmRpZ2l0Ol1dKyQgJiYgIiR7UFlUSE9OX0FCSX0iID09ICR7cGF0dGVybiUtY3B5dGhvbn0g XV07CiAgICAgICAgZWxzZQogICAgICAgICAgICBpZiBbWyAiJHtwYXR0ZXJufSIgPT0gKiItanl0 aG9uIiBdXTsgdGhlbgogICAgICAgICAgICAgICAgW1sgIiR7UFlUSE9OX0FCSX0iID09ICR7cGF0 dGVybn0gXV07CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGlmIFtbICIke3BhdHRl cm59IiA9PSAqIi1weXB5LSIqIF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgW1sgIiR7UFlU SE9OX0FCSX0iID09ICR7cGF0dGVybn0gXV07CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICAgICAgaWYgW1sgIiR7UFlUSE9OX0FCSX0iID1+IF5bWzpkaWdpdDpdXStcLltbOmRp Z2l0Ol1dKyQgXV07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgW1sgIiR7UFlUSE9OX0FC SX0iID09ICR7cGF0dGVybn0gXV07CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg ICAgICAgICAgICAgICBpZiBbWyAiJHtQWVRIT05fQUJJfSIgPX4gXltbOmRpZ2l0Ol1dK1wuW1s6 ZGlnaXQ6XV0rLWp5dGhvbiQgXV07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtb ICIke1BZVEhPTl9BQkklLWp5dGhvbn0iID09ICR7cGF0dGVybn0gXV07CiAgICAgICAgICAgICAg ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIFtbICIke1BZVEhP Tl9BQkl9IiA9fiBeW1s6ZGlnaXQ6XV0rXC5bWzpkaWdpdDpdXSstcHlweS1bWzpkaWdpdDpdXStc LltbOmRpZ2l0Ol1dKyQgXV07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBb WyAiJHtQWVRIT05fQUJJJS1weXB5LSp9IiA9PSAke3BhdHRlcm59IF1dOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZSAi JHtGVU5DTkFNRX0oKTogVW5yZWNvZ25pemVkIFB5dGhvbiBBQkkgJyR7UFlUSE9OX0FCSX0nIjsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpOwogICAgICAgICAgICAgICAgICAgICAgICBm aTsKICAgICAgICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgICAgIGZpOwogICAgICAgICAg ICBmaTsKICAgICAgICBmaTsKICAgIGVsc2UKICAgICAgICBwYXR0ZXJucz0iJHsyLy8gLwp9IjsK ICAgICAgICB3aGlsZSByZWFkIHBhdHRlcm47IGRvCiAgICAgICAgICAgIGlmIF9weXRob25fY2hl Y2tfcHl0aG9uX2FiaV9tYXRjaGluZyAiJHtQWVRIT05fQUJJfSIgIiR7cGF0dGVybn0iOyB0aGVu CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgZmk7CiAgICAgICAgZG9uZSA8 PDwgIiR7cGF0dGVybnN9IjsKICAgICAgICByZXR1cm4gMTsKICAgIGZpCn0KX3B5dGhvbl9jaGVj a19weXRob25fcGtnX3NldHVwX2V4ZWN1dGlvbiAoKSAKeyAKICAgIFtbICIgJHtGVU5DTkFNRVtA XToxfSAiID1+ICIgIihweXRob25fc2V0X2FjdGl2ZV92ZXJzaW9ufHB5dGhvbl9wa2dfc2V0dXAp IiAiIF1dICYmIHJldHVybjsKICAgIGlmICEgaGFzICIke0VBUEk6LTB9IiAwIDEgMiAzICYmIFtb IC16ICIke1BZVEhPTl9QS0dfU0VUVVBfRVhFQ1VURUR9IiBdXTsgdGhlbgogICAgICAgIGRpZSAi cHl0aG9uX3BrZ19zZXR1cCgpIG5vdCBjYWxsZWQiOwogICAgZmkKfQpfcHl0aG9uX2NsZWFuX2Nv bXBpbGVkX21vZHVsZXMgKCkgCnsgCiAgICBfcHl0aG9uX2luaXRpYWxpemVfcHJlZml4X3Zhcmlh YmxlczsKICAgIF9weXRob25fc2V0X2NvbG9yX3ZhcmlhYmxlczsKICAgIFtbICIke0ZVTkNOQU1F WzFdfSIgPX4gXihweXRob25fbW9kX29wdGltaXplfHB5dGhvbl9tb2RfY2xlYW51cCkkIF1dIHx8 IGRpZSAiJHtGVU5DTkFNRX0oKTogSW52YWxpZCB1c2FnZSI7CiAgICBsb2NhbCBiYXNlX21vZHVs ZV9uYW1lIGNvbXBpbGVkX2ZpbGUgY29tcGlsZWRfZmlsZXM9KCkgZGlyIHBhdGggcHlfZmlsZSBy b290OwogICAgcm9vdD0iJHtFUk9PVCUvfSI7CiAgICBmb3IgcGF0aCBpbiAiJEAiOwogICAgZG8K ICAgICAgICBjb21waWxlZF9maWxlcz0oKTsKICAgICAgICBpZiBbWyAtZCAiJHtwYXRofSIgXV07 IHRoZW4KICAgICAgICAgICAgd2hpbGUgcmVhZCAtZCAnJyAtciBjb21waWxlZF9maWxlOyBkbwog ICAgICAgICAgICAgICAgY29tcGlsZWRfZmlsZXMrPSgiJHtjb21waWxlZF9maWxlfSIpOwogICAg ICAgICAgICBkb25lIDwgPChmaW5kICIke3BhdGh9IiAiKCIgLW5hbWUgIioucHlbY29dIiAtbyAt bmFtZSAiKlwkcHkuY2xhc3MiICIpIiAtcHJpbnQwKTsKICAgICAgICAgICAgaWYgW1sgIiR7RUJV SUxEX1BIQVNFfSIgPT0gInBvc3RybSIgXV07IHRoZW4KICAgICAgICAgICAgICAgIGZpbmQgIiR7 cGF0aH0iIC10eXBlIGQgfCBzb3J0IC1yIHwgd2hpbGUgcmVhZCAtciBkaXI7IGRvCiAgICAgICAg ICAgICAgICAgICAgaWYgcm1kaXIgIiR7ZGlyfSIgMj4gL2Rldi9udWxsOyB0aGVuCiAgICAgICAg ICAgICAgICAgICAgICAgIGVjaG8gIiR7X0NZQU59PDw8ICR7ZGlyfSR7X05PUk1BTH0iOwogICAg ICAgICAgICAgICAgICAgIGZpOwogICAgICAgICAgICAgICAgZG9uZTsKICAgICAgICAgICAgZmk7 CiAgICAgICAgZWxzZQogICAgICAgICAgICBpZiBbWyAiJHtwYXRofSIgPT0gKi5weSBdXTsgdGhl bgogICAgICAgICAgICAgICAgYmFzZV9tb2R1bGVfbmFtZT0iJHtwYXRoIyMqL30iOwogICAgICAg ICAgICAgICAgYmFzZV9tb2R1bGVfbmFtZT0iJHtiYXNlX21vZHVsZV9uYW1lJS5weX0iOwogICAg ICAgICAgICAgICAgaWYgW1sgLWQgIiR7cGF0aCUvKn0vX19weWNhY2hlX18iIF1dOyB0aGVuCiAg ICAgICAgICAgICAgICAgICAgd2hpbGUgcmVhZCAtZCAnJyAtciBjb21waWxlZF9maWxlOyBkbwog ICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlZF9maWxlcys9KCIke2NvbXBpbGVkX2ZpbGV9 Iik7CiAgICAgICAgICAgICAgICAgICAgZG9uZSA8IDwoZmluZCAiJHtwYXRoJS8qfS9fX3B5Y2Fj aGVfXyIgIigiIC1uYW1lICIke2Jhc2VfbW9kdWxlX25hbWV9LioucHlbY29dIiAtbyAtbmFtZSAi JHtiYXNlX21vZHVsZV9uYW1lfVwkcHkuY2xhc3MiICIpIiAtcHJpbnQwKTsKICAgICAgICAgICAg ICAgIGZpOwogICAgICAgICAgICAgICAgY29tcGlsZWRfZmlsZXMrPSgiJHtwYXRofWMiICIke3Bh dGh9byIgIiR7cGF0aCUucHl9XCRweS5jbGFzcyIpOwogICAgICAgICAgICBmaTsKICAgICAgICBm aTsKICAgICAgICBmb3IgY29tcGlsZWRfZmlsZSBpbiAiJHtjb21waWxlZF9maWxlc1tAXX0iOwog ICAgICAgIGRvCiAgICAgICAgICAgIFtbICEgLWYgIiR7Y29tcGlsZWRfZmlsZX0iIF1dICYmIGNv bnRpbnVlOwogICAgICAgICAgICBkaXI9IiR7Y29tcGlsZWRfZmlsZSUvKn0iOwogICAgICAgICAg ICBkaXI9IiR7ZGlyIyMqL30iOwogICAgICAgICAgICBpZiBbWyAiJHtjb21waWxlZF9maWxlfSIg PT0gKi5weVtjb10gXV07IHRoZW4KICAgICAgICAgICAgICAgIGlmIFtbICIke2Rpcn0iID09ICJf X3B5Y2FjaGVfXyIgXV07IHRoZW4KICAgICAgICAgICAgICAgICAgICBiYXNlX21vZHVsZV9uYW1l PSIke2NvbXBpbGVkX2ZpbGUjIyovfSI7CiAgICAgICAgICAgICAgICAgICAgYmFzZV9tb2R1bGVf bmFtZT0iJHtiYXNlX21vZHVsZV9uYW1lJS4qcHlbY29dfSI7CiAgICAgICAgICAgICAgICAgICAg YmFzZV9tb2R1bGVfbmFtZT0iJHtiYXNlX21vZHVsZV9uYW1lJS4qfSI7CiAgICAgICAgICAgICAg ICAgICAgcHlfZmlsZT0iJHtjb21waWxlZF9maWxlJV9fcHljYWNoZV9fLyp9JHtiYXNlX21vZHVs ZV9uYW1lfS5weSI7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgcHlf ZmlsZT0iJHtjb21waWxlZF9maWxlJVtjb119IjsKICAgICAgICAgICAgICAgIGZpOwogICAgICAg ICAgICAgICAgaWYgW1sgIiR7RUJVSUxEX1BIQVNFfSIgPT0gInBvc3RpbnN0IiBdXTsgdGhlbgog ICAgICAgICAgICAgICAgICAgIFtbIC1mICIke3B5X2ZpbGV9IiAmJiAiJHtjb21waWxlZF9maWxl fSIgLW50ICIke3B5X2ZpbGV9IiBdXSAmJiBjb250aW51ZTsKICAgICAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICAgICAgICBbWyAtZiAiJHtweV9maWxlfSIgXV0gJiYgY29udGludWU7CiAg ICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgICAgIGVjaG8gIiR7X0JMVUV9PDw8ICR7Y29t cGlsZWRfZmlsZSVbY29dfVtjb10ke19OT1JNQUx9IjsKICAgICAgICAgICAgICAgIHJtIC1mICIk e2NvbXBpbGVkX2ZpbGUlW2NvXX0iW2NvXTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg ICAgaWYgW1sgIiR7Y29tcGlsZWRfZmlsZX0iID09ICpcJHB5LmNsYXNzIF1dOyB0aGVuCiAgICAg ICAgICAgICAgICAgICAgaWYgW1sgIiR7ZGlyfSIgPT0gIl9fcHljYWNoZV9fIiBdXTsgdGhlbgog ICAgICAgICAgICAgICAgICAgICAgICBiYXNlX21vZHVsZV9uYW1lPSIke2NvbXBpbGVkX2ZpbGUj IyovfSI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfbW9kdWxlX25hbWU9IiR7YmFzZV9t b2R1bGVfbmFtZSVcJHB5LmNsYXNzfSI7CiAgICAgICAgICAgICAgICAgICAgICAgIHB5X2ZpbGU9 IiR7Y29tcGlsZWRfZmlsZSVfX3B5Y2FjaGVfXy8qfSR7YmFzZV9tb2R1bGVfbmFtZX0ucHkiOwog ICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgcHlfZmlsZT0i JHtjb21waWxlZF9maWxlJVwkcHkuY2xhc3N9LnB5IjsKICAgICAgICAgICAgICAgICAgICBmaTsK ICAgICAgICAgICAgICAgICAgICBpZiBbWyAiJHtFQlVJTERfUEhBU0V9IiA9PSAicG9zdGluc3Qi IF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIFtbIC1mICIke3B5X2ZpbGV9IiAmJiAi JHtjb21waWxlZF9maWxlfSIgLW50ICIke3B5X2ZpbGV9IiBdXSAmJiBjb250aW51ZTsKICAgICAg ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIFtbIC1mICIke3B5X2Zp bGV9IiBdXSAmJiBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAg ICAgICAgICBlY2hvICIke19CTFVFfTw8PCAke2NvbXBpbGVkX2ZpbGV9JHtfTk9STUFMfSI7CiAg ICAgICAgICAgICAgICAgICAgcm0gLWYgIiR7Y29tcGlsZWRfZmlsZX0iOwogICAgICAgICAgICAg ICAgZWxzZQogICAgICAgICAgICAgICAgICAgIGRpZSAiJHtGVU5DTkFNRX0oKTogVW5yZWNvZ25p emVkIGZpbGUgdHlwZTogJyR7Y29tcGlsZWRfZmlsZX0nIjsKICAgICAgICAgICAgICAgIGZpOwog ICAgICAgICAgICBmaTsKICAgICAgICAgICAgZGlyPSIke2NvbXBpbGVkX2ZpbGUlLyp9IjsKICAg ICAgICAgICAgd2hpbGUgW1sgIiR7ZGlyfSIgIT0gIiR7cm9vdH0iIF1dOyBkbwogICAgICAgICAg ICAgICAgaWYgcm1kaXIgIiR7ZGlyfSIgMj4gL2Rldi9udWxsOyB0aGVuCiAgICAgICAgICAgICAg ICAgICAgZWNobyAiJHtfQ1lBTn08PDwgJHtkaXJ9JHtfTk9STUFMfSI7CiAgICAgICAgICAgICAg ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBmaTsKICAg ICAgICAgICAgICAgIGRpcj0iJHtkaXIlLyp9IjsKICAgICAgICAgICAgZG9uZTsKICAgICAgICBk b25lOwogICAgZG9uZQp9Cl9weXRob25fZmluYWxfc2FuaXR5X2NoZWNrcyAoKSAKeyAKICAgIGlm ICEgX3B5dGhvbl9pbXBsZW1lbnRhdGlvbiAmJiBbWyAiJChkZWNsYXJlIC1wIFBZVEhPTl9TQU5J VFlfQ0hFQ0tTX0VYRUNVVEVEIDI+IC9kZXYvbnVsbCkiICE9ICJkZWNsYXJlIC0tIFBZVEhPTl9T QU5JVFlfQ0hFQ0tTX0VYRUNVVEVEPSIqIHx8ICIgJHtGVU5DTkFNRVtAXToxfSAiID1+ICIgIihw eXRob25fc2V0X2FjdGl2ZV92ZXJzaW9ufHB5dGhvbl9wa2dfc2V0dXApIiAiICYmIC16ICIke1BZ VEhPTl9TS0lQX1NBTklUWV9DSEVDS1N9IiBdXTsgdGhlbgogICAgICAgIGxvY2FsIFBZVEhPTl9B Qkk9IiR7UFlUSE9OX0FCSX0iOwogICAgICAgIGZvciBQWVRIT05fQUJJIGluICR7UFlUSE9OX0FC SVMtJHtQWVRIT05fQUJJfX07CiAgICAgICAgZG8KICAgICAgICAgICAgaWYgISBoYXNfdmVyc2lv biAiJChweXRob25fZ2V0X2ltcGxlbWVudGF0aW9uYWxfcGFja2FnZSkiOyB0aGVuCiAgICAgICAg ICAgICAgICBkaWUgIiQocHl0aG9uX2dldF9pbXBsZW1lbnRhdGlvbmFsX3BhY2thZ2UpIGlzIG5v dCBpbnN0YWxsZWQiOwogICAgICAgICAgICBmaTsKICAgICAgICAgICAgaWYgW1sgIiQoRVBZVEhP Tj0iJChQWVRIT04pIiBweXRob24gLWMgIiR7X1BZVEhPTl9BQklfRVhUUkFDVElPTl9DT01NQU5E fSIpIiAhPSAiJHtQWVRIT05fQUJJfSIgXV07IHRoZW4KICAgICAgICAgICAgICAgIGVlcnJvciAi UGF0aCB0byAncHl0aG9uJzogICAgICAgICAgICAgICAgICckKHR5cGUgLXAgcHl0aG9uKSciOwog ICAgICAgICAgICAgICAgZWVycm9yICJBQkk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JyR7QUJJfSciOwogICAgICAgICAgICAgICAgZWVycm9yICJERUZBVUxUX0FCSTogICAgICAgICAg ICAgICAgICAgICAgJyR7REVGQVVMVF9BQkl9JyI7CiAgICAgICAgICAgICAgICBlZXJyb3IgIkVQ WVRIT046ICAgICAgICAgICAgICAgICAgICAgICAgICAnJChQWVRIT04pJyI7CiAgICAgICAgICAg ICAgICBlZXJyb3IgIlBZVEhPTl9BQkk6ICAgICAgICAgICAgICAgICAgICAgICAnJHtQWVRIT05f QUJJfSciOwogICAgICAgICAgICAgICAgZWVycm9yICJMb2NhbGx5IGFjdGl2ZSB2ZXJzaW9uIG9m IFB5dGhvbjogJyQoRVBZVEhPTj0iJChQWVRIT04pIiBweXRob24gLWMgIiR7X1BZVEhPTl9BQklf RVhUUkFDVElPTl9DT01NQU5EfSIpJyI7CiAgICAgICAgICAgICAgICBkaWUgIidweXRob24nIGRv ZXMgbm90IHJlc3BlY3QgRVBZVEhPTiB2YXJpYWJsZSI7CiAgICAgICAgICAgIGZpOwogICAgICAg IGRvbmU7CiAgICBmaTsKICAgIFBZVEhPTl9TQU5JVFlfQ0hFQ0tTX0VYRUNVVEVEPSIxIgp9Cl9w eXRob25fZ2V0X2ltcGxlbWVudGF0aW9uICgpIAp7IAogICAgbG9jYWwgaWdub3JlX2ludmFsaWQ9 IjAiOwogICAgd2hpbGUgKCgkIykpOyBkbwogICAgICAgIGNhc2UgIiQxIiBpbiAKICAgICAgICAg ICAgLS1pZ25vcmUtaW52YWxpZCkKICAgICAgICAgICAgICAgIGlnbm9yZV9pbnZhbGlkPSIxIgog ICAgICAgICAgICA7OwogICAgICAgICAgICAtLSkKICAgICAgICAgICAgICAgIHNoaWZ0OwogICAg ICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgOzsKICAgICAgICAgICAgLSopCiAgICAgICAg ICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6IFVucmVjb2duaXplZCBvcHRpb24gJyQxJyIKICAg ICAgICAgICAgOzsKICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAg ICAgIDs7CiAgICAgICAgZXNhYzsKICAgICAgICBzaGlmdDsKICAgIGRvbmU7CiAgICBpZiBbWyAi JCMiIC1uZSAxIF1dOyB0aGVuCiAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpIHJlcXVpcmVzIDEg YXJndW1lbnQiOwogICAgZmk7CiAgICBpZiBbWyAiJDEiID1+IF5bWzpkaWdpdDpdXStcLltbOmRp Z2l0Ol1dKyQgXV07IHRoZW4KICAgICAgICBlY2hvICJDUHl0aG9uIjsKICAgIGVsc2UKICAgICAg ICBpZiBbWyAiJDEiID1+IF5bWzpkaWdpdDpdXStcLltbOmRpZ2l0Ol1dKy1qeXRob24kIF1dOyB0 aGVuCiAgICAgICAgICAgIGVjaG8gIkp5dGhvbiI7CiAgICAgICAgZWxzZQogICAgICAgICAgICBp ZiBbWyAiJDEiID1+IF5bWzpkaWdpdDpdXStcLltbOmRpZ2l0Ol1dKy1weXB5LVtbOmRpZ2l0Ol1d K1wuW1s6ZGlnaXQ6XV0rJCBdXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAiUHlQeSI7CiAg ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGlmIFtbICIke2lnbm9yZV9pbnZhbGlkfSIg PT0gIjAiIF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpOiBV bnJlY29nbml6ZWQgUHl0aG9uIEFCSSAnJDEnIjsKICAgICAgICAgICAgICAgIGZpOwogICAgICAg ICAgICBmaTsKICAgICAgICBmaTsKICAgIGZpCn0KX3B5dGhvbl9pbXBsZW1lbnRhdGlvbiAoKSAK eyAKICAgIGlmIFtbICIke0NBVEVHT1JZfS8ke1BOfSIgPT0gImRldi1sYW5nL3B5dGhvbiIgXV07 IHRoZW4KICAgICAgICByZXR1cm4gMDsKICAgIGVsc2UKICAgICAgICBpZiBbWyAiJHtDQVRFR09S WX0vJHtQTn0iID09ICJkZXYtamF2YS9qeXRob24iIF1dOyB0aGVuCiAgICAgICAgICAgIHJldHVy biAwOwogICAgICAgIGVsc2UKICAgICAgICAgICAgaWYgW1sgIiR7Q0FURUdPUll9LyR7UE59IiA9 PSAiZGV2LXB5dGhvbi9weXB5IiBdXTsgdGhlbgogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAg ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICBmaTsK ICAgICAgICBmaTsKICAgIGZpCn0KX3B5dGhvbl9pbml0aWFsX3Nhbml0eV9jaGVja3MgKCkgCnsg CiAgICBpZiBbWyAiJChkZWNsYXJlIC1wIFBZVEhPTl9TQU5JVFlfQ0hFQ0tTX0VYRUNVVEVEIDI+ IC9kZXYvbnVsbCkiICE9ICJkZWNsYXJlIC0tIFBZVEhPTl9TQU5JVFlfQ0hFQ0tTX0VYRUNVVEVE PSIqIHx8ICIgJHtGVU5DTkFNRVtAXToxfSAiID1+ICIgIihweXRob25fc2V0X2FjdGl2ZV92ZXJz aW9ufHB5dGhvbl9wa2dfc2V0dXApIiAiICYmIC16ICIke1BZVEhPTl9TS0lQX1NBTklUWV9DSEVD S1N9IiBdXTsgdGhlbgogICAgICAgIGlmIFtbICIkKHJlYWRsaW5rICIke0VQUkVGSVh9L3Vzci9i aW4vcHl0aG9uIikiICE9ICJweXRob24td3JhcHBlciIgXV07IHRoZW4KICAgICAgICAgICAgZWVy cm9yICInJHtFUFJFRklYfS91c3IvYmluL3B5dGhvbicgaXMgbm90IHZhbGlkIHN5bWxpbmsuIjsK ICAgICAgICAgICAgZWVycm9yICJVc2UgXGBlc2VsZWN0IHB5dGhvbiBzZXQgXCR7cHl0aG9uX2lu dGVycHJldGVyfVxgIHRvIGZpeCB0aGlzIHByb2JsZW0uIjsKICAgICAgICAgICAgZGllICInJHtF UFJFRklYfS91c3IvYmluL3B5dGhvbicgaXMgbm90IHZhbGlkIHN5bWxpbmsiOwogICAgICAgIGZp OwogICAgICAgIGlmIFtbICIkKDwiJHtFUFJFRklYfS91c3IvYmluL3B5dGhvbi1jb25maWciKSIg IT0gKiJHZW50b28gcHl0aG9uLWNvbmZpZyB3cmFwcGVyIHNjcmlwdCIqIF1dOyB0aGVuCiAgICAg ICAgICAgIGVlcnJvciAiJyR7RVBSRUZJWH0vdXNyL2Jpbi9weXRob24tY29uZmlnJyBpcyBub3Qg dmFsaWQgc2NyaXB0IjsKICAgICAgICAgICAgZWVycm9yICJVc2UgXGBlc2VsZWN0IHB5dGhvbiBz ZXQgXCR7cHl0aG9uX2ludGVycHJldGVyfVxgIHRvIGZpeCB0aGlzIHByb2JsZW0uIjsKICAgICAg ICAgICAgZGllICInJHtFUFJFRklYfS91c3IvYmluL3B5dGhvbi1jb25maWcnIGlzIG5vdCB2YWxp ZCBzY3JpcHQiOwogICAgICAgIGZpOwogICAgZmkKfQpfcHl0aG9uX2luaXRpYWxpemVfcHJlZml4 X3ZhcmlhYmxlcyAoKSAKeyAKICAgIGlmIGhhcyAiJHtFQVBJOi0wfSIgMCAxIDI7IHRoZW4KICAg ICAgICBpZiBbWyAtbiAiJHtST09UfSIgJiYgLXogIiR7RVJPT1R9IiBdXTsgdGhlbgogICAgICAg ICAgICBFUk9PVD0iJHtST09UJS99JHtFUFJFRklYfS8iOwogICAgICAgIGZpOwogICAgICAgIGlm IFtbIC1uICIke0R9IiAmJiAteiAiJHtFRH0iIF1dOyB0aGVuCiAgICAgICAgICAgIEVEPSIke0Ql L30ke0VQUkVGSVh9LyI7CiAgICAgICAgZmk7CiAgICBmaQp9Cl9weXRob25fcGFja2FnZV9zdXBw b3J0aW5nX2luc3RhbGxhdGlvbl9mb3JfbXVsdGlwbGVfcHl0aG9uX2FiaXMgKCkgCnsgCiAgICBp ZiBoYXMgIiR7RUFQSTotMH0iIDAgMSAyIDMgNDsgdGhlbgogICAgICAgIGlmIFtbIC1uICIke1NV UFBPUlRfUFlUSE9OX0FCSVN9IiBdXTsgdGhlbgogICAgICAgICAgICByZXR1cm4gMDsKICAgICAg ICBlbHNlCiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIGZpOwogICAgZWxzZQogICAgICAg IGRpZSAiJHtGVU5DTkFNRX0oKTogU3VwcG9ydCBmb3IgRUFQST1cIiR7RUFQSX1cIiBub3QgaW1w bGVtZW50ZWQiOwogICAgZmkKfQpfcHl0aG9uX3ByZXBhcmVfZmxhZ3MgKCkgCnsgCiAgICBsb2Nh bCBhcnJheT0oKSBkZWxldGVkX2ZsYWcgZWxlbWVudCBmbGFncyBuZXdfdmFsdWUgb2xkX2ZsYWcg b2xkX3ZhbHVlIG9wZXJhdG9yIHBhdHRlcm4gcHJlZml4IHZhcmlhYmxlOwogICAgZm9yIHZhcmlh YmxlIGluIENQUEZMQUdTIENGTEFHUyBDWFhGTEFHUyBMREZMQUdTOwogICAgZG8KICAgICAgICBl dmFsICJfUFlUSE9OX1NBVkVEXyR7dmFyaWFibGV9PVwiXCR7IXZhcmlhYmxlfVwiIjsKICAgICAg ICBmb3IgcHJlZml4IGluIFBZVEhPTl9VU0VSXyBQWVRIT05fOwogICAgICAgIGRvCiAgICAgICAg ICAgIGlmIFtbICIkKGRlY2xhcmUgLXAgJHtwcmVmaXh9JHt2YXJpYWJsZX0gMj4gL2Rldi9udWxs KSIgPT0gImRlY2xhcmUgLWEgJHtwcmVmaXh9JHt2YXJpYWJsZX09IiogXV07IHRoZW4KICAgICAg ICAgICAgICAgIGV2YWwgImFycmF5PShcIlwkeyR7cHJlZml4fSR7dmFyaWFibGV9W0BdfVwiKSI7 CiAgICAgICAgICAgICAgICBmb3IgZWxlbWVudCBpbiAiJHthcnJheVtAXX0iOwogICAgICAgICAg ICAgICAgZG8KICAgICAgICAgICAgICAgICAgICBpZiBbWyAiJHtlbGVtZW50fSIgPX4gXiR7X1BZ VEhPTl9BQklfUEFUVEVSTl9SRUdFWH1cIChcK3wtKVwgLisgXV07IHRoZW4KICAgICAgICAgICAg ICAgICAgICAgICAgcGF0dGVybj0iJHtlbGVtZW50JSUgKn0iOwogICAgICAgICAgICAgICAgICAg ICAgICBlbGVtZW50PSIke2VsZW1lbnQjKiB9IjsKICAgICAgICAgICAgICAgICAgICAgICAgb3Bl cmF0b3I9IiR7ZWxlbWVudCUlICp9IjsKICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M9IiR7 ZWxlbWVudCMqIH0iOwogICAgICAgICAgICAgICAgICAgICAgICBpZiBfcHl0aG9uX2NoZWNrX3B5 dGhvbl9hYmlfbWF0Y2hpbmcgIiR7UFlUSE9OX0FCSX0iICIke3BhdHRlcm59IjsgdGhlbgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgW1sgIiR7b3BlcmF0b3J9IiA9PSAiKyIgXV07IHRo ZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsICJleHBvcnQgJHt2YXJpYWJs ZX0rPVwiXCR7dmFyaWFibGU6KyB9JHtmbGFnc31cIiI7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgW1sgIiR7b3BlcmF0 b3J9IiA9PSAiLSIgXV07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZmxhZ3M9IiR7ZmxhZ3MvLyAvCn0iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBvbGRfdmFsdWU9IiR7IXZhcmlhYmxlLy8gLwp9IjsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbmV3X3ZhbHVlPSIiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB3aGlsZSByZWFkIG9sZF9mbGFnOyBkbwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgd2hpbGUgcmVhZCBkZWxldGVkX2ZsYWc7IGRvCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgW1sgIiR7b2xkX2ZsYWd9IiA9PSAke2RlbGV0 ZWRfZmxhZ30gXV07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29udGludWUgMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUg PDw8ICIke2ZsYWdzfSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu ZXdfdmFsdWUrPSIke25ld192YWx1ZTorIH0ke29sZF9mbGFnfSI7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRvbmUgPDw8ICIke29sZF92YWx1ZX0iOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBldmFsICJleHBvcnQgJHt2YXJpYWJsZX09XCJcJHtuZXdf dmFsdWV9XCIiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZpOwogICAgICAg ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgZGllICJFbGVtZW50ICck e2VsZW1lbnR9JyBvZiAke3ByZWZpeH0ke3ZhcmlhYmxlfSBhcnJheSBoYXMgaW52YWxpZCBzeW50 YXgiOwogICAgICAgICAgICAgICAgICAgIGZpOwogICAgICAgICAgICAgICAgZG9uZTsKICAgICAg ICAgICAgZWxzZQogICAgICAgICAgICAgICAgaWYgW1sgLW4gIiQoZGVjbGFyZSAtcCAke3ByZWZp eH0ke3ZhcmlhYmxlfSAyPiAvZGV2L251bGwpIiBdXTsgdGhlbgogICAgICAgICAgICAgICAgICAg IGRpZSAiJHtwcmVmaXh9JHt2YXJpYWJsZX0gc2hvdWxkIGJlIGluZGV4ZWQgYXJyYXkiOwogICAg ICAgICAgICAgICAgZmk7CiAgICAgICAgICAgIGZpOwogICAgICAgIGRvbmU7CiAgICBkb25lCn0K X3B5dGhvbl9yZXN0b3JlX2ZsYWdzICgpIAp7IAogICAgbG9jYWwgdmFyaWFibGU7CiAgICBmb3Ig dmFyaWFibGUgaW4gQ1BQRkxBR1MgQ0ZMQUdTIENYWEZMQUdTIExERkxBR1M7CiAgICBkbwogICAg ICAgIGV2YWwgIiR7dmFyaWFibGV9PVwiXCR7X1BZVEhPTl9TQVZFRF8ke3ZhcmlhYmxlfX1cIiI7 CiAgICAgICAgdW5zZXQgX1BZVEhPTl9TQVZFRF8ke3ZhcmlhYmxlfTsKICAgIGRvbmUKfQpfcHl0 aG9uX3NldF9jb2xvcl92YXJpYWJsZXMgKCkgCnsgCiAgICBpZiBbWyAiJHtQWVRIT05fQ09MT1JT fSIgIT0gIjAiICYmICIke05PQ09MT1I6LWZhbHNlfSIgPX4gXihmYWxzZXxubykkIF1dOyB0aGVu CiAgICAgICAgX0JPTEQ9JxtbMW0nOwogICAgICAgIF9SRUQ9JxtbMTszMW0nOwogICAgICAgIF9H UkVFTj0nG1sxOzMybSc7CiAgICAgICAgX0JMVUU9JxtbMTszNG0nOwogICAgICAgIF9DWUFOPScb WzE7MzZtJzsKICAgICAgICBfTk9STUFMPScbWzBtJzsKICAgIGVsc2UKICAgICAgICBfQk9MRD07 CiAgICAgICAgX1JFRD07CiAgICAgICAgX0dSRUVOPTsKICAgICAgICBfQkxVRT07CiAgICAgICAg X0NZQU49OwogICAgICAgIF9OT1JNQUw9OwogICAgZmkKfQpfcHl0aG9uX3Rlc3RfaG9vayAoKSAK eyAKICAgIGlmIFtbICIkIyIgLW5lIDEgXV07IHRoZW4KICAgICAgICBkaWUgIiR7RlVOQ05BTUV9 KCkgcmVxdWlyZXMgMSBhcmd1bWVudCI7CiAgICBmaTsKICAgIGlmIF9weXRob25fcGFja2FnZV9z dXBwb3J0aW5nX2luc3RhbGxhdGlvbl9mb3JfbXVsdGlwbGVfcHl0aG9uX2FiaXMgJiYgW1sgIiQo dHlwZSAtdCAiJHtfUFlUSE9OX1RFU1RfRlVOQ1RJT059XyQxX2hvb2siKSIgPT0gImZ1bmN0aW9u IiBdXTsgdGhlbgogICAgICAgICIke19QWVRIT05fVEVTVF9GVU5DVElPTn1fJDFfaG9vayI7CiAg ICBmaQp9Cl90Yy1nZXRQUk9HICgpIAp7IAogICAgbG9jYWwgdHVwbGU9JDE7CiAgICBsb2NhbCB2 IHZhciB2YXJzPSQyOwogICAgbG9jYWwgcHJvZz0kMzsKICAgIHZhcj0ke3ZhcnMlJSAqfTsKICAg IGZvciB2IGluICR7dmFyc307CiAgICBkbwogICAgICAgIGlmIFtbIC1uICR7IXZ9IF1dOyB0aGVu CiAgICAgICAgICAgIGV4cG9ydCAke3Zhcn09IiR7IXZ9IjsKICAgICAgICAgICAgZWNobyAiJHsh dn0iOwogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICBmaTsKICAgIGRvbmU7CiAgICBsb2Nh bCBzZWFyY2g9OwogICAgW1sgLW4gJDQgXV0gJiYgc2VhcmNoPSQodHlwZSAtcCAiJDQtJHtwcm9n fSIpOwogICAgW1sgLXogJHtzZWFyY2h9ICYmIC1uICR7IXR1cGxlfSBdXSAmJiBzZWFyY2g9JCh0 eXBlIC1wICIkeyF0dXBsZX0tJHtwcm9nfSIpOwogICAgW1sgLW4gJHtzZWFyY2h9IF1dICYmIHBy b2c9JHtzZWFyY2gjIyovfTsKICAgIGV4cG9ydCAke3Zhcn09JHtwcm9nfTsKICAgIGVjaG8gIiR7 IXZhcn0iCn0KYXV0b3Rvb2xzX2NoZWNrX21hY3JvICgpIAp7IAogICAgW1sgLWYgY29uZmlndXJl LmFjIHx8IC1mIGNvbmZpZ3VyZS5pbiBdXSB8fCByZXR1cm4gMDsKICAgIGxvY2FsIG1hY3JvOwog ICAgZm9yIG1hY3JvIGluICIkQCI7CiAgICBkbwogICAgICAgIFdBTlRfQVVUT0NPTkY9IjIuNSIg YXV0b2NvbmYgJChhdXRvdG9vbHNfbTRkaXJfaW5jbHVkZSkgLS10cmFjZT0iJHttYWNyb30iIDI+ IC9kZXYvbnVsbDsKICAgIGRvbmU7CiAgICByZXR1cm4gMAp9CmF1dG90b29sc19jaGVja19tYWNy b192YWwgKCkgCnsgCiAgICBsb2NhbCBtYWNybz0kMSBzY2FuX291dDsKICAgIGF1dG90b29sc19j aGVja19tYWNybyAiJHttYWNyb30iIHwgZ2F3ayAtdiBtYWNybz0iJHttYWNyb30iICcoJDAgIX4g L15bWzpzcGFjZTpdXSooI3xkbmwpLykgewoJCQkJaWYgKG1hdGNoKCQwLCBtYWNybyAiOiguKikk IiwgcmVzKSkKCQkJCQlwcmludCByZXNbMV0KCQkJfScgfCB1bmlxOwogICAgcmV0dXJuIDAKfQph dXRvdG9vbHNfZW52X3NldHVwICgpIAp7IAogICAgaWYgW1sgJHtXQU5UX0FVVE9NQUtFfSA9PSAi bGF0ZXN0IiBdXTsgdGhlbgogICAgICAgIGxvY2FsIHB2OwogICAgICAgIGZvciBwdiBpbiAke19M QVRFU1RfQVVUT01BS0V9OwogICAgICAgIGRvCiAgICAgICAgICAgIFJPT1Q9LyBoYXNfdmVyc2lv biAiPXN5cy1kZXZlbC9hdXRvbWFrZS0ke3B2fSoiICYmIGV4cG9ydCBXQU5UX0FVVE9NQUtFPSIk cHYiOwogICAgICAgIGRvbmU7CiAgICAgICAgW1sgJHtXQU5UX0FVVE9NQUtFfSA9PSAibGF0ZXN0 IiBdXSAmJiBkaWUgIkNhbm5vdCBmaW5kIHRoZSBsYXRlc3QgYXV0b21ha2UhIFRyaWVkICR7X0xB VEVTVF9BVVRPTUFLRX0iOwogICAgZmk7CiAgICBbWyAke1dBTlRfQVVUT0NPTkZ9ID09ICJsYXRl c3QiIF1dICYmIGV4cG9ydCBXQU5UX0FVVE9DT05GPTIuNQp9CmF1dG90b29sc19nZXRfYXV4ZGly ICgpIAp7IAogICAgYXV0b3Rvb2xzX2NoZWNrX21hY3JvX3ZhbCBBQ19DT05GSUdfQVVYX0RJUgp9 CmF1dG90b29sc19nZXRfc3ViZGlycyAoKSAKeyAKICAgIGF1dG90b29sc19jaGVja19tYWNyb192 YWwgQUNfQ09ORklHX1NVQkRJUlMKfQphdXRvdG9vbHNfbTRkaXJfaW5jbHVkZSAoKSAKeyAKICAg IF9hdXRvdG9vbHNfbTRkaXJfaW5jbHVkZSAke0FUX000RElSfQp9CmF1dG90b29sc19tNHN5c2Rp cl9pbmNsdWRlICgpIAp7IAogICAgX2F1dG90b29sc19tNGRpcl9pbmNsdWRlICQoZXZhbCBlY2hv ICR7QVRfU1lTX000RElSfSkKfQphdXRvdG9vbHNfcnVuX3Rvb2wgKCkgCnsgCiAgICBsb2NhbCBh dXRvZmFpbD10cnVlIG00ZmxhZ3M9ZmFsc2U7CiAgICB3aGlsZSBbWyAtbiAkMSBdXTsgZG8KICAg ICAgICBjYXNlICQxIGluIAogICAgICAgICAgICAtLWF0LW5vLWZhaWwpCiAgICAgICAgICAgICAg ICBhdXRvZmFpbD1mYWxzZQogICAgICAgICAgICA7OwogICAgICAgICAgICAtLWF0LW00ZmxhZ3Mp CiAgICAgICAgICAgICAgICBtNGZsYWdzPXRydWUKICAgICAgICAgICAgOzsKICAgICAgICAgICAg KikKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIDs7CiAgICAgICAgZXNhYzsKICAg ICAgICBzaGlmdDsKICAgIGRvbmU7CiAgICBpZiBbWyAke0VCVUlMRF9QSEFTRX0gIT0gInVucGFj ayIgJiYgJHtFQlVJTERfUEhBU0V9ICE9ICJwcmVwYXJlIiBdXTsgdGhlbgogICAgICAgIGV3YXJu ICJRQSBXYXJuaW5nOiBydW5uaW5nICQxIGluICR7RUJVSUxEX1BIQVNFfSBwaGFzZSI7CiAgICBm aTsKICAgIGF1dG90b29sc19lbnZfc2V0dXA7CiAgICBsb2NhbCBTVERFUlJfVEFSR0VUPSIke1R9 LyQxLm91dCI7CiAgICBpZiBbWyAtZSAke1NUREVSUl9UQVJHRVR9IF1dOyB0aGVuCiAgICAgICAg bG9jYWwgaT0xOwogICAgICAgIHdoaWxlIDo7IGRvCiAgICAgICAgICAgIFNUREVSUl9UQVJHRVQ9 IiR7VH0vJDEtJHtpfS5vdXQiOwogICAgICAgICAgICBbWyAtZSAke1NUREVSUl9UQVJHRVR9IF1d IHx8IGJyZWFrOwogICAgICAgICAgICA6ICQoKCBpKysgKSk7CiAgICAgICAgZG9uZTsKICAgIGZp OwogICAgaWYgJHttNGZsYWdzfTsgdGhlbgogICAgICAgIHNldCAtLSAiJHsxfSIgJChhdXRvdG9v bHNfbTRkaXJfaW5jbHVkZSkgIiR7QDoyfSIgJChhdXRvdG9vbHNfbTRzeXNkaXJfaW5jbHVkZSk7 CiAgICBmaTsKICAgIHByaW50ZiAiKioqKiogJDEgKioqKipcbioqKioqIFBXRDogJHtQV0R9XG4q KioqKiAkKlxuXG4iID4gIiR7U1RERVJSX1RBUkdFVH0iOwogICAgZWJlZ2luICJSdW5uaW5nICRA IjsKICAgICIkQCIgPj4gIiR7U1RERVJSX1RBUkdFVH0iIDI+JjE7CiAgICBpZiAhIGVlbmQgJD8g JiYgJHthdXRvZmFpbH07IHRoZW4KICAgICAgICBlY2hvOwogICAgICAgIGVlcnJvciAiRmFpbGVk IFJ1bm5pbmcgJDEgISI7CiAgICAgICAgZWVycm9yOwogICAgICAgIGVlcnJvciAiSW5jbHVkZSBp biB5b3VyIGJ1Z3JlcG9ydCB0aGUgY29udGVudHMgb2Y6IjsKICAgICAgICBlZXJyb3I7CiAgICAg ICAgZWVycm9yICIgICR7U1RERVJSX1RBUkdFVH0iOwogICAgICAgIGVjaG87CiAgICAgICAgZGll ICJGYWlsZWQgUnVubmluZyAkMSAhIjsKICAgIGZpCn0KYnVpbHRfd2l0aF91c2UgKCkgCnsgCiAg ICBsb2NhbCBoaWRkZW49Im5vIjsKICAgIGlmIFtbICQxID09ICItLWhpZGRlbiIgXV07IHRoZW4K ICAgICAgICBoaWRkZW49InllcyI7CiAgICAgICAgc2hpZnQ7CiAgICBmaTsKICAgIGxvY2FsIG1p c3NpbmdfYWN0aW9uPSJkaWUiOwogICAgaWYgW1sgJDEgPT0gIi0tbWlzc2luZyIgXV07IHRoZW4K ICAgICAgICBtaXNzaW5nX2FjdGlvbj0kMjsKICAgICAgICBzaGlmdDsKICAgICAgICBzaGlmdDsK ICAgICAgICBjYXNlICR7bWlzc2luZ19hY3Rpb259IGluIAogICAgICAgICAgICB0cnVlIHwgZmFs c2UgfCBkaWUpCgogICAgICAgICAgICA7OwogICAgICAgICAgICAqKQogICAgICAgICAgICAgICAg ZGllICJ1bmtub3duIGFjdGlvbiAnJHttaXNzaW5nX2FjdGlvbn0nIgogICAgICAgICAgICA7Owog ICAgICAgIGVzYWM7CiAgICBmaTsKICAgIGxvY2FsIG9wdD0kMTsKICAgIFtbICR7b3B0OjA6MX0g PSAiLSIgXV0gJiYgc2hpZnQgfHwgb3B0PSItYSI7CiAgICBsb2NhbCBQS0c9JChiZXN0X3ZlcnNp b24gJDEpOwogICAgW1sgLXogJHtQS0d9IF1dICYmIGRpZSAiVW5hYmxlIHRvIHJlc29sdmUgJDEg dG8gYW4gaW5zdGFsbGVkIHBhY2thZ2UiOwogICAgc2hpZnQ7CiAgICBsb2NhbCBVU0VGSUxFPSR7 Uk9PVH0vdmFyL2RiL3BrZy8ke1BLR30vVVNFOwogICAgbG9jYWwgSVVTRUZJTEU9JHtST09UfS92 YXIvZGIvcGtnLyR7UEtHfS9JVVNFOwogICAgaWYgW1sgISAtZSAke1VTRUZJTEV9IF1dIHx8IFtb ICEgLWUgJHtJVVNFRklMRX0gJiYgJHtoaWRkZW59ID09ICJubyIgXV07IHRoZW4KICAgICAgICBj YXNlICR7bWlzc2luZ19hY3Rpb259IGluIAogICAgICAgICAgICB0cnVlKQogICAgICAgICAgICAg ICAgcmV0dXJuIDAKICAgICAgICAgICAgOzsKICAgICAgICAgICAgZmFsc2UpCiAgICAgICAgICAg ICAgICByZXR1cm4gMQogICAgICAgICAgICA7OwogICAgICAgICAgICBkaWUpCiAgICAgICAgICAg ICAgICBkaWUgIlVuYWJsZSB0byBkZXRlcm1pbmUgd2hhdCBVU0UgZmxhZ3MgJFBLRyB3YXMgYnVp bHQgd2l0aCIKICAgICAgICAgICAgOzsKICAgICAgICBlc2FjOwogICAgZmk7CiAgICBpZiBbWyAk e2hpZGRlbn0gPT0gIm5vIiBdXTsgdGhlbgogICAgICAgIGxvY2FsIElVU0VfQlVJTFQ9KCQoPCIk e0lVU0VGSUxFfSIpKTsKICAgICAgICBsb2NhbCBleHBhbmQ7CiAgICAgICAgZm9yIGV4cGFuZCBp biAkKGVjaG8gJHtVU0VfRVhQQU5EfSB8IHRyICdbOnVwcGVyOl0nICdbOmxvd2VyOl0nKTsKICAg ICAgICBkbwogICAgICAgICAgICBpZiBbWyAkMSA9PSAke2V4cGFuZH1fKiBdXTsgdGhlbgogICAg ICAgICAgICAgICAgZXhwYW5kPSIiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg IGZpOwogICAgICAgIGRvbmU7CiAgICAgICAgaWYgW1sgLW4gJHtleHBhbmR9IF1dOyB0aGVuCiAg ICAgICAgICAgIGlmICEgaGFzICQxICR7SVVTRV9CVUlMVFtAXSNbLStdfTsgdGhlbgogICAgICAg ICAgICAgICAgY2FzZSAke21pc3NpbmdfYWN0aW9ufSBpbiAKICAgICAgICAgICAgICAgICAgICB0 cnVlKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAogICAgICAgICAgICAgICAgICAg IDs7CiAgICAgICAgICAgICAgICAgICAgZmFsc2UpCiAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiAxCiAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICBkaWUpCiAg ICAgICAgICAgICAgICAgICAgICAgIGRpZSAiJFBLRyBkb2VzIG5vdCBhY3R1YWxseSBzdXBwb3J0 IHRoZSAkMSBVU0UgZmxhZyEiCiAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAg IGVzYWM7CiAgICAgICAgICAgIGZpOwogICAgICAgIGZpOwogICAgZmk7CiAgICBsb2NhbCBVU0Vf QlVJTFQ9JCg8JHtVU0VGSUxFfSk7CiAgICB3aGlsZSBbWyAkIyAtZ3QgMCBdXTsgZG8KICAgICAg ICBpZiBbWyAke29wdH0gPSAiLW8iIF1dOyB0aGVuCiAgICAgICAgICAgIGhhcyAkMSAke1VTRV9C VUlMVH0gJiYgcmV0dXJuIDA7CiAgICAgICAgZWxzZQogICAgICAgICAgICBoYXMgJDEgJHtVU0Vf QlVJTFR9IHx8IHJldHVybiAxOwogICAgICAgIGZpOwogICAgICAgIHNoaWZ0OwogICAgZG9uZTsK ICAgIFtbICR7b3B0fSA9ICItYSIgXV0KfQpjZHJvbV9nZXRfY2RzICgpIAp7IAogICAgbG9jYWwg Y2RjbnQ9MDsKICAgIGxvY2FsIGY9OwogICAgZm9yIGYgaW4gIiRAIjsKICAgIGRvCiAgICAgICAg KCgrK2NkY250KSk7CiAgICAgICAgZXhwb3J0IENEUk9NX0NIRUNLXyR7Y2RjbnR9PSIkZiI7CiAg ICBkb25lOwogICAgZXhwb3J0IENEUk9NX1RPVEFMX0NEUz0ke2NkY250fTsKICAgIGV4cG9ydCBD RFJPTV9DVVJSRU5UX0NEPTE7CiAgICBpZiBbWyAtbiAke0NEX1JPT1R9JHtDRF9ST09UXzF9IF1d OyB0aGVuCiAgICAgICAgbG9jYWwgdmFyPTsKICAgICAgICBjZGNudD0wOwogICAgICAgIHdoaWxl IFtbICR7Y2RjbnR9IC1sdCAke0NEUk9NX1RPVEFMX0NEU30gXV07IGRvCiAgICAgICAgICAgICgo KytjZGNudCkpOwogICAgICAgICAgICB2YXI9IkNEX1JPT1RfJHtjZGNudH0iOwogICAgICAgICAg ICBbWyAteiAkeyF2YXJ9IF1dICYmIHZhcj0iQ0RfUk9PVCI7CiAgICAgICAgICAgIGlmIFtbIC16 ICR7IXZhcn0gXV07IHRoZW4KICAgICAgICAgICAgICAgIGVlcnJvciAiWW91IG11c3QgZWl0aGVy IHVzZSBqdXN0IHRoZSBDRF9ST09UIjsKICAgICAgICAgICAgICAgIGVlcnJvciAib3Igc3BlY2lm eSBBTEwgdGhlIENEX1JPT1RfWCB2YXJpYWJsZXMuIjsKICAgICAgICAgICAgICAgIGVlcnJvciAi SW4gdGhpcyBjYXNlLCB5b3Ugd2lsbCBuZWVkICR7Q0RST01fVE9UQUxfQ0RTfSBDRF9ST09UX1gg dmFyaWFibGVzLiI7CiAgICAgICAgICAgICAgICBkaWUgImNvdWxkIG5vdCBsb2NhdGUgQ0RfUk9P VF8ke2NkY250fSI7CiAgICAgICAgICAgIGZpOwogICAgICAgIGRvbmU7CiAgICAgICAgZXhwb3J0 IENEUk9NX1JPT1Q9JHtDRF9ST09UXzE6LSR7Q0RfUk9PVH19OwogICAgICAgIGVpbmZvICJGb3Vu ZCBDRCAjJHtDRFJPTV9DVVJSRU5UX0NEfSByb290IGF0ICR7Q0RST01fUk9PVH0iOwogICAgICAg IGV4cG9ydCBDRFJPTV9TRVQ9LTE7CiAgICAgICAgZm9yIGYgaW4gJHtDRFJPTV9DSEVDS18xLy86 LyB9OwogICAgICAgIGRvCiAgICAgICAgICAgICgoKytDRFJPTV9TRVQpKTsKICAgICAgICAgICAg W1sgLWUgJHtDRFJPTV9ST09UfS8ke2Z9IF1dICYmIGJyZWFrOwogICAgICAgIGRvbmU7CiAgICAg ICAgZXhwb3J0IENEUk9NX01BVENIPSR7Zn07CiAgICAgICAgcmV0dXJuOwogICAgZmk7CiAgICBp ZiBbWyAke0NEUk9NX1RPVEFMX0NEU30gLWVxIDEgXV07IHRoZW4KICAgICAgICBlaW5mbyAiVGhp cyBlYnVpbGQgd2lsbCBuZWVkIHRoZSAke0NEUk9NX05BTUU6LWNkcm9tIGZvciAke1BOfX0iOwog ICAgICAgIGVjaG87CiAgICAgICAgZWluZm8gIklmIHlvdSBkbyBub3QgaGF2ZSB0aGUgQ0QsIGJ1 dCBoYXZlIHRoZSBkYXRhIGZpbGVzIjsKICAgICAgICBlaW5mbyAibW91bnRlZCBzb21ld2hlcmUg b24geW91ciBmaWxlc3lzdGVtLCBqdXN0IGV4cG9ydCI7CiAgICAgICAgZWluZm8gInRoZSB2YXJp YWJsZSBDRF9ST09UIHNvIHRoYXQgaXQgcG9pbnRzIHRvIHRoZSI7CiAgICAgICAgZWluZm8gImRp cmVjdG9yeSBjb250YWluaW5nIHRoZSBmaWxlcy4iOwogICAgICAgIGVjaG87CiAgICAgICAgZWlu Zm8gIkZvciBleGFtcGxlOiI7CiAgICAgICAgZWluZm8gImV4cG9ydCBDRF9ST09UPS9tbnQvY2Ry b20iOwogICAgICAgIGVjaG87CiAgICBlbHNlCiAgICAgICAgaWYgW1sgLW4gJHtDRFJPTV9OQU1F X1NFVH0gXV07IHRoZW4KICAgICAgICAgICAgY2RjbnQ9MDsKICAgICAgICAgICAgd2hpbGUgW1sg JHtjZGNudH0gLWx0ICR7Q0RST01fVE9UQUxfQ0RTfSBdXTsgZG8KICAgICAgICAgICAgICAgICgo KytjZGNudCkpOwogICAgICAgICAgICAgICAgZXhwb3J0IENEUk9NX05BTUVfJHtjZGNudH09IiR7 Q0RST01fTkFNRV9TRVRbJCgoJHtjZGNudH0tMSkpXX0iOwogICAgICAgICAgICBkb25lOwogICAg ICAgIGZpOwogICAgICAgIGVpbmZvICJUaGlzIHBhY2thZ2Ugd2lsbCBuZWVkIGFjY2VzcyB0byAk e0NEUk9NX1RPVEFMX0NEU30gY2RzLiI7CiAgICAgICAgY2RjbnQ9MDsKICAgICAgICB3aGlsZSBb WyAke2NkY250fSAtbHQgJHtDRFJPTV9UT1RBTF9DRFN9IF1dOyBkbwogICAgICAgICAgICAoKCsr Y2RjbnQpKTsKICAgICAgICAgICAgdmFyPSJDRFJPTV9OQU1FXyR7Y2RjbnR9IjsKICAgICAgICAg ICAgW1sgISAteiAkeyF2YXJ9IF1dICYmIGVpbmZvICIgQ0QgJHtjZGNudH06ICR7IXZhcn0iOwog ICAgICAgIGRvbmU7CiAgICAgICAgZWNobzsKICAgICAgICBlaW5mbyAiSWYgeW91IGRvIG5vdCBo YXZlIHRoZSBDRHMsIGJ1dCBoYXZlIHRoZSBkYXRhIGZpbGVzIjsKICAgICAgICBlaW5mbyAibW91 bnRlZCBzb21ld2hlcmUgb24geW91ciBmaWxlc3lzdGVtLCBqdXN0IGV4cG9ydCI7CiAgICAgICAg ZWluZm8gInRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIHNvIHRoZXkgcG9pbnQgdG8gdGhlIHJpZ2h0 IHBsYWNlOiI7CiAgICAgICAgZWluZm9uICIiOwogICAgICAgIGNkY250PTA7CiAgICAgICAgd2hp bGUgW1sgJHtjZGNudH0gLWx0ICR7Q0RST01fVE9UQUxfQ0RTfSBdXTsgZG8KICAgICAgICAgICAg KCgrK2NkY250KSk7CiAgICAgICAgICAgIGVjaG8gLW4gIiBDRF9ST09UXyR7Y2RjbnR9IjsKICAg ICAgICBkb25lOwogICAgICAgIGVjaG87CiAgICAgICAgZWluZm8gIk9yLCBpZiB5b3UgaGF2ZSBh bGwgdGhlIGZpbGVzIGluIHRoZSBzYW1lIHBsYWNlLCBvciI7CiAgICAgICAgZWluZm8gInlvdSBv bmx5IGhhdmUgb25lIGNkcm9tLCB5b3UgY2FuIGV4cG9ydCBDRF9ST09UIjsKICAgICAgICBlaW5m byAiYW5kIHRoYXQgcGxhY2Ugd2lsbCBiZSB1c2VkIGFzIHRoZSBzYW1lIGRhdGEgc291cmNlIjsK ICAgICAgICBlaW5mbyAiZm9yIGFsbCB0aGUgQ0RzLiI7CiAgICAgICAgZWNobzsKICAgICAgICBl aW5mbyAiRm9yIGV4YW1wbGU6IjsKICAgICAgICBlaW5mbyAiZXhwb3J0IENEX1JPT1RfMT0vbW50 L2Nkcm9tIjsKICAgICAgICBlY2hvOwogICAgZmk7CiAgICBleHBvcnQgQ0RST01fU0VUPSIiOwog ICAgZXhwb3J0IENEUk9NX0NVUlJFTlRfQ0Q9MDsKICAgIGNkcm9tX2xvYWRfbmV4dF9jZAp9CmNk cm9tX2xvYWRfbmV4dF9jZCAoKSAKeyAKICAgIGxvY2FsIHZhcjsKICAgICgoKytDRFJPTV9DVVJS RU5UX0NEKSk7CiAgICB1bnNldCBDRFJPTV9ST09UOwogICAgdmFyPUNEX1JPT1RfJHtDRFJPTV9D VVJSRU5UX0NEfTsKICAgIFtbIC16ICR7IXZhcn0gXV0gJiYgdmFyPSJDRF9ST09UIjsKICAgIGlm IFtbIC16ICR7IXZhcn0gXV07IHRoZW4KICAgICAgICB2YXI9IkNEUk9NX0NIRUNLXyR7Q0RST01f Q1VSUkVOVF9DRH0iOwogICAgICAgIF9jZHJvbV9sb2NhdGVfZmlsZV9vbl9jZCAkeyF2YXJ9Owog ICAgZWxzZQogICAgICAgIGV4cG9ydCBDRFJPTV9ST09UPSR7IXZhcn07CiAgICBmaTsKICAgIGVp bmZvICJGb3VuZCBDRCAjJHtDRFJPTV9DVVJSRU5UX0NEfSByb290IGF0ICR7Q0RST01fUk9PVH0i Cn0KY2hlY2tfbGljZW5zZSAoKSAKeyAKICAgIGRpZSAieW91IG5vIGxvbmdlciBuZWVkIHRoaXMg YXMgcG9ydGFnZSBzdXBwb3J0cyBBQ0NFUFRfTElDRU5TRSBpdHNlbGYiCn0KY29uZmlnX3JwYXRo X3VwZGF0ZSAoKSAKeyAKICAgIGxvY2FsIGRzdCBzcmM9JCh0eXBlIC1QIGdldHRleHQgfCBzZWQg J3M6YmluL2dldHRleHQ6c2hhcmUvZ2V0dGV4dC9jb25maWcucnBhdGg6Jyk7CiAgICBbWyAkIyAt ZXEgMCBdXSAmJiBzZXQgLS0gJChmaW5kIC1uYW1lIGNvbmZpZy5ycGF0aCk7CiAgICBbWyAkIyAt ZXEgMCBdXSAmJiByZXR1cm4gMDsKICAgIGVpbmZvICJVcGRhdGluZyBhbGwgY29uZmlnLnJwYXRo IGZpbGVzIjsKICAgIGZvciBkc3QgaW4gIiRAIjsKICAgIGRvCiAgICAgICAgZWluZm8gIiAgICR7 ZHN0fSI7CiAgICAgICAgY3AgIiR7c3JjfSIgIiR7ZHN0fSIgfHwgZGllOwogICAgZG9uZQp9CmRh cndpbnRvb2xpemUgKCkgCnsgCiAgICBkaWUgIlVzZSBlbGlidG9vbGl6ZSIKfQpkZWxldGVfYWxs X3ZlcnNpb25fc2VwYXJhdG9ycyAoKSAKeyAKICAgIHJlcGxhY2VfYWxsX3ZlcnNpb25fc2VwYXJh dG9ycyAiIiAiJHsxfSIKfQpkZWxldGVfdmVyc2lvbl9zZXBhcmF0b3IgKCkgCnsgCiAgICByZXBs YWNlX3ZlcnNpb25fc2VwYXJhdG9yICIkezF9IiAiIiAiJHsyfSIKfQpkbG9wZW5fbGliICgpIAp7 IAogICAgY2FzZSAiJHtDSE9TVH0iIGluIAogICAgICAgICotbGludXgtZ251KiB8ICotbGludXgt dWNsaWJjIHwgKi1pbnRlcml4KikKICAgICAgICAgICAgZWNobyAiLWxkbCIKICAgICAgICA7Owog ICAgZXNhYwp9CmRvaWNvbiAoKSAKeyAKICAgICggbG9jYWwgaSBqIHJldDsKICAgIGluc2ludG8g L3Vzci9zaGFyZS9waXhtYXBzOwogICAgZm9yIGkgaW4gIiRAIjsKICAgIGRvCiAgICAgICAgaWYg W1sgLWYgJHtpfSBdXTsgdGhlbgogICAgICAgICAgICBkb2lucyAiJHtpfSI7CiAgICAgICAgICAg ICgocmV0Kz0kPykpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgaWYgW1sgLWQgJHtpfSBdXTsg dGhlbgogICAgICAgICAgICAgICAgZm9yIGogaW4gIiR7aX0iLyoucG5nOwogICAgICAgICAgICAg ICAgZG8KICAgICAgICAgICAgICAgICAgICBkb2lucyAiJHtqfSI7CiAgICAgICAgICAgICAgICAg ICAgKChyZXQrPSQ/KSk7CiAgICAgICAgICAgICAgICBkb25lOwogICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICAoKCsrcmV0KSk7CiAgICAgICAgICAgIGZpOwogICAgICAgIGZpOwogICAg ZG9uZTsKICAgIGV4aXQgJHtyZXR9ICkKfQpkb21lbnUgKCkgCnsgCiAgICAoIGxvY2FsIGkgaiBy ZXQ9MDsKICAgIGluc2ludG8gL3Vzci9zaGFyZS9hcHBsaWNhdGlvbnM7CiAgICBmb3IgaSBpbiAi JEAiOwogICAgZG8KICAgICAgICBpZiBbWyAtZiAke2l9IF1dOyB0aGVuCiAgICAgICAgICAgIGRv aW5zICIke2l9IjsKICAgICAgICAgICAgKChyZXQrPSQ/KSk7CiAgICAgICAgZWxzZQogICAgICAg ICAgICBpZiBbWyAtZCAke2l9IF1dOyB0aGVuCiAgICAgICAgICAgICAgICBmb3IgaiBpbiAiJHtp fSIvKi5kZXNrdG9wOwogICAgICAgICAgICAgICAgZG8KICAgICAgICAgICAgICAgICAgICBkb2lu cyAiJHtqfSI7CiAgICAgICAgICAgICAgICAgICAgKChyZXQrPSQ/KSk7CiAgICAgICAgICAgICAg ICBkb25lOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAoKCsrcmV0KSk7CiAgICAg ICAgICAgIGZpOwogICAgICAgIGZpOwogICAgZG9uZTsKICAgIGV4aXQgJHtyZXR9ICkKfQplYWNs b2NhbCAoKSAKeyAKICAgIFtbICEgLWYgYWNsb2NhbC5tNCB8fCAtbiAkKGdyZXAgLWUgJ2dlbmVy YXRlZC4qYnkgYWNsb2NhbCcgYWNsb2NhbC5tNCkgXV0gJiYgYXV0b3Rvb2xzX3J1bl90b29sIC0t YXQtbTRmbGFncyBhY2xvY2FsICIkQCIgJChlYWNsb2NhbF9hbWZsYWdzKQp9CmVhY2xvY2FsX2Ft ZmxhZ3MgKCkgCnsgCiAgICBsb2NhbCBhY2xvY2FsX29wdHMgYW1mbGFnc19maWxlOwogICAgZm9y IGFtZmxhZ3NfZmlsZSBpbiBHTlVtYWtlZmlsZS5hbSBNYWtlZmlsZS5hbSBHTlVtYWtlZmlsZS5p biBNYWtlZmlsZS5pbjsKICAgIGRvCiAgICAgICAgW1sgLWUgJHthbWZsYWdzX2ZpbGV9IF1dIHx8 IGNvbnRpbnVlOwogICAgICAgIGF1dG90b29sc19lbnZfc2V0dXA7CiAgICAgICAgYWNsb2NhbF9v cHRzPSQoc2VkIC1uIAkJCSIvXkFDTE9DQUxfQU1GTEFHU1tbOnNwYWNlOl1dKj0veyAJCQkgICMg bWF0Y2ggdGhlIGZpcnN0IGxpbmUKCQkJICBzOltePV0qPTo6cDsgCQkJICAjIHRoZW4gZ29iYmxl IHVwIGFsbCBlc2NhcGVkIGxpbmVzCgkJCSAgOiBuZXh0bGluZSAvXFxcXCQveyBuOyBwOyBiIG5l eHRsaW5lOyB9IAkJCX0iICR7YW1mbGFnc19maWxlfSk7CiAgICAgICAgZXZhbCBhY2xvY2FsX29w dHM9XCIiJHthY2xvY2FsX29wdHN9IlwiOwogICAgICAgIGJyZWFrOwogICAgZG9uZTsKICAgIGVj aG8gJHthY2xvY2FsX29wdHN9Cn0KZWF1dG9jb25mICgpIAp7IAogICAgaWYgW1sgISAtZiBjb25m aWd1cmUuYWMgJiYgISAtZiBjb25maWd1cmUuaW4gXV07IHRoZW4KICAgICAgICBlY2hvOwogICAg ICAgIGVlcnJvciAiTm8gY29uZmlndXJlLnthYyxpbn0gcHJlc2VudCBpbiAnJHtQV0R9JyEiOwog ICAgICAgIGVjaG87CiAgICAgICAgZGllICJObyBjb25maWd1cmUue2FjLGlufSBwcmVzZW50ISI7 CiAgICBmaTsKICAgIGF1dG90b29sc19ydW5fdG9vbCAtLWF0LW00ZmxhZ3MgYXV0b2NvbmYgIiRA Igp9CmVhdXRvaGVhZGVyICgpIAp7IAogICAgW1sgLW4gJChhdXRvdG9vbHNfY2hlY2tfbWFjcm8g IkFDX0NPTkZJR19IRUFERVJTIikgXV0gfHwgcmV0dXJuIDA7CiAgICBhdXRvdG9vbHNfcnVuX3Rv b2wgLS1hdC1uby1mYWlsIC0tYXQtbTRmbGFncyBhdXRvaGVhZGVyICIkQCIKfQplYXV0b21ha2Ug KCkgCnsgCiAgICBsb2NhbCBleHRyYV9vcHRzOwogICAgbG9jYWwgbWFrZWZpbGVfbmFtZTsKICAg IGZvciBtYWtlZmlsZV9uYW1lIGluIHtHTlVtYWtlZmlsZSx7TSxtfWFrZWZpbGV9LmFtICIiOwog ICAgZG8KICAgICAgICBbWyAtZiAke21ha2VmaWxlX25hbWV9IF1dICYmIGJyZWFrOwogICAgZG9u ZTsKICAgIGlmIFtbIC16ICR7bWFrZWZpbGVfbmFtZX0gXV07IHRoZW4KICAgICAgICBpZiAhIGdy ZXAgLXFzIEFNX0lOSVRfQVVUT01BS0UgY29uZmlndXJlLj8/OyB0aGVuCiAgICAgICAgICAgIHJl dHVybiAwOwogICAgICAgIGZpOwogICAgZWxzZQogICAgICAgIGlmIFtbIC16ICR7RlJPTV9FQVVU T1JFQ09ORn0gJiYgLWYgJHttYWtlZmlsZV9uYW1lJS5hbX0uaW4gXV07IHRoZW4KICAgICAgICAg ICAgbG9jYWwgdXNlZF9hdXRvbWFrZTsKICAgICAgICAgICAgbG9jYWwgaW5zdGFsbGVkX2F1dG9t YWtlOwogICAgICAgICAgICBpbnN0YWxsZWRfYXV0b21ha2U9JChXQU5UX0FVVE9NQUtFPSBhdXRv bWFrZSAtLXZlcnNpb24gfCBoZWFkIC1uIDEgfCAJCQlzZWQgLWUgJ3M6LiooR05VIGF1dG9tYWtl KSA6OicpOwogICAgICAgICAgICB1c2VkX2F1dG9tYWtlPSQoaGVhZCAtbiAxIDwgJHttYWtlZmls ZV9uYW1lJS5hbX0uaW4gfCAJCQlzZWQgLWUgJ3M6LipieSBhdXRvbWFrZSBcKC4qXCkgZnJvbSAu KjpcMTonKTsKICAgICAgICAgICAgaWYgW1sgJHtpbnN0YWxsZWRfYXV0b21ha2V9ICE9ICR7dXNl ZF9hdXRvbWFrZX0gXV07IHRoZW4KICAgICAgICAgICAgICAgIGVpbmZvICJBdXRvbWFrZSB1c2Vk IGZvciB0aGUgcGFja2FnZSAoJHt1c2VkX2F1dG9tYWtlfSkgZGlmZmVycyBmcm9tIjsKICAgICAg ICAgICAgICAgIGVpbmZvICJ0aGUgaW5zdGFsbGVkIHZlcnNpb24gKCR7aW5zdGFsbGVkX2F1dG9t YWtlfSkuIjsKICAgICAgICAgICAgICAgIGVhdXRvcmVjb25mOwogICAgICAgICAgICAgICAgcmV0 dXJuIDA7CiAgICAgICAgICAgIGZpOwogICAgICAgIGZpOwogICAgZmk7CiAgICBbWyAtZiBJTlNU QUxMICYmIC1mIEFVVEhPUlMgJiYgLWYgQ2hhbmdlTG9nICYmIC1mIE5FV1MgJiYgLWYgUkVBRE1F IF1dIHx8IGV4dHJhX29wdHM9IiR7ZXh0cmFfb3B0c30gLS1mb3JlaWduIjsKICAgIGF1dG90b29s c19ydW5fdG9vbCBhdXRvbWFrZSAtLWFkZC1taXNzaW5nIC0tY29weSAke2V4dHJhX29wdHN9ICIk QCIKfQplYXV0b3BvaW50ICgpIAp7IAogICAgYXV0b3Rvb2xzX3J1bl90b29sIGF1dG9wb2ludCAi JEAiCn0KZWF1dG9yZWNvbmYgKCkgCnsgCiAgICBsb2NhbCB4IGF1eGRpciBnOwogICAgaWYgW1sg LXogJHtBVF9OT19SRUNVUlNJVkV9IF1dOyB0aGVuCiAgICAgICAgZm9yIHggaW4gJChhdXRvdG9v bHNfZ2V0X3N1YmRpcnMpOwogICAgICAgIGRvCiAgICAgICAgICAgIGlmIFtbIC1kICR7eH0gXV07 IHRoZW4KICAgICAgICAgICAgICAgIHB1c2hkICIke3h9IiA+IC9kZXYvbnVsbDsKICAgICAgICAg ICAgICAgIEFUX05PRUxJQlRPT0xJWkU9InllcyIgZWF1dG9yZWNvbmY7CiAgICAgICAgICAgICAg ICBwb3BkID4gL2Rldi9udWxsOwogICAgICAgICAgICBmaTsKICAgICAgICBkb25lOwogICAgZmk7 CiAgICBhdXhkaXI9JChhdXRvdG9vbHNfZ2V0X2F1eGRpcik7CiAgICBlaW5mbyAiUnVubmluZyBl YXV0b3JlY29uZiBpbiAnJHtQV0R9JyAuLi4iOwogICAgW1sgLW4gJHthdXhkaXJ9IF1dICYmIG1r ZGlyIC1wICR7YXV4ZGlyfTsKICAgIGVhY2xvY2FsOwogICAgW1sgJHtDSE9TVH0gPT0gKi1kYXJ3 aW4qIF1dICYmIGc9ZzsKICAgIGlmICR7TElCVE9PTElaRTotJHtnfWxpYnRvb2xpemV9IC1uIC0t aW5zdGFsbCAmPi9kZXYvbnVsbDsgdGhlbgogICAgICAgIF9lbGlidG9vbGl6ZSAtLWNvcHkgLS1m b3JjZSAtLWluc3RhbGw7CiAgICBlbHNlCiAgICAgICAgX2VsaWJ0b29saXplIC0tY29weSAtLWZv cmNlOwogICAgZmk7CiAgICBlYXV0b2NvbmY7CiAgICBlYXV0b2hlYWRlcjsKICAgIEZST01fRUFV VE9SRUNPTkY9InllcyIgZWF1dG9tYWtlICR7QU1fT1BUU307CiAgICBbWyAke0FUX05PRUxJQlRP T0xJWkV9ID09ICJ5ZXMiIF1dICYmIHJldHVybiAwOwogICAgUz0ke1BXRH0gZWxpYnRvb2xpemUg LS1mb3JjZTsKICAgIHJldHVybiAwCn0KZWJlZXAgKCkgCnsgCiAgICBld2FybiAiUUEgTm90aWNl OiBlYmVlcCBpcyBub3QgZGVmaW5lZCBpbiBFQVBJPSR7RUFQSX0sIHBsZWFzZSBmaWxlIGEgYnVn IGF0IGh0dHA6Ly9idWdzLmdlbnRvby5vcmciCn0KZWNvbmZfYnVpbGQgKCkgCnsgCiAgICB0Yy1l bnZfYnVpbGQgZWNvbmYgLS1idWlsZD0ke0NCVUlMRDotJHtDSE9TVH19ICIkQCIKfQplY3ZzX2Ns ZWFuICgpIAp7IAogICAgW1sgLXogJCogXV0gJiYgc2V0IC0tIC47CiAgICBmaW5kICIkQCIgLXR5 cGUgZCAtbmFtZSAnQ1ZTJyAtcHJ1bmUgLXByaW50MCB8IHhhcmdzIC0wIHJtIC1yZjsKICAgIGZp bmQgIiRAIiAtdHlwZSBmIC1uYW1lICcuY3ZzKicgLXByaW50MCB8IHhhcmdzIC0wIHJtIC1yZgp9 CmVkb3MydW5peCAoKSAKeyAKICAgIFtbICQjIC1lcSAwIF1dICYmIHJldHVybiAwOwogICAgc2Vk IC1pICdzL1xyJC8vJyAtLSAiJEAiIHx8IGRpZQp9CmVnZXRlbnQgKCkgCnsgCiAgICBsb2NhbCBk Yj0kMSBrZXk9JDI7CiAgICBbWyAkIyAtZ2UgMyBdXSAmJiBkaWUgInVzYWdlOiBlZ2V0ZW50IDxk YXRhYmFzZT4gPGtleT4iOwogICAgY2FzZSAke2RifSBpbiAKICAgICAgICBwYXNzd2QgfCBncm91 cCkKCiAgICAgICAgOzsKICAgICAgICAqKQogICAgICAgICAgICBkaWUgInNvcnJ5LCBkYXRhYmFz ZSAnJHtkYn0nIG5vdCB5ZXQgc3VwcG9ydGVkOyBmaWxlIGEgYnVnIgogICAgICAgIDs7CiAgICBl c2FjOwogICAgY2FzZSAke0NIT1NUfSBpbiAKICAgICAgICAqLWRhcndpbls2NzhdKQogICAgICAg ICAgICBjYXNlICR7a2V5fSBpbiAKICAgICAgICAgICAgICAgICpbITAtOV0qKQogICAgICAgICAg ICAgICAgICAgIG5pZHVtcCAke2RifSAuIHwgYXdrIC1GOiAiKFwkMSB+IC9eJHtrZXl9XCQvKSB7 cHJpbnQ7ZXhpdDt9IgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICopCiAgICAg ICAgICAgICAgICAgICAgbmlkdW1wICR7ZGJ9IC4gfCBhd2sgLUY6ICIoXCQzID09ICR7a2V5fSkg e3ByaW50O2V4aXQ7fSIKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgIGVzYWMKICAgICAg ICA7OwogICAgICAgICotZGFyd2luKikKICAgICAgICAgICAgbG9jYWwgbXlrZXk7CiAgICAgICAg ICAgIGNhc2UgJHtkYn0gaW4gCiAgICAgICAgICAgICAgICBwYXNzd2QpCiAgICAgICAgICAgICAg ICAgICAgZGI9IlVzZXJzIiBteWtleT0iVW5pcXVlSUQiCiAgICAgICAgICAgICAgICA7OwogICAg ICAgICAgICAgICAgZ3JvdXApCiAgICAgICAgICAgICAgICAgICAgZGI9Ikdyb3VwcyIgbXlrZXk9 IlByaW1hcnlHcm91cElEIgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgZXNhYzsKICAg ICAgICAgICAgY2FzZSAke2tleX0gaW4gCiAgICAgICAgICAgICAgICAqWyEwLTldKikKICAgICAg ICAgICAgICAgICAgICBkc2NsIC4gLXJlYWQgLyR7ZGJ9LyR7a2V5fSAyPiAvZGV2L251bGwgfCBn cmVwIFJlY29yZE5hbWUKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAqKQogICAg ICAgICAgICAgICAgICAgIGRzY2wgLiAtc2VhcmNoIC8ke2RifSAke215a2V5fSAke2tleX0gMj4g L2Rldi9udWxsCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICBlc2FjCiAgICAgICAgOzsK ICAgICAgICAqLWZyZWVic2QqIHwgKi1kcmFnb25mbHkqKQogICAgICAgICAgICBjYXNlICR7ZGJ9 IGluIAogICAgICAgICAgICAgICAgcGFzc3dkKQogICAgICAgICAgICAgICAgICAgIGRiPSJ1c2Vy IgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICopCgogICAgICAgICAgICAgICAg OzsKICAgICAgICAgICAgZXNhYzsKICAgICAgICAgICAgbG9jYWwgb3B0czsKICAgICAgICAgICAg aWYgW1sgJHtrZXl9ID09IFtbOmRpZ2l0Ol1dKiBdXTsgdGhlbgogICAgICAgICAgICAgICAgW1sg JHtkYn0gPT0gInVzZXIiIF1dICYmIG9wdHM9Ii11IiB8fCBvcHRzPSItZyI7CiAgICAgICAgICAg IGZpOwogICAgICAgICAgICBwdyBzaG93ICR7ZGJ9ICR7b3B0c30gIiR7a2V5fSIgLXEKICAgICAg ICA7OwogICAgICAgICotbmV0YnNkKiB8ICotb3BlbmJzZCopCiAgICAgICAgICAgIGdyZXAgIiR7 a2V5fTpcKjoiIC9ldGMvJHtkYn0KICAgICAgICA7OwogICAgICAgICopCiAgICAgICAgICAgIG5z Y2QgLWkgIiR7ZGJ9IiAyPiAvZGV2L251bGw7CiAgICAgICAgICAgIGdldGVudCAiJHtkYn0iICIk e2tleX0iCiAgICAgICAgOzsKICAgIGVzYWMKfQplZ2V0aG9tZSAoKSAKeyAKICAgIGxvY2FsIHBv czsKICAgIFtbICQjIC1lcSAxIF1dIHx8IGRpZSAidXNhZ2U6IGVnZXRob21lIDx1c2VyPiI7CiAg ICBjYXNlICR7Q0hPU1R9IGluIAogICAgICAgICotZGFyd2luKiB8ICotZnJlZWJzZCogfCAqLWRy YWdvbmZseSopCiAgICAgICAgICAgIHBvcz05CiAgICAgICAgOzsKICAgICAgICAqKQogICAgICAg ICAgICBwb3M9NgogICAgICAgIDs7CiAgICBlc2FjOwogICAgZWdldGVudCBwYXNzd2QgIiQxIiB8 IGN1dCAtZDogLWYke3Bvc30KfQplZ2V0c2hlbGwgKCkgCnsgCiAgICBsb2NhbCBwb3M7CiAgICBb WyAkIyAtZXEgMSBdXSB8fCBkaWUgInVzYWdlOiBlZ2V0c2hlbGwgPHVzZXI+IjsKICAgIGNhc2Ug JHtDSE9TVH0gaW4gCiAgICAgICAgKi1kYXJ3aW4qIHwgKi1mcmVlYnNkKiB8ICotZHJhZ29uZmx5 KikKICAgICAgICAgICAgcG9zPTEwCiAgICAgICAgOzsKICAgICAgICAqKQogICAgICAgICAgICBw b3M9NwogICAgICAgIDs7CiAgICBlc2FjOwogICAgZWdldGVudCBwYXNzd2QgIiQxIiB8IGN1dCAt ZDogLWYke3Bvc30KfQplbGlidG9vbGl6ZSAoKSAKeyAKICAgIGxvY2FsIHg7CiAgICBsb2NhbCBk b19wb3J0YWdlPSJubyI7CiAgICBsb2NhbCBkb19yZXZlcnNlZGVwcz0ibm8iOwogICAgbG9jYWwg ZG9fb25seV9wYXRjaGVzPSJubyI7CiAgICBsb2NhbCBkb191Y2xpYmM9InllcyI7CiAgICBsb2Nh bCBkZXB0b3JlbW92ZT07CiAgICBsb2NhbCBkb19zaGFsbG93PSJubyI7CiAgICBsb2NhbCBmb3Jj ZT0iZmFsc2UiOwogICAgbG9jYWwgZWx0X3BhdGNoZXM9Imluc3RhbGwtc2ggbHRtYWluIHBvcnRh Z2UgcmVsaW5rIG1heF9jbWRfbGVuIHNlZCB0ZXN0IHRtcCBjcm9zcyBhcy1uZWVkZWQiOwogICAg Zm9yIHggaW4gIiRAIjsKICAgIGRvCiAgICAgICAgY2FzZSAke3h9IGluIAogICAgICAgICAgICAt LXBvcnRhZ2UpCiAgICAgICAgICAgICAgICBkb19wb3J0YWdlPSJ5ZXMiCiAgICAgICAgICAgIDs7 CiAgICAgICAgICAgIC0tcmV2ZXJzZS1kZXBzKQogICAgICAgICAgICAgICAgZG9fcmV2ZXJzZWRl cHM9InllcyI7CiAgICAgICAgICAgICAgICBlbHRfcGF0Y2hlcys9IiBmaXgtcmVsaW5rIgogICAg ICAgICAgICA7OwogICAgICAgICAgICAtLXBhdGNoLW9ubHkpCiAgICAgICAgICAgICAgICBkb19v bmx5X3BhdGNoZXM9InllcyIKICAgICAgICAgICAgOzsKICAgICAgICAgICAgLS1yZW1vdmUtaW50 ZXJuYWwtZGVwPSopCiAgICAgICAgICAgICAgICBkZXB0b3JlbW92ZT0ke3gjLS1yZW1vdmUtaW50 ZXJuYWwtZGVwPX07CiAgICAgICAgICAgICAgICBbWyAtbiAke2RlcHRvcmVtb3ZlfSBdXSAmJiBl bHRfcGF0Y2hlcys9IiByZW0taW50LWRlcCIKICAgICAgICAgICAgOzsKICAgICAgICAgICAgLS1z aGFsbG93KQogICAgICAgICAgICAgICAgZG9fc2hhbGxvdz0ieWVzIgogICAgICAgICAgICA7Owog ICAgICAgICAgICAtLW5vLXVjbGliYykKICAgICAgICAgICAgICAgIGRvX3VjbGliYz0ibm8iCiAg ICAgICAgICAgIDs7CiAgICAgICAgICAgIC0tZm9yY2UpCiAgICAgICAgICAgICAgICBmb3JjZT0i dHJ1ZSIKICAgICAgICAgICAgOzsKICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgIGVlcnJv ciAiSW52YWxpZCBlbGlidG9vbGl6ZSBvcHRpb246ICR7eH0iOwogICAgICAgICAgICAgICAgZGll ICJlbGlidG9vbGl6ZSBjYWxsZWQgd2l0aCAke3h9ID8/IgogICAgICAgICAgICA7OwogICAgICAg IGVzYWM7CiAgICBkb25lOwogICAgW1sgJHtkb191Y2xpYmN9ID09ICJ5ZXMiIF1dICYmIGVsdF9w YXRjaGVzKz0iIHVjbGliYy1jb25mIHVjbGliYy1sdGNvbmYiOwogICAgY2FzZSAke0NIT1NUfSBp biAKICAgICAgICAqLWFpeCopCiAgICAgICAgICAgIGVsdF9wYXRjaGVzKz0iIGhhcmRjb2RlIGFp eHJ0bCBhaXgtbm91bmRlZiIKICAgICAgICA7OwogICAgICAgICotZGFyd2luKikKICAgICAgICAg ICAgZWx0X3BhdGNoZXMrPSIgZGFyd2luLWx0Y29uZiBkYXJ3aW4tbHRtYWluIGRhcndpbi1jb25m IgogICAgICAgIDs7CiAgICAgICAgKi1mcmVlYnNkKikKICAgICAgICAgICAgZWx0X3BhdGNoZXMr PSIgZmJzZC1jb25mIGZic2QtbHRjb25mIgogICAgICAgIDs7CiAgICAgICAgKi1ocHV4KikKICAg ICAgICAgICAgZWx0X3BhdGNoZXMrPSIgaHB1eC1jb25mIGRlcGxpYnMgaGMtZmxhZy1sZCBoYXJk Y29kZSBoYXJkY29kZS1yZWxpbmsgcmVsaW5rLXByb2cgbm8tbGMiCiAgICAgICAgOzsKICAgICAg ICAqLWlyaXgqKQogICAgICAgICAgICBlbHRfcGF0Y2hlcys9IiBpcml4LWx0bWFpbiIKICAgICAg ICA7OwogICAgICAgICotbWludCopCiAgICAgICAgICAgIGVsdF9wYXRjaGVzKz0iIG1pbnQtY29u ZiIKICAgICAgICA7OwogICAgZXNhYzsKICAgIGlmICQodGMtZ2V0TEQpIC0tdmVyc2lvbiAyPiYx IHwgZ3JlcCAtcXMgJ0dOVSBnb2xkJzsgdGhlbgogICAgICAgIGVsdF9wYXRjaGVzKz0iIGdvbGQt Y29uZiI7CiAgICBmaTsKICAgIHNldCAtLTsKICAgIGlmIFtbICR7ZG9fc2hhbGxvd30gPT0gInll cyIgXV07IHRoZW4KICAgICAgICBbWyAtZiAke1N9L2x0bWFpbi5zaCBdXSAmJiBzZXQgLS0gIiR7 U30iOwogICAgZWxzZQogICAgICAgIHNldCAtLSAkKGZpbmQgIiR7U30iIC1uYW1lIGx0bWFpbi5z aCAtcHJpbnRmICclaCAnKTsKICAgIGZpOwogICAgbG9jYWwgZCBwOwogICAgZm9yIGQgaW4gIiRA IjsKICAgIGRvCiAgICAgICAgZXhwb3J0IEVMVF9BUFBMSUVEX1BBVENIRVM9OwogICAgICAgIGlm IFtbIC1mICR7ZH0vLmVsaWJ0b29saXplZCBdXTsgdGhlbgogICAgICAgICAgICAke2ZvcmNlfSB8 fCBjb250aW51ZTsKICAgICAgICBmaTsKICAgICAgICBsb2NhbCBvdXRmdW5jPSJlaW5mbyI7CiAg ICAgICAgW1sgLWYgJHtkfS8uZWxpYnRvb2xpemVkIF1dICYmIG91dGZ1bmM9ImV3YXJuIjsKICAg ICAgICAke291dGZ1bmN9ICJSdW5uaW5nIGVsaWJ0b29saXplIGluOiAke2QjJHtXT1JLRElSfS99 LyI7CiAgICAgICAgaWYgW1sgJHtvdXRmdW5jfSA9PSAiZXdhcm4iIF1dOyB0aGVuCiAgICAgICAg ICAgIGV3YXJuICIgIFdlJ3ZlIGFscmVhZHkgYmVlbiBydW4gaW4gdGhpcyB0cmVlOyB5b3Ugc2hv dWxkIjsKICAgICAgICAgICAgZXdhcm4gIiAgYXZvaWQgdGhpcyBpZiBwb3NzaWJsZSAocGVyaGFw cyBieSBmaWxpbmcgYSBidWcpIjsKICAgICAgICBmaTsKICAgICAgICBmb3IgcCBpbiAke2VsdF9w YXRjaGVzfTsKICAgICAgICBkbwogICAgICAgICAgICBsb2NhbCByZXQ9MDsKICAgICAgICAgICAg Y2FzZSAke3B9IGluIAogICAgICAgICAgICAgICAgcG9ydGFnZSkKICAgICAgICAgICAgICAgICAg ICBpZiAhIGdyZXAgLXFzICdXZSBkbyBub3Qgd2FudCBwb3J0YWdlJyAiJHtkfS9sdG1haW4uc2gi OyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIEVMVF93YWxrX3BhdGNoZXMgIiR7ZH0vbHRt YWluLnNoIiAiJHtwfSI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldD0kPzsKICAgICAgICAg ICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgIHJlbS1pbnQt ZGVwKQogICAgICAgICAgICAgICAgICAgIEVMVF93YWxrX3BhdGNoZXMgIiR7ZH0vbHRtYWluLnNo IiAiJHtwfSIgIiR7ZGVwdG9yZW1vdmV9IjsKICAgICAgICAgICAgICAgICAgICByZXQ9JD8KICAg ICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICBmaXgtcmVsaW5rKQogICAgICAgICAgICAg ICAgICAgIGlmIGdyZXAgLXFzICdpbnN0X3ByZWZpeF9kaXInICIke2R9L2x0bWFpbi5zaCI7IHRo ZW4KICAgICAgICAgICAgICAgICAgICAgICAgRUxUX3dhbGtfcGF0Y2hlcyAiJHtkfS9sdG1haW4u c2giICIke3B9IjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0PSQ/OwogICAgICAgICAgICAg ICAgICAgIGZpCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgbWF4X2NtZF9sZW4p CiAgICAgICAgICAgICAgICAgICAgaWYgZ3JlcCAtcXMgJ21heF9jbWRfbGVuJyAiJHtkfS9sdG1h aW4uc2giOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIEVMVF93YWxrX3BhdGNoZXMgIiR7 ZH0vbHRtYWluLnNoIiAiJHtwfSI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldD0kPzsKICAg ICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgIGFz LW5lZWRlZCkKICAgICAgICAgICAgICAgICAgICBFTFRfd2Fsa19wYXRjaGVzICIke2R9L2x0bWFp bi5zaCIgIiR7cH0iOwogICAgICAgICAgICAgICAgICAgIHJldD0kPwogICAgICAgICAgICAgICAg OzsKICAgICAgICAgICAgICAgIHVjbGliYy1jb25mKQogICAgICAgICAgICAgICAgICAgIGlmIGdy ZXAgLXFzICdUcmFuc2Zvcm0gbGludXgnICIke2R9L2NvbmZpZ3VyZSI7IHRoZW4KICAgICAgICAg ICAgICAgICAgICAgICAgRUxUX3dhbGtfcGF0Y2hlcyAiJHtkfS9jb25maWd1cmUiICIke3B9IjsK ICAgICAgICAgICAgICAgICAgICAgICAgcmV0PSQ/OwogICAgICAgICAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICAgICAgICAgICAgaWYgW1sgISAtZSAke2R9L2NvbmZpZ3VyZSBdXSAmJiBn cmVwIC1xcyAnVHJhbnNmb3JtIGxpbnV4JyAiJHtkfS8uLi9jb25maWd1cmUiOyB0aGVuCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBFTFRfd2Fsa19wYXRjaGVzICIke2R9Ly4uL2NvbmZpZ3Vy ZSIgIiR7cH0iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0PSQ/OwogICAgICAgICAg ICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAg OzsKICAgICAgICAgICAgICAgIHVjbGliYy1sdGNvbmYpCiAgICAgICAgICAgICAgICAgICAgaWYg W1sgLXMgJHtkfS9sdGNvbmZpZyBdXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBFTFRf d2Fsa19wYXRjaGVzICIke2R9L2x0Y29uZmlnIiAiJHtwfSI7CiAgICAgICAgICAgICAgICAgICAg ICAgIHJldD0kPzsKICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgOzsKICAg ICAgICAgICAgICAgIGZic2QtY29uZikKICAgICAgICAgICAgICAgICAgICBpZiBncmVwIC1xcyAn dmVyc2lvbl90eXBlPWZyZWVic2QtJyAiJHtkfS9jb25maWd1cmUiOyB0aGVuCiAgICAgICAgICAg ICAgICAgICAgICAgIEVMVF93YWxrX3BhdGNoZXMgIiR7ZH0vY29uZmlndXJlIiAiJHtwfSI7CiAg ICAgICAgICAgICAgICAgICAgICAgIHJldD0kPzsKICAgICAgICAgICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICAgICAgICAgIGlmIFtbICEgLWUgJHtkfS9jb25maWd1cmUgXV0gJiYgZ3Jl cCAtcXMgJ3ZlcnNpb25fdHlwZT1mcmVlYnNkLScgIiR7ZH0vLi4vY29uZmlndXJlIjsgdGhlbgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgRUxUX3dhbGtfcGF0Y2hlcyAiJHtkfS8uLi9jb25m aWd1cmUiICIke3B9IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldD0kPzsKICAgICAg ICAgICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAg ICAgIDs7CiAgICAgICAgICAgICAgICBmYnNkLWx0Y29uZikKICAgICAgICAgICAgICAgICAgICBp ZiBbWyAtcyAke2R9L2x0Y29uZmlnIF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIEVM VF93YWxrX3BhdGNoZXMgIiR7ZH0vbHRjb25maWciICIke3B9IjsKICAgICAgICAgICAgICAgICAg ICAgICAgcmV0PSQ/OwogICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICA7Owog ICAgICAgICAgICAgICAgZGFyd2luLWNvbmYpCiAgICAgICAgICAgICAgICAgICAgaWYgZ3JlcCAt cXMgJyYmIGVjaG8gXC5zbyB8fCcgIiR7ZH0vY29uZmlndXJlIjsgdGhlbgogICAgICAgICAgICAg ICAgICAgICAgICBFTFRfd2Fsa19wYXRjaGVzICIke2R9L2NvbmZpZ3VyZSIgIiR7cH0iOwogICAg ICAgICAgICAgICAgICAgICAgICByZXQ9JD87CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgICAgICAgICBpZiBbWyAhIC1lICR7ZH0vY29uZmlndXJlIF1dICYmIGdyZXAg LXFzICcmJiBlY2hvIFwuc28gfHwnICIke2R9Ly4uL2NvbmZpZ3VyZSI7IHRoZW4KICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEVMVF93YWxrX3BhdGNoZXMgIiR7ZH0vLi4vY29uZmlndXJlIiAi JHtwfSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQ9JD87CiAgICAgICAgICAgICAg ICAgICAgICAgIGZpOwogICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICA7Owog ICAgICAgICAgICAgICAgZGFyd2luLWx0Y29uZikKICAgICAgICAgICAgICAgICAgICBpZiBbWyAt cyAke2R9L2x0Y29uZmlnIF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIEVMVF93YWxr X3BhdGNoZXMgIiR7ZH0vbHRjb25maWciICIke3B9IjsKICAgICAgICAgICAgICAgICAgICAgICAg cmV0PSQ/OwogICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICA7OwogICAgICAg ICAgICAgICAgZGFyd2luLWx0bWFpbikKICAgICAgICAgICAgICAgICAgICBpZiBbWyAtZSAke2R9 L2x0bWFpbi5zaCBdXSAmJiAhIGdyZXAgLXFzICd2ZXJzdHJpbmc9Ii1jb21wYXRpYmlsaXR5X3Zl cnNpb24nICIke2R9L2x0bWFpbi5zaCI7IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgRUxU X3dhbGtfcGF0Y2hlcyAiJHtkfS9sdG1haW4uc2giICIke3B9IjsKICAgICAgICAgICAgICAgICAg ICAgICAgcmV0PSQ/OwogICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICA7Owog ICAgICAgICAgICAgICAgYWl4cnRsIHwgaHB1eC1jb25mKQogICAgICAgICAgICAgICAgICAgIHJl dD0xOwogICAgICAgICAgICAgICAgICAgIGxvY2FsIHN1YnJldD0wOwogICAgICAgICAgICAgICAg ICAgIHdoaWxlIFtbICRzdWJyZXQgLWVxIDAgXV07IGRvCiAgICAgICAgICAgICAgICAgICAgICAg IHN1YnJldD0xOwogICAgICAgICAgICAgICAgICAgICAgICBpZiBbWyAtZSAke2R9L2NvbmZpZ3Vy ZSBdXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgRUxUX3dhbGtfcGF0Y2hlcyAi JHtkfS9jb25maWd1cmUiICIke3B9IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJl dD0kPzsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgW1sgISAtZSAke2R9L2NvbmZpZ3VyZSAmJiAtZSAke2R9Ly4uL2NvbmZpZ3VyZSBd XTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVMVF93YWxrX3BhdGNoZXMg IiR7ZH0vLi4vY29uZmlndXJlIiAiJHtwfSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3VicmV0PSQ/OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAg ICAgICAgICAgICAgIGZpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiBbWyAkc3VicmV0IC1l cSAwIF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQ9MDsKICAgICAgICAg ICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgICAgICAgICAgZG9uZQogICAgICAgICAgICAg ICAgOzsKICAgICAgICAgICAgICAgIG1pbnQtY29uZiB8IGdvbGQtY29uZikKICAgICAgICAgICAg ICAgICAgICByZXQ9MTsKICAgICAgICAgICAgICAgICAgICBsb2NhbCBzdWJyZXQ9MTsKICAgICAg ICAgICAgICAgICAgICBpZiBbWyAtZSAke2R9L2NvbmZpZ3VyZSBdXTsgdGhlbgogICAgICAgICAg ICAgICAgICAgICAgICBFTFRfd2Fsa19wYXRjaGVzICIke2R9L2NvbmZpZ3VyZSIgIiR7cH0iOwog ICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXQ9JD87CiAgICAgICAgICAgICAgICAgICAgZWxz ZQogICAgICAgICAgICAgICAgICAgICAgICBpZiBbWyAtZSAke2R9Ly4uL2NvbmZpZ3VyZSBdXTsg dGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgRUxUX3dhbGtfcGF0Y2hlcyAiJHtkfS8u Li9jb25maWd1cmUiICIke3B9IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJldD0k PzsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgW1sgLWUgJHtkfS8uLi8uLi9jb25maWd1cmUgXV07IHRoZW4KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBFTFRfd2Fsa19wYXRjaGVzICIke2R9Ly4uLy4uL2NvbmZpZ3VyZSIg IiR7cH0iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJldD0kPzsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZpOwogICAgICAgICAgICAgICAgICAgICAgICBmaTsKICAg ICAgICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgICAgICAgICBpZiBbWyAkc3VicmV0IC1l cSAwIF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIHJldD0wOwogICAgICAgICAgICAg ICAgICAgIGZpCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgaW5zdGFsbC1zaCkK ICAgICAgICAgICAgICAgICAgICBFTFRfd2Fsa19wYXRjaGVzICIke2R9L2luc3RhbGwtc2giICIk e3B9IjsKICAgICAgICAgICAgICAgICAgICByZXQ9JD8KICAgICAgICAgICAgICAgIDs7CiAgICAg ICAgICAgICAgICBjcm9zcykKICAgICAgICAgICAgICAgICAgICBpZiB0Yy1pcy1jcm9zcy1jb21w aWxlcjsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBFTFRfd2Fsa19wYXRjaGVzICIke2R9 L2x0bWFpbi5zaCIgIiR7cH0iOwogICAgICAgICAgICAgICAgICAgICAgICByZXQ9JD87CiAgICAg ICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAqKQog ICAgICAgICAgICAgICAgICAgIEVMVF93YWxrX3BhdGNoZXMgIiR7ZH0vbHRtYWluLnNoIiAiJHtw fSI7CiAgICAgICAgICAgICAgICAgICAgcmV0PSQ/CiAgICAgICAgICAgICAgICA7OwogICAgICAg ICAgICBlc2FjOwogICAgICAgICAgICBpZiBbWyAke3JldH0gLW5lIDAgXV07IHRoZW4KICAgICAg ICAgICAgICAgIGNhc2UgJHtwfSBpbiAKICAgICAgICAgICAgICAgICAgICByZWxpbmspCiAgICAg ICAgICAgICAgICAgICAgICAgIGxvY2FsIHZlcnNpb249JChFTFRfbGlidG9vbF92ZXJzaW9uICIk e2R9L2x0bWFpbi5zaCIpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAhIGdyZXAgLXFzICdp bnN0X3ByZWZpeF9kaXInICIke2R9L2x0bWFpbi5zaCIgJiYgW1sgJChWRVJfdG9faW50ICIke3Zl cnNpb259IikgLWdlICQoVkVSX3RvX2ludCAiMS40LjAiKSBdXTsgdGhlbgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgZXdhcm4gIiAgQ291bGQgbm90IGFwcGx5IHJlbGluay5wYXRjaCEiOwog ICAgICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAg ICAgICAgICAgICAgcG9ydGFnZSkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgW1sgJHtkb19w b3J0YWdlfSA9PSAieWVzIiBdXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg ISBncmVwIC1xcyAnV2UgZG8gbm90IHdhbnQgcG9ydGFnZScgIiR7ZH0vbHRtYWluLnNoIjsgdGhl bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG87CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZWVycm9yICJQb3J0YWdlIHBhdGNoIHJlcXVlc3RlZCwgYnV0IGZhaWxl ZCB0byBhcHBseSEiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVlcnJvciAiUGxl YXNlIGZpbGUgYSBidWcgcmVwb3J0IHRvIGFkZCBhIHByb3BlciBwYXRjaC4iOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRpZSAiUG9ydGFnZSBwYXRjaCByZXF1ZXN0ZWQsIGJ1dCBm YWlsZWQgdG8gYXBwbHkhIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpOwogICAgICAg ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBncmVw IC1xcyAnV2UgZG8gbm90IHdhbnQgcG9ydGFnZScgIiR7ZH0vbHRtYWluLnNoIjsgdGhlbgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgdmVyc2lvbj0kKEVM VF9saWJ0b29sX3ZlcnNpb24gIiR7ZH0iL2x0bWFpbi5zaCk7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZWNobzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZXJyb3Ig IlBvcnRhZ2UgcGF0Y2ggZmFpbGVkIHRvIGFwcGx5IChsdG1haW4uc2ggdmVyc2lvbiAke3ZlcnNp b259KSEiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVlcnJvciAiUGxlYXNlIGZp bGUgYSBidWcgcmVwb3J0IHRvIGFkZCBhIHByb3BlciBwYXRjaC4iOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRpZSAiUG9ydGFnZSBwYXRjaCBmYWlsZWQgdG8gYXBwbHkhIjsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg RUxUX0FQUExJRURfUEFUQ0hFUz0icG9ydGFnZSI7CiAgICAgICAgICAgICAgICAgICAgICAgIGZp CiAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICB1Y2xpYmMtKikKICAg ICAgICAgICAgICAgICAgICAgICAgW1sgJHtDSE9TVH0gPT0gKi11Y2xpYmMgXV0gJiYgZXdhcm4g IiAgdUNsaWJjIHBhdGNoIHNldCAnJHtwfScgZmFpbGVkIHRvIGFwcGx5ISIKICAgICAgICAgICAg ICAgICAgICA7OwogICAgICAgICAgICAgICAgICAgIGZic2QtKikKICAgICAgICAgICAgICAgICAg ICAgICAgaWYgW1sgJHtDSE9TVH0gPT0gKi1mcmVlYnNkKiBdXTsgdGhlbgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgW1sgLXogJChncmVwICdIYW5kbGUgR2VudG9vL0ZyZWVCU0QgYXMg aXQgd2FzIExpbnV4JyAJCQkJCQkJCSIke2R9L2NvbmZpZ3VyZSIgIiR7ZH0vLi4vY29uZmlndXJl IiAyPi9kZXYvbnVsbCkgXV07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl ZXJyb3IgIiAgRnJlZUJTRCBwYXRjaCBzZXQgJyR7cH0nIGZhaWxlZCB0byBhcHBseSEiOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZSAiRnJlZUJTRCBwYXRjaCBzZXQgJyR7cH0n IGZhaWxlZCB0byBhcHBseSEiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmk7CiAgICAg ICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAg ICAgICAgICBkYXJ3aW4tKikKICAgICAgICAgICAgICAgICAgICAgICAgW1sgJHtDSE9TVH0gPT0g KiItZGFyd2luIiogXV0gJiYgZXdhcm4gIiAgRGFyd2luIHBhdGNoIHNldCAnJHtwfScgZmFpbGVk IHRvIGFwcGx5ISIKICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgZXNhYzsK ICAgICAgICAgICAgZmk7CiAgICAgICAgZG9uZTsKICAgICAgICBpZiBbWyAteiAke0VMVF9BUFBM SUVEX1BBVENIRVN9IF1dOyB0aGVuCiAgICAgICAgICAgIGlmIFtbICR7ZG9fcG9ydGFnZX0gPT0g Im5vIiAmJiAke2RvX3JldmVyc2VkZXBzfSA9PSAibm8iICYmICR7ZG9fb25seV9wYXRjaGVzfSA9 PSAibm8iICYmICR7ZGVwdG9yZW1vdmV9ID09ICIiIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBl d2FybiAiQ2Fubm90IGFwcGx5IGFueSBwYXRjaGVzLCBwbGVhc2UgZmlsZSBhIGJ1ZyBhYm91dCB0 aGlzIjsKICAgICAgICAgICAgICAgIGRpZTsKICAgICAgICAgICAgZmk7CiAgICAgICAgZmk7CiAg ICAgICAgcm0gLWYgIiR7ZH0vbGlidG9vbCI7CiAgICAgICAgID4gIiR7ZH0vLmVsaWJ0b29saXpl ZCI7CiAgICBkb25lCn0KZWx0X3BhdGNoX2RpciAoKSAKeyAKICAgIGxvY2FsIGQ9IiR7RUNMQVNT RElSfS9FTFQtcGF0Y2hlcyI7CiAgICBpZiBbWyAhIC1kICR7ZH0gXV07IHRoZW4KICAgICAgICBk PSIke0VDTEFTU0RJUl9MT0NBTH0vRUxULXBhdGNoZXMiOwogICAgZmk7CiAgICBlY2hvICIke2R9 Igp9CmVta3RlbXAgKCkgCnsgCiAgICBsb2NhbCBleGU9InRvdWNoIjsKICAgIFtbICQxID09IC1k IF1dICYmIGV4ZT0ibWtkaXIiICYmIHNoaWZ0OwogICAgbG9jYWwgdG9wZGlyPSQxOwogICAgaWYg W1sgLXogJHt0b3BkaXJ9IF1dOyB0aGVuCiAgICAgICAgW1sgLXogJHtUfSBdXSAmJiB0b3BkaXI9 Ii90bXAiIHx8IHRvcGRpcj0ke1R9OwogICAgZmk7CiAgICBpZiAhIHR5cGUgLVAgbWt0ZW1wID4g L2Rldi9udWxsOyB0aGVuCiAgICAgICAgbG9jYWwgdG1wPS87CiAgICAgICAgd2hpbGUgW1sgLWUg JHt0bXB9IF1dOyBkbwogICAgICAgICAgICB0bXA9JHt0b3BkaXJ9L3RtcC4ke1JBTkRPTX0uJHtS QU5ET019LiR7UkFORE9NfTsKICAgICAgICBkb25lOwogICAgICAgICR7ZXhlfSAiJHt0bXB9IiB8 fCAke2V4ZX0gLXAgIiR7dG1wfSI7CiAgICAgICAgZWNobyAiJHt0bXB9IjsKICAgIGVsc2UKICAg ICAgICBpZiBbWyAke2V4ZX0gPT0gInRvdWNoIiBdXTsgdGhlbgogICAgICAgICAgICBUTVBESVI9 IiR7dG9wZGlyfSIgbWt0ZW1wIC10IHRtcC5YWFhYWFhYWFhYOwogICAgICAgIGVsc2UKICAgICAg ICAgICAgVE1QRElSPSIke3RvcGRpcn0iIG1rdGVtcCAtZHQgdG1wLlhYWFhYWFhYWFg7CiAgICAg ICAgZmk7CiAgICBmaQp9CmVuZXdncm91cCAoKSAKeyAKICAgIF9hc3NlcnRfcGtnX2VidWlsZF9w aGFzZSAke0ZVTkNOQU1FfTsKICAgIGxvY2FsIGVncm91cD0kMTsKICAgIHNoaWZ0OwogICAgaWYg W1sgLXogJHtlZ3JvdXB9IF1dOyB0aGVuCiAgICAgICAgZWVycm9yICJObyBncm91cCBzcGVjaWZp ZWQgISI7CiAgICAgICAgZGllICJDYW5ub3QgY2FsbCBlbmV3Z3JvdXAgd2l0aG91dCBhIGdyb3Vw IjsKICAgIGZpOwogICAgaWYgW1sgLW4gJChlZ2V0ZW50IGdyb3VwICIke2Vncm91cH0iKSBdXTsg dGhlbgogICAgICAgIHJldHVybiAwOwogICAgZmk7CiAgICBlaW5mbyAiQWRkaW5nIGdyb3VwICck e2Vncm91cH0nIHRvIHlvdXIgc3lzdGVtIC4uLiI7CiAgICBsb2NhbCBlZ2lkPSQxOwogICAgc2hp ZnQ7CiAgICBpZiBbWyAhIC16ICR7ZWdpZH0gXV07IHRoZW4KICAgICAgICBpZiBbWyAke2VnaWR9 IC1ndCAwIF1dOyB0aGVuCiAgICAgICAgICAgIGlmIFtbIC1uICQoZWdldGVudCBncm91cCAke2Vn aWR9KSBdXTsgdGhlbgogICAgICAgICAgICAgICAgZWdpZD0ibmV4dCBhdmFpbGFibGU7IHJlcXVl c3RlZCBnaWQgdGFrZW4iOwogICAgICAgICAgICBmaTsKICAgICAgICBlbHNlCiAgICAgICAgICAg IGVlcnJvciAiR3JvdXBpZCBnaXZlbiBidXQgaXMgbm90IGdyZWF0ZXIgdGhhbiAwICEiOwogICAg ICAgICAgICBkaWUgIiR7ZWdpZH0gaXMgbm90IGEgdmFsaWQgR0lEIjsKICAgICAgICBmaTsKICAg IGVsc2UKICAgICAgICBlZ2lkPSJuZXh0IGF2YWlsYWJsZSI7CiAgICBmaTsKICAgIGVpbmZvICIg LSBHcm91cGlkOiAke2VnaWR9IjsKICAgIGlmIFtbICQjIC1ndCAwIF1dOyB0aGVuCiAgICAgICAg ZGllICJleHRyYSBhcmd1bWVudHMgbm8gbG9uZ2VyIHN1cHBvcnRlZDsgcGxlYXNlIGZpbGUgYSBi dWciOwogICAgZmk7CiAgICBmdW5jdGlvbiBfZW5ld2dyb3VwX25leHRfZ2lkICgpIAogICAgeyAK ICAgICAgICBpZiBbWyAke2VnaWR9ID09ICpbITAtOV0qIF1dOyB0aGVuCiAgICAgICAgICAgIGZv ciAoKGVnaWQgPSAxMDE7IGVnaWQgPD0gOTk5OyBlZ2lkKyspKQogICAgICAgICAgICBkbwogICAg ICAgICAgICAgICAgW1sgLXogJChlZ2V0ZW50IGdyb3VwICR7ZWdpZH0pIF1dICYmIGJyZWFrOwog ICAgICAgICAgICBkb25lOwogICAgICAgIGZpCiAgICB9OwogICAgY2FzZSAke0NIT1NUfSBpbiAK ICAgICAgICAqLWRhcndpbiopCiAgICAgICAgICAgIF9lbmV3Z3JvdXBfbmV4dF9naWQ7CiAgICAg ICAgICAgIGRzY2wgLiBjcmVhdGUgIi9ncm91cHMvJHtlZ3JvdXB9IiBnaWQgJHtlZ2lkfTsKICAg ICAgICAgICAgZHNjbCAuIGNyZWF0ZSAiL2dyb3Vwcy8ke2Vncm91cH0iIHBhc3N3ZCAnKicKICAg ICAgICA7OwogICAgICAgICotZnJlZWJzZCogfCAqLWRyYWdvbmZseSopCiAgICAgICAgICAgIF9l bmV3Z3JvdXBfbmV4dF9naWQ7CiAgICAgICAgICAgIHB3IGdyb3VwYWRkICIke2Vncm91cH0iIC1n ICR7ZWdpZH0gfHwgZGllCiAgICAgICAgOzsKICAgICAgICAqLW5ldGJzZCopCiAgICAgICAgICAg IF9lbmV3Z3JvdXBfbmV4dF9naWQ7CiAgICAgICAgICAgIGdyb3VwYWRkIC1nICR7ZWdpZH0gIiR7 ZWdyb3VwfSIgfHwgZGllCiAgICAgICAgOzsKICAgICAgICAqKQogICAgICAgICAgICBsb2NhbCBv cHRzOwogICAgICAgICAgICBpZiBbWyAke2VnaWR9ID09ICpbITAtOV0qIF1dOyB0aGVuCiAgICAg ICAgICAgICAgICBvcHRzPSIiOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBvcHRz PSItZyAke2VnaWR9IjsKICAgICAgICAgICAgZmk7CiAgICAgICAgICAgIGdyb3VwYWRkIC1yICR7 b3B0c30gIiR7ZWdyb3VwfSIgfHwgZGllCiAgICAgICAgOzsKICAgIGVzYWMKfQplbmV3dXNlciAo KSAKeyAKICAgIF9hc3NlcnRfcGtnX2VidWlsZF9waGFzZSAke0ZVTkNOQU1FfTsKICAgIGxvY2Fs IGV1c2VyPSQxOwogICAgc2hpZnQ7CiAgICBpZiBbWyAteiAke2V1c2VyfSBdXTsgdGhlbgogICAg ICAgIGVlcnJvciAiTm8gdXNlcm5hbWUgc3BlY2lmaWVkICEiOwogICAgICAgIGRpZSAiQ2Fubm90 IGNhbGwgZW5ld3VzZXIgd2l0aG91dCBhIHVzZXJuYW1lIjsKICAgIGZpOwogICAgaWYgW1sgLW4g JChlZ2V0ZW50IHBhc3N3ZCAiJHtldXNlcn0iKSBdXTsgdGhlbgogICAgICAgIHJldHVybiAwOwog ICAgZmk7CiAgICBlaW5mbyAiQWRkaW5nIHVzZXIgJyR7ZXVzZXJ9JyB0byB5b3VyIHN5c3RlbSAu Li4iOwogICAgbG9jYWwgb3B0cz0oKTsKICAgIGxvY2FsIGV1aWQ9JDE7CiAgICBzaGlmdDsKICAg IGlmIFtbIC1uICR7ZXVpZH0gJiYgJHtldWlkfSAhPSAtMSBdXTsgdGhlbgogICAgICAgIGlmIFtb ICR7ZXVpZH0gLWd0IDAgXV07IHRoZW4KICAgICAgICAgICAgaWYgW1sgLW4gJChlZ2V0ZW50IHBh c3N3ZCAke2V1aWR9KSBdXTsgdGhlbgogICAgICAgICAgICAgICAgZXVpZD0ibmV4dCI7CiAgICAg ICAgICAgIGZpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgZWVycm9yICJVc2VyaWQgZ2l2ZW4g YnV0IGlzIG5vdCBncmVhdGVyIHRoYW4gMCAhIjsKICAgICAgICAgICAgZGllICIke2V1aWR9IGlz IG5vdCBhIHZhbGlkIFVJRCI7CiAgICAgICAgZmk7CiAgICBlbHNlCiAgICAgICAgZXVpZD0ibmV4 dCI7CiAgICBmaTsKICAgIGlmIFtbICR7ZXVpZH0gPT0gIm5leHQiIF1dOyB0aGVuCiAgICAgICAg Zm9yICgoZXVpZCA9IDEwMTsgZXVpZCA8PSA5OTk7IGV1aWQrKykpCiAgICAgICAgZG8KICAgICAg ICAgICAgW1sgLXogJChlZ2V0ZW50IHBhc3N3ZCAke2V1aWR9KSBdXSAmJiBicmVhazsKICAgICAg ICBkb25lOwogICAgZmk7CiAgICBvcHRzKz0oLXUgJHtldWlkfSk7CiAgICBlaW5mbyAiIC0gVXNl cmlkOiAke2V1aWR9IjsKICAgIGxvY2FsIGVzaGVsbD0kMTsKICAgIHNoaWZ0OwogICAgaWYgW1sg ISAteiAke2VzaGVsbH0gXV0gJiYgW1sgJHtlc2hlbGx9ICE9ICItMSIgXV07IHRoZW4KICAgICAg ICBpZiBbWyAhIC1lICR7Uk9PVH0ke2VzaGVsbH0gXV07IHRoZW4KICAgICAgICAgICAgZWVycm9y ICJBIHNoZWxsIHdhcyBzcGVjaWZpZWQgYnV0IGl0IGRvZXMgbm90IGV4aXN0ICEiOwogICAgICAg ICAgICBkaWUgIiR7ZXNoZWxsfSBkb2VzIG5vdCBleGlzdCBpbiAke1JPT1R9IjsKICAgICAgICBm aTsKICAgICAgICBpZiBbWyAke2VzaGVsbH0gPT0gKi9mYWxzZSB8fCAke2VzaGVsbH0gPT0gKi9u b2xvZ2luIF1dOyB0aGVuCiAgICAgICAgICAgIGVlcnJvciAiRG8gbm90IHNwZWNpZnkgJHtlc2hl bGx9IHlvdXJzZWxmLCB1c2UgLTEiOwogICAgICAgICAgICBkaWUgIlBhc3MgJy0xJyBhcyB0aGUg c2hlbGwgcGFyYW1ldGVyIjsKICAgICAgICBmaTsKICAgIGVsc2UKICAgICAgICBmb3IgZXNoZWxs IGluIC9zYmluL25vbG9naW4gL3Vzci9zYmluL25vbG9naW4gL2Jpbi9mYWxzZSAvdXNyL2Jpbi9m YWxzZSAvZGV2L251bGw7CiAgICAgICAgZG8KICAgICAgICAgICAgW1sgLXggJHtST09UfSR7ZXNo ZWxsfSBdXSAmJiBicmVhazsKICAgICAgICBkb25lOwogICAgICAgIGlmIFtbICR7ZXNoZWxsfSA9 PSAiL2Rldi9udWxsIiBdXTsgdGhlbgogICAgICAgICAgICBlZXJyb3IgIlVuYWJsZSB0byBpZGVu dGlmeSB0aGUgc2hlbGwgdG8gdXNlLCBwcm9jZWVkaW5nIHdpdGggdXNlcmxhbmQgZGVmYXVsdC4i OwogICAgICAgICAgICBjYXNlICR7VVNFUkxBTkR9IGluIAogICAgICAgICAgICAgICAgR05VKQog ICAgICAgICAgICAgICAgICAgIGVzaGVsbD0iL2Jpbi9mYWxzZSIKICAgICAgICAgICAgICAgIDs7 CiAgICAgICAgICAgICAgICBCU0QpCiAgICAgICAgICAgICAgICAgICAgZXNoZWxsPSIvc2Jpbi9u b2xvZ2luIgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgIERhcndpbikKICAgICAg ICAgICAgICAgICAgICBlc2hlbGw9Ii91c3Ivc2Jpbi9ub2xvZ2luIgogICAgICAgICAgICAgICAg OzsKICAgICAgICAgICAgICAgICopCiAgICAgICAgICAgICAgICAgICAgZGllICJVbmFibGUgdG8g aWRlbnRpZnkgdGhlIGRlZmF1bHQgc2hlbGwgZm9yIHVzZXJsYW5kICR7VVNFUkxBTkR9IgogICAg ICAgICAgICAgICAgOzsKICAgICAgICAgICAgZXNhYzsKICAgICAgICBmaTsKICAgIGZpOwogICAg ZWluZm8gIiAtIFNoZWxsOiAke2VzaGVsbH0iOwogICAgb3B0cys9KC1zICIke2VzaGVsbH0iKTsK ICAgIGxvY2FsIGVob21lPSQxOwogICAgc2hpZnQ7CiAgICBpZiBbWyAteiAke2Vob21lfSBdXSB8 fCBbWyAke2Vob21lfSA9PSAiLTEiIF1dOyB0aGVuCiAgICAgICAgZWhvbWU9Ii9kZXYvbnVsbCI7 CiAgICBmaTsKICAgIGVpbmZvICIgLSBIb21lOiAke2Vob21lfSI7CiAgICBvcHRzKz0oLWQgIiR7 ZWhvbWV9Iik7CiAgICBsb2NhbCBlZ3JvdXBzPSQxOwogICAgc2hpZnQ7CiAgICBsb2NhbCBnIGVn cm91cHNfYXJyOwogICAgSUZTPSIsIiByZWFkIC1yIC1hIGVncm91cHNfYXJyIDw8PCAiJHtlZ3Jv dXBzfSI7CiAgICBzaGlmdDsKICAgIGlmIFtbICR7I2Vncm91cHNfYXJyW0BdfSAtZ3QgMCBdXTsg dGhlbgogICAgICAgIGxvY2FsIGRlZmdyb3VwIGV4Z3JvdXBzOwogICAgICAgIGZvciBnIGluICIk e2Vncm91cHNfYXJyW0BdfSI7CiAgICAgICAgZG8KICAgICAgICAgICAgaWYgW1sgLXogJChlZ2V0 ZW50IGdyb3VwICIke2d9IikgXV07IHRoZW4KICAgICAgICAgICAgICAgIGVlcnJvciAiWW91IG11 c3QgYWRkIGdyb3VwICR7Z30gdG8gdGhlIHN5c3RlbSBmaXJzdCI7CiAgICAgICAgICAgICAgICBk aWUgIiR7Z30gaXMgbm90IGEgdmFsaWQgR0lEIjsKICAgICAgICAgICAgZmk7CiAgICAgICAgICAg IGlmIFtbIC16ICR7ZGVmZ3JvdXB9IF1dOyB0aGVuCiAgICAgICAgICAgICAgICBkZWZncm91cD0k e2d9OwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBleGdyb3Vwcys9Iiwke2d9IjsK ICAgICAgICAgICAgZmk7CiAgICAgICAgZG9uZTsKICAgICAgICBvcHRzKz0oLWcgIiR7ZGVmZ3Jv dXB9Iik7CiAgICAgICAgaWYgW1sgISAteiAke2V4Z3JvdXBzfSBdXTsgdGhlbgogICAgICAgICAg ICBvcHRzKz0oLUcgIiR7ZXhncm91cHM6MX0iKTsKICAgICAgICBmaTsKICAgIGZpOwogICAgZWlu Zm8gIiAtIEdyb3VwczogJHtlZ3JvdXBzOi0obm9uZSl9IjsKICAgIGlmIFtbICQjIC1ndCAwIF1d OyB0aGVuCiAgICAgICAgZGllICJleHRyYSBhcmd1bWVudHMgbm8gbG9uZ2VyIHN1cHBvcnRlZDsg cGxlYXNlIGZpbGUgYSBidWciOwogICAgZWxzZQogICAgICAgIGxvY2FsIGNvbW1lbnQ9ImFkZGVk IGJ5IHBvcnRhZ2UgZm9yICR7UE59IjsKICAgICAgICBvcHRzKz0oLWMgIiR7Y29tbWVudH0iKTsK ICAgICAgICBlaW5mbyAiIC0gR0VDT1M6ICR7Y29tbWVudH0iOwogICAgZmk7CiAgICBjYXNlICR7 Q0hPU1R9IGluIAogICAgICAgICotZGFyd2luKikKICAgICAgICAgICAgZHNjbCAuIGNyZWF0ZSAi L3VzZXJzLyR7ZXVzZXJ9IiB1aWQgJHtldWlkfTsKICAgICAgICAgICAgZHNjbCAuIGNyZWF0ZSAi L3VzZXJzLyR7ZXVzZXJ9IiBzaGVsbCAiJHtlc2hlbGx9IjsKICAgICAgICAgICAgZHNjbCAuIGNy ZWF0ZSAiL3VzZXJzLyR7ZXVzZXJ9IiBob21lICIke2Vob21lfSI7CiAgICAgICAgICAgIGRzY2wg LiBjcmVhdGUgIi91c2Vycy8ke2V1c2VyfSIgcmVhbG5hbWUgImFkZGVkIGJ5IHBvcnRhZ2UgZm9y ICR7UE59IjsKICAgICAgICAgICAgZm9yIGcgaW4gIiR7ZWdyb3Vwc19hcnJbQF19IjsKICAgICAg ICAgICAgZG8KICAgICAgICAgICAgICAgIGRzY2wgLiBtZXJnZSAiL2dyb3Vwcy8ke2d9IiB1c2Vy cyAiJHtldXNlcn0iOwogICAgICAgICAgICBkb25lCiAgICAgICAgOzsKICAgICAgICAqLWZyZWVi c2QqIHwgKi1kcmFnb25mbHkqKQogICAgICAgICAgICBwdyB1c2VyYWRkICIke2V1c2VyfSIgIiR7 b3B0c1tAXX0iIHx8IGRpZQogICAgICAgIDs7CiAgICAgICAgKi1uZXRic2QqKQogICAgICAgICAg ICB1c2VyYWRkICIke29wdHNbQF19IiAiJHtldXNlcn0iIHx8IGRpZQogICAgICAgIDs7CiAgICAg ICAgKi1vcGVuYnNkKikKICAgICAgICAgICAgdXNlcmFkZCAtdSAke2V1aWR9IC1zICIke2VzaGVs bH0iIC1kICIke2Vob21lfSIgLWcgIiR7ZWdyb3Vwc30iICIke2V1c2VyfSIgfHwgZGllCiAgICAg ICAgOzsKICAgICAgICAqKQogICAgICAgICAgICB1c2VyYWRkIC1yICIke29wdHNbQF19IiAiJHtl dXNlcn0iIHx8IGRpZQogICAgICAgIDs7CiAgICBlc2FjOwogICAgaWYgW1sgISAtZSAke1JPT1R9 LyR7ZWhvbWV9IF1dOyB0aGVuCiAgICAgICAgZWluZm8gIiAtIENyZWF0aW5nICR7ZWhvbWV9IGlu ICR7Uk9PVH0iOwogICAgICAgIG1rZGlyIC1wICIke1JPT1R9LyR7ZWhvbWV9IjsKICAgICAgICBj aG93biAiJHtldXNlcn0iICIke1JPT1R9LyR7ZWhvbWV9IjsKICAgICAgICBjaG1vZCA3NTUgIiR7 Uk9PVH0vJHtlaG9tZX0iOwogICAgZmkKfQplcGF0Y2ggKCkgCnsgCiAgICBmdW5jdGlvbiBfZXBh dGNoX2RyYXdfbGluZSAoKSAKICAgIHsgCiAgICAgICAgW1sgLXogJDEgXV0gJiYgc2V0ICIkKHBy aW50ZiAiJTY1cyIgJycpIjsKICAgICAgICBlY2hvICIkezEvLz8vPX0iCiAgICB9OwogICAgdW5z ZXQgUDRDT05GSUcgUDRQT1JUIFA0VVNFUjsKICAgIGlmIFtbICQjIC1ndCAxIF1dOyB0aGVuCiAg ICAgICAgbG9jYWwgbTsKICAgICAgICBmb3IgbSBpbiAiJEAiOwogICAgICAgIGRvCiAgICAgICAg ICAgIGVwYXRjaCAiJHttfSI7CiAgICAgICAgZG9uZTsKICAgICAgICByZXR1cm4gMDsKICAgIGZp OwogICAgbG9jYWwgU0lOR0xFX1BBVENIPSJubyI7CiAgICBbWyAkIyAtZXEgMCBdXSAmJiBzZXQg LS0gIiR7RVBBVENIX1NPVVJDRX0iOwogICAgaWYgW1sgLWYgJDEgXV07IHRoZW4KICAgICAgICBT SU5HTEVfUEFUQ0g9InllcyI7CiAgICAgICAgc2V0IC0tICIkMSI7CiAgICAgICAgbG9jYWwgRVBB VENIX1NVRkZJWD0kMTsKICAgIGVsc2UKICAgICAgICBpZiBbWyAtZCAkMSBdXTsgdGhlbgogICAg ICAgICAgICBzZXQgLS0gIiQxIi8qJHtFUEFUQ0hfU1VGRklYOisuIiR7RVBBVENIX1NVRkZJWH0i fTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGlmIFtbIC1mICR7RVBBVENIX1NPVVJDRX0vJDEg XV07IHRoZW4KICAgICAgICAgICAgICAgIGVwYXRjaCAiJHtFUEFUQ0hfU09VUkNFfS8kMSI7CiAg ICAgICAgICAgICAgICByZXR1cm4gJD87CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg IFtbICQjIC1uZSAwIF1dICYmIEVQQVRDSF9TT1VSQ0U9JDE7CiAgICAgICAgICAgICAgICBlY2hv OwogICAgICAgICAgICAgICAgZWVycm9yICJDYW5ub3QgZmluZCBcJEVQQVRDSF9TT1VSQ0UhICBW YWx1ZSBmb3IgXCRFUEFUQ0hfU09VUkNFIGlzOiI7CiAgICAgICAgICAgICAgICBlZXJyb3I7CiAg ICAgICAgICAgICAgICBlZXJyb3IgIiAgJHtFUEFUQ0hfU09VUkNFfSI7CiAgICAgICAgICAgICAg ICBlZXJyb3IgIiAgKCAke0VQQVRDSF9TT1VSQ0UjIyovfSApIjsKICAgICAgICAgICAgICAgIGVj aG87CiAgICAgICAgICAgICAgICBkaWUgIkNhbm5vdCBmaW5kIFwkRVBBVENIX1NPVVJDRSEiOwog ICAgICAgICAgICBmaTsKICAgICAgICBmaTsKICAgIGZpOwogICAgbG9jYWwgUElQRV9DTUQ7CiAg ICBjYXNlICR7RVBBVENIX1NVRkZJWCMjKlwufSBpbiAKICAgICAgICB4eikKICAgICAgICAgICAg UElQRV9DTUQ9Inh6IC1kYyIKICAgICAgICA7OwogICAgICAgIGx6bWEpCiAgICAgICAgICAgIFBJ UEVfQ01EPSJsem1hIC1kYyIKICAgICAgICA7OwogICAgICAgIGJ6MikKICAgICAgICAgICAgUElQ RV9DTUQ9ImJ6aXAyIC1kYyIKICAgICAgICA7OwogICAgICAgIGd6IHwgWiB8IHopCiAgICAgICAg ICAgIFBJUEVfQ01EPSJnemlwIC1kYyIKICAgICAgICA7OwogICAgICAgIFpJUCB8IHppcCkKICAg ICAgICAgICAgUElQRV9DTUQ9InVuemlwIC1wIgogICAgICAgIDs7CiAgICAgICAgKikKCiAgICAg ICAgOzsKICAgIGVzYWM7CiAgICBbWyAke1NJTkdMRV9QQVRDSH0gPT0gIm5vIiBdXSAmJiBlaW5m byAiJHtFUEFUQ0hfTVVMVElfTVNHfSI7CiAgICBsb2NhbCB4OwogICAgZm9yIHggaW4gIiRAIjsK ICAgIGRvCiAgICAgICAgW1sgISAtZiAke3h9IF1dICYmIGNvbnRpbnVlOwogICAgICAgIGxvY2Fs IHBhdGNobmFtZT0ke3gjIyovfTsKICAgICAgICBsb2NhbCBhPSR7cGF0Y2huYW1lIypffTsKICAg ICAgICBhPSR7YSUlXyp9OwogICAgICAgIGlmICEgW1sgJHtTSU5HTEVfUEFUQ0h9ID09ICJ5ZXMi IHx8ICR7RVBBVENIX0ZPUkNFfSA9PSAieWVzIiB8fCAke2F9ID09IGFsbCB8fCAke2F9ID09ICR7 QVJDSH0gXV07IHRoZW4KICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgZmk7CiAgICAgICAg aWYgW1sgLW4gJHtFUEFUQ0hfRVhDTFVERX0gXV07IHRoZW4KICAgICAgICAgICAgZXNob3B0c19w dXNoIC1vIG5vZ2xvYjsKICAgICAgICAgICAgbG9jYWwgZXg7CiAgICAgICAgICAgIGZvciBleCBp biAke0VQQVRDSF9FWENMVURFfTsKICAgICAgICAgICAgZG8KICAgICAgICAgICAgICAgIGlmIFtb ICR7cGF0Y2huYW1lfSA9PSAke2V4fSBdXTsgdGhlbgogICAgICAgICAgICAgICAgICAgIGVzaG9w dHNfcG9wOwogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIDI7CiAgICAgICAgICAgICAgICBm aTsKICAgICAgICAgICAgZG9uZTsKICAgICAgICAgICAgZXNob3B0c19wb3A7CiAgICAgICAgZmk7 CiAgICAgICAgaWYgW1sgJHtTSU5HTEVfUEFUQ0h9ID09ICJ5ZXMiIF1dOyB0aGVuCiAgICAgICAg ICAgIGlmIFtbIC1uICR7RVBBVENIX1NJTkdMRV9NU0d9IF1dOyB0aGVuCiAgICAgICAgICAgICAg ICBlaW5mbyAiJHtFUEFUQ0hfU0lOR0xFX01TR30iOwogICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICBlaW5mbyAiQXBwbHlpbmcgJHtwYXRjaG5hbWV9IC4uLiI7CiAgICAgICAgICAgIGZp OwogICAgICAgIGVsc2UKICAgICAgICAgICAgZWluZm8gIiAgJHtwYXRjaG5hbWV9IC4uLiI7CiAg ICAgICAgZmk7CiAgICAgICAgbG9jYWwgU1RERVJSX1RBUkdFVD0iJHtUfS8ke3BhdGNobmFtZX0u b3V0IjsKICAgICAgICBpZiBbWyAtZSAke1NUREVSUl9UQVJHRVR9IF1dOyB0aGVuCiAgICAgICAg ICAgIFNUREVSUl9UQVJHRVQ9IiR7VH0vJHtwYXRjaG5hbWV9LSQkLm91dCI7CiAgICAgICAgZmk7 CiAgICAgICAgcHJpbnRmICIqKioqKiAlcyAqKioqKlxuUFdEOiAlc1xuXG4iICIke3BhdGNobmFt ZX0iICIke1BXRH0iID4gIiR7U1RERVJSX1RBUkdFVH0iOwogICAgICAgIGxvY2FsIGNvdW50PTA7 CiAgICAgICAgbG9jYWwgUEFUQ0hfVEFSR0VUOwogICAgICAgIGlmIFtbIC1uICR7UElQRV9DTUR9 IF1dOyB0aGVuCiAgICAgICAgICAgIFBBVENIX1RBUkdFVD0iJHtUfS8kJC5wYXRjaCI7CiAgICAg ICAgICAgIGVjaG8gIlBJUEVfQ09NTUFORDogICR7UElQRV9DTUR9ICR7eH0gPiAke1BBVENIX1RB UkdFVH0iID4+ICIke1NUREVSUl9UQVJHRVR9IjsKICAgICAgICAgICAgaWYgISAoICR7UElQRV9D TUR9ICIke3h9IiA+ICIke1BBVENIX1RBUkdFVH0iICkgPj4gIiR7U1RERVJSX1RBUkdFVH0iIDI+ JjE7IHRoZW4KICAgICAgICAgICAgICAgIGVjaG87CiAgICAgICAgICAgICAgICBlZXJyb3IgIkNv dWxkIG5vdCBleHRyYWN0IHBhdGNoISI7CiAgICAgICAgICAgICAgICBjb3VudD01OwogICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGZpOwogICAgICAgIGVsc2UKICAgICAgICAgICAg UEFUQ0hfVEFSR0VUPSR7eH07CiAgICAgICAgZmk7CiAgICAgICAgbG9jYWwgYWJzX3BhdGhzPSQo ZWdyZXAgLW4gJ15bLStdezN9IC8nICIke1BBVENIX1RBUkdFVH0iIHwgYXdrICckMiAhPSAiL2Rl di9udWxsIiB7IHByaW50IH0nKTsKICAgICAgICBpZiBbWyAtbiAke2Fic19wYXRoc30gXV07IHRo ZW4KICAgICAgICAgICAgY291bnQ9MTsKICAgICAgICAgICAgcHJpbnRmICJOT1RFOiBza2lwcGlu ZyAtcDAgZHVlIHRvIGFic29sdXRlIHBhdGhzIGluIHBhdGNoOlxuJXNcbiIgIiR7YWJzX3BhdGhz fSIgPj4gIiR7U1RERVJSX1RBUkdFVH0iOwogICAgICAgIGZpOwogICAgICAgIGxvY2FsIHJlbF9w YXRocz0kKGVncmVwIC1uICdeWy0rXXszfSBbXgldKlsuXVsuXS8nICIke1BBVENIX1RBUkdFVH0i KTsKICAgICAgICBpZiBbWyAtbiAke3JlbF9wYXRoc30gXV07IHRoZW4KICAgICAgICAgICAgZXFh d2FybiAiUUEgTm90aWNlOiBZb3VyIHBhdGNoIHVzZXMgcmVsYXRpdmUgcGF0aHMgJy4uLycuIjsK ICAgICAgICAgICAgZXFhd2FybiAiIEluIHRoZSBmdXR1cmUgdGhpcyB3aWxsIGNhdXNlIGEgZmFp bHVyZS4iOwogICAgICAgICAgICBlcWF3YXJuICIke3JlbF9wYXRoc30iOwogICAgICAgIGZpOwog ICAgICAgIHdoaWxlIFtbICR7Y291bnR9IC1sdCA1IF1dOyBkbwogICAgICAgICAgICAoIF9lcGF0 Y2hfZHJhd19saW5lICIqKioqKiAke3BhdGNobmFtZX0gKioqKioiOwogICAgICAgICAgICBlY2hv OwogICAgICAgICAgICBlY2hvICJQQVRDSCBDT01NQU5EOiAgcGF0Y2ggLXAke2NvdW50fSAke0VQ QVRDSF9PUFRTfSA8ICcke1BBVENIX1RBUkdFVH0nIjsKICAgICAgICAgICAgZWNobzsKICAgICAg ICAgICAgX2VwYXRjaF9kcmF3X2xpbmUgIioqKioqICR7cGF0Y2huYW1lfSAqKioqKiI7CiAgICAg ICAgICAgIHBhdGNoIC1wJHtjb3VudH0gJHtFUEFUQ0hfT1BUU30gLS1kcnktcnVuIC1mIDwgIiR7 UEFUQ0hfVEFSR0VUfSIgMj4mMTsKICAgICAgICAgICAgcmV0PSQ/OwogICAgICAgICAgICBlY2hv OwogICAgICAgICAgICBlY2hvICJwYXRjaCBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAke3Jl dH0iOwogICAgICAgICAgICBleGl0ICR7cmV0fSApID4+ICIke1NUREVSUl9UQVJHRVR9IjsKICAg ICAgICAgICAgaWYgWyAkPyAtZXEgMCBdOyB0aGVuCiAgICAgICAgICAgICAgICAoIF9lcGF0Y2hf ZHJhd19saW5lICIqKioqKiAke3BhdGNobmFtZX0gKioqKioiOwogICAgICAgICAgICAgICAgZWNo bzsKICAgICAgICAgICAgICAgIGVjaG8gIkFDVFVBTExZIEFQUExZSU5HICR7cGF0Y2huYW1lfSAu Li4iOwogICAgICAgICAgICAgICAgZWNobzsKICAgICAgICAgICAgICAgIF9lcGF0Y2hfZHJhd19s aW5lICIqKioqKiAke3BhdGNobmFtZX0gKioqKioiOwogICAgICAgICAgICAgICAgcGF0Y2ggLXAk e2NvdW50fSAke0VQQVRDSF9PUFRTfSA8ICIke1BBVENIX1RBUkdFVH0iIDI+JjE7CiAgICAgICAg ICAgICAgICByZXQ9JD87CiAgICAgICAgICAgICAgICBlY2hvOwogICAgICAgICAgICAgICAgZWNo byAicGF0Y2ggcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJHtyZXR9IjsKICAgICAgICAgICAg ICAgIGV4aXQgJHtyZXR9ICkgPj4gIiR7U1RERVJSX1RBUkdFVH0iOwogICAgICAgICAgICAgICAg aWYgWyAkPyAtbmUgMCBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgZWNobzsKICAgICAgICAg ICAgICAgICAgICBlZXJyb3IgIkEgZHJ5LXJ1biBvZiBwYXRjaCBjb21tYW5kIHN1Y2NlZWRlZCwg YnV0IGFjdHVhbGx5IjsKICAgICAgICAgICAgICAgICAgICBlZXJyb3IgImFwcGx5aW5nIHRoZSBw YXRjaCBmYWlsZWQhIjsKICAgICAgICAgICAgICAgICAgICBjb3VudD01OwogICAgICAgICAgICAg ICAgZmk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZmk7CiAgICAgICAgICAg IDogJCgoIGNvdW50KysgKSk7CiAgICAgICAgZG9uZTsKICAgICAgICBpZiBbWyAtbiAke1BJUEVf Q01EfSBdXTsgdGhlbgogICAgICAgICAgICBybSAtZiAiJHtQQVRDSF9UQVJHRVR9IjsKICAgICAg ICBmaTsKICAgICAgICBpZiBbWyAke2NvdW50fSAtZ2UgNSBdXTsgdGhlbgogICAgICAgICAgICBl Y2hvOwogICAgICAgICAgICBlZXJyb3IgIkZhaWxlZCBQYXRjaDogJHtwYXRjaG5hbWV9ICEiOwog ICAgICAgICAgICBlZXJyb3IgIiAoICR7UEFUQ0hfVEFSR0VUfSApIjsKICAgICAgICAgICAgZWVy cm9yOwogICAgICAgICAgICBlZXJyb3IgIkluY2x1ZGUgaW4geW91ciBidWdyZXBvcnQgdGhlIGNv bnRlbnRzIG9mOiI7CiAgICAgICAgICAgIGVlcnJvcjsKICAgICAgICAgICAgZWVycm9yICIgICR7 U1RERVJSX1RBUkdFVH0iOwogICAgICAgICAgICBlY2hvOwogICAgICAgICAgICBkaWUgIkZhaWxl ZCBQYXRjaDogJHtwYXRjaG5hbWV9ISI7CiAgICAgICAgZmk7CiAgICAgICAgcm0gLWYgIiR7U1RE RVJSX1RBUkdFVH0iOwogICAgICAgIGVlbmQgMDsKICAgIGRvbmU7CiAgICBbWyAke1NJTkdMRV9Q QVRDSH0gPT0gIm5vIiBdXSAmJiBlaW5mbyAiRG9uZSB3aXRoIHBhdGNoaW5nIjsKICAgIDoKfQpl cGF0Y2hfdXNlciAoKSAKeyAKICAgIFtbICQjIC1uZSAwIF1dICYmIGRpZSAiZXBhdGNoX3VzZXIg dGFrZXMgbm8gb3B0aW9ucyI7CiAgICBsb2NhbCBhcHBsaWVkPSIke1R9L2VwYXRjaF91c2VyLmFw cGxpZWQiOwogICAgW1sgLWUgJHthcHBsaWVkfSBdXSAmJiByZXR1cm4gMjsKICAgIGxvY2FsIEVQ QVRDSF9TT1VSQ0UgY2hlY2sgYmFzZT0ke1BPUlRBR0VfQ09ORklHUk9PVCUvfS9ldGMvcG9ydGFn ZS9wYXRjaGVzOwogICAgZm9yIGNoZWNrIGluICR7Q0FURUdPUll9L3ske1B9LSR7UFJ9LCR7UH0s JHtQTn19OwogICAgZG8KICAgICAgICBFUEFUQ0hfU09VUkNFPSR7YmFzZX0vJHtDVEFSR0VUfS8k e2NoZWNrfTsKICAgICAgICBbWyAtciAke0VQQVRDSF9TT1VSQ0V9IF1dIHx8IEVQQVRDSF9TT1VS Q0U9JHtiYXNlfS8ke0NIT1NUfS8ke2NoZWNrfTsKICAgICAgICBbWyAtciAke0VQQVRDSF9TT1VS Q0V9IF1dIHx8IEVQQVRDSF9TT1VSQ0U9JHtiYXNlfS8ke2NoZWNrfTsKICAgICAgICBpZiBbWyAt ZCAke0VQQVRDSF9TT1VSQ0V9IF1dOyB0aGVuCiAgICAgICAgICAgIEVQQVRDSF9TT1VSQ0U9JHtF UEFUQ0hfU09VUkNFfSBFUEFUQ0hfU1VGRklYPSJwYXRjaCIgRVBBVENIX0ZPUkNFPSJ5ZXMiIEVQ QVRDSF9NVUxUSV9NU0c9IkFwcGx5aW5nIHVzZXIgcGF0Y2hlcyBmcm9tICR7RVBBVENIX1NPVVJD RX0gLi4uIiBlcGF0Y2g7CiAgICAgICAgICAgIGVjaG8gIiR7RVBBVENIX1NPVVJDRX0iID4gIiR7 YXBwbGllZH0iOwogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICBmaTsKICAgIGRvbmU7CiAg ICBlY2hvICJub25lIiA+ICIke2FwcGxpZWR9IjsKICAgIHJldHVybiAxCn0KZXBhdXNlICgpIAp7 IAogICAgZXdhcm4gIlFBIE5vdGljZTogZXBhdXNlIGlzIG5vdCBkZWZpbmVkIGluIEVBUEk9JHtF QVBJfSwgcGxlYXNlIGZpbGUgYSBidWcgYXQgaHR0cDovL2J1Z3MuZ2VudG9vLm9yZyIKfQplcHVu dF9jeHggKCkgCnsgCiAgICBsb2NhbCBkaXI9JDE7CiAgICBbWyAteiAke2Rpcn0gXV0gJiYgZGly PSR7U307CiAgICBlYmVnaW4gIlJlbW92aW5nIHVzZWxlc3MgQysrIGNoZWNrcyI7CiAgICBsb2Nh bCBmOwogICAgZmluZCAiJHtkaXJ9IiAtbmFtZSBjb25maWd1cmUgfCB3aGlsZSByZWFkIGY7IGRv CiAgICAgICAgcGF0Y2ggLS1uby1iYWNrdXAtaWYtbWlzbWF0Y2ggLXAwICIke2Z9IiAiJHtQT1JU RElSfS9lY2xhc3MvRUxULXBhdGNoZXMvbm9jeHgvbm9jeHgucGF0Y2giID4gL2Rldi9udWxsOwog ICAgZG9uZTsKICAgIGVlbmQgMAp9CmVzaG9wdHNfcG9wICgpIAp7IAogICAgbG9jYWwgczsKICAg IGVzdGFja19wb3AgZXNob3B0cyBzIHx8IGRpZSAiJHtGVU5DTkFNRX06IHVuYmFsYW5jZWQgcHVz aCI7CiAgICBpZiBbWyAke3N9ID09ICJzaG9wdCAtIiogXV07IHRoZW4KICAgICAgICBldmFsICIk e3N9IiB8fCBkaWUgIiR7RlVOQ05BTUV9OiBzYW5pdHk6IGludmFsaWQgc2hvcHQgb3B0aW9uczog JHtzfSI7CiAgICBlbHNlCiAgICAgICAgc2V0ICskLSB8fCBkaWUgIiR7RlVOQ05BTUV9OiBzYW5p dHk6IGludmFsaWQgc2hlbGwgc2V0dGluZ3M6ICQtIjsKICAgICAgICBzZXQgLSR7c30gfHwgZGll ICIke0ZVTkNOQU1FfTogc2FuaXR5OiB1bmFibGUgdG8gcmVzdG9yZSBzYXZlZCBzaGVsbCBzZXR0 aW5nczogJHtzfSI7CiAgICBmaQp9CmVzaG9wdHNfcHVzaCAoKSAKeyAKICAgIGlmIFtbICQxID09 IC1bc3VdIF1dOyB0aGVuCiAgICAgICAgZXN0YWNrX3B1c2ggZXNob3B0cyAiJChzaG9wdCAtcCki OwogICAgICAgIFtbICQjIC1lcSAwIF1dICYmIHJldHVybiAwOwogICAgICAgIHNob3B0ICIkQCIg fHwgZGllICIke0ZVTkNOQU1FfTogYmFkIG9wdGlvbnMgdG8gc2hvcHQ6ICQqIjsKICAgIGVsc2UK ICAgICAgICBlc3RhY2tfcHVzaCBlc2hvcHRzICQtOwogICAgICAgIFtbICQjIC1lcSAwIF1dICYm IHJldHVybiAwOwogICAgICAgIHNldCAiJEAiIHx8IGRpZSAiJHtGVU5DTkFNRX06IGJhZCBvcHRp b25zIHRvIHNldDogJCoiOwogICAgZmkKfQplc3RhY2tfcG9wICgpIAp7IAogICAgW1sgJCMgLWVx IDAgfHwgJCMgLWd0IDIgXV0gJiYgZGllICJlc3RhY2tfcG9wOiBpbmNvcnJlY3QgIyBvZiBhcmd1 bWVudHMiOwogICAgbG9jYWwgX19lc3RhY2tfbmFtZT0iX19FU1RBQ0tfJDFfXyI7CiAgICBzaGlm dDsKICAgIGxvY2FsIF9fZXN0YWNrX3JldHZhcj0kMTsKICAgIHNoaWZ0OwogICAgZXZhbCBsb2Nh bCBfX2VzdGFja19pPVwkeyMke19fZXN0YWNrX25hbWV9XFtAXF19OwogICAgW1sgJCgoIC0tX19l c3RhY2tfaSApKSAtZXEgLTEgXV0gJiYgcmV0dXJuIDE7CiAgICBpZiBbWyAtbiAke19fZXN0YWNr X3JldHZhcn0gXV07IHRoZW4KICAgICAgICBldmFsICR7X19lc3RhY2tfcmV0dmFyfT1cIlwkeyR7 X19lc3RhY2tfbmFtZX1cWyR7X19lc3RhY2tfaX1cXX1cIjsKICAgIGZpOwogICAgZXZhbCB1bnNl dCAke19fZXN0YWNrX25hbWV9XFske19fZXN0YWNrX2l9XF0KfQplc3RhY2tfcHVzaCAoKSAKeyAK ICAgIFtbICQjIC1lcSAwIF1dICYmIGRpZSAiZXN0YWNrX3B1c2g6IGluY29ycmVjdCAjIG9mIGFy Z3VtZW50cyI7CiAgICBsb2NhbCBzdGFja19uYW1lPSJfX0VTVEFDS18kMV9fIjsKICAgIHNoaWZ0 OwogICAgZXZhbCAke3N0YWNrX25hbWV9Kz1cKCBcIlwkQFwiIFwpCn0KZXN2bl9jbGVhbiAoKSAK eyAKICAgIFtbIC16ICQqIF1dICYmIHNldCAtLSAuOwogICAgZmluZCAiJEAiIC10eXBlIGQgLW5h bWUgJy5zdm4nIC1wcnVuZSAtcHJpbnQwIHwgeGFyZ3MgLTAgcm0gLXJmCn0KZXVtYXNrX3BvcCAo KSAKeyAKICAgIGxvY2FsIHM7CiAgICBlc3RhY2tfcG9wIGV1bWFzayBzIHx8IGRpZSAiJHtGVU5D TkFNRX06IHVuYmFsYW5jZWQgcHVzaCI7CiAgICB1bWFzayAke3N9IHx8IGRpZSAiJHtGVU5DTkFN RX06IHNhbml0eTogY291bGQgbm90IHJlc3RvcmUgdW1hc2s6ICR7c30iCn0KZXVtYXNrX3B1c2gg KCkgCnsgCiAgICBlc3RhY2tfcHVzaCBldW1hc2sgIiQodW1hc2spIjsKICAgIHVtYXNrICIkQCIg fHwgZGllICIke0ZVTkNOQU1FfTogYmFkIG9wdGlvbnMgdG8gdW1hc2s6ICQqIgp9CmZkby1taW1l X2Rlc2t0b3BfZGF0YWJhc2VfdXBkYXRlICgpIAp7IAogICAgaGFzICIke0VBUEk6LTB9IiAwIDEg MiAmJiAhIHVzZSBwcmVmaXggJiYgRVBSRUZJWD07CiAgICBoYXMgIiR7RUFQSTotMH0iIDAgMSAy ICYmICEgdXNlIHByZWZpeCAmJiBFUk9PVD0iJHtST09UfSI7CiAgICBpZiBbIC14ICIke0VQUkVG SVh9L3Vzci9iaW4vdXBkYXRlLWRlc2t0b3AtZGF0YWJhc2UiIF07IHRoZW4KICAgICAgICBlaW5m byAiVXBkYXRpbmcgZGVza3RvcCBtaW1lIGRhdGFiYXNlIC4uLiI7CiAgICAgICAgIiR7RVBSRUZJ WH0vdXNyL2Jpbi91cGRhdGUtZGVza3RvcC1kYXRhYmFzZSIgLXEgIiR7RVJPT1R9dXNyL3NoYXJl L2FwcGxpY2F0aW9ucyI7CiAgICBmaQp9CmZkby1taW1lX21pbWVfZGF0YWJhc2VfdXBkYXRlICgp IAp7IAogICAgaGFzICIke0VBUEk6LTB9IiAwIDEgMiAmJiAhIHVzZSBwcmVmaXggJiYgRVBSRUZJ WD07CiAgICBoYXMgIiR7RUFQSTotMH0iIDAgMSAyICYmICEgdXNlIHByZWZpeCAmJiBFUk9PVD0i JHtST09UfSI7CiAgICBpZiBbIC14ICIke0VQUkVGSVh9L3Vzci9iaW4vdXBkYXRlLW1pbWUtZGF0 YWJhc2UiIF07IHRoZW4KICAgICAgICBlaW5mbyAiVXBkYXRpbmcgc2hhcmVkIG1pbWUgaW5mbyBk YXRhYmFzZSAuLi4iOwogICAgICAgICIke0VQUkVGSVh9L3Vzci9iaW4vdXBkYXRlLW1pbWUtZGF0 YWJhc2UiICIke0VST09UfXVzci9zaGFyZS9taW1lIjsKICAgIGZpCn0KZmluZF91bnBhY2thYmxl X2ZpbGUgKCkgCnsgCiAgICBsb2NhbCBzcmM9JDE7CiAgICBpZiBbWyAteiAke3NyY30gXV07IHRo ZW4KICAgICAgICBzcmM9JHtESVNURElSfS8ke0F9OwogICAgZWxzZQogICAgICAgIGlmIFtbIC1l ICR7RElTVERJUn0vJHtzcmN9IF1dOyB0aGVuCiAgICAgICAgICAgIHNyYz0ke0RJU1RESVJ9LyR7 c3JjfTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGlmIFtbIC1lICR7UFdEfS8ke3NyY30gXV07 IHRoZW4KICAgICAgICAgICAgICAgIHNyYz0ke1BXRH0vJHtzcmN9OwogICAgICAgICAgICBlbHNl CiAgICAgICAgICAgICAgICBpZiBbWyAtZSAke3NyY30gXV07IHRoZW4KICAgICAgICAgICAgICAg ICAgICBzcmM9JHtzcmN9OwogICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgIGZpOwogICAg ICAgIGZpOwogICAgZmk7CiAgICBbWyAhIC1lICR7c3JjfSBdXSAmJiByZXR1cm4gMTsKICAgIGVj aG8gIiR7c3JjfSIKfQpnY2MtZnVsbHZlcnNpb24gKCkgCnsgCiAgICBfZ2NjX2Z1bGx2ZXJzaW9u ICckMS4kMi4kMycgIiRAIgp9CmdjYy1tYWpvci12ZXJzaW9uICgpIAp7IAogICAgX2djY19mdWxs dmVyc2lvbiAnJDEnICIkQCIKfQpnY2MtbWljcm8tdmVyc2lvbiAoKSAKeyAKICAgIF9nY2NfZnVs bHZlcnNpb24gJyQzJyAiJEAiCn0KZ2NjLW1pbm9yLXZlcnNpb24gKCkgCnsgCiAgICBfZ2NjX2Z1 bGx2ZXJzaW9uICckMicgIiRAIgp9CmdjYy1zcGVjcy1kaXJlY3RpdmUgKCkgCnsgCiAgICBsb2Nh bCBkaXJlY3RpdmUgc3ViZG5hbWUgc3ViZGlyZWN0aXZlOwogICAgZGlyZWN0aXZlPSIkKF9nY2Mt c3BlY3MtZGlyZWN0aXZlX3JhdyAkMSkiOwogICAgd2hpbGUgW1sgJHtkaXJlY3RpdmV9ID09ICol XCgqXCkqIF1dOyBkbwogICAgICAgIHN1YmRuYW1lPSR7ZGlyZWN0aXZlLyolXCh9OwogICAgICAg IHN1YmRuYW1lPSR7c3ViZG5hbWUvXCkqfTsKICAgICAgICBzdWJkaXJlY3RpdmU9IiQoX2djYy1z cGVjcy1kaXJlY3RpdmVfcmF3ICR7c3ViZG5hbWV9KSI7CiAgICAgICAgZGlyZWN0aXZlPSIke2Rp cmVjdGl2ZS8vXCUoJHtzdWJkbmFtZX0pLyR7c3ViZGlyZWN0aXZlfX0iOwogICAgZG9uZTsKICAg IGVjaG8gIiR7ZGlyZWN0aXZlfSI7CiAgICByZXR1cm4gMAp9CmdjYy1zcGVjcy1ub3N0cmljdCAo KSAKeyAKICAgIGxvY2FsIGRpcmVjdGl2ZTsKICAgIGRpcmVjdGl2ZT0kKGdjYy1zcGVjcy1kaXJl Y3RpdmUgY2MxKTsKICAgIHJldHVybiAkKFtbICIke2RpcmVjdGl2ZS9ceyFmc3RyaWN0LW92ZXJm bG93On0iICE9ICIke2RpcmVjdGl2ZX0iIF1dKQp9CmdjYy1zcGVjcy1ub3cgKCkgCnsgCiAgICBs b2NhbCBkaXJlY3RpdmU7CiAgICBkaXJlY3RpdmU9JChnY2Mtc3BlY3MtZGlyZWN0aXZlIGxpbmtf Y29tbWFuZCk7CiAgICByZXR1cm4gJChbWyAiJHtkaXJlY3RpdmUvXHshbm9ub3c6fSIgIT0gIiR7 ZGlyZWN0aXZlfSIgXV0pCn0KZ2NjLXNwZWNzLXBpZSAoKSAKeyAKICAgIGxvY2FsIGRpcmVjdGl2 ZTsKICAgIGRpcmVjdGl2ZT0kKGdjYy1zcGVjcy1kaXJlY3RpdmUgY2MxKTsKICAgIHJldHVybiAk KFtbICIke2RpcmVjdGl2ZS9ceyFub3BpZTp9IiAhPSAiJHtkaXJlY3RpdmV9IiBdXSkKfQpnY2Mt c3BlY3MtcmVscm8gKCkgCnsgCiAgICBsb2NhbCBkaXJlY3RpdmU7CiAgICBkaXJlY3RpdmU9JChn Y2Mtc3BlY3MtZGlyZWN0aXZlIGxpbmtfY29tbWFuZCk7CiAgICByZXR1cm4gJChbWyAiJHtkaXJl Y3RpdmUvXHshbm9yZWxybzp9IiAhPSAiJHtkaXJlY3RpdmV9IiBdXSkKfQpnY2Mtc3BlY3Mtc3Nw ICgpIAp7IAogICAgbG9jYWwgZGlyZWN0aXZlOwogICAgZGlyZWN0aXZlPSQoZ2NjLXNwZWNzLWRp cmVjdGl2ZSBjYzEpOwogICAgcmV0dXJuICQoW1sgIiR7ZGlyZWN0aXZlL1x7IWZuby1zdGFjay1w cm90ZWN0b3I6fSIgIT0gIiR7ZGlyZWN0aXZlfSIgXV0pCn0KZ2NjLXNwZWNzLXNzcC10by1hbGwg KCkgCnsgCiAgICBsb2NhbCBkaXJlY3RpdmU7CiAgICBkaXJlY3RpdmU9JChnY2Mtc3BlY3MtZGly ZWN0aXZlIGNjMSk7CiAgICByZXR1cm4gJChbWyAiJHtkaXJlY3RpdmUvXHshZm5vLXN0YWNrLXBy b3RlY3Rvci1hbGw6fSIgIT0gIiR7ZGlyZWN0aXZlfSIgXV0pCn0KZ2NjLXZlcnNpb24gKCkgCnsg CiAgICBfZ2NjX2Z1bGx2ZXJzaW9uICckMS4kMicgIiRAIgp9Cmdlbl91c3JfbGRzY3JpcHQgKCkg CnsgCiAgICBsb2NhbCBsaWIgbGliZGlyPSQoZ2V0X2xpYmRpcikgb3V0cHV0X2Zvcm1hdD0iIiBh dXRvPWZhbHNlIHN1ZmZpeD0kKGdldF9saWJuYW1lKTsKICAgIFtbIC16ICR7RUQrc2V0fSBdXSAm JiBsb2NhbCBFRD0ke0QlL30ke0VQUkVGSVh9LzsKICAgIHRjLWlzLXN0YXRpYy1vbmx5ICYmIHJl dHVybjsKICAgIGRvZGlyIC91c3IvJHtsaWJkaXJ9OwogICAgaWYgW1sgJDEgPT0gIi1hIiBdXTsg dGhlbgogICAgICAgIGF1dG89dHJ1ZTsKICAgICAgICBzaGlmdDsKICAgICAgICBkb2RpciAvJHts aWJkaXJ9OwogICAgZmk7CiAgICBvdXRwdXRfZm9ybWF0PSQoJCh0Yy1nZXRDQykgJHtDRkxBR1N9 ICR7TERGTEFHU30gLVdsLC0tdmVyYm9zZSAyPiYxIHwgc2VkIC1uICdzL15PVVRQVVRfRk9STUFU KCJcKFteIl0qXCkiLC4qL1wxL3AnKTsKICAgIFtbIC1uICR7b3V0cHV0X2Zvcm1hdH0gXV0gJiYg b3V0cHV0X2Zvcm1hdD0iT1VUUFVUX0ZPUk1BVCAoICR7b3V0cHV0X2Zvcm1hdH0gKSI7CiAgICBm b3IgbGliIGluICIkQCI7CiAgICBkbwogICAgICAgIGxvY2FsIHRsaWI7CiAgICAgICAgaWYgJHth dXRvfTsgdGhlbgogICAgICAgICAgICBsaWI9ImxpYiR7bGlifSR7c3VmZml4fSI7CiAgICAgICAg ZWxzZQogICAgICAgICAgICBbWyAtciAke0VEfS8ke2xpYmRpcn0vJHtsaWJ9IF1dIHx8IGNvbnRp bnVlOwogICAgICAgIGZpOwogICAgICAgIGNhc2UgJHtDVEFSR0VUOi0ke0NIT1NUfX0gaW4gCiAg ICAgICAgICAgICotZGFyd2luKikKICAgICAgICAgICAgICAgIGlmICR7YXV0b307IHRoZW4KICAg ICAgICAgICAgICAgICAgICB0bGliPSQoc2Nhbm1hY2hvIC1xRiclUyNGJyAiJHtFRH0iL3Vzci8k e2xpYmRpcn0vJHtsaWJ9KTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg ICB0bGliPSQoc2Nhbm1hY2hvIC1xRiclUyNGJyAiJHtFRH0iLyR7bGliZGlyfS8ke2xpYn0pOwog ICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgICAgICBbWyAteiAke3RsaWJ9IF1dICYmIGRp ZSAidW5hYmxlIHRvIHJlYWQgaW5zdGFsbF9uYW1lIGZyb20gJHtsaWJ9IjsKICAgICAgICAgICAg ICAgIHRsaWI9JHt0bGliIyMqL307CiAgICAgICAgICAgICAgICBpZiAke2F1dG99OyB0aGVuCiAg ICAgICAgICAgICAgICAgICAgbXYgIiR7RUR9Ii91c3IvJHtsaWJkaXJ9LyR7bGliJSR7c3VmZml4 fX0uKiR7c3VmZml4Iy59ICIke0VEfSIvJHtsaWJkaXJ9LyB8fCBkaWU7CiAgICAgICAgICAgICAg ICAgICAgaWYgW1sgJHt0bGlifSAhPSAke2xpYiUke3N1ZmZpeH19Lioke3N1ZmZpeCMufSBdXTsg dGhlbgogICAgICAgICAgICAgICAgICAgICAgICBtdiAiJHtFRH0iL3Vzci8ke2xpYmRpcn0vJHt0 bGliJSR7c3VmZml4fX0uKiR7c3VmZml4Iy59ICIke0VEfSIvJHtsaWJkaXJ9LyB8fCBkaWU7CiAg ICAgICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgICAgICAgICAgcm0gLWYgIiR7RUR9Ii8k e2xpYmRpcn0vJHtsaWJ9OwogICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgICAgICBpZiBb WyAhIC13ICIke0VEfS8ke2xpYmRpcn0vJHt0bGlifSIgXV07IHRoZW4KICAgICAgICAgICAgICAg ICAgICBjaG1vZCB1K3cgIiR7RUR9JHtsaWJkaXJ9LyR7dGxpYn0iOwogICAgICAgICAgICAgICAg ICAgIGxvY2FsIG5vd3JpdGU9eWVzOwogICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgICAg ICBpbnN0YWxsX25hbWVfdG9vbCAtaWQgIiR7RVBSRUZJWH0iLyR7bGliZGlyfS8ke3RsaWJ9ICIk e0VEfSIvJHtsaWJkaXJ9LyR7dGxpYn0gfHwgZGllICJpbnN0YWxsX25hbWVfdG9vbCBmYWlsZWQi OwogICAgICAgICAgICAgICAgW1sgLW4gJHtub3dyaXRlfSBdXSAmJiBjaG1vZCB1LXcgIiR7RUR9 JHtsaWJkaXJ9LyR7dGxpYn0iOwogICAgICAgICAgICAgICAgcHVzaGQgIiR7RUR9L3Vzci8ke2xp YmRpcn0iID4gL2Rldi9udWxsOwogICAgICAgICAgICAgICAgbG4gLXNuZiAiLi4vLi4vJHtsaWJk aXJ9LyR7dGxpYn0iICIke2xpYn0iOwogICAgICAgICAgICAgICAgcG9wZCA+IC9kZXYvbnVsbAog ICAgICAgICAgICA7OwogICAgICAgICAgICAqLWFpeCogfCAqLWlyaXgqIHwgKjY0Ki1ocHV4KiB8 ICotaW50ZXJpeCogfCAqLXdpbm50KikKICAgICAgICAgICAgICAgIGlmICR7YXV0b307IHRoZW4K ICAgICAgICAgICAgICAgICAgICBtdiAiJHtFRH0iL3Vzci8ke2xpYmRpcn0vJHtsaWJ9KiAiJHtF RH0iLyR7bGliZGlyfS8gfHwgZGllOwogICAgICAgICAgICAgICAgICAgIHRsaWI9JChyZWFkbGlu ayAiJHtFRH0iLyR7bGliZGlyfS8ke2xpYn0pOwogICAgICAgICAgICAgICAgICAgIHRsaWI9JHt0 bGliIyMqL307CiAgICAgICAgICAgICAgICAgICAgaWYgW1sgLXogJHt0bGlifSBdXTsgdGhlbgog ICAgICAgICAgICAgICAgICAgICAgICB0bGliPSR7bGlifTsKICAgICAgICAgICAgICAgICAgICBl bHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHJtIC1mICIke0VEfSIvJHtsaWJkaXJ9LyR7bGli fTsKICAgICAgICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgICAgICAgICB0bGliPSR7bGlifTsKICAgICAgICAgICAgICAgIGZpOwogICAgICAgICAgICAg ICAgcHVzaGQgIiR7RUR9L3Vzci8ke2xpYmRpcn0iID4gL2Rldi9udWxsOwogICAgICAgICAgICAg ICAgbG4gLXNuZiAiLi4vLi4vJHtsaWJkaXJ9LyR7dGxpYn0iICIke2xpYn0iOwogICAgICAgICAg ICAgICAgcG9wZCA+IC9kZXYvbnVsbAogICAgICAgICAgICA7OwogICAgICAgICAgICBocHBhKi1o cHV4KikKICAgICAgICAgICAgICAgIGlmICR7YXV0b307IHRoZW4KICAgICAgICAgICAgICAgICAg ICB0bGliPSQoY2hhdHIgIiR7RUR9Ii91c3IvJHtsaWJkaXJ9LyR7bGlifSB8IHNlZCAtbiAnL2lu dGVybmFsIG5hbWU6L3tuO3MvXiAqLy87cDtxfScpOwogICAgICAgICAgICAgICAgICAgIFtbIC16 ICR7dGxpYn0gXV0gJiYgdGxpYj0ke2xpYn07CiAgICAgICAgICAgICAgICAgICAgdGxpYj0ke3Rs aWIjIyovfTsKICAgICAgICAgICAgICAgICAgICBtdiAiJHtFRH0iL3Vzci8ke2xpYmRpcn0vJHts aWJ9KiAiJHtFRH0iLyR7bGliZGlyfS8gfHwgZGllOwogICAgICAgICAgICAgICAgICAgIGlmIFtb ICR7dGxpYn0gIT0gJHtsaWJ9KiBdXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBtdiAi JHtFRH0iL3Vzci8ke2xpYmRpcn0vJHt0bGlifSogIiR7RUR9Ii8ke2xpYmRpcn0vIHx8IGRpZTsK ICAgICAgICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgICAgICAgICBbWyAke3RsaWJ9ICE9 ICR7bGlifSBdXSAmJiBybSAtZiAiJHtFRH0iLyR7bGliZGlyfS8ke2xpYn07CiAgICAgICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgdGxpYj0kKGNoYXRyICIke0VEfSIvJHtsaWJk aXJ9LyR7bGlifSB8IHNlZCAtbiAnL2ludGVybmFsIG5hbWU6L3tuO3MvXiAqLy87cDtxfScpOwog ICAgICAgICAgICAgICAgICAgIFtbIC16ICR7dGxpYn0gXV0gJiYgdGxpYj0ke2xpYn07CiAgICAg ICAgICAgICAgICAgICAgdGxpYj0ke3RsaWIjIyovfTsKICAgICAgICAgICAgICAgIGZpOwogICAg ICAgICAgICAgICAgcHVzaGQgIiR7RUR9Ii91c3IvJHtsaWJkaXJ9ID4gL2Rldi9udWxsOwogICAg ICAgICAgICAgICAgbG4gLXNuZiAiLi4vLi4vJHtsaWJkaXJ9LyR7dGxpYn0iICIke2xpYn0iOwog ICAgICAgICAgICAgICAgW1sgJHt0bGlifSAhPSAke2xpYn0gXV0gJiYgbG4gLXNuZiAiLi4vLi4v JHtsaWJkaXJ9LyR7dGxpYn0iICIke3RsaWJ9IjsKICAgICAgICAgICAgICAgIHBvcGQgPiAvZGV2 L251bGwKICAgICAgICAgICAgOzsKICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgIGlmICR7 YXV0b307IHRoZW4KICAgICAgICAgICAgICAgICAgICB0bGliPSQoc2NhbmVsZiAtcUYnJVMjRicg IiR7RUR9Ii91c3IvJHtsaWJkaXJ9LyR7bGlifSk7CiAgICAgICAgICAgICAgICAgICAgW1sgLXog JHt0bGlifSBdXSAmJiBkaWUgInVuYWJsZSB0byByZWFkIFNPTkFNRSBmcm9tICR7bGlifSI7CiAg ICAgICAgICAgICAgICAgICAgbXYgIiR7RUR9Ii91c3IvJHtsaWJkaXJ9LyR7bGlifSogIiR7RUR9 Ii8ke2xpYmRpcn0vIHx8IGRpZTsKICAgICAgICAgICAgICAgICAgICBpZiBbWyAke3RsaWJ9ICE9 ICR7bGlifSogXV07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgbXYgIiR7RUR9Ii91c3Iv JHtsaWJkaXJ9LyR7dGxpYn0qICIke0VEfSIvJHtsaWJkaXJ9LyB8fCBkaWU7CiAgICAgICAgICAg ICAgICAgICAgZmk7CiAgICAgICAgICAgICAgICAgICAgcm0gLWYgIiR7RUR9Ii8ke2xpYmRpcn0v JHtsaWJ9OwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHRsaWI9JHts aWJ9OwogICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgICAgICBjYXQgPiAiJHtFRH0vdXNy LyR7bGliZGlyfS8ke2xpYn0iICA8PC1FTkRfTERTQ1JJUFQKLyogR05VIGxkIHNjcmlwdAogICBT aW5jZSBHZW50b28gaGFzIGNyaXRpY2FsIGR5bmFtaWMgbGlicmFyaWVzIGluIC9saWIsIGFuZCB0 aGUgc3RhdGljIHZlcnNpb25zCiAgIGluIC91c3IvbGliLCB3ZSBuZWVkIHRvIGhhdmUgYSAiZmFr ZSIgZHluYW1pYyBsaWIgaW4gL3Vzci9saWIsIG90aGVyd2lzZSB3ZQogICBydW4gaW50byBsaW5r aW5nIHByb2JsZW1zLiAgVGhpcyAiZmFrZSIgZHluYW1pYyBsaWIgaXMgYSBsaW5rZXIgc2NyaXB0 IHRoYXQKICAgcmVkaXJlY3RzIHRoZSBsaW5rZXIgdG8gdGhlIHJlYWwgbGliLiAgQW5kIHllcywg dGhpcyB3b3JrcyBpbiB0aGUgY3Jvc3MtCiAgIGNvbXBpbGluZyBzY2VuYXJpbyBhcyB0aGUgc3lz cm9vdC1lZCBsaW5rZXIgd2lsbCBwcmVwZW5kIHRoZSByZWFsIHBhdGguCgogICBTZWUgYnVnIGh0 dHA6Ly9idWdzLmdlbnRvby5vcmcvNDQxMSBmb3IgbW9yZSBpbmZvLgogKi8KJHtvdXRwdXRfZm9y bWF0fQpHUk9VUCAoICR7RVBSRUZJWH0vJHtsaWJkaXJ9LyR7dGxpYn0gKQpFTkRfTERTQ1JJUFQK CiAgICAgICAgICAgIDs7CiAgICAgICAgZXNhYwogICAgICAgIGZwZXJtcyBhK3ggIi91c3IvJHts aWJkaXJ9LyR7bGlifSIgfHwgZGllICJjb3VsZCBub3QgY2hhbmdlIHBlcm1zIG9uICR7bGlifSI7 CiAgICBkb25lCn0KZ2V0X2FiaV9DRkxBR1MgKCkgCnsgCiAgICBnZXRfYWJpX3ZhciBDRkxBR1Mg IiRAIgp9CmdldF9hYmlfQ0hPU1QgKCkgCnsgCiAgICBnZXRfYWJpX3ZhciBDSE9TVCAiJEAiCn0K Z2V0X2FiaV9DVEFSR0VUICgpIAp7IAogICAgZ2V0X2FiaV92YXIgQ1RBUkdFVCAiJEAiCn0KZ2V0 X2FiaV9GQUtFX1RBUkdFVFMgKCkgCnsgCiAgICBnZXRfYWJpX3ZhciBGQUtFX1RBUkdFVFMgIiRA Igp9CmdldF9hYmlfTERGTEFHUyAoKSAKeyAKICAgIGdldF9hYmlfdmFyIExERkxBR1MgIiRAIgp9 CmdldF9hYmlfTElCRElSICgpIAp7IAogICAgZ2V0X2FiaV92YXIgTElCRElSICIkQCIKfQpnZXRf YWJpX3ZhciAoKSAKeyAKICAgIGxvY2FsIGZsYWc9JDE7CiAgICBsb2NhbCBhYmk9JHsyOi0ke0FC STotJHtERUZBVUxUX0FCSTotZGVmYXVsdH19fTsKICAgIGxvY2FsIHZhcj0iJHtmbGFnfV8ke2Fi aX0iOwogICAgZWNobyAkeyF2YXJ9Cn0KZ2V0X2FmdGVyX21ham9yX3ZlcnNpb24gKCkgCnsgCiAg ICBlY2hvICQoZ2V0X3ZlcnNpb25fY29tcG9uZW50X3JhbmdlIDItICIkezE6LSR7UFZ9fSIpCn0K Z2V0X2FsbF9hYmlzICgpIAp7IAogICAgbG9jYWwgb3JkZXI9IiI7CiAgICBpZiBbWyAteiAke01V TFRJTElCX0FCSVN9IF1dOyB0aGVuCiAgICAgICAgZWNobyAiZGVmYXVsdCI7CiAgICAgICAgcmV0 dXJuIDA7CiAgICBmaTsKICAgIGZvciB4IGluICR7TVVMVElMSUJfQUJJU307CiAgICBkbwogICAg ICAgIGlmIFtbICR7eH0gIT0gJHtERUZBVUxUX0FCSX0gXV07IHRoZW4KICAgICAgICAgICAgb3Jk ZXI9IiR7b3JkZXI6KyR7b3JkZXJ9IH0ke3h9IjsKICAgICAgICBmaTsKICAgIGRvbmU7CiAgICBv cmRlcj0iJHtvcmRlcjorJHtvcmRlcn0gfSR7REVGQVVMVF9BQkl9IjsKICAgIGVjaG8gJHtvcmRl cn07CiAgICByZXR1cm4gMAp9CmdldF9hbGxfbGliZGlycyAoKSAKeyAKICAgIGxvY2FsIGxpYmRp cnM7CiAgICBsb2NhbCBhYmk7CiAgICBsb2NhbCBkaXI7CiAgICBmb3IgYWJpIGluICR7TVVMVElM SUJfQUJJU307CiAgICBkbwogICAgICAgIGxpYmRpcnMrPSIgJChnZXRfYWJpX0xJQkRJUiAke2Fi aX0pIjsKICAgIGRvbmU7CiAgICBbWyAiICR7bGliZGlyc30gIiAhPSAqIiBsaWIgIiogXV0gJiYg bGliZGlycys9IiBsaWIiOwogICAgZWNobyAiJHtsaWJkaXJzfSIKfQpnZXRfYWxsX3ZlcnNpb25f Y29tcG9uZW50cyAoKSAKeyAKICAgIGVzaG9wdHNfcHVzaCAtcyBleHRnbG9iOwogICAgbG9jYWwg dmVyX3N0cj0kezE6LSR7UFZ9fSByZXN1bHQ7CiAgICByZXN1bHQ9KCk7CiAgICBpZiBbWyAke1ZF UlNJT05BVE9SX0NBQ0hFX1ZFUl9TVFJ9ID09ICR7dmVyX3N0cn0gXV07IHRoZW4KICAgICAgICBl Y2hvICR7VkVSU0lPTkFUT1JfQ0FDSEVfUkVTVUxUfTsKICAgICAgICBlc2hvcHRzX3BvcDsKICAg ICAgICByZXR1cm47CiAgICBmaTsKICAgIGV4cG9ydCBWRVJTSU9OQVRPUl9DQUNIRV9WRVJfU1RS PSR7dmVyX3N0cn07CiAgICB3aGlsZSBbWyAtbiAkdmVyX3N0ciBdXTsgZG8KICAgICAgICBjYXNl ICIke3Zlcl9zdHI6OjF9IiBpbiAKICAgICAgICAgICAgW1s6ZGlnaXQ6XV0pCiAgICAgICAgICAg ICAgICByZXN1bHQrPSgiJHt2ZXJfc3RyJSVbXls6ZGlnaXQ6XV0qfSIpOwogICAgICAgICAgICAg ICAgdmVyX3N0cj0ke3Zlcl9zdHIjIysoW1s6ZGlnaXQ6XV0pfQogICAgICAgICAgICA7OwogICAg ICAgICAgICBbLV8uXSkKICAgICAgICAgICAgICAgIHJlc3VsdCs9KCIke3Zlcl9zdHI6OjF9Iik7 CiAgICAgICAgICAgICAgICB2ZXJfc3RyPSR7dmVyX3N0cjoxfQogICAgICAgICAgICA7OwogICAg ICAgICAgICBbWzphbHBoYTpdXSkKICAgICAgICAgICAgICAgIGxvY2FsIG5vdF9tYXRjaD0ke3Zl cl9zdHIjIysoW1s6YWxwaGE6XV0pKihbWzpkaWdpdDpdXSl9OwogICAgICAgICAgICAgICAgcmVz dWx0Kz0oIiR7dmVyX3N0cjo6JHsjdmVyX3N0cn0gLSAkeyNub3RfbWF0Y2h9fSIpOwogICAgICAg ICAgICAgICAgdmVyX3N0cj0ke25vdF9tYXRjaH0KICAgICAgICAgICAgOzsKICAgICAgICAgICAg KikKICAgICAgICAgICAgICAgIHJlc3VsdCs9KCIke3Zlcl9zdHI6OjF9Iik7CiAgICAgICAgICAg ICAgICB2ZXJfc3RyPSR7dmVyX3N0cjoxfQogICAgICAgICAgICA7OwogICAgICAgIGVzYWM7CiAg ICBkb25lOwogICAgZXhwb3J0IFZFUlNJT05BVE9SX0NBQ0hFX1JFU1VMVD0ke3Jlc3VsdFsqXX07 CiAgICBlY2hvICR7cmVzdWx0W0BdfTsKICAgIGVzaG9wdHNfcG9wCn0KZ2V0X2JtYWtlICgpIAp7 IAogICAgaWYgW1sgJHtVU0VSTEFORH0gPT0gKkJTRCBdXTsgdGhlbgogICAgICAgIGVjaG8gbWFr ZTsKICAgIGVsc2UKICAgICAgICBpZiBbWyAke1VTRVJMQU5EfSA9PSAiRGFyd2luIiBdXTsgdGhl bgogICAgICAgICAgICBlY2hvIGJzZG1ha2U7CiAgICAgICAgZWxzZQogICAgICAgICAgICBlY2hv IHBtYWtlOwogICAgICAgIGZpOwogICAgZmkKfQpnZXRfaW5zdGFsbF9hYmlzICgpIAp7IAogICAg bG9jYWwgb3JkZXI9IiI7CiAgICBpZiBbWyAteiAke01VTFRJTElCX0FCSVN9IF1dOyB0aGVuCiAg ICAgICAgZWNobyAiZGVmYXVsdCI7CiAgICAgICAgcmV0dXJuIDA7CiAgICBmaTsKICAgIGlmIFtb ICR7RU1VTFRJTElCX1BLR30gPT0gInRydWUiIF1dOyB0aGVuCiAgICAgICAgZm9yIHggaW4gJHtN VUxUSUxJQl9BQklTfTsKICAgICAgICBkbwogICAgICAgICAgICBpZiBbWyAke3h9ICE9ICIke0RF RkFVTFRfQUJJfSIgXV07IHRoZW4KICAgICAgICAgICAgICAgIGhhcyAke3h9ICR7QUJJX0RFTll9 IHx8IG9yZGVyPSIke29yZGVyfSAke3h9IjsKICAgICAgICAgICAgZmk7CiAgICAgICAgZG9uZTsK ICAgICAgICBoYXMgJHtERUZBVUxUX0FCSX0gJHtBQklfREVOWX0gfHwgb3JkZXI9IiR7b3JkZXJ9 ICR7REVGQVVMVF9BQkl9IjsKICAgICAgICBpZiBbWyAtbiAke0FCSV9BTExPV30gXV07IHRoZW4K ICAgICAgICAgICAgbG9jYWwgb3JkZXJhPSIiOwogICAgICAgICAgICBmb3IgeCBpbiAke29yZGVy fTsKICAgICAgICAgICAgZG8KICAgICAgICAgICAgICAgIGlmIGhhcyAke3h9ICR7QUJJX0FMTE9X fTsgdGhlbgogICAgICAgICAgICAgICAgICAgIG9yZGVyYT0iJHtvcmRlcmF9ICR7eH0iOwogICAg ICAgICAgICAgICAgZmk7CiAgICAgICAgICAgIGRvbmU7CiAgICAgICAgICAgIG9yZGVyPSR7b3Jk ZXJhfTsKICAgICAgICBmaTsKICAgIGVsc2UKICAgICAgICBvcmRlcj0ke0RFRkFVTFRfQUJJfTsK ICAgIGZpOwogICAgaWYgW1sgLXogJHtvcmRlcn0gXV07IHRoZW4KICAgICAgICBkaWUgIlRoZSBB QkkgbGlzdCBpcyBlbXB0eS4gIEFyZSB5b3UgdXNpbmcgYSBwcm9wZXIgbXVsdGlsaWIgcHJvZmls ZT8gIFBlcmhhcHMgeW91ciBVU0UgZmxhZ3Mgb3IgTVVMVElMSUJfQUJJUyBhcmUgdG9vIHJlc3Ry aWN0aXZlIGZvciB0aGlzIHBhY2thZ2UuIjsKICAgIGZpOwogICAgZWNobyAke29yZGVyfTsKICAg IHJldHVybiAwCn0KZ2V0X2xhc3RfdmVyc2lvbl9jb21wb25lbnRfaW5kZXggKCkgCnsgCiAgICBl Y2hvICQoKCQoZ2V0X3ZlcnNpb25fY29tcG9uZW50X2NvdW50ICIkezE6LSR7UFZ9fSIgKSAtIDEp KQp9CmdldF9saWJkaXIgKCkgCnsgCiAgICBsb2NhbCBDT05GX0xJQkRJUjsKICAgIGlmIFsgLW4g IiR7Q09ORl9MSUJESVJfT1ZFUlJJREV9IiBdOyB0aGVuCiAgICAgICAgZWNobyAke0NPTkZfTElC RElSX09WRVJSSURFfTsKICAgIGVsc2UKICAgICAgICBnZXRfYWJpX0xJQkRJUjsKICAgIGZpCn0K Z2V0X2xpYm5hbWUgKCkgCnsgCiAgICBsb2NhbCBsaWJuYW1lOwogICAgbG9jYWwgdmVyPSQxOwog ICAgY2FzZSAke0NIT1NUfSBpbiAKICAgICAgICAqLWN5Z3dpbiB8IG1pbmd3KiB8ICotbWluZ3cq KQogICAgICAgICAgICBsaWJuYW1lPSJkbGwiCiAgICAgICAgOzsKICAgICAgICAqLWRhcndpbiop CiAgICAgICAgICAgIGxpYm5hbWU9ImR5bGliIgogICAgICAgIDs7CiAgICAgICAgKi1taW50KikK ICAgICAgICAgICAgbGlibmFtZT0iaXJyZWxldmFudCIKICAgICAgICA7OwogICAgICAgIGhwcGEq LWhwdXgqKQogICAgICAgICAgICBsaWJuYW1lPSJzbCIKICAgICAgICA7OwogICAgICAgICopCiAg ICAgICAgICAgIGxpYm5hbWU9InNvIgogICAgICAgIDs7CiAgICBlc2FjOwogICAgaWYgW1sgLXog JCogXV07IHRoZW4KICAgICAgICBlY2hvICIuJHtsaWJuYW1lfSI7CiAgICBlbHNlCiAgICAgICAg Zm9yIHZlciBpbiAiJEAiOwogICAgICAgIGRvCiAgICAgICAgICAgIGNhc2UgJHtDSE9TVH0gaW4g CiAgICAgICAgICAgICAgICAqLWRhcndpbiopCiAgICAgICAgICAgICAgICAgICAgZWNobyAiLiR7 dmVyfS4ke2xpYm5hbWV9IgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICotbWlu dCopCiAgICAgICAgICAgICAgICAgICAgZWNobyAiLiR7bGlibmFtZX0iCiAgICAgICAgICAgICAg ICA7OwogICAgICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgICAgICBlY2hvICIuJHtsaWJu YW1lfS4ke3Zlcn0iCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICBlc2FjOwogICAgICAg IGRvbmU7CiAgICBmaQp9CmdldF9tYWpvcl92ZXJzaW9uICgpIAp7IAogICAgbG9jYWwgYz0oJChn ZXRfYWxsX3ZlcnNpb25fY29tcG9uZW50cyAiJHsxOi0ke1BWfX0iKSk7CiAgICBlY2hvICR7Y1sw XX0KfQpnZXRfbW9kbmFtZSAoKSAKeyAKICAgIGxvY2FsIG1vZG5hbWU7CiAgICBsb2NhbCB2ZXI9 JDE7CiAgICBjYXNlICR7Q0hPU1R9IGluIAogICAgICAgICotZGFyd2luKikKICAgICAgICAgICAg bW9kbmFtZT0iYnVuZGxlIgogICAgICAgIDs7CiAgICAgICAgKikKICAgICAgICAgICAgbW9kbmFt ZT0ic28iCiAgICAgICAgOzsKICAgIGVzYWM7CiAgICBlY2hvICIuJHttb2RuYW1lfSIKfQpnZXRf bW91bnRzICgpIAp7IAogICAgbG9jYWwgcG9pbnQ9IG5vZGU9IGZzPSBvcHRzPSBmb289OwogICAg aWYgW1sgJCh1bmFtZSAtcykgPT0gIkxpbnV4IiBdXTsgdGhlbgogICAgICAgIHdoaWxlIHJlYWQg bm9kZSBwb2ludCBmcyBvcHRzIGZvbzsgZG8KICAgICAgICAgICAgZWNobyAiJHtwb2ludH0gJHtu b2RlfSAke2ZzfSAke29wdHN9IjsKICAgICAgICBkb25lIDwgL3Byb2MvbW91bnRzOwogICAgICAg IHJldHVybjsKICAgIGZpOwogICAgbG9jYWwgSUZTPScJJzsKICAgIExDX0FMTD1DIG1vdW50IC1w IHwgd2hpbGUgcmVhZCBub2RlIHBvaW50IGZzIGZvbzsgZG8KICAgICAgICBvcHRzPSR7ZnMjKiB9 OwogICAgICAgIGZzPSR7ZnMlJSAqfTsKICAgICAgICBlY2hvICIke3BvaW50Ly8gL1wwNDB9ICR7 bm9kZS8vIC9cMDQwfSAke2ZzJSUgKn0gJHtvcHRzLy8gL1wwNDB9IjsKICAgIGRvbmUKfQpnZXRf dmVyc2lvbl9jb21wb25lbnRfY291bnQgKCkgCnsgCiAgICBsb2NhbCBhPSgkKGdldF92ZXJzaW9u X2NvbXBvbmVudHMgIiR7MTotJHtQVn19IikpOwogICAgZWNobyAkeyNhW0BdfQp9CmdldF92ZXJz aW9uX2NvbXBvbmVudF9yYW5nZSAoKSAKeyAKICAgIGVzaG9wdHNfcHVzaCAtcyBleHRnbG9iOwog ICAgbG9jYWwgYyB2PSIkezI6LSR7UFZ9fSIgcmFuZ2U9IiR7MX0iIHJhbmdlX3N0YXJ0IHJhbmdl X2VuZDsKICAgIGxvY2FsIC1pIGk9LTEgaj0wOwogICAgYz0oJChnZXRfYWxsX3ZlcnNpb25fY29t cG9uZW50cyAiJHt2fSIpKTsKICAgIHJhbmdlX3N0YXJ0PSR7cmFuZ2UlLSp9OwogICAgcmFuZ2Vf c3RhcnQ9JHtyYW5nZV9zdGFydDotMX07CiAgICByYW5nZV9lbmQ9JHtyYW5nZSMqLX07CiAgICBy YW5nZV9lbmQ9JHtyYW5nZV9lbmQ6LSR7I2NbQF19fTsKICAgIHdoaWxlICgoaiA8IHJhbmdlX3N0 YXJ0KSk7IGRvCiAgICAgICAgaSs9MTsKICAgICAgICAoKGkgPiAkeyNjW0BdfSkpICYmIGVzaG9w dHNfcG9wICYmIHJldHVybjsKICAgICAgICBbWyAtbiAiJHtjW2ldLy9bLS5fXX0iIF1dICYmIGor PTE7CiAgICBkb25lOwogICAgd2hpbGUgKChqIDw9IHJhbmdlX2VuZCkpOyBkbwogICAgICAgIGVj aG8gLW4gJHtjW2ldfTsKICAgICAgICAoKGkgPiAkeyNjW0BdfSkpICYmIGVzaG9wdHNfcG9wICYm IHJldHVybjsKICAgICAgICBbWyAtbiAiJHtjW2ldLy9bLS5fXX0iIF1dICYmIGorPTE7CiAgICAg ICAgaSs9MTsKICAgIGRvbmU7CiAgICBlc2hvcHRzX3BvcAp9CmdldF92ZXJzaW9uX2NvbXBvbmVu dHMgKCkgCnsgCiAgICBsb2NhbCBjPSQoZ2V0X2FsbF92ZXJzaW9uX2NvbXBvbmVudHMgIiR7MTot JHtQVn19Iik7CiAgICBlY2hvICR7Yy8vWy0uX10vIH0KfQpnbm9tZTJfZW52aXJvbm1lbnRfcmVz ZXQgKCkgCnsgCiAgICBleHBvcnQgR19IT01FPSIke1R9IjsKICAgIGV4cG9ydCBHU1RfUkVHSVNU Ulk9IiR7VH0vcmVnaXN0cnkueG1sIjsKICAgIGV4cG9ydCBYREdfREFUQV9IT01FPSIke1R9Ly5s b2NhbC9zaGFyZSI7CiAgICBleHBvcnQgWERHX0NPTkZJR19IT01FPSIke1R9Ly5jb25maWciOwog ICAgZXhwb3J0IFhER19DQUNIRV9IT01FPSIke1R9Ly5jYWNoZSI7CiAgICBleHBvcnQgWERHX1JV TlRJTUVfRElSPSIke1R9L3J1biI7CiAgICBta2RpciAtcCAiJHtYREdfREFUQV9IT01FfSIgIiR7 WERHX0NPTkZJR19IT01FfSIgIiR7WERHX0NBQ0hFX0hPTUV9IiAiJHtYREdfUlVOVElNRV9ESVJ9 IjsKICAgIGNobW9kIDA3MDAgIiR7WERHX1JVTlRJTUVfRElSfSIKfQpnbm9tZTJfZ2NvbmZfaW5z dGFsbCAoKSAKeyAKICAgIGhhcyAke0VBUEk6LTB9IDAgMSAyICYmICEgdXNlIHByZWZpeCAmJiBF Uk9PVD0iJHtST09UfSI7CiAgICBsb2NhbCB1cGRhdGVyPSIke0VST09UfSR7R0NPTkZUT09MX0JJ Tn0iOwogICAgaWYgW1sgISAteCAiJHt1cGRhdGVyfSIgXV07IHRoZW4KICAgICAgICBkZWJ1Zy1w cmludCAiJHt1cGRhdGVyfSBpcyBub3QgZXhlY3V0YWJsZSI7CiAgICAgICAgcmV0dXJuOwogICAg Zmk7CiAgICBpZiBbWyAteiAiJHtHTk9NRTJfRUNMQVNTX1NDSEVNQVN9IiBdXTsgdGhlbgogICAg ICAgIGRlYnVnLXByaW50ICJObyBHTk9NRSAyIEdDb25mIHNjaGVtYXMgZm91bmQiOwogICAgICAg IHJldHVybjsKICAgIGZpOwogICAgdW5zZXQgR0NPTkZfRElTQUJMRV9NQUtFRklMRV9TQ0hFTUFf SU5TVEFMTDsKICAgIGV4cG9ydCBHQ09ORl9DT05GSUdfU09VUkNFPSIkKCIke3VwZGF0ZXJ9IiAt LWdldC1kZWZhdWx0LXNvdXJjZSB8IHNlZCAiczs6Lzs6JHtST09UfTsiKSI7CiAgICBlaW5mbyAi SW5zdGFsbGluZyBHTk9NRSAyIEdDb25mIHNjaGVtYXMiOwogICAgbG9jYWwgRjsKICAgIGZvciBG IGluICR7R05PTUUyX0VDTEFTU19TQ0hFTUFTfTsKICAgIGRvCiAgICAgICAgaWYgW1sgLWUgIiR7 RVJPT1R9JHtGfSIgXV07IHRoZW4KICAgICAgICAgICAgZGVidWctcHJpbnQgIkluc3RhbGxpbmcg c2NoZW1hOiAke0Z9IjsKICAgICAgICAgICAgIiR7dXBkYXRlcn0iIC0tbWFrZWZpbGUtaW5zdGFs bC1ydWxlICIke0VST09UfSR7Rn0iID4gL2Rldi9udWxsOwogICAgICAgIGZpOwogICAgZG9uZTsK ICAgIHBpZHM9JChwZ3JlcCAteCBnY29uZmQtMik7CiAgICBpZiBbWyAkPyA9PSAwIF1dOyB0aGVu CiAgICAgICAgZWJlZ2luICJSZWxvYWRpbmcgR0NvbmYgc2NoZW1hcyI7CiAgICAgICAga2lsbCAt SFVQICR7cGlkc307CiAgICAgICAgZWVuZCAkPzsKICAgIGZpCn0KZ25vbWUyX2djb25mX3NhdmVs aXN0ICgpIAp7IAogICAgaGFzICR7RUFQSTotMH0gMCAxIDIgJiYgISB1c2UgcHJlZml4ICYmIEVE PSIke0R9IjsKICAgIHB1c2hkICIke0VEfSIgJj4vZGV2L251bGw7CiAgICBleHBvcnQgR05PTUUy X0VDTEFTU19TQ0hFTUFTPSQoZmluZCAnZXRjL2djb25mL3NjaGVtYXMvJyAtbmFtZSAnKi5zY2hl bWFzJyAyPiAvZGV2L251bGwpOwogICAgcG9wZCAmPi9kZXYvbnVsbAp9Cmdub21lMl9nY29uZl91 bmluc3RhbGwgKCkgCnsgCiAgICBoYXMgJHtFQVBJOi0wfSAwIDEgMiAmJiAhIHVzZSBwcmVmaXgg JiYgRVJPT1Q9IiR7Uk9PVH0iOwogICAgbG9jYWwgdXBkYXRlcj0iJHtFUk9PVH0ke0dDT05GVE9P TF9CSU59IjsKICAgIGlmIFtbICEgLXggIiR7dXBkYXRlcn0iIF1dOyB0aGVuCiAgICAgICAgZGVi dWctcHJpbnQgIiR7dXBkYXRlcn0gaXMgbm90IGV4ZWN1dGFibGUiOwogICAgICAgIHJldHVybjsK ICAgIGZpOwogICAgaWYgW1sgLXogIiR7R05PTUUyX0VDTEFTU19TQ0hFTUFTfSIgXV07IHRoZW4K ICAgICAgICBkZWJ1Zy1wcmludCAiTm8gR05PTUUgMiBHQ29uZiBzY2hlbWFzIGZvdW5kIjsKICAg ICAgICByZXR1cm47CiAgICBmaTsKICAgIHVuc2V0IEdDT05GX0RJU0FCTEVfTUFLRUZJTEVfU0NI RU1BX0lOU1RBTEw7CiAgICBleHBvcnQgR0NPTkZfQ09ORklHX1NPVVJDRT0iJCgiJHt1cGRhdGVy fSIgLS1nZXQtZGVmYXVsdC1zb3VyY2UgfCBzZWQgInM7Oi87OiR7Uk9PVH07IikiOwogICAgZWlu Zm8gIlVuaW5zdGFsbGluZyBHTk9NRSAyIEdDb25mIHNjaGVtYXMiOwogICAgbG9jYWwgRjsKICAg IGZvciBGIGluICR7R05PTUUyX0VDTEFTU19TQ0hFTUFTfTsKICAgIGRvCiAgICAgICAgaWYgW1sg LWUgIiR7RVJPT1R9JHtGfSIgXV07IHRoZW4KICAgICAgICAgICAgZGVidWctcHJpbnQgIlVuaW5z dGFsbGluZyBnY29uZiBzY2hlbWE6ICR7Rn0iOwogICAgICAgICAgICAiJHt1cGRhdGVyfSIgLS1t YWtlZmlsZS11bmluc3RhbGwtcnVsZSAiJHtFUk9PVH0ke0Z9IiA+IC9kZXYvbnVsbDsKICAgICAg ICBmaTsKICAgIGRvbmU7CiAgICBwaWRzPSQocGdyZXAgLXggZ2NvbmZkLTIpOwogICAgaWYgW1sg JD8gPT0gMCBdXTsgdGhlbgogICAgICAgIGViZWdpbiAiUmVsb2FkaW5nIEdDb25mIHNjaGVtYXMi OwogICAgICAgIGtpbGwgLUhVUCAke3BpZHN9OwogICAgICAgIGVlbmQgJD87CiAgICBmaQp9Cmdu b21lMl9pY29uX2NhY2hlX3VwZGF0ZSAoKSAKeyAKICAgIGhhcyAke0VBUEk6LTB9IDAgMSAyICYm ICEgdXNlIHByZWZpeCAmJiBFUk9PVD0iJHtST09UfSI7CiAgICBsb2NhbCB1cGRhdGVyPSIke0VS T09UfSR7R1RLX1VQREFURV9JQ09OX0NBQ0hFfSI7CiAgICBpZiBbWyAhIC14ICIke3VwZGF0ZXJ9 IiBdXTsgdGhlbgogICAgICAgIGRlYnVnLXByaW50ICIke3VwZGF0ZXJ9IGlzIG5vdCBleGVjdXRh YmxlIjsKICAgICAgICByZXR1cm47CiAgICBmaTsKICAgIGlmIFtbIC16ICIke0dOT01FMl9FQ0xB U1NfSUNPTlN9IiBdXTsgdGhlbgogICAgICAgIGRlYnVnLXByaW50ICJObyBpY29uIGNhY2hlIHRv IHVwZGF0ZSI7CiAgICAgICAgcmV0dXJuOwogICAgZmk7CiAgICBlYmVnaW4gIlVwZGF0aW5nIGlj b25zIGNhY2hlIjsKICAgIGxvY2FsIHJldHZhbD0wOwogICAgbG9jYWwgZmFpbHM9KCk7CiAgICBm b3IgZGlyIGluICR7R05PTUUyX0VDTEFTU19JQ09OU307CiAgICBkbwogICAgICAgIGlmIFtbIC1m ICIke0VST09UfSR7ZGlyfS9pbmRleC50aGVtZSIgXV07IHRoZW4KICAgICAgICAgICAgbG9jYWwg cnY9MDsKICAgICAgICAgICAgIiR7dXBkYXRlcn0iIC1xZiAiJHtFUk9PVH0ke2Rpcn0iOwogICAg ICAgICAgICBydj0kPzsKICAgICAgICAgICAgaWYgW1sgISAkcnYgLWVxIDAgXV07IHRoZW4KICAg ICAgICAgICAgICAgIGRlYnVnLXByaW50ICJVcGRhdGluZyBjYWNoZSBmYWlsZWQgb24gJHtFUk9P VH0ke2Rpcn0iOwogICAgICAgICAgICAgICAgZmFpbHNbJCgoICR7I2ZhaWxzW0BdfSArIDEgKSld PSIke0VST09UfSR7ZGlyfSI7CiAgICAgICAgICAgICAgICByZXR2YWw9MjsKICAgICAgICAgICAg Zmk7CiAgICAgICAgZmk7CiAgICBkb25lOwogICAgZWVuZCAke3JldHZhbH07CiAgICBmb3IgZiBp biAiJHtmYWlsc1tAXX0iOwogICAgZG8KICAgICAgICBlZXJyb3IgIkZhaWxlZCB0byB1cGRhdGUg Y2FjaGUgd2l0aCBpY29uICRmIjsKICAgIGRvbmUKfQpnbm9tZTJfaWNvbl9zYXZlbGlzdCAoKSAK eyAKICAgIGhhcyAke0VBUEk6LTB9IDAgMSAyICYmICEgdXNlIHByZWZpeCAmJiBFRD0iJHtEfSI7 CiAgICBwdXNoZCAiJHtFRH0iICY+L2Rldi9udWxsOwogICAgZXhwb3J0IEdOT01FMl9FQ0xBU1Nf SUNPTlM9JChmaW5kICd1c3Ivc2hhcmUvaWNvbnMnIC1tYXhkZXB0aCAxIC1taW5kZXB0aCAxIC10 eXBlIGQgMj4gL2Rldi9udWxsKTsKICAgIHBvcGQgJj4vZGV2L251bGwKfQpnbm9tZTJfb21mX2Zp eCAoKSAKeyAKICAgIGxvY2FsIG9tZl9tYWtlZmlsZXMgZmlsZW5hbWU7CiAgICBvbWZfbWFrZWZp bGVzPSIkQCI7CiAgICBpZiBbWyAtZiAke1N9L29tZi5tYWtlIF1dOyB0aGVuCiAgICAgICAgb21m X21ha2VmaWxlcz0iJHtvbWZfbWFrZWZpbGVzfSAke1N9L29tZi5tYWtlIjsKICAgIGZpOwogICAg Zm9yIGZpbGVuYW1lIGluICQoZmluZCAuLyAtbmFtZSAiTWFrZWZpbGUuaW4iIC1vIC1uYW1lICJN YWtlZmlsZS5hbSIgfHNvcnQpOwogICAgZG8KICAgICAgICBvbWZfbWFrZWZpbGVzPSIke29tZl9t YWtlZmlsZXN9ICR7ZmlsZW5hbWV9IjsKICAgIGRvbmU7CiAgICBlYmVnaW4gIkZpeGluZyBPTUYg TWFrZWZpbGVzIjsKICAgIGxvY2FsIHJldHZhbD0wOwogICAgbG9jYWwgZmFpbHM9KCk7CiAgICBm b3Igb21mIGluICR7b21mX21ha2VmaWxlc307CiAgICBkbwogICAgICAgIGxvY2FsIHJ2PTA7CiAg ICAgICAgc2VkIC1pIC1lICdzOnNjcm9sbGtlZXBlci11cGRhdGU6dHJ1ZTonICIke29tZn0iOwog ICAgICAgIHJldHZhbD0kPzsKICAgICAgICBpZiBbWyAhICRydiAtZXEgMCBdXTsgdGhlbgogICAg ICAgICAgICBkZWJ1Zy1wcmludCAidXBkYXRpbmcgb2YgJHtvbWZ9IGZhaWxlZCI7CiAgICAgICAg ICAgIGZhaWxzWyQoKCAkeyNmYWlsc1tAXX0gKyAxICkpXT0kb21mOwogICAgICAgICAgICByZXR2 YWw9MjsKICAgICAgICBmaTsKICAgIGRvbmU7CiAgICBlZW5kICRyZXR2YWw7CiAgICBmb3IgZiBp biAiJHtmYWlsc1tAXX0iOwogICAgZG8KICAgICAgICBlZXJyb3IgIkZhaWxlZCB0byB1cGRhdGUg T01GIE1ha2VmaWxlICRmIjsKICAgIGRvbmUKfQpnbm9tZTJfcGtnX3Bvc3RpbnN0ICgpIAp7IAog ICAgZ25vbWUyX2djb25mX2luc3RhbGw7CiAgICBmZG8tbWltZV9kZXNrdG9wX2RhdGFiYXNlX3Vw ZGF0ZTsKICAgIGZkby1taW1lX21pbWVfZGF0YWJhc2VfdXBkYXRlOwogICAgZ25vbWUyX2ljb25f Y2FjaGVfdXBkYXRlOwogICAgZ25vbWUyX3NjaGVtYXNfdXBkYXRlOwogICAgaWYgW1sgIiR7U0NS T0xMS0VFUEVSX1VQREFURX0iID0gIjEiIF1dOyB0aGVuCiAgICAgICAgZ25vbWUyX3Njcm9sbGtl ZXBlcl91cGRhdGU7CiAgICBmaQp9Cmdub21lMl9wa2dfcG9zdHJtICgpIAp7IAogICAgZmRvLW1p bWVfZGVza3RvcF9kYXRhYmFzZV91cGRhdGU7CiAgICBmZG8tbWltZV9taW1lX2RhdGFiYXNlX3Vw ZGF0ZTsKICAgIGdub21lMl9pY29uX2NhY2hlX3VwZGF0ZTsKICAgIGdub21lMl9zY2hlbWFzX3Vw ZGF0ZTsKICAgIGlmIFtbICIke1NDUk9MTEtFRVBFUl9VUERBVEV9IiA9ICIxIiBdXTsgdGhlbgog ICAgICAgIGdub21lMl9zY3JvbGxrZWVwZXJfdXBkYXRlOwogICAgZmkKfQpnbm9tZTJfcGtnX3By ZWluc3QgKCkgCnsgCiAgICBnbm9tZTJfZ2NvbmZfc2F2ZWxpc3Q7CiAgICBnbm9tZTJfaWNvbl9z YXZlbGlzdDsKICAgIGdub21lMl9zY2hlbWFzX3NhdmVsaXN0Cn0KZ25vbWUyX3NjaGVtYXNfc2F2 ZWxpc3QgKCkgCnsgCiAgICBoYXMgJHtFQVBJOi0wfSAwIDEgMiAmJiAhIHVzZSBwcmVmaXggJiYg RUQ9IiR7RH0iOwogICAgcHVzaGQgIiR7RUR9IiAmPi9kZXYvbnVsbDsKICAgIGV4cG9ydCBHTk9N RTJfRUNMQVNTX0dMSUJfU0NIRU1BUz0kKGZpbmQgJ3Vzci9zaGFyZS9nbGliLTIuMC9zY2hlbWFz JyAtbmFtZSAnKi5nc2NoZW1hLnhtbCcgMj4vZGV2L251bGwpOwogICAgcG9wZCAmPi9kZXYvbnVs bAp9Cmdub21lMl9zY2hlbWFzX3VwZGF0ZSAoKSAKeyAKICAgIGhhcyAke0VBUEk6LTB9IDAgMSAy ICYmICEgdXNlIHByZWZpeCAmJiBFUk9PVD0iJHtST09UfSI7CiAgICBsb2NhbCB1cGRhdGVyPSIk e0VST09UfSR7R0xJQl9DT01QSUxFX1NDSEVNQVN9IjsKICAgIGlmIFtbICEgLXggJHt1cGRhdGVy fSBdXTsgdGhlbgogICAgICAgIGRlYnVnLXByaW50ICIke3VwZGF0ZXJ9IGlzIG5vdCBleGVjdXRh YmxlIjsKICAgICAgICByZXR1cm47CiAgICBmaTsKICAgIGlmIFtbIC16ICR7R05PTUUyX0VDTEFT U19HTElCX1NDSEVNQVN9IF1dOyB0aGVuCiAgICAgICAgZGVidWctcHJpbnQgIk5vIEdTZXR0aW5n cyBzY2hlbWFzIHRvIHVwZGF0ZSI7CiAgICAgICAgcmV0dXJuOwogICAgZmk7CiAgICBlYmVnaW4g IlVwZGF0aW5nIEdTZXR0aW5ncyBzY2hlbWFzIjsKICAgICR7dXBkYXRlcn0gLS1hbGxvdy1hbnkt bmFtZSAiJEAiICIke0VST09UJS99L3Vzci9zaGFyZS9nbGliLTIuMC9zY2hlbWFzIiAmPi9kZXYv bnVsbDsKICAgIGVlbmQgJD8KfQpnbm9tZTJfc2Nyb2xsa2VlcGVyX3VwZGF0ZSAoKSAKeyAKICAg IGhhcyAke0VBUEk6LTB9IDAgMSAyICYmICEgdXNlIHByZWZpeCAmJiBFUk9PVD0iJHtST09UfSI7 CiAgICBpZiBbWyAteCAiJHtFUk9PVH0ke1NDUk9MTEtFRVBFUl9VUERBVEVfQklOfSIgXV07IHRo ZW4KICAgICAgICBlaW5mbyAiVXBkYXRpbmcgc2Nyb2xsa2VlcGVyIGRhdGFiYXNlIC4uLiI7CiAg ICAgICAgIiR7RVJPT1R9JHtTQ1JPTExLRUVQRVJfVVBEQVRFX0JJTn0iIC1xIC1wICIke0VST09U fSR7U0NST0xMS0VFUEVSX0RJUn0iOwogICAgZmkKfQpnbm9tZTJfc3JjX2NvbXBpbGUgKCkgCnsg CiAgICBoYXMgJHtFQVBJOi0wfSAwIDEgJiYgZ25vbWUyX3NyY19jb25maWd1cmUgIiRAIjsKICAg IGVtYWtlIHx8IGRpZSAiY29tcGlsZSBmYWlsdXJlIgp9Cmdub21lMl9zcmNfY29uZmlndXJlICgp IAp7IAogICAgaWYgW1sgJHtHQ09ORl9ERUJVR30gIT0gJ25vJyBdXTsgdGhlbgogICAgICAgIGlm IHVzZSBkZWJ1ZzsgdGhlbgogICAgICAgICAgICBHMkNPTkY9IiR7RzJDT05GfSAtLWVuYWJsZS1k ZWJ1Zz15ZXMiOwogICAgICAgIGZpOwogICAgZmk7CiAgICBpZiBoYXMgZG9jICR7SVVTRX07IHRo ZW4KICAgICAgICBHMkNPTkY9IiR7RzJDT05GfSAkKHVzZV9lbmFibGUgZG9jIGd0ay1kb2MpIjsK ICAgIGZpOwogICAgaWYgZ3JlcCAtcSAiXltbOnNwYWNlOl1dKkFNX01BSU5UQUlORVJfTU9ERShc W2VuYWJsZVxdKSIgY29uZmlndXJlLio7IHRoZW4KICAgICAgICBHMkNPTkY9IiR7RzJDT05GfSAt LWRpc2FibGUtbWFpbnRhaW5lci1tb2RlIjsKICAgIGZpOwogICAgYWRkd3JpdGUgIiQodW5zZXQg SE9NRTsgZWNobyB+KS8uZ25vbWUyIjsKICAgIGVjb25mICIkQCIgJHtHMkNPTkZ9Cn0KZ25vbWUy X3NyY19pbnN0YWxsICgpIAp7IAogICAgaGFzICR7RUFQSTotMH0gMCAxIDIgJiYgISB1c2UgcHJl Zml4ICYmIEVEPSIke0R9IjsKICAgIGxvY2FsIHNrX3RtcF9kaXI9Ii92YXIvbGliL3Njcm9sbGtl ZXBlciI7CiAgICBkb2RpciAiJHtza190bXBfZGlyfSIgfHwgZGllICJkb2RpciBmYWlsZWQiOwog ICAgZXhwb3J0IEdDT05GX0RJU0FCTEVfTUFLRUZJTEVfU0NIRU1BX0lOU1RBTEw9IjEiOwogICAg aWYgW1sgLXogIiR7VVNFX0VJTlNUQUxMfSIgfHwgIiR7VVNFX0VJTlNUQUxMfSIgPSAiMCIgXV07 IHRoZW4KICAgICAgICBkZWJ1Zy1wcmludCAiSW5zdGFsbGluZyB3aXRoICdtYWtlIGluc3RhbGwn IjsKICAgICAgICBlbWFrZSBERVNURElSPSIke0R9IiAic2Nyb2xsa2VlcGVyX2xvY2Fsc3RhdGVf ZGlyPSR7RUR9JHtza190bXBfZGlyfSAiICIkQCIgaW5zdGFsbCB8fCBkaWUgImluc3RhbGwgZmFp bGVkIjsKICAgIGVsc2UKICAgICAgICBkZWJ1Zy1wcmludCAiSW5zdGFsbGluZyB3aXRoICdlaW5z dGFsbCciOwogICAgICAgIGVpbnN0YWxsICJzY3JvbGxrZWVwZXJfbG9jYWxzdGF0ZV9kaXI9JHtF RH0ke3NrX3RtcF9kaXJ9ICIgIiRAIiB8fCBkaWUgImVpbnN0YWxsIGZhaWxlZCI7CiAgICBmaTsK ICAgIHVuc2V0IEdDT05GX0RJU0FCTEVfTUFLRUZJTEVfU0NIRU1BX0lOU1RBTEw7CiAgICBpZiBb WyAtbiAiJHtET0NTfSIgXV07IHRoZW4KICAgICAgICBkb2RvYyAke0RPQ1N9IHx8IGRpZSAiZG9k b2MgZmFpbGVkIjsKICAgIGZpOwogICAgaWYgW1sgLXogIiQoZmluZCAiJHtEfSIgLW5hbWUgJyou b21mJykiIF1dOyB0aGVuCiAgICAgICAgZXhwb3J0IFNDUk9MTEtFRVBFUl9VUERBVEU9IjAiOwog ICAgZmk7CiAgICBybSAtcmYgIiR7RUR9JHtza190bXBfZGlyfSI7CiAgICBybSAtZnIgIiR7RUR9 L3Vzci9zaGFyZS9hcHBsaWNhdGlvbnMvbWltZWluZm8uY2FjaGUiOwogICAgaWYgW1sgIiR7R05P TUUyX0xBX1BVTlR9IiAhPSAibm8iIF1dOyB0aGVuCiAgICAgICAgZWJlZ2luICJSZW1vdmluZyAu bGEgZmlsZXMiOwogICAgICAgIGlmICEgeyAKICAgICAgICAgICAgaGFzIHN0YXRpYy1saWJzICR7 SVVTRS8vK30gJiYgdXNlIHN0YXRpYy1saWJzCiAgICAgICAgfTsgdGhlbgogICAgICAgICAgICBm aW5kICIke0R9IiAtbmFtZSAnKi5sYScgLWV4ZWMgcm0gLWYge30gKyB8fCBkaWUgImxhIGZpbGUg cmVtb3ZhbCBmYWlsZWQiOwogICAgICAgIGZpOwogICAgICAgIGVlbmQ7CiAgICBmaQp9Cmdub21l Ml9zcmNfcHJlcGFyZSAoKSAKeyAKICAgIGdub21lMl9lbnZpcm9ubWVudF9yZXNldDsKICAgIGdu b21lMl9vbWZfZml4OwogICAgaWYgaGFzICR7RUFQSTotMH0gMCAxIDIgMzsgdGhlbgogICAgICAg IGVsaWJ0b29saXplICR7RUxUQ09ORn07CiAgICBlbHNlCiAgICAgICAgbm9uZmF0YWwgZWxpYnRv b2xpemUgJHtFTFRDT05GfTsKICAgIGZpCn0KZ25vbWUyX3NyY191bnBhY2sgKCkgCnsgCiAgICB1 bnBhY2sgJHtBfTsKICAgIGNkICIke1N9IjsKICAgIGhhcyAke0VBUEk6LTB9IDAgMSAmJiBnbm9t ZTJfc3JjX3ByZXBhcmUKfQpoYXNfbXVsdGlsaWJfcHJvZmlsZSAoKSAKeyAKICAgIFsgLW4gIiR7 TVVMVElMSUJfQUJJU30iIC1hICIke01VTFRJTElCX0FCSVN9IiAhPSAiJHtNVUxUSUxJQl9BQklT LyAvfSIgXQp9CmluX2l1c2UgKCkgCnsgCiAgICBkZWJ1Zy1wcmludC1mdW5jdGlvbiAke0ZVTkNO QU1FfSAiJHtAfSI7CiAgICBbWyAkeyN9IC1lcSAxIF1dIHx8IGRpZSAiSW52YWxpZCBhcmdzIHRv ICR7RlVOQ05BTUV9KCkiOwogICAgbG9jYWwgZmxhZz0kezF9OwogICAgbG9jYWwgbGl1c2U9KCR7 SVVTRX0pOwogICAgaGFzICIke2ZsYWd9IiAiJHtsaXVzZVtAXSNbKy1dfSIKfQppcy1sb2dpbi1k aXNhYmxlZCAoKSAKeyAKICAgIF9kZWFkX3BvcnRhYmlsaXR5X3VzZXJfZnVuY3MKfQppc19maW5h bF9hYmkgKCkgCnsgCiAgICBoYXNfbXVsdGlsaWJfcHJvZmlsZSB8fCByZXR1cm4gMDsKICAgIHNl dCAtLSAkKGdldF9pbnN0YWxsX2FiaXMpOwogICAgbG9jYWwgTEFTVF9BQkk9JCM7CiAgICBbWyAk eyFMQVNUX0FCSX0gPT0gJHtBQkl9IF1dCn0KbWFrZV9kZXNrdG9wX2VudHJ5ICgpIAp7IAogICAg W1sgLXogJDEgXV0gJiYgZGllICJtYWtlX2Rlc2t0b3BfZW50cnk6IFlvdSBtdXN0IHNwZWNpZnkg dGhlIGV4ZWN1dGFibGUiOwogICAgbG9jYWwgZXhlYz0kezF9OwogICAgbG9jYWwgbmFtZT0kezI6 LSR7UE59fTsKICAgIGxvY2FsIGljb249JHszOi0ke1BOfX07CiAgICBsb2NhbCB0eXBlPSR7NH07 CiAgICBsb2NhbCBmaWVsZHM9JHs1fTsKICAgIGlmIFtbIC16ICR7dHlwZX0gXV07IHRoZW4KICAg ICAgICBsb2NhbCBjYXRtYWo9JHtDQVRFR09SWSUlLSp9OwogICAgICAgIGxvY2FsIGNhdG1pbj0k e0NBVEVHT1JZIyMqLX07CiAgICAgICAgY2FzZSAke2NhdG1han0gaW4gCiAgICAgICAgICAgIGFw cCkKICAgICAgICAgICAgICAgIGNhc2UgJHtjYXRtaW59IGluIAogICAgICAgICAgICAgICAgICAg IGFjY2Vzc2liaWxpdHkpCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9QWNjZXNzaWJpbGl0 eQogICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgYWRtaW4pCiAgICAg ICAgICAgICAgICAgICAgICAgIHR5cGU9U3lzdGVtCiAgICAgICAgICAgICAgICAgICAgOzsKICAg ICAgICAgICAgICAgICAgICBhbnRpdmlydXMpCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9 U3lzdGVtCiAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICBhcmNoKQog ICAgICAgICAgICAgICAgICAgICAgICB0eXBlPUFyY2hpdmluZwogICAgICAgICAgICAgICAgICAg IDs7CiAgICAgICAgICAgICAgICAgICAgYmFja3VwKQogICAgICAgICAgICAgICAgICAgICAgICB0 eXBlPUFyY2hpdmluZwogICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAg Y2RyKQogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPURpc2NCdXJuaW5nCiAgICAgICAgICAg ICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICBkaWN0cykKICAgICAgICAgICAgICAgICAg ICAgICAgdHlwZT1EaWN0aW9uYXJ5CiAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAg ICAgICAgICBkb2MpCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9RG9jdW1lbnRhdGlvbgog ICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgZWRpdG9ycykKICAgICAg ICAgICAgICAgICAgICAgICAgdHlwZT1UZXh0RWRpdG9yCiAgICAgICAgICAgICAgICAgICAgOzsK ICAgICAgICAgICAgICAgICAgICBlbWFjcykKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1U ZXh0RWRpdG9yCiAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICBlbXVs YXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9RW11bGF0b3IKICAgICAgICAgICAg ICAgICAgICA7OwogICAgICAgICAgICAgICAgICAgIGxhcHRvcCkKICAgICAgICAgICAgICAgICAg ICAgICAgdHlwZT1IYXJkd2FyZVNldHRpbmdzCiAgICAgICAgICAgICAgICAgICAgOzsKICAgICAg ICAgICAgICAgICAgICBvZmZpY2UpCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9T2ZmaWNl CiAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICBwZGEpCiAgICAgICAg ICAgICAgICAgICAgICAgIHR5cGU9UERBCiAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAg ICAgICAgICAgICB2aW0pCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9VGV4dEVkaXRvcgog ICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgeGVtYWNzKQogICAgICAg ICAgICAgICAgICAgICAgICB0eXBlPVRleHRFZGl0b3IKICAgICAgICAgICAgICAgICAgICA7Owog ICAgICAgICAgICAgICAgZXNhYwogICAgICAgICAgICA7OwogICAgICAgICAgICBkZXYpCiAgICAg ICAgICAgICAgICB0eXBlPSJEZXZlbG9wbWVudCIKICAgICAgICAgICAgOzsKICAgICAgICAgICAg Z2FtZXMpCiAgICAgICAgICAgICAgICBjYXNlICR7Y2F0bWlufSBpbiAKICAgICAgICAgICAgICAg ICAgICBhY3Rpb24gfCBmcHMpCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9QWN0aW9uR2Ft ZQogICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgYXJjYWRlKQogICAg ICAgICAgICAgICAgICAgICAgICB0eXBlPUFyY2FkZUdhbWUKICAgICAgICAgICAgICAgICAgICA7 OwogICAgICAgICAgICAgICAgICAgIGJvYXJkKQogICAgICAgICAgICAgICAgICAgICAgICB0eXBl PUJvYXJkR2FtZQogICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgZW11 bGF0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPUVtdWxhdG9yCiAgICAgICAgICAg ICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICBraWRzKQogICAgICAgICAgICAgICAgICAg ICAgICB0eXBlPUtpZHNHYW1lCiAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAg ICAgICBwdXp6bGUpCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9TG9naWNHYW1lCiAgICAg ICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICByb2d1ZWxpa2UpCiAgICAgICAg ICAgICAgICAgICAgICAgIHR5cGU9Um9sZVBsYXlpbmcKICAgICAgICAgICAgICAgICAgICA7Owog ICAgICAgICAgICAgICAgICAgIHJwZykKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1Sb2xl UGxheWluZwogICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgc2ltdWxh dGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1TaW11bGF0aW9uCiAgICAgICAgICAg ICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICBzcG9ydHMpCiAgICAgICAgICAgICAgICAg ICAgICAgIHR5cGU9U3BvcnRzR2FtZQogICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAg ICAgICAgICAgc3RyYXRlZ3kpCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9U3RyYXRlZ3lH YW1lCiAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgIGVzYWM7CiAgICAgICAg ICAgICAgICB0eXBlPSJHYW1lOyR7dHlwZX0iCiAgICAgICAgICAgIDs7CiAgICAgICAgICAgIGdu b21lKQogICAgICAgICAgICAgICAgdHlwZT0iR25vbWU7R1RLIgogICAgICAgICAgICA7OwogICAg ICAgICAgICBrZGUpCiAgICAgICAgICAgICAgICB0eXBlPSJLREU7UXQiCiAgICAgICAgICAgIDs7 CiAgICAgICAgICAgIG1haWwpCiAgICAgICAgICAgICAgICB0eXBlPSJOZXR3b3JrO0VtYWlsIgog ICAgICAgICAgICA7OwogICAgICAgICAgICBtZWRpYSkKICAgICAgICAgICAgICAgIGNhc2UgJHtj YXRtaW59IGluIAogICAgICAgICAgICAgICAgICAgIGdmeCkKICAgICAgICAgICAgICAgICAgICAg ICAgdHlwZT1HcmFwaGljcwogICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAg ICAgKikKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAke2NhdG1pbn0gaW4gCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICByYWRpbykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0eXBlPVR1bmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgc291bmQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw ZT1BdWRpbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHR2KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9VFYKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 aWRlbykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVZpZGVvCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgICAgICAgICBlc2FjOwogICAg ICAgICAgICAgICAgICAgICAgICB0eXBlPSJBdWRpb1ZpZGVvOyR7dHlwZX0iCiAgICAgICAgICAg ICAgICAgICAgOzsKICAgICAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgOzsKICAgICAgICAg ICAgbmV0KQogICAgICAgICAgICAgICAgY2FzZSAke2NhdG1pbn0gaW4gCiAgICAgICAgICAgICAg ICAgICAgZGlhbHVwKQogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPURpYWx1cAogICAgICAg ICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgZnRwKQogICAgICAgICAgICAgICAg ICAgICAgICB0eXBlPUZpbGVUcmFuc2ZlcgogICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAg ICAgICAgICAgICAgaW0pCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9SW5zdGFudE1lc3Nh Z2luZwogICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgaXJjKQogICAg ICAgICAgICAgICAgICAgICAgICB0eXBlPUlSQ0NsaWVudAogICAgICAgICAgICAgICAgICAgIDs7 CiAgICAgICAgICAgICAgICAgICAgbWFpbCkKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1F bWFpbAogICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgbmV3cykKICAg ICAgICAgICAgICAgICAgICAgICAgdHlwZT1OZXdzCiAgICAgICAgICAgICAgICAgICAgOzsKICAg ICAgICAgICAgICAgICAgICBubnRwKQogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPU5ld3MK ICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgICAgIHAycCkKICAgICAgICAg ICAgICAgICAgICAgICAgdHlwZT1GaWxlVHJhbnNmZXIKICAgICAgICAgICAgICAgICAgICA7Owog ICAgICAgICAgICAgICAgICAgIHZvaXApCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9VGVs ZXBob255CiAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgIGVzYWM7CiAgICAg ICAgICAgICAgICB0eXBlPSJOZXR3b3JrOyR7dHlwZX0iCiAgICAgICAgICAgIDs7CiAgICAgICAg ICAgIHNjaSkKICAgICAgICAgICAgICAgIGNhc2UgJHtjYXRtaW59IGluIAogICAgICAgICAgICAg ICAgICAgIGFzdHJvKikKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1Bc3Ryb25vbXkKICAg ICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgICAgIGJpbyopCiAgICAgICAgICAg ICAgICAgICAgICAgIHR5cGU9QmlvbG9neQogICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAg ICAgICAgICAgICAgY2FsYyopCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Q2FsY3VsYXRv cgogICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgY2hlbSopCiAgICAg ICAgICAgICAgICAgICAgICAgIHR5cGU9Q2hlbWlzdHJ5CiAgICAgICAgICAgICAgICAgICAgOzsK ICAgICAgICAgICAgICAgICAgICBlbGVjKikKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1F bGVjdHJvbmljcwogICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgZ2Vv KikKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1HZW9sb2d5CiAgICAgICAgICAgICAgICAg ICAgOzsKICAgICAgICAgICAgICAgICAgICBtYXRoKikKICAgICAgICAgICAgICAgICAgICAgICAg dHlwZT1NYXRoCiAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICBwaHlz aWNzKQogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVBoeXNpY3MKICAgICAgICAgICAgICAg ICAgICA7OwogICAgICAgICAgICAgICAgICAgIHZpc3VhbCopCiAgICAgICAgICAgICAgICAgICAg ICAgIHR5cGU9RGF0YVZpc3VhbGl6YXRpb24KICAgICAgICAgICAgICAgICAgICA7OwogICAgICAg ICAgICAgICAgZXNhYzsKICAgICAgICAgICAgICAgIHR5cGU9IkVkdWNhdGlvbjtTY2llbmNlOyR7 dHlwZX0iCiAgICAgICAgICAgIDs7CiAgICAgICAgICAgIHN5cykKICAgICAgICAgICAgICAgIHR5 cGU9IlN5c3RlbSIKICAgICAgICAgICAgOzsKICAgICAgICAgICAgd3d3KQogICAgICAgICAgICAg ICAgY2FzZSAke2NhdG1pbn0gaW4gCiAgICAgICAgICAgICAgICAgICAgY2xpZW50KQogICAgICAg ICAgICAgICAgICAgICAgICB0eXBlPVdlYkJyb3dzZXIKICAgICAgICAgICAgICAgICAgICA7Owog ICAgICAgICAgICAgICAgZXNhYzsKICAgICAgICAgICAgICAgIHR5cGU9Ik5ldHdvcms7JHt0eXBl fSIKICAgICAgICAgICAgOzsKICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgIHR5cGU9CiAg ICAgICAgICAgIDs7CiAgICAgICAgZXNhYzsKICAgIGZpOwogICAgaWYgWyAiJHtTTE9UfSIgPT0g IjAiIF07IHRoZW4KICAgICAgICBsb2NhbCBkZXNrdG9wX25hbWU9IiR7UE59IjsKICAgIGVsc2UK ICAgICAgICBsb2NhbCBkZXNrdG9wX25hbWU9IiR7UE59LSR7U0xPVH0iOwogICAgZmk7CiAgICBs b2NhbCBkZXNrdG9wPSIke1R9LyQoZWNobyAke2V4ZWN9IHwgc2VkICdzOltbOnNwYWNlOl0vOl06 XzpnJyktJHtkZXNrdG9wX25hbWV9LmRlc2t0b3AiOwogICAgdHlwZT0ke3R5cGUlO30ke3R5cGU6 Kzt9OwogICAgZXNob3B0c19wdXNoIC1zIGV4dGdsb2I7CiAgICBpZiBbWyAtbiAke2ljb259ICYm ICR7aWNvbn0gIT0gLyogXV0gJiYgW1sgJHtpY29ufSA9PSAqLnhwbSB8fCAke2ljb259ID09ICou cG5nIHx8ICR7aWNvbn0gPT0gKi5zdmcgXV07IHRoZW4KICAgICAgICBld2FybiAiQXMgZGVzY3Jp YmVkIGluIHRoZSBJY29uIFRoZW1lIFNwZWNpZmljYXRpb24sIGljb24gZmlsZSBleHRlbnNpb25z IGFyZSBub3QiOwogICAgICAgIGV3YXJuICJhbGxvd2VkIGluIC5kZXNrdG9wIGZpbGVzIGlmIHRo ZSB2YWx1ZSBpcyBub3QgYW4gYWJzb2x1dGUgcGF0aC4iOwogICAgICAgIGljb249JHtpY29uJS5A KHhwbXxwbmd8c3ZnKX07CiAgICBmaTsKICAgIGVzaG9wdHNfcG9wOwogICAgY2F0ID4gIiR7ZGVz a3RvcH0iICA8PC1FT0YKW0Rlc2t0b3AgRW50cnldCk5hbWU9JHtuYW1lfQpUeXBlPUFwcGxpY2F0 aW9uCkNvbW1lbnQ9JHtERVNDUklQVElPTn0KRXhlYz0ke2V4ZWN9ClRyeUV4ZWM9JHtleGVjJSUg Kn0KSWNvbj0ke2ljb259CkNhdGVnb3JpZXM9JHt0eXBlfQpFT0YKCiAgICBpZiBbWyAke2ZpZWxk czotPX0gIT0gKj0qIF1dOyB0aGVuCiAgICAgICAgZXdhcm4gIm1ha2VfZGVza3RvcF9lbnRyeTog dXBkYXRlIHlvdXIgNXRoIGFyZyB0byByZWFkIFBhdGg9JHtmaWVsZHN9IjsKICAgICAgICBmaWVs ZHM9IlBhdGg9JHtmaWVsZHN9IjsKICAgIGZpOwogICAgW1sgLW4gJHtmaWVsZHN9IF1dICYmIHBy aW50ZiAnJWJcbicgIiR7ZmllbGRzfSIgPj4gIiR7ZGVza3RvcH0iOwogICAgKCBpbnNpbnRvIC91 c3Ivc2hhcmUvYXBwbGljYXRpb25zOwogICAgZG9pbnMgIiR7ZGVza3RvcH0iICkgfHwgZGllICJp bnN0YWxsaW5nIGRlc2t0b3AgZmlsZSBmYWlsZWQiCn0KbWFrZV9zZXNzaW9uX2Rlc2t0b3AgKCkg CnsgCiAgICBbWyAteiAkMSBdXSAmJiBlZXJyb3IgIiQwOiBZb3UgbXVzdCBzcGVjaWZ5IHRoZSB0 aXRsZSIgJiYgcmV0dXJuIDE7CiAgICBbWyAteiAkMiBdXSAmJiBlZXJyb3IgIiQwOiBZb3UgbXVz dCBzcGVjaWZ5IHRoZSBjb21tYW5kIiAmJiByZXR1cm4gMTsKICAgIGxvY2FsIHRpdGxlPSQxOwog ICAgbG9jYWwgY29tbWFuZD0kMjsKICAgIGxvY2FsIGRlc2t0b3A9JHtUfS8ke3dtOi0ke1BOfX0u ZGVza3RvcDsKICAgIHNoaWZ0IDI7CiAgICBjYXQgPiAiJHtkZXNrdG9wfSIgIDw8LUVPRgpbRGVz a3RvcCBFbnRyeV0KTmFtZT0ke3RpdGxlfQpDb21tZW50PVRoaXMgc2Vzc2lvbiBsb2dzIHlvdSBp bnRvICR7dGl0bGV9CkV4ZWM9JHtjb21tYW5kfSAkKgpUcnlFeGVjPSR7Y29tbWFuZH0KVHlwZT1Y U2Vzc2lvbgpFT0YKCiAgICAoIGluc2ludG8gL3Vzci9zaGFyZS94c2Vzc2lvbnM7CiAgICBkb2lu cyAiJHtkZXNrdG9wfSIgKQp9Cm1ha2Vfd3JhcHBlciAoKSAKeyAKICAgIGxvY2FsIHdyYXBwZXI9 JDEgYmluPSQyIGNoZGlyPSQzIGxpYmRpcj0kNCBwYXRoPSQ1OwogICAgbG9jYWwgdG1wd3JhcHBl cj0kKGVta3RlbXApOwogICAgY2F0ID4gIiR7dG1wd3JhcHBlcn0iICA8PEVPRgojIS9iaW4vc2gK Y2QgIiR7Y2hkaXI6LS59IgppZiBbIC1uICIke2xpYmRpcn0iIF0gOyB0aGVuCglpZiBbICJcJHtM RF9MSUJSQVJZX1BBVEgrc2V0fSIgPSAic2V0IiBdIDsgdGhlbgoJCWV4cG9ydCBMRF9MSUJSQVJZ X1BBVEg9Ilwke0xEX0xJQlJBUllfUEFUSH06JHtsaWJkaXJ9IgoJZWxzZQoJCWV4cG9ydCBMRF9M SUJSQVJZX1BBVEg9IiR7bGliZGlyfSIKCWZpCmZpCmV4ZWMgJHtiaW59ICJcJEAiCkVPRgoKICAg IGNobW9kIGdvK3J4ICIke3RtcHdyYXBwZXJ9IjsKICAgIGlmIFtbIC1uICR7cGF0aH0gXV07IHRo ZW4KICAgICAgICAoIGV4ZWludG8gIiR7cGF0aH0iOwogICAgICAgIG5ld2V4ZSAiJHt0bXB3cmFw cGVyfSIgIiR7d3JhcHBlcn0iICkgfHwgZGllOwogICAgZWxzZQogICAgICAgIG5ld2JpbiAiJHt0 bXB3cmFwcGVyfSIgIiR7d3JhcHBlcn0iIHx8IGRpZTsKICAgIGZpCn0KbXVsdGlsaWJfZW52ICgp IAp7IAogICAgbG9jYWwgQ1RBUkdFVD0kezE6LSR7Q1RBUkdFVH19OwogICAgY2FzZSAke0NUQVJH RVR9IGluIAogICAgICAgIHg4Nl82NCopCiAgICAgICAgICAgIGV4cG9ydCBDRkxBR1NfeDg2PSR7 Q0ZMQUdTX3g4Ni0tbTMyfTsKICAgICAgICAgICAgZXhwb3J0IENIT1NUX3g4Nj0ke0NUQVJHRVQv eDg2XzY0L2k2ODZ9OwogICAgICAgICAgICBleHBvcnQgQ1RBUkdFVF94ODY9JHtDSE9TVF94ODZ9 OwogICAgICAgICAgICBpZiBbWyAke1NZTUxJTktfTElCfSA9PSAieWVzIiBdXTsgdGhlbgogICAg ICAgICAgICAgICAgZXhwb3J0IExJQkRJUl94ODY9ImxpYjMyIjsKICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgICAgZXhwb3J0IExJQkRJUl94ODY9ImxpYiI7CiAgICAgICAgICAgIGZpOwog ICAgICAgICAgICBleHBvcnQgQ0ZMQUdTX2FtZDY0PSR7Q0ZMQUdTX2FtZDY0LS1tNjR9OwogICAg ICAgICAgICBleHBvcnQgQ0hPU1RfYW1kNjQ9JHtDVEFSR0VUfTsKICAgICAgICAgICAgZXhwb3J0 IENUQVJHRVRfYW1kNjQ9JHtDSE9TVF9hbWQ2NH07CiAgICAgICAgICAgIGV4cG9ydCBMSUJESVJf YW1kNjQ9ImxpYjY0IjsKICAgICAgICAgICAgZXhwb3J0IENGTEFHU194MzI9JHtDRkxBR1NfeDMy LS1teDMyfTsKICAgICAgICAgICAgZXhwb3J0IENIT1NUX3gzMj0ke0NUQVJHRVR9OwogICAgICAg ICAgICBleHBvcnQgQ1RBUkdFVF94MzI9JHtDSE9TVF94MzJ9OwogICAgICAgICAgICBleHBvcnQg TElCRElSX3gzMj0ibGlieDMyIjsKICAgICAgICAgICAgOiAke01VTFRJTElCX0FCSVM9YW1kNjQg eDg2fTsKICAgICAgICAgICAgOiAke0RFRkFVTFRfQUJJPWFtZDY0fQogICAgICAgIDs7CiAgICAg ICAgbWlwczY0KikKICAgICAgICAgICAgZXhwb3J0IENGTEFHU19vMzI9JHtDRkxBR1NfbzMyLS1t YWJpPTMyfTsKICAgICAgICAgICAgZXhwb3J0IENIT1NUX28zMj0ke0NUQVJHRVQvbWlwczY0L21p cHN9OwogICAgICAgICAgICBleHBvcnQgQ1RBUkdFVF9vMzI9JHtDSE9TVF9vMzJ9OwogICAgICAg ICAgICBleHBvcnQgTElCRElSX28zMj0ibGliIjsKICAgICAgICAgICAgZXhwb3J0IENGTEFHU19u MzI9JHtDRkxBR1NfbjMyLS1tYWJpPW4zMn07CiAgICAgICAgICAgIGV4cG9ydCBDSE9TVF9uMzI9 JHtDVEFSR0VUfTsKICAgICAgICAgICAgZXhwb3J0IENUQVJHRVRfbjMyPSR7Q0hPU1RfbjMyfTsK ICAgICAgICAgICAgZXhwb3J0IExJQkRJUl9uMzI9ImxpYjMyIjsKICAgICAgICAgICAgZXhwb3J0 IENGTEFHU19uNjQ9JHtDRkxBR1NfbjY0LS1tYWJpPTY0fTsKICAgICAgICAgICAgZXhwb3J0IENI T1NUX242ND0ke0NUQVJHRVR9OwogICAgICAgICAgICBleHBvcnQgQ1RBUkdFVF9uNjQ9JHtDSE9T VF9uNjR9OwogICAgICAgICAgICBleHBvcnQgTElCRElSX242ND0ibGliNjQiOwogICAgICAgICAg ICA6ICR7TVVMVElMSUJfQUJJUz1uNjQgbjMyIG8zMn07CiAgICAgICAgICAgIDogJHtERUZBVUxU X0FCST1uMzJ9CiAgICAgICAgOzsKICAgICAgICBwb3dlcnBjNjQqKQogICAgICAgICAgICBleHBv cnQgQ0ZMQUdTX3BwYz0ke0NGTEFHU19wcGMtLW0zMn07CiAgICAgICAgICAgIGV4cG9ydCBDSE9T VF9wcGM9JHtDVEFSR0VUL3Bvd2VycGM2NC9wb3dlcnBjfTsKICAgICAgICAgICAgZXhwb3J0IENU QVJHRVRfcHBjPSR7Q0hPU1RfcHBjfTsKICAgICAgICAgICAgZXhwb3J0IExJQkRJUl9wcGM9Imxp YiI7CiAgICAgICAgICAgIGV4cG9ydCBDRkxBR1NfcHBjNjQ9JHtDRkxBR1NfcHBjNjQtLW02NH07 CiAgICAgICAgICAgIGV4cG9ydCBDSE9TVF9wcGM2ND0ke0NUQVJHRVR9OwogICAgICAgICAgICBl eHBvcnQgQ1RBUkdFVF9wcGM2ND0ke0NIT1NUX3BwYzY0fTsKICAgICAgICAgICAgZXhwb3J0IExJ QkRJUl9wcGM2ND0ibGliNjQiOwogICAgICAgICAgICA6ICR7TVVMVElMSUJfQUJJUz1wcGM2NCBw cGN9OwogICAgICAgICAgICA6ICR7REVGQVVMVF9BQkk9cHBjNjR9CiAgICAgICAgOzsKICAgICAg ICBzMzkweCopCiAgICAgICAgICAgIGV4cG9ydCBDRkxBR1NfczM5MD0ke0NGTEFHU19zMzkwLS1t MzF9OwogICAgICAgICAgICBleHBvcnQgQ0hPU1RfczM5MD0ke0NUQVJHRVQvczM5MHgvczM5MH07 CiAgICAgICAgICAgIGV4cG9ydCBDVEFSR0VUX3MzOTA9JHtDSE9TVF9zMzkwfTsKICAgICAgICAg ICAgZXhwb3J0IExJQkRJUl9zMzkwPSJsaWIiOwogICAgICAgICAgICBleHBvcnQgQ0ZMQUdTX3Mz OTB4PSR7Q0ZMQUdTX3MzOTB4LS1tNjR9OwogICAgICAgICAgICBleHBvcnQgQ0hPU1RfczM5MHg9 JHtDVEFSR0VUfTsKICAgICAgICAgICAgZXhwb3J0IENUQVJHRVRfczM5MHg9JHtDSE9TVF9zMzkw eH07CiAgICAgICAgICAgIGV4cG9ydCBMSUJESVJfczM5MHg9ImxpYjY0IjsKICAgICAgICAgICAg OiAke01VTFRJTElCX0FCSVM9czM5MHggczM5MH07CiAgICAgICAgICAgIDogJHtERUZBVUxUX0FC ST1zMzkweH0KICAgICAgICA7OwogICAgICAgIHNwYXJjKikKICAgICAgICAgICAgZXhwb3J0IENG TEFHU19zcGFyYzMyPSR7Q0ZMQUdTX3NwYXJjMzItLW0zMn07CiAgICAgICAgICAgIGV4cG9ydCBD SE9TVF9zcGFyYzMyPSR7Q1RBUkdFVC9zcGFyYzY0L3NwYXJjfTsKICAgICAgICAgICAgZXhwb3J0 IENUQVJHRVRfc3BhcmMzMj0ke0NIT1NUX3NwYXJjMzJ9OwogICAgICAgICAgICBleHBvcnQgTElC RElSX3NwYXJjMzI9ImxpYiI7CiAgICAgICAgICAgIGV4cG9ydCBDRkxBR1Nfc3BhcmM2ND0ke0NG TEFHU19zcGFyYzY0LS1tNjR9OwogICAgICAgICAgICBleHBvcnQgQ0hPU1Rfc3BhcmM2ND0ke0NU QVJHRVR9OwogICAgICAgICAgICBleHBvcnQgQ1RBUkdFVF9zcGFyYzY0PSR7Q0hPU1Rfc3BhcmM2 NH07CiAgICAgICAgICAgIGV4cG9ydCBMSUJESVJfc3BhcmM2ND0ibGliNjQiOwogICAgICAgICAg ICA6ICR7TVVMVElMSUJfQUJJUz1zcGFyYzY0IHNwYXJjMzJ9OwogICAgICAgICAgICA6ICR7REVG QVVMVF9BQkk9c3BhcmM2NH0KICAgICAgICA7OwogICAgICAgICopCiAgICAgICAgICAgIDogJHtN VUxUSUxJQl9BQklTPWRlZmF1bHR9OwogICAgICAgICAgICA6ICR7REVGQVVMVF9BQkk9ZGVmYXVs dH0KICAgICAgICA7OwogICAgZXNhYzsKICAgIGV4cG9ydCBNVUxUSUxJQl9BQklTIERFRkFVTFRf QUJJCn0KbXVsdGlsaWJfdG9vbGNoYWluX3NldHVwICgpIAp7IAogICAgbG9jYWwgdiB2djsKICAg IGV4cG9ydCBBQkk9JDE7CiAgICBpZiBbWyAke19fREVGQVVMVF9BQklfU0FWRUR9ID09ICJ0cnVl IiBdXTsgdGhlbgogICAgICAgIGZvciB2IGluIENIT1NUIENCVUlMRCBBUyBDQyBDWFggTEQ7CiAg ICAgICAgZG8KICAgICAgICAgICAgdnY9Il9fYWJpX3NhdmVkXyR7dn0iOwogICAgICAgICAgICBl eHBvcnQgJHt2fT0iJHshdnZ9IjsKICAgICAgICAgICAgdW5zZXQgJHt2dn07CiAgICAgICAgZG9u ZTsKICAgICAgICB1bnNldCBfX0RFRkFVTFRfQUJJX1NBVkVEOwogICAgZmk7CiAgICBpZiBbWyAk e0FCSX0gIT0gJHtERUZBVUxUX0FCSX0gXV07IHRoZW4KICAgICAgICBmb3IgdiBpbiBDSE9TVCBD QlVJTEQgQVMgQ0MgQ1hYIExEOwogICAgICAgIGRvCiAgICAgICAgICAgIGV4cG9ydCBfX2FiaV9z YXZlZF8ke3Z9PSIkeyF2fSI7CiAgICAgICAgZG9uZTsKICAgICAgICBleHBvcnQgX19ERUZBVUxU X0FCSV9TQVZFRD0idHJ1ZSI7CiAgICAgICAgZXhwb3J0IENIT1NUPSQoZ2V0X2FiaV9DSE9TVCAk e0RFRkFVTFRfQUJJfSk7CiAgICAgICAgZXhwb3J0IENDPSIkKHRjLWdldENDKSAkKGdldF9hYmlf Q0ZMQUdTKSI7CiAgICAgICAgZXhwb3J0IENYWD0iJCh0Yy1nZXRDWFgpICQoZ2V0X2FiaV9DRkxB R1MpIjsKICAgICAgICBleHBvcnQgTEQ9IiQodGMtZ2V0TEQpICQoZ2V0X2FiaV9MREZMQUdTKSI7 CiAgICAgICAgZXhwb3J0IENIT1NUPSQoZ2V0X2FiaV9DSE9TVCAkMSk7CiAgICAgICAgZXhwb3J0 IENCVUlMRD0kKGdldF9hYmlfQ0hPU1QgJDEpOwogICAgZmkKfQpuZXdpY29uICgpIAp7IAogICAg KCBpbnNpbnRvIC91c3Ivc2hhcmUvcGl4bWFwczsKICAgIG5ld2lucyAiJEAiICkKfQpuZXdtZW51 ICgpIAp7IAogICAgKCBpbnNpbnRvIC91c3Ivc2hhcmUvYXBwbGljYXRpb25zOwogICAgbmV3aW5z ICIkQCIgKQp9Cm51bWJlcl9hYmlzICgpIAp7IAogICAgc2V0IC0tIGBnZXRfaW5zdGFsbF9hYmlz YDsKICAgIGVjaG8gJCMKfQpwYXRoX2V4aXN0cyAoKSAKeyAKICAgIGxvY2FsIG9wdD0kMTsKICAg IFtbICR7b3B0fSA9PSAtW2FvXSBdXSAmJiBzaGlmdCB8fCBvcHQ9Ii1hIjsKICAgIFtbICQjIC1l cSAwIF1dICYmIHJldHVybiAxOwogICAgbG9jYWwgcCByPTA7CiAgICBmb3IgcCBpbiAiJEAiOwog ICAgZG8KICAgICAgICBbWyAtZSAke3B9IF1dOwogICAgICAgIDogJCgoIHIgKz0gJD8gKSk7CiAg ICBkb25lOwogICAgY2FzZSAke29wdH0gaW4gCiAgICAgICAgLWEpCiAgICAgICAgICAgIHJldHVy biAkKCggciAhPSAwICkpCiAgICAgICAgOzsKICAgICAgICAtbykKICAgICAgICAgICAgcmV0dXJu ICQoKCByID09ICQjICkpCiAgICAgICAgOzsKICAgIGVzYWMKfQpwa2dfbm9mZXRjaCAoKSAKeyAK ICAgIF9lYXBpMF9wa2dfbm9mZXRjaCAiJEAiCn0KcGtnX3Bvc3RpbnN0ICgpIAp7IAogICAgdW5z ZXQgX19HTF9OT19EU09fRklOQUxJWkVSOwogICAgdG1wX2ZpbGU9JChta3RlbXAgLS1zdWZmaXg9 Z2RrX3BpeGJ1Zl9lYnVpbGQpOwogICAgZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzID4gIiR7dG1w X2ZpbGV9IjsKICAgIGlmIFsgIiR7P30iID0gIjAiIF07IHRoZW4KICAgICAgICBjYXQgIiR7dG1w X2ZpbGV9IiA+ICIke0VST09UfXVzci8kKGdldF9saWJkaXIpL2dkay1waXhidWYtMi4wLzIuMTAu MC9sb2FkZXJzLmNhY2hlIjsKICAgIGVsc2UKICAgICAgICBld2FybiAiQ2Fubm90IHVwZGF0ZSBs b2FkZXJzLmNhY2hlLCBnZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMgZmFpbGVkIHRvIHJ1biI7CiAg ICBmaTsKICAgIHJtICIke3RtcF9maWxlfSIKfQpwa2dfcG9zdHJtICgpIAp7IAogICAgdW5zZXQg X19HTF9OT19EU09fRklOQUxJWkVSOwogICAgdG1wX2ZpbGU9JChta3RlbXAgLS1zdWZmaXg9Z2Rr X3BpeGJ1Zl9lYnVpbGQpOwogICAgZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzID4gIiR7dG1wX2Zp bGV9IjsKICAgIGlmIFsgIiR7P30iID0gIjAiIF07IHRoZW4KICAgICAgICBjYXQgIiR7dG1wX2Zp bGV9IiA+ICIke0VST09UfXVzci8kKGdldF9saWJkaXIpL2dkay1waXhidWYtMi4wLzIuMTAuMC9s b2FkZXJzLmNhY2hlIjsKICAgIGVsc2UKICAgICAgICBld2FybiAiQ2Fubm90IHVwZGF0ZSBsb2Fk ZXJzLmNhY2hlLCBnZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMgZmFpbGVkIHRvIHJ1biI7CiAgICBm aTsKICAgIHJtICIke3RtcF9maWxlfSIKfQpwa2dfcHJlaW5zdCAoKSAKeyAKICAgIGdub21lMl9w a2dfcHJlaW5zdCAiJEAiCn0KcGtnX3NldHVwICgpIAp7IAogICAgRzJDT05GPSIke0cyQ09ORn0K CQktLWRpc2FibGUtc3RhdGljCgkJJCh1c2VfZW5hYmxlIHRvb2xzKQoJCSQodXNlX2VuYWJsZSBn dGsgZ3RrLXRoZW1lKQoJCSQodXNlX2VuYWJsZSBpbnRyb3NwZWN0aW9uKQoJCS0td2l0aC1jcm9j bwoJCS0tZW5hYmxlLXBpeGJ1Zi1sb2FkZXIiOwogICAgdXNlIGd0ayAmJiAhIHVzZSBndGszICYm IEcyQ09ORis9IiAtLXdpdGgtZ3RrPTIuMCI7CiAgICB1c2UgZ3RrICYmIHVzZSBndGszICYmIEcy Q09ORis9IiAtLXdpdGgtZ3RrPWJvdGgiOwogICAgISB1c2UgZ3RrICYmIHVzZSBndGszICYmIEcy Q09ORis9IiAtLXdpdGgtZ3RrPTMuMCAtLWVuYWJsZS1ndGstdGhlbWUiOwogICAgRE9DUz0iQVVU SE9SUyBDaGFuZ2VMb2cgUkVBRE1FIE5FV1MgVE9ETyI7CiAgICBweXRob25fc2V0X2FjdGl2ZV92 ZXJzaW9uIDI7CiAgICBweXRob25fcGtnX3NldHVwCn0KcHJlc2VydmVfb2xkX2xpYiAoKSAKeyAK ICAgIGlmIFtbICR7RUJVSUxEX1BIQVNFfSAhPSAicHJlaW5zdCIgXV07IHRoZW4KICAgICAgICBl ZXJyb3IgInByZXNlcnZlX29sZF9saWIoKSBtdXN0IGJlIGNhbGxlZCBmcm9tIHBrZ19wcmVpbnN0 KCkgb25seSI7CiAgICAgICAgZGllICJJbnZhbGlkIHByZXNlcnZlX29sZF9saWIoKSB1c2FnZSI7 CiAgICBmaTsKICAgIFtbIC16ICQxIF1dICYmIGRpZSAiVXNhZ2U6IHByZXNlcnZlX29sZF9saWIg PGxpYnJhcnkgdG8gcHJlc2VydmU+IFttb3JlIGxpYnJhcmllcyB0byBwcmVzZXJ2ZV0iOwogICAg aGFzIHByZXNlcnZlLWxpYnMgJHtGRUFUVVJFU30gJiYgcmV0dXJuIDA7CiAgICBsb2NhbCBsaWIg ZGlyOwogICAgZm9yIGxpYiBpbiAiJEAiOwogICAgZG8KICAgICAgICBbWyAtZSAke1JPT1R9LyR7 bGlifSBdXSB8fCBjb250aW51ZTsKICAgICAgICBkaXI9JHtsaWIlLyp9OwogICAgICAgIGRvZGly ICR7ZGlyfSB8fCBkaWUgImRvZGlyICR7ZGlyfSBmYWlsZWQiOwogICAgICAgIGNwICIke1JPT1R9 Ii8ke2xpYn0gIiR7RH0iLyR7bGlifSB8fCBkaWUgImNwICR7bGlifSBmYWlsZWQiOwogICAgICAg IHRvdWNoICIke0R9Ii8ke2xpYn07CiAgICBkb25lCn0KcHJlc2VydmVfb2xkX2xpYl9ub3RpZnkg KCkgCnsgCiAgICBpZiBbWyAke0VCVUlMRF9QSEFTRX0gIT0gInBvc3RpbnN0IiBdXTsgdGhlbgog ICAgICAgIGVlcnJvciAicHJlc2VydmVfb2xkX2xpYl9ub3RpZnkoKSBtdXN0IGJlIGNhbGxlZCBm cm9tIHBrZ19wb3N0aW5zdCgpIG9ubHkiOwogICAgICAgIGRpZSAiSW52YWxpZCBwcmVzZXJ2ZV9v bGRfbGliX25vdGlmeSgpIHVzYWdlIjsKICAgIGZpOwogICAgaGFzIHByZXNlcnZlLWxpYnMgJHtG RUFUVVJFU30gJiYgcmV0dXJuIDA7CiAgICBsb2NhbCBsaWIgbm90aWNlPTA7CiAgICBmb3IgbGli IGluICIkQCI7CiAgICBkbwogICAgICAgIFtbIC1lICR7Uk9PVH0vJHtsaWJ9IF1dIHx8IGNvbnRp bnVlOwogICAgICAgIGlmIFtbICR7bm90aWNlfSAtZXEgMCBdXTsgdGhlbgogICAgICAgICAgICBu b3RpY2U9MTsKICAgICAgICAgICAgZXdhcm4gIk9sZCB2ZXJzaW9ucyBvZiBpbnN0YWxsZWQgbGli cmFyaWVzIHdlcmUgZGV0ZWN0ZWQgb24geW91ciBzeXN0ZW0uIjsKICAgICAgICAgICAgZXdhcm4g IkluIG9yZGVyIHRvIGF2b2lkIGJyZWFraW5nIHBhY2thZ2VzIHRoYXQgZGVwZW5kIG9uIHRoZXNl IG9sZCBsaWJzLCI7CiAgICAgICAgICAgIGV3YXJuICJ0aGUgbGlicmFyaWVzIGFyZSBub3QgYmVp bmcgcmVtb3ZlZC4gIFlvdSBuZWVkIHRvIHJ1biByZXZkZXAtcmVidWlsZCI7CiAgICAgICAgICAg IGV3YXJuICJpbiBvcmRlciB0byByZW1vdmUgdGhlc2Ugb2xkIGRlcGVuZGVuY2llcy4gIElmIHlv dSBkbyBub3QgaGF2ZSB0aGlzIjsKICAgICAgICAgICAgZXdhcm4gImhlbHBlciBwcm9ncmFtLCBz aW1wbHkgZW1lcmdlIHRoZSAnZ2VudG9vbGtpdCcgcGFja2FnZS4iOwogICAgICAgICAgICBld2Fy bjsKICAgICAgICBmaTsKICAgICAgICBbWyAke1BOfSA9PSAibXBmciIgXV0gJiYgbGliPSR7bGli IyMqL307CiAgICAgICAgZXdhcm4gIiAgIyByZXZkZXAtcmVidWlsZCAtLWxpYnJhcnkgJyR7bGli fSciOwogICAgZG9uZTsKICAgIGlmIFtbICR7bm90aWNlfSAtZXEgMSBdXTsgdGhlbgogICAgICAg IGV3YXJuOwogICAgICAgIGV3YXJuICJPbmNlIHlvdSd2ZSBmaW5pc2hlZCBydW5uaW5nIHJldmRl cC1yZWJ1aWxkLCBpdCBzaG91bGQgYmUgc2FmZSB0byI7CiAgICAgICAgZXdhcm4gImRlbGV0ZSB0 aGUgb2xkIGxpYnJhcmllcy4gIEhlcmUgaXMgYSBjb3B5ICYgcGFzdGUgZm9yIHRoZSBsYXp5OiI7 CiAgICAgICAgZm9yIGxpYiBpbiAiJEAiOwogICAgICAgIGRvCiAgICAgICAgICAgIGV3YXJuICIg ICMgcm0gJyR7bGlifSciOwogICAgICAgIGRvbmU7CiAgICBmaQp9CnB5dGhvbl9jbGVhbl9pbnN0 YWxsYXRpb25faW1hZ2UgKCkgCnsgCiAgICBpZiBbWyAiJHtFQlVJTERfUEhBU0V9IiAhPSAiaW5z dGFsbCIgXV07IHRoZW4KICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCkgY2FuIGJlIHVzZWQgb25s eSBpbiBzcmNfaW5zdGFsbCgpIHBoYXNlIjsKICAgIGZpOwogICAgX3B5dGhvbl9jaGVja19weXRo b25fcGtnX3NldHVwX2V4ZWN1dGlvbjsKICAgIF9weXRob25faW5pdGlhbGl6ZV9wcmVmaXhfdmFy aWFibGVzOwogICAgbG9jYWwgZmlsZSBmaWxlcz0oKSBxdWlldD0iMCI7CiAgICB3aGlsZSAoKCQj KSk7IGRvCiAgICAgICAgY2FzZSAiJDEiIGluIAogICAgICAgICAgICAtcSB8IC0tcXVpZXQpCiAg ICAgICAgICAgICAgICBxdWlldD0iMSIKICAgICAgICAgICAgOzsKICAgICAgICAgICAgLSopCiAg ICAgICAgICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6IFVucmVjb2duaXplZCBvcHRpb24gJyQx JyIKICAgICAgICAgICAgOzsKICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgIGRpZSAiJHtG VU5DTkFNRX0oKTogSW52YWxpZCB1c2FnZSIKICAgICAgICAgICAgOzsKICAgICAgICBlc2FjOwog ICAgICAgIHNoaWZ0OwogICAgZG9uZTsKICAgIHdoaWxlIHJlYWQgLWQgJycgLXIgZmlsZTsgZG8K ICAgICAgICBmaWxlcys9KCIke2ZpbGV9Iik7CiAgICBkb25lIDwgPChmaW5kICIke0VEfSIgIigi IC1uYW1lICIqLnB5W2NvXSIgLW8gLW5hbWUgIipcJHB5LmNsYXNzIiAiKSIgLXR5cGUgZiAtcHJp bnQwKTsKICAgIGlmIFtbICIkeyNmaWxlc1tAXX0iIC1ndCAwIF1dOyB0aGVuCiAgICAgICAgaWYg W1sgIiR7cXVpZXR9IiA9PSAiMCIgXV07IHRoZW4KICAgICAgICAgICAgZXdhcm4gIkRlbGV0aW5n IGJ5dGUtY29tcGlsZWQgUHl0aG9uIG1vZHVsZXMgbmVlZGxlc3NseSBnZW5lcmF0ZWQgYnkgYnVp bGQgc3lzdGVtOiI7CiAgICAgICAgZmk7CiAgICAgICAgZm9yIGZpbGUgaW4gIiR7ZmlsZXNbQF19 IjsKICAgICAgICBkbwogICAgICAgICAgICBpZiBbWyAiJHtxdWlldH0iID09ICIwIiBdXTsgdGhl bgogICAgICAgICAgICAgICAgZXdhcm4gIiAke2ZpbGV9IjsKICAgICAgICAgICAgZmk7CiAgICAg ICAgICAgIHJtIC1mICIke2ZpbGV9IjsKICAgICAgICAgICAgaWYgW1sgIiR7ZmlsZSUvKn0iID09 ICoiL19fcHljYWNoZV9fIiBdXTsgdGhlbgogICAgICAgICAgICAgICAgcm1kaXIgIiR7ZmlsZSUv Kn0iIDI+IC9kZXYvbnVsbDsKICAgICAgICAgICAgZmk7CiAgICAgICAgZG9uZTsKICAgIGZpOwog ICAgZnVuY3Rpb24gcHl0aG9uX2NsZWFuX3NpdGVkaXJzICgpIAogICAgeyAKICAgICAgICBpZiBb WyAtZCAiJHtFRH0kKHB5dGhvbl9nZXRfc2l0ZWRpcikiIF1dOyB0aGVuCiAgICAgICAgICAgIGZp bmQgIiR7RUR9JChweXRob25fZ2V0X3NpdGVkaXIpIiAiKCIgLW5hbWUgIiouYyIgLW8gLW5hbWUg IiouaCIgLW8gLW5hbWUgIioubGEiICIpIiAtdHlwZSBmIC1wcmludDAgfCB4YXJncyAtMCBybSAt ZjsKICAgICAgICBmaQogICAgfTsKICAgIGlmIF9weXRob25fcGFja2FnZV9zdXBwb3J0aW5nX2lu c3RhbGxhdGlvbl9mb3JfbXVsdGlwbGVfcHl0aG9uX2FiaXM7IHRoZW4KICAgICAgICBweXRob25f ZXhlY3V0ZV9mdW5jdGlvbiAtcSBweXRob25fY2xlYW5fc2l0ZWRpcnM7CiAgICBlbHNlCiAgICAg ICAgcHl0aG9uX2NsZWFuX3NpdGVkaXJzOwogICAgZmk7CiAgICB1bnNldCAtZiBweXRob25fY2xl YW5fc2l0ZWRpcnMKfQpweXRob25fY2xlYW5fcHktY29tcGlsZV9maWxlcyAoKSAKeyAKICAgIF9w eXRob25fY2hlY2tfcHl0aG9uX3BrZ19zZXR1cF9leGVjdXRpb247CiAgICBsb2NhbCBmaWxlIGZp bGVzPSgpIHF1aWV0PSIwIjsKICAgIHdoaWxlICgoJCMpKTsgZG8KICAgICAgICBjYXNlICIkMSIg aW4gCiAgICAgICAgICAgIC1xIHwgLS1xdWlldCkKICAgICAgICAgICAgICAgIHF1aWV0PSIxIgog ICAgICAgICAgICA7OwogICAgICAgICAgICAtKikKICAgICAgICAgICAgICAgIGRpZSAiJHtGVU5D TkFNRX0oKTogVW5yZWNvZ25pemVkIG9wdGlvbiAnJDEnIgogICAgICAgICAgICA7OwogICAgICAg ICAgICAqKQogICAgICAgICAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpOiBJbnZhbGlkIHVzYWdl IgogICAgICAgICAgICA7OwogICAgICAgIGVzYWM7CiAgICAgICAgc2hpZnQ7CiAgICBkb25lOwog ICAgd2hpbGUgcmVhZCAtZCAnJyAtciBmaWxlOyBkbwogICAgICAgIGZpbGVzKz0oIiR7ZmlsZSMu L30iKTsKICAgIGRvbmUgPCA8KGZpbmQgLW5hbWUgcHktY29tcGlsZSAtdHlwZSBmIC1wcmludDAp OwogICAgZm9yIGZpbGUgaW4gIiR7ZmlsZXNbQF19IjsKICAgIGRvCiAgICAgICAgaWYgW1sgIiR7 cXVpZXR9IiA9PSAiMCIgXV07IHRoZW4KICAgICAgICAgICAgZWluZm8gIkNsZWFuaW5nICcke2Zp bGV9JyBmaWxlIjsKICAgICAgICBmaTsKICAgICAgICBlY2hvICIjIS9iaW4vc2giID4gIiR7Zmls ZX0iOwogICAgZG9uZQp9CnB5dGhvbl9jb252ZXJ0X3NoZWJhbmdzICgpIAp7IAogICAgX3B5dGhv bl9jaGVja19weXRob25fcGtnX3NldHVwX2V4ZWN1dGlvbjsKICAgIGxvY2FsIGFyZ3VtZW50IGZp bGUgZmlsZXM9KCkgb25seV9leGVjdXRhYmxlcz0iMCIgcHl0aG9uX2ludGVycHJldGVyIHF1aWV0 PSIwIiByZWN1cnNpdmU9IjAiIHNoZWJhbmdzX2NvbnZlcnRlZD0iMCI7CiAgICB3aGlsZSAoKCQj KSk7IGRvCiAgICAgICAgY2FzZSAiJDEiIGluIAogICAgICAgICAgICAtciB8IC0tcmVjdXJzaXZl KQogICAgICAgICAgICAgICAgcmVjdXJzaXZlPSIxIgogICAgICAgICAgICA7OwogICAgICAgICAg ICAtcSB8IC0tcXVpZXQpCiAgICAgICAgICAgICAgICBxdWlldD0iMSIKICAgICAgICAgICAgOzsK ICAgICAgICAgICAgLXggfCAtLW9ubHktZXhlY3V0YWJsZXMpCiAgICAgICAgICAgICAgICBvbmx5 X2V4ZWN1dGFibGVzPSIxIgogICAgICAgICAgICA7OwogICAgICAgICAgICAtLSkKICAgICAgICAg ICAgICAgIHNoaWZ0OwogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgOzsKICAgICAg ICAgICAgLSopCiAgICAgICAgICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6IFVucmVjb2duaXpl ZCBvcHRpb24gJyQxJyIKICAgICAgICAgICAgOzsKICAgICAgICAgICAgKikKICAgICAgICAgICAg ICAgIGJyZWFrCiAgICAgICAgICAgIDs7CiAgICAgICAgZXNhYzsKICAgICAgICBzaGlmdDsKICAg IGRvbmU7CiAgICBpZiBbWyAiJCMiIC1lcSAwIF1dOyB0aGVuCiAgICAgICAgZGllICIke0ZVTkNO QU1FfSgpOiBNaXNzaW5nIFB5dGhvbiB2ZXJzaW9uIGFuZCBmaWxlcyBvciBkaXJlY3RvcmllcyI7 CiAgICBlbHNlCiAgICAgICAgaWYgW1sgIiQjIiAtZXEgMSBdXTsgdGhlbgogICAgICAgICAgICBk aWUgIiR7RlVOQ05BTUV9KCk6IE1pc3NpbmcgZmlsZXMgb3IgZGlyZWN0b3JpZXMiOwogICAgICAg IGZpOwogICAgZmk7CiAgICBpZiBbWyAtbiAiJChfcHl0aG9uX2dldF9pbXBsZW1lbnRhdGlvbiAt LWlnbm9yZS1pbnZhbGlkICIkMSIpIiBdXTsgdGhlbgogICAgICAgIHB5dGhvbl9pbnRlcnByZXRl cj0iJChQWVRIT04gIiQxIikiOwogICAgZWxzZQogICAgICAgIHB5dGhvbl9pbnRlcnByZXRlcj0i cHl0aG9uJDEiOwogICAgZmk7CiAgICBzaGlmdDsKICAgIGZvciBhcmd1bWVudCBpbiAiJEAiOwog ICAgZG8KICAgICAgICBpZiBbWyAhIC1lICIke2FyZ3VtZW50fSIgXV07IHRoZW4KICAgICAgICAg ICAgZGllICIke0ZVTkNOQU1FfSgpOiAnJHthcmd1bWVudH0nIGRvZXMgbm90IGV4aXN0IjsKICAg ICAgICBlbHNlCiAgICAgICAgICAgIGlmIFtbIC1mICIke2FyZ3VtZW50fSIgXV07IHRoZW4KICAg ICAgICAgICAgICAgIGZpbGVzKz0oIiR7YXJndW1lbnR9Iik7CiAgICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgICAgIGlmIFtbIC1kICIke2FyZ3VtZW50fSIgXV07IHRoZW4KICAgICAgICAgICAg ICAgICAgICBpZiBbWyAiJHtyZWN1cnNpdmV9IiA9PSAiMSIgXV07IHRoZW4KICAgICAgICAgICAg ICAgICAgICAgICAgd2hpbGUgcmVhZCAtZCAnJyAtciBmaWxlOyBkbwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgZmlsZXMrPSgiJHtmaWxlfSIpOwogICAgICAgICAgICAgICAgICAgICAgICBk b25lIDwgPChmaW5kICIke2FyZ3VtZW50fSIgJChbWyAiJHtvbmx5X2V4ZWN1dGFibGVzfSIgPT0g IjEiIF1dICYmIGVjaG8gLXBlcm0gLzExMSkgLXR5cGUgZiAtcHJpbnQwKTsKICAgICAgICAgICAg ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGRpZSAiJHtGVU5DTkFNRX0oKTog JyR7YXJndW1lbnR9JyBpcyBub3QgYSByZWd1bGFyIGZpbGUiOwogICAgICAgICAgICAgICAgICAg IGZpOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIGRpZSAiJHtGVU5D TkFNRX0oKTogJyR7YXJndW1lbnR9JyBpcyBub3QgYSByZWd1bGFyIGZpbGUgb3IgYSBkaXJlY3Rv cnkiOwogICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgIGZpOwogICAgICAgIGZpOwogICAg ZG9uZTsKICAgIGZvciBmaWxlIGluICIke2ZpbGVzW0BdfSI7CiAgICBkbwogICAgICAgIGZpbGU9 IiR7ZmlsZSMuL30iOwogICAgICAgIFtbICIke29ubHlfZXhlY3V0YWJsZXN9IiA9PSAiMSIgJiYg ISAteCAiJHtmaWxlfSIgXV0gJiYgY29udGludWU7CiAgICAgICAgaWYgW1sgIiQoaGVhZCAtbjEg IiR7ZmlsZX0iKSIgPX4gJHtfUFlUSE9OX1NIRUJBTkdfQkFTRV9QQVJUX1JFR0VYfSBdXTsgdGhl bgogICAgICAgICAgICBbWyAiJChzZWQgLW5lICIycCIgIiR7ZmlsZX0iKSIgPX4gXiIjIEdlbnRv byAnIi4qIicgd3JhcHBlciBzY3JpcHQgZ2VuZXJhdGVkIGJ5IHB5dGhvbl9nZW5lcmF0ZV93cmFw cGVyX3NjcmlwdHMoKSIkIF1dICYmIGNvbnRpbnVlOwogICAgICAgICAgICBzaGViYW5nc19jb252 ZXJ0ZWQ9IjEiOwogICAgICAgICAgICBpZiBbWyAiJHtxdWlldH0iID09ICIwIiBdXTsgdGhlbgog ICAgICAgICAgICAgICAgZWluZm8gIkNvbnZlcnRpbmcgc2hlYmFuZyBpbiAnJHtmaWxlfSciOwog ICAgICAgICAgICBmaTsKICAgICAgICAgICAgc2VkIC1lICIxczpeIyFbWzpzcGFjZTpdXSpcKFte WzpzcGFjZTpdXSovdXNyL2Jpbi9lbnZbWzpzcGFjZTpdXVwpXD9bWzpzcGFjZTpdXSpcKFteWzpz cGFjZTpdXSovXClcP1woanl0aG9uXHxweXB5LWNcfHB5dGhvblwpXChbWzpkaWdpdDpdXVwrXChc LltbOmRpZ2l0Ol1dXCtcKVw/XClcP1woXCRcfFtbOnNwYWNlOl1dLipcKTojIVwxXDIke3B5dGhv bl9pbnRlcnByZXRlcn1cNjoiIC1pICIke2ZpbGV9IiB8fCBkaWUgIkNvbnZlcnNpb24gb2Ygc2hl YmFuZyBpbiAnJHtmaWxlfScgZmFpbGVkIjsKICAgICAgICBmaTsKICAgIGRvbmU7CiAgICBpZiBb WyAiJHtzaGViYW5nc19jb252ZXJ0ZWR9IiA9PSAiMCIgXV07IHRoZW4KICAgICAgICBld2FybiAi JHtGVU5DTkFNRX0oKTogUHl0aG9uIHNjcmlwdHMgbm90IGZvdW5kIjsKICAgIGZpCn0KcHl0aG9u X2NvcHlfc291cmNlcyAoKSAKeyAKICAgIGlmICEgX3B5dGhvbl9wYWNrYWdlX3N1cHBvcnRpbmdf aW5zdGFsbGF0aW9uX2Zvcl9tdWx0aXBsZV9weXRob25fYWJpczsgdGhlbgogICAgICAgIGRpZSAi JHtGVU5DTkFNRX0oKSBjYW5ub3QgYmUgdXNlZCBpbiBlYnVpbGRzIG9mIHBhY2thZ2VzIG5vdCBz dXBwb3J0aW5nIGluc3RhbGxhdGlvbiBmb3IgbXVsdGlwbGUgUHl0aG9uIEFCSXMiOwogICAgZmk7 CiAgICBfcHl0aG9uX2NoZWNrX3B5dGhvbl9wa2dfc2V0dXBfZXhlY3V0aW9uOwogICAgbG9jYWwg ZGlyIGRpcnM9KCkgUFlUSE9OX0FCSTsKICAgIGlmIFtbICIkIyIgLWVxIDAgXV07IHRoZW4KICAg ICAgICBpZiBbWyAiJHtXT1JLRElSfSIgPT0gIiR7U30iIF1dOyB0aGVuCiAgICAgICAgICAgIGRp ZSAiJHtGVU5DTkFNRX0oKSBjYW5ub3QgYmUgdXNlZCB3aXRoIGN1cnJlbnQgdmFsdWUgb2YgUyB2 YXJpYWJsZSI7CiAgICAgICAgZmk7CiAgICAgICAgZGlycz0oIiR7UyUvfSIpOwogICAgZWxzZQog ICAgICAgIGRpcnM9KCIkQCIpOwogICAgZmk7CiAgICBfcHl0aG9uX2NhbGN1bGF0ZV9QWVRIT05f QUJJUzsKICAgIGZvciBQWVRIT05fQUJJIGluICR7UFlUSE9OX0FCSVN9OwogICAgZG8KICAgICAg ICBmb3IgZGlyIGluICIke2RpcnNbQF19IjsKICAgICAgICBkbwogICAgICAgICAgICBjcCAtcHIg IiR7ZGlyfSIgIiR7ZGlyfS0ke1BZVEhPTl9BQkl9IiA+IC9kZXYvbnVsbCB8fCBkaWUgIkNvcHlp bmcgb2Ygc291cmNlcyBmYWlsZWQiOwogICAgICAgIGRvbmU7CiAgICBkb25lCn0KcHl0aG9uX2Rp c2FibGVfcHljICgpIAp7IAogICAgX3B5dGhvbl9jaGVja19weXRob25fcGtnX3NldHVwX2V4ZWN1 dGlvbjsKICAgIGlmIFtbICIkIyIgLW5lIDAgXV07IHRoZW4KICAgICAgICBkaWUgIiR7RlVOQ05B TUV9KCkgZG9lcyBub3QgYWNjZXB0IGFyZ3VtZW50cyI7CiAgICBmaTsKICAgIGV4cG9ydCBQWVRI T05ET05UV1JJVEVCWVRFQ09ERT0iMSIKfQpweXRob25fZW5hYmxlX3B5YyAoKSAKeyAKICAgIF9w eXRob25fY2hlY2tfcHl0aG9uX3BrZ19zZXR1cF9leGVjdXRpb247CiAgICBpZiBbWyAiJCMiIC1u ZSAwIF1dOyB0aGVuCiAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpIGRvZXMgbm90IGFjY2VwdCBh cmd1bWVudHMiOwogICAgZmk7CiAgICB1bnNldCBQWVRIT05ET05UV1JJVEVCWVRFQ09ERQp9CnB5 dGhvbl9leGVjdXRlX2Z1bmN0aW9uICgpIAp7IAogICAgaWYgISBfcHl0aG9uX3BhY2thZ2Vfc3Vw cG9ydGluZ19pbnN0YWxsYXRpb25fZm9yX211bHRpcGxlX3B5dGhvbl9hYmlzOyB0aGVuCiAgICAg ICAgZGllICIke0ZVTkNOQU1FfSgpIGNhbm5vdCBiZSB1c2VkIGluIGVidWlsZHMgb2YgcGFja2Fn ZXMgbm90IHN1cHBvcnRpbmcgaW5zdGFsbGF0aW9uIGZvciBtdWx0aXBsZSBQeXRob24gQUJJcyI7 CiAgICBmaTsKICAgIF9weXRob25fY2hlY2tfcHl0aG9uX3BrZ19zZXR1cF9leGVjdXRpb247CiAg ICBfcHl0aG9uX3NldF9jb2xvcl92YXJpYWJsZXM7CiAgICBsb2NhbCBhY3Rpb24gYWN0aW9uX21l c3NhZ2UgYWN0aW9uX21lc3NhZ2VfdGVtcGxhdGUgZGVmYXVsdF9mdW5jdGlvbj0iMCIgZmFpbHVy ZV9tZXNzYWdlIGZhaWx1cmVfbWVzc2FnZV90ZW1wbGF0ZSBmaW5hbF9BQkk9IjAiIGZ1bmN0aW9u IGl0ZXJhdGVkX1BZVEhPTl9BQklTIG5vbmZhdGFsPSIwIiBwcmV2aW91c19kaXJlY3RvcnkgcHJl dmlvdXNfZGlyZWN0b3J5X3N0YWNrIHByZXZpb3VzX2RpcmVjdG9yeV9zdGFja19sZW5ndGggUFlU SE9OX0FCSSBxdWlldD0iMCIgcmV0dXJuX2NvZGUgc2VwYXJhdGVfYnVpbGRfZGlycz0iMCIgc291 cmNlX2RpcjsKICAgIHdoaWxlICgoJCMpKTsgZG8KICAgICAgICBjYXNlICIkMSIgaW4gCiAgICAg ICAgICAgIC0tYWN0aW9uLW1lc3NhZ2UpCiAgICAgICAgICAgICAgICBhY3Rpb25fbWVzc2FnZV90 ZW1wbGF0ZT0iJDIiOwogICAgICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgOzsKICAgICAg ICAgICAgLWQgfCAtLWRlZmF1bHQtZnVuY3Rpb24pCiAgICAgICAgICAgICAgICBkZWZhdWx0X2Z1 bmN0aW9uPSIxIgogICAgICAgICAgICA7OwogICAgICAgICAgICAtLWZhaWx1cmUtbWVzc2FnZSkK ICAgICAgICAgICAgICAgIGZhaWx1cmVfbWVzc2FnZV90ZW1wbGF0ZT0iJDIiOwogICAgICAgICAg ICAgICAgc2hpZnQKICAgICAgICAgICAgOzsKICAgICAgICAgICAgLWYgfCAtLWZpbmFsLUFCSSkK ICAgICAgICAgICAgICAgIGZpbmFsX0FCST0iMSIKICAgICAgICAgICAgOzsKICAgICAgICAgICAg LS1ub25mYXRhbCkKICAgICAgICAgICAgICAgIG5vbmZhdGFsPSIxIgogICAgICAgICAgICA7Owog ICAgICAgICAgICAtcSB8IC0tcXVpZXQpCiAgICAgICAgICAgICAgICBxdWlldD0iMSIKICAgICAg ICAgICAgOzsKICAgICAgICAgICAgLXMgfCAtLXNlcGFyYXRlLWJ1aWxkLWRpcnMpCiAgICAgICAg ICAgICAgICBzZXBhcmF0ZV9idWlsZF9kaXJzPSIxIgogICAgICAgICAgICA7OwogICAgICAgICAg ICAtLXNvdXJjZS1kaXIpCiAgICAgICAgICAgICAgICBzb3VyY2VfZGlyPSIkMiI7CiAgICAgICAg ICAgICAgICBzaGlmdAogICAgICAgICAgICA7OwogICAgICAgICAgICAtLSkKICAgICAgICAgICAg ICAgIHNoaWZ0OwogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgOzsKICAgICAgICAg ICAgLSopCiAgICAgICAgICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6IFVucmVjb2duaXplZCBv cHRpb24gJyQxJyIKICAgICAgICAgICAgOzsKICAgICAgICAgICAgKikKICAgICAgICAgICAgICAg IGJyZWFrCiAgICAgICAgICAgIDs7CiAgICAgICAgZXNhYzsKICAgICAgICBzaGlmdDsKICAgIGRv bmU7CiAgICBpZiBbWyAtbiAiJHtzb3VyY2VfZGlyfSIgJiYgIiR7c2VwYXJhdGVfYnVpbGRfZGly c30iID09IDAgXV07IHRoZW4KICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6ICctLXNvdXJjZS1k aXInIG9wdGlvbiBjYW4gYmUgc3BlY2lmaWVkIG9ubHkgd2l0aCAnLS1zZXBhcmF0ZS1idWlsZC1k aXJzJyBvcHRpb24iOwogICAgZmk7CiAgICBpZiBbWyAiJHtkZWZhdWx0X2Z1bmN0aW9ufSIgPT0g IjAiIF1dOyB0aGVuCiAgICAgICAgaWYgW1sgIiQjIiAtZXEgMCBdXTsgdGhlbgogICAgICAgICAg ICBkaWUgIiR7RlVOQ05BTUV9KCk6IE1pc3NpbmcgZnVuY3Rpb24gbmFtZSI7CiAgICAgICAgZmk7 CiAgICAgICAgZnVuY3Rpb249IiQxIjsKICAgICAgICBzaGlmdDsKICAgICAgICBpZiBbWyAteiAi JCh0eXBlIC10ICIke2Z1bmN0aW9ufSIpIiBdXTsgdGhlbgogICAgICAgICAgICBkaWUgIiR7RlVO Q05BTUV9KCk6ICcke2Z1bmN0aW9ufScgZnVuY3Rpb24gaXMgbm90IGRlZmluZWQiOwogICAgICAg IGZpOwogICAgZWxzZQogICAgICAgIGlmIGhhcyAiJHtFQVBJOi0wfSIgMCAxOyB0aGVuCiAgICAg ICAgICAgIGRpZSAiJHtGVU5DTkFNRX0oKTogJy0tZGVmYXVsdC1mdW5jdGlvbicgb3B0aW9uIGNh bm5vdCBiZSB1c2VkIGluIHRoaXMgRUFQSSI7CiAgICAgICAgZmk7CiAgICAgICAgaWYgW1sgIiR7 RUJVSUxEX1BIQVNFfSIgPT0gImNvbmZpZ3VyZSIgXV07IHRoZW4KICAgICAgICAgICAgaWYgaGFz ICIke0VBUEl9IiAyIDM7IHRoZW4KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHB5dGhvbl9kZWZh dWx0X2Z1bmN0aW9uICgpIAogICAgICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgICAgICBl Y29uZiAiJEAiCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAg ICAgICBmdW5jdGlvbiBweXRob25fZGVmYXVsdF9mdW5jdGlvbiAoKSAKICAgICAgICAgICAgICAg IHsgCiAgICAgICAgICAgICAgICAgICAgbm9uZmF0YWwgZWNvbmYgIiRAIgogICAgICAgICAgICAg ICAgfTsKICAgICAgICAgICAgZmk7CiAgICAgICAgZWxzZQogICAgICAgICAgICBpZiBbWyAiJHtF QlVJTERfUEhBU0V9IiA9PSAiY29tcGlsZSIgXV07IHRoZW4KICAgICAgICAgICAgICAgIGZ1bmN0 aW9uIHB5dGhvbl9kZWZhdWx0X2Z1bmN0aW9uICgpIAogICAgICAgICAgICAgICAgeyAKICAgICAg ICAgICAgICAgICAgICBlbWFrZSAiJEAiCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICBl bHNlCiAgICAgICAgICAgICAgICBpZiBbWyAiJHtFQlVJTERfUEhBU0V9IiA9PSAidGVzdCIgXV07 IHRoZW4KICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBweXRob25fZGVmYXVsdF9mdW5jdGlv biAoKSAKICAgICAgICAgICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgICAgICAgICBpZiBl bWFrZSAtajEgLW4gY2hlY2sgJj4vZGV2L251bGw7IHRoZW4KICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVtYWtlIC1qMSBjaGVjayAiJEAiOwogICAgICAgICAgICAgICAgICAgICAgICBlbHNl CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlbWFrZSAtajEgLW4gdGVzdCAmPi9kZXYv bnVsbDsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWtlIC1qMSB0ZXN0 ICIkQCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgICAgICAg ICAgICAgZmkKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgICAgIGlmIFtbICIke0VCVUlMRF9QSEFTRX0iID09ICJpbnN0YWxsIiBdXTsg dGhlbgogICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBweXRob25fZGVmYXVsdF9mdW5j dGlvbiAoKSAKICAgICAgICAgICAgICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVtYWtlIERFU1RESVI9IiR7RH0iIGluc3RhbGwgIiRAIgogICAgICAgICAgICAgICAg ICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAg ICAgZGllICIke0ZVTkNOQU1FfSgpOiAnLS1kZWZhdWx0LWZ1bmN0aW9uJyBvcHRpb24gY2Fubm90 IGJlIHVzZWQgaW4gdGhpcyBlYnVpbGQgcGhhc2UiOwogICAgICAgICAgICAgICAgICAgIGZpOwog ICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgIGZpOwogICAgICAgIGZpOwogICAgICAgIGZ1 bmN0aW9uPSJweXRob25fZGVmYXVsdF9mdW5jdGlvbiI7CiAgICBmaTsKICAgIGlmIF9weXRob25f YWJpLXNwZWNpZmljX2xvY2FsX3Njb3BlOyB0aGVuCiAgICAgICAgZGllICIke0ZVTkNOQU1FfSgp OiBJbnZhbGlkIGNhbGwgc3RhY2siOwogICAgZmk7CiAgICBpZiBbWyAiJHtxdWlldH0iID09ICIw IiBdXTsgdGhlbgogICAgICAgIFtbICIke0VCVUlMRF9QSEFTRX0iID09ICJzZXR1cCIgXV0gJiYg YWN0aW9uPSJTZXR0aW5nIHVwIjsKICAgICAgICBbWyAiJHtFQlVJTERfUEhBU0V9IiA9PSAidW5w YWNrIiBdXSAmJiBhY3Rpb249IlVucGFja2luZyI7CiAgICAgICAgW1sgIiR7RUJVSUxEX1BIQVNF fSIgPT0gInByZXBhcmUiIF1dICYmIGFjdGlvbj0iUHJlcGFyYXRpb24iOwogICAgICAgIFtbICIk e0VCVUlMRF9QSEFTRX0iID09ICJjb25maWd1cmUiIF1dICYmIGFjdGlvbj0iQ29uZmlndXJhdGlv biI7CiAgICAgICAgW1sgIiR7RUJVSUxEX1BIQVNFfSIgPT0gImNvbXBpbGUiIF1dICYmIGFjdGlv bj0iQnVpbGRpbmciOwogICAgICAgIFtbICIke0VCVUlMRF9QSEFTRX0iID09ICJ0ZXN0IiBdXSAm JiBhY3Rpb249IlRlc3RpbmciOwogICAgICAgIFtbICIke0VCVUlMRF9QSEFTRX0iID09ICJpbnN0 YWxsIiBdXSAmJiBhY3Rpb249Ikluc3RhbGxhdGlvbiI7CiAgICAgICAgW1sgIiR7RUJVSUxEX1BI QVNFfSIgPT0gInByZWluc3QiIF1dICYmIGFjdGlvbj0iUHJlaW5zdGFsbGF0aW9uIjsKICAgICAg ICBbWyAiJHtFQlVJTERfUEhBU0V9IiA9PSAicG9zdGluc3QiIF1dICYmIGFjdGlvbj0iUG9zdGlu c3RhbGxhdGlvbiI7CiAgICAgICAgW1sgIiR7RUJVSUxEX1BIQVNFfSIgPT0gInByZXJtIiBdXSAm JiBhY3Rpb249IlByZXVuaW5zdGFsbGF0aW9uIjsKICAgICAgICBbWyAiJHtFQlVJTERfUEhBU0V9 IiA9PSAicG9zdHJtIiBdXSAmJiBhY3Rpb249IlBvc3R1bmluc3RhbGxhdGlvbiI7CiAgICBmaTsK ICAgIF9weXRob25fY2FsY3VsYXRlX1BZVEhPTl9BQklTOwogICAgaWYgW1sgIiR7ZmluYWxfQUJJ fSIgPT0gIjEiIF1dOyB0aGVuCiAgICAgICAgaXRlcmF0ZWRfUFlUSE9OX0FCSVM9IiQoUFlUSE9O IC1mIC0tQUJJKSI7CiAgICBlbHNlCiAgICAgICAgaXRlcmF0ZWRfUFlUSE9OX0FCSVM9IiR7UFlU SE9OX0FCSVN9IjsKICAgIGZpOwogICAgZm9yIFBZVEhPTl9BQkkgaW4gJHtpdGVyYXRlZF9QWVRI T05fQUJJU307CiAgICBkbwogICAgICAgIGlmIFtbICIke0VCVUlMRF9QSEFTRX0iID09ICJ0ZXN0 IiBdXSAmJiBfcHl0aG9uX2NoZWNrX3B5dGhvbl9hYmlfbWF0Y2hpbmcgLS1wYXR0ZXJucy1saXN0 ICIke1BZVEhPTl9BQkl9IiAiJHtQWVRIT05fVEVTVFNfUkVTVFJJQ1RFRF9BQklTfSI7IHRoZW4K ICAgICAgICAgICAgaWYgW1sgIiR7cXVpZXR9IiA9PSAiMCIgXV07IHRoZW4KICAgICAgICAgICAg ICAgIGVjaG8gIiAke19HUkVFTn0qJHtfTk9STUFMfSAke19CTFVFfVRlc3Rpbmcgb2YgJHtDQVRF R09SWX0vJHtQRn0gd2l0aCAkKHB5dGhvbl9nZXRfaW1wbGVtZW50YXRpb25fYW5kX3ZlcnNpb24p IHNraXBwZWQke19OT1JNQUx9IjsKICAgICAgICAgICAgZmk7CiAgICAgICAgICAgIGNvbnRpbnVl OwogICAgICAgIGZpOwogICAgICAgIF9weXRob25fcHJlcGFyZV9mbGFnczsKICAgICAgICBpZiBb WyAiJHtxdWlldH0iID09ICIwIiBdXTsgdGhlbgogICAgICAgICAgICBpZiBbWyAtbiAiJHthY3Rp b25fbWVzc2FnZV90ZW1wbGF0ZX0iIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBldmFsICJhY3Rp b25fbWVzc2FnZT1cIiR7YWN0aW9uX21lc3NhZ2VfdGVtcGxhdGV9XCIiOwogICAgICAgICAgICBl bHNlCiAgICAgICAgICAgICAgICBhY3Rpb25fbWVzc2FnZT0iJHthY3Rpb259IG9mICR7Q0FURUdP Ull9LyR7UEZ9IHdpdGggJChweXRob25fZ2V0X2ltcGxlbWVudGF0aW9uX2FuZF92ZXJzaW9uKS4u LiI7CiAgICAgICAgICAgIGZpOwogICAgICAgICAgICBlY2hvICIgJHtfR1JFRU59KiR7X05PUk1B TH0gJHtfQkxVRX0ke2FjdGlvbl9tZXNzYWdlfSR7X05PUk1BTH0iOwogICAgICAgIGZpOwogICAg ICAgIGlmIFtbICIke3NlcGFyYXRlX2J1aWxkX2RpcnN9IiA9PSAiMSIgXV07IHRoZW4KICAgICAg ICAgICAgaWYgW1sgLW4gIiR7c291cmNlX2Rpcn0iIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBl eHBvcnQgQlVJTERESVI9IiR7U30vJHtzb3VyY2VfZGlyfS0ke1BZVEhPTl9BQkl9IjsKICAgICAg ICAgICAgZWxzZQogICAgICAgICAgICAgICAgZXhwb3J0IEJVSUxERElSPSIke1N9LSR7UFlUSE9O X0FCSX0iOwogICAgICAgICAgICBmaTsKICAgICAgICAgICAgcHVzaGQgIiR7QlVJTERESVJ9IiA+ IC9kZXYvbnVsbCB8fCBkaWUgInB1c2hkIGZhaWxlZCI7CiAgICAgICAgZWxzZQogICAgICAgICAg ICBleHBvcnQgQlVJTERESVI9IiR7U30iOwogICAgICAgIGZpOwogICAgICAgIHByZXZpb3VzX2Rp cmVjdG9yeT0iJChwd2QpIjsKICAgICAgICBwcmV2aW91c19kaXJlY3Rvcnlfc3RhY2s9IiQoZGly cyAtcCkiOwogICAgICAgIHByZXZpb3VzX2RpcmVjdG9yeV9zdGFja19sZW5ndGg9IiQoZGlycyAt cCB8IHdjIC1sKSI7CiAgICAgICAgaWYgISBoYXMgIiR7RUFQSX0iIDAgMSAyIDMgJiYgaGFzICIk e1BZVEhPTl9BQkl9IiAke0ZBSUxVUkVfVE9MRVJBTlRfUFlUSE9OX0FCSVN9OyB0aGVuCiAgICAg ICAgICAgIEVQWVRIT049IiQoUFlUSE9OKSIgbm9uZmF0YWwgIiR7ZnVuY3Rpb259IiAiJEAiOwog ICAgICAgIGVsc2UKICAgICAgICAgICAgRVBZVEhPTj0iJChQWVRIT04pIiAiJHtmdW5jdGlvbn0i ICIkQCI7CiAgICAgICAgZmk7CiAgICAgICAgcmV0dXJuX2NvZGU9IiQ/IjsKICAgICAgICBfcHl0 aG9uX3Jlc3RvcmVfZmxhZ3M7CiAgICAgICAgaWYgW1sgIiR7cmV0dXJuX2NvZGV9IiAtbmUgMCBd XTsgdGhlbgogICAgICAgICAgICBpZiBbWyAtbiAiJHtmYWlsdXJlX21lc3NhZ2VfdGVtcGxhdGV9 IiBdXTsgdGhlbgogICAgICAgICAgICAgICAgZXZhbCAiZmFpbHVyZV9tZXNzYWdlPVwiJHtmYWls dXJlX21lc3NhZ2VfdGVtcGxhdGV9XCIiOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg ICBmYWlsdXJlX21lc3NhZ2U9IiR7YWN0aW9ufSBmYWlsZWQgd2l0aCAkKHB5dGhvbl9nZXRfaW1w bGVtZW50YXRpb25fYW5kX3ZlcnNpb24pIGluICR7ZnVuY3Rpb259KCkgZnVuY3Rpb24iOwogICAg ICAgICAgICBmaTsKICAgICAgICAgICAgaWYgW1sgIiR7bm9uZmF0YWx9IiA9PSAiMSIgXV07IHRo ZW4KICAgICAgICAgICAgICAgIGlmIFtbICIke3F1aWV0fSIgPT0gIjAiIF1dOyB0aGVuCiAgICAg ICAgICAgICAgICAgICAgZXdhcm4gIiR7ZmFpbHVyZV9tZXNzYWdlfSI7CiAgICAgICAgICAgICAg ICBmaTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgaWYgW1sgIiR7ZmluYWxfQUJJ fSIgPT0gIjAiIF1dICYmIGhhcyAiJHtQWVRIT05fQUJJfSIgJHtGQUlMVVJFX1RPTEVSQU5UX1BZ VEhPTl9BQklTfTsgdGhlbgogICAgICAgICAgICAgICAgICAgIGlmIFtbICIke0VCVUlMRF9QSEFT RX0iICE9ICJ0ZXN0IiBdXSB8fCAhIGhhcyB0ZXN0LWZhaWwtY29udGludWUgJHtGRUFUVVJFU307 IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgZW5hYmxlZF9QWVRIT05fQUJJUz0g b3RoZXJfUFlUSE9OX0FCSTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG90aGVyX1BZVEhP Tl9BQkkgaW4gJHtQWVRIT05fQUJJU307CiAgICAgICAgICAgICAgICAgICAgICAgIGRvCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBbWyAiJHtvdGhlcl9QWVRIT05fQUJJfSIgIT0gIiR7UFlU SE9OX0FCSX0iIF1dICYmIGVuYWJsZWRfUFlUSE9OX0FCSVMrPSIke2VuYWJsZWRfUFlUSE9OX0FC SVM6KyB9JHtvdGhlcl9QWVRIT05fQUJJfSI7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU7 CiAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydCBQWVRIT05fQUJJUz0iJHtlbmFibGVkX1BZ VEhPTl9BQklTfSI7CiAgICAgICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgICAgICAgICAg aWYgW1sgIiR7cXVpZXR9IiA9PSAiMCIgXV07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAg ZXdhcm4gIiR7ZmFpbHVyZV9tZXNzYWdlfSI7CiAgICAgICAgICAgICAgICAgICAgZmk7CiAgICAg ICAgICAgICAgICAgICAgaWYgW1sgLXogIiR7UFlUSE9OX0FCSVN9IiBdXTsgdGhlbgogICAgICAg ICAgICAgICAgICAgICAgICBkaWUgIiR7ZnVuY3Rpb259KCkgZnVuY3Rpb24gZmFpbGVkIHdpdGgg YWxsIGVuYWJsZWQgUHl0aG9uIEFCSXMiOwogICAgICAgICAgICAgICAgICAgIGZpOwogICAgICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIGRpZSAiJHtmYWlsdXJlX21lc3NhZ2V9 IjsKICAgICAgICAgICAgICAgIGZpOwogICAgICAgICAgICBmaTsKICAgICAgICBmaTsKICAgICAg ICBpZiBbWyAiJChkaXJzIC1wIHwgd2MgLWwpIiAtbHQgIiR7cHJldmlvdXNfZGlyZWN0b3J5X3N0 YWNrX2xlbmd0aH0iIF1dOyB0aGVuCiAgICAgICAgICAgIGRpZSAiRGlyZWN0b3J5IHN0YWNrIGRl Y3JlYXNlZCBpbGxlZ2FsbHkiOwogICAgICAgIGZpOwogICAgICAgIHdoaWxlIFtbICIkKGRpcnMg LXAgfCB3YyAtbCkiIC1ndCAiJHtwcmV2aW91c19kaXJlY3Rvcnlfc3RhY2tfbGVuZ3RofSIgXV07 IGRvCiAgICAgICAgICAgIHBvcGQgPiAvZGV2L251bGwgfHwgZGllICJwb3BkIGZhaWxlZCI7CiAg ICAgICAgZG9uZTsKICAgICAgICBjZCAiJHtwcmV2aW91c19kaXJlY3Rvcnl9IjsKICAgICAgICBp ZiBbWyAiJChkaXJzIC1wKSIgIT0gIiR7cHJldmlvdXNfZGlyZWN0b3J5X3N0YWNrfSIgXV07IHRo ZW4KICAgICAgICAgICAgZGllICJEaXJlY3Rvcnkgc3RhY2sgY2hhbmdlZCBpbGxlZ2FsbHkiOwog ICAgICAgIGZpOwogICAgICAgIGlmIFtbICIke3NlcGFyYXRlX2J1aWxkX2RpcnN9IiA9PSAiMSIg XV07IHRoZW4KICAgICAgICAgICAgcG9wZCA+IC9kZXYvbnVsbCB8fCBkaWUgInBvcGQgZmFpbGVk IjsKICAgICAgICBmaTsKICAgICAgICB1bnNldCBCVUlMRERJUjsKICAgIGRvbmU7CiAgICBpZiBb WyAiJHtkZWZhdWx0X2Z1bmN0aW9ufSIgPT0gIjEiIF1dOyB0aGVuCiAgICAgICAgdW5zZXQgLWYg cHl0aG9uX2RlZmF1bHRfZnVuY3Rpb247CiAgICBmaQp9CnB5dGhvbl9leGVjdXRlX25vc2V0ZXN0 cyAoKSAKeyAKICAgIF9weXRob25fY2hlY2tfcHl0aG9uX3BrZ19zZXR1cF9leGVjdXRpb247CiAg ICBfcHl0aG9uX3NldF9jb2xvcl92YXJpYWJsZXM7CiAgICBsb2NhbCBQWVRIT05QQVRIX3RlbXBs YXRlIHNlcGFyYXRlX2J1aWxkX2RpcnM7CiAgICB3aGlsZSAoKCQjKSk7IGRvCiAgICAgICAgY2Fz ZSAiJDEiIGluIAogICAgICAgICAgICAtUCB8IC0tUFlUSE9OUEFUSCkKICAgICAgICAgICAgICAg IFBZVEhPTlBBVEhfdGVtcGxhdGU9IiQyIjsKICAgICAgICAgICAgICAgIHNoaWZ0CiAgICAgICAg ICAgIDs7CiAgICAgICAgICAgIC1zIHwgLS1zZXBhcmF0ZS1idWlsZC1kaXJzKQogICAgICAgICAg ICAgICAgc2VwYXJhdGVfYnVpbGRfZGlycz0iMSIKICAgICAgICAgICAgOzsKICAgICAgICAgICAg LS0pCiAgICAgICAgICAgICAgICBzaGlmdDsKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAg ICAgIDs7CiAgICAgICAgICAgIC0qKQogICAgICAgICAgICAgICAgZGllICIke0ZVTkNOQU1FfSgp OiBVbnJlY29nbml6ZWQgb3B0aW9uICckMSciCiAgICAgICAgICAgIDs7CiAgICAgICAgICAgICop CiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICA7OwogICAgICAgIGVzYWM7CiAgICAg ICAgc2hpZnQ7CiAgICBkb25lOwogICAgZnVuY3Rpb24gcHl0aG9uX3Rlc3RfZnVuY3Rpb24gKCkg CiAgICB7IAogICAgICAgIGxvY2FsIGV2YWx1YXRlZF9QWVRIT05QQVRIOwogICAgICAgIGV2YWwg ImV2YWx1YXRlZF9QWVRIT05QQVRIPVwiJHtQWVRIT05QQVRIX3RlbXBsYXRlfVwiIjsKICAgICAg ICBfUFlUSE9OX1RFU1RfRlVOQ1RJT049InB5dGhvbl9leGVjdXRlX25vc2V0ZXN0cyIgX3B5dGhv bl90ZXN0X2hvb2sgcHJlOwogICAgICAgIGlmIFtbIC1uICIke2V2YWx1YXRlZF9QWVRIT05QQVRI fSIgXV07IHRoZW4KICAgICAgICAgICAgZWNobyAke19CT0xEfVBZVEhPTlBBVEg9IiR7ZXZhbHVh dGVkX1BZVEhPTlBBVEh9IiBub3NldGVzdHMgLS12ZXJib3NpdHk9IiR7UFlUSE9OX1RFU1RfVkVS Qk9TSVRZfSIgIiRAIiR7X05PUk1BTH07CiAgICAgICAgICAgIFBZVEhPTlBBVEg9IiR7ZXZhbHVh dGVkX1BZVEhPTlBBVEh9IiBub3NldGVzdHMgLS12ZXJib3NpdHk9IiR7UFlUSE9OX1RFU1RfVkVS Qk9TSVRZfSIgIiRAIiB8fCByZXR1cm4gIiQ/IjsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGVj aG8gJHtfQk9MRH1ub3NldGVzdHMgLS12ZXJib3NpdHk9IiR7UFlUSE9OX1RFU1RfVkVSQk9TSVRZ fSIgIiRAIiR7X05PUk1BTH07CiAgICAgICAgICAgIG5vc2V0ZXN0cyAtLXZlcmJvc2l0eT0iJHtQ WVRIT05fVEVTVF9WRVJCT1NJVFl9IiAiJEAiIHx8IHJldHVybiAiJD8iOwogICAgICAgIGZpOwog ICAgICAgIF9QWVRIT05fVEVTVF9GVU5DVElPTj0icHl0aG9uX2V4ZWN1dGVfbm9zZXRlc3RzIiBf cHl0aG9uX3Rlc3RfaG9vayBwb3N0CiAgICB9OwogICAgaWYgX3B5dGhvbl9wYWNrYWdlX3N1cHBv cnRpbmdfaW5zdGFsbGF0aW9uX2Zvcl9tdWx0aXBsZV9weXRob25fYWJpczsgdGhlbgogICAgICAg IHB5dGhvbl9leGVjdXRlX2Z1bmN0aW9uICR7c2VwYXJhdGVfYnVpbGRfZGlyczorLXN9IHB5dGhv bl90ZXN0X2Z1bmN0aW9uICIkQCI7CiAgICBlbHNlCiAgICAgICAgaWYgW1sgLW4gIiR7c2VwYXJh dGVfYnVpbGRfZGlyc30iIF1dOyB0aGVuCiAgICAgICAgICAgIGRpZSAiJHtGVU5DTkFNRX0oKTog SW52YWxpZCB1c2FnZSI7CiAgICAgICAgZmk7CiAgICAgICAgcHl0aG9uX3Rlc3RfZnVuY3Rpb24g IiRAIiB8fCBkaWUgIlRlc3RpbmcgZmFpbGVkIjsKICAgIGZpOwogICAgdW5zZXQgLWYgcHl0aG9u X3Rlc3RfZnVuY3Rpb24KfQpweXRob25fZXhlY3V0ZV9weS50ZXN0ICgpIAp7IAogICAgX3B5dGhv bl9jaGVja19weXRob25fcGtnX3NldHVwX2V4ZWN1dGlvbjsKICAgIF9weXRob25fc2V0X2NvbG9y X3ZhcmlhYmxlczsKICAgIGxvY2FsIFBZVEhPTlBBVEhfdGVtcGxhdGUgc2VwYXJhdGVfYnVpbGRf ZGlyczsKICAgIHdoaWxlICgoJCMpKTsgZG8KICAgICAgICBjYXNlICIkMSIgaW4gCiAgICAgICAg ICAgIC1QIHwgLS1QWVRIT05QQVRIKQogICAgICAgICAgICAgICAgUFlUSE9OUEFUSF90ZW1wbGF0 ZT0iJDIiOwogICAgICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgOzsKICAgICAgICAgICAg LXMgfCAtLXNlcGFyYXRlLWJ1aWxkLWRpcnMpCiAgICAgICAgICAgICAgICBzZXBhcmF0ZV9idWls ZF9kaXJzPSIxIgogICAgICAgICAgICA7OwogICAgICAgICAgICAtLSkKICAgICAgICAgICAgICAg IHNoaWZ0OwogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgOzsKICAgICAgICAgICAg LSopCiAgICAgICAgICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6IFVucmVjb2duaXplZCBvcHRp b24gJyQxJyIKICAgICAgICAgICAgOzsKICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgIGJy ZWFrCiAgICAgICAgICAgIDs7CiAgICAgICAgZXNhYzsKICAgICAgICBzaGlmdDsKICAgIGRvbmU7 CiAgICBmdW5jdGlvbiBweXRob25fdGVzdF9mdW5jdGlvbiAoKSAKICAgIHsgCiAgICAgICAgbG9j YWwgZXZhbHVhdGVkX1BZVEhPTlBBVEg7CiAgICAgICAgZXZhbCAiZXZhbHVhdGVkX1BZVEhPTlBB VEg9XCIke1BZVEhPTlBBVEhfdGVtcGxhdGV9XCIiOwogICAgICAgIF9QWVRIT05fVEVTVF9GVU5D VElPTj0icHl0aG9uX2V4ZWN1dGVfcHkudGVzdCIgX3B5dGhvbl90ZXN0X2hvb2sgcHJlOwogICAg ICAgIGlmIFtbIC1uICIke2V2YWx1YXRlZF9QWVRIT05QQVRIfSIgXV07IHRoZW4KICAgICAgICAg ICAgZWNobyAke19CT0xEfVBZVEhPTlBBVEg9IiR7ZXZhbHVhdGVkX1BZVEhPTlBBVEh9IiBweS50 ZXN0ICQoW1sgIiR7UFlUSE9OX1RFU1RfVkVSQk9TSVRZfSIgLWdlIDIgXV0gJiYgZWNobyAtdikg IiRAIiR7X05PUk1BTH07CiAgICAgICAgICAgIFBZVEhPTlBBVEg9IiR7ZXZhbHVhdGVkX1BZVEhP TlBBVEh9IiBweS50ZXN0ICQoW1sgIiR7UFlUSE9OX1RFU1RfVkVSQk9TSVRZfSIgLWdlIDIgXV0g JiYgZWNobyAtdikgIiRAIiB8fCByZXR1cm4gIiQ/IjsKICAgICAgICBlbHNlCiAgICAgICAgICAg IGVjaG8gJHtfQk9MRH1weS50ZXN0ICQoW1sgIiR7UFlUSE9OX1RFU1RfVkVSQk9TSVRZfSIgLWd0 IDEgXV0gJiYgZWNobyAtdikgIiRAIiR7X05PUk1BTH07CiAgICAgICAgICAgIHB5LnRlc3QgJChb WyAiJHtQWVRIT05fVEVTVF9WRVJCT1NJVFl9IiAtZ3QgMSBdXSAmJiBlY2hvIC12KSAiJEAiIHx8 IHJldHVybiAiJD8iOwogICAgICAgIGZpOwogICAgICAgIF9QWVRIT05fVEVTVF9GVU5DVElPTj0i cHl0aG9uX2V4ZWN1dGVfcHkudGVzdCIgX3B5dGhvbl90ZXN0X2hvb2sgcG9zdAogICAgfTsKICAg IGlmIF9weXRob25fcGFja2FnZV9zdXBwb3J0aW5nX2luc3RhbGxhdGlvbl9mb3JfbXVsdGlwbGVf cHl0aG9uX2FiaXM7IHRoZW4KICAgICAgICBweXRob25fZXhlY3V0ZV9mdW5jdGlvbiAke3NlcGFy YXRlX2J1aWxkX2RpcnM6Ky1zfSBweXRob25fdGVzdF9mdW5jdGlvbiAiJEAiOwogICAgZWxzZQog ICAgICAgIGlmIFtbIC1uICIke3NlcGFyYXRlX2J1aWxkX2RpcnN9IiBdXTsgdGhlbgogICAgICAg ICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6IEludmFsaWQgdXNhZ2UiOwogICAgICAgIGZpOwogICAg ICAgIHB5dGhvbl90ZXN0X2Z1bmN0aW9uICIkQCIgfHwgZGllICJUZXN0aW5nIGZhaWxlZCI7CiAg ICBmaTsKICAgIHVuc2V0IC1mIHB5dGhvbl90ZXN0X2Z1bmN0aW9uCn0KcHl0aG9uX2V4ZWN1dGVf dHJpYWwgKCkgCnsgCiAgICBfcHl0aG9uX2NoZWNrX3B5dGhvbl9wa2dfc2V0dXBfZXhlY3V0aW9u OwogICAgX3B5dGhvbl9zZXRfY29sb3JfdmFyaWFibGVzOwogICAgbG9jYWwgUFlUSE9OUEFUSF90 ZW1wbGF0ZSBzZXBhcmF0ZV9idWlsZF9kaXJzOwogICAgd2hpbGUgKCgkIykpOyBkbwogICAgICAg IGNhc2UgIiQxIiBpbiAKICAgICAgICAgICAgLVAgfCAtLVBZVEhPTlBBVEgpCiAgICAgICAgICAg ICAgICBQWVRIT05QQVRIX3RlbXBsYXRlPSIkMiI7CiAgICAgICAgICAgICAgICBzaGlmdAogICAg ICAgICAgICA7OwogICAgICAgICAgICAtcyB8IC0tc2VwYXJhdGUtYnVpbGQtZGlycykKICAgICAg ICAgICAgICAgIHNlcGFyYXRlX2J1aWxkX2RpcnM9IjEiCiAgICAgICAgICAgIDs7CiAgICAgICAg ICAgIC0tKQogICAgICAgICAgICAgICAgc2hpZnQ7CiAgICAgICAgICAgICAgICBicmVhawogICAg ICAgICAgICA7OwogICAgICAgICAgICAtKikKICAgICAgICAgICAgICAgIGRpZSAiJHtGVU5DTkFN RX0oKTogVW5yZWNvZ25pemVkIG9wdGlvbiAnJDEnIgogICAgICAgICAgICA7OwogICAgICAgICAg ICAqKQogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgOzsKICAgICAgICBlc2FjOwog ICAgICAgIHNoaWZ0OwogICAgZG9uZTsKICAgIGZ1bmN0aW9uIHB5dGhvbl90ZXN0X2Z1bmN0aW9u ICgpIAogICAgeyAKICAgICAgICBsb2NhbCBldmFsdWF0ZWRfUFlUSE9OUEFUSDsKICAgICAgICBl dmFsICJldmFsdWF0ZWRfUFlUSE9OUEFUSD1cIiR7UFlUSE9OUEFUSF90ZW1wbGF0ZX1cIiI7CiAg ICAgICAgX1BZVEhPTl9URVNUX0ZVTkNUSU9OPSJweXRob25fZXhlY3V0ZV90cmlhbCIgX3B5dGhv bl90ZXN0X2hvb2sgcHJlOwogICAgICAgIGlmIFtbIC1uICIke2V2YWx1YXRlZF9QWVRIT05QQVRI fSIgXV07IHRoZW4KICAgICAgICAgICAgZWNobyAke19CT0xEfVBZVEhPTlBBVEg9IiR7ZXZhbHVh dGVkX1BZVEhPTlBBVEh9IiB0cmlhbCAkKFtbICIke1BZVEhPTl9URVNUX1ZFUkJPU0lUWX0iIC1n ZSA0IF1dICYmIGVjaG8gLS1zcGV3KSAiJEAiJHtfTk9STUFMfTsKICAgICAgICAgICAgUFlUSE9O UEFUSD0iJHtldmFsdWF0ZWRfUFlUSE9OUEFUSH0iIHRyaWFsICQoW1sgIiR7UFlUSE9OX1RFU1Rf VkVSQk9TSVRZfSIgLWdlIDQgXV0gJiYgZWNobyAtLXNwZXcpICIkQCIgfHwgcmV0dXJuICIkPyI7 CiAgICAgICAgZWxzZQogICAgICAgICAgICBlY2hvICR7X0JPTER9dHJpYWwgJChbWyAiJHtQWVRI T05fVEVTVF9WRVJCT1NJVFl9IiAtZ2UgNCBdXSAmJiBlY2hvIC0tc3BldykgIiRAIiR7X05PUk1B TH07CiAgICAgICAgICAgIHRyaWFsICQoW1sgIiR7UFlUSE9OX1RFU1RfVkVSQk9TSVRZfSIgLWdl IDQgXV0gJiYgZWNobyAtLXNwZXcpICIkQCIgfHwgcmV0dXJuICIkPyI7CiAgICAgICAgZmk7CiAg ICAgICAgX1BZVEhPTl9URVNUX0ZVTkNUSU9OPSJweXRob25fZXhlY3V0ZV90cmlhbCIgX3B5dGhv bl90ZXN0X2hvb2sgcG9zdAogICAgfTsKICAgIGlmIF9weXRob25fcGFja2FnZV9zdXBwb3J0aW5n X2luc3RhbGxhdGlvbl9mb3JfbXVsdGlwbGVfcHl0aG9uX2FiaXM7IHRoZW4KICAgICAgICBweXRo b25fZXhlY3V0ZV9mdW5jdGlvbiAke3NlcGFyYXRlX2J1aWxkX2RpcnM6Ky1zfSBweXRob25fdGVz dF9mdW5jdGlvbiAiJEAiOwogICAgZWxzZQogICAgICAgIGlmIFtbIC1uICIke3NlcGFyYXRlX2J1 aWxkX2RpcnN9IiBdXTsgdGhlbgogICAgICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6IEludmFs aWQgdXNhZ2UiOwogICAgICAgIGZpOwogICAgICAgIHB5dGhvbl90ZXN0X2Z1bmN0aW9uICIkQCIg fHwgZGllICJUZXN0aW5nIGZhaWxlZCI7CiAgICBmaTsKICAgIHVuc2V0IC1mIHB5dGhvbl90ZXN0 X2Z1bmN0aW9uCn0KcHl0aG9uX2dlbmVyYXRlX3dyYXBwZXJfc2NyaXB0cyAoKSAKeyAKICAgIGlm IFtbICIke0VCVUlMRF9QSEFTRX0iICE9ICJpbnN0YWxsIiBdXTsgdGhlbgogICAgICAgIGRpZSAi JHtGVU5DTkFNRX0oKSBjYW4gYmUgdXNlZCBvbmx5IGluIHNyY19pbnN0YWxsKCkgcGhhc2UiOwog ICAgZmk7CiAgICBpZiAhIF9weXRob25fcGFja2FnZV9zdXBwb3J0aW5nX2luc3RhbGxhdGlvbl9m b3JfbXVsdGlwbGVfcHl0aG9uX2FiaXM7IHRoZW4KICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCkg Y2Fubm90IGJlIHVzZWQgaW4gZWJ1aWxkcyBvZiBwYWNrYWdlcyBub3Qgc3VwcG9ydGluZyBpbnN0 YWxsYXRpb24gZm9yIG11bHRpcGxlIFB5dGhvbiBBQklzIjsKICAgIGZpOwogICAgX3B5dGhvbl9j aGVja19weXRob25fcGtnX3NldHVwX2V4ZWN1dGlvbjsKICAgIF9weXRob25faW5pdGlhbGl6ZV9w cmVmaXhfdmFyaWFibGVzOwogICAgbG9jYWwgZXNlbGVjdF9weXRob25fb3B0aW9uIGZpbGUgZm9y Y2U9IjAiIHF1aWV0PSIwIiBQWVRIT05fQUJJIFBZVEhPTl9BQklTX2xpc3QgcHl0aG9uMl9lbmFi bGVkPSIwIiBweXRob24zX2VuYWJsZWQ9IjAiIHJlc3BlY3RfRVBZVEhPTj0iMCI7CiAgICB3aGls ZSAoKCQjKSk7IGRvCiAgICAgICAgY2FzZSAiJDEiIGluIAogICAgICAgICAgICAtRSB8IC0tcmVz cGVjdC1FUFlUSE9OKQogICAgICAgICAgICAgICAgcmVzcGVjdF9FUFlUSE9OPSIxIgogICAgICAg ICAgICA7OwogICAgICAgICAgICAtZiB8IC0tZm9yY2UpCiAgICAgICAgICAgICAgICBmb3JjZT0i MSIKICAgICAgICAgICAgOzsKICAgICAgICAgICAgLXEgfCAtLXF1aWV0KQogICAgICAgICAgICAg ICAgcXVpZXQ9IjEiCiAgICAgICAgICAgIDs7CiAgICAgICAgICAgIC0tKQogICAgICAgICAgICAg ICAgc2hpZnQ7CiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICA7OwogICAgICAgICAg ICAtKikKICAgICAgICAgICAgICAgIGRpZSAiJHtGVU5DTkFNRX0oKTogVW5yZWNvZ25pemVkIG9w dGlvbiAnJDEnIgogICAgICAgICAgICA7OwogICAgICAgICAgICAqKQogICAgICAgICAgICAgICAg YnJlYWsKICAgICAgICAgICAgOzsKICAgICAgICBlc2FjOwogICAgICAgIHNoaWZ0OwogICAgZG9u ZTsKICAgIGlmIFtbICIkIyIgLWVxIDAgXV07IHRoZW4KICAgICAgICBkaWUgIiR7RlVOQ05BTUV9 KCk6IE1pc3NpbmcgYXJndW1lbnRzIjsKICAgIGZpOwogICAgX3B5dGhvbl9jYWxjdWxhdGVfUFlU SE9OX0FCSVM7CiAgICBmb3IgUFlUSE9OX0FCSSBpbiAiJHtfQ1BZVEhPTjJfR0xPQkFMTFlfU1VQ UE9SVEVEX0FCSVNbQF19IjsKICAgIGRvCiAgICAgICAgaWYgaGFzICIke1BZVEhPTl9BQkl9IiAk e1BZVEhPTl9BQklTfTsgdGhlbgogICAgICAgICAgICBweXRob24yX2VuYWJsZWQ9IjEiOwogICAg ICAgIGZpOwogICAgZG9uZTsKICAgIGZvciBQWVRIT05fQUJJIGluICIke19DUFlUSE9OM19HTE9C QUxMWV9TVVBQT1JURURfQUJJU1tAXX0iOwogICAgZG8KICAgICAgICBpZiBoYXMgIiR7UFlUSE9O X0FCSX0iICR7UFlUSE9OX0FCSVN9OyB0aGVuCiAgICAgICAgICAgIHB5dGhvbjNfZW5hYmxlZD0i MSI7CiAgICAgICAgZmk7CiAgICBkb25lOwogICAgaWYgW1sgIiR7cHl0aG9uMl9lbmFibGVkfSIg PT0gIjEiICYmICIke3B5dGhvbjNfZW5hYmxlZH0iID09ICIxIiBdXTsgdGhlbgogICAgICAgIGVz ZWxlY3RfcHl0aG9uX29wdGlvbj07CiAgICBlbHNlCiAgICAgICAgaWYgW1sgIiR7cHl0aG9uMl9l bmFibGVkfSIgPT0gIjEiICYmICIke3B5dGhvbjNfZW5hYmxlZH0iID09ICIwIiBdXTsgdGhlbgog ICAgICAgICAgICBlc2VsZWN0X3B5dGhvbl9vcHRpb249Ii0tcHl0aG9uMiI7CiAgICAgICAgZWxz ZQogICAgICAgICAgICBpZiBbWyAiJHtweXRob24yX2VuYWJsZWR9IiA9PSAiMCIgJiYgIiR7cHl0 aG9uM19lbmFibGVkfSIgPT0gIjEiIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBlc2VsZWN0X3B5 dGhvbl9vcHRpb249Ii0tcHl0aG9uMyI7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg IGRpZSAiJHtGVU5DTkFNRX0oKTogVW5zdXBwb3J0ZWQgZW52aXJvbm1lbnQiOwogICAgICAgICAg ICBmaTsKICAgICAgICBmaTsKICAgIGZpOwogICAgUFlUSE9OX0FCSVNfbGlzdD0iJCgiJChQWVRI T04gLWYpIiAtYyAicHJpbnQoJywgJy5qb2luKCdcIiVzXCInICUgeCBmb3IgeCBpbiByZXZlcnNl ZCgnJHtQWVRIT05fQUJJU30nLnNwbGl0KCkpKSkiKSI7CiAgICBmb3IgZmlsZSBpbiAiJEAiOwog ICAgZG8KICAgICAgICBpZiBbWyAtZiAiJHtmaWxlfSIgJiYgIiR7Zm9yY2V9IiA9PSAiMCIgXV07 IHRoZW4KICAgICAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpOiAnJHtmaWxlfScgYWxyZWFkeSBl eGlzdHMiOwogICAgICAgIGZpOwogICAgICAgIGlmIFtbICIke3F1aWV0fSIgPT0gIjAiIF1dOyB0 aGVuCiAgICAgICAgICAgIGVpbmZvICJHZW5lcmF0aW5nICcke2ZpbGUjJHtFRCUvfX0nIHdyYXBw ZXIgc2NyaXB0IjsKICAgICAgICBmaTsKICAgICAgICBjYXQgPiAiJHtmaWxlfSIgIDw8RU9GCiMh L3Vzci9iaW4vZW52IHB5dGhvbgojIEdlbnRvbyAnJHtmaWxlIyMqL30nIHdyYXBwZXIgc2NyaXB0 IGdlbmVyYXRlZCBieSBweXRob25fZ2VuZXJhdGVfd3JhcHBlcl9zY3JpcHRzKCkKCmltcG9ydCBv cwppbXBvcnQgcmUKaW1wb3J0IHN1YnByb2Nlc3MKaW1wb3J0IHN5cwoKY3B5dGhvbl9BQklfcmUg PSByZS5jb21waWxlKHIiXihcZCtcLlxkKykkIikKanl0aG9uX0FCSV9yZSA9IHJlLmNvbXBpbGUo ciJeKFxkK1wuXGQrKS1qeXRob24kIikKcHlweV9BQklfcmUgPSByZS5jb21waWxlKHIiXlxkK1wu XGQrLXB5cHktKFxkK1wuXGQrKSQiKQpjcHl0aG9uX2ludGVycHJldGVyX3JlID0gcmUuY29tcGls ZShyIl5weXRob24oXGQrXC5cZCspJCIpCmp5dGhvbl9pbnRlcnByZXRlcl9yZSA9IHJlLmNvbXBp bGUociJeanl0aG9uKFxkK1wuXGQrKSQiKQpweXB5X2ludGVycHJldGVyX3JlID0gcmUuY29tcGls ZShyIl5weXB5LWMoXGQrXC5cZCspJCIpCmNweXRob25fc2hlYmFuZ19yZSA9IHJlLmNvbXBpbGUo ciJeIyFbIFx0XSooPzoke0VQUkVGSVh9L3Vzci9iaW4vcHl0aG9ufCg/OiR7RVBSRUZJWH0pPy91 c3IvYmluL2VudlsgXHRdKyg/OiR7RVBSRUZJWH0vdXNyL2Jpbi8pP3B5dGhvbikiKQpweXRob25f c2hlYmFuZ19vcHRpb25zX3JlID0gcmUuY29tcGlsZShyIl4jIVsgXHRdKiR7RVBSRUZJWH0vdXNy L2Jpbi8oPzpqeXRob258cHlweS1jfHB5dGhvbikoPzpcZCsoPzpcLlxkKyk/KT9bIFx0XSsoLVxT KSIpCnB5dGhvbl92ZXJpZmljYXRpb25fb3V0cHV0X3JlID0gcmUuY29tcGlsZSgiXkdFTlRPT19Q WVRIT05fVEFSR0VUX1NDUklQVF9QQVRIIHN1cHBvcnRlZFxuJCIpCgpweXB5X3ZlcnNpb25zX21h cHBpbmcgPSB7CgkiMS41IjogIjIuNyIKfQoKZGVmIGdldF9QWVRIT05fQUJJKHB5dGhvbl9pbnRl cnByZXRlcik6CgljcHl0aG9uX21hdGNoZWQgPSBjcHl0aG9uX2ludGVycHJldGVyX3JlLm1hdGNo KHB5dGhvbl9pbnRlcnByZXRlcikKCWp5dGhvbl9tYXRjaGVkID0ganl0aG9uX2ludGVycHJldGVy X3JlLm1hdGNoKHB5dGhvbl9pbnRlcnByZXRlcikKCXB5cHlfbWF0Y2hlZCA9IHB5cHlfaW50ZXJw cmV0ZXJfcmUubWF0Y2gocHl0aG9uX2ludGVycHJldGVyKQoJaWYgY3B5dGhvbl9tYXRjaGVkIGlz IG5vdCBOb25lOgoJCVBZVEhPTl9BQkkgPSBjcHl0aG9uX21hdGNoZWQuZ3JvdXAoMSkKCWVsaWYg anl0aG9uX21hdGNoZWQgaXMgbm90IE5vbmU6CgkJUFlUSE9OX0FCSSA9IGp5dGhvbl9tYXRjaGVk Lmdyb3VwKDEpICsgIi1qeXRob24iCgllbGlmIHB5cHlfbWF0Y2hlZCBpcyBub3QgTm9uZToKCQlQ WVRIT05fQUJJID0gcHlweV92ZXJzaW9uc19tYXBwaW5nW3B5cHlfbWF0Y2hlZC5ncm91cCgxKV0g KyAiLXB5cHktIiArIHB5cHlfbWF0Y2hlZC5ncm91cCgxKQoJZWxzZToKCQlQWVRIT05fQUJJID0g Tm9uZQoJcmV0dXJuIFBZVEhPTl9BQkkKCmRlZiBnZXRfcHl0aG9uX2ludGVycHJldGVyKFBZVEhP Tl9BQkkpOgoJY3B5dGhvbl9tYXRjaGVkID0gY3B5dGhvbl9BQklfcmUubWF0Y2goUFlUSE9OX0FC SSkKCWp5dGhvbl9tYXRjaGVkID0ganl0aG9uX0FCSV9yZS5tYXRjaChQWVRIT05fQUJJKQoJcHlw eV9tYXRjaGVkID0gcHlweV9BQklfcmUubWF0Y2goUFlUSE9OX0FCSSkKCWlmIGNweXRob25fbWF0 Y2hlZCBpcyBub3QgTm9uZToKCQlweXRob25faW50ZXJwcmV0ZXIgPSAicHl0aG9uIiArIGNweXRo b25fbWF0Y2hlZC5ncm91cCgxKQoJZWxpZiBqeXRob25fbWF0Y2hlZCBpcyBub3QgTm9uZToKCQlw eXRob25faW50ZXJwcmV0ZXIgPSAianl0aG9uIiArIGp5dGhvbl9tYXRjaGVkLmdyb3VwKDEpCgll bGlmIHB5cHlfbWF0Y2hlZCBpcyBub3QgTm9uZToKCQlweXRob25faW50ZXJwcmV0ZXIgPSAicHlw eS1jIiArIHB5cHlfbWF0Y2hlZC5ncm91cCgxKQoJZWxzZToKCQlweXRob25faW50ZXJwcmV0ZXIg PSBOb25lCglyZXR1cm4gcHl0aG9uX2ludGVycHJldGVyCgpFT0YKCiAgICAgICAgaWYgW1sgIiQ/ IiAhPSAiMCIgXV07IHRoZW4KICAgICAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpOiBHZW5lcmF0 aW9uIG9mICckMScgZmFpbGVkIjsKICAgICAgICBmaTsKICAgICAgICBpZiBbWyAiJHtyZXNwZWN0 X0VQWVRIT059IiA9PSAiMSIgXV07IHRoZW4KICAgICAgICAgICAgY2F0ID4+ICIke2ZpbGV9IiAg PDxFT0YKcHl0aG9uX2ludGVycHJldGVyID0gb3MuZW52aXJvbi5nZXQoIkVQWVRIT04iKQppZiBw eXRob25faW50ZXJwcmV0ZXI6CglQWVRIT05fQUJJID0gZ2V0X1BZVEhPTl9BQkkocHl0aG9uX2lu dGVycHJldGVyKQoJaWYgUFlUSE9OX0FCSSBpcyBOb25lOgoJCXN5cy5zdGRlcnIud3JpdGUoIiVz OiBFUFlUSE9OIHZhcmlhYmxlIGhhcyB1bnJlY29nbml6ZWQgdmFsdWUgJyVzJ1xuIiAlIChzeXMu YXJndlswXSwgcHl0aG9uX2ludGVycHJldGVyKSkKCQlzeXMuZXhpdCgxKQplbHNlOgoJdHJ5OgoJ CWVudmlyb25tZW50ID0gb3MuZW52aXJvbi5jb3B5KCkKCQllbnZpcm9ubWVudFsiUk9PVCJdID0g Ii8iCgkJZXNlbGVjdF9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihbIiR7RVBSRUZJWH0vdXNy L2Jpbi9lc2VsZWN0IiwgInB5dGhvbiIsICJzaG93IiR7ZXNlbGVjdF9weXRob25fb3B0aW9uOiss ICQoZWNobyAiXCIiKX0ke2VzZWxlY3RfcHl0aG9uX29wdGlvbn0ke2VzZWxlY3RfcHl0aG9uX29w dGlvbjorJChlY2hvICJcIiIpfV0sIGVudj1lbnZpcm9ubWVudCwgc3Rkb3V0PXN1YnByb2Nlc3Mu UElQRSkKCQlpZiBlc2VsZWN0X3Byb2Nlc3Mud2FpdCgpICE9IDA6CgkJCXJhaXNlIFZhbHVlRXJy b3IKCWV4Y2VwdCAoT1NFcnJvciwgVmFsdWVFcnJvcik6CgkJc3lzLnN0ZGVyci53cml0ZSgiJXM6 IEV4ZWN1dGlvbiBvZiAnZXNlbGVjdCBweXRob24gc2hvdyR7ZXNlbGVjdF9weXRob25fb3B0aW9u OisgfSR7ZXNlbGVjdF9weXRob25fb3B0aW9ufScgZmFpbGVkXG4iICUgc3lzLmFyZ3ZbMF0pCgkJ c3lzLmV4aXQoMSkKCglweXRob25faW50ZXJwcmV0ZXIgPSBlc2VsZWN0X3Byb2Nlc3Muc3Rkb3V0 LnJlYWQoKQoJaWYgbm90IGlzaW5zdGFuY2UocHl0aG9uX2ludGVycHJldGVyLCBzdHIpOgoJCSMg UHl0aG9uIDMKCQlweXRob25faW50ZXJwcmV0ZXIgPSBweXRob25faW50ZXJwcmV0ZXIuZGVjb2Rl KCkKCXB5dGhvbl9pbnRlcnByZXRlciA9IHB5dGhvbl9pbnRlcnByZXRlci5yc3RyaXAoIlxuIikK CglQWVRIT05fQUJJID0gZ2V0X1BZVEhPTl9BQkkocHl0aG9uX2ludGVycHJldGVyKQoJaWYgUFlU SE9OX0FCSSBpcyBOb25lOgoJCXN5cy5zdGRlcnIud3JpdGUoIiVzOiAnZXNlbGVjdCBweXRob24g c2hvdyR7ZXNlbGVjdF9weXRob25fb3B0aW9uOisgfSR7ZXNlbGVjdF9weXRob25fb3B0aW9ufScg cHJpbnRlZCB1bnJlY29nbml6ZWQgdmFsdWUgJyVzJ1xuIiAlIChzeXMuYXJndlswXSwgcHl0aG9u X2ludGVycHJldGVyKSkKCQlzeXMuZXhpdCgxKQoKd3JhcHBlcl9zY3JpcHRfcGF0aCA9IG9zLnBh dGgucmVhbHBhdGgoc3lzLmFyZ3ZbMF0pCnRhcmdldF9leGVjdXRhYmxlX3BhdGggPSAiJXMtJXMi ICUgKHdyYXBwZXJfc2NyaXB0X3BhdGgsIFBZVEhPTl9BQkkpCmlmIG5vdCBvcy5wYXRoLmV4aXN0 cyh0YXJnZXRfZXhlY3V0YWJsZV9wYXRoKToKCXN5cy5zdGRlcnIud3JpdGUoIiVzOiAnJXMnIGRv ZXMgbm90IGV4aXN0XG4iICUgKHN5cy5hcmd2WzBdLCB0YXJnZXRfZXhlY3V0YWJsZV9wYXRoKSkK CXN5cy5leGl0KDEpCkVPRgoKICAgICAgICAgICAgaWYgW1sgIiQ/IiAhPSAiMCIgXV07IHRoZW4K ICAgICAgICAgICAgICAgIGRpZSAiJHtGVU5DTkFNRX0oKTogR2VuZXJhdGlvbiBvZiAnJDEnIGZh aWxlZCI7CiAgICAgICAgICAgIGZpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgY2F0ID4+ICIk e2ZpbGV9IiAgPDxFT0YKdHJ5OgoJZW52aXJvbm1lbnQgPSBvcy5lbnZpcm9uLmNvcHkoKQoJZW52 aXJvbm1lbnRbIlJPT1QiXSA9ICIvIgoJZXNlbGVjdF9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3Bl bihbIiR7RVBSRUZJWH0vdXNyL2Jpbi9lc2VsZWN0IiwgInB5dGhvbiIsICJzaG93IiR7ZXNlbGVj dF9weXRob25fb3B0aW9uOissICQoZWNobyAiXCIiKX0ke2VzZWxlY3RfcHl0aG9uX29wdGlvbn0k e2VzZWxlY3RfcHl0aG9uX29wdGlvbjorJChlY2hvICJcIiIpfV0sIGVudj1lbnZpcm9ubWVudCwg c3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKCWlmIGVzZWxlY3RfcHJvY2Vzcy53YWl0KCkgIT0gMDoK CQlyYWlzZSBWYWx1ZUVycm9yCmV4Y2VwdCAoT1NFcnJvciwgVmFsdWVFcnJvcik6CglzeXMuc3Rk ZXJyLndyaXRlKCIlczogRXhlY3V0aW9uIG9mICdlc2VsZWN0IHB5dGhvbiBzaG93JHtlc2VsZWN0 X3B5dGhvbl9vcHRpb246KyB9JHtlc2VsZWN0X3B5dGhvbl9vcHRpb259JyBmYWlsZWRcbiIgJSBz eXMuYXJndlswXSkKCXN5cy5leGl0KDEpCgpweXRob25faW50ZXJwcmV0ZXIgPSBlc2VsZWN0X3By b2Nlc3Muc3Rkb3V0LnJlYWQoKQppZiBub3QgaXNpbnN0YW5jZShweXRob25faW50ZXJwcmV0ZXIs IHN0cik6CgkjIFB5dGhvbiAzCglweXRob25faW50ZXJwcmV0ZXIgPSBweXRob25faW50ZXJwcmV0 ZXIuZGVjb2RlKCkKcHl0aG9uX2ludGVycHJldGVyID0gcHl0aG9uX2ludGVycHJldGVyLnJzdHJp cCgiXG4iKQoKUFlUSE9OX0FCSSA9IGdldF9QWVRIT05fQUJJKHB5dGhvbl9pbnRlcnByZXRlcikK aWYgUFlUSE9OX0FCSSBpcyBOb25lOgoJc3lzLnN0ZGVyci53cml0ZSgiJXM6ICdlc2VsZWN0IHB5 dGhvbiBzaG93JHtlc2VsZWN0X3B5dGhvbl9vcHRpb246KyB9JHtlc2VsZWN0X3B5dGhvbl9vcHRp b259JyBwcmludGVkIHVucmVjb2duaXplZCB2YWx1ZSAnJXMnXG4iICUgKHN5cy5hcmd2WzBdLCBw eXRob25faW50ZXJwcmV0ZXIpKQoJc3lzLmV4aXQoMSkKCndyYXBwZXJfc2NyaXB0X3BhdGggPSBv cy5wYXRoLnJlYWxwYXRoKHN5cy5hcmd2WzBdKQpmb3IgUFlUSE9OX0FCSSBpbiBbUFlUSE9OX0FC SSwgJHtQWVRIT05fQUJJU19saXN0fV06Cgl0YXJnZXRfZXhlY3V0YWJsZV9wYXRoID0gIiVzLSVz IiAlICh3cmFwcGVyX3NjcmlwdF9wYXRoLCBQWVRIT05fQUJJKQoJaWYgb3MucGF0aC5leGlzdHMo dGFyZ2V0X2V4ZWN1dGFibGVfcGF0aCk6CgkJYnJlYWsKZWxzZToKCXN5cy5zdGRlcnIud3JpdGUo IiVzOiBObyB0YXJnZXQgc2NyaXB0IGV4aXN0cyBmb3IgJyVzJ1xuIiAlIChzeXMuYXJndlswXSwg d3JhcHBlcl9zY3JpcHRfcGF0aCkpCglzeXMuZXhpdCgxKQoKcHl0aG9uX2ludGVycHJldGVyID0g Z2V0X3B5dGhvbl9pbnRlcnByZXRlcihQWVRIT05fQUJJKQppZiBweXRob25faW50ZXJwcmV0ZXIg aXMgTm9uZToKCXN5cy5zdGRlcnIud3JpdGUoIiVzOiBVbnJlY29nbml6ZWQgUHl0aG9uIEFCSSAn JXMnXG4iICUgKHN5cy5hcmd2WzBdLCBQWVRIT05fQUJJKSkKCXN5cy5leGl0KDEpCkVPRgoKICAg ICAgICAgICAgaWYgW1sgIiQ/IiAhPSAiMCIgXV07IHRoZW4KICAgICAgICAgICAgICAgIGRpZSAi JHtGVU5DTkFNRX0oKTogR2VuZXJhdGlvbiBvZiAnJDEnIGZhaWxlZCI7CiAgICAgICAgICAgIGZp OwogICAgICAgIGZpCiAgICAgICAgY2F0ID4+ICIke2ZpbGV9IiAgPDxFT0YKCnRhcmdldF9leGVj dXRhYmxlID0gb3Blbih0YXJnZXRfZXhlY3V0YWJsZV9wYXRoLCAicmIiKQp0YXJnZXRfZXhlY3V0 YWJsZV9maXJzdF9saW5lID0gdGFyZ2V0X2V4ZWN1dGFibGUucmVhZGxpbmUoKQp0YXJnZXRfZXhl Y3V0YWJsZS5jbG9zZSgpCmlmIG5vdCBpc2luc3RhbmNlKHRhcmdldF9leGVjdXRhYmxlX2ZpcnN0 X2xpbmUsIHN0cik6CgkjIFB5dGhvbiAzCgl0YXJnZXRfZXhlY3V0YWJsZV9maXJzdF9saW5lID0g dGFyZ2V0X2V4ZWN1dGFibGVfZmlyc3RfbGluZS5kZWNvZGUoInV0Zl84IiwgInJlcGxhY2UiKQoK b3B0aW9ucyA9IFtdCnB5dGhvbl9zaGViYW5nX29wdGlvbnNfbWF0Y2hlZCA9IHB5dGhvbl9zaGVi YW5nX29wdGlvbnNfcmUubWF0Y2godGFyZ2V0X2V4ZWN1dGFibGVfZmlyc3RfbGluZSkKaWYgcHl0 aG9uX3NoZWJhbmdfb3B0aW9uc19tYXRjaGVkIGlzIG5vdCBOb25lOgoJb3B0aW9ucyA9IFtweXRo b25fc2hlYmFuZ19vcHRpb25zX21hdGNoZWQuZ3JvdXAoMSldCgpjcHl0aG9uX3NoZWJhbmdfbWF0 Y2hlZCA9IGNweXRob25fc2hlYmFuZ19yZS5tYXRjaCh0YXJnZXRfZXhlY3V0YWJsZV9maXJzdF9s aW5lKQoKaWYgY3B5dGhvbl9zaGViYW5nX21hdGNoZWQgaXMgbm90IE5vbmU6Cgl0cnk6CgkJcHl0 aG9uX2ludGVycHJldGVyX3BhdGggPSAiJHtFUFJFRklYfS91c3IvYmluLyVzIiAlIHB5dGhvbl9p bnRlcnByZXRlcgoJCW9zLmVudmlyb25bIkdFTlRPT19QWVRIT05fVEFSR0VUX1NDUklQVF9QQVRI X1ZFUklGSUNBVElPTiJdID0gIjEiCgkJcHl0aG9uX3ZlcmlmaWNhdGlvbl9wcm9jZXNzID0gc3Vi cHJvY2Vzcy5Qb3BlbihbcHl0aG9uX2ludGVycHJldGVyX3BhdGgsICItYyIsICJwYXNzIl0sIHN0 ZG91dD1zdWJwcm9jZXNzLlBJUEUpCgkJZGVsIG9zLmVudmlyb25bIkdFTlRPT19QWVRIT05fVEFS R0VUX1NDUklQVF9QQVRIX1ZFUklGSUNBVElPTiJdCgkJaWYgcHl0aG9uX3ZlcmlmaWNhdGlvbl9w cm9jZXNzLndhaXQoKSAhPSAwOgoJCQlyYWlzZSBWYWx1ZUVycm9yCgoJCXB5dGhvbl92ZXJpZmlj YXRpb25fb3V0cHV0ID0gcHl0aG9uX3ZlcmlmaWNhdGlvbl9wcm9jZXNzLnN0ZG91dC5yZWFkKCkK CQlpZiBub3QgaXNpbnN0YW5jZShweXRob25fdmVyaWZpY2F0aW9uX291dHB1dCwgc3RyKToKCQkJ IyBQeXRob24gMwoJCQlweXRob25fdmVyaWZpY2F0aW9uX291dHB1dCA9IHB5dGhvbl92ZXJpZmlj YXRpb25fb3V0cHV0LmRlY29kZSgpCgoJCWlmIG5vdCBweXRob25fdmVyaWZpY2F0aW9uX291dHB1 dF9yZS5tYXRjaChweXRob25fdmVyaWZpY2F0aW9uX291dHB1dCk6CgkJCXJhaXNlIFZhbHVlRXJy b3IKCgkJaWYgY3B5dGhvbl9pbnRlcnByZXRlcl9yZS5tYXRjaChweXRob25faW50ZXJwcmV0ZXIp IGlzIG5vdCBOb25lOgoJCQlvcy5lbnZpcm9uWyJHRU5UT09fUFlUSE9OX1BST0NFU1NfTkFNRSJd ID0gb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkKCQkJb3MuZW52aXJvblsiR0VOVE9PX1BZ VEhPTl9XUkFQUEVSX1NDUklQVF9QQVRIIl0gPSBzeXMuYXJndlswXQoJCQlvcy5lbnZpcm9uWyJH RU5UT09fUFlUSE9OX1RBUkdFVF9TQ1JJUFRfUEFUSCJdID0gdGFyZ2V0X2V4ZWN1dGFibGVfcGF0 aAoKCQlpZiBoYXNhdHRyKG9zLCAiZXhlY3YiKToKCQkJb3MuZXhlY3YocHl0aG9uX2ludGVycHJl dGVyX3BhdGgsIFtweXRob25faW50ZXJwcmV0ZXJfcGF0aF0gKyBvcHRpb25zICsgc3lzLmFyZ3Yp CgkJZWxzZToKCQkJc3lzLmV4aXQoc3VicHJvY2Vzcy5Qb3BlbihbcHl0aG9uX2ludGVycHJldGVy X3BhdGhdICsgb3B0aW9ucyArIHN5cy5hcmd2KS53YWl0KCkpCglleGNlcHQgKEtleWJvYXJkSW50 ZXJydXB0LCBTeXN0ZW1FeGl0KToKCQlyYWlzZQoJZXhjZXB0OgoJCXBhc3MKCWZvciB2YXJpYWJs ZSBpbiAoIkdFTlRPT19QWVRIT05fUFJPQ0VTU19OQU1FIiwgIkdFTlRPT19QWVRIT05fV1JBUFBF Ul9TQ1JJUFRfUEFUSCIsICJHRU5UT09fUFlUSE9OX1RBUkdFVF9TQ1JJUFRfUEFUSCIsICJHRU5U T09fUFlUSE9OX1RBUkdFVF9TQ1JJUFRfUEFUSF9WRVJJRklDQVRJT04iKToKCQlpZiB2YXJpYWJs ZSBpbiBvcy5lbnZpcm9uOgoJCQlkZWwgb3MuZW52aXJvblt2YXJpYWJsZV0KCmlmIGhhc2F0dHIo b3MsICJleGVjdiIpOgoJb3MuZXhlY3YodGFyZ2V0X2V4ZWN1dGFibGVfcGF0aCwgc3lzLmFyZ3Yp CmVsc2U6CglzeXMuZXhpdChzdWJwcm9jZXNzLlBvcGVuKFt0YXJnZXRfZXhlY3V0YWJsZV9wYXRo XSArIHN5cy5hcmd2WzE6XSkud2FpdCgpKQpFT0YKCiAgICAgICAgaWYgW1sgIiQ/IiAhPSAiMCIg XV07IHRoZW4KICAgICAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpOiBHZW5lcmF0aW9uIG9mICck MScgZmFpbGVkIjsKICAgICAgICBmaTsKICAgICAgICBmcGVybXMgK3ggIiR7ZmlsZSMke0VEJS99 fSIgfHwgZGllICJmcGVybXMgJyR7ZmlsZX0nIGZhaWxlZCI7CiAgICBkb25lCn0KcHl0aG9uX2dl dF9pbXBsZW1lbnRhdGlvbiAoKSAKeyAKICAgIF9weXRob25fY2hlY2tfcHl0aG9uX3BrZ19zZXR1 cF9leGVjdXRpb247CiAgICBsb2NhbCBmaW5hbF9BQkk9IjAiIFBZVEhPTl9BQkk9IiR7UFlUSE9O X0FCSX0iOwogICAgd2hpbGUgKCgkIykpOyBkbwogICAgICAgIGNhc2UgIiQxIiBpbiAKICAgICAg ICAgICAgLWYgfCAtLWZpbmFsLUFCSSkKICAgICAgICAgICAgICAgIGZpbmFsX0FCST0iMSIKICAg ICAgICAgICAgOzsKICAgICAgICAgICAgLSopCiAgICAgICAgICAgICAgICBkaWUgIiR7RlVOQ05B TUV9KCk6IFVucmVjb2duaXplZCBvcHRpb24gJyQxJyIKICAgICAgICAgICAgOzsKICAgICAgICAg ICAgKikKICAgICAgICAgICAgICAgIGRpZSAiJHtGVU5DTkFNRX0oKTogSW52YWxpZCB1c2FnZSIK ICAgICAgICAgICAgOzsKICAgICAgICBlc2FjOwogICAgICAgIHNoaWZ0OwogICAgZG9uZTsKICAg IGlmIFtbICIke2ZpbmFsX0FCSX0iID09ICIxIiBdXTsgdGhlbgogICAgICAgIGlmICEgX3B5dGhv bl9wYWNrYWdlX3N1cHBvcnRpbmdfaW5zdGFsbGF0aW9uX2Zvcl9tdWx0aXBsZV9weXRob25fYWJp czsgdGhlbgogICAgICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6ICctLWZpbmFsLUFCSScgb3B0 aW9uIGNhbm5vdCBiZSB1c2VkIGluIGVidWlsZHMgb2YgcGFja2FnZXMgbm90IHN1cHBvcnRpbmcg aW5zdGFsbGF0aW9uIGZvciBtdWx0aXBsZSBQeXRob24gQUJJcyI7CiAgICAgICAgZmk7CiAgICAg ICAgUFlUSE9OX0FCST0iJChQWVRIT04gLWYgLS1BQkkpIjsKICAgIGVsc2UKICAgICAgICBpZiBf cHl0aG9uX3BhY2thZ2Vfc3VwcG9ydGluZ19pbnN0YWxsYXRpb25fZm9yX211bHRpcGxlX3B5dGhv bl9hYmlzOyB0aGVuCiAgICAgICAgICAgIGlmICEgX3B5dGhvbl9hYmktc3BlY2lmaWNfbG9jYWxf c2NvcGU7IHRoZW4KICAgICAgICAgICAgICAgIGRpZSAiJHtGVU5DTkFNRX0oKSBzaG91bGQgYmUg dXNlZCBpbiBBQkktc3BlY2lmaWMgbG9jYWwgc2NvcGUiOwogICAgICAgICAgICBmaTsKICAgICAg ICBlbHNlCiAgICAgICAgICAgIFBZVEhPTl9BQkk9IiR7UFlUSE9OX0FCSTotJChQWVRIT04gLS1B QkkpfSI7CiAgICAgICAgZmk7CiAgICBmaTsKICAgIGVjaG8gIiQoX3B5dGhvbl9nZXRfaW1wbGVt ZW50YXRpb24gIiR7UFlUSE9OX0FCSX0iKSIKfQpweXRob25fZ2V0X2ltcGxlbWVudGF0aW9uX2Fu ZF92ZXJzaW9uICgpIAp7IAogICAgX3B5dGhvbl9jaGVja19weXRob25fcGtnX3NldHVwX2V4ZWN1 dGlvbjsKICAgIGxvY2FsIGZpbmFsX0FCST0iMCIgUFlUSE9OX0FCST0iJHtQWVRIT05fQUJJfSI7 CiAgICB3aGlsZSAoKCQjKSk7IGRvCiAgICAgICAgY2FzZSAiJDEiIGluIAogICAgICAgICAgICAt ZiB8IC0tZmluYWwtQUJJKQogICAgICAgICAgICAgICAgZmluYWxfQUJJPSIxIgogICAgICAgICAg ICA7OwogICAgICAgICAgICAtKikKICAgICAgICAgICAgICAgIGRpZSAiJHtGVU5DTkFNRX0oKTog VW5yZWNvZ25pemVkIG9wdGlvbiAnJDEnIgogICAgICAgICAgICA7OwogICAgICAgICAgICAqKQog ICAgICAgICAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpOiBJbnZhbGlkIHVzYWdlIgogICAgICAg ICAgICA7OwogICAgICAgIGVzYWM7CiAgICAgICAgc2hpZnQ7CiAgICBkb25lOwogICAgaWYgW1sg IiR7ZmluYWxfQUJJfSIgPT0gIjEiIF1dOyB0aGVuCiAgICAgICAgaWYgISBfcHl0aG9uX3BhY2th Z2Vfc3VwcG9ydGluZ19pbnN0YWxsYXRpb25fZm9yX211bHRpcGxlX3B5dGhvbl9hYmlzOyB0aGVu CiAgICAgICAgICAgIGRpZSAiJHtGVU5DTkFNRX0oKTogJy0tZmluYWwtQUJJJyBvcHRpb24gY2Fu bm90IGJlIHVzZWQgaW4gZWJ1aWxkcyBvZiBwYWNrYWdlcyBub3Qgc3VwcG9ydGluZyBpbnN0YWxs YXRpb24gZm9yIG11bHRpcGxlIFB5dGhvbiBBQklzIjsKICAgICAgICBmaTsKICAgICAgICBQWVRI T05fQUJJPSIkKFBZVEhPTiAtZiAtLUFCSSkiOwogICAgZWxzZQogICAgICAgIGlmIF9weXRob25f cGFja2FnZV9zdXBwb3J0aW5nX2luc3RhbGxhdGlvbl9mb3JfbXVsdGlwbGVfcHl0aG9uX2FiaXM7 IHRoZW4KICAgICAgICAgICAgaWYgISBfcHl0aG9uX2FiaS1zcGVjaWZpY19sb2NhbF9zY29wZTsg dGhlbgogICAgICAgICAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpIHNob3VsZCBiZSB1c2VkIGlu IEFCSS1zcGVjaWZpYyBsb2NhbCBzY29wZSI7CiAgICAgICAgICAgIGZpOwogICAgICAgIGVsc2UK ICAgICAgICAgICAgUFlUSE9OX0FCST0iJHtQWVRIT05fQUJJOi0kKFBZVEhPTiAtLUFCSSl9IjsK ICAgICAgICBmaTsKICAgIGZpOwogICAgaWYgW1sgIiR7UFlUSE9OX0FCSX0iID1+IF5bWzpkaWdp dDpdXStcLltbOmRpZ2l0Ol1dKy1bWzphbG51bTpdXSstW1s6ZGlnaXQ6XV0rXC5bWzpkaWdpdDpd XSskIF1dOyB0aGVuCiAgICAgICAgZWNobyAiJChfcHl0aG9uX2dldF9pbXBsZW1lbnRhdGlvbiAi JHtQWVRIT05fQUJJfSIpICR7UFlUSE9OX0FCSSMjKi19IChQeXRob24gJHtQWVRIT05fQUJJJSUt Kn0pIjsKICAgIGVsc2UKICAgICAgICBlY2hvICIkKF9weXRob25fZ2V0X2ltcGxlbWVudGF0aW9u ICIke1BZVEhPTl9BQkl9IikgJHtQWVRIT05fQUJJJSUtKn0iOwogICAgZmkKfQpweXRob25fZ2V0 X2ltcGxlbWVudGF0aW9uYWxfcGFja2FnZSAoKSAKeyAKICAgIF9weXRob25fY2hlY2tfcHl0aG9u X3BrZ19zZXR1cF9leGVjdXRpb247CiAgICBsb2NhbCBmaW5hbF9BQkk9IjAiIFBZVEhPTl9BQkk9 IiR7UFlUSE9OX0FCSX0iOwogICAgd2hpbGUgKCgkIykpOyBkbwogICAgICAgIGNhc2UgIiQxIiBp biAKICAgICAgICAgICAgLWYgfCAtLWZpbmFsLUFCSSkKICAgICAgICAgICAgICAgIGZpbmFsX0FC ST0iMSIKICAgICAgICAgICAgOzsKICAgICAgICAgICAgLSopCiAgICAgICAgICAgICAgICBkaWUg IiR7RlVOQ05BTUV9KCk6IFVucmVjb2duaXplZCBvcHRpb24gJyQxJyIKICAgICAgICAgICAgOzsK ICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgIGRpZSAiJHtGVU5DTkFNRX0oKTogSW52YWxp ZCB1c2FnZSIKICAgICAgICAgICAgOzsKICAgICAgICBlc2FjOwogICAgICAgIHNoaWZ0OwogICAg ZG9uZTsKICAgIGlmIFtbICIke2ZpbmFsX0FCSX0iID09ICIxIiBdXTsgdGhlbgogICAgICAgIGlm ICEgX3B5dGhvbl9wYWNrYWdlX3N1cHBvcnRpbmdfaW5zdGFsbGF0aW9uX2Zvcl9tdWx0aXBsZV9w eXRob25fYWJpczsgdGhlbgogICAgICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6ICctLWZpbmFs LUFCSScgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIGluIGVidWlsZHMgb2YgcGFja2FnZXMgbm90IHN1 cHBvcnRpbmcgaW5zdGFsbGF0aW9uIGZvciBtdWx0aXBsZSBQeXRob24gQUJJcyI7CiAgICAgICAg Zmk7CiAgICAgICAgUFlUSE9OX0FCST0iJChQWVRIT04gLWYgLS1BQkkpIjsKICAgIGVsc2UKICAg ICAgICBpZiBfcHl0aG9uX3BhY2thZ2Vfc3VwcG9ydGluZ19pbnN0YWxsYXRpb25fZm9yX211bHRp cGxlX3B5dGhvbl9hYmlzOyB0aGVuCiAgICAgICAgICAgIGlmICEgX3B5dGhvbl9hYmktc3BlY2lm aWNfbG9jYWxfc2NvcGU7IHRoZW4KICAgICAgICAgICAgICAgIGRpZSAiJHtGVU5DTkFNRX0oKSBz aG91bGQgYmUgdXNlZCBpbiBBQkktc3BlY2lmaWMgbG9jYWwgc2NvcGUiOwogICAgICAgICAgICBm aTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIFBZVEhPTl9BQkk9IiR7UFlUSE9OX0FCSTotJChQ WVRIT04gLS1BQkkpfSI7CiAgICAgICAgZmk7CiAgICBmaTsKICAgIGlmIFtbICIke0VBUEk6LTB9 IiA9PSAiMCIgXV07IHRoZW4KICAgICAgICBpZiBbWyAiJChfcHl0aG9uX2dldF9pbXBsZW1lbnRh dGlvbiAiJHtQWVRIT05fQUJJfSIpIiA9PSAiQ1B5dGhvbiIgXV07IHRoZW4KICAgICAgICAgICAg ZWNobyAiPWRldi1sYW5nL3B5dGhvbi0ke1BZVEhPTl9BQkl9KiI7CiAgICAgICAgZWxzZQogICAg ICAgICAgICBpZiBbWyAiJChfcHl0aG9uX2dldF9pbXBsZW1lbnRhdGlvbiAiJHtQWVRIT05fQUJJ fSIpIiA9PSAiSnl0aG9uIiBdXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAiPWRldi1qYXZh L2p5dGhvbi0ke1BZVEhPTl9BQkklLWp5dGhvbn0qIjsKICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICAgICAgaWYgW1sgIiQoX3B5dGhvbl9nZXRfaW1wbGVtZW50YXRpb24gIiR7UFlUSE9OX0FC SX0iKSIgPT0gIlB5UHkiIF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgZWNobyAiPWRldi1w eXRob24vcHlweS0ke1BZVEhPTl9BQkkjKi1weXB5LX0qIjsKICAgICAgICAgICAgICAgIGZpOwog ICAgICAgICAgICBmaTsKICAgICAgICBmaTsKICAgIGVsc2UKICAgICAgICBpZiBbWyAiJChfcHl0 aG9uX2dldF9pbXBsZW1lbnRhdGlvbiAiJHtQWVRIT05fQUJJfSIpIiA9PSAiQ1B5dGhvbiIgXV07 IHRoZW4KICAgICAgICAgICAgZWNobyAiZGV2LWxhbmcvcHl0aG9uOiR7UFlUSE9OX0FCSX0iOwog ICAgICAgIGVsc2UKICAgICAgICAgICAgaWYgW1sgIiQoX3B5dGhvbl9nZXRfaW1wbGVtZW50YXRp b24gIiR7UFlUSE9OX0FCSX0iKSIgPT0gIkp5dGhvbiIgXV07IHRoZW4KICAgICAgICAgICAgICAg IGVjaG8gImRldi1qYXZhL2p5dGhvbjoke1BZVEhPTl9BQkklLWp5dGhvbn0iOwogICAgICAgICAg ICBlbHNlCiAgICAgICAgICAgICAgICBpZiBbWyAiJChfcHl0aG9uX2dldF9pbXBsZW1lbnRhdGlv biAiJHtQWVRIT05fQUJJfSIpIiA9PSAiUHlQeSIgXV07IHRoZW4KICAgICAgICAgICAgICAgICAg ICBlY2hvICJkZXYtcHl0aG9uL3B5cHk6JHtQWVRIT05fQUJJIyotcHlweS19IjsKICAgICAgICAg ICAgICAgIGZpOwogICAgICAgICAgICBmaTsKICAgICAgICBmaTsKICAgIGZpCn0KcHl0aG9uX2dl dF9pbmNsdWRlZGlyICgpIAp7IAogICAgX3B5dGhvbl9jaGVja19weXRob25fcGtnX3NldHVwX2V4 ZWN1dGlvbjsKICAgIGxvY2FsIGJhc2VfcGF0aD0iMCIgZmluYWxfQUJJPSIwIiBwcmVmaXggUFlU SE9OX0FCST0iJHtQWVRIT05fQUJJfSI7CiAgICB3aGlsZSAoKCQjKSk7IGRvCiAgICAgICAgY2Fz ZSAiJDEiIGluIAogICAgICAgICAgICAtYiB8IC0tYmFzZS1wYXRoKQogICAgICAgICAgICAgICAg YmFzZV9wYXRoPSIxIgogICAgICAgICAgICA7OwogICAgICAgICAgICAtZiB8IC0tZmluYWwtQUJJ KQogICAgICAgICAgICAgICAgZmluYWxfQUJJPSIxIgogICAgICAgICAgICA7OwogICAgICAgICAg ICAtKikKICAgICAgICAgICAgICAgIGRpZSAiJHtGVU5DTkFNRX0oKTogVW5yZWNvZ25pemVkIG9w dGlvbiAnJDEnIgogICAgICAgICAgICA7OwogICAgICAgICAgICAqKQogICAgICAgICAgICAgICAg ZGllICIke0ZVTkNOQU1FfSgpOiBJbnZhbGlkIHVzYWdlIgogICAgICAgICAgICA7OwogICAgICAg IGVzYWM7CiAgICAgICAgc2hpZnQ7CiAgICBkb25lOwogICAgaWYgW1sgIiR7YmFzZV9wYXRofSIg PT0gIjAiIF1dOyB0aGVuCiAgICAgICAgcHJlZml4PSIvIjsKICAgIGZpOwogICAgaWYgW1sgIiR7 ZmluYWxfQUJJfSIgPT0gIjEiIF1dOyB0aGVuCiAgICAgICAgaWYgISBfcHl0aG9uX3BhY2thZ2Vf c3VwcG9ydGluZ19pbnN0YWxsYXRpb25fZm9yX211bHRpcGxlX3B5dGhvbl9hYmlzOyB0aGVuCiAg ICAgICAgICAgIGRpZSAiJHtGVU5DTkFNRX0oKTogJy0tZmluYWwtQUJJJyBvcHRpb24gY2Fubm90 IGJlIHVzZWQgaW4gZWJ1aWxkcyBvZiBwYWNrYWdlcyBub3Qgc3VwcG9ydGluZyBpbnN0YWxsYXRp b24gZm9yIG11bHRpcGxlIFB5dGhvbiBBQklzIjsKICAgICAgICBmaTsKICAgICAgICBQWVRIT05f QUJJPSIkKFBZVEhPTiAtZiAtLUFCSSkiOwogICAgZWxzZQogICAgICAgIGlmIF9weXRob25fcGFj a2FnZV9zdXBwb3J0aW5nX2luc3RhbGxhdGlvbl9mb3JfbXVsdGlwbGVfcHl0aG9uX2FiaXM7IHRo ZW4KICAgICAgICAgICAgaWYgISBfcHl0aG9uX2FiaS1zcGVjaWZpY19sb2NhbF9zY29wZTsgdGhl bgogICAgICAgICAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpIHNob3VsZCBiZSB1c2VkIGluIEFC SS1zcGVjaWZpYyBsb2NhbCBzY29wZSI7CiAgICAgICAgICAgIGZpOwogICAgICAgIGVsc2UKICAg ICAgICAgICAgUFlUSE9OX0FCST0iJHtQWVRIT05fQUJJOi0kKFBZVEhPTiAtLUFCSSl9IjsKICAg ICAgICBmaTsKICAgIGZpOwogICAgaWYgW1sgIiQoX3B5dGhvbl9nZXRfaW1wbGVtZW50YXRpb24g IiR7UFlUSE9OX0FCSX0iKSIgPT0gIkNQeXRob24iIF1dOyB0aGVuCiAgICAgICAgZWNobyAiJHtw cmVmaXh9dXNyL2luY2x1ZGUvcHl0aG9uJHtQWVRIT05fQUJJfSI7CiAgICBlbHNlCiAgICAgICAg aWYgW1sgIiQoX3B5dGhvbl9nZXRfaW1wbGVtZW50YXRpb24gIiR7UFlUSE9OX0FCSX0iKSIgPT0g Ikp5dGhvbiIgXV07IHRoZW4KICAgICAgICAgICAgZWNobyAiJHtwcmVmaXh9dXNyL3NoYXJlL2p5 dGhvbi0ke1BZVEhPTl9BQkklLWp5dGhvbn0vSW5jbHVkZSI7CiAgICAgICAgZWxzZQogICAgICAg ICAgICBpZiBbWyAiJChfcHl0aG9uX2dldF9pbXBsZW1lbnRhdGlvbiAiJHtQWVRIT05fQUJJfSIp IiA9PSAiUHlQeSIgXV07IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gIiR7cHJlZml4fXVzci8k KGdldF9saWJkaXIpL3B5cHkke1BZVEhPTl9BQkkjKi1weXB5LX0vaW5jbHVkZSI7CiAgICAgICAg ICAgIGZpOwogICAgICAgIGZpOwogICAgZmkKfQpweXRob25fZ2V0X2xpYmRpciAoKSAKeyAKICAg IF9weXRob25fY2hlY2tfcHl0aG9uX3BrZ19zZXR1cF9leGVjdXRpb247CiAgICBsb2NhbCBiYXNl X3BhdGg9IjAiIGZpbmFsX0FCST0iMCIgcHJlZml4IFBZVEhPTl9BQkk9IiR7UFlUSE9OX0FCSX0i OwogICAgd2hpbGUgKCgkIykpOyBkbwogICAgICAgIGNhc2UgIiQxIiBpbiAKICAgICAgICAgICAg LWIgfCAtLWJhc2UtcGF0aCkKICAgICAgICAgICAgICAgIGJhc2VfcGF0aD0iMSIKICAgICAgICAg ICAgOzsKICAgICAgICAgICAgLWYgfCAtLWZpbmFsLUFCSSkKICAgICAgICAgICAgICAgIGZpbmFs X0FCST0iMSIKICAgICAgICAgICAgOzsKICAgICAgICAgICAgLSopCiAgICAgICAgICAgICAgICBk aWUgIiR7RlVOQ05BTUV9KCk6IFVucmVjb2duaXplZCBvcHRpb24gJyQxJyIKICAgICAgICAgICAg OzsKICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgIGRpZSAiJHtGVU5DTkFNRX0oKTogSW52 YWxpZCB1c2FnZSIKICAgICAgICAgICAgOzsKICAgICAgICBlc2FjOwogICAgICAgIHNoaWZ0Owog ICAgZG9uZTsKICAgIGlmIFtbICIke2Jhc2VfcGF0aH0iID09ICIwIiBdXTsgdGhlbgogICAgICAg IHByZWZpeD0iLyI7CiAgICBmaTsKICAgIGlmIFtbICIke2ZpbmFsX0FCSX0iID09ICIxIiBdXTsg dGhlbgogICAgICAgIGlmICEgX3B5dGhvbl9wYWNrYWdlX3N1cHBvcnRpbmdfaW5zdGFsbGF0aW9u X2Zvcl9tdWx0aXBsZV9weXRob25fYWJpczsgdGhlbgogICAgICAgICAgICBkaWUgIiR7RlVOQ05B TUV9KCk6ICctLWZpbmFsLUFCSScgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIGluIGVidWlsZHMgb2Yg cGFja2FnZXMgbm90IHN1cHBvcnRpbmcgaW5zdGFsbGF0aW9uIGZvciBtdWx0aXBsZSBQeXRob24g QUJJcyI7CiAgICAgICAgZmk7CiAgICAgICAgUFlUSE9OX0FCST0iJChQWVRIT04gLWYgLS1BQkkp IjsKICAgIGVsc2UKICAgICAgICBpZiBfcHl0aG9uX3BhY2thZ2Vfc3VwcG9ydGluZ19pbnN0YWxs YXRpb25fZm9yX211bHRpcGxlX3B5dGhvbl9hYmlzOyB0aGVuCiAgICAgICAgICAgIGlmICEgX3B5 dGhvbl9hYmktc3BlY2lmaWNfbG9jYWxfc2NvcGU7IHRoZW4KICAgICAgICAgICAgICAgIGRpZSAi JHtGVU5DTkFNRX0oKSBzaG91bGQgYmUgdXNlZCBpbiBBQkktc3BlY2lmaWMgbG9jYWwgc2NvcGUi OwogICAgICAgICAgICBmaTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIFBZVEhPTl9BQkk9IiR7 UFlUSE9OX0FCSTotJChQWVRIT04gLS1BQkkpfSI7CiAgICAgICAgZmk7CiAgICBmaTsKICAgIGlm IFtbICIkKF9weXRob25fZ2V0X2ltcGxlbWVudGF0aW9uICIke1BZVEhPTl9BQkl9IikiID09ICJD UHl0aG9uIiBdXTsgdGhlbgogICAgICAgIGVjaG8gIiR7cHJlZml4fXVzci8kKGdldF9saWJkaXIp L3B5dGhvbiR7UFlUSE9OX0FCSX0iOwogICAgZWxzZQogICAgICAgIGlmIFtbICIkKF9weXRob25f Z2V0X2ltcGxlbWVudGF0aW9uICIke1BZVEhPTl9BQkl9IikiID09ICJKeXRob24iIF1dOyB0aGVu CiAgICAgICAgICAgIGVjaG8gIiR7cHJlZml4fXVzci9zaGFyZS9qeXRob24tJHtQWVRIT05fQUJJ JS1qeXRob259L0xpYiI7CiAgICAgICAgZWxzZQogICAgICAgICAgICBpZiBbWyAiJChfcHl0aG9u X2dldF9pbXBsZW1lbnRhdGlvbiAiJHtQWVRIT05fQUJJfSIpIiA9PSAiUHlQeSIgXV07IHRoZW4K ICAgICAgICAgICAgICAgIGRpZSAiJHtGVU5DTkFNRX0oKTogUHlQeSBoYXMgbXVsdGlwbGUgc3Rh bmRhcmQgbGlicmFyeSBkaXJlY3RvcmllcyI7CiAgICAgICAgICAgIGZpOwogICAgICAgIGZpOwog ICAgZmkKfQpweXRob25fZ2V0X2xpYnJhcnkgKCkgCnsgCiAgICBfcHl0aG9uX2NoZWNrX3B5dGhv bl9wa2dfc2V0dXBfZXhlY3V0aW9uOwogICAgbG9jYWwgYmFzZV9wYXRoPSIwIiBmaW5hbF9BQkk9 IjAiIGxpbmtlcl9vcHRpb249IjAiIHByZWZpeCBQWVRIT05fQUJJPSIke1BZVEhPTl9BQkl9IjsK ICAgIHdoaWxlICgoJCMpKTsgZG8KICAgICAgICBjYXNlICIkMSIgaW4gCiAgICAgICAgICAgIC1i IHwgLS1iYXNlLXBhdGgpCiAgICAgICAgICAgICAgICBiYXNlX3BhdGg9IjEiCiAgICAgICAgICAg IDs7CiAgICAgICAgICAgIC1mIHwgLS1maW5hbC1BQkkpCiAgICAgICAgICAgICAgICBmaW5hbF9B Qkk9IjEiCiAgICAgICAgICAgIDs7CiAgICAgICAgICAgIC1sIHwgLS1saW5rZXItb3B0aW9uKQog ICAgICAgICAgICAgICAgbGlua2VyX29wdGlvbj0iMSIKICAgICAgICAgICAgOzsKICAgICAgICAg ICAgLSopCiAgICAgICAgICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6IFVucmVjb2duaXplZCBv cHRpb24gJyQxJyIKICAgICAgICAgICAgOzsKICAgICAgICAgICAgKikKICAgICAgICAgICAgICAg IGRpZSAiJHtGVU5DTkFNRX0oKTogSW52YWxpZCB1c2FnZSIKICAgICAgICAgICAgOzsKICAgICAg ICBlc2FjOwogICAgICAgIHNoaWZ0OwogICAgZG9uZTsKICAgIGlmIFtbICIke2Jhc2VfcGF0aH0i ID09ICIwIiBdXTsgdGhlbgogICAgICAgIHByZWZpeD0iLyI7CiAgICBmaTsKICAgIGlmIFtbICIk e2Jhc2VfcGF0aH0iID09ICIxIiAmJiAiJHtsaW5rZXJfb3B0aW9ufSIgPT0gIjEiIF1dOyB0aGVu CiAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpOiAnLS1iYXNlLXBhdGgnIGFuZCAnLS1saW5rZXIt b3B0aW9uJyBvcHRpb25zIGNhbm5vdCBiZSBzcGVjaWZpZWQgc2ltdWx0YW5lb3VzbHkiOwogICAg Zmk7CiAgICBpZiBbWyAiJHtmaW5hbF9BQkl9IiA9PSAiMSIgXV07IHRoZW4KICAgICAgICBpZiAh IF9weXRob25fcGFja2FnZV9zdXBwb3J0aW5nX2luc3RhbGxhdGlvbl9mb3JfbXVsdGlwbGVfcHl0 aG9uX2FiaXM7IHRoZW4KICAgICAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpOiAnLS1maW5hbC1B QkknIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCBpbiBlYnVpbGRzIG9mIHBhY2thZ2VzIG5vdCBzdXBw b3J0aW5nIGluc3RhbGxhdGlvbiBmb3IgbXVsdGlwbGUgUHl0aG9uIEFCSXMiOwogICAgICAgIGZp OwogICAgICAgIFBZVEhPTl9BQkk9IiQoUFlUSE9OIC1mIC0tQUJJKSI7CiAgICBlbHNlCiAgICAg ICAgaWYgX3B5dGhvbl9wYWNrYWdlX3N1cHBvcnRpbmdfaW5zdGFsbGF0aW9uX2Zvcl9tdWx0aXBs ZV9weXRob25fYWJpczsgdGhlbgogICAgICAgICAgICBpZiAhIF9weXRob25fYWJpLXNwZWNpZmlj X2xvY2FsX3Njb3BlOyB0aGVuCiAgICAgICAgICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCkgc2hv dWxkIGJlIHVzZWQgaW4gQUJJLXNwZWNpZmljIGxvY2FsIHNjb3BlIjsKICAgICAgICAgICAgZmk7 CiAgICAgICAgZWxzZQogICAgICAgICAgICBQWVRIT05fQUJJPSIke1BZVEhPTl9BQkk6LSQoUFlU SE9OIC0tQUJJKX0iOwogICAgICAgIGZpOwogICAgZmk7CiAgICBpZiBbWyAiJChfcHl0aG9uX2dl dF9pbXBsZW1lbnRhdGlvbiAiJHtQWVRIT05fQUJJfSIpIiA9PSAiQ1B5dGhvbiIgXV07IHRoZW4K ICAgICAgICBpZiBbWyAiJHtsaW5rZXJfb3B0aW9ufSIgPT0gIjEiIF1dOyB0aGVuCiAgICAgICAg ICAgIGVjaG8gIi1scHl0aG9uJHtQWVRIT05fQUJJfSI7CiAgICAgICAgZWxzZQogICAgICAgICAg ICBlY2hvICIke3ByZWZpeH11c3IvJChnZXRfbGliZGlyKS9saWJweXRob24ke1BZVEhPTl9BQkl9 JChnZXRfbGlibmFtZSkiOwogICAgICAgIGZpOwogICAgZWxzZQogICAgICAgIGlmIFtbICIkKF9w eXRob25fZ2V0X2ltcGxlbWVudGF0aW9uICIke1BZVEhPTl9BQkl9IikiID09ICJKeXRob24iIF1d OyB0aGVuCiAgICAgICAgICAgIGRpZSAiJHtGVU5DTkFNRX0oKTogSnl0aG9uIGRvZXMgbm90IGhh dmUgc2hhcmVkIGxpYnJhcnkiOwogICAgICAgIGVsc2UKICAgICAgICAgICAgaWYgW1sgIiQoX3B5 dGhvbl9nZXRfaW1wbGVtZW50YXRpb24gIiR7UFlUSE9OX0FCSX0iKSIgPT0gIlB5UHkiIF1dOyB0 aGVuCiAgICAgICAgICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6IFB5UHkgZG9lcyBub3QgaGF2 ZSBzaGFyZWQgbGlicmFyeSI7CiAgICAgICAgICAgIGZpOwogICAgICAgIGZpOwogICAgZmkKfQpw eXRob25fZ2V0X3NpdGVkaXIgKCkgCnsgCiAgICBfcHl0aG9uX2NoZWNrX3B5dGhvbl9wa2dfc2V0 dXBfZXhlY3V0aW9uOwogICAgbG9jYWwgYmFzZV9wYXRoPSIwIiBmaW5hbF9BQkk9IjAiIHByZWZp eCBQWVRIT05fQUJJPSIke1BZVEhPTl9BQkl9IjsKICAgIHdoaWxlICgoJCMpKTsgZG8KICAgICAg ICBjYXNlICIkMSIgaW4gCiAgICAgICAgICAgIC1iIHwgLS1iYXNlLXBhdGgpCiAgICAgICAgICAg ICAgICBiYXNlX3BhdGg9IjEiCiAgICAgICAgICAgIDs7CiAgICAgICAgICAgIC1mIHwgLS1maW5h bC1BQkkpCiAgICAgICAgICAgICAgICBmaW5hbF9BQkk9IjEiCiAgICAgICAgICAgIDs7CiAgICAg ICAgICAgIC0qKQogICAgICAgICAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpOiBVbnJlY29nbml6 ZWQgb3B0aW9uICckMSciCiAgICAgICAgICAgIDs7CiAgICAgICAgICAgICopCiAgICAgICAgICAg ICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6IEludmFsaWQgdXNhZ2UiCiAgICAgICAgICAgIDs7CiAg ICAgICAgZXNhYzsKICAgICAgICBzaGlmdDsKICAgIGRvbmU7CiAgICBpZiBbWyAiJHtiYXNlX3Bh dGh9IiA9PSAiMCIgXV07IHRoZW4KICAgICAgICBwcmVmaXg9Ii8iOwogICAgZmk7CiAgICBpZiBb WyAiJHtmaW5hbF9BQkl9IiA9PSAiMSIgXV07IHRoZW4KICAgICAgICBpZiAhIF9weXRob25fcGFj a2FnZV9zdXBwb3J0aW5nX2luc3RhbGxhdGlvbl9mb3JfbXVsdGlwbGVfcHl0aG9uX2FiaXM7IHRo ZW4KICAgICAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpOiAnLS1maW5hbC1BQkknIG9wdGlvbiBj YW5ub3QgYmUgdXNlZCBpbiBlYnVpbGRzIG9mIHBhY2thZ2VzIG5vdCBzdXBwb3J0aW5nIGluc3Rh bGxhdGlvbiBmb3IgbXVsdGlwbGUgUHl0aG9uIEFCSXMiOwogICAgICAgIGZpOwogICAgICAgIFBZ VEhPTl9BQkk9IiQoUFlUSE9OIC1mIC0tQUJJKSI7CiAgICBlbHNlCiAgICAgICAgaWYgX3B5dGhv bl9wYWNrYWdlX3N1cHBvcnRpbmdfaW5zdGFsbGF0aW9uX2Zvcl9tdWx0aXBsZV9weXRob25fYWJp czsgdGhlbgogICAgICAgICAgICBpZiAhIF9weXRob25fYWJpLXNwZWNpZmljX2xvY2FsX3Njb3Bl OyB0aGVuCiAgICAgICAgICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCkgc2hvdWxkIGJlIHVzZWQg aW4gQUJJLXNwZWNpZmljIGxvY2FsIHNjb3BlIjsKICAgICAgICAgICAgZmk7CiAgICAgICAgZWxz ZQogICAgICAgICAgICBQWVRIT05fQUJJPSIke1BZVEhPTl9BQkk6LSQoUFlUSE9OIC0tQUJJKX0i OwogICAgICAgIGZpOwogICAgZmk7CiAgICBpZiBbWyAiJChfcHl0aG9uX2dldF9pbXBsZW1lbnRh dGlvbiAiJHtQWVRIT05fQUJJfSIpIiA9PSAiQ1B5dGhvbiIgXV07IHRoZW4KICAgICAgICBlY2hv ICIke3ByZWZpeH11c3IvJChnZXRfbGliZGlyKS9weXRob24ke1BZVEhPTl9BQkl9L3NpdGUtcGFj a2FnZXMiOwogICAgZWxzZQogICAgICAgIGlmIFtbICIkKF9weXRob25fZ2V0X2ltcGxlbWVudGF0 aW9uICIke1BZVEhPTl9BQkl9IikiID09ICJKeXRob24iIF1dOyB0aGVuCiAgICAgICAgICAgIGVj aG8gIiR7cHJlZml4fXVzci9zaGFyZS9qeXRob24tJHtQWVRIT05fQUJJJS1qeXRob259L0xpYi9z aXRlLXBhY2thZ2VzIjsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGlmIFtbICIkKF9weXRob25f Z2V0X2ltcGxlbWVudGF0aW9uICIke1BZVEhPTl9BQkl9IikiID09ICJQeVB5IiBdXTsgdGhlbgog ICAgICAgICAgICAgICAgZWNobyAiJHtwcmVmaXh9dXNyLyQoZ2V0X2xpYmRpcikvcHlweSR7UFlU SE9OX0FCSSMqLXB5cHktfS9zaXRlLXBhY2thZ2VzIjsKICAgICAgICAgICAgZmk7CiAgICAgICAg Zmk7CiAgICBmaQp9CnB5dGhvbl9nZXRfdmVyc2lvbiAoKSAKeyAKICAgIF9weXRob25fY2hlY2tf cHl0aG9uX3BrZ19zZXR1cF9leGVjdXRpb247CiAgICBsb2NhbCBmaW5hbF9BQkk9IjAiIGxhbmd1 YWdlPSIwIiBsYW5ndWFnZV92ZXJzaW9uIGZ1bGw9IjAiIG1ham9yPSIwIiBtaW5vcj0iMCIgbWlj cm89IjAiIFBZVEhPTl9BQkk9IiR7UFlUSE9OX0FCSX0iIHB5dGhvbl9jb21tYW5kOwogICAgd2hp bGUgKCgkIykpOyBkbwogICAgICAgIGNhc2UgIiQxIiBpbiAKICAgICAgICAgICAgLWYgfCAtLWZp bmFsLUFCSSkKICAgICAgICAgICAgICAgIGZpbmFsX0FCST0iMSIKICAgICAgICAgICAgOzsKICAg ICAgICAgICAgLWwgfCAtLWxhbmd1YWdlKQogICAgICAgICAgICAgICAgbGFuZ3VhZ2U9IjEiCiAg ICAgICAgICAgIDs7CiAgICAgICAgICAgIC0tZnVsbCkKICAgICAgICAgICAgICAgIGZ1bGw9IjEi CiAgICAgICAgICAgIDs7CiAgICAgICAgICAgIC0tbWFqb3IpCiAgICAgICAgICAgICAgICBtYWpv cj0iMSIKICAgICAgICAgICAgOzsKICAgICAgICAgICAgLS1taW5vcikKICAgICAgICAgICAgICAg IG1pbm9yPSIxIgogICAgICAgICAgICA7OwogICAgICAgICAgICAtLW1pY3JvKQogICAgICAgICAg ICAgICAgbWljcm89IjEiCiAgICAgICAgICAgIDs7CiAgICAgICAgICAgIC0qKQogICAgICAgICAg ICAgICAgZGllICIke0ZVTkNOQU1FfSgpOiBVbnJlY29nbml6ZWQgb3B0aW9uICckMSciCiAgICAg ICAgICAgIDs7CiAgICAgICAgICAgICopCiAgICAgICAgICAgICAgICBkaWUgIiR7RlVOQ05BTUV9 KCk6IEludmFsaWQgdXNhZ2UiCiAgICAgICAgICAgIDs7CiAgICAgICAgZXNhYzsKICAgICAgICBz aGlmdDsKICAgIGRvbmU7CiAgICBpZiBbWyAiJHtmaW5hbF9BQkl9IiA9PSAiMSIgXV07IHRoZW4K ICAgICAgICBpZiAhIF9weXRob25fcGFja2FnZV9zdXBwb3J0aW5nX2luc3RhbGxhdGlvbl9mb3Jf bXVsdGlwbGVfcHl0aG9uX2FiaXM7IHRoZW4KICAgICAgICAgICAgZGllICIke0ZVTkNOQU1FfSgp OiAnLS1maW5hbC1BQkknIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCBpbiBlYnVpbGRzIG9mIHBhY2th Z2VzIG5vdCBzdXBwb3J0aW5nIGluc3RhbGxhdGlvbiBmb3IgbXVsdGlwbGUgUHl0aG9uIEFCSXMi OwogICAgICAgIGZpOwogICAgZWxzZQogICAgICAgIGlmIF9weXRob25fcGFja2FnZV9zdXBwb3J0 aW5nX2luc3RhbGxhdGlvbl9mb3JfbXVsdGlwbGVfcHl0aG9uX2FiaXMgJiYgISBfcHl0aG9uX2Fi aS1zcGVjaWZpY19sb2NhbF9zY29wZTsgdGhlbgogICAgICAgICAgICBkaWUgIiR7RlVOQ05BTUV9 KCkgc2hvdWxkIGJlIHVzZWQgaW4gQUJJLXNwZWNpZmljIGxvY2FsIHNjb3BlIjsKICAgICAgICBm aTsKICAgIGZpOwogICAgaWYgW1sgIiQoKCR7ZnVsbH0gKyAke21ham9yfSArICR7bWlub3J9ICsg JHttaWNyb30pKSIgLWd0IDEgXV07IHRoZW4KICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6ICct LWZ1bGwnLCAnLS1tYWpvcicsICctLW1pbm9yJyBvciAnLS1taWNybycgb3B0aW9ucyBjYW5ub3Qg YmUgc3BlY2lmaWVkIHNpbXVsdGFuZW91c2x5IjsKICAgIGZpOwogICAgaWYgW1sgIiR7bGFuZ3Vh Z2V9IiA9PSAiMSIgXV07IHRoZW4KICAgICAgICBpZiBbWyAiJHtmaW5hbF9BQkl9IiA9PSAiMSIg XV07IHRoZW4KICAgICAgICAgICAgUFlUSE9OX0FCST0iJChQWVRIT04gLWYgLS1BQkkpIjsKICAg ICAgICBlbHNlCiAgICAgICAgICAgIGlmIFtbIC16ICIke1BZVEhPTl9BQkl9IiBdXTsgdGhlbgog ICAgICAgICAgICAgICAgUFlUSE9OX0FCST0iJChQWVRIT04gLS1BQkkpIjsKICAgICAgICAgICAg Zmk7CiAgICAgICAgZmk7CiAgICAgICAgbGFuZ3VhZ2VfdmVyc2lvbj0iJHtQWVRIT05fQUJJJSUt Kn0iOwogICAgICAgIGlmIFtbICIke2Z1bGx9IiA9PSAiMSIgXV07IHRoZW4KICAgICAgICAgICAg ZGllICIke0ZVTkNOQU1FfSgpOiAnLS1sYW5ndWFnZScgYW5kICctLWZ1bGwnIG9wdGlvbnMgY2Fu bm90IGJlIHNwZWNpZmllZCBzaW11bHRhbmVvdXNseSI7CiAgICAgICAgZWxzZQogICAgICAgICAg ICBpZiBbWyAiJHttYWpvcn0iID09ICIxIiBdXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAi JHtsYW5ndWFnZV92ZXJzaW9uJS4qfSI7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg IGlmIFtbICIke21pbm9yfSIgPT0gIjEiIF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgZWNo byAiJHtsYW5ndWFnZV92ZXJzaW9uIyoufSI7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICAgICAgaWYgW1sgIiR7bWljcm99IiA9PSAiMSIgXV07IHRoZW4KICAgICAgICAgICAg ICAgICAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpOiAnLS1sYW5ndWFnZScgYW5kICctLW1pY3Jv JyBvcHRpb25zIGNhbm5vdCBiZSBzcGVjaWZpZWQgc2ltdWx0YW5lb3VzbHkiOwogICAgICAgICAg ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiJHtsYW5ndWFnZV92 ZXJzaW9ufSI7CiAgICAgICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgICAgICBmaTsKICAg ICAgICAgICAgZmk7CiAgICAgICAgZmk7CiAgICBlbHNlCiAgICAgICAgaWYgW1sgIiR7ZnVsbH0i ID09ICIxIiBdXTsgdGhlbgogICAgICAgICAgICBweXRob25fY29tbWFuZD0iaW1wb3J0IHN5czsg cHJpbnQoJy4nLmpvaW4oc3RyKHgpIGZvciB4IGluIGdldGF0dHIoc3lzLCAncHlweV92ZXJzaW9u X2luZm8nLCBzeXMudmVyc2lvbl9pbmZvKVs6M10pKSI7CiAgICAgICAgZWxzZQogICAgICAgICAg ICBpZiBbWyAiJHttYWpvcn0iID09ICIxIiBdXTsgdGhlbgogICAgICAgICAgICAgICAgcHl0aG9u X2NvbW1hbmQ9ImltcG9ydCBzeXM7IHByaW50KGdldGF0dHIoc3lzLCAncHlweV92ZXJzaW9uX2lu Zm8nLCBzeXMudmVyc2lvbl9pbmZvKVswXSkiOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAg ICAgICBpZiBbWyAiJHttaW5vcn0iID09ICIxIiBdXTsgdGhlbgogICAgICAgICAgICAgICAgICAg IHB5dGhvbl9jb21tYW5kPSJpbXBvcnQgc3lzOyBwcmludChnZXRhdHRyKHN5cywgJ3B5cHlfdmVy c2lvbl9pbmZvJywgc3lzLnZlcnNpb25faW5mbylbMV0pIjsKICAgICAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICAgICAgICBpZiBbWyAiJHttaWNyb30iID09ICIxIiBdXTsgdGhlbgogICAg ICAgICAgICAgICAgICAgICAgICBweXRob25fY29tbWFuZD0iaW1wb3J0IHN5czsgcHJpbnQoZ2V0 YXR0cihzeXMsICdweXB5X3ZlcnNpb25faW5mbycsIHN5cy52ZXJzaW9uX2luZm8pWzJdKSI7CiAg ICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBpZiBbWyAtbiAi JHtQWVRIT05fQUJJfSIgJiYgIiR7ZmluYWxfQUJJfSIgPT0gIjAiIF1dOyB0aGVuCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiBbWyAiJChfcHl0aG9uX2dldF9pbXBsZW1lbnRhdGlvbiAi JHtQWVRIT05fQUJJfSIpIiA9PSAiQ1B5dGhvbiIgXV07IHRoZW4KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBlY2hvICIke1BZVEhPTl9BQkl9IjsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBbWyAiJChfcHl0 aG9uX2dldF9pbXBsZW1lbnRhdGlvbiAiJHtQWVRIT05fQUJJfSIpIiA9PSAiSnl0aG9uIiBdXTsg dGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIke1BZVEhPTl9B QkklLWp5dGhvbn0iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgW1sgIiQoX3B5dGhvbl9nZXRfaW1wbGVt ZW50YXRpb24gIiR7UFlUSE9OX0FCSX0iKSIgPT0gIlB5UHkiIF1dOyB0aGVuCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIke1BZVEhPTl9BQkkjKi1weXB5LX0i OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICBm aTsKICAgICAgICAgICAgICAgICAgICAgICAgcHl0aG9uX2NvbW1hbmQ9ImZyb20gc3lzIGltcG9y dCB2ZXJzaW9uX2luZm87IHByaW50KCcuJy5qb2luKHN0cih4KSBmb3IgeCBpbiB2ZXJzaW9uX2lu Zm9bOjJdKSkiOwogICAgICAgICAgICAgICAgICAgIGZpOwogICAgICAgICAgICAgICAgZmk7CiAg ICAgICAgICAgIGZpOwogICAgICAgIGZpOwogICAgICAgIGlmIFtbICIke2ZpbmFsX0FCSX0iID09 ICIxIiBdXTsgdGhlbgogICAgICAgICAgICAiJChQWVRIT04gLWYpIiAtYyAiJHtweXRob25fY29t bWFuZH0iOwogICAgICAgIGVsc2UKICAgICAgICAgICAgIiQoUFlUSE9OICR7UFlUSE9OX0FCSX0p IiAtYyAiJHtweXRob25fY29tbWFuZH0iOwogICAgICAgIGZpOwogICAgZmkKfQpweXRob25fbWVy Z2VfaW50ZXJtZWRpYXRlX2luc3RhbGxhdGlvbl9pbWFnZXMgKCkgCnsgCiAgICBpZiBbWyAiJHtF QlVJTERfUEhBU0V9IiAhPSAiaW5zdGFsbCIgXV07IHRoZW4KICAgICAgICBkaWUgIiR7RlVOQ05B TUV9KCkgY2FuIGJlIHVzZWQgb25seSBpbiBzcmNfaW5zdGFsbCgpIHBoYXNlIjsKICAgIGZpOwog ICAgaWYgISBfcHl0aG9uX3BhY2thZ2Vfc3VwcG9ydGluZ19pbnN0YWxsYXRpb25fZm9yX211bHRp cGxlX3B5dGhvbl9hYmlzOyB0aGVuCiAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpIGNhbm5vdCBi ZSB1c2VkIGluIGVidWlsZHMgb2YgcGFja2FnZXMgbm90IHN1cHBvcnRpbmcgaW5zdGFsbGF0aW9u IGZvciBtdWx0aXBsZSBQeXRob24gQUJJcyI7CiAgICBmaTsKICAgIF9weXRob25fY2hlY2tfcHl0 aG9uX3BrZ19zZXR1cF9leGVjdXRpb247CiAgICBfcHl0aG9uX2luaXRpYWxpemVfcHJlZml4X3Zh cmlhYmxlczsKICAgIGxvY2FsIGFic29sdXRlX2ZpbGUgYiBmaWxlIGZpbGVzPSgpIGludGVybWVk aWF0ZV9pbnN0YWxsYXRpb25faW1hZ2VzX2RpcmVjdG9yeSBQWVRIT05fQUJJIHF1aWV0PSIwIiBy ZWdleCBzaGViYW5nIHZlcnNpb25fZXhlY3V0YWJsZSB3cmFwcGVyX3NjcmlwdHM9KCkgd3JhcHBl cl9zY3JpcHRzX3NldD0oKTsKICAgIHdoaWxlICgoJCMpKTsgZG8KICAgICAgICBjYXNlICIkMSIg aW4gCiAgICAgICAgICAgIC1xIHwgLS1xdWlldCkKICAgICAgICAgICAgICAgIHF1aWV0PSIxIgog ICAgICAgICAgICA7OwogICAgICAgICAgICAtLSkKICAgICAgICAgICAgICAgIHNoaWZ0OwogICAg ICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgOzsKICAgICAgICAgICAgLSopCiAgICAgICAg ICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6IFVucmVjb2duaXplZCBvcHRpb24gJyQxJyIKICAg ICAgICAgICAgOzsKICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAg ICAgIDs7CiAgICAgICAgZXNhYzsKICAgICAgICBzaGlmdDsKICAgIGRvbmU7CiAgICBpZiBbWyAi JCMiIC1uZSAxIF1dOyB0aGVuCiAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpIHJlcXVpcmVzIDEg YXJndW1lbnQiOwogICAgZmk7CiAgICBpbnRlcm1lZGlhdGVfaW5zdGFsbGF0aW9uX2ltYWdlc19k aXJlY3Rvcnk9IiQxIjsKICAgIGlmIFtbICEgLWQgIiR7aW50ZXJtZWRpYXRlX2luc3RhbGxhdGlv bl9pbWFnZXNfZGlyZWN0b3J5fSIgXV07IHRoZW4KICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6 IEludGVybWVkaWF0ZSBpbnN0YWxsYXRpb24gaW1hZ2VzIGRpcmVjdG9yeSAnJHtpbnRlcm1lZGlh dGVfaW5zdGFsbGF0aW9uX2ltYWdlc19kaXJlY3Rvcnl9JyBkb2VzIG5vdCBleGlzdCI7CiAgICBm aTsKICAgIF9weXRob25fY2FsY3VsYXRlX1BZVEhPTl9BQklTOwogICAgaWYgW1sgIiQoUFlUSE9O IC1mIC0tQUJJKSIgPT0gMy4qIF1dOyB0aGVuCiAgICAgICAgYj0iYiI7CiAgICBmaTsKICAgIHdo aWxlIHJlYWQgLWQgJycgLXIgZmlsZTsgZG8KICAgICAgICBmaWxlcys9KCIke2ZpbGV9Iik7CiAg ICBkb25lIDwgPCgiJChQWVRIT04gLWYpIiAtYyAiaW1wb3J0IG9zCmltcG9ydCBzeXMKCmlmIGhh c2F0dHIoc3lzLnN0ZG91dCwgJ2J1ZmZlcicpOgoJIyBQeXRob24gMwoJc3Rkb3V0ID0gc3lzLnN0 ZG91dC5idWZmZXIKZWxzZToKCSMgUHl0aG9uIDIKCXN0ZG91dCA9IHN5cy5zdGRvdXQKCmZpbGVz X3NldCA9IHNldCgpCgpvcy5jaGRpcigke2J9JyR7aW50ZXJtZWRpYXRlX2luc3RhbGxhdGlvbl9p bWFnZXNfZGlyZWN0b3J5fScpCgpmb3IgUFlUSE9OX0FCSSBpbiAke2J9JyR7UFlUSE9OX0FCSVN9 Jy5zcGxpdCgpOgoJZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoUFlUSE9OX0FCSSAr ICR7Yn0nJHtFUFJFRklYfScpOgoJCXJvb3QgPSByb290W2xlbihQWVRIT05fQUJJICsgJHtifSck e0VQUkVGSVh9JykrMTpdCgkJZmlsZXNfc2V0LnVwZGF0ZShyb290ICsgJHtifScvJyArIGZpbGUg Zm9yIGZpbGUgaW4gZmlsZXMpCgpmb3IgZmlsZSBpbiBzb3J0ZWQoZmlsZXNfc2V0KToKCXN0ZG91 dC53cml0ZShmaWxlKQoJc3Rkb3V0LndyaXRlKCR7Yn0nXHgwMCcpIiB8fCBkaWUgIiR7RlVOQ05B TUV9KCk6IEZhaWx1cmUgb2YgZXh0cmFjdGlvbiBvZiBmaWxlcyBpbiBpbnRlcm1lZGlhdGUgaW5z dGFsbGF0aW9uIGltYWdlcyIpOwogICAgZm9yIFBZVEhPTl9BQkkgaW4gJHtQWVRIT05fQUJJU307 CiAgICBkbwogICAgICAgIGlmIFtbICEgLWQgIiR7aW50ZXJtZWRpYXRlX2luc3RhbGxhdGlvbl9p bWFnZXNfZGlyZWN0b3J5fS8ke1BZVEhPTl9BQkl9IiBdXTsgdGhlbgogICAgICAgICAgICBkaWUg IiR7RlVOQ05BTUV9KCk6IEludGVybWVkaWF0ZSBpbnN0YWxsYXRpb24gaW1hZ2UgZm9yIFB5dGhv biBBQkkgJyR7UFlUSE9OX0FCSX0nIGRvZXMgbm90IGV4aXN0IjsKICAgICAgICBmaTsKICAgICAg ICBwdXNoZCAiJHtpbnRlcm1lZGlhdGVfaW5zdGFsbGF0aW9uX2ltYWdlc19kaXJlY3Rvcnl9LyR7 UFlUSE9OX0FCSX0ke0VQUkVGSVh9IiA+IC9kZXYvbnVsbCB8fCBkaWUgInB1c2hkIGZhaWxlZCI7 CiAgICAgICAgZm9yIGZpbGUgaW4gIiR7ZmlsZXNbQF19IjsKICAgICAgICBkbwogICAgICAgICAg ICB2ZXJzaW9uX2V4ZWN1dGFibGU9IjAiOwogICAgICAgICAgICBmb3IgcmVnZXggaW4gIi91c3Iv YmluLy4qIiAiL3Vzci9zYmluLy4qIiAiJHtQWVRIT05fVkVSU0lPTkVEX1NDUklQVFNbQF19IjsK ICAgICAgICAgICAgZG8KICAgICAgICAgICAgICAgIGlmIFtbICIvJHtmaWxlfSIgPX4gXiR7cmVn ZXh9JCBdXTsgdGhlbgogICAgICAgICAgICAgICAgICAgIHZlcnNpb25fZXhlY3V0YWJsZT0iMSI7 CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBmaTsKICAgICAgICAg ICAgZG9uZTsKICAgICAgICAgICAgZm9yIHJlZ2V4IGluICIke1BZVEhPTl9WRVJTSU9ORURfRVhF Q1VUQUJMRVNbQF19IjsKICAgICAgICAgICAgZG8KICAgICAgICAgICAgICAgIGlmIFtbICIvJHtm aWxlfSIgPX4gXiR7cmVnZXh9JCBdXTsgdGhlbgogICAgICAgICAgICAgICAgICAgIHZlcnNpb25f ZXhlY3V0YWJsZT0iMiI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg ICBmaTsKICAgICAgICAgICAgZG9uZTsKICAgICAgICAgICAgaWYgW1sgIiR7dmVyc2lvbl9leGVj dXRhYmxlfSIgIT0gIjAiIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBmb3IgcmVnZXggaW4gIiR7 UFlUSE9OX05PTlZFUlNJT05FRF9FWEVDVVRBQkxFU1tAXX0iOwogICAgICAgICAgICAgICAgZG8K ICAgICAgICAgICAgICAgICAgICBpZiBbWyAiLyR7ZmlsZX0iID1+IF4ke3JlZ2V4fSQgXV07IHRo ZW4KICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbl9leGVjdXRhYmxlPSIwIjsKICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgZmk7CiAgICAgICAg ICAgICAgICBkb25lOwogICAgICAgICAgICBmaTsKICAgICAgICAgICAgW1sgIiR7dmVyc2lvbl9l eGVjdXRhYmxlfSIgPT0gIjAiIF1dICYmIGNvbnRpbnVlOwogICAgICAgICAgICBpZiBbWyAtTCAi JHtmaWxlfSIgXV07IHRoZW4KICAgICAgICAgICAgICAgIGFic29sdXRlX2ZpbGU9IiQocmVhZGxp bmsgIiR7ZmlsZX0iKSI7CiAgICAgICAgICAgICAgICBpZiBbWyAiJHthYnNvbHV0ZV9maWxlfSIg PT0gLyogXV07IHRoZW4KICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZV9maWxlPSIke2ludGVy bWVkaWF0ZV9pbnN0YWxsYXRpb25faW1hZ2VzX2RpcmVjdG9yeX0vJHtQWVRIT05fQUJJfSR7RVBS RUZJWH0vJHthYnNvbHV0ZV9maWxlIyMvfSI7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICAgICAgaWYgW1sgIiR7ZmlsZX0iID09ICovKiBdXTsgdGhlbgogICAgICAgICAgICAg ICAgICAgICAgICBhYnNvbHV0ZV9maWxlPSIke2ludGVybWVkaWF0ZV9pbnN0YWxsYXRpb25faW1h Z2VzX2RpcmVjdG9yeX0vJHtQWVRIT05fQUJJfSR7RVBSRUZJWH0vJHtmaWxlJS8qfS8ke2Fic29s dXRlX2ZpbGV9IjsKICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg ICAgIGFic29sdXRlX2ZpbGU9IiR7aW50ZXJtZWRpYXRlX2luc3RhbGxhdGlvbl9pbWFnZXNfZGly ZWN0b3J5fS8ke1BZVEhPTl9BQkl9JHtFUFJFRklYfS8ke2Fic29sdXRlX2ZpbGV9IjsKICAgICAg ICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgICAgIGZpOwogICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICBhYnNvbHV0ZV9maWxlPSIke2ludGVybWVkaWF0ZV9pbnN0YWxsYXRpb25f aW1hZ2VzX2RpcmVjdG9yeX0vJHtQWVRIT05fQUJJfSR7RVBSRUZJWH0vJHtmaWxlfSI7CiAgICAg ICAgICAgIGZpOwogICAgICAgICAgICBbWyAhIC14ICIke2Fic29sdXRlX2ZpbGV9IiBdXSAmJiBj b250aW51ZTsKICAgICAgICAgICAgc2hlYmFuZz0iJChoZWFkIC1uMSAiJHthYnNvbHV0ZV9maWxl fSIpIiB8fCBkaWUgIkV4dHJhY3Rpb24gb2Ygc2hlYmFuZyBmcm9tICcke2Fic29sdXRlX2ZpbGV9 JyBmYWlsZWQiOwogICAgICAgICAgICBpZiBbWyAiJHt2ZXJzaW9uX2V4ZWN1dGFibGV9IiA9PSAi MiIgXV07IHRoZW4KICAgICAgICAgICAgICAgIHdyYXBwZXJfc2NyaXB0cys9KCIke0VEfSR7Zmls ZX0iKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgaWYgW1sgIiR7dmVyc2lvbl9l eGVjdXRhYmxlfSIgPT0gIjEiIF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgaWYgW1sgIiR7 c2hlYmFuZ30iID1+ICR7X1BZVEhPTl9TSEVCQU5HX0JBU0VfUEFSVF9SRUdFWH0oW1s6ZGlnaXQ6 XV0rKFwuW1s6ZGlnaXQ6XV0rKT8pPygkfFtbOnNwYWNlOl1dKykgXV07IHRoZW4KICAgICAgICAg ICAgICAgICAgICAgICAgd3JhcHBlcl9zY3JpcHRzKz0oIiR7RUR9JHtmaWxlfSIpOwogICAgICAg ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbl9leGVjdXRh YmxlPSIwIjsKICAgICAgICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgICAgIGZpOwogICAg ICAgICAgICBmaTsKICAgICAgICAgICAgW1sgIiR7dmVyc2lvbl9leGVjdXRhYmxlfSIgPT0gIjAi IF1dICYmIGNvbnRpbnVlOwogICAgICAgICAgICBpZiBbWyAtZSAiJHtmaWxlfS0ke1BZVEhPTl9B Qkl9IiBdXTsgdGhlbgogICAgICAgICAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpOiAnJHtFUFJF RklYfS8ke2ZpbGV9LSR7UFlUSE9OX0FCSX0nIGFscmVhZHkgZXhpc3RzIjsKICAgICAgICAgICAg Zmk7CiAgICAgICAgICAgIG12ICIke2ZpbGV9IiAiJHtmaWxlfS0ke1BZVEhPTl9BQkl9IiB8fCBk aWUgIlJlbmFtaW5nIG9mICcke2ZpbGV9JyBmYWlsZWQiOwogICAgICAgICAgICBpZiBbWyAiJHtz aGViYW5nfSIgPX4gJHtfUFlUSE9OX1NIRUJBTkdfQkFTRV9QQVJUX1JFR0VYfVtbOmRpZ2l0Ol1d KigkfFtbOnNwYWNlOl1dKykgXV07IHRoZW4KICAgICAgICAgICAgICAgIGlmIFtbIC1MICIke2Zp bGV9LSR7UFlUSE9OX0FCSX0iIF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgcHl0aG9uX2Nv bnZlcnRfc2hlYmFuZ3MgJChbWyAiJHtxdWlldH0iID09ICIxIiBdXSAmJiBlY2hvIC0tcXVpZXQp ICIke1BZVEhPTl9BQkl9IiAiJHthYnNvbHV0ZV9maWxlfSI7CiAgICAgICAgICAgICAgICBlbHNl CiAgICAgICAgICAgICAgICAgICAgcHl0aG9uX2NvbnZlcnRfc2hlYmFuZ3MgJChbWyAiJHtxdWll dH0iID09ICIxIiBdXSAmJiBlY2hvIC0tcXVpZXQpICIke1BZVEhPTl9BQkl9IiAiJHtmaWxlfS0k e1BZVEhPTl9BQkl9IjsKICAgICAgICAgICAgICAgIGZpOwogICAgICAgICAgICBmaTsKICAgICAg ICBkb25lOwogICAgICAgIHBvcGQgPiAvZGV2L251bGwgfHwgZGllICJwb3BkIGZhaWxlZCI7CiAg ICAgICAgaWYgUk9PVD0iLyIgaGFzX3ZlcnNpb24gJz49c3lzLWFwcHMvY29yZXV0aWxzLTYuOS45 MCc7IHRoZW4KICAgICAgICAgICAgY3AgLWZyIC0tcHJlc2VydmU9YWxsIC0tbm8tcHJlc2VydmU9 Y29udGV4dCAiJHtpbnRlcm1lZGlhdGVfaW5zdGFsbGF0aW9uX2ltYWdlc19kaXJlY3Rvcnl9LyR7 UFlUSE9OX0FCSX0vIiogIiR7RH0iIHx8IGRpZSAiTWVyZ2luZyBvZiBpbnRlcm1lZGlhdGUgaW5z dGFsbGF0aW9uIGltYWdlIGZvciBQeXRob24gQUJJICcke1BZVEhPTl9BQkl9IGludG8gaW5zdGFs bGF0aW9uIGltYWdlIGZhaWxlZCI7CiAgICAgICAgZWxzZQogICAgICAgICAgICBpZiBST09UPSIv IiBoYXNfdmVyc2lvbiBzeXMtYXBwcy9jb3JldXRpbHM7IHRoZW4KICAgICAgICAgICAgICAgIGNw IC1mciAtLXByZXNlcnZlPWFsbCAiJHtpbnRlcm1lZGlhdGVfaW5zdGFsbGF0aW9uX2ltYWdlc19k aXJlY3Rvcnl9LyR7UFlUSE9OX0FCSX0vIiogIiR7RH0iIHx8IGRpZSAiTWVyZ2luZyBvZiBpbnRl cm1lZGlhdGUgaW5zdGFsbGF0aW9uIGltYWdlIGZvciBQeXRob24gQUJJICcke1BZVEhPTl9BQkl9 IGludG8gaW5zdGFsbGF0aW9uIGltYWdlIGZhaWxlZCI7CiAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICAgIGNwIC1mcHIgIiR7aW50ZXJtZWRpYXRlX2luc3RhbGxhdGlvbl9pbWFnZXNfZGly ZWN0b3J5fS8ke1BZVEhPTl9BQkl9LyIqICIke0R9IiB8fCBkaWUgIk1lcmdpbmcgb2YgaW50ZXJt ZWRpYXRlIGluc3RhbGxhdGlvbiBpbWFnZSBmb3IgUHl0aG9uIEFCSSAnJHtQWVRIT05fQUJJfSBp bnRvIGluc3RhbGxhdGlvbiBpbWFnZSBmYWlsZWQiOwogICAgICAgICAgICBmaTsKICAgICAgICBm aTsKICAgIGRvbmU7CiAgICBybSAtZnIgIiR7aW50ZXJtZWRpYXRlX2luc3RhbGxhdGlvbl9pbWFn ZXNfZGlyZWN0b3J5fSI7CiAgICBpZiBbWyAiJHsjd3JhcHBlcl9zY3JpcHRzW0BdfSIgLWdlIDEg XV07IHRoZW4KICAgICAgICBybSAtZiAiJHtUfS9weXRob25fd3JhcHBlcl9zY3JpcHRzIjsKICAg ICAgICBmb3IgZmlsZSBpbiAiJHt3cmFwcGVyX3NjcmlwdHNbQF19IjsKICAgICAgICBkbwogICAg ICAgICAgICBlY2hvIC1uICIke2ZpbGV9IiA+PiAiJHtUfS9weXRob25fd3JhcHBlcl9zY3JpcHRz IjsKICAgICAgICAgICAgZWNobyAtZW4gIlx4MDAiID4+ICIke1R9L3B5dGhvbl93cmFwcGVyX3Nj cmlwdHMiOwogICAgICAgIGRvbmU7CiAgICAgICAgd2hpbGUgcmVhZCAtZCAnJyAtciBmaWxlOyBk bwogICAgICAgICAgICB3cmFwcGVyX3NjcmlwdHNfc2V0Kz0oIiR7ZmlsZX0iKTsKICAgICAgICBk b25lIDwgPCgiJChQWVRIT04gLWYpIiAtYyAiaW1wb3J0IHN5cwoKaWYgaGFzYXR0cihzeXMuc3Rk b3V0LCAnYnVmZmVyJyk6CgkjIFB5dGhvbiAzCglzdGRvdXQgPSBzeXMuc3Rkb3V0LmJ1ZmZlcgpl bHNlOgoJIyBQeXRob24gMgoJc3Rkb3V0ID0gc3lzLnN0ZG91dAoKcHl0aG9uX3dyYXBwZXJfc2Ny aXB0c19maWxlID0gb3BlbignJHtUfS9weXRob25fd3JhcHBlcl9zY3JpcHRzJywgJ3JiJykKZmls ZXMgPSBzZXQocHl0aG9uX3dyYXBwZXJfc2NyaXB0c19maWxlLnJlYWQoKS5yc3RyaXAoJHtifSdc eDAwJykuc3BsaXQoJHtifSdceDAwJykpCnB5dGhvbl93cmFwcGVyX3NjcmlwdHNfZmlsZS5jbG9z ZSgpCgpmb3IgZmlsZSBpbiBzb3J0ZWQoZmlsZXMpOgoJc3Rkb3V0LndyaXRlKGZpbGUpCglzdGRv dXQud3JpdGUoJHtifSdceDAwJykiIHx8IGRpZSAiJHtGVU5DTkFNRX0oKTogRmFpbHVyZSBvZiBl eHRyYWN0aW9uIG9mIHNldCBvZiB3cmFwcGVyIHNjcmlwdHMiKTsKICAgICAgICBweXRob25fZ2Vu ZXJhdGVfd3JhcHBlcl9zY3JpcHRzICQoW1sgIiR7cXVpZXR9IiA9PSAiMSIgXV0gJiYgZWNobyAt LXF1aWV0KSAiJHt3cmFwcGVyX3NjcmlwdHNfc2V0W0BdfSI7CiAgICBmaQp9CnB5dGhvbl9tb2Rf Y2xlYW51cCAoKSAKeyAKICAgIGlmIFtbICIke0VCVUlMRF9QSEFTRX0iICE9ICJwb3N0cm0iIF1d OyB0aGVuCiAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpIGNhbiBiZSB1c2VkIG9ubHkgaW4gcGtn X3Bvc3RybSgpIHBoYXNlIjsKICAgIGZpOwogICAgX3B5dGhvbl9jaGVja19weXRob25fcGtnX3Nl dHVwX2V4ZWN1dGlvbjsKICAgIF9weXRob25faW5pdGlhbGl6ZV9wcmVmaXhfdmFyaWFibGVzOwog ICAgbG9jYWwgYWxsb3dfZXZhbHVhdGVkX25vbl9zaXRlZGlyX3BhdGhzPSIwIiBkaXIgaXRlcmF0 ZWRfUFlUSE9OX0FCSVMgUFlUSE9OX0FCST0iJHtQWVRIT05fQUJJfSIgcm9vdCBzZWFyY2hfcGF0 aHM9KCkgc2l0ZWRpcjsKICAgIGlmIF9weXRob25fcGFja2FnZV9zdXBwb3J0aW5nX2luc3RhbGxh dGlvbl9mb3JfbXVsdGlwbGVfcHl0aG9uX2FiaXM7IHRoZW4KICAgICAgICBpZiBoYXMgIiR7RUFQ STotMH0iIDAgMSAyIDMgJiYgW1sgLXogIiR7UFlUSE9OX0FCSVN9IiBdXTsgdGhlbgogICAgICAg ICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6IHB5dGhvbl9wa2dfc2V0dXAoKSBvciBweXRob25fZXhl Y3V0ZV9mdW5jdGlvbigpIG5vdCBjYWxsZWQiOwogICAgICAgIGZpOwogICAgICAgIGl0ZXJhdGVk X1BZVEhPTl9BQklTPSIke1BZVEhPTl9BQklTfSI7CiAgICBlbHNlCiAgICAgICAgaWYgaGFzICIk e0VBUEk6LTB9IiAwIDEgMiAzOyB0aGVuCiAgICAgICAgICAgIGl0ZXJhdGVkX1BZVEhPTl9BQklT PSIke1BZVEhPTl9BQkk6LSQoUFlUSE9OIC0tQUJJKX0iOwogICAgICAgIGVsc2UKICAgICAgICAg ICAgaXRlcmF0ZWRfUFlUSE9OX0FCSVM9IiR7UFlUSE9OX0FCSX0iOwogICAgICAgIGZpOwogICAg Zmk7CiAgICByb290PSIke0VST09UJS99IjsKICAgIHdoaWxlICgoJCMpKTsgZG8KICAgICAgICBj YXNlICIkMSIgaW4gCiAgICAgICAgICAgIC0tYWxsb3ctZXZhbHVhdGVkLW5vbi1zaXRlZGlyLXBh dGhzKQogICAgICAgICAgICAgICAgYWxsb3dfZXZhbHVhdGVkX25vbl9zaXRlZGlyX3BhdGhzPSIx IgogICAgICAgICAgICA7OwogICAgICAgICAgICAtLSkKICAgICAgICAgICAgICAgIHNoaWZ0Owog ICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgOzsKICAgICAgICAgICAgLSopCiAgICAg ICAgICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6IFVucmVjb2duaXplZCBvcHRpb24gJyQxJyIK ICAgICAgICAgICAgOzsKICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAg ICAgICAgIDs7CiAgICAgICAgZXNhYzsKICAgICAgICBzaGlmdDsKICAgIGRvbmU7CiAgICBpZiBb WyAiJHthbGxvd19ldmFsdWF0ZWRfbm9uX3NpdGVkaXJfcGF0aHN9IiA9PSAiMSIgXV0gJiYgISBf cHl0aG9uX3BhY2thZ2Vfc3VwcG9ydGluZ19pbnN0YWxsYXRpb25fZm9yX211bHRpcGxlX3B5dGhv bl9hYmlzOyB0aGVuCiAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpOiAnLS1hbGxvdy1ldmFsdWF0 ZWQtbm9uLXNpdGVkaXItcGF0aHMnIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCBpbiBlYnVpbGRzIG9m IHBhY2thZ2VzIG5vdCBzdXBwb3J0aW5nIGluc3RhbGxhdGlvbiBmb3IgbXVsdGlwbGUgUHl0aG9u IEFCSXMiOwogICAgZmk7CiAgICBpZiBbWyAiJCMiIC1lcSAwIF1dOyB0aGVuCiAgICAgICAgZGll ICIke0ZVTkNOQU1FfSgpOiBNaXNzaW5nIGZpbGVzIG9yIGRpcmVjdG9yaWVzIjsKICAgIGZpOwog ICAgaWYgISBoYXMgIiR7RUFQSTotMH0iIDAgMSAyIHx8IF9weXRob25fcGFja2FnZV9zdXBwb3J0 aW5nX2luc3RhbGxhdGlvbl9mb3JfbXVsdGlwbGVfcHl0aG9uX2FiaXMgfHwgX3B5dGhvbl9pbXBs ZW1lbnRhdGlvbiB8fCBbWyAiJHtDQVRFR09SWX0vJHtQTn0iID09ICJzeXMtYXBwcy9wb3J0YWdl IiBdXTsgdGhlbgogICAgICAgIHdoaWxlICgoJCMpKTsgZG8KICAgICAgICAgICAgaWYgW1sgIiQx IiA9fiBeKCR8KFwufFwuXC58LykoJHwvKSkgXV07IHRoZW4KICAgICAgICAgICAgICAgIGRpZSAi JHtGVU5DTkFNRX0oKTogSW52YWxpZCBhcmd1bWVudCAnJDEnIjsKICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgICAgaWYgISBfcHl0aG9uX2ltcGxlbWVudGF0aW9uICYmIFtbICIkMSIgPX4g Xi91c3IvbGliKDMyfDY0KT8vcHl0aG9uW1s6ZGlnaXQ6XV0rXC5bWzpkaWdpdDpdXSsgXV07IHRo ZW4KICAgICAgICAgICAgICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6IFBhdGhzIG9mIGRpcmVj dG9yaWVzIC8gZmlsZXMgaW4gc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcmllcyBtdXN0IGJlIHJlbGF0 aXZlIHRvIHNpdGUtcGFja2FnZXMgZGlyZWN0b3JpZXMiOwogICAgICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgICAgICAgIGlmIFtbICIkMSIgPX4gXi8gXV07IHRoZW4KICAgICAgICAgICAg ICAgICAgICAgICAgaWYgX3B5dGhvbl9wYWNrYWdlX3N1cHBvcnRpbmdfaW5zdGFsbGF0aW9uX2Zv cl9tdWx0aXBsZV9weXRob25fYWJpczsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgW1sgIiR7YWxsb3dfZXZhbHVhdGVkX25vbl9zaXRlZGlyX3BhdGhzfSIgIT0gIjEiIF1dOyB0 aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpOiBB YnNvbHV0ZSBwYXRocyBjYW5ub3QgYmUgdXNlZCBpbiBlYnVpbGRzIG9mIHBhY2thZ2VzIHN1cHBv cnRpbmcgaW5zdGFsbGF0aW9uIGZvciBtdWx0aXBsZSBQeXRob24gQUJJcyI7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIFtbICIk MSIgIT0gKlwkKiBdXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZSAi JHtGVU5DTkFNRX0oKTogJyQxJyBoYXMgaW52YWxpZCBzeW50YXgiOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgZmk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgUFlUSE9OX0FC SSBpbiAke2l0ZXJhdGVkX1BZVEhPTl9BQklTfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCAic2VhcmNoX3BhdGhzKz0o XCJcJHtyb290fSQxXCIpIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU7CiAgICAg ICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJj aF9wYXRocys9KCIke3Jvb3R9JDEiKTsKICAgICAgICAgICAgICAgICAgICAgICAgZmk7CiAgICAg ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgUFlUSE9OX0FC SSBpbiAke2l0ZXJhdGVkX1BZVEhPTl9BQklTfTsKICAgICAgICAgICAgICAgICAgICAgICAgZG8K ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaF9wYXRocys9KCIke3Jvb3R9JChweXRo b25fZ2V0X3NpdGVkaXIpLyQxIik7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU7CiAgICAg ICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgZmk7CiAg ICAgICAgICAgIHNoaWZ0OwogICAgICAgIGRvbmU7CiAgICBlbHNlCiAgICAgICAgZXdhcm47CiAg ICAgICAgZXdhcm4gIkRlcHJlY2F0aW9uIFdhcm5pbmc6IFVzYWdlIG9mICR7RlVOQ05BTUV9KCkg aW4gcGFja2FnZXMgbm90IHN1cHBvcnRpbmcgaW5zdGFsbGF0aW9uIjsKICAgICAgICBld2FybiAi Zm9yIG11bHRpcGxlIFB5dGhvbiBBQklzIGluIEVBUEkgPD0yIGlzIGRlcHJlY2F0ZWQgYW5kIHdp bGwgYmUgZGlzYWxsb3dlZCBvbiAyMDExLTA4LTAxLiI7CiAgICAgICAgZXdhcm4gIlVzZSBFQVBJ ID49MyBhbmQgY2FsbCAke0ZVTkNOQU1FfSgpIHdpdGggcGF0aHMgaGF2aW5nIGFwcHJvcHJpYXRl IHN5bnRheC4iOwogICAgICAgIGV3YXJuICJUaGUgZWJ1aWxkIG5lZWRzIHRvIGJlIGZpeGVkLiBQ bGVhc2UgcmVwb3J0IGEgYnVnLCBpZiBpdCBoYXMgbm90IGJlZW4gYWxyZWFkeSByZXBvcnRlZC4i OwogICAgICAgIGV3YXJuOwogICAgICAgIHNlYXJjaF9wYXRocz0oIiR7QCMvfSIpOwogICAgICAg IHNlYXJjaF9wYXRocz0oIiR7c2VhcmNoX3BhdGhzW0BdLyMvJHtyb290fS99Iik7CiAgICBmaTsK ICAgIF9weXRob25fY2xlYW5fY29tcGlsZWRfbW9kdWxlcyAiJHtzZWFyY2hfcGF0aHNbQF19Igp9 CnB5dGhvbl9tb2Rfb3B0aW1pemUgKCkgCnsgCiAgICBpZiBbWyAiJHtFQlVJTERfUEhBU0V9IiAh PSAicG9zdGluc3QiIF1dOyB0aGVuCiAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpIGNhbiBiZSB1 c2VkIG9ubHkgaW4gcGtnX3Bvc3RpbnN0KCkgcGhhc2UiOwogICAgZmk7CiAgICBfcHl0aG9uX2No ZWNrX3B5dGhvbl9wa2dfc2V0dXBfZXhlY3V0aW9uOwogICAgX3B5dGhvbl9pbml0aWFsaXplX3By ZWZpeF92YXJpYWJsZXM7CiAgICBpZiAhIGhhcyAiJHtFQVBJOi0wfSIgMCAxIDIgfHwgX3B5dGhv bl9wYWNrYWdlX3N1cHBvcnRpbmdfaW5zdGFsbGF0aW9uX2Zvcl9tdWx0aXBsZV9weXRob25fYWJp cyB8fCBfcHl0aG9uX2ltcGxlbWVudGF0aW9uIHx8IFtbICIke0NBVEVHT1JZfS8ke1BOfSIgPT0g InN5cy1hcHBzL3BvcnRhZ2UiIF1dOyB0aGVuCiAgICAgICAgbG9jYWwgYWxsb3dfZXZhbHVhdGVk X25vbl9zaXRlZGlyX3BhdGhzPSIwIiBkaXIgZGlycz0oKSBldmFsdWF0ZWRfZGlycz0oKSBldmFs dWF0ZWRfZmlsZXM9KCkgZmlsZSBmaWxlcz0oKSBpdGVyYXRlZF9QWVRIT05fQUJJUyBvcHRpb25z PSgpIG90aGVyX2RpcnM9KCkgb3RoZXJfZmlsZXM9KCkgcHJldmlvdXNfUFlUSE9OX0FCST0iJHtQ WVRIT05fQUJJfSIgcmV0dXJuX2NvZGUgcm9vdCBzaXRlX3BhY2thZ2VzX2RpcnM9KCkgc2l0ZV9w YWNrYWdlc19maWxlcz0oKSBzdGRlcnIgc3RkZXJyX2xpbmU7CiAgICAgICAgaWYgX3B5dGhvbl9w YWNrYWdlX3N1cHBvcnRpbmdfaW5zdGFsbGF0aW9uX2Zvcl9tdWx0aXBsZV9weXRob25fYWJpczsg dGhlbgogICAgICAgICAgICBpZiBoYXMgIiR7RUFQSTotMH0iIDAgMSAyIDMgJiYgW1sgLXogIiR7 UFlUSE9OX0FCSVN9IiBdXTsgdGhlbgogICAgICAgICAgICAgICAgZGllICIke0ZVTkNOQU1FfSgp OiBweXRob25fcGtnX3NldHVwKCkgb3IgcHl0aG9uX2V4ZWN1dGVfZnVuY3Rpb24oKSBub3QgY2Fs bGVkIjsKICAgICAgICAgICAgZmk7CiAgICAgICAgICAgIGl0ZXJhdGVkX1BZVEhPTl9BQklTPSIk e1BZVEhPTl9BQklTfSI7CiAgICAgICAgZWxzZQogICAgICAgICAgICBpZiBoYXMgIiR7RUFQSTot MH0iIDAgMSAyIDM7IHRoZW4KICAgICAgICAgICAgICAgIGl0ZXJhdGVkX1BZVEhPTl9BQklTPSIk e1BZVEhPTl9BQkk6PSQoUFlUSE9OIC0tQUJJKX0iOwogICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICBpdGVyYXRlZF9QWVRIT05fQUJJUz0iJHtQWVRIT05fQUJJfSI7CiAgICAgICAgICAg IGZpOwogICAgICAgIGZpOwogICAgICAgIHJvb3Q9IiR7RVJPT1QlL30iOwogICAgICAgIHdoaWxl ICgoJCMpKTsgZG8KICAgICAgICAgICAgY2FzZSAiJDEiIGluIAogICAgICAgICAgICAgICAgLS1h bGxvdy1ldmFsdWF0ZWQtbm9uLXNpdGVkaXItcGF0aHMpCiAgICAgICAgICAgICAgICAgICAgYWxs b3dfZXZhbHVhdGVkX25vbl9zaXRlZGlyX3BhdGhzPSIxIgogICAgICAgICAgICAgICAgOzsKICAg ICAgICAgICAgICAgIC1sIHwgLWYgfCAtcSkKICAgICAgICAgICAgICAgICAgICBvcHRpb25zKz0o IiQxIikKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAtZCB8IC14KQogICAgICAg ICAgICAgICAgICAgIG9wdGlvbnMrPSgiJDEiICIkMiIpOwogICAgICAgICAgICAgICAgICAgIHNo aWZ0CiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgLS0pCiAgICAgICAgICAgICAg ICAgICAgc2hpZnQ7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgIDs7 CiAgICAgICAgICAgICAgICAtKikKICAgICAgICAgICAgICAgICAgICBkaWUgIiR7RlVOQ05BTUV9 KCk6IFVucmVjb2duaXplZCBvcHRpb24gJyQxJyIKICAgICAgICAgICAgICAgIDs7CiAgICAgICAg ICAgICAgICAqKQogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICA7Owog ICAgICAgICAgICBlc2FjOwogICAgICAgICAgICBzaGlmdDsKICAgICAgICBkb25lOwogICAgICAg IGlmIFtbICIke2FsbG93X2V2YWx1YXRlZF9ub25fc2l0ZWRpcl9wYXRoc30iID09ICIxIiBdXSAm JiAhIF9weXRob25fcGFja2FnZV9zdXBwb3J0aW5nX2luc3RhbGxhdGlvbl9mb3JfbXVsdGlwbGVf cHl0aG9uX2FiaXM7IHRoZW4KICAgICAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpOiAnLS1hbGxv dy1ldmFsdWF0ZWQtbm9uLXNpdGVkaXItcGF0aHMnIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCBpbiBl YnVpbGRzIG9mIHBhY2thZ2VzIG5vdCBzdXBwb3J0aW5nIGluc3RhbGxhdGlvbiBmb3IgbXVsdGlw bGUgUHl0aG9uIEFCSXMiOwogICAgICAgIGZpOwogICAgICAgIGlmIFtbICIkIyIgLWVxIDAgXV07 IHRoZW4KICAgICAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpOiBNaXNzaW5nIGZpbGVzIG9yIGRp cmVjdG9yaWVzIjsKICAgICAgICBmaTsKICAgICAgICB3aGlsZSAoKCQjKSk7IGRvCiAgICAgICAg ICAgIGlmIFtbICIkMSIgPX4gXigkfChcLnxcLlwufC8pKCR8LykpIF1dOyB0aGVuCiAgICAgICAg ICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6IEludmFsaWQgYXJndW1lbnQgJyQxJyI7CiAgICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGlmICEgX3B5dGhvbl9pbXBsZW1lbnRhdGlvbiAm JiBbWyAiJDEiID1+IF4vdXNyL2xpYigzMnw2NCk/L3B5dGhvbltbOmRpZ2l0Ol1dK1wuW1s6ZGln aXQ6XV0rIF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpOiBQ YXRocyBvZiBkaXJlY3RvcmllcyAvIGZpbGVzIGluIHNpdGUtcGFja2FnZXMgZGlyZWN0b3JpZXMg bXVzdCBiZSByZWxhdGl2ZSB0byBzaXRlLXBhY2thZ2VzIGRpcmVjdG9yaWVzIjsKICAgICAgICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBpZiBbWyAiJDEiID1+IF4vIF1dOyB0aGVu CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIF9weXRob25fcGFja2FnZV9zdXBwb3J0aW5nX2lu c3RhbGxhdGlvbl9mb3JfbXVsdGlwbGVfcHl0aG9uX2FiaXM7IHRoZW4KICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIFtbICIke2FsbG93X2V2YWx1YXRlZF9ub25fc2l0ZWRpcl9wYXRoc30i ICE9ICIxIiBdXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZSAiJHtG VU5DTkFNRX0oKTogQWJzb2x1dGUgcGF0aHMgY2Fubm90IGJlIHVzZWQgaW4gZWJ1aWxkcyBvZiBw YWNrYWdlcyBzdXBwb3J0aW5nIGluc3RhbGxhdGlvbiBmb3IgbXVsdGlwbGUgUHl0aG9uIEFCSXMi OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiBbWyAiJDEiICE9ICpcJCogXV07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6ICckMScgaGFzIGludmFsaWQgc3ludGF4IjsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgW1sgIiQxIiA9PSAqLnB5IF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZXZhbHVhdGVkX2ZpbGVzKz0oIiQxIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBl bHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbHVhdGVkX2RpcnMrPSgiJDEi KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpOwogICAgICAgICAgICAgICAgICAgICAg ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBbWyAtZCAiJHtyb290fSQxIiBd XTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyX2RpcnMrPSgiJHty b290fSQxIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgW1sgLWYgIiR7cm9vdH0kMSIgXV07IHRoZW4KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJfZmlsZXMrPSgiJHtyb290fSQxIik7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiBbWyAtZSAiJHtyb290fSQxIiBdXTsgdGhlbgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWVycm9yICIke0ZVTkNOQU1FfSgpOiAnJHtyb290 fSQxJyBpcyBub3QgYSByZWd1bGFyIGZpbGUgb3IgYSBkaXJlY3RvcnkiOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBlZXJyb3IgIiR7RlVOQ05BTUV9KCk6ICcke3Jvb3R9JDEnIGRvZXMgbm90IGV4 aXN0IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaTsK ICAgICAgICAgICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgICAgICAgICBmb3IgUFlUSE9OX0FCSSBpbiAke2l0ZXJhdGVkX1BZVEhPTl9B QklTfTsKICAgICAgICAgICAgICAgICAgICAgICAgZG8KICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmIFtbIC1kICIke3Jvb3R9JChweXRob25fZ2V0X3NpdGVkaXIpLyQxIiBdXTsgdGhlbgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpdGVfcGFja2FnZXNfZGlycys9KCIkMSIp OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIFtbIC1m ICIke3Jvb3R9JChweXRob25fZ2V0X3NpdGVkaXIpLyQxIiBdXTsgdGhlbgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXRlX3BhY2thZ2VzX2ZpbGVzKz0oIiQxIik7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg W1sgLWUgIiR7cm9vdH0kKHB5dGhvbl9nZXRfc2l0ZWRpcikvJDEiIF1dOyB0aGVuCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZXJyb3IgIiR7RlVOQ05BTUV9KCk6ICck MScgaXMgbm90IGEgcmVndWxhciBmaWxlIG9yIGEgZGlyZWN0b3J5IjsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZWVycm9yICIke0ZVTkNOQU1FfSgpOiAnJDEnIGRvZXMgbm90IGV4aXN0IjsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZmk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaTsKICAgICAgICAg ICAgICAgICAgICAgICAgZG9uZTsKICAgICAgICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAg ICAgIGZpOwogICAgICAgICAgICBmaTsKICAgICAgICAgICAgc2hpZnQ7CiAgICAgICAgZG9uZTsK ICAgICAgICBvcHRpb25zKz0oIi1xIik7CiAgICAgICAgZm9yIFBZVEhPTl9BQkkgaW4gJHtpdGVy YXRlZF9QWVRIT05fQUJJU307CiAgICAgICAgZG8KICAgICAgICAgICAgaWYgKCgkeyNzaXRlX3Bh Y2thZ2VzX2RpcnNbQF19KSkgfHwgKCgkeyNzaXRlX3BhY2thZ2VzX2ZpbGVzW0BdfSkpIHx8ICgo JHsjZXZhbHVhdGVkX2RpcnNbQF19KSkgfHwgKCgkeyNldmFsdWF0ZWRfZmlsZXNbQF19KSk7IHRo ZW4KICAgICAgICAgICAgICAgIHJldHVybl9jb2RlPSIwIjsKICAgICAgICAgICAgICAgIHN0ZGVy cj0iIjsKICAgICAgICAgICAgICAgIGViZWdpbiAiQ29tcGlsYXRpb24gYW5kIG9wdGltaXphdGlv biBvZiBQeXRob24gbW9kdWxlcyBmb3IgJChweXRob25fZ2V0X2ltcGxlbWVudGF0aW9uX2FuZF92 ZXJzaW9uKSI7CiAgICAgICAgICAgICAgICBpZiAoKCR7I3NpdGVfcGFja2FnZXNfZGlyc1tAXX0p KSB8fCAoKCR7I2V2YWx1YXRlZF9kaXJzW0BdfSkpOyB0aGVuCiAgICAgICAgICAgICAgICAgICAg Zm9yIGRpciBpbiAiJHtzaXRlX3BhY2thZ2VzX2RpcnNbQF19IjsKICAgICAgICAgICAgICAgICAg ICBkbwogICAgICAgICAgICAgICAgICAgICAgICBkaXJzKz0oIiR7cm9vdH0kKHB5dGhvbl9nZXRf c2l0ZWRpcikvJHtkaXJ9Iik7CiAgICAgICAgICAgICAgICAgICAgZG9uZTsKICAgICAgICAgICAg ICAgICAgICBmb3IgZGlyIGluICIke2V2YWx1YXRlZF9kaXJzW0BdfSI7CiAgICAgICAgICAgICAg ICAgICAgZG8KICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCAiZGlycys9KFwiXCR7cm9vdH0k e2Rpcn1cIikiOwogICAgICAgICAgICAgICAgICAgIGRvbmU7CiAgICAgICAgICAgICAgICAgICAg c3RkZXJyKz0iJHtzdGRlcnI6Kwp9JCgiJChQWVRIT04pIiAtbSBjb21waWxlYWxsICIke29wdGlv bnNbQF19IiAiJHtkaXJzW0BdfSIgMj4mMSkiIHx8IHJldHVybl9jb2RlPSIxIjsKICAgICAgICAg ICAgICAgICAgICBpZiAhIGhhcyAiJChfcHl0aG9uX2dldF9pbXBsZW1lbnRhdGlvbiAiJHtQWVRI T05fQUJJfSIpIiBKeXRob24gUHlQeTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAiJChQ WVRIT04pIiAtTyAtbSBjb21waWxlYWxsICIke29wdGlvbnNbQF19IiAiJHtkaXJzW0BdfSIgJj4v ZGV2L251bGwgfHwgcmV0dXJuX2NvZGU9IjEiOwogICAgICAgICAgICAgICAgICAgIGZpOwogICAg ICAgICAgICAgICAgICAgIF9weXRob25fY2xlYW5fY29tcGlsZWRfbW9kdWxlcyAiJHtkaXJzW0Bd fSI7CiAgICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgICAgIGlmICgoJHsjc2l0ZV9wYWNr YWdlc19maWxlc1tAXX0pKSB8fCAoKCR7I2V2YWx1YXRlZF9maWxlc1tAXX0pKTsgdGhlbgogICAg ICAgICAgICAgICAgICAgIGZvciBmaWxlIGluICIke3NpdGVfcGFja2FnZXNfZmlsZXNbQF19IjsK ICAgICAgICAgICAgICAgICAgICBkbwogICAgICAgICAgICAgICAgICAgICAgICBmaWxlcys9KCIk e3Jvb3R9JChweXRob25fZ2V0X3NpdGVkaXIpLyR7ZmlsZX0iKTsKICAgICAgICAgICAgICAgICAg ICBkb25lOwogICAgICAgICAgICAgICAgICAgIGZvciBmaWxlIGluICIke2V2YWx1YXRlZF9maWxl c1tAXX0iOwogICAgICAgICAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAgICAgICAgICAgIGV2 YWwgImZpbGVzKz0oXCJcJHtyb290fSR7ZmlsZX1cIikiOwogICAgICAgICAgICAgICAgICAgIGRv bmU7CiAgICAgICAgICAgICAgICAgICAgc3RkZXJyKz0iJHtzdGRlcnI6Kwp9JCgiJChQWVRIT04p IiAtbSBweV9jb21waWxlICIke2ZpbGVzW0BdfSIgMj4mMSkiIHx8IHJldHVybl9jb2RlPSIxIjsK ICAgICAgICAgICAgICAgICAgICBpZiAhIGhhcyAiJChfcHl0aG9uX2dldF9pbXBsZW1lbnRhdGlv biAiJHtQWVRIT05fQUJJfSIpIiBKeXRob24gUHlQeTsgdGhlbgogICAgICAgICAgICAgICAgICAg ICAgICAiJChQWVRIT04pIiAtTyAtbSBweV9jb21waWxlICIke2ZpbGVzW0BdfSIgJj4vZGV2L251 bGwgfHwgcmV0dXJuX2NvZGU9IjEiOwogICAgICAgICAgICAgICAgICAgIGZpOwogICAgICAgICAg ICAgICAgICAgIF9weXRob25fY2xlYW5fY29tcGlsZWRfbW9kdWxlcyAiJHtmaWxlc1tAXX0iOwog ICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgICAgICBlZW5kICIke3JldHVybl9jb2RlfSI7 CiAgICAgICAgICAgICAgICBpZiBbWyAtbiAiJHtzdGRlcnJ9IiBdXTsgdGhlbgogICAgICAgICAg ICAgICAgICAgIGVlcnJvciAiU3ludGF4IGVycm9ycyAvIHdhcm5pbmdzIGluIFB5dGhvbiBtb2R1 bGVzIGZvciAkKHB5dGhvbl9nZXRfaW1wbGVtZW50YXRpb25fYW5kX3ZlcnNpb24pOiIgJj4vZGV2 L251bGw7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgcmVhZCBzdGRlcnJfbGluZTsgZG8KICAg ICAgICAgICAgICAgICAgICAgICAgZWVycm9yICIgICAgJHtzdGRlcnJfbGluZX0iOwogICAgICAg ICAgICAgICAgICAgIGRvbmUgPDw8ICIke3N0ZGVycn0iOwogICAgICAgICAgICAgICAgZmk7CiAg ICAgICAgICAgIGZpOwogICAgICAgICAgICB1bnNldCBkaXJzIGZpbGVzOwogICAgICAgIGRvbmU7 CiAgICAgICAgaWYgX3B5dGhvbl9wYWNrYWdlX3N1cHBvcnRpbmdfaW5zdGFsbGF0aW9uX2Zvcl9t dWx0aXBsZV9weXRob25fYWJpczsgdGhlbgogICAgICAgICAgICBpZiBbWyAtbiAiJHtwcmV2aW91 c19QWVRIT05fQUJJfSIgXV07IHRoZW4KICAgICAgICAgICAgICAgIFBZVEhPTl9BQkk9IiR7cHJl dmlvdXNfUFlUSE9OX0FCSX0iOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB1bnNl dCBQWVRIT05fQUJJOwogICAgICAgICAgICBmaTsKICAgICAgICBmaTsKICAgICAgICBpZiAoKCR7 I290aGVyX2RpcnNbQF19KSkgfHwgKCgkeyNvdGhlcl9maWxlc1tAXX0pKTsgdGhlbgogICAgICAg ICAgICByZXR1cm5fY29kZT0iMCI7CiAgICAgICAgICAgIHN0ZGVycj0iIjsKICAgICAgICAgICAg ZWJlZ2luICJDb21waWxhdGlvbiBhbmQgb3B0aW1pemF0aW9uIG9mIFB5dGhvbiBtb2R1bGVzIHBs YWNlZCBvdXRzaWRlIG9mIHNpdGUtcGFja2FnZXMgZGlyZWN0b3JpZXMgZm9yICQocHl0aG9uX2dl dF9pbXBsZW1lbnRhdGlvbl9hbmRfdmVyc2lvbikiOwogICAgICAgICAgICBpZiAoKCR7I290aGVy X2RpcnNbQF19KSk7IHRoZW4KICAgICAgICAgICAgICAgIHN0ZGVycis9IiR7c3RkZXJyOisKfSQo IiQoUFlUSE9OICR7UFlUSE9OX0FCSX0pIiAtbSBjb21waWxlYWxsICIke29wdGlvbnNbQF19IiAi JHtvdGhlcl9kaXJzW0BdfSIgMj4mMSkiIHx8IHJldHVybl9jb2RlPSIxIjsKICAgICAgICAgICAg ICAgIGlmICEgaGFzICIkKF9weXRob25fZ2V0X2ltcGxlbWVudGF0aW9uICIke1BZVEhPTl9BQkl9 IikiIEp5dGhvbiBQeVB5OyB0aGVuCiAgICAgICAgICAgICAgICAgICAgIiQoUFlUSE9OICR7UFlU SE9OX0FCSX0pIiAtTyAtbSBjb21waWxlYWxsICIke29wdGlvbnNbQF19IiAiJHtvdGhlcl9kaXJz W0BdfSIgJj4vZGV2L251bGwgfHwgcmV0dXJuX2NvZGU9IjEiOwogICAgICAgICAgICAgICAgZmk7 CiAgICAgICAgICAgICAgICBfcHl0aG9uX2NsZWFuX2NvbXBpbGVkX21vZHVsZXMgIiR7b3RoZXJf ZGlyc1tAXX0iOwogICAgICAgICAgICBmaTsKICAgICAgICAgICAgaWYgKCgkeyNvdGhlcl9maWxl c1tAXX0pKTsgdGhlbgogICAgICAgICAgICAgICAgc3RkZXJyKz0iJHtzdGRlcnI6Kwp9JCgiJChQ WVRIT04gJHtQWVRIT05fQUJJfSkiIC1tIHB5X2NvbXBpbGUgIiR7b3RoZXJfZmlsZXNbQF19IiAy PiYxKSIgfHwgcmV0dXJuX2NvZGU9IjEiOwogICAgICAgICAgICAgICAgaWYgISBoYXMgIiQoX3B5 dGhvbl9nZXRfaW1wbGVtZW50YXRpb24gIiR7UFlUSE9OX0FCSX0iKSIgSnl0aG9uIFB5UHk7IHRo ZW4KICAgICAgICAgICAgICAgICAgICAiJChQWVRIT04gJHtQWVRIT05fQUJJfSkiIC1PIC1tIHB5 X2NvbXBpbGUgIiR7b3RoZXJfZmlsZXNbQF19IiAmPi9kZXYvbnVsbCB8fCByZXR1cm5fY29kZT0i MSI7CiAgICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgICAgIF9weXRob25fY2xlYW5fY29t cGlsZWRfbW9kdWxlcyAiJHtvdGhlcl9maWxlc1tAXX0iOwogICAgICAgICAgICBmaTsKICAgICAg ICAgICAgZWVuZCAiJHtyZXR1cm5fY29kZX0iOwogICAgICAgICAgICBpZiBbWyAtbiAiJHtzdGRl cnJ9IiBdXTsgdGhlbgogICAgICAgICAgICAgICAgZWVycm9yICJTeW50YXggZXJyb3JzIC8gd2Fy bmluZ3MgaW4gUHl0aG9uIG1vZHVsZXMgcGxhY2VkIG91dHNpZGUgb2Ygc2l0ZS1wYWNrYWdlcyBk aXJlY3RvcmllcyBmb3IgJChweXRob25fZ2V0X2ltcGxlbWVudGF0aW9uX2FuZF92ZXJzaW9uKToi ICY+L2Rldi9udWxsOwogICAgICAgICAgICAgICAgd2hpbGUgcmVhZCBzdGRlcnJfbGluZTsgZG8K ICAgICAgICAgICAgICAgICAgICBlZXJyb3IgIiAgICAke3N0ZGVycl9saW5lfSI7CiAgICAgICAg ICAgICAgICBkb25lIDw8PCAiJHtzdGRlcnJ9IjsKICAgICAgICAgICAgZmk7CiAgICAgICAgZmk7 CiAgICBlbHNlCiAgICAgICAgZXdhcm47CiAgICAgICAgZXdhcm4gIkRlcHJlY2F0aW9uIFdhcm5p bmc6IFVzYWdlIG9mICR7RlVOQ05BTUV9KCkgaW4gcGFja2FnZXMgbm90IHN1cHBvcnRpbmcgaW5z dGFsbGF0aW9uIjsKICAgICAgICBld2FybiAiZm9yIG11bHRpcGxlIFB5dGhvbiBBQklzIGluIEVB UEkgPD0yIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgZGlzYWxsb3dlZCBvbiAyMDExLTA4LTAx LiI7CiAgICAgICAgZXdhcm4gIlVzZSBFQVBJID49MyBhbmQgY2FsbCAke0ZVTkNOQU1FfSgpIHdp dGggcGF0aHMgaGF2aW5nIGFwcHJvcHJpYXRlIHN5bnRheC4iOwogICAgICAgIGV3YXJuICJUaGUg ZWJ1aWxkIG5lZWRzIHRvIGJlIGZpeGVkLiBQbGVhc2UgcmVwb3J0IGEgYnVnLCBpZiBpdCBoYXMg bm90IGJlZW4gYWxyZWFkeSByZXBvcnRlZC4iOwogICAgICAgIGV3YXJuOwogICAgICAgIGxvY2Fs IG15cm9vdCBteWRpcnM9KCkgbXlmaWxlcz0oKSBteW9wdHM9KCkgcmV0dXJuX2NvZGU9IjAiOwog ICAgICAgIG15cm9vdD0iJHtFUk9PVCUvfSI7CiAgICAgICAgd2hpbGUgKCgkIykpOyBkbwogICAg ICAgICAgICBjYXNlICIkMSIgaW4gCiAgICAgICAgICAgICAgICAtbCB8IC1mIHwgLXEpCiAgICAg ICAgICAgICAgICAgICAgbXlvcHRzKz0oIiQxIikKICAgICAgICAgICAgICAgIDs7CiAgICAgICAg ICAgICAgICAtZCB8IC14KQogICAgICAgICAgICAgICAgICAgIG15b3B0cys9KCIkMSIgIiQyIik7 CiAgICAgICAgICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAg ICAgICAtLSkKICAgICAgICAgICAgICAgICAgICBzaGlmdDsKICAgICAgICAgICAgICAgICAgICBi cmVhawogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgIC0qKQogICAgICAgICAgICAg ICAgICAgIGRpZSAiJHtGVU5DTkFNRX0oKTogVW5yZWNvZ25pemVkIG9wdGlvbiAnJDEnIgogICAg ICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICopCiAgICAgICAgICAgICAgICAgICAgYnJl YWsKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgIGVzYWM7CiAgICAgICAgICAgIHNoaWZ0 OwogICAgICAgIGRvbmU7CiAgICAgICAgaWYgW1sgIiQjIiAtZXEgMCBdXTsgdGhlbgogICAgICAg ICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6IE1pc3NpbmcgZmlsZXMgb3IgZGlyZWN0b3JpZXMiOwog ICAgICAgIGZpOwogICAgICAgIHdoaWxlICgoJCMpKTsgZG8KICAgICAgICAgICAgaWYgW1sgIiQx IiA9fiBeKCR8KFwufFwuXC58LykoJHwvKSkgXV07IHRoZW4KICAgICAgICAgICAgICAgIGRpZSAi JHtGVU5DTkFNRX0oKTogSW52YWxpZCBhcmd1bWVudCAnJDEnIjsKICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgICAgaWYgW1sgLWQgIiR7bXlyb290fS8kezEjL30iIF1dOyB0aGVuCiAgICAg ICAgICAgICAgICAgICAgbXlkaXJzKz0oIiR7bXlyb290fS8kezEjL30iKTsKICAgICAgICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBpZiBbWyAtZiAiJHtteXJvb3R9LyR7MSMvfSIg XV07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgbXlmaWxlcys9KCIke215cm9vdH0vJHsx Iy99Iik7CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBp ZiBbWyAtZSAiJHtteXJvb3R9LyR7MSMvfSIgXV07IHRoZW4KICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVlcnJvciAiJHtGVU5DTkFNRX0oKTogJHtteXJvb3R9LyR7MSMvfSBpcyBub3QgYSBy ZWd1bGFyIGZpbGUgb3IgZGlyZWN0b3J5IjsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWVycm9yICIke0ZVTkNOQU1FfSgpOiAke215cm9v dH0vJHsxIy99IGRvZXMgbm90IGV4aXN0IjsKICAgICAgICAgICAgICAgICAgICAgICAgZmk7CiAg ICAgICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgZmk7 CiAgICAgICAgICAgIHNoaWZ0OwogICAgICAgIGRvbmU7CiAgICAgICAgbXlvcHRzKz0oLXEpOwog ICAgICAgIFBZVEhPTl9BQkk9IiR7UFlUSE9OX0FCSTotJChQWVRIT04gLS1BQkkpfSI7CiAgICAg ICAgZWJlZ2luICJDb21waWxhdGlvbiBhbmQgb3B0aW1pemF0aW9uIG9mIFB5dGhvbiBtb2R1bGVz IGZvciAkKHB5dGhvbl9nZXRfaW1wbGVtZW50YXRpb24pICQocHl0aG9uX2dldF92ZXJzaW9uKSI7 CiAgICAgICAgaWYgKCgkeyNteWRpcnNbQF19KSk7IHRoZW4KICAgICAgICAgICAgIiQoUFlUSE9O ICR7UFlUSE9OX0FCSX0pIiAiJHtteXJvb3R9JChweXRob25fZ2V0X2xpYmRpcikvY29tcGlsZWFs bC5weSIgIiR7bXlvcHRzW0BdfSIgIiR7bXlkaXJzW0BdfSIgfHwgcmV0dXJuX2NvZGU9IjEiOwog ICAgICAgICAgICAiJChQWVRIT04gJHtQWVRIT05fQUJJfSkiIC1PICIke215cm9vdH0kKHB5dGhv bl9nZXRfbGliZGlyKS9jb21waWxlYWxsLnB5IiAiJHtteW9wdHNbQF19IiAiJHtteWRpcnNbQF19 IiAmPi9kZXYvbnVsbCB8fCByZXR1cm5fY29kZT0iMSI7CiAgICAgICAgICAgIF9weXRob25fY2xl YW5fY29tcGlsZWRfbW9kdWxlcyAiJHtteWRpcnNbQF19IjsKICAgICAgICBmaTsKICAgICAgICBp ZiAoKCR7I215ZmlsZXNbQF19KSk7IHRoZW4KICAgICAgICAgICAgIiQoUFlUSE9OICR7UFlUSE9O X0FCSX0pIiAiJHtteXJvb3R9JChweXRob25fZ2V0X2xpYmRpcikvcHlfY29tcGlsZS5weSIgIiR7 bXlmaWxlc1tAXX0iIHx8IHJldHVybl9jb2RlPSIxIjsKICAgICAgICAgICAgIiQoUFlUSE9OICR7 UFlUSE9OX0FCSX0pIiAtTyAiJHtteXJvb3R9JChweXRob25fZ2V0X2xpYmRpcikvcHlfY29tcGls ZS5weSIgIiR7bXlmaWxlc1tAXX0iICY+L2Rldi9udWxsIHx8IHJldHVybl9jb2RlPSIxIjsKICAg ICAgICAgICAgX3B5dGhvbl9jbGVhbl9jb21waWxlZF9tb2R1bGVzICIke215ZmlsZXNbQF19IjsK ICAgICAgICBmaTsKICAgICAgICBlZW5kICIke3JldHVybl9jb2RlfSI7CiAgICBmaQp9CnB5dGhv bl9uZWVkX3JlYnVpbGQgKCkgCnsgCiAgICBpZiBfcHl0aG9uX3BhY2thZ2Vfc3VwcG9ydGluZ19p bnN0YWxsYXRpb25fZm9yX211bHRpcGxlX3B5dGhvbl9hYmlzOyB0aGVuCiAgICAgICAgZGllICIk e0ZVTkNOQU1FfSgpIGNhbm5vdCBiZSB1c2VkIGluIGVidWlsZHMgb2YgcGFja2FnZXMgc3VwcG9y dGluZyBpbnN0YWxsYXRpb24gZm9yIG11bHRpcGxlIFB5dGhvbiBBQklzIjsKICAgIGZpOwogICAg X3B5dGhvbl9jaGVja19weXRob25fcGtnX3NldHVwX2V4ZWN1dGlvbjsKICAgIGlmIFtbICIkIyIg LW5lIDAgXV07IHRoZW4KICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCkgZG9lcyBub3QgYWNjZXB0 IGFyZ3VtZW50cyI7CiAgICBmaTsKICAgIGV4cG9ydCBQWVRIT05fTkVFRF9SRUJVSUxEPSIkKFBZ VEhPTiAtLUFCSSkiCn0KcHl0aG9uX3BrZ19zZXR1cCAoKSAKeyAKICAgIGlmIFtbICIke0VCVUlM RF9QSEFTRX0iICE9ICJzZXR1cCIgXV07IHRoZW4KICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCkg Y2FuIGJlIHVzZWQgb25seSBpbiBwa2dfc2V0dXAoKSBwaGFzZSI7CiAgICBmaTsKICAgIGlmIFtb ICIkIyIgLW5lIDAgXV07IHRoZW4KICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCkgZG9lcyBub3Qg YWNjZXB0IGFyZ3VtZW50cyI7CiAgICBmaTsKICAgIGV4cG9ydCBKWVRIT05fU1lTVEVNX0NBQ0hF RElSPSIxIjsKICAgIGFkZHdyaXRlICIke0VQUkVGSVh9L3Zhci9jYWNoZS9qeXRob24iOwogICAg aWYgX3B5dGhvbl9wYWNrYWdlX3N1cHBvcnRpbmdfaW5zdGFsbGF0aW9uX2Zvcl9tdWx0aXBsZV9w eXRob25fYWJpczsgdGhlbgogICAgICAgIF9weXRob25fY2FsY3VsYXRlX1BZVEhPTl9BQklTOwog ICAgICAgIGV4cG9ydCBFUFlUSE9OPSIkKFBZVEhPTiAtZikiOwogICAgZWxzZQogICAgICAgIFBZ VEhPTl9BQkk9IiR7UFlUSE9OX0FCSTotJChQWVRIT04gLS1BQkkpfSI7CiAgICBmaTsKICAgIGlm ICEgaGFzICIke0VBUEk6LTB9IiAwIDEgJiYgW1sgLW4gIiR7UFlUSE9OX1VTRV9XSVRIfSIgfHwg LW4gIiR7UFlUSE9OX1VTRV9XSVRIX09SfSIgXV07IHRoZW4KICAgICAgICBpZiBbWyAtbiAiJHtQ WVRIT05fVVNFX1dJVEhfT1BUfSIgXV07IHRoZW4KICAgICAgICAgICAgaWYgW1sgIiR7UFlUSE9O X1VTRV9XSVRIX09QVH0iID09ICEqIF1dOyB0aGVuCiAgICAgICAgICAgICAgICB1c2UgJHtQWVRI T05fVVNFX1dJVEhfT1BUIyF9ICYmIHJldHVybjsKICAgICAgICAgICAgZWxzZQogICAgICAgICAg ICAgICAgdXNlICEke1BZVEhPTl9VU0VfV0lUSF9PUFR9ICYmIHJldHVybjsKICAgICAgICAgICAg Zmk7CiAgICAgICAgZmk7CiAgICAgICAgZnVuY3Rpb24gcHl0aG9uX3BrZ19zZXR1cF9jaGVja19V U0VfZmxhZ3MgKCkgCiAgICAgICAgeyAKICAgICAgICAgICAgbG9jYWwgcHl0aG9uX2F0b20gVVNF X2ZsYWc7CiAgICAgICAgICAgIHB5dGhvbl9hdG9tPSIkKHB5dGhvbl9nZXRfaW1wbGVtZW50YXRp b25hbF9wYWNrYWdlKSI7CiAgICAgICAgICAgIGZvciBVU0VfZmxhZyBpbiAke1BZVEhPTl9VU0Vf V0lUSH07CiAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAgICBpZiAhIGhhc192ZXJzaW9uICIk e3B5dGhvbl9hdG9tfVske1VTRV9mbGFnfV0iOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgZWVy cm9yICJQbGVhc2UgcmVidWlsZCAke3B5dGhvbl9hdG9tfSB3aXRoIHRoZSBmb2xsb3dpbmcgVVNF IGZsYWdzIGVuYWJsZWQ6ICR7UFlUSE9OX1VTRV9XSVRIfSI7CiAgICAgICAgICAgICAgICAgICAg ZGllICJQbGVhc2UgcmVidWlsZCAke3B5dGhvbl9hdG9tfSB3aXRoIHRoZSBmb2xsb3dpbmcgVVNF IGZsYWdzIGVuYWJsZWQ6ICR7UFlUSE9OX1VTRV9XSVRIfSI7CiAgICAgICAgICAgICAgICBmaTsK ICAgICAgICAgICAgZG9uZTsKICAgICAgICAgICAgZm9yIFVTRV9mbGFnIGluICR7UFlUSE9OX1VT RV9XSVRIX09SfTsKICAgICAgICAgICAgZG8KICAgICAgICAgICAgICAgIGlmIGhhc192ZXJzaW9u ICIke3B5dGhvbl9hdG9tfVske1VTRV9mbGFnfV0iOyB0aGVuCiAgICAgICAgICAgICAgICAgICAg cmV0dXJuOwogICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgIGRvbmU7CiAgICAgICAgICAg IGlmIFtbIC1uICR7UFlUSE9OX1VTRV9XSVRIX09SfSBdXTsgdGhlbgogICAgICAgICAgICAgICAg ZWVycm9yICJQbGVhc2UgcmVidWlsZCAke3B5dGhvbl9hdG9tfSB3aXRoIGF0IGxlYXN0IG9uZSBv ZiB0aGUgZm9sbG93aW5nIFVTRSBmbGFncyBlbmFibGVkOiAke1BZVEhPTl9VU0VfV0lUSF9PUn0i OwogICAgICAgICAgICAgICAgZGllICJQbGVhc2UgcmVidWlsZCAke3B5dGhvbl9hdG9tfSB3aXRo IGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIFVTRSBmbGFncyBlbmFibGVkOiAke1BZVEhP Tl9VU0VfV0lUSF9PUn0iOwogICAgICAgICAgICBmaQogICAgICAgIH07CiAgICAgICAgaWYgX3B5 dGhvbl9wYWNrYWdlX3N1cHBvcnRpbmdfaW5zdGFsbGF0aW9uX2Zvcl9tdWx0aXBsZV9weXRob25f YWJpczsgdGhlbgogICAgICAgICAgICBQWVRIT05fU0tJUF9TQU5JVFlfQ0hFQ0tTPSIxIiBweXRo b25fZXhlY3V0ZV9mdW5jdGlvbiAtcSBweXRob25fcGtnX3NldHVwX2NoZWNrX1VTRV9mbGFnczsK ICAgICAgICBlbHNlCiAgICAgICAgICAgIHB5dGhvbl9wa2dfc2V0dXBfY2hlY2tfVVNFX2ZsYWdz OwogICAgICAgIGZpOwogICAgICAgIHVuc2V0IC1mIHB5dGhvbl9wa2dfc2V0dXBfY2hlY2tfVVNF X2ZsYWdzOwogICAgZmk7CiAgICBQWVRIT05fUEtHX1NFVFVQX0VYRUNVVEVEPSIxIgp9CnB5dGhv bl9zZXRfYWN0aXZlX3ZlcnNpb24gKCkgCnsgCiAgICBpZiBbWyAiJHtFQlVJTERfUEhBU0V9IiAh PSAic2V0dXAiIF1dOyB0aGVuCiAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpIGNhbiBiZSB1c2Vk IG9ubHkgaW4gcGtnX3NldHVwKCkgcGhhc2UiOwogICAgZmk7CiAgICBpZiBfcHl0aG9uX3BhY2th Z2Vfc3VwcG9ydGluZ19pbnN0YWxsYXRpb25fZm9yX211bHRpcGxlX3B5dGhvbl9hYmlzOyB0aGVu CiAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpIGNhbm5vdCBiZSB1c2VkIGluIGVidWlsZHMgb2Yg cGFja2FnZXMgc3VwcG9ydGluZyBpbnN0YWxsYXRpb24gZm9yIG11bHRpcGxlIFB5dGhvbiBBQklz IjsKICAgIGZpOwogICAgaWYgW1sgIiQjIiAtbmUgMSBdXTsgdGhlbgogICAgICAgIGRpZSAiJHtG VU5DTkFNRX0oKSByZXF1aXJlcyAxIGFyZ3VtZW50IjsKICAgIGZpOwogICAgX3B5dGhvbl9pbml0 aWFsX3Nhbml0eV9jaGVja3M7CiAgICBpZiBbWyAteiAiJHtQWVRIT05fQUJJfSIgXV07IHRoZW4K ICAgICAgICBpZiBbWyAtbiAiJChfcHl0aG9uX2dldF9pbXBsZW1lbnRhdGlvbiAtLWlnbm9yZS1p bnZhbGlkICIkMSIpIiBdXTsgdGhlbgogICAgICAgICAgICBQWVRIT05fQUJJPSIkMSI7CiAgICAg ICAgICAgIGlmICEgX3B5dGhvbl9pbXBsZW1lbnRhdGlvbiAmJiAhIGhhc192ZXJzaW9uICIkKHB5 dGhvbl9nZXRfaW1wbGVtZW50YXRpb25hbF9wYWNrYWdlKSI7IHRoZW4KICAgICAgICAgICAgICAg IGRpZSAiJHtGVU5DTkFNRX0oKTogJyQocHl0aG9uX2dldF9pbXBsZW1lbnRhdGlvbmFsX3BhY2th Z2UpJyBpcyBub3QgaW5zdGFsbGVkIjsKICAgICAgICAgICAgZmk7CiAgICAgICAgICAgIGV4cG9y dCBFUFlUSE9OPSIkKFBZVEhPTiAiJDEiKSI7CiAgICAgICAgZWxzZQogICAgICAgICAgICBpZiBb WyAiJDEiID09ICIyIiBdXTsgdGhlbgogICAgICAgICAgICAgICAgaWYgISBfcHl0aG9uX2ltcGxl bWVudGF0aW9uICYmICEgaGFzX3ZlcnNpb24gIj1kZXYtbGFuZy9weXRob24tMioiOyB0aGVuCiAg ICAgICAgICAgICAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpOiAnPWRldi1sYW5nL3B5dGhvbi0y KicgaXMgbm90IGluc3RhbGxlZCI7CiAgICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgICAg IGV4cG9ydCBFUFlUSE9OPSIkKFBZVEhPTiAtMikiOwogICAgICAgICAgICAgICAgUFlUSE9OX0FC ST0iJHtFUFlUSE9OI3B5dGhvbn0iOwogICAgICAgICAgICAgICAgUFlUSE9OX0FCST0iJHtQWVRI T05fQUJJJSUtKn0iOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBpZiBbWyAiJDEi ID09ICIzIiBdXTsgdGhlbgogICAgICAgICAgICAgICAgICAgIGlmICEgX3B5dGhvbl9pbXBsZW1l bnRhdGlvbiAmJiAhIGhhc192ZXJzaW9uICI9ZGV2LWxhbmcvcHl0aG9uLTMqIjsgdGhlbgogICAg ICAgICAgICAgICAgICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCk6ICc9ZGV2LWxhbmcvcHl0aG9u LTMqJyBpcyBub3QgaW5zdGFsbGVkIjsKICAgICAgICAgICAgICAgICAgICBmaTsKICAgICAgICAg ICAgICAgICAgICBleHBvcnQgRVBZVEhPTj0iJChQWVRIT04gLTMpIjsKICAgICAgICAgICAgICAg ICAgICBQWVRIT05fQUJJPSIke0VQWVRIT04jcHl0aG9ufSI7CiAgICAgICAgICAgICAgICAgICAg UFlUSE9OX0FCST0iJHtQWVRIT05fQUJJJSUtKn0iOwogICAgICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgICAgIGRpZSAiJHtGVU5DTkFNRX0oKTogVW5yZWNvZ25pemVkIGFyZ3VtZW50 ICckMSciOwogICAgICAgICAgICAgICAgZmk7CiAgICAgICAgICAgIGZpOwogICAgICAgIGZpOwog ICAgZmk7CiAgICBfcHl0aG9uX2ZpbmFsX3Nhbml0eV9jaGVja3M7CiAgICBQWVRIT05fUkVRVUVT VEVEX0FDVElWRV9WRVJTSU9OPSIkMSIKfQpweXRob25fc3JjX2NvbXBpbGUgKCkgCnsgCiAgICBp ZiBbWyAiJHtFQlVJTERfUEhBU0V9IiAhPSAiY29tcGlsZSIgXV07IHRoZW4KICAgICAgICBkaWUg IiR7RlVOQ05BTUV9KCkgY2FuIGJlIHVzZWQgb25seSBpbiBzcmNfY29tcGlsZSgpIHBoYXNlIjsK ICAgIGZpOwogICAgaWYgISBfcHl0aG9uX3BhY2thZ2Vfc3VwcG9ydGluZ19pbnN0YWxsYXRpb25f Zm9yX211bHRpcGxlX3B5dGhvbl9hYmlzOyB0aGVuCiAgICAgICAgZGllICIke0ZVTkNOQU1FfSgp IGNhbm5vdCBiZSB1c2VkIGluIGVidWlsZHMgb2YgcGFja2FnZXMgbm90IHN1cHBvcnRpbmcgaW5z dGFsbGF0aW9uIGZvciBtdWx0aXBsZSBQeXRob24gQUJJcyI7CiAgICBmaTsKICAgIF9weXRob25f Y2hlY2tfcHl0aG9uX3BrZ19zZXR1cF9leGVjdXRpb247CiAgICBweXRob25fZXhlY3V0ZV9mdW5j dGlvbiAtZCAtcyAtLSAiJEAiCn0KcHl0aG9uX3NyY19jb25maWd1cmUgKCkgCnsgCiAgICBpZiBb WyAiJHtFQlVJTERfUEhBU0V9IiAhPSAiY29uZmlndXJlIiBdXTsgdGhlbgogICAgICAgIGRpZSAi JHtGVU5DTkFNRX0oKSBjYW4gYmUgdXNlZCBvbmx5IGluIHNyY19jb25maWd1cmUoKSBwaGFzZSI7 CiAgICBmaTsKICAgIGlmICEgX3B5dGhvbl9wYWNrYWdlX3N1cHBvcnRpbmdfaW5zdGFsbGF0aW9u X2Zvcl9tdWx0aXBsZV9weXRob25fYWJpczsgdGhlbgogICAgICAgIGRpZSAiJHtGVU5DTkFNRX0o KSBjYW5ub3QgYmUgdXNlZCBpbiBlYnVpbGRzIG9mIHBhY2thZ2VzIG5vdCBzdXBwb3J0aW5nIGlu c3RhbGxhdGlvbiBmb3IgbXVsdGlwbGUgUHl0aG9uIEFCSXMiOwogICAgZmk7CiAgICBfcHl0aG9u X2NoZWNrX3B5dGhvbl9wa2dfc2V0dXBfZXhlY3V0aW9uOwogICAgcHl0aG9uX2V4ZWN1dGVfZnVu Y3Rpb24gLWQgLXMgLS0gIiRAIgp9CnB5dGhvbl9zcmNfaW5zdGFsbCAoKSAKeyAKICAgIGlmIFtb ICIke0VCVUlMRF9QSEFTRX0iICE9ICJpbnN0YWxsIiBdXTsgdGhlbgogICAgICAgIGRpZSAiJHtG VU5DTkFNRX0oKSBjYW4gYmUgdXNlZCBvbmx5IGluIHNyY19pbnN0YWxsKCkgcGhhc2UiOwogICAg Zmk7CiAgICBpZiAhIF9weXRob25fcGFja2FnZV9zdXBwb3J0aW5nX2luc3RhbGxhdGlvbl9mb3Jf bXVsdGlwbGVfcHl0aG9uX2FiaXM7IHRoZW4KICAgICAgICBkaWUgIiR7RlVOQ05BTUV9KCkgY2Fu bm90IGJlIHVzZWQgaW4gZWJ1aWxkcyBvZiBwYWNrYWdlcyBub3Qgc3VwcG9ydGluZyBpbnN0YWxs YXRpb24gZm9yIG11bHRpcGxlIFB5dGhvbiBBQklzIjsKICAgIGZpOwogICAgX3B5dGhvbl9jaGVj a19weXRob25fcGtnX3NldHVwX2V4ZWN1dGlvbjsKICAgIGlmIGhhcyAiJHtFQVBJOi0wfSIgMCAx IDIgMzsgdGhlbgogICAgICAgIHB5dGhvbl9leGVjdXRlX2Z1bmN0aW9uIC1kIC1zIC0tICIkQCI7 CiAgICBlbHNlCiAgICAgICAgZnVuY3Rpb24gcHl0aG9uX2luc3RhbGxhdGlvbiAoKSAKICAgICAg ICB7IAogICAgICAgICAgICBlbWFrZSBERVNURElSPSIke1R9L2ltYWdlcy8ke1BZVEhPTl9BQkl9 IiBpbnN0YWxsICIkQCIKICAgICAgICB9OwogICAgICAgIHB5dGhvbl9leGVjdXRlX2Z1bmN0aW9u IC1zIHB5dGhvbl9pbnN0YWxsYXRpb24gIiRAIjsKICAgICAgICB1bnNldCBweXRob25faW5zdGFs bGF0aW9uOwogICAgICAgIHB5dGhvbl9tZXJnZV9pbnRlcm1lZGlhdGVfaW5zdGFsbGF0aW9uX2lt YWdlcyAiJHtUfS9pbWFnZXMiOwogICAgZmkKfQpweXRob25fc3JjX3ByZXBhcmUgKCkgCnsgCiAg ICBpZiBbWyAiJHtFQlVJTERfUEhBU0V9IiAhPSAicHJlcGFyZSIgXV07IHRoZW4KICAgICAgICBk aWUgIiR7RlVOQ05BTUV9KCkgY2FuIGJlIHVzZWQgb25seSBpbiBzcmNfcHJlcGFyZSgpIHBoYXNl IjsKICAgIGZpOwogICAgaWYgISBfcHl0aG9uX3BhY2thZ2Vfc3VwcG9ydGluZ19pbnN0YWxsYXRp b25fZm9yX211bHRpcGxlX3B5dGhvbl9hYmlzOyB0aGVuCiAgICAgICAgZGllICIke0ZVTkNOQU1F fSgpIGNhbm5vdCBiZSB1c2VkIGluIGVidWlsZHMgb2YgcGFja2FnZXMgbm90IHN1cHBvcnRpbmcg aW5zdGFsbGF0aW9uIGZvciBtdWx0aXBsZSBQeXRob24gQUJJcyI7CiAgICBmaTsKICAgIF9weXRo b25fY2hlY2tfcHl0aG9uX3BrZ19zZXR1cF9leGVjdXRpb247CiAgICBpZiBbWyAiJCMiIC1uZSAw IF1dOyB0aGVuCiAgICAgICAgZGllICIke0ZVTkNOQU1FfSgpIGRvZXMgbm90IGFjY2VwdCBhcmd1 bWVudHMiOwogICAgZmk7CiAgICBweXRob25fY29weV9zb3VyY2VzCn0KcHl0aG9uX3NyY190ZXN0 ICgpIAp7IAogICAgaWYgW1sgIiR7RUJVSUxEX1BIQVNFfSIgIT0gInRlc3QiIF1dOyB0aGVuCiAg ICAgICAgZGllICIke0ZVTkNOQU1FfSgpIGNhbiBiZSB1c2VkIG9ubHkgaW4gc3JjX3Rlc3QoKSBw aGFzZSI7CiAgICBmaTsKICAgIGlmICEgX3B5dGhvbl9wYWNrYWdlX3N1cHBvcnRpbmdfaW5zdGFs bGF0aW9uX2Zvcl9tdWx0aXBsZV9weXRob25fYWJpczsgdGhlbgogICAgICAgIGRpZSAiJHtGVU5D TkFNRX0oKSBjYW5ub3QgYmUgdXNlZCBpbiBlYnVpbGRzIG9mIHBhY2thZ2VzIG5vdCBzdXBwb3J0 aW5nIGluc3RhbGxhdGlvbiBmb3IgbXVsdGlwbGUgUHl0aG9uIEFCSXMiOwogICAgZmk7CiAgICBf cHl0aG9uX2NoZWNrX3B5dGhvbl9wa2dfc2V0dXBfZXhlY3V0aW9uOwogICAgcHl0aG9uX2V4ZWN1 dGVfZnVuY3Rpb24gLWQgLXMgLS0gIiRAIgp9CnJlcGxhY2VfYWxsX3ZlcnNpb25fc2VwYXJhdG9y cyAoKSAKeyAKICAgIGxvY2FsIGM9KCQoZ2V0X2FsbF92ZXJzaW9uX2NvbXBvbmVudHMgIiR7Mjot JHtQVn19IikpOwogICAgYz0ke2NbQF0vL1stLl9dLyQxfTsKICAgIGVjaG8gJHtjLy8gfQp9CnJl cGxhY2VfdmVyc2lvbl9zZXBhcmF0b3IgKCkgCnsgCiAgICBlc2hvcHRzX3B1c2ggLXMgZXh0Z2xv YjsKICAgIGxvY2FsIHcgYyB2PSIkezM6LSR7UFZ9fSI7CiAgICBkZWNsYXJlIC1pIGkgZm91bmQ9 MDsKICAgIHc9JHsxOi0xfTsKICAgIGM9KCQoZ2V0X2FsbF92ZXJzaW9uX2NvbXBvbmVudHMgJHt2 fSkpOwogICAgaWYgW1sgJHt3fSAhPSAqW1s6ZGlnaXQ6XV0qIF1dOyB0aGVuCiAgICAgICAgZm9y ICgoaSA9IDA7IGkgPCAkeyNjW0BdfTsgaSsrKSkKICAgICAgICBkbwogICAgICAgICAgICBpZiBb WyAke2NbaV19ID09ICR7d30gXV07IHRoZW4KICAgICAgICAgICAgICAgIGNbaV09JHsyfTsKICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBmaTsKICAgICAgICBkb25lOwogICAgZWxz ZQogICAgICAgIGZvciAoKGkgPSAwOyBpIDwgJHsjY1tAXX07IGkrKykpCiAgICAgICAgZG8KICAg ICAgICAgICAgaWYgW1sgLW4gIiR7Y1tpXS8vW14tLl9dfSIgXV07IHRoZW4KICAgICAgICAgICAg ICAgIGZvdW5kKz0xOwogICAgICAgICAgICAgICAgaWYgKChmb3VuZCA9PSB3KSk7IHRoZW4KICAg ICAgICAgICAgICAgICAgICBjW2ldPSR7Mn07CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgZmk7CiAgICAgICAgZG9uZTsKICAgIGZpOwog ICAgYz0ke2NbKl19OwogICAgZWNobyAke2MvLyB9OwogICAgZXNob3B0c19wb3AKfQpzZXEgKCkg CnsgCiAgICBsb2NhbCBwPSQodHlwZSAtUCBzZXEpOwogICAgaWYgW1sgLW4gJHtwfSBdXTsgdGhl bgogICAgICAgICIke3B9IiAiJEAiOwogICAgICAgIHJldHVybiAkPzsKICAgIGZpOwogICAgbG9j YWwgbWluIG1heCBzdGVwOwogICAgY2FzZSAkIyBpbiAKICAgICAgICAxKQogICAgICAgICAgICBt aW49MSBtYXg9JDEgc3RlcD0xCiAgICAgICAgOzsKICAgICAgICAyKQogICAgICAgICAgICBtaW49 JDEgbWF4PSQyIHN0ZXA9MQogICAgICAgIDs7CiAgICAgICAgMykKICAgICAgICAgICAgbWluPSQx IG1heD0kMyBzdGVwPSQyCiAgICAgICAgOzsKICAgICAgICAqKQogICAgICAgICAgICBkaWUgInNl cSBjYWxsZWQgd2l0aCB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIgogICAgICAgIDs7CiAgICBl c2FjOwogICAgcD0kKHR5cGUgLVAgam90KTsKICAgIGlmIFtbIC1uICR7cH0gXV07IHRoZW4KICAg ICAgICBsb2NhbCByZXBzOwogICAgICAgIGlmIFtbICR7c3RlcH0gIT0gMCBdXTsgdGhlbgogICAg ICAgICAgICByZXBzPSQoKCAobWF4IC0gbWluKSAvIHN0ZXAgKyAxICkpOwogICAgICAgIGVsc2UK ICAgICAgICAgICAgcmVwcz0wOwogICAgICAgIGZpOwogICAgICAgIGpvdCAkcmVwcyAkbWluICRt YXggJHN0ZXA7CiAgICAgICAgcmV0dXJuICQ/OwogICAgZmk7CiAgICB3aGlsZSA6OyBkbwogICAg ICAgIFtbICRtYXggPCAkbWluICYmICRzdGVwID4gMCBdXSAmJiBicmVhazsKICAgICAgICBbWyAk bWluIDwgJG1heCAmJiAkc3RlcCA8IDAgXV0gJiYgYnJlYWs7CiAgICAgICAgZWNobyAkbWluOwog ICAgICAgIDogJCgoIG1pbiArPSBzdGVwICkpOwogICAgZG9uZTsKICAgIHJldHVybiAwCn0Kc3Jj X2NvbXBpbGUgKCkgCnsgCiAgICBnbm9tZTJfc3JjX2NvbXBpbGUgIiRAIgp9CnNyY19jb25maWd1 cmUgKCkgCnsgCiAgICBnbm9tZTJfc3JjX2NvbmZpZ3VyZSAiJEAiCn0Kc3JjX2luc3RhbGwgKCkg CnsgCiAgICBnbm9tZTJfc3JjX2luc3RhbGwgIiRAIgp9CnNyY19wcmVwYXJlICgpIAp7IAogICAg ZXBhdGNoICIke0ZJTEVTRElSfS8ke1BOfS0yLjM0LjAtYXV0b21hZ2ljLWd0ay5wYXRjaCI7CiAg ICBlcGF0Y2ggIiR7RklMRVNESVJ9LyR7UE59LTIuMzQuMi1naXItZmlsZW5hbWUucGF0Y2giOwog ICAgbXYgIiR7V09SS0RJUn0vaW50cm9zcGVjdGlvbi5tNCIgIiR7U30iLyB8fCBkaWU7CiAgICBB VF9NNERJUj0iLiIgZWF1dG9yZWNvbmY7CiAgICBweXRob25fY29udmVydF9zaGViYW5ncyAtciAy IC47CiAgICBnbm9tZTJfc3JjX3ByZXBhcmUKfQpzcmNfdGVzdCAoKSAKeyAKICAgIF9lYXBpMF9z cmNfdGVzdCAiJEAiCn0Kc3JjX3VucGFjayAoKSAKeyAKICAgIGdub21lMl9zcmNfdW5wYWNrICIk QCIKfQpzdHJpcC1saW5ndWFzICgpIAp7IAogICAgbG9jYWwgbHMgbmV3bHMgbm9sczsKICAgIGlm IFtbICQxID09ICItaSIgXV0gfHwgW1sgJDEgPT0gIi11IiBdXTsgdGhlbgogICAgICAgIGxvY2Fs IG9wPSQxOwogICAgICAgIHNoaWZ0OwogICAgICAgIGxzPSQoZmluZCAiJDEiIC1uYW1lICcqLnBv JyAtZXhlYyBiYXNlbmFtZSB7fSAucG8gJzsnKTsKICAgICAgICBzaGlmdDsKICAgICAgICBsb2Nh bCBkIGY7CiAgICAgICAgZm9yIGQgaW4gIiRAIjsKICAgICAgICBkbwogICAgICAgICAgICBpZiBb WyAke29wfSA9PSAiLXUiIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBuZXdscz0ke2xzfTsKICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgbmV3bHM9IiI7CiAgICAgICAgICAgIGZpOwog ICAgICAgICAgICBmb3IgZiBpbiAkKGZpbmQgIiRkIiAtbmFtZSAnKi5wbycgLWV4ZWMgYmFzZW5h bWUge30gLnBvICc7Jyk7CiAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAgICBpZiBbWyAke29w fSA9PSAiLWkiIF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgaGFzICR7Zn0gJHtsc30gJiYg bmV3bHM9IiR7bmV3bHN9ICR7Zn0iOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg ICAgICAgIGhhcyAke2Z9ICR7bHN9IHx8IG5ld2xzPSIke25ld2xzfSAke2Z9IjsKICAgICAgICAg ICAgICAgIGZpOwogICAgICAgICAgICBkb25lOwogICAgICAgICAgICBscz0ke25ld2xzfTsKICAg ICAgICBkb25lOwogICAgZWxzZQogICAgICAgIGxzPSIkQCI7CiAgICBmaTsKICAgIG5vbHM9IiI7 CiAgICBuZXdscz0iIjsKICAgIGZvciBmIGluICR7TElOR1VBU307CiAgICBkbwogICAgICAgIGlm IGhhcyAke2Z9ICR7bHN9OyB0aGVuCiAgICAgICAgICAgIG5ld2xzPSIke25ld2xzfSAke2Z9IjsK ICAgICAgICBlbHNlCiAgICAgICAgICAgIG5vbHM9IiR7bm9sc30gJHtmfSI7CiAgICAgICAgZmk7 CiAgICBkb25lOwogICAgW1sgLW4gJHtub2xzfSBdXSAmJiBld2FybiAiU29ycnksIGJ1dCAke1BO fSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBMSU5HVUFTOiIgJHtub2xzfTsKICAgIGV4cG9ydCBMSU5H VUFTPSR7bmV3bHM6MX0KfQp0Yy1hcmNoICgpIAp7IAogICAgdGMtbmluamFfbWFnaWNfdG9fYXJj aCBwb3J0YWdlICIkQCIKfQp0Yy1hcmNoLWtlcm5lbCAoKSAKeyAKICAgIHRjLW5pbmphX21hZ2lj X3RvX2FyY2gga2VybiAiJEAiCn0KdGMtZW5kaWFuICgpIAp7IAogICAgbG9jYWwgaG9zdD0kMTsK ICAgIFtbIC16ICR7aG9zdH0gXV0gJiYgaG9zdD0ke0NUQVJHRVQ6LSR7Q0hPU1R9fTsKICAgIGhv c3Q9JHtob3N0JSUtKn07CiAgICBjYXNlICR7aG9zdH0gaW4gCiAgICAgICAgYWxwaGEqKQogICAg ICAgICAgICBlY2hvIGJpZwogICAgICAgIDs7CiAgICAgICAgYXJtKmIqKQogICAgICAgICAgICBl Y2hvIGJpZwogICAgICAgIDs7CiAgICAgICAgYXJtKikKICAgICAgICAgICAgZWNobyBsaXR0bGUK ICAgICAgICA7OwogICAgICAgIGNyaXMqKQogICAgICAgICAgICBlY2hvIGxpdHRsZQogICAgICAg IDs7CiAgICAgICAgaHBwYSopCiAgICAgICAgICAgIGVjaG8gYmlnCiAgICAgICAgOzsKICAgICAg ICBpPzg2KikKICAgICAgICAgICAgZWNobyBsaXR0bGUKICAgICAgICA7OwogICAgICAgIGlhNjQq KQogICAgICAgICAgICBlY2hvIGxpdHRsZQogICAgICAgIDs7CiAgICAgICAgbTY4KikKICAgICAg ICAgICAgZWNobyBiaWcKICAgICAgICA7OwogICAgICAgIG1pcHMqbCopCiAgICAgICAgICAgIGVj aG8gbGl0dGxlCiAgICAgICAgOzsKICAgICAgICBtaXBzKikKICAgICAgICAgICAgZWNobyBiaWcK ICAgICAgICA7OwogICAgICAgIHBvd2VycGMqKQogICAgICAgICAgICBlY2hvIGJpZwogICAgICAg IDs7CiAgICAgICAgczM5MCopCiAgICAgICAgICAgIGVjaG8gYmlnCiAgICAgICAgOzsKICAgICAg ICBzaCpiKikKICAgICAgICAgICAgZWNobyBiaWcKICAgICAgICA7OwogICAgICAgIHNoKikKICAg ICAgICAgICAgZWNobyBsaXR0bGUKICAgICAgICA7OwogICAgICAgIHNwYXJjKikKICAgICAgICAg ICAgZWNobyBiaWcKICAgICAgICA7OwogICAgICAgIHg4Nl82NCopCiAgICAgICAgICAgIGVjaG8g bGl0dGxlCiAgICAgICAgOzsKICAgICAgICAqKQogICAgICAgICAgICBlY2hvIHd0ZgogICAgICAg IDs7CiAgICBlc2FjCn0KdGMtZW52X2J1aWxkICgpIAp7IAogICAgQ0ZMQUdTPSR7QlVJTERfQ0ZM QUdTOi0tTzEgLXBpcGV9IENYWEZMQUdTPSR7QlVJTERfQ1hYRkxBR1M6LS1PMSAtcGlwZX0gQ1BQ RkxBR1M9JHtCVUlMRF9DUFBGTEFHU30gTERGTEFHUz0ke0JVSUxEX0xERkxBR1N9IEFSPSQodGMt Z2V0QlVJTERfQVIpIEFTPSQodGMtZ2V0QlVJTERfQVMpIENDPSQodGMtZ2V0QlVJTERfQ0MpIENQ UD0kKHRjLWdldEJVSUxEX0NQUCkgQ1hYPSQodGMtZ2V0QlVJTERfQ1hYKSBMRD0kKHRjLWdldEJV SUxEX0xEKSBOTT0kKHRjLWdldEJVSUxEX05NKSBQS0dfQ09ORklHPSQodGMtZ2V0QlVJTERfUEtH X0NPTkZJRykgUkFOTElCPSQodGMtZ2V0QlVJTERfUkFOTElCKSAiJEAiCn0KdGMtZXhwb3J0ICgp IAp7IAogICAgbG9jYWwgdmFyOwogICAgZm9yIHZhciBpbiAiJEAiOwogICAgZG8KICAgICAgICBb WyAkKHR5cGUgLXQgdGMtZ2V0JHt2YXJ9KSAhPSAiZnVuY3Rpb24iIF1dICYmIGRpZSAidGMtZXhw b3J0OiBpbnZhbGlkIGV4cG9ydCB2YXJpYWJsZSAnJHt2YXJ9JyI7CiAgICAgICAgZXZhbCB0Yy1n ZXQke3Zhcn0gPiAvZGV2L251bGw7CiAgICBkb25lCn0KdGMtZ2V0QVIgKCkgCnsgCiAgICB0Yy1n ZXRQUk9HIEFSIGFyICIkQCIKfQp0Yy1nZXRBUyAoKSAKeyAKICAgIHRjLWdldFBST0cgQVMgYXMg IiRAIgp9CnRjLWdldEJVSUxEX0FSICgpIAp7IAogICAgdGMtZ2V0QlVJTERfUFJPRyBBUiBhciAi JEAiCn0KdGMtZ2V0QlVJTERfQVMgKCkgCnsgCiAgICB0Yy1nZXRCVUlMRF9QUk9HIEFTIGFzICIk QCIKfQp0Yy1nZXRCVUlMRF9DQyAoKSAKeyAKICAgIHRjLWdldEJVSUxEX1BST0cgQ0MgZ2NjICIk QCIKfQp0Yy1nZXRCVUlMRF9DUFAgKCkgCnsgCiAgICB0Yy1nZXRCVUlMRF9QUk9HIENQUCBjcHAg IiRAIgp9CnRjLWdldEJVSUxEX0NYWCAoKSAKeyAKICAgIHRjLWdldEJVSUxEX1BST0cgQ1hYIGcr KyAiJEAiCn0KdGMtZ2V0QlVJTERfTEQgKCkgCnsgCiAgICB0Yy1nZXRCVUlMRF9QUk9HIExEIGxk ICIkQCIKfQp0Yy1nZXRCVUlMRF9OTSAoKSAKeyAKICAgIHRjLWdldEJVSUxEX1BST0cgTk0gbm0g IiRAIgp9CnRjLWdldEJVSUxEX09CSkNPUFkgKCkgCnsgCiAgICB0Yy1nZXRCVUlMRF9QUk9HIE9C SkNPUFkgb2JqY29weSAiJEAiCn0KdGMtZ2V0QlVJTERfUEtHX0NPTkZJRyAoKSAKeyAKICAgIHRj LWdldEJVSUxEX1BST0cgUEtHX0NPTkZJRyBwa2ctY29uZmlnICIkQCIKfQp0Yy1nZXRCVUlMRF9Q Uk9HICgpIAp7IAogICAgX3RjLWdldFBST0cgQ0JVSUxEICJCVUlMRF8kMSAkMV9GT1JfQlVJTEQg SE9TVCQxIiAiJHtAOjJ9Igp9CnRjLWdldEJVSUxEX1JBTkxJQiAoKSAKeyAKICAgIHRjLWdldEJV SUxEX1BST0cgUkFOTElCIHJhbmxpYiAiJEAiCn0KdGMtZ2V0QlVJTERfU1RSSVAgKCkgCnsgCiAg ICB0Yy1nZXRCVUlMRF9QUk9HIFNUUklQIHN0cmlwICIkQCIKfQp0Yy1nZXRDQyAoKSAKeyAKICAg IHRjLWdldFBST0cgQ0MgZ2NjICIkQCIKfQp0Yy1nZXRDUFAgKCkgCnsgCiAgICB0Yy1nZXRQUk9H IENQUCBjcHAgIiRAIgp9CnRjLWdldENYWCAoKSAKeyAKICAgIHRjLWdldFBST0cgQ1hYIGcrKyAi JEAiCn0KdGMtZ2V0RExMV1JBUCAoKSAKeyAKICAgIHRjLWdldFBST0cgRExMV1JBUCBkbGx3cmFw ICIkQCIKfQp0Yy1nZXRGNzcgKCkgCnsgCiAgICB0Yy1nZXRQUk9HIEY3NyBnZm9ydHJhbiAiJEAi Cn0KdGMtZ2V0RkMgKCkgCnsgCiAgICB0Yy1nZXRQUk9HIEZDIGdmb3J0cmFuICIkQCIKfQp0Yy1n ZXRHQ0ogKCkgCnsgCiAgICB0Yy1nZXRQUk9HIEdDSiBnY2ogIiRAIgp9CnRjLWdldExEICgpIAp7 IAogICAgdGMtZ2V0UFJPRyBMRCBsZCAiJEAiCn0KdGMtZ2V0Tk0gKCkgCnsgCiAgICB0Yy1nZXRQ Uk9HIE5NIG5tICIkQCIKfQp0Yy1nZXRPQkpDT1BZICgpIAp7IAogICAgdGMtZ2V0UFJPRyBPQkpD T1BZIG9iamNvcHkgIiRAIgp9CnRjLWdldFBLR19DT05GSUcgKCkgCnsgCiAgICB0Yy1nZXRQUk9H IFBLR19DT05GSUcgcGtnLWNvbmZpZyAiJEAiCn0KdGMtZ2V0UFJPRyAoKSAKeyAKICAgIF90Yy1n ZXRQUk9HIENIT1NUICIkQCIKfQp0Yy1nZXRSQU5MSUIgKCkgCnsgCiAgICB0Yy1nZXRQUk9HIFJB TkxJQiByYW5saWIgIiRAIgp9CnRjLWdldFJDICgpIAp7IAogICAgdGMtZ2V0UFJPRyBSQyB3aW5k cmVzICIkQCIKfQp0Yy1nZXRTVFJJUCAoKSAKeyAKICAgIHRjLWdldFBST0cgU1RSSVAgc3RyaXAg IiRAIgp9CnRjLWhhcy1vcGVubXAgKCkgCnsgCiAgICBsb2NhbCBiYXNlPSIke1R9L3Rlc3QtdGMt b3Blbm1wIjsKICAgIGNhdCA+ICIke2Jhc2V9LmMiICA8PC1FT0YKI2luY2x1ZGUgPG9tcC5oPgpp bnQgbWFpbigpIHsKaW50IG50aHJlYWRzLCB0aWQsIHJldCA9IDA7CiNwcmFnbWEgb21wIHBhcmFs bGVsIHByaXZhdGUobnRocmVhZHMsIHRpZCkKewp0aWQgPSBvbXBfZ2V0X3RocmVhZF9udW0oKTsK bnRocmVhZHMgPSBvbXBfZ2V0X251bV90aHJlYWRzKCk7IHJldCArPSB0aWQgKyBudGhyZWFkczsK fQpyZXR1cm4gcmV0Owp9CkVPRgoKICAgICQodGMtZ2V0Q0MgIiRAIikgLWZvcGVubXAgIiR7YmFz ZX0uYyIgLW8gIiR7YmFzZX0iICY+L2Rldi9udWxsOwogICAgbG9jYWwgcmV0PSQ/OwogICAgcm0g LWYgIiR7YmFzZX0iKjsKICAgIHJldHVybiAke3JldH0KfQp0Yy1oYXMtdGxzICgpIAp7IAogICAg bG9jYWwgYmFzZT0iJHtUfS90ZXN0LXRjLXRscyI7CiAgICBjYXQgPiAiJHtiYXNlfS5jIiAgPDwt RU9GCmludCBmb28oaW50ICppKSB7CnN0YXRpYyBfX3RocmVhZCBpbnQgaiA9IDA7CnJldHVybiAq aSA/IGogOiAqaTsKfQpFT0YKCiAgICBsb2NhbCBmbGFnczsKICAgIGNhc2UgJDEgaW4gCiAgICAg ICAgLXMpCiAgICAgICAgICAgIGZsYWdzPSItUyIKICAgICAgICA7OwogICAgICAgIC1jKQogICAg ICAgICAgICBmbGFncz0iLWMiCiAgICAgICAgOzsKICAgICAgICAtbCkKCiAgICAgICAgOzsKICAg ICAgICAtKikKICAgICAgICAgICAgZGllICJVc2FnZTogdGMtaGFzLXRscyBbLWN8LWxdIFt0b29s Y2hhaW4gcHJlZml4XSIKICAgICAgICA7OwogICAgZXNhYzsKICAgIDogJHtmbGFnczo9LWZQSUMg LXNoYXJlZCAtV2wsLXosZGVmc307CiAgICBbWyAkMSA9PSAtKiBdXSAmJiBzaGlmdDsKICAgICQo dGMtZ2V0Q0MgIiRAIikgJHtmbGFnc30gIiR7YmFzZX0uYyIgLW8gIiR7YmFzZX0iICY+L2Rldi9u dWxsOwogICAgbG9jYWwgcmV0PSQ/OwogICAgcm0gLWYgIiR7YmFzZX0iKjsKICAgIHJldHVybiAk e3JldH0KfQp0Yy1pcy1jcm9zcy1jb21waWxlciAoKSAKeyAKICAgIHJldHVybiAkKFtbICR7Q0JV SUxEOi0ke0NIT1NUfX0gIT0gJHtDSE9TVH0gXV0pCn0KdGMtaXMtaGFyZGZsb2F0ICgpIAp7IAog ICAgW1sgJHtDVEFSR0VULy9fLy19ID09ICotaGFyZGZsb2F0LSogXV0gJiYgZWNobyAieWVzIiB8 fCBlY2hvICJubyIKfQp0Yy1pcy1zb2Z0ZmxvYXQgKCkgCnsgCiAgICBjYXNlICR7Q1RBUkdFVH0g aW4gCiAgICAgICAgYmZpbiogfCBoODMwMCopCiAgICAgICAgICAgIGVjaG8gIm9ubHkiCiAgICAg ICAgOzsKICAgICAgICAqKQogICAgICAgICAgICBbWyAke0NUQVJHRVQvL18vLX0gPT0gKi1zb2Z0 ZmxvYXQtKiBdXSAmJiBlY2hvICJ5ZXMiIHx8IGVjaG8gIm5vIgogICAgICAgIDs7CiAgICBlc2Fj Cn0KdGMtaXMtc3RhdGljLW9ubHkgKCkgCnsgCiAgICBsb2NhbCBob3N0PSR7Q1RBUkdFVDotJHtD SE9TVH19OwogICAgcmV0dXJuICQoW1sgJHtob3N0fSA9PSAqLW1pbnQqIF1dKQp9CnRjLW5pbmph X21hZ2ljX3RvX2FyY2ggKCkgCnsgCiAgICBmdW5jdGlvbiBuaW5qICgpIAogICAgeyAKICAgICAg ICBbWyAke3R5cGV9ID09ICJrZXJuIiBdXSAmJiBlY2hvICQxIHx8IGVjaG8gJDIKICAgIH07CiAg ICBsb2NhbCB0eXBlPSQxOwogICAgbG9jYWwgaG9zdD0kMjsKICAgIFtbIC16ICR7aG9zdH0gXV0g JiYgaG9zdD0ke0NUQVJHRVQ6LSR7Q0hPU1R9fTsKICAgIGNhc2UgJHtob3N0fSBpbiAKICAgICAg ICBhbHBoYSopCiAgICAgICAgICAgIGVjaG8gYWxwaGEKICAgICAgICA7OwogICAgICAgIGFybSop CiAgICAgICAgICAgIGVjaG8gYXJtCiAgICAgICAgOzsKICAgICAgICBhdnIqKQogICAgICAgICAg ICBuaW5qIGF2cjMyIGF2cgogICAgICAgIDs7CiAgICAgICAgYmZpbiopCiAgICAgICAgICAgIG5p bmogYmxhY2tmaW4gYmZpbgogICAgICAgIDs7CiAgICAgICAgY3JpcyopCiAgICAgICAgICAgIGVj aG8gY3JpcwogICAgICAgIDs7CiAgICAgICAgaHBwYSopCiAgICAgICAgICAgIG5pbmogcGFyaXNj IGhwcGEKICAgICAgICA7OwogICAgICAgIGk/ODYqKQogICAgICAgICAgICBpZiBbWyAke3R5cGV9 ID09ICJrZXJuIiBdXSAmJiBbWyAkKEtWX3RvX2ludCAke0tWfSkgLWx0ICQoS1ZfdG9faW50IDIu Ni4yNCkgfHwgJHtob3N0fSA9PSAqZnJlZWJzZCogXV07IHRoZW4KICAgICAgICAgICAgICAgIGVj aG8gaTM4NjsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgZWNobyB4ODY7CiAgICAg ICAgICAgIGZpCiAgICAgICAgOzsKICAgICAgICBpYTY0KikKICAgICAgICAgICAgZWNobyBpYTY0 CiAgICAgICAgOzsKICAgICAgICBtNjgqKQogICAgICAgICAgICBlY2hvIG02OGsKICAgICAgICA7 OwogICAgICAgIG1pcHMqKQogICAgICAgICAgICBlY2hvIG1pcHMKICAgICAgICA7OwogICAgICAg IG5pb3MyKikKICAgICAgICAgICAgZWNobyBuaW9zMgogICAgICAgIDs7CiAgICAgICAgbmlvcyop CiAgICAgICAgICAgIGVjaG8gbmlvcwogICAgICAgIDs7CiAgICAgICAgcG93ZXJwYyopCiAgICAg ICAgICAgIGlmIFtbICR7dHlwZX0gPT0gImtlcm4iIF1dICYmIFtbICQoS1ZfdG9faW50ICR7S1Z9 KSAtZ2UgJChLVl90b19pbnQgMi42LjE2KSBdXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyBw b3dlcnBjOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBpZiBbWyAke3R5cGV9ID09 ICJrZXJuIiBdXSAmJiBbWyAkKEtWX3RvX2ludCAke0tWfSkgLWVxICQoS1ZfdG9faW50IDIuNi4x NSkgXV07IHRoZW4KICAgICAgICAgICAgICAgICAgICBpZiBbWyAke2hvc3R9ID09IHBvd2VycGM2 NCogXV0gfHwgW1sgJHtQUk9GSUxFX0FSQ0h9ID09ICJwcGM2NCIgXV07IHRoZW4KICAgICAgICAg ICAgICAgICAgICAgICAgZWNobyBwb3dlcnBjOwogICAgICAgICAgICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgICAgICAgICAgICAgZWNobyBwcGM7CiAgICAgICAgICAgICAgICAgICAgZmk7CiAg ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgaWYgW1sgJHtob3N0fSA9PSBw b3dlcnBjNjQqIF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gcHBjNjQ7CiAg ICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBpZiBbWyAke1BS T0ZJTEVfQVJDSH0gPT0gInBwYzY0IiBdXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgbmluaiBwcGM2NCBwcGM7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGVjaG8gcHBjOwogICAgICAgICAgICAgICAgICAgICAgICBmaTsK ICAgICAgICAgICAgICAgICAgICBmaTsKICAgICAgICAgICAgICAgIGZpOwogICAgICAgICAgICBm aQogICAgICAgIDs7CiAgICAgICAgczM5MCopCiAgICAgICAgICAgIGVjaG8gczM5MAogICAgICAg IDs7CiAgICAgICAgc2g2NCopCiAgICAgICAgICAgIG5pbmogc2g2NCBzaAogICAgICAgIDs7CiAg ICAgICAgc2gqKQogICAgICAgICAgICBlY2hvIHNoCiAgICAgICAgOzsKICAgICAgICBzcGFyYzY0 KikKICAgICAgICAgICAgbmluaiBzcGFyYzY0IHNwYXJjCiAgICAgICAgOzsKICAgICAgICBzcGFy YyopCiAgICAgICAgICAgIFtbICR7UFJPRklMRV9BUkNIfSA9PSAic3BhcmM2NCIgXV0gJiYgbmlu aiBzcGFyYzY0IHNwYXJjIHx8IGVjaG8gc3BhcmMKICAgICAgICA7OwogICAgICAgIHZheCopCiAg ICAgICAgICAgIGVjaG8gdmF4CiAgICAgICAgOzsKICAgICAgICB4ODZfNjQqZnJlZWJzZCopCiAg ICAgICAgICAgIGVjaG8gYW1kNjQKICAgICAgICA7OwogICAgICAgIHg4Nl82NCopCiAgICAgICAg ICAgIGlmIFtbICR7dHlwZX0gPT0gImtlcm4iIF1dICYmIFtbICQoS1ZfdG9faW50ICR7S1Z9KSAt Z2UgJChLVl90b19pbnQgMi42LjI0KSBdXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyB4ODY7 CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIG5pbmogeDg2XzY0IGFtZDY0OwogICAg ICAgICAgICBmaQogICAgICAgIDs7CiAgICAgICAgKikKICAgICAgICAgICAgZWNobyB1bmtub3du CiAgICAgICAgOzsKICAgIGVzYWMKfQp0cmVlY29weSAoKSAKeyAKICAgIGxvY2FsIGRlc3Q9JHsh I307CiAgICBsb2NhbCBmaWxlc19jb3VudD0kIzsKICAgIHdoaWxlICgoICQjID4gMSApKTsgZG8K ICAgICAgICBsb2NhbCBkaXJzdHJ1Y3Q9JChkaXJuYW1lICIkMSIpOwogICAgICAgIG1rZGlyIC1w ICIke2Rlc3R9LyR7ZGlyc3RydWN0fSI7CiAgICAgICAgY3AgLXBQUiAiJDEiICIke2Rlc3R9LyR7 ZGlyc3RydWN0fSI7CiAgICAgICAgc2hpZnQ7CiAgICBkb25lCn0KdWNsaWJjdG9vbGl6ZSAoKSAK eyAKICAgIGRpZSAiVXNlIGVsaWJ0b29saXplIgp9CnVucGFja19tYWtlc2VsZiAoKSAKeyAKICAg IGxvY2FsIHNyY19pbnB1dD0kezE6LSR7QX19OwogICAgbG9jYWwgc3JjPSQoZmluZF91bnBhY2th YmxlX2ZpbGUgIiR7c3JjX2lucHV0fSIpOwogICAgbG9jYWwgc2tpcD0kMjsKICAgIGxvY2FsIGV4 ZT0kMzsKICAgIFtbIC16ICR7c3JjfSBdXSAmJiBkaWUgIkNvdWxkIG5vdCBsb2NhdGUgc291cmNl IGZvciAnJHtzcmNfaW5wdXR9JyI7CiAgICBsb2NhbCBzaHJ0c3JjPSQoYmFzZW5hbWUgIiR7c3Jj fSIpOwogICAgZWNobyAiPj4+IFVucGFja2luZyAke3NocnRzcmN9IHRvICR7UFdEfSI7CiAgICBp ZiBbWyAteiAke3NraXB9IF1dOyB0aGVuCiAgICAgICAgbG9jYWwgdmVyPSQoZ3JlcCAtbTEgLWEg JyMuKk1ha2VzZWxmJyAiJHtzcmN9IiB8IGF3ayAne3ByaW50ICRORn0nKTsKICAgICAgICBsb2Nh bCBza2lwPTA7CiAgICAgICAgZXhlPXRhaWw7CiAgICAgICAgY2FzZSAke3Zlcn0gaW4gCiAgICAg ICAgICAgIDEuNS4qIHwgMS42LjAtbnYpCiAgICAgICAgICAgICAgICBza2lwPSQoZ3JlcCAtYSBe c2tpcD0gIiR7c3JjfSIgfCBjdXQgLWQ9IC1mMikKICAgICAgICAgICAgOzsKICAgICAgICAgICAg Mi4wIHwgMi4wLjEpCiAgICAgICAgICAgICAgICBza2lwPSQoZ3JlcCAtYSBeJwkndGFpbCAiJHtz cmN9IiB8IGF3ayAne3ByaW50ICQyfScgfCBjdXQgLWIyLSkKICAgICAgICAgICAgOzsKICAgICAg ICAgICAgMi4xLjEpCiAgICAgICAgICAgICAgICBza2lwPSQoZ3JlcCAtYSBeb2Zmc2V0PSAiJHtz cmN9IiB8IGF3ayAne3ByaW50ICQyfScgfCBjdXQgLWIyLSk7CiAgICAgICAgICAgICAgICAoKCBz a2lwKysgKSkKICAgICAgICAgICAgOzsKICAgICAgICAgICAgMi4xLjIpCiAgICAgICAgICAgICAg ICBza2lwPSQoZ3JlcCAtYSBeb2Zmc2V0PSAiJHtzcmN9IiB8IGF3ayAne3ByaW50ICQzfScgfCBo ZWFkIC1uIDEpOwogICAgICAgICAgICAgICAgKCggc2tpcCsrICkpCiAgICAgICAgICAgIDs7CiAg ICAgICAgICAgIDIuMS4zKQogICAgICAgICAgICAgICAgc2tpcD1gZ3JlcCAtYSBeb2Zmc2V0PSAi JHtzcmN9IiB8IGF3ayAne3ByaW50ICQzfSdgOwogICAgICAgICAgICAgICAgKCggc2tpcCsrICkp CiAgICAgICAgICAgIDs7CiAgICAgICAgICAgIDIuMS40IHwgMi4xLjUpCiAgICAgICAgICAgICAg ICBza2lwPSQoZ3JlcCAtYSBvZmZzZXQ9LipoZWFkLip3YyAiJHtzcmN9IiB8IGF3ayAne3ByaW50 ICQzfScgfCBoZWFkIC1uIDEpOwogICAgICAgICAgICAgICAgc2tpcD0kKGhlYWQgLW4gJHtza2lw fSAiJHtzcmN9IiB8IHdjIC1jKTsKICAgICAgICAgICAgICAgIGV4ZT0iZGQiCiAgICAgICAgICAg IDs7CiAgICAgICAgICAgICopCiAgICAgICAgICAgICAgICBlZXJyb3IgIkknbSBzb3JyeSwgYnV0 IEkgd2FzIHVuYWJsZSB0byBzdXBwb3J0IHRoZSBNYWtlc2VsZiBmaWxlLiI7CiAgICAgICAgICAg ICAgICBlZXJyb3IgIlRoZSB2ZXJzaW9uIEkgZGV0ZWN0ZWQgd2FzICcke3Zlcn0nLiI7CiAgICAg ICAgICAgICAgICBlZXJyb3IgIlBsZWFzZSBmaWxlIGEgYnVnIGFib3V0IHRoZSBmaWxlICR7c2hy dHNyY30gYXQiOwogICAgICAgICAgICAgICAgZWVycm9yICJodHRwOi8vYnVncy5nZW50b28ub3Jn LyBzbyB0aGF0IHN1cHBvcnQgY2FuIGJlIGFkZGVkLiI7CiAgICAgICAgICAgICAgICBkaWUgIm1h a2VzZWxmIHZlcnNpb24gJyR7dmVyfScgbm90IHN1cHBvcnRlZCIKICAgICAgICAgICAgOzsKICAg ICAgICBlc2FjOwogICAgICAgIGRlYnVnLXByaW50ICJEZXRlY3RlZCBNYWtlc2VsZiB2ZXJzaW9u ICR7dmVyfSAuLi4gdXNpbmcgJHtza2lwfSBhcyBvZmZzZXQiOwogICAgZmk7CiAgICBjYXNlICR7 ZXhlfSBpbiAKICAgICAgICB0YWlsKQogICAgICAgICAgICBleGU9InRhaWwgLW4gKyR7c2tpcH0g JyR7c3JjfSciCiAgICAgICAgOzsKICAgICAgICBkZCkKICAgICAgICAgICAgZXhlPSJkZCBpYnM9 JHtza2lwfSBza2lwPTEgaWY9JyR7c3JjfSciCiAgICAgICAgOzsKICAgICAgICAqKQogICAgICAg ICAgICBkaWUgIm1ha2VzZWxmIGNhbnQgaGFuZGxlIGV4ZSAnJHtleGV9JyIKICAgICAgICA7Owog ICAgZXNhYzsKICAgIGxvY2FsIGZpbGV0eXBlIHRtcGZpbGU9JChlbWt0ZW1wKTsKICAgIGV2YWwg JHtleGV9IDI+IC9kZXYvbnVsbCB8IGhlYWQgLWMgNTEyID4gIiR7dG1wZmlsZX0iOwogICAgZmls ZXR5cGU9JChmaWxlIC1iICIke3RtcGZpbGV9IikgfHwgZGllOwogICAgY2FzZSAke2ZpbGV0eXBl fSBpbiAKICAgICAgICAqdGFyXCBhcmNoaXZlKikKICAgICAgICAgICAgZXZhbCAke2V4ZX0gfCB0 YXIgLS1uby1zYW1lLW93bmVyIC14ZiAtCiAgICAgICAgOzsKICAgICAgICBiemlwMiopCiAgICAg ICAgICAgIGV2YWwgJHtleGV9IHwgYnppcDIgLWRjIHwgdGFyIC0tbm8tc2FtZS1vd25lciAteGYg LQogICAgICAgIDs7CiAgICAgICAgZ3ppcCopCiAgICAgICAgICAgIGV2YWwgJHtleGV9IHwgdGFy IC0tbm8tc2FtZS1vd25lciAteHpmIC0KICAgICAgICA7OwogICAgICAgIGNvbXByZXNzKikKICAg ICAgICAgICAgZXZhbCAke2V4ZX0gfCBndW56aXAgfCB0YXIgLS1uby1zYW1lLW93bmVyIC14ZiAt CiAgICAgICAgOzsKICAgICAgICAqKQogICAgICAgICAgICBlZXJyb3IgIlVua25vd24gZmlsZXR5 cGUgXCIke2ZpbGV0eXBlfVwiID8iOwogICAgICAgICAgICBmYWxzZQogICAgICAgIDs7CiAgICBl c2FjOwogICAgYXNzZXJ0ICJmYWlsdXJlIHVucGFja2luZyAoJHtmaWxldHlwZX0pIG1ha2VzZWxm ICR7c2hydHNyY30gKCcke3Zlcn0nICske3NraXB9KSIKfQp1bnBhY2tfcGR2ICgpIAp7IAogICAg bG9jYWwgc3JjPSQoZmluZF91bnBhY2thYmxlX2ZpbGUgIiQxIik7CiAgICBsb2NhbCBzaXplb2Zm X3Q9JDI7CiAgICBbWyAteiAke3NyY30gXV0gJiYgZGllICJDb3VsZCBub3QgbG9jYXRlIHNvdXJj ZSBmb3IgJyQxJyI7CiAgICBbWyAteiAke3NpemVvZmZfdH0gXV0gJiYgZGllICJObyBpZGVhIHdo YXQgb2ZmX3Qgc2l6ZSB3YXMgdXNlZCBmb3IgdGhpcyBwZHYgOigiOwogICAgbG9jYWwgc2hydHNy Yz0kKGJhc2VuYW1lICIke3NyY30iKTsKICAgIGVjaG8gIj4+PiBVbnBhY2tpbmcgJHtzaHJ0c3Jj fSB0byAke1BXRH0iOwogICAgbG9jYWwgbWV0YXNraXA9JCh0YWlsIC1jICR7c2l6ZW9mZl90fSAi JHtzcmN9IiB8IGhleGR1bXAgLWUgXCIlaVwiKTsKICAgIGxvY2FsIHRhaWxza2lwPSQodGFpbCAt YyAkKCgke3NpemVvZmZfdH0qMikpICIke3NyY30iIHwgaGVhZCAtYyAke3NpemVvZmZfdH0gfCBo ZXhkdW1wIC1lIFwiJWlcIik7CiAgICBsb2NhbCBtZXRhZmlsZT0kKGVta3RlbXApOwogICAgdGFp bCAtYyArJCgoJHttZXRhc2tpcH0rMSkpICIke3NyY30iID4gIiR7bWV0YWZpbGV9IjsKICAgIGxv Y2FsIGRhdGFmaWxlPSQodGFpbCAtYyArJCgoJHttZXRhc2tpcH0rMSkpICIke3NyY30iIHwgc3Ry aW5ncyB8IGhlYWQgLW4gMSk7CiAgICBkYXRhZmlsZT0kKGJhc2VuYW1lICIke2RhdGFmaWxlfSIp OwogICAgbG9jYWwgdG1wZmlsZT0kKGVta3RlbXApOwogICAgdGFpbCAtYyArJCgoJHt0YWlsc2tp cH0rMSkpICR7c3JjfSAyPiAvZGV2L251bGwgfCBoZWFkIC1jIDUxMiA+ICR7dG1wZmlsZX07CiAg ICBsb2NhbCBpc2NvbXByZXNzZWQ9JChmaWxlIC1iICIke3RtcGZpbGV9Iik7CiAgICBpZiBbWyAk e2lzY29tcHJlc3NlZDowOjh9ID09ICJjb21wcmVzcyIgXV07IHRoZW4KICAgICAgICBpc2NvbXBy ZXNzZWQ9MTsKICAgICAgICBtdiAke3RtcGZpbGV9eywuWn07CiAgICAgICAgZ3VuemlwICR7dG1w ZmlsZX07CiAgICBlbHNlCiAgICAgICAgaXNjb21wcmVzc2VkPTA7CiAgICBmaTsKICAgIGxvY2Fs IGlzdGFyPSQoZmlsZSAtYiAiJHt0bXBmaWxlfSIpOwogICAgaWYgW1sgJHtpc3RhcjowOjl9ID09 ICJQT1NJWCB0YXIiIF1dOyB0aGVuCiAgICAgICAgaXN0YXI9MTsKICAgIGVsc2UKICAgICAgICBp c3Rhcj0wOwogICAgZmk7CiAgICBpZiBbICR7aXNjb21wcmVzc2VkfSAtZXEgMSBdOyB0aGVuCiAg ICAgICAgaWYgWyAke2lzdGFyfSAtZXEgMSBdOyB0aGVuCiAgICAgICAgICAgIHRhaWwgLWMgKyQo KCR7dGFpbHNraXB9KzEpKSAke3NyY30gMj4gL2Rldi9udWxsIHwgaGVhZCAtYyAkKCgke21ldGFz a2lwfS0ke3RhaWxza2lwfSkpIHwgdGFyIC14emYgLTsKICAgICAgICBlbHNlCiAgICAgICAgICAg IHRhaWwgLWMgKyQoKCR7dGFpbHNraXB9KzEpKSAke3NyY30gMj4gL2Rldi9udWxsIHwgaGVhZCAt YyAkKCgke21ldGFza2lwfS0ke3RhaWxza2lwfSkpIHwgZ3ppcCAtZGMgPiAke2RhdGFmaWxlfTsK ICAgICAgICBmaTsKICAgIGVsc2UKICAgICAgICBpZiBbICR7aXN0YXJ9IC1lcSAxIF07IHRoZW4K ICAgICAgICAgICAgdGFpbCAtYyArJCgoJHt0YWlsc2tpcH0rMSkpICR7c3JjfSAyPiAvZGV2L251 bGwgfCBoZWFkIC1jICQoKCR7bWV0YXNraXB9LSR7dGFpbHNraXB9KSkgfCB0YXIgLS1uby1zYW1l LW93bmVyIC14ZiAtOwogICAgICAgIGVsc2UKICAgICAgICAgICAgdGFpbCAtYyArJCgoJHt0YWls c2tpcH0rMSkpICR7c3JjfSAyPiAvZGV2L251bGwgfCBoZWFkIC1jICQoKCR7bWV0YXNraXB9LSR7 dGFpbHNraXB9KSkgPiAke2RhdGFmaWxlfTsKICAgICAgICBmaTsKICAgIGZpOwogICAgdHJ1ZQp9 CnVzZV9pZl9pdXNlICgpIAp7IAogICAgaW5faXVzZSAkMSB8fCByZXR1cm4gMTsKICAgIHVzZSAk MQp9CnVzZXggKCkgCnsgCiAgICB1c2UgIiQxIiAmJiBlY2hvICIkezIteWVzfSQ0IiB8fCBlY2hv ICIkezMtbm99JDUiCn0KdmFsaWRhdGVfZGVza3RvcF9lbnRyaWVzICgpIAp7IAogICAgaWYgW1sg LXggL3Vzci9iaW4vZGVza3RvcC1maWxlLXZhbGlkYXRlIF1dOyB0aGVuCiAgICAgICAgZWluZm8g IkNoZWNraW5nIGRlc2t0b3AgZW50cnkgdmFsaWRpdHkiOwogICAgICAgIGxvY2FsIGRpcmVjdG9y aWVzPSIiOwogICAgICAgIGZvciBkIGluIC91c3Ivc2hhcmUvYXBwbGljYXRpb25zICRAOwogICAg ICAgIGRvCiAgICAgICAgICAgIFtbIC1kICR7RH0ke2R9IF1dICYmIGRpcmVjdG9yaWVzPSIke2Rp cmVjdG9yaWVzfSAke0R9JHtkfSI7CiAgICAgICAgZG9uZTsKICAgICAgICBpZiBbWyAtbiAke2Rp cmVjdG9yaWVzfSBdXTsgdGhlbgogICAgICAgICAgICBmb3IgRklMRSBpbiAkKGZpbmQgJHtkaXJl Y3Rvcmllc30gLW5hbWUgIipcLmRlc2t0b3AiIAkJCQkJCQktbm90IC1wYXRoICcqLmhpZGRlbion IHwgc29ydCAtdSAyPi9kZXYvbnVsbCk7CiAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAgICBs b2NhbCB0ZW1wPSQoZGVza3RvcC1maWxlLXZhbGlkYXRlICR7RklMRX0gfCBncmVwIC12ICJ3YXJu aW5nOiIgfCAJCQkJCQkJCXNlZCAtZSAic3xlcnJvcjogfHwiIC1lICJzfCR7RklMRX06fC0tfGci ICk7CiAgICAgICAgICAgICAgICBbWyAtbiAkdGVtcCBdXSAmJiBlbG9nICR7dGVtcC8tLS8ke0ZJ TEUvJHtEfS99On07CiAgICAgICAgICAgIGRvbmU7CiAgICAgICAgZmk7CiAgICAgICAgZWNobyAi IjsKICAgIGVsc2UKICAgICAgICBlaW5mbyAiUGFzc2luZyBkZXNrdG9wIGVudHJ5IHZhbGlkaXR5 IGNoZWNrLiBJbnN0YWxsIGRldi11dGlsL2Rlc2t0b3AtZmlsZS11dGlscywgaWYgeW91IHdhbnQg dG8gaGVscCB0byBpbXByb3ZlIEdlbnRvby4iOwogICAgZmkKfQp2ZXJzaW9uX2NvbXBhcmUgKCkg CnsgCiAgICBlc2hvcHRzX3B1c2ggLXMgZXh0Z2xvYjsKICAgIGxvY2FsIHZlcl9hPSR7MX0gdmVy X2I9JHsyfSBwYXJ0c19hIHBhcnRzX2I7CiAgICBsb2NhbCBjdXJfdG9rX2EgY3VyX3Rva19iIG51 bV9wYXJ0X2EgbnVtX3BhcnRfYjsKICAgIGxvY2FsIC1pIGN1cl9pZHhfYT0wIGN1cl9pZHhfYj0w IHByZXZfaWR4X2EgcHJldl9pZHhfYjsKICAgIHBhcnRzX2E9KCQoZ2V0X2FsbF92ZXJzaW9uX2Nv bXBvbmVudHMgIiR7dmVyX2F9IiApKTsKICAgIHBhcnRzX2I9KCQoZ2V0X2FsbF92ZXJzaW9uX2Nv bXBvbmVudHMgIiR7dmVyX2J9IiApKTsKICAgIGxvY2FsIC1pIGluZl9sb29wPTA7CiAgICB3aGls ZSB0cnVlOyBkbwogICAgICAgIGluZl9sb29wKz0xOwogICAgICAgICgoaW5mX2xvb3AgPiAyMCkp ICYmIGRpZSAidmVyc2lvbmF0b3IgY29tcGFyZSBidWcgW251bWJlcnMsICR7dmVyX2F9LCAke3Zl cl9ifV0iOwogICAgICAgIHByZXZfaWR4X2E9Y3VyX2lkeF9hOwogICAgICAgIHByZXZfaWR4X2I9 Y3VyX2lkeF9iOwogICAgICAgIGN1cl90b2tfYT0ke3BhcnRzX2FbY3VyX2lkeF9hXX07CiAgICAg ICAgY3VyX3Rva19iPSR7cGFydHNfYltjdXJfaWR4X2JdfTsKICAgICAgICBpZiBbWyAtbiAke2N1 cl90b2tfYX0gXV0gJiYgW1sgLXogJHtjdXJfdG9rX2EvL1tbOmRpZ2l0Ol1dfSBdXTsgdGhlbgog ICAgICAgICAgICBjdXJfaWR4X2ErPTE7CiAgICAgICAgICAgIFtbICR7cGFydHNfYVtjdXJfaWR4 X2FdfSA9PSAuIF1dICYmIGN1cl9pZHhfYSs9MTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGN1 cl90b2tfYT07CiAgICAgICAgZmk7CiAgICAgICAgaWYgW1sgLW4gJHtjdXJfdG9rX2J9IF1dICYm IFtbIC16ICR7Y3VyX3Rva19iLy9bWzpkaWdpdDpdXX0gXV07IHRoZW4KICAgICAgICAgICAgY3Vy X2lkeF9iKz0xOwogICAgICAgICAgICBbWyAke3BhcnRzX2JbY3VyX2lkeF9iXX0gPT0gLiBdXSAm JiBjdXJfaWR4X2IrPTE7CiAgICAgICAgZWxzZQogICAgICAgICAgICBjdXJfdG9rX2I9OwogICAg ICAgIGZpOwogICAgICAgIFtbIC16ICR7Y3VyX3Rva19hfSAmJiAteiAke2N1cl90b2tfYn0gXV0g JiYgYnJlYWs7CiAgICAgICAgW1sgLXogJHtjdXJfdG9rX2F9IF1dICYmIGVzaG9wdHNfcG9wICYm IHJldHVybiAxOwogICAgICAgIFtbIC16ICR7Y3VyX3Rva19ifSBdXSAmJiBlc2hvcHRzX3BvcCAm JiByZXR1cm4gMzsKICAgICAgICBpZiAoKCBwcmV2X2lkeF9hICE9IDAgJiYgcHJldl9pZHhfYiAh PSAwICkpICYmIFtbICR7Y3VyX3Rva19hfSA9PSAwKiB8fCAke2N1cl90b2tfYn0gPT0gMCogXV07 IHRoZW4KICAgICAgICAgICAgY3VyX3Rva19hPSR7Y3VyX3Rva19hJSUrKDApfTsKICAgICAgICAg ICAgY3VyX3Rva19iPSR7Y3VyX3Rva19iJSUrKDApfTsKICAgICAgICAgICAgW1sgJHtjdXJfdG9r X2F9IDwgJHtjdXJfdG9rX2J9IF1dICYmIGVzaG9wdHNfcG9wICYmIHJldHVybiAxOwogICAgICAg ICAgICBbWyAke2N1cl90b2tfYX0gPiAke2N1cl90b2tfYn0gXV0gJiYgZXNob3B0c19wb3AgJiYg cmV0dXJuIDM7CiAgICAgICAgZWxzZQogICAgICAgICAgICBjdXJfdG9rX2E9JHtjdXJfdG9rX2Ej IysoMCl9OwogICAgICAgICAgICBjdXJfdG9rX2I9JHtjdXJfdG9rX2IjIysoMCl9OwogICAgICAg ICAgICA6ICR7Y3VyX3Rva19hOj0wfTsKICAgICAgICAgICAgOiAke2N1cl90b2tfYjo9MH07CiAg ICAgICAgICAgICgoY3VyX3Rva19hIDwgY3VyX3Rva19iKSkgJiYgZXNob3B0c19wb3AgJiYgcmV0 dXJuIDE7CiAgICAgICAgICAgICgoY3VyX3Rva19hID4gY3VyX3Rva19iKSkgJiYgZXNob3B0c19w b3AgJiYgcmV0dXJuIDM7CiAgICAgICAgZmk7CiAgICBkb25lOwogICAgbG9jYWwgbGV0dGVyX2E9 OwogICAgbGV0dGVyX2E9JHtwYXJ0c19hW2N1cl9pZHhfYV19OwogICAgaWYgW1sgJHsjbGV0dGVy X2F9IC1lcSAxICYmIC16ICR7bGV0dGVyX2EvW2Etel19IF1dOyB0aGVuCiAgICAgICAgY3VyX2lk eF9hKz0xOwogICAgZWxzZQogICAgICAgIGxldHRlcl9hPUA7CiAgICBmaTsKICAgIGxvY2FsIGxl dHRlcl9iPTsKICAgIGxldHRlcl9iPSR7cGFydHNfYltjdXJfaWR4X2JdfTsKICAgIGlmIFtbICR7 I2xldHRlcl9ifSAtZXEgMSAmJiAteiAke2xldHRlcl9iL1thLXpdfSBdXTsgdGhlbgogICAgICAg IGN1cl9pZHhfYis9MTsKICAgIGVsc2UKICAgICAgICBsZXR0ZXJfYj1AOwogICAgZmk7CiAgICBb WyAke2xldHRlcl9hfSA8ICR7bGV0dGVyX2J9IF1dICYmIGVzaG9wdHNfcG9wICYmIHJldHVybiAx OwogICAgW1sgJHtsZXR0ZXJfYX0gPiAke2xldHRlcl9ifSBdXSAmJiBlc2hvcHRzX3BvcCAmJiBy ZXR1cm4gMzsKICAgIGluZl9sb29wPTA7CiAgICB3aGlsZSB0cnVlOyBkbwogICAgICAgIGluZl9s b29wKz0xOwogICAgICAgICgoaW5mX2xvb3AgPiAyMCkpICYmIGRpZSAidmVyc2lvbmF0b3IgY29t cGFyZSBidWcgW251bWJlcnMsICR7dmVyX2F9LCAke3Zlcl9ifV0iOwogICAgICAgIFtbICR7cGFy dHNfYVtjdXJfaWR4X2FdfSA9PSBfIF1dICYmICgoY3VyX2lkeF9hKyspKTsKICAgICAgICBbWyAk e3BhcnRzX2JbY3VyX2lkeF9iXX0gPT0gXyBdXSAmJiAoKGN1cl9pZHhfYisrKSk7CiAgICAgICAg Y3VyX3Rva19hPSR7cGFydHNfYVtjdXJfaWR4X2FdfTsKICAgICAgICBjdXJfdG9rX2I9JHtwYXJ0 c19iW2N1cl9pZHhfYl19OwogICAgICAgIG51bV9wYXJ0X2E9MDsKICAgICAgICBudW1fcGFydF9i PTA7CiAgICAgICAgaWYgaGFzICR7Y3VyX3Rva19hJSUrKFswLTldKX0gImFscGhhIiAiYmV0YSIg InByZSIgInJjIiAicCI7IHRoZW4KICAgICAgICAgICAgY3VyX2lkeF9hKz0xOwogICAgICAgICAg ICBudW1fcGFydF9hPSR7Y3VyX3Rva19hIyMrKFthLXpdKX07CiAgICAgICAgICAgIG51bV9wYXJ0 X2E9JHtudW1fcGFydF9hIyMrKDApfTsKICAgICAgICAgICAgOiAke251bV9wYXJ0X2E6PTB9Owog ICAgICAgICAgICBjdXJfdG9rX2E9JHtjdXJfdG9rX2ElJSsoWzAtOV0pfTsKICAgICAgICBlbHNl CiAgICAgICAgICAgIGN1cl90b2tfYT07CiAgICAgICAgZmk7CiAgICAgICAgaWYgaGFzICR7Y3Vy X3Rva19iJSUrKFswLTldKX0gYWxwaGEgYmV0YSBwcmUgcmMgcDsgdGhlbgogICAgICAgICAgICBj dXJfaWR4X2IrPTE7CiAgICAgICAgICAgIG51bV9wYXJ0X2I9JHtjdXJfdG9rX2IjIysoW2Etel0p fTsKICAgICAgICAgICAgbnVtX3BhcnRfYj0ke251bV9wYXJ0X2IjIysoMCl9OwogICAgICAgICAg ICA6ICR7bnVtX3BhcnRfYjo9MH07CiAgICAgICAgICAgIGN1cl90b2tfYj0ke2N1cl90b2tfYiUl KyhbMC05XSl9OwogICAgICAgIGVsc2UKICAgICAgICAgICAgY3VyX3Rva19iPTsKICAgICAgICBm aTsKICAgICAgICBpZiBbWyAke2N1cl90b2tfYX0gIT0gJHtjdXJfdG9rX2J9IF1dOyB0aGVuCiAg ICAgICAgICAgIGxvY2FsIHN1ZmZpeDsKICAgICAgICAgICAgZm9yIHN1ZmZpeCBpbiBhbHBoYSBi ZXRhIHByZSByYyAiIiBwOwogICAgICAgICAgICBkbwogICAgICAgICAgICAgICAgW1sgJHtjdXJf dG9rX2F9ID09ICR7c3VmZml4fSBdXSAmJiBlc2hvcHRzX3BvcCAmJiByZXR1cm4gMTsKICAgICAg ICAgICAgICAgIFtbICR7Y3VyX3Rva19ifSA9PSAke3N1ZmZpeH0gXV0gJiYgZXNob3B0c19wb3Ag JiYgcmV0dXJuIDM7CiAgICAgICAgICAgIGRvbmU7CiAgICAgICAgZWxzZQogICAgICAgICAgICBp ZiBbWyAteiAke2N1cl90b2tfYX0gJiYgLXogJHtjdXJfdG9rX2J9IF1dOyB0aGVuCiAgICAgICAg ICAgICAgICBicmVhazsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgKChudW1fcGFy dF9hIDwgbnVtX3BhcnRfYikpICYmIGVzaG9wdHNfcG9wICYmIHJldHVybiAxOwogICAgICAgICAg ICAgICAgKChudW1fcGFydF9hID4gbnVtX3BhcnRfYikpICYmIGVzaG9wdHNfcG9wICYmIHJldHVy biAzOwogICAgICAgICAgICBmaTsKICAgICAgICBmaTsKICAgIGRvbmU7CiAgICBbWyAke3BhcnRz X2FbY3VyX2lkeF9hXX0gPT0gLSBdXSAmJiAoKGN1cl9pZHhfYSsrKSk7CiAgICBbWyAke3BhcnRz X2JbY3VyX2lkeF9iXX0gPT0gLSBdXSAmJiAoKGN1cl9pZHhfYisrKSk7CiAgICBpZiBbWyAtbiAk e3BhcnRzX2FbY3VyX2lkeF9hXS9yKyhbMC05XSl9IHx8IC1uICR7cGFydHNfYltjdXJfaWR4X2Jd L3IrKFswLTldKX0gXV07IHRoZW4KICAgICAgICBkaWUgInZlcnNpb25hdG9yIGNvbXBhcmUgYnVn IFtyZXZpc2lvbnMsICR7dmVyX2F9LCAke3Zlcl9ifV0iOwogICAgZmk7CiAgICBudW1fcGFydF9h PSR7cGFydHNfYVtjdXJfaWR4X2FdI3J9OwogICAgbnVtX3BhcnRfYT0ke251bV9wYXJ0X2EjIyso MCl9OwogICAgOiAke251bV9wYXJ0X2E6PTB9OwogICAgbnVtX3BhcnRfYj0ke3BhcnRzX2JbY3Vy X2lkeF9iXSNyfTsKICAgIG51bV9wYXJ0X2I9JHtudW1fcGFydF9iIyMrKDApfTsKICAgIDogJHtu dW1fcGFydF9iOj0wfTsKICAgICgobnVtX3BhcnRfYSA8IG51bV9wYXJ0X2IpKSAmJiBlc2hvcHRz X3BvcCAmJiByZXR1cm4gMTsKICAgICgobnVtX3BhcnRfYSA+IG51bV9wYXJ0X2IpKSAmJiBlc2hv cHRzX3BvcCAmJiByZXR1cm4gMzsKICAgIGVzaG9wdHNfcG9wOwogICAgcmV0dXJuIDIKfQp2ZXJz aW9uX2Zvcm1hdF9zdHJpbmcgKCkgCnsgCiAgICBsb2NhbCBmc3RyPSQxOwogICAgc2hpZnQ7CiAg ICBzZXQgLS0gJChnZXRfdmVyc2lvbl9jb21wb25lbnRzICIkQCIpOwogICAgZXZhbCBlY2hvICIk e2ZzdHJ9Igp9CnZlcnNpb25faXNfYXRfbGVhc3QgKCkgCnsgCiAgICBsb2NhbCB3YW50X3M9IiQx IiBoYXZlX3M9IiR7MjotJHtQVlJ9fSIgcjsKICAgIHZlcnNpb25fY29tcGFyZSAiJHt3YW50X3N9 IiAiJHtoYXZlX3N9IjsKICAgIHI9JD87CiAgICBjYXNlICRyIGluIAogICAgICAgIDEgfCAyKQog ICAgICAgICAgICByZXR1cm4gMAogICAgICAgIDs7CiAgICAgICAgMykKICAgICAgICAgICAgcmV0 dXJuIDEKICAgICAgICA7OwogICAgICAgICopCiAgICAgICAgICAgIGRpZSAidmVyc2lvbmF0b3Ig Y29tcGFyZSBidWcgW2F0bGVhc3QsICR7d2FudF9zfSwgJHtoYXZlX3N9LCAke3J9XSIKICAgICAg ICA7OwogICAgZXNhYwp9CnZlcnNpb25fc29ydCAoKSAKeyAKICAgIGVzaG9wdHNfcHVzaCAtcyBl eHRnbG9iOwogICAgbG9jYWwgaXRlbXM9OwogICAgbG9jYWwgLWkgbGVmdD0wOwogICAgaXRlbXM9 KCIkQCIpOwogICAgd2hpbGUgKChsZWZ0IDwgJHsjaXRlbXNbQF19KSk7IGRvCiAgICAgICAgbG9j YWwgLWkgbG93ZXN0X2lkeD1sZWZ0OwogICAgICAgIGxvY2FsIC1pIGlkeD1sb3dlc3RfaWR4KzE7 CiAgICAgICAgd2hpbGUgKChpZHggPCAkeyNpdGVtc1tAXX0pKTsgZG8KICAgICAgICAgICAgdmVy c2lvbl9jb21wYXJlICIke2l0ZW1zW2xvd2VzdF9pZHhdfSIgIiR7aXRlbXNbaWR4XX0iOwogICAg ICAgICAgICBbWyAkPyAtZXEgMyBdXSAmJiBsb3dlc3RfaWR4PWlkeDsKICAgICAgICAgICAgaWR4 Kz0xOwogICAgICAgIGRvbmU7CiAgICAgICAgbG9jYWwgdG1wPSR7aXRlbXNbbG93ZXN0X2lkeF19 OwogICAgICAgIGl0ZW1zW2xvd2VzdF9pZHhdPSR7aXRlbXNbbGVmdF19OwogICAgICAgIGl0ZW1z W2xlZnRdPSR7dG1wfTsKICAgICAgICBsZWZ0Kz0xOwogICAgZG9uZTsKICAgIGVjaG8gJHtpdGVt c1tAXX07CiAgICBlc2hvcHRzX3BvcAp9Cg== --20cf30244fefa30c3404b8107590--