<?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>59908</bug_id>
          
          <creation_ts>2011-05-01 18:17:11 -0700</creation_ts>
          <short_desc>scm.py should be split into many pieces</short_desc>
          <delta_ts>2011-05-02 14:56:29 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>abarth</cc>
    
    <cc>dpranke</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>396165</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-01 18:17:11 -0700</bug_when>
    <thetext>scm.py should be split into many pieces</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396166</commentid>
    <comment_count>1</comment_count>
      <attachid>91866</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-01 18:17:35 -0700</bug_when>
    <thetext>Created attachment 91866
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396174</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-01 18:34:24 -0700</bug_when>
    <thetext>Committed r85450: &lt;http://trac.webkit.org/changeset/85450&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396612</commentid>
    <comment_count>3</comment_count>
      <attachid>91866</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-05-02 13:40:26 -0700</bug_when>
    <thetext>Comment on attachment 91866
Patch

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

&gt; Tools/Scripts/webkitpy/common/checkout/scm/__init__.py:7
&gt; +from .svn import SVN

I mentioned this in the other bug, but since you seem to be doing this intentionally here, relative path imports are discouraged in PEP-8.

&gt; Tools/Scripts/webkitpy/common/checkout/scm/__init__.py:34
&gt; +    &quot;&quot;&quot;

We should really add a comment here that this routine should NOT be used to determine the top of the webkit checkout, since that will only work if (a) the CWD is actually in the webkit checkout and not some other checkout and (b) the webkit checkout is a full checkout and not something like Chromium&apos;s hand-picked subset. We should point to a suggested alternative.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396649</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-02 14:12:51 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 91866 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=91866&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/checkout/scm/__init__.py:7
&gt; &gt; +from .svn import SVN
&gt; 
&gt; I mentioned this in the other bug, but since you seem to be doing this intentionally here, relative path imports are discouraged in PEP-8.

That&apos;s what I thought, but Eric kept saying otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396693</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-02 14:56:29 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 91866 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=91866&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Tools/Scripts/webkitpy/common/checkout/scm/__init__.py:7
&gt; &gt; &gt; +from .svn import SVN
&gt; &gt; 
&gt; &gt; I mentioned this in the other bug, but since you seem to be doing this intentionally here, relative path imports are discouraged in PEP-8.
&gt; 
&gt; That&apos;s what I thought, but Eric kept saying otherwise.

I haven&apos;t read pep-8 recently, so I don&apos;t feel an expert here.

I don&apos;t think that absolute paths make sense inside module containers inside webkitpy.  I think our deep module tree makes things tricky.

I don&apos;t think .. relative paths *ever* make sense.

But I would like to tighten up our module boundaries more.  We have problems of one module reaching out into another module (checkout.changelog reaching out to bugzilla and bugzilla reaching back into checkout.scm.git for example) which I would like to get rid of.

It feels a bit strange to me to have scm/__init__.py need to know where it is just to import its own .scm.py file, but if that&apos;s what the python experts tell us we should do, I&apos;m not sure I know enough to disagree.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91866</attachid>
            <date>2011-05-01 18:17:35 -0700</date>
            <delta_ts>2011-05-02 13:40:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59908-20110501181734.patch</filename>
            <type>text/plain</type>
            <size>82618</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODU0NDYKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzNjdkNmMxZGZiZTZlODEzM2ViNDgzNzdmNWE0YmJjOWNm
