<?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>89725</bug_id>
          
          <creation_ts>2012-06-21 18:04:43 -0700</creation_ts>
          <short_desc>restructure manager/broker/worker code</short_desc>
          <delta_ts>2012-07-12 15:24:22 -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>
          <dependson>90123</dependson>
    
    <dependson>90125</dependson>
    
    <dependson>90126</dependson>
    
    <dependson>90408</dependson>
    
    <dependson>90409</dependson>
    
    <dependson>90510</dependson>
    
    <dependson>90511</dependson>
    
    <dependson>90513</dependson>
          <blocked>76022</blocked>
    
    <blocked>89267</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>655095</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-21 18:04:43 -0700</bug_when>
    <thetext>restructure manager/broker/worker code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655097</commentid>
    <comment_count>1</comment_count>
      <attachid>148931</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-21 18:05:29 -0700</bug_when>
    <thetext>Created attachment 148931
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655220</commentid>
    <comment_count>2</comment_count>
      <attachid>148956</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-21 21:08:26 -0700</bug_when>
    <thetext>Created attachment 148956
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658244</commentid>
    <comment_count>3</comment_count>
      <attachid>149665</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-26 19:01:39 -0700</bug_when>
    <thetext>Created attachment 149665
roll-up patch based off of r121304; not for review or landing

attaching a patch that basically shows what manager.py, manager_worker_broker.py, and worker.py will look like after I&apos;ve cleaned up the multiprocessing code. This patch needs to be broken up into reviewable chunks and some of the unit tests need to be redone, so don&apos;t bother to review it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658248</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-26 19:06:59 -0700</bug_when>
    <thetext>Also, note that &quot;manager_worker_broker&quot;, although never a good name, is now a really bad name.

I am trying to structure the code like the multiprocessing.Pool interface and the concurrency.futures.ProcessExecutor interface. The interfaces is much simpler though, as all we provide is a single run([list of things]) call. We could provide more flexibility easily, but it isn&apos;t needed at this time.

I suggest we use something like MessagePool or MessagePoolExecutor or something like that ...

To recap why we&apos;re not just using one of those two interfaces ...

The workers are stateful, and those two interfaces assume each task is stateless. We could probably work around this using globals and restarting as necessary, but that would make things kinda ugly.

There isn&apos;t a 1:1 mapping between tasks and messages, since we group tests into shards: running one shard generates N results for tests and we want those results as they occur

As an aside using messages instead of request/reply tasks allows us to handle errors better, log messages, better, and generate better stats.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658308</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-26 21:03:34 -0700</bug_when>
    <thetext>I&apos;m slightly unsure where to start looking at these patches.  The rollup patches are pretty big.  :)

Maybe I should wait for you to mark one of the patches for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658671</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-27 09:45:33 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; I&apos;m slightly unsure where to start looking at these patches.  The rollup patches are pretty big.  :)
&gt; 
&gt; Maybe I should wait for you to mark one of the patches for review.

absolutely, I don&apos;t want/expect you to review these. this stuff is just in case you wanted to apply the patches and take a look at the end state(s).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668305</commentid>
    <comment_count>7</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-12 15:24:22 -0700</bug_when>
    <thetext>all patches have been landed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148931</attachid>
            <date>2012-06-21 18:05:29 -0700</date>
            <delta_ts>2012-06-21 21:08:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89725-20120621180529.patch</filename>
            <type>text/plain</type>
            <size>73502</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwOTY4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNzM4MDA2YzkwY2VjMDg3ZmYyZjI1N2U1Zjg0MGU5Nzk3
Y2YzOTc2OC4uYTFiMzNlNGVhYzMzNWFjOTM3NjFhNzUzYjNmYjUzNTEwNTUzMTI2ZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEw
NiBAQAogMjAxMi0wNi0yMSAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KIAor
ICAgICAgICByZXN0cnVjdHVyZSBtYW5hZ2VyL2Jyb2tlci93b3JrZXIgY29kZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk3MjUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzIC0g
ZXZlcnl0aGluZyB3b3JrcywgYnV0IGRlZmluaXRlbHkgbm90IHJlYWR5CisgICAgICAgIGZvciBy
ZXZpZXcuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9s
bGVycy9tYW5hZ2VyLnB5OgorICAgICAgICAoVGVzdFNoYXJkKToKKyAgICAgICAgKFRlc3RTaGFy
ZC52aXNpYmxlKToKKyAgICAgICAgKFRlc3RTaGFyZC52aXNpYmxlLl9faW5pdF9fKToKKyAgICAg
ICAgKFRlc3RTaGFyZC52aXNpYmxlLl9fcmVwcl9fKToKKyAgICAgICAgKFRlc3RTaGFyZC52aXNp
YmxlLl9fZXFfXyk6CisgICAgICAgIChUZXN0UnVuSW50ZXJydXB0ZWRFeGNlcHRpb24pOgorICAg
ICAgICAoVGVzdFJ1bkludGVycnVwdGVkRXhjZXB0aW9uLl9faW5pdF9fKToKKyAgICAgICAgKFRl
c3RSdW5JbnRlcnJ1cHRlZEV4Y2VwdGlvbi5fX3JlZHVjZV9fKToKKyAgICAgICAgKHN1bW1hcml6
ZV9yZXN1bHRzKToKKyAgICAgICAgKE1hbmFnZXIuX19pbml0X18pOgorICAgICAgICAoTWFuYWdl
ci5fcnVuX3Rlc3RzKToKKyAgICAgICAgKE1hbmFnZXIuX3J1bl90ZXN0cy53b3JrZXJfZmFjdG9y
eSk6CisgICAgICAgIChNYW5hZ2VyLmlzX2RvbmUpOgorICAgICAgICAoTWFuYWdlci5uYW1lKToK
KyAgICAgICAgKE1hbmFnZXIuaGFuZGxlKToKKyAgICAgICAgKE1hbmFnZXIpOgorICAgICAgICAo
TWFuYWdlci5faGFuZGxlX3N0YXJ0ZWRfdGVzdF9saXN0KToKKyAgICAgICAgKE1hbmFnZXIuX2hh
bmRsZV9maW5pc2hlZF90ZXN0X2xpc3QpOgorICAgICAgICAoTWFuYWdlci5faGFuZGxlX3N0YXJ0
ZWRfdGVzdCk6CisgICAgICAgIChNYW5hZ2VyLl9oYW5kbGVfZmluaXNoZWRfdGVzdCk6CisgICAg
ICAgIChfV29ya2VyU3RhdHMpOgorICAgICAgICAoX1dvcmtlclN0YXRzLmZvcik6CisgICAgICAg
IChfV29ya2VyU3RhdHMuX19pbml0X18pOgorICAgICAgICAoX1dvcmtlclN0YXRzLl9fcmVwcl9f
KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9t
YW5hZ2VyX3VuaXR0ZXN0LnB5OgorICAgICAgICAoUmVzdWx0U3VtbWFyeVRlc3Quc3VtbWFyaXpl
ZF9yZXN1bHRzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250
cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHk6CisgICAgICAgIChnZXQpOgorICAgICAg
ICAoV29ya2VyRXhjZXB0aW9uKToKKyAgICAgICAgKF9NYW5hZ2VyKToKKyAgICAgICAgKF9NYW5h
Z2VyLl9faW5pdF9fKToKKyAgICAgICAgKF9NYW5hZ2VyLnN0b3ApOgorICAgICAgICAoX01hbmFn
ZXIucnVuX3NoYXJkcyk6CisgICAgICAgIChfTWFuYWdlci5wb3N0KToKKyAgICAgICAgKF9NYW5h
Z2VyLndhaXQpOgorICAgICAgICAoX01hbmFnZXIuY2xvc2UpOgorICAgICAgICAoX01hbmFnZXIu
X3Bvc3QpOgorICAgICAgICAoX01hbmFnZXIuX3N0YXJ0X3dvcmtlcnMpOgorICAgICAgICAoX01h
bmFnZXIuX2Nhbl9waWNrbGUpOgorICAgICAgICAoX01hbmFnZXIuX2xvb3ApOgorICAgICAgICAo
X01hbmFnZXIuX2hhbmRsZV93b3JrZXJfZG9uZSk6CisgICAgICAgIChfTWFuYWdlci5faGFuZGxl
X3dvcmtlcl9leGNlcHRpb24pOgorICAgICAgICAoX1dvcmtlcik6CisgICAgICAgIChfV29ya2Vy
Ll9faW5pdF9fKToKKyAgICAgICAgKF9Xb3JrZXIudGVybWluYXRlKToKKyAgICAgICAgKF9Xb3Jr
ZXIuX2Nsb3NlKToKKyAgICAgICAgKF9Xb3JrZXIucnVuKToKKyAgICAgICAgKF9Xb3JrZXIucG9z
dCk6CisgICAgICAgIChfV29ya2VyLnlpZWxkX3RvX2NhbGxlcik6CisgICAgICAgIChfV29ya2Vy
Ll9wb3N0KToKKyAgICAgICAgKF9Xb3JrZXIuX3JhaXNlKToKKyAgICAgICAgKF9Xb3JrZXIuX3Nl
dF91cF9sb2dnaW5nKToKKyAgICAgICAgKF9Xb3JrZXJMb2dIYW5kbGVyKToKKyAgICAgICAgKF9X
b3JrZXJMb2dIYW5kbGVyLl9faW5pdF9fKToKKyAgICAgICAgKF9Xb3JrZXJMb2dIYW5kbGVyLmVt
aXQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJz
L21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy93b3JrZXIucHk6CisgICAgICAgIChXb3Jr
ZXIpOgorICAgICAgICAoV29ya2VyLl9faW5pdF9fKToKKyAgICAgICAgKFdvcmtlci5fX2RlbF9f
KToKKyAgICAgICAgKFdvcmtlci5uYW1lKToKKyAgICAgICAgKFdvcmtlci5zdGFydCk6CisgICAg
ICAgIChXb3JrZXIuc3RvcCk6CisgICAgICAgIChXb3JrZXIuaGFuZGxlKToKKyAgICAgICAgKFdv
cmtlci5fcnVuX3Rlc3QpOgorICAgICAgICAoV29ya2VyLl91cGRhdGVfdGVzdF9pbnB1dCk6Cisg
ICAgICAgIChXb3JrZXIuX3RpbWVvdXQpOgorICAgICAgICAoV29ya2VyLl9raWxsX2RyaXZlcik6
CisgICAgICAgIChXb3JrZXIuX3J1bl90ZXN0X3dpdGhfdGltZW91dCk6CisgICAgICAgIChXb3Jr
ZXIuX2NsZWFuX3VwX2FmdGVyX3Rlc3QpOgorICAgICAgICAoV29ya2VyLl9ydW5fdGVzdF9pbl9h
bm90aGVyX3RocmVhZC5TaW5nbGVUZXN0VGhyZWFkLnJ1bik6CisgICAgICAgIChXb3JrZXIuX3J1
bl90ZXN0X2luX3RoaXNfdGhyZWFkKToKKyAgICAgICAgKFdvcmtlci5fcnVuX3NpbmdsZV90ZXN0
KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy93
b3JrZXJfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbW9kZWxzL3Rlc3RfaW5wdXQucHk6CisgICAgICAgIChUZXN0SW5wdXQuX19yZXByX18pOgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0
c19pbnRlZ3JhdGlvbnRlc3QucHk6CisgICAgICAgIChwYXNzaW5nX3J1bik6CisgICAgICAgIChs
b2dnaW5nX3J1bik6CisgICAgICAgIChydW5fYW5kX2NhcHR1cmUpOgorICAgICAgICAoTWFpblRl
c3QudGVzdF9jaGlsZF9wcm9jZXNzZXNfMik6CisgICAgICAgIChNYWluVGVzdC50ZXN0X2NoaWxk
X3Byb2Nlc3Nlc19taW4pOgorICAgICAgICAoTWFpblRlc3QudGVzdF9leGNlcHRpb25fcmFpc2Vk
KToKKyAgICAgICAgKE1haW5UZXN0LnRlc3Rfa2V5Ym9hcmRfaW50ZXJydXB0KToKKyAgICAgICAg
KE1haW5UZXN0LnRlc3RfcmV0cnlpbmdfYW5kX2ZsYWt5X3Rlc3RzKToKKyAgICAgICAgKE1haW5U
ZXN0LnRlc3RfcnVuX29yZGVyX19pbmxpbmUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3ZpZXdzL21ldGVyZWRfc3RyZWFtLnB5OgorICAgICAgICAoX0xvZ0hhbmRs
ZXIuZW1pdCk6CisKKzIwMTItMDYtMjEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5v
cmc+CisKICAgICAgICAgcmVlbmFibGUgcGVyZiB0ZXN0cyBvbiB3aW4KICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5NjkwCiAKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2Vy
LnB5CmluZGV4IGE2M2MxZWZiODdkMjhkZGYxZjc2ZmViZGRmMTFiZGNlMTg2YTY3ZWYuLjZmODVh
ODU2ZTU5ZTkyYTAwMTgxZTgyNmFlNDZkMWNhZmFiMTljMzcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5w
eQpAQCAtNjYsNiArNjYsMzUgQEAgQlVJTERFUl9CQVNFX1VSTCA9ICJodHRwOi8vYnVpbGQuY2hy
b21pdW0ub3JnL2J1aWxkYm90L2xheW91dF90ZXN0X3Jlc3VsdHMvIgogVGVzdEV4cGVjdGF0aW9u
cyA9IHRlc3RfZXhwZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvbnMKIAogCitjbGFzcyBUZXN0U2hh
cmQob2JqZWN0KToKKyAgICAiIiJBIHRlc3Qgc2hhcmQgaXMgYSBuYW1lZCBsaXN0IG9mIFRlc3RJ
bnB1dHMuIiIiCisKKyAgICAjIEZJWE1FOiBNYWtlIHRoaXMgY2xhc3MgdmlzaWJsZSwgdXNlZCBi
eSB3b3JrZXJzIGFzIHdlbGwuCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHRlc3RfaW5w
dXRzKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLnRlc3RfaW5wdXRz
ID0gdGVzdF9pbnB1dHMKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJu
ICJUZXN0U2hhcmQobmFtZT0nJXMnLCB0ZXN0X2lucHV0cz0lcyciICUgKHNlbGYubmFtZSwgc2Vs
Zi50ZXN0X2lucHV0cykKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5uYW1lID09IG90aGVyLm5hbWUgYW5kIHNlbGYudGVzdF9pbnB1dHMgPT0gb3Ro
ZXIudGVzdF9pbnB1dHMKKworCitjbGFzcyBUZXN0UnVuSW50ZXJydXB0ZWRFeGNlcHRpb24oRXhj
ZXB0aW9uKToKKyAgICAiIiJSYWlzZWQgd2hlbiBhIHRlc3QgcnVuIHNob3VsZCBiZSBzdG9wcGVk
IGltbWVkaWF0ZWx5LiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWFzb24pOgorICAgICAg
ICBFeGNlcHRpb24uX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5yZWFzb24gPSByZWFzb24K
KyAgICAgICAgc2VsZi5tc2cgPSByZWFzb24KKworICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18sIChzZWxmLnJlYXNvbiwpCisKKworV29ya2Vy
RXhjZXB0aW9uID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLldvcmtlckV4Y2VwdGlvbgorCisKIGRl
ZiBpbnRlcnByZXRfdGVzdF9mYWlsdXJlcyhwb3J0LCB0ZXN0X25hbWUsIGZhaWx1cmVzKToKICAg
ICAiIiJJbnRlcnByZXQgdGVzdCBmYWlsdXJlcyBhbmQgcmV0dXJucyBhIHRlc3QgcmVzdWx0IGFz
IGRpY3QuCiAKQEAgLTI1NSwzNyArMjg0LDYgQEAgZGVmIHN1bW1hcml6ZV9yZXN1bHRzKHBvcnRf
b2JqLCBleHBlY3RhdGlvbnMsIHJlc3VsdF9zdW1tYXJ5LCByZXRyeV9zdW1tYXJ5LCB0ZXMKICAg
ICByZXR1cm4gcmVzdWx0cwogCiAKLWNsYXNzIFRlc3RSdW5JbnRlcnJ1cHRlZEV4Y2VwdGlvbihF
eGNlcHRpb24pOgotICAgICIiIlJhaXNlZCB3aGVuIGEgdGVzdCBydW4gc2hvdWxkIGJlIHN0b3Bw
ZWQgaW1tZWRpYXRlbHkuIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlYXNvbik6Ci0gICAg
ICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLnJlYXNvbiA9IHJlYXNv
bgotICAgICAgICBzZWxmLm1zZyA9IHJlYXNvbgotCi0gICAgZGVmIF9fcmVkdWNlX18oc2VsZik6
Ci0gICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXywgKHNlbGYucmVhc29uLCkKLQotCi1jbGFz
cyBXb3JrZXJFeGNlcHRpb24oRXhjZXB0aW9uKToKLSAgICAiIiJSYWlzZWQgd2hlbiB3ZSByZWNl
aXZlIGFuIHVuZXhwZWN0ZWQvdW5rbm93biBleGNlcHRpb24gZnJvbSBhIHdvcmtlci4iIiIKLSAg
ICBwYXNzCi0KLQotY2xhc3MgVGVzdFNoYXJkKG9iamVjdCk6Ci0gICAgIiIiQSB0ZXN0IHNoYXJk
IGlzIGEgbmFtZWQgbGlzdCBvZiBUZXN0SW5wdXRzLiIiIgotCi0gICAgIyBGSVhNRTogTWFrZSB0
aGlzIGNsYXNzIHZpc2libGUsIHVzZWQgYnkgd29ya2VycyBhcyB3ZWxsLgotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBuYW1lLCB0ZXN0X2lucHV0cyk6Ci0gICAgICAgIHNlbGYubmFtZSA9IG5hbWUK
LSAgICAgICAgc2VsZi50ZXN0X2lucHV0cyA9IHRlc3RfaW5wdXRzCi0KLSAgICBkZWYgX19yZXBy
X18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiVGVzdFNoYXJkKG5hbWU9JyVzJywgdGVzdF9pbnB1
dHM9JXMnIiAlIChzZWxmLm5hbWUsIHNlbGYudGVzdF9pbnB1dHMpCi0KLSAgICBkZWYgX19lcV9f
KHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIHNlbGYubmFtZSA9PSBvdGhlci5uYW1lIGFu
ZCBzZWxmLnRlc3RfaW5wdXRzID09IG90aGVyLnRlc3RfaW5wdXRzCi0KLQogY2xhc3MgTWFuYWdl
cihvYmplY3QpOgogICAgICIiIkEgY2xhc3MgZm9yIG1hbmFnaW5nIHJ1bm5pbmcgYSBzZXJpZXMg
b2YgdGVzdHMgb24gYSBzZXJpZXMgb2YgbGF5b3V0CiAgICAgdGVzdCBmaWxlcy4iIiIKQEAgLTMz
MCwxMCArMzI4LDkgQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogCiAgICAgICAgIHNlbGYuX2Fs
bF9yZXN1bHRzID0gW10KICAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHMgPSB7fQorICAgICAgICBz
ZWxmLl93b3JrZXJfc3RhdHMgPSB7fQogICAgICAgICBzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1t
YXJ5ID0gTm9uZQotCi0gICAgICAgICMgVGhpcyBtYXBzIHdvcmtlciBuYW1lcyB0byB0aGUgc3Rh
dGUgd2UgYXJlIHRyYWNraW5nIGZvciBlYWNoIG9mIHRoZW0uCi0gICAgICAgIHNlbGYuX3dvcmtl
cl9zdGF0ZXMgPSB7fQorICAgICAgICBzZWxmLl9uYW1lID0gJ01hbmFnZXInCiAKICAgICBkZWYg
Y29sbGVjdF90ZXN0cyhzZWxmLCBhcmdzKToKICAgICAgICAgIiIiRmluZCBhbGwgdGhlIGZpbGVz
IHRvIHRlc3QuCkBAIC03NDYsNyArNzQzLDYgQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAg
ICAgICBzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5ID0gcmVzdWx0X3N1bW1hcnkKICAgICAg
ICAgc2VsZi5fYWxsX3Jlc3VsdHMgPSBbXQogICAgICAgICBzZWxmLl9ncm91cF9zdGF0cyA9IHt9
Ci0gICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0ZXMgPSB7fQogCiAgICAgICAgIGtleWJvYXJkX2lu
dGVycnVwdGVkID0gRmFsc2UKICAgICAgICAgaW50ZXJydXB0ZWQgPSBGYWxzZQpAQCAtNzcxLDc2
ICs3NjcsMzMgQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAgICAgICBudW1fd29ya2VycyA9
IG1pbihudW1fd29ya2VycywgbGVuKGFsbF9zaGFyZHMpKQogICAgICAgICBzZWxmLl9sb2dfbnVt
X3dvcmtlcnMobnVtX3dvcmtlcnMsIGxlbihhbGxfc2hhcmRzKSwgbGVuKGxvY2tlZF9zaGFyZHMp
KQogCi0gICAgICAgIG1hbmFnZXJfY29ubmVjdGlvbiA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5n
ZXQobnVtX3dvcmtlcnMsIHNlbGYsIHdvcmtlci5Xb3JrZXIpCi0KICAgICAgICAgaWYgc2VsZi5f
b3B0aW9ucy5kcnlfcnVuOgogICAgICAgICAgICAgcmV0dXJuIChrZXlib2FyZF9pbnRlcnJ1cHRl
ZCwgaW50ZXJydXB0ZWQsIHRocmVhZF90aW1pbmdzLCBzZWxmLl9ncm91cF9zdGF0cywgc2VsZi5f
YWxsX3Jlc3VsdHMpCiAKLSAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0
aW5nICVzIC4uLicgJSBncmFtbWFyLnBsdXJhbGl6ZSgnd29ya2VyJywgbnVtX3dvcmtlcnMpKQot
ICAgICAgICBmb3Igd29ya2VyX251bWJlciBpbiB4cmFuZ2UobnVtX3dvcmtlcnMpOgotICAgICAg
ICAgICAgd29ya2VyX2FyZ3VtZW50cyA9IHdvcmtlci5Xb3JrZXJBcmd1bWVudHMod29ya2VyX251
bWJlciwgc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSgpLCBzZWxmLl9vcHRpb25zKQotICAgICAgICAg
ICAgd29ya2VyX2Nvbm5lY3Rpb24gPSBtYW5hZ2VyX2Nvbm5lY3Rpb24uc3RhcnRfd29ya2VyKHdv
cmtlcl9hcmd1bWVudHMpCi0gICAgICAgICAgICBpZiBudW1fd29ya2VycyA9PSAxOgotICAgICAg
ICAgICAgICAgICMgRklYTUU6IFdlIG5lZWQgdG8gYmUgYWJsZSB0byBzaGFyZSBhIHBvcnQgd2l0
aCB0aGUgd29yayBzbwotICAgICAgICAgICAgICAgICMgdGhhdCBzb21lIG9mIHRoZSB0ZXN0cyBj
YW4gcXVlcnkgc3RhdGUgb24gdGhlIHBvcnQ7IGlkZWFsbHkKLSAgICAgICAgICAgICAgICAjIHdl
J2QgcmV3cml0ZSB0aGUgdGVzdHMgc28gdGhhdCB0aGlzIHdhc24ndCBuZWNlc3NhcnkuCi0gICAg
ICAgICAgICAgICAgIwotICAgICAgICAgICAgICAgICMgTm90ZSB0aGF0IHRoaXMgb25seSB3b3Jr
cyBiZWNhdXNlIGluIHRoZSBpbmxpbmUgY2FzZQotICAgICAgICAgICAgICAgICMgdGhlIHdvcmtl
ciBoYXNuJ3QgcmVhbGx5IHN0YXJ0ZWQgeWV0IGFuZCB3b24ndCBzdGFydAotICAgICAgICAgICAg
ICAgICMgcnVubmluZyB1bnRpbCB3ZSBjYWxsIHJ1bl9tZXNzYWdlX2xvb3AoKSwgYmVsb3cuCi0g
ICAgICAgICAgICAgICAgd29ya2VyX2Nvbm5lY3Rpb24uc2V0X2lubGluZV9hcmd1bWVudHMoc2Vs
Zi5fcG9ydCkKLQotICAgICAgICAgICAgd29ya2VyX3N0YXRlID0gX1dvcmtlclN0YXRlKHdvcmtl
cl9udW1iZXIsIHdvcmtlcl9jb25uZWN0aW9uKQotICAgICAgICAgICAgc2VsZi5fd29ya2VyX3N0
YXRlc1t3b3JrZXJfY29ubmVjdGlvbi5uYW1lKCldID0gd29ya2VyX3N0YXRlCi0KLSAgICAgICAg
ICAgIHRpbWUuc2xlZXAoc2VsZi5fcG9ydC53b3JrZXJfc3RhcnR1cF9kZWxheV9zZWNzKCkpCi0K
LSAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoIlN0YXJ0aW5nIHRlc3RpbmcgLi4u
IikKLSAgICAgICAgZm9yIHNoYXJkIGluIGFsbF9zaGFyZHM6Ci0gICAgICAgICAgICAjIEZJWE1F
OiBDaGFuZ2UgJ3Rlc3RfbGlzdCcgdG8gJ3NoYXJkJywgbWFrZSBzaGFyZGluZyBwdWJsaWMuCi0g
ICAgICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCd0ZXN0X2xpc3QnLCBz
aGFyZC5uYW1lLCBzaGFyZC50ZXN0X2lucHV0cykKLQotICAgICAgICAjIFdlIHBvc3Qgb25lICdz
dG9wJyBtZXNzYWdlIGZvciBlYWNoIHdvcmtlci4gQmVjYXVzZSB0aGUgc3RvcCBtZXNzYWdlCi0g
ICAgICAgICMgYXJlIHNlbnQgYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cywgYW5kIGJlY2F1c2UgZWFj
aCB3b3JrZXIgd2lsbCBzdG9wCi0gICAgICAgICMgcmVhZGluZyBtZXNzc2FnZXMgYWZ0ZXIgcmVj
ZWl2aW5nIGEgc3RvcCwgd2UgY2FuIGJlIHN1cmUgZWFjaAotICAgICAgICAjIHdvcmtlciB3aWxs
IGdldCBhIHN0b3AgbWVzc2FnZSBhbmQgaGVuY2UgdGhleSB3aWxsIGFsbCBzaHV0IGRvd24uCi0g
ICAgICAgIGZvciBfIGluIHhyYW5nZShudW1fd29ya2Vycyk6Ci0gICAgICAgICAgICBtYW5hZ2Vy
X2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdzdG9wJykKKyAgICAgICAgZGVmIHdvcmtlcl9mYWN0
b3J5KGNhbGxlciwgd29ya2VyX251bWJlcik6CisgICAgICAgICAgICByZXR1cm4gd29ya2VyLldv
cmtlcihjYWxsZXIsIHdvcmtlcl9udW1iZXIsIHNlbGYucmVzdWx0c19kaXJlY3RvcnkoKSwgc2Vs
Zi5fb3B0aW9ucykKIAorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRp
bmcgJXMgLi4uJyAlIGdyYW1tYXIucGx1cmFsaXplKCd3b3JrZXInLCBudW1fd29ya2VycykpCisg
ICAgICAgIGludGVycnVwdGVkID0ga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBGYWxzZQorICAgICAg
ICBzZWxmLl93b3JrZXJzX3N0YXJ0ZWQgPSBzZXQoKQorICAgICAgICBzZWxmLl93b3JrZXJzX2Rv
bmUgPSBzZXQoKQorICAgICAgICBzZWxmLl9icm9rZXIgPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIu
Z2V0KHNlbGYuX3BvcnQuaG9zdCwgc2VsZiwgd29ya2VyX2ZhY3RvcnksIG51bV93b3JrZXJzLCBz
ZWxmLl9wb3J0Lndvcmtlcl9zdGFydHVwX2RlbGF5X3NlY3MoKSkKICAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNfZG9uZSgpOgotICAgICAgICAgICAgICAgIG1hbmFn
ZXJfY29ubmVjdGlvbi5ydW5fbWVzc2FnZV9sb29wKGRlbGF5X3NlY3M9MS4wKQotCi0gICAgICAg
ICAgICAjIE1ha2Ugc3VyZSBhbGwgb2YgdGhlIHdvcmtlcnMgaGF2ZSBzaHV0IGRvd24gKGlmIHBv
c3NpYmxlKS4KLSAgICAgICAgICAgIGZvciB3b3JrZXJfc3RhdGUgaW4gc2VsZi5fd29ya2VyX3N0
YXRlcy52YWx1ZXMoKToKLSAgICAgICAgICAgICAgICBpZiB3b3JrZXJfc3RhdGUud29ya2VyX2Nv
bm5lY3Rpb24uaXNfYWxpdmUoKToKLSAgICAgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnV2Fp
dGluZyBmb3Igd29ya2VyICVkIHRvIGV4aXQnICUgd29ya2VyX3N0YXRlLm51bWJlcikKLSAgICAg
ICAgICAgICAgICAgICAgd29ya2VyX3N0YXRlLndvcmtlcl9jb25uZWN0aW9uLmpvaW4oNS4wKQot
ICAgICAgICAgICAgICAgICAgICBpZiB3b3JrZXJfc3RhdGUud29ya2VyX2Nvbm5lY3Rpb24uaXNf
YWxpdmUoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1dvcmtlciAlZCBk
aWQgbm90IGV4aXQgaW4gdGltZS4nICUgd29ya2VyX3N0YXRlLm51bWJlcikKLQorICAgICAgICAg
ICAgc2VsZi5fYnJva2VyLnJ1bl9zaGFyZHMoYWxsX3NoYXJkcykKICAgICAgICAgZXhjZXB0IEtl
eWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5mbHVzaCgpCi0gICAg
ICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlKCdJbnRlcnJ1cHRlZCwgZXhpdGluZyAuLi4nKQot
ICAgICAgICAgICAgc2VsZi5jYW5jZWxfd29ya2VycygpCisgICAgICAgICAgICBfbG9nLmluZm8o
J0ludGVycnVwdGVkLCBleGl0aW5nIC4uLicpCiAgICAgICAgICAgICBrZXlib2FyZF9pbnRlcnJ1
cHRlZCA9IFRydWUKICAgICAgICAgZXhjZXB0IFRlc3RSdW5JbnRlcnJ1cHRlZEV4Y2VwdGlvbiwg
ZToKICAgICAgICAgICAgIF9sb2cud2FybmluZyhlLnJlYXNvbikKLSAgICAgICAgICAgIHNlbGYu
Y2FuY2VsX3dvcmtlcnMoKQogICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSBUcnVlCi0gICAgICAg
IGV4Y2VwdCBXb3JrZXJFeGNlcHRpb246Ci0gICAgICAgICAgICBzZWxmLmNhbmNlbF93b3JrZXJz
KCkKLSAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICMgVW5l
eHBlY3RlZCBleGNlcHRpb247IGRvbid0IHRyeSB0byBjbGVhbiB1cCB3b3JrZXJzLgotICAgICAg
ICAgICAgX2xvZy5lcnJvcigiRXhjZXB0aW9uIHJhaXNlZCwgZXhpdGluZyIpCi0gICAgICAgICAg
ICBzZWxmLmNhbmNlbF93b3JrZXJzKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAg
ICAgICAgICAgIF9sb2cuZXJyb3IoIkV4Y2VwdGlvbiByYWlzZWQsIGV4aXRpbmc6ICVzIiAlIGUp
CiAgICAgICAgICAgICByYWlzZQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgbWFuYWdl
cl9jb25uZWN0aW9uLmNsZWFudXAoKQorICAgICAgICAgICAgc2VsZi5fYnJva2VyLmNsb3NlKCkK
ICAgICAgICAgICAgIHNlbGYuc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCiAKLSAgICAgICAgdGhy
ZWFkX3RpbWluZ3MgPSBbd29ya2VyX3N0YXRlLnN0YXRzIGZvciB3b3JrZXJfc3RhdGUgaW4gc2Vs
Zi5fd29ya2VyX3N0YXRlcy52YWx1ZXMoKV0KKyAgICAgICAgdGhyZWFkX3RpbWluZ3MgPSBbXQog
CiAgICAgICAgICMgRklYTUU6IHNob3VsZCB0aGlzIGJlIGEgY2xhc3MgaW5zdGVhZCBvZiBhIHR1
cGxlPwogICAgICAgICByZXR1cm4gKGludGVycnVwdGVkLCBrZXlib2FyZF9pbnRlcnJ1cHRlZCwg
dGhyZWFkX3RpbWluZ3MsIHNlbGYuX2dyb3VwX3N0YXRzLCBzZWxmLl9hbGxfcmVzdWx0cykKQEAg
LTE0NTIsNDIgKzE0MDUsMjMgQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAgICAgICByZXN1
bHRzX2ZpbGVuYW1lID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX3Jlc3VsdHNfZGlyZWN0
b3J5LCAicmVzdWx0cy5odG1sIikKICAgICAgICAgc2VsZi5fcG9ydC5zaG93X3Jlc3VsdHNfaHRt
bF9maWxlKHJlc3VsdHNfZmlsZW5hbWUpCiAKKyAgICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAg
ICAgIiIiQ2FsbGVkIGZyb20gaW5zaWRlIGJyb2tlciBjb2RlIHRvIGluZGljYXRlIHdoZXRoZXIg
dG8gZXhpdC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3dvcmtlcnNfc3RhcnRlZCBhbmQgc2Vs
Zi5fd29ya2Vyc19kb25lID09IHNlbGYuX3dvcmtlcnNfc3RhcnRlZAorCiAgICAgZGVmIG5hbWUo
c2VsZik6Ci0gICAgICAgIHJldHVybiAnTWFuYWdlcicKKyAgICAgICAgcmV0dXJuICdtYW5hZ2Vy
JwogCi0gICAgZGVmIGlzX2RvbmUoc2VsZik6Ci0gICAgICAgIHdvcmtlcl9zdGF0ZXMgPSBzZWxm
Ll93b3JrZXJfc3RhdGVzLnZhbHVlcygpCi0gICAgICAgIHJldHVybiB3b3JrZXJfc3RhdGVzIGFu
ZCBhbGwoc2VsZi5fd29ya2VyX2lzX2RvbmUod29ya2VyX3N0YXRlKSBmb3Igd29ya2VyX3N0YXRl
IGluIHdvcmtlcl9zdGF0ZXMpCi0KLSAgICAjIEZJWE1FOiBJbmxpbmUgdGhpcyBmdW5jdGlvbi4K
LSAgICBkZWYgX3dvcmtlcl9pc19kb25lKHNlbGYsIHdvcmtlcl9zdGF0ZSk6Ci0gICAgICAgIHJl
dHVybiB3b3JrZXJfc3RhdGUuZG9uZQotCi0gICAgZGVmIGNhbmNlbF93b3JrZXJzKHNlbGYpOgot
ICAgICAgICBmb3Igd29ya2VyX3N0YXRlIGluIHNlbGYuX3dvcmtlcl9zdGF0ZXMudmFsdWVzKCk6
Ci0gICAgICAgICAgICB3b3JrZXJfc3RhdGUud29ya2VyX2Nvbm5lY3Rpb24uY2FuY2VsKCkKLQot
ICAgIGRlZiBoYW5kbGVfc3RhcnRlZF90ZXN0KHNlbGYsIHNvdXJjZSwgdGVzdF9pbmZvLCBoYW5n
X3RpbWVvdXQpOgotICAgICAgICB3b3JrZXJfc3RhdGUgPSBzZWxmLl93b3JrZXJfc3RhdGVzW3Nv
dXJjZV0KLSAgICAgICAgd29ya2VyX3N0YXRlLmN1cnJlbnRfdGVzdF9uYW1lID0gdGVzdF9pbmZv
LnRlc3RfbmFtZQotICAgICAgICB3b3JrZXJfc3RhdGUubmV4dF90aW1lb3V0ID0gdGltZS50aW1l
KCkgKyBoYW5nX3RpbWVvdXQKLQotICAgIGRlZiBoYW5kbGVfZG9uZShzZWxmLCBzb3VyY2UsIGxv
Z19tZXNzYWdlcz1Ob25lKToKLSAgICAgICAgd29ya2VyX3N0YXRlID0gc2VsZi5fd29ya2VyX3N0
YXRlc1tzb3VyY2VdCi0gICAgICAgIHdvcmtlcl9zdGF0ZS5kb25lID0gVHJ1ZQotICAgICAgICBz
ZWxmLl9sb2dfbWVzc2FnZXMobG9nX21lc3NhZ2VzKQotCi0gICAgZGVmIGhhbmRsZV9leGNlcHRp
b24oc2VsZiwgc291cmNlLCBleGNlcHRpb25fdHlwZSwgZXhjZXB0aW9uX3ZhbHVlLCBzdGFjayk6
Ci0gICAgICAgIGlmIGV4Y2VwdGlvbl90eXBlIGluIChLZXlib2FyZEludGVycnVwdCwgVGVzdFJ1
bkludGVycnVwdGVkRXhjZXB0aW9uKToKLSAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbl90eXBl
KGV4Y2VwdGlvbl92YWx1ZSkKLSAgICAgICAgX2xvZy5lcnJvcigiJXMgcmFpc2VkICVzKCclcycp
OiIgJSAoCi0gICAgICAgICAgICAgICAgICAgc291cmNlLAotICAgICAgICAgICAgICAgICAgIGV4
Y2VwdGlvbl92YWx1ZS5fX2NsYXNzX18uX19uYW1lX18sCi0gICAgICAgICAgICAgICAgICAgc3Ry
KGV4Y2VwdGlvbl92YWx1ZSkpKQotICAgICAgICBzZWxmLl9sb2dfd29ya2VyX3N0YWNrKHN0YWNr
KQotICAgICAgICByYWlzZSBXb3JrZXJFeGNlcHRpb24oc3RyKGV4Y2VwdGlvbl92YWx1ZSkpCi0K
LSAgICBkZWYgaGFuZGxlX2ZpbmlzaGVkX2xpc3Qoc2VsZiwgc291cmNlLCBsaXN0X25hbWUsIG51
bV90ZXN0cywgZWxhcHNlZF90aW1lKToKKyAgICBkZWYgaGFuZGxlKHNlbGYsIG5hbWUsIHNvdXJj
ZSwgKmFyZ3MpOgorICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYsICdfaGFuZGxlXycgKyBu
YW1lKQorICAgICAgICBpZiBtZXRob2Q6CisgICAgICAgICAgICByZXR1cm4gbWV0aG9kKHNvdXJj
ZSwgKmFyZ3MpCisgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCd1bmtub3duIG1lc3NhZ2Ug
JXMgcmVjZWl2ZWQgZnJvbSAlcywgYXJncz0lcycgJSAobmFtZSwgc291cmNlLCByZXByKGFyZ3Mp
KSkKKworICAgIGRlZiBfaGFuZGxlX3N0YXJ0ZWRfdGVzdF9saXN0KHNlbGYsIHdvcmtlcl9uYW1l
LCB0ZXN0X2xpc3QpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX2hhbmRsZV9maW5pc2hlZF90
ZXN0X2xpc3Qoc2VsZiwgd29ya2VyX25hbWUsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2Vk
X3RpbWUpOgogICAgICAgICBzZWxmLl9ncm91cF9zdGF0c1tsaXN0X25hbWVdID0gKG51bV90ZXN0
cywgZWxhcHNlZF90aW1lKQogCiAgICAgICAgIGRlZiBmaW5kKG5hbWUsIHRlc3RfbGlzdHMpOgpA
QCAtMTUwMiwyOCArMTQzNiwyOSBAQCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgICAg
ICBpZiBub3Qgc2VsZi5fcmVtYWluaW5nX2xvY2tlZF9zaGFyZHM6CiAgICAgICAgICAgICAgICAg
c2VsZi5zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKCkKIAotICAgIGRlZiBoYW5kbGVfZmluaXNoZWRf
dGVzdChzZWxmLCBzb3VyY2UsIHJlc3VsdCwgZWxhcHNlZF90aW1lLCBsb2dfbWVzc2FnZXM9Tm9u
ZSk6Ci0gICAgICAgIHdvcmtlcl9zdGF0ZSA9IHNlbGYuX3dvcmtlcl9zdGF0ZXNbc291cmNlXQot
ICAgICAgICB3b3JrZXJfc3RhdGUubmV4dF90aW1lb3V0ID0gTm9uZQotICAgICAgICB3b3JrZXJf
c3RhdGUuY3VycmVudF90ZXN0X25hbWUgPSBOb25lCi0gICAgICAgIHdvcmtlcl9zdGF0ZS5zdGF0
c1sndG90YWxfdGltZSddICs9IGVsYXBzZWRfdGltZQotICAgICAgICB3b3JrZXJfc3RhdGUuc3Rh
dHNbJ251bV90ZXN0cyddICs9IDEKKyAgICBkZWYgX2hhbmRsZV9zdGFydGVkX3Rlc3Qoc2VsZiwg
KmFyZ3MpOgorICAgICAgICBwYXNzCiAKLSAgICAgICAgc2VsZi5fbG9nX21lc3NhZ2VzKGxvZ19t
ZXNzYWdlcykKKyAgICBkZWYgX2hhbmRsZV9maW5pc2hlZF90ZXN0KHNlbGYsIHdvcmtlcl9uYW1l
LCByZXN1bHQsIGVsYXBzZWRfdGltZSwgbG9nX21lc3NhZ2VzPVtdKToKKyAgICAgICAgc2VsZi5f
d29ya2VyX3N0YXRzLnNldGRlZmF1bHQod29ya2VyX25hbWUsIF9Xb3JrZXJTdGF0cyh3b3JrZXJf
bmFtZSkpCisgICAgICAgIHdvcmtlcl9zdGF0cyA9IHNlbGYuX3dvcmtlcl9zdGF0c1t3b3JrZXJf
bmFtZV0KKyAgICAgICAgd29ya2VyX3N0YXRzLnN0YXRzWyd0b3RhbF90aW1lJ10gKz0gZWxhcHNl
ZF90aW1lCisgICAgICAgIHdvcmtlcl9zdGF0cy5zdGF0c1snbnVtX3Rlc3RzJ10gKz0gMQogICAg
ICAgICBzZWxmLl9hbGxfcmVzdWx0cy5hcHBlbmQocmVzdWx0KQogICAgICAgICBzZWxmLl91cGRh
dGVfc3VtbWFyeV93aXRoX3Jlc3VsdChzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5LCByZXN1
bHQpCiAKLSAgICBkZWYgX2xvZ19tZXNzYWdlcyhzZWxmLCBtZXNzYWdlcyk6Ci0gICAgICAgIGZv
ciBtZXNzYWdlIGluIG1lc3NhZ2VzOgotICAgICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZWxu
KCptZXNzYWdlKQogCi0gICAgZGVmIF9sb2dfd29ya2VyX3N0YWNrKHNlbGYsIHN0YWNrKToKLSAg
ICAgICAgd2Via2l0cHlkaXIgPSBzZWxmLl9wb3J0LnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnVG9v
bHMnLCAnU2NyaXB0cycsICd3ZWJraXRweScpICsgc2VsZi5fZmlsZXN5c3RlbS5zZXAKLSAgICAg
ICAgZm9yIGZpbGVuYW1lLCBsaW5lX251bWJlciwgZnVuY3Rpb25fbmFtZSwgdGV4dCBpbiBzdGFj
azoKLSAgICAgICAgICAgIGlmIGZpbGVuYW1lLnN0YXJ0c3dpdGgod2Via2l0cHlkaXIpOgotICAg
ICAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZSh3ZWJraXRweWRpciwgJycp
Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCcgICVzOiV1IChpbiAlcyknICUgKGZpbGVuYW1lLCBs
aW5lX251bWJlciwgZnVuY3Rpb25fbmFtZSkpCi0gICAgICAgICAgICBfbG9nLmVycm9yKCcgICAg
JXMnICUgdGV4dCkKK2NsYXNzIF9Xb3JrZXJTdGF0cyhvYmplY3QpOgorICAgICIiIkEgY2xhc3Mg
Zm9yIHRoZSBtYW5hZ2VyIHRvIHVzZSB0byB0cmFjayB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUg
d29ya2Vycy4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgICMgRklY
TUU6IFVzZSBmaWVsZHMgZGlyZWN0bHksIG5vdCBhIGRpY3QuCisgICAgICAgIHNlbGYuc3RhdHMg
PSB7fQorICAgICAgICBzZWxmLnN0YXRzWyduYW1lJ10gPSBuYW1lCisgICAgICAgIHNlbGYuc3Rh
dHNbJ251bV90ZXN0cyddID0gMAorICAgICAgICBzZWxmLnN0YXRzWyd0b3RhbF90aW1lJ10gPSAw
CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiX1dvcmtlclN0YXRz
IiArIHN0cihzZWxmLnN0YXRzKSArICIpIgogCiAKIGRlZiByZWFkX3Rlc3RfZmlsZXMoZnMsIGZp
bGVuYW1lcywgdGVzdF9wYXRoX3NlcGFyYXRvcik6CkBAIC0xNTczLDIwICsxNTA4LDMgQEAgZGVm
IG5hdHVyYWxfc29ydF9rZXkoc3RyaW5nX3RvX3NwbGl0KToKICAgICAgICAgICAgIHJldHVybiB2
YWwKIAogICAgIHJldHVybiBbdHJ5aW50KGNodW5rKSBmb3IgY2h1bmsgaW4gcmUuc3BsaXQoJyhc
ZCspJywgc3RyaW5nX3RvX3NwbGl0KV0KLQotCi1jbGFzcyBfV29ya2VyU3RhdGUob2JqZWN0KToK
LSAgICAiIiJBIGNsYXNzIGZvciB0aGUgbWFuYWdlciB0byB1c2UgdG8gdHJhY2sgdGhlIGN1cnJl
bnQgc3RhdGUgb2YgdGhlIHdvcmtlcnMuIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG51bWJl
ciwgd29ya2VyX2Nvbm5lY3Rpb24pOgotICAgICAgICBzZWxmLndvcmtlcl9jb25uZWN0aW9uID0g
d29ya2VyX2Nvbm5lY3Rpb24KLSAgICAgICAgc2VsZi5udW1iZXIgPSBudW1iZXIKLSAgICAgICAg
c2VsZi5kb25lID0gRmFsc2UKLSAgICAgICAgc2VsZi5jdXJyZW50X3Rlc3RfbmFtZSA9IE5vbmUK
LSAgICAgICAgc2VsZi5uZXh0X3RpbWVvdXQgPSBOb25lCi0gICAgICAgIHNlbGYuc3RhdHMgPSB7
fQotICAgICAgICBzZWxmLnN0YXRzWyduYW1lJ10gPSB3b3JrZXJfY29ubmVjdGlvbi5uYW1lKCkK
LSAgICAgICAgc2VsZi5zdGF0c1snbnVtX3Rlc3RzJ10gPSAwCi0gICAgICAgIHNlbGYuc3RhdHNb
J3RvdGFsX3RpbWUnXSA9IDAKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0
dXJuICJfV29ya2VyU3RhdGUoIiArIHN0cihzZWxmLl9fZGljdF9fKSArICIpIgpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdl
cl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRy
b2xsZXJzL21hbmFnZXJfdW5pdHRlc3QucHkKaW5kZXggMzQ5NjMyMmE5NzJkY2Q4NmM1MjkyMWI2
MjQ5MDYwZTViZjA0MTM3MC4uNzNjYzRhYzE5YjZmMjYwYzViNjViMTRjYmIyY2YzNDM1M2JiN2Y0
NyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJv
bGxlcnMvbWFuYWdlcl91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5CkBAIC00Myw4ICs0Myw4
IEBAIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IHBvcnRfdGVzdGNhc2UK
IAogZnJvbSB3ZWJraXRweSBpbXBvcnQgbGF5b3V0X3Rlc3RzCiBmcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cyBpbXBvcnQgcnVuX3dlYmtpdF90ZXN0cwotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMuY29udHJvbGxlcnMgaW1wb3J0IG1hbmFnZXIKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LmNvbnRyb2xsZXJzLm1hbmFnZXIgaW1wb3J0IGludGVycHJldF90ZXN0X2ZhaWx1cmVzLCAgTWFu
YWdlciwgbmF0dXJhbF9zb3J0X2tleSwgdGVzdF9rZXksIFRlc3RSdW5JbnRlcnJ1cHRlZEV4Y2Vw
dGlvbiwgVGVzdFNoYXJkCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycy5t
YW5hZ2VyIGltcG9ydCBUZXN0UnVuSW50ZXJydXB0ZWRFeGNlcHRpb24sIFRlc3RTaGFyZAorZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMubWFuYWdlciBpbXBvcnQgaW50ZXJw
cmV0X3Rlc3RfZmFpbHVyZXMsIE1hbmFnZXIsIG5hdHVyYWxfc29ydF9rZXksIHRlc3Rfa2V5LCBz
dW1tYXJpemVfcmVzdWx0cwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzIGltcG9y
dCByZXN1bHRfc3VtbWFyeQogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzIGltcG9y
dCB0ZXN0X2V4cGVjdGF0aW9ucwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzIGlt
cG9ydCB0ZXN0X2ZhaWx1cmVzCkBAIC01MTEsOCArNTExLDggQEAgY2xhc3MgUmVzdWx0U3VtbWFy
eVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgcmV0cnkuYWRkKHNlbGYuZ2V0
X3Jlc3VsdCgncGFzc2VzL3RleHQuaHRtbCcpLCBUcnVlKQogICAgICAgICAgICAgcmV0cnkuYWRk
KHNlbGYuZ2V0X3Jlc3VsdCgnZmFpbHVyZXMvZXhwZWN0ZWQvdGltZW91dC5odG1sJyksIFRydWUp
CiAgICAgICAgICAgICByZXRyeS5hZGQoc2VsZi5nZXRfcmVzdWx0KCdmYWlsdXJlcy9leHBlY3Rl
ZC9jcmFzaC5odG1sJyksIFRydWUpCi0gICAgICAgIHVuZXhwZWN0ZWRfcmVzdWx0cyA9IG1hbmFn
ZXIuc3VtbWFyaXplX3Jlc3VsdHMocG9ydCwgZXhwLCBycywgcmV0cnksIHRlc3RfdGltaW5ncz17
fSwgb25seV91bmV4cGVjdGVkPVRydWUsIGludGVycnVwdGVkPUZhbHNlKQotICAgICAgICBleHBl
Y3RlZF9yZXN1bHRzID0gbWFuYWdlci5zdW1tYXJpemVfcmVzdWx0cyhwb3J0LCBleHAsIHJzLCBy
ZXRyeSwgdGVzdF90aW1pbmdzPXt9LCBvbmx5X3VuZXhwZWN0ZWQ9RmFsc2UsIGludGVycnVwdGVk
PUZhbHNlKQorICAgICAgICB1bmV4cGVjdGVkX3Jlc3VsdHMgPSBzdW1tYXJpemVfcmVzdWx0cyhw
b3J0LCBleHAsIHJzLCByZXRyeSwgdGVzdF90aW1pbmdzPXt9LCBvbmx5X3VuZXhwZWN0ZWQ9VHJ1
ZSwgaW50ZXJydXB0ZWQ9RmFsc2UpCisgICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSBzdW1tYXJp
emVfcmVzdWx0cyhwb3J0LCBleHAsIHJzLCByZXRyeSwgdGVzdF90aW1pbmdzPXt9LCBvbmx5X3Vu
ZXhwZWN0ZWQ9RmFsc2UsIGludGVycnVwdGVkPUZhbHNlKQogICAgICAgICByZXR1cm4gZXhwZWN0
ZWRfcmVzdWx0cywgdW5leHBlY3RlZF9yZXN1bHRzCiAKICAgICBkZWYgdGVzdF9ub19zdm5fcmV2
aXNpb24oc2VsZik6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXIu
cHkKaW5kZXggNzA0N2Q5MzljNDFiMWZiYTkxMjZiNzEyNGRmMmQ0MjZmZGNlN2Y3NC4uMjdiNjRi
MjgzNzY2ZDYwYTgxN2ViNmM4MWY5YTI5NjllOTQ3MWYwNyAxMDA3NTUKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl93b3JrZXJfYnJv
a2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xs
ZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weQpAQCAtMjYsNDE4ICsyNiwyNDggQEAKICMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLSIiIk1vZHVsZSBmb3IgaGFuZGxpbmcgbWVzc2Fn
ZXMgYW5kIGNvbmN1cnJlbmN5IGZvciBydW4td2Via2l0LXRlc3RzLgotCi1UaGlzIG1vZHVsZSBp
bXBsZW1lbnRzIGEgbWVzc2FnZSBicm9rZXIgdGhhdCBjb25uZWN0cyB0aGUgbWFuYWdlciB0byB0
aGUKLXdvcmtlcnM6IGl0IHByb3ZpZGVzIGEgbWVzc2FnaW5nIGFic3RyYWN0aW9uIGFuZCBtZXNz
YWdlIGxvb3BzIChidWlsZGluZyBvbgotdG9wIG9mIG1lc3NhZ2VfYnJva2VyKSwgYW5kIGhhbmRs
ZXMgc3RhcnRpbmcgd29ya2VycyBieSBsYXVuY2hpbmcgcHJvY2Vzc2VzLgotCi1UaGVyZSBhcmUg
YSBsb3Qgb2YgY2xhc3NlcyBhbmQgb2JqZWN0cyBpbnZvbHZlZCBpbiBhIGZ1bGx5IGNvbm5lY3Rl
ZCBzeXN0ZW0uCi1UaGV5IGludGVyYWN0IG1vcmUgb3IgbGVzcyBsaWtlOgotCi0gIE1hbmFnZXIg
IC0tPiAgX0lubGluZU1hbmFnZXIgLS0tPiBfSW5saW5lV29ya2VyIDwtPiBXb3JrZXIKLSAgICAg
XiAgICAgICAgICAgICAgICAgICAgXCAgICAgICAgICAgICAgIC8gICAgICAgICAgICAgIF4KLSAg
ICAgfCAgICAgICAgICAgICAgICAgICAgIHYgICAgICAgICAgICAgdiAgICAgICAgICAgICAgIHwK
LSAgICAgXC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCcm9rZXIgICAtLS0tLS0tLS0tLS0tLS0t
LwotCi1UaGUgYnJva2VyIHNpbXBseSBkaXN0cmlidXRlcyBtZXNzYWdlcyBvbnRvIHRvcGljcyAo
bmFtZWQgcXVldWVzKTsgdGhlIGFjdHVhbAotcXVldWVzIHRoZW1zZWx2ZXMgYXJlIHByb3ZpZGVk
IGJ5IHRoZSBjYWxsZXIsIGFzIHRoZSBxdWV1ZSdzIGltcGxlbWVudGF0aW9uCi1yZXF1aXJlbWVu
dHMgdmFyaWVzIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBkZXNpcmVkIGNvbmN1cnJlbmN5IG1vZGVs
Ci0obm9uZS90aHJlYWRzL3Byb2Nlc3NlcykuCi0KLUluIG9yZGVyIGZvciBzaGFyZWQtbm90aGlu
ZyBtZXNzYWdpbmcgYmV0d2VlbiBwcm9jZXNzaW5nIHRvIGJlIHBvc3NpYmxlLAotTWVzc2FnZXMg
bXVzdCBiZSBwaWNrbGFibGUuCi0KLVRoZSBtb2R1bGUgZGVmaW5lcyBvbmUgaW50ZXJmYWNlIGFu
ZCB0d28gY2xhc3Nlcy4gQ2FsbGVycyBvZiB0aGlzIHBhY2thZ2UKLW11c3QgaW1wbGVtZW50IHRo
ZSBCcm9rZXJDbGllbnQgaW50ZXJmYWNlLCBhbmQgbW9zdCBjYWxsZXJzIHdpbGwgY3JlYXRlCi1f
QnJva2VyQ29ubmVjdGlvbnMgYXMgd2VsbCBhcyBCcm9rZXJzLgotCi1UaGUgY2xhc3NlcyByZWxh
dGUgdG8gZWFjaCBvdGhlciBhczoKLQotICAgIEJyb2tlckNsaWVudCAgIC0tLS0tLT4gICAgX0Jy
b2tlckNvbm5lY3Rpb24KLSAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgfAotICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB2Ci0gICAgICAgICBcLS0tLS0tLS0tLS0t
LS0tLSAgICAgIF9Ccm9rZXIKLQotKFRoZSBCcm9rZXJDbGllbnQgbmV2ZXIgY2FsbHMgYnJva2Vy
IGRpcmVjdGx5IGFmdGVyIGl0IGlzIGNyZWF0ZWQsIG9ubHkKLV9Ccm9rZXJDb25uZWN0aW9uLiAg
X0Jyb2tlckNvbm5lY3Rpb24gcGFzc2VzIGEgcmVmZXJlbmNlIHRvIEJyb2tlckNsaWVudCB0bwot
X0Jyb2tlciwgYW5kIF9Ccm9rZXIgb25seSBpbnZva2VzIHRoYXQgcmVmZXJlbmNlLCBuZXZlciB0
YWxraW5nIGRpcmVjdGx5IHRvCi1Ccm9rZXJDb25uZWN0aW9uKS4KLSIiIgorIiIiTW9kdWxlIGZv
ciBoYW5kbGluZyBtZXNzYWdlcyBhbmQgY29uY3VycmVuY3kgZm9yIHJ1bi13ZWJraXQtdGVzdHMu
IiIiCiAKIGltcG9ydCBjUGlja2xlCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG11bHRpcHJvY2Vz
c2luZwotaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKIGltcG9ydCBRdWV1ZQogaW1wb3J0IHN5
cworaW1wb3J0IHRpbWUKIGltcG9ydCB0cmFjZWJhY2sKIAogCitmcm9tIHdlYmtpdHB5LmNvbW1v
bi5ob3N0IGltcG9ydCBIb3N0CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHN0
YWNrX3V0aWxzCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy52aWV3cyBpbXBvcnQgbWV0ZXJl
ZF9zdHJlYW0KIAogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKKyMgbWVz
c2FnZSB0eXBlcworKENPTlRST0wsIERBVEEpID0gKCdjb250cm9sJywgJ2RhdGEnKQorCitkZWYg
Z2V0KGhvc3QsIGNhbGxlciwgd29ya2VyX2ZhY3RvcnksIG1heF93b3JrZXJzLCB3b3JrZXJfc3Rh
cnR1cF9kZWxheV9zZWNzPTApOgorICAgIHJldHVybiBfTWFuYWdlcihob3N0LCBjYWxsZXIsIHdv
cmtlcl9mYWN0b3J5LCBtYXhfd29ya2Vycywgd29ya2VyX3N0YXJ0dXBfZGVsYXlfc2VjcykKKwor
CitjbGFzcyBXb3JrZXJFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICAiIiJSYWlzZWQgd2hlbiB3
ZSByZWNlaXZlIGFuIHVuZXhwZWN0ZWQvdW5rbm93biBleGNlcHRpb24gZnJvbSBhIHdvcmtlci4i
IiIKKyAgICBwYXNzCisKKworY2xhc3MgX01hbmFnZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgaG9zdCwgY2FsbGVyLCB3b3JrZXJfZmFjdG9yeSwgbWF4X3dvcmtlcnMsIHdvcmtl
cl9zdGFydHVwX2RlbGF5X3NlY3MsIGxvZ2dlcj1Ob25lKToKKyAgICAgICAgc2VsZi5faG9zdCA9
IGhvc3QKKyAgICAgICAgc2VsZi5fY2FsbGVyID0gY2FsbGVyCisgICAgICAgIHNlbGYuX3dvcmtl
cl9mYWN0b3J5ID0gd29ya2VyX2ZhY3RvcnkKKyAgICAgICAgc2VsZi5fbWF4X3dvcmtlcnMgPSBt
YXhfd29ya2VycworICAgICAgICBzZWxmLl93b3JrZXJfc3RhcnR1cF9kZWxheV9zZWNzID0gd29y
a2VyX3N0YXJ0dXBfZGVsYXlfc2VjcworICAgICAgICBzZWxmLl9sb2dnZXIgPSBsb2dnZXIgb3Ig
bG9nZ2luZy5yb290CisgICAgICAgIHNlbGYuX25hbWUgPSBjYWxsZXIubmFtZSgpCisgICAgICAg
IHNlbGYuX3J1bm5pbmdfaW5saW5lID0gKHNlbGYuX21heF93b3JrZXJzID09IDEpCisgICAgICAg
IGlmIHNlbGYuX3J1bm5pbmdfaW5saW5lOgorICAgICAgICAgICAgc2VsZi5fbWVzc2FnZXNfdG9f
d29ya2VyID0gUXVldWUuUXVldWUoKQorICAgICAgICAgICAgc2VsZi5fbWVzc2FnZXNfdG9fbWFu
YWdlciA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX21l
c3NhZ2VzX3RvX3dvcmtlciA9IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCisgICAgICAgICAgICBz
ZWxmLl9tZXNzYWdlc190b19tYW5hZ2VyID0gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKCkKKyAgICAg
ICAgc2VsZi5fd29ya2VycyA9IFtdCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgZm9y
IGkgaW4gcmFuZ2Uoc2VsZi5fbWF4X3dvcmtlcnMpOgorICAgICAgICAgICAgc2VsZi5fcG9zdChD
T05UUk9MLCAnZG9uZScpCisKKyAgICBkZWYgcnVuX3NoYXJkcyhzZWxmLCBhbGxfc2hhcmRzKToK
KyAgICAgICAgZm9yIHNoYXJkIGluIGFsbF9zaGFyZHM6CisgICAgICAgICAgICBzZWxmLnBvc3Qo
J3Rlc3RfbGlzdCcsIHNoYXJkLm5hbWUsIHNoYXJkLnRlc3RfaW5wdXRzKQorICAgICAgICBzZWxm
LnN0b3AoKQorICAgICAgICBzZWxmLndhaXQoKQorCisgICAgZGVmIHBvc3Qoc2VsZiwgbmFtZSwg
KmFyZ3MpOgorICAgICAgICBzZWxmLl9wb3N0KERBVEEsIG5hbWUsICphcmdzKQorCisgICAgZGVm
IHdhaXQoc2VsZik6CisgICAgICAgIHNlbGYuX3N0YXJ0X3dvcmtlcnMoKQorICAgICAgICBpZiBz
ZWxmLl9ydW5uaW5nX2lubGluZToKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcnNbMF0ucnVuKCkK
KyAgICAgICAgICAgIHNlbGYuX2xvb3AoYmxvY2s9RmFsc2UpCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBzZWxmLl9sb29wKGJsb2NrPVRydWUpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6Cisg
ICAgICAgIGZvciB3b3JrZXIgaW4gc2VsZi5fd29ya2VyczoKKyAgICAgICAgICAgIHdvcmtlci50
ZXJtaW5hdGUoKQorICAgICAgICAgICAgc2VsZi5fd29ya2VycyA9IFtdCisgICAgICAgIGlmIG5v
dCBzZWxmLl9ydW5uaW5nX2lubGluZToKKyAgICAgICAgICAgIHNlbGYuX21lc3NhZ2VzX3RvX3dv
cmtlci5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9tZXNzYWdlc190b193b3JrZXIgPSBOb25l
CisgICAgICAgICAgICBzZWxmLl9tZXNzYWdlc190b19tYW5hZ2VyLmNsb3NlKCkKKyAgICAgICAg
ICAgIHNlbGYuX21lc3NhZ2VzX3RvX21hbmFnZXIgPSBOb25lCisKKyAgICBkZWYgX3Bvc3Qoc2Vs
Ziwga2luZCwgbWVzc2FnZV9uYW1lLCAqYXJncyk6CisgICAgICAgIG1lc3NhZ2UgPSB7J2tpbmQn
OiBraW5kLCAnbmFtZSc6IG1lc3NhZ2VfbmFtZSwgJ3NvdXJjZSc6IHNlbGYuX25hbWUsICcqYXJn
cyc6IGFyZ3N9CisgICAgICAgIHNlbGYuX21lc3NhZ2VzX3RvX3dvcmtlci5wdXQobWVzc2FnZSkK
KworICAgIGRlZiBfc3RhcnRfd29ya2VycyhzZWxmKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxm
Ll93b3JrZXJzCisgICAgICAgIHNlbGYuX3dvcmtlcnNfc3RvcHBlZCA9IHNldCgpCisgICAgICAg
IGhvc3QgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX3J1bm5pbmdfaW5saW5lIG9yIHNlbGYuX2Nh
bl9waWNrbGUoaG9zdCk6CisgICAgICAgICAgICBob3N0ID0gc2VsZi5faG9zdAorCisgICAgICAg
IGZvciB3b3JrZXJfbnVtYmVyIGluIHJhbmdlKHNlbGYuX21heF93b3JrZXJzKToKKyAgICAgICAg
ICAgIHdvcmtlciA9IF9Xb3JrZXIoaG9zdCwgc2VsZi5fbWVzc2FnZXNfdG9fbWFuYWdlciwgc2Vs
Zi5fbWVzc2FnZXNfdG9fd29ya2VyLCBzZWxmLl93b3JrZXJfZmFjdG9yeSwgd29ya2VyX251bWJl
cikKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcnMuYXBwZW5kKHdvcmtlcikKKyAgICAgICAgICAg
IGlmIHNlbGYuX3J1bm5pbmdfaW5saW5lOgorICAgICAgICAgICAgICAgIHdvcmtlci5tYW5hZ2Vy
ID0gc2VsZgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB3b3JrZXIuc3RhcnQo
KQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3dvcmtlcl9zdGFydHVwX2RlbGF5X3NlY3M6Cisg
ICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoc2VsZi5fd29ya2VyX3N0YXJ0dXBfZGVsYXlf
c2VjcykKKworICAgIGRlZiBfY2FuX3BpY2tsZShzZWxmLCBob3N0KToKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgY1BpY2tsZS5kdW1wcyhzZWxmLl9ob3N0KQorICAgICAgICAgICAgcmV0dXJu
IFRydWUKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxz
ZQogCi0jCi0jIFRvcGljIG5hbWVzIGZvciBNYW5hZ2VyIDwtPiBXb3JrZXIgbWVzc2FnaW5nCi0j
Ci1NQU5BR0VSX1RPUElDID0gJ21hbmFnZXJzJwotQU5ZX1dPUktFUl9UT1BJQyA9ICd3b3JrZXJz
JwotCi0KLWRlZiBnZXQobWF4X3dvcmtlcnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKToKLSAgICAi
IiJSZXR1cm4gYSBjb25uZWN0aW9uIHRvIGEgbWFuYWdlci93b3JrZXIgbWVzc2FnZV9icm9rZXIK
LQotICAgIEFyZ3M6Ci0gICAgICAgIG1heF93b3JrZXJzIC0gbWF4ICMgb2Ygd29ya2VycyB0byBy
dW4gY29uY3VycmVudGx5LgotICAgICAgICBjbGllbnQgLSBCcm9rZXJDbGllbnQgaW1wbGVtZW50
YXRpb24gdG8gZGlzcGF0Y2gKLSAgICAgICAgICAgIHJlcGxpZXMgdG8uCi0gICAgICAgIHdvcmtl
cl9jbGFzcyAtIHR5cGUgb2Ygd29ya2VycyB0byBjcmVhdGUuIFRoaXMgY2xhc3Mgc2hvdWxkIG92
ZXJyaWRlCi0gICAgICAgICAgICB0aGUgbWV0aG9kcyBpbiBBYnN0cmFjdFdvcmtlci4KLSAgICBS
ZXR1cm5zOgotICAgICAgICBBIGhhbmRsZSB0byBhbiBvYmplY3QgdGhhdCB3aWxsIHRhbGsgdG8g
YSBtZXNzYWdlIGJyb2tlciBjb25maWd1cmVkCi0gICAgICAgIGZvciB0aGUgbm9ybWFsIG1hbmFn
ZXIvd29ya2VyIGNvbW11bmljYXRpb24uIiIiCi0gICAgaWYgbWF4X3dvcmtlcnMgPT0gMToKLSAg
ICAgICAgcXVldWVfY2xhc3MgPSBRdWV1ZS5RdWV1ZQotICAgICAgICBtYW5hZ2VyX2NsYXNzID0g
X0lubGluZU1hbmFnZXIKLSAgICBlbHNlOgotICAgICAgICBxdWV1ZV9jbGFzcyA9IG11bHRpcHJv
Y2Vzc2luZy5RdWV1ZQotICAgICAgICBtYW5hZ2VyX2NsYXNzID0gX011bHRpUHJvY2Vzc01hbmFn
ZXIKLQotICAgIGJyb2tlciA9IF9Ccm9rZXIocXVldWVfY2xhc3MpCi0gICAgcmV0dXJuIG1hbmFn
ZXJfY2xhc3MoYnJva2VyLCBjbGllbnQsIHdvcmtlcl9jbGFzcykKLQotCi1jbGFzcyBCcm9rZXJD
bGllbnQob2JqZWN0KToKLSAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIC8gaW50ZXJmYWNlIHRo
YXQgYWxsIG1lc3NhZ2UgYnJva2VyIGNsaWVudHMgbXVzdAotICAgIGltcGxlbWVudC4gSW4gYWRk
aXRpb24gdG8gdGhlIG1ldGhvZHMgYmVsb3csIGJ5IGNvbnZlbnRpb24gY2xpZW50cwotICAgIGlt
cGxlbWVudCByb3V0aW5lcyBvZiB0aGUgc2lnbmF0dXJlIHR5cGUKLQotICAgICAgICBoYW5kbGVf
TUVTU0FHRV9OQU1FKHNlbGYsIHNyYywgLi4uKToKLQotICAgIHdoZXJlIE1FU1NBR0VfTkFNRSBt
YXRjaGVzIHRoZSBzdHJpbmcgcGFzc2VkIHRvIHBvc3RfbWVzc2FnZSgpLCBhbmQKLSAgICBzcmMg
aW5kaWNhdGVzIHRoZSBuYW1lIG9mIHRoZSBzZW5kZXIuIElmIHRoZSBtZXNzYWdlIGNvbnRhaW5z
IHZhbHVlcyBpbgotICAgIHRoZSBtZXNzYWdlIGJvZHksIHRob3NlIHdpbGwgYmUgcHJvdmlkZWQg
YXMgb3B0cGFyYW1zLiIiIgotCi0gICAgZGVmIGlzX2RvbmUoc2VsZik6Ci0gICAgICAgICIiIkNh
bGxlZCBmcm9tIGluc2lkZSBydW5fbWVzc2FnZV9sb29wKCkgdG8gaW5kaWNhdGUgd2hldGhlciB0
byBleGl0LiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBkZWYg
bmFtZShzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIGEgbmFtZSB0aGF0IGlkZW50aWZpZXMgdGhl
IGNsaWVudC4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0KLWNsYXNz
IF9Ccm9rZXIob2JqZWN0KToKLSAgICAiIiJCcm9rZXJzIHByb3ZpZGUgdGhlIGJhc2ljIG1vZGVs
IG9mIGEgc2V0IG9mIHRvcGljcy4gQ2xpZW50cyBjYW4gcG9zdCBhCi0gICAgbWVzc2FnZSB0byBh
bnkgdG9waWMgdXNpbmcgcG9zdF9tZXNzYWdlKCksIGFuZCBjYW4gcHJvY2VzcyBtZXNzYWdlcyBv
biBvbmUKLSAgICB0b3BpYyBhdCBhIHRpbWUgdXNpbmcgcnVuX21lc3NhZ2VfbG9vcCgpLiIiIgot
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHF1ZXVlX21ha2VyKToKLSAgICAgICAgIiIiQXJnczoK
LSAgICAgICAgICAgIHF1ZXVlX21ha2VyOiBhIGZhY3RvcnkgbWV0aG9kIHRoYXQgcmV0dXJucyBv
YmplY3RzIGltcGxlbWVudGluZyBhCi0gICAgICAgICAgICAgICAgUXVldWUgaW50ZXJmYWNlIChw
dXQoKS9nZXQoKSkuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLl9xdWV1ZV9tYWtlciA9IHF1
ZXVlX21ha2VyCi0gICAgICAgIHNlbGYuX3RvcGljcyA9IHt9Ci0KLSAgICBkZWYgX19kZWxfXyhz
ZWxmKToKLSAgICAgICAgc2VsZi5jbGVhbnVwKCkKLQotICAgIGRlZiBjbGVhbnVwKHNlbGYpOgot
ICAgICAgICBmb3IgcXVldWUgaW4gc2VsZi5fdG9waWNzLnZhbHVlcygpOgotICAgICAgICAgICAg
aWYgaGFzYXR0cihxdWV1ZSwgJ2Nsb3NlJyk6Ci0gICAgICAgICAgICAgICAgcXVldWUuY2xvc2Uo
KQotICAgICAgICBzZWxmLl90b3BpY3MgPSB7fQotCi0gICAgZGVmIGFkZF90b3BpYyhzZWxmLCB0
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
ZGVmIGxvYWRzKHN0cmluZ192YWx1ZSk6Ci0gICAgICAgIG9iaiA9IGNQaWNrbGUubG9hZHMoc3Ry
aW5nX3ZhbHVlKQotICAgICAgICBhc3NlcnQoaXNpbnN0YW5jZShvYmosIF9NZXNzYWdlKSkKLSAg
ICAgICAgcmV0dXJuIG9iagotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNyYywgdG9waWNfbmFt
ZSwgbWVzc2FnZV9uYW1lLCBtZXNzYWdlX2FyZ3MpOgotICAgICAgICBzZWxmLnNyYyA9IHNyYwot
ICAgICAgICBzZWxmLnRvcGljX25hbWUgPSB0b3BpY19uYW1lCi0gICAgICAgIHNlbGYubmFtZSA9
IG1lc3NhZ2VfbmFtZQotICAgICAgICBzZWxmLmFyZ3MgPSBtZXNzYWdlX2FyZ3MKLQotICAgIGRl
ZiBkdW1wcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGNQaWNrbGUuZHVtcHMoc2VsZikKLQotICAg
IGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICgiX01lc3NhZ2UoZnJvbT0nJXMn
LCB0b3BpY19uYW1lPSclcycsIG1lc3NhZ2VfbmFtZT0nJXMnKSIgJQotICAgICAgICAgICAgICAg
IChzZWxmLnNyYywgc2VsZi50b3BpY19uYW1lLCBzZWxmLm5hbWUpKQotCi0KLWNsYXNzIF9Ccm9r
ZXJDb25uZWN0aW9uKG9iamVjdCk6Ci0gICAgIiIiX0Jyb2tlckNvbm5lY3Rpb24gcHJvdmlkZXMg
YSBjb25uZWN0aW9uLW9yaWVudGVkIGZhY2FkZSBvbiB0b3Agb2YgYQotICAgIEJyb2tlciwgc28g
dGhhdCBjYWxsZXJzIGRvbid0IGhhdmUgdG8gcmVwZWF0ZWRseSBwYXNzIHRoZSBzYW1lIHRvcGlj
Ci0gICAgbmFtZXMgb3ZlciBhbmQgb3Zlci4iIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBi
cm9rZXIsIGNsaWVudCwgcnVuX3RvcGljLCBwb3N0X3RvcGljKToKLSAgICAgICAgIiIiQ3JlYXRl
IGEgX0Jyb2tlckNvbm5lY3Rpb24gb24gdG9wIG9mIGEgX0Jyb2tlci4gTm90ZSB0aGF0IHRoZSBf
QnJva2VyCi0gICAgICAgIGlzIHBhc3NlZCBpbiByYXRoZXIgdGhhbiBjcmVhdGVkIHNvIHRoYXQg
YSBzaW5nbGUgX0Jyb2tlciBjYW4gYmUgdXNlZAotICAgICAgICBieSBtdWx0aXBsZSBfQnJva2Vy
Q29ubmVjdGlvbnMuIiIiCi0gICAgICAgIHNlbGYuX2Jyb2tlciA9IGJyb2tlcgotICAgICAgICBz
ZWxmLl9jbGllbnQgPSBjbGllbnQKLSAgICAgICAgc2VsZi5fcG9zdF90b3BpYyA9IHBvc3RfdG9w
aWMKLSAgICAgICAgc2VsZi5fcnVuX3RvcGljID0gcnVuX3RvcGljCi0gICAgICAgIGJyb2tlci5h
ZGRfdG9waWMocnVuX3RvcGljKQotICAgICAgICBicm9rZXIuYWRkX3RvcGljKHBvc3RfdG9waWMp
Ci0KLSAgICBkZWYgY2xlYW51cChzZWxmKToKLSAgICAgICAgc2VsZi5fYnJva2VyLmNsZWFudXAo
KQotICAgICAgICBzZWxmLl9icm9rZXIgPSBOb25lCi0KLSAgICBkZWYgcnVuX21lc3NhZ2VfbG9v
cChzZWxmLCBkZWxheV9zZWNzPU5vbmUpOgotICAgICAgICBzZWxmLl9icm9rZXIucnVuX21lc3Nh
Z2VfbG9vcChzZWxmLl9ydW5fdG9waWMsIHNlbGYuX2NsaWVudCwgZGVsYXlfc2VjcykKLQotICAg
IGRlZiBwb3N0X21lc3NhZ2Uoc2VsZiwgbWVzc2FnZV9uYW1lLCAqbWVzc2FnZV9hcmdzKToKLSAg
ICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZShzZWxmLl9jbGllbnQsIHNlbGYuX3Bvc3Rf
dG9waWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9uYW1lLCAq
bWVzc2FnZV9hcmdzKQotCi0gICAgZGVmIHJhaXNlX2V4Y2VwdGlvbihzZWxmLCBleGNfaW5mbyk6
Ci0gICAgICAgICMgU2luY2UgdHJhY2ViYWNrcyBhcmVuJ3QgcGlja2xhYmxlLCBzZW5kIHRoZSBl
eHRyYWN0ZWQgc3RhY2sgaW5zdGVhZC4KLSAgICAgICAgZXhjZXB0aW9uX3R5cGUsIGV4Y2VwdGlv
bl92YWx1ZSwgZXhjZXB0aW9uX3RyYWNlYmFjayA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgIHN0
YWNrX3V0aWxzLmxvZ190cmFjZWJhY2soX2xvZy5kZWJ1ZywgZXhjZXB0aW9uX3RyYWNlYmFjaykK
LSAgICAgICAgc3RhY2sgPSB0cmFjZWJhY2suZXh0cmFjdF90YihleGNlcHRpb25fdHJhY2ViYWNr
KQotICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKHNlbGYuX2NsaWVudCwgc2VsZi5f
cG9zdF90b3BpYywgJ2V4Y2VwdGlvbicsIGV4Y2VwdGlvbl90eXBlLCBleGNlcHRpb25fdmFsdWUs
IHN0YWNrKQotCi0KLWNsYXNzIEFic3RyYWN0V29ya2VyKEJyb2tlckNsaWVudCk6Ci0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIHdvcmtlcl9jb25uZWN0aW9uLCB3b3JrZXJfYXJndW1lbnRzPU5vbmUp
OgotICAgICAgICAiIiJUaGUgY29uc3RydWN0b3Igc2hvdWxkIGJlIHVzZWQgdG8gZG8gYW55IHNp
bXBsZSBpbml0aWFsaXphdGlvbgotICAgICAgICBuZWNlc3NhcnksIGJ1dCBzaG91bGQgbm90IGRv
IGFueXRoaW5nIHRoYXQgY3JlYXRlcyBkYXRhIHN0cnVjdHVyZXMKLSAgICAgICAgdGhhdCBjYW5u
b3QgYmUgUGlja2xlZCBvciBzZW50IGFjcm9zcyBwcm9jZXNzZXMgKGxpa2Ugb3BlbmluZwotICAg
ICAgICBmaWxlcyBvciBzb2NrZXRzKS4gQ29tcGxleCBpbml0aWFsaXphdGlvbiBzaG91bGQgYmUg
ZG9uZSBhdCB0aGUKLSAgICAgICAgc3RhcnQgb2YgdGhlIHJ1bigpIGNhbGwuCi0KLSAgICAgICAg
QXJnczoKLSAgICAgICAgICAgIHdvcmtlcl9jb25uZWN0aW9uIC0gaGFuZGxlIHRvIHRoZSBfQnJv
a2VyQ29ubmVjdGlvbiBvYmplY3QgY3JlYXRpbmcKLSAgICAgICAgICAgICAgICB0aGUgd29ya2Vy
IGFuZCB0aGF0IGNhbiBiZSB1c2VkIGZvciBtZXNzYWdpbmcuCi0gICAgICAgICAgICB3b3JrZXJf
YXJndW1lbnRzIC0gKG9wdGlvbmFsLCBQaWNrbGFibGUpIG9iamVjdCBwYXNzZWQgdG8gdGhlIHdv
cmtlciBmcm9tIHRoZSBtYW5hZ2VyIiIiCi0gICAgICAgIEJyb2tlckNsaWVudC5fX2luaXRfXyhz
ZWxmKQotICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbiA9IHdvcmtlcl9jb25uZWN0aW9u
Ci0gICAgICAgIHNlbGYuX25hbWUgPSAnd29ya2VyJworICAgIGRlZiBfbG9vcChzZWxmLCBibG9j
ayk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAg
ICAgaWYgbGVuKHNlbGYuX3dvcmtlcnNfc3RvcHBlZCkgPT0gbGVuKHNlbGYuX3dvcmtlcnMpOgor
ICAgICAgICAgICAgICAgICAgICBibG9jayA9IEZhbHNlCisgICAgICAgICAgICAgICAgbWVzc2Fn
ZSA9IHNlbGYuX21lc3NhZ2VzX3RvX21hbmFnZXIuZ2V0KGJsb2NrKQorICAgICAgICAgICAgICAg
IGZvciByZWNvcmQgaW4gbWVzc2FnZVsnbG9ncyddOgorICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9sb2dnZXIuaGFuZGxlKHJlY29yZCkKKyAgICAgICAgICAgICAgICBpZiBtZXNzYWdlWydraW5k
J10gPT0gREFUQToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FsbGVyLmhhbmRsZShtZXNz
YWdlWyduYW1lJ10sIG1lc3NhZ2VbJ3NvdXJjZSddLCAqbWVzc2FnZVsnKmFyZ3MnXSkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRy
KHNlbGYsICdfaGFuZGxlXycgKyBtZXNzYWdlWyduYW1lJ10pCisgICAgICAgICAgICAgICAgYXNz
ZXJ0IG1ldGhvZCwgJ2JhZCBtZXNzYWdlICVzJyAlIHJlcHIobWVzc2FnZSkKKyAgICAgICAgICAg
ICAgICBtZXRob2QobWVzc2FnZVsnc291cmNlJ10sICptZXNzYWdlWycqYXJncyddKQorICAgICAg
ICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgX2hhbmRs
ZV93b3JrZXJfZG9uZShzZWxmLCBzb3VyY2UpOgorICAgICAgICBzZWxmLl93b3JrZXJzX3N0b3Bw
ZWQuYWRkKHNvdXJjZSkKKworICAgIGRlZiBfaGFuZGxlX3dvcmtlcl9leGNlcHRpb24oc2VsZiwg
c291cmNlLCBleGNlcHRpb25fdHlwZSwgZXhjZXB0aW9uX3ZhbHVlLCBzdGFjayk6CisgICAgICAg
IGlmIGV4Y2VwdGlvbl90eXBlID09IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgcmFp
c2UgZXhjZXB0aW9uX3R5cGUoZXhjZXB0aW9uX3ZhbHVlKQorICAgICAgICBfbG9nLmVycm9yKCIl
cyByYWlzZWQgJXMoJyVzJyk6IiAlICgKKyAgICAgICAgICAgICAgICAgICBzb3VyY2UsIGV4Y2Vw
dGlvbl92YWx1ZS5fX2NsYXNzX18uX19uYW1lX18sIHN0cihleGNlcHRpb25fdmFsdWUpKSkKKyAg
ICAgICAgcmFpc2UgV29ya2VyRXhjZXB0aW9uKHN0cihleGNlcHRpb25fdmFsdWUpKQorCisKK2Ns
YXNzIF9Xb3JrZXIobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBob3N0LCBtZXNzYWdlc190b19tYW5hZ2VyLCBtZXNzYWdlc190b193b3JrZXIsIHdvcmtl
cl9mYWN0b3J5LCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgc3VwZXIoX1dvcmtlciwgc2VsZiku
X19pbml0X18oKQorICAgICAgICBzZWxmLl9ob3N0ID0gaG9zdAorICAgICAgICBzZWxmLl9tZXNz
YWdlc190b19tYW5hZ2VyID0gbWVzc2FnZXNfdG9fbWFuYWdlcgorICAgICAgICBzZWxmLl9tZXNz
YWdlc190b193b3JrZXIgPSBtZXNzYWdlc190b193b3JrZXIKKyAgICAgICAgc2VsZi5fd29ya2Vy
ID0gd29ya2VyX2ZhY3Rvcnkoc2VsZiwgd29ya2VyX251bWJlcikKKyAgICAgICAgc2VsZi5tYW5h
Z2VyID0gTm9uZQogICAgICAgICBzZWxmLl9kb25lID0gRmFsc2UKLSAgICAgICAgc2VsZi5fY2Fu
Y2VsZWQgPSBGYWxzZQotCi0gICAgZGVmIG5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxm
Ll9uYW1lCi0KLSAgICBkZWYgaXNfZG9uZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2Rv
bmUgb3Igc2VsZi5fY2FuY2VsZWQKLQotICAgIGRlZiBzdG9wX2hhbmRsaW5nX21lc3NhZ2VzKHNl
bGYpOgotICAgICAgICBzZWxmLl9kb25lID0gVHJ1ZQorICAgICAgICBzZWxmLl9sb2dfbWVzc2Fn
ZXMgPSBbXQorICAgICAgICBzZWxmLl9sb2dnZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2xvZ19o
YW5kbGVyID0gTm9uZQorCisgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgaWYgc2Vs
Zi5fd29ya2VyOgorICAgICAgICAgICAgc2VsZi5fd29ya2VyLnN0b3AoKQorICAgICAgICAgICAg
c2VsZi5fd29ya2VyID0gTm9uZQorICAgICAgICBpZiBzZWxmLmlzX2FsaXZlKCk6CisgICAgICAg
ICAgICBzdXBlcihfV29ya2VyLCBzZWxmKS50ZXJtaW5hdGUoKQorCisgICAgZGVmIF9jbG9zZShz
ZWxmKToKKyAgICAgICAgaWYgc2VsZi5fbG9nX2hhbmRsZXIgYW5kIHNlbGYuX2xvZ2dlcjoKKyAg
ICAgICAgICAgIHNlbGYuX2xvZ2dlci5yZW1vdmVIYW5kbGVyKHNlbGYuX2xvZ19oYW5kbGVyKQor
ICAgICAgICBzZWxmLl9sb2dfaGFuZGxlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fbG9nZ2VyID0g
Tm9uZQogCiAgICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgIiIiQ2FsbGJhY2sgZm9yIHRoZSB3
b3JrZXIgdG8gc3RhcnQgZXhlY3V0aW5nLiBUeXBpY2FsbHkgZG9lcyBhbnkKLSAgICAgICAgcmVt
YWluaW5nIGluaXRpYWxpemF0aW9uIGFuZCB0aGVuIGNhbGxzIGJyb2tlcl9jb25uZWN0aW9uLnJ1
bl9tZXNzYWdlX2xvb3AoKS4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX2hvc3Q6CisgICAgICAg
ICAgICBzZWxmLl9ob3N0ID0gSG9zdCgpCisgICAgICAgIGlmIG5vdCBzZWxmLm1hbmFnZXI6Cisg
ICAgICAgICAgICBzZWxmLl9zZXRfdXBfbG9nZ2luZygpCisKKyAgICAgICAgd29ya2VyID0gc2Vs
Zi5fd29ya2VyCisgICAgICAgIHNlbGYuX3dvcmtlcl9uYW1lID0gd29ya2VyLm5hbWUoKQogICAg
ICAgICBleGNlcHRpb25fbXNnID0gIiIKKyAgICAgICAgX2xvZy5kZWJ1ZygiJXMgc3RhcnRpbmci
ICUgc2VsZi5fd29ya2VyX25hbWUpCisgICAgICAgIHdvcmtlci5zdGFydChzZWxmLl9ob3N0KQog
CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnJ1bl9t
ZXNzYWdlX2xvb3AoKQotICAgICAgICAgICAgaWYgbm90IHNlbGYuaXNfZG9uZSgpOgotICAgICAg
ICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCIlczogcmFuIG91dCBvZiBtZXNzYWdlcyBp
biB3b3JrZXIgcXVldWUuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUg
c2VsZi5fbmFtZSkKLSAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAg
ICAgd2hpbGUgbm90IHNlbGYuX2RvbmU6CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IHNlbGYu
X21lc3NhZ2VzX3RvX3dvcmtlci5nZXQoKQorICAgICAgICAgICAgICAgIGlmIG1lc3NhZ2VbJ2tp
bmQnXSA9PSBEQVRBOgorICAgICAgICAgICAgICAgICAgICB3b3JrZXIuaGFuZGxlKG1lc3NhZ2Vb
J25hbWUnXSwgbWVzc2FnZVsnc291cmNlJ10sICptZXNzYWdlWycqYXJncyddKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGFzc2VydCBtZXNzYWdlWyduYW1l
J10gPT0gJ2RvbmUnLCAnYmFkIG1lc3NhZ2UgJXMnICUgcmVwcihtZXNzYWdlKQorICAgICAgICAg
ICAgICAgIHNlbGYuX2RvbmUgPSBUcnVlCisgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKKyAg
ICAgICAgICAgIGFzc2VydCBzZWxmLl9kb25lLCAnJXM6IHJhbiBvdXQgb2YgbWVzc2FnZXMgaW4g
d29ya2VyIHF1ZXVlLicgJSBzZWxmLl93b3JrZXJfbmFtZQorICAgICAgICBleGNlcHQgS2V5Ym9h
cmRJbnRlcnJ1cHQsIGU6CiAgICAgICAgICAgICBleGNlcHRpb25fbXNnID0gIiwgaW50ZXJydXB0
ZWQiCi0gICAgICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5yYWlzZV9leGNlcHRpb24o
c3lzLmV4Y19pbmZvKCkpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIGV4Y2VwdGlvbl9t
c2cgPSAiLCBleGNlcHRpb24gcmFpc2VkIgotICAgICAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5l
Y3Rpb24ucmFpc2VfZXhjZXB0aW9uKHN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgaWYgbm90
IHNlbGYubWFuYWdlcjoKKyAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ3dvcmtlciBleGNl
cHRpb24nKQorICAgICAgICAgICAgICAgIHNlbGYuX3JhaXNlKHN5cy5leGNfaW5mbygpKQorICAg
ICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAg
IGV4Y2VwdGlvbl9tc2cgPSAiLCBleGNlcHRpb24gcmFpc2VkOiAlcyIgJSBzdHIoZSkKKyAgICAg
ICAgICAgIGlmIG5vdCBzZWxmLm1hbmFnZXI6CisgICAgICAgICAgICAgICAgX2xvZy53YXJuaW5n
KCd3b3JrZXIgZXhjZXB0aW9uJykKKyAgICAgICAgICAgICAgICBzZWxmLl9yYWlzZShzeXMuZXhj
X2luZm8oKSkKKyAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAg
ICBfbG9nLmRlYnVnKCIlcyBkb25lIHdpdGggbWVzc2FnZSBsb29wJXMiICUgKHNlbGYuX25hbWUs
IGV4Y2VwdGlvbl9tc2cpKQotCi0gICAgZGVmIGNhbmNlbChzZWxmKToKLSAgICAgICAgIiIiQ2Fs
bGVkIHdoZW4gcG9zc2libGUgdG8gaW5kaWNhdGUgdG8gdGhlIHdvcmtlciB0byBzdG9wIHByb2Nl
c3NpbmcKLSAgICAgICAgbWVzc2FnZXMgYW5kIHNodXQgZG93bi4gTm90ZSB0aGF0IHdvcmtlcnMg
bWF5IGJlIHN0b3BwZWQgd2l0aG91dCB0aGlzCi0gICAgICAgIG1ldGhvZCBiZWluZyBjYWxsZWQs
IHNvIGNsaWVudHMgc2hvdWxkIG5vdCByZWx5IHNvbGVseSBvbiB0aGlzLiIiIgotICAgICAgICBz
ZWxmLl9jYW5jZWxlZCA9IFRydWUKLQotCi1jbGFzcyBfTWFuYWdlckNvbm5lY3Rpb24oX0Jyb2tl
ckNvbm5lY3Rpb24pOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIGNsaWVudCwgd29y
a2VyX2NsYXNzKToKLSAgICAgICAgIiIiQmFzZSBpbml0aWFsaXphdGlvbiBmb3IgYWxsIE1hbmFn
ZXIgb2JqZWN0cy4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgICAgYnJva2VyOiBoYW5kbGUg
dG8gdGhlIG1lc3NhZ2VfYnJva2VyIG9iamVjdAotICAgICAgICAgICAgY2xpZW50OiBjYWxsYmFj
ayBvYmplY3QgKHRoZSBjYWxsZXIpCi0gICAgICAgICAgICB3b3JrZXJfY2xhc3M6IGNsYXNzIG9i
amVjdCB0byB1c2UgdG8gY3JlYXRlIHdvcmtlcnMuCi0gICAgICAgICIiIgotICAgICAgICBfQnJv
a2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIGNsaWVudCwgTUFOQUdFUl9UT1BJ
QywgQU5ZX1dPUktFUl9UT1BJQykKLSAgICAgICAgc2VsZi5fd29ya2VyX2NsYXNzID0gd29ya2Vy
X2NsYXNzCi0KLSAgICBkZWYgc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9hcmd1bWVudHM9Tm9u
ZSk6Ci0gICAgICAgICIiIlN0YXJ0cyBhIG5ldyB3b3JrZXIuCi0KLSAgICAgICAgQXJnczoKLSAg
ICAgICAgICAgIHdvcmtlcl9hcmd1bWVudHMgLSBhbiBvcHRpb25hbCBQaWNrbGFibGUgb2JqZWN0
IHRoYXQgaXMgcGFzc2VkIHRvIHRoZSB3b3JrZXIgY29uc3RydWN0b3IKLSAgICAgICAgIiIiCi0g
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotCi1jbGFzcyBfSW5saW5lTWFuYWdl
cihfTWFuYWdlckNvbm5lY3Rpb24pOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIGNs
aWVudCwgd29ya2VyX2NsYXNzKToKLSAgICAgICAgX01hbmFnZXJDb25uZWN0aW9uLl9faW5pdF9f
KHNlbGYsIGJyb2tlciwgY2xpZW50LCB3b3JrZXJfY2xhc3MpCi0gICAgICAgIHNlbGYuX2lubGlu
ZV93b3JrZXIgPSBOb25lCisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBleGl0aW5nJXMiICUg
KHNlbGYuX3dvcmtlcl9uYW1lLCBleGNlcHRpb25fbXNnKSkKKyAgICAgICAgICAgIHdvcmtlci5z
dG9wKCkKKyAgICAgICAgICAgIHNlbGYuX3Bvc3QoQ09OVFJPTCwgJ3dvcmtlcl9kb25lJykKKyAg
ICAgICAgICAgIHNlbGYuX2Nsb3NlKCkKIAotICAgIGRlZiBzdGFydF93b3JrZXIoc2VsZiwgd29y
a2VyX2FyZ3VtZW50cz1Ob25lKToKLSAgICAgICAgc2VsZi5faW5saW5lX3dvcmtlciA9IF9Jbmxp
bmVXb3JrZXJDb25uZWN0aW9uKHNlbGYuX2Jyb2tlciwKLSAgICAgICAgICAgIHNlbGYuX2NsaWVu
dCwgc2VsZi5fd29ya2VyX2NsYXNzLCB3b3JrZXJfYXJndW1lbnRzKQotICAgICAgICByZXR1cm4g
c2VsZi5faW5saW5lX3dvcmtlcgorICAgIGRlZiBwb3N0KHNlbGYsIG5hbWUsICphcmdzKToKKyAg
ICAgICAgc2VsZi5fcG9zdChEQVRBLCBuYW1lLCAqYXJncykKIAotICAgIGRlZiBzZXRfaW5saW5l
X2FyZ3VtZW50cyhzZWxmLCBhcmd1bWVudHM9Tm9uZSk6Ci0gICAgICAgICMgTm90ZSB0aGF0IHRo
aXMgbWV0aG9kIG9ubHkgZXhpc3RzIGhlcmUsIGFuZCBub3Qgb24gYWxsCi0gICAgICAgICMgTWFu
YWdlckNvbm5lY3Rpb25zOyBjYWxsaW5nIHRoaXMgbWV0aG9kIG9uIGEgTXVsdGlQcm9jZXNzTWFu
YWdlcgotICAgICAgICAjIHdpbGwgZGVsaWJlcmF0ZWx5IHJlc3VsdCBpbiBhIHJ1bnRpbWUgZXJy
b3IuCi0gICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIuc2V0X2lubGluZV9hcmd1bWVudHMoYXJn
dW1lbnRzKQorICAgIGRlZiB5aWVsZF90b19jYWxsZXIoc2VsZik6CisgICAgICAgIGlmIHNlbGYu
bWFuYWdlcjoKKyAgICAgICAgICAgIHNlbGYubWFuYWdlci5fbG9vcChibG9jaz1GYWxzZSkKIAot
ICAgIGRlZiBydW5fbWVzc2FnZV9sb29wKHNlbGYsIGRlbGF5X3NlY3M9Tm9uZSk6Ci0gICAgICAg
ICMgTm90ZSB0aGF0IGRlbGF5X3NlY3MgaXMgaWdub3JlZCBpbiB0aGlzIGNhc2Ugc2luY2Ugd2Ug
Y2FuJ3QgZWFzaWx5Ci0gICAgICAgICMgaW1wbGVtZW50IGl0LgotICAgICAgICBzZWxmLl9pbmxp
bmVfd29ya2VyLnJ1bigpCi0gICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fYWxsX3BlbmRpbmcoTUFO
QUdFUl9UT1BJQywgc2VsZi5fY2xpZW50KQorICAgIGRlZiBfcG9zdChzZWxmLCBraW5kLCBuYW1l
LCAqYXJncyk6CisgICAgICAgIGxvZ19tZXNzYWdlcyA9IHNlbGYuX2xvZ19tZXNzYWdlcworICAg
ICAgICBzZWxmLl9sb2dfbWVzc2FnZXMgPSBbXQorICAgICAgICBtZXNzYWdlID0geydraW5kJzog
a2luZCwgJ25hbWUnOiBuYW1lLCAnc291cmNlJzogc2VsZi5fd29ya2VyLm5hbWUoKSwgJyphcmdz
JzogYXJncywgJ2xvZ3MnOiBsb2dfbWVzc2FnZXN9CisgICAgICAgIHNlbGYuX21lc3NhZ2VzX3Rv
X21hbmFnZXIucHV0KG1lc3NhZ2UpCiAKKyAgICBkZWYgX3JhaXNlKHNlbGYsIGV4Y19pbmZvKToK
KyAgICAgICAgIyBTaW5jZSB0cmFjZWJhY2tzIGFyZW4ndCBwaWNrbGFibGUsIHNlbmQgdGhlIGV4
dHJhY3RlZCBzdGFjayBpbnN0ZWFkLgorICAgICAgICBleGNlcHRpb25fdHlwZSwgZXhjZXB0aW9u
X3ZhbHVlLCBleGNlcHRpb25fdHJhY2ViYWNrID0gZXhjX2luZm8KKyAgICAgICAgc3RhY2tfdXRp
bHMubG9nX3RyYWNlYmFjayhfbG9nLmRlYnVnLCBleGNlcHRpb25fdHJhY2ViYWNrKQorICAgICAg
ICBzdGFjayA9IHRyYWNlYmFjay5leHRyYWN0X3RiKGV4Y2VwdGlvbl90cmFjZWJhY2spCisgICAg
ICAgIHNlbGYuX3Bvc3QoQ09OVFJPTCwgJ3dvcmtlcl9leGNlcHRpb24nLCBleGNlcHRpb25fdHlw
ZSwgZXhjZXB0aW9uX3ZhbHVlLCBzdGFjaykKIAotY2xhc3MgX011bHRpUHJvY2Vzc01hbmFnZXIo
X01hbmFnZXJDb25uZWN0aW9uKToKLSAgICBkZWYgc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9h
cmd1bWVudHM9Tm9uZSk6Ci0gICAgICAgIHdvcmtlcl9jb25uZWN0aW9uID0gX011bHRpUHJvY2Vz
c1dvcmtlckNvbm5lY3Rpb24oc2VsZi5fYnJva2VyLAotICAgICAgICAgICAgc2VsZi5fd29ya2Vy
X2NsYXNzLCB3b3JrZXJfYXJndW1lbnRzKQotICAgICAgICB3b3JrZXJfY29ubmVjdGlvbi5zdGFy
dCgpCi0gICAgICAgIHJldHVybiB3b3JrZXJfY29ubmVjdGlvbgotCi0KLWNsYXNzIF9Xb3JrZXJD
b25uZWN0aW9uKF9Ccm9rZXJDb25uZWN0aW9uKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYnJv
a2VyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9hcmd1bWVudHM9Tm9uZSk6Ci0gICAgICAgIHNlbGYu
X2NsaWVudCA9IHdvcmtlcl9jbGFzcyhzZWxmLCB3b3JrZXJfYXJndW1lbnRzKQotICAgICAgICBf
QnJva2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIHNlbGYuX2NsaWVudCwgQU5Z
X1dPUktFUl9UT1BJQywgTUFOQUdFUl9UT1BJQykKLQotICAgIGRlZiBuYW1lKHNlbGYpOgotICAg
ICAgICByZXR1cm4gc2VsZi5fY2xpZW50Lm5hbWUoKQotCi0gICAgZGVmIGNhbmNlbChzZWxmKToK
LSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgZGVmIGlzX2FsaXZlKHNl
bGYpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBkZWYgam9pbihz
ZWxmLCB0aW1lb3V0KToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAg
ZGVmIHlpZWxkX3RvX2Jyb2tlcihzZWxmKToKLSAgICAgICAgcGFzcwotCi0KLWNsYXNzIF9Jbmxp
bmVXb3JrZXJDb25uZWN0aW9uKF9Xb3JrZXJDb25uZWN0aW9uKToKLSAgICBkZWYgX19pbml0X18o
c2VsZiwgYnJva2VyLCBtYW5hZ2VyX2NsaWVudCwgd29ya2VyX2NsYXNzLCB3b3JrZXJfYXJndW1l
bnRzKToKLSAgICAgICAgX1dvcmtlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyLCB3
b3JrZXJfY2xhc3MsIHdvcmtlcl9hcmd1bWVudHMpCi0gICAgICAgIHNlbGYuX2FsaXZlID0gRmFs
c2UKLSAgICAgICAgc2VsZi5fbWFuYWdlcl9jbGllbnQgPSBtYW5hZ2VyX2NsaWVudAotCi0gICAg
ZGVmIGNhbmNlbChzZWxmKToKLSAgICAgICAgc2VsZi5fY2xpZW50LmNhbmNlbCgpCi0KLSAgICBk
ZWYgaXNfYWxpdmUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9hbGl2ZQotCi0gICAgZGVm
IGpvaW4oc2VsZiwgdGltZW91dCk6Ci0gICAgICAgIGFzc2VydCBub3Qgc2VsZi5fYWxpdmUKLQot
ICAgIGRlZiBzZXRfaW5saW5lX2FyZ3VtZW50cyhzZWxmLCBhcmd1bWVudHMpOgotICAgICAgICBz
ZWxmLl9jbGllbnQuc2V0X2lubGluZV9hcmd1bWVudHMoYXJndW1lbnRzKQotCi0gICAgZGVmIHJ1
bihzZWxmKToKLSAgICAgICAgc2VsZi5fYWxpdmUgPSBUcnVlCi0gICAgICAgIHRyeToKLSAgICAg
ICAgICAgIHNlbGYuX2NsaWVudC5ydW4oKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAg
c2VsZi5fYWxpdmUgPSBGYWxzZQotCi0gICAgZGVmIHlpZWxkX3RvX2Jyb2tlcihzZWxmKToKLSAg
ICAgICAgc2VsZi5fYnJva2VyLnJ1bl9hbGxfcGVuZGluZyhNQU5BR0VSX1RPUElDLCBzZWxmLl9t
YW5hZ2VyX2NsaWVudCkKLQotICAgIGRlZiByYWlzZV9leGNlcHRpb24oc2VsZiwgZXhjX2luZm8p
OgotICAgICAgICAjIFNpbmNlIHRoZSB3b3JrZXIgaXMgaW4gdGhlIHNhbWUgcHJvY2VzcyBhcyB0
aGUgbWFuYWdlciwgd2UgY2FuCi0gICAgICAgICMgcmFpc2UgdGhlIGV4Y2VwdGlvbiBkaXJlY3Rs
eSwgcmF0aGVyIHRoYW4gaGF2aW5nIHRvIHNlbmQgaXQgdGhyb3VnaAotICAgICAgICAjIHRoZSBx
dWV1ZS4gVGhpcyBhbGxvd3MgdXMgdG8gcHJlc2VydmUgdGhlIHRyYWNlYmFjay4KLSAgICAgICAg
cmFpc2UgZXhjX2luZm9bMF0sIGV4Y19pbmZvWzFdLCBleGNfaW5mb1syXQotCi0KLWNsYXNzIF9Q
cm9jZXNzKG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwg
d29ya2VyX2Nvbm5lY3Rpb24sIGNsaWVudCk6Ci0gICAgICAgIG11bHRpcHJvY2Vzc2luZy5Qcm9j
ZXNzLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uID0gd29y
a2VyX2Nvbm5lY3Rpb24KLSAgICAgICAgc2VsZi5fY2xpZW50ID0gY2xpZW50Ci0KLSAgICBkZWYg
cnVuKHNlbGYpOgotICAgICAgICBzZWxmLl9jbGllbnQucnVuKCkKLQorICAgIGRlZiBfc2V0X3Vw
X2xvZ2dpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCkKIAotY2xhc3MgX011bHRpUHJvY2Vzc1dvcmtlckNvbm5lY3Rpb24oX1dvcmtlckNvbm5lY3Rp
b24pOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHdvcmtlcl9jbGFzcywgd29ya2Vy
X2FyZ3VtZW50cyk6Ci0gICAgICAgIF9Xb3JrZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJy
b2tlciwgd29ya2VyX2NsYXNzLCB3b3JrZXJfYXJndW1lbnRzKQotICAgICAgICBzZWxmLl9wcm9j
ID0gX1Byb2Nlc3Moc2VsZiwgc2VsZi5fY2xpZW50KQorICAgICAgICAjIFRoZSB1bml4IG11bHRp
cHJvY2Vzc2luZyBpbXBsZW1lbnRhdGlvbiBjbG9uZXMgdGhlIE1ldGVyZWRTdHJlYW0gbG9nIGhh
bmRsZXIKKyAgICAgICAgIyBpbnRvIHRoZSBjaGlsZCBwcm9jZXNzLCBzbyB3ZSBuZWVkIHRvIHJl
bW92ZSBpdCB0byBhdm9pZCBkdXBsaWNhdGUgbG9nZ2luZy4KKyAgICAgICAgZm9yIGggaW4gc2Vs
Zi5fbG9nZ2VyLmhhbmRsZXJzOgorICAgICAgICAgICAgIyBsb2cgaGFuZGxlcnMgZG9uJ3QgaGF2
ZSBuYW1lcyB1bnRpbCBweXRob24gMi43LgorICAgICAgICAgICAgaWYgZ2V0YXR0cihoLCAnbmFt
ZScsICcnKSA9PSBtZXRlcmVkX3N0cmVhbS5MT0dfSEFORExFUl9OQU1FOgorICAgICAgICAgICAg
ICAgIHNlbGYuX2xvZ2dlci5yZW1vdmVIYW5kbGVyKGgpCisgICAgICAgICAgICAgICAgYnJlYWsK
IAotICAgIGRlZiBjYW5jZWwoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9wcm9jLnRlcm1p
bmF0ZSgpCisgICAgICAgIHNlbGYuX2xvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorICAg
ICAgICBzZWxmLl9sb2dfaGFuZGxlciA9IF9Xb3JrZXJMb2dIYW5kbGVyKHNlbGYpCisgICAgICAg
IHNlbGYuX2xvZ2dlci5hZGRIYW5kbGVyKHNlbGYuX2xvZ19oYW5kbGVyKQogCi0gICAgZGVmIGlz
X2FsaXZlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fcHJvYy5pc19hbGl2ZSgpCiAKLSAg
ICBkZWYgam9pbihzZWxmLCB0aW1lb3V0KToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2Muam9p
bih0aW1lb3V0KQorY2xhc3MgX1dvcmtlckxvZ0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgd29ya2VyKToKKyAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9f
aW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX3dvcmtlciA9IHdvcmtlcgogCi0gICAgZGVmIHN0
YXJ0KHNlbGYpOgotICAgICAgICBzZWxmLl9wcm9jLnN0YXJ0KCkKKyAgICBkZWYgZW1pdChzZWxm
LCByZWNvcmQpOgorICAgICAgICBzZWxmLl93b3JrZXIuX2xvZ19tZXNzYWdlcy5hcHBlbmQocmVj
b3JkKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29u
dHJvbGxlcnMvbWFuYWdlcl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl93b3JrZXJfYnJva2Vy
X3VuaXR0ZXN0LnB5CmluZGV4IDA0NjQyNTY2NDRmZmZlNDQ5MzRlYWJiMTNkZDE5ZGYxMDM2Yjc1
YzAuLjYwMzhlNmEzZmVmODJhMDdmY2JmMDlkYzczN2M3M2JhYjhhNjQxYzMgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJf
d29ya2VyX2Jyb2tlcl91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXJfdW5pdHRlc3QucHkK
QEAgLTI2LDIzMSArMjYsMyBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotaW1w
b3J0IG9wdHBhcnNlCi1pbXBvcnQgUXVldWUKLWltcG9ydCBzeXMKLWltcG9ydCB1bml0dGVzdAot
Ci1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IG91dHB1dGNhcHR1cmUKLWZyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLmNvbnRyb2xsZXJzIGltcG9ydCBtYW5hZ2VyX3dvcmtlcl9i
cm9rZXIKLQotCi0jIEluIG9yZGVyIHRvIHJlbGlhYmx5IGNvbnRyb2wgd2hlbiBjaGlsZCB3b3Jr
ZXJzIGFyZSBzdGFydGluZyBhbmQgc3RvcHBpbmcsCi0jIHdlIHVzZSBhIHBhaXIgb2YgZ2xvYmFs
IHZhcmlhYmxlcyB0byBob2xkIHF1ZXVlcyB1c2VkIGZvciBtZXNzYWdpbmcuIElkZWFsbHkKLSMg
d2Ugd291bGRuJ3QgbmVlZCBnbG9iYWxzLCBidXQgd2UgY2FuJ3QgcGFzcyB0aGVzZSB0aHJvdWdo
IGEgbGV4aWNhbCBjbG9zdXJlCi0jIGJlY2F1c2UgdGhvc2UgY2FuJ3QgYmUgUGlja2xlZCBhbmQg
c2VudCB0byBhIHN1YnByb2Nlc3MsIGFuZCB3ZSdkIHByZWZlciBub3QKLSMgdG8gaGF2ZSB0byBw
YXNzIGV4dHJhIGFyZ3VtZW50cyB0byB0aGUgd29ya2VyIGluIHRoZSBzdGFydF93b3JrZXIoKSBj
YWxsLgotc3RhcnRpbmdfcXVldWUgPSBOb25lCi1zdG9wcGluZ19xdWV1ZSA9IE5vbmUKLQotCi1X
T1JLRVJfTkFNRSA9ICdUZXN0V29ya2VyJwotCi0KLWRlZiBtYWtlX2Jyb2tlcihtYW5hZ2VyLCBt
YXhfd29ya2Vycywgc3RhcnRfcXVldWU9Tm9uZSwgc3RvcF9xdWV1ZT1Ob25lKToKLSAgICBnbG9i
YWwgc3RhcnRpbmdfcXVldWUKLSAgICBnbG9iYWwgc3RvcHBpbmdfcXVldWUKLSAgICBzdGFydGlu
Z19xdWV1ZSA9IHN0YXJ0X3F1ZXVlCi0gICAgc3RvcHBpbmdfcXVldWUgPSBzdG9wX3F1ZXVlCi0g
ICAgcmV0dXJuIG1hbmFnZXJfd29ya2VyX2Jyb2tlci5nZXQobWF4X3dvcmtlcnMsIG1hbmFnZXIs
IF9UZXN0V29ya2VyKQotCi0KLWNsYXNzIF9UZXN0V29ya2VyKG1hbmFnZXJfd29ya2VyX2Jyb2tl
ci5BYnN0cmFjdFdvcmtlcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHdvcmtlcl9jb25uZWN0
aW9uLCB3b3JrZXJfYXJndW1lbnRzPU5vbmUpOgotICAgICAgICBzdXBlcihfVGVzdFdvcmtlciwg
c2VsZikuX19pbml0X18od29ya2VyX2Nvbm5lY3Rpb24pCi0gICAgICAgIHNlbGYuX25hbWUgPSBX
T1JLRVJfTkFNRQotICAgICAgICBzZWxmLl90aGluZ190b19ncmVldCA9ICdldmVyeWJvZHknCi0g
ICAgICAgIHNlbGYuX3N0YXJ0aW5nX3F1ZXVlID0gc3RhcnRpbmdfcXVldWUKLSAgICAgICAgc2Vs
Zi5fc3RvcHBpbmdfcXVldWUgPSBzdG9wcGluZ19xdWV1ZQotCi0gICAgZGVmIHNldF9pbmxpbmVf
YXJndW1lbnRzKHNlbGYsIHRoaW5nX3RvX2dyZWV0KToKLSAgICAgICAgc2VsZi5fdGhpbmdfdG9f
Z3JlZXQgPSB0aGluZ190b19ncmVldAotCi0gICAgZGVmIGhhbmRsZV9zdG9wKHNlbGYsIHNyYyk6
Ci0gICAgICAgIHNlbGYuc3RvcF9oYW5kbGluZ19tZXNzYWdlcygpCi0KLSAgICBkZWYgaGFuZGxl
X3Rlc3Qoc2VsZiwgc3JjLCBhbl9pbnQsIGFfc3RyKToKLSAgICAgICAgYXNzZXJ0IGFuX2ludCA9
PSAxCi0gICAgICAgIGFzc2VydCBhX3N0ciA9PSAiaGVsbG8sIHdvcmxkIgotICAgICAgICBzZWxm
Ll93b3JrZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ3Rlc3QnLCAyLCAnaGksICcgKyBzZWxm
Ll90aGluZ190b19ncmVldCkKLQotICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgIGlmIHNlbGYu
X3N0YXJ0aW5nX3F1ZXVlOgotICAgICAgICAgICAgc2VsZi5fc3RhcnRpbmdfcXVldWUucHV0KCcn
KQotCi0gICAgICAgIGlmIHNlbGYuX3N0b3BwaW5nX3F1ZXVlOgotICAgICAgICAgICAgc2VsZi5f
c3RvcHBpbmdfcXVldWUuZ2V0KCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3VwZXIoX1Rl
c3RXb3JrZXIsIHNlbGYpLnJ1bigpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxm
Ll93b3JrZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ2RvbmUnKQotCi0KLWNsYXNzIEZ1bmN0
aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X2dldF9faW5saW5lKHNl
bGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUobWFrZV9icm9rZXIoc2VsZiwgMSkgaXMgbm90
IE5vbmUpCi0KLSAgICBkZWYgdGVzdF9nZXRfX3Byb2Nlc3NlcyhzZWxmKToKLSAgICAgICAgIyBU
aGlzIHRlc3Qgc29tZXRpbWVzIGZhaWxzIG9uIFdpbmRvd3MuIFNlZSA8aHR0cDovL3dlYmtpdC5v
cmcvYi81NTA4Nz4uCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2N5Z3dpbicsICd3aW4z
MicpOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYWtlX2Jy
b2tlcihzZWxmLCAyKSBpcyBub3QgTm9uZSkKLQotCi1jbGFzcyBfVGVzdHNNaXhpbihvYmplY3Qp
OgotICAgICIiIk1peGluIGNsYXNzIHRoYXQgaW1wbGVtZW50cyBhIHNlcmllcyBvZiB0ZXN0cyB0
byBlbmZvcmNlIHRoZQotICAgIGNvbnRyYWN0IGFsbCBpbXBsZW1lbnRhdGlvbnMgbXVzdCBmb2xs
b3cuIiIiCi0KLSAgICBkZWYgbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuICdUZXN0ZXJNYW5h
Z2VyJwotCi0gICAgZGVmIGlzX2RvbmUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9kb25l
Ci0KLSAgICBkZWYgaGFuZGxlX2RvbmUoc2VsZiwgc3JjKToKLSAgICAgICAgc2VsZi5fZG9uZSA9
IFRydWUKLQotICAgIGRlZiBoYW5kbGVfdGVzdChzZWxmLCBzcmMsIGFuX2ludCwgYV9zdHIpOgot
ICAgICAgICBzZWxmLl9hbl9pbnQgPSBhbl9pbnQKLSAgICAgICAgc2VsZi5fYV9zdHIgPSBhX3N0
cgotCi0gICAgZGVmIGhhbmRsZV9leGNlcHRpb24oc2VsZiwgc3JjLCBleGNlcHRpb25fdHlwZSwg
ZXhjZXB0aW9uX3ZhbHVlLCBzdGFjayk6Ci0gICAgICAgIHJhaXNlIGV4Y2VwdGlvbl90eXBlKGV4
Y2VwdGlvbl92YWx1ZSkKLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5fYW5f
aW50ID0gTm9uZQotICAgICAgICBzZWxmLl9hX3N0ciA9IE5vbmUKLSAgICAgICAgc2VsZi5fYnJv
a2VyID0gTm9uZQotICAgICAgICBzZWxmLl9kb25lID0gRmFsc2UKLSAgICAgICAgc2VsZi5fZXhj
ZXB0aW9uID0gTm9uZQotICAgICAgICBzZWxmLl9tYXhfd29ya2VycyA9IE5vbmUKLQotICAgIGRl
ZiBtYWtlX2Jyb2tlcihzZWxmLCBzdGFydGluZ19xdWV1ZT1Ob25lLCBzdG9wcGluZ19xdWV1ZT1O
b25lKToKLSAgICAgICAgc2VsZi5fYnJva2VyID0gbWFrZV9icm9rZXIoc2VsZiwgc2VsZi5fbWF4
X3dvcmtlcnMsIHN0YXJ0aW5nX3F1ZXVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdG9wcGluZ19xdWV1ZSkKLQotICAgIGRlZiB0ZXN0X25hbWUoc2VsZik6Ci0gICAgICAg
IHNlbGYubWFrZV9icm9rZXIoKQotICAgICAgICB3b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRf
d29ya2VyKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMod29ya2VyLm5hbWUoKSwgV09SS0VS
X05BTUUpCi0gICAgICAgIHdvcmtlci5jYW5jZWwoKQotICAgICAgICB3b3JrZXIuam9pbigwLjEp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod29ya2VyLmlzX2FsaXZlKCkpCi0gICAgICAgIHNl
bGYuX2Jyb2tlci5jbGVhbnVwKCkKLQotICAgIGRlZiB0ZXN0X2NhbmNlbChzZWxmKToKLSAgICAg
ICAgc2VsZi5tYWtlX2Jyb2tlcigpCi0gICAgICAgIHdvcmtlciA9IHNlbGYuX2Jyb2tlci5zdGFy
dF93b3JrZXIoKQotICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCd0ZXN0JywgMSwg
J2hlbGxvLCB3b3JsZCcpCi0gICAgICAgIHdvcmtlci5jYW5jZWwoKQotICAgICAgICB3b3JrZXIu
am9pbigwLjEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod29ya2VyLmlzX2FsaXZlKCkpCi0g
ICAgICAgIHNlbGYuX2Jyb2tlci5jbGVhbnVwKCkKLQotICAgIGRlZiB0ZXN0X2RvbmUoc2VsZik6
Ci0gICAgICAgIHNlbGYubWFrZV9icm9rZXIoKQotICAgICAgICB3b3JrZXIgPSBzZWxmLl9icm9r
ZXIuc3RhcnRfd29ya2VyKCkKLSAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgndGVz
dCcsIDEsICdoZWxsbywgd29ybGQnKQotICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdl
KCdzdG9wJykKLSAgICAgICAgc2VsZi5fYnJva2VyLnJ1bl9tZXNzYWdlX2xvb3AoKQotICAgICAg
ICB3b3JrZXIuam9pbigwLjUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod29ya2VyLmlzX2Fs
aXZlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmlzX2RvbmUoKSkKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzZWxmLl9hbl9pbnQsIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5fYV9zdHIsICdoaSwgZXZlcnlib2R5JykKLSAgICAgICAgc2VsZi5fYnJva2VyLmNs
ZWFudXAoKQotCi0gICAgZGVmIHRlc3RfdW5rbm93bl9tZXNzYWdlKHNlbGYpOgotICAgICAgICBz
ZWxmLm1ha2VfYnJva2VyKCkKLSAgICAgICAgd29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dv
cmtlcigpCi0gICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3Vua25vd24nKQotICAg
ICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9icm9rZXIucnVuX21lc3NhZ2VfbG9vcCgpCi0g
ICAgICAgICAgICBzZWxmLmZhaWwoKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKLSAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHN0cihlKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICIlczogcmVjZWl2ZWQgbWVzc2FnZSAndW5rbm93bicgaXQgY291bGRuJ3QgaGFu
ZGxlIiAlIFdPUktFUl9OQU1FKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgd29ya2Vy
LmpvaW4oMC41KQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHdvcmtlci5pc19hbGl2ZSgpKQot
ICAgICAgICBzZWxmLl9icm9rZXIuY2xlYW51cCgpCi0KLQotY2xhc3MgSW5saW5lQnJva2VyVGVz
dHMoX1Rlc3RzTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgc2V0VXAoc2VsZik6
Ci0gICAgICAgIF9UZXN0c01peGluLnNldFVwKHNlbGYpCi0gICAgICAgIHNlbGYuX21heF93b3Jr
ZXJzID0gMQotCi0gICAgZGVmIHRlc3RfaW5saW5lX2FyZ3VtZW50cyhzZWxmKToKLSAgICAgICAg
c2VsZi5tYWtlX2Jyb2tlcigpCi0gICAgICAgIHdvcmtlciA9IHNlbGYuX2Jyb2tlci5zdGFydF93
b3JrZXIoKQotICAgICAgICB3b3JrZXIuc2V0X2lubGluZV9hcmd1bWVudHMoJ21lJykKLSAgICAg
ICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgndGVzdCcsIDEsICdoZWxsbywgd29ybGQnKQot
ICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCdzdG9wJykKLSAgICAgICAgc2VsZi5f
YnJva2VyLnJ1bl9tZXNzYWdlX2xvb3AoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxm
Ll9hX3N0ciwgJ2hpLCBtZScpCi0KLQotIyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU0NTIwLgotaWYgc3lzLnBsYXRmb3JtIG5vdCBpbiAoJ2N5Z3dpbics
ICd3aW4zMicpOgotCi0gICAgY2xhc3MgTXVsdGlQcm9jZXNzQnJva2VyVGVzdHMoX1Rlc3RzTWl4
aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAg
ICAgICAgX1Rlc3RzTWl4aW4uc2V0VXAoc2VsZikKLSAgICAgICAgICAgIHNlbGYuX21heF93b3Jr
ZXJzID0gMgotCi0KLWNsYXNzIEludGVyZmFjZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAg
ICMgVGhlc2UgdGVzdHMgbW9zdGx5IGV4aXN0IHRvIHBhY2lmeSBjb3ZlcmFnZS4KLQotICAgICMg
RklYTUU6IFRoZXJlIG11c3QgYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgYW5kIGFsc28gdmVy
aWZ5Ci0gICAgIyB0aGF0IGNsYXNzZXMgZG8gaW1wbGVtZW50IGV2ZXJ5IGFic3RyYWN0IG1ldGhv
ZCBpbiBhbiBpbnRlcmZhY2UuCi0gICAgZGVmIHRlc3RfYnJva2VyY2xpZW50X2lzX2Fic3RyYWN0
KHNlbGYpOgotICAgICAgICAjIFRlc3QgdGhhdCBhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kcyBh
cmUgYWJzdHJhY3QgYW5kIGhhdmUgdGhlCi0gICAgICAgICMgc2lnbmF0dXJlIHdlIGV4cGVjdC4K
LSAgICAgICAgb2JqID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLkJyb2tlckNsaWVudCgpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5pc19kb25lKQot
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmoubmFtZSkK
LQotICAgIGRlZiB0ZXN0X21hbmFnZXJjb25uZWN0aW9uX2lzX2Fic3RyYWN0KHNlbGYpOgotICAg
ICAgICAjIFRlc3QgdGhhdCBhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kcyBhcmUgYWJzdHJhY3Qg
YW5kIGhhdmUgdGhlCi0gICAgICAgICMgc2lnbmF0dXJlIHdlIGV4cGVjdC4KLSAgICAgICAgYnJv
a2VyID0gbWFrZV9icm9rZXIoc2VsZiwgMSkKLSAgICAgICAgb2JqID0gbWFuYWdlcl93b3JrZXJf
YnJva2VyLl9NYW5hZ2VyQ29ubmVjdGlvbihicm9rZXIuX2Jyb2tlciwgc2VsZiwgTm9uZSkKLSAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLnN0YXJ0X3dv
cmtlcikKLQotICAgIGRlZiB0ZXN0X3dvcmtlcmNvbm5lY3Rpb25faXNfYWJzdHJhY3Qoc2VsZik6
Ci0gICAgICAgICMgVGVzdCB0aGF0IGFsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2RzIGFyZSBhYnN0
cmFjdCBhbmQgaGF2ZSB0aGUKLSAgICAgICAgIyBzaWduYXR1cmUgd2UgZXhwZWN0LgotICAgICAg
ICBicm9rZXIgPSBtYWtlX2Jyb2tlcihzZWxmLCAxKQotICAgICAgICBvYmogPSBtYW5hZ2VyX3dv
cmtlcl9icm9rZXIuX1dvcmtlckNvbm5lY3Rpb24oYnJva2VyLl9icm9rZXIsIF9UZXN0V29ya2Vy
LCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBv
YmouY2FuY2VsKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9y
LCBvYmouaXNfYWxpdmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVk
RXJyb3IsIG9iai5qb2luLCBOb25lKQotCi0KLWNsYXNzIE1lc3NhZ2VUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKLSAgICBkZWYgdGVzdF9fbm9fYm9keShzZWxmKToKLSAgICAgICAgbXNnID0gbWFu
YWdlcl93b3JrZXJfYnJva2VyLl9NZXNzYWdlKCdzcmMnLCAndG9waWNfbmFtZScsICdtZXNzYWdl
X25hbWUnLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihtc2cpKQotICAgICAg
ICBzID0gbXNnLmR1bXBzKCkKLSAgICAgICAgbmV3X21zZyA9IG1hbmFnZXJfd29ya2VyX2Jyb2tl
ci5fTWVzc2FnZS5sb2FkcyhzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cubmFt
ZSwgJ21lc3NhZ2VfbmFtZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy5hcmdz
LCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cudG9waWNfbmFtZSwgJ3Rv
cGljX25hbWUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cuc3JjLCAnc3JjJykK
LQotICAgIGRlZiB0ZXN0X19ib2R5KHNlbGYpOgotICAgICAgICBtc2cgPSBtYW5hZ2VyX3dvcmtl
cl9icm9rZXIuX01lc3NhZ2UoJ3NyYycsICd0b3BpY19uYW1lJywgJ21lc3NhZ2VfbmFtZScsICgn
Ym9keScsIDApKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihtc2cpKQotICAgICAgICBz
ID0gbXNnLmR1bXBzKCkKLSAgICAgICAgbmV3X21zZyA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5f
TWVzc2FnZS5sb2FkcyhzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cubmFtZSwg
J21lc3NhZ2VfbmFtZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy5hcmdzLCAo
J2JvZHknLCAwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNnLnRvcGljX25hbWUs
ICd0b3BpY19uYW1lJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNnLnNyYywgJ3Ny
YycpCi0KLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHVuaXR0ZXN0Lm1haW4o
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJv
bGxlcnMvd29ya2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29u
dHJvbGxlcnMvd29ya2VyLnB5CmluZGV4IGQzMjFiNWE0MTVlY2NiNGU4NWQ0MTg5MzI2MTlhOWUw
ZDI3NjBhNmMuLjg4MzE2N2QzZTE5ZWI1ZjIxNjk2OTE5ZGY5YmM4NGQwYmMzYTMzYzIgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3dv
cmtlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9s
bGVycy93b3JrZXIucHkKQEAgLTI5LDEyMCArMjksNzcgQEAKICIiIkhhbmRsZSBtZXNzYWdlcyBm
cm9tIHRoZSBNYW5hZ2VyIGFuZCBleGVjdXRlcyBhY3R1YWwgdGVzdHMuIiIiCiAKIGltcG9ydCBs
b2dnaW5nCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0
aW1lCiAKLWZyb20gd2Via2l0cHkuY29tbW9uLmhvc3QgaW1wb3J0IEhvc3QKLWZyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzLmNvbnRyb2xsZXJzIGltcG9ydCBtYW5hZ2VyX3dvcmtlcl9icm9rZXIK
IGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmNvbnRyb2xsZXJzIGltcG9ydCBzaW5nbGVfdGVz
dF9ydW5uZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscyBpbXBvcnQgdGVzdF9l
eHBlY3RhdGlvbnMKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscyBpbXBvcnQgdGVz
dF9yZXN1bHRzCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy52aWV3cyBpbXBvcnQgbWV0ZXJl
ZF9zdHJlYW0KIAogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKIAotY2xh
c3MgV29ya2VyQXJndW1lbnRzKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHdvcmtl
cl9udW1iZXIsIHJlc3VsdHNfZGlyZWN0b3J5LCBvcHRpb25zKToKLSAgICAgICAgc2VsZi53b3Jr
ZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgotICAgICAgICBzZWxmLnJlc3VsdHNfZGlyZWN0b3J5
ID0gcmVzdWx0c19kaXJlY3RvcnkKLSAgICAgICAgc2VsZi5vcHRpb25zID0gb3B0aW9ucworY2xh
c3MgV29ya2VyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNhbGxlciwgd29ya2Vy
X251bWJlciwgcmVzdWx0c19kaXJlY3RvcnksIG9wdGlvbnMpOgorICAgICAgICBzZWxmLl9jYWxs
ZXIgPSBjYWxsZXIKKyAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciA9IHdvcmtlcl9udW1iZXIK
KyAgICAgICAgc2VsZi5fbmFtZSA9ICd3b3JrZXIvJWQnICUgd29ya2VyX251bWJlcgorICAgICAg
ICBzZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSA9IHJlc3VsdHNfZGlyZWN0b3J5CisgICAgICAgIHNl
bGYuX29wdGlvbnMgPSBvcHRpb25zCiAKLQotY2xhc3MgV29ya2VyKG1hbmFnZXJfd29ya2VyX2Jy
b2tlci5BYnN0cmFjdFdvcmtlcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHdvcmtlcl9jb25u
ZWN0aW9uLCB3b3JrZXJfYXJndW1lbnRzKToKLSAgICAgICAgc3VwZXIoV29ya2VyLCBzZWxmKS5f
X2luaXRfXyh3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX2FyZ3VtZW50cykKLSAgICAgICAgc2Vs
Zi5fd29ya2VyX251bWJlciA9IHdvcmtlcl9hcmd1bWVudHMud29ya2VyX251bWJlcgotICAgICAg
ICBzZWxmLl9uYW1lID0gJ3dvcmtlci8lZCcgJSBzZWxmLl93b3JrZXJfbnVtYmVyCi0gICAgICAg
IHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5ID0gd29ya2VyX2FyZ3VtZW50cy5yZXN1bHRzX2RpcmVj
dG9yeQotICAgICAgICBzZWxmLl9vcHRpb25zID0gd29ya2VyX2FyZ3VtZW50cy5vcHRpb25zCisg
ICAgICAgICMgVGhlIHJlbWFpbmluZyBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGluIHNldHVwKCkK
KyAgICAgICAgc2VsZi5faG9zdCA9IE5vbmUKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IE5v
bmUKICAgICAgICAgc2VsZi5fcG9ydCA9IE5vbmUKICAgICAgICAgc2VsZi5fYmF0Y2hfc2l6ZSA9
IE5vbmUKICAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSBOb25lCi0gICAgICAgIHNlbGYuX2Zp
bGVzeXN0ZW0gPSBOb25lCiAgICAgICAgIHNlbGYuX2RyaXZlciA9IE5vbmUKICAgICAgICAgc2Vs
Zi5fdGVzdHNfcnVuX2ZpbGUgPSBOb25lCi0gICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlbmFt
ZSA9IE5vbmUKLSAgICAgICAgc2VsZi5fbG9nX21lc3NhZ2VzID0gW10KLSAgICAgICAgc2VsZi5f
bG9nZ2VyID0gTm9uZQotICAgICAgICBzZWxmLl9sb2dfaGFuZGxlciA9IE5vbmUKIAogICAgIGRl
ZiBfX2RlbF9fKHNlbGYpOgotICAgICAgICBzZWxmLmNsZWFudXAoKQorICAgICAgICBzZWxmLnN0
b3AoKQogCi0gICAgZGVmIHNhZmVfaW5pdChzZWxmKToKLSAgICAgICAgIiIiVGhpcyBtZXRob2Qg
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gaXQgaXMgaXMgc2FmZSBmb3IgdGhlIG1peGluCi0g
ICAgICAgIHRvIGNyZWF0ZSBzdGF0ZSB0aGF0IGNhbid0IGJlIFBpY2tsZWQuCisgICAgZGVmIG5h
bWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCiAKLSAgICAgICAgVGhpcyByb3V0
aW5lIGV4aXN0cyBzbyB0aGF0IHRoZSBtaXhpbiBjYW4gYmUgY3JlYXRlZCBhbmQgdGhlbiBtYXJz
aGFsZWQKLSAgICAgICAgYWNyb3NzIGludG8gYSBjaGlsZCBwcm9jZXNzLiIiIgotICAgICAgICBz
ZWxmLl9maWxlc3lzdGVtID0gc2VsZi5fcG9ydC5ob3N0LmZpbGVzeXN0ZW0KKyAgICBkZWYgc3Rh
cnQoc2VsZiwgaG9zdCk6CisgICAgICAgIHNlbGYuX2hvc3QgPSBob3N0CisgICAgICAgIHNlbGYu
X2ZpbGVzeXN0ZW0gPSBob3N0LmZpbGVzeXN0ZW0KKyAgICAgICAgc2VsZi5fcG9ydCA9IGhvc3Qu
cG9ydF9mYWN0b3J5LmdldChzZWxmLl9vcHRpb25zLnBsYXRmb3JtLCBzZWxmLl9vcHRpb25zKQog
ICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCA9IDAKICAgICAgICAgc2VsZi5fYmF0Y2hfc2l6ZSA9
IHNlbGYuX29wdGlvbnMuYmF0Y2hfc2l6ZSBvciAwCiAgICAgICAgIHRlc3RzX3J1bl9maWxlbmFt
ZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSwgInRlc3Rz
X3J1biVkLnR4dCIgJSBzZWxmLl93b3JrZXJfbnVtYmVyKQogICAgICAgICBzZWxmLl90ZXN0c19y
dW5fZmlsZSA9IHNlbGYuX2ZpbGVzeXN0ZW0ub3Blbl90ZXh0X2ZpbGVfZm9yX3dyaXRpbmcodGVz
dHNfcnVuX2ZpbGVuYW1lKQogCi0gICAgZGVmIF9zZXRfdXBfbG9nZ2luZyhzZWxmKToKLSAgICAg
ICAgc2VsZi5fbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQotCi0gICAgICAgICMgVGhlIHVu
aXggbXVsdGlwcm9jZXNzaW5nIGltcGxlbWVudGF0aW9uIGNsb25lcyB0aGUgTWV0ZXJlZFN0cmVh
bSBsb2cgaGFuZGxlcgotICAgICAgICAjIGludG8gdGhlIGNoaWxkIHByb2Nlc3MsIHNvIHdlIG5l
ZWQgdG8gcmVtb3ZlIGl0IHRvIGF2b2lkIGR1cGxpY2F0ZSBsb2dnaW5nLgotICAgICAgICBmb3Ig
aCBpbiBzZWxmLl9sb2dnZXIuaGFuZGxlcnM6Ci0gICAgICAgICAgICAjIGxvZyBoYW5kbGVycyBk
b24ndCBoYXZlIG5hbWVzIHVudGlsIHB5dGhvbiAyLjcuCi0gICAgICAgICAgICBpZiBnZXRhdHRy
KGgsICduYW1lJywgJycpID09IG1ldGVyZWRfc3RyZWFtLkxPR19IQU5ETEVSX05BTUU6Ci0gICAg
ICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLnJlbW92ZUhhbmRsZXIoaCkKLSAgICAgICAgICAgICAg
ICBicmVhawotCi0gICAgICAgIHNlbGYuX2xvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHIGlm
IHNlbGYuX29wdGlvbnMudmVyYm9zZSBlbHNlIGxvZ2dpbmcuSU5GTykKLSAgICAgICAgc2VsZi5f
bG9nX2hhbmRsZXIgPSBfV29ya2VyTG9nSGFuZGxlcihzZWxmKQotICAgICAgICBzZWxmLl9sb2dn
ZXIuYWRkSGFuZGxlcihzZWxmLl9sb2dfaGFuZGxlcikKLQotICAgIGRlZiBfc2V0X3VwX2hvc3Rf
YW5kX3BvcnQoc2VsZik6Ci0gICAgICAgIG9wdGlvbnMgPSBzZWxmLl9vcHRpb25zCi0gICAgICAg
IGlmIG9wdGlvbnMucGxhdGZvcm0gYW5kICd0ZXN0JyBpbiBvcHRpb25zLnBsYXRmb3JtOgotICAg
ICAgICAgICAgIyBJdCBpcyBsYW1lIHRvIGltcG9ydCBtb2NrcyBpbnRvIHJlYWwgY29kZSwgYnV0
IHRoaXMgYWxsb3dzIHVzIHRvIHVzZSB0aGUgdGVzdCBwb3J0IGluIG11bHRpLXByb2Nlc3MgdGVz
dHMgYXMgd2VsbC4KLSAgICAgICAgICAgIGZyb20gd2Via2l0cHkuY29tbW9uLmhvc3RfbW9jayBp
bXBvcnQgTW9ja0hvc3QKLSAgICAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCi0gICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICBob3N0ID0gSG9zdCgpCi0gICAgICAgIHNlbGYuX3BvcnQgPSBob3N0
LnBvcnRfZmFjdG9yeS5nZXQob3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucykKLQotICAgIGRlZiBz
ZXRfaW5saW5lX2FyZ3VtZW50cyhzZWxmLCBwb3J0KToKLSAgICAgICAgc2VsZi5fcG9ydCA9IHBv
cnQKLQotICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9wb3J0OgotICAg
ICAgICAgICAgIyBXZSBhcmUgcnVubmluZyBpbiBhIGNoaWxkIHByb2Nlc3MgYW5kIG5lZWQgdG8g
aW5pdGlhbGl6ZSB0aGluZ3MuCi0gICAgICAgICAgICBzZWxmLl9zZXRfdXBfbG9nZ2luZygpCi0g
ICAgICAgICAgICBzZWxmLl9zZXRfdXBfaG9zdF9hbmRfcG9ydCgpCi0KLSAgICAgICAgc2VsZi5z
YWZlX2luaXQoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBzdGFy
dGluZyIgJSBzZWxmLl9uYW1lKQotICAgICAgICAgICAgc3VwZXIoV29ya2VyLCBzZWxmKS5ydW4o
KQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5raWxsX2RyaXZlcigpCi0gICAg
ICAgICAgICBfbG9nLmRlYnVnKCIlcyBleGl0aW5nIiAlIHNlbGYuX25hbWUpCi0gICAgICAgICAg
ICBzZWxmLmNsZWFudXAoKQotICAgICAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9z
dF9tZXNzYWdlKCdkb25lJywgc2VsZi5fbG9nX21lc3NhZ2VzKQotCi0gICAgZGVmIGhhbmRsZV90
ZXN0X2xpc3Qoc2VsZiwgc3JjLCBsaXN0X25hbWUsIHRlc3RfbGlzdCk6Ci0gICAgICAgIHN0YXJ0
X3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICBudW1fdGVzdHMgPSAwCi0gICAgICAgIGZvciB0
ZXN0X2lucHV0IGluIHRlc3RfbGlzdDoKLSAgICAgICAgICAgIHNlbGYuX3VwZGF0ZV90ZXN0X2lu
cHV0KHRlc3RfaW5wdXQpCi0gICAgICAgICAgICBzZWxmLl9ydW5fdGVzdCh0ZXN0X2lucHV0KQot
ICAgICAgICAgICAgbnVtX3Rlc3RzICs9IDEKLSAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25u
ZWN0aW9uLnlpZWxkX3RvX2Jyb2tlcigpCi0KLSAgICAgICAgZWxhcHNlZF90aW1lID0gdGltZS50
aW1lKCkgLSBzdGFydF90aW1lCi0gICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnBvc3Rf
bWVzc2FnZSgnZmluaXNoZWRfbGlzdCcsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3Rp
bWUpCi0KLSAgICBkZWYgaGFuZGxlX3N0b3Aoc2VsZiwgc3JjKToKLSAgICAgICAgc2VsZi5zdG9w
X2hhbmRsaW5nX21lc3NhZ2VzKCkKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5f
a2lsbF9kcml2ZXIoKQorICAgICAgICBpZiBzZWxmLl90ZXN0c19ydW5fZmlsZToKKyAgICAgICAg
ICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3Rz
X3J1bl9maWxlID0gTm9uZQorCisgICAgZGVmIGhhbmRsZShzZWxmLCBuYW1lLCBzb3VyY2UsICph
cmdzKToKKyAgICAgICAgaWYgbmFtZSA9PSAndGVzdF9saXN0JzoKKyAgICAgICAgICAgIChsaXN0
X25hbWUsIHRlc3RfbGlzdCkgPSBhcmdzCisgICAgICAgICAgICBzdGFydF90aW1lID0gdGltZS50
aW1lKCkKKyAgICAgICAgICAgIHNlbGYuX2NhbGxlci5wb3N0KCdzdGFydGVkX3Rlc3RfbGlzdCcs
IGxpc3RfbmFtZSkKKyAgICAgICAgICAgIGZvciBudW1fdGVzdHMsIHRlc3RfaW5wdXQgaW4gZW51
bWVyYXRlKHRlc3RfbGlzdCk6CisgICAgICAgICAgICAgICAgc2VsZi5fcnVuX3Rlc3QodGVzdF9p
bnB1dCkKKyAgICAgICAgICAgICAgICBzZWxmLl9jYWxsZXIueWllbGRfdG9fY2FsbGVyKCkKKyAg
ICAgICAgICAgIGVsYXBzZWRfdGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZQorICAgICAg
ICAgICAgc2VsZi5fY2FsbGVyLnBvc3QoJ2ZpbmlzaGVkX3Rlc3RfbGlzdCcsIGxpc3RfbmFtZSwg
bnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYgX3J1bl90ZXN0KHNlbGYsIHRlc3Rf
aW5wdXQpOgorICAgICAgICBzZWxmLl91cGRhdGVfdGVzdF9pbnB1dCh0ZXN0X2lucHV0KQorICAg
ICAgICB0ZXN0X3RpbWVvdXRfc2VjID0gc2VsZi5fdGltZW91dCh0ZXN0X2lucHV0KQorICAgICAg
ICBzdGFydCA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuX2NhbGxlci5wb3N0KCdzdGFydGVk
X3Rlc3QnLCB0ZXN0X2lucHV0LCB0ZXN0X3RpbWVvdXRfc2VjKQorCisgICAgICAgIHJlc3VsdCA9
IHNlbGYuX3J1bl90ZXN0X3dpdGhfdGltZW91dCh0ZXN0X2lucHV0LCB0ZXN0X3RpbWVvdXRfc2Vj
KQorCisgICAgICAgIGVsYXBzZWRfdGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnQKKyAgICAgICAg
c2VsZi5fY2FsbGVyLnBvc3QoJ2ZpbmlzaGVkX3Rlc3QnLCByZXN1bHQsIGVsYXBzZWRfdGltZSkK
KyAgICAgICAgc2VsZi5fY2xlYW5fdXBfYWZ0ZXJfdGVzdCh0ZXN0X2lucHV0LCByZXN1bHQpCiAK
ICAgICBkZWYgX3VwZGF0ZV90ZXN0X2lucHV0KHNlbGYsIHRlc3RfaW5wdXQpOgogICAgICAgICB0
ZXN0X2lucHV0LnJlZmVyZW5jZV9maWxlcyA9IHNlbGYuX3BvcnQucmVmZXJlbmNlX2ZpbGVzKHRl
c3RfaW5wdXQudGVzdF9uYW1lKQpAQCAtMTU2LDMyICsxMTMsOCBAQCBjbGFzcyBXb3JrZXIobWFu
YWdlcl93b3JrZXJfYnJva2VyLkFic3RyYWN0V29ya2VyKToKICAgICAgICAgZWxzZToKICAgICAg
ICAgICAgIHRlc3RfaW5wdXQuc2hvdWxkX3J1bl9waXhlbF90ZXN0ID0gRmFsc2UKIAotICAgIGRl
ZiBfcnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6Ci0gICAgICAgIHRlc3RfdGltZW91dF9zZWMg
PSBzZWxmLnRpbWVvdXQodGVzdF9pbnB1dCkKLSAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQot
ICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ3N0YXJ0ZWRfdGVz
dCcsIHRlc3RfaW5wdXQsIHRlc3RfdGltZW91dF9zZWMpCi0KLSAgICAgICAgcmVzdWx0ID0gc2Vs
Zi5ydW5fdGVzdF93aXRoX3RpbWVvdXQodGVzdF9pbnB1dCwgdGVzdF90aW1lb3V0X3NlYykKLQot
ICAgICAgICBlbGFwc2VkX3RpbWUgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0Ci0gICAgICAgIGxvZ19t
ZXNzYWdlcyA9IHNlbGYuX2xvZ19tZXNzYWdlcwotICAgICAgICBzZWxmLl9sb2dfbWVzc2FnZXMg
PSBbXQotICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ2Zpbmlz
aGVkX3Rlc3QnLCByZXN1bHQsIGVsYXBzZWRfdGltZSwgbG9nX21lc3NhZ2VzKQotCi0gICAgICAg
IHNlbGYuY2xlYW5fdXBfYWZ0ZXJfdGVzdCh0ZXN0X2lucHV0LCByZXN1bHQpCi0KLSAgICBkZWYg
Y2xlYW51cChzZWxmKToKLSAgICAgICAgX2xvZy5kZWJ1ZygiJXMgY2xlYW5pbmcgdXAiICUgc2Vs
Zi5fbmFtZSkKLSAgICAgICAgc2VsZi5raWxsX2RyaXZlcigpCi0gICAgICAgIGlmIHNlbGYuX3Rl
c3RzX3J1bl9maWxlOgotICAgICAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUuY2xvc2UoKQot
ICAgICAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUgPSBOb25lCi0gICAgICAgIGlmIHNlbGYu
X2xvZ19oYW5kbGVyIGFuZCBzZWxmLl9sb2dnZXI6Ci0gICAgICAgICAgICBzZWxmLl9sb2dnZXIu
cmVtb3ZlSGFuZGxlcihzZWxmLl9sb2dfaGFuZGxlcikKLSAgICAgICAgc2VsZi5fbG9nX2hhbmRs
ZXIgPSBOb25lCi0gICAgICAgIHNlbGYuX2xvZ2dlciA9IE5vbmUKIAotICAgIGRlZiB0aW1lb3V0
KHNlbGYsIHRlc3RfaW5wdXQpOgorICAgIGRlZiBfdGltZW91dChzZWxmLCB0ZXN0X2lucHV0KToK
ICAgICAgICAgIiIiQ29tcHV0ZSB0aGUgYXBwcm9wcmlhdGUgdGltZW91dCB2YWx1ZSBmb3IgYSB0
ZXN0LiIiIgogICAgICAgICAjIFRoZSBEdW1wUmVuZGVyVHJlZSB3YXRjaGRvZyB1c2VzIDIuNXgg
dGhlIHRpbWVvdXQ7IHdlIHdhbnQgdG8gYmUKICAgICAgICAgIyBsYXJnZXIgdGhhbiB0aGF0LiBX
ZSBhbHNvIGFkZCBhIGxpdHRsZSBtb3JlIHBhZGRpbmcgaWYgd2UncmUKQEAgLTE5NywxOCArMTMw
LDE4IEBAIGNsYXNzIFdvcmtlcihtYW5hZ2VyX3dvcmtlcl9icm9rZXIuQWJzdHJhY3RXb3JrZXIp
OgogICAgICAgICB0aHJlYWRfdGltZW91dF9zZWMgPSBkcml2ZXJfdGltZW91dF9zZWMgKyB0aHJl
YWRfcGFkZGluZ19zZWMKICAgICAgICAgcmV0dXJuIHRocmVhZF90aW1lb3V0X3NlYwogCi0gICAg
ZGVmIGtpbGxfZHJpdmVyKHNlbGYpOgorICAgIGRlZiBfa2lsbF9kcml2ZXIoc2VsZik6CiAgICAg
ICAgIGlmIHNlbGYuX2RyaXZlcjoKICAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzIGtpbGxpbmcg
ZHJpdmVyIiAlIHNlbGYuX25hbWUpCiAgICAgICAgICAgICBzZWxmLl9kcml2ZXIuc3RvcCgpCiAg
ICAgICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCiAKLSAgICBkZWYgcnVuX3Rlc3Rfd2l0aF90
aW1lb3V0KHNlbGYsIHRlc3RfaW5wdXQsIHRpbWVvdXQpOgorICAgIGRlZiBfcnVuX3Rlc3Rfd2l0
aF90aW1lb3V0KHNlbGYsIHRlc3RfaW5wdXQsIHRpbWVvdXQpOgogICAgICAgICBpZiBzZWxmLl9v
cHRpb25zLnJ1bl9zaW5nbHk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcnVuX3Rlc3RfaW5f
YW5vdGhlcl90aHJlYWQodGVzdF9pbnB1dCwgdGltZW91dCkKICAgICAgICAgcmV0dXJuIHNlbGYu
X3J1bl90ZXN0X2luX3RoaXNfdGhyZWFkKHRlc3RfaW5wdXQpCiAKLSAgICBkZWYgY2xlYW5fdXBf
YWZ0ZXJfdGVzdChzZWxmLCB0ZXN0X2lucHV0LCByZXN1bHQpOgorICAgIGRlZiBfY2xlYW5fdXBf
YWZ0ZXJfdGVzdChzZWxmLCB0ZXN0X2lucHV0LCByZXN1bHQpOgogICAgICAgICBzZWxmLl9iYXRj
aF9jb3VudCArPSAxCiAgICAgICAgIHRlc3RfbmFtZSA9IHRlc3RfaW5wdXQudGVzdF9uYW1lCiAg
ICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLndyaXRlKHRlc3RfbmFtZSArICJcbiIpCkBAIC0y
MTYsNyArMTQ5LDcgQEAgY2xhc3MgV29ya2VyKG1hbmFnZXJfd29ya2VyX2Jyb2tlci5BYnN0cmFj
dFdvcmtlcik6CiAgICAgICAgIGlmIHJlc3VsdC5mYWlsdXJlczoKICAgICAgICAgICAgICMgQ2hl
Y2sgYW5kIGtpbGwgRHVtcFJlbmRlclRyZWUgaWYgd2UgbmVlZCB0by4KICAgICAgICAgICAgIGlm
IGFueShbZi5kcml2ZXJfbmVlZHNfcmVzdGFydCgpIGZvciBmIGluIHJlc3VsdC5mYWlsdXJlc10p
OgotICAgICAgICAgICAgICAgIHNlbGYua2lsbF9kcml2ZXIoKQorICAgICAgICAgICAgICAgIHNl
bGYuX2tpbGxfZHJpdmVyKCkKICAgICAgICAgICAgICAgICAjIFJlc2V0IHRoZSBiYXRjaCBjb3Vu
dCBzaW5jZSB0aGUgc2hlbGwganVzdCBib3VuY2VkLgogICAgICAgICAgICAgICAgIHNlbGYuX2Jh
dGNoX2NvdW50ID0gMAogCkBAIC0yMzAsNyArMTYzLDcgQEAgY2xhc3MgV29ya2VyKG1hbmFnZXJf
d29ya2VyX2Jyb2tlci5BYnN0cmFjdFdvcmtlcik6CiAgICAgICAgICAgICBfbG9nLmRlYnVnKCIl
cyAlcyBwYXNzZWQiICUgKHNlbGYuX25hbWUsIHRlc3RfbmFtZSkpCiAKICAgICAgICAgaWYgc2Vs
Zi5fYmF0Y2hfc2l6ZSA+IDAgYW5kIHNlbGYuX2JhdGNoX2NvdW50ID49IHNlbGYuX2JhdGNoX3Np
emU6Ci0gICAgICAgICAgICBzZWxmLmtpbGxfZHJpdmVyKCkKKyAgICAgICAgICAgIHNlbGYuX2tp
bGxfZHJpdmVyKCkKICAgICAgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0gMAogCiAgICAgZGVm
IF9ydW5fdGVzdF9pbl9hbm90aGVyX3RocmVhZChzZWxmLCB0ZXN0X2lucHV0LCB0aHJlYWRfdGlt
ZW91dF9zZWMpOgpAQCAtMjU2LDcgKzE4OSw3IEBAIGNsYXNzIFdvcmtlcihtYW5hZ2VyX3dvcmtl
cl9icm9rZXIuQWJzdHJhY3RXb3JrZXIpOgogICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0ID0g
Tm9uZQogCiAgICAgICAgICAgICBkZWYgcnVuKHNlbGYpOgotICAgICAgICAgICAgICAgIHNlbGYu
cmVzdWx0ID0gd29ya2VyLnJ1bl9zaW5nbGVfdGVzdChkcml2ZXIsIHRlc3RfaW5wdXQpCisgICAg
ICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSB3b3JrZXIuX3J1bl9zaW5nbGVfdGVzdChkcml2ZXIs
IHRlc3RfaW5wdXQpCiAKICAgICAgICAgdGhyZWFkID0gU2luZ2xlVGVzdFRocmVhZCgpCiAgICAg
ICAgIHRocmVhZC5zdGFydCgpCkBAIC0yODgsMjEgKzIyMSwxNCBAQCBjbGFzcyBXb3JrZXIobWFu
YWdlcl93b3JrZXJfYnJva2VyLkFic3RyYWN0V29ya2VyKToKICAgICAgICAgUmV0dXJuczogYSBU
ZXN0UmVzdWx0IG9iamVjdC4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYuX2RyaXZlciBh
bmQgc2VsZi5fZHJpdmVyLmhhc19jcmFzaGVkKCk6Ci0gICAgICAgICAgICBzZWxmLmtpbGxfZHJp
dmVyKCkKKyAgICAgICAgICAgIHNlbGYuX2tpbGxfZHJpdmVyKCkKICAgICAgICAgaWYgbm90IHNl
bGYuX2RyaXZlcjoKICAgICAgICAgICAgIHNlbGYuX2RyaXZlciA9IHNlbGYuX3BvcnQuY3JlYXRl
X2RyaXZlcihzZWxmLl93b3JrZXJfbnVtYmVyKQotICAgICAgICByZXR1cm4gc2VsZi5ydW5fc2lu
Z2xlX3Rlc3Qoc2VsZi5fZHJpdmVyLCB0ZXN0X2lucHV0KQorICAgICAgICByZXR1cm4gc2VsZi5f
cnVuX3NpbmdsZV90ZXN0KHNlbGYuX2RyaXZlciwgdGVzdF9pbnB1dCkKIAotICAgIGRlZiBydW5f
c2luZ2xlX3Rlc3Qoc2VsZiwgZHJpdmVyLCB0ZXN0X2lucHV0KToKKyAgICBkZWYgX3J1bl9zaW5n
bGVfdGVzdChzZWxmLCBkcml2ZXIsIHRlc3RfaW5wdXQpOgogICAgICAgICByZXR1cm4gc2luZ2xl
X3Rlc3RfcnVubmVyLnJ1bl9zaW5nbGVfdGVzdChzZWxmLl9wb3J0LCBzZWxmLl9vcHRpb25zLAog
ICAgICAgICAgICAgdGVzdF9pbnB1dCwgZHJpdmVyLCBzZWxmLl9uYW1lKQogCiAKLWNsYXNzIF9X
b3JrZXJMb2dIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYs
IHdvcmtlcik6Ci0gICAgICAgIGxvZ2dpbmcuSGFuZGxlci5fX2luaXRfXyhzZWxmKQotICAgICAg
ICBzZWxmLl93b3JrZXIgPSB3b3JrZXIKLSAgICAgICAgc2VsZi5fcGlkID0gb3MuZ2V0cGlkKCkK
IAotICAgIGRlZiBlbWl0KHNlbGYsIHJlY29yZCk6Ci0gICAgICAgIHNlbGYuX3dvcmtlci5fbG9n
X21lc3NhZ2VzLmFwcGVuZCh0dXBsZShbcmVjb3JkLmdldE1lc3NhZ2UoKSwgcmVjb3JkLmNyZWF0
ZWQsIHNlbGYuX3BpZF0pKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvY29udHJvbGxlcnMvd29ya2VyX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvd29ya2VyX3VuaXR0ZXN0LnB5CmluZGV4
IGViYjRlN2E1YmI1YWU2ODc0NzFjYmEzMjAwYTA4YjMxYjU4YjEzNmIuLjI5ODZlZjA3MDEwYjYy
YTQwNmExN2NhMjQ4Mjk2YjA2ZDZkN2RjYjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3dvcmtlcl91bml0dGVzdC5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy93b3JrZXJfdW5p
dHRlc3QucHkKQEAgLTI1LDMwICsyNSwzIEBACiAjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5jb250cm9sbGVycy53b3JrZXIgaW1wb3J0IFdvcmtlciwgV29ya2VyQXJndW1lbnRz
Ci1mcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tPcHRpb25zCi0KLQotY2xh
c3MgRmFrZUNvbm5lY3Rpb24ob2JqZWN0KToKLSAgICBkZWYgcnVuX21lc3NhZ2VfbG9vcChzZWxm
KToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHBvc3RfbWVzc2FnZShzZWxmLCBtZXNzYWdlX25h
bWUsICptZXNzYWdlX2FyZ3MpOgotICAgICAgICBwYXNzCi0KLQotY2xhc3MgV29ya2VyVGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfZGVmYXVsdF9wbGF0Zm9ybV9pbl93b3Jr
ZXIoc2VsZik6Ci0gICAgICAgICMgVGhpcyBjaGVja3MgdGhhdCB3ZSBnb3QgYSBwb3J0IGFuZCBk
aWRuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uCi0gICAgICAgICMgaWYgd2UgZGlkbid0IHNwZWNpZnkg
YSBwb3J0IHdpdGggdGhlIC0tcGxhdGZvcm0gZmxhZy4KLSAgICAgICAgd29ya2VyX2Nvbm5lY3Rp
b24gPSBGYWtlQ29ubmVjdGlvbigpCi0gICAgICAgIHdvcmtlciA9IFdvcmtlcih3b3JrZXJfY29u
bmVjdGlvbiwgV29ya2VyQXJndW1lbnRzKDEsICcvdG1wJywgTW9ja09wdGlvbnMocGxhdGZvcm09
Tm9uZSwgcHJpbnRfb3B0aW9ucz1Ob25lLCB2ZXJib3NlPUZhbHNlLCBiYXRjaF9zaXplPTApKSkK
LSAgICAgICAgd29ya2VyLl9zZXRfdXBfaG9zdF9hbmRfcG9ydCgpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0Tm90RXF1YWxzKHdvcmtlci5fcG9ydCwgTm9uZSkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19t
YWluX18nOgotICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfaW5wdXQucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9pbnB1dC5weQppbmRleCA1YTAxNmY2
MjExNzIzN2U0ZWI2MzhhZTZjNmMwMmQxOGU5N2M5MmZmLi42ZTlhZjNkNjE3YWZhZTFlNzdkOGZh
NzUwZjc3MTdkOWIwOThhYzgwIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9tb2RlbHMvdGVzdF9pbnB1dC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9pbnB1dC5weQpAQCAtNDksNCArNDksNCBAQCBj
bGFzcyBUZXN0SW5wdXQob2JqZWN0KToKICAgICAgICAgc2VsZi5yZWZlcmVuY2VfZmlsZXMgPSBO
b25lCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiVGVzdElucHV0
KCclcycsICVkLCAlcywgJXMpIiAlIChzZWxmLnRlc3RfbmFtZSwgc2VsZi50aW1lb3V0LCBzZWxm
LnNob3VsZF9ydW5fcGl4ZWxfdGVzdHMsIHNlbGYucmVmZXJlbmNlX2ZpbGVzKQorICAgICAgICBy
ZXR1cm4gIlRlc3RJbnB1dCgnJXMnLCAlcywgJXMsICVzKSIgJSAoc2VsZi50ZXN0X25hbWUsIHNl
bGYudGltZW91dCwgc2VsZi5zaG91bGRfcnVuX3BpeGVsX3Rlc3RzLCBzZWxmLnJlZmVyZW5jZV9m
aWxlcykKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvY2hyb21pdW0ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Nocm9taXVtLnB5CmluZGV4IGI1MTAzMDVhMzFlOTQ4NmE2OTQwZDEzMWQyMzY2NDEwY2MxMWFi
N2QuLjg3ZjM4MDIzYzQzZmIwMjQ0NzY5YjlkOTY5NTQ0NzM2YWFjNjJlNTMgMTAwNzU1Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQpA
QCAtMzksNiArMzksNyBAQCBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogCiBmcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IGV4ZWN1dGl2ZQorZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLnBhdGggaW1wb3J0IGN5Z3BhdGgKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVs
cy50ZXN0X2NvbmZpZ3VyYXRpb24gaW1wb3J0IFRlc3RDb25maWd1cmF0aW9uCiBmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy5wb3J0LmJhc2UgaW1wb3J0IFBvcnQsIFZpcnR1YWxUZXN0U3VpdGUK
IGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuZHJpdmVyIGltcG9ydCBEcml2ZXJPdXRw
dXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkKaW5kZXggZDVj
MWUxNGUxZGVmZGU4MjgxOTM2ZjlhOTY3MjUyZjhiMDgxNGI2YS4uZTNmMjYxOTVhZDZmZmI1OWQ0
ZmI1MTAxMTBiOWQyNzNlMTg1YzUzYSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRl
Z3JhdGlvbnRlc3QucHkKQEAgLTgxLDE4ICs4MSwyMiBAQCBkZWYgcGFyc2VfYXJncyhleHRyYV9h
cmdzPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNlLCB0ZXN0c19pbmNsdWRlZD1GYWxzZSwgbmV3
XwogICAgIHJldHVybiBydW5fd2Via2l0X3Rlc3RzLnBhcnNlX2FyZ3MoYXJncykKIAogCi1kZWYg
cGFzc2luZ19ydW4oZXh0cmFfYXJncz1Ob25lLCBwb3J0X29iaj1Ob25lLCByZWNvcmRfcmVzdWx0
cz1GYWxzZSwgdGVzdHNfaW5jbHVkZWQ9RmFsc2UsIGhvc3Q9Tm9uZSk6CitkZWYgcGFzc2luZ19y
dW4oZXh0cmFfYXJncz1Ob25lLCBwb3J0X29iaj1Ob25lLCByZWNvcmRfcmVzdWx0cz1GYWxzZSwg
dGVzdHNfaW5jbHVkZWQ9RmFsc2UsIGhvc3Q9Tm9uZSwgc2hhcmVkX3BvcnQ9VHJ1ZSk6CiAgICAg
b3B0aW9ucywgcGFyc2VkX2FyZ3MgPSBwYXJzZV9hcmdzKGV4dHJhX2FyZ3MsIHJlY29yZF9yZXN1
bHRzLCB0ZXN0c19pbmNsdWRlZCkKICAgICBpZiBub3QgcG9ydF9vYmo6CiAgICAgICAgIGhvc3Qg
PSBob3N0IG9yIE1vY2tIb3N0KCkKICAgICAgICAgcG9ydF9vYmogPSBob3N0LnBvcnRfZmFjdG9y
eS5nZXQocG9ydF9uYW1lPW9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnM9b3B0aW9ucykKKworICAg
IGlmIHNoYXJlZF9wb3J0OgorICAgICAgICBwb3J0X29iai5ob3N0LnBvcnRfZmFjdG9yeS5nZXQg
PSBsYW1iZGEgKmFyZ3MsICoqa3dhcmdzOiBwb3J0X29iagorCiAgICAgYnVpbGRib3Rfb3V0cHV0
ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQogICAgIHJlZ3VsYXJfb3V0cHV0ID0gU3RyaW5nSU8uU3Ry
aW5nSU8oKQogICAgIHJlcyA9IHJ1bl93ZWJraXRfdGVzdHMucnVuKHBvcnRfb2JqLCBvcHRpb25z
LCBwYXJzZWRfYXJncywgYnVpbGRib3Rfb3V0cHV0PWJ1aWxkYm90X291dHB1dCwgcmVndWxhcl9v
dXRwdXQ9cmVndWxhcl9vdXRwdXQpCiAgICAgcmV0dXJuIHJlcyA9PSAwIGFuZCBub3QgcmVndWxh
cl9vdXRwdXQuZ2V0dmFsdWUoKSBhbmQgbm90IGJ1aWxkYm90X291dHB1dC5nZXR2YWx1ZSgpCiAK
IAotZGVmIGxvZ2dpbmdfcnVuKGV4dHJhX2FyZ3M9Tm9uZSwgcG9ydF9vYmo9Tm9uZSwgcmVjb3Jk
X3Jlc3VsdHM9RmFsc2UsIHRlc3RzX2luY2x1ZGVkPUZhbHNlLCBob3N0PU5vbmUsIG5ld19yZXN1
bHRzPUZhbHNlKToKK2RlZiBsb2dnaW5nX3J1bihleHRyYV9hcmdzPU5vbmUsIHBvcnRfb2JqPU5v
bmUsIHJlY29yZF9yZXN1bHRzPUZhbHNlLCB0ZXN0c19pbmNsdWRlZD1GYWxzZSwgaG9zdD1Ob25l
LCBuZXdfcmVzdWx0cz1GYWxzZSwgc2hhcmVkX3BvcnQ9VHJ1ZSk6CiAgICAgb3B0aW9ucywgcGFy
c2VkX2FyZ3MgPSBwYXJzZV9hcmdzKGV4dHJhX2FyZ3M9ZXh0cmFfYXJncywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkX3Jlc3VsdHM9cmVjb3JkX3Jlc3VsdHMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVkPXRl
c3RzX2luY2x1ZGVkLApAQCAtMTA1LDcgKzEwOSw5IEBAIGRlZiBsb2dnaW5nX3J1bihleHRyYV9h
cmdzPU5vbmUsIHBvcnRfb2JqPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNlLCB0ZXN0c19pbmNs
CiAgICAgcmV0dXJuIChyZXMsIGJ1aWxkYm90X291dHB1dCwgcmVndWxhcl9vdXRwdXQsIGhvc3Qu
dXNlcikKIAogCi1kZWYgcnVuX2FuZF9jYXB0dXJlKHBvcnRfb2JqLCBvcHRpb25zLCBwYXJzZWRf
YXJncyk6CitkZWYgcnVuX2FuZF9jYXB0dXJlKHBvcnRfb2JqLCBvcHRpb25zLCBwYXJzZWRfYXJn
cywgc2hhcmVkX3BvcnQ9VHJ1ZSk6CisgICAgaWYgc2hhcmVkX3BvcnQ6CisgICAgICAgIHBvcnRf
b2JqLmhvc3QucG9ydF9mYWN0b3J5LmdldCA9IGxhbWJkYSAqYXJncywgKiprd2FyZ3M6IHBvcnRf
b2JqCiAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQogICAgIHRyeToKICAg
ICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQpAQCAtMzAyLDE0ICszMDgsMTQgQEAgY2xhc3MgTWFp
blRlc3QodW5pdHRlc3QuVGVzdENhc2UsIFN0cmVhbVRlc3RpbmdNaXhpbik6CiAgICAgZGVmIHRl
c3RfY2hpbGRfcHJvY2Vzc2VzXzIoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuc2hvdWxkX3Rlc3Rf
cHJvY2Vzc2VzOgogICAgICAgICAgICAgXywgXywgcmVndWxhcl9vdXRwdXQsIF8gPSBsb2dnaW5n
X3J1bigKLSAgICAgICAgICAgICAgICBbJy0tcHJpbnQnLCAnY29uZmlnJywgJy0tY2hpbGQtcHJv
Y2Vzc2VzJywgJzInXSkKKyAgICAgICAgICAgICAgICBbJy0tcHJpbnQnLCAnY29uZmlnJywgJy0t
Y2hpbGQtcHJvY2Vzc2VzJywgJzInXSwgc2hhcmVkX3BvcnQ9RmFsc2UpCiAgICAgICAgICAgICBz
ZWxmLmFzc2VydFRydWUoYW55KFsnUnVubmluZyAyICcgaW4gbGluZSBmb3IgbGluZSBpbiByZWd1
bGFyX291dHB1dC5idWZsaXN0XSkpCiAKICAgICBkZWYgdGVzdF9jaGlsZF9wcm9jZXNzZXNfbWlu
KHNlbGYpOgogICAgICAgICBpZiBzZWxmLnNob3VsZF90ZXN0X3Byb2Nlc3NlczoKICAgICAgICAg
ICAgIF8sIF8sIHJlZ3VsYXJfb3V0cHV0LCBfID0gbG9nZ2luZ19ydW4oCiAgICAgICAgICAgICAg
ICAgWyctLXByaW50JywgJ2NvbmZpZycsICctLWNoaWxkLXByb2Nlc3NlcycsICcyJywgJ3Bhc3Nl
cyddLAotICAgICAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVkPVRydWUpCisgICAgICAgICAgICAg
ICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgc2hhcmVkX3BvcnQ9RmFsc2UpCiAgICAgICAgICAgICBz
ZWxmLmFzc2VydFRydWUoYW55KFsnUnVubmluZyAxICcgaW4gbGluZSBmb3IgbGluZSBpbiByZWd1
bGFyX291dHB1dC5idWZsaXN0XSkpCiAKICAgICBkZWYgdGVzdF9kcnlydW4oc2VsZik6CkBAIC0z
MzQsNyArMzQwLDcgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UsIFN0cmVhbVRl
c3RpbmdNaXhpbik6CiAKICAgICAgICAgaWYgc2VsZi5zaG91bGRfdGVzdF9wcm9jZXNzZXM6CiAg
ICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhydW5fd2Via2l0X3Rlc3RzLldvcmtlckV4Y2Vw
dGlvbiwgbG9nZ2luZ19ydW4sCi0gICAgICAgICAgICAgICAgWyctLWNoaWxkLXByb2Nlc3Nlcycs
ICcyJywgJy0tZm9yY2UnLCAnZmFpbHVyZXMvZXhwZWN0ZWQvZXhjZXB0aW9uLmh0bWwnLCAncGFz
c2VzL3RleHQuaHRtbCddLCB0ZXN0c19pbmNsdWRlZD1UcnVlKQorICAgICAgICAgICAgICAgIFsn
LS1jaGlsZC1wcm9jZXNzZXMnLCAnMicsICctLWZvcmNlJywgJ2ZhaWx1cmVzL2V4cGVjdGVkL2V4
Y2VwdGlvbi5odG1sJywgJ3Bhc3Nlcy90ZXh0Lmh0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwg
c2hhcmVkX3BvcnQ9RmFsc2UpCiAKICAgICBkZWYgdGVzdF9mdWxsX3Jlc3VsdHNfaHRtbChzZWxm
KToKICAgICAgICAgIyBGSVhNRTogdmVyaWZ5IGh0bWw/CkBAIC0zNjQsNyArMzcwLDcgQEAgY2xh
c3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UsIFN0cmVhbVRlc3RpbmdNaXhpbik6CiAKICAg
ICAgICAgaWYgc2VsZi5zaG91bGRfdGVzdF9wcm9jZXNzZXM6CiAgICAgICAgICAgICBzZWxmLmFz
c2VydFJhaXNlcyhLZXlib2FyZEludGVycnVwdCwgbG9nZ2luZ19ydW4sCi0gICAgICAgICAgICAg
ICAgWydmYWlsdXJlcy9leHBlY3RlZC9rZXlib2FyZC5odG1sJywgJ3Bhc3Nlcy90ZXh0Lmh0bWwn
LCAnLS1jaGlsZC1wcm9jZXNzZXMnLCAnMicsICctLWZvcmNlJ10sIHRlc3RzX2luY2x1ZGVkPVRy
dWUpCisgICAgICAgICAgICAgICAgWydmYWlsdXJlcy9leHBlY3RlZC9rZXlib2FyZC5odG1sJywg
J3Bhc3Nlcy90ZXh0Lmh0bWwnLCAnLS1jaGlsZC1wcm9jZXNzZXMnLCAnMicsICctLWZvcmNlJ10s
IHRlc3RzX2luY2x1ZGVkPVRydWUsIHNoYXJlZF9wb3J0PUZhbHNlKQogCiAgICAgZGVmIHRlc3Rf
bm9fdGVzdHNfZm91bmQoc2VsZik6CiAgICAgICAgIHJlcywgb3V0LCBlcnIsIHVzZXIgPSBsb2dn
aW5nX3J1bihbJ3Jlc291cmNlcyddLCB0ZXN0c19pbmNsdWRlZD1UcnVlKQpAQCAtNzU0LDYgKzc2
MCw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBTdHJlYW1UZXN0aW5nTWl4
aW4pOgogCiAgICAgICAgICMgTm93IHdlIHRlc3QgdGhhdCAtLWNsb2JiZXItb2xkLXJlc3VsdHMg
ZG9lcyByZW1vdmUgdGhlIG9sZCBlbnRyaWVzIGFuZCB0aGUgb2xkIHJldHJpZXMsCiAgICAgICAg
ICMgYW5kIHRoYXQgd2UgZG9uJ3QgcmV0cnkgYWdhaW4uCisgICAgICAgIGhvc3QgPSBNb2NrSG9z
dCgpCiAgICAgICAgIHJlcywgb3V0LCBlcnIsIF8gPSBsb2dnaW5nX3J1bihbJy0tbm8tcmV0cnkt
ZmFpbHVyZXMnLCAnLS1jbG9iYmVyLW9sZC1yZXN1bHRzJywgJ2ZhaWx1cmVzL2ZsYWt5J10sIHRl
c3RzX2luY2x1ZGVkPVRydWUsIGhvc3Q9aG9zdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
cmVzLCAxKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0Nsb2JiZXJpbmcgb2xkIHJlc3VsdHMn
IGluIGVyci5nZXR2YWx1ZSgpKQpAQCAtNzY3LDE4ICs3NzQsMTMgQEAgY2xhc3MgTWFpblRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UsIFN0cmVhbVRlc3RpbmdNaXhpbik6CiAgICAgIyBUaGVzZSBuZXh0
IHRlc3RzIHRlc3QgdGhhdCB3ZSBydW4gdGhlIHRlc3RzIGluIGFzY2VuZGluZyBhbHBoYWJldGlj
YWwKICAgICAjIG9yZGVyIHBlciBkaXJlY3RvcnkuIEhUVFAgdGVzdHMgYXJlIHNoYXJkZWQgc2Vw
YXJhdGVseSBmcm9tIG90aGVyIHRlc3RzLAogICAgICMgc28gd2UgaGF2ZSB0byB0ZXN0IGJvdGgu
Ci0gICAgZGVmIGFzc2VydF9ydW5fb3JkZXIoc2VsZiwgY2hpbGRfcHJvY2Vzc2VzPScxJyk6Ci0g
ICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLWNoaWxkLXByb2Nlc3NlcycsIGNo
aWxkX3Byb2Nlc3NlcywgJ3Bhc3NlcyddLAotICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1
ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAgZGVmIHRlc3RfcnVuX29yZGVyX19pbmxpbmUo
c2VsZik6CisgICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWydwYXNzZXMnXSwgdGVz
dHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKHRlc3RzX3J1biwgc29ydGVkKHRlc3RzX3J1bikpCiAKLSAgICAgICAgdGVzdHNf
cnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tY2hpbGQtcHJvY2Vzc2VzJywgY2hpbGRfcHJvY2Vzc2Vz
LCAnaHR0cC90ZXN0cy9wYXNzZXMnXSwKLSAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVkPVRydWUs
IGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVu
KFsnaHR0cC90ZXN0cy9wYXNzZXMnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRj
aGVzPVRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRlc3RzX3J1biwgc29ydGVkKHRl
c3RzX3J1bikpCiAKLSAgICBkZWYgdGVzdF9ydW5fb3JkZXJfX2lubGluZShzZWxmKToKLSAgICAg
ICAgc2VsZi5hc3NlcnRfcnVuX29yZGVyKCkKLQogICAgIGRlZiB0ZXN0X3RvbGVyYW5jZShzZWxm
KToKICAgICAgICAgY2xhc3MgSW1hZ2VEaWZmVGVzdFBvcnQoVGVzdFBvcnQpOgogICAgICAgICAg
ICAgZGVmIGRpZmZfaW1hZ2Uoc2VsZiwgZXhwZWN0ZWRfY29udGVudHMsIGFjdHVhbF9jb250ZW50
cywgdG9sZXJhbmNlPU5vbmUpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvdmlld3MvbWV0ZXJlZF9zdHJlYW0ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy92aWV3cy9tZXRlcmVkX3N0cmVhbS5weQppbmRleCA4MTQ0Mzc3ODBh
YzY3ZDI4OTRkNmU5ZmI0YmY3Zjk1MGJiYTRhZTQ5Li44NGVjMjQ1MTNkODY4OTFlOGYwOTVlOWE0
MTYxMzNhODMyNTdmMmE1IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy92aWV3cy9tZXRlcmVkX3N0cmVhbS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy92aWV3cy9tZXRlcmVkX3N0cmVhbS5weQpAQCAtMTI4LDQgKzEyOCw0
IEBAIGNsYXNzIF9Mb2dIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CiAgICAgICAgIHNlbGYubmFt
ZSA9IExPR19IQU5ETEVSX05BTUUKIAogICAgIGRlZiBlbWl0KHNlbGYsIHJlY29yZCk6Ci0gICAg
ICAgIHNlbGYuX21ldGVyLndyaXRlbG4ocmVjb3JkLmdldE1lc3NhZ2UoKSwgcmVjb3JkLmNyZWF0
ZWQpCisgICAgICAgIHNlbGYuX21ldGVyLndyaXRlbG4ocmVjb3JkLmdldE1lc3NhZ2UoKSwgcmVj
b3JkLmNyZWF0ZWQsIHJlY29yZC5wcm9jZXNzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148956</attachid>
            <date>2012-06-21 21:08:26 -0700</date>
            <delta_ts>2012-06-21 21:08:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89725-20120621210826.patch</filename>
            <type>text/plain</type>
            <size>68099</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMDAxCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weQppbmRleCBhNjNj
MWVmYjg3ZDI4ZGRmMWY3NmZlYmRkZjExYmRjZTE4NmE2N2VmLi42Zjg1YTg1NmU1OWU5MmEwMDE4
MWU4MjZhZTQ2ZDFjYWZhYjE5YzM3IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkKQEAgLTY2LDYgKzY2
LDM1IEBAIEJVSUxERVJfQkFTRV9VUkwgPSAiaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9idWls
ZGJvdC9sYXlvdXRfdGVzdF9yZXN1bHRzLyIKIFRlc3RFeHBlY3RhdGlvbnMgPSB0ZXN0X2V4cGVj
dGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zCiAKIAorY2xhc3MgVGVzdFNoYXJkKG9iamVjdCk6Cisg
ICAgIiIiQSB0ZXN0IHNoYXJkIGlzIGEgbmFtZWQgbGlzdCBvZiBUZXN0SW5wdXRzLiIiIgorCisg
ICAgIyBGSVhNRTogTWFrZSB0aGlzIGNsYXNzIHZpc2libGUsIHVzZWQgYnkgd29ya2VycyBhcyB3
ZWxsLgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB0ZXN0X2lucHV0cyk6CisgICAgICAg
IHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi50ZXN0X2lucHV0cyA9IHRlc3RfaW5wdXRz
CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiVGVzdFNoYXJkKG5h
bWU9JyVzJywgdGVzdF9pbnB1dHM9JXMnIiAlIChzZWxmLm5hbWUsIHNlbGYudGVzdF9pbnB1dHMp
CisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYubmFt
ZSA9PSBvdGhlci5uYW1lIGFuZCBzZWxmLnRlc3RfaW5wdXRzID09IG90aGVyLnRlc3RfaW5wdXRz
CisKKworY2xhc3MgVGVzdFJ1bkludGVycnVwdGVkRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAg
IiIiUmFpc2VkIHdoZW4gYSB0ZXN0IHJ1biBzaG91bGQgYmUgc3RvcHBlZCBpbW1lZGlhdGVseS4i
IiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVhc29uKToKKyAgICAgICAgRXhjZXB0aW9uLl9f
aW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYucmVhc29uID0gcmVhc29uCisgICAgICAgIHNlbGYu
bXNnID0gcmVhc29uCisKKyAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX19jbGFzc19fLCAoc2VsZi5yZWFzb24sKQorCisKK1dvcmtlckV4Y2VwdGlvbiA9IG1h
bmFnZXJfd29ya2VyX2Jyb2tlci5Xb3JrZXJFeGNlcHRpb24KKworCiBkZWYgaW50ZXJwcmV0X3Rl
c3RfZmFpbHVyZXMocG9ydCwgdGVzdF9uYW1lLCBmYWlsdXJlcyk6CiAgICAgIiIiSW50ZXJwcmV0
IHRlc3QgZmFpbHVyZXMgYW5kIHJldHVybnMgYSB0ZXN0IHJlc3VsdCBhcyBkaWN0LgogCkBAIC0y
NTUsMzcgKzI4NCw2IEBAIGRlZiBzdW1tYXJpemVfcmVzdWx0cyhwb3J0X29iaiwgZXhwZWN0YXRp
b25zLCByZXN1bHRfc3VtbWFyeSwgcmV0cnlfc3VtbWFyeSwgdGVzCiAgICAgcmV0dXJuIHJlc3Vs
dHMKIAogCi1jbGFzcyBUZXN0UnVuSW50ZXJydXB0ZWRFeGNlcHRpb24oRXhjZXB0aW9uKToKLSAg
ICAiIiJSYWlzZWQgd2hlbiBhIHRlc3QgcnVuIHNob3VsZCBiZSBzdG9wcGVkIGltbWVkaWF0ZWx5
LiIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWFzb24pOgotICAgICAgICBFeGNlcHRpb24u
X19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5yZWFzb24gPSByZWFzb24KLSAgICAgICAgc2Vs
Zi5tc2cgPSByZWFzb24KLQotICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgotICAgICAgICByZXR1
cm4gc2VsZi5fX2NsYXNzX18sIChzZWxmLnJlYXNvbiwpCi0KLQotY2xhc3MgV29ya2VyRXhjZXB0
aW9uKEV4Y2VwdGlvbik6Ci0gICAgIiIiUmFpc2VkIHdoZW4gd2UgcmVjZWl2ZSBhbiB1bmV4cGVj
dGVkL3Vua25vd24gZXhjZXB0aW9uIGZyb20gYSB3b3JrZXIuIiIiCi0gICAgcGFzcwotCi0KLWNs
YXNzIFRlc3RTaGFyZChvYmplY3QpOgotICAgICIiIkEgdGVzdCBzaGFyZCBpcyBhIG5hbWVkIGxp
c3Qgb2YgVGVzdElucHV0cy4iIiIKLQotICAgICMgRklYTUU6IE1ha2UgdGhpcyBjbGFzcyB2aXNp
YmxlLCB1c2VkIGJ5IHdvcmtlcnMgYXMgd2VsbC4KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFt
ZSwgdGVzdF9pbnB1dHMpOgotICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgICAgIHNlbGYu
dGVzdF9pbnB1dHMgPSB0ZXN0X2lucHV0cwotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAg
ICAgICByZXR1cm4gIlRlc3RTaGFyZChuYW1lPSclcycsIHRlc3RfaW5wdXRzPSVzJyIgJSAoc2Vs
Zi5uYW1lLCBzZWxmLnRlc3RfaW5wdXRzKQotCi0gICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6
Ci0gICAgICAgIHJldHVybiBzZWxmLm5hbWUgPT0gb3RoZXIubmFtZSBhbmQgc2VsZi50ZXN0X2lu
cHV0cyA9PSBvdGhlci50ZXN0X2lucHV0cwotCi0KIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAg
ICAiIiJBIGNsYXNzIGZvciBtYW5hZ2luZyBydW5uaW5nIGEgc2VyaWVzIG9mIHRlc3RzIG9uIGEg
c2VyaWVzIG9mIGxheW91dAogICAgIHRlc3QgZmlsZXMuIiIiCkBAIC0zMzAsMTAgKzMyOCw5IEBA
IGNsYXNzIE1hbmFnZXIob2JqZWN0KToKIAogICAgICAgICBzZWxmLl9hbGxfcmVzdWx0cyA9IFtd
CiAgICAgICAgIHNlbGYuX2dyb3VwX3N0YXRzID0ge30KKyAgICAgICAgc2VsZi5fd29ya2VyX3N0
YXRzID0ge30KICAgICAgICAgc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSA9IE5vbmUKLQot
ICAgICAgICAjIFRoaXMgbWFwcyB3b3JrZXIgbmFtZXMgdG8gdGhlIHN0YXRlIHdlIGFyZSB0cmFj
a2luZyBmb3IgZWFjaCBvZiB0aGVtLgotICAgICAgICBzZWxmLl93b3JrZXJfc3RhdGVzID0ge30K
KyAgICAgICAgc2VsZi5fbmFtZSA9ICdNYW5hZ2VyJwogCiAgICAgZGVmIGNvbGxlY3RfdGVzdHMo
c2VsZiwgYXJncyk6CiAgICAgICAgICIiIkZpbmQgYWxsIHRoZSBmaWxlcyB0byB0ZXN0LgpAQCAt
NzQ2LDcgKzc0Myw2IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgc2VsZi5fY3Vy
cmVudF9yZXN1bHRfc3VtbWFyeSA9IHJlc3VsdF9zdW1tYXJ5CiAgICAgICAgIHNlbGYuX2FsbF9y
ZXN1bHRzID0gW10KICAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHMgPSB7fQotICAgICAgICBzZWxm
Ll93b3JrZXJfc3RhdGVzID0ge30KIAogICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IEZh
bHNlCiAgICAgICAgIGludGVycnVwdGVkID0gRmFsc2UKQEAgLTc3MSw3NiArNzY3LDMzIEBAIGNs
YXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgbnVtX3dvcmtlcnMgPSBtaW4obnVtX3dvcmtl
cnMsIGxlbihhbGxfc2hhcmRzKSkKICAgICAgICAgc2VsZi5fbG9nX251bV93b3JrZXJzKG51bV93
b3JrZXJzLCBsZW4oYWxsX3NoYXJkcyksIGxlbihsb2NrZWRfc2hhcmRzKSkKIAotICAgICAgICBt
YW5hZ2VyX2Nvbm5lY3Rpb24gPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuZ2V0KG51bV93b3JrZXJz
LCBzZWxmLCB3b3JrZXIuV29ya2VyKQotCiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuZHJ5X3J1
bjoKICAgICAgICAgICAgIHJldHVybiAoa2V5Ym9hcmRfaW50ZXJydXB0ZWQsIGludGVycnVwdGVk
LCB0aHJlYWRfdGltaW5ncywgc2VsZi5fZ3JvdXBfc3RhdHMsIHNlbGYuX2FsbF9yZXN1bHRzKQog
Ci0gICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyAlcyAuLi4nICUg
Z3JhbW1hci5wbHVyYWxpemUoJ3dvcmtlcicsIG51bV93b3JrZXJzKSkKLSAgICAgICAgZm9yIHdv
cmtlcl9udW1iZXIgaW4geHJhbmdlKG51bV93b3JrZXJzKToKLSAgICAgICAgICAgIHdvcmtlcl9h
cmd1bWVudHMgPSB3b3JrZXIuV29ya2VyQXJndW1lbnRzKHdvcmtlcl9udW1iZXIsIHNlbGYucmVz
dWx0c19kaXJlY3RvcnkoKSwgc2VsZi5fb3B0aW9ucykKLSAgICAgICAgICAgIHdvcmtlcl9jb25u
ZWN0aW9uID0gbWFuYWdlcl9jb25uZWN0aW9uLnN0YXJ0X3dvcmtlcih3b3JrZXJfYXJndW1lbnRz
KQotICAgICAgICAgICAgaWYgbnVtX3dvcmtlcnMgPT0gMToKLSAgICAgICAgICAgICAgICAjIEZJ
WE1FOiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gc2hhcmUgYSBwb3J0IHdpdGggdGhlIHdvcmsgc28K
LSAgICAgICAgICAgICAgICAjIHRoYXQgc29tZSBvZiB0aGUgdGVzdHMgY2FuIHF1ZXJ5IHN0YXRl
IG9uIHRoZSBwb3J0OyBpZGVhbGx5Ci0gICAgICAgICAgICAgICAgIyB3ZSdkIHJld3JpdGUgdGhl
IHRlc3RzIHNvIHRoYXQgdGhpcyB3YXNuJ3QgbmVjZXNzYXJ5LgotICAgICAgICAgICAgICAgICMK
LSAgICAgICAgICAgICAgICAjIE5vdGUgdGhhdCB0aGlzIG9ubHkgd29ya3MgYmVjYXVzZSBpbiB0
aGUgaW5saW5lIGNhc2UKLSAgICAgICAgICAgICAgICAjIHRoZSB3b3JrZXIgaGFzbid0IHJlYWxs
eSBzdGFydGVkIHlldCBhbmQgd29uJ3Qgc3RhcnQKLSAgICAgICAgICAgICAgICAjIHJ1bm5pbmcg
dW50aWwgd2UgY2FsbCBydW5fbWVzc2FnZV9sb29wKCksIGJlbG93LgotICAgICAgICAgICAgICAg
IHdvcmtlcl9jb25uZWN0aW9uLnNldF9pbmxpbmVfYXJndW1lbnRzKHNlbGYuX3BvcnQpCi0KLSAg
ICAgICAgICAgIHdvcmtlcl9zdGF0ZSA9IF9Xb3JrZXJTdGF0ZSh3b3JrZXJfbnVtYmVyLCB3b3Jr
ZXJfY29ubmVjdGlvbikKLSAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0ZXNbd29ya2VyX2Nv
bm5lY3Rpb24ubmFtZSgpXSA9IHdvcmtlcl9zdGF0ZQotCi0gICAgICAgICAgICB0aW1lLnNsZWVw
KHNlbGYuX3BvcnQud29ya2VyX3N0YXJ0dXBfZGVsYXlfc2VjcygpKQotCi0gICAgICAgIHNlbGYu
X3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0aW5nIC4uLiIpCi0gICAgICAgIGZv
ciBzaGFyZCBpbiBhbGxfc2hhcmRzOgotICAgICAgICAgICAgIyBGSVhNRTogQ2hhbmdlICd0ZXN0
X2xpc3QnIHRvICdzaGFyZCcsIG1ha2Ugc2hhcmRpbmcgcHVibGljLgotICAgICAgICAgICAgbWFu
YWdlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgndGVzdF9saXN0Jywgc2hhcmQubmFtZSwgc2hh
cmQudGVzdF9pbnB1dHMpCi0KLSAgICAgICAgIyBXZSBwb3N0IG9uZSAnc3RvcCcgbWVzc2FnZSBm
b3IgZWFjaCB3b3JrZXIuIEJlY2F1c2UgdGhlIHN0b3AgbWVzc2FnZQotICAgICAgICAjIGFyZSBz
ZW50IGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMsIGFuZCBiZWNhdXNlIGVhY2ggd29ya2VyIHdpbGwg
c3RvcAotICAgICAgICAjIHJlYWRpbmcgbWVzc3NhZ2VzIGFmdGVyIHJlY2VpdmluZyBhIHN0b3As
IHdlIGNhbiBiZSBzdXJlIGVhY2gKLSAgICAgICAgIyB3b3JrZXIgd2lsbCBnZXQgYSBzdG9wIG1l
c3NhZ2UgYW5kIGhlbmNlIHRoZXkgd2lsbCBhbGwgc2h1dCBkb3duLgotICAgICAgICBmb3IgXyBp
biB4cmFuZ2UobnVtX3dvcmtlcnMpOgotICAgICAgICAgICAgbWFuYWdlcl9jb25uZWN0aW9uLnBv
c3RfbWVzc2FnZSgnc3RvcCcpCisgICAgICAgIGRlZiB3b3JrZXJfZmFjdG9yeShjYWxsZXIsIHdv
cmtlcl9udW1iZXIpOgorICAgICAgICAgICAgcmV0dXJuIHdvcmtlci5Xb3JrZXIoY2FsbGVyLCB3
b3JrZXJfbnVtYmVyLCBzZWxmLnJlc3VsdHNfZGlyZWN0b3J5KCksIHNlbGYuX29wdGlvbnMpCiAK
KyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0aW5nICVzIC4uLicgJSBn
cmFtbWFyLnBsdXJhbGl6ZSgnd29ya2VyJywgbnVtX3dvcmtlcnMpKQorICAgICAgICBpbnRlcnJ1
cHRlZCA9IGtleWJvYXJkX2ludGVycnVwdGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fd29ya2Vy
c19zdGFydGVkID0gc2V0KCkKKyAgICAgICAgc2VsZi5fd29ya2Vyc19kb25lID0gc2V0KCkKKyAg
ICAgICAgc2VsZi5fYnJva2VyID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLmdldChzZWxmLl9wb3J0
Lmhvc3QsIHNlbGYsIHdvcmtlcl9mYWN0b3J5LCBudW1fd29ya2Vycywgc2VsZi5fcG9ydC53b3Jr
ZXJfc3RhcnR1cF9kZWxheV9zZWNzKCkpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHdoaWxl
IG5vdCBzZWxmLmlzX2RvbmUoKToKLSAgICAgICAgICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24u
cnVuX21lc3NhZ2VfbG9vcChkZWxheV9zZWNzPTEuMCkKLQotICAgICAgICAgICAgIyBNYWtlIHN1
cmUgYWxsIG9mIHRoZSB3b3JrZXJzIGhhdmUgc2h1dCBkb3duIChpZiBwb3NzaWJsZSkuCi0gICAg
ICAgICAgICBmb3Igd29ya2VyX3N0YXRlIGluIHNlbGYuX3dvcmtlcl9zdGF0ZXMudmFsdWVzKCk6
Ci0gICAgICAgICAgICAgICAgaWYgd29ya2VyX3N0YXRlLndvcmtlcl9jb25uZWN0aW9uLmlzX2Fs
aXZlKCk6Ci0gICAgICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ1dhaXRpbmcgZm9yIHdvcmtl
ciAlZCB0byBleGl0JyAlIHdvcmtlcl9zdGF0ZS5udW1iZXIpCi0gICAgICAgICAgICAgICAgICAg
IHdvcmtlcl9zdGF0ZS53b3JrZXJfY29ubmVjdGlvbi5qb2luKDUuMCkKLSAgICAgICAgICAgICAg
ICAgICAgaWYgd29ya2VyX3N0YXRlLndvcmtlcl9jb25uZWN0aW9uLmlzX2FsaXZlKCk6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCdXb3JrZXIgJWQgZGlkIG5vdCBleGl0IGlu
IHRpbWUuJyAlIHdvcmtlcl9zdGF0ZS5udW1iZXIpCi0KKyAgICAgICAgICAgIHNlbGYuX2Jyb2tl
ci5ydW5fc2hhcmRzKGFsbF9zaGFyZHMpCiAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVw
dDoKLSAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIuZmx1c2goKQotICAgICAgICAgICAgc2VsZi5f
cHJpbnRlci53cml0ZSgnSW50ZXJydXB0ZWQsIGV4aXRpbmcgLi4uJykKLSAgICAgICAgICAgIHNl
bGYuY2FuY2VsX3dvcmtlcnMoKQorICAgICAgICAgICAgX2xvZy5pbmZvKCdJbnRlcnJ1cHRlZCwg
ZXhpdGluZyAuLi4nKQogICAgICAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBUcnVlCiAg
ICAgICAgIGV4Y2VwdCBUZXN0UnVuSW50ZXJydXB0ZWRFeGNlcHRpb24sIGU6CiAgICAgICAgICAg
ICBfbG9nLndhcm5pbmcoZS5yZWFzb24pCi0gICAgICAgICAgICBzZWxmLmNhbmNlbF93b3JrZXJz
KCkKICAgICAgICAgICAgIGludGVycnVwdGVkID0gVHJ1ZQotICAgICAgICBleGNlcHQgV29ya2Vy
RXhjZXB0aW9uOgotICAgICAgICAgICAgc2VsZi5jYW5jZWxfd29ya2VycygpCi0gICAgICAgICAg
ICByYWlzZQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAjIFVuZXhwZWN0ZWQgZXhjZXB0
aW9uOyBkb24ndCB0cnkgdG8gY2xlYW4gdXAgd29ya2Vycy4KLSAgICAgICAgICAgIF9sb2cuZXJy
b3IoIkV4Y2VwdGlvbiByYWlzZWQsIGV4aXRpbmciKQotICAgICAgICAgICAgc2VsZi5jYW5jZWxf
d29ya2VycygpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBfbG9n
LmVycm9yKCJFeGNlcHRpb24gcmFpc2VkLCBleGl0aW5nOiAlcyIgJSBlKQogICAgICAgICAgICAg
cmFpc2UKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG1hbmFnZXJfY29ubmVjdGlvbi5j
bGVhbnVwKCkKKyAgICAgICAgICAgIHNlbGYuX2Jyb2tlci5jbG9zZSgpCiAgICAgICAgICAgICBz
ZWxmLnN0b3Bfc2VydmVyc193aXRoX2xvY2soKQogCi0gICAgICAgIHRocmVhZF90aW1pbmdzID0g
W3dvcmtlcl9zdGF0ZS5zdGF0cyBmb3Igd29ya2VyX3N0YXRlIGluIHNlbGYuX3dvcmtlcl9zdGF0
ZXMudmFsdWVzKCldCisgICAgICAgIHRocmVhZF90aW1pbmdzID0gW10KIAogICAgICAgICAjIEZJ
WE1FOiBzaG91bGQgdGhpcyBiZSBhIGNsYXNzIGluc3RlYWQgb2YgYSB0dXBsZT8KICAgICAgICAg
cmV0dXJuIChpbnRlcnJ1cHRlZCwga2V5Ym9hcmRfaW50ZXJydXB0ZWQsIHRocmVhZF90aW1pbmdz
LCBzZWxmLl9ncm91cF9zdGF0cywgc2VsZi5fYWxsX3Jlc3VsdHMpCkBAIC0xNDUyLDQyICsxNDA1
LDIzIEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgcmVzdWx0c19maWxlbmFtZSA9
IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSwgInJlc3VsdHMu
aHRtbCIpCiAgICAgICAgIHNlbGYuX3BvcnQuc2hvd19yZXN1bHRzX2h0bWxfZmlsZShyZXN1bHRz
X2ZpbGVuYW1lKQogCisgICAgZGVmIGlzX2RvbmUoc2VsZik6CisgICAgICAgICIiIkNhbGxlZCBm
cm9tIGluc2lkZSBicm9rZXIgY29kZSB0byBpbmRpY2F0ZSB3aGV0aGVyIHRvIGV4aXQuIiIiCisg
ICAgICAgIHJldHVybiBzZWxmLl93b3JrZXJzX3N0YXJ0ZWQgYW5kIHNlbGYuX3dvcmtlcnNfZG9u
ZSA9PSBzZWxmLl93b3JrZXJzX3N0YXJ0ZWQKKwogICAgIGRlZiBuYW1lKHNlbGYpOgotICAgICAg
ICByZXR1cm4gJ01hbmFnZXInCisgICAgICAgIHJldHVybiAnbWFuYWdlcicKIAotICAgIGRlZiBp
c19kb25lKHNlbGYpOgotICAgICAgICB3b3JrZXJfc3RhdGVzID0gc2VsZi5fd29ya2VyX3N0YXRl
cy52YWx1ZXMoKQotICAgICAgICByZXR1cm4gd29ya2VyX3N0YXRlcyBhbmQgYWxsKHNlbGYuX3dv
cmtlcl9pc19kb25lKHdvcmtlcl9zdGF0ZSkgZm9yIHdvcmtlcl9zdGF0ZSBpbiB3b3JrZXJfc3Rh
dGVzKQotCi0gICAgIyBGSVhNRTogSW5saW5lIHRoaXMgZnVuY3Rpb24uCi0gICAgZGVmIF93b3Jr
ZXJfaXNfZG9uZShzZWxmLCB3b3JrZXJfc3RhdGUpOgotICAgICAgICByZXR1cm4gd29ya2VyX3N0
YXRlLmRvbmUKLQotICAgIGRlZiBjYW5jZWxfd29ya2VycyhzZWxmKToKLSAgICAgICAgZm9yIHdv
cmtlcl9zdGF0ZSBpbiBzZWxmLl93b3JrZXJfc3RhdGVzLnZhbHVlcygpOgotICAgICAgICAgICAg
d29ya2VyX3N0YXRlLndvcmtlcl9jb25uZWN0aW9uLmNhbmNlbCgpCi0KLSAgICBkZWYgaGFuZGxl
X3N0YXJ0ZWRfdGVzdChzZWxmLCBzb3VyY2UsIHRlc3RfaW5mbywgaGFuZ190aW1lb3V0KToKLSAg
ICAgICAgd29ya2VyX3N0YXRlID0gc2VsZi5fd29ya2VyX3N0YXRlc1tzb3VyY2VdCi0gICAgICAg
IHdvcmtlcl9zdGF0ZS5jdXJyZW50X3Rlc3RfbmFtZSA9IHRlc3RfaW5mby50ZXN0X25hbWUKLSAg
ICAgICAgd29ya2VyX3N0YXRlLm5leHRfdGltZW91dCA9IHRpbWUudGltZSgpICsgaGFuZ190aW1l
b3V0Ci0KLSAgICBkZWYgaGFuZGxlX2RvbmUoc2VsZiwgc291cmNlLCBsb2dfbWVzc2FnZXM9Tm9u
ZSk6Ci0gICAgICAgIHdvcmtlcl9zdGF0ZSA9IHNlbGYuX3dvcmtlcl9zdGF0ZXNbc291cmNlXQot
ICAgICAgICB3b3JrZXJfc3RhdGUuZG9uZSA9IFRydWUKLSAgICAgICAgc2VsZi5fbG9nX21lc3Nh
Z2VzKGxvZ19tZXNzYWdlcykKLQotICAgIGRlZiBoYW5kbGVfZXhjZXB0aW9uKHNlbGYsIHNvdXJj
ZSwgZXhjZXB0aW9uX3R5cGUsIGV4Y2VwdGlvbl92YWx1ZSwgc3RhY2spOgotICAgICAgICBpZiBl
eGNlcHRpb25fdHlwZSBpbiAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFRlc3RSdW5JbnRlcnJ1cHRlZEV4
Y2VwdGlvbik6Ci0gICAgICAgICAgICByYWlzZSBleGNlcHRpb25fdHlwZShleGNlcHRpb25fdmFs
dWUpCi0gICAgICAgIF9sb2cuZXJyb3IoIiVzIHJhaXNlZCAlcygnJXMnKToiICUgKAotICAgICAg
ICAgICAgICAgICAgIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICBleGNlcHRpb25fdmFsdWUu
X19jbGFzc19fLl9fbmFtZV9fLAotICAgICAgICAgICAgICAgICAgIHN0cihleGNlcHRpb25fdmFs
dWUpKSkKLSAgICAgICAgc2VsZi5fbG9nX3dvcmtlcl9zdGFjayhzdGFjaykKLSAgICAgICAgcmFp
c2UgV29ya2VyRXhjZXB0aW9uKHN0cihleGNlcHRpb25fdmFsdWUpKQotCi0gICAgZGVmIGhhbmRs
ZV9maW5pc2hlZF9saXN0KHNlbGYsIHNvdXJjZSwgbGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBz
ZWRfdGltZSk6CisgICAgZGVmIGhhbmRsZShzZWxmLCBuYW1lLCBzb3VyY2UsICphcmdzKToKKyAg
ICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLCAnX2hhbmRsZV8nICsgbmFtZSkKKyAgICAgICAg
aWYgbWV0aG9kOgorICAgICAgICAgICAgcmV0dXJuIG1ldGhvZChzb3VyY2UsICphcmdzKQorICAg
ICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigndW5rbm93biBtZXNzYWdlICVzIHJlY2VpdmVkIGZy
b20gJXMsIGFyZ3M9JXMnICUgKG5hbWUsIHNvdXJjZSwgcmVwcihhcmdzKSkpCisKKyAgICBkZWYg
X2hhbmRsZV9zdGFydGVkX3Rlc3RfbGlzdChzZWxmLCB3b3JrZXJfbmFtZSwgdGVzdF9saXN0KToK
KyAgICAgICAgcGFzcworCisgICAgZGVmIF9oYW5kbGVfZmluaXNoZWRfdGVzdF9saXN0KHNlbGYs
IHdvcmtlcl9uYW1lLCBsaXN0X25hbWUsIG51bV90ZXN0cywgZWxhcHNlZF90aW1lKToKICAgICAg
ICAgc2VsZi5fZ3JvdXBfc3RhdHNbbGlzdF9uYW1lXSA9IChudW1fdGVzdHMsIGVsYXBzZWRfdGlt
ZSkKIAogICAgICAgICBkZWYgZmluZChuYW1lLCB0ZXN0X2xpc3RzKToKQEAgLTE1MDIsMjggKzE0
MzYsMjkgQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAgICAgICAgICAgaWYgbm90IHNlbGYu
X3JlbWFpbmluZ19sb2NrZWRfc2hhcmRzOgogICAgICAgICAgICAgICAgIHNlbGYuc3RvcF9zZXJ2
ZXJzX3dpdGhfbG9jaygpCiAKLSAgICBkZWYgaGFuZGxlX2ZpbmlzaGVkX3Rlc3Qoc2VsZiwgc291
cmNlLCByZXN1bHQsIGVsYXBzZWRfdGltZSwgbG9nX21lc3NhZ2VzPU5vbmUpOgotICAgICAgICB3
b3JrZXJfc3RhdGUgPSBzZWxmLl93b3JrZXJfc3RhdGVzW3NvdXJjZV0KLSAgICAgICAgd29ya2Vy
X3N0YXRlLm5leHRfdGltZW91dCA9IE5vbmUKLSAgICAgICAgd29ya2VyX3N0YXRlLmN1cnJlbnRf
dGVzdF9uYW1lID0gTm9uZQotICAgICAgICB3b3JrZXJfc3RhdGUuc3RhdHNbJ3RvdGFsX3RpbWUn
XSArPSBlbGFwc2VkX3RpbWUKLSAgICAgICAgd29ya2VyX3N0YXRlLnN0YXRzWydudW1fdGVzdHMn
XSArPSAxCisgICAgZGVmIF9oYW5kbGVfc3RhcnRlZF90ZXN0KHNlbGYsICphcmdzKToKKyAgICAg
ICAgcGFzcwogCi0gICAgICAgIHNlbGYuX2xvZ19tZXNzYWdlcyhsb2dfbWVzc2FnZXMpCisgICAg
ZGVmIF9oYW5kbGVfZmluaXNoZWRfdGVzdChzZWxmLCB3b3JrZXJfbmFtZSwgcmVzdWx0LCBlbGFw
c2VkX3RpbWUsIGxvZ19tZXNzYWdlcz1bXSk6CisgICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0cy5z
ZXRkZWZhdWx0KHdvcmtlcl9uYW1lLCBfV29ya2VyU3RhdHMod29ya2VyX25hbWUpKQorICAgICAg
ICB3b3JrZXJfc3RhdHMgPSBzZWxmLl93b3JrZXJfc3RhdHNbd29ya2VyX25hbWVdCisgICAgICAg
IHdvcmtlcl9zdGF0cy5zdGF0c1sndG90YWxfdGltZSddICs9IGVsYXBzZWRfdGltZQorICAgICAg
ICB3b3JrZXJfc3RhdHMuc3RhdHNbJ251bV90ZXN0cyddICs9IDEKICAgICAgICAgc2VsZi5fYWxs
X3Jlc3VsdHMuYXBwZW5kKHJlc3VsdCkKICAgICAgICAgc2VsZi5fdXBkYXRlX3N1bW1hcnlfd2l0
aF9yZXN1bHQoc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSwgcmVzdWx0KQogCi0gICAgZGVm
IF9sb2dfbWVzc2FnZXMoc2VsZiwgbWVzc2FnZXMpOgotICAgICAgICBmb3IgbWVzc2FnZSBpbiBt
ZXNzYWdlczoKLSAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVsbigqbWVzc2FnZSkKIAot
ICAgIGRlZiBfbG9nX3dvcmtlcl9zdGFjayhzZWxmLCBzdGFjayk6Ci0gICAgICAgIHdlYmtpdHB5
ZGlyID0gc2VsZi5fcG9ydC5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoJ1Rvb2xzJywgJ1NjcmlwdHMn
LCAnd2Via2l0cHknKSArIHNlbGYuX2ZpbGVzeXN0ZW0uc2VwCi0gICAgICAgIGZvciBmaWxlbmFt
ZSwgbGluZV9udW1iZXIsIGZ1bmN0aW9uX25hbWUsIHRleHQgaW4gc3RhY2s6Ci0gICAgICAgICAg
ICBpZiBmaWxlbmFtZS5zdGFydHN3aXRoKHdlYmtpdHB5ZGlyKToKLSAgICAgICAgICAgICAgICBm
aWxlbmFtZSA9IGZpbGVuYW1lLnJlcGxhY2Uod2Via2l0cHlkaXIsICcnKQotICAgICAgICAgICAg
X2xvZy5lcnJvcignICAlczoldSAoaW4gJXMpJyAlIChmaWxlbmFtZSwgbGluZV9udW1iZXIsIGZ1
bmN0aW9uX25hbWUpKQotICAgICAgICAgICAgX2xvZy5lcnJvcignICAgICVzJyAlIHRleHQpCitj
bGFzcyBfV29ya2VyU3RhdHMob2JqZWN0KToKKyAgICAiIiJBIGNsYXNzIGZvciB0aGUgbWFuYWdl
ciB0byB1c2UgdG8gdHJhY2sgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHdvcmtlcnMuIiIiCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICAjIEZJWE1FOiBVc2UgZmllbGRz
IGRpcmVjdGx5LCBub3QgYSBkaWN0LgorICAgICAgICBzZWxmLnN0YXRzID0ge30KKyAgICAgICAg
c2VsZi5zdGF0c1snbmFtZSddID0gbmFtZQorICAgICAgICBzZWxmLnN0YXRzWydudW1fdGVzdHMn
XSA9IDAKKyAgICAgICAgc2VsZi5zdGF0c1sndG90YWxfdGltZSddID0gMAorCisgICAgZGVmIF9f
cmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIl9Xb3JrZXJTdGF0cyIgKyBzdHIoc2VsZi5z
dGF0cykgKyAiKSIKIAogCiBkZWYgcmVhZF90ZXN0X2ZpbGVzKGZzLCBmaWxlbmFtZXMsIHRlc3Rf
cGF0aF9zZXBhcmF0b3IpOgpAQCAtMTU3MywyMCArMTUwOCwzIEBAIGRlZiBuYXR1cmFsX3NvcnRf
a2V5KHN0cmluZ190b19zcGxpdCk6CiAgICAgICAgICAgICByZXR1cm4gdmFsCiAKICAgICByZXR1
cm4gW3RyeWludChjaHVuaykgZm9yIGNodW5rIGluIHJlLnNwbGl0KCcoXGQrKScsIHN0cmluZ190
b19zcGxpdCldCi0KLQotY2xhc3MgX1dvcmtlclN0YXRlKG9iamVjdCk6Ci0gICAgIiIiQSBjbGFz
cyBmb3IgdGhlIG1hbmFnZXIgdG8gdXNlIHRvIHRyYWNrIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRo
ZSB3b3JrZXJzLiIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBudW1iZXIsIHdvcmtlcl9jb25u
ZWN0aW9uKToKLSAgICAgICAgc2VsZi53b3JrZXJfY29ubmVjdGlvbiA9IHdvcmtlcl9jb25uZWN0
aW9uCi0gICAgICAgIHNlbGYubnVtYmVyID0gbnVtYmVyCi0gICAgICAgIHNlbGYuZG9uZSA9IEZh
bHNlCi0gICAgICAgIHNlbGYuY3VycmVudF90ZXN0X25hbWUgPSBOb25lCi0gICAgICAgIHNlbGYu
bmV4dF90aW1lb3V0ID0gTm9uZQotICAgICAgICBzZWxmLnN0YXRzID0ge30KLSAgICAgICAgc2Vs
Zi5zdGF0c1snbmFtZSddID0gd29ya2VyX2Nvbm5lY3Rpb24ubmFtZSgpCi0gICAgICAgIHNlbGYu
c3RhdHNbJ251bV90ZXN0cyddID0gMAotICAgICAgICBzZWxmLnN0YXRzWyd0b3RhbF90aW1lJ10g
PSAwCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiX1dvcmtlclN0
YXRlKCIgKyBzdHIoc2VsZi5fX2RpY3RfXykgKyAiKSIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfdW5pdHRlc3QucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2Vy
X3VuaXR0ZXN0LnB5CmluZGV4IDM0OTYzMjJhOTcyZGNkODZjNTI5MjFiNjI0OTA2MGU1YmYwNDEz
NzAuLjczY2M0YWMxOWI2ZjI2MGM1YjY1YjE0Y2JiMmNmMzQzNTNiYjdmNDcgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJf
dW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29u
dHJvbGxlcnMvbWFuYWdlcl91bml0dGVzdC5weQpAQCAtNDMsOCArNDMsOCBAQCBmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBwb3J0X3Rlc3RjYXNlCiAKIGZyb20gd2Via2l0
cHkgaW1wb3J0IGxheW91dF90ZXN0cwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0
IHJ1bl93ZWJraXRfdGVzdHMKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmNvbnRyb2xsZXJz
IGltcG9ydCBtYW5hZ2VyCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycy5t
YW5hZ2VyIGltcG9ydCBpbnRlcnByZXRfdGVzdF9mYWlsdXJlcywgIE1hbmFnZXIsIG5hdHVyYWxf
c29ydF9rZXksIHRlc3Rfa2V5LCBUZXN0UnVuSW50ZXJydXB0ZWRFeGNlcHRpb24sIFRlc3RTaGFy
ZAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMubWFuYWdlciBpbXBvcnQg
VGVzdFJ1bkludGVycnVwdGVkRXhjZXB0aW9uLCBUZXN0U2hhcmQKK2Zyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLmNvbnRyb2xsZXJzLm1hbmFnZXIgaW1wb3J0IGludGVycHJldF90ZXN0X2ZhaWx1
cmVzLCBNYW5hZ2VyLCBuYXR1cmFsX3NvcnRfa2V5LCB0ZXN0X2tleSwgc3VtbWFyaXplX3Jlc3Vs
dHMKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscyBpbXBvcnQgcmVzdWx0X3N1bW1h
cnkKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscyBpbXBvcnQgdGVzdF9leHBlY3Rh
dGlvbnMKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscyBpbXBvcnQgdGVzdF9mYWls
dXJlcwpAQCAtNTExLDggKzUxMSw4IEBAIGNsYXNzIFJlc3VsdFN1bW1hcnlUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKICAgICAgICAgICAgIHJldHJ5LmFkZChzZWxmLmdldF9yZXN1bHQoJ3Bhc3Nl
cy90ZXh0Lmh0bWwnKSwgVHJ1ZSkKICAgICAgICAgICAgIHJldHJ5LmFkZChzZWxmLmdldF9yZXN1
bHQoJ2ZhaWx1cmVzL2V4cGVjdGVkL3RpbWVvdXQuaHRtbCcpLCBUcnVlKQogICAgICAgICAgICAg
cmV0cnkuYWRkKHNlbGYuZ2V0X3Jlc3VsdCgnZmFpbHVyZXMvZXhwZWN0ZWQvY3Jhc2guaHRtbCcp
LCBUcnVlKQotICAgICAgICB1bmV4cGVjdGVkX3Jlc3VsdHMgPSBtYW5hZ2VyLnN1bW1hcml6ZV9y
ZXN1bHRzKHBvcnQsIGV4cCwgcnMsIHJldHJ5LCB0ZXN0X3RpbWluZ3M9e30sIG9ubHlfdW5leHBl
Y3RlZD1UcnVlLCBpbnRlcnJ1cHRlZD1GYWxzZSkKLSAgICAgICAgZXhwZWN0ZWRfcmVzdWx0cyA9
IG1hbmFnZXIuc3VtbWFyaXplX3Jlc3VsdHMocG9ydCwgZXhwLCBycywgcmV0cnksIHRlc3RfdGlt
aW5ncz17fSwgb25seV91bmV4cGVjdGVkPUZhbHNlLCBpbnRlcnJ1cHRlZD1GYWxzZSkKKyAgICAg
ICAgdW5leHBlY3RlZF9yZXN1bHRzID0gc3VtbWFyaXplX3Jlc3VsdHMocG9ydCwgZXhwLCBycywg
cmV0cnksIHRlc3RfdGltaW5ncz17fSwgb25seV91bmV4cGVjdGVkPVRydWUsIGludGVycnVwdGVk
PUZhbHNlKQorICAgICAgICBleHBlY3RlZF9yZXN1bHRzID0gc3VtbWFyaXplX3Jlc3VsdHMocG9y
dCwgZXhwLCBycywgcmV0cnksIHRlc3RfdGltaW5ncz17fSwgb25seV91bmV4cGVjdGVkPUZhbHNl
LCBpbnRlcnJ1cHRlZD1GYWxzZSkKICAgICAgICAgcmV0dXJuIGV4cGVjdGVkX3Jlc3VsdHMsIHVu
ZXhwZWN0ZWRfcmVzdWx0cwogCiAgICAgZGVmIHRlc3Rfbm9fc3ZuX3JldmlzaW9uKHNlbGYpOgpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxl
cnMvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5CmluZGV4IDcwNDdk
OTM5YzQxYjFmYmE5MTI2YjcxMjRkZjJkNDI2ZmRjZTdmNzQuLjI3YjY0YjI4Mzc2NmQ2MGE4MTdl
YjZjODFmOWEyOTY5ZTk0NzFmMDcgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dv
cmtlcl9icm9rZXIucHkKQEAgLTI2LDQxOCArMjYsMjQ4IEBACiAjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogCi0iIiJNb2R1bGUgZm9yIGhhbmRsaW5nIG1lc3NhZ2VzIGFuZCBjb25jdXJy
ZW5jeSBmb3IgcnVuLXdlYmtpdC10ZXN0cy4KLQotVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIG1l
c3NhZ2UgYnJva2VyIHRoYXQgY29ubmVjdHMgdGhlIG1hbmFnZXIgdG8gdGhlCi13b3JrZXJzOiBp
dCBwcm92aWRlcyBhIG1lc3NhZ2luZyBhYnN0cmFjdGlvbiBhbmQgbWVzc2FnZSBsb29wcyAoYnVp
bGRpbmcgb24KLXRvcCBvZiBtZXNzYWdlX2Jyb2tlciksIGFuZCBoYW5kbGVzIHN0YXJ0aW5nIHdv
cmtlcnMgYnkgbGF1bmNoaW5nIHByb2Nlc3Nlcy4KLQotVGhlcmUgYXJlIGEgbG90IG9mIGNsYXNz
ZXMgYW5kIG9iamVjdHMgaW52b2x2ZWQgaW4gYSBmdWxseSBjb25uZWN0ZWQgc3lzdGVtLgotVGhl
eSBpbnRlcmFjdCBtb3JlIG9yIGxlc3MgbGlrZToKLQotICBNYW5hZ2VyICAtLT4gIF9JbmxpbmVN
YW5hZ2VyIC0tLT4gX0lubGluZVdvcmtlciA8LT4gV29ya2VyCi0gICAgIF4gICAgICAgICAgICAg
ICAgICAgIFwgICAgICAgICAgICAgICAvICAgICAgICAgICAgICBeCi0gICAgIHwgICAgICAgICAg
ICAgICAgICAgICB2ICAgICAgICAgICAgIHYgICAgICAgICAgICAgICB8Ci0gICAgIFwtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSAgQnJva2VyICAgLS0tLS0tLS0tLS0tLS0tLS8KLQotVGhlIGJyb2tl
ciBzaW1wbHkgZGlzdHJpYnV0ZXMgbWVzc2FnZXMgb250byB0b3BpY3MgKG5hbWVkIHF1ZXVlcyk7
IHRoZSBhY3R1YWwKLXF1ZXVlcyB0aGVtc2VsdmVzIGFyZSBwcm92aWRlZCBieSB0aGUgY2FsbGVy
LCBhcyB0aGUgcXVldWUncyBpbXBsZW1lbnRhdGlvbgotcmVxdWlyZW1lbnRzIHZhcmllcyB2YXJ5
IGRlcGVuZGluZyBvbiB0aGUgZGVzaXJlZCBjb25jdXJyZW5jeSBtb2RlbAotKG5vbmUvdGhyZWFk
cy9wcm9jZXNzZXMpLgotCi1JbiBvcmRlciBmb3Igc2hhcmVkLW5vdGhpbmcgbWVzc2FnaW5nIGJl
dHdlZW4gcHJvY2Vzc2luZyB0byBiZSBwb3NzaWJsZSwKLU1lc3NhZ2VzIG11c3QgYmUgcGlja2xh
YmxlLgotCi1UaGUgbW9kdWxlIGRlZmluZXMgb25lIGludGVyZmFjZSBhbmQgdHdvIGNsYXNzZXMu
IENhbGxlcnMgb2YgdGhpcyBwYWNrYWdlCi1tdXN0IGltcGxlbWVudCB0aGUgQnJva2VyQ2xpZW50
IGludGVyZmFjZSwgYW5kIG1vc3QgY2FsbGVycyB3aWxsIGNyZWF0ZQotX0Jyb2tlckNvbm5lY3Rp
b25zIGFzIHdlbGwgYXMgQnJva2Vycy4KLQotVGhlIGNsYXNzZXMgcmVsYXRlIHRvIGVhY2ggb3Ro
ZXIgYXM6Ci0KLSAgICBCcm9rZXJDbGllbnQgICAtLS0tLS0+ICAgIF9Ccm9rZXJDb25uZWN0aW9u
Ci0gICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgIHwgICAgICAg
ICAgICAgICAgICAgICAgICAgdgotICAgICAgICAgXC0tLS0tLS0tLS0tLS0tLS0gICAgICBfQnJv
a2VyCi0KLShUaGUgQnJva2VyQ2xpZW50IG5ldmVyIGNhbGxzIGJyb2tlciBkaXJlY3RseSBhZnRl
ciBpdCBpcyBjcmVhdGVkLCBvbmx5Ci1fQnJva2VyQ29ubmVjdGlvbi4gIF9Ccm9rZXJDb25uZWN0
aW9uIHBhc3NlcyBhIHJlZmVyZW5jZSB0byBCcm9rZXJDbGllbnQgdG8KLV9Ccm9rZXIsIGFuZCBf
QnJva2VyIG9ubHkgaW52b2tlcyB0aGF0IHJlZmVyZW5jZSwgbmV2ZXIgdGFsa2luZyBkaXJlY3Rs
eSB0bwotQnJva2VyQ29ubmVjdGlvbikuCi0iIiIKKyIiIk1vZHVsZSBmb3IgaGFuZGxpbmcgbWVz
c2FnZXMgYW5kIGNvbmN1cnJlbmN5IGZvciBydW4td2Via2l0LXRlc3RzLiIiIgogCiBpbXBvcnQg
Y1BpY2tsZQogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKLWltcG9ydCBv
cHRwYXJzZQoraW1wb3J0IG9zCiBpbXBvcnQgUXVldWUKIGltcG9ydCBzeXMKK2ltcG9ydCB0aW1l
CiBpbXBvcnQgdHJhY2ViYWNrCiAKIAorZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdCBpbXBvcnQg
SG9zdAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBzdGFja191dGlscworZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudmlld3MgaW1wb3J0IG1ldGVyZWRfc3RyZWFtCiAKIAog
X2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCisjIG1lc3NhZ2UgdHlwZXMKKyhD
T05UUk9MLCBEQVRBKSA9ICgnY29udHJvbCcsICdkYXRhJykKKworZGVmIGdldChob3N0LCBjYWxs
ZXIsIHdvcmtlcl9mYWN0b3J5LCBtYXhfd29ya2Vycywgd29ya2VyX3N0YXJ0dXBfZGVsYXlfc2Vj
cz0wKToKKyAgICByZXR1cm4gX01hbmFnZXIoaG9zdCwgY2FsbGVyLCB3b3JrZXJfZmFjdG9yeSwg
bWF4X3dvcmtlcnMsIHdvcmtlcl9zdGFydHVwX2RlbGF5X3NlY3MpCisKKworY2xhc3MgV29ya2Vy
RXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgIiIiUmFpc2VkIHdoZW4gd2UgcmVjZWl2ZSBhbiB1
bmV4cGVjdGVkL3Vua25vd24gZXhjZXB0aW9uIGZyb20gYSB3b3JrZXIuIiIiCisgICAgcGFzcwor
CisKK2NsYXNzIF9NYW5hZ2VyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3Qs
IGNhbGxlciwgd29ya2VyX2ZhY3RvcnksIG1heF93b3JrZXJzLCB3b3JrZXJfc3RhcnR1cF9kZWxh
eV9zZWNzLCBsb2dnZXI9Tm9uZSk6CisgICAgICAgIHNlbGYuX2hvc3QgPSBob3N0CisgICAgICAg
IHNlbGYuX2NhbGxlciA9IGNhbGxlcgorICAgICAgICBzZWxmLl93b3JrZXJfZmFjdG9yeSA9IHdv
cmtlcl9mYWN0b3J5CisgICAgICAgIHNlbGYuX21heF93b3JrZXJzID0gbWF4X3dvcmtlcnMKKyAg
ICAgICAgc2VsZi5fd29ya2VyX3N0YXJ0dXBfZGVsYXlfc2VjcyA9IHdvcmtlcl9zdGFydHVwX2Rl
bGF5X3NlY3MKKyAgICAgICAgc2VsZi5fbG9nZ2VyID0gbG9nZ2VyIG9yIGxvZ2dpbmcucm9vdAor
ICAgICAgICBzZWxmLl9uYW1lID0gY2FsbGVyLm5hbWUoKQorICAgICAgICBzZWxmLl9ydW5uaW5n
X2lubGluZSA9IChzZWxmLl9tYXhfd29ya2VycyA9PSAxKQorICAgICAgICBpZiBzZWxmLl9ydW5u
aW5nX2lubGluZToKKyAgICAgICAgICAgIHNlbGYuX21lc3NhZ2VzX3RvX3dvcmtlciA9IFF1ZXVl
LlF1ZXVlKCkKKyAgICAgICAgICAgIHNlbGYuX21lc3NhZ2VzX3RvX21hbmFnZXIgPSBRdWV1ZS5R
dWV1ZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9tZXNzYWdlc190b193b3Jr
ZXIgPSBtdWx0aXByb2Nlc3NpbmcuUXVldWUoKQorICAgICAgICAgICAgc2VsZi5fbWVzc2FnZXNf
dG9fbWFuYWdlciA9IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCisgICAgICAgIHNlbGYuX3dvcmtl
cnMgPSBbXQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIGZvciBpIGluIHJhbmdlKHNl
bGYuX21heF93b3JrZXJzKToKKyAgICAgICAgICAgIHNlbGYuX3Bvc3QoQ09OVFJPTCwgJ2RvbmUn
KQorCisgICAgZGVmIHJ1bl9zaGFyZHMoc2VsZiwgYWxsX3NoYXJkcyk6CisgICAgICAgIGZvciBz
aGFyZCBpbiBhbGxfc2hhcmRzOgorICAgICAgICAgICAgc2VsZi5wb3N0KCd0ZXN0X2xpc3QnLCBz
aGFyZC5uYW1lLCBzaGFyZC50ZXN0X2lucHV0cykKKyAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAg
ICAgc2VsZi53YWl0KCkKKworICAgIGRlZiBwb3N0KHNlbGYsIG5hbWUsICphcmdzKToKKyAgICAg
ICAgc2VsZi5fcG9zdChEQVRBLCBuYW1lLCAqYXJncykKKworICAgIGRlZiB3YWl0KHNlbGYpOgor
ICAgICAgICBzZWxmLl9zdGFydF93b3JrZXJzKCkKKyAgICAgICAgaWYgc2VsZi5fcnVubmluZ19p
bmxpbmU6CisgICAgICAgICAgICBzZWxmLl93b3JrZXJzWzBdLnJ1bigpCisgICAgICAgICAgICBz
ZWxmLl9sb29wKGJsb2NrPUZhbHNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5f
bG9vcChibG9jaz1UcnVlKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBmb3Igd29y
a2VyIGluIHNlbGYuX3dvcmtlcnM6CisgICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCkKKyAg
ICAgICAgICAgIHNlbGYuX3dvcmtlcnMgPSBbXQorICAgICAgICBpZiBub3Qgc2VsZi5fcnVubmlu
Z19pbmxpbmU6CisgICAgICAgICAgICBzZWxmLl9tZXNzYWdlc190b193b3JrZXIuY2xvc2UoKQor
ICAgICAgICAgICAgc2VsZi5fbWVzc2FnZXNfdG9fd29ya2VyID0gTm9uZQorICAgICAgICAgICAg
c2VsZi5fbWVzc2FnZXNfdG9fbWFuYWdlci5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9tZXNz
YWdlc190b19tYW5hZ2VyID0gTm9uZQorCisgICAgZGVmIF9wb3N0KHNlbGYsIGtpbmQsIG1lc3Nh
Z2VfbmFtZSwgKmFyZ3MpOgorICAgICAgICBtZXNzYWdlID0geydraW5kJzoga2luZCwgJ25hbWUn
OiBtZXNzYWdlX25hbWUsICdzb3VyY2UnOiBzZWxmLl9uYW1lLCAnKmFyZ3MnOiBhcmdzfQorICAg
ICAgICBzZWxmLl9tZXNzYWdlc190b193b3JrZXIucHV0KG1lc3NhZ2UpCisKKyAgICBkZWYgX3N0
YXJ0X3dvcmtlcnMoc2VsZik6CisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fd29ya2VycworICAg
ICAgICBzZWxmLl93b3JrZXJzX3N0b3BwZWQgPSBzZXQoKQorICAgICAgICBob3N0ID0gTm9uZQor
ICAgICAgICBpZiBzZWxmLl9ydW5uaW5nX2lubGluZSBvciBzZWxmLl9jYW5fcGlja2xlKGhvc3Qp
OgorICAgICAgICAgICAgaG9zdCA9IHNlbGYuX2hvc3QKKworICAgICAgICBmb3Igd29ya2VyX251
bWJlciBpbiByYW5nZShzZWxmLl9tYXhfd29ya2Vycyk6CisgICAgICAgICAgICB3b3JrZXIgPSBf
V29ya2VyKGhvc3QsIHNlbGYuX21lc3NhZ2VzX3RvX21hbmFnZXIsIHNlbGYuX21lc3NhZ2VzX3Rv
X3dvcmtlciwgc2VsZi5fd29ya2VyX2ZhY3RvcnksIHdvcmtlcl9udW1iZXIpCisgICAgICAgICAg
ICBzZWxmLl93b3JrZXJzLmFwcGVuZCh3b3JrZXIpCisgICAgICAgICAgICBpZiBzZWxmLl9ydW5u
aW5nX2lubGluZToKKyAgICAgICAgICAgICAgICB3b3JrZXIubWFuYWdlciA9IHNlbGYKKyAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgd29ya2VyLnN0YXJ0KCkKKyAgICAgICAgICAg
ICAgICBpZiBzZWxmLl93b3JrZXJfc3RhcnR1cF9kZWxheV9zZWNzOgorICAgICAgICAgICAgICAg
ICAgICB0aW1lLnNsZWVwKHNlbGYuX3dvcmtlcl9zdGFydHVwX2RlbGF5X3NlY3MpCisKKyAgICBk
ZWYgX2Nhbl9waWNrbGUoc2VsZiwgaG9zdCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNQ
aWNrbGUuZHVtcHMoc2VsZi5faG9zdCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAg
IGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAotIwotIyBUb3Bp
YyBuYW1lcyBmb3IgTWFuYWdlciA8LT4gV29ya2VyIG1lc3NhZ2luZwotIwotTUFOQUdFUl9UT1BJ
QyA9ICdtYW5hZ2VycycKLUFOWV9XT1JLRVJfVE9QSUMgPSAnd29ya2VycycKLQotCi1kZWYgZ2V0
KG1heF93b3JrZXJzLCBjbGllbnQsIHdvcmtlcl9jbGFzcyk6Ci0gICAgIiIiUmV0dXJuIGEgY29u
bmVjdGlvbiB0byBhIG1hbmFnZXIvd29ya2VyIG1lc3NhZ2VfYnJva2VyCi0KLSAgICBBcmdzOgot
ICAgICAgICBtYXhfd29ya2VycyAtIG1heCAjIG9mIHdvcmtlcnMgdG8gcnVuIGNvbmN1cnJlbnRs
eS4KLSAgICAgICAgY2xpZW50IC0gQnJva2VyQ2xpZW50IGltcGxlbWVudGF0aW9uIHRvIGRpc3Bh
dGNoCi0gICAgICAgICAgICByZXBsaWVzIHRvLgotICAgICAgICB3b3JrZXJfY2xhc3MgLSB0eXBl
IG9mIHdvcmtlcnMgdG8gY3JlYXRlLiBUaGlzIGNsYXNzIHNob3VsZCBvdmVycmlkZQotICAgICAg
ICAgICAgdGhlIG1ldGhvZHMgaW4gQWJzdHJhY3RXb3JrZXIuCi0gICAgUmV0dXJuczoKLSAgICAg
ICAgQSBoYW5kbGUgdG8gYW4gb2JqZWN0IHRoYXQgd2lsbCB0YWxrIHRvIGEgbWVzc2FnZSBicm9r
ZXIgY29uZmlndXJlZAotICAgICAgICBmb3IgdGhlIG5vcm1hbCBtYW5hZ2VyL3dvcmtlciBjb21t
dW5pY2F0aW9uLiIiIgotICAgIGlmIG1heF93b3JrZXJzID09IDE6Ci0gICAgICAgIHF1ZXVlX2Ns
YXNzID0gUXVldWUuUXVldWUKLSAgICAgICAgbWFuYWdlcl9jbGFzcyA9IF9JbmxpbmVNYW5hZ2Vy
Ci0gICAgZWxzZToKLSAgICAgICAgcXVldWVfY2xhc3MgPSBtdWx0aXByb2Nlc3NpbmcuUXVldWUK
LSAgICAgICAgbWFuYWdlcl9jbGFzcyA9IF9NdWx0aVByb2Nlc3NNYW5hZ2VyCi0KLSAgICBicm9r
ZXIgPSBfQnJva2VyKHF1ZXVlX2NsYXNzKQotICAgIHJldHVybiBtYW5hZ2VyX2NsYXNzKGJyb2tl
ciwgY2xpZW50LCB3b3JrZXJfY2xhc3MpCi0KLQotY2xhc3MgQnJva2VyQ2xpZW50KG9iamVjdCk6
Ci0gICAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyAvIGludGVyZmFjZSB0aGF0IGFsbCBtZXNzYWdl
IGJyb2tlciBjbGllbnRzIG11c3QKLSAgICBpbXBsZW1lbnQuIEluIGFkZGl0aW9uIHRvIHRoZSBt
ZXRob2RzIGJlbG93LCBieSBjb252ZW50aW9uIGNsaWVudHMKLSAgICBpbXBsZW1lbnQgcm91dGlu
ZXMgb2YgdGhlIHNpZ25hdHVyZSB0eXBlCi0KLSAgICAgICAgaGFuZGxlX01FU1NBR0VfTkFNRShz
ZWxmLCBzcmMsIC4uLik6Ci0KLSAgICB3aGVyZSBNRVNTQUdFX05BTUUgbWF0Y2hlcyB0aGUgc3Ry
aW5nIHBhc3NlZCB0byBwb3N0X21lc3NhZ2UoKSwgYW5kCi0gICAgc3JjIGluZGljYXRlcyB0aGUg
bmFtZSBvZiB0aGUgc2VuZGVyLiBJZiB0aGUgbWVzc2FnZSBjb250YWlucyB2YWx1ZXMgaW4KLSAg
ICB0aGUgbWVzc2FnZSBib2R5LCB0aG9zZSB3aWxsIGJlIHByb3ZpZGVkIGFzIG9wdHBhcmFtcy4i
IiIKLQotICAgIGRlZiBpc19kb25lKHNlbGYpOgotICAgICAgICAiIiJDYWxsZWQgZnJvbSBpbnNp
ZGUgcnVuX21lc3NhZ2VfbG9vcCgpIHRvIGluZGljYXRlIHdoZXRoZXIgdG8gZXhpdC4iIiIKLSAg
ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgZGVmIG5hbWUoc2VsZik6Ci0g
ICAgICAgICIiIlJldHVybiBhIG5hbWUgdGhhdCBpZGVudGlmaWVzIHRoZSBjbGllbnQuIiIiCi0g
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotCi1jbGFzcyBfQnJva2VyKG9iamVj
dCk6Ci0gICAgIiIiQnJva2VycyBwcm92aWRlIHRoZSBiYXNpYyBtb2RlbCBvZiBhIHNldCBvZiB0
b3BpY3MuIENsaWVudHMgY2FuIHBvc3QgYQotICAgIG1lc3NhZ2UgdG8gYW55IHRvcGljIHVzaW5n
IHBvc3RfbWVzc2FnZSgpLCBhbmQgY2FuIHByb2Nlc3MgbWVzc2FnZXMgb24gb25lCi0gICAgdG9w
aWMgYXQgYSB0aW1lIHVzaW5nIHJ1bl9tZXNzYWdlX2xvb3AoKS4iIiIKLQotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBxdWV1ZV9tYWtlcik6Ci0gICAgICAgICIiIkFyZ3M6Ci0gICAgICAgICAgICBx
dWV1ZV9tYWtlcjogYSBmYWN0b3J5IG1ldGhvZCB0aGF0IHJldHVybnMgb2JqZWN0cyBpbXBsZW1l
bnRpbmcgYQotICAgICAgICAgICAgICAgIFF1ZXVlIGludGVyZmFjZSAocHV0KCkvZ2V0KCkpLgot
ICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fcXVldWVfbWFrZXIgPSBxdWV1ZV9tYWtlcgotICAg
ICAgICBzZWxmLl90b3BpY3MgPSB7fQotCi0gICAgZGVmIF9fZGVsX18oc2VsZik6Ci0gICAgICAg
IHNlbGYuY2xlYW51cCgpCi0KLSAgICBkZWYgY2xlYW51cChzZWxmKToKLSAgICAgICAgZm9yIHF1
ZXVlIGluIHNlbGYuX3RvcGljcy52YWx1ZXMoKToKLSAgICAgICAgICAgIGlmIGhhc2F0dHIocXVl
dWUsICdjbG9zZScpOgotICAgICAgICAgICAgICAgIHF1ZXVlLmNsb3NlKCkKLSAgICAgICAgc2Vs
Zi5fdG9waWNzID0ge30KLQotICAgIGRlZiBhZGRfdG9waWMoc2VsZiwgdG9waWNfbmFtZSk6Ci0g
ICAgICAgIGlmIHRvcGljX25hbWUgbm90IGluIHNlbGYuX3RvcGljczoKLSAgICAgICAgICAgIHNl
bGYuX3RvcGljc1t0b3BpY19uYW1lXSA9IHNlbGYuX3F1ZXVlX21ha2VyKCkKLQotICAgIGRlZiBf
Z2V0X3F1ZXVlX2Zvcl90b3BpYyhzZWxmLCB0b3BpY19uYW1lKToKLSAgICAgICAgcmV0dXJuIHNl
bGYuX3RvcGljc1t0b3BpY19uYW1lXQotCi0gICAgZGVmIHBvc3RfbWVzc2FnZShzZWxmLCBjbGll
bnQsIHRvcGljX25hbWUsIG1lc3NhZ2VfbmFtZSwgKm1lc3NhZ2VfYXJncyk6Ci0gICAgICAgICIi
IlBvc3QgYSBtZXNzYWdlIHRvIHRoZSBhcHByb3ByaWF0ZSB0b3BpYyBuYW1lLgotCi0gICAgICAg
IE1lc3NhZ2VzIGhhdmUgYSBuYW1lIGFuZCBhIHR1cGxlIG9mIG9wdGlvbmFsIGFyZ3VtZW50cy4g
Qm90aCBtdXN0IGJlIHBpY2tsYWJsZS4iIiIKLSAgICAgICAgbWVzc2FnZSA9IF9NZXNzYWdlKGNs
aWVudC5uYW1lKCksIHRvcGljX25hbWUsIG1lc3NhZ2VfbmFtZSwgbWVzc2FnZV9hcmdzKQotICAg
ICAgICBxdWV1ZSA9IHNlbGYuX2dldF9xdWV1ZV9mb3JfdG9waWModG9waWNfbmFtZSkKLSAgICAg
ICAgcXVldWUucHV0KF9NZXNzYWdlLmR1bXBzKG1lc3NhZ2UpKQotCi0gICAgZGVmIHJ1bl9tZXNz
YWdlX2xvb3Aoc2VsZiwgdG9waWNfbmFtZSwgY2xpZW50LCBkZWxheV9zZWNzPU5vbmUpOgotICAg
ICAgICAiIiJMb29wIHByb2Nlc3NpbmcgbWVzc2FnZXMgdW50aWwgY2xpZW50LmlzX2RvbmUoKSBv
ciBkZWxheSBwYXNzZXMuCi0KLSAgICAgICAgVG8gcnVuIGluZGVmaW5pdGVseSwgc2V0IGRlbGF5
X3NlY3MgdG8gTm9uZS4iIiIKLSAgICAgICAgYXNzZXJ0IGRlbGF5X3NlY3MgaXMgTm9uZSBvciBk
ZWxheV9zZWNzID4gMAotICAgICAgICBzZWxmLl9ydW5fbG9vcCh0b3BpY19uYW1lLCBjbGllbnQs
IGJsb2NrPVRydWUsIGRlbGF5X3NlY3M9ZGVsYXlfc2VjcykKLQotICAgIGRlZiBydW5fYWxsX3Bl
bmRpbmcoc2VsZiwgdG9waWNfbmFtZSwgY2xpZW50KToKLSAgICAgICAgIiIiUHJvY2VzcyBtZXNz
YWdlcyB1bnRpbCBjbGllbnQuaXNfZG9uZSgpIG9yIGNhbGxlciB3b3VsZCBibG9jay4iIiIKLSAg
ICAgICAgc2VsZi5fcnVuX2xvb3AodG9waWNfbmFtZSwgY2xpZW50LCBibG9jaz1GYWxzZSwgZGVs
YXlfc2Vjcz1Ob25lKQotCi0gICAgZGVmIF9ydW5fbG9vcChzZWxmLCB0b3BpY19uYW1lLCBjbGll
bnQsIGJsb2NrLCBkZWxheV9zZWNzKToKLSAgICAgICAgcXVldWUgPSBzZWxmLl9nZXRfcXVldWVf
Zm9yX3RvcGljKHRvcGljX25hbWUpCi0gICAgICAgIHdoaWxlIG5vdCBjbGllbnQuaXNfZG9uZSgp
OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHMgPSBxdWV1ZS5nZXQoYmxvY2ss
IGRlbGF5X3NlY3MpCi0gICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuCi0gICAgICAgICAgICBtc2cgPSBfTWVzc2FnZS5sb2FkcyhzKQotICAgICAg
ICAgICAgc2VsZi5fZGlzcGF0Y2hfbWVzc2FnZShtc2csIGNsaWVudCkKLQotICAgIGRlZiBfZGlz
cGF0Y2hfbWVzc2FnZShzZWxmLCBtZXNzYWdlLCBjbGllbnQpOgotICAgICAgICBpZiBub3QgaGFz
YXR0cihjbGllbnQsICdoYW5kbGVfJyArIG1lc3NhZ2UubmFtZSk6Ci0gICAgICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKAotICAgICAgICAgICAgICAgIiVzOiByZWNlaXZlZCBtZXNzYWdlICclcycg
aXQgY291bGRuJ3QgaGFuZGxlIiAlCi0gICAgICAgICAgICAgICAoY2xpZW50Lm5hbWUoKSwgbWVz
c2FnZS5uYW1lKSkKLSAgICAgICAgb3B0YXJncyA9IG1lc3NhZ2UuYXJncwotICAgICAgICBtZXNz
YWdlX2hhbmRsZXIgPSBnZXRhdHRyKGNsaWVudCwgJ2hhbmRsZV8nICsgbWVzc2FnZS5uYW1lKQot
ICAgICAgICBtZXNzYWdlX2hhbmRsZXIobWVzc2FnZS5zcmMsICpvcHRhcmdzKQotCi0KLWNsYXNz
IF9NZXNzYWdlKG9iamVjdCk6Ci0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBsb2FkcyhzdHJp
bmdfdmFsdWUpOgotICAgICAgICBvYmogPSBjUGlja2xlLmxvYWRzKHN0cmluZ192YWx1ZSkKLSAg
ICAgICAgYXNzZXJ0KGlzaW5zdGFuY2Uob2JqLCBfTWVzc2FnZSkpCi0gICAgICAgIHJldHVybiBv
YmoKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzcmMsIHRvcGljX25hbWUsIG1lc3NhZ2VfbmFt
ZSwgbWVzc2FnZV9hcmdzKToKLSAgICAgICAgc2VsZi5zcmMgPSBzcmMKLSAgICAgICAgc2VsZi50
b3BpY19uYW1lID0gdG9waWNfbmFtZQotICAgICAgICBzZWxmLm5hbWUgPSBtZXNzYWdlX25hbWUK
LSAgICAgICAgc2VsZi5hcmdzID0gbWVzc2FnZV9hcmdzCi0KLSAgICBkZWYgZHVtcHMoc2VsZik6
Ci0gICAgICAgIHJldHVybiBjUGlja2xlLmR1bXBzKHNlbGYpCi0KLSAgICBkZWYgX19yZXByX18o
c2VsZik6Ci0gICAgICAgIHJldHVybiAoIl9NZXNzYWdlKGZyb209JyVzJywgdG9waWNfbmFtZT0n
JXMnLCBtZXNzYWdlX25hbWU9JyVzJykiICUKLSAgICAgICAgICAgICAgICAoc2VsZi5zcmMsIHNl
bGYudG9waWNfbmFtZSwgc2VsZi5uYW1lKSkKLQotCi1jbGFzcyBfQnJva2VyQ29ubmVjdGlvbihv
YmplY3QpOgotICAgICIiIl9Ccm9rZXJDb25uZWN0aW9uIHByb3ZpZGVzIGEgY29ubmVjdGlvbi1v
cmllbnRlZCBmYWNhZGUgb24gdG9wIG9mIGEKLSAgICBCcm9rZXIsIHNvIHRoYXQgY2FsbGVycyBk
b24ndCBoYXZlIHRvIHJlcGVhdGVkbHkgcGFzcyB0aGUgc2FtZSB0b3BpYwotICAgIG5hbWVzIG92
ZXIgYW5kIG92ZXIuIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBjbGllbnQs
IHJ1bl90b3BpYywgcG9zdF90b3BpYyk6Ci0gICAgICAgICIiIkNyZWF0ZSBhIF9Ccm9rZXJDb25u
ZWN0aW9uIG9uIHRvcCBvZiBhIF9Ccm9rZXIuIE5vdGUgdGhhdCB0aGUgX0Jyb2tlcgotICAgICAg
ICBpcyBwYXNzZWQgaW4gcmF0aGVyIHRoYW4gY3JlYXRlZCBzbyB0aGF0IGEgc2luZ2xlIF9Ccm9r
ZXIgY2FuIGJlIHVzZWQKLSAgICAgICAgYnkgbXVsdGlwbGUgX0Jyb2tlckNvbm5lY3Rpb25zLiIi
IgotICAgICAgICBzZWxmLl9icm9rZXIgPSBicm9rZXIKLSAgICAgICAgc2VsZi5fY2xpZW50ID0g
Y2xpZW50Ci0gICAgICAgIHNlbGYuX3Bvc3RfdG9waWMgPSBwb3N0X3RvcGljCi0gICAgICAgIHNl
bGYuX3J1bl90b3BpYyA9IHJ1bl90b3BpYwotICAgICAgICBicm9rZXIuYWRkX3RvcGljKHJ1bl90
b3BpYykKLSAgICAgICAgYnJva2VyLmFkZF90b3BpYyhwb3N0X3RvcGljKQotCi0gICAgZGVmIGNs
ZWFudXAoc2VsZik6Ci0gICAgICAgIHNlbGYuX2Jyb2tlci5jbGVhbnVwKCkKLSAgICAgICAgc2Vs
Zi5fYnJva2VyID0gTm9uZQotCi0gICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgZGVsYXlf
c2Vjcz1Ob25lKToKLSAgICAgICAgc2VsZi5fYnJva2VyLnJ1bl9tZXNzYWdlX2xvb3Aoc2VsZi5f
cnVuX3RvcGljLCBzZWxmLl9jbGllbnQsIGRlbGF5X3NlY3MpCi0KLSAgICBkZWYgcG9zdF9tZXNz
YWdlKHNlbGYsIG1lc3NhZ2VfbmFtZSwgKm1lc3NhZ2VfYXJncyk6Ci0gICAgICAgIHNlbGYuX2Jy
b2tlci5wb3N0X21lc3NhZ2Uoc2VsZi5fY2xpZW50LCBzZWxmLl9wb3N0X3RvcGljLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfbmFtZSwgKm1lc3NhZ2VfYXJncykK
LQotICAgIGRlZiByYWlzZV9leGNlcHRpb24oc2VsZiwgZXhjX2luZm8pOgotICAgICAgICAjIFNp
bmNlIHRyYWNlYmFja3MgYXJlbid0IHBpY2tsYWJsZSwgc2VuZCB0aGUgZXh0cmFjdGVkIHN0YWNr
IGluc3RlYWQuCi0gICAgICAgIGV4Y2VwdGlvbl90eXBlLCBleGNlcHRpb25fdmFsdWUsIGV4Y2Vw
dGlvbl90cmFjZWJhY2sgPSBzeXMuZXhjX2luZm8oKQotICAgICAgICBzdGFja191dGlscy5sb2df
dHJhY2ViYWNrKF9sb2cuZGVidWcsIGV4Y2VwdGlvbl90cmFjZWJhY2spCi0gICAgICAgIHN0YWNr
ID0gdHJhY2ViYWNrLmV4dHJhY3RfdGIoZXhjZXB0aW9uX3RyYWNlYmFjaykKLSAgICAgICAgc2Vs
Zi5fYnJva2VyLnBvc3RfbWVzc2FnZShzZWxmLl9jbGllbnQsIHNlbGYuX3Bvc3RfdG9waWMsICdl
eGNlcHRpb24nLCBleGNlcHRpb25fdHlwZSwgZXhjZXB0aW9uX3ZhbHVlLCBzdGFjaykKLQotCi1j
bGFzcyBBYnN0cmFjdFdvcmtlcihCcm9rZXJDbGllbnQpOgotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCB3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX2FyZ3VtZW50cz1Ob25lKToKLSAgICAgICAgIiIi
VGhlIGNvbnN0cnVjdG9yIHNob3VsZCBiZSB1c2VkIHRvIGRvIGFueSBzaW1wbGUgaW5pdGlhbGl6
YXRpb24KLSAgICAgICAgbmVjZXNzYXJ5LCBidXQgc2hvdWxkIG5vdCBkbyBhbnl0aGluZyB0aGF0
IGNyZWF0ZXMgZGF0YSBzdHJ1Y3R1cmVzCi0gICAgICAgIHRoYXQgY2Fubm90IGJlIFBpY2tsZWQg
b3Igc2VudCBhY3Jvc3MgcHJvY2Vzc2VzIChsaWtlIG9wZW5pbmcKLSAgICAgICAgZmlsZXMgb3Ig
c29ja2V0cykuIENvbXBsZXggaW5pdGlhbGl6YXRpb24gc2hvdWxkIGJlIGRvbmUgYXQgdGhlCi0g
ICAgICAgIHN0YXJ0IG9mIHRoZSBydW4oKSBjYWxsLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAg
ICAgICB3b3JrZXJfY29ubmVjdGlvbiAtIGhhbmRsZSB0byB0aGUgX0Jyb2tlckNvbm5lY3Rpb24g
b2JqZWN0IGNyZWF0aW5nCi0gICAgICAgICAgICAgICAgdGhlIHdvcmtlciBhbmQgdGhhdCBjYW4g
YmUgdXNlZCBmb3IgbWVzc2FnaW5nLgotICAgICAgICAgICAgd29ya2VyX2FyZ3VtZW50cyAtIChv
cHRpb25hbCwgUGlja2xhYmxlKSBvYmplY3QgcGFzc2VkIHRvIHRoZSB3b3JrZXIgZnJvbSB0aGUg
bWFuYWdlciIiIgotICAgICAgICBCcm9rZXJDbGllbnQuX19pbml0X18oc2VsZikKLSAgICAgICAg
c2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24gPSB3b3JrZXJfY29ubmVjdGlvbgotICAgICAgICBzZWxm
Ll9uYW1lID0gJ3dvcmtlcicKKyAgICBkZWYgX2xvb3Aoc2VsZiwgYmxvY2spOgorICAgICAgICB0
cnk6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIGlmIGxlbihzZWxm
Ll93b3JrZXJzX3N0b3BwZWQpID09IGxlbihzZWxmLl93b3JrZXJzKToKKyAgICAgICAgICAgICAg
ICAgICAgYmxvY2sgPSBGYWxzZQorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBzZWxmLl9tZXNz
YWdlc190b19tYW5hZ2VyLmdldChibG9jaykKKyAgICAgICAgICAgICAgICBmb3IgcmVjb3JkIGlu
IG1lc3NhZ2VbJ2xvZ3MnXToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmhhbmRs
ZShyZWNvcmQpCisgICAgICAgICAgICAgICAgaWYgbWVzc2FnZVsna2luZCddID09IERBVEE6Cisg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxlci5oYW5kbGUobWVzc2FnZVsnbmFtZSddLCBt
ZXNzYWdlWydzb3VyY2UnXSwgKm1lc3NhZ2VbJyphcmdzJ10pCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLCAnX2hhbmRs
ZV8nICsgbWVzc2FnZVsnbmFtZSddKQorICAgICAgICAgICAgICAgIGFzc2VydCBtZXRob2QsICdi
YWQgbWVzc2FnZSAlcycgJSByZXByKG1lc3NhZ2UpCisgICAgICAgICAgICAgICAgbWV0aG9kKG1l
c3NhZ2VbJ3NvdXJjZSddLCAqbWVzc2FnZVsnKmFyZ3MnXSkKKyAgICAgICAgZXhjZXB0IFF1ZXVl
LkVtcHR5OgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIF9oYW5kbGVfd29ya2VyX2RvbmUo
c2VsZiwgc291cmNlKToKKyAgICAgICAgc2VsZi5fd29ya2Vyc19zdG9wcGVkLmFkZChzb3VyY2Up
CisKKyAgICBkZWYgX2hhbmRsZV93b3JrZXJfZXhjZXB0aW9uKHNlbGYsIHNvdXJjZSwgZXhjZXB0
aW9uX3R5cGUsIGV4Y2VwdGlvbl92YWx1ZSwgc3RhY2spOgorICAgICAgICBpZiBleGNlcHRpb25f
dHlwZSA9PSBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbl90
eXBlKGV4Y2VwdGlvbl92YWx1ZSkKKyAgICAgICAgX2xvZy5lcnJvcigiJXMgcmFpc2VkICVzKCcl
cycpOiIgJSAoCisgICAgICAgICAgICAgICAgICAgc291cmNlLCBleGNlcHRpb25fdmFsdWUuX19j
bGFzc19fLl9fbmFtZV9fLCBzdHIoZXhjZXB0aW9uX3ZhbHVlKSkpCisgICAgICAgIHJhaXNlIFdv
cmtlckV4Y2VwdGlvbihzdHIoZXhjZXB0aW9uX3ZhbHVlKSkKKworCitjbGFzcyBfV29ya2VyKG11
bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgbWVz
c2FnZXNfdG9fbWFuYWdlciwgbWVzc2FnZXNfdG9fd29ya2VyLCB3b3JrZXJfZmFjdG9yeSwgd29y
a2VyX251bWJlcik6CisgICAgICAgIHN1cGVyKF9Xb3JrZXIsIHNlbGYpLl9faW5pdF9fKCkKKyAg
ICAgICAgc2VsZi5faG9zdCA9IGhvc3QKKyAgICAgICAgc2VsZi5fbWVzc2FnZXNfdG9fbWFuYWdl
ciA9IG1lc3NhZ2VzX3RvX21hbmFnZXIKKyAgICAgICAgc2VsZi5fbWVzc2FnZXNfdG9fd29ya2Vy
ID0gbWVzc2FnZXNfdG9fd29ya2VyCisgICAgICAgIHNlbGYuX3dvcmtlciA9IHdvcmtlcl9mYWN0
b3J5KHNlbGYsIHdvcmtlcl9udW1iZXIpCisgICAgICAgIHNlbGYubWFuYWdlciA9IE5vbmUKICAg
ICAgICAgc2VsZi5fZG9uZSA9IEZhbHNlCi0gICAgICAgIHNlbGYuX2NhbmNlbGVkID0gRmFsc2UK
LQotICAgIGRlZiBuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQotCi0gICAg
ZGVmIGlzX2RvbmUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9kb25lIG9yIHNlbGYuX2Nh
bmNlbGVkCi0KLSAgICBkZWYgc3RvcF9oYW5kbGluZ19tZXNzYWdlcyhzZWxmKToKLSAgICAgICAg
c2VsZi5fZG9uZSA9IFRydWUKKyAgICAgICAgc2VsZi5fbG9nX21lc3NhZ2VzID0gW10KKyAgICAg
ICAgc2VsZi5fbG9nZ2VyID0gTm9uZQorICAgICAgICBzZWxmLl9sb2dfaGFuZGxlciA9IE5vbmUK
KworICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3dvcmtlcjoKKyAg
ICAgICAgICAgIHNlbGYuX3dvcmtlci5zdG9wKCkKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlciA9
IE5vbmUKKyAgICAgICAgaWYgc2VsZi5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc3VwZXIoX1dv
cmtlciwgc2VsZikudGVybWluYXRlKCkKKworICAgIGRlZiBfY2xvc2Uoc2VsZik6CisgICAgICAg
IGlmIHNlbGYuX2xvZ19oYW5kbGVyIGFuZCBzZWxmLl9sb2dnZXI6CisgICAgICAgICAgICBzZWxm
Ll9sb2dnZXIucmVtb3ZlSGFuZGxlcihzZWxmLl9sb2dfaGFuZGxlcikKKyAgICAgICAgc2VsZi5f
bG9nX2hhbmRsZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2xvZ2dlciA9IE5vbmUKIAogICAgIGRl
ZiBydW4oc2VsZik6Ci0gICAgICAgICIiIkNhbGxiYWNrIGZvciB0aGUgd29ya2VyIHRvIHN0YXJ0
IGV4ZWN1dGluZy4gVHlwaWNhbGx5IGRvZXMgYW55Ci0gICAgICAgIHJlbWFpbmluZyBpbml0aWFs
aXphdGlvbiBhbmQgdGhlbiBjYWxscyBicm9rZXJfY29ubmVjdGlvbi5ydW5fbWVzc2FnZV9sb29w
KCkuIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl9ob3N0OgorICAgICAgICAgICAgc2VsZi5faG9z
dCA9IEhvc3QoKQorICAgICAgICBpZiBub3Qgc2VsZi5tYW5hZ2VyOgorICAgICAgICAgICAgc2Vs
Zi5fc2V0X3VwX2xvZ2dpbmcoKQorCisgICAgICAgIHdvcmtlciA9IHNlbGYuX3dvcmtlcgorICAg
ICAgICBzZWxmLl93b3JrZXJfbmFtZSA9IHdvcmtlci5uYW1lKCkKICAgICAgICAgZXhjZXB0aW9u
X21zZyA9ICIiCisgICAgICAgIF9sb2cuZGVidWcoIiVzIHN0YXJ0aW5nIiAlIHNlbGYuX3dvcmtl
cl9uYW1lKQorICAgICAgICB3b3JrZXIuc3RhcnQoc2VsZi5faG9zdCkKIAogICAgICAgICB0cnk6
Ci0gICAgICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5ydW5fbWVzc2FnZV9sb29wKCkK
LSAgICAgICAgICAgIGlmIG5vdCBzZWxmLmlzX2RvbmUoKToKLSAgICAgICAgICAgICAgICByYWlz
ZSBBc3NlcnRpb25FcnJvcigiJXM6IHJhbiBvdXQgb2YgbWVzc2FnZXMgaW4gd29ya2VyIHF1ZXVl
LiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHNlbGYuX25hbWUpCi0g
ICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHdoaWxlIG5vdCBz
ZWxmLl9kb25lOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBzZWxmLl9tZXNzYWdlc190b193
b3JrZXIuZ2V0KCkKKyAgICAgICAgICAgICAgICBpZiBtZXNzYWdlWydraW5kJ10gPT0gREFUQToK
KyAgICAgICAgICAgICAgICAgICAgd29ya2VyLmhhbmRsZShtZXNzYWdlWyduYW1lJ10sIG1lc3Nh
Z2VbJ3NvdXJjZSddLCAqbWVzc2FnZVsnKmFyZ3MnXSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWUKKyAgICAgICAgICAgICAgICBhc3NlcnQgbWVzc2FnZVsnbmFtZSddID09ICdkb25lJywg
J2JhZCBtZXNzYWdlICVzJyAlIHJlcHIobWVzc2FnZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9k
b25lID0gVHJ1ZQorICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICBhc3Nl
cnQgc2VsZi5fZG9uZSwgJyVzOiByYW4gb3V0IG9mIG1lc3NhZ2VzIGluIHdvcmtlciBxdWV1ZS4n
ICUgc2VsZi5fd29ya2VyX25hbWUKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0LCBl
OgogICAgICAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIsIGludGVycnVwdGVkIgotICAgICAgICAg
ICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucmFpc2VfZXhjZXB0aW9uKHN5cy5leGNfaW5mbygp
KQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBleGNlcHRpb25fbXNnID0gIiwgZXhjZXB0
aW9uIHJhaXNlZCIKLSAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnJhaXNlX2V4
Y2VwdGlvbihzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLm1hbmFnZXI6
CisgICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCd3b3JrZXIgZXhjZXB0aW9uJykKKyAgICAg
ICAgICAgICAgICBzZWxmLl9yYWlzZShzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgIHJhaXNl
CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBleGNlcHRpb25fbXNn
ID0gIiwgZXhjZXB0aW9uIHJhaXNlZDogJXMiICUgc3RyKGUpCisgICAgICAgICAgICBpZiBub3Qg
c2VsZi5tYW5hZ2VyOgorICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygnd29ya2VyIGV4Y2Vw
dGlvbicpCisgICAgICAgICAgICAgICAgc2VsZi5fcmFpc2Uoc3lzLmV4Y19pbmZvKCkpCisgICAg
ICAgICAgICByYWlzZQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgX2xvZy5kZWJ1Zygi
JXMgZG9uZSB3aXRoIG1lc3NhZ2UgbG9vcCVzIiAlIChzZWxmLl9uYW1lLCBleGNlcHRpb25fbXNn
KSkKLQotICAgIGRlZiBjYW5jZWwoc2VsZik6Ci0gICAgICAgICIiIkNhbGxlZCB3aGVuIHBvc3Np
YmxlIHRvIGluZGljYXRlIHRvIHRoZSB3b3JrZXIgdG8gc3RvcCBwcm9jZXNzaW5nCi0gICAgICAg
IG1lc3NhZ2VzIGFuZCBzaHV0IGRvd24uIE5vdGUgdGhhdCB3b3JrZXJzIG1heSBiZSBzdG9wcGVk
IHdpdGhvdXQgdGhpcwotICAgICAgICBtZXRob2QgYmVpbmcgY2FsbGVkLCBzbyBjbGllbnRzIHNo
b3VsZCBub3QgcmVseSBzb2xlbHkgb24gdGhpcy4iIiIKLSAgICAgICAgc2VsZi5fY2FuY2VsZWQg
PSBUcnVlCi0KLQotY2xhc3MgX01hbmFnZXJDb25uZWN0aW9uKF9Ccm9rZXJDb25uZWN0aW9uKToK
LSAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBjbGllbnQsIHdvcmtlcl9jbGFzcyk6Ci0g
ICAgICAgICIiIkJhc2UgaW5pdGlhbGl6YXRpb24gZm9yIGFsbCBNYW5hZ2VyIG9iamVjdHMuCi0K
LSAgICAgICAgQXJnczoKLSAgICAgICAgICAgIGJyb2tlcjogaGFuZGxlIHRvIHRoZSBtZXNzYWdl
X2Jyb2tlciBvYmplY3QKLSAgICAgICAgICAgIGNsaWVudDogY2FsbGJhY2sgb2JqZWN0ICh0aGUg
Y2FsbGVyKQotICAgICAgICAgICAgd29ya2VyX2NsYXNzOiBjbGFzcyBvYmplY3QgdG8gdXNlIHRv
IGNyZWF0ZSB3b3JrZXJzLgotICAgICAgICAiIiIKLSAgICAgICAgX0Jyb2tlckNvbm5lY3Rpb24u
X19pbml0X18oc2VsZiwgYnJva2VyLCBjbGllbnQsIE1BTkFHRVJfVE9QSUMsIEFOWV9XT1JLRVJf
VE9QSUMpCi0gICAgICAgIHNlbGYuX3dvcmtlcl9jbGFzcyA9IHdvcmtlcl9jbGFzcwotCi0gICAg
ZGVmIHN0YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfYXJndW1lbnRzPU5vbmUpOgotICAgICAgICAi
IiJTdGFydHMgYSBuZXcgd29ya2VyLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICB3b3Jr
ZXJfYXJndW1lbnRzIC0gYW4gb3B0aW9uYWwgUGlja2xhYmxlIG9iamVjdCB0aGF0IGlzIHBhc3Nl
ZCB0byB0aGUgd29ya2VyIGNvbnN0cnVjdG9yCi0gICAgICAgICIiIgotICAgICAgICByYWlzZSBO
b3RJbXBsZW1lbnRlZEVycm9yCi0KLQotY2xhc3MgX0lubGluZU1hbmFnZXIoX01hbmFnZXJDb25u
ZWN0aW9uKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBjbGllbnQsIHdvcmtlcl9j
bGFzcyk6Ci0gICAgICAgIF9NYW5hZ2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIs
IGNsaWVudCwgd29ya2VyX2NsYXNzKQotICAgICAgICBzZWxmLl9pbmxpbmVfd29ya2VyID0gTm9u
ZQorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgZXhpdGluZyVzIiAlIChzZWxmLl93b3JrZXJf
bmFtZSwgZXhjZXB0aW9uX21zZykpCisgICAgICAgICAgICB3b3JrZXIuc3RvcCgpCisgICAgICAg
ICAgICBzZWxmLl9wb3N0KENPTlRST0wsICd3b3JrZXJfZG9uZScpCisgICAgICAgICAgICBzZWxm
Ll9jbG9zZSgpCiAKLSAgICBkZWYgc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9hcmd1bWVudHM9
Tm9uZSk6Ci0gICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIgPSBfSW5saW5lV29ya2VyQ29ubmVj
dGlvbihzZWxmLl9icm9rZXIsCi0gICAgICAgICAgICBzZWxmLl9jbGllbnQsIHNlbGYuX3dvcmtl
cl9jbGFzcywgd29ya2VyX2FyZ3VtZW50cykKLSAgICAgICAgcmV0dXJuIHNlbGYuX2lubGluZV93
b3JrZXIKKyAgICBkZWYgcG9zdChzZWxmLCBuYW1lLCAqYXJncyk6CisgICAgICAgIHNlbGYuX3Bv
c3QoREFUQSwgbmFtZSwgKmFyZ3MpCiAKLSAgICBkZWYgc2V0X2lubGluZV9hcmd1bWVudHMoc2Vs
ZiwgYXJndW1lbnRzPU5vbmUpOgotICAgICAgICAjIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBvbmx5
IGV4aXN0cyBoZXJlLCBhbmQgbm90IG9uIGFsbAotICAgICAgICAjIE1hbmFnZXJDb25uZWN0aW9u
czsgY2FsbGluZyB0aGlzIG1ldGhvZCBvbiBhIE11bHRpUHJvY2Vzc01hbmFnZXIKLSAgICAgICAg
IyB3aWxsIGRlbGliZXJhdGVseSByZXN1bHQgaW4gYSBydW50aW1lIGVycm9yLgotICAgICAgICBz
ZWxmLl9pbmxpbmVfd29ya2VyLnNldF9pbmxpbmVfYXJndW1lbnRzKGFyZ3VtZW50cykKKyAgICBk
ZWYgeWllbGRfdG9fY2FsbGVyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLm1hbmFnZXI6CisgICAg
ICAgICAgICBzZWxmLm1hbmFnZXIuX2xvb3AoYmxvY2s9RmFsc2UpCiAKLSAgICBkZWYgcnVuX21l
c3NhZ2VfbG9vcChzZWxmLCBkZWxheV9zZWNzPU5vbmUpOgotICAgICAgICAjIE5vdGUgdGhhdCBk
ZWxheV9zZWNzIGlzIGlnbm9yZWQgaW4gdGhpcyBjYXNlIHNpbmNlIHdlIGNhbid0IGVhc2lseQot
ICAgICAgICAjIGltcGxlbWVudCBpdC4KLSAgICAgICAgc2VsZi5faW5saW5lX3dvcmtlci5ydW4o
KQotICAgICAgICBzZWxmLl9icm9rZXIucnVuX2FsbF9wZW5kaW5nKE1BTkFHRVJfVE9QSUMsIHNl
bGYuX2NsaWVudCkKKyAgICBkZWYgX3Bvc3Qoc2VsZiwga2luZCwgbmFtZSwgKmFyZ3MpOgorICAg
ICAgICBsb2dfbWVzc2FnZXMgPSBzZWxmLl9sb2dfbWVzc2FnZXMKKyAgICAgICAgc2VsZi5fbG9n
X21lc3NhZ2VzID0gW10KKyAgICAgICAgbWVzc2FnZSA9IHsna2luZCc6IGtpbmQsICduYW1lJzog
bmFtZSwgJ3NvdXJjZSc6IHNlbGYuX3dvcmtlci5uYW1lKCksICcqYXJncyc6IGFyZ3MsICdsb2dz
JzogbG9nX21lc3NhZ2VzfQorICAgICAgICBzZWxmLl9tZXNzYWdlc190b19tYW5hZ2VyLnB1dCht
ZXNzYWdlKQogCisgICAgZGVmIF9yYWlzZShzZWxmLCBleGNfaW5mbyk6CisgICAgICAgICMgU2lu
Y2UgdHJhY2ViYWNrcyBhcmVuJ3QgcGlja2xhYmxlLCBzZW5kIHRoZSBleHRyYWN0ZWQgc3RhY2sg
aW5zdGVhZC4KKyAgICAgICAgZXhjZXB0aW9uX3R5cGUsIGV4Y2VwdGlvbl92YWx1ZSwgZXhjZXB0
aW9uX3RyYWNlYmFjayA9IGV4Y19pbmZvCisgICAgICAgIHN0YWNrX3V0aWxzLmxvZ190cmFjZWJh
Y2soX2xvZy5kZWJ1ZywgZXhjZXB0aW9uX3RyYWNlYmFjaykKKyAgICAgICAgc3RhY2sgPSB0cmFj
ZWJhY2suZXh0cmFjdF90YihleGNlcHRpb25fdHJhY2ViYWNrKQorICAgICAgICBzZWxmLl9wb3N0
KENPTlRST0wsICd3b3JrZXJfZXhjZXB0aW9uJywgZXhjZXB0aW9uX3R5cGUsIGV4Y2VwdGlvbl92
YWx1ZSwgc3RhY2spCiAKLWNsYXNzIF9NdWx0aVByb2Nlc3NNYW5hZ2VyKF9NYW5hZ2VyQ29ubmVj
dGlvbik6Ci0gICAgZGVmIHN0YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfYXJndW1lbnRzPU5vbmUp
OgotICAgICAgICB3b3JrZXJfY29ubmVjdGlvbiA9IF9NdWx0aVByb2Nlc3NXb3JrZXJDb25uZWN0
aW9uKHNlbGYuX2Jyb2tlciwKLSAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9jbGFzcywgd29ya2Vy
X2FyZ3VtZW50cykKLSAgICAgICAgd29ya2VyX2Nvbm5lY3Rpb24uc3RhcnQoKQotICAgICAgICBy
ZXR1cm4gd29ya2VyX2Nvbm5lY3Rpb24KLQotCi1jbGFzcyBfV29ya2VyQ29ubmVjdGlvbihfQnJv
a2VyQ29ubmVjdGlvbik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgd29ya2VyX2Ns
YXNzLCB3b3JrZXJfYXJndW1lbnRzPU5vbmUpOgotICAgICAgICBzZWxmLl9jbGllbnQgPSB3b3Jr
ZXJfY2xhc3Moc2VsZiwgd29ya2VyX2FyZ3VtZW50cykKLSAgICAgICAgX0Jyb2tlckNvbm5lY3Rp
b24uX19pbml0X18oc2VsZiwgYnJva2VyLCBzZWxmLl9jbGllbnQsIEFOWV9XT1JLRVJfVE9QSUMs
IE1BTkFHRVJfVE9QSUMpCi0KLSAgICBkZWYgbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNl
bGYuX2NsaWVudC5uYW1lKCkKLQotICAgIGRlZiBjYW5jZWwoc2VsZik6Ci0gICAgICAgIHJhaXNl
IE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIGRlZiBpc19hbGl2ZShzZWxmKToKLSAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgZGVmIGpvaW4oc2VsZiwgdGltZW91dCk6
Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIGRlZiB5aWVsZF90b19i
cm9rZXIoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotCi1jbGFzcyBfSW5saW5lV29ya2VyQ29ubmVj
dGlvbihfV29ya2VyQ29ubmVjdGlvbik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwg
bWFuYWdlcl9jbGllbnQsIHdvcmtlcl9jbGFzcywgd29ya2VyX2FyZ3VtZW50cyk6Ci0gICAgICAg
IF9Xb3JrZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgd29ya2VyX2NsYXNzLCB3
b3JrZXJfYXJndW1lbnRzKQotICAgICAgICBzZWxmLl9hbGl2ZSA9IEZhbHNlCi0gICAgICAgIHNl
bGYuX21hbmFnZXJfY2xpZW50ID0gbWFuYWdlcl9jbGllbnQKLQotICAgIGRlZiBjYW5jZWwoc2Vs
Zik6Ci0gICAgICAgIHNlbGYuX2NsaWVudC5jYW5jZWwoKQotCi0gICAgZGVmIGlzX2FsaXZlKHNl
bGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fYWxpdmUKLQotICAgIGRlZiBqb2luKHNlbGYsIHRp
bWVvdXQpOgotICAgICAgICBhc3NlcnQgbm90IHNlbGYuX2FsaXZlCi0KLSAgICBkZWYgc2V0X2lu
bGluZV9hcmd1bWVudHMoc2VsZiwgYXJndW1lbnRzKToKLSAgICAgICAgc2VsZi5fY2xpZW50LnNl
dF9pbmxpbmVfYXJndW1lbnRzKGFyZ3VtZW50cykKLQotICAgIGRlZiBydW4oc2VsZik6Ci0gICAg
ICAgIHNlbGYuX2FsaXZlID0gVHJ1ZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9j
bGllbnQucnVuKCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYuX2FsaXZlID0g
RmFsc2UKLQotICAgIGRlZiB5aWVsZF90b19icm9rZXIoc2VsZik6Ci0gICAgICAgIHNlbGYuX2Jy
b2tlci5ydW5fYWxsX3BlbmRpbmcoTUFOQUdFUl9UT1BJQywgc2VsZi5fbWFuYWdlcl9jbGllbnQp
Ci0KLSAgICBkZWYgcmFpc2VfZXhjZXB0aW9uKHNlbGYsIGV4Y19pbmZvKToKLSAgICAgICAgIyBT
aW5jZSB0aGUgd29ya2VyIGlzIGluIHRoZSBzYW1lIHByb2Nlc3MgYXMgdGhlIG1hbmFnZXIsIHdl
IGNhbgotICAgICAgICAjIHJhaXNlIHRoZSBleGNlcHRpb24gZGlyZWN0bHksIHJhdGhlciB0aGFu
IGhhdmluZyB0byBzZW5kIGl0IHRocm91Z2gKLSAgICAgICAgIyB0aGUgcXVldWUuIFRoaXMgYWxs
b3dzIHVzIHRvIHByZXNlcnZlIHRoZSB0cmFjZWJhY2suCi0gICAgICAgIHJhaXNlIGV4Y19pbmZv
WzBdLCBleGNfaW5mb1sxXSwgZXhjX2luZm9bMl0KLQotCi1jbGFzcyBfUHJvY2VzcyhtdWx0aXBy
b2Nlc3NpbmcuUHJvY2Vzcyk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHdvcmtlcl9jb25uZWN0
aW9uLCBjbGllbnQpOgotICAgICAgICBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5fX2luaXRfXyhz
ZWxmKQotICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbiA9IHdvcmtlcl9jb25uZWN0aW9u
Ci0gICAgICAgIHNlbGYuX2NsaWVudCA9IGNsaWVudAotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAg
ICAgICAgc2VsZi5fY2xpZW50LnJ1bigpCi0KKyAgICBkZWYgX3NldF91cF9sb2dnaW5nKHNlbGYp
OgorICAgICAgICBzZWxmLl9sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCiAKLWNsYXNzIF9N
dWx0aVByb2Nlc3NXb3JrZXJDb25uZWN0aW9uKF9Xb3JrZXJDb25uZWN0aW9uKToKLSAgICBkZWYg
X19pbml0X18oc2VsZiwgYnJva2VyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9hcmd1bWVudHMpOgot
ICAgICAgICBfV29ya2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIHdvcmtlcl9j
bGFzcywgd29ya2VyX2FyZ3VtZW50cykKLSAgICAgICAgc2VsZi5fcHJvYyA9IF9Qcm9jZXNzKHNl
bGYsIHNlbGYuX2NsaWVudCkKKyAgICAgICAgIyBUaGUgdW5peCBtdWx0aXByb2Nlc3NpbmcgaW1w
bGVtZW50YXRpb24gY2xvbmVzIHRoZSBNZXRlcmVkU3RyZWFtIGxvZyBoYW5kbGVyCisgICAgICAg
ICMgaW50byB0aGUgY2hpbGQgcHJvY2Vzcywgc28gd2UgbmVlZCB0byByZW1vdmUgaXQgdG8gYXZv
aWQgZHVwbGljYXRlIGxvZ2dpbmcuCisgICAgICAgIGZvciBoIGluIHNlbGYuX2xvZ2dlci5oYW5k
bGVyczoKKyAgICAgICAgICAgICMgbG9nIGhhbmRsZXJzIGRvbid0IGhhdmUgbmFtZXMgdW50aWwg
cHl0aG9uIDIuNy4KKyAgICAgICAgICAgIGlmIGdldGF0dHIoaCwgJ25hbWUnLCAnJykgPT0gbWV0
ZXJlZF9zdHJlYW0uTE9HX0hBTkRMRVJfTkFNRToKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2dn
ZXIucmVtb3ZlSGFuZGxlcihoKQorICAgICAgICAgICAgICAgIGJyZWFrCiAKLSAgICBkZWYgY2Fu
Y2VsKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fcHJvYy50ZXJtaW5hdGUoKQorICAgICAg
ICBzZWxmLl9sb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKyAgICAgICAgc2VsZi5fbG9n
X2hhbmRsZXIgPSBfV29ya2VyTG9nSGFuZGxlcihzZWxmKQorICAgICAgICBzZWxmLl9sb2dnZXIu
YWRkSGFuZGxlcihzZWxmLl9sb2dfaGFuZGxlcikKIAotICAgIGRlZiBpc19hbGl2ZShzZWxmKToK
LSAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2MuaXNfYWxpdmUoKQogCi0gICAgZGVmIGpvaW4oc2Vs
ZiwgdGltZW91dCk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9wcm9jLmpvaW4odGltZW91dCkKK2Ns
YXNzIF9Xb3JrZXJMb2dIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHdvcmtlcik6CisgICAgICAgIGxvZ2dpbmcuSGFuZGxlci5fX2luaXRfXyhzZWxmKQor
ICAgICAgICBzZWxmLl93b3JrZXIgPSB3b3JrZXIKIAotICAgIGRlZiBzdGFydChzZWxmKToKLSAg
ICAgICAgc2VsZi5fcHJvYy5zdGFydCgpCisgICAgZGVmIGVtaXQoc2VsZiwgcmVjb3JkKToKKyAg
ICAgICAgc2VsZi5fd29ya2VyLl9sb2dfbWVzc2FnZXMuYXBwZW5kKHJlY29yZCkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFn
ZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weQpp
bmRleCAwNDY0MjU2NjQ0ZmZmZTQ0OTM0ZWFiYjEzZGQxOWRmMTAzNmI3NWMwLi42MDM4ZTZhM2Zl
ZjgyYTA3ZmNiZjA5ZGM3MzdjNzNiYWI4YTY0MWMzIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXJf
dW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29u
dHJvbGxlcnMvbWFuYWdlcl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5CkBAIC0yNiwyMzEgKzI2
LDMgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWltcG9ydCBvcHRwYXJzZQot
aW1wb3J0IFF1ZXVlCi1pbXBvcnQgc3lzCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtIGltcG9ydCBvdXRwdXRjYXB0dXJlCi1mcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5jb250cm9sbGVycyBpbXBvcnQgbWFuYWdlcl93b3JrZXJfYnJva2VyCi0KLQotIyBJ
biBvcmRlciB0byByZWxpYWJseSBjb250cm9sIHdoZW4gY2hpbGQgd29ya2VycyBhcmUgc3RhcnRp
bmcgYW5kIHN0b3BwaW5nLAotIyB3ZSB1c2UgYSBwYWlyIG9mIGdsb2JhbCB2YXJpYWJsZXMgdG8g
aG9sZCBxdWV1ZXMgdXNlZCBmb3IgbWVzc2FnaW5nLiBJZGVhbGx5Ci0jIHdlIHdvdWxkbid0IG5l
ZWQgZ2xvYmFscywgYnV0IHdlIGNhbid0IHBhc3MgdGhlc2UgdGhyb3VnaCBhIGxleGljYWwgY2xv
c3VyZQotIyBiZWNhdXNlIHRob3NlIGNhbid0IGJlIFBpY2tsZWQgYW5kIHNlbnQgdG8gYSBzdWJw
cm9jZXNzLCBhbmQgd2UnZCBwcmVmZXIgbm90Ci0jIHRvIGhhdmUgdG8gcGFzcyBleHRyYSBhcmd1
bWVudHMgdG8gdGhlIHdvcmtlciBpbiB0aGUgc3RhcnRfd29ya2VyKCkgY2FsbC4KLXN0YXJ0aW5n
X3F1ZXVlID0gTm9uZQotc3RvcHBpbmdfcXVldWUgPSBOb25lCi0KLQotV09SS0VSX05BTUUgPSAn
VGVzdFdvcmtlcicKLQotCi1kZWYgbWFrZV9icm9rZXIobWFuYWdlciwgbWF4X3dvcmtlcnMsIHN0
YXJ0X3F1ZXVlPU5vbmUsIHN0b3BfcXVldWU9Tm9uZSk6Ci0gICAgZ2xvYmFsIHN0YXJ0aW5nX3F1
ZXVlCi0gICAgZ2xvYmFsIHN0b3BwaW5nX3F1ZXVlCi0gICAgc3RhcnRpbmdfcXVldWUgPSBzdGFy
dF9xdWV1ZQotICAgIHN0b3BwaW5nX3F1ZXVlID0gc3RvcF9xdWV1ZQotICAgIHJldHVybiBtYW5h
Z2VyX3dvcmtlcl9icm9rZXIuZ2V0KG1heF93b3JrZXJzLCBtYW5hZ2VyLCBfVGVzdFdvcmtlcikK
LQotCi1jbGFzcyBfVGVzdFdvcmtlcihtYW5hZ2VyX3dvcmtlcl9icm9rZXIuQWJzdHJhY3RXb3Jr
ZXIpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX2Fy
Z3VtZW50cz1Ob25lKToKLSAgICAgICAgc3VwZXIoX1Rlc3RXb3JrZXIsIHNlbGYpLl9faW5pdF9f
KHdvcmtlcl9jb25uZWN0aW9uKQotICAgICAgICBzZWxmLl9uYW1lID0gV09SS0VSX05BTUUKLSAg
ICAgICAgc2VsZi5fdGhpbmdfdG9fZ3JlZXQgPSAnZXZlcnlib2R5JwotICAgICAgICBzZWxmLl9z
dGFydGluZ19xdWV1ZSA9IHN0YXJ0aW5nX3F1ZXVlCi0gICAgICAgIHNlbGYuX3N0b3BwaW5nX3F1
ZXVlID0gc3RvcHBpbmdfcXVldWUKLQotICAgIGRlZiBzZXRfaW5saW5lX2FyZ3VtZW50cyhzZWxm
LCB0aGluZ190b19ncmVldCk6Ci0gICAgICAgIHNlbGYuX3RoaW5nX3RvX2dyZWV0ID0gdGhpbmdf
dG9fZ3JlZXQKLQotICAgIGRlZiBoYW5kbGVfc3RvcChzZWxmLCBzcmMpOgotICAgICAgICBzZWxm
LnN0b3BfaGFuZGxpbmdfbWVzc2FnZXMoKQotCi0gICAgZGVmIGhhbmRsZV90ZXN0KHNlbGYsIHNy
YywgYW5faW50LCBhX3N0cik6Ci0gICAgICAgIGFzc2VydCBhbl9pbnQgPT0gMQotICAgICAgICBh
c3NlcnQgYV9zdHIgPT0gImhlbGxvLCB3b3JsZCIKLSAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5l
Y3Rpb24ucG9zdF9tZXNzYWdlKCd0ZXN0JywgMiwgJ2hpLCAnICsgc2VsZi5fdGhpbmdfdG9fZ3Jl
ZXQpCi0KLSAgICBkZWYgcnVuKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9zdGFydGluZ19xdWV1
ZToKLSAgICAgICAgICAgIHNlbGYuX3N0YXJ0aW5nX3F1ZXVlLnB1dCgnJykKLQotICAgICAgICBp
ZiBzZWxmLl9zdG9wcGluZ19xdWV1ZToKLSAgICAgICAgICAgIHNlbGYuX3N0b3BwaW5nX3F1ZXVl
LmdldCgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN1cGVyKF9UZXN0V29ya2VyLCBzZWxm
KS5ydW4oKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5l
Y3Rpb24ucG9zdF9tZXNzYWdlKCdkb25lJykKLQotCi1jbGFzcyBGdW5jdGlvblRlc3RzKHVuaXR0
ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9nZXRfX2lubGluZShzZWxmKToKLSAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKG1ha2VfYnJva2VyKHNlbGYsIDEpIGlzIG5vdCBOb25lKQotCi0gICAg
ZGVmIHRlc3RfZ2V0X19wcm9jZXNzZXMoc2VsZik6Ci0gICAgICAgICMgVGhpcyB0ZXN0IHNvbWV0
aW1lcyBmYWlscyBvbiBXaW5kb3dzLiBTZWUgPGh0dHA6Ly93ZWJraXQub3JnL2IvNTUwODc+Lgot
ICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdjeWd3aW4nLCAnd2luMzInKToKLSAgICAgICAg
ICAgIHJldHVybgotICAgICAgICBzZWxmLmFzc2VydFRydWUobWFrZV9icm9rZXIoc2VsZiwgMikg
aXMgbm90IE5vbmUpCi0KLQotY2xhc3MgX1Rlc3RzTWl4aW4ob2JqZWN0KToKLSAgICAiIiJNaXhp
biBjbGFzcyB0aGF0IGltcGxlbWVudHMgYSBzZXJpZXMgb2YgdGVzdHMgdG8gZW5mb3JjZSB0aGUK
LSAgICBjb250cmFjdCBhbGwgaW1wbGVtZW50YXRpb25zIG11c3QgZm9sbG93LiIiIgotCi0gICAg
ZGVmIG5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiAnVGVzdGVyTWFuYWdlcicKLQotICAgIGRl
ZiBpc19kb25lKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fZG9uZQotCi0gICAgZGVmIGhh
bmRsZV9kb25lKHNlbGYsIHNyYyk6Ci0gICAgICAgIHNlbGYuX2RvbmUgPSBUcnVlCi0KLSAgICBk
ZWYgaGFuZGxlX3Rlc3Qoc2VsZiwgc3JjLCBhbl9pbnQsIGFfc3RyKToKLSAgICAgICAgc2VsZi5f
YW5faW50ID0gYW5faW50Ci0gICAgICAgIHNlbGYuX2Ffc3RyID0gYV9zdHIKLQotICAgIGRlZiBo
YW5kbGVfZXhjZXB0aW9uKHNlbGYsIHNyYywgZXhjZXB0aW9uX3R5cGUsIGV4Y2VwdGlvbl92YWx1
ZSwgc3RhY2spOgotICAgICAgICByYWlzZSBleGNlcHRpb25fdHlwZShleGNlcHRpb25fdmFsdWUp
Ci0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYuX2FuX2ludCA9IE5vbmUKLSAg
ICAgICAgc2VsZi5fYV9zdHIgPSBOb25lCi0gICAgICAgIHNlbGYuX2Jyb2tlciA9IE5vbmUKLSAg
ICAgICAgc2VsZi5fZG9uZSA9IEZhbHNlCi0gICAgICAgIHNlbGYuX2V4Y2VwdGlvbiA9IE5vbmUK
LSAgICAgICAgc2VsZi5fbWF4X3dvcmtlcnMgPSBOb25lCi0KLSAgICBkZWYgbWFrZV9icm9rZXIo
c2VsZiwgc3RhcnRpbmdfcXVldWU9Tm9uZSwgc3RvcHBpbmdfcXVldWU9Tm9uZSk6Ci0gICAgICAg
IHNlbGYuX2Jyb2tlciA9IG1ha2VfYnJva2VyKHNlbGYsIHNlbGYuX21heF93b3JrZXJzLCBzdGFy
dGluZ19xdWV1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHBpbmdf
cXVldWUpCi0KLSAgICBkZWYgdGVzdF9uYW1lKHNlbGYpOgotICAgICAgICBzZWxmLm1ha2VfYnJv
a2VyKCkKLSAgICAgICAgd29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHdvcmtlci5uYW1lKCksIFdPUktFUl9OQU1FKQotICAgICAg
ICB3b3JrZXIuY2FuY2VsKCkKLSAgICAgICAgd29ya2VyLmpvaW4oMC4xKQotICAgICAgICBzZWxm
LmFzc2VydEZhbHNlKHdvcmtlci5pc19hbGl2ZSgpKQotICAgICAgICBzZWxmLl9icm9rZXIuY2xl
YW51cCgpCi0KLSAgICBkZWYgdGVzdF9jYW5jZWwoc2VsZik6Ci0gICAgICAgIHNlbGYubWFrZV9i
cm9rZXIoKQotICAgICAgICB3b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2VyKCkKLSAg
ICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgndGVzdCcsIDEsICdoZWxsbywgd29ybGQn
KQotICAgICAgICB3b3JrZXIuY2FuY2VsKCkKLSAgICAgICAgd29ya2VyLmpvaW4oMC4xKQotICAg
ICAgICBzZWxmLmFzc2VydEZhbHNlKHdvcmtlci5pc19hbGl2ZSgpKQotICAgICAgICBzZWxmLl9i
cm9rZXIuY2xlYW51cCgpCi0KLSAgICBkZWYgdGVzdF9kb25lKHNlbGYpOgotICAgICAgICBzZWxm
Lm1ha2VfYnJva2VyKCkKLSAgICAgICAgd29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtl
cigpCi0gICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3Rlc3QnLCAxLCAnaGVsbG8s
IHdvcmxkJykKLSAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnc3RvcCcpCi0gICAg
ICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKLSAgICAgICAgd29ya2VyLmpvaW4o
MC41KQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHdvcmtlci5pc19hbGl2ZSgpKQotICAgICAg
ICBzZWxmLmFzc2VydFRydWUoc2VsZi5pc19kb25lKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5fYW5faW50LCAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2Ffc3Ry
LCAnaGksIGV2ZXJ5Ym9keScpCi0gICAgICAgIHNlbGYuX2Jyb2tlci5jbGVhbnVwKCkKLQotICAg
IGRlZiB0ZXN0X3Vua25vd25fbWVzc2FnZShzZWxmKToKLSAgICAgICAgc2VsZi5tYWtlX2Jyb2tl
cigpCi0gICAgICAgIHdvcmtlciA9IHNlbGYuX2Jyb2tlci5zdGFydF93b3JrZXIoKQotICAgICAg
ICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCd1bmtub3duJykKLSAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgc2VsZi5fYnJva2VyLnJ1bl9tZXNzYWdlX2xvb3AoKQotICAgICAgICAgICAgc2Vs
Zi5mYWlsKCkKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhzdHIoZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXM6
IHJlY2VpdmVkIG1lc3NhZ2UgJ3Vua25vd24nIGl0IGNvdWxkbid0IGhhbmRsZSIgJSBXT1JLRVJf
TkFNRSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHdvcmtlci5qb2luKDAuNSkKLSAg
ICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3b3JrZXIuaXNfYWxpdmUoKSkKLSAgICAgICAgc2VsZi5f
YnJva2VyLmNsZWFudXAoKQotCi0KLWNsYXNzIElubGluZUJyb2tlclRlc3RzKF9UZXN0c01peGlu
LCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBfVGVz
dHNNaXhpbi5zZXRVcChzZWxmKQotICAgICAgICBzZWxmLl9tYXhfd29ya2VycyA9IDEKLQotICAg
IGRlZiB0ZXN0X2lubGluZV9hcmd1bWVudHMoc2VsZik6Ci0gICAgICAgIHNlbGYubWFrZV9icm9r
ZXIoKQotICAgICAgICB3b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2VyKCkKLSAgICAg
ICAgd29ya2VyLnNldF9pbmxpbmVfYXJndW1lbnRzKCdtZScpCi0gICAgICAgIHNlbGYuX2Jyb2tl
ci5wb3N0X21lc3NhZ2UoJ3Rlc3QnLCAxLCAnaGVsbG8sIHdvcmxkJykKLSAgICAgICAgc2VsZi5f
YnJva2VyLnBvc3RfbWVzc2FnZSgnc3RvcCcpCi0gICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVz
c2FnZV9sb29wKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5fYV9zdHIsICdoaSwg
bWUnKQotCi0KLSMgRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01NDUyMC4KLWlmIHN5cy5wbGF0Zm9ybSBub3QgaW4gKCdjeWd3aW4nLCAnd2luMzInKToKLQot
ICAgIGNsYXNzIE11bHRpUHJvY2Vzc0Jyb2tlclRlc3RzKF9UZXN0c01peGluLCB1bml0dGVzdC5U
ZXN0Q2FzZSk6Ci0gICAgICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgICAgIF9UZXN0c01p
eGluLnNldFVwKHNlbGYpCi0gICAgICAgICAgICBzZWxmLl9tYXhfd29ya2VycyA9IDIKLQotCi1j
bGFzcyBJbnRlcmZhY2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAjIFRoZXNlIHRlc3Rz
IG1vc3RseSBleGlzdCB0byBwYWNpZnkgY292ZXJhZ2UuCi0KLSAgICAjIEZJWE1FOiBUaGVyZSBt
dXN0IGJlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIGFuZCBhbHNvIHZlcmlmeQotICAgICMgdGhh
dCBjbGFzc2VzIGRvIGltcGxlbWVudCBldmVyeSBhYnN0cmFjdCBtZXRob2QgaW4gYW4gaW50ZXJm
YWNlLgotICAgIGRlZiB0ZXN0X2Jyb2tlcmNsaWVudF9pc19hYnN0cmFjdChzZWxmKToKLSAgICAg
ICAgIyBUZXN0IHRoYXQgYWxsIHRoZSBiYXNlIGNsYXNzIG1ldGhvZHMgYXJlIGFic3RyYWN0IGFu
ZCBoYXZlIHRoZQotICAgICAgICAjIHNpZ25hdHVyZSB3ZSBleHBlY3QuCi0gICAgICAgIG9iaiA9
IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5Ccm9rZXJDbGllbnQoKQotICAgICAgICBzZWxmLmFzc2Vy
dFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmouaXNfZG9uZSkKLSAgICAgICAgc2VsZi5h
c3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLm5hbWUpCi0KLSAgICBkZWYgdGVz
dF9tYW5hZ2VyY29ubmVjdGlvbl9pc19hYnN0cmFjdChzZWxmKToKLSAgICAgICAgIyBUZXN0IHRo
YXQgYWxsIHRoZSBiYXNlIGNsYXNzIG1ldGhvZHMgYXJlIGFic3RyYWN0IGFuZCBoYXZlIHRoZQot
ICAgICAgICAjIHNpZ25hdHVyZSB3ZSBleHBlY3QuCi0gICAgICAgIGJyb2tlciA9IG1ha2VfYnJv
a2VyKHNlbGYsIDEpCi0gICAgICAgIG9iaiA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fTWFuYWdl
ckNvbm5lY3Rpb24oYnJva2VyLl9icm9rZXIsIHNlbGYsIE5vbmUpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5zdGFydF93b3JrZXIpCi0KLSAgICBk
ZWYgdGVzdF93b3JrZXJjb25uZWN0aW9uX2lzX2Fic3RyYWN0KHNlbGYpOgotICAgICAgICAjIFRl
c3QgdGhhdCBhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kcyBhcmUgYWJzdHJhY3QgYW5kIGhhdmUg
dGhlCi0gICAgICAgICMgc2lnbmF0dXJlIHdlIGV4cGVjdC4KLSAgICAgICAgYnJva2VyID0gbWFr
ZV9icm9rZXIoc2VsZiwgMSkKLSAgICAgICAgb2JqID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLl9X
b3JrZXJDb25uZWN0aW9uKGJyb2tlci5fYnJva2VyLCBfVGVzdFdvcmtlciwgTm9uZSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLmNhbmNlbCkKLSAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLmlzX2FsaXZl
KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmouam9p
biwgTm9uZSkKLQotCi1jbGFzcyBNZXNzYWdlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAg
ZGVmIHRlc3RfX25vX2JvZHkoc2VsZik6Ci0gICAgICAgIG1zZyA9IG1hbmFnZXJfd29ya2VyX2Jy
b2tlci5fTWVzc2FnZSgnc3JjJywgJ3RvcGljX25hbWUnLCAnbWVzc2FnZV9uYW1lJywgTm9uZSkK
LSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobXNnKSkKLSAgICAgICAgcyA9IG1zZy5kdW1w
cygpCi0gICAgICAgIG5ld19tc2cgPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuX01lc3NhZ2UubG9h
ZHMocykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNnLm5hbWUsICdtZXNzYWdlX25h
bWUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cuYXJncywgTm9uZSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNnLnRvcGljX25hbWUsICd0b3BpY19uYW1lJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNnLnNyYywgJ3NyYycpCi0KLSAgICBkZWYgdGVz
dF9fYm9keShzZWxmKToKLSAgICAgICAgbXNnID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLl9NZXNz
YWdlKCdzcmMnLCAndG9waWNfbmFtZScsICdtZXNzYWdlX25hbWUnLCAoJ2JvZHknLCAwKSkKLSAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobXNnKSkKLSAgICAgICAgcyA9IG1zZy5kdW1wcygp
Ci0gICAgICAgIG5ld19tc2cgPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuX01lc3NhZ2UubG9hZHMo
cykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNnLm5hbWUsICdtZXNzYWdlX25hbWUn
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cuYXJncywgKCdib2R5JywgMCkpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy50b3BpY19uYW1lLCAndG9waWNfbmFtZScp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy5zcmMsICdzcmMnKQotCi0KLQotaWYg
X19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3dvcmtlci5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3dvcmtl
ci5weQppbmRleCBkMzIxYjVhNDE1ZWNjYjRlODVkNDE4OTMyNjE5YTllMGQyNzYwYTZjLi44ODMx
NjdkM2UxOWViNWYyMTY5NjkxOWRmOWJjODRkMGJjM2EzM2MyIDEwMDY0NAotLS0gYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy93b3JrZXIucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvd29ya2VyLnB5
CkBAIC0yOSwxMjAgKzI5LDc3IEBACiAiIiJIYW5kbGUgbWVzc2FnZXMgZnJvbSB0aGUgTWFuYWdl
ciBhbmQgZXhlY3V0ZXMgYWN0dWFsIHRlc3RzLiIiIgogCiBpbXBvcnQgbG9nZ2luZwotaW1wb3J0
IG9zCi1pbXBvcnQgc3lzCiBpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdGltZQogCi1mcm9tIHdl
YmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy5jb250cm9sbGVycyBpbXBvcnQgbWFuYWdlcl93b3JrZXJfYnJva2VyCiBmcm9tIHdlYmtpdHB5
LmxheW91dF90ZXN0cy5jb250cm9sbGVycyBpbXBvcnQgc2luZ2xlX3Rlc3RfcnVubmVyCiBmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCiBm
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMgaW1wb3J0IHRlc3RfcmVzdWx0cwotZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudmlld3MgaW1wb3J0IG1ldGVyZWRfc3RyZWFtCiAKIAog
X2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAKLWNsYXNzIFdvcmtlckFyZ3Vt
ZW50cyhvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3b3JrZXJfbnVtYmVyLCByZXN1
bHRzX2RpcmVjdG9yeSwgb3B0aW9ucyk6Ci0gICAgICAgIHNlbGYud29ya2VyX251bWJlciA9IHdv
cmtlcl9udW1iZXIKLSAgICAgICAgc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSA9IHJlc3VsdHNfZGly
ZWN0b3J5Ci0gICAgICAgIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMKK2NsYXNzIFdvcmtlcihvYmpl
Y3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjYWxsZXIsIHdvcmtlcl9udW1iZXIsIHJlc3Vs
dHNfZGlyZWN0b3J5LCBvcHRpb25zKToKKyAgICAgICAgc2VsZi5fY2FsbGVyID0gY2FsbGVyCisg
ICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIgPSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYu
X25hbWUgPSAnd29ya2VyLyVkJyAlIHdvcmtlcl9udW1iZXIKKyAgICAgICAgc2VsZi5fcmVzdWx0
c19kaXJlY3RvcnkgPSByZXN1bHRzX2RpcmVjdG9yeQorICAgICAgICBzZWxmLl9vcHRpb25zID0g
b3B0aW9ucwogCi0KLWNsYXNzIFdvcmtlcihtYW5hZ2VyX3dvcmtlcl9icm9rZXIuQWJzdHJhY3RX
b3JrZXIpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3b3JrZXJfY29ubmVjdGlvbiwgd29ya2Vy
X2FyZ3VtZW50cyk6Ci0gICAgICAgIHN1cGVyKFdvcmtlciwgc2VsZikuX19pbml0X18od29ya2Vy
X2Nvbm5lY3Rpb24sIHdvcmtlcl9hcmd1bWVudHMpCi0gICAgICAgIHNlbGYuX3dvcmtlcl9udW1i
ZXIgPSB3b3JrZXJfYXJndW1lbnRzLndvcmtlcl9udW1iZXIKLSAgICAgICAgc2VsZi5fbmFtZSA9
ICd3b3JrZXIvJWQnICUgc2VsZi5fd29ya2VyX251bWJlcgotICAgICAgICBzZWxmLl9yZXN1bHRz
X2RpcmVjdG9yeSA9IHdvcmtlcl9hcmd1bWVudHMucmVzdWx0c19kaXJlY3RvcnkKLSAgICAgICAg
c2VsZi5fb3B0aW9ucyA9IHdvcmtlcl9hcmd1bWVudHMub3B0aW9ucworICAgICAgICAjIFRoZSBy
ZW1haW5pbmcgZmllbGRzIGFyZSBpbml0aWFsaXplZCBpbiBzZXR1cCgpCisgICAgICAgIHNlbGYu
X2hvc3QgPSBOb25lCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBOb25lCiAgICAgICAgIHNl
bGYuX3BvcnQgPSBOb25lCiAgICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSBOb25lCiAgICAgICAg
IHNlbGYuX2JhdGNoX2NvdW50ID0gTm9uZQotICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gTm9u
ZQogICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9m
aWxlID0gTm9uZQotICAgICAgICBzZWxmLl90ZXN0c19ydW5fZmlsZW5hbWUgPSBOb25lCi0gICAg
ICAgIHNlbGYuX2xvZ19tZXNzYWdlcyA9IFtdCi0gICAgICAgIHNlbGYuX2xvZ2dlciA9IE5vbmUK
LSAgICAgICAgc2VsZi5fbG9nX2hhbmRsZXIgPSBOb25lCiAKICAgICBkZWYgX19kZWxfXyhzZWxm
KToKLSAgICAgICAgc2VsZi5jbGVhbnVwKCkKKyAgICAgICAgc2VsZi5zdG9wKCkKIAotICAgIGRl
ZiBzYWZlX2luaXQoc2VsZik6Ci0gICAgICAgICIiIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCB3aGVuIGl0IGlzIGlzIHNhZmUgZm9yIHRoZSBtaXhpbgotICAgICAgICB0byBjcmVh
dGUgc3RhdGUgdGhhdCBjYW4ndCBiZSBQaWNrbGVkLgorICAgIGRlZiBuYW1lKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fbmFtZQogCi0gICAgICAgIFRoaXMgcm91dGluZSBleGlzdHMgc28g
dGhhdCB0aGUgbWl4aW4gY2FuIGJlIGNyZWF0ZWQgYW5kIHRoZW4gbWFyc2hhbGVkCi0gICAgICAg
IGFjcm9zcyBpbnRvIGEgY2hpbGQgcHJvY2Vzcy4iIiIKLSAgICAgICAgc2VsZi5fZmlsZXN5c3Rl
bSA9IHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVtCisgICAgZGVmIHN0YXJ0KHNlbGYsIGhvc3Qp
OgorICAgICAgICBzZWxmLl9ob3N0ID0gaG9zdAorICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0g
aG9zdC5maWxlc3lzdGVtCisgICAgICAgIHNlbGYuX3BvcnQgPSBob3N0LnBvcnRfZmFjdG9yeS5n
ZXQoc2VsZi5fb3B0aW9ucy5wbGF0Zm9ybSwgc2VsZi5fb3B0aW9ucykKICAgICAgICAgc2VsZi5f
YmF0Y2hfY291bnQgPSAwCiAgICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSBzZWxmLl9vcHRpb25z
LmJhdGNoX3NpemUgb3IgMAogICAgICAgICB0ZXN0c19ydW5fZmlsZW5hbWUgPSBzZWxmLl9maWxl
c3lzdGVtLmpvaW4oc2VsZi5fcmVzdWx0c19kaXJlY3RvcnksICJ0ZXN0c19ydW4lZC50eHQiICUg
c2VsZi5fd29ya2VyX251bWJlcikKICAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUgPSBzZWxm
Ll9maWxlc3lzdGVtLm9wZW5fdGV4dF9maWxlX2Zvcl93cml0aW5nKHRlc3RzX3J1bl9maWxlbmFt
ZSkKIAotICAgIGRlZiBfc2V0X3VwX2xvZ2dpbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuX2xvZ2dl
ciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKLQotICAgICAgICAjIFRoZSB1bml4IG11bHRpcHJvY2Vz
c2luZyBpbXBsZW1lbnRhdGlvbiBjbG9uZXMgdGhlIE1ldGVyZWRTdHJlYW0gbG9nIGhhbmRsZXIK
LSAgICAgICAgIyBpbnRvIHRoZSBjaGlsZCBwcm9jZXNzLCBzbyB3ZSBuZWVkIHRvIHJlbW92ZSBp
dCB0byBhdm9pZCBkdXBsaWNhdGUgbG9nZ2luZy4KLSAgICAgICAgZm9yIGggaW4gc2VsZi5fbG9n
Z2VyLmhhbmRsZXJzOgotICAgICAgICAgICAgIyBsb2cgaGFuZGxlcnMgZG9uJ3QgaGF2ZSBuYW1l
cyB1bnRpbCBweXRob24gMi43LgotICAgICAgICAgICAgaWYgZ2V0YXR0cihoLCAnbmFtZScsICcn
KSA9PSBtZXRlcmVkX3N0cmVhbS5MT0dfSEFORExFUl9OQU1FOgotICAgICAgICAgICAgICAgIHNl
bGYuX2xvZ2dlci5yZW1vdmVIYW5kbGVyKGgpCi0gICAgICAgICAgICAgICAgYnJlYWsKLQotICAg
ICAgICBzZWxmLl9sb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRyBpZiBzZWxmLl9vcHRpb25z
LnZlcmJvc2UgZWxzZSBsb2dnaW5nLklORk8pCi0gICAgICAgIHNlbGYuX2xvZ19oYW5kbGVyID0g
X1dvcmtlckxvZ0hhbmRsZXIoc2VsZikKLSAgICAgICAgc2VsZi5fbG9nZ2VyLmFkZEhhbmRsZXIo
c2VsZi5fbG9nX2hhbmRsZXIpCi0KLSAgICBkZWYgX3NldF91cF9ob3N0X2FuZF9wb3J0KHNlbGYp
OgotICAgICAgICBvcHRpb25zID0gc2VsZi5fb3B0aW9ucwotICAgICAgICBpZiBvcHRpb25zLnBs
YXRmb3JtIGFuZCAndGVzdCcgaW4gb3B0aW9ucy5wbGF0Zm9ybToKLSAgICAgICAgICAgICMgSXQg
aXMgbGFtZSB0byBpbXBvcnQgbW9ja3MgaW50byByZWFsIGNvZGUsIGJ1dCB0aGlzIGFsbG93cyB1
cyB0byB1c2UgdGhlIHRlc3QgcG9ydCBpbiBtdWx0aS1wcm9jZXNzIHRlc3RzIGFzIHdlbGwuCi0g
ICAgICAgICAgICBmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0X21vY2sgaW1wb3J0IE1vY2tIb3N0
Ci0gICAgICAgICAgICBob3N0ID0gTW9ja0hvc3QoKQotICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgaG9zdCA9IEhvc3QoKQotICAgICAgICBzZWxmLl9wb3J0ID0gaG9zdC5wb3J0X2ZhY3Rvcnku
Z2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMpCi0KLSAgICBkZWYgc2V0X2lubGluZV9hcmd1
bWVudHMoc2VsZiwgcG9ydCk6Ci0gICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0Ci0KLSAgICBkZWYg
cnVuKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5fcG9ydDoKLSAgICAgICAgICAgICMgV2Ug
YXJlIHJ1bm5pbmcgaW4gYSBjaGlsZCBwcm9jZXNzIGFuZCBuZWVkIHRvIGluaXRpYWxpemUgdGhp
bmdzLgotICAgICAgICAgICAgc2VsZi5fc2V0X3VwX2xvZ2dpbmcoKQotICAgICAgICAgICAgc2Vs
Zi5fc2V0X3VwX2hvc3RfYW5kX3BvcnQoKQotCi0gICAgICAgIHNlbGYuc2FmZV9pbml0KCkKLSAg
ICAgICAgdHJ5OgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgc3RhcnRpbmciICUgc2VsZi5f
bmFtZSkKLSAgICAgICAgICAgIHN1cGVyKFdvcmtlciwgc2VsZikucnVuKCkKLSAgICAgICAgZmlu
YWxseToKLSAgICAgICAgICAgIHNlbGYua2lsbF9kcml2ZXIoKQotICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygiJXMgZXhpdGluZyIgJSBzZWxmLl9uYW1lKQotICAgICAgICAgICAgc2VsZi5jbGVhbnVw
KCkKLSAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnZG9u
ZScsIHNlbGYuX2xvZ19tZXNzYWdlcykKLQotICAgIGRlZiBoYW5kbGVfdGVzdF9saXN0KHNlbGYs
IHNyYywgbGlzdF9uYW1lLCB0ZXN0X2xpc3QpOgotICAgICAgICBzdGFydF90aW1lID0gdGltZS50
aW1lKCkKLSAgICAgICAgbnVtX3Rlc3RzID0gMAotICAgICAgICBmb3IgdGVzdF9pbnB1dCBpbiB0
ZXN0X2xpc3Q6Ci0gICAgICAgICAgICBzZWxmLl91cGRhdGVfdGVzdF9pbnB1dCh0ZXN0X2lucHV0
KQotICAgICAgICAgICAgc2VsZi5fcnVuX3Rlc3QodGVzdF9pbnB1dCkKLSAgICAgICAgICAgIG51
bV90ZXN0cyArPSAxCi0gICAgICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi55aWVsZF90
b19icm9rZXIoKQotCi0gICAgICAgIGVsYXBzZWRfdGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnRf
dGltZQotICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ2Zpbmlz
aGVkX2xpc3QnLCBsaXN0X25hbWUsIG51bV90ZXN0cywgZWxhcHNlZF90aW1lKQotCi0gICAgZGVm
IGhhbmRsZV9zdG9wKHNlbGYsIHNyYyk6Ci0gICAgICAgIHNlbGYuc3RvcF9oYW5kbGluZ19tZXNz
YWdlcygpCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHNlbGYuX2tpbGxfZHJpdmVyKCkK
KyAgICAgICAgaWYgc2VsZi5fdGVzdHNfcnVuX2ZpbGU6CisgICAgICAgICAgICBzZWxmLl90ZXN0
c19ydW5fZmlsZS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl90ZXN0c19ydW5fZmlsZSA9IE5v
bmUKKworICAgIGRlZiBoYW5kbGUoc2VsZiwgbmFtZSwgc291cmNlLCAqYXJncyk6CisgICAgICAg
IGlmIG5hbWUgPT0gJ3Rlc3RfbGlzdCc6CisgICAgICAgICAgICAobGlzdF9uYW1lLCB0ZXN0X2xp
c3QpID0gYXJncworICAgICAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAg
ICAgICBzZWxmLl9jYWxsZXIucG9zdCgnc3RhcnRlZF90ZXN0X2xpc3QnLCBsaXN0X25hbWUpCisg
ICAgICAgICAgICBmb3IgbnVtX3Rlc3RzLCB0ZXN0X2lucHV0IGluIGVudW1lcmF0ZSh0ZXN0X2xp
c3QpOgorICAgICAgICAgICAgICAgIHNlbGYuX3J1bl90ZXN0KHRlc3RfaW5wdXQpCisgICAgICAg
ICAgICAgICAgc2VsZi5fY2FsbGVyLnlpZWxkX3RvX2NhbGxlcigpCisgICAgICAgICAgICBlbGFw
c2VkX3RpbWUgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUKKyAgICAgICAgICAgIHNlbGYuX2Nh
bGxlci5wb3N0KCdmaW5pc2hlZF90ZXN0X2xpc3QnLCBsaXN0X25hbWUsIG51bV90ZXN0cywgZWxh
cHNlZF90aW1lKQorCisgICAgZGVmIF9ydW5fdGVzdChzZWxmLCB0ZXN0X2lucHV0KToKKyAgICAg
ICAgc2VsZi5fdXBkYXRlX3Rlc3RfaW5wdXQodGVzdF9pbnB1dCkKKyAgICAgICAgdGVzdF90aW1l
b3V0X3NlYyA9IHNlbGYuX3RpbWVvdXQodGVzdF9pbnB1dCkKKyAgICAgICAgc3RhcnQgPSB0aW1l
LnRpbWUoKQorICAgICAgICBzZWxmLl9jYWxsZXIucG9zdCgnc3RhcnRlZF90ZXN0JywgdGVzdF9p
bnB1dCwgdGVzdF90aW1lb3V0X3NlYykKKworICAgICAgICByZXN1bHQgPSBzZWxmLl9ydW5fdGVz
dF93aXRoX3RpbWVvdXQodGVzdF9pbnB1dCwgdGVzdF90aW1lb3V0X3NlYykKKworICAgICAgICBl
bGFwc2VkX3RpbWUgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0CisgICAgICAgIHNlbGYuX2NhbGxlci5w
b3N0KCdmaW5pc2hlZF90ZXN0JywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpCisgICAgICAgIHNlbGYu
X2NsZWFuX3VwX2FmdGVyX3Rlc3QodGVzdF9pbnB1dCwgcmVzdWx0KQogCiAgICAgZGVmIF91cGRh
dGVfdGVzdF9pbnB1dChzZWxmLCB0ZXN0X2lucHV0KToKICAgICAgICAgdGVzdF9pbnB1dC5yZWZl
cmVuY2VfZmlsZXMgPSBzZWxmLl9wb3J0LnJlZmVyZW5jZV9maWxlcyh0ZXN0X2lucHV0LnRlc3Rf
bmFtZSkKQEAgLTE1NiwzMiArMTEzLDggQEAgY2xhc3MgV29ya2VyKG1hbmFnZXJfd29ya2VyX2Jy
b2tlci5BYnN0cmFjdFdvcmtlcik6CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0ZXN0X2lu
cHV0LnNob3VsZF9ydW5fcGl4ZWxfdGVzdCA9IEZhbHNlCiAKLSAgICBkZWYgX3J1bl90ZXN0KHNl
bGYsIHRlc3RfaW5wdXQpOgotICAgICAgICB0ZXN0X3RpbWVvdXRfc2VjID0gc2VsZi50aW1lb3V0
KHRlc3RfaW5wdXQpCi0gICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5f
d29ya2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdzdGFydGVkX3Rlc3QnLCB0ZXN0X2lucHV0
LCB0ZXN0X3RpbWVvdXRfc2VjKQotCi0gICAgICAgIHJlc3VsdCA9IHNlbGYucnVuX3Rlc3Rfd2l0
aF90aW1lb3V0KHRlc3RfaW5wdXQsIHRlc3RfdGltZW91dF9zZWMpCi0KLSAgICAgICAgZWxhcHNl
ZF90aW1lID0gdGltZS50aW1lKCkgLSBzdGFydAotICAgICAgICBsb2dfbWVzc2FnZXMgPSBzZWxm
Ll9sb2dfbWVzc2FnZXMKLSAgICAgICAgc2VsZi5fbG9nX21lc3NhZ2VzID0gW10KLSAgICAgICAg
c2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdmaW5pc2hlZF90ZXN0JywgcmVz
dWx0LCBlbGFwc2VkX3RpbWUsIGxvZ19tZXNzYWdlcykKLQotICAgICAgICBzZWxmLmNsZWFuX3Vw
X2FmdGVyX3Rlc3QodGVzdF9pbnB1dCwgcmVzdWx0KQotCi0gICAgZGVmIGNsZWFudXAoc2VsZik6
Ci0gICAgICAgIF9sb2cuZGVidWcoIiVzIGNsZWFuaW5nIHVwIiAlIHNlbGYuX25hbWUpCi0gICAg
ICAgIHNlbGYua2lsbF9kcml2ZXIoKQotICAgICAgICBpZiBzZWxmLl90ZXN0c19ydW5fZmlsZToK
LSAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLmNsb3NlKCkKLSAgICAgICAgICAgIHNl
bGYuX3Rlc3RzX3J1bl9maWxlID0gTm9uZQotICAgICAgICBpZiBzZWxmLl9sb2dfaGFuZGxlciBh
bmQgc2VsZi5fbG9nZ2VyOgotICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLnJlbW92ZUhhbmRsZXIo
c2VsZi5fbG9nX2hhbmRsZXIpCi0gICAgICAgIHNlbGYuX2xvZ19oYW5kbGVyID0gTm9uZQotICAg
ICAgICBzZWxmLl9sb2dnZXIgPSBOb25lCiAKLSAgICBkZWYgdGltZW91dChzZWxmLCB0ZXN0X2lu
cHV0KToKKyAgICBkZWYgX3RpbWVvdXQoc2VsZiwgdGVzdF9pbnB1dCk6CiAgICAgICAgICIiIkNv
bXB1dGUgdGhlIGFwcHJvcHJpYXRlIHRpbWVvdXQgdmFsdWUgZm9yIGEgdGVzdC4iIiIKICAgICAg
ICAgIyBUaGUgRHVtcFJlbmRlclRyZWUgd2F0Y2hkb2cgdXNlcyAyLjV4IHRoZSB0aW1lb3V0OyB3
ZSB3YW50IHRvIGJlCiAgICAgICAgICMgbGFyZ2VyIHRoYW4gdGhhdC4gV2UgYWxzbyBhZGQgYSBs
aXR0bGUgbW9yZSBwYWRkaW5nIGlmIHdlJ3JlCkBAIC0xOTcsMTggKzEzMCwxOCBAQCBjbGFzcyBX
b3JrZXIobWFuYWdlcl93b3JrZXJfYnJva2VyLkFic3RyYWN0V29ya2VyKToKICAgICAgICAgdGhy
ZWFkX3RpbWVvdXRfc2VjID0gZHJpdmVyX3RpbWVvdXRfc2VjICsgdGhyZWFkX3BhZGRpbmdfc2Vj
CiAgICAgICAgIHJldHVybiB0aHJlYWRfdGltZW91dF9zZWMKIAotICAgIGRlZiBraWxsX2RyaXZl
cihzZWxmKToKKyAgICBkZWYgX2tpbGxfZHJpdmVyKHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9k
cml2ZXI6CiAgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBraWxsaW5nIGRyaXZlciIgJSBzZWxm
Ll9uYW1lKQogICAgICAgICAgICAgc2VsZi5fZHJpdmVyLnN0b3AoKQogICAgICAgICAgICAgc2Vs
Zi5fZHJpdmVyID0gTm9uZQogCi0gICAgZGVmIHJ1bl90ZXN0X3dpdGhfdGltZW91dChzZWxmLCB0
ZXN0X2lucHV0LCB0aW1lb3V0KToKKyAgICBkZWYgX3J1bl90ZXN0X3dpdGhfdGltZW91dChzZWxm
LCB0ZXN0X2lucHV0LCB0aW1lb3V0KToKICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5ydW5fc2lu
Z2x5OgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl90ZXN0X2luX2Fub3RoZXJfdGhyZWFk
KHRlc3RfaW5wdXQsIHRpbWVvdXQpCiAgICAgICAgIHJldHVybiBzZWxmLl9ydW5fdGVzdF9pbl90
aGlzX3RocmVhZCh0ZXN0X2lucHV0KQogCi0gICAgZGVmIGNsZWFuX3VwX2FmdGVyX3Rlc3Qoc2Vs
ZiwgdGVzdF9pbnB1dCwgcmVzdWx0KToKKyAgICBkZWYgX2NsZWFuX3VwX2FmdGVyX3Rlc3Qoc2Vs
ZiwgdGVzdF9pbnB1dCwgcmVzdWx0KToKICAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgKz0gMQog
ICAgICAgICB0ZXN0X25hbWUgPSB0ZXN0X2lucHV0LnRlc3RfbmFtZQogICAgICAgICBzZWxmLl90
ZXN0c19ydW5fZmlsZS53cml0ZSh0ZXN0X25hbWUgKyAiXG4iKQpAQCAtMjE2LDcgKzE0OSw3IEBA
IGNsYXNzIFdvcmtlcihtYW5hZ2VyX3dvcmtlcl9icm9rZXIuQWJzdHJhY3RXb3JrZXIpOgogICAg
ICAgICBpZiByZXN1bHQuZmFpbHVyZXM6CiAgICAgICAgICAgICAjIENoZWNrIGFuZCBraWxsIER1
bXBSZW5kZXJUcmVlIGlmIHdlIG5lZWQgdG8uCiAgICAgICAgICAgICBpZiBhbnkoW2YuZHJpdmVy
X25lZWRzX3Jlc3RhcnQoKSBmb3IgZiBpbiByZXN1bHQuZmFpbHVyZXNdKToKLSAgICAgICAgICAg
ICAgICBzZWxmLmtpbGxfZHJpdmVyKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9raWxsX2RyaXZl
cigpCiAgICAgICAgICAgICAgICAgIyBSZXNldCB0aGUgYmF0Y2ggY291bnQgc2luY2UgdGhlIHNo
ZWxsIGp1c3QgYm91bmNlZC4KICAgICAgICAgICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCA9IDAK
IApAQCAtMjMwLDcgKzE2Myw3IEBAIGNsYXNzIFdvcmtlcihtYW5hZ2VyX3dvcmtlcl9icm9rZXIu
QWJzdHJhY3RXb3JrZXIpOgogICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgcGFzc2VkIiAl
IChzZWxmLl9uYW1lLCB0ZXN0X25hbWUpKQogCiAgICAgICAgIGlmIHNlbGYuX2JhdGNoX3NpemUg
PiAwIGFuZCBzZWxmLl9iYXRjaF9jb3VudCA+PSBzZWxmLl9iYXRjaF9zaXplOgotICAgICAgICAg
ICAgc2VsZi5raWxsX2RyaXZlcigpCisgICAgICAgICAgICBzZWxmLl9raWxsX2RyaXZlcigpCiAg
ICAgICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCA9IDAKIAogICAgIGRlZiBfcnVuX3Rlc3RfaW5f
YW5vdGhlcl90aHJlYWQoc2VsZiwgdGVzdF9pbnB1dCwgdGhyZWFkX3RpbWVvdXRfc2VjKToKQEAg
LTI1Niw3ICsxODksNyBAQCBjbGFzcyBXb3JrZXIobWFuYWdlcl93b3JrZXJfYnJva2VyLkFic3Ry
YWN0V29ya2VyKToKICAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IE5vbmUKIAogICAgICAg
ICAgICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IHdvcmtl
ci5ydW5fc2luZ2xlX3Rlc3QoZHJpdmVyLCB0ZXN0X2lucHV0KQorICAgICAgICAgICAgICAgIHNl
bGYucmVzdWx0ID0gd29ya2VyLl9ydW5fc2luZ2xlX3Rlc3QoZHJpdmVyLCB0ZXN0X2lucHV0KQog
CiAgICAgICAgIHRocmVhZCA9IFNpbmdsZVRlc3RUaHJlYWQoKQogICAgICAgICB0aHJlYWQuc3Rh
cnQoKQpAQCAtMjg4LDIxICsyMjEsMTQgQEAgY2xhc3MgV29ya2VyKG1hbmFnZXJfd29ya2VyX2Jy
b2tlci5BYnN0cmFjdFdvcmtlcik6CiAgICAgICAgIFJldHVybnM6IGEgVGVzdFJlc3VsdCBvYmpl
Y3QuCiAgICAgICAgICIiIgogICAgICAgICBpZiBzZWxmLl9kcml2ZXIgYW5kIHNlbGYuX2RyaXZl
ci5oYXNfY3Jhc2hlZCgpOgotICAgICAgICAgICAgc2VsZi5raWxsX2RyaXZlcigpCisgICAgICAg
ICAgICBzZWxmLl9raWxsX2RyaXZlcigpCiAgICAgICAgIGlmIG5vdCBzZWxmLl9kcml2ZXI6CiAg
ICAgICAgICAgICBzZWxmLl9kcml2ZXIgPSBzZWxmLl9wb3J0LmNyZWF0ZV9kcml2ZXIoc2VsZi5f
d29ya2VyX251bWJlcikKLSAgICAgICAgcmV0dXJuIHNlbGYucnVuX3NpbmdsZV90ZXN0KHNlbGYu
X2RyaXZlciwgdGVzdF9pbnB1dCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9zaW5nbGVfdGVz
dChzZWxmLl9kcml2ZXIsIHRlc3RfaW5wdXQpCiAKLSAgICBkZWYgcnVuX3NpbmdsZV90ZXN0KHNl
bGYsIGRyaXZlciwgdGVzdF9pbnB1dCk6CisgICAgZGVmIF9ydW5fc2luZ2xlX3Rlc3Qoc2VsZiwg
ZHJpdmVyLCB0ZXN0X2lucHV0KToKICAgICAgICAgcmV0dXJuIHNpbmdsZV90ZXN0X3J1bm5lci5y
dW5fc2luZ2xlX3Rlc3Qoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucywKICAgICAgICAgICAgIHRl
c3RfaW5wdXQsIGRyaXZlciwgc2VsZi5fbmFtZSkKIAogCi1jbGFzcyBfV29ya2VyTG9nSGFuZGxl
cihsb2dnaW5nLkhhbmRsZXIpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3b3JrZXIpOgotICAg
ICAgICBsb2dnaW5nLkhhbmRsZXIuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5fd29ya2Vy
ID0gd29ya2VyCi0gICAgICAgIHNlbGYuX3BpZCA9IG9zLmdldHBpZCgpCiAKLSAgICBkZWYgZW1p
dChzZWxmLCByZWNvcmQpOgotICAgICAgICBzZWxmLl93b3JrZXIuX2xvZ19tZXNzYWdlcy5hcHBl
bmQodHVwbGUoW3JlY29yZC5nZXRNZXNzYWdlKCksIHJlY29yZC5jcmVhdGVkLCBzZWxmLl9waWRd
KSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRy
b2xsZXJzL3dvcmtlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2NvbnRyb2xsZXJzL3dvcmtlcl91bml0dGVzdC5weQppbmRleCBlYmI0ZTdhNWJiNWFl
Njg3NDcxY2JhMzIwMGEwOGIzMWI1OGIxMzZiLi4yOTg2ZWYwNzAxMGI2MmE0MDZhMTdjYTI0ODI5
NmIwNmQ2ZDdkY2I5IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9jb250cm9sbGVycy93b3JrZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvd29ya2VyX3VuaXR0ZXN0LnB5CkBAIC0y
NSwzMCArMjUsMyBAQAogIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJv
bGxlcnMud29ya2VyIGltcG9ydCBXb3JrZXIsIFdvcmtlckFyZ3VtZW50cwotZnJvbSB3ZWJraXRw
eS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucwotCi0KLWNsYXNzIEZha2VDb25uZWN0
aW9uKG9iamVjdCk6Ci0gICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZik6Ci0gICAgICAgIHBh
c3MKLQotICAgIGRlZiBwb3N0X21lc3NhZ2Uoc2VsZiwgbWVzc2FnZV9uYW1lLCAqbWVzc2FnZV9h
cmdzKToKLSAgICAgICAgcGFzcwotCi0KLWNsYXNzIFdvcmtlclRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgotICAgIGRlZiB0ZXN0X2RlZmF1bHRfcGxhdGZvcm1faW5fd29ya2VyKHNlbGYpOgotICAg
ICAgICAjIFRoaXMgY2hlY2tzIHRoYXQgd2UgZ290IGEgcG9ydCBhbmQgZGlkbid0IHJhaXNlIGFu
IGV4Y2VwdGlvbgotICAgICAgICAjIGlmIHdlIGRpZG4ndCBzcGVjaWZ5IGEgcG9ydCB3aXRoIHRo
ZSAtLXBsYXRmb3JtIGZsYWcuCi0gICAgICAgIHdvcmtlcl9jb25uZWN0aW9uID0gRmFrZUNvbm5l
Y3Rpb24oKQotICAgICAgICB3b3JrZXIgPSBXb3JrZXIod29ya2VyX2Nvbm5lY3Rpb24sIFdvcmtl
ckFyZ3VtZW50cygxLCAnL3RtcCcsIE1vY2tPcHRpb25zKHBsYXRmb3JtPU5vbmUsIHByaW50X29w
dGlvbnM9Tm9uZSwgdmVyYm9zZT1GYWxzZSwgYmF0Y2hfc2l6ZT0wKSkpCi0gICAgICAgIHdvcmtl
ci5fc2V0X3VwX2hvc3RfYW5kX3BvcnQoKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyh3
b3JrZXIuX3BvcnQsIE5vbmUpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB1
bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3Qu
cHkKaW5kZXggZDVjMWUxNGUxZGVmZGU4MjgxOTM2ZjlhOTY3MjUyZjhiMDgxNGI2YS4uZTNmMjYx
OTVhZDZmZmI1OWQ0ZmI1MTAxMTBiOWQyNzNlMTg1YzUzYSAxMDA3NTUKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRl
c3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkKQEAgLTgxLDE4ICs4MSwyMiBAQCBkZWYgcGFyc2Vf
YXJncyhleHRyYV9hcmdzPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNlLCB0ZXN0c19pbmNsdWRl
ZD1GYWxzZSwgbmV3XwogICAgIHJldHVybiBydW5fd2Via2l0X3Rlc3RzLnBhcnNlX2FyZ3MoYXJn
cykKIAogCi1kZWYgcGFzc2luZ19ydW4oZXh0cmFfYXJncz1Ob25lLCBwb3J0X29iaj1Ob25lLCBy
ZWNvcmRfcmVzdWx0cz1GYWxzZSwgdGVzdHNfaW5jbHVkZWQ9RmFsc2UsIGhvc3Q9Tm9uZSk6Citk
ZWYgcGFzc2luZ19ydW4oZXh0cmFfYXJncz1Ob25lLCBwb3J0X29iaj1Ob25lLCByZWNvcmRfcmVz
dWx0cz1GYWxzZSwgdGVzdHNfaW5jbHVkZWQ9RmFsc2UsIGhvc3Q9Tm9uZSwgc2hhcmVkX3BvcnQ9
VHJ1ZSk6CiAgICAgb3B0aW9ucywgcGFyc2VkX2FyZ3MgPSBwYXJzZV9hcmdzKGV4dHJhX2FyZ3Ms
IHJlY29yZF9yZXN1bHRzLCB0ZXN0c19pbmNsdWRlZCkKICAgICBpZiBub3QgcG9ydF9vYmo6CiAg
ICAgICAgIGhvc3QgPSBob3N0IG9yIE1vY2tIb3N0KCkKICAgICAgICAgcG9ydF9vYmogPSBob3N0
LnBvcnRfZmFjdG9yeS5nZXQocG9ydF9uYW1lPW9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnM9b3B0
aW9ucykKKworICAgIGlmIHNoYXJlZF9wb3J0OgorICAgICAgICBwb3J0X29iai5ob3N0LnBvcnRf
ZmFjdG9yeS5nZXQgPSBsYW1iZGEgKmFyZ3MsICoqa3dhcmdzOiBwb3J0X29iagorCiAgICAgYnVp
bGRib3Rfb3V0cHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQogICAgIHJlZ3VsYXJfb3V0cHV0ID0g
U3RyaW5nSU8uU3RyaW5nSU8oKQogICAgIHJlcyA9IHJ1bl93ZWJraXRfdGVzdHMucnVuKHBvcnRf
b2JqLCBvcHRpb25zLCBwYXJzZWRfYXJncywgYnVpbGRib3Rfb3V0cHV0PWJ1aWxkYm90X291dHB1
dCwgcmVndWxhcl9vdXRwdXQ9cmVndWxhcl9vdXRwdXQpCiAgICAgcmV0dXJuIHJlcyA9PSAwIGFu
ZCBub3QgcmVndWxhcl9vdXRwdXQuZ2V0dmFsdWUoKSBhbmQgbm90IGJ1aWxkYm90X291dHB1dC5n
ZXR2YWx1ZSgpCiAKIAotZGVmIGxvZ2dpbmdfcnVuKGV4dHJhX2FyZ3M9Tm9uZSwgcG9ydF9vYmo9
Tm9uZSwgcmVjb3JkX3Jlc3VsdHM9RmFsc2UsIHRlc3RzX2luY2x1ZGVkPUZhbHNlLCBob3N0PU5v
bmUsIG5ld19yZXN1bHRzPUZhbHNlKToKK2RlZiBsb2dnaW5nX3J1bihleHRyYV9hcmdzPU5vbmUs
IHBvcnRfb2JqPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNlLCB0ZXN0c19pbmNsdWRlZD1GYWxz
ZSwgaG9zdD1Ob25lLCBuZXdfcmVzdWx0cz1GYWxzZSwgc2hhcmVkX3BvcnQ9VHJ1ZSk6CiAgICAg
b3B0aW9ucywgcGFyc2VkX2FyZ3MgPSBwYXJzZV9hcmdzKGV4dHJhX2FyZ3M9ZXh0cmFfYXJncywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkX3Jlc3VsdHM9cmVj
b3JkX3Jlc3VsdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rz
X2luY2x1ZGVkPXRlc3RzX2luY2x1ZGVkLApAQCAtMTA1LDcgKzEwOSw5IEBAIGRlZiBsb2dnaW5n
X3J1bihleHRyYV9hcmdzPU5vbmUsIHBvcnRfb2JqPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNl
LCB0ZXN0c19pbmNsCiAgICAgcmV0dXJuIChyZXMsIGJ1aWxkYm90X291dHB1dCwgcmVndWxhcl9v
dXRwdXQsIGhvc3QudXNlcikKIAogCi1kZWYgcnVuX2FuZF9jYXB0dXJlKHBvcnRfb2JqLCBvcHRp
b25zLCBwYXJzZWRfYXJncyk6CitkZWYgcnVuX2FuZF9jYXB0dXJlKHBvcnRfb2JqLCBvcHRpb25z
LCBwYXJzZWRfYXJncywgc2hhcmVkX3BvcnQ9VHJ1ZSk6CisgICAgaWYgc2hhcmVkX3BvcnQ6Cisg
ICAgICAgIHBvcnRfb2JqLmhvc3QucG9ydF9mYWN0b3J5LmdldCA9IGxhbWJkYSAqYXJncywgKipr
d2FyZ3M6IHBvcnRfb2JqCiAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQog
ICAgIHRyeToKICAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQpAQCAtMzAyLDE0ICszMDgsMTQg
QEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UsIFN0cmVhbVRlc3RpbmdNaXhpbik6
CiAgICAgZGVmIHRlc3RfY2hpbGRfcHJvY2Vzc2VzXzIoc2VsZik6CiAgICAgICAgIGlmIHNlbGYu
c2hvdWxkX3Rlc3RfcHJvY2Vzc2VzOgogICAgICAgICAgICAgXywgXywgcmVndWxhcl9vdXRwdXQs
IF8gPSBsb2dnaW5nX3J1bigKLSAgICAgICAgICAgICAgICBbJy0tcHJpbnQnLCAnY29uZmlnJywg
Jy0tY2hpbGQtcHJvY2Vzc2VzJywgJzInXSkKKyAgICAgICAgICAgICAgICBbJy0tcHJpbnQnLCAn
Y29uZmlnJywgJy0tY2hpbGQtcHJvY2Vzc2VzJywgJzInXSwgc2hhcmVkX3BvcnQ9RmFsc2UpCiAg
ICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KFsnUnVubmluZyAyICcgaW4gbGluZSBmb3Ig
bGluZSBpbiByZWd1bGFyX291dHB1dC5idWZsaXN0XSkpCiAKICAgICBkZWYgdGVzdF9jaGlsZF9w
cm9jZXNzZXNfbWluKHNlbGYpOgogICAgICAgICBpZiBzZWxmLnNob3VsZF90ZXN0X3Byb2Nlc3Nl
czoKICAgICAgICAgICAgIF8sIF8sIHJlZ3VsYXJfb3V0cHV0LCBfID0gbG9nZ2luZ19ydW4oCiAg
ICAgICAgICAgICAgICAgWyctLXByaW50JywgJ2NvbmZpZycsICctLWNoaWxkLXByb2Nlc3Nlcycs
ICcyJywgJ3Bhc3NlcyddLAotICAgICAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVkPVRydWUpCisg
ICAgICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgc2hhcmVkX3BvcnQ9RmFsc2UpCiAg
ICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KFsnUnVubmluZyAxICcgaW4gbGluZSBmb3Ig
bGluZSBpbiByZWd1bGFyX291dHB1dC5idWZsaXN0XSkpCiAKICAgICBkZWYgdGVzdF9kcnlydW4o
c2VsZik6CkBAIC0zMzQsNyArMzQwLDcgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENh
c2UsIFN0cmVhbVRlc3RpbmdNaXhpbik6CiAKICAgICAgICAgaWYgc2VsZi5zaG91bGRfdGVzdF9w
cm9jZXNzZXM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhydW5fd2Via2l0X3Rlc3Rz
LldvcmtlckV4Y2VwdGlvbiwgbG9nZ2luZ19ydW4sCi0gICAgICAgICAgICAgICAgWyctLWNoaWxk
LXByb2Nlc3NlcycsICcyJywgJy0tZm9yY2UnLCAnZmFpbHVyZXMvZXhwZWN0ZWQvZXhjZXB0aW9u
Lmh0bWwnLCAncGFzc2VzL3RleHQuaHRtbCddLCB0ZXN0c19pbmNsdWRlZD1UcnVlKQorICAgICAg
ICAgICAgICAgIFsnLS1jaGlsZC1wcm9jZXNzZXMnLCAnMicsICctLWZvcmNlJywgJ2ZhaWx1cmVz
L2V4cGVjdGVkL2V4Y2VwdGlvbi5odG1sJywgJ3Bhc3Nlcy90ZXh0Lmh0bWwnXSwgdGVzdHNfaW5j
bHVkZWQ9VHJ1ZSwgc2hhcmVkX3BvcnQ9RmFsc2UpCiAKICAgICBkZWYgdGVzdF9mdWxsX3Jlc3Vs
dHNfaHRtbChzZWxmKToKICAgICAgICAgIyBGSVhNRTogdmVyaWZ5IGh0bWw/CkBAIC0zNjQsNyAr
MzcwLDcgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UsIFN0cmVhbVRlc3RpbmdN
aXhpbik6CiAKICAgICAgICAgaWYgc2VsZi5zaG91bGRfdGVzdF9wcm9jZXNzZXM6CiAgICAgICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlib2FyZEludGVycnVwdCwgbG9nZ2luZ19ydW4sCi0g
ICAgICAgICAgICAgICAgWydmYWlsdXJlcy9leHBlY3RlZC9rZXlib2FyZC5odG1sJywgJ3Bhc3Nl
cy90ZXh0Lmh0bWwnLCAnLS1jaGlsZC1wcm9jZXNzZXMnLCAnMicsICctLWZvcmNlJ10sIHRlc3Rz
X2luY2x1ZGVkPVRydWUpCisgICAgICAgICAgICAgICAgWydmYWlsdXJlcy9leHBlY3RlZC9rZXli
b2FyZC5odG1sJywgJ3Bhc3Nlcy90ZXh0Lmh0bWwnLCAnLS1jaGlsZC1wcm9jZXNzZXMnLCAnMics
ICctLWZvcmNlJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUsIHNoYXJlZF9wb3J0PUZhbHNlKQogCiAg
ICAgZGVmIHRlc3Rfbm9fdGVzdHNfZm91bmQoc2VsZik6CiAgICAgICAgIHJlcywgb3V0LCBlcnIs
IHVzZXIgPSBsb2dnaW5nX3J1bihbJ3Jlc291cmNlcyddLCB0ZXN0c19pbmNsdWRlZD1UcnVlKQpA
QCAtNzU0LDYgKzc2MCw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBTdHJl
YW1UZXN0aW5nTWl4aW4pOgogCiAgICAgICAgICMgTm93IHdlIHRlc3QgdGhhdCAtLWNsb2JiZXIt
b2xkLXJlc3VsdHMgZG9lcyByZW1vdmUgdGhlIG9sZCBlbnRyaWVzIGFuZCB0aGUgb2xkIHJldHJp
ZXMsCiAgICAgICAgICMgYW5kIHRoYXQgd2UgZG9uJ3QgcmV0cnkgYWdhaW4uCisgICAgICAgIGhv
c3QgPSBNb2NrSG9zdCgpCiAgICAgICAgIHJlcywgb3V0LCBlcnIsIF8gPSBsb2dnaW5nX3J1bihb
Jy0tbm8tcmV0cnktZmFpbHVyZXMnLCAnLS1jbG9iYmVyLW9sZC1yZXN1bHRzJywgJ2ZhaWx1cmVz
L2ZsYWt5J10sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGhvc3Q9aG9zdCkKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMocmVzLCAxKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0Nsb2JiZXJpbmcg
b2xkIHJlc3VsdHMnIGluIGVyci5nZXR2YWx1ZSgpKQpAQCAtNzY3LDE4ICs3NzQsMTMgQEAgY2xh
c3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UsIFN0cmVhbVRlc3RpbmdNaXhpbik6CiAgICAg
IyBUaGVzZSBuZXh0IHRlc3RzIHRlc3QgdGhhdCB3ZSBydW4gdGhlIHRlc3RzIGluIGFzY2VuZGlu
ZyBhbHBoYWJldGljYWwKICAgICAjIG9yZGVyIHBlciBkaXJlY3RvcnkuIEhUVFAgdGVzdHMgYXJl
IHNoYXJkZWQgc2VwYXJhdGVseSBmcm9tIG90aGVyIHRlc3RzLAogICAgICMgc28gd2UgaGF2ZSB0
byB0ZXN0IGJvdGguCi0gICAgZGVmIGFzc2VydF9ydW5fb3JkZXIoc2VsZiwgY2hpbGRfcHJvY2Vz
c2VzPScxJyk6Ci0gICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLWNoaWxkLXBy
b2Nlc3NlcycsIGNoaWxkX3Byb2Nlc3NlcywgJ3Bhc3NlcyddLAotICAgICAgICAgICAgdGVzdHNf
aW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAgZGVmIHRlc3RfcnVuX29y
ZGVyX19pbmxpbmUoc2VsZik6CisgICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWydw
YXNzZXMnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCiAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRlc3RzX3J1biwgc29ydGVkKHRlc3RzX3J1bikpCiAKLSAg
ICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tY2hpbGQtcHJvY2Vzc2VzJywgY2hp
bGRfcHJvY2Vzc2VzLCAnaHR0cC90ZXN0cy9wYXNzZXMnXSwKLSAgICAgICAgICAgIHRlc3RzX2lu
Y2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAgICB0ZXN0c19ydW4gPSBn
ZXRfdGVzdHNfcnVuKFsnaHR0cC90ZXN0cy9wYXNzZXMnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwg
ZmxhdHRlbl9iYXRjaGVzPVRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRlc3RzX3J1
biwgc29ydGVkKHRlc3RzX3J1bikpCiAKLSAgICBkZWYgdGVzdF9ydW5fb3JkZXJfX2lubGluZShz
ZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfcnVuX29yZGVyKCkKLQogICAgIGRlZiB0ZXN0X3Rv
bGVyYW5jZShzZWxmKToKICAgICAgICAgY2xhc3MgSW1hZ2VEaWZmVGVzdFBvcnQoVGVzdFBvcnQp
OgogICAgICAgICAgICAgZGVmIGRpZmZfaW1hZ2Uoc2VsZiwgZXhwZWN0ZWRfY29udGVudHMsIGFj
dHVhbF9jb250ZW50cywgdG9sZXJhbmNlPU5vbmUpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdmlld3MvbWV0ZXJlZF9zdHJlYW0ucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy92aWV3cy9tZXRlcmVkX3N0cmVhbS5weQppbmRl
eCA4MTQ0Mzc3ODBhYzY3ZDI4OTRkNmU5ZmI0YmY3Zjk1MGJiYTRhZTQ5Li44NGVjMjQ1MTNkODY4
OTFlOGYwOTVlOWE0MTYxMzNhODMyNTdmMmE1IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy92aWV3cy9tZXRlcmVkX3N0cmVhbS5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy92aWV3cy9tZXRlcmVkX3N0cmVhbS5weQpAQCAt
MTI4LDQgKzEyOCw0IEBAIGNsYXNzIF9Mb2dIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CiAgICAg
ICAgIHNlbGYubmFtZSA9IExPR19IQU5ETEVSX05BTUUKIAogICAgIGRlZiBlbWl0KHNlbGYsIHJl
Y29yZCk6Ci0gICAgICAgIHNlbGYuX21ldGVyLndyaXRlbG4ocmVjb3JkLmdldE1lc3NhZ2UoKSwg
cmVjb3JkLmNyZWF0ZWQpCisgICAgICAgIHNlbGYuX21ldGVyLndyaXRlbG4ocmVjb3JkLmdldE1l
c3NhZ2UoKSwgcmVjb3JkLmNyZWF0ZWQsIHJlY29yZC5wcm9jZXNzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149665</attachid>
            <date>2012-06-26 19:01:39 -0700</date>
            <delta_ts>2012-06-26 21:02:29 -0700</delta_ts>
            <desc>roll-up patch based off of r121304; not for review or landing</desc>
            <filename>mwb_cleanup.patch</filename>
            <type>text/plain</type>
            <size>69254</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xs
ZXJzL21hbmFnZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250
cm9sbGVycy9tYW5hZ2VyLnB5CmluZGV4IGE2M2MxZWYuLjEzMzQwOTAgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFu
YWdlci5weQpAQCAtNDQsNyArNDQsNyBAQCBpbXBvcnQgcmUKIGltcG9ydCBzeXMKIGltcG9ydCB0
aW1lCiAKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmNvbnRyb2xsZXJzIGltcG9ydCBtYW5h
Z2VyX3dvcmtlcl9icm9rZXIKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmNvbnRyb2xsZXJz
Lm1hbmFnZXJfd29ya2VyX2Jyb2tlciBpbXBvcnQgTWVzc2FnZVBvb2wKIGZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLmNvbnRyb2xsZXJzIGltcG9ydCB3b3JrZXIKIGZyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLmNvbnRyb2xsZXJzLnRlc3RfcmVzdWx0X3dyaXRlciBpbXBvcnQgVGVzdFJlc3Vs
dFdyaXRlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0
IGpzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yCkBAIC0yNjYsMTEgKzI2Niw2IEBAIGNsYXNz
IFRlc3RSdW5JbnRlcnJ1cHRlZEV4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgICAgICByZXR1cm4g
c2VsZi5fX2NsYXNzX18sIChzZWxmLnJlYXNvbiwpCiAKIAotY2xhc3MgV29ya2VyRXhjZXB0aW9u
KEV4Y2VwdGlvbik6Ci0gICAgIiIiUmFpc2VkIHdoZW4gd2UgcmVjZWl2ZSBhbiB1bmV4cGVjdGVk
L3Vua25vd24gZXhjZXB0aW9uIGZyb20gYSB3b3JrZXIuIiIiCi0gICAgcGFzcwotCi0KIGNsYXNz
IFRlc3RTaGFyZChvYmplY3QpOgogICAgICIiIkEgdGVzdCBzaGFyZCBpcyBhIG5hbWVkIGxpc3Qg
b2YgVGVzdElucHV0cy4iIiIKIApAQCAtMzAyLDcgKzI5Nyw2IEBAIGNsYXNzIE1hbmFnZXIob2Jq
ZWN0KToKICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IHBvcnQuaG9zdC5maWxlc3lzdGVtCiAg
ICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCiAgICAgICAgIHNlbGYuX3ByaW50ZXIgPSBw
cmludGVyCi0gICAgICAgIHNlbGYuX21lc3NhZ2VfYnJva2VyID0gTm9uZQogICAgICAgICBzZWxm
Ll9leHBlY3RhdGlvbnMgPSBOb25lCiAKICAgICAgICAgc2VsZi5IVFRQX1NVQkRJUiA9ICdodHRw
JyArIHBvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUgpAQCAtMzMwLDExICszMjQsOSBAQCBjbGFzcyBN
YW5hZ2VyKG9iamVjdCk6CiAKICAgICAgICAgc2VsZi5fYWxsX3Jlc3VsdHMgPSBbXQogICAgICAg
ICBzZWxmLl9ncm91cF9zdGF0cyA9IHt9CisgICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0cyA9IHt9
CiAgICAgICAgIHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkgPSBOb25lCiAKLSAgICAgICAg
IyBUaGlzIG1hcHMgd29ya2VyIG5hbWVzIHRvIHRoZSBzdGF0ZSB3ZSBhcmUgdHJhY2tpbmcgZm9y
IGVhY2ggb2YgdGhlbS4KLSAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRlcyA9IHt9Ci0KICAgICBk
ZWYgY29sbGVjdF90ZXN0cyhzZWxmLCBhcmdzKToKICAgICAgICAgIiIiRmluZCBhbGwgdGhlIGZp
bGVzIHRvIHRlc3QuCiAKQEAgLTc0NiwxMSArNzM4LDEwIEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0
KToKICAgICAgICAgc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSA9IHJlc3VsdF9zdW1tYXJ5
CiAgICAgICAgIHNlbGYuX2FsbF9yZXN1bHRzID0gW10KICAgICAgICAgc2VsZi5fZ3JvdXBfc3Rh
dHMgPSB7fQotICAgICAgICBzZWxmLl93b3JrZXJfc3RhdGVzID0ge30KKyAgICAgICAgc2VsZi5f
d29ya2VyX3N0YXRzID0ge30KIAogICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IEZhbHNl
CiAgICAgICAgIGludGVycnVwdGVkID0gRmFsc2UKLSAgICAgICAgdGhyZWFkX3RpbWluZ3MgPSBb
XQogCiAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTaGFyZGluZyB0ZXN0cyAu
Li4nKQogICAgICAgICBsb2NrZWRfc2hhcmRzLCB1bmxvY2tlZF9zaGFyZHMgPSBzZWxmLl9zaGFy
ZF90ZXN0cyhmaWxlX2xpc3QsIGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyksIHNl
bGYuX29wdGlvbnMuZnVsbHlfcGFyYWxsZWwpCkBAIC03NzEsNzkgKzc2MiwyOSBAQCBjbGFzcyBN
YW5hZ2VyKG9iamVjdCk6CiAgICAgICAgIG51bV93b3JrZXJzID0gbWluKG51bV93b3JrZXJzLCBs
ZW4oYWxsX3NoYXJkcykpCiAgICAgICAgIHNlbGYuX2xvZ19udW1fd29ya2VycyhudW1fd29ya2Vy
cywgbGVuKGFsbF9zaGFyZHMpLCBsZW4obG9ja2VkX3NoYXJkcykpCiAKLSAgICAgICAgbWFuYWdl
cl9jb25uZWN0aW9uID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLmdldChudW1fd29ya2Vycywgc2Vs
Ziwgd29ya2VyLldvcmtlcikKLQogICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmRyeV9ydW46Ci0g
ICAgICAgICAgICByZXR1cm4gKGtleWJvYXJkX2ludGVycnVwdGVkLCBpbnRlcnJ1cHRlZCwgdGhy
ZWFkX3RpbWluZ3MsIHNlbGYuX2dyb3VwX3N0YXRzLCBzZWxmLl9hbGxfcmVzdWx0cykKKyAgICAg
ICAgICAgIHJldHVybiAoa2V5Ym9hcmRfaW50ZXJydXB0ZWQsIGludGVycnVwdGVkLCBzZWxmLl93
b3JrZXJfc3RhdHMudmFsdWVzKCksIHNlbGYuX2dyb3VwX3N0YXRzLCBzZWxmLl9hbGxfcmVzdWx0
cykKIAogICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgJXMgLi4u
JyAlIGdyYW1tYXIucGx1cmFsaXplKCd3b3JrZXInLCBudW1fd29ya2VycykpCi0gICAgICAgIGZv
ciB3b3JrZXJfbnVtYmVyIGluIHhyYW5nZShudW1fd29ya2Vycyk6Ci0gICAgICAgICAgICB3b3Jr
ZXJfYXJndW1lbnRzID0gd29ya2VyLldvcmtlckFyZ3VtZW50cyh3b3JrZXJfbnVtYmVyLCBzZWxm
LnJlc3VsdHNfZGlyZWN0b3J5KCksIHNlbGYuX29wdGlvbnMpCi0gICAgICAgICAgICB3b3JrZXJf
Y29ubmVjdGlvbiA9IG1hbmFnZXJfY29ubmVjdGlvbi5zdGFydF93b3JrZXIod29ya2VyX2FyZ3Vt
ZW50cykKLSAgICAgICAgICAgIGlmIG51bV93b3JrZXJzID09IDE6Ci0gICAgICAgICAgICAgICAg
IyBGSVhNRTogV2UgbmVlZCB0byBiZSBhYmxlIHRvIHNoYXJlIGEgcG9ydCB3aXRoIHRoZSB3b3Jr
IHNvCi0gICAgICAgICAgICAgICAgIyB0aGF0IHNvbWUgb2YgdGhlIHRlc3RzIGNhbiBxdWVyeSBz
dGF0ZSBvbiB0aGUgcG9ydDsgaWRlYWxseQotICAgICAgICAgICAgICAgICMgd2UnZCByZXdyaXRl
IHRoZSB0ZXN0cyBzbyB0aGF0IHRoaXMgd2Fzbid0IG5lY2Vzc2FyeS4KLSAgICAgICAgICAgICAg
ICAjCi0gICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyBvbmx5IHdvcmtzIGJlY2F1c2Ug
aW4gdGhlIGlubGluZSBjYXNlCi0gICAgICAgICAgICAgICAgIyB0aGUgd29ya2VyIGhhc24ndCBy
ZWFsbHkgc3RhcnRlZCB5ZXQgYW5kIHdvbid0IHN0YXJ0Ci0gICAgICAgICAgICAgICAgIyBydW5u
aW5nIHVudGlsIHdlIGNhbGwgcnVuX21lc3NhZ2VfbG9vcCgpLCBiZWxvdy4KLSAgICAgICAgICAg
ICAgICB3b3JrZXJfY29ubmVjdGlvbi5zZXRfaW5saW5lX2FyZ3VtZW50cyhzZWxmLl9wb3J0KQot
Ci0gICAgICAgICAgICB3b3JrZXJfc3RhdGUgPSBfV29ya2VyU3RhdGUod29ya2VyX251bWJlciwg
d29ya2VyX2Nvbm5lY3Rpb24pCi0gICAgICAgICAgICBzZWxmLl93b3JrZXJfc3RhdGVzW3dvcmtl
cl9jb25uZWN0aW9uLm5hbWUoKV0gPSB3b3JrZXJfc3RhdGUKLQotICAgICAgICAgICAgdGltZS5z
bGVlcChzZWxmLl9wb3J0Lndvcmtlcl9zdGFydHVwX2RlbGF5X3NlY3MoKSkKLQotICAgICAgICBz
ZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgiU3RhcnRpbmcgdGVzdGluZyAuLi4iKQotICAgICAg
ICBmb3Igc2hhcmQgaW4gYWxsX3NoYXJkczoKLSAgICAgICAgICAgICMgRklYTUU6IENoYW5nZSAn
dGVzdF9saXN0JyB0byAnc2hhcmQnLCBtYWtlIHNoYXJkaW5nIHB1YmxpYy4KLSAgICAgICAgICAg
IG1hbmFnZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ3Rlc3RfbGlzdCcsIHNoYXJkLm5hbWUs
IHNoYXJkLnRlc3RfaW5wdXRzKQotCi0gICAgICAgICMgV2UgcG9zdCBvbmUgJ3N0b3AnIG1lc3Nh
Z2UgZm9yIGVhY2ggd29ya2VyLiBCZWNhdXNlIHRoZSBzdG9wIG1lc3NhZ2UKLSAgICAgICAgIyBh
cmUgc2VudCBhZnRlciBhbGwgb2YgdGhlIHRlc3RzLCBhbmQgYmVjYXVzZSBlYWNoIHdvcmtlciB3
aWxsIHN0b3AKLSAgICAgICAgIyByZWFkaW5nIG1lc3NzYWdlcyBhZnRlciByZWNlaXZpbmcgYSBz
dG9wLCB3ZSBjYW4gYmUgc3VyZSBlYWNoCi0gICAgICAgICMgd29ya2VyIHdpbGwgZ2V0IGEgc3Rv
cCBtZXNzYWdlIGFuZCBoZW5jZSB0aGV5IHdpbGwgYWxsIHNodXQgZG93bi4KLSAgICAgICAgZm9y
IF8gaW4geHJhbmdlKG51bV93b3JrZXJzKToKLSAgICAgICAgICAgIG1hbmFnZXJfY29ubmVjdGlv
bi5wb3N0X21lc3NhZ2UoJ3N0b3AnKQogCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdoaWxl
IG5vdCBzZWxmLmlzX2RvbmUoKToKLSAgICAgICAgICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24u
cnVuX21lc3NhZ2VfbG9vcChkZWxheV9zZWNzPTEuMCkKLQotICAgICAgICAgICAgIyBNYWtlIHN1
cmUgYWxsIG9mIHRoZSB3b3JrZXJzIGhhdmUgc2h1dCBkb3duIChpZiBwb3NzaWJsZSkuCi0gICAg
ICAgICAgICBmb3Igd29ya2VyX3N0YXRlIGluIHNlbGYuX3dvcmtlcl9zdGF0ZXMudmFsdWVzKCk6
Ci0gICAgICAgICAgICAgICAgaWYgd29ya2VyX3N0YXRlLndvcmtlcl9jb25uZWN0aW9uLmlzX2Fs
aXZlKCk6Ci0gICAgICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ1dhaXRpbmcgZm9yIHdvcmtl
ciAlZCB0byBleGl0JyAlIHdvcmtlcl9zdGF0ZS5udW1iZXIpCi0gICAgICAgICAgICAgICAgICAg
IHdvcmtlcl9zdGF0ZS53b3JrZXJfY29ubmVjdGlvbi5qb2luKDUuMCkKLSAgICAgICAgICAgICAg
ICAgICAgaWYgd29ya2VyX3N0YXRlLndvcmtlcl9jb25uZWN0aW9uLmlzX2FsaXZlKCk6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCdXb3JrZXIgJWQgZGlkIG5vdCBleGl0IGlu
IHRpbWUuJyAlIHdvcmtlcl9zdGF0ZS5udW1iZXIpCisgICAgICAgIGRlZiB3b3JrZXJfZmFjdG9y
eShjYWxsZXIpOgorICAgICAgICAgICAgcmV0dXJuIHdvcmtlci5Xb3JrZXIoY2FsbGVyLCBzZWxm
LnJlc3VsdHNfZGlyZWN0b3J5KCksIHNlbGYuX29wdGlvbnMpCiAKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgd2l0aCBNZXNzYWdlUG9vbChzZWxmLCB3b3JrZXJfZmFjdG9yeSwgbnVtX3dvcmtl
cnMsIHNlbGYuX3BvcnQud29ya2VyX3N0YXJ0dXBfZGVsYXlfc2VjcygpLCBob3N0PXNlbGYuX3Bv
cnQuaG9zdCkgYXMgcG9vbDoKKyAgICAgICAgICAgICAgICBwb29sLnJ1bigoJ3Rlc3RfbGlzdCcs
IHNoYXJkLm5hbWUsIHNoYXJkLnRlc3RfaW5wdXRzKSBmb3Igc2hhcmQgaW4gYWxsX3NoYXJkcykK
ICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICAgICAgc2VsZi5fcHJp
bnRlci5mbHVzaCgpCiAgICAgICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlKCdJbnRlcnJ1cHRl
ZCwgZXhpdGluZyAuLi4nKQotICAgICAgICAgICAgc2VsZi5jYW5jZWxfd29ya2VycygpCiAgICAg
ICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IFRydWUKICAgICAgICAgZXhjZXB0IFRlc3RS
dW5JbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgZToKICAgICAgICAgICAgIF9sb2cud2FybmluZyhlLnJl
YXNvbikKLSAgICAgICAgICAgIHNlbGYuY2FuY2VsX3dvcmtlcnMoKQogICAgICAgICAgICAgaW50
ZXJydXB0ZWQgPSBUcnVlCi0gICAgICAgIGV4Y2VwdCBXb3JrZXJFeGNlcHRpb246Ci0gICAgICAg
ICAgICBzZWxmLmNhbmNlbF93b3JrZXJzKCkKLSAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4
Y2VwdDoKLSAgICAgICAgICAgICMgVW5leHBlY3RlZCBleGNlcHRpb247IGRvbid0IHRyeSB0byBj
bGVhbiB1cCB3b3JrZXJzLgotICAgICAgICAgICAgX2xvZy5lcnJvcigiRXhjZXB0aW9uIHJhaXNl
ZCwgZXhpdGluZyIpCi0gICAgICAgICAgICBzZWxmLmNhbmNlbF93b3JrZXJzKCkKLSAgICAgICAg
ICAgIHJhaXNlCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rp
b24uY2xlYW51cCgpCiAgICAgICAgICAgICBzZWxmLnN0b3Bfc2VydmVyc193aXRoX2xvY2soKQog
Ci0gICAgICAgIHRocmVhZF90aW1pbmdzID0gW3dvcmtlcl9zdGF0ZS5zdGF0cyBmb3Igd29ya2Vy
X3N0YXRlIGluIHNlbGYuX3dvcmtlcl9zdGF0ZXMudmFsdWVzKCldCi0KICAgICAgICAgIyBGSVhN
RTogc2hvdWxkIHRoaXMgYmUgYSBjbGFzcyBpbnN0ZWFkIG9mIGEgdHVwbGU/Ci0gICAgICAgIHJl
dHVybiAoaW50ZXJydXB0ZWQsIGtleWJvYXJkX2ludGVycnVwdGVkLCB0aHJlYWRfdGltaW5ncywg
c2VsZi5fZ3JvdXBfc3RhdHMsIHNlbGYuX2FsbF9yZXN1bHRzKQorICAgICAgICByZXR1cm4gKGlu
dGVycnVwdGVkLCBrZXlib2FyZF9pbnRlcnJ1cHRlZCwgc2VsZi5fd29ya2VyX3N0YXRzLnZhbHVl
cygpLCBzZWxmLl9ncm91cF9zdGF0cywgc2VsZi5fYWxsX3Jlc3VsdHMpCiAKICAgICBkZWYgcmVz
dWx0c19kaXJlY3Rvcnkoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9yZXRyeWluZzoKQEAg
LTE0NTIsNDIgKzEzOTMsMjcgQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAgICAgICByZXN1
bHRzX2ZpbGVuYW1lID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX3Jlc3VsdHNfZGlyZWN0
b3J5LCAicmVzdWx0cy5odG1sIikKICAgICAgICAgc2VsZi5fcG9ydC5zaG93X3Jlc3VsdHNfaHRt
bF9maWxlKHJlc3VsdHNfZmlsZW5hbWUpCiAKLSAgICBkZWYgbmFtZShzZWxmKToKLSAgICAgICAg
cmV0dXJuICdNYW5hZ2VyJwotCi0gICAgZGVmIGlzX2RvbmUoc2VsZik6Ci0gICAgICAgIHdvcmtl
cl9zdGF0ZXMgPSBzZWxmLl93b3JrZXJfc3RhdGVzLnZhbHVlcygpCi0gICAgICAgIHJldHVybiB3
b3JrZXJfc3RhdGVzIGFuZCBhbGwoc2VsZi5fd29ya2VyX2lzX2RvbmUod29ya2VyX3N0YXRlKSBm
b3Igd29ya2VyX3N0YXRlIGluIHdvcmtlcl9zdGF0ZXMpCi0KLSAgICAjIEZJWE1FOiBJbmxpbmUg
dGhpcyBmdW5jdGlvbi4KLSAgICBkZWYgX3dvcmtlcl9pc19kb25lKHNlbGYsIHdvcmtlcl9zdGF0
ZSk6Ci0gICAgICAgIHJldHVybiB3b3JrZXJfc3RhdGUuZG9uZQotCi0gICAgZGVmIGNhbmNlbF93
b3JrZXJzKHNlbGYpOgotICAgICAgICBmb3Igd29ya2VyX3N0YXRlIGluIHNlbGYuX3dvcmtlcl9z
dGF0ZXMudmFsdWVzKCk6Ci0gICAgICAgICAgICB3b3JrZXJfc3RhdGUud29ya2VyX2Nvbm5lY3Rp
b24uY2FuY2VsKCkKLQotICAgIGRlZiBoYW5kbGVfc3RhcnRlZF90ZXN0KHNlbGYsIHNvdXJjZSwg
dGVzdF9pbmZvLCBoYW5nX3RpbWVvdXQpOgotICAgICAgICB3b3JrZXJfc3RhdGUgPSBzZWxmLl93
b3JrZXJfc3RhdGVzW3NvdXJjZV0KLSAgICAgICAgd29ya2VyX3N0YXRlLmN1cnJlbnRfdGVzdF9u
YW1lID0gdGVzdF9pbmZvLnRlc3RfbmFtZQotICAgICAgICB3b3JrZXJfc3RhdGUubmV4dF90aW1l
b3V0ID0gdGltZS50aW1lKCkgKyBoYW5nX3RpbWVvdXQKLQotICAgIGRlZiBoYW5kbGVfZG9uZShz
ZWxmLCBzb3VyY2UsIGxvZ19tZXNzYWdlcz1Ob25lKToKLSAgICAgICAgd29ya2VyX3N0YXRlID0g
c2VsZi5fd29ya2VyX3N0YXRlc1tzb3VyY2VdCi0gICAgICAgIHdvcmtlcl9zdGF0ZS5kb25lID0g
VHJ1ZQotICAgICAgICBzZWxmLl9sb2dfbWVzc2FnZXMobG9nX21lc3NhZ2VzKQotCi0gICAgZGVm
IGhhbmRsZV9leGNlcHRpb24oc2VsZiwgc291cmNlLCBleGNlcHRpb25fdHlwZSwgZXhjZXB0aW9u
X3ZhbHVlLCBzdGFjayk6Ci0gICAgICAgIGlmIGV4Y2VwdGlvbl90eXBlIGluIChLZXlib2FyZElu
dGVycnVwdCwgVGVzdFJ1bkludGVycnVwdGVkRXhjZXB0aW9uKToKLSAgICAgICAgICAgIHJhaXNl
IGV4Y2VwdGlvbl90eXBlKGV4Y2VwdGlvbl92YWx1ZSkKLSAgICAgICAgX2xvZy5lcnJvcigiJXMg
cmFpc2VkICVzKCclcycpOiIgJSAoCi0gICAgICAgICAgICAgICAgICAgc291cmNlLAotICAgICAg
ICAgICAgICAgICAgIGV4Y2VwdGlvbl92YWx1ZS5fX2NsYXNzX18uX19uYW1lX18sCi0gICAgICAg
ICAgICAgICAgICAgc3RyKGV4Y2VwdGlvbl92YWx1ZSkpKQotICAgICAgICBzZWxmLl9sb2dfd29y
a2VyX3N0YWNrKHN0YWNrKQotICAgICAgICByYWlzZSBXb3JrZXJFeGNlcHRpb24oc3RyKGV4Y2Vw
dGlvbl92YWx1ZSkpCi0KLSAgICBkZWYgaGFuZGxlX2ZpbmlzaGVkX2xpc3Qoc2VsZiwgc291cmNl
LCBsaXN0X25hbWUsIG51bV90ZXN0cywgZWxhcHNlZF90aW1lKToKKyAgICBkZWYgaGFuZGxlKHNl
bGYsIG5hbWUsIHNvdXJjZSwgKmFyZ3MpOgorICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYs
ICdfaGFuZGxlXycgKyBuYW1lKQorICAgICAgICBpZiBtZXRob2Q6CisgICAgICAgICAgICByZXR1
cm4gbWV0aG9kKHNvdXJjZSwgKmFyZ3MpCisgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCd1
bmtub3duIG1lc3NhZ2UgJXMgcmVjZWl2ZWQgZnJvbSAlcywgYXJncz0lcycgJSAobmFtZSwgc291
cmNlLCByZXByKGFyZ3MpKSkKKworICAgIGRlZiBfaGFuZGxlX3N0YXJ0ZWRfdGVzdF9saXN0KHNl
bGYsIHdvcmtlcl9uYW1lLCB0ZXN0X2xpc3QpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX2hh
bmRsZV9zdGFydGVkX3Rlc3Qoc2VsZiwgd29ya2VyX25hbWUsIHRlc3RfaW5wdXQsIHRlc3RfdGlt
ZW91dF9zZWMpOgorICAgICAgICAjIEZJWE1FOiBsb2cgdGhhdCB3ZSd2ZSBzdGFydGVkIGFub3Ro
ZXIgdGVzdC4KKyAgICAgICAgcGFzcworCisgICAgZGVmIF9oYW5kbGVfZmluaXNoZWRfdGVzdChz
ZWxmLCB3b3JrZXJfbmFtZSwgcmVzdWx0LCBlbGFwc2VkX3RpbWUsIGxvZ19tZXNzYWdlcz1bXSk6
CisgICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0cy5zZXRkZWZhdWx0KHdvcmtlcl9uYW1lLCB7J25h
bWUnOiB3b3JrZXJfbmFtZSwgJ251bV90ZXN0cyc6IDAsICd0b3RhbF90aW1lJzogMH0pCisgICAg
ICAgIHNlbGYuX3dvcmtlcl9zdGF0c1t3b3JrZXJfbmFtZV1bJ3RvdGFsX3RpbWUnXSArPSBlbGFw
c2VkX3RpbWUKKyAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRzW3dvcmtlcl9uYW1lXVsnbnVtX3Rl
c3RzJ10gKz0gMQorICAgICAgICBzZWxmLl9hbGxfcmVzdWx0cy5hcHBlbmQocmVzdWx0KQorICAg
ICAgICBzZWxmLl91cGRhdGVfc3VtbWFyeV93aXRoX3Jlc3VsdChzZWxmLl9jdXJyZW50X3Jlc3Vs
dF9zdW1tYXJ5LCByZXN1bHQpCisKKyAgICBkZWYgX2hhbmRsZV9maW5pc2hlZF90ZXN0X2xpc3Qo
c2VsZiwgd29ya2VyX25hbWUsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpOgog
ICAgICAgICBzZWxmLl9ncm91cF9zdGF0c1tsaXN0X25hbWVdID0gKG51bV90ZXN0cywgZWxhcHNl
ZF90aW1lKQogCiAgICAgICAgIGRlZiBmaW5kKG5hbWUsIHRlc3RfbGlzdHMpOgpAQCAtMTUwMiwy
OSArMTQyOCw2IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgICAgIGlmIG5vdCBz
ZWxmLl9yZW1haW5pbmdfbG9ja2VkX3NoYXJkczoKICAgICAgICAgICAgICAgICBzZWxmLnN0b3Bf
c2VydmVyc193aXRoX2xvY2soKQogCi0gICAgZGVmIGhhbmRsZV9maW5pc2hlZF90ZXN0KHNlbGYs
IHNvdXJjZSwgcmVzdWx0LCBlbGFwc2VkX3RpbWUsIGxvZ19tZXNzYWdlcz1Ob25lKToKLSAgICAg
ICAgd29ya2VyX3N0YXRlID0gc2VsZi5fd29ya2VyX3N0YXRlc1tzb3VyY2VdCi0gICAgICAgIHdv
cmtlcl9zdGF0ZS5uZXh0X3RpbWVvdXQgPSBOb25lCi0gICAgICAgIHdvcmtlcl9zdGF0ZS5jdXJy
ZW50X3Rlc3RfbmFtZSA9IE5vbmUKLSAgICAgICAgd29ya2VyX3N0YXRlLnN0YXRzWyd0b3RhbF90
aW1lJ10gKz0gZWxhcHNlZF90aW1lCi0gICAgICAgIHdvcmtlcl9zdGF0ZS5zdGF0c1snbnVtX3Rl
c3RzJ10gKz0gMQotCi0gICAgICAgIHNlbGYuX2xvZ19tZXNzYWdlcyhsb2dfbWVzc2FnZXMpCi0g
ICAgICAgIHNlbGYuX2FsbF9yZXN1bHRzLmFwcGVuZChyZXN1bHQpCi0gICAgICAgIHNlbGYuX3Vw
ZGF0ZV9zdW1tYXJ5X3dpdGhfcmVzdWx0KHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnksIHJl
c3VsdCkKLQotICAgIGRlZiBfbG9nX21lc3NhZ2VzKHNlbGYsIG1lc3NhZ2VzKToKLSAgICAgICAg
Zm9yIG1lc3NhZ2UgaW4gbWVzc2FnZXM6Ci0gICAgICAgICAgICBzZWxmLl9wcmludGVyLndyaXRl
bG4oKm1lc3NhZ2UpCi0KLSAgICBkZWYgX2xvZ193b3JrZXJfc3RhY2soc2VsZiwgc3RhY2spOgot
ICAgICAgICB3ZWJraXRweWRpciA9IHNlbGYuX3BvcnQucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdU
b29scycsICdTY3JpcHRzJywgJ3dlYmtpdHB5JykgKyBzZWxmLl9maWxlc3lzdGVtLnNlcAotICAg
ICAgICBmb3IgZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCBmdW5jdGlvbl9uYW1lLCB0ZXh0IGluIHN0
YWNrOgotICAgICAgICAgICAgaWYgZmlsZW5hbWUuc3RhcnRzd2l0aCh3ZWJraXRweWRpcik6Ci0g
ICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKHdlYmtpdHB5ZGlyLCAn
JykKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJyAgJXM6JXUgKGluICVzKScgJSAoZmlsZW5hbWUs
IGxpbmVfbnVtYmVyLCBmdW5jdGlvbl9uYW1lKSkKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJyAg
ICAlcycgJSB0ZXh0KQotCiAKIGRlZiByZWFkX3Rlc3RfZmlsZXMoZnMsIGZpbGVuYW1lcywgdGVz
dF9wYXRoX3NlcGFyYXRvcik6CiAgICAgdGVzdHMgPSBbXQpAQCAtMTU3MywyMCArMTQ3NiwzIEBA
IGRlZiBuYXR1cmFsX3NvcnRfa2V5KHN0cmluZ190b19zcGxpdCk6CiAgICAgICAgICAgICByZXR1
cm4gdmFsCiAKICAgICByZXR1cm4gW3RyeWludChjaHVuaykgZm9yIGNodW5rIGluIHJlLnNwbGl0
KCcoXGQrKScsIHN0cmluZ190b19zcGxpdCldCi0KLQotY2xhc3MgX1dvcmtlclN0YXRlKG9iamVj
dCk6Ci0gICAgIiIiQSBjbGFzcyBmb3IgdGhlIG1hbmFnZXIgdG8gdXNlIHRvIHRyYWNrIHRoZSBj
dXJyZW50IHN0YXRlIG9mIHRoZSB3b3JrZXJzLiIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBu
dW1iZXIsIHdvcmtlcl9jb25uZWN0aW9uKToKLSAgICAgICAgc2VsZi53b3JrZXJfY29ubmVjdGlv
biA9IHdvcmtlcl9jb25uZWN0aW9uCi0gICAgICAgIHNlbGYubnVtYmVyID0gbnVtYmVyCi0gICAg
ICAgIHNlbGYuZG9uZSA9IEZhbHNlCi0gICAgICAgIHNlbGYuY3VycmVudF90ZXN0X25hbWUgPSBO
b25lCi0gICAgICAgIHNlbGYubmV4dF90aW1lb3V0ID0gTm9uZQotICAgICAgICBzZWxmLnN0YXRz
ID0ge30KLSAgICAgICAgc2VsZi5zdGF0c1snbmFtZSddID0gd29ya2VyX2Nvbm5lY3Rpb24ubmFt
ZSgpCi0gICAgICAgIHNlbGYuc3RhdHNbJ251bV90ZXN0cyddID0gMAotICAgICAgICBzZWxmLnN0
YXRzWyd0b3RhbF90aW1lJ10gPSAwCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAg
IHJldHVybiAiX1dvcmtlclN0YXRlKCIgKyBzdHIoc2VsZi5fX2RpY3RfXykgKyAiKSIKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21h
bmFnZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9j
b250cm9sbGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5CmluZGV4IDM0OTYzMjIuLjczY2M0YWMgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJz
L21hbmFnZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl91bml0dGVzdC5weQpAQCAtNDMsOCArNDMsOCBAQCBm
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBwb3J0X3Rlc3RjYXNlCiAKIGZy
b20gd2Via2l0cHkgaW1wb3J0IGxheW91dF90ZXN0cwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMgaW1wb3J0IHJ1bl93ZWJraXRfdGVzdHMKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmNv
bnRyb2xsZXJzIGltcG9ydCBtYW5hZ2VyCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250
cm9sbGVycy5tYW5hZ2VyIGltcG9ydCBpbnRlcnByZXRfdGVzdF9mYWlsdXJlcywgIE1hbmFnZXIs
IG5hdHVyYWxfc29ydF9rZXksIHRlc3Rfa2V5LCBUZXN0UnVuSW50ZXJydXB0ZWRFeGNlcHRpb24s
IFRlc3RTaGFyZAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMubWFuYWdl
ciBpbXBvcnQgVGVzdFJ1bkludGVycnVwdGVkRXhjZXB0aW9uLCBUZXN0U2hhcmQKK2Zyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLmNvbnRyb2xsZXJzLm1hbmFnZXIgaW1wb3J0IGludGVycHJldF90
ZXN0X2ZhaWx1cmVzLCBNYW5hZ2VyLCBuYXR1cmFsX3NvcnRfa2V5LCB0ZXN0X2tleSwgc3VtbWFy
aXplX3Jlc3VsdHMKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscyBpbXBvcnQgcmVz
dWx0X3N1bW1hcnkKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscyBpbXBvcnQgdGVz
dF9leHBlY3RhdGlvbnMKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscyBpbXBvcnQg
dGVzdF9mYWlsdXJlcwpAQCAtNTExLDggKzUxMSw4IEBAIGNsYXNzIFJlc3VsdFN1bW1hcnlUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgIHJldHJ5LmFkZChzZWxmLmdldF9yZXN1
bHQoJ3Bhc3Nlcy90ZXh0Lmh0bWwnKSwgVHJ1ZSkKICAgICAgICAgICAgIHJldHJ5LmFkZChzZWxm
LmdldF9yZXN1bHQoJ2ZhaWx1cmVzL2V4cGVjdGVkL3RpbWVvdXQuaHRtbCcpLCBUcnVlKQogICAg
ICAgICAgICAgcmV0cnkuYWRkKHNlbGYuZ2V0X3Jlc3VsdCgnZmFpbHVyZXMvZXhwZWN0ZWQvY3Jh
c2guaHRtbCcpLCBUcnVlKQotICAgICAgICB1bmV4cGVjdGVkX3Jlc3VsdHMgPSBtYW5hZ2VyLnN1
bW1hcml6ZV9yZXN1bHRzKHBvcnQsIGV4cCwgcnMsIHJldHJ5LCB0ZXN0X3RpbWluZ3M9e30sIG9u
bHlfdW5leHBlY3RlZD1UcnVlLCBpbnRlcnJ1cHRlZD1GYWxzZSkKLSAgICAgICAgZXhwZWN0ZWRf
cmVzdWx0cyA9IG1hbmFnZXIuc3VtbWFyaXplX3Jlc3VsdHMocG9ydCwgZXhwLCBycywgcmV0cnks
IHRlc3RfdGltaW5ncz17fSwgb25seV91bmV4cGVjdGVkPUZhbHNlLCBpbnRlcnJ1cHRlZD1GYWxz
ZSkKKyAgICAgICAgdW5leHBlY3RlZF9yZXN1bHRzID0gc3VtbWFyaXplX3Jlc3VsdHMocG9ydCwg
ZXhwLCBycywgcmV0cnksIHRlc3RfdGltaW5ncz17fSwgb25seV91bmV4cGVjdGVkPVRydWUsIGlu
dGVycnVwdGVkPUZhbHNlKQorICAgICAgICBleHBlY3RlZF9yZXN1bHRzID0gc3VtbWFyaXplX3Jl
c3VsdHMocG9ydCwgZXhwLCBycywgcmV0cnksIHRlc3RfdGltaW5ncz17fSwgb25seV91bmV4cGVj
dGVkPUZhbHNlLCBpbnRlcnJ1cHRlZD1GYWxzZSkKICAgICAgICAgcmV0dXJuIGV4cGVjdGVkX3Jl
c3VsdHMsIHVuZXhwZWN0ZWRfcmVzdWx0cwogCiAgICAgZGVmIHRlc3Rfbm9fc3ZuX3JldmlzaW9u
KHNlbGYpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
Y29udHJvbGxlcnMvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5Cmlu
ZGV4IDcwNDdkOTMuLmY4MGVmNTggMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dv
cmtlcl9icm9rZXIucHkKQEAgLTI2LDQxOCArMjYsMjcxIEBACiAjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogCi0iIiJNb2R1bGUgZm9yIGhhbmRsaW5nIG1lc3NhZ2VzIGFuZCBjb25jdXJy
ZW5jeSBmb3IgcnVuLXdlYmtpdC10ZXN0cy4KLQotVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIG1l
c3NhZ2UgYnJva2VyIHRoYXQgY29ubmVjdHMgdGhlIG1hbmFnZXIgdG8gdGhlCi13b3JrZXJzOiBp
dCBwcm92aWRlcyBhIG1lc3NhZ2luZyBhYnN0cmFjdGlvbiBhbmQgbWVzc2FnZSBsb29wcyAoYnVp
bGRpbmcgb24KLXRvcCBvZiBtZXNzYWdlX2Jyb2tlciksIGFuZCBoYW5kbGVzIHN0YXJ0aW5nIHdv
cmtlcnMgYnkgbGF1bmNoaW5nIHByb2Nlc3Nlcy4KLQotVGhlcmUgYXJlIGEgbG90IG9mIGNsYXNz
ZXMgYW5kIG9iamVjdHMgaW52b2x2ZWQgaW4gYSBmdWxseSBjb25uZWN0ZWQgc3lzdGVtLgotVGhl
eSBpbnRlcmFjdCBtb3JlIG9yIGxlc3MgbGlrZToKLQotICBNYW5hZ2VyICAtLT4gIF9JbmxpbmVN
YW5hZ2VyIC0tLT4gX0lubGluZVdvcmtlciA8LT4gV29ya2VyCi0gICAgIF4gICAgICAgICAgICAg
ICAgICAgIFwgICAgICAgICAgICAgICAvICAgICAgICAgICAgICBeCi0gICAgIHwgICAgICAgICAg
ICAgICAgICAgICB2ICAgICAgICAgICAgIHYgICAgICAgICAgICAgICB8Ci0gICAgIFwtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSAgQnJva2VyICAgLS0tLS0tLS0tLS0tLS0tLS8KLQotVGhlIGJyb2tl
ciBzaW1wbHkgZGlzdHJpYnV0ZXMgbWVzc2FnZXMgb250byB0b3BpY3MgKG5hbWVkIHF1ZXVlcyk7
IHRoZSBhY3R1YWwKLXF1ZXVlcyB0aGVtc2VsdmVzIGFyZSBwcm92aWRlZCBieSB0aGUgY2FsbGVy
LCBhcyB0aGUgcXVldWUncyBpbXBsZW1lbnRhdGlvbgotcmVxdWlyZW1lbnRzIHZhcmllcyB2YXJ5
IGRlcGVuZGluZyBvbiB0aGUgZGVzaXJlZCBjb25jdXJyZW5jeSBtb2RlbAotKG5vbmUvdGhyZWFk
cy9wcm9jZXNzZXMpLgotCi1JbiBvcmRlciBmb3Igc2hhcmVkLW5vdGhpbmcgbWVzc2FnaW5nIGJl
dHdlZW4gcHJvY2Vzc2luZyB0byBiZSBwb3NzaWJsZSwKLU1lc3NhZ2VzIG11c3QgYmUgcGlja2xh
YmxlLgotCi1UaGUgbW9kdWxlIGRlZmluZXMgb25lIGludGVyZmFjZSBhbmQgdHdvIGNsYXNzZXMu
IENhbGxlcnMgb2YgdGhpcyBwYWNrYWdlCi1tdXN0IGltcGxlbWVudCB0aGUgQnJva2VyQ2xpZW50
IGludGVyZmFjZSwgYW5kIG1vc3QgY2FsbGVycyB3aWxsIGNyZWF0ZQotX0Jyb2tlckNvbm5lY3Rp
b25zIGFzIHdlbGwgYXMgQnJva2Vycy4KLQotVGhlIGNsYXNzZXMgcmVsYXRlIHRvIGVhY2ggb3Ro
ZXIgYXM6Ci0KLSAgICBCcm9rZXJDbGllbnQgICAtLS0tLS0+ICAgIF9Ccm9rZXJDb25uZWN0aW9u
Ci0gICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgIHwgICAgICAg
ICAgICAgICAgICAgICAgICAgdgotICAgICAgICAgXC0tLS0tLS0tLS0tLS0tLS0gICAgICBfQnJv
a2VyCi0KLShUaGUgQnJva2VyQ2xpZW50IG5ldmVyIGNhbGxzIGJyb2tlciBkaXJlY3RseSBhZnRl
ciBpdCBpcyBjcmVhdGVkLCBvbmx5Ci1fQnJva2VyQ29ubmVjdGlvbi4gIF9Ccm9rZXJDb25uZWN0
aW9uIHBhc3NlcyBhIHJlZmVyZW5jZSB0byBCcm9rZXJDbGllbnQgdG8KLV9Ccm9rZXIsIGFuZCBf
QnJva2VyIG9ubHkgaW52b2tlcyB0aGF0IHJlZmVyZW5jZSwgbmV2ZXIgdGFsa2luZyBkaXJlY3Rs
eSB0bwotQnJva2VyQ29ubmVjdGlvbikuCi0iIiIKKyIiIk1vZHVsZSBmb3IgaGFuZGxpbmcgbWVz
c2FnZXMgYW5kIGNvbmN1cnJlbmN5IGZvciBydW4td2Via2l0LXRlc3RzLiIiIgogCiBpbXBvcnQg
Y1BpY2tsZQogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKLWltcG9ydCBv
cHRwYXJzZQogaW1wb3J0IFF1ZXVlCiBpbXBvcnQgc3lzCitpbXBvcnQgdGltZQogaW1wb3J0IHRy
YWNlYmFjawogCiAKK2Zyb20gd2Via2l0cHkuY29tbW9uLmhvc3QgaW1wb3J0IEhvc3QKIGZyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgc3RhY2tfdXRpbHMKK2Zyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLnZpZXdzIGltcG9ydCBtZXRlcmVkX3N0cmVhbQogCiAKIF9sb2cgPSBsb2dn
aW5nLmdldExvZ2dlcihfX25hbWVfXykKIAogCi0jCi0jIFRvcGljIG5hbWVzIGZvciBNYW5hZ2Vy
IDwtPiBXb3JrZXIgbWVzc2FnaW5nCi0jCi1NQU5BR0VSX1RPUElDID0gJ21hbmFnZXJzJwotQU5Z
X1dPUktFUl9UT1BJQyA9ICd3b3JrZXJzJwotCi0KLWRlZiBnZXQobWF4X3dvcmtlcnMsIGNsaWVu
dCwgd29ya2VyX2NsYXNzKToKLSAgICAiIiJSZXR1cm4gYSBjb25uZWN0aW9uIHRvIGEgbWFuYWdl
ci93b3JrZXIgbWVzc2FnZV9icm9rZXIKLQotICAgIEFyZ3M6Ci0gICAgICAgIG1heF93b3JrZXJz
IC0gbWF4ICMgb2Ygd29ya2VycyB0byBydW4gY29uY3VycmVudGx5LgotICAgICAgICBjbGllbnQg
LSBCcm9rZXJDbGllbnQgaW1wbGVtZW50YXRpb24gdG8gZGlzcGF0Y2gKLSAgICAgICAgICAgIHJl
cGxpZXMgdG8uCi0gICAgICAgIHdvcmtlcl9jbGFzcyAtIHR5cGUgb2Ygd29ya2VycyB0byBjcmVh
dGUuIFRoaXMgY2xhc3Mgc2hvdWxkIG92ZXJyaWRlCi0gICAgICAgICAgICB0aGUgbWV0aG9kcyBp
biBBYnN0cmFjdFdvcmtlci4KLSAgICBSZXR1cm5zOgotICAgICAgICBBIGhhbmRsZSB0byBhbiBv
YmplY3QgdGhhdCB3aWxsIHRhbGsgdG8gYSBtZXNzYWdlIGJyb2tlciBjb25maWd1cmVkCi0gICAg
ICAgIGZvciB0aGUgbm9ybWFsIG1hbmFnZXIvd29ya2VyIGNvbW11bmljYXRpb24uIiIiCi0gICAg
aWYgbWF4X3dvcmtlcnMgPT0gMToKLSAgICAgICAgcXVldWVfY2xhc3MgPSBRdWV1ZS5RdWV1ZQot
ICAgICAgICBtYW5hZ2VyX2NsYXNzID0gX0lubGluZU1hbmFnZXIKLSAgICBlbHNlOgotICAgICAg
ICBxdWV1ZV9jbGFzcyA9IG11bHRpcHJvY2Vzc2luZy5RdWV1ZQotICAgICAgICBtYW5hZ2VyX2Ns
YXNzID0gX011bHRpUHJvY2Vzc01hbmFnZXIKLQotICAgIGJyb2tlciA9IF9Ccm9rZXIocXVldWVf
Y2xhc3MpCi0gICAgcmV0dXJuIG1hbmFnZXJfY2xhc3MoYnJva2VyLCBjbGllbnQsIHdvcmtlcl9j
bGFzcykKLQotCi1jbGFzcyBCcm9rZXJDbGllbnQob2JqZWN0KToKLSAgICAiIiJBYnN0cmFjdCBi
YXNlIGNsYXNzIC8gaW50ZXJmYWNlIHRoYXQgYWxsIG1lc3NhZ2UgYnJva2VyIGNsaWVudHMgbXVz
dAotICAgIGltcGxlbWVudC4gSW4gYWRkaXRpb24gdG8gdGhlIG1ldGhvZHMgYmVsb3csIGJ5IGNv
bnZlbnRpb24gY2xpZW50cwotICAgIGltcGxlbWVudCByb3V0aW5lcyBvZiB0aGUgc2lnbmF0dXJl
IHR5cGUKLQotICAgICAgICBoYW5kbGVfTUVTU0FHRV9OQU1FKHNlbGYsIHNyYywgLi4uKToKLQot
ICAgIHdoZXJlIE1FU1NBR0VfTkFNRSBtYXRjaGVzIHRoZSBzdHJpbmcgcGFzc2VkIHRvIHBvc3Rf
bWVzc2FnZSgpLCBhbmQKLSAgICBzcmMgaW5kaWNhdGVzIHRoZSBuYW1lIG9mIHRoZSBzZW5kZXIu
IElmIHRoZSBtZXNzYWdlIGNvbnRhaW5zIHZhbHVlcyBpbgotICAgIHRoZSBtZXNzYWdlIGJvZHks
IHRob3NlIHdpbGwgYmUgcHJvdmlkZWQgYXMgb3B0cGFyYW1zLiIiIgotCi0gICAgZGVmIGlzX2Rv
bmUoc2VsZik6Ci0gICAgICAgICIiIkNhbGxlZCBmcm9tIGluc2lkZSBydW5fbWVzc2FnZV9sb29w
KCkgdG8gaW5kaWNhdGUgd2hldGhlciB0byBleGl0LiIiIgotICAgICAgICByYWlzZSBOb3RJbXBs
ZW1lbnRlZEVycm9yCi0KLSAgICBkZWYgbmFtZShzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIGEg
bmFtZSB0aGF0IGlkZW50aWZpZXMgdGhlIGNsaWVudC4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1w
bGVtZW50ZWRFcnJvcgotCi0KLWNsYXNzIF9Ccm9rZXIob2JqZWN0KToKLSAgICAiIiJCcm9rZXJz
IHByb3ZpZGUgdGhlIGJhc2ljIG1vZGVsIG9mIGEgc2V0IG9mIHRvcGljcy4gQ2xpZW50cyBjYW4g
cG9zdCBhCi0gICAgbWVzc2FnZSB0byBhbnkgdG9waWMgdXNpbmcgcG9zdF9tZXNzYWdlKCksIGFu
ZCBjYW4gcHJvY2VzcyBtZXNzYWdlcyBvbiBvbmUKLSAgICB0b3BpYyBhdCBhIHRpbWUgdXNpbmcg
cnVuX21lc3NhZ2VfbG9vcCgpLiIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHF1ZXVlX21h
a2VyKToKLSAgICAgICAgIiIiQXJnczoKLSAgICAgICAgICAgIHF1ZXVlX21ha2VyOiBhIGZhY3Rv
cnkgbWV0aG9kIHRoYXQgcmV0dXJucyBvYmplY3RzIGltcGxlbWVudGluZyBhCi0gICAgICAgICAg
ICAgICAgUXVldWUgaW50ZXJmYWNlIChwdXQoKS9nZXQoKSkuCi0gICAgICAgICIiIgotICAgICAg
ICBzZWxmLl9xdWV1ZV9tYWtlciA9IHF1ZXVlX21ha2VyCi0gICAgICAgIHNlbGYuX3RvcGljcyA9
IHt9Ci0KLSAgICBkZWYgX19kZWxfXyhzZWxmKToKLSAgICAgICAgc2VsZi5jbGVhbnVwKCkKLQot
ICAgIGRlZiBjbGVhbnVwKHNlbGYpOgotICAgICAgICBmb3IgcXVldWUgaW4gc2VsZi5fdG9waWNz
LnZhbHVlcygpOgotICAgICAgICAgICAgaWYgaGFzYXR0cihxdWV1ZSwgJ2Nsb3NlJyk6Ci0gICAg
ICAgICAgICAgICAgcXVldWUuY2xvc2UoKQotICAgICAgICBzZWxmLl90b3BpY3MgPSB7fQotCi0g
ICAgZGVmIGFkZF90b3BpYyhzZWxmLCB0b3BpY19uYW1lKToKLSAgICAgICAgaWYgdG9waWNfbmFt
ZSBub3QgaW4gc2VsZi5fdG9waWNzOgotICAgICAgICAgICAgc2VsZi5fdG9waWNzW3RvcGljX25h
bWVdID0gc2VsZi5fcXVldWVfbWFrZXIoKQotCi0gICAgZGVmIF9nZXRfcXVldWVfZm9yX3RvcGlj
KHNlbGYsIHRvcGljX25hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi5fdG9waWNzW3RvcGljX25h
bWVdCi0KLSAgICBkZWYgcG9zdF9tZXNzYWdlKHNlbGYsIGNsaWVudCwgdG9waWNfbmFtZSwgbWVz
c2FnZV9uYW1lLCAqbWVzc2FnZV9hcmdzKToKLSAgICAgICAgIiIiUG9zdCBhIG1lc3NhZ2UgdG8g
dGhlIGFwcHJvcHJpYXRlIHRvcGljIG5hbWUuCi0KLSAgICAgICAgTWVzc2FnZXMgaGF2ZSBhIG5h
bWUgYW5kIGEgdHVwbGUgb2Ygb3B0aW9uYWwgYXJndW1lbnRzLiBCb3RoIG11c3QgYmUgcGlja2xh
YmxlLiIiIgotICAgICAgICBtZXNzYWdlID0gX01lc3NhZ2UoY2xpZW50Lm5hbWUoKSwgdG9waWNf
bmFtZSwgbWVzc2FnZV9uYW1lLCBtZXNzYWdlX2FyZ3MpCi0gICAgICAgIHF1ZXVlID0gc2VsZi5f
Z2V0X3F1ZXVlX2Zvcl90b3BpYyh0b3BpY19uYW1lKQotICAgICAgICBxdWV1ZS5wdXQoX01lc3Nh
Z2UuZHVtcHMobWVzc2FnZSkpCi0KLSAgICBkZWYgcnVuX21lc3NhZ2VfbG9vcChzZWxmLCB0b3Bp
Y19uYW1lLCBjbGllbnQsIGRlbGF5X3NlY3M9Tm9uZSk6Ci0gICAgICAgICIiIkxvb3AgcHJvY2Vz
c2luZyBtZXNzYWdlcyB1bnRpbCBjbGllbnQuaXNfZG9uZSgpIG9yIGRlbGF5IHBhc3Nlcy4KLQot
ICAgICAgICBUbyBydW4gaW5kZWZpbml0ZWx5LCBzZXQgZGVsYXlfc2VjcyB0byBOb25lLiIiIgot
ICAgICAgICBhc3NlcnQgZGVsYXlfc2VjcyBpcyBOb25lIG9yIGRlbGF5X3NlY3MgPiAwCi0gICAg
ICAgIHNlbGYuX3J1bl9sb29wKHRvcGljX25hbWUsIGNsaWVudCwgYmxvY2s9VHJ1ZSwgZGVsYXlf
c2Vjcz1kZWxheV9zZWNzKQotCi0gICAgZGVmIHJ1bl9hbGxfcGVuZGluZyhzZWxmLCB0b3BpY19u
YW1lLCBjbGllbnQpOgotICAgICAgICAiIiJQcm9jZXNzIG1lc3NhZ2VzIHVudGlsIGNsaWVudC5p
c19kb25lKCkgb3IgY2FsbGVyIHdvdWxkIGJsb2NrLiIiIgotICAgICAgICBzZWxmLl9ydW5fbG9v
cCh0b3BpY19uYW1lLCBjbGllbnQsIGJsb2NrPUZhbHNlLCBkZWxheV9zZWNzPU5vbmUpCi0KLSAg
ICBkZWYgX3J1bl9sb29wKHNlbGYsIHRvcGljX25hbWUsIGNsaWVudCwgYmxvY2ssIGRlbGF5X3Nl
Y3MpOgotICAgICAgICBxdWV1ZSA9IHNlbGYuX2dldF9xdWV1ZV9mb3JfdG9waWModG9waWNfbmFt
ZSkKLSAgICAgICAgd2hpbGUgbm90IGNsaWVudC5pc19kb25lKCk6Ci0gICAgICAgICAgICB0cnk6
Ci0gICAgICAgICAgICAgICAgcyA9IHF1ZXVlLmdldChibG9jaywgZGVsYXlfc2VjcykKLSAgICAg
ICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAg
ICAgICAgIG1zZyA9IF9NZXNzYWdlLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLl9kaXNwYXRj
aF9tZXNzYWdlKG1zZywgY2xpZW50KQotCi0gICAgZGVmIF9kaXNwYXRjaF9tZXNzYWdlKHNlbGYs
IG1lc3NhZ2UsIGNsaWVudCk6Ci0gICAgICAgIGlmIG5vdCBoYXNhdHRyKGNsaWVudCwgJ2hhbmRs
ZV8nICsgbWVzc2FnZS5uYW1lKToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCi0gICAg
ICAgICAgICAgICAiJXM6IHJlY2VpdmVkIG1lc3NhZ2UgJyVzJyBpdCBjb3VsZG4ndCBoYW5kbGUi
ICUKLSAgICAgICAgICAgICAgIChjbGllbnQubmFtZSgpLCBtZXNzYWdlLm5hbWUpKQotICAgICAg
ICBvcHRhcmdzID0gbWVzc2FnZS5hcmdzCi0gICAgICAgIG1lc3NhZ2VfaGFuZGxlciA9IGdldGF0
dHIoY2xpZW50LCAnaGFuZGxlXycgKyBtZXNzYWdlLm5hbWUpCi0gICAgICAgIG1lc3NhZ2VfaGFu
ZGxlcihtZXNzYWdlLnNyYywgKm9wdGFyZ3MpCitjbGFzcyBXb3JrZXJFeGNlcHRpb24oRXhjZXB0
aW9uKToKKyAgICAiIiJSYWlzZWQgd2hlbiB3ZSByZWNlaXZlIGFuIHVuZXhwZWN0ZWQvdW5rbm93
biBleGNlcHRpb24gZnJvbSBhIHdvcmtlci4iIiIKKyAgICBwYXNzCisKKworY2xhc3MgTWVzc2Fn
ZVBvb2wob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2FsbGVyLCB3b3JrZXJfZmFj
dG9yeSwgbWF4X3dvcmtlcnM9Tm9uZSwgd29ya2VyX3N0YXJ0dXBfZGVsYXlfc2Vjcz0wLCBob3N0
PU5vbmUpOgorICAgICAgICBzZWxmLl9ob3N0ID0gaG9zdAorICAgICAgICBzZWxmLl9jYWxsZXIg
PSBjYWxsZXIKKyAgICAgICAgc2VsZi5fd29ya2VyX2ZhY3RvcnkgPSB3b3JrZXJfZmFjdG9yeQor
ICAgICAgICBzZWxmLl9tYXhfd29ya2VycyA9IG1heF93b3JrZXJzIG9yIG11bHRpcHJvY2Vzc2lu
Zy5jcHVfY291bnQoKQorICAgICAgICBzZWxmLl93b3JrZXJfc3RhcnR1cF9kZWxheV9zZWNzID0g
d29ya2VyX3N0YXJ0dXBfZGVsYXlfc2VjcworICAgICAgICBzZWxmLl9sb2dnZXIgPSBsb2dnaW5n
LnJvb3QKKyAgICAgICAgc2VsZi5fbmFtZSA9ICdtYW5hZ2VyJworICAgICAgICBzZWxmLl9ydW5u
aW5nX2lubGluZSA9IChzZWxmLl9tYXhfd29ya2VycyA9PSAxKQorICAgICAgICBpZiBzZWxmLl9y
dW5uaW5nX2lubGluZToKKyAgICAgICAgICAgIHNlbGYuX21lc3NhZ2VzX3RvX3dvcmtlciA9IFF1
ZXVlLlF1ZXVlKCkKKyAgICAgICAgICAgIHNlbGYuX21lc3NhZ2VzX3RvX21hbmFnZXIgPSBRdWV1
ZS5RdWV1ZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9tZXNzYWdlc190b193
b3JrZXIgPSBtdWx0aXByb2Nlc3NpbmcuUXVldWUoKQorICAgICAgICAgICAgc2VsZi5fbWVzc2Fn
ZXNfdG9fbWFuYWdlciA9IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCisgICAgICAgIHNlbGYuX3dv
cmtlcnMgPSBbXQorICAgICAgICBzZWxmLl93b3JrZXJzX3N0b3BwZWQgPSBzZXQoKQorCisgICAg
ZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4
aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0cmFjZWJhY2spOgorICAgICAgICBzZWxm
Ll9jbG9zZSgpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHJ1bihzZWxmLCBtZXNz
YWdlcyk6CisgICAgICAgICIiIlBvc3RzIGEgbGlzdCBvZiBtZXNzYWdlcyB0byB0aGUgcG9vbCBh
bmQgd2FpdHMgZm9yIHRoZW0gdG8gY29tcGxldGUuIiIiCisgICAgICAgIGZvciBtZXNzYWdlIGlu
IG1lc3NhZ2VzOgorICAgICAgICAgICAgc2VsZi5fcG9zdChuYW1lPW1lc3NhZ2VbMF0sIGFyZ3M9
bWVzc2FnZVsxOl0sIGZyb21fdXNlcj1UcnVlKQorICAgICAgICBzZWxmLl9zaHV0ZG93bigpCisg
ICAgICAgIHNlbGYuX3dhaXQoKQorCisgICAgZGVmIF9wb3N0KHNlbGYsIG5hbWUsIGFyZ3MsIGZy
b21fdXNlcik6CisgICAgICAgIHNlbGYuX21lc3NhZ2VzX3RvX3dvcmtlci5wdXQoX01lc3NhZ2Uo
bmFtZSwgYXJncywgc2VsZi5fbmFtZSwgZnJvbV91c2VyLCBsb2dzPSgpKSkKKworICAgIGRlZiBf
c2h1dGRvd24oc2VsZik6CisgICAgICAgIGZvciBfIGluIHJhbmdlKHNlbGYuX21heF93b3JrZXJz
KToKKyAgICAgICAgICAgIHNlbGYuX3Bvc3QobmFtZT0nZG9uZScsIGFyZ3M9KCksIGZyb21fdXNl
cj1GYWxzZSkKKworICAgIGRlZiBfd2FpdChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgc2VsZi5fc3RhcnRfd29ya2VycygpCisgICAgICAgICAgICBpZiBzZWxmLl9ydW5uaW5nX2lu
bGluZToKKyAgICAgICAgICAgICAgICBzZWxmLl93b3JrZXJzWzBdLnJ1bigpCisgICAgICAgICAg
ICAgICAgc2VsZi5fbG9vcChibG9jaz1GYWxzZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgc2VsZi5fbG9vcChibG9jaz1UcnVlKQorICAgICAgICBmaW5hbGx5OgorICAgICAg
ICAgICAgc2VsZi5fY2xvc2UoKQorCisgICAgZGVmIF9jbG9zZShzZWxmKToKKyAgICAgICAgZm9y
IHdvcmtlciBpbiBzZWxmLl93b3JrZXJzOgorICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgp
CisgICAgICAgIGZvciB3b3JrZXIgaW4gc2VsZi5fd29ya2VyczoKKyAgICAgICAgICAgIGlmIHdv
cmtlci5pc19hbGl2ZSgpOgorICAgICAgICAgICAgICAgIHdvcmtlci5qb2luKCkKKyAgICAgICAg
c2VsZi5fd29ya2VycyA9IFtdCisgICAgICAgIGlmIG5vdCBzZWxmLl9ydW5uaW5nX2lubGluZToK
KyAgICAgICAgICAgIGlmIHNlbGYuX21lc3NhZ2VzX3RvX3dvcmtlcjoKKyAgICAgICAgICAgICAg
ICBzZWxmLl9tZXNzYWdlc190b193b3JrZXIuY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYu
X21lc3NhZ2VzX3RvX3dvcmtlciA9IE5vbmUKKyAgICAgICAgICAgIGlmIHNlbGYuX21lc3NhZ2Vz
X3RvX21hbmFnZXI6CisgICAgICAgICAgICAgICAgc2VsZi5fbWVzc2FnZXNfdG9fbWFuYWdlci5j
bG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5fbWVzc2FnZXNfdG9fbWFuYWdlciA9IE5vbmUK
KworICAgIGRlZiBfc3RhcnRfd29ya2VycyhzZWxmKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxm
Ll93b3JrZXJzCisgICAgICAgIHNlbGYuX3dvcmtlcnNfc3RvcHBlZCA9IHNldCgpCisgICAgICAg
IGhvc3QgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX3J1bm5pbmdfaW5saW5lIG9yIHNlbGYuX2Nh
bl9waWNrbGUoaG9zdCk6CisgICAgICAgICAgICBob3N0ID0gc2VsZi5faG9zdAorCisgICAgICAg
IGZvciB3b3JrZXJfbnVtYmVyIGluIHJhbmdlKHNlbGYuX21heF93b3JrZXJzKToKKyAgICAgICAg
ICAgIHdvcmtlciA9IF9Xb3JrZXIoaG9zdCwgc2VsZi5fbWVzc2FnZXNfdG9fbWFuYWdlciwgc2Vs
Zi5fbWVzc2FnZXNfdG9fd29ya2VyLCBzZWxmLl93b3JrZXJfZmFjdG9yeSwgd29ya2VyX251bWJl
cikKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcnMuYXBwZW5kKHdvcmtlcikKKyAgICAgICAgICAg
IGlmIHNlbGYuX3J1bm5pbmdfaW5saW5lOgorICAgICAgICAgICAgICAgIHdvcmtlci5tYW5hZ2Vy
ID0gc2VsZgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB3b3JrZXIuc3RhcnQo
KQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3dvcmtlcl9zdGFydHVwX2RlbGF5X3NlY3M6Cisg
ICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoc2VsZi5fd29ya2VyX3N0YXJ0dXBfZGVsYXlf
c2VjcykKKworICAgIGRlZiBfY2FuX3BpY2tsZShzZWxmLCBob3N0KToKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgY1BpY2tsZS5kdW1wcyhzZWxmLl9ob3N0KQorICAgICAgICAgICAgcmV0dXJu
IFRydWUKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxz
ZQogCisgICAgZGVmIF9sb29wKHNlbGYsIGJsb2NrKToKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBpZiBsZW4oc2VsZi5fd29ya2Vyc19zdG9w
cGVkKSA9PSBsZW4oc2VsZi5fd29ya2Vycyk6CisgICAgICAgICAgICAgICAgICAgIGJsb2NrID0g
RmFsc2UKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gc2VsZi5fbWVzc2FnZXNfdG9fbWFuYWdl
ci5nZXQoYmxvY2spCisgICAgICAgICAgICAgICAgZm9yIHJlY29yZCBpbiBtZXNzYWdlLmxvZ3M6
CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5oYW5kbGUocmVjb3JkKQorICAgICAg
ICAgICAgICAgIGlmIG1lc3NhZ2UuZnJvbV91c2VyOgorICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9jYWxsZXIuaGFuZGxlKG1lc3NhZ2UubmFtZSwgbWVzc2FnZS5zb3VyY2UsICptZXNzYWdlLmFy
Z3MpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbWV0aG9k
ID0gZ2V0YXR0cihzZWxmLCAnX2hhbmRsZV8nICsgbWVzc2FnZS5uYW1lKQorICAgICAgICAgICAg
ICAgIGFzc2VydCBtZXRob2QsICdiYWQgbWVzc2FnZSAlcycgJSByZXByKG1lc3NhZ2UpCisgICAg
ICAgICAgICAgICAgbWV0aG9kKG1lc3NhZ2Uuc291cmNlLCAqbWVzc2FnZS5hcmdzKQorICAgICAg
ICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgX2hhbmRs
ZV93b3JrZXJfZG9uZShzZWxmLCBzb3VyY2UpOgorICAgICAgICBzZWxmLl93b3JrZXJzX3N0b3Bw
ZWQuYWRkKHNvdXJjZSkKIAotY2xhc3MgX01lc3NhZ2Uob2JqZWN0KToKICAgICBAc3RhdGljbWV0
aG9kCi0gICAgZGVmIGxvYWRzKHN0cmluZ192YWx1ZSk6Ci0gICAgICAgIG9iaiA9IGNQaWNrbGUu
bG9hZHMoc3RyaW5nX3ZhbHVlKQotICAgICAgICBhc3NlcnQoaXNpbnN0YW5jZShvYmosIF9NZXNz
YWdlKSkKLSAgICAgICAgcmV0dXJuIG9iagotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNyYywg
dG9waWNfbmFtZSwgbWVzc2FnZV9uYW1lLCBtZXNzYWdlX2FyZ3MpOgotICAgICAgICBzZWxmLnNy
YyA9IHNyYwotICAgICAgICBzZWxmLnRvcGljX25hbWUgPSB0b3BpY19uYW1lCi0gICAgICAgIHNl
bGYubmFtZSA9IG1lc3NhZ2VfbmFtZQotICAgICAgICBzZWxmLmFyZ3MgPSBtZXNzYWdlX2FyZ3MK
LQotICAgIGRlZiBkdW1wcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGNQaWNrbGUuZHVtcHMoc2Vs
ZikKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICgiX01lc3NhZ2Uo
ZnJvbT0nJXMnLCB0b3BpY19uYW1lPSclcycsIG1lc3NhZ2VfbmFtZT0nJXMnKSIgJQotICAgICAg
ICAgICAgICAgIChzZWxmLnNyYywgc2VsZi50b3BpY19uYW1lLCBzZWxmLm5hbWUpKQotCi0KLWNs
YXNzIF9Ccm9rZXJDb25uZWN0aW9uKG9iamVjdCk6Ci0gICAgIiIiX0Jyb2tlckNvbm5lY3Rpb24g
cHJvdmlkZXMgYSBjb25uZWN0aW9uLW9yaWVudGVkIGZhY2FkZSBvbiB0b3Agb2YgYQotICAgIEJy
b2tlciwgc28gdGhhdCBjYWxsZXJzIGRvbid0IGhhdmUgdG8gcmVwZWF0ZWRseSBwYXNzIHRoZSBz
YW1lIHRvcGljCi0gICAgbmFtZXMgb3ZlciBhbmQgb3Zlci4iIiIKLQotICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBicm9rZXIsIGNsaWVudCwgcnVuX3RvcGljLCBwb3N0X3RvcGljKToKLSAgICAgICAg
IiIiQ3JlYXRlIGEgX0Jyb2tlckNvbm5lY3Rpb24gb24gdG9wIG9mIGEgX0Jyb2tlci4gTm90ZSB0
aGF0IHRoZSBfQnJva2VyCi0gICAgICAgIGlzIHBhc3NlZCBpbiByYXRoZXIgdGhhbiBjcmVhdGVk
IHNvIHRoYXQgYSBzaW5nbGUgX0Jyb2tlciBjYW4gYmUgdXNlZAotICAgICAgICBieSBtdWx0aXBs
ZSBfQnJva2VyQ29ubmVjdGlvbnMuIiIiCi0gICAgICAgIHNlbGYuX2Jyb2tlciA9IGJyb2tlcgot
ICAgICAgICBzZWxmLl9jbGllbnQgPSBjbGllbnQKLSAgICAgICAgc2VsZi5fcG9zdF90b3BpYyA9
IHBvc3RfdG9waWMKLSAgICAgICAgc2VsZi5fcnVuX3RvcGljID0gcnVuX3RvcGljCi0gICAgICAg
IGJyb2tlci5hZGRfdG9waWMocnVuX3RvcGljKQotICAgICAgICBicm9rZXIuYWRkX3RvcGljKHBv
c3RfdG9waWMpCi0KLSAgICBkZWYgY2xlYW51cChzZWxmKToKLSAgICAgICAgc2VsZi5fYnJva2Vy
LmNsZWFudXAoKQotICAgICAgICBzZWxmLl9icm9rZXIgPSBOb25lCi0KLSAgICBkZWYgcnVuX21l
c3NhZ2VfbG9vcChzZWxmLCBkZWxheV9zZWNzPU5vbmUpOgotICAgICAgICBzZWxmLl9icm9rZXIu
cnVuX21lc3NhZ2VfbG9vcChzZWxmLl9ydW5fdG9waWMsIHNlbGYuX2NsaWVudCwgZGVsYXlfc2Vj
cykKLQotICAgIGRlZiBwb3N0X21lc3NhZ2Uoc2VsZiwgbWVzc2FnZV9uYW1lLCAqbWVzc2FnZV9h
cmdzKToKLSAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZShzZWxmLl9jbGllbnQsIHNl
bGYuX3Bvc3RfdG9waWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2Fn
ZV9uYW1lLCAqbWVzc2FnZV9hcmdzKQotCi0gICAgZGVmIHJhaXNlX2V4Y2VwdGlvbihzZWxmLCBl
eGNfaW5mbyk6Ci0gICAgICAgICMgU2luY2UgdHJhY2ViYWNrcyBhcmVuJ3QgcGlja2xhYmxlLCBz
ZW5kIHRoZSBleHRyYWN0ZWQgc3RhY2sgaW5zdGVhZC4KLSAgICAgICAgZXhjZXB0aW9uX3R5cGUs
IGV4Y2VwdGlvbl92YWx1ZSwgZXhjZXB0aW9uX3RyYWNlYmFjayA9IHN5cy5leGNfaW5mbygpCi0g
ICAgICAgIHN0YWNrX3V0aWxzLmxvZ190cmFjZWJhY2soX2xvZy5kZWJ1ZywgZXhjZXB0aW9uX3Ry
YWNlYmFjaykKLSAgICAgICAgc3RhY2sgPSB0cmFjZWJhY2suZXh0cmFjdF90YihleGNlcHRpb25f
dHJhY2ViYWNrKQotICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKHNlbGYuX2NsaWVu
dCwgc2VsZi5fcG9zdF90b3BpYywgJ2V4Y2VwdGlvbicsIGV4Y2VwdGlvbl90eXBlLCBleGNlcHRp
b25fdmFsdWUsIHN0YWNrKQotCi0KLWNsYXNzIEFic3RyYWN0V29ya2VyKEJyb2tlckNsaWVudCk6
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHdvcmtlcl9jb25uZWN0aW9uLCB3b3JrZXJfYXJndW1l
bnRzPU5vbmUpOgotICAgICAgICAiIiJUaGUgY29uc3RydWN0b3Igc2hvdWxkIGJlIHVzZWQgdG8g
ZG8gYW55IHNpbXBsZSBpbml0aWFsaXphdGlvbgotICAgICAgICBuZWNlc3NhcnksIGJ1dCBzaG91
bGQgbm90IGRvIGFueXRoaW5nIHRoYXQgY3JlYXRlcyBkYXRhIHN0cnVjdHVyZXMKLSAgICAgICAg
dGhhdCBjYW5ub3QgYmUgUGlja2xlZCBvciBzZW50IGFjcm9zcyBwcm9jZXNzZXMgKGxpa2Ugb3Bl
bmluZwotICAgICAgICBmaWxlcyBvciBzb2NrZXRzKS4gQ29tcGxleCBpbml0aWFsaXphdGlvbiBz
aG91bGQgYmUgZG9uZSBhdCB0aGUKLSAgICAgICAgc3RhcnQgb2YgdGhlIHJ1bigpIGNhbGwuCi0K
LSAgICAgICAgQXJnczoKLSAgICAgICAgICAgIHdvcmtlcl9jb25uZWN0aW9uIC0gaGFuZGxlIHRv
IHRoZSBfQnJva2VyQ29ubmVjdGlvbiBvYmplY3QgY3JlYXRpbmcKLSAgICAgICAgICAgICAgICB0
aGUgd29ya2VyIGFuZCB0aGF0IGNhbiBiZSB1c2VkIGZvciBtZXNzYWdpbmcuCi0gICAgICAgICAg
ICB3b3JrZXJfYXJndW1lbnRzIC0gKG9wdGlvbmFsLCBQaWNrbGFibGUpIG9iamVjdCBwYXNzZWQg
dG8gdGhlIHdvcmtlciBmcm9tIHRoZSBtYW5hZ2VyIiIiCi0gICAgICAgIEJyb2tlckNsaWVudC5f
X2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbiA9IHdvcmtlcl9j
b25uZWN0aW9uCi0gICAgICAgIHNlbGYuX25hbWUgPSAnd29ya2VyJwotICAgICAgICBzZWxmLl9k
b25lID0gRmFsc2UKLSAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBGYWxzZQotCi0gICAgZGVmIG5h
bWUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9uYW1lCi0KLSAgICBkZWYgaXNfZG9uZShz
ZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2RvbmUgb3Igc2VsZi5fY2FuY2VsZWQKLQotICAg
IGRlZiBzdG9wX2hhbmRsaW5nX21lc3NhZ2VzKHNlbGYpOgotICAgICAgICBzZWxmLl9kb25lID0g
VHJ1ZQorICAgIGRlZiBfaGFuZGxlX3dvcmtlcl9leGNlcHRpb24oc291cmNlLCBleGNlcHRpb25f
dHlwZSwgZXhjZXB0aW9uX3ZhbHVlLCBzdGFjayk6CisgICAgICAgIGlmIGV4Y2VwdGlvbl90eXBl
ID09IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9uX3R5cGUo
ZXhjZXB0aW9uX3ZhbHVlKQorICAgICAgICBfbG9nLmVycm9yKCIlcyByYWlzZWQgJXMoJyVzJyk6
IiAlICgKKyAgICAgICAgICAgICAgICAgICBzb3VyY2UsIGV4Y2VwdGlvbl92YWx1ZS5fX2NsYXNz
X18uX19uYW1lX18sIHN0cihleGNlcHRpb25fdmFsdWUpKSkKKyAgICAgICAgcmFpc2UgV29ya2Vy
RXhjZXB0aW9uKHN0cihleGNlcHRpb25fdmFsdWUpKQorCisKK2NsYXNzIF9Xb3JrZXIobXVsdGlw
cm9jZXNzaW5nLlByb2Nlc3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBtZXNzYWdl
c190b19tYW5hZ2VyLCBtZXNzYWdlc190b193b3JrZXIsIHdvcmtlcl9mYWN0b3J5LCB3b3JrZXJf
bnVtYmVyKToKKyAgICAgICAgc3VwZXIoX1dvcmtlciwgc2VsZikuX19pbml0X18oKQorICAgICAg
ICBzZWxmLmhvc3QgPSBob3N0CisgICAgICAgIHNlbGYud29ya2VyX251bWJlciA9IHdvcmtlcl9u
dW1iZXIKKyAgICAgICAgc2VsZi5uYW1lID0gJ3dvcmtlci8lZCcgJSB3b3JrZXJfbnVtYmVyCisg
ICAgICAgIHNlbGYubG9nX21lc3NhZ2VzID0gW10KKyAgICAgICAgc2VsZi5tYW5hZ2VyID0gTm9u
ZQorCisgICAgICAgIHNlbGYuX21lc3NhZ2VzX3RvX21hbmFnZXIgPSBtZXNzYWdlc190b19tYW5h
Z2VyCisgICAgICAgIHNlbGYuX21lc3NhZ2VzX3RvX3dvcmtlciA9IG1lc3NhZ2VzX3RvX3dvcmtl
cgorICAgICAgICBzZWxmLl93b3JrZXIgPSB3b3JrZXJfZmFjdG9yeShzZWxmKQorICAgICAgICBz
ZWxmLl9sb2dnZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2xvZ19oYW5kbGVyID0gTm9uZQorCisg
ICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fd29ya2VyOgorICAgICAg
ICAgICAgaWYgaGFzYXR0cihzZWxmLl93b3JrZXIsICdzdG9wJyk6CisgICAgICAgICAgICAgICAg
c2VsZi5fd29ya2VyLnN0b3AoKQorICAgICAgICAgICAgc2VsZi5fd29ya2VyID0gTm9uZQorICAg
ICAgICBpZiBzZWxmLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBzdXBlcihfV29ya2VyLCBzZWxm
KS50ZXJtaW5hdGUoKQorCisgICAgZGVmIF9jbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5f
bG9nX2hhbmRsZXIgYW5kIHNlbGYuX2xvZ2dlcjoKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5y
ZW1vdmVIYW5kbGVyKHNlbGYuX2xvZ19oYW5kbGVyKQorICAgICAgICBzZWxmLl9sb2dfaGFuZGxl
ciA9IE5vbmUKKyAgICAgICAgc2VsZi5fbG9nZ2VyID0gTm9uZQogCiAgICAgZGVmIHJ1bihzZWxm
KToKLSAgICAgICAgIiIiQ2FsbGJhY2sgZm9yIHRoZSB3b3JrZXIgdG8gc3RhcnQgZXhlY3V0aW5n
LiBUeXBpY2FsbHkgZG9lcyBhbnkKLSAgICAgICAgcmVtYWluaW5nIGluaXRpYWxpemF0aW9uIGFu
ZCB0aGVuIGNhbGxzIGJyb2tlcl9jb25uZWN0aW9uLnJ1bl9tZXNzYWdlX2xvb3AoKS4iIiIKKyAg
ICAgICAgaWYgbm90IHNlbGYuaG9zdDoKKyAgICAgICAgICAgIHNlbGYuaG9zdCA9IEhvc3QoKQor
ICAgICAgICBpZiBub3Qgc2VsZi5tYW5hZ2VyOgorICAgICAgICAgICAgc2VsZi5fc2V0X3VwX2xv
Z2dpbmcoKQorCisgICAgICAgIHdvcmtlciA9IHNlbGYuX3dvcmtlcgogICAgICAgICBleGNlcHRp
b25fbXNnID0gIiIKKyAgICAgICAgX2xvZy5kZWJ1ZygiJXMgc3RhcnRpbmciICUgc2VsZi5uYW1l
KQorICAgICAgICBpZiBoYXNhdHRyKHdvcmtlciwgJ3N0YXJ0Jyk6CisgICAgICAgICAgICB3b3Jr
ZXIuc3RhcnQoKQogCisgICAgICAgIGRvbmUgPSBGYWxzZQogICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5ydW5fbWVzc2FnZV9sb29wKCkKLSAgICAgICAg
ICAgIGlmIG5vdCBzZWxmLmlzX2RvbmUoKToKLSAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRp
b25FcnJvcigiJXM6IHJhbiBvdXQgb2YgbWVzc2FnZXMgaW4gd29ya2VyIHF1ZXVlLiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHNlbGYuX25hbWUpCi0gICAgICAgIGV4
Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHdoaWxlIG5vdCBkb25lOgorICAg
ICAgICAgICAgICAgIG1lc3NhZ2UgPSBzZWxmLl9tZXNzYWdlc190b193b3JrZXIuZ2V0KCkKKyAg
ICAgICAgICAgICAgICBpZiBtZXNzYWdlLmZyb21fdXNlcjoKKyAgICAgICAgICAgICAgICAgICAg
d29ya2VyLmhhbmRsZShtZXNzYWdlLm5hbWUsIG1lc3NhZ2Uuc291cmNlLCAqbWVzc2FnZS5hcmdz
KQorICAgICAgICAgICAgICAgICAgICBzZWxmLnlpZWxkX3RvX2NhbGxlcigpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgYXNzZXJ0IG1lc3NhZ2UubmFtZSA9
PSAnZG9uZScsICdiYWQgbWVzc2FnZSAlcycgJSByZXByKG1lc3NhZ2UpCisgICAgICAgICAgICAg
ICAgZG9uZSA9IFRydWUKKyAgICAgICAgZXhjZXB0IFF1ZXVlLkVtcHR5OgorICAgICAgICAgICAg
YXNzZXJ0IGRvbmUsICclczogcmFuIG91dCBvZiBtZXNzYWdlcyBpbiB3b3JrZXIgcXVldWUuJyAl
IHNlbGYubmFtZQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQsIGU6CiAgICAgICAg
ICAgICBleGNlcHRpb25fbXNnID0gIiwgaW50ZXJydXB0ZWQiCi0gICAgICAgICAgICBzZWxmLl93
b3JrZXJfY29ubmVjdGlvbi5yYWlzZV9leGNlcHRpb24oc3lzLmV4Y19pbmZvKCkpCi0gICAgICAg
IGV4Y2VwdDoKLSAgICAgICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiLCBleGNlcHRpb24gcmFpc2Vk
IgotICAgICAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucmFpc2VfZXhjZXB0aW9uKHN5
cy5leGNfaW5mbygpKQorICAgICAgICAgICAgaWYgbm90IHNlbGYubWFuYWdlcjoKKyAgICAgICAg
ICAgICAgICBfbG9nLndhcm5pbmcoJ3dvcmtlciBleGNlcHRpb24nKQorICAgICAgICAgICAgICAg
IHNlbGYuX3JhaXNlKHN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAg
ZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiLCBleGNl
cHRpb24gcmFpc2VkOiAlcyIgJSBzdHIoZSkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLm1hbmFn
ZXI6CisgICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCd3b3JrZXIgZXhjZXB0aW9uJykKKyAg
ICAgICAgICAgICAgICBzZWxmLl9yYWlzZShzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgIHJh
aXNlCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBkb25lIHdp
dGggbWVzc2FnZSBsb29wJXMiICUgKHNlbGYuX25hbWUsIGV4Y2VwdGlvbl9tc2cpKQotCi0gICAg
ZGVmIGNhbmNlbChzZWxmKToKLSAgICAgICAgIiIiQ2FsbGVkIHdoZW4gcG9zc2libGUgdG8gaW5k
aWNhdGUgdG8gdGhlIHdvcmtlciB0byBzdG9wIHByb2Nlc3NpbmcKLSAgICAgICAgbWVzc2FnZXMg
YW5kIHNodXQgZG93bi4gTm90ZSB0aGF0IHdvcmtlcnMgbWF5IGJlIHN0b3BwZWQgd2l0aG91dCB0
aGlzCi0gICAgICAgIG1ldGhvZCBiZWluZyBjYWxsZWQsIHNvIGNsaWVudHMgc2hvdWxkIG5vdCBy
ZWx5IHNvbGVseSBvbiB0aGlzLiIiIgotICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IFRydWUKLQor
ICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgZXhpdGluZyVzIiAlIChzZWxmLm5hbWUsIGV4Y2Vw
dGlvbl9tc2cpKQorICAgICAgICAgICAgaWYgaGFzYXR0cih3b3JrZXIsICdzdG9wJyk6CisgICAg
ICAgICAgICAgICAgd29ya2VyLnN0b3AoKQorICAgICAgICAgICAgc2VsZi5fcG9zdChuYW1lPSd3
b3JrZXJfZG9uZScsIGFyZ3M9KCksIGZyb21fdXNlcj1GYWxzZSkKKyAgICAgICAgICAgIHNlbGYu
X2Nsb3NlKCkKIAotY2xhc3MgX01hbmFnZXJDb25uZWN0aW9uKF9Ccm9rZXJDb25uZWN0aW9uKToK
LSAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBjbGllbnQsIHdvcmtlcl9jbGFzcyk6Ci0g
ICAgICAgICIiIkJhc2UgaW5pdGlhbGl6YXRpb24gZm9yIGFsbCBNYW5hZ2VyIG9iamVjdHMuCisg
ICAgZGVmIHBvc3Qoc2VsZiwgbmFtZSwgKmFyZ3MpOgorICAgICAgICBzZWxmLl9wb3N0KG5hbWUs
IGFyZ3MsIGZyb21fdXNlcj1UcnVlKQogCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICBicm9r
ZXI6IGhhbmRsZSB0byB0aGUgbWVzc2FnZV9icm9rZXIgb2JqZWN0Ci0gICAgICAgICAgICBjbGll
bnQ6IGNhbGxiYWNrIG9iamVjdCAodGhlIGNhbGxlcikKLSAgICAgICAgICAgIHdvcmtlcl9jbGFz
czogY2xhc3Mgb2JqZWN0IHRvIHVzZSB0byBjcmVhdGUgd29ya2Vycy4KLSAgICAgICAgIiIiCi0g
ICAgICAgIF9Ccm9rZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgY2xpZW50LCBN
QU5BR0VSX1RPUElDLCBBTllfV09SS0VSX1RPUElDKQotICAgICAgICBzZWxmLl93b3JrZXJfY2xh
c3MgPSB3b3JrZXJfY2xhc3MKKyAgICBkZWYgeWllbGRfdG9fY2FsbGVyKHNlbGYpOgorICAgICAg
ICBpZiBzZWxmLm1hbmFnZXI6CisgICAgICAgICAgICBzZWxmLm1hbmFnZXIuX2xvb3AoYmxvY2s9
RmFsc2UpCiAKLSAgICBkZWYgc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9hcmd1bWVudHM9Tm9u
ZSk6Ci0gICAgICAgICIiIlN0YXJ0cyBhIG5ldyB3b3JrZXIuCisgICAgZGVmIF9wb3N0KHNlbGYs
IG5hbWUsIGFyZ3MsIGZyb21fdXNlcik6CisgICAgICAgIGxvZ19tZXNzYWdlcyA9IHNlbGYubG9n
X21lc3NhZ2VzCisgICAgICAgIHNlbGYubG9nX21lc3NhZ2VzID0gW10KKyAgICAgICAgc2VsZi5f
bWVzc2FnZXNfdG9fbWFuYWdlci5wdXQoX01lc3NhZ2UobmFtZSwgYXJncywgc2VsZi5uYW1lLCBm
cm9tX3VzZXIsIGxvZ19tZXNzYWdlcykpCiAKLSAgICAgICAgQXJnczoKLSAgICAgICAgICAgIHdv
cmtlcl9hcmd1bWVudHMgLSBhbiBvcHRpb25hbCBQaWNrbGFibGUgb2JqZWN0IHRoYXQgaXMgcGFz
c2VkIHRvIHRoZSB3b3JrZXIgY29uc3RydWN0b3IKLSAgICAgICAgIiIiCi0gICAgICAgIHJhaXNl
IE5vdEltcGxlbWVudGVkRXJyb3IKLQotCi1jbGFzcyBfSW5saW5lTWFuYWdlcihfTWFuYWdlckNv
bm5lY3Rpb24pOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIGNsaWVudCwgd29ya2Vy
X2NsYXNzKToKLSAgICAgICAgX01hbmFnZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tl
ciwgY2xpZW50LCB3b3JrZXJfY2xhc3MpCi0gICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIgPSBO
b25lCi0KLSAgICBkZWYgc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9hcmd1bWVudHM9Tm9uZSk6
Ci0gICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIgPSBfSW5saW5lV29ya2VyQ29ubmVjdGlvbihz
ZWxmLl9icm9rZXIsCi0gICAgICAgICAgICBzZWxmLl9jbGllbnQsIHNlbGYuX3dvcmtlcl9jbGFz
cywgd29ya2VyX2FyZ3VtZW50cykKLSAgICAgICAgcmV0dXJuIHNlbGYuX2lubGluZV93b3JrZXIK
LQotICAgIGRlZiBzZXRfaW5saW5lX2FyZ3VtZW50cyhzZWxmLCBhcmd1bWVudHM9Tm9uZSk6Ci0g
ICAgICAgICMgTm90ZSB0aGF0IHRoaXMgbWV0aG9kIG9ubHkgZXhpc3RzIGhlcmUsIGFuZCBub3Qg
b24gYWxsCi0gICAgICAgICMgTWFuYWdlckNvbm5lY3Rpb25zOyBjYWxsaW5nIHRoaXMgbWV0aG9k
IG9uIGEgTXVsdGlQcm9jZXNzTWFuYWdlcgotICAgICAgICAjIHdpbGwgZGVsaWJlcmF0ZWx5IHJl
c3VsdCBpbiBhIHJ1bnRpbWUgZXJyb3IuCi0gICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIuc2V0
X2lubGluZV9hcmd1bWVudHMoYXJndW1lbnRzKQotCi0gICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Ao
c2VsZiwgZGVsYXlfc2Vjcz1Ob25lKToKLSAgICAgICAgIyBOb3RlIHRoYXQgZGVsYXlfc2VjcyBp
cyBpZ25vcmVkIGluIHRoaXMgY2FzZSBzaW5jZSB3ZSBjYW4ndCBlYXNpbHkKLSAgICAgICAgIyBp
bXBsZW1lbnQgaXQuCi0gICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIucnVuKCkKLSAgICAgICAg
c2VsZi5fYnJva2VyLnJ1bl9hbGxfcGVuZGluZyhNQU5BR0VSX1RPUElDLCBzZWxmLl9jbGllbnQp
Ci0KLQotY2xhc3MgX011bHRpUHJvY2Vzc01hbmFnZXIoX01hbmFnZXJDb25uZWN0aW9uKToKLSAg
ICBkZWYgc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9hcmd1bWVudHM9Tm9uZSk6Ci0gICAgICAg
IHdvcmtlcl9jb25uZWN0aW9uID0gX011bHRpUHJvY2Vzc1dvcmtlckNvbm5lY3Rpb24oc2VsZi5f
YnJva2VyLAotICAgICAgICAgICAgc2VsZi5fd29ya2VyX2NsYXNzLCB3b3JrZXJfYXJndW1lbnRz
KQotICAgICAgICB3b3JrZXJfY29ubmVjdGlvbi5zdGFydCgpCi0gICAgICAgIHJldHVybiB3b3Jr
ZXJfY29ubmVjdGlvbgotCi0KLWNsYXNzIF9Xb3JrZXJDb25uZWN0aW9uKF9Ccm9rZXJDb25uZWN0
aW9uKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCB3b3JrZXJfY2xhc3MsIHdvcmtl
cl9hcmd1bWVudHM9Tm9uZSk6Ci0gICAgICAgIHNlbGYuX2NsaWVudCA9IHdvcmtlcl9jbGFzcyhz
ZWxmLCB3b3JrZXJfYXJndW1lbnRzKQotICAgICAgICBfQnJva2VyQ29ubmVjdGlvbi5fX2luaXRf
XyhzZWxmLCBicm9rZXIsIHNlbGYuX2NsaWVudCwgQU5ZX1dPUktFUl9UT1BJQywgTUFOQUdFUl9U
T1BJQykKLQotICAgIGRlZiBuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fY2xpZW50
Lm5hbWUoKQotCi0gICAgZGVmIGNhbmNlbChzZWxmKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcgotCi0gICAgZGVmIGlzX2FsaXZlKHNlbGYpOgotICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yCi0KLSAgICBkZWYgam9pbihzZWxmLCB0aW1lb3V0KToKLSAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgZGVmIHlpZWxkX3RvX2Jyb2tlcihzZWxm
KToKLSAgICAgICAgcGFzcwotCi0KLWNsYXNzIF9JbmxpbmVXb3JrZXJDb25uZWN0aW9uKF9Xb3Jr
ZXJDb25uZWN0aW9uKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBtYW5hZ2VyX2Ns
aWVudCwgd29ya2VyX2NsYXNzLCB3b3JrZXJfYXJndW1lbnRzKToKLSAgICAgICAgX1dvcmtlckNv
bm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9hcmd1
bWVudHMpCi0gICAgICAgIHNlbGYuX2FsaXZlID0gRmFsc2UKLSAgICAgICAgc2VsZi5fbWFuYWdl
cl9jbGllbnQgPSBtYW5hZ2VyX2NsaWVudAotCi0gICAgZGVmIGNhbmNlbChzZWxmKToKLSAgICAg
ICAgc2VsZi5fY2xpZW50LmNhbmNlbCgpCi0KLSAgICBkZWYgaXNfYWxpdmUoc2VsZik6Ci0gICAg
ICAgIHJldHVybiBzZWxmLl9hbGl2ZQotCi0gICAgZGVmIGpvaW4oc2VsZiwgdGltZW91dCk6Ci0g
ICAgICAgIGFzc2VydCBub3Qgc2VsZi5fYWxpdmUKLQotICAgIGRlZiBzZXRfaW5saW5lX2FyZ3Vt
ZW50cyhzZWxmLCBhcmd1bWVudHMpOgotICAgICAgICBzZWxmLl9jbGllbnQuc2V0X2lubGluZV9h
cmd1bWVudHMoYXJndW1lbnRzKQotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgc2VsZi5f
YWxpdmUgPSBUcnVlCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX2NsaWVudC5ydW4o
KQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5fYWxpdmUgPSBGYWxzZQotCi0g
ICAgZGVmIHlpZWxkX3RvX2Jyb2tlcihzZWxmKToKLSAgICAgICAgc2VsZi5fYnJva2VyLnJ1bl9h
bGxfcGVuZGluZyhNQU5BR0VSX1RPUElDLCBzZWxmLl9tYW5hZ2VyX2NsaWVudCkKLQotICAgIGRl
ZiByYWlzZV9leGNlcHRpb24oc2VsZiwgZXhjX2luZm8pOgotICAgICAgICAjIFNpbmNlIHRoZSB3
b3JrZXIgaXMgaW4gdGhlIHNhbWUgcHJvY2VzcyBhcyB0aGUgbWFuYWdlciwgd2UgY2FuCi0gICAg
ICAgICMgcmFpc2UgdGhlIGV4Y2VwdGlvbiBkaXJlY3RseSwgcmF0aGVyIHRoYW4gaGF2aW5nIHRv
IHNlbmQgaXQgdGhyb3VnaAotICAgICAgICAjIHRoZSBxdWV1ZS4gVGhpcyBhbGxvd3MgdXMgdG8g
cHJlc2VydmUgdGhlIHRyYWNlYmFjay4KLSAgICAgICAgcmFpc2UgZXhjX2luZm9bMF0sIGV4Y19p
bmZvWzFdLCBleGNfaW5mb1syXQorICAgIGRlZiBfcmFpc2Uoc2VsZiwgZXhjX2luZm8pOgorICAg
ICAgICAjIFNpbmNlIHRyYWNlYmFja3MgYXJlbid0IHBpY2tsYWJsZSwgc2VuZCB0aGUgZXh0cmFj
dGVkIHN0YWNrIGluc3RlYWQuCisgICAgICAgIGV4Y2VwdGlvbl90eXBlLCBleGNlcHRpb25fdmFs
dWUsIGV4Y2VwdGlvbl90cmFjZWJhY2sgPSBleGNfaW5mbworICAgICAgICBzdGFja191dGlscy5s
b2dfdHJhY2ViYWNrKF9sb2cuZGVidWcsIGV4Y2VwdGlvbl90cmFjZWJhY2spCisgICAgICAgIHN0
YWNrID0gdHJhY2ViYWNrLmV4dHJhY3RfdGIoZXhjZXB0aW9uX3RyYWNlYmFjaykKKyAgICAgICAg
c2VsZi5fcG9zdChuYW1lPSd3b3JrZXJfZXhjZXB0aW9uJywgYXJncz0oZXhjZXB0aW9uX3R5cGUs
IGV4Y2VwdGlvbl92YWx1ZSwgc3RhY2spLCBmcm9tX3VzZXI9RmFsc2UpCiAKKyAgICBkZWYgX3Nl
dF91cF9sb2dnaW5nKHNlbGYpOgorICAgICAgICBzZWxmLl9sb2dnZXIgPSBsb2dnaW5nLmdldExv
Z2dlcigpCiAKLWNsYXNzIF9Qcm9jZXNzKG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKToKLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgd29ya2VyX2Nvbm5lY3Rpb24sIGNsaWVudCk6Ci0gICAgICAgIG11
bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYuX3dvcmtl
cl9jb25uZWN0aW9uID0gd29ya2VyX2Nvbm5lY3Rpb24KLSAgICAgICAgc2VsZi5fY2xpZW50ID0g
Y2xpZW50CisgICAgICAgICMgVGhlIHVuaXggbXVsdGlwcm9jZXNzaW5nIGltcGxlbWVudGF0aW9u
IGNsb25lcyB0aGUgTWV0ZXJlZFN0cmVhbSBsb2cgaGFuZGxlcgorICAgICAgICAjIGludG8gdGhl
IGNoaWxkIHByb2Nlc3MsIHNvIHdlIG5lZWQgdG8gcmVtb3ZlIGl0IHRvIGF2b2lkIGR1cGxpY2F0
ZSBsb2dnaW5nLgorICAgICAgICBmb3IgaCBpbiBzZWxmLl9sb2dnZXIuaGFuZGxlcnM6CisgICAg
ICAgICAgICAjIGxvZyBoYW5kbGVycyBkb24ndCBoYXZlIG5hbWVzIHVudGlsIHB5dGhvbiAyLjcu
CisgICAgICAgICAgICBpZiBnZXRhdHRyKGgsICduYW1lJywgJycpIGluIChtZXRlcmVkX3N0cmVh
bS5MT0dfSEFORExFUl9OQU1FLCAnd2Via2l0cHkudGVzdC5wcmludGVyJyk6CisgICAgICAgICAg
ICAgICAgc2VsZi5fbG9nZ2VyLnJlbW92ZUhhbmRsZXIoaCkKKyAgICAgICAgICAgICAgICBicmVh
awogCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgc2VsZi5fY2xpZW50LnJ1bigpCisgICAg
ICAgIHNlbGYuX2xvZ19oYW5kbGVyID0gX1dvcmtlckxvZ0hhbmRsZXIoc2VsZikKKyAgICAgICAg
c2VsZi5fbG9nZ2VyLmFkZEhhbmRsZXIoc2VsZi5fbG9nX2hhbmRsZXIpCiAKIAotY2xhc3MgX011
bHRpUHJvY2Vzc1dvcmtlckNvbm5lY3Rpb24oX1dvcmtlckNvbm5lY3Rpb24pOgotICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBicm9rZXIsIHdvcmtlcl9jbGFzcywgd29ya2VyX2FyZ3VtZW50cyk6Ci0g
ICAgICAgIF9Xb3JrZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgd29ya2VyX2Ns
YXNzLCB3b3JrZXJfYXJndW1lbnRzKQotICAgICAgICBzZWxmLl9wcm9jID0gX1Byb2Nlc3Moc2Vs
Ziwgc2VsZi5fY2xpZW50KQorY2xhc3MgX01lc3NhZ2Uob2JqZWN0KToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgbmFtZSwgYXJncywgc291cmNlLCBmcm9tX3VzZXIsIGxvZ3MpOgorICAgICAgICBz
ZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKyAgICAgICAgc2VsZi5z
b3VyY2UgPSBzb3VyY2UKKyAgICAgICAgc2VsZi5mcm9tX3VzZXIgPSBmcm9tX3VzZXIKKyAgICAg
ICAgc2VsZi5sb2dzID0gbG9ncwogCi0gICAgZGVmIGNhbmNlbChzZWxmKToKLSAgICAgICAgcmV0
dXJuIHNlbGYuX3Byb2MudGVybWluYXRlKCkKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAg
ICAgIHJldHVybiAnX01lc3NhZ2UoZnJvbV91c2VyPSVzLCBzb3VyY2U9JXMsIG5hbWU9JXMsIGFy
Z3M9JXMsIGxvZ3M9JXMpJyAlIChzZWxmLmZyb21fdXNlciwgc2VsZi5zb3VyY2UsIHNlbGYubmFt
ZSwgc2VsZi5hcmdzLCBzZWxmLmxvZ3MpCiAKLSAgICBkZWYgaXNfYWxpdmUoc2VsZik6Ci0gICAg
ICAgIHJldHVybiBzZWxmLl9wcm9jLmlzX2FsaXZlKCkKIAotICAgIGRlZiBqb2luKHNlbGYsIHRp
bWVvdXQpOgotICAgICAgICByZXR1cm4gc2VsZi5fcHJvYy5qb2luKHRpbWVvdXQpCitjbGFzcyBf
V29ya2VyTG9nSGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCB3b3JrZXIpOgorICAgICAgICBsb2dnaW5nLkhhbmRsZXIuX19pbml0X18oc2VsZikKKyAgICAg
ICAgc2VsZi5fd29ya2VyID0gd29ya2VyCiAKLSAgICBkZWYgc3RhcnQoc2VsZik6Ci0gICAgICAg
IHNlbGYuX3Byb2Muc3RhcnQoKQorICAgIGRlZiBlbWl0KHNlbGYsIHJlY29yZCk6CisgICAgICAg
IHNlbGYuX3dvcmtlci5sb2dfbWVzc2FnZXMuYXBwZW5kKHJlY29yZCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfd29y
a2VyX2Jyb2tlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weQppbmRleCAw
NDY0MjU2Li42MDM4ZTZhIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXJfdW5pdHRlc3QucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdl
cl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5CkBAIC0yNiwyMzEgKzI2LDMgQEAKICMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWltcG9ydCBvcHRwYXJzZQotaW1wb3J0IFF1ZXVlCi1p
bXBvcnQgc3lzCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
IGltcG9ydCBvdXRwdXRjYXB0dXJlCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9s
bGVycyBpbXBvcnQgbWFuYWdlcl93b3JrZXJfYnJva2VyCi0KLQotIyBJbiBvcmRlciB0byByZWxp
YWJseSBjb250cm9sIHdoZW4gY2hpbGQgd29ya2VycyBhcmUgc3RhcnRpbmcgYW5kIHN0b3BwaW5n
LAotIyB3ZSB1c2UgYSBwYWlyIG9mIGdsb2JhbCB2YXJpYWJsZXMgdG8gaG9sZCBxdWV1ZXMgdXNl
ZCBmb3IgbWVzc2FnaW5nLiBJZGVhbGx5Ci0jIHdlIHdvdWxkbid0IG5lZWQgZ2xvYmFscywgYnV0
IHdlIGNhbid0IHBhc3MgdGhlc2UgdGhyb3VnaCBhIGxleGljYWwgY2xvc3VyZQotIyBiZWNhdXNl
IHRob3NlIGNhbid0IGJlIFBpY2tsZWQgYW5kIHNlbnQgdG8gYSBzdWJwcm9jZXNzLCBhbmQgd2Un
ZCBwcmVmZXIgbm90Ci0jIHRvIGhhdmUgdG8gcGFzcyBleHRyYSBhcmd1bWVudHMgdG8gdGhlIHdv
cmtlciBpbiB0aGUgc3RhcnRfd29ya2VyKCkgY2FsbC4KLXN0YXJ0aW5nX3F1ZXVlID0gTm9uZQot
c3RvcHBpbmdfcXVldWUgPSBOb25lCi0KLQotV09SS0VSX05BTUUgPSAnVGVzdFdvcmtlcicKLQot
Ci1kZWYgbWFrZV9icm9rZXIobWFuYWdlciwgbWF4X3dvcmtlcnMsIHN0YXJ0X3F1ZXVlPU5vbmUs
IHN0b3BfcXVldWU9Tm9uZSk6Ci0gICAgZ2xvYmFsIHN0YXJ0aW5nX3F1ZXVlCi0gICAgZ2xvYmFs
IHN0b3BwaW5nX3F1ZXVlCi0gICAgc3RhcnRpbmdfcXVldWUgPSBzdGFydF9xdWV1ZQotICAgIHN0
b3BwaW5nX3F1ZXVlID0gc3RvcF9xdWV1ZQotICAgIHJldHVybiBtYW5hZ2VyX3dvcmtlcl9icm9r
ZXIuZ2V0KG1heF93b3JrZXJzLCBtYW5hZ2VyLCBfVGVzdFdvcmtlcikKLQotCi1jbGFzcyBfVGVz
dFdvcmtlcihtYW5hZ2VyX3dvcmtlcl9icm9rZXIuQWJzdHJhY3RXb3JrZXIpOgotICAgIGRlZiBf
X2luaXRfXyhzZWxmLCB3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX2FyZ3VtZW50cz1Ob25lKToK
LSAgICAgICAgc3VwZXIoX1Rlc3RXb3JrZXIsIHNlbGYpLl9faW5pdF9fKHdvcmtlcl9jb25uZWN0
aW9uKQotICAgICAgICBzZWxmLl9uYW1lID0gV09SS0VSX05BTUUKLSAgICAgICAgc2VsZi5fdGhp
bmdfdG9fZ3JlZXQgPSAnZXZlcnlib2R5JwotICAgICAgICBzZWxmLl9zdGFydGluZ19xdWV1ZSA9
IHN0YXJ0aW5nX3F1ZXVlCi0gICAgICAgIHNlbGYuX3N0b3BwaW5nX3F1ZXVlID0gc3RvcHBpbmdf
cXVldWUKLQotICAgIGRlZiBzZXRfaW5saW5lX2FyZ3VtZW50cyhzZWxmLCB0aGluZ190b19ncmVl
dCk6Ci0gICAgICAgIHNlbGYuX3RoaW5nX3RvX2dyZWV0ID0gdGhpbmdfdG9fZ3JlZXQKLQotICAg
IGRlZiBoYW5kbGVfc3RvcChzZWxmLCBzcmMpOgotICAgICAgICBzZWxmLnN0b3BfaGFuZGxpbmdf
bWVzc2FnZXMoKQotCi0gICAgZGVmIGhhbmRsZV90ZXN0KHNlbGYsIHNyYywgYW5faW50LCBhX3N0
cik6Ci0gICAgICAgIGFzc2VydCBhbl9pbnQgPT0gMQotICAgICAgICBhc3NlcnQgYV9zdHIgPT0g
ImhlbGxvLCB3b3JsZCIKLSAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNz
YWdlKCd0ZXN0JywgMiwgJ2hpLCAnICsgc2VsZi5fdGhpbmdfdG9fZ3JlZXQpCi0KLSAgICBkZWYg
cnVuKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9zdGFydGluZ19xdWV1ZToKLSAgICAgICAgICAg
IHNlbGYuX3N0YXJ0aW5nX3F1ZXVlLnB1dCgnJykKLQotICAgICAgICBpZiBzZWxmLl9zdG9wcGlu
Z19xdWV1ZToKLSAgICAgICAgICAgIHNlbGYuX3N0b3BwaW5nX3F1ZXVlLmdldCgpCi0gICAgICAg
IHRyeToKLSAgICAgICAgICAgIHN1cGVyKF9UZXN0V29ya2VyLCBzZWxmKS5ydW4oKQotICAgICAg
ICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNz
YWdlKCdkb25lJykKLQotCi1jbGFzcyBGdW5jdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToK
LSAgICBkZWYgdGVzdF9nZXRfX2lubGluZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KG1ha2VfYnJva2VyKHNlbGYsIDEpIGlzIG5vdCBOb25lKQotCi0gICAgZGVmIHRlc3RfZ2V0X19w
cm9jZXNzZXMoc2VsZik6Ci0gICAgICAgICMgVGhpcyB0ZXN0IHNvbWV0aW1lcyBmYWlscyBvbiBX
aW5kb3dzLiBTZWUgPGh0dHA6Ly93ZWJraXQub3JnL2IvNTUwODc+LgotICAgICAgICBpZiBzeXMu
cGxhdGZvcm0gaW4gKCdjeWd3aW4nLCAnd2luMzInKToKLSAgICAgICAgICAgIHJldHVybgotICAg
ICAgICBzZWxmLmFzc2VydFRydWUobWFrZV9icm9rZXIoc2VsZiwgMikgaXMgbm90IE5vbmUpCi0K
LQotY2xhc3MgX1Rlc3RzTWl4aW4ob2JqZWN0KToKLSAgICAiIiJNaXhpbiBjbGFzcyB0aGF0IGlt
cGxlbWVudHMgYSBzZXJpZXMgb2YgdGVzdHMgdG8gZW5mb3JjZSB0aGUKLSAgICBjb250cmFjdCBh
bGwgaW1wbGVtZW50YXRpb25zIG11c3QgZm9sbG93LiIiIgotCi0gICAgZGVmIG5hbWUoc2VsZik6
Ci0gICAgICAgIHJldHVybiAnVGVzdGVyTWFuYWdlcicKLQotICAgIGRlZiBpc19kb25lKHNlbGYp
OgotICAgICAgICByZXR1cm4gc2VsZi5fZG9uZQotCi0gICAgZGVmIGhhbmRsZV9kb25lKHNlbGYs
IHNyYyk6Ci0gICAgICAgIHNlbGYuX2RvbmUgPSBUcnVlCi0KLSAgICBkZWYgaGFuZGxlX3Rlc3Qo
c2VsZiwgc3JjLCBhbl9pbnQsIGFfc3RyKToKLSAgICAgICAgc2VsZi5fYW5faW50ID0gYW5faW50
Ci0gICAgICAgIHNlbGYuX2Ffc3RyID0gYV9zdHIKLQotICAgIGRlZiBoYW5kbGVfZXhjZXB0aW9u
KHNlbGYsIHNyYywgZXhjZXB0aW9uX3R5cGUsIGV4Y2VwdGlvbl92YWx1ZSwgc3RhY2spOgotICAg
ICAgICByYWlzZSBleGNlcHRpb25fdHlwZShleGNlcHRpb25fdmFsdWUpCi0KLSAgICBkZWYgc2V0
VXAoc2VsZik6Ci0gICAgICAgIHNlbGYuX2FuX2ludCA9IE5vbmUKLSAgICAgICAgc2VsZi5fYV9z
dHIgPSBOb25lCi0gICAgICAgIHNlbGYuX2Jyb2tlciA9IE5vbmUKLSAgICAgICAgc2VsZi5fZG9u
ZSA9IEZhbHNlCi0gICAgICAgIHNlbGYuX2V4Y2VwdGlvbiA9IE5vbmUKLSAgICAgICAgc2VsZi5f
bWF4X3dvcmtlcnMgPSBOb25lCi0KLSAgICBkZWYgbWFrZV9icm9rZXIoc2VsZiwgc3RhcnRpbmdf
cXVldWU9Tm9uZSwgc3RvcHBpbmdfcXVldWU9Tm9uZSk6Ci0gICAgICAgIHNlbGYuX2Jyb2tlciA9
IG1ha2VfYnJva2VyKHNlbGYsIHNlbGYuX21heF93b3JrZXJzLCBzdGFydGluZ19xdWV1ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHBpbmdfcXVldWUpCi0KLSAgICBk
ZWYgdGVzdF9uYW1lKHNlbGYpOgotICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkKLSAgICAgICAg
d29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKHdvcmtlci5uYW1lKCksIFdPUktFUl9OQU1FKQotICAgICAgICB3b3JrZXIuY2FuY2Vs
KCkKLSAgICAgICAgd29ya2VyLmpvaW4oMC4xKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHdv
cmtlci5pc19hbGl2ZSgpKQotICAgICAgICBzZWxmLl9icm9rZXIuY2xlYW51cCgpCi0KLSAgICBk
ZWYgdGVzdF9jYW5jZWwoc2VsZik6Ci0gICAgICAgIHNlbGYubWFrZV9icm9rZXIoKQotICAgICAg
ICB3b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2VyKCkKLSAgICAgICAgc2VsZi5fYnJv
a2VyLnBvc3RfbWVzc2FnZSgndGVzdCcsIDEsICdoZWxsbywgd29ybGQnKQotICAgICAgICB3b3Jr
ZXIuY2FuY2VsKCkKLSAgICAgICAgd29ya2VyLmpvaW4oMC4xKQotICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKHdvcmtlci5pc19hbGl2ZSgpKQotICAgICAgICBzZWxmLl9icm9rZXIuY2xlYW51cCgp
Ci0KLSAgICBkZWYgdGVzdF9kb25lKHNlbGYpOgotICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkK
LSAgICAgICAgd29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigpCi0gICAgICAgIHNl
bGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3Rlc3QnLCAxLCAnaGVsbG8sIHdvcmxkJykKLSAgICAg
ICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnc3RvcCcpCi0gICAgICAgIHNlbGYuX2Jyb2tl
ci5ydW5fbWVzc2FnZV9sb29wKCkKLSAgICAgICAgd29ya2VyLmpvaW4oMC41KQotICAgICAgICBz
ZWxmLmFzc2VydEZhbHNlKHdvcmtlci5pc19hbGl2ZSgpKQotICAgICAgICBzZWxmLmFzc2VydFRy
dWUoc2VsZi5pc19kb25lKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYW5faW50
LCAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2Ffc3RyLCAnaGksIGV2ZXJ5Ym9k
eScpCi0gICAgICAgIHNlbGYuX2Jyb2tlci5jbGVhbnVwKCkKLQotICAgIGRlZiB0ZXN0X3Vua25v
d25fbWVzc2FnZShzZWxmKToKLSAgICAgICAgc2VsZi5tYWtlX2Jyb2tlcigpCi0gICAgICAgIHdv
cmtlciA9IHNlbGYuX2Jyb2tlci5zdGFydF93b3JrZXIoKQotICAgICAgICBzZWxmLl9icm9rZXIu
cG9zdF9tZXNzYWdlKCd1bmtub3duJykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5f
YnJva2VyLnJ1bl9tZXNzYWdlX2xvb3AoKQotICAgICAgICAgICAgc2VsZi5mYWlsKCkKLSAgICAg
ICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhz
dHIoZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXM6IHJlY2VpdmVkIG1lc3Nh
Z2UgJ3Vua25vd24nIGl0IGNvdWxkbid0IGhhbmRsZSIgJSBXT1JLRVJfTkFNRSkKLSAgICAgICAg
ZmluYWxseToKLSAgICAgICAgICAgIHdvcmtlci5qb2luKDAuNSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRGYWxzZSh3b3JrZXIuaXNfYWxpdmUoKSkKLSAgICAgICAgc2VsZi5fYnJva2VyLmNsZWFudXAo
KQotCi0KLWNsYXNzIElubGluZUJyb2tlclRlc3RzKF9UZXN0c01peGluLCB1bml0dGVzdC5UZXN0
Q2FzZSk6Ci0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBfVGVzdHNNaXhpbi5zZXRVcChz
ZWxmKQotICAgICAgICBzZWxmLl9tYXhfd29ya2VycyA9IDEKLQotICAgIGRlZiB0ZXN0X2lubGlu
ZV9hcmd1bWVudHMoc2VsZik6Ci0gICAgICAgIHNlbGYubWFrZV9icm9rZXIoKQotICAgICAgICB3
b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2VyKCkKLSAgICAgICAgd29ya2VyLnNldF9p
bmxpbmVfYXJndW1lbnRzKCdtZScpCi0gICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2Uo
J3Rlc3QnLCAxLCAnaGVsbG8sIHdvcmxkJykKLSAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVz
c2FnZSgnc3RvcCcpCi0gICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5fYV9zdHIsICdoaSwgbWUnKQotCi0KLSMgRklY
TUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDUyMC4KLWlmIHN5
cy5wbGF0Zm9ybSBub3QgaW4gKCdjeWd3aW4nLCAnd2luMzInKToKLQotICAgIGNsYXNzIE11bHRp
UHJvY2Vzc0Jyb2tlclRlc3RzKF9UZXN0c01peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAg
ICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgICAgIF9UZXN0c01peGluLnNldFVwKHNlbGYp
Ci0gICAgICAgICAgICBzZWxmLl9tYXhfd29ya2VycyA9IDIKLQotCi1jbGFzcyBJbnRlcmZhY2VU
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAjIFRoZXNlIHRlc3RzIG1vc3RseSBleGlzdCB0
byBwYWNpZnkgY292ZXJhZ2UuCi0KLSAgICAjIEZJWE1FOiBUaGVyZSBtdXN0IGJlIGEgYmV0dGVy
IHdheSB0byBkbyB0aGlzIGFuZCBhbHNvIHZlcmlmeQotICAgICMgdGhhdCBjbGFzc2VzIGRvIGlt
cGxlbWVudCBldmVyeSBhYnN0cmFjdCBtZXRob2QgaW4gYW4gaW50ZXJmYWNlLgotICAgIGRlZiB0
ZXN0X2Jyb2tlcmNsaWVudF9pc19hYnN0cmFjdChzZWxmKToKLSAgICAgICAgIyBUZXN0IHRoYXQg
YWxsIHRoZSBiYXNlIGNsYXNzIG1ldGhvZHMgYXJlIGFic3RyYWN0IGFuZCBoYXZlIHRoZQotICAg
ICAgICAjIHNpZ25hdHVyZSB3ZSBleHBlY3QuCi0gICAgICAgIG9iaiA9IG1hbmFnZXJfd29ya2Vy
X2Jyb2tlci5Ccm9rZXJDbGllbnQoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBs
ZW1lbnRlZEVycm9yLCBvYmouaXNfZG9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90
SW1wbGVtZW50ZWRFcnJvciwgb2JqLm5hbWUpCi0KLSAgICBkZWYgdGVzdF9tYW5hZ2VyY29ubmVj
dGlvbl9pc19hYnN0cmFjdChzZWxmKToKLSAgICAgICAgIyBUZXN0IHRoYXQgYWxsIHRoZSBiYXNl
IGNsYXNzIG1ldGhvZHMgYXJlIGFic3RyYWN0IGFuZCBoYXZlIHRoZQotICAgICAgICAjIHNpZ25h
dHVyZSB3ZSBleHBlY3QuCi0gICAgICAgIGJyb2tlciA9IG1ha2VfYnJva2VyKHNlbGYsIDEpCi0g
ICAgICAgIG9iaiA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fTWFuYWdlckNvbm5lY3Rpb24oYnJv
a2VyLl9icm9rZXIsIHNlbGYsIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdElt
cGxlbWVudGVkRXJyb3IsIG9iai5zdGFydF93b3JrZXIpCi0KLSAgICBkZWYgdGVzdF93b3JrZXJj
b25uZWN0aW9uX2lzX2Fic3RyYWN0KHNlbGYpOgotICAgICAgICAjIFRlc3QgdGhhdCBhbGwgdGhl
IGJhc2UgY2xhc3MgbWV0aG9kcyBhcmUgYWJzdHJhY3QgYW5kIGhhdmUgdGhlCi0gICAgICAgICMg
c2lnbmF0dXJlIHdlIGV4cGVjdC4KLSAgICAgICAgYnJva2VyID0gbWFrZV9icm9rZXIoc2VsZiwg
MSkKLSAgICAgICAgb2JqID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLl9Xb3JrZXJDb25uZWN0aW9u
KGJyb2tlci5fYnJva2VyLCBfVGVzdFdvcmtlciwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRS
YWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLmNhbmNlbCkKLSAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLmlzX2FsaXZlKQotICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmouam9pbiwgTm9uZSkKLQotCi1j
bGFzcyBNZXNzYWdlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfX25vX2Jv
ZHkoc2VsZik6Ci0gICAgICAgIG1zZyA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fTWVzc2FnZSgn
c3JjJywgJ3RvcGljX25hbWUnLCAnbWVzc2FnZV9uYW1lJywgTm9uZSkKLSAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKHJlcHIobXNnKSkKLSAgICAgICAgcyA9IG1zZy5kdW1wcygpCi0gICAgICAgIG5l
d19tc2cgPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuX01lc3NhZ2UubG9hZHMocykKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChuZXdfbXNnLm5hbWUsICdtZXNzYWdlX25hbWUnKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKG5ld19tc2cuYXJncywgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChuZXdfbXNnLnRvcGljX25hbWUsICd0b3BpY19uYW1lJykKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChuZXdfbXNnLnNyYywgJ3NyYycpCi0KLSAgICBkZWYgdGVzdF9fYm9keShzZWxmKToK
LSAgICAgICAgbXNnID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLl9NZXNzYWdlKCdzcmMnLCAndG9w
aWNfbmFtZScsICdtZXNzYWdlX25hbWUnLCAoJ2JvZHknLCAwKSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKHJlcHIobXNnKSkKLSAgICAgICAgcyA9IG1zZy5kdW1wcygpCi0gICAgICAgIG5ld19t
c2cgPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuX01lc3NhZ2UubG9hZHMocykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChuZXdfbXNnLm5hbWUsICdtZXNzYWdlX25hbWUnKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKG5ld19tc2cuYXJncywgKCdib2R5JywgMCkpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwobmV3X21zZy50b3BpY19uYW1lLCAndG9waWNfbmFtZScpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwobmV3X21zZy5zcmMsICdzcmMnKQotCi0KLQotaWYgX19uYW1lX18gPT0gJ19f
bWFpbl9fJzoKLSAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3dvcmtlci5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3dvcmtlci5weQppbmRleCBkMzIx
YjVhLi5jZjZhYWZiIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9jb250cm9sbGVycy93b3JrZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvY29udHJvbGxlcnMvd29ya2VyLnB5CkBAIC0yOSwxMjAgKzI5LDczIEBACiAi
IiJIYW5kbGUgbWVzc2FnZXMgZnJvbSB0aGUgTWFuYWdlciBhbmQgZXhlY3V0ZXMgYWN0dWFsIHRl
c3RzLiIiIgogCiBpbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCiBpbXBvcnQg
dGhyZWFkaW5nCiBpbXBvcnQgdGltZQogCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9y
dCBIb3N0Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycyBpbXBvcnQgbWFu
YWdlcl93b3JrZXJfYnJva2VyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVy
cyBpbXBvcnQgc2luZ2xlX3Rlc3RfcnVubmVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5t
b2RlbHMgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy5tb2RlbHMgaW1wb3J0IHRlc3RfcmVzdWx0cwotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
dmlld3MgaW1wb3J0IG1ldGVyZWRfc3RyZWFtCiAKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KF9fbmFtZV9fKQogCiAKLWNsYXNzIFdvcmtlckFyZ3VtZW50cyhvYmplY3QpOgotICAgIGRlZiBf
X2luaXRfXyhzZWxmLCB3b3JrZXJfbnVtYmVyLCByZXN1bHRzX2RpcmVjdG9yeSwgb3B0aW9ucyk6
Ci0gICAgICAgIHNlbGYud29ya2VyX251bWJlciA9IHdvcmtlcl9udW1iZXIKLSAgICAgICAgc2Vs
Zi5yZXN1bHRzX2RpcmVjdG9yeSA9IHJlc3VsdHNfZGlyZWN0b3J5Ci0gICAgICAgIHNlbGYub3B0
aW9ucyA9IG9wdGlvbnMKK2NsYXNzIFdvcmtlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBjYWxsZXIsIHJlc3VsdHNfZGlyZWN0b3J5LCBvcHRpb25zKToKKyAgICAgICAgc2VsZi5f
Y2FsbGVyID0gY2FsbGVyCisgICAgICAgIHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5ID0gcmVzdWx0
c19kaXJlY3RvcnkKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2Vs
Zi5fbmFtZSA9IGNhbGxlci5uYW1lCisgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIgPSBjYWxs
ZXIud29ya2VyX251bWJlcgogCi0KLWNsYXNzIFdvcmtlcihtYW5hZ2VyX3dvcmtlcl9icm9rZXIu
QWJzdHJhY3RXb3JrZXIpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3b3JrZXJfY29ubmVjdGlv
biwgd29ya2VyX2FyZ3VtZW50cyk6Ci0gICAgICAgIHN1cGVyKFdvcmtlciwgc2VsZikuX19pbml0
X18od29ya2VyX2Nvbm5lY3Rpb24sIHdvcmtlcl9hcmd1bWVudHMpCi0gICAgICAgIHNlbGYuX3dv
cmtlcl9udW1iZXIgPSB3b3JrZXJfYXJndW1lbnRzLndvcmtlcl9udW1iZXIKLSAgICAgICAgc2Vs
Zi5fbmFtZSA9ICd3b3JrZXIvJWQnICUgc2VsZi5fd29ya2VyX251bWJlcgotICAgICAgICBzZWxm
Ll9yZXN1bHRzX2RpcmVjdG9yeSA9IHdvcmtlcl9hcmd1bWVudHMucmVzdWx0c19kaXJlY3RvcnkK
LSAgICAgICAgc2VsZi5fb3B0aW9ucyA9IHdvcmtlcl9hcmd1bWVudHMub3B0aW9ucworICAgICAg
ICAjIFRoZSByZW1haW5pbmcgZmllbGRzIGFyZSBpbml0aWFsaXplZCBpbiBzdGFydCgpCisgICAg
ICAgIHNlbGYuX2hvc3QgPSBOb25lCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBOb25lCiAg
ICAgICAgIHNlbGYuX3BvcnQgPSBOb25lCiAgICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSBOb25l
CiAgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0gTm9uZQotICAgICAgICBzZWxmLl9maWxlc3lz
dGVtID0gTm9uZQogICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX3Rl
c3RzX3J1bl9maWxlID0gTm9uZQotICAgICAgICBzZWxmLl90ZXN0c19ydW5fZmlsZW5hbWUgPSBO
b25lCi0gICAgICAgIHNlbGYuX2xvZ19tZXNzYWdlcyA9IFtdCi0gICAgICAgIHNlbGYuX2xvZ2dl
ciA9IE5vbmUKLSAgICAgICAgc2VsZi5fbG9nX2hhbmRsZXIgPSBOb25lCiAKICAgICBkZWYgX19k
ZWxfXyhzZWxmKToKLSAgICAgICAgc2VsZi5jbGVhbnVwKCkKLQotICAgIGRlZiBzYWZlX2luaXQo
c2VsZik6Ci0gICAgICAgICIiIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVu
IGl0IGlzIGlzIHNhZmUgZm9yIHRoZSBtaXhpbgotICAgICAgICB0byBjcmVhdGUgc3RhdGUgdGhh
dCBjYW4ndCBiZSBQaWNrbGVkLgorICAgICAgICBzZWxmLnN0b3AoKQogCi0gICAgICAgIFRoaXMg
cm91dGluZSBleGlzdHMgc28gdGhhdCB0aGUgbWl4aW4gY2FuIGJlIGNyZWF0ZWQgYW5kIHRoZW4g
bWFyc2hhbGVkCi0gICAgICAgIGFjcm9zcyBpbnRvIGEgY2hpbGQgcHJvY2Vzcy4iIiIKLSAgICAg
ICAgc2VsZi5fZmlsZXN5c3RlbSA9IHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVtCisgICAgZGVm
IHN0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLl9ob3N0ID0gc2VsZi5fY2FsbGVyLmhvc3QKKyAg
ICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbQorICAgICAgICBz
ZWxmLl9wb3J0ID0gc2VsZi5faG9zdC5wb3J0X2ZhY3RvcnkuZ2V0KHNlbGYuX29wdGlvbnMucGxh
dGZvcm0sIHNlbGYuX29wdGlvbnMpCiAgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0gMAogICAg
ICAgICBzZWxmLl9iYXRjaF9zaXplID0gc2VsZi5fb3B0aW9ucy5iYXRjaF9zaXplIG9yIDAKICAg
ICAgICAgdGVzdHNfcnVuX2ZpbGVuYW1lID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX3Jl
c3VsdHNfZGlyZWN0b3J5LCAidGVzdHNfcnVuJWQudHh0IiAlIHNlbGYuX3dvcmtlcl9udW1iZXIp
CiAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlID0gc2VsZi5fZmlsZXN5c3RlbS5vcGVuX3Rl
eHRfZmlsZV9mb3Jfd3JpdGluZyh0ZXN0c19ydW5fZmlsZW5hbWUpCiAKLSAgICBkZWYgX3NldF91
cF9sb2dnaW5nKHNlbGYpOgotICAgICAgICBzZWxmLl9sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dl
cigpCi0KLSAgICAgICAgIyBUaGUgdW5peCBtdWx0aXByb2Nlc3NpbmcgaW1wbGVtZW50YXRpb24g
Y2xvbmVzIHRoZSBNZXRlcmVkU3RyZWFtIGxvZyBoYW5kbGVyCi0gICAgICAgICMgaW50byB0aGUg
Y2hpbGQgcHJvY2Vzcywgc28gd2UgbmVlZCB0byByZW1vdmUgaXQgdG8gYXZvaWQgZHVwbGljYXRl
IGxvZ2dpbmcuCi0gICAgICAgIGZvciBoIGluIHNlbGYuX2xvZ2dlci5oYW5kbGVyczoKLSAgICAg
ICAgICAgICMgbG9nIGhhbmRsZXJzIGRvbid0IGhhdmUgbmFtZXMgdW50aWwgcHl0aG9uIDIuNy4K
LSAgICAgICAgICAgIGlmIGdldGF0dHIoaCwgJ25hbWUnLCAnJykgPT0gbWV0ZXJlZF9zdHJlYW0u
TE9HX0hBTkRMRVJfTkFNRToKLSAgICAgICAgICAgICAgICBzZWxmLl9sb2dnZXIucmVtb3ZlSGFu
ZGxlcihoKQotICAgICAgICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgc2VsZi5fbG9nZ2VyLnNl
dExldmVsKGxvZ2dpbmcuREVCVUcgaWYgc2VsZi5fb3B0aW9ucy52ZXJib3NlIGVsc2UgbG9nZ2lu
Zy5JTkZPKQotICAgICAgICBzZWxmLl9sb2dfaGFuZGxlciA9IF9Xb3JrZXJMb2dIYW5kbGVyKHNl
bGYpCi0gICAgICAgIHNlbGYuX2xvZ2dlci5hZGRIYW5kbGVyKHNlbGYuX2xvZ19oYW5kbGVyKQot
Ci0gICAgZGVmIF9zZXRfdXBfaG9zdF9hbmRfcG9ydChzZWxmKToKLSAgICAgICAgb3B0aW9ucyA9
IHNlbGYuX29wdGlvbnMKLSAgICAgICAgaWYgb3B0aW9ucy5wbGF0Zm9ybSBhbmQgJ3Rlc3QnIGlu
IG9wdGlvbnMucGxhdGZvcm06Ci0gICAgICAgICAgICAjIEl0IGlzIGxhbWUgdG8gaW1wb3J0IG1v
Y2tzIGludG8gcmVhbCBjb2RlLCBidXQgdGhpcyBhbGxvd3MgdXMgdG8gdXNlIHRoZSB0ZXN0IHBv
cnQgaW4gbXVsdGktcHJvY2VzcyB0ZXN0cyBhcyB3ZWxsLgotICAgICAgICAgICAgZnJvbSB3ZWJr
aXRweS5jb21tb24uaG9zdF9tb2NrIGltcG9ydCBNb2NrSG9zdAotICAgICAgICAgICAgaG9zdCA9
IE1vY2tIb3N0KCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGhvc3QgPSBIb3N0KCkKLSAg
ICAgICAgc2VsZi5fcG9ydCA9IGhvc3QucG9ydF9mYWN0b3J5LmdldChvcHRpb25zLnBsYXRmb3Jt
LCBvcHRpb25zKQotCi0gICAgZGVmIHNldF9pbmxpbmVfYXJndW1lbnRzKHNlbGYsIHBvcnQpOgot
ICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAg
aWYgbm90IHNlbGYuX3BvcnQ6Ci0gICAgICAgICAgICAjIFdlIGFyZSBydW5uaW5nIGluIGEgY2hp
bGQgcHJvY2VzcyBhbmQgbmVlZCB0byBpbml0aWFsaXplIHRoaW5ncy4KLSAgICAgICAgICAgIHNl
bGYuX3NldF91cF9sb2dnaW5nKCkKLSAgICAgICAgICAgIHNlbGYuX3NldF91cF9ob3N0X2FuZF9w
b3J0KCkKLQotICAgICAgICBzZWxmLnNhZmVfaW5pdCgpCi0gICAgICAgIHRyeToKLSAgICAgICAg
ICAgIF9sb2cuZGVidWcoIiVzIHN0YXJ0aW5nIiAlIHNlbGYuX25hbWUpCi0gICAgICAgICAgICBz
dXBlcihXb3JrZXIsIHNlbGYpLnJ1bigpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBz
ZWxmLmtpbGxfZHJpdmVyKCkKLSAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzIGV4aXRpbmciICUg
c2VsZi5fbmFtZSkKLSAgICAgICAgICAgIHNlbGYuY2xlYW51cCgpCi0gICAgICAgICAgICBzZWxm
Ll93b3JrZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ2RvbmUnLCBzZWxmLl9sb2dfbWVzc2Fn
ZXMpCi0KLSAgICBkZWYgaGFuZGxlX3Rlc3RfbGlzdChzZWxmLCBzcmMsIGxpc3RfbmFtZSwgdGVz
dF9saXN0KToKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5fa2lsbF9kcml2ZXIo
KQorICAgICAgICBpZiBzZWxmLl90ZXN0c19ydW5fZmlsZToKKyAgICAgICAgICAgIHNlbGYuX3Rl
c3RzX3J1bl9maWxlLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlID0g
Tm9uZQorCisgICAgZGVmIGhhbmRsZShzZWxmLCBuYW1lLCBzb3VyY2UsIHRlc3RfbGlzdF9uYW1l
LCB0ZXN0X2lucHV0cyk6CisgICAgICAgIGFzc2VydCBuYW1lID09ICd0ZXN0X2xpc3QnCiAgICAg
ICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICBudW1fdGVzdHMgPSAwCi0gICAg
ICAgIGZvciB0ZXN0X2lucHV0IGluIHRlc3RfbGlzdDoKLSAgICAgICAgICAgIHNlbGYuX3VwZGF0
ZV90ZXN0X2lucHV0KHRlc3RfaW5wdXQpCisgICAgICAgIHNlbGYuX2NhbGxlci5wb3N0KCdzdGFy
dGVkX3Rlc3RfbGlzdCcsIHRlc3RfbGlzdF9uYW1lKQorICAgICAgICBmb3IgdGVzdF9pbnB1dCBp
biB0ZXN0X2lucHV0czoKICAgICAgICAgICAgIHNlbGYuX3J1bl90ZXN0KHRlc3RfaW5wdXQpCi0g
ICAgICAgICAgICBudW1fdGVzdHMgKz0gMQotICAgICAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5l
Y3Rpb24ueWllbGRfdG9fYnJva2VyKCkKLQorICAgICAgICAgICAgc2VsZi5fY2FsbGVyLnlpZWxk
X3RvX2NhbGxlcigpCiAgICAgICAgIGVsYXBzZWRfdGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnRf
dGltZQotICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ2Zpbmlz
aGVkX2xpc3QnLCBsaXN0X25hbWUsIG51bV90ZXN0cywgZWxhcHNlZF90aW1lKQorICAgICAgICBz
ZWxmLl9jYWxsZXIucG9zdCgnZmluaXNoZWRfdGVzdF9saXN0JywgdGVzdF9saXN0X25hbWUsIGxl
bih0ZXN0X2lucHV0cyksIGVsYXBzZWRfdGltZSkKKworICAgIGRlZiBfcnVuX3Rlc3Qoc2VsZiwg
dGVzdF9pbnB1dCk6CisgICAgICAgIHNlbGYuX3VwZGF0ZV90ZXN0X2lucHV0KHRlc3RfaW5wdXQp
CisgICAgICAgIHRlc3RfdGltZW91dF9zZWMgPSBzZWxmLl90aW1lb3V0KHRlc3RfaW5wdXQpCisg
ICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5fY2FsbGVyLnBvc3QoJ3N0
YXJ0ZWRfdGVzdCcsIHRlc3RfaW5wdXQsIHRlc3RfdGltZW91dF9zZWMpCiAKLSAgICBkZWYgaGFu
ZGxlX3N0b3Aoc2VsZiwgc3JjKToKLSAgICAgICAgc2VsZi5zdG9wX2hhbmRsaW5nX21lc3NhZ2Vz
KCkKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX3Rlc3Rfd2l0aF90aW1lb3V0KHRlc3RfaW5w
dXQsIHRlc3RfdGltZW91dF9zZWMpCisKKyAgICAgICAgZWxhcHNlZF90aW1lID0gdGltZS50aW1l
KCkgLSBzdGFydAorICAgICAgICBzZWxmLl9jYWxsZXIucG9zdCgnZmluaXNoZWRfdGVzdCcsIHJl
c3VsdCwgZWxhcHNlZF90aW1lKQorICAgICAgICBzZWxmLl9jbGVhbl91cF9hZnRlcl90ZXN0KHRl
c3RfaW5wdXQsIHJlc3VsdCkKIAogICAgIGRlZiBfdXBkYXRlX3Rlc3RfaW5wdXQoc2VsZiwgdGVz
dF9pbnB1dCk6CiAgICAgICAgIHRlc3RfaW5wdXQucmVmZXJlbmNlX2ZpbGVzID0gc2VsZi5fcG9y
dC5yZWZlcmVuY2VfZmlsZXModGVzdF9pbnB1dC50ZXN0X25hbWUpCkBAIC0xNTYsMzIgKzEwOSw3
IEBAIGNsYXNzIFdvcmtlcihtYW5hZ2VyX3dvcmtlcl9icm9rZXIuQWJzdHJhY3RXb3JrZXIpOgog
ICAgICAgICBlbHNlOgogICAgICAgICAgICAgdGVzdF9pbnB1dC5zaG91bGRfcnVuX3BpeGVsX3Rl
c3QgPSBGYWxzZQogCi0gICAgZGVmIF9ydW5fdGVzdChzZWxmLCB0ZXN0X2lucHV0KToKLSAgICAg
ICAgdGVzdF90aW1lb3V0X3NlYyA9IHNlbGYudGltZW91dCh0ZXN0X2lucHV0KQotICAgICAgICBz
dGFydCA9IHRpbWUudGltZSgpCi0gICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnBvc3Rf
bWVzc2FnZSgnc3RhcnRlZF90ZXN0JywgdGVzdF9pbnB1dCwgdGVzdF90aW1lb3V0X3NlYykKLQot
ICAgICAgICByZXN1bHQgPSBzZWxmLnJ1bl90ZXN0X3dpdGhfdGltZW91dCh0ZXN0X2lucHV0LCB0
ZXN0X3RpbWVvdXRfc2VjKQotCi0gICAgICAgIGVsYXBzZWRfdGltZSA9IHRpbWUudGltZSgpIC0g
c3RhcnQKLSAgICAgICAgbG9nX21lc3NhZ2VzID0gc2VsZi5fbG9nX21lc3NhZ2VzCi0gICAgICAg
IHNlbGYuX2xvZ19tZXNzYWdlcyA9IFtdCi0gICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9u
LnBvc3RfbWVzc2FnZSgnZmluaXNoZWRfdGVzdCcsIHJlc3VsdCwgZWxhcHNlZF90aW1lLCBsb2df
bWVzc2FnZXMpCi0KLSAgICAgICAgc2VsZi5jbGVhbl91cF9hZnRlcl90ZXN0KHRlc3RfaW5wdXQs
IHJlc3VsdCkKLQotICAgIGRlZiBjbGVhbnVwKHNlbGYpOgotICAgICAgICBfbG9nLmRlYnVnKCIl
cyBjbGVhbmluZyB1cCIgJSBzZWxmLl9uYW1lKQotICAgICAgICBzZWxmLmtpbGxfZHJpdmVyKCkK
LSAgICAgICAgaWYgc2VsZi5fdGVzdHNfcnVuX2ZpbGU6Ci0gICAgICAgICAgICBzZWxmLl90ZXN0
c19ydW5fZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLl90ZXN0c19ydW5fZmlsZSA9IE5v
bmUKLSAgICAgICAgaWYgc2VsZi5fbG9nX2hhbmRsZXIgYW5kIHNlbGYuX2xvZ2dlcjoKLSAgICAg
ICAgICAgIHNlbGYuX2xvZ2dlci5yZW1vdmVIYW5kbGVyKHNlbGYuX2xvZ19oYW5kbGVyKQotICAg
ICAgICBzZWxmLl9sb2dfaGFuZGxlciA9IE5vbmUKLSAgICAgICAgc2VsZi5fbG9nZ2VyID0gTm9u
ZQotCi0gICAgZGVmIHRpbWVvdXQoc2VsZiwgdGVzdF9pbnB1dCk6CisgICAgZGVmIF90aW1lb3V0
KHNlbGYsIHRlc3RfaW5wdXQpOgogICAgICAgICAiIiJDb21wdXRlIHRoZSBhcHByb3ByaWF0ZSB0
aW1lb3V0IHZhbHVlIGZvciBhIHRlc3QuIiIiCiAgICAgICAgICMgVGhlIER1bXBSZW5kZXJUcmVl
IHdhdGNoZG9nIHVzZXMgMi41eCB0aGUgdGltZW91dDsgd2Ugd2FudCB0byBiZQogICAgICAgICAj
IGxhcmdlciB0aGFuIHRoYXQuIFdlIGFsc28gYWRkIGEgbGl0dGxlIG1vcmUgcGFkZGluZyBpZiB3
ZSdyZQpAQCAtMTk3LDE4ICsxMjUsMTggQEAgY2xhc3MgV29ya2VyKG1hbmFnZXJfd29ya2VyX2Jy
b2tlci5BYnN0cmFjdFdvcmtlcik6CiAgICAgICAgIHRocmVhZF90aW1lb3V0X3NlYyA9IGRyaXZl
cl90aW1lb3V0X3NlYyArIHRocmVhZF9wYWRkaW5nX3NlYwogICAgICAgICByZXR1cm4gdGhyZWFk
X3RpbWVvdXRfc2VjCiAKLSAgICBkZWYga2lsbF9kcml2ZXIoc2VsZik6CisgICAgZGVmIF9raWxs
X2RyaXZlcihzZWxmKToKICAgICAgICAgaWYgc2VsZi5fZHJpdmVyOgogICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygiJXMga2lsbGluZyBkcml2ZXIiICUgc2VsZi5fbmFtZSkKICAgICAgICAgICAgIHNl
bGYuX2RyaXZlci5zdG9wKCkKICAgICAgICAgICAgIHNlbGYuX2RyaXZlciA9IE5vbmUKIAotICAg
IGRlZiBydW5fdGVzdF93aXRoX3RpbWVvdXQoc2VsZiwgdGVzdF9pbnB1dCwgdGltZW91dCk6Cisg
ICAgZGVmIF9ydW5fdGVzdF93aXRoX3RpbWVvdXQoc2VsZiwgdGVzdF9pbnB1dCwgdGltZW91dCk6
CiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucnVuX3NpbmdseToKICAgICAgICAgICAgIHJldHVy
biBzZWxmLl9ydW5fdGVzdF9pbl9hbm90aGVyX3RocmVhZCh0ZXN0X2lucHV0LCB0aW1lb3V0KQog
ICAgICAgICByZXR1cm4gc2VsZi5fcnVuX3Rlc3RfaW5fdGhpc190aHJlYWQodGVzdF9pbnB1dCkK
IAotICAgIGRlZiBjbGVhbl91cF9hZnRlcl90ZXN0KHNlbGYsIHRlc3RfaW5wdXQsIHJlc3VsdCk6
CisgICAgZGVmIF9jbGVhbl91cF9hZnRlcl90ZXN0KHNlbGYsIHRlc3RfaW5wdXQsIHJlc3VsdCk6
CiAgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ICs9IDEKICAgICAgICAgdGVzdF9uYW1lID0gdGVz
dF9pbnB1dC50ZXN0X25hbWUKICAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUud3JpdGUodGVz
dF9uYW1lICsgIlxuIikKQEAgLTIxNiw3ICsxNDQsNyBAQCBjbGFzcyBXb3JrZXIobWFuYWdlcl93
b3JrZXJfYnJva2VyLkFic3RyYWN0V29ya2VyKToKICAgICAgICAgaWYgcmVzdWx0LmZhaWx1cmVz
OgogICAgICAgICAgICAgIyBDaGVjayBhbmQga2lsbCBEdW1wUmVuZGVyVHJlZSBpZiB3ZSBuZWVk
IHRvLgogICAgICAgICAgICAgaWYgYW55KFtmLmRyaXZlcl9uZWVkc19yZXN0YXJ0KCkgZm9yIGYg
aW4gcmVzdWx0LmZhaWx1cmVzXSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5raWxsX2RyaXZlcigp
CisgICAgICAgICAgICAgICAgc2VsZi5fa2lsbF9kcml2ZXIoKQogICAgICAgICAgICAgICAgICMg
UmVzZXQgdGhlIGJhdGNoIGNvdW50IHNpbmNlIHRoZSBzaGVsbCBqdXN0IGJvdW5jZWQuCiAgICAg
ICAgICAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCiAKQEAgLTIzMCw3ICsxNTgsNyBAQCBj
bGFzcyBXb3JrZXIobWFuYWdlcl93b3JrZXJfYnJva2VyLkFic3RyYWN0V29ya2VyKToKICAgICAg
ICAgICAgIF9sb2cuZGVidWcoIiVzICVzIHBhc3NlZCIgJSAoc2VsZi5fbmFtZSwgdGVzdF9uYW1l
KSkKIAogICAgICAgICBpZiBzZWxmLl9iYXRjaF9zaXplID4gMCBhbmQgc2VsZi5fYmF0Y2hfY291
bnQgPj0gc2VsZi5fYmF0Y2hfc2l6ZToKLSAgICAgICAgICAgIHNlbGYua2lsbF9kcml2ZXIoKQor
ICAgICAgICAgICAgc2VsZi5fa2lsbF9kcml2ZXIoKQogICAgICAgICAgICAgc2VsZi5fYmF0Y2hf
Y291bnQgPSAwCiAKICAgICBkZWYgX3J1bl90ZXN0X2luX2Fub3RoZXJfdGhyZWFkKHNlbGYsIHRl
c3RfaW5wdXQsIHRocmVhZF90aW1lb3V0X3NlYyk6CkBAIC0yNTYsNyArMTg0LDcgQEAgY2xhc3Mg
V29ya2VyKG1hbmFnZXJfd29ya2VyX2Jyb2tlci5BYnN0cmFjdFdvcmtlcik6CiAgICAgICAgICAg
ICAgICAgc2VsZi5yZXN1bHQgPSBOb25lCiAKICAgICAgICAgICAgIGRlZiBydW4oc2VsZik6Ci0g
ICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSB3b3JrZXIucnVuX3NpbmdsZV90ZXN0KGRyaXZl
ciwgdGVzdF9pbnB1dCkKKyAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IHdvcmtlci5fcnVu
X3NpbmdsZV90ZXN0KGRyaXZlciwgdGVzdF9pbnB1dCkKIAogICAgICAgICB0aHJlYWQgPSBTaW5n
bGVUZXN0VGhyZWFkKCkKICAgICAgICAgdGhyZWFkLnN0YXJ0KCkKQEAgLTI4OCwyMSArMjE2LDE0
IEBAIGNsYXNzIFdvcmtlcihtYW5hZ2VyX3dvcmtlcl9icm9rZXIuQWJzdHJhY3RXb3JrZXIpOgog
ICAgICAgICBSZXR1cm5zOiBhIFRlc3RSZXN1bHQgb2JqZWN0LgogICAgICAgICAiIiIKICAgICAg
ICAgaWYgc2VsZi5fZHJpdmVyIGFuZCBzZWxmLl9kcml2ZXIuaGFzX2NyYXNoZWQoKToKLSAgICAg
ICAgICAgIHNlbGYua2lsbF9kcml2ZXIoKQorICAgICAgICAgICAgc2VsZi5fa2lsbF9kcml2ZXIo
KQogICAgICAgICBpZiBub3Qgc2VsZi5fZHJpdmVyOgogICAgICAgICAgICAgc2VsZi5fZHJpdmVy
ID0gc2VsZi5fcG9ydC5jcmVhdGVfZHJpdmVyKHNlbGYuX3dvcmtlcl9udW1iZXIpCi0gICAgICAg
IHJldHVybiBzZWxmLnJ1bl9zaW5nbGVfdGVzdChzZWxmLl9kcml2ZXIsIHRlc3RfaW5wdXQpCisg
ICAgICAgIHJldHVybiBzZWxmLl9ydW5fc2luZ2xlX3Rlc3Qoc2VsZi5fZHJpdmVyLCB0ZXN0X2lu
cHV0KQogCi0gICAgZGVmIHJ1bl9zaW5nbGVfdGVzdChzZWxmLCBkcml2ZXIsIHRlc3RfaW5wdXQp
OgorICAgIGRlZiBfcnVuX3NpbmdsZV90ZXN0KHNlbGYsIGRyaXZlciwgdGVzdF9pbnB1dCk6CiAg
ICAgICAgIHJldHVybiBzaW5nbGVfdGVzdF9ydW5uZXIucnVuX3NpbmdsZV90ZXN0KHNlbGYuX3Bv
cnQsIHNlbGYuX29wdGlvbnMsCiAgICAgICAgICAgICB0ZXN0X2lucHV0LCBkcml2ZXIsIHNlbGYu
X25hbWUpCiAKIAotY2xhc3MgX1dvcmtlckxvZ0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKLSAg
ICBkZWYgX19pbml0X18oc2VsZiwgd29ya2VyKToKLSAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9f
aW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYuX3dvcmtlciA9IHdvcmtlcgotICAgICAgICBzZWxm
Ll9waWQgPSBvcy5nZXRwaWQoKQogCi0gICAgZGVmIGVtaXQoc2VsZiwgcmVjb3JkKToKLSAgICAg
ICAgc2VsZi5fd29ya2VyLl9sb2dfbWVzc2FnZXMuYXBwZW5kKHR1cGxlKFtyZWNvcmQuZ2V0TWVz
c2FnZSgpLCByZWNvcmQuY3JlYXRlZCwgc2VsZi5fcGlkXSkpCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy93b3JrZXJfdW5pdHRlc3Qu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy93b3Jr
ZXJfdW5pdHRlc3QucHkKaW5kZXggZWJiNGU3YS4uMjk4NmVmMCAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvd29ya2VyX3VuaXR0ZXN0
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJz
L3dvcmtlcl91bml0dGVzdC5weQpAQCAtMjUsMzAgKzI1LDMgQEAKICMgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLmNvbnRyb2xsZXJzLndvcmtlciBpbXBvcnQgV29ya2VyLCBXb3Jr
ZXJBcmd1bWVudHMKLWZyb20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlv
bnMKLQotCi1jbGFzcyBGYWtlQ29ubmVjdGlvbihvYmplY3QpOgotICAgIGRlZiBydW5fbWVzc2Fn
ZV9sb29wKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgcG9zdF9tZXNzYWdlKHNlbGYs
IG1lc3NhZ2VfbmFtZSwgKm1lc3NhZ2VfYXJncyk6Ci0gICAgICAgIHBhc3MKLQotCi1jbGFzcyBX
b3JrZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9kZWZhdWx0X3BsYXRm
b3JtX2luX3dvcmtlcihzZWxmKToKLSAgICAgICAgIyBUaGlzIGNoZWNrcyB0aGF0IHdlIGdvdCBh
IHBvcnQgYW5kIGRpZG4ndCByYWlzZSBhbiBleGNlcHRpb24KLSAgICAgICAgIyBpZiB3ZSBkaWRu
J3Qgc3BlY2lmeSBhIHBvcnQgd2l0aCB0aGUgLS1wbGF0Zm9ybSBmbGFnLgotICAgICAgICB3b3Jr
ZXJfY29ubmVjdGlvbiA9IEZha2VDb25uZWN0aW9uKCkKLSAgICAgICAgd29ya2VyID0gV29ya2Vy
KHdvcmtlcl9jb25uZWN0aW9uLCBXb3JrZXJBcmd1bWVudHMoMSwgJy90bXAnLCBNb2NrT3B0aW9u
cyhwbGF0Zm9ybT1Ob25lLCBwcmludF9vcHRpb25zPU5vbmUsIHZlcmJvc2U9RmFsc2UsIGJhdGNo
X3NpemU9MCkpKQotICAgICAgICB3b3JrZXIuX3NldF91cF9ob3N0X2FuZF9wb3J0KCkKLSAgICAg
ICAgc2VsZi5hc3NlcnROb3RFcXVhbHMod29ya2VyLl9wb3J0LCBOb25lKQotCi0KLWlmIF9fbmFt
ZV9fID09ICdfX21haW5fXyc6Ci0gICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQppbmRl
eCAzZDdiMjBmLi5hM2Y2ZDQ2IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKQEAgLTM3LDcgKzM3LDcgQEAgaW1w
b3J0IHNpZ25hbAogaW1wb3J0IHN5cwogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9y
dCBIb3N0Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycy5tYW5hZ2VyIGlt
cG9ydCBNYW5hZ2VyLCBXb3JrZXJFeGNlcHRpb24KK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LmNvbnRyb2xsZXJzLm1hbmFnZXIgaW1wb3J0IE1hbmFnZXIKIGZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLm1vZGVscyBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKIGZyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IHBvcnRfb3B0aW9ucwogZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMudmlld3MgaW1wb3J0IHByaW50aW5nCkBAIC00NTgsOCArNDU4LDkgQEAgaWYgJ19fbWFp
bl9fJyA9PSBfX25hbWVfXzoKICAgICAgICAgIyBUaGlzIG1pcnJvcnMgd2hhdCB0aGUgc2hlbGwg
bm9ybWFsbHkgZG9lcy4KICAgICAgICAgSU5URVJSVVBURURfRVhJVF9TVEFUVVMgPSBzaWduYWwu
U0lHSU5UICsgMTI4CiAgICAgICAgIHN5cy5leGl0KElOVEVSUlVQVEVEX0VYSVRfU1RBVFVTKQot
ICAgIGV4Y2VwdCBXb3JrZXJFeGNlcHRpb246CisgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKICAg
ICAgICAgIyBUaGlzIGlzIGEgcmFuZG9tbHkgY2hvc2VuIGV4aXQgY29kZSB0aGF0IGNhbiBiZSB0
ZXN0ZWQgYWdhaW5zdCB0bwogICAgICAgICAjIGluZGljYXRlIHRoYXQgYW4gdW5leHBlY3RlZCBl
eGNlcHRpb24gb2NjdXJyZWQuCisgICAgICAgIF9sb2cuY3JpdGljYWwoIkV4Y2VwdGlvbiByYWlz
ZWQ6ICVzIiAlIHN0cihlKSkKICAgICAgICAgRVhDRVBUSU9OQUxfRVhJVF9TVEFUVVMgPSAyNTQK
ICAgICAgICAgc3lzLmV4aXQoRVhDRVBUSU9OQUxfRVhJVF9TVEFUVVMpCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVn
cmF0aW9udGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5CmluZGV4IGQ1YzFlMTQuLjI4ZTFhMTQgMTAw
NzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRf
dGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5CkBAIC01MCw2ICs1
MCw3IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLmhvc3RfbW9jayBpbXBvcnQgTW9ja0hvc3QKIAog
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKIGZyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzIGltcG9ydCBydW5fd2Via2l0X3Rlc3RzCitmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5jb250cm9sbGVycy5tYW5hZ2VyX3dvcmtlcl9icm9rZXIgaW1wb3J0IFdvcmtlckV4Y2Vw
dGlvbgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgUG9ydAogZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC50ZXN0IGltcG9ydCBUZXN0UG9ydCwgVGVzdERyaXZl
cgogZnJvbSB3ZWJraXRweS50ZXN0LnNraXAgaW1wb3J0IHNraXBfaWYKQEAgLTgxLDE4ICs4Miwy
MiBAQCBkZWYgcGFyc2VfYXJncyhleHRyYV9hcmdzPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNl
LCB0ZXN0c19pbmNsdWRlZD1GYWxzZSwgbmV3XwogICAgIHJldHVybiBydW5fd2Via2l0X3Rlc3Rz
LnBhcnNlX2FyZ3MoYXJncykKIAogCi1kZWYgcGFzc2luZ19ydW4oZXh0cmFfYXJncz1Ob25lLCBw
b3J0X29iaj1Ob25lLCByZWNvcmRfcmVzdWx0cz1GYWxzZSwgdGVzdHNfaW5jbHVkZWQ9RmFsc2Us
IGhvc3Q9Tm9uZSk6CitkZWYgcGFzc2luZ19ydW4oZXh0cmFfYXJncz1Ob25lLCBwb3J0X29iaj1O
b25lLCByZWNvcmRfcmVzdWx0cz1GYWxzZSwgdGVzdHNfaW5jbHVkZWQ9RmFsc2UsIGhvc3Q9Tm9u
ZSwgc2hhcmVkX3BvcnQ9VHJ1ZSk6CiAgICAgb3B0aW9ucywgcGFyc2VkX2FyZ3MgPSBwYXJzZV9h
cmdzKGV4dHJhX2FyZ3MsIHJlY29yZF9yZXN1bHRzLCB0ZXN0c19pbmNsdWRlZCkKICAgICBpZiBu
b3QgcG9ydF9vYmo6CiAgICAgICAgIGhvc3QgPSBob3N0IG9yIE1vY2tIb3N0KCkKICAgICAgICAg
cG9ydF9vYmogPSBob3N0LnBvcnRfZmFjdG9yeS5nZXQocG9ydF9uYW1lPW9wdGlvbnMucGxhdGZv
cm0sIG9wdGlvbnM9b3B0aW9ucykKKworICAgIGlmIHNoYXJlZF9wb3J0OgorICAgICAgICBwb3J0
X29iai5ob3N0LnBvcnRfZmFjdG9yeS5nZXQgPSBsYW1iZGEgKmFyZ3MsICoqa3dhcmdzOiBwb3J0
X29iagorCiAgICAgYnVpbGRib3Rfb3V0cHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQogICAgIHJl
Z3VsYXJfb3V0cHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQogICAgIHJlcyA9IHJ1bl93ZWJraXRf
dGVzdHMucnVuKHBvcnRfb2JqLCBvcHRpb25zLCBwYXJzZWRfYXJncywgYnVpbGRib3Rfb3V0cHV0
PWJ1aWxkYm90X291dHB1dCwgcmVndWxhcl9vdXRwdXQ9cmVndWxhcl9vdXRwdXQpCiAgICAgcmV0
dXJuIHJlcyA9PSAwIGFuZCBub3QgcmVndWxhcl9vdXRwdXQuZ2V0dmFsdWUoKSBhbmQgbm90IGJ1
aWxkYm90X291dHB1dC5nZXR2YWx1ZSgpCiAKIAotZGVmIGxvZ2dpbmdfcnVuKGV4dHJhX2FyZ3M9
Tm9uZSwgcG9ydF9vYmo9Tm9uZSwgcmVjb3JkX3Jlc3VsdHM9RmFsc2UsIHRlc3RzX2luY2x1ZGVk
PUZhbHNlLCBob3N0PU5vbmUsIG5ld19yZXN1bHRzPUZhbHNlKToKK2RlZiBsb2dnaW5nX3J1bihl
eHRyYV9hcmdzPU5vbmUsIHBvcnRfb2JqPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNlLCB0ZXN0
c19pbmNsdWRlZD1GYWxzZSwgaG9zdD1Ob25lLCBuZXdfcmVzdWx0cz1GYWxzZSwgc2hhcmVkX3Bv
cnQ9VHJ1ZSk6CiAgICAgb3B0aW9ucywgcGFyc2VkX2FyZ3MgPSBwYXJzZV9hcmdzKGV4dHJhX2Fy
Z3M9ZXh0cmFfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVj
b3JkX3Jlc3VsdHM9cmVjb3JkX3Jlc3VsdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlc3RzX2luY2x1ZGVkPXRlc3RzX2luY2x1ZGVkLApAQCAtMTAxLDExICsxMDYs
MTMgQEAgZGVmIGxvZ2dpbmdfcnVuKGV4dHJhX2FyZ3M9Tm9uZSwgcG9ydF9vYmo9Tm9uZSwgcmVj
b3JkX3Jlc3VsdHM9RmFsc2UsIHRlc3RzX2luY2wKICAgICBpZiBub3QgcG9ydF9vYmo6CiAgICAg
ICAgIHBvcnRfb2JqID0gaG9zdC5wb3J0X2ZhY3RvcnkuZ2V0KHBvcnRfbmFtZT1vcHRpb25zLnBs
YXRmb3JtLCBvcHRpb25zPW9wdGlvbnMpCiAKLSAgICByZXMsIGJ1aWxkYm90X291dHB1dCwgcmVn
dWxhcl9vdXRwdXQgPSBydW5fYW5kX2NhcHR1cmUocG9ydF9vYmosIG9wdGlvbnMsIHBhcnNlZF9h
cmdzKQorICAgIHJlcywgYnVpbGRib3Rfb3V0cHV0LCByZWd1bGFyX291dHB1dCA9IHJ1bl9hbmRf
Y2FwdHVyZShwb3J0X29iaiwgb3B0aW9ucywgcGFyc2VkX2FyZ3MsIHNoYXJlZF9wb3J0KQogICAg
IHJldHVybiAocmVzLCBidWlsZGJvdF9vdXRwdXQsIHJlZ3VsYXJfb3V0cHV0LCBob3N0LnVzZXIp
CiAKIAotZGVmIHJ1bl9hbmRfY2FwdHVyZShwb3J0X29iaiwgb3B0aW9ucywgcGFyc2VkX2FyZ3Mp
OgorZGVmIHJ1bl9hbmRfY2FwdHVyZShwb3J0X29iaiwgb3B0aW9ucywgcGFyc2VkX2FyZ3MsIHNo
YXJlZF9wb3J0PVRydWUpOgorICAgIGlmIHNoYXJlZF9wb3J0OgorICAgICAgICBwb3J0X29iai5o
b3N0LnBvcnRfZmFjdG9yeS5nZXQgPSBsYW1iZGEgKmFyZ3MsICoqa3dhcmdzOiBwb3J0X29iagog
ICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKICAgICB0cnk6CiAgICAgICAg
IG9jLmNhcHR1cmVfb3V0cHV0KCkKQEAgLTMwMiwxNCArMzA5LDE0IEBAIGNsYXNzIE1haW5UZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlLCBTdHJlYW1UZXN0aW5nTWl4aW4pOgogICAgIGRlZiB0ZXN0X2No
aWxkX3Byb2Nlc3Nlc18yKHNlbGYpOgogICAgICAgICBpZiBzZWxmLnNob3VsZF90ZXN0X3Byb2Nl
c3NlczoKICAgICAgICAgICAgIF8sIF8sIHJlZ3VsYXJfb3V0cHV0LCBfID0gbG9nZ2luZ19ydW4o
Ci0gICAgICAgICAgICAgICAgWyctLXByaW50JywgJ2NvbmZpZycsICctLWNoaWxkLXByb2Nlc3Nl
cycsICcyJ10pCisgICAgICAgICAgICAgICAgWyctLXByaW50JywgJ2NvbmZpZycsICctLWNoaWxk
LXByb2Nlc3NlcycsICcyJ10sIHNoYXJlZF9wb3J0PUZhbHNlKQogICAgICAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKGFueShbJ1J1bm5pbmcgMiAnIGluIGxpbmUgZm9yIGxpbmUgaW4gcmVndWxhcl9v
dXRwdXQuYnVmbGlzdF0pKQogCiAgICAgZGVmIHRlc3RfY2hpbGRfcHJvY2Vzc2VzX21pbihzZWxm
KToKICAgICAgICAgaWYgc2VsZi5zaG91bGRfdGVzdF9wcm9jZXNzZXM6CiAgICAgICAgICAgICBf
LCBfLCByZWd1bGFyX291dHB1dCwgXyA9IGxvZ2dpbmdfcnVuKAogICAgICAgICAgICAgICAgIFsn
LS1wcmludCcsICdjb25maWcnLCAnLS1jaGlsZC1wcm9jZXNzZXMnLCAnMicsICdwYXNzZXMnXSwK
LSAgICAgICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1UcnVlKQorICAgICAgICAgICAgICAgIHRl
c3RzX2luY2x1ZGVkPVRydWUsIHNoYXJlZF9wb3J0PUZhbHNlKQogICAgICAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKGFueShbJ1J1bm5pbmcgMSAnIGluIGxpbmUgZm9yIGxpbmUgaW4gcmVndWxhcl9v
dXRwdXQuYnVmbGlzdF0pKQogCiAgICAgZGVmIHRlc3RfZHJ5cnVuKHNlbGYpOgpAQCAtMzMzLDgg
KzM0MCw4IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBTdHJlYW1UZXN0aW5n
TWl4aW4pOgogICAgICAgICAgICAgWydmYWlsdXJlcy9leHBlY3RlZC9leGNlcHRpb24uaHRtbCcs
ICctLWNoaWxkLXByb2Nlc3NlcycsICcxJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUpCiAKICAgICAg
ICAgaWYgc2VsZi5zaG91bGRfdGVzdF9wcm9jZXNzZXM6Ci0gICAgICAgICAgICBzZWxmLmFzc2Vy
dFJhaXNlcyhydW5fd2Via2l0X3Rlc3RzLldvcmtlckV4Y2VwdGlvbiwgbG9nZ2luZ19ydW4sCi0g
ICAgICAgICAgICAgICAgWyctLWNoaWxkLXByb2Nlc3NlcycsICcyJywgJy0tZm9yY2UnLCAnZmFp
bHVyZXMvZXhwZWN0ZWQvZXhjZXB0aW9uLmh0bWwnLCAncGFzc2VzL3RleHQuaHRtbCddLCB0ZXN0
c19pbmNsdWRlZD1UcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV29ya2VyRXhj
ZXB0aW9uLCBsb2dnaW5nX3J1biwKKyAgICAgICAgICAgICAgICBbJy0tY2hpbGQtcHJvY2Vzc2Vz
JywgJzInLCAnLS1mb3JjZScsICdmYWlsdXJlcy9leHBlY3RlZC9leGNlcHRpb24uaHRtbCcsICdw
YXNzZXMvdGV4dC5odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUsIHNoYXJlZF9wb3J0PUZhbHNl
KQogCiAgICAgZGVmIHRlc3RfZnVsbF9yZXN1bHRzX2h0bWwoc2VsZik6CiAgICAgICAgICMgRklY
TUU6IHZlcmlmeSBodG1sPwpAQCAtMzY0LDcgKzM3MSw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlLCBTdHJlYW1UZXN0aW5nTWl4aW4pOgogCiAgICAgICAgIGlmIHNlbGYuc2hv
dWxkX3Rlc3RfcHJvY2Vzc2VzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5Ym9h
cmRJbnRlcnJ1cHQsIGxvZ2dpbmdfcnVuLAotICAgICAgICAgICAgICAgIFsnZmFpbHVyZXMvZXhw
ZWN0ZWQva2V5Ym9hcmQuaHRtbCcsICdwYXNzZXMvdGV4dC5odG1sJywgJy0tY2hpbGQtcHJvY2Vz
c2VzJywgJzInLCAnLS1mb3JjZSddLCB0ZXN0c19pbmNsdWRlZD1UcnVlKQorICAgICAgICAgICAg
ICAgIFsnZmFpbHVyZXMvZXhwZWN0ZWQva2V5Ym9hcmQuaHRtbCcsICdwYXNzZXMvdGV4dC5odG1s
JywgJy0tY2hpbGQtcHJvY2Vzc2VzJywgJzInLCAnLS1mb3JjZSddLCB0ZXN0c19pbmNsdWRlZD1U
cnVlLCBzaGFyZWRfcG9ydD1GYWxzZSkKIAogICAgIGRlZiB0ZXN0X25vX3Rlc3RzX2ZvdW5kKHNl
bGYpOgogICAgICAgICByZXMsIG91dCwgZXJyLCB1c2VyID0gbG9nZ2luZ19ydW4oWydyZXNvdXJj
ZXMnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKQEAgLTc1NCw2ICs3NjEsNyBAQCBjbGFzcyBNYWlu
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwgU3RyZWFtVGVzdGluZ01peGluKToKIAogICAgICAgICAj
IE5vdyB3ZSB0ZXN0IHRoYXQgLS1jbG9iYmVyLW9sZC1yZXN1bHRzIGRvZXMgcmVtb3ZlIHRoZSBv
bGQgZW50cmllcyBhbmQgdGhlIG9sZCByZXRyaWVzLAogICAgICAgICAjIGFuZCB0aGF0IHdlIGRv
bid0IHJldHJ5IGFnYWluLgorICAgICAgICBob3N0ID0gTW9ja0hvc3QoKQogICAgICAgICByZXMs
IG91dCwgZXJyLCBfID0gbG9nZ2luZ19ydW4oWyctLW5vLXJldHJ5LWZhaWx1cmVzJywgJy0tY2xv
YmJlci1vbGQtcmVzdWx0cycsICdmYWlsdXJlcy9mbGFreSddLCB0ZXN0c19pbmNsdWRlZD1UcnVl
LCBob3N0PWhvc3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcywgMSkKICAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKCdDbG9iYmVyaW5nIG9sZCByZXN1bHRzJyBpbiBlcnIuZ2V0dmFsdWUo
KSkKQEAgLTc2MywyMiArNzcxLDE2IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
LCBTdHJlYW1UZXN0aW5nTWl4aW4pOgogICAgICAgICBzZWxmLmFzc2VydFRydWUoaG9zdC5maWxl
c3lzdGVtLmV4aXN0cygnL3RtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1cmVzL2ZsYWt5L3Rl
eHQtYWN0dWFsLnR4dCcpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhvc3QuZmlsZXN5c3Rl
bS5leGlzdHMoJ3JldHJpZXMnKSkKIAotCi0gICAgIyBUaGVzZSBuZXh0IHRlc3RzIHRlc3QgdGhh
dCB3ZSBydW4gdGhlIHRlc3RzIGluIGFzY2VuZGluZyBhbHBoYWJldGljYWwKLSAgICAjIG9yZGVy
IHBlciBkaXJlY3RvcnkuIEhUVFAgdGVzdHMgYXJlIHNoYXJkZWQgc2VwYXJhdGVseSBmcm9tIG90
aGVyIHRlc3RzLAotICAgICMgc28gd2UgaGF2ZSB0byB0ZXN0IGJvdGguCi0gICAgZGVmIGFzc2Vy
dF9ydW5fb3JkZXIoc2VsZiwgY2hpbGRfcHJvY2Vzc2VzPScxJyk6Ci0gICAgICAgIHRlc3RzX3J1
biA9IGdldF90ZXN0c19ydW4oWyctLWNoaWxkLXByb2Nlc3NlcycsIGNoaWxkX3Byb2Nlc3Nlcywg
J3Bhc3NlcyddLAotICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRj
aGVzPVRydWUpCisgICAgZGVmIHRlc3RfcnVuX29yZGVyX19pbmxpbmUoc2VsZik6CisgICAgICAg
ICMgVGhlc2UgbmV4dCB0ZXN0cyB0ZXN0IHRoYXQgd2UgcnVuIHRoZSB0ZXN0cyBpbiBhc2NlbmRp
bmcgYWxwaGFiZXRpY2FsCisgICAgICAgICMgb3JkZXIgcGVyIGRpcmVjdG9yeS4gSFRUUCB0ZXN0
cyBhcmUgc2hhcmRlZCBzZXBhcmF0ZWx5IGZyb20gb3RoZXIgdGVzdHMsCisgICAgICAgICMgc28g
d2UgaGF2ZSB0byB0ZXN0IGJvdGguCisgICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4o
WydwYXNzZXMnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRlc3RzX3J1biwgc29ydGVkKHRlc3RzX3J1bikpCiAK
LSAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tY2hpbGQtcHJvY2Vzc2VzJywg
Y2hpbGRfcHJvY2Vzc2VzLCAnaHR0cC90ZXN0cy9wYXNzZXMnXSwKLSAgICAgICAgICAgIHRlc3Rz
X2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAgICB0ZXN0c19ydW4g
PSBnZXRfdGVzdHNfcnVuKFsnaHR0cC90ZXN0cy9wYXNzZXMnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1
ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRlc3Rz
X3J1biwgc29ydGVkKHRlc3RzX3J1bikpCiAKLSAgICBkZWYgdGVzdF9ydW5fb3JkZXJfX2lubGlu
ZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfcnVuX29yZGVyKCkKLQogICAgIGRlZiB0ZXN0
X3RvbGVyYW5jZShzZWxmKToKICAgICAgICAgY2xhc3MgSW1hZ2VEaWZmVGVzdFBvcnQoVGVzdFBv
cnQpOgogICAgICAgICAgICAgZGVmIGRpZmZfaW1hZ2Uoc2VsZiwgZXhwZWN0ZWRfY29udGVudHMs
IGFjdHVhbF9jb250ZW50cywgdG9sZXJhbmNlPU5vbmUpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdmlld3MvbWV0ZXJlZF9zdHJlYW0ucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy92aWV3cy9tZXRlcmVkX3N0cmVhbS5weQpp
bmRleCA4MTQ0Mzc3Li5lYzczYTkzIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy92aWV3cy9tZXRlcmVkX3N0cmVhbS5weQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy92aWV3cy9tZXRlcmVkX3N0cmVhbS5weQpAQCAtNTgsNyAr
NTgsNiBAQCBjbGFzcyBNZXRlcmVkU3RyZWFtKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3ZlcmJv
c2UgPSB2ZXJib3NlCiAgICAgICAgIHNlbGYuX3RpbWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGlt
ZQogICAgICAgICBzZWxmLl9waWQgPSBwaWQgb3Igb3MuZ2V0cGlkKCkKLQogICAgICAgICBzZWxm
Ll9pc2F0dHkgPSBzZWxmLl9zdHJlYW0uaXNhdHR5KCkKICAgICAgICAgc2VsZi5fZXJhc2luZyA9
IHNlbGYuX2lzYXR0eSBhbmQgbm90IHZlcmJvc2UKICAgICAgICAgc2VsZi5fbGFzdF9wYXJ0aWFs
X2xpbmUgPSAnJwpAQCAtMTI4LDQgKzEyNyw0IEBAIGNsYXNzIF9Mb2dIYW5kbGVyKGxvZ2dpbmcu
SGFuZGxlcik6CiAgICAgICAgIHNlbGYubmFtZSA9IExPR19IQU5ETEVSX05BTUUKIAogICAgIGRl
ZiBlbWl0KHNlbGYsIHJlY29yZCk6Ci0gICAgICAgIHNlbGYuX21ldGVyLndyaXRlbG4ocmVjb3Jk
LmdldE1lc3NhZ2UoKSwgcmVjb3JkLmNyZWF0ZWQpCisgICAgICAgIHNlbGYuX21ldGVyLndyaXRl
bG4ocmVjb3JkLmdldE1lc3NhZ2UoKSwgcmVjb3JkLmNyZWF0ZWQsIHJlY29yZC5wcm9jZXNzKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>