<?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>64048</bug_id>
          
          <creation_ts>2011-07-06 19:12:58 -0700</creation_ts>
          <short_desc>Move a bunch of classes out of layout_tests.layout_package and into layout_tests.controllers</short_desc>
          <delta_ts>2011-07-06 19:16:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>dpranke</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>433161</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-06 19:12:58 -0700</bug_when>
    <thetext>Move a bunch of classes out of layout_tests.layout_package and into layout_tests.controllers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433162</commentid>
    <comment_count>1</comment_count>
      <attachid>99913</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-06 19:13:49 -0700</bug_when>
    <thetext>Created attachment 99913
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433164</commentid>
    <comment_count>2</comment_count>
      <attachid>99913</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-07-06 19:14:54 -0700</bug_when>
    <thetext>Comment on attachment 99913
Patch

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

OK.

&gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:155
&gt; -            options.time_out_ms = str(2 * manager.Manager.DEFAULT_TEST_TIMEOUT_MS)
&gt; +            options.time_out_ms = str(2 * Manager.DEFAULT_TEST_TIMEOUT_MS)

I don&apos;t think this has any business on Manager.  Eventually we&apos;ll move it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433165</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-06 19:16:16 -0700</bug_when>
    <thetext>Committed r90523: &lt;http://trac.webkit.org/changeset/90523&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99913</attachid>
            <date>2011-07-06 19:13:49 -0700</date>
            <delta_ts>2011-07-06 19:14:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64048-20110706191348.patch</filename>
            <type>text/plain</type>
            <size>295871</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDkwNTIyKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMzEgQEAKKzIwMTEtMDctMDYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBNb3ZlIGEgYnVuY2ggb2YgY2xhc3NlcyBvdXQgb2YgbGF5b3V0X3Rlc3RzLmxheW91
dF9wYWNrYWdlIGFuZCBpbnRvIGxheW91dF90ZXN0cy5jb250cm9sbGVycworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQwNDgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2NvbnRyb2xsZXJzOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weTogQ29w
aWVkIGZyb20gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvbWFuYWdlci5weS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9j
b250cm9sbGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5OiBDb3BpZWQgZnJvbSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3VuaXR0ZXN0LnB5
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21h
bmFnZXJfd29ya2VyX2Jyb2tlci5weTogQ29waWVkIGZyb20gVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5Lgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFn
ZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weTogQ29waWVkIGZyb20gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2Vy
X3VuaXR0ZXN0LnB5LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2Nv
bnRyb2xsZXJzL21lc3NhZ2VfYnJva2VyLnB5OiBDb3BpZWQgZnJvbSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlci5weS4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tZXNzYWdl
X2Jyb2tlcl91bml0dGVzdC5weTogQ29waWVkIGZyb20gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5pdHRlc3QucHkuCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvc2luZ2xl
X3Rlc3RfcnVubmVyLnB5OiBDb3BpZWQgZnJvbSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9zaW5nbGVfdGVzdF9ydW5uZXIucHkuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvd29ya2VyLnB5OiBDb3Bp
ZWQgZnJvbSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS93b3JrZXIucHkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvbWFuYWdlci5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3VuaXR0ZXN0LnB5OiBSZW1v
dmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9r
ZXJfdW5pdHRlc3QucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXIucHk6IFJlbW92ZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2Fn
ZV9icm9rZXJfdW5pdHRlc3QucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRpbmdfdW5pdHRlc3QucHk6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvc2luZ2xl
X3Rlc3RfcnVubmVyLnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtlci5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5OgorCiAyMDEx
LTA3LTA2ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQXR0ZW1w
dCB0byBmaXggdW5pdHRlc3Qgb24gTGVvcGFyZC4gIExldCdzIGVudW1lcmF0ZSB0aGUga2V5cyBp
biBzb3J0ZWQKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQkocmV2aXNpb24gOTA1MjApCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC00MCw5ICs0MCw5IEBAIGltcG9ydCBzeXMKIAogZnJvbSB3ZWJraXRweS5jb21t
b24ubmV0IGltcG9ydCByZXN1bHRzanNvbnBhcnNlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMgaW1wb3J0IGxheW91dF9wYWNrYWdlCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250
cm9sbGVycy5tYW5hZ2VyIGltcG9ydCBNYW5hZ2VyLCBXb3JrZXJFeGNlcHRpb24KIGZyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBqc29uX3Jlc3VsdHNfZ2Vu
ZXJhdG9yCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQg
cHJpbnRpbmcKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9y
dCBtYW5hZ2VyCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgdXNlcgogZnJv
bSB3ZWJraXRweS50aGlyZHBhcnR5IGltcG9ydCBzaW1wbGVqc29uCkBAIC01Miw4ICs1Miw2IEBA
IGltcG9ydCBwb3J0CiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKIAotV29y
a2VyRXhjZXB0aW9uID0gbWFuYWdlci5Xb3JrZXJFeGNlcHRpb24KLQogZGVmIHJ1bihwb3J0LCBv
cHRpb25zLCBhcmdzLCByZWd1bGFyX291dHB1dD1zeXMuc3RkZXJyLAogICAgICAgICBidWlsZGJv
dF9vdXRwdXQ9c3lzLnN0ZG91dCk6CiAgICAgIiIiUnVuIHRoZSB0ZXN0cy4KQEAgLTkzLDcgKzkx
LDcgQEAgZGVmIHJ1bihwb3J0LCBvcHRpb25zLCBhcmdzLCByZWd1bGFyX291dAogICAgICMgaW4g
YSB0cnkvZmluYWxseSB0byBlbnN1cmUgdGhhdCB3ZSBjbGVhbiB1cCB0aGUgbG9nZ2luZyBjb25m
aWd1cmF0aW9uLgogICAgIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMgPSAtMQogICAgIHRyeToKLSAg
ICAgICAgbWFuYWdlciA9IGxheW91dF9wYWNrYWdlLm1hbmFnZXIuTWFuYWdlcihwb3J0LCBvcHRp
b25zLCBwcmludGVyKQorICAgICAgICBtYW5hZ2VyID0gTWFuYWdlcihwb3J0LCBvcHRpb25zLCBw
cmludGVyKQogICAgICAgICBtYW5hZ2VyLl9wcmludF9jb25maWcoKQogCiAgICAgICAgIHByaW50
ZXIucHJpbnRfdXBkYXRlKCJDb2xsZWN0aW5nIHRlc3RzIC4uLiIpCkBAIC0xNTQsOSArMTUyLDkg
QEAgZGVmIF9zZXRfdXBfZGVyaXZlZF9vcHRpb25zKHBvcnRfb2JqLCBvcAogCiAgICAgaWYgbm90
IG9wdGlvbnMudGltZV9vdXRfbXM6CiAgICAgICAgIGlmIG9wdGlvbnMuY29uZmlndXJhdGlvbiA9
PSAiRGVidWciOgotICAgICAgICAgICAgb3B0aW9ucy50aW1lX291dF9tcyA9IHN0cigyICogbWFu
YWdlci5NYW5hZ2VyLkRFRkFVTFRfVEVTVF9USU1FT1VUX01TKQorICAgICAgICAgICAgb3B0aW9u
cy50aW1lX291dF9tcyA9IHN0cigyICogTWFuYWdlci5ERUZBVUxUX1RFU1RfVElNRU9VVF9NUykK
ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG9wdGlvbnMudGltZV9vdXRfbXMgPSBzdHIobWFu
YWdlci5NYW5hZ2VyLkRFRkFVTFRfVEVTVF9USU1FT1VUX01TKQorICAgICAgICAgICAgb3B0aW9u
cy50aW1lX291dF9tcyA9IHN0cihNYW5hZ2VyLkRFRkFVTFRfVEVTVF9USU1FT1VUX01TKQogCiAg
ICAgb3B0aW9ucy5zbG93X3RpbWVfb3V0X21zID0gc3RyKDUgKiBpbnQob3B0aW9ucy50aW1lX291
dF9tcykpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRy
b2xsZXJzL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weQko
cmV2aXNpb24gOTA1MjApCShmcm9tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL21hbmFnZXIucHk6OTA1MjApCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTUyMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIw
MTAgR2Fib3IgUmFwY3NhbnlpIChyZ2Fib3JAaW5mLnUtc3plZ2VkLmh1KSwgVW5pdmVyc2l0eSBv
ZiBTemVnZWQKKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRp
c3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIgorVGhlIE1hbmFnZXIgcnVucyBhIHNl
cmllcyBvZiB0ZXN0cyAoVGVzdFR5cGUgaW50ZXJmYWNlKSBhZ2FpbnN0IGEgc2V0CitvZiB0ZXN0
IGZpbGVzLiAgSWYgYSB0ZXN0IGZpbGUgZmFpbHMgYSBUZXN0VHlwZSwgaXQgcmV0dXJucyBhIGxp
c3Qgb2YgVGVzdEZhaWx1cmUKK29iamVjdHMgdG8gdGhlIE1hbmFnZXIuIFRoZSBNYW5hZ2VyIHRo
ZW4gYWdncmVnYXRlcyB0aGUgVGVzdEZhaWx1cmVzIHRvCitjcmVhdGUgYSBmaW5hbCByZXBvcnQu
CisiIiIKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAorCitpbXBvcnQg
Y29weQoraW1wb3J0IGVycm5vCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG1hdGgKK2ltcG9ydCBR
dWV1ZQoraW1wb3J0IHJhbmRvbQoraW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQor
Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dCBpbXBvcnQgc2NtCisKK2Zyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBqc29uX2xheW91dF9yZXN1bHRz
X2dlbmVyYXRvcgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1w
b3J0IGpzb25fcmVzdWx0c19nZW5lcmF0b3IKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxh
eW91dF9wYWNrYWdlIGltcG9ydCBtYW5hZ2VyX3dvcmtlcl9icm9rZXIKK2Zyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBwcmludGluZworZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCitm
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWls
dXJlcworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRl
c3RfcmVzdWx0cworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1w
b3J0IHRlc3RfcmVzdWx0c191cGxvYWRlcgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5
b3V0X3BhY2thZ2UgaW1wb3J0IHdvcmtlcgorCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5s
YXlvdXRfcGFja2FnZS5yZXN1bHRfc3VtbWFyeSBpbXBvcnQgUmVzdWx0U3VtbWFyeQorZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UudGVzdF9pbnB1dCBpbXBvcnQgVGVz
dElucHV0CisKK2Zyb20gd2Via2l0cHkudGhpcmRwYXJ0eSBpbXBvcnQgc2ltcGxlanNvbgorZnJv
bSB3ZWJraXRweS50b29sIGltcG9ydCBncmFtbWFyCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dl
cihfX25hbWVfXykKKworIyBCdWlsZGVyIGJhc2UgVVJMIHdoZXJlIHdlIGhhdmUgdGhlIGFyY2hp
dmVkIHRlc3QgcmVzdWx0cy4KK0JVSUxERVJfQkFTRV9VUkwgPSAiaHR0cDovL2J1aWxkLmNocm9t
aXVtLm9yZy9idWlsZGJvdC9sYXlvdXRfdGVzdF9yZXN1bHRzLyIKKworVGVzdEV4cGVjdGF0aW9u
cyA9IHRlc3RfZXhwZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvbnMKKworCisjIEZJWE1FOiBUaGlz
IHNob3VsZCBiZSBvbiB0aGUgTWFuYWdlciBjbGFzcyAoc2luY2UgdGhhdCdzIHRoZSBvbmx5IGNh
bGxlcikKKyMgb3Igc3BsaXQgb2ZmIGZyb20gTWFuYWdlciBvbnRvIGFub3RoZXIgaGVscGVyIGNs
YXNzLCBidXQgc2hvdWxkIG5vdCBiZSBhIGZyZWUgZnVuY3Rpb24uCisjIE1vc3QgbGlrZWx5IHRo
aXMgc2hvdWxkIGJlIG1hZGUgaW50byBpdHMgb3duIGNsYXNzLCBhbmQgdGhpcyBzdXBlci1sb25n
IGZ1bmN0aW9uCisjIHNwbGl0IGludG8gbWFueSBoZWxwZXIgZnVuY3Rpb25zLgorZGVmIHN1bW1h
cml6ZV9yZXN1bHRzKHBvcnRfb2JqLCBleHBlY3RhdGlvbnMsIHJlc3VsdF9zdW1tYXJ5LCByZXRy
eV9zdW1tYXJ5LCB0ZXN0X3RpbWluZ3MsIG9ubHlfdW5leHBlY3RlZCwgaW50ZXJydXB0ZWQpOgor
ICAgICIiIlN1bW1hcml6ZSBmYWlsaW5nIHJlc3VsdHMgYXMgYSBkaWN0LgorCisgICAgRklYTUU6
IHNwbGl0IHRoaXMgZGF0YSBzdHJ1Y3R1cmUgaW50byBhIHNlcGFyYXRlIGNsYXNzPworCisgICAg
QXJnczoKKyAgICAgICAgcG9ydF9vYmo6IGludGVyZmFjZSB0byBwb3J0LXNwZWNpZmljIGhvb2tz
CisgICAgICAgIGV4cGVjdGF0aW9uczogdGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4cGVjdGF0aW9u
cyBvYmplY3QKKyAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IGZyb20gaW5p
dGlhbCB0ZXN0IHJ1bnMKKyAgICAgICAgcmV0cnlfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgZnJv
bSBmaW5hbCB0ZXN0IHJ1biBvZiByZXRyaWVkIHRlc3RzCisgICAgICAgIHRlc3RfdGltaW5nczog
YSBsaXN0IG9mIFRlc3RSZXN1bHQgb2JqZWN0cyB3aGljaCBjb250YWluIHRlc3QgcnVudGltZXMg
aW4gc2Vjb25kcworICAgICAgICBvbmx5X3VuZXhwZWN0ZWQ6IHdoZXRoZXIgdG8gcmV0dXJuIGEg
c3VtbWFyeSBvbmx5IGZvciB0aGUgdW5leHBlY3RlZCByZXN1bHRzCisgICAgUmV0dXJuczoKKyAg
ICAgICAgQSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgYSBzdW1tYXJ5IG9mIHRoZSB1bmV4cGVjdGVk
IHJlc3VsdHMgZnJvbSB0aGUKKyAgICAgICAgcnVuLCB3aXRoIHRoZSBmb2xsb3dpbmcgZmllbGRz
OgorICAgICAgICAndmVyc2lvbic6IGEgdmVyc2lvbiBpbmRpY2F0b3IKKyAgICAgICAgJ2ZpeGFi
bGUnOiAjIG9mIGZpeGFibGUgdGVzdHMgKE5PVyAtIFBBU1MpCisgICAgICAgICdza2lwcGVkJzog
IyBvZiBza2lwcGVkIHRlc3RzIChOT1cgJiBTS0lQUEVEKQorICAgICAgICAnbnVtX3JlZ3Jlc3Np
b25zJzogIyBvZiBub24tZmxha3kgZmFpbHVyZXMKKyAgICAgICAgJ251bV9mbGFreSc6ICMgb2Yg
Zmxha3kgZmFpbHVyZXMKKyAgICAgICAgJ251bV9wYXNzZXMnOiAjIG9mIHVuZXhwZWN0ZWQgcGFz
c2VzCisgICAgICAgICd0ZXN0cyc6IGEgZGljdCBvZiB0ZXN0cyAtPiB7J2V4cGVjdGVkJzogJy4u
LicsICdhY3R1YWwnOiAnLi4uJ30KKyAgICAiIiIKKyAgICByZXN1bHRzID0ge30KKyAgICByZXN1
bHRzWyd2ZXJzaW9uJ10gPSAzCisKKyAgICB0YmUgPSByZXN1bHRfc3VtbWFyeS50ZXN0c19ieV9l
eHBlY3RhdGlvbgorICAgIHRidCA9IHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5X3RpbWVsaW5lCisg
ICAgcmVzdWx0c1snZml4YWJsZSddID0gbGVuKHRidFt0ZXN0X2V4cGVjdGF0aW9ucy5OT1ddIC0g
dGJlW3Rlc3RfZXhwZWN0YXRpb25zLlBBU1NdKQorICAgIHJlc3VsdHNbJ3NraXBwZWQnXSA9IGxl
bih0YnRbdGVzdF9leHBlY3RhdGlvbnMuTk9XXSAmIHRiZVt0ZXN0X2V4cGVjdGF0aW9ucy5TS0lQ
XSkKKworICAgIG51bV9wYXNzZXMgPSAwCisgICAgbnVtX2ZsYWt5ID0gMAorICAgIG51bV9yZWdy
ZXNzaW9ucyA9IDAKKyAgICBrZXl3b3JkcyA9IHt9CisgICAgZm9yIGV4cGVjYXRpb25fc3RyaW5n
LCBleHBlY3RhdGlvbl9lbnVtIGluIFRlc3RFeHBlY3RhdGlvbnMuRVhQRUNUQVRJT05TLml0ZXJp
dGVtcygpOgorICAgICAgICBrZXl3b3Jkc1tleHBlY3RhdGlvbl9lbnVtXSA9IGV4cGVjYXRpb25f
c3RyaW5nLnVwcGVyKCkKKworICAgIGZvciBtb2RpZmllcl9zdHJpbmcsIG1vZGlmaWVyX2VudW0g
aW4gVGVzdEV4cGVjdGF0aW9ucy5NT0RJRklFUlMuaXRlcml0ZW1zKCk6CisgICAgICAgIGtleXdv
cmRzW21vZGlmaWVyX2VudW1dID0gbW9kaWZpZXJfc3RyaW5nLnVwcGVyKCkKKworICAgIHRlc3Rz
ID0ge30KKyAgICBvcmlnaW5hbF9yZXN1bHRzID0gcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZF9y
ZXN1bHRzIGlmIG9ubHlfdW5leHBlY3RlZCBlbHNlIHJlc3VsdF9zdW1tYXJ5LnJlc3VsdHMKKwor
ICAgIGZvciB0ZXN0X25hbWUsIHJlc3VsdCBpbiBvcmlnaW5hbF9yZXN1bHRzLml0ZXJpdGVtcygp
OgorICAgICAgICAjIE5vdGUgdGhhdCBpZiBhIHRlc3QgY3Jhc2hlZCBpbiB0aGUgb3JpZ2luYWwg
cnVuLCB3ZSBpZ25vcmUKKyAgICAgICAgIyB3aGV0aGVyIG9yIG5vdCBpdCBjcmFzaGVkIHdoZW4g
d2UgcmV0cmllZCBpdCAoaWYgd2UgcmV0cmllZCBpdCksCisgICAgICAgICMgYW5kIGFsd2F5cyBj
b25zaWRlciB0aGUgcmVzdWx0IG5vdCBmbGFreS4KKyAgICAgICAgZXhwZWN0ZWQgPSBleHBlY3Rh
dGlvbnMuZ2V0X2V4cGVjdGF0aW9uc19zdHJpbmcodGVzdF9uYW1lKQorICAgICAgICByZXN1bHRf
dHlwZSA9IHJlc3VsdC50eXBlCisgICAgICAgIGFjdHVhbCA9IFtrZXl3b3Jkc1tyZXN1bHRfdHlw
ZV1dCisKKyAgICAgICAgaWYgcmVzdWx0X3R5cGUgPT0gdGVzdF9leHBlY3RhdGlvbnMuU0tJUDoK
KyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgdGVzdF9kaWN0ID0ge30KKyAgICAgICAg
aWYgcmVzdWx0Lmhhc19zdGRlcnI6CisgICAgICAgICAgICB0ZXN0X2RpY3RbJ2hhc19zdGRlcnIn
XSA9IFRydWUKKworICAgICAgICBpZiByZXN1bHRfdHlwZSA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5Q
QVNTOgorICAgICAgICAgICAgbnVtX3Bhc3NlcyArPSAxCisgICAgICAgICAgICAjIEZJWE1FOiBp
bmNsdWRlIHBhc3NpbmcgdGVzdHMgdGhhdCBoYXZlIHN0ZGVyciBvdXRwdXQuCisgICAgICAgICAg
ICBpZiBleHBlY3RlZCA9PSAnUEFTUyc6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAg
ICAgZWxpZiByZXN1bHRfdHlwZSA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSDoKKyAgICAgICAg
ICAgIG51bV9yZWdyZXNzaW9ucyArPSAxCisgICAgICAgIGVsaWYgdGVzdF9uYW1lIGluIHJlc3Vs
dF9zdW1tYXJ5LnVuZXhwZWN0ZWRfcmVzdWx0czoKKyAgICAgICAgICAgIGlmIHRlc3RfbmFtZSBu
b3QgaW4gcmV0cnlfc3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHM6CisgICAgICAgICAgICAgICAg
YWN0dWFsLmV4dGVuZChleHBlY3RhdGlvbnMuZ2V0X2V4cGVjdGF0aW9uc19zdHJpbmcodGVzdF9u
YW1lKS5zcGxpdCgiICIpKQorICAgICAgICAgICAgICAgIG51bV9mbGFreSArPSAxCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHJ5X3Jlc3VsdF90eXBlID0gcmV0cnlfc3Vt
bWFyeS51bmV4cGVjdGVkX3Jlc3VsdHNbdGVzdF9uYW1lXS50eXBlCisgICAgICAgICAgICAgICAg
aWYgcmVzdWx0X3R5cGUgIT0gcmV0cnlfcmVzdWx0X3R5cGU6CisgICAgICAgICAgICAgICAgICAg
IGFjdHVhbC5hcHBlbmQoa2V5d29yZHNbcmV0cnlfcmVzdWx0X3R5cGVdKQorICAgICAgICAgICAg
ICAgICAgICBudW1fZmxha3kgKz0gMQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgICAgIG51bV9yZWdyZXNzaW9ucyArPSAxCisKKyAgICAgICAgdGVzdF9kaWN0WydleHBl
Y3RlZCddID0gZXhwZWN0ZWQKKyAgICAgICAgdGVzdF9kaWN0WydhY3R1YWwnXSA9ICIgIi5qb2lu
KGFjdHVhbCkKKyAgICAgICAgIyBGSVhNRTogU2V0IHRoaXMgY29ycmVjdGx5IG9uY2UgaHR0cHM6
Ly93ZWJraXQub3JnL2IvMzc3MzkgaXMgZml4ZWQKKyAgICAgICAgIyBhbmQgb25seSBzZXQgaXQg
aWYgdGhlcmUgYWN0dWFsbHkgaXMgc3RkZXJyIGRhdGEuCisKKyAgICAgICAgZmFpbHVyZV90eXBl
cyA9IFt0eXBlKGYpIGZvciBmIGluIHJlc3VsdC5mYWlsdXJlc10KKyAgICAgICAgIyBGSVhNRTog
Z2V0IHJpZCBvZiBhbGwgdGhpcyBpc18qIHZhbHVlcyBvbmNlIHRoZXJlIGlzIGEgMToxIG1hcCBi
ZXR3ZWVuCisgICAgICAgICMgVGVzdEZhaWx1cmUgdHlwZSBhbmQgdGVzdF9leHBlY3RhdGlvbnMu
RVhQRUNUQVRJT04uCisgICAgICAgIGlmIHRlc3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdBdWRp
byBpbiBmYWlsdXJlX3R5cGVzOgorICAgICAgICAgICAgdGVzdF9kaWN0Wydpc19taXNzaW5nX2F1
ZGlvJ10gPSBUcnVlCisKKyAgICAgICAgaWYgdGVzdF9mYWlsdXJlcy5GYWlsdXJlUmVmdGVzdE1p
c21hdGNoIGluIGZhaWx1cmVfdHlwZXM6CisgICAgICAgICAgICB0ZXN0X2RpY3RbJ2lzX3JlZnRl
c3QnXSA9IFRydWUKKworICAgICAgICBmb3IgZiBpbiByZXN1bHQuZmFpbHVyZXM6CisgICAgICAg
ICAgICBpZiAnaXNfcmVmdGVzdCcgaW4gcmVzdWx0LmZhaWx1cmVzOgorICAgICAgICAgICAgICAg
IHRlc3RfZGljdFsnaXNfcmVmdGVzdCddID0gVHJ1ZQorCisgICAgICAgIGlmIHRlc3RfZmFpbHVy
ZXMuRmFpbHVyZVJlZnRlc3RNaXNtYXRjaERpZE5vdE9jY3VyIGluIGZhaWx1cmVfdHlwZXM6Cisg
ICAgICAgICAgICB0ZXN0X2RpY3RbJ2lzX21pc21hdGNoX3JlZnRlc3QnXSA9IFRydWUKKworICAg
ICAgICBpZiB0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNzaW5nUmVzdWx0IGluIGZhaWx1cmVfdHlw
ZXM6CisgICAgICAgICAgICB0ZXN0X2RpY3RbJ2lzX21pc3NpbmdfdGV4dCddID0gVHJ1ZQorCisg
ICAgICAgIGlmIHRlc3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdJbWFnZSBpbiBmYWlsdXJlX3R5
cGVzIG9yIHRlc3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdJbWFnZUhhc2ggaW4gZmFpbHVyZV90
eXBlczoKKyAgICAgICAgICAgIHRlc3RfZGljdFsnaXNfbWlzc2luZ19pbWFnZSddID0gVHJ1ZQor
CisgICAgICAgICMgU3RvcmUgdGVzdCBoaWVyYXJjaGljYWxseSBieSBkaXJlY3RvcnkuIGUuZy4K
KyAgICAgICAgIyBmb28vYmFyL2Jhei5odG1sOiB0ZXN0X2RpY3QKKyAgICAgICAgIyBmb28vYmFy
L2JhejEuaHRtbDogdGVzdF9kaWN0CisgICAgICAgICMKKyAgICAgICAgIyBiZWNvbWVzCisgICAg
ICAgICMgZm9vOiB7CisgICAgICAgICMgICAgIGJhcjogeworICAgICAgICAjICAgICAgICAgYmF6
Lmh0bWw6IHRlc3RfZGljdCwKKyAgICAgICAgIyAgICAgICAgIGJhejEuaHRtbDogdGVzdF9kaWN0
CisgICAgICAgICMgICAgIH0KKyAgICAgICAgIyB9CisgICAgICAgIHBhcnRzID0gdGVzdF9uYW1l
LnNwbGl0KCcvJykKKyAgICAgICAgY3VycmVudF9tYXAgPSB0ZXN0cworICAgICAgICBmb3IgaSwg
cGFydCBpbiBlbnVtZXJhdGUocGFydHMpOgorICAgICAgICAgICAgaWYgaSA9PSAobGVuKHBhcnRz
KSAtIDEpOgorICAgICAgICAgICAgICAgIGN1cnJlbnRfbWFwW3BhcnRdID0gdGVzdF9kaWN0Cisg
ICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIHBhcnQgbm90IGluIGN1cnJlbnRf
bWFwOgorICAgICAgICAgICAgICAgIGN1cnJlbnRfbWFwW3BhcnRdID0ge30KKyAgICAgICAgICAg
IGN1cnJlbnRfbWFwID0gY3VycmVudF9tYXBbcGFydF0KKworICAgIHJlc3VsdHNbJ3Rlc3RzJ10g
PSB0ZXN0cworICAgIHJlc3VsdHNbJ251bV9wYXNzZXMnXSA9IG51bV9wYXNzZXMKKyAgICByZXN1
bHRzWydudW1fZmxha3knXSA9IG51bV9mbGFreQorICAgIHJlc3VsdHNbJ251bV9yZWdyZXNzaW9u
cyddID0gbnVtX3JlZ3Jlc3Npb25zCisgICAgcmVzdWx0c1sndXNlc19leHBlY3RhdGlvbnNfZmls
ZSddID0gcG9ydF9vYmoudXNlc190ZXN0X2V4cGVjdGF0aW9uc19maWxlKCkKKyAgICByZXN1bHRz
WydpbnRlcnJ1cHRlZCddID0gaW50ZXJydXB0ZWQgICMgRG9lcyByZXN1bHRzLmh0bWwgaGF2ZSBl
bm91Z2ggaW5mb3JtYXRpb24gdG8gY29tcHV0ZSB0aGlzIGl0c2VsZj8gKGJ5IGNoZWNraW5nIHRv
dGFsIG51bWJlciBvZiByZXN1bHRzIHZzLiB0b3RhbCBudW1iZXIgb2YgdGVzdHM/KQorICAgIHJl
c3VsdHNbJ2xheW91dF90ZXN0c19kaXInXSA9IHBvcnRfb2JqLmxheW91dF90ZXN0c19kaXIoKQor
ICAgIHJlc3VsdHNbJ2hhc193ZGlmZiddID0gcG9ydF9vYmoud2RpZmZfYXZhaWxhYmxlKCkKKyAg
ICByZXN1bHRzWydoYXNfcHJldHR5X3BhdGNoJ10gPSBwb3J0X29iai5wcmV0dHlfcGF0Y2hfYXZh
aWxhYmxlKCkKKyAgICB0cnk6CisgICAgICAgIHJlc3VsdHNbJ3JldmlzaW9uJ10gPSBzY20uZGVm
YXVsdF9zY20oKS5oZWFkX3N2bl9yZXZpc2lvbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAg
ICAgICAgIyBIYW5kbGUgY2FzZXMgd2hlcmUgd2UncmUgcnVubmluZyBvdXRzaWRlIG9mIHZlcnNp
b24gY29udHJvbC4KKyAgICAgICAgcmVzdWx0c1sncmV2aXNpb24nXSA9ICIiCisKKyAgICByZXR1
cm4gcmVzdWx0cworCisKK2NsYXNzIFRlc3RSdW5JbnRlcnJ1cHRlZEV4Y2VwdGlvbihFeGNlcHRp
b24pOgorICAgICIiIlJhaXNlZCB3aGVuIGEgdGVzdCBydW4gc2hvdWxkIGJlIHN0b3BwZWQgaW1t
ZWRpYXRlbHkuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlYXNvbik6CisgICAgICAgIHNl
bGYucmVhc29uID0gcmVhc29uCisgICAgICAgIHNlbGYubXNnID0gcmVhc29uCisKKyAgICBkZWYg
X19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLCAoc2VsZi5y
ZWFzb24sKQorCisKK2NsYXNzIFdvcmtlckV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICIiIlJh
aXNlZCB3aGVuIHdlIHJlY2VpdmUgYW4gdW5leHBlY3RlZC91bmtub3duIGV4Y2VwdGlvbiBmcm9t
IGEgd29ya2VyLiIiIgorICAgIHBhc3MKKworCitjbGFzcyBUZXN0U2hhcmQob2JqZWN0KToKKyAg
ICAiIiJBIHRlc3Qgc2hhcmQgaXMgYSBuYW1lZCBsaXN0IG9mIFRlc3RJbnB1dHMuIiIiCisKKyAg
ICAjIEZJWE1FOiBNYWtlIHRoaXMgY2xhc3MgdmlzaWJsZSwgdXNlZCBieSB3b3JrZXJzIGFzIHdl
bGwuCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHRlc3RfaW5wdXRzKToKKyAgICAgICAg
c2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLnRlc3RfaW5wdXRzID0gdGVzdF9pbnB1dHMK
KworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJUZXN0U2hhcmQobmFt
ZT0nJXMnLCB0ZXN0X2lucHV0cz0lcyciICUgKHNlbGYubmFtZSwgc2VsZi50ZXN0X2lucHV0cykK
KworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5uYW1l
ID09IG90aGVyLm5hbWUgYW5kIHNlbGYudGVzdF9pbnB1dHMgPT0gb3RoZXIudGVzdF9pbnB1dHMK
KworCitjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CisgICAgIiIiQSBjbGFzcyBmb3IgbWFuYWdpbmcg
cnVubmluZyBhIHNlcmllcyBvZiB0ZXN0cyBvbiBhIHNlcmllcyBvZiBsYXlvdXQKKyAgICB0ZXN0
IGZpbGVzLiIiIgorCisKKyAgICAjIFRoZSBwZXItdGVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25k
cywgaWYgbm8gLS10aW1lLW91dC1tcyBvcHRpb24gd2FzCisgICAgIyBnaXZlbiB0byBydW5fd2Vi
a2l0X3Rlc3RzLiBUaGlzIHNob3VsZCBjb3JyZXNwb25kIHRvIHRoZSBkZWZhdWx0IHRpbWVvdXQK
KyAgICAjIGluIER1bXBSZW5kZXJUcmVlLgorICAgIERFRkFVTFRfVEVTVF9USU1FT1VUX01TID0g
NiAqIDEwMDAKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmludGVy
KToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZSB0ZXN0IHJ1bm5lciBkYXRhIHN0cnVjdHVyZXMuCisK
KyAgICAgICAgQXJnczoKKyAgICAgICAgICBwb3J0OiBhbiBvYmplY3QgaW1wbGVtZW50aW5nIHBv
cnQtc3BlY2lmaWMKKyAgICAgICAgICBvcHRpb25zOiBhIGRpY3Rpb25hcnkgb2YgY29tbWFuZCBs
aW5lIG9wdGlvbnMKKyAgICAgICAgICBwcmludGVyOiBhIFByaW50ZXIgb2JqZWN0IHRvIHJlY29y
ZCB1cGRhdGVzIHRvLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAg
ICAgICAgc2VsZi5fZnMgPSBwb3J0Ll9maWxlc3lzdGVtCisgICAgICAgIHNlbGYuX29wdGlvbnMg
PSBvcHRpb25zCisgICAgICAgIHNlbGYuX3ByaW50ZXIgPSBwcmludGVyCisgICAgICAgIHNlbGYu
X21lc3NhZ2VfYnJva2VyID0gTm9uZQorCisgICAgICAgIHNlbGYuSFRUUF9TVUJESVIgPSBwb3J0
LlRFU1RfUEFUSF9TRVBBUkFUT1IgKyAnaHR0cCcgKyBwb3J0LlRFU1RfUEFUSF9TRVBBUkFUT1IK
KyAgICAgICAgc2VsZi5XRUJTT0NLRVRfU1VCRElSID0gcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9S
ICsgJ3dlYnNvY2tldCcgKyBwb3J0LlRFU1RfUEFUSF9TRVBBUkFUT1IKKyAgICAgICAgc2VsZi5M
QVlPVVRfVEVTVFNfRElSRUNUT1JZID0gJ0xheW91dFRlc3RzJworICAgICAgICBzZWxmLl9oYXNf
aHR0cF9sb2NrID0gRmFsc2UKKworICAgICAgICBzZWxmLl9yZW1haW5pbmdfbG9ja2VkX3NoYXJk
cyA9IFtdCisKKyAgICAgICAgIyBkaXNhYmxlIHdzcyBzZXJ2ZXIuIG5lZWQgdG8gaW5zdGFsbCBw
eU9wZW5TU0wgb24gYnVpbGRib3RzLgorICAgICAgICAjIHNlbGYuX3dlYnNvY2tldF9zZWN1cmVf
c2VydmVyID0gd2Vic29ja2V0X3NlcnZlci5QeVdlYlNvY2tldCgKKyAgICAgICAgIyAgICAgICAg
b3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwgdXNlX3Rscz1UcnVlLCBwb3J0PTkzMjMpCisKKyAg
ICAgICAgIyBhIHNldCBvZiB0ZXN0IGZpbGVzLCBhbmQgdGhlIHNhbWUgdGVzdHMgYXMgYSBsaXN0
CisgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXMgPSBzZXQoKQorICAgICAgICBzZWxmLl90ZXN0X2Zp
bGVzX2xpc3QgPSBOb25lCisgICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZSA9IFF1ZXVlLlF1ZXVl
KCkKKyAgICAgICAgc2VsZi5fcmV0cnlpbmcgPSBGYWxzZQorICAgICAgICBzZWxmLl9yZXN1bHRz
X2RpcmVjdG9yeSA9IHNlbGYuX3BvcnQucmVzdWx0c19kaXJlY3RvcnkoKQorCisgICAgICAgIHNl
bGYuX2FsbF9yZXN1bHRzID0gW10KKyAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHMgPSB7fQorICAg
ICAgICBzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5ID0gTm9uZQorCisgICAgICAgICMgVGhp
cyBtYXBzIHdvcmtlciBuYW1lcyB0byB0aGUgc3RhdGUgd2UgYXJlIHRyYWNraW5nIGZvciBlYWNo
IG9mIHRoZW0uCisgICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0ZXMgPSB7fQorCisgICAgZGVmIGNv
bGxlY3RfdGVzdHMoc2VsZiwgYXJncywgbGFzdF91bmV4cGVjdGVkX3Jlc3VsdHMpOgorICAgICAg
ICAiIiJGaW5kIGFsbCB0aGUgZmlsZXMgdG8gdGVzdC4KKworICAgICAgICBBcmdzOgorICAgICAg
ICAgIGFyZ3M6IGxpc3Qgb2YgdGVzdCBhcmd1bWVudHMgZnJvbSB0aGUgY29tbWFuZCBsaW5lCisg
ICAgICAgICAgbGFzdF91bmV4cGVjdGVkX3Jlc3VsdHM6IGxpc3Qgb2YgdW5leHBlY3RlZCByZXN1
bHRzIHRvIHJldGVzdCwgaWYgYW55CisKKyAgICAgICAgIiIiCisgICAgICAgIHBhdGhzID0gc2Vs
Zi5fc3RyaXBfdGVzdF9kaXJfcHJlZml4ZXMoYXJncykKKyAgICAgICAgcGF0aHMgKz0gbGFzdF91
bmV4cGVjdGVkX3Jlc3VsdHMKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy50ZXN0X2xpc3Q6Cisg
ICAgICAgICAgICBwYXRocyArPSBzZWxmLl9zdHJpcF90ZXN0X2Rpcl9wcmVmaXhlcyhyZWFkX3Rl
c3RfZmlsZXMoc2VsZi5fZnMsIHNlbGYuX29wdGlvbnMudGVzdF9saXN0LCBzZWxmLl9wb3J0LlRF
U1RfUEFUSF9TRVBBUkFUT1IpKQorICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzID0gc2VsZi5fcG9y
dC50ZXN0cyhwYXRocykKKworICAgIGRlZiBfc3RyaXBfdGVzdF9kaXJfcHJlZml4ZXMoc2VsZiwg
cGF0aHMpOgorICAgICAgICByZXR1cm4gW3NlbGYuX3N0cmlwX3Rlc3RfZGlyX3ByZWZpeChwYXRo
KSBmb3IgcGF0aCBpbiBwYXRocyBpZiBwYXRoXQorCisgICAgZGVmIF9zdHJpcF90ZXN0X2Rpcl9w
cmVmaXgoc2VsZiwgcGF0aCk6CisgICAgICAgICMgSGFuZGxlIGJvdGggIkxheW91dFRlc3RzL2Zv
by9iYXIuaHRtbCIgYW5kICJMYXlvdXRUZXN0c1xmb29cYmFyLmh0bWwiIGlmCisgICAgICAgICMg
dGhlIGZpbGVzeXN0ZW0gdXNlcyAnXFwnIGFzIGEgZGlyZWN0b3J5IHNlcGFyYXRvci4KKyAgICAg
ICAgaWYgcGF0aC5zdGFydHN3aXRoKHNlbGYuTEFZT1VUX1RFU1RTX0RJUkVDVE9SWSArIHNlbGYu
X3BvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUik6CisgICAgICAgICAgICByZXR1cm4gcGF0aFtsZW4o
c2VsZi5MQVlPVVRfVEVTVFNfRElSRUNUT1JZICsgc2VsZi5fcG9ydC5URVNUX1BBVEhfU0VQQVJB
VE9SKTpdCisgICAgICAgIGlmIHBhdGguc3RhcnRzd2l0aChzZWxmLkxBWU9VVF9URVNUU19ESVJF
Q1RPUlkgKyBzZWxmLl9mcy5zZXApOgorICAgICAgICAgICAgcmV0dXJuIHBhdGhbbGVuKHNlbGYu
TEFZT1VUX1RFU1RfRElSRUNUT1JZICsgc2VsZi5fZnMuc2VwKTpdCisgICAgICAgIHJldHVybiBw
YXRoCisKKyAgICBkZWYgbGludChzZWxmKToKKyAgICAgICAgbGludF9mYWlsZWQgPSBGYWxzZQor
ICAgICAgICBmb3IgdGVzdF9jb25maWd1cmF0aW9uIGluIHNlbGYuX3BvcnQuYWxsX3Rlc3RfY29u
ZmlndXJhdGlvbnMoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmxp
bnRfZXhwZWN0YXRpb25zKHRlc3RfY29uZmlndXJhdGlvbikKKyAgICAgICAgICAgIGV4Y2VwdCB0
ZXN0X2V4cGVjdGF0aW9ucy5QYXJzZUVycm9yOgorICAgICAgICAgICAgICAgIGxpbnRfZmFpbGVk
ID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGUoIiIpCisKKyAgICAg
ICAgaWYgbGludF9mYWlsZWQ6CisgICAgICAgICAgICBfbG9nLmVycm9yKCJMaW50IGZhaWxlZC4i
KQorICAgICAgICAgICAgcmV0dXJuIC0xCisKKyAgICAgICAgX2xvZy5pbmZvKCJMaW50IHN1Y2Nl
ZWRlZC4iKQorICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIGxpbnRfZXhwZWN0YXRpb25zKHNl
bGYsIGNvbmZpZyk6CisgICAgICAgIHBvcnQgPSBzZWxmLl9wb3J0CisgICAgICAgIHRlc3RfZXhw
ZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvbnMoCisgICAgICAgICAgICBwb3J0LAorICAgICAgICAg
ICAgTm9uZSwKKyAgICAgICAgICAgIHBvcnQudGVzdF9leHBlY3RhdGlvbnMoKSwKKyAgICAgICAg
ICAgIGNvbmZpZywKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMubGludF90ZXN0X2ZpbGVzLAor
ICAgICAgICAgICAgcG9ydC50ZXN0X2V4cGVjdGF0aW9uc19vdmVycmlkZXMoKSkKKworICAgIGRl
ZiBwYXJzZV9leHBlY3RhdGlvbnMoc2VsZik6CisgICAgICAgICIiIlBhcnNlIHRoZSBleHBlY3Rh
dGlvbnMgZnJvbSB0aGUgdGVzdF9saXN0IGZpbGVzIGFuZCByZXR1cm4gYSBkYXRhCisgICAgICAg
IHN0cnVjdHVyZSBob2xkaW5nIHRoZW0uIFRocm93cyBhbiBlcnJvciBpZiB0aGUgdGVzdF9saXN0
IGZpbGVzIGhhdmUKKyAgICAgICAgaW52YWxpZCBzeW50YXguIiIiCisgICAgICAgIHBvcnQgPSBz
ZWxmLl9wb3J0CisgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucyA9IHRlc3RfZXhwZWN0YXRpb25z
LlRlc3RFeHBlY3RhdGlvbnMoCisgICAgICAgICAgICBwb3J0LAorICAgICAgICAgICAgc2VsZi5f
dGVzdF9maWxlcywKKyAgICAgICAgICAgIHBvcnQudGVzdF9leHBlY3RhdGlvbnMoKSwKKyAgICAg
ICAgICAgIHBvcnQudGVzdF9jb25maWd1cmF0aW9uKCksCisgICAgICAgICAgICBzZWxmLl9vcHRp
b25zLmxpbnRfdGVzdF9maWxlcywKKyAgICAgICAgICAgIHBvcnQudGVzdF9leHBlY3RhdGlvbnNf
b3ZlcnJpZGVzKCkpCisKKyAgICAjIEZJWE1FOiBUaGlzIG1ldGhvZCBpcyB3YXkgdG9vIGxvbmcg
YW5kIG5lZWRzIHRvIGJlIGJyb2tlbiBpbnRvIHBpZWNlcy4KKyAgICBkZWYgcHJlcGFyZV9saXN0
c19hbmRfcHJpbnRfb3V0cHV0KHNlbGYpOgorICAgICAgICAiIiJDcmVhdGUgYXBwcm9wcmlhdGUg
c3Vic2V0cyBvZiB0ZXN0IGxpc3RzIGFuZCByZXR1cm5zIGEKKyAgICAgICAgUmVzdWx0U3VtbWFy
eSBvYmplY3QuIEFsc28gcHJpbnRzIGV4cGVjdGVkIHRlc3QgY291bnRzLgorICAgICAgICAiIiIK
KworICAgICAgICAjIFJlbW92ZSBza2lwcGVkIC0gYm90aCBmaXhhYmxlIGFuZCBpZ25vcmVkIC0g
ZmlsZXMgZnJvbSB0aGUKKyAgICAgICAgIyB0b3AtbGV2ZWwgbGlzdCBvZiBmaWxlcyB0byB0ZXN0
LgorICAgICAgICBudW1fYWxsX3Rlc3RfZmlsZXMgPSBsZW4oc2VsZi5fdGVzdF9maWxlcykKKyAg
ICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9leHBlY3RlZCgiRm91bmQ6ICAlZCB0ZXN0cyIgJQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZW4oc2VsZi5fdGVzdF9maWxl
cykpKQorICAgICAgICBpZiBub3QgbnVtX2FsbF90ZXN0X2ZpbGVzOgorICAgICAgICAgICAgX2xv
Zy5jcml0aWNhbCgnTm8gdGVzdHMgdG8gcnVuLicpCisgICAgICAgICAgICByZXR1cm4gTm9uZQor
CisgICAgICAgIHNraXBwZWQgPSBzZXQoKQorICAgICAgICBpZiBudW1fYWxsX3Rlc3RfZmlsZXMg
PiAxIGFuZCBub3Qgc2VsZi5fb3B0aW9ucy5mb3JjZToKKyAgICAgICAgICAgIHNraXBwZWQgPSBz
ZWxmLl9leHBlY3RhdGlvbnMuZ2V0X3Rlc3RzX3dpdGhfcmVzdWx0X3R5cGUoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5TS0lQKQorICAgICAgICAgICAgc2Vs
Zi5fdGVzdF9maWxlcyAtPSBza2lwcGVkCisgICAgICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnNr
aXBfZmFpbGluZ190ZXN0czoKKyAgICAgICAgICAgICAgICBmYWlsaW5nID0gc2VsZi5fZXhwZWN0
YXRpb25zLmdldF90ZXN0c193aXRoX3Jlc3VsdF90eXBlKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLkZBSUwpCisgICAgICAgICAgICAgICAgc2VsZi5f
dGVzdF9maWxlcyAtPSBmYWlsaW5nCisKKyAgICAgICAgIyBDcmVhdGUgYSBzb3J0ZWQgbGlzdCBv
ZiB0ZXN0IGZpbGVzIHNvIHRoZSBzdWJzZXQgY2h1bmssCisgICAgICAgICMgaWYgdXNlZCwgY29u
dGFpbnMgYWxwaGFiZXRpY2FsbHkgY29uc2VjdXRpdmUgdGVzdHMuCisgICAgICAgIHNlbGYuX3Rl
c3RfZmlsZXNfbGlzdCA9IGxpc3Qoc2VsZi5fdGVzdF9maWxlcykKKyAgICAgICAgaWYgc2VsZi5f
b3B0aW9ucy5yYW5kb21pemVfb3JkZXI6CisgICAgICAgICAgICByYW5kb20uc2h1ZmZsZShzZWxm
Ll90ZXN0X2ZpbGVzX2xpc3QpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl90ZXN0
X2ZpbGVzX2xpc3Quc29ydChrZXk9bGFtYmRhIHRlc3Q6IHRlc3Rfa2V5KHNlbGYuX3BvcnQsIHRl
c3QpKQorCisgICAgICAgICMgSWYgdGhlIHVzZXIgc3BlY2lmaWVzIHRoZXkganVzdCB3YW50IHRv
IHJ1biBhIHN1YnNldCBvZiB0aGUgdGVzdHMsCisgICAgICAgICMganVzdCBncmFiIGEgc3Vic2V0
IG9mIHRoZSBub24tc2tpcHBlZCB0ZXN0cy4KKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5ydW5f
Y2h1bmsgb3Igc2VsZi5fb3B0aW9ucy5ydW5fcGFydDoKKyAgICAgICAgICAgIGNodW5rX3ZhbHVl
ID0gc2VsZi5fb3B0aW9ucy5ydW5fY2h1bmsgb3Igc2VsZi5fb3B0aW9ucy5ydW5fcGFydAorICAg
ICAgICAgICAgdGVzdF9maWxlcyA9IHNlbGYuX3Rlc3RfZmlsZXNfbGlzdAorICAgICAgICAgICAg
dHJ5OgorICAgICAgICAgICAgICAgIChjaHVua19udW0sIGNodW5rX2xlbikgPSBjaHVua192YWx1
ZS5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgY2h1bmtfbnVtID0gaW50KGNodW5rX251bSkK
KyAgICAgICAgICAgICAgICBhc3NlcnQoY2h1bmtfbnVtID49IDApCisgICAgICAgICAgICAgICAg
dGVzdF9zaXplID0gaW50KGNodW5rX2xlbikKKyAgICAgICAgICAgICAgICBhc3NlcnQodGVzdF9z
aXplID4gMCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBfbG9nLmNyaXRp
Y2FsKCJpbnZhbGlkIGNodW5rICclcyciICUgY2h1bmtfdmFsdWUpCisgICAgICAgICAgICAgICAg
cmV0dXJuIE5vbmUKKworICAgICAgICAgICAgIyBHZXQgdGhlIG51bWJlciBvZiB0ZXN0cworICAg
ICAgICAgICAgbnVtX3Rlc3RzID0gbGVuKHRlc3RfZmlsZXMpCisKKyAgICAgICAgICAgICMgR2V0
IHRoZSBzdGFydCBvZmZzZXQgb2YgdGhlIHNsaWNlLgorICAgICAgICAgICAgaWYgc2VsZi5fb3B0
aW9ucy5ydW5fY2h1bms6CisgICAgICAgICAgICAgICAgY2h1bmtfbGVuID0gdGVzdF9zaXplCisg
ICAgICAgICAgICAgICAgIyBJbiB0aGlzIGNhc2UgY2h1bmtfbnVtIGNhbiBiZSByZWFsbHkgbGFy
Z2UuIFdlIG5lZWQKKyAgICAgICAgICAgICAgICAjIHRvIG1ha2UgdGhlIHNsYXZlIGZpdCBpbiB0
aGUgY3VycmVudCBudW1iZXIgb2YgdGVzdHMuCisgICAgICAgICAgICAgICAgc2xpY2Vfc3RhcnQg
PSAoY2h1bmtfbnVtICogY2h1bmtfbGVuKSAlIG51bV90ZXN0cworICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICAjIFZhbGlkYXRlIHRoZSBkYXRhLgorICAgICAgICAgICAgICAgIGFz
c2VydCh0ZXN0X3NpemUgPD0gbnVtX3Rlc3RzKQorICAgICAgICAgICAgICAgIGFzc2VydChjaHVu
a19udW0gPD0gdGVzdF9zaXplKQorCisgICAgICAgICAgICAgICAgIyBUbyBjb3VudCB0aGUgY2h1
bmtfbGVuLCBhbmQgbWFrZSBzdXJlIHdlIGRvbid0IHNraXAKKyAgICAgICAgICAgICAgICAjIHNv
bWUgdGVzdHMsIHdlIHJvdW5kIHRvIHRoZSBuZXh0IHZhbHVlIHRoYXQgZml0cyBleGFjdGx5Cisg
ICAgICAgICAgICAgICAgIyBhbGwgdGhlIHBhcnRzLgorICAgICAgICAgICAgICAgIHJvdW5kZWRf
dGVzdHMgPSBudW1fdGVzdHMKKyAgICAgICAgICAgICAgICBpZiByb3VuZGVkX3Rlc3RzICUgdGVz
dF9zaXplICE9IDA6CisgICAgICAgICAgICAgICAgICAgIHJvdW5kZWRfdGVzdHMgPSAobnVtX3Rl
c3RzICsgdGVzdF9zaXplIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
bnVtX3Rlc3RzICUgdGVzdF9zaXplKSkKKworICAgICAgICAgICAgICAgIGNodW5rX2xlbiA9IHJv
dW5kZWRfdGVzdHMgLyB0ZXN0X3NpemUKKyAgICAgICAgICAgICAgICBzbGljZV9zdGFydCA9IGNo
dW5rX2xlbiAqIChjaHVua19udW0gLSAxKQorICAgICAgICAgICAgICAgICMgSXQgZG9lcyBub3Qg
bWluZCBpZiB3ZSBnbyBvdmVyIHRlc3Rfc2l6ZS4KKworICAgICAgICAgICAgIyBHZXQgdGhlIGVu
ZCBvZmZzZXQgb2YgdGhlIHNsaWNlLgorICAgICAgICAgICAgc2xpY2VfZW5kID0gbWluKG51bV90
ZXN0cywgc2xpY2Vfc3RhcnQgKyBjaHVua19sZW4pCisKKyAgICAgICAgICAgIGZpbGVzID0gdGVz
dF9maWxlc1tzbGljZV9zdGFydDpzbGljZV9lbmRdCisKKyAgICAgICAgICAgIHRlc3RzX3J1bl9t
c2cgPSAnUnVubmluZzogJWQgdGVzdHMgKGNodW5rIHNsaWNlIFslZDolZF0gb2YgJWQpJyAlICgK
KyAgICAgICAgICAgICAgICAoc2xpY2VfZW5kIC0gc2xpY2Vfc3RhcnQpLCBzbGljZV9zdGFydCwg
c2xpY2VfZW5kLCBudW1fdGVzdHMpCisgICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2V4
cGVjdGVkKHRlc3RzX3J1bl9tc2cpCisKKyAgICAgICAgICAgICMgSWYgd2UgcmVhY2hlZCB0aGUg
ZW5kIGFuZCB3ZSBkb24ndCBoYXZlIGVub3VnaCB0ZXN0cywgd2UgcnVuIHNvbWUKKyAgICAgICAg
ICAgICMgZnJvbSB0aGUgYmVnaW5uaW5nLgorICAgICAgICAgICAgaWYgc2xpY2VfZW5kIC0gc2xp
Y2Vfc3RhcnQgPCBjaHVua19sZW46CisgICAgICAgICAgICAgICAgZXh0cmEgPSBjaHVua19sZW4g
LSAoc2xpY2VfZW5kIC0gc2xpY2Vfc3RhcnQpCisgICAgICAgICAgICAgICAgZXh0cmFfbXNnID0g
KCcgICBsYXN0IGNodW5rIGlzIHBhcnRpYWwsIGFwcGVuZGluZyBbMDolZF0nICUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleHRyYSkKKyAgICAgICAgICAgICAgICBzZWxmLl9wcmludGVy
LnByaW50X2V4cGVjdGVkKGV4dHJhX21zZykKKyAgICAgICAgICAgICAgICB0ZXN0c19ydW5fbXNn
ICs9ICJcbiIgKyBleHRyYV9tc2cKKyAgICAgICAgICAgICAgICBmaWxlcy5leHRlbmQodGVzdF9m
aWxlc1swOmV4dHJhXSkKKyAgICAgICAgICAgIHRlc3RzX3J1bl9maWxlbmFtZSA9IHNlbGYuX2Zz
LmpvaW4oc2VsZi5fcmVzdWx0c19kaXJlY3RvcnksICJ0ZXN0c19ydW4udHh0IikKKyAgICAgICAg
ICAgIHNlbGYuX2ZzLndyaXRlX3RleHRfZmlsZSh0ZXN0c19ydW5fZmlsZW5hbWUsIHRlc3RzX3J1
bl9tc2cpCisKKyAgICAgICAgICAgIGxlbl9za2lwX2NodW5rID0gaW50KGxlbihmaWxlcykgKiBs
ZW4oc2tpcHBlZCkgLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQobGVu
KHNlbGYuX3Rlc3RfZmlsZXMpKSkKKyAgICAgICAgICAgIHNraXBfY2h1bmtfbGlzdCA9IGxpc3Qo
c2tpcHBlZClbMDpsZW5fc2tpcF9jaHVua10KKyAgICAgICAgICAgIHNraXBfY2h1bmsgPSBzZXQo
c2tpcF9jaHVua19saXN0KQorCisgICAgICAgICAgICAjIFVwZGF0ZSBleHBlY3RhdGlvbnMgc28g
dGhhdCB0aGUgc3RhdHMgYXJlIGNhbGN1bGF0ZWQgY29ycmVjdGx5LgorICAgICAgICAgICAgIyBX
ZSBuZWVkIHRvIHBhc3MgYSBsaXN0IHRoYXQgaW5jbHVkZXMgdGhlIHJpZ2h0ICMgb2Ygc2tpcHBl
ZCBmaWxlcworICAgICAgICAgICAgIyB0byBQYXJzZUV4cGVjdGF0aW9ucyBzbyB0aGF0IFJlc3Vs
dFN1bW1hcnkoKSB3aWxsIGdldCB0aGUgY29ycmVjdAorICAgICAgICAgICAgIyBzdGF0cy4gU28s
IHdlIGFkZCBpbiB0aGUgc3Vic2V0IG9mIHNraXBwZWQgZmlsZXMsIGFuZCB0aGVuCisgICAgICAg
ICAgICAjIHN1YnRyYWN0IHRoZW0gYmFjayBvdXQuCisgICAgICAgICAgICBzZWxmLl90ZXN0X2Zp
bGVzX2xpc3QgPSBmaWxlcyArIHNraXBfY2h1bmtfbGlzdAorICAgICAgICAgICAgc2VsZi5fdGVz
dF9maWxlcyA9IHNldChzZWxmLl90ZXN0X2ZpbGVzX2xpc3QpCisKKyAgICAgICAgICAgIHNlbGYu
cGFyc2VfZXhwZWN0YXRpb25zKCkKKworICAgICAgICAgICAgc2VsZi5fdGVzdF9maWxlcyA9IHNl
dChmaWxlcykKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCA9IGZpbGVzCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBza2lwX2NodW5rID0gc2tpcHBlZAorCisgICAgICAgIHJl
c3VsdF9zdW1tYXJ5ID0gUmVzdWx0U3VtbWFyeShzZWxmLl9leHBlY3RhdGlvbnMsCisgICAgICAg
ICAgICBzZWxmLl90ZXN0X2ZpbGVzIHwgc2tpcF9jaHVuaykKKyAgICAgICAgc2VsZi5fcHJpbnRf
ZXhwZWN0ZWRfcmVzdWx0c19vZl90eXBlKHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICAgICAgdGVz
dF9leHBlY3RhdGlvbnMuUEFTUywgInBhc3NlcyIpCisgICAgICAgIHNlbGYuX3ByaW50X2V4cGVj
dGVkX3Jlc3VsdHNfb2ZfdHlwZShyZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgICAgIHRlc3RfZXhw
ZWN0YXRpb25zLkZBSUwsICJmYWlsdXJlcyIpCisgICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVk
X3Jlc3VsdHNfb2ZfdHlwZShyZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgICAgIHRlc3RfZXhwZWN0
YXRpb25zLkZMQUtZLCAiZmxha3kiKQorICAgICAgICBzZWxmLl9wcmludF9leHBlY3RlZF9yZXN1
bHRzX29mX3R5cGUocmVzdWx0X3N1bW1hcnksCisgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9u
cy5TS0lQLCAic2tpcHBlZCIpCisKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5mb3JjZToKKyAg
ICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfZXhwZWN0ZWQoJ1J1bm5pbmcgYWxsIHRlc3Rz
LCBpbmNsdWRpbmcgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
c2tpcHMgKC0tZm9yY2UpJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgTm90ZSB0aGF0
IHdlIGRvbid0IGFjdHVhbGx5IHJ1biB0aGUgc2tpcHBlZCB0ZXN0cyAodGhleSB3ZXJlCisgICAg
ICAgICAgICAjIHN1YnRyYWN0ZWQgb3V0IG9mIHNlbGYuX3Rlc3RfZmlsZXMsIGFib3ZlKSwgYnV0
IHdlIHN0dWIgb3V0IHRoZQorICAgICAgICAgICAgIyByZXN1bHRzIGhlcmUgc28gdGhlIHN0YXRp
c3RpY3MgY2FuIHJlbWFpbiBhY2N1cmF0ZS4KKyAgICAgICAgICAgIGZvciB0ZXN0IGluIHNraXBf
Y2h1bms6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9yZXN1bHRzLlRlc3RSZXN1bHQo
dGVzdCkKKyAgICAgICAgICAgICAgICByZXN1bHQudHlwZSA9IHRlc3RfZXhwZWN0YXRpb25zLlNL
SVAKKyAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS5hZGQocmVzdWx0LCBleHBlY3RlZD1U
cnVlKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2V4cGVjdGVkKCcnKQorCisgICAgICAg
ICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGRpZG4ndCBmaWx0ZXIgb3V0IGFsbCBvZiB0aGUgdGVz
dHMuCisgICAgICAgIGlmIG5vdCBsZW4oc2VsZi5fdGVzdF9maWxlcyk6CisgICAgICAgICAgICBf
bG9nLmluZm8oIkFsbCB0ZXN0cyBhcmUgYmVpbmcgc2tpcHBlZCIpCisgICAgICAgICAgICByZXR1
cm4gTm9uZQorCisgICAgICAgIHJldHVybiByZXN1bHRfc3VtbWFyeQorCisgICAgZGVmIF9nZXRf
ZGlyX2Zvcl90ZXN0X2ZpbGUoc2VsZiwgdGVzdF9maWxlKToKKyAgICAgICAgIiIiUmV0dXJucyB0
aGUgaGlnaGVzdC1sZXZlbCBkaXJlY3RvcnkgYnkgd2hpY2ggdG8gc2hhcmQgdGhlIGdpdmVuCisg
ICAgICAgIHRlc3QgZmlsZS4iIiIKKyAgICAgICAgZGlyZWN0b3J5LCB0ZXN0X2ZpbGUgPSBzZWxm
Ll9wb3J0LnNwbGl0X3Rlc3QodGVzdF9maWxlKQorCisgICAgICAgICMgVGhlIGh0dHAgdGVzdHMg
YXJlIHZlcnkgc3RhYmxlIG9uIG1hYy9saW51eC4KKyAgICAgICAgIyBUT0RPKG9qYW4pOiBNYWtl
IHRoZSBodHRwIHNlcnZlciBvbiBXaW5kb3dzIGJlIGFwYWNoZSBzbyB3ZSBjYW4KKyAgICAgICAg
IyB0dXJuIHNoYXJkIHRoZSBodHRwIHRlc3RzIHRoZXJlIGFzIHdlbGwuIFN3aXRjaGluZyB0byBh
cGFjaGUgaXMKKyAgICAgICAgIyB3aGF0IG1hZGUgdGhlbSBzdGFibGUgb24gbGludXgvbWFjLgor
ICAgICAgICByZXR1cm4gZGlyZWN0b3J5CisKKyAgICBkZWYgX2dldF90ZXN0X2lucHV0X2Zvcl9m
aWxlKHNlbGYsIHRlc3RfZmlsZSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGFwcHJvcHJpYXRl
IFRlc3RJbnB1dCBvYmplY3QgZm9yIHRoZSBmaWxlLiBNb3N0bHkgdGhpcworICAgICAgICBpcyB1
c2VkIGZvciBsb29raW5nIHVwIHRoZSB0aW1lb3V0IHZhbHVlIChpbiBtcykgdG8gdXNlIGZvciB0
aGUgZ2l2ZW4KKyAgICAgICAgdGVzdC4iIiIKKyAgICAgICAgaWYgc2VsZi5fdGVzdF9pc19zbG93
KHRlc3RfZmlsZSk6CisgICAgICAgICAgICByZXR1cm4gVGVzdElucHV0KHRlc3RfZmlsZSwgc2Vs
Zi5fb3B0aW9ucy5zbG93X3RpbWVfb3V0X21zKQorICAgICAgICByZXR1cm4gVGVzdElucHV0KHRl
c3RfZmlsZSwgc2VsZi5fb3B0aW9ucy50aW1lX291dF9tcykKKworICAgIGRlZiBfdGVzdF9yZXF1
aXJlc19sb2NrKHNlbGYsIHRlc3RfZmlsZSk6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRo
ZSB0ZXN0IG5lZWRzIHRvIGJlIGxvY2tlZCB3aGVuCisgICAgICAgIHJ1bm5pbmcgbXVsdGlwbGUg
Y29waWVzIG9mIE5SV1RzLiIiIgorICAgICAgICBzcGxpdF9wYXRoID0gdGVzdF9maWxlLnNwbGl0
KHNlbGYuX3BvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUikKKyAgICAgICAgcmV0dXJuICdodHRwJyBp
biBzcGxpdF9wYXRoIG9yICd3ZWJzb2NrZXQnIGluIHNwbGl0X3BhdGgKKworICAgIGRlZiBfdGVz
dF9pc19zbG93KHNlbGYsIHRlc3RfZmlsZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9leHBlY3Rh
dGlvbnMuaGFzX21vZGlmaWVyKHRlc3RfZmlsZSwgdGVzdF9leHBlY3RhdGlvbnMuU0xPVykKKwor
ICAgIGRlZiBfc2hhcmRfdGVzdHMoc2VsZiwgdGVzdF9maWxlcywgbnVtX3dvcmtlcnMsIGZ1bGx5
X3BhcmFsbGVsKToKKyAgICAgICAgIiIiR3JvdXBzIHRlc3RzIGludG8gYmF0Y2hlcy4KKyAgICAg
ICAgVGhpcyBoZWxwcyBlbnN1cmUgdGhhdCB0ZXN0cyB0aGF0IGRlcGVuZCBvbiBlYWNoIG90aGVy
IChha2EgYmFkIHRlc3RzISkKKyAgICAgICAgY29udGludWUgdG8gcnVuIHRvZ2V0aGVyIGFzIG1v
c3QgY3Jvc3MtdGVzdHMgZGVwZW5kZW5jaWVzIHRlbmQgdG8KKyAgICAgICAgb2NjdXIgd2l0aGlu
IHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAgICAgICAgUmV0dXJuOgorICAgICAgICAgICAgVHdvIGxp
c3Qgb2YgVGVzdFNoYXJkcy4gVGhlIGZpcnN0IGNvbnRhaW5zIHRlc3RzIHRoYXQgbXVzdCBvbmx5
IGJlCisgICAgICAgICAgICBydW4gdW5kZXIgdGhlIHNlcnZlciBsb2NrLCB0aGUgc2Vjb25kIGNh
biBiZSBydW4gd2hlbmV2ZXIuCisgICAgICAgICIiIgorCisgICAgICAgICMgRklYTUU6IE1vdmUg
YWxsIG9mIHRoZSBzaGFyZGluZyBsb2dpYyBvdXQgb2YgbWFuYWdlciBpbnRvIGl0cworICAgICAg
ICAjIG93biBjbGFzcyBvciBtb2R1bGUuIENvbnNpZGVyIGdyb3VwaW5nIGl0IHdpdGggdGhlIGNo
dW5raW5nIGxvZ2ljCisgICAgICAgICMgaW4gcHJlcGFyZV9saXN0cyBhcyB3ZWxsLgorICAgICAg
ICBpZiBudW1fd29ya2VycyA9PSAxOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NoYXJkX2lu
X3R3byh0ZXN0X2ZpbGVzKQorICAgICAgICBlbGlmIGZ1bGx5X3BhcmFsbGVsOgorICAgICAgICAg
ICAgcmV0dXJuIHNlbGYuX3NoYXJkX2V2ZXJ5X2ZpbGUodGVzdF9maWxlcykKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3NoYXJkX2J5X2RpcmVjdG9yeSh0ZXN0X2ZpbGVzLCBudW1fd29ya2VycykKKwor
ICAgIGRlZiBfc2hhcmRfaW5fdHdvKHNlbGYsIHRlc3RfZmlsZXMpOgorICAgICAgICAiIiJSZXR1
cm5zIHR3byBsaXN0cyBvZiBzaGFyZHMsIG9uZSB3aXRoIGFsbCB0aGUgdGVzdHMgcmVxdWlyaW5n
IGEgbG9jayBhbmQgb25lIHdpdGggdGhlIHJlc3QuCisKKyAgICAgICAgVGhpcyBpcyB1c2VkIHdo
ZW4gdGhlcmUncyBvbmx5IG9uZSB3b3JrZXIsIHRvIG1pbmltaXplIHRoZSBwZXItc2hhcmQgb3Zl
cmhlYWQuIiIiCisgICAgICAgIGxvY2tlZF9pbnB1dHMgPSBbXQorICAgICAgICB1bmxvY2tlZF9p
bnB1dHMgPSBbXQorICAgICAgICBmb3IgdGVzdF9maWxlIGluIHRlc3RfZmlsZXM6CisgICAgICAg
ICAgICB0ZXN0X2lucHV0ID0gc2VsZi5fZ2V0X3Rlc3RfaW5wdXRfZm9yX2ZpbGUodGVzdF9maWxl
KQorICAgICAgICAgICAgaWYgc2VsZi5fdGVzdF9yZXF1aXJlc19sb2NrKHRlc3RfZmlsZSk6Cisg
ICAgICAgICAgICAgICAgbG9ja2VkX2lucHV0cy5hcHBlbmQodGVzdF9pbnB1dCkKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdW5sb2NrZWRfaW5wdXRzLmFwcGVuZCh0ZXN0X2lu
cHV0KQorICAgICAgICByZXR1cm4gW1Rlc3RTaGFyZCgnbG9ja2VkX3Rlc3RzJywgbG9ja2VkX2lu
cHV0cyldLCBbVGVzdFNoYXJkKCd1bmxvY2tlZF90ZXN0cycsIHVubG9ja2VkX2lucHV0cyldCisK
KyAgICBkZWYgX3NoYXJkX2V2ZXJ5X2ZpbGUoc2VsZiwgdGVzdF9maWxlcyk6CisgICAgICAgICIi
IlJldHVybnMgdHdvIGxpc3RzIG9mIHNoYXJkcywgZWFjaCBzaGFyZCBjb250YWluaW5nIGEgc2lu
Z2xlIHRlc3QgZmlsZS4KKworICAgICAgICBUaGlzIG1vZGUgZ2V0cyBtYXhpbWFsIHBhcmFsbGVs
aXNtIGF0IHRoZSBjb3N0IG9mIG11Y2ggaGlnaGVyIGZsYWtpbmVzcy4iIiIKKyAgICAgICAgbG9j
a2VkX3NoYXJkcyA9IFtdCisgICAgICAgIHVubG9ja2VkX3NoYXJkcyA9IFtdCisgICAgICAgIGZv
ciB0ZXN0X2ZpbGUgaW4gdGVzdF9maWxlczoKKyAgICAgICAgICAgIHRlc3RfaW5wdXQgPSBzZWxm
Ll9nZXRfdGVzdF9pbnB1dF9mb3JfZmlsZSh0ZXN0X2ZpbGUpCisKKyAgICAgICAgICAgICMgTm90
ZSB0aGF0IHdlIHVzZSBhICcuJyBmb3IgdGhlIHNoYXJkIG5hbWU7IHRoZSBuYW1lIGRvZXNuJ3Qg
cmVhbGx5CisgICAgICAgICAgICAjIG1hdHRlciwgYW5kIHRoZSBvbmx5IG90aGVyIG1lYW5pbmdm
dWwgdmFsdWUgd291bGQgYmUgdGhlIGZpbGVuYW1lLAorICAgICAgICAgICAgIyB3aGljaCB3b3Vs
ZCBiZSByZWFsbHkgcmVkdW5kYW50LgorICAgICAgICAgICAgaWYgc2VsZi5fdGVzdF9yZXF1aXJl
c19sb2NrKHRlc3RfZmlsZSk6CisgICAgICAgICAgICAgICAgbG9ja2VkX3NoYXJkcy5hcHBlbmQo
VGVzdFNoYXJkKCcuJywgW3Rlc3RfaW5wdXRdKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgdW5sb2NrZWRfc2hhcmRzLmFwcGVuZChUZXN0U2hhcmQoJy4nLCBbdGVzdF9pbnB1
dF0pKQorCisgICAgICAgIHJldHVybiBsb2NrZWRfc2hhcmRzLCB1bmxvY2tlZF9zaGFyZHMKKwor
ICAgIGRlZiBfc2hhcmRfYnlfZGlyZWN0b3J5KHNlbGYsIHRlc3RfZmlsZXMsIG51bV93b3JrZXJz
KToKKyAgICAgICAgIiIiUmV0dXJucyB0d28gbGlzdHMgb2Ygc2hhcmRzLCBlYWNoIHNoYXJkIGNv
bnRhaW5pbmcgYWxsIHRoZSBmaWxlcyBpbiBhIGRpcmVjdG9yeS4KKworICAgICAgICBUaGlzIGlz
IHRoZSBkZWZhdWx0IG1vZGUsIGFuZCBnZXRzIGFzIG11Y2ggcGFyYWxsZWxpc20gYXMgd2UgY2Fu
IHdoaWxlCisgICAgICAgIG1pbmltaXppbmcgZmxha2luZXNzIGNhdXNlZCBieSBpbnRlci10ZXN0
IGRlcGVuZGVuY2llcy4iIiIKKyAgICAgICAgbG9ja2VkX3NoYXJkcyA9IFtdCisgICAgICAgIHVu
bG9ja2VkX3NoYXJkcyA9IFtdCisgICAgICAgIHRlc3RzX2J5X2RpciA9IHt9CisgICAgICAgICMg
RklYTUU6IEdpdmVuIHRoYXQgdGhlIHRlc3RzIGFyZSBhbHJlYWR5IHNvcnRlZCBieSBkaXJlY3Rv
cnksCisgICAgICAgICMgd2UgY2FuIHByb2JhYmx5IHJld3JpdGUgdGhpcyB0byBiZSBjbGVhcmVy
IGFuZCBmYXN0ZXIuCisgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gdGVzdF9maWxlczoKKyAgICAg
ICAgICAgIGRpcmVjdG9yeSA9IHNlbGYuX2dldF9kaXJfZm9yX3Rlc3RfZmlsZSh0ZXN0X2ZpbGUp
CisgICAgICAgICAgICB0ZXN0X2lucHV0ID0gc2VsZi5fZ2V0X3Rlc3RfaW5wdXRfZm9yX2ZpbGUo
dGVzdF9maWxlKQorICAgICAgICAgICAgdGVzdHNfYnlfZGlyLnNldGRlZmF1bHQoZGlyZWN0b3J5
LCBbXSkKKyAgICAgICAgICAgIHRlc3RzX2J5X2RpcltkaXJlY3RvcnldLmFwcGVuZCh0ZXN0X2lu
cHV0KQorCisgICAgICAgIGZvciBkaXJlY3RvcnksIHRlc3RfaW5wdXRzIGluIHRlc3RzX2J5X2Rp
ci5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHNoYXJkID0gVGVzdFNoYXJkKGRpcmVjdG9yeSwg
dGVzdF9pbnB1dHMpCisgICAgICAgICAgICBpZiBzZWxmLl90ZXN0X3JlcXVpcmVzX2xvY2soZGly
ZWN0b3J5KToKKyAgICAgICAgICAgICAgICBsb2NrZWRfc2hhcmRzLmFwcGVuZChzaGFyZCkKKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdW5sb2NrZWRfc2hhcmRzLmFwcGVuZChz
aGFyZCkKKworICAgICAgICAjIFNvcnQgdGhlIHNoYXJkcyBieSBkaXJlY3RvcnkgbmFtZS4KKyAg
ICAgICAgbG9ja2VkX3NoYXJkcy5zb3J0KGtleT1sYW1iZGEgc2hhcmQ6IHNoYXJkLm5hbWUpCisg
ICAgICAgIHVubG9ja2VkX3NoYXJkcy5zb3J0KGtleT1sYW1iZGEgc2hhcmQ6IHNoYXJkLm5hbWUp
CisKKyAgICAgICAgcmV0dXJuIChzZWxmLl9yZXNpemVfc2hhcmRzKGxvY2tlZF9zaGFyZHMsIHNl
bGYuX21heF9sb2NrZWRfc2hhcmRzKG51bV93b3JrZXJzKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdsb2NrZWRfc2hhcmQnKSwKKyAgICAgICAgICAgICAgICB1bmxvY2tl
ZF9zaGFyZHMpCisKKyAgICBkZWYgX21heF9sb2NrZWRfc2hhcmRzKHNlbGYsIG51bV93b3JrZXJz
KToKKyAgICAgICAgIyBQdXQgYSBjZWlsaW5nIG9uIHRoZSBudW1iZXIgb2YgbG9ja2VkIHNoYXJk
cywgc28gdGhhdCB3ZQorICAgICAgICAjIGRvbid0IGhhbW1lciB0aGUgc2VydmVycyB0b28gYmFk
bHkuCisKKyAgICAgICAgIyBGSVhNRTogRm9yIG5vdywgbGltaXQgdG8gb25lIHNoYXJkLiBBZnRl
ciB0ZXN0aW5nIHRvIG1ha2Ugc3VyZSB3ZQorICAgICAgICAjIGNhbiBoYW5kbGUgbXVsdGlwbGUg
c2hhcmRzLCB3ZSBzaG91bGQgcHJvYmFibHkgZG8gc29tZXRoaW5nIGxpa2UKKyAgICAgICAgIyBs
aW1pdCB0aGlzIHRvIG5vIG1vcmUgdGhhbiBhIHF1YXJ0ZXIgb2YgYWxsIHdvcmtlcnMsIGUuZy46
CisgICAgICAgICMgcmV0dXJuIG1heChtYXRoLmNlaWwobnVtX3dvcmtlcnMgLyA0LjApLCAxKQor
ICAgICAgICByZXR1cm4gMQorCisgICAgZGVmIF9yZXNpemVfc2hhcmRzKHNlbGYsIG9sZF9zaGFy
ZHMsIG1heF9uZXdfc2hhcmRzLCBzaGFyZF9uYW1lX3ByZWZpeCk6CisgICAgICAgICIiIlRha2Vz
IGEgbGlzdCBvZiBzaGFyZHMgYW5kIHJlZGlzdHJpYnV0ZXMgdGhlIHRlc3RzIGludG8gbm8gbW9y
ZQorICAgICAgICB0aGFuIHxtYXhfbmV3X3NoYXJkc3wgbmV3IHNoYXJkcy4iIiIKKworICAgICAg
ICAjIFRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGF0IGVhY2ggaW5wdXQgc2hhcmQgb25s
eSBjb250YWlucyB0ZXN0cyBmcm9tIGEKKyAgICAgICAgIyBzaW5nbGUgZGlyZWN0b3J5LCBhbmQg
dGhhdCB0ZXN0cyBpbiBlYWNoIHNoYXJkIG11c3QgcmVtYWluIHRvZ2V0aGVyOyBhcyBhCisgICAg
ICAgICMgcmVzdWx0LCBhIGdpdmVuIGlucHV0IHNoYXJkIGlzIG5ldmVyIHNwbGl0IGJldHdlZW4g
b3V0cHV0IHNoYXJkcy4KKyAgICAgICAgIworICAgICAgICAjIEVhY2ggb3V0cHV0IHNoYXJkIGNv
bnRhaW5zIHRoZSB0ZXN0cyBmcm9tIG9uZSBvciBtb3JlIGlucHV0IHNoYXJkcyBhbmQKKyAgICAg
ICAgIyBoZW5jZSBtYXkgY29udGFpbiB0ZXN0cyBmcm9tIG11bHRpcGxlIGRpcmVjdG9yaWVzLgor
CisgICAgICAgIGRlZiBkaXZpZGVfYW5kX3JvdW5kX3VwKG51bWVyYXRvciwgZGl2aXNvcik6Cisg
ICAgICAgICAgICByZXR1cm4gaW50KG1hdGguY2VpbChmbG9hdChudW1lcmF0b3IpIC8gZGl2aXNv
cikpCisKKyAgICAgICAgZGVmIGV4dHJhY3RfYW5kX2ZsYXR0ZW4oc2hhcmRzKToKKyAgICAgICAg
ICAgIHRlc3RfaW5wdXRzID0gW10KKyAgICAgICAgICAgIGZvciBzaGFyZCBpbiBzaGFyZHM6Cisg
ICAgICAgICAgICAgICAgdGVzdF9pbnB1dHMuZXh0ZW5kKHNoYXJkLnRlc3RfaW5wdXRzKQorICAg
ICAgICAgICAgcmV0dXJuIHRlc3RfaW5wdXRzCisKKyAgICAgICAgZGVmIHNwbGl0X2F0KHNlcSwg
aW5kZXgpOgorICAgICAgICAgICAgcmV0dXJuIChzZXFbOmluZGV4XSwgc2VxW2luZGV4Ol0pCisK
KyAgICAgICAgbnVtX29sZF9wZXJfbmV3ID0gZGl2aWRlX2FuZF9yb3VuZF91cChsZW4ob2xkX3No
YXJkcyksIG1heF9uZXdfc2hhcmRzKQorICAgICAgICBuZXdfc2hhcmRzID0gW10KKyAgICAgICAg
cmVtYWluaW5nX3NoYXJkcyA9IG9sZF9zaGFyZHMKKyAgICAgICAgd2hpbGUgcmVtYWluaW5nX3No
YXJkczoKKyAgICAgICAgICAgIHNvbWVfc2hhcmRzLCByZW1haW5pbmdfc2hhcmRzID0gc3BsaXRf
YXQocmVtYWluaW5nX3NoYXJkcywgbnVtX29sZF9wZXJfbmV3KQorICAgICAgICAgICAgbmV3X3No
YXJkcy5hcHBlbmQoVGVzdFNoYXJkKCclc18lZCcgJSAoc2hhcmRfbmFtZV9wcmVmaXgsIGxlbihu
ZXdfc2hhcmRzKSArIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV4dHJhY3RfYW5kX2ZsYXR0ZW4oc29tZV9zaGFyZHMpKSkKKyAgICAgICAgcmV0dXJuIG5ld19z
aGFyZHMKKworICAgIGRlZiBfY29udGFpbnNfdGVzdHMoc2VsZiwgc3ViZGlyKToKKyAgICAgICAg
Zm9yIHRlc3RfZmlsZSBpbiBzZWxmLl90ZXN0X2ZpbGVzOgorICAgICAgICAgICAgaWYgdGVzdF9m
aWxlLmZpbmQoc3ViZGlyKSA+PSAwOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAg
ICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9sb2dfbnVtX3dvcmtlcnMoc2VsZiwgbnVtX3dv
cmtlcnMsIG51bV9zaGFyZHMsIG51bV9sb2NrZWRfc2hhcmRzKToKKyAgICAgICAgZHJpdmVyX25h
bWUgPSBzZWxmLl9wb3J0LmRyaXZlcl9uYW1lKCkKKyAgICAgICAgaWYgbnVtX3dvcmtlcnMgPT0g
MToKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfY29uZmlnKCJSdW5uaW5nIDEgJXMg
b3ZlciAlcyIgJQorICAgICAgICAgICAgICAgIChkcml2ZXJfbmFtZSwgZ3JhbW1hci5wbHVyYWxp
emUoJ3NoYXJkJywgbnVtX3NoYXJkcykpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2Vs
Zi5fcHJpbnRlci5wcmludF9jb25maWcoIlJ1bm5pbmcgJWQgJXNzIGluIHBhcmFsbGVsIG92ZXIg
JWQgc2hhcmRzICglZCBsb2NrZWQpIiAlCisgICAgICAgICAgICAgICAgKG51bV93b3JrZXJzLCBk
cml2ZXJfbmFtZSwgbnVtX3NoYXJkcywgbnVtX2xvY2tlZF9zaGFyZHMpKQorCisgICAgZGVmIF9y
dW5fdGVzdHMoc2VsZiwgZmlsZV9saXN0LCByZXN1bHRfc3VtbWFyeSk6CisgICAgICAgICIiIlJ1
bnMgdGhlIHRlc3RzIGluIHRoZSBmaWxlX2xpc3QuCisKKyAgICAgICAgUmV0dXJuOiBBIHR1cGxl
IChpbnRlcnJ1cHRlZCwga2V5Ym9hcmRfaW50ZXJydXB0ZWQsIHRocmVhZF90aW1pbmdzLAorICAg
ICAgICAgICAgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKKyAgICAgICAg
ICAgIGludGVycnVwdGVkIGlzIHdoZXRoZXIgdGhlIHJ1biB3YXMgaW50ZXJydXB0ZWQKKyAgICAg
ICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkIGlzIHdoZXRoZXIgdGhlIGludGVycnVwdGlvbiB3
YXMgYmVjYXVzZSBzb21lb25lCisgICAgICAgICAgICAgIHR5cGVkIEN0cmxeQworICAgICAgICAg
ICAgdGhyZWFkX3RpbWluZ3MgaXMgYSBsaXN0IG9mIGRpY3RzIHdpdGggdGhlIHRvdGFsIHJ1bnRp
bWUKKyAgICAgICAgICAgICAgb2YgZWFjaCB0aHJlYWQgd2l0aCAnbmFtZScsICdudW1fdGVzdHMn
LCAndG90YWxfdGltZScgcHJvcGVydGllcworICAgICAgICAgICAgdGVzdF90aW1pbmdzIGlzIGEg
bGlzdCBvZiB0aW1pbmdzIGZvciBlYWNoIHNoYXJkZWQgc3ViZGlyZWN0b3J5CisgICAgICAgICAg
ICAgIG9mIHRoZSBmb3JtIFt0aW1lLCBkaXJlY3RvcnlfbmFtZSwgbnVtX3Rlc3RzXQorICAgICAg
ICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MgaXMgYSBsaXN0IG9mIHJ1biB0aW1lcyBmb3Ig
ZWFjaCB0ZXN0CisgICAgICAgICAgICAgIGluIHRoZSBmb3JtIHtmaWxlbmFtZTpmaWxlbmFtZSwg
dGVzdF9ydW5fdGltZTp0ZXN0X3J1bl90aW1lfQorICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6
IHN1bW1hcnkgb2JqZWN0IHRvIHBvcHVsYXRlIHdpdGggdGhlIHJlc3VsdHMKKyAgICAgICAgIiIi
CisgICAgICAgIHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkgPSByZXN1bHRfc3VtbWFyeQor
ICAgICAgICBzZWxmLl9hbGxfcmVzdWx0cyA9IFtdCisgICAgICAgIHNlbGYuX2dyb3VwX3N0YXRz
ID0ge30KKyAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRlcyA9IHt9CisKKyAgICAgICAga2V5Ym9h
cmRfaW50ZXJydXB0ZWQgPSBGYWxzZQorICAgICAgICBpbnRlcnJ1cHRlZCA9IEZhbHNlCisgICAg
ICAgIHRocmVhZF90aW1pbmdzID0gW10KKworICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3Vw
ZGF0ZSgnU2hhcmRpbmcgdGVzdHMgLi4uJykKKyAgICAgICAgbG9ja2VkX3NoYXJkcywgdW5sb2Nr
ZWRfc2hhcmRzID0gc2VsZi5fc2hhcmRfdGVzdHMoZmlsZV9saXN0LAorICAgICAgICAgICAgaW50
KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSwgc2VsZi5fb3B0aW9ucy5leHBlcmltZW50
YWxfZnVsbHlfcGFyYWxsZWwpCisKKyAgICAgICAgIyBGSVhNRTogV2UgZG9uJ3QgaGF2ZSBhIGdv
b2Qgd2F5IHRvIGNvb3JkaW5hdGUgdGhlIHdvcmtlcnMgc28gdGhhdAorICAgICAgICAjIHRoZXkg
ZG9uJ3QgdHJ5IHRvIHJ1biB0aGUgc2hhcmRzIHRoYXQgbmVlZCBhIGxvY2sgaWYgd2UgZG9uJ3Qg
YWN0dWFsbHkKKyAgICAgICAgIyBoYXZlIHRoZSBsb2NrLiBUaGUgZWFzaWVzdCBzb2x1dGlvbiBh
dCB0aGUgbW9tZW50IGlzIHRvIGdyYWIgdGhlCisgICAgICAgICMgbG9jayBhdCB0aGUgYmVnaW5u
aW5nIG9mIHRoZSBydW4sIGFuZCB0aGVuIHJ1biBhbGwgb2YgdGhlIGxvY2tlZAorICAgICAgICAj
IHNoYXJkcyBmaXJzdC4gVGhpcyBtaW5pbWl6ZXMgdGhlIHRpbWUgc3BlbnQgaG9sZGluZyB0aGUg
bG9jaywgYnV0CisgICAgICAgICMgbWVhbnMgdGhhdCB3ZSB3b24ndCBiZSBydW5uaW5nIHRlc3Rz
IHdoaWxlIHdlJ3JlIHdhaXRpbmcgZm9yIHRoZSBsb2NrLgorICAgICAgICAjIElmIHRoaXMgYmVj
b21lcyBhIHByb2JsZW0gaW4gcHJhY3RpY2Ugd2UnbGwgbmVlZCB0byBjaGFuZ2UgdGhpcy4KKwor
ICAgICAgICBhbGxfc2hhcmRzID0gbG9ja2VkX3NoYXJkcyArIHVubG9ja2VkX3NoYXJkcworICAg
ICAgICBzZWxmLl9yZW1haW5pbmdfbG9ja2VkX3NoYXJkcyA9IGxvY2tlZF9zaGFyZHMKKyAgICAg
ICAgaWYgbG9ja2VkX3NoYXJkczoKKyAgICAgICAgICAgIHNlbGYuc3RhcnRfc2VydmVyc193aXRo
X2xvY2soKQorCisgICAgICAgIG51bV93b3JrZXJzID0gbWluKGludChzZWxmLl9vcHRpb25zLmNo
aWxkX3Byb2Nlc3NlcyksIGxlbihhbGxfc2hhcmRzKSkKKyAgICAgICAgc2VsZi5fbG9nX251bV93
b3JrZXJzKG51bV93b3JrZXJzLCBsZW4oYWxsX3NoYXJkcyksIGxlbihsb2NrZWRfc2hhcmRzKSkK
KworICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24gPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuZ2V0
KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgd29ya2VyLldvcmtlcikKKworICAgICAg
ICBpZiBzZWxmLl9vcHRpb25zLmRyeV9ydW46CisgICAgICAgICAgICByZXR1cm4gKGtleWJvYXJk
X2ludGVycnVwdGVkLCBpbnRlcnJ1cHRlZCwgdGhyZWFkX3RpbWluZ3MsCisgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX2dyb3VwX3N0YXRzLCBzZWxmLl9hbGxfcmVzdWx0cykKKworICAgICAgICBz
ZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgJXMgLi4uJyAlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXIucGx1cmFsaXplKCd3b3JrZXInLCBudW1f
d29ya2VycykpCisgICAgICAgIGZvciB3b3JrZXJfbnVtYmVyIGluIHhyYW5nZShudW1fd29ya2Vy
cyk6CisgICAgICAgICAgICB3b3JrZXJfY29ubmVjdGlvbiA9IG1hbmFnZXJfY29ubmVjdGlvbi5z
dGFydF93b3JrZXIod29ya2VyX251bWJlcikKKyAgICAgICAgICAgIHdvcmtlcl9zdGF0ZSA9IF9X
b3JrZXJTdGF0ZSh3b3JrZXJfbnVtYmVyLCB3b3JrZXJfY29ubmVjdGlvbikKKyAgICAgICAgICAg
IHNlbGYuX3dvcmtlcl9zdGF0ZXNbd29ya2VyX2Nvbm5lY3Rpb24ubmFtZV0gPSB3b3JrZXJfc3Rh
dGUKKworICAgICAgICAgICAgIyBGSVhNRTogSWYgd2Ugc3RhcnQgd29ya2VycyB1cCB0b28gcXVp
Y2tseSwgRHVtcFJlbmRlclRyZWUgYXBwZWFycworICAgICAgICAgICAgIyB0byB0aHJhc2ggb24g
c29tZXRoaW5nIGFuZCB0aW1lIG91dCBpdHMgZmlyc3QgZmV3IHRlc3RzLiBVbnRpbAorICAgICAg
ICAgICAgIyB3ZSBjYW4gZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24sIHNsZWVwIGEgYml0IGlu
IGJldHdlZW4KKyAgICAgICAgICAgICMgd29ya2Vycy4gVGhpcyBuZWVkcyBhIGJ1ZyBmaWxlZC4K
KyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJp
bnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0aW5nIC4uLiIpCisgICAgICAgIGZvciBzaGFyZCBpbiBh
bGxfc2hhcmRzOgorICAgICAgICAgICAgIyBGSVhNRTogQ2hhbmdlICd0ZXN0X2xpc3QnIHRvICdz
aGFyZCcsIG1ha2Ugc2hhcmRpbmcgcHVibGljLgorICAgICAgICAgICAgbWFuYWdlcl9jb25uZWN0
aW9uLnBvc3RfbWVzc2FnZSgndGVzdF9saXN0Jywgc2hhcmQubmFtZSwgc2hhcmQudGVzdF9pbnB1
dHMpCisKKyAgICAgICAgIyBXZSBwb3N0IG9uZSAnc3RvcCcgbWVzc2FnZSBmb3IgZWFjaCB3b3Jr
ZXIuIEJlY2F1c2UgdGhlIHN0b3AgbWVzc2FnZQorICAgICAgICAjIGFyZSBzZW50IGFmdGVyIGFs
bCBvZiB0aGUgdGVzdHMsIGFuZCBiZWNhdXNlIGVhY2ggd29ya2VyIHdpbGwgc3RvcAorICAgICAg
ICAjIHJlYWRpbmcgbWVzc3NhZ2VzIGFmdGVyIHJlY2VpdmluZyBhIHN0b3AsIHdlIGNhbiBiZSBz
dXJlIGVhY2gKKyAgICAgICAgIyB3b3JrZXIgd2lsbCBnZXQgYSBzdG9wIG1lc3NhZ2UgYW5kIGhl
bmNlIHRoZXkgd2lsbCBhbGwgc2h1dCBkb3duLgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobnVt
X3dvcmtlcnMpOgorICAgICAgICAgICAgbWFuYWdlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgn
c3RvcCcpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNfZG9u
ZSgpOgorICAgICAgICAgICAgICAgICMgVGVtcG9yYXJpbHkgZGlzYWJsZWQgdG8gc2VlIGhvdyB0
aGlzIGNvZGUgZWZmZWN0IHBlcmZvcm1hbmNlIG9uIHRoZSBidWlsZGJvdHMuCisgICAgICAgICAg
ICAgICAgIyBpZiBzZWxmLl9wb3J0LmV4ZWN1dGl2ZSgpLnJ1bm5pbmdfcGlkcyhzZWxmLl9wb3J0
LmlzX2NyYXNoX3JlcG9ydGVyKToKKyAgICAgICAgICAgICAgICAjICAgICBzZWxmLl9wcmludGVy
LnByaW50X3VwZGF0ZSgiV2FpdGluZyBmb3IgY3Jhc2ggcmVwb3J0ZXIgLi4uIikKKyAgICAgICAg
ICAgICAgICAjICAgICBzZWxmLl9wb3J0LmV4ZWN1dGl2ZSgpLndhaXRfbmV3ZXN0KHNlbGYuX3Bv
cnQuaXNfY3Jhc2hfcmVwb3J0ZXIpCisgICAgICAgICAgICAgICAgbWFuYWdlcl9jb25uZWN0aW9u
LnJ1bl9tZXNzYWdlX2xvb3AoZGVsYXlfc2Vjcz0xLjApCisKKyAgICAgICAgICAgICMgTWFrZSBz
dXJlIGFsbCBvZiB0aGUgd29ya2VycyBoYXZlIHNodXQgZG93biAoaWYgcG9zc2libGUpLgorICAg
ICAgICAgICAgZm9yIHdvcmtlcl9zdGF0ZSBpbiBzZWxmLl93b3JrZXJfc3RhdGVzLnZhbHVlcygp
OgorICAgICAgICAgICAgICAgIGlmIHdvcmtlcl9zdGF0ZS53b3JrZXJfY29ubmVjdGlvbi5pc19h
bGl2ZSgpOgorICAgICAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdXYWl0aW5nIGZvciB3b3Jr
ZXIgJWQgdG8gZXhpdCcgJSB3b3JrZXJfc3RhdGUubnVtYmVyKQorICAgICAgICAgICAgICAgICAg
ICB3b3JrZXJfc3RhdGUud29ya2VyX2Nvbm5lY3Rpb24uam9pbig1LjApCisgICAgICAgICAgICAg
ICAgICAgIGlmIHdvcmtlcl9zdGF0ZS53b3JrZXJfY29ubmVjdGlvbi5pc19hbGl2ZSgpOgorICAg
ICAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignV29ya2VyICVkIGRpZCBub3QgZXhpdCBp
biB0aW1lLicgJSB3b3JrZXJfc3RhdGUubnVtYmVyKQorCisgICAgICAgIGV4Y2VwdCBLZXlib2Fy
ZEludGVycnVwdDoKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdJbnRl
cnJ1cHRlZCwgZXhpdGluZyAuLi4nKQorICAgICAgICAgICAgc2VsZi5jYW5jZWxfd29ya2Vycygp
CisgICAgICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IFRydWUKKyAgICAgICAgZXhjZXB0
IFRlc3RSdW5JbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIF9sb2cuaW5mbyhl
LnJlYXNvbikKKyAgICAgICAgICAgIHNlbGYuY2FuY2VsX3dvcmtlcnMoKQorICAgICAgICAgICAg
aW50ZXJydXB0ZWQgPSBUcnVlCisgICAgICAgIGV4Y2VwdCBXb3JrZXJFeGNlcHRpb246CisgICAg
ICAgICAgICBzZWxmLmNhbmNlbF93b3JrZXJzKCkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAg
IGV4Y2VwdDoKKyAgICAgICAgICAgICMgVW5leHBlY3RlZCBleGNlcHRpb247IGRvbid0IHRyeSB0
byBjbGVhbiB1cCB3b3JrZXJzLgorICAgICAgICAgICAgX2xvZy5lcnJvcigiRXhjZXB0aW9uIHJh
aXNlZCwgZXhpdGluZyIpCisgICAgICAgICAgICBzZWxmLmNhbmNlbF93b3JrZXJzKCkKKyAgICAg
ICAgICAgIHJhaXNlCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnN0b3Bfc2Vy
dmVyc193aXRoX2xvY2soKQorCisgICAgICAgIHRocmVhZF90aW1pbmdzID0gW3dvcmtlcl9zdGF0
ZS5zdGF0cyBmb3Igd29ya2VyX3N0YXRlIGluIHNlbGYuX3dvcmtlcl9zdGF0ZXMudmFsdWVzKCld
CisKKyAgICAgICAgIyBGSVhNRTogc2hvdWxkIHRoaXMgYmUgYSBjbGFzcyBpbnN0ZWFkIG9mIGEg
dHVwbGU/CisgICAgICAgIHJldHVybiAoaW50ZXJydXB0ZWQsIGtleWJvYXJkX2ludGVycnVwdGVk
LCB0aHJlYWRfdGltaW5ncywKKyAgICAgICAgICAgICAgICBzZWxmLl9ncm91cF9zdGF0cywgc2Vs
Zi5fYWxsX3Jlc3VsdHMpCisKKyAgICBkZWYgdXBkYXRlKHNlbGYpOgorICAgICAgICBzZWxmLnVw
ZGF0ZV9zdW1tYXJ5KHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkpCisKKyAgICBkZWYgX2Nv
bGxlY3RfdGltaW5nX2luZm8oc2VsZiwgdGhyZWFkcyk6CisgICAgICAgIHRlc3RfdGltaW5ncyA9
IHt9CisgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzID0gW10KKyAgICAgICAgdGhyZWFk
X3RpbWluZ3MgPSBbXQorCisgICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoKKyAgICAgICAg
ICAgIHRocmVhZF90aW1pbmdzLmFwcGVuZCh7J25hbWUnOiB0aHJlYWQuZ2V0TmFtZSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnVtX3Rlc3RzJzogdGhyZWFkLmdldF9u
dW1fdGVzdHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvdGFsX3Rp
bWUnOiB0aHJlYWQuZ2V0X3RvdGFsX3RpbWUoKX0pCisgICAgICAgICAgICB0ZXN0X3RpbWluZ3Mu
dXBkYXRlKHRocmVhZC5nZXRfdGVzdF9ncm91cF90aW1pbmdfc3RhdHMoKSkKKyAgICAgICAgICAg
IGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLmV4dGVuZCh0aHJlYWQuZ2V0X3Rlc3RfcmVzdWx0cygp
KQorCisgICAgICAgIHJldHVybiAodGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywgaW5kaXZp
ZHVhbF90ZXN0X3RpbWluZ3MpCisKKyAgICBkZWYgbmVlZHNfaHR0cChzZWxmKToKKyAgICAgICAg
IiIiUmV0dXJucyB3aGV0aGVyIHRoZSB0ZXN0IHJ1bm5lciBuZWVkcyBhbiBIVFRQIHNlcnZlci4i
IiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbnRhaW5zX3Rlc3RzKHNlbGYuSFRUUF9TVUJESVIp
CisKKyAgICBkZWYgbmVlZHNfd2Vic29ja2V0KHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHdo
ZXRoZXIgdGhlIHRlc3QgcnVubmVyIG5lZWRzIGEgV0VCU09DS0VUIHNlcnZlci4iIiIKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2NvbnRhaW5zX3Rlc3RzKHNlbGYuV0VCU09DS0VUX1NVQkRJUikKKwor
ICAgIGRlZiBzZXRfdXBfcnVuKHNlbGYpOgorICAgICAgICAiIiJDb25maWd1cmVzIHRoZSBzeXN0
ZW0gdG8gYmUgcmVhZHkgdG8gcnVuIHRlc3RzLgorCisgICAgICAgIFJldHVybnMgYSBSZXN1bHRT
dW1tYXJ5IG9iamVjdCBpZiB3ZSBzaG91bGQgY29udGludWUgdG8gcnVuIHRlc3RzLAorICAgICAg
ICBvciBOb25lIGlmIHdlIHNob3VsZCBhYm9ydC4KKworICAgICAgICAiIiIKKyAgICAgICAgIyBU
aGlzIG11c3QgYmUgc3RhcnRlZCBiZWZvcmUgd2UgY2hlY2sgdGhlIHN5c3RlbSBkZXBlbmRlbmNp
ZXMsCisgICAgICAgICMgc2luY2UgdGhlIGhlbHBlciBtYXkgZG8gdGhpbmdzIHRvIG1ha2UgdGhl
IHNldHVwIGNvcnJlY3QuCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFy
dGluZyBoZWxwZXIgLi4uIikKKyAgICAgICAgc2VsZi5fcG9ydC5zdGFydF9oZWxwZXIoKQorCisg
ICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgc3lzdGVtIGRlcGVuZGVuY2llcyAodGhlbWVzLCBmb250
cywgLi4uKSBhcmUgY29ycmVjdC4KKyAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMubm9jaGVj
a19zeXNfZGVwczoKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJDaGVj
a2luZyBzeXN0ZW0gZGVwZW5kZW5jaWVzIC4uLiIpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5f
cG9ydC5jaGVja19zeXNfZGVwcyhzZWxmLm5lZWRzX2h0dHAoKSk6CisgICAgICAgICAgICAgICAg
c2VsZi5fcG9ydC5zdG9wX2hlbHBlcigpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKwor
ICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmNsb2JiZXJfb2xkX3Jlc3VsdHM6CisgICAgICAgICAg
ICBzZWxmLl9jbG9iYmVyX29sZF9yZXN1bHRzKCkKKworICAgICAgICAjIENyZWF0ZSB0aGUgb3V0
cHV0IGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuCisgICAgICAgIHNlbGYu
X3BvcnQubWF5YmVfbWFrZV9kaXJlY3Rvcnkoc2VsZi5fcmVzdWx0c19kaXJlY3RvcnkpCisKKyAg
ICAgICAgc2VsZi5fcG9ydC5zZXR1cF90ZXN0X3J1bigpCisKKyAgICAgICAgc2VsZi5fcHJpbnRl
ci5wcmludF91cGRhdGUoIlByZXBhcmluZyB0ZXN0cyAuLi4iKQorICAgICAgICByZXN1bHRfc3Vt
bWFyeSA9IHNlbGYucHJlcGFyZV9saXN0c19hbmRfcHJpbnRfb3V0cHV0KCkKKyAgICAgICAgaWYg
bm90IHJlc3VsdF9zdW1tYXJ5OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBy
ZXR1cm4gcmVzdWx0X3N1bW1hcnkKKworICAgIGRlZiBydW4oc2VsZiwgcmVzdWx0X3N1bW1hcnkp
OgorICAgICAgICAiIiJSdW4gYWxsIG91ciB0ZXN0cyBvbiBhbGwgb3VyIHRlc3QgZmlsZXMuCisK
KyAgICAgICAgRm9yIGVhY2ggdGVzdCBmaWxlLCB3ZSBydW4gZWFjaCB0ZXN0IHR5cGUuIElmIHRo
ZXJlIGFyZSBhbnkgZmFpbHVyZXMsCisgICAgICAgIHdlIGNvbGxlY3QgdGhlbSBmb3IgcmVwb3J0
aW5nLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IGEgc3VtbWFy
eSBvYmplY3QgdHJhY2tpbmcgdGhlIHRlc3QgcmVzdWx0cy4KKworICAgICAgICBSZXR1cm46Cisg
ICAgICAgICAgVGhlIG51bWJlciBvZiB1bmV4cGVjdGVkIHJlc3VsdHMgKDAgPT0gc3VjY2VzcykK
KyAgICAgICAgIiIiCisgICAgICAgICMgZ2F0aGVyX3Rlc3RfZmlsZXMoKSBtdXN0IGhhdmUgYmVl
biBjYWxsZWQgZmlyc3QgdG8gaW5pdGlhbGl6ZSB1cy4KKyAgICAgICAgIyBJZiB3ZSBkaWRuJ3Qg
ZmluZCBhbnkgZmlsZXMgdG8gdGVzdCwgd2UndmUgZXJyb3JlZCBvdXQgYWxyZWFkeSBpbgorICAg
ICAgICAjIHByZXBhcmVfbGlzdHNfYW5kX3ByaW50X291dHB1dCgpLgorICAgICAgICBhc3NlcnQo
bGVuKHNlbGYuX3Rlc3RfZmlsZXMpKQorCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUo
KQorCisgICAgICAgIGludGVycnVwdGVkLCBrZXlib2FyZF9pbnRlcnJ1cHRlZCwgdGhyZWFkX3Rp
bWluZ3MsIHRlc3RfdGltaW5ncywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MgPSBzZWxmLl9ydW5f
dGVzdHMoc2VsZi5fdGVzdF9maWxlc19saXN0LCByZXN1bHRfc3VtbWFyeSkKKworICAgICAgICAj
IFdlIGV4Y2x1ZGUgdGhlIGNyYXNoZXMgZnJvbSB0aGUgbGlzdCBvZiByZXN1bHRzIHRvIHJldHJ5
LCBiZWNhdXNlCisgICAgICAgICMgd2Ugd2FudCB0byB0cmVhdCBldmVuIGEgcG90ZW50aWFsbHkg
Zmxha3kgY3Jhc2ggYXMgYW4gZXJyb3IuCisgICAgICAgIGZhaWx1cmVzID0gc2VsZi5fZ2V0X2Zh
aWx1cmVzKHJlc3VsdF9zdW1tYXJ5LCBpbmNsdWRlX2NyYXNoZXM9RmFsc2UsIGluY2x1ZGVfbWlz
c2luZz1GYWxzZSkKKyAgICAgICAgcmV0cnlfc3VtbWFyeSA9IHJlc3VsdF9zdW1tYXJ5CisgICAg
ICAgIHdoaWxlIChsZW4oZmFpbHVyZXMpIGFuZCBzZWxmLl9vcHRpb25zLnJldHJ5X2ZhaWx1cmVz
IGFuZCBub3Qgc2VsZi5fcmV0cnlpbmcgYW5kIG5vdCBpbnRlcnJ1cHRlZCBhbmQgbm90IGtleWJv
YXJkX2ludGVycnVwdGVkKToKKyAgICAgICAgICAgIF9sb2cuaW5mbygnJykKKyAgICAgICAgICAg
IF9sb2cuaW5mbygiUmV0cnlpbmcgJWQgdW5leHBlY3RlZCBmYWlsdXJlKHMpIC4uLiIgJSBsZW4o
ZmFpbHVyZXMpKQorICAgICAgICAgICAgX2xvZy5pbmZvKCcnKQorICAgICAgICAgICAgc2VsZi5f
cmV0cnlpbmcgPSBUcnVlCisgICAgICAgICAgICByZXRyeV9zdW1tYXJ5ID0gUmVzdWx0U3VtbWFy
eShzZWxmLl9leHBlY3RhdGlvbnMsIGZhaWx1cmVzLmtleXMoKSkKKyAgICAgICAgICAgICMgTm90
ZSB0aGF0IHdlIGludGVudGlvbmFsbHkgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgaGVyZS4KKyAg
ICAgICAgICAgIHNlbGYuX3J1bl90ZXN0cyhmYWlsdXJlcy5rZXlzKCksIHJldHJ5X3N1bW1hcnkp
CisgICAgICAgICAgICBmYWlsdXJlcyA9IHNlbGYuX2dldF9mYWlsdXJlcyhyZXRyeV9zdW1tYXJ5
LCBpbmNsdWRlX2NyYXNoZXM9VHJ1ZSwgaW5jbHVkZV9taXNzaW5nPVRydWUpCisKKyAgICAgICAg
ZW5kX3RpbWUgPSB0aW1lLnRpbWUoKQorCisgICAgICAgIHNlbGYuX3ByaW50X3RpbWluZ19zdGF0
aXN0aWNzKGVuZF90aW1lIC0gc3RhcnRfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQorCisgICAgICAg
IHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQorCisgICAgICAgIHN5
cy5zdGRvdXQuZmx1c2goKQorICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKworICAgICAgICBz
ZWxmLl9wcmludGVyLnByaW50X29uZV9saW5lX3N1bW1hcnkocmVzdWx0X3N1bW1hcnkudG90YWws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3Vt
bWFyeS5leHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWQpCisKKyAgICAgICAgdW5leHBlY3RlZF9yZXN1
bHRzID0gc3VtbWFyaXplX3Jlc3VsdHMoc2VsZi5fcG9ydCwgc2VsZi5fZXhwZWN0YXRpb25zLCBy
ZXN1bHRfc3VtbWFyeSwgcmV0cnlfc3VtbWFyeSwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsIG9u
bHlfdW5leHBlY3RlZD1UcnVlLCBpbnRlcnJ1cHRlZD1pbnRlcnJ1cHRlZCkKKyAgICAgICAgc2Vs
Zi5fcHJpbnRlci5wcmludF91bmV4cGVjdGVkX3Jlc3VsdHModW5leHBlY3RlZF9yZXN1bHRzKQor
CisgICAgICAgICMgUmUtcmFpc2UgYSBLZXlib2FyZEludGVycnVwdCBpZiBuZWNlc3Nhcnkgc28g
dGhlIGNhbGxlciBjYW4gaGFuZGxlIGl0LgorICAgICAgICBpZiBrZXlib2FyZF9pbnRlcnJ1cHRl
ZDoKKyAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0CisKKyAgICAgICAgIyBGSVhN
RTogcmVtb3ZlIHJlY29yZF9yZXN1bHRzLiBJdCdzIGp1c3QgdXNlZCBmb3IgdGVzdGluZy4gVGhl
cmUncyBubyBuZWVkCisgICAgICAgICMgZm9yIGl0IHRvIGJlIGEgY29tbWFuZGxpbmUgYXJndW1l
bnQuCisgICAgICAgIGlmIChzZWxmLl9vcHRpb25zLnJlY29yZF9yZXN1bHRzIGFuZCBub3Qgc2Vs
Zi5fb3B0aW9ucy5kcnlfcnVuIGFuZAorICAgICAgICAgICAgbm90IGtleWJvYXJkX2ludGVycnVw
dGVkKToKKyAgICAgICAgICAgICMgV3JpdGUgdGhlIHNhbWUgZGF0YSB0byBsb2cgZmlsZXMgYW5k
IHVwbG9hZCBnZW5lcmF0ZWQgSlNPTiBmaWxlcworICAgICAgICAgICAgIyB0byBhcHBlbmdpbmUg
c2VydmVyLgorICAgICAgICAgICAgc3VtbWFyaXplZF9yZXN1bHRzID0gc3VtbWFyaXplX3Jlc3Vs
dHMoc2VsZi5fcG9ydCwgc2VsZi5fZXhwZWN0YXRpb25zLCByZXN1bHRfc3VtbWFyeSwgcmV0cnlf
c3VtbWFyeSwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsIG9ubHlfdW5leHBlY3RlZD1GYWxzZSwg
aW50ZXJydXB0ZWQ9aW50ZXJydXB0ZWQpCisgICAgICAgICAgICBzZWxmLl91cGxvYWRfanNvbl9m
aWxlcyh1bmV4cGVjdGVkX3Jlc3VsdHMsIHN1bW1hcml6ZWRfcmVzdWx0cywgcmVzdWx0X3N1bW1h
cnksIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQorCisgICAgICAgICMgV3JpdGUgdGhlIHN1bW1h
cnkgdG8gZGlzayAocmVzdWx0cy5odG1sKSBhbmQgZGlzcGxheSBpdCBpZiByZXF1ZXN0ZWQuCisg
ICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLmRyeV9ydW46CisgICAgICAgICAgICBzZWxmLl9j
b3B5X3Jlc3VsdHNfaHRtbF9maWxlKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuc2hv
d19yZXN1bHRzOgorICAgICAgICAgICAgICAgIHNlbGYuX3Nob3dfcmVzdWx0c19odG1sX2ZpbGUo
cmVzdWx0X3N1bW1hcnkpCisKKyAgICAgICAgIyBJZ25vcmUgZmxha3kgZmFpbHVyZXMgYW5kIHVu
ZXhwZWN0ZWQgcGFzc2VzIHNvIHdlIGRvbid0IHR1cm4gdGhlCisgICAgICAgICMgYm90IHJlZCBm
b3IgdGhvc2UuCisgICAgICAgIHJldHVybiB1bmV4cGVjdGVkX3Jlc3VsdHNbJ251bV9yZWdyZXNz
aW9ucyddCisKKyAgICBkZWYgc3RhcnRfc2VydmVyc193aXRoX2xvY2soc2VsZik6CisgICAgICAg
IHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdBY3F1aXJpbmcgaHR0cCBsb2NrIC4uLicpCisg
ICAgICAgIHNlbGYuX3BvcnQuYWNxdWlyZV9odHRwX2xvY2soKQorICAgICAgICBzZWxmLl9wcmlu
dGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgSFRUUCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgc2Vs
Zi5fcG9ydC5zdGFydF9odHRwX3NlcnZlcigpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRf
dXBkYXRlKCdTdGFydGluZyBXZWJTb2NrZXQgc2VydmVyIC4uLicpCisgICAgICAgIHNlbGYuX3Bv
cnQuc3RhcnRfd2Vic29ja2V0X3NlcnZlcigpCisgICAgICAgIHNlbGYuX2hhc19odHRwX2xvY2sg
PSBUcnVlCisKKyAgICBkZWYgc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jayhzZWxmKToKKyAgICAgICAg
aWYgc2VsZi5faGFzX2h0dHBfbG9jazoKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRf
dXBkYXRlKCdTdG9wcGluZyBIVFRQIHNlcnZlciAuLi4nKQorICAgICAgICAgICAgc2VsZi5fcG9y
dC5zdG9wX2h0dHBfc2VydmVyKCkKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBk
YXRlKCdTdG9wcGluZyBXZWJTb2NrZXQgc2VydmVyIC4uLicpCisgICAgICAgICAgICBzZWxmLl9w
b3J0LnN0b3Bfd2Vic29ja2V0X3NlcnZlcigpCisgICAgICAgICAgICBzZWxmLl9wcmludGVyLnBy
aW50X3VwZGF0ZSgnUmVsZWFzaW5nIHNlcnZlciBsb2NrIC4uLicpCisgICAgICAgICAgICBzZWxm
Ll9wb3J0LnJlbGVhc2VfaHR0cF9sb2NrKCkKKyAgICAgICAgICAgIHNlbGYuX2hhc19odHRwX2xv
Y2sgPSBGYWxzZQorCisgICAgZGVmIGNsZWFuX3VwX3J1bihzZWxmKToKKyAgICAgICAgIiIiUmVz
dG9yZXMgdGhlIHN5c3RlbSBhZnRlciB3ZSdyZSBkb25lIHJ1bm5pbmcgdGVzdHMuIiIiCisKKyAg
ICAgICAgX2xvZy5kZWJ1ZygiZmx1c2hpbmcgc3Rkb3V0IikKKyAgICAgICAgc3lzLnN0ZG91dC5m
bHVzaCgpCisgICAgICAgIF9sb2cuZGVidWcoImZsdXNoaW5nIHN0ZGVyciIpCisgICAgICAgIHN5
cy5zdGRlcnIuZmx1c2goKQorICAgICAgICBfbG9nLmRlYnVnKCJzdG9wcGluZyBoZWxwZXIiKQor
ICAgICAgICBzZWxmLl9wb3J0LnN0b3BfaGVscGVyKCkKKworICAgIGRlZiB1cGRhdGVfc3VtbWFy
eShzZWxmLCByZXN1bHRfc3VtbWFyeSk6CisgICAgICAgICIiIlVwZGF0ZSB0aGUgc3VtbWFyeSBh
bmQgcHJpbnQgcmVzdWx0cyB3aXRoIGFueSBjb21wbGV0ZWQgdGVzdHMuIiIiCisgICAgICAgIHdo
aWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVz
dF9yZXN1bHRzLlRlc3RSZXN1bHQubG9hZHMoc2VsZi5fcmVzdWx0X3F1ZXVlLmdldF9ub3dhaXQo
KSkKKyAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKKyAgICAgICAgICAgICAgICBzZWxm
Ll9wcmludGVyLnByaW50X3Byb2dyZXNzKHJlc3VsdF9zdW1tYXJ5LCBzZWxmLl9yZXRyeWluZywg
c2VsZi5fdGVzdF9maWxlc19saXN0KQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAg
ICAgICBzZWxmLl91cGRhdGVfc3VtbWFyeV93aXRoX3Jlc3VsdChyZXN1bHRfc3VtbWFyeSwgcmVz
dWx0KQorCisgICAgZGVmIF9pbnRlcnJ1cHRfaWZfYXRfZmFpbHVyZV9saW1pdHMoc2VsZiwgcmVz
dWx0X3N1bW1hcnkpOgorICAgICAgICAjIE5vdGU6IFRoZSBtZXNzYWdlcyBpbiB0aGlzIG1ldGhv
ZCBhcmUgY29uc3RydWN0ZWQgdG8gbWF0Y2ggb2xkLXJ1bi13ZWJraXQtdGVzdHMKKyAgICAgICAg
IyBzbyB0aGF0IGV4aXN0aW5nIGJ1aWxkYm90IGdyZXAgcnVsZXMgd29yay4KKyAgICAgICAgZGVm
IGludGVycnVwdF9pZl9hdF9mYWlsdXJlX2xpbWl0KGxpbWl0LCBmYWlsdXJlX2NvdW50LCByZXN1
bHRfc3VtbWFyeSwgbWVzc2FnZSk6CisgICAgICAgICAgICBpZiBsaW1pdCBhbmQgZmFpbHVyZV9j
b3VudCA+PSBsaW1pdDoKKyAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICIgJWQgdGVzdHMgcnVu
LiIgJSAocmVzdWx0X3N1bW1hcnkuZXhwZWN0ZWQgKyByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVk
KQorICAgICAgICAgICAgICAgIHJhaXNlIFRlc3RSdW5JbnRlcnJ1cHRlZEV4Y2VwdGlvbihtZXNz
YWdlKQorCisgICAgICAgIGludGVycnVwdF9pZl9hdF9mYWlsdXJlX2xpbWl0KAorICAgICAgICAg
ICAgc2VsZi5fb3B0aW9ucy5leGl0X2FmdGVyX25fZmFpbHVyZXMsCisgICAgICAgICAgICByZXN1
bHRfc3VtbWFyeS51bmV4cGVjdGVkX2ZhaWx1cmVzLAorICAgICAgICAgICAgcmVzdWx0X3N1bW1h
cnksCisgICAgICAgICAgICAiRXhpdGluZyBlYXJseSBhZnRlciAlZCBmYWlsdXJlcy4iICUgcmVz
dWx0X3N1bW1hcnkudW5leHBlY3RlZF9mYWlsdXJlcykKKyAgICAgICAgaW50ZXJydXB0X2lmX2F0
X2ZhaWx1cmVfbGltaXQoCisgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmV4aXRfYWZ0ZXJfbl9j
cmFzaGVzX29yX3RpbWVvdXRzLAorICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkudW5leHBlY3Rl
ZF9jcmFzaGVzICsgcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZF90aW1lb3V0cywKKyAgICAgICAg
ICAgIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICAgICAgIyBUaGlzIGRpZmZlcnMgZnJvbSBPUldU
IGJlY2F1c2UgaXQgZG9lcyBub3QgaW5jbHVkZSBXZWJQcm9jZXNzIGNyYXNoZXMuCisgICAgICAg
ICAgICAiRXhpdGluZyBlYXJseSBhZnRlciAlZCBjcmFzaGVzIGFuZCAlZCB0aW1lb3V0cy4iICUg
KHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRfY3Jhc2hlcywgcmVzdWx0X3N1bW1hcnkudW5leHBl
Y3RlZF90aW1lb3V0cykpCisKKyAgICBkZWYgX3VwZGF0ZV9zdW1tYXJ5X3dpdGhfcmVzdWx0KHNl
bGYsIHJlc3VsdF9zdW1tYXJ5LCByZXN1bHQpOgorICAgICAgICBpZiByZXN1bHQudHlwZSA9PSB0
ZXN0X2V4cGVjdGF0aW9ucy5TS0lQOgorICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkuYWRkKHJl
c3VsdCwgZXhwZWN0ZWQ9VHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4cGVjdGVk
ID0gc2VsZi5fZXhwZWN0YXRpb25zLm1hdGNoZXNfYW5fZXhwZWN0ZWRfcmVzdWx0KHJlc3VsdC50
ZXN0X25hbWUsIHJlc3VsdC50eXBlLCBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzKQorICAgICAg
ICAgICAgcmVzdWx0X3N1bW1hcnkuYWRkKHJlc3VsdCwgZXhwZWN0ZWQpCisgICAgICAgICAgICBl
eHBfc3RyID0gc2VsZi5fZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKHJlc3Vs
dC50ZXN0X25hbWUpCisgICAgICAgICAgICBnb3Rfc3RyID0gc2VsZi5fZXhwZWN0YXRpb25zLmV4
cGVjdGF0aW9uX3RvX3N0cmluZyhyZXN1bHQudHlwZSkKKyAgICAgICAgICAgIHNlbGYuX3ByaW50
ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZCwgZXhwX3N0ciwgZ290X3N0cikK
KyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9wcm9ncmVzcyhyZXN1bHRfc3VtbWFyeSwgc2Vs
Zi5fcmV0cnlpbmcsIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCkKKyAgICAgICAgc2VsZi5faW50ZXJy
dXB0X2lmX2F0X2ZhaWx1cmVfbGltaXRzKHJlc3VsdF9zdW1tYXJ5KQorCisgICAgZGVmIF9jbG9i
YmVyX29sZF9yZXN1bHRzKHNlbGYpOgorICAgICAgICAjIEp1c3QgY2xvYmJlciB0aGUgYWN0dWFs
IHRlc3QgcmVzdWx0cyBkaXJlY3RvcmllcyBzaW5jZSB0aGUgb3RoZXIKKyAgICAgICAgIyBmaWxl
cyBpbiB0aGUgcmVzdWx0cyBkaXJlY3RvcnkgYXJlIGV4cGxpY2l0bHkgdXNlZCBmb3IgY3Jvc3Mt
cnVuCisgICAgICAgICMgdHJhY2tpbmcuCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBk
YXRlKCJDbG9iYmVyaW5nIG9sZCByZXN1bHRzIGluICVzIiAlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5KQorICAgICAgICBsYXlvdXRf
dGVzdHNfZGlyID0gc2VsZi5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkKKyAgICAgICAgcG9zc2li
bGVfZGlycyA9IHNlbGYuX3BvcnQudGVzdF9kaXJzKCkKKyAgICAgICAgZm9yIGRpcm5hbWUgaW4g
cG9zc2libGVfZGlyczoKKyAgICAgICAgICAgIGlmIHNlbGYuX2ZzLmlzZGlyKHNlbGYuX2ZzLmpv
aW4obGF5b3V0X3Rlc3RzX2RpciwgZGlybmFtZSkpOgorICAgICAgICAgICAgICAgIHNlbGYuX2Zz
LnJtdHJlZShzZWxmLl9mcy5qb2luKHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5LCBkaXJuYW1lKSkK
KworICAgIGRlZiBfZ2V0X2ZhaWx1cmVzKHNlbGYsIHJlc3VsdF9zdW1tYXJ5LCBpbmNsdWRlX2Ny
YXNoZXMsIGluY2x1ZGVfbWlzc2luZyk6CisgICAgICAgICIiIkZpbHRlcnMgYSBkaWN0IG9mIHJl
c3VsdHMgYW5kIHJldHVybnMgb25seSB0aGUgZmFpbHVyZXMuCisKKyAgICAgICAgQXJnczoKKyAg
ICAgICAgICByZXN1bHRfc3VtbWFyeTogdGhlIHJlc3VsdHMgb2YgdGhlIHRlc3QgcnVuCisgICAg
ICAgICAgaW5jbHVkZV9jcmFzaGVzOiB3aGV0aGVyIGNyYXNoZXMgYXJlIGluY2x1ZGVkIGluIHRo
ZSBvdXRwdXQuCisgICAgICAgICAgICBXZSB1c2UgRmFsc2Ugd2hlbiBmaW5kaW5nIHRoZSBsaXN0
IG9mIGZhaWx1cmVzIHRvIHJldHJ5CisgICAgICAgICAgICB0byBzZWUgaWYgdGhlIHJlc3VsdHMg
d2VyZSBmbGFreS4gQWx0aG91Z2ggdGhlIGNyYXNoZXMgbWF5IGFsc28gYmUKKyAgICAgICAgICAg
IGZsYWt5LCB3ZSB0cmVhdCB0aGVtIGFzIGlmIHRoZXkgYXJlbid0IHNvIHRoYXQgdGhleSdyZSBu
b3QgaWdub3JlZC4KKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICBhIGRpY3Qgb2YgZmlsZXMg
LT4gcmVzdWx0cworICAgICAgICAiIiIKKyAgICAgICAgZmFpbGVkX3Jlc3VsdHMgPSB7fQorICAg
ICAgICBmb3IgdGVzdCwgcmVzdWx0IGluIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRfcmVzdWx0
cy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSB0ZXN0X2V4cGVj
dGF0aW9ucy5QQVNTIG9yCisgICAgICAgICAgICAgICAgKHJlc3VsdC50eXBlID09IHRlc3RfZXhw
ZWN0YXRpb25zLkNSQVNIIGFuZCBub3QgaW5jbHVkZV9jcmFzaGVzKSBvcgorICAgICAgICAgICAg
ICAgIChyZXN1bHQudHlwZSA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5NSVNTSU5HIGFuZCBub3QgaW5j
bHVkZV9taXNzaW5nKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZh
aWxlZF9yZXN1bHRzW3Rlc3RdID0gcmVzdWx0LnR5cGUKKworICAgICAgICByZXR1cm4gZmFpbGVk
X3Jlc3VsdHMKKworICAgIGRlZiBfY2hhcl9mb3JfcmVzdWx0KHNlbGYsIHJlc3VsdCk6CisgICAg
ICAgIHJlc3VsdCA9IHJlc3VsdC5sb3dlcigpCisgICAgICAgIGlmIHJlc3VsdCBpbiBUZXN0RXhw
ZWN0YXRpb25zLkVYUEVDVEFUSU9OUzoKKyAgICAgICAgICAgIHJlc3VsdF9lbnVtX3ZhbHVlID0g
VGVzdEV4cGVjdGF0aW9ucy5FWFBFQ1RBVElPTlNbcmVzdWx0XQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgcmVzdWx0X2VudW1fdmFsdWUgPSBUZXN0RXhwZWN0YXRpb25zLk1PRElGSUVSU1ty
ZXN1bHRdCisgICAgICAgIHJldHVybiBqc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5KU09O
TGF5b3V0UmVzdWx0c0dlbmVyYXRvci5GQUlMVVJFX1RPX0NIQVJbcmVzdWx0X2VudW1fdmFsdWVd
CisKKyAgICBkZWYgX3VwbG9hZF9qc29uX2ZpbGVzKHNlbGYsIHVuZXhwZWN0ZWRfcmVzdWx0cywg
c3VtbWFyaXplZF9yZXN1bHRzLCByZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKToKKyAgICAgICAgIiIiV3JpdGVzIHRoZSBy
ZXN1bHRzIG9mIHRoZSB0ZXN0IHJ1biBhcyBKU09OIGZpbGVzIGludG8gdGhlIHJlc3VsdHMKKyAg
ICAgICAgZGlyIGFuZCB1cGxvYWQgdGhlIGZpbGVzIHRvIHRoZSBhcHBlbmdpbmUgc2VydmVyLgor
CisgICAgICAgIFRoZXJlIGFyZSB0aHJlZSBkaWZmZXJlbnQgZmlsZXMgd3JpdHRlbiBpbnRvIHRo
ZSByZXN1bHRzIGRpcjoKKyAgICAgICAgICB1bmV4cGVjdGVkX3Jlc3VsdHMuanNvbjogQSBzaG9y
dCBsaXN0IG9mIGFueSB1bmV4cGVjdGVkIHJlc3VsdHMuCisgICAgICAgICAgICBUaGlzIGlzIHVz
ZWQgYnkgdGhlIGJ1aWxkYm90cyB0byBkaXNwbGF5IHJlc3VsdHMuCisgICAgICAgICAgZXhwZWN0
YXRpb25zLmpzb246IFRoaXMgaXMgdXNlZCBieSB0aGUgZmxha2luZXNzIGRhc2hib2FyZC4KKyAg
ICAgICAgICByZXN1bHRzLmpzb246IEEgZnVsbCBsaXN0IG9mIHRoZSByZXN1bHRzIC0gdXNlZCBi
eSB0aGUgZmxha2luZXNzCisgICAgICAgICAgICBkYXNoYm9hcmQgYW5kIHRoZSBhZ2dyZWdhdGUg
cmVzdWx0cyBkYXNoYm9hcmQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB1bmV4cGVjdGVk
X3Jlc3VsdHM6IGRpY3Qgb2YgdW5leHBlY3RlZCByZXN1bHRzCisgICAgICAgICAgc3VtbWFyaXpl
ZF9yZXN1bHRzOiBkaWN0IG9mIHJlc3VsdHMKKyAgICAgICAgICByZXN1bHRfc3VtbWFyeTogZnVs
bCBzdW1tYXJ5IG9iamVjdAorICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzOiBsaXN0
IG9mIHRlc3QgdGltZXMgKHVzZWQgYnkgdGhlIGZsYWtpbmVzcworICAgICAgICAgICAgZGFzaGJv
YXJkKS4KKyAgICAgICAgIiIiCisgICAgICAgIF9sb2cuZGVidWcoIldyaXRpbmcgSlNPTiBmaWxl
cyBpbiAlcy4iICUgc2VsZi5fcmVzdWx0c19kaXJlY3RvcnkpCisKKyAgICAgICAgdGltZXNfdHJp
ZSA9IGpzb25fcmVzdWx0c19nZW5lcmF0b3IudGVzdF90aW1pbmdzX3RyaWUoc2VsZi5fcG9ydCwg
aW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCisgICAgICAgIHRpbWVzX2pzb25fcGF0aCA9IHNlbGYu
X2ZzLmpvaW4oc2VsZi5fcmVzdWx0c19kaXJlY3RvcnksICJ0aW1lc19tcy5qc29uIikKKyAgICAg
ICAganNvbl9yZXN1bHRzX2dlbmVyYXRvci53cml0ZV9qc29uKHNlbGYuX2ZzLCB0aW1lc190cmll
LCB0aW1lc19qc29uX3BhdGgpCisKKyAgICAgICAgdW5leHBlY3RlZF9qc29uX3BhdGggPSBzZWxm
Ll9mcy5qb2luKHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5LCAidW5leHBlY3RlZF9yZXN1bHRzLmpz
b24iKQorICAgICAgICBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLndyaXRlX2pzb24oc2VsZi5fZnMs
IHVuZXhwZWN0ZWRfcmVzdWx0cywgdW5leHBlY3RlZF9qc29uX3BhdGgpCisKKyAgICAgICAgZnVs
bF9yZXN1bHRzX3BhdGggPSBzZWxmLl9mcy5qb2luKHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5LCAi
ZnVsbF9yZXN1bHRzLmpzb24iKQorICAgICAgICBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLndyaXRl
X2pzb24oc2VsZi5fZnMsIHN1bW1hcml6ZWRfcmVzdWx0cywgZnVsbF9yZXN1bHRzX3BhdGgpCisK
KyAgICAgICAgIyBXcml0ZSBhIGpzb24gZmlsZSBvZiB0aGUgdGVzdF9leHBlY3RhdGlvbnMudHh0
IGZpbGUgZm9yIHRoZSBsYXlvdXQKKyAgICAgICAgIyB0ZXN0cyBkYXNoYm9hcmQuCisgICAgICAg
IGV4cGVjdGF0aW9uc19wYXRoID0gc2VsZi5fZnMuam9pbihzZWxmLl9yZXN1bHRzX2RpcmVjdG9y
eSwgImV4cGVjdGF0aW9ucy5qc29uIikKKyAgICAgICAgZXhwZWN0YXRpb25zX2pzb24gPSBcCisg
ICAgICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMuZ2V0X2V4cGVjdGF0aW9uc19qc29uX2Zvcl9h
bGxfcGxhdGZvcm1zKCkKKyAgICAgICAgc2VsZi5fZnMud3JpdGVfdGV4dF9maWxlKGV4cGVjdGF0
aW9uc19wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSJBRERfRVhQRUNU
QVRJT05TKCVzKTsiICUgZXhwZWN0YXRpb25zX2pzb24pCisKKyAgICAgICAgZ2VuZXJhdG9yID0g
anNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IuSlNPTkxheW91dFJlc3VsdHNHZW5lcmF0b3Io
CisgICAgICAgICAgICBzZWxmLl9wb3J0LCBzZWxmLl9vcHRpb25zLmJ1aWxkZXJfbmFtZSwgc2Vs
Zi5fb3B0aW9ucy5idWlsZF9uYW1lLAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5idWlsZF9u
dW1iZXIsIHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5LAorICAgICAgICAgICAgQlVJTERFUl9CQVNF
X1VSTCwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsCisgICAgICAgICAgICBzZWxmLl9leHBlY3Rh
dGlvbnMsIHJlc3VsdF9zdW1tYXJ5LCBzZWxmLl90ZXN0X2ZpbGVzX2xpc3QsCisgICAgICAgICAg
ICBzZWxmLl9vcHRpb25zLnRlc3RfcmVzdWx0c19zZXJ2ZXIsCisgICAgICAgICAgICAibGF5b3V0
LXRlc3RzIiwKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMubWFzdGVyX25hbWUpCisKKyAgICAg
ICAgX2xvZy5kZWJ1ZygiRmluaXNoZWQgd3JpdGluZyBKU09OIGZpbGVzLiIpCisKKyAgICAgICAg
anNvbl9maWxlcyA9IFsiZXhwZWN0YXRpb25zLmpzb24iLCAiaW5jcmVtZW50YWxfcmVzdWx0cy5q
c29uIiwgImZ1bGxfcmVzdWx0cy5qc29uIiwgInRpbWVzX21zLmpzb24iXQorCisgICAgICAgIGdl
bmVyYXRvci51cGxvYWRfanNvbl9maWxlcyhqc29uX2ZpbGVzKQorCisgICAgZGVmIF9wcmludF9j
b25maWcoc2VsZik6CisgICAgICAgICIiIlByaW50cyB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhl
IHRlc3QgcnVuLiIiIgorICAgICAgICBwID0gc2VsZi5fcHJpbnRlcgorICAgICAgICBwLnByaW50
X2NvbmZpZygiVXNpbmcgcG9ydCAnJXMnIiAlIHNlbGYuX3BvcnQubmFtZSgpKQorICAgICAgICBw
LnByaW50X2NvbmZpZygiVGVzdCBjb25maWd1cmF0aW9uOiAlcyIgJSBzZWxmLl9wb3J0LnRlc3Rf
Y29uZmlndXJhdGlvbigpKQorICAgICAgICBwLnByaW50X2NvbmZpZygiUGxhY2luZyB0ZXN0IHJl
c3VsdHMgaW4gJXMiICUgc2VsZi5fcmVzdWx0c19kaXJlY3RvcnkpCisgICAgICAgIGlmIHNlbGYu
X29wdGlvbnMubmV3X2Jhc2VsaW5lOgorICAgICAgICAgICAgcC5wcmludF9jb25maWcoIlBsYWNp
bmcgbmV3IGJhc2VsaW5lcyBpbiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fcG9ydC5iYXNlbGluZV9wYXRoKCkpCisgICAgICAgIHAucHJpbnRfY29uZmlnKCJVc2luZyAl
cyBidWlsZCIgJSBzZWxmLl9vcHRpb25zLmNvbmZpZ3VyYXRpb24pCisgICAgICAgIGlmIHNlbGYu
X29wdGlvbnMucGl4ZWxfdGVzdHM6CisgICAgICAgICAgICBwLnByaW50X2NvbmZpZygiUGl4ZWwg
dGVzdHMgZW5hYmxlZCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwLnByaW50X2NvbmZp
ZygiUGl4ZWwgdGVzdHMgZGlzYWJsZWQiKQorCisgICAgICAgIHAucHJpbnRfY29uZmlnKCJSZWd1
bGFyIHRpbWVvdXQ6ICVzLCBzbG93IHRlc3QgdGltZW91dDogJXMiICUKKyAgICAgICAgICAgICAg
ICAgICAgICAgKHNlbGYuX29wdGlvbnMudGltZV9vdXRfbXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9vcHRpb25zLnNsb3dfdGltZV9vdXRfbXMpKQorCisgICAgICAgIHAucHJpbnRf
Y29uZmlnKCdDb21tYW5kIGxpbmU6ICcgKworICAgICAgICAgICAgICAgICAgICAgICAnICcuam9p
bihzZWxmLl9wb3J0LmRyaXZlcl9jbWRfbGluZSgpKSkKKyAgICAgICAgcC5wcmludF9jb25maWco
IldvcmtlciBtb2RlbDogJXMiICUgc2VsZi5fb3B0aW9ucy53b3JrZXJfbW9kZWwpCisgICAgICAg
IHAucHJpbnRfY29uZmlnKCIiKQorCisgICAgZGVmIF9wcmludF9leHBlY3RlZF9yZXN1bHRzX29m
X3R5cGUoc2VsZiwgcmVzdWx0X3N1bW1hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0X3R5cGUsIHJlc3VsdF90eXBlX3N0cik6CisgICAgICAgICIiIlBy
aW50IHRoZSBudW1iZXIgb2YgdGhlIHRlc3RzIGluIGEgZ2l2ZW4gcmVzdWx0IGNsYXNzLgorCisg
ICAgICAgIEFyZ3M6CisgICAgICAgICAgcmVzdWx0X3N1bW1hcnkgLSB0aGUgb2JqZWN0IGNvbnRh
aW5pbmcgYWxsIHRoZSByZXN1bHRzIHRvIHJlcG9ydCBvbgorICAgICAgICAgIHJlc3VsdF90eXBl
IC0gdGhlIHBhcnRpY3VsYXIgcmVzdWx0IHR5cGUgdG8gcmVwb3J0IGluIHRoZSBzdW1tYXJ5Lgor
ICAgICAgICAgIHJlc3VsdF90eXBlX3N0ciAtIGEgc3RyaW5nIGRlc2NyaXB0aW9uIG9mIHRoZSBy
ZXN1bHRfdHlwZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRlc3RzID0gc2VsZi5fZXhwZWN0YXRp
b25zLmdldF90ZXN0c193aXRoX3Jlc3VsdF90eXBlKHJlc3VsdF90eXBlKQorICAgICAgICBub3cg
PSByZXN1bHRfc3VtbWFyeS50ZXN0c19ieV90aW1lbGluZVt0ZXN0X2V4cGVjdGF0aW9ucy5OT1dd
CisgICAgICAgIHdvbnRmaXggPSByZXN1bHRfc3VtbWFyeS50ZXN0c19ieV90aW1lbGluZVt0ZXN0
X2V4cGVjdGF0aW9ucy5XT05URklYXQorCisgICAgICAgICMgV2UgdXNlIGEgZmFuY3kgZm9ybWF0
IHN0cmluZyBpbiBvcmRlciB0byBwcmludCB0aGUgZGF0YSBvdXQgaW4gYQorICAgICAgICAjIG5p
Y2VseS1hbGlnbmVkIHRhYmxlLgorICAgICAgICBmbXRzdHIgPSAoIkV4cGVjdDogJSU1ZCAlJS04
cyAoJSUlZGQgbm93LCAlJSVkZCB3b250Zml4KSIKKyAgICAgICAgICAgICAgICAgICUgKHNlbGYu
X251bV9kaWdpdHMobm93KSwgc2VsZi5fbnVtX2RpZ2l0cyh3b250Zml4KSkpCisgICAgICAgIHNl
bGYuX3ByaW50ZXIucHJpbnRfZXhwZWN0ZWQoZm10c3RyICUKKyAgICAgICAgICAgIChsZW4odGVz
dHMpLCByZXN1bHRfdHlwZV9zdHIsIGxlbih0ZXN0cyAmIG5vdyksIGxlbih0ZXN0cyAmIHdvbnRm
aXgpKSkKKworICAgIGRlZiBfbnVtX2RpZ2l0cyhzZWxmLCBudW0pOgorICAgICAgICAiIiJSZXR1
cm5zIHRoZSBudW1iZXIgb2YgZGlnaXRzIG5lZWRlZCB0byByZXByZXNlbnQgdGhlIGxlbmd0aCBv
ZiBhCisgICAgICAgIHNlcXVlbmNlLiIiIgorICAgICAgICBuZGlnaXRzID0gMQorICAgICAgICBp
ZiBsZW4obnVtKToKKyAgICAgICAgICAgIG5kaWdpdHMgPSBpbnQobWF0aC5sb2cxMChsZW4obnVt
KSkpICsgMQorICAgICAgICByZXR1cm4gbmRpZ2l0cworCisgICAgZGVmIF9wcmludF90aW1pbmdf
c3RhdGlzdGljcyhzZWxmLCB0b3RhbF90aW1lLCB0aHJlYWRfdGltaW5ncywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnlfdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rl
c3RfdGltaW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFy
eSk6CisgICAgICAgICIiIlJlY29yZCB0aW1pbmctc3BlY2lmaWMgaW5mb3JtYXRpb24gZm9yIHRo
ZSB0ZXN0IHJ1bi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHRvdGFsX3RpbWU6IHRvdGFs
IGVsYXBzZWQgdGltZSAoaW4gc2Vjb25kcykgZm9yIHRoZSB0ZXN0IHJ1bgorICAgICAgICAgIHRo
cmVhZF90aW1pbmdzOiB3YWxsIGNsb2NrIHRpbWUgZWFjaCB0aHJlYWQgcmFuIGZvcgorICAgICAg
ICAgIGRpcmVjdG9yeV90ZXN0X3RpbWluZ3M6IHRpbWluZyBieSBkaXJlY3RvcnkKKyAgICAgICAg
ICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5nczogdGltaW5nIGJ5IGZpbGUKKyAgICAgICAgICByZXN1
bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgZm9yIHRoZSB0ZXN0IHJ1bgorICAgICAgICAiIiIK
KyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIlRlc3QgdGltaW5nOiIpCisgICAg
ICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIgICU2LjJmIHRvdGFsIHRlc3RpbmcgdGlt
ZSIgJSB0b3RhbF90aW1lKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiIikK
KyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIlRocmVhZCB0aW1pbmc6IikKKyAg
ICAgICAgY3VtbF90aW1lID0gMAorICAgICAgICBmb3IgdCBpbiB0aHJlYWRfdGltaW5nczoKKyAg
ICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIgICAgJTEwczogJTVkIHRlc3Rz
LCAlNi4yZiBzZWNzIiAlCisgICAgICAgICAgICAgICAgICAodFsnbmFtZSddLCB0WydudW1fdGVz
dHMnXSwgdFsndG90YWxfdGltZSddKSkKKyAgICAgICAgICAgIGN1bWxfdGltZSArPSB0Wyd0b3Rh
bF90aW1lJ10KKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiAgICU2LjJmIGN1
bXVsYXRpdmUsICU2LjJmIG9wdGltYWwiICUKKyAgICAgICAgICAgICAgKGN1bWxfdGltZSwgY3Vt
bF90aW1lIC8gaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSkpCisgICAgICAgIHNl
bGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIiKQorCisgICAgICAgIHNlbGYuX3ByaW50X2FnZ3Jl
Z2F0ZV90ZXN0X3N0YXRpc3RpY3MoaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCisgICAgICAgIHNl
bGYuX3ByaW50X2luZGl2aWR1YWxfdGVzdF90aW1lcyhpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5
KQorICAgICAgICBzZWxmLl9wcmludF9kaXJlY3RvcnlfdGltaW5ncyhkaXJlY3RvcnlfdGVzdF90
aW1pbmdzKQorCisgICAgZGVmIF9wcmludF9hZ2dyZWdhdGVfdGVzdF9zdGF0aXN0aWNzKHNlbGYs
IGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKToKKyAgICAgICAgIiIiUHJpbnRzIGFnZ3JlZ2F0ZSBz
dGF0aXN0aWNzIChlLmcuIG1lZGlhbiwgbWVhbiwgZXRjLikgZm9yIGFsbCB0ZXN0cy4KKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5nczogTGlzdCBvZiBUZXN0
UmVzdWx0cyBmb3IgYWxsIHRlc3RzLgorICAgICAgICAiIiIKKyAgICAgICAgdGltZXNfZm9yX2R1
bXBfcmVuZGVyX3RyZWUgPSBbdGVzdF9zdGF0cy50ZXN0X3J1bl90aW1lIGZvciB0ZXN0X3N0YXRz
IGluIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzXQorICAgICAgICBzZWxmLl9wcmludF9zdGF0aXN0
aWNzX2Zvcl90ZXN0X3RpbWluZ3MoIlBFUiBURVNUIFRJTUUgSU4gVEVTVFNIRUxMIChzZWNvbmRz
KToiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlt
ZXNfZm9yX2R1bXBfcmVuZGVyX3RyZWUpCisKKyAgICBkZWYgX3ByaW50X2luZGl2aWR1YWxfdGVz
dF90aW1lcyhzZWxmLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSk6CisgICAgICAgICIiIlByaW50cyB0aGUg
cnVuIHRpbWVzIGZvciBzbG93LCB0aW1lb3V0IGFuZCBjcmFzaCB0ZXN0cy4KKyAgICAgICAgQXJn
czoKKyAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5nczogTGlzdCBvZiBUZXN0U3RhdHMg
Zm9yIGFsbCB0ZXN0cy4KKyAgICAgICAgICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3Qg
Zm9yIHRlc3QgcnVuCisgICAgICAgICIiIgorICAgICAgICAjIFJldmVyc2Utc29ydCBieSB0aGUg
dGltZSBzcGVudCBpbiBEdW1wUmVuZGVyVHJlZS4KKyAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3Rp
bWluZ3Muc29ydChsYW1iZGEgYSwgYjoKKyAgICAgICAgICAgIGNtcChiLnRlc3RfcnVuX3RpbWUs
IGEudGVzdF9ydW5fdGltZSkpCisKKyAgICAgICAgbnVtX3ByaW50ZWQgPSAwCisgICAgICAgIHNs
b3dfdGVzdHMgPSBbXQorICAgICAgICB0aW1lb3V0X29yX2NyYXNoX3Rlc3RzID0gW10KKyAgICAg
ICAgdW5leHBlY3RlZF9zbG93X3Rlc3RzID0gW10KKyAgICAgICAgZm9yIHRlc3RfdHVwbGUgaW4g
aW5kaXZpZHVhbF90ZXN0X3RpbWluZ3M6CisgICAgICAgICAgICB0ZXN0X25hbWUgPSB0ZXN0X3R1
cGxlLnRlc3RfbmFtZQorICAgICAgICAgICAgaXNfdGltZW91dF9jcmFzaF9vcl9zbG93ID0gRmFs
c2UKKyAgICAgICAgICAgIGlmIHNlbGYuX3Rlc3RfaXNfc2xvdyh0ZXN0X25hbWUpOgorICAgICAg
ICAgICAgICAgIGlzX3RpbWVvdXRfY3Jhc2hfb3Jfc2xvdyA9IFRydWUKKyAgICAgICAgICAgICAg
ICBzbG93X3Rlc3RzLmFwcGVuZCh0ZXN0X3R1cGxlKQorCisgICAgICAgICAgICBpZiB0ZXN0X25h
bWUgaW4gcmVzdWx0X3N1bW1hcnkuZmFpbHVyZXM6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
cmVzdWx0X3N1bW1hcnkucmVzdWx0c1t0ZXN0X25hbWVdLnR5cGUKKyAgICAgICAgICAgICAgICBp
ZiAocmVzdWx0ID09IHRlc3RfZXhwZWN0YXRpb25zLlRJTUVPVVQgb3IKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0ID09IHRlc3RfZXhwZWN0YXRpb25zLkNSQVNIKToKKyAgICAgICAgICAgICAg
ICAgICAgaXNfdGltZW91dF9jcmFzaF9vcl9zbG93ID0gVHJ1ZQorICAgICAgICAgICAgICAgICAg
ICB0aW1lb3V0X29yX2NyYXNoX3Rlc3RzLmFwcGVuZCh0ZXN0X3R1cGxlKQorCisgICAgICAgICAg
ICBpZiAobm90IGlzX3RpbWVvdXRfY3Jhc2hfb3Jfc2xvdyBhbmQKKyAgICAgICAgICAgICAgICBu
dW1fcHJpbnRlZCA8IHByaW50aW5nLk5VTV9TTE9XX1RFU1RTX1RPX0xPRyk6CisgICAgICAgICAg
ICAgICAgbnVtX3ByaW50ZWQgPSBudW1fcHJpbnRlZCArIDEKKyAgICAgICAgICAgICAgICB1bmV4
cGVjdGVkX3Nsb3dfdGVzdHMuYXBwZW5kKHRlc3RfdHVwbGUpCisKKyAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF90aW1pbmcoIiIpCisgICAgICAgIHNlbGYuX3ByaW50X3Rlc3RfbGlzdF90aW1p
bmcoIiVzIHNsb3dlc3QgdGVzdHMgdGhhdCBhcmUgbm90ICIKKyAgICAgICAgICAgICJtYXJrZWQg
YXMgU0xPVyBhbmQgZGlkIG5vdCB0aW1lb3V0L2NyYXNoOiIgJQorICAgICAgICAgICAgcHJpbnRp
bmcuTlVNX1NMT1dfVEVTVFNfVE9fTE9HLCB1bmV4cGVjdGVkX3Nsb3dfdGVzdHMpCisgICAgICAg
IHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIiKQorICAgICAgICBzZWxmLl9wcmludF90ZXN0
X2xpc3RfdGltaW5nKCJUZXN0cyBtYXJrZWQgYXMgU0xPVzoiLCBzbG93X3Rlc3RzKQorICAgICAg
ICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiIikKKyAgICAgICAgc2VsZi5fcHJpbnRfdGVz
dF9saXN0X3RpbWluZygiVGVzdHMgdGhhdCB0aW1lZCBvdXQgb3IgY3Jhc2hlZDoiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRfb3JfY3Jhc2hfdGVzdHMpCisg
ICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIiKQorCisgICAgZGVmIF9wcmludF90
ZXN0X2xpc3RfdGltaW5nKHNlbGYsIHRpdGxlLCB0ZXN0X2xpc3QpOgorICAgICAgICAiIiJQcmlu
dCB0aW1pbmcgaW5mbyBmb3IgZWFjaCB0ZXN0LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg
dGl0bGU6IHNlY3Rpb24gaGVhZGluZworICAgICAgICAgIHRlc3RfbGlzdDogdGVzdHMgdGhhdCBm
YWxsIGluIHRoaXMgc2VjdGlvbgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fcHJpbnRl
ci5kaXNhYmxlZCgnc2xvd2VzdCcpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2Vs
Zi5fcHJpbnRlci5wcmludF90aW1pbmcodGl0bGUpCisgICAgICAgIGZvciB0ZXN0X3R1cGxlIGlu
IHRlc3RfbGlzdDoKKyAgICAgICAgICAgIHRlc3RfcnVuX3RpbWUgPSByb3VuZCh0ZXN0X3R1cGxl
LnRlc3RfcnVuX3RpbWUsIDEpCisgICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWlu
ZygiICAlcyB0b29rICVzIHNlY29uZHMiICUgKHRlc3RfdHVwbGUudGVzdF9uYW1lLCB0ZXN0X3J1
bl90aW1lKSkKKworICAgIGRlZiBfcHJpbnRfZGlyZWN0b3J5X3RpbWluZ3Moc2VsZiwgZGlyZWN0
b3J5X3Rlc3RfdGltaW5ncyk6CisgICAgICAgICIiIlByaW50IHRpbWluZyBpbmZvIGJ5IGRpcmVj
dG9yeSBmb3IgYW55IGRpcmVjdG9yaWVzIHRoYXQKKyAgICAgICAgdGFrZSA+IDEwIHNlY29uZHMg
dG8gcnVuLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgZGlyZWN0b3J5X3Rlc3RfdGltaW5n
OiB0aW1lIGluZm8gZm9yIGVhY2ggZGlyZWN0b3J5CisgICAgICAgICIiIgorICAgICAgICB0aW1p
bmdzID0gW10KKyAgICAgICAgZm9yIGRpcmVjdG9yeSBpbiBkaXJlY3RvcnlfdGVzdF90aW1pbmdz
OgorICAgICAgICAgICAgbnVtX3Rlc3RzLCB0aW1lX2Zvcl9kaXJlY3RvcnkgPSBkaXJlY3Rvcnlf
dGVzdF90aW1pbmdzW2RpcmVjdG9yeV0KKyAgICAgICAgICAgIHRpbWluZ3MuYXBwZW5kKChyb3Vu
ZCh0aW1lX2Zvcl9kaXJlY3RvcnksIDEpLCBkaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnVtX3Rlc3RzKSkKKyAgICAgICAgdGltaW5ncy5zb3J0KCkKKworICAgICAgICBz
ZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiVGltZSB0byBwcm9jZXNzIHNsb3dlc3Qgc3ViZGly
ZWN0b3JpZXM6IikKKyAgICAgICAgbWluX3NlY29uZHNfdG9fcHJpbnQgPSAxMAorICAgICAgICBm
b3IgdGltaW5nIGluIHRpbWluZ3M6CisgICAgICAgICAgICBpZiB0aW1pbmdbMF0gPiBtaW5fc2Vj
b25kc190b19wcmludDoKKyAgICAgICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWlu
ZygKKyAgICAgICAgICAgICAgICAgICAgIiAgJXMgdG9vayAlcyBzZWNvbmRzIHRvIHJ1biAlcyB0
ZXN0cy4iICUgKHRpbWluZ1sxXSwKKyAgICAgICAgICAgICAgICAgICAgdGltaW5nWzBdLCB0aW1p
bmdbMl0pKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiIikKKworICAgIGRl
ZiBfcHJpbnRfc3RhdGlzdGljc19mb3JfdGVzdF90aW1pbmdzKHNlbGYsIHRpdGxlLCB0aW1pbmdz
KToKKyAgICAgICAgIiIiUHJpbnRzIHRoZSBtZWRpYW4sIG1lYW4gYW5kIHN0YW5kYXJkIGRldmlh
dGlvbiBvZiB0aGUgdmFsdWVzIGluCisgICAgICAgIHRpbWluZ3MuCisKKyAgICAgICAgQXJnczoK
KyAgICAgICAgICB0aXRsZTogVGl0bGUgZm9yIHRoZXNlIHRpbWluZ3MuCisgICAgICAgICAgdGlt
aW5nczogQSBsaXN0IG9mIGZsb2F0cyByZXByZXNlbnRpbmcgdGltZXMuCisgICAgICAgICIiIgor
ICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZyh0aXRsZSkKKyAgICAgICAgdGltaW5n
cy5zb3J0KCkKKworICAgICAgICBudW1fdGVzdHMgPSBsZW4odGltaW5ncykKKyAgICAgICAgaWYg
bm90IG51bV90ZXN0czoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBwZXJjZW50aWxlOTAg
PSB0aW1pbmdzW2ludCguOSAqIG51bV90ZXN0cyldCisgICAgICAgIHBlcmNlbnRpbGU5OSA9IHRp
bWluZ3NbaW50KC45OSAqIG51bV90ZXN0cyldCisKKyAgICAgICAgaWYgbnVtX3Rlc3RzICUgMiA9
PSAxOgorICAgICAgICAgICAgbWVkaWFuID0gdGltaW5nc1soKG51bV90ZXN0cyAtIDEpIC8gMikg
LSAxXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG93ZXIgPSB0aW1pbmdzW251bV90ZXN0
cyAvIDIgLSAxXQorICAgICAgICAgICAgdXBwZXIgPSB0aW1pbmdzW251bV90ZXN0cyAvIDJdCisg
ICAgICAgICAgICBtZWRpYW4gPSAoZmxvYXQobG93ZXIgKyB1cHBlcikpIC8gMgorCisgICAgICAg
IG1lYW4gPSBzdW0odGltaW5ncykgLyBudW1fdGVzdHMKKworICAgICAgICBmb3IgdGltZSBpbiB0
aW1pbmdzOgorICAgICAgICAgICAgc3VtX29mX2RldmlhdGlvbnMgPSBtYXRoLnBvdyh0aW1lIC0g
bWVhbiwgMikKKworICAgICAgICBzdGRfZGV2aWF0aW9uID0gbWF0aC5zcXJ0KHN1bV9vZl9kZXZp
YXRpb25zIC8gbnVtX3Rlc3RzKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygi
ICBNZWRpYW46ICAgICAgICAgICU2LjNmIiAlIG1lZGlhbikKKyAgICAgICAgc2VsZi5fcHJpbnRl
ci5wcmludF90aW1pbmcoIiAgTWVhbjogICAgICAgICAgICAlNi4zZiIgJSBtZWFuKQorICAgICAg
ICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiICA5MHRoIHBlcmNlbnRpbGU6ICU2LjNmIiAl
IHBlcmNlbnRpbGU5MCkKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiAgOTl0
aCBwZXJjZW50aWxlOiAlNi4zZiIgJSBwZXJjZW50aWxlOTkpCisgICAgICAgIHNlbGYuX3ByaW50
ZXIucHJpbnRfdGltaW5nKCIgIFN0YW5kYXJkIGRldjogICAgJTYuM2YiICUgc3RkX2RldmlhdGlv
bikKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiIpCisKKyAgICBkZWYgX3By
aW50X3Jlc3VsdF9zdW1tYXJ5KHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToKKyAgICAgICAgIiIiUHJp
bnQgYSBzaG9ydCBzdW1tYXJ5IGFib3V0IGhvdyBtYW55IHRlc3RzIHBhc3NlZC4KKworICAgICAg
ICBBcmdzOgorICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBpbmZvcm1hdGlvbiB0byBsb2cKKyAg
ICAgICAgIiIiCisgICAgICAgIGZhaWxlZCA9IGxlbihyZXN1bHRfc3VtbWFyeS5mYWlsdXJlcykK
KyAgICAgICAgc2tpcHBlZCA9IGxlbigKKyAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnRlc3Rz
X2J5X2V4cGVjdGF0aW9uW3Rlc3RfZXhwZWN0YXRpb25zLlNLSVBdKQorICAgICAgICB0b3RhbCA9
IHJlc3VsdF9zdW1tYXJ5LnRvdGFsCisgICAgICAgIHBhc3NlZCA9IHRvdGFsIC0gZmFpbGVkIC0g
c2tpcHBlZAorICAgICAgICBwY3RfcGFzc2VkID0gMC4wCisgICAgICAgIGlmIHRvdGFsID4gMDoK
KyAgICAgICAgICAgIHBjdF9wYXNzZWQgPSBmbG9hdChwYXNzZWQpICogMTAwIC8gdG90YWwKKwor
ICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2FjdHVhbCgiIikKKyAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF9hY3R1YWwoIj0+IFJlc3VsdHM6ICVkLyVkIHRlc3RzIHBhc3NlZCAoJS4xZiUl
KSIgJQorICAgICAgICAgICAgICAgICAgICAgKHBhc3NlZCwgdG90YWwsIHBjdF9wYXNzZWQpKQor
ICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2FjdHVhbCgiIikKKyAgICAgICAgc2VsZi5fcHJp
bnRfcmVzdWx0X3N1bW1hcnlfZW50cnkocmVzdWx0X3N1bW1hcnksCisgICAgICAgICAgICB0ZXN0
X2V4cGVjdGF0aW9ucy5OT1csICJUZXN0cyB0byBiZSBmaXhlZCIpCisKKyAgICAgICAgc2VsZi5f
cHJpbnRlci5wcmludF9hY3R1YWwoIiIpCisgICAgICAgIHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1t
YXJ5X2VudHJ5KHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMu
V09OVEZJWCwKKyAgICAgICAgICAgICJUZXN0cyB0aGF0IHdpbGwgb25seSBiZSBmaXhlZCBpZiB0
aGV5IGNyYXNoIChXT05URklYKSIpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfYWN0dWFs
KCIiKQorCisgICAgZGVmIF9wcmludF9yZXN1bHRfc3VtbWFyeV9lbnRyeShzZWxmLCByZXN1bHRf
c3VtbWFyeSwgdGltZWxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWFkaW5nKToKKyAgICAgICAgIiIiUHJpbnQgYSBzdW1tYXJ5IGJsb2NrIG9mIHJlc3VsdHMgZm9y
IGEgcGFydGljdWxhciB0aW1lbGluZSBvZiB0ZXN0LgorCisgICAgICAgIEFyZ3M6CisgICAgICAg
ICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgdG8gcHJpbnQgcmVzdWx0cyBmb3IKKyAgICAgICAg
ICB0aW1lbGluZTogdGhlIHRpbWVsaW5lIHRvIHByaW50IHJlc3VsdHMgZm9yIChOT1QsIFdPTlRG
SVgsIGV0Yy4pCisgICAgICAgICAgaGVhZGluZzogYSB0ZXh0dWFsIGRlc2NyaXB0aW9uIG9mIHRo
ZSB0aW1lbGluZQorICAgICAgICAiIiIKKyAgICAgICAgdG90YWwgPSBsZW4ocmVzdWx0X3N1bW1h
cnkudGVzdHNfYnlfdGltZWxpbmVbdGltZWxpbmVdKQorICAgICAgICBub3RfcGFzc2luZyA9ICh0
b3RhbCAtCisgICAgICAgICAgIGxlbihyZXN1bHRfc3VtbWFyeS50ZXN0c19ieV9leHBlY3RhdGlv
blt0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTXSAmCisgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFy
eS50ZXN0c19ieV90aW1lbGluZVt0aW1lbGluZV0pKQorICAgICAgICBzZWxmLl9wcmludGVyLnBy
aW50X2FjdHVhbCgiPT4gJXMgKCVkKToiICUgKGhlYWRpbmcsIG5vdF9wYXNzaW5nKSkKKworICAg
ICAgICBmb3IgcmVzdWx0IGluIFRlc3RFeHBlY3RhdGlvbnMuRVhQRUNUQVRJT05fT1JERVI6Cisg
ICAgICAgICAgICBpZiByZXN1bHQgPT0gdGVzdF9leHBlY3RhdGlvbnMuUEFTUzoKKyAgICAgICAg
ICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcmVzdWx0cyA9IChyZXN1bHRfc3VtbWFyeS50
ZXN0c19ieV9leHBlY3RhdGlvbltyZXN1bHRdICYKKyAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0X3N1bW1hcnkudGVzdHNfYnlfdGltZWxpbmVbdGltZWxpbmVdKQorICAgICAgICAgICAgZGVz
YyA9IFRlc3RFeHBlY3RhdGlvbnMuRVhQRUNUQVRJT05fREVTQ1JJUFRJT05TW3Jlc3VsdF0KKyAg
ICAgICAgICAgIGlmIG5vdF9wYXNzaW5nIGFuZCBsZW4ocmVzdWx0cyk6CisgICAgICAgICAgICAg
ICAgcGN0ID0gbGVuKHJlc3VsdHMpICogMTAwLjAgLyBub3RfcGFzc2luZworICAgICAgICAgICAg
ICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfYWN0dWFsKCIgICU1ZCAlLTI0cyAoJTQuMWYlJSkiICUK
KyAgICAgICAgICAgICAgICAgICAgKGxlbihyZXN1bHRzKSwgZGVzY1tsZW4ocmVzdWx0cykgIT0g
MV0sIHBjdCkpCisKKyAgICBkZWYgX2NvcHlfcmVzdWx0c19odG1sX2ZpbGUoc2VsZik6CisgICAg
ICAgIGJhc2VfZGlyID0gc2VsZi5fcG9ydC5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoJ0xheW91dFRl
c3RzJywgJ2Zhc3QnLCAnaGFybmVzcycpCisgICAgICAgIHJlc3VsdHNfZmlsZSA9IHNlbGYuX2Zz
LmpvaW4oYmFzZV9kaXIsICdyZXN1bHRzLmh0bWwnKQorICAgICAgICAjIEZJWE1FOiBXaGF0IHNo
b3VsZCB3ZSBkbyBpZiB0aGlzIGRvZXNuJ3QgZXhpc3QgKGUuZy4sIGluIHVuaXQgdGVzdHMpPwor
ICAgICAgICBpZiBzZWxmLl9mcy5leGlzdHMocmVzdWx0c19maWxlKToKKyAgICAgICAgICAgIHNl
bGYuX2ZzLmNvcHlmaWxlKHJlc3VsdHNfZmlsZSwgc2VsZi5fZnMuam9pbihzZWxmLl9yZXN1bHRz
X2RpcmVjdG9yeSwgInJlc3VsdHMuaHRtbCIpKQorCisgICAgZGVmIF9zaG93X3Jlc3VsdHNfaHRt
bF9maWxlKHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToKKyAgICAgICAgIiIiU2hvd3MgdGhlIHJlc3Vs
dHMuaHRtbCBwYWdlLiIiIgorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmZ1bGxfcmVzdWx0c19o
dG1sOgorICAgICAgICAgICAgdGVzdF9maWxlcyA9IHJlc3VsdF9zdW1tYXJ5LmZhaWx1cmVzLmtl
eXMoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdW5leHBlY3RlZF9mYWlsdXJlcyA9IHNl
bGYuX2dldF9mYWlsdXJlcyhyZXN1bHRfc3VtbWFyeSwgaW5jbHVkZV9jcmFzaGVzPVRydWUsIGlu
Y2x1ZGVfbWlzc2luZz1UcnVlKQorICAgICAgICAgICAgdGVzdF9maWxlcyA9IHVuZXhwZWN0ZWRf
ZmFpbHVyZXMua2V5cygpCisKKyAgICAgICAgaWYgbm90IGxlbih0ZXN0X2ZpbGVzKToKKyAgICAg
ICAgICAgIHJldHVybgorCisgICAgICAgIHJlc3VsdHNfZmlsZW5hbWUgPSBzZWxmLl9mcy5qb2lu
KHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5LCAicmVzdWx0cy5odG1sIikKKyAgICAgICAgc2VsZi5f
cG9ydC5zaG93X3Jlc3VsdHNfaHRtbF9maWxlKHJlc3VsdHNfZmlsZW5hbWUpCisKKyAgICBkZWYg
bmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICdNYW5hZ2VyJworCisgICAgZGVmIGlzX2RvbmUo
c2VsZik6CisgICAgICAgIHdvcmtlcl9zdGF0ZXMgPSBzZWxmLl93b3JrZXJfc3RhdGVzLnZhbHVl
cygpCisgICAgICAgIHJldHVybiB3b3JrZXJfc3RhdGVzIGFuZCBhbGwoc2VsZi5fd29ya2VyX2lz
X2RvbmUod29ya2VyX3N0YXRlKSBmb3Igd29ya2VyX3N0YXRlIGluIHdvcmtlcl9zdGF0ZXMpCisK
KyAgICAjIEZJWE1FOiBJbmxpbmUgdGhpcyBmdW5jdGlvbi4KKyAgICBkZWYgX3dvcmtlcl9pc19k
b25lKHNlbGYsIHdvcmtlcl9zdGF0ZSk6CisgICAgICAgIHJldHVybiB3b3JrZXJfc3RhdGUuZG9u
ZQorCisgICAgZGVmIGNhbmNlbF93b3JrZXJzKHNlbGYpOgorICAgICAgICBmb3Igd29ya2VyX3N0
YXRlIGluIHNlbGYuX3dvcmtlcl9zdGF0ZXMudmFsdWVzKCk6CisgICAgICAgICAgICB3b3JrZXJf
c3RhdGUud29ya2VyX2Nvbm5lY3Rpb24uY2FuY2VsKCkKKworICAgIGRlZiBoYW5kbGVfc3RhcnRl
ZF90ZXN0KHNlbGYsIHNvdXJjZSwgdGVzdF9pbmZvLCBoYW5nX3RpbWVvdXQpOgorICAgICAgICB3
b3JrZXJfc3RhdGUgPSBzZWxmLl93b3JrZXJfc3RhdGVzW3NvdXJjZV0KKyAgICAgICAgd29ya2Vy
X3N0YXRlLmN1cnJlbnRfdGVzdF9uYW1lID0gdGVzdF9pbmZvLnRlc3RfbmFtZQorICAgICAgICB3
b3JrZXJfc3RhdGUubmV4dF90aW1lb3V0ID0gdGltZS50aW1lKCkgKyBoYW5nX3RpbWVvdXQKKwor
ICAgIGRlZiBoYW5kbGVfZG9uZShzZWxmLCBzb3VyY2UpOgorICAgICAgICB3b3JrZXJfc3RhdGUg
PSBzZWxmLl93b3JrZXJfc3RhdGVzW3NvdXJjZV0KKyAgICAgICAgd29ya2VyX3N0YXRlLmRvbmUg
PSBUcnVlCisKKyAgICBkZWYgaGFuZGxlX2V4Y2VwdGlvbihzZWxmLCBzb3VyY2UsIGV4Y2VwdGlv
bl90eXBlLCBleGNlcHRpb25fdmFsdWUsIHN0YWNrKToKKyAgICAgICAgaWYgZXhjZXB0aW9uX3R5
cGUgaW4gKEtleWJvYXJkSW50ZXJydXB0LCBUZXN0UnVuSW50ZXJydXB0ZWRFeGNlcHRpb24pOgor
ICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9uX3R5cGUoZXhjZXB0aW9uX3ZhbHVlKQorICAgICAg
ICBfbG9nLmVycm9yKCIlcyByYWlzZWQgJXMoJyVzJyk6IiAlICgKKyAgICAgICAgICAgICAgICAg
ICBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uX3ZhbHVlLl9fY2xhc3NfXy5f
X25hbWVfXywKKyAgICAgICAgICAgICAgICAgICBzdHIoZXhjZXB0aW9uX3ZhbHVlKSkpCisgICAg
ICAgIHNlbGYuX2xvZ193b3JrZXJfc3RhY2soc3RhY2spCisgICAgICAgIHJhaXNlIFdvcmtlckV4
Y2VwdGlvbihzdHIoZXhjZXB0aW9uX3ZhbHVlKSkKKworICAgIGRlZiBoYW5kbGVfZmluaXNoZWRf
bGlzdChzZWxmLCBzb3VyY2UsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpOgor
ICAgICAgICBzZWxmLl9ncm91cF9zdGF0c1tsaXN0X25hbWVdID0gKG51bV90ZXN0cywgZWxhcHNl
ZF90aW1lKQorCisgICAgICAgIGRlZiBmaW5kKG5hbWUsIHRlc3RfbGlzdHMpOgorICAgICAgICAg
ICAgZm9yIGkgaW4gcmFuZ2UobGVuKHRlc3RfbGlzdHMpKToKKyAgICAgICAgICAgICAgICBpZiB0
ZXN0X2xpc3RzW2ldLm5hbWUgPT0gbmFtZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkK
KyAgICAgICAgICAgIHJldHVybiAtMQorCisgICAgICAgIGluZGV4ID0gZmluZChsaXN0X25hbWUs
IHNlbGYuX3JlbWFpbmluZ19sb2NrZWRfc2hhcmRzKQorICAgICAgICBpZiBpbmRleCA+PSAwOgor
ICAgICAgICAgICAgc2VsZi5fcmVtYWluaW5nX2xvY2tlZF9zaGFyZHMucG9wKGluZGV4KQorICAg
ICAgICAgICAgaWYgbm90IHNlbGYuX3JlbWFpbmluZ19sb2NrZWRfc2hhcmRzOgorICAgICAgICAg
ICAgICAgIHNlbGYuc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCisKKyAgICBkZWYgaGFuZGxlX2Zp
bmlzaGVkX3Rlc3Qoc2VsZiwgc291cmNlLCByZXN1bHQsIGVsYXBzZWRfdGltZSk6CisgICAgICAg
IHdvcmtlcl9zdGF0ZSA9IHNlbGYuX3dvcmtlcl9zdGF0ZXNbc291cmNlXQorICAgICAgICB3b3Jr
ZXJfc3RhdGUubmV4dF90aW1lb3V0ID0gTm9uZQorICAgICAgICB3b3JrZXJfc3RhdGUuY3VycmVu
dF90ZXN0X25hbWUgPSBOb25lCisgICAgICAgIHdvcmtlcl9zdGF0ZS5zdGF0c1sndG90YWxfdGlt
ZSddICs9IGVsYXBzZWRfdGltZQorICAgICAgICB3b3JrZXJfc3RhdGUuc3RhdHNbJ251bV90ZXN0
cyddICs9IDEKKworICAgICAgICBzZWxmLl9hbGxfcmVzdWx0cy5hcHBlbmQocmVzdWx0KQorICAg
ICAgICBzZWxmLl91cGRhdGVfc3VtbWFyeV93aXRoX3Jlc3VsdChzZWxmLl9jdXJyZW50X3Jlc3Vs
dF9zdW1tYXJ5LCByZXN1bHQpCisKKyAgICBkZWYgX2xvZ193b3JrZXJfc3RhY2soc2VsZiwgc3Rh
Y2spOgorICAgICAgICB3ZWJraXRweWRpciA9IHNlbGYuX3BvcnQucGF0aF9mcm9tX3dlYmtpdF9i
YXNlKCdUb29scycsICdTY3JpcHRzJywgJ3dlYmtpdHB5JykgKyBzZWxmLl9wb3J0Ll9maWxlc3lz
dGVtLnNlcAorICAgICAgICBmb3IgZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCBmdW5jdGlvbl9uYW1l
LCB0ZXh0IGluIHN0YWNrOgorICAgICAgICAgICAgaWYgZmlsZW5hbWUuc3RhcnRzd2l0aCh3ZWJr
aXRweWRpcik6CisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKHdl
YmtpdHB5ZGlyLCAnJykKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoJyAgJXM6JXUgKGluICVzKScg
JSAoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCBmdW5jdGlvbl9uYW1lKSkKKyAgICAgICAgICAgIF9s
b2cuZXJyb3IoJyAgICAlcycgJSB0ZXh0KQorCisKK2RlZiByZWFkX3Rlc3RfZmlsZXMoZnMsIGZp
bGVzLCB0ZXN0X3BhdGhfc2VwYXJhdG9yKToKKyAgICB0ZXN0cyA9IFtdCisgICAgZm9yIGZpbGUg
aW4gZmlsZXM6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHRlc3RfcGF0aF9zZXBhcmF0
b3IgIT0gZnMuc2VwOgorICAgICAgICAgICAgICAgIGZpbGUgPSBmaWxlLnJlcGxhY2UodGVzdF9w
YXRoX3NlcGFyYXRvciwgZnMuc2VwKQorICAgICAgICAgICAgZmlsZV9jb250ZW50cyA9IGZzLnJl
YWRfdGV4dF9maWxlKGZpbGUpLnNwbGl0KCdcbicpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBm
aWxlX2NvbnRlbnRzOgorICAgICAgICAgICAgICAgIGxpbmUgPSB0ZXN0X2V4cGVjdGF0aW9ucy5z
dHJpcF9jb21tZW50cyhsaW5lKQorICAgICAgICAgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAg
ICAgICAgICAgIHRlc3RzLmFwcGVuZChsaW5lKQorICAgICAgICBleGNlcHQgSU9FcnJvciwgZToK
KyAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAg
IF9sb2cuY3JpdGljYWwoJycpCisgICAgICAgICAgICAgICAgX2xvZy5jcml0aWNhbCgnLS10ZXN0
LWxpc3QgZmlsZSAiJXMiIG5vdCBmb3VuZCcgJSBmaWxlKQorICAgICAgICAgICAgcmFpc2UKKyAg
ICByZXR1cm4gdGVzdHMKKworCisjIEZJWE1FOiBUaGVzZSB0d28gZnJlZSBmdW5jdGlvbnMgYmVs
b25nIGVpdGhlciBvbiBtYW5hZ2VyIChzaW5jZSBpdCdzIHRoZSBvbmx5IG9uZQorIyB3aGljaCB1
c2VzIHRoZW0pIG9yIGluIGEgZGlmZmVyZW50IGZpbGUgKGlmIHRoZXkgbmVlZCB0byBiZSByZS11
c2VkKS4KK2RlZiB0ZXN0X2tleShwb3J0LCB0ZXN0X25hbWUpOgorICAgICIiIlR1cm5zIGEgdGVz
dCBuYW1lIGludG8gYSBsaXN0IHdpdGggdHdvIHN1Ymxpc3RzLCB0aGUgbmF0dXJhbCBrZXkgb2Yg
dGhlCisgICAgZGlybmFtZSwgYW5kIHRoZSBuYXR1cmFsIGtleSBvZiB0aGUgYmFzZW5hbWUuCisK
KyAgICBUaGlzIGNhbiBiZSB1c2VkIHdoZW4gc29ydGluZyBwYXRocyBzbyB0aGF0IGZpbGVzIGlu
IGEgZGlyZWN0b3J5LgorICAgIGRpcmVjdG9yeSBhcmUga2VwdCB0b2dldGhlciByYXRoZXIgdGhh
biBiZWluZyBtaXhlZCBpbiB3aXRoIGZpbGVzIGluCisgICAgc3ViZGlyZWN0b3JpZXMuIiIiCisg
ICAgZGlybmFtZSwgYmFzZW5hbWUgPSBwb3J0LnNwbGl0X3Rlc3QodGVzdF9uYW1lKQorICAgIHJl
dHVybiAobmF0dXJhbF9zb3J0X2tleShkaXJuYW1lICsgcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9S
KSwgbmF0dXJhbF9zb3J0X2tleShiYXNlbmFtZSkpCisKKworZGVmIG5hdHVyYWxfc29ydF9rZXko
c3RyaW5nX3RvX3NwbGl0KToKKyAgICAiIiIgVHVybiBhIHN0cmluZyBpbnRvIGEgbGlzdCBvZiBz
dHJpbmcgYW5kIG51bWJlciBjaHVua3MuCisgICAgICAgICJ6MjNhIiAtPiBbInoiLCAyMywgImEi
XQorCisgICAgICAgIENhbiBiZSB1c2VkIHRvIGltcGxlbWVudCAibmF0dXJhbCBzb3J0IiBvcmRl
ci4gU2VlOgorICAgICAgICAgICAgaHR0cDovL3d3dy5jb2Rpbmdob3Jyb3IuY29tL2Jsb2cvMjAw
Ny8xMi9zb3J0aW5nLWZvci1odW1hbnMtbmF0dXJhbC1zb3J0LW9yZGVyLmh0bWwKKyAgICAgICAg
ICAgIGh0dHA6Ly9uZWRiYXRjaGVsZGVyLmNvbS9ibG9nLzIwMDcxMi5odG1sI2UyMDA3MTIxMVQw
NTQ5NTYKKyAgICAiIiIKKyAgICBkZWYgdHJ5aW50KHZhbCk6CisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIHJldHVybiBpbnQodmFsKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByZXR1
cm4gdmFsCisKKyAgICByZXR1cm4gW3RyeWludChjaHVuaykgZm9yIGNodW5rIGluIHJlLnNwbGl0
KCcoXGQrKScsIHN0cmluZ190b19zcGxpdCldCisKKworY2xhc3MgX1dvcmtlclN0YXRlKG9iamVj
dCk6CisgICAgIiIiQSBjbGFzcyBmb3IgdGhlIG1hbmFnZXIgdG8gdXNlIHRvIHRyYWNrIHRoZSBj
dXJyZW50IHN0YXRlIG9mIHRoZSB3b3JrZXJzLiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBu
dW1iZXIsIHdvcmtlcl9jb25uZWN0aW9uKToKKyAgICAgICAgc2VsZi53b3JrZXJfY29ubmVjdGlv
biA9IHdvcmtlcl9jb25uZWN0aW9uCisgICAgICAgIHNlbGYubnVtYmVyID0gbnVtYmVyCisgICAg
ICAgIHNlbGYuZG9uZSA9IEZhbHNlCisgICAgICAgIHNlbGYuY3VycmVudF90ZXN0X25hbWUgPSBO
b25lCisgICAgICAgIHNlbGYubmV4dF90aW1lb3V0ID0gTm9uZQorICAgICAgICBzZWxmLnN0YXRz
ID0ge30KKyAgICAgICAgc2VsZi5zdGF0c1snbmFtZSddID0gd29ya2VyX2Nvbm5lY3Rpb24ubmFt
ZQorICAgICAgICBzZWxmLnN0YXRzWydudW1fdGVzdHMnXSA9IDAKKyAgICAgICAgc2VsZi5zdGF0
c1sndG90YWxfdGltZSddID0gMAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gIl9Xb3JrZXJTdGF0ZSgiICsgc3RyKHNlbGYuX19kaWN0X18pICsgIikiCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRy
b2xsZXJzL21hbmFnZXIucHkJKHJldmlzaW9uIDApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00
OSwxNSArNDksMTUgQEAgaW1wb3J0IHRpbWUKIAogZnJvbSB3ZWJraXRweS5jb21tb24uY2hlY2tv
dXQgaW1wb3J0IHNjbQogCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycyBp
bXBvcnQgbWFuYWdlcl93b3JrZXJfYnJva2VyCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5j
b250cm9sbGVycyBpbXBvcnQgd29ya2VyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlv
dXRfcGFja2FnZSBpbXBvcnQganNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IKIGZyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBqc29uX3Jlc3VsdHNfZ2Vu
ZXJhdG9yCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQg
bWFuYWdlcl93b3JrZXJfYnJva2VyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRf
cGFja2FnZSBpbXBvcnQgcHJpbnRpbmcKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91
dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucwogZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKIGZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X3Jlc3VsdHMKIGZyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X3Jlc3VsdHNfdXBs
b2FkZXIKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB3
b3JrZXIKIAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UucmVzdWx0
X3N1bW1hcnkgaW1wb3J0IFJlc3VsdFN1bW1hcnkKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LmxheW91dF9wYWNrYWdlLnRlc3RfaW5wdXQgaW1wb3J0IFRlc3RJbnB1dApJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl91bml0dGVz
dC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9j
b250cm9sbGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA5MDUyMCkJKGZyb20gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl91
bml0dGVzdC5weTo5MDUyMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2NvbnRyb2xsZXJzL21hbmFnZXJfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyMzEgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR2Fib3IgUmFw
Y3NhbnlpIChyZ2Fib3JAaW5mLnUtc3plZ2VkLmh1KSwgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4K
KyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKyIiIlVuaXQgdGVzdHMgZm9yIG1hbmFnZXIucHkuIiIiCisKK2lt
cG9ydCBTdHJpbmdJTworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbSBpbXBvcnQgZmlsZXN5c3RlbV9tb2NrCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0g
aW1wb3J0IG91dHB1dGNhcHR1cmUKK2Zyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5tb2NrIGltcG9y
dCBNb2NrCitmcm9tIHdlYmtpdHB5IGltcG9ydCBsYXlvdXRfdGVzdHMKK2Zyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzIGltcG9ydCBwb3J0CisKK2Zyb20gd2Via2l0cHkgaW1wb3J0IGxheW91dF90
ZXN0cworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHJ1bl93ZWJraXRfdGVzdHMK
K2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlLm1hbmFnZXIgaW1wb3J0
IE1hbmFnZXIsIG5hdHVyYWxfc29ydF9rZXksIHRlc3Rfa2V5LCBUZXN0UnVuSW50ZXJydXB0ZWRF
eGNlcHRpb24sIFRlc3RTaGFyZAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3Bh
Y2thZ2UgaW1wb3J0IHByaW50aW5nCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRf
cGFja2FnZS5yZXN1bHRfc3VtbWFyeSBpbXBvcnQgUmVzdWx0U3VtbWFyeQorZnJvbSB3ZWJraXRw
eS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucworCisKK2NsYXNzIE1hbmFnZXJXcmFw
cGVyKE1hbmFnZXIpOgorICAgIGRlZiBfZ2V0X3Rlc3RfaW5wdXRfZm9yX2ZpbGUoc2VsZiwgdGVz
dF9maWxlKToKKyAgICAgICAgcmV0dXJuIHRlc3RfZmlsZQorCisKK2NsYXNzIFNoYXJkaW5nVGVz
dHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHRlc3RfbGlzdCA9IFsKKyAgICAgICAgImh0dHAv
dGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VuaWNvZGUuaHRtIiwKKyAgICAgICAgImFuaW1hdGlvbnMv
a2V5ZnJhbWVzLmh0bWwiLAorICAgICAgICAiaHR0cC90ZXN0cy9zZWN1cml0eS92aWV3LXNvdXJj
ZS1uby1yZWZyZXNoLmh0bWwiLAorICAgICAgICAiaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMv
d2Vic29ja2V0LXByb3RvY29sLWlnbm9yZWQuaHRtbCIsCisgICAgICAgICJmYXN0L2Nzcy9kaXNw
bGF5LW5vbmUtaW5saW5lLXN0eWxlLWNoYW5nZS1jcmFzaC5odG1sIiwKKyAgICAgICAgImh0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3Qvc3VwcG9ydGVkLXhtbC1jb250ZW50LXR5cGVzLmh0bWwiLAor
ICAgICAgICAiZG9tL2h0bWwvbGV2ZWwyL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQwMy5odG1sIiwK
KyAgICAgICAgImlldGVzdGNlbnRlci9KYXZhc2NyaXB0LzExLjEuNV80LTQtYy0xLmh0bWwiLAor
ICAgICAgICAiZG9tL2h0bWwvbGV2ZWwyL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQwNi5odG1sIiwK
KyAgICBdCisKKyAgICBkZWYgZ2V0X3NoYXJkcyhzZWxmLCBudW1fd29ya2VycywgZnVsbHlfcGFy
YWxsZWwpOgorICAgICAgICBwb3J0ID0gbGF5b3V0X3Rlc3RzLnBvcnQuZ2V0KHBvcnRfbmFtZT0n
dGVzdCcpCisgICAgICAgIHBvcnQuX2ZpbGVzeXN0ZW0gPSBmaWxlc3lzdGVtX21vY2suTW9ja0Zp
bGVTeXN0ZW0oKQorICAgICAgICBzZWxmLm1hbmFnZXIgPSBNYW5hZ2VyV3JhcHBlcihwb3J0PXBv
cnQsIG9wdGlvbnM9TW9jaygpLCBwcmludGVyPU1vY2soKSkKKyAgICAgICAgcmV0dXJuIHNlbGYu
bWFuYWdlci5fc2hhcmRfdGVzdHMoc2VsZi50ZXN0X2xpc3QsIG51bV93b3JrZXJzLCBmdWxseV9w
YXJhbGxlbCkKKworICAgIGRlZiB0ZXN0X3NoYXJkX2J5X2RpcihzZWxmKToKKyAgICAgICAgbG9j
a2VkLCB1bmxvY2tlZCA9IHNlbGYuZ2V0X3NoYXJkcyhudW1fd29ya2Vycz0yLCBmdWxseV9wYXJh
bGxlbD1GYWxzZSkKKworICAgICAgICAjIE5vdGUgdGhhdCBhbHRob3VnaCB0aGVyZSBhcmUgdGVz
dHMgaW4gbXVsdGlwbGUgZGlycyB0aGF0IG5lZWQgbG9ja3MsCisgICAgICAgICMgdGhleSBhcmUg
Y3JhbW1lZCBpbnRvIGEgc2luZ2xlIHNoYXJkIGluIG9yZGVyIHRvIHJlZHVjZSB0aGUgIyBvZgor
ICAgICAgICAjIHdvcmtlcnMgaGl0dGluZyB0aGUgc2VydmVyIGF0IG9uY2UuCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKGxvY2tlZCwKKyAgICAgICAgICAgIFtUZXN0U2hhcmQoJ2xvY2tlZF9z
aGFyZF8xJywKKyAgICAgICAgICAgICAgWydodHRwL3Rlc3RzL3NlY3VyaXR5L3ZpZXctc291cmNl
LW5vLXJlZnJlc2guaHRtbCcsCisgICAgICAgICAgICAgICAnaHR0cC90ZXN0cy93ZWJzb2NrZXQv
dGVzdHMvdW5pY29kZS5odG0nLAorICAgICAgICAgICAgICAgJ2h0dHAvdGVzdHMvd2Vic29ja2V0
L3Rlc3RzL3dlYnNvY2tldC1wcm90b2NvbC1pZ25vcmVkLmh0bWwnLAorICAgICAgICAgICAgICAg
J2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3VwcG9ydGVkLXhtbC1jb250ZW50LXR5cGVzLmh0
bWwnXSldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh1bmxvY2tlZCwKKyAgICAgICAgICAg
IFtUZXN0U2hhcmQoJ2FuaW1hdGlvbnMnLAorICAgICAgICAgICAgICAgICAgICAgICBbJ2FuaW1h
dGlvbnMva2V5ZnJhbWVzLmh0bWwnXSksCisgICAgICAgICAgICAgVGVzdFNoYXJkKCdkb20vaHRt
bC9sZXZlbDIvaHRtbCcsCisgICAgICAgICAgICAgICAgICAgICAgIFsnZG9tL2h0bWwvbGV2ZWwy
L2h0bWwvSFRNTEFuY2hvckVsZW1lbnQwMy5odG1sJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICdkb20vaHRtbC9sZXZlbDIvaHRtbC9IVE1MQW5jaG9yRWxlbWVudDA2Lmh0bWwnXSksCisgICAg
ICAgICAgICAgVGVzdFNoYXJkKCdmYXN0L2NzcycsCisgICAgICAgICAgICAgICAgICAgICAgIFsn
ZmFzdC9jc3MvZGlzcGxheS1ub25lLWlubGluZS1zdHlsZS1jaGFuZ2UtY3Jhc2guaHRtbCddKSwK
KyAgICAgICAgICAgICBUZXN0U2hhcmQoJ2lldGVzdGNlbnRlci9KYXZhc2NyaXB0JywKKyAgICAg
ICAgICAgICAgICAgICAgICAgWydpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xMS4xLjVfNC00LWMt
MS5odG1sJ10pXSkKKworICAgIGRlZiB0ZXN0X3NoYXJkX2V2ZXJ5X2ZpbGUoc2VsZik6CisgICAg
ICAgIGxvY2tlZCwgdW5sb2NrZWQgPSBzZWxmLmdldF9zaGFyZHMobnVtX3dvcmtlcnM9MiwgZnVs
bHlfcGFyYWxsZWw9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobG9ja2VkLAorICAg
ICAgICAgICAgW1Rlc3RTaGFyZCgnLicsIFsnaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvdW5p
Y29kZS5odG0nXSksCisgICAgICAgICAgICAgVGVzdFNoYXJkKCcuJywgWydodHRwL3Rlc3RzL3Nl
Y3VyaXR5L3ZpZXctc291cmNlLW5vLXJlZnJlc2guaHRtbCddKSwKKyAgICAgICAgICAgICBUZXN0
U2hhcmQoJy4nLCBbJ2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3dlYnNvY2tldC1wcm90b2Nv
bC1pZ25vcmVkLmh0bWwnXSksCisgICAgICAgICAgICAgVGVzdFNoYXJkKCcuJywgWydodHRwL3Rl
c3RzL3htbGh0dHByZXF1ZXN0L3N1cHBvcnRlZC14bWwtY29udGVudC10eXBlcy5odG1sJ10pXSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModW5sb2NrZWQsCisgICAgICAgICAgICBbVGVzdFNo
YXJkKCcuJywgWydhbmltYXRpb25zL2tleWZyYW1lcy5odG1sJ10pLAorICAgICAgICAgICAgIFRl
c3RTaGFyZCgnLicsIFsnZmFzdC9jc3MvZGlzcGxheS1ub25lLWlubGluZS1zdHlsZS1jaGFuZ2Ut
Y3Jhc2guaHRtbCddKSwKKyAgICAgICAgICAgICBUZXN0U2hhcmQoJy4nLCBbJ2RvbS9odG1sL2xl
dmVsMi9odG1sL0hUTUxBbmNob3JFbGVtZW50MDMuaHRtbCddKSwKKyAgICAgICAgICAgICBUZXN0
U2hhcmQoJy4nLCBbJ2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzExLjEuNV80LTQtYy0xLmh0bWwn
XSksCisgICAgICAgICAgICAgVGVzdFNoYXJkKCcuJywgWydkb20vaHRtbC9sZXZlbDIvaHRtbC9I
VE1MQW5jaG9yRWxlbWVudDA2Lmh0bWwnXSldKQorCisgICAgZGVmIHRlc3Rfc2hhcmRfaW5fdHdv
KHNlbGYpOgorICAgICAgICBsb2NrZWQsIHVubG9ja2VkID0gc2VsZi5nZXRfc2hhcmRzKG51bV93
b3JrZXJzPTEsIGZ1bGx5X3BhcmFsbGVsPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhsb2NrZWQsCisgICAgICAgICAgICBbVGVzdFNoYXJkKCdsb2NrZWRfdGVzdHMnLAorICAgICAg
ICAgICAgICAgICAgICAgICBbJ2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VuaWNvZGUuaHRt
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICdodHRwL3Rlc3RzL3NlY3VyaXR5L3ZpZXctc291
cmNlLW5vLXJlZnJlc2guaHRtbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnaHR0cC90ZXN0
cy93ZWJzb2NrZXQvdGVzdHMvd2Vic29ja2V0LXByb3RvY29sLWlnbm9yZWQuaHRtbCcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAnaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9zdXBwb3J0ZWQt
eG1sLWNvbnRlbnQtdHlwZXMuaHRtbCddKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHVu
bG9ja2VkLAorICAgICAgICAgICAgW1Rlc3RTaGFyZCgndW5sb2NrZWRfdGVzdHMnLAorICAgICAg
ICAgICAgICAgICAgICAgICBbJ2FuaW1hdGlvbnMva2V5ZnJhbWVzLmh0bWwnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgJ2Zhc3QvY3NzL2Rpc3BsYXktbm9uZS1pbmxpbmUtc3R5bGUtY2hhbmdl
LWNyYXNoLmh0bWwnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2RvbS9odG1sL2xldmVsMi9o
dG1sL0hUTUxBbmNob3JFbGVtZW50MDMuaHRtbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAn
aWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTEuMS41XzQtNC1jLTEuaHRtbCcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAnZG9tL2h0bWwvbGV2ZWwyL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQwNi5o
dG1sJ10pXSkKKworCitjbGFzcyBNYW5hZ2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAg
ZGVmIHRlc3RfaHR0cF9sb2NraW5nKHRlc3Rlcik6CisgICAgICAgIGNsYXNzIExvY2tDaGVja2lu
Z01hbmFnZXIoTWFuYWdlcik6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwg
b3B0aW9ucywgcHJpbnRlcik6CisgICAgICAgICAgICAgICAgc3VwZXIoTG9ja0NoZWNraW5nTWFu
YWdlciwgc2VsZikuX19pbml0X18ocG9ydCwgb3B0aW9ucywgcHJpbnRlcikKKyAgICAgICAgICAg
ICAgICBzZWxmLl9maW5pc2hlZF9saXN0X2NhbGxlZCA9IEZhbHNlCisKKyAgICAgICAgICAgIGRl
ZiBoYW5kbGVfZmluaXNoZWRfbGlzdChzZWxmLCBzb3VyY2UsIGxpc3RfbmFtZSwgbnVtX3Rlc3Rz
LCBlbGFwc2VkX3RpbWUpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9maW5pc2hlZF9s
aXN0X2NhbGxlZDoKKyAgICAgICAgICAgICAgICAgICAgdGVzdGVyLmFzc2VydEVxdWFscyhsaXN0
X25hbWUsICdsb2NrZWRfdGVzdHMnKQorICAgICAgICAgICAgICAgICAgICB0ZXN0ZXIuYXNzZXJ0
VHJ1ZShzZWxmLl9yZW1haW5pbmdfbG9ja2VkX3NoYXJkcykKKyAgICAgICAgICAgICAgICAgICAg
dGVzdGVyLmFzc2VydFRydWUoc2VsZi5faGFzX2h0dHBfbG9jaykKKworICAgICAgICAgICAgICAg
IHN1cGVyKExvY2tDaGVja2luZ01hbmFnZXIsIHNlbGYpLmhhbmRsZV9maW5pc2hlZF9saXN0KHNv
dXJjZSwgbGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSkKKworICAgICAgICAgICAg
ICAgIGlmIG5vdCBzZWxmLl9maW5pc2hlZF9saXN0X2NhbGxlZDoKKyAgICAgICAgICAgICAgICAg
ICAgdGVzdGVyLmFzc2VydEVxdWFscyhzZWxmLl9yZW1haW5pbmdfbG9ja2VkX3NoYXJkcywgW10p
CisgICAgICAgICAgICAgICAgICAgIHRlc3Rlci5hc3NlcnRGYWxzZShzZWxmLl9oYXNfaHR0cF9s
b2NrKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9maW5pc2hlZF9saXN0X2NhbGxlZCA9IFRy
dWUKKworICAgICAgICBvcHRpb25zLCBhcmdzID0gcnVuX3dlYmtpdF90ZXN0cy5wYXJzZV9hcmdz
KFsnLS1wbGF0Zm9ybT10ZXN0JywgJy0tcHJpbnQ9bm90aGluZycsICdodHRwL3Rlc3RzL3Bhc3Nl
cycsICdwYXNzZXMnXSkKKyAgICAgICAgcG9ydCA9IGxheW91dF90ZXN0cy5wb3J0LmdldChwb3J0
X25hbWU9b3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucz1vcHRpb25zKQorICAgICAgICBydW5fd2Vi
a2l0X3Rlc3RzLl9zZXRfdXBfZGVyaXZlZF9vcHRpb25zKHBvcnQsIG9wdGlvbnMpCisgICAgICAg
IHByaW50ZXIgPSBwcmludGluZy5QcmludGVyKHBvcnQsIG9wdGlvbnMsIFN0cmluZ0lPLlN0cmlu
Z0lPKCksIFN0cmluZ0lPLlN0cmluZ0lPKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbmZpZ3VyZV9sb2dnaW5nPVRydWUpCisgICAgICAgIG1hbmFnZXIgPSBMb2NrQ2hl
Y2tpbmdNYW5hZ2VyKHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpCisgICAgICAgIG1hbmFnZXIuY29s
bGVjdF90ZXN0cyhhcmdzLCBbXSkKKyAgICAgICAgbWFuYWdlci5wYXJzZV9leHBlY3RhdGlvbnMo
KQorICAgICAgICByZXN1bHRfc3VtbWFyeSA9IG1hbmFnZXIuc2V0X3VwX3J1bigpCisgICAgICAg
IG51bV91bmV4cGVjdGVkX3Jlc3VsdHMgPSBtYW5hZ2VyLnJ1bihyZXN1bHRfc3VtbWFyeSkKKyAg
ICAgICAgbWFuYWdlci5jbGVhbl91cF9ydW4oKQorICAgICAgICBwcmludGVyLmNsZWFudXAoKQor
ICAgICAgICB0ZXN0ZXIuYXNzZXJ0RXF1YWxzKG51bV91bmV4cGVjdGVkX3Jlc3VsdHMsIDApCisK
KyAgICBkZWYgdGVzdF9pbnRlcnJ1cHRfaWZfYXRfZmFpbHVyZV9saW1pdHMoc2VsZik6CisgICAg
ICAgIHBvcnQgPSBNb2NrKCkKKyAgICAgICAgcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SID0gJy8n
CisgICAgICAgIHBvcnQuX2ZpbGVzeXN0ZW0gPSBmaWxlc3lzdGVtX21vY2suTW9ja0ZpbGVTeXN0
ZW0oKQorICAgICAgICBtYW5hZ2VyID0gTWFuYWdlcihwb3J0PXBvcnQsIG9wdGlvbnM9TW9ja09w
dGlvbnMoKSwgcHJpbnRlcj1Nb2NrKCkpCisKKyAgICAgICAgbWFuYWdlci5fb3B0aW9ucyA9IE1v
Y2tPcHRpb25zKGV4aXRfYWZ0ZXJfbl9mYWlsdXJlcz1Ob25lLCBleGl0X2FmdGVyX25fY3Jhc2hl
c19vcl90aW1lb3V0cz1Ob25lKQorICAgICAgICByZXN1bHRfc3VtbWFyeSA9IFJlc3VsdFN1bW1h
cnkoZXhwZWN0YXRpb25zPU1vY2soKSwgdGVzdF9maWxlcz1bXSkKKyAgICAgICAgcmVzdWx0X3N1
bW1hcnkudW5leHBlY3RlZF9mYWlsdXJlcyA9IDEwMAorICAgICAgICByZXN1bHRfc3VtbWFyeS51
bmV4cGVjdGVkX2NyYXNoZXMgPSA1MAorICAgICAgICByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVk
X3RpbWVvdXRzID0gNTAKKyAgICAgICAgIyBObyBleGNlcHRpb24gd2hlbiB0aGUgZXhpdF9hZnRl
ciogb3B0aW9ucyBhcmUgTm9uZS4KKyAgICAgICAgbWFuYWdlci5faW50ZXJydXB0X2lmX2F0X2Zh
aWx1cmVfbGltaXRzKHJlc3VsdF9zdW1tYXJ5KQorCisgICAgICAgICMgTm8gZXhjZXB0aW9uIHdo
ZW4gd2UgaGF2ZW4ndCBoaXQgdGhlIGxpbWl0IHlldC4KKyAgICAgICAgbWFuYWdlci5fb3B0aW9u
cy5leGl0X2FmdGVyX25fZmFpbHVyZXMgPSAxMDEKKyAgICAgICAgbWFuYWdlci5fb3B0aW9ucy5l
eGl0X2FmdGVyX25fY3Jhc2hlc19vcl90aW1lb3V0cyA9IDEwMQorICAgICAgICBtYW5hZ2VyLl9p
bnRlcnJ1cHRfaWZfYXRfZmFpbHVyZV9saW1pdHMocmVzdWx0X3N1bW1hcnkpCisKKyAgICAgICAg
IyBJbnRlcnJ1cHQgaWYgd2UndmUgZXhjZWVkZWQgZWl0aGVyIGxpbWl0OgorICAgICAgICBtYW5h
Z2VyLl9vcHRpb25zLmV4aXRfYWZ0ZXJfbl9jcmFzaGVzX29yX3RpbWVvdXRzID0gMTAKKyAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMoVGVzdFJ1bkludGVycnVwdGVkRXhjZXB0aW9uLCBtYW5hZ2Vy
Ll9pbnRlcnJ1cHRfaWZfYXRfZmFpbHVyZV9saW1pdHMsIHJlc3VsdF9zdW1tYXJ5KQorCisgICAg
ICAgIG1hbmFnZXIuX29wdGlvbnMuZXhpdF9hZnRlcl9uX2NyYXNoZXNfb3JfdGltZW91dHMgPSBO
b25lCisgICAgICAgIG1hbmFnZXIuX29wdGlvbnMuZXhpdF9hZnRlcl9uX2ZhaWx1cmVzID0gMTAK
KyAgICAgICAgZXhjZXB0aW9uID0gc2VsZi5hc3NlcnRSYWlzZXMoVGVzdFJ1bkludGVycnVwdGVk
RXhjZXB0aW9uLCBtYW5hZ2VyLl9pbnRlcnJ1cHRfaWZfYXRfZmFpbHVyZV9saW1pdHMsIHJlc3Vs
dF9zdW1tYXJ5KQorCisKK2NsYXNzIE5hdHVyYWxDb21wYXJlVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CisgICAgZGVmIGFzc2VydF9jbXAoc2VsZiwgeCwgeSwgcmVzdWx0KToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoY21wKG5hdHVyYWxfc29ydF9rZXkoeCksIG5hdHVyYWxfc29ydF9rZXko
eSkpLCByZXN1bHQpCisKKyAgICBkZWYgdGVzdF9uYXR1cmFsX2NvbXBhcmUoc2VsZik6CisgICAg
ICAgIHNlbGYuYXNzZXJ0X2NtcCgnYScsICdhJywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRfY21w
KCdhYicsICdhJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRfY21wKCdhJywgJ2FiJywgLTEpCisg
ICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnJywgJycsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0X2Nt
cCgnJywgJ2FiJywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnMScsICcyJywgLTEpCisg
ICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnMicsICcxJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRf
Y21wKCcxJywgJzEwJywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnMicsICcxMCcsIC0x
KQorICAgICAgICBzZWxmLmFzc2VydF9jbXAoJ2Zvb18xLmh0bWwnLCAnZm9vXzIuaHRtbCcsIC0x
KQorICAgICAgICBzZWxmLmFzc2VydF9jbXAoJ2Zvb18xLjEuaHRtbCcsICdmb29fMi5odG1sJywg
LTEpCisgICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnZm9vXzEuaHRtbCcsICdmb29fMTAuaHRtbCcs
IC0xKQorICAgICAgICBzZWxmLmFzc2VydF9jbXAoJ2Zvb18yLmh0bWwnLCAnZm9vXzEwLmh0bWwn
LCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRfY21wKCdmb29fMjMuaHRtbCcsICdmb29fMTAuaHRt
bCcsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnZm9vXzIzLmh0bWwnLCAnZm9vXzEwMC5o
dG1sJywgLTEpCisKKworY2xhc3MgS2V5Q29tcGFyZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgor
ICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wb3J0ID0gbGF5b3V0X3Rlc3RzLnBv
cnQuZ2V0KCd0ZXN0JykKKworICAgIGRlZiBhc3NlcnRfY21wKHNlbGYsIHgsIHksIHJlc3VsdCk6
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNtcCh0ZXN0X2tleShzZWxmLnBvcnQsIHgpLCB0
ZXN0X2tleShzZWxmLnBvcnQsIHkpKSwgcmVzdWx0KQorCisgICAgZGVmIHRlc3RfdGVzdF9rZXko
c2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnL2EnLCAnL2EnLCAwKQorICAgICAgICBz
ZWxmLmFzc2VydF9jbXAoJy9hJywgJy9iJywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgn
L2EyJywgJy9hMTAnLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRfY21wKCcvYTIvZm9vJywgJy9h
MTAvZm9vJywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnL2EvZm9vMTEnLCAnL2EvZm9v
MicsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnL2FiJywgJy9hL2EvYicsIC0xKQorICAg
ICAgICBzZWxmLmFzc2VydF9jbXAoJy9hL2EvYicsICcvYWInLCAxKQorICAgICAgICBzZWxmLmFz
c2VydF9jbXAoJy9mb28tYmFyL2JheicsICcvZm9vL2JheicsIC0xKQorCisKK2lmIF9fbmFtZV9f
ID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xs
ZXJzL21hbmFnZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDApCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGlt
cG9ydCBwb3J0CiAKIGZyb20gd2Via2l0cHkgaW1wb3J0IGxheW91dF90ZXN0cwogZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHJ1bl93ZWJraXRfdGVzdHMKLWZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlLm1hbmFnZXIgaW1wb3J0IE1hbmFnZXIsIG5hdHVy
YWxfc29ydF9rZXksIHRlc3Rfa2V5LCBUZXN0UnVuSW50ZXJydXB0ZWRFeGNlcHRpb24sIFRlc3RT
aGFyZAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMubWFuYWdlciBpbXBv
cnQgTWFuYWdlciwgbmF0dXJhbF9zb3J0X2tleSwgdGVzdF9rZXksIFRlc3RSdW5JbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiwgVGVzdFNoYXJkCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRf
cGFja2FnZSBpbXBvcnQgcHJpbnRpbmcKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91
dF9wYWNrYWdlLnJlc3VsdF9zdW1tYXJ5IGltcG9ydCBSZXN1bHRTdW1tYXJ5CiBmcm9tIHdlYmtp
dHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tPcHRpb25zCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXIu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29u
dHJvbGxlcnMvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5CShyZXZpc2lvbiA5MDUyMCkJKGZyb20g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdl
cl93b3JrZXJfYnJva2VyLnB5OjkwNTIwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjg0IEBACisjIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBt
ZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisj
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiTW9kdWxlIGZvciBo
YW5kbGluZyBtZXNzYWdlcyBhbmQgY29uY3VycmVuY3kgZm9yIHJ1bi13ZWJraXQtdGVzdHMuCisK
K1RoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBtZXNzYWdlIGJyb2tlciB0aGF0IGNvbm5lY3RzIHRo
ZSBtYW5hZ2VyIHRvIHRoZQord29ya2VyczogaXQgcHJvdmlkZXMgYSBtZXNzYWdpbmcgYWJzdHJh
Y3Rpb24gYW5kIG1lc3NhZ2UgbG9vcHMgKGJ1aWxkaW5nIG9uCit0b3Agb2YgbWVzc2FnZV9icm9r
ZXIpLCBhbmQgaGFuZGxlcyBzdGFydGluZyB3b3JrZXJzIGJ5IGxhdW5jaGluZyBwcm9jZXNzZXMu
CisKK1RoZXJlIGFyZSBhIGxvdCBvZiBjbGFzc2VzIGFuZCBvYmplY3RzIGludm9sdmVkIGluIGEg
ZnVsbHkgY29ubmVjdGVkIHN5c3RlbS4KK1RoZXkgaW50ZXJhY3QgbW9yZSBvciBsZXNzIGxpa2U6
CisKKyAgTWFuYWdlciAgLS0+ICBfSW5saW5lTWFuYWdlciAtLS0+IF9JbmxpbmVXb3JrZXIgPC0+
IFdvcmtlcgorICAgICBeICAgICAgICAgICAgICAgICAgICBcICAgICAgICAgICAgICAgLyAgICAg
ICAgICAgICAgXgorICAgICB8ICAgICAgICAgICAgICAgICAgICAgdiAgICAgICAgICAgICB2ICAg
ICAgICAgICAgICAgfAorICAgICBcLS0tLS0tLS0tLS0tLS0tLS0tLS0gIE1lc3NhZ2VCcm9rZXIg
ICAtLS0tLS0tLS0tLS0tLworIiIiCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UK
K2ltcG9ydCBwcmludGluZworaW1wb3J0IFF1ZXVlCitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFk
CitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdGltZQorCisKKyMgSGFuZGxlIFB5dGhvbiA8IDIu
NiB3aGVyZSBtdWx0aXByb2Nlc3NpbmcgaXNuJ3QgYXZhaWxhYmxlLgordHJ5OgorICAgIGltcG9y
dCBtdWx0aXByb2Nlc3NpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBtdWx0aXByb2Nlc3Np
bmcgPSBOb25lCisKKworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBzdGFja191
dGlscworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKK2Zyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBtZXNzYWdlX2Jyb2tlcgorCisK
K19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworIworIyBUb3BpYyBuYW1lcyBm
b3IgTWFuYWdlciA8LT4gV29ya2VyIG1lc3NhZ2luZworIworTUFOQUdFUl9UT1BJQyA9ICdtYW5h
Z2VycycKK0FOWV9XT1JLRVJfVE9QSUMgPSAnd29ya2VycycKKworCitkZWYgcnVudGltZV9vcHRp
b25zKCk6CisgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBvcHRwYXJzZS5PcHRpb24gb2JqZWN0cyBm
b3IgYW55IHJ1bnRpbWUgdmFsdWVzIHVzZWQKKyAgICBieSB0aGlzIG1vZHVsZS4iIiIKKyAgICBv
cHRpb25zID0gWworICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS13b3JrZXItbW9kZWwi
LCBhY3Rpb249InN0b3JlIiwKKyAgICAgICAgICAgIGhlbHA9KCJjb250cm9scyB3b3JrZXIgbW9k
ZWwuIFZhbGlkIHZhbHVlcyBhcmUgIgorICAgICAgICAgICAgIidpbmxpbmUnIGFuZCAncHJvY2Vz
c2VzJy4iKSksCisgICAgXQorICAgIHJldHVybiBvcHRpb25zCisKKworZGVmIGdldChwb3J0LCBv
cHRpb25zLCBjbGllbnQsIHdvcmtlcl9jbGFzcyk6CisgICAgIiIiUmV0dXJuIGEgY29ubmVjdGlv
biB0byBhIG1hbmFnZXIvd29ya2VyIG1lc3NhZ2VfYnJva2VyCisKKyAgICBBcmdzOgorICAgICAg
ICBwb3J0IC0gaGFuZGxlIHRvIGxheW91dF90ZXN0cy9wb3J0IG9iamVjdCBmb3IgcG9ydC1zcGVj
aWZpYyBzdHVmZgorICAgICAgICBvcHRpb25zIC0gb3B0cGFyc2UgYXJndW1lbnQgZm9yIGNvbW1h
bmQtbGluZSBvcHRpb25zCisgICAgICAgIGNsaWVudCAtIG1lc3NhZ2VfYnJva2VyLkJyb2tlckNs
aWVudCBpbXBsZW1lbnRhdGlvbiB0byBkaXNwYXRjaAorICAgICAgICAgICAgcmVwbGllcyB0by4K
KyAgICAgICAgd29ya2VyX2NsYXNzIC0gdHlwZSBvZiB3b3JrZXJzIHRvIGNyZWF0ZS4gVGhpcyBj
bGFzcyBtdXN0IGltcGxlbWVudAorICAgICAgICAgICAgdGhlIG1ldGhvZHMgaW4gQWJzdHJhY3RX
b3JrZXIuCisgICAgUmV0dXJuczoKKyAgICAgICAgQSBoYW5kbGUgdG8gYW4gb2JqZWN0IHRoYXQg
d2lsbCB0YWxrIHRvIGEgbWVzc2FnZSBicm9rZXIgY29uZmlndXJlZAorICAgICAgICBmb3IgdGhl
IG5vcm1hbCBtYW5hZ2VyL3dvcmtlciBjb21tdW5pY2F0aW9uLgorICAgICIiIgorICAgIHdvcmtl
cl9tb2RlbCA9IG9wdGlvbnMud29ya2VyX21vZGVsCisgICAgaWYgd29ya2VyX21vZGVsID09ICdp
bmxpbmUnOgorICAgICAgICBxdWV1ZV9jbGFzcyA9IFF1ZXVlLlF1ZXVlCisgICAgICAgIG1hbmFn
ZXJfY2xhc3MgPSBfSW5saW5lTWFuYWdlcgorICAgIGVsaWYgd29ya2VyX21vZGVsID09ICdwcm9j
ZXNzZXMnIGFuZCBtdWx0aXByb2Nlc3Npbmc6CisgICAgICAgIHF1ZXVlX2NsYXNzID0gbXVsdGlw
cm9jZXNzaW5nLlF1ZXVlCisgICAgICAgIG1hbmFnZXJfY2xhc3MgPSBfTXVsdGlQcm9jZXNzTWFu
YWdlcgorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuc3VwcG9ydGVkIHZh
bHVlIGZvciAtLXdvcmtlci1tb2RlbDogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICB3
b3JrZXJfbW9kZWwpCisKKyAgICBicm9rZXIgPSBtZXNzYWdlX2Jyb2tlci5Ccm9rZXIob3B0aW9u
cywgcXVldWVfY2xhc3MpCisgICAgcmV0dXJuIG1hbmFnZXJfY2xhc3MoYnJva2VyLCBwb3J0LCBv
cHRpb25zLCBjbGllbnQsIHdvcmtlcl9jbGFzcykKKworCitjbGFzcyBBYnN0cmFjdFdvcmtlciht
ZXNzYWdlX2Jyb2tlci5Ccm9rZXJDbGllbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9r
ZXJfY29ubmVjdGlvbiwgd29ya2VyX251bWJlciwgb3B0aW9ucyk6CisgICAgICAgICIiIlRoZSBj
b25zdHJ1Y3RvciBzaG91bGQgYmUgdXNlZCB0byBkbyBhbnkgc2ltcGxlIGluaXRpYWxpemF0aW9u
CisgICAgICAgIG5lY2Vzc2FyeSwgYnV0IHNob3VsZCBub3QgZG8gYW55dGhpbmcgdGhhdCBjcmVh
dGVzIGRhdGEgc3RydWN0dXJlcworICAgICAgICB0aGF0IGNhbm5vdCBiZSBQaWNrbGVkIG9yIHNl
bnQgYWNyb3NzIHByb2Nlc3NlcyAobGlrZSBvcGVuaW5nCisgICAgICAgIGZpbGVzIG9yIHNvY2tl
dHMpLiBDb21wbGV4IGluaXRpYWxpemF0aW9uIHNob3VsZCBiZSBkb25lIGF0IHRoZQorICAgICAg
ICBzdGFydCBvZiB0aGUgcnVuKCkgY2FsbC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAg
YnJva2VyX2Nvbm5lY3Rpb24gLSBoYW5kbGUgdG8gdGhlIEJyb2tlckNvbm5lY3Rpb24gb2JqZWN0
IGNyZWF0aW5nCisgICAgICAgICAgICAgICAgdGhlIHdvcmtlciBhbmQgdGhhdCBjYW4gYmUgdXNl
ZCBmb3IgbWVzc2FnaW5nLgorICAgICAgICAgICAgd29ya2VyX251bWJlciAtIGlkZW50aWZpZXIg
Zm9yIHRoaXMgcGFydGljdWxhciB3b3JrZXIKKyAgICAgICAgICAgIG9wdGlvbnMgLSBjb21tYW5k
LWxpbmUgYXJndW1lbnQgb2JqZWN0IGZyb20gb3B0cGFyc2UiIiIKKworICAgICAgICByYWlzZSBO
b3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcnVuKHNlbGYsIHBvcnQpOgorICAgICAgICAi
IiJDYWxsYmFjayBmb3IgdGhlIHdvcmtlciB0byBzdGFydCBleGVjdXRpbmcuIFR5cGljYWxseSBk
b2VzIGFueQorICAgICAgICByZW1haW5pbmcgaW5pdGlhbGl6YXRpb24gYW5kIHRoZW4gY2FsbHMg
YnJva2VyX2Nvbm5lY3Rpb24ucnVuX21lc3NhZ2VfbG9vcCgpLiIiIgorICAgICAgICByYWlzZSBO
b3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICAiIiJD
YWxsZWQgd2hlbiBwb3NzaWJsZSB0byBpbmRpY2F0ZSB0byB0aGUgd29ya2VyIHRvIHN0b3AgcHJv
Y2Vzc2luZworICAgICAgICBtZXNzYWdlcyBhbmQgc2h1dCBkb3duLiBOb3RlIHRoYXQgd29ya2Vy
cyBtYXkgYmUgc3RvcHBlZCB3aXRob3V0IHRoaXMKKyAgICAgICAgbWV0aG9kIGJlaW5nIGNhbGxl
ZCwgc28gY2xpZW50cyBzaG91bGQgbm90IHJlbHkgc29sZWx5IG9uIHRoaXMuIiIiCisgICAgICAg
IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBfTWFuYWdlckNvbm5lY3Rpb24o
bWVzc2FnZV9icm9rZXIuQnJva2VyQ29ubmVjdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGJyb2tlciwgb3B0aW9ucywgY2xpZW50LCB3b3JrZXJfY2xhc3MpOgorICAgICAgICAiIiJCYXNl
IGluaXRpYWxpemF0aW9uIGZvciBhbGwgTWFuYWdlciBvYmplY3RzLgorCisgICAgICAgIEFyZ3M6
CisgICAgICAgICAgICBicm9rZXI6IGhhbmRsZSB0byB0aGUgbWVzc2FnZV9icm9rZXIgb2JqZWN0
CisgICAgICAgICAgICBvcHRpb25zOiBjb21tYW5kIGxpbmUgb3B0aW9ucyBvYmplY3QKKyAgICAg
ICAgICAgIGNsaWVudDogY2FsbGJhY2sgb2JqZWN0ICh0aGUgY2FsbGVyKQorICAgICAgICAgICAg
d29ya2VyX2NsYXNzOiBjbGFzcyBvYmplY3QgdG8gdXNlIHRvIGNyZWF0ZSB3b3JrZXJzLgorICAg
ICAgICAiIiIKKyAgICAgICAgbWVzc2FnZV9icm9rZXIuQnJva2VyQ29ubmVjdGlvbi5fX2luaXRf
XyhzZWxmLCBicm9rZXIsIGNsaWVudCwKKyAgICAgICAgICAgIE1BTkFHRVJfVE9QSUMsIEFOWV9X
T1JLRVJfVE9QSUMpCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNl
bGYuX3dvcmtlcl9jbGFzcyA9IHdvcmtlcl9jbGFzcworCisgICAgZGVmIHN0YXJ0X3dvcmtlcihz
ZWxmLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgor
CisKK2NsYXNzIF9JbmxpbmVNYW5hZ2VyKF9NYW5hZ2VyQ29ubmVjdGlvbik6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGJyb2tlciwgcG9ydCwgb3B0aW9ucywgY2xpZW50LCB3b3JrZXJfY2xhc3Mp
OgorICAgICAgICBfTWFuYWdlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyLCBvcHRp
b25zLCBjbGllbnQsIHdvcmtlcl9jbGFzcykKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAg
ICAgICAgc2VsZi5faW5saW5lX3dvcmtlciA9IE5vbmUKKworICAgIGRlZiBzdGFydF93b3JrZXIo
c2VsZiwgd29ya2VyX251bWJlcik6CisgICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIgPSBfSW5s
aW5lV29ya2VyQ29ubmVjdGlvbihzZWxmLl9icm9rZXIsIHNlbGYuX3BvcnQsCisgICAgICAgICAg
ICBzZWxmLl9jbGllbnQsIHNlbGYuX3dvcmtlcl9jbGFzcywgd29ya2VyX251bWJlcikKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2lubGluZV93b3JrZXIKKworICAgIGRlZiBydW5fbWVzc2FnZV9sb29w
KHNlbGYsIGRlbGF5X3NlY3M9Tm9uZSk6CisgICAgICAgICMgTm90ZSB0aGF0IGRlbGF5X3NlY3Mg
aXMgaWdub3JlZCBpbiB0aGlzIGNhc2Ugc2luY2Ugd2UgY2FuJ3QgZWFzaWx5CisgICAgICAgICMg
aW1wbGVtZW50IGl0LgorICAgICAgICBzZWxmLl9pbmxpbmVfd29ya2VyLnJ1bigpCisgICAgICAg
IHNlbGYuX2Jyb2tlci5ydW5fYWxsX3BlbmRpbmcoTUFOQUdFUl9UT1BJQywgc2VsZi5fY2xpZW50
KQorCisKK2NsYXNzIF9NdWx0aVByb2Nlc3NNYW5hZ2VyKF9NYW5hZ2VyQ29ubmVjdGlvbik6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgcG9ydCwgb3B0aW9ucywgY2xpZW50LCB3b3Jr
ZXJfY2xhc3MpOgorICAgICAgICAjIE5vdGUgdGhhdCB0aGlzIGNsYXNzIGRvZXMgbm90IGtlZXAg
YSBoYW5kbGUgdG8gdGhlIGFjdHVhbCBwb3J0CisgICAgICAgICMgb2JqZWN0LCBiZWNhdXNlIGl0
IGlzbid0IFBpY2tsYWJsZS4gSW5zdGVhZCBpdCBrZWVwcyB0aGUgcG9ydAorICAgICAgICAjIG5h
bWUgYW5kIHJlY3JlYXRlcyB0aGUgcG9ydCBpbiB0aGUgY2hpbGQgcHJvY2VzcyBmcm9tIHRoZSBu
YW1lCisgICAgICAgICMgYW5kIG9wdGlvbnMuCisgICAgICAgIF9NYW5hZ2VyQ29ubmVjdGlvbi5f
X2luaXRfXyhzZWxmLCBicm9rZXIsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKQorICAg
ICAgICBzZWxmLl9wbGF0Zm9ybV9uYW1lID0gcG9ydC5yZWFsX25hbWUoKQorCisgICAgZGVmIHN0
YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgd29ya2VyX2Nvbm5lY3Rp
b24gPSBfTXVsdGlQcm9jZXNzV29ya2VyQ29ubmVjdGlvbihzZWxmLl9icm9rZXIsIHNlbGYuX3Bs
YXRmb3JtX25hbWUsCisgICAgICAgICAgICBzZWxmLl93b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1i
ZXIsIHNlbGYuX29wdGlvbnMpCisgICAgICAgIHdvcmtlcl9jb25uZWN0aW9uLnN0YXJ0KCkKKyAg
ICAgICAgcmV0dXJuIHdvcmtlcl9jb25uZWN0aW9uCisKKworY2xhc3MgX1dvcmtlckNvbm5lY3Rp
b24obWVzc2FnZV9icm9rZXIuQnJva2VyQ29ubmVjdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGJyb2tlciwgd29ya2VyX2NsYXNzLCB3b3JrZXJfbnVtYmVyLCBvcHRpb25zKToKKyAgICAg
ICAgc2VsZi5fY2xpZW50ID0gd29ya2VyX2NsYXNzKHNlbGYsIHdvcmtlcl9udW1iZXIsIG9wdGlv
bnMpCisgICAgICAgIHNlbGYubmFtZSA9IHNlbGYuX2NsaWVudC5uYW1lKCkKKyAgICAgICAgbWVz
c2FnZV9icm9rZXIuQnJva2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIHNlbGYu
X2NsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBTllfV09SS0VSX1RPUElDLCBNQU5BR0VSX1RPUElDKQorCisgICAgZGVmIGNhbmNlbChzZWxm
KToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGlzX2FsaXZl
KHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgam9p
bihzZWxmLCB0aW1lb3V0KToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisg
ICAgZGVmIHlpZWxkX3RvX2Jyb2tlcihzZWxmKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIF9J
bmxpbmVXb3JrZXJDb25uZWN0aW9uKF9Xb3JrZXJDb25uZWN0aW9uKToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgYnJva2VyLCBwb3J0LCBtYW5hZ2VyX2NsaWVudCwgd29ya2VyX2NsYXNzLCB3b3Jr
ZXJfbnVtYmVyKToKKyAgICAgICAgX1dvcmtlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJv
a2VyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIsIHBvcnQuX29wdGlvbnMpCisgICAgICAg
IHNlbGYuX2FsaXZlID0gRmFsc2UKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAg
c2VsZi5fbWFuYWdlcl9jbGllbnQgPSBtYW5hZ2VyX2NsaWVudAorCisgICAgZGVmIGNhbmNlbChz
ZWxmKToKKyAgICAgICAgc2VsZi5fY2xpZW50LmNhbmNlbCgpCisKKyAgICBkZWYgaXNfYWxpdmUo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9hbGl2ZQorCisgICAgZGVmIGpvaW4oc2VsZiwg
dGltZW91dCk6CisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fYWxpdmUKKworICAgIGRlZiBydW4o
c2VsZik6CisgICAgICAgIHNlbGYuX2FsaXZlID0gVHJ1ZQorICAgICAgICBzZWxmLl9jbGllbnQu
cnVuKHNlbGYuX3BvcnQpCisgICAgICAgIHNlbGYuX2FsaXZlID0gRmFsc2UKKworICAgIGRlZiB5
aWVsZF90b19icm9rZXIoc2VsZik6CisgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fYWxsX3BlbmRp
bmcoTUFOQUdFUl9UT1BJQywgc2VsZi5fbWFuYWdlcl9jbGllbnQpCisKKworaWYgbXVsdGlwcm9j
ZXNzaW5nOgorCisgICAgY2xhc3MgX1Byb2Nlc3MobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MpOgor
ICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgd29ya2VyX2Nvbm5lY3Rpb24sIHBsYXRmb3JtX25h
bWUsIG9wdGlvbnMsIGNsaWVudCk6CisgICAgICAgICAgICBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vz
cy5fX2luaXRfXyhzZWxmKQorICAgICAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24gPSB3
b3JrZXJfY29ubmVjdGlvbgorICAgICAgICAgICAgc2VsZi5fcGxhdGZvcm1fbmFtZSA9IHBsYXRm
b3JtX25hbWUKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgICAg
ICBzZWxmLl9jbGllbnQgPSBjbGllbnQKKworICAgICAgICBkZWYgcnVuKHNlbGYpOgorICAgICAg
ICAgICAgb3B0aW9ucyA9IHNlbGYuX29wdGlvbnMKKyAgICAgICAgICAgIHBvcnRfb2JqID0gcG9y
dC5nZXQoc2VsZi5fcGxhdGZvcm1fbmFtZSwgb3B0aW9ucykKKworICAgICAgICAgICAgIyBUaGUg
dW5peCBtdWx0aXByb2Nlc3NpbmcgaW1wbGVtZW50YXRpb24gY2xvbmVzIHRoZQorICAgICAgICAg
ICAgIyBsb2cgaGFuZGxlciBjb25maWd1cmF0aW9uIGludG8gdGhlIGNoaWxkIHByb2Nlc3NlcywK
KyAgICAgICAgICAgICMgYnV0IHRoZSB3aW4gaW1wbGVtZW50YXRpb24gZG9lc24ndC4KKyAgICAg
ICAgICAgIGNvbmZpZ3VyZV9sb2dnaW5nID0gKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInKQorCisg
ICAgICAgICAgICAjIEZJWE1FOiB0aGlzIHdvbid0IHdvcmsgaWYgdGhlIGNhbGxpbmcgcHJvY2Vz
cyBpcyBsb2dnaW5nCisgICAgICAgICAgICAjIHNvbWV3aGVyZSBvdGhlciB0aGFuIHN5cy5zdGRl
cnIgYW5kIHN5cy5zdGRvdXQsIGJ1dCBJJ20gbm90IHN1cmUKKyAgICAgICAgICAgICMgaWYgdGhp
cyB3aWxsIGJlIGFuIGlzc3VlIGluIHByYWN0aWNlLgorICAgICAgICAgICAgcHJpbnRlciA9IHBy
aW50aW5nLlByaW50ZXIocG9ydF9vYmosIG9wdGlvbnMsIHN5cy5zdGRlcnIsIHN5cy5zdGRvdXQs
CisgICAgICAgICAgICAgICAgY29uZmlndXJlX2xvZ2dpbmcpCisgICAgICAgICAgICBzZWxmLl9j
bGllbnQucnVuKHBvcnRfb2JqKQorICAgICAgICAgICAgcHJpbnRlci5jbGVhbnVwKCkKKworCitj
bGFzcyBfTXVsdGlQcm9jZXNzV29ya2VyQ29ubmVjdGlvbihfV29ya2VyQ29ubmVjdGlvbik6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgcGxhdGZvcm1fbmFtZSwgd29ya2VyX2NsYXNz
LCB3b3JrZXJfbnVtYmVyLCBvcHRpb25zKToKKyAgICAgICAgX1dvcmtlckNvbm5lY3Rpb24uX19p
bml0X18oc2VsZiwgYnJva2VyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIsIG9wdGlvbnMp
CisgICAgICAgIHNlbGYuX3Byb2MgPSBfUHJvY2VzcyhzZWxmLCBwbGF0Zm9ybV9uYW1lLCBvcHRp
b25zLCBzZWxmLl9jbGllbnQpCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi5fcHJvYy50ZXJtaW5hdGUoKQorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fcHJvYy5pc19hbGl2ZSgpCisKKyAgICBkZWYgam9pbihzZWxmLCB0
aW1lb3V0KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2Muam9pbih0aW1lb3V0KQorCisgICAg
ZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLl9wcm9jLnN0YXJ0KCkKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfd29ya2Vy
X2Jyb2tlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkJKHJldmlzaW9uIDApCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2Vy
X3dvcmtlcl9icm9rZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTQzLDI0ICs0MywyMiBAQCBUaGV5
IGludGVyYWN0IG1vcmUgb3IgbGVzcyBsaWtlOgogCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9w
dHBhcnNlCi1pbXBvcnQgcHJpbnRpbmcKIGltcG9ydCBRdWV1ZQogaW1wb3J0IHN5cwogaW1wb3J0
IHRocmVhZAogaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHRpbWUKIAotCiAjIEhhbmRsZSBQeXRo
b24gPCAyLjYgd2hlcmUgbXVsdGlwcm9jZXNzaW5nIGlzbid0IGF2YWlsYWJsZS4KIHRyeToKICAg
ICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgbXVsdGlw
cm9jZXNzaW5nID0gTm9uZQogCi0KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQg
c3RhY2tfdXRpbHMKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBwb3J0Ci1mcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgbWVzc2FnZV9icm9r
ZXIKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmNvbnRyb2xsZXJzIGltcG9ydCBtZXNzYWdl
X2Jyb2tlcgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0
IHByaW50aW5nCiAKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl93
b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0
dGVzdC5weQkocmV2aXNpb24gOTA1MjApCShmcm9tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5w
eTo5MDUyMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xs
ZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDI0NiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIwor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisj
IGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisj
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0
IFF1ZXVlCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKKwordHJ5OgorICAgIGltcG9ydCBt
dWx0aXByb2Nlc3NpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBtdWx0aXByb2Nlc3Npbmcg
PSBOb25lCisKKworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBvdXRwdXRjYXB0
dXJlCisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBwb3J0Citmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgbWFuYWdlcl93b3JrZXJfYnJv
a2VyCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgbWVz
c2FnZV9icm9rZXIKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGlt
cG9ydCBwcmludGluZworCisjIEluIG9yZGVyIHRvIHJlbGlhYmx5IGNvbnRyb2wgd2hlbiBjaGls
ZCB3b3JrZXJzIGFyZSBzdGFydGluZyBhbmQgc3RvcHBpbmcsCisjIHdlIHVzZSBhIHBhaXIgb2Yg
Z2xvYmFsIHZhcmlhYmxlcyB0byBob2xkIHF1ZXVlcyB1c2VkIGZvciBtZXNzYWdpbmcuIElkZWFs
bHkKKyMgd2Ugd291bGRuJ3QgbmVlZCBnbG9iYWxzLCBidXQgd2UgY2FuJ3QgcGFzcyB0aGVzZSB0
aHJvdWdoIGEgbGV4aWNhbCBjbG9zdXJlCisjIGJlY2F1c2UgdGhvc2UgY2FuJ3QgYmUgUGlja2xl
ZCBhbmQgc2VudCB0byBhIHN1YnByb2Nlc3MsIGFuZCB3ZSdkIHByZWZlciBub3QKKyMgdG8gaGF2
ZSB0byBwYXNzIGV4dHJhIGFyZ3VtZW50cyB0byB0aGUgd29ya2VyIGluIHRoZSBzdGFydF93b3Jr
ZXIoKSBjYWxsLgorc3RhcnRpbmdfcXVldWUgPSBOb25lCitzdG9wcGluZ19xdWV1ZSA9IE5vbmUK
KworCitkZWYgbWFrZV9icm9rZXIobWFuYWdlciwgd29ya2VyX21vZGVsLCBzdGFydF9xdWV1ZT1O
b25lLCBzdG9wX3F1ZXVlPU5vbmUpOgorICAgIGdsb2JhbCBzdGFydGluZ19xdWV1ZQorICAgIGds
b2JhbCBzdG9wcGluZ19xdWV1ZQorICAgIHN0YXJ0aW5nX3F1ZXVlID0gc3RhcnRfcXVldWUKKyAg
ICBzdG9wcGluZ19xdWV1ZSA9IHN0b3BfcXVldWUKKyAgICBvcHRpb25zID0gZ2V0X29wdGlvbnMo
d29ya2VyX21vZGVsKQorICAgIHJldHVybiBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuZ2V0KHBvcnQu
Z2V0KCJ0ZXN0IiksIG9wdGlvbnMsIG1hbmFnZXIsIF9UZXN0V29ya2VyKQorCisKK2NsYXNzIF9U
ZXN0V29ya2VyKG1hbmFnZXJfd29ya2VyX2Jyb2tlci5BYnN0cmFjdFdvcmtlcik6CisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIGJyb2tlcl9jb25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyLCBvcHRpb25z
KToKKyAgICAgICAgc2VsZi5fYnJva2VyX2Nvbm5lY3Rpb24gPSBicm9rZXJfY29ubmVjdGlvbgor
ICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl93b3JrZXJfbnVt
YmVyID0gd29ya2VyX251bWJlcgorICAgICAgICBzZWxmLl9uYW1lID0gJ1Rlc3RXb3JrZXIvJWQn
ICUgd29ya2VyX251bWJlcgorICAgICAgICBzZWxmLl9zdG9wcGVkID0gRmFsc2UKKyAgICAgICAg
c2VsZi5fY2FuY2VsZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9zdGFydGluZ19xdWV1ZSA9IHN0
YXJ0aW5nX3F1ZXVlCisgICAgICAgIHNlbGYuX3N0b3BwaW5nX3F1ZXVlID0gc3RvcHBpbmdfcXVl
dWUKKworICAgIGRlZiBoYW5kbGVfc3RvcChzZWxmLCBzcmMpOgorICAgICAgICBzZWxmLl9zdG9w
cGVkID0gVHJ1ZQorCisgICAgZGVmIGhhbmRsZV90ZXN0KHNlbGYsIHNyYywgYW5faW50LCBhX3N0
cik6CisgICAgICAgIGFzc2VydCBhbl9pbnQgPT0gMQorICAgICAgICBhc3NlcnQgYV9zdHIgPT0g
ImhlbGxvLCB3b3JsZCIKKyAgICAgICAgc2VsZi5fYnJva2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNz
YWdlKCd0ZXN0JywgMiwgJ2hpLCBldmVyeWJvZHknKQorCisgICAgZGVmIGlzX2RvbmUoc2VsZik6
CisgICAgICAgIHJldHVybiBzZWxmLl9zdG9wcGVkIG9yIHNlbGYuX2NhbmNlbGVkCisKKyAgICBk
ZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKKworICAgIGRlZiBjYW5j
ZWwoc2VsZik6CisgICAgICAgIHNlbGYuX2NhbmNlbGVkID0gVHJ1ZQorCisgICAgZGVmIHJ1bihz
ZWxmLCBwb3J0KToKKyAgICAgICAgaWYgc2VsZi5fc3RhcnRpbmdfcXVldWU6CisgICAgICAgICAg
ICBzZWxmLl9zdGFydGluZ19xdWV1ZS5wdXQoJycpCisKKyAgICAgICAgaWYgc2VsZi5fc3RvcHBp
bmdfcXVldWU6CisgICAgICAgICAgICBzZWxmLl9zdG9wcGluZ19xdWV1ZS5nZXQoKQorICAgICAg
ICB0cnk6CisgICAgICAgICAgICBzZWxmLl9icm9rZXJfY29ubmVjdGlvbi5ydW5fbWVzc2FnZV9s
b29wKCkKKyAgICAgICAgICAgIHNlbGYuX2Jyb2tlcl9jb25uZWN0aW9uLnlpZWxkX3RvX2Jyb2tl
cigpCisgICAgICAgICAgICBzZWxmLl9icm9rZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ2Rv
bmUnKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgc2VsZi5fYnJv
a2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdleGNlcHRpb24nLCAodHlwZShlKSwgc3RyKGUp
LCBOb25lKSkKKworCitkZWYgZ2V0X29wdGlvbnMod29ya2VyX21vZGVsKToKKyAgICBvcHRpb25f
bGlzdCA9IChtYW5hZ2VyX3dvcmtlcl9icm9rZXIucnVudGltZV9vcHRpb25zKCkgKworICAgICAg
ICAgICAgICAgICAgIHByaW50aW5nLnByaW50X29wdGlvbnMoKSArCisgICAgICAgICAgICAgICAg
ICAgW29wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWV4cGVyaW1lbnRhbC1mdWxseS1wYXJhbGxlbCIs
IGRlZmF1bHQ9RmFsc2UpLAorICAgICAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlv
bigiLS1jaGlsZC1wcm9jZXNzZXMiLCBkZWZhdWx0PScyJyldKQorICAgIHBhcnNlciA9IG9wdHBh
cnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlzdD1vcHRpb25fbGlzdCkKKyAgICBvcHRpb25zLCBh
cmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncz1bJy0td29ya2VyLW1vZGVsJywgd29ya2VyX21v
ZGVsXSkKKyAgICByZXR1cm4gb3B0aW9ucworCisKKworY2xhc3MgRnVuY3Rpb25UZXN0cyh1bml0
dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZ2V0X19pbmxpbmUoc2VsZik6CisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShtYWtlX2Jyb2tlcihzZWxmLCAnaW5saW5lJykgaXMgbm90IE5vbmUp
CisKKyAgICBkZWYgdGVzdF9nZXRfX3Byb2Nlc3NlcyhzZWxmKToKKyAgICAgICAgIyBUaGlzIHRl
c3Qgc29tZXRpbWVzIGZhaWxzIG9uIFdpbmRvd3MuIFNlZSA8aHR0cDovL3dlYmtpdC5vcmcvYi81
NTA4Nz4uCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2N5Z3dpbicsICd3aW4zMicpOgor
ICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbXVsdGlwcm9jZXNzaW5nOgorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKG1ha2VfYnJva2VyKHNlbGYsICdwcm9jZXNzZXMnKSBpcyBu
b3QgTm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZh
bHVlRXJyb3IsIG1ha2VfYnJva2VyLCBzZWxmLCAncHJvY2Vzc2VzJykKKworICAgIGRlZiB0ZXN0
X2dldF9fdW5rbm93bihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJv
ciwgbWFrZV9icm9rZXIsIHNlbGYsICd1bmtub3duJykKKworCitjbGFzcyBfVGVzdHNNaXhpbihv
YmplY3QpOgorICAgICIiIk1peGluIGNsYXNzIHRoYXQgaW1wbGVtZW50cyBhIHNlcmllcyBvZiB0
ZXN0cyB0byBlbmZvcmNlIHRoZQorICAgIGNvbnRyYWN0IGFsbCBpbXBsZW1lbnRhdGlvbnMgbXVz
dCBmb2xsb3cuIiIiCisKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICdUZXN0
ZXInCisKKyAgICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbmUK
KworICAgIGRlZiBoYW5kbGVfZG9uZShzZWxmLCBzcmMpOgorICAgICAgICBzZWxmLl9kb25lID0g
VHJ1ZQorCisgICAgZGVmIGhhbmRsZV90ZXN0KHNlbGYsIHNyYywgYW5faW50LCBhX3N0cik6Cisg
ICAgICAgIHNlbGYuX2FuX2ludCA9IGFuX2ludAorICAgICAgICBzZWxmLl9hX3N0ciA9IGFfc3Ry
CisKKyAgICBkZWYgaGFuZGxlX2V4Y2VwdGlvbihzZWxmLCBzcmMsIGV4Y19pbmZvKToKKyAgICAg
ICAgc2VsZi5fZXhjZXB0aW9uID0gZXhjX2luZm8KKyAgICAgICAgc2VsZi5fZG9uZSA9IFRydWUK
KworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fYW5faW50ID0gTm9uZQorICAg
ICAgICBzZWxmLl9hX3N0ciA9IE5vbmUKKyAgICAgICAgc2VsZi5fYnJva2VyID0gTm9uZQorICAg
ICAgICBzZWxmLl9kb25lID0gRmFsc2UKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gTm9uZQor
ICAgICAgICBzZWxmLl93b3JrZXJfbW9kZWwgPSBOb25lCisKKyAgICBkZWYgbWFrZV9icm9rZXIo
c2VsZiwgc3RhcnRpbmdfcXVldWU9Tm9uZSwgc3RvcHBpbmdfcXVldWU9Tm9uZSk6CisgICAgICAg
IHNlbGYuX2Jyb2tlciA9IG1ha2VfYnJva2VyKHNlbGYsIHNlbGYuX3dvcmtlcl9tb2RlbCwgc3Rh
cnRpbmdfcXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BwaW5n
X3F1ZXVlKQorCisgICAgZGVmIHRlc3RfY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxmLm1ha2Vf
YnJva2VyKCkKKyAgICAgICAgd29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigwKQor
ICAgICAgICB3b3JrZXIuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2Fn
ZSgndGVzdCcsIDEsICdoZWxsbywgd29ybGQnKQorICAgICAgICB3b3JrZXIuam9pbigwLjUpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod29ya2VyLmlzX2FsaXZlKCkpCisKKyAgICBkZWYgdGVz
dF9kb25lKHNlbGYpOgorICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkKKyAgICAgICAgd29ya2Vy
ID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigwKQorICAgICAgICBzZWxmLl9icm9rZXIucG9z
dF9tZXNzYWdlKCd0ZXN0JywgMSwgJ2hlbGxvLCB3b3JsZCcpCisgICAgICAgIHNlbGYuX2Jyb2tl
ci5wb3N0X21lc3NhZ2UoJ3N0b3AnKQorICAgICAgICBzZWxmLl9icm9rZXIucnVuX21lc3NhZ2Vf
bG9vcCgpCisgICAgICAgIHdvcmtlci5qb2luKDAuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZSh3b3JrZXIuaXNfYWxpdmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaXNfZG9u
ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2FuX2ludCwgMikKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzZWxmLl9hX3N0ciwgJ2hpLCBldmVyeWJvZHknKQorCisgICAgZGVm
IHRlc3RfdW5rbm93bl9tZXNzYWdlKHNlbGYpOgorICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkK
KyAgICAgICAgd29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigwKQorICAgICAgICBz
ZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCd1bmtub3duJykKKyAgICAgICAgc2VsZi5fYnJva2Vy
LnJ1bl9tZXNzYWdlX2xvb3AoKQorICAgICAgICB3b3JrZXIuam9pbigwLjUpCisKKyAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKHNlbGYuaXNfZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNl
KHdvcmtlci5pc19hbGl2ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLl9leGNl
cHRpb25bMF0sIFZhbHVlRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuX2V4
Y2VwdGlvblsxXSwKKyAgICAgICAgICAgICJUZXN0V29ya2VyLzA6IHJlY2VpdmVkIG1lc3NhZ2Ug
J3Vua25vd24nIGl0IGNvdWxkbid0IGhhbmRsZSIpCisKKworIyBGSVhNRTogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NTIwLgoraWYgbXVsdGlwcm9jZXNzaW5nIGFu
ZCBzeXMucGxhdGZvcm0gbm90IGluICgnY3lnd2luJywgJ3dpbjMyJyk6CisKKyAgICBjbGFzcyBN
dWx0aVByb2Nlc3NCcm9rZXJUZXN0cyhfVGVzdHNNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgor
ICAgICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICAgICBfVGVzdHNNaXhpbi5zZXRVcChz
ZWxmKQorICAgICAgICAgICAgc2VsZi5fd29ya2VyX21vZGVsID0gJ3Byb2Nlc3NlcycKKworICAg
ICAgICBkZWYgcXVldWUoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gbXVsdGlwcm9jZXNzaW5n
LlF1ZXVlKCkKKworCitjbGFzcyBGdW5jdGlvbnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAg
ICBkZWYgdGVzdF9ydW50aW1lX29wdGlvbnMoc2VsZik6CisgICAgICAgIG9wdGlvbl9saXN0ID0g
bWFuYWdlcl93b3JrZXJfYnJva2VyLnJ1bnRpbWVfb3B0aW9ucygpCisgICAgICAgIHBhcnNlciA9
IG9wdHBhcnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlzdD1vcHRpb25fbGlzdCkKKyAgICAgICAg
b3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKFtdKQorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUob3B0aW9ucykKKworCitjbGFzcyBJbnRlcmZhY2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKKyAgICAjIFRoZXNlIHRlc3RzIG1vc3RseSBleGlzdCB0byBwYWNpZnkgY292ZXJhZ2UuCisK
KyAgICAjIEZJWE1FOiBUaGVyZSBtdXN0IGJlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIGFuZCBh
bHNvIHZlcmlmeQorICAgICMgdGhhdCBjbGFzc2VzIGRvIGltcGxlbWVudCBldmVyeSBhYnN0cmFj
dCBtZXRob2QgaW4gYW4gaW50ZXJmYWNlLgorICAgIGRlZiB0ZXN0X21hbmFnZXJjb25uZWN0aW9u
X2lzX2Fic3RyYWN0KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBhbGwgdGhlIGJhc2UgY2xh
c3MgbWV0aG9kcyBhcmUgYWJzdHJhY3QgYW5kIGhhdmUgdGhlCisgICAgICAgICMgc2lnbmF0dXJl
IHdlIGV4cGVjdC4KKyAgICAgICAgYnJva2VyID0gbWFrZV9icm9rZXIoc2VsZiwgJ2lubGluZScp
CisgICAgICAgIG9iaiA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fTWFuYWdlckNvbm5lY3Rpb24o
YnJva2VyLl9icm9rZXIsIE5vbmUsIHNlbGYsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFp
c2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5zdGFydF93b3JrZXIsIDApCisKKyAgICBkZWYg
dGVzdF93b3JrZXJjb25uZWN0aW9uX2lzX2Fic3RyYWN0KHNlbGYpOgorICAgICAgICAjIFRlc3Qg
dGhhdCBhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kcyBhcmUgYWJzdHJhY3QgYW5kIGhhdmUgdGhl
CisgICAgICAgICMgc2lnbmF0dXJlIHdlIGV4cGVjdC4KKyAgICAgICAgYnJva2VyID0gbWFrZV9i
cm9rZXIoc2VsZiwgJ2lubGluZScpCisgICAgICAgIG9iaiA9IG1hbmFnZXJfd29ya2VyX2Jyb2tl
ci5fV29ya2VyQ29ubmVjdGlvbihicm9rZXIuX2Jyb2tlciwgX1Rlc3RXb3JrZXIsIDAsIE5vbmUp
CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5jYW5j
ZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5p
c19hbGl2ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwg
b2JqLmpvaW4sIE5vbmUpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0
dGVzdC5tYWluKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2Nv
bnRyb2xsZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2Vy
X3dvcmtlcl9icm9rZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDApCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXJf
dW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDggQEAgZXhjZXB0IEltcG9y
dEVycm9yOgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBvdXRwdXRjYXB0dXJl
CiAKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBwb3J0Ci1mcm9tIHdlYmtpdHB5
LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgbWFuYWdlcl93b3JrZXJfYnJva2Vy
Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgbWVzc2Fn
ZV9icm9rZXIKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmNvbnRyb2xsZXJzIGltcG9ydCBt
YW5hZ2VyX3dvcmtlcl9icm9rZXIKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmNvbnRyb2xs
ZXJzIGltcG9ydCBtZXNzYWdlX2Jyb2tlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5
b3V0X3BhY2thZ2UgaW1wb3J0IHByaW50aW5nCiAKICMgSW4gb3JkZXIgdG8gcmVsaWFibHkgY29u
dHJvbCB3aGVuIGNoaWxkIHdvcmtlcnMgYXJlIHN0YXJ0aW5nIGFuZCBzdG9wcGluZywKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21lc3NhZ2Vf
YnJva2VyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2NvbnRyb2xsZXJzL21lc3NhZ2VfYnJva2VyLnB5CShyZXZpc2lvbiA5MDUyMCkJKGZyb20g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2Fn
ZV9icm9rZXIucHk6OTA1MjApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9jb250cm9sbGVycy9tZXNzYWdlX2Jyb2tlci5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE5NiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3Ry
aWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIk1vZHVsZSBmb3IgaGFuZGxpbmcgbWVzc2Fn
aW5nIGZvciBydW4td2Via2l0LXRlc3RzLgorCitUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgc2lt
cGxlIG1lc3NhZ2UgYnJva2VyIGFic3RyYWN0aW9uIHRoYXQgd2lsbCBiZQordXNlZCB0byBjb29y
ZGluYXRlIG1lc3NhZ2VzIGJldHdlZW4gdGhlIG1haW4gcnVuLXdlYmtpdC10ZXN0cyB0aHJlYWQK
Kyhha2EgVGVzdFJ1bm5lcikgYW5kIHRoZSBpbmRpdmlkdWFsIHdvcmtlciB0aHJlYWRzIChwcmV2
aW91c2x5IGtub3duIGFzCitkdW1wX3JlbmRlcl90cmVlX3RocmVhZHMpLgorCitUaGUgYnJva2Vy
IHNpbXBseSBkaXN0cmlidXRlcyBtZXNzYWdlcyBvbnRvIHRvcGljcyAobmFtZWQgcXVldWVzKTsg
dGhlIGFjdHVhbAorcXVldWVzIHRoZW1zZWx2ZXMgYXJlIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIs
IGFzIHRoZSBxdWV1ZSdzIGltcGxlbWVudGF0aW9uCityZXF1aXJlbWVudHMgdmFyaWVzIHZhcnkg
ZGVwZW5kaW5nIG9uIHRoZSBkZXNpcmVkIGNvbmN1cnJlbmN5IG1vZGVsCisobm9uZS90aHJlYWRz
L3Byb2Nlc3NlcykuCisKK0luIG9yZGVyIGZvciBzaGFyZWQtbm90aGluZyBtZXNzYWdpbmcgYmV0
d2VlbiBwcm9jZXNzaW5nIHRvIGJlIHBvc3NpYmxlLAorTWVzc2FnZXMgbXVzdCBiZSBwaWNrbGFi
bGUuCisKK1RoZSBtb2R1bGUgZGVmaW5lcyBvbmUgaW50ZXJmYWNlIGFuZCB0d28gY2xhc3Nlcy4g
Q2FsbGVycyBvZiB0aGlzIHBhY2thZ2UKK211c3QgaW1wbGVtZW50IHRoZSBCcm9rZXJDbGllbnQg
aW50ZXJmYWNlLCBhbmQgbW9zdCBjYWxsZXJzIHdpbGwgY3JlYXRlCitCcm9rZXJDb25uZWN0aW9u
cyBhcyB3ZWxsIGFzIEJyb2tlcnMuCisKK1RoZSBjbGFzc2VzIHJlbGF0ZSB0byBlYWNoIG90aGVy
IGFzOgorCisgICAgQnJva2VyQ2xpZW50ICAgLS0tLS0tPiAgICBCcm9rZXJDb25uZWN0aW9uCisg
ICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgdgorICAgICAgICAgXC0tLS0tLS0tLS0tLS0tLS0gICAgICBCcm9rZXIK
KworKFRoZSBCcm9rZXJDbGllbnQgbmV2ZXIgY2FsbHMgYnJva2VyIGRpcmVjdGx5IGFmdGVyIGl0
IGlzIGNyZWF0ZWQsIG9ubHkKK0Jyb2tlckNvbm5lY3Rpb24uICBCcm9rZXJDb25uZWN0aW9uIHBh
c3NlcyBhIHJlZmVyZW5jZSB0byBCcm9rZXJDbGllbnQgdG8KK0Jyb2tlciwgYW5kIEJyb2tlciBv
bmx5IGludm9rZXMgdGhhdCByZWZlcmVuY2UsIG5ldmVyIHRhbGtpbmcgZGlyZWN0bHkgdG8KK0Jy
b2tlckNvbm5lY3Rpb24pLgorIiIiCisKK2ltcG9ydCBjUGlja2xlCitpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IFF1ZXVlCitpbXBvcnQgdGltZQorCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihf
X25hbWVfXykKKworCitjbGFzcyBCcm9rZXJDbGllbnQob2JqZWN0KToKKyAgICAiIiJBYnN0cmFj
dCBiYXNlIGNsYXNzIC8gaW50ZXJmYWNlIHRoYXQgYWxsIG1lc3NhZ2UgYnJva2VyIGNsaWVudHMg
bXVzdAorICAgIGltcGxlbWVudC4gSW4gYWRkaXRpb24gdG8gdGhlIG1ldGhvZHMgYmVsb3csIGJ5
IGNvbnZlbnRpb24gY2xpZW50cworICAgIGltcGxlbWVudCByb3V0aW5lcyBvZiB0aGUgc2lnbmF0
dXJlIHR5cGUKKworICAgICAgICBoYW5kbGVfTUVTU0FHRV9OQU1FKHNlbGYsIHNyYywgLi4uKToK
KworICAgIHdoZXJlIE1FU1NBR0VfTkFNRSBtYXRjaGVzIHRoZSBzdHJpbmcgcGFzc2VkIHRvIHBv
c3RfbWVzc2FnZSgpLCBhbmQKKyAgICBzcmMgaW5kaWNhdGVzIHRoZSBuYW1lIG9mIHRoZSBzZW5k
ZXIuIElmIHRoZSBtZXNzYWdlIGNvbnRhaW5zIHZhbHVlcyBpbgorICAgIHRoZSBtZXNzYWdlIGJv
ZHksIHRob3NlIHdpbGwgYmUgcHJvdmlkZWQgYXMgb3B0cGFyYW1zLiIiIgorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsICpvcHRhcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxl
bWVudGVkRXJyb3IKKworICAgIGRlZiBpc19kb25lKHNlbGYpOgorICAgICAgICAiIiJDYWxsZWQg
ZnJvbSBpbnNpZGUgcnVuX21lc3NhZ2VfbG9vcCgpIHRvIGluZGljYXRlIHdoZXRoZXIgdG8gZXhp
dC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIG5hbWUo
c2VsZik6CisgICAgICAgICIiIlJldHVybiBhIG5hbWUgdGhhdCBpZGVudGlmaWVzIHRoZSBjbGll
bnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBCcm9r
ZXIob2JqZWN0KToKKyAgICAiIiJCcm9rZXJzIHByb3ZpZGUgdGhlIGJhc2ljIG1vZGVsIG9mIGEg
c2V0IG9mIHRvcGljcy4gQ2xpZW50cyBjYW4gcG9zdCBhCisgICAgbWVzc2FnZSB0byBhbnkgdG9w
aWMgdXNpbmcgcG9zdF9tZXNzYWdlKCksIGFuZCBjYW4gcHJvY2VzcyBtZXNzYWdlcyBvbiBvbmUK
KyAgICB0b3BpYyBhdCBhIHRpbWUgdXNpbmcgcnVuX21lc3NhZ2VfbG9vcCgpLiIiIgorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMsIHF1ZXVlX21ha2VyKToKKyAgICAgICAgIiIiQXJn
czoKKyAgICAgICAgICAgIG9wdGlvbnM6IGEgcnVudGltZSBvcHRpb24gY2xhc3MgZnJvbSBvcHRw
YXJzZQorICAgICAgICAgICAgcXVldWVfbWFrZXI6IGEgZmFjdG9yeSBtZXRob2QgdGhhdCByZXR1
cm5zIG9iamVjdHMgaW1wbGVtZW50aW5nIGEKKyAgICAgICAgICAgICAgICBRdWV1ZSBpbnRlcmZh
Y2UgKHB1dCgpL2dldCgpKS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBv
cHRpb25zCisgICAgICAgIHNlbGYuX3F1ZXVlX21ha2VyID0gcXVldWVfbWFrZXIKKyAgICAgICAg
c2VsZi5fdG9waWNzID0ge30KKworICAgIGRlZiBhZGRfdG9waWMoc2VsZiwgdG9waWNfbmFtZSk6
CisgICAgICAgIGlmIHRvcGljX25hbWUgbm90IGluIHNlbGYuX3RvcGljczoKKyAgICAgICAgICAg
IHNlbGYuX3RvcGljc1t0b3BpY19uYW1lXSA9IHNlbGYuX3F1ZXVlX21ha2VyKCkKKworICAgIGRl
ZiBfZ2V0X3F1ZXVlX2Zvcl90b3BpYyhzZWxmLCB0b3BpY19uYW1lKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX3RvcGljc1t0b3BpY19uYW1lXQorCisgICAgZGVmIHBvc3RfbWVzc2FnZShzZWxmLCBj
bGllbnQsIHRvcGljX25hbWUsIG1lc3NhZ2VfbmFtZSwgKm1lc3NhZ2VfYXJncyk6CisgICAgICAg
ICIiIlBvc3QgYSBtZXNzYWdlIHRvIHRoZSBhcHByb3ByaWF0ZSB0b3BpYyBuYW1lLgorCisgICAg
ICAgIE1lc3NhZ2VzIGhhdmUgYSBuYW1lIGFuZCBhIHR1cGxlIG9mIG9wdGlvbmFsIGFyZ3VtZW50
cy4gQm90aCBtdXN0IGJlIHBpY2tsYWJsZS4iIiIKKyAgICAgICAgbWVzc2FnZSA9IF9NZXNzYWdl
KGNsaWVudC5uYW1lKCksIHRvcGljX25hbWUsIG1lc3NhZ2VfbmFtZSwgbWVzc2FnZV9hcmdzKQor
ICAgICAgICBxdWV1ZSA9IHNlbGYuX2dldF9xdWV1ZV9mb3JfdG9waWModG9waWNfbmFtZSkKKyAg
ICAgICAgcXVldWUucHV0KF9NZXNzYWdlLmR1bXBzKG1lc3NhZ2UpKQorCisgICAgZGVmIHJ1bl9t
ZXNzYWdlX2xvb3Aoc2VsZiwgdG9waWNfbmFtZSwgY2xpZW50LCBkZWxheV9zZWNzPU5vbmUpOgor
ICAgICAgICAiIiJMb29wIHByb2Nlc3NpbmcgbWVzc2FnZXMgdW50aWwgY2xpZW50LmlzX2RvbmUo
KSBvciBkZWxheSBwYXNzZXMuCisKKyAgICAgICAgVG8gcnVuIGluZGVmaW5pdGVseSwgc2V0IGRl
bGF5X3NlY3MgdG8gTm9uZS4iIiIKKyAgICAgICAgYXNzZXJ0IGRlbGF5X3NlY3MgaXMgTm9uZSBv
ciBkZWxheV9zZWNzID4gMAorICAgICAgICBzZWxmLl9ydW5fbG9vcCh0b3BpY19uYW1lLCBjbGll
bnQsIGJsb2NrPVRydWUsIGRlbGF5X3NlY3M9ZGVsYXlfc2VjcykKKworICAgIGRlZiBydW5fYWxs
X3BlbmRpbmcoc2VsZiwgdG9waWNfbmFtZSwgY2xpZW50KToKKyAgICAgICAgIiIiUHJvY2VzcyBt
ZXNzYWdlcyB1bnRpbCBjbGllbnQuaXNfZG9uZSgpIG9yIGNhbGxlciB3b3VsZCBibG9jay4iIiIK
KyAgICAgICAgc2VsZi5fcnVuX2xvb3AodG9waWNfbmFtZSwgY2xpZW50LCBibG9jaz1GYWxzZSwg
ZGVsYXlfc2Vjcz1Ob25lKQorCisgICAgZGVmIF9ydW5fbG9vcChzZWxmLCB0b3BpY19uYW1lLCBj
bGllbnQsIGJsb2NrLCBkZWxheV9zZWNzKToKKyAgICAgICAgcXVldWUgPSBzZWxmLl9nZXRfcXVl
dWVfZm9yX3RvcGljKHRvcGljX25hbWUpCisgICAgICAgIHdoaWxlIG5vdCBjbGllbnQuaXNfZG9u
ZSgpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMgPSBxdWV1ZS5nZXQoYmxv
Y2ssIGRlbGF5X3NlY3MpCisgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAg
ICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBtc2cgPSBfTWVzc2FnZS5sb2FkcyhzKQorICAg
ICAgICAgICAgc2VsZi5fZGlzcGF0Y2hfbWVzc2FnZShtc2csIGNsaWVudCkKKworICAgIGRlZiBf
ZGlzcGF0Y2hfbWVzc2FnZShzZWxmLCBtZXNzYWdlLCBjbGllbnQpOgorICAgICAgICBpZiBub3Qg
aGFzYXR0cihjbGllbnQsICdoYW5kbGVfJyArIG1lc3NhZ2UubmFtZSk6CisgICAgICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgIiVzOiByZWNlaXZlZCBtZXNzYWdlICcl
cycgaXQgY291bGRuJ3QgaGFuZGxlIiAlCisgICAgICAgICAgICAgICAoY2xpZW50Lm5hbWUoKSwg
bWVzc2FnZS5uYW1lKSkKKyAgICAgICAgb3B0YXJncyA9IG1lc3NhZ2UuYXJncworICAgICAgICBt
ZXNzYWdlX2hhbmRsZXIgPSBnZXRhdHRyKGNsaWVudCwgJ2hhbmRsZV8nICsgbWVzc2FnZS5uYW1l
KQorICAgICAgICBtZXNzYWdlX2hhbmRsZXIobWVzc2FnZS5zcmMsICpvcHRhcmdzKQorCisKK2Ns
YXNzIF9NZXNzYWdlKG9iamVjdCk6CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBsb2Fkcyhz
dHIpOgorICAgICAgICBvYmogPSBjUGlja2xlLmxvYWRzKHN0cikKKyAgICAgICAgYXNzZXJ0KGlz
aW5zdGFuY2Uob2JqLCBfTWVzc2FnZSkpCisgICAgICAgIHJldHVybiBvYmoKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBzcmMsIHRvcGljX25hbWUsIG1lc3NhZ2VfbmFtZSwgbWVzc2FnZV9hcmdz
KToKKyAgICAgICAgc2VsZi5zcmMgPSBzcmMKKyAgICAgICAgc2VsZi50b3BpY19uYW1lID0gdG9w
aWNfbmFtZQorICAgICAgICBzZWxmLm5hbWUgPSBtZXNzYWdlX25hbWUKKyAgICAgICAgc2VsZi5h
cmdzID0gbWVzc2FnZV9hcmdzCisKKyAgICBkZWYgZHVtcHMoc2VsZik6CisgICAgICAgIHJldHVy
biBjUGlja2xlLmR1bXBzKHNlbGYpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAg
IHJldHVybiAoIl9NZXNzYWdlKGZyb209JyVzJywgdG9waWNfbmFtZT0nJXMnLCBtZXNzYWdlX25h
bWU9JyVzJykiICUKKyAgICAgICAgICAgICAgICAoc2VsZi5zcmMsIHNlbGYudG9waWNfbmFtZSwg
c2VsZi5uYW1lKSkKKworCitjbGFzcyBCcm9rZXJDb25uZWN0aW9uKG9iamVjdCk6CisgICAgIiIi
QnJva2VyQ29ubmVjdGlvbiBwcm92aWRlcyBhIGNvbm5lY3Rpb24tb3JpZW50ZWQgZmFjYWRlIG9u
IHRvcCBvZiBhCisgICAgQnJva2VyLCBzbyB0aGF0IGNhbGxlcnMgZG9uJ3QgaGF2ZSB0byByZXBl
YXRlZGx5IHBhc3MgdGhlIHNhbWUgdG9waWMKKyAgICBuYW1lcyBvdmVyIGFuZCBvdmVyLiIiIgor
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgY2xpZW50LCBydW5fdG9waWMsIHBvc3Rf
dG9waWMpOgorICAgICAgICAiIiJDcmVhdGUgYSBCcm9rZXJDb25uZWN0aW9uIG9uIHRvcCBvZiBh
IEJyb2tlci4gTm90ZSB0aGF0IHRoZSBCcm9rZXIKKyAgICAgICAgaXMgcGFzc2VkIGluIHJhdGhl
ciB0aGFuIGNyZWF0ZWQgc28gdGhhdCBhIHNpbmdsZSBCcm9rZXIgY2FuIGJlIHVzZWQKKyAgICAg
ICAgYnkgbXVsdGlwbGUgQnJva2VyQ29ubmVjdGlvbnMuIiIiCisgICAgICAgIHNlbGYuX2Jyb2tl
ciA9IGJyb2tlcgorICAgICAgICBzZWxmLl9jbGllbnQgPSBjbGllbnQKKyAgICAgICAgc2VsZi5f
cG9zdF90b3BpYyA9IHBvc3RfdG9waWMKKyAgICAgICAgc2VsZi5fcnVuX3RvcGljID0gcnVuX3Rv
cGljCisgICAgICAgIGJyb2tlci5hZGRfdG9waWMocnVuX3RvcGljKQorICAgICAgICBicm9rZXIu
YWRkX3RvcGljKHBvc3RfdG9waWMpCisKKyAgICBkZWYgcnVuX21lc3NhZ2VfbG9vcChzZWxmLCBk
ZWxheV9zZWNzPU5vbmUpOgorICAgICAgICBzZWxmLl9icm9rZXIucnVuX21lc3NhZ2VfbG9vcChz
ZWxmLl9ydW5fdG9waWMsIHNlbGYuX2NsaWVudCwgZGVsYXlfc2VjcykKKworICAgIGRlZiBwb3N0
X21lc3NhZ2Uoc2VsZiwgbWVzc2FnZV9uYW1lLCAqbWVzc2FnZV9hcmdzKToKKyAgICAgICAgc2Vs
Zi5fYnJva2VyLnBvc3RfbWVzc2FnZShzZWxmLl9jbGllbnQsIHNlbGYuX3Bvc3RfdG9waWMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9uYW1lLCAqbWVzc2FnZV9h
cmdzKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxl
cnMvbWVzc2FnZV9icm9rZXJfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWVzc2FnZV9icm9rZXJfdW5pdHRl
c3QucHkJKHJldmlzaW9uIDkwNTIwKQkoZnJvbSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcl91bml0dGVzdC5weTo5MDUyMCkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21lc3Nh
Z2VfYnJva2VyX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisj
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1lc3NhZ2VfYnJva2VyCisKKyMgVGhpcyBmaWxl
IGV4aXN0cyB0byB0ZXN0IHJvdXRpbmVzIHRoYXQgYXJlbid0IG5lY2Vzc2FyaWx5IGNvdmVyZWQg
ZWxzZXdoZXJlOworIyBtb3N0IG9mIHRoZSB0ZXN0aW5nIG9mIG1lc3NhZ2VfYnJva2VyIHdpbGwg
YmUgY292ZXJlZCB1bmRlciB0aGUgdGVzdHMgaW4KKyMgdGhlIG1hbmFnZXJfd29ya2VyX2Jyb2tl
ciBtb2R1bGUuCisKKworY2xhc3MgTWVzc2FnZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAg
IGRlZiB0ZXN0X19ub19ib2R5KHNlbGYpOgorICAgICAgICBtc2cgPSBtZXNzYWdlX2Jyb2tlci5f
TWVzc2FnZSgnc3JjJywgJ3RvcGljX25hbWUnLCAnbWVzc2FnZV9uYW1lJywgTm9uZSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobXNnKSkKKyAgICAgICAgcyA9IG1zZy5kdW1wcygpCisg
ICAgICAgIG5ld19tc2cgPSBtZXNzYWdlX2Jyb2tlci5fTWVzc2FnZS5sb2FkcyhzKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cubmFtZSwgJ21lc3NhZ2VfbmFtZScpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy5hcmdzLCBOb25lKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKG5ld19tc2cudG9waWNfbmFtZSwgJ3RvcGljX25hbWUnKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKG5ld19tc2cuc3JjLCAnc3JjJykKKworICAgIGRlZiB0ZXN0X19ib2R5KHNlbGYp
OgorICAgICAgICBtc2cgPSBtZXNzYWdlX2Jyb2tlci5fTWVzc2FnZSgnc3JjJywgJ3RvcGljX25h
bWUnLCAnbWVzc2FnZV9uYW1lJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCdib2R5JywgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKG1zZykpCisgICAg
ICAgIHMgPSBtc2cuZHVtcHMoKQorICAgICAgICBuZXdfbXNnID0gbWVzc2FnZV9icm9rZXIuX01l
c3NhZ2UubG9hZHMocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNnLm5hbWUsICdt
ZXNzYWdlX25hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cuYXJncywgKCdi
b2R5JywgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy50b3BpY19uYW1lLCAn
dG9waWNfbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy5zcmMsICdzcmMn
KQorCisKK2NsYXNzIEludGVyZmFjZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhl
c2UgdGVzdHMgbW9zdGx5IGV4aXN0IHRvIHBhY2lmeSBjb3ZlcmFnZS4KKworICAgICMgRklYTUU6
IFRoZXJlIG11c3QgYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgYW5kIGFsc28gdmVyaWZ5Cisg
ICAgIyB0aGF0IGNsYXNzZXMgZG8gaW1wbGVtZW50IGV2ZXJ5IGFic3RyYWN0IG1ldGhvZCBpbiBh
biBpbnRlcmZhY2UuCisKKyAgICBkZWYgdGVzdF9icm9rZXJjbGllbnRfaXNfYWJzdHJhY3Qoc2Vs
Zik6CisgICAgICAgICMgVGVzdCB0aGF0IHdlIGNhbid0IGNyZWF0ZSBhbiBpbnN0YW5jZSBkaXJl
Y3RseS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbWVz
c2FnZV9icm9rZXIuQnJva2VyQ2xpZW50KQorCisgICAgICAgIGNsYXNzIFRlc3RDbGllbnQobWVz
c2FnZV9icm9rZXIuQnJva2VyQ2xpZW50KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxm
KToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBUZXN0IHRoYXQgYWxsIHRoZSBi
YXNlIGNsYXNzIG1ldGhvZHMgYXJlIGFic3RyYWN0IGFuZCBoYXZlIHRoZQorICAgICAgICAjIHNp
Z25hdHVyZSB3ZSBleHBlY3QuCisgICAgICAgIG9iaiA9IFRlc3RDbGllbnQoKQorICAgICAgICBz
ZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmouaXNfZG9uZSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLm5hbWUpCisKKwor
aWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21lc3NhZ2VfYnJv
a2VyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21lc3NhZ2VfYnJva2VyX3VuaXR0ZXN0LnB5CShyZXZpc2lv
biAwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMv
bWVzc2FnZV9icm9rZXJfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcg
QEAKIAogaW1wb3J0IHVuaXR0ZXN0CiAKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91
dF9wYWNrYWdlIGltcG9ydCBtZXNzYWdlX2Jyb2tlcgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMuY29udHJvbGxlcnMgaW1wb3J0IG1lc3NhZ2VfYnJva2VyCiAKICMgVGhpcyBmaWxlIGV4aXN0
cyB0byB0ZXN0IHJvdXRpbmVzIHRoYXQgYXJlbid0IG5lY2Vzc2FyaWx5IGNvdmVyZWQgZWxzZXdo
ZXJlOwogIyBtb3N0IG9mIHRoZSB0ZXN0aW5nIG9mIG1lc3NhZ2VfYnJva2VyIHdpbGwgYmUgY292
ZXJlZCB1bmRlciB0aGUgdGVzdHMgaW4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3NpbmdsZV90ZXN0X3J1bm5lci5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9zaW5nbGVf
dGVzdF9ydW5uZXIucHkJKHJldmlzaW9uIDkwNTIwKQkoZnJvbSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9zaW5nbGVfdGVzdF9ydW5uZXIucHk6OTA1
MjApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9z
aW5nbGVfdGVzdF9ydW5uZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMTAgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisj
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgdGltZQorCitmcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmRyaXZlciBpbXBvcnQgRHJpdmVySW5wdXQsIERyaXZl
ck91dHB1dAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0
IHRlc3RfZXhwZWN0YXRpb25zCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFj
a2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5
b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfcmVzdWx0X3dyaXRlcgorZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMubGF5b3V0X3BhY2thZ2UudGVzdF9yZXN1bHRzIGltcG9ydCBUZXN0UmVzdWx0CisK
KworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2RlZiBydW5fc2luZ2xl
X3Rlc3QocG9ydCwgb3B0aW9ucywgdGVzdF9pbnB1dCwgZHJpdmVyLCB3b3JrZXJfbmFtZSk6Cisg
ICAgcnVubmVyID0gU2luZ2xlVGVzdFJ1bm5lcihvcHRpb25zLCBwb3J0LCBkcml2ZXIsIHRlc3Rf
aW5wdXQsIHdvcmtlcl9uYW1lKQorICAgIHJldHVybiBydW5uZXIucnVuKCkKKworCitjbGFzcyBT
aW5nbGVUZXN0UnVubmVyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMsIHBvcnQs
IGRyaXZlciwgdGVzdF9pbnB1dCwgd29ya2VyX25hbWUpOgorICAgICAgICBzZWxmLl9vcHRpb25z
ID0gb3B0aW9ucworICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9kcml2
ZXIgPSBkcml2ZXIKKyAgICAgICAgc2VsZi5fdGltZW91dCA9IHRlc3RfaW5wdXQudGltZW91dAor
ICAgICAgICBzZWxmLl93b3JrZXJfbmFtZSA9IHdvcmtlcl9uYW1lCisgICAgICAgIHNlbGYuX3Rl
c3RfbmFtZSA9IHRlc3RfaW5wdXQudGVzdF9uYW1lCisKKyAgICAgICAgc2VsZi5faXNfcmVmdGVz
dCA9IEZhbHNlCisgICAgICAgIHNlbGYuX2lzX21pc21hdGNoX3JlZnRlc3QgPSBGYWxzZQorICAg
ICAgICBzZWxmLl9yZWZlcmVuY2VfZmlsZW5hbWUgPSBOb25lCisKKyAgICAgICAgZnMgPSBwb3J0
Ll9maWxlc3lzdGVtCisgICAgICAgIHJlZnRlc3RfZXhwZWN0ZWRfZmlsZW5hbWUgPSBwb3J0LnJl
ZnRlc3RfZXhwZWN0ZWRfZmlsZW5hbWUoc2VsZi5fdGVzdF9uYW1lKQorICAgICAgICBpZiBmcy5l
eGlzdHMocmVmdGVzdF9leHBlY3RlZF9maWxlbmFtZSk6CisgICAgICAgICAgICBzZWxmLl9pc19y
ZWZ0ZXN0ID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5fcmVmZXJlbmNlX2ZpbGVuYW1lID0gcmVm
dGVzdF9leHBlY3RlZF9maWxlbmFtZQorCisgICAgICAgIHJlZnRlc3RfZXhwZWN0ZWRfbWlzbWF0
Y2hfZmlsZW5hbWUgPSBwb3J0LnJlZnRlc3RfZXhwZWN0ZWRfbWlzbWF0Y2hfZmlsZW5hbWUoc2Vs
Zi5fdGVzdF9uYW1lKQorICAgICAgICBpZiBmcy5leGlzdHMocmVmdGVzdF9leHBlY3RlZF9taXNt
YXRjaF9maWxlbmFtZSk6CisgICAgICAgICAgICBpZiBzZWxmLl9pc19yZWZ0ZXN0OgorICAgICAg
ICAgICAgICAgIF9sb2cuZXJyb3IoJ0l0IGlzIG5vdCBhbGxvd2VkIHRoYXQgb25lIHRlc3QgZmls
ZSBoYXMgYm90aCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgZXhwZWN0ZWQuaHRtbCBm
aWxlIGFuZCBleHBlY3RlZC1taXNtYXRjaC5odG1sIGZpbGUnCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnIGF0IHRoZSBzYW1lIHRpbWUuIFBsZWFzZSByZW1vdmUgZWl0aGVyICVzIG9yICVz
LicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZ0ZXN0X2V4cGVjdGVkX2ZpbGVuYW1l
LCByZWZ0ZXN0X2V4cGVjdGVkX21pc21hdGNoX2ZpbGVuYW1lKQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICBzZWxmLl9pc19yZWZ0ZXN0ID0gVHJ1ZQorICAgICAgICAgICAgICAg
IHNlbGYuX2lzX21pc21hdGNoX3JlZnRlc3QgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5f
cmVmZXJlbmNlX2ZpbGVuYW1lID0gcmVmdGVzdF9leHBlY3RlZF9taXNtYXRjaF9maWxlbmFtZQor
CisgICAgICAgIGlmIHNlbGYuX2lzX3JlZnRlc3Q6CisgICAgICAgICAgICAjIERldGVjdCBhbmQg
cmVwb3J0IGEgdGVzdCB3aGljaCBoYXMgYSB3cm9uZyBjb21iaW5hdGlvbiBvZiBleHBlY3RhdGlv
biBmaWxlcy4KKyAgICAgICAgICAgICMgRm9yIGV4YW1wbGUsIGlmICdmb28uaHRtbCcgaGFzIHR3
byBleHBlY3RhdGlvbiBmaWxlcywgJ2Zvby1leHBlY3RlZC5odG1sJyBhbmQKKyAgICAgICAgICAg
ICMgJ2Zvby1leHBlY3RlZC50eHQnLCB3ZSBzaG91bGQgd2FybiB1c2Vycy4gT25lIHRlc3QgZmls
ZSBtdXN0IGJlIHVzZWQgZXhjbHVzaXZlbHkKKyAgICAgICAgICAgICMgaW4gZWl0aGVyIGxheW91
dCB0ZXN0cyBvciByZWZ0ZXN0cywgYnV0IG5vdCBpbiBib3RoLgorICAgICAgICAgICAgZm9yIHN1
ZmZpeCBpbiAoJy50eHQnLCAnLnBuZycsICcud2F2Jyk6CisgICAgICAgICAgICAgICAgZXhwZWN0
ZWRfZmlsZW5hbWUgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ZpbGVuYW1lKHNlbGYuX3Rlc3RfbmFt
ZSwgc3VmZml4KQorICAgICAgICAgICAgICAgIGlmIGZzLmV4aXN0cyhleHBlY3RlZF9maWxlbmFt
ZSk6CisgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1RoZSByZWZ0ZXN0ICglcykgY2Fu
IG5vdCBoYXZlIGFuIGV4cGVjdGF0aW9uIGZpbGUgKCVzKS4nCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJyBQbGVhc2UgcmVtb3ZlIHRoYXQgZmlsZS4nLCBzZWxmLl90ZXN0X25hbWUs
IGV4cGVjdGVkX2ZpbGVuYW1lKQorCisgICAgZGVmIF9leHBlY3RlZF9kcml2ZXJfb3V0cHV0KHNl
bGYpOgorICAgICAgICByZXR1cm4gRHJpdmVyT3V0cHV0KHNlbGYuX3BvcnQuZXhwZWN0ZWRfdGV4
dChzZWxmLl90ZXN0X25hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fcG9ydC5leHBlY3RlZF9pbWFnZShzZWxmLl90ZXN0X25hbWUpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5leHBlY3RlZF9jaGVja3N1bShzZWxmLl90ZXN0
X25hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5leHBl
Y3RlZF9hdWRpbyhzZWxmLl90ZXN0X25hbWUpKQorCisgICAgZGVmIF9zaG91bGRfZmV0Y2hfZXhw
ZWN0ZWRfY2hlY2tzdW0oc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5fb3B0aW9ucy5waXhl
bF90ZXN0cyBhbmQKKyAgICAgICAgICAgICAgICBub3QgKHNlbGYuX29wdGlvbnMubmV3X2Jhc2Vs
aW5lIG9yIHNlbGYuX29wdGlvbnMucmVzZXRfcmVzdWx0cykpCisKKyAgICBkZWYgX2RyaXZlcl9p
bnB1dChzZWxmKToKKyAgICAgICAgIyBUaGUgaW1hZ2UgaGFzaCBpcyB1c2VkIHRvIGF2b2lkIGRv
aW5nIGFuIGltYWdlIGR1bXAgaWYgdGhlCisgICAgICAgICMgY2hlY2tzdW1zIG1hdGNoLCBzbyBp
dCBzaG91bGQgYmUgc2V0IHRvIGEgYmxhbmsgdmFsdWUgaWYgd2UKKyAgICAgICAgIyBhcmUgZ2Vu
ZXJhdGluZyBhIG5ldyBiYXNlbGluZS4gIChPdGhlcndpc2UsIGFuIGltYWdlIGZyb20gYQorICAg
ICAgICAjIHByZXZpb3VzIHJ1biB3aWxsIGJlIGNvcGllZCBpbnRvIHRoZSBiYXNlbGluZS4iIiIK
KyAgICAgICAgaW1hZ2VfaGFzaCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fc2hvdWxkX2ZldGNo
X2V4cGVjdGVkX2NoZWNrc3VtKCk6CisgICAgICAgICAgICBpbWFnZV9oYXNoID0gc2VsZi5fcG9y
dC5leHBlY3RlZF9jaGVja3N1bShzZWxmLl90ZXN0X25hbWUpCisgICAgICAgIHJldHVybiBEcml2
ZXJJbnB1dChzZWxmLl90ZXN0X25hbWUsIHNlbGYuX3RpbWVvdXQsIGltYWdlX2hhc2gpCisKKyAg
ICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLm5ld19iYXNlbGluZSBv
ciBzZWxmLl9vcHRpb25zLnJlc2V0X3Jlc3VsdHM6CisgICAgICAgICAgICBpZiBzZWxmLl9pc19y
ZWZ0ZXN0OgorICAgICAgICAgICAgICAgICMgUmV0dXJucyBhIGR1bW15IFRlc3RSZXN1bHQuIFdl
IGRvbid0IGhhdmUgdG8gcmViYXNlIGZvciByZWZ0ZXN0cy4KKyAgICAgICAgICAgICAgICByZXR1
cm4gVGVzdFJlc3VsdChzZWxmLl90ZXN0X25hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIHJldHVybiBzZWxmLl9ydW5fcmViYXNlbGluZSgpCisgICAgICAgIGlmIHNlbGYu
X2lzX3JlZnRlc3Q6CisgICAgICAgICAgICBpZiBzZWxmLl9wb3J0LmdldF9vcHRpb24oJ3BpeGVs
X3Rlc3RzJyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9yZWZ0ZXN0KCkKKyAg
ICAgICAgICAgIHJlc3VsdCA9IFRlc3RSZXN1bHQoc2VsZi5fdGVzdF9uYW1lKQorICAgICAgICAg
ICAgcmVzdWx0LnR5cGUgPSB0ZXN0X2V4cGVjdGF0aW9ucy5TS0lQCisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0CisgICAgICAgIHJldHVybiBzZWxmLl9ydW5fY29tcGFyZV90ZXN0KCkKKworICAg
IGRlZiBfcnVuX2NvbXBhcmVfdGVzdChzZWxmKToKKyAgICAgICAgZHJpdmVyX291dHB1dCA9IHNl
bGYuX2RyaXZlci5ydW5fdGVzdChzZWxmLl9kcml2ZXJfaW5wdXQoKSkKKyAgICAgICAgZXhwZWN0
ZWRfZHJpdmVyX291dHB1dCA9IHNlbGYuX2V4cGVjdGVkX2RyaXZlcl9vdXRwdXQoKQorICAgICAg
ICB0ZXN0X3Jlc3VsdCA9IHNlbGYuX2NvbXBhcmVfb3V0cHV0KGRyaXZlcl9vdXRwdXQsIGV4cGVj
dGVkX2RyaXZlcl9vdXRwdXQpCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMubmV3X3Rlc3RfcmVz
dWx0czoKKyAgICAgICAgICAgIHNlbGYuX2FkZF9taXNzaW5nX2Jhc2VsaW5lcyh0ZXN0X3Jlc3Vs
dCwgZHJpdmVyX291dHB1dCkKKyAgICAgICAgdGVzdF9yZXN1bHRfd3JpdGVyLndyaXRlX3Rlc3Rf
cmVzdWx0KHNlbGYuX3BvcnQsIHNlbGYuX3Rlc3RfbmFtZSwgZHJpdmVyX291dHB1dCwgZXhwZWN0
ZWRfZHJpdmVyX291dHB1dCwgdGVzdF9yZXN1bHQuZmFpbHVyZXMpCisgICAgICAgIHJldHVybiB0
ZXN0X3Jlc3VsdAorCisgICAgZGVmIF9ydW5fcmViYXNlbGluZShzZWxmKToKKyAgICAgICAgZHJp
dmVyX291dHB1dCA9IHNlbGYuX2RyaXZlci5ydW5fdGVzdChzZWxmLl9kcml2ZXJfaW5wdXQoKSkK
KyAgICAgICAgZmFpbHVyZXMgPSBzZWxmLl9oYW5kbGVfZXJyb3IoZHJpdmVyX291dHB1dCkKKyAg
ICAgICAgdGVzdF9yZXN1bHRfd3JpdGVyLndyaXRlX3Rlc3RfcmVzdWx0KHNlbGYuX3BvcnQsIHNl
bGYuX3Rlc3RfbmFtZSwgZHJpdmVyX291dHB1dCwgTm9uZSwgZmFpbHVyZXMpCisgICAgICAgICMg
RklYTUU6IEl0IHRoZSB0ZXN0IGNyYXNoZWQgb3IgdGltZWQgb3V0LCBpdCBtaWdodCBiZSBiZXR0
dGVyIHRvIGF2b2lkCisgICAgICAgICMgdG8gd3JpdGUgbmV3IGJhc2VsaW5lcy4KKyAgICAgICAg
c2VsZi5fb3ZlcndyaXRlX2Jhc2VsaW5lcyhkcml2ZXJfb3V0cHV0KQorICAgICAgICByZXR1cm4g
VGVzdFJlc3VsdChzZWxmLl90ZXN0X25hbWUsIGZhaWx1cmVzLCBkcml2ZXJfb3V0cHV0LnRlc3Rf
dGltZSwgZHJpdmVyX291dHB1dC5oYXNfc3RkZXJyKCkpCisKKyAgICBkZWYgX2FkZF9taXNzaW5n
X2Jhc2VsaW5lcyhzZWxmLCB0ZXN0X3Jlc3VsdCwgZHJpdmVyX291dHB1dCk6CisgICAgICAgIGlm
IHRlc3RfcmVzdWx0Lmhhc19mYWlsdXJlX21hdGNoaW5nX3R5cGVzKHRlc3RfZmFpbHVyZXMuRmFp
bHVyZU1pc3NpbmdSZXN1bHQpOgorICAgICAgICAgICAgIyBGSVhNRTogV2Ugc2VlbSB0byBiZSBw
dXR0aW5nIG5ldyB0ZXh0IHJlc3VsdHMgaW4gbm9uLXBsYXRmb3JtCisgICAgICAgICAgICAjIHNw
ZWNpZmljIGRpcmVjdG9yaWVzIGV2ZW4gd2hlbiB0aGV5J3JlIHJlbmRlcnRyZWUgZHVtcHMuIE1h
eWJlCisgICAgICAgICAgICAjIHdlIHNob3VsZCBoYXZlIGEgZGlmZmVyZW50IGtpbmQgb2YgZmFp
bHVyZSBmb3IgcmVuZGVyIHRyZWUgZHVtcHMKKyAgICAgICAgICAgICMgdGhhbiBmb3IgdGV4dCB0
ZXN0cz8KKyAgICAgICAgICAgIHNlbGYuX3NhdmVfYmFzZWxpbmVfZGF0YShkcml2ZXJfb3V0cHV0
LnRleHQsICIudHh0IiwgZ2VuZXJhdGVfbmV3X2Jhc2VsaW5lPUZhbHNlKQorICAgICAgICBpZiB0
ZXN0X3Jlc3VsdC5oYXNfZmFpbHVyZV9tYXRjaGluZ190eXBlcyh0ZXN0X2ZhaWx1cmVzLkZhaWx1
cmVNaXNzaW5nQXVkaW8pOgorICAgICAgICAgICAgc2VsZi5fc2F2ZV9iYXNlbGluZV9kYXRhKGRy
aXZlcl9vdXRwdXQuYXVkaW8sICIud2F2IiwgZ2VuZXJhdGVfbmV3X2Jhc2VsaW5lPUZhbHNlKQor
ICAgICAgICBpZiB0ZXN0X3Jlc3VsdC5oYXNfZmFpbHVyZV9tYXRjaGluZ190eXBlcyh0ZXN0X2Zh
aWx1cmVzLkZhaWx1cmVNaXNzaW5nSW1hZ2UsIHRlc3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdJ
bWFnZUhhc2gpOgorICAgICAgICAgICAgc2VsZi5fc2F2ZV9iYXNlbGluZV9kYXRhKGRyaXZlcl9v
dXRwdXQuaW1hZ2UsICIucG5nIiwgZ2VuZXJhdGVfbmV3X2Jhc2VsaW5lPUZhbHNlKQorCisgICAg
ZGVmIF9vdmVyd3JpdGVfYmFzZWxpbmVzKHNlbGYsIGRyaXZlcl9vdXRwdXQpOgorICAgICAgICAj
IEFsdGhvdWdoIGFsbCBEdW1wUmVuZGVyVHJlZSBvdXRwdXQgc2hvdWxkIGJlIHV0Zi04LAorICAg
ICAgICAjIHdlIGRvIG5vdCBldmVyIGRlY29kZSBpdCBpbnNpZGUgcnVuLXdlYmtpdC10ZXN0cy4g
IEZvciBzb21lIHRlc3RzCisgICAgICAgICMgRHVtcFJlbmRlclRyZWUgbWF5IG5vdCBvdXRwdXQg
dXRmLTggdGV4dCAoZS5nLiB3ZWJhcmNoaXZlcykuCisgICAgICAgIHNlbGYuX3NhdmVfYmFzZWxp
bmVfZGF0YShkcml2ZXJfb3V0cHV0LnRleHQsICIudHh0IiwgZ2VuZXJhdGVfbmV3X2Jhc2VsaW5l
PXNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5lKQorICAgICAgICBzZWxmLl9zYXZlX2Jhc2VsaW5l
X2RhdGEoZHJpdmVyX291dHB1dC5hdWRpbywgIi53YXYiLCBnZW5lcmF0ZV9uZXdfYmFzZWxpbmU9
c2VsZi5fb3B0aW9ucy5uZXdfYmFzZWxpbmUpCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucGl4
ZWxfdGVzdHM6CisgICAgICAgICAgICBzZWxmLl9zYXZlX2Jhc2VsaW5lX2RhdGEoZHJpdmVyX291
dHB1dC5pbWFnZSwgIi5wbmciLCBnZW5lcmF0ZV9uZXdfYmFzZWxpbmU9c2VsZi5fb3B0aW9ucy5u
ZXdfYmFzZWxpbmUpCisKKyAgICBkZWYgX3NhdmVfYmFzZWxpbmVfZGF0YShzZWxmLCBkYXRhLCBt
b2RpZmllciwgZ2VuZXJhdGVfbmV3X2Jhc2VsaW5lPVRydWUpOgorICAgICAgICAiIiJTYXZlcyBh
IG5ldyBiYXNlbGluZSBmaWxlIGludG8gdGhlIHBvcnQncyBiYXNlbGluZSBkaXJlY3RvcnkuCisK
KyAgICAgICAgVGhlIGZpbGUgd2lsbCBiZSBuYW1lZCBzaW1wbHkgIjx0ZXN0Pi1leHBlY3RlZDxt
b2RpZmllcj4iLCBzdWl0YWJsZSBmb3IKKyAgICAgICAgdXNlIGFzIHRoZSBleHBlY3RlZCByZXN1
bHRzIGluIGEgbGF0ZXIgcnVuLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgZGF0YTogcmVz
dWx0IHRvIGJlIHNhdmVkIGFzIHRoZSBuZXcgYmFzZWxpbmUKKyAgICAgICAgICBtb2RpZmllcjog
dHlwZSBvZiB0aGUgcmVzdWx0IGZpbGUsIGUuZy4gIi50eHQiIG9yICIucG5nIgorICAgICAgICAg
IGdlbmVyYXRlX25ld19iYXNlbGluZTogd2hldGhlciB0byBlbmVyYXRlIGEgbmV3LCBwbGF0Zm9y
bS1zcGVjaWZpYworICAgICAgICAgICAgYmFzZWxpbmUsIG9yIHVwZGF0ZSB0aGUgZXhpc3Rpbmcg
b25lCisgICAgICAgICIiIgorICAgICAgICBpZiBkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICBy
ZXR1cm4KKyAgICAgICAgcG9ydCA9IHNlbGYuX3BvcnQKKyAgICAgICAgZnMgPSBwb3J0Ll9maWxl
c3lzdGVtCisgICAgICAgIGlmIGdlbmVyYXRlX25ld19iYXNlbGluZToKKyAgICAgICAgICAgIHJl
bGF0aXZlX2RpciA9IGZzLmRpcm5hbWUoc2VsZi5fdGVzdF9uYW1lKQorICAgICAgICAgICAgYmFz
ZWxpbmVfcGF0aCA9IHBvcnQuYmFzZWxpbmVfcGF0aCgpCisgICAgICAgICAgICBvdXRwdXRfZGly
ID0gZnMuam9pbihiYXNlbGluZV9wYXRoLCByZWxhdGl2ZV9kaXIpCisgICAgICAgICAgICBvdXRw
dXRfZmlsZSA9IGZzLmJhc2VuYW1lKGZzLnNwbGl0ZXh0KHNlbGYuX3Rlc3RfbmFtZSlbMF0gKwor
ICAgICAgICAgICAgICAgICItZXhwZWN0ZWQiICsgbW9kaWZpZXIpCisgICAgICAgICAgICBmcy5t
YXliZV9tYWtlX2RpcmVjdG9yeShvdXRwdXRfZGlyKQorICAgICAgICAgICAgb3V0cHV0X3BhdGgg
PSBmcy5qb2luKG91dHB1dF9kaXIsIG91dHB1dF9maWxlKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgb3V0cHV0X3BhdGggPSBwb3J0LmV4cGVjdGVkX2ZpbGVuYW1lKHNlbGYuX3Rlc3RfbmFt
ZSwgbW9kaWZpZXIpCisKKyAgICAgICAgcmVzdWx0X25hbWUgPSBmcy5yZWxwYXRoKG91dHB1dF9w
YXRoLCBwb3J0LmxheW91dF90ZXN0c19kaXIoKSkKKyAgICAgICAgX2xvZy5pbmZvKCdXcml0aW5n
IG5ldyBleHBlY3RlZCByZXN1bHQgIiVzIicgJSByZXN1bHRfbmFtZSkKKyAgICAgICAgcG9ydC51
cGRhdGVfYmFzZWxpbmUob3V0cHV0X3BhdGgsIGRhdGEpCisKKyAgICBkZWYgX2hhbmRsZV9lcnJv
cihzZWxmLCBkcml2ZXJfb3V0cHV0LCByZWZlcmVuY2VfZmlsZW5hbWU9Tm9uZSk6CisgICAgICAg
ICIiIlJldHVybnMgdGVzdCBmYWlsdXJlcyBpZiBzb21lIHVudXN1YWwgZXJyb3JzIGhhcHBlbiBp
biBkcml2ZXIncyBydW4uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBkcml2ZXJfb3V0cHV0
OiBUaGUgb3V0cHV0IGZyb20gdGhlIGRyaXZlci4KKyAgICAgICAgICByZWZlcmVuY2VfZmlsZW5h
bWU6IFRoZSBmdWxsIHBhdGggdG8gdGhlIHJlZmVyZW5jZSBmaWxlIHdoaWNoIHByb2R1Y2VkIHRo
ZSBkcml2ZXJfb3V0cHV0LgorICAgICAgICAgICAgICBUaGlzIGFyZyBpcyBvcHRpb25hbCBhbmQg
c2hvdWxkIGJlIHVzZWQgb25seSBpbiByZWZ0ZXN0cyB1bnRpbCB3ZSBoYXZlIGEgYmV0dGVyIHdh
eSB0byBrbm93CisgICAgICAgICAgICAgIHdoaWNoIGh0bWwgZmlsZSBpcyB1c2VkIGZvciBwcm9k
dWNpbmcgdGhlIGRyaXZlcl9vdXRwdXQuCisgICAgICAgICIiIgorICAgICAgICBmYWlsdXJlcyA9
IFtdCisgICAgICAgIGZzID0gc2VsZi5fcG9ydC5fZmlsZXN5c3RlbQorICAgICAgICBpZiBkcml2
ZXJfb3V0cHV0LnRpbWVvdXQ6CisgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWls
dXJlcy5GYWlsdXJlVGltZW91dChib29sKHJlZmVyZW5jZV9maWxlbmFtZSkpKQorCisgICAgICAg
IGlmIHJlZmVyZW5jZV9maWxlbmFtZToKKyAgICAgICAgICAgIHRlc3RuYW1lID0gc2VsZi5fcG9y
dC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHJlZmVyZW5jZV9maWxlbmFtZSkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHRlc3RuYW1lID0gc2VsZi5fdGVzdF9uYW1lCisKKyAgICAgICAgaWYg
ZHJpdmVyX291dHB1dC5jcmFzaDoKKyAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2Zh
aWx1cmVzLkZhaWx1cmVDcmFzaChib29sKHJlZmVyZW5jZV9maWxlbmFtZSkpKQorICAgICAgICAg
ICAgX2xvZy5kZWJ1ZygiJXMgU3RhY2t0cmFjZSBmb3IgJXM6XG4lcyIgJSAoc2VsZi5fd29ya2Vy
X25hbWUsIHRlc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZHJpdmVyX291dHB1dC5lcnJvcikpCisgICAgICAgIGVsaWYgZHJpdmVy
X291dHB1dC5lcnJvcjoKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICVzIG91dHB1dCBzdGRl
cnIgbGluZXM6XG4lcyIgJSAoc2VsZi5fd29ya2VyX25hbWUsIHRlc3RuYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJf
b3V0cHV0LmVycm9yKSkKKyAgICAgICAgcmV0dXJuIGZhaWx1cmVzCisKKyAgICBkZWYgX2NvbXBh
cmVfb3V0cHV0KHNlbGYsIGRyaXZlcl9vdXRwdXQsIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQpOgor
ICAgICAgICBmYWlsdXJlcyA9IFtdCisgICAgICAgIGZhaWx1cmVzLmV4dGVuZChzZWxmLl9oYW5k
bGVfZXJyb3IoZHJpdmVyX291dHB1dCkpCisKKyAgICAgICAgaWYgZHJpdmVyX291dHB1dC5jcmFz
aDoKKyAgICAgICAgICAgICMgRG9uJ3QgY29udGludWUgYW55IG1vcmUgaWYgd2UgYWxyZWFkeSBo
YXZlIGEgY3Jhc2guCisgICAgICAgICAgICAjIEluIGNhc2Ugb2YgdGltZW91dHMsIHdlIGNvbnRp
bnVlIHNpbmNlIHdlIHN0aWxsIHdhbnQgdG8gc2VlIHRoZSB0ZXh0IGFuZCBpbWFnZSBvdXRwdXQu
CisgICAgICAgICAgICByZXR1cm4gVGVzdFJlc3VsdChzZWxmLl90ZXN0X25hbWUsIGZhaWx1cmVz
LCBkcml2ZXJfb3V0cHV0LnRlc3RfdGltZSwgZHJpdmVyX291dHB1dC5oYXNfc3RkZXJyKCkpCisK
KyAgICAgICAgZmFpbHVyZXMuZXh0ZW5kKHNlbGYuX2NvbXBhcmVfdGV4dChkcml2ZXJfb3V0cHV0
LnRleHQsIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQudGV4dCkpCisgICAgICAgIGZhaWx1cmVzLmV4
dGVuZChzZWxmLl9jb21wYXJlX2F1ZGlvKGRyaXZlcl9vdXRwdXQuYXVkaW8sIGV4cGVjdGVkX2Ry
aXZlcl9vdXRwdXQuYXVkaW8pKQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3Rz
OgorICAgICAgICAgICAgZmFpbHVyZXMuZXh0ZW5kKHNlbGYuX2NvbXBhcmVfaW1hZ2UoZHJpdmVy
X291dHB1dCwgZXhwZWN0ZWRfZHJpdmVyX291dHB1dCkpCisgICAgICAgIHJldHVybiBUZXN0UmVz
dWx0KHNlbGYuX3Rlc3RfbmFtZSwgZmFpbHVyZXMsIGRyaXZlcl9vdXRwdXQudGVzdF90aW1lLCBk
cml2ZXJfb3V0cHV0Lmhhc19zdGRlcnIoKSkKKworICAgIGRlZiBfY29tcGFyZV90ZXh0KHNlbGYs
IGFjdHVhbF90ZXh0LCBleHBlY3RlZF90ZXh0KToKKyAgICAgICAgZmFpbHVyZXMgPSBbXQorICAg
ICAgICBpZiAoZXhwZWN0ZWRfdGV4dCBhbmQgYWN0dWFsX3RleHQgYW5kCisgICAgICAgICAgICAj
IEFzc3VtaW5nIGV4cGVjdGVkX3RleHQgaXMgYWxyZWFkeSBub3JtYWxpemVkLgorICAgICAgICAg
ICAgc2VsZi5fcG9ydC5jb21wYXJlX3RleHQoc2VsZi5fZ2V0X25vcm1hbGl6ZWRfb3V0cHV0X3Rl
eHQoYWN0dWFsX3RleHQpLCBleHBlY3RlZF90ZXh0KSk6CisgICAgICAgICAgICBmYWlsdXJlcy5h
cHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlVGV4dE1pc21hdGNoKCkpCisgICAgICAgIGVsaWYg
YWN0dWFsX3RleHQgYW5kIG5vdCBleHBlY3RlZF90ZXh0OgorICAgICAgICAgICAgZmFpbHVyZXMu
YXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdSZXN1bHQoKSkKKyAgICAgICAgcmV0
dXJuIGZhaWx1cmVzCisKKyAgICBkZWYgX2NvbXBhcmVfYXVkaW8oc2VsZiwgYWN0dWFsX2F1ZGlv
LCBleHBlY3RlZF9hdWRpbyk6CisgICAgICAgIGZhaWx1cmVzID0gW10KKyAgICAgICAgaWYgKGV4
cGVjdGVkX2F1ZGlvIGFuZCBhY3R1YWxfYXVkaW8gYW5kCisgICAgICAgICAgICBzZWxmLl9wb3J0
LmNvbXBhcmVfYXVkaW8oYWN0dWFsX2F1ZGlvLCBleHBlY3RlZF9hdWRpbykpOgorICAgICAgICAg
ICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUF1ZGlvTWlzbWF0Y2goKSkK
KyAgICAgICAgZWxpZiBhY3R1YWxfYXVkaW8gYW5kIG5vdCBleHBlY3RlZF9hdWRpbzoKKyAgICAg
ICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNzaW5nQXVkaW8o
KSkKKyAgICAgICAgcmV0dXJuIGZhaWx1cmVzCisKKyAgICBkZWYgX2dldF9ub3JtYWxpemVkX291
dHB1dF90ZXh0KHNlbGYsIG91dHB1dCk6CisgICAgICAgICIiIlJldHVybnMgdGhlIG5vcm1hbGl6
ZWQgdGV4dCBvdXRwdXQsIGkuZS4gdGhlIG91dHB1dCBpbiB3aGljaAorICAgICAgICB0aGUgZW5k
LW9mLWxpbmUgY2hhcmFjdGVycyBhcmUgbm9ybWFsaXplZCB0byAiXG4iLiIiIgorICAgICAgICAj
IFJ1bm5pbmcgdGVzdHMgb24gV2luZG93cyBwcm9kdWNlcyAiXHJcbiIuICBUaGUgIlxuIiBwYXJ0
IGlzIGhlbHBmdWxseQorICAgICAgICAjIGNoYW5nZWQgdG8gIlxyXG4iIGJ5IG91ciBzeXN0ZW0g
KFB5dGhvbi9DeWd3aW4pLCByZXN1bHRpbmcgaW4KKyAgICAgICAgIyAiXHJcclxuIiwgd2hlbiwg
aW4gZmFjdCwgd2Ugd2FudGVkIHRvIGNvbXBhcmUgdGhlIHRleHQgb3V0cHV0IHdpdGgKKyAgICAg
ICAgIyB0aGUgbm9ybWFsaXplZCB0ZXh0IGV4cGVjdGF0aW9uIGZpbGVzLgorICAgICAgICByZXR1
cm4gb3V0cHV0LnJlcGxhY2UoIlxyXHJcbiIsICJcclxuIikucmVwbGFjZSgiXHJcbiIsICJcbiIp
CisKKyAgICAjIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGFsc28gY3JlYXRlcyB0aGUgaW1hZ2UgZGlm
Zi4gTWF5YmUgdGhhdCB3b3JrIHNob3VsZAorICAgICMgYmUgaGFuZGxlZCBlbHNld2hlcmU/Cisg
ICAgZGVmIF9jb21wYXJlX2ltYWdlKHNlbGYsIGRyaXZlcl9vdXRwdXQsIGV4cGVjdGVkX2RyaXZl
cl9vdXRwdXQpOgorICAgICAgICBmYWlsdXJlcyA9IFtdCisgICAgICAgICMgSWYgd2UgZGlkbid0
IHByb2R1Y2UgYSBoYXNoIGZpbGUsIHRoaXMgdGVzdCBtdXN0IGJlIHRleHQtb25seS4KKyAgICAg
ICAgaWYgZHJpdmVyX291dHB1dC5pbWFnZV9oYXNoIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1
cm4gZmFpbHVyZXMKKyAgICAgICAgaWYgbm90IGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQuaW1hZ2U6
CisgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlzc2lu
Z0ltYWdlKCkpCisgICAgICAgIGVsaWYgbm90IGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQuaW1hZ2Vf
aGFzaDoKKyAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVN
aXNzaW5nSW1hZ2VIYXNoKCkpCisgICAgICAgIGVsaWYgZHJpdmVyX291dHB1dC5pbWFnZV9oYXNo
ICE9IGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQuaW1hZ2VfaGFzaDoKKyAgICAgICAgICAgIGRyaXZl
cl9vdXRwdXQuaW1hZ2VfZGlmZiA9IHNlbGYuX3BvcnQuZGlmZl9pbWFnZShkcml2ZXJfb3V0cHV0
LmltYWdlLCBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LmltYWdlKQorICAgICAgICAgICAgaWYgZHJp
dmVyX291dHB1dC5pbWFnZV9kaWZmOgorICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0
ZXN0X2ZhaWx1cmVzLkZhaWx1cmVJbWFnZUhhc2hNaXNtYXRjaCgpKQorICAgICAgICByZXR1cm4g
ZmFpbHVyZXMKKworICAgIGRlZiBfcnVuX3JlZnRlc3Qoc2VsZik6CisgICAgICAgIGRyaXZlcl9v
dXRwdXQxID0gc2VsZi5fZHJpdmVyLnJ1bl90ZXN0KHNlbGYuX2RyaXZlcl9pbnB1dCgpKQorICAg
ICAgICByZWZlcmVuY2VfdGVzdF9uYW1lID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVu
YW1lKHNlbGYuX3JlZmVyZW5jZV9maWxlbmFtZSkKKyAgICAgICAgZHJpdmVyX291dHB1dDIgPSBz
ZWxmLl9kcml2ZXIucnVuX3Rlc3QoRHJpdmVySW5wdXQocmVmZXJlbmNlX3Rlc3RfbmFtZSwgc2Vs
Zi5fdGltZW91dCwgZHJpdmVyX291dHB1dDEuaW1hZ2VfaGFzaCkpCisgICAgICAgIHRlc3RfcmVz
dWx0ID0gc2VsZi5fY29tcGFyZV9vdXRwdXRfd2l0aF9yZWZlcmVuY2UoZHJpdmVyX291dHB1dDEs
IGRyaXZlcl9vdXRwdXQyKQorCisgICAgICAgIHRlc3RfcmVzdWx0X3dyaXRlci53cml0ZV90ZXN0
X3Jlc3VsdChzZWxmLl9wb3J0LCBzZWxmLl90ZXN0X25hbWUsIGRyaXZlcl9vdXRwdXQxLCBkcml2
ZXJfb3V0cHV0MiwgdGVzdF9yZXN1bHQuZmFpbHVyZXMpCisgICAgICAgIHJldHVybiB0ZXN0X3Jl
c3VsdAorCisgICAgZGVmIF9jb21wYXJlX291dHB1dF93aXRoX3JlZmVyZW5jZShzZWxmLCBkcml2
ZXJfb3V0cHV0MSwgZHJpdmVyX291dHB1dDIpOgorICAgICAgICB0b3RhbF90ZXN0X3RpbWUgPSBk
cml2ZXJfb3V0cHV0MS50ZXN0X3RpbWUgKyBkcml2ZXJfb3V0cHV0Mi50ZXN0X3RpbWUKKyAgICAg
ICAgaGFzX3N0ZGVyciA9IGRyaXZlcl9vdXRwdXQxLmhhc19zdGRlcnIoKSBvciBkcml2ZXJfb3V0
cHV0Mi5oYXNfc3RkZXJyKCkKKyAgICAgICAgZmFpbHVyZXMgPSBbXQorICAgICAgICBmYWlsdXJl
cy5leHRlbmQoc2VsZi5faGFuZGxlX2Vycm9yKGRyaXZlcl9vdXRwdXQxKSkKKyAgICAgICAgaWYg
ZmFpbHVyZXM6CisgICAgICAgICAgICAjIERvbid0IGNvbnRpbnVlIGFueSBtb3JlIGlmIHdlIGFs
cmVhZHkgaGF2ZSBjcmFzaCBvciB0aW1lb3V0LgorICAgICAgICAgICAgcmV0dXJuIFRlc3RSZXN1
bHQoc2VsZi5fdGVzdF9uYW1lLCBmYWlsdXJlcywgdG90YWxfdGVzdF90aW1lLCBoYXNfc3RkZXJy
KQorICAgICAgICBmYWlsdXJlcy5leHRlbmQoc2VsZi5faGFuZGxlX2Vycm9yKGRyaXZlcl9vdXRw
dXQyLCByZWZlcmVuY2VfZmlsZW5hbWU9c2VsZi5fcmVmZXJlbmNlX2ZpbGVuYW1lKSkKKyAgICAg
ICAgaWYgZmFpbHVyZXM6CisgICAgICAgICAgICByZXR1cm4gVGVzdFJlc3VsdChzZWxmLl90ZXN0
X25hbWUsIGZhaWx1cmVzLCB0b3RhbF90ZXN0X3RpbWUsIGhhc19zdGRlcnIpCisKKyAgICAgICAg
aWYgc2VsZi5faXNfbWlzbWF0Y2hfcmVmdGVzdDoKKyAgICAgICAgICAgIGlmIGRyaXZlcl9vdXRw
dXQxLmltYWdlX2hhc2ggPT0gZHJpdmVyX291dHB1dDIuaW1hZ2VfaGFzaDoKKyAgICAgICAgICAg
ICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlUmVmdGVzdE1pc21hdGNo
RGlkTm90T2NjdXIoKSkKKyAgICAgICAgZWxpZiBkcml2ZXJfb3V0cHV0MS5pbWFnZV9oYXNoICE9
IGRyaXZlcl9vdXRwdXQyLmltYWdlX2hhc2g6CisgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQo
dGVzdF9mYWlsdXJlcy5GYWlsdXJlUmVmdGVzdE1pc21hdGNoKCkpCisgICAgICAgIHJldHVybiBU
ZXN0UmVzdWx0KHNlbGYuX3Rlc3RfbmFtZSwgZmFpbHVyZXMsIHRvdGFsX3Rlc3RfdGltZSwgaGFz
X3N0ZGVycikKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRy
b2xsZXJzL3dvcmtlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9jb250cm9sbGVycy93b3JrZXIucHkJKHJldmlzaW9uIDkwNTIwKQkoZnJvbSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93b3JrZXIu
cHk6OTA1MjApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9s
bGVycy93b3JrZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjcgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisiIiJIYW5kbGUgbWVzc2FnZXMgZnJvbSB0aGUgTWFuYWdlciBhbmQgZXhlY3V0
ZXMgYWN0dWFsIHRlc3RzLiIiIgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN5cworaW1wb3J0
IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2ltcG9ydCB0cmFjZWJhY2sKKworZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtIGltcG9ydCBzdGFja191dGlscworZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1hbmFnZXJfd29ya2VyX2Jyb2tlcgorZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHNpbmdsZV90ZXN0X3J1
bm5lcgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRl
c3RfZXhwZWN0YXRpb25zCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2Fn
ZSBpbXBvcnQgdGVzdF9yZXN1bHRzCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVf
XykKKworCitjbGFzcyBXb3JrZXIobWFuYWdlcl93b3JrZXJfYnJva2VyLkFic3RyYWN0V29ya2Vy
KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd29ya2VyX2Nvbm5lY3Rpb24sIHdvcmtlcl9udW1i
ZXIsIG9wdGlvbnMpOgorICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbiA9IHdvcmtlcl9j
b25uZWN0aW9uCisgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIgPSB3b3JrZXJfbnVtYmVyCisg
ICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX25hbWUgPSAnd29y
a2VyLyVkJyAlIHdvcmtlcl9udW1iZXIKKyAgICAgICAgc2VsZi5fZG9uZSA9IEZhbHNlCisgICAg
ICAgIHNlbGYuX2NhbmNlbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fcG9ydCA9IE5vbmUKKwor
ICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBzZWxmLmNsZWFudXAoKQorCisgICAgZGVm
IHNhZmVfaW5pdChzZWxmLCBwb3J0KToKKyAgICAgICAgIiIiVGhpcyBtZXRob2Qgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIHdoZW4gaXQgaXMgaXMgc2FmZSBmb3IgdGhlIG1peGluCisgICAgICAgIHRv
IGNyZWF0ZSBzdGF0ZSB0aGF0IGNhbid0IGJlIFBpY2tsZWQuCisKKyAgICAgICAgVGhpcyByb3V0
aW5lIGV4aXN0cyBzbyB0aGF0IHRoZSBtaXhpbiBjYW4gYmUgY3JlYXRlZCBhbmQgdGhlbiBtYXJz
aGFsZWQKKyAgICAgICAgYWNyb3NzIGludG8gYSBjaGlsZCBwcm9jZXNzLiIiIgorICAgICAgICBz
ZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gcG9ydC5fZmlsZXN5
c3RlbQorICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCA9IDAKKyAgICAgICAgc2VsZi5fYmF0Y2hf
c2l6ZSA9IHNlbGYuX29wdGlvbnMuYmF0Y2hfc2l6ZQorICAgICAgICBzZWxmLl9kcml2ZXIgPSBO
b25lCisgICAgICAgIHRlc3RzX3J1bl9maWxlbmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihw
b3J0LnJlc3VsdHNfZGlyZWN0b3J5KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAidGVzdHNfcnVuJWQudHh0IiAlIHNlbGYuX3dvcmtlcl9udW1i
ZXIpCisgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlID0gc2VsZi5fZmlsZXN5c3RlbS5vcGVu
X3RleHRfZmlsZV9mb3Jfd3JpdGluZyh0ZXN0c19ydW5fZmlsZW5hbWUpCisKKyAgICBkZWYgY2Fu
Y2VsKHNlbGYpOgorICAgICAgICAiIiJBdHRlbXB0IHRvIGFib3J0IHByb2Nlc3NpbmcgKGJlc3Qg
ZWZmb3J0KS4iIiIKKyAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBUcnVlCisKKyAgICBkZWYgaXNf
ZG9uZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbmUgb3Igc2VsZi5fY2FuY2VsZWQK
KworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCisgICAg
ZGVmIHJ1bihzZWxmLCBwb3J0KToKKyAgICAgICAgc2VsZi5zYWZlX2luaXQocG9ydCkKKworICAg
ICAgICBleGNlcHRpb25fbXNnID0gIiIKKyAgICAgICAgX2xvZy5kZWJ1ZygiJXMgc3RhcnRpbmci
ICUgc2VsZi5fbmFtZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl93b3JrZXJf
Y29ubmVjdGlvbi5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmlz
X2RvbmUoKToKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiJXM6IHJhbiBv
dXQgb2YgbWVzc2FnZXMgaW4gd29ya2VyIHF1ZXVlLiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAlIHNlbGYuX25hbWUpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVy
cnVwdDoKKyAgICAgICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiLCBpbnRlcnJ1cHRlZCIKKyAgICAg
ICAgICAgIHNlbGYucG9zdF9leGNlcHRpb24oKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAg
ICBleGNlcHRpb25fbXNnID0gIiwgZXhjZXB0aW9uIHJhaXNlZCIKKyAgICAgICAgICAgIHNlbGYu
cG9zdF9leGNlcHRpb24oKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgX2xvZy5kZWJ1
ZygiJXMgZG9uZSB3aXRoIG1lc3NhZ2UgbG9vcCVzIiAlIChzZWxmLl9uYW1lLCBleGNlcHRpb25f
bXNnKSkKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgn
ZG9uZScpCisgICAgICAgICAgICBzZWxmLmNsZWFudXAoKQorICAgICAgICAgICAgX2xvZy5kZWJ1
ZygiJXMgZXhpdGluZyIgJSBzZWxmLl9uYW1lKQorCisgICAgZGVmIHBvc3RfZXhjZXB0aW9uKHNl
bGYpOgorICAgICAgICAjIFNpbmNlIHRyYWNlYmFja3MgYXJlbid0IHBpY2tsYWJsZSwgc2VuZCB0
aGUgZXh0cmFjdGVkIHN0YWNrIGluc3RlYWQuCisgICAgICAgIGV4Y2VwdGlvbl90eXBlLCBleGNl
cHRpb25fdmFsdWUsIGV4Y2VwdGlvbl90cmFjZWJhY2sgPSBzeXMuZXhjX2luZm8oKQorICAgICAg
ICBzdGFja191dGlscy5sb2dfdHJhY2ViYWNrKF9sb2cuZGVidWcsIGV4Y2VwdGlvbl90cmFjZWJh
Y2spCisgICAgICAgIHN0YWNrID0gdHJhY2ViYWNrLmV4dHJhY3RfdGIoZXhjZXB0aW9uX3RyYWNl
YmFjaykKKyAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdleGNl
cHRpb24nLCBleGNlcHRpb25fdHlwZSwgZXhjZXB0aW9uX3ZhbHVlLCBzdGFjaykKKworICAgIGRl
ZiBoYW5kbGVfdGVzdF9saXN0KHNlbGYsIHNyYywgbGlzdF9uYW1lLCB0ZXN0X2xpc3QpOgorICAg
ICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgbnVtX3Rlc3RzID0gMAorICAg
ICAgICBmb3IgdGVzdF9pbnB1dCBpbiB0ZXN0X2xpc3Q6CisgICAgICAgICAgICBzZWxmLl9ydW5f
dGVzdCh0ZXN0X2lucHV0KQorICAgICAgICAgICAgbnVtX3Rlc3RzICs9IDEKKyAgICAgICAgICAg
IHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnlpZWxkX3RvX2Jyb2tlcigpCisKKyAgICAgICAgZWxh
cHNlZF90aW1lID0gdGltZS50aW1lKCkgLSBzdGFydF90aW1lCisgICAgICAgIHNlbGYuX3dvcmtl
cl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnZmluaXNoZWRfbGlzdCcsIGxpc3RfbmFtZSwgbnVt
X3Rlc3RzLCBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYgaGFuZGxlX3N0b3Aoc2VsZiwgc3JjKToK
KyAgICAgICAgc2VsZi5fZG9uZSA9IFRydWUKKworICAgIGRlZiBfcnVuX3Rlc3Qoc2VsZiwgdGVz
dF9pbnB1dCk6CisgICAgICAgICMgQmVmb3JlIHJ1bm5pbmcgdGhlIHRlc3QsIHdlIHdhaXQgZm9y
IGFueSBjcmFzaCByZXBvcnRlcnMgdG8gZmluaXNoCisgICAgICAgICMgcnVubmluZy4gT24gTWFj
LCBSZXBvcnRDcmFzaCBjaGV3cyB1cCBhIGJ1bmNoIG9mIHJlc291cmNlcyBhbmQKKyAgICAgICAg
IyBjYXVzZXMgdGhlIHRlc3RzIHRvIGJlY29tZSB1bnN0YWJsZSwgc28gd2UgZG9uJ3Qgd2FudCB0
byBydW4gaW4KKyAgICAgICAgIyBwYXJhbGxlbCB3aXRoIFJlcG9ydENyYXNoLgorICAgICAgICAj
CisgICAgICAgICMgVGVtcG9yYXJpbHkgZGlzYWJsZWQgdG8gc2VlIGhvdyB0aGlzIGNvZGUgZWZm
ZWN0IHBlcmZvcm1hbmNlIG9uIHRoZSBidWlsZGJvdHMuCisgICAgICAgICMgc2VsZi5fcG9ydC5l
eGVjdXRpdmUoKS53YWl0X25ld2VzdChzZWxmLl9wb3J0LmlzX2NyYXNoX3JlcG9ydGVyKQorCisg
ICAgICAgIHRlc3RfdGltZW91dF9zZWMgPSBzZWxmLnRpbWVvdXQodGVzdF9pbnB1dCkKKyAgICAg
ICAgc3RhcnQgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5w
b3N0X21lc3NhZ2UoJ3N0YXJ0ZWRfdGVzdCcsIHRlc3RfaW5wdXQsIHRlc3RfdGltZW91dF9zZWMp
CisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5ydW5fdGVzdF93aXRoX3RpbWVvdXQodGVzdF9pbnB1
dCwgdGVzdF90aW1lb3V0X3NlYykKKworICAgICAgICBlbGFwc2VkX3RpbWUgPSB0aW1lLnRpbWUo
KSAtIHN0YXJ0CisgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgn
ZmluaXNoZWRfdGVzdCcsIHJlc3VsdCwgZWxhcHNlZF90aW1lKQorCisgICAgICAgIHNlbGYuY2xl
YW5fdXBfYWZ0ZXJfdGVzdCh0ZXN0X2lucHV0LCByZXN1bHQpCisKKyAgICBkZWYgY2xlYW51cChz
ZWxmKToKKyAgICAgICAgX2xvZy5kZWJ1ZygiJXMgY2xlYW5pbmcgdXAiICUgc2VsZi5fbmFtZSkK
KyAgICAgICAgc2VsZi5raWxsX2RyaXZlcigpCisgICAgICAgIGlmIHNlbGYuX3Rlc3RzX3J1bl9m
aWxlOgorICAgICAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUuY2xvc2UoKQorICAgICAgICAg
ICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUgPSBOb25lCisKKyAgICBkZWYgdGltZW91dChzZWxmLCB0
ZXN0X2lucHV0KToKKyAgICAgICAgIiIiQ29tcHV0ZSB0aGUgYXBwcm9wcmlhdGUgdGltZW91dCB2
YWx1ZSBmb3IgYSB0ZXN0LiIiIgorICAgICAgICAjIFRoZSBEdW1wUmVuZGVyVHJlZSB3YXRjaGRv
ZyB1c2VzIDIuNXggdGhlIHRpbWVvdXQ7IHdlIHdhbnQgdG8gYmUKKyAgICAgICAgIyBsYXJnZXIg
dGhhbiB0aGF0LiBXZSBhbHNvIGFkZCBhIGxpdHRsZSBtb3JlIHBhZGRpbmcgaWYgd2UncmUKKyAg
ICAgICAgIyBydW5uaW5nIHRlc3RzIGluIGEgc2VwYXJhdGUgdGhyZWFkLgorICAgICAgICAjCisg
ICAgICAgICMgTm90ZSB0aGF0IHdlIG5lZWQgdG8gY29udmVydCB0aGUgdGVzdCB0aW1lb3V0IGZy
b20gYQorICAgICAgICAjIHN0cmluZyB2YWx1ZSBpbiBtaWxsaXNlY29uZHMgdG8gYSBmbG9hdCBm
b3IgUHl0aG9uLgorICAgICAgICBkcml2ZXJfdGltZW91dF9zZWMgPSAzLjAgKiBmbG9hdCh0ZXN0
X2lucHV0LnRpbWVvdXQpIC8gMTAwMC4wCisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLnJ1
bl9zaW5nbHk6CisgICAgICAgICAgICByZXR1cm4gZHJpdmVyX3RpbWVvdXRfc2VjCisKKyAgICAg
ICAgdGhyZWFkX3BhZGRpbmdfc2VjID0gMS4wCisgICAgICAgIHRocmVhZF90aW1lb3V0X3NlYyA9
IGRyaXZlcl90aW1lb3V0X3NlYyArIHRocmVhZF9wYWRkaW5nX3NlYworICAgICAgICByZXR1cm4g
dGhyZWFkX3RpbWVvdXRfc2VjCisKKyAgICBkZWYga2lsbF9kcml2ZXIoc2VsZik6CisgICAgICAg
IGlmIHNlbGYuX2RyaXZlcjoKKyAgICAgICAgICAgIHNlbGYuX2RyaXZlci5zdG9wKCkKKyAgICAg
ICAgICAgIHNlbGYuX2RyaXZlciA9IE5vbmUKKworICAgIGRlZiBydW5fdGVzdF93aXRoX3RpbWVv
dXQoc2VsZiwgdGVzdF9pbnB1dCwgdGltZW91dCk6CisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMu
cnVuX3NpbmdseToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9ydW5fdGVzdF9pbl9hbm90aGVy
X3RocmVhZCh0ZXN0X2lucHV0LCB0aW1lb3V0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
cmV0dXJuIHNlbGYuX3J1bl90ZXN0X2luX3RoaXNfdGhyZWFkKHRlc3RfaW5wdXQpCisgICAgICAg
IHJldHVybiByZXN1bHQKKworICAgIGRlZiBjbGVhbl91cF9hZnRlcl90ZXN0KHNlbGYsIHRlc3Rf
aW5wdXQsIHJlc3VsdCk6CisgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ICs9IDEKKyAgICAgICAg
dGVzdF9uYW1lID0gdGVzdF9pbnB1dC50ZXN0X25hbWUKKyAgICAgICAgc2VsZi5fdGVzdHNfcnVu
X2ZpbGUud3JpdGUodGVzdF9uYW1lICsgIlxuIikKKworICAgICAgICBpZiByZXN1bHQuZmFpbHVy
ZXM6CisgICAgICAgICAgICAjIENoZWNrIGFuZCBraWxsIER1bXBSZW5kZXJUcmVlIGlmIHdlIG5l
ZWQgdG8uCisgICAgICAgICAgICBpZiBhbnkoW2YuZHJpdmVyX25lZWRzX3Jlc3RhcnQoKSBmb3Ig
ZiBpbiByZXN1bHQuZmFpbHVyZXNdKToKKyAgICAgICAgICAgICAgICBzZWxmLmtpbGxfZHJpdmVy
KCkKKyAgICAgICAgICAgICAgICAjIFJlc2V0IHRoZSBiYXRjaCBjb3VudCBzaW5jZSB0aGUgc2hl
bGwganVzdCBib3VuY2VkLgorICAgICAgICAgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0gMAor
CisgICAgICAgICAgICAjIFByaW50IHRoZSBlcnJvciBtZXNzYWdlKHMpLgorICAgICAgICAgICAg
X2xvZy5kZWJ1ZygiJXMgJXMgZmFpbGVkOiIgJSAoc2VsZi5fbmFtZSwgdGVzdF9uYW1lKSkKKyAg
ICAgICAgICAgIGZvciBmIGluIHJlc3VsdC5mYWlsdXJlczoKKyAgICAgICAgICAgICAgICBfbG9n
LmRlYnVnKCIlcyAgJXMiICUgKHNlbGYuX25hbWUsIGYubWVzc2FnZSgpKSkKKyAgICAgICAgZWxp
ZiByZXN1bHQudHlwZSA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5TS0lQOgorICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygiJXMgJXMgc2tpcHBlZCIgJSAoc2VsZi5fbmFtZSwgdGVzdF9uYW1lKSkKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICVzIHBhc3NlZCIgJSAoc2VsZi5f
bmFtZSwgdGVzdF9uYW1lKSkKKworICAgICAgICBpZiBzZWxmLl9iYXRjaF9zaXplID4gMCBhbmQg
c2VsZi5fYmF0Y2hfY291bnQgPj0gc2VsZi5fYmF0Y2hfc2l6ZToKKyAgICAgICAgICAgICMgQm91
bmNlIHRoZSBzaGVsbCBhbmQgcmVzZXQgY291bnQuCisgICAgICAgICAgICBzZWxmLmtpbGxfZHJp
dmVyKCkKKyAgICAgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0gMAorCisgICAgZGVmIF9ydW5f
dGVzdF9pbl9hbm90aGVyX3RocmVhZChzZWxmLCB0ZXN0X2lucHV0LCB0aHJlYWRfdGltZW91dF9z
ZWMpOgorICAgICAgICAiIiJSdW4gYSB0ZXN0IGluIGEgc2VwYXJhdGUgdGhyZWFkLCBlbmZvcmNp
bmcgYSBoYXJkIHRpbWUgbGltaXQuCisKKyAgICAgICAgU2luY2Ugd2UgY2FuIG9ubHkgZGV0ZWN0
IHRoZSB0ZXJtaW5hdGlvbiBvZiBhIHRocmVhZCwgbm90IGFueSBpbnRlcm5hbAorICAgICAgICBz
dGF0ZSBvciBwcm9ncmVzcywgd2UgY2FuIG9ubHkgcnVuIHBlci10ZXN0IHRpbWVvdXRzIHdoZW4g
cnVubmluZyB0ZXN0CisgICAgICAgIGZpbGVzIHNpbmdseS4KKworICAgICAgICBBcmdzOgorICAg
ICAgICAgIHRlc3RfaW5wdXQ6IE9iamVjdCBjb250YWluaW5nIHRoZSB0ZXN0IGZpbGVuYW1lIGFu
ZCB0aW1lb3V0CisgICAgICAgICAgdGhyZWFkX3RpbWVvdXRfc2VjOiB0aW1lIHRvIHdhaXQgYmVm
b3JlIGtpbGxpbmcgdGhlIGRyaXZlciBwcm9jZXNzLgorICAgICAgICBSZXR1cm5zOgorICAgICAg
ICAgIEEgVGVzdFJlc3VsdAorICAgICAgICAiIiIKKyAgICAgICAgd29ya2VyID0gc2VsZgorCisg
ICAgICAgIGRyaXZlciA9IHdvcmtlci5fcG9ydC5jcmVhdGVfZHJpdmVyKHdvcmtlci5fd29ya2Vy
X251bWJlcikKKyAgICAgICAgZHJpdmVyLnN0YXJ0KCkKKworICAgICAgICBjbGFzcyBTaW5nbGVU
ZXN0VGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorICAgICAgICAgICAgZGVmIHJ1bihzZWxmKToK
KyAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IHdvcmtlci5fcnVuX3NpbmdsZV90ZXN0KGRy
aXZlciwgdGVzdF9pbnB1dCkKKworICAgICAgICB0aHJlYWQgPSBTaW5nbGVUZXN0VGhyZWFkKCkK
KyAgICAgICAgdGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgdGhyZWFkLmpvaW4odGhyZWFkX3RpbWVv
dXRfc2VjKQorICAgICAgICByZXN1bHQgPSBnZXRhdHRyKHRocmVhZCwgJ3Jlc3VsdCcsIE5vbmUp
CisgICAgICAgIGlmIHRocmVhZC5pc0FsaXZlKCk6CisgICAgICAgICAgICAjIElmIGpvaW4oKSBy
ZXR1cm5lZCB3aXRoIHRoZSB0aHJlYWQgc3RpbGwgcnVubmluZywgdGhlCisgICAgICAgICAgICAj
IER1bXBSZW5kZXJUcmVlIGlzIGNvbXBsZXRlbHkgaHVuZyBhbmQgdGhlcmUncyBub3RoaW5nCisg
ICAgICAgICAgICAjIG1vcmUgd2UgY2FuIGRvIHdpdGggaXQuICBXZSBoYXZlIHRvIGtpbGwgYWxs
IHRoZQorICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJlZXMgdG8gZnJlZSBpdCB1cC4gSWYgd2Un
cmUgcnVubmluZyBtb3JlIHRoYW4KKyAgICAgICAgICAgICMgb25lIER1bXBSZW5kZXJUcmVlIHRo
cmVhZCwgd2UnbGwgZW5kIHVwIGtpbGxpbmcgdGhlIG90aGVyCisgICAgICAgICAgICAjIER1bXBS
ZW5kZXJUcmVlcyB0b28sIGludHJvZHVjaW5nIHNwdXJpb3VzIGNyYXNoZXMuIFdlIGFjY2VwdAor
ICAgICAgICAgICAgIyB0aGF0IHRyYWRlb2ZmIGluIG9yZGVyIHRvIGF2b2lkIGxvc2luZyB0aGUg
cmVzdCBvZiB0aGlzCisgICAgICAgICAgICAjIHRocmVhZCdzIHJlc3VsdHMuCisgICAgICAgICAg
ICBfbG9nLmVycm9yKCdUZXN0IHRocmVhZCBodW5nOiBraWxsaW5nIGFsbCBEdW1wUmVuZGVyVHJl
ZXMnKQorCisgICAgICAgIGRyaXZlci5zdG9wKCkKKworICAgICAgICBpZiBub3QgcmVzdWx0Ogor
ICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9yZXN1bHRzLlRlc3RSZXN1bHQodGVzdF9pbnB1dC50
ZXN0X25hbWUsIGZhaWx1cmVzPVtdLCB0ZXN0X3J1bl90aW1lPTApCisgICAgICAgIHJldHVybiBy
ZXN1bHQKKworICAgIGRlZiBfcnVuX3Rlc3RfaW5fdGhpc190aHJlYWQoc2VsZiwgdGVzdF9pbnB1
dCk6CisgICAgICAgICIiIlJ1biBhIHNpbmdsZSB0ZXN0IGZpbGUgdXNpbmcgYSBzaGFyZWQgRHVt
cFJlbmRlclRyZWUgcHJvY2Vzcy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHRlc3RfaW5w
dXQ6IE9iamVjdCBjb250YWluaW5nIHRoZSB0ZXN0IGZpbGVuYW1lLCB1cmkgYW5kIHRpbWVvdXQK
KworICAgICAgICBSZXR1cm5zOiBhIFRlc3RSZXN1bHQgb2JqZWN0LgorICAgICAgICAiIiIKKyAg
ICAgICAgaWYgbm90IHNlbGYuX2RyaXZlciBvciBzZWxmLl9kcml2ZXIucG9sbCgpIGlzIG5vdCBO
b25lOgorICAgICAgICAgICAgc2VsZi5fZHJpdmVyID0gc2VsZi5fcG9ydC5jcmVhdGVfZHJpdmVy
KHNlbGYuX3dvcmtlcl9udW1iZXIpCisgICAgICAgICAgICBzZWxmLl9kcml2ZXIuc3RhcnQoKQor
ICAgICAgICByZXR1cm4gc2VsZi5fcnVuX3NpbmdsZV90ZXN0KHNlbGYuX2RyaXZlciwgdGVzdF9p
bnB1dCkKKworICAgIGRlZiBfcnVuX3NpbmdsZV90ZXN0KHNlbGYsIGRyaXZlciwgdGVzdF9pbnB1
dCk6CisgICAgICAgIHJldHVybiBzaW5nbGVfdGVzdF9ydW5uZXIucnVuX3NpbmdsZV90ZXN0KHNl
bGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsCisgICAgICAgICAgICB0ZXN0X2lucHV0LCBkcml2ZXIs
IHNlbGYuX25hbWUpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9j
b250cm9sbGVycy93b3JrZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvd29ya2VyLnB5CShyZXZpc2lvbiAwKQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvd29ya2VyLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4IEBAIGltcG9ydCB0aW1lCiBpbXBvcnQgdHJhY2Vi
YWNrCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgc3RhY2tfdXRpbHMKLWZy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBtYW5hZ2VyX3dv
cmtlcl9icm9rZXIKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGlt
cG9ydCBzaW5nbGVfdGVzdF9ydW5uZXIKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmNvbnRy
b2xsZXJzIGltcG9ydCBtYW5hZ2VyX3dvcmtlcl9icm9rZXIKK2Zyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLmNvbnRyb2xsZXJzIGltcG9ydCBzaW5nbGVfdGVzdF9ydW5uZXIKIGZyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucwog
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfcmVz
dWx0cwogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9tYW5hZ2VyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXIucHkJKHJldmlzaW9uIDkwNTIwKQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFu
YWdlci5weQkod29ya2luZyBjb3B5KQpAQCAtMSwxNTIxICswLDAgQEAKLSMhL3Vzci9iaW4vZW52
IHB5dGhvbgotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdhYm9yIFJhcGNzYW55aSAocmdhYm9yQGluZi51
LXN6ZWdlZC5odSksIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0i
IiIKLVRoZSBNYW5hZ2VyIHJ1bnMgYSBzZXJpZXMgb2YgdGVzdHMgKFRlc3RUeXBlIGludGVyZmFj
ZSkgYWdhaW5zdCBhIHNldAotb2YgdGVzdCBmaWxlcy4gIElmIGEgdGVzdCBmaWxlIGZhaWxzIGEg
VGVzdFR5cGUsIGl0IHJldHVybnMgYSBsaXN0IG9mIFRlc3RGYWlsdXJlCi1vYmplY3RzIHRvIHRo
ZSBNYW5hZ2VyLiBUaGUgTWFuYWdlciB0aGVuIGFnZ3JlZ2F0ZXMgdGhlIFRlc3RGYWlsdXJlcyB0
bwotY3JlYXRlIGEgZmluYWwgcmVwb3J0LgotIiIiCi0KLWZyb20gX19mdXR1cmVfXyBpbXBvcnQg
d2l0aF9zdGF0ZW1lbnQKLQotaW1wb3J0IGNvcHkKLWltcG9ydCBlcnJubwotaW1wb3J0IGxvZ2dp
bmcKLWltcG9ydCBtYXRoCi1pbXBvcnQgUXVldWUKLWltcG9ydCByYW5kb20KLWltcG9ydCByZQot
aW1wb3J0IHN5cwotaW1wb3J0IHRpbWUKLQotZnJvbSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQg
aW1wb3J0IHNjbQotCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBp
bXBvcnQganNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IKLWZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yCi1mcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgbWFuYWdlcl93b3Jr
ZXJfYnJva2VyCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBv
cnQgcHJpbnRpbmcKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGlt
cG9ydCB0ZXN0X2V4cGVjdGF0aW9ucwotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0
X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X3Jlc3VsdHMKLWZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X3Jlc3VsdHNfdXBsb2FkZXIKLWZyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB3b3JrZXIKLQotZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UucmVzdWx0X3N1bW1hcnkgaW1w
b3J0IFJlc3VsdFN1bW1hcnkKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNr
YWdlLnRlc3RfaW5wdXQgaW1wb3J0IFRlc3RJbnB1dAotCi1mcm9tIHdlYmtpdHB5LnRoaXJkcGFy
dHkgaW1wb3J0IHNpbXBsZWpzb24KLWZyb20gd2Via2l0cHkudG9vbCBpbXBvcnQgZ3JhbW1hcgot
Ci1fbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLSMgQnVpbGRlciBiYXNlIFVS
TCB3aGVyZSB3ZSBoYXZlIHRoZSBhcmNoaXZlZCB0ZXN0IHJlc3VsdHMuCi1CVUlMREVSX0JBU0Vf
VVJMID0gImh0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvYnVpbGRib3QvbGF5b3V0X3Rlc3RfcmVz
dWx0cy8iCi0KLVRlc3RFeHBlY3RhdGlvbnMgPSB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhwZWN0
YXRpb25zCi0KLQotIyBGSVhNRTogVGhpcyBzaG91bGQgYmUgb24gdGhlIE1hbmFnZXIgY2xhc3Mg
KHNpbmNlIHRoYXQncyB0aGUgb25seSBjYWxsZXIpCi0jIG9yIHNwbGl0IG9mZiBmcm9tIE1hbmFn
ZXIgb250byBhbm90aGVyIGhlbHBlciBjbGFzcywgYnV0IHNob3VsZCBub3QgYmUgYSBmcmVlIGZ1
bmN0aW9uLgotIyBNb3N0IGxpa2VseSB0aGlzIHNob3VsZCBiZSBtYWRlIGludG8gaXRzIG93biBj
bGFzcywgYW5kIHRoaXMgc3VwZXItbG9uZyBmdW5jdGlvbgotIyBzcGxpdCBpbnRvIG1hbnkgaGVs
cGVyIGZ1bmN0aW9ucy4KLWRlZiBzdW1tYXJpemVfcmVzdWx0cyhwb3J0X29iaiwgZXhwZWN0YXRp
b25zLCByZXN1bHRfc3VtbWFyeSwgcmV0cnlfc3VtbWFyeSwgdGVzdF90aW1pbmdzLCBvbmx5X3Vu
ZXhwZWN0ZWQsIGludGVycnVwdGVkKToKLSAgICAiIiJTdW1tYXJpemUgZmFpbGluZyByZXN1bHRz
IGFzIGEgZGljdC4KLQotICAgIEZJWE1FOiBzcGxpdCB0aGlzIGRhdGEgc3RydWN0dXJlIGludG8g
YSBzZXBhcmF0ZSBjbGFzcz8KLQotICAgIEFyZ3M6Ci0gICAgICAgIHBvcnRfb2JqOiBpbnRlcmZh
Y2UgdG8gcG9ydC1zcGVjaWZpYyBob29rcwotICAgICAgICBleHBlY3RhdGlvbnM6IHRlc3RfZXhw
ZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvbnMgb2JqZWN0Ci0gICAgICAgIHJlc3VsdF9zdW1tYXJ5
OiBzdW1tYXJ5IG9iamVjdCBmcm9tIGluaXRpYWwgdGVzdCBydW5zCi0gICAgICAgIHJldHJ5X3N1
bW1hcnk6IHN1bW1hcnkgb2JqZWN0IGZyb20gZmluYWwgdGVzdCBydW4gb2YgcmV0cmllZCB0ZXN0
cwotICAgICAgICB0ZXN0X3RpbWluZ3M6IGEgbGlzdCBvZiBUZXN0UmVzdWx0IG9iamVjdHMgd2hp
Y2ggY29udGFpbiB0ZXN0IHJ1bnRpbWVzIGluIHNlY29uZHMKLSAgICAgICAgb25seV91bmV4cGVj
dGVkOiB3aGV0aGVyIHRvIHJldHVybiBhIHN1bW1hcnkgb25seSBmb3IgdGhlIHVuZXhwZWN0ZWQg
cmVzdWx0cwotICAgIFJldHVybnM6Ci0gICAgICAgIEEgZGljdGlvbmFyeSBjb250YWluaW5nIGEg
c3VtbWFyeSBvZiB0aGUgdW5leHBlY3RlZCByZXN1bHRzIGZyb20gdGhlCi0gICAgICAgIHJ1biwg
d2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkczoKLSAgICAgICAgJ3ZlcnNpb24nOiBhIHZlcnNpb24g
aW5kaWNhdG9yCi0gICAgICAgICdmaXhhYmxlJzogIyBvZiBmaXhhYmxlIHRlc3RzIChOT1cgLSBQ
QVNTKQotICAgICAgICAnc2tpcHBlZCc6ICMgb2Ygc2tpcHBlZCB0ZXN0cyAoTk9XICYgU0tJUFBF
RCkKLSAgICAgICAgJ251bV9yZWdyZXNzaW9ucyc6ICMgb2Ygbm9uLWZsYWt5IGZhaWx1cmVzCi0g
ICAgICAgICdudW1fZmxha3knOiAjIG9mIGZsYWt5IGZhaWx1cmVzCi0gICAgICAgICdudW1fcGFz
c2VzJzogIyBvZiB1bmV4cGVjdGVkIHBhc3NlcwotICAgICAgICAndGVzdHMnOiBhIGRpY3Qgb2Yg
dGVzdHMgLT4geydleHBlY3RlZCc6ICcuLi4nLCAnYWN0dWFsJzogJy4uLid9Ci0gICAgIiIiCi0g
ICAgcmVzdWx0cyA9IHt9Ci0gICAgcmVzdWx0c1sndmVyc2lvbiddID0gMwotCi0gICAgdGJlID0g
cmVzdWx0X3N1bW1hcnkudGVzdHNfYnlfZXhwZWN0YXRpb24KLSAgICB0YnQgPSByZXN1bHRfc3Vt
bWFyeS50ZXN0c19ieV90aW1lbGluZQotICAgIHJlc3VsdHNbJ2ZpeGFibGUnXSA9IGxlbih0YnRb
dGVzdF9leHBlY3RhdGlvbnMuTk9XXSAtIHRiZVt0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTXSkKLSAg
ICByZXN1bHRzWydza2lwcGVkJ10gPSBsZW4odGJ0W3Rlc3RfZXhwZWN0YXRpb25zLk5PV10gJiB0
YmVbdGVzdF9leHBlY3RhdGlvbnMuU0tJUF0pCi0KLSAgICBudW1fcGFzc2VzID0gMAotICAgIG51
bV9mbGFreSA9IDAKLSAgICBudW1fcmVncmVzc2lvbnMgPSAwCi0gICAga2V5d29yZHMgPSB7fQot
ICAgIGZvciBleHBlY2F0aW9uX3N0cmluZywgZXhwZWN0YXRpb25fZW51bSBpbiBUZXN0RXhwZWN0
YXRpb25zLkVYUEVDVEFUSU9OUy5pdGVyaXRlbXMoKToKLSAgICAgICAga2V5d29yZHNbZXhwZWN0
YXRpb25fZW51bV0gPSBleHBlY2F0aW9uX3N0cmluZy51cHBlcigpCi0KLSAgICBmb3IgbW9kaWZp
ZXJfc3RyaW5nLCBtb2RpZmllcl9lbnVtIGluIFRlc3RFeHBlY3RhdGlvbnMuTU9ESUZJRVJTLml0
ZXJpdGVtcygpOgotICAgICAgICBrZXl3b3Jkc1ttb2RpZmllcl9lbnVtXSA9IG1vZGlmaWVyX3N0
cmluZy51cHBlcigpCi0KLSAgICB0ZXN0cyA9IHt9Ci0gICAgb3JpZ2luYWxfcmVzdWx0cyA9IHJl
c3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRfcmVzdWx0cyBpZiBvbmx5X3VuZXhwZWN0ZWQgZWxzZSBy
ZXN1bHRfc3VtbWFyeS5yZXN1bHRzCi0KLSAgICBmb3IgdGVzdF9uYW1lLCByZXN1bHQgaW4gb3Jp
Z2luYWxfcmVzdWx0cy5pdGVyaXRlbXMoKToKLSAgICAgICAgIyBOb3RlIHRoYXQgaWYgYSB0ZXN0
IGNyYXNoZWQgaW4gdGhlIG9yaWdpbmFsIHJ1biwgd2UgaWdub3JlCi0gICAgICAgICMgd2hldGhl
ciBvciBub3QgaXQgY3Jhc2hlZCB3aGVuIHdlIHJldHJpZWQgaXQgKGlmIHdlIHJldHJpZWQgaXQp
LAotICAgICAgICAjIGFuZCBhbHdheXMgY29uc2lkZXIgdGhlIHJlc3VsdCBub3QgZmxha3kuCi0g
ICAgICAgIGV4cGVjdGVkID0gZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKHRl
c3RfbmFtZSkKLSAgICAgICAgcmVzdWx0X3R5cGUgPSByZXN1bHQudHlwZQotICAgICAgICBhY3R1
YWwgPSBba2V5d29yZHNbcmVzdWx0X3R5cGVdXQotCi0gICAgICAgIGlmIHJlc3VsdF90eXBlID09
IHRlc3RfZXhwZWN0YXRpb25zLlNLSVA6Ci0gICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAg
IHRlc3RfZGljdCA9IHt9Ci0gICAgICAgIGlmIHJlc3VsdC5oYXNfc3RkZXJyOgotICAgICAgICAg
ICAgdGVzdF9kaWN0WydoYXNfc3RkZXJyJ10gPSBUcnVlCi0KLSAgICAgICAgaWYgcmVzdWx0X3R5
cGUgPT0gdGVzdF9leHBlY3RhdGlvbnMuUEFTUzoKLSAgICAgICAgICAgIG51bV9wYXNzZXMgKz0g
MQotICAgICAgICAgICAgIyBGSVhNRTogaW5jbHVkZSBwYXNzaW5nIHRlc3RzIHRoYXQgaGF2ZSBz
dGRlcnIgb3V0cHV0LgotICAgICAgICAgICAgaWYgZXhwZWN0ZWQgPT0gJ1BBU1MnOgotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGVsaWYgcmVzdWx0X3R5cGUgPT0gdGVzdF9leHBl
Y3RhdGlvbnMuQ1JBU0g6Ci0gICAgICAgICAgICBudW1fcmVncmVzc2lvbnMgKz0gMQotICAgICAg
ICBlbGlmIHRlc3RfbmFtZSBpbiByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHM6Ci0g
ICAgICAgICAgICBpZiB0ZXN0X25hbWUgbm90IGluIHJldHJ5X3N1bW1hcnkudW5leHBlY3RlZF9y
ZXN1bHRzOgotICAgICAgICAgICAgICAgIGFjdHVhbC5leHRlbmQoZXhwZWN0YXRpb25zLmdldF9l
eHBlY3RhdGlvbnNfc3RyaW5nKHRlc3RfbmFtZSkuc3BsaXQoIiAiKSkKLSAgICAgICAgICAgICAg
ICBudW1fZmxha3kgKz0gMQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXRy
eV9yZXN1bHRfdHlwZSA9IHJldHJ5X3N1bW1hcnkudW5leHBlY3RlZF9yZXN1bHRzW3Rlc3RfbmFt
ZV0udHlwZQotICAgICAgICAgICAgICAgIGlmIHJlc3VsdF90eXBlICE9IHJldHJ5X3Jlc3VsdF90
eXBlOgotICAgICAgICAgICAgICAgICAgICBhY3R1YWwuYXBwZW5kKGtleXdvcmRzW3JldHJ5X3Jl
c3VsdF90eXBlXSkKLSAgICAgICAgICAgICAgICAgICAgbnVtX2ZsYWt5ICs9IDEKLSAgICAgICAg
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBudW1fcmVncmVzc2lvbnMgKz0gMQot
Ci0gICAgICAgIHRlc3RfZGljdFsnZXhwZWN0ZWQnXSA9IGV4cGVjdGVkCi0gICAgICAgIHRlc3Rf
ZGljdFsnYWN0dWFsJ10gPSAiICIuam9pbihhY3R1YWwpCi0gICAgICAgICMgRklYTUU6IFNldCB0
aGlzIGNvcnJlY3RseSBvbmNlIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzM3NzM5IGlzIGZpeGVkCi0g
ICAgICAgICMgYW5kIG9ubHkgc2V0IGl0IGlmIHRoZXJlIGFjdHVhbGx5IGlzIHN0ZGVyciBkYXRh
LgotCi0gICAgICAgIGZhaWx1cmVfdHlwZXMgPSBbdHlwZShmKSBmb3IgZiBpbiByZXN1bHQuZmFp
bHVyZXNdCi0gICAgICAgICMgRklYTUU6IGdldCByaWQgb2YgYWxsIHRoaXMgaXNfKiB2YWx1ZXMg
b25jZSB0aGVyZSBpcyBhIDE6MSBtYXAgYmV0d2VlbgotICAgICAgICAjIFRlc3RGYWlsdXJlIHR5
cGUgYW5kIHRlc3RfZXhwZWN0YXRpb25zLkVYUEVDVEFUSU9OLgotICAgICAgICBpZiB0ZXN0X2Zh
aWx1cmVzLkZhaWx1cmVNaXNzaW5nQXVkaW8gaW4gZmFpbHVyZV90eXBlczoKLSAgICAgICAgICAg
IHRlc3RfZGljdFsnaXNfbWlzc2luZ19hdWRpbyddID0gVHJ1ZQotCi0gICAgICAgIGlmIHRlc3Rf
ZmFpbHVyZXMuRmFpbHVyZVJlZnRlc3RNaXNtYXRjaCBpbiBmYWlsdXJlX3R5cGVzOgotICAgICAg
ICAgICAgdGVzdF9kaWN0Wydpc19yZWZ0ZXN0J10gPSBUcnVlCi0KLSAgICAgICAgZm9yIGYgaW4g
cmVzdWx0LmZhaWx1cmVzOgotICAgICAgICAgICAgaWYgJ2lzX3JlZnRlc3QnIGluIHJlc3VsdC5m
YWlsdXJlczoKLSAgICAgICAgICAgICAgICB0ZXN0X2RpY3RbJ2lzX3JlZnRlc3QnXSA9IFRydWUK
LQotICAgICAgICBpZiB0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVSZWZ0ZXN0TWlzbWF0Y2hEaWROb3RP
Y2N1ciBpbiBmYWlsdXJlX3R5cGVzOgotICAgICAgICAgICAgdGVzdF9kaWN0Wydpc19taXNtYXRj
aF9yZWZ0ZXN0J10gPSBUcnVlCi0KLSAgICAgICAgaWYgdGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlz
c2luZ1Jlc3VsdCBpbiBmYWlsdXJlX3R5cGVzOgotICAgICAgICAgICAgdGVzdF9kaWN0Wydpc19t
aXNzaW5nX3RleHQnXSA9IFRydWUKLQotICAgICAgICBpZiB0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVN
aXNzaW5nSW1hZ2UgaW4gZmFpbHVyZV90eXBlcyBvciB0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNz
aW5nSW1hZ2VIYXNoIGluIGZhaWx1cmVfdHlwZXM6Ci0gICAgICAgICAgICB0ZXN0X2RpY3RbJ2lz
X21pc3NpbmdfaW1hZ2UnXSA9IFRydWUKLQotICAgICAgICAjIFN0b3JlIHRlc3QgaGllcmFyY2hp
Y2FsbHkgYnkgZGlyZWN0b3J5LiBlLmcuCi0gICAgICAgICMgZm9vL2Jhci9iYXouaHRtbDogdGVz
dF9kaWN0Ci0gICAgICAgICMgZm9vL2Jhci9iYXoxLmh0bWw6IHRlc3RfZGljdAotICAgICAgICAj
Ci0gICAgICAgICMgYmVjb21lcwotICAgICAgICAjIGZvbzogewotICAgICAgICAjICAgICBiYXI6
IHsKLSAgICAgICAgIyAgICAgICAgIGJhei5odG1sOiB0ZXN0X2RpY3QsCi0gICAgICAgICMgICAg
ICAgICBiYXoxLmh0bWw6IHRlc3RfZGljdAotICAgICAgICAjICAgICB9Ci0gICAgICAgICMgfQot
ICAgICAgICBwYXJ0cyA9IHRlc3RfbmFtZS5zcGxpdCgnLycpCi0gICAgICAgIGN1cnJlbnRfbWFw
ID0gdGVzdHMKLSAgICAgICAgZm9yIGksIHBhcnQgaW4gZW51bWVyYXRlKHBhcnRzKToKLSAgICAg
ICAgICAgIGlmIGkgPT0gKGxlbihwYXJ0cykgLSAxKToKLSAgICAgICAgICAgICAgICBjdXJyZW50
X21hcFtwYXJ0XSA9IHRlc3RfZGljdAotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAg
ICBpZiBwYXJ0IG5vdCBpbiBjdXJyZW50X21hcDoKLSAgICAgICAgICAgICAgICBjdXJyZW50X21h
cFtwYXJ0XSA9IHt9Ci0gICAgICAgICAgICBjdXJyZW50X21hcCA9IGN1cnJlbnRfbWFwW3BhcnRd
Ci0KLSAgICByZXN1bHRzWyd0ZXN0cyddID0gdGVzdHMKLSAgICByZXN1bHRzWydudW1fcGFzc2Vz
J10gPSBudW1fcGFzc2VzCi0gICAgcmVzdWx0c1snbnVtX2ZsYWt5J10gPSBudW1fZmxha3kKLSAg
ICByZXN1bHRzWydudW1fcmVncmVzc2lvbnMnXSA9IG51bV9yZWdyZXNzaW9ucwotICAgIHJlc3Vs
dHNbJ3VzZXNfZXhwZWN0YXRpb25zX2ZpbGUnXSA9IHBvcnRfb2JqLnVzZXNfdGVzdF9leHBlY3Rh
dGlvbnNfZmlsZSgpCi0gICAgcmVzdWx0c1snaW50ZXJydXB0ZWQnXSA9IGludGVycnVwdGVkICAj
IERvZXMgcmVzdWx0cy5odG1sIGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGNvbXB1dGUgdGhp
cyBpdHNlbGY/IChieSBjaGVja2luZyB0b3RhbCBudW1iZXIgb2YgcmVzdWx0cyB2cy4gdG90YWwg
bnVtYmVyIG9mIHRlc3RzPykKLSAgICByZXN1bHRzWydsYXlvdXRfdGVzdHNfZGlyJ10gPSBwb3J0
X29iai5sYXlvdXRfdGVzdHNfZGlyKCkKLSAgICByZXN1bHRzWydoYXNfd2RpZmYnXSA9IHBvcnRf
b2JqLndkaWZmX2F2YWlsYWJsZSgpCi0gICAgcmVzdWx0c1snaGFzX3ByZXR0eV9wYXRjaCddID0g
cG9ydF9vYmoucHJldHR5X3BhdGNoX2F2YWlsYWJsZSgpCi0gICAgdHJ5OgotICAgICAgICByZXN1
bHRzWydyZXZpc2lvbiddID0gc2NtLmRlZmF1bHRfc2NtKCkuaGVhZF9zdm5fcmV2aXNpb24oKQot
ICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICMgSGFuZGxlIGNhc2VzIHdoZXJlIHdlJ3Jl
IHJ1bm5pbmcgb3V0c2lkZSBvZiB2ZXJzaW9uIGNvbnRyb2wuCi0gICAgICAgIHJlc3VsdHNbJ3Jl
dmlzaW9uJ10gPSAiIgotCi0gICAgcmV0dXJuIHJlc3VsdHMKLQotCi1jbGFzcyBUZXN0UnVuSW50
ZXJydXB0ZWRFeGNlcHRpb24oRXhjZXB0aW9uKToKLSAgICAiIiJSYWlzZWQgd2hlbiBhIHRlc3Qg
cnVuIHNob3VsZCBiZSBzdG9wcGVkIGltbWVkaWF0ZWx5LiIiIgotICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCByZWFzb24pOgotICAgICAgICBzZWxmLnJlYXNvbiA9IHJlYXNvbgotICAgICAgICBzZWxm
Lm1zZyA9IHJlYXNvbgotCi0gICAgZGVmIF9fcmVkdWNlX18oc2VsZik6Ci0gICAgICAgIHJldHVy
biBzZWxmLl9fY2xhc3NfXywgKHNlbGYucmVhc29uLCkKLQotCi1jbGFzcyBXb3JrZXJFeGNlcHRp
b24oRXhjZXB0aW9uKToKLSAgICAiIiJSYWlzZWQgd2hlbiB3ZSByZWNlaXZlIGFuIHVuZXhwZWN0
ZWQvdW5rbm93biBleGNlcHRpb24gZnJvbSBhIHdvcmtlci4iIiIKLSAgICBwYXNzCi0KLQotY2xh
c3MgVGVzdFNoYXJkKG9iamVjdCk6Ci0gICAgIiIiQSB0ZXN0IHNoYXJkIGlzIGEgbmFtZWQgbGlz
dCBvZiBUZXN0SW5wdXRzLiIiIgotCi0gICAgIyBGSVhNRTogTWFrZSB0aGlzIGNsYXNzIHZpc2li
bGUsIHVzZWQgYnkgd29ya2VycyBhcyB3ZWxsLgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1l
LCB0ZXN0X2lucHV0cyk6Ci0gICAgICAgIHNlbGYubmFtZSA9IG5hbWUKLSAgICAgICAgc2VsZi50
ZXN0X2lucHV0cyA9IHRlc3RfaW5wdXRzCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAg
ICAgIHJldHVybiAiVGVzdFNoYXJkKG5hbWU9JyVzJywgdGVzdF9pbnB1dHM9JXMnIiAlIChzZWxm
Lm5hbWUsIHNlbGYudGVzdF9pbnB1dHMpCi0KLSAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToK
LSAgICAgICAgcmV0dXJuIHNlbGYubmFtZSA9PSBvdGhlci5uYW1lIGFuZCBzZWxmLnRlc3RfaW5w
dXRzID09IG90aGVyLnRlc3RfaW5wdXRzCi0KLQotY2xhc3MgTWFuYWdlcihvYmplY3QpOgotICAg
ICIiIkEgY2xhc3MgZm9yIG1hbmFnaW5nIHJ1bm5pbmcgYSBzZXJpZXMgb2YgdGVzdHMgb24gYSBz
ZXJpZXMgb2YgbGF5b3V0Ci0gICAgdGVzdCBmaWxlcy4iIiIKLQotCi0gICAgIyBUaGUgcGVyLXRl
c3QgdGltZW91dCBpbiBtaWxsaXNlY29uZHMsIGlmIG5vIC0tdGltZS1vdXQtbXMgb3B0aW9uIHdh
cwotICAgICMgZ2l2ZW4gdG8gcnVuX3dlYmtpdF90ZXN0cy4gVGhpcyBzaG91bGQgY29ycmVzcG9u
ZCB0byB0aGUgZGVmYXVsdCB0aW1lb3V0Ci0gICAgIyBpbiBEdW1wUmVuZGVyVHJlZS4KLSAgICBE
RUZBVUxUX1RFU1RfVElNRU9VVF9NUyA9IDYgKiAxMDAwCi0KLSAgICBkZWYgX19pbml0X18oc2Vs
ZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlcik6Ci0gICAgICAgICIiIkluaXRpYWxpemUgdGVzdCBy
dW5uZXIgZGF0YSBzdHJ1Y3R1cmVzLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgcG9ydDog
YW4gb2JqZWN0IGltcGxlbWVudGluZyBwb3J0LXNwZWNpZmljCi0gICAgICAgICAgb3B0aW9uczog
YSBkaWN0aW9uYXJ5IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zCi0gICAgICAgICAgcHJpbnRlcjog
YSBQcmludGVyIG9iamVjdCB0byByZWNvcmQgdXBkYXRlcyB0by4KLSAgICAgICAgIiIiCi0gICAg
ICAgIHNlbGYuX3BvcnQgPSBwb3J0Ci0gICAgICAgIHNlbGYuX2ZzID0gcG9ydC5fZmlsZXN5c3Rl
bQotICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwotICAgICAgICBzZWxmLl9wcmludGVy
ID0gcHJpbnRlcgotICAgICAgICBzZWxmLl9tZXNzYWdlX2Jyb2tlciA9IE5vbmUKLQotICAgICAg
ICBzZWxmLkhUVFBfU1VCRElSID0gcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SICsgJ2h0dHAnICsg
cG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SCi0gICAgICAgIHNlbGYuV0VCU09DS0VUX1NVQkRJUiA9
IHBvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUiArICd3ZWJzb2NrZXQnICsgcG9ydC5URVNUX1BBVEhf
U0VQQVJBVE9SCi0gICAgICAgIHNlbGYuTEFZT1VUX1RFU1RTX0RJUkVDVE9SWSA9ICdMYXlvdXRU
ZXN0cycKLSAgICAgICAgc2VsZi5faGFzX2h0dHBfbG9jayA9IEZhbHNlCi0KLSAgICAgICAgc2Vs
Zi5fcmVtYWluaW5nX2xvY2tlZF9zaGFyZHMgPSBbXQotCi0gICAgICAgICMgZGlzYWJsZSB3c3Mg
c2VydmVyLiBuZWVkIHRvIGluc3RhbGwgcHlPcGVuU1NMIG9uIGJ1aWxkYm90cy4KLSAgICAgICAg
IyBzZWxmLl93ZWJzb2NrZXRfc2VjdXJlX3NlcnZlciA9IHdlYnNvY2tldF9zZXJ2ZXIuUHlXZWJT
b2NrZXQoCi0gICAgICAgICMgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksIHVzZV90
bHM9VHJ1ZSwgcG9ydD05MzIzKQotCi0gICAgICAgICMgYSBzZXQgb2YgdGVzdCBmaWxlcywgYW5k
IHRoZSBzYW1lIHRlc3RzIGFzIGEgbGlzdAotICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzID0gc2V0
KCkKLSAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0ID0gTm9uZQotICAgICAgICBzZWxmLl9y
ZXN1bHRfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCi0gICAgICAgIHNlbGYuX3JldHJ5aW5nID0gRmFs
c2UKLSAgICAgICAgc2VsZi5fcmVzdWx0c19kaXJlY3RvcnkgPSBzZWxmLl9wb3J0LnJlc3VsdHNf
ZGlyZWN0b3J5KCkKLQotICAgICAgICBzZWxmLl9hbGxfcmVzdWx0cyA9IFtdCi0gICAgICAgIHNl
bGYuX2dyb3VwX3N0YXRzID0ge30KLSAgICAgICAgc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFy
eSA9IE5vbmUKLQotICAgICAgICAjIFRoaXMgbWFwcyB3b3JrZXIgbmFtZXMgdG8gdGhlIHN0YXRl
IHdlIGFyZSB0cmFja2luZyBmb3IgZWFjaCBvZiB0aGVtLgotICAgICAgICBzZWxmLl93b3JrZXJf
c3RhdGVzID0ge30KLQotICAgIGRlZiBjb2xsZWN0X3Rlc3RzKHNlbGYsIGFyZ3MsIGxhc3RfdW5l
eHBlY3RlZF9yZXN1bHRzKToKLSAgICAgICAgIiIiRmluZCBhbGwgdGhlIGZpbGVzIHRvIHRlc3Qu
Ci0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICBhcmdzOiBsaXN0IG9mIHRlc3QgYXJndW1lbnRz
IGZyb20gdGhlIGNvbW1hbmQgbGluZQotICAgICAgICAgIGxhc3RfdW5leHBlY3RlZF9yZXN1bHRz
OiBsaXN0IG9mIHVuZXhwZWN0ZWQgcmVzdWx0cyB0byByZXRlc3QsIGlmIGFueQotCi0gICAgICAg
ICIiIgotICAgICAgICBwYXRocyA9IHNlbGYuX3N0cmlwX3Rlc3RfZGlyX3ByZWZpeGVzKGFyZ3Mp
Ci0gICAgICAgIHBhdGhzICs9IGxhc3RfdW5leHBlY3RlZF9yZXN1bHRzCi0gICAgICAgIGlmIHNl
bGYuX29wdGlvbnMudGVzdF9saXN0OgotICAgICAgICAgICAgcGF0aHMgKz0gc2VsZi5fc3RyaXBf
dGVzdF9kaXJfcHJlZml4ZXMocmVhZF90ZXN0X2ZpbGVzKHNlbGYuX2ZzLCBzZWxmLl9vcHRpb25z
LnRlc3RfbGlzdCwgc2VsZi5fcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SKSkKLSAgICAgICAgc2Vs
Zi5fdGVzdF9maWxlcyA9IHNlbGYuX3BvcnQudGVzdHMocGF0aHMpCi0KLSAgICBkZWYgX3N0cmlw
X3Rlc3RfZGlyX3ByZWZpeGVzKHNlbGYsIHBhdGhzKToKLSAgICAgICAgcmV0dXJuIFtzZWxmLl9z
dHJpcF90ZXN0X2Rpcl9wcmVmaXgocGF0aCkgZm9yIHBhdGggaW4gcGF0aHMgaWYgcGF0aF0KLQot
ICAgIGRlZiBfc3RyaXBfdGVzdF9kaXJfcHJlZml4KHNlbGYsIHBhdGgpOgotICAgICAgICAjIEhh
bmRsZSBib3RoICJMYXlvdXRUZXN0cy9mb28vYmFyLmh0bWwiIGFuZCAiTGF5b3V0VGVzdHNcZm9v
XGJhci5odG1sIiBpZgotICAgICAgICAjIHRoZSBmaWxlc3lzdGVtIHVzZXMgJ1xcJyBhcyBhIGRp
cmVjdG9yeSBzZXBhcmF0b3IuCi0gICAgICAgIGlmIHBhdGguc3RhcnRzd2l0aChzZWxmLkxBWU9V
VF9URVNUU19ESVJFQ1RPUlkgKyBzZWxmLl9wb3J0LlRFU1RfUEFUSF9TRVBBUkFUT1IpOgotICAg
ICAgICAgICAgcmV0dXJuIHBhdGhbbGVuKHNlbGYuTEFZT1VUX1RFU1RTX0RJUkVDVE9SWSArIHNl
bGYuX3BvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUik6XQotICAgICAgICBpZiBwYXRoLnN0YXJ0c3dp
dGgoc2VsZi5MQVlPVVRfVEVTVFNfRElSRUNUT1JZICsgc2VsZi5fZnMuc2VwKToKLSAgICAgICAg
ICAgIHJldHVybiBwYXRoW2xlbihzZWxmLkxBWU9VVF9URVNUX0RJUkVDVE9SWSArIHNlbGYuX2Zz
LnNlcCk6XQotICAgICAgICByZXR1cm4gcGF0aAotCi0gICAgZGVmIGxpbnQoc2VsZik6Ci0gICAg
ICAgIGxpbnRfZmFpbGVkID0gRmFsc2UKLSAgICAgICAgZm9yIHRlc3RfY29uZmlndXJhdGlvbiBp
biBzZWxmLl9wb3J0LmFsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKCk6Ci0gICAgICAgICAgICB0cnk6
Ci0gICAgICAgICAgICAgICAgc2VsZi5saW50X2V4cGVjdGF0aW9ucyh0ZXN0X2NvbmZpZ3VyYXRp
b24pCi0gICAgICAgICAgICBleGNlcHQgdGVzdF9leHBlY3RhdGlvbnMuUGFyc2VFcnJvcjoKLSAg
ICAgICAgICAgICAgICBsaW50X2ZhaWxlZCA9IFRydWUKLSAgICAgICAgICAgICAgICBzZWxmLl9w
cmludGVyLndyaXRlKCIiKQotCi0gICAgICAgIGlmIGxpbnRfZmFpbGVkOgotICAgICAgICAgICAg
X2xvZy5lcnJvcigiTGludCBmYWlsZWQuIikKLSAgICAgICAgICAgIHJldHVybiAtMQotCi0gICAg
ICAgIF9sb2cuaW5mbygiTGludCBzdWNjZWVkZWQuIikKLSAgICAgICAgcmV0dXJuIDAKLQotICAg
IGRlZiBsaW50X2V4cGVjdGF0aW9ucyhzZWxmLCBjb25maWcpOgotICAgICAgICBwb3J0ID0gc2Vs
Zi5fcG9ydAotICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zKAotICAg
ICAgICAgICAgcG9ydCwKLSAgICAgICAgICAgIE5vbmUsCi0gICAgICAgICAgICBwb3J0LnRlc3Rf
ZXhwZWN0YXRpb25zKCksCi0gICAgICAgICAgICBjb25maWcsCi0gICAgICAgICAgICBzZWxmLl9v
cHRpb25zLmxpbnRfdGVzdF9maWxlcywKLSAgICAgICAgICAgIHBvcnQudGVzdF9leHBlY3RhdGlv
bnNfb3ZlcnJpZGVzKCkpCi0KLSAgICBkZWYgcGFyc2VfZXhwZWN0YXRpb25zKHNlbGYpOgotICAg
ICAgICAiIiJQYXJzZSB0aGUgZXhwZWN0YXRpb25zIGZyb20gdGhlIHRlc3RfbGlzdCBmaWxlcyBh
bmQgcmV0dXJuIGEgZGF0YQotICAgICAgICBzdHJ1Y3R1cmUgaG9sZGluZyB0aGVtLiBUaHJvd3Mg
YW4gZXJyb3IgaWYgdGhlIHRlc3RfbGlzdCBmaWxlcyBoYXZlCi0gICAgICAgIGludmFsaWQgc3lu
dGF4LiIiIgotICAgICAgICBwb3J0ID0gc2VsZi5fcG9ydAotICAgICAgICBzZWxmLl9leHBlY3Rh
dGlvbnMgPSB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zKAotICAgICAgICAgICAg
cG9ydCwKLSAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXMsCi0gICAgICAgICAgICBwb3J0LnRl
c3RfZXhwZWN0YXRpb25zKCksCi0gICAgICAgICAgICBwb3J0LnRlc3RfY29uZmlndXJhdGlvbigp
LAotICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5saW50X3Rlc3RfZmlsZXMsCi0gICAgICAgICAg
ICBwb3J0LnRlc3RfZXhwZWN0YXRpb25zX292ZXJyaWRlcygpKQotCi0gICAgIyBGSVhNRTogVGhp
cyBtZXRob2QgaXMgd2F5IHRvbyBsb25nIGFuZCBuZWVkcyB0byBiZSBicm9rZW4gaW50byBwaWVj
ZXMuCi0gICAgZGVmIHByZXBhcmVfbGlzdHNfYW5kX3ByaW50X291dHB1dChzZWxmKToKLSAgICAg
ICAgIiIiQ3JlYXRlIGFwcHJvcHJpYXRlIHN1YnNldHMgb2YgdGVzdCBsaXN0cyBhbmQgcmV0dXJu
cyBhCi0gICAgICAgIFJlc3VsdFN1bW1hcnkgb2JqZWN0LiBBbHNvIHByaW50cyBleHBlY3RlZCB0
ZXN0IGNvdW50cy4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgIyBSZW1vdmUgc2tpcHBlZCAtIGJv
dGggZml4YWJsZSBhbmQgaWdub3JlZCAtIGZpbGVzIGZyb20gdGhlCi0gICAgICAgICMgdG9wLWxl
dmVsIGxpc3Qgb2YgZmlsZXMgdG8gdGVzdC4KLSAgICAgICAgbnVtX2FsbF90ZXN0X2ZpbGVzID0g
bGVuKHNlbGYuX3Rlc3RfZmlsZXMpCi0gICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfZXhwZWN0
ZWQoIkZvdW5kOiAgJWQgdGVzdHMiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAobGVuKHNlbGYuX3Rlc3RfZmlsZXMpKSkKLSAgICAgICAgaWYgbm90IG51bV9hbGxfdGVz
dF9maWxlczoKLSAgICAgICAgICAgIF9sb2cuY3JpdGljYWwoJ05vIHRlc3RzIHRvIHJ1bi4nKQot
ICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICBza2lwcGVkID0gc2V0KCkKLSAgICAg
ICAgaWYgbnVtX2FsbF90ZXN0X2ZpbGVzID4gMSBhbmQgbm90IHNlbGYuX29wdGlvbnMuZm9yY2U6
Ci0gICAgICAgICAgICBza2lwcGVkID0gc2VsZi5fZXhwZWN0YXRpb25zLmdldF90ZXN0c193aXRo
X3Jlc3VsdF90eXBlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlv
bnMuU0tJUCkKLSAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXMgLT0gc2tpcHBlZAotICAgICAg
ICAgICAgaWYgc2VsZi5fb3B0aW9ucy5za2lwX2ZhaWxpbmdfdGVzdHM6Ci0gICAgICAgICAgICAg
ICAgZmFpbGluZyA9IHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfdGVzdHNfd2l0aF9yZXN1bHRfdHlw
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5GQUlM
KQotICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXMgLT0gZmFpbGluZwotCi0gICAgICAg
ICMgQ3JlYXRlIGEgc29ydGVkIGxpc3Qgb2YgdGVzdCBmaWxlcyBzbyB0aGUgc3Vic2V0IGNodW5r
LAotICAgICAgICAjIGlmIHVzZWQsIGNvbnRhaW5zIGFscGhhYmV0aWNhbGx5IGNvbnNlY3V0aXZl
IHRlc3RzLgotICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzX2xpc3QgPSBsaXN0KHNlbGYuX3Rlc3Rf
ZmlsZXMpCi0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMucmFuZG9taXplX29yZGVyOgotICAgICAg
ICAgICAgcmFuZG9tLnNodWZmbGUoc2VsZi5fdGVzdF9maWxlc19saXN0KQotICAgICAgICBlbHNl
OgotICAgICAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0LnNvcnQoa2V5PWxhbWJkYSB0ZXN0
OiB0ZXN0X2tleShzZWxmLl9wb3J0LCB0ZXN0KSkKLQotICAgICAgICAjIElmIHRoZSB1c2VyIHNw
ZWNpZmllcyB0aGV5IGp1c3Qgd2FudCB0byBydW4gYSBzdWJzZXQgb2YgdGhlIHRlc3RzLAotICAg
ICAgICAjIGp1c3QgZ3JhYiBhIHN1YnNldCBvZiB0aGUgbm9uLXNraXBwZWQgdGVzdHMuCi0gICAg
ICAgIGlmIHNlbGYuX29wdGlvbnMucnVuX2NodW5rIG9yIHNlbGYuX29wdGlvbnMucnVuX3BhcnQ6
Ci0gICAgICAgICAgICBjaHVua192YWx1ZSA9IHNlbGYuX29wdGlvbnMucnVuX2NodW5rIG9yIHNl
bGYuX29wdGlvbnMucnVuX3BhcnQKLSAgICAgICAgICAgIHRlc3RfZmlsZXMgPSBzZWxmLl90ZXN0
X2ZpbGVzX2xpc3QKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAoY2h1bmtfbnVt
LCBjaHVua19sZW4pID0gY2h1bmtfdmFsdWUuc3BsaXQoIjoiKQotICAgICAgICAgICAgICAgIGNo
dW5rX251bSA9IGludChjaHVua19udW0pCi0gICAgICAgICAgICAgICAgYXNzZXJ0KGNodW5rX251
bSA+PSAwKQotICAgICAgICAgICAgICAgIHRlc3Rfc2l6ZSA9IGludChjaHVua19sZW4pCi0gICAg
ICAgICAgICAgICAgYXNzZXJ0KHRlc3Rfc2l6ZSA+IDApCi0gICAgICAgICAgICBleGNlcHQ6Ci0g
ICAgICAgICAgICAgICAgX2xvZy5jcml0aWNhbCgiaW52YWxpZCBjaHVuayAnJXMnIiAlIGNodW5r
X3ZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgICMgR2V0
IHRoZSBudW1iZXIgb2YgdGVzdHMKLSAgICAgICAgICAgIG51bV90ZXN0cyA9IGxlbih0ZXN0X2Zp
bGVzKQotCi0gICAgICAgICAgICAjIEdldCB0aGUgc3RhcnQgb2Zmc2V0IG9mIHRoZSBzbGljZS4K
LSAgICAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucnVuX2NodW5rOgotICAgICAgICAgICAgICAg
IGNodW5rX2xlbiA9IHRlc3Rfc2l6ZQotICAgICAgICAgICAgICAgICMgSW4gdGhpcyBjYXNlIGNo
dW5rX251bSBjYW4gYmUgcmVhbGx5IGxhcmdlLiBXZSBuZWVkCi0gICAgICAgICAgICAgICAgIyB0
byBtYWtlIHRoZSBzbGF2ZSBmaXQgaW4gdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHRlc3RzLgotICAg
ICAgICAgICAgICAgIHNsaWNlX3N0YXJ0ID0gKGNodW5rX251bSAqIGNodW5rX2xlbikgJSBudW1f
dGVzdHMKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgIyBWYWxpZGF0ZSB0aGUg
ZGF0YS4KLSAgICAgICAgICAgICAgICBhc3NlcnQodGVzdF9zaXplIDw9IG51bV90ZXN0cykKLSAg
ICAgICAgICAgICAgICBhc3NlcnQoY2h1bmtfbnVtIDw9IHRlc3Rfc2l6ZSkKLQotICAgICAgICAg
ICAgICAgICMgVG8gY291bnQgdGhlIGNodW5rX2xlbiwgYW5kIG1ha2Ugc3VyZSB3ZSBkb24ndCBz
a2lwCi0gICAgICAgICAgICAgICAgIyBzb21lIHRlc3RzLCB3ZSByb3VuZCB0byB0aGUgbmV4dCB2
YWx1ZSB0aGF0IGZpdHMgZXhhY3RseQotICAgICAgICAgICAgICAgICMgYWxsIHRoZSBwYXJ0cy4K
LSAgICAgICAgICAgICAgICByb3VuZGVkX3Rlc3RzID0gbnVtX3Rlc3RzCi0gICAgICAgICAgICAg
ICAgaWYgcm91bmRlZF90ZXN0cyAlIHRlc3Rfc2l6ZSAhPSAwOgotICAgICAgICAgICAgICAgICAg
ICByb3VuZGVkX3Rlc3RzID0gKG51bV90ZXN0cyArIHRlc3Rfc2l6ZSAtCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKG51bV90ZXN0cyAlIHRlc3Rfc2l6ZSkpCi0KLSAgICAg
ICAgICAgICAgICBjaHVua19sZW4gPSByb3VuZGVkX3Rlc3RzIC8gdGVzdF9zaXplCi0gICAgICAg
ICAgICAgICAgc2xpY2Vfc3RhcnQgPSBjaHVua19sZW4gKiAoY2h1bmtfbnVtIC0gMSkKLSAgICAg
ICAgICAgICAgICAjIEl0IGRvZXMgbm90IG1pbmQgaWYgd2UgZ28gb3ZlciB0ZXN0X3NpemUuCi0K
LSAgICAgICAgICAgICMgR2V0IHRoZSBlbmQgb2Zmc2V0IG9mIHRoZSBzbGljZS4KLSAgICAgICAg
ICAgIHNsaWNlX2VuZCA9IG1pbihudW1fdGVzdHMsIHNsaWNlX3N0YXJ0ICsgY2h1bmtfbGVuKQot
Ci0gICAgICAgICAgICBmaWxlcyA9IHRlc3RfZmlsZXNbc2xpY2Vfc3RhcnQ6c2xpY2VfZW5kXQot
Ci0gICAgICAgICAgICB0ZXN0c19ydW5fbXNnID0gJ1J1bm5pbmc6ICVkIHRlc3RzIChjaHVuayBz
bGljZSBbJWQ6JWRdIG9mICVkKScgJSAoCi0gICAgICAgICAgICAgICAgKHNsaWNlX2VuZCAtIHNs
aWNlX3N0YXJ0KSwgc2xpY2Vfc3RhcnQsIHNsaWNlX2VuZCwgbnVtX3Rlc3RzKQotICAgICAgICAg
ICAgc2VsZi5fcHJpbnRlci5wcmludF9leHBlY3RlZCh0ZXN0c19ydW5fbXNnKQotCi0gICAgICAg
ICAgICAjIElmIHdlIHJlYWNoZWQgdGhlIGVuZCBhbmQgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggdGVz
dHMsIHdlIHJ1biBzb21lCi0gICAgICAgICAgICAjIGZyb20gdGhlIGJlZ2lubmluZy4KLSAgICAg
ICAgICAgIGlmIHNsaWNlX2VuZCAtIHNsaWNlX3N0YXJ0IDwgY2h1bmtfbGVuOgotICAgICAgICAg
ICAgICAgIGV4dHJhID0gY2h1bmtfbGVuIC0gKHNsaWNlX2VuZCAtIHNsaWNlX3N0YXJ0KQotICAg
ICAgICAgICAgICAgIGV4dHJhX21zZyA9ICgnICAgbGFzdCBjaHVuayBpcyBwYXJ0aWFsLCBhcHBl
bmRpbmcgWzA6JWRdJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEpCi0gICAg
ICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9leHBlY3RlZChleHRyYV9tc2cpCi0gICAg
ICAgICAgICAgICAgdGVzdHNfcnVuX21zZyArPSAiXG4iICsgZXh0cmFfbXNnCi0gICAgICAgICAg
ICAgICAgZmlsZXMuZXh0ZW5kKHRlc3RfZmlsZXNbMDpleHRyYV0pCi0gICAgICAgICAgICB0ZXN0
c19ydW5fZmlsZW5hbWUgPSBzZWxmLl9mcy5qb2luKHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5LCAi
dGVzdHNfcnVuLnR4dCIpCi0gICAgICAgICAgICBzZWxmLl9mcy53cml0ZV90ZXh0X2ZpbGUodGVz
dHNfcnVuX2ZpbGVuYW1lLCB0ZXN0c19ydW5fbXNnKQotCi0gICAgICAgICAgICBsZW5fc2tpcF9j
aHVuayA9IGludChsZW4oZmlsZXMpICogbGVuKHNraXBwZWQpIC8KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZsb2F0KGxlbihzZWxmLl90ZXN0X2ZpbGVzKSkpCi0gICAgICAgICAg
ICBza2lwX2NodW5rX2xpc3QgPSBsaXN0KHNraXBwZWQpWzA6bGVuX3NraXBfY2h1bmtdCi0gICAg
ICAgICAgICBza2lwX2NodW5rID0gc2V0KHNraXBfY2h1bmtfbGlzdCkKLQotICAgICAgICAgICAg
IyBVcGRhdGUgZXhwZWN0YXRpb25zIHNvIHRoYXQgdGhlIHN0YXRzIGFyZSBjYWxjdWxhdGVkIGNv
cnJlY3RseS4KLSAgICAgICAgICAgICMgV2UgbmVlZCB0byBwYXNzIGEgbGlzdCB0aGF0IGluY2x1
ZGVzIHRoZSByaWdodCAjIG9mIHNraXBwZWQgZmlsZXMKLSAgICAgICAgICAgICMgdG8gUGFyc2VF
eHBlY3RhdGlvbnMgc28gdGhhdCBSZXN1bHRTdW1tYXJ5KCkgd2lsbCBnZXQgdGhlIGNvcnJlY3QK
LSAgICAgICAgICAgICMgc3RhdHMuIFNvLCB3ZSBhZGQgaW4gdGhlIHN1YnNldCBvZiBza2lwcGVk
IGZpbGVzLCBhbmQgdGhlbgotICAgICAgICAgICAgIyBzdWJ0cmFjdCB0aGVtIGJhY2sgb3V0Lgot
ICAgICAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0ID0gZmlsZXMgKyBza2lwX2NodW5rX2xp
c3QKLSAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXMgPSBzZXQoc2VsZi5fdGVzdF9maWxlc19s
aXN0KQotCi0gICAgICAgICAgICBzZWxmLnBhcnNlX2V4cGVjdGF0aW9ucygpCi0KLSAgICAgICAg
ICAgIHNlbGYuX3Rlc3RfZmlsZXMgPSBzZXQoZmlsZXMpCi0gICAgICAgICAgICBzZWxmLl90ZXN0
X2ZpbGVzX2xpc3QgPSBmaWxlcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2tpcF9jaHVu
ayA9IHNraXBwZWQKLQotICAgICAgICByZXN1bHRfc3VtbWFyeSA9IFJlc3VsdFN1bW1hcnkoc2Vs
Zi5fZXhwZWN0YXRpb25zLAotICAgICAgICAgICAgc2VsZi5fdGVzdF9maWxlcyB8IHNraXBfY2h1
bmspCi0gICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZShyZXN1bHRf
c3VtbWFyeSwKLSAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLlBBU1MsICJwYXNzZXMiKQot
ICAgICAgICBzZWxmLl9wcmludF9leHBlY3RlZF9yZXN1bHRzX29mX3R5cGUocmVzdWx0X3N1bW1h
cnksCi0gICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5GQUlMLCAiZmFpbHVyZXMiKQotICAg
ICAgICBzZWxmLl9wcmludF9leHBlY3RlZF9yZXN1bHRzX29mX3R5cGUocmVzdWx0X3N1bW1hcnks
Ci0gICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5GTEFLWSwgImZsYWt5IikKLSAgICAgICAg
c2VsZi5fcHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90eXBlKHJlc3VsdF9zdW1tYXJ5LAotICAg
ICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuU0tJUCwgInNraXBwZWQiKQotCi0gICAgICAgIGlm
IHNlbGYuX29wdGlvbnMuZm9yY2U6Ci0gICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2V4
cGVjdGVkKCdSdW5uaW5nIGFsbCB0ZXN0cywgaW5jbHVkaW5nICcKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3NraXBzICgtLWZvcmNlKScpCi0gICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAjIE5vdGUgdGhhdCB3ZSBkb24ndCBhY3R1YWxseSBydW4gdGhlIHNraXBw
ZWQgdGVzdHMgKHRoZXkgd2VyZQotICAgICAgICAgICAgIyBzdWJ0cmFjdGVkIG91dCBvZiBzZWxm
Ll90ZXN0X2ZpbGVzLCBhYm92ZSksIGJ1dCB3ZSBzdHViIG91dCB0aGUKLSAgICAgICAgICAgICMg
cmVzdWx0cyBoZXJlIHNvIHRoZSBzdGF0aXN0aWNzIGNhbiByZW1haW4gYWNjdXJhdGUuCi0gICAg
ICAgICAgICBmb3IgdGVzdCBpbiBza2lwX2NodW5rOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHRlc3RfcmVzdWx0cy5UZXN0UmVzdWx0KHRlc3QpCi0gICAgICAgICAgICAgICAgcmVzdWx0LnR5
cGUgPSB0ZXN0X2V4cGVjdGF0aW9ucy5TS0lQCi0gICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1h
cnkuYWRkKHJlc3VsdCwgZXhwZWN0ZWQ9VHJ1ZSkKLSAgICAgICAgc2VsZi5fcHJpbnRlci5wcmlu
dF9leHBlY3RlZCgnJykKLQotICAgICAgICAjIENoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBkaWRuJ3Qg
ZmlsdGVyIG91dCBhbGwgb2YgdGhlIHRlc3RzLgotICAgICAgICBpZiBub3QgbGVuKHNlbGYuX3Rl
c3RfZmlsZXMpOgotICAgICAgICAgICAgX2xvZy5pbmZvKCJBbGwgdGVzdHMgYXJlIGJlaW5nIHNr
aXBwZWQiKQotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICByZXR1cm4gcmVzdWx0
X3N1bW1hcnkKLQotICAgIGRlZiBfZ2V0X2Rpcl9mb3JfdGVzdF9maWxlKHNlbGYsIHRlc3RfZmls
ZSk6Ci0gICAgICAgICIiIlJldHVybnMgdGhlIGhpZ2hlc3QtbGV2ZWwgZGlyZWN0b3J5IGJ5IHdo
aWNoIHRvIHNoYXJkIHRoZSBnaXZlbgotICAgICAgICB0ZXN0IGZpbGUuIiIiCi0gICAgICAgIGRp
cmVjdG9yeSwgdGVzdF9maWxlID0gc2VsZi5fcG9ydC5zcGxpdF90ZXN0KHRlc3RfZmlsZSkKLQot
ICAgICAgICAjIFRoZSBodHRwIHRlc3RzIGFyZSB2ZXJ5IHN0YWJsZSBvbiBtYWMvbGludXguCi0g
ICAgICAgICMgVE9ETyhvamFuKTogTWFrZSB0aGUgaHR0cCBzZXJ2ZXIgb24gV2luZG93cyBiZSBh
cGFjaGUgc28gd2UgY2FuCi0gICAgICAgICMgdHVybiBzaGFyZCB0aGUgaHR0cCB0ZXN0cyB0aGVy
ZSBhcyB3ZWxsLiBTd2l0Y2hpbmcgdG8gYXBhY2hlIGlzCi0gICAgICAgICMgd2hhdCBtYWRlIHRo
ZW0gc3RhYmxlIG9uIGxpbnV4L21hYy4KLSAgICAgICAgcmV0dXJuIGRpcmVjdG9yeQotCi0gICAg
ZGVmIF9nZXRfdGVzdF9pbnB1dF9mb3JfZmlsZShzZWxmLCB0ZXN0X2ZpbGUpOgotICAgICAgICAi
IiJSZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBUZXN0SW5wdXQgb2JqZWN0IGZvciB0aGUgZmlsZS4g
TW9zdGx5IHRoaXMKLSAgICAgICAgaXMgdXNlZCBmb3IgbG9va2luZyB1cCB0aGUgdGltZW91dCB2
YWx1ZSAoaW4gbXMpIHRvIHVzZSBmb3IgdGhlIGdpdmVuCi0gICAgICAgIHRlc3QuIiIiCi0gICAg
ICAgIGlmIHNlbGYuX3Rlc3RfaXNfc2xvdyh0ZXN0X2ZpbGUpOgotICAgICAgICAgICAgcmV0dXJu
IFRlc3RJbnB1dCh0ZXN0X2ZpbGUsIHNlbGYuX29wdGlvbnMuc2xvd190aW1lX291dF9tcykKLSAg
ICAgICAgcmV0dXJuIFRlc3RJbnB1dCh0ZXN0X2ZpbGUsIHNlbGYuX29wdGlvbnMudGltZV9vdXRf
bXMpCi0KLSAgICBkZWYgX3Rlc3RfcmVxdWlyZXNfbG9jayhzZWxmLCB0ZXN0X2ZpbGUpOgotICAg
ICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgdGVzdCBuZWVkcyB0byBiZSBsb2NrZWQgd2hlbgot
ICAgICAgICBydW5uaW5nIG11bHRpcGxlIGNvcGllcyBvZiBOUldUcy4iIiIKLSAgICAgICAgc3Bs
aXRfcGF0aCA9IHRlc3RfZmlsZS5zcGxpdChzZWxmLl9wb3J0LlRFU1RfUEFUSF9TRVBBUkFUT1Ip
Ci0gICAgICAgIHJldHVybiAnaHR0cCcgaW4gc3BsaXRfcGF0aCBvciAnd2Vic29ja2V0JyBpbiBz
cGxpdF9wYXRoCi0KLSAgICBkZWYgX3Rlc3RfaXNfc2xvdyhzZWxmLCB0ZXN0X2ZpbGUpOgotICAg
ICAgICByZXR1cm4gc2VsZi5fZXhwZWN0YXRpb25zLmhhc19tb2RpZmllcih0ZXN0X2ZpbGUsIHRl
c3RfZXhwZWN0YXRpb25zLlNMT1cpCi0KLSAgICBkZWYgX3NoYXJkX3Rlc3RzKHNlbGYsIHRlc3Rf
ZmlsZXMsIG51bV93b3JrZXJzLCBmdWxseV9wYXJhbGxlbCk6Ci0gICAgICAgICIiIkdyb3VwcyB0
ZXN0cyBpbnRvIGJhdGNoZXMuCi0gICAgICAgIFRoaXMgaGVscHMgZW5zdXJlIHRoYXQgdGVzdHMg
dGhhdCBkZXBlbmQgb24gZWFjaCBvdGhlciAoYWthIGJhZCB0ZXN0cyEpCi0gICAgICAgIGNvbnRp
bnVlIHRvIHJ1biB0b2dldGhlciBhcyBtb3N0IGNyb3NzLXRlc3RzIGRlcGVuZGVuY2llcyB0ZW5k
IHRvCi0gICAgICAgIG9jY3VyIHdpdGhpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCi0gICAgICAgIFJl
dHVybjoKLSAgICAgICAgICAgIFR3byBsaXN0IG9mIFRlc3RTaGFyZHMuIFRoZSBmaXJzdCBjb250
YWlucyB0ZXN0cyB0aGF0IG11c3Qgb25seSBiZQotICAgICAgICAgICAgcnVuIHVuZGVyIHRoZSBz
ZXJ2ZXIgbG9jaywgdGhlIHNlY29uZCBjYW4gYmUgcnVuIHdoZW5ldmVyLgotICAgICAgICAiIiIK
LQotICAgICAgICAjIEZJWE1FOiBNb3ZlIGFsbCBvZiB0aGUgc2hhcmRpbmcgbG9naWMgb3V0IG9m
IG1hbmFnZXIgaW50byBpdHMKLSAgICAgICAgIyBvd24gY2xhc3Mgb3IgbW9kdWxlLiBDb25zaWRl
ciBncm91cGluZyBpdCB3aXRoIHRoZSBjaHVua2luZyBsb2dpYwotICAgICAgICAjIGluIHByZXBh
cmVfbGlzdHMgYXMgd2VsbC4KLSAgICAgICAgaWYgbnVtX3dvcmtlcnMgPT0gMToKLSAgICAgICAg
ICAgIHJldHVybiBzZWxmLl9zaGFyZF9pbl90d28odGVzdF9maWxlcykKLSAgICAgICAgZWxpZiBm
dWxseV9wYXJhbGxlbDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9zaGFyZF9ldmVyeV9maWxl
KHRlc3RfZmlsZXMpCi0gICAgICAgIHJldHVybiBzZWxmLl9zaGFyZF9ieV9kaXJlY3RvcnkodGVz
dF9maWxlcywgbnVtX3dvcmtlcnMpCi0KLSAgICBkZWYgX3NoYXJkX2luX3R3byhzZWxmLCB0ZXN0
X2ZpbGVzKToKLSAgICAgICAgIiIiUmV0dXJucyB0d28gbGlzdHMgb2Ygc2hhcmRzLCBvbmUgd2l0
aCBhbGwgdGhlIHRlc3RzIHJlcXVpcmluZyBhIGxvY2sgYW5kIG9uZSB3aXRoIHRoZSByZXN0Lgot
Ci0gICAgICAgIFRoaXMgaXMgdXNlZCB3aGVuIHRoZXJlJ3Mgb25seSBvbmUgd29ya2VyLCB0byBt
aW5pbWl6ZSB0aGUgcGVyLXNoYXJkIG92ZXJoZWFkLiIiIgotICAgICAgICBsb2NrZWRfaW5wdXRz
ID0gW10KLSAgICAgICAgdW5sb2NrZWRfaW5wdXRzID0gW10KLSAgICAgICAgZm9yIHRlc3RfZmls
ZSBpbiB0ZXN0X2ZpbGVzOgotICAgICAgICAgICAgdGVzdF9pbnB1dCA9IHNlbGYuX2dldF90ZXN0
X2lucHV0X2Zvcl9maWxlKHRlc3RfZmlsZSkKLSAgICAgICAgICAgIGlmIHNlbGYuX3Rlc3RfcmVx
dWlyZXNfbG9jayh0ZXN0X2ZpbGUpOgotICAgICAgICAgICAgICAgIGxvY2tlZF9pbnB1dHMuYXBw
ZW5kKHRlc3RfaW5wdXQpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHVubG9j
a2VkX2lucHV0cy5hcHBlbmQodGVzdF9pbnB1dCkKLSAgICAgICAgcmV0dXJuIFtUZXN0U2hhcmQo
J2xvY2tlZF90ZXN0cycsIGxvY2tlZF9pbnB1dHMpXSwgW1Rlc3RTaGFyZCgndW5sb2NrZWRfdGVz
dHMnLCB1bmxvY2tlZF9pbnB1dHMpXQotCi0gICAgZGVmIF9zaGFyZF9ldmVyeV9maWxlKHNlbGYs
IHRlc3RfZmlsZXMpOgotICAgICAgICAiIiJSZXR1cm5zIHR3byBsaXN0cyBvZiBzaGFyZHMsIGVh
Y2ggc2hhcmQgY29udGFpbmluZyBhIHNpbmdsZSB0ZXN0IGZpbGUuCi0KLSAgICAgICAgVGhpcyBt
b2RlIGdldHMgbWF4aW1hbCBwYXJhbGxlbGlzbSBhdCB0aGUgY29zdCBvZiBtdWNoIGhpZ2hlciBm
bGFraW5lc3MuIiIiCi0gICAgICAgIGxvY2tlZF9zaGFyZHMgPSBbXQotICAgICAgICB1bmxvY2tl
ZF9zaGFyZHMgPSBbXQotICAgICAgICBmb3IgdGVzdF9maWxlIGluIHRlc3RfZmlsZXM6Ci0gICAg
ICAgICAgICB0ZXN0X2lucHV0ID0gc2VsZi5fZ2V0X3Rlc3RfaW5wdXRfZm9yX2ZpbGUodGVzdF9m
aWxlKQotCi0gICAgICAgICAgICAjIE5vdGUgdGhhdCB3ZSB1c2UgYSAnLicgZm9yIHRoZSBzaGFy
ZCBuYW1lOyB0aGUgbmFtZSBkb2Vzbid0IHJlYWxseQotICAgICAgICAgICAgIyBtYXR0ZXIsIGFu
ZCB0aGUgb25seSBvdGhlciBtZWFuaW5nZnVsIHZhbHVlIHdvdWxkIGJlIHRoZSBmaWxlbmFtZSwK
LSAgICAgICAgICAgICMgd2hpY2ggd291bGQgYmUgcmVhbGx5IHJlZHVuZGFudC4KLSAgICAgICAg
ICAgIGlmIHNlbGYuX3Rlc3RfcmVxdWlyZXNfbG9jayh0ZXN0X2ZpbGUpOgotICAgICAgICAgICAg
ICAgIGxvY2tlZF9zaGFyZHMuYXBwZW5kKFRlc3RTaGFyZCgnLicsIFt0ZXN0X2lucHV0XSkpCi0g
ICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHVubG9ja2VkX3NoYXJkcy5hcHBlbmQo
VGVzdFNoYXJkKCcuJywgW3Rlc3RfaW5wdXRdKSkKLQotICAgICAgICByZXR1cm4gbG9ja2VkX3No
YXJkcywgdW5sb2NrZWRfc2hhcmRzCi0KLSAgICBkZWYgX3NoYXJkX2J5X2RpcmVjdG9yeShzZWxm
LCB0ZXN0X2ZpbGVzLCBudW1fd29ya2Vycyk6Ci0gICAgICAgICIiIlJldHVybnMgdHdvIGxpc3Rz
IG9mIHNoYXJkcywgZWFjaCBzaGFyZCBjb250YWluaW5nIGFsbCB0aGUgZmlsZXMgaW4gYSBkaXJl
Y3RvcnkuCi0KLSAgICAgICAgVGhpcyBpcyB0aGUgZGVmYXVsdCBtb2RlLCBhbmQgZ2V0cyBhcyBt
dWNoIHBhcmFsbGVsaXNtIGFzIHdlIGNhbiB3aGlsZQotICAgICAgICBtaW5pbWl6aW5nIGZsYWtp
bmVzcyBjYXVzZWQgYnkgaW50ZXItdGVzdCBkZXBlbmRlbmNpZXMuIiIiCi0gICAgICAgIGxvY2tl
ZF9zaGFyZHMgPSBbXQotICAgICAgICB1bmxvY2tlZF9zaGFyZHMgPSBbXQotICAgICAgICB0ZXN0
c19ieV9kaXIgPSB7fQotICAgICAgICAjIEZJWE1FOiBHaXZlbiB0aGF0IHRoZSB0ZXN0cyBhcmUg
YWxyZWFkeSBzb3J0ZWQgYnkgZGlyZWN0b3J5LAotICAgICAgICAjIHdlIGNhbiBwcm9iYWJseSBy
ZXdyaXRlIHRoaXMgdG8gYmUgY2xlYXJlciBhbmQgZmFzdGVyLgotICAgICAgICBmb3IgdGVzdF9m
aWxlIGluIHRlc3RfZmlsZXM6Ci0gICAgICAgICAgICBkaXJlY3RvcnkgPSBzZWxmLl9nZXRfZGly
X2Zvcl90ZXN0X2ZpbGUodGVzdF9maWxlKQotICAgICAgICAgICAgdGVzdF9pbnB1dCA9IHNlbGYu
X2dldF90ZXN0X2lucHV0X2Zvcl9maWxlKHRlc3RfZmlsZSkKLSAgICAgICAgICAgIHRlc3RzX2J5
X2Rpci5zZXRkZWZhdWx0KGRpcmVjdG9yeSwgW10pCi0gICAgICAgICAgICB0ZXN0c19ieV9kaXJb
ZGlyZWN0b3J5XS5hcHBlbmQodGVzdF9pbnB1dCkKLQotICAgICAgICBmb3IgZGlyZWN0b3J5LCB0
ZXN0X2lucHV0cyBpbiB0ZXN0c19ieV9kaXIuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICBzaGFy
ZCA9IFRlc3RTaGFyZChkaXJlY3RvcnksIHRlc3RfaW5wdXRzKQotICAgICAgICAgICAgaWYgc2Vs
Zi5fdGVzdF9yZXF1aXJlc19sb2NrKGRpcmVjdG9yeSk6Ci0gICAgICAgICAgICAgICAgbG9ja2Vk
X3NoYXJkcy5hcHBlbmQoc2hhcmQpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAg
IHVubG9ja2VkX3NoYXJkcy5hcHBlbmQoc2hhcmQpCi0KLSAgICAgICAgIyBTb3J0IHRoZSBzaGFy
ZHMgYnkgZGlyZWN0b3J5IG5hbWUuCi0gICAgICAgIGxvY2tlZF9zaGFyZHMuc29ydChrZXk9bGFt
YmRhIHNoYXJkOiBzaGFyZC5uYW1lKQotICAgICAgICB1bmxvY2tlZF9zaGFyZHMuc29ydChrZXk9
bGFtYmRhIHNoYXJkOiBzaGFyZC5uYW1lKQotCi0gICAgICAgIHJldHVybiAoc2VsZi5fcmVzaXpl
X3NoYXJkcyhsb2NrZWRfc2hhcmRzLCBzZWxmLl9tYXhfbG9ja2VkX3NoYXJkcyhudW1fd29ya2Vy
cyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9ja2VkX3NoYXJkJyks
Ci0gICAgICAgICAgICAgICAgdW5sb2NrZWRfc2hhcmRzKQotCi0gICAgZGVmIF9tYXhfbG9ja2Vk
X3NoYXJkcyhzZWxmLCBudW1fd29ya2Vycyk6Ci0gICAgICAgICMgUHV0IGEgY2VpbGluZyBvbiB0
aGUgbnVtYmVyIG9mIGxvY2tlZCBzaGFyZHMsIHNvIHRoYXQgd2UKLSAgICAgICAgIyBkb24ndCBo
YW1tZXIgdGhlIHNlcnZlcnMgdG9vIGJhZGx5LgotCi0gICAgICAgICMgRklYTUU6IEZvciBub3cs
IGxpbWl0IHRvIG9uZSBzaGFyZC4gQWZ0ZXIgdGVzdGluZyB0byBtYWtlIHN1cmUgd2UKLSAgICAg
ICAgIyBjYW4gaGFuZGxlIG11bHRpcGxlIHNoYXJkcywgd2Ugc2hvdWxkIHByb2JhYmx5IGRvIHNv
bWV0aGluZyBsaWtlCi0gICAgICAgICMgbGltaXQgdGhpcyB0byBubyBtb3JlIHRoYW4gYSBxdWFy
dGVyIG9mIGFsbCB3b3JrZXJzLCBlLmcuOgotICAgICAgICAjIHJldHVybiBtYXgobWF0aC5jZWls
KG51bV93b3JrZXJzIC8gNC4wKSwgMSkKLSAgICAgICAgcmV0dXJuIDEKLQotICAgIGRlZiBfcmVz
aXplX3NoYXJkcyhzZWxmLCBvbGRfc2hhcmRzLCBtYXhfbmV3X3NoYXJkcywgc2hhcmRfbmFtZV9w
cmVmaXgpOgotICAgICAgICAiIiJUYWtlcyBhIGxpc3Qgb2Ygc2hhcmRzIGFuZCByZWRpc3RyaWJ1
dGVzIHRoZSB0ZXN0cyBpbnRvIG5vIG1vcmUKLSAgICAgICAgdGhhbiB8bWF4X25ld19zaGFyZHN8
IG5ldyBzaGFyZHMuIiIiCi0KLSAgICAgICAgIyBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMg
dGhhdCBlYWNoIGlucHV0IHNoYXJkIG9ubHkgY29udGFpbnMgdGVzdHMgZnJvbSBhCi0gICAgICAg
ICMgc2luZ2xlIGRpcmVjdG9yeSwgYW5kIHRoYXQgdGVzdHMgaW4gZWFjaCBzaGFyZCBtdXN0IHJl
bWFpbiB0b2dldGhlcjsgYXMgYQotICAgICAgICAjIHJlc3VsdCwgYSBnaXZlbiBpbnB1dCBzaGFy
ZCBpcyBuZXZlciBzcGxpdCBiZXR3ZWVuIG91dHB1dCBzaGFyZHMuCi0gICAgICAgICMKLSAgICAg
ICAgIyBFYWNoIG91dHB1dCBzaGFyZCBjb250YWlucyB0aGUgdGVzdHMgZnJvbSBvbmUgb3IgbW9y
ZSBpbnB1dCBzaGFyZHMgYW5kCi0gICAgICAgICMgaGVuY2UgbWF5IGNvbnRhaW4gdGVzdHMgZnJv
bSBtdWx0aXBsZSBkaXJlY3Rvcmllcy4KLQotICAgICAgICBkZWYgZGl2aWRlX2FuZF9yb3VuZF91
cChudW1lcmF0b3IsIGRpdmlzb3IpOgotICAgICAgICAgICAgcmV0dXJuIGludChtYXRoLmNlaWwo
ZmxvYXQobnVtZXJhdG9yKSAvIGRpdmlzb3IpKQotCi0gICAgICAgIGRlZiBleHRyYWN0X2FuZF9m
bGF0dGVuKHNoYXJkcyk6Ci0gICAgICAgICAgICB0ZXN0X2lucHV0cyA9IFtdCi0gICAgICAgICAg
ICBmb3Igc2hhcmQgaW4gc2hhcmRzOgotICAgICAgICAgICAgICAgIHRlc3RfaW5wdXRzLmV4dGVu
ZChzaGFyZC50ZXN0X2lucHV0cykKLSAgICAgICAgICAgIHJldHVybiB0ZXN0X2lucHV0cwotCi0g
ICAgICAgIGRlZiBzcGxpdF9hdChzZXEsIGluZGV4KToKLSAgICAgICAgICAgIHJldHVybiAoc2Vx
WzppbmRleF0sIHNlcVtpbmRleDpdKQotCi0gICAgICAgIG51bV9vbGRfcGVyX25ldyA9IGRpdmlk
ZV9hbmRfcm91bmRfdXAobGVuKG9sZF9zaGFyZHMpLCBtYXhfbmV3X3NoYXJkcykKLSAgICAgICAg
bmV3X3NoYXJkcyA9IFtdCi0gICAgICAgIHJlbWFpbmluZ19zaGFyZHMgPSBvbGRfc2hhcmRzCi0g
ICAgICAgIHdoaWxlIHJlbWFpbmluZ19zaGFyZHM6Ci0gICAgICAgICAgICBzb21lX3NoYXJkcywg
cmVtYWluaW5nX3NoYXJkcyA9IHNwbGl0X2F0KHJlbWFpbmluZ19zaGFyZHMsIG51bV9vbGRfcGVy
X25ldykKLSAgICAgICAgICAgIG5ld19zaGFyZHMuYXBwZW5kKFRlc3RTaGFyZCgnJXNfJWQnICUg
KHNoYXJkX25hbWVfcHJlZml4LCBsZW4obmV3X3NoYXJkcykgKyAxKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0X2FuZF9mbGF0dGVuKHNvbWVfc2hhcmRz
KSkpCi0gICAgICAgIHJldHVybiBuZXdfc2hhcmRzCi0KLSAgICBkZWYgX2NvbnRhaW5zX3Rlc3Rz
KHNlbGYsIHN1YmRpcik6Ci0gICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gc2VsZi5fdGVzdF9maWxl
czoKLSAgICAgICAgICAgIGlmIHRlc3RfZmlsZS5maW5kKHN1YmRpcikgPj0gMDoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBfbG9n
X251bV93b3JrZXJzKHNlbGYsIG51bV93b3JrZXJzLCBudW1fc2hhcmRzLCBudW1fbG9ja2VkX3No
YXJkcyk6Ci0gICAgICAgIGRyaXZlcl9uYW1lID0gc2VsZi5fcG9ydC5kcml2ZXJfbmFtZSgpCi0g
ICAgICAgIGlmIG51bV93b3JrZXJzID09IDE6Ci0gICAgICAgICAgICBzZWxmLl9wcmludGVyLnBy
aW50X2NvbmZpZygiUnVubmluZyAxICVzIG92ZXIgJXMiICUKLSAgICAgICAgICAgICAgICAoZHJp
dmVyX25hbWUsIGdyYW1tYXIucGx1cmFsaXplKCdzaGFyZCcsIG51bV9zaGFyZHMpKSkKLSAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfY29uZmlnKCJSdW5uaW5n
ICVkICVzcyBpbiBwYXJhbGxlbCBvdmVyICVkIHNoYXJkcyAoJWQgbG9ja2VkKSIgJQotICAgICAg
ICAgICAgICAgIChudW1fd29ya2VycywgZHJpdmVyX25hbWUsIG51bV9zaGFyZHMsIG51bV9sb2Nr
ZWRfc2hhcmRzKSkKLQotICAgIGRlZiBfcnVuX3Rlc3RzKHNlbGYsIGZpbGVfbGlzdCwgcmVzdWx0
X3N1bW1hcnkpOgotICAgICAgICAiIiJSdW5zIHRoZSB0ZXN0cyBpbiB0aGUgZmlsZV9saXN0Lgot
Ci0gICAgICAgIFJldHVybjogQSB0dXBsZSAoaW50ZXJydXB0ZWQsIGtleWJvYXJkX2ludGVycnVw
dGVkLCB0aHJlYWRfdGltaW5ncywKLSAgICAgICAgICAgIHRlc3RfdGltaW5ncywgaW5kaXZpZHVh
bF90ZXN0X3RpbWluZ3MpCi0gICAgICAgICAgICBpbnRlcnJ1cHRlZCBpcyB3aGV0aGVyIHRoZSBy
dW4gd2FzIGludGVycnVwdGVkCi0gICAgICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCBpcyB3
aGV0aGVyIHRoZSBpbnRlcnJ1cHRpb24gd2FzIGJlY2F1c2Ugc29tZW9uZQotICAgICAgICAgICAg
ICB0eXBlZCBDdHJsXkMKLSAgICAgICAgICAgIHRocmVhZF90aW1pbmdzIGlzIGEgbGlzdCBvZiBk
aWN0cyB3aXRoIHRoZSB0b3RhbCBydW50aW1lCi0gICAgICAgICAgICAgIG9mIGVhY2ggdGhyZWFk
IHdpdGggJ25hbWUnLCAnbnVtX3Rlc3RzJywgJ3RvdGFsX3RpbWUnIHByb3BlcnRpZXMKLSAgICAg
ICAgICAgIHRlc3RfdGltaW5ncyBpcyBhIGxpc3Qgb2YgdGltaW5ncyBmb3IgZWFjaCBzaGFyZGVk
IHN1YmRpcmVjdG9yeQotICAgICAgICAgICAgICBvZiB0aGUgZm9ybSBbdGltZSwgZGlyZWN0b3J5
X25hbWUsIG51bV90ZXN0c10KLSAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzIGlz
IGEgbGlzdCBvZiBydW4gdGltZXMgZm9yIGVhY2ggdGVzdAotICAgICAgICAgICAgICBpbiB0aGUg
Zm9ybSB7ZmlsZW5hbWU6ZmlsZW5hbWUsIHRlc3RfcnVuX3RpbWU6dGVzdF9ydW5fdGltZX0KLSAg
ICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCB0byBwb3B1bGF0ZSB3aXRo
IHRoZSByZXN1bHRzCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLl9jdXJyZW50X3Jlc3VsdF9z
dW1tYXJ5ID0gcmVzdWx0X3N1bW1hcnkKLSAgICAgICAgc2VsZi5fYWxsX3Jlc3VsdHMgPSBbXQot
ICAgICAgICBzZWxmLl9ncm91cF9zdGF0cyA9IHt9Ci0gICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0
ZXMgPSB7fQotCi0gICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkID0gRmFsc2UKLSAgICAgICAg
aW50ZXJydXB0ZWQgPSBGYWxzZQotICAgICAgICB0aHJlYWRfdGltaW5ncyA9IFtdCi0KLSAgICAg
ICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1NoYXJkaW5nIHRlc3RzIC4uLicpCi0gICAg
ICAgIGxvY2tlZF9zaGFyZHMsIHVubG9ja2VkX3NoYXJkcyA9IHNlbGYuX3NoYXJkX3Rlc3RzKGZp
bGVfbGlzdCwKLSAgICAgICAgICAgIGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3Nlcyks
IHNlbGYuX29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsKQotCi0gICAgICAgICMg
RklYTUU6IFdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byBjb29yZGluYXRlIHRoZSB3b3JrZXJz
IHNvIHRoYXQKLSAgICAgICAgIyB0aGV5IGRvbid0IHRyeSB0byBydW4gdGhlIHNoYXJkcyB0aGF0
IG5lZWQgYSBsb2NrIGlmIHdlIGRvbid0IGFjdHVhbGx5Ci0gICAgICAgICMgaGF2ZSB0aGUgbG9j
ay4gVGhlIGVhc2llc3Qgc29sdXRpb24gYXQgdGhlIG1vbWVudCBpcyB0byBncmFiIHRoZQotICAg
ICAgICAjIGxvY2sgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcnVuLCBhbmQgdGhlbiBydW4gYWxs
IG9mIHRoZSBsb2NrZWQKLSAgICAgICAgIyBzaGFyZHMgZmlyc3QuIFRoaXMgbWluaW1pemVzIHRo
ZSB0aW1lIHNwZW50IGhvbGRpbmcgdGhlIGxvY2ssIGJ1dAotICAgICAgICAjIG1lYW5zIHRoYXQg
d2Ugd29uJ3QgYmUgcnVubmluZyB0ZXN0cyB3aGlsZSB3ZSdyZSB3YWl0aW5nIGZvciB0aGUgbG9j
ay4KLSAgICAgICAgIyBJZiB0aGlzIGJlY29tZXMgYSBwcm9ibGVtIGluIHByYWN0aWNlIHdlJ2xs
IG5lZWQgdG8gY2hhbmdlIHRoaXMuCi0KLSAgICAgICAgYWxsX3NoYXJkcyA9IGxvY2tlZF9zaGFy
ZHMgKyB1bmxvY2tlZF9zaGFyZHMKLSAgICAgICAgc2VsZi5fcmVtYWluaW5nX2xvY2tlZF9zaGFy
ZHMgPSBsb2NrZWRfc2hhcmRzCi0gICAgICAgIGlmIGxvY2tlZF9zaGFyZHM6Ci0gICAgICAgICAg
ICBzZWxmLnN0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKCkKLQotICAgICAgICBudW1fd29ya2VycyA9
IG1pbihpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpLCBsZW4oYWxsX3NoYXJkcykp
Ci0gICAgICAgIHNlbGYuX2xvZ19udW1fd29ya2VycyhudW1fd29ya2VycywgbGVuKGFsbF9zaGFy
ZHMpLCBsZW4obG9ja2VkX3NoYXJkcykpCi0KLSAgICAgICAgbWFuYWdlcl9jb25uZWN0aW9uID0g
bWFuYWdlcl93b3JrZXJfYnJva2VyLmdldChzZWxmLl9wb3J0LCBzZWxmLl9vcHRpb25zLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYs
IHdvcmtlci5Xb3JrZXIpCi0KLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5kcnlfcnVuOgotICAg
ICAgICAgICAgcmV0dXJuIChrZXlib2FyZF9pbnRlcnJ1cHRlZCwgaW50ZXJydXB0ZWQsIHRocmVh
ZF90aW1pbmdzLAotICAgICAgICAgICAgICAgICAgICBzZWxmLl9ncm91cF9zdGF0cywgc2VsZi5f
YWxsX3Jlc3VsdHMpCi0KLSAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0
aW5nICVzIC4uLicgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFy
LnBsdXJhbGl6ZSgnd29ya2VyJywgbnVtX3dvcmtlcnMpKQotICAgICAgICBmb3Igd29ya2VyX251
bWJlciBpbiB4cmFuZ2UobnVtX3dvcmtlcnMpOgotICAgICAgICAgICAgd29ya2VyX2Nvbm5lY3Rp
b24gPSBtYW5hZ2VyX2Nvbm5lY3Rpb24uc3RhcnRfd29ya2VyKHdvcmtlcl9udW1iZXIpCi0gICAg
ICAgICAgICB3b3JrZXJfc3RhdGUgPSBfV29ya2VyU3RhdGUod29ya2VyX251bWJlciwgd29ya2Vy
X2Nvbm5lY3Rpb24pCi0gICAgICAgICAgICBzZWxmLl93b3JrZXJfc3RhdGVzW3dvcmtlcl9jb25u
ZWN0aW9uLm5hbWVdID0gd29ya2VyX3N0YXRlCi0KLSAgICAgICAgICAgICMgRklYTUU6IElmIHdl
IHN0YXJ0IHdvcmtlcnMgdXAgdG9vIHF1aWNrbHksIER1bXBSZW5kZXJUcmVlIGFwcGVhcnMKLSAg
ICAgICAgICAgICMgdG8gdGhyYXNoIG9uIHNvbWV0aGluZyBhbmQgdGltZSBvdXQgaXRzIGZpcnN0
IGZldyB0ZXN0cy4gVW50aWwKLSAgICAgICAgICAgICMgd2UgY2FuIGZpZ3VyZSBvdXQgd2hhdCdz
IGdvaW5nIG9uLCBzbGVlcCBhIGJpdCBpbiBiZXR3ZWVuCi0gICAgICAgICAgICAjIHdvcmtlcnMu
IFRoaXMgbmVlZHMgYSBidWcgZmlsZWQuCi0gICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKLQot
ICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgiU3RhcnRpbmcgdGVzdGluZyAuLi4i
KQotICAgICAgICBmb3Igc2hhcmQgaW4gYWxsX3NoYXJkczoKLSAgICAgICAgICAgICMgRklYTUU6
IENoYW5nZSAndGVzdF9saXN0JyB0byAnc2hhcmQnLCBtYWtlIHNoYXJkaW5nIHB1YmxpYy4KLSAg
ICAgICAgICAgIG1hbmFnZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ3Rlc3RfbGlzdCcsIHNo
YXJkLm5hbWUsIHNoYXJkLnRlc3RfaW5wdXRzKQotCi0gICAgICAgICMgV2UgcG9zdCBvbmUgJ3N0
b3AnIG1lc3NhZ2UgZm9yIGVhY2ggd29ya2VyLiBCZWNhdXNlIHRoZSBzdG9wIG1lc3NhZ2UKLSAg
ICAgICAgIyBhcmUgc2VudCBhZnRlciBhbGwgb2YgdGhlIHRlc3RzLCBhbmQgYmVjYXVzZSBlYWNo
IHdvcmtlciB3aWxsIHN0b3AKLSAgICAgICAgIyByZWFkaW5nIG1lc3NzYWdlcyBhZnRlciByZWNl
aXZpbmcgYSBzdG9wLCB3ZSBjYW4gYmUgc3VyZSBlYWNoCi0gICAgICAgICMgd29ya2VyIHdpbGwg
Z2V0IGEgc3RvcCBtZXNzYWdlIGFuZCBoZW5jZSB0aGV5IHdpbGwgYWxsIHNodXQgZG93bi4KLSAg
ICAgICAgZm9yIGkgaW4geHJhbmdlKG51bV93b3JrZXJzKToKLSAgICAgICAgICAgIG1hbmFnZXJf
Y29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ3N0b3AnKQotCi0gICAgICAgIHRyeToKLSAgICAgICAg
ICAgIHdoaWxlIG5vdCBzZWxmLmlzX2RvbmUoKToKLSAgICAgICAgICAgICAgICAjIFRlbXBvcmFy
aWx5IGRpc2FibGVkIHRvIHNlZSBob3cgdGhpcyBjb2RlIGVmZmVjdCBwZXJmb3JtYW5jZSBvbiB0
aGUgYnVpbGRib3RzLgotICAgICAgICAgICAgICAgICMgaWYgc2VsZi5fcG9ydC5leGVjdXRpdmUo
KS5ydW5uaW5nX3BpZHMoc2VsZi5fcG9ydC5pc19jcmFzaF9yZXBvcnRlcik6Ci0gICAgICAgICAg
ICAgICAgIyAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoIldhaXRpbmcgZm9yIGNyYXNo
IHJlcG9ydGVyIC4uLiIpCi0gICAgICAgICAgICAgICAgIyAgICAgc2VsZi5fcG9ydC5leGVjdXRp
dmUoKS53YWl0X25ld2VzdChzZWxmLl9wb3J0LmlzX2NyYXNoX3JlcG9ydGVyKQotICAgICAgICAg
ICAgICAgIG1hbmFnZXJfY29ubmVjdGlvbi5ydW5fbWVzc2FnZV9sb29wKGRlbGF5X3NlY3M9MS4w
KQotCi0gICAgICAgICAgICAjIE1ha2Ugc3VyZSBhbGwgb2YgdGhlIHdvcmtlcnMgaGF2ZSBzaHV0
IGRvd24gKGlmIHBvc3NpYmxlKS4KLSAgICAgICAgICAgIGZvciB3b3JrZXJfc3RhdGUgaW4gc2Vs
Zi5fd29ya2VyX3N0YXRlcy52YWx1ZXMoKToKLSAgICAgICAgICAgICAgICBpZiB3b3JrZXJfc3Rh
dGUud29ya2VyX2Nvbm5lY3Rpb24uaXNfYWxpdmUoKToKLSAgICAgICAgICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygnV2FpdGluZyBmb3Igd29ya2VyICVkIHRvIGV4aXQnICUgd29ya2VyX3N0YXRlLm51
bWJlcikKLSAgICAgICAgICAgICAgICAgICAgd29ya2VyX3N0YXRlLndvcmtlcl9jb25uZWN0aW9u
LmpvaW4oNS4wKQotICAgICAgICAgICAgICAgICAgICBpZiB3b3JrZXJfc3RhdGUud29ya2VyX2Nv
bm5lY3Rpb24uaXNfYWxpdmUoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJyb3Io
J1dvcmtlciAlZCBkaWQgbm90IGV4aXQgaW4gdGltZS4nICUgd29ya2VyX3N0YXRlLm51bWJlcikK
LQotICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgICAgICBzZWxmLl9w
cmludGVyLnByaW50X3VwZGF0ZSgnSW50ZXJydXB0ZWQsIGV4aXRpbmcgLi4uJykKLSAgICAgICAg
ICAgIHNlbGYuY2FuY2VsX3dvcmtlcnMoKQotICAgICAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0
ZWQgPSBUcnVlCi0gICAgICAgIGV4Y2VwdCBUZXN0UnVuSW50ZXJydXB0ZWRFeGNlcHRpb24sIGU6
Ci0gICAgICAgICAgICBfbG9nLmluZm8oZS5yZWFzb24pCi0gICAgICAgICAgICBzZWxmLmNhbmNl
bF93b3JrZXJzKCkKLSAgICAgICAgICAgIGludGVycnVwdGVkID0gVHJ1ZQotICAgICAgICBleGNl
cHQgV29ya2VyRXhjZXB0aW9uOgotICAgICAgICAgICAgc2VsZi5jYW5jZWxfd29ya2VycygpCi0g
ICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAjIFVuZXhwZWN0
ZWQgZXhjZXB0aW9uOyBkb24ndCB0cnkgdG8gY2xlYW4gdXAgd29ya2Vycy4KLSAgICAgICAgICAg
IF9sb2cuZXJyb3IoIkV4Y2VwdGlvbiByYWlzZWQsIGV4aXRpbmciKQotICAgICAgICAgICAgc2Vs
Zi5jYW5jZWxfd29ya2VycygpCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBmaW5hbGx5Ogot
ICAgICAgICAgICAgc2VsZi5zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKCkKLQotICAgICAgICB0aHJl
YWRfdGltaW5ncyA9IFt3b3JrZXJfc3RhdGUuc3RhdHMgZm9yIHdvcmtlcl9zdGF0ZSBpbiBzZWxm
Ll93b3JrZXJfc3RhdGVzLnZhbHVlcygpXQotCi0gICAgICAgICMgRklYTUU6IHNob3VsZCB0aGlz
IGJlIGEgY2xhc3MgaW5zdGVhZCBvZiBhIHR1cGxlPwotICAgICAgICByZXR1cm4gKGludGVycnVw
dGVkLCBrZXlib2FyZF9pbnRlcnJ1cHRlZCwgdGhyZWFkX3RpbWluZ3MsCi0gICAgICAgICAgICAg
ICAgc2VsZi5fZ3JvdXBfc3RhdHMsIHNlbGYuX2FsbF9yZXN1bHRzKQotCi0gICAgZGVmIHVwZGF0
ZShzZWxmKToKLSAgICAgICAgc2VsZi51cGRhdGVfc3VtbWFyeShzZWxmLl9jdXJyZW50X3Jlc3Vs
dF9zdW1tYXJ5KQotCi0gICAgZGVmIF9jb2xsZWN0X3RpbWluZ19pbmZvKHNlbGYsIHRocmVhZHMp
OgotICAgICAgICB0ZXN0X3RpbWluZ3MgPSB7fQotICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGlt
aW5ncyA9IFtdCi0gICAgICAgIHRocmVhZF90aW1pbmdzID0gW10KLQotICAgICAgICBmb3IgdGhy
ZWFkIGluIHRocmVhZHM6Ci0gICAgICAgICAgICB0aHJlYWRfdGltaW5ncy5hcHBlbmQoeyduYW1l
JzogdGhyZWFkLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J251bV90ZXN0cyc6IHRocmVhZC5nZXRfbnVtX3Rlc3RzKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICd0b3RhbF90aW1lJzogdGhyZWFkLmdldF90b3RhbF90aW1lKCl9KQot
ICAgICAgICAgICAgdGVzdF90aW1pbmdzLnVwZGF0ZSh0aHJlYWQuZ2V0X3Rlc3RfZ3JvdXBfdGlt
aW5nX3N0YXRzKCkpCi0gICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncy5leHRlbmQo
dGhyZWFkLmdldF90ZXN0X3Jlc3VsdHMoKSkKLQotICAgICAgICByZXR1cm4gKHRocmVhZF90aW1p
bmdzLCB0ZXN0X3RpbWluZ3MsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQotCi0gICAgZGVmIG5l
ZWRzX2h0dHAoc2VsZik6Ci0gICAgICAgICIiIlJldHVybnMgd2hldGhlciB0aGUgdGVzdCBydW5u
ZXIgbmVlZHMgYW4gSFRUUCBzZXJ2ZXIuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9jb250YWlu
c190ZXN0cyhzZWxmLkhUVFBfU1VCRElSKQotCi0gICAgZGVmIG5lZWRzX3dlYnNvY2tldChzZWxm
KToKLSAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSB0ZXN0IHJ1bm5lciBuZWVkcyBhIFdF
QlNPQ0tFVCBzZXJ2ZXIuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9jb250YWluc190ZXN0cyhz
ZWxmLldFQlNPQ0tFVF9TVUJESVIpCi0KLSAgICBkZWYgc2V0X3VwX3J1bihzZWxmKToKLSAgICAg
ICAgIiIiQ29uZmlndXJlcyB0aGUgc3lzdGVtIHRvIGJlIHJlYWR5IHRvIHJ1biB0ZXN0cy4KLQot
ICAgICAgICBSZXR1cm5zIGEgUmVzdWx0U3VtbWFyeSBvYmplY3QgaWYgd2Ugc2hvdWxkIGNvbnRp
bnVlIHRvIHJ1biB0ZXN0cywKLSAgICAgICAgb3IgTm9uZSBpZiB3ZSBzaG91bGQgYWJvcnQuCi0K
LSAgICAgICAgIiIiCi0gICAgICAgICMgVGhpcyBtdXN0IGJlIHN0YXJ0ZWQgYmVmb3JlIHdlIGNo
ZWNrIHRoZSBzeXN0ZW0gZGVwZW5kZW5jaWVzLAotICAgICAgICAjIHNpbmNlIHRoZSBoZWxwZXIg
bWF5IGRvIHRoaW5ncyB0byBtYWtlIHRoZSBzZXR1cCBjb3JyZWN0LgotICAgICAgICBzZWxmLl9w
cmludGVyLnByaW50X3VwZGF0ZSgiU3RhcnRpbmcgaGVscGVyIC4uLiIpCi0gICAgICAgIHNlbGYu
X3BvcnQuc3RhcnRfaGVscGVyKCkKLQotICAgICAgICAjIENoZWNrIHRoYXQgdGhlIHN5c3RlbSBk
ZXBlbmRlbmNpZXMgKHRoZW1lcywgZm9udHMsIC4uLikgYXJlIGNvcnJlY3QuCi0gICAgICAgIGlm
IG5vdCBzZWxmLl9vcHRpb25zLm5vY2hlY2tfc3lzX2RlcHM6Ci0gICAgICAgICAgICBzZWxmLl9w
cmludGVyLnByaW50X3VwZGF0ZSgiQ2hlY2tpbmcgc3lzdGVtIGRlcGVuZGVuY2llcyAuLi4iKQot
ICAgICAgICAgICAgaWYgbm90IHNlbGYuX3BvcnQuY2hlY2tfc3lzX2RlcHMoc2VsZi5uZWVkc19o
dHRwKCkpOgotICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9oZWxwZXIoKQotICAgICAg
ICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5jbG9iYmVy
X29sZF9yZXN1bHRzOgotICAgICAgICAgICAgc2VsZi5fY2xvYmJlcl9vbGRfcmVzdWx0cygpCi0K
LSAgICAgICAgIyBDcmVhdGUgdGhlIG91dHB1dCBkaXJlY3RvcnkgaWYgaXQgZG9lc24ndCBhbHJl
YWR5IGV4aXN0LgotICAgICAgICBzZWxmLl9wb3J0Lm1heWJlX21ha2VfZGlyZWN0b3J5KHNlbGYu
X3Jlc3VsdHNfZGlyZWN0b3J5KQotCi0gICAgICAgIHNlbGYuX3BvcnQuc2V0dXBfdGVzdF9ydW4o
KQotCi0gICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJQcmVwYXJpbmcgdGVzdHMg
Li4uIikKLSAgICAgICAgcmVzdWx0X3N1bW1hcnkgPSBzZWxmLnByZXBhcmVfbGlzdHNfYW5kX3By
aW50X291dHB1dCgpCi0gICAgICAgIGlmIG5vdCByZXN1bHRfc3VtbWFyeToKLSAgICAgICAgICAg
IHJldHVybiBOb25lCi0KLSAgICAgICAgcmV0dXJuIHJlc3VsdF9zdW1tYXJ5Ci0KLSAgICBkZWYg
cnVuKHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToKLSAgICAgICAgIiIiUnVuIGFsbCBvdXIgdGVzdHMg
b24gYWxsIG91ciB0ZXN0IGZpbGVzLgotCi0gICAgICAgIEZvciBlYWNoIHRlc3QgZmlsZSwgd2Ug
cnVuIGVhY2ggdGVzdCB0eXBlLiBJZiB0aGVyZSBhcmUgYW55IGZhaWx1cmVzLAotICAgICAgICB3
ZSBjb2xsZWN0IHRoZW0gZm9yIHJlcG9ydGluZy4KLQotICAgICAgICBBcmdzOgotICAgICAgICAg
IHJlc3VsdF9zdW1tYXJ5OiBhIHN1bW1hcnkgb2JqZWN0IHRyYWNraW5nIHRoZSB0ZXN0IHJlc3Vs
dHMuCi0KLSAgICAgICAgUmV0dXJuOgotICAgICAgICAgIFRoZSBudW1iZXIgb2YgdW5leHBlY3Rl
ZCByZXN1bHRzICgwID09IHN1Y2Nlc3MpCi0gICAgICAgICIiIgotICAgICAgICAjIGdhdGhlcl90
ZXN0X2ZpbGVzKCkgbXVzdCBoYXZlIGJlZW4gY2FsbGVkIGZpcnN0IHRvIGluaXRpYWxpemUgdXMu
Ci0gICAgICAgICMgSWYgd2UgZGlkbid0IGZpbmQgYW55IGZpbGVzIHRvIHRlc3QsIHdlJ3ZlIGVy
cm9yZWQgb3V0IGFscmVhZHkgaW4KLSAgICAgICAgIyBwcmVwYXJlX2xpc3RzX2FuZF9wcmludF9v
dXRwdXQoKS4KLSAgICAgICAgYXNzZXJ0KGxlbihzZWxmLl90ZXN0X2ZpbGVzKSkKLQotICAgICAg
ICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKLQotICAgICAgICBpbnRlcnJ1cHRlZCwga2V5Ym9h
cmRfaW50ZXJydXB0ZWQsIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsIGluZGl2aWR1YWxf
dGVzdF90aW1pbmdzID0gc2VsZi5fcnVuX3Rlc3RzKHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCwgcmVz
dWx0X3N1bW1hcnkpCi0KLSAgICAgICAgIyBXZSBleGNsdWRlIHRoZSBjcmFzaGVzIGZyb20gdGhl
IGxpc3Qgb2YgcmVzdWx0cyB0byByZXRyeSwgYmVjYXVzZQotICAgICAgICAjIHdlIHdhbnQgdG8g
dHJlYXQgZXZlbiBhIHBvdGVudGlhbGx5IGZsYWt5IGNyYXNoIGFzIGFuIGVycm9yLgotICAgICAg
ICBmYWlsdXJlcyA9IHNlbGYuX2dldF9mYWlsdXJlcyhyZXN1bHRfc3VtbWFyeSwgaW5jbHVkZV9j
cmFzaGVzPUZhbHNlLCBpbmNsdWRlX21pc3Npbmc9RmFsc2UpCi0gICAgICAgIHJldHJ5X3N1bW1h
cnkgPSByZXN1bHRfc3VtbWFyeQotICAgICAgICB3aGlsZSAobGVuKGZhaWx1cmVzKSBhbmQgc2Vs
Zi5fb3B0aW9ucy5yZXRyeV9mYWlsdXJlcyBhbmQgbm90IHNlbGYuX3JldHJ5aW5nIGFuZCBub3Qg
aW50ZXJydXB0ZWQgYW5kIG5vdCBrZXlib2FyZF9pbnRlcnJ1cHRlZCk6Ci0gICAgICAgICAgICBf
bG9nLmluZm8oJycpCi0gICAgICAgICAgICBfbG9nLmluZm8oIlJldHJ5aW5nICVkIHVuZXhwZWN0
ZWQgZmFpbHVyZShzKSAuLi4iICUgbGVuKGZhaWx1cmVzKSkKLSAgICAgICAgICAgIF9sb2cuaW5m
bygnJykKLSAgICAgICAgICAgIHNlbGYuX3JldHJ5aW5nID0gVHJ1ZQotICAgICAgICAgICAgcmV0
cnlfc3VtbWFyeSA9IFJlc3VsdFN1bW1hcnkoc2VsZi5fZXhwZWN0YXRpb25zLCBmYWlsdXJlcy5r
ZXlzKCkpCi0gICAgICAgICAgICAjIE5vdGUgdGhhdCB3ZSBpbnRlbnRpb25hbGx5IGlnbm9yZSB0
aGUgcmV0dXJuIHZhbHVlIGhlcmUuCi0gICAgICAgICAgICBzZWxmLl9ydW5fdGVzdHMoZmFpbHVy
ZXMua2V5cygpLCByZXRyeV9zdW1tYXJ5KQotICAgICAgICAgICAgZmFpbHVyZXMgPSBzZWxmLl9n
ZXRfZmFpbHVyZXMocmV0cnlfc3VtbWFyeSwgaW5jbHVkZV9jcmFzaGVzPVRydWUsIGluY2x1ZGVf
bWlzc2luZz1UcnVlKQotCi0gICAgICAgIGVuZF90aW1lID0gdGltZS50aW1lKCkKLQotICAgICAg
ICBzZWxmLl9wcmludF90aW1pbmdfc3RhdGlzdGljcyhlbmRfdGltZSAtIHN0YXJ0X3RpbWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZF90aW1pbmdzLCB0ZXN0
X3RpbWluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGl2aWR1
YWxfdGVzdF90aW1pbmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRfc3VtbWFyeSkKLQotICAgICAgICBzZWxmLl9wcmludF9yZXN1bHRfc3VtbWFyeShyZXN1
bHRfc3VtbWFyeSkKLQotICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgc3lzLnN0
ZGVyci5mbHVzaCgpCi0KLSAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9vbmVfbGluZV9zdW1t
YXJ5KHJlc3VsdF9zdW1tYXJ5LnRvdGFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkuZXhwZWN0ZWQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkKQot
Ci0gICAgICAgIHVuZXhwZWN0ZWRfcmVzdWx0cyA9IHN1bW1hcml6ZV9yZXN1bHRzKHNlbGYuX3Bv
cnQsIHNlbGYuX2V4cGVjdGF0aW9ucywgcmVzdWx0X3N1bW1hcnksIHJldHJ5X3N1bW1hcnksIGlu
ZGl2aWR1YWxfdGVzdF90aW1pbmdzLCBvbmx5X3VuZXhwZWN0ZWQ9VHJ1ZSwgaW50ZXJydXB0ZWQ9
aW50ZXJydXB0ZWQpCi0gICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdW5leHBlY3RlZF9yZXN1
bHRzKHVuZXhwZWN0ZWRfcmVzdWx0cykKLQotICAgICAgICAjIFJlLXJhaXNlIGEgS2V5Ym9hcmRJ
bnRlcnJ1cHQgaWYgbmVjZXNzYXJ5IHNvIHRoZSBjYWxsZXIgY2FuIGhhbmRsZSBpdC4KLSAgICAg
ICAgaWYga2V5Ym9hcmRfaW50ZXJydXB0ZWQ6Ci0gICAgICAgICAgICByYWlzZSBLZXlib2FyZElu
dGVycnVwdAotCi0gICAgICAgICMgRklYTUU6IHJlbW92ZSByZWNvcmRfcmVzdWx0cy4gSXQncyBq
dXN0IHVzZWQgZm9yIHRlc3RpbmcuIFRoZXJlJ3Mgbm8gbmVlZAotICAgICAgICAjIGZvciBpdCB0
byBiZSBhIGNvbW1hbmRsaW5lIGFyZ3VtZW50LgotICAgICAgICBpZiAoc2VsZi5fb3B0aW9ucy5y
ZWNvcmRfcmVzdWx0cyBhbmQgbm90IHNlbGYuX29wdGlvbnMuZHJ5X3J1biBhbmQKLSAgICAgICAg
ICAgIG5vdCBrZXlib2FyZF9pbnRlcnJ1cHRlZCk6Ci0gICAgICAgICAgICAjIFdyaXRlIHRoZSBz
YW1lIGRhdGEgdG8gbG9nIGZpbGVzIGFuZCB1cGxvYWQgZ2VuZXJhdGVkIEpTT04gZmlsZXMKLSAg
ICAgICAgICAgICMgdG8gYXBwZW5naW5lIHNlcnZlci4KLSAgICAgICAgICAgIHN1bW1hcml6ZWRf
cmVzdWx0cyA9IHN1bW1hcml6ZV9yZXN1bHRzKHNlbGYuX3BvcnQsIHNlbGYuX2V4cGVjdGF0aW9u
cywgcmVzdWx0X3N1bW1hcnksIHJldHJ5X3N1bW1hcnksIGluZGl2aWR1YWxfdGVzdF90aW1pbmdz
LCBvbmx5X3VuZXhwZWN0ZWQ9RmFsc2UsIGludGVycnVwdGVkPWludGVycnVwdGVkKQotICAgICAg
ICAgICAgc2VsZi5fdXBsb2FkX2pzb25fZmlsZXModW5leHBlY3RlZF9yZXN1bHRzLCBzdW1tYXJp
emVkX3Jlc3VsdHMsIHJlc3VsdF9zdW1tYXJ5LCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKLQot
ICAgICAgICAjIFdyaXRlIHRoZSBzdW1tYXJ5IHRvIGRpc2sgKHJlc3VsdHMuaHRtbCkgYW5kIGRp
c3BsYXkgaXQgaWYgcmVxdWVzdGVkLgotICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5kcnlf
cnVuOgotICAgICAgICAgICAgc2VsZi5fY29weV9yZXN1bHRzX2h0bWxfZmlsZSgpCi0gICAgICAg
ICAgICBpZiBzZWxmLl9vcHRpb25zLnNob3dfcmVzdWx0czoKLSAgICAgICAgICAgICAgICBzZWxm
Ll9zaG93X3Jlc3VsdHNfaHRtbF9maWxlKHJlc3VsdF9zdW1tYXJ5KQotCi0gICAgICAgICMgSWdu
b3JlIGZsYWt5IGZhaWx1cmVzIGFuZCB1bmV4cGVjdGVkIHBhc3NlcyBzbyB3ZSBkb24ndCB0dXJu
IHRoZQotICAgICAgICAjIGJvdCByZWQgZm9yIHRob3NlLgotICAgICAgICByZXR1cm4gdW5leHBl
Y3RlZF9yZXN1bHRzWydudW1fcmVncmVzc2lvbnMnXQotCi0gICAgZGVmIHN0YXJ0X3NlcnZlcnNf
d2l0aF9sb2NrKHNlbGYpOgotICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnQWNx
dWlyaW5nIGh0dHAgbG9jayAuLi4nKQotICAgICAgICBzZWxmLl9wb3J0LmFjcXVpcmVfaHR0cF9s
b2NrKCkKLSAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0aW5nIEhUVFAg
c2VydmVyIC4uLicpCi0gICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIoKQotICAg
ICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgV2ViU29ja2V0IHNlcnZl
ciAuLi4nKQotICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQotICAg
ICAgICBzZWxmLl9oYXNfaHR0cF9sb2NrID0gVHJ1ZQotCi0gICAgZGVmIHN0b3Bfc2VydmVyc193
aXRoX2xvY2soc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX2hhc19odHRwX2xvY2s6Ci0gICAgICAg
ICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RvcHBpbmcgSFRUUCBzZXJ2ZXIgLi4u
JykKLSAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9odHRwX3NlcnZlcigpCi0gICAgICAgICAg
ICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RvcHBpbmcgV2ViU29ja2V0IHNlcnZlciAu
Li4nKQotICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIoKQotICAg
ICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1JlbGVhc2luZyBzZXJ2ZXIgbG9j
ayAuLi4nKQotICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxlYXNlX2h0dHBfbG9jaygpCi0gICAg
ICAgICAgICBzZWxmLl9oYXNfaHR0cF9sb2NrID0gRmFsc2UKLQotICAgIGRlZiBjbGVhbl91cF9y
dW4oc2VsZik6Ci0gICAgICAgICIiIlJlc3RvcmVzIHRoZSBzeXN0ZW0gYWZ0ZXIgd2UncmUgZG9u
ZSBydW5uaW5nIHRlc3RzLiIiIgotCi0gICAgICAgIF9sb2cuZGVidWcoImZsdXNoaW5nIHN0ZG91
dCIpCi0gICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICBfbG9nLmRlYnVnKCJmbHVz
aGluZyBzdGRlcnIiKQotICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKLSAgICAgICAgX2xvZy5k
ZWJ1Zygic3RvcHBpbmcgaGVscGVyIikKLSAgICAgICAgc2VsZi5fcG9ydC5zdG9wX2hlbHBlcigp
Ci0KLSAgICBkZWYgdXBkYXRlX3N1bW1hcnkoc2VsZiwgcmVzdWx0X3N1bW1hcnkpOgotICAgICAg
ICAiIiJVcGRhdGUgdGhlIHN1bW1hcnkgYW5kIHByaW50IHJlc3VsdHMgd2l0aCBhbnkgY29tcGxl
dGVkIHRlc3RzLiIiIgotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHRlc3RfcmVzdWx0cy5UZXN0UmVzdWx0LmxvYWRzKHNlbGYu
X3Jlc3VsdF9xdWV1ZS5nZXRfbm93YWl0KCkpCi0gICAgICAgICAgICBleGNlcHQgUXVldWUuRW1w
dHk6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9wcm9ncmVzcyhyZXN1bHRf
c3VtbWFyeSwgc2VsZi5fcmV0cnlpbmcsIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4KLQotICAgICAgICAgICAgc2VsZi5fdXBkYXRlX3N1bW1hcnlfd2l0aF9y
ZXN1bHQocmVzdWx0X3N1bW1hcnksIHJlc3VsdCkKLQotICAgIGRlZiBfaW50ZXJydXB0X2lmX2F0
X2ZhaWx1cmVfbGltaXRzKHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToKLSAgICAgICAgIyBOb3RlOiBU
aGUgbWVzc2FnZXMgaW4gdGhpcyBtZXRob2QgYXJlIGNvbnN0cnVjdGVkIHRvIG1hdGNoIG9sZC1y
dW4td2Via2l0LXRlc3RzCi0gICAgICAgICMgc28gdGhhdCBleGlzdGluZyBidWlsZGJvdCBncmVw
IHJ1bGVzIHdvcmsuCi0gICAgICAgIGRlZiBpbnRlcnJ1cHRfaWZfYXRfZmFpbHVyZV9saW1pdChs
aW1pdCwgZmFpbHVyZV9jb3VudCwgcmVzdWx0X3N1bW1hcnksIG1lc3NhZ2UpOgotICAgICAgICAg
ICAgaWYgbGltaXQgYW5kIGZhaWx1cmVfY291bnQgPj0gbGltaXQ6Ci0gICAgICAgICAgICAgICAg
bWVzc2FnZSArPSAiICVkIHRlc3RzIHJ1bi4iICUgKHJlc3VsdF9zdW1tYXJ5LmV4cGVjdGVkICsg
cmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZCkKLSAgICAgICAgICAgICAgICByYWlzZSBUZXN0UnVu
SW50ZXJydXB0ZWRFeGNlcHRpb24obWVzc2FnZSkKLQotICAgICAgICBpbnRlcnJ1cHRfaWZfYXRf
ZmFpbHVyZV9saW1pdCgKLSAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuZXhpdF9hZnRlcl9uX2Zh
aWx1cmVzLAotICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZF9mYWlsdXJlcywK
LSAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LAotICAgICAgICAgICAgIkV4aXRpbmcgZWFybHkg
YWZ0ZXIgJWQgZmFpbHVyZXMuIiAlIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRfZmFpbHVyZXMp
Ci0gICAgICAgIGludGVycnVwdF9pZl9hdF9mYWlsdXJlX2xpbWl0KAotICAgICAgICAgICAgc2Vs
Zi5fb3B0aW9ucy5leGl0X2FmdGVyX25fY3Jhc2hlc19vcl90aW1lb3V0cywKLSAgICAgICAgICAg
IHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRfY3Jhc2hlcyArIHJlc3VsdF9zdW1tYXJ5LnVuZXhw
ZWN0ZWRfdGltZW91dHMsCi0gICAgICAgICAgICByZXN1bHRfc3VtbWFyeSwKLSAgICAgICAgICAg
ICMgVGhpcyBkaWZmZXJzIGZyb20gT1JXVCBiZWNhdXNlIGl0IGRvZXMgbm90IGluY2x1ZGUgV2Vi
UHJvY2VzcyBjcmFzaGVzLgotICAgICAgICAgICAgIkV4aXRpbmcgZWFybHkgYWZ0ZXIgJWQgY3Jh
c2hlcyBhbmQgJWQgdGltZW91dHMuIiAlIChyZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkX2NyYXNo
ZXMsIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRfdGltZW91dHMpKQotCi0gICAgZGVmIF91cGRh
dGVfc3VtbWFyeV93aXRoX3Jlc3VsdChzZWxmLCByZXN1bHRfc3VtbWFyeSwgcmVzdWx0KToKLSAg
ICAgICAgaWYgcmVzdWx0LnR5cGUgPT0gdGVzdF9leHBlY3RhdGlvbnMuU0tJUDoKLSAgICAgICAg
ICAgIHJlc3VsdF9zdW1tYXJ5LmFkZChyZXN1bHQsIGV4cGVjdGVkPVRydWUpCi0gICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICBleHBlY3RlZCA9IHNlbGYuX2V4cGVjdGF0aW9ucy5tYXRjaGVzX2Fu
X2V4cGVjdGVkX3Jlc3VsdChyZXN1bHQudGVzdF9uYW1lLCByZXN1bHQudHlwZSwgc2VsZi5fb3B0
aW9ucy5waXhlbF90ZXN0cykKLSAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LmFkZChyZXN1bHQs
IGV4cGVjdGVkKQotICAgICAgICAgICAgZXhwX3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRf
ZXhwZWN0YXRpb25zX3N0cmluZyhyZXN1bHQudGVzdF9uYW1lKQotICAgICAgICAgICAgZ290X3N0
ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5leHBlY3RhdGlvbl90b19zdHJpbmcocmVzdWx0LnR5cGUp
Ci0gICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhw
ZWN0ZWQsIGV4cF9zdHIsIGdvdF9zdHIpCi0gICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfcHJv
Z3Jlc3MocmVzdWx0X3N1bW1hcnksIHNlbGYuX3JldHJ5aW5nLCBzZWxmLl90ZXN0X2ZpbGVzX2xp
c3QpCi0gICAgICAgIHNlbGYuX2ludGVycnVwdF9pZl9hdF9mYWlsdXJlX2xpbWl0cyhyZXN1bHRf
c3VtbWFyeSkKLQotICAgIGRlZiBfY2xvYmJlcl9vbGRfcmVzdWx0cyhzZWxmKToKLSAgICAgICAg
IyBKdXN0IGNsb2JiZXIgdGhlIGFjdHVhbCB0ZXN0IHJlc3VsdHMgZGlyZWN0b3JpZXMgc2luY2Ug
dGhlIG90aGVyCi0gICAgICAgICMgZmlsZXMgaW4gdGhlIHJlc3VsdHMgZGlyZWN0b3J5IGFyZSBl
eHBsaWNpdGx5IHVzZWQgZm9yIGNyb3NzLXJ1bgotICAgICAgICAjIHRyYWNraW5nLgotICAgICAg
ICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgiQ2xvYmJlcmluZyBvbGQgcmVzdWx0cyBpbiAl
cyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZXN1bHRzX2Rp
cmVjdG9yeSkKLSAgICAgICAgbGF5b3V0X3Rlc3RzX2RpciA9IHNlbGYuX3BvcnQubGF5b3V0X3Rl
c3RzX2RpcigpCi0gICAgICAgIHBvc3NpYmxlX2RpcnMgPSBzZWxmLl9wb3J0LnRlc3RfZGlycygp
Ci0gICAgICAgIGZvciBkaXJuYW1lIGluIHBvc3NpYmxlX2RpcnM6Ci0gICAgICAgICAgICBpZiBz
ZWxmLl9mcy5pc2RpcihzZWxmLl9mcy5qb2luKGxheW91dF90ZXN0c19kaXIsIGRpcm5hbWUpKToK
LSAgICAgICAgICAgICAgICBzZWxmLl9mcy5ybXRyZWUoc2VsZi5fZnMuam9pbihzZWxmLl9yZXN1
bHRzX2RpcmVjdG9yeSwgZGlybmFtZSkpCi0KLSAgICBkZWYgX2dldF9mYWlsdXJlcyhzZWxmLCBy
ZXN1bHRfc3VtbWFyeSwgaW5jbHVkZV9jcmFzaGVzLCBpbmNsdWRlX21pc3NpbmcpOgotICAgICAg
ICAiIiJGaWx0ZXJzIGEgZGljdCBvZiByZXN1bHRzIGFuZCByZXR1cm5zIG9ubHkgdGhlIGZhaWx1
cmVzLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHRoZSByZXN1
bHRzIG9mIHRoZSB0ZXN0IHJ1bgotICAgICAgICAgIGluY2x1ZGVfY3Jhc2hlczogd2hldGhlciBj
cmFzaGVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0LgotICAgICAgICAgICAgV2UgdXNlIEZh
bHNlIHdoZW4gZmluZGluZyB0aGUgbGlzdCBvZiBmYWlsdXJlcyB0byByZXRyeQotICAgICAgICAg
ICAgdG8gc2VlIGlmIHRoZSByZXN1bHRzIHdlcmUgZmxha3kuIEFsdGhvdWdoIHRoZSBjcmFzaGVz
IG1heSBhbHNvIGJlCi0gICAgICAgICAgICBmbGFreSwgd2UgdHJlYXQgdGhlbSBhcyBpZiB0aGV5
IGFyZW4ndCBzbyB0aGF0IHRoZXkncmUgbm90IGlnbm9yZWQuCi0gICAgICAgIFJldHVybnM6Ci0g
ICAgICAgICAgYSBkaWN0IG9mIGZpbGVzIC0+IHJlc3VsdHMKLSAgICAgICAgIiIiCi0gICAgICAg
IGZhaWxlZF9yZXN1bHRzID0ge30KLSAgICAgICAgZm9yIHRlc3QsIHJlc3VsdCBpbiByZXN1bHRf
c3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHMuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICBpZiAo
cmVzdWx0LnR5cGUgPT0gdGVzdF9leHBlY3RhdGlvbnMuUEFTUyBvcgotICAgICAgICAgICAgICAg
IChyZXN1bHQudHlwZSA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSCBhbmQgbm90IGluY2x1ZGVf
Y3Jhc2hlcykgb3IKLSAgICAgICAgICAgICAgICAocmVzdWx0LnR5cGUgPT0gdGVzdF9leHBlY3Rh
dGlvbnMuTUlTU0lORyBhbmQgbm90IGluY2x1ZGVfbWlzc2luZykpOgotICAgICAgICAgICAgICAg
IGNvbnRpbnVlCi0gICAgICAgICAgICBmYWlsZWRfcmVzdWx0c1t0ZXN0XSA9IHJlc3VsdC50eXBl
Ci0KLSAgICAgICAgcmV0dXJuIGZhaWxlZF9yZXN1bHRzCi0KLSAgICBkZWYgX2NoYXJfZm9yX3Jl
c3VsdChzZWxmLCByZXN1bHQpOgotICAgICAgICByZXN1bHQgPSByZXN1bHQubG93ZXIoKQotICAg
ICAgICBpZiByZXN1bHQgaW4gVGVzdEV4cGVjdGF0aW9ucy5FWFBFQ1RBVElPTlM6Ci0gICAgICAg
ICAgICByZXN1bHRfZW51bV92YWx1ZSA9IFRlc3RFeHBlY3RhdGlvbnMuRVhQRUNUQVRJT05TW3Jl
c3VsdF0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJlc3VsdF9lbnVtX3ZhbHVlID0gVGVz
dEV4cGVjdGF0aW9ucy5NT0RJRklFUlNbcmVzdWx0XQotICAgICAgICByZXR1cm4ganNvbl9sYXlv
dXRfcmVzdWx0c19nZW5lcmF0b3IuSlNPTkxheW91dFJlc3VsdHNHZW5lcmF0b3IuRkFJTFVSRV9U
T19DSEFSW3Jlc3VsdF9lbnVtX3ZhbHVlXQotCi0gICAgZGVmIF91cGxvYWRfanNvbl9maWxlcyhz
ZWxmLCB1bmV4cGVjdGVkX3Jlc3VsdHMsIHN1bW1hcml6ZWRfcmVzdWx0cywgcmVzdWx0X3N1bW1h
cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyk6
Ci0gICAgICAgICIiIldyaXRlcyB0aGUgcmVzdWx0cyBvZiB0aGUgdGVzdCBydW4gYXMgSlNPTiBm
aWxlcyBpbnRvIHRoZSByZXN1bHRzCi0gICAgICAgIGRpciBhbmQgdXBsb2FkIHRoZSBmaWxlcyB0
byB0aGUgYXBwZW5naW5lIHNlcnZlci4KLQotICAgICAgICBUaGVyZSBhcmUgdGhyZWUgZGlmZmVy
ZW50IGZpbGVzIHdyaXR0ZW4gaW50byB0aGUgcmVzdWx0cyBkaXI6Ci0gICAgICAgICAgdW5leHBl
Y3RlZF9yZXN1bHRzLmpzb246IEEgc2hvcnQgbGlzdCBvZiBhbnkgdW5leHBlY3RlZCByZXN1bHRz
LgotICAgICAgICAgICAgVGhpcyBpcyB1c2VkIGJ5IHRoZSBidWlsZGJvdHMgdG8gZGlzcGxheSBy
ZXN1bHRzLgotICAgICAgICAgIGV4cGVjdGF0aW9ucy5qc29uOiBUaGlzIGlzIHVzZWQgYnkgdGhl
IGZsYWtpbmVzcyBkYXNoYm9hcmQuCi0gICAgICAgICAgcmVzdWx0cy5qc29uOiBBIGZ1bGwgbGlz
dCBvZiB0aGUgcmVzdWx0cyAtIHVzZWQgYnkgdGhlIGZsYWtpbmVzcwotICAgICAgICAgICAgZGFz
aGJvYXJkIGFuZCB0aGUgYWdncmVnYXRlIHJlc3VsdHMgZGFzaGJvYXJkLgotCi0gICAgICAgIEFy
Z3M6Ci0gICAgICAgICAgdW5leHBlY3RlZF9yZXN1bHRzOiBkaWN0IG9mIHVuZXhwZWN0ZWQgcmVz
dWx0cwotICAgICAgICAgIHN1bW1hcml6ZWRfcmVzdWx0czogZGljdCBvZiByZXN1bHRzCi0gICAg
ICAgICAgcmVzdWx0X3N1bW1hcnk6IGZ1bGwgc3VtbWFyeSBvYmplY3QKLSAgICAgICAgICBpbmRp
dmlkdWFsX3Rlc3RfdGltaW5nczogbGlzdCBvZiB0ZXN0IHRpbWVzICh1c2VkIGJ5IHRoZSBmbGFr
aW5lc3MKLSAgICAgICAgICAgIGRhc2hib2FyZCkuCi0gICAgICAgICIiIgotICAgICAgICBfbG9n
LmRlYnVnKCJXcml0aW5nIEpTT04gZmlsZXMgaW4gJXMuIiAlIHNlbGYuX3Jlc3VsdHNfZGlyZWN0
b3J5KQotCi0gICAgICAgIHRpbWVzX3RyaWUgPSBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnRlc3Rf
dGltaW5nc190cmllKHNlbGYuX3BvcnQsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQotICAgICAg
ICB0aW1lc19qc29uX3BhdGggPSBzZWxmLl9mcy5qb2luKHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5
LCAidGltZXNfbXMuanNvbiIpCi0gICAgICAgIGpzb25fcmVzdWx0c19nZW5lcmF0b3Iud3JpdGVf
anNvbihzZWxmLl9mcywgdGltZXNfdHJpZSwgdGltZXNfanNvbl9wYXRoKQotCi0gICAgICAgIHVu
ZXhwZWN0ZWRfanNvbl9wYXRoID0gc2VsZi5fZnMuam9pbihzZWxmLl9yZXN1bHRzX2RpcmVjdG9y
eSwgInVuZXhwZWN0ZWRfcmVzdWx0cy5qc29uIikKLSAgICAgICAganNvbl9yZXN1bHRzX2dlbmVy
YXRvci53cml0ZV9qc29uKHNlbGYuX2ZzLCB1bmV4cGVjdGVkX3Jlc3VsdHMsIHVuZXhwZWN0ZWRf
anNvbl9wYXRoKQotCi0gICAgICAgIGZ1bGxfcmVzdWx0c19wYXRoID0gc2VsZi5fZnMuam9pbihz
ZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSwgImZ1bGxfcmVzdWx0cy5qc29uIikKLSAgICAgICAganNv
bl9yZXN1bHRzX2dlbmVyYXRvci53cml0ZV9qc29uKHNlbGYuX2ZzLCBzdW1tYXJpemVkX3Jlc3Vs
dHMsIGZ1bGxfcmVzdWx0c19wYXRoKQotCi0gICAgICAgICMgV3JpdGUgYSBqc29uIGZpbGUgb2Yg
dGhlIHRlc3RfZXhwZWN0YXRpb25zLnR4dCBmaWxlIGZvciB0aGUgbGF5b3V0Ci0gICAgICAgICMg
dGVzdHMgZGFzaGJvYXJkLgotICAgICAgICBleHBlY3RhdGlvbnNfcGF0aCA9IHNlbGYuX2ZzLmpv
aW4oc2VsZi5fcmVzdWx0c19kaXJlY3RvcnksICJleHBlY3RhdGlvbnMuanNvbiIpCi0gICAgICAg
IGV4cGVjdGF0aW9uc19qc29uID0gXAotICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zLmdl
dF9leHBlY3RhdGlvbnNfanNvbl9mb3JfYWxsX3BsYXRmb3JtcygpCi0gICAgICAgIHNlbGYuX2Zz
LndyaXRlX3RleHRfZmlsZShleHBlY3RhdGlvbnNfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHUiQUREX0VYUEVDVEFUSU9OUyglcyk7IiAlIGV4cGVjdGF0aW9uc19qc29u
KQotCi0gICAgICAgIGdlbmVyYXRvciA9IGpzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLkpT
T05MYXlvdXRSZXN1bHRzR2VuZXJhdG9yKAotICAgICAgICAgICAgc2VsZi5fcG9ydCwgc2VsZi5f
b3B0aW9ucy5idWlsZGVyX25hbWUsIHNlbGYuX29wdGlvbnMuYnVpbGRfbmFtZSwKLSAgICAgICAg
ICAgIHNlbGYuX29wdGlvbnMuYnVpbGRfbnVtYmVyLCBzZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSwK
LSAgICAgICAgICAgIEJVSUxERVJfQkFTRV9VUkwsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAot
ICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zLCByZXN1bHRfc3VtbWFyeSwgc2VsZi5fdGVz
dF9maWxlc19saXN0LAotICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy50ZXN0X3Jlc3VsdHNfc2Vy
dmVyLAotICAgICAgICAgICAgImxheW91dC10ZXN0cyIsCi0gICAgICAgICAgICBzZWxmLl9vcHRp
b25zLm1hc3Rlcl9uYW1lKQotCi0gICAgICAgIF9sb2cuZGVidWcoIkZpbmlzaGVkIHdyaXRpbmcg
SlNPTiBmaWxlcy4iKQotCi0gICAgICAgIGpzb25fZmlsZXMgPSBbImV4cGVjdGF0aW9ucy5qc29u
IiwgImluY3JlbWVudGFsX3Jlc3VsdHMuanNvbiIsICJmdWxsX3Jlc3VsdHMuanNvbiIsICJ0aW1l
c19tcy5qc29uIl0KLQotICAgICAgICBnZW5lcmF0b3IudXBsb2FkX2pzb25fZmlsZXMoanNvbl9m
aWxlcykKLQotICAgIGRlZiBfcHJpbnRfY29uZmlnKHNlbGYpOgotICAgICAgICAiIiJQcmludHMg
dGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB0ZXN0IHJ1bi4iIiIKLSAgICAgICAgcCA9IHNlbGYu
X3ByaW50ZXIKLSAgICAgICAgcC5wcmludF9jb25maWcoIlVzaW5nIHBvcnQgJyVzJyIgJSBzZWxm
Ll9wb3J0Lm5hbWUoKSkKLSAgICAgICAgcC5wcmludF9jb25maWcoIlRlc3QgY29uZmlndXJhdGlv
bjogJXMiICUgc2VsZi5fcG9ydC50ZXN0X2NvbmZpZ3VyYXRpb24oKSkKLSAgICAgICAgcC5wcmlu
dF9jb25maWcoIlBsYWNpbmcgdGVzdCByZXN1bHRzIGluICVzIiAlIHNlbGYuX3Jlc3VsdHNfZGly
ZWN0b3J5KQotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLm5ld19iYXNlbGluZToKLSAgICAgICAg
ICAgIHAucHJpbnRfY29uZmlnKCJQbGFjaW5nIG5ldyBiYXNlbGluZXMgaW4gJXMiICUKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuYmFzZWxpbmVfcGF0aCgpKQotICAgICAg
ICBwLnByaW50X2NvbmZpZygiVXNpbmcgJXMgYnVpbGQiICUgc2VsZi5fb3B0aW9ucy5jb25maWd1
cmF0aW9uKQotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzOgotICAgICAgICAg
ICAgcC5wcmludF9jb25maWcoIlBpeGVsIHRlc3RzIGVuYWJsZWQiKQotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgcC5wcmludF9jb25maWcoIlBpeGVsIHRlc3RzIGRpc2FibGVkIikKLQotICAg
ICAgICBwLnByaW50X2NvbmZpZygiUmVndWxhciB0aW1lb3V0OiAlcywgc2xvdyB0ZXN0IHRpbWVv
dXQ6ICVzIiAlCi0gICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9vcHRpb25zLnRpbWVfb3V0
X21zLAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5zbG93X3RpbWVfb3V0
X21zKSkKLQotICAgICAgICBwLnByaW50X2NvbmZpZygnQ29tbWFuZCBsaW5lOiAnICsKLSAgICAg
ICAgICAgICAgICAgICAgICAgJyAnLmpvaW4oc2VsZi5fcG9ydC5kcml2ZXJfY21kX2xpbmUoKSkp
Ci0gICAgICAgIHAucHJpbnRfY29uZmlnKCJXb3JrZXIgbW9kZWw6ICVzIiAlIHNlbGYuX29wdGlv
bnMud29ya2VyX21vZGVsKQotICAgICAgICBwLnByaW50X2NvbmZpZygiIikKLQotICAgIGRlZiBf
cHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90eXBlKHNlbGYsIHJlc3VsdF9zdW1tYXJ5LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF90eXBlLCByZXN1bHRf
dHlwZV9zdHIpOgotICAgICAgICAiIiJQcmludCB0aGUgbnVtYmVyIG9mIHRoZSB0ZXN0cyBpbiBh
IGdpdmVuIHJlc3VsdCBjbGFzcy4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgIHJlc3VsdF9z
dW1tYXJ5IC0gdGhlIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgcmVzdWx0cyB0byByZXBvcnQg
b24KLSAgICAgICAgICByZXN1bHRfdHlwZSAtIHRoZSBwYXJ0aWN1bGFyIHJlc3VsdCB0eXBlIHRv
IHJlcG9ydCBpbiB0aGUgc3VtbWFyeS4KLSAgICAgICAgICByZXN1bHRfdHlwZV9zdHIgLSBhIHN0
cmluZyBkZXNjcmlwdGlvbiBvZiB0aGUgcmVzdWx0X3R5cGUuCi0gICAgICAgICIiIgotICAgICAg
ICB0ZXN0cyA9IHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfdGVzdHNfd2l0aF9yZXN1bHRfdHlwZShy
ZXN1bHRfdHlwZSkKLSAgICAgICAgbm93ID0gcmVzdWx0X3N1bW1hcnkudGVzdHNfYnlfdGltZWxp
bmVbdGVzdF9leHBlY3RhdGlvbnMuTk9XXQotICAgICAgICB3b250Zml4ID0gcmVzdWx0X3N1bW1h
cnkudGVzdHNfYnlfdGltZWxpbmVbdGVzdF9leHBlY3RhdGlvbnMuV09OVEZJWF0KLQotICAgICAg
ICAjIFdlIHVzZSBhIGZhbmN5IGZvcm1hdCBzdHJpbmcgaW4gb3JkZXIgdG8gcHJpbnQgdGhlIGRh
dGEgb3V0IGluIGEKLSAgICAgICAgIyBuaWNlbHktYWxpZ25lZCB0YWJsZS4KLSAgICAgICAgZm10
c3RyID0gKCJFeHBlY3Q6ICUlNWQgJSUtOHMgKCUlJWRkIG5vdywgJSUlZGQgd29udGZpeCkiCi0g
ICAgICAgICAgICAgICAgICAlIChzZWxmLl9udW1fZGlnaXRzKG5vdyksIHNlbGYuX251bV9kaWdp
dHMod29udGZpeCkpKQotICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2V4cGVjdGVkKGZtdHN0
ciAlCi0gICAgICAgICAgICAobGVuKHRlc3RzKSwgcmVzdWx0X3R5cGVfc3RyLCBsZW4odGVzdHMg
JiBub3cpLCBsZW4odGVzdHMgJiB3b250Zml4KSkpCi0KLSAgICBkZWYgX251bV9kaWdpdHMoc2Vs
ZiwgbnVtKToKLSAgICAgICAgIiIiUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBuZWVkZWQg
dG8gcmVwcmVzZW50IHRoZSBsZW5ndGggb2YgYQotICAgICAgICBzZXF1ZW5jZS4iIiIKLSAgICAg
ICAgbmRpZ2l0cyA9IDEKLSAgICAgICAgaWYgbGVuKG51bSk6Ci0gICAgICAgICAgICBuZGlnaXRz
ID0gaW50KG1hdGgubG9nMTAobGVuKG51bSkpKSArIDEKLSAgICAgICAgcmV0dXJuIG5kaWdpdHMK
LQotICAgIGRlZiBfcHJpbnRfdGltaW5nX3N0YXRpc3RpY3Moc2VsZiwgdG90YWxfdGltZSwgdGhy
ZWFkX3RpbWluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5X3Rl
c3RfdGltaW5ncywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpOgotICAgICAgICAiIiJSZWNvcmQgdGltaW5nLXNw
ZWNpZmljIGluZm9ybWF0aW9uIGZvciB0aGUgdGVzdCBydW4uCi0KLSAgICAgICAgQXJnczoKLSAg
ICAgICAgICB0b3RhbF90aW1lOiB0b3RhbCBlbGFwc2VkIHRpbWUgKGluIHNlY29uZHMpIGZvciB0
aGUgdGVzdCBydW4KLSAgICAgICAgICB0aHJlYWRfdGltaW5nczogd2FsbCBjbG9jayB0aW1lIGVh
Y2ggdGhyZWFkIHJhbiBmb3IKLSAgICAgICAgICBkaXJlY3RvcnlfdGVzdF90aW1pbmdzOiB0aW1p
bmcgYnkgZGlyZWN0b3J5Ci0gICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3M6IHRpbWlu
ZyBieSBmaWxlCi0gICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IGZvciB0
aGUgdGVzdCBydW4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGlt
aW5nKCJUZXN0IHRpbWluZzoiKQotICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygi
ICAlNi4yZiB0b3RhbCB0ZXN0aW5nIHRpbWUiICUgdG90YWxfdGltZSkKLSAgICAgICAgc2VsZi5f
cHJpbnRlci5wcmludF90aW1pbmcoIiIpCi0gICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGlt
aW5nKCJUaHJlYWQgdGltaW5nOiIpCi0gICAgICAgIGN1bWxfdGltZSA9IDAKLSAgICAgICAgZm9y
IHQgaW4gdGhyZWFkX3RpbWluZ3M6Ci0gICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3Rp
bWluZygiICAgICUxMHM6ICU1ZCB0ZXN0cywgJTYuMmYgc2VjcyIgJQotICAgICAgICAgICAgICAg
ICAgKHRbJ25hbWUnXSwgdFsnbnVtX3Rlc3RzJ10sIHRbJ3RvdGFsX3RpbWUnXSkpCi0gICAgICAg
ICAgICBjdW1sX3RpbWUgKz0gdFsndG90YWxfdGltZSddCi0gICAgICAgIHNlbGYuX3ByaW50ZXIu
cHJpbnRfdGltaW5nKCIgICAlNi4yZiBjdW11bGF0aXZlLCAlNi4yZiBvcHRpbWFsIiAlCi0gICAg
ICAgICAgICAgIChjdW1sX3RpbWUsIGN1bWxfdGltZSAvIGludChzZWxmLl9vcHRpb25zLmNoaWxk
X3Byb2Nlc3NlcykpKQotICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiIikKLQot
ICAgICAgICBzZWxmLl9wcmludF9hZ2dyZWdhdGVfdGVzdF9zdGF0aXN0aWNzKGluZGl2aWR1YWxf
dGVzdF90aW1pbmdzKQotICAgICAgICBzZWxmLl9wcmludF9pbmRpdmlkdWFsX3Rlc3RfdGltZXMo
aW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKLSAgICAgICAgc2VsZi5fcHJpbnRfZGlyZWN0b3J5
X3RpbWluZ3MoZGlyZWN0b3J5X3Rlc3RfdGltaW5ncykKLQotICAgIGRlZiBfcHJpbnRfYWdncmVn
YXRlX3Rlc3Rfc3RhdGlzdGljcyhzZWxmLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyk6Ci0gICAg
ICAgICIiIlByaW50cyBhZ2dyZWdhdGUgc3RhdGlzdGljcyAoZS5nLiBtZWRpYW4sIG1lYW4sIGV0
Yy4pIGZvciBhbGwgdGVzdHMuCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgaW5kaXZpZHVhbF90
ZXN0X3RpbWluZ3M6IExpc3Qgb2YgVGVzdFJlc3VsdHMgZm9yIGFsbCB0ZXN0cy4KLSAgICAgICAg
IiIiCi0gICAgICAgIHRpbWVzX2Zvcl9kdW1wX3JlbmRlcl90cmVlID0gW3Rlc3Rfc3RhdHMudGVz
dF9ydW5fdGltZSBmb3IgdGVzdF9zdGF0cyBpbiBpbmRpdmlkdWFsX3Rlc3RfdGltaW5nc10KLSAg
ICAgICAgc2VsZi5fcHJpbnRfc3RhdGlzdGljc19mb3JfdGVzdF90aW1pbmdzKCJQRVIgVEVTVCBU
SU1FIElOIFRFU1RTSEVMTCAoc2Vjb25kcyk6IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRpbWVzX2Zvcl9kdW1wX3JlbmRlcl90cmVlKQotCi0gICAg
ZGVmIF9wcmludF9pbmRpdmlkdWFsX3Rlc3RfdGltZXMoc2VsZiwgaW5kaXZpZHVhbF90ZXN0X3Rp
bWluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkp
OgotICAgICAgICAiIiJQcmludHMgdGhlIHJ1biB0aW1lcyBmb3Igc2xvdywgdGltZW91dCBhbmQg
Y3Jhc2ggdGVzdHMuCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3Rp
bWluZ3M6IExpc3Qgb2YgVGVzdFN0YXRzIGZvciBhbGwgdGVzdHMuCi0gICAgICAgICAgcmVzdWx0
X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IGZvciB0ZXN0IHJ1bgotICAgICAgICAiIiIKLSAgICAg
ICAgIyBSZXZlcnNlLXNvcnQgYnkgdGhlIHRpbWUgc3BlbnQgaW4gRHVtcFJlbmRlclRyZWUuCi0g
ICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLnNvcnQobGFtYmRhIGEsIGI6Ci0gICAgICAg
ICAgICBjbXAoYi50ZXN0X3J1bl90aW1lLCBhLnRlc3RfcnVuX3RpbWUpKQotCi0gICAgICAgIG51
bV9wcmludGVkID0gMAotICAgICAgICBzbG93X3Rlc3RzID0gW10KLSAgICAgICAgdGltZW91dF9v
cl9jcmFzaF90ZXN0cyA9IFtdCi0gICAgICAgIHVuZXhwZWN0ZWRfc2xvd190ZXN0cyA9IFtdCi0g
ICAgICAgIGZvciB0ZXN0X3R1cGxlIGluIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzOgotICAgICAg
ICAgICAgdGVzdF9uYW1lID0gdGVzdF90dXBsZS50ZXN0X25hbWUKLSAgICAgICAgICAgIGlzX3Rp
bWVvdXRfY3Jhc2hfb3Jfc2xvdyA9IEZhbHNlCi0gICAgICAgICAgICBpZiBzZWxmLl90ZXN0X2lz
X3Nsb3codGVzdF9uYW1lKToKLSAgICAgICAgICAgICAgICBpc190aW1lb3V0X2NyYXNoX29yX3Ns
b3cgPSBUcnVlCi0gICAgICAgICAgICAgICAgc2xvd190ZXN0cy5hcHBlbmQodGVzdF90dXBsZSkK
LQotICAgICAgICAgICAgaWYgdGVzdF9uYW1lIGluIHJlc3VsdF9zdW1tYXJ5LmZhaWx1cmVzOgot
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdF9zdW1tYXJ5LnJlc3VsdHNbdGVzdF9uYW1l
XS50eXBlCi0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5U
SU1FT1VUIG9yCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9PSB0ZXN0X2V4cGVjdGF0aW9u
cy5DUkFTSCk6Ci0gICAgICAgICAgICAgICAgICAgIGlzX3RpbWVvdXRfY3Jhc2hfb3Jfc2xvdyA9
IFRydWUKLSAgICAgICAgICAgICAgICAgICAgdGltZW91dF9vcl9jcmFzaF90ZXN0cy5hcHBlbmQo
dGVzdF90dXBsZSkKLQotICAgICAgICAgICAgaWYgKG5vdCBpc190aW1lb3V0X2NyYXNoX29yX3Ns
b3cgYW5kCi0gICAgICAgICAgICAgICAgbnVtX3ByaW50ZWQgPCBwcmludGluZy5OVU1fU0xPV19U
RVNUU19UT19MT0cpOgotICAgICAgICAgICAgICAgIG51bV9wcmludGVkID0gbnVtX3ByaW50ZWQg
KyAxCi0gICAgICAgICAgICAgICAgdW5leHBlY3RlZF9zbG93X3Rlc3RzLmFwcGVuZCh0ZXN0X3R1
cGxlKQotCi0gICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIiKQotICAgICAgICBz
ZWxmLl9wcmludF90ZXN0X2xpc3RfdGltaW5nKCIlcyBzbG93ZXN0IHRlc3RzIHRoYXQgYXJlIG5v
dCAiCi0gICAgICAgICAgICAibWFya2VkIGFzIFNMT1cgYW5kIGRpZCBub3QgdGltZW91dC9jcmFz
aDoiICUKLSAgICAgICAgICAgIHByaW50aW5nLk5VTV9TTE9XX1RFU1RTX1RPX0xPRywgdW5leHBl
Y3RlZF9zbG93X3Rlc3RzKQotICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiIikK
LSAgICAgICAgc2VsZi5fcHJpbnRfdGVzdF9saXN0X3RpbWluZygiVGVzdHMgbWFya2VkIGFzIFNM
T1c6Iiwgc2xvd190ZXN0cykKLSAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiIp
Ci0gICAgICAgIHNlbGYuX3ByaW50X3Rlc3RfbGlzdF90aW1pbmcoIlRlc3RzIHRoYXQgdGltZWQg
b3V0IG9yIGNyYXNoZWQ6IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aW1lb3V0X29yX2NyYXNoX3Rlc3RzKQotICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWlu
ZygiIikKLQotICAgIGRlZiBfcHJpbnRfdGVzdF9saXN0X3RpbWluZyhzZWxmLCB0aXRsZSwgdGVz
dF9saXN0KToKLSAgICAgICAgIiIiUHJpbnQgdGltaW5nIGluZm8gZm9yIGVhY2ggdGVzdC4KLQot
ICAgICAgICBBcmdzOgotICAgICAgICAgIHRpdGxlOiBzZWN0aW9uIGhlYWRpbmcKLSAgICAgICAg
ICB0ZXN0X2xpc3Q6IHRlc3RzIHRoYXQgZmFsbCBpbiB0aGlzIHNlY3Rpb24KLSAgICAgICAgIiIi
Ci0gICAgICAgIGlmIHNlbGYuX3ByaW50ZXIuZGlzYWJsZWQoJ3Nsb3dlc3QnKToKLSAgICAgICAg
ICAgIHJldHVybgotCi0gICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKHRpdGxlKQot
ICAgICAgICBmb3IgdGVzdF90dXBsZSBpbiB0ZXN0X2xpc3Q6Ci0gICAgICAgICAgICB0ZXN0X3J1
bl90aW1lID0gcm91bmQodGVzdF90dXBsZS50ZXN0X3J1bl90aW1lLCAxKQotICAgICAgICAgICAg
c2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiAgJXMgdG9vayAlcyBzZWNvbmRzIiAlICh0ZXN0
X3R1cGxlLnRlc3RfbmFtZSwgdGVzdF9ydW5fdGltZSkpCi0KLSAgICBkZWYgX3ByaW50X2RpcmVj
dG9yeV90aW1pbmdzKHNlbGYsIGRpcmVjdG9yeV90ZXN0X3RpbWluZ3MpOgotICAgICAgICAiIiJQ
cmludCB0aW1pbmcgaW5mbyBieSBkaXJlY3RvcnkgZm9yIGFueSBkaXJlY3RvcmllcyB0aGF0Ci0g
ICAgICAgIHRha2UgPiAxMCBzZWNvbmRzIHRvIHJ1bi4KLQotICAgICAgICBBcmdzOgotICAgICAg
ICAgIGRpcmVjdG9yeV90ZXN0X3RpbWluZzogdGltZSBpbmZvIGZvciBlYWNoIGRpcmVjdG9yeQot
ICAgICAgICAiIiIKLSAgICAgICAgdGltaW5ncyA9IFtdCi0gICAgICAgIGZvciBkaXJlY3Rvcnkg
aW4gZGlyZWN0b3J5X3Rlc3RfdGltaW5nczoKLSAgICAgICAgICAgIG51bV90ZXN0cywgdGltZV9m
b3JfZGlyZWN0b3J5ID0gZGlyZWN0b3J5X3Rlc3RfdGltaW5nc1tkaXJlY3RvcnldCi0gICAgICAg
ICAgICB0aW1pbmdzLmFwcGVuZCgocm91bmQodGltZV9mb3JfZGlyZWN0b3J5LCAxKSwgZGlyZWN0
b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV90ZXN0cykpCi0gICAgICAgIHRp
bWluZ3Muc29ydCgpCi0KLSAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIlRpbWUg
dG8gcHJvY2VzcyBzbG93ZXN0IHN1YmRpcmVjdG9yaWVzOiIpCi0gICAgICAgIG1pbl9zZWNvbmRz
X3RvX3ByaW50ID0gMTAKLSAgICAgICAgZm9yIHRpbWluZyBpbiB0aW1pbmdzOgotICAgICAgICAg
ICAgaWYgdGltaW5nWzBdID4gbWluX3NlY29uZHNfdG9fcHJpbnQ6Ci0gICAgICAgICAgICAgICAg
c2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoCi0gICAgICAgICAgICAgICAgICAgICIgICVzIHRv
b2sgJXMgc2Vjb25kcyB0byBydW4gJXMgdGVzdHMuIiAlICh0aW1pbmdbMV0sCi0gICAgICAgICAg
ICAgICAgICAgIHRpbWluZ1swXSwgdGltaW5nWzJdKSkKLSAgICAgICAgc2VsZi5fcHJpbnRlci5w
cmludF90aW1pbmcoIiIpCi0KLSAgICBkZWYgX3ByaW50X3N0YXRpc3RpY3NfZm9yX3Rlc3RfdGlt
aW5ncyhzZWxmLCB0aXRsZSwgdGltaW5ncyk6Ci0gICAgICAgICIiIlByaW50cyB0aGUgbWVkaWFu
LCBtZWFuIGFuZCBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIHZhbHVlcyBpbgotICAgICAgICB0
aW1pbmdzLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgdGl0bGU6IFRpdGxlIGZvciB0aGVz
ZSB0aW1pbmdzLgotICAgICAgICAgIHRpbWluZ3M6IEEgbGlzdCBvZiBmbG9hdHMgcmVwcmVzZW50
aW5nIHRpbWVzLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1p
bmcodGl0bGUpCi0gICAgICAgIHRpbWluZ3Muc29ydCgpCi0KLSAgICAgICAgbnVtX3Rlc3RzID0g
bGVuKHRpbWluZ3MpCi0gICAgICAgIGlmIG5vdCBudW1fdGVzdHM6Ci0gICAgICAgICAgICByZXR1
cm4KLSAgICAgICAgcGVyY2VudGlsZTkwID0gdGltaW5nc1tpbnQoLjkgKiBudW1fdGVzdHMpXQot
ICAgICAgICBwZXJjZW50aWxlOTkgPSB0aW1pbmdzW2ludCguOTkgKiBudW1fdGVzdHMpXQotCi0g
ICAgICAgIGlmIG51bV90ZXN0cyAlIDIgPT0gMToKLSAgICAgICAgICAgIG1lZGlhbiA9IHRpbWlu
Z3NbKChudW1fdGVzdHMgLSAxKSAvIDIpIC0gMV0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IGxvd2VyID0gdGltaW5nc1tudW1fdGVzdHMgLyAyIC0gMV0KLSAgICAgICAgICAgIHVwcGVyID0g
dGltaW5nc1tudW1fdGVzdHMgLyAyXQotICAgICAgICAgICAgbWVkaWFuID0gKGZsb2F0KGxvd2Vy
ICsgdXBwZXIpKSAvIDIKLQotICAgICAgICBtZWFuID0gc3VtKHRpbWluZ3MpIC8gbnVtX3Rlc3Rz
Ci0KLSAgICAgICAgZm9yIHRpbWUgaW4gdGltaW5nczoKLSAgICAgICAgICAgIHN1bV9vZl9kZXZp
YXRpb25zID0gbWF0aC5wb3codGltZSAtIG1lYW4sIDIpCi0KLSAgICAgICAgc3RkX2RldmlhdGlv
biA9IG1hdGguc3FydChzdW1fb2ZfZGV2aWF0aW9ucyAvIG51bV90ZXN0cykKLSAgICAgICAgc2Vs
Zi5fcHJpbnRlci5wcmludF90aW1pbmcoIiAgTWVkaWFuOiAgICAgICAgICAlNi4zZiIgJSBtZWRp
YW4pCi0gICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIgIE1lYW46ICAgICAgICAg
ICAgJTYuM2YiICUgbWVhbikKLSAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiAg
OTB0aCBwZXJjZW50aWxlOiAlNi4zZiIgJSBwZXJjZW50aWxlOTApCi0gICAgICAgIHNlbGYuX3By
aW50ZXIucHJpbnRfdGltaW5nKCIgIDk5dGggcGVyY2VudGlsZTogJTYuM2YiICUgcGVyY2VudGls
ZTk5KQotICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiICBTdGFuZGFyZCBkZXY6
ICAgICU2LjNmIiAlIHN0ZF9kZXZpYXRpb24pCi0gICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRf
dGltaW5nKCIiKQotCi0gICAgZGVmIF9wcmludF9yZXN1bHRfc3VtbWFyeShzZWxmLCByZXN1bHRf
c3VtbWFyeSk6Ci0gICAgICAgICIiIlByaW50IGEgc2hvcnQgc3VtbWFyeSBhYm91dCBob3cgbWFu
eSB0ZXN0cyBwYXNzZWQuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICByZXN1bHRfc3VtbWFy
eTogaW5mb3JtYXRpb24gdG8gbG9nCi0gICAgICAgICIiIgotICAgICAgICBmYWlsZWQgPSBsZW4o
cmVzdWx0X3N1bW1hcnkuZmFpbHVyZXMpCi0gICAgICAgIHNraXBwZWQgPSBsZW4oCi0gICAgICAg
ICAgICByZXN1bHRfc3VtbWFyeS50ZXN0c19ieV9leHBlY3RhdGlvblt0ZXN0X2V4cGVjdGF0aW9u
cy5TS0lQXSkKLSAgICAgICAgdG90YWwgPSByZXN1bHRfc3VtbWFyeS50b3RhbAotICAgICAgICBw
YXNzZWQgPSB0b3RhbCAtIGZhaWxlZCAtIHNraXBwZWQKLSAgICAgICAgcGN0X3Bhc3NlZCA9IDAu
MAotICAgICAgICBpZiB0b3RhbCA+IDA6Ci0gICAgICAgICAgICBwY3RfcGFzc2VkID0gZmxvYXQo
cGFzc2VkKSAqIDEwMCAvIHRvdGFsCi0KLSAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9hY3R1
YWwoIiIpCi0gICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfYWN0dWFsKCI9PiBSZXN1bHRzOiAl
ZC8lZCB0ZXN0cyBwYXNzZWQgKCUuMWYlJSkiICUKLSAgICAgICAgICAgICAgICAgICAgIChwYXNz
ZWQsIHRvdGFsLCBwY3RfcGFzc2VkKSkKLSAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9hY3R1
YWwoIiIpCi0gICAgICAgIHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1tYXJ5X2VudHJ5KHJlc3VsdF9z
dW1tYXJ5LAotICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuTk9XLCAiVGVzdHMgdG8gYmUg
Zml4ZWQiKQotCi0gICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfYWN0dWFsKCIiKQotICAgICAg
ICBzZWxmLl9wcmludF9yZXN1bHRfc3VtbWFyeV9lbnRyeShyZXN1bHRfc3VtbWFyeSwKLSAgICAg
ICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLldPTlRGSVgsCi0gICAgICAgICAgICAiVGVzdHMgdGhh
dCB3aWxsIG9ubHkgYmUgZml4ZWQgaWYgdGhleSBjcmFzaCAoV09OVEZJWCkiKQotICAgICAgICBz
ZWxmLl9wcmludGVyLnByaW50X2FjdHVhbCgiIikKLQotICAgIGRlZiBfcHJpbnRfcmVzdWx0X3N1
bW1hcnlfZW50cnkoc2VsZiwgcmVzdWx0X3N1bW1hcnksIHRpbWVsaW5lLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGluZyk6Ci0gICAgICAgICIiIlByaW50IGEgc3Vt
bWFyeSBibG9jayBvZiByZXN1bHRzIGZvciBhIHBhcnRpY3VsYXIgdGltZWxpbmUgb2YgdGVzdC4K
LQotICAgICAgICBBcmdzOgotICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IHRvIHBy
aW50IHJlc3VsdHMgZm9yCi0gICAgICAgICAgdGltZWxpbmU6IHRoZSB0aW1lbGluZSB0byBwcmlu
dCByZXN1bHRzIGZvciAoTk9ULCBXT05URklYLCBldGMuKQotICAgICAgICAgIGhlYWRpbmc6IGEg
dGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgdGltZWxpbmUKLSAgICAgICAgIiIiCi0gICAgICAg
IHRvdGFsID0gbGVuKHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5X3RpbWVsaW5lW3RpbWVsaW5lXSkK
LSAgICAgICAgbm90X3Bhc3NpbmcgPSAodG90YWwgLQotICAgICAgICAgICBsZW4ocmVzdWx0X3N1
bW1hcnkudGVzdHNfYnlfZXhwZWN0YXRpb25bdGVzdF9leHBlY3RhdGlvbnMuUEFTU10gJgotICAg
ICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkudGVzdHNfYnlfdGltZWxpbmVbdGltZWxpbmVdKSkK
LSAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9hY3R1YWwoIj0+ICVzICglZCk6IiAlIChoZWFk
aW5nLCBub3RfcGFzc2luZykpCi0KLSAgICAgICAgZm9yIHJlc3VsdCBpbiBUZXN0RXhwZWN0YXRp
b25zLkVYUEVDVEFUSU9OX09SREVSOgotICAgICAgICAgICAgaWYgcmVzdWx0ID09IHRlc3RfZXhw
ZWN0YXRpb25zLlBBU1M6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHJl
c3VsdHMgPSAocmVzdWx0X3N1bW1hcnkudGVzdHNfYnlfZXhwZWN0YXRpb25bcmVzdWx0XSAmCi0g
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5X3RpbWVsaW5lW3Rp
bWVsaW5lXSkKLSAgICAgICAgICAgIGRlc2MgPSBUZXN0RXhwZWN0YXRpb25zLkVYUEVDVEFUSU9O
X0RFU0NSSVBUSU9OU1tyZXN1bHRdCi0gICAgICAgICAgICBpZiBub3RfcGFzc2luZyBhbmQgbGVu
KHJlc3VsdHMpOgotICAgICAgICAgICAgICAgIHBjdCA9IGxlbihyZXN1bHRzKSAqIDEwMC4wIC8g
bm90X3Bhc3NpbmcKLSAgICAgICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2FjdHVhbCgi
ICAlNWQgJS0yNHMgKCU0LjFmJSUpIiAlCi0gICAgICAgICAgICAgICAgICAgIChsZW4ocmVzdWx0
cyksIGRlc2NbbGVuKHJlc3VsdHMpICE9IDFdLCBwY3QpKQotCi0gICAgZGVmIF9jb3B5X3Jlc3Vs
dHNfaHRtbF9maWxlKHNlbGYpOgotICAgICAgICBiYXNlX2RpciA9IHNlbGYuX3BvcnQucGF0aF9m
cm9tX3dlYmtpdF9iYXNlKCdMYXlvdXRUZXN0cycsICdmYXN0JywgJ2hhcm5lc3MnKQotICAgICAg
ICByZXN1bHRzX2ZpbGUgPSBzZWxmLl9mcy5qb2luKGJhc2VfZGlyLCAncmVzdWx0cy5odG1sJykK
LSAgICAgICAgIyBGSVhNRTogV2hhdCBzaG91bGQgd2UgZG8gaWYgdGhpcyBkb2Vzbid0IGV4aXN0
IChlLmcuLCBpbiB1bml0IHRlc3RzKT8KLSAgICAgICAgaWYgc2VsZi5fZnMuZXhpc3RzKHJlc3Vs
dHNfZmlsZSk6Ci0gICAgICAgICAgICBzZWxmLl9mcy5jb3B5ZmlsZShyZXN1bHRzX2ZpbGUsIHNl
bGYuX2ZzLmpvaW4oc2VsZi5fcmVzdWx0c19kaXJlY3RvcnksICJyZXN1bHRzLmh0bWwiKSkKLQot
ICAgIGRlZiBfc2hvd19yZXN1bHRzX2h0bWxfZmlsZShzZWxmLCByZXN1bHRfc3VtbWFyeSk6Ci0g
ICAgICAgICIiIlNob3dzIHRoZSByZXN1bHRzLmh0bWwgcGFnZS4iIiIKLSAgICAgICAgaWYgc2Vs
Zi5fb3B0aW9ucy5mdWxsX3Jlc3VsdHNfaHRtbDoKLSAgICAgICAgICAgIHRlc3RfZmlsZXMgPSBy
ZXN1bHRfc3VtbWFyeS5mYWlsdXJlcy5rZXlzKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IHVuZXhwZWN0ZWRfZmFpbHVyZXMgPSBzZWxmLl9nZXRfZmFpbHVyZXMocmVzdWx0X3N1bW1hcnks
IGluY2x1ZGVfY3Jhc2hlcz1UcnVlLCBpbmNsdWRlX21pc3Npbmc9VHJ1ZSkKLSAgICAgICAgICAg
IHRlc3RfZmlsZXMgPSB1bmV4cGVjdGVkX2ZhaWx1cmVzLmtleXMoKQotCi0gICAgICAgIGlmIG5v
dCBsZW4odGVzdF9maWxlcyk6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICByZXN1bHRz
X2ZpbGVuYW1lID0gc2VsZi5fZnMuam9pbihzZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSwgInJlc3Vs
dHMuaHRtbCIpCi0gICAgICAgIHNlbGYuX3BvcnQuc2hvd19yZXN1bHRzX2h0bWxfZmlsZShyZXN1
bHRzX2ZpbGVuYW1lKQotCi0gICAgZGVmIG5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiAnTWFu
YWdlcicKLQotICAgIGRlZiBpc19kb25lKHNlbGYpOgotICAgICAgICB3b3JrZXJfc3RhdGVzID0g
c2VsZi5fd29ya2VyX3N0YXRlcy52YWx1ZXMoKQotICAgICAgICByZXR1cm4gd29ya2VyX3N0YXRl
cyBhbmQgYWxsKHNlbGYuX3dvcmtlcl9pc19kb25lKHdvcmtlcl9zdGF0ZSkgZm9yIHdvcmtlcl9z
dGF0ZSBpbiB3b3JrZXJfc3RhdGVzKQotCi0gICAgIyBGSVhNRTogSW5saW5lIHRoaXMgZnVuY3Rp
b24uCi0gICAgZGVmIF93b3JrZXJfaXNfZG9uZShzZWxmLCB3b3JrZXJfc3RhdGUpOgotICAgICAg
ICByZXR1cm4gd29ya2VyX3N0YXRlLmRvbmUKLQotICAgIGRlZiBjYW5jZWxfd29ya2VycyhzZWxm
KToKLSAgICAgICAgZm9yIHdvcmtlcl9zdGF0ZSBpbiBzZWxmLl93b3JrZXJfc3RhdGVzLnZhbHVl
cygpOgotICAgICAgICAgICAgd29ya2VyX3N0YXRlLndvcmtlcl9jb25uZWN0aW9uLmNhbmNlbCgp
Ci0KLSAgICBkZWYgaGFuZGxlX3N0YXJ0ZWRfdGVzdChzZWxmLCBzb3VyY2UsIHRlc3RfaW5mbywg
aGFuZ190aW1lb3V0KToKLSAgICAgICAgd29ya2VyX3N0YXRlID0gc2VsZi5fd29ya2VyX3N0YXRl
c1tzb3VyY2VdCi0gICAgICAgIHdvcmtlcl9zdGF0ZS5jdXJyZW50X3Rlc3RfbmFtZSA9IHRlc3Rf
aW5mby50ZXN0X25hbWUKLSAgICAgICAgd29ya2VyX3N0YXRlLm5leHRfdGltZW91dCA9IHRpbWUu
dGltZSgpICsgaGFuZ190aW1lb3V0Ci0KLSAgICBkZWYgaGFuZGxlX2RvbmUoc2VsZiwgc291cmNl
KToKLSAgICAgICAgd29ya2VyX3N0YXRlID0gc2VsZi5fd29ya2VyX3N0YXRlc1tzb3VyY2VdCi0g
ICAgICAgIHdvcmtlcl9zdGF0ZS5kb25lID0gVHJ1ZQotCi0gICAgZGVmIGhhbmRsZV9leGNlcHRp
b24oc2VsZiwgc291cmNlLCBleGNlcHRpb25fdHlwZSwgZXhjZXB0aW9uX3ZhbHVlLCBzdGFjayk6
Ci0gICAgICAgIGlmIGV4Y2VwdGlvbl90eXBlIGluIChLZXlib2FyZEludGVycnVwdCwgVGVzdFJ1
bkludGVycnVwdGVkRXhjZXB0aW9uKToKLSAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbl90eXBl
KGV4Y2VwdGlvbl92YWx1ZSkKLSAgICAgICAgX2xvZy5lcnJvcigiJXMgcmFpc2VkICVzKCclcycp
OiIgJSAoCi0gICAgICAgICAgICAgICAgICAgc291cmNlLAotICAgICAgICAgICAgICAgICAgIGV4
Y2VwdGlvbl92YWx1ZS5fX2NsYXNzX18uX19uYW1lX18sCi0gICAgICAgICAgICAgICAgICAgc3Ry
KGV4Y2VwdGlvbl92YWx1ZSkpKQotICAgICAgICBzZWxmLl9sb2dfd29ya2VyX3N0YWNrKHN0YWNr
KQotICAgICAgICByYWlzZSBXb3JrZXJFeGNlcHRpb24oc3RyKGV4Y2VwdGlvbl92YWx1ZSkpCi0K
LSAgICBkZWYgaGFuZGxlX2ZpbmlzaGVkX2xpc3Qoc2VsZiwgc291cmNlLCBsaXN0X25hbWUsIG51
bV90ZXN0cywgZWxhcHNlZF90aW1lKToKLSAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHNbbGlzdF9u
YW1lXSA9IChudW1fdGVzdHMsIGVsYXBzZWRfdGltZSkKLQotICAgICAgICBkZWYgZmluZChuYW1l
LCB0ZXN0X2xpc3RzKToKLSAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbih0ZXN0X2xpc3Rz
KSk6Ci0gICAgICAgICAgICAgICAgaWYgdGVzdF9saXN0c1tpXS5uYW1lID09IG5hbWU6Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBpCi0gICAgICAgICAgICByZXR1cm4gLTEKLQotICAgICAg
ICBpbmRleCA9IGZpbmQobGlzdF9uYW1lLCBzZWxmLl9yZW1haW5pbmdfbG9ja2VkX3NoYXJkcykK
LSAgICAgICAgaWYgaW5kZXggPj0gMDoKLSAgICAgICAgICAgIHNlbGYuX3JlbWFpbmluZ19sb2Nr
ZWRfc2hhcmRzLnBvcChpbmRleCkKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9yZW1haW5pbmdf
bG9ja2VkX3NoYXJkczoKLSAgICAgICAgICAgICAgICBzZWxmLnN0b3Bfc2VydmVyc193aXRoX2xv
Y2soKQotCi0gICAgZGVmIGhhbmRsZV9maW5pc2hlZF90ZXN0KHNlbGYsIHNvdXJjZSwgcmVzdWx0
LCBlbGFwc2VkX3RpbWUpOgotICAgICAgICB3b3JrZXJfc3RhdGUgPSBzZWxmLl93b3JrZXJfc3Rh
dGVzW3NvdXJjZV0KLSAgICAgICAgd29ya2VyX3N0YXRlLm5leHRfdGltZW91dCA9IE5vbmUKLSAg
ICAgICAgd29ya2VyX3N0YXRlLmN1cnJlbnRfdGVzdF9uYW1lID0gTm9uZQotICAgICAgICB3b3Jr
ZXJfc3RhdGUuc3RhdHNbJ3RvdGFsX3RpbWUnXSArPSBlbGFwc2VkX3RpbWUKLSAgICAgICAgd29y
a2VyX3N0YXRlLnN0YXRzWydudW1fdGVzdHMnXSArPSAxCi0KLSAgICAgICAgc2VsZi5fYWxsX3Jl
c3VsdHMuYXBwZW5kKHJlc3VsdCkKLSAgICAgICAgc2VsZi5fdXBkYXRlX3N1bW1hcnlfd2l0aF9y
ZXN1bHQoc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSwgcmVzdWx0KQotCi0gICAgZGVmIF9s
b2dfd29ya2VyX3N0YWNrKHNlbGYsIHN0YWNrKToKLSAgICAgICAgd2Via2l0cHlkaXIgPSBzZWxm
Ll9wb3J0LnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnVG9vbHMnLCAnU2NyaXB0cycsICd3ZWJraXRw
eScpICsgc2VsZi5fcG9ydC5fZmlsZXN5c3RlbS5zZXAKLSAgICAgICAgZm9yIGZpbGVuYW1lLCBs
aW5lX251bWJlciwgZnVuY3Rpb25fbmFtZSwgdGV4dCBpbiBzdGFjazoKLSAgICAgICAgICAgIGlm
IGZpbGVuYW1lLnN0YXJ0c3dpdGgod2Via2l0cHlkaXIpOgotICAgICAgICAgICAgICAgIGZpbGVu
YW1lID0gZmlsZW5hbWUucmVwbGFjZSh3ZWJraXRweWRpciwgJycpCi0gICAgICAgICAgICBfbG9n
LmVycm9yKCcgICVzOiV1IChpbiAlcyknICUgKGZpbGVuYW1lLCBsaW5lX251bWJlciwgZnVuY3Rp
b25fbmFtZSkpCi0gICAgICAgICAgICBfbG9nLmVycm9yKCcgICAgJXMnICUgdGV4dCkKLQotCi1k
ZWYgcmVhZF90ZXN0X2ZpbGVzKGZzLCBmaWxlcywgdGVzdF9wYXRoX3NlcGFyYXRvcik6Ci0gICAg
dGVzdHMgPSBbXQotICAgIGZvciBmaWxlIGluIGZpbGVzOgotICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICBpZiB0ZXN0X3BhdGhfc2VwYXJhdG9yICE9IGZzLnNlcDoKLSAgICAgICAgICAgICAgICBm
aWxlID0gZmlsZS5yZXBsYWNlKHRlc3RfcGF0aF9zZXBhcmF0b3IsIGZzLnNlcCkKLSAgICAgICAg
ICAgIGZpbGVfY29udGVudHMgPSBmcy5yZWFkX3RleHRfZmlsZShmaWxlKS5zcGxpdCgnXG4nKQot
ICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmlsZV9jb250ZW50czoKLSAgICAgICAgICAgICAgICBs
aW5lID0gdGVzdF9leHBlY3RhdGlvbnMuc3RyaXBfY29tbWVudHMobGluZSkKLSAgICAgICAgICAg
ICAgICBpZiBsaW5lOgotICAgICAgICAgICAgICAgICAgICB0ZXN0cy5hcHBlbmQobGluZSkKLSAg
ICAgICAgZXhjZXB0IElPRXJyb3IsIGU6Ci0gICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5v
LkVOT0VOVDoKLSAgICAgICAgICAgICAgICBfbG9nLmNyaXRpY2FsKCcnKQotICAgICAgICAgICAg
ICAgIF9sb2cuY3JpdGljYWwoJy0tdGVzdC1saXN0IGZpbGUgIiVzIiBub3QgZm91bmQnICUgZmls
ZSkKLSAgICAgICAgICAgIHJhaXNlCi0gICAgcmV0dXJuIHRlc3RzCi0KLQotIyBGSVhNRTogVGhl
c2UgdHdvIGZyZWUgZnVuY3Rpb25zIGJlbG9uZyBlaXRoZXIgb24gbWFuYWdlciAoc2luY2UgaXQn
cyB0aGUgb25seSBvbmUKLSMgd2hpY2ggdXNlcyB0aGVtKSBvciBpbiBhIGRpZmZlcmVudCBmaWxl
IChpZiB0aGV5IG5lZWQgdG8gYmUgcmUtdXNlZCkuCi1kZWYgdGVzdF9rZXkocG9ydCwgdGVzdF9u
YW1lKToKLSAgICAiIiJUdXJucyBhIHRlc3QgbmFtZSBpbnRvIGEgbGlzdCB3aXRoIHR3byBzdWJs
aXN0cywgdGhlIG5hdHVyYWwga2V5IG9mIHRoZQotICAgIGRpcm5hbWUsIGFuZCB0aGUgbmF0dXJh
bCBrZXkgb2YgdGhlIGJhc2VuYW1lLgotCi0gICAgVGhpcyBjYW4gYmUgdXNlZCB3aGVuIHNvcnRp
bmcgcGF0aHMgc28gdGhhdCBmaWxlcyBpbiBhIGRpcmVjdG9yeS4KLSAgICBkaXJlY3RvcnkgYXJl
IGtlcHQgdG9nZXRoZXIgcmF0aGVyIHRoYW4gYmVpbmcgbWl4ZWQgaW4gd2l0aCBmaWxlcyBpbgot
ICAgIHN1YmRpcmVjdG9yaWVzLiIiIgotICAgIGRpcm5hbWUsIGJhc2VuYW1lID0gcG9ydC5zcGxp
dF90ZXN0KHRlc3RfbmFtZSkKLSAgICByZXR1cm4gKG5hdHVyYWxfc29ydF9rZXkoZGlybmFtZSAr
IHBvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUiksIG5hdHVyYWxfc29ydF9rZXkoYmFzZW5hbWUpKQot
Ci0KLWRlZiBuYXR1cmFsX3NvcnRfa2V5KHN0cmluZ190b19zcGxpdCk6Ci0gICAgIiIiIFR1cm4g
YSBzdHJpbmcgaW50byBhIGxpc3Qgb2Ygc3RyaW5nIGFuZCBudW1iZXIgY2h1bmtzLgotICAgICAg
ICAiejIzYSIgLT4gWyJ6IiwgMjMsICJhIl0KLQotICAgICAgICBDYW4gYmUgdXNlZCB0byBpbXBs
ZW1lbnQgIm5hdHVyYWwgc29ydCIgb3JkZXIuIFNlZToKLSAgICAgICAgICAgIGh0dHA6Ly93d3cu
Y29kaW5naG9ycm9yLmNvbS9ibG9nLzIwMDcvMTIvc29ydGluZy1mb3ItaHVtYW5zLW5hdHVyYWwt
c29ydC1vcmRlci5odG1sCi0gICAgICAgICAgICBodHRwOi8vbmVkYmF0Y2hlbGRlci5jb20vYmxv
Zy8yMDA3MTIuaHRtbCNlMjAwNzEyMTFUMDU0OTU2Ci0gICAgIiIiCi0gICAgZGVmIHRyeWludCh2
YWwpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gaW50KHZhbCkKLSAgICAgICAg
ZXhjZXB0OgotICAgICAgICAgICAgcmV0dXJuIHZhbAotCi0gICAgcmV0dXJuIFt0cnlpbnQoY2h1
bmspIGZvciBjaHVuayBpbiByZS5zcGxpdCgnKFxkKyknLCBzdHJpbmdfdG9fc3BsaXQpXQotCi0K
LWNsYXNzIF9Xb3JrZXJTdGF0ZShvYmplY3QpOgotICAgICIiIkEgY2xhc3MgZm9yIHRoZSBtYW5h
Z2VyIHRvIHVzZSB0byB0cmFjayB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgd29ya2Vycy4iIiIK
LSAgICBkZWYgX19pbml0X18oc2VsZiwgbnVtYmVyLCB3b3JrZXJfY29ubmVjdGlvbik6Ci0gICAg
ICAgIHNlbGYud29ya2VyX2Nvbm5lY3Rpb24gPSB3b3JrZXJfY29ubmVjdGlvbgotICAgICAgICBz
ZWxmLm51bWJlciA9IG51bWJlcgotICAgICAgICBzZWxmLmRvbmUgPSBGYWxzZQotICAgICAgICBz
ZWxmLmN1cnJlbnRfdGVzdF9uYW1lID0gTm9uZQotICAgICAgICBzZWxmLm5leHRfdGltZW91dCA9
IE5vbmUKLSAgICAgICAgc2VsZi5zdGF0cyA9IHt9Ci0gICAgICAgIHNlbGYuc3RhdHNbJ25hbWUn
XSA9IHdvcmtlcl9jb25uZWN0aW9uLm5hbWUKLSAgICAgICAgc2VsZi5zdGF0c1snbnVtX3Rlc3Rz
J10gPSAwCi0gICAgICAgIHNlbGYuc3RhdHNbJ3RvdGFsX3RpbWUnXSA9IDAKLQotICAgIGRlZiBf
X3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICJfV29ya2VyU3RhdGUoIiArIHN0cihzZWxm
Ll9fZGljdF9fKSArICIpIgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3Vu
aXR0ZXN0LnB5CShyZXZpc2lvbiA5MDUyMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMjMxICswLDAgQEAKLSMhL3Vzci9iaW4vcHl0aG9uCi0jIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKEMpIDIw
MTAgR2Fib3IgUmFwY3NhbnlpIChyZ2Fib3JAaW5mLnUtc3plZ2VkLmh1KSwgVW5pdmVyc2l0eSBv
ZiBTemVnZWQKLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRp
c3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIlVuaXQgdGVzdHMgZm9yIG1hbmFnZXIu
cHkuIiIiCi0KLWltcG9ydCBTdHJpbmdJTwotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgZmlsZXN5c3RlbV9tb2NrCi1mcm9tIHdlYmtpdHB5LmNv
bW1vbi5zeXN0ZW0gaW1wb3J0IG91dHB1dGNhcHR1cmUKLWZyb20gd2Via2l0cHkudGhpcmRwYXJ0
eS5tb2NrIGltcG9ydCBNb2NrCi1mcm9tIHdlYmtpdHB5IGltcG9ydCBsYXlvdXRfdGVzdHMKLWZy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBwb3J0Ci0KLWZyb20gd2Via2l0cHkgaW1w
b3J0IGxheW91dF90ZXN0cwotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHJ1bl93
ZWJraXRfdGVzdHMKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlLm1h
bmFnZXIgaW1wb3J0IE1hbmFnZXIsIG5hdHVyYWxfc29ydF9rZXksIHRlc3Rfa2V5LCBUZXN0UnVu
SW50ZXJydXB0ZWRFeGNlcHRpb24sIFRlc3RTaGFyZAotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHByaW50aW5nCi1mcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5sYXlvdXRfcGFja2FnZS5yZXN1bHRfc3VtbWFyeSBpbXBvcnQgUmVzdWx0U3VtbWFyeQot
ZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucwotCi0KLWNsYXNz
IE1hbmFnZXJXcmFwcGVyKE1hbmFnZXIpOgotICAgIGRlZiBfZ2V0X3Rlc3RfaW5wdXRfZm9yX2Zp
bGUoc2VsZiwgdGVzdF9maWxlKToKLSAgICAgICAgcmV0dXJuIHRlc3RfZmlsZQotCi0KLWNsYXNz
IFNoYXJkaW5nVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIHRlc3RfbGlzdCA9IFsKLSAg
ICAgICAgImh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VuaWNvZGUuaHRtIiwKLSAgICAgICAg
ImFuaW1hdGlvbnMva2V5ZnJhbWVzLmh0bWwiLAotICAgICAgICAiaHR0cC90ZXN0cy9zZWN1cml0
eS92aWV3LXNvdXJjZS1uby1yZWZyZXNoLmh0bWwiLAotICAgICAgICAiaHR0cC90ZXN0cy93ZWJz
b2NrZXQvdGVzdHMvd2Vic29ja2V0LXByb3RvY29sLWlnbm9yZWQuaHRtbCIsCi0gICAgICAgICJm
YXN0L2Nzcy9kaXNwbGF5LW5vbmUtaW5saW5lLXN0eWxlLWNoYW5nZS1jcmFzaC5odG1sIiwKLSAg
ICAgICAgImh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3VwcG9ydGVkLXhtbC1jb250ZW50LXR5
cGVzLmh0bWwiLAotICAgICAgICAiZG9tL2h0bWwvbGV2ZWwyL2h0bWwvSFRNTEFuY2hvckVsZW1l
bnQwMy5odG1sIiwKLSAgICAgICAgImlldGVzdGNlbnRlci9KYXZhc2NyaXB0LzExLjEuNV80LTQt
Yy0xLmh0bWwiLAotICAgICAgICAiZG9tL2h0bWwvbGV2ZWwyL2h0bWwvSFRNTEFuY2hvckVsZW1l
bnQwNi5odG1sIiwKLSAgICBdCi0KLSAgICBkZWYgZ2V0X3NoYXJkcyhzZWxmLCBudW1fd29ya2Vy
cywgZnVsbHlfcGFyYWxsZWwpOgotICAgICAgICBwb3J0ID0gbGF5b3V0X3Rlc3RzLnBvcnQuZ2V0
KHBvcnRfbmFtZT0ndGVzdCcpCi0gICAgICAgIHBvcnQuX2ZpbGVzeXN0ZW0gPSBmaWxlc3lzdGVt
X21vY2suTW9ja0ZpbGVTeXN0ZW0oKQotICAgICAgICBzZWxmLm1hbmFnZXIgPSBNYW5hZ2VyV3Jh
cHBlcihwb3J0PXBvcnQsIG9wdGlvbnM9TW9jaygpLCBwcmludGVyPU1vY2soKSkKLSAgICAgICAg
cmV0dXJuIHNlbGYubWFuYWdlci5fc2hhcmRfdGVzdHMoc2VsZi50ZXN0X2xpc3QsIG51bV93b3Jr
ZXJzLCBmdWxseV9wYXJhbGxlbCkKLQotICAgIGRlZiB0ZXN0X3NoYXJkX2J5X2RpcihzZWxmKToK
LSAgICAgICAgbG9ja2VkLCB1bmxvY2tlZCA9IHNlbGYuZ2V0X3NoYXJkcyhudW1fd29ya2Vycz0y
LCBmdWxseV9wYXJhbGxlbD1GYWxzZSkKLQotICAgICAgICAjIE5vdGUgdGhhdCBhbHRob3VnaCB0
aGVyZSBhcmUgdGVzdHMgaW4gbXVsdGlwbGUgZGlycyB0aGF0IG5lZWQgbG9ja3MsCi0gICAgICAg
ICMgdGhleSBhcmUgY3JhbW1lZCBpbnRvIGEgc2luZ2xlIHNoYXJkIGluIG9yZGVyIHRvIHJlZHVj
ZSB0aGUgIyBvZgotICAgICAgICAjIHdvcmtlcnMgaGl0dGluZyB0aGUgc2VydmVyIGF0IG9uY2Uu
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxvY2tlZCwKLSAgICAgICAgICAgIFtUZXN0U2hh
cmQoJ2xvY2tlZF9zaGFyZF8xJywKLSAgICAgICAgICAgICAgWydodHRwL3Rlc3RzL3NlY3VyaXR5
L3ZpZXctc291cmNlLW5vLXJlZnJlc2guaHRtbCcsCi0gICAgICAgICAgICAgICAnaHR0cC90ZXN0
cy93ZWJzb2NrZXQvdGVzdHMvdW5pY29kZS5odG0nLAotICAgICAgICAgICAgICAgJ2h0dHAvdGVz
dHMvd2Vic29ja2V0L3Rlc3RzL3dlYnNvY2tldC1wcm90b2NvbC1pZ25vcmVkLmh0bWwnLAotICAg
ICAgICAgICAgICAgJ2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3VwcG9ydGVkLXhtbC1jb250
ZW50LXR5cGVzLmh0bWwnXSldKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh1bmxvY2tlZCwK
LSAgICAgICAgICAgIFtUZXN0U2hhcmQoJ2FuaW1hdGlvbnMnLAotICAgICAgICAgICAgICAgICAg
ICAgICBbJ2FuaW1hdGlvbnMva2V5ZnJhbWVzLmh0bWwnXSksCi0gICAgICAgICAgICAgVGVzdFNo
YXJkKCdkb20vaHRtbC9sZXZlbDIvaHRtbCcsCi0gICAgICAgICAgICAgICAgICAgICAgIFsnZG9t
L2h0bWwvbGV2ZWwyL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQwMy5odG1sJywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICdkb20vaHRtbC9sZXZlbDIvaHRtbC9IVE1MQW5jaG9yRWxlbWVudDA2Lmh0
bWwnXSksCi0gICAgICAgICAgICAgVGVzdFNoYXJkKCdmYXN0L2NzcycsCi0gICAgICAgICAgICAg
ICAgICAgICAgIFsnZmFzdC9jc3MvZGlzcGxheS1ub25lLWlubGluZS1zdHlsZS1jaGFuZ2UtY3Jh
c2guaHRtbCddKSwKLSAgICAgICAgICAgICBUZXN0U2hhcmQoJ2lldGVzdGNlbnRlci9KYXZhc2Ny
aXB0JywKLSAgICAgICAgICAgICAgICAgICAgICAgWydpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8x
MS4xLjVfNC00LWMtMS5odG1sJ10pXSkKLQotICAgIGRlZiB0ZXN0X3NoYXJkX2V2ZXJ5X2ZpbGUo
c2VsZik6Ci0gICAgICAgIGxvY2tlZCwgdW5sb2NrZWQgPSBzZWxmLmdldF9zaGFyZHMobnVtX3dv
cmtlcnM9MiwgZnVsbHlfcGFyYWxsZWw9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
bG9ja2VkLAotICAgICAgICAgICAgW1Rlc3RTaGFyZCgnLicsIFsnaHR0cC90ZXN0cy93ZWJzb2Nr
ZXQvdGVzdHMvdW5pY29kZS5odG0nXSksCi0gICAgICAgICAgICAgVGVzdFNoYXJkKCcuJywgWydo
dHRwL3Rlc3RzL3NlY3VyaXR5L3ZpZXctc291cmNlLW5vLXJlZnJlc2guaHRtbCddKSwKLSAgICAg
ICAgICAgICBUZXN0U2hhcmQoJy4nLCBbJ2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3dlYnNv
Y2tldC1wcm90b2NvbC1pZ25vcmVkLmh0bWwnXSksCi0gICAgICAgICAgICAgVGVzdFNoYXJkKCcu
JywgWydodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3N1cHBvcnRlZC14bWwtY29udGVudC10eXBl
cy5odG1sJ10pXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModW5sb2NrZWQsCi0gICAgICAg
ICAgICBbVGVzdFNoYXJkKCcuJywgWydhbmltYXRpb25zL2tleWZyYW1lcy5odG1sJ10pLAotICAg
ICAgICAgICAgIFRlc3RTaGFyZCgnLicsIFsnZmFzdC9jc3MvZGlzcGxheS1ub25lLWlubGluZS1z
dHlsZS1jaGFuZ2UtY3Jhc2guaHRtbCddKSwKLSAgICAgICAgICAgICBUZXN0U2hhcmQoJy4nLCBb
J2RvbS9odG1sL2xldmVsMi9odG1sL0hUTUxBbmNob3JFbGVtZW50MDMuaHRtbCddKSwKLSAgICAg
ICAgICAgICBUZXN0U2hhcmQoJy4nLCBbJ2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzExLjEuNV80
LTQtYy0xLmh0bWwnXSksCi0gICAgICAgICAgICAgVGVzdFNoYXJkKCcuJywgWydkb20vaHRtbC9s
ZXZlbDIvaHRtbC9IVE1MQW5jaG9yRWxlbWVudDA2Lmh0bWwnXSldKQotCi0gICAgZGVmIHRlc3Rf
c2hhcmRfaW5fdHdvKHNlbGYpOgotICAgICAgICBsb2NrZWQsIHVubG9ja2VkID0gc2VsZi5nZXRf
c2hhcmRzKG51bV93b3JrZXJzPTEsIGZ1bGx5X3BhcmFsbGVsPUZhbHNlKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhsb2NrZWQsCi0gICAgICAgICAgICBbVGVzdFNoYXJkKCdsb2NrZWRfdGVz
dHMnLAotICAgICAgICAgICAgICAgICAgICAgICBbJ2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3Rz
L3VuaWNvZGUuaHRtJywKLSAgICAgICAgICAgICAgICAgICAgICAgICdodHRwL3Rlc3RzL3NlY3Vy
aXR5L3ZpZXctc291cmNlLW5vLXJlZnJlc2guaHRtbCcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAnaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvd2Vic29ja2V0LXByb3RvY29sLWlnbm9yZWQu
aHRtbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAnaHR0cC90ZXN0cy94bWxodHRwcmVxdWVz
dC9zdXBwb3J0ZWQteG1sLWNvbnRlbnQtdHlwZXMuaHRtbCddKV0pCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKHVubG9ja2VkLAotICAgICAgICAgICAgW1Rlc3RTaGFyZCgndW5sb2NrZWRfdGVz
dHMnLAotICAgICAgICAgICAgICAgICAgICAgICBbJ2FuaW1hdGlvbnMva2V5ZnJhbWVzLmh0bWwn
LAotICAgICAgICAgICAgICAgICAgICAgICAgJ2Zhc3QvY3NzL2Rpc3BsYXktbm9uZS1pbmxpbmUt
c3R5bGUtY2hhbmdlLWNyYXNoLmh0bWwnLAotICAgICAgICAgICAgICAgICAgICAgICAgJ2RvbS9o
dG1sL2xldmVsMi9odG1sL0hUTUxBbmNob3JFbGVtZW50MDMuaHRtbCcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAnaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTEuMS41XzQtNC1jLTEuaHRtbCcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAnZG9tL2h0bWwvbGV2ZWwyL2h0bWwvSFRNTEFuY2hv
ckVsZW1lbnQwNi5odG1sJ10pXSkKLQotCi1jbGFzcyBNYW5hZ2VyVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6Ci0gICAgZGVmIHRlc3RfaHR0cF9sb2NraW5nKHRlc3Rlcik6Ci0gICAgICAgIGNsYXNz
IExvY2tDaGVja2luZ01hbmFnZXIoTWFuYWdlcik6Ci0gICAgICAgICAgICBkZWYgX19pbml0X18o
c2VsZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlcik6Ci0gICAgICAgICAgICAgICAgc3VwZXIoTG9j
a0NoZWNraW5nTWFuYWdlciwgc2VsZikuX19pbml0X18ocG9ydCwgb3B0aW9ucywgcHJpbnRlcikK
LSAgICAgICAgICAgICAgICBzZWxmLl9maW5pc2hlZF9saXN0X2NhbGxlZCA9IEZhbHNlCi0KLSAg
ICAgICAgICAgIGRlZiBoYW5kbGVfZmluaXNoZWRfbGlzdChzZWxmLCBzb3VyY2UsIGxpc3RfbmFt
ZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpOgotICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxm
Ll9maW5pc2hlZF9saXN0X2NhbGxlZDoKLSAgICAgICAgICAgICAgICAgICAgdGVzdGVyLmFzc2Vy
dEVxdWFscyhsaXN0X25hbWUsICdsb2NrZWRfdGVzdHMnKQotICAgICAgICAgICAgICAgICAgICB0
ZXN0ZXIuYXNzZXJ0VHJ1ZShzZWxmLl9yZW1haW5pbmdfbG9ja2VkX3NoYXJkcykKLSAgICAgICAg
ICAgICAgICAgICAgdGVzdGVyLmFzc2VydFRydWUoc2VsZi5faGFzX2h0dHBfbG9jaykKLQotICAg
ICAgICAgICAgICAgIHN1cGVyKExvY2tDaGVja2luZ01hbmFnZXIsIHNlbGYpLmhhbmRsZV9maW5p
c2hlZF9saXN0KHNvdXJjZSwgbGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSkKLQot
ICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9maW5pc2hlZF9saXN0X2NhbGxlZDoKLSAgICAg
ICAgICAgICAgICAgICAgdGVzdGVyLmFzc2VydEVxdWFscyhzZWxmLl9yZW1haW5pbmdfbG9ja2Vk
X3NoYXJkcywgW10pCi0gICAgICAgICAgICAgICAgICAgIHRlc3Rlci5hc3NlcnRGYWxzZShzZWxm
Ll9oYXNfaHR0cF9sb2NrKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9maW5pc2hlZF9saXN0
X2NhbGxlZCA9IFRydWUKLQotICAgICAgICBvcHRpb25zLCBhcmdzID0gcnVuX3dlYmtpdF90ZXN0
cy5wYXJzZV9hcmdzKFsnLS1wbGF0Zm9ybT10ZXN0JywgJy0tcHJpbnQ9bm90aGluZycsICdodHRw
L3Rlc3RzL3Bhc3NlcycsICdwYXNzZXMnXSkKLSAgICAgICAgcG9ydCA9IGxheW91dF90ZXN0cy5w
b3J0LmdldChwb3J0X25hbWU9b3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucz1vcHRpb25zKQotICAg
ICAgICBydW5fd2Via2l0X3Rlc3RzLl9zZXRfdXBfZGVyaXZlZF9vcHRpb25zKHBvcnQsIG9wdGlv
bnMpCi0gICAgICAgIHByaW50ZXIgPSBwcmludGluZy5QcmludGVyKHBvcnQsIG9wdGlvbnMsIFN0
cmluZ0lPLlN0cmluZ0lPKCksIFN0cmluZ0lPLlN0cmluZ0lPKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZV9sb2dnaW5nPVRydWUpCi0gICAgICAgIG1hbmFn
ZXIgPSBMb2NrQ2hlY2tpbmdNYW5hZ2VyKHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpCi0gICAgICAg
IG1hbmFnZXIuY29sbGVjdF90ZXN0cyhhcmdzLCBbXSkKLSAgICAgICAgbWFuYWdlci5wYXJzZV9l
eHBlY3RhdGlvbnMoKQotICAgICAgICByZXN1bHRfc3VtbWFyeSA9IG1hbmFnZXIuc2V0X3VwX3J1
bigpCi0gICAgICAgIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMgPSBtYW5hZ2VyLnJ1bihyZXN1bHRf
c3VtbWFyeSkKLSAgICAgICAgbWFuYWdlci5jbGVhbl91cF9ydW4oKQotICAgICAgICBwcmludGVy
LmNsZWFudXAoKQotICAgICAgICB0ZXN0ZXIuYXNzZXJ0RXF1YWxzKG51bV91bmV4cGVjdGVkX3Jl
c3VsdHMsIDApCi0KLSAgICBkZWYgdGVzdF9pbnRlcnJ1cHRfaWZfYXRfZmFpbHVyZV9saW1pdHMo
c2VsZik6Ci0gICAgICAgIHBvcnQgPSBNb2NrKCkKLSAgICAgICAgcG9ydC5URVNUX1BBVEhfU0VQ
QVJBVE9SID0gJy8nCi0gICAgICAgIHBvcnQuX2ZpbGVzeXN0ZW0gPSBmaWxlc3lzdGVtX21vY2su
TW9ja0ZpbGVTeXN0ZW0oKQotICAgICAgICBtYW5hZ2VyID0gTWFuYWdlcihwb3J0PXBvcnQsIG9w
dGlvbnM9TW9ja09wdGlvbnMoKSwgcHJpbnRlcj1Nb2NrKCkpCi0KLSAgICAgICAgbWFuYWdlci5f
b3B0aW9ucyA9IE1vY2tPcHRpb25zKGV4aXRfYWZ0ZXJfbl9mYWlsdXJlcz1Ob25lLCBleGl0X2Fm
dGVyX25fY3Jhc2hlc19vcl90aW1lb3V0cz1Ob25lKQotICAgICAgICByZXN1bHRfc3VtbWFyeSA9
IFJlc3VsdFN1bW1hcnkoZXhwZWN0YXRpb25zPU1vY2soKSwgdGVzdF9maWxlcz1bXSkKLSAgICAg
ICAgcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZF9mYWlsdXJlcyA9IDEwMAotICAgICAgICByZXN1
bHRfc3VtbWFyeS51bmV4cGVjdGVkX2NyYXNoZXMgPSA1MAotICAgICAgICByZXN1bHRfc3VtbWFy
eS51bmV4cGVjdGVkX3RpbWVvdXRzID0gNTAKLSAgICAgICAgIyBObyBleGNlcHRpb24gd2hlbiB0
aGUgZXhpdF9hZnRlciogb3B0aW9ucyBhcmUgTm9uZS4KLSAgICAgICAgbWFuYWdlci5faW50ZXJy
dXB0X2lmX2F0X2ZhaWx1cmVfbGltaXRzKHJlc3VsdF9zdW1tYXJ5KQotCi0gICAgICAgICMgTm8g
ZXhjZXB0aW9uIHdoZW4gd2UgaGF2ZW4ndCBoaXQgdGhlIGxpbWl0IHlldC4KLSAgICAgICAgbWFu
YWdlci5fb3B0aW9ucy5leGl0X2FmdGVyX25fZmFpbHVyZXMgPSAxMDEKLSAgICAgICAgbWFuYWdl
ci5fb3B0aW9ucy5leGl0X2FmdGVyX25fY3Jhc2hlc19vcl90aW1lb3V0cyA9IDEwMQotICAgICAg
ICBtYW5hZ2VyLl9pbnRlcnJ1cHRfaWZfYXRfZmFpbHVyZV9saW1pdHMocmVzdWx0X3N1bW1hcnkp
Ci0KLSAgICAgICAgIyBJbnRlcnJ1cHQgaWYgd2UndmUgZXhjZWVkZWQgZWl0aGVyIGxpbWl0Ogot
ICAgICAgICBtYW5hZ2VyLl9vcHRpb25zLmV4aXRfYWZ0ZXJfbl9jcmFzaGVzX29yX3RpbWVvdXRz
ID0gMTAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGVzdFJ1bkludGVycnVwdGVkRXhjZXB0
aW9uLCBtYW5hZ2VyLl9pbnRlcnJ1cHRfaWZfYXRfZmFpbHVyZV9saW1pdHMsIHJlc3VsdF9zdW1t
YXJ5KQotCi0gICAgICAgIG1hbmFnZXIuX29wdGlvbnMuZXhpdF9hZnRlcl9uX2NyYXNoZXNfb3Jf
dGltZW91dHMgPSBOb25lCi0gICAgICAgIG1hbmFnZXIuX29wdGlvbnMuZXhpdF9hZnRlcl9uX2Zh
aWx1cmVzID0gMTAKLSAgICAgICAgZXhjZXB0aW9uID0gc2VsZi5hc3NlcnRSYWlzZXMoVGVzdFJ1
bkludGVycnVwdGVkRXhjZXB0aW9uLCBtYW5hZ2VyLl9pbnRlcnJ1cHRfaWZfYXRfZmFpbHVyZV9s
aW1pdHMsIHJlc3VsdF9zdW1tYXJ5KQotCi0KLWNsYXNzIE5hdHVyYWxDb21wYXJlVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIGFzc2VydF9jbXAoc2VsZiwgeCwgeSwgcmVzdWx0KToK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY21wKG5hdHVyYWxfc29ydF9rZXkoeCksIG5hdHVy
YWxfc29ydF9rZXkoeSkpLCByZXN1bHQpCi0KLSAgICBkZWYgdGVzdF9uYXR1cmFsX2NvbXBhcmUo
c2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnYScsICdhJywgMCkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfY21wKCdhYicsICdhJywgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfY21wKCdhJywg
J2FiJywgLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnJywgJycsIDApCi0gICAgICAgIHNl
bGYuYXNzZXJ0X2NtcCgnJywgJ2FiJywgLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnMScs
ICcyJywgLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnMicsICcxJywgMSkKLSAgICAgICAg
c2VsZi5hc3NlcnRfY21wKCcxJywgJzEwJywgLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgn
MicsICcxMCcsIC0xKQotICAgICAgICBzZWxmLmFzc2VydF9jbXAoJ2Zvb18xLmh0bWwnLCAnZm9v
XzIuaHRtbCcsIC0xKQotICAgICAgICBzZWxmLmFzc2VydF9jbXAoJ2Zvb18xLjEuaHRtbCcsICdm
b29fMi5odG1sJywgLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnZm9vXzEuaHRtbCcsICdm
b29fMTAuaHRtbCcsIC0xKQotICAgICAgICBzZWxmLmFzc2VydF9jbXAoJ2Zvb18yLmh0bWwnLCAn
Zm9vXzEwLmh0bWwnLCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfY21wKCdmb29fMjMuaHRtbCcs
ICdmb29fMTAuaHRtbCcsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnZm9vXzIzLmh0bWwn
LCAnZm9vXzEwMC5odG1sJywgLTEpCi0KLQotY2xhc3MgS2V5Q29tcGFyZVRlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5wb3J0ID0gbGF5
b3V0X3Rlc3RzLnBvcnQuZ2V0KCd0ZXN0JykKLQotICAgIGRlZiBhc3NlcnRfY21wKHNlbGYsIHgs
IHksIHJlc3VsdCk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNtcCh0ZXN0X2tleShzZWxm
LnBvcnQsIHgpLCB0ZXN0X2tleShzZWxmLnBvcnQsIHkpKSwgcmVzdWx0KQotCi0gICAgZGVmIHRl
c3RfdGVzdF9rZXkoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnL2EnLCAnL2EnLCAw
KQotICAgICAgICBzZWxmLmFzc2VydF9jbXAoJy9hJywgJy9iJywgLTEpCi0gICAgICAgIHNlbGYu
YXNzZXJ0X2NtcCgnL2EyJywgJy9hMTAnLCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfY21wKCcv
YTIvZm9vJywgJy9hMTAvZm9vJywgLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnL2EvZm9v
MTEnLCAnL2EvZm9vMicsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnL2FiJywgJy9hL2Ev
YicsIC0xKQotICAgICAgICBzZWxmLmFzc2VydF9jbXAoJy9hL2EvYicsICcvYWInLCAxKQotICAg
ICAgICBzZWxmLmFzc2VydF9jbXAoJy9mb28tYmFyL2JheicsICcvZm9vL2JheicsIC0xKQotCi0K
LWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdW5pdHRlc3QubWFpbigpCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2Vy
X3dvcmtlcl9icm9rZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5CShyZXZp
c2lvbiA5MDUyMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weQkod29ya2luZyBjb3B5KQpAQCAtMSwy
ODQgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRp
c3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIk1vZHVsZSBmb3IgaGFuZGxpbmcgbWVz
c2FnZXMgYW5kIGNvbmN1cnJlbmN5IGZvciBydW4td2Via2l0LXRlc3RzLgotCi1UaGlzIG1vZHVs
ZSBpbXBsZW1lbnRzIGEgbWVzc2FnZSBicm9rZXIgdGhhdCBjb25uZWN0cyB0aGUgbWFuYWdlciB0
byB0aGUKLXdvcmtlcnM6IGl0IHByb3ZpZGVzIGEgbWVzc2FnaW5nIGFic3RyYWN0aW9uIGFuZCBt
ZXNzYWdlIGxvb3BzIChidWlsZGluZyBvbgotdG9wIG9mIG1lc3NhZ2VfYnJva2VyKSwgYW5kIGhh
bmRsZXMgc3RhcnRpbmcgd29ya2VycyBieSBsYXVuY2hpbmcgcHJvY2Vzc2VzLgotCi1UaGVyZSBh
cmUgYSBsb3Qgb2YgY2xhc3NlcyBhbmQgb2JqZWN0cyBpbnZvbHZlZCBpbiBhIGZ1bGx5IGNvbm5l
Y3RlZCBzeXN0ZW0uCi1UaGV5IGludGVyYWN0IG1vcmUgb3IgbGVzcyBsaWtlOgotCi0gIE1hbmFn
ZXIgIC0tPiAgX0lubGluZU1hbmFnZXIgLS0tPiBfSW5saW5lV29ya2VyIDwtPiBXb3JrZXIKLSAg
ICAgXiAgICAgICAgICAgICAgICAgICAgXCAgICAgICAgICAgICAgIC8gICAgICAgICAgICAgIF4K
LSAgICAgfCAgICAgICAgICAgICAgICAgICAgIHYgICAgICAgICAgICAgdiAgICAgICAgICAgICAg
IHwKLSAgICAgXC0tLS0tLS0tLS0tLS0tLS0tLS0tICBNZXNzYWdlQnJva2VyICAgLS0tLS0tLS0t
LS0tLS8KLSIiIgotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9wdHBhcnNlCi1pbXBvcnQgcHJp
bnRpbmcKLWltcG9ydCBRdWV1ZQotaW1wb3J0IHN5cwotaW1wb3J0IHRocmVhZAotaW1wb3J0IHRo
cmVhZGluZwotaW1wb3J0IHRpbWUKLQotCi0jIEhhbmRsZSBQeXRob24gPCAyLjYgd2hlcmUgbXVs
dGlwcm9jZXNzaW5nIGlzbid0IGF2YWlsYWJsZS4KLXRyeToKLSAgICBpbXBvcnQgbXVsdGlwcm9j
ZXNzaW5nCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgbXVsdGlwcm9jZXNzaW5nID0gTm9uZQot
Ci0KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgc3RhY2tfdXRpbHMKLWZyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBwb3J0Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgbWVzc2FnZV9icm9rZXIKLQotCi1fbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLSMKLSMgVG9waWMgbmFtZXMgZm9yIE1hbmFnZXIg
PC0+IFdvcmtlciBtZXNzYWdpbmcKLSMKLU1BTkFHRVJfVE9QSUMgPSAnbWFuYWdlcnMnCi1BTllf
V09SS0VSX1RPUElDID0gJ3dvcmtlcnMnCi0KLQotZGVmIHJ1bnRpbWVfb3B0aW9ucygpOgotICAg
ICIiIlJldHVybiBhIGxpc3Qgb2Ygb3B0cGFyc2UuT3B0aW9uIG9iamVjdHMgZm9yIGFueSBydW50
aW1lIHZhbHVlcyB1c2VkCi0gICAgYnkgdGhpcyBtb2R1bGUuIiIiCi0gICAgb3B0aW9ucyA9IFsK
LSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0td29ya2VyLW1vZGVsIiwgYWN0aW9uPSJz
dG9yZSIsCi0gICAgICAgICAgICBoZWxwPSgiY29udHJvbHMgd29ya2VyIG1vZGVsLiBWYWxpZCB2
YWx1ZXMgYXJlICIKLSAgICAgICAgICAgICInaW5saW5lJyBhbmQgJ3Byb2Nlc3NlcycuIikpLAot
ICAgIF0KLSAgICByZXR1cm4gb3B0aW9ucwotCi0KLWRlZiBnZXQocG9ydCwgb3B0aW9ucywgY2xp
ZW50LCB3b3JrZXJfY2xhc3MpOgotICAgICIiIlJldHVybiBhIGNvbm5lY3Rpb24gdG8gYSBtYW5h
Z2VyL3dvcmtlciBtZXNzYWdlX2Jyb2tlcgotCi0gICAgQXJnczoKLSAgICAgICAgcG9ydCAtIGhh
bmRsZSB0byBsYXlvdXRfdGVzdHMvcG9ydCBvYmplY3QgZm9yIHBvcnQtc3BlY2lmaWMgc3R1ZmYK
LSAgICAgICAgb3B0aW9ucyAtIG9wdHBhcnNlIGFyZ3VtZW50IGZvciBjb21tYW5kLWxpbmUgb3B0
aW9ucwotICAgICAgICBjbGllbnQgLSBtZXNzYWdlX2Jyb2tlci5Ccm9rZXJDbGllbnQgaW1wbGVt
ZW50YXRpb24gdG8gZGlzcGF0Y2gKLSAgICAgICAgICAgIHJlcGxpZXMgdG8uCi0gICAgICAgIHdv
cmtlcl9jbGFzcyAtIHR5cGUgb2Ygd29ya2VycyB0byBjcmVhdGUuIFRoaXMgY2xhc3MgbXVzdCBp
bXBsZW1lbnQKLSAgICAgICAgICAgIHRoZSBtZXRob2RzIGluIEFic3RyYWN0V29ya2VyLgotICAg
IFJldHVybnM6Ci0gICAgICAgIEEgaGFuZGxlIHRvIGFuIG9iamVjdCB0aGF0IHdpbGwgdGFsayB0
byBhIG1lc3NhZ2UgYnJva2VyIGNvbmZpZ3VyZWQKLSAgICAgICAgZm9yIHRoZSBub3JtYWwgbWFu
YWdlci93b3JrZXIgY29tbXVuaWNhdGlvbi4KLSAgICAiIiIKLSAgICB3b3JrZXJfbW9kZWwgPSBv
cHRpb25zLndvcmtlcl9tb2RlbAotICAgIGlmIHdvcmtlcl9tb2RlbCA9PSAnaW5saW5lJzoKLSAg
ICAgICAgcXVldWVfY2xhc3MgPSBRdWV1ZS5RdWV1ZQotICAgICAgICBtYW5hZ2VyX2NsYXNzID0g
X0lubGluZU1hbmFnZXIKLSAgICBlbGlmIHdvcmtlcl9tb2RlbCA9PSAncHJvY2Vzc2VzJyBhbmQg
bXVsdGlwcm9jZXNzaW5nOgotICAgICAgICBxdWV1ZV9jbGFzcyA9IG11bHRpcHJvY2Vzc2luZy5R
dWV1ZQotICAgICAgICBtYW5hZ2VyX2NsYXNzID0gX011bHRpUHJvY2Vzc01hbmFnZXIKLSAgICBl
bHNlOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bnN1cHBvcnRlZCB2YWx1ZSBmb3IgLS13
b3JrZXItbW9kZWw6ICVzIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyX21vZGVs
KQotCi0gICAgYnJva2VyID0gbWVzc2FnZV9icm9rZXIuQnJva2VyKG9wdGlvbnMsIHF1ZXVlX2Ns
YXNzKQotICAgIHJldHVybiBtYW5hZ2VyX2NsYXNzKGJyb2tlciwgcG9ydCwgb3B0aW9ucywgY2xp
ZW50LCB3b3JrZXJfY2xhc3MpCi0KLQotY2xhc3MgQWJzdHJhY3RXb3JrZXIobWVzc2FnZV9icm9r
ZXIuQnJva2VyQ2xpZW50KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyX2Nvbm5lY3Rp
b24sIHdvcmtlcl9udW1iZXIsIG9wdGlvbnMpOgotICAgICAgICAiIiJUaGUgY29uc3RydWN0b3Ig
c2hvdWxkIGJlIHVzZWQgdG8gZG8gYW55IHNpbXBsZSBpbml0aWFsaXphdGlvbgotICAgICAgICBu
ZWNlc3NhcnksIGJ1dCBzaG91bGQgbm90IGRvIGFueXRoaW5nIHRoYXQgY3JlYXRlcyBkYXRhIHN0
cnVjdHVyZXMKLSAgICAgICAgdGhhdCBjYW5ub3QgYmUgUGlja2xlZCBvciBzZW50IGFjcm9zcyBw
cm9jZXNzZXMgKGxpa2Ugb3BlbmluZwotICAgICAgICBmaWxlcyBvciBzb2NrZXRzKS4gQ29tcGxl
eCBpbml0aWFsaXphdGlvbiBzaG91bGQgYmUgZG9uZSBhdCB0aGUKLSAgICAgICAgc3RhcnQgb2Yg
dGhlIHJ1bigpIGNhbGwuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICAgIGJyb2tlcl9jb25u
ZWN0aW9uIC0gaGFuZGxlIHRvIHRoZSBCcm9rZXJDb25uZWN0aW9uIG9iamVjdCBjcmVhdGluZwot
ICAgICAgICAgICAgICAgIHRoZSB3b3JrZXIgYW5kIHRoYXQgY2FuIGJlIHVzZWQgZm9yIG1lc3Nh
Z2luZy4KLSAgICAgICAgICAgIHdvcmtlcl9udW1iZXIgLSBpZGVudGlmaWVyIGZvciB0aGlzIHBh
cnRpY3VsYXIgd29ya2VyCi0gICAgICAgICAgICBvcHRpb25zIC0gY29tbWFuZC1saW5lIGFyZ3Vt
ZW50IG9iamVjdCBmcm9tIG9wdHBhcnNlIiIiCi0KLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvcgotCi0gICAgZGVmIHJ1bihzZWxmLCBwb3J0KToKLSAgICAgICAgIiIiQ2FsbGJhY2sg
Zm9yIHRoZSB3b3JrZXIgdG8gc3RhcnQgZXhlY3V0aW5nLiBUeXBpY2FsbHkgZG9lcyBhbnkKLSAg
ICAgICAgcmVtYWluaW5nIGluaXRpYWxpemF0aW9uIGFuZCB0aGVuIGNhbGxzIGJyb2tlcl9jb25u
ZWN0aW9uLnJ1bl9tZXNzYWdlX2xvb3AoKS4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvcgotCi0gICAgZGVmIGNhbmNlbChzZWxmKToKLSAgICAgICAgIiIiQ2FsbGVkIHdoZW4g
cG9zc2libGUgdG8gaW5kaWNhdGUgdG8gdGhlIHdvcmtlciB0byBzdG9wIHByb2Nlc3NpbmcKLSAg
ICAgICAgbWVzc2FnZXMgYW5kIHNodXQgZG93bi4gTm90ZSB0aGF0IHdvcmtlcnMgbWF5IGJlIHN0
b3BwZWQgd2l0aG91dCB0aGlzCi0gICAgICAgIG1ldGhvZCBiZWluZyBjYWxsZWQsIHNvIGNsaWVu
dHMgc2hvdWxkIG5vdCByZWx5IHNvbGVseSBvbiB0aGlzLiIiIgotICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yCi0KLQotY2xhc3MgX01hbmFnZXJDb25uZWN0aW9uKG1lc3NhZ2VfYnJv
a2VyLkJyb2tlckNvbm5lY3Rpb24pOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIG9w
dGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKToKLSAgICAgICAgIiIiQmFzZSBpbml0aWFsaXph
dGlvbiBmb3IgYWxsIE1hbmFnZXIgb2JqZWN0cy4KLQotICAgICAgICBBcmdzOgotICAgICAgICAg
ICAgYnJva2VyOiBoYW5kbGUgdG8gdGhlIG1lc3NhZ2VfYnJva2VyIG9iamVjdAotICAgICAgICAg
ICAgb3B0aW9uczogY29tbWFuZCBsaW5lIG9wdGlvbnMgb2JqZWN0Ci0gICAgICAgICAgICBjbGll
bnQ6IGNhbGxiYWNrIG9iamVjdCAodGhlIGNhbGxlcikKLSAgICAgICAgICAgIHdvcmtlcl9jbGFz
czogY2xhc3Mgb2JqZWN0IHRvIHVzZSB0byBjcmVhdGUgd29ya2Vycy4KLSAgICAgICAgIiIiCi0g
ICAgICAgIG1lc3NhZ2VfYnJva2VyLkJyb2tlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJv
a2VyLCBjbGllbnQsCi0gICAgICAgICAgICBNQU5BR0VSX1RPUElDLCBBTllfV09SS0VSX1RPUElD
KQotICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwotICAgICAgICBzZWxmLl93b3JrZXJf
Y2xhc3MgPSB3b3JrZXJfY2xhc3MKLQotICAgIGRlZiBzdGFydF93b3JrZXIoc2VsZiwgd29ya2Vy
X251bWJlcik6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotCi1jbGFzcyBf
SW5saW5lTWFuYWdlcihfTWFuYWdlckNvbm5lY3Rpb24pOgotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBicm9rZXIsIHBvcnQsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKToKLSAgICAgICAg
X01hbmFnZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgb3B0aW9ucywgY2xpZW50
LCB3b3JrZXJfY2xhc3MpCi0gICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0Ci0gICAgICAgIHNlbGYu
X2lubGluZV93b3JrZXIgPSBOb25lCi0KLSAgICBkZWYgc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtl
cl9udW1iZXIpOgotICAgICAgICBzZWxmLl9pbmxpbmVfd29ya2VyID0gX0lubGluZVdvcmtlckNv
bm5lY3Rpb24oc2VsZi5fYnJva2VyLCBzZWxmLl9wb3J0LAotICAgICAgICAgICAgc2VsZi5fY2xp
ZW50LCBzZWxmLl93b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIpCi0gICAgICAgIHJldHVybiBz
ZWxmLl9pbmxpbmVfd29ya2VyCi0KLSAgICBkZWYgcnVuX21lc3NhZ2VfbG9vcChzZWxmLCBkZWxh
eV9zZWNzPU5vbmUpOgotICAgICAgICAjIE5vdGUgdGhhdCBkZWxheV9zZWNzIGlzIGlnbm9yZWQg
aW4gdGhpcyBjYXNlIHNpbmNlIHdlIGNhbid0IGVhc2lseQotICAgICAgICAjIGltcGxlbWVudCBp
dC4KLSAgICAgICAgc2VsZi5faW5saW5lX3dvcmtlci5ydW4oKQotICAgICAgICBzZWxmLl9icm9r
ZXIucnVuX2FsbF9wZW5kaW5nKE1BTkFHRVJfVE9QSUMsIHNlbGYuX2NsaWVudCkKLQotCi1jbGFz
cyBfTXVsdGlQcm9jZXNzTWFuYWdlcihfTWFuYWdlckNvbm5lY3Rpb24pOgotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBicm9rZXIsIHBvcnQsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKToK
LSAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyBjbGFzcyBkb2VzIG5vdCBrZWVwIGEgaGFuZGxlIHRv
IHRoZSBhY3R1YWwgcG9ydAotICAgICAgICAjIG9iamVjdCwgYmVjYXVzZSBpdCBpc24ndCBQaWNr
bGFibGUuIEluc3RlYWQgaXQga2VlcHMgdGhlIHBvcnQKLSAgICAgICAgIyBuYW1lIGFuZCByZWNy
ZWF0ZXMgdGhlIHBvcnQgaW4gdGhlIGNoaWxkIHByb2Nlc3MgZnJvbSB0aGUgbmFtZQotICAgICAg
ICAjIGFuZCBvcHRpb25zLgotICAgICAgICBfTWFuYWdlckNvbm5lY3Rpb24uX19pbml0X18oc2Vs
ZiwgYnJva2VyLCBvcHRpb25zLCBjbGllbnQsIHdvcmtlcl9jbGFzcykKLSAgICAgICAgc2VsZi5f
cGxhdGZvcm1fbmFtZSA9IHBvcnQucmVhbF9uYW1lKCkKLQotICAgIGRlZiBzdGFydF93b3JrZXIo
c2VsZiwgd29ya2VyX251bWJlcik6Ci0gICAgICAgIHdvcmtlcl9jb25uZWN0aW9uID0gX011bHRp
UHJvY2Vzc1dvcmtlckNvbm5lY3Rpb24oc2VsZi5fYnJva2VyLCBzZWxmLl9wbGF0Zm9ybV9uYW1l
LAotICAgICAgICAgICAgc2VsZi5fd29ya2VyX2NsYXNzLCB3b3JrZXJfbnVtYmVyLCBzZWxmLl9v
cHRpb25zKQotICAgICAgICB3b3JrZXJfY29ubmVjdGlvbi5zdGFydCgpCi0gICAgICAgIHJldHVy
biB3b3JrZXJfY29ubmVjdGlvbgotCi0KLWNsYXNzIF9Xb3JrZXJDb25uZWN0aW9uKG1lc3NhZ2Vf
YnJva2VyLkJyb2tlckNvbm5lY3Rpb24pOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIs
IHdvcmtlcl9jbGFzcywgd29ya2VyX251bWJlciwgb3B0aW9ucyk6Ci0gICAgICAgIHNlbGYuX2Ns
aWVudCA9IHdvcmtlcl9jbGFzcyhzZWxmLCB3b3JrZXJfbnVtYmVyLCBvcHRpb25zKQotICAgICAg
ICBzZWxmLm5hbWUgPSBzZWxmLl9jbGllbnQubmFtZSgpCi0gICAgICAgIG1lc3NhZ2VfYnJva2Vy
LkJyb2tlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyLCBzZWxmLl9jbGllbnQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5ZX1dPUktF
Ul9UT1BJQywgTUFOQUdFUl9UT1BJQykKLQotICAgIGRlZiBjYW5jZWwoc2VsZik6Ci0gICAgICAg
IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIGRlZiBpc19hbGl2ZShzZWxmKToKLSAg
ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgZGVmIGpvaW4oc2VsZiwgdGlt
ZW91dCk6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIGRlZiB5aWVs
ZF90b19icm9rZXIoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotCi1jbGFzcyBfSW5saW5lV29ya2Vy
Q29ubmVjdGlvbihfV29ya2VyQ29ubmVjdGlvbik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJy
b2tlciwgcG9ydCwgbWFuYWdlcl9jbGllbnQsIHdvcmtlcl9jbGFzcywgd29ya2VyX251bWJlcik6
Ci0gICAgICAgIF9Xb3JrZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgd29ya2Vy
X2NsYXNzLCB3b3JrZXJfbnVtYmVyLCBwb3J0Ll9vcHRpb25zKQotICAgICAgICBzZWxmLl9hbGl2
ZSA9IEZhbHNlCi0gICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0Ci0gICAgICAgIHNlbGYuX21hbmFn
ZXJfY2xpZW50ID0gbWFuYWdlcl9jbGllbnQKLQotICAgIGRlZiBjYW5jZWwoc2VsZik6Ci0gICAg
ICAgIHNlbGYuX2NsaWVudC5jYW5jZWwoKQotCi0gICAgZGVmIGlzX2FsaXZlKHNlbGYpOgotICAg
ICAgICByZXR1cm4gc2VsZi5fYWxpdmUKLQotICAgIGRlZiBqb2luKHNlbGYsIHRpbWVvdXQpOgot
ICAgICAgICBhc3NlcnQgbm90IHNlbGYuX2FsaXZlCi0KLSAgICBkZWYgcnVuKHNlbGYpOgotICAg
ICAgICBzZWxmLl9hbGl2ZSA9IFRydWUKLSAgICAgICAgc2VsZi5fY2xpZW50LnJ1bihzZWxmLl9w
b3J0KQotICAgICAgICBzZWxmLl9hbGl2ZSA9IEZhbHNlCi0KLSAgICBkZWYgeWllbGRfdG9fYnJv
a2VyKHNlbGYpOgotICAgICAgICBzZWxmLl9icm9rZXIucnVuX2FsbF9wZW5kaW5nKE1BTkFHRVJf
VE9QSUMsIHNlbGYuX21hbmFnZXJfY2xpZW50KQotCi0KLWlmIG11bHRpcHJvY2Vzc2luZzoKLQot
ICAgIGNsYXNzIF9Qcm9jZXNzKG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKToKLSAgICAgICAgZGVm
IF9faW5pdF9fKHNlbGYsIHdvcmtlcl9jb25uZWN0aW9uLCBwbGF0Zm9ybV9uYW1lLCBvcHRpb25z
LCBjbGllbnQpOgotICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MuX19pbml0X18o
c2VsZikKLSAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uID0gd29ya2VyX2Nvbm5l
Y3Rpb24KLSAgICAgICAgICAgIHNlbGYuX3BsYXRmb3JtX25hbWUgPSBwbGF0Zm9ybV9uYW1lCi0g
ICAgICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwotICAgICAgICAgICAgc2VsZi5fY2xp
ZW50ID0gY2xpZW50Ci0KLSAgICAgICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgICAgIG9wdGlv
bnMgPSBzZWxmLl9vcHRpb25zCi0gICAgICAgICAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KHNlbGYu
X3BsYXRmb3JtX25hbWUsIG9wdGlvbnMpCi0KLSAgICAgICAgICAgICMgVGhlIHVuaXggbXVsdGlw
cm9jZXNzaW5nIGltcGxlbWVudGF0aW9uIGNsb25lcyB0aGUKLSAgICAgICAgICAgICMgbG9nIGhh
bmRsZXIgY29uZmlndXJhdGlvbiBpbnRvIHRoZSBjaGlsZCBwcm9jZXNzZXMsCi0gICAgICAgICAg
ICAjIGJ1dCB0aGUgd2luIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QuCi0gICAgICAgICAgICBjb25m
aWd1cmVfbG9nZ2luZyA9IChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJykKLQotICAgICAgICAgICAg
IyBGSVhNRTogdGhpcyB3b24ndCB3b3JrIGlmIHRoZSBjYWxsaW5nIHByb2Nlc3MgaXMgbG9nZ2lu
ZwotICAgICAgICAgICAgIyBzb21ld2hlcmUgb3RoZXIgdGhhbiBzeXMuc3RkZXJyIGFuZCBzeXMu
c3Rkb3V0LCBidXQgSSdtIG5vdCBzdXJlCi0gICAgICAgICAgICAjIGlmIHRoaXMgd2lsbCBiZSBh
biBpc3N1ZSBpbiBwcmFjdGljZS4KLSAgICAgICAgICAgIHByaW50ZXIgPSBwcmludGluZy5Qcmlu
dGVyKHBvcnRfb2JqLCBvcHRpb25zLCBzeXMuc3RkZXJyLCBzeXMuc3Rkb3V0LAotICAgICAgICAg
ICAgICAgIGNvbmZpZ3VyZV9sb2dnaW5nKQotICAgICAgICAgICAgc2VsZi5fY2xpZW50LnJ1bihw
b3J0X29iaikKLSAgICAgICAgICAgIHByaW50ZXIuY2xlYW51cCgpCi0KLQotY2xhc3MgX011bHRp
UHJvY2Vzc1dvcmtlckNvbm5lY3Rpb24oX1dvcmtlckNvbm5lY3Rpb24pOgotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBicm9rZXIsIHBsYXRmb3JtX25hbWUsIHdvcmtlcl9jbGFzcywgd29ya2VyX251
bWJlciwgb3B0aW9ucyk6Ci0gICAgICAgIF9Xb3JrZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYs
IGJyb2tlciwgd29ya2VyX2NsYXNzLCB3b3JrZXJfbnVtYmVyLCBvcHRpb25zKQotICAgICAgICBz
ZWxmLl9wcm9jID0gX1Byb2Nlc3Moc2VsZiwgcGxhdGZvcm1fbmFtZSwgb3B0aW9ucywgc2VsZi5f
Y2xpZW50KQotCi0gICAgZGVmIGNhbmNlbChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3By
b2MudGVybWluYXRlKCkKLQotICAgIGRlZiBpc19hbGl2ZShzZWxmKToKLSAgICAgICAgcmV0dXJu
IHNlbGYuX3Byb2MuaXNfYWxpdmUoKQotCi0gICAgZGVmIGpvaW4oc2VsZiwgdGltZW91dCk6Ci0g
ICAgICAgIHJldHVybiBzZWxmLl9wcm9jLmpvaW4odGltZW91dCkKLQotICAgIGRlZiBzdGFydChz
ZWxmKToKLSAgICAgICAgc2VsZi5fcHJvYy5zdGFydCgpCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXJf
dW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5CShy
ZXZpc2lvbiA5MDUyMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weQkod29ya2luZyBj
b3B5KQpAQCAtMSwyNDYgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMg
bWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBvcHRwYXJz
ZQotaW1wb3J0IFF1ZXVlCi1pbXBvcnQgc3lzCi1pbXBvcnQgdW5pdHRlc3QKLQotdHJ5OgotICAg
IGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBtdWx0aXBy
b2Nlc3NpbmcgPSBOb25lCi0KLQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBv
dXRwdXRjYXB0dXJlCi0KLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBwb3J0Ci1m
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgbWFuYWdlcl93
b3JrZXJfYnJva2VyCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBp
bXBvcnQgbWVzc2FnZV9icm9rZXIKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9w
YWNrYWdlIGltcG9ydCBwcmludGluZwotCi0jIEluIG9yZGVyIHRvIHJlbGlhYmx5IGNvbnRyb2wg
d2hlbiBjaGlsZCB3b3JrZXJzIGFyZSBzdGFydGluZyBhbmQgc3RvcHBpbmcsCi0jIHdlIHVzZSBh
IHBhaXIgb2YgZ2xvYmFsIHZhcmlhYmxlcyB0byBob2xkIHF1ZXVlcyB1c2VkIGZvciBtZXNzYWdp
bmcuIElkZWFsbHkKLSMgd2Ugd291bGRuJ3QgbmVlZCBnbG9iYWxzLCBidXQgd2UgY2FuJ3QgcGFz
cyB0aGVzZSB0aHJvdWdoIGEgbGV4aWNhbCBjbG9zdXJlCi0jIGJlY2F1c2UgdGhvc2UgY2FuJ3Qg
YmUgUGlja2xlZCBhbmQgc2VudCB0byBhIHN1YnByb2Nlc3MsIGFuZCB3ZSdkIHByZWZlciBub3QK
LSMgdG8gaGF2ZSB0byBwYXNzIGV4dHJhIGFyZ3VtZW50cyB0byB0aGUgd29ya2VyIGluIHRoZSBz
dGFydF93b3JrZXIoKSBjYWxsLgotc3RhcnRpbmdfcXVldWUgPSBOb25lCi1zdG9wcGluZ19xdWV1
ZSA9IE5vbmUKLQotCi1kZWYgbWFrZV9icm9rZXIobWFuYWdlciwgd29ya2VyX21vZGVsLCBzdGFy
dF9xdWV1ZT1Ob25lLCBzdG9wX3F1ZXVlPU5vbmUpOgotICAgIGdsb2JhbCBzdGFydGluZ19xdWV1
ZQotICAgIGdsb2JhbCBzdG9wcGluZ19xdWV1ZQotICAgIHN0YXJ0aW5nX3F1ZXVlID0gc3RhcnRf
cXVldWUKLSAgICBzdG9wcGluZ19xdWV1ZSA9IHN0b3BfcXVldWUKLSAgICBvcHRpb25zID0gZ2V0
X29wdGlvbnMod29ya2VyX21vZGVsKQotICAgIHJldHVybiBtYW5hZ2VyX3dvcmtlcl9icm9rZXIu
Z2V0KHBvcnQuZ2V0KCJ0ZXN0IiksIG9wdGlvbnMsIG1hbmFnZXIsIF9UZXN0V29ya2VyKQotCi0K
LWNsYXNzIF9UZXN0V29ya2VyKG1hbmFnZXJfd29ya2VyX2Jyb2tlci5BYnN0cmFjdFdvcmtlcik6
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlcl9jb25uZWN0aW9uLCB3b3JrZXJfbnVtYmVy
LCBvcHRpb25zKToKLSAgICAgICAgc2VsZi5fYnJva2VyX2Nvbm5lY3Rpb24gPSBicm9rZXJfY29u
bmVjdGlvbgotICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwotICAgICAgICBzZWxmLl93
b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgotICAgICAgICBzZWxmLl9uYW1lID0gJ1Rlc3RX
b3JrZXIvJWQnICUgd29ya2VyX251bWJlcgotICAgICAgICBzZWxmLl9zdG9wcGVkID0gRmFsc2UK
LSAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBGYWxzZQotICAgICAgICBzZWxmLl9zdGFydGluZ19x
dWV1ZSA9IHN0YXJ0aW5nX3F1ZXVlCi0gICAgICAgIHNlbGYuX3N0b3BwaW5nX3F1ZXVlID0gc3Rv
cHBpbmdfcXVldWUKLQotICAgIGRlZiBoYW5kbGVfc3RvcChzZWxmLCBzcmMpOgotICAgICAgICBz
ZWxmLl9zdG9wcGVkID0gVHJ1ZQotCi0gICAgZGVmIGhhbmRsZV90ZXN0KHNlbGYsIHNyYywgYW5f
aW50LCBhX3N0cik6Ci0gICAgICAgIGFzc2VydCBhbl9pbnQgPT0gMQotICAgICAgICBhc3NlcnQg
YV9zdHIgPT0gImhlbGxvLCB3b3JsZCIKLSAgICAgICAgc2VsZi5fYnJva2VyX2Nvbm5lY3Rpb24u
cG9zdF9tZXNzYWdlKCd0ZXN0JywgMiwgJ2hpLCBldmVyeWJvZHknKQotCi0gICAgZGVmIGlzX2Rv
bmUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9zdG9wcGVkIG9yIHNlbGYuX2NhbmNlbGVk
Ci0KLSAgICBkZWYgbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKLQotICAg
IGRlZiBjYW5jZWwoc2VsZik6Ci0gICAgICAgIHNlbGYuX2NhbmNlbGVkID0gVHJ1ZQotCi0gICAg
ZGVmIHJ1bihzZWxmLCBwb3J0KToKLSAgICAgICAgaWYgc2VsZi5fc3RhcnRpbmdfcXVldWU6Ci0g
ICAgICAgICAgICBzZWxmLl9zdGFydGluZ19xdWV1ZS5wdXQoJycpCi0KLSAgICAgICAgaWYgc2Vs
Zi5fc3RvcHBpbmdfcXVldWU6Ci0gICAgICAgICAgICBzZWxmLl9zdG9wcGluZ19xdWV1ZS5nZXQo
KQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9icm9rZXJfY29ubmVjdGlvbi5ydW5f
bWVzc2FnZV9sb29wKCkKLSAgICAgICAgICAgIHNlbGYuX2Jyb2tlcl9jb25uZWN0aW9uLnlpZWxk
X3RvX2Jyb2tlcigpCi0gICAgICAgICAgICBzZWxmLl9icm9rZXJfY29ubmVjdGlvbi5wb3N0X21l
c3NhZ2UoJ2RvbmUnKQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgotICAgICAgICAgICAg
c2VsZi5fYnJva2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdleGNlcHRpb24nLCAodHlwZShl
KSwgc3RyKGUpLCBOb25lKSkKLQotCi1kZWYgZ2V0X29wdGlvbnMod29ya2VyX21vZGVsKToKLSAg
ICBvcHRpb25fbGlzdCA9IChtYW5hZ2VyX3dvcmtlcl9icm9rZXIucnVudGltZV9vcHRpb25zKCkg
KwotICAgICAgICAgICAgICAgICAgIHByaW50aW5nLnByaW50X29wdGlvbnMoKSArCi0gICAgICAg
ICAgICAgICAgICAgW29wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWV4cGVyaW1lbnRhbC1mdWxseS1w
YXJhbGxlbCIsIGRlZmF1bHQ9RmFsc2UpLAotICAgICAgICAgICAgICAgICAgICBvcHRwYXJzZS5t
YWtlX29wdGlvbigiLS1jaGlsZC1wcm9jZXNzZXMiLCBkZWZhdWx0PScyJyldKQotICAgIHBhcnNl
ciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlzdD1vcHRpb25fbGlzdCkKLSAgICBv
cHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncz1bJy0td29ya2VyLW1vZGVsJywg
d29ya2VyX21vZGVsXSkKLSAgICByZXR1cm4gb3B0aW9ucwotCi0KLQotY2xhc3MgRnVuY3Rpb25U
ZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfZ2V0X19pbmxpbmUoc2VsZik6
Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYWtlX2Jyb2tlcihzZWxmLCAnaW5saW5lJykgaXMg
bm90IE5vbmUpCi0KLSAgICBkZWYgdGVzdF9nZXRfX3Byb2Nlc3NlcyhzZWxmKToKLSAgICAgICAg
IyBUaGlzIHRlc3Qgc29tZXRpbWVzIGZhaWxzIG9uIFdpbmRvd3MuIFNlZSA8aHR0cDovL3dlYmtp
dC5vcmcvYi81NTA4Nz4uCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2N5Z3dpbicsICd3
aW4zMicpOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgaWYgbXVsdGlwcm9jZXNzaW5n
OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1ha2VfYnJva2VyKHNlbGYsICdwcm9jZXNz
ZXMnKSBpcyBub3QgTm9uZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0
UmFpc2VzKFZhbHVlRXJyb3IsIG1ha2VfYnJva2VyLCBzZWxmLCAncHJvY2Vzc2VzJykKLQotICAg
IGRlZiB0ZXN0X2dldF9fdW5rbm93bihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMo
VmFsdWVFcnJvciwgbWFrZV9icm9rZXIsIHNlbGYsICd1bmtub3duJykKLQotCi1jbGFzcyBfVGVz
dHNNaXhpbihvYmplY3QpOgotICAgICIiIk1peGluIGNsYXNzIHRoYXQgaW1wbGVtZW50cyBhIHNl
cmllcyBvZiB0ZXN0cyB0byBlbmZvcmNlIHRoZQotICAgIGNvbnRyYWN0IGFsbCBpbXBsZW1lbnRh
dGlvbnMgbXVzdCBmb2xsb3cuIiIiCi0KLSAgICBkZWYgbmFtZShzZWxmKToKLSAgICAgICAgcmV0
dXJuICdUZXN0ZXInCi0KLSAgICBkZWYgaXNfZG9uZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNl
bGYuX2RvbmUKLQotICAgIGRlZiBoYW5kbGVfZG9uZShzZWxmLCBzcmMpOgotICAgICAgICBzZWxm
Ll9kb25lID0gVHJ1ZQotCi0gICAgZGVmIGhhbmRsZV90ZXN0KHNlbGYsIHNyYywgYW5faW50LCBh
X3N0cik6Ci0gICAgICAgIHNlbGYuX2FuX2ludCA9IGFuX2ludAotICAgICAgICBzZWxmLl9hX3N0
ciA9IGFfc3RyCi0KLSAgICBkZWYgaGFuZGxlX2V4Y2VwdGlvbihzZWxmLCBzcmMsIGV4Y19pbmZv
KToKLSAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gZXhjX2luZm8KLSAgICAgICAgc2VsZi5fZG9u
ZSA9IFRydWUKLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5fYW5faW50ID0g
Tm9uZQotICAgICAgICBzZWxmLl9hX3N0ciA9IE5vbmUKLSAgICAgICAgc2VsZi5fYnJva2VyID0g
Tm9uZQotICAgICAgICBzZWxmLl9kb25lID0gRmFsc2UKLSAgICAgICAgc2VsZi5fZXhjZXB0aW9u
ID0gTm9uZQotICAgICAgICBzZWxmLl93b3JrZXJfbW9kZWwgPSBOb25lCi0KLSAgICBkZWYgbWFr
ZV9icm9rZXIoc2VsZiwgc3RhcnRpbmdfcXVldWU9Tm9uZSwgc3RvcHBpbmdfcXVldWU9Tm9uZSk6
Ci0gICAgICAgIHNlbGYuX2Jyb2tlciA9IG1ha2VfYnJva2VyKHNlbGYsIHNlbGYuX3dvcmtlcl9t
b2RlbCwgc3RhcnRpbmdfcXVldWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0b3BwaW5nX3F1ZXVlKQotCi0gICAgZGVmIHRlc3RfY2FuY2VsKHNlbGYpOgotICAgICAgICBz
ZWxmLm1ha2VfYnJva2VyKCkKLSAgICAgICAgd29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dv
cmtlcigwKQotICAgICAgICB3b3JrZXIuY2FuY2VsKCkKLSAgICAgICAgc2VsZi5fYnJva2VyLnBv
c3RfbWVzc2FnZSgndGVzdCcsIDEsICdoZWxsbywgd29ybGQnKQotICAgICAgICB3b3JrZXIuam9p
bigwLjUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod29ya2VyLmlzX2FsaXZlKCkpCi0KLSAg
ICBkZWYgdGVzdF9kb25lKHNlbGYpOgotICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkKLSAgICAg
ICAgd29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigwKQotICAgICAgICBzZWxmLl9i
cm9rZXIucG9zdF9tZXNzYWdlKCd0ZXN0JywgMSwgJ2hlbGxvLCB3b3JsZCcpCi0gICAgICAgIHNl
bGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3N0b3AnKQotICAgICAgICBzZWxmLl9icm9rZXIucnVu
X21lc3NhZ2VfbG9vcCgpCi0gICAgICAgIHdvcmtlci5qb2luKDAuNSkKLSAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZSh3b3JrZXIuaXNfYWxpdmUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNl
bGYuaXNfZG9uZSgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2FuX2ludCwgMikK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9hX3N0ciwgJ2hpLCBldmVyeWJvZHknKQot
Ci0gICAgZGVmIHRlc3RfdW5rbm93bl9tZXNzYWdlKHNlbGYpOgotICAgICAgICBzZWxmLm1ha2Vf
YnJva2VyKCkKLSAgICAgICAgd29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigwKQot
ICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCd1bmtub3duJykKLSAgICAgICAgc2Vs
Zi5fYnJva2VyLnJ1bl9tZXNzYWdlX2xvb3AoKQotICAgICAgICB3b3JrZXIuam9pbigwLjUpCi0K
LSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaXNfZG9uZSgpKQotICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKHdvcmtlci5pc19hbGl2ZSgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhz
ZWxmLl9leGNlcHRpb25bMF0sIFZhbHVlRXJyb3IpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KHNlbGYuX2V4Y2VwdGlvblsxXSwKLSAgICAgICAgICAgICJUZXN0V29ya2VyLzA6IHJlY2VpdmVk
IG1lc3NhZ2UgJ3Vua25vd24nIGl0IGNvdWxkbid0IGhhbmRsZSIpCi0KLQotIyBGSVhNRTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NTIwLgotaWYgbXVsdGlwcm9j
ZXNzaW5nIGFuZCBzeXMucGxhdGZvcm0gbm90IGluICgnY3lnd2luJywgJ3dpbjMyJyk6Ci0KLSAg
ICBjbGFzcyBNdWx0aVByb2Nlc3NCcm9rZXJUZXN0cyhfVGVzdHNNaXhpbiwgdW5pdHRlc3QuVGVz
dENhc2UpOgotICAgICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgICAgICBfVGVzdHNNaXhp
bi5zZXRVcChzZWxmKQotICAgICAgICAgICAgc2VsZi5fd29ya2VyX21vZGVsID0gJ3Byb2Nlc3Nl
cycKLQotICAgICAgICBkZWYgcXVldWUoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gbXVsdGlw
cm9jZXNzaW5nLlF1ZXVlKCkKLQotCi1jbGFzcyBGdW5jdGlvbnNUZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKLSAgICBkZWYgdGVzdF9ydW50aW1lX29wdGlvbnMoc2VsZik6Ci0gICAgICAgIG9wdGlv
bl9saXN0ID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLnJ1bnRpbWVfb3B0aW9ucygpCi0gICAgICAg
IHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlzdD1vcHRpb25fbGlzdCkK
LSAgICAgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKFtdKQotICAgICAgICBz
ZWxmLmFzc2VydFRydWUob3B0aW9ucykKLQotCi1jbGFzcyBJbnRlcmZhY2VUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKLSAgICAjIFRoZXNlIHRlc3RzIG1vc3RseSBleGlzdCB0byBwYWNpZnkgY292
ZXJhZ2UuCi0KLSAgICAjIEZJWE1FOiBUaGVyZSBtdXN0IGJlIGEgYmV0dGVyIHdheSB0byBkbyB0
aGlzIGFuZCBhbHNvIHZlcmlmeQotICAgICMgdGhhdCBjbGFzc2VzIGRvIGltcGxlbWVudCBldmVy
eSBhYnN0cmFjdCBtZXRob2QgaW4gYW4gaW50ZXJmYWNlLgotICAgIGRlZiB0ZXN0X21hbmFnZXJj
b25uZWN0aW9uX2lzX2Fic3RyYWN0KHNlbGYpOgotICAgICAgICAjIFRlc3QgdGhhdCBhbGwgdGhl
IGJhc2UgY2xhc3MgbWV0aG9kcyBhcmUgYWJzdHJhY3QgYW5kIGhhdmUgdGhlCi0gICAgICAgICMg
c2lnbmF0dXJlIHdlIGV4cGVjdC4KLSAgICAgICAgYnJva2VyID0gbWFrZV9icm9rZXIoc2VsZiwg
J2lubGluZScpCi0gICAgICAgIG9iaiA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fTWFuYWdlckNv
bm5lY3Rpb24oYnJva2VyLl9icm9rZXIsIE5vbmUsIHNlbGYsIE5vbmUpCi0gICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5zdGFydF93b3JrZXIsIDApCi0K
LSAgICBkZWYgdGVzdF93b3JrZXJjb25uZWN0aW9uX2lzX2Fic3RyYWN0KHNlbGYpOgotICAgICAg
ICAjIFRlc3QgdGhhdCBhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kcyBhcmUgYWJzdHJhY3QgYW5k
IGhhdmUgdGhlCi0gICAgICAgICMgc2lnbmF0dXJlIHdlIGV4cGVjdC4KLSAgICAgICAgYnJva2Vy
ID0gbWFrZV9icm9rZXIoc2VsZiwgJ2lubGluZScpCi0gICAgICAgIG9iaiA9IG1hbmFnZXJfd29y
a2VyX2Jyb2tlci5fV29ya2VyQ29ubmVjdGlvbihicm9rZXIuX2Jyb2tlciwgX1Rlc3RXb3JrZXIs
IDAsIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3Is
IG9iai5jYW5jZWwpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJy
b3IsIG9iai5pc19hbGl2ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50
ZWRFcnJvciwgb2JqLmpvaW4sIE5vbmUpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoK
LSAgICB1bml0dGVzdC5tYWluKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2Vf
YnJva2VyLnB5CShyZXZpc2lvbiA5MDUyMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0xLDE5NiArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6
Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiTW9kdWxlIGZvciBoYW5k
bGluZyBtZXNzYWdpbmcgZm9yIHJ1bi13ZWJraXQtdGVzdHMuCi0KLVRoaXMgbW9kdWxlIGltcGxl
bWVudHMgYSBzaW1wbGUgbWVzc2FnZSBicm9rZXIgYWJzdHJhY3Rpb24gdGhhdCB3aWxsIGJlCi11
c2VkIHRvIGNvb3JkaW5hdGUgbWVzc2FnZXMgYmV0d2VlbiB0aGUgbWFpbiBydW4td2Via2l0LXRl
c3RzIHRocmVhZAotKGFrYSBUZXN0UnVubmVyKSBhbmQgdGhlIGluZGl2aWR1YWwgd29ya2VyIHRo
cmVhZHMgKHByZXZpb3VzbHkga25vd24gYXMKLWR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkcykuCi0K
LVRoZSBicm9rZXIgc2ltcGx5IGRpc3RyaWJ1dGVzIG1lc3NhZ2VzIG9udG8gdG9waWNzIChuYW1l
ZCBxdWV1ZXMpOyB0aGUgYWN0dWFsCi1xdWV1ZXMgdGhlbXNlbHZlcyBhcmUgcHJvdmlkZWQgYnkg
dGhlIGNhbGxlciwgYXMgdGhlIHF1ZXVlJ3MgaW1wbGVtZW50YXRpb24KLXJlcXVpcmVtZW50cyB2
YXJpZXMgdmFyeSBkZXBlbmRpbmcgb24gdGhlIGRlc2lyZWQgY29uY3VycmVuY3kgbW9kZWwKLShu
b25lL3RocmVhZHMvcHJvY2Vzc2VzKS4KLQotSW4gb3JkZXIgZm9yIHNoYXJlZC1ub3RoaW5nIG1l
c3NhZ2luZyBiZXR3ZWVuIHByb2Nlc3NpbmcgdG8gYmUgcG9zc2libGUsCi1NZXNzYWdlcyBtdXN0
IGJlIHBpY2tsYWJsZS4KLQotVGhlIG1vZHVsZSBkZWZpbmVzIG9uZSBpbnRlcmZhY2UgYW5kIHR3
byBjbGFzc2VzLiBDYWxsZXJzIG9mIHRoaXMgcGFja2FnZQotbXVzdCBpbXBsZW1lbnQgdGhlIEJy
b2tlckNsaWVudCBpbnRlcmZhY2UsIGFuZCBtb3N0IGNhbGxlcnMgd2lsbCBjcmVhdGUKLUJyb2tl
ckNvbm5lY3Rpb25zIGFzIHdlbGwgYXMgQnJva2Vycy4KLQotVGhlIGNsYXNzZXMgcmVsYXRlIHRv
IGVhY2ggb3RoZXIgYXM6Ci0KLSAgICBCcm9rZXJDbGllbnQgICAtLS0tLS0+ICAgIEJyb2tlckNv
bm5lY3Rpb24KLSAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAg
fCAgICAgICAgICAgICAgICAgICAgICAgICB2Ci0gICAgICAgICBcLS0tLS0tLS0tLS0tLS0tLSAg
ICAgIEJyb2tlcgotCi0oVGhlIEJyb2tlckNsaWVudCBuZXZlciBjYWxscyBicm9rZXIgZGlyZWN0
bHkgYWZ0ZXIgaXQgaXMgY3JlYXRlZCwgb25seQotQnJva2VyQ29ubmVjdGlvbi4gIEJyb2tlckNv
bm5lY3Rpb24gcGFzc2VzIGEgcmVmZXJlbmNlIHRvIEJyb2tlckNsaWVudCB0bwotQnJva2VyLCBh
bmQgQnJva2VyIG9ubHkgaW52b2tlcyB0aGF0IHJlZmVyZW5jZSwgbmV2ZXIgdGFsa2luZyBkaXJl
Y3RseSB0bwotQnJva2VyQ29ubmVjdGlvbikuCi0iIiIKLQotaW1wb3J0IGNQaWNrbGUKLWltcG9y
dCBsb2dnaW5nCi1pbXBvcnQgUXVldWUKLWltcG9ydCB0aW1lCi0KLQotX2xvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKF9fbmFtZV9fKQotCi0KLWNsYXNzIEJyb2tlckNsaWVudChvYmplY3QpOgotICAg
ICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgLyBpbnRlcmZhY2UgdGhhdCBhbGwgbWVzc2FnZSBicm9r
ZXIgY2xpZW50cyBtdXN0Ci0gICAgaW1wbGVtZW50LiBJbiBhZGRpdGlvbiB0byB0aGUgbWV0aG9k
cyBiZWxvdywgYnkgY29udmVudGlvbiBjbGllbnRzCi0gICAgaW1wbGVtZW50IHJvdXRpbmVzIG9m
IHRoZSBzaWduYXR1cmUgdHlwZQotCi0gICAgICAgIGhhbmRsZV9NRVNTQUdFX05BTUUoc2VsZiwg
c3JjLCAuLi4pOgotCi0gICAgd2hlcmUgTUVTU0FHRV9OQU1FIG1hdGNoZXMgdGhlIHN0cmluZyBw
YXNzZWQgdG8gcG9zdF9tZXNzYWdlKCksIGFuZAotICAgIHNyYyBpbmRpY2F0ZXMgdGhlIG5hbWUg
b2YgdGhlIHNlbmRlci4gSWYgdGhlIG1lc3NhZ2UgY29udGFpbnMgdmFsdWVzIGluCi0gICAgdGhl
IG1lc3NhZ2UgYm9keSwgdGhvc2Ugd2lsbCBiZSBwcm92aWRlZCBhcyBvcHRwYXJhbXMuIiIiCi0K
LSAgICBkZWYgX19pbml0X18oc2VsZiwgKm9wdGFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgZGVmIGlzX2RvbmUoc2VsZik6Ci0gICAgICAg
ICIiIkNhbGxlZCBmcm9tIGluc2lkZSBydW5fbWVzc2FnZV9sb29wKCkgdG8gaW5kaWNhdGUgd2hl
dGhlciB0byBleGl0LiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAg
ICBkZWYgbmFtZShzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIGEgbmFtZSB0aGF0IGlkZW50aWZp
ZXMgdGhlIGNsaWVudC4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0K
LWNsYXNzIEJyb2tlcihvYmplY3QpOgotICAgICIiIkJyb2tlcnMgcHJvdmlkZSB0aGUgYmFzaWMg
bW9kZWwgb2YgYSBzZXQgb2YgdG9waWNzLiBDbGllbnRzIGNhbiBwb3N0IGEKLSAgICBtZXNzYWdl
IHRvIGFueSB0b3BpYyB1c2luZyBwb3N0X21lc3NhZ2UoKSwgYW5kIGNhbiBwcm9jZXNzIG1lc3Nh
Z2VzIG9uIG9uZQotICAgIHRvcGljIGF0IGEgdGltZSB1c2luZyBydW5fbWVzc2FnZV9sb29wKCku
IiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucywgcXVldWVfbWFrZXIpOgotICAg
ICAgICAiIiJBcmdzOgotICAgICAgICAgICAgb3B0aW9uczogYSBydW50aW1lIG9wdGlvbiBjbGFz
cyBmcm9tIG9wdHBhcnNlCi0gICAgICAgICAgICBxdWV1ZV9tYWtlcjogYSBmYWN0b3J5IG1ldGhv
ZCB0aGF0IHJldHVybnMgb2JqZWN0cyBpbXBsZW1lbnRpbmcgYQotICAgICAgICAgICAgICAgIFF1
ZXVlIGludGVyZmFjZSAocHV0KCkvZ2V0KCkpLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5f
b3B0aW9ucyA9IG9wdGlvbnMKLSAgICAgICAgc2VsZi5fcXVldWVfbWFrZXIgPSBxdWV1ZV9tYWtl
cgotICAgICAgICBzZWxmLl90b3BpY3MgPSB7fQotCi0gICAgZGVmIGFkZF90b3BpYyhzZWxmLCB0
b3BpY19uYW1lKToKLSAgICAgICAgaWYgdG9waWNfbmFtZSBub3QgaW4gc2VsZi5fdG9waWNzOgot
ICAgICAgICAgICAgc2VsZi5fdG9waWNzW3RvcGljX25hbWVdID0gc2VsZi5fcXVldWVfbWFrZXIo
KQotCi0gICAgZGVmIF9nZXRfcXVldWVfZm9yX3RvcGljKHNlbGYsIHRvcGljX25hbWUpOgotICAg
ICAgICByZXR1cm4gc2VsZi5fdG9waWNzW3RvcGljX25hbWVdCi0KLSAgICBkZWYgcG9zdF9tZXNz
YWdlKHNlbGYsIGNsaWVudCwgdG9waWNfbmFtZSwgbWVzc2FnZV9uYW1lLCAqbWVzc2FnZV9hcmdz
KToKLSAgICAgICAgIiIiUG9zdCBhIG1lc3NhZ2UgdG8gdGhlIGFwcHJvcHJpYXRlIHRvcGljIG5h
bWUuCi0KLSAgICAgICAgTWVzc2FnZXMgaGF2ZSBhIG5hbWUgYW5kIGEgdHVwbGUgb2Ygb3B0aW9u
YWwgYXJndW1lbnRzLiBCb3RoIG11c3QgYmUgcGlja2xhYmxlLiIiIgotICAgICAgICBtZXNzYWdl
ID0gX01lc3NhZ2UoY2xpZW50Lm5hbWUoKSwgdG9waWNfbmFtZSwgbWVzc2FnZV9uYW1lLCBtZXNz
YWdlX2FyZ3MpCi0gICAgICAgIHF1ZXVlID0gc2VsZi5fZ2V0X3F1ZXVlX2Zvcl90b3BpYyh0b3Bp
Y19uYW1lKQotICAgICAgICBxdWV1ZS5wdXQoX01lc3NhZ2UuZHVtcHMobWVzc2FnZSkpCi0KLSAg
ICBkZWYgcnVuX21lc3NhZ2VfbG9vcChzZWxmLCB0b3BpY19uYW1lLCBjbGllbnQsIGRlbGF5X3Nl
Y3M9Tm9uZSk6Ci0gICAgICAgICIiIkxvb3AgcHJvY2Vzc2luZyBtZXNzYWdlcyB1bnRpbCBjbGll
bnQuaXNfZG9uZSgpIG9yIGRlbGF5IHBhc3Nlcy4KLQotICAgICAgICBUbyBydW4gaW5kZWZpbml0
ZWx5LCBzZXQgZGVsYXlfc2VjcyB0byBOb25lLiIiIgotICAgICAgICBhc3NlcnQgZGVsYXlfc2Vj
cyBpcyBOb25lIG9yIGRlbGF5X3NlY3MgPiAwCi0gICAgICAgIHNlbGYuX3J1bl9sb29wKHRvcGlj
X25hbWUsIGNsaWVudCwgYmxvY2s9VHJ1ZSwgZGVsYXlfc2Vjcz1kZWxheV9zZWNzKQotCi0gICAg
ZGVmIHJ1bl9hbGxfcGVuZGluZyhzZWxmLCB0b3BpY19uYW1lLCBjbGllbnQpOgotICAgICAgICAi
IiJQcm9jZXNzIG1lc3NhZ2VzIHVudGlsIGNsaWVudC5pc19kb25lKCkgb3IgY2FsbGVyIHdvdWxk
IGJsb2NrLiIiIgotICAgICAgICBzZWxmLl9ydW5fbG9vcCh0b3BpY19uYW1lLCBjbGllbnQsIGJs
b2NrPUZhbHNlLCBkZWxheV9zZWNzPU5vbmUpCi0KLSAgICBkZWYgX3J1bl9sb29wKHNlbGYsIHRv
cGljX25hbWUsIGNsaWVudCwgYmxvY2ssIGRlbGF5X3NlY3MpOgotICAgICAgICBxdWV1ZSA9IHNl
bGYuX2dldF9xdWV1ZV9mb3JfdG9waWModG9waWNfbmFtZSkKLSAgICAgICAgd2hpbGUgbm90IGNs
aWVudC5pc19kb25lKCk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcyA9IHF1
ZXVlLmdldChibG9jaywgZGVsYXlfc2VjcykKLSAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0
eToKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIG1zZyA9IF9NZXNzYWdlLmxv
YWRzKHMpCi0gICAgICAgICAgICBzZWxmLl9kaXNwYXRjaF9tZXNzYWdlKG1zZywgY2xpZW50KQot
Ci0gICAgZGVmIF9kaXNwYXRjaF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIGNsaWVudCk6Ci0gICAg
ICAgIGlmIG5vdCBoYXNhdHRyKGNsaWVudCwgJ2hhbmRsZV8nICsgbWVzc2FnZS5uYW1lKToKLSAg
ICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCi0gICAgICAgICAgICAgICAiJXM6IHJlY2VpdmVk
IG1lc3NhZ2UgJyVzJyBpdCBjb3VsZG4ndCBoYW5kbGUiICUKLSAgICAgICAgICAgICAgIChjbGll
bnQubmFtZSgpLCBtZXNzYWdlLm5hbWUpKQotICAgICAgICBvcHRhcmdzID0gbWVzc2FnZS5hcmdz
Ci0gICAgICAgIG1lc3NhZ2VfaGFuZGxlciA9IGdldGF0dHIoY2xpZW50LCAnaGFuZGxlXycgKyBt
ZXNzYWdlLm5hbWUpCi0gICAgICAgIG1lc3NhZ2VfaGFuZGxlcihtZXNzYWdlLnNyYywgKm9wdGFy
Z3MpCi0KLQotY2xhc3MgX01lc3NhZ2Uob2JqZWN0KToKLSAgICBAc3RhdGljbWV0aG9kCi0gICAg
ZGVmIGxvYWRzKHN0cik6Ci0gICAgICAgIG9iaiA9IGNQaWNrbGUubG9hZHMoc3RyKQotICAgICAg
ICBhc3NlcnQoaXNpbnN0YW5jZShvYmosIF9NZXNzYWdlKSkKLSAgICAgICAgcmV0dXJuIG9iagot
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNyYywgdG9waWNfbmFtZSwgbWVzc2FnZV9uYW1lLCBt
ZXNzYWdlX2FyZ3MpOgotICAgICAgICBzZWxmLnNyYyA9IHNyYwotICAgICAgICBzZWxmLnRvcGlj
X25hbWUgPSB0b3BpY19uYW1lCi0gICAgICAgIHNlbGYubmFtZSA9IG1lc3NhZ2VfbmFtZQotICAg
ICAgICBzZWxmLmFyZ3MgPSBtZXNzYWdlX2FyZ3MKLQotICAgIGRlZiBkdW1wcyhzZWxmKToKLSAg
ICAgICAgcmV0dXJuIGNQaWNrbGUuZHVtcHMoc2VsZikKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxm
KToKLSAgICAgICAgcmV0dXJuICgiX01lc3NhZ2UoZnJvbT0nJXMnLCB0b3BpY19uYW1lPSclcycs
IG1lc3NhZ2VfbmFtZT0nJXMnKSIgJQotICAgICAgICAgICAgICAgIChzZWxmLnNyYywgc2VsZi50
b3BpY19uYW1lLCBzZWxmLm5hbWUpKQotCi0KLWNsYXNzIEJyb2tlckNvbm5lY3Rpb24ob2JqZWN0
KToKLSAgICAiIiJCcm9rZXJDb25uZWN0aW9uIHByb3ZpZGVzIGEgY29ubmVjdGlvbi1vcmllbnRl
ZCBmYWNhZGUgb24gdG9wIG9mIGEKLSAgICBCcm9rZXIsIHNvIHRoYXQgY2FsbGVycyBkb24ndCBo
YXZlIHRvIHJlcGVhdGVkbHkgcGFzcyB0aGUgc2FtZSB0b3BpYwotICAgIG5hbWVzIG92ZXIgYW5k
IG92ZXIuIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBjbGllbnQsIHJ1bl90
b3BpYywgcG9zdF90b3BpYyk6Ci0gICAgICAgICIiIkNyZWF0ZSBhIEJyb2tlckNvbm5lY3Rpb24g
b24gdG9wIG9mIGEgQnJva2VyLiBOb3RlIHRoYXQgdGhlIEJyb2tlcgotICAgICAgICBpcyBwYXNz
ZWQgaW4gcmF0aGVyIHRoYW4gY3JlYXRlZCBzbyB0aGF0IGEgc2luZ2xlIEJyb2tlciBjYW4gYmUg
dXNlZAotICAgICAgICBieSBtdWx0aXBsZSBCcm9rZXJDb25uZWN0aW9ucy4iIiIKLSAgICAgICAg
c2VsZi5fYnJva2VyID0gYnJva2VyCi0gICAgICAgIHNlbGYuX2NsaWVudCA9IGNsaWVudAotICAg
ICAgICBzZWxmLl9wb3N0X3RvcGljID0gcG9zdF90b3BpYwotICAgICAgICBzZWxmLl9ydW5fdG9w
aWMgPSBydW5fdG9waWMKLSAgICAgICAgYnJva2VyLmFkZF90b3BpYyhydW5fdG9waWMpCi0gICAg
ICAgIGJyb2tlci5hZGRfdG9waWMocG9zdF90b3BpYykKLQotICAgIGRlZiBydW5fbWVzc2FnZV9s
b29wKHNlbGYsIGRlbGF5X3NlY3M9Tm9uZSk6Ci0gICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVz
c2FnZV9sb29wKHNlbGYuX3J1bl90b3BpYywgc2VsZi5fY2xpZW50LCBkZWxheV9zZWNzKQotCi0g
ICAgZGVmIHBvc3RfbWVzc2FnZShzZWxmLCBtZXNzYWdlX25hbWUsICptZXNzYWdlX2FyZ3MpOgot
ICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKHNlbGYuX2NsaWVudCwgc2VsZi5fcG9z
dF90b3BpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX25hbWUs
ICptZXNzYWdlX2FyZ3MpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcl91bml0dGVzdC5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNz
YWdlX2Jyb2tlcl91bml0dGVzdC5weQkocmV2aXNpb24gOTA1MjApCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcl91bml0
dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMSw4MyArMCwwIEBACi0jIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
IyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9w
YWNrYWdlIGltcG9ydCBtZXNzYWdlX2Jyb2tlcgotCi0jIFRoaXMgZmlsZSBleGlzdHMgdG8gdGVz
dCByb3V0aW5lcyB0aGF0IGFyZW4ndCBuZWNlc3NhcmlseSBjb3ZlcmVkIGVsc2V3aGVyZTsKLSMg
bW9zdCBvZiB0aGUgdGVzdGluZyBvZiBtZXNzYWdlX2Jyb2tlciB3aWxsIGJlIGNvdmVyZWQgdW5k
ZXIgdGhlIHRlc3RzIGluCi0jIHRoZSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIgbW9kdWxlLgotCi0K
LWNsYXNzIE1lc3NhZ2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9fbm9f
Ym9keShzZWxmKToKLSAgICAgICAgbXNnID0gbWVzc2FnZV9icm9rZXIuX01lc3NhZ2UoJ3NyYycs
ICd0b3BpY19uYW1lJywgJ21lc3NhZ2VfbmFtZScsIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShyZXByKG1zZykpCi0gICAgICAgIHMgPSBtc2cuZHVtcHMoKQotICAgICAgICBuZXdfbXNn
ID0gbWVzc2FnZV9icm9rZXIuX01lc3NhZ2UubG9hZHMocykKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChuZXdfbXNnLm5hbWUsICdtZXNzYWdlX25hbWUnKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKG5ld19tc2cuYXJncywgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNn
LnRvcGljX25hbWUsICd0b3BpY19uYW1lJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdf
bXNnLnNyYywgJ3NyYycpCi0KLSAgICBkZWYgdGVzdF9fYm9keShzZWxmKToKLSAgICAgICAgbXNn
ID0gbWVzc2FnZV9icm9rZXIuX01lc3NhZ2UoJ3NyYycsICd0b3BpY19uYW1lJywgJ21lc3NhZ2Vf
bmFtZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYm9keScsIDAp
KQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihtc2cpKQotICAgICAgICBzID0gbXNnLmR1
bXBzKCkKLSAgICAgICAgbmV3X21zZyA9IG1lc3NhZ2VfYnJva2VyLl9NZXNzYWdlLmxvYWRzKHMp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy5uYW1lLCAnbWVzc2FnZV9uYW1lJykK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNnLmFyZ3MsICgnYm9keScsIDApKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cudG9waWNfbmFtZSwgJ3RvcGljX25hbWUnKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cuc3JjLCAnc3JjJykKLQotCi1jbGFzcyBJ
bnRlcmZhY2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAjIFRoZXNlIHRlc3RzIG1vc3Rs
eSBleGlzdCB0byBwYWNpZnkgY292ZXJhZ2UuCi0KLSAgICAjIEZJWE1FOiBUaGVyZSBtdXN0IGJl
IGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIGFuZCBhbHNvIHZlcmlmeQotICAgICMgdGhhdCBjbGFz
c2VzIGRvIGltcGxlbWVudCBldmVyeSBhYnN0cmFjdCBtZXRob2QgaW4gYW4gaW50ZXJmYWNlLgot
Ci0gICAgZGVmIHRlc3RfYnJva2VyY2xpZW50X2lzX2Fic3RyYWN0KHNlbGYpOgotICAgICAgICAj
IFRlc3QgdGhhdCB3ZSBjYW4ndCBjcmVhdGUgYW4gaW5zdGFuY2UgZGlyZWN0bHkuCi0gICAgICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG1lc3NhZ2VfYnJva2VyLkJy
b2tlckNsaWVudCkKLQotICAgICAgICBjbGFzcyBUZXN0Q2xpZW50KG1lc3NhZ2VfYnJva2VyLkJy
b2tlckNsaWVudCk6Ci0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgICAg
ICAgICAgcGFzcwotCi0gICAgICAgICMgVGVzdCB0aGF0IGFsbCB0aGUgYmFzZSBjbGFzcyBtZXRo
b2RzIGFyZSBhYnN0cmFjdCBhbmQgaGF2ZSB0aGUKLSAgICAgICAgIyBzaWduYXR1cmUgd2UgZXhw
ZWN0LgotICAgICAgICBvYmogPSBUZXN0Q2xpZW50KCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlz
ZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLmlzX2RvbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0
UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5uYW1lKQotCi0KLWlmIF9fbmFtZV9fID09
ICdfX21haW5fXyc6Ci0gICAgdW5pdHRlc3QubWFpbigpCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmludGluZ191bml0dGVzdC5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9wcmludGluZ191bml0dGVzdC5weQkocmV2aXNpb24gOTA1MjApCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmludGluZ191bml0
dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzcsMTMgKzM3LDEyIEBAIGltcG9ydCB1bml0dGVz
dAogZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IGFycmF5X3N0cmVhbQogZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtIGltcG9ydCBsb2d0ZXN0aW5nCiBmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cyBpbXBvcnQgcG9ydAotCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVy
cyBpbXBvcnQgbWFuYWdlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2th
Z2UgaW1wb3J0IHByaW50aW5nCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFj
a2FnZSBpbXBvcnQgcmVzdWx0X3N1bW1hcnkKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxh
eW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucwogZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKIGZyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X3Jlc3VsdHMKLWZyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBtYW5hZ2VyCiAKIAog
ZGVmIGdldF9vcHRpb25zKGFyZ3MpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvc2luZ2xlX3Rlc3RfcnVubmVyLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Np
bmdsZV90ZXN0X3J1bm5lci5weQkocmV2aXNpb24gOTA1MjApCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9zaW5nbGVfdGVzdF9ydW5uZXIucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMzEwICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLWlt
cG9ydCBsb2dnaW5nCi1pbXBvcnQgdGltZQotCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5w
b3J0LmRyaXZlciBpbXBvcnQgRHJpdmVySW5wdXQsIERyaXZlck91dHB1dAotZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCi1m
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWls
dXJlcwotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRl
c3RfcmVzdWx0X3dyaXRlcgotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2th
Z2UudGVzdF9yZXN1bHRzIGltcG9ydCBUZXN0UmVzdWx0Ci0KLQotX2xvZyA9IGxvZ2dpbmcuZ2V0
TG9nZ2VyKF9fbmFtZV9fKQotCi0KLWRlZiBydW5fc2luZ2xlX3Rlc3QocG9ydCwgb3B0aW9ucywg
dGVzdF9pbnB1dCwgZHJpdmVyLCB3b3JrZXJfbmFtZSk6Ci0gICAgcnVubmVyID0gU2luZ2xlVGVz
dFJ1bm5lcihvcHRpb25zLCBwb3J0LCBkcml2ZXIsIHRlc3RfaW5wdXQsIHdvcmtlcl9uYW1lKQot
ICAgIHJldHVybiBydW5uZXIucnVuKCkKLQotCi1jbGFzcyBTaW5nbGVUZXN0UnVubmVyOgotCi0g
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMsIHBvcnQsIGRyaXZlciwgdGVzdF9pbnB1dCwg
d29ya2VyX25hbWUpOgotICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwotICAgICAgICBz
ZWxmLl9wb3J0ID0gcG9ydAotICAgICAgICBzZWxmLl9kcml2ZXIgPSBkcml2ZXIKLSAgICAgICAg
c2VsZi5fdGltZW91dCA9IHRlc3RfaW5wdXQudGltZW91dAotICAgICAgICBzZWxmLl93b3JrZXJf
bmFtZSA9IHdvcmtlcl9uYW1lCi0gICAgICAgIHNlbGYuX3Rlc3RfbmFtZSA9IHRlc3RfaW5wdXQu
dGVzdF9uYW1lCi0KLSAgICAgICAgc2VsZi5faXNfcmVmdGVzdCA9IEZhbHNlCi0gICAgICAgIHNl
bGYuX2lzX21pc21hdGNoX3JlZnRlc3QgPSBGYWxzZQotICAgICAgICBzZWxmLl9yZWZlcmVuY2Vf
ZmlsZW5hbWUgPSBOb25lCi0KLSAgICAgICAgZnMgPSBwb3J0Ll9maWxlc3lzdGVtCi0gICAgICAg
IHJlZnRlc3RfZXhwZWN0ZWRfZmlsZW5hbWUgPSBwb3J0LnJlZnRlc3RfZXhwZWN0ZWRfZmlsZW5h
bWUoc2VsZi5fdGVzdF9uYW1lKQotICAgICAgICBpZiBmcy5leGlzdHMocmVmdGVzdF9leHBlY3Rl
ZF9maWxlbmFtZSk6Ci0gICAgICAgICAgICBzZWxmLl9pc19yZWZ0ZXN0ID0gVHJ1ZQotICAgICAg
ICAgICAgc2VsZi5fcmVmZXJlbmNlX2ZpbGVuYW1lID0gcmVmdGVzdF9leHBlY3RlZF9maWxlbmFt
ZQotCi0gICAgICAgIHJlZnRlc3RfZXhwZWN0ZWRfbWlzbWF0Y2hfZmlsZW5hbWUgPSBwb3J0LnJl
ZnRlc3RfZXhwZWN0ZWRfbWlzbWF0Y2hfZmlsZW5hbWUoc2VsZi5fdGVzdF9uYW1lKQotICAgICAg
ICBpZiBmcy5leGlzdHMocmVmdGVzdF9leHBlY3RlZF9taXNtYXRjaF9maWxlbmFtZSk6Ci0gICAg
ICAgICAgICBpZiBzZWxmLl9pc19yZWZ0ZXN0OgotICAgICAgICAgICAgICAgIF9sb2cuZXJyb3Io
J0l0IGlzIG5vdCBhbGxvd2VkIHRoYXQgb25lIHRlc3QgZmlsZSBoYXMgYm90aCcKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICcgZXhwZWN0ZWQuaHRtbCBmaWxlIGFuZCBleHBlY3RlZC1taXNt
YXRjaC5odG1sIGZpbGUnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAnIGF0IHRoZSBzYW1l
IHRpbWUuIFBsZWFzZSByZW1vdmUgZWl0aGVyICVzIG9yICVzLicsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWZ0ZXN0X2V4cGVjdGVkX2ZpbGVuYW1lLCByZWZ0ZXN0X2V4cGVjdGVkX21p
c21hdGNoX2ZpbGVuYW1lKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxm
Ll9pc19yZWZ0ZXN0ID0gVHJ1ZQotICAgICAgICAgICAgICAgIHNlbGYuX2lzX21pc21hdGNoX3Jl
ZnRlc3QgPSBUcnVlCi0gICAgICAgICAgICAgICAgc2VsZi5fcmVmZXJlbmNlX2ZpbGVuYW1lID0g
cmVmdGVzdF9leHBlY3RlZF9taXNtYXRjaF9maWxlbmFtZQotCi0gICAgICAgIGlmIHNlbGYuX2lz
X3JlZnRlc3Q6Ci0gICAgICAgICAgICAjIERldGVjdCBhbmQgcmVwb3J0IGEgdGVzdCB3aGljaCBo
YXMgYSB3cm9uZyBjb21iaW5hdGlvbiBvZiBleHBlY3RhdGlvbiBmaWxlcy4KLSAgICAgICAgICAg
ICMgRm9yIGV4YW1wbGUsIGlmICdmb28uaHRtbCcgaGFzIHR3byBleHBlY3RhdGlvbiBmaWxlcywg
J2Zvby1leHBlY3RlZC5odG1sJyBhbmQKLSAgICAgICAgICAgICMgJ2Zvby1leHBlY3RlZC50eHQn
LCB3ZSBzaG91bGQgd2FybiB1c2Vycy4gT25lIHRlc3QgZmlsZSBtdXN0IGJlIHVzZWQgZXhjbHVz
aXZlbHkKLSAgICAgICAgICAgICMgaW4gZWl0aGVyIGxheW91dCB0ZXN0cyBvciByZWZ0ZXN0cywg
YnV0IG5vdCBpbiBib3RoLgotICAgICAgICAgICAgZm9yIHN1ZmZpeCBpbiAoJy50eHQnLCAnLnBu
ZycsICcud2F2Jyk6Ci0gICAgICAgICAgICAgICAgZXhwZWN0ZWRfZmlsZW5hbWUgPSBzZWxmLl9w
b3J0LmV4cGVjdGVkX2ZpbGVuYW1lKHNlbGYuX3Rlc3RfbmFtZSwgc3VmZml4KQotICAgICAgICAg
ICAgICAgIGlmIGZzLmV4aXN0cyhleHBlY3RlZF9maWxlbmFtZSk6Ci0gICAgICAgICAgICAgICAg
ICAgIF9sb2cuZXJyb3IoJ1RoZSByZWZ0ZXN0ICglcykgY2FuIG5vdCBoYXZlIGFuIGV4cGVjdGF0
aW9uIGZpbGUgKCVzKS4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBQbGVhc2Ug
cmVtb3ZlIHRoYXQgZmlsZS4nLCBzZWxmLl90ZXN0X25hbWUsIGV4cGVjdGVkX2ZpbGVuYW1lKQot
Ci0gICAgZGVmIF9leHBlY3RlZF9kcml2ZXJfb3V0cHV0KHNlbGYpOgotICAgICAgICByZXR1cm4g
RHJpdmVyT3V0cHV0KHNlbGYuX3BvcnQuZXhwZWN0ZWRfdGV4dChzZWxmLl90ZXN0X25hbWUpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5leHBlY3RlZF9pbWFn
ZShzZWxmLl90ZXN0X25hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fcG9ydC5leHBlY3RlZF9jaGVja3N1bShzZWxmLl90ZXN0X25hbWUpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5leHBlY3RlZF9hdWRpbyhzZWxmLl90ZXN0
X25hbWUpKQotCi0gICAgZGVmIF9zaG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hlY2tzdW0oc2VsZik6
Ci0gICAgICAgIHJldHVybiAoc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cyBhbmQKLSAgICAgICAg
ICAgICAgICBub3QgKHNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5lIG9yIHNlbGYuX29wdGlvbnMu
cmVzZXRfcmVzdWx0cykpCi0KLSAgICBkZWYgX2RyaXZlcl9pbnB1dChzZWxmKToKLSAgICAgICAg
IyBUaGUgaW1hZ2UgaGFzaCBpcyB1c2VkIHRvIGF2b2lkIGRvaW5nIGFuIGltYWdlIGR1bXAgaWYg
dGhlCi0gICAgICAgICMgY2hlY2tzdW1zIG1hdGNoLCBzbyBpdCBzaG91bGQgYmUgc2V0IHRvIGEg
YmxhbmsgdmFsdWUgaWYgd2UKLSAgICAgICAgIyBhcmUgZ2VuZXJhdGluZyBhIG5ldyBiYXNlbGlu
ZS4gIChPdGhlcndpc2UsIGFuIGltYWdlIGZyb20gYQotICAgICAgICAjIHByZXZpb3VzIHJ1biB3
aWxsIGJlIGNvcGllZCBpbnRvIHRoZSBiYXNlbGluZS4iIiIKLSAgICAgICAgaW1hZ2VfaGFzaCA9
IE5vbmUKLSAgICAgICAgaWYgc2VsZi5fc2hvdWxkX2ZldGNoX2V4cGVjdGVkX2NoZWNrc3VtKCk6
Ci0gICAgICAgICAgICBpbWFnZV9oYXNoID0gc2VsZi5fcG9ydC5leHBlY3RlZF9jaGVja3N1bShz
ZWxmLl90ZXN0X25hbWUpCi0gICAgICAgIHJldHVybiBEcml2ZXJJbnB1dChzZWxmLl90ZXN0X25h
bWUsIHNlbGYuX3RpbWVvdXQsIGltYWdlX2hhc2gpCi0KLSAgICBkZWYgcnVuKHNlbGYpOgotICAg
ICAgICBpZiBzZWxmLl9vcHRpb25zLm5ld19iYXNlbGluZSBvciBzZWxmLl9vcHRpb25zLnJlc2V0
X3Jlc3VsdHM6Ci0gICAgICAgICAgICBpZiBzZWxmLl9pc19yZWZ0ZXN0OgotICAgICAgICAgICAg
ICAgICMgUmV0dXJucyBhIGR1bW15IFRlc3RSZXN1bHQuIFdlIGRvbid0IGhhdmUgdG8gcmViYXNl
IGZvciByZWZ0ZXN0cy4KLSAgICAgICAgICAgICAgICByZXR1cm4gVGVzdFJlc3VsdChzZWxmLl90
ZXN0X25hbWUpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxm
Ll9ydW5fcmViYXNlbGluZSgpCi0gICAgICAgIGlmIHNlbGYuX2lzX3JlZnRlc3Q6Ci0gICAgICAg
ICAgICBpZiBzZWxmLl9wb3J0LmdldF9vcHRpb24oJ3BpeGVsX3Rlc3RzJyk6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuX3J1bl9yZWZ0ZXN0KCkKLSAgICAgICAgICAgIHJlc3VsdCA9IFRl
c3RSZXN1bHQoc2VsZi5fdGVzdF9uYW1lKQotICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSB0ZXN0
X2V4cGVjdGF0aW9ucy5TS0lQCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Ci0gICAgICAgIHJl
dHVybiBzZWxmLl9ydW5fY29tcGFyZV90ZXN0KCkKLQotICAgIGRlZiBfcnVuX2NvbXBhcmVfdGVz
dChzZWxmKToKLSAgICAgICAgZHJpdmVyX291dHB1dCA9IHNlbGYuX2RyaXZlci5ydW5fdGVzdChz
ZWxmLl9kcml2ZXJfaW5wdXQoKSkKLSAgICAgICAgZXhwZWN0ZWRfZHJpdmVyX291dHB1dCA9IHNl
bGYuX2V4cGVjdGVkX2RyaXZlcl9vdXRwdXQoKQotICAgICAgICB0ZXN0X3Jlc3VsdCA9IHNlbGYu
X2NvbXBhcmVfb3V0cHV0KGRyaXZlcl9vdXRwdXQsIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQpCi0g
ICAgICAgIGlmIHNlbGYuX29wdGlvbnMubmV3X3Rlc3RfcmVzdWx0czoKLSAgICAgICAgICAgIHNl
bGYuX2FkZF9taXNzaW5nX2Jhc2VsaW5lcyh0ZXN0X3Jlc3VsdCwgZHJpdmVyX291dHB1dCkKLSAg
ICAgICAgdGVzdF9yZXN1bHRfd3JpdGVyLndyaXRlX3Rlc3RfcmVzdWx0KHNlbGYuX3BvcnQsIHNl
bGYuX3Rlc3RfbmFtZSwgZHJpdmVyX291dHB1dCwgZXhwZWN0ZWRfZHJpdmVyX291dHB1dCwgdGVz
dF9yZXN1bHQuZmFpbHVyZXMpCi0gICAgICAgIHJldHVybiB0ZXN0X3Jlc3VsdAotCi0gICAgZGVm
IF9ydW5fcmViYXNlbGluZShzZWxmKToKLSAgICAgICAgZHJpdmVyX291dHB1dCA9IHNlbGYuX2Ry
aXZlci5ydW5fdGVzdChzZWxmLl9kcml2ZXJfaW5wdXQoKSkKLSAgICAgICAgZmFpbHVyZXMgPSBz
ZWxmLl9oYW5kbGVfZXJyb3IoZHJpdmVyX291dHB1dCkKLSAgICAgICAgdGVzdF9yZXN1bHRfd3Jp
dGVyLndyaXRlX3Rlc3RfcmVzdWx0KHNlbGYuX3BvcnQsIHNlbGYuX3Rlc3RfbmFtZSwgZHJpdmVy
X291dHB1dCwgTm9uZSwgZmFpbHVyZXMpCi0gICAgICAgICMgRklYTUU6IEl0IHRoZSB0ZXN0IGNy
YXNoZWQgb3IgdGltZWQgb3V0LCBpdCBtaWdodCBiZSBiZXR0dGVyIHRvIGF2b2lkCi0gICAgICAg
ICMgdG8gd3JpdGUgbmV3IGJhc2VsaW5lcy4KLSAgICAgICAgc2VsZi5fb3ZlcndyaXRlX2Jhc2Vs
aW5lcyhkcml2ZXJfb3V0cHV0KQotICAgICAgICByZXR1cm4gVGVzdFJlc3VsdChzZWxmLl90ZXN0
X25hbWUsIGZhaWx1cmVzLCBkcml2ZXJfb3V0cHV0LnRlc3RfdGltZSwgZHJpdmVyX291dHB1dC5o
YXNfc3RkZXJyKCkpCi0KLSAgICBkZWYgX2FkZF9taXNzaW5nX2Jhc2VsaW5lcyhzZWxmLCB0ZXN0
X3Jlc3VsdCwgZHJpdmVyX291dHB1dCk6Ci0gICAgICAgIGlmIHRlc3RfcmVzdWx0Lmhhc19mYWls
dXJlX21hdGNoaW5nX3R5cGVzKHRlc3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdSZXN1bHQpOgot
ICAgICAgICAgICAgIyBGSVhNRTogV2Ugc2VlbSB0byBiZSBwdXR0aW5nIG5ldyB0ZXh0IHJlc3Vs
dHMgaW4gbm9uLXBsYXRmb3JtCi0gICAgICAgICAgICAjIHNwZWNpZmljIGRpcmVjdG9yaWVzIGV2
ZW4gd2hlbiB0aGV5J3JlIHJlbmRlcnRyZWUgZHVtcHMuIE1heWJlCi0gICAgICAgICAgICAjIHdl
IHNob3VsZCBoYXZlIGEgZGlmZmVyZW50IGtpbmQgb2YgZmFpbHVyZSBmb3IgcmVuZGVyIHRyZWUg
ZHVtcHMKLSAgICAgICAgICAgICMgdGhhbiBmb3IgdGV4dCB0ZXN0cz8KLSAgICAgICAgICAgIHNl
bGYuX3NhdmVfYmFzZWxpbmVfZGF0YShkcml2ZXJfb3V0cHV0LnRleHQsICIudHh0IiwgZ2VuZXJh
dGVfbmV3X2Jhc2VsaW5lPUZhbHNlKQotICAgICAgICBpZiB0ZXN0X3Jlc3VsdC5oYXNfZmFpbHVy
ZV9tYXRjaGluZ190eXBlcyh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNzaW5nQXVkaW8pOgotICAg
ICAgICAgICAgc2VsZi5fc2F2ZV9iYXNlbGluZV9kYXRhKGRyaXZlcl9vdXRwdXQuYXVkaW8sICIu
d2F2IiwgZ2VuZXJhdGVfbmV3X2Jhc2VsaW5lPUZhbHNlKQotICAgICAgICBpZiB0ZXN0X3Jlc3Vs
dC5oYXNfZmFpbHVyZV9tYXRjaGluZ190eXBlcyh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNzaW5n
SW1hZ2UsIHRlc3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdJbWFnZUhhc2gpOgotICAgICAgICAg
ICAgc2VsZi5fc2F2ZV9iYXNlbGluZV9kYXRhKGRyaXZlcl9vdXRwdXQuaW1hZ2UsICIucG5nIiwg
Z2VuZXJhdGVfbmV3X2Jhc2VsaW5lPUZhbHNlKQotCi0gICAgZGVmIF9vdmVyd3JpdGVfYmFzZWxp
bmVzKHNlbGYsIGRyaXZlcl9vdXRwdXQpOgotICAgICAgICAjIEFsdGhvdWdoIGFsbCBEdW1wUmVu
ZGVyVHJlZSBvdXRwdXQgc2hvdWxkIGJlIHV0Zi04LAotICAgICAgICAjIHdlIGRvIG5vdCBldmVy
IGRlY29kZSBpdCBpbnNpZGUgcnVuLXdlYmtpdC10ZXN0cy4gIEZvciBzb21lIHRlc3RzCi0gICAg
ICAgICMgRHVtcFJlbmRlclRyZWUgbWF5IG5vdCBvdXRwdXQgdXRmLTggdGV4dCAoZS5nLiB3ZWJh
cmNoaXZlcykuCi0gICAgICAgIHNlbGYuX3NhdmVfYmFzZWxpbmVfZGF0YShkcml2ZXJfb3V0cHV0
LnRleHQsICIudHh0IiwgZ2VuZXJhdGVfbmV3X2Jhc2VsaW5lPXNlbGYuX29wdGlvbnMubmV3X2Jh
c2VsaW5lKQotICAgICAgICBzZWxmLl9zYXZlX2Jhc2VsaW5lX2RhdGEoZHJpdmVyX291dHB1dC5h
dWRpbywgIi53YXYiLCBnZW5lcmF0ZV9uZXdfYmFzZWxpbmU9c2VsZi5fb3B0aW9ucy5uZXdfYmFz
ZWxpbmUpCi0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHM6Ci0gICAgICAgICAg
ICBzZWxmLl9zYXZlX2Jhc2VsaW5lX2RhdGEoZHJpdmVyX291dHB1dC5pbWFnZSwgIi5wbmciLCBn
ZW5lcmF0ZV9uZXdfYmFzZWxpbmU9c2VsZi5fb3B0aW9ucy5uZXdfYmFzZWxpbmUpCi0KLSAgICBk
ZWYgX3NhdmVfYmFzZWxpbmVfZGF0YShzZWxmLCBkYXRhLCBtb2RpZmllciwgZ2VuZXJhdGVfbmV3
X2Jhc2VsaW5lPVRydWUpOgotICAgICAgICAiIiJTYXZlcyBhIG5ldyBiYXNlbGluZSBmaWxlIGlu
dG8gdGhlIHBvcnQncyBiYXNlbGluZSBkaXJlY3RvcnkuCi0KLSAgICAgICAgVGhlIGZpbGUgd2ls
bCBiZSBuYW1lZCBzaW1wbHkgIjx0ZXN0Pi1leHBlY3RlZDxtb2RpZmllcj4iLCBzdWl0YWJsZSBm
b3IKLSAgICAgICAgdXNlIGFzIHRoZSBleHBlY3RlZCByZXN1bHRzIGluIGEgbGF0ZXIgcnVuLgot
Ci0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgZGF0YTogcmVzdWx0IHRvIGJlIHNhdmVkIGFzIHRo
ZSBuZXcgYmFzZWxpbmUKLSAgICAgICAgICBtb2RpZmllcjogdHlwZSBvZiB0aGUgcmVzdWx0IGZp
bGUsIGUuZy4gIi50eHQiIG9yICIucG5nIgotICAgICAgICAgIGdlbmVyYXRlX25ld19iYXNlbGlu
ZTogd2hldGhlciB0byBlbmVyYXRlIGEgbmV3LCBwbGF0Zm9ybS1zcGVjaWZpYwotICAgICAgICAg
ICAgYmFzZWxpbmUsIG9yIHVwZGF0ZSB0aGUgZXhpc3Rpbmcgb25lCi0gICAgICAgICIiIgotICAg
ICAgICBpZiBkYXRhIGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgcG9ydCA9
IHNlbGYuX3BvcnQKLSAgICAgICAgZnMgPSBwb3J0Ll9maWxlc3lzdGVtCi0gICAgICAgIGlmIGdl
bmVyYXRlX25ld19iYXNlbGluZToKLSAgICAgICAgICAgIHJlbGF0aXZlX2RpciA9IGZzLmRpcm5h
bWUoc2VsZi5fdGVzdF9uYW1lKQotICAgICAgICAgICAgYmFzZWxpbmVfcGF0aCA9IHBvcnQuYmFz
ZWxpbmVfcGF0aCgpCi0gICAgICAgICAgICBvdXRwdXRfZGlyID0gZnMuam9pbihiYXNlbGluZV9w
YXRoLCByZWxhdGl2ZV9kaXIpCi0gICAgICAgICAgICBvdXRwdXRfZmlsZSA9IGZzLmJhc2VuYW1l
KGZzLnNwbGl0ZXh0KHNlbGYuX3Rlc3RfbmFtZSlbMF0gKwotICAgICAgICAgICAgICAgICItZXhw
ZWN0ZWQiICsgbW9kaWZpZXIpCi0gICAgICAgICAgICBmcy5tYXliZV9tYWtlX2RpcmVjdG9yeShv
dXRwdXRfZGlyKQotICAgICAgICAgICAgb3V0cHV0X3BhdGggPSBmcy5qb2luKG91dHB1dF9kaXIs
IG91dHB1dF9maWxlKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgb3V0cHV0X3BhdGggPSBw
b3J0LmV4cGVjdGVkX2ZpbGVuYW1lKHNlbGYuX3Rlc3RfbmFtZSwgbW9kaWZpZXIpCi0KLSAgICAg
ICAgcmVzdWx0X25hbWUgPSBmcy5yZWxwYXRoKG91dHB1dF9wYXRoLCBwb3J0LmxheW91dF90ZXN0
c19kaXIoKSkKLSAgICAgICAgX2xvZy5pbmZvKCdXcml0aW5nIG5ldyBleHBlY3RlZCByZXN1bHQg
IiVzIicgJSByZXN1bHRfbmFtZSkKLSAgICAgICAgcG9ydC51cGRhdGVfYmFzZWxpbmUob3V0cHV0
X3BhdGgsIGRhdGEpCi0KLSAgICBkZWYgX2hhbmRsZV9lcnJvcihzZWxmLCBkcml2ZXJfb3V0cHV0
LCByZWZlcmVuY2VfZmlsZW5hbWU9Tm9uZSk6Ci0gICAgICAgICIiIlJldHVybnMgdGVzdCBmYWls
dXJlcyBpZiBzb21lIHVudXN1YWwgZXJyb3JzIGhhcHBlbiBpbiBkcml2ZXIncyBydW4uCi0KLSAg
ICAgICAgQXJnczoKLSAgICAgICAgICBkcml2ZXJfb3V0cHV0OiBUaGUgb3V0cHV0IGZyb20gdGhl
IGRyaXZlci4KLSAgICAgICAgICByZWZlcmVuY2VfZmlsZW5hbWU6IFRoZSBmdWxsIHBhdGggdG8g
dGhlIHJlZmVyZW5jZSBmaWxlIHdoaWNoIHByb2R1Y2VkIHRoZSBkcml2ZXJfb3V0cHV0LgotICAg
ICAgICAgICAgICBUaGlzIGFyZyBpcyBvcHRpb25hbCBhbmQgc2hvdWxkIGJlIHVzZWQgb25seSBp
biByZWZ0ZXN0cyB1bnRpbCB3ZSBoYXZlIGEgYmV0dGVyIHdheSB0byBrbm93Ci0gICAgICAgICAg
ICAgIHdoaWNoIGh0bWwgZmlsZSBpcyB1c2VkIGZvciBwcm9kdWNpbmcgdGhlIGRyaXZlcl9vdXRw
dXQuCi0gICAgICAgICIiIgotICAgICAgICBmYWlsdXJlcyA9IFtdCi0gICAgICAgIGZzID0gc2Vs
Zi5fcG9ydC5fZmlsZXN5c3RlbQotICAgICAgICBpZiBkcml2ZXJfb3V0cHV0LnRpbWVvdXQ6Ci0g
ICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlVGltZW91dChi
b29sKHJlZmVyZW5jZV9maWxlbmFtZSkpKQotCi0gICAgICAgIGlmIHJlZmVyZW5jZV9maWxlbmFt
ZToKLSAgICAgICAgICAgIHRlc3RuYW1lID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVu
YW1lKHJlZmVyZW5jZV9maWxlbmFtZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRlc3Ru
YW1lID0gc2VsZi5fdGVzdF9uYW1lCi0KLSAgICAgICAgaWYgZHJpdmVyX291dHB1dC5jcmFzaDoK
LSAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVDcmFzaChi
b29sKHJlZmVyZW5jZV9maWxlbmFtZSkpKQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgU3Rh
Y2t0cmFjZSBmb3IgJXM6XG4lcyIgJSAoc2VsZi5fd29ya2VyX25hbWUsIHRlc3RuYW1lLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVy
X291dHB1dC5lcnJvcikpCi0gICAgICAgIGVsaWYgZHJpdmVyX291dHB1dC5lcnJvcjoKLSAgICAg
ICAgICAgIF9sb2cuZGVidWcoIiVzICVzIG91dHB1dCBzdGRlcnIgbGluZXM6XG4lcyIgJSAoc2Vs
Zi5fd29ya2VyX25hbWUsIHRlc3RuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJfb3V0cHV0LmVycm9yKSkKLSAgICAg
ICAgcmV0dXJuIGZhaWx1cmVzCi0KLSAgICBkZWYgX2NvbXBhcmVfb3V0cHV0KHNlbGYsIGRyaXZl
cl9vdXRwdXQsIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQpOgotICAgICAgICBmYWlsdXJlcyA9IFtd
Ci0gICAgICAgIGZhaWx1cmVzLmV4dGVuZChzZWxmLl9oYW5kbGVfZXJyb3IoZHJpdmVyX291dHB1
dCkpCi0KLSAgICAgICAgaWYgZHJpdmVyX291dHB1dC5jcmFzaDoKLSAgICAgICAgICAgICMgRG9u
J3QgY29udGludWUgYW55IG1vcmUgaWYgd2UgYWxyZWFkeSBoYXZlIGEgY3Jhc2guCi0gICAgICAg
ICAgICAjIEluIGNhc2Ugb2YgdGltZW91dHMsIHdlIGNvbnRpbnVlIHNpbmNlIHdlIHN0aWxsIHdh
bnQgdG8gc2VlIHRoZSB0ZXh0IGFuZCBpbWFnZSBvdXRwdXQuCi0gICAgICAgICAgICByZXR1cm4g
VGVzdFJlc3VsdChzZWxmLl90ZXN0X25hbWUsIGZhaWx1cmVzLCBkcml2ZXJfb3V0cHV0LnRlc3Rf
dGltZSwgZHJpdmVyX291dHB1dC5oYXNfc3RkZXJyKCkpCi0KLSAgICAgICAgZmFpbHVyZXMuZXh0
ZW5kKHNlbGYuX2NvbXBhcmVfdGV4dChkcml2ZXJfb3V0cHV0LnRleHQsIGV4cGVjdGVkX2RyaXZl
cl9vdXRwdXQudGV4dCkpCi0gICAgICAgIGZhaWx1cmVzLmV4dGVuZChzZWxmLl9jb21wYXJlX2F1
ZGlvKGRyaXZlcl9vdXRwdXQuYXVkaW8sIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQuYXVkaW8pKQot
ICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzOgotICAgICAgICAgICAgZmFpbHVy
ZXMuZXh0ZW5kKHNlbGYuX2NvbXBhcmVfaW1hZ2UoZHJpdmVyX291dHB1dCwgZXhwZWN0ZWRfZHJp
dmVyX291dHB1dCkpCi0gICAgICAgIHJldHVybiBUZXN0UmVzdWx0KHNlbGYuX3Rlc3RfbmFtZSwg
ZmFpbHVyZXMsIGRyaXZlcl9vdXRwdXQudGVzdF90aW1lLCBkcml2ZXJfb3V0cHV0Lmhhc19zdGRl
cnIoKSkKLQotICAgIGRlZiBfY29tcGFyZV90ZXh0KHNlbGYsIGFjdHVhbF90ZXh0LCBleHBlY3Rl
ZF90ZXh0KToKLSAgICAgICAgZmFpbHVyZXMgPSBbXQotICAgICAgICBpZiAoZXhwZWN0ZWRfdGV4
dCBhbmQgYWN0dWFsX3RleHQgYW5kCi0gICAgICAgICAgICAjIEFzc3VtaW5nIGV4cGVjdGVkX3Rl
eHQgaXMgYWxyZWFkeSBub3JtYWxpemVkLgotICAgICAgICAgICAgc2VsZi5fcG9ydC5jb21wYXJl
X3RleHQoc2VsZi5fZ2V0X25vcm1hbGl6ZWRfb3V0cHV0X3RleHQoYWN0dWFsX3RleHQpLCBleHBl
Y3RlZF90ZXh0KSk6Ci0gICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5G
YWlsdXJlVGV4dE1pc21hdGNoKCkpCi0gICAgICAgIGVsaWYgYWN0dWFsX3RleHQgYW5kIG5vdCBl
eHBlY3RlZF90ZXh0OgotICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMu
RmFpbHVyZU1pc3NpbmdSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuIGZhaWx1cmVzCi0KLSAgICBk
ZWYgX2NvbXBhcmVfYXVkaW8oc2VsZiwgYWN0dWFsX2F1ZGlvLCBleHBlY3RlZF9hdWRpbyk6Ci0g
ICAgICAgIGZhaWx1cmVzID0gW10KLSAgICAgICAgaWYgKGV4cGVjdGVkX2F1ZGlvIGFuZCBhY3R1
YWxfYXVkaW8gYW5kCi0gICAgICAgICAgICBzZWxmLl9wb3J0LmNvbXBhcmVfYXVkaW8oYWN0dWFs
X2F1ZGlvLCBleHBlY3RlZF9hdWRpbykpOgotICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRl
c3RfZmFpbHVyZXMuRmFpbHVyZUF1ZGlvTWlzbWF0Y2goKSkKLSAgICAgICAgZWxpZiBhY3R1YWxf
YXVkaW8gYW5kIG5vdCBleHBlY3RlZF9hdWRpbzoKLSAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVu
ZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNzaW5nQXVkaW8oKSkKLSAgICAgICAgcmV0dXJuIGZh
aWx1cmVzCi0KLSAgICBkZWYgX2dldF9ub3JtYWxpemVkX291dHB1dF90ZXh0KHNlbGYsIG91dHB1
dCk6Ci0gICAgICAgICIiIlJldHVybnMgdGhlIG5vcm1hbGl6ZWQgdGV4dCBvdXRwdXQsIGkuZS4g
dGhlIG91dHB1dCBpbiB3aGljaAotICAgICAgICB0aGUgZW5kLW9mLWxpbmUgY2hhcmFjdGVycyBh
cmUgbm9ybWFsaXplZCB0byAiXG4iLiIiIgotICAgICAgICAjIFJ1bm5pbmcgdGVzdHMgb24gV2lu
ZG93cyBwcm9kdWNlcyAiXHJcbiIuICBUaGUgIlxuIiBwYXJ0IGlzIGhlbHBmdWxseQotICAgICAg
ICAjIGNoYW5nZWQgdG8gIlxyXG4iIGJ5IG91ciBzeXN0ZW0gKFB5dGhvbi9DeWd3aW4pLCByZXN1
bHRpbmcgaW4KLSAgICAgICAgIyAiXHJcclxuIiwgd2hlbiwgaW4gZmFjdCwgd2Ugd2FudGVkIHRv
IGNvbXBhcmUgdGhlIHRleHQgb3V0cHV0IHdpdGgKLSAgICAgICAgIyB0aGUgbm9ybWFsaXplZCB0
ZXh0IGV4cGVjdGF0aW9uIGZpbGVzLgotICAgICAgICByZXR1cm4gb3V0cHV0LnJlcGxhY2UoIlxy
XHJcbiIsICJcclxuIikucmVwbGFjZSgiXHJcbiIsICJcbiIpCi0KLSAgICAjIEZJWE1FOiBUaGlz
IGZ1bmN0aW9uIGFsc28gY3JlYXRlcyB0aGUgaW1hZ2UgZGlmZi4gTWF5YmUgdGhhdCB3b3JrIHNo
b3VsZAotICAgICMgYmUgaGFuZGxlZCBlbHNld2hlcmU/Ci0gICAgZGVmIF9jb21wYXJlX2ltYWdl
KHNlbGYsIGRyaXZlcl9vdXRwdXQsIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQpOgotICAgICAgICBm
YWlsdXJlcyA9IFtdCi0gICAgICAgICMgSWYgd2UgZGlkbid0IHByb2R1Y2UgYSBoYXNoIGZpbGUs
IHRoaXMgdGVzdCBtdXN0IGJlIHRleHQtb25seS4KLSAgICAgICAgaWYgZHJpdmVyX291dHB1dC5p
bWFnZV9oYXNoIGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gZmFpbHVyZXMKLSAgICAgICAg
aWYgbm90IGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQuaW1hZ2U6Ci0gICAgICAgICAgICBmYWlsdXJl
cy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlzc2luZ0ltYWdlKCkpCi0gICAgICAgIGVs
aWYgbm90IGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQuaW1hZ2VfaGFzaDoKLSAgICAgICAgICAgIGZh
aWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNzaW5nSW1hZ2VIYXNoKCkpCi0g
ICAgICAgIGVsaWYgZHJpdmVyX291dHB1dC5pbWFnZV9oYXNoICE9IGV4cGVjdGVkX2RyaXZlcl9v
dXRwdXQuaW1hZ2VfaGFzaDoKLSAgICAgICAgICAgIGRyaXZlcl9vdXRwdXQuaW1hZ2VfZGlmZiA9
IHNlbGYuX3BvcnQuZGlmZl9pbWFnZShkcml2ZXJfb3V0cHV0LmltYWdlLCBleHBlY3RlZF9kcml2
ZXJfb3V0cHV0LmltYWdlKQotICAgICAgICAgICAgaWYgZHJpdmVyX291dHB1dC5pbWFnZV9kaWZm
OgotICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVJ
bWFnZUhhc2hNaXNtYXRjaCgpKQotICAgICAgICByZXR1cm4gZmFpbHVyZXMKLQotICAgIGRlZiBf
cnVuX3JlZnRlc3Qoc2VsZik6Ci0gICAgICAgIGRyaXZlcl9vdXRwdXQxID0gc2VsZi5fZHJpdmVy
LnJ1bl90ZXN0KHNlbGYuX2RyaXZlcl9pbnB1dCgpKQotICAgICAgICByZWZlcmVuY2VfdGVzdF9u
YW1lID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHNlbGYuX3JlZmVyZW5jZV9m
aWxlbmFtZSkKLSAgICAgICAgZHJpdmVyX291dHB1dDIgPSBzZWxmLl9kcml2ZXIucnVuX3Rlc3Qo
RHJpdmVySW5wdXQocmVmZXJlbmNlX3Rlc3RfbmFtZSwgc2VsZi5fdGltZW91dCwgZHJpdmVyX291
dHB1dDEuaW1hZ2VfaGFzaCkpCi0gICAgICAgIHRlc3RfcmVzdWx0ID0gc2VsZi5fY29tcGFyZV9v
dXRwdXRfd2l0aF9yZWZlcmVuY2UoZHJpdmVyX291dHB1dDEsIGRyaXZlcl9vdXRwdXQyKQotCi0g
ICAgICAgIHRlc3RfcmVzdWx0X3dyaXRlci53cml0ZV90ZXN0X3Jlc3VsdChzZWxmLl9wb3J0LCBz
ZWxmLl90ZXN0X25hbWUsIGRyaXZlcl9vdXRwdXQxLCBkcml2ZXJfb3V0cHV0MiwgdGVzdF9yZXN1
bHQuZmFpbHVyZXMpCi0gICAgICAgIHJldHVybiB0ZXN0X3Jlc3VsdAotCi0gICAgZGVmIF9jb21w
YXJlX291dHB1dF93aXRoX3JlZmVyZW5jZShzZWxmLCBkcml2ZXJfb3V0cHV0MSwgZHJpdmVyX291
dHB1dDIpOgotICAgICAgICB0b3RhbF90ZXN0X3RpbWUgPSBkcml2ZXJfb3V0cHV0MS50ZXN0X3Rp
bWUgKyBkcml2ZXJfb3V0cHV0Mi50ZXN0X3RpbWUKLSAgICAgICAgaGFzX3N0ZGVyciA9IGRyaXZl
cl9vdXRwdXQxLmhhc19zdGRlcnIoKSBvciBkcml2ZXJfb3V0cHV0Mi5oYXNfc3RkZXJyKCkKLSAg
ICAgICAgZmFpbHVyZXMgPSBbXQotICAgICAgICBmYWlsdXJlcy5leHRlbmQoc2VsZi5faGFuZGxl
X2Vycm9yKGRyaXZlcl9vdXRwdXQxKSkKLSAgICAgICAgaWYgZmFpbHVyZXM6Ci0gICAgICAgICAg
ICAjIERvbid0IGNvbnRpbnVlIGFueSBtb3JlIGlmIHdlIGFscmVhZHkgaGF2ZSBjcmFzaCBvciB0
aW1lb3V0LgotICAgICAgICAgICAgcmV0dXJuIFRlc3RSZXN1bHQoc2VsZi5fdGVzdF9uYW1lLCBm
YWlsdXJlcywgdG90YWxfdGVzdF90aW1lLCBoYXNfc3RkZXJyKQotICAgICAgICBmYWlsdXJlcy5l
eHRlbmQoc2VsZi5faGFuZGxlX2Vycm9yKGRyaXZlcl9vdXRwdXQyLCByZWZlcmVuY2VfZmlsZW5h
bWU9c2VsZi5fcmVmZXJlbmNlX2ZpbGVuYW1lKSkKLSAgICAgICAgaWYgZmFpbHVyZXM6Ci0gICAg
ICAgICAgICByZXR1cm4gVGVzdFJlc3VsdChzZWxmLl90ZXN0X25hbWUsIGZhaWx1cmVzLCB0b3Rh
bF90ZXN0X3RpbWUsIGhhc19zdGRlcnIpCi0KLSAgICAgICAgaWYgc2VsZi5faXNfbWlzbWF0Y2hf
cmVmdGVzdDoKLSAgICAgICAgICAgIGlmIGRyaXZlcl9vdXRwdXQxLmltYWdlX2hhc2ggPT0gZHJp
dmVyX291dHB1dDIuaW1hZ2VfaGFzaDoKLSAgICAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQo
dGVzdF9mYWlsdXJlcy5GYWlsdXJlUmVmdGVzdE1pc21hdGNoRGlkTm90T2NjdXIoKSkKLSAgICAg
ICAgZWxpZiBkcml2ZXJfb3V0cHV0MS5pbWFnZV9oYXNoICE9IGRyaXZlcl9vdXRwdXQyLmltYWdl
X2hhc2g6Ci0gICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJl
UmVmdGVzdE1pc21hdGNoKCkpCi0gICAgICAgIHJldHVybiBUZXN0UmVzdWx0KHNlbGYuX3Rlc3Rf
bmFtZSwgZmFpbHVyZXMsIHRvdGFsX3Rlc3RfdGltZSwgaGFzX3N0ZGVycikKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtlci5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS93b3JrZXIucHkJKHJldmlzaW9uIDkwNTIwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0xLDI2NyArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6
Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiSGFuZGxlIG1lc3NhZ2Vz
IGZyb20gdGhlIE1hbmFnZXIgYW5kIGV4ZWN1dGVzIGFjdHVhbCB0ZXN0cy4iIiIKLQotaW1wb3J0
IGxvZ2dpbmcKLWltcG9ydCBzeXMKLWltcG9ydCB0aHJlYWRpbmcKLWltcG9ydCB0aW1lCi1pbXBv
cnQgdHJhY2ViYWNrCi0KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgc3RhY2tf
dXRpbHMKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBt
YW5hZ2VyX3dvcmtlcl9icm9rZXIKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9w
YWNrYWdlIGltcG9ydCBzaW5nbGVfdGVzdF9ydW5uZXIKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rl
c3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucwotZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfcmVzdWx0cwotCi1fbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLQotY2xhc3MgV29ya2VyKG1hbmFnZXJf
d29ya2VyX2Jyb2tlci5BYnN0cmFjdFdvcmtlcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHdv
cmtlcl9jb25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyLCBvcHRpb25zKToKLSAgICAgICAgc2VsZi5f
d29ya2VyX2Nvbm5lY3Rpb24gPSB3b3JrZXJfY29ubmVjdGlvbgotICAgICAgICBzZWxmLl93b3Jr
ZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgotICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9u
cwotICAgICAgICBzZWxmLl9uYW1lID0gJ3dvcmtlci8lZCcgJSB3b3JrZXJfbnVtYmVyCi0gICAg
ICAgIHNlbGYuX2RvbmUgPSBGYWxzZQotICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IEZhbHNlCi0g
ICAgICAgIHNlbGYuX3BvcnQgPSBOb25lCi0KLSAgICBkZWYgX19kZWxfXyhzZWxmKToKLSAgICAg
ICAgc2VsZi5jbGVhbnVwKCkKLQotICAgIGRlZiBzYWZlX2luaXQoc2VsZiwgcG9ydCk6Ci0gICAg
ICAgICIiIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIGl0IGlzIGlzIHNh
ZmUgZm9yIHRoZSBtaXhpbgotICAgICAgICB0byBjcmVhdGUgc3RhdGUgdGhhdCBjYW4ndCBiZSBQ
aWNrbGVkLgotCi0gICAgICAgIFRoaXMgcm91dGluZSBleGlzdHMgc28gdGhhdCB0aGUgbWl4aW4g
Y2FuIGJlIGNyZWF0ZWQgYW5kIHRoZW4gbWFyc2hhbGVkCi0gICAgICAgIGFjcm9zcyBpbnRvIGEg
Y2hpbGQgcHJvY2Vzcy4iIiIKLSAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKLSAgICAgICAgc2Vs
Zi5fZmlsZXN5c3RlbSA9IHBvcnQuX2ZpbGVzeXN0ZW0KLSAgICAgICAgc2VsZi5fYmF0Y2hfY291
bnQgPSAwCi0gICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSBzZWxmLl9vcHRpb25zLmJhdGNoX3Np
emUKLSAgICAgICAgc2VsZi5fZHJpdmVyID0gTm9uZQotICAgICAgICB0ZXN0c19ydW5fZmlsZW5h
bWUgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4ocG9ydC5yZXN1bHRzX2RpcmVjdG9yeSgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RzX3J1
biVkLnR4dCIgJSBzZWxmLl93b3JrZXJfbnVtYmVyKQotICAgICAgICBzZWxmLl90ZXN0c19ydW5f
ZmlsZSA9IHNlbGYuX2ZpbGVzeXN0ZW0ub3Blbl90ZXh0X2ZpbGVfZm9yX3dyaXRpbmcodGVzdHNf
cnVuX2ZpbGVuYW1lKQotCi0gICAgZGVmIGNhbmNlbChzZWxmKToKLSAgICAgICAgIiIiQXR0ZW1w
dCB0byBhYm9ydCBwcm9jZXNzaW5nIChiZXN0IGVmZm9ydCkuIiIiCi0gICAgICAgIHNlbGYuX2Nh
bmNlbGVkID0gVHJ1ZQotCi0gICAgZGVmIGlzX2RvbmUoc2VsZik6Ci0gICAgICAgIHJldHVybiBz
ZWxmLl9kb25lIG9yIHNlbGYuX2NhbmNlbGVkCi0KLSAgICBkZWYgbmFtZShzZWxmKToKLSAgICAg
ICAgcmV0dXJuIHNlbGYuX25hbWUKLQotICAgIGRlZiBydW4oc2VsZiwgcG9ydCk6Ci0gICAgICAg
IHNlbGYuc2FmZV9pbml0KHBvcnQpCi0KLSAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIiCi0gICAg
ICAgIF9sb2cuZGVidWcoIiVzIHN0YXJ0aW5nIiAlIHNlbGYuX25hbWUpCi0KLSAgICAgICAgdHJ5
OgotICAgICAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucnVuX21lc3NhZ2VfbG9vcCgp
Ci0gICAgICAgICAgICBpZiBub3Qgc2VsZi5pc19kb25lKCk6Ci0gICAgICAgICAgICAgICAgcmFp
c2UgQXNzZXJ0aW9uRXJyb3IoIiVzOiByYW4gb3V0IG9mIG1lc3NhZ2VzIGluIHdvcmtlciBxdWV1
ZS4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBzZWxmLl9uYW1lKQot
ICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgICAgICBleGNlcHRpb25f
bXNnID0gIiwgaW50ZXJydXB0ZWQiCi0gICAgICAgICAgICBzZWxmLnBvc3RfZXhjZXB0aW9uKCkK
LSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIsIGV4Y2VwdGlv
biByYWlzZWQiCi0gICAgICAgICAgICBzZWxmLnBvc3RfZXhjZXB0aW9uKCkKLSAgICAgICAgZmlu
YWxseToKLSAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzIGRvbmUgd2l0aCBtZXNzYWdlIGxvb3Al
cyIgJSAoc2VsZi5fbmFtZSwgZXhjZXB0aW9uX21zZykpCi0gICAgICAgICAgICBzZWxmLl93b3Jr
ZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ2RvbmUnKQotICAgICAgICAgICAgc2VsZi5jbGVh
bnVwKCkKLSAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzIGV4aXRpbmciICUgc2VsZi5fbmFtZSkK
LQotICAgIGRlZiBwb3N0X2V4Y2VwdGlvbihzZWxmKToKLSAgICAgICAgIyBTaW5jZSB0cmFjZWJh
Y2tzIGFyZW4ndCBwaWNrbGFibGUsIHNlbmQgdGhlIGV4dHJhY3RlZCBzdGFjayBpbnN0ZWFkLgot
ICAgICAgICBleGNlcHRpb25fdHlwZSwgZXhjZXB0aW9uX3ZhbHVlLCBleGNlcHRpb25fdHJhY2Vi
YWNrID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgc3RhY2tfdXRpbHMubG9nX3RyYWNlYmFjayhf
bG9nLmRlYnVnLCBleGNlcHRpb25fdHJhY2ViYWNrKQotICAgICAgICBzdGFjayA9IHRyYWNlYmFj
ay5leHRyYWN0X3RiKGV4Y2VwdGlvbl90cmFjZWJhY2spCi0gICAgICAgIHNlbGYuX3dvcmtlcl9j
b25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnZXhjZXB0aW9uJywgZXhjZXB0aW9uX3R5cGUsIGV4Y2Vw
dGlvbl92YWx1ZSwgc3RhY2spCi0KLSAgICBkZWYgaGFuZGxlX3Rlc3RfbGlzdChzZWxmLCBzcmMs
IGxpc3RfbmFtZSwgdGVzdF9saXN0KToKLSAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgp
Ci0gICAgICAgIG51bV90ZXN0cyA9IDAKLSAgICAgICAgZm9yIHRlc3RfaW5wdXQgaW4gdGVzdF9s
aXN0OgotICAgICAgICAgICAgc2VsZi5fcnVuX3Rlc3QodGVzdF9pbnB1dCkKLSAgICAgICAgICAg
IG51bV90ZXN0cyArPSAxCi0gICAgICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi55aWVs
ZF90b19icm9rZXIoKQotCi0gICAgICAgIGVsYXBzZWRfdGltZSA9IHRpbWUudGltZSgpIC0gc3Rh
cnRfdGltZQotICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ2Zp
bmlzaGVkX2xpc3QnLCBsaXN0X25hbWUsIG51bV90ZXN0cywgZWxhcHNlZF90aW1lKQotCi0gICAg
ZGVmIGhhbmRsZV9zdG9wKHNlbGYsIHNyYyk6Ci0gICAgICAgIHNlbGYuX2RvbmUgPSBUcnVlCi0K
LSAgICBkZWYgX3J1bl90ZXN0KHNlbGYsIHRlc3RfaW5wdXQpOgotICAgICAgICAjIEJlZm9yZSBy
dW5uaW5nIHRoZSB0ZXN0LCB3ZSB3YWl0IGZvciBhbnkgY3Jhc2ggcmVwb3J0ZXJzIHRvIGZpbmlz
aAotICAgICAgICAjIHJ1bm5pbmcuIE9uIE1hYywgUmVwb3J0Q3Jhc2ggY2hld3MgdXAgYSBidW5j
aCBvZiByZXNvdXJjZXMgYW5kCi0gICAgICAgICMgY2F1c2VzIHRoZSB0ZXN0cyB0byBiZWNvbWUg
dW5zdGFibGUsIHNvIHdlIGRvbid0IHdhbnQgdG8gcnVuIGluCi0gICAgICAgICMgcGFyYWxsZWwg
d2l0aCBSZXBvcnRDcmFzaC4KLSAgICAgICAgIwotICAgICAgICAjIFRlbXBvcmFyaWx5IGRpc2Fi
bGVkIHRvIHNlZSBob3cgdGhpcyBjb2RlIGVmZmVjdCBwZXJmb3JtYW5jZSBvbiB0aGUgYnVpbGRi
b3RzLgotICAgICAgICAjIHNlbGYuX3BvcnQuZXhlY3V0aXZlKCkud2FpdF9uZXdlc3Qoc2VsZi5f
cG9ydC5pc19jcmFzaF9yZXBvcnRlcikKLQotICAgICAgICB0ZXN0X3RpbWVvdXRfc2VjID0gc2Vs
Zi50aW1lb3V0KHRlc3RfaW5wdXQpCi0gICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKLSAgICAg
ICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdzdGFydGVkX3Rlc3QnLCB0
ZXN0X2lucHV0LCB0ZXN0X3RpbWVvdXRfc2VjKQotCi0gICAgICAgIHJlc3VsdCA9IHNlbGYucnVu
X3Rlc3Rfd2l0aF90aW1lb3V0KHRlc3RfaW5wdXQsIHRlc3RfdGltZW91dF9zZWMpCi0KLSAgICAg
ICAgZWxhcHNlZF90aW1lID0gdGltZS50aW1lKCkgLSBzdGFydAotICAgICAgICBzZWxmLl93b3Jr
ZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ2ZpbmlzaGVkX3Rlc3QnLCByZXN1bHQsIGVsYXBz
ZWRfdGltZSkKLQotICAgICAgICBzZWxmLmNsZWFuX3VwX2FmdGVyX3Rlc3QodGVzdF9pbnB1dCwg
cmVzdWx0KQotCi0gICAgZGVmIGNsZWFudXAoc2VsZik6Ci0gICAgICAgIF9sb2cuZGVidWcoIiVz
IGNsZWFuaW5nIHVwIiAlIHNlbGYuX25hbWUpCi0gICAgICAgIHNlbGYua2lsbF9kcml2ZXIoKQot
ICAgICAgICBpZiBzZWxmLl90ZXN0c19ydW5fZmlsZToKLSAgICAgICAgICAgIHNlbGYuX3Rlc3Rz
X3J1bl9maWxlLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlID0gTm9u
ZQotCi0gICAgZGVmIHRpbWVvdXQoc2VsZiwgdGVzdF9pbnB1dCk6Ci0gICAgICAgICIiIkNvbXB1
dGUgdGhlIGFwcHJvcHJpYXRlIHRpbWVvdXQgdmFsdWUgZm9yIGEgdGVzdC4iIiIKLSAgICAgICAg
IyBUaGUgRHVtcFJlbmRlclRyZWUgd2F0Y2hkb2cgdXNlcyAyLjV4IHRoZSB0aW1lb3V0OyB3ZSB3
YW50IHRvIGJlCi0gICAgICAgICMgbGFyZ2VyIHRoYW4gdGhhdC4gV2UgYWxzbyBhZGQgYSBsaXR0
bGUgbW9yZSBwYWRkaW5nIGlmIHdlJ3JlCi0gICAgICAgICMgcnVubmluZyB0ZXN0cyBpbiBhIHNl
cGFyYXRlIHRocmVhZC4KLSAgICAgICAgIwotICAgICAgICAjIE5vdGUgdGhhdCB3ZSBuZWVkIHRv
IGNvbnZlcnQgdGhlIHRlc3QgdGltZW91dCBmcm9tIGEKLSAgICAgICAgIyBzdHJpbmcgdmFsdWUg
aW4gbWlsbGlzZWNvbmRzIHRvIGEgZmxvYXQgZm9yIFB5dGhvbi4KLSAgICAgICAgZHJpdmVyX3Rp
bWVvdXRfc2VjID0gMy4wICogZmxvYXQodGVzdF9pbnB1dC50aW1lb3V0KSAvIDEwMDAuMAotICAg
ICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5ydW5fc2luZ2x5OgotICAgICAgICAgICAgcmV0dXJu
IGRyaXZlcl90aW1lb3V0X3NlYwotCi0gICAgICAgIHRocmVhZF9wYWRkaW5nX3NlYyA9IDEuMAot
ICAgICAgICB0aHJlYWRfdGltZW91dF9zZWMgPSBkcml2ZXJfdGltZW91dF9zZWMgKyB0aHJlYWRf
cGFkZGluZ19zZWMKLSAgICAgICAgcmV0dXJuIHRocmVhZF90aW1lb3V0X3NlYwotCi0gICAgZGVm
IGtpbGxfZHJpdmVyKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9kcml2ZXI6Ci0gICAgICAgICAg
ICBzZWxmLl9kcml2ZXIuc3RvcCgpCi0gICAgICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCi0K
LSAgICBkZWYgcnVuX3Rlc3Rfd2l0aF90aW1lb3V0KHNlbGYsIHRlc3RfaW5wdXQsIHRpbWVvdXQp
OgotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6Ci0gICAgICAgICAgICByZXR1
cm4gc2VsZi5fcnVuX3Rlc3RfaW5fYW5vdGhlcl90aHJlYWQodGVzdF9pbnB1dCwgdGltZW91dCkK
LSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9ydW5fdGVzdF9pbl90aGlz
X3RocmVhZCh0ZXN0X2lucHV0KQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLSAgICBkZWYgY2xl
YW5fdXBfYWZ0ZXJfdGVzdChzZWxmLCB0ZXN0X2lucHV0LCByZXN1bHQpOgotICAgICAgICBzZWxm
Ll9iYXRjaF9jb3VudCArPSAxCi0gICAgICAgIHRlc3RfbmFtZSA9IHRlc3RfaW5wdXQudGVzdF9u
YW1lCi0gICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLndyaXRlKHRlc3RfbmFtZSArICJcbiIp
Ci0KLSAgICAgICAgaWYgcmVzdWx0LmZhaWx1cmVzOgotICAgICAgICAgICAgIyBDaGVjayBhbmQg
a2lsbCBEdW1wUmVuZGVyVHJlZSBpZiB3ZSBuZWVkIHRvLgotICAgICAgICAgICAgaWYgYW55KFtm
LmRyaXZlcl9uZWVkc19yZXN0YXJ0KCkgZm9yIGYgaW4gcmVzdWx0LmZhaWx1cmVzXSk6Ci0gICAg
ICAgICAgICAgICAgc2VsZi5raWxsX2RyaXZlcigpCi0gICAgICAgICAgICAgICAgIyBSZXNldCB0
aGUgYmF0Y2ggY291bnQgc2luY2UgdGhlIHNoZWxsIGp1c3QgYm91bmNlZC4KLSAgICAgICAgICAg
ICAgICBzZWxmLl9iYXRjaF9jb3VudCA9IDAKLQotICAgICAgICAgICAgIyBQcmludCB0aGUgZXJy
b3IgbWVzc2FnZShzKS4KLSAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICVzIGZhaWxlZDoiICUg
KHNlbGYuX25hbWUsIHRlc3RfbmFtZSkpCi0gICAgICAgICAgICBmb3IgZiBpbiByZXN1bHQuZmFp
bHVyZXM6Ci0gICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgICVzIiAlIChzZWxmLl9uYW1l
LCBmLm1lc3NhZ2UoKSkpCi0gICAgICAgIGVsaWYgcmVzdWx0LnR5cGUgPT0gdGVzdF9leHBlY3Rh
dGlvbnMuU0tJUDoKLSAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICVzIHNraXBwZWQiICUgKHNl
bGYuX25hbWUsIHRlc3RfbmFtZSkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBfbG9nLmRl
YnVnKCIlcyAlcyBwYXNzZWQiICUgKHNlbGYuX25hbWUsIHRlc3RfbmFtZSkpCi0KLSAgICAgICAg
aWYgc2VsZi5fYmF0Y2hfc2l6ZSA+IDAgYW5kIHNlbGYuX2JhdGNoX2NvdW50ID49IHNlbGYuX2Jh
dGNoX3NpemU6Ci0gICAgICAgICAgICAjIEJvdW5jZSB0aGUgc2hlbGwgYW5kIHJlc2V0IGNvdW50
LgotICAgICAgICAgICAgc2VsZi5raWxsX2RyaXZlcigpCi0gICAgICAgICAgICBzZWxmLl9iYXRj
aF9jb3VudCA9IDAKLQotICAgIGRlZiBfcnVuX3Rlc3RfaW5fYW5vdGhlcl90aHJlYWQoc2VsZiwg
dGVzdF9pbnB1dCwgdGhyZWFkX3RpbWVvdXRfc2VjKToKLSAgICAgICAgIiIiUnVuIGEgdGVzdCBp
biBhIHNlcGFyYXRlIHRocmVhZCwgZW5mb3JjaW5nIGEgaGFyZCB0aW1lIGxpbWl0LgotCi0gICAg
ICAgIFNpbmNlIHdlIGNhbiBvbmx5IGRldGVjdCB0aGUgdGVybWluYXRpb24gb2YgYSB0aHJlYWQs
IG5vdCBhbnkgaW50ZXJuYWwKLSAgICAgICAgc3RhdGUgb3IgcHJvZ3Jlc3MsIHdlIGNhbiBvbmx5
IHJ1biBwZXItdGVzdCB0aW1lb3V0cyB3aGVuIHJ1bm5pbmcgdGVzdAotICAgICAgICBmaWxlcyBz
aW5nbHkuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICB0ZXN0X2lucHV0OiBPYmplY3QgY29u
dGFpbmluZyB0aGUgdGVzdCBmaWxlbmFtZSBhbmQgdGltZW91dAotICAgICAgICAgIHRocmVhZF90
aW1lb3V0X3NlYzogdGltZSB0byB3YWl0IGJlZm9yZSBraWxsaW5nIHRoZSBkcml2ZXIgcHJvY2Vz
cy4KLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICBBIFRlc3RSZXN1bHQKLSAgICAgICAgIiIi
Ci0gICAgICAgIHdvcmtlciA9IHNlbGYKLQotICAgICAgICBkcml2ZXIgPSB3b3JrZXIuX3BvcnQu
Y3JlYXRlX2RyaXZlcih3b3JrZXIuX3dvcmtlcl9udW1iZXIpCi0gICAgICAgIGRyaXZlci5zdGFy
dCgpCi0KLSAgICAgICAgY2xhc3MgU2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToK
LSAgICAgICAgICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQg
PSB3b3JrZXIuX3J1bl9zaW5nbGVfdGVzdChkcml2ZXIsIHRlc3RfaW5wdXQpCi0KLSAgICAgICAg
dGhyZWFkID0gU2luZ2xlVGVzdFRocmVhZCgpCi0gICAgICAgIHRocmVhZC5zdGFydCgpCi0gICAg
ICAgIHRocmVhZC5qb2luKHRocmVhZF90aW1lb3V0X3NlYykKLSAgICAgICAgcmVzdWx0ID0gZ2V0
YXR0cih0aHJlYWQsICdyZXN1bHQnLCBOb25lKQotICAgICAgICBpZiB0aHJlYWQuaXNBbGl2ZSgp
OgotICAgICAgICAgICAgIyBJZiBqb2luKCkgcmV0dXJuZWQgd2l0aCB0aGUgdGhyZWFkIHN0aWxs
IHJ1bm5pbmcsIHRoZQotICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJlZSBpcyBjb21wbGV0ZWx5
IGh1bmcgYW5kIHRoZXJlJ3Mgbm90aGluZwotICAgICAgICAgICAgIyBtb3JlIHdlIGNhbiBkbyB3
aXRoIGl0LiAgV2UgaGF2ZSB0byBraWxsIGFsbCB0aGUKLSAgICAgICAgICAgICMgRHVtcFJlbmRl
clRyZWVzIHRvIGZyZWUgaXQgdXAuIElmIHdlJ3JlIHJ1bm5pbmcgbW9yZSB0aGFuCi0gICAgICAg
ICAgICAjIG9uZSBEdW1wUmVuZGVyVHJlZSB0aHJlYWQsIHdlJ2xsIGVuZCB1cCBraWxsaW5nIHRo
ZSBvdGhlcgotICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJlZXMgdG9vLCBpbnRyb2R1Y2luZyBz
cHVyaW91cyBjcmFzaGVzLiBXZSBhY2NlcHQKLSAgICAgICAgICAgICMgdGhhdCB0cmFkZW9mZiBp
biBvcmRlciB0byBhdm9pZCBsb3NpbmcgdGhlIHJlc3Qgb2YgdGhpcwotICAgICAgICAgICAgIyB0
aHJlYWQncyByZXN1bHRzLgotICAgICAgICAgICAgX2xvZy5lcnJvcignVGVzdCB0aHJlYWQgaHVu
Zzoga2lsbGluZyBhbGwgRHVtcFJlbmRlclRyZWVzJykKLQotICAgICAgICBkcml2ZXIuc3RvcCgp
Ci0KLSAgICAgICAgaWYgbm90IHJlc3VsdDoKLSAgICAgICAgICAgIHJlc3VsdCA9IHRlc3RfcmVz
dWx0cy5UZXN0UmVzdWx0KHRlc3RfaW5wdXQudGVzdF9uYW1lLCBmYWlsdXJlcz1bXSwgdGVzdF9y
dW5fdGltZT0wKQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLSAgICBkZWYgX3J1bl90ZXN0X2lu
X3RoaXNfdGhyZWFkKHNlbGYsIHRlc3RfaW5wdXQpOgotICAgICAgICAiIiJSdW4gYSBzaW5nbGUg
dGVzdCBmaWxlIHVzaW5nIGEgc2hhcmVkIER1bXBSZW5kZXJUcmVlIHByb2Nlc3MuCi0KLSAgICAg
ICAgQXJnczoKLSAgICAgICAgICB0ZXN0X2lucHV0OiBPYmplY3QgY29udGFpbmluZyB0aGUgdGVz
dCBmaWxlbmFtZSwgdXJpIGFuZCB0aW1lb3V0Ci0KLSAgICAgICAgUmV0dXJuczogYSBUZXN0UmVz
dWx0IG9iamVjdC4KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9kcml2ZXIgb3Ig
c2VsZi5fZHJpdmVyLnBvbGwoKSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX2RyaXZl
ciA9IHNlbGYuX3BvcnQuY3JlYXRlX2RyaXZlcihzZWxmLl93b3JrZXJfbnVtYmVyKQotICAgICAg
ICAgICAgc2VsZi5fZHJpdmVyLnN0YXJ0KCkKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9zaW5n
bGVfdGVzdChzZWxmLl9kcml2ZXIsIHRlc3RfaW5wdXQpCi0KLSAgICBkZWYgX3J1bl9zaW5nbGVf
dGVzdChzZWxmLCBkcml2ZXIsIHRlc3RfaW5wdXQpOgotICAgICAgICByZXR1cm4gc2luZ2xlX3Rl
c3RfcnVubmVyLnJ1bl9zaW5nbGVfdGVzdChzZWxmLl9wb3J0LCBzZWxmLl9vcHRpb25zLAotICAg
ICAgICAgICAgdGVzdF9pbnB1dCwgZHJpdmVyLCBzZWxmLl9uYW1lKQo=
</data>
<flag name="review"
          id="94505"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>