<?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>79018</bug_id>
          
          <creation_ts>2012-02-20 01:21:25 -0800</creation_ts>
          <short_desc>perf-o-matic: Extract logic to generate JSON responses as classes to unit test</short_desc>
          <delta_ts>2012-02-21 14:26:51 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Website</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>78989</dependson>
          <blocked>77037</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>morrita</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>560103</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-20 01:21:25 -0800</bug_when>
    <thetext>JSON responses for dashboard, manifest, and runs are generated by handler classes at the moment. This prevents us from unit-testing the code to generate JSON responses since handlers can&apos;t be unit-tested. We should extract classes out of these handlers in order to unit-test them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560682</commentid>
    <comment_count>1</comment_count>
      <attachid>127923</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-20 22:54:35 -0800</bug_when>
    <thetext>Created attachment 127923
refactoring</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561096</commentid>
    <comment_count>2</comment_count>
      <attachid>127923</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-21 11:47:36 -0800</bug_when>
    <thetext>Comment on attachment 127923
refactoring

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

&gt; Websites/webkit-perf.appspot.com/controller.py:52
&gt; +        cache_dashboard(ManifestJSONGenerator().to_json())

Oh oops, this needs to be manifest :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561135</commentid>
    <comment_count>3</comment_count>
      <attachid>127923</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-21 12:32:33 -0800</bug_when>
    <thetext>Comment on attachment 127923
refactoring

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561230</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-21 14:26:51 -0800</bug_when>
    <thetext>Committed in r108399.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127923</attachid>
            <date>2012-02-20 22:54:35 -0800</date>
            <delta_ts>2012-02-21 12:32:33 -0800</delta_ts>
            <desc>refactoring</desc>
            <filename>bug-79018-20120220225431.patch</filename>
            <type>text/plain</type>
            <size>48127</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDEwODMw
OCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDEyLTAy
LTIwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIHBlcmYtby1t
YXRpYzogRXh0cmFjdCBsb2dpYyB0byBnZW5lcmF0ZSBKU09OIHJlc3BvbnNlcyBhcyBjbGFzc2Vz
IHRvIHVuaXQgdGVzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzkwMTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBFeHRyYWN0ZWQgRGFzaGJvYXJkSlNPTkdlbmVyYXRvciwgTWFuaWZlc3RKU09OR2VuZXJh
dG9yLCBhbmQgUnVuc0pTT05HZW5lcmF0b3IKKyAgICAgICAgaW50byBqc29uX2dlbmVyYXRvcnMu
cHkgZnJvbSBEYXNoYm9hcmRIYW5kbGVyLCBNYW5pZmVzdEhhbmRsZXIsIGFuZCBSdW5zSGFuZGxl
cgorICAgICAgICBhbmQgYWRkZWQgdW5pdCB0ZXN0cyBmb3IgdGhlIGZvcm1lciB0aHJlZSBjbGFz
c2VzLgorCisgICAgICAgIE1lcmdlZCB0aGUgbGF0dGVyIHRocmVlIGNsYXNzZXMgaW50byBjb250
cm9sZXIucHkgc2luY2UgdGhleSBoYXZlIGJlY29tZSB0b28gdHJpdmlhbAorICAgICAgICB0byBo
YXZlIHRoZWlyIG93biBmaWxlcy4KKworICAgICAgICAqIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFw
cHNwb3QuY29tL2NvbnRyb2xsZXIucHk6CisgICAgICAgIChNYW5pZmVzdFVwZGF0ZUhhbmRsZXIp
OgorICAgICAgICAoTWFuaWZlc3RVcGRhdGVIYW5kbGVyLmdldCk6CisgICAgICAgIChNYW5pZmVz
dFVwZGF0ZUhhbmRsZXIucG9zdCk6CisgICAgICAgIChEYXNoYm9hcmRVcGRhdGVIYW5kbGVyKToK
KyAgICAgICAgKERhc2hib2FyZFVwZGF0ZUhhbmRsZXIuZ2V0KToKKyAgICAgICAgKERhc2hib2Fy
ZFVwZGF0ZUhhbmRsZXIucG9zdCk6CisgICAgICAgIChfZ2V0X3Rlc3RfYnJhbmNoX3BsYXRmb3Jt
X2lkcyk6CisgICAgICAgIChSdW5zVXBkYXRlSGFuZGxlcik6CisgICAgICAgIChSdW5zVXBkYXRl
SGFuZGxlci5nZXQpOgorICAgICAgICAoQ2FjaGVkUnVuc0hhbmRsZXIuZ2V0KToKKyAgICAgICAg
KiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9kYXNoYm9hcmRfaGFuZGxlci5weTog
UmVtb3ZlZC4KKyAgICAgICAgKiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9qc29u
X2dlbmVyYXRvcnMucHk6IEFkZGVkLgorICAgICAgICAoSlNPTkdlbmVyYXRvckJhc2UpOgorICAg
ICAgICAoSlNPTkdlbmVyYXRvckJhc2UudG9fanNvbik6CisgICAgICAgIChEYXNoYm9hcmRKU09O
R2VuZXJhdG9yKToKKyAgICAgICAgKERhc2hib2FyZEpTT05HZW5lcmF0b3IuX19pbml0X18pOgor
ICAgICAgICAoRGFzaGJvYXJkSlNPTkdlbmVyYXRvci52YWx1ZSk6CisgICAgICAgIChNYW5pZmVz
dEpTT05HZW5lcmF0b3IpOgorICAgICAgICAoTWFuaWZlc3RKU09OR2VuZXJhdG9yLl9faW5pdF9f
KToKKyAgICAgICAgKE1hbmlmZXN0SlNPTkdlbmVyYXRvci52YWx1ZSk6CisgICAgICAgIChSdW5z
SlNPTkdlbmVyYXRvcik6CisgICAgICAgIChSdW5zSlNPTkdlbmVyYXRvci5fX2luaXRfXyk6Cisg
ICAgICAgIChSdW5zSlNPTkdlbmVyYXRvci5fZ2VuZXJhdGVfcnVucyk6CisgICAgICAgIChSdW5z
SlNPTkdlbmVyYXRvci5fZW50cnlfZnJvbV9idWlsZF9hbmRfcmVzdWx0KToKKyAgICAgICAgKFJ1
bnNKU09OR2VuZXJhdG9yLnZhbHVlKToKKyAgICAgICAgKiBXZWJzaXRlcy93ZWJraXQtcGVyZi5h
cHBzcG90LmNvbS9qc29uX2dlbmVyYXRvcnNfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAo
X2NyZWF0ZV9yZXN1bHRzKToKKyAgICAgICAgKEpTT05HZW5lcmF0b3JCYXNlVGVzdCk6CisgICAg
ICAgIChKU09OR2VuZXJhdG9yQmFzZVRlc3QudGVzdF90b19qc29uKToKKyAgICAgICAgKEpTT05H
ZW5lcmF0b3JCYXNlVGVzdC50ZXN0X3RvX2pzb24uQUpTT05HZW5lcmF0b3IpOgorICAgICAgICAo
SlNPTkdlbmVyYXRvckJhc2VUZXN0LnRlc3RfdG9fanNvbi5BSlNPTkdlbmVyYXRvci52YWx1ZSk6
CisgICAgICAgIChEYXNoYm9hcmRKU09OR2VuZXJhdG9yVGVzdCk6CisgICAgICAgIChEYXNoYm9h
cmRKU09OR2VuZXJhdG9yVGVzdC50ZXN0X3ZhbHVlX25vX2JyYW5jaCk6CisgICAgICAgIChEYXNo
Ym9hcmRKU09OR2VuZXJhdG9yVGVzdC50ZXN0X3ZhbHVlX25vX3BsYWZvcm1zKToKKyAgICAgICAg
KERhc2hib2FyZEpTT05HZW5lcmF0b3JUZXN0LnRlc3RfdmFsdWVfc2luZ2xlX3BsYXRmb3JtKToK
KyAgICAgICAgKERhc2hib2FyZEpTT05HZW5lcmF0b3JUZXN0LnRlc3RfdmFsdWVfdHdvX3BsYXRm
b3Jtcyk6CisgICAgICAgIChNYW5pZmVzdEpTT05HZW5lcmF0b3JUZXN0KToKKyAgICAgICAgKE1h
bmlmZXN0SlNPTkdlbmVyYXRvclRlc3QudGVzdF92YWx1ZV9ub19icmFuY2gpOgorICAgICAgICAo
TWFuaWZlc3RKU09OR2VuZXJhdG9yVGVzdC50ZXN0X3ZhbHVlX25vX3BsYWZvcm1zKToKKyAgICAg
ICAgKE1hbmlmZXN0SlNPTkdlbmVyYXRvclRlc3QuX2Fzc2VydF9zaW5nbGVfdGVzdCk6CisgICAg
ICAgIChNYW5pZmVzdEpTT05HZW5lcmF0b3JUZXN0LnRlc3RfdmFsdWVfc2luZ2xlX3BsYXRmb3Jt
KToKKyAgICAgICAgKE1hbmlmZXN0SlNPTkdlbmVyYXRvclRlc3QudGVzdF92YWx1ZV90d29fcGxh
dGZvcm1zKToKKyAgICAgICAgKE1hbmlmZXN0SlNPTkdlbmVyYXRvclRlc3QudGVzdF92YWx1ZV90
d29fdGVzdHMpOgorICAgICAgICAoUnVuc0pTT05HZW5lcmF0b3JUZXN0KToKKyAgICAgICAgKFJ1
bnNKU09OR2VuZXJhdG9yVGVzdC5fY3JlYXRlX3Jlc3VsdHMpOgorICAgICAgICAoUnVuc0pTT05H
ZW5lcmF0b3JUZXN0LnRlc3RfZ2VuZXJhdGVfcnVucyk6CisgICAgICAgIChSdW5zSlNPTkdlbmVy
YXRvclRlc3QudGVzdF92YWx1ZV93aXRob3V0X3Jlc3VsdHMpOgorICAgICAgICAoUnVuc0pTT05H
ZW5lcmF0b3JUZXN0LnRlc3RfdmFsdWVfd2l0aF9yZXN1bHRzKToKKyAgICAgICAgKFJ1bnNKU09O
R2VuZXJhdG9yVGVzdC5fYXNzZXJ0X2VudHJ5KToKKyAgICAgICAgKFJ1bnNKU09OR2VuZXJhdG9y
VGVzdC50ZXN0X3J1bl9mcm9tX2J1aWxkX2FuZF9yZXN1bHQpOgorICAgICAgICAoUnVuc0pTT05H
ZW5lcmF0b3JUZXN0LnRlc3RfcnVuX2Zyb21fYnVpbGRfYW5kX3Jlc3VsdC5jcmVhdGVfYnVpbGQp
OgorICAgICAgICAqIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL21haW4ucHk6Cisg
ICAgICAgICogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vbWFuaWZlc3RfaGFuZGxl
ci5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNv
bS9tb2RlbHMucHk6CisgICAgICAgIChUZXN0LnVwZGF0ZV9vcl9pbnNlcnQuZXhlY3V0ZSk6Cisg
ICAgICAgIChUZXN0KToKKyAgICAgICAgKFRlc3RSZXN1bHQuZ2V0X29yX2luc2VydF9mcm9tX3Bh
cnNlZF9qc29uKToKKyAgICAgICAgKiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9t
b2RlbHNfdW5pdHRlc3QucHk6CisgICAgICAgIChUZXN0TW9kZWxUZXN0cy50ZXN0X3VwZGF0ZV9v
cl9pbnNlcnRfdG9fdXBkYXRlKToKKyAgICAgICAgKFRlc3RSZXN1bHRUZXN0cy50ZXN0X2dldF9v
cl9pbnNlcnRfc3RhdF92YWx1ZSk6CisgICAgICAgICogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBw
c3BvdC5jb20vcnVuc19oYW5kbGVyLnB5OiBSZW1vdmVkLgorCiAyMDEyLTAyLTIwICBNYXJ0aW4g
Um9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBUdXJuIG9u
IHJlcXVlc3RBbmltYXRpb25GcmFtZSBmb3IgcmVsZWFzZSBidWlsZHMKSW5kZXg6IFdlYnNpdGVz
L3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL2NvbnRyb2xsZXIucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
c2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vY29udHJvbGxlci5weQkocmV2aXNpb24gMTA4
MjcwKQorKysgV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vY29udHJvbGxlci5weQko
d29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOSBAQCBpbXBvcnQgd2ViYXBwMgogZnJvbSBnb29n
bGUuYXBwZW5naW5lLmFwaSBpbXBvcnQgdGFza3F1ZXVlCiBmcm9tIGdvb2dsZS5hcHBlbmdpbmUu
ZXh0IGltcG9ydCBkYgogCitmcm9tIGpzb25fZ2VuZXJhdG9ycyBpbXBvcnQgRGFzaGJvYXJkSlNP
TkdlbmVyYXRvcgorZnJvbSBqc29uX2dlbmVyYXRvcnMgaW1wb3J0IE1hbmlmZXN0SlNPTkdlbmVy
YXRvcgorZnJvbSBqc29uX2dlbmVyYXRvcnMgaW1wb3J0IFJ1bnNKU09OR2VuZXJhdG9yCiBmcm9t
IG1vZGVscyBpbXBvcnQgVGVzdAogZnJvbSBtb2RlbHMgaW1wb3J0IFBlcnNpc3RlbnRDYWNoZQog
CkBAIC00Myw2ICs0NiwxMyBAQCBkZWYgc2NoZWR1bGVfbWFuaWZlc3RfdXBkYXRlKCk6CiAgICAg
dGFza3F1ZXVlLmFkZCh1cmw9Jy9hcGkvdGVzdC91cGRhdGUnKQogCiAKK2NsYXNzIE1hbmlmZXN0
VXBkYXRlSGFuZGxlcih3ZWJhcHAyLlJlcXVlc3RIYW5kbGVyKToKKyAgICBkZWYgcG9zdChzZWxm
KToKKyAgICAgICAgc2VsZi5yZXNwb25zZS5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0
L3BsYWluOyBjaGFyc2V0PXV0Zi04JworICAgICAgICBjYWNoZV9kYXNoYm9hcmQoTWFuaWZlc3RK
U09OR2VuZXJhdG9yKCkudG9fanNvbigpKQorICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0
ZSgnT0snKQorCisKIGNsYXNzIENhY2hlZE1hbmlmZXN0SGFuZGxlcih3ZWJhcHAyLlJlcXVlc3RI
YW5kbGVyKToKICAgICBkZWYgZ2V0KHNlbGYpOgogICAgICAgICBzZWxmLnJlc3BvbnNlLmhlYWRl
cnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nCkBAIC02MSw2ICs3MSwxMyBA
QCBkZWYgc2NoZWR1bGVfZGFzaGJvYXJkX3VwZGF0ZSgpOgogICAgIHRhc2txdWV1ZS5hZGQodXJs
PScvYXBpL3Rlc3QvZGFzaGJvYXJkL3VwZGF0ZScpCiAKIAorY2xhc3MgRGFzaGJvYXJkVXBkYXRl
SGFuZGxlcih3ZWJhcHAyLlJlcXVlc3RIYW5kbGVyKToKKyAgICBkZWYgcG9zdChzZWxmKToKKyAg
ICAgICAgc2VsZi5yZXNwb25zZS5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWlu
OyBjaGFyc2V0PXV0Zi04JworICAgICAgICBjYWNoZV9kYXNoYm9hcmQoRGFzaGJvYXJkSlNPTkdl
bmVyYXRvcigpLnRvX2pzb24oKSkKKyAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoJ09L
JykKKworCiBjbGFzcyBDYWNoZWREYXNoYm9hcmRIYW5kbGVyKHdlYmFwcDIuUmVxdWVzdEhhbmRs
ZXIpOgogICAgIGRlZiBnZXQoc2VsZik6CiAgICAgICAgIHNlbGYucmVzcG9uc2UuaGVhZGVyc1sn
Q29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24vanNvbicKQEAgLTc5LDIwICs5NiwzOCBAQCBk
ZWYgc2NoZWR1bGVfcnVuc191cGRhdGUodGVzdF9pZCwgYnJhbmNoCiAgICAgdGFza3F1ZXVlLmFk
ZCh1cmw9Jy9hcGkvdGVzdC9ydW5zL3VwZGF0ZScsIHBhcmFtcz17J2lkJzogdGVzdF9pZCwgJ2Jy
YW5jaGlkJzogYnJhbmNoX2lkLCAncGxhdGZvcm1pZCc6IHBsYXRmb3JtX2lkfSkKIAogCitkZWYg
X2dldF90ZXN0X2JyYW5jaF9wbGF0Zm9ybV9pZHMoaGFuZGxlcik6CisgICAgdHJ5OgorICAgICAg
ICB0ZXN0X2lkID0gaW50KHNlbGYucmVxdWVzdC5nZXQoJ2lkJywgMCkpCisgICAgICAgIGJyYW5j
aF9pZCA9IGludChzZWxmLnJlcXVlc3QuZ2V0KCdicmFuY2hpZCcsIDApKQorICAgICAgICBwbGF0
Zm9ybV9pZCA9IGludChzZWxmLnJlcXVlc3QuZ2V0KCdwbGF0Zm9ybWlkJywgMCkpCisgICAgICAg
IHJldHVybiB0ZXN0X2lkLCBicmFuY2hfaWQsIHBsYXRmb3JtX2lkCisgICAgZXhjZXB0IFR5cGVF
cnJvcjoKKyAgICAgICAgIyBGSVhNRTogT3V0cHV0IGFuIGVycm9yIGhlcmUKKyAgICAgICAgcmV0
dXJuIDAsIDAsIDAKKworCitjbGFzcyBSdW5zVXBkYXRlSGFuZGxlcih3ZWJhcHAyLlJlcXVlc3RI
YW5kbGVyKToKKyAgICBkZWYgZ2V0KHNlbGYpOgorICAgICAgICBzZWxmLnJlc3BvbnNlLmhlYWRl
cnNbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgnCisgICAgICAg
IHRlc3RfaWQsIGJyYW5jaF9pZCwgcGxhdGZvcm1faWQgPSBfZ2V0X3Rlc3RfYnJhbmNoX3BsYXRm
b3JtX2lkcyhzZWxmKQorCisgICAgICAgIGJyYW5jaCA9IG1vZGVsX2Zyb21fbnVtZXJpY19pZChi
cmFuY2hfaWQsIEJyYW5jaCkKKyAgICAgICAgcGxhdGZvcm0gPSBtb2RlbF9mcm9tX251bWVyaWNf
aWQocGxhdGZvcm1faWQsIFBsYXRmb3JtKQorICAgICAgICB0ZXN0ID0gbW9kZWxfZnJvbV9udW1l
cmljX2lkKHRlc3RfaWQsIFRlc3QpCisgICAgICAgIGFzc2VydCBicmFuY2gKKyAgICAgICAgYXNz
ZXJ0IHBsYXRmb3JtCisgICAgICAgIGFzc2VydCB0ZXN0CisKKyAgICAgICAgY2FjaGVfcnVucyh0
ZXN0X2lkLCBicmFuY2hfaWQsIHBsYXRmb3JtX2lkLCBSdW5zSlNPTkdlbmVyYXRvcigpLnRvX2pz
b24oKSkKKyAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoJ09LJykKKworCiBjbGFzcyBD
YWNoZWRSdW5zSGFuZGxlcih3ZWJhcHAyLlJlcXVlc3RIYW5kbGVyKToKICAgICBkZWYgZ2V0KHNl
bGYpOgogICAgICAgICBzZWxmLnJlc3BvbnNlLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2Fw
cGxpY2F0aW9uL2pzb24nCiAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdGVzdF9pZCA9IGlu
dChzZWxmLnJlcXVlc3QuZ2V0KCdpZCcsIDApKQotICAgICAgICAgICAgYnJhbmNoX2lkID0gaW50
KHNlbGYucmVxdWVzdC5nZXQoJ2JyYW5jaGlkJywgMCkpCi0gICAgICAgICAgICBwbGF0Zm9ybV9p
ZCA9IGludChzZWxmLnJlcXVlc3QuZ2V0KCdwbGF0Zm9ybWlkJywgMCkpCi0gICAgICAgIGV4Y2Vw
dCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICAjIEZJWE1FOiBPdXRwdXQgYW4gZXJyb3IgaGVyZQot
ICAgICAgICAgICAgdGVzdF9pZCA9IDAKLSAgICAgICAgICAgIGJyYW5jaF9pZCA9IDAKLSAgICAg
ICAgICAgIHBsYXRmb3JtX2lkID0gMAotCisgICAgICAgIHRlc3RfaWQsIGJyYW5jaF9pZCwgcGxh
dGZvcm1faWQgPSBfZ2V0X3Rlc3RfYnJhbmNoX3BsYXRmb3JtX2lkcyhzZWxmKQogICAgICAgICBy
dW5zID0gUGVyc2lzdGVudENhY2hlLmdldF9jYWNoZShUZXN0LmNhY2hlX2tleSh0ZXN0X2lkLCBi
cmFuY2hfaWQsIHBsYXRmb3JtX2lkKSkKICAgICAgICAgaWYgcnVuczoKICAgICAgICAgICAgIHNl
bGYucmVzcG9uc2Uub3V0LndyaXRlKHJ1bnMpCkluZGV4OiBXZWJzaXRlcy93ZWJraXQtcGVyZi5h
cHBzcG90LmNvbS9kYXNoYm9hcmRfaGFuZGxlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy93
ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9kYXNoYm9hcmRfaGFuZGxlci5weQkocmV2aXNpb24gMTA4
MjcwKQorKysgV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vZGFzaGJvYXJkX2hhbmRs
ZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNjMgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCi0jIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0
aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IHdlYmFwcDIKLWltcG9ydCBqc29uCi0KLWZy
b20gY29udHJvbGxlciBpbXBvcnQgY2FjaGVfZGFzaGJvYXJkCi1mcm9tIG1vZGVscyBpbXBvcnQg
QnVpbGRlcgotZnJvbSBtb2RlbHMgaW1wb3J0IEJyYW5jaAotZnJvbSBtb2RlbHMgaW1wb3J0IFBs
YXRmb3JtCi1mcm9tIG1vZGVscyBpbXBvcnQgVGVzdAotCi0KLWNsYXNzIERhc2hib2FyZEhhbmRs
ZXIod2ViYXBwMi5SZXF1ZXN0SGFuZGxlcik6Ci0gICAgZGVmIHBvc3Qoc2VsZik6Ci0gICAgICAg
IHNlbGYucmVzcG9uc2UuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbjsgY2hh
cnNldD11dGYtOCcKLSAgICAgICAgd2Via2l0X3RydW5rID0gQnJhbmNoLmdldF9ieV9rZXlfbmFt
ZSgnd2Via2l0LXRydW5rJykKLSAgICAgICAgaWYgbm90IHdlYmtpdF90cnVuazoKLSAgICAgICAg
ICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCJCQUQ6IG5vIHdlYmtpdC10cnVuayIpCi0gICAg
ICAgICAgICByZXR1cm4KLQotICAgICAgICAjIEZJWE1FOiBEZXRlcm1pbmUgcG9wdWxhciBicmFu
Y2hlcywgcGxhdGZvcm1zLCBhbmQgdGVzdHMKLSAgICAgICAgZGFzaGJvYXJkID0gewotICAgICAg
ICAgICAgJ2RlZmF1bHRCcmFuY2gnOiAnV2ViS2l0IHRydW5rJywKLSAgICAgICAgICAgICdicmFu
Y2hUb0lkJzoge3dlYmtpdF90cnVuay5uYW1lOiB3ZWJraXRfdHJ1bmsuaWR9LAotICAgICAgICAg
ICAgJ3BsYXRmb3JtVG9JZCc6IHt9LAotICAgICAgICAgICAgJ3Rlc3RUb0lkJzoge30sCi0gICAg
ICAgIH0KLQotICAgICAgICBmb3IgcGxhdGZvcm0gaW4gUGxhdGZvcm0uYWxsKCk6Ci0gICAgICAg
ICAgICBkYXNoYm9hcmRbJ3BsYXRmb3JtVG9JZCddW3BsYXRmb3JtLm5hbWVdID0gcGxhdGZvcm0u
aWQKLQotICAgICAgICBmb3IgdGVzdCBpbiBUZXN0LmFsbCgpOgotICAgICAgICAgICAgZGFzaGJv
YXJkWyd0ZXN0VG9JZCddW3Rlc3QubmFtZV0gPSB0ZXN0LmlkCi0KLSAgICAgICAgY2FjaGVfZGFz
aGJvYXJkKGpzb24uZHVtcHMoZGFzaGJvYXJkKSkKLSAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQu
d3JpdGUoJ09LJykKSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL2pzb25f
Z2VuZXJhdG9ycy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90
LmNvbS9qc29uX2dlbmVyYXRvcnMucHkJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy93ZWJraXQt
cGVyZi5hcHBzcG90LmNvbS9qc29uX2dlbmVyYXRvcnMucHkJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTc2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQganNvbgorZnJvbSB0aW1lIGltcG9ydCBta3RpbWUKKworZnJvbSBtb2RlbHMgaW1wb3J0IEJ1
aWxkCitmcm9tIG1vZGVscyBpbXBvcnQgQnVpbGRlcgorZnJvbSBtb2RlbHMgaW1wb3J0IEJyYW5j
aAorZnJvbSBtb2RlbHMgaW1wb3J0IFBsYXRmb3JtCitmcm9tIG1vZGVscyBpbXBvcnQgVGVzdAor
ZnJvbSBtb2RlbHMgaW1wb3J0IFRlc3RSZXN1bHQKKworCitjbGFzcyBKU09OR2VuZXJhdG9yQmFz
ZShvYmplY3QpOgorICAgIGRlZiB0b19qc29uKHNlbGYpOgorICAgICAgICByZXR1cm4ganNvbi5k
dW1wcyhzZWxmLnZhbHVlKCkpCisKKworY2xhc3MgRGFzaGJvYXJkSlNPTkdlbmVyYXRvcihKU09O
R2VuZXJhdG9yQmFzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAjIEZJWE1F
OiBEb24ndCBoYXJkLWNvZGUgd2Via2l0LXRydW5rIGhlcmU7IGlkZWFsbHkgd2Ugd2FudCB0aGlz
IGJlIGN1c3RvbWl6YWJsZS4KKyAgICAgICAgd2Via2l0X3RydW5rID0gQnJhbmNoLmdldF9ieV9r
ZXlfbmFtZSgnd2Via2l0LXRydW5rJykKKyAgICAgICAgaWYgbm90IHdlYmtpdF90cnVuazoKKyAg
ICAgICAgICAgIHNlbGYuX2Rhc2hib2FyZCA9IE5vbmUKKyAgICAgICAgICAgIHJldHVybgorCisg
ICAgICAgICMgRklYTUU6IERldGVybWluZSBwb3B1bGFyIGJyYW5jaGVzLCBwbGF0Zm9ybXMsIGFu
ZCB0ZXN0cworICAgICAgICBzZWxmLl9kYXNoYm9hcmQgPSB7CisgICAgICAgICAgICAnZGVmYXVs
dEJyYW5jaCc6ICdXZWJLaXQgdHJ1bmsnLAorICAgICAgICAgICAgJ2JyYW5jaFRvSWQnOiB7d2Vi
a2l0X3RydW5rLm5hbWU6IHdlYmtpdF90cnVuay5pZH0sCisgICAgICAgICAgICAncGxhdGZvcm1U
b0lkJzoge30sCisgICAgICAgICAgICAndGVzdFRvSWQnOiB7fSwKKyAgICAgICAgfQorCisgICAg
ICAgIGZvciBwbGF0Zm9ybSBpbiBQbGF0Zm9ybS5hbGwoKToKKyAgICAgICAgICAgIHNlbGYuX2Rh
c2hib2FyZFsncGxhdGZvcm1Ub0lkJ11bcGxhdGZvcm0ubmFtZV0gPSBwbGF0Zm9ybS5pZAorCisg
ICAgICAgIGZvciB0ZXN0IGluIFRlc3QuYWxsKCk6CisgICAgICAgICAgICBzZWxmLl9kYXNoYm9h
cmRbJ3Rlc3RUb0lkJ11bdGVzdC5uYW1lXSA9IHRlc3QuaWQKKworICAgIGRlZiB2YWx1ZShzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Rhc2hib2FyZAorCisKK2NsYXNzIE1hbmlmZXN0SlNP
TkdlbmVyYXRvcihKU09OR2VuZXJhdG9yQmFzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgor
ICAgICAgICAjIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIG1hc3NpdmUuIEJyZWFrIGl0IHVwCisg
ICAgICAgIHNlbGYuX3Rlc3RfbWFwID0ge30KKyAgICAgICAgcGxhdGZvcm1faWRfbWFwID0ge30K
KyAgICAgICAgYnJhbmNoX2lkX21hcCA9IHt9CisgICAgICAgIGZvciB0ZXN0IGluIFRlc3QuYWxs
KCk6CisgICAgICAgICAgICBicmFuY2hfaWRzID0gW0JyYW5jaC5nZXQoYnJhbmNoX2tleSkuaWQg
Zm9yIGJyYW5jaF9rZXkgaW4gdGVzdC5icmFuY2hlc10KKyAgICAgICAgICAgIHBsYXRmb3JtX2lk
cyA9IFtQbGF0Zm9ybS5nZXQocGxhdGZvcm1fa2V5KS5pZCBmb3IgcGxhdGZvcm1fa2V5IGluIHRl
c3QucGxhdGZvcm1zXQorICAgICAgICAgICAgc2VsZi5fdGVzdF9tYXBbdGVzdC5pZF0gPSB7Cisg
ICAgICAgICAgICAgICAgJ25hbWUnOiB0ZXN0Lm5hbWUsCisgICAgICAgICAgICAgICAgJ2JyYW5j
aElkcyc6IGJyYW5jaF9pZHMsCisgICAgICAgICAgICAgICAgJ3BsYXRmb3JtSWRzJzogcGxhdGZv
cm1faWRzLAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgcGxhdGZvcm1faWQgaW4g
cGxhdGZvcm1faWRzOgorICAgICAgICAgICAgICAgIHBsYXRmb3JtX2lkX21hcC5zZXRkZWZhdWx0
KHBsYXRmb3JtX2lkLCB7J3Rlc3RzJzogW10sICdicmFuY2hlcyc6IFtdfSkKKyAgICAgICAgICAg
ICAgICBwbGF0Zm9ybV9pZF9tYXBbcGxhdGZvcm1faWRdWyd0ZXN0cyddLmFwcGVuZCh0ZXN0Lmlk
KQorICAgICAgICAgICAgICAgIHBsYXRmb3JtX2lkX21hcFtwbGF0Zm9ybV9pZF1bJ2JyYW5jaGVz
J10gKz0gYnJhbmNoX2lkcworCisgICAgICAgICAgICBmb3IgYnJhbmNoX2lkIGluIGJyYW5jaF9p
ZHM6CisgICAgICAgICAgICAgICAgYnJhbmNoX2lkX21hcC5zZXRkZWZhdWx0KGJyYW5jaF9pZCwg
eyd0ZXN0cyc6IFtdLCAncGxhdGZvcm1zJzogW119KQorICAgICAgICAgICAgICAgIGJyYW5jaF9p
ZF9tYXBbYnJhbmNoX2lkXVsndGVzdHMnXS5hcHBlbmQodGVzdC5pZCkKKyAgICAgICAgICAgICAg
ICBicmFuY2hfaWRfbWFwW2JyYW5jaF9pZF1bJ3BsYXRmb3JtcyddICs9IHBsYXRmb3JtX2lkcwor
CisgICAgICAgIHNlbGYuX3BsYXRmb3JtX21hcCA9IHt9CisgICAgICAgIGZvciBwbGF0Zm9ybSBp
biBQbGF0Zm9ybS5hbGwoKToKKyAgICAgICAgICAgIGlmIHBsYXRmb3JtLmlkIG5vdCBpbiBwbGF0
Zm9ybV9pZF9tYXA6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlbGYu
X3BsYXRmb3JtX21hcFtwbGF0Zm9ybS5pZF0gPSB7CisgICAgICAgICAgICAgICAgJ25hbWUnOiBw
bGF0Zm9ybS5uYW1lLAorICAgICAgICAgICAgICAgICd0ZXN0SWRzJzogbGlzdChzZXQocGxhdGZv
cm1faWRfbWFwW3BsYXRmb3JtLmlkXVsndGVzdHMnXSkpLAorICAgICAgICAgICAgICAgICdicmFu
Y2hJZHMnOiBsaXN0KHNldChwbGF0Zm9ybV9pZF9tYXBbcGxhdGZvcm0uaWRdWydicmFuY2hlcydd
KSksCisgICAgICAgICAgICB9CisKKyAgICAgICAgc2VsZi5fYnJhbmNoX21hcCA9IHt9CisgICAg
ICAgIGZvciBicmFuY2ggaW4gQnJhbmNoLmFsbCgpOgorICAgICAgICAgICAgaWYgYnJhbmNoLmlk
IG5vdCBpbiBicmFuY2hfaWRfbWFwOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg
ICAgICBzZWxmLl9icmFuY2hfbWFwW2JyYW5jaC5pZF0gPSB7CisgICAgICAgICAgICAgICAgJ25h
bWUnOiBicmFuY2gubmFtZSwKKyAgICAgICAgICAgICAgICAndGVzdElkcyc6IGxpc3Qoc2V0KGJy
YW5jaF9pZF9tYXBbYnJhbmNoLmlkXVsndGVzdHMnXSkpLAorICAgICAgICAgICAgICAgICdwbGF0
Zm9ybUlkcyc6IGxpc3Qoc2V0KGJyYW5jaF9pZF9tYXBbYnJhbmNoLmlkXVsncGxhdGZvcm1zJ10p
KSwKKyAgICAgICAgICAgIH0KKworICAgIGRlZiB2YWx1ZShzZWxmKToKKyAgICAgICAgcmV0dXJu
IHsnYnJhbmNoTWFwJzogc2VsZi5fYnJhbmNoX21hcCwgJ3BsYXRmb3JtTWFwJzogc2VsZi5fcGxh
dGZvcm1fbWFwLCAndGVzdE1hcCc6IHNlbGYuX3Rlc3RfbWFwfQorCisKK2NsYXNzIFJ1bnNKU09O
R2VuZXJhdG9yKEpTT05HZW5lcmF0b3JCYXNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJh
bmNoLCBwbGF0Zm9ybSwgdGVzdCk6CisgICAgICAgIHNlbGYuX3Rlc3RfcnVucyA9IFtdCisgICAg
ICAgIHNlbGYuX2F2ZXJhZ2VzID0ge30KKyAgICAgICAgdmFsdWVzID0gW10KKworICAgICAgICBm
b3IgYnVpbGQsIHJlc3VsdCBpbiBSdW5zSlNPTkdlbmVyYXRvci5fZ2VuZXJhdGVfcnVucyhicmFu
Y2gsIHBsYXRmb3JtLCB0ZXN0KToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfcnVucy5hcHBlbmQo
UnVuc0pTT05HZW5lcmF0b3IuX2VudHJ5X2Zyb21fYnVpbGRfYW5kX3Jlc3VsdChidWlsZCwgcmVz
dWx0KSkKKyAgICAgICAgICAgICMgRklYTUU6IENhbGN1bGF0ZSB0aGUgYXZlcmFnZS4gSW4gcHJh
Y3RpY2UsIHdlIHdvdWxkbid0IGhhdmUgbW9yZSB0aGFuIG9uZSB2YWx1ZSBmb3IgYSBnaXZlbiBy
ZXZpc2lvbi4KKyAgICAgICAgICAgIHNlbGYuX2F2ZXJhZ2VzW2J1aWxkLnJldmlzaW9uXSA9IHJl
c3VsdC52YWx1ZQorICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChyZXN1bHQudmFsdWUpCisKKyAg
ICAgICAgc2VsZi5fbWluID0gbWluKHZhbHVlcykgaWYgdmFsdWVzIGVsc2UgTm9uZQorICAgICAg
ICBzZWxmLl9tYXggPSBtYXgodmFsdWVzKSBpZiB2YWx1ZXMgZWxzZSBOb25lCisKKyAgICBAc3Rh
dGljbWV0aG9kCisgICAgZGVmIF9nZW5lcmF0ZV9ydW5zKGJyYW5jaCwgcGxhdGZvcm0sIHRlc3Rf
bmFtZSk6CisgICAgICAgIGJ1aWxkcyA9IEJ1aWxkLmFsbCgpCisgICAgICAgIGJ1aWxkcy5maWx0
ZXIoJ2JyYW5jaCA9JywgYnJhbmNoKQorICAgICAgICBidWlsZHMuZmlsdGVyKCdwbGF0Zm9ybSA9
JywgcGxhdGZvcm0pCisKKyAgICAgICAgZm9yIGJ1aWxkIGluIGJ1aWxkczoKKyAgICAgICAgICAg
IHJlc3VsdHMgPSBUZXN0UmVzdWx0LmFsbCgpCisgICAgICAgICAgICByZXN1bHRzLmZpbHRlcign
bmFtZSA9JywgdGVzdF9uYW1lKQorICAgICAgICAgICAgcmVzdWx0cy5maWx0ZXIoJ2J1aWxkID0n
LCBidWlsZCkKKyAgICAgICAgICAgIGZvciByZXN1bHQgaW4gcmVzdWx0czoKKyAgICAgICAgICAg
ICAgICB5aWVsZCBidWlsZCwgcmVzdWx0CisgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKwor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2VudHJ5X2Zyb21fYnVpbGRfYW5kX3Jlc3VsdChi
dWlsZCwgcmVzdWx0KToKKyAgICAgICAgYnVpbGRlcl9pZCA9IGJ1aWxkLmJ1aWxkZXIua2V5KCku
aWQoKQorICAgICAgICB0aW1lc3RhbXAgPSBta3RpbWUoYnVpbGQudGltZXN0YW1wLnRpbWV0dXBs
ZSgpKQorICAgICAgICBzdGF0aXN0aWNzID0gTm9uZQorICAgICAgICBzdXBwbGVtZW50YXJ5X3Jl
dmlzaW9ucyA9IE5vbmUKKworICAgICAgICBpZiByZXN1bHQudmFsdWVTdGRldiAhPSBOb25lIGFu
ZCByZXN1bHQudmFsdWVNaW4gIT0gTm9uZSBhbmQgcmVzdWx0LnZhbHVlTWF4ICE9IE5vbmU6Cisg
ICAgICAgICAgICBzdGF0aXN0aWNzID0geydzdGRldic6IHJlc3VsdC52YWx1ZVN0ZGV2LCAnbWlu
JzogcmVzdWx0LnZhbHVlTWluLCAnbWF4JzogcmVzdWx0LnZhbHVlTWF4fQorCisgICAgICAgIGlm
IGJ1aWxkLmNocm9taXVtUmV2aXNpb24gIT0gTm9uZToKKyAgICAgICAgICAgIHN1cHBsZW1lbnRh
cnlfcmV2aXNpb25zID0geydDaHJvbWl1bSc6IGJ1aWxkLmNocm9taXVtUmV2aXNpb259CisKKyAg
ICAgICAgcmV0dXJuIFtyZXN1bHQua2V5KCkuaWQoKSwKKyAgICAgICAgICAgIFtidWlsZC5rZXko
KS5pZCgpLCBidWlsZC5idWlsZE51bWJlciwgYnVpbGQucmV2aXNpb24sIHN1cHBsZW1lbnRhcnlf
cmV2aXNpb25zXSwKKyAgICAgICAgICAgIHRpbWVzdGFtcCwgcmVzdWx0LnZhbHVlLCAwLCAgIyBy
dW5OdW1iZXIKKyAgICAgICAgICAgIFtdLCAgIyBhbm5vdGF0aW9ucworICAgICAgICAgICAgYnVp
bGRlcl9pZCwgc3RhdGlzdGljc10KKworICAgIGRlZiB2YWx1ZShzZWxmKToKKyAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICd0ZXN0X3J1bnMnOiBzZWxmLl90ZXN0X3J1bnMsCisgICAgICAg
ICAgICAnYXZlcmFnZXMnOiBzZWxmLl9hdmVyYWdlcywKKyAgICAgICAgICAgICdtaW4nOiBzZWxm
Ll9taW4sCisgICAgICAgICAgICAnbWF4Jzogc2VsZi5fbWF4LAorICAgICAgICAgICAgJ2RhdGVf
cmFuZ2UnOiBOb25lLCAgIyBOZXZlciB1c2VkIGJ5IGNvbW1vbi5qcy4KKyAgICAgICAgICAgICdz
dGF0JzogJ29rJ30KSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL2pzb25f
Z2VuZXJhdG9yc191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy93ZWJraXQtcGVy
Zi5hcHBzcG90LmNvbS9qc29uX2dlbmVyYXRvcnNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDApCisr
KyBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9qc29uX2dlbmVyYXRvcnNfdW5pdHRl
c3QucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzExIEBACisjIS91c3IvYmluL2VudiBweXRo
b24KKyMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRp
b24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQganNvbgoraW1wb3J0IG1vZGVscworaW1wb3J0
IHVuaXR0ZXN0CisKK2Zyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQgaW1wb3J0IHRlc3RiZWQKK2Zy
b20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCitmcm9tIGpzb25fZ2VuZXJhdG9ycyBpbXBvcnQg
SlNPTkdlbmVyYXRvckJhc2UKK2Zyb20ganNvbl9nZW5lcmF0b3JzIGltcG9ydCBEYXNoYm9hcmRK
U09OR2VuZXJhdG9yCitmcm9tIGpzb25fZ2VuZXJhdG9ycyBpbXBvcnQgTWFuaWZlc3RKU09OR2Vu
ZXJhdG9yCitmcm9tIGpzb25fZ2VuZXJhdG9ycyBpbXBvcnQgUnVuc0pTT05HZW5lcmF0b3IKK2Zy
b20gbW9kZWxzX3VuaXR0ZXN0IGltcG9ydCBEYXRhU3RvcmVUZXN0c0Jhc2UKK2Zyb20gbW9kZWxz
IGltcG9ydCBCcmFuY2gKK2Zyb20gbW9kZWxzIGltcG9ydCBCdWlsZAorZnJvbSBtb2RlbHMgaW1w
b3J0IEJ1aWxkZXIKK2Zyb20gbW9kZWxzIGltcG9ydCBQbGF0Zm9ybQorZnJvbSBtb2RlbHMgaW1w
b3J0IFRlc3QKK2Zyb20gbW9kZWxzIGltcG9ydCBUZXN0UmVzdWx0CisKKworZGVmIF9jcmVhdGVf
cmVzdWx0cyhicmFuY2gsIHBsYXRmb3JtLCBidWlsZGVyLCB0ZXN0X25hbWUsIHZhbHVlcyk6Cisg
ICAgcmVzdWx0cyA9IFtdCisgICAgZm9yIGksIHZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMpOgor
ICAgICAgICBidWlsZCA9IEJ1aWxkKGJyYW5jaD1icmFuY2gsIHBsYXRmb3JtPXBsYXRmb3JtLCBi
dWlsZGVyPWJ1aWxkZXIsCisgICAgICAgICAgICBidWlsZE51bWJlcj1pLCByZXZpc2lvbj0xMDAg
KyBpLCB0aW1lc3RhbXA9ZGF0ZXRpbWUubm93KCkpCisgICAgICAgIGJ1aWxkLnB1dCgpCisgICAg
ICAgIHJlc3VsdCA9IFRlc3RSZXN1bHQobmFtZT10ZXN0X25hbWUsIGJ1aWxkPWJ1aWxkLCB2YWx1
ZT12YWx1ZSkKKyAgICAgICAgcmVzdWx0LnB1dCgpCisgICAgICAgIFRlc3QudXBkYXRlX29yX2lu
c2VydCh0ZXN0X25hbWUsIGJyYW5jaCwgcGxhdGZvcm0pCisgICAgICAgIHJlc3VsdHMuYXBwZW5k
KHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0cworCisKK2NsYXNzIEpTT05HZW5lcmF0b3JCYXNl
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfdG9fanNvbihzZWxmKToKKwor
ICAgICAgICBjbGFzcyBBSlNPTkdlbmVyYXRvcihKU09OR2VuZXJhdG9yQmFzZSk6CisgICAgICAg
ICAgICBkZWYgdmFsdWUoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHsna2V5JzogJ3Zh
bHVlJ30KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEFKU09OR2VuZXJhdG9yKCkudmFsdWUo
KSwgeyJrZXkiOiAidmFsdWUifSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChBSlNPTkdlbmVy
YXRvcigpLnRvX2pzb24oKSwgJ3sia2V5IjogInZhbHVlIn0nKQorCisKK2NsYXNzIERhc2hib2Fy
ZEpTT05HZW5lcmF0b3JUZXN0KERhdGFTdG9yZVRlc3RzQmFzZSk6CisgICAgZGVmIHRlc3RfdmFs
dWVfbm9fYnJhbmNoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRoZXJlSXNOb0luc3RhbmNl
T2YoQnJhbmNoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERhc2hib2FyZEpTT05HZW5lcmF0
b3IoKS52YWx1ZSgpLCBOb25lKQorCisgICAgZGVmIHRlc3RfdmFsdWVfbm9fcGxhZm9ybXMoc2Vs
Zik6CisgICAgICAgIHdlYmtpdF90cnVuayA9IEJyYW5jaC5jcmVhdGVfaWZfcG9zc2libGUoJ3dl
YmtpdC10cnVuaycsICdXZWJLaXQgdHJ1bmsnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERh
c2hib2FyZEpTT05HZW5lcmF0b3IoKS52YWx1ZSgpLCB7CisgICAgICAgICAgICAnZGVmYXVsdEJy
YW5jaCc6ICdXZWJLaXQgdHJ1bmsnLAorICAgICAgICAgICAgJ2JyYW5jaFRvSWQnOiB7J1dlYktp
dCB0cnVuayc6IHdlYmtpdF90cnVuay5pZH0sCisgICAgICAgICAgICAncGxhdGZvcm1Ub0lkJzog
e30sCisgICAgICAgICAgICAndGVzdFRvSWQnOiB7fSwKKyAgICAgICAgfSkKKworICAgIGRlZiB0
ZXN0X3ZhbHVlX3NpbmdsZV9wbGF0Zm9ybShzZWxmKToKKyAgICAgICAgd2Via2l0X3RydW5rID0g
QnJhbmNoLmNyZWF0ZV9pZl9wb3NzaWJsZSgnd2Via2l0LXRydW5rJywgJ1dlYktpdCB0cnVuaycp
CisgICAgICAgIHNvbWVfcGxhdGZvcm0gPSBQbGF0Zm9ybS5jcmVhdGVfaWZfcG9zc2libGUoJ3Nv
bWUtcGxhdGZvcm0nLCAnU29tZSBQbGF0Zm9ybScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
RGFzaGJvYXJkSlNPTkdlbmVyYXRvcigpLnZhbHVlKCksIHsKKyAgICAgICAgICAgICdkZWZhdWx0
QnJhbmNoJzogJ1dlYktpdCB0cnVuaycsCisgICAgICAgICAgICAnYnJhbmNoVG9JZCc6IHsnV2Vi
S2l0IHRydW5rJzogd2Via2l0X3RydW5rLmlkfSwKKyAgICAgICAgICAgICdwbGF0Zm9ybVRvSWQn
OiB7J1NvbWUgUGxhdGZvcm0nOiBzb21lX3BsYXRmb3JtLmlkfSwKKyAgICAgICAgICAgICd0ZXN0
VG9JZCc6IHt9LAorICAgICAgICB9KQorCisgICAgICAgIFRlc3QudXBkYXRlX29yX2luc2VydCgn
c29tZS10ZXN0Jywgd2Via2l0X3RydW5rLCBzb21lX3BsYXRmb3JtKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKERhc2hib2FyZEpTT05HZW5lcmF0b3IoKS52YWx1ZSgpLCB7CisgICAgICAgICAg
ICAnZGVmYXVsdEJyYW5jaCc6ICdXZWJLaXQgdHJ1bmsnLAorICAgICAgICAgICAgJ2JyYW5jaFRv
SWQnOiB7J1dlYktpdCB0cnVuayc6IHdlYmtpdF90cnVuay5pZH0sCisgICAgICAgICAgICAncGxh
dGZvcm1Ub0lkJzogeydTb21lIFBsYXRmb3JtJzogc29tZV9wbGF0Zm9ybS5pZH0sCisgICAgICAg
ICAgICAndGVzdFRvSWQnOiB7J3NvbWUtdGVzdCc6IFRlc3QuZ2V0X2J5X2tleV9uYW1lKCdzb21l
LXRlc3QnKS5pZH0sCisgICAgICAgIH0pCisKKyAgICBkZWYgdGVzdF92YWx1ZV90d29fcGxhdGZv
cm1zKHNlbGYpOgorICAgICAgICB3ZWJraXRfdHJ1bmsgPSBCcmFuY2guY3JlYXRlX2lmX3Bvc3Np
YmxlKCd3ZWJraXQtdHJ1bmsnLCAnV2ViS2l0IHRydW5rJykKKyAgICAgICAgc29tZV9wbGF0Zm9y
bSA9IFBsYXRmb3JtLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1wbGF0Zm9ybScsICdTb21lIFBs
YXRmb3JtJykKKyAgICAgICAgb3RoZXJfcGxhdGZvcm0gPSBQbGF0Zm9ybS5jcmVhdGVfaWZfcG9z
c2libGUoJ290aGVyLXBsYXRmb3JtJywgJ090aGVyIFBsYXRmb3JtJykKKyAgICAgICAgVGVzdC51
cGRhdGVfb3JfaW5zZXJ0KCdzb21lLXRlc3QnLCB3ZWJraXRfdHJ1bmssIHNvbWVfcGxhdGZvcm0p
CisgICAgICAgIFRlc3QudXBkYXRlX29yX2luc2VydCgnc29tZS10ZXN0Jywgd2Via2l0X3RydW5r
LCBvdGhlcl9wbGF0Zm9ybSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEYXNoYm9hcmRKU09O
R2VuZXJhdG9yKCkudmFsdWUoKSwgeworICAgICAgICAgICAgJ2RlZmF1bHRCcmFuY2gnOiAnV2Vi
S2l0IHRydW5rJywKKyAgICAgICAgICAgICdicmFuY2hUb0lkJzogeydXZWJLaXQgdHJ1bmsnOiB3
ZWJraXRfdHJ1bmsuaWR9LAorICAgICAgICAgICAgJ3BsYXRmb3JtVG9JZCc6IHsnU29tZSBQbGF0
Zm9ybSc6IHNvbWVfcGxhdGZvcm0uaWQsICdPdGhlciBQbGF0Zm9ybSc6IG90aGVyX3BsYXRmb3Jt
LmlkfSwKKyAgICAgICAgICAgICd0ZXN0VG9JZCc6IHsnc29tZS10ZXN0JzogVGVzdC5nZXRfYnlf
a2V5X25hbWUoJ3NvbWUtdGVzdCcpLmlkfSwKKyAgICAgICAgfSkKKworCitjbGFzcyBNYW5pZmVz
dEpTT05HZW5lcmF0b3JUZXN0KERhdGFTdG9yZVRlc3RzQmFzZSk6CisgICAgZGVmIHRlc3RfdmFs
dWVfbm9fYnJhbmNoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRoZXJlSXNOb0luc3RhbmNl
T2YoQnJhbmNoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1hbmlmZXN0SlNPTkdlbmVyYXRv
cigpLnZhbHVlKCksIHsnYnJhbmNoTWFwJzoge30sICdwbGF0Zm9ybU1hcCc6IHt9LCAndGVzdE1h
cCc6IHt9fSkKKworICAgIGRlZiB0ZXN0X3ZhbHVlX25vX3BsYWZvcm1zKHNlbGYpOgorICAgICAg
ICBzb21lX2JyYW5jaCA9IEJyYW5jaC5jcmVhdGVfaWZfcG9zc2libGUoJ3NvbWUtYnJhbmNoJywg
J1NvbWUgQnJhbmNoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNYW5pZmVzdEpTT05HZW5l
cmF0b3IoKS52YWx1ZSgpLCB7J2JyYW5jaE1hcCc6IHt9LCAncGxhdGZvcm1NYXAnOiB7fSwgJ3Rl
c3RNYXAnOiB7fX0pCisKKyAgICBkZWYgX2Fzc2VydF9zaW5nbGVfdGVzdChzZWxmLCB2YWx1ZSwg
YnJhbmNoLCBwbGF0Zm9ybSwgdGVzdCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxVbm9yZGVy
ZWRMaXN0KHZhbHVlLmtleXMoKSwgWydicmFuY2hNYXAnLCAncGxhdGZvcm1NYXAnLCAndGVzdE1h
cCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlWydicmFuY2hNYXAnXSwKKyAgICAg
ICAgICAgIHticmFuY2guaWQ6IHsnbmFtZSc6IGJyYW5jaC5uYW1lLCAndGVzdElkcyc6IFt0ZXN0
LmlkXSwgJ3BsYXRmb3JtSWRzJzogW3BsYXRmb3JtLmlkXX19KQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHZhbHVlWydwbGF0Zm9ybU1hcCddLAorICAgICAgICAgICAge3BsYXRmb3JtLmlkOiB7
J25hbWUnOiBwbGF0Zm9ybS5uYW1lLCAnYnJhbmNoSWRzJzogW2JyYW5jaC5pZF0sICd0ZXN0SWRz
JzogW3Rlc3QuaWRdfX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVbJ3Rlc3RNYXAn
XSwKKyAgICAgICAgICAgIHt0ZXN0LmlkOiB7J25hbWUnOiB0ZXN0Lm5hbWUsICdicmFuY2hJZHMn
OiBbYnJhbmNoLmlkXSwgJ3BsYXRmb3JtSWRzJzogW3BsYXRmb3JtLmlkXX19KQorCisgICAgZGVm
IHRlc3RfdmFsdWVfc2luZ2xlX3BsYXRmb3JtKHNlbGYpOgorICAgICAgICBzb21lX2JyYW5jaCA9
IEJyYW5jaC5jcmVhdGVfaWZfcG9zc2libGUoJ3NvbWUtYnJhbmNoJywgJ1NvbWUgQnJhbmNoJykK
KyAgICAgICAgc29tZV9wbGF0Zm9ybSA9IFBsYXRmb3JtLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29t
ZS1wbGF0Zm9ybScsICdTb21lIFBsYXRmb3JtJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChN
YW5pZmVzdEpTT05HZW5lcmF0b3IoKS52YWx1ZSgpLCB7J2JyYW5jaE1hcCc6IHt9LCAncGxhdGZv
cm1NYXAnOiB7fSwgJ3Rlc3RNYXAnOiB7fX0pCisKKyAgICAgICAgc29tZV90ZXN0ID0gVGVzdC51
cGRhdGVfb3JfaW5zZXJ0KCdzb21lLXRlc3QnLCBzb21lX2JyYW5jaCwgc29tZV9wbGF0Zm9ybSkK
KyAgICAgICAgc2VsZi5fYXNzZXJ0X3NpbmdsZV90ZXN0KE1hbmlmZXN0SlNPTkdlbmVyYXRvcigp
LnZhbHVlKCksIHNvbWVfYnJhbmNoLCBzb21lX3BsYXRmb3JtLCBzb21lX3Rlc3QpCisKKyAgICBk
ZWYgdGVzdF92YWx1ZV90d29fcGxhdGZvcm1zKHNlbGYpOgorICAgICAgICBzb21lX2JyYW5jaCA9
IEJyYW5jaC5jcmVhdGVfaWZfcG9zc2libGUoJ3NvbWUtYnJhbmNoJywgJ1NvbWUgQnJhbmNoJykK
KyAgICAgICAgc29tZV9wbGF0Zm9ybSA9IFBsYXRmb3JtLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29t
ZS1wbGF0Zm9ybScsICdTb21lIFBsYXRmb3JtJykKKyAgICAgICAgb3RoZXJfcGxhdGZvcm0gPSBQ
bGF0Zm9ybS5jcmVhdGVfaWZfcG9zc2libGUoJ290aGVyLXBsYXRmb3JtJywgJ090aGVyIFBsYXRm
b3JtJykKKyAgICAgICAgc29tZV90ZXN0ID0gVGVzdC51cGRhdGVfb3JfaW5zZXJ0KCdzb21lLXRl
c3QnLCBzb21lX2JyYW5jaCwgc29tZV9wbGF0Zm9ybSkKKworICAgICAgICBzZWxmLl9hc3NlcnRf
c2luZ2xlX3Rlc3QoTWFuaWZlc3RKU09OR2VuZXJhdG9yKCkudmFsdWUoKSwgc29tZV9icmFuY2gs
IHNvbWVfcGxhdGZvcm0sIHNvbWVfdGVzdCkKKworICAgICAgICBzb21lX3Rlc3QgPSBUZXN0LnVw
ZGF0ZV9vcl9pbnNlcnQoJ3NvbWUtdGVzdCcsIHNvbWVfYnJhbmNoLCBvdGhlcl9wbGF0Zm9ybSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbFVub3JkZXJlZExpc3Qoc29tZV90ZXN0LnBsYXRmb3Jt
cywgW3NvbWVfcGxhdGZvcm0ua2V5KCksIG90aGVyX3BsYXRmb3JtLmtleSgpXSkKKworICAgICAg
ICB2YWx1ZSA9IE1hbmlmZXN0SlNPTkdlbmVyYXRvcigpLnZhbHVlKCkKKyAgICAgICAgZXhwZWN0
ZWRfcGxhdGZvcm1faWRzID0gW3NvbWVfcGxhdGZvcm0uaWQsIG90aGVyX3BsYXRmb3JtLmlkXQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsVW5vcmRlcmVkTGlzdCh2YWx1ZS5rZXlzKCksIFsnYnJh
bmNoTWFwJywgJ3BsYXRmb3JtTWFwJywgJ3Rlc3RNYXAnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbFVub3JkZXJlZExpc3QodmFsdWVbJ2JyYW5jaE1hcCddLAorICAgICAgICAgICAge3NvbWVf
YnJhbmNoLmlkOiB7J25hbWUnOiBzb21lX2JyYW5jaC5uYW1lLCAndGVzdElkcyc6IFtzb21lX3Rl
c3QuaWRdLCAncGxhdGZvcm1JZHMnOiBleHBlY3RlZF9wbGF0Zm9ybV9pZHN9fSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCh2YWx1ZVsncGxhdGZvcm1NYXAnXSwKKyAgICAgICAgICAgIHtzb21l
X3BsYXRmb3JtLmlkOiB7J25hbWUnOiBzb21lX3BsYXRmb3JtLm5hbWUsICdicmFuY2hJZHMnOiBb
c29tZV9icmFuY2guaWRdLCAndGVzdElkcyc6IFtzb21lX3Rlc3QuaWRdfSwKKyAgICAgICAgICAg
IG90aGVyX3BsYXRmb3JtLmlkOiB7J25hbWUnOiBvdGhlcl9wbGF0Zm9ybS5uYW1lLCAnYnJhbmNo
SWRzJzogW3NvbWVfYnJhbmNoLmlkXSwgJ3Rlc3RJZHMnOiBbc29tZV90ZXN0LmlkXX19KQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlWyd0ZXN0TWFwJ10sCisgICAgICAgICAgICB7c29t
ZV90ZXN0LmlkOiB7J25hbWUnOiBzb21lX3Rlc3QubmFtZSwgJ2JyYW5jaElkcyc6IFtzb21lX2Jy
YW5jaC5pZF0sICdwbGF0Zm9ybUlkcyc6IGV4cGVjdGVkX3BsYXRmb3JtX2lkc319KQorCisgICAg
ZGVmIHRlc3RfdmFsdWVfdHdvX3Rlc3RzKHNlbGYpOgorICAgICAgICBzb21lX2JyYW5jaCA9IEJy
YW5jaC5jcmVhdGVfaWZfcG9zc2libGUoJ3NvbWUtYnJhbmNoJywgJ1NvbWUgQnJhbmNoJykKKyAg
ICAgICAgc29tZV9wbGF0Zm9ybSA9IFBsYXRmb3JtLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1w
bGF0Zm9ybScsICdTb21lIFBsYXRmb3JtJykKKyAgICAgICAgc29tZV90ZXN0ID0gVGVzdC51cGRh
dGVfb3JfaW5zZXJ0KCdzb21lLXRlc3QnLCBzb21lX2JyYW5jaCwgc29tZV9wbGF0Zm9ybSkKKwor
ICAgICAgICBzZWxmLl9hc3NlcnRfc2luZ2xlX3Rlc3QoTWFuaWZlc3RKU09OR2VuZXJhdG9yKCku
dmFsdWUoKSwgc29tZV9icmFuY2gsIHNvbWVfcGxhdGZvcm0sIHNvbWVfdGVzdCkKKworICAgICAg
ICBvdGhlcl90ZXN0ID0gVGVzdC51cGRhdGVfb3JfaW5zZXJ0KCdvdGhlci10ZXN0Jywgc29tZV9i
cmFuY2gsIHNvbWVfcGxhdGZvcm0pCisKKyAgICAgICAgdmFsdWUgPSBNYW5pZmVzdEpTT05HZW5l
cmF0b3IoKS52YWx1ZSgpCisgICAgICAgIGV4cGVjdGVkX3Rlc3RfaWRzID0gW3NvbWVfdGVzdC5p
ZCwgb3RoZXJfdGVzdC5pZF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbFVub3JkZXJlZExpc3Qo
dmFsdWUua2V5cygpLCBbJ2JyYW5jaE1hcCcsICdwbGF0Zm9ybU1hcCcsICd0ZXN0TWFwJ10pCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxVbm9yZGVyZWRMaXN0KHZhbHVlWydicmFuY2hNYXAnXSwK
KyAgICAgICAgICAgIHtzb21lX2JyYW5jaC5pZDogeyduYW1lJzogc29tZV9icmFuY2gubmFtZSwg
J3Rlc3RJZHMnOiBleHBlY3RlZF90ZXN0X2lkcywgJ3BsYXRmb3JtSWRzJzogW3NvbWVfcGxhdGZv
cm0uaWRdfX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVbJ3BsYXRmb3JtTWFwJ10s
CisgICAgICAgICAgICB7c29tZV9wbGF0Zm9ybS5pZDogeyduYW1lJzogc29tZV9wbGF0Zm9ybS5u
YW1lLCAnYnJhbmNoSWRzJzogW3NvbWVfYnJhbmNoLmlkXSwgJ3Rlc3RJZHMnOiBleHBlY3RlZF90
ZXN0X2lkc319KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlWyd0ZXN0TWFwJ10sCisg
ICAgICAgICAgICB7c29tZV90ZXN0LmlkOiB7J25hbWUnOiBzb21lX3Rlc3QubmFtZSwgJ2JyYW5j
aElkcyc6IFtzb21lX2JyYW5jaC5pZF0sICdwbGF0Zm9ybUlkcyc6IFtzb21lX3BsYXRmb3JtLmlk
XX0sCisgICAgICAgICAgICBvdGhlcl90ZXN0LmlkOiB7J25hbWUnOiBvdGhlcl90ZXN0Lm5hbWUs
ICdicmFuY2hJZHMnOiBbc29tZV9icmFuY2guaWRdLCAncGxhdGZvcm1JZHMnOiBbc29tZV9wbGF0
Zm9ybS5pZF19fSkKKworCitjbGFzcyBSdW5zSlNPTkdlbmVyYXRvclRlc3QoRGF0YVN0b3JlVGVz
dHNCYXNlKToKKyAgICBkZWYgX2NyZWF0ZV9yZXN1bHRzKHNlbGYsIGJyYW5jaCwgcGxhdGZvcm0s
IGJ1aWxkZXIsIHRlc3RfbmFtZSwgdmFsdWVzKToKKyAgICAgICAgcmVzdWx0cyA9IFtdCisgICAg
ICAgIGZvciBpLCB2YWx1ZSBpbiBlbnVtZXJhdGUodmFsdWVzKToKKyAgICAgICAgICAgIGJ1aWxk
ID0gQnVpbGQoYnJhbmNoPWJyYW5jaCwgcGxhdGZvcm09cGxhdGZvcm0sIGJ1aWxkZXI9YnVpbGRl
ciwKKyAgICAgICAgICAgICAgICBidWlsZE51bWJlcj1pLCByZXZpc2lvbj0xMDAgKyBpLCB0aW1l
c3RhbXA9ZGF0ZXRpbWUubm93KCkpCisgICAgICAgICAgICBidWlsZC5wdXQoKQorICAgICAgICAg
ICAgcmVzdWx0ID0gVGVzdFJlc3VsdChuYW1lPXRlc3RfbmFtZSwgYnVpbGQ9YnVpbGQsIHZhbHVl
PXZhbHVlKQorICAgICAgICAgICAgcmVzdWx0LnB1dCgpCisgICAgICAgICAgICByZXN1bHRzLmFw
cGVuZChyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHRzCisKKyAgICBkZWYgdGVzdF9nZW5l
cmF0ZV9ydW5zKHNlbGYpOgorICAgICAgICBzb21lX2JyYW5jaCA9IEJyYW5jaC5jcmVhdGVfaWZf
cG9zc2libGUoJ3NvbWUtYnJhbmNoJywgJ1NvbWUgQnJhbmNoJykKKyAgICAgICAgc29tZV9wbGF0
Zm9ybSA9IFBsYXRmb3JtLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1wbGF0Zm9ybScsICdTb21l
IFBsYXRmb3JtJykKKyAgICAgICAgc29tZV9idWlsZGVyID0gQnVpbGRlci5nZXQoQnVpbGRlci5j
cmVhdGUoJ3NvbWUtYnVpbGRlcicsICdTb21lIEJ1aWxkZXInKSkKKworICAgICAgICByZXN1bHRz
ID0gc2VsZi5fY3JlYXRlX3Jlc3VsdHMoc29tZV9icmFuY2gsIHNvbWVfcGxhdGZvcm0sIHNvbWVf
YnVpbGRlciwgJ3NvbWUtdGVzdCcsIFs1MC4wLCA1MS4wLCA1Mi4wLCA0OS4wLCA0OC4wXSkKKyAg
ICAgICAgbGFzdF9pID0gMAorICAgICAgICBmb3IgaSwgKGJ1aWxkLCByZXN1bHQpIGluIGVudW1l
cmF0ZShSdW5zSlNPTkdlbmVyYXRvci5fZ2VuZXJhdGVfcnVucyhzb21lX2JyYW5jaCwgc29tZV9w
bGF0Zm9ybSwgInNvbWUtdGVzdCIpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVp
bGQuYnVpbGROdW1iZXIsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1aWxkLnJl
dmlzaW9uLCAxMDAgKyBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQubmFt
ZSwgJ3NvbWUtdGVzdCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC52YWx1
ZSwgcmVzdWx0c1tpXS52YWx1ZSkKKyAgICAgICAgICAgIGxhc3RfaSA9IGkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKGxhc3RfaSArIDEsIGxlbihyZXN1bHRzKSkKKworICAgIGRlZiB0ZXN0X3Zh
bHVlX3dpdGhvdXRfcmVzdWx0cyhzZWxmKToKKyAgICAgICAgc29tZV9icmFuY2ggPSBCcmFuY2gu
Y3JlYXRlX2lmX3Bvc3NpYmxlKCdzb21lLWJyYW5jaCcsICdTb21lIEJyYW5jaCcpCisgICAgICAg
IHNvbWVfcGxhdGZvcm0gPSBQbGF0Zm9ybS5jcmVhdGVfaWZfcG9zc2libGUoJ3NvbWUtcGxhdGZv
cm0nLCAnU29tZSBQbGF0Zm9ybScpCisgICAgICAgIHNlbGYuYXNzZXJ0VGhlcmVJc05vSW5zdGFu
Y2VPZihUZXN0KQorICAgICAgICBzZWxmLmFzc2VydFRoZXJlSXNOb0luc3RhbmNlT2YoVGVzdFJl
c3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSdW5zSlNPTkdlbmVyYXRvcihzb21lX2Jy
YW5jaCwgc29tZV9wbGF0Zm9ybSwgJ3NvbWUtdGVzdCcpLnZhbHVlKCksIHsKKyAgICAgICAgICAg
ICd0ZXN0X3J1bnMnOiBbXSwKKyAgICAgICAgICAgICdhdmVyYWdlcyc6IHt9LAorICAgICAgICAg
ICAgJ21pbic6IE5vbmUsCisgICAgICAgICAgICAnbWF4JzogTm9uZSwKKyAgICAgICAgICAgICdk
YXRlX3JhbmdlJzogTm9uZSwKKyAgICAgICAgICAgICdzdGF0JzogJ29rJ30pCisKKyAgICBkZWYg
dGVzdF92YWx1ZV93aXRoX3Jlc3VsdHMoc2VsZik6CisgICAgICAgIHNvbWVfYnJhbmNoID0gQnJh
bmNoLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1icmFuY2gnLCAnU29tZSBCcmFuY2gnKQorICAg
ICAgICBzb21lX3BsYXRmb3JtID0gUGxhdGZvcm0uY3JlYXRlX2lmX3Bvc3NpYmxlKCdzb21lLXBs
YXRmb3JtJywgJ1NvbWUgUGxhdGZvcm0nKQorICAgICAgICBzb21lX2J1aWxkZXIgPSBCdWlsZGVy
LmdldChCdWlsZGVyLmNyZWF0ZSgnc29tZS1idWlsZGVyJywgJ1NvbWUgQnVpbGRlcicpKQorICAg
ICAgICByZXN1bHRzID0gc2VsZi5fY3JlYXRlX3Jlc3VsdHMoc29tZV9icmFuY2gsIHNvbWVfcGxh
dGZvcm0sIHNvbWVfYnVpbGRlciwgJ3NvbWUtdGVzdCcsIFs1MC4wLCA1MS4wLCA1Mi4wLCA0OS4w
LCA0OC4wXSkKKworICAgICAgICB2YWx1ZSA9IFJ1bnNKU09OR2VuZXJhdG9yKHNvbWVfYnJhbmNo
LCBzb21lX3BsYXRmb3JtLCAnc29tZS10ZXN0JykudmFsdWUoKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsVW5vcmRlcmVkTGlzdCh2YWx1ZS5rZXlzKCksIFsndGVzdF9ydW5zJywgJ2F2ZXJhZ2Vz
JywgJ21pbicsICdtYXgnLCAnZGF0ZV9yYW5nZScsICdzdGF0J10pCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwodmFsdWVbJ3N0YXQnXSwgJ29rJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2
YWx1ZVsnbWluJ10sIDQ4LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVbJ21heCdd
LCA1Mi4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlWydkYXRlX3JhbmdlJ10sIE5v
bmUpICAjIGRhdGVfcmFuZ2UgaXMgbmV2ZXIgZ2l2ZW4KKworICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGxlbih2YWx1ZVsndGVzdF9ydW5zJ10pLCBsZW4ocmVzdWx0cykpCisgICAgICAgIGZvciBp
LCBydW4gaW4gZW51bWVyYXRlKHZhbHVlWyd0ZXN0X3J1bnMnXSk6CisgICAgICAgICAgICByZXN1
bHQgPSByZXN1bHRzW2ldCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1blswXSwgcmVz
dWx0LmtleSgpLmlkKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1blsxXVsxXSwg
aSkgICMgQnVpbGQgbnVtYmVyCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1blsxXVsy
XSwgMTAwICsgaSkgICMgUmV2aXNpb24KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVu
WzFdWzNdLCBOb25lKSAgIyBTdXBwbGVtZW50YXJ5IHJldmlzaW9uCisgICAgICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHJ1blszXSwgcmVzdWx0LnZhbHVlKQorICAgICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChydW5bNl0sIHNvbWVfYnVpbGRlci5rZXkoKS5pZCgpKQorICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChydW5bN10sIE5vbmUpICAjIFN0YXRpc3RpY3MKKworICAgIGRlZiBfYXNz
ZXJ0X2VudHJ5KHNlbGYsIGVudHJ5LCBidWlsZCwgcmVzdWx0LCB2YWx1ZSwgc3RhdGlzdGljcz1O
b25lLCBzdXBwbGVtZW50YXJ5X3JldmlzaW9ucz1Ob25lKToKKyAgICAgICAgZW50cnkgPSBlbnRy
eVs6XQorICAgICAgICBlbnRyeVsyXSA9IE5vbmUgICMgdGltZXN0YW1wCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoZW50cnksIFtyZXN1bHQua2V5KCkuaWQoKSwgW2J1aWxkLmtleSgpLmlkKCks
IGJ1aWxkLmJ1aWxkTnVtYmVyLCBidWlsZC5yZXZpc2lvbiwgc3VwcGxlbWVudGFyeV9yZXZpc2lv
bnNdLAorICAgICAgICAgICAgTm9uZSwgICMgdGltZXN0YW1wCisgICAgICAgICAgICB2YWx1ZSwg
MCwgICMgcnVuTnVtYmVyCisgICAgICAgICAgICBbXSwgICMgYW5ub3RhdGlvbnMKKyAgICAgICAg
ICAgIGJ1aWxkLmJ1aWxkZXIua2V5KCkuaWQoKSwgc3RhdGlzdGljc10pCisKKyAgICBkZWYgdGVz
dF9ydW5fZnJvbV9idWlsZF9hbmRfcmVzdWx0KHNlbGYpOgorICAgICAgICBicmFuY2ggPSBCcmFu
Y2guY3JlYXRlX2lmX3Bvc3NpYmxlKCdzb21lLWJyYW5jaCcsICdTb21lIEJyYW5jaCcpCisgICAg
ICAgIHBsYXRmb3JtID0gUGxhdGZvcm0uY3JlYXRlX2lmX3Bvc3NpYmxlKCdzb21lLXBsYXRmb3Jt
JywgJ1NvbWUgUGxhdGZvcm0nKQorICAgICAgICBidWlsZGVyID0gQnVpbGRlci5nZXQoQnVpbGRl
ci5jcmVhdGUoJ3NvbWUtYnVpbGRlcicsICdTb21lIEJ1aWxkZXInKSkKKyAgICAgICAgdGVzdF9u
YW1lID0gJyBzb21lLXRlc3QnCisKKyAgICAgICAgZGVmIGNyZWF0ZV9idWlsZChidWlsZF9udW1i
ZXIsIHJldmlzaW9uKToKKyAgICAgICAgICAgIHRpbWVzdGFtcCA9IGRhdGV0aW1lLm5vdygpLnJl
cGxhY2UobWljcm9zZWNvbmQ9MCkKKyAgICAgICAgICAgIGJ1aWxkID0gQnVpbGQoYnJhbmNoPWJy
YW5jaCwgcGxhdGZvcm09cGxhdGZvcm0sIGJ1aWxkZXI9YnVpbGRlciwgYnVpbGROdW1iZXI9YnVp
bGRfbnVtYmVyLAorICAgICAgICAgICAgICAgIHJldmlzaW9uPXJldmlzaW9uLCB0aW1lc3RhbXA9
dGltZXN0YW1wKQorICAgICAgICAgICAgYnVpbGQucHV0KCkKKyAgICAgICAgICAgIHJldHVybiBi
dWlsZAorCisgICAgICAgIGJ1aWxkID0gY3JlYXRlX2J1aWxkKDEsIDEwMSkKKyAgICAgICAgcmVz
dWx0ID0gVGVzdFJlc3VsdChuYW1lPXRlc3RfbmFtZSwgdmFsdWU9MTIzLjAsIGJ1aWxkPWJ1aWxk
KQorICAgICAgICByZXN1bHQucHV0KCkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2VudHJ5KFJ1bnNK
U09OR2VuZXJhdG9yLl9lbnRyeV9mcm9tX2J1aWxkX2FuZF9yZXN1bHQoYnVpbGQsIHJlc3VsdCks
IGJ1aWxkLCByZXN1bHQsIDEyMy4wKQorCisgICAgICAgIGJ1aWxkID0gY3JlYXRlX2J1aWxkKDIs
IDEwMikKKyAgICAgICAgcmVzdWx0ID0gVGVzdFJlc3VsdChuYW1lPXRlc3RfbmFtZSwgdmFsdWU9
NDU2LjAsIHZhbHVlTWVkaWFuPTc4OS4wLCBidWlsZD1idWlsZCkKKyAgICAgICAgcmVzdWx0LnB1
dCgpCisgICAgICAgIHNlbGYuX2Fzc2VydF9lbnRyeShSdW5zSlNPTkdlbmVyYXRvci5fZW50cnlf
ZnJvbV9idWlsZF9hbmRfcmVzdWx0KGJ1aWxkLCByZXN1bHQpLCBidWlsZCwgcmVzdWx0LCA0NTYu
MCkKKworICAgICAgICByZXN1bHQudmFsdWVTdGRldiA9IDcuMAorICAgICAgICByZXN1bHQucHV0
KCkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2VudHJ5KFJ1bnNKU09OR2VuZXJhdG9yLl9lbnRyeV9m
cm9tX2J1aWxkX2FuZF9yZXN1bHQoYnVpbGQsIHJlc3VsdCksIGJ1aWxkLCByZXN1bHQsIDQ1Ni4w
KQorCisgICAgICAgIHJlc3VsdC52YWx1ZVN0ZGV2ID0gTm9uZQorICAgICAgICByZXN1bHQudmFs
dWVNaW4gPSAxMjMuMAorICAgICAgICByZXN1bHQudmFsdWVNYXggPSA3ODkuMAorICAgICAgICBy
ZXN1bHQucHV0KCkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2VudHJ5KFJ1bnNKU09OR2VuZXJhdG9y
Ll9lbnRyeV9mcm9tX2J1aWxkX2FuZF9yZXN1bHQoYnVpbGQsIHJlc3VsdCksIGJ1aWxkLCByZXN1
bHQsIDQ1Ni4wKQorCisgICAgICAgIHJlc3VsdC52YWx1ZVN0ZGV2ID0gOC4wCisgICAgICAgIHJl
c3VsdC52YWx1ZU1pbiA9IDEyMy4wCisgICAgICAgIHJlc3VsdC52YWx1ZU1heCA9IDc4OS4wCisg
ICAgICAgIHJlc3VsdC5wdXQoKQorICAgICAgICBzZWxmLl9hc3NlcnRfZW50cnkoUnVuc0pTT05H
ZW5lcmF0b3IuX2VudHJ5X2Zyb21fYnVpbGRfYW5kX3Jlc3VsdChidWlsZCwgcmVzdWx0KSwgYnVp
bGQsIHJlc3VsdCwgNDU2LjAsCisgICAgICAgICAgICBzdGF0aXN0aWNzPXsnc3RkZXYnOiA4LjAs
ICdtaW4nOiAxMjMuMCwgJ21heCc6IDc4OS4wfSkKKworICAgICAgICByZXN1bHQudmFsdWVNZWRp
YW4gPSAzNDUuMCAgIyBNZWRpYW4gaXMgbmV2ZXIgdXNlZCBieSB0aGUgZnJvbnRlbmQuCisgICAg
ICAgIHJlc3VsdC52YWx1ZVN0ZGV2ID0gOC4wCisgICAgICAgIHJlc3VsdC52YWx1ZU1pbiA9IDEy
My4wCisgICAgICAgIHJlc3VsdC52YWx1ZU1heCA9IDc4OS4wCisgICAgICAgIHJlc3VsdC5wdXQo
KQorICAgICAgICBzZWxmLl9hc3NlcnRfZW50cnkoUnVuc0pTT05HZW5lcmF0b3IuX2VudHJ5X2Zy
b21fYnVpbGRfYW5kX3Jlc3VsdChidWlsZCwgcmVzdWx0KSwgYnVpbGQsIHJlc3VsdCwgNDU2LjAs
CisgICAgICAgICAgICBzdGF0aXN0aWNzPXsnc3RkZXYnOiA4LjAsICdtaW4nOiAxMjMuMCwgJ21h
eCc6IDc4OS4wfSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0
Lm1haW4oKQpJbmRleDogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vbWFpbi5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9tYWluLnB5CShy
ZXZpc2lvbiAxMDgyNzApCisrKyBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9tYWlu
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMywxNCArMjMsMTQgQEAgaW1wb3J0IGpzb24KIGZyb20g
Y29udHJvbGxlciBpbXBvcnQgQ2FjaGVkRGFzaGJvYXJkSGFuZGxlcgogZnJvbSBjb250cm9sbGVy
IGltcG9ydCBDYWNoZWRNYW5pZmVzdEhhbmRsZXIKIGZyb20gY29udHJvbGxlciBpbXBvcnQgQ2Fj
aGVkUnVuc0hhbmRsZXIKK2Zyb20gY29udHJvbGxlciBpbXBvcnQgRGFzaGJvYXJkVXBkYXRlSGFu
ZGxlcgorZnJvbSBjb250cm9sbGVyIGltcG9ydCBNYW5pZmVzdFVwZGF0ZUhhbmRsZXIKK2Zyb20g
Y29udHJvbGxlciBpbXBvcnQgUnVuc1VwZGF0ZUhhbmRsZXIKIGZyb20gY3JlYXRlX2hhbmRsZXIg
aW1wb3J0IENyZWF0ZUhhbmRsZXIKLWZyb20gZGFzaGJvYXJkX2hhbmRsZXIgaW1wb3J0IERhc2hi
b2FyZEhhbmRsZXIKLWZyb20gbWFuaWZlc3RfaGFuZGxlciBpbXBvcnQgTWFuaWZlc3RIYW5kbGVy
CiBmcm9tIHJlcG9ydF9oYW5kbGVyIGltcG9ydCBSZXBvcnRIYW5kbGVyCiBmcm9tIHJlcG9ydF9o
YW5kbGVyIGltcG9ydCBBZG1pblJlcG9ydEhhbmRsZXIKIGZyb20gcmVwb3J0X3Byb2Nlc3NfaGFu
ZGxlciBpbXBvcnQgUmVwb3J0UHJvY2Vzc0hhbmRsZXIKIGZyb20gcmVwb3J0X2xvZ3NfaGFuZGxl
ciBpbXBvcnQgUmVwb3J0TG9nc0hhbmRsZXIKLWZyb20gcnVuc19oYW5kbGVyIGltcG9ydCBSdW5z
SGFuZGxlcgogZnJvbSBtZXJnZV90ZXN0c19oYW5kbGVyIGltcG9ydCBNZXJnZVRlc3RzSGFuZGxl
cgogCiByb3V0ZXMgPSBbCkBAIC0zOSwxMyArMzksMTMgQEAgcm91dGVzID0gWwogICAgICgnL2Fk
bWluL3JlcG9ydC1sb2dzLz8nLCBSZXBvcnRMb2dzSGFuZGxlciksCiAgICAgKCcvYWRtaW4vY3Jl
YXRlLyguKiknLCBDcmVhdGVIYW5kbGVyKSwKICAgICAoJy9hcGkvdGVzdC8/JywgQ2FjaGVkTWFu
aWZlc3RIYW5kbGVyKSwKLSAgICAoJy9hcGkvdGVzdC91cGRhdGUnLCBNYW5pZmVzdEhhbmRsZXIp
LAorICAgICgnL2FwaS90ZXN0L3VwZGF0ZScsIE1hbmlmZXN0VXBkYXRlSGFuZGxlciksCiAgICAg
KCcvYXBpL3Rlc3QvcmVwb3J0Lz8nLCBSZXBvcnRIYW5kbGVyKSwKICAgICAoJy9hcGkvdGVzdC9y
ZXBvcnQvcHJvY2VzcycsIFJlcG9ydFByb2Nlc3NIYW5kbGVyKSwKICAgICAoJy9hcGkvdGVzdC9y
dW5zLz8nLCBDYWNoZWRSdW5zSGFuZGxlciksCi0gICAgKCcvYXBpL3Rlc3QvcnVucy91cGRhdGUn
LCBSdW5zSGFuZGxlciksCisgICAgKCcvYXBpL3Rlc3QvcnVucy91cGRhdGUnLCBSdW5zVXBkYXRl
SGFuZGxlciksCiAgICAgKCcvYXBpL3Rlc3QvZGFzaGJvYXJkLz8nLCBDYWNoZWREYXNoYm9hcmRI
YW5kbGVyKSwKLSAgICAoJy9hcGkvdGVzdC9kYXNoYm9hcmQvdXBkYXRlJywgRGFzaGJvYXJkSGFu
ZGxlciksCisgICAgKCcvYXBpL3Rlc3QvZGFzaGJvYXJkL3VwZGF0ZScsIERhc2hib2FyZFVwZGF0
ZUhhbmRsZXIpLAogXQogCiAKSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29t
L21hbmlmZXN0X2hhbmRsZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvd2Via2l0LXBlcmYu
YXBwc3BvdC5jb20vbWFuaWZlc3RfaGFuZGxlci5weQkocmV2aXNpb24gMTA4MjcwKQorKysgV2Vi
c2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vbWFuaWZlc3RfaGFuZGxlci5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMSw4OCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi1pbXBvcnQgd2ViYXBwMgotCi1pbXBvcnQganNvbgotCi1mcm9tIGNvbnRyb2xs
ZXIgaW1wb3J0IGNhY2hlX21hbmlmZXN0Ci1mcm9tIG1vZGVscyBpbXBvcnQgQnVpbGRlcgotZnJv
bSBtb2RlbHMgaW1wb3J0IEJyYW5jaAotZnJvbSBtb2RlbHMgaW1wb3J0IFBsYXRmb3JtCi1mcm9t
IG1vZGVscyBpbXBvcnQgVGVzdAotCi0KLWNsYXNzIE1hbmlmZXN0SGFuZGxlcih3ZWJhcHAyLlJl
cXVlc3RIYW5kbGVyKToKLSAgICBkZWYgcG9zdChzZWxmKToKLSAgICAgICAgc2VsZi5yZXNwb25z
ZS5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Jwot
Ci0gICAgICAgIHRlc3RfbWFwID0ge30KLSAgICAgICAgcGxhdGZvcm1faWRfbWFwID0ge30KLSAg
ICAgICAgYnJhbmNoX2lkX21hcCA9IHt9Ci0gICAgICAgIGZvciB0ZXN0IGluIFRlc3QuYWxsKCk6
Ci0gICAgICAgICAgICBicmFuY2hfaWRzID0gW0JyYW5jaC5nZXQoYnJhbmNoX2tleSkuaWQgZm9y
IGJyYW5jaF9rZXkgaW4gdGVzdC5icmFuY2hlc10KLSAgICAgICAgICAgIHBsYXRmb3JtX2lkcyA9
IFtQbGF0Zm9ybS5nZXQocGxhdGZvcm1fa2V5KS5pZCBmb3IgcGxhdGZvcm1fa2V5IGluIHRlc3Qu
cGxhdGZvcm1zXQotICAgICAgICAgICAgdGVzdF9tYXBbdGVzdC5pZF0gPSB7Ci0gICAgICAgICAg
ICAgICAgJ25hbWUnOiB0ZXN0Lm5hbWUsCi0gICAgICAgICAgICAgICAgJ2JyYW5jaElkcyc6IGJy
YW5jaF9pZHMsCi0gICAgICAgICAgICAgICAgJ3BsYXRmb3JtSWRzJzogcGxhdGZvcm1faWRzLAot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgcGxhdGZvcm1faWQgaW4gcGxhdGZvcm1f
aWRzOgotICAgICAgICAgICAgICAgIHBsYXRmb3JtX2lkX21hcC5zZXRkZWZhdWx0KHBsYXRmb3Jt
X2lkLCB7J3Rlc3RzJzogW10sICdicmFuY2hlcyc6IFtdfSkKLSAgICAgICAgICAgICAgICBwbGF0
Zm9ybV9pZF9tYXBbcGxhdGZvcm1faWRdWyd0ZXN0cyddLmFwcGVuZCh0ZXN0LmlkKQotICAgICAg
ICAgICAgICAgIHBsYXRmb3JtX2lkX21hcFtwbGF0Zm9ybV9pZF1bJ2JyYW5jaGVzJ10gKz0gYnJh
bmNoX2lkcwotCi0gICAgICAgICAgICBmb3IgYnJhbmNoX2lkIGluIGJyYW5jaF9pZHM6Ci0gICAg
ICAgICAgICAgICAgYnJhbmNoX2lkX21hcC5zZXRkZWZhdWx0KGJyYW5jaF9pZCwgeyd0ZXN0cyc6
IFtdLCAncGxhdGZvcm1zJzogW119KQotICAgICAgICAgICAgICAgIGJyYW5jaF9pZF9tYXBbYnJh
bmNoX2lkXVsndGVzdHMnXS5hcHBlbmQodGVzdC5pZCkKLSAgICAgICAgICAgICAgICBicmFuY2hf
aWRfbWFwW2JyYW5jaF9pZF1bJ3BsYXRmb3JtcyddICs9IHBsYXRmb3JtX2lkcwotCi0gICAgICAg
IHBsYXRmb3JtX21hcCA9IHt9Ci0gICAgICAgIGZvciBwbGF0Zm9ybSBpbiBQbGF0Zm9ybS5hbGwo
KToKLSAgICAgICAgICAgIGlmIHBsYXRmb3JtLmlkIG5vdCBpbiBwbGF0Zm9ybV9pZF9tYXA6Ci0g
ICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHBsYXRmb3JtX21hcFtwbGF0Zm9y
bS5pZF0gPSB7Ci0gICAgICAgICAgICAgICAgJ25hbWUnOiBwbGF0Zm9ybS5uYW1lLAotICAgICAg
ICAgICAgICAgICd0ZXN0SWRzJzogbGlzdChzZXQocGxhdGZvcm1faWRfbWFwW3BsYXRmb3JtLmlk
XVsndGVzdHMnXSkpLAotICAgICAgICAgICAgICAgICdicmFuY2hJZHMnOiBsaXN0KHNldChwbGF0
Zm9ybV9pZF9tYXBbcGxhdGZvcm0uaWRdWydicmFuY2hlcyddKSksCi0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgYnJhbmNoX21hcCA9IHt9Ci0gICAgICAgIGZvciBicmFuY2ggaW4gQnJhbmNoLmFs
bCgpOgotICAgICAgICAgICAgaWYgYnJhbmNoLmlkIG5vdCBpbiBicmFuY2hfaWRfbWFwOgotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBicmFuY2hfbWFwW2JyYW5jaC5pZF0g
PSB7Ci0gICAgICAgICAgICAgICAgJ25hbWUnOiBicmFuY2gubmFtZSwKLSAgICAgICAgICAgICAg
ICAndGVzdElkcyc6IGxpc3Qoc2V0KGJyYW5jaF9pZF9tYXBbYnJhbmNoLmlkXVsndGVzdHMnXSkp
LAotICAgICAgICAgICAgICAgICdwbGF0Zm9ybUlkcyc6IGxpc3Qoc2V0KGJyYW5jaF9pZF9tYXBb
YnJhbmNoLmlkXVsncGxhdGZvcm1zJ10pKSwKLSAgICAgICAgICAgIH0KLQotICAgICAgICBjYWNo
ZV9tYW5pZmVzdChqc29uLmR1bXBzKHsndGVzdE1hcCc6IHRlc3RfbWFwLCAncGxhdGZvcm1NYXAn
OiBwbGF0Zm9ybV9tYXAsICdicmFuY2hNYXAnOiBicmFuY2hfbWFwfSkpCi0gICAgICAgIHNlbGYu
cmVzcG9uc2Uub3V0LndyaXRlKCdPSycpCkluZGV4OiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBz
cG90LmNvbS9tb2RlbHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBw
c3BvdC5jb20vbW9kZWxzLnB5CShyZXZpc2lvbiAxMDgyNzApCisrKyBXZWJzaXRlcy93ZWJraXQt
cGVyZi5hcHBzcG90LmNvbS9tb2RlbHMucHkJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw2ICsxNjAs
NyBAQCBjbGFzcyBUZXN0KGRiLk1vZGVsKToKICAgICAgICAgICAgICAgICAgICAgdGVzdC5icmFu
Y2hlcy5hcHBlbmQoYnJhbmNoLmtleSgpKQogICAgICAgICAgICAgICAgIGlmIHBsYXRmb3JtLmtl
eSgpIG5vdCBpbiB0ZXN0LnBsYXRmb3JtczoKICAgICAgICAgICAgICAgICAgICAgdGVzdC5wbGF0
Zm9ybXMuYXBwZW5kKHBsYXRmb3JtLmtleSgpKQorICAgICAgICAgICAgICAgIHRlc3QucHV0KCkK
ICAgICAgICAgICAgICAgICBleGlzdGluZ190ZXN0WzBdID0gdGVzdAogICAgICAgICAgICAgICAg
IHJldHVybiBOb25lCiAKQEAgLTIwMCwyMCArMjAxLDYgQEAgY2xhc3MgVGVzdFJlc3VsdChkYi5N
b2RlbCk6CiAgICAgICAgICAgICB2YWx1ZU1lZGlhbj1fZmxvYXRfb3Jfbm9uZShyZXN1bHQsICdt
ZWRpYW4nKSwgdmFsdWVTdGRldj1fZmxvYXRfb3Jfbm9uZShyZXN1bHQsICdzdGRldicpLAogICAg
ICAgICAgICAgdmFsdWVNaW49X2Zsb2F0X29yX25vbmUocmVzdWx0LCAnbWluJyksIHZhbHVlTWF4
PV9mbG9hdF9vcl9ub25lKHJlc3VsdCwgJ21heCcpKQogCi0gICAgQHN0YXRpY21ldGhvZAotICAg
IGRlZiBnZW5lcmF0ZV9ydW5zKGJyYW5jaCwgcGxhdGZvcm0sIHRlc3RfbmFtZSk6Ci0gICAgICAg
IGJ1aWxkcyA9IEJ1aWxkLmFsbCgpCi0gICAgICAgIGJ1aWxkcy5maWx0ZXIoJ2JyYW5jaCA9Jywg
YnJhbmNoKQotICAgICAgICBidWlsZHMuZmlsdGVyKCdwbGF0Zm9ybSA9JywgcGxhdGZvcm0pCi0K
LSAgICAgICAgZm9yIGJ1aWxkIGluIGJ1aWxkczoKLSAgICAgICAgICAgIHJlc3VsdHMgPSBUZXN0
UmVzdWx0LmFsbCgpCi0gICAgICAgICAgICByZXN1bHRzLmZpbHRlcignbmFtZSA9JywgdGVzdF9u
YW1lKQotICAgICAgICAgICAgcmVzdWx0cy5maWx0ZXIoJ2J1aWxkID0nLCBidWlsZCkKLSAgICAg
ICAgICAgIGZvciByZXN1bHQgaW4gcmVzdWx0czoKLSAgICAgICAgICAgICAgICB5aWVsZCBidWls
ZCwgcmVzdWx0Ci0gICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KLQogCiBjbGFzcyBSZXBvcnRM
b2coZGIuTW9kZWwpOgogICAgIHRpbWVzdGFtcCA9IGRiLkRhdGVUaW1lUHJvcGVydHkocmVxdWly
ZWQ9VHJ1ZSkKSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL21vZGVsc191
bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNv
bS9tb2RlbHNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDEwODI3MCkKKysrIFdlYnNpdGVzL3dlYmtp
dC1wZXJmLmFwcHNwb3QuY29tL21vZGVsc191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAt
MjUwLDYgKzI1MCwxMCBAQCBjbGFzcyBUZXN0TW9kZWxUZXN0cyhEYXRhU3RvcmVUZXN0c0Jhc2Up
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxVbm9yZGVyZWRMaXN0KHRlc3QuYnJhbmNoZXMsIFti
cmFuY2gua2V5KCksIG90aGVyX2JyYW5jaC5rZXkoKV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxVbm9yZGVyZWRMaXN0KHRlc3QucGxhdGZvcm1zLCBbcGxhdGZvcm0ua2V5KCksIG90aGVyX3Bs
YXRmb3JtLmtleSgpXSkKIAorICAgICAgICB0ZXN0ID0gbW9kZWxzLlRlc3QuZ2V0KHRlc3Qua2V5
KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxVbm9yZGVyZWRMaXN0KHRlc3QuYnJhbmNoZXMs
IFticmFuY2gua2V5KCksIG90aGVyX2JyYW5jaC5rZXkoKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxVbm9yZGVyZWRMaXN0KHRlc3QucGxhdGZvcm1zLCBbcGxhdGZvcm0ua2V5KCksIG90aGVy
X3BsYXRmb3JtLmtleSgpXSkKKwogCiBjbGFzcyBUZXN0UmVzdWx0VGVzdHMoRGF0YVN0b3JlVGVz
dHNCYXNlKToKICAgICBkZWYgX2NyZWF0ZV9idWlsZChzZWxmKToKQEAgLTI4NSwyOSArMjg5LDYg
QEAgY2xhc3MgVGVzdFJlc3VsdFRlc3RzKERhdGFTdG9yZVRlc3RzQmFzZQogICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHJlc3VsdC52YWx1ZU1pbiwgMzAuNSkKICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChyZXN1bHQudmFsdWVNYXgsIDQ1KQogCi0gICAgZGVmIF9jcmVhdGVfcmVzdWx0cyhzZWxm
LCB0ZXN0X25hbWUsIHZhbHVlcyk6Ci0gICAgICAgIGJyYW5jaCwgcGxhdGZvcm0sIGJ1aWxkZXIg
PSBfY3JlYXRlX3NvbWVfYnVpbGRlcigpCi0gICAgICAgIHJlc3VsdHMgPSBbXQotICAgICAgICBm
b3IgaSwgdmFsdWUgaW4gZW51bWVyYXRlKHZhbHVlcyk6Ci0gICAgICAgICAgICBidWlsZCA9IG1v
ZGVscy5CdWlsZChicmFuY2g9YnJhbmNoLCBwbGF0Zm9ybT1wbGF0Zm9ybSwgYnVpbGRlcj1idWls
ZGVyLAotICAgICAgICAgICAgICAgIGJ1aWxkTnVtYmVyPWksIHJldmlzaW9uPTEwMCArIGksIHRp
bWVzdGFtcD1kYXRldGltZS5ub3coKSkKLSAgICAgICAgICAgIGJ1aWxkLnB1dCgpCi0gICAgICAg
ICAgICByZXN1bHQgPSBtb2RlbHMuVGVzdFJlc3VsdChuYW1lPXRlc3RfbmFtZSwgYnVpbGQ9YnVp
bGQsIHZhbHVlPXZhbHVlKQotICAgICAgICAgICAgcmVzdWx0LnB1dCgpCi0gICAgICAgICAgICBy
ZXN1bHRzLmFwcGVuZChyZXN1bHQpCi0gICAgICAgIHJldHVybiBicmFuY2gsIHBsYXRmb3JtLCBy
ZXN1bHRzCi0KLSAgICBkZWYgdGVzdF9nZW5lcmF0ZV9ydW5zKHNlbGYpOgotICAgICAgICBicmFu
Y2gsIHBsYXRmb3JtLCByZXN1bHRzID0gc2VsZi5fY3JlYXRlX3Jlc3VsdHMoJ3NvbWUtdGVzdCcs
IFs1MC4wLCA1MS4wLCA1Mi4wLCA0OS4wLCA0OC4wXSkKLSAgICAgICAgbGFzdF9pID0gMAotICAg
ICAgICBmb3IgaSwgKGJ1aWxkLCByZXN1bHQpIGluIGVudW1lcmF0ZShtb2RlbHMuVGVzdFJlc3Vs
dC5nZW5lcmF0ZV9ydW5zKGJyYW5jaCwgcGxhdGZvcm0sICJzb21lLXRlc3QiKSk6Ci0gICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1aWxkLmJ1aWxkTnVtYmVyLCBpKQotICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChidWlsZC5yZXZpc2lvbiwgMTAwICsgaSkKLSAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm5hbWUsICdzb21lLXRlc3QnKQotICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChyZXN1bHQudmFsdWUsIHJlc3VsdHNbaV0udmFsdWUpCi0gICAgICAgICAg
ICBsYXN0X2kgPSBpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsYXN0X2kgKyAxLCBsZW4ocmVz
dWx0cykpCi0KIAogY2xhc3MgUmVwb3J0TG9nVGVzdHMoRGF0YVN0b3JlVGVzdHNCYXNlKToKICAg
ICBkZWYgX2NyZWF0ZV9sb2dfd2l0aF9wYXlsb2FkKHNlbGYsIHBheWxvYWQpOgpJbmRleDogV2Vi
c2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vcnVuc19oYW5kbGVyLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3J1bnNfaGFuZGxlci5weQkocmV2
aXNpb24gMTA4MjcwKQorKysgV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vcnVuc19o
YW5kbGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwNSArMCwwIEBACi0jIS91c3IvYmluL2Vu
diBweXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0
cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgd2ViYXBwMgotCi1pbXBvcnQganNv
bgotZnJvbSB0aW1lIGltcG9ydCBta3RpbWUKLWZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1l
Ci0KLWZyb20gY29udHJvbGxlciBpbXBvcnQgY2FjaGVfcnVucwotZnJvbSBtb2RlbHMgaW1wb3J0
IEJ1aWxkCi1mcm9tIG1vZGVscyBpbXBvcnQgQnVpbGRlcgotZnJvbSBtb2RlbHMgaW1wb3J0IEJy
YW5jaAotZnJvbSBtb2RlbHMgaW1wb3J0IE51bWVyaWNJZEhvbGRlcgotZnJvbSBtb2RlbHMgaW1w
b3J0IFBsYXRmb3JtCi1mcm9tIG1vZGVscyBpbXBvcnQgVGVzdAotZnJvbSBtb2RlbHMgaW1wb3J0
IFRlc3RSZXN1bHQKLWZyb20gbW9kZWxzIGltcG9ydCBtb2RlbF9mcm9tX251bWVyaWNfaWQKLQot
Ci1jbGFzcyBSdW5zSGFuZGxlcih3ZWJhcHAyLlJlcXVlc3RIYW5kbGVyKToKLSAgICBkZWYgcG9z
dChzZWxmKToKLSAgICAgICAgc2VsZi5yZXNwb25zZS5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9
ICd0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04JwotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAg
IHRlc3RfaWQgPSBpbnQoc2VsZi5yZXF1ZXN0LmdldCgnaWQnLCAwKSkKLSAgICAgICAgICAgIGJy
YW5jaF9pZCA9IGludChzZWxmLnJlcXVlc3QuZ2V0KCdicmFuY2hpZCcsIDApKQotICAgICAgICAg
ICAgcGxhdGZvcm1faWQgPSBpbnQoc2VsZi5yZXF1ZXN0LmdldCgncGxhdGZvcm1pZCcsIDApKQot
ICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgIyBGSVhNRTogT3V0cHV0IGFu
IGVycm9yIGhlcmUKLSAgICAgICAgICAgIHRlc3RfaWQgPSAwCi0gICAgICAgICAgICBicmFuY2hf
aWQgPSAwCi0gICAgICAgICAgICBwbGF0Zm9ybV9pZCA9IDAKLQotICAgICAgICAjIEZJWE1FOiBK
dXN0IGZldGNoIGJ1aWxkcyBzcGVjaWZpZWQgYnkgImRheXMiCi0gICAgICAgICMgZGF5cyA9IHNl
bGYucmVxdWVzdC5nZXQoJ2RheXMnLCAzNjUpCi0KLSAgICAgICAgYnJhbmNoID0gbW9kZWxfZnJv
bV9udW1lcmljX2lkKGJyYW5jaF9pZCwgQnJhbmNoKQotICAgICAgICBwbGF0Zm9ybSA9IG1vZGVs
X2Zyb21fbnVtZXJpY19pZChwbGF0Zm9ybV9pZCwgUGxhdGZvcm0pCi0gICAgICAgIHRlc3QgPSBt
b2RlbF9mcm9tX251bWVyaWNfaWQodGVzdF9pZCwgVGVzdCkKLSAgICAgICAgYXNzZXJ0IGJyYW5j
aAotICAgICAgICBhc3NlcnQgcGxhdGZvcm0KLSAgICAgICAgYXNzZXJ0IHRlc3QKLQotICAgICAg
ICB0ZXN0X3J1bnMgPSBbXQotICAgICAgICBhdmVyYWdlcyA9IHt9Ci0gICAgICAgIHZhbHVlcyA9
IFtdCi0gICAgICAgIHRpbWVzdGFtcHMgPSBbXQotCi0gICAgICAgIGZvciBidWlsZCwgcmVzdWx0
IGluIFRlc3RSZXN1bHQuZ2VuZXJhdGVfcnVucyhicmFuY2gsIHBsYXRmb3JtLCB0ZXN0Lm5hbWUp
OgotICAgICAgICAgICAgYnVpbGRlcklkID0gYnVpbGQuYnVpbGRlci5rZXkoKS5pZCgpCi0gICAg
ICAgICAgICBwb3NpeFRpbWVzdGFtcCA9IG1rdGltZShidWlsZC50aW1lc3RhbXAudGltZXR1cGxl
KCkpCi0gICAgICAgICAgICBzdGF0aXN0aWNzID0gTm9uZQotICAgICAgICAgICAgc3VwcGxlbWVu
dGFyeV9yZXZpc2lvbnMgPSBOb25lCi0gICAgICAgICAgICBpZiByZXN1bHQudmFsdWVTdGRldiAh
PSBOb25lIGFuZCByZXN1bHQudmFsdWVNaW4gIT0gTm9uZSBhbmQgcmVzdWx0LnZhbHVlTWF4ICE9
IE5vbmU6Ci0gICAgICAgICAgICAgICAgc3RhdGlzdGljcyA9IHsnc3RkZXYnOiByZXN1bHQudmFs
dWVTdGRldiwgJ21pbic6IHJlc3VsdC52YWx1ZU1pbiwgJ21heCc6IHJlc3VsdC52YWx1ZU1heH0K
LSAgICAgICAgICAgIGlmIGJ1aWxkLmNocm9taXVtUmV2aXNpb24gIT0gTm9uZToKLSAgICAgICAg
ICAgICAgICBzdXBwbGVtZW50YXJ5X3JldmlzaW9ucyA9IHsnQ2hyb21pdW0nOiBidWlsZC5jaHJv
bWl1bVJldmlzaW9ufQotCi0gICAgICAgICAgICB0ZXN0X3J1bnMuYXBwZW5kKFtyZXN1bHQua2V5
KCkuaWQoKSwKLSAgICAgICAgICAgICAgICBbYnVpbGQua2V5KCkuaWQoKSwgYnVpbGQuYnVpbGRO
dW1iZXIsIGJ1aWxkLnJldmlzaW9uLCBzdXBwbGVtZW50YXJ5X3JldmlzaW9uc10sCi0gICAgICAg
ICAgICAgICAgcG9zaXhUaW1lc3RhbXAsIHJlc3VsdC52YWx1ZSwgMCwgICMgcnVuTnVtYmVyCi0g
ICAgICAgICAgICAgICAgW10sICAjIGFubm90YXRpb25zCi0gICAgICAgICAgICAgICAgYnVpbGRl
cklkLCBzdGF0aXN0aWNzXSkKLQotICAgICAgICAgICAgIyBGSVhNRTogQ2FsY3VsYXRlIHRoZSBh
dmVyYWdlOyBpbiBwcmFjdGljZSwgd2Ugd291bGRuJ3QgaGF2ZSBtb3JlIHRoYW4gb25lIHZhbHVl
IGZvciBhIGdpdmVuIHJldmlzaW9uCi0gICAgICAgICAgICBhdmVyYWdlc1tidWlsZC5yZXZpc2lv
bl0gPSByZXN1bHQudmFsdWUKLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQocmVzdWx0LnZhbHVl
KQotICAgICAgICAgICAgdGltZXN0YW1wcy5hcHBlbmQocG9zaXhUaW1lc3RhbXApCi0KLSAgICAg
ICAgcmVzdWx0ID0ganNvbi5kdW1wcyh7Ci0gICAgICAgICAgICAndGVzdF9ydW5zJzogdGVzdF9y
dW5zLAotICAgICAgICAgICAgJ2F2ZXJhZ2VzJzogYXZlcmFnZXMsCi0gICAgICAgICAgICAnbWlu
JzogbWluKHZhbHVlcykgaWYgdmFsdWVzIGVsc2UgTm9uZSwKLSAgICAgICAgICAgICdtYXgnOiBt
YXgodmFsdWVzKSBpZiB2YWx1ZXMgZWxzZSBOb25lLAotICAgICAgICAgICAgJ2RhdGVfcmFuZ2Un
OiBbbWluKHRpbWVzdGFtcHMpLCBtYXgodGltZXN0YW1wcyldIGlmIHRpbWVzdGFtcHMgZWxzZSBO
b25lLAotICAgICAgICAgICAgJ3N0YXQnOiAnb2snfSkKLSAgICAgICAgY2FjaGVfcnVucyh0ZXN0
X2lkLCBicmFuY2hfaWQsIHBsYXRmb3JtX2lkLCByZXN1bHQpCi0gICAgICAgIHNlbGYucmVzcG9u
c2Uub3V0LndyaXRlKCdPSycpCg==
</data>
<flag name="review"
          id="130176"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>