<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>123665</bug_id>
          
          <creation_ts>2013-11-02 08:28:18 -0700</creation_ts>
          <short_desc>jsmin.py license header confusing, mentions non-free license</short_desc>
          <delta_ts>2014-05-09 00:11:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Emilio Pozuelo Monfort">pochu27</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>berto</cc>
    
    <cc>cgarcia</cc>
    
    <cc>changseok</cc>
    
    <cc>gustavo</cc>
    
    <cc>joepeck</cc>
    
    <cc>mrobinson</cc>
    
    <cc>timothy</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>946218</commentid>
    <comment_count>0</comment_count>
    <who name="Emilio Pozuelo Monfort">pochu27</who>
    <bug_when>2013-11-02 08:28:18 -0700</bug_when>
    <thetext>[ This is not WebKitGTK+ specific but I found this in that context. feel free to change component as appropriate though ]

Hi,

I just noticed while packaging webkitgtk 2.3.1 that it ships a new file, Source/WebCore/inspector/Scripts/jsmin.py, which has a MIT license with this additional clause:

&quot;The Software shall be used for Good, not Evil.&quot;

This is non-free according to Debian, Google, RedHat, Fedora, GNU...:

https://wiki.debian.org/qa.debian.org/jsonevil
http://www.gnu.org/licenses/license-list.html#JSON
http://fedoraproject.org/wiki/Licensing:Main#Bad_Licenses
https://bugzilla.redhat.com/show_bug.cgi?id=455507
http://wonko.com//post/jsmin-isnt-welcome-on-google-code

This file is a copy of Source/WebInspectorUI/Scripts/jsmin.py which isn&apos;t shipped in webkitgtk+ tarballs, so we didn&apos;t notice before.

Note, this may or may not be the actual license of the file. The file header is:

# This code is original from jsmin by Douglas Crockford, it was translated to
# Python by Baruch Even. The original code had the following copyright and
# license.
#
# /* jsmin.c
#    2007-05-22
#
# Copyright (c) 2002 Douglas Crockford  (www.crockford.com)
#
# [ MIT license with non-free clause ]

So the code was rewritten. It&apos;s not clear to me whether that license applies to the original file only or if this file is licensed in the same way. If the former, this is not an issue at all, but it should be clarified in the file, preferably clearly stating what the actual license of the file is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946223</commentid>
    <comment_count>1</comment_count>
    <who name="Emilio Pozuelo Monfort">pochu27</who>
    <bug_when>2013-11-02 08:58:18 -0700</bug_when>
    <thetext>Re-reading the header, it really sounds like it&apos;s just mentioning the original implementation&apos;s license and copyright, but in no way that would influence this implementation&apos;s license if it&apos;s a complete reimplementation from scratch without reusing any of the non-free code.

Indeed, jsmin 2.0.7 from pypi[1] says:

# This code is original from jsmin by Douglas Crockford, it was translated to
# Python by Baruch Even. It was rewritten by Dave St.Germain for speed.
#
# The MIT License (MIT)
# 
# Copyright (c) 2013 Dave St.Germain
# 
# [ here follows the MIT license *without* the good not evil clause ]

[1] https://pypi.python.org/pypi/jsmin

So I suspect our current version of jsmin.py is just mentioning the orignal jsmin.c&apos;s license.

Updating our jsmin.py so we have upstream&apos;s current header which is less confusing would be nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946224</commentid>
    <comment_count>2</comment_count>
    <who name="Emilio Pozuelo Monfort">pochu27</who>
    <bug_when>2013-11-02 08:59:39 -0700</bug_when>
    <thetext>Reassigning to webcore. Note we have two copies of this file, one in WebCore/inspector and another one in WebInspectorUI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946481</commentid>
    <comment_count>3</comment_count>
    <who name="Alberto Garcia">berto</who>
    <bug_when>2013-11-03 12:57:32 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Re-reading the header, it really sounds like it&apos;s just mentioning
&gt; the original implementation&apos;s license and copyright, but in no way
&gt; that would influence this implementation&apos;s license if it&apos;s a
&gt; complete reimplementation from scratch without reusing any of the
&gt; non-free code.

Yes, but it&apos;s indeed confusing. It seems that Timothy added this file
in r151453, maybe he can clarify?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946522</commentid>
    <comment_count>4</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-11-03 18:23:48 -0800</bug_when>
    <thetext>Pulling in the latest upstream version is fine.

Note: WebCore/inspector/Scripts should not be bundled into shipping resources. If it is that is a bug. Nothing in WebCore/inspector ships to customers anymore now that front-end has been removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007320</commentid>
    <comment_count>5</comment_count>
    <who name="Emilio Pozuelo Monfort">pochu27</who>
    <bug_when>2014-05-07 07:24:37 -0700</bug_when>
    <thetext>Also see:

https://bitbucket.org/dcs/jsmin/commits/81fe577fe848a5406e6fbc36021510adac24abb0 https://bitbucket.org/dcs/jsmin/commits/4734e9d8473f750ae5dc5b236831190eee74bdad</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007330</commentid>
    <comment_count>6</comment_count>
      <attachid>230999</attachid>
    <who name="Alberto Garcia">berto</who>
    <bug_when>2014-05-07 08:06:32 -0700</bug_when>
    <thetext>Created attachment 230999
Patch

