<?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>219363</bug_id>
          
          <creation_ts>2020-11-30 11:45:08 -0800</creation_ts>
          <short_desc>[build.webkit.org] Add unit-tests based on new buildbot</short_desc>
          <delta_ts>2021-02-08 07:37:49 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=219364</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=219374</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>175056</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Aakash Jain">aakash_jain</reporter>
          <assigned_to name="Aakash Jain">aakash_jain</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>jbedard</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1710695</commentid>
    <comment_count>0</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-11-30 11:45:08 -0800</bug_when>
    <thetext>[build.webkit.org] Add unit-tests based on new Buildbot. Previous unit-test had very minimal coverage of build steps. Most of the build-steps were not covered. Unit tests are significantly different for old Buildbot (Buildbot 0.8) and newer Buildbot.

Add steps unit-tests for newer buildbot separately from old buildbot unit-tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710714</commentid>
    <comment_count>1</comment_count>
      <attachid>415044</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-11-30 12:39:44 -0800</bug_when>
    <thetext>Created attachment 415044
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710718</commentid>
    <comment_count>2</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-11-30 12:52:24 -0800</bug_when>
    <thetext>(In reply to Aakash Jain from comment #1)
&gt; Created attachment 415044 [details]
&gt; WIP
This is not final patch. Need https://bugs.webkit.org/show_bug.cgi?id=219364 to be landed first which will rename steps_unittest.py to steps_unittests_old.py

Then this patch will add steps_unittest.py containing new unit-tests. Also we would be using existing runUnittests.py script (https://trac.webkit.org/browser/webkit/trunk/Tools/CISupport/ews-build/runUnittests.py) to run these unit-tests (both for EWS and build-webkit-org).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710860</commentid>
    <comment_count>3</comment_count>
      <attachid>415077</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-11-30 16:49:02 -0800</bug_when>
    <thetext>Created attachment 415077
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711124</commentid>
    <comment_count>4</comment_count>
      <attachid>415151</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-12-01 12:18:16 -0800</bug_when>
    <thetext>Created attachment 415151
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711127</commentid>
    <comment_count>5</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-12-01 12:20:16 -0800</bug_when>
    <thetext>(In reply to Aakash Jain from comment #4)
&gt; Created attachment 415151 [details]
&gt; Patch
This patch ensures that the unit-tests run fine in Python 3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711131</commentid>
    <comment_count>6</comment_count>
      <attachid>415077</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-12-01 12:31:32 -0800</bug_when>
    <thetext>Comment on attachment 415077
Patch

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

&gt; Tools/CISupport/build-webkit-org/steps_unittest.py:199
&gt; +                        timeout=1200,

Since we&apos;re starting this from scratch, are we happy with this style? Or do we want:

self.expectRemoteCommands(
    ExpectShell(
        workdir=&apos;wkdir&apos;,
        timeout=1200,
        logEnviron=True,
        logEnviron=True,
        command=[&apos;python&apos;, &apos;./Tools/Scripts/run-bindings-tests&apos;],
    ) + 0,
)

I&apos;m Ok with the existing style, but it doesn&apos;t match what we do outside of buildbot code, and if we want to change things, now is the time.

&gt; Tools/CISupport/build-webkit-org/steps_unittest.py:203
&gt; +            + 0,

I never did understand why we do this &quot;+#&quot; thing after our expect shell commands.

&gt; Tools/CISupport/build-webkit-org/steps_unittest.py:220
&gt; +        return self.runStep()

What motivates returning the result of runStep? That usually is not how Python unit tests work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711193</commentid>
    <comment_count>7</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-12-01 15:35:33 -0800</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #6)
&gt; I&apos;m Ok with the existing style, but it doesn&apos;t match what we do outside of  buildbot code, and if we want to change things, now is the time.
Updated patch uses suggested style.
&gt; &gt; Tools/CISupport/build-webkit-org/steps_unittest.py:220
&gt; &gt; +        return self.runStep()
&gt; 
&gt; What motivates returning the result of runStep? That usually is not how Python unit tests work.
This is copied from existing ews-build unit-tests. Note that we aren&apos;t using python inbuilt unittest module, we are using &quot;from twisted.trial import unittest&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711194</commentid>
    <comment_count>8</comment_count>
      <attachid>415169</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-12-01 15:36:22 -0800</bug_when>
    <thetext>Created attachment 415169
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711332</commentid>
    <comment_count>9</comment_count>
      <attachid>415169</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-12-02 07:37:25 -0800</bug_when>
    <thetext>Comment on attachment 415169
Patch

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

&gt; Tools/CISupport/build-webkit-org/htdigestparser_unittest.py:39
&gt; +            digest_file.seek(0)

This writes the content at the beginning of the file instead of the end (which was it&apos;s previous behavior), is that what we want?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711381</commentid>
    <comment_count>10</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-12-02 10:34:59 -0800</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #9)
&gt; This writes the content at the beginning of the file instead of the end (which was it&apos;s previous behavior), is that what we want?
It doesn&apos;t seems to matter for these unit-tests. They are passing for both python 2 and 3 after this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711397</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-12-02 11:05:16 -0800</bug_when>
    <thetext>Committed r270354: &lt;https://trac.webkit.org/changeset/270354&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 415169.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711399</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-12-02 11:06:15 -0800</bug_when>
    <thetext>&lt;rdar://problem/71902274&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415044</attachid>
            <date>2020-11-30 12:39:44 -0800</date>
            <delta_ts>2020-11-30 16:48:59 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-219363-20201130153943.patch</filename>
            <type>text/plain</type>
            <size>30311</size>
            <attacher name="Aakash Jain">aakash_jain</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MDI1NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEyIEBACisyMDIwLTExLTMwICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNv
bT4KKworICAgICAgICBbYnVpbGQud2Via2l0Lm9yZ10gQWRkIHVuaXQtdGVzdHMgYmFzZWQgb24g
bmV3IGJ1aWxkYm90CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTkzNjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIENJU3VwcG9ydC9idWlsZC13ZWJraXQtb3JnL3N0ZXBzX3VuaXR0ZXN0X25ldy5weTog
QWRkZWQgc3RlcHMgdW5pdC10ZXN0cyBmb3IgbmV3IGJ1aWxkYm90LgorCiAyMDIwLTExLTMwICBK
b25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbd2Via2l0c2Nt
cHldIFN1cHBvcnQgcmVtb3RlIHJlcG9zaXRvcmllcyBpbiBnaXQtd2Via2l0CkluZGV4OiBUb29s
cy9DSVN1cHBvcnQvYnVpbGQtd2Via2l0LW9yZy9zdGVwc191bml0dGVzdF9uZXcucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvQ0lTdXBwb3J0L2J1aWxkLXdlYmtpdC1vcmcvc3RlcHNfdW5pdHRlc3Rf
bmV3LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL0NJU3VwcG9ydC9idWlsZC13ZWJraXQtb3Jn
L3N0ZXBzX3VuaXR0ZXN0X25ldy5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxOSBAQAor
IyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAor
IyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgaW5zcGVjdAor
aW1wb3J0IG9wZXJhdG9yCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0ZW1wZmls
ZQorCitmcm9tIGJ1aWxkYm90LnByb2Nlc3MucmVzdWx0cyBpbXBvcnQgUmVzdWx0cywgU1VDQ0VT
UywgRkFJTFVSRSwgV0FSTklOR1MsIFNLSVBQRUQsIEVYQ0VQVElPTiwgUkVUUlkKK2Zyb20gYnVp
bGRib3QudGVzdC5mYWtlLnJlbW90ZWNvbW1hbmQgaW1wb3J0IEV4cGVjdCwgRXhwZWN0UmVtb3Rl
UmVmLCBFeHBlY3RTaGVsbAorZnJvbSBidWlsZGJvdC50ZXN0LnV0aWwuc3RlcHMgaW1wb3J0IEJ1
aWxkU3RlcE1peGluCitmcm9tIGJ1aWxkYm90LnV0aWwgaW1wb3J0IGlkZW50aWZpZXJzIGFzIGJ1
aWxkYm90X2lkZW50aWZpZXJzCitmcm9tIG1vY2sgaW1wb3J0IGNhbGwKK2Zyb20gdHdpc3RlZC5p
bnRlcm5ldCBpbXBvcnQgZGVmZXIsIGVycm9yLCByZWFjdG9yCitmcm9tIHR3aXN0ZWQucHl0aG9u
IGltcG9ydCBmYWlsdXJlLCBsb2cKK2Zyb20gdHdpc3RlZC50cmlhbCBpbXBvcnQgdW5pdHRlc3QK
KworZnJvbSBzdGVwcyBpbXBvcnQgKgorCitDVVJSRU5UX0hPU1ROQU1FID0gc29ja2V0LmdldGhv
c3RuYW1lKCkuc3RyaXAoKQorCisKK2NsYXNzIEV4cGVjdE1hc3RlclNoZWxsQ29tbWFuZChvYmpl
Y3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21tYW5kLCB3b3JrZGlyPU5vbmUsIGVudj1O
b25lLCB1c2VQVFk9MCk6CisgICAgICAgIHNlbGYuYXJncyA9IGNvbW1hbmQKKyAgICAgICAgc2Vs
Zi51c2VQVFkgPSB1c2VQVFkKKyAgICAgICAgc2VsZi5yYyA9IE5vbmUKKyAgICAgICAgc2VsZi5w
YXRoID0gTm9uZQorICAgICAgICBzZWxmLmxvZ3MgPSBbXQorCisgICAgICAgIGlmIGVudiBpcyBu
b3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZW52ID0gZW52CisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBzZWxmLmVudiA9IG9zLmVudmlyb24KKyAgICAgICAgaWYgd29ya2RpcjoKKyAgICAg
ICAgICAgIHNlbGYucGF0aCA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgd29ya2RpcikKKwor
ICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBsb2coc2VsZiwgbmFtZSwgdmFsdWUpOgorICAgICAg
ICByZXR1cm4gKCdsb2cnLCBuYW1lLCB2YWx1ZSkKKworICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90
aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgaW50KToKKyAgICAgICAgICAgIHNl
bGYucmMgPSBvdGhlcgorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uob3RoZXIsIHR1cGxlKSBhbmQg
b3RoZXJbMF0gPT0gJ2xvZyc6CisgICAgICAgICAgICBzZWxmLmxvZ3MuYXBwZW5kKChvdGhlclsx
XSwgb3RoZXJbMl0pKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fcmVwcl9fKHNl
bGYpOgorICAgICAgICByZXR1cm4gJ0V4cGVjdE1hc3RlclNoZWxsQ29tbWFuZCh7MH0pJy5mb3Jt
YXQocmVwcihzZWxmLmFyZ3MpKQorCisKK2NsYXNzIEJ1aWxkU3RlcE1peGluQWRkaXRpb25zKEJ1
aWxkU3RlcE1peGluKToKKyAgICBkZWYgc2V0VXBCdWlsZFN0ZXAoc2VsZik6CisgICAgICAgIHNl
bGYucGF0Y2gocmVhY3RvciwgJ3NwYXduUHJvY2VzcycsIGxhbWJkYSAqYXJncywgKiprd2FyZ3M6
IHNlbGYuX2NoZWNrU3Bhd25Qcm9jZXNzKCphcmdzLCAqKmt3YXJncykpCisgICAgICAgIHNlbGYu
X2V4cGVjdGVkX2xvY2FsX2NvbW1hbmRzID0gW10KKworICAgICAgICBzZWxmLl90ZW1wX2RpcmVj
dG9yeSA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICBvcy5jaGRpcihzZWxmLl90ZW1wX2Rp
cmVjdG9yeSkKKyAgICAgICAgc2VsZi5fZXhwZWN0ZWRfdXBsb2FkZWRfZmlsZXMgPSBbXQorCisg
ICAgICAgIHN1cGVyKEJ1aWxkU3RlcE1peGluQWRkaXRpb25zLCBzZWxmKS5zZXRVcEJ1aWxkU3Rl
cCgpCisKKyAgICBkZWYgdGVhckRvd25CdWlsZFN0ZXAoc2VsZik6CisgICAgICAgIHNodXRpbC5y
bXRyZWUoc2VsZi5fdGVtcF9kaXJlY3RvcnkpCisgICAgICAgIHN1cGVyKEJ1aWxkU3RlcE1peGlu
QWRkaXRpb25zLCBzZWxmKS50ZWFyRG93bkJ1aWxkU3RlcCgpCisKKyAgICBkZWYgZmFrZUJ1aWxk
RmluaXNoZWQoc2VsZiwgdGV4dCwgcmVzdWx0cyk6CisgICAgICAgIHNlbGYuYnVpbGQudGV4dCA9
IHRleHQKKyAgICAgICAgc2VsZi5idWlsZC5yZXN1bHRzID0gcmVzdWx0cworCisgICAgZGVmIHNl
dHVwU3RlcChzZWxmLCBzdGVwLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLnByZXZp
b3VzX3N0ZXBzID0ga3dhcmdzLmdldCgncHJldmlvdXNfc3RlcHMnKSBvciBbXQorICAgICAgICBp
ZiBzZWxmLnByZXZpb3VzX3N0ZXBzOgorICAgICAgICAgICAgZGVsIGt3YXJnc1sncHJldmlvdXNf
c3RlcHMnXQorCisgICAgICAgIHN1cGVyKEJ1aWxkU3RlcE1peGluQWRkaXRpb25zLCBzZWxmKS5z
ZXR1cFN0ZXAoc3RlcCwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmJ1aWxkLnRlcm1p
bmF0ZSA9IEZhbHNlCisgICAgICAgIHNlbGYuYnVpbGQuc3RvcHBlZCA9IEZhbHNlCisgICAgICAg
IHNlbGYuYnVpbGQuZXhlY3V0ZWRTdGVwcyA9IHNlbGYuZXhlY3V0ZWRTdGVwcworICAgICAgICBz
ZWxmLmJ1aWxkLmJ1aWxkRmluaXNoZWQgPSBzZWxmLmZha2VCdWlsZEZpbmlzaGVkCisgICAgICAg
IHNlbGYuX2V4cGVjdGVkX2FkZGVkX3VybHMgPSBbXQorICAgICAgICBzZWxmLl9leHBlY3RlZF9z
b3VyY2VzID0gTm9uZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGV4ZWN1dGVkU3RlcHMoc2Vs
Zik6CisgICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIHN0ZXA6IG5vdCBzdGVwLnN0b3BwZWQs
IHNlbGYucHJldmlvdXNfc3RlcHMpCisKKyAgICBkZWYgc2V0UHJvcGVydHkoc2VsZiwgbmFtZSwg
dmFsdWUsIHNvdXJjZT0nVW5rbm93bicpOgorICAgICAgICBzZWxmLnByb3BlcnRpZXMuc2V0UHJv
cGVydHkobmFtZSwgdmFsdWUsIHNvdXJjZSkKKworICAgIGRlZiBnZXRQcm9wZXJ0eShzZWxmLCBu
YW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYucHJvcGVydGllcy5nZXRQcm9wZXJ0eShuYW1lKQor
CisgICAgZGVmIGV4cGVjdEFkZGVkVVJMcyhzZWxmLCBhZGRlZF91cmxzKToKKyAgICAgICAgc2Vs
Zi5fZXhwZWN0ZWRfYWRkZWRfdXJscyA9IGFkZGVkX3VybHMKKworICAgIGRlZiBleHBlY3RVcGxv
YWRlZEZpbGUoc2VsZiwgcGF0aCk6CisgICAgICAgIHNlbGYuX2V4cGVjdGVkX3VwbG9hZGVkX2Zp
bGVzLmFwcGVuZChwYXRoKQorCisgICAgZGVmIGV4cGVjdExvY2FsQ29tbWFuZHMoc2VsZiwgKmV4
cGVjdGVkX2NvbW1hbmRzKToKKyAgICAgICAgc2VsZi5fZXhwZWN0ZWRfbG9jYWxfY29tbWFuZHMu
ZXh0ZW5kKGV4cGVjdGVkX2NvbW1hbmRzKQorCisgICAgZGVmIGV4cGVjdFJlbW90ZUNvbW1hbmRz
KHNlbGYsICpleHBlY3RlZF9jb21tYW5kcyk6CisgICAgICAgIHNlbGYuZXhwZWN0Q29tbWFuZHMo
KmV4cGVjdGVkX2NvbW1hbmRzKQorCisgICAgZGVmIGV4cGVjdFNvdXJjZXMoc2VsZiwgZXhwZWN0
ZWRfc291cmNlcyk6CisgICAgICAgIHNlbGYuX2V4cGVjdGVkX3NvdXJjZXMgPSBleHBlY3RlZF9z
b3VyY2VzCisKKyAgICBkZWYgX2NoZWNrU3Bhd25Qcm9jZXNzKHNlbGYsIHByb2Nlc3NQcm90b2Nv
bCwgZXhlY3V0YWJsZSwgYXJncywgZW52LCBwYXRoLCB1c2VQVFksICoqa3dhcmdzKToKKyAgICAg
ICAgZ290ID0gKGV4ZWN1dGFibGUsIGFyZ3MsIGVudiwgcGF0aCwgdXNlUFRZKQorICAgICAgICBp
ZiBub3Qgc2VsZi5fZXhwZWN0ZWRfbG9jYWxfY29tbWFuZHM6CisgICAgICAgICAgICBzZWxmLmZh
aWwoJ2dvdCBsb2NhbCBjb21tYW5kIHswfSB3aGVuIG5vIGZ1cnRoZXIgY29tbWFuZHMgd2VyZSBl
eHBlY3RlZCcuZm9ybWF0KGdvdCkpCisgICAgICAgIGxvY2FsX2NvbW1hbmQgPSBzZWxmLl9leHBl
Y3RlZF9sb2NhbF9jb21tYW5kcy5wb3AoMCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChnb3QsIChsb2NhbF9jb21tYW5kLmFyZ3NbMF0sIGxvY2FsX2NvbW1hbmQu
YXJncywgbG9jYWxfY29tbWFuZC5lbnYsIGxvY2FsX2NvbW1hbmQucGF0aCwgbG9jYWxfY29tbWFu
ZC51c2VQVFkpKQorICAgICAgICBleGNlcHQgQXNzZXJ0aW9uRXJyb3I6CisgICAgICAgICAgICBs
b2cuZXJyKCkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBs
b2NhbF9jb21tYW5kLmxvZ3M6CisgICAgICAgICAgICBpZiBuYW1lID09ICdzdGRvdXQnOgorICAg
ICAgICAgICAgICAgIHByb2Nlc3NQcm90b2NvbC5vdXRSZWNlaXZlZCh2YWx1ZSkKKyAgICAgICAg
ICAgIGVsaWYgbmFtZSA9PSAnc3RkZXJyJzoKKyAgICAgICAgICAgICAgICBwcm9jZXNzUHJvdG9j
b2wuZXJyUmVjZWl2ZWQodmFsdWUpCisgICAgICAgIGlmIGxvY2FsX2NvbW1hbmQucmMgIT0gMDoK
KyAgICAgICAgICAgIHZhbHVlID0gZXJyb3IuUHJvY2Vzc1Rlcm1pbmF0ZWQoZXhpdENvZGU9bG9j
YWxfY29tbWFuZC5yYykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbHVlID0gZXJyb3Iu
UHJvY2Vzc0RvbmUoTm9uZSkKKyAgICAgICAgcHJvY2Vzc1Byb3RvY29sLnByb2Nlc3NFbmRlZChm
YWlsdXJlLkZhaWx1cmUodmFsdWUpKQorCisgICAgZGVmIF9hZGRlZF9maWxlcyhzZWxmKToKKyAg
ICAgICAgcmVzdWx0cyA9IFtdCisgICAgICAgIGZvciBkaXJwYXRoLCBkaXJuYW1lcywgZmlsZW5h
bWVzIGluIG9zLndhbGsoc2VsZi5fdGVtcF9kaXJlY3RvcnkpOgorICAgICAgICAgICAgcmVsYXRp
dmVfcm9vdF9wYXRoID0gb3MucGF0aC5yZWxwYXRoKGRpcnBhdGgsIHN0YXJ0PXNlbGYuX3RlbXBf
ZGlyZWN0b3J5KQorICAgICAgICAgICAgaWYgcmVsYXRpdmVfcm9vdF9wYXRoID09ICcuJzoKKyAg
ICAgICAgICAgICAgICByZWxhdGl2ZV9yb290X3BhdGggPSAnJworICAgICAgICAgICAgZm9yIG5h
bWUgaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG9zLnBhdGgu
am9pbihyZWxhdGl2ZV9yb290X3BhdGgsIG5hbWUpKQorICAgICAgICByZXR1cm4gcmVzdWx0cwor
CisgICAgZGVmIHJ1blN0ZXAoc2VsZik6CisgICAgICAgIGRlZiBjaGVjayhyZXN1bHQpOgorICAg
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9leHBlY3RlZF9sb2NhbF9jb21tYW5kcywg
W10sICdhc3NlcnQgYWxsIGV4cGVjdGVkIGxvY2FsIGNvbW1hbmRzIHdlcmUgcnVuJykKKyAgICAg
ICAgICAgIHNlbGYuZXhwZWN0QWRkZWRVUkxzKHNlbGYuX2V4cGVjdGVkX2FkZGVkX3VybHMpCisg
ICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2FkZGVkX2ZpbGVzKCksIHNlbGYuX2V4
cGVjdGVkX3VwbG9hZGVkX2ZpbGVzKQorICAgICAgICAgICAgaWYgc2VsZi5fZXhwZWN0ZWRfc291
cmNlcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAjIENvbnZlcnQgdG8gZGljdGlvbmFy
aWVzIGJlY2F1c2UgYXNzZXJ0RXF1YWwoKSBvbmx5IGtub3dzIGhvdyB0byBkaWZmIFB5dGhvbiBi
dWlsdC1pbiB0eXBlcy4KKyAgICAgICAgICAgICAgICBhY3R1YWxfc291cmNlcyA9IHNvcnRlZChb
c291cmNlLmFzRGljdCgpIGZvciBzb3VyY2UgaW4gc2VsZi5idWlsZC5zb3VyY2VzXSwga2V5PW9w
ZXJhdG9yLml0ZW1nZXR0ZXIoJ2NvZGViYXNlJykpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRf
c291cmNlcyA9IHNvcnRlZChbc291cmNlLmFzRGljdCgpIGZvciBzb3VyY2UgaW4gc2VsZi5fZXhw
ZWN0ZWRfc291cmNlc10sIGtleT1vcGVyYXRvci5pdGVtZ2V0dGVyKCdjb2RlYmFzZScpKQorICAg
ICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX3NvdXJjZXMsIGV4cGVjdGVkX3Nv
dXJjZXMpCisgICAgICAgIGRlZmVycmVkX3Jlc3VsdCA9IHN1cGVyKEJ1aWxkU3RlcE1peGluQWRk
aXRpb25zLCBzZWxmKS5ydW5TdGVwKCkKKyAgICAgICAgZGVmZXJyZWRfcmVzdWx0LmFkZENhbGxi
YWNrKGNoZWNrKQorICAgICAgICByZXR1cm4gZGVmZXJyZWRfcmVzdWx0CisKKworZGVmIHVwbG9h
ZEZpbGVXaXRoQ29udGVudHNPZlN0cmluZyhzdHJpbmcsIHRpbWVzdGFtcD1Ob25lKToKKyAgICBk
ZWYgYmVoYXZpb3IoY29tbWFuZCk6CisgICAgICAgIHdyaXRlciA9IGNvbW1hbmQuYXJnc1snd3Jp
dGVyJ10KKyAgICAgICAgd3JpdGVyLnJlbW90ZV93cml0ZShzdHJpbmcgKyAnXG4nKQorICAgICAg
ICB3cml0ZXIucmVtb3RlX2Nsb3NlKCkKKyAgICAgICAgaWYgdGltZXN0YW1wOgorICAgICAgICAg
ICAgd3JpdGVyLnJlbW90ZV91dGltZSh0aW1lc3RhbXApCisgICAgcmV0dXJuIGJlaGF2aW9yCisK
KworY2xhc3MgVGVzdFN0ZXBOYW1lU2hvdWxkQmVWYWxpZElkZW50aWZpZXIoQnVpbGRTdGVwTWl4
aW5BZGRpdGlvbnMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9zdGVwX25hbWVz
X2FyZV92YWxpZChzZWxmKToKKyAgICAgICAgaW1wb3J0IHN0ZXBzCisgICAgICAgIGJ1aWxkX3N0
ZXBfY2xhc3NlcyA9IGluc3BlY3QuZ2V0bWVtYmVycyhzdGVwcywgaW5zcGVjdC5pc2NsYXNzKQor
ICAgICAgICBmb3IgYnVpbGRfc3RlcCBpbiBidWlsZF9zdGVwX2NsYXNzZXM6CisgICAgICAgICAg
ICBpZiAnbmFtZScgaW4gdmFycyhidWlsZF9zdGVwWzFdKToKKyAgICAgICAgICAgICAgICBuYW1l
ID0gYnVpbGRfc3RlcFsxXS5uYW1lCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgn
ICcgaW4gbmFtZSwgJ3N0ZXAgbmFtZSAie30iIGNvbnRhaW4gc3BhY2UuJy5mb3JtYXQobmFtZSkp
CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJ1aWxkYm90X2lkZW50aWZpZXJzLmlk
ZW50X3JlLm1hdGNoKG5hbWUpLCAnc3RlcCBuYW1lICJ7fSIgaXMgbm90IGEgdmFsaWQgYnVpbGRi
b3QgaWRlbnRpZmllci4nLmZvcm1hdChuYW1lKSkKKworCitjbGFzcyBUZXN0UnVuQmluZGluZ3NU
ZXN0cyhCdWlsZFN0ZXBNaXhpbkFkZGl0aW9ucywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRl
ZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb25nTWVzc2FnZSA9IFRydWUKKyAgICAgICAg
cmV0dXJuIHNlbGYuc2V0VXBCdWlsZFN0ZXAoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi50ZWFyRG93bkJ1aWxkU3RlcCgpCisKKyAgICBkZWYgdGVzdF9z
dWNjZXNzKHNlbGYpOgorICAgICAgICBzZWxmLnNldHVwU3RlcChSdW5CaW5kaW5nc1Rlc3RzKCkp
CisgICAgICAgIHNlbGYuZXhwZWN0UmVtb3RlQ29tbWFuZHMoCisgICAgICAgICAgICBFeHBlY3RT
aGVsbCh3b3JrZGlyPSd3a2RpcicsCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEy
MDAsCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dFbnZpcm9uPVRydWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb21tYW5kPVsncHl0aG9uJywgJy4vVG9vbHMvU2NyaXB0cy9ydW4tYmlu
ZGluZ3MtdGVzdHMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICsg
MCwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmV4cGVjdE91dGNvbWUocmVzdWx0PVNVQ0NFU1Ms
IHN0YXRlX3N0cmluZz0nYmluZGluZ3MtdGVzdHMnKQorICAgICAgICByZXR1cm4gc2VsZi5ydW5T
dGVwKCkKKworICAgIGRlZiB0ZXN0X2ZhaWx1cmUoc2VsZik6CisgICAgICAgIHNlbGYuc2V0dXBT
dGVwKFJ1bkJpbmRpbmdzVGVzdHMoKSkKKyAgICAgICAgc2VsZi5leHBlY3RSZW1vdGVDb21tYW5k
cygKKyAgICAgICAgICAgIEV4cGVjdFNoZWxsKHdvcmtkaXI9J3drZGlyJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRpbWVvdXQ9MTIwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0Vu
dmlyb249VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9WydweXRob24nLCAn
Li9Ub29scy9TY3JpcHRzL3J1bi1iaW5kaW5ncy10ZXN0cyddLAorICAgICAgICAgICAgICAgICAg
ICAgICAgKQorICAgICAgICAgICAgKyBFeHBlY3RTaGVsbC5sb2coJ3N0ZGlvJywgc3Rkb3V0PSdG
QUlMOiAoSlMpIEpTVGVzdEludGVyZmFjZS5jcHAnKQorICAgICAgICAgICAgKyAyLAorICAgICAg
ICApCisgICAgICAgIHNlbGYuZXhwZWN0T3V0Y29tZShyZXN1bHQ9RkFJTFVSRSwgc3RhdGVfc3Ry
aW5nPSdiaW5kaW5ncy10ZXN0cyAoZmFpbHVyZSknKQorICAgICAgICByZXR1cm4gc2VsZi5ydW5T
dGVwKCkKKworCitjbGFzcyBUZXN0UnVuV2ViS2l0UGVybFRlc3RzKEJ1aWxkU3RlcE1peGluQWRk
aXRpb25zLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAg
ICBzZWxmLmxvbmdNZXNzYWdlID0gVHJ1ZQorICAgICAgICByZXR1cm4gc2VsZi5zZXRVcEJ1aWxk
U3RlcCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnRl
YXJEb3duQnVpbGRTdGVwKCkKKworICAgIGRlZiB0ZXN0X3N1Y2Nlc3Moc2VsZik6CisgICAgICAg
IHNlbGYuc2V0dXBTdGVwKFJ1blBlcmxUZXN0cygpKQorICAgICAgICBzZWxmLmV4cGVjdFJlbW90
ZUNvbW1hbmRzKAorICAgICAgICAgICAgRXhwZWN0U2hlbGwod29ya2Rpcj0nd2tkaXInLAorICAg
ICAgICAgICAgICAgICAgICAgICAgbG9nRW52aXJvbj1UcnVlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgY29tbWFuZD1bJ3BlcmwnLCAnLi9Ub29scy9TY3JpcHRzL3Rlc3Qtd2Via2l0cGVybCdd
LAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0xMjAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgKQorICAgICAgICAgICAgKyAwLAorICAgICAgICApCisgICAgICAgIHNlbGYuZXhw
ZWN0T3V0Y29tZShyZXN1bHQ9U1VDQ0VTUywgc3RhdGVfc3RyaW5nPSd3ZWJraXRwZXJsLXRlc3Qn
KQorICAgICAgICByZXR1cm4gc2VsZi5ydW5TdGVwKCkKKworICAgIGRlZiB0ZXN0X2ZhaWx1cmUo
c2VsZik6CisgICAgICAgIHNlbGYuc2V0dXBTdGVwKFJ1blBlcmxUZXN0cygpKQorICAgICAgICBz
ZWxmLmV4cGVjdFJlbW90ZUNvbW1hbmRzKAorICAgICAgICAgICAgRXhwZWN0U2hlbGwod29ya2Rp
cj0nd2tkaXInLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9nRW52aXJvbj1UcnVlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1bJ3BlcmwnLCAnLi9Ub29scy9TY3JpcHRzL3Rl
c3Qtd2Via2l0cGVybCddLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0xMjAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKyBFeHBlY3RTaGVsbC5sb2co
J3N0ZGlvJywgc3Rkb3V0PScnJ0ZhaWxlZCB0ZXN0czogIDEtMywgNS03LCA5LCAxMS0xMworRmls
ZXM9NDAsIFRlc3RzPTYzMCwgIDQgd2FsbGNsb2NrIHNlY3MgKCAwLjE2IHVzciAgMC4wOSBzeXMg
KyAgMi43OCBjdXNyICAwLjY0IGNzeXMgPSAgMy42NyBDUFUpCitSZXN1bHQ6IEZBSUwKK0ZhaWxl
ZCAxLzQwIHRlc3QgcHJvZ3JhbXMuIDEwLzYzMCBzdWJ0ZXN0cyBmYWlsZWQuJycnKQorICAgICAg
ICAgICAgKyAyLAorICAgICAgICApCisgICAgICAgIHNlbGYuZXhwZWN0T3V0Y29tZShyZXN1bHQ9
RkFJTFVSRSwgc3RhdGVfc3RyaW5nPScxMCBwZXJsIHRlc3RzIGZhaWxlZCcpCisgICAgICAgIHJl
dHVybiBzZWxmLnJ1blN0ZXAoKQorCisKK2NsYXNzIFRlc3RSdW5XZWJLaXRQeVRlc3RzKEJ1aWxk
U3RlcE1peGluQWRkaXRpb25zLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNl
bGYpOgorICAgICAgICBzZWxmLmxvbmdNZXNzYWdlID0gVHJ1ZQorICAgICAgICBzZWxmLnNldHVw
U3RlcChSdW5XZWJLaXRQeVRlc3RzKCkpCisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ2J1aWxk
ZXJuYW1lJywgJ2lPUy0xNC1TaW11bGF0b3ItV0syLVRlc3RzLUVXUycpCisgICAgICAgIHNlbGYu
c2V0UHJvcGVydHkoJ2J1aWxkbnVtYmVyJywgJzEwMScpCisgICAgICAgIHNlbGYuc2V0UHJvcGVy
dHkoJ3dvcmtlcm5hbWUnLCAnZXdzMTAwJykKKyAgICAgICAgb3MuZW52aXJvblsnUkVTVUxUU19T
RVJWRVJfQVBJX0tFWSddID0gJ3Rlc3QtYXBpLWtleScKKyAgICAgICAgcmV0dXJuIHNlbGYuc2V0
VXBCdWlsZFN0ZXAoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBkZWwgb3Mu
ZW52aXJvblsnUkVTVUxUU19TRVJWRVJfQVBJX0tFWSddCisgICAgICAgIHJldHVybiBzZWxmLnRl
YXJEb3duQnVpbGRTdGVwKCkKKworICAgIGRlZiB0ZXN0X3N1Y2Nlc3Moc2VsZik6CisgICAgICAg
IHNlbGYuZXhwZWN0UmVtb3RlQ29tbWFuZHMoCisgICAgICAgICAgICBFeHBlY3RTaGVsbCh3b3Jr
ZGlyPSd3a2RpcicsCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dFbnZpcm9uPUZhbHNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1bJ3B5dGhvbicsICcuL1Rvb2xzL1Njcmlw
dHMvdGVzdC13ZWJraXRweScsICctLXZlcmJvc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJy0tYnVpbGRib3QtbWFzdGVyJywgQ1VSUkVOVF9IT1NUTkFNRSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICctLWJ1aWxkZXItbmFtZScsICdpT1MtMTQtU2ltdWxh
dG9yLVdLMi1UZXN0cy1FV1MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0t
YnVpbGQtbnVtYmVyJywgJzEwMScsICctLWJ1aWxkYm90LXdvcmtlcicsICdld3MxMDAnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tcmVwb3J0JywgUkVTVUxUU19XRUJLSVRf
VVJMXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9MTIwMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVudj17J1JFU1VMVFNfU0VSVkVSX0FQSV9LRVknOiAndGVzdC1hcGkta2V5
J30KKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICsgMCwKKyAgICAgICAg
KQorICAgICAgICBzZWxmLmV4cGVjdE91dGNvbWUocmVzdWx0PVNVQ0NFU1MsIHN0YXRlX3N0cmlu
Zz0nd2Via2l0cHktdGVzdCcpCisgICAgICAgIHJldHVybiBzZWxmLnJ1blN0ZXAoKQorCisgICAg
ZGVmIHRlc3RfdW5leHBlY3RlZF9mYWlsdXJlKHNlbGYpOgorICAgICAgICBzZWxmLmV4cGVjdFJl
bW90ZUNvbW1hbmRzKAorICAgICAgICAgICAgRXhwZWN0U2hlbGwod29ya2Rpcj0nd2tkaXInLAor
ICAgICAgICAgICAgICAgICAgICAgICAgbG9nRW52aXJvbj1GYWxzZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbW1hbmQ9WydweXRob24nLCAnLi9Ub29scy9TY3JpcHRzL3Rlc3Qtd2Via2l0
cHknLCAnLS12ZXJib3NlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLWJ1
aWxkYm90LW1hc3RlcicsIENVUlJFTlRfSE9TVE5BTUUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnLS1idWlsZGVyLW5hbWUnLCAnaU9TLTE0LVNpbXVsYXRvci1XSzItVGVzdHMt
RVdTJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLWJ1aWxkLW51bWJlcics
ICcxMDEnLCAnLS1idWlsZGJvdC13b3JrZXInLCAnZXdzMTAwJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICctLXJlcG9ydCcsIFJFU1VMVFNfV0VCS0lUX1VSTF0sCisgICAgICAg
ICAgICAgICAgICAgICAgICB0aW1lb3V0PTEyMDAsCisgICAgICAgICAgICAgICAgICAgICAgICBl
bnY9eydSRVNVTFRTX1NFUlZFUl9BUElfS0VZJzogJ3Rlc3QtYXBpLWtleSd9CisgICAgICAgICAg
ICAgICAgICAgICAgICApCisgICAgICAgICAgICArIDIsCisgICAgICAgICkKKyAgICAgICAgc2Vs
Zi5leHBlY3RPdXRjb21lKHJlc3VsdD1GQUlMVVJFLCBzdGF0ZV9zdHJpbmc9J3dlYmtpdHB5LXRl
c3QgKGZhaWx1cmUpJykKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuU3RlcCgpCisKKyAgICBkZWYg
dGVzdF9mYWlsdXJlKHNlbGYpOgorICAgICAgICBzZWxmLmV4cGVjdFJlbW90ZUNvbW1hbmRzKAor
ICAgICAgICAgICAgRXhwZWN0U2hlbGwod29ya2Rpcj0nd2tkaXInLAorICAgICAgICAgICAgICAg
ICAgICAgICAgbG9nRW52aXJvbj1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1h
bmQ9WydweXRob24nLCAnLi9Ub29scy9TY3JpcHRzL3Rlc3Qtd2Via2l0cHknLCAnLS12ZXJib3Nl
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLWJ1aWxkYm90LW1hc3Rlcics
IENVUlJFTlRfSE9TVE5BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1i
dWlsZGVyLW5hbWUnLCAnaU9TLTE0LVNpbXVsYXRvci1XSzItVGVzdHMtRVdTJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICctLWJ1aWxkLW51bWJlcicsICcxMDEnLCAnLS1idWls
ZGJvdC13b3JrZXInLCAnZXdzMTAwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICctLXJlcG9ydCcsIFJFU1VMVFNfV0VCS0lUX1VSTF0sCisgICAgICAgICAgICAgICAgICAgICAg
ICB0aW1lb3V0PTEyMDAsCisgICAgICAgICAgICAgICAgICAgICAgICBlbnY9eydSRVNVTFRTX1NF
UlZFUl9BUElfS0VZJzogJ3Rlc3QtYXBpLWtleSd9CisgICAgICAgICAgICAgICAgICAgICAgICAp
ICsKKyAgICAgICAgICAgIEV4cGVjdFNoZWxsLmxvZygnc3RkaW8nLCBzdGRvdXQ9J0ZBSUxFRCAo
ZmFpbHVyZXM9MiwgZXJyb3JzPTApJykgKworICAgICAgICAgICAgMiwKKyAgICAgICAgKQorICAg
ICAgICBzZWxmLmV4cGVjdE91dGNvbWUocmVzdWx0PUZBSUxVUkUsIHN0YXRlX3N0cmluZz0nMiBw
eXRob24gdGVzdHMgZmFpbGVkJykKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuU3RlcCgpCisKKyAg
ICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CisgICAgICAgIHNlbGYuZXhwZWN0UmVtb3RlQ29tbWFu
ZHMoCisgICAgICAgICAgICBFeHBlY3RTaGVsbCh3b3JrZGlyPSd3a2RpcicsCisgICAgICAgICAg
ICAgICAgICAgICAgICBsb2dFbnZpcm9uPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
Y29tbWFuZD1bJ3B5dGhvbicsICcuL1Rvb2xzL1NjcmlwdHMvdGVzdC13ZWJraXRweScsICctLXZl
cmJvc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tYnVpbGRib3QtbWFz
dGVyJywgQ1VSUkVOVF9IT1NUTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICctLWJ1aWxkZXItbmFtZScsICdpT1MtMTQtU2ltdWxhdG9yLVdLMi1UZXN0cy1FV1MnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tYnVpbGQtbnVtYmVyJywgJzEwMScsICct
LWJ1aWxkYm90LXdvcmtlcicsICdld3MxMDAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJy0tcmVwb3J0JywgUkVTVUxUU19XRUJLSVRfVVJMXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWVvdXQ9MTIwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudj17J1JFU1VM
VFNfU0VSVkVSX0FQSV9LRVknOiAndGVzdC1hcGkta2V5J30KKyAgICAgICAgICAgICAgICAgICAg
ICAgICkgKworICAgICAgICAgICAgRXhwZWN0U2hlbGwubG9nKCdzdGRpbycsIHN0ZG91dD0nRkFJ
TEVEIChmYWlsdXJlcz0wLCBlcnJvcnM9MiknKSArCisgICAgICAgICAgICAyLAorICAgICAgICAp
CisgICAgICAgIHNlbGYuZXhwZWN0T3V0Y29tZShyZXN1bHQ9RkFJTFVSRSwgc3RhdGVfc3RyaW5n
PScyIHB5dGhvbiB0ZXN0cyBmYWlsZWQnKQorICAgICAgICByZXR1cm4gc2VsZi5ydW5TdGVwKCkK
KworICAgIGRlZiB0ZXN0X2xvdF9vZl9mYWlsdXJlcyhzZWxmKToKKyAgICAgICAgc2VsZi5leHBl
Y3RSZW1vdGVDb21tYW5kcygKKyAgICAgICAgICAgIEV4cGVjdFNoZWxsKHdvcmtkaXI9J3drZGly
JywKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0Vudmlyb249RmFsc2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb21tYW5kPVsncHl0aG9uJywgJy4vVG9vbHMvU2NyaXB0cy90ZXN0LXdl
YmtpdHB5JywgJy0tdmVyYm9zZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
LS1idWlsZGJvdC1tYXN0ZXInLCBDVVJSRU5UX0hPU1ROQU1FLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJy0tYnVpbGRlci1uYW1lJywgJ2lPUy0xNC1TaW11bGF0b3ItV0syLVRl
c3RzLUVXUycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1idWlsZC1udW1i
ZXInLCAnMTAxJywgJy0tYnVpbGRib3Qtd29ya2VyJywgJ2V3czEwMCcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnLS1yZXBvcnQnLCBSRVNVTFRTX1dFQktJVF9VUkxdLAorICAg
ICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0xMjAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgZW52PXsnUkVTVUxUU19TRVJWRVJfQVBJX0tFWSc6ICd0ZXN0LWFwaS1rZXknfQorICAgICAg
ICAgICAgICAgICAgICAgICAgKSArCisgICAgICAgICAgICBFeHBlY3RTaGVsbC5sb2coJ3N0ZGlv
Jywgc3Rkb3V0PSdGQUlMRUQgKGZhaWx1cmVzPTMwLCBlcnJvcnM9MiknKSArCisgICAgICAgICAg
ICAyLAorICAgICAgICApCisgICAgICAgIHNlbGYuZXhwZWN0T3V0Y29tZShyZXN1bHQ9RkFJTFVS
RSwgc3RhdGVfc3RyaW5nPSczMiBweXRob24gdGVzdHMgZmFpbGVkJykKKyAgICAgICAgcmV0dXJu
IHNlbGYucnVuU3RlcCgpCisKKworY2xhc3MgVGVzdFJ1bkxMREJXZWJLaXRUZXN0cyhCdWlsZFN0
ZXBNaXhpbkFkZGl0aW9ucywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxm
KToKKyAgICAgICAgc2VsZi5sb25nTWVzc2FnZSA9IFRydWUKKyAgICAgICAgc2VsZi5zZXR1cFN0
ZXAoUnVuTExEQldlYktpdFRlc3RzKCkpCisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ2NvbmZp
Z3VyYXRpb24nLCAncmVsZWFzZScpCisgICAgICAgIHJldHVybiBzZWxmLnNldFVwQnVpbGRTdGVw
KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGVhckRv
d25CdWlsZFN0ZXAoKQorCisgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKKyAgICAgICAgc2Vs
Zi5leHBlY3RSZW1vdGVDb21tYW5kcygKKyAgICAgICAgICAgIEV4cGVjdFNoZWxsKHdvcmtkaXI9
J3drZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0Vudmlyb249VHJ1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9WydweXRob24nLCAnLi9Ub29scy9TY3JpcHRzL3Rl
c3QtbGxkYi13ZWJraXQnLCAnLS12ZXJib3NlJywgJy0tbm8tYnVpbGQnLCAnLS1yZWxlYXNlJ10s
CisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEyMDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICApCisgICAgICAgICAgICArIDAsCisgICAgICAgICkKKyAgICAgICAgc2VsZi5leHBl
Y3RPdXRjb21lKHJlc3VsdD1TVUNDRVNTLCBzdGF0ZV9zdHJpbmc9J2xsZGItd2Via2l0LXRlc3Qn
KQorICAgICAgICByZXR1cm4gc2VsZi5ydW5TdGVwKCkKKworICAgIGRlZiB0ZXN0X3VuZXhwZWN0
ZWRfZmFpbHVyZShzZWxmKToKKyAgICAgICAgc2VsZi5leHBlY3RSZW1vdGVDb21tYW5kcygKKyAg
ICAgICAgICAgIEV4cGVjdFNoZWxsKHdvcmtkaXI9J3drZGlyJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxvZ0Vudmlyb249VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9
WydweXRob24nLCAnLi9Ub29scy9TY3JpcHRzL3Rlc3QtbGxkYi13ZWJraXQnLCAnLS12ZXJib3Nl
JywgJy0tbm8tYnVpbGQnLCAnLS1yZWxlYXNlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICB0
aW1lb3V0PTEyMDAsCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICArIDIs
CisgICAgICAgICkKKyAgICAgICAgc2VsZi5leHBlY3RPdXRjb21lKHJlc3VsdD1GQUlMVVJFLCBz
dGF0ZV9zdHJpbmc9J2xsZGItd2Via2l0LXRlc3QgKGZhaWx1cmUpJykKKyAgICAgICAgcmV0dXJu
IHNlbGYucnVuU3RlcCgpCisKKyAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgorICAgICAgICBz
ZWxmLmV4cGVjdFJlbW90ZUNvbW1hbmRzKAorICAgICAgICAgICAgRXhwZWN0U2hlbGwod29ya2Rp
cj0nd2tkaXInLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9nRW52aXJvbj1UcnVlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1bJ3B5dGhvbicsICcuL1Rvb2xzL1NjcmlwdHMv
dGVzdC1sbGRiLXdlYmtpdCcsICctLXZlcmJvc2UnLCAnLS1uby1idWlsZCcsICctLXJlbGVhc2Un
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9MTIwMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICkgKworICAgICAgICAgICAgRXhwZWN0U2hlbGwubG9nKCdzdGRpbycsIHN0ZG91
dD0nRkFJTEVEIChmYWlsdXJlcz0yLCBlcnJvcnM9MCknKSArCisgICAgICAgICAgICAyLAorICAg
ICAgICApCisgICAgICAgIHNlbGYuZXhwZWN0T3V0Y29tZShyZXN1bHQ9RkFJTFVSRSwgc3RhdGVf
c3RyaW5nPScyIGxsZGIgdGVzdHMgZmFpbGVkJykKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuU3Rl
cCgpCisKKyAgICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CisgICAgICAgIHNlbGYuZXhwZWN0UmVt
b3RlQ29tbWFuZHMoCisgICAgICAgICAgICBFeHBlY3RTaGVsbCh3b3JrZGlyPSd3a2RpcicsCisg
ICAgICAgICAgICAgICAgICAgICAgICBsb2dFbnZpcm9uPVRydWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb21tYW5kPVsncHl0aG9uJywgJy4vVG9vbHMvU2NyaXB0cy90ZXN0LWxsZGItd2Vi
a2l0JywgJy0tdmVyYm9zZScsICctLW5vLWJ1aWxkJywgJy0tcmVsZWFzZSddLAorICAgICAgICAg
ICAgICAgICAgICAgICAgdGltZW91dD0xMjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgKSAr
CisgICAgICAgICAgICBFeHBlY3RTaGVsbC5sb2coJ3N0ZGlvJywgc3Rkb3V0PSdGQUlMRUQgKGZh
aWx1cmVzPTAsIGVycm9ycz0yKScpICsKKyAgICAgICAgICAgIDIsCisgICAgICAgICkKKyAgICAg
ICAgc2VsZi5leHBlY3RPdXRjb21lKHJlc3VsdD1GQUlMVVJFLCBzdGF0ZV9zdHJpbmc9JzIgbGxk
YiB0ZXN0cyBmYWlsZWQnKQorICAgICAgICByZXR1cm4gc2VsZi5ydW5TdGVwKCkKKworICAgIGRl
ZiB0ZXN0X2xvdF9vZl9mYWlsdXJlcyhzZWxmKToKKyAgICAgICAgc2VsZi5leHBlY3RSZW1vdGVD
b21tYW5kcygKKyAgICAgICAgICAgIEV4cGVjdFNoZWxsKHdvcmtkaXI9J3drZGlyJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxvZ0Vudmlyb249VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbW1hbmQ9WydweXRob24nLCAnLi9Ub29scy9TY3JpcHRzL3Rlc3QtbGxkYi13ZWJraXQn
LCAnLS12ZXJib3NlJywgJy0tbm8tYnVpbGQnLCAnLS1yZWxlYXNlJ10sCisgICAgICAgICAgICAg
ICAgICAgICAgICB0aW1lb3V0PTEyMDAsCisgICAgICAgICAgICAgICAgICAgICAgICApICsKKyAg
ICAgICAgICAgIEV4cGVjdFNoZWxsLmxvZygnc3RkaW8nLCBzdGRvdXQ9J0ZBSUxFRCAoZmFpbHVy
ZXM9MzAsIGVycm9ycz0yKScpICsKKyAgICAgICAgICAgIDIsCisgICAgICAgICkKKyAgICAgICAg
c2VsZi5leHBlY3RPdXRjb21lKHJlc3VsdD1GQUlMVVJFLCBzdGF0ZV9zdHJpbmc9JzMyIGxsZGIg
dGVzdHMgZmFpbGVkJykKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuU3RlcCgpCisKKworY2xhc3Mg
VGVzdEtpbGxPbGRQcm9jZXNzZXMoQnVpbGRTdGVwTWl4aW5BZGRpdGlvbnMsIHVuaXR0ZXN0LlRl
c3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9uZ01lc3NhZ2Ug
PSBUcnVlCisgICAgICAgIHJldHVybiBzZWxmLnNldFVwQnVpbGRTdGVwKCkKKworICAgIGRlZiB0
ZWFyRG93bihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGVhckRvd25CdWlsZFN0ZXAoKQor
CisgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKKyAgICAgICAgc2VsZi5zZXR1cFN0ZXAoS2ls
bE9sZFByb2Nlc3NlcygpKQorICAgICAgICBzZWxmLmV4cGVjdFJlbW90ZUNvbW1hbmRzKAorICAg
ICAgICAgICAgRXhwZWN0U2hlbGwod29ya2Rpcj0nd2tkaXInLAorICAgICAgICAgICAgICAgICAg
ICAgICAgbG9nRW52aXJvbj1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1b
J3B5dGhvbicsICcuL1Rvb2xzL0NJU3VwcG9ydC9raWxsLW9sZC1wcm9jZXNzZXMnLCAnYnVpbGRi
b3QnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9MTIwMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICkKKyAgICAgICAgICAgICsgMCwKKyAgICAgICAgKQorICAgICAgICBzZWxm
LmV4cGVjdE91dGNvbWUocmVzdWx0PVNVQ0NFU1MsIHN0YXRlX3N0cmluZz0na2lsbGVkIG9sZCBw
cm9jZXNzZXMnKQorICAgICAgICByZXR1cm4gc2VsZi5ydW5TdGVwKCkKKworICAgIGRlZiB0ZXN0
X2ZhaWx1cmUoc2VsZik6CisgICAgICAgIHNlbGYuc2V0dXBTdGVwKEtpbGxPbGRQcm9jZXNzZXMo
KSkKKyAgICAgICAgc2VsZi5leHBlY3RSZW1vdGVDb21tYW5kcygKKyAgICAgICAgICAgIEV4cGVj
dFNoZWxsKHdvcmtkaXI9J3drZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0Vudmly
b249VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9WydweXRob24nLCAnLi9U
b29scy9DSVN1cHBvcnQva2lsbC1vbGQtcHJvY2Vzc2VzJywgJ2J1aWxkYm90J10sCisgICAgICAg
ICAgICAgICAgICAgICAgICB0aW1lb3V0PTEyMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAp
CisgICAgICAgICAgICArIEV4cGVjdFNoZWxsLmxvZygnc3RkaW8nLCBzdGRvdXQ9J1VuZXhwZWN0
ZWQgZXJyb3IuJykKKyAgICAgICAgICAgICsgMiwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmV4
cGVjdE91dGNvbWUocmVzdWx0PUZBSUxVUkUsIHN0YXRlX3N0cmluZz0na2lsbGVkIG9sZCBwcm9j
ZXNzZXMgKGZhaWx1cmUpJykKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuU3RlcCgpCisKKworY2xh
c3MgVGVzdENsZWFuQnVpbGRJZlNjaGVkdWxlZChCdWlsZFN0ZXBNaXhpbkFkZGl0aW9ucywgdW5p
dHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb25n
TWVzc2FnZSA9IFRydWUKKyAgICAgICAgc2VsZi5zZXR1cFN0ZXAoQ2xlYW5CdWlsZElmU2NoZWR1
bGVkKCkpCisgICAgICAgIHJldHVybiBzZWxmLnNldFVwQnVpbGRTdGVwKCkKKworICAgIGRlZiB0
ZWFyRG93bihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGVhckRvd25CdWlsZFN0ZXAoKQor
CisgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgn
ZnVsbFBsYXRmb3JtJywgJ2lvcy0xNCcpCisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ2NvbmZp
Z3VyYXRpb24nLCAncmVsZWFzZScpCisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ2lzX2NsZWFu
JywgJ1RydWUnKQorICAgICAgICBzZWxmLmV4cGVjdFJlbW90ZUNvbW1hbmRzKAorICAgICAgICAg
ICAgRXhwZWN0U2hlbGwod29ya2Rpcj0nd2tkaXInLAorICAgICAgICAgICAgICAgICAgICAgICAg
bG9nRW52aXJvbj1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1bJ3B5dGhv
bicsICcuL1Rvb2xzL0NJU3VwcG9ydC9jbGVhbi1idWlsZCcsICctLXBsYXRmb3JtPWlvcy0xNCcs
ICctLXJlbGVhc2UnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9MTIwMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICsgMCwKKyAgICAgICAgKQorICAg
ICAgICBzZWxmLmV4cGVjdE91dGNvbWUocmVzdWx0PVNVQ0NFU1MsIHN0YXRlX3N0cmluZz0nZGVs
ZXRlZCBXZWJLaXRCdWlsZCBkaXJlY3RvcnknKQorICAgICAgICByZXR1cm4gc2VsZi5ydW5TdGVw
KCkKKworICAgIGRlZiB0ZXN0X2ZhaWx1cmUoc2VsZik6CisgICAgICAgIHNlbGYuc2V0UHJvcGVy
dHkoJ2Z1bGxQbGF0Zm9ybScsICdpb3Mtc2ltdWxhdG9yLTE0JykKKyAgICAgICAgc2VsZi5zZXRQ
cm9wZXJ0eSgnY29uZmlndXJhdGlvbicsICdkZWJ1ZycpCisgICAgICAgIHNlbGYuc2V0UHJvcGVy
dHkoJ2lzX2NsZWFuJywgJ1RydWUnKQorICAgICAgICBzZWxmLmV4cGVjdFJlbW90ZUNvbW1hbmRz
KAorICAgICAgICAgICAgRXhwZWN0U2hlbGwod29ya2Rpcj0nd2tkaXInLAorICAgICAgICAgICAg
ICAgICAgICAgICAgbG9nRW52aXJvbj1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29t
bWFuZD1bJ3B5dGhvbicsICcuL1Rvb2xzL0NJU3VwcG9ydC9jbGVhbi1idWlsZCcsICctLXBsYXRm
b3JtPWlvcy1zaW11bGF0b3ItMTQnLCAnLS1kZWJ1ZyddLAorICAgICAgICAgICAgICAgICAgICAg
ICAgdGltZW91dD0xMjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAg
KyBFeHBlY3RTaGVsbC5sb2coJ3N0ZGlvJywgc3Rkb3V0PSdVbmV4cGVjdGVkIGVycm9yLicpCisg
ICAgICAgICAgICArIDIsCisgICAgICAgICkKKyAgICAgICAgc2VsZi5leHBlY3RPdXRjb21lKHJl
c3VsdD1GQUlMVVJFLCBzdGF0ZV9zdHJpbmc9J2RlbGV0ZWQgV2ViS2l0QnVpbGQgZGlyZWN0b3J5
IChmYWlsdXJlKScpCisgICAgICAgIHJldHVybiBzZWxmLnJ1blN0ZXAoKQorCisgICAgZGVmIHRl
c3Rfc2tpcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgnZnVsbFBsYXRmb3JtJywg
J2lvcy1zaW11bGF0b3ItMTQnKQorICAgICAgICBzZWxmLnNldFByb3BlcnR5KCdjb25maWd1cmF0
aW9uJywgJ2RlYnVnJykKKyAgICAgICAgc2VsZi5leHBlY3RPdXRjb21lKHJlc3VsdD1TS0lQUEVE
LCBzdGF0ZV9zdHJpbmc9J2RlbGV0ZWQgV2ViS2l0QnVpbGQgZGlyZWN0b3J5IChza2lwcGVkKScp
CisgICAgICAgIHJldHVybiBzZWxmLnJ1blN0ZXAoKQorCisKK2NsYXNzIFRlc3RJbnN0YWxsR3Rr
RGVwZW5kZW5jaWVzKEJ1aWxkU3RlcE1peGluQWRkaXRpb25zLCB1bml0dGVzdC5UZXN0Q2FzZSk6
CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvbmdNZXNzYWdlID0gVHJ1ZQor
ICAgICAgICBzZWxmLnNldHVwU3RlcChJbnN0YWxsR3RrRGVwZW5kZW5jaWVzKCkpCisgICAgICAg
IHJldHVybiBzZWxmLnNldFVwQnVpbGRTdGVwKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYudGVhckRvd25CdWlsZFN0ZXAoKQorCisgICAgZGVmIHRlc3Rf
c3VjY2VzcyhzZWxmKToKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgnY29uZmlndXJhdGlvbics
ICdyZWxlYXNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChJbnN0YWxsR3RrRGVwZW5kZW5j
aWVzLmhhbHRPbkZhaWx1cmUsIFRydWUpCisgICAgICAgIHNlbGYuZXhwZWN0UmVtb3RlQ29tbWFu
ZHMoCisgICAgICAgICAgICBFeHBlY3RTaGVsbCh3b3JrZGlyPSd3a2RpcicsCisgICAgICAgICAg
ICAgICAgICAgICAgICBsb2dFbnZpcm9uPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBj
b21tYW5kPVsncGVybCcsICcuL1Rvb2xzL1NjcmlwdHMvdXBkYXRlLXdlYmtpdGd0ay1saWJzJywg
Jy0tcmVsZWFzZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0xMjAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKyAwLAorICAgICAgICApCisgICAg
ICAgIHNlbGYuZXhwZWN0T3V0Y29tZShyZXN1bHQ9U1VDQ0VTUywgc3RhdGVfc3RyaW5nPSd1cGRh
dGVkIGd0ayBkZXBlbmRlbmNpZXMnKQorICAgICAgICByZXR1cm4gc2VsZi5ydW5TdGVwKCkKKwor
ICAgIGRlZiB0ZXN0X2ZhaWx1cmUoc2VsZik6CisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ2Nv
bmZpZ3VyYXRpb24nLCAnZGVidWcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEluc3RhbGxH
dGtEZXBlbmRlbmNpZXMuaGFsdE9uRmFpbHVyZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5leHBlY3RS
ZW1vdGVDb21tYW5kcygKKyAgICAgICAgICAgIEV4cGVjdFNoZWxsKHdvcmtkaXI9J3drZGlyJywK
KyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0Vudmlyb249VHJ1ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbW1hbmQ9WydwZXJsJywgJy4vVG9vbHMvU2NyaXB0cy91cGRhdGUtd2Via2l0
Z3RrLWxpYnMnLCAnLS1kZWJ1ZyddLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0x
MjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKyBFeHBlY3RTaGVs
bC5sb2coJ3N0ZGlvJywgc3Rkb3V0PSdVbmV4cGVjdGVkIGVycm9yLicpCisgICAgICAgICAgICAr
IDIsCisgICAgICAgICkKKyAgICAgICAgc2VsZi5leHBlY3RPdXRjb21lKHJlc3VsdD1GQUlMVVJF
LCBzdGF0ZV9zdHJpbmc9J3VwZGF0ZWQgZ3RrIGRlcGVuZGVuY2llcyAoZmFpbHVyZSknKQorICAg
ICAgICByZXR1cm4gc2VsZi5ydW5TdGVwKCkKKworCitjbGFzcyBUZXN0SW5zdGFsbFdwZURlcGVu
ZGVuY2llcyhCdWlsZFN0ZXBNaXhpbkFkZGl0aW9ucywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAg
IGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb25nTWVzc2FnZSA9IFRydWUKKyAgICAg
ICAgc2VsZi5zZXR1cFN0ZXAoSW5zdGFsbFdwZURlcGVuZGVuY2llcygpKQorICAgICAgICByZXR1
cm4gc2VsZi5zZXRVcEJ1aWxkU3RlcCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLnRlYXJEb3duQnVpbGRTdGVwKCkKKworICAgIGRlZiB0ZXN0X3N1Y2Nl
c3Moc2VsZik6CisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ2NvbmZpZ3VyYXRpb24nLCAncmVs
ZWFzZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSW5zdGFsbFdwZURlcGVuZGVuY2llcy5o
YWx0T25GYWlsdXJlLCBUcnVlKQorICAgICAgICBzZWxmLmV4cGVjdFJlbW90ZUNvbW1hbmRzKAor
ICAgICAgICAgICAgRXhwZWN0U2hlbGwod29ya2Rpcj0nd2tkaXInLAorICAgICAgICAgICAgICAg
ICAgICAgICAgbG9nRW52aXJvbj1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFu
ZD1bJ3BlcmwnLCAnLi9Ub29scy9TY3JpcHRzL3VwZGF0ZS13ZWJraXR3cGUtbGlicycsICctLXJl
bGVhc2UnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9MTIwMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICsgMCwKKyAgICAgICAgKQorICAgICAgICBz
ZWxmLmV4cGVjdE91dGNvbWUocmVzdWx0PVNVQ0NFU1MsIHN0YXRlX3N0cmluZz0ndXBkYXRlZCB3
cGUgZGVwZW5kZW5jaWVzJykKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuU3RlcCgpCisKKyAgICBk
ZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgorICAgICAgICBzZWxmLnNldFByb3BlcnR5KCdjb25maWd1
cmF0aW9uJywgJ3JlbGVhc2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEluc3RhbGxXcGVE
ZXBlbmRlbmNpZXMuaGFsdE9uRmFpbHVyZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5leHBlY3RSZW1v
dGVDb21tYW5kcygKKyAgICAgICAgICAgIEV4cGVjdFNoZWxsKHdvcmtkaXI9J3drZGlyJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxvZ0Vudmlyb249VHJ1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbW1hbmQ9WydwZXJsJywgJy4vVG9vbHMvU2NyaXB0cy91cGRhdGUtd2Via2l0d3Bl
LWxpYnMnLCAnLS1yZWxlYXNlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEy
MDAsCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICArIEV4cGVjdFNoZWxs
LmxvZygnc3RkaW8nLCBzdGRvdXQ9J1VuZXhwZWN0ZWQgZXJyb3IuJykKKyAgICAgICAgICAgICsg
MiwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmV4cGVjdE91dGNvbWUocmVzdWx0PUZBSUxVUkUs
IHN0YXRlX3N0cmluZz0ndXBkYXRlZCB3cGUgZGVwZW5kZW5jaWVzIChmYWlsdXJlKScpCisgICAg
ICAgIHJldHVybiBzZWxmLnJ1blN0ZXAoKQorCisKK2NsYXNzIFRlc3RDb21waWxlV2ViS2l0KEJ1
aWxkU3RlcE1peGluQWRkaXRpb25zLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVw
KHNlbGYpOgorICAgICAgICBzZWxmLmxvbmdNZXNzYWdlID0gVHJ1ZQorICAgICAgICBzZWxmLnNl
dHVwU3RlcChDb21waWxlV2ViS2l0KCkpCisgICAgICAgIHJldHVybiBzZWxmLnNldFVwQnVpbGRT
dGVwKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGVh
ckRvd25CdWlsZFN0ZXAoKQorCisgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKKyAgICAgICAg
c2VsZi5zZXRQcm9wZXJ0eSgnZnVsbFBsYXRmb3JtJywgJ2lvcy1zaW11bGF0b3ItMTEnKQorICAg
ICAgICBzZWxmLnNldFByb3BlcnR5KCdjb25maWd1cmF0aW9uJywgJ3JlbGVhc2UnKQorICAgICAg
ICBzZWxmLmV4cGVjdFJlbW90ZUNvbW1hbmRzKAorICAgICAgICAgICAgRXhwZWN0U2hlbGwod29y
a2Rpcj0nd2tkaXInLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9nRW52aXJvbj1UcnVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1bJ3BlcmwnLCAnLi9Ub29scy9TY3JpcHRz
L2J1aWxkLXdlYmtpdCcsICctLXJlbGVhc2UnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRp
bWVvdXQ9MTIwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICsgMCwK
KyAgICAgICAgKQorICAgICAgICBzZWxmLmV4cGVjdE91dGNvbWUocmVzdWx0PVNVQ0NFU1MsIHN0
YXRlX3N0cmluZz0nY29tcGlsZWQnKQorICAgICAgICByZXR1cm4gc2VsZi5ydW5TdGVwKCkKKwor
ICAgIGRlZiB0ZXN0X3N1Y2Nlc3NfZ3RrKHNlbGYpOgorICAgICAgICBzZWxmLnNldFByb3BlcnR5
KCdwbGF0Zm9ybScsICdndGsnKQorICAgICAgICBzZWxmLnNldFByb3BlcnR5KCdmdWxsUGxhdGZv
cm0nLCAnZ3RrJykKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgnY29uZmlndXJhdGlvbicsICdy
ZWxlYXNlJykKKyAgICAgICAgc2VsZi5leHBlY3RSZW1vdGVDb21tYW5kcygKKyAgICAgICAgICAg
IEV4cGVjdFNoZWxsKHdvcmtkaXI9J3drZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGxv
Z0Vudmlyb249VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9WydwZXJsJywg
Jy4vVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQnLCAnLS1yZWxlYXNlJywgJy0tZ3RrJ10sCisg
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEyMDAsCisgICAgICAgICAgICAgICAgICAg
ICAgICApCisgICAgICAgICAgICArIDAsCisgICAgICAgICkKKyAgICAgICAgc2VsZi5leHBlY3RP
dXRjb21lKHJlc3VsdD1TVUNDRVNTLCBzdGF0ZV9zdHJpbmc9J2NvbXBpbGVkJykKKyAgICAgICAg
cmV0dXJuIHNlbGYucnVuU3RlcCgpCisKKyAgICBkZWYgdGVzdF9zdWNjZXNzX3dwZShzZWxmKToK
KyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgncGxhdGZvcm0nLCAnd3BlJykKKyAgICAgICAgc2Vs
Zi5zZXRQcm9wZXJ0eSgnZnVsbFBsYXRmb3JtJywgJ3dwZScpCisgICAgICAgIHNlbGYuc2V0UHJv
cGVydHkoJ2NvbmZpZ3VyYXRpb24nLCAncmVsZWFzZScpCisgICAgICAgIHNlbGYuZXhwZWN0UmVt
b3RlQ29tbWFuZHMoCisgICAgICAgICAgICBFeHBlY3RTaGVsbCh3b3JrZGlyPSd3a2RpcicsCisg
ICAgICAgICAgICAgICAgICAgICAgICBsb2dFbnZpcm9uPVRydWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb21tYW5kPVsncGVybCcsICcuL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0Jywg
Jy0tcmVsZWFzZScsICctLXdwZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0x
MjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKyAwLAorICAgICAg
ICApCisgICAgICAgIHNlbGYuZXhwZWN0T3V0Y29tZShyZXN1bHQ9U1VDQ0VTUywgc3RhdGVfc3Ry
aW5nPSdjb21waWxlZCcpCisgICAgICAgIHJldHVybiBzZWxmLnJ1blN0ZXAoKQorCisgICAgZGVm
IHRlc3RfZmFpbHVyZShzZWxmKToKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgnZnVsbFBsYXRm
b3JtJywgJ21hYy1zaWVycmEnKQorICAgICAgICBzZWxmLnNldFByb3BlcnR5KCdjb25maWd1cmF0
aW9uJywgJ2RlYnVnJykKKyAgICAgICAgc2VsZi5leHBlY3RSZW1vdGVDb21tYW5kcygKKyAgICAg
ICAgICAgIEV4cGVjdFNoZWxsKHdvcmtkaXI9J3drZGlyJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxvZ0Vudmlyb249VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9Wydw
ZXJsJywgJy4vVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQnLCAnLS1kZWJ1ZyddLAorICAgICAg
ICAgICAgICAgICAgICAgICAgdGltZW91dD0xMjAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
KQorICAgICAgICAgICAgKyBFeHBlY3RTaGVsbC5sb2coJ3N0ZGlvJywgc3Rkb3V0PScxIGVycm9y
IGdlbmVyYXRlZC4nKQorICAgICAgICAgICAgKyAyLAorICAgICAgICApCisgICAgICAgIHNlbGYu
ZXhwZWN0T3V0Y29tZShyZXN1bHQ9RkFJTFVSRSwgc3RhdGVfc3RyaW5nPSdjb21waWxlZCAoZmFp
bHVyZSknKQorICAgICAgICByZXR1cm4gc2VsZi5ydW5TdGVwKCkKKworCitjbGFzcyBUZXN0Q29t
cGlsZUpTQ09ubHkoQnVpbGRTdGVwTWl4aW5BZGRpdGlvbnMsIHVuaXR0ZXN0LlRlc3RDYXNlKToK
KyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9uZ01lc3NhZ2UgPSBUcnVlCisg
ICAgICAgIHJldHVybiBzZWxmLnNldFVwQnVpbGRTdGVwKCkKKworICAgIGRlZiB0ZWFyRG93bihz
ZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGVhckRvd25CdWlsZFN0ZXAoKQorCisgICAgZGVm
IHRlc3Rfc3VjY2VzcyhzZWxmKToKKyAgICAgICAgc2VsZi5zZXR1cFN0ZXAoQ29tcGlsZUpTQ09u
bHkoKSkKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgnZnVsbFBsYXRmb3JtJywgJ2pzYy1vbmx5
JykKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgnY29uZmlndXJhdGlvbicsICdyZWxlYXNlJykK
KyAgICAgICAgc2VsZi5leHBlY3RSZW1vdGVDb21tYW5kcygKKyAgICAgICAgICAgIEV4cGVjdFNo
ZWxsKHdvcmtkaXI9J3drZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0Vudmlyb249
VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9WydwZXJsJywgJy4vVG9vbHMv
U2NyaXB0cy9idWlsZC1qc2MnLCAnLS1yZWxlYXNlJ10sCisgICAgICAgICAgICAgICAgICAgICAg
ICB0aW1lb3V0PTEyMDAsCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAr
IDAsCisgICAgICAgICkKKyAgICAgICAgc2VsZi5leHBlY3RPdXRjb21lKHJlc3VsdD1TVUNDRVNT
LCBzdGF0ZV9zdHJpbmc9J2NvbXBpbGVkJykKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuU3RlcCgp
CisKKyAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgorICAgICAgICBzZWxmLnNldHVwU3RlcChD
b21waWxlSlNDT25seSgpKQorICAgICAgICBzZWxmLnNldFByb3BlcnR5KCdmdWxsUGxhdGZvcm0n
LCAnanNjLW9ubHknKQorICAgICAgICBzZWxmLnNldFByb3BlcnR5KCdjb25maWd1cmF0aW9uJywg
J2RlYnVnJykKKyAgICAgICAgc2VsZi5leHBlY3RSZW1vdGVDb21tYW5kcygKKyAgICAgICAgICAg
IEV4cGVjdFNoZWxsKHdvcmtkaXI9J3drZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGxv
Z0Vudmlyb249VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9WydwZXJsJywg
Jy4vVG9vbHMvU2NyaXB0cy9idWlsZC1qc2MnLCAnLS1kZWJ1ZyddLAorICAgICAgICAgICAgICAg
ICAgICAgICAgKQorICAgICAgICAgICAgKyBFeHBlY3RTaGVsbC5sb2coJ3N0ZGlvJywgc3Rkb3V0
PScxIGVycm9yIGdlbmVyYXRlZC4nKQorICAgICAgICAgICAgKyAyLAorICAgICAgICApCisgICAg
ICAgIHNlbGYuZXhwZWN0T3V0Y29tZShyZXN1bHQ9RkFJTFVSRSwgc3RhdGVfc3RyaW5nPSdjb21w
aWxlZCAoZmFpbHVyZSknKQorICAgICAgICByZXR1cm4gc2VsZi5ydW5TdGVwKCkKKworCitpZiBf
X25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415077</attachid>
            <date>2020-11-30 16:49:02 -0800</date>
            <delta_ts>2020-12-01 12:31:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219363-20201130194901.patch</filename>
            <type>text/plain</type>
            <size>22438</size>
            <attacher name="Aakash Jain">aakash_jain</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MDI3NikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQxIEBACisyMDIwLTExLTMwICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNv
bT4KKworICAgICAgICBbYnVpbGQud2Via2l0Lm9yZ10gQWRkIHVuaXQtdGVzdHMgYmFzZWQgb24g
bmV3IGJ1aWxkYm90CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTkzNjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIENJU3VwcG9ydC9idWlsZC13ZWJraXQtb3JnL2xvYWRDb25maWdfdW5pdHRlc3QucHk6
IERyaXZlLWJ5IGZpeCB0byBpbXBvcnQgbG9hZENvbmZpZyB3aGVuIHJ1bm5pbmcgdGhyb3VnaCBy
dW5Vbml0dGVzdHMucHkKKyAgICAgICAgKiBDSVN1cHBvcnQvYnVpbGQtd2Via2l0LW9yZy9zdGVw
c191bml0dGVzdC5weTogQWRkZWQgdW5pdC10ZXN0cyBmb3IgdmFyaW91cyBzdGVwcy4KKyAgICAg
ICAgKEV4cGVjdE1hc3RlclNoZWxsQ29tbWFuZCk6CisgICAgICAgIChCdWlsZFN0ZXBNaXhpbkFk
ZGl0aW9ucyk6CisgICAgICAgIChUZXN0U3RlcE5hbWVTaG91bGRCZVZhbGlkSWRlbnRpZmllcik6
CisgICAgICAgIChUZXN0U3RlcE5hbWVTaG91bGRCZVZhbGlkSWRlbnRpZmllci50ZXN0X3N0ZXBf
bmFtZXNfYXJlX3ZhbGlkKToKKyAgICAgICAgKFRlc3RSdW5CaW5kaW5nc1Rlc3RzKToKKyAgICAg
ICAgKFRlc3RSdW5CaW5kaW5nc1Rlc3RzLnRlc3Rfc3VjY2Vzcyk6CisgICAgICAgIChUZXN0UnVu
QmluZGluZ3NUZXN0cy50ZXN0X2ZhaWx1cmUpOgorICAgICAgICAoVGVzdEtpbGxPbGRQcm9jZXNz
ZXMpOgorICAgICAgICAoVGVzdEtpbGxPbGRQcm9jZXNzZXMudGVzdF9zdWNjZXNzKToKKyAgICAg
ICAgKFRlc3RLaWxsT2xkUHJvY2Vzc2VzLnRlc3RfZmFpbHVyZSk6CisgICAgICAgIChUZXN0Q2xl
YW5CdWlsZElmU2NoZWR1bGVkKToKKyAgICAgICAgKFRlc3RDbGVhbkJ1aWxkSWZTY2hlZHVsZWQu
dGVzdF9zdWNjZXNzKToKKyAgICAgICAgKFRlc3RDbGVhbkJ1aWxkSWZTY2hlZHVsZWQudGVzdF9m
YWlsdXJlKToKKyAgICAgICAgKFRlc3RDbGVhbkJ1aWxkSWZTY2hlZHVsZWQudGVzdF9za2lwKToK
KyAgICAgICAgKFRlc3RJbnN0YWxsR3RrRGVwZW5kZW5jaWVzKToKKyAgICAgICAgKFRlc3RJbnN0
YWxsR3RrRGVwZW5kZW5jaWVzLnRlc3Rfc3VjY2Vzcyk6CisgICAgICAgIChUZXN0SW5zdGFsbEd0
a0RlcGVuZGVuY2llcy50ZXN0X2ZhaWx1cmUpOgorICAgICAgICAoVGVzdEluc3RhbGxXcGVEZXBl
bmRlbmNpZXMpOgorICAgICAgICAoVGVzdEluc3RhbGxXcGVEZXBlbmRlbmNpZXMudGVzdF9zdWNj
ZXNzKToKKyAgICAgICAgKFRlc3RJbnN0YWxsV3BlRGVwZW5kZW5jaWVzLnRlc3RfZmFpbHVyZSk6
CisgICAgICAgIChUZXN0Q29tcGlsZVdlYktpdCk6CisgICAgICAgIChUZXN0Q29tcGlsZVdlYktp
dC50ZXN0X3N1Y2Nlc3MpOgorICAgICAgICAoVGVzdENvbXBpbGVXZWJLaXQudGVzdF9zdWNjZXNz
X2d0ayk6CisgICAgICAgIChUZXN0Q29tcGlsZVdlYktpdC50ZXN0X3N1Y2Nlc3Nfd3BlKToKKyAg
ICAgICAgKFRlc3RDb21waWxlV2ViS2l0LnRlc3RfZmFpbHVyZSk6CisgICAgICAgIChUZXN0Q29t
cGlsZUpTQ09ubHkpOgorICAgICAgICAoVGVzdENvbXBpbGVKU0NPbmx5LnRlc3Rfc3VjY2Vzcyk6
CisgICAgICAgIChUZXN0Q29tcGlsZUpTQ09ubHkudGVzdF9mYWlsdXJlKToKKwogMjAyMC0xMS0z
MCAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBmaWx0ZXItYnVpbGQt
d2Via2l0OiByZWR1Y2Ugbm9uLWFjdGlvbmFibGUgd2FybmluZ3MgZnJvbSBvYmpjIHJ1bnRpbWUg
YW5kIHhjb2RlYnVpbGQKSW5kZXg6IFRvb2xzL0NJU3VwcG9ydC9idWlsZC13ZWJraXQtb3JnL2xv
YWRDb25maWdfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ0lTdXBwb3J0L2J1aWxk
LXdlYmtpdC1vcmcvbG9hZENvbmZpZ191bml0dGVzdC5weQkocmV2aXNpb24gMjcwMjc0KQorKysg
VG9vbHMvQ0lTdXBwb3J0L2J1aWxkLXdlYmtpdC1vcmcvbG9hZENvbmZpZ191bml0dGVzdC5weQko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOSBAQCBpbXBvcnQganNvbgogaW1wb3J0IG9zCiBp
bXBvcnQgdW5pdHRlc3QKIAorVVNFX0JVSUxEQk9UX1ZFUlNJT04yID0gb3MuZ2V0ZW52KCdVU0Vf
QlVJTERCT1RfVkVSU0lPTjInKSBpcyBub3QgTm9uZQoraWYgVVNFX0JVSUxEQk9UX1ZFUlNJT04y
OgorICAgIGltcG9ydCBsb2FkQ29uZmlnCiAKIGNsYXNzIENvbmZpZ0RvdEpTT05UZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgZ2V0X2NvbmZpZyhzZWxmKToKSW5kZXg6IFRvb2xzL0NJ
U3VwcG9ydC9idWlsZC13ZWJraXQtb3JnL3N0ZXBzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0NJU3VwcG9ydC9idWlsZC13ZWJraXQtb3JnL3N0ZXBzX3VuaXR0ZXN0LnB5CShub25l
eGlzdGVudCkKKysrIFRvb2xzL0NJU3VwcG9ydC9idWlsZC13ZWJraXQtb3JnL3N0ZXBzX3VuaXR0
ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDg5IEBACisjIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgb3BlcmF0b3IK
K2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHRlbXBmaWxlCisKK2Zyb20gYnVpbGRi
b3QucHJvY2Vzcy5yZXN1bHRzIGltcG9ydCBSZXN1bHRzLCBTVUNDRVNTLCBGQUlMVVJFLCBXQVJO
SU5HUywgU0tJUFBFRCwgRVhDRVBUSU9OLCBSRVRSWQorZnJvbSBidWlsZGJvdC50ZXN0LmZha2Uu
cmVtb3RlY29tbWFuZCBpbXBvcnQgRXhwZWN0LCBFeHBlY3RSZW1vdGVSZWYsIEV4cGVjdFNoZWxs
Citmcm9tIGJ1aWxkYm90LnRlc3QudXRpbC5zdGVwcyBpbXBvcnQgQnVpbGRTdGVwTWl4aW4KK2Zy
b20gYnVpbGRib3QudXRpbCBpbXBvcnQgaWRlbnRpZmllcnMgYXMgYnVpbGRib3RfaWRlbnRpZmll
cnMKK2Zyb20gbW9jayBpbXBvcnQgY2FsbAorZnJvbSB0d2lzdGVkLmludGVybmV0IGltcG9ydCBk
ZWZlciwgZXJyb3IsIHJlYWN0b3IKK2Zyb20gdHdpc3RlZC5weXRob24gaW1wb3J0IGZhaWx1cmUs
IGxvZworZnJvbSB0d2lzdGVkLnRyaWFsIGltcG9ydCB1bml0dGVzdAorCitmcm9tIHN0ZXBzIGlt
cG9ydCAqCisKK0NVUlJFTlRfSE9TVE5BTUUgPSBzb2NrZXQuZ2V0aG9zdG5hbWUoKS5zdHJpcCgp
CisKKworY2xhc3MgRXhwZWN0TWFzdGVyU2hlbGxDb21tYW5kKG9iamVjdCk6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGNvbW1hbmQsIHdvcmtkaXI9Tm9uZSwgZW52PU5vbmUsIHVzZVBUWT0wKToK
KyAgICAgICAgc2VsZi5hcmdzID0gY29tbWFuZAorICAgICAgICBzZWxmLnVzZVBUWSA9IHVzZVBU
WQorICAgICAgICBzZWxmLnJjID0gTm9uZQorICAgICAgICBzZWxmLnBhdGggPSBOb25lCisgICAg
ICAgIHNlbGYubG9ncyA9IFtdCisKKyAgICAgICAgaWYgZW52IGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgc2VsZi5lbnYgPSBlbnYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZW52
ID0gb3MuZW52aXJvbgorICAgICAgICBpZiB3b3JrZGlyOgorICAgICAgICAgICAgc2VsZi5wYXRo
ID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCB3b3JrZGlyKQorCisgICAgQGNsYXNzbWV0aG9k
CisgICAgZGVmIGxvZyhzZWxmLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgIHJldHVybiAoJ2xvZycs
IG5hbWUsIHZhbHVlKQorCisgICAgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBp
ZiBpc2luc3RhbmNlKG90aGVyLCBpbnQpOgorICAgICAgICAgICAgc2VsZi5yYyA9IG90aGVyCisg
ICAgICAgIGVsaWYgaXNpbnN0YW5jZShvdGhlciwgdHVwbGUpIGFuZCBvdGhlclswXSA9PSAnbG9n
JzoKKyAgICAgICAgICAgIHNlbGYubG9ncy5hcHBlbmQoKG90aGVyWzFdLCBvdGhlclsyXSkpCisg
ICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJl
dHVybiAnRXhwZWN0TWFzdGVyU2hlbGxDb21tYW5kKHswfSknLmZvcm1hdChyZXByKHNlbGYuYXJn
cykpCisKKworY2xhc3MgQnVpbGRTdGVwTWl4aW5BZGRpdGlvbnMoQnVpbGRTdGVwTWl4aW4pOgor
ICAgIGRlZiBzZXRVcEJ1aWxkU3RlcChzZWxmKToKKyAgICAgICAgc2VsZi5wYXRjaChyZWFjdG9y
LCAnc3Bhd25Qcm9jZXNzJywgbGFtYmRhICphcmdzLCAqKmt3YXJnczogc2VsZi5fY2hlY2tTcGF3
blByb2Nlc3MoKmFyZ3MsICoqa3dhcmdzKSkKKyAgICAgICAgc2VsZi5fZXhwZWN0ZWRfbG9jYWxf
Y29tbWFuZHMgPSBbXQorCisgICAgICAgIHNlbGYuX3RlbXBfZGlyZWN0b3J5ID0gdGVtcGZpbGUu
bWtkdGVtcCgpCisgICAgICAgIG9zLmNoZGlyKHNlbGYuX3RlbXBfZGlyZWN0b3J5KQorICAgICAg
ICBzZWxmLl9leHBlY3RlZF91cGxvYWRlZF9maWxlcyA9IFtdCisKKyAgICAgICAgc3VwZXIoQnVp
bGRTdGVwTWl4aW5BZGRpdGlvbnMsIHNlbGYpLnNldFVwQnVpbGRTdGVwKCkKKworICAgIGRlZiB0
ZWFyRG93bkJ1aWxkU3RlcChzZWxmKToKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLl90ZW1w
X2RpcmVjdG9yeSkKKyAgICAgICAgc3VwZXIoQnVpbGRTdGVwTWl4aW5BZGRpdGlvbnMsIHNlbGYp
LnRlYXJEb3duQnVpbGRTdGVwKCkKKworICAgIGRlZiBmYWtlQnVpbGRGaW5pc2hlZChzZWxmLCB0
ZXh0LCByZXN1bHRzKToKKyAgICAgICAgc2VsZi5idWlsZC50ZXh0ID0gdGV4dAorICAgICAgICBz
ZWxmLmJ1aWxkLnJlc3VsdHMgPSByZXN1bHRzCisKKyAgICBkZWYgc2V0dXBTdGVwKHNlbGYsIHN0
ZXAsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYucHJldmlvdXNfc3RlcHMgPSBrd2Fy
Z3MuZ2V0KCdwcmV2aW91c19zdGVwcycpIG9yIFtdCisgICAgICAgIGlmIHNlbGYucHJldmlvdXNf
c3RlcHM6CisgICAgICAgICAgICBkZWwga3dhcmdzWydwcmV2aW91c19zdGVwcyddCisKKyAgICAg
ICAgc3VwZXIoQnVpbGRTdGVwTWl4aW5BZGRpdGlvbnMsIHNlbGYpLnNldHVwU3RlcChzdGVwLCAq
YXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuYnVpbGQudGVybWluYXRlID0gRmFsc2UKKyAg
ICAgICAgc2VsZi5idWlsZC5zdG9wcGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5idWlsZC5leGVj
dXRlZFN0ZXBzID0gc2VsZi5leGVjdXRlZFN0ZXBzCisgICAgICAgIHNlbGYuYnVpbGQuYnVpbGRG
aW5pc2hlZCA9IHNlbGYuZmFrZUJ1aWxkRmluaXNoZWQKKyAgICAgICAgc2VsZi5fZXhwZWN0ZWRf
YWRkZWRfdXJscyA9IFtdCisgICAgICAgIHNlbGYuX2V4cGVjdGVkX3NvdXJjZXMgPSBOb25lCisK
KyAgICBAcHJvcGVydHkKKyAgICBkZWYgZXhlY3V0ZWRTdGVwcyhzZWxmKToKKyAgICAgICAgcmV0
dXJuIGZpbHRlcihsYW1iZGEgc3RlcDogbm90IHN0ZXAuc3RvcHBlZCwgc2VsZi5wcmV2aW91c19z
dGVwcykKKworICAgIGRlZiBzZXRQcm9wZXJ0eShzZWxmLCBuYW1lLCB2YWx1ZSwgc291cmNlPSdV
bmtub3duJyk6CisgICAgICAgIHNlbGYucHJvcGVydGllcy5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1
ZSwgc291cmNlKQorCisgICAgZGVmIGdldFByb3BlcnR5KHNlbGYsIG5hbWUpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5wcm9wZXJ0aWVzLmdldFByb3BlcnR5KG5hbWUpCisKKyAgICBkZWYgZXhwZWN0
QWRkZWRVUkxzKHNlbGYsIGFkZGVkX3VybHMpOgorICAgICAgICBzZWxmLl9leHBlY3RlZF9hZGRl
ZF91cmxzID0gYWRkZWRfdXJscworCisgICAgZGVmIGV4cGVjdFVwbG9hZGVkRmlsZShzZWxmLCBw
YXRoKToKKyAgICAgICAgc2VsZi5fZXhwZWN0ZWRfdXBsb2FkZWRfZmlsZXMuYXBwZW5kKHBhdGgp
CisKKyAgICBkZWYgZXhwZWN0TG9jYWxDb21tYW5kcyhzZWxmLCAqZXhwZWN0ZWRfY29tbWFuZHMp
OgorICAgICAgICBzZWxmLl9leHBlY3RlZF9sb2NhbF9jb21tYW5kcy5leHRlbmQoZXhwZWN0ZWRf
Y29tbWFuZHMpCisKKyAgICBkZWYgZXhwZWN0UmVtb3RlQ29tbWFuZHMoc2VsZiwgKmV4cGVjdGVk
X2NvbW1hbmRzKToKKyAgICAgICAgc2VsZi5leHBlY3RDb21tYW5kcygqZXhwZWN0ZWRfY29tbWFu
ZHMpCisKKyAgICBkZWYgZXhwZWN0U291cmNlcyhzZWxmLCBleHBlY3RlZF9zb3VyY2VzKToKKyAg
ICAgICAgc2VsZi5fZXhwZWN0ZWRfc291cmNlcyA9IGV4cGVjdGVkX3NvdXJjZXMKKworICAgIGRl
ZiBfY2hlY2tTcGF3blByb2Nlc3Moc2VsZiwgcHJvY2Vzc1Byb3RvY29sLCBleGVjdXRhYmxlLCBh
cmdzLCBlbnYsIHBhdGgsIHVzZVBUWSwgKiprd2FyZ3MpOgorICAgICAgICBnb3QgPSAoZXhlY3V0
YWJsZSwgYXJncywgZW52LCBwYXRoLCB1c2VQVFkpCisgICAgICAgIGlmIG5vdCBzZWxmLl9leHBl
Y3RlZF9sb2NhbF9jb21tYW5kczoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnZ290IGxvY2FsIGNv
bW1hbmQgezB9IHdoZW4gbm8gZnVydGhlciBjb21tYW5kcyB3ZXJlIGV4cGVjdGVkJy5mb3JtYXQo
Z290KSkKKyAgICAgICAgbG9jYWxfY29tbWFuZCA9IHNlbGYuX2V4cGVjdGVkX2xvY2FsX2NvbW1h
bmRzLnBvcCgwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdv
dCwgKGxvY2FsX2NvbW1hbmQuYXJnc1swXSwgbG9jYWxfY29tbWFuZC5hcmdzLCBsb2NhbF9jb21t
YW5kLmVudiwgbG9jYWxfY29tbWFuZC5wYXRoLCBsb2NhbF9jb21tYW5kLnVzZVBUWSkpCisgICAg
ICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvcjoKKyAgICAgICAgICAgIGxvZy5lcnIoKQorICAgICAg
ICAgICAgcmFpc2UKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIGxvY2FsX2NvbW1hbmQubG9n
czoKKyAgICAgICAgICAgIGlmIG5hbWUgPT0gJ3N0ZG91dCc6CisgICAgICAgICAgICAgICAgcHJv
Y2Vzc1Byb3RvY29sLm91dFJlY2VpdmVkKHZhbHVlKQorICAgICAgICAgICAgZWxpZiBuYW1lID09
ICdzdGRlcnInOgorICAgICAgICAgICAgICAgIHByb2Nlc3NQcm90b2NvbC5lcnJSZWNlaXZlZCh2
YWx1ZSkKKyAgICAgICAgaWYgbG9jYWxfY29tbWFuZC5yYyAhPSAwOgorICAgICAgICAgICAgdmFs
dWUgPSBlcnJvci5Qcm9jZXNzVGVybWluYXRlZChleGl0Q29kZT1sb2NhbF9jb21tYW5kLnJjKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmFsdWUgPSBlcnJvci5Qcm9jZXNzRG9uZShOb25l
KQorICAgICAgICBwcm9jZXNzUHJvdG9jb2wucHJvY2Vzc0VuZGVkKGZhaWx1cmUuRmFpbHVyZSh2
YWx1ZSkpCisKKyAgICBkZWYgX2FkZGVkX2ZpbGVzKHNlbGYpOgorICAgICAgICByZXN1bHRzID0g
W10KKyAgICAgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2Fsayhz
ZWxmLl90ZW1wX2RpcmVjdG9yeSk6CisgICAgICAgICAgICByZWxhdGl2ZV9yb290X3BhdGggPSBv
cy5wYXRoLnJlbHBhdGgoZGlycGF0aCwgc3RhcnQ9c2VsZi5fdGVtcF9kaXJlY3RvcnkpCisgICAg
ICAgICAgICBpZiByZWxhdGl2ZV9yb290X3BhdGggPT0gJy4nOgorICAgICAgICAgICAgICAgIHJl
bGF0aXZlX3Jvb3RfcGF0aCA9ICcnCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxlbmFtZXM6
CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQob3MucGF0aC5qb2luKHJlbGF0aXZlX3Jv
b3RfcGF0aCwgbmFtZSkpCisgICAgICAgIHJldHVybiByZXN1bHRzCisKKyAgICBkZWYgcnVuU3Rl
cChzZWxmKToKKyAgICAgICAgZGVmIGNoZWNrKHJlc3VsdCk6CisgICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNlbGYuX2V4cGVjdGVkX2xvY2FsX2NvbW1hbmRzLCBbXSwgJ2Fzc2VydCBhbGwg
ZXhwZWN0ZWQgbG9jYWwgY29tbWFuZHMgd2VyZSBydW4nKQorICAgICAgICAgICAgc2VsZi5leHBl
Y3RBZGRlZFVSTHMoc2VsZi5fZXhwZWN0ZWRfYWRkZWRfdXJscykKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc2VsZi5fYWRkZWRfZmlsZXMoKSwgc2VsZi5fZXhwZWN0ZWRfdXBsb2FkZWRf
ZmlsZXMpCisgICAgICAgICAgICBpZiBzZWxmLl9leHBlY3RlZF9zb3VyY2VzIGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgICAgICMgQ29udmVydCB0byBkaWN0aW9uYXJpZXMgYmVjYXVzZSBhc3Nl
cnRFcXVhbCgpIG9ubHkga25vd3MgaG93IHRvIGRpZmYgUHl0aG9uIGJ1aWx0LWluIHR5cGVzLgor
ICAgICAgICAgICAgICAgIGFjdHVhbF9zb3VyY2VzID0gc29ydGVkKFtzb3VyY2UuYXNEaWN0KCkg
Zm9yIHNvdXJjZSBpbiBzZWxmLmJ1aWxkLnNvdXJjZXNdLCBrZXk9b3BlcmF0b3IuaXRlbWdldHRl
cignY29kZWJhc2UnKSkKKyAgICAgICAgICAgICAgICBleHBlY3RlZF9zb3VyY2VzID0gc29ydGVk
KFtzb3VyY2UuYXNEaWN0KCkgZm9yIHNvdXJjZSBpbiBzZWxmLl9leHBlY3RlZF9zb3VyY2VzXSwg
a2V5PW9wZXJhdG9yLml0ZW1nZXR0ZXIoJ2NvZGViYXNlJykpCisgICAgICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChhY3R1YWxfc291cmNlcywgZXhwZWN0ZWRfc291cmNlcykKKyAgICAgICAg
ZGVmZXJyZWRfcmVzdWx0ID0gc3VwZXIoQnVpbGRTdGVwTWl4aW5BZGRpdGlvbnMsIHNlbGYpLnJ1
blN0ZXAoKQorICAgICAgICBkZWZlcnJlZF9yZXN1bHQuYWRkQ2FsbGJhY2soY2hlY2spCisgICAg
ICAgIHJldHVybiBkZWZlcnJlZF9yZXN1bHQKKworCitjbGFzcyBUZXN0U3RlcE5hbWVTaG91bGRC
ZVZhbGlkSWRlbnRpZmllcihCdWlsZFN0ZXBNaXhpbkFkZGl0aW9ucywgdW5pdHRlc3QuVGVzdENh
c2UpOgorICAgIGRlZiB0ZXN0X3N0ZXBfbmFtZXNfYXJlX3ZhbGlkKHNlbGYpOgorICAgICAgICBp
bXBvcnQgc3RlcHMKKyAgICAgICAgYnVpbGRfc3RlcF9jbGFzc2VzID0gaW5zcGVjdC5nZXRtZW1i
ZXJzKHN0ZXBzLCBpbnNwZWN0LmlzY2xhc3MpCisgICAgICAgIGZvciBidWlsZF9zdGVwIGluIGJ1
aWxkX3N0ZXBfY2xhc3NlczoKKyAgICAgICAgICAgIGlmICduYW1lJyBpbiB2YXJzKGJ1aWxkX3N0
ZXBbMV0pOgorICAgICAgICAgICAgICAgIG5hbWUgPSBidWlsZF9zdGVwWzFdLm5hbWUKKyAgICAg
ICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCcgJyBpbiBuYW1lLCAnc3RlcCBuYW1lICJ7fSIg
Y29udGFpbiBzcGFjZS4nLmZvcm1hdChuYW1lKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoYnVpbGRib3RfaWRlbnRpZmllcnMuaWRlbnRfcmUubWF0Y2gobmFtZSksICdzdGVwIG5h
bWUgInt9IiBpcyBub3QgYSB2YWxpZCBidWlsZGJvdCBpZGVudGlmaWVyLicuZm9ybWF0KG5hbWUp
KQorCisKK2NsYXNzIFRlc3RSdW5CaW5kaW5nc1Rlc3RzKEJ1aWxkU3RlcE1peGluQWRkaXRpb25z
LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxm
LmxvbmdNZXNzYWdlID0gVHJ1ZQorICAgICAgICByZXR1cm4gc2VsZi5zZXRVcEJ1aWxkU3RlcCgp
CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnRlYXJEb3du
QnVpbGRTdGVwKCkKKworICAgIGRlZiB0ZXN0X3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIHNlbGYu
c2V0dXBTdGVwKFJ1bkJpbmRpbmdzVGVzdHMoKSkKKyAgICAgICAgc2VsZi5leHBlY3RSZW1vdGVD
b21tYW5kcygKKyAgICAgICAgICAgIEV4cGVjdFNoZWxsKHdvcmtkaXI9J3drZGlyJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9MTIwMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxvZ0Vudmlyb249VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9WydweXRo
b24nLCAnLi9Ub29scy9TY3JpcHRzL3J1bi1iaW5kaW5ncy10ZXN0cyddLAorICAgICAgICAgICAg
ICAgICAgICAgICAgKQorICAgICAgICAgICAgKyAwLAorICAgICAgICApCisgICAgICAgIHNlbGYu
ZXhwZWN0T3V0Y29tZShyZXN1bHQ9U1VDQ0VTUywgc3RhdGVfc3RyaW5nPSdiaW5kaW5ncy10ZXN0
cycpCisgICAgICAgIHJldHVybiBzZWxmLnJ1blN0ZXAoKQorCisgICAgZGVmIHRlc3RfZmFpbHVy
ZShzZWxmKToKKyAgICAgICAgc2VsZi5zZXR1cFN0ZXAoUnVuQmluZGluZ3NUZXN0cygpKQorICAg
ICAgICBzZWxmLmV4cGVjdFJlbW90ZUNvbW1hbmRzKAorICAgICAgICAgICAgRXhwZWN0U2hlbGwo
d29ya2Rpcj0nd2tkaXInLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0xMjAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgbG9nRW52aXJvbj1UcnVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgY29tbWFuZD1bJ3B5dGhvbicsICcuL1Rvb2xzL1NjcmlwdHMvcnVuLWJpbmRpbmdz
LXRlc3RzJ10sCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICArIEV4cGVj
dFNoZWxsLmxvZygnc3RkaW8nLCBzdGRvdXQ9J0ZBSUw6IChKUykgSlNUZXN0SW50ZXJmYWNlLmNw
cCcpCisgICAgICAgICAgICArIDIsCisgICAgICAgICkKKyAgICAgICAgc2VsZi5leHBlY3RPdXRj
b21lKHJlc3VsdD1GQUlMVVJFLCBzdGF0ZV9zdHJpbmc9J2JpbmRpbmdzLXRlc3RzIChmYWlsdXJl
KScpCisgICAgICAgIHJldHVybiBzZWxmLnJ1blN0ZXAoKQorCisKK2NsYXNzIFRlc3RLaWxsT2xk
UHJvY2Vzc2VzKEJ1aWxkU3RlcE1peGluQWRkaXRpb25zLCB1bml0dGVzdC5UZXN0Q2FzZSk6Cisg
ICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvbmdNZXNzYWdlID0gVHJ1ZQorICAg
ICAgICByZXR1cm4gc2VsZi5zZXRVcEJ1aWxkU3RlcCgpCisKKyAgICBkZWYgdGVhckRvd24oc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLnRlYXJEb3duQnVpbGRTdGVwKCkKKworICAgIGRlZiB0
ZXN0X3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIHNlbGYuc2V0dXBTdGVwKEtpbGxPbGRQcm9jZXNz
ZXMoKSkKKyAgICAgICAgc2VsZi5leHBlY3RSZW1vdGVDb21tYW5kcygKKyAgICAgICAgICAgIEV4
cGVjdFNoZWxsKHdvcmtkaXI9J3drZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0Vu
dmlyb249VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9WydweXRob24nLCAn
Li9Ub29scy9DSVN1cHBvcnQva2lsbC1vbGQtcHJvY2Vzc2VzJywgJ2J1aWxkYm90J10sCisgICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEyMDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICApCisgICAgICAgICAgICArIDAsCisgICAgICAgICkKKyAgICAgICAgc2VsZi5leHBlY3RPdXRj
b21lKHJlc3VsdD1TVUNDRVNTLCBzdGF0ZV9zdHJpbmc9J2tpbGxlZCBvbGQgcHJvY2Vzc2VzJykK
KyAgICAgICAgcmV0dXJuIHNlbGYucnVuU3RlcCgpCisKKyAgICBkZWYgdGVzdF9mYWlsdXJlKHNl
bGYpOgorICAgICAgICBzZWxmLnNldHVwU3RlcChLaWxsT2xkUHJvY2Vzc2VzKCkpCisgICAgICAg
IHNlbGYuZXhwZWN0UmVtb3RlQ29tbWFuZHMoCisgICAgICAgICAgICBFeHBlY3RTaGVsbCh3b3Jr
ZGlyPSd3a2RpcicsCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dFbnZpcm9uPVRydWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPVsncHl0aG9uJywgJy4vVG9vbHMvQ0lTdXBw
b3J0L2tpbGwtb2xkLXByb2Nlc3NlcycsICdidWlsZGJvdCddLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGltZW91dD0xMjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAg
ICAgKyBFeHBlY3RTaGVsbC5sb2coJ3N0ZGlvJywgc3Rkb3V0PSdVbmV4cGVjdGVkIGVycm9yLicp
CisgICAgICAgICAgICArIDIsCisgICAgICAgICkKKyAgICAgICAgc2VsZi5leHBlY3RPdXRjb21l
KHJlc3VsdD1GQUlMVVJFLCBzdGF0ZV9zdHJpbmc9J2tpbGxlZCBvbGQgcHJvY2Vzc2VzIChmYWls
dXJlKScpCisgICAgICAgIHJldHVybiBzZWxmLnJ1blN0ZXAoKQorCisKK2NsYXNzIFRlc3RDbGVh
bkJ1aWxkSWZTY2hlZHVsZWQoQnVpbGRTdGVwTWl4aW5BZGRpdGlvbnMsIHVuaXR0ZXN0LlRlc3RD
YXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9uZ01lc3NhZ2UgPSBU
cnVlCisgICAgICAgIHNlbGYuc2V0dXBTdGVwKENsZWFuQnVpbGRJZlNjaGVkdWxlZCgpKQorICAg
ICAgICByZXR1cm4gc2VsZi5zZXRVcEJ1aWxkU3RlcCgpCisKKyAgICBkZWYgdGVhckRvd24oc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLnRlYXJEb3duQnVpbGRTdGVwKCkKKworICAgIGRlZiB0
ZXN0X3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ2Z1bGxQbGF0Zm9y
bScsICdpb3MtMTQnKQorICAgICAgICBzZWxmLnNldFByb3BlcnR5KCdjb25maWd1cmF0aW9uJywg
J3JlbGVhc2UnKQorICAgICAgICBzZWxmLnNldFByb3BlcnR5KCdpc19jbGVhbicsICdUcnVlJykK
KyAgICAgICAgc2VsZi5leHBlY3RSZW1vdGVDb21tYW5kcygKKyAgICAgICAgICAgIEV4cGVjdFNo
ZWxsKHdvcmtkaXI9J3drZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0Vudmlyb249
VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9WydweXRob24nLCAnLi9Ub29s
cy9DSVN1cHBvcnQvY2xlYW4tYnVpbGQnLCAnLS1wbGF0Zm9ybT1pb3MtMTQnLCAnLS1yZWxlYXNl
J10sCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEyMDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICApCisgICAgICAgICAgICArIDAsCisgICAgICAgICkKKyAgICAgICAgc2VsZi5l
eHBlY3RPdXRjb21lKHJlc3VsdD1TVUNDRVNTLCBzdGF0ZV9zdHJpbmc9J2RlbGV0ZWQgV2ViS2l0
QnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuU3RlcCgpCisKKyAgICBk
ZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgorICAgICAgICBzZWxmLnNldFByb3BlcnR5KCdmdWxsUGxh
dGZvcm0nLCAnaW9zLXNpbXVsYXRvci0xNCcpCisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ2Nv
bmZpZ3VyYXRpb24nLCAnZGVidWcnKQorICAgICAgICBzZWxmLnNldFByb3BlcnR5KCdpc19jbGVh
bicsICdUcnVlJykKKyAgICAgICAgc2VsZi5leHBlY3RSZW1vdGVDb21tYW5kcygKKyAgICAgICAg
ICAgIEV4cGVjdFNoZWxsKHdvcmtkaXI9J3drZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxvZ0Vudmlyb249VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9WydweXRo
b24nLCAnLi9Ub29scy9DSVN1cHBvcnQvY2xlYW4tYnVpbGQnLCAnLS1wbGF0Zm9ybT1pb3Mtc2lt
dWxhdG9yLTE0JywgJy0tZGVidWcnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9
MTIwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICsgRXhwZWN0U2hl
bGwubG9nKCdzdGRpbycsIHN0ZG91dD0nVW5leHBlY3RlZCBlcnJvci4nKQorICAgICAgICAgICAg
KyAyLAorICAgICAgICApCisgICAgICAgIHNlbGYuZXhwZWN0T3V0Y29tZShyZXN1bHQ9RkFJTFVS
RSwgc3RhdGVfc3RyaW5nPSdkZWxldGVkIFdlYktpdEJ1aWxkIGRpcmVjdG9yeSAoZmFpbHVyZSkn
KQorICAgICAgICByZXR1cm4gc2VsZi5ydW5TdGVwKCkKKworICAgIGRlZiB0ZXN0X3NraXAoc2Vs
Zik6CisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ2Z1bGxQbGF0Zm9ybScsICdpb3Mtc2ltdWxh
dG9yLTE0JykKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgnY29uZmlndXJhdGlvbicsICdkZWJ1
ZycpCisgICAgICAgIHNlbGYuZXhwZWN0T3V0Y29tZShyZXN1bHQ9U0tJUFBFRCwgc3RhdGVfc3Ry
aW5nPSdkZWxldGVkIFdlYktpdEJ1aWxkIGRpcmVjdG9yeSAoc2tpcHBlZCknKQorICAgICAgICBy
ZXR1cm4gc2VsZi5ydW5TdGVwKCkKKworCitjbGFzcyBUZXN0SW5zdGFsbEd0a0RlcGVuZGVuY2ll
cyhCdWlsZFN0ZXBNaXhpbkFkZGl0aW9ucywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBz
ZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb25nTWVzc2FnZSA9IFRydWUKKyAgICAgICAgc2Vs
Zi5zZXR1cFN0ZXAoSW5zdGFsbEd0a0RlcGVuZGVuY2llcygpKQorICAgICAgICByZXR1cm4gc2Vs
Zi5zZXRVcEJ1aWxkU3RlcCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLnRlYXJEb3duQnVpbGRTdGVwKCkKKworICAgIGRlZiB0ZXN0X3N1Y2Nlc3Moc2Vs
Zik6CisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ2NvbmZpZ3VyYXRpb24nLCAncmVsZWFzZScp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSW5zdGFsbEd0a0RlcGVuZGVuY2llcy5oYWx0T25G
YWlsdXJlLCBUcnVlKQorICAgICAgICBzZWxmLmV4cGVjdFJlbW90ZUNvbW1hbmRzKAorICAgICAg
ICAgICAgRXhwZWN0U2hlbGwod29ya2Rpcj0nd2tkaXInLAorICAgICAgICAgICAgICAgICAgICAg
ICAgbG9nRW52aXJvbj1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1bJ3Bl
cmwnLCAnLi9Ub29scy9TY3JpcHRzL3VwZGF0ZS13ZWJraXRndGstbGlicycsICctLXJlbGVhc2Un
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9MTIwMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICkKKyAgICAgICAgICAgICsgMCwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmV4
cGVjdE91dGNvbWUocmVzdWx0PVNVQ0NFU1MsIHN0YXRlX3N0cmluZz0ndXBkYXRlZCBndGsgZGVw
ZW5kZW5jaWVzJykKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuU3RlcCgpCisKKyAgICBkZWYgdGVz
dF9mYWlsdXJlKHNlbGYpOgorICAgICAgICBzZWxmLnNldFByb3BlcnR5KCdjb25maWd1cmF0aW9u
JywgJ2RlYnVnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChJbnN0YWxsR3RrRGVwZW5kZW5j
aWVzLmhhbHRPbkZhaWx1cmUsIFRydWUpCisgICAgICAgIHNlbGYuZXhwZWN0UmVtb3RlQ29tbWFu
ZHMoCisgICAgICAgICAgICBFeHBlY3RTaGVsbCh3b3JrZGlyPSd3a2RpcicsCisgICAgICAgICAg
ICAgICAgICAgICAgICBsb2dFbnZpcm9uPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBj
b21tYW5kPVsncGVybCcsICcuL1Rvb2xzL1NjcmlwdHMvdXBkYXRlLXdlYmtpdGd0ay1saWJzJywg
Jy0tZGVidWcnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9MTIwMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICsgRXhwZWN0U2hlbGwubG9nKCdzdGRp
bycsIHN0ZG91dD0nVW5leHBlY3RlZCBlcnJvci4nKQorICAgICAgICAgICAgKyAyLAorICAgICAg
ICApCisgICAgICAgIHNlbGYuZXhwZWN0T3V0Y29tZShyZXN1bHQ9RkFJTFVSRSwgc3RhdGVfc3Ry
aW5nPSd1cGRhdGVkIGd0ayBkZXBlbmRlbmNpZXMgKGZhaWx1cmUpJykKKyAgICAgICAgcmV0dXJu
IHNlbGYucnVuU3RlcCgpCisKKworY2xhc3MgVGVzdEluc3RhbGxXcGVEZXBlbmRlbmNpZXMoQnVp
bGRTdGVwTWl4aW5BZGRpdGlvbnMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAo
c2VsZik6CisgICAgICAgIHNlbGYubG9uZ01lc3NhZ2UgPSBUcnVlCisgICAgICAgIHNlbGYuc2V0
dXBTdGVwKEluc3RhbGxXcGVEZXBlbmRlbmNpZXMoKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuc2V0
VXBCdWlsZFN0ZXAoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi50ZWFyRG93bkJ1aWxkU3RlcCgpCisKKyAgICBkZWYgdGVzdF9zdWNjZXNzKHNlbGYpOgor
ICAgICAgICBzZWxmLnNldFByb3BlcnR5KCdjb25maWd1cmF0aW9uJywgJ3JlbGVhc2UnKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKEluc3RhbGxXcGVEZXBlbmRlbmNpZXMuaGFsdE9uRmFpbHVy
ZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5leHBlY3RSZW1vdGVDb21tYW5kcygKKyAgICAgICAgICAg
IEV4cGVjdFNoZWxsKHdvcmtkaXI9J3drZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGxv
Z0Vudmlyb249VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9WydwZXJsJywg
Jy4vVG9vbHMvU2NyaXB0cy91cGRhdGUtd2Via2l0d3BlLWxpYnMnLCAnLS1yZWxlYXNlJ10sCisg
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEyMDAsCisgICAgICAgICAgICAgICAgICAg
ICAgICApCisgICAgICAgICAgICArIDAsCisgICAgICAgICkKKyAgICAgICAgc2VsZi5leHBlY3RP
dXRjb21lKHJlc3VsdD1TVUNDRVNTLCBzdGF0ZV9zdHJpbmc9J3VwZGF0ZWQgd3BlIGRlcGVuZGVu
Y2llcycpCisgICAgICAgIHJldHVybiBzZWxmLnJ1blN0ZXAoKQorCisgICAgZGVmIHRlc3RfZmFp
bHVyZShzZWxmKToKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgnY29uZmlndXJhdGlvbicsICdy
ZWxlYXNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChJbnN0YWxsV3BlRGVwZW5kZW5jaWVz
LmhhbHRPbkZhaWx1cmUsIFRydWUpCisgICAgICAgIHNlbGYuZXhwZWN0UmVtb3RlQ29tbWFuZHMo
CisgICAgICAgICAgICBFeHBlY3RTaGVsbCh3b3JrZGlyPSd3a2RpcicsCisgICAgICAgICAgICAg
ICAgICAgICAgICBsb2dFbnZpcm9uPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb21t
YW5kPVsncGVybCcsICcuL1Rvb2xzL1NjcmlwdHMvdXBkYXRlLXdlYmtpdHdwZS1saWJzJywgJy0t
cmVsZWFzZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0xMjAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKyBFeHBlY3RTaGVsbC5sb2coJ3N0ZGlv
Jywgc3Rkb3V0PSdVbmV4cGVjdGVkIGVycm9yLicpCisgICAgICAgICAgICArIDIsCisgICAgICAg
ICkKKyAgICAgICAgc2VsZi5leHBlY3RPdXRjb21lKHJlc3VsdD1GQUlMVVJFLCBzdGF0ZV9zdHJp
bmc9J3VwZGF0ZWQgd3BlIGRlcGVuZGVuY2llcyAoZmFpbHVyZSknKQorICAgICAgICByZXR1cm4g
c2VsZi5ydW5TdGVwKCkKKworCitjbGFzcyBUZXN0Q29tcGlsZVdlYktpdChCdWlsZFN0ZXBNaXhp
bkFkZGl0aW9ucywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAg
ICAgICAgc2VsZi5sb25nTWVzc2FnZSA9IFRydWUKKyAgICAgICAgc2VsZi5zZXR1cFN0ZXAoQ29t
cGlsZVdlYktpdCgpKQorICAgICAgICByZXR1cm4gc2VsZi5zZXRVcEJ1aWxkU3RlcCgpCisKKyAg
ICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnRlYXJEb3duQnVpbGRT
dGVwKCkKKworICAgIGRlZiB0ZXN0X3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIHNlbGYuc2V0UHJv
cGVydHkoJ2Z1bGxQbGF0Zm9ybScsICdpb3Mtc2ltdWxhdG9yLTExJykKKyAgICAgICAgc2VsZi5z
ZXRQcm9wZXJ0eSgnY29uZmlndXJhdGlvbicsICdyZWxlYXNlJykKKyAgICAgICAgc2VsZi5leHBl
Y3RSZW1vdGVDb21tYW5kcygKKyAgICAgICAgICAgIEV4cGVjdFNoZWxsKHdvcmtkaXI9J3drZGly
JywKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0Vudmlyb249VHJ1ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbW1hbmQ9WydwZXJsJywgJy4vVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJr
aXQnLCAnLS1yZWxlYXNlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEyMDAs
CisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICArIDAsCisgICAgICAgICkK
KyAgICAgICAgc2VsZi5leHBlY3RPdXRjb21lKHJlc3VsdD1TVUNDRVNTLCBzdGF0ZV9zdHJpbmc9
J2NvbXBpbGVkJykKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuU3RlcCgpCisKKyAgICBkZWYgdGVz
dF9zdWNjZXNzX2d0ayhzZWxmKToKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgncGxhdGZvcm0n
LCAnZ3RrJykKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgnZnVsbFBsYXRmb3JtJywgJ2d0aycp
CisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ2NvbmZpZ3VyYXRpb24nLCAncmVsZWFzZScpCisg
ICAgICAgIHNlbGYuZXhwZWN0UmVtb3RlQ29tbWFuZHMoCisgICAgICAgICAgICBFeHBlY3RTaGVs
bCh3b3JrZGlyPSd3a2RpcicsCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dFbnZpcm9uPVRy
dWUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPVsncGVybCcsICcuL1Rvb2xzL1Nj
cmlwdHMvYnVpbGQtd2Via2l0JywgJy0tcmVsZWFzZScsICctLWd0ayddLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGltZW91dD0xMjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAg
ICAgICAgICAgKyAwLAorICAgICAgICApCisgICAgICAgIHNlbGYuZXhwZWN0T3V0Y29tZShyZXN1
bHQ9U1VDQ0VTUywgc3RhdGVfc3RyaW5nPSdjb21waWxlZCcpCisgICAgICAgIHJldHVybiBzZWxm
LnJ1blN0ZXAoKQorCisgICAgZGVmIHRlc3Rfc3VjY2Vzc193cGUoc2VsZik6CisgICAgICAgIHNl
bGYuc2V0UHJvcGVydHkoJ3BsYXRmb3JtJywgJ3dwZScpCisgICAgICAgIHNlbGYuc2V0UHJvcGVy
dHkoJ2Z1bGxQbGF0Zm9ybScsICd3cGUnKQorICAgICAgICBzZWxmLnNldFByb3BlcnR5KCdjb25m
aWd1cmF0aW9uJywgJ3JlbGVhc2UnKQorICAgICAgICBzZWxmLmV4cGVjdFJlbW90ZUNvbW1hbmRz
KAorICAgICAgICAgICAgRXhwZWN0U2hlbGwod29ya2Rpcj0nd2tkaXInLAorICAgICAgICAgICAg
ICAgICAgICAgICAgbG9nRW52aXJvbj1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29t
bWFuZD1bJ3BlcmwnLCAnLi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdCcsICctLXJlbGVhc2Un
LCAnLS13cGUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9MTIwMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICsgMCwKKyAgICAgICAgKQorICAgICAg
ICBzZWxmLmV4cGVjdE91dGNvbWUocmVzdWx0PVNVQ0NFU1MsIHN0YXRlX3N0cmluZz0nY29tcGls
ZWQnKQorICAgICAgICByZXR1cm4gc2VsZi5ydW5TdGVwKCkKKworICAgIGRlZiB0ZXN0X2ZhaWx1
cmUoc2VsZik6CisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ2Z1bGxQbGF0Zm9ybScsICdtYWMt
c2llcnJhJykKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgnY29uZmlndXJhdGlvbicsICdkZWJ1
ZycpCisgICAgICAgIHNlbGYuZXhwZWN0UmVtb3RlQ29tbWFuZHMoCisgICAgICAgICAgICBFeHBl
Y3RTaGVsbCh3b3JrZGlyPSd3a2RpcicsCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dFbnZp
cm9uPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPVsncGVybCcsICcuL1Rv
b2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0JywgJy0tZGVidWcnXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWVvdXQ9MTIwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAg
ICAgICsgRXhwZWN0U2hlbGwubG9nKCdzdGRpbycsIHN0ZG91dD0nMSBlcnJvciBnZW5lcmF0ZWQu
JykKKyAgICAgICAgICAgICsgMiwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmV4cGVjdE91dGNv
bWUocmVzdWx0PUZBSUxVUkUsIHN0YXRlX3N0cmluZz0nY29tcGlsZWQgKGZhaWx1cmUpJykKKyAg
ICAgICAgcmV0dXJuIHNlbGYucnVuU3RlcCgpCisKKworY2xhc3MgVGVzdENvbXBpbGVKU0NPbmx5
KEJ1aWxkU3RlcE1peGluQWRkaXRpb25zLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNl
dFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvbmdNZXNzYWdlID0gVHJ1ZQorICAgICAgICByZXR1
cm4gc2VsZi5zZXRVcEJ1aWxkU3RlcCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLnRlYXJEb3duQnVpbGRTdGVwKCkKKworICAgIGRlZiB0ZXN0X3N1Y2Nl
c3Moc2VsZik6CisgICAgICAgIHNlbGYuc2V0dXBTdGVwKENvbXBpbGVKU0NPbmx5KCkpCisgICAg
ICAgIHNlbGYuc2V0UHJvcGVydHkoJ2Z1bGxQbGF0Zm9ybScsICdqc2Mtb25seScpCisgICAgICAg
IHNlbGYuc2V0UHJvcGVydHkoJ2NvbmZpZ3VyYXRpb24nLCAncmVsZWFzZScpCisgICAgICAgIHNl
bGYuZXhwZWN0UmVtb3RlQ29tbWFuZHMoCisgICAgICAgICAgICBFeHBlY3RTaGVsbCh3b3JrZGly
PSd3a2RpcicsCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dFbnZpcm9uPVRydWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb21tYW5kPVsncGVybCcsICcuL1Rvb2xzL1NjcmlwdHMvYnVp
bGQtanNjJywgJy0tcmVsZWFzZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0x
MjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKyAwLAorICAgICAg
ICApCisgICAgICAgIHNlbGYuZXhwZWN0T3V0Y29tZShyZXN1bHQ9U1VDQ0VTUywgc3RhdGVfc3Ry
aW5nPSdjb21waWxlZCcpCisgICAgICAgIHJldHVybiBzZWxmLnJ1blN0ZXAoKQorCisgICAgZGVm
IHRlc3RfZmFpbHVyZShzZWxmKToKKyAgICAgICAgc2VsZi5zZXR1cFN0ZXAoQ29tcGlsZUpTQ09u
bHkoKSkKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgnZnVsbFBsYXRmb3JtJywgJ2pzYy1vbmx5
JykKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgnY29uZmlndXJhdGlvbicsICdkZWJ1ZycpCisg
ICAgICAgIHNlbGYuZXhwZWN0UmVtb3RlQ29tbWFuZHMoCisgICAgICAgICAgICBFeHBlY3RTaGVs
bCh3b3JrZGlyPSd3a2RpcicsCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dFbnZpcm9uPVRy
dWUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPVsncGVybCcsICcuL1Rvb2xzL1Nj
cmlwdHMvYnVpbGQtanNjJywgJy0tZGVidWcnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICkK
KyAgICAgICAgICAgICsgRXhwZWN0U2hlbGwubG9nKCdzdGRpbycsIHN0ZG91dD0nMSBlcnJvciBn
ZW5lcmF0ZWQuJykKKyAgICAgICAgICAgICsgMiwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmV4
cGVjdE91dGNvbWUocmVzdWx0PUZBSUxVUkUsIHN0YXRlX3N0cmluZz0nY29tcGlsZWQgKGZhaWx1
cmUpJykKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuU3RlcCgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415151</attachid>
            <date>2020-12-01 12:18:16 -0800</date>
            <delta_ts>2020-12-01 15:36:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219363-20201201151814.patch</filename>
            <type>text/plain</type>
            <size>24583</size>
            <attacher name="Aakash Jain">aakash_jain</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MDMyMikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQzIEBACisyMDIwLTExLTMwICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNv
bT4KKworICAgICAgICBbYnVpbGQud2Via2l0Lm9yZ10gQWRkIHVuaXQtdGVzdHMgYmFzZWQgb24g
bmV3IGJ1aWxkYm90CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTkzNjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIENJU3VwcG9ydC9idWlsZC13ZWJraXQtb3JnL2xvYWRDb25maWdfdW5pdHRlc3QucHk6
IERyaXZlLWJ5IGZpeCB0byBpbXBvcnQgbG9hZENvbmZpZyB3aGVuIHJ1bm5pbmcgdGhyb3VnaCBy
dW5Vbml0dGVzdHMucHkKKyAgICAgICAgKiBDSVN1cHBvcnQvYnVpbGQtd2Via2l0LW9yZy9odGRp
Z2VzdHBhcnNlci5weTogQWRkaW5nIHB5dGhvbiAzIGNvbXBhdGliYWxpdHkuCisgICAgICAgICog
Q0lTdXBwb3J0L2J1aWxkLXdlYmtpdC1vcmcvaHRkaWdlc3RwYXJzZXJfdW5pdHRlc3QucHk6IEFk
ZGluZyBweXRob24gMyBjb21wYXRpYmFsaXR5LgorICAgICAgICAqIENJU3VwcG9ydC9idWlsZC13
ZWJraXQtb3JnL3N0ZXBzX3VuaXR0ZXN0LnB5OiBBZGRlZCB1bml0LXRlc3RzIGZvciB2YXJpb3Vz
IHN0ZXBzLgorICAgICAgICAoRXhwZWN0TWFzdGVyU2hlbGxDb21tYW5kKToKKyAgICAgICAgKEJ1
aWxkU3RlcE1peGluQWRkaXRpb25zKToKKyAgICAgICAgKFRlc3RTdGVwTmFtZVNob3VsZEJlVmFs
aWRJZGVudGlmaWVyKToKKyAgICAgICAgKFRlc3RTdGVwTmFtZVNob3VsZEJlVmFsaWRJZGVudGlm
aWVyLnRlc3Rfc3RlcF9uYW1lc19hcmVfdmFsaWQpOgorICAgICAgICAoVGVzdFJ1bkJpbmRpbmdz
VGVzdHMpOgorICAgICAgICAoVGVzdFJ1bkJpbmRpbmdzVGVzdHMudGVzdF9zdWNjZXNzKToKKyAg
ICAgICAgKFRlc3RSdW5CaW5kaW5nc1Rlc3RzLnRlc3RfZmFpbHVyZSk6CisgICAgICAgIChUZXN0
S2lsbE9sZFByb2Nlc3Nlcyk6CisgICAgICAgIChUZXN0S2lsbE9sZFByb2Nlc3Nlcy50ZXN0X3N1
Y2Nlc3MpOgorICAgICAgICAoVGVzdEtpbGxPbGRQcm9jZXNzZXMudGVzdF9mYWlsdXJlKToKKyAg
ICAgICAgKFRlc3RDbGVhbkJ1aWxkSWZTY2hlZHVsZWQpOgorICAgICAgICAoVGVzdENsZWFuQnVp
bGRJZlNjaGVkdWxlZC50ZXN0X3N1Y2Nlc3MpOgorICAgICAgICAoVGVzdENsZWFuQnVpbGRJZlNj
aGVkdWxlZC50ZXN0X2ZhaWx1cmUpOgorICAgICAgICAoVGVzdENsZWFuQnVpbGRJZlNjaGVkdWxl
ZC50ZXN0X3NraXApOgorICAgICAgICAoVGVzdEluc3RhbGxHdGtEZXBlbmRlbmNpZXMpOgorICAg
ICAgICAoVGVzdEluc3RhbGxHdGtEZXBlbmRlbmNpZXMudGVzdF9zdWNjZXNzKToKKyAgICAgICAg
KFRlc3RJbnN0YWxsR3RrRGVwZW5kZW5jaWVzLnRlc3RfZmFpbHVyZSk6CisgICAgICAgIChUZXN0
SW5zdGFsbFdwZURlcGVuZGVuY2llcyk6CisgICAgICAgIChUZXN0SW5zdGFsbFdwZURlcGVuZGVu
Y2llcy50ZXN0X3N1Y2Nlc3MpOgorICAgICAgICAoVGVzdEluc3RhbGxXcGVEZXBlbmRlbmNpZXMu
dGVzdF9mYWlsdXJlKToKKyAgICAgICAgKFRlc3RDb21waWxlV2ViS2l0KToKKyAgICAgICAgKFRl
c3RDb21waWxlV2ViS2l0LnRlc3Rfc3VjY2Vzcyk6CisgICAgICAgIChUZXN0Q29tcGlsZVdlYktp
dC50ZXN0X3N1Y2Nlc3NfZ3RrKToKKyAgICAgICAgKFRlc3RDb21waWxlV2ViS2l0LnRlc3Rfc3Vj
Y2Vzc193cGUpOgorICAgICAgICAoVGVzdENvbXBpbGVXZWJLaXQudGVzdF9mYWlsdXJlKToKKyAg
ICAgICAgKFRlc3RDb21waWxlSlNDT25seSk6CisgICAgICAgIChUZXN0Q29tcGlsZUpTQ09ubHku
dGVzdF9zdWNjZXNzKToKKyAgICAgICAgKFRlc3RDb21waWxlSlNDT25seS50ZXN0X2ZhaWx1cmUp
OgorCiAyMDIwLTEyLTAxICBTZXJnZXkgUnViYW5vdiAgPGNoaTE4N0BnbWFpbC5jb20+CiAKICAg
ICAgICAgQWRkIFNlcmdleSBSdWJhbm92IHRvIGNvbnRyaWJ1dG9ycy5qc29uCkluZGV4OiBUb29s
cy9DSVN1cHBvcnQvYnVpbGQtd2Via2l0LW9yZy9odGRpZ2VzdHBhcnNlci5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9DSVN1cHBvcnQvYnVpbGQtd2Via2l0LW9yZy9odGRpZ2VzdHBhcnNlci5weQko
cmV2aXNpb24gMjcwMzIyKQorKysgVG9vbHMvQ0lTdXBwb3J0L2J1aWxkLXdlYmtpdC1vcmcvaHRk
aWdlc3RwYXJzZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgY2xhc3MgSFRE
aWdlc3RQYXJzZXIob2JqZWN0KToKICAgICAgICAgc2VsZi5fZW50cmllcyA9IHNlbGYucGFyc2Vf
ZmlsZShkaWdlc3RfZmlsZSkKIAogICAgIGRlZiBhdXRoZW50aWNhdGUoc2VsZiwgdXNlcm5hbWUs
IHJlYWxtLCBwYXNzd29yZCk6Ci0gICAgICAgIGhhc2hlZF9wYXNzd29yZCA9IGhhc2hsaWIubWQ1
KCc6Jy5qb2luKCh1c2VybmFtZSwgcmVhbG0sIHBhc3N3b3JkKSkpLmhleGRpZ2VzdCgpCisgICAg
ICAgIGhhc2hlZF9wYXNzd29yZCA9IGhhc2hsaWIubWQ1KCc6Jy5qb2luKCh1c2VybmFtZSwgcmVh
bG0sIHBhc3N3b3JkKSkuZW5jb2RlKCd1dGYtOCcpKS5oZXhkaWdlc3QoKQogICAgICAgICByZXR1
cm4gW3VzZXJuYW1lLCByZWFsbSwgaGFzaGVkX3Bhc3N3b3JkXSBpbiBzZWxmLmVudHJpZXMoKQog
CiAgICAgZGVmIGVudHJpZXMoc2VsZik6CkluZGV4OiBUb29scy9DSVN1cHBvcnQvYnVpbGQtd2Vi
a2l0LW9yZy9odGRpZ2VzdHBhcnNlcl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9D
SVN1cHBvcnQvYnVpbGQtd2Via2l0LW9yZy9odGRpZ2VzdHBhcnNlcl91bml0dGVzdC5weQkocmV2
aXNpb24gMjcwMzIyKQorKysgVG9vbHMvQ0lTdXBwb3J0L2J1aWxkLXdlYmtpdC1vcmcvaHRkaWdl
c3RwYXJzZXJfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDkgQEAgY2xh
c3MgSFREaWdlc3RQYXJzZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYQogICAgIGRlZiBhc3NlcnRFbnRy
aWVzRXF1YWwoc2VsZiwgZW50cmllcywgYWRkaXRpb25hbF9jb250ZW50PU5vbmUpOgogICAgICAg
ICBkaWdlc3RfZmlsZSA9IHNlbGYuZmFrZV9odGRpZ2VzdF9maWxlKCkKICAgICAgICAgaWYgYWRk
aXRpb25hbF9jb250ZW50IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgZGlnZXN0X2ZpbGUuc2Vl
ayhwb3M9MCwgbW9kZT1vcy5TRUVLX0VORCkKKyAgICAgICAgICAgIGRpZ2VzdF9maWxlLnNlZWso
MCkKICAgICAgICAgICAgIGRpZ2VzdF9maWxlLndyaXRlKGFkZGl0aW9uYWxfY29udGVudCkKLSAg
ICAgICAgICAgIGRpZ2VzdF9maWxlLnNlZWsocG9zPTAsIG1vZGU9b3MuU0VFS19TRVQpCisgICAg
ICAgICAgICBkaWdlc3RfZmlsZS5zZWVrKDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50
cmllcywgSFREaWdlc3RQYXJzZXIoZGlnZXN0X2ZpbGUpLmVudHJpZXMoKSkKIAogICAgIGRlZiB0
ZXN0X2F1dGhlbnRpY2F0ZShzZWxmKToKSW5kZXg6IFRvb2xzL0NJU3VwcG9ydC9idWlsZC13ZWJr
aXQtb3JnL2xvYWRDb25maWdfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ0lTdXBw
b3J0L2J1aWxkLXdlYmtpdC1vcmcvbG9hZENvbmZpZ191bml0dGVzdC5weQkocmV2aXNpb24gMjcw
MzIyKQorKysgVG9vbHMvQ0lTdXBwb3J0L2J1aWxkLXdlYmtpdC1vcmcvbG9hZENvbmZpZ191bml0
dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOSBAQCBpbXBvcnQganNvbgogaW1w
b3J0IG9zCiBpbXBvcnQgdW5pdHRlc3QKIAorVVNFX0JVSUxEQk9UX1ZFUlNJT04yID0gb3MuZ2V0
ZW52KCdVU0VfQlVJTERCT1RfVkVSU0lPTjInKSBpcyBub3QgTm9uZQoraWYgVVNFX0JVSUxEQk9U
X1ZFUlNJT04yOgorICAgIGltcG9ydCBsb2FkQ29uZmlnCiAKIGNsYXNzIENvbmZpZ0RvdEpTT05U
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgZ2V0X2NvbmZpZyhzZWxmKToKSW5kZXg6
IFRvb2xzL0NJU3VwcG9ydC9idWlsZC13ZWJraXQtb3JnL3N0ZXBzX3VuaXR0ZXN0LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0NJU3VwcG9ydC9idWlsZC13ZWJraXQtb3JnL3N0ZXBzX3VuaXR0ZXN0
LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL0NJU3VwcG9ydC9idWlsZC13ZWJraXQtb3JnL3N0
ZXBzX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDk4IEBACisjIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQg
b3BlcmF0b3IKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHRlbXBmaWxlCisKK2Zy
b20gYnVpbGRib3QucHJvY2Vzcy5yZXN1bHRzIGltcG9ydCBSZXN1bHRzLCBTVUNDRVNTLCBGQUlM
VVJFLCBXQVJOSU5HUywgU0tJUFBFRCwgRVhDRVBUSU9OLCBSRVRSWQorZnJvbSBidWlsZGJvdC50
ZXN0LmZha2UucmVtb3RlY29tbWFuZCBpbXBvcnQgRXhwZWN0LCBFeHBlY3RSZW1vdGVSZWYsIEV4
cGVjdFNoZWxsCitmcm9tIGJ1aWxkYm90LnRlc3QudXRpbC5taXNjIGltcG9ydCBUZXN0UmVhY3Rv
ck1peGluCitmcm9tIGJ1aWxkYm90LnRlc3QudXRpbC5zdGVwcyBpbXBvcnQgQnVpbGRTdGVwTWl4
aW4KK2Zyb20gYnVpbGRib3QudXRpbCBpbXBvcnQgaWRlbnRpZmllcnMgYXMgYnVpbGRib3RfaWRl
bnRpZmllcnMKK2Zyb20gbW9jayBpbXBvcnQgY2FsbAorZnJvbSB0d2lzdGVkLmludGVybmV0IGlt
cG9ydCBkZWZlciwgZXJyb3IsIHJlYWN0b3IKK2Zyb20gdHdpc3RlZC5weXRob24gaW1wb3J0IGZh
aWx1cmUsIGxvZworZnJvbSB0d2lzdGVkLnRyaWFsIGltcG9ydCB1bml0dGVzdAorCitmcm9tIHN0
ZXBzIGltcG9ydCAqCisKK0NVUlJFTlRfSE9TVE5BTUUgPSBzb2NrZXQuZ2V0aG9zdG5hbWUoKS5z
dHJpcCgpCisKKworY2xhc3MgRXhwZWN0TWFzdGVyU2hlbGxDb21tYW5kKG9iamVjdCk6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmQsIHdvcmtkaXI9Tm9uZSwgZW52PU5vbmUsIHVzZVBU
WT0wKToKKyAgICAgICAgc2VsZi5hcmdzID0gY29tbWFuZAorICAgICAgICBzZWxmLnVzZVBUWSA9
IHVzZVBUWQorICAgICAgICBzZWxmLnJjID0gTm9uZQorICAgICAgICBzZWxmLnBhdGggPSBOb25l
CisgICAgICAgIHNlbGYubG9ncyA9IFtdCisKKyAgICAgICAgaWYgZW52IGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAgc2VsZi5lbnYgPSBlbnYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNl
bGYuZW52ID0gb3MuZW52aXJvbgorICAgICAgICBpZiB3b3JrZGlyOgorICAgICAgICAgICAgc2Vs
Zi5wYXRoID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCB3b3JrZGlyKQorCisgICAgQGNsYXNz
bWV0aG9kCisgICAgZGVmIGxvZyhzZWxmLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgIHJldHVybiAo
J2xvZycsIG5hbWUsIHZhbHVlKQorCisgICAgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOgorICAg
ICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBpbnQpOgorICAgICAgICAgICAgc2VsZi5yYyA9IG90
aGVyCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvdGhlciwgdHVwbGUpIGFuZCBvdGhlclswXSA9
PSAnbG9nJzoKKyAgICAgICAgICAgIHNlbGYubG9ncy5hcHBlbmQoKG90aGVyWzFdLCBvdGhlclsy
XSkpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAg
ICAgIHJldHVybiAnRXhwZWN0TWFzdGVyU2hlbGxDb21tYW5kKHswfSknLmZvcm1hdChyZXByKHNl
bGYuYXJncykpCisKKworY2xhc3MgQnVpbGRTdGVwTWl4aW5BZGRpdGlvbnMoQnVpbGRTdGVwTWl4
aW4sIFRlc3RSZWFjdG9yTWl4aW4pOgorICAgIGRlZiBzZXRVcEJ1aWxkU3RlcChzZWxmKToKKyAg
ICAgICAgc2VsZi5wYXRjaChyZWFjdG9yLCAnc3Bhd25Qcm9jZXNzJywgbGFtYmRhICphcmdzLCAq
Kmt3YXJnczogc2VsZi5fY2hlY2tTcGF3blByb2Nlc3MoKmFyZ3MsICoqa3dhcmdzKSkKKyAgICAg
ICAgc2VsZi5fZXhwZWN0ZWRfbG9jYWxfY29tbWFuZHMgPSBbXQorICAgICAgICBzZWxmLnNldFVw
VGVzdFJlYWN0b3IoKQorCisgICAgICAgIHNlbGYuX3RlbXBfZGlyZWN0b3J5ID0gdGVtcGZpbGUu
bWtkdGVtcCgpCisgICAgICAgIG9zLmNoZGlyKHNlbGYuX3RlbXBfZGlyZWN0b3J5KQorICAgICAg
ICBzZWxmLl9leHBlY3RlZF91cGxvYWRlZF9maWxlcyA9IFtdCisKKyAgICAgICAgc3VwZXIoQnVp
bGRTdGVwTWl4aW5BZGRpdGlvbnMsIHNlbGYpLnNldFVwQnVpbGRTdGVwKCkKKworICAgIGRlZiB0
ZWFyRG93bkJ1aWxkU3RlcChzZWxmKToKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLl90ZW1w
X2RpcmVjdG9yeSkKKyAgICAgICAgc3VwZXIoQnVpbGRTdGVwTWl4aW5BZGRpdGlvbnMsIHNlbGYp
LnRlYXJEb3duQnVpbGRTdGVwKCkKKworICAgIGRlZiBmYWtlQnVpbGRGaW5pc2hlZChzZWxmLCB0
ZXh0LCByZXN1bHRzKToKKyAgICAgICAgc2VsZi5idWlsZC50ZXh0ID0gdGV4dAorICAgICAgICBz
ZWxmLmJ1aWxkLnJlc3VsdHMgPSByZXN1bHRzCisKKyAgICBkZWYgc2V0dXBTdGVwKHNlbGYsIHN0
ZXAsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYucHJldmlvdXNfc3RlcHMgPSBrd2Fy
Z3MuZ2V0KCdwcmV2aW91c19zdGVwcycpIG9yIFtdCisgICAgICAgIGlmIHNlbGYucHJldmlvdXNf
c3RlcHM6CisgICAgICAgICAgICBkZWwga3dhcmdzWydwcmV2aW91c19zdGVwcyddCisKKyAgICAg
ICAgc3VwZXIoQnVpbGRTdGVwTWl4aW5BZGRpdGlvbnMsIHNlbGYpLnNldHVwU3RlcChzdGVwLCAq
YXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuYnVpbGQudGVybWluYXRlID0gRmFsc2UKKyAg
ICAgICAgc2VsZi5idWlsZC5zdG9wcGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5idWlsZC5leGVj
dXRlZFN0ZXBzID0gc2VsZi5leGVjdXRlZFN0ZXBzCisgICAgICAgIHNlbGYuYnVpbGQuYnVpbGRG
aW5pc2hlZCA9IHNlbGYuZmFrZUJ1aWxkRmluaXNoZWQKKyAgICAgICAgc2VsZi5fZXhwZWN0ZWRf
YWRkZWRfdXJscyA9IFtdCisgICAgICAgIHNlbGYuX2V4cGVjdGVkX3NvdXJjZXMgPSBOb25lCisK
KyAgICBAcHJvcGVydHkKKyAgICBkZWYgZXhlY3V0ZWRTdGVwcyhzZWxmKToKKyAgICAgICAgcmV0
dXJuIGZpbHRlcihsYW1iZGEgc3RlcDogbm90IHN0ZXAuc3RvcHBlZCwgc2VsZi5wcmV2aW91c19z
dGVwcykKKworICAgIGRlZiBzZXRQcm9wZXJ0eShzZWxmLCBuYW1lLCB2YWx1ZSwgc291cmNlPSdV
bmtub3duJyk6CisgICAgICAgIHNlbGYucHJvcGVydGllcy5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1
ZSwgc291cmNlKQorCisgICAgZGVmIGdldFByb3BlcnR5KHNlbGYsIG5hbWUpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5wcm9wZXJ0aWVzLmdldFByb3BlcnR5KG5hbWUpCisKKyAgICBkZWYgZXhwZWN0
QWRkZWRVUkxzKHNlbGYsIGFkZGVkX3VybHMpOgorICAgICAgICBzZWxmLl9leHBlY3RlZF9hZGRl
ZF91cmxzID0gYWRkZWRfdXJscworCisgICAgZGVmIGV4cGVjdFVwbG9hZGVkRmlsZShzZWxmLCBw
YXRoKToKKyAgICAgICAgc2VsZi5fZXhwZWN0ZWRfdXBsb2FkZWRfZmlsZXMuYXBwZW5kKHBhdGgp
CisKKyAgICBkZWYgZXhwZWN0TG9jYWxDb21tYW5kcyhzZWxmLCAqZXhwZWN0ZWRfY29tbWFuZHMp
OgorICAgICAgICBzZWxmLl9leHBlY3RlZF9sb2NhbF9jb21tYW5kcy5leHRlbmQoZXhwZWN0ZWRf
Y29tbWFuZHMpCisKKyAgICBkZWYgZXhwZWN0UmVtb3RlQ29tbWFuZHMoc2VsZiwgKmV4cGVjdGVk
X2NvbW1hbmRzKToKKyAgICAgICAgc2VsZi5leHBlY3RDb21tYW5kcygqZXhwZWN0ZWRfY29tbWFu
ZHMpCisKKyAgICBkZWYgZXhwZWN0U291cmNlcyhzZWxmLCBleHBlY3RlZF9zb3VyY2VzKToKKyAg
ICAgICAgc2VsZi5fZXhwZWN0ZWRfc291cmNlcyA9IGV4cGVjdGVkX3NvdXJjZXMKKworICAgIGRl
ZiBfY2hlY2tTcGF3blByb2Nlc3Moc2VsZiwgcHJvY2Vzc1Byb3RvY29sLCBleGVjdXRhYmxlLCBh
cmdzLCBlbnYsIHBhdGgsIHVzZVBUWSwgKiprd2FyZ3MpOgorICAgICAgICBnb3QgPSAoZXhlY3V0
YWJsZSwgYXJncywgZW52LCBwYXRoLCB1c2VQVFkpCisgICAgICAgIGlmIG5vdCBzZWxmLl9leHBl
Y3RlZF9sb2NhbF9jb21tYW5kczoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnZ290IGxvY2FsIGNv
bW1hbmQgezB9IHdoZW4gbm8gZnVydGhlciBjb21tYW5kcyB3ZXJlIGV4cGVjdGVkJy5mb3JtYXQo
Z290KSkKKyAgICAgICAgbG9jYWxfY29tbWFuZCA9IHNlbGYuX2V4cGVjdGVkX2xvY2FsX2NvbW1h
bmRzLnBvcCgwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdv
dCwgKGxvY2FsX2NvbW1hbmQuYXJnc1swXSwgbG9jYWxfY29tbWFuZC5hcmdzLCBsb2NhbF9jb21t
YW5kLmVudiwgbG9jYWxfY29tbWFuZC5wYXRoLCBsb2NhbF9jb21tYW5kLnVzZVBUWSkpCisgICAg
ICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvcjoKKyAgICAgICAgICAgIGxvZy5lcnIoKQorICAgICAg
ICAgICAgcmFpc2UKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIGxvY2FsX2NvbW1hbmQubG9n
czoKKyAgICAgICAgICAgIGlmIG5hbWUgPT0gJ3N0ZG91dCc6CisgICAgICAgICAgICAgICAgcHJv
Y2Vzc1Byb3RvY29sLm91dFJlY2VpdmVkKHZhbHVlKQorICAgICAgICAgICAgZWxpZiBuYW1lID09
ICdzdGRlcnInOgorICAgICAgICAgICAgICAgIHByb2Nlc3NQcm90b2NvbC5lcnJSZWNlaXZlZCh2
YWx1ZSkKKyAgICAgICAgaWYgbG9jYWxfY29tbWFuZC5yYyAhPSAwOgorICAgICAgICAgICAgdmFs
dWUgPSBlcnJvci5Qcm9jZXNzVGVybWluYXRlZChleGl0Q29kZT1sb2NhbF9jb21tYW5kLnJjKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmFsdWUgPSBlcnJvci5Qcm9jZXNzRG9uZShOb25l
KQorICAgICAgICBwcm9jZXNzUHJvdG9jb2wucHJvY2Vzc0VuZGVkKGZhaWx1cmUuRmFpbHVyZSh2
YWx1ZSkpCisKKyAgICBkZWYgX2FkZGVkX2ZpbGVzKHNlbGYpOgorICAgICAgICByZXN1bHRzID0g
W10KKyAgICAgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2Fsayhz
ZWxmLl90ZW1wX2RpcmVjdG9yeSk6CisgICAgICAgICAgICByZWxhdGl2ZV9yb290X3BhdGggPSBv
cy5wYXRoLnJlbHBhdGgoZGlycGF0aCwgc3RhcnQ9c2VsZi5fdGVtcF9kaXJlY3RvcnkpCisgICAg
ICAgICAgICBpZiByZWxhdGl2ZV9yb290X3BhdGggPT0gJy4nOgorICAgICAgICAgICAgICAgIHJl
bGF0aXZlX3Jvb3RfcGF0aCA9ICcnCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxlbmFtZXM6
CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQob3MucGF0aC5qb2luKHJlbGF0aXZlX3Jv
b3RfcGF0aCwgbmFtZSkpCisgICAgICAgIHJldHVybiByZXN1bHRzCisKKyAgICBkZWYgcnVuU3Rl
cChzZWxmKToKKyAgICAgICAgZGVmIGNoZWNrKHJlc3VsdCk6CisgICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNlbGYuX2V4cGVjdGVkX2xvY2FsX2NvbW1hbmRzLCBbXSwgJ2Fzc2VydCBhbGwg
ZXhwZWN0ZWQgbG9jYWwgY29tbWFuZHMgd2VyZSBydW4nKQorICAgICAgICAgICAgc2VsZi5leHBl
Y3RBZGRlZFVSTHMoc2VsZi5fZXhwZWN0ZWRfYWRkZWRfdXJscykKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc2VsZi5fYWRkZWRfZmlsZXMoKSwgc2VsZi5fZXhwZWN0ZWRfdXBsb2FkZWRf
ZmlsZXMpCisgICAgICAgICAgICBpZiBzZWxmLl9leHBlY3RlZF9zb3VyY2VzIGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgICAgICMgQ29udmVydCB0byBkaWN0aW9uYXJpZXMgYmVjYXVzZSBhc3Nl
cnRFcXVhbCgpIG9ubHkga25vd3MgaG93IHRvIGRpZmYgUHl0aG9uIGJ1aWx0LWluIHR5cGVzLgor
ICAgICAgICAgICAgICAgIGFjdHVhbF9zb3VyY2VzID0gc29ydGVkKFtzb3VyY2UuYXNEaWN0KCkg
Zm9yIHNvdXJjZSBpbiBzZWxmLmJ1aWxkLnNvdXJjZXNdLCBrZXk9b3BlcmF0b3IuaXRlbWdldHRl
cignY29kZWJhc2UnKSkKKyAgICAgICAgICAgICAgICBleHBlY3RlZF9zb3VyY2VzID0gc29ydGVk
KFtzb3VyY2UuYXNEaWN0KCkgZm9yIHNvdXJjZSBpbiBzZWxmLl9leHBlY3RlZF9zb3VyY2VzXSwg
a2V5PW9wZXJhdG9yLml0ZW1nZXR0ZXIoJ2NvZGViYXNlJykpCisgICAgICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChhY3R1YWxfc291cmNlcywgZXhwZWN0ZWRfc291cmNlcykKKyAgICAgICAg
ZGVmZXJyZWRfcmVzdWx0ID0gc3VwZXIoQnVpbGRTdGVwTWl4aW5BZGRpdGlvbnMsIHNlbGYpLnJ1
blN0ZXAoKQorICAgICAgICBkZWZlcnJlZF9yZXN1bHQuYWRkQ2FsbGJhY2soY2hlY2spCisgICAg
ICAgIHJldHVybiBkZWZlcnJlZF9yZXN1bHQKKworCitjbGFzcyBUZXN0U3RlcE5hbWVTaG91bGRC
ZVZhbGlkSWRlbnRpZmllcihCdWlsZFN0ZXBNaXhpbkFkZGl0aW9ucywgdW5pdHRlc3QuVGVzdENh
c2UpOgorICAgIGRlZiB0ZXN0X3N0ZXBfbmFtZXNfYXJlX3ZhbGlkKHNlbGYpOgorICAgICAgICBp
bXBvcnQgc3RlcHMKKyAgICAgICAgYnVpbGRfc3RlcF9jbGFzc2VzID0gaW5zcGVjdC5nZXRtZW1i
ZXJzKHN0ZXBzLCBpbnNwZWN0LmlzY2xhc3MpCisgICAgICAgIGZvciBidWlsZF9zdGVwIGluIGJ1
aWxkX3N0ZXBfY2xhc3NlczoKKyAgICAgICAgICAgIGlmICduYW1lJyBpbiB2YXJzKGJ1aWxkX3N0
ZXBbMV0pOgorICAgICAgICAgICAgICAgIG5hbWUgPSBidWlsZF9zdGVwWzFdLm5hbWUKKyAgICAg
ICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCcgJyBpbiBuYW1lLCAnc3RlcCBuYW1lICJ7fSIg
Y29udGFpbiBzcGFjZS4nLmZvcm1hdChuYW1lKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoYnVpbGRib3RfaWRlbnRpZmllcnMuaWRlbnRfcmUubWF0Y2gobmFtZSksICdzdGVwIG5h
bWUgInt9IiBpcyBub3QgYSB2YWxpZCBidWlsZGJvdCBpZGVudGlmaWVyLicuZm9ybWF0KG5hbWUp
KQorCisKK2NsYXNzIFRlc3RSdW5CaW5kaW5nc1Rlc3RzKEJ1aWxkU3RlcE1peGluQWRkaXRpb25z
LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxm
LmxvbmdNZXNzYWdlID0gVHJ1ZQorICAgICAgICByZXR1cm4gc2VsZi5zZXRVcEJ1aWxkU3RlcCgp
CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnRlYXJEb3du
QnVpbGRTdGVwKCkKKworICAgIGRlZiB0ZXN0X3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIHNlbGYu
c2V0dXBTdGVwKFJ1bkJpbmRpbmdzVGVzdHMoKSkKKyAgICAgICAgc2VsZi5leHBlY3RSZW1vdGVD
b21tYW5kcygKKyAgICAgICAgICAgIEV4cGVjdFNoZWxsKHdvcmtkaXI9J3drZGlyJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9MTIwMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxvZ0Vudmlyb249VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9WydweXRo
b24nLCAnLi9Ub29scy9TY3JpcHRzL3J1bi1iaW5kaW5ncy10ZXN0cyddLAorICAgICAgICAgICAg
ICAgICAgICAgICAgKQorICAgICAgICAgICAgKyAwLAorICAgICAgICApCisgICAgICAgIHNlbGYu
ZXhwZWN0T3V0Y29tZShyZXN1bHQ9U1VDQ0VTUywgc3RhdGVfc3RyaW5nPSdiaW5kaW5ncy10ZXN0
cycpCisgICAgICAgIHJldHVybiBzZWxmLnJ1blN0ZXAoKQorCisgICAgZGVmIHRlc3RfZmFpbHVy
ZShzZWxmKToKKyAgICAgICAgc2VsZi5zZXR1cFN0ZXAoUnVuQmluZGluZ3NUZXN0cygpKQorICAg
ICAgICBzZWxmLmV4cGVjdFJlbW90ZUNvbW1hbmRzKAorICAgICAgICAgICAgRXhwZWN0U2hlbGwo
d29ya2Rpcj0nd2tkaXInLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0xMjAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgbG9nRW52aXJvbj1UcnVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgY29tbWFuZD1bJ3B5dGhvbicsICcuL1Rvb2xzL1NjcmlwdHMvcnVuLWJpbmRpbmdz
LXRlc3RzJ10sCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICArIEV4cGVj
dFNoZWxsLmxvZygnc3RkaW8nLCBzdGRvdXQ9J0ZBSUw6IChKUykgSlNUZXN0SW50ZXJmYWNlLmNw
cCcpCisgICAgICAgICAgICArIDIsCisgICAgICAgICkKKyAgICAgICAgc2VsZi5leHBlY3RPdXRj
b21lKHJlc3VsdD1GQUlMVVJFLCBzdGF0ZV9zdHJpbmc9J2JpbmRpbmdzLXRlc3RzIChmYWlsdXJl
KScpCisgICAgICAgIHJldHVybiBzZWxmLnJ1blN0ZXAoKQorCisKK2NsYXNzIFRlc3RLaWxsT2xk
UHJvY2Vzc2VzKEJ1aWxkU3RlcE1peGluQWRkaXRpb25zLCB1bml0dGVzdC5UZXN0Q2FzZSk6Cisg
ICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvbmdNZXNzYWdlID0gVHJ1ZQorICAg
ICAgICByZXR1cm4gc2VsZi5zZXRVcEJ1aWxkU3RlcCgpCisKKyAgICBkZWYgdGVhckRvd24oc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLnRlYXJEb3duQnVpbGRTdGVwKCkKKworICAgIGRlZiB0
ZXN0X3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIHNlbGYuc2V0dXBTdGVwKEtpbGxPbGRQcm9jZXNz
ZXMoKSkKKyAgICAgICAgc2VsZi5leHBlY3RSZW1vdGVDb21tYW5kcygKKyAgICAgICAgICAgIEV4
cGVjdFNoZWxsKHdvcmtkaXI9J3drZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0Vu
dmlyb249VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9WydweXRob24nLCAn
Li9Ub29scy9DSVN1cHBvcnQva2lsbC1vbGQtcHJvY2Vzc2VzJywgJ2J1aWxkYm90J10sCisgICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEyMDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICApCisgICAgICAgICAgICArIDAsCisgICAgICAgICkKKyAgICAgICAgc2VsZi5leHBlY3RPdXRj
b21lKHJlc3VsdD1TVUNDRVNTLCBzdGF0ZV9zdHJpbmc9J2tpbGxlZCBvbGQgcHJvY2Vzc2VzJykK
KyAgICAgICAgcmV0dXJuIHNlbGYucnVuU3RlcCgpCisKKyAgICBkZWYgdGVzdF9mYWlsdXJlKHNl
bGYpOgorICAgICAgICBzZWxmLnNldHVwU3RlcChLaWxsT2xkUHJvY2Vzc2VzKCkpCisgICAgICAg
IHNlbGYuZXhwZWN0UmVtb3RlQ29tbWFuZHMoCisgICAgICAgICAgICBFeHBlY3RTaGVsbCh3b3Jr
ZGlyPSd3a2RpcicsCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dFbnZpcm9uPVRydWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPVsncHl0aG9uJywgJy4vVG9vbHMvQ0lTdXBw
b3J0L2tpbGwtb2xkLXByb2Nlc3NlcycsICdidWlsZGJvdCddLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGltZW91dD0xMjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAg
ICAgKyBFeHBlY3RTaGVsbC5sb2coJ3N0ZGlvJywgc3Rkb3V0PSdVbmV4cGVjdGVkIGVycm9yLicp
CisgICAgICAgICAgICArIDIsCisgICAgICAgICkKKyAgICAgICAgc2VsZi5leHBlY3RPdXRjb21l
KHJlc3VsdD1GQUlMVVJFLCBzdGF0ZV9zdHJpbmc9J2tpbGxlZCBvbGQgcHJvY2Vzc2VzIChmYWls
dXJlKScpCisgICAgICAgIHJldHVybiBzZWxmLnJ1blN0ZXAoKQorCisKK2NsYXNzIFRlc3RDbGVh
bkJ1aWxkSWZTY2hlZHVsZWQoQnVpbGRTdGVwTWl4aW5BZGRpdGlvbnMsIHVuaXR0ZXN0LlRlc3RD
YXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9uZ01lc3NhZ2UgPSBU
cnVlCisgICAgICAgIHJldHVybiBzZWxmLnNldFVwQnVpbGRTdGVwKCkKKworICAgIGRlZiB0ZWFy
RG93bihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGVhckRvd25CdWlsZFN0ZXAoKQorCisg
ICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKKyAgICAgICAgc2VsZi5zZXR1cFN0ZXAoQ2xlYW5C
dWlsZElmU2NoZWR1bGVkKCkpCisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ2Z1bGxQbGF0Zm9y
bScsICdpb3MtMTQnKQorICAgICAgICBzZWxmLnNldFByb3BlcnR5KCdjb25maWd1cmF0aW9uJywg
J3JlbGVhc2UnKQorICAgICAgICBzZWxmLnNldFByb3BlcnR5KCdpc19jbGVhbicsICdUcnVlJykK
KyAgICAgICAgc2VsZi5leHBlY3RSZW1vdGVDb21tYW5kcygKKyAgICAgICAgICAgIEV4cGVjdFNo
ZWxsKHdvcmtkaXI9J3drZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0Vudmlyb249
VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9WydweXRob24nLCAnLi9Ub29s
cy9DSVN1cHBvcnQvY2xlYW4tYnVpbGQnLCAnLS1wbGF0Zm9ybT1pb3MtMTQnLCAnLS1yZWxlYXNl
J10sCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEyMDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICApCisgICAgICAgICAgICArIDAsCisgICAgICAgICkKKyAgICAgICAgc2VsZi5l
eHBlY3RPdXRjb21lKHJlc3VsdD1TVUNDRVNTLCBzdGF0ZV9zdHJpbmc9J2RlbGV0ZWQgV2ViS2l0
QnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuU3RlcCgpCisKKyAgICBk
ZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgorICAgICAgICBzZWxmLnNldHVwU3RlcChDbGVhbkJ1aWxk
SWZTY2hlZHVsZWQoKSkKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgnZnVsbFBsYXRmb3JtJywg
J2lvcy1zaW11bGF0b3ItMTQnKQorICAgICAgICBzZWxmLnNldFByb3BlcnR5KCdjb25maWd1cmF0
aW9uJywgJ2RlYnVnJykKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgnaXNfY2xlYW4nLCAnVHJ1
ZScpCisgICAgICAgIHNlbGYuZXhwZWN0UmVtb3RlQ29tbWFuZHMoCisgICAgICAgICAgICBFeHBl
Y3RTaGVsbCh3b3JrZGlyPSd3a2RpcicsCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dFbnZp
cm9uPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPVsncHl0aG9uJywgJy4v
VG9vbHMvQ0lTdXBwb3J0L2NsZWFuLWJ1aWxkJywgJy0tcGxhdGZvcm09aW9zLXNpbXVsYXRvci0x
NCcsICctLWRlYnVnJ10sCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEyMDAsCisg
ICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICArIEV4cGVjdFNoZWxsLmxvZygn
c3RkaW8nLCBzdGRvdXQ9J1VuZXhwZWN0ZWQgZXJyb3IuJykKKyAgICAgICAgICAgICsgMiwKKyAg
ICAgICAgKQorICAgICAgICBzZWxmLmV4cGVjdE91dGNvbWUocmVzdWx0PUZBSUxVUkUsIHN0YXRl
X3N0cmluZz0nZGVsZXRlZCBXZWJLaXRCdWlsZCBkaXJlY3RvcnkgKGZhaWx1cmUpJykKKyAgICAg
ICAgcmV0dXJuIHNlbGYucnVuU3RlcCgpCisKKyAgICBkZWYgdGVzdF9za2lwKHNlbGYpOgorICAg
ICAgICBzZWxmLnNldHVwU3RlcChDbGVhbkJ1aWxkSWZTY2hlZHVsZWQoKSkKKyAgICAgICAgc2Vs
Zi5zZXRQcm9wZXJ0eSgnZnVsbFBsYXRmb3JtJywgJ2lvcy1zaW11bGF0b3ItMTQnKQorICAgICAg
ICBzZWxmLnNldFByb3BlcnR5KCdjb25maWd1cmF0aW9uJywgJ2RlYnVnJykKKyAgICAgICAgc2Vs
Zi5leHBlY3RPdXRjb21lKHJlc3VsdD1TS0lQUEVELCBzdGF0ZV9zdHJpbmc9J2RlbGV0ZWQgV2Vi
S2l0QnVpbGQgZGlyZWN0b3J5IChza2lwcGVkKScpCisgICAgICAgIHJldHVybiBzZWxmLnJ1blN0
ZXAoKQorCisKK2NsYXNzIFRlc3RJbnN0YWxsR3RrRGVwZW5kZW5jaWVzKEJ1aWxkU3RlcE1peGlu
QWRkaXRpb25zLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAg
ICAgICBzZWxmLmxvbmdNZXNzYWdlID0gVHJ1ZQorICAgICAgICByZXR1cm4gc2VsZi5zZXRVcEJ1
aWxkU3RlcCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
LnRlYXJEb3duQnVpbGRTdGVwKCkKKworICAgIGRlZiB0ZXN0X3N1Y2Nlc3Moc2VsZik6CisgICAg
ICAgIHNlbGYuc2V0dXBTdGVwKEluc3RhbGxHdGtEZXBlbmRlbmNpZXMoKSkKKyAgICAgICAgc2Vs
Zi5zZXRQcm9wZXJ0eSgnY29uZmlndXJhdGlvbicsICdyZWxlYXNlJykKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChJbnN0YWxsR3RrRGVwZW5kZW5jaWVzLmhhbHRPbkZhaWx1cmUsIFRydWUpCisg
ICAgICAgIHNlbGYuZXhwZWN0UmVtb3RlQ29tbWFuZHMoCisgICAgICAgICAgICBFeHBlY3RTaGVs
bCh3b3JrZGlyPSd3a2RpcicsCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dFbnZpcm9uPVRy
dWUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPVsncGVybCcsICcuL1Rvb2xzL1Nj
cmlwdHMvdXBkYXRlLXdlYmtpdGd0ay1saWJzJywgJy0tcmVsZWFzZSddLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGltZW91dD0xMjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAg
ICAgICAgICAgKyAwLAorICAgICAgICApCisgICAgICAgIHNlbGYuZXhwZWN0T3V0Y29tZShyZXN1
bHQ9U1VDQ0VTUywgc3RhdGVfc3RyaW5nPSd1cGRhdGVkIGd0ayBkZXBlbmRlbmNpZXMnKQorICAg
ICAgICByZXR1cm4gc2VsZi5ydW5TdGVwKCkKKworICAgIGRlZiB0ZXN0X2ZhaWx1cmUoc2VsZik6
CisgICAgICAgIHNlbGYuc2V0dXBTdGVwKEluc3RhbGxHdGtEZXBlbmRlbmNpZXMoKSkKKyAgICAg
ICAgc2VsZi5zZXRQcm9wZXJ0eSgnY29uZmlndXJhdGlvbicsICdkZWJ1ZycpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoSW5zdGFsbEd0a0RlcGVuZGVuY2llcy5oYWx0T25GYWlsdXJlLCBUcnVl
KQorICAgICAgICBzZWxmLmV4cGVjdFJlbW90ZUNvbW1hbmRzKAorICAgICAgICAgICAgRXhwZWN0
U2hlbGwod29ya2Rpcj0nd2tkaXInLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9nRW52aXJv
bj1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1bJ3BlcmwnLCAnLi9Ub29s
cy9TY3JpcHRzL3VwZGF0ZS13ZWJraXRndGstbGlicycsICctLWRlYnVnJ10sCisgICAgICAgICAg
ICAgICAgICAgICAgICB0aW1lb3V0PTEyMDAsCisgICAgICAgICAgICAgICAgICAgICAgICApCisg
ICAgICAgICAgICArIEV4cGVjdFNoZWxsLmxvZygnc3RkaW8nLCBzdGRvdXQ9J1VuZXhwZWN0ZWQg
ZXJyb3IuJykKKyAgICAgICAgICAgICsgMiwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmV4cGVj
dE91dGNvbWUocmVzdWx0PUZBSUxVUkUsIHN0YXRlX3N0cmluZz0ndXBkYXRlZCBndGsgZGVwZW5k
ZW5jaWVzIChmYWlsdXJlKScpCisgICAgICAgIHJldHVybiBzZWxmLnJ1blN0ZXAoKQorCisKK2Ns
YXNzIFRlc3RJbnN0YWxsV3BlRGVwZW5kZW5jaWVzKEJ1aWxkU3RlcE1peGluQWRkaXRpb25zLCB1
bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxv
bmdNZXNzYWdlID0gVHJ1ZQorICAgICAgICByZXR1cm4gc2VsZi5zZXRVcEJ1aWxkU3RlcCgpCisK
KyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnRlYXJEb3duQnVp
bGRTdGVwKCkKKworICAgIGRlZiB0ZXN0X3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIHNlbGYuc2V0
dXBTdGVwKEluc3RhbGxXcGVEZXBlbmRlbmNpZXMoKSkKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0
eSgnY29uZmlndXJhdGlvbicsICdyZWxlYXNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChJ
bnN0YWxsV3BlRGVwZW5kZW5jaWVzLmhhbHRPbkZhaWx1cmUsIFRydWUpCisgICAgICAgIHNlbGYu
ZXhwZWN0UmVtb3RlQ29tbWFuZHMoCisgICAgICAgICAgICBFeHBlY3RTaGVsbCh3b3JrZGlyPSd3
a2RpcicsCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dFbnZpcm9uPVRydWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb21tYW5kPVsncGVybCcsICcuL1Rvb2xzL1NjcmlwdHMvdXBkYXRl
LXdlYmtpdHdwZS1saWJzJywgJy0tcmVsZWFzZSddLAorICAgICAgICAgICAgICAgICAgICAgICAg
dGltZW91dD0xMjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKyAw
LAorICAgICAgICApCisgICAgICAgIHNlbGYuZXhwZWN0T3V0Y29tZShyZXN1bHQ9U1VDQ0VTUywg
c3RhdGVfc3RyaW5nPSd1cGRhdGVkIHdwZSBkZXBlbmRlbmNpZXMnKQorICAgICAgICByZXR1cm4g
c2VsZi5ydW5TdGVwKCkKKworICAgIGRlZiB0ZXN0X2ZhaWx1cmUoc2VsZik6CisgICAgICAgIHNl
bGYuc2V0dXBTdGVwKEluc3RhbGxXcGVEZXBlbmRlbmNpZXMoKSkKKyAgICAgICAgc2VsZi5zZXRQ
cm9wZXJ0eSgnY29uZmlndXJhdGlvbicsICdyZWxlYXNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChJbnN0YWxsV3BlRGVwZW5kZW5jaWVzLmhhbHRPbkZhaWx1cmUsIFRydWUpCisgICAgICAg
IHNlbGYuZXhwZWN0UmVtb3RlQ29tbWFuZHMoCisgICAgICAgICAgICBFeHBlY3RTaGVsbCh3b3Jr
ZGlyPSd3a2RpcicsCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dFbnZpcm9uPVRydWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPVsncGVybCcsICcuL1Rvb2xzL1NjcmlwdHMv
dXBkYXRlLXdlYmtpdHdwZS1saWJzJywgJy0tcmVsZWFzZSddLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGltZW91dD0xMjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAg
ICAgKyBFeHBlY3RTaGVsbC5sb2coJ3N0ZGlvJywgc3Rkb3V0PSdVbmV4cGVjdGVkIGVycm9yLicp
CisgICAgICAgICAgICArIDIsCisgICAgICAgICkKKyAgICAgICAgc2VsZi5leHBlY3RPdXRjb21l
KHJlc3VsdD1GQUlMVVJFLCBzdGF0ZV9zdHJpbmc9J3VwZGF0ZWQgd3BlIGRlcGVuZGVuY2llcyAo
ZmFpbHVyZSknKQorICAgICAgICByZXR1cm4gc2VsZi5ydW5TdGVwKCkKKworCitjbGFzcyBUZXN0
Q29tcGlsZVdlYktpdChCdWlsZFN0ZXBNaXhpbkFkZGl0aW9ucywgdW5pdHRlc3QuVGVzdENhc2Up
OgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb25nTWVzc2FnZSA9IFRydWUK
KyAgICAgICAgcmV0dXJuIHNlbGYuc2V0VXBCdWlsZFN0ZXAoKQorCisgICAgZGVmIHRlYXJEb3du
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi50ZWFyRG93bkJ1aWxkU3RlcCgpCisKKyAgICBk
ZWYgdGVzdF9zdWNjZXNzKHNlbGYpOgorICAgICAgICBzZWxmLnNldHVwU3RlcChDb21waWxlV2Vi
S2l0KCkpCisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ2Z1bGxQbGF0Zm9ybScsICdpb3Mtc2lt
dWxhdG9yLTExJykKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgnY29uZmlndXJhdGlvbicsICdy
ZWxlYXNlJykKKyAgICAgICAgc2VsZi5leHBlY3RSZW1vdGVDb21tYW5kcygKKyAgICAgICAgICAg
IEV4cGVjdFNoZWxsKHdvcmtkaXI9J3drZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGxv
Z0Vudmlyb249VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9WydwZXJsJywg
Jy4vVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQnLCAnLS1yZWxlYXNlJ10sCisgICAgICAgICAg
ICAgICAgICAgICAgICB0aW1lb3V0PTEyMDAsCisgICAgICAgICAgICAgICAgICAgICAgICApCisg
ICAgICAgICAgICArIDAsCisgICAgICAgICkKKyAgICAgICAgc2VsZi5leHBlY3RPdXRjb21lKHJl
c3VsdD1TVUNDRVNTLCBzdGF0ZV9zdHJpbmc9J2NvbXBpbGVkJykKKyAgICAgICAgcmV0dXJuIHNl
bGYucnVuU3RlcCgpCisKKyAgICBkZWYgdGVzdF9zdWNjZXNzX2d0ayhzZWxmKToKKyAgICAgICAg
c2VsZi5zZXR1cFN0ZXAoQ29tcGlsZVdlYktpdCgpKQorICAgICAgICBzZWxmLnNldFByb3BlcnR5
KCdwbGF0Zm9ybScsICdndGsnKQorICAgICAgICBzZWxmLnNldFByb3BlcnR5KCdmdWxsUGxhdGZv
cm0nLCAnZ3RrJykKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgnY29uZmlndXJhdGlvbicsICdy
ZWxlYXNlJykKKyAgICAgICAgc2VsZi5leHBlY3RSZW1vdGVDb21tYW5kcygKKyAgICAgICAgICAg
IEV4cGVjdFNoZWxsKHdvcmtkaXI9J3drZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGxv
Z0Vudmlyb249VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9WydwZXJsJywg
Jy4vVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQnLCAnLS1yZWxlYXNlJywgJy0tZ3RrJ10sCisg
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEyMDAsCisgICAgICAgICAgICAgICAgICAg
ICAgICApCisgICAgICAgICAgICArIDAsCisgICAgICAgICkKKyAgICAgICAgc2VsZi5leHBlY3RP
dXRjb21lKHJlc3VsdD1TVUNDRVNTLCBzdGF0ZV9zdHJpbmc9J2NvbXBpbGVkJykKKyAgICAgICAg
cmV0dXJuIHNlbGYucnVuU3RlcCgpCisKKyAgICBkZWYgdGVzdF9zdWNjZXNzX3dwZShzZWxmKToK
KyAgICAgICAgc2VsZi5zZXR1cFN0ZXAoQ29tcGlsZVdlYktpdCgpKQorICAgICAgICBzZWxmLnNl
dFByb3BlcnR5KCdwbGF0Zm9ybScsICd3cGUnKQorICAgICAgICBzZWxmLnNldFByb3BlcnR5KCdm
dWxsUGxhdGZvcm0nLCAnd3BlJykKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgnY29uZmlndXJh
dGlvbicsICdyZWxlYXNlJykKKyAgICAgICAgc2VsZi5leHBlY3RSZW1vdGVDb21tYW5kcygKKyAg
ICAgICAgICAgIEV4cGVjdFNoZWxsKHdvcmtkaXI9J3drZGlyJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxvZ0Vudmlyb249VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9
WydwZXJsJywgJy4vVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQnLCAnLS1yZWxlYXNlJywgJy0t
d3BlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEyMDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICApCisgICAgICAgICAgICArIDAsCisgICAgICAgICkKKyAgICAgICAgc2Vs
Zi5leHBlY3RPdXRjb21lKHJlc3VsdD1TVUNDRVNTLCBzdGF0ZV9zdHJpbmc9J2NvbXBpbGVkJykK
KyAgICAgICAgcmV0dXJuIHNlbGYucnVuU3RlcCgpCisKKyAgICBkZWYgdGVzdF9mYWlsdXJlKHNl
bGYpOgorICAgICAgICBzZWxmLnNldHVwU3RlcChDb21waWxlV2ViS2l0KCkpCisgICAgICAgIHNl
bGYuc2V0UHJvcGVydHkoJ2Z1bGxQbGF0Zm9ybScsICdtYWMtc2llcnJhJykKKyAgICAgICAgc2Vs
Zi5zZXRQcm9wZXJ0eSgnY29uZmlndXJhdGlvbicsICdkZWJ1ZycpCisgICAgICAgIHNlbGYuZXhw
ZWN0UmVtb3RlQ29tbWFuZHMoCisgICAgICAgICAgICBFeHBlY3RTaGVsbCh3b3JrZGlyPSd3a2Rp
cicsCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dFbnZpcm9uPVRydWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb21tYW5kPVsncGVybCcsICcuL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Vi
a2l0JywgJy0tZGVidWcnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9MTIwMCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICsgRXhwZWN0U2hlbGwubG9n
KCdzdGRpbycsIHN0ZG91dD0nMSBlcnJvciBnZW5lcmF0ZWQuJykKKyAgICAgICAgICAgICsgMiwK
KyAgICAgICAgKQorICAgICAgICBzZWxmLmV4cGVjdE91dGNvbWUocmVzdWx0PUZBSUxVUkUsIHN0
YXRlX3N0cmluZz0nY29tcGlsZWQgKGZhaWx1cmUpJykKKyAgICAgICAgcmV0dXJuIHNlbGYucnVu
U3RlcCgpCisKKworY2xhc3MgVGVzdENvbXBpbGVKU0NPbmx5KEJ1aWxkU3RlcE1peGluQWRkaXRp
b25zLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBz
ZWxmLmxvbmdNZXNzYWdlID0gVHJ1ZQorICAgICAgICByZXR1cm4gc2VsZi5zZXRVcEJ1aWxkU3Rl
cCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnRlYXJE
b3duQnVpbGRTdGVwKCkKKworICAgIGRlZiB0ZXN0X3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIHNl
bGYuc2V0dXBTdGVwKENvbXBpbGVKU0NPbmx5KCkpCisgICAgICAgIHNlbGYuc2V0UHJvcGVydHko
J2Z1bGxQbGF0Zm9ybScsICdqc2Mtb25seScpCisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ2Nv
bmZpZ3VyYXRpb24nLCAncmVsZWFzZScpCisgICAgICAgIHNlbGYuZXhwZWN0UmVtb3RlQ29tbWFu
ZHMoCisgICAgICAgICAgICBFeHBlY3RTaGVsbCh3b3JrZGlyPSd3a2RpcicsCisgICAgICAgICAg
ICAgICAgICAgICAgICBsb2dFbnZpcm9uPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBj
b21tYW5kPVsncGVybCcsICcuL1Rvb2xzL1NjcmlwdHMvYnVpbGQtanNjJywgJy0tcmVsZWFzZSdd
LAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0xMjAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgKQorICAgICAgICAgICAgKyAwLAorICAgICAgICApCisgICAgICAgIHNlbGYuZXhw
ZWN0T3V0Y29tZShyZXN1bHQ9U1VDQ0VTUywgc3RhdGVfc3RyaW5nPSdjb21waWxlZCcpCisgICAg
ICAgIHJldHVybiBzZWxmLnJ1blN0ZXAoKQorCisgICAgZGVmIHRlc3RfZmFpbHVyZShzZWxmKToK
KyAgICAgICAgc2VsZi5zZXR1cFN0ZXAoQ29tcGlsZUpTQ09ubHkoKSkKKyAgICAgICAgc2VsZi5z
ZXRQcm9wZXJ0eSgnZnVsbFBsYXRmb3JtJywgJ2pzYy1vbmx5JykKKyAgICAgICAgc2VsZi5zZXRQ
cm9wZXJ0eSgnY29uZmlndXJhdGlvbicsICdkZWJ1ZycpCisgICAgICAgIHNlbGYuZXhwZWN0UmVt
b3RlQ29tbWFuZHMoCisgICAgICAgICAgICBFeHBlY3RTaGVsbCh3b3JrZGlyPSd3a2RpcicsCisg
ICAgICAgICAgICAgICAgICAgICAgICBsb2dFbnZpcm9uPVRydWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb21tYW5kPVsncGVybCcsICcuL1Rvb2xzL1NjcmlwdHMvYnVpbGQtanNjJywgJy0t
ZGVidWcnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICsgRXhwZWN0
U2hlbGwubG9nKCdzdGRpbycsIHN0ZG91dD0nMSBlcnJvciBnZW5lcmF0ZWQuJykKKyAgICAgICAg
ICAgICsgMiwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmV4cGVjdE91dGNvbWUocmVzdWx0PUZB
SUxVUkUsIHN0YXRlX3N0cmluZz0nY29tcGlsZWQgKGZhaWx1cmUpJykKKyAgICAgICAgcmV0dXJu
IHNlbGYucnVuU3RlcCgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415169</attachid>
            <date>2020-12-01 15:36:22 -0800</date>
            <delta_ts>2020-12-02 11:05:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219363-20201201183621.patch</filename>
            <type>text/plain</type>
            <size>24126</size>
            <attacher name="Aakash Jain">aakash_jain</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MDMyMikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQzIEBACisyMDIwLTExLTMwICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNv
bT4KKworICAgICAgICBbYnVpbGQud2Via2l0Lm9yZ10gQWRkIHVuaXQtdGVzdHMgYmFzZWQgb24g
bmV3IGJ1aWxkYm90CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTkzNjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIENJU3VwcG9ydC9idWlsZC13ZWJraXQtb3JnL2xvYWRDb25maWdfdW5pdHRlc3QucHk6
IERyaXZlLWJ5IGZpeCB0byBpbXBvcnQgbG9hZENvbmZpZyB3aGVuIHJ1bm5pbmcgdGhyb3VnaCBy
dW5Vbml0dGVzdHMucHkKKyAgICAgICAgKiBDSVN1cHBvcnQvYnVpbGQtd2Via2l0LW9yZy9odGRp
Z2VzdHBhcnNlci5weTogQWRkaW5nIHB5dGhvbiAzIGNvbXBhdGliYWxpdHkuCisgICAgICAgICog
Q0lTdXBwb3J0L2J1aWxkLXdlYmtpdC1vcmcvaHRkaWdlc3RwYXJzZXJfdW5pdHRlc3QucHk6IEFk
ZGluZyBweXRob24gMyBjb21wYXRpYmFsaXR5LgorICAgICAgICAqIENJU3VwcG9ydC9idWlsZC13
ZWJraXQtb3JnL3N0ZXBzX3VuaXR0ZXN0LnB5OiBBZGRlZCB1bml0LXRlc3RzIGZvciB2YXJpb3Vz
IHN0ZXBzLgorICAgICAgICAoRXhwZWN0TWFzdGVyU2hlbGxDb21tYW5kKToKKyAgICAgICAgKEJ1
aWxkU3RlcE1peGluQWRkaXRpb25zKToKKyAgICAgICAgKFRlc3RTdGVwTmFtZVNob3VsZEJlVmFs
aWRJZGVudGlmaWVyKToKKyAgICAgICAgKFRlc3RTdGVwTmFtZVNob3VsZEJlVmFsaWRJZGVudGlm
aWVyLnRlc3Rfc3RlcF9uYW1lc19hcmVfdmFsaWQpOgorICAgICAgICAoVGVzdFJ1bkJpbmRpbmdz
VGVzdHMpOgorICAgICAgICAoVGVzdFJ1bkJpbmRpbmdzVGVzdHMudGVzdF9zdWNjZXNzKToKKyAg
ICAgICAgKFRlc3RSdW5CaW5kaW5nc1Rlc3RzLnRlc3RfZmFpbHVyZSk6CisgICAgICAgIChUZXN0
S2lsbE9sZFByb2Nlc3Nlcyk6CisgICAgICAgIChUZXN0S2lsbE9sZFByb2Nlc3Nlcy50ZXN0X3N1
Y2Nlc3MpOgorICAgICAgICAoVGVzdEtpbGxPbGRQcm9jZXNzZXMudGVzdF9mYWlsdXJlKToKKyAg
ICAgICAgKFRlc3RDbGVhbkJ1aWxkSWZTY2hlZHVsZWQpOgorICAgICAgICAoVGVzdENsZWFuQnVp
bGRJZlNjaGVkdWxlZC50ZXN0X3N1Y2Nlc3MpOgorICAgICAgICAoVGVzdENsZWFuQnVpbGRJZlNj
aGVkdWxlZC50ZXN0X2ZhaWx1cmUpOgorICAgICAgICAoVGVzdENsZWFuQnVpbGRJZlNjaGVkdWxl
ZC50ZXN0X3NraXApOgorICAgICAgICAoVGVzdEluc3RhbGxHdGtEZXBlbmRlbmNpZXMpOgorICAg
ICAgICAoVGVzdEluc3RhbGxHdGtEZXBlbmRlbmNpZXMudGVzdF9zdWNjZXNzKToKKyAgICAgICAg
KFRlc3RJbnN0YWxsR3RrRGVwZW5kZW5jaWVzLnRlc3RfZmFpbHVyZSk6CisgICAgICAgIChUZXN0
SW5zdGFsbFdwZURlcGVuZGVuY2llcyk6CisgICAgICAgIChUZXN0SW5zdGFsbFdwZURlcGVuZGVu
Y2llcy50ZXN0X3N1Y2Nlc3MpOgorICAgICAgICAoVGVzdEluc3RhbGxXcGVEZXBlbmRlbmNpZXMu
dGVzdF9mYWlsdXJlKToKKyAgICAgICAgKFRlc3RDb21waWxlV2ViS2l0KToKKyAgICAgICAgKFRl
c3RDb21waWxlV2ViS2l0LnRlc3Rfc3VjY2Vzcyk6CisgICAgICAgIChUZXN0Q29tcGlsZVdlYktp
dC50ZXN0X3N1Y2Nlc3NfZ3RrKToKKyAgICAgICAgKFRlc3RDb21waWxlV2ViS2l0LnRlc3Rfc3Vj
Y2Vzc193cGUpOgorICAgICAgICAoVGVzdENvbXBpbGVXZWJLaXQudGVzdF9mYWlsdXJlKToKKyAg
ICAgICAgKFRlc3RDb21waWxlSlNDT25seSk6CisgICAgICAgIChUZXN0Q29tcGlsZUpTQ09ubHku
dGVzdF9zdWNjZXNzKToKKyAgICAgICAgKFRlc3RDb21waWxlSlNDT25seS50ZXN0X2ZhaWx1cmUp
OgorCiAyMDIwLTEyLTAxICBTZXJnZXkgUnViYW5vdiAgPGNoaTE4N0BnbWFpbC5jb20+CiAKICAg
ICAgICAgQWRkIFNlcmdleSBSdWJhbm92IHRvIGNvbnRyaWJ1dG9ycy5qc29uCkluZGV4OiBUb29s
cy9DSVN1cHBvcnQvYnVpbGQtd2Via2l0LW9yZy9odGRpZ2VzdHBhcnNlci5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9DSVN1cHBvcnQvYnVpbGQtd2Via2l0LW9yZy9odGRpZ2VzdHBhcnNlci5weQko
cmV2aXNpb24gMjcwMzIyKQorKysgVG9vbHMvQ0lTdXBwb3J0L2J1aWxkLXdlYmtpdC1vcmcvaHRk
aWdlc3RwYXJzZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgY2xhc3MgSFRE
aWdlc3RQYXJzZXIob2JqZWN0KToKICAgICAgICAgc2VsZi5fZW50cmllcyA9IHNlbGYucGFyc2Vf
ZmlsZShkaWdlc3RfZmlsZSkKIAogICAgIGRlZiBhdXRoZW50aWNhdGUoc2VsZiwgdXNlcm5hbWUs
IHJlYWxtLCBwYXNzd29yZCk6Ci0gICAgICAgIGhhc2hlZF9wYXNzd29yZCA9IGhhc2hsaWIubWQ1
KCc6Jy5qb2luKCh1c2VybmFtZSwgcmVhbG0sIHBhc3N3b3JkKSkpLmhleGRpZ2VzdCgpCisgICAg
ICAgIGhhc2hlZF9wYXNzd29yZCA9IGhhc2hsaWIubWQ1KCc6Jy5qb2luKCh1c2VybmFtZSwgcmVh
bG0sIHBhc3N3b3JkKSkuZW5jb2RlKCd1dGYtOCcpKS5oZXhkaWdlc3QoKQogICAgICAgICByZXR1
cm4gW3VzZXJuYW1lLCByZWFsbSwgaGFzaGVkX3Bhc3N3b3JkXSBpbiBzZWxmLmVudHJpZXMoKQog
CiAgICAgZGVmIGVudHJpZXMoc2VsZik6CkluZGV4OiBUb29scy9DSVN1cHBvcnQvYnVpbGQtd2Vi
a2l0LW9yZy9odGRpZ2VzdHBhcnNlcl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9D
SVN1cHBvcnQvYnVpbGQtd2Via2l0LW9yZy9odGRpZ2VzdHBhcnNlcl91bml0dGVzdC5weQkocmV2
aXNpb24gMjcwMzIyKQorKysgVG9vbHMvQ0lTdXBwb3J0L2J1aWxkLXdlYmtpdC1vcmcvaHRkaWdl
c3RwYXJzZXJfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDkgQEAgY2xh
c3MgSFREaWdlc3RQYXJzZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYQogICAgIGRlZiBhc3NlcnRFbnRy
aWVzRXF1YWwoc2VsZiwgZW50cmllcywgYWRkaXRpb25hbF9jb250ZW50PU5vbmUpOgogICAgICAg
ICBkaWdlc3RfZmlsZSA9IHNlbGYuZmFrZV9odGRpZ2VzdF9maWxlKCkKICAgICAgICAgaWYgYWRk
aXRpb25hbF9jb250ZW50IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgZGlnZXN0X2ZpbGUuc2Vl
ayhwb3M9MCwgbW9kZT1vcy5TRUVLX0VORCkKKyAgICAgICAgICAgIGRpZ2VzdF9maWxlLnNlZWso
MCkKICAgICAgICAgICAgIGRpZ2VzdF9maWxlLndyaXRlKGFkZGl0aW9uYWxfY29udGVudCkKLSAg
ICAgICAgICAgIGRpZ2VzdF9maWxlLnNlZWsocG9zPTAsIG1vZGU9b3MuU0VFS19TRVQpCisgICAg
ICAgICAgICBkaWdlc3RfZmlsZS5zZWVrKDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50
cmllcywgSFREaWdlc3RQYXJzZXIoZGlnZXN0X2ZpbGUpLmVudHJpZXMoKSkKIAogICAgIGRlZiB0
ZXN0X2F1dGhlbnRpY2F0ZShzZWxmKToKSW5kZXg6IFRvb2xzL0NJU3VwcG9ydC9idWlsZC13ZWJr
aXQtb3JnL2xvYWRDb25maWdfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ0lTdXBw
b3J0L2J1aWxkLXdlYmtpdC1vcmcvbG9hZENvbmZpZ191bml0dGVzdC5weQkocmV2aXNpb24gMjcw
MzIyKQorKysgVG9vbHMvQ0lTdXBwb3J0L2J1aWxkLXdlYmtpdC1vcmcvbG9hZENvbmZpZ191bml0
dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOSBAQCBpbXBvcnQganNvbgogaW1w
b3J0IG9zCiBpbXBvcnQgdW5pdHRlc3QKIAorVVNFX0JVSUxEQk9UX1ZFUlNJT04yID0gb3MuZ2V0
ZW52KCdVU0VfQlVJTERCT1RfVkVSU0lPTjInKSBpcyBub3QgTm9uZQoraWYgVVNFX0JVSUxEQk9U
X1ZFUlNJT04yOgorICAgIGltcG9ydCBsb2FkQ29uZmlnCiAKIGNsYXNzIENvbmZpZ0RvdEpTT05U
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgZ2V0X2NvbmZpZyhzZWxmKToKSW5kZXg6
IFRvb2xzL0NJU3VwcG9ydC9idWlsZC13ZWJraXQtb3JnL3N0ZXBzX3VuaXR0ZXN0LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0NJU3VwcG9ydC9idWlsZC13ZWJraXQtb3JnL3N0ZXBzX3VuaXR0ZXN0
LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL0NJU3VwcG9ydC9idWlsZC13ZWJraXQtb3JnL3N0
ZXBzX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDk4IEBACisjIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQg
b3BlcmF0b3IKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHRlbXBmaWxlCisKK2Zy
b20gYnVpbGRib3QucHJvY2Vzcy5yZXN1bHRzIGltcG9ydCBSZXN1bHRzLCBTVUNDRVNTLCBGQUlM
VVJFLCBXQVJOSU5HUywgU0tJUFBFRCwgRVhDRVBUSU9OLCBSRVRSWQorZnJvbSBidWlsZGJvdC50
ZXN0LmZha2UucmVtb3RlY29tbWFuZCBpbXBvcnQgRXhwZWN0LCBFeHBlY3RSZW1vdGVSZWYsIEV4
cGVjdFNoZWxsCitmcm9tIGJ1aWxkYm90LnRlc3QudXRpbC5taXNjIGltcG9ydCBUZXN0UmVhY3Rv
ck1peGluCitmcm9tIGJ1aWxkYm90LnRlc3QudXRpbC5zdGVwcyBpbXBvcnQgQnVpbGRTdGVwTWl4
aW4KK2Zyb20gYnVpbGRib3QudXRpbCBpbXBvcnQgaWRlbnRpZmllcnMgYXMgYnVpbGRib3RfaWRl
bnRpZmllcnMKK2Zyb20gbW9jayBpbXBvcnQgY2FsbAorZnJvbSB0d2lzdGVkLmludGVybmV0IGlt
cG9ydCBkZWZlciwgZXJyb3IsIHJlYWN0b3IKK2Zyb20gdHdpc3RlZC5weXRob24gaW1wb3J0IGZh
aWx1cmUsIGxvZworZnJvbSB0d2lzdGVkLnRyaWFsIGltcG9ydCB1bml0dGVzdAorCitmcm9tIHN0
ZXBzIGltcG9ydCAqCisKK0NVUlJFTlRfSE9TVE5BTUUgPSBzb2NrZXQuZ2V0aG9zdG5hbWUoKS5z
dHJpcCgpCisKKworY2xhc3MgRXhwZWN0TWFzdGVyU2hlbGxDb21tYW5kKG9iamVjdCk6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmQsIHdvcmtkaXI9Tm9uZSwgZW52PU5vbmUsIHVzZVBU
WT0wKToKKyAgICAgICAgc2VsZi5hcmdzID0gY29tbWFuZAorICAgICAgICBzZWxmLnVzZVBUWSA9
IHVzZVBUWQorICAgICAgICBzZWxmLnJjID0gTm9uZQorICAgICAgICBzZWxmLnBhdGggPSBOb25l
CisgICAgICAgIHNlbGYubG9ncyA9IFtdCisKKyAgICAgICAgaWYgZW52IGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAgc2VsZi5lbnYgPSBlbnYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNl
bGYuZW52ID0gb3MuZW52aXJvbgorICAgICAgICBpZiB3b3JrZGlyOgorICAgICAgICAgICAgc2Vs
Zi5wYXRoID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCB3b3JrZGlyKQorCisgICAgQGNsYXNz
bWV0aG9kCisgICAgZGVmIGxvZyhzZWxmLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgIHJldHVybiAo
J2xvZycsIG5hbWUsIHZhbHVlKQorCisgICAgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOgorICAg
ICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBpbnQpOgorICAgICAgICAgICAgc2VsZi5yYyA9IG90
aGVyCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvdGhlciwgdHVwbGUpIGFuZCBvdGhlclswXSA9
PSAnbG9nJzoKKyAgICAgICAgICAgIHNlbGYubG9ncy5hcHBlbmQoKG90aGVyWzFdLCBvdGhlclsy
XSkpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAg
ICAgIHJldHVybiAnRXhwZWN0TWFzdGVyU2hlbGxDb21tYW5kKHswfSknLmZvcm1hdChyZXByKHNl
bGYuYXJncykpCisKKworY2xhc3MgQnVpbGRTdGVwTWl4aW5BZGRpdGlvbnMoQnVpbGRTdGVwTWl4
aW4sIFRlc3RSZWFjdG9yTWl4aW4pOgorICAgIGRlZiBzZXRVcEJ1aWxkU3RlcChzZWxmKToKKyAg
ICAgICAgc2VsZi5wYXRjaChyZWFjdG9yLCAnc3Bhd25Qcm9jZXNzJywgbGFtYmRhICphcmdzLCAq
Kmt3YXJnczogc2VsZi5fY2hlY2tTcGF3blByb2Nlc3MoKmFyZ3MsICoqa3dhcmdzKSkKKyAgICAg
ICAgc2VsZi5fZXhwZWN0ZWRfbG9jYWxfY29tbWFuZHMgPSBbXQorICAgICAgICBzZWxmLnNldFVw
VGVzdFJlYWN0b3IoKQorCisgICAgICAgIHNlbGYuX3RlbXBfZGlyZWN0b3J5ID0gdGVtcGZpbGUu
bWtkdGVtcCgpCisgICAgICAgIG9zLmNoZGlyKHNlbGYuX3RlbXBfZGlyZWN0b3J5KQorICAgICAg
ICBzZWxmLl9leHBlY3RlZF91cGxvYWRlZF9maWxlcyA9IFtdCisKKyAgICAgICAgc3VwZXIoQnVp
bGRTdGVwTWl4aW5BZGRpdGlvbnMsIHNlbGYpLnNldFVwQnVpbGRTdGVwKCkKKworICAgIGRlZiB0
ZWFyRG93bkJ1aWxkU3RlcChzZWxmKToKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLl90ZW1w
X2RpcmVjdG9yeSkKKyAgICAgICAgc3VwZXIoQnVpbGRTdGVwTWl4aW5BZGRpdGlvbnMsIHNlbGYp
LnRlYXJEb3duQnVpbGRTdGVwKCkKKworICAgIGRlZiBmYWtlQnVpbGRGaW5pc2hlZChzZWxmLCB0
ZXh0LCByZXN1bHRzKToKKyAgICAgICAgc2VsZi5idWlsZC50ZXh0ID0gdGV4dAorICAgICAgICBz
ZWxmLmJ1aWxkLnJlc3VsdHMgPSByZXN1bHRzCisKKyAgICBkZWYgc2V0dXBTdGVwKHNlbGYsIHN0
ZXAsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYucHJldmlvdXNfc3RlcHMgPSBrd2Fy
Z3MuZ2V0KCdwcmV2aW91c19zdGVwcycpIG9yIFtdCisgICAgICAgIGlmIHNlbGYucHJldmlvdXNf
c3RlcHM6CisgICAgICAgICAgICBkZWwga3dhcmdzWydwcmV2aW91c19zdGVwcyddCisKKyAgICAg
ICAgc3VwZXIoQnVpbGRTdGVwTWl4aW5BZGRpdGlvbnMsIHNlbGYpLnNldHVwU3RlcChzdGVwLCAq
YXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuYnVpbGQudGVybWluYXRlID0gRmFsc2UKKyAg
ICAgICAgc2VsZi5idWlsZC5zdG9wcGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5idWlsZC5leGVj
dXRlZFN0ZXBzID0gc2VsZi5leGVjdXRlZFN0ZXBzCisgICAgICAgIHNlbGYuYnVpbGQuYnVpbGRG
aW5pc2hlZCA9IHNlbGYuZmFrZUJ1aWxkRmluaXNoZWQKKyAgICAgICAgc2VsZi5fZXhwZWN0ZWRf
YWRkZWRfdXJscyA9IFtdCisgICAgICAgIHNlbGYuX2V4cGVjdGVkX3NvdXJjZXMgPSBOb25lCisK
KyAgICBAcHJvcGVydHkKKyAgICBkZWYgZXhlY3V0ZWRTdGVwcyhzZWxmKToKKyAgICAgICAgcmV0
dXJuIGZpbHRlcihsYW1iZGEgc3RlcDogbm90IHN0ZXAuc3RvcHBlZCwgc2VsZi5wcmV2aW91c19z
dGVwcykKKworICAgIGRlZiBzZXRQcm9wZXJ0eShzZWxmLCBuYW1lLCB2YWx1ZSwgc291cmNlPSdV
bmtub3duJyk6CisgICAgICAgIHNlbGYucHJvcGVydGllcy5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1
ZSwgc291cmNlKQorCisgICAgZGVmIGdldFByb3BlcnR5KHNlbGYsIG5hbWUpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5wcm9wZXJ0aWVzLmdldFByb3BlcnR5KG5hbWUpCisKKyAgICBkZWYgZXhwZWN0
QWRkZWRVUkxzKHNlbGYsIGFkZGVkX3VybHMpOgorICAgICAgICBzZWxmLl9leHBlY3RlZF9hZGRl
ZF91cmxzID0gYWRkZWRfdXJscworCisgICAgZGVmIGV4cGVjdFVwbG9hZGVkRmlsZShzZWxmLCBw
YXRoKToKKyAgICAgICAgc2VsZi5fZXhwZWN0ZWRfdXBsb2FkZWRfZmlsZXMuYXBwZW5kKHBhdGgp
CisKKyAgICBkZWYgZXhwZWN0TG9jYWxDb21tYW5kcyhzZWxmLCAqZXhwZWN0ZWRfY29tbWFuZHMp
OgorICAgICAgICBzZWxmLl9leHBlY3RlZF9sb2NhbF9jb21tYW5kcy5leHRlbmQoZXhwZWN0ZWRf
Y29tbWFuZHMpCisKKyAgICBkZWYgZXhwZWN0UmVtb3RlQ29tbWFuZHMoc2VsZiwgKmV4cGVjdGVk
X2NvbW1hbmRzKToKKyAgICAgICAgc2VsZi5leHBlY3RDb21tYW5kcygqZXhwZWN0ZWRfY29tbWFu
ZHMpCisKKyAgICBkZWYgZXhwZWN0U291cmNlcyhzZWxmLCBleHBlY3RlZF9zb3VyY2VzKToKKyAg
ICAgICAgc2VsZi5fZXhwZWN0ZWRfc291cmNlcyA9IGV4cGVjdGVkX3NvdXJjZXMKKworICAgIGRl
ZiBfY2hlY2tTcGF3blByb2Nlc3Moc2VsZiwgcHJvY2Vzc1Byb3RvY29sLCBleGVjdXRhYmxlLCBh
cmdzLCBlbnYsIHBhdGgsIHVzZVBUWSwgKiprd2FyZ3MpOgorICAgICAgICBnb3QgPSAoZXhlY3V0
YWJsZSwgYXJncywgZW52LCBwYXRoLCB1c2VQVFkpCisgICAgICAgIGlmIG5vdCBzZWxmLl9leHBl
Y3RlZF9sb2NhbF9jb21tYW5kczoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnZ290IGxvY2FsIGNv
bW1hbmQgezB9IHdoZW4gbm8gZnVydGhlciBjb21tYW5kcyB3ZXJlIGV4cGVjdGVkJy5mb3JtYXQo
Z290KSkKKyAgICAgICAgbG9jYWxfY29tbWFuZCA9IHNlbGYuX2V4cGVjdGVkX2xvY2FsX2NvbW1h
bmRzLnBvcCgwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdv
dCwgKGxvY2FsX2NvbW1hbmQuYXJnc1swXSwgbG9jYWxfY29tbWFuZC5hcmdzLCBsb2NhbF9jb21t
YW5kLmVudiwgbG9jYWxfY29tbWFuZC5wYXRoLCBsb2NhbF9jb21tYW5kLnVzZVBUWSkpCisgICAg
ICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvcjoKKyAgICAgICAgICAgIGxvZy5lcnIoKQorICAgICAg
ICAgICAgcmFpc2UKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIGxvY2FsX2NvbW1hbmQubG9n
czoKKyAgICAgICAgICAgIGlmIG5hbWUgPT0gJ3N0ZG91dCc6CisgICAgICAgICAgICAgICAgcHJv
Y2Vzc1Byb3RvY29sLm91dFJlY2VpdmVkKHZhbHVlKQorICAgICAgICAgICAgZWxpZiBuYW1lID09
ICdzdGRlcnInOgorICAgICAgICAgICAgICAgIHByb2Nlc3NQcm90b2NvbC5lcnJSZWNlaXZlZCh2
YWx1ZSkKKyAgICAgICAgaWYgbG9jYWxfY29tbWFuZC5yYyAhPSAwOgorICAgICAgICAgICAgdmFs
dWUgPSBlcnJvci5Qcm9jZXNzVGVybWluYXRlZChleGl0Q29kZT1sb2NhbF9jb21tYW5kLnJjKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmFsdWUgPSBlcnJvci5Qcm9jZXNzRG9uZShOb25l
KQorICAgICAgICBwcm9jZXNzUHJvdG9jb2wucHJvY2Vzc0VuZGVkKGZhaWx1cmUuRmFpbHVyZSh2
YWx1ZSkpCisKKyAgICBkZWYgX2FkZGVkX2ZpbGVzKHNlbGYpOgorICAgICAgICByZXN1bHRzID0g
W10KKyAgICAgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2Fsayhz
ZWxmLl90ZW1wX2RpcmVjdG9yeSk6CisgICAgICAgICAgICByZWxhdGl2ZV9yb290X3BhdGggPSBv
cy5wYXRoLnJlbHBhdGgoZGlycGF0aCwgc3RhcnQ9c2VsZi5fdGVtcF9kaXJlY3RvcnkpCisgICAg
ICAgICAgICBpZiByZWxhdGl2ZV9yb290X3BhdGggPT0gJy4nOgorICAgICAgICAgICAgICAgIHJl
bGF0aXZlX3Jvb3RfcGF0aCA9ICcnCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxlbmFtZXM6
CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQob3MucGF0aC5qb2luKHJlbGF0aXZlX3Jv
b3RfcGF0aCwgbmFtZSkpCisgICAgICAgIHJldHVybiByZXN1bHRzCisKKyAgICBkZWYgcnVuU3Rl
cChzZWxmKToKKyAgICAgICAgZGVmIGNoZWNrKHJlc3VsdCk6CisgICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNlbGYuX2V4cGVjdGVkX2xvY2FsX2NvbW1hbmRzLCBbXSwgJ2Fzc2VydCBhbGwg
ZXhwZWN0ZWQgbG9jYWwgY29tbWFuZHMgd2VyZSBydW4nKQorICAgICAgICAgICAgc2VsZi5leHBl
Y3RBZGRlZFVSTHMoc2VsZi5fZXhwZWN0ZWRfYWRkZWRfdXJscykKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc2VsZi5fYWRkZWRfZmlsZXMoKSwgc2VsZi5fZXhwZWN0ZWRfdXBsb2FkZWRf
ZmlsZXMpCisgICAgICAgICAgICBpZiBzZWxmLl9leHBlY3RlZF9zb3VyY2VzIGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgICAgICMgQ29udmVydCB0byBkaWN0aW9uYXJpZXMgYmVjYXVzZSBhc3Nl
cnRFcXVhbCgpIG9ubHkga25vd3MgaG93IHRvIGRpZmYgUHl0aG9uIGJ1aWx0LWluIHR5cGVzLgor
ICAgICAgICAgICAgICAgIGFjdHVhbF9zb3VyY2VzID0gc29ydGVkKFtzb3VyY2UuYXNEaWN0KCkg
Zm9yIHNvdXJjZSBpbiBzZWxmLmJ1aWxkLnNvdXJjZXNdLCBrZXk9b3BlcmF0b3IuaXRlbWdldHRl
cignY29kZWJhc2UnKSkKKyAgICAgICAgICAgICAgICBleHBlY3RlZF9zb3VyY2VzID0gc29ydGVk
KFtzb3VyY2UuYXNEaWN0KCkgZm9yIHNvdXJjZSBpbiBzZWxmLl9leHBlY3RlZF9zb3VyY2VzXSwg
a2V5PW9wZXJhdG9yLml0ZW1nZXR0ZXIoJ2NvZGViYXNlJykpCisgICAgICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChhY3R1YWxfc291cmNlcywgZXhwZWN0ZWRfc291cmNlcykKKyAgICAgICAg
ZGVmZXJyZWRfcmVzdWx0ID0gc3VwZXIoQnVpbGRTdGVwTWl4aW5BZGRpdGlvbnMsIHNlbGYpLnJ1
blN0ZXAoKQorICAgICAgICBkZWZlcnJlZF9yZXN1bHQuYWRkQ2FsbGJhY2soY2hlY2spCisgICAg
ICAgIHJldHVybiBkZWZlcnJlZF9yZXN1bHQKKworCitjbGFzcyBUZXN0U3RlcE5hbWVTaG91bGRC
ZVZhbGlkSWRlbnRpZmllcihCdWlsZFN0ZXBNaXhpbkFkZGl0aW9ucywgdW5pdHRlc3QuVGVzdENh
c2UpOgorICAgIGRlZiB0ZXN0X3N0ZXBfbmFtZXNfYXJlX3ZhbGlkKHNlbGYpOgorICAgICAgICBp
bXBvcnQgc3RlcHMKKyAgICAgICAgYnVpbGRfc3RlcF9jbGFzc2VzID0gaW5zcGVjdC5nZXRtZW1i
ZXJzKHN0ZXBzLCBpbnNwZWN0LmlzY2xhc3MpCisgICAgICAgIGZvciBidWlsZF9zdGVwIGluIGJ1
aWxkX3N0ZXBfY2xhc3NlczoKKyAgICAgICAgICAgIGlmICduYW1lJyBpbiB2YXJzKGJ1aWxkX3N0
ZXBbMV0pOgorICAgICAgICAgICAgICAgIG5hbWUgPSBidWlsZF9zdGVwWzFdLm5hbWUKKyAgICAg
ICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCcgJyBpbiBuYW1lLCAnc3RlcCBuYW1lICJ7fSIg
Y29udGFpbiBzcGFjZS4nLmZvcm1hdChuYW1lKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoYnVpbGRib3RfaWRlbnRpZmllcnMuaWRlbnRfcmUubWF0Y2gobmFtZSksICdzdGVwIG5h
bWUgInt9IiBpcyBub3QgYSB2YWxpZCBidWlsZGJvdCBpZGVudGlmaWVyLicuZm9ybWF0KG5hbWUp
KQorCisKK2NsYXNzIFRlc3RSdW5CaW5kaW5nc1Rlc3RzKEJ1aWxkU3RlcE1peGluQWRkaXRpb25z
LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxm
LmxvbmdNZXNzYWdlID0gVHJ1ZQorICAgICAgICByZXR1cm4gc2VsZi5zZXRVcEJ1aWxkU3RlcCgp
CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnRlYXJEb3du
QnVpbGRTdGVwKCkKKworICAgIGRlZiB0ZXN0X3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIHNlbGYu
c2V0dXBTdGVwKFJ1bkJpbmRpbmdzVGVzdHMoKSkKKyAgICAgICAgc2VsZi5leHBlY3RSZW1vdGVD
b21tYW5kcygKKyAgICAgICAgICAgIEV4cGVjdFNoZWxsKAorICAgICAgICAgICAgICAgIHdvcmtk
aXI9J3drZGlyJywKKyAgICAgICAgICAgICAgICB0aW1lb3V0PTEyMDAsCisgICAgICAgICAgICAg
ICAgbG9nRW52aXJvbj1UcnVlLAorICAgICAgICAgICAgICAgIGNvbW1hbmQ9WydweXRob24nLCAn
Li9Ub29scy9TY3JpcHRzL3J1bi1iaW5kaW5ncy10ZXN0cyddLAorICAgICAgICAgICAgKSArIDAs
CisgICAgICAgICkKKyAgICAgICAgc2VsZi5leHBlY3RPdXRjb21lKHJlc3VsdD1TVUNDRVNTLCBz
dGF0ZV9zdHJpbmc9J2JpbmRpbmdzLXRlc3RzJykKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuU3Rl
cCgpCisKKyAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgorICAgICAgICBzZWxmLnNldHVwU3Rl
cChSdW5CaW5kaW5nc1Rlc3RzKCkpCisgICAgICAgIHNlbGYuZXhwZWN0UmVtb3RlQ29tbWFuZHMo
CisgICAgICAgICAgICBFeHBlY3RTaGVsbCgKKyAgICAgICAgICAgICAgICB3b3JrZGlyPSd3a2Rp
cicsCisgICAgICAgICAgICAgICAgdGltZW91dD0xMjAwLAorICAgICAgICAgICAgICAgIGxvZ0Vu
dmlyb249VHJ1ZSwKKyAgICAgICAgICAgICAgICBjb21tYW5kPVsncHl0aG9uJywgJy4vVG9vbHMv
U2NyaXB0cy9ydW4tYmluZGluZ3MtdGVzdHMnXSwKKyAgICAgICAgICAgICkgKyAyCisgICAgICAg
ICAgICArIEV4cGVjdFNoZWxsLmxvZygnc3RkaW8nLCBzdGRvdXQ9J0ZBSUw6IChKUykgSlNUZXN0
SW50ZXJmYWNlLmNwcCcpLAorICAgICAgICApCisgICAgICAgIHNlbGYuZXhwZWN0T3V0Y29tZShy
ZXN1bHQ9RkFJTFVSRSwgc3RhdGVfc3RyaW5nPSdiaW5kaW5ncy10ZXN0cyAoZmFpbHVyZSknKQor
ICAgICAgICByZXR1cm4gc2VsZi5ydW5TdGVwKCkKKworCitjbGFzcyBUZXN0S2lsbE9sZFByb2Nl
c3NlcyhCdWlsZFN0ZXBNaXhpbkFkZGl0aW9ucywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRl
ZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb25nTWVzc2FnZSA9IFRydWUKKyAgICAgICAg
cmV0dXJuIHNlbGYuc2V0VXBCdWlsZFN0ZXAoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi50ZWFyRG93bkJ1aWxkU3RlcCgpCisKKyAgICBkZWYgdGVzdF9z
dWNjZXNzKHNlbGYpOgorICAgICAgICBzZWxmLnNldHVwU3RlcChLaWxsT2xkUHJvY2Vzc2VzKCkp
CisgICAgICAgIHNlbGYuZXhwZWN0UmVtb3RlQ29tbWFuZHMoCisgICAgICAgICAgICBFeHBlY3RT
aGVsbCgKKyAgICAgICAgICAgICAgICB3b3JrZGlyPSd3a2RpcicsCisgICAgICAgICAgICAgICAg
dGltZW91dD0xMjAwLAorICAgICAgICAgICAgICAgIGxvZ0Vudmlyb249VHJ1ZSwKKyAgICAgICAg
ICAgICAgICBjb21tYW5kPVsncHl0aG9uJywgJy4vVG9vbHMvQ0lTdXBwb3J0L2tpbGwtb2xkLXBy
b2Nlc3NlcycsICdidWlsZGJvdCddLAorICAgICAgICAgICAgKSArIDAsCisgICAgICAgICkKKyAg
ICAgICAgc2VsZi5leHBlY3RPdXRjb21lKHJlc3VsdD1TVUNDRVNTLCBzdGF0ZV9zdHJpbmc9J2tp
bGxlZCBvbGQgcHJvY2Vzc2VzJykKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuU3RlcCgpCisKKyAg
ICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgorICAgICAgICBzZWxmLnNldHVwU3RlcChLaWxsT2xk
UHJvY2Vzc2VzKCkpCisgICAgICAgIHNlbGYuZXhwZWN0UmVtb3RlQ29tbWFuZHMoCisgICAgICAg
ICAgICBFeHBlY3RTaGVsbCgKKyAgICAgICAgICAgICAgICB3b3JrZGlyPSd3a2RpcicsCisgICAg
ICAgICAgICAgICAgdGltZW91dD0xMjAwLAorICAgICAgICAgICAgICAgIGxvZ0Vudmlyb249VHJ1
ZSwKKyAgICAgICAgICAgICAgICBjb21tYW5kPVsncHl0aG9uJywgJy4vVG9vbHMvQ0lTdXBwb3J0
L2tpbGwtb2xkLXByb2Nlc3NlcycsICdidWlsZGJvdCddLAorICAgICAgICAgICAgKSArIDIKKyAg
ICAgICAgICAgICsgRXhwZWN0U2hlbGwubG9nKCdzdGRpbycsIHN0ZG91dD0nVW5leHBlY3RlZCBl
cnJvci4nKSwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmV4cGVjdE91dGNvbWUocmVzdWx0PUZB
SUxVUkUsIHN0YXRlX3N0cmluZz0na2lsbGVkIG9sZCBwcm9jZXNzZXMgKGZhaWx1cmUpJykKKyAg
ICAgICAgcmV0dXJuIHNlbGYucnVuU3RlcCgpCisKKworY2xhc3MgVGVzdENsZWFuQnVpbGRJZlNj
aGVkdWxlZChCdWlsZFN0ZXBNaXhpbkFkZGl0aW9ucywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAg
IGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb25nTWVzc2FnZSA9IFRydWUKKyAgICAg
ICAgcmV0dXJuIHNlbGYuc2V0VXBCdWlsZFN0ZXAoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi50ZWFyRG93bkJ1aWxkU3RlcCgpCisKKyAgICBkZWYgdGVz
dF9zdWNjZXNzKHNlbGYpOgorICAgICAgICBzZWxmLnNldHVwU3RlcChDbGVhbkJ1aWxkSWZTY2hl
ZHVsZWQoKSkKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgnZnVsbFBsYXRmb3JtJywgJ2lvcy0x
NCcpCisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ2NvbmZpZ3VyYXRpb24nLCAncmVsZWFzZScp
CisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ2lzX2NsZWFuJywgJ1RydWUnKQorICAgICAgICBz
ZWxmLmV4cGVjdFJlbW90ZUNvbW1hbmRzKAorICAgICAgICAgICAgRXhwZWN0U2hlbGwoCisgICAg
ICAgICAgICAgICAgd29ya2Rpcj0nd2tkaXInLAorICAgICAgICAgICAgICAgIHRpbWVvdXQ9MTIw
MCwKKyAgICAgICAgICAgICAgICBsb2dFbnZpcm9uPVRydWUsCisgICAgICAgICAgICAgICAgY29t
bWFuZD1bJ3B5dGhvbicsICcuL1Rvb2xzL0NJU3VwcG9ydC9jbGVhbi1idWlsZCcsICctLXBsYXRm
b3JtPWlvcy0xNCcsICctLXJlbGVhc2UnXSwKKyAgICAgICAgICAgICkgKyAwLAorICAgICAgICAp
CisgICAgICAgIHNlbGYuZXhwZWN0T3V0Y29tZShyZXN1bHQ9U1VDQ0VTUywgc3RhdGVfc3RyaW5n
PSdkZWxldGVkIFdlYktpdEJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgIHJldHVybiBzZWxmLnJ1
blN0ZXAoKQorCisgICAgZGVmIHRlc3RfZmFpbHVyZShzZWxmKToKKyAgICAgICAgc2VsZi5zZXR1
cFN0ZXAoQ2xlYW5CdWlsZElmU2NoZWR1bGVkKCkpCisgICAgICAgIHNlbGYuc2V0UHJvcGVydHko
J2Z1bGxQbGF0Zm9ybScsICdpb3Mtc2ltdWxhdG9yLTE0JykKKyAgICAgICAgc2VsZi5zZXRQcm9w
ZXJ0eSgnY29uZmlndXJhdGlvbicsICdkZWJ1ZycpCisgICAgICAgIHNlbGYuc2V0UHJvcGVydHko
J2lzX2NsZWFuJywgJ1RydWUnKQorICAgICAgICBzZWxmLmV4cGVjdFJlbW90ZUNvbW1hbmRzKAor
ICAgICAgICAgICAgRXhwZWN0U2hlbGwoCisgICAgICAgICAgICAgICAgd29ya2Rpcj0nd2tkaXIn
LAorICAgICAgICAgICAgICAgIHRpbWVvdXQ9MTIwMCwKKyAgICAgICAgICAgICAgICBsb2dFbnZp
cm9uPVRydWUsCisgICAgICAgICAgICAgICAgY29tbWFuZD1bJ3B5dGhvbicsICcuL1Rvb2xzL0NJ
U3VwcG9ydC9jbGVhbi1idWlsZCcsICctLXBsYXRmb3JtPWlvcy1zaW11bGF0b3ItMTQnLCAnLS1k
ZWJ1ZyddLAorICAgICAgICAgICAgKSArIDIKKyAgICAgICAgICAgICsgRXhwZWN0U2hlbGwubG9n
KCdzdGRpbycsIHN0ZG91dD0nVW5leHBlY3RlZCBlcnJvci4nKSwKKyAgICAgICAgKQorICAgICAg
ICBzZWxmLmV4cGVjdE91dGNvbWUocmVzdWx0PUZBSUxVUkUsIHN0YXRlX3N0cmluZz0nZGVsZXRl
ZCBXZWJLaXRCdWlsZCBkaXJlY3RvcnkgKGZhaWx1cmUpJykKKyAgICAgICAgcmV0dXJuIHNlbGYu
cnVuU3RlcCgpCisKKyAgICBkZWYgdGVzdF9za2lwKHNlbGYpOgorICAgICAgICBzZWxmLnNldHVw
U3RlcChDbGVhbkJ1aWxkSWZTY2hlZHVsZWQoKSkKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgn
ZnVsbFBsYXRmb3JtJywgJ2lvcy1zaW11bGF0b3ItMTQnKQorICAgICAgICBzZWxmLnNldFByb3Bl
cnR5KCdjb25maWd1cmF0aW9uJywgJ2RlYnVnJykKKyAgICAgICAgc2VsZi5leHBlY3RPdXRjb21l
KHJlc3VsdD1TS0lQUEVELCBzdGF0ZV9zdHJpbmc9J2RlbGV0ZWQgV2ViS2l0QnVpbGQgZGlyZWN0
b3J5IChza2lwcGVkKScpCisgICAgICAgIHJldHVybiBzZWxmLnJ1blN0ZXAoKQorCisKK2NsYXNz
IFRlc3RJbnN0YWxsR3RrRGVwZW5kZW5jaWVzKEJ1aWxkU3RlcE1peGluQWRkaXRpb25zLCB1bml0
dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvbmdN
ZXNzYWdlID0gVHJ1ZQorICAgICAgICByZXR1cm4gc2VsZi5zZXRVcEJ1aWxkU3RlcCgpCisKKyAg
ICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnRlYXJEb3duQnVpbGRT
dGVwKCkKKworICAgIGRlZiB0ZXN0X3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIHNlbGYuc2V0dXBT
dGVwKEluc3RhbGxHdGtEZXBlbmRlbmNpZXMoKSkKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgn
Y29uZmlndXJhdGlvbicsICdyZWxlYXNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChJbnN0
YWxsR3RrRGVwZW5kZW5jaWVzLmhhbHRPbkZhaWx1cmUsIFRydWUpCisgICAgICAgIHNlbGYuZXhw
ZWN0UmVtb3RlQ29tbWFuZHMoCisgICAgICAgICAgICBFeHBlY3RTaGVsbCh3b3JrZGlyPSd3a2Rp
cicsCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEyMDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICBsb2dFbnZpcm9uPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb21t
YW5kPVsncGVybCcsICcuL1Rvb2xzL1NjcmlwdHMvdXBkYXRlLXdlYmtpdGd0ay1saWJzJywgJy0t
cmVsZWFzZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKyAwLAor
ICAgICAgICApCisgICAgICAgIHNlbGYuZXhwZWN0T3V0Y29tZShyZXN1bHQ9U1VDQ0VTUywgc3Rh
dGVfc3RyaW5nPSd1cGRhdGVkIGd0ayBkZXBlbmRlbmNpZXMnKQorICAgICAgICByZXR1cm4gc2Vs
Zi5ydW5TdGVwKCkKKworICAgIGRlZiB0ZXN0X2ZhaWx1cmUoc2VsZik6CisgICAgICAgIHNlbGYu
c2V0dXBTdGVwKEluc3RhbGxHdGtEZXBlbmRlbmNpZXMoKSkKKyAgICAgICAgc2VsZi5zZXRQcm9w
ZXJ0eSgnY29uZmlndXJhdGlvbicsICdkZWJ1ZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
SW5zdGFsbEd0a0RlcGVuZGVuY2llcy5oYWx0T25GYWlsdXJlLCBUcnVlKQorICAgICAgICBzZWxm
LmV4cGVjdFJlbW90ZUNvbW1hbmRzKAorICAgICAgICAgICAgRXhwZWN0U2hlbGwoCisgICAgICAg
ICAgICAgICAgd29ya2Rpcj0nd2tkaXInLAorICAgICAgICAgICAgICAgIHRpbWVvdXQ9MTIwMCwK
KyAgICAgICAgICAgICAgICBsb2dFbnZpcm9uPVRydWUsCisgICAgICAgICAgICAgICAgY29tbWFu
ZD1bJ3BlcmwnLCAnLi9Ub29scy9TY3JpcHRzL3VwZGF0ZS13ZWJraXRndGstbGlicycsICctLWRl
YnVnJ10sCisgICAgICAgICAgICApICsgMgorICAgICAgICAgICAgKyBFeHBlY3RTaGVsbC5sb2co
J3N0ZGlvJywgc3Rkb3V0PSdVbmV4cGVjdGVkIGVycm9yLicpLAorICAgICAgICApCisgICAgICAg
IHNlbGYuZXhwZWN0T3V0Y29tZShyZXN1bHQ9RkFJTFVSRSwgc3RhdGVfc3RyaW5nPSd1cGRhdGVk
IGd0ayBkZXBlbmRlbmNpZXMgKGZhaWx1cmUpJykKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuU3Rl
cCgpCisKKworY2xhc3MgVGVzdEluc3RhbGxXcGVEZXBlbmRlbmNpZXMoQnVpbGRTdGVwTWl4aW5B
ZGRpdGlvbnMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAg
ICAgIHNlbGYubG9uZ01lc3NhZ2UgPSBUcnVlCisgICAgICAgIHJldHVybiBzZWxmLnNldFVwQnVp
bGRTdGVwKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
dGVhckRvd25CdWlsZFN0ZXAoKQorCisgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKKyAgICAg
ICAgc2VsZi5zZXR1cFN0ZXAoSW5zdGFsbFdwZURlcGVuZGVuY2llcygpKQorICAgICAgICBzZWxm
LnNldFByb3BlcnR5KCdjb25maWd1cmF0aW9uJywgJ3JlbGVhc2UnKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKEluc3RhbGxXcGVEZXBlbmRlbmNpZXMuaGFsdE9uRmFpbHVyZSwgVHJ1ZSkKKyAg
ICAgICAgc2VsZi5leHBlY3RSZW1vdGVDb21tYW5kcygKKyAgICAgICAgICAgIEV4cGVjdFNoZWxs
KAorICAgICAgICAgICAgICAgIHdvcmtkaXI9J3drZGlyJywKKyAgICAgICAgICAgICAgICB0aW1l
b3V0PTEyMDAsCisgICAgICAgICAgICAgICAgbG9nRW52aXJvbj1UcnVlLAorICAgICAgICAgICAg
ICAgIGNvbW1hbmQ9WydwZXJsJywgJy4vVG9vbHMvU2NyaXB0cy91cGRhdGUtd2Via2l0d3BlLWxp
YnMnLCAnLS1yZWxlYXNlJ10sCisgICAgICAgICAgICApICsgMCwKKyAgICAgICAgKQorICAgICAg
ICBzZWxmLmV4cGVjdE91dGNvbWUocmVzdWx0PVNVQ0NFU1MsIHN0YXRlX3N0cmluZz0ndXBkYXRl
ZCB3cGUgZGVwZW5kZW5jaWVzJykKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuU3RlcCgpCisKKyAg
ICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgorICAgICAgICBzZWxmLnNldHVwU3RlcChJbnN0YWxs
V3BlRGVwZW5kZW5jaWVzKCkpCisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ2NvbmZpZ3VyYXRp
b24nLCAncmVsZWFzZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSW5zdGFsbFdwZURlcGVu
ZGVuY2llcy5oYWx0T25GYWlsdXJlLCBUcnVlKQorICAgICAgICBzZWxmLmV4cGVjdFJlbW90ZUNv
bW1hbmRzKAorICAgICAgICAgICAgRXhwZWN0U2hlbGwoCisgICAgICAgICAgICAgICAgd29ya2Rp
cj0nd2tkaXInLAorICAgICAgICAgICAgICAgIHRpbWVvdXQ9MTIwMCwKKyAgICAgICAgICAgICAg
ICBsb2dFbnZpcm9uPVRydWUsCisgICAgICAgICAgICAgICAgY29tbWFuZD1bJ3BlcmwnLCAnLi9U
b29scy9TY3JpcHRzL3VwZGF0ZS13ZWJraXR3cGUtbGlicycsICctLXJlbGVhc2UnXSwKKyAgICAg
ICAgICAgICkgKyAyCisgICAgICAgICAgICArIEV4cGVjdFNoZWxsLmxvZygnc3RkaW8nLCBzdGRv
dXQ9J1VuZXhwZWN0ZWQgZXJyb3IuJyksCisgICAgICAgICkKKyAgICAgICAgc2VsZi5leHBlY3RP
dXRjb21lKHJlc3VsdD1GQUlMVVJFLCBzdGF0ZV9zdHJpbmc9J3VwZGF0ZWQgd3BlIGRlcGVuZGVu
Y2llcyAoZmFpbHVyZSknKQorICAgICAgICByZXR1cm4gc2VsZi5ydW5TdGVwKCkKKworCitjbGFz
cyBUZXN0Q29tcGlsZVdlYktpdChCdWlsZFN0ZXBNaXhpbkFkZGl0aW9ucywgdW5pdHRlc3QuVGVz
dENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb25nTWVzc2FnZSA9
IFRydWUKKyAgICAgICAgcmV0dXJuIHNlbGYuc2V0VXBCdWlsZFN0ZXAoKQorCisgICAgZGVmIHRl
YXJEb3duKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi50ZWFyRG93bkJ1aWxkU3RlcCgpCisK
KyAgICBkZWYgdGVzdF9zdWNjZXNzKHNlbGYpOgorICAgICAgICBzZWxmLnNldHVwU3RlcChDb21w
aWxlV2ViS2l0KCkpCisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ2Z1bGxQbGF0Zm9ybScsICdp
b3Mtc2ltdWxhdG9yLTExJykKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgnY29uZmlndXJhdGlv
bicsICdyZWxlYXNlJykKKyAgICAgICAgc2VsZi5leHBlY3RSZW1vdGVDb21tYW5kcygKKyAgICAg
ICAgICAgIEV4cGVjdFNoZWxsKAorICAgICAgICAgICAgICAgIHdvcmtkaXI9J3drZGlyJywKKyAg
ICAgICAgICAgICAgICB0aW1lb3V0PTEyMDAsCisgICAgICAgICAgICAgICAgbG9nRW52aXJvbj1U
cnVlLAorICAgICAgICAgICAgICAgIGNvbW1hbmQ9WydwZXJsJywgJy4vVG9vbHMvU2NyaXB0cy9i
dWlsZC13ZWJraXQnLCAnLS1yZWxlYXNlJ10sCisgICAgICAgICAgICApICsgMCwKKyAgICAgICAg
KQorICAgICAgICBzZWxmLmV4cGVjdE91dGNvbWUocmVzdWx0PVNVQ0NFU1MsIHN0YXRlX3N0cmlu
Zz0nY29tcGlsZWQnKQorICAgICAgICByZXR1cm4gc2VsZi5ydW5TdGVwKCkKKworICAgIGRlZiB0
ZXN0X3N1Y2Nlc3NfZ3RrKHNlbGYpOgorICAgICAgICBzZWxmLnNldHVwU3RlcChDb21waWxlV2Vi
S2l0KCkpCisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ3BsYXRmb3JtJywgJ2d0aycpCisgICAg
ICAgIHNlbGYuc2V0UHJvcGVydHkoJ2Z1bGxQbGF0Zm9ybScsICdndGsnKQorICAgICAgICBzZWxm
LnNldFByb3BlcnR5KCdjb25maWd1cmF0aW9uJywgJ3JlbGVhc2UnKQorICAgICAgICBzZWxmLmV4
cGVjdFJlbW90ZUNvbW1hbmRzKAorICAgICAgICAgICAgRXhwZWN0U2hlbGwoCisgICAgICAgICAg
ICAgICAgd29ya2Rpcj0nd2tkaXInLAorICAgICAgICAgICAgICAgIHRpbWVvdXQ9MTIwMCwKKyAg
ICAgICAgICAgICAgICBsb2dFbnZpcm9uPVRydWUsCisgICAgICAgICAgICAgICAgY29tbWFuZD1b
J3BlcmwnLCAnLi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdCcsICctLXJlbGVhc2UnLCAnLS1n
dGsnXSwKKyAgICAgICAgICAgICkgKyAwLAorICAgICAgICApCisgICAgICAgIHNlbGYuZXhwZWN0
T3V0Y29tZShyZXN1bHQ9U1VDQ0VTUywgc3RhdGVfc3RyaW5nPSdjb21waWxlZCcpCisgICAgICAg
IHJldHVybiBzZWxmLnJ1blN0ZXAoKQorCisgICAgZGVmIHRlc3Rfc3VjY2Vzc193cGUoc2VsZik6
CisgICAgICAgIHNlbGYuc2V0dXBTdGVwKENvbXBpbGVXZWJLaXQoKSkKKyAgICAgICAgc2VsZi5z
ZXRQcm9wZXJ0eSgncGxhdGZvcm0nLCAnd3BlJykKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgn
ZnVsbFBsYXRmb3JtJywgJ3dwZScpCisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ2NvbmZpZ3Vy
YXRpb24nLCAncmVsZWFzZScpCisgICAgICAgIHNlbGYuZXhwZWN0UmVtb3RlQ29tbWFuZHMoCisg
ICAgICAgICAgICBFeHBlY3RTaGVsbCgKKyAgICAgICAgICAgICAgICB3b3JrZGlyPSd3a2Rpcics
CisgICAgICAgICAgICAgICAgdGltZW91dD0xMjAwLAorICAgICAgICAgICAgICAgIGxvZ0Vudmly
b249VHJ1ZSwKKyAgICAgICAgICAgICAgICBjb21tYW5kPVsncGVybCcsICcuL1Rvb2xzL1Njcmlw
dHMvYnVpbGQtd2Via2l0JywgJy0tcmVsZWFzZScsICctLXdwZSddLAorICAgICAgICAgICAgKSAr
IDAsCisgICAgICAgICkKKyAgICAgICAgc2VsZi5leHBlY3RPdXRjb21lKHJlc3VsdD1TVUNDRVNT
LCBzdGF0ZV9zdHJpbmc9J2NvbXBpbGVkJykKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuU3RlcCgp
CisKKyAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgorICAgICAgICBzZWxmLnNldHVwU3RlcChD
b21waWxlV2ViS2l0KCkpCisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ2Z1bGxQbGF0Zm9ybScs
ICdtYWMtc2llcnJhJykKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgnY29uZmlndXJhdGlvbics
ICdkZWJ1ZycpCisgICAgICAgIHNlbGYuZXhwZWN0UmVtb3RlQ29tbWFuZHMoCisgICAgICAgICAg
ICBFeHBlY3RTaGVsbCgKKyAgICAgICAgICAgICAgICB3b3JrZGlyPSd3a2RpcicsCisgICAgICAg
ICAgICAgICAgdGltZW91dD0xMjAwLAorICAgICAgICAgICAgICAgIGxvZ0Vudmlyb249VHJ1ZSwK
KyAgICAgICAgICAgICAgICBjb21tYW5kPVsncGVybCcsICcuL1Rvb2xzL1NjcmlwdHMvYnVpbGQt
d2Via2l0JywgJy0tZGVidWcnXSwKKyAgICAgICAgICAgICkgKyAyCisgICAgICAgICAgICArIEV4
cGVjdFNoZWxsLmxvZygnc3RkaW8nLCBzdGRvdXQ9JzEgZXJyb3IgZ2VuZXJhdGVkLicpLAorICAg
ICAgICApCisgICAgICAgIHNlbGYuZXhwZWN0T3V0Y29tZShyZXN1bHQ9RkFJTFVSRSwgc3RhdGVf
c3RyaW5nPSdjb21waWxlZCAoZmFpbHVyZSknKQorICAgICAgICByZXR1cm4gc2VsZi5ydW5TdGVw
KCkKKworCitjbGFzcyBUZXN0Q29tcGlsZUpTQ09ubHkoQnVpbGRTdGVwTWl4aW5BZGRpdGlvbnMs
IHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYu
bG9uZ01lc3NhZ2UgPSBUcnVlCisgICAgICAgIHJldHVybiBzZWxmLnNldFVwQnVpbGRTdGVwKCkK
KworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGVhckRvd25C
dWlsZFN0ZXAoKQorCisgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKKyAgICAgICAgc2VsZi5z
ZXR1cFN0ZXAoQ29tcGlsZUpTQ09ubHkoKSkKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgnZnVs
bFBsYXRmb3JtJywgJ2pzYy1vbmx5JykKKyAgICAgICAgc2VsZi5zZXRQcm9wZXJ0eSgnY29uZmln
dXJhdGlvbicsICdyZWxlYXNlJykKKyAgICAgICAgc2VsZi5leHBlY3RSZW1vdGVDb21tYW5kcygK
KyAgICAgICAgICAgIEV4cGVjdFNoZWxsKAorICAgICAgICAgICAgICAgIHdvcmtkaXI9J3drZGly
JywKKyAgICAgICAgICAgICAgICB0aW1lb3V0PTEyMDAsCisgICAgICAgICAgICAgICAgbG9nRW52
aXJvbj1UcnVlLAorICAgICAgICAgICAgICAgIGNvbW1hbmQ9WydwZXJsJywgJy4vVG9vbHMvU2Ny
aXB0cy9idWlsZC1qc2MnLCAnLS1yZWxlYXNlJ10sCisgICAgICAgICAgICApICsgMCwKKyAgICAg
ICAgKQorICAgICAgICBzZWxmLmV4cGVjdE91dGNvbWUocmVzdWx0PVNVQ0NFU1MsIHN0YXRlX3N0
cmluZz0nY29tcGlsZWQnKQorICAgICAgICByZXR1cm4gc2VsZi5ydW5TdGVwKCkKKworICAgIGRl
ZiB0ZXN0X2ZhaWx1cmUoc2VsZik6CisgICAgICAgIHNlbGYuc2V0dXBTdGVwKENvbXBpbGVKU0NP
bmx5KCkpCisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ2Z1bGxQbGF0Zm9ybScsICdqc2Mtb25s
eScpCisgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ2NvbmZpZ3VyYXRpb24nLCAnZGVidWcnKQor
ICAgICAgICBzZWxmLmV4cGVjdFJlbW90ZUNvbW1hbmRzKAorICAgICAgICAgICAgRXhwZWN0U2hl
bGwoCisgICAgICAgICAgICAgICAgd29ya2Rpcj0nd2tkaXInLAorICAgICAgICAgICAgICAgIGxv
Z0Vudmlyb249VHJ1ZSwKKyAgICAgICAgICAgICAgICBjb21tYW5kPVsncGVybCcsICcuL1Rvb2xz
L1NjcmlwdHMvYnVpbGQtanNjJywgJy0tZGVidWcnXSwKKyAgICAgICAgICAgICkgKyAyCisgICAg
ICAgICAgICArIEV4cGVjdFNoZWxsLmxvZygnc3RkaW8nLCBzdGRvdXQ9JzEgZXJyb3IgZ2VuZXJh
dGVkLicpLAorICAgICAgICApCisgICAgICAgIHNlbGYuZXhwZWN0T3V0Y29tZShyZXN1bHQ9RkFJ
TFVSRSwgc3RhdGVfc3RyaW5nPSdjb21waWxlZCAoZmFpbHVyZSknKQorICAgICAgICByZXR1cm4g
c2VsZi5ydW5TdGVwKCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>