ZTAxNzg5Li43ODA3YzJkN2UzZWQ2MzRiODJlOWNjOTJmODJlMTYxZDJjMTkwNDA1IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTkg
QEAKIDIwMTEtMDUtMDEgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHNjbS5weSBzaG91bGQgYmUg
c3BsaXQgaW50byBtYW55IHBpZWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTk5MDgKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9u
L2NoZWNrb3V0L3NjbS9fX2luaXRfXy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jaGVja291dC9zY20vY29tbWl0bWVzc2FnZS5weTogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weTogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbS5weToKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX3VuaXR0ZXN0LnB5Ogor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zdm4ucHk6IEFk
ZGVkLgorCisyMDExLTA1LTAxICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKwogICAg
ICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgogCiAgICAgICAgIE1ha2UgbW9zdCBzY20ucHkg
dGVzdHMgcGFzcyBpbiBwcmVwYXJhdGlvbiBmb3Igc3BsaXR0aW5nIHRoZW0gdXAKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9fX2luaXRfXy5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9fX2luaXRfXy5w
eQppbmRleCAyNmRkNmNjNjQ5ODgzN2FmMDYyOGQ3ZWNlOTlmMDhiZTY0N2RjZjBlLi40NzY5ODkz
MTY3MjhiYjgyMDE1Mzg3ZGI2ZWY2NmFjNTRjNGRmOGJmIDEwMDY0NAotLS0gYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vX19pbml0X18ucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL19faW5pdF9fLnB5CkBAIC0xLDQg
KzEsNTkgQEAKICMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3Rvcnkg
Zm9yIG1vZHVsZSBmaWxlcwogCiAjIFdlIG9ubHkgZXhwb3J0IHB1YmxpYyBBUEkgaGVyZS4KLWZy
b20gLnNjbSBpbXBvcnQgU0NNLCBTVk4sIEdpdCwgQ29tbWl0TWVzc2FnZSwgZGV0ZWN0X3NjbV9z
eXN0ZW0sIGZpbmRfY2hlY2tvdXRfcm9vdCwgZGVmYXVsdF9zY20sIEF1dGhlbnRpY2F0aW9uRXJy
b3IsIEFtYmlndW91c0NvbW1pdEVycm9yLCBDaGVja291dE5lZWRzVXBkYXRlCitmcm9tIC5jb21t
aXRtZXNzYWdlIGltcG9ydCBDb21taXRNZXNzYWdlCitmcm9tIC5naXQgaW1wb3J0IEdpdAorZnJv
bSAuc2NtIGltcG9ydCBTQ00sIEF1dGhlbnRpY2F0aW9uRXJyb3IsIEFtYmlndW91c0NvbW1pdEVy
cm9yLCBDaGVja291dE5lZWRzVXBkYXRlCitmcm9tIC5zdm4gaW1wb3J0IFNWTgorCisKK2ltcG9y
dCBvcworCisKK2RlZiBmaW5kX2NoZWNrb3V0X3Jvb3QoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBj
dXJyZW50IGNoZWNrb3V0IHJvb3QgKGFzIGRldGVybWluZWQgYnkgZGVmYXVsdF9zY20oKS4KKwor
ICAgIFJldHVybnMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHRvcCBvZiB0aGUgV2ViS2l0IGNo
ZWNrb3V0LCBvciBOb25lCisgICAgaWYgaXQgY2Fubm90IGJlIGRldGVybWluZWQuCisKKyAgICAi
IiIKKyAgICBzY21fc3lzdGVtID0gZGVmYXVsdF9zY20oKQorICAgIGlmIHNjbV9zeXN0ZW06Cisg
ICAgICAgIHJldHVybiBzY21fc3lzdGVtLmNoZWNrb3V0X3Jvb3QKKyAgICByZXR1cm4gTm9uZQor
CisKK2RlZiBkZWZhdWx0X3NjbShwYXRjaF9kaXJlY3Rvcmllcz1Ob25lKToKKyAgICAiIiJSZXR1
cm4gdGhlIGRlZmF1bHQgU0NNIG9iamVjdCBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBDV0QgYW5kIHJ1
bm5pbmcgY29kZS4KKworICAgIFJldHVybnMgdGhlIGRlZmF1bHQgU0NNIG9iamVjdCBmb3IgdGhl
IGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnk7IGlmIHRoZQorICAgIENXRCBpcyBub3QgaW4gYSBj
aGVja291dCwgdGhlbiB3ZSBhdHRlbXB0IHRvIGZpZ3VyZSBvdXQgaWYgdGhlIFNDTSBtb2R1bGUK
KyAgICBpdHNlbGYgaXMgcGFydCBvZiBhIGNoZWNrb3V0LCBhbmQgcmV0dXJuIHRoYXQgb25lLiBJ
ZiBuZWl0aGVyIGlzIHBhcnQgb2YKKyAgICBhIGNoZWNrb3V0LCBOb25lIGlzIHJldHVybmVkLgor
CisgICAgIiIiCisgICAgY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICBzY21fc3lzdGVtID0gZGV0ZWN0
X3NjbV9zeXN0ZW0oY3dkLCBwYXRjaF9kaXJlY3RvcmllcykKKyAgICBpZiBub3Qgc2NtX3N5c3Rl
bToKKyAgICAgICAgc2NyaXB0X2RpcmVjdG9yeSA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFi
c3BhdGgoX19maWxlX18pKQorICAgICAgICBzY21fc3lzdGVtID0gZGV0ZWN0X3NjbV9zeXN0ZW0o
c2NyaXB0X2RpcmVjdG9yeSwgcGF0Y2hfZGlyZWN0b3JpZXMpCisgICAgICAgIGlmIHNjbV9zeXN0
ZW06CisgICAgICAgICAgICBsb2coIlRoZSBjdXJyZW50IGRpcmVjdG9yeSAoJXMpIGlzIG5vdCBh
IFdlYktpdCBjaGVja291dCwgdXNpbmcgJXMiICUgKGN3ZCwgc2NtX3N5c3RlbS5jaGVja291dF9y
b290KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVycm9yKCJGQVRBTDogRmFpbGVkIHRv
IGRldGVybWluZSB0aGUgU0NNIHN5c3RlbSBmb3IgZWl0aGVyICVzIG9yICVzIiAlIChjd2QsIHNj
cmlwdF9kaXJlY3RvcnkpKQorICAgIHJldHVybiBzY21fc3lzdGVtCisKKworZGVmIGRldGVjdF9z
Y21fc3lzdGVtKHBhdGgsIHBhdGNoX2RpcmVjdG9yaWVzPU5vbmUpOgorICAgIGFic29sdXRlX3Bh
dGggPSBvcy5wYXRoLmFic3BhdGgocGF0aCkKKworICAgIGlmIHBhdGNoX2RpcmVjdG9yaWVzID09
IFtdOgorICAgICAgICBwYXRjaF9kaXJlY3RvcmllcyA9IE5vbmUKKworICAgIGlmIFNWTi5pbl93
b3JraW5nX2RpcmVjdG9yeShhYnNvbHV0ZV9wYXRoKToKKyAgICAgICAgcmV0dXJuIFNWTihjd2Q9
YWJzb2x1dGVfcGF0aCwgcGF0Y2hfZGlyZWN0b3JpZXM9cGF0Y2hfZGlyZWN0b3JpZXMpCisKKyAg
ICBpZiBHaXQuaW5fd29ya2luZ19kaXJlY3RvcnkoYWJzb2x1dGVfcGF0aCk6CisgICAgICAgIHJl
dHVybiBHaXQoY3dkPWFic29sdXRlX3BhdGgpCisKKyAgICByZXR1cm4gTm9uZQpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2NvbW1pdG1lc3Nh
Z2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vY29tbWl0
bWVzc2FnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZTBkNDMxZjljMjQ5OGY3YmY0MDlhZDIyN2JhMjBlNjFk
YmZlZDRlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
Y2hlY2tvdXQvc2NtL2NvbW1pdG1lc3NhZ2UucHkKQEAgLTAsMCArMSw2MiBAQAorIyBDb3B5cmln
aHQgKGMpIDIwMDksIDIwMTAsIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMgQ29weXJpZ2h0IChjKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4K
KyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCByZQorCisKK2RlZiBfZmlyc3Rfbm9uX2VtcHR5X2xp
bmVfYWZ0ZXJfaW5kZXgobGluZXMsIGluZGV4PTApOgorICAgIGZpcnN0X25vbl9lbXB0eV9saW5l
ID0gaW5kZXgKKyAgICBmb3IgbGluZSBpbiBsaW5lc1tpbmRleDpdOgorICAgICAgICBpZiByZS5t
YXRjaCgiXlxzKiQiLCBsaW5lKToKKyAgICAgICAgICAgIGZpcnN0X25vbl9lbXB0eV9saW5lICs9
IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIGZpcnN0X25v
bl9lbXB0eV9saW5lCisKKworY2xhc3MgQ29tbWl0TWVzc2FnZToKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgbWVzc2FnZSk6CisgICAgICAgIHNlbGYubWVzc2FnZV9saW5lcyA9IG1lc3NhZ2VbX2Zp
cnN0X25vbl9lbXB0eV9saW5lX2FmdGVyX2luZGV4KG1lc3NhZ2UsIDApOl0KKworICAgIGRlZiBi
b2R5KHNlbGYsIGxzdHJpcD1GYWxzZSk6CisgICAgICAgIGxpbmVzID0gc2VsZi5tZXNzYWdlX2xp
bmVzW19maXJzdF9ub25fZW1wdHlfbGluZV9hZnRlcl9pbmRleChzZWxmLm1lc3NhZ2VfbGluZXMs
IDEpOl0KKyAgICAgICAgaWYgbHN0cmlwOgorICAgICAgICAgICAgbGluZXMgPSBbbGluZS5sc3Ry
aXAoKSBmb3IgbGluZSBpbiBsaW5lc10KKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykg
KyAiXG4iCisKKyAgICBkZWYgZGVzY3JpcHRpb24oc2VsZiwgbHN0cmlwPUZhbHNlLCBzdHJpcF91
cmw9RmFsc2UpOgorICAgICAgICBsaW5lID0gc2VsZi5tZXNzYWdlX2xpbmVzWzBdCisgICAgICAg
IGlmIGxzdHJpcDoKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLmxzdHJpcCgpCisgICAgICAgIGlm
IHN0cmlwX3VybDoKKyAgICAgICAgICAgIGxpbmUgPSByZS5zdWIoIl4oXHMqKTwuKz4gIiwgIlwx
IiwgbGluZSkKKyAgICAgICAgcmV0dXJuIGxpbmUKKworICAgIGRlZiBtZXNzYWdlKHNlbGYpOgor
ICAgICAgICByZXR1cm4gIlxuIi5qb2luKHNlbGYubWVzc2FnZV9saW5lcykgKyAiXG4iCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45MDg0ODE0MDNhNTQ2YWMzZjM4MTlhNGFjMTM2NTNiYjhhZmMwYzZmCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dp
dC5weQpAQCAtMCwwICsxLDQzOSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAsIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9y
dCBvcworaW1wb3J0IHJlCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLm1lbW9pemVkIGltcG9ydCBt
ZW1vaXplZAorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgRXhl
Y3V0aXZlLCBydW5fY29tbWFuZCwgU2NyaXB0RXJyb3IKKworZnJvbSAuc2NtIGltcG9ydCBTQ00s
IGNvbW1pdF9lcnJvcl9oYW5kbGVyCitmcm9tIC5zdm4gaW1wb3J0IFNWTlJlcG9zaXRvcnkKKwor
CitjbGFzcyBHaXQoU0NNLCBTVk5SZXBvc2l0b3J5KToKKworICAgICMgR2l0IGRvZXNuJ3QgYXBw
ZWFyIHRvIGRvY3VtZW50IGVycm9yIGNvZGVzLCBidXQgc2VlbXMgdG8gcmV0dXJuCisgICAgIyAx
IG9yIDEyOCwgbW9zdGx5LgorICAgIEVSUk9SX0ZJTEVfSVNfTUlTU0lORyA9IDEyOAorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGN3ZCwgZXhlY3V0aXZlPU5vbmUpOgorICAgICAgICBTQ00uX19p
bml0X18oc2VsZiwgY3dkLCBleGVjdXRpdmUpCisgICAgICAgIHNlbGYuX2NoZWNrX2dpdF9hcmNo
aXRlY3R1cmUoKQorCisgICAgZGVmIF9tYWNoaW5lX2lzXzY0Yml0KHNlbGYpOgorICAgICAgICBp
bXBvcnQgcGxhdGZvcm0KKyAgICAgICAgIyBUaGlzIG9ubHkgaXMgdGVzdGVkIG9uIE1hYy4KKyAg
ICAgICAgaWYgbm90IHBsYXRmb3JtLm1hY192ZXIoKVswXToKKyAgICAgICAgICAgIHJldHVybiBG
YWxzZQorCisgICAgICAgICMgcGxhdGZvcm0uYXJjaGl0ZWN0dXJlKClbMF0gY2FuIGJlICc2NGJp
dCcgZXZlbiBpZiB0aGUgbWFjaGluZSBpcyAzMmJpdDoKKyAgICAgICAgIyBodHRwOi8vbWFpbC5w
eXRob24ub3JnL3BpcGVybWFpbC9weXRob25tYWMtc2lnLzIwMDktU2VwdGVtYmVyLzAyMTY0OC5o
dG1sCisgICAgICAgICMgVXNlIHRoZSBzeXNjdGwgY29tbWFuZCB0byBmaW5kIG91dCB3aGF0IHRo
ZSBwcm9jZXNzb3IgYWN0dWFsbHkgc3VwcG9ydHMuCisgICAgICAgIHJldHVybiBzZWxmLnJ1bihb
J3N5c2N0bCcsICctbicsICdody5jcHU2NGJpdF9jYXBhYmxlJ10pLnJzdHJpcCgpID09ICcxJwor
CisgICAgZGVmIF9leGVjdXRhYmxlX2lzXzY0Yml0KHNlbGYsIHBhdGgpOgorICAgICAgICAjIEFn
YWluLCBwbGF0Zm9ybS5hcmNoaXRlY3R1cmUoKSBmYWlscyB1cy4gIE9uIG15IG1hY2hpbmUKKyAg
ICAgICAgIyBnaXRfYml0cyA9IHBsYXRmb3JtLmFyY2hpdGVjdHVyZShleGVjdXRhYmxlPWdpdF9w
YXRoLCBiaXRzPSdkZWZhdWx0JylbMF0KKyAgICAgICAgIyBnaXRfYml0cyBpcyBqdXN0ICdkZWZh
dWx0JywgbWVhbmluZyB0aGUgY2FsbCBmYWlsZWQuCisgICAgICAgIGZpbGVfb3V0cHV0ID0gc2Vs
Zi5ydW4oWydmaWxlJywgcGF0aF0pCisgICAgICAgIHJldHVybiByZS5zZWFyY2goJ3g4Nl82NCcs
IGZpbGVfb3V0cHV0KQorCisgICAgZGVmIF9jaGVja19naXRfYXJjaGl0ZWN0dXJlKHNlbGYpOgor
ICAgICAgICBpZiBub3Qgc2VsZi5fbWFjaGluZV9pc182NGJpdCgpOgorICAgICAgICAgICAgcmV0
dXJuCisKKyAgICAgICAgIyBXZSBjb3VsZCBwYXRoLXNlYXJjaCBlbnRpcmVseSBpbiBweXRob24g
b3Igd2l0aAorICAgICAgICAjIHdoaWNoLnB5IChodHRwOi8vY29kZS5nb29nbGUuY29tL3Avd2hp
Y2gpLCBidXQgdGhpcyBpcyBlYXNpZXI6CisgICAgICAgIGdpdF9wYXRoID0gc2VsZi5ydW4oWyd3
aGljaCcsICdnaXQnXSkucnN0cmlwKCkKKyAgICAgICAgaWYgc2VsZi5fZXhlY3V0YWJsZV9pc182
NGJpdChnaXRfcGF0aCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB3ZWJraXRfZGV2
X3RoZWFkX3VybCA9ICJodHRwczovL2xpc3RzLndlYmtpdC5vcmcvcGlwZXJtYWlsL3dlYmtpdC1k
ZXYvMjAxMC1EZWNlbWJlci8wMTUyNDkuaHRtbCIKKyAgICAgICAgbG9nKCJXYXJuaW5nOiBUaGlz
IG1hY2hpbmUgaXMgNjQtYml0LCBidXQgdGhlIGdpdCBiaW5hcnkgKCVzKSBkb2VzIG5vdCBzdXBw
b3J0IDY0LWJpdC5cbkluc3RhbGwgYSA2NC1iaXQgZ2l0IGZvciBiZXR0ZXIgcGVyZm9ybWFuY2Us
IHNlZTpcbiVzXG4iICUgKGdpdF9wYXRoLCB3ZWJraXRfZGV2X3RoZWFkX3VybCkpCisKKyAgICBA
Y2xhc3NtZXRob2QKKyAgICBkZWYgaW5fd29ya2luZ19kaXJlY3RvcnkoY2xzLCBwYXRoKToKKyAg
ICAgICAgcmV0dXJuIHJ1bl9jb21tYW5kKFsnZ2l0JywgJ3Jldi1wYXJzZScsICctLWlzLWluc2lk
ZS13b3JrLXRyZWUnXSwgY3dkPXBhdGgsIGVycm9yX2hhbmRsZXI9RXhlY3V0aXZlLmlnbm9yZV9l
cnJvcikucnN0cmlwKCkgPT0gInRydWUiCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZmlu
ZF9jaGVja291dF9yb290KGNscywgcGF0aCk6CisgICAgICAgICMgImdpdCByZXYtcGFyc2UgLS1z
aG93LWNkdXAiIHdvdWxkIGJlIGFub3RoZXIgd2F5IHRvIGdldCB0byB0aGUgcm9vdAorICAgICAg
ICAoY2hlY2tvdXRfcm9vdCwgZG90X2dpdCkgPSBvcy5wYXRoLnNwbGl0KHJ1bl9jb21tYW5kKFsn
Z2l0JywgJ3Jldi1wYXJzZScsICctLWdpdC1kaXInXSwgY3dkPShwYXRoIG9yICIuLyIpKSkKKyAg
ICAgICAgIyBJZiB3ZSB3ZXJlIHVzaW5nIDIuNiAjIGNoZWNrb3V0X3Jvb3QgPSBvcy5wYXRoLnJl
bHBhdGgoY2hlY2tvdXRfcm9vdCwgcGF0aCkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNhYnMo
Y2hlY2tvdXRfcm9vdCk6ICAjIFNvbWV0aW1lcyBnaXQgcmV0dXJucyByZWxhdGl2ZSBwYXRocwor
ICAgICAgICAgICAgY2hlY2tvdXRfcm9vdCA9IG9zLnBhdGguam9pbihwYXRoLCBjaGVja291dF9y
b290KQorICAgICAgICByZXR1cm4gY2hlY2tvdXRfcm9vdAorCisgICAgQGNsYXNzbWV0aG9kCisg
ICAgZGVmIHRvX29iamVjdF9uYW1lKGNscywgZmlsZXBhdGgpOgorICAgICAgICByb290X2VuZF93
aXRoX3NsYXNoID0gb3MucGF0aC5qb2luKGNscy5maW5kX2NoZWNrb3V0X3Jvb3Qob3MucGF0aC5k
aXJuYW1lKGZpbGVwYXRoKSksICcnKQorICAgICAgICByZXR1cm4gZmlsZXBhdGgucmVwbGFjZShy
b290X2VuZF93aXRoX3NsYXNoLCAnJykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiByZWFk
X2dpdF9jb25maWcoY2xzLCBrZXkpOgorICAgICAgICAjIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9i
YWJseSB1c2UgY3dkPXNlbGYuY2hlY2tvdXRfcm9vdC4KKyAgICAgICAgIyBQYXNzIC0tZ2V0LWFs
bCBmb3IgY2FzZXMgd2hlcmUgdGhlIGNvbmZpZyBoYXMgbXVsdGlwbGUgdmFsdWVzCisgICAgICAg
IHJldHVybiBydW5fY29tbWFuZChbImdpdCIsICJjb25maWciLCAiLS1nZXQtYWxsIiwga2V5XSwK
KyAgICAgICAgICAgIGVycm9yX2hhbmRsZXI9RXhlY3V0aXZlLmlnbm9yZV9lcnJvcikucnN0cmlw
KCdcbicpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNvbW1pdF9zdWNjZXNzX3JlZ2V4
cCgpOgorICAgICAgICByZXR1cm4gIl5Db21taXR0ZWQgcig/UDxzdm5fcmV2aXNpb24+XGQrKSQi
CisKKyAgICBkZWYgZGlzY2FyZF9sb2NhbF9jb21taXRzKHNlbGYpOgorICAgICAgICAjIEZJWE1F
OiBUaGlzIHNob3VsZCBwcm9iYWJseSB1c2UgY3dkPXNlbGYuY2hlY2tvdXRfcm9vdAorICAgICAg
ICBzZWxmLnJ1bihbJ2dpdCcsICdyZXNldCcsICctLWhhcmQnLCBzZWxmLnJlbW90ZV9icmFuY2hf
cmVmKCldKQorCisgICAgZGVmIGxvY2FsX2NvbW1pdHMoc2VsZik6CisgICAgICAgICMgRklYTUU6
IFRoaXMgc2hvdWxkIHByb2JhYmx5IHVzZSBjd2Q9c2VsZi5jaGVja291dF9yb290CisgICAgICAg
IHJldHVybiBzZWxmLnJ1bihbJ2dpdCcsICdsb2cnLCAnLS1wcmV0dHk9b25lbGluZScsICdIRUFE
Li4uJyArIHNlbGYucmVtb3RlX2JyYW5jaF9yZWYoKV0pLnNwbGl0bGluZXMoKQorCisgICAgZGVm
IHJlYmFzZV9pbl9wcm9ncmVzcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguZXhpc3Rz
KG9zLnBhdGguam9pbihzZWxmLmNoZWNrb3V0X3Jvb3QsICcuZ2l0L3JlYmFzZS1hcHBseScpKQor
CisgICAgZGVmIHdvcmtpbmdfZGlyZWN0b3J5X2lzX2NsZWFuKHNlbGYpOgorICAgICAgICAjIEZJ
WE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSB1c2UgY3dkPXNlbGYuY2hlY2tvdXRfcm9vdAorICAg
ICAgICByZXR1cm4gc2VsZi5ydW4oWydnaXQnLCAnZGlmZicsICdIRUFEJywgJy0tbmFtZS1vbmx5
J10pID09ICIiCisKKyAgICBkZWYgY2xlYW5fd29ya2luZ19kaXJlY3Rvcnkoc2VsZik6CisgICAg
ICAgICMgRklYTUU6IFRoZXNlIHNob3VsZCBwcm9iYWJseSB1c2UgY3dkPXNlbGYuY2hlY2tvdXRf
cm9vdC4KKyAgICAgICAgIyBDb3VsZCBydW4gZ2l0IGNsZWFuIGhlcmUgdG9vLCBidXQgdGhhdCB3
b3VsZG4ndCBtYXRjaCB3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVhbgorICAgICAgICBzZWxmLnJ1
bihbJ2dpdCcsICdyZXNldCcsICctLWhhcmQnLCAnSEVBRCddKQorICAgICAgICAjIEFib3J0aW5n
IHJlYmFzZSBldmVuIHRob3VnaCB0aGlzIGRvZXMgbm90IG1hdGNoIHdvcmtpbmdfZGlyZWN0b3J5
X2lzX2NsZWFuCisgICAgICAgIGlmIHNlbGYucmViYXNlX2luX3Byb2dyZXNzKCk6CisgICAgICAg
ICAgICBzZWxmLnJ1bihbJ2dpdCcsICdyZWJhc2UnLCAnLS1hYm9ydCddKQorCisgICAgZGVmIHN0
YXR1c19jb21tYW5kKHNlbGYpOgorICAgICAgICAjIGdpdCBzdGF0dXMgcmV0dXJucyBub24temVy
byB3aGVuIHRoZXJlIGFyZSBjaGFuZ2VzLCBzbyB3ZSB1c2UgZ2l0IGRpZmYgbmFtZSAtLW5hbWUt
c3RhdHVzIEhFQUQgaW5zdGVhZC4KKyAgICAgICAgIyBObyBmaWxlIGNvbnRlbnRzIHByaW50ZWQs
IHRodXMgdXRmLTggYXV0b2RlY29kaW5nIGluIHNlbGYucnVuIGlzIGZpbmUuCisgICAgICAgIHJl
dHVybiBbImdpdCIsICJkaWZmIiwgIi0tbmFtZS1zdGF0dXMiLCAiSEVBRCJdCisKKyAgICBkZWYg
X3N0YXR1c19yZWdleHAoc2VsZiwgZXhwZWN0ZWRfdHlwZXMpOgorICAgICAgICByZXR1cm4gJ14o
P1A8c3RhdHVzPlslc10pXHQoP1A8ZmlsZW5hbWU+LispJCcgJSBleHBlY3RlZF90eXBlcworCisg
ICAgZGVmIGFkZChzZWxmLCBwYXRoLCByZXR1cm5fZXhpdF9jb2RlPUZhbHNlKToKKyAgICAgICAg
cmV0dXJuIHNlbGYucnVuKFsiZ2l0IiwgImFkZCIsIHBhdGhdLCByZXR1cm5fZXhpdF9jb2RlPXJl
dHVybl9leGl0X2NvZGUpCisKKyAgICBkZWYgZGVsZXRlKHNlbGYsIHBhdGgpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5ydW4oWyJnaXQiLCAicm0iLCAiLWYiLCBwYXRoXSkKKworICAgIGRlZiBleGlz
dHMoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybl9jb2RlID0gc2VsZi5ydW4oWyJnaXQiLCAi
c2hvdyIsICJIRUFEOiVzIiAlIHBhdGhdLCByZXR1cm5fZXhpdF9jb2RlPVRydWUsIGRlY29kZV9v
dXRwdXQ9RmFsc2UpCisgICAgICAgIHJldHVybiByZXR1cm5fY29kZSAhPSBzZWxmLkVSUk9SX0ZJ
TEVfSVNfTUlTU0lORworCisgICAgZGVmIG1lcmdlX2Jhc2Uoc2VsZiwgZ2l0X2NvbW1pdCk6Cisg
ICAgICAgIGlmIGdpdF9jb21taXQ6CisgICAgICAgICAgICAjIFNwZWNpYWwtY2FzZSBIRUFELi4g
dG8gbWVhbiB3b3JraW5nLWNvcHkgY2hhbmdlcyBvbmx5LgorICAgICAgICAgICAgaWYgZ2l0X2Nv
bW1pdC51cHBlcigpID09ICdIRUFELi4nOgorICAgICAgICAgICAgICAgIHJldHVybiAnSEVBRCcK
KworICAgICAgICAgICAgaWYgJy4uJyBub3QgaW4gZ2l0X2NvbW1pdDoKKyAgICAgICAgICAgICAg
ICBnaXRfY29tbWl0ID0gZ2l0X2NvbW1pdCArICJeLi4iICsgZ2l0X2NvbW1pdAorICAgICAgICAg
ICAgcmV0dXJuIGdpdF9jb21taXQKKworICAgICAgICByZXR1cm4gc2VsZi5yZW1vdGVfbWVyZ2Vf
YmFzZSgpCisKKyAgICBkZWYgY2hhbmdlZF9maWxlcyhzZWxmLCBnaXRfY29tbWl0PU5vbmUpOgor
ICAgICAgICAjIEZJWE1FOiAtLWRpZmYtZmlsdGVyIGNvdWxkIGJlIHVzZWQgdG8gYXZvaWQgdGhl
ICJleHRyYWN0X2ZpbGVuYW1lcyIgc3RlcC4KKyAgICAgICAgc3RhdHVzX2NvbW1hbmQgPSBbJ2dp
dCcsICdkaWZmJywgJy1yJywgJy0tbmFtZS1zdGF0dXMnLCAnLUMnLCAnLU0nLCAiLS1uby1leHQt
ZGlmZiIsICItLWZ1bGwtaW5kZXgiLCBzZWxmLm1lcmdlX2Jhc2UoZ2l0X2NvbW1pdCldCisgICAg
ICAgICMgRklYTUU6IEknbSBub3Qgc3VyZSB3ZSdyZSByZXR1cm5pbmcgdGhlIHNhbWUgc2V0IG9m
IGZpbGVzIHRoYXQgU1ZOLmNoYW5nZWRfZmlsZXMgaXMuCisgICAgICAgICMgQWRkZWQgKEEpLCBD
b3BpZWQgKEMpLCBEZWxldGVkIChEKSwgTW9kaWZpZWQgKE0pLCBSZW5hbWVkIChSKQorICAgICAg
ICByZXR1cm4gc2VsZi5ydW5fc3RhdHVzX2FuZF9leHRyYWN0X2ZpbGVuYW1lcyhzdGF0dXNfY29t
bWFuZCwgc2VsZi5fc3RhdHVzX3JlZ2V4cCgiQURNIikpCisKKyAgICBkZWYgX2NoYW5nZXNfZmls
ZXNfZm9yX2NvbW1pdChzZWxmLCBnaXRfY29tbWl0KToKKyAgICAgICAgIyAtLXByZXR0eT0iZm9y
bWF0OiIgbWFrZXMgZ2l0IHNob3cgbm90IHByaW50IHRoZSBjb21taXQgbG9nIGhlYWRlciwKKyAg
ICAgICAgY2hhbmdlZF9maWxlcyA9IHNlbGYucnVuKFsiZ2l0IiwgInNob3ciLCAiLS1wcmV0dHk9
Zm9ybWF0OiIsICItLW5hbWUtb25seSIsIGdpdF9jb21taXRdKS5zcGxpdGxpbmVzKCkKKyAgICAg
ICAgIyBpbnN0ZWFkIGl0IGp1c3QgcHJpbnRzIGEgYmxhbmsgbGluZSBhdCB0aGUgdG9wLCBzbyB3
ZSBza2lwIHRoZSBibGFuayBsaW5lOgorICAgICAgICByZXR1cm4gY2hhbmdlZF9maWxlc1sxOl0K
KworICAgIGRlZiBjaGFuZ2VkX2ZpbGVzX2Zvcl9yZXZpc2lvbihzZWxmLCByZXZpc2lvbik6Cisg
ICAgICAgIGNvbW1pdF9pZCA9IHNlbGYuZ2l0X2NvbW1pdF9mcm9tX3N2bl9yZXZpc2lvbihyZXZp
c2lvbikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NoYW5nZXNfZmlsZXNfZm9yX2NvbW1pdChjb21t
aXRfaWQpCisKKyAgICBkZWYgcmV2aXNpb25zX2NoYW5naW5nX2ZpbGUoc2VsZiwgcGF0aCwgbGlt
aXQ9NSk6CisgICAgICAgICMgZ2l0IHJldi1saXN0IGhlYWQgLS1yZW1vdmUtZW1wdHkgLS1saW1p
dD01IC0tIHBhdGggd291bGQgYmUgZXF1aXZhbGVudC4KKyAgICAgICAgY29tbWl0X2lkcyA9IHNl
bGYucnVuKFsiZ2l0IiwgImxvZyIsICItLXJlbW92ZS1lbXB0eSIsICItLXByZXR0eT1mb3JtYXQ6
JUgiLCAiLSVzIiAlIGxpbWl0LCAiLS0iLCBwYXRoXSkuc3BsaXRsaW5lcygpCisgICAgICAgIHJl
dHVybiBmaWx0ZXIobGFtYmRhIHJldmlzaW9uOiByZXZpc2lvbiwgbWFwKHNlbGYuc3ZuX3Jldmlz
aW9uX2Zyb21fZ2l0X2NvbW1pdCwgY29tbWl0X2lkcykpCisKKyAgICBkZWYgY29uZmxpY3RlZF9m
aWxlcyhzZWxmKToKKyAgICAgICAgIyBXZSBkbyBub3QgbmVlZCB0byBwYXNzIGRlY29kZV9vdXRw
dXQgZm9yIHRoaXMgZGlmZiBjb21tYW5kCisgICAgICAgICMgYXMgd2UncmUgcGFzc2luZyAtLW5h
bWUtc3RhdHVzIHdoaWNoIGRvZXMgbm90IG91dHB1dCBhbnkgZGF0YS4KKyAgICAgICAgc3RhdHVz
X2NvbW1hbmQgPSBbJ2dpdCcsICdkaWZmJywgJy0tbmFtZS1zdGF0dXMnLCAnLUMnLCAnLU0nLCAn
LS1kaWZmLWZpbHRlcj1VJ10KKyAgICAgICAgcmV0dXJuIHNlbGYucnVuX3N0YXR1c19hbmRfZXh0
cmFjdF9maWxlbmFtZXMoc3RhdHVzX2NvbW1hbmQsIHNlbGYuX3N0YXR1c19yZWdleHAoIlUiKSkK
KworICAgIGRlZiBhZGRlZF9maWxlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuX3N0
YXR1c19hbmRfZXh0cmFjdF9maWxlbmFtZXMoc2VsZi5zdGF0dXNfY29tbWFuZCgpLCBzZWxmLl9z
dGF0dXNfcmVnZXhwKCJBIikpCisKKyAgICBkZWYgZGVsZXRlZF9maWxlcyhzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYucnVuX3N0YXR1c19hbmRfZXh0cmFjdF9maWxlbmFtZXMoc2VsZi5zdGF0
dXNfY29tbWFuZCgpLCBzZWxmLl9zdGF0dXNfcmVnZXhwKCJEIikpCisKKyAgICBAc3RhdGljbWV0
aG9kCisgICAgZGVmIHN1cHBvcnRzX2xvY2FsX2NvbW1pdHMoKToKKyAgICAgICAgcmV0dXJuIFRy
dWUKKworICAgIGRlZiBkaXNwbGF5X25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAiZ2l0Igor
CisgICAgZGVmIGhlYWRfc3ZuX3JldmlzaW9uKHNlbGYpOgorICAgICAgICBnaXRfbG9nID0gc2Vs
Zi5ydW4oWydnaXQnLCAnbG9nJywgJy0yNSddKQorICAgICAgICBtYXRjaCA9IHJlLnNlYXJjaCgi
XlxzKmdpdC1zdm4taWQ6LipAKD9QPHN2bl9yZXZpc2lvbj5cZCspXCAiLCBnaXRfbG9nLCByZS5N
VUxUSUxJTkUpCisgICAgICAgIGlmIG5vdCBtYXRjaDoKKyAgICAgICAgICAgIHJldHVybiAiIgor
ICAgICAgICByZXR1cm4gc3RyKG1hdGNoLmdyb3VwKCdzdm5fcmV2aXNpb24nKSkKKworICAgIGRl
ZiBwcmVwZW5kX3N2bl9yZXZpc2lvbihzZWxmLCBkaWZmKToKKyAgICAgICAgcmV2aXNpb24gPSBz
ZWxmLmhlYWRfc3ZuX3JldmlzaW9uKCkKKyAgICAgICAgaWYgbm90IHJldmlzaW9uOgorICAgICAg
ICAgICAgcmV0dXJuIGRpZmYKKworICAgICAgICByZXR1cm4gIlN1YnZlcnNpb24gUmV2aXNpb246
ICIgKyByZXZpc2lvbiArICdcbicgKyBkaWZmCisKKyAgICBkZWYgY3JlYXRlX3BhdGNoKHNlbGYs
IGdpdF9jb21taXQ9Tm9uZSwgY2hhbmdlZF9maWxlcz1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJu
cyBhIGJ5dGUgYXJyYXkgKHN0cigpKSByZXByZXNlbnRpbmcgdGhlIHBhdGNoIGZpbGUuCisgICAg
ICAgIFBhdGNoIGZpbGVzIGFyZSBlZmZlY3RpdmVseSBiaW5hcnkgc2luY2UgdGhleSBtYXkgY29u
dGFpbgorICAgICAgICBmaWxlcyBvZiBtdWx0aXBsZSBkaWZmZXJlbnQgZW5jb2RpbmdzLiIiIgor
ICAgICAgICBjb21tYW5kID0gWydnaXQnLCAnZGlmZicsICctLWJpbmFyeScsICItLW5vLWV4dC1k
aWZmIiwgIi0tZnVsbC1pbmRleCIsICItTSIsIHNlbGYubWVyZ2VfYmFzZShnaXRfY29tbWl0KSwg
Ii0tIl0KKyAgICAgICAgaWYgY2hhbmdlZF9maWxlczoKKyAgICAgICAgICAgIGNvbW1hbmQgKz0g
Y2hhbmdlZF9maWxlcworICAgICAgICByZXR1cm4gc2VsZi5wcmVwZW5kX3N2bl9yZXZpc2lvbihz
ZWxmLnJ1bihjb21tYW5kLCBkZWNvZGVfb3V0cHV0PUZhbHNlLCBjd2Q9c2VsZi5jaGVja291dF9y
b290KSkKKworICAgIGRlZiBfcnVuX2dpdF9zdm5fZmluZF9yZXYoc2VsZiwgYXJnKToKKyAgICAg
ICAgIyBnaXQgc3ZuIGZpbmQtcmV2IGFsd2F5cyBleGl0cyAwLCBldmVuIHdoZW4gdGhlIHJldmlz
aW9uIG9yIGNvbW1pdCBpcyBub3QgZm91bmQuCisgICAgICAgIHJldHVybiBzZWxmLnJ1bihbJ2dp
dCcsICdzdm4nLCAnZmluZC1yZXYnLCBhcmddLCBjd2Q9c2VsZi5jaGVja291dF9yb290KS5yc3Ry
aXAoKQorCisgICAgZGVmIF9zdHJpbmdfdG9faW50X29yX25vbmUoc2VsZiwgc3RyaW5nKToKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGludChzdHJpbmcpCisgICAgICAgIGV4Y2Vw
dCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBtZW1vaXpl
ZAorICAgIGRlZiBnaXRfY29tbWl0X2Zyb21fc3ZuX3JldmlzaW9uKHNlbGYsIHN2bl9yZXZpc2lv
bik6CisgICAgICAgIGdpdF9jb21taXQgPSBzZWxmLl9ydW5fZ2l0X3N2bl9maW5kX3JldignciVz
JyAlIHN2bl9yZXZpc2lvbikKKyAgICAgICAgaWYgbm90IGdpdF9jb21taXQ6CisgICAgICAgICAg
ICAjIEZJWE1FOiBBbHRlcm5hdGl2ZWx5IHdlIGNvdWxkIG9mZmVyIHRvIHVwZGF0ZSB0aGUgY2hl
Y2tvdXQ/IE9yIHJldHVybiBOb25lPworICAgICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3IobWVz
c2FnZT0nRmFpbGVkIHRvIGZpbmQgZ2l0IGNvbW1pdCBmb3IgcmV2aXNpb24gJXMsIHlvdXIgY2hl
Y2tvdXQgbGlrZWx5IG5lZWRzIGFuIHVwZGF0ZS4nICUgc3ZuX3JldmlzaW9uKQorICAgICAgICBy
ZXR1cm4gZ2l0X2NvbW1pdAorCisgICAgQG1lbW9pemVkCisgICAgZGVmIHN2bl9yZXZpc2lvbl9m
cm9tX2dpdF9jb21taXQoc2VsZiwgZ2l0X2NvbW1pdCk6CisgICAgICAgIHN2bl9yZXZpc2lvbiA9
IHNlbGYuX3J1bl9naXRfc3ZuX2ZpbmRfcmV2KGdpdF9jb21taXQpCisgICAgICAgIHJldHVybiBz
ZWxmLl9zdHJpbmdfdG9faW50X29yX25vbmUoc3ZuX3JldmlzaW9uKQorCisgICAgZGVmIGNvbnRl
bnRzX2F0X3JldmlzaW9uKHNlbGYsIHBhdGgsIHJldmlzaW9uKToKKyAgICAgICAgIiIiUmV0dXJu
cyBhIGJ5dGUgYXJyYXkgKHN0cigpKSBjb250YWluaW5nIHRoZSBjb250ZW50cworICAgICAgICBv
ZiBwYXRoIEAgcmV2aXNpb24gaW4gdGhlIHJlcG9zaXRvcnkuIiIiCisgICAgICAgIHJldHVybiBz
ZWxmLnJ1bihbImdpdCIsICJzaG93IiwgIiVzOiVzIiAlIChzZWxmLmdpdF9jb21taXRfZnJvbV9z
dm5fcmV2aXNpb24ocmV2aXNpb24pLCBwYXRoKV0sIGRlY29kZV9vdXRwdXQ9RmFsc2UpCisKKyAg
ICBkZWYgZGlmZl9mb3JfcmV2aXNpb24oc2VsZiwgcmV2aXNpb24pOgorICAgICAgICBnaXRfY29t
bWl0ID0gc2VsZi5naXRfY29tbWl0X2Zyb21fc3ZuX3JldmlzaW9uKHJldmlzaW9uKQorICAgICAg
ICByZXR1cm4gc2VsZi5jcmVhdGVfcGF0Y2goZ2l0X2NvbW1pdCkKKworICAgIGRlZiBkaWZmX2Zv
cl9maWxlKHNlbGYsIHBhdGgsIGxvZz1Ob25lKToKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuKFsn
Z2l0JywgJ2RpZmYnLCAnSEVBRCcsICctLScsIHBhdGhdKQorCisgICAgZGVmIHNob3dfaGVhZChz
ZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuKFsnZ2l0JywgJ3Nob3cnLCAnSEVB
RDonICsgc2VsZi50b19vYmplY3RfbmFtZShwYXRoKV0sIGRlY29kZV9vdXRwdXQ9RmFsc2UpCisK
KyAgICBkZWYgY29tbWl0dGVyX2VtYWlsX2Zvcl9yZXZpc2lvbihzZWxmLCByZXZpc2lvbik6Cisg
ICAgICAgIGdpdF9jb21taXQgPSBzZWxmLmdpdF9jb21taXRfZnJvbV9zdm5fcmV2aXNpb24ocmV2
aXNpb24pCisgICAgICAgIGNvbW1pdHRlcl9lbWFpbCA9IHNlbGYucnVuKFsiZ2l0IiwgImxvZyIs
ICItMSIsICItLXByZXR0eT1mb3JtYXQ6JWNlIiwgZ2l0X2NvbW1pdF0pCisgICAgICAgICMgR2l0
IGFkZHMgYW4gZXh0cmEgQHJlcG9zaXRvcnlfaGFzaCB0byB0aGUgZW5kIG9mIGV2ZXJ5IGNvbW1p
dHRlciBlbWFpbCwgcmVtb3ZlIGl0OgorICAgICAgICByZXR1cm4gY29tbWl0dGVyX2VtYWlsLnJz
cGxpdCgiQCIsIDEpWzBdCisKKyAgICBkZWYgYXBwbHlfcmV2ZXJzZV9kaWZmKHNlbGYsIHJldmlz
aW9uKToKKyAgICAgICAgIyBBc3N1bWUgdGhlIHJldmlzaW9uIGlzIGFuIHN2biByZXZpc2lvbi4K
KyAgICAgICAgZ2l0X2NvbW1pdCA9IHNlbGYuZ2l0X2NvbW1pdF9mcm9tX3N2bl9yZXZpc2lvbihy
ZXZpc2lvbikKKyAgICAgICAgIyBJIHRoaW5rIHRoaXMgd2lsbCBhbHdheXMgZmFpbCBkdWUgdG8g
Q2hhbmdlTG9ncy4KKyAgICAgICAgc2VsZi5ydW4oWydnaXQnLCAncmV2ZXJ0JywgJy0tbm8tY29t
bWl0JywgZ2l0X2NvbW1pdF0sIGVycm9yX2hhbmRsZXI9RXhlY3V0aXZlLmlnbm9yZV9lcnJvcikK
KworICAgIGRlZiByZXZlcnRfZmlsZXMoc2VsZiwgZmlsZV9wYXRocyk6CisgICAgICAgIHNlbGYu
cnVuKFsnZ2l0JywgJ2NoZWNrb3V0JywgJ0hFQUQnXSArIGZpbGVfcGF0aHMpCisKKyAgICBkZWYg
X2Fzc2VydF9jYW5fc3F1YXNoKHNlbGYsIHdvcmtpbmdfZGlyZWN0b3J5X2lzX2NsZWFuKToKKyAg
ICAgICAgc3F1YXNoID0gR2l0LnJlYWRfZ2l0X2NvbmZpZygnd2Via2l0LXBhdGNoLmNvbW1pdC1z
aG91bGQtYWx3YXlzLXNxdWFzaCcpCisgICAgICAgIHNob3VsZF9zcXVhc2ggPSBzcXVhc2ggYW5k
IHNxdWFzaC5sb3dlcigpID09ICJ0cnVlIgorCisgICAgICAgIGlmIG5vdCBzaG91bGRfc3F1YXNo
OgorICAgICAgICAgICAgIyBPbmx5IHdhcm4gaWYgdGhlcmUgYXJlIGFjdHVhbGx5IG11bHRpcGxl
IGNvbW1pdHMgdG8gc3F1YXNoLgorICAgICAgICAgICAgbnVtX2xvY2FsX2NvbW1pdHMgPSBsZW4o
c2VsZi5sb2NhbF9jb21taXRzKCkpCisgICAgICAgICAgICBpZiBudW1fbG9jYWxfY29tbWl0cyA+
IDEgb3IgKG51bV9sb2NhbF9jb21taXRzID4gMCBhbmQgbm90IHdvcmtpbmdfZGlyZWN0b3J5X2lz
X2NsZWFuKToKKyAgICAgICAgICAgICAgICByYWlzZSBBbWJpZ3VvdXNDb21taXRFcnJvcihudW1f
bG9jYWxfY29tbWl0cywgd29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW4pCisKKyAgICBkZWYgY29t
bWl0X3dpdGhfbWVzc2FnZShzZWxmLCBtZXNzYWdlLCB1c2VybmFtZT1Ob25lLCBwYXNzd29yZD1O
b25lLCBnaXRfY29tbWl0PU5vbmUsIGZvcmNlX3NxdWFzaD1GYWxzZSwgY2hhbmdlZF9maWxlcz1O
b25lKToKKyAgICAgICAgIyBVc2VybmFtZSBpcyBpZ25vcmVkIGR1cmluZyBHaXQgY29tbWl0cy4K
KyAgICAgICAgd29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW4gPSBzZWxmLndvcmtpbmdfZGlyZWN0
b3J5X2lzX2NsZWFuKCkKKworICAgICAgICBpZiBnaXRfY29tbWl0OgorICAgICAgICAgICAgIyBT
cGVjaWFsLWNhc2UgSEVBRC4uIHRvIG1lYW4gd29ya2luZy1jb3B5IGNoYW5nZXMgb25seS4KKyAg
ICAgICAgICAgIGlmIGdpdF9jb21taXQudXBwZXIoKSA9PSAnSEVBRC4uJzoKKyAgICAgICAgICAg
ICAgICBpZiB3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVhbjoKKyAgICAgICAgICAgICAgICAgICAg
cmFpc2UgU2NyaXB0RXJyb3IobWVzc2FnZT0iVGhlIHdvcmtpbmcgY29weSBpcyBub3QgbW9kaWZp
ZWQuIC0tZ2l0LWNvbW1pdD1IRUFELi4gb25seSBjb21taXRzIHdvcmtpbmcgY29weSBjaGFuZ2Vz
LiIpCisgICAgICAgICAgICAgICAgc2VsZi5jb21taXRfbG9jYWxseV93aXRoX21lc3NhZ2UobWVz
c2FnZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fY29tbWl0X29uX2JyYW5jaChtZXNz
YWdlLCAnSEVBRCcsIHVzZXJuYW1lPXVzZXJuYW1lLCBwYXNzd29yZD1wYXNzd29yZCkKKworICAg
ICAgICAgICAgIyBOZWVkIHdvcmtpbmcgZGlyZWN0b3J5IGNoYW5nZXMgdG8gYmUgY29tbWl0dGVk
IHNvIHdlIGNhbiBjaGVja291dCB0aGUgbWVyZ2UgYnJhbmNoLgorICAgICAgICAgICAgaWYgbm90
IHdvcmtpbmdfZGlyZWN0b3J5X2lzX2NsZWFuOgorICAgICAgICAgICAgICAgICMgRklYTUU6IHdl
YmtpdC1wYXRjaCBsYW5kIHdpbGwgbW9kaWZ5IHRoZSBDaGFuZ2VMb2dzIHRvIGNvcnJlY3QgdGhl
IHJldmlld2VyLgorICAgICAgICAgICAgICAgICMgVGhhdCB3aWxsIG1vZGlmeSB0aGUgd29ya2lu
Zy1jb3B5IGFuZCBjYXVzZSB1cyB0byBoaXQgdGhpcyBlcnJvci4KKyAgICAgICAgICAgICAgICAj
IFRoZSBDaGFuZ2VMb2cgbW9kaWZpY2F0aW9uIGNvdWxkIGJlIG1hZGUgdG8gbW9kaWZ5IHRoZSBl
eGlzdGluZyBsb2NhbCBjb21taXQuCisgICAgICAgICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3Io
bWVzc2FnZT0iV29ya2luZyBjb3B5IGlzIG1vZGlmaWVkLiBDYW5ub3QgY29tbWl0IGluZGl2aWR1
YWwgZ2l0X2NvbW1pdHMuIikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb21taXRfb25fYnJh
bmNoKG1lc3NhZ2UsIGdpdF9jb21taXQsIHVzZXJuYW1lPXVzZXJuYW1lLCBwYXNzd29yZD1wYXNz
d29yZCkKKworICAgICAgICBpZiBub3QgZm9yY2Vfc3F1YXNoOgorICAgICAgICAgICAgc2VsZi5f
YXNzZXJ0X2Nhbl9zcXVhc2god29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW4pCisgICAgICAgIHNl
bGYucnVuKFsnZ2l0JywgJ3Jlc2V0JywgJy0tc29mdCcsIHNlbGYucmVtb3RlX21lcmdlX2Jhc2Uo
KV0pCisgICAgICAgIHNlbGYuY29tbWl0X2xvY2FsbHlfd2l0aF9tZXNzYWdlKG1lc3NhZ2UpCisg
ICAgICAgIHJldHVybiBzZWxmLnB1c2hfbG9jYWxfY29tbWl0c190b19zZXJ2ZXIodXNlcm5hbWU9
dXNlcm5hbWUsIHBhc3N3b3JkPXBhc3N3b3JkKQorCisgICAgZGVmIF9jb21taXRfb25fYnJhbmNo
KHNlbGYsIG1lc3NhZ2UsIGdpdF9jb21taXQsIHVzZXJuYW1lPU5vbmUsIHBhc3N3b3JkPU5vbmUp
OgorICAgICAgICBicmFuY2hfcmVmID0gc2VsZi5ydW4oWydnaXQnLCAnc3ltYm9saWMtcmVmJywg
J0hFQUQnXSkuc3RyaXAoKQorICAgICAgICBicmFuY2hfbmFtZSA9IGJyYW5jaF9yZWYucmVwbGFj
ZSgncmVmcy9oZWFkcy8nLCAnJykKKyAgICAgICAgY29tbWl0X2lkcyA9IHNlbGYuY29tbWl0X2lk
c19mcm9tX2NvbW1pdGlzaF9hcmd1bWVudHMoW2dpdF9jb21taXRdKQorCisgICAgICAgICMgV2Ug
d2FudCB0byBzcXVhc2ggYWxsIHRoaXMgYnJhbmNoJ3MgY29tbWl0cyBpbnRvIG9uZSBjb21taXQg
d2l0aCB0aGUgcHJvcGVyIGRlc2NyaXB0aW9uLgorICAgICAgICAjIFdlIGRvIHRoaXMgYnkgZG9p
bmcgYSAibWVyZ2UgLS1zcXVhc2giIGludG8gYSBuZXcgY29tbWl0IGJyYW5jaCwgdGhlbiBkY29t
bWl0dGluZyB0aGF0LgorICAgICAgICBNRVJHRV9CUkFOQ0hfTkFNRSA9ICd3ZWJraXQtcGF0Y2gt
bGFuZCcKKyAgICAgICAgc2VsZi5kZWxldGVfYnJhbmNoKE1FUkdFX0JSQU5DSF9OQU1FKQorCisg
ICAgICAgICMgV2UgbWlnaHQgYmUgaW4gYSBkaXJlY3RvcnkgdGhhdCdzIHByZXNlbnQgaW4gdGhp
cyBicmFuY2ggYnV0IG5vdCBpbiB0aGUKKyAgICAgICAgIyB0cnVuay4gIE1vdmUgdXAgdG8gdGhl
IHRvcCBvZiB0aGUgdHJlZSBzbyB0aGF0IGdpdCBjb21tYW5kcyB0aGF0IGV4cGVjdCBhCisgICAg
ICAgICMgdmFsaWQgQ1dEIHdvbid0IGZhaWwgYWZ0ZXIgd2UgY2hlY2sgb3V0IHRoZSBtZXJnZSBi
cmFuY2guCisgICAgICAgIG9zLmNoZGlyKHNlbGYuY2hlY2tvdXRfcm9vdCkKKworICAgICAgICAj
IFN0dWZmIG91ciBjaGFuZ2UgaW50byB0aGUgbWVyZ2UgYnJhbmNoLgorICAgICAgICAjIFdlIHdy
YXAgaW4gYSB0cnkuLi5maW5hbGx5IGJsb2NrIHNvIGlmIGFueXRoaW5nIGdvZXMgd3JvbmcsIHdl
IGNsZWFuIHVwIHRoZSBicmFuY2hlcy4KKyAgICAgICAgY29tbWl0X3N1Y2NlZWRlZCA9IFRydWUK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5ydW4oWydnaXQnLCAnY2hlY2tvdXQnLCAn
LXEnLCAnLWInLCBNRVJHRV9CUkFOQ0hfTkFNRSwgc2VsZi5yZW1vdGVfYnJhbmNoX3JlZigpXSkK
KworICAgICAgICAgICAgZm9yIGNvbW1pdCBpbiBjb21taXRfaWRzOgorICAgICAgICAgICAgICAg
ICMgV2UncmUgb24gYSBkaWZmZXJlbnQgYnJhbmNoIG5vdywgc28gY29udmVydCAiaGVhZCIgdG8g
dGhlIGJyYW5jaCBuYW1lLgorICAgICAgICAgICAgICAgIGNvbW1pdCA9IHJlLnN1YihyJyg/aSlo
ZWFkJywgYnJhbmNoX25hbWUsIGNvbW1pdCkKKyAgICAgICAgICAgICAgICAjIEZJWE1FOiBPbmNl
IGNoYW5nZWRfZmlsZXMgYW5kIGNyZWF0ZV9wYXRjaCBhcmUgbW9kaWZpZWQgdG8gc2VwYXJhdGVs
eSBoYW5kbGUgZWFjaAorICAgICAgICAgICAgICAgICMgY29tbWl0IGluIGEgY29tbWl0IHJhbmdl
LCBjb21taXQgZWFjaCBjaGVycnkgcGljayBzbyB0aGV5J2xsIGdldCBkY29tbWl0dGVkIHNlcGFy
YXRlbHkuCisgICAgICAgICAgICAgICAgc2VsZi5ydW4oWydnaXQnLCAnY2hlcnJ5LXBpY2snLCAn
LS1uby1jb21taXQnLCBjb21taXRdKQorCisgICAgICAgICAgICBzZWxmLnJ1bihbJ2dpdCcsICdj
b21taXQnLCAnLW0nLCBtZXNzYWdlXSkKKyAgICAgICAgICAgIG91dHB1dCA9IHNlbGYucHVzaF9s
b2NhbF9jb21taXRzX3RvX3NlcnZlcih1c2VybmFtZT11c2VybmFtZSwgcGFzc3dvcmQ9cGFzc3dv
cmQpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBsb2coIkNPTU1J
VCBGQUlMRUQ6ICIgKyBzdHIoZSkpCisgICAgICAgICAgICBvdXRwdXQgPSAiQ29tbWl0IGZhaWxl
ZC4iCisgICAgICAgICAgICBjb21taXRfc3VjY2VlZGVkID0gRmFsc2UKKyAgICAgICAgZmluYWxs
eToKKyAgICAgICAgICAgICMgQW5kIHRoZW4gc3dhcCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBicmFu
Y2ggYW5kIGNsZWFuIHVwLgorICAgICAgICAgICAgc2VsZi5jbGVhbl93b3JraW5nX2RpcmVjdG9y
eSgpCisgICAgICAgICAgICBzZWxmLnJ1bihbJ2dpdCcsICdjaGVja291dCcsICctcScsIGJyYW5j
aF9uYW1lXSkKKyAgICAgICAgICAgIHNlbGYuZGVsZXRlX2JyYW5jaChNRVJHRV9CUkFOQ0hfTkFN
RSkKKworICAgICAgICByZXR1cm4gb3V0cHV0CisKKyAgICBkZWYgc3ZuX2NvbW1pdF9sb2coc2Vs
Ziwgc3ZuX3JldmlzaW9uKToKKyAgICAgICAgc3ZuX3JldmlzaW9uID0gc2VsZi5zdHJpcF9yX2Zy
b21fc3ZuX3JldmlzaW9uKHN2bl9yZXZpc2lvbikKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuKFsn
Z2l0JywgJ3N2bicsICdsb2cnLCAnLXInLCBzdm5fcmV2aXNpb25dKQorCisgICAgZGVmIGxhc3Rf
c3ZuX2NvbW1pdF9sb2coc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bihbJ2dpdCcsICdz
dm4nLCAnbG9nJywgJy0tbGltaXQ9MSddKQorCisgICAgIyBHaXQtc3BlY2lmaWMgbWV0aG9kczoK
KyAgICBkZWYgX2JyYW5jaF9yZWZfZXhpc3RzKHNlbGYsIGJyYW5jaF9yZWYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5ydW4oWydnaXQnLCAnc2hvdy1yZWYnLCAnLS1xdWlldCcsICctLXZlcmlmeScs
IGJyYW5jaF9yZWZdLCByZXR1cm5fZXhpdF9jb2RlPVRydWUpID09IDAKKworICAgIGRlZiBkZWxl
dGVfYnJhbmNoKHNlbGYsIGJyYW5jaF9uYW1lKToKKyAgICAgICAgaWYgc2VsZi5fYnJhbmNoX3Jl
Zl9leGlzdHMoJ3JlZnMvaGVhZHMvJyArIGJyYW5jaF9uYW1lKToKKyAgICAgICAgICAgIHNlbGYu
cnVuKFsnZ2l0JywgJ2JyYW5jaCcsICctRCcsIGJyYW5jaF9uYW1lXSkKKworICAgIGRlZiByZW1v
dGVfbWVyZ2VfYmFzZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuKFsnZ2l0JywgJ21l
cmdlLWJhc2UnLCBzZWxmLnJlbW90ZV9icmFuY2hfcmVmKCksICdIRUFEJ10pLnN0cmlwKCkKKwor
ICAgIGRlZiByZW1vdGVfYnJhbmNoX3JlZihzZWxmKToKKyAgICAgICAgIyBVc2UgcmVmZXJlbmNl
cyBzbyB0aGF0IHdlIGNhbiBhdm9pZCBjb2xsaXNpb25zLCBlLmcuIHdlIGRvbid0IHdhbnQgdG8g
b3BlcmF0ZSBvbiByZWZzL2hlYWRzL3RydW5rIGlmIGl0IGV4aXN0cy4KKyAgICAgICAgcmVtb3Rl
X2JyYW5jaF9yZWZzID0gR2l0LnJlYWRfZ2l0X2NvbmZpZygnc3ZuLXJlbW90ZS5zdm4uZmV0Y2gn
KQorICAgICAgICBpZiBub3QgcmVtb3RlX2JyYW5jaF9yZWZzOgorICAgICAgICAgICAgcmVtb3Rl
X21hc3Rlcl9yZWYgPSAncmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXInCisgICAgICAgICAgICBp
ZiBub3Qgc2VsZi5fYnJhbmNoX3JlZl9leGlzdHMocmVtb3RlX21hc3Rlcl9yZWYpOgorICAgICAg
ICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKG1lc3NhZ2U9IkNhbid0IGZpbmQgYSBicmFuY2gg
dG8gZGlmZiBhZ2FpbnN0LiBzdm4tcmVtb3RlLnN2bi5mZXRjaCBpcyBub3QgaW4gdGhlIGdpdCBj
b25maWcgYW5kICVzIGRvZXMgbm90IGV4aXN0IiAlIHJlbW90ZV9tYXN0ZXJfcmVmKQorICAgICAg
ICAgICAgcmV0dXJuIHJlbW90ZV9tYXN0ZXJfcmVmCisKKyAgICAgICAgIyBGSVhNRTogV2hhdCdz
IHRoZSByaWdodCBiZWhhdmlvciB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBzdm4tcmVtb3RlcyBs
aXN0ZWQ/CisgICAgICAgICMgRm9yIG5vdywganVzdCB1c2UgdGhlIGZpcnN0IG9uZS4KKyAgICAg
ICAgZmlyc3RfcmVtb3RlX2JyYW5jaF9yZWYgPSByZW1vdGVfYnJhbmNoX3JlZnMuc3BsaXQoJ1xu
JylbMF0KKyAgICAgICAgcmV0dXJuIGZpcnN0X3JlbW90ZV9icmFuY2hfcmVmLnNwbGl0KCc6Jylb
MV0KKworICAgIGRlZiBjb21taXRfbG9jYWxseV93aXRoX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSk6
CisgICAgICAgIHNlbGYucnVuKFsnZ2l0JywgJ2NvbW1pdCcsICctLWFsbCcsICctRicsICctJ10s
IGlucHV0PW1lc3NhZ2UpCisKKyAgICBkZWYgcHVzaF9sb2NhbF9jb21taXRzX3RvX3NlcnZlcihz
ZWxmLCB1c2VybmFtZT1Ob25lLCBwYXNzd29yZD1Ob25lKToKKyAgICAgICAgZGNvbW1pdF9jb21t
YW5kID0gWydnaXQnLCAnc3ZuJywgJ2Rjb21taXQnXQorICAgICAgICBpZiBzZWxmLmRyeXJ1bjoK
KyAgICAgICAgICAgIGRjb21taXRfY29tbWFuZC5hcHBlbmQoJy0tZHJ5LXJ1bicpCisgICAgICAg
IGlmIG5vdCBzZWxmLmhhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbShTVk4uc3ZuX3NlcnZlcl9y
ZWFsbSk6CisgICAgICAgICAgICByYWlzZSBBdXRoZW50aWNhdGlvbkVycm9yKFNWTi5zdm5fc2Vy
dmVyX2hvc3QsIHByb21wdF9mb3JfcGFzc3dvcmQ9VHJ1ZSkKKyAgICAgICAgaWYgdXNlcm5hbWU6
CisgICAgICAgICAgICBkY29tbWl0X2NvbW1hbmQuZXh0ZW5kKFsiLS11c2VybmFtZSIsIHVzZXJu
YW1lXSkKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5ydW4oZGNvbW1pdF9jb21tYW5kLCBlcnJvcl9o
YW5kbGVyPWNvbW1pdF9lcnJvcl9oYW5kbGVyLCBpbnB1dD1wYXNzd29yZCkKKyAgICAgICAgIyBS
ZXR1cm4gYSBzdHJpbmcgd2hpY2ggbG9va3MgbGlrZSBhIGNvbW1pdCBzbyB0aGF0IHRoaW5ncyB3
aGljaCBwYXJzZSB0aGlzIG91dHB1dCB3aWxsIHN1Y2NlZWQuCisgICAgICAgIGlmIHNlbGYuZHJ5
cnVuOgorICAgICAgICAgICAgb3V0cHV0ICs9ICJcbkNvbW1pdHRlZCByMCIKKyAgICAgICAgcmV0
dXJuIG91dHB1dAorCisgICAgIyBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcg
YXJndW1lbnQgZm9ybWF0czoKKyAgICAjIG5vIGFyZ3MgOiByZXYtbGlzdCB0cnVuay4uSEVBRAor
ICAgICMgQS4uQiAgICA6IHJldi1saXN0IEEuLkIKKyAgICAjIEEuLi5CICAgOiBlcnJvciEKKyAg
ICAjIEEgQiAgICAgOiBbQSwgQl0gIChkaWZmZXJlbnQgZnJvbSBnaXQgZGlmZiwgd2hpY2ggd291
bGQgdXNlICJyZXYtbGlzdCBBLi5CIikKKyAgICBkZWYgY29tbWl0X2lkc19mcm9tX2NvbW1pdGlz
aF9hcmd1bWVudHMoc2VsZiwgYXJncyk6CisgICAgICAgIGlmIG5vdCBsZW4oYXJncyk6CisgICAg
ICAgICAgICBhcmdzLmFwcGVuZCgnJXMuLkhFQUQnICUgc2VsZi5yZW1vdGVfYnJhbmNoX3JlZigp
KQorCisgICAgICAgIGNvbW1pdF9pZHMgPSBbXQorICAgICAgICBmb3IgY29tbWl0aXNoIGluIGFy
Z3M6CisgICAgICAgICAgICBpZiAnLi4uJyBpbiBjb21taXRpc2g6CisgICAgICAgICAgICAgICAg
cmFpc2UgU2NyaXB0RXJyb3IobWVzc2FnZT0iJy4uLicgaXMgbm90IHN1cHBvcnRlZCAoZm91bmQg
aW4gJyVzJykuIERpZCB5b3UgbWVhbiAnLi4nPyIgJSBjb21taXRpc2gpCisgICAgICAgICAgICBl
bGlmICcuLicgaW4gY29tbWl0aXNoOgorICAgICAgICAgICAgICAgIGNvbW1pdF9pZHMgKz0gcmV2
ZXJzZWQoc2VsZi5ydW4oWydnaXQnLCAncmV2LWxpc3QnLCBjb21taXRpc2hdKS5zcGxpdGxpbmVz
KCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgVHVybiBzaW5nbGUgY29t
bWl0cyBvciBicmFuY2ggb3IgdGFnIG5hbWVzIGludG8gY29tbWl0IGlkcy4KKyAgICAgICAgICAg
ICAgICBjb21taXRfaWRzICs9IHNlbGYucnVuKFsnZ2l0JywgJ3Jldi1wYXJzZScsICctLXJldnMt
b25seScsIGNvbW1pdGlzaF0pLnNwbGl0bGluZXMoKQorICAgICAgICByZXR1cm4gY29tbWl0X2lk
cworCisgICAgZGVmIGNvbW1pdF9tZXNzYWdlX2Zvcl9sb2NhbF9jb21taXQoc2VsZiwgY29tbWl0
X2lkKToKKyAgICAgICAgY29tbWl0X2xpbmVzID0gc2VsZi5ydW4oWydnaXQnLCAnY2F0LWZpbGUn
LCAnY29tbWl0JywgY29tbWl0X2lkXSkuc3BsaXRsaW5lcygpCisKKyAgICAgICAgIyBTa2lwIHRo
ZSBnaXQgaGVhZGVycy4KKyAgICAgICAgZmlyc3RfbGluZV9hZnRlcl9oZWFkZXJzID0gMAorICAg
ICAgICBmb3IgbGluZSBpbiBjb21taXRfbGluZXM6CisgICAgICAgICAgICBmaXJzdF9saW5lX2Fm
dGVyX2hlYWRlcnMgKz0gMQorICAgICAgICAgICAgaWYgbGluZSA9PSAiIjoKKyAgICAgICAgICAg
ICAgICBicmVhaworICAgICAgICByZXR1cm4gQ29tbWl0TWVzc2FnZShjb21taXRfbGluZXNbZmly
c3RfbGluZV9hZnRlcl9oZWFkZXJzOl0pCisKKyAgICBkZWYgZmlsZXNfY2hhbmdlZF9zdW1tYXJ5
X2Zvcl9jb21taXQoc2VsZiwgY29tbWl0X2lkKToKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuKFsn
Z2l0JywgJ2RpZmYtdHJlZScsICctLXNob3J0c3RhdCcsICctLW5vLWNvbW1pdC1pZCcsIGNvbW1p
dF9pZF0pCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291
dC9zY20vc2NtLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2Nt
L3NjbS5weQppbmRleCA5MDBlY2ViODlmNWFiNzE2Mzk5NGMxMTRlZTE3YTc3ZGJkZGQzZWQxLi4y
NTE2YTdiNDhlYTYwNTkyMTQzMTM3YmViNTU4YTNkMjFhOTRkNDdiIDEwMDY0NAotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtLnB5CisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY20ucHkKQEAgLTM1LDk4ICsz
NSwxNyBAQCBpbXBvcnQgcmUKIGltcG9ydCBzeXMKIGltcG9ydCBzaHV0aWwKIAotZnJvbSB3ZWJr
aXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCiBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uZGVwcmVjYXRlZF9sb2dnaW5nIGltcG9ydCBlcnJvciwgbG9nCiBmcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUsIHJ1bl9jb21tYW5k
LCBTY3JpcHRFcnJvcgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBvc3BhdGgK
IAogCi1kZWYgZmluZF9jaGVja291dF9yb290KCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgY3VycmVu
dCBjaGVja291dCByb290IChhcyBkZXRlcm1pbmVkIGJ5IGRlZmF1bHRfc2NtKCkuCi0KLSAgICBS
ZXR1cm5zIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB0b3Agb2YgdGhlIFdlYktpdCBjaGVja291
dCwgb3IgTm9uZQotICAgIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkLgotCi0gICAgIiIiCi0g
ICAgc2NtX3N5c3RlbSA9IGRlZmF1bHRfc2NtKCkKLSAgICBpZiBzY21fc3lzdGVtOgotICAgICAg
ICByZXR1cm4gc2NtX3N5c3RlbS5jaGVja291dF9yb290Ci0gICAgcmV0dXJuIE5vbmUKLQotCi1k
ZWYgZGVmYXVsdF9zY20ocGF0Y2hfZGlyZWN0b3JpZXM9Tm9uZSk6Ci0gICAgIiIiUmV0dXJuIHRo
ZSBkZWZhdWx0IFNDTSBvYmplY3QgYXMgZGV0ZXJtaW5lZCBieSB0aGUgQ1dEIGFuZCBydW5uaW5n
IGNvZGUuCi0KLSAgICBSZXR1cm5zIHRoZSBkZWZhdWx0IFNDTSBvYmplY3QgZm9yIHRoZSBjdXJy
ZW50IHdvcmtpbmcgZGlyZWN0b3J5OyBpZiB0aGUKLSAgICBDV0QgaXMgbm90IGluIGEgY2hlY2tv
dXQsIHRoZW4gd2UgYXR0ZW1wdCB0byBmaWd1cmUgb3V0IGlmIHRoZSBTQ00gbW9kdWxlCi0gICAg
aXRzZWxmIGlzIHBhcnQgb2YgYSBjaGVja291dCwgYW5kIHJldHVybiB0aGF0IG9uZS4gSWYgbmVp
dGhlciBpcyBwYXJ0IG9mCi0gICAgYSBjaGVja291dCwgTm9uZSBpcyByZXR1cm5lZC4KLQotICAg
ICIiIgotICAgIGN3ZCA9IG9zLmdldGN3ZCgpCi0gICAgc2NtX3N5c3RlbSA9IGRldGVjdF9zY21f
c3lzdGVtKGN3ZCwgcGF0Y2hfZGlyZWN0b3JpZXMpCi0gICAgaWYgbm90IHNjbV9zeXN0ZW06Ci0g
ICAgICAgIHNjcmlwdF9kaXJlY3RvcnkgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRo
KF9fZmlsZV9fKSkKLSAgICAgICAgc2NtX3N5c3RlbSA9IGRldGVjdF9zY21fc3lzdGVtKHNjcmlw
dF9kaXJlY3RvcnksIHBhdGNoX2RpcmVjdG9yaWVzKQotICAgICAgICBpZiBzY21fc3lzdGVtOgot
ICAgICAgICAgICAgbG9nKCJUaGUgY3VycmVudCBkaXJlY3RvcnkgKCVzKSBpcyBub3QgYSBXZWJL
aXQgY2hlY2tvdXQsIHVzaW5nICVzIiAlIChjd2QsIHNjbV9zeXN0ZW0uY2hlY2tvdXRfcm9vdCkp
Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBlcnJvcigiRkFUQUw6IEZhaWxlZCB0byBkZXRl
cm1pbmUgdGhlIFNDTSBzeXN0ZW0gZm9yIGVpdGhlciAlcyBvciAlcyIgJSAoY3dkLCBzY3JpcHRf
ZGlyZWN0b3J5KSkKLSAgICByZXR1cm4gc2NtX3N5c3RlbQotCi0KLWRlZiBkZXRlY3Rfc2NtX3N5
c3RlbShwYXRoLCBwYXRjaF9kaXJlY3Rvcmllcz1Ob25lKToKLSAgICBhYnNvbHV0ZV9wYXRoID0g
b3MucGF0aC5hYnNwYXRoKHBhdGgpCi0KLSAgICBpZiBwYXRjaF9kaXJlY3RvcmllcyA9PSBbXToK
LSAgICAgICAgcGF0Y2hfZGlyZWN0b3JpZXMgPSBOb25lCi0KLSAgICBpZiBTVk4uaW5fd29ya2lu
Z19kaXJlY3RvcnkoYWJzb2x1dGVfcGF0aCk6Ci0gICAgICAgIHJldHVybiBTVk4oY3dkPWFic29s
dXRlX3BhdGgsIHBhdGNoX2RpcmVjdG9yaWVzPXBhdGNoX2RpcmVjdG9yaWVzKQotCi0gICAgaWYg
R2l0LmluX3dvcmtpbmdfZGlyZWN0b3J5KGFic29sdXRlX3BhdGgpOgotICAgICAgICByZXR1cm4g
R2l0KGN3ZD1hYnNvbHV0ZV9wYXRoKQotCi0gICAgcmV0dXJuIE5vbmUKLQotCi1kZWYgZmlyc3Rf
bm9uX2VtcHR5X2xpbmVfYWZ0ZXJfaW5kZXgobGluZXMsIGluZGV4PTApOgotICAgIGZpcnN0X25v
bl9lbXB0eV9saW5lID0gaW5kZXgKLSAgICBmb3IgbGluZSBpbiBsaW5lc1tpbmRleDpdOgotICAg
ICAgICBpZiByZS5tYXRjaCgiXlxzKiQiLCBsaW5lKToKLSAgICAgICAgICAgIGZpcnN0X25vbl9l
bXB0eV9saW5lICs9IDEKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGJyZWFrCi0gICAgcmV0
dXJuIGZpcnN0X25vbl9lbXB0eV9saW5lCi0KLQotY2xhc3MgQ29tbWl0TWVzc2FnZToKLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZSk6Ci0gICAgICAgIHNlbGYubWVzc2FnZV9saW5lcyA9
IG1lc3NhZ2VbZmlyc3Rfbm9uX2VtcHR5X2xpbmVfYWZ0ZXJfaW5kZXgobWVzc2FnZSwgMCk6XQot
Ci0gICAgZGVmIGJvZHkoc2VsZiwgbHN0cmlwPUZhbHNlKToKLSAgICAgICAgbGluZXMgPSBzZWxm
Lm1lc3NhZ2VfbGluZXNbZmlyc3Rfbm9uX2VtcHR5X2xpbmVfYWZ0ZXJfaW5kZXgoc2VsZi5tZXNz
YWdlX2xpbmVzLCAxKTpdCi0gICAgICAgIGlmIGxzdHJpcDoKLSAgICAgICAgICAgIGxpbmVzID0g
W2xpbmUubHN0cmlwKCkgZm9yIGxpbmUgaW4gbGluZXNdCi0gICAgICAgIHJldHVybiAiXG4iLmpv
aW4obGluZXMpICsgIlxuIgotCi0gICAgZGVmIGRlc2NyaXB0aW9uKHNlbGYsIGxzdHJpcD1GYWxz
ZSwgc3RyaXBfdXJsPUZhbHNlKToKLSAgICAgICAgbGluZSA9IHNlbGYubWVzc2FnZV9saW5lc1sw
XQotICAgICAgICBpZiBsc3RyaXA6Ci0gICAgICAgICAgICBsaW5lID0gbGluZS5sc3RyaXAoKQot
ICAgICAgICBpZiBzdHJpcF91cmw6Ci0gICAgICAgICAgICBsaW5lID0gcmUuc3ViKCJeKFxzKik8
Lis+ICIsICJcMSIsIGxpbmUpCi0gICAgICAgIHJldHVybiBsaW5lCi0KLSAgICBkZWYgbWVzc2Fn
ZShzZWxmKToKLSAgICAgICAgcmV0dXJuICJcbiIuam9pbihzZWxmLm1lc3NhZ2VfbGluZXMpICsg
IlxuIgotCi0KIGNsYXNzIENoZWNrb3V0TmVlZHNVcGRhdGUoU2NyaXB0RXJyb3IpOgogICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBzY3JpcHRfYXJncywgZXhpdF9jb2RlLCBvdXRwdXQsIGN3ZCk6CiAg
ICAgICAgIFNjcmlwdEVycm9yLl9faW5pdF9fKHNlbGYsIHNjcmlwdF9hcmdzPXNjcmlwdF9hcmdz
LCBleGl0X2NvZGU9ZXhpdF9jb2RlLCBvdXRwdXQ9b3V0cHV0LCBjd2Q9Y3dkKQogCiAKKyMgRklY
TUU6IFNob3VsZCBiZSBtb3ZlZCBvbnRvIFNDTQogZGVmIGNvbW1pdF9lcnJvcl9oYW5kbGVyKGVy
cm9yKToKICAgICBpZiByZS5zZWFyY2goInJlc291cmNlIG91dCBvZiBkYXRlIiwgZXJyb3Iub3V0
cHV0KToKICAgICAgICAgcmFpc2UgQ2hlY2tvdXROZWVkc1VwZGF0ZShzY3JpcHRfYXJncz1lcnJv
ci5zY3JpcHRfYXJncywgZXhpdF9jb2RlPWVycm9yLmV4aXRfY29kZSwgb3V0cHV0PWVycm9yLm91
dHB1dCwgY3dkPWVycm9yLmN3ZCkKQEAgLTMyNCw3MDEgKzI0MywzIEBAIGNsYXNzIFNDTToKIAog
ICAgIGRlZiBsb2NhbF9jb21taXRzKHNlbGYpOgogICAgICAgICByZXR1cm4gW10KLQotCi0jIEEg
bWl4aW4gY2xhc3MgdGhhdCByZXByZXNlbnRzIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGZvciBTVk4g
YW5kIEdpdC1TVk4uCi1jbGFzcyBTVk5SZXBvc2l0b3J5OgotICAgIGRlZiBoYXNfYXV0aG9yaXph
dGlvbl9mb3JfcmVhbG0oc2VsZiwgcmVhbG0sIGhvbWVfZGlyZWN0b3J5PW9zLmdldGVudigiSE9N
RSIpKToKLSAgICAgICAgIyBBc3N1bWVzIGZpbmQgYW5kIGdyZXAgYXJlIGluc3RhbGxlZC4KLSAg
ICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKGhvbWVfZGlyZWN0b3J5LCAi
LnN1YnZlcnNpb24iKSk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgZmluZF9h
cmdzID0gWyJmaW5kIiwgIi5zdWJ2ZXJzaW9uIiwgIi10eXBlIiwgImYiLCAiLWV4ZWMiLCAiZ3Jl
cCIsICItcSIsIHJlYWxtLCAie30iLCAiOyIsICItcHJpbnQiXQotICAgICAgICBmaW5kX291dHB1
dCA9IHNlbGYucnVuKGZpbmRfYXJncywgY3dkPWhvbWVfZGlyZWN0b3J5LCBlcnJvcl9oYW5kbGVy
PUV4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IpLnJzdHJpcCgpCi0gICAgICAgIGlmIG5vdCBmaW5kX291
dHB1dCBvciBub3Qgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGhvbWVfZGlyZWN0b3J5LCBm
aW5kX291dHB1dCkpOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICMgU3VidmVy
c2lvbiBlaXRoZXIgc3RvcmVzIHRoZSBwYXNzd29yZCBpbiB0aGUgY3JlZGVudGlhbCBmaWxlLCBp
bmRpY2F0ZWQgYnkgdGhlIHByZXNlbmNlIG9mIHRoZSBrZXkgInBhc3N3b3JkIiwKLSAgICAgICAg
IyBvciB1c2VzIHRoZSBzeXN0ZW0gcGFzc3dvcmQgc3RvcmUgKGUuZy4gS2V5Y2hhaW4gb24gTWFj
IE9TIFgpIGFzIGluZGljYXRlZCBieSB0aGUgcHJlc2VuY2Ugb2YgdGhlIGtleSAicGFzc3R5cGUi
LgotICAgICAgICAjIFdlIGFzc3VtZSB0aGF0IHRoZXNlIGtleXMgd2lsbCBub3QgY29pbmNpZGUg
d2l0aCB0aGUgYWN0dWFsIGNyZWRlbnRpYWwgZGF0YSAoZS5nLiB0aGF0IGEgcGVyc29uJ3MgdXNl
cm5hbWUKLSAgICAgICAgIyBpc24ndCAicGFzc3dvcmQiKSBzbyB0aGF0IHdlIGNhbiB1c2UgZ3Jl
cC4KLSAgICAgICAgaWYgc2VsZi5ydW4oWyJncmVwIiwgInBhc3N3b3JkIiwgZmluZF9vdXRwdXRd
LCBjd2Q9aG9tZV9kaXJlY3RvcnksIHJldHVybl9leGl0X2NvZGU9VHJ1ZSkgPT0gMDoKLSAgICAg
ICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBzZWxmLnJ1bihbImdyZXAiLCAicGFz
c3R5cGUiLCBmaW5kX291dHB1dF0sIGN3ZD1ob21lX2RpcmVjdG9yeSwgcmV0dXJuX2V4aXRfY29k
ZT1UcnVlKSA9PSAwCi0KLQotY2xhc3MgU1ZOKFNDTSwgU1ZOUmVwb3NpdG9yeSk6Ci0gICAgIyBG
SVhNRTogVGhlc2UgYmVsb25nIGluIGNvbW1vbi5jb25maWcudXJscwotICAgIHN2bl9zZXJ2ZXJf
aG9zdCA9ICJzdm4ud2Via2l0Lm9yZyIKLSAgICBzdm5fc2VydmVyX3JlYWxtID0gIjxodHRwOi8v
c3ZuLndlYmtpdC5vcmc6ODA+IE1hYyBPUyBGb3JnZSIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBjd2QsIHBhdGNoX2RpcmVjdG9yaWVzLCBleGVjdXRpdmU9Tm9uZSk6Ci0gICAgICAgIFNDTS5f
X2luaXRfXyhzZWxmLCBjd2QsIGV4ZWN1dGl2ZSkKLSAgICAgICAgc2VsZi5fYm9ndXNfZGlyID0g
Tm9uZQotICAgICAgICBpZiBwYXRjaF9kaXJlY3RvcmllcyA9PSBbXToKLSAgICAgICAgICAgICMg
RklYTUU6IFNjcmlwdEVycm9yIGlzIGZvciBFeGVjdXRpdmUsIHRoaXMgc2hvdWxkIHByb2JhYmx5
IGJlIGEgbm9ybWFsIEV4Y2VwdGlvbi4KLSAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKHNj
cmlwdF9hcmdzPXN2bl9pbmZvX2FyZ3MsIG1lc3NhZ2U9J0VtcHR5IGxpc3Qgb2YgcGF0Y2ggZGly
ZWN0b3JpZXMgcGFzc2VkIHRvIFNDTS5fX2luaXRfXycpCi0gICAgICAgIGVsaWYgcGF0Y2hfZGly
ZWN0b3JpZXMgPT0gTm9uZToKLSAgICAgICAgICAgIHNlbGYuX3BhdGNoX2RpcmVjdG9yaWVzID0g
W29zcGF0aC5yZWxwYXRoKGN3ZCwgc2VsZi5jaGVja291dF9yb290KV0KLSAgICAgICAgZWxzZToK
LSAgICAgICAgICAgIHNlbGYuX3BhdGNoX2RpcmVjdG9yaWVzID0gcGF0Y2hfZGlyZWN0b3JpZXMK
LQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgaW5fd29ya2luZ19kaXJlY3RvcnkocGF0aCk6
Ci0gICAgICAgIHJldHVybiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihwYXRoLCAnLnN2bicp
KQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGZpbmRfdXVpZChjbHMsIHBhdGgpOgotICAg
ICAgICBpZiBub3QgY2xzLmluX3dvcmtpbmdfZGlyZWN0b3J5KHBhdGgpOgotICAgICAgICAgICAg
cmV0dXJuIE5vbmUKLSAgICAgICAgcmV0dXJuIGNscy52YWx1ZV9mcm9tX3N2bl9pbmZvKHBhdGgs
ICdSZXBvc2l0b3J5IFVVSUQnKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHZhbHVlX2Zy
b21fc3ZuX2luZm8oY2xzLCBwYXRoLCBmaWVsZF9uYW1lKToKLSAgICAgICAgc3ZuX2luZm9fYXJn
cyA9IFsnc3ZuJywgJ2luZm8nLCBwYXRoXQotICAgICAgICBpbmZvX291dHB1dCA9IHJ1bl9jb21t
YW5kKHN2bl9pbmZvX2FyZ3MpLnJzdHJpcCgpCi0gICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKCJe
JXM6ICg/UDx2YWx1ZT4uKykkIiAlIGZpZWxkX25hbWUsIGluZm9fb3V0cHV0LCByZS5NVUxUSUxJ
TkUpCi0gICAgICAgIGlmIG5vdCBtYXRjaDoKLSAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9y
KHNjcmlwdF9hcmdzPXN2bl9pbmZvX2FyZ3MsIG1lc3NhZ2U9J3N2biBpbmZvIGRpZCBub3QgY29u
dGFpbiBhICVzLicgJSBmaWVsZF9uYW1lKQotICAgICAgICByZXR1cm4gbWF0Y2guZ3JvdXAoJ3Zh
bHVlJykKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgZmluZF9jaGVja291dF9yb290KHBh
dGgpOgotICAgICAgICB1dWlkID0gU1ZOLmZpbmRfdXVpZChwYXRoKQotICAgICAgICAjIElmIHxw
YXRofCBpcyBub3QgaW4gYSB3b3JraW5nIGRpcmVjdG9yeSwgd2UncmUgc3VwcG9zZWQgdG8gcmV0
dXJuIHxwYXRofC4KLSAgICAgICAgaWYgbm90IHV1aWQ6Ci0gICAgICAgICAgICByZXR1cm4gcGF0
aAotICAgICAgICAjIFNlYXJjaCB1cCB0aGUgZGlyZWN0b3J5IGhpZXJhcmNoeSB1bnRpbCB3ZSBm
aW5kIGEgZGlmZmVyZW50IFVVSUQuCi0gICAgICAgIGxhc3RfcGF0aCA9IE5vbmUKLSAgICAgICAg
d2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGlmIHV1aWQgIT0gU1ZOLmZpbmRfdXVpZChwYXRoKToK
LSAgICAgICAgICAgICAgICByZXR1cm4gbGFzdF9wYXRoCi0gICAgICAgICAgICBsYXN0X3BhdGgg
PSBwYXRoCi0gICAgICAgICAgICAocGF0aCwgbGFzdF9jb21wb25lbnQpID0gb3MucGF0aC5zcGxp
dChwYXRoKQotICAgICAgICAgICAgaWYgbGFzdF9wYXRoID09IHBhdGg6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY29tbWl0X3N1Y2Nl
c3NfcmVnZXhwKCk6Ci0gICAgICAgIHJldHVybiAiXkNvbW1pdHRlZCByZXZpc2lvbiAoP1A8c3Zu
X3JldmlzaW9uPlxkKylcLiQiCi0KLSAgICBAbWVtb2l6ZWQKLSAgICBkZWYgc3ZuX3ZlcnNpb24o
c2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnJ1bihbJ3N2bicsICctLXZlcnNpb24nLCAnLS1x
dWlldCddKQotCi0gICAgZGVmIHdvcmtpbmdfZGlyZWN0b3J5X2lzX2NsZWFuKHNlbGYpOgotICAg
ICAgICByZXR1cm4gc2VsZi5ydW4oWyJzdm4iLCAiZGlmZiJdLCBjd2Q9c2VsZi5jaGVja291dF9y
b290LCBkZWNvZGVfb3V0cHV0PUZhbHNlKSA9PSAiIgotCi0gICAgZGVmIGNsZWFuX3dvcmtpbmdf
ZGlyZWN0b3J5KHNlbGYpOgotICAgICAgICAjIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gbG9ja3Mg
bHlpbmcgYXJvdW5kIGZyb20gYSBwcmV2aW91c2x5IGFib3J0ZWQgc3ZuIGludm9jYXRpb24uCi0g
ICAgICAgICMgVGhpcyBpcyBzbGlnaHRseSBkYW5nZXJvdXMsIGFzIGl0J3MgcG9zc2libGUgdGhl
IHVzZXIgaXMgcnVubmluZyBhbm90aGVyIHN2biBwcm9jZXNzCi0gICAgICAgICMgb24gdGhpcyBj
aGVja291dCBhdCB0aGUgc2FtZSB0aW1lLiAgSG93ZXZlciwgaXQncyBtdWNoIG1vcmUgbGlrZWx5
IHRoYXQgd2UncmUgcnVubmluZwotICAgICAgICAjIHVuZGVyIHdpbmRvd3MgYW5kIHN2biBqdXN0
IHN1Y2tzIChvciB0aGUgdXNlciBpbnRlcnJ1cHRlZCBzdm4gYW5kIGl0IGZhaWxlZCB0byBjbGVh
biB1cCkuCi0gICAgICAgIHNlbGYucnVuKFsic3ZuIiwgImNsZWFudXAiXSwgY3dkPXNlbGYuY2hl
Y2tvdXRfcm9vdCkKLQotICAgICAgICAjIHN2biByZXZlcnQgLVIgaXMgbm90IGFzIGF3ZXNvbWUg
YXMgZ2l0IHJlc2V0IC0taGFyZC4KLSAgICAgICAgIyBJdCB3aWxsIGxlYXZlIGFkZGVkIGZpbGVz
IGFyb3VuZCwgY2F1c2luZyBsYXRlciBzdm4gdXBkYXRlCi0gICAgICAgICMgY2FsbHMgdG8gZmFp
bCBvbiB0aGUgYm90cy4gIFdlIG1ha2UgdGhpcyBtaXJyb3IgZ2l0IHJlc2V0IC0taGFyZAotICAg
ICAgICAjIGJ5IGRlbGV0aW5nIGFueSBhZGRlZCBmaWxlcyBhcyB3ZWxsLgotICAgICAgICBhZGRl
ZF9maWxlcyA9IHJldmVyc2VkKHNvcnRlZChzZWxmLmFkZGVkX2ZpbGVzKCkpKQotICAgICAgICAj
IGFkZGVkX2ZpbGVzKCkgcmV0dXJucyBkaXJlY3RvcmllcyBmb3IgU1ZOLCB3ZSB3YWxrIHRoZSBm
aWxlcyBpbiByZXZlcnNlIHBhdGgKLSAgICAgICAgIyBsZW5ndGggb3JkZXIgc28gdGhhdCB3ZSBy
ZW1vdmUgZmlsZXMgYmVmb3JlIHdlIHRyeSB0byByZW1vdmUgdGhlIGRpcmVjdG9yaWVzLgotICAg
ICAgICBzZWxmLnJ1bihbInN2biIsICJyZXZlcnQiLCAiLVIiLCAiLiJdLCBjd2Q9c2VsZi5jaGVj
a291dF9yb290KQotICAgICAgICBmb3IgcGF0aCBpbiBhZGRlZF9maWxlczoKLSAgICAgICAgICAg
ICMgVGhpcyBpcyByb2J1c3QgYWdhaW5zdCBjd2QgIT0gc2VsZi5jaGVja291dF9yb290Ci0gICAg
ICAgICAgICBhYnNvbHV0ZV9wYXRoID0gc2VsZi5hYnNvbHV0ZV9wYXRoKHBhdGgpCi0gICAgICAg
ICAgICAjIENvbXBsZXRlbHkgbGFtZSB0aGF0IHRoZXJlIGlzIG5vIGVhc3kgd2F5IHRvIHJlbW92
ZSBib3RoIHR5cGVzIHdpdGggb25lIGNhbGwuCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGly
KHBhdGgpOgotICAgICAgICAgICAgICAgIG9zLnJtZGlyKGFic29sdXRlX3BhdGgpCi0gICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG9zLnJlbW92ZShhYnNvbHV0ZV9wYXRoKQotCi0g
ICAgZGVmIHN0YXR1c19jb21tYW5kKHNlbGYpOgotICAgICAgICByZXR1cm4gWydzdm4nLCAnc3Rh
dHVzJ10KLQotICAgIGRlZiBfc3RhdHVzX3JlZ2V4cChzZWxmLCBleHBlY3RlZF90eXBlcyk6Ci0g
ICAgICAgIGZpZWxkX2NvdW50ID0gNiBpZiBzZWxmLnN2bl92ZXJzaW9uKCkgPiAiMS42IiBlbHNl
IDUKLSAgICAgICAgcmV0dXJuICJeKD9QPHN0YXR1cz5bJXNdKS57JXN9ICg/UDxmaWxlbmFtZT4u
KykkIiAlIChleHBlY3RlZF90eXBlcywgZmllbGRfY291bnQpCi0KLSAgICBkZWYgX2FkZF9wYXJl
bnRfZGlyZWN0b3JpZXMoc2VsZiwgcGF0aCk6Ci0gICAgICAgICIiIkRvZXMgJ3N2biBhZGQnIHRv
IHRoZSBwYXRoIGFuZCBpdHMgcGFyZW50cy4iIiIKLSAgICAgICAgaWYgc2VsZi5pbl93b3JraW5n
X2RpcmVjdG9yeShwYXRoKToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBkaXJuYW1lID0g
b3MucGF0aC5kaXJuYW1lKHBhdGgpCi0gICAgICAgICMgV2UgaGF2ZSBkaXJuYW1lIGRpcmVjdHJ5
IC0gZW5zdXJlIGl0IGFkZGVkLgotICAgICAgICBpZiBkaXJuYW1lICE9IHBhdGg6Ci0gICAgICAg
ICAgICBzZWxmLl9hZGRfcGFyZW50X2RpcmVjdG9yaWVzKGRpcm5hbWUpCi0gICAgICAgIHNlbGYu
YWRkKHBhdGgpCi0KLSAgICBkZWYgYWRkKHNlbGYsIHBhdGgsIHJldHVybl9leGl0X2NvZGU9RmFs
c2UpOgotICAgICAgICBzZWxmLl9hZGRfcGFyZW50X2RpcmVjdG9yaWVzKG9zLnBhdGguZGlybmFt
ZShvcy5wYXRoLmFic3BhdGgocGF0aCkpKQotICAgICAgICByZXR1cm4gc2VsZi5ydW4oWyJzdm4i
LCAiYWRkIiwgcGF0aF0sIHJldHVybl9leGl0X2NvZGU9cmV0dXJuX2V4aXRfY29kZSkKLQotICAg
IGRlZiBkZWxldGUoc2VsZiwgcGF0aCk6Ci0gICAgICAgIHBhcmVudCwgYmFzZSA9IG9zLnBhdGgu
c3BsaXQob3MucGF0aC5hYnNwYXRoKHBhdGgpKQotICAgICAgICByZXR1cm4gc2VsZi5ydW4oWyJz
dm4iLCAiZGVsZXRlIiwgIi0tZm9yY2UiLCBiYXNlXSwgY3dkPXBhcmVudCkKLQotICAgIGRlZiBl
eGlzdHMoc2VsZiwgcGF0aCk6Ci0gICAgICAgIHJldHVybiBub3Qgc2VsZi5ydW4oWyJzdm4iLCAi
aW5mbyIsIHBhdGhdLCByZXR1cm5fZXhpdF9jb2RlPVRydWUsIGRlY29kZV9vdXRwdXQ9RmFsc2Up
Ci0KLSAgICBkZWYgY2hhbmdlZF9maWxlcyhzZWxmLCBnaXRfY29tbWl0PU5vbmUpOgotICAgICAg
ICBzdGF0dXNfY29tbWFuZCA9IFsic3ZuIiwgInN0YXR1cyJdCi0gICAgICAgIHN0YXR1c19jb21t
YW5kLmV4dGVuZChzZWxmLl9wYXRjaF9kaXJlY3RvcmllcykKLSAgICAgICAgIyBBQ0RNUjogQWRk
ZGVkLCBDb25mbGljdGVkLCBEZWxldGVkLCBNb2RpZmllZCBvciBSZXBsYWNlZAotICAgICAgICBy
ZXR1cm4gc2VsZi5ydW5fc3RhdHVzX2FuZF9leHRyYWN0X2ZpbGVuYW1lcyhzdGF0dXNfY29tbWFu
ZCwgc2VsZi5fc3RhdHVzX3JlZ2V4cCgiQUNETVIiKSkKLQotICAgIGRlZiBjaGFuZ2VkX2ZpbGVz
X2Zvcl9yZXZpc2lvbihzZWxmLCByZXZpc2lvbik6Ci0gICAgICAgICMgQXMgZmFyIGFzIEkgY2Fu
IHRlbGwgc3ZuIGRpZmYgLS1zdW1tYXJpemUgb3V0cHV0IGxvb2tzIGp1c3QgbGlrZSBzdm4gc3Rh
dHVzIG91dHB1dC4KLSAgICAgICAgIyBObyBmaWxlIGNvbnRlbnRzIHByaW50ZWQsIHRodXMgdXRm
LTggYXV0by1kZWNvZGluZyBpbiBzZWxmLnJ1biBpcyBmaW5lLgotICAgICAgICBzdGF0dXNfY29t
bWFuZCA9IFsic3ZuIiwgImRpZmYiLCAiLS1zdW1tYXJpemUiLCAiLWMiLCByZXZpc2lvbl0KLSAg
ICAgICAgcmV0dXJuIHNlbGYucnVuX3N0YXR1c19hbmRfZXh0cmFjdF9maWxlbmFtZXMoc3RhdHVz
X2NvbW1hbmQsIHNlbGYuX3N0YXR1c19yZWdleHAoIkFDRE1SIikpCi0KLSAgICBkZWYgcmV2aXNp
b25zX2NoYW5naW5nX2ZpbGUoc2VsZiwgcGF0aCwgbGltaXQ9NSk6Ci0gICAgICAgIHJldmlzaW9u
cyA9IFtdCi0gICAgICAgICMgc3ZuIGxvZyB3aWxsIGV4aXQoMSkgKGFuZCB0aHVzIHNlbGYucnVu
IHdpbGwgcmFpc2UpIGlmIHRoZSBwYXRoIGRvZXMgbm90IGV4aXN0LgotICAgICAgICBsb2dfY29t
bWFuZCA9IFsnc3ZuJywgJ2xvZycsICctLXF1aWV0JywgJy0tbGltaXQ9JXMnICUgbGltaXQsIHBh
dGhdCi0gICAgICAgIGZvciBsaW5lIGluIHNlbGYucnVuKGxvZ19jb21tYW5kLCBjd2Q9c2VsZi5j
aGVja291dF9yb290KS5zcGxpdGxpbmVzKCk6Ci0gICAgICAgICAgICBtYXRjaCA9IHJlLnNlYXJj
aCgnXnIoP1A8cmV2aXNpb24+XGQrKSAnLCBsaW5lKQotICAgICAgICAgICAgaWYgbm90IG1hdGNo
OgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICByZXZpc2lvbnMuYXBwZW5k
KGludChtYXRjaC5ncm91cCgncmV2aXNpb24nKSkpCi0gICAgICAgIHJldHVybiByZXZpc2lvbnMK
LQotICAgIGRlZiBjb25mbGljdGVkX2ZpbGVzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5y
dW5fc3RhdHVzX2FuZF9leHRyYWN0X2ZpbGVuYW1lcyhzZWxmLnN0YXR1c19jb21tYW5kKCksIHNl
bGYuX3N0YXR1c19yZWdleHAoIkMiKSkKLQotICAgIGRlZiBhZGRlZF9maWxlcyhzZWxmKToKLSAg
ICAgICAgcmV0dXJuIHNlbGYucnVuX3N0YXR1c19hbmRfZXh0cmFjdF9maWxlbmFtZXMoc2VsZi5z
dGF0dXNfY29tbWFuZCgpLCBzZWxmLl9zdGF0dXNfcmVnZXhwKCJBIikpCi0KLSAgICBkZWYgZGVs
ZXRlZF9maWxlcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYucnVuX3N0YXR1c19hbmRfZXh0
cmFjdF9maWxlbmFtZXMoc2VsZi5zdGF0dXNfY29tbWFuZCgpLCBzZWxmLl9zdGF0dXNfcmVnZXhw
KCJEIikpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHN1cHBvcnRzX2xvY2FsX2NvbW1p
dHMoKToKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBkZWYgZGlzcGxheV9uYW1lKHNlbGYp
OgotICAgICAgICByZXR1cm4gInN2biIKLQotICAgIGRlZiBoZWFkX3N2bl9yZXZpc2lvbihzZWxm
KToKLSAgICAgICAgcmV0dXJuIHNlbGYudmFsdWVfZnJvbV9zdm5faW5mbyhzZWxmLmNoZWNrb3V0
X3Jvb3QsICdSZXZpc2lvbicpCi0KLSAgICAjIEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91bGQgYmUg
b24gQ2hlY2tvdXQuCi0gICAgZGVmIGNyZWF0ZV9wYXRjaChzZWxmLCBnaXRfY29tbWl0PU5vbmUs
IGNoYW5nZWRfZmlsZXM9Tm9uZSk6Ci0gICAgICAgICIiIlJldHVybnMgYSBieXRlIGFycmF5IChz
dHIoKSkgcmVwcmVzZW50aW5nIHRoZSBwYXRjaCBmaWxlLgotICAgICAgICBQYXRjaCBmaWxlcyBh
cmUgZWZmZWN0aXZlbHkgYmluYXJ5IHNpbmNlIHRoZXkgbWF5IGNvbnRhaW4KLSAgICAgICAgZmls
ZXMgb2YgbXVsdGlwbGUgZGlmZmVyZW50IGVuY29kaW5ncy4iIiIKLSAgICAgICAgaWYgY2hhbmdl
ZF9maWxlcyA9PSBbXToKLSAgICAgICAgICAgIHJldHVybiAiIgotICAgICAgICBlbGlmIGNoYW5n
ZWRfZmlsZXMgPT0gTm9uZToKLSAgICAgICAgICAgIGNoYW5nZWRfZmlsZXMgPSBbXQotICAgICAg
ICByZXR1cm4gc2VsZi5ydW4oW3NlbGYuc2NyaXB0X3BhdGgoInN2bi1jcmVhdGUtcGF0Y2giKV0g
KyBjaGFuZ2VkX2ZpbGVzLAotICAgICAgICAgICAgY3dkPXNlbGYuY2hlY2tvdXRfcm9vdCwgcmV0
dXJuX3N0ZGVycj1GYWxzZSwKLSAgICAgICAgICAgIGRlY29kZV9vdXRwdXQ9RmFsc2UpCi0KLSAg
ICBkZWYgY29tbWl0dGVyX2VtYWlsX2Zvcl9yZXZpc2lvbihzZWxmLCByZXZpc2lvbik6Ci0gICAg
ICAgIHJldHVybiBzZWxmLnJ1bihbInN2biIsICJwcm9wZ2V0IiwgInN2bjphdXRob3IiLCAiLS1y
ZXZwcm9wIiwgIi1yIiwgcmV2aXNpb25dKS5yc3RyaXAoKQotCi0gICAgZGVmIGNvbnRlbnRzX2F0
X3JldmlzaW9uKHNlbGYsIHBhdGgsIHJldmlzaW9uKToKLSAgICAgICAgIiIiUmV0dXJucyBhIGJ5
dGUgYXJyYXkgKHN0cigpKSBjb250YWluaW5nIHRoZSBjb250ZW50cwotICAgICAgICBvZiBwYXRo
IEAgcmV2aXNpb24gaW4gdGhlIHJlcG9zaXRvcnkuIiIiCi0gICAgICAgIHJlbW90ZV9wYXRoID0g
IiVzLyVzIiAlIChzZWxmLl9yZXBvc2l0b3J5X3VybCgpLCBwYXRoKQotICAgICAgICByZXR1cm4g
c2VsZi5ydW4oWyJzdm4iLCAiY2F0IiwgIi1yIiwgcmV2aXNpb24sIHJlbW90ZV9wYXRoXSwgZGVj
b2RlX291dHB1dD1GYWxzZSkKLQotICAgIGRlZiBkaWZmX2Zvcl9yZXZpc2lvbihzZWxmLCByZXZp
c2lvbik6Ci0gICAgICAgICMgRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IHVzZSBjd2Q9c2Vs
Zi5jaGVja291dF9yb290Ci0gICAgICAgIHJldHVybiBzZWxmLnJ1bihbJ3N2bicsICdkaWZmJywg
Jy1jJywgcmV2aXNpb25dKQotCi0gICAgZGVmIF9ib2d1c19kaXJfbmFtZShzZWxmKToKLSAgICAg
ICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoIndpbiIpOgotICAgICAgICAgICAgcGFyZW50
X2RpciA9IHRlbXBmaWxlLmdldHRlbXBkaXIoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAg
cGFyZW50X2RpciA9IHN5cy5wYXRoWzBdICAjIHRlbXBkaXIgaXMgbm90IHNlY3VyZS4KLSAgICAg
ICAgcmV0dXJuIG9zLnBhdGguam9pbihwYXJlbnRfZGlyLCAidGVtcF9zdm5fY29uZmlnIikKLQot
ICAgIGRlZiBfc2V0dXBfYm9ndXNfZGlyKHNlbGYsIGxvZyk6Ci0gICAgICAgIHNlbGYuX2JvZ3Vz
X2RpciA9IHNlbGYuX2JvZ3VzX2Rpcl9uYW1lKCkKLSAgICAgICAgaWYgbm90IG9zLnBhdGguZXhp
c3RzKHNlbGYuX2JvZ3VzX2Rpcik6Ci0gICAgICAgICAgICBvcy5ta2RpcihzZWxmLl9ib2d1c19k
aXIpCi0gICAgICAgICAgICBzZWxmLl9kZWxldGVfYm9ndXNfZGlyID0gVHJ1ZQotICAgICAgICBl
bHNlOgotICAgICAgICAgICAgc2VsZi5fZGVsZXRlX2JvZ3VzX2RpciA9IEZhbHNlCi0gICAgICAg
IGlmIGxvZzoKLSAgICAgICAgICAgIGxvZy5kZWJ1ZygnICBIdG1sOiB0ZW1wIGNvbmZpZyBkaXI6
ICIlcyIuJywgc2VsZi5fYm9ndXNfZGlyKQotCi0gICAgZGVmIF90ZWFyZG93bl9ib2d1c19kaXIo
c2VsZiwgbG9nKToKLSAgICAgICAgaWYgc2VsZi5fZGVsZXRlX2JvZ3VzX2RpcjoKLSAgICAgICAg
ICAgIHNodXRpbC5ybXRyZWUoc2VsZi5fYm9ndXNfZGlyLCBUcnVlKQotICAgICAgICAgICAgaWYg
bG9nOgotICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygnICBIdG1sOiByZW1vdmVkIHRlbXAgY29u
ZmlnIGRpcjogIiVzIi4nLCBzZWxmLl9ib2d1c19kaXIpCi0gICAgICAgIHNlbGYuX2JvZ3VzX2Rp
ciA9IE5vbmUKLQotICAgIGRlZiBkaWZmX2Zvcl9maWxlKHNlbGYsIHBhdGgsIGxvZz1Ob25lKToK
LSAgICAgICAgc2VsZi5fc2V0dXBfYm9ndXNfZGlyKGxvZykKLSAgICAgICAgdHJ5OgotICAgICAg
ICAgICAgYXJncyA9IFsnc3ZuJywgJ2RpZmYnXQotICAgICAgICAgICAgaWYgc2VsZi5fYm9ndXNf
ZGlyOgotICAgICAgICAgICAgICAgIGFyZ3MgKz0gWyctLWNvbmZpZy1kaXInLCBzZWxmLl9ib2d1
c19kaXJdCi0gICAgICAgICAgICBhcmdzLmFwcGVuZChwYXRoKQotICAgICAgICAgICAgcmV0dXJu
IHNlbGYucnVuKGFyZ3MsIGN3ZD1zZWxmLmNoZWNrb3V0X3Jvb3QpCi0gICAgICAgIGZpbmFsbHk6
Ci0gICAgICAgICAgICBzZWxmLl90ZWFyZG93bl9ib2d1c19kaXIobG9nKQotCi0gICAgZGVmIHNo
b3dfaGVhZChzZWxmLCBwYXRoKToKLSAgICAgICAgcmV0dXJuIHNlbGYucnVuKFsnc3ZuJywgJ2Nh
dCcsICctcicsICdCQVNFJywgcGF0aF0sIGRlY29kZV9vdXRwdXQ9RmFsc2UpCi0KLSAgICBkZWYg
X3JlcG9zaXRvcnlfdXJsKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi52YWx1ZV9mcm9tX3N2
bl9pbmZvKHNlbGYuY2hlY2tvdXRfcm9vdCwgJ1VSTCcpCi0KLSAgICBkZWYgYXBwbHlfcmV2ZXJz
ZV9kaWZmKHNlbGYsIHJldmlzaW9uKToKLSAgICAgICAgIyAnLWMgLXJldmlzaW9uJyBhcHBsaWVz
IHRoZSBpbnZlcnNlIGRpZmYgb2YgJ3JldmlzaW9uJwotICAgICAgICBzdm5fbWVyZ2VfYXJncyA9
IFsnc3ZuJywgJ21lcmdlJywgJy0tbm9uLWludGVyYWN0aXZlJywgJy1jJywgJy0lcycgJSByZXZp
c2lvbiwgc2VsZi5fcmVwb3NpdG9yeV91cmwoKV0KLSAgICAgICAgbG9nKCJXQVJOSU5HOiBzdm4g
bWVyZ2UgaGFzIGJlZW4ga25vd24gdG8gdGFrZSBtb3JlIHRoYW4gMTAgbWludXRlcyB0byBjb21w
bGV0ZS4gIEl0IGlzIHJlY29tbWVuZGVkIHlvdSB1c2UgZ2l0IGZvciByb2xsb3V0cy4iKQotICAg
ICAgICBsb2coIlJ1bm5pbmcgJyVzJyIgJSAiICIuam9pbihzdm5fbWVyZ2VfYXJncykpCi0gICAg
ICAgICMgRklYTUU6IFNob3VsZCB0aGlzIHVzZSBjd2Q9c2VsZi5jaGVja291dF9yb290PwotICAg
ICAgICBzZWxmLnJ1bihzdm5fbWVyZ2VfYXJncykKLQotICAgIGRlZiByZXZlcnRfZmlsZXMoc2Vs
ZiwgZmlsZV9wYXRocyk6Ci0gICAgICAgICMgRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IHVz
ZSBjd2Q9c2VsZi5jaGVja291dF9yb290LgotICAgICAgICBzZWxmLnJ1bihbJ3N2bicsICdyZXZl
cnQnXSArIGZpbGVfcGF0aHMpCi0KLSAgICBkZWYgY29tbWl0X3dpdGhfbWVzc2FnZShzZWxmLCBt
ZXNzYWdlLCB1c2VybmFtZT1Ob25lLCBwYXNzd29yZD1Ob25lLCBnaXRfY29tbWl0PU5vbmUsIGZv
cmNlX3NxdWFzaD1GYWxzZSwgY2hhbmdlZF9maWxlcz1Ob25lKToKLSAgICAgICAgIyBnaXQtY29t
bWl0IGFuZCBmb3JjZSBhcmUgbm90IHVzZWQgYnkgU1ZOLgotICAgICAgICBzdm5fY29tbWl0X2Fy
Z3MgPSBbInN2biIsICJjb21taXQiXQotCi0gICAgICAgIGlmIG5vdCB1c2VybmFtZSBhbmQgbm90
IHNlbGYuaGFzX2F1dGhvcml6YXRpb25fZm9yX3JlYWxtKHNlbGYuc3ZuX3NlcnZlcl9yZWFsbSk6
Ci0gICAgICAgICAgICByYWlzZSBBdXRoZW50aWNhdGlvbkVycm9yKHNlbGYuc3ZuX3NlcnZlcl9o
b3N0KQotICAgICAgICBpZiB1c2VybmFtZToKLSAgICAgICAgICAgIHN2bl9jb21taXRfYXJncy5l
eHRlbmQoWyItLXVzZXJuYW1lIiwgdXNlcm5hbWVdKQotCi0gICAgICAgIHN2bl9jb21taXRfYXJn
cy5leHRlbmQoWyItbSIsIG1lc3NhZ2VdKQotCi0gICAgICAgIGlmIGNoYW5nZWRfZmlsZXM6Ci0g
ICAgICAgICAgICBzdm5fY29tbWl0X2FyZ3MuZXh0ZW5kKGNoYW5nZWRfZmlsZXMpCi0KLSAgICAg
ICAgaWYgc2VsZi5kcnlydW46Ci0gICAgICAgICAgICBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIo
IndlYmtpdHB5LmNvbW1vbi5zeXN0ZW0iKQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnV291bGQg
cnVuIFNWTiBjb21tYW5kOiAiJyArICIgIi5qb2luKHN2bl9jb21taXRfYXJncykgKyAnIicpCi0K
LSAgICAgICAgICAgICMgUmV0dXJuIGEgc3RyaW5nIHdoaWNoIGxvb2tzIGxpa2UgYSBjb21taXQg
c28gdGhhdCB0aGluZ3Mgd2hpY2ggcGFyc2UgdGhpcyBvdXRwdXQgd2lsbCBzdWNjZWVkLgotICAg
ICAgICAgICAgcmV0dXJuICJEcnkgcnVuLCBubyBjb21taXQuXG5Db21taXR0ZWQgcmV2aXNpb24g
MC4iCi0KLSAgICAgICAgcmV0dXJuIHNlbGYucnVuKHN2bl9jb21taXRfYXJncywgY3dkPXNlbGYu
Y2hlY2tvdXRfcm9vdCwgZXJyb3JfaGFuZGxlcj1jb21taXRfZXJyb3JfaGFuZGxlcikKLQotICAg
IGRlZiBzdm5fY29tbWl0X2xvZyhzZWxmLCBzdm5fcmV2aXNpb24pOgotICAgICAgICBzdm5fcmV2
aXNpb24gPSBzZWxmLnN0cmlwX3JfZnJvbV9zdm5fcmV2aXNpb24oc3ZuX3JldmlzaW9uKQotICAg
ICAgICByZXR1cm4gc2VsZi5ydW4oWydzdm4nLCAnbG9nJywgJy0tbm9uLWludGVyYWN0aXZlJywg
Jy0tcmV2aXNpb24nLCBzdm5fcmV2aXNpb25dKQotCi0gICAgZGVmIGxhc3Rfc3ZuX2NvbW1pdF9s
b2coc2VsZik6Ci0gICAgICAgICMgQkFTRSBpcyB0aGUgY2hlY2tvdXQgcmV2aXNpb24sIEhFQUQg
aXMgdGhlIHJlbW90ZSByZXBvc2l0b3J5IHJldmlzaW9uCi0gICAgICAgICMgaHR0cDovL3N2bmJv
b2sucmVkLWJlYW4uY29tL2VuLzEuMC9jaDAzczAzLmh0bWwKLSAgICAgICAgcmV0dXJuIHNlbGYu
c3ZuX2NvbW1pdF9sb2coJ0JBU0UnKQotCi0gICAgZGVmIHByb3BzZXQoc2VsZiwgcG5hbWUsIHB2
YWx1ZSwgcGF0aCk6Ci0gICAgICAgIGRpciwgYmFzZSA9IG9zLnBhdGguc3BsaXQocGF0aCkKLSAg
ICAgICAgcmV0dXJuIHNlbGYucnVuKFsnc3ZuJywgJ3BzZXQnLCBwbmFtZSwgcHZhbHVlLCBiYXNl
XSwgY3dkPWRpcikKLQotICAgIGRlZiBwcm9wZ2V0KHNlbGYsIHBuYW1lLCBwYXRoKToKLSAgICAg
ICAgZGlyLCBiYXNlID0gb3MucGF0aC5zcGxpdChwYXRoKQotICAgICAgICByZXR1cm4gc2VsZi5y
dW4oWydzdm4nLCAncGdldCcsIHBuYW1lLCBiYXNlXSwgY3dkPWRpcikuZW5jb2RlKCd1dGYtOCcp
LnJzdHJpcCgiXG4iKQotCi0KLSMgQWxsIGdpdC1zcGVjaWZpYyBsb2dpYyBzaG91bGQgZ28gaGVy
ZS4KLWNsYXNzIEdpdChTQ00sIFNWTlJlcG9zaXRvcnkpOgotCi0gICAgIyBHaXQgZG9lc24ndCBh
cHBlYXIgdG8gZG9jdW1lbnQgZXJyb3IgY29kZXMsIGJ1dCBzZWVtcyB0byByZXR1cm4KLSAgICAj
IDEgb3IgMTI4LCBtb3N0bHkuCi0gICAgRVJST1JfRklMRV9JU19NSVNTSU5HID0gMTI4Ci0KLSAg
ICBkZWYgX19pbml0X18oc2VsZiwgY3dkLCBleGVjdXRpdmU9Tm9uZSk6Ci0gICAgICAgIFNDTS5f
X2luaXRfXyhzZWxmLCBjd2QsIGV4ZWN1dGl2ZSkKLSAgICAgICAgc2VsZi5fY2hlY2tfZ2l0X2Fy
Y2hpdGVjdHVyZSgpCi0KLSAgICBkZWYgX21hY2hpbmVfaXNfNjRiaXQoc2VsZik6Ci0gICAgICAg
IGltcG9ydCBwbGF0Zm9ybQotICAgICAgICAjIFRoaXMgb25seSBpcyB0ZXN0ZWQgb24gTWFjLgot
ICAgICAgICBpZiBub3QgcGxhdGZvcm0ubWFjX3ZlcigpWzBdOgotICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCi0KLSAgICAgICAgIyBwbGF0Zm9ybS5hcmNoaXRlY3R1cmUoKVswXSBjYW4gYmUgJzY0
Yml0JyBldmVuIGlmIHRoZSBtYWNoaW5lIGlzIDMyYml0OgotICAgICAgICAjIGh0dHA6Ly9tYWls
LnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbm1hYy1zaWcvMjAwOS1TZXB0ZW1iZXIvMDIxNjQ4
Lmh0bWwKLSAgICAgICAgIyBVc2UgdGhlIHN5c2N0bCBjb21tYW5kIHRvIGZpbmQgb3V0IHdoYXQg
dGhlIHByb2Nlc3NvciBhY3R1YWxseSBzdXBwb3J0cy4KLSAgICAgICAgcmV0dXJuIHNlbGYucnVu
KFsnc3lzY3RsJywgJy1uJywgJ2h3LmNwdTY0Yml0X2NhcGFibGUnXSkucnN0cmlwKCkgPT0gJzEn
Ci0KLSAgICBkZWYgX2V4ZWN1dGFibGVfaXNfNjRiaXQoc2VsZiwgcGF0aCk6Ci0gICAgICAgICMg
QWdhaW4sIHBsYXRmb3JtLmFyY2hpdGVjdHVyZSgpIGZhaWxzIHVzLiAgT24gbXkgbWFjaGluZQot
ICAgICAgICAjIGdpdF9iaXRzID0gcGxhdGZvcm0uYXJjaGl0ZWN0dXJlKGV4ZWN1dGFibGU9Z2l0
X3BhdGgsIGJpdHM9J2RlZmF1bHQnKVswXQotICAgICAgICAjIGdpdF9iaXRzIGlzIGp1c3QgJ2Rl
ZmF1bHQnLCBtZWFuaW5nIHRoZSBjYWxsIGZhaWxlZC4KLSAgICAgICAgZmlsZV9vdXRwdXQgPSBz
ZWxmLnJ1bihbJ2ZpbGUnLCBwYXRoXSkKLSAgICAgICAgcmV0dXJuIHJlLnNlYXJjaCgneDg2XzY0
JywgZmlsZV9vdXRwdXQpCi0KLSAgICBkZWYgX2NoZWNrX2dpdF9hcmNoaXRlY3R1cmUoc2VsZik6
Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9tYWNoaW5lX2lzXzY0Yml0KCk6Ci0gICAgICAgICAgICBy
ZXR1cm4KLQotICAgICAgICAjIFdlIGNvdWxkIHBhdGgtc2VhcmNoIGVudGlyZWx5IGluIHB5dGhv
biBvciB3aXRoCi0gICAgICAgICMgd2hpY2gucHkgKGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC93
aGljaCksIGJ1dCB0aGlzIGlzIGVhc2llcjoKLSAgICAgICAgZ2l0X3BhdGggPSBzZWxmLnJ1bihb
J3doaWNoJywgJ2dpdCddKS5yc3RyaXAoKQotICAgICAgICBpZiBzZWxmLl9leGVjdXRhYmxlX2lz
XzY0Yml0KGdpdF9wYXRoKToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIHdlYmtpdF9k
ZXZfdGhlYWRfdXJsID0gImh0dHBzOi8vbGlzdHMud2Via2l0Lm9yZy9waXBlcm1haWwvd2Via2l0
LWRldi8yMDEwLURlY2VtYmVyLzAxNTI0OS5odG1sIgotICAgICAgICBsb2coIldhcm5pbmc6IFRo
aXMgbWFjaGluZSBpcyA2NC1iaXQsIGJ1dCB0aGUgZ2l0IGJpbmFyeSAoJXMpIGRvZXMgbm90IHN1
cHBvcnQgNjQtYml0LlxuSW5zdGFsbCBhIDY0LWJpdCBnaXQgZm9yIGJldHRlciBwZXJmb3JtYW5j
ZSwgc2VlOlxuJXNcbiIgJSAoZ2l0X3BhdGgsIHdlYmtpdF9kZXZfdGhlYWRfdXJsKSkKLQotICAg
IEBjbGFzc21ldGhvZAotICAgIGRlZiBpbl93b3JraW5nX2RpcmVjdG9yeShjbHMsIHBhdGgpOgot
ICAgICAgICByZXR1cm4gcnVuX2NvbW1hbmQoWydnaXQnLCAncmV2LXBhcnNlJywgJy0taXMtaW5z
aWRlLXdvcmstdHJlZSddLCBjd2Q9cGF0aCwgZXJyb3JfaGFuZGxlcj1FeGVjdXRpdmUuaWdub3Jl
X2Vycm9yKS5yc3RyaXAoKSA9PSAidHJ1ZSIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBm
aW5kX2NoZWNrb3V0X3Jvb3QoY2xzLCBwYXRoKToKLSAgICAgICAgIyAiZ2l0IHJldi1wYXJzZSAt
LXNob3ctY2R1cCIgd291bGQgYmUgYW5vdGhlciB3YXkgdG8gZ2V0IHRvIHRoZSByb290Ci0gICAg
ICAgIChjaGVja291dF9yb290LCBkb3RfZ2l0KSA9IG9zLnBhdGguc3BsaXQocnVuX2NvbW1hbmQo
WydnaXQnLCAncmV2LXBhcnNlJywgJy0tZ2l0LWRpciddLCBjd2Q9KHBhdGggb3IgIi4vIikpKQot
ICAgICAgICAjIElmIHdlIHdlcmUgdXNpbmcgMi42ICMgY2hlY2tvdXRfcm9vdCA9IG9zLnBhdGgu
cmVscGF0aChjaGVja291dF9yb290LCBwYXRoKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Fi
cyhjaGVja291dF9yb290KTogIyBTb21ldGltZXMgZ2l0IHJldHVybnMgcmVsYXRpdmUgcGF0aHMK
LSAgICAgICAgICAgIGNoZWNrb3V0X3Jvb3QgPSBvcy5wYXRoLmpvaW4ocGF0aCwgY2hlY2tvdXRf
cm9vdCkKLSAgICAgICAgcmV0dXJuIGNoZWNrb3V0X3Jvb3QKLQotICAgIEBjbGFzc21ldGhvZAot
ICAgIGRlZiB0b19vYmplY3RfbmFtZShjbHMsIGZpbGVwYXRoKToKLSAgICAgICAgcm9vdF9lbmRf
d2l0aF9zbGFzaCA9IG9zLnBhdGguam9pbihjbHMuZmluZF9jaGVja291dF9yb290KG9zLnBhdGgu
ZGlybmFtZShmaWxlcGF0aCkpLCAnJykKLSAgICAgICAgcmV0dXJuIGZpbGVwYXRoLnJlcGxhY2Uo
cm9vdF9lbmRfd2l0aF9zbGFzaCwgJycpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgcmVh
ZF9naXRfY29uZmlnKGNscywga2V5KToKLSAgICAgICAgIyBGSVhNRTogVGhpcyBzaG91bGQgcHJv
YmFibHkgdXNlIGN3ZD1zZWxmLmNoZWNrb3V0X3Jvb3QuCi0gICAgICAgICMgUGFzcyAtLWdldC1h
bGwgZm9yIGNhc2VzIHdoZXJlIHRoZSBjb25maWcgaGFzIG11bHRpcGxlIHZhbHVlcwotICAgICAg
ICByZXR1cm4gcnVuX2NvbW1hbmQoWyJnaXQiLCAiY29uZmlnIiwgIi0tZ2V0LWFsbCIsIGtleV0s
Ci0gICAgICAgICAgICBlcnJvcl9oYW5kbGVyPUV4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IpLnJzdHJp
cCgnXG4nKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjb21taXRfc3VjY2Vzc19yZWdl
eHAoKToKLSAgICAgICAgcmV0dXJuICJeQ29tbWl0dGVkIHIoP1A8c3ZuX3JldmlzaW9uPlxkKykk
IgotCi0gICAgZGVmIGRpc2NhcmRfbG9jYWxfY29tbWl0cyhzZWxmKToKLSAgICAgICAgIyBGSVhN
RTogVGhpcyBzaG91bGQgcHJvYmFibHkgdXNlIGN3ZD1zZWxmLmNoZWNrb3V0X3Jvb3QKLSAgICAg
ICAgc2VsZi5ydW4oWydnaXQnLCAncmVzZXQnLCAnLS1oYXJkJywgc2VsZi5yZW1vdGVfYnJhbmNo
X3JlZigpXSkKLQotICAgIGRlZiBsb2NhbF9jb21taXRzKHNlbGYpOgotICAgICAgICAjIEZJWE1F
OiBUaGlzIHNob3VsZCBwcm9iYWJseSB1c2UgY3dkPXNlbGYuY2hlY2tvdXRfcm9vdAotICAgICAg
ICByZXR1cm4gc2VsZi5ydW4oWydnaXQnLCAnbG9nJywgJy0tcHJldHR5PW9uZWxpbmUnLCAnSEVB
RC4uLicgKyBzZWxmLnJlbW90ZV9icmFuY2hfcmVmKCldKS5zcGxpdGxpbmVzKCkKLQotICAgIGRl
ZiByZWJhc2VfaW5fcHJvZ3Jlc3Moc2VsZik6Ci0gICAgICAgIHJldHVybiBvcy5wYXRoLmV4aXN0
cyhvcy5wYXRoLmpvaW4oc2VsZi5jaGVja291dF9yb290LCAnLmdpdC9yZWJhc2UtYXBwbHknKSkK
LQotICAgIGRlZiB3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVhbihzZWxmKToKLSAgICAgICAgIyBG
SVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgdXNlIGN3ZD1zZWxmLmNoZWNrb3V0X3Jvb3QKLSAg
ICAgICAgcmV0dXJuIHNlbGYucnVuKFsnZ2l0JywgJ2RpZmYnLCAnSEVBRCcsICctLW5hbWUtb25s
eSddKSA9PSAiIgotCi0gICAgZGVmIGNsZWFuX3dvcmtpbmdfZGlyZWN0b3J5KHNlbGYpOgotICAg
ICAgICAjIEZJWE1FOiBUaGVzZSBzaG91bGQgcHJvYmFibHkgdXNlIGN3ZD1zZWxmLmNoZWNrb3V0
X3Jvb3QuCi0gICAgICAgICMgQ291bGQgcnVuIGdpdCBjbGVhbiBoZXJlIHRvbywgYnV0IHRoYXQg
d291bGRuJ3QgbWF0Y2ggd29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW4KLSAgICAgICAgc2VsZi5y
dW4oWydnaXQnLCAncmVzZXQnLCAnLS1oYXJkJywgJ0hFQUQnXSkKLSAgICAgICAgIyBBYm9ydGlu
ZyByZWJhc2UgZXZlbiB0aG91Z2ggdGhpcyBkb2VzIG5vdCBtYXRjaCB3b3JraW5nX2RpcmVjdG9y
eV9pc19jbGVhbgotICAgICAgICBpZiBzZWxmLnJlYmFzZV9pbl9wcm9ncmVzcygpOgotICAgICAg
ICAgICAgc2VsZi5ydW4oWydnaXQnLCAncmViYXNlJywgJy0tYWJvcnQnXSkKLQotICAgIGRlZiBz
dGF0dXNfY29tbWFuZChzZWxmKToKLSAgICAgICAgIyBnaXQgc3RhdHVzIHJldHVybnMgbm9uLXpl
cm8gd2hlbiB0aGVyZSBhcmUgY2hhbmdlcywgc28gd2UgdXNlIGdpdCBkaWZmIG5hbWUgLS1uYW1l
LXN0YXR1cyBIRUFEIGluc3RlYWQuCi0gICAgICAgICMgTm8gZmlsZSBjb250ZW50cyBwcmludGVk
LCB0aHVzIHV0Zi04IGF1dG9kZWNvZGluZyBpbiBzZWxmLnJ1biBpcyBmaW5lLgotICAgICAgICBy
ZXR1cm4gWyJnaXQiLCAiZGlmZiIsICItLW5hbWUtc3RhdHVzIiwgIkhFQUQiXQotCi0gICAgZGVm
IF9zdGF0dXNfcmVnZXhwKHNlbGYsIGV4cGVjdGVkX3R5cGVzKToKLSAgICAgICAgcmV0dXJuICde
KD9QPHN0YXR1cz5bJXNdKVx0KD9QPGZpbGVuYW1lPi4rKSQnICUgZXhwZWN0ZWRfdHlwZXMKLQot
ICAgIGRlZiBhZGQoc2VsZiwgcGF0aCwgcmV0dXJuX2V4aXRfY29kZT1GYWxzZSk6Ci0gICAgICAg
IHJldHVybiBzZWxmLnJ1bihbImdpdCIsICJhZGQiLCBwYXRoXSwgcmV0dXJuX2V4aXRfY29kZT1y
ZXR1cm5fZXhpdF9jb2RlKQotCi0gICAgZGVmIGRlbGV0ZShzZWxmLCBwYXRoKToKLSAgICAgICAg
cmV0dXJuIHNlbGYucnVuKFsiZ2l0IiwgInJtIiwgIi1mIiwgcGF0aF0pCi0KLSAgICBkZWYgZXhp
c3RzKHNlbGYsIHBhdGgpOgotICAgICAgICByZXR1cm5fY29kZSA9IHNlbGYucnVuKFsiZ2l0Iiwg
InNob3ciLCAiSEVBRDolcyIgJSBwYXRoXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlLCBkZWNvZGVf
b3V0cHV0PUZhbHNlKQotICAgICAgICByZXR1cm4gcmV0dXJuX2NvZGUgIT0gc2VsZi5FUlJPUl9G
SUxFX0lTX01JU1NJTkcKLQotICAgIGRlZiBtZXJnZV9iYXNlKHNlbGYsIGdpdF9jb21taXQpOgot
ICAgICAgICBpZiBnaXRfY29tbWl0OgotICAgICAgICAgICAgIyBTcGVjaWFsLWNhc2UgSEVBRC4u
IHRvIG1lYW4gd29ya2luZy1jb3B5IGNoYW5nZXMgb25seS4KLSAgICAgICAgICAgIGlmIGdpdF9j
b21taXQudXBwZXIoKSA9PSAnSEVBRC4uJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ0hFQUQn
Ci0KLSAgICAgICAgICAgIGlmICcuLicgbm90IGluIGdpdF9jb21taXQ6Ci0gICAgICAgICAgICAg
ICAgZ2l0X2NvbW1pdCA9IGdpdF9jb21taXQgKyAiXi4uIiArIGdpdF9jb21taXQKLSAgICAgICAg
ICAgIHJldHVybiBnaXRfY29tbWl0Ci0KLSAgICAgICAgcmV0dXJuIHNlbGYucmVtb3RlX21lcmdl
X2Jhc2UoKQotCi0gICAgZGVmIGNoYW5nZWRfZmlsZXMoc2VsZiwgZ2l0X2NvbW1pdD1Ob25lKToK
LSAgICAgICAgIyBGSVhNRTogLS1kaWZmLWZpbHRlciBjb3VsZCBiZSB1c2VkIHRvIGF2b2lkIHRo
ZSAiZXh0cmFjdF9maWxlbmFtZXMiIHN0ZXAuCi0gICAgICAgIHN0YXR1c19jb21tYW5kID0gWydn
aXQnLCAnZGlmZicsICctcicsICctLW5hbWUtc3RhdHVzJywgJy1DJywgJy1NJywgIi0tbm8tZXh0
LWRpZmYiLCAiLS1mdWxsLWluZGV4Iiwgc2VsZi5tZXJnZV9iYXNlKGdpdF9jb21taXQpXQotICAg
ICAgICAjIEZJWE1FOiBJJ20gbm90IHN1cmUgd2UncmUgcmV0dXJuaW5nIHRoZSBzYW1lIHNldCBv
ZiBmaWxlcyB0aGF0IFNWTi5jaGFuZ2VkX2ZpbGVzIGlzLgotICAgICAgICAjIEFkZGVkIChBKSwg
Q29waWVkIChDKSwgRGVsZXRlZCAoRCksIE1vZGlmaWVkIChNKSwgUmVuYW1lZCAoUikKLSAgICAg
ICAgcmV0dXJuIHNlbGYucnVuX3N0YXR1c19hbmRfZXh0cmFjdF9maWxlbmFtZXMoc3RhdHVzX2Nv
bW1hbmQsIHNlbGYuX3N0YXR1c19yZWdleHAoIkFETSIpKQotCi0gICAgZGVmIF9jaGFuZ2VzX2Zp
bGVzX2Zvcl9jb21taXQoc2VsZiwgZ2l0X2NvbW1pdCk6Ci0gICAgICAgICMgLS1wcmV0dHk9ImZv
cm1hdDoiIG1ha2VzIGdpdCBzaG93IG5vdCBwcmludCB0aGUgY29tbWl0IGxvZyBoZWFkZXIsCi0g
ICAgICAgIGNoYW5nZWRfZmlsZXMgPSBzZWxmLnJ1bihbImdpdCIsICJzaG93IiwgIi0tcHJldHR5
PWZvcm1hdDoiLCAiLS1uYW1lLW9ubHkiLCBnaXRfY29tbWl0XSkuc3BsaXRsaW5lcygpCi0gICAg
ICAgICMgaW5zdGVhZCBpdCBqdXN0IHByaW50cyBhIGJsYW5rIGxpbmUgYXQgdGhlIHRvcCwgc28g
d2Ugc2tpcCB0aGUgYmxhbmsgbGluZToKLSAgICAgICAgcmV0dXJuIGNoYW5nZWRfZmlsZXNbMTpd
Ci0KLSAgICBkZWYgY2hhbmdlZF9maWxlc19mb3JfcmV2aXNpb24oc2VsZiwgcmV2aXNpb24pOgot
ICAgICAgICBjb21taXRfaWQgPSBzZWxmLmdpdF9jb21taXRfZnJvbV9zdm5fcmV2aXNpb24ocmV2
aXNpb24pCi0gICAgICAgIHJldHVybiBzZWxmLl9jaGFuZ2VzX2ZpbGVzX2Zvcl9jb21taXQoY29t
bWl0X2lkKQotCi0gICAgZGVmIHJldmlzaW9uc19jaGFuZ2luZ19maWxlKHNlbGYsIHBhdGgsIGxp
bWl0PTUpOgotICAgICAgICAjIGdpdCByZXYtbGlzdCBoZWFkIC0tcmVtb3ZlLWVtcHR5IC0tbGlt
aXQ9NSAtLSBwYXRoIHdvdWxkIGJlIGVxdWl2YWxlbnQuCi0gICAgICAgIGNvbW1pdF9pZHMgPSBz
ZWxmLnJ1bihbImdpdCIsICJsb2ciLCAiLS1yZW1vdmUtZW1wdHkiLCAiLS1wcmV0dHk9Zm9ybWF0
OiVIIiwgIi0lcyIgJSBsaW1pdCwgIi0tIiwgcGF0aF0pLnNwbGl0bGluZXMoKQotICAgICAgICBy
ZXR1cm4gZmlsdGVyKGxhbWJkYSByZXZpc2lvbjogcmV2aXNpb24sIG1hcChzZWxmLnN2bl9yZXZp
c2lvbl9mcm9tX2dpdF9jb21taXQsIGNvbW1pdF9pZHMpKQotCi0gICAgZGVmIGNvbmZsaWN0ZWRf
ZmlsZXMoc2VsZik6Ci0gICAgICAgICMgV2UgZG8gbm90IG5lZWQgdG8gcGFzcyBkZWNvZGVfb3V0
cHV0IGZvciB0aGlzIGRpZmYgY29tbWFuZAotICAgICAgICAjIGFzIHdlJ3JlIHBhc3NpbmcgLS1u
YW1lLXN0YXR1cyB3aGljaCBkb2VzIG5vdCBvdXRwdXQgYW55IGRhdGEuCi0gICAgICAgIHN0YXR1
c19jb21tYW5kID0gWydnaXQnLCAnZGlmZicsICctLW5hbWUtc3RhdHVzJywgJy1DJywgJy1NJywg
Jy0tZGlmZi1maWx0ZXI9VSddCi0gICAgICAgIHJldHVybiBzZWxmLnJ1bl9zdGF0dXNfYW5kX2V4
dHJhY3RfZmlsZW5hbWVzKHN0YXR1c19jb21tYW5kLCBzZWxmLl9zdGF0dXNfcmVnZXhwKCJVIikp
Ci0KLSAgICBkZWYgYWRkZWRfZmlsZXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnJ1bl9z
dGF0dXNfYW5kX2V4dHJhY3RfZmlsZW5hbWVzKHNlbGYuc3RhdHVzX2NvbW1hbmQoKSwgc2VsZi5f
c3RhdHVzX3JlZ2V4cCgiQSIpKQotCi0gICAgZGVmIGRlbGV0ZWRfZmlsZXMoc2VsZik6Ci0gICAg
ICAgIHJldHVybiBzZWxmLnJ1bl9zdGF0dXNfYW5kX2V4dHJhY3RfZmlsZW5hbWVzKHNlbGYuc3Rh
dHVzX2NvbW1hbmQoKSwgc2VsZi5fc3RhdHVzX3JlZ2V4cCgiRCIpKQotCi0gICAgQHN0YXRpY21l
dGhvZAotICAgIGRlZiBzdXBwb3J0c19sb2NhbF9jb21taXRzKCk6Ci0gICAgICAgIHJldHVybiBU
cnVlCi0KLSAgICBkZWYgZGlzcGxheV9uYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gImdpdCIK
LQotICAgIGRlZiBoZWFkX3N2bl9yZXZpc2lvbihzZWxmKToKLSAgICAgICAgZ2l0X2xvZyA9IHNl
bGYucnVuKFsnZ2l0JywgJ2xvZycsICctMjUnXSkKLSAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2go
Il5ccypnaXQtc3ZuLWlkOi4qQCg/UDxzdm5fcmV2aXNpb24+XGQrKVwgIiwgZ2l0X2xvZywgcmUu
TVVMVElMSU5FKQotICAgICAgICBpZiBub3QgbWF0Y2g6Ci0gICAgICAgICAgICByZXR1cm4gIiIK
LSAgICAgICAgcmV0dXJuIHN0cihtYXRjaC5ncm91cCgnc3ZuX3JldmlzaW9uJykpCi0KLSAgICBk
ZWYgcHJlcGVuZF9zdm5fcmV2aXNpb24oc2VsZiwgZGlmZik6Ci0gICAgICAgIHJldmlzaW9uID0g
c2VsZi5oZWFkX3N2bl9yZXZpc2lvbigpCi0gICAgICAgIGlmIG5vdCByZXZpc2lvbjoKLSAgICAg
ICAgICAgIHJldHVybiBkaWZmCi0KLSAgICAgICAgcmV0dXJuICJTdWJ2ZXJzaW9uIFJldmlzaW9u
OiAiICsgcmV2aXNpb24gKyAnXG4nICsgZGlmZgotCi0gICAgZGVmIGNyZWF0ZV9wYXRjaChzZWxm
LCBnaXRfY29tbWl0PU5vbmUsIGNoYW5nZWRfZmlsZXM9Tm9uZSk6Ci0gICAgICAgICIiIlJldHVy
bnMgYSBieXRlIGFycmF5IChzdHIoKSkgcmVwcmVzZW50aW5nIHRoZSBwYXRjaCBmaWxlLgotICAg
ICAgICBQYXRjaCBmaWxlcyBhcmUgZWZmZWN0aXZlbHkgYmluYXJ5IHNpbmNlIHRoZXkgbWF5IGNv
bnRhaW4KLSAgICAgICAgZmlsZXMgb2YgbXVsdGlwbGUgZGlmZmVyZW50IGVuY29kaW5ncy4iIiIK
LSAgICAgICAgY29tbWFuZCA9IFsnZ2l0JywgJ2RpZmYnLCAnLS1iaW5hcnknLCAiLS1uby1leHQt
ZGlmZiIsICItLWZ1bGwtaW5kZXgiLCAiLU0iLCBzZWxmLm1lcmdlX2Jhc2UoZ2l0X2NvbW1pdCks
ICItLSJdCi0gICAgICAgIGlmIGNoYW5nZWRfZmlsZXM6Ci0gICAgICAgICAgICBjb21tYW5kICs9
IGNoYW5nZWRfZmlsZXMKLSAgICAgICAgcmV0dXJuIHNlbGYucHJlcGVuZF9zdm5fcmV2aXNpb24o
c2VsZi5ydW4oY29tbWFuZCwgZGVjb2RlX291dHB1dD1GYWxzZSwgY3dkPXNlbGYuY2hlY2tvdXRf
cm9vdCkpCi0KLSAgICBkZWYgX3J1bl9naXRfc3ZuX2ZpbmRfcmV2KHNlbGYsIGFyZyk6Ci0gICAg
ICAgICMgZ2l0IHN2biBmaW5kLXJldiBhbHdheXMgZXhpdHMgMCwgZXZlbiB3aGVuIHRoZSByZXZp
c2lvbiBvciBjb21taXQgaXMgbm90IGZvdW5kLgotICAgICAgICByZXR1cm4gc2VsZi5ydW4oWydn
aXQnLCAnc3ZuJywgJ2ZpbmQtcmV2JywgYXJnXSwgY3dkPXNlbGYuY2hlY2tvdXRfcm9vdCkucnN0
cmlwKCkKLQotICAgIGRlZiBfc3RyaW5nX3RvX2ludF9vcl9ub25lKHNlbGYsIHN0cmluZyk6Ci0g
ICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBpbnQoc3RyaW5nKQotICAgICAgICBleGNl
cHQgVmFsdWVFcnJvciwgZToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICBAbWVtb2l6
ZWQKLSAgICBkZWYgZ2l0X2NvbW1pdF9mcm9tX3N2bl9yZXZpc2lvbihzZWxmLCBzdm5fcmV2aXNp
b24pOgotICAgICAgICBnaXRfY29tbWl0ID0gc2VsZi5fcnVuX2dpdF9zdm5fZmluZF9yZXYoJ3Il
cycgJSBzdm5fcmV2aXNpb24pCi0gICAgICAgIGlmIG5vdCBnaXRfY29tbWl0OgotICAgICAgICAg
ICAgIyBGSVhNRTogQWx0ZXJuYXRpdmVseSB3ZSBjb3VsZCBvZmZlciB0byB1cGRhdGUgdGhlIGNo
ZWNrb3V0PyBPciByZXR1cm4gTm9uZT8KLSAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKG1l
c3NhZ2U9J0ZhaWxlZCB0byBmaW5kIGdpdCBjb21taXQgZm9yIHJldmlzaW9uICVzLCB5b3VyIGNo
ZWNrb3V0IGxpa2VseSBuZWVkcyBhbiB1cGRhdGUuJyAlIHN2bl9yZXZpc2lvbikKLSAgICAgICAg
cmV0dXJuIGdpdF9jb21taXQKLQotICAgIEBtZW1vaXplZAotICAgIGRlZiBzdm5fcmV2aXNpb25f
ZnJvbV9naXRfY29tbWl0KHNlbGYsIGdpdF9jb21taXQpOgotICAgICAgICBzdm5fcmV2aXNpb24g
PSBzZWxmLl9ydW5fZ2l0X3N2bl9maW5kX3JldihnaXRfY29tbWl0KQotICAgICAgICByZXR1cm4g
c2VsZi5fc3RyaW5nX3RvX2ludF9vcl9ub25lKHN2bl9yZXZpc2lvbikKLQotICAgIGRlZiBjb250
ZW50c19hdF9yZXZpc2lvbihzZWxmLCBwYXRoLCByZXZpc2lvbik6Ci0gICAgICAgICIiIlJldHVy
bnMgYSBieXRlIGFycmF5IChzdHIoKSkgY29udGFpbmluZyB0aGUgY29udGVudHMKLSAgICAgICAg
b2YgcGF0aCBAIHJldmlzaW9uIGluIHRoZSByZXBvc2l0b3J5LiIiIgotICAgICAgICByZXR1cm4g
c2VsZi5ydW4oWyJnaXQiLCAic2hvdyIsICIlczolcyIgJSAoc2VsZi5naXRfY29tbWl0X2Zyb21f
c3ZuX3JldmlzaW9uKHJldmlzaW9uKSwgcGF0aCldLCBkZWNvZGVfb3V0cHV0PUZhbHNlKQotCi0g
ICAgZGVmIGRpZmZfZm9yX3JldmlzaW9uKHNlbGYsIHJldmlzaW9uKToKLSAgICAgICAgZ2l0X2Nv
bW1pdCA9IHNlbGYuZ2l0X2NvbW1pdF9mcm9tX3N2bl9yZXZpc2lvbihyZXZpc2lvbikKLSAgICAg
ICAgcmV0dXJuIHNlbGYuY3JlYXRlX3BhdGNoKGdpdF9jb21taXQpCi0KLSAgICBkZWYgZGlmZl9m
b3JfZmlsZShzZWxmLCBwYXRoLCBsb2c9Tm9uZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLnJ1bihb
J2dpdCcsICdkaWZmJywgJ0hFQUQnLCAnLS0nLCBwYXRoXSkKLQotICAgIGRlZiBzaG93X2hlYWQo
c2VsZiwgcGF0aCk6Ci0gICAgICAgIHJldHVybiBzZWxmLnJ1bihbJ2dpdCcsICdzaG93JywgJ0hF
QUQ6JyArIHNlbGYudG9fb2JqZWN0X25hbWUocGF0aCldLCBkZWNvZGVfb3V0cHV0PUZhbHNlKQot
Ci0gICAgZGVmIGNvbW1pdHRlcl9lbWFpbF9mb3JfcmV2aXNpb24oc2VsZiwgcmV2aXNpb24pOgot
ICAgICAgICBnaXRfY29tbWl0ID0gc2VsZi5naXRfY29tbWl0X2Zyb21fc3ZuX3JldmlzaW9uKHJl
dmlzaW9uKQotICAgICAgICBjb21taXR0ZXJfZW1haWwgPSBzZWxmLnJ1bihbImdpdCIsICJsb2ci
LCAiLTEiLCAiLS1wcmV0dHk9Zm9ybWF0OiVjZSIsIGdpdF9jb21taXRdKQotICAgICAgICAjIEdp
dCBhZGRzIGFuIGV4dHJhIEByZXBvc2l0b3J5X2hhc2ggdG8gdGhlIGVuZCBvZiBldmVyeSBjb21t
aXR0ZXIgZW1haWwsIHJlbW92ZSBpdDoKLSAgICAgICAgcmV0dXJuIGNvbW1pdHRlcl9lbWFpbC5y
c3BsaXQoIkAiLCAxKVswXQotCi0gICAgZGVmIGFwcGx5X3JldmVyc2VfZGlmZihzZWxmLCByZXZp
c2lvbik6Ci0gICAgICAgICMgQXNzdW1lIHRoZSByZXZpc2lvbiBpcyBhbiBzdm4gcmV2aXNpb24u
Ci0gICAgICAgIGdpdF9jb21taXQgPSBzZWxmLmdpdF9jb21taXRfZnJvbV9zdm5fcmV2aXNpb24o
cmV2aXNpb24pCi0gICAgICAgICMgSSB0aGluayB0aGlzIHdpbGwgYWx3YXlzIGZhaWwgZHVlIHRv
IENoYW5nZUxvZ3MuCi0gICAgICAgIHNlbGYucnVuKFsnZ2l0JywgJ3JldmVydCcsICctLW5vLWNv
bW1pdCcsIGdpdF9jb21taXRdLCBlcnJvcl9oYW5kbGVyPUV4ZWN1dGl2ZS5pZ25vcmVfZXJyb3Ip
Ci0KLSAgICBkZWYgcmV2ZXJ0X2ZpbGVzKHNlbGYsIGZpbGVfcGF0aHMpOgotICAgICAgICBzZWxm
LnJ1bihbJ2dpdCcsICdjaGVja291dCcsICdIRUFEJ10gKyBmaWxlX3BhdGhzKQotCi0gICAgZGVm
IF9hc3NlcnRfY2FuX3NxdWFzaChzZWxmLCB3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVhbik6Ci0g
ICAgICAgIHNxdWFzaCA9IEdpdC5yZWFkX2dpdF9jb25maWcoJ3dlYmtpdC1wYXRjaC5jb21taXQt
c2hvdWxkLWFsd2F5cy1zcXVhc2gnKQotICAgICAgICBzaG91bGRfc3F1YXNoID0gc3F1YXNoIGFu
ZCBzcXVhc2gubG93ZXIoKSA9PSAidHJ1ZSIKLQotICAgICAgICBpZiBub3Qgc2hvdWxkX3NxdWFz
aDoKLSAgICAgICAgICAgICMgT25seSB3YXJuIGlmIHRoZXJlIGFyZSBhY3R1YWxseSBtdWx0aXBs
ZSBjb21taXRzIHRvIHNxdWFzaC4KLSAgICAgICAgICAgIG51bV9sb2NhbF9jb21taXRzID0gbGVu
KHNlbGYubG9jYWxfY29tbWl0cygpKQotICAgICAgICAgICAgaWYgbnVtX2xvY2FsX2NvbW1pdHMg
PiAxIG9yIChudW1fbG9jYWxfY29tbWl0cyA+IDAgYW5kIG5vdCB3b3JraW5nX2RpcmVjdG9yeV9p
c19jbGVhbik6Ci0gICAgICAgICAgICAgICAgcmFpc2UgQW1iaWd1b3VzQ29tbWl0RXJyb3IobnVt
X2xvY2FsX2NvbW1pdHMsIHdvcmtpbmdfZGlyZWN0b3J5X2lzX2NsZWFuKQotCi0gICAgZGVmIGNv
bW1pdF93aXRoX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgdXNlcm5hbWU9Tm9uZSwgcGFzc3dvcmQ9
Tm9uZSwgZ2l0X2NvbW1pdD1Ob25lLCBmb3JjZV9zcXVhc2g9RmFsc2UsIGNoYW5nZWRfZmlsZXM9
Tm9uZSk6Ci0gICAgICAgICMgVXNlcm5hbWUgaXMgaWdub3JlZCBkdXJpbmcgR2l0IGNvbW1pdHMu
Ci0gICAgICAgIHdvcmtpbmdfZGlyZWN0b3J5X2lzX2NsZWFuID0gc2VsZi53b3JraW5nX2RpcmVj
dG9yeV9pc19jbGVhbigpCi0KLSAgICAgICAgaWYgZ2l0X2NvbW1pdDoKLSAgICAgICAgICAgICMg
U3BlY2lhbC1jYXNlIEhFQUQuLiB0byBtZWFuIHdvcmtpbmctY29weSBjaGFuZ2VzIG9ubHkuCi0g
ICAgICAgICAgICBpZiBnaXRfY29tbWl0LnVwcGVyKCkgPT0gJ0hFQUQuLic6Ci0gICAgICAgICAg
ICAgICAgaWYgd29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW46Ci0gICAgICAgICAgICAgICAgICAg
IHJhaXNlIFNjcmlwdEVycm9yKG1lc3NhZ2U9IlRoZSB3b3JraW5nIGNvcHkgaXMgbm90IG1vZGlm
aWVkLiAtLWdpdC1jb21taXQ9SEVBRC4uIG9ubHkgY29tbWl0cyB3b3JraW5nIGNvcHkgY2hhbmdl
cy4iKQotICAgICAgICAgICAgICAgIHNlbGYuY29tbWl0X2xvY2FsbHlfd2l0aF9tZXNzYWdlKG1l
c3NhZ2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NvbW1pdF9vbl9icmFuY2gobWVz
c2FnZSwgJ0hFQUQnLCB1c2VybmFtZT11c2VybmFtZSwgcGFzc3dvcmQ9cGFzc3dvcmQpCi0KLSAg
ICAgICAgICAgICMgTmVlZCB3b3JraW5nIGRpcmVjdG9yeSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRl
ZCBzbyB3ZSBjYW4gY2hlY2tvdXQgdGhlIG1lcmdlIGJyYW5jaC4KLSAgICAgICAgICAgIGlmIG5v
dCB3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVhbjoKLSAgICAgICAgICAgICAgICAjIEZJWE1FOiB3
ZWJraXQtcGF0Y2ggbGFuZCB3aWxsIG1vZGlmeSB0aGUgQ2hhbmdlTG9ncyB0byBjb3JyZWN0IHRo
ZSByZXZpZXdlci4KLSAgICAgICAgICAgICAgICAjIFRoYXQgd2lsbCBtb2RpZnkgdGhlIHdvcmtp
bmctY29weSBhbmQgY2F1c2UgdXMgdG8gaGl0IHRoaXMgZXJyb3IuCi0gICAgICAgICAgICAgICAg
IyBUaGUgQ2hhbmdlTG9nIG1vZGlmaWNhdGlvbiBjb3VsZCBiZSBtYWRlIHRvIG1vZGlmeSB0aGUg
ZXhpc3RpbmcgbG9jYWwgY29tbWl0LgotICAgICAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9y
KG1lc3NhZ2U9IldvcmtpbmcgY29weSBpcyBtb2RpZmllZC4gQ2Fubm90IGNvbW1pdCBpbmRpdmlk
dWFsIGdpdF9jb21taXRzLiIpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5fY29tbWl0X29uX2Jy
YW5jaChtZXNzYWdlLCBnaXRfY29tbWl0LCB1c2VybmFtZT11c2VybmFtZSwgcGFzc3dvcmQ9cGFz
c3dvcmQpCi0KLSAgICAgICAgaWYgbm90IGZvcmNlX3NxdWFzaDoKLSAgICAgICAgICAgIHNlbGYu
X2Fzc2VydF9jYW5fc3F1YXNoKHdvcmtpbmdfZGlyZWN0b3J5X2lzX2NsZWFuKQotICAgICAgICBz
ZWxmLnJ1bihbJ2dpdCcsICdyZXNldCcsICctLXNvZnQnLCBzZWxmLnJlbW90ZV9tZXJnZV9iYXNl
KCldKQotICAgICAgICBzZWxmLmNvbW1pdF9sb2NhbGx5X3dpdGhfbWVzc2FnZShtZXNzYWdlKQot
ICAgICAgICByZXR1cm4gc2VsZi5wdXNoX2xvY2FsX2NvbW1pdHNfdG9fc2VydmVyKHVzZXJuYW1l
PXVzZXJuYW1lLCBwYXNzd29yZD1wYXNzd29yZCkKLQotICAgIGRlZiBfY29tbWl0X29uX2JyYW5j
aChzZWxmLCBtZXNzYWdlLCBnaXRfY29tbWl0LCB1c2VybmFtZT1Ob25lLCBwYXNzd29yZD1Ob25l
KToKLSAgICAgICAgYnJhbmNoX3JlZiA9IHNlbGYucnVuKFsnZ2l0JywgJ3N5bWJvbGljLXJlZics
ICdIRUFEJ10pLnN0cmlwKCkKLSAgICAgICAgYnJhbmNoX25hbWUgPSBicmFuY2hfcmVmLnJlcGxh
Y2UoJ3JlZnMvaGVhZHMvJywgJycpCi0gICAgICAgIGNvbW1pdF9pZHMgPSBzZWxmLmNvbW1pdF9p
ZHNfZnJvbV9jb21taXRpc2hfYXJndW1lbnRzKFtnaXRfY29tbWl0XSkKLQotICAgICAgICAjIFdl
IHdhbnQgdG8gc3F1YXNoIGFsbCB0aGlzIGJyYW5jaCdzIGNvbW1pdHMgaW50byBvbmUgY29tbWl0
IHdpdGggdGhlIHByb3BlciBkZXNjcmlwdGlvbi4KLSAgICAgICAgIyBXZSBkbyB0aGlzIGJ5IGRv
aW5nIGEgIm1lcmdlIC0tc3F1YXNoIiBpbnRvIGEgbmV3IGNvbW1pdCBicmFuY2gsIHRoZW4gZGNv
bW1pdHRpbmcgdGhhdC4KLSAgICAgICAgTUVSR0VfQlJBTkNIX05BTUUgPSAnd2Via2l0LXBhdGNo
LWxhbmQnCi0gICAgICAgIHNlbGYuZGVsZXRlX2JyYW5jaChNRVJHRV9CUkFOQ0hfTkFNRSkKLQot
ICAgICAgICAjIFdlIG1pZ2h0IGJlIGluIGEgZGlyZWN0b3J5IHRoYXQncyBwcmVzZW50IGluIHRo
aXMgYnJhbmNoIGJ1dCBub3QgaW4gdGhlCi0gICAgICAgICMgdHJ1bmsuICBNb3ZlIHVwIHRvIHRo
ZSB0b3Agb2YgdGhlIHRyZWUgc28gdGhhdCBnaXQgY29tbWFuZHMgdGhhdCBleHBlY3QgYQotICAg
ICAgICAjIHZhbGlkIENXRCB3b24ndCBmYWlsIGFmdGVyIHdlIGNoZWNrIG91dCB0aGUgbWVyZ2Ug
YnJhbmNoLgotICAgICAgICBvcy5jaGRpcihzZWxmLmNoZWNrb3V0X3Jvb3QpCi0KLSAgICAgICAg
IyBTdHVmZiBvdXIgY2hhbmdlIGludG8gdGhlIG1lcmdlIGJyYW5jaC4KLSAgICAgICAgIyBXZSB3
cmFwIGluIGEgdHJ5Li4uZmluYWxseSBibG9jayBzbyBpZiBhbnl0aGluZyBnb2VzIHdyb25nLCB3
ZSBjbGVhbiB1cCB0aGUgYnJhbmNoZXMuCi0gICAgICAgIGNvbW1pdF9zdWNjZWVkZWQgPSBUcnVl
Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYucnVuKFsnZ2l0JywgJ2NoZWNrb3V0Jywg
Jy1xJywgJy1iJywgTUVSR0VfQlJBTkNIX05BTUUsIHNlbGYucmVtb3RlX2JyYW5jaF9yZWYoKV0p
Ci0KLSAgICAgICAgICAgIGZvciBjb21taXQgaW4gY29tbWl0X2lkczoKLSAgICAgICAgICAgICAg
ICAjIFdlJ3JlIG9uIGEgZGlmZmVyZW50IGJyYW5jaCBub3csIHNvIGNvbnZlcnQgImhlYWQiIHRv
IHRoZSBicmFuY2ggbmFtZS4KLSAgICAgICAgICAgICAgICBjb21taXQgPSByZS5zdWIocicoP2kp
aGVhZCcsIGJyYW5jaF9uYW1lLCBjb21taXQpCi0gICAgICAgICAgICAgICAgIyBGSVhNRTogT25j
ZSBjaGFuZ2VkX2ZpbGVzIGFuZCBjcmVhdGVfcGF0Y2ggYXJlIG1vZGlmaWVkIHRvIHNlcGFyYXRl
bHkgaGFuZGxlIGVhY2gKLSAgICAgICAgICAgICAgICAjIGNvbW1pdCBpbiBhIGNvbW1pdCByYW5n
ZSwgY29tbWl0IGVhY2ggY2hlcnJ5IHBpY2sgc28gdGhleSdsbCBnZXQgZGNvbW1pdHRlZCBzZXBh
cmF0ZWx5LgotICAgICAgICAgICAgICAgIHNlbGYucnVuKFsnZ2l0JywgJ2NoZXJyeS1waWNrJywg
Jy0tbm8tY29tbWl0JywgY29tbWl0XSkKLQotICAgICAgICAgICAgc2VsZi5ydW4oWydnaXQnLCAn
Y29tbWl0JywgJy1tJywgbWVzc2FnZV0pCi0gICAgICAgICAgICBvdXRwdXQgPSBzZWxmLnB1c2hf
bG9jYWxfY29tbWl0c190b19zZXJ2ZXIodXNlcm5hbWU9dXNlcm5hbWUsIHBhc3N3b3JkPXBhc3N3
b3JkKQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgotICAgICAgICAgICAgbG9nKCJDT01N
SVQgRkFJTEVEOiAiICsgc3RyKGUpKQotICAgICAgICAgICAgb3V0cHV0ID0gIkNvbW1pdCBmYWls
ZWQuIgotICAgICAgICAgICAgY29tbWl0X3N1Y2NlZWRlZCA9IEZhbHNlCi0gICAgICAgIGZpbmFs
bHk6Ci0gICAgICAgICAgICAjIEFuZCB0aGVuIHN3YXAgYmFjayB0byB0aGUgb3JpZ2luYWwgYnJh
bmNoIGFuZCBjbGVhbiB1cC4KLSAgICAgICAgICAgIHNlbGYuY2xlYW5fd29ya2luZ19kaXJlY3Rv
cnkoKQotICAgICAgICAgICAgc2VsZi5ydW4oWydnaXQnLCAnY2hlY2tvdXQnLCAnLXEnLCBicmFu
Y2hfbmFtZV0pCi0gICAgICAgICAgICBzZWxmLmRlbGV0ZV9icmFuY2goTUVSR0VfQlJBTkNIX05B
TUUpCi0KLSAgICAgICAgcmV0dXJuIG91dHB1dAotCi0gICAgZGVmIHN2bl9jb21taXRfbG9nKHNl
bGYsIHN2bl9yZXZpc2lvbik6Ci0gICAgICAgIHN2bl9yZXZpc2lvbiA9IHNlbGYuc3RyaXBfcl9m
cm9tX3N2bl9yZXZpc2lvbihzdm5fcmV2aXNpb24pCi0gICAgICAgIHJldHVybiBzZWxmLnJ1bihb
J2dpdCcsICdzdm4nLCAnbG9nJywgJy1yJywgc3ZuX3JldmlzaW9uXSkKLQotICAgIGRlZiBsYXN0
X3N2bl9jb21taXRfbG9nKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5ydW4oWydnaXQnLCAn
c3ZuJywgJ2xvZycsICctLWxpbWl0PTEnXSkKLQotICAgICMgR2l0LXNwZWNpZmljIG1ldGhvZHM6
Ci0gICAgZGVmIF9icmFuY2hfcmVmX2V4aXN0cyhzZWxmLCBicmFuY2hfcmVmKToKLSAgICAgICAg
cmV0dXJuIHNlbGYucnVuKFsnZ2l0JywgJ3Nob3ctcmVmJywgJy0tcXVpZXQnLCAnLS12ZXJpZnkn
LCBicmFuY2hfcmVmXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKSA9PSAwCi0KLSAgICBkZWYgZGVs
ZXRlX2JyYW5jaChzZWxmLCBicmFuY2hfbmFtZSk6Ci0gICAgICAgIGlmIHNlbGYuX2JyYW5jaF9y
ZWZfZXhpc3RzKCdyZWZzL2hlYWRzLycgKyBicmFuY2hfbmFtZSk6Ci0gICAgICAgICAgICBzZWxm
LnJ1bihbJ2dpdCcsICdicmFuY2gnLCAnLUQnLCBicmFuY2hfbmFtZV0pCi0KLSAgICBkZWYgcmVt
b3RlX21lcmdlX2Jhc2Uoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnJ1bihbJ2dpdCcsICdt
ZXJnZS1iYXNlJywgc2VsZi5yZW1vdGVfYnJhbmNoX3JlZigpLCAnSEVBRCddKS5zdHJpcCgpCi0K
LSAgICBkZWYgcmVtb3RlX2JyYW5jaF9yZWYoc2VsZik6Ci0gICAgICAgICMgVXNlIHJlZmVyZW5j
ZXMgc28gdGhhdCB3ZSBjYW4gYXZvaWQgY29sbGlzaW9ucywgZS5nLiB3ZSBkb24ndCB3YW50IHRv
IG9wZXJhdGUgb24gcmVmcy9oZWFkcy90cnVuayBpZiBpdCBleGlzdHMuCi0gICAgICAgIHJlbW90
ZV9icmFuY2hfcmVmcyA9IEdpdC5yZWFkX2dpdF9jb25maWcoJ3N2bi1yZW1vdGUuc3ZuLmZldGNo
JykKLSAgICAgICAgaWYgbm90IHJlbW90ZV9icmFuY2hfcmVmczoKLSAgICAgICAgICAgIHJlbW90
ZV9tYXN0ZXJfcmVmID0gJ3JlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyJwotICAgICAgICAgICAg
aWYgbm90IHNlbGYuX2JyYW5jaF9yZWZfZXhpc3RzKHJlbW90ZV9tYXN0ZXJfcmVmKToKLSAgICAg
ICAgICAgICAgICByYWlzZSBTY3JpcHRFcnJvcihtZXNzYWdlPSJDYW4ndCBmaW5kIGEgYnJhbmNo
IHRvIGRpZmYgYWdhaW5zdC4gc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggaXMgbm90IGluIHRoZSBnaXQg
Y29uZmlnIGFuZCAlcyBkb2VzIG5vdCBleGlzdCIgJSByZW1vdGVfbWFzdGVyX3JlZikKLSAgICAg
ICAgICAgIHJldHVybiByZW1vdGVfbWFzdGVyX3JlZgotCi0gICAgICAgICMgRklYTUU6IFdoYXQn
cyB0aGUgcmlnaHQgYmVoYXZpb3Igd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgc3ZuLXJlbW90ZXMg
bGlzdGVkPwotICAgICAgICAjIEZvciBub3csIGp1c3QgdXNlIHRoZSBmaXJzdCBvbmUuCi0gICAg
ICAgIGZpcnN0X3JlbW90ZV9icmFuY2hfcmVmID0gcmVtb3RlX2JyYW5jaF9yZWZzLnNwbGl0KCdc
bicpWzBdCi0gICAgICAgIHJldHVybiBmaXJzdF9yZW1vdGVfYnJhbmNoX3JlZi5zcGxpdCgnOicp
WzFdCi0KLSAgICBkZWYgY29tbWl0X2xvY2FsbHlfd2l0aF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2Up
OgotICAgICAgICBzZWxmLnJ1bihbJ2dpdCcsICdjb21taXQnLCAnLS1hbGwnLCAnLUYnLCAnLSdd
LCBpbnB1dD1tZXNzYWdlKQotCi0gICAgZGVmIHB1c2hfbG9jYWxfY29tbWl0c190b19zZXJ2ZXIo
c2VsZiwgdXNlcm5hbWU9Tm9uZSwgcGFzc3dvcmQ9Tm9uZSk6Ci0gICAgICAgIGRjb21taXRfY29t
bWFuZCA9IFsnZ2l0JywgJ3N2bicsICdkY29tbWl0J10KLSAgICAgICAgaWYgc2VsZi5kcnlydW46
Ci0gICAgICAgICAgICBkY29tbWl0X2NvbW1hbmQuYXBwZW5kKCctLWRyeS1ydW4nKQotICAgICAg
ICBpZiBub3Qgc2VsZi5oYXNfYXV0aG9yaXphdGlvbl9mb3JfcmVhbG0oU1ZOLnN2bl9zZXJ2ZXJf
cmVhbG0pOgotICAgICAgICAgICAgcmFpc2UgQXV0aGVudGljYXRpb25FcnJvcihTVk4uc3ZuX3Nl
cnZlcl9ob3N0LCBwcm9tcHRfZm9yX3Bhc3N3b3JkPVRydWUpCi0gICAgICAgIGlmIHVzZXJuYW1l
OgotICAgICAgICAgICAgZGNvbW1pdF9jb21tYW5kLmV4dGVuZChbIi0tdXNlcm5hbWUiLCB1c2Vy
bmFtZV0pCi0gICAgICAgIG91dHB1dCA9IHNlbGYucnVuKGRjb21taXRfY29tbWFuZCwgZXJyb3Jf
aGFuZGxlcj1jb21taXRfZXJyb3JfaGFuZGxlciwgaW5wdXQ9cGFzc3dvcmQpCi0gICAgICAgICMg
UmV0dXJuIGEgc3RyaW5nIHdoaWNoIGxvb2tzIGxpa2UgYSBjb21taXQgc28gdGhhdCB0aGluZ3Mg
d2hpY2ggcGFyc2UgdGhpcyBvdXRwdXQgd2lsbCBzdWNjZWVkLgotICAgICAgICBpZiBzZWxmLmRy
eXJ1bjoKLSAgICAgICAgICAgIG91dHB1dCArPSAiXG5Db21taXR0ZWQgcjAiCi0gICAgICAgIHJl
dHVybiBvdXRwdXQKLQotICAgICMgVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyB0aGUgZm9sbG93aW5n
IGFyZ3VtZW50IGZvcm1hdHM6Ci0gICAgIyBubyBhcmdzIDogcmV2LWxpc3QgdHJ1bmsuLkhFQUQK
LSAgICAjIEEuLkIgICAgOiByZXYtbGlzdCBBLi5CCi0gICAgIyBBLi4uQiAgIDogZXJyb3IhCi0g
ICAgIyBBIEIgICAgIDogW0EsIEJdICAoZGlmZmVyZW50IGZyb20gZ2l0IGRpZmYsIHdoaWNoIHdv
dWxkIHVzZSAicmV2LWxpc3QgQS4uQiIpCi0gICAgZGVmIGNvbW1pdF9pZHNfZnJvbV9jb21taXRp
c2hfYXJndW1lbnRzKHNlbGYsIGFyZ3MpOgotICAgICAgICBpZiBub3QgbGVuKGFyZ3MpOgotICAg
ICAgICAgICAgYXJncy5hcHBlbmQoJyVzLi5IRUFEJyAlIHNlbGYucmVtb3RlX2JyYW5jaF9yZWYo
KSkKLQotICAgICAgICBjb21taXRfaWRzID0gW10KLSAgICAgICAgZm9yIGNvbW1pdGlzaCBpbiBh
cmdzOgotICAgICAgICAgICAgaWYgJy4uLicgaW4gY29tbWl0aXNoOgotICAgICAgICAgICAgICAg
IHJhaXNlIFNjcmlwdEVycm9yKG1lc3NhZ2U9IicuLi4nIGlzIG5vdCBzdXBwb3J0ZWQgKGZvdW5k
IGluICclcycpLiBEaWQgeW91IG1lYW4gJy4uJz8iICUgY29tbWl0aXNoKQotICAgICAgICAgICAg
ZWxpZiAnLi4nIGluIGNvbW1pdGlzaDoKLSAgICAgICAgICAgICAgICBjb21taXRfaWRzICs9IHJl
dmVyc2VkKHNlbGYucnVuKFsnZ2l0JywgJ3Jldi1saXN0JywgY29tbWl0aXNoXSkuc3BsaXRsaW5l
cygpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIFR1cm4gc2luZ2xlIGNv
bW1pdHMgb3IgYnJhbmNoIG9yIHRhZyBuYW1lcyBpbnRvIGNvbW1pdCBpZHMuCi0gICAgICAgICAg
ICAgICAgY29tbWl0X2lkcyArPSBzZWxmLnJ1bihbJ2dpdCcsICdyZXYtcGFyc2UnLCAnLS1yZXZz
LW9ubHknLCBjb21taXRpc2hdKS5zcGxpdGxpbmVzKCkKLSAgICAgICAgcmV0dXJuIGNvbW1pdF9p
ZHMKLQotICAgIGRlZiBjb21taXRfbWVzc2FnZV9mb3JfbG9jYWxfY29tbWl0KHNlbGYsIGNvbW1p
dF9pZCk6Ci0gICAgICAgIGNvbW1pdF9saW5lcyA9IHNlbGYucnVuKFsnZ2l0JywgJ2NhdC1maWxl
JywgJ2NvbW1pdCcsIGNvbW1pdF9pZF0pLnNwbGl0bGluZXMoKQotCi0gICAgICAgICMgU2tpcCB0
aGUgZ2l0IGhlYWRlcnMuCi0gICAgICAgIGZpcnN0X2xpbmVfYWZ0ZXJfaGVhZGVycyA9IDAKLSAg
ICAgICAgZm9yIGxpbmUgaW4gY29tbWl0X2xpbmVzOgotICAgICAgICAgICAgZmlyc3RfbGluZV9h
ZnRlcl9oZWFkZXJzICs9IDEKLSAgICAgICAgICAgIGlmIGxpbmUgPT0gIiI6Ci0gICAgICAgICAg
ICAgICAgYnJlYWsKLSAgICAgICAgcmV0dXJuIENvbW1pdE1lc3NhZ2UoY29tbWl0X2xpbmVzW2Zp
cnN0X2xpbmVfYWZ0ZXJfaGVhZGVyczpdKQotCi0gICAgZGVmIGZpbGVzX2NoYW5nZWRfc3VtbWFy
eV9mb3JfY29tbWl0KHNlbGYsIGNvbW1pdF9pZCk6Ci0gICAgICAgIHJldHVybiBzZWxmLnJ1bihb
J2dpdCcsICdkaWZmLXRyZWUnLCAnLS1zaG9ydHN0YXQnLCAnLS1uby1jb21taXQtaWQnLCBjb21t
aXRfaWRdKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tv
dXQvc2NtL3NjbV91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2No
ZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHkKaW5kZXggZjBiNDg1Y2ZlZjhhMmVkNjA3YTkwMTg5
OWIwZGJiYTE5OWRlZDkxNC4uMDI5NDQ0YTgwZmYzNzY1NTQ1YmQyMDYzMjNhZTZhMDQ4ZmM1YjI4
MCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2Nt
L3NjbV91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVj
a291dC9zY20vc2NtX3VuaXR0ZXN0LnB5CkBAIC00NiwxMyArNDYsMTYgQEAgaW1wb3J0IHNodXRp
bAogCiBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVj
a291dC5hcGkgaW1wb3J0IENoZWNrb3V0Ci1mcm9tIC5zY20gaW1wb3J0IGRldGVjdF9zY21fc3lz
dGVtLCBTQ00sIFNWTiwgR2l0LCBDaGVja291dE5lZWRzVXBkYXRlLCBjb21taXRfZXJyb3JfaGFu
ZGxlciwgQXV0aGVudGljYXRpb25FcnJvciwgQW1iaWd1b3VzQ29tbWl0RXJyb3IsIGZpbmRfY2hl
Y2tvdXRfcm9vdCwgZGVmYXVsdF9zY20KIGZyb20gd2Via2l0cHkuY29tbW9uLmNvbmZpZy5jb21t
aXR0ZXJzIGltcG9ydCBDb21taXR0ZXIgICMgRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBiZSBuZWVk
ZWQKIGZyb20gd2Via2l0cHkuY29tbW9uLm5ldC5idWd6aWxsYSBpbXBvcnQgQXR0YWNobWVudCAj
IEZJWE1FOiBUaGlzIHNob3VsZCBub3QgYmUgbmVlZGVkCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUsIHJ1bl9jb21tYW5kLCBTY3JpcHRFcnJv
cgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1
dENhcHR1cmUKIGZyb20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja0V4ZWN1dGl2
ZQogCitmcm9tIC5naXQgaW1wb3J0IEdpdAorZnJvbSAuc2NtIGltcG9ydCBkZXRlY3Rfc2NtX3N5
c3RlbSwgU0NNLCBDaGVja291dE5lZWRzVXBkYXRlLCBjb21taXRfZXJyb3JfaGFuZGxlciwgQXV0
aGVudGljYXRpb25FcnJvciwgQW1iaWd1b3VzQ29tbWl0RXJyb3IsIGZpbmRfY2hlY2tvdXRfcm9v
dCwgZGVmYXVsdF9zY20KK2Zyb20gLnN2biBpbXBvcnQgU1ZOCisKICMgRXZlbnR1YWxseSB3ZSB3
aWxsIHdhbnQgdG8gd3JpdGUgdGVzdHMgd2hpY2ggd29yayBmb3IgYm90aCBzY21zLiAobGlrZSB1
cGRhdGVfd2Via2l0LCBjaGFuZ2VkX2ZpbGVzLCBldGMuKQogIyBQZXJoYXBzIHRocm91Z2ggc29t
ZSBTQ01UZXN0IGJhc2UtY2xhc3Mgd2hpY2ggYm90aCBTVk5UZXN0IGFuZCBHaXRUZXN0IGluaGVy
aXQgZnJvbS4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hl
Y2tvdXQvc2NtL3N2bi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0
L3NjbS9zdm4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTg3MjYxMDY4M2Y4ZDNmM2EzODE2ZWRhNzNlOTQ4MTRk
ZDNkZjVlZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L2NoZWNrb3V0L3NjbS9zdm4ucHkKQEAgLTAsMCArMSwzMjkgQEAKKyMgQ29weXJpZ2h0IChjKSAy
MDA5LCAyMDEwLCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHly
aWdodCAoYykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCitpbXBvcnQgb3MKKworZnJvbSB3ZWJraXRweS5jb21tb24ubWVtb2l6ZWQgaW1w
b3J0IG1lbW9pemVkCisKK2Zyb20gLnNjbSBpbXBvcnQgU0NNLCBjb21taXRfZXJyb3JfaGFuZGxl
cgorCisKKyMgQSBtaXhpbiBjbGFzcyB0aGF0IHJlcHJlc2VudHMgY29tbW9uIGZ1bmN0aW9uYWxp
dHkgZm9yIFNWTiBhbmQgR2l0LVNWTi4KK2NsYXNzIFNWTlJlcG9zaXRvcnk6CisgICAgZGVmIGhh
c19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbShzZWxmLCByZWFsbSwgaG9tZV9kaXJlY3Rvcnk9b3Mu
Z2V0ZW52KCJIT01FIikpOgorICAgICAgICAjIEFzc3VtZXMgZmluZCBhbmQgZ3JlcCBhcmUgaW5z
dGFsbGVkLgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oaG9tZV9k
aXJlY3RvcnksICIuc3VidmVyc2lvbiIpKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAg
ICAgICBmaW5kX2FyZ3MgPSBbImZpbmQiLCAiLnN1YnZlcnNpb24iLCAiLXR5cGUiLCAiZiIsICIt
ZXhlYyIsICJncmVwIiwgIi1xIiwgcmVhbG0sICJ7fSIsICI7IiwgIi1wcmludCJdCisgICAgICAg
IGZpbmRfb3V0cHV0ID0gc2VsZi5ydW4oZmluZF9hcmdzLCBjd2Q9aG9tZV9kaXJlY3RvcnksIGVy
cm9yX2hhbmRsZXI9RXhlY3V0aXZlLmlnbm9yZV9lcnJvcikucnN0cmlwKCkKKyAgICAgICAgaWYg
bm90IGZpbmRfb3V0cHV0IG9yIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oaG9tZV9k
aXJlY3RvcnksIGZpbmRfb3V0cHV0KSk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAg
ICAgIyBTdWJ2ZXJzaW9uIGVpdGhlciBzdG9yZXMgdGhlIHBhc3N3b3JkIGluIHRoZSBjcmVkZW50
aWFsIGZpbGUsIGluZGljYXRlZCBieSB0aGUgcHJlc2VuY2Ugb2YgdGhlIGtleSAicGFzc3dvcmQi
LAorICAgICAgICAjIG9yIHVzZXMgdGhlIHN5c3RlbSBwYXNzd29yZCBzdG9yZSAoZS5nLiBLZXlj
aGFpbiBvbiBNYWMgT1MgWCkgYXMgaW5kaWNhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiB0aGUga2V5
ICJwYXNzdHlwZSIuCisgICAgICAgICMgV2UgYXNzdW1lIHRoYXQgdGhlc2Uga2V5cyB3aWxsIG5v
dCBjb2luY2lkZSB3aXRoIHRoZSBhY3R1YWwgY3JlZGVudGlhbCBkYXRhIChlLmcuIHRoYXQgYSBw
ZXJzb24ncyB1c2VybmFtZQorICAgICAgICAjIGlzbid0ICJwYXNzd29yZCIpIHNvIHRoYXQgd2Ug
Y2FuIHVzZSBncmVwLgorICAgICAgICBpZiBzZWxmLnJ1bihbImdyZXAiLCAicGFzc3dvcmQiLCBm
aW5kX291dHB1dF0sIGN3ZD1ob21lX2RpcmVjdG9yeSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKSA9
PSAwOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuKFsi
Z3JlcCIsICJwYXNzdHlwZSIsIGZpbmRfb3V0cHV0XSwgY3dkPWhvbWVfZGlyZWN0b3J5LCByZXR1
cm5fZXhpdF9jb2RlPVRydWUpID09IDAKKworCitjbGFzcyBTVk4oU0NNLCBTVk5SZXBvc2l0b3J5
KToKKyAgICAjIEZJWE1FOiBUaGVzZSBiZWxvbmcgaW4gY29tbW9uLmNvbmZpZy51cmxzCisgICAg
c3ZuX3NlcnZlcl9ob3N0ID0gInN2bi53ZWJraXQub3JnIgorICAgIHN2bl9zZXJ2ZXJfcmVhbG0g
PSAiPGh0dHA6Ly9zdm4ud2Via2l0Lm9yZzo4MD4gTWFjIE9TIEZvcmdlIgorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGN3ZCwgcGF0Y2hfZGlyZWN0b3JpZXMsIGV4ZWN1dGl2ZT1Ob25lKToKKyAg
ICAgICAgU0NNLl9faW5pdF9fKHNlbGYsIGN3ZCwgZXhlY3V0aXZlKQorICAgICAgICBzZWxmLl9i
b2d1c19kaXIgPSBOb25lCisgICAgICAgIGlmIHBhdGNoX2RpcmVjdG9yaWVzID09IFtdOgorICAg
ICAgICAgICAgIyBGSVhNRTogU2NyaXB0RXJyb3IgaXMgZm9yIEV4ZWN1dGl2ZSwgdGhpcyBzaG91
bGQgcHJvYmFibHkgYmUgYSBub3JtYWwgRXhjZXB0aW9uLgorICAgICAgICAgICAgcmFpc2UgU2Ny
aXB0RXJyb3Ioc2NyaXB0X2FyZ3M9c3ZuX2luZm9fYXJncywgbWVzc2FnZT0nRW1wdHkgbGlzdCBv
ZiBwYXRjaCBkaXJlY3RvcmllcyBwYXNzZWQgdG8gU0NNLl9faW5pdF9fJykKKyAgICAgICAgZWxp
ZiBwYXRjaF9kaXJlY3RvcmllcyA9PSBOb25lOgorICAgICAgICAgICAgc2VsZi5fcGF0Y2hfZGly
ZWN0b3JpZXMgPSBbb3NwYXRoLnJlbHBhdGgoY3dkLCBzZWxmLmNoZWNrb3V0X3Jvb3QpXQorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcGF0Y2hfZGlyZWN0b3JpZXMgPSBwYXRjaF9k
aXJlY3RvcmllcworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBpbl93b3JraW5nX2RpcmVj
dG9yeShwYXRoKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHBh
dGgsICcuc3ZuJykpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZmluZF91dWlkKGNscywg
cGF0aCk6CisgICAgICAgIGlmIG5vdCBjbHMuaW5fd29ya2luZ19kaXJlY3RvcnkocGF0aCk6Cisg
ICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gY2xzLnZhbHVlX2Zyb21fc3Zu
X2luZm8ocGF0aCwgJ1JlcG9zaXRvcnkgVVVJRCcpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBk
ZWYgdmFsdWVfZnJvbV9zdm5faW5mbyhjbHMsIHBhdGgsIGZpZWxkX25hbWUpOgorICAgICAgICBz
dm5faW5mb19hcmdzID0gWydzdm4nLCAnaW5mbycsIHBhdGhdCisgICAgICAgIGluZm9fb3V0cHV0
ID0gcnVuX2NvbW1hbmQoc3ZuX2luZm9fYXJncykucnN0cmlwKCkKKyAgICAgICAgbWF0Y2ggPSBy
ZS5zZWFyY2goIl4lczogKD9QPHZhbHVlPi4rKSQiICUgZmllbGRfbmFtZSwgaW5mb19vdXRwdXQs
IHJlLk1VTFRJTElORSkKKyAgICAgICAgaWYgbm90IG1hdGNoOgorICAgICAgICAgICAgcmFpc2Ug
U2NyaXB0RXJyb3Ioc2NyaXB0X2FyZ3M9c3ZuX2luZm9fYXJncywgbWVzc2FnZT0nc3ZuIGluZm8g
ZGlkIG5vdCBjb250YWluIGEgJXMuJyAlIGZpZWxkX25hbWUpCisgICAgICAgIHJldHVybiBtYXRj
aC5ncm91cCgndmFsdWUnKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBmaW5kX2NoZWNr
b3V0X3Jvb3QocGF0aCk6CisgICAgICAgIHV1aWQgPSBTVk4uZmluZF91dWlkKHBhdGgpCisgICAg
ICAgICMgSWYgfHBhdGh8IGlzIG5vdCBpbiBhIHdvcmtpbmcgZGlyZWN0b3J5LCB3ZSdyZSBzdXBw
b3NlZCB0byByZXR1cm4gfHBhdGh8LgorICAgICAgICBpZiBub3QgdXVpZDoKKyAgICAgICAgICAg
IHJldHVybiBwYXRoCisgICAgICAgICMgU2VhcmNoIHVwIHRoZSBkaXJlY3RvcnkgaGllcmFyY2h5
IHVudGlsIHdlIGZpbmQgYSBkaWZmZXJlbnQgVVVJRC4KKyAgICAgICAgbGFzdF9wYXRoID0gTm9u
ZQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgaWYgdXVpZCAhPSBTVk4uZmluZF91
dWlkKHBhdGgpOgorICAgICAgICAgICAgICAgIHJldHVybiBsYXN0X3BhdGgKKyAgICAgICAgICAg
IGxhc3RfcGF0aCA9IHBhdGgKKyAgICAgICAgICAgIChwYXRoLCBsYXN0X2NvbXBvbmVudCkgPSBv
cy5wYXRoLnNwbGl0KHBhdGgpCisgICAgICAgICAgICBpZiBsYXN0X3BhdGggPT0gcGF0aDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBj
b21taXRfc3VjY2Vzc19yZWdleHAoKToKKyAgICAgICAgcmV0dXJuICJeQ29tbWl0dGVkIHJldmlz
aW9uICg/UDxzdm5fcmV2aXNpb24+XGQrKVwuJCIKKworICAgIEBtZW1vaXplZAorICAgIGRlZiBz
dm5fdmVyc2lvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuKFsnc3ZuJywgJy0tdmVy
c2lvbicsICctLXF1aWV0J10pCisKKyAgICBkZWYgd29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW4o
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bihbInN2biIsICJkaWZmIl0sIGN3ZD1zZWxm
LmNoZWNrb3V0X3Jvb3QsIGRlY29kZV9vdXRwdXQ9RmFsc2UpID09ICIiCisKKyAgICBkZWYgY2xl
YW5fd29ya2luZ19kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHRoZXJlIGFy
ZSBubyBsb2NrcyBseWluZyBhcm91bmQgZnJvbSBhIHByZXZpb3VzbHkgYWJvcnRlZCBzdm4gaW52
b2NhdGlvbi4KKyAgICAgICAgIyBUaGlzIGlzIHNsaWdodGx5IGRhbmdlcm91cywgYXMgaXQncyBw
b3NzaWJsZSB0aGUgdXNlciBpcyBydW5uaW5nIGFub3RoZXIgc3ZuIHByb2Nlc3MKKyAgICAgICAg
IyBvbiB0aGlzIGNoZWNrb3V0IGF0IHRoZSBzYW1lIHRpbWUuICBIb3dldmVyLCBpdCdzIG11Y2gg
bW9yZSBsaWtlbHkgdGhhdCB3ZSdyZSBydW5uaW5nCisgICAgICAgICMgdW5kZXIgd2luZG93cyBh
bmQgc3ZuIGp1c3Qgc3Vja3MgKG9yIHRoZSB1c2VyIGludGVycnVwdGVkIHN2biBhbmQgaXQgZmFp
bGVkIHRvIGNsZWFuIHVwKS4KKyAgICAgICAgc2VsZi5ydW4oWyJzdm4iLCAiY2xlYW51cCJdLCBj
d2Q9c2VsZi5jaGVja291dF9yb290KQorCisgICAgICAgICMgc3ZuIHJldmVydCAtUiBpcyBub3Qg
YXMgYXdlc29tZSBhcyBnaXQgcmVzZXQgLS1oYXJkLgorICAgICAgICAjIEl0IHdpbGwgbGVhdmUg
YWRkZWQgZmlsZXMgYXJvdW5kLCBjYXVzaW5nIGxhdGVyIHN2biB1cGRhdGUKKyAgICAgICAgIyBj
YWxscyB0byBmYWlsIG9uIHRoZSBib3RzLiAgV2UgbWFrZSB0aGlzIG1pcnJvciBnaXQgcmVzZXQg
LS1oYXJkCisgICAgICAgICMgYnkgZGVsZXRpbmcgYW55IGFkZGVkIGZpbGVzIGFzIHdlbGwuCisg
ICAgICAgIGFkZGVkX2ZpbGVzID0gcmV2ZXJzZWQoc29ydGVkKHNlbGYuYWRkZWRfZmlsZXMoKSkp
CisgICAgICAgICMgYWRkZWRfZmlsZXMoKSByZXR1cm5zIGRpcmVjdG9yaWVzIGZvciBTVk4sIHdl
IHdhbGsgdGhlIGZpbGVzIGluIHJldmVyc2UgcGF0aAorICAgICAgICAjIGxlbmd0aCBvcmRlciBz
byB0aGF0IHdlIHJlbW92ZSBmaWxlcyBiZWZvcmUgd2UgdHJ5IHRvIHJlbW92ZSB0aGUgZGlyZWN0
b3JpZXMuCisgICAgICAgIHNlbGYucnVuKFsic3ZuIiwgInJldmVydCIsICItUiIsICIuIl0sIGN3
ZD1zZWxmLmNoZWNrb3V0X3Jvb3QpCisgICAgICAgIGZvciBwYXRoIGluIGFkZGVkX2ZpbGVzOgor
ICAgICAgICAgICAgIyBUaGlzIGlzIHJvYnVzdCBhZ2FpbnN0IGN3ZCAhPSBzZWxmLmNoZWNrb3V0
X3Jvb3QKKyAgICAgICAgICAgIGFic29sdXRlX3BhdGggPSBzZWxmLmFic29sdXRlX3BhdGgocGF0
aCkKKyAgICAgICAgICAgICMgQ29tcGxldGVseSBsYW1lIHRoYXQgdGhlcmUgaXMgbm8gZWFzeSB3
YXkgdG8gcmVtb3ZlIGJvdGggdHlwZXMgd2l0aCBvbmUgY2FsbC4KKyAgICAgICAgICAgIGlmIG9z
LnBhdGguaXNkaXIocGF0aCk6CisgICAgICAgICAgICAgICAgb3Mucm1kaXIoYWJzb2x1dGVfcGF0
aCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGFic29sdXRl
X3BhdGgpCisKKyAgICBkZWYgc3RhdHVzX2NvbW1hbmQoc2VsZik6CisgICAgICAgIHJldHVybiBb
J3N2bicsICdzdGF0dXMnXQorCisgICAgZGVmIF9zdGF0dXNfcmVnZXhwKHNlbGYsIGV4cGVjdGVk
X3R5cGVzKToKKyAgICAgICAgZmllbGRfY291bnQgPSA2IGlmIHNlbGYuc3ZuX3ZlcnNpb24oKSA+
ICIxLjYiIGVsc2UgNQorICAgICAgICByZXR1cm4gIl4oP1A8c3RhdHVzPlslc10pLnslc30gKD9Q
PGZpbGVuYW1lPi4rKSQiICUgKGV4cGVjdGVkX3R5cGVzLCBmaWVsZF9jb3VudCkKKworICAgIGRl
ZiBfYWRkX3BhcmVudF9kaXJlY3RvcmllcyhzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiRG9lcyAn
c3ZuIGFkZCcgdG8gdGhlIHBhdGggYW5kIGl0cyBwYXJlbnRzLiIiIgorICAgICAgICBpZiBzZWxm
LmluX3dvcmtpbmdfZGlyZWN0b3J5KHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAg
IGRpcm5hbWUgPSBvcy5wYXRoLmRpcm5hbWUocGF0aCkKKyAgICAgICAgIyBXZSBoYXZlIGRpcm5h
bWUgZGlyZWN0cnkgLSBlbnN1cmUgaXQgYWRkZWQuCisgICAgICAgIGlmIGRpcm5hbWUgIT0gcGF0
aDoKKyAgICAgICAgICAgIHNlbGYuX2FkZF9wYXJlbnRfZGlyZWN0b3JpZXMoZGlybmFtZSkKKyAg
ICAgICAgc2VsZi5hZGQocGF0aCkKKworICAgIGRlZiBhZGQoc2VsZiwgcGF0aCwgcmV0dXJuX2V4
aXRfY29kZT1GYWxzZSk6CisgICAgICAgIHNlbGYuX2FkZF9wYXJlbnRfZGlyZWN0b3JpZXMob3Mu
cGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChwYXRoKSkpCisgICAgICAgIHJldHVybiBzZWxm
LnJ1bihbInN2biIsICJhZGQiLCBwYXRoXSwgcmV0dXJuX2V4aXRfY29kZT1yZXR1cm5fZXhpdF9j
b2RlKQorCisgICAgZGVmIGRlbGV0ZShzZWxmLCBwYXRoKToKKyAgICAgICAgcGFyZW50LCBiYXNl
ID0gb3MucGF0aC5zcGxpdChvcy5wYXRoLmFic3BhdGgocGF0aCkpCisgICAgICAgIHJldHVybiBz
ZWxmLnJ1bihbInN2biIsICJkZWxldGUiLCAiLS1mb3JjZSIsIGJhc2VdLCBjd2Q9cGFyZW50KQor
CisgICAgZGVmIGV4aXN0cyhzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLnJ1
bihbInN2biIsICJpbmZvIiwgcGF0aF0sIHJldHVybl9leGl0X2NvZGU9VHJ1ZSwgZGVjb2RlX291
dHB1dD1GYWxzZSkKKworICAgIGRlZiBjaGFuZ2VkX2ZpbGVzKHNlbGYsIGdpdF9jb21taXQ9Tm9u
ZSk6CisgICAgICAgIHN0YXR1c19jb21tYW5kID0gWyJzdm4iLCAic3RhdHVzIl0KKyAgICAgICAg
c3RhdHVzX2NvbW1hbmQuZXh0ZW5kKHNlbGYuX3BhdGNoX2RpcmVjdG9yaWVzKQorICAgICAgICAj
IEFDRE1SOiBBZGRkZWQsIENvbmZsaWN0ZWQsIERlbGV0ZWQsIE1vZGlmaWVkIG9yIFJlcGxhY2Vk
CisgICAgICAgIHJldHVybiBzZWxmLnJ1bl9zdGF0dXNfYW5kX2V4dHJhY3RfZmlsZW5hbWVzKHN0
YXR1c19jb21tYW5kLCBzZWxmLl9zdGF0dXNfcmVnZXhwKCJBQ0RNUiIpKQorCisgICAgZGVmIGNo
YW5nZWRfZmlsZXNfZm9yX3JldmlzaW9uKHNlbGYsIHJldmlzaW9uKToKKyAgICAgICAgIyBBcyBm
YXIgYXMgSSBjYW4gdGVsbCBzdm4gZGlmZiAtLXN1bW1hcml6ZSBvdXRwdXQgbG9va3MganVzdCBs
aWtlIHN2biBzdGF0dXMgb3V0cHV0LgorICAgICAgICAjIE5vIGZpbGUgY29udGVudHMgcHJpbnRl
ZCwgdGh1cyB1dGYtOCBhdXRvLWRlY29kaW5nIGluIHNlbGYucnVuIGlzIGZpbmUuCisgICAgICAg
IHN0YXR1c19jb21tYW5kID0gWyJzdm4iLCAiZGlmZiIsICItLXN1bW1hcml6ZSIsICItYyIsIHJl
dmlzaW9uXQorICAgICAgICByZXR1cm4gc2VsZi5ydW5fc3RhdHVzX2FuZF9leHRyYWN0X2ZpbGVu
YW1lcyhzdGF0dXNfY29tbWFuZCwgc2VsZi5fc3RhdHVzX3JlZ2V4cCgiQUNETVIiKSkKKworICAg
IGRlZiByZXZpc2lvbnNfY2hhbmdpbmdfZmlsZShzZWxmLCBwYXRoLCBsaW1pdD01KToKKyAgICAg
ICAgcmV2aXNpb25zID0gW10KKyAgICAgICAgIyBzdm4gbG9nIHdpbGwgZXhpdCgxKSAoYW5kIHRo
dXMgc2VsZi5ydW4gd2lsbCByYWlzZSkgaWYgdGhlIHBhdGggZG9lcyBub3QgZXhpc3QuCisgICAg
ICAgIGxvZ19jb21tYW5kID0gWydzdm4nLCAnbG9nJywgJy0tcXVpZXQnLCAnLS1saW1pdD0lcycg
JSBsaW1pdCwgcGF0aF0KKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5ydW4obG9nX2NvbW1hbmQs
IGN3ZD1zZWxmLmNoZWNrb3V0X3Jvb3QpLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIG1hdGNo
ID0gcmUuc2VhcmNoKCdecig/UDxyZXZpc2lvbj5cZCspICcsIGxpbmUpCisgICAgICAgICAgICBp
ZiBub3QgbWF0Y2g6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHJldmlz
aW9ucy5hcHBlbmQoaW50KG1hdGNoLmdyb3VwKCdyZXZpc2lvbicpKSkKKyAgICAgICAgcmV0dXJu
IHJldmlzaW9ucworCisgICAgZGVmIGNvbmZsaWN0ZWRfZmlsZXMoc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLnJ1bl9zdGF0dXNfYW5kX2V4dHJhY3RfZmlsZW5hbWVzKHNlbGYuc3RhdHVzX2Nv
bW1hbmQoKSwgc2VsZi5fc3RhdHVzX3JlZ2V4cCgiQyIpKQorCisgICAgZGVmIGFkZGVkX2ZpbGVz
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5ydW5fc3RhdHVzX2FuZF9leHRyYWN0X2ZpbGVu
YW1lcyhzZWxmLnN0YXR1c19jb21tYW5kKCksIHNlbGYuX3N0YXR1c19yZWdleHAoIkEiKSkKKwor
ICAgIGRlZiBkZWxldGVkX2ZpbGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5ydW5fc3Rh
dHVzX2FuZF9leHRyYWN0X2ZpbGVuYW1lcyhzZWxmLnN0YXR1c19jb21tYW5kKCksIHNlbGYuX3N0
YXR1c19yZWdleHAoIkQiKSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc3VwcG9ydHNf
bG9jYWxfY29tbWl0cygpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBkaXNwbGF5
X25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAic3ZuIgorCisgICAgZGVmIGhlYWRfc3ZuX3Jl
dmlzaW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi52YWx1ZV9mcm9tX3N2bl9pbmZvKHNl
bGYuY2hlY2tvdXRfcm9vdCwgJ1JldmlzaW9uJykKKworICAgICMgRklYTUU6IFRoaXMgbWV0aG9k
IHNob3VsZCBiZSBvbiBDaGVja291dC4KKyAgICBkZWYgY3JlYXRlX3BhdGNoKHNlbGYsIGdpdF9j
b21taXQ9Tm9uZSwgY2hhbmdlZF9maWxlcz1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJucyBhIGJ5
dGUgYXJyYXkgKHN0cigpKSByZXByZXNlbnRpbmcgdGhlIHBhdGNoIGZpbGUuCisgICAgICAgIFBh
dGNoIGZpbGVzIGFyZSBlZmZlY3RpdmVseSBiaW5hcnkgc2luY2UgdGhleSBtYXkgY29udGFpbgor
ICAgICAgICBmaWxlcyBvZiBtdWx0aXBsZSBkaWZmZXJlbnQgZW5jb2RpbmdzLiIiIgorICAgICAg
ICBpZiBjaGFuZ2VkX2ZpbGVzID09IFtdOgorICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAg
IGVsaWYgY2hhbmdlZF9maWxlcyA9PSBOb25lOgorICAgICAgICAgICAgY2hhbmdlZF9maWxlcyA9
IFtdCisgICAgICAgIHJldHVybiBzZWxmLnJ1bihbc2VsZi5zY3JpcHRfcGF0aCgic3ZuLWNyZWF0
ZS1wYXRjaCIpXSArIGNoYW5nZWRfZmlsZXMsCisgICAgICAgICAgICBjd2Q9c2VsZi5jaGVja291
dF9yb290LCByZXR1cm5fc3RkZXJyPUZhbHNlLAorICAgICAgICAgICAgZGVjb2RlX291dHB1dD1G
YWxzZSkKKworICAgIGRlZiBjb21taXR0ZXJfZW1haWxfZm9yX3JldmlzaW9uKHNlbGYsIHJldmlz
aW9uKToKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuKFsic3ZuIiwgInByb3BnZXQiLCAic3ZuOmF1
dGhvciIsICItLXJldnByb3AiLCAiLXIiLCByZXZpc2lvbl0pLnJzdHJpcCgpCisKKyAgICBkZWYg
Y29udGVudHNfYXRfcmV2aXNpb24oc2VsZiwgcGF0aCwgcmV2aXNpb24pOgorICAgICAgICAiIiJS
ZXR1cm5zIGEgYnl0ZSBhcnJheSAoc3RyKCkpIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzCisgICAg
ICAgIG9mIHBhdGggQCByZXZpc2lvbiBpbiB0aGUgcmVwb3NpdG9yeS4iIiIKKyAgICAgICAgcmVt
b3RlX3BhdGggPSAiJXMvJXMiICUgKHNlbGYuX3JlcG9zaXRvcnlfdXJsKCksIHBhdGgpCisgICAg
ICAgIHJldHVybiBzZWxmLnJ1bihbInN2biIsICJjYXQiLCAiLXIiLCByZXZpc2lvbiwgcmVtb3Rl
X3BhdGhdLCBkZWNvZGVfb3V0cHV0PUZhbHNlKQorCisgICAgZGVmIGRpZmZfZm9yX3JldmlzaW9u
KHNlbGYsIHJldmlzaW9uKToKKyAgICAgICAgIyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkg
dXNlIGN3ZD1zZWxmLmNoZWNrb3V0X3Jvb3QKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuKFsnc3Zu
JywgJ2RpZmYnLCAnLWMnLCByZXZpc2lvbl0pCisKKyAgICBkZWYgX2JvZ3VzX2Rpcl9uYW1lKHNl
bGYpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgid2luIik6CisgICAgICAg
ICAgICBwYXJlbnRfZGlyID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBwYXJlbnRfZGlyID0gc3lzLnBhdGhbMF0gICMgdGVtcGRpciBpcyBub3Qgc2Vj
dXJlLgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHBhcmVudF9kaXIsICJ0ZW1wX3N2bl9j
b25maWciKQorCisgICAgZGVmIF9zZXR1cF9ib2d1c19kaXIoc2VsZiwgbG9nKToKKyAgICAgICAg
c2VsZi5fYm9ndXNfZGlyID0gc2VsZi5fYm9ndXNfZGlyX25hbWUoKQorICAgICAgICBpZiBub3Qg
b3MucGF0aC5leGlzdHMoc2VsZi5fYm9ndXNfZGlyKToKKyAgICAgICAgICAgIG9zLm1rZGlyKHNl
bGYuX2JvZ3VzX2RpcikKKyAgICAgICAgICAgIHNlbGYuX2RlbGV0ZV9ib2d1c19kaXIgPSBUcnVl
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9kZWxldGVfYm9ndXNfZGlyID0gRmFs
c2UKKyAgICAgICAgaWYgbG9nOgorICAgICAgICAgICAgbG9nLmRlYnVnKCcgIEh0bWw6IHRlbXAg
Y29uZmlnIGRpcjogIiVzIi4nLCBzZWxmLl9ib2d1c19kaXIpCisKKyAgICBkZWYgX3RlYXJkb3du
X2JvZ3VzX2RpcihzZWxmLCBsb2cpOgorICAgICAgICBpZiBzZWxmLl9kZWxldGVfYm9ndXNfZGly
OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLl9ib2d1c19kaXIsIFRydWUpCisgICAg
ICAgICAgICBpZiBsb2c6CisgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCcgIEh0bWw6IHJlbW92
ZWQgdGVtcCBjb25maWcgZGlyOiAiJXMiLicsIHNlbGYuX2JvZ3VzX2RpcikKKyAgICAgICAgc2Vs
Zi5fYm9ndXNfZGlyID0gTm9uZQorCisgICAgZGVmIGRpZmZfZm9yX2ZpbGUoc2VsZiwgcGF0aCwg
bG9nPU5vbmUpOgorICAgICAgICBzZWxmLl9zZXR1cF9ib2d1c19kaXIobG9nKQorICAgICAgICB0
cnk6CisgICAgICAgICAgICBhcmdzID0gWydzdm4nLCAnZGlmZiddCisgICAgICAgICAgICBpZiBz
ZWxmLl9ib2d1c19kaXI6CisgICAgICAgICAgICAgICAgYXJncyArPSBbJy0tY29uZmlnLWRpcics
IHNlbGYuX2JvZ3VzX2Rpcl0KKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKHBhdGgpCisgICAgICAg
ICAgICByZXR1cm4gc2VsZi5ydW4oYXJncywgY3dkPXNlbGYuY2hlY2tvdXRfcm9vdCkKKyAgICAg
ICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3RlYXJkb3duX2JvZ3VzX2Rpcihsb2cpCisK
KyAgICBkZWYgc2hvd19oZWFkKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5ydW4o
Wydzdm4nLCAnY2F0JywgJy1yJywgJ0JBU0UnLCBwYXRoXSwgZGVjb2RlX291dHB1dD1GYWxzZSkK
KworICAgIGRlZiBfcmVwb3NpdG9yeV91cmwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnZh
bHVlX2Zyb21fc3ZuX2luZm8oc2VsZi5jaGVja291dF9yb290LCAnVVJMJykKKworICAgIGRlZiBh
cHBseV9yZXZlcnNlX2RpZmYoc2VsZiwgcmV2aXNpb24pOgorICAgICAgICAjICctYyAtcmV2aXNp
b24nIGFwcGxpZXMgdGhlIGludmVyc2UgZGlmZiBvZiAncmV2aXNpb24nCisgICAgICAgIHN2bl9t
ZXJnZV9hcmdzID0gWydzdm4nLCAnbWVyZ2UnLCAnLS1ub24taW50ZXJhY3RpdmUnLCAnLWMnLCAn
LSVzJyAlIHJldmlzaW9uLCBzZWxmLl9yZXBvc2l0b3J5X3VybCgpXQorICAgICAgICBsb2coIldB
Uk5JTkc6IHN2biBtZXJnZSBoYXMgYmVlbiBrbm93biB0byB0YWtlIG1vcmUgdGhhbiAxMCBtaW51
dGVzIHRvIGNvbXBsZXRlLiAgSXQgaXMgcmVjb21tZW5kZWQgeW91IHVzZSBnaXQgZm9yIHJvbGxv
dXRzLiIpCisgICAgICAgIGxvZygiUnVubmluZyAnJXMnIiAlICIgIi5qb2luKHN2bl9tZXJnZV9h
cmdzKSkKKyAgICAgICAgIyBGSVhNRTogU2hvdWxkIHRoaXMgdXNlIGN3ZD1zZWxmLmNoZWNrb3V0
X3Jvb3Q/CisgICAgICAgIHNlbGYucnVuKHN2bl9tZXJnZV9hcmdzKQorCisgICAgZGVmIHJldmVy
dF9maWxlcyhzZWxmLCBmaWxlX3BhdGhzKToKKyAgICAgICAgIyBGSVhNRTogVGhpcyBzaG91bGQg
cHJvYmFibHkgdXNlIGN3ZD1zZWxmLmNoZWNrb3V0X3Jvb3QuCisgICAgICAgIHNlbGYucnVuKFsn
c3ZuJywgJ3JldmVydCddICsgZmlsZV9wYXRocykKKworICAgIGRlZiBjb21taXRfd2l0aF9tZXNz
YWdlKHNlbGYsIG1lc3NhZ2UsIHVzZXJuYW1lPU5vbmUsIHBhc3N3b3JkPU5vbmUsIGdpdF9jb21t
aXQ9Tm9uZSwgZm9yY2Vfc3F1YXNoPUZhbHNlLCBjaGFuZ2VkX2ZpbGVzPU5vbmUpOgorICAgICAg
ICAjIGdpdC1jb21taXQgYW5kIGZvcmNlIGFyZSBub3QgdXNlZCBieSBTVk4uCisgICAgICAgIHN2
bl9jb21taXRfYXJncyA9IFsic3ZuIiwgImNvbW1pdCJdCisKKyAgICAgICAgaWYgbm90IHVzZXJu
YW1lIGFuZCBub3Qgc2VsZi5oYXNfYXV0aG9yaXphdGlvbl9mb3JfcmVhbG0oc2VsZi5zdm5fc2Vy
dmVyX3JlYWxtKToKKyAgICAgICAgICAgIHJhaXNlIEF1dGhlbnRpY2F0aW9uRXJyb3Ioc2VsZi5z
dm5fc2VydmVyX2hvc3QpCisgICAgICAgIGlmIHVzZXJuYW1lOgorICAgICAgICAgICAgc3ZuX2Nv
bW1pdF9hcmdzLmV4dGVuZChbIi0tdXNlcm5hbWUiLCB1c2VybmFtZV0pCisKKyAgICAgICAgc3Zu
X2NvbW1pdF9hcmdzLmV4dGVuZChbIi1tIiwgbWVzc2FnZV0pCisKKyAgICAgICAgaWYgY2hhbmdl
ZF9maWxlczoKKyAgICAgICAgICAgIHN2bl9jb21taXRfYXJncy5leHRlbmQoY2hhbmdlZF9maWxl
cykKKworICAgICAgICBpZiBzZWxmLmRyeXJ1bjoKKyAgICAgICAgICAgIF9sb2cgPSBsb2dnaW5n
LmdldExvZ2dlcigid2Via2l0cHkuY29tbW9uLnN5c3RlbSIpCisgICAgICAgICAgICBfbG9nLmRl
YnVnKCdXb3VsZCBydW4gU1ZOIGNvbW1hbmQ6ICInICsgIiAiLmpvaW4oc3ZuX2NvbW1pdF9hcmdz
KSArICciJykKKworICAgICAgICAgICAgIyBSZXR1cm4gYSBzdHJpbmcgd2hpY2ggbG9va3MgbGlr
ZSBhIGNvbW1pdCBzbyB0aGF0IHRoaW5ncyB3aGljaCBwYXJzZSB0aGlzIG91dHB1dCB3aWxsIHN1
Y2NlZWQuCisgICAgICAgICAgICByZXR1cm4gIkRyeSBydW4sIG5vIGNvbW1pdC5cbkNvbW1pdHRl
ZCByZXZpc2lvbiAwLiIKKworICAgICAgICByZXR1cm4gc2VsZi5ydW4oc3ZuX2NvbW1pdF9hcmdz
LCBjd2Q9c2VsZi5jaGVja291dF9yb290LCBlcnJvcl9oYW5kbGVyPWNvbW1pdF9lcnJvcl9oYW5k
bGVyKQorCisgICAgZGVmIHN2bl9jb21taXRfbG9nKHNlbGYsIHN2bl9yZXZpc2lvbik6CisgICAg
ICAgIHN2bl9yZXZpc2lvbiA9IHNlbGYuc3RyaXBfcl9mcm9tX3N2bl9yZXZpc2lvbihzdm5fcmV2
aXNpb24pCisgICAgICAgIHJldHVybiBzZWxmLnJ1bihbJ3N2bicsICdsb2cnLCAnLS1ub24taW50
ZXJhY3RpdmUnLCAnLS1yZXZpc2lvbicsIHN2bl9yZXZpc2lvbl0pCisKKyAgICBkZWYgbGFzdF9z
dm5fY29tbWl0X2xvZyhzZWxmKToKKyAgICAgICAgIyBCQVNFIGlzIHRoZSBjaGVja291dCByZXZp
c2lvbiwgSEVBRCBpcyB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgcmV2aXNpb24KKyAgICAgICAgIyBo
dHRwOi8vc3ZuYm9vay5yZWQtYmVhbi5jb20vZW4vMS4wL2NoMDNzMDMuaHRtbAorICAgICAgICBy
ZXR1cm4gc2VsZi5zdm5fY29tbWl0X2xvZygnQkFTRScpCisKKyAgICBkZWYgcHJvcHNldChzZWxm
LCBwbmFtZSwgcHZhbHVlLCBwYXRoKToKKyAgICAgICAgZGlyLCBiYXNlID0gb3MucGF0aC5zcGxp
dChwYXRoKQorICAgICAgICByZXR1cm4gc2VsZi5ydW4oWydzdm4nLCAncHNldCcsIHBuYW1lLCBw
dmFsdWUsIGJhc2VdLCBjd2Q9ZGlyKQorCisgICAgZGVmIHByb3BnZXQoc2VsZiwgcG5hbWUsIHBh
dGgpOgorICAgICAgICBkaXIsIGJhc2UgPSBvcy5wYXRoLnNwbGl0KHBhdGgpCisgICAgICAgIHJl
dHVybiBzZWxmLnJ1bihbJ3N2bicsICdwZ2V0JywgcG5hbWUsIGJhc2VdLCBjd2Q9ZGlyKS5lbmNv
ZGUoJ3V0Zi04JykucnN0cmlwKCJcbiIpCg==
</data>
<flag name="review"
          id="84763"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>