(In reply to comment #4)
&gt; Pulling in the latest upstream version is fine.

Ok, here it goes. I&apos;ve done a clean build and everything seems normal.

This version in published under the MIT/Expat license.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007420</commentid>
    <comment_count>7</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-05-07 13:46:51 -0700</bug_when>
    <thetext>You should build with COMBINE_INSPECTOR_RESOURCES defined. That will cause copy-user-interface-resources.pl in WebInspectorUI to call jsmin.py.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007485</commentid>
    <comment_count>8</comment_count>
      <attachid>230999</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-05-07 18:14:13 -0700</bug_when>
    <thetext>Comment on attachment 230999
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=230999&amp;action=review

&gt; Source/JavaScriptCore/ChangeLog:27
&gt; +        (jsmin):
&gt; +        (JavascriptMinify):
&gt; +        (JavascriptMinify.__init__):
&gt; +        (JavascriptMinify.minify):
&gt; +        (JavascriptMinify.minify.write):
&gt; +        (isAlphanum): Deleted.
&gt; +        (UnterminatedComment): Deleted.
&gt; +        (UnterminatedStringLiteral): Deleted.
&gt; +        (UnterminatedRegularExpression): Deleted.
&gt; +        (JavascriptMinify._outA): Deleted.
&gt; +        (JavascriptMinify._outB): Deleted.
&gt; +        (JavascriptMinify._get): Deleted.
&gt; +        (JavascriptMinify._peek): Deleted.
&gt; +        (JavascriptMinify._next): Deleted.
&gt; +        (JavascriptMinify._action): Deleted.
&gt; +        (JavascriptMinify._jsmin): Deleted.

You shouldn’t leave this function list in the change log in a case like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007566</commentid>
    <comment_count>9</comment_count>
    <who name="Alberto Garcia">berto</who>
    <bug_when>2014-05-08 01:57:10 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; You should build with COMBINE_INSPECTOR_RESOURCES defined. That will
&gt; cause copy-user-interface-resources.pl in WebInspectorUI to call
&gt; jsmin.py.

copy-user-interface-resources.pl is not used in the GTK+ port, but I
compared all other files minified by jsmin.py and the output from both
versions only differs in a few whitespaces.

(In reply to comment #8)
&gt; You shouldn’t leave this function list in the change log in a case
&gt; like this.

You&apos;re right, I&apos;ll remove it, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007912</commentid>
    <comment_count>10</comment_count>
    <who name="Alberto Garcia">berto</who>
    <bug_when>2014-05-09 00:11:19 -0700</bug_when>
    <thetext>Committed r168523: &lt;http://trac.webkit.org/changeset/168523&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230999</attachid>
            <date>2014-05-07 08:06:32 -0700</date>
            <delta_ts>2014-05-07 18:14:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>123665.diff</filename>
            <type>text/plain</type>
            <size>34785</size>
            <attacher name="Alberto Garcia">berto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDk1NWI0YjYuLjM3NDk4YjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE0LTA1LTA3ICBBbGJlcnRvIEdhcmNp
YSAgPGJlcnRvQGlnYWxpYS5jb20+CisKKyAgICAgICAganNtaW4ucHkgbGljZW5zZSBoZWFkZXIg
Y29uZnVzaW5nLCBtZW50aW9ucyBub24tZnJlZSBsaWNlbnNlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2NjUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQdWxsIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9u
IGZyb20gdXBzdHJlYW0sIHdoaWNoIGhhcyBhIGNsZWFyCisgICAgICAgIGxpY2Vuc2UuCisKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9qc21pbi5weToKKyAgICAgICAgKGpzbWluKToKKyAg
ICAgICAgKEphdmFzY3JpcHRNaW5pZnkpOgorICAgICAgICAoSmF2YXNjcmlwdE1pbmlmeS5fX2lu
aXRfXyk6CisgICAgICAgIChKYXZhc2NyaXB0TWluaWZ5Lm1pbmlmeSk6CisgICAgICAgIChKYXZh
c2NyaXB0TWluaWZ5Lm1pbmlmeS53cml0ZSk6CisgICAgICAgIChpc0FscGhhbnVtKTogRGVsZXRl
ZC4KKyAgICAgICAgKFVudGVybWluYXRlZENvbW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoVW50
ZXJtaW5hdGVkU3RyaW5nTGl0ZXJhbCk6IERlbGV0ZWQuCisgICAgICAgIChVbnRlcm1pbmF0ZWRS
ZWd1bGFyRXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChKYXZhc2NyaXB0TWluaWZ5Ll9v
dXRBKTogRGVsZXRlZC4KKyAgICAgICAgKEphdmFzY3JpcHRNaW5pZnkuX291dEIpOiBEZWxldGVk
LgorICAgICAgICAoSmF2YXNjcmlwdE1pbmlmeS5fZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEph
dmFzY3JpcHRNaW5pZnkuX3BlZWspOiBEZWxldGVkLgorICAgICAgICAoSmF2YXNjcmlwdE1pbmlm
eS5fbmV4dCk6IERlbGV0ZWQuCisgICAgICAgIChKYXZhc2NyaXB0TWluaWZ5Ll9hY3Rpb24pOiBE
ZWxldGVkLgorICAgICAgICAoSmF2YXNjcmlwdE1pbmlmeS5fanNtaW4pOiBEZWxldGVkLgorCiAy
MDE0LTA1LTA2ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZCBidWlsZCBmaXggZm9yIEMtTE9PUCBhZnRlciByMTY4Mzk2LgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2pzbWluLnB5IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2pzbWluLnB5CmluZGV4IDJlMzNk
NmUuLjgzZDJhNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9qc21pbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvanNtaW4ucHkKQEAgLTEsMjIyICsxLDIzOCBAQAotIyEvdXNyL2Jpbi9weXRob24KLQog
IyBUaGlzIGNvZGUgaXMgb3JpZ2luYWwgZnJvbSBqc21pbiBieSBEb3VnbGFzIENyb2NrZm9yZCwg
aXQgd2FzIHRyYW5zbGF0ZWQgdG8KLSMgUHl0aG9uIGJ5IEJhcnVjaCBFdmVuLiBUaGUgb3JpZ2lu
YWwgY29kZSBoYWQgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCi0jIGxpY2Vuc2UuCi0jCi0j
IC8qIGpzbWluLmMKLSMgICAgMjAwNy0wNS0yMgorIyBQeXRob24gYnkgQmFydWNoIEV2ZW4uIEl0
IHdhcyByZXdyaXR0ZW4gYnkgRGF2ZSBTdC5HZXJtYWluIGZvciBzcGVlZC4KICMKLSMgQ29weXJp
Z2h0IChjKSAyMDAyIERvdWdsYXMgQ3JvY2tmb3JkICAod3d3LmNyb2NrZm9yZC5jb20pCisjIFRo
ZSBNSVQgTGljZW5zZSAoTUlUKQogIwotIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm
cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCi0jIHRoaXMg
c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy
ZSIpLCB0byBkZWFsIGluCi0jIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs
dWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KLSMgdXNlLCBjb3B5LCBtb2Rp
ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBj
b3BpZXMKLSMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0
aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCi0jIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9uczoKKyMgQ29weXJpZ2h0IChjKSAyMDEzIERhdmUgU3QuR2VybWFpbgog
IwotIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj
ZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKLSMgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRp
b25zIG9mIHRoZSBTb2Z0d2FyZS4KKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl
ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorIyBvZiB0aGlzIHNv
ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi
KSwgdG8gZGVhbAorIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk
aW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5
LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyMg
Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl
IFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnM6CiAjCi0jIFRoZSBTb2Z0d2FyZSBzaGFsbCBiZSB1c2VkIGZvciBHb29k
LCBub3QgRXZpbC4KKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz
c2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyMgYWxsIGNvcGllcyBvciBzdWJzdGFu
dGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAjCiAjIFRIRSBTT0ZUV0FSRSBJUyBQUk9W
SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAj
IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZLAogIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg
Tk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKICMgQVVUSE9SUyBPUiBDT1BZ
UklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgog
IyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U
SEVSV0lTRSwgQVJJU0lORyBGUk9NLAotIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI
RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotIyBTT0ZUV0FS
RS4KLSMgKi8KKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig
VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorIyBUSEUgU09GVFdBUkUuCiAKLSMgSW1wb3J0
IFN0cmluZ0lPIGZyb20gZWl0aGVyIHRoZSBTdHJpbmdJTyBtb2R1bGUgKFB5dGhvbiAyLngpIG9y
IHRoZSBpbyBtb2R1bGUgKFB5dGhvbiAzLngpLgotdHJ5OgotICAgIGZyb20gU3RyaW5nSU8gaW1w
b3J0IFN0cmluZ0lPCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgZnJvbSBpbyBpbXBvcnQgU3Ry
aW5nSU8KIAotZGVmIGpzbWluKGpzKToKLSAgICBpbnMgPSBTdHJpbmdJTyhqcykKLSAgICBvdXRz
ID0gU3RyaW5nSU8oKQotICAgIEphdmFzY3JpcHRNaW5pZnkoKS5taW5pZnkoaW5zLCBvdXRzKQot
ICAgIHN0ciA9IG91dHMuZ2V0dmFsdWUoKQotICAgIGlmIGxlbihzdHIpID4gMCBhbmQgc3RyWzBd
ID09ICdcbic6Ci0gICAgICAgIHN0ciA9IHN0clsxOl0KLSAgICByZXR1cm4gc3RyCi0KLWRlZiBp
c0FscGhhbnVtKGMpOgotICAgICIiInJldHVybiB0cnVlIGlmIHRoZSBjaGFyYWN0ZXIgaXMgYSBs
ZXR0ZXIsIGRpZ2l0LCB1bmRlcnNjb3JlLAotICAgICAgICAgICBkb2xsYXIgc2lnbiwgb3Igbm9u
LUFTQ0lJIGNoYXJhY3Rlci4KLSAgICAiIiIKLSAgICByZXR1cm4gKChjID49ICdhJyBhbmQgYyA8
PSAneicpIG9yIChjID49ICcwJyBhbmQgYyA8PSAnOScpIG9yCi0gICAgICAgICAgICAoYyA+PSAn
QScgYW5kIGMgPD0gJ1onKSBvciBjID09ICdfJyBvciBjID09ICckJyBvciBjID09ICdcXCcgb3Ig
KGMgaXMgbm90IE5vbmUgYW5kIG9yZChjKSA+IDEyNikpOworaW1wb3J0IHN5cworaXNfMyA9IHN5
cy52ZXJzaW9uX2luZm8gPj0gKDMsIDApCitpZiBpc18zOgorICAgIGltcG9ydCBpbworZWxzZToK
KyAgICBpbXBvcnQgU3RyaW5nSU8KKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBjU3RyaW5nSU8K
KyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIGNTdHJpbmdJTyA9IE5vbmUKKwogCi1j
bGFzcyBVbnRlcm1pbmF0ZWRDb21tZW50KEV4Y2VwdGlvbik6Ci0gICAgcGFzcworX19hbGxfXyA9
IFsnanNtaW4nLCAnSmF2YXNjcmlwdE1pbmlmeSddCitfX3ZlcnNpb25fXyA9ICcyLjAuOScKIAot
Y2xhc3MgVW50ZXJtaW5hdGVkU3RyaW5nTGl0ZXJhbChFeGNlcHRpb24pOgotICAgIHBhc3MKIAot
Y2xhc3MgVW50ZXJtaW5hdGVkUmVndWxhckV4cHJlc3Npb24oRXhjZXB0aW9uKToKLSAgICBwYXNz
CitkZWYganNtaW4oanMpOgorICAgICIiIgorICAgIHJldHVybnMgYSBtaW5pZmllZCB2ZXJzaW9u
IG9mIHRoZSBqYXZhc2NyaXB0IHN0cmluZworICAgICIiIgorICAgIGlmIG5vdCBpc18zOgorICAg
ICAgICBpZiBjU3RyaW5nSU8gYW5kIG5vdCBpc2luc3RhbmNlKGpzLCB1bmljb2RlKToKKyAgICAg
ICAgICAgICMgc3RyaW5ncyBjYW4gdXNlIGNTdHJpbmdJTyBmb3IgYSAzeCBwZXJmb3JtYW5jZQor
ICAgICAgICAgICAgIyBpbXByb3ZlbWVudCwgYnV0IHVuaWNvZGUgKGluIHB5dGhvbjIpIGNhbm5v
dAorICAgICAgICAgICAga2xhc3MgPSBjU3RyaW5nSU8uU3RyaW5nSU8KKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIGtsYXNzID0gU3RyaW5nSU8uU3RyaW5nSU8KKyAgICBlbHNlOgorICAgICAg
ICBrbGFzcyA9IGlvLlN0cmluZ0lPCisgICAgaW5zID0ga2xhc3MoanMpCisgICAgb3V0cyA9IGts
YXNzKCkKKyAgICBKYXZhc2NyaXB0TWluaWZ5KGlucywgb3V0cykubWluaWZ5KCkKKyAgICByZXR1
cm4gb3V0cy5nZXR2YWx1ZSgpCisKIAogY2xhc3MgSmF2YXNjcmlwdE1pbmlmeShvYmplY3QpOgor
ICAgICIiIgorICAgIE1pbmlmeSBhbiBpbnB1dCBzdHJlYW0gb2YgamF2YXNjcmlwdCwgd3JpdGlu
ZworICAgIHRvIGFuIG91dHB1dCBzdHJlYW0KKyAgICAiIiIKIAotICAgIGRlZiBfb3V0QShzZWxm
KToKLSAgICAgICAgc2VsZi5vdXRzdHJlYW0ud3JpdGUoc2VsZi50aGVBKQotICAgIGRlZiBfb3V0
QihzZWxmKToKLSAgICAgICAgc2VsZi5vdXRzdHJlYW0ud3JpdGUoc2VsZi50aGVCKQotCi0gICAg
ZGVmIF9nZXQoc2VsZik6Ci0gICAgICAgICIiInJldHVybiB0aGUgbmV4dCBjaGFyYWN0ZXIgZnJv
bSBzdGRpbi4gV2F0Y2ggb3V0IGZvciBsb29rYWhlYWQuIElmCi0gICAgICAgICAgIHRoZSBjaGFy
YWN0ZXIgaXMgYSBjb250cm9sIGNoYXJhY3RlciwgdHJhbnNsYXRlIGl0IHRvIGEgc3BhY2Ugb3IK
LSAgICAgICAgICAgbGluZWZlZWQuCi0gICAgICAgICIiIgotICAgICAgICBjID0gc2VsZi50aGVM
b29rYWhlYWQKLSAgICAgICAgc2VsZi50aGVMb29rYWhlYWQgPSBOb25lCi0gICAgICAgIGlmIGMg
PT0gTm9uZToKLSAgICAgICAgICAgIGMgPSBzZWxmLmluc3RyZWFtLnJlYWQoMSkKLSAgICAgICAg
aWYgYyA+PSAnICcgb3IgYyA9PSAnXG4nOgotICAgICAgICAgICAgcmV0dXJuIGMKLSAgICAgICAg
aWYgYyA9PSAnJzogIyBFT0YKLSAgICAgICAgICAgIHJldHVybiAnXDAwMCcKLSAgICAgICAgaWYg
YyA9PSAnXHInOgotICAgICAgICAgICAgcmV0dXJuICdcbicKLSAgICAgICAgcmV0dXJuICcgJwot
Ci0gICAgZGVmIF9wZWVrKHNlbGYpOgotICAgICAgICBzZWxmLnRoZUxvb2thaGVhZCA9IHNlbGYu
X2dldCgpCi0gICAgICAgIHJldHVybiBzZWxmLnRoZUxvb2thaGVhZAotCi0gICAgZGVmIF9uZXh0
KHNlbGYpOgotICAgICAgICAiIiJnZXQgdGhlIG5leHQgY2hhcmFjdGVyLCBleGNsdWRpbmcgY29t
bWVudHMuIHBlZWsoKSBpcyB1c2VkIHRvIHNlZQotICAgICAgICAgICBpZiBhbiB1bmVzY2FwZWQg
Jy8nIGlzIGZvbGxvd2VkIGJ5IGEgJy8nIG9yICcqJy4KLSAgICAgICAgIiIiCi0gICAgICAgIGMg
PSBzZWxmLl9nZXQoKQotICAgICAgICBpZiBjID09ICcvJyBhbmQgc2VsZi50aGVBICE9ICdcXCc6
Ci0gICAgICAgICAgICBwID0gc2VsZi5fcGVlaygpCi0gICAgICAgICAgICBpZiBwID09ICcvJzoK
LSAgICAgICAgICAgICAgICBjID0gc2VsZi5fZ2V0KCkKLSAgICAgICAgICAgICAgICB3aGlsZSBj
ID4gJ1xuJzoKLSAgICAgICAgICAgICAgICAgICAgYyA9IHNlbGYuX2dldCgpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGMKLSAgICAgICAgICAgIGlmIHAgPT0gJyonOgotICAgICAgICAgICAgICAg
IGMgPSBzZWxmLl9nZXQoKQotICAgICAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAg
ICAgICAgIGMgPSBzZWxmLl9nZXQoKQotICAgICAgICAgICAgICAgICAgICBpZiBjID09ICcqJzoK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3BlZWsoKSA9PSAnLyc6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZ2V0KCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gJyAnCi0gICAgICAgICAgICAgICAgICAgIGlmIGMgPT0gJ1wwMDAnOgotICAg
ICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVW50ZXJtaW5hdGVkQ29tbWVudCgpCi0KLSAgICAg
ICAgcmV0dXJuIGMKLQotICAgIGRlZiBfYWN0aW9uKHNlbGYsIGFjdGlvbik6Ci0gICAgICAgICIi
ImRvIHNvbWV0aGluZyEgV2hhdCB5b3UgZG8gaXMgZGV0ZXJtaW5lZCBieSB0aGUgYXJndW1lbnQ6
Ci0gICAgICAgICAgIDEgICBPdXRwdXQgQS4gQ29weSBCIHRvIEEuIEdldCB0aGUgbmV4dCBCLgot
ICAgICAgICAgICAyICAgQ29weSBCIHRvIEEuIEdldCB0aGUgbmV4dCBCLiAoRGVsZXRlIEEpLgot
ICAgICAgICAgICAzICAgR2V0IHRoZSBuZXh0IEIuIChEZWxldGUgQikuCi0gICAgICAgICAgIGFj
dGlvbiB0cmVhdHMgYSBzdHJpbmcgYXMgYSBzaW5nbGUgY2hhcmFjdGVyLiBXb3chCi0gICAgICAg
ICAgIGFjdGlvbiByZWNvZ25pemVzIGEgcmVndWxhciBleHByZXNzaW9uIGlmIGl0IGlzIHByZWNl
ZGVkIGJ5ICggb3IgLCBvciA9LgotICAgICAgICAiIiIKLSAgICAgICAgaWYgYWN0aW9uIDw9IDE6
Ci0gICAgICAgICAgICBzZWxmLl9vdXRBKCkKLQotICAgICAgICBpZiBhY3Rpb24gPD0gMjoKLSAg
ICAgICAgICAgIHNlbGYudGhlQSA9IHNlbGYudGhlQgotICAgICAgICAgICAgaWYgc2VsZi50aGVB
ID09ICInIiBvciBzZWxmLnRoZUEgPT0gJyInOgotICAgICAgICAgICAgICAgIHdoaWxlIDE6Ci0g
ICAgICAgICAgICAgICAgICAgIHNlbGYuX291dEEoKQotICAgICAgICAgICAgICAgICAgICBzZWxm
LnRoZUEgPSBzZWxmLl9nZXQoKQotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnRoZUEgPT0g
c2VsZi50aGVCOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgc2VsZi50aGVBIDw9ICdcbic6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlz
ZSBVbnRlcm1pbmF0ZWRTdHJpbmdMaXRlcmFsKCkKLSAgICAgICAgICAgICAgICAgICAgaWYgc2Vs
Zi50aGVBID09ICdcXCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vdXRBKCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGhlQSA9IHNlbGYuX2dldCgpCi0KLQotICAgICAg
ICBpZiBhY3Rpb24gPD0gMzoKLSAgICAgICAgICAgIHNlbGYudGhlQiA9IHNlbGYuX25leHQoKQot
ICAgICAgICAgICAgaWYgc2VsZi50aGVCID09ICcvJyBhbmQgKHNlbGYudGhlQSA9PSAnKCcgb3Ig
c2VsZi50aGVBID09ICcsJyBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYudGhlQSA9PSAnPScgb3Igc2VsZi50aGVBID09ICc6JyBvcgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGhlQSA9PSAnWycgb3Igc2VsZi50aGVBID09ICc/
JyBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGhlQSA9PSAn
IScgb3Igc2VsZi50aGVBID09ICcmJyBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYudGhlQSA9PSAnfCcgb3Igc2VsZi50aGVBID09ICc7JyBvcgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGhlQSA9PSAneycgb3Igc2VsZi50aGVB
ID09ICd9JyBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGhl
QSA9PSAnXG4nKToKLSAgICAgICAgICAgICAgICBzZWxmLl9vdXRBKCkKLSAgICAgICAgICAgICAg
ICBzZWxmLl9vdXRCKCkKLSAgICAgICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAg
ICAgICBzZWxmLnRoZUEgPSBzZWxmLl9nZXQoKQotICAgICAgICAgICAgICAgICAgICBpZiBzZWxm
LnRoZUEgPT0gJy8nOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAg
ICAgICAgICAgZWxpZiBzZWxmLnRoZUEgPT0gJ1xcJzoKLSAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX291dEEoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aGVBID0gc2VsZi5f
Z2V0KCkKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWxmLnRoZUEgPD0gJ1xuJzoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJhaXNlIFVudGVybWluYXRlZFJlZ3VsYXJFeHByZXNzaW9uKCkK
LSAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3V0QSgpCi0gICAgICAgICAgICAgICAgc2VsZi50
aGVCID0gc2VsZi5fbmV4dCgpCi0KLQotICAgIGRlZiBfanNtaW4oc2VsZik6Ci0gICAgICAgICIi
IkNvcHkgdGhlIGlucHV0IHRvIHRoZSBvdXRwdXQsIGRlbGV0aW5nIHRoZSBjaGFyYWN0ZXJzIHdo
aWNoIGFyZQotICAgICAgICAgICBpbnNpZ25pZmljYW50IHRvIEphdmFTY3JpcHQuIENvbW1lbnRz
IHdpbGwgYmUgcmVtb3ZlZC4gVGFicyB3aWxsIGJlCi0gICAgICAgICAgIHJlcGxhY2VkIHdpdGgg
c3BhY2VzLiBDYXJyaWFnZSByZXR1cm5zIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBsaW5lZmVlZHMu
Ci0gICAgICAgICAgIE1vc3Qgc3BhY2VzIGFuZCBsaW5lZmVlZHMgd2lsbCBiZSByZW1vdmVkLgot
ICAgICAgICAiIiIKLSAgICAgICAgc2VsZi50aGVBID0gJ1xuJwotICAgICAgICBzZWxmLl9hY3Rp
b24oMykKLQotICAgICAgICB3aGlsZSBzZWxmLnRoZUEgIT0gJ1wwMDAnOgotICAgICAgICAgICAg
aWYgc2VsZi50aGVBID09ICcgJzoKLSAgICAgICAgICAgICAgICBpZiBpc0FscGhhbnVtKHNlbGYu
dGhlQik6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2FjdGlvbigxKQotICAgICAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2FjdGlvbigyKQotICAgICAgICAg
ICAgZWxpZiBzZWxmLnRoZUEgPT0gJ1xuJzoKLSAgICAgICAgICAgICAgICBpZiBzZWxmLnRoZUIg
aW4gWyd7JywgJ1snLCAnKCcsICcrJywgJy0nXToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5f
YWN0aW9uKDEpCi0gICAgICAgICAgICAgICAgZWxpZiBzZWxmLnRoZUIgPT0gJyAnOgotICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9hY3Rpb24oMykKLSAgICAgICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgICAgICBpZiBpc0FscGhhbnVtKHNlbGYudGhlQik6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9hY3Rpb24oMSkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FjdGlvbigyKQorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBpbnN0cmVhbT1Ob25lLCBvdXRzdHJlYW09Tm9uZSk6CisgICAgICAgIHNlbGYuaW5zID0g
aW5zdHJlYW0KKyAgICAgICAgc2VsZi5vdXRzID0gb3V0c3RyZWFtCisKKyAgICBkZWYgbWluaWZ5
KHNlbGYsIGluc3RyZWFtPU5vbmUsIG91dHN0cmVhbT1Ob25lKToKKyAgICAgICAgaWYgaW5zdHJl
YW0gYW5kIG91dHN0cmVhbToKKyAgICAgICAgICAgIHNlbGYuaW5zLCBzZWxmLm91dHMgPSBpbnN0
cmVhbSwgb3V0c3RyZWFtCisKKyAgICAgICAgc2VsZi5pc19yZXR1cm4gPSBGYWxzZQorICAgICAg
ICBzZWxmLnJldHVybl9idWYgPSAnJworCisgICAgICAgIGRlZiB3cml0ZShjaGFyKToKKyAgICAg
ICAgICAgICMgYWxsIG9mIHRoaXMgaXMgdG8gc3VwcG9ydCBsaXRlcmFsIHJlZ3VsYXIgZXhwcmVz
c2lvbnMuCisgICAgICAgICAgICAjIHNpZ2gKKyAgICAgICAgICAgIGlmIGNoYXIgaW4gJ3JldHVy
bic6CisgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5fYnVmICs9IGNoYXIKKyAgICAgICAgICAg
ICAgICBzZWxmLmlzX3JldHVybiA9IHNlbGYucmV0dXJuX2J1ZiA9PSAncmV0dXJuJworICAgICAg
ICAgICAgc2VsZi5vdXRzLndyaXRlKGNoYXIpCisgICAgICAgICAgICBpZiBzZWxmLmlzX3JldHVy
bjoKKyAgICAgICAgICAgICAgICBzZWxmLnJldHVybl9idWYgPSAnJworCisgICAgICAgIHJlYWQg
PSBzZWxmLmlucy5yZWFkCisKKyAgICAgICAgc3BhY2Vfc3RyaW5ncyA9ICJhYmNkZWZnaGlqa2xt
bm9wcXJzdHV2d3h5eiJcCisgICAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0
NTY3ODlfJFxcIgorICAgICAgICBzdGFydGVycywgZW5kZXJzID0gJ3tbKCstJywgJ31dKSstIlwn
JworICAgICAgICBuZXdsaW5lc3RhcnRfc3RyaW5ncyA9IHN0YXJ0ZXJzICsgc3BhY2Vfc3RyaW5n
cworICAgICAgICBuZXdsaW5lZW5kX3N0cmluZ3MgPSBlbmRlcnMgKyBzcGFjZV9zdHJpbmdzCisg
ICAgICAgIGRvX25ld2xpbmUgPSBGYWxzZQorICAgICAgICBkb19zcGFjZSA9IEZhbHNlCisgICAg
ICAgIGVzY2FwZV9zbGFzaF9jb3VudCA9IDAKKyAgICAgICAgZG9pbmdfc2luZ2xlX2NvbW1lbnQg
PSBGYWxzZQorICAgICAgICBwcmV2aW91c19iZWZvcmVfY29tbWVudCA9ICcnCisgICAgICAgIGRv
aW5nX211bHRpX2NvbW1lbnQgPSBGYWxzZQorICAgICAgICBpbl9yZSA9IEZhbHNlCisgICAgICAg
IGluX3F1b3RlID0gJycKKyAgICAgICAgcXVvdGVfYnVmID0gW10KKworICAgICAgICBwcmV2aW91
cyA9IHJlYWQoMSkKKyAgICAgICAgaWYgcHJldmlvdXMgPT0gJ1xcJzoKKyAgICAgICAgICAgIGVz
Y2FwZV9zbGFzaF9jb3VudCArPSAxCisgICAgICAgIG5leHQxID0gcmVhZCgxKQorICAgICAgICBp
ZiBwcmV2aW91cyA9PSAnLyc6CisgICAgICAgICAgICBpZiBuZXh0MSA9PSAnLyc6CisgICAgICAg
ICAgICAgICAgZG9pbmdfc2luZ2xlX2NvbW1lbnQgPSBUcnVlCisgICAgICAgICAgICBlbGlmIG5l
eHQxID09ICcqJzoKKyAgICAgICAgICAgICAgICBkb2luZ19tdWx0aV9jb21tZW50ID0gVHJ1ZQor
ICAgICAgICAgICAgICAgIHByZXZpb3VzID0gbmV4dDEKKyAgICAgICAgICAgICAgICBuZXh0MSA9
IHJlYWQoMSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi50aGVC
ID09ICcgJzoKLSAgICAgICAgICAgICAgICAgICAgaWYgaXNBbHBoYW51bShzZWxmLnRoZUEpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWN0aW9uKDEpCi0gICAgICAgICAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hY3Rpb24oMykKLSAgICAg
ICAgICAgICAgICBlbGlmIHNlbGYudGhlQiA9PSAnXG4nOgotICAgICAgICAgICAgICAgICAgICBp
ZiBzZWxmLnRoZUEgaW4gWyd9JywgJ10nLCAnKScsICcrJywgJy0nLCAnIicsICdcJyddOgotICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWN0aW9uKDEpCi0gICAgICAgICAgICAgICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBpc0FscGhhbnVtKHNlbGYudGhlQSk6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWN0aW9uKDEpCisgICAgICAgICAg
ICAgICAgd3JpdGUocHJldmlvdXMpCisgICAgICAgIGVsaWYgbm90IHByZXZpb3VzOgorICAgICAg
ICAgICAgcmV0dXJuCisgICAgICAgIGVsaWYgcHJldmlvdXMgPj0gJyEnOgorICAgICAgICAgICAg
aWYgcHJldmlvdXMgaW4gIidcIiI6CisgICAgICAgICAgICAgICAgaW5fcXVvdGUgPSBwcmV2aW91
cworICAgICAgICAgICAgd3JpdGUocHJldmlvdXMpCisgICAgICAgICAgICBwcmV2aW91c19ub25f
c3BhY2UgPSBwcmV2aW91cworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJldmlvdXNfbm9u
X3NwYWNlID0gJyAnCisgICAgICAgIGlmIG5vdCBuZXh0MToKKyAgICAgICAgICAgIHJldHVybgor
CisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBuZXh0MiA9IHJlYWQoMSkKKyAgICAgICAg
ICAgIGlmIG5vdCBuZXh0MjoKKyAgICAgICAgICAgICAgICBsYXN0ID0gbmV4dDEuc3RyaXAoKQor
ICAgICAgICAgICAgICAgIGlmIG5vdCAoZG9pbmdfc2luZ2xlX2NvbW1lbnQgb3IgZG9pbmdfbXVs
dGlfY29tbWVudClcCisgICAgICAgICAgICAgICAgICAgIGFuZCBsYXN0IG5vdCBpbiAoJycsICcv
Jyk6CisgICAgICAgICAgICAgICAgICAgIGlmIGluX3F1b3RlOgorICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGUoJycuam9pbihxdW90ZV9idWYpKQorICAgICAgICAgICAgICAgICAgICB3cml0
ZShsYXN0KQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBkb2luZ19tdWx0
aV9jb21tZW50OgorICAgICAgICAgICAgICAgIGlmIG5leHQxID09ICcqJyBhbmQgbmV4dDIgPT0g
Jy8nOgorICAgICAgICAgICAgICAgICAgICBkb2luZ19tdWx0aV9jb21tZW50ID0gRmFsc2UKKyAg
ICAgICAgICAgICAgICAgICAgbmV4dDIgPSByZWFkKDEpCisgICAgICAgICAgICBlbGlmIGRvaW5n
X3NpbmdsZV9jb21tZW50OgorICAgICAgICAgICAgICAgIGlmIG5leHQxIGluICdcclxuJzoKKyAg
ICAgICAgICAgICAgICAgICAgZG9pbmdfc2luZ2xlX2NvbW1lbnQgPSBGYWxzZQorICAgICAgICAg
ICAgICAgICAgICB3aGlsZSBuZXh0MiBpbiAnXHJcbic6CisgICAgICAgICAgICAgICAgICAgICAg
ICBuZXh0MiA9IHJlYWQoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuZXh0MjoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBp
ZiBwcmV2aW91c19iZWZvcmVfY29tbWVudCBpbiAnKX1dJzoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRvX25ld2xpbmUgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGVsaWYgcHJldmlvdXNf
YmVmb3JlX2NvbW1lbnQgaW4gc3BhY2Vfc3RyaW5nczoKKyAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlKCdcbicpCisgICAgICAgICAgICBlbGlmIGluX3F1b3RlOgorICAgICAgICAgICAgICAg
IHF1b3RlX2J1Zi5hcHBlbmQobmV4dDEpCisKKyAgICAgICAgICAgICAgICBpZiBuZXh0MSA9PSBp
bl9xdW90ZToKKyAgICAgICAgICAgICAgICAgICAgbnVtc2xhc2hlcyA9IDAKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIGMgaW4gcmV2ZXJzZWQocXVvdGVfYnVmWzotMV0pOgorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgYyAhPSAnXFwnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG51bXNsYXNoZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICBpZiBudW1zbGFzaGVz
ICUgMiA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5fcXVvdGUgPSAnJworICAgICAg
ICAgICAgICAgICAgICAgICAgd3JpdGUoJycuam9pbihxdW90ZV9idWYpKQorICAgICAgICAgICAg
ZWxpZiBuZXh0MSBpbiAnXHJcbic6CisgICAgICAgICAgICAgICAgaWYgcHJldmlvdXNfbm9uX3Nw
YWNlIGluIG5ld2xpbmVlbmRfc3RyaW5ncyBcCisgICAgICAgICAgICAgICAgICAgIG9yIHByZXZp
b3VzX25vbl9zcGFjZSA+ICd+JzoKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgMToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIG5leHQyIDwgJyEnOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5leHQyID0gcmVhZCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5v
dCBuZXh0MjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5f
YWN0aW9uKDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbmV4dDIgaW4gbmV3bGlu
ZXN0YXJ0X3N0cmluZ3MgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBuZXh0
MiA+ICd+JyBvciBuZXh0MiA9PSAnLyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRvX25ld2xpbmUgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAg
ICAgICAgICAgIGVsaWYgbmV4dDEgPCAnIScgYW5kIG5vdCBpbl9yZToKKyAgICAgICAgICAgICAg
ICBpZiAocHJldmlvdXNfbm9uX3NwYWNlIGluIHNwYWNlX3N0cmluZ3MgXAorICAgICAgICAgICAg
ICAgICAgICBvciBwcmV2aW91c19ub25fc3BhY2UgPiAnficpIFwKKyAgICAgICAgICAgICAgICAg
ICAgYW5kIChuZXh0MiBpbiBzcGFjZV9zdHJpbmdzIG9yIG5leHQyID4gJ34nKToKKyAgICAgICAg
ICAgICAgICAgICAgZG9fc3BhY2UgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxpZiBwcmV2aW91
c19ub25fc3BhY2UgaW4gJy0rJyBhbmQgbmV4dDIgPT0gcHJldmlvdXNfbm9uX3NwYWNlOgorICAg
ICAgICAgICAgICAgICAgICAjIHByb3RlY3QgYWdhaW5zdCArICsrIG9yIC0gLS0gc2VxdWVuY2Vz
CisgICAgICAgICAgICAgICAgICAgIGRvX3NwYWNlID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVs
aWYgc2VsZi5pc19yZXR1cm4gYW5kIG5leHQyID09ICcvJzoKKyAgICAgICAgICAgICAgICAgICAg
IyByZXR1cm5pbmcgYSByZWdleC4uLgorICAgICAgICAgICAgICAgICAgICB3cml0ZSgnICcpCisg
ICAgICAgICAgICBlbGlmIG5leHQxID09ICcvJzoKKyAgICAgICAgICAgICAgICBpZiBkb19zcGFj
ZToKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoJyAnKQorICAgICAgICAgICAgICAgIGlmIGlu
X3JlOgorICAgICAgICAgICAgICAgICAgICBpZiBwcmV2aW91cyAhPSAnXFwnIG9yIChub3QgZXNj
YXBlX3NsYXNoX2NvdW50ICUgMikgb3IgbmV4dDIgaW4gJ2dpbXknOgorICAgICAgICAgICAgICAg
ICAgICAgICAgaW5fcmUgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICB3cml0ZSgnLycpCisg
ICAgICAgICAgICAgICAgZWxpZiBuZXh0MiA9PSAnLyc6CisgICAgICAgICAgICAgICAgICAgIGRv
aW5nX3NpbmdsZV9jb21tZW50ID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBwcmV2aW91c19i
ZWZvcmVfY29tbWVudCA9IHByZXZpb3VzX25vbl9zcGFjZQorICAgICAgICAgICAgICAgIGVsaWYg
bmV4dDIgPT0gJyonOgorICAgICAgICAgICAgICAgICAgICBkb2luZ19tdWx0aV9jb21tZW50ID0g
VHJ1ZQorICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyA9IG5leHQxCisgICAgICAgICAgICAg
ICAgICAgIG5leHQxID0gbmV4dDIKKyAgICAgICAgICAgICAgICAgICAgbmV4dDIgPSByZWFkKDEp
CiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWN0aW9u
KDEpCi0KLSAgICBkZWYgbWluaWZ5KHNlbGYsIGluc3RyZWFtLCBvdXRzdHJlYW0pOgotICAgICAg
ICBzZWxmLmluc3RyZWFtID0gaW5zdHJlYW0KLSAgICAgICAgc2VsZi5vdXRzdHJlYW0gPSBvdXRz
dHJlYW0KLSAgICAgICAgc2VsZi50aGVBID0gJ1xuJwotICAgICAgICBzZWxmLnRoZUIgPSBOb25l
Ci0gICAgICAgIHNlbGYudGhlTG9va2FoZWFkID0gTm9uZQotCi0gICAgICAgIHNlbGYuX2pzbWlu
KCkKLSAgICAgICAgc2VsZi5pbnN0cmVhbS5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIGlu
X3JlID0gcHJldmlvdXNfbm9uX3NwYWNlIGluICcoLD06Wz8hJnwnIG9yIHNlbGYuaXNfcmV0dXJu
ICAjIGxpdGVyYWwgcmVndWxhciBleHByZXNzaW9uCisgICAgICAgICAgICAgICAgICAgIHdyaXRl
KCcvJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgZG9fc3BhY2U6Cisg
ICAgICAgICAgICAgICAgICAgIGRvX3NwYWNlID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAg
d3JpdGUoJyAnKQorICAgICAgICAgICAgICAgIGlmIGRvX25ld2xpbmU6CisgICAgICAgICAgICAg
ICAgICAgIHdyaXRlKCdcbicpCisgICAgICAgICAgICAgICAgICAgIGRvX25ld2xpbmUgPSBGYWxz
ZQorCisgICAgICAgICAgICAgICAgd3JpdGUobmV4dDEpCisgICAgICAgICAgICAgICAgaWYgbm90
IGluX3JlIGFuZCBuZXh0MSBpbiAiJ1wiIjoKKyAgICAgICAgICAgICAgICAgICAgaW5fcXVvdGUg
PSBuZXh0MQorICAgICAgICAgICAgICAgICAgICBxdW90ZV9idWYgPSBbXQorCisgICAgICAgICAg
ICBwcmV2aW91cyA9IG5leHQxCisgICAgICAgICAgICBuZXh0MSA9IG5leHQyCisKKyAgICAgICAg
ICAgIGlmIHByZXZpb3VzID49ICchJzoKKyAgICAgICAgICAgICAgICBwcmV2aW91c19ub25fc3Bh
Y2UgPSBwcmV2aW91cworCisgICAgICAgICAgICBpZiBwcmV2aW91cyA9PSAnXFwnOgorICAgICAg
ICAgICAgICAgIGVzY2FwZV9zbGFzaF9jb3VudCArPSAxCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIGVzY2FwZV9zbGFzaF9jb3VudCA9IDAKIAogaWYgX19uYW1lX18gPT0gJ19f
bWFpbl9fJzoKLSAgICBpbXBvcnQgc3lzCi0gICAganNtID0gSmF2YXNjcmlwdE1pbmlmeSgpCi0g
ICAganNtLm1pbmlmeShzeXMuc3RkaW4sIHN5cy5zdGRvdXQpCisgICAgbWluaWZpZXIgPSBKYXZh
c2NyaXB0TWluaWZ5KHN5cy5zdGRpbiwgc3lzLnN0ZG91dCkKKyAgICBtaW5pZmllci5taW5pZnko
KQorICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuJykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4
IGViNDBlNGMuLmUwM2QxN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMx
IEBACisyMDE0LTA1LTA3ICBBbGJlcnRvIEdhcmNpYSAgPGJlcnRvQGlnYWxpYS5jb20+CisKKyAg
ICAgICAganNtaW4ucHkgbGljZW5zZSBoZWFkZXIgY29uZnVzaW5nLCBtZW50aW9ucyBub24tZnJl
ZSBsaWNlbnNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjM2NjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBQdWxsIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIGZyb20gdXBzdHJlYW0sIHdoaWNoIGhhcyBh
IGNsZWFyCisgICAgICAgIGxpY2Vuc2UuCisKKyAgICAgICAgKiBTY3JpcHRzL2pzbWluLnB5Ogor
ICAgICAgICAoanNtaW4pOgorICAgICAgICAoSmF2YXNjcmlwdE1pbmlmeSk6CisgICAgICAgIChK
YXZhc2NyaXB0TWluaWZ5Ll9faW5pdF9fKToKKyAgICAgICAgKEphdmFzY3JpcHRNaW5pZnkubWlu
aWZ5KToKKyAgICAgICAgKEphdmFzY3JpcHRNaW5pZnkubWluaWZ5LndyaXRlKToKKyAgICAgICAg
KGlzQWxwaGFudW0pOiBEZWxldGVkLgorICAgICAgICAoVW50ZXJtaW5hdGVkQ29tbWVudCk6IERl
bGV0ZWQuCisgICAgICAgIChVbnRlcm1pbmF0ZWRTdHJpbmdMaXRlcmFsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFVudGVybWluYXRlZFJlZ3VsYXJFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KEphdmFzY3JpcHRNaW5pZnkuX291dEEpOiBEZWxldGVkLgorICAgICAgICAoSmF2YXNjcmlwdE1p
bmlmeS5fb3V0Qik6IERlbGV0ZWQuCisgICAgICAgIChKYXZhc2NyaXB0TWluaWZ5Ll9nZXQpOiBE
ZWxldGVkLgorICAgICAgICAoSmF2YXNjcmlwdE1pbmlmeS5fcGVlayk6IERlbGV0ZWQuCisgICAg
ICAgIChKYXZhc2NyaXB0TWluaWZ5Ll9uZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEphdmFzY3Jp
cHRNaW5pZnkuX2FjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKYXZhc2NyaXB0TWluaWZ5Ll9q
c21pbik6IERlbGV0ZWQuCisKIDIwMTQtMDUtMDYgIFJhZHUgU3RhdmlsYSAgPHN0YXZpbGFAYWRv
YmUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtDU1MgUmVnaW9uc10gQWRkIHRoZSBy
ZWdpb25PdmVyc2V0Q2hhbmdlIGV2ZW50IHRvIHRoZSBpT1MgNy4wIFdlYkluc3BlY3RvciBVSQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvanNtaW4ucHkgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvU2NyaXB0cy9qc21pbi5weQppbmRleCAyMzM5ZjdkLi44M2QyYTUw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvU2NyaXB0cy9qc21pbi5weQorKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvU2NyaXB0cy9qc21pbi5weQpAQCAtMSwyMTggKzEsMjM4
IEBACi0jIS91c3IvYmluL3B5dGhvbgotCiAjIFRoaXMgY29kZSBpcyBvcmlnaW5hbCBmcm9tIGpz
bWluIGJ5IERvdWdsYXMgQ3JvY2tmb3JkLCBpdCB3YXMgdHJhbnNsYXRlZCB0bwotIyBQeXRob24g
YnkgQmFydWNoIEV2ZW4uIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCB0aGUgZm9sbG93aW5nIGNvcHly
aWdodCBhbmQKLSMgbGljZW5zZS4KLSMKLSMgLyoganNtaW4uYwotIyAgICAyMDA3LTA1LTIyCisj
IFB5dGhvbiBieSBCYXJ1Y2ggRXZlbi4gSXQgd2FzIHJld3JpdHRlbiBieSBEYXZlIFN0Lkdlcm1h
aW4gZm9yIHNwZWVkLgogIwotIyBDb3B5cmlnaHQgKGMpIDIwMDIgRG91Z2xhcyBDcm9ja2ZvcmQg
ICh3d3cuY3JvY2tmb3JkLmNvbSkKKyMgVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAjCi0jIFBlcm1p
c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i
dGFpbmluZyBhIGNvcHkgb2YKLSMgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu
dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KLSMgdGhlIFNvZnR3YXJl
IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJp
Z2h0cyB0bwotIyB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs
IHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcwotIyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0
byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8K
LSMgc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorIyBDb3B5cmlnaHQg
KGMpIDIwMTMgRGF2ZSBTdC5HZXJtYWluCiAjCi0jIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl
IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAotIyBj
b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorIyBQZXJtaXNz
aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh
aW5pbmcgYSBjb3B5CisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh
dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisjIGluIHRoZSBTb2Z0d2FyZSB3
aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdo
dHMKKyMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz
dWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g
cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRv
IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKICMKLSMgVGhlIFNvZnR3
YXJlIHNoYWxsIGJlIHVzZWQgZm9yIEdvb2QsIG5vdCBFdmlsLgorIyBUaGUgYWJvdmUgY29weXJp
Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBp
bgorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4K
ICMKICMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg
T0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKICMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN
SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCiAjIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRQogIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z
IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCiAjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ
T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0jIE9VVCBP
RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIg
REVBTElOR1MgSU4gVEhFCi0jIFNPRlRXQVJFLgotIyAqLworIyBPVVQgT0YgT1IgSU4gQ09OTkVD
VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisj
IFRIRSBTT0ZUV0FSRS4KIAotZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KIAotZGVmIGpz
bWluKGpzKToKLSAgICBpbnMgPSBTdHJpbmdJTyhqcykKLSAgICBvdXRzID0gU3RyaW5nSU8oKQot
ICAgIEphdmFzY3JpcHRNaW5pZnkoKS5taW5pZnkoaW5zLCBvdXRzKQotICAgIHN0ciA9IG91dHMu
Z2V0dmFsdWUoKQotICAgIGlmIGxlbihzdHIpID4gMCBhbmQgc3RyWzBdID09ICdcbic6Ci0gICAg
ICAgIHN0ciA9IHN0clsxOl0KLSAgICByZXR1cm4gc3RyCi0KLWRlZiBpc0FscGhhbnVtKGMpOgot
ICAgICIiInJldHVybiB0cnVlIGlmIHRoZSBjaGFyYWN0ZXIgaXMgYSBsZXR0ZXIsIGRpZ2l0LCB1
bmRlcnNjb3JlLAotICAgICAgICAgICBkb2xsYXIgc2lnbiwgb3Igbm9uLUFTQ0lJIGNoYXJhY3Rl
ci4KLSAgICAiIiIKLSAgICByZXR1cm4gKChjID49ICdhJyBhbmQgYyA8PSAneicpIG9yIChjID49
ICcwJyBhbmQgYyA8PSAnOScpIG9yCi0gICAgICAgICAgICAoYyA+PSAnQScgYW5kIGMgPD0gJ1on
KSBvciBjID09ICdfJyBvciBjID09ICckJyBvciBjID09ICdcXCcgb3IgKGMgaXMgbm90IE5vbmUg
YW5kIG9yZChjKSA+IDEyNikpOworaW1wb3J0IHN5cworaXNfMyA9IHN5cy52ZXJzaW9uX2luZm8g
Pj0gKDMsIDApCitpZiBpc18zOgorICAgIGltcG9ydCBpbworZWxzZToKKyAgICBpbXBvcnQgU3Ry
aW5nSU8KKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBjU3RyaW5nSU8KKyAgICBleGNlcHQgSW1w
b3J0RXJyb3I6CisgICAgICAgIGNTdHJpbmdJTyA9IE5vbmUKKwogCi1jbGFzcyBVbnRlcm1pbmF0
ZWRDb21tZW50KEV4Y2VwdGlvbik6Ci0gICAgcGFzcworX19hbGxfXyA9IFsnanNtaW4nLCAnSmF2
YXNjcmlwdE1pbmlmeSddCitfX3ZlcnNpb25fXyA9ICcyLjAuOScKIAotY2xhc3MgVW50ZXJtaW5h
dGVkU3RyaW5nTGl0ZXJhbChFeGNlcHRpb24pOgotICAgIHBhc3MKIAotY2xhc3MgVW50ZXJtaW5h
dGVkUmVndWxhckV4cHJlc3Npb24oRXhjZXB0aW9uKToKLSAgICBwYXNzCitkZWYganNtaW4oanMp
OgorICAgICIiIgorICAgIHJldHVybnMgYSBtaW5pZmllZCB2ZXJzaW9uIG9mIHRoZSBqYXZhc2Ny
aXB0IHN0cmluZworICAgICIiIgorICAgIGlmIG5vdCBpc18zOgorICAgICAgICBpZiBjU3RyaW5n
SU8gYW5kIG5vdCBpc2luc3RhbmNlKGpzLCB1bmljb2RlKToKKyAgICAgICAgICAgICMgc3RyaW5n
cyBjYW4gdXNlIGNTdHJpbmdJTyBmb3IgYSAzeCBwZXJmb3JtYW5jZQorICAgICAgICAgICAgIyBp
bXByb3ZlbWVudCwgYnV0IHVuaWNvZGUgKGluIHB5dGhvbjIpIGNhbm5vdAorICAgICAgICAgICAg
a2xhc3MgPSBjU3RyaW5nSU8uU3RyaW5nSU8KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGts
YXNzID0gU3RyaW5nSU8uU3RyaW5nSU8KKyAgICBlbHNlOgorICAgICAgICBrbGFzcyA9IGlvLlN0
cmluZ0lPCisgICAgaW5zID0ga2xhc3MoanMpCisgICAgb3V0cyA9IGtsYXNzKCkKKyAgICBKYXZh
c2NyaXB0TWluaWZ5KGlucywgb3V0cykubWluaWZ5KCkKKyAgICByZXR1cm4gb3V0cy5nZXR2YWx1
ZSgpCisKIAogY2xhc3MgSmF2YXNjcmlwdE1pbmlmeShvYmplY3QpOgorICAgICIiIgorICAgIE1p
bmlmeSBhbiBpbnB1dCBzdHJlYW0gb2YgamF2YXNjcmlwdCwgd3JpdGluZworICAgIHRvIGFuIG91
dHB1dCBzdHJlYW0KKyAgICAiIiIKIAotICAgIGRlZiBfb3V0QShzZWxmKToKLSAgICAgICAgc2Vs
Zi5vdXRzdHJlYW0ud3JpdGUoc2VsZi50aGVBKQotICAgIGRlZiBfb3V0QihzZWxmKToKLSAgICAg
ICAgc2VsZi5vdXRzdHJlYW0ud3JpdGUoc2VsZi50aGVCKQotCi0gICAgZGVmIF9nZXQoc2VsZik6
Ci0gICAgICAgICIiInJldHVybiB0aGUgbmV4dCBjaGFyYWN0ZXIgZnJvbSBzdGRpbi4gV2F0Y2gg
b3V0IGZvciBsb29rYWhlYWQuIElmCi0gICAgICAgICAgIHRoZSBjaGFyYWN0ZXIgaXMgYSBjb250
cm9sIGNoYXJhY3RlciwgdHJhbnNsYXRlIGl0IHRvIGEgc3BhY2Ugb3IKLSAgICAgICAgICAgbGlu
ZWZlZWQuCi0gICAgICAgICIiIgotICAgICAgICBjID0gc2VsZi50aGVMb29rYWhlYWQKLSAgICAg
ICAgc2VsZi50aGVMb29rYWhlYWQgPSBOb25lCi0gICAgICAgIGlmIGMgPT0gTm9uZToKLSAgICAg
ICAgICAgIGMgPSBzZWxmLmluc3RyZWFtLnJlYWQoMSkKLSAgICAgICAgaWYgYyA+PSAnICcgb3Ig
YyA9PSAnXG4nOgotICAgICAgICAgICAgcmV0dXJuIGMKLSAgICAgICAgaWYgYyA9PSAnJzogIyBF
T0YKLSAgICAgICAgICAgIHJldHVybiAnXDAwMCcKLSAgICAgICAgaWYgYyA9PSAnXHInOgotICAg
ICAgICAgICAgcmV0dXJuICdcbicKLSAgICAgICAgcmV0dXJuICcgJwotCi0gICAgZGVmIF9wZWVr
KHNlbGYpOgotICAgICAgICBzZWxmLnRoZUxvb2thaGVhZCA9IHNlbGYuX2dldCgpCi0gICAgICAg
IHJldHVybiBzZWxmLnRoZUxvb2thaGVhZAotCi0gICAgZGVmIF9uZXh0KHNlbGYpOgotICAgICAg
ICAiIiJnZXQgdGhlIG5leHQgY2hhcmFjdGVyLCBleGNsdWRpbmcgY29tbWVudHMuIHBlZWsoKSBp
cyB1c2VkIHRvIHNlZQotICAgICAgICAgICBpZiBhbiB1bmVzY2FwZWQgJy8nIGlzIGZvbGxvd2Vk
IGJ5IGEgJy8nIG9yICcqJy4KLSAgICAgICAgIiIiCi0gICAgICAgIGMgPSBzZWxmLl9nZXQoKQot
ICAgICAgICBpZiBjID09ICcvJyBhbmQgc2VsZi50aGVBICE9ICdcXCc6Ci0gICAgICAgICAgICBw
ID0gc2VsZi5fcGVlaygpCi0gICAgICAgICAgICBpZiBwID09ICcvJzoKLSAgICAgICAgICAgICAg
ICBjID0gc2VsZi5fZ2V0KCkKLSAgICAgICAgICAgICAgICB3aGlsZSBjID4gJ1xuJzoKLSAgICAg
ICAgICAgICAgICAgICAgYyA9IHNlbGYuX2dldCgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGMK
LSAgICAgICAgICAgIGlmIHAgPT0gJyonOgotICAgICAgICAgICAgICAgIGMgPSBzZWxmLl9nZXQo
KQotICAgICAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAgICAgIGMgPSBzZWxm
Ll9nZXQoKQotICAgICAgICAgICAgICAgICAgICBpZiBjID09ICcqJzoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIHNlbGYuX3BlZWsoKSA9PSAnLyc6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fZ2V0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyAn
Ci0gICAgICAgICAgICAgICAgICAgIGlmIGMgPT0gJ1wwMDAnOgotICAgICAgICAgICAgICAgICAg
ICAgICAgcmFpc2UgVW50ZXJtaW5hdGVkQ29tbWVudCgpCi0KLSAgICAgICAgcmV0dXJuIGMKLQot
ICAgIGRlZiBfYWN0aW9uKHNlbGYsIGFjdGlvbik6Ci0gICAgICAgICIiImRvIHNvbWV0aGluZyEg
V2hhdCB5b3UgZG8gaXMgZGV0ZXJtaW5lZCBieSB0aGUgYXJndW1lbnQ6Ci0gICAgICAgICAgIDEg
ICBPdXRwdXQgQS4gQ29weSBCIHRvIEEuIEdldCB0aGUgbmV4dCBCLgotICAgICAgICAgICAyICAg
Q29weSBCIHRvIEEuIEdldCB0aGUgbmV4dCBCLiAoRGVsZXRlIEEpLgotICAgICAgICAgICAzICAg
R2V0IHRoZSBuZXh0IEIuIChEZWxldGUgQikuCi0gICAgICAgICAgIGFjdGlvbiB0cmVhdHMgYSBz
dHJpbmcgYXMgYSBzaW5nbGUgY2hhcmFjdGVyLiBXb3chCi0gICAgICAgICAgIGFjdGlvbiByZWNv
Z25pemVzIGEgcmVndWxhciBleHByZXNzaW9uIGlmIGl0IGlzIHByZWNlZGVkIGJ5ICggb3IgLCBv
ciA9LgotICAgICAgICAiIiIKLSAgICAgICAgaWYgYWN0aW9uIDw9IDE6Ci0gICAgICAgICAgICBz
ZWxmLl9vdXRBKCkKLQotICAgICAgICBpZiBhY3Rpb24gPD0gMjoKLSAgICAgICAgICAgIHNlbGYu
dGhlQSA9IHNlbGYudGhlQgotICAgICAgICAgICAgaWYgc2VsZi50aGVBID09ICInIiBvciBzZWxm
LnRoZUEgPT0gJyInOgotICAgICAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAg
ICAgIHNlbGYuX291dEEoKQotICAgICAgICAgICAgICAgICAgICBzZWxmLnRoZUEgPSBzZWxmLl9n
ZXQoKQotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnRoZUEgPT0gc2VsZi50aGVCOgotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi50
aGVBIDw9ICdcbic6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBVbnRlcm1pbmF0ZWRT
dHJpbmdMaXRlcmFsKCkKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi50aGVBID09ICdcXCc6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vdXRBKCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYudGhlQSA9IHNlbGYuX2dldCgpCi0KLQotICAgICAgICBpZiBhY3Rpb24gPD0g
MzoKLSAgICAgICAgICAgIHNlbGYudGhlQiA9IHNlbGYuX25leHQoKQotICAgICAgICAgICAgaWYg
c2VsZi50aGVCID09ICcvJyBhbmQgKHNlbGYudGhlQSA9PSAnKCcgb3Igc2VsZi50aGVBID09ICcs
JyBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGhlQSA9PSAn
PScgb3Igc2VsZi50aGVBID09ICc6JyBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYudGhlQSA9PSAnWycgb3Igc2VsZi50aGVBID09ICc/JyBvcgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGhlQSA9PSAnIScgb3Igc2VsZi50aGVB
ID09ICcmJyBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGhl
QSA9PSAnfCcgb3Igc2VsZi50aGVBID09ICc7JyBvcgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYudGhlQSA9PSAneycgb3Igc2VsZi50aGVBID09ICd9JyBvcgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGhlQSA9PSAnXG4nKToKLSAg
ICAgICAgICAgICAgICBzZWxmLl9vdXRBKCkKLSAgICAgICAgICAgICAgICBzZWxmLl9vdXRCKCkK
LSAgICAgICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnRoZUEg
PSBzZWxmLl9nZXQoKQotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnRoZUEgPT0gJy8nOgot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBz
ZWxmLnRoZUEgPT0gJ1xcJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX291dEEoKQot
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aGVBID0gc2VsZi5fZ2V0KCkKLSAgICAgICAg
ICAgICAgICAgICAgZWxpZiBzZWxmLnRoZUEgPD0gJ1xuJzoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJhaXNlIFVudGVybWluYXRlZFJlZ3VsYXJFeHByZXNzaW9uKCkKLSAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fb3V0QSgpCi0gICAgICAgICAgICAgICAgc2VsZi50aGVCID0gc2VsZi5fbmV4
dCgpCi0KLQotICAgIGRlZiBfanNtaW4oc2VsZik6Ci0gICAgICAgICIiIkNvcHkgdGhlIGlucHV0
IHRvIHRoZSBvdXRwdXQsIGRlbGV0aW5nIHRoZSBjaGFyYWN0ZXJzIHdoaWNoIGFyZQotICAgICAg
ICAgICBpbnNpZ25pZmljYW50IHRvIEphdmFTY3JpcHQuIENvbW1lbnRzIHdpbGwgYmUgcmVtb3Zl
ZC4gVGFicyB3aWxsIGJlCi0gICAgICAgICAgIHJlcGxhY2VkIHdpdGggc3BhY2VzLiBDYXJyaWFn
ZSByZXR1cm5zIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBsaW5lZmVlZHMuCi0gICAgICAgICAgIE1v
c3Qgc3BhY2VzIGFuZCBsaW5lZmVlZHMgd2lsbCBiZSByZW1vdmVkLgotICAgICAgICAiIiIKLSAg
ICAgICAgc2VsZi50aGVBID0gJ1xuJwotICAgICAgICBzZWxmLl9hY3Rpb24oMykKLQotICAgICAg
ICB3aGlsZSBzZWxmLnRoZUEgIT0gJ1wwMDAnOgotICAgICAgICAgICAgaWYgc2VsZi50aGVBID09
ICcgJzoKLSAgICAgICAgICAgICAgICBpZiBpc0FscGhhbnVtKHNlbGYudGhlQik6Ci0gICAgICAg
ICAgICAgICAgICAgIHNlbGYuX2FjdGlvbigxKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICAgICAgICAgIHNlbGYuX2FjdGlvbigyKQotICAgICAgICAgICAgZWxpZiBzZWxmLnRo
ZUEgPT0gJ1xuJzoKLSAgICAgICAgICAgICAgICBpZiBzZWxmLnRoZUIgaW4gWyd7JywgJ1snLCAn
KCcsICcrJywgJy0nXToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWN0aW9uKDEpCi0gICAg
ICAgICAgICAgICAgZWxpZiBzZWxmLnRoZUIgPT0gJyAnOgotICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9hY3Rpb24oMykKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAg
ICBpZiBpc0FscGhhbnVtKHNlbGYudGhlQik6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9hY3Rpb24oMSkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX2FjdGlvbigyKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbnN0cmVhbT1O
b25lLCBvdXRzdHJlYW09Tm9uZSk6CisgICAgICAgIHNlbGYuaW5zID0gaW5zdHJlYW0KKyAgICAg
ICAgc2VsZi5vdXRzID0gb3V0c3RyZWFtCisKKyAgICBkZWYgbWluaWZ5KHNlbGYsIGluc3RyZWFt
PU5vbmUsIG91dHN0cmVhbT1Ob25lKToKKyAgICAgICAgaWYgaW5zdHJlYW0gYW5kIG91dHN0cmVh
bToKKyAgICAgICAgICAgIHNlbGYuaW5zLCBzZWxmLm91dHMgPSBpbnN0cmVhbSwgb3V0c3RyZWFt
CisKKyAgICAgICAgc2VsZi5pc19yZXR1cm4gPSBGYWxzZQorICAgICAgICBzZWxmLnJldHVybl9i
dWYgPSAnJworCisgICAgICAgIGRlZiB3cml0ZShjaGFyKToKKyAgICAgICAgICAgICMgYWxsIG9m
IHRoaXMgaXMgdG8gc3VwcG9ydCBsaXRlcmFsIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCisgICAgICAg
ICAgICAjIHNpZ2gKKyAgICAgICAgICAgIGlmIGNoYXIgaW4gJ3JldHVybic6CisgICAgICAgICAg
ICAgICAgc2VsZi5yZXR1cm5fYnVmICs9IGNoYXIKKyAgICAgICAgICAgICAgICBzZWxmLmlzX3Jl
dHVybiA9IHNlbGYucmV0dXJuX2J1ZiA9PSAncmV0dXJuJworICAgICAgICAgICAgc2VsZi5vdXRz
LndyaXRlKGNoYXIpCisgICAgICAgICAgICBpZiBzZWxmLmlzX3JldHVybjoKKyAgICAgICAgICAg
ICAgICBzZWxmLnJldHVybl9idWYgPSAnJworCisgICAgICAgIHJlYWQgPSBzZWxmLmlucy5yZWFk
CisKKyAgICAgICAgc3BhY2Vfc3RyaW5ncyA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiJc
CisgICAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NTY3ODlfJFxcIgorICAg
ICAgICBzdGFydGVycywgZW5kZXJzID0gJ3tbKCstJywgJ31dKSstIlwnJworICAgICAgICBuZXds
aW5lc3RhcnRfc3RyaW5ncyA9IHN0YXJ0ZXJzICsgc3BhY2Vfc3RyaW5ncworICAgICAgICBuZXds
aW5lZW5kX3N0cmluZ3MgPSBlbmRlcnMgKyBzcGFjZV9zdHJpbmdzCisgICAgICAgIGRvX25ld2xp
bmUgPSBGYWxzZQorICAgICAgICBkb19zcGFjZSA9IEZhbHNlCisgICAgICAgIGVzY2FwZV9zbGFz
aF9jb3VudCA9IDAKKyAgICAgICAgZG9pbmdfc2luZ2xlX2NvbW1lbnQgPSBGYWxzZQorICAgICAg
ICBwcmV2aW91c19iZWZvcmVfY29tbWVudCA9ICcnCisgICAgICAgIGRvaW5nX211bHRpX2NvbW1l
bnQgPSBGYWxzZQorICAgICAgICBpbl9yZSA9IEZhbHNlCisgICAgICAgIGluX3F1b3RlID0gJycK
KyAgICAgICAgcXVvdGVfYnVmID0gW10KKworICAgICAgICBwcmV2aW91cyA9IHJlYWQoMSkKKyAg
ICAgICAgaWYgcHJldmlvdXMgPT0gJ1xcJzoKKyAgICAgICAgICAgIGVzY2FwZV9zbGFzaF9jb3Vu
dCArPSAxCisgICAgICAgIG5leHQxID0gcmVhZCgxKQorICAgICAgICBpZiBwcmV2aW91cyA9PSAn
Lyc6CisgICAgICAgICAgICBpZiBuZXh0MSA9PSAnLyc6CisgICAgICAgICAgICAgICAgZG9pbmdf
c2luZ2xlX2NvbW1lbnQgPSBUcnVlCisgICAgICAgICAgICBlbGlmIG5leHQxID09ICcqJzoKKyAg
ICAgICAgICAgICAgICBkb2luZ19tdWx0aV9jb21tZW50ID0gVHJ1ZQorICAgICAgICAgICAgICAg
IHByZXZpb3VzID0gbmV4dDEKKyAgICAgICAgICAgICAgICBuZXh0MSA9IHJlYWQoMSkKICAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi50aGVCID09ICcgJzoKLSAgICAg
ICAgICAgICAgICAgICAgaWYgaXNBbHBoYW51bShzZWxmLnRoZUEpOgotICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fYWN0aW9uKDEpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9hY3Rpb24oMykKLSAgICAgICAgICAgICAgICBlbGlm
IHNlbGYudGhlQiA9PSAnXG4nOgotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnRoZUEgaW4g
Wyd9JywgJ10nLCAnKScsICcrJywgJy0nLCAnIicsICdcJyddOgotICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fYWN0aW9uKDEpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiBpc0FscGhhbnVtKHNlbGYudGhlQSk6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fYWN0aW9uKDEpCisgICAgICAgICAgICAgICAgd3JpdGUocHJl
dmlvdXMpCisgICAgICAgIGVsaWYgbm90IHByZXZpb3VzOgorICAgICAgICAgICAgcmV0dXJuCisg
ICAgICAgIGVsaWYgcHJldmlvdXMgPj0gJyEnOgorICAgICAgICAgICAgaWYgcHJldmlvdXMgaW4g
IidcIiI6CisgICAgICAgICAgICAgICAgaW5fcXVvdGUgPSBwcmV2aW91cworICAgICAgICAgICAg
d3JpdGUocHJldmlvdXMpCisgICAgICAgICAgICBwcmV2aW91c19ub25fc3BhY2UgPSBwcmV2aW91
cworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJldmlvdXNfbm9uX3NwYWNlID0gJyAnCisg
ICAgICAgIGlmIG5vdCBuZXh0MToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHdoaWxl
IDE6CisgICAgICAgICAgICBuZXh0MiA9IHJlYWQoMSkKKyAgICAgICAgICAgIGlmIG5vdCBuZXh0
MjoKKyAgICAgICAgICAgICAgICBsYXN0ID0gbmV4dDEuc3RyaXAoKQorICAgICAgICAgICAgICAg
IGlmIG5vdCAoZG9pbmdfc2luZ2xlX2NvbW1lbnQgb3IgZG9pbmdfbXVsdGlfY29tbWVudClcCisg
ICAgICAgICAgICAgICAgICAgIGFuZCBsYXN0IG5vdCBpbiAoJycsICcvJyk6CisgICAgICAgICAg
ICAgICAgICAgIGlmIGluX3F1b3RlOgorICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJycu
am9pbihxdW90ZV9idWYpKQorICAgICAgICAgICAgICAgICAgICB3cml0ZShsYXN0KQorICAgICAg
ICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBkb2luZ19tdWx0aV9jb21tZW50OgorICAg
ICAgICAgICAgICAgIGlmIG5leHQxID09ICcqJyBhbmQgbmV4dDIgPT0gJy8nOgorICAgICAgICAg
ICAgICAgICAgICBkb2luZ19tdWx0aV9jb21tZW50ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAg
ICAgbmV4dDIgPSByZWFkKDEpCisgICAgICAgICAgICBlbGlmIGRvaW5nX3NpbmdsZV9jb21tZW50
OgorICAgICAgICAgICAgICAgIGlmIG5leHQxIGluICdcclxuJzoKKyAgICAgICAgICAgICAgICAg
ICAgZG9pbmdfc2luZ2xlX2NvbW1lbnQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICB3aGls
ZSBuZXh0MiBpbiAnXHJcbic6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0MiA9IHJlYWQo
MSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuZXh0MjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBpZiBwcmV2aW91c19iZWZv
cmVfY29tbWVudCBpbiAnKX1dJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvX25ld2xpbmUg
PSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGVsaWYgcHJldmlvdXNfYmVmb3JlX2NvbW1lbnQg
aW4gc3BhY2Vfc3RyaW5nczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCdcbicpCisg
ICAgICAgICAgICBlbGlmIGluX3F1b3RlOgorICAgICAgICAgICAgICAgIHF1b3RlX2J1Zi5hcHBl
bmQobmV4dDEpCisKKyAgICAgICAgICAgICAgICBpZiBuZXh0MSA9PSBpbl9xdW90ZToKKyAgICAg
ICAgICAgICAgICAgICAgbnVtc2xhc2hlcyA9IDAKKyAgICAgICAgICAgICAgICAgICAgZm9yIGMg
aW4gcmV2ZXJzZWQocXVvdGVfYnVmWzotMV0pOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
YyAhPSAnXFwnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bXNsYXNo
ZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICBpZiBudW1zbGFzaGVzICUgMiA9PSAwOgorICAg
ICAgICAgICAgICAgICAgICAgICAgaW5fcXVvdGUgPSAnJworICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGUoJycuam9pbihxdW90ZV9idWYpKQorICAgICAgICAgICAgZWxpZiBuZXh0MSBpbiAn
XHJcbic6CisgICAgICAgICAgICAgICAgaWYgcHJldmlvdXNfbm9uX3NwYWNlIGluIG5ld2xpbmVl
bmRfc3RyaW5ncyBcCisgICAgICAgICAgICAgICAgICAgIG9yIHByZXZpb3VzX25vbl9zcGFjZSA+
ICd+JzoKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIG5leHQyIDwgJyEnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQyID0g
cmVhZCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuZXh0MjoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWN0aW9uKDMpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgbmV4dDIgaW4gbmV3bGluZXN0YXJ0X3N0cmluZ3Mg
XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBuZXh0MiA+ICd+JyBvciBuZXh0
MiA9PSAnLyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX25ld2xpbmUgPSBU
cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsaWYg
bmV4dDEgPCAnIScgYW5kIG5vdCBpbl9yZToKKyAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNf
bm9uX3NwYWNlIGluIHNwYWNlX3N0cmluZ3MgXAorICAgICAgICAgICAgICAgICAgICBvciBwcmV2
aW91c19ub25fc3BhY2UgPiAnficpIFwKKyAgICAgICAgICAgICAgICAgICAgYW5kIChuZXh0MiBp
biBzcGFjZV9zdHJpbmdzIG9yIG5leHQyID4gJ34nKToKKyAgICAgICAgICAgICAgICAgICAgZG9f
c3BhY2UgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxpZiBwcmV2aW91c19ub25fc3BhY2UgaW4g
Jy0rJyBhbmQgbmV4dDIgPT0gcHJldmlvdXNfbm9uX3NwYWNlOgorICAgICAgICAgICAgICAgICAg
ICAjIHByb3RlY3QgYWdhaW5zdCArICsrIG9yIC0gLS0gc2VxdWVuY2VzCisgICAgICAgICAgICAg
ICAgICAgIGRvX3NwYWNlID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5pc19yZXR1
cm4gYW5kIG5leHQyID09ICcvJzoKKyAgICAgICAgICAgICAgICAgICAgIyByZXR1cm5pbmcgYSBy
ZWdleC4uLgorICAgICAgICAgICAgICAgICAgICB3cml0ZSgnICcpCisgICAgICAgICAgICBlbGlm
IG5leHQxID09ICcvJzoKKyAgICAgICAgICAgICAgICBpZiBkb19zcGFjZToKKyAgICAgICAgICAg
ICAgICAgICAgd3JpdGUoJyAnKQorICAgICAgICAgICAgICAgIGlmIGluX3JlOgorICAgICAgICAg
ICAgICAgICAgICBpZiBwcmV2aW91cyAhPSAnXFwnIG9yIChub3QgZXNjYXBlX3NsYXNoX2NvdW50
ICUgMikgb3IgbmV4dDIgaW4gJ2dpbXknOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5fcmUg
PSBGYWxzZQorICAgICAgICAgICAgICAgICAgICB3cml0ZSgnLycpCisgICAgICAgICAgICAgICAg
ZWxpZiBuZXh0MiA9PSAnLyc6CisgICAgICAgICAgICAgICAgICAgIGRvaW5nX3NpbmdsZV9jb21t
ZW50ID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBwcmV2aW91c19iZWZvcmVfY29tbWVudCA9
IHByZXZpb3VzX25vbl9zcGFjZQorICAgICAgICAgICAgICAgIGVsaWYgbmV4dDIgPT0gJyonOgor
ICAgICAgICAgICAgICAgICAgICBkb2luZ19tdWx0aV9jb21tZW50ID0gVHJ1ZQorICAgICAgICAg
ICAgICAgICAgICBwcmV2aW91cyA9IG5leHQxCisgICAgICAgICAgICAgICAgICAgIG5leHQxID0g
bmV4dDIKKyAgICAgICAgICAgICAgICAgICAgbmV4dDIgPSByZWFkKDEpCiAgICAgICAgICAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWN0aW9uKDEpCi0KLSAgICBkZWYg
bWluaWZ5KHNlbGYsIGluc3RyZWFtLCBvdXRzdHJlYW0pOgotICAgICAgICBzZWxmLmluc3RyZWFt
ID0gaW5zdHJlYW0KLSAgICAgICAgc2VsZi5vdXRzdHJlYW0gPSBvdXRzdHJlYW0KLSAgICAgICAg
c2VsZi50aGVBID0gJ1xuJwotICAgICAgICBzZWxmLnRoZUIgPSBOb25lCi0gICAgICAgIHNlbGYu
dGhlTG9va2FoZWFkID0gTm9uZQotCi0gICAgICAgIHNlbGYuX2pzbWluKCkKLSAgICAgICAgc2Vs
Zi5pbnN0cmVhbS5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIGluX3JlID0gcHJldmlvdXNf
bm9uX3NwYWNlIGluICcoLD06Wz8hJnwnIG9yIHNlbGYuaXNfcmV0dXJuICAjIGxpdGVyYWwgcmVn
dWxhciBleHByZXNzaW9uCisgICAgICAgICAgICAgICAgICAgIHdyaXRlKCcvJykKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgZG9fc3BhY2U6CisgICAgICAgICAgICAgICAg
ICAgIGRvX3NwYWNlID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoJyAnKQorICAg
ICAgICAgICAgICAgIGlmIGRvX25ld2xpbmU6CisgICAgICAgICAgICAgICAgICAgIHdyaXRlKCdc
bicpCisgICAgICAgICAgICAgICAgICAgIGRvX25ld2xpbmUgPSBGYWxzZQorCisgICAgICAgICAg
ICAgICAgd3JpdGUobmV4dDEpCisgICAgICAgICAgICAgICAgaWYgbm90IGluX3JlIGFuZCBuZXh0
MSBpbiAiJ1wiIjoKKyAgICAgICAgICAgICAgICAgICAgaW5fcXVvdGUgPSBuZXh0MQorICAgICAg
ICAgICAgICAgICAgICBxdW90ZV9idWYgPSBbXQorCisgICAgICAgICAgICBwcmV2aW91cyA9IG5l
eHQxCisgICAgICAgICAgICBuZXh0MSA9IG5leHQyCisKKyAgICAgICAgICAgIGlmIHByZXZpb3Vz
ID49ICchJzoKKyAgICAgICAgICAgICAgICBwcmV2aW91c19ub25fc3BhY2UgPSBwcmV2aW91cwor
CisgICAgICAgICAgICBpZiBwcmV2aW91cyA9PSAnXFwnOgorICAgICAgICAgICAgICAgIGVzY2Fw
ZV9zbGFzaF9jb3VudCArPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVz
Y2FwZV9zbGFzaF9jb3VudCA9IDAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBp
bXBvcnQgc3lzCi0gICAganNtID0gSmF2YXNjcmlwdE1pbmlmeSgpCi0gICAganNtLm1pbmlmeShz
eXMuc3RkaW4sIHN5cy5zdGRvdXQpCisgICAgbWluaWZpZXIgPSBKYXZhc2NyaXB0TWluaWZ5KHN5
cy5zdGRpbiwgc3lzLnN0ZG91dCkKKyAgICBtaW5pZmllci5taW5pZnkoKQorICAgIHN5cy5zdGRv
dXQud3JpdGUoJ1xuJykK
</data>
<flag name="review"
          id="255406"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>