<?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>235631</bug_id>
          
          <creation_ts>2022-01-26 00:46:28 -0800</creation_ts>
          <short_desc>WebGL conformance tests that are pending upstreaming should not duplicate unmodified files</short_desc>
          <delta_ts>2022-01-26 06:13:17 -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>WebGL</component>
          <version>Other</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>235563</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kimmo Kinnunen">kkinnunen</reporter>
          <assigned_to name="Kimmo Kinnunen">kkinnunen</assigned_to>
          <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kbr</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>koivisto</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1834006</commentid>
    <comment_count>0</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-01-26 00:46:28 -0800</bug_when>
    <thetext>WebGL conformance tests that are pending upstreaming should not duplicate unmodified files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834008</commentid>
    <comment_count>1</comment_count>
      <attachid>450002</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-01-26 01:01:38 -0800</bug_when>
    <thetext>Created attachment 450002
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834041</commentid>
    <comment_count>2</comment_count>
      <attachid>450002</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2022-01-26 04:08:38 -0800</bug_when>
    <thetext>Comment on attachment 450002
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834060</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-01-26 06:12:10 -0800</bug_when>
    <thetext>Committed r288615 (246434@main): &lt;https://commits.webkit.org/246434@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 450002.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834063</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-01-26 06:13:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/88072034&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450002</attachid>
            <date>2022-01-26 01:01:38 -0800</date>
            <delta_ts>2022-01-26 06:12:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235631-20220126110135.patch</filename>
            <type>text/plain</type>
            <size>265636</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4NTQ0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOGI0MjAzNDkzZmY2YzRmNjU5ZDk5
MmFhZjM5YmU0MmM0ODliMmMyYy4uN2M1NmE5YTRiMjdlN2Q0M2U2OTJiZmM3M2MwNGE3MTNjMjJk
NjY1OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDIyLTAxLTI2ICBLaW1tbyBLaW5udW5lbiAg
PGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViR0wgY29uZm9ybWFuY2UgdGVzdHMg
dGhhdCBhcmUgcGVuZGluZyB1cHN0cmVhbWluZyBzaG91bGQgbm90IGR1cGxpY2F0ZSB1bm1vZGlm
aWVkIGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzU2MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBEdXBsaWNhdGluZyB0aGUgdW5tb2RpZmllZCBmaWxlcyBrZWVwcyB0aGUgcGVuZGluZyB0ZXN0
cyBzb21ld2hhdCBpc29sYXRlZCBmcm9tIHRoZQorICAgICAgICB1cHN0cmVhbSB0ZXN0IHVwZGF0
ZXMuIEhvd2V2ZXIsIHRoaXMgaXMgbm90IGZlYXNpYmxlIGFzIHRoZSB0ZXN0cyByZWZlciB0byBi
aWdnZXIgZmlsZXMKKyAgICAgICAgdGhhdCBhcmUgaW5jb252ZW5pZW50IHRvIGR1cGxpY2F0ZSwg
c3VjaCBhcyB2aWRlb3MuIEFsc28gdGhpcyBtYWtlcyBpdCBoYXJkZXIgdG8gd3JpdGUgbmV3IHRl
c3RzLAorICAgICAgICBzaW5jZSBpZiB0aGUgbmV3IHBlbmRpbmcgdGVzdCBzdGFydHMgdG8gdXNl
IGEgZmlsZSwgdGhlIGZpbGUgd291bGQgbmVlZCBkdXBsaWNhdGlvbi4KKyAgICAgICAgQWxzbyBp
ZiB0aGUgdXBzdHJlYW0gaGFzIG1vZGlmaWVkIHRoZSBzaGFyZWQgZmlsZXMsIHRoZSBjaGFuZ2Ug
ZG9uZSB0byB0aGUgcGVuZGluZyB0ZXN0IG5lZWRzCisgICAgICAgIHRvIGJlIGRvbmUgYW55d2F5
LgorCisgICAgICAgIEl0IGlzIG1vcmUgY29uc2lzdGVudCB0byB1c2UgdGhlIHNhbWUgaGVscGVy
IG1lZGlhLCBqcyBhbmQgY3NzIHJlc291cmNlcyBmb3IgdGhlIHBlbmRpbmcgdGVzdHMKKyAgICAg
ICAgYXMgdGhlIGNvbmZvcm1hbmNlIHRlc3Qgc3VpdGUgc25hcHNob3QgdXNlcy4KKworICAgICAg
ICBSZW1vdmUgYWxsIHVubW9kaWZpZWQgaGVscGVyIGNzcyBhbmQganMgZmlsZXMgZnJvbSB0aGUg
cGVuZGluZyB0ZXN0IGRpcmVjdG9yeSBhbmQKKyAgICAgICAgdXNlIHRoZSB1bm1vZGlmaWVkIGZp
bGVzIGZyb20gdGhlIGFjdHVhbCB0ZXN0IGZpbGVzLgorCisgICAgICAgIFdlYkdMIGNvbmZvcm1h
bmNlIHRlc3RzIGFyZToKKyAgICAgICAgd2ViZ2wvMi4wLnkvIC0tIGF1dG9nZW5lcmF0ZWQgZHJp
dmVyIGh0bWwgZmlsZXMgcmVmZXJlbmNpbmcgdGhlIGFjdHVhbCB0ZXN0IHN1aXRlIHRlc3QgZmls
ZXMKKyAgICAgICAgd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMgLS0gdGhlIGFjdHVh
bCB0ZXN0IHN1aXRlIGZpbGVzCisKKyAgICAgICAgTW92ZSB0aGUgcGVuZGluZyB0ZXN0cyBzaW1p
bGFybHk6CisgICAgICAgIHdlYmdsL3BlbmRpbmcgLS0gZHJpdmVycworICAgICAgICB3ZWJnbC9w
ZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzIC0tIG9sZCBwZW5kaW5nIGFjdHVhbCB0
ZXN0IGZpbGVzCisgICAgICAgIHdlYmdsL3Jlc291cmNlcy9wZW5kaW5nX3dlYmdsX3Rlc3RfZmls
ZXMgLS0gbmV3IHBlbmRpbmcgYWN0dWFsIHRlc3QgZmlsZXMKKworICAgICAgICBUaGlzIHdheSBp
dCBpcyBlYXNpZXIgdG8gcmVmZXIgdG8gdGhlIHJlc291cmNlcyBmcm9tIHRoZSBhY3R1YWwgdGVz
dCBmaWxlcy4KKworICAgICAgICAqIHdlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvY29udGV4dC9j
b250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMtZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIHdlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvY29udGV4dC9jb250ZXh0
LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbDoKKyAgICAgICAg
KiB3ZWJnbC9wZW5kaW5nL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1yZXNlcnZl
ZC13b3Jkcy0yLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWJnbC9wZW5kaW5nL2NvbmZvcm1h
bmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1yZXNlcnZlZC13b3Jkcy0yLmh0bWw6CisgICAgICAg
ICogd2ViZ2wvcGVuZGluZy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc3dpenpsZS1hcy1sdmFsdWUt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvZ2xzbC9t
aXNjL3N3aXp6bGUtYXMtbHZhbHVlLmh0bWw6CisgICAgICAgICogd2ViZ2wvcGVuZGluZy9jb25m
b3JtYW5jZS90ZXh0dXJlcy9taXNjL3RleC1pbWFnZS12aWRlby1yZXBlYXRlZC1leHBlY3RlZC50
eHQ6CisgICAgICAgICogd2ViZ2wvcGVuZGluZy9jb25mb3JtYW5jZS90ZXh0dXJlcy9taXNjL3Rl
eC1pbWFnZS12aWRlby1yZXBlYXRlZC5odG1sOgorICAgICAgICAqIHdlYmdsL3BlbmRpbmcvY29u
Zm9ybWFuY2UyL2dsc2wzL2VtcHR5LXNoYWRlci13aXRoLW91dHB1dC1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogd2ViZ2wvcGVuZGluZy9jb25mb3JtYW5jZTIvZ2xzbDMvZW1wdHktc2hhZGVyLXdp
dGgtb3V0cHV0Lmh0bWw6CisgICAgICAgICogd2ViZ2wvcGVuZGluZy9jb25mb3JtYW5jZTIvZ2xz
bDMvZmxvYXQtY29uc3RhbnQtZXhwcmVzc2lvbnMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdl
YmdsL3BlbmRpbmcvY29uZm9ybWFuY2UyL2dsc2wzL2Zsb2F0LWNvbnN0YW50LWV4cHJlc3Npb25z
Lmh0bWw6CisgICAgICAgICogd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanM6
IFJlbW92ZWQuCisgICAgICAgICogd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9m
aWxlcy9qcy9nbHNsLWNvbmZvcm1hbmNlLXRlc3QuanM6IFJlbW92ZWQuCisgICAgICAgICogd2Vi
Z2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9qcy9qcy10ZXN0LXBvc3QuanM6
IFJlbW92ZWQuCisgICAgICAgICogd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9m
aWxlcy9qcy9qcy10ZXN0LXByZS5qczogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJnbC9wZW5kaW5n
L3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2pzL3dlYmdsLXRlc3QtdXRpbHMuanM6IFJlbW92
ZWQuCisgICAgICAgICogd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9y
ZXNvdXJjZXMvZ2xzbC1mZWF0dXJlLXRlc3RzLmNzczogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJn
bC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL3Jlc291cmNlcy9qcy10ZXN0LXN0
eWxlLmNzczogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93ZWJr
aXQtd2ViZ2wtdGVzdC1oYXJuZXNzLmpzOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmdsL3Jlc291
cmNlcy9wZW5kaW5nX3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvY29udGV4dC9jb250ZXh0
LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbDogUmVuYW1lZCBm
cm9tIExheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMv
Y29uZm9ybWFuY2UvY29udGV4dC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNp
bC1hbnRpYWxpYXMuaHRtbC4KKyAgICAgICAgKiB3ZWJnbC9yZXNvdXJjZXMvcGVuZGluZ193ZWJn
bF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1yZXNlcnZlZC13
b3Jkcy0yLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291
cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1y
ZXNlcnZlZC13b3Jkcy0yLmh0bWwuCisgICAgICAgICogd2ViZ2wvcmVzb3VyY2VzL3BlbmRpbmdf
d2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc3dpenpsZS1hcy1sdmFsdWUu
aHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dl
YmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3N3aXp6bGUtYXMtbHZhbHVlLmh0
bWwuCisgICAgICAgICogd2ViZ2wvcmVzb3VyY2VzL3BlbmRpbmdfd2ViZ2xfdGVzdF9maWxlcy9j
b25mb3JtYW5jZS90ZXh0dXJlcy9taXNjL3RleC1pbWFnZS12aWRlby1yZXBlYXRlZC5odG1sOiBS
ZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVz
dF9maWxlcy9jb25mb3JtYW5jZS90ZXh0dXJlcy9taXNjL3RleC1pbWFnZS12aWRlby1yZXBlYXRl
ZC5odG1sLgorICAgICAgICAqIHdlYmdsL3Jlc291cmNlcy9wZW5kaW5nX3dlYmdsX3Rlc3RfZmls
ZXMvY29uZm9ybWFuY2UyL2dsc2wzL2VtcHR5LXNoYWRlci13aXRoLW91dHB1dC5odG1sOiBSZW5h
bWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9m
aWxlcy9jb25mb3JtYW5jZTIvZ2xzbDMvZW1wdHktc2hhZGVyLXdpdGgtb3V0cHV0Lmh0bWwuCisg
ICAgICAgICogd2ViZ2wvcmVzb3VyY2VzL3BlbmRpbmdfd2ViZ2xfdGVzdF9maWxlcy9jb25mb3Jt
YW5jZTIvZ2xzbDMvZmxvYXQtY29uc3RhbnQtZXhwcmVzc2lvbnMuaHRtbDogUmVuYW1lZCBmcm9t
IExheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29u
Zm9ybWFuY2UyL2dsc2wzL2Zsb2F0LWNvbnN0YW50LWV4cHJlc3Npb25zLmh0bWwuCisKIDIwMjIt
MDEtMjUgIFppcmFuIFN1biAgPHpzdW5AaWdhbGlhLmNvbT4KIAogICAgICAgICBbY3NzLWdyaWRd
IEZpeCBncmlkIHNob3J0aGFuZCBleHBhbnNpb24gb2YgaW5pdGlhbCB2YWx1ZXMKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvY29udGV4dC9jb250ZXh0
LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9jb25mb3JtYW5jZS9jb250ZXh0L2NvbnRleHQtYXR0
cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy1leHBlY3RlZC50eHQKaW5kZXgg
MjFkODgzMjdiNzY5ZmQ0OGViZWEzZGZjZmNiMGFkNzUwMmRhMjUzYy4uMGIzMmQ0ZmYzYTc5MjY2
OWYyMGE3MzE1YzI2NTU2MmQ1YjUyODMwZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ2wv
cGVuZGluZy9jb25mb3JtYW5jZS9jb250ZXh0L2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0
aC1zdGVuY2lsLWFudGlhbGlhcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ2wv
cGVuZGluZy9jb25mb3JtYW5jZS9jb250ZXh0L2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0
aC1zdGVuY2lsLWFudGlhbGlhcy1leHBlY3RlZC50eHQKQEAgLTEsNCArMSw0IEBACiBUaGlzIHRl
c3QgcnVucyB0aGUgV2ViR0wgVGVzdCBsaXN0ZWQgYmVsb3cgaW4gYW4gaWZyYW1lIGFuZCByZXBv
cnRzIFBBU1Mgb3IgRkFJTC4KIAotVGVzdDogLi4vLi4vcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmls
ZXMvY29uZm9ybWFuY2UvY29udGV4dC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3Rl
bmNpbC1hbnRpYWxpYXMuaHRtbD93ZWJnbFZlcnNpb249MgorVGVzdDogLi4vLi4vLi4vcmVzb3Vy
Y2VzL3BlbmRpbmdfd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9jb250ZXh0L2NvbnRleHQt
YXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sP3dlYmdsVmVyc2lv
bj0yCiBbIFBBU1MgXSBBbGwgdGVzdHMgcGFzc2VkCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJnbC9wZW5kaW5nL2NvbmZvcm1hbmNlL2NvbnRleHQvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhh
LWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5n
L2NvbmZvcm1hbmNlL2NvbnRleHQvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5j
aWwtYW50aWFsaWFzLmh0bWwKaW5kZXggNzgzOWUyNzdkYmM3NTM0MjUzMWFmNjdjZWY0YmVmMmE5
Yzk4Njk0YS4uOGMwMWIwOGE0OGQ0NzE1OWVlZTMxMDljNWE5ZmM0MWMyY2JmMmE5YSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9jb25mb3JtYW5jZS9jb250ZXh0L2NvbnRl
eHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sCisrKyBiL0xh
eW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvY29udGV4dC9jb250ZXh0LWF0dHJp
YnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbApAQCAtNCwxNCArNCwxNCBA
QAogPGhlYWQ+CiA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CiA8dGl0bGU+V2ViR0wgQ29uZm9ybWFu
Y2UgVGVzdCBXcmFwcGVyIGZvciBjb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNp
bC1hbnRpYWxpYXMuaHRtbDwvdGl0bGU+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vcmVzb3VyY2VzL3dlYmtpdC13ZWJnbC10
ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy93ZWJraXQt
d2ViZ2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5PgogPHA+VGhp
cyB0ZXN0IHJ1bnMgdGhlIFdlYkdMIFRlc3QgbGlzdGVkIGJlbG93IGluIGFuIGlmcmFtZSBhbmQg
cmVwb3J0cyBQQVNTIG9yIEZBSUwuPC9wPgotVGVzdDogPGEgaHJlZj0iLi4vLi4vcmVzb3VyY2Vz
L3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvY29udGV4dC9jb250ZXh0LWF0dHJpYnV0ZXMt
YWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbD93ZWJnbFZlcnNpb249MiI+Li4vLi4v
cmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvY29udGV4dC9jb250ZXh0LWF0
dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbD93ZWJnbFZlcnNpb249
MjwvYT4KK1Rlc3Q6IDxhIGhyZWY9Ii4uLy4uLy4uL3Jlc291cmNlcy9wZW5kaW5nX3dlYmdsX3Rl
c3RfZmlsZXMvY29uZm9ybWFuY2UvY29udGV4dC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVw
dGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbD93ZWJnbFZlcnNpb249MiI+Li4vLi4vLi4vcmVzb3Vy
Y2VzL3BlbmRpbmdfd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9jb250ZXh0L2NvbnRleHQt
YXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sP3dlYmdsVmVyc2lv
bj0yPC9hPgogPGRpdiBpZD0iaWZyYW1lIj4KLTxpZnJhbWUgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
d2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9jb250ZXh0L2NvbnRleHQtYXR0cmlidXRlcy1h
bHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sP3dlYmdsVmVyc2lvbj0yIiB3aWR0aD0i
ODAwIiBoZWlnaHQ9IjYwMCI+PC9pZnJhbWU+Cis8aWZyYW1lIHNyYz0iLi4vLi4vLi4vcmVzb3Vy
Y2VzL3BlbmRpbmdfd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9jb250ZXh0L2NvbnRleHQt
YXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sP3dlYmdsVmVyc2lv
bj0yIiB3aWR0aD0iODAwIiBoZWlnaHQ9IjYwMCI+PC9pZnJhbWU+CiA8L2Rpdj4KIDxkaXYgaWQ9
InJlc3VsdCI+PC9kaXY+CiA8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJnbC9w
ZW5kaW5nL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1yZXNlcnZlZC13b3Jkcy0y
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvZ2xz
bC9taXNjL3NoYWRlci13aXRoLXJlc2VydmVkLXdvcmRzLTItZXhwZWN0ZWQudHh0CmluZGV4IGY0
YWFmNWNiMGU5MjhiMzJmNmY0OWExODNmZDIxY2JmMTFiZmY1ZDIuLjljNzRkOGNkNzhjNDk3N2Fj
MjFlODk1ODA0NmNhYzNlNDcwOThjYzQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmdsL3Bl
bmRpbmcvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci13aXRoLXJlc2VydmVkLXdvcmRzLTIt
ZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2Uv
Z2xzbC9taXNjL3NoYWRlci13aXRoLXJlc2VydmVkLXdvcmRzLTItZXhwZWN0ZWQudHh0CkBAIC0x
LDQgKzEsNCBAQAogVGhpcyB0ZXN0IHJ1bnMgdGhlIFdlYkdMIFRlc3QgbGlzdGVkIGJlbG93IGlu
IGFuIGlmcmFtZSBhbmQgcmVwb3J0cyBQQVNTIG9yIEZBSUwuCiAKLVRlc3Q6IC4uLy4uLy4uL3Jl
c291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0
aC1yZXNlcnZlZC13b3Jkcy0yLmh0bWw/d2ViZ2xWZXJzaW9uPTIKK1Rlc3Q6IC4uLy4uLy4uLy4u
L3Jlc291cmNlcy9wZW5kaW5nX3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvZ2xzbC9taXNj
L3NoYWRlci13aXRoLXJlc2VydmVkLXdvcmRzLTIuaHRtbD93ZWJnbFZlcnNpb249MgogWyBQQVNT
IF0gQWxsIHRlc3RzIHBhc3NlZApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGlu
Zy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXdpdGgtcmVzZXJ2ZWQtd29yZHMtMi5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVy
LXdpdGgtcmVzZXJ2ZWQtd29yZHMtMi5odG1sCmluZGV4IDIxZWMwZGNlYjIyNTAyNWNjZjY4YWQ1
ZjRmNmZmMTNiMDllY2U1OTQuLjMxOWZiYzM0OTFmMGU4ZWUwMTA4ODQ1YjI5YzQyMjM4MDc1MjE2
NmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvZ2xz
bC9taXNjL3NoYWRlci13aXRoLXJlc2VydmVkLXdvcmRzLTIuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJnbC9wZW5kaW5nL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1yZXNlcnZl
ZC13b3Jkcy0yLmh0bWwKQEAgLTQsMTQgKzQsMTQgQEAKIDxoZWFkPgogPG1ldGEgY2hhcnNldD0i
dXRmLTgiPgogPHRpdGxlPldlYkdMIENvbmZvcm1hbmNlIFRlc3QgV3JhcHBlciBmb3Igc2hhZGVy
LXdpdGgtcmVzZXJ2ZWQtd29yZHMtMi5odG1sPC90aXRsZT4KLTxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi8uLi9yZXNvdXJj
ZXMvd2Via2l0LXdlYmdsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4v
Li4vLi4vcmVzb3VyY2VzL3dlYmtpdC13ZWJnbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0Pgog
PC9oZWFkPgogPGJvZHk+CiA8cD5UaGlzIHRlc3QgcnVucyB0aGUgV2ViR0wgVGVzdCBsaXN0ZWQg
YmVsb3cgaW4gYW4gaWZyYW1lIGFuZCByZXBvcnRzIFBBU1Mgb3IgRkFJTC48L3A+Ci1UZXN0OiA8
YSBocmVmPSIuLi8uLi8uLi9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9n
bHNsL21pc2Mvc2hhZGVyLXdpdGgtcmVzZXJ2ZWQtd29yZHMtMi5odG1sP3dlYmdsVmVyc2lvbj0y
Ij4uLi8uLi8uLi9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9nbHNsL21p
c2Mvc2hhZGVyLXdpdGgtcmVzZXJ2ZWQtd29yZHMtMi5odG1sP3dlYmdsVmVyc2lvbj0yPC9hPgor
VGVzdDogPGEgaHJlZj0iLi4vLi4vLi4vLi4vcmVzb3VyY2VzL3BlbmRpbmdfd2ViZ2xfdGVzdF9m
aWxlcy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXdpdGgtcmVzZXJ2ZWQtd29yZHMtMi5o
dG1sP3dlYmdsVmVyc2lvbj0yIj4uLi8uLi8uLi8uLi9yZXNvdXJjZXMvcGVuZGluZ193ZWJnbF90
ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1yZXNlcnZlZC13b3Jk
cy0yLmh0bWw/d2ViZ2xWZXJzaW9uPTI8L2E+CiA8ZGl2IGlkPSJpZnJhbWUiPgotPGlmcmFtZSBz
cmM9Ii4uLy4uLy4uL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2dsc2wv
bWlzYy9zaGFkZXItd2l0aC1yZXNlcnZlZC13b3Jkcy0yLmh0bWw/d2ViZ2xWZXJzaW9uPTIiIHdp
ZHRoPSI4MDAiIGhlaWdodD0iNjAwIj48L2lmcmFtZT4KKzxpZnJhbWUgc3JjPSIuLi8uLi8uLi8u
Li9yZXNvdXJjZXMvcGVuZGluZ193ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2dsc2wvbWlz
Yy9zaGFkZXItd2l0aC1yZXNlcnZlZC13b3Jkcy0yLmh0bWw/d2ViZ2xWZXJzaW9uPTIiIHdpZHRo
PSI4MDAiIGhlaWdodD0iNjAwIj48L2lmcmFtZT4KIDwvZGl2PgogPGRpdiBpZD0icmVzdWx0Ij48
L2Rpdj4KIDwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvY29u
Zm9ybWFuY2UvZ2xzbC9taXNjL3N3aXp6bGUtYXMtbHZhbHVlLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3dlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3N3aXp6bGUtYXMtbHZh
bHVlLWV4cGVjdGVkLnR4dAppbmRleCAwNzVjM2UwMzJlMjE4MjQ1ODk4NWQxNTY5NGNjM2Y4OTdk
OTEzOTA5Li44NWQ1Yjg5NTQxNDk2NjI4MGZjYWEyN2FmZTkyY2JkYWM5OTU2MWEwIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zd2l6
emxlLWFzLWx2YWx1ZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGlu
Zy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc3dpenpsZS1hcy1sdmFsdWUtZXhwZWN0ZWQudHh0CkBA
IC0xLDUgKzEsNSBAQAogVGhpcyB0ZXN0IHJ1bnMgdGhlIFdlYkdMIFRlc3QgbGlzdGVkIGJlbG93
IGluIGFuIGlmcmFtZSBhbmQgcmVwb3J0cyBQQVNTIG9yIEZBSUwuCiAKLVRlc3Q6IC4uLy4uLy4u
L3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zd2l6emxl
LWFzLWx2YWx1ZS5odG1sCitUZXN0OiAuLi8uLi8uLi8uLi9yZXNvdXJjZXMvcGVuZGluZ193ZWJn
bF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zd2l6emxlLWFzLWx2YWx1ZS5odG1s
CiAKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9jb25mb3JtYW5jZS9n
bHNsL21pc2Mvc3dpenpsZS1hcy1sdmFsdWUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdsL3BlbmRp
bmcvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3N3aXp6bGUtYXMtbHZhbHVlLmh0bWwKaW5kZXggZjE4
OTUzNjNlNjI1NTc4YmJiMmUzZGNhMzZhODVmYmNjZGJmM2Q5Zi4uNTc4OWJhNTBiMjljZTk2ZTVi
Y2NjODkyNDFlZjliYzVjN2M1NjI0MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ2wvcGVu
ZGluZy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc3dpenpsZS1hcy1sdmFsdWUuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zd2l6emxlLWFz
LWx2YWx1ZS5odG1sCkBAIC05LDkgKzksOSBAQAogPC9oZWFkPgogPGJvZHk+CiA8cD5UaGlzIHRl
c3QgcnVucyB0aGUgV2ViR0wgVGVzdCBsaXN0ZWQgYmVsb3cgaW4gYW4gaWZyYW1lIGFuZCByZXBv
cnRzIFBBU1Mgb3IgRkFJTC48L3A+Ci1UZXN0OiA8YSBocmVmPSIuLi8uLi8uLi9yZXNvdXJjZXMv
d2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc3dpenpsZS1hcy1sdmFsdWUu
aHRtbCI+Li4vLi4vLi4vcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvZ2xz
bC9taXNjL3N3aXp6bGUtYXMtbHZhbHVlLmh0bWw8L2E+CitUZXN0OiA8YSBocmVmPSIuLi8uLi8u
Li8uLi9yZXNvdXJjZXMvcGVuZGluZ193ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2dsc2wv
bWlzYy9zd2l6emxlLWFzLWx2YWx1ZS5odG1sIj4uLi8uLi8uLi8uLi9yZXNvdXJjZXMvcGVuZGlu
Z193ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zd2l6emxlLWFzLWx2YWx1
ZS5odG1sPC9hPgogPGRpdiBpZD0iaWZyYW1lIj4KLTxpZnJhbWUgc3JjPSIuLi8uLi8uLi9yZXNv
dXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc3dpenpsZS1hcy1s
dmFsdWUuaHRtbCIgd2lkdGg9IjgwMCIgaGVpZ2h0PSI2MDAiPjwvaWZyYW1lPgorPGlmcmFtZSBz
cmM9Ii4uLy4uLy4uLy4uL3Jlc291cmNlcy9wZW5kaW5nX3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9y
bWFuY2UvZ2xzbC9taXNjL3N3aXp6bGUtYXMtbHZhbHVlLmh0bWwiIHdpZHRoPSI4MDAiIGhlaWdo
dD0iNjAwIj48L2lmcmFtZT4KIDwvZGl2PgogPGRpdiBpZD0icmVzdWx0Ij48L2Rpdj4KIDwvYm9k
eT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvdGV4
dHVyZXMvbWlzYy90ZXgtaW1hZ2UtdmlkZW8tcmVwZWF0ZWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvd2ViZ2wvcGVuZGluZy9jb25mb3JtYW5jZS90ZXh0dXJlcy9taXNjL3RleC1pbWFnZS12
aWRlby1yZXBlYXRlZC1leHBlY3RlZC50eHQKaW5kZXggOGRjMGJiNGI1NTllZTIxYzMxMGYzNDQ1
NjZjNDgwMjU3NTFmMjg0Ny4uZmY0ZWRlZDYzOGI2YzI5YTRhMDEyNWQzMjdlMTMxZDlkYTkyNjg3
YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9jb25mb3JtYW5jZS90ZXh0
dXJlcy9taXNjL3RleC1pbWFnZS12aWRlby1yZXBlYXRlZC1leHBlY3RlZC50eHQKKysrIGIvTGF5
b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9jb25mb3JtYW5jZS90ZXh0dXJlcy9taXNjL3RleC1pbWFn
ZS12aWRlby1yZXBlYXRlZC1leHBlY3RlZC50eHQKQEAgLTEsNCArMSw0IEBACiBUaGlzIHRlc3Qg
cnVucyB0aGUgV2ViR0wgVGVzdCBsaXN0ZWQgYmVsb3cgaW4gYW4gaWZyYW1lIGFuZCByZXBvcnRz
IFBBU1Mgb3IgRkFJTC4KIAotVGVzdDogLi4vLi4vLi4vcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmls
ZXMvY29uZm9ybWFuY2UvdGV4dHVyZXMvbWlzYy90ZXgtaW1hZ2UtdmlkZW8tcmVwZWF0ZWQuaHRt
bAorVGVzdDogLi4vLi4vLi4vLi4vcmVzb3VyY2VzL3BlbmRpbmdfd2ViZ2xfdGVzdF9maWxlcy9j
b25mb3JtYW5jZS90ZXh0dXJlcy9taXNjL3RleC1pbWFnZS12aWRlby1yZXBlYXRlZC5odG1sCiBb
IFBBU1MgXSBBbGwgdGVzdHMgcGFzc2VkCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJnbC9w
ZW5kaW5nL2NvbmZvcm1hbmNlL3RleHR1cmVzL21pc2MvdGV4LWltYWdlLXZpZGVvLXJlcGVhdGVk
Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL2NvbmZvcm1hbmNlL3RleHR1cmVzL21p
c2MvdGV4LWltYWdlLXZpZGVvLXJlcGVhdGVkLmh0bWwKaW5kZXggMDBhMmQ4ZmEwNzk4ZWJmZTQy
MDkzZTMzMTcxYzFjMzgxZTJmNDQyZC4uMWI3YzQ1NWI5NGRiNDYwOWEyYTA3ZGUyNzIzMzAwMTAw
OGMyNGNkNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9jb25mb3JtYW5j
ZS90ZXh0dXJlcy9taXNjL3RleC1pbWFnZS12aWRlby1yZXBlYXRlZC5odG1sCisrKyBiL0xheW91
dFRlc3RzL3dlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvdGV4dHVyZXMvbWlzYy90ZXgtaW1hZ2Ut
dmlkZW8tcmVwZWF0ZWQuaHRtbApAQCAtNCwxNCArNCwxNCBAQAogPGhlYWQ+CiA8bWV0YSBjaGFy
c2V0PSJ1dGYtOCI+CiA8dGl0bGU+V2ViR0wgQ29uZm9ybWFuY2UgVGVzdCBXcmFwcGVyIGZvciBj
b250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbDwvdGl0
bGU+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiIHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL3dlYmtpdC13ZWJnbC10ZXN0LWhhcm5lc3MuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uLy4uLy4uL3Jlc291cmNlcy93ZWJraXQtd2ViZ2wtdGVz
dC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5PgogPHA+VGhpcyB0ZXN0IHJ1
bnMgdGhlIFdlYkdMIFRlc3QgbGlzdGVkIGJlbG93IGluIGFuIGlmcmFtZSBhbmQgcmVwb3J0cyBQ
QVNTIG9yIEZBSUwuPC9wPgotVGVzdDogPGEgaHJlZj0iLi4vLi4vLi4vcmVzb3VyY2VzL3dlYmds
X3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvdGV4dHVyZXMvbWlzYy90ZXgtaW1hZ2UtdmlkZW8tcmVw
ZWF0ZWQuaHRtbCI+Li4vLi4vLi4vcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFu
Y2UvdGV4dHVyZXMvbWlzYy90ZXgtaW1hZ2UtdmlkZW8tcmVwZWF0ZWQuaHRtbDwvYT4KK1Rlc3Q6
IDxhIGhyZWY9Ii4uLy4uLy4uLy4uL3Jlc291cmNlcy9wZW5kaW5nX3dlYmdsX3Rlc3RfZmlsZXMv
Y29uZm9ybWFuY2UvdGV4dHVyZXMvbWlzYy90ZXgtaW1hZ2UtdmlkZW8tcmVwZWF0ZWQuaHRtbCI+
Li4vLi4vLi4vLi4vcmVzb3VyY2VzL3BlbmRpbmdfd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5j
ZS90ZXh0dXJlcy9taXNjL3RleC1pbWFnZS12aWRlby1yZXBlYXRlZC5odG1sPC9hPgogPGRpdiBp
ZD0iaWZyYW1lIj4KLTxpZnJhbWUgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9m
aWxlcy9jb25mb3JtYW5jZS90ZXh0dXJlcy9taXNjL3RleC1pbWFnZS12aWRlby1yZXBlYXRlZC5o
dG1sIiB3aWR0aD0iODAwIiBoZWlnaHQ9IjYwMCI+PC9pZnJhbWU+Cis8aWZyYW1lIHNyYz0iLi4v
Li4vLi4vLi4vcmVzb3VyY2VzL3BlbmRpbmdfd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS90
ZXh0dXJlcy9taXNjL3RleC1pbWFnZS12aWRlby1yZXBlYXRlZC5odG1sIiB3aWR0aD0iODAwIiBo
ZWlnaHQ9IjYwMCI+PC9pZnJhbWU+CiA8L2Rpdj4KIDxkaXYgaWQ9InJlc3VsdCI+PC9kaXY+CiA8
L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL2NvbmZvcm1hbmNl
Mi9nbHNsMy9lbXB0eS1zaGFkZXItd2l0aC1vdXRwdXQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvd2ViZ2wvcGVuZGluZy9jb25mb3JtYW5jZTIvZ2xzbDMvZW1wdHktc2hhZGVyLXdpdGgtb3V0
cHV0LWV4cGVjdGVkLnR4dAppbmRleCA5YzE5MWRhOTE5OTE0MWJiNzdlZmE4MDVkZjU4ZDY0YWM1
YmRmOWU4Li42ODM0MTBmNDM1MmI1ODgzN2ViYmUwMmZkNjE5YTFhZmMxOTNkOTkzIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL2NvbmZvcm1hbmNlMi9nbHNsMy9lbXB0eS1z
aGFkZXItd2l0aC1vdXRwdXQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3dlYmdsL3Bl
bmRpbmcvY29uZm9ybWFuY2UyL2dsc2wzL2VtcHR5LXNoYWRlci13aXRoLW91dHB1dC1leHBlY3Rl
ZC50eHQKQEAgLTEsNCArMSw0IEBACiBUaGlzIHRlc3QgcnVucyB0aGUgV2ViR0wgVGVzdCBsaXN0
ZWQgYmVsb3cgaW4gYW4gaWZyYW1lIGFuZCByZXBvcnRzIFBBU1Mgb3IgRkFJTC4KIAotVGVzdDog
Li4vLi4vcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UyL2dsc2wzL2VtcHR5
LXNoYWRlci13aXRoLW91dHB1dC5odG1sP3dlYmdsVmVyc2lvbj0yCitUZXN0OiAuLi8uLi8uLi9y
ZXNvdXJjZXMvcGVuZGluZ193ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlMi9nbHNsMy9lbXB0
eS1zaGFkZXItd2l0aC1vdXRwdXQuaHRtbD93ZWJnbFZlcnNpb249MgogWyBQQVNTIF0gQWxsIHRl
c3RzIHBhc3NlZApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9jb25mb3Jt
YW5jZTIvZ2xzbDMvZW1wdHktc2hhZGVyLXdpdGgtb3V0cHV0Lmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJnbC9wZW5kaW5nL2NvbmZvcm1hbmNlMi9nbHNsMy9lbXB0eS1zaGFkZXItd2l0aC1vdXRwdXQu
aHRtbAppbmRleCBlM2FhYzRkMmU2OThlYjIxNmI1YjgyYjFiNmVmOTc5MzdkY2JiNzUyLi40YzFk
YWM4ODE3MDAwNjZiN2QzMjY2YjcwOWQwNTVkMmVhODExYjQ0IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy93ZWJnbC9wZW5kaW5nL2NvbmZvcm1hbmNlMi9nbHNsMy9lbXB0eS1zaGFkZXItd2l0aC1v
dXRwdXQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL2NvbmZvcm1hbmNlMi9n
bHNsMy9lbXB0eS1zaGFkZXItd2l0aC1vdXRwdXQuaHRtbApAQCAtNCwxNCArNCwxNSBAQAogPGhl
YWQ+CiA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CiA8dGl0bGU+V2ViR0wgQ29uZm9ybWFuY2UgVGVz
dCBXcmFwcGVyIGZvciBlbXB0eS1zaGFkZXItd2l0aC1vdXRwdXQuaHRtbDwvdGl0bGU+Ci08c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4v
Li4vcmVzb3VyY2VzL3dlYmtpdC13ZWJnbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
Ii4uLy4uLy4uL3Jlc291cmNlcy93ZWJraXQtd2ViZ2wtdGVzdC1oYXJuZXNzLmpzIj48L3Njcmlw
dD4KIDwvaGVhZD4KIDxib2R5PgogPHA+VGhpcyB0ZXN0IHJ1bnMgdGhlIFdlYkdMIFRlc3QgbGlz
dGVkIGJlbG93IGluIGFuIGlmcmFtZSBhbmQgcmVwb3J0cyBQQVNTIG9yIEZBSUwuPC9wPgotVGVz
dDogPGEgaHJlZj0iLi4vLi4vcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2Uy
L2dsc2wzL2VtcHR5LXNoYWRlci13aXRoLW91dHB1dC5odG1sP3dlYmdsVmVyc2lvbj0yIj4uLi8u
Li9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZTIvZ2xzbDMvZW1wdHktc2hh
ZGVyLXdpdGgtb3V0cHV0Lmh0bWw/d2ViZ2xWZXJzaW9uPTI8L2E+CitUZXN0OiA8YSBocmVmPSIu
Li8uLi8uLi9yZXNvdXJjZXMvcGVuZGluZ193ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlMi9n
bHNsMy9lbXB0eS1zaGFkZXItd2l0aC1vdXRwdXQuaHRtbD93ZWJnbFZlcnNpb249MiI+Li4vLi4v
Li4vcmVzb3VyY2VzL3BlbmRpbmdfd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZTIvZ2xzbDMv
ZW1wdHktc2hhZGVyLXdpdGgtb3V0cHV0Lmh0bWw/d2ViZ2xWZXJzaW9uPTI8L2E+CiA8ZGl2IGlk
PSJpZnJhbWUiPgotPGlmcmFtZSBzcmM9Ii4uLy4uL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVz
L2NvbmZvcm1hbmNlMi9nbHNsMy9lbXB0eS1zaGFkZXItd2l0aC1vdXRwdXQuaHRtbD93ZWJnbFZl
cnNpb249MiIgd2lkdGg9IjgwMCIgaGVpZ2h0PSI2MDAiPjwvaWZyYW1lPgorPGlmcmFtZSBzcmM9
Ii4uLy4uLy4uL3Jlc291cmNlcy9wZW5kaW5nX3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2Uy
L2dsc2wzL2VtcHR5LXNoYWRlci13aXRoLW91dHB1dC5odG1sP3dlYmdsVmVyc2lvbj0yIiB3aWR0
aD0iODAwIiBoZWlnaHQ9IjYwMCI+PC9pZnJhbWU+Cis8aWZyYW1lIHNyYz0iLi4vLi4vLi4vcmVz
b3VyY2VzL3BlbmRpbmdfd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZTIvZ2xzbDMvZW1wdHkt
c2hhZGVyLXdpdGgtb3V0cHV0Lmh0bWw/d2ViZ2xWZXJzaW9uPTIiIHdpZHRoPSI4MDAiIGhlaWdo
dD0iNjAwIj48L2lmcmFtZT4KIDwvZGl2PgogPGRpdiBpZD0icmVzdWx0Ij48L2Rpdj4KIDwvYm9k
eT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UyL2ds
c2wzL2Zsb2F0LWNvbnN0YW50LWV4cHJlc3Npb25zLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3dlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UyL2dsc2wzL2Zsb2F0LWNvbnN0YW50LWV4cHJlc3Np
b25zLWV4cGVjdGVkLnR4dAppbmRleCBhOTUwMjZhNjRmNDZjM2Y4OTgwYzg4ODZlOGVlODU0ZmUx
YTZkNzFjLi43NDAwZjgyMDczMGU5YjNiNWRlOTBkOWE4Yjk5ZTcyNmQ0MmRkMmMwIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL2NvbmZvcm1hbmNlMi9nbHNsMy9mbG9hdC1j
b25zdGFudC1leHByZXNzaW9ucy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ2wv
cGVuZGluZy9jb25mb3JtYW5jZTIvZ2xzbDMvZmxvYXQtY29uc3RhbnQtZXhwcmVzc2lvbnMtZXhw
ZWN0ZWQudHh0CkBAIC0xLDQgKzEsNCBAQAogVGhpcyB0ZXN0IHJ1bnMgdGhlIFdlYkdMIFRlc3Qg
bGlzdGVkIGJlbG93IGluIGFuIGlmcmFtZSBhbmQgcmVwb3J0cyBQQVNTIG9yIEZBSUwuCiAKLVRl
c3Q6IC4uLy4uL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlMi9nbHNsMy9m
bG9hdC1jb25zdGFudC1leHByZXNzaW9ucy5odG1sP3dlYmdsVmVyc2lvbj0yCitUZXN0OiAuLi8u
Li8uLi9yZXNvdXJjZXMvcGVuZGluZ193ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlMi9nbHNs
My9mbG9hdC1jb25zdGFudC1leHByZXNzaW9ucy5odG1sP3dlYmdsVmVyc2lvbj0yCiBbIFBBU1Mg
XSBBbGwgdGVzdHMgcGFzc2VkCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5n
L2NvbmZvcm1hbmNlMi9nbHNsMy9mbG9hdC1jb25zdGFudC1leHByZXNzaW9ucy5odG1sIGIvTGF5
b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9jb25mb3JtYW5jZTIvZ2xzbDMvZmxvYXQtY29uc3RhbnQt
ZXhwcmVzc2lvbnMuaHRtbAppbmRleCAxMjAwYTYyODAwMjY5MDYxMzk3YzAwMTE0ZDg1MWE4ODkw
MGJjYWRlLi40Y2M2NzBjNjFiMmUwOGQzMzQ3YTE3OTAxZDJmYjg4YmFhNTczMjMwIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL2NvbmZvcm1hbmNlMi9nbHNsMy9mbG9hdC1j
b25zdGFudC1leHByZXNzaW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcv
Y29uZm9ybWFuY2UyL2dsc2wzL2Zsb2F0LWNvbnN0YW50LWV4cHJlc3Npb25zLmh0bWwKQEAgLTQs
MTQgKzQsMTQgQEAKIDxoZWFkPgogPG1ldGEgY2hhcnNldD0idXRmLTgiPgogPHRpdGxlPldlYkdM
IENvbmZvcm1hbmNlIFRlc3QgV3JhcHBlciBmb3IgZmxvYXQtY29uc3RhbnQtZXhwcmVzc2lvbnMu
aHRtbDwvdGl0bGU+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIHNyYz0iLi4vLi4vcmVzb3VyY2VzL3dlYmtpdC13ZWJnbC10ZXN0LWhhcm5lc3Mu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy93ZWJraXQtd2ViZ2wtdGVzdC1o
YXJuZXNzLmpzIj48L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5PgogPHA+VGhpcyB0ZXN0IHJ1bnMg
dGhlIFdlYkdMIFRlc3QgbGlzdGVkIGJlbG93IGluIGFuIGlmcmFtZSBhbmQgcmVwb3J0cyBQQVNT
IG9yIEZBSUwuPC9wPgotVGVzdDogPGEgaHJlZj0iLi4vLi4vcmVzb3VyY2VzL3dlYmdsX3Rlc3Rf
ZmlsZXMvY29uZm9ybWFuY2UyL2dsc2wzL2Zsb2F0LWNvbnN0YW50LWV4cHJlc3Npb25zLmh0bWw/
d2ViZ2xWZXJzaW9uPTIiPi4uLy4uL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1h
bmNlMi9nbHNsMy9mbG9hdC1jb25zdGFudC1leHByZXNzaW9ucy5odG1sP3dlYmdsVmVyc2lvbj0y
PC9hPgorVGVzdDogPGEgaHJlZj0iLi4vLi4vLi4vcmVzb3VyY2VzL3BlbmRpbmdfd2ViZ2xfdGVz
dF9maWxlcy9jb25mb3JtYW5jZTIvZ2xzbDMvZmxvYXQtY29uc3RhbnQtZXhwcmVzc2lvbnMuaHRt
bD93ZWJnbFZlcnNpb249MiI+Li4vLi4vLi4vcmVzb3VyY2VzL3BlbmRpbmdfd2ViZ2xfdGVzdF9m
aWxlcy9jb25mb3JtYW5jZTIvZ2xzbDMvZmxvYXQtY29uc3RhbnQtZXhwcmVzc2lvbnMuaHRtbD93
ZWJnbFZlcnNpb249MjwvYT4KIDxkaXYgaWQ9ImlmcmFtZSI+Ci08aWZyYW1lIHNyYz0iLi4vLi4v
cmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UyL2dsc2wzL2Zsb2F0LWNvbnN0
YW50LWV4cHJlc3Npb25zLmh0bWw/d2ViZ2xWZXJzaW9uPTIiIHdpZHRoPSI4MDAiIGhlaWdodD0i
NjAwIj48L2lmcmFtZT4KKzxpZnJhbWUgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvcGVuZGluZ193
ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlMi9nbHNsMy9mbG9hdC1jb25zdGFudC1leHByZXNz
aW9ucy5odG1sP3dlYmdsVmVyc2lvbj0yIiB3aWR0aD0iODAwIiBoZWlnaHQ9IjYwMCI+PC9pZnJh
bWU+CiA8L2Rpdj4KIDxkaXYgaWQ9InJlc3VsdCI+PC9kaXY+CiA8L2JvZHk+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyBiL0xh
eW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWJkYmNlZDcxMTYwZjExNjNjNjExNTNhNmM2YTNiYjFi
ZDAwOWI1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xh
eW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzCisrKyAvZGV2
L251bGwKQEAgLTEsNTE5ICswLDAgQEAKLS8qCi0qKiBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEto
cm9ub3MgR3JvdXAgSW5jLgotKioKLSoqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy
ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0qKiBjb3B5IG9mIHRoaXMg
c29mdHdhcmUgYW5kL29yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi0qKiAi
TWF0ZXJpYWxzIiksIHRvIGRlYWwgaW4gdGhlIE1hdGVyaWFscyB3aXRob3V0IHJlc3RyaWN0aW9u
LCBpbmNsdWRpbmcKLSoqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w
eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKLSoqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFu
ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgTWF0ZXJpYWxzLCBhbmQgdG8KLSoqIHBlcm1pdCBwZXJz
b25zIHRvIHdob20gdGhlIE1hdGVyaWFscyBhcmUgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0
IHRvCi0qKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0qKgotKiogVGhlIGFib3ZlIGNvcHly
aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQK
LSoqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIE1hdGVyaWFs
cy4KLSoqCi0qKiBUSEUgTUFURVJJQUxTIEFSRSBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB
UlJBTlRZIE9GIEFOWSBLSU5ELAotKiogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVU
IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0qKiBNRVJDSEFOVEFCSUxJVFksIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCi0qKiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC
TEUgRk9SIEFOWQotKiogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVS
IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKLSoqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H
IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCi0qKiBNQVRFUklBTFMgT1Ig
VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgTUFURVJJQUxTLgotKi8KLQotKGZ1bmN0
aW9uKCkgewotICB2YXIgdGVzdEhhcm5lc3NJbml0aWFsaXplZCA9IGZhbHNlOwotCi0gIHZhciBp
bml0Tm9uS2hyb25vc0ZyYW1ld29yayA9IGZ1bmN0aW9uKCkgewotICAgIGlmICh0ZXN0SGFybmVz
c0luaXRpYWxpemVkKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHRlc3RIYXJuZXNzSW5p
dGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgLyogLS0gcGxhZm9ybSBzcGVjaWZpYyBjb2RlIC0tICov
Ci0KLSAgICAvLyBXZWJLaXQgU3BlY2lmaWMgY29kZS4gQWRkIHlvdXIgY29kZSBoZXJlLgotICAg
IGlmICh3aW5kb3cudGVzdFJ1bm5lciAmJiAhd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
Ci0gICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIgPSB3aW5kb3cudGVzdFJ1bm5lcjsK
LSAgICB9Ci0KLSAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Ci0gICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Ci0gICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7Ci0gICAgfQotICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7
Ci0gICAgICAvLyBUaGUgV2ViS2l0IHRlc3Rpbmcgc3lzdGVtIGNvbXBhcmVzIGNvbnNvbGUgb3V0
cHV0LgotICAgICAgLy8gQmVjYXVzZSB0aGUgb3V0cHV0IG9mIHRoZSBXZWJHTCBUZXN0cyBpcyBH
UFUgZGVwZW5kZW50Ci0gICAgICAvLyB3ZSB0dXJuIG9mZiBjb25zb2xlIG1lc3NhZ2VzLgotICAg
ICAgd2luZG93LmNvbnNvbGUubG9nID0gZnVuY3Rpb24oKSB7IH07Ci0gICAgICB3aW5kb3cuY29u
c29sZS5lcnJvciA9IGZ1bmN0aW9uKCkgeyB9OwotICAgICAgd2luZG93LmludGVybmFscy5zZXR0
aW5ncy5zZXRXZWJHTEVycm9yc1RvQ29uc29sZUVuYWJsZWQoZmFsc2UpOwotCi0gICAgICAvLyBS
QUYgZG9lc24ndCB3b3JrIGluIExheW91dFRlc3RzLiBEaXNhYmxlIGl0IHNvIHRoZSB0ZXN0cyB3
aWxsCi0gICAgICAvLyB1c2Ugc2V0VGltZW91dCBpbnN0ZWFkLgotICAgICAgd2luZG93LnJlcXVl
c3RBbmltYXRpb25GcmFtZSA9IHVuZGVmaW5lZDsKLSAgICAgIHdpbmRvdy53ZWJraXRSZXF1ZXN0
QW5pbWF0aW9uRnJhbWUgPSB1bmRlZmluZWQ7Ci0gICAgfQotCi0gICAgLyogLS0gZW5kIHBsYXRm
b3JtIHNwZWNpZmljIGNvZGUgLS0qLwotICB9Ci0KLSAgdGhpcy5pbml0VGVzdGluZ0hhcm5lc3Mg
PSBmdW5jdGlvbigpIHsKLSAgICBpbml0Tm9uS2hyb25vc0ZyYW1ld29yaygpOwotICB9Ci19KCkp
OwotCi1mdW5jdGlvbiBub25LaHJvbm9zRnJhbWV3b3JrTm90aWZ5RG9uZSgpIHsKLSAgLy8gV2Vi
S2l0IFNwZWNpZmljIGNvZGUuIEFkZCB5b3VyIGNvZGUgaGVyZS4KLSAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikgewotICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUo
KTsKLSAgfQotfQotCi1mdW5jdGlvbiByZXBvcnRUZXN0UmVzdWx0c1RvSGFybmVzcyhzdWNjZXNz
LCBtc2cpIHsKLSAgaWYgKHdpbmRvdy5wYXJlbnQud2ViZ2xUZXN0SGFybmVzcykgewotICAgIHdp
bmRvdy5wYXJlbnQud2ViZ2xUZXN0SGFybmVzcy5yZXBvcnRSZXN1bHRzKHdpbmRvdy5sb2NhdGlv
bi5wYXRobmFtZSwgc3VjY2VzcywgbXNnKTsKLSAgfQotfQotCi1mdW5jdGlvbiBub3RpZnlGaW5p
c2hlZFRvSGFybmVzcygpIHsKLSAgaWYgKHdpbmRvdy5wYXJlbnQud2ViZ2xUZXN0SGFybmVzcykg
ewotICAgIHdpbmRvdy5wYXJlbnQud2ViZ2xUZXN0SGFybmVzcy5ub3RpZnlGaW5pc2hlZCh3aW5k
b3cubG9jYXRpb24ucGF0aG5hbWUpOwotICB9Ci0gIGlmICh3aW5kb3cubm9uS2hyb25vc0ZyYW1l
d29ya05vdGlmeURvbmUpIHsKLSAgICB3aW5kb3cubm9uS2hyb25vc0ZyYW1ld29ya05vdGlmeURv
bmUoKTsKLSAgfQotfQotCi1mdW5jdGlvbiBfbG9nVG9Db25zb2xlKG1zZykKLXsKLSAgICBpZiAo
d2luZG93LmNvbnNvbGUpCi0gICAgICB3aW5kb3cuY29uc29sZS5sb2cobXNnKTsKLX0KLQotdmFy
IF9qc1Rlc3RQcmVWZXJib3NlTG9nZ2luZyA9IGZhbHNlOwotCi1mdW5jdGlvbiBlbmFibGVKU1Rl
c3RQcmVWZXJib3NlTG9nZ2luZygpCi17Ci0gICAgX2pzVGVzdFByZVZlcmJvc2VMb2dnaW5nID0g
dHJ1ZTsKLX0KLQotZnVuY3Rpb24gZGVzY3JpcHRpb24obXNnKQotewotICAgIGluaXRUZXN0aW5n
SGFybmVzcygpOwotICAgIGlmIChtc2cgPT09IHVuZGVmaW5lZCkgewotICAgICAgbXNnID0gZG9j
dW1lbnQudGl0bGU7Ci0gICAgfQotICAgIC8vIEZvciBNU0lFIDYgY29tcGF0aWJpbGl0eQotICAg
IHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgIHNwYW4uaW5u
ZXJIVE1MID0gJzxwPicgKyBtc2cgKyAnPC9wPjxwPk9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiPHNwYW4gY2xhc3M9InBhc3MiPlBBU1M8L3NwYW4+IiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENPTVBMRVRFPC9zcGFuPiIuPC9wPic7
Ci0gICAgdmFyIGRlc2NyaXB0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRlc2NyaXB0
aW9uIik7Ci0gICAgaWYgKGRlc2NyaXB0aW9uLmZpcnN0Q2hpbGQpCi0gICAgICAgIGRlc2NyaXB0
aW9uLnJlcGxhY2VDaGlsZChzcGFuLCBkZXNjcmlwdGlvbi5maXJzdENoaWxkKTsKLSAgICBlbHNl
Ci0gICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZENoaWxkKHNwYW4pOwotICAgIGlmIChfanNUZXN0
UHJlVmVyYm9zZUxvZ2dpbmcpIHsKLSAgICAgICAgX2xvZ1RvQ29uc29sZShtc2cpOwotICAgIH0K
LX0KLQotZnVuY3Rpb24gX2FkZFNwYW4oY29udGVudHMpCi17Ci0gICAgdmFyIHNwYW4gPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImNvbnNvbGUiKS5hcHBlbmRDaGlsZChzcGFuKTsgLy8gaW5zZXJ0IGl0IGZpcnN0IHNvIFhIVE1M
IGtub3dzIHRoZSBuYW1lc3BhY2UKLSAgICBzcGFuLmlubmVySFRNTCA9IGNvbnRlbnRzICsgJzxi
ciAvPic7Ci19Ci0KLWZ1bmN0aW9uIGRlYnVnKG1zZykKLXsKLSAgICBfYWRkU3Bhbihtc2cpOwot
ICAgIGlmIChfanNUZXN0UHJlVmVyYm9zZUxvZ2dpbmcpIHsKLQlfbG9nVG9Db25zb2xlKG1zZyk7
Ci0gICAgfQotfQotCi1mdW5jdGlvbiBlc2NhcGVIVE1MKHRleHQpCi17Ci0gICAgcmV0dXJuIHRl
eHQucmVwbGFjZSgvJi9nLCAiJmFtcDsiKS5yZXBsYWNlKC88L2csICImbHQ7Iik7Ci19Ci0KLWZ1
bmN0aW9uIHRlc3RQYXNzZWQobXNnKQotewotICAgIHJlcG9ydFRlc3RSZXN1bHRzVG9IYXJuZXNz
KHRydWUsIG1zZyk7Ci0gICAgX2FkZFNwYW4oJzxzcGFuPjxzcGFuIGNsYXNzPSJwYXNzIj5QQVNT
PC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKLSAgICBpZiAoX2pzVGVz
dFByZVZlcmJvc2VMb2dnaW5nKSB7Ci0JX2xvZ1RvQ29uc29sZSgnUEFTUyAnICsgbXNnKTsKLSAg
ICB9Ci19Ci0KLWZ1bmN0aW9uIHRlc3RGYWlsZWQobXNnKQotewotICAgIHJlcG9ydFRlc3RSZXN1
bHRzVG9IYXJuZXNzKGZhbHNlLCBtc2cpOwotICAgIF9hZGRTcGFuKCc8c3Bhbj48c3BhbiBjbGFz
cz0iZmFpbCI+RkFJTDwvc3Bhbj4gJyArIGVzY2FwZUhUTUwobXNnKSArICc8L3NwYW4+Jyk7Ci0g
ICAgX2xvZ1RvQ29uc29sZSgnRkFJTCAnICsgbXNnKTsKLX0KLQotZnVuY3Rpb24gYXJlQXJyYXlz
RXF1YWwoX2EsIF9iKQotewotICAgIHRyeSB7Ci0gICAgICAgIGlmIChfYS5sZW5ndGggIT09IF9i
Lmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBfYS5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIGlmIChfYVtpXSAhPT0gX2JbaV0p
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gY2F0Y2ggKGV4KSB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWZ1bmN0aW9u
IGlzTWludXNaZXJvKG4pCi17Ci0gICAgLy8gdGhlIG9ubHkgd2F5IHRvIHRlbGwgMCBmcm9tIC0w
IGluIEpTIGlzIHRoZSBmYWN0IHRoYXQgMS8tMCBpcwotICAgIC8vIC1JbmZpbml0eSBpbnN0ZWFk
IG9mIEluZmluaXR5Ci0gICAgcmV0dXJuIG4gPT09IDAgJiYgMS9uIDwgMDsKLX0KLQotZnVuY3Rp
b24gaXNSZXN1bHRDb3JyZWN0KF9hY3R1YWwsIF9leHBlY3RlZCkKLXsKLSAgICBpZiAoX2V4cGVj
dGVkID09PSAwKQotICAgICAgICByZXR1cm4gX2FjdHVhbCA9PT0gX2V4cGVjdGVkICYmICgxL19h
Y3R1YWwpID09PSAoMS9fZXhwZWN0ZWQpOwotICAgIGlmIChfYWN0dWFsID09PSBfZXhwZWN0ZWQp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh0eXBlb2YoX2V4cGVjdGVkKSA9PSAibnVt
YmVyIiAmJiBpc05hTihfZXhwZWN0ZWQpKQotICAgICAgICByZXR1cm4gdHlwZW9mKF9hY3R1YWwp
ID09ICJudW1iZXIiICYmIGlzTmFOKF9hY3R1YWwpOwotICAgIGlmIChPYmplY3QucHJvdG90eXBl
LnRvU3RyaW5nLmNhbGwoX2V4cGVjdGVkKSA9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNh
bGwoW10pKQotICAgICAgICByZXR1cm4gYXJlQXJyYXlzRXF1YWwoX2FjdHVhbCwgX2V4cGVjdGVk
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWZ1bmN0aW9uIHN0cmluZ2lmeSh2KQotewotICAg
IGlmICh2ID09PSAwICYmIDEvdiA8IDApCi0gICAgICAgIHJldHVybiAiLTAiOwotICAgIGVsc2Ug
cmV0dXJuICIiICsgdjsKLX0KLQotZnVuY3Rpb24gZXZhbEFuZExvZyhfYSkKLXsKLSAgaWYgKHR5
cGVvZiBfYSAhPSAic3RyaW5nIikKLSAgICBkZWJ1ZygiV0FSTjogdHJ5QW5kTG9nKCkgZXhwZWN0
cyBhIHN0cmluZyBhcmd1bWVudCIpOwotCi0gIC8vIExvZyBmaXJzdCBpbiBjYXNlIHRoaW5ncyBn
byBob3JyaWJseSB3cm9uZyBvciB0aGlzIGNhdXNlcyBhIHN5bmMgZXZlbnQuCi0gIGRlYnVnKF9h
KTsKLQotICB2YXIgX2F2OwotICB0cnkgewotICAgICBfYXYgPSBldmFsKF9hKTsKLSAgfSBjYXRj
aCAoZSkgewotICAgIHRlc3RGYWlsZWQoX2EgKyAiIHRocmV3IGV4Y2VwdGlvbiAiICsgZSk7Ci0g
IH0KLSAgcmV0dXJuIF9hdjsKLX0KLQotZnVuY3Rpb24gc2hvdWxkQmUoX2EsIF9iLCBxdWlldCkK
LXsKLSAgICBpZiAodHlwZW9mIF9hICE9ICJzdHJpbmciIHx8IHR5cGVvZiBfYiAhPSAic3RyaW5n
IikKLSAgICAgICAgZGVidWcoIldBUk46IHNob3VsZEJlKCkgZXhwZWN0cyBzdHJpbmcgYXJndW1l
bnRzIik7Ci0gICAgdmFyIGV4Y2VwdGlvbjsKLSAgICB2YXIgX2F2OwotICAgIHRyeSB7Ci0gICAg
ICAgIF9hdiA9IGV2YWwoX2EpOwotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgZXhjZXB0aW9u
ID0gZTsKLSAgICB9Ci0gICAgdmFyIF9idiA9IGV2YWwoX2IpOwotCi0gICAgaWYgKGV4Y2VwdGlv
bikKLSAgICAgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlICIgKyBfYnYgKyAiLiBUaHJl
dyBleGNlcHRpb24gIiArIGV4Y2VwdGlvbik7Ci0gICAgZWxzZSBpZiAoaXNSZXN1bHRDb3JyZWN0
KF9hdiwgX2J2KSkgewotICAgICAgICBpZiAoIXF1aWV0KSB7Ci0gICAgICAgICAgICB0ZXN0UGFz
c2VkKF9hICsgIiBpcyAiICsgX2IpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICh0eXBlb2Yo
X2F2KSA9PSB0eXBlb2YoX2J2KSkKLSAgICAgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJl
ICIgKyBfYnYgKyAiLiBXYXMgIiArIHN0cmluZ2lmeShfYXYpICsgIi4iKTsKLSAgICBlbHNlCi0g
ICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSAiICsgX2J2ICsgIiAob2YgdHlwZSAi
ICsgdHlwZW9mIF9idiArICIpLiBXYXMgIiArIF9hdiArICIgKG9mIHR5cGUgIiArIHR5cGVvZiBf
YXYgKyAiKS4iKTsKLX0KLQotZnVuY3Rpb24gc2hvdWxkTm90QmUoX2EsIF9iLCBxdWlldCkKLXsK
LSAgICBpZiAodHlwZW9mIF9hICE9ICJzdHJpbmciIHx8IHR5cGVvZiBfYiAhPSAic3RyaW5nIikK
LSAgICAgICAgZGVidWcoIldBUk46IHNob3VsZE5vdEJlKCkgZXhwZWN0cyBzdHJpbmcgYXJndW1l
bnRzIik7Ci0gICAgdmFyIGV4Y2VwdGlvbjsKLSAgICB2YXIgX2F2OwotICAgIHRyeSB7Ci0gICAg
ICAgIF9hdiA9IGV2YWwoX2EpOwotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgZXhjZXB0aW9u
ID0gZTsKLSAgICB9Ci0gICAgdmFyIF9idiA9IGV2YWwoX2IpOwotCi0gICAgaWYgKGV4Y2VwdGlv
bikKLSAgICAgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIG5vdCBiZSAiICsgX2J2ICsgIi4g
VGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24pOwotICAgIGVsc2UgaWYgKCFpc1Jlc3VsdENv
cnJlY3QoX2F2LCBfYnYpKSB7Ci0gICAgICAgIGlmICghcXVpZXQpIHsKLSAgICAgICAgICAgIHRl
c3RQYXNzZWQoX2EgKyAiIGlzIG5vdCAiICsgX2IpOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0g
ICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBub3QgYmUgIiArIF9idiArICIuIik7Ci19
Ci0KLWZ1bmN0aW9uIHNob3VsZEJlVHJ1ZShfYSkgeyBzaG91bGRCZShfYSwgInRydWUiKTsgfQot
ZnVuY3Rpb24gc2hvdWxkQmVGYWxzZShfYSkgeyBzaG91bGRCZShfYSwgImZhbHNlIik7IH0KLWZ1
bmN0aW9uIHNob3VsZEJlTmFOKF9hKSB7IHNob3VsZEJlKF9hLCAiTmFOIik7IH0KLWZ1bmN0aW9u
IHNob3VsZEJlTnVsbChfYSkgeyBzaG91bGRCZShfYSwgIm51bGwiKTsgfQotCi1mdW5jdGlvbiBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoYSwgYikKLXsKLSAgdmFyIHVuZXZhbGVkU3RyaW5nID0gJyIn
ICsgYi5yZXBsYWNlKC8iL2csICJcIiIpICsgJyInOwotICBzaG91bGRCZShhLCB1bmV2YWxlZFN0
cmluZyk7Ci19Ci0KLWZ1bmN0aW9uIHNob3VsZEV2YWx1YXRlVG8oYWN0dWFsLCBleHBlY3RlZCkg
ewotICAvLyBBIGdlbmVyYWwtcHVycG9zZSBjb21wYXJhdG9yLiAgJ2FjdHVhbCcgc2hvdWxkIGJl
IGEgc3RyaW5nIHRvIGJlCi0gIC8vIGV2YWx1YXRlZCwgYXMgZm9yIHNob3VsZEJlKCkuICdleHBl
Y3RlZCcgbWF5IGJlIGFueSB0eXBlIGFuZCB3aWxsIGJlCi0gIC8vIHVzZWQgd2l0aG91dCBiZWlu
ZyBldmFsJ2VkLgotICBpZiAoZXhwZWN0ZWQgPT0gbnVsbCkgewotICAgIC8vIERvIHRoaXMgYmVm
b3JlIHRoZSBvYmplY3QgdGVzdCwgc2luY2UgbnVsbCBpcyBvZiB0eXBlICdvYmplY3QnLgotICAg
IHNob3VsZEJlTnVsbChhY3R1YWwpOwotICB9IGVsc2UgaWYgKHR5cGVvZiBleHBlY3RlZCA9PSAi
dW5kZWZpbmVkIikgewotICAgIHNob3VsZEJlVW5kZWZpbmVkKGFjdHVhbCk7Ci0gIH0gZWxzZSBp
ZiAodHlwZW9mIGV4cGVjdGVkID09ICJmdW5jdGlvbiIpIHsKLSAgICAvLyBBbGwgdGhpcyBmdXNz
IGlzIHRvIGF2b2lkIHRoZSBzdHJpbmctYXJnIHdhcm5pbmcgZnJvbSBzaG91bGRCZSgpLgotICAg
IHRyeSB7Ci0gICAgICBhY3R1YWxWYWx1ZSA9IGV2YWwoYWN0dWFsKTsKLSAgICB9IGNhdGNoIChl
KSB7Ci0gICAgICB0ZXN0RmFpbGVkKCJFdmFsdWF0aW5nICIgKyBhY3R1YWwgKyAiOiBUaHJldyBl
eGNlcHRpb24gIiArIGUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzaG91bGRCZSgiJyIg
KyBhY3R1YWxWYWx1ZS50b1N0cmluZygpLnJlcGxhY2UoL1xuL2csICIiKSArICInIiwKLSAgICAg
ICAgICAgICAiJyIgKyBleHBlY3RlZC50b1N0cmluZygpLnJlcGxhY2UoL1xuL2csICIiKSArICIn
Iik7Ci0gIH0gZWxzZSBpZiAodHlwZW9mIGV4cGVjdGVkID09ICJvYmplY3QiKSB7Ci0gICAgc2hv
dWxkQmVUcnVlKGFjdHVhbCArICIgPT0gJyIgKyBleHBlY3RlZCArICInIik7Ci0gIH0gZWxzZSBp
ZiAodHlwZW9mIGV4cGVjdGVkID09ICJzdHJpbmciKSB7Ci0gICAgc2hvdWxkQmUoYWN0dWFsLCBl
eHBlY3RlZCk7Ci0gIH0gZWxzZSBpZiAodHlwZW9mIGV4cGVjdGVkID09ICJib29sZWFuIikgewot
ICAgIHNob3VsZEJlKCJ0eXBlb2YgIiArIGFjdHVhbCwgIidib29sZWFuJyIpOwotICAgIGlmIChl
eHBlY3RlZCkKLSAgICAgIHNob3VsZEJlVHJ1ZShhY3R1YWwpOwotICAgIGVsc2UKLSAgICAgIHNo
b3VsZEJlRmFsc2UoYWN0dWFsKTsKLSAgfSBlbHNlIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT0gIm51
bWJlciIpIHsKLSAgICBzaG91bGRCZShhY3R1YWwsIHN0cmluZ2lmeShleHBlY3RlZCkpOwotICB9
IGVsc2UgewotICAgIGRlYnVnKGV4cGVjdGVkICsgIiBpcyB1bmtub3duIHR5cGUgIiArIHR5cGVv
ZiBleHBlY3RlZCk7Ci0gICAgc2hvdWxkQmVUcnVlKGFjdHVhbCwgIiciICArZXhwZWN0ZWQudG9T
dHJpbmcoKSArICInIik7Ci0gIH0KLX0KLQotZnVuY3Rpb24gc2hvdWxkQmVOb25aZXJvKF9hKQot
ewotICB2YXIgZXhjZXB0aW9uOwotICB2YXIgX2F2OwotICB0cnkgewotICAgICBfYXYgPSBldmFs
KF9hKTsKLSAgfSBjYXRjaCAoZSkgewotICAgICBleGNlcHRpb24gPSBlOwotICB9Ci0KLSAgaWYg
KGV4Y2VwdGlvbikKLSAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgbm9uLXplcm8uIFRo
cmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9uKTsKLSAgZWxzZSBpZiAoX2F2ICE9IDApCi0gICAg
dGVzdFBhc3NlZChfYSArICIgaXMgbm9uLXplcm8uIik7Ci0gIGVsc2UKLSAgICB0ZXN0RmFpbGVk
KF9hICsgIiBzaG91bGQgYmUgbm9uLXplcm8uIFdhcyAiICsgX2F2KTsKLX0KLQotZnVuY3Rpb24g
c2hvdWxkQmVOb25OdWxsKF9hKQotewotICB2YXIgZXhjZXB0aW9uOwotICB2YXIgX2F2OwotICB0
cnkgewotICAgICBfYXYgPSBldmFsKF9hKTsKLSAgfSBjYXRjaCAoZSkgewotICAgICBleGNlcHRp
b24gPSBlOwotICB9Ci0KLSAgaWYgKGV4Y2VwdGlvbikKLSAgICB0ZXN0RmFpbGVkKF9hICsgIiBz
aG91bGQgYmUgbm9uLW51bGwuIFRocmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9uKTsKLSAgZWxz
ZSBpZiAoX2F2ICE9IG51bGwpCi0gICAgdGVzdFBhc3NlZChfYSArICIgaXMgbm9uLW51bGwuIik7
Ci0gIGVsc2UKLSAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgbm9uLW51bGwuIFdhcyAi
ICsgX2F2KTsKLX0KLQotZnVuY3Rpb24gc2hvdWxkQmVVbmRlZmluZWQoX2EpCi17Ci0gIHZhciBl
eGNlcHRpb247Ci0gIHZhciBfYXY7Ci0gIHRyeSB7Ci0gICAgIF9hdiA9IGV2YWwoX2EpOwotICB9
IGNhdGNoIChlKSB7Ci0gICAgIGV4Y2VwdGlvbiA9IGU7Ci0gIH0KLQotICBpZiAoZXhjZXB0aW9u
KQotICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSB1bmRlZmluZWQuIFRocmV3IGV4Y2Vw
dGlvbiAiICsgZXhjZXB0aW9uKTsKLSAgZWxzZSBpZiAodHlwZW9mIF9hdiA9PSAidW5kZWZpbmVk
IikKLSAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyB1bmRlZmluZWQuIik7Ci0gIGVsc2UKLSAgICB0
ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgdW5kZWZpbmVkLiBXYXMgIiArIF9hdik7Ci19Ci0K
LWZ1bmN0aW9uIHNob3VsZEJlRGVmaW5lZChfYSkKLXsKLSAgdmFyIGV4Y2VwdGlvbjsKLSAgdmFy
IF9hdjsKLSAgdHJ5IHsKLSAgICAgX2F2ID0gZXZhbChfYSk7Ci0gIH0gY2F0Y2ggKGUpIHsKLSAg
ICAgZXhjZXB0aW9uID0gZTsKLSAgfQotCi0gIGlmIChleGNlcHRpb24pCi0gICAgdGVzdEZhaWxl
ZChfYSArICIgc2hvdWxkIGJlIGRlZmluZWQuIFRocmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9u
KTsKLSAgZWxzZSBpZiAoX2F2ICE9PSB1bmRlZmluZWQpCi0gICAgdGVzdFBhc3NlZChfYSArICIg
aXMgZGVmaW5lZC4iKTsKLSAgZWxzZQotICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSBk
ZWZpbmVkLiBXYXMgIiArIF9hdik7Ci19Ci0KLWZ1bmN0aW9uIHNob3VsZEJlR3JlYXRlclRoYW5P
ckVxdWFsKF9hLCBfYikgewotICAgIGlmICh0eXBlb2YgX2EgIT0gInN0cmluZyIgfHwgdHlwZW9m
IF9iICE9ICJzdHJpbmciKQotICAgICAgICBkZWJ1ZygiV0FSTjogc2hvdWxkQmVHcmVhdGVyVGhh
bk9yRXF1YWwgZXhwZWN0cyBzdHJpbmcgYXJndW1lbnRzIik7Ci0KLSAgICB2YXIgZXhjZXB0aW9u
OwotICAgIHZhciBfYXY7Ci0gICAgdHJ5IHsKLSAgICAgICAgX2F2ID0gZXZhbChfYSk7Ci0gICAg
fSBjYXRjaCAoZSkgewotICAgICAgICBleGNlcHRpb24gPSBlOwotICAgIH0KLSAgICB2YXIgX2J2
ID0gZXZhbChfYik7Ci0KLSAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICB0ZXN0RmFpbGVkKF9h
ICsgIiBzaG91bGQgYmUgPj0gIiArIF9iICsgIi4gVGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRp
b24pOwotICAgIGVsc2UgaWYgKHR5cGVvZiBfYXYgPT0gInVuZGVmaW5lZCIgfHwgX2F2IDwgX2J2
KQotICAgICAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgPj0gIiArIF9iICsgIi4gV2Fz
ICIgKyBfYXYgKyAiIChvZiB0eXBlICIgKyB0eXBlb2YgX2F2ICsgIikuIik7Ci0gICAgZWxzZQot
ICAgICAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyA+PSAiICsgX2IpOwotfQotCi1mdW5jdGlvbiBl
eHBlY3RUcnVlKHYsIG1zZykgewotICBpZiAodikgewotICAgIHRlc3RQYXNzZWQobXNnKTsKLSAg
fSBlbHNlIHsKLSAgICB0ZXN0RmFpbGVkKG1zZyk7Ci0gIH0KLX0KLQotZnVuY3Rpb24gc2hvdWxk
VGhyb3coX2EsIF9lKQotewotICB2YXIgZXhjZXB0aW9uOwotICB2YXIgX2F2OwotICB0cnkgewot
ICAgICBfYXYgPSBldmFsKF9hKTsKLSAgfSBjYXRjaCAoZSkgewotICAgICBleGNlcHRpb24gPSBl
OwotICB9Ci0KLSAgdmFyIF9ldjsKLSAgaWYgKF9lKQotICAgICAgX2V2ID0gIGV2YWwoX2UpOwot
Ci0gIGlmIChleGNlcHRpb24pIHsKLSAgICBpZiAodHlwZW9mIF9lID09ICJ1bmRlZmluZWQiIHx8
IGV4Y2VwdGlvbiA9PSBfZXYpCi0gICAgICB0ZXN0UGFzc2VkKF9hICsgIiB0aHJldyBleGNlcHRp
b24gIiArIGV4Y2VwdGlvbiArICIuIik7Ci0gICAgZWxzZQotICAgICAgdGVzdEZhaWxlZChfYSAr
ICIgc2hvdWxkIHRocm93ICIgKyAodHlwZW9mIF9lID09ICJ1bmRlZmluZWQiID8gImFuIGV4Y2Vw
dGlvbiIgOiBfZXYpICsgIi4gVGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24gKyAiLiIpOwot
ICB9IGVsc2UgaWYgKHR5cGVvZiBfYXYgPT0gInVuZGVmaW5lZCIpCi0gICAgdGVzdEZhaWxlZChf
YSArICIgc2hvdWxkIHRocm93ICIgKyAodHlwZW9mIF9lID09ICJ1bmRlZmluZWQiID8gImFuIGV4
Y2VwdGlvbiIgOiBfZXYpICsgIi4gV2FzIHVuZGVmaW5lZC4iKTsKLSAgZWxzZQotICAgIHRlc3RG
YWlsZWQoX2EgKyAiIHNob3VsZCB0aHJvdyAiICsgKHR5cGVvZiBfZSA9PSAidW5kZWZpbmVkIiA/
ICJhbiBleGNlcHRpb24iIDogX2V2KSArICIuIFdhcyAiICsgX2F2ICsgIi4iKTsKLX0KLQotZnVu
Y3Rpb24gc2hvdWxkQmVUeXBlKF9hLCBfdHlwZSkgewotICAgIHZhciBleGNlcHRpb247Ci0gICAg
dmFyIF9hdjsKLSAgICB0cnkgewotICAgICAgICBfYXYgPSBldmFsKF9hKTsKLSAgICB9IGNhdGNo
IChlKSB7Ci0gICAgICAgIGV4Y2VwdGlvbiA9IGU7Ci0gICAgfQotCi0gICAgdmFyIF90eXBldiA9
IGV2YWwoX3R5cGUpOwotCi0gICAgaWYoX3R5cGV2ID09PSBOdW1iZXIpewotICAgICAgICBpZihf
YXYgaW5zdGFuY2VvZiBOdW1iZXIpewotICAgICAgICAgICAgdGVzdFBhc3NlZChfYSArICIgaXMg
YW4gaW5zdGFuY2Ugb2YgTnVtYmVyIik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZih0eXBl
b2YoX2F2KSA9PT0gJ251bWJlcicpewotICAgICAgICAgICAgdGVzdFBhc3NlZChfYSArICIgaXMg
YW4gaW5zdGFuY2Ugb2YgTnVtYmVyIik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZXsKLSAgICAg
ICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBOdW1iZXIiKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChfYXYgaW5zdGFuY2VvZiBfdHlwZXYpIHsK
LSAgICAgICAgdGVzdFBhc3NlZChfYSArICIgaXMgYW4gaW5zdGFuY2Ugb2YgIiArIF90eXBlKTsK
LSAgICB9IGVsc2UgewotICAgICAgICB0ZXN0RmFpbGVkKF9hICsgIiBpcyBub3QgYW4gaW5zdGFu
Y2Ugb2YgIiArIF90eXBlKTsKLSAgICB9Ci19Ci0KLWZ1bmN0aW9uIGFzc2VydE1zZyhhc3NlcnRp
b24sIG1zZykgewotICAgIGlmIChhc3NlcnRpb24pIHsKLSAgICAgICAgdGVzdFBhc3NlZChtc2cp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRlc3RGYWlsZWQobXNnKTsKLSAgICB9Ci19Ci0KLWZ1
bmN0aW9uIGdjKCkgewotICAgIGlmICh3aW5kb3cuR0NDb250cm9sbGVyKSB7Ci0gICAgICAgIHdp
bmRvdy5HQ0NvbnRyb2xsZXIuY29sbGVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKHdpbmRvdy5vcGVyYSAmJiB3aW5kb3cub3BlcmEuY29sbGVjdCkgewotICAgICAgICB3
aW5kb3cub3BlcmEuY29sbGVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdHJ5
IHsKLSAgICAgICAgd2luZG93LlF1ZXJ5SW50ZXJmYWNlKENvbXBvbmVudHMuaW50ZXJmYWNlcy5u
c0lJbnRlcmZhY2VSZXF1ZXN0b3IpCi0gICAgICAgICAgICAgIC5nZXRJbnRlcmZhY2UoQ29tcG9u
ZW50cy5pbnRlcmZhY2VzLm5zSURPTVdpbmRvd1V0aWxzKQotICAgICAgICAgICAgICAuZ2FyYmFn
ZUNvbGxlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gY2F0Y2goZSkge30KLQotICAgIGZ1
bmN0aW9uIGdjUmVjKG4pIHsKLSAgICAgICAgaWYgKG4gPCAxKQotICAgICAgICAgICAgcmV0dXJu
IHt9OwotICAgICAgICB2YXIgdGVtcCA9IHtpOiAiYWIiICsgaSArIChpIC8gMTAwMDAwKX07Ci0g
ICAgICAgIHRlbXAgKz0gImZvbyI7Ci0gICAgICAgIGdjUmVjKG4tMSk7Ci0gICAgfQotICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgaSsrKQotICAgICAgICBnY1JlYygxMCk7Ci19Ci0KLWZ1
bmN0aW9uIGZpbmlzaFRlc3QoKSB7Ci0gIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Ci0gIHZh
ciBlcGlsb2d1ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwotICB2YXIgYmFz
ZVBhdGggPSAiIjsKLSAgdmFyIGV4cGVjdGVkQmFzZSA9ICJqcy10ZXN0LXByZS5qcyI7Ci0gIHZh
ciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpOwotICBm
b3IgKHZhciBzY3JpcHQsIGkgPSAwOyBzY3JpcHQgPSBzY3JpcHRzW2ldOyBpKyspIHsKLSAgICB2
YXIgc3JjID0gc2NyaXB0LnNyYzsKLSAgICB2YXIgbCA9IHNyYy5sZW5ndGg7Ci0gICAgaWYgKHNy
Yy5zdWJzdHIobCAtIGV4cGVjdGVkQmFzZS5sZW5ndGgpID09IGV4cGVjdGVkQmFzZSkgewotICAg
ICAgYmFzZVBhdGggPSBzcmMuc3Vic3RyKDAsIGwgLSBleHBlY3RlZEJhc2UubGVuZ3RoKTsKLSAg
ICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBlcGlsb2d1ZS5zcmMgPSBiYXNlUGF0aCArICJqcy10
ZXN0LXBvc3QuanMiOwotICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVwaWxvZ3VlKTsKLX0K
LQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xf
dGVzdF9maWxlcy9jb25mb3JtYW5jZS9jb250ZXh0L2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS1k
ZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9y
ZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9jb250ZXh0L2NvbnRleHQtYXR0
cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBlM2RlMGYyOTY1OWEwNzc3YzJkMThhZjJiYmMzZWY5N2M1MWI0MDIy
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2Uv
Y29udGV4dC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMu
aHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzMiArMCwwIEBACi08IS0tCi1Db3B5cmlnaHQgKGMp
IDIwMTkgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgotVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLWZvdW5kIGluIHRo
ZSBMSUNFTlNFLnR4dCBmaWxlLgotLS0+Ci0KLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVh
ZD4KLTxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Ci08c2NyaXB0IHNyYz0iLi4vLi4v
anMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmds
LXRlc3QtdXRpbHMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBpZD0idnNoYWRlciIgdHlwZT0ieC1z
aGFkZXIveC12ZXJ0ZXgiPgotYXR0cmlidXRlIHZlYzMgcG9zOwotYXR0cmlidXRlIHZlYzQgY29s
b3JJbjsKLXZhcnlpbmcgdmVjNCBjb2xvcjsKLQotdm9pZCBtYWluKCkKLXsKLSAgICBjb2xvciA9
IGNvbG9ySW47Ci0gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcy54eXosIDEuMCk7Ci19Ci08L3Nj
cmlwdD4KLQotPHNjcmlwdCBpZD0iZnNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC1mcmFnbWVudCI+
Ci1wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLQotdmFyeWluZyB2ZWM0IGNvbG9yOwotCi12b2lk
IG1haW4oKQotewotICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yOwotfQotPC9zY3JpcHQ+Ci0KLTxz
Y3JpcHQ+Ci0idXNlIHN0cmljdCI7Ci0KLS8vIFRoZXNlIGZvdXIgZGVjbGFyYXRpb25zIG5lZWQg
dG8gYmUgZ2xvYmFsIGZvciAic2hvdWxkQmUiIHRvIHNlZSB0aGVtCi12YXIgd3R1ID0gV2ViR0xU
ZXN0VXRpbHM7Ci12YXIgZ2w7Ci12YXIgY29udGV4dEF0dHJpYnMgPSBudWxsOwotdmFyIHJlZENo
YW5uZWxzID0gWzAsIDAsIDBdOwotdmFyIGNvcnJlY3RDb2xvciA9IG51bGw7Ci12YXIgZnJhbWVi
dWZmZXI7Ci12YXIgZmJIYXNDb2xvcjsKLXZhciBmYkhhc0RlcHRoOwotdmFyIGZiSGFzU3RlbmNp
bDsKLQotZnVuY3Rpb24gaW5pdCgpCi17Ci0gICAgZGVzY3JpcHRpb24oJ1ZlcmlmeSBXZWJHTENv
bnRleHRBdHRyaWJ1dGVzIGFyZSB3b3JraW5nIGFzIHNwZWNpZmllZCwgaW5jbHVkaW5nIGFscGhh
LCBkZXB0aCwgc3RlbmNpbCwgYW50aWFsaWFzLCBidXQgbm90IHByZW11bHRpcGxpZWRBbHBoYScp
OwotCi0gICAgcnVuVGVzdCgpOwotfQotCi1mdW5jdGlvbiBnZXRXZWJHTChjYW52YXNXaWR0aCwg
Y2FudmFzSGVpZ2h0LCBjb250ZXh0QXR0cmlicywgY2xlYXJDb2xvciwgY2xlYXJEZXB0aCwgY2xl
YXJTdGVuY2lsKQotewotICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJj
YW52YXMiKTsKLSAgICBpZiAoIWNhbnZhcykKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgY2Fu
dmFzLndpZHRoID0gY2FudmFzV2lkdGg7Ci0gICAgY2FudmFzLmhlaWdodCA9IGNhbnZhc0hlaWdo
dDsKLQotICAgIGdsID0gd3R1LmNyZWF0ZTNEQ29udGV4dChjYW52YXMsIGNvbnRleHRBdHRyaWJz
KTsKLSAgICBpZiAoIWdsKQotICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgIHZhciBwcm9ncmFt
ID0gd3R1LnNldHVwUHJvZ3JhbShnbCwgWyJ2c2hhZGVyIiwgImZzaGFkZXIiXSwgWyJwb3MiLCAi
Y29sb3JJbiJdKTsKLSAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgIHJldHVybiBudWxsOwotCi0g
ICAgZ2wuZW5hYmxlKGdsLkRFUFRIX1RFU1QpOwotICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RF
U1QpOwotCi0gICAgZ2wuY2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBj
bGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKLSAgICBnbC5jbGVhckRlcHRoKGNsZWFyRGVw
dGgpOwotICAgIGdsLmNsZWFyU3RlbmNpbChjbGVhclN0ZW5jaWwpOwotICAgIGdsLmNsZWFyKGds
LkNPTE9SX0JVRkZFUl9CSVQgfCBnbC5ERVBUSF9CVUZGRVJfQklUIHwgZ2wuU1RFTkNJTF9CVUZG
RVJfQklUKTsKLQotICAgIGZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTsKLSAg
ICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGZyYW1lYnVmZmVyKTsKLSAgICB2
YXIgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKLSAgICBnbC5iaW5kVGV4dHVyZShnbC5U
RVhUVVJFXzJELCB0ZXh0dXJlKTsKLSAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAs
IGdsLlJHQkEsIGdsLmNhbnZhcy53aWR0aCwgZ2wuY2FudmFzLmhlaWdodCwgMCwgZ2wuUkdCQSwg
Z2wuVU5TSUdORURfQllURSwgbnVsbCk7Ci0gICAgZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoZ2wu
RlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5URVhUVVJFXzJELCB0ZXh0dXJl
LCAwKTsKLSAgICBmYkhhc1N0ZW5jaWwgPSBmYWxzZTsKLSAgICBmYkhhc0RlcHRoID0gZmFsc2U7
Ci0gICAgZmJIYXNDb2xvciA9IGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZG
RVIpID09IGdsLkZSQU1FQlVGRkVSX0NPTVBMRVRFOwotICAgIGlmIChmYkhhc0NvbG9yKSB7Ci0g
ICAgICB2YXIgZGVwdGhTdGVuY2lsID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0gICAgICBn
bC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgZGVwdGhTdGVuY2lsKTsKLSAgICAg
IGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lM
LCBnbC5jYW52YXMud2lkdGgsIGdsLmNhbnZhcy5oZWlnaHQpOwotICAgICAgZ2wuZnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUxfQVRUQUNITUVO
VCwgZ2wuUkVOREVSQlVGRkVSLCBkZXB0aFN0ZW5jaWwpOwotICAgICAgZmJIYXNEZXB0aCA9IGds
LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpID09IGdsLkZSQU1FQlVGRkVS
X0NPTVBMRVRFOwotICAgICAgaWYgKCFmYkhhc0RlcHRoKSB7Ci0gICAgICAgIGdsLmZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1F
TlQsIGdsLlJFTkRFUkJVRkZFUiwgbnVsbCk7Ci0gICAgICAgIHNob3VsZEJlKCdnbC5jaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKScsICdnbC5GUkFNRUJVRkZFUl9DT01QTEVU
RScpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZmJIYXNTdGVuY2lsID0gdHJ1ZTsKLSAgICAg
IH0KLSAgICB9Ci0gICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTsK
LSAgICB3dHUuZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgInNob3VsZCBiZSBubyBl
cnJvcnMiKTsKLQotICAgIHJldHVybiBnbDsKLX0KLQotZnVuY3Rpb24gZHJhd0FuZFJlYWRQaXhl
bChnbCwgdmVydGljZXMsIGNvbG9ycykKLXsKLSAgICB2YXIgY29sb3JPZmZzZXQgPSB2ZXJ0aWNl
cy5ieXRlTGVuZ3RoOwotCi0gICAgdmFyIHZibyA9IGdsLmNyZWF0ZUJ1ZmZlcigpOwotICAgIGds
LmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB2Ym8pOwotICAgIGdsLmJ1ZmZlckRhdGEoZ2wu
QVJSQVlfQlVGRkVSLCBjb2xvck9mZnNldCArIGNvbG9ycy5ieXRlTGVuZ3RoLCBnbC5TVEFUSUNf
RFJBVyk7Ci0gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHZlcnRpY2Vz
KTsKLSAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgY29sb3JPZmZzZXQsIGNv
bG9ycyk7Ci0KLSAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDMsIGdsLkZMT0FULCBmYWxz
ZSwgMCwgMCk7Ci0gICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCk7Ci0gICAgZ2wudmVy
dGV4QXR0cmliUG9pbnRlcigxLCA0LCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCAwLCBjb2xvck9m
ZnNldCk7Ci0gICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMSk7Ci0KLSAgICBnbC5kcmF3
QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgdmVydGljZXMubGVuZ3RoIC8gMyk7Ci19Ci0KLWZ1bmN0
aW9uIHRlc3REZWZhdWx0KCkKLXsKLSAgICBkZWJ1ZygiVGVzdGluZyBkZWZhdWx0IGF0dHJpYnV0
ZXM6IHsgc3RlbmNpbDpmYWxzZSB9Iik7Ci0gICAgc2hvdWxkQmVOb25OdWxsKCJnbCA9IGdldFdl
YkdMKDEsIDEsIG51bGwsIFsgMCwgMCwgMCwgMCBdLCAxLCAwKSIpOwotICAgIHNob3VsZEJlRmFs
c2UoImdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCkuc3RlbmNpbCIpOwotICAgIHNob3VsZEJlVHJ1
ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLlNURU5DSUxfQklUUykgPT0gMCIpOwotfQotCi1mdW5jdGlv
biB0ZXN0QWxwaGEoYWxwaGEpCi17Ci0gICAgZGVidWcoIlRlc3RpbmcgYWxwaGEgPSAiICsgYWxw
aGEpOwotICAgIGlmIChhbHBoYSkgewotICAgICAgICBzaG91bGRCZU5vbk51bGwoImdsID0gZ2V0
V2ViR0woMSwgMSwgeyBhbHBoYTogdHJ1ZSwgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwg
YW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDAgXSwgMSwgMCkiKTsKLSAgICAgICAgc2hv
dWxkQmVUcnVlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuQUxQSEFfQklUUykgPj0gOCIpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHNob3VsZEJlTm9uTnVsbCgiZ2wgPSBnZXRXZWJHTCgxLCAxLCB7IGFs
cGhhOiBmYWxzZSwgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxz
ZSB9LCBbIDAsIDAsIDAsIDAgXSwgMSwgMCkiKTsKLSAgICAgICAgc2hvdWxkQmVUcnVlKCJnbC5n
ZXRQYXJhbWV0ZXIoZ2wuQUxQSEFfQklUUykgPT0gMCIpOwotICAgIH0KLSAgICBzaG91bGRCZVRy
dWUoImdsLmdldFBhcmFtZXRlcihnbC5SRURfQklUUykgPj0gOCIpOwotICAgIHNob3VsZEJlVHJ1
ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLkdSRUVOX0JJVFMpID49IDgiKTsKLSAgICBzaG91bGRCZVRy
dWUoImdsLmdldFBhcmFtZXRlcihnbC5CTFVFX0JJVFMpID49IDgiKTsKLSAgICBzaG91bGRCZVRy
dWUoImdsLmdldFBhcmFtZXRlcihnbC5ERVBUSF9CSVRTKSA9PSAwIik7Ci0gICAgc2hvdWxkQmVU
cnVlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuU1RFTkNJTF9CSVRTKSA9PSAwIik7Ci0KLSAgICBzaG91
bGRCZU5vbk51bGwoImNvbnRleHRBdHRyaWJzID0gZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSIp
OwotICAgIHNob3VsZEJlVHJ1ZSgiY29udGV4dEF0dHJpYnMuYWxwaGEgPT0gIiArIGFscGhhKTsK
LQotICAgIHZhciBjb3JyZWN0Q29sb3IgPSAoY29udGV4dEF0dHJpYnMuYWxwaGEgPyBbMCwgMCwg
MCwgMF0gOiBbMCwgMCwgMCwgMjU1XSk7Ci0gICAgd3R1LmNoZWNrQ2FudmFzUmVjdChnbCwgMCwg
MCwgMSwgMSwgY29ycmVjdENvbG9yKTsKLQotICAgIGlmIChmYkhhc0NvbG9yKSB7Ci0gICAgICBn
bC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGZyYW1lYnVmZmVyKTsKLSAgICAgIGds
LmNsZWFyQ29sb3IoMC41LCAwLjUsIDAuNSwgMC41KTsKLSAgICAgIGdsLmNsZWFyKGdsLkNPTE9S
X0JVRkZFUl9CSVQpOwotICAgICAgd3R1LmNoZWNrQ2FudmFzUmVjdChnbCwgMCwgMCwgMSwgMSwg
WzEyNywgMTI3LCAxMjcsIDEyN10sIHVuZGVmaW5lZCwgMSk7Ci0gICAgICBnbC5iaW5kRnJhbWVi
dWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwpOwotICAgIH0KLX0KLQotZnVuY3Rpb24gdGVzdERl
cHRoKGRlcHRoKQotewotICAgIGRlYnVnKCJUZXN0aW5nIGRlcHRoID0gIiArIGRlcHRoKTsKLSAg
ICBpZiAoZGVwdGgpIHsKLSAgICAgICAgc2hvdWxkQmVOb25OdWxsKCJnbCA9IGdldFdlYkdMKDEs
IDEsIHsgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAwLCAxIF0s
IDEsIDApIik7Ci0gICAgICAgIHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLkRFUFRI
X0JJVFMpID49IDE2Iik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2hvdWxkQmVOb25OdWxsKCJn
bCA9IGdldFdlYkdMKDEsIDEsIHsgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYW50aWFs
aWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkiKTsKLSAgICAgICAgc2hvdWxkQmVU
cnVlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuREVQVEhfQklUUykgPT0gMCIpOwotICAgIH0KLSAgICBz
aG91bGRCZVRydWUoImdsLmdldFBhcmFtZXRlcihnbC5SRURfQklUUykgPj0gOCIpOwotICAgIHNo
b3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLkdSRUVOX0JJVFMpID49IDgiKTsKLSAgICBz
aG91bGRCZVRydWUoImdsLmdldFBhcmFtZXRlcihnbC5CTFVFX0JJVFMpID49IDgiKTsKLSAgICBz
aG91bGRCZVRydWUoImdsLmdldFBhcmFtZXRlcihnbC5BTFBIQV9CSVRTKSA+PSA4Iik7Ci0KLSAg
ICBzaG91bGRCZU5vbk51bGwoImNvbnRleHRBdHRyaWJzID0gZ2wuZ2V0Q29udGV4dEF0dHJpYnV0
ZXMoKSIpOwotCi0gICAgZ2wuZGVwdGhGdW5jKGdsLk5FVkVSKTsKLQotICAgIHZhciB2ZXJ0aWNl
cyA9IG5ldyBGbG9hdDMyQXJyYXkoWwotICAgICAgICAgMS4wLCAgMS4wLCAwLjAsCi0gICAgICAg
IC0xLjAsICAxLjAsIDAuMCwKLSAgICAgICAgLTEuMCwgLTEuMCwgMC4wLAotICAgICAgICAgMS4w
LCAgMS4wLCAwLjAsCi0gICAgICAgIC0xLjAsIC0xLjAsIDAuMCwKLSAgICAgICAgIDEuMCwgLTEu
MCwgMC4wXSk7Ci0gICAgdmFyIGNvbG9ycyA9IG5ldyBVaW50OEFycmF5KFsKLSAgICAgICAgMjU1
LCAwLCAwLCAyNTUsCi0gICAgICAgIDI1NSwgMCwgMCwgMjU1LAotICAgICAgICAyNTUsIDAsIDAs
IDI1NSwKLSAgICAgICAgMjU1LCAwLCAwLCAyNTUsCi0gICAgICAgIDI1NSwgMCwgMCwgMjU1LAot
ICAgICAgICAyNTUsIDAsIDAsIDI1NV0pOwotCi0gICAgZHJhd0FuZFJlYWRQaXhlbChnbCwgdmVy
dGljZXMsIGNvbG9ycywgMCwgMCk7Ci0gICAgY29ycmVjdENvbG9yID0gKGNvbnRleHRBdHRyaWJz
LmRlcHRoID8gWzAsIDAsIDAsIDI1NV0gOiBbMjU1LCAwLCAwLCAyNTVdKTsKLSAgICB3dHUuY2hl
Y2tDYW52YXNSZWN0KGdsLCAwLCAwLCAxLCAxLCBjb3JyZWN0Q29sb3IpOwotCi0gICAgaWYgKGZi
SGFzRGVwdGgpIHsKLSAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZnJh
bWVidWZmZXIpOwotICAgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRI
X0JVRkZFUl9CSVQpOwotICAgICAgZHJhd0FuZFJlYWRQaXhlbChnbCwgdmVydGljZXMsIGNvbG9y
cywgMCwgMCk7Ci0gICAgICB3dHUuY2hlY2tDYW52YXNSZWN0KGdsLCAwLCAwLCAxLCAxLCBbMCwg
MCwgMCwgMjU1XSk7Ci0gICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51
bGwpOwotICAgIH0KLX0KLQotZnVuY3Rpb24gdGVzdFN0ZW5jaWxBbmREZXB0aChzdGVuY2lsLCBk
ZXB0aCkKLXsKLSAgICBkZWJ1ZygiVGVzdGluZyBzdGVuY2lsID0gIiArIHN0ZW5jaWwgKyAiLCBk
ZXB0aCA9ICIgKyBkZXB0aCk7Ci0gICAgdmFyIGNyZWF0aW9uU3RyaW5nID0KLSAgICAgICAgImds
ID0gZ2V0V2ViR0woMSwgMSwgeyBkZXB0aDogIiArIGRlcHRoICsgIiwgc3RlbmNpbDogIiArIHN0
ZW5jaWwgKyAiLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSI7Ci0g
ICAgc2hvdWxkQmVOb25OdWxsKGNyZWF0aW9uU3RyaW5nKTsKLQotICAgIHNob3VsZEJlVHJ1ZSgi
Z2wuZ2V0UGFyYW1ldGVyKGdsLlJFRF9CSVRTKSA+PSA4Iik7Ci0gICAgc2hvdWxkQmVUcnVlKCJn
bC5nZXRQYXJhbWV0ZXIoZ2wuR1JFRU5fQklUUykgPj0gOCIpOwotICAgIHNob3VsZEJlVHJ1ZSgi
Z2wuZ2V0UGFyYW1ldGVyKGdsLkJMVUVfQklUUykgPj0gOCIpOwotICAgIHNob3VsZEJlVHJ1ZSgi
Z2wuZ2V0UGFyYW1ldGVyKGdsLkFMUEhBX0JJVFMpID49IDgiKTsKLSAgICBpZiAoZGVwdGgpCi0g
ICAgICAgIHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLkRFUFRIX0JJVFMpID49IDE2
Iik7Ci0gICAgZWxzZQotICAgICAgICBzaG91bGRCZVRydWUoImdsLmdldFBhcmFtZXRlcihnbC5E
RVBUSF9CSVRTKSA9PSAwIik7Ci0KLSAgICBpZiAoc3RlbmNpbCkKLSAgICAgICAgc2hvdWxkQmVU
cnVlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuU1RFTkNJTF9CSVRTKSA+PSA4Iik7Ci0gICAgZWxzZQot
ICAgICAgICBzaG91bGRCZVRydWUoImdsLmdldFBhcmFtZXRlcihnbC5TVEVOQ0lMX0JJVFMpID09
IDAiKTsKLQotICAgIHNob3VsZEJlTm9uTnVsbCgiY29udGV4dEF0dHJpYnMgPSBnbC5nZXRDb250
ZXh0QXR0cmlidXRlcygpIik7Ci0gICAgaWYgKCFkZXB0aCAmJiBjb250ZXh0QXR0cmlicy5kZXB0
aCkgewotICAgICAgICB0ZXN0RmFpbGVkKCJXZWJHTCBpbXBsZW1lbnRhdGlvbiBwcm92aWRlZCBh
IGRlcHRoIGJ1ZmZlciB3aGVuIGl0IHNob3VsZCBub3QgaGF2ZSIpOwotICAgIH0KLSAgICBpZiAo
IWNvbnRleHRBdHRyaWJzLmRlcHRoKQotICAgICAgICBkZXB0aCA9IGZhbHNlOwotICAgIGlmICgh
c3RlbmNpbCAmJiBjb250ZXh0QXR0cmlicy5zdGVuY2lsKSB7Ci0gICAgICAgIHRlc3RGYWlsZWQo
IldlYkdMIGltcGxlbWVudGF0aW9uIHByb3ZpZGVkIGEgc3RlbmNpbCBidWZmZXIgd2hlbiBpdCBz
aG91bGQgbm90IGhhdmUiKTsKLSAgICB9Ci0gICAgaWYgKCFjb250ZXh0QXR0cmlicy5zdGVuY2ls
KQotICAgICAgICBzdGVuY2lsID0gZmFsc2U7Ci0KLSAgICBnbC5kZXB0aEZ1bmMoZ2wuQUxXQVlT
KTsKLQotICAgIGdsLnN0ZW5jaWxGdW5jKGdsLk5FVkVSLCAxLCAxKTsKLSAgICBnbC5zdGVuY2ls
T3AoZ2wuS0VFUCwgZ2wuS0VFUCwgZ2wuS0VFUCk7Ci0KLSAgICB2YXIgdmVydGljZXMgPSBuZXcg
RmxvYXQzMkFycmF5KFsKLSAgICAgICAgIDEuMCwgMS4wLCAwLjAsCi0gICAgICAgIC0xLjAsIDEu
MCwgMC4wLAotICAgICAgICAtMS4wLCAtMS4wLCAwLjAsCi0gICAgICAgICAxLjAsIDEuMCwgMC4w
LAotICAgICAgICAtMS4wLCAtMS4wLCAwLjAsCi0gICAgICAgICAxLjAsIC0xLjAsIDAuMF0pOwot
ICAgIHZhciBjb2xvcnMgPSBuZXcgVWludDhBcnJheShbCi0gICAgICAgIDI1NSwgMCwgMCwgMjU1
LAotICAgICAgICAyNTUsIDAsIDAsIDI1NSwKLSAgICAgICAgMjU1LCAwLCAwLCAyNTUsCi0gICAg
ICAgIDI1NSwgMCwgMCwgMjU1LAotICAgICAgICAyNTUsIDAsIDAsIDI1NSwKLSAgICAgICAgMjU1
LCAwLCAwLCAyNTVdKTsKLQotICAgIGRyYXdBbmRSZWFkUGl4ZWwoZ2wsIHZlcnRpY2VzLCBjb2xv
cnMsIDAsIDApOwotICAgIGNvcnJlY3RDb2xvciA9IChzdGVuY2lsID8gWzAsIDAsIDAsIDI1NV0g
OiBbMjU1LCAwLCAwLCAyNTVdKTsKLSAgICB3dHUuY2hlY2tDYW52YXNSZWN0KGdsLCAwLCAwLCAx
LCAxLCBjb3JyZWN0Q29sb3IpCi0KLSAgICBpZiAoZmJIYXNTdGVuY2lsKSB7Ci0gICAgICBnbC5i
aW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGZyYW1lYnVmZmVyKTsKLSAgICAgIGdsLmNs
ZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQgfCBnbC5ERVBUSF9CVUZGRVJfQklUKTsKLSAgICAgIGRy
YXdBbmRSZWFkUGl4ZWwoZ2wsIHZlcnRpY2VzLCBjb2xvcnMsIDAsIDApOwotICAgICAgd3R1LmNo
ZWNrQ2FudmFzUmVjdChnbCwgMCwgMCwgMSwgMSwgWzAsIDAsIDAsIDI1NV0pOwotICAgICAgZ2wu
YmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTsKLSAgICB9Ci19Ci0KLWZ1bmN0
aW9uIHRlc3RBbnRpYWxpYXMoYW50aWFsaWFzKQotewotICAgIGRlYnVnKCJUZXN0aW5nIGFudGlh
bGlhcyA9ICIgKyBhbnRpYWxpYXMpOwotICAgIC8vIEJvdGggdGhlIHdpZHRoIGFuZCBoZWlnaHQg
b2YgY2FudmFzIGFyZSBOLgotICAgIHZhciBOID0gMjsKLSAgICBpZiAoYW50aWFsaWFzKQotICAg
ICAgICBzaG91bGRCZU5vbk51bGwoImdsID0gZ2V0V2ViR0woIiArIE4gKyAiLCAiICsgTiArICIs
IHsgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYWxwaGE6IGZhbHNlLCBhbnRpYWxpYXM6
IHRydWUgfSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIik7Ci0gICAgZWxzZQotICAgICAgICBzaG91
bGRCZU5vbk51bGwoImdsID0gZ2V0V2ViR0woIiArIE4gKyAiLCAiICsgTiArICIsIHsgZGVwdGg6
IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYWxwaGE6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0s
IFsgMCwgMCwgMCwgMSBdLCAxLCAwKSIpOwotICAgIHNob3VsZEJlTm9uTnVsbCgiY29udGV4dEF0
dHJpYnMgPSBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpIik7Ci0KLSAgICB2YXIgdmVydGljZXMg
PSBuZXcgRmxvYXQzMkFycmF5KFsKLSAgICAgICAgIDEuMCwgMS4wLCAwLjAsCi0gICAgICAgIC0x
LjAsIDEuMCwgMC4wLAotICAgICAgICAtMS4wLCAtMS4wLCAwLjBdKTsKLSAgICB2YXIgY29sb3Jz
ID0gbmV3IFVpbnQ4QXJyYXkoWwotICAgICAgICAyNTUsIDAsIDAsIDI1NSwKLSAgICAgICAgMjU1
LCAwLCAwLCAyNTUsCi0gICAgICAgIDI1NSwgMCwgMCwgMjU1XSk7Ci0gICAgZHJhd0FuZFJlYWRQ
aXhlbChnbCwgdmVydGljZXMsIGNvbG9ycywgMCwgMCk7Ci0gICAgdmFyIGJ1ZiA9IG5ldyBVaW50
OEFycmF5KE4gKiBOICogNCk7Ci0gICAgZ2wucmVhZFBpeGVscygwLCAwLCBOLCBOLCBnbC5SR0JB
LCBnbC5VTlNJR05FRF9CWVRFLCBidWYpOwotICAgIHJlZENoYW5uZWxzWzBdID0gYnVmWzQgKiAo
TiArIDEpXTsgLy8gKDEsIDEpCi0gICAgcmVkQ2hhbm5lbHNbMV0gPSBidWZbNCAqIE4gKiAoTiAt
IDEpXTsgLy8gbGVmdCB0b3AKLSAgICByZWRDaGFubmVsc1syXSA9IGJ1Zls0ICogKE4gLSAxKV07
IC8vIHJpZ2h0IGJvdHRvbQotICAgIHNob3VsZEJlVHJ1ZSgicmVkQ2hhbm5lbHNbMV0gPT0gMjU1
ICYmIHJlZENoYW5uZWxzWzJdID09IDAiKTsKLSAgICBzaG91bGRCZSgicmVkQ2hhbm5lbHNbMF0g
IT0gMjU1ICYmIHJlZENoYW5uZWxzWzBdICE9IDAiLCAiY29udGV4dEF0dHJpYnMuYW50aWFsaWFz
Iik7Ci19Ci0KLWZ1bmN0aW9uIHJ1blRlc3QoKQotewotICAgIC8vIHRlc3REZWZhdWx0KCk7Ci0g
ICAgLy8gdGVzdEFscGhhKHRydWUpOwotICAgIC8vIHRlc3RBbHBoYShmYWxzZSk7Ci0gICAgLy8g
dGVzdERlcHRoKHRydWUpOwotICAgIC8vIHRlc3REZXB0aChmYWxzZSk7Ci0gICAgLy8gdGVzdFN0
ZW5jaWxBbmREZXB0aCh0cnVlLCBmYWxzZSk7Ci0gICAgLy8gdGVzdFN0ZW5jaWxBbmREZXB0aChm
YWxzZSwgZmFsc2UpOwotICAgIC8vIHRlc3RTdGVuY2lsQW5kRGVwdGgodHJ1ZSwgdHJ1ZSk7Ci0g
ICAgLy8gdGVzdFN0ZW5jaWxBbmREZXB0aChmYWxzZSwgdHJ1ZSk7Ci0gICAgdGVzdEFudGlhbGlh
cyh0cnVlKTsKLSAgICAvL3Rlc3RBbnRpYWxpYXMoZmFsc2UpOwotCi0gICAgZmluaXNoVGVzdCgp
OwotfQotCi08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IG9ubG9hZD0iaW5pdCgpIj4KLTxkaXYg
aWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KLTxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgotPC9ib2R5
PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJj
ZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXdpdGgtcmVz
ZXJ2ZWQtd29yZHMtMi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMv
d2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXdpdGgtcmVzZXJ2
ZWQtd29yZHMtMi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWUwMzI3ODg2
M2Y2OWQyYmU1ZWJjMWI0NGQwMTQ5OWE3MTRjZTE1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvcmVzb3VyY2Vz
L3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci13aXRoLXJlc2Vy
dmVkLXdvcmRzLTIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyNiArMCwwIEBACi08IS0tCi1D
b3B5cmlnaHQgKGMpIDIwMjEgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgotVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LWZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlLgotLS0+Ci0KLTwhRE9DVFlQRSBodG1sPgot
PGh0bWw+Ci08aGVhZD4KLTxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KLTx0aXRsZT5XZWJHTCBHTFNM
IENvbmZvcm1hbmNlIFRlc3RzIC0gTm9uIFJlc2VydmVkIFdvcmRzPC90aXRsZT4KLTxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ii8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL3Jlc291cmNlcy9nbHNs
LWZlYXR1cmUtdGVzdHMuY3NzIi8+Ci08c2NyaXB0IHNyYz0iLi4vLi4vLi4vanMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2pzL3dlYmdsLXRlc3QtdXRp
bHMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08ZGl2IGlkPSJkZXNjcmlwdGlvbiI+
PC9kaXY+Ci08ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KLTxzY3JpcHQgaWQ9InZlcnRleFNoYWRl
cjAiIHR5cGU9InRleHQvc29tZXRoaW5nLW5vdC1qYXZhc2NyaXB0Ij4KLXN0cnVjdCAkcmVwbGFj
ZU1lIHsKLSAgdmVjNCAkcmVwbGFjZU1lOwotfTsKLXN0cnVjdCBGb28gewotICAkcmVwbGFjZU1l
ICRyZXBsYWNlTWU7Ci19OwotYXR0cmlidXRlIHZlYzQgcG9zaXRpb247Ci12b2lkIG1haW4oKQot
ewotICAgIEZvbyBmOwotICAgIGYuJHJlcGxhY2VNZS4kcmVwbGFjZU1lID0gcG9zaXRpb247Ci0g
ICAgZ2xfUG9zaXRpb24gPSBmLiRyZXBsYWNlTWUuJHJlcGxhY2VNZTsKLX0KLTwvc2NyaXB0Pgot
PHNjcmlwdCBpZD0iZnJhZ21lbnRTaGFkZXIwIiB0eXBlPSJ0ZXh0L3NvbWV0aGluZy1ub3QtamF2
YXNjcmlwdCI+Ci1wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLXZlYzQgJHJlcGxhY2VNZSgpIHsK
LSAgICByZXR1cm4gdmVjNCgwLDEsMCwxKTsKLX0KLXZvaWQgbWFpbigpCi17Ci0gICAgZ2xfRnJh
Z0NvbG9yID0gJHJlcGxhY2VNZSgpOwotfQotPC9zY3JpcHQ+Ci08c2NyaXB0IGlkPSJ2ZXJ0ZXhT
aGFkZXIxIiB0eXBlPSJ0ZXh0L3NvbWV0aGluZy1ub3QtamF2YXNjcmlwdCI+Ci1hdHRyaWJ1dGUg
dmVjNCAkcmVwbGFjZU1lOwotdm9pZCBtYWluKCkKLXsKLSAgICBnbF9Qb3NpdGlvbiA9ICRyZXBs
YWNlTWU7Ci19Ci08L3NjcmlwdD4KLTxzY3JpcHQgaWQ9ImZyYWdtZW50U2hhZGVyMSIgdHlwZT0i
dGV4dC9zb21ldGhpbmctbm90LWphdmFzY3JpcHQiPgotcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7
Ci12ZWM0IGZvbyh2ZWM0ICRyZXBsYWNlTWUpIHsKLSAgcmV0dXJuICRyZXBsYWNlTWU7Ci19Ci12
b2lkIG1haW4oKQotewotICAgIGdsX0ZyYWdDb2xvciA9IGZvbyh2ZWM0KDEsMCwxLDEpKTsKLX0K
LTwvc2NyaXB0PgotPHNjcmlwdCBpZD0idmVydGV4U2hhZGVyMiIgdHlwZT0idGV4dC9zb21ldGhp
bmctbm90LWphdmFzY3JpcHQiPgotdmFyeWluZyB2ZWM0ICRyZXBsYWNlTWU7Ci1hdHRyaWJ1dGUg
dmVjNCBwb3NpdGlvbjsKLXZvaWQgbWFpbigpCi17Ci0gICAgZ2xfUG9zaXRpb24gPSBwb3NpdGlv
bjsKLSAgICAkcmVwbGFjZU1lID0gcG9zaXRpb247Ci19Ci08L3NjcmlwdD4KLTxzY3JpcHQgaWQ9
ImZyYWdtZW50U2hhZGVyMiIgdHlwZT0idGV4dC9zb21ldGhpbmctbm90LWphdmFzY3JpcHQiPgot
cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci12YXJ5aW5nIHZlYzQgJHJlcGxhY2VNZTsKLXZvaWQg
bWFpbigpCi17Ci0gICAgZ2xfRnJhZ0NvbG9yID0gJHJlcGxhY2VNZTsKLX0KLTwvc2NyaXB0Pgot
PHNjcmlwdCBpZD0idmVydGV4U2hhZGVyMyIgdHlwZT0idGV4dC9zb21ldGhpbmctbm90LWphdmFz
Y3JpcHQiPgotYXR0cmlidXRlIHZlYzQgcG9zaXRpb247Ci12b2lkIG1haW4oKQotewotICAgIGds
X1Bvc2l0aW9uID0gcG9zaXRpb247Ci19Ci08L3NjcmlwdD4KLTxzY3JpcHQgaWQ9ImZyYWdtZW50
U2hhZGVyMyIgdHlwZT0idGV4dC9zb21ldGhpbmctbm90LWphdmFzY3JpcHQiPgotcHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7Ci11bmlmb3JtIHZlYzQgJHJlcGxhY2VNZTsKLXZvaWQgbWFpbigpCi17
Ci0gICAgZ2xfRnJhZ0NvbG9yID0gJHJlcGxhY2VNZTsKLX0KLTwvc2NyaXB0PgotPHNjcmlwdD4K
LSJ1c2Ugc3RyaWN0IjsKLQotdmFyIE1ldGFsV29yZHMgPSBbCi0gICJhbGlnbmFzIiwKLSAgImFs
aWdub2YiLAotICAiYXNfdHlwZSIsCi0gICJhbmQiLAotICAiYXV0byIsCi0gICJjYXRjaCIsCi0g
ICJjaGFyIiwKLSAgImNvbnN0X2Nhc3QiLAotICAiY29uc3RhbnQiLAotICAiY29uc3RleHByIiwK
LSAgImRlY2x0eXBlIiwKLSAgImRlbGV0ZSIsCi0gICJkZXZpY2UiLAotICAiZHluYW1pY19jYXN0
IiwKLSAgImV4cGxpY2l0IiwKLSAgImV4cG9ydCIsCi0gICJmcmFnbWVudCIsCi0gICJmcmllbmQi
LAotICAiaW50MTZfdCIsCi0gICJpbnQzMl90IiwKLSAgImludDY0X3QiLAotICAiaW50OF90IiwK
LSAgImtlcm5lbCIsCi0gICJtYWluMCIsCi0gICJtZXRhbCIsCi0gICJtdXRhYmxlIiwKLSAgIm5l
dyIsCi0gICJub2V4Y2VwdCIsCi0gICJudWxscHRyX3QiLAotICAibnVsbHB0ciIsCi0gICJvcGVy
YXRvciIsCi0gICJvdmVycmlkZSIsCi0gICJvciIsCi0gICJwcml2YXRlIiwKLSAgInByb3RlY3Rl
ZCIsCi0gICJwdHJkaWZmX3QiLAotICAicmF5X2RhdGEiLAotICAicmVnaXN0ZXIiLAotICAic2ln
bmVkIiwKLSAgInNpemVfdCIsCi0gICJzdGFnZV9pbiIsCi0gICJzdGF0aWNfYXNzZXJ0IiwKLSAg
InN0YXRpY19jYXN0IiwKLSAgInRocmVhZF9sb2NhbCIsCi0gICJ0aHJlYWQiLAotICAidGhyZWFk
Z3JvdXBfaW1hZ2VibG9jayIsCi0gICJ0aHJlYWRncm91cCIsCi0gICJ0aHJvdyIsCi0gICJ0cnki
LAotICAidHlwZWlkIiwKLSAgInR5cGVuYW1lIiwKLSAgInVjaGFyIiwKLSAgInVpbnQxNl90IiwK
LSAgInVpbnQzMl90IiwKLSAgInVpbnQ2NF90IiwKLSAgInVpbnQ4X3QiLAotICAidXNob3J0IiwK
LSAgInZlcnRleCIsCi0gICJ2aXJ0dWFsIiwKLSAgIndjaGFyX3QiLAotICAieG9yIiwKLSAgIk5B
TiIsCi0gICJJTkZJTklUWSIsCi0gICJQcmFnbWEiLAotICAiX1ByYWdtYSIsCi0gICJBTkdMRV8x
IiwKLSAgIklOVF9NQVgiLAotXTsKLQotCi1kZXNjcmlwdGlvbigpOwotCi12YXIgd3R1ID0gV2Vi
R0xUZXN0VXRpbHM7Ci12YXIgZ2wgPSB3dHUuY3JlYXRlM0RDb250ZXh0KCk7Ci0KLXZhciBzb3Vy
Y2VzID0gW107Ci1mb3IgKHZhciBpaSA9IDA7IGlpIDwgNDsgKytpaSkgewotICB2YXIgdnNyYyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ2ZXJ0ZXhTaGFkZXIiICsgaWkpLnRleHQ7Ci0gIHZh
ciBmc3JjID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZyYWdtZW50U2hhZGVyIiArIGlpKS50
ZXh0OwotICBzb3VyY2VzLnB1c2goe3ZzcmM6IHZzcmMsIGZzcmM6IGZzcmN9KTsKLX0KLQotdmFy
IGJhZFdvcmROZHggPSAwOwotdmFyIGxpc3ROZHggPSAwOwotCi1mdW5jdGlvbiB0ZXN0TmV4dFdv
cmQoKSB7Ci0gIHZhciBsaXN0ID0gTWV0YWxXb3JkczsKLSAgaWYgKGxpc3ROZHggPj0gbGlzdC5s
ZW5ndGgpIHsKLSAgICAgIGZpbmlzaFRlc3QoKTsKLSAgICAgIHJldHVybjsKLSAgfQotICB0ZXN0
V29yZChsaXN0W2xpc3ROZHhdKTsKLSAgKytsaXN0TmR4OwotICBzZXRUaW1lb3V0KHRlc3ROZXh0
V29yZCwgMCk7Ci19Ci10ZXN0TmV4dFdvcmQoKTsKLQotZnVuY3Rpb24gdGVzdFdvcmQod29yZCkg
ewotICBkZWJ1ZygiIik7Ci0gIGRlYnVnKCJ0ZXN0aW5nOiAiICsgd29yZCk7Ci0KLSAgc291cmNl
cy5mb3JFYWNoKHNyYyA9PiB7Ci0gICAgdmFyIHZzID0gc3JjLnZzcmMucmVwbGFjZSgvXCRyZXBs
YWNlTWUvZywgd29yZCk7Ci0gICAgdmFyIGZzID0gc3JjLmZzcmMucmVwbGFjZSgvXCRyZXBsYWNl
TWUvZywgd29yZCk7Ci0KLSAgICB2YXIgc3VjY2VzcyA9IHRydWU7Ci0gICAgdmFyIHByb2dyYW0g
PSB3dHUubG9hZFByb2dyYW0oZ2wsIHZzLCBmcywgZnVuY3Rpb24obXNnKSB7Ci0gICAgICBkZWJ1
Zyhtc2cpOwotICAgICAgc3VjY2VzcyA9IGZhbHNlOwotICAgIH0sIHRydWUpOwotICAgIGlmIChz
dWNjZXNzKSB7Ci0gICAgICB0ZXN0UGFzc2VkKCJzaGFkZXIgd2l0aDogJyIgKyB3b3JkICsgIicg
Y29tcGlsZWQiKTsKLSAgICB9IGVsc2UgewotICAgICAgdGVzdEZhaWxlZCgic2hhZGVyIHdpdGg6
ICciICsgd29yZCArICInIGZhaWxlZCB0byBjb21waWxlIik7Ci0gICAgfQotICAgIGlmIChwcm9n
cmFtKSB7Ci0gICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pOwotICAgIH0KLSAgICB3dHUu
Z2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgInNob3VsZCBiZSBubyBHTCBlcnJvcnMi
KTsKLSAgfSk7Ci19Ci0KLQotdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Ci08L3Njcmlw
dD4KLTwvYm9keT4KLTwvaHRtbD4KLQotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJnbC9w
ZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9z
d2l6emxlLWFzLWx2YWx1ZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJj
ZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc3dpenpsZS1hcy1sdmFs
dWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFmMzI3NjIyMGU5ZmQzODc0
M2NhNDAwYWEyZmRlMWZjZmRmOTk1ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90
ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zd2l6emxlLWFzLWx2YWx1ZS5odG1sCisr
KyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAgQEAKLTwhLS0KLUNvcHlyaWdodCAoYykgMjAyMSBU
aGUgS2hyb25vcyBHcm91cCBJbmMuCi1Vc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotZm91bmQgaW4gdGhlIExJQ0VO
U0UudHh0IGZpbGUuCi0tLT4KLQotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPG1l
dGEgY2hhcnNldD0idXRmLTgiPgotPHRpdGxlPldlYkdMIEdMU0wgQ29uZm9ybWFuY2UgVGVzdHMg
LSBTd2l6emxlIGFzIGx2YWx1ZTwvdGl0bGU+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgotPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9yZXNvdXJjZXMvZ2xzbC1mZWF0dXJlLXRlc3RzLmNzcyIv
PgotPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2pzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KLTxz
Y3JpcHQgc3JjPSIuLi8uLi8uLi9qcy93ZWJnbC10ZXN0LXV0aWxzLmpzIj48L3NjcmlwdD4KLTxz
Y3JpcHQgc3JjPSIuLi8uLi8uLi9qcy9nbHNsLWNvbmZvcm1hbmNlLXRlc3QuanMiPjwvc2NyaXB0
PgotPC9oZWFkPgotPGJvZHk+Ci08ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Ci08ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KLTwhLS0KLVRlc3RzIHN3aXp6bGUgbHZhbHVlcyB3aXRoIG91dCBh
bmQgaW5vdXQgZnVuY3Rpb24gcGFyYW1ldGVycy4KLTYuMS4xIEZ1bmN0aW9uIENhbGxpbmcgQ29u
dmVudGlvbnMKLUV2YWx1YXRpb24gb2YgYW4gaW5vdXQgcGFyYW1ldGVyIHJlc3VsdHMgaW4gYm90
aCBhIHZhbHVlIGFuZCBhbiBsLXZhbHVlOyB0aGUgdmFsdWUgaXMgY29waWVkIHRvCi10aGUgZm9y
bWFsIHBhcmFtZXRlciBhdCBjYWxsIHRpbWUgYW5kIHRoZSBsLSB2YWx1ZSBpcyB1c2VkIHRvIGNv
cHkgb3V0IGEgdmFsdWUgd2hlbiB0aGUgZnVuY3Rpb24KLXJldHVybnMuCi0tLT4KLTxzY3JpcHQg
aWQ9ImZzMCIgdHlwZT0idGV4dC9zb21ldGhpbmctbm90LWphdmFzY3JpcHQiPgotcHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7Ci12b2lkIGYob3V0ICRkaW0gdikgewotICAgIHYgPSAkcmVmOwotfQot
dm9pZCBtYWluKCkKLXsKLSAgICB2ZWM0IGkgPSB2ZWM0KDEwLiwgMTEuLCAxMi4sIDEzLik7Ci0g
ICAgZihpLiRjb21wb25lbnRzKTsKLSAgICBib29sIGNvcnJlY3QgPSBmYWxzZTsKLSAgICBpZiAo
aSA9PSAkcmVzdWx0KQotICAgICAgICBjb3JyZWN0ID0gdHJ1ZTsKLSAgICBnbF9GcmFnQ29sb3Ig
PSB2ZWM0KDAsIGNvcnJlY3QgPyAxLiA6IDAuLCAwLiwgMS4pOwotfQotPC9zY3JpcHQ+Ci08c2Ny
aXB0IGlkPSJmczEiIHR5cGU9InRleHQvc29tZXRoaW5nLW5vdC1qYXZhc2NyaXB0Ij4KLXByZWNp
c2lvbiBtZWRpdW1wIGZsb2F0Owotdm9pZCBmKGlub3V0ICRkaW0gdikgewotICAgIHYgKz0gJHJl
ZjsKLX0KLXZvaWQgbWFpbigpCi17Ci0gICAgdmVjNCBpID0gdmVjNCgxMC4sIDExLiwgMTIuLCAx
My4pOwotICAgIGYoaS4kY29tcG9uZW50cyk7Ci0gICAgYm9vbCBjb3JyZWN0ID0gZmFsc2U7Ci0g
ICAgaWYgKGkgPT0gJHJlc3VsdEluT3V0KQotICAgICAgICBjb3JyZWN0ID0gdHJ1ZTsKLSAgICBn
bF9GcmFnQ29sb3IgPSB2ZWM0KDAsIGNvcnJlY3QgPyAxLiA6IDAuLCAwLiwgMS4pOwotfQotPC9z
Y3JpcHQ+Ci08c2NyaXB0PgotInVzZSBzdHJpY3QiOwotCi1kZXNjcmlwdGlvbigpOwotCi0vLyBH
TFNMIEVTIDMuMDAuNiA1LjUgVmVjdG9yIENvbXBvbmVudHMKLS8vIFRvIGZvcm0gYW4gbC12YWx1
ZSwgc3dpenpsaW5nIG11c3QgYmUgYXBwbGllZCB0byBhbiBsLXZhbHVlIG9mIHZlY3RvciB0eXBl
LCBjb250YWluIG5vIGR1cGxpY2F0ZQotLy8gY29tcG9uZW50cywgYW5kIGl0IHJlc3VsdHMgaW4g
YW4gbC12YWx1ZSBvZiBzY2FsYXIgb3IgdmVjdG9yIHR5cGUsIGRlcGVuZGluZyBvbiBudW1iZXIg
b2YKLS8vIGNvbXBvbmVudHMgc3BlY2lmaWVkLgotZnVuY3Rpb24gY29tcHV0ZUxWYWx1ZVN3aXp6
bGVzKCkgewotICAgIGxldCByZXN1bHRzID0gW107Ci0gICAgZnVuY3Rpb24gZihjb21wb25lbnRz
LCBzd2l6emxlKSB7Ci0gICAgICAgIGZvciAobGV0IGMgb2YgY29tcG9uZW50cykgewotICAgICAg
ICAgICAgcmVzdWx0cy5wdXNoKHN3aXp6bGUuY29uY2F0KFtjXSkpOwotICAgICAgICAgICAgbGV0
IHJlc3QgPSBjb21wb25lbnRzLmZpbHRlcigoZSkgPT4geyByZXR1cm4gZSAhPSBjOyB9KTsKLSAg
ICAgICAgICAgIGlmIChyZXN0KQotICAgICAgICAgICAgICAgIGYocmVzdCwgc3dpenpsZS5jb25j
YXQoW2NdKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZihbMCwgMSwgMiwgM10sIFtdKTsKLSAg
ICByZXR1cm4gcmVzdWx0czsKLX0KLQotdmFyIHN3aXp6bGVzID0gY29tcHV0ZUxWYWx1ZVN3aXp6
bGVzKCk7Ci0KLS8vIFNhbml0eSBjaGVjayB0aGF0IGNvbXB1dGluZyB0aGUgc3dpenpsZXMgcHJv
ZHVjZXMgc29tZXRoaW5nIHRvIHRlc3QuCi1zaG91bGRCZSgic3dpenpsZXMubGVuZ3RoIiwgIjY0
Iik7Ci1zaG91bGRCZSgiY29tcG9uZW50cyhzd2l6emxlc1swXSkiLCAiJ3InIik7Ci1zaG91bGRC
ZSgiY29tcG9uZW50cyhzd2l6emxlc1tzd2l6emxlcy5sZW5ndGggLSAxXSkiLCAiJ2FiZ3InIik7
Ci0KLXZhciByZWZWYWx1ZSA9IFsgIjEuIiwgIjIuIiwgIjMuIiwgIjQuIiBdOwotCi12YXIgaW5p
dCA9IFsgIjEwLiIsICIxMS4iLCAiMTIuIiwgIjEzLiIgXTsKLQotZnVuY3Rpb24gZGltKHN3aXp6
bGUpIHsKLSAgaWYgKHN3aXp6bGUubGVuZ3RoID09IDEpCi0gICAgcmV0dXJuICdmbG9hdCcKLSAg
cmV0dXJuIGB2ZWMke3N3aXp6bGUubGVuZ3RofWA7Ci19Ci0KLWZ1bmN0aW9uIHJlc3VsdChzd2l6
emxlKSB7Ci0gIGxldCBhID0gaW5pdC5tYXAoKGUsIGMpID0+IHsKLSAgICAgIGlmIChzd2l6emxl
LmluY2x1ZGVzKGMpKQotICAgICAgICByZXR1cm4gcmVmVmFsdWVbY107Ci0gICAgICByZXR1cm4g
ZTsKLSAgfSk7Ci0gIHJldHVybiBgdmVjNCgke2Euam9pbignLCAnKX0pYDsKLX0KLQotZnVuY3Rp
b24gcmVzdWx0SW5PdXQoc3dpenpsZSkgewotICBsZXQgYSA9IGluaXQubWFwKChlLCBjKSA9PiB7
Ci0gICAgICBpZiAoc3dpenpsZS5pbmNsdWRlcyhjKSkKLSAgICAgICAgcmV0dXJuIGAke2V9ICsg
JHtyZWZWYWx1ZVtjXX1gOwotICAgICAgcmV0dXJuIGU7Ci0gIH0pOwotICByZXR1cm4gYHZlYzQo
JHthLmpvaW4oJywgJyl9KWA7Ci19Ci0KLWZ1bmN0aW9uIHJlZihzd2l6emxlKSB7Ci0gIGxldCBh
ID0gc3dpenpsZS5tYXAoKGMpID0+IHsgcmV0dXJuIHJlZlZhbHVlW2NdOyB9KTsKLSAgcmV0dXJu
IGAke2RpbShzd2l6emxlKX0oJHthLmpvaW4oJywgJyl9KWA7Ci19Ci0KLWZ1bmN0aW9uIGNvbXBv
bmVudHMoc3dpenpsZSkgewotICByZXR1cm4gc3dpenpsZS5tYXAoKGUpID0+IHsgcmV0dXJuICdy
Z2JhJ1tlXTsgfSkuam9pbignJyk7Ci19Ci0KLXZhciB0ZXN0cyA9IFtdOwotZm9yICh2YXIgc3dp
enpsZSBvZiBzd2l6emxlcykgewotICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgMjsgKytpaSkgewot
ICAgIHZhciBmc3JjID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZzIiArIGlpKS50ZXh0Owot
ICAgIGZzcmMgPSBmc3JjLnJlcGxhY2UoL1wkZGltL2csIGRpbShzd2l6emxlKSkKLSAgICAgICAg
ICAgICAgIC5yZXBsYWNlKC9cJHJlc3VsdEluT3V0L2csIHJlc3VsdEluT3V0KHN3aXp6bGUpKQot
ICAgICAgICAgICAgICAgLnJlcGxhY2UoL1wkcmVzdWx0L2csIHJlc3VsdChzd2l6emxlKSkKLSAg
ICAgICAgICAgICAgIC5yZXBsYWNlKC9cJHJlZi9nLCByZWYoc3dpenpsZSkpCi0gICAgICAgICAg
ICAgICAucmVwbGFjZSgvXCRjb21wb25lbnRzL2csIGNvbXBvbmVudHMoc3dpenpsZSkpOwotICAg
IHRlc3RzLnB1c2goewotICAgICAgICBmU2hhZGVyU291cmNlOiBmc3JjLAotICAgICAgICBmU2hh
ZGVyU3VjY2VzczogdHJ1ZSwKLSAgICAgICAgbGlua1N1Y2Nlc3M6IHRydWUsCi0gICAgICAgIHBh
c3NNc2c6IGBTd2l6emxlIGFzIGx2YWx1ZSB3b3JrcywgZnVuYzogJHtpaX0sIHN3aXp6bGU6ICR7
Y29tcG9uZW50cyhzd2l6emxlKX1gCi0gICAgfSk7Ci0gIH0KLX0KLQotR0xTTENvbmZvcm1hbmNl
VGVzdGVyLnJ1blJlbmRlclRlc3RzKHRlc3RzKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xf
dGVzdF9maWxlcy9jb25mb3JtYW5jZS90ZXh0dXJlcy9taXNjL3RleC1pbWFnZS12aWRlby1yZXBl
YXRlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVz
dF9maWxlcy9jb25mb3JtYW5jZS90ZXh0dXJlcy9taXNjL3RleC1pbWFnZS12aWRlby1yZXBlYXRl
ZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGIyMTdhZmY3YjVjMTcwYTY3
MDM2NWRlY2JjYzc3OWZkMzQ1MGIyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dlYmdsX3Rl
c3RfZmlsZXMvY29uZm9ybWFuY2UvdGV4dHVyZXMvbWlzYy90ZXgtaW1hZ2UtdmlkZW8tcmVwZWF0
ZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi08IS0tCi1Db3B5cmlnaHQg
KGMpIDIwMjIgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgotVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLWZvdW5kIGlu
IHRoZSBMSUNFTlNFLnR4dCBmaWxlLgotLS0+Ci08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhl
YWQ+Ci08bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgotPHNjcmlwdCBzcmM9Ii4u
Ly4uLy4uL2pzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi8uLi8u
Li9qcy93ZWJnbC10ZXN0LXV0aWxzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci0idXNlIHN0cmlj
dCI7Ci12YXIgd3R1ID0gV2ViR0xUZXN0VXRpbHM7Ci12YXIgZ2wgPSBudWxsOwotdmFyIHRleHR1
cmVMb2MgPSBudWxsOwotdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNlOwotdmFyIGJsdWUg
PSBbMCwgMCwgMjQ4XTsKLXZhciB5ZWxsb3cgPSBbMjU1LCAyNTUsIDBdOwotdmFyIGJsYWNrID0g
WzAsIDAsIDBdOwotaW5pdFRlc3RpbmdIYXJuZXNzKCk7Ci0KLWZ1bmN0aW9uIGluaXQoKQotewot
ICAgIGRlc2NyaXB0aW9uKCdWZXJpZnkgb3B0aW1pemF0aW9uIG9mIHJlcGVhdGVkIHVwbG9hZHMg
b2YgSFRNTFZpZGVvRWxlbWVudCB0byBhIHRleHR1cmUnKTsKLQotICAgIGNvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJleGFtcGxlIik7Ci0gICAgZ2wgPSB3dHUuY3JlYXRl
M0RDb250ZXh0KGNhbnZhcywgeyBhbnRpYWxpYXM6IGZhbHNlLCBkZXB0aDogZmFsc2UgfSk7Ci0g
ICAgY29uc3QgcHJvZ3JhbSA9IHd0dS5zZXR1cFRleHR1cmVkUXVhZChnbCk7Ci0gICAgZ2wuY2xl
YXJDb2xvcigwLDAsMCwxKTsKLSAgICBnbC5jbGVhckRlcHRoKDEpOwotICAgIGdsLmNsZWFyKGds
LkNPTE9SX0JVRkZFUl9CSVQgfCBnbC5ERVBUSF9CVUZGRVJfQklUKTsKLSAgICBjb25zdCB0ZXh0
dXJlTG9jID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJ0ZXgiKTsKLSAgICBnbC51
bmlmb3JtMWkodGV4dHVyZUxvYywgMCk7Ci0gICAgZ2wudmlld3BvcnQoMCwgMCwgY2FudmFzLndp
ZHRoLCBjYW52YXMuaGVpZ2h0KTsKLQotICAgIGNvbnN0IHZpZGVvMSA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJ2aWRlbzEiKTsKLSAgICBjb25zdCB2aWRlbzIgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgidmlkZW8yIik7Ci0gICAgd3R1LnN0YXJ0UGxheWluZ0FuZFdhaXRGb3JWaWRlbyh2
aWRlbzEsICh2aWRlbykgPT4gewotICAgICAgICB3dHUuc3RhcnRQbGF5aW5nQW5kV2FpdEZvclZp
ZGVvKHZpZGVvMiwgKHZpZGVvKSA9PiB7Ci0gICAgICAgICAgICBydW5UZXN0KHZpZGVvMSwgdmlk
ZW8yKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLWZ1bmN0aW9uIGNoZWNrRnJhbWVidWZm
ZXJIYXNWaWRlbzIoZ2wpCi17Ci0gICAgY29uc3QgbGVmdENvbG9yID0gYmx1ZTsKLSAgICBjb25z
dCByaWdodENvbG9yID0geWVsbG93OwotICAgIGNvbnN0IHRvbGVyYW5jZSA9IDU7Ci0gICAgZGVi
dWcoIkNoZWNraW5nIG1pZCBsZWZ0IGJvcmRlciIpOwotICAgIHd0dS5jaGVja0NhbnZhc1JlY3Qo
Z2wsIDQsIDIwLCAyLCAyLCBsZWZ0Q29sb3IsICJzaG91bGRCZSAiICsgbGVmdENvbG9yLCB0b2xl
cmFuY2UpOwotICAgIGRlYnVnKCJDaGVja2luZyBtaWQgcmlnaHQgYm9yZGVyIik7Ci0gICAgd3R1
LmNoZWNrQ2FudmFzUmVjdChnbCwgZ2wuY2FudmFzLndpZHRoIC0gNCwgZ2wuY2FudmFzLmhlaWdo
dCAtIDIwLCAyLCAyLCByaWdodENvbG9yLCAic2hvdWxkQmUgIiArIHJpZ2h0Q29sb3IsIHRvbGVy
YW5jZSk7Ci19Ci0KLWZ1bmN0aW9uIHRlc3RUd29UZXh0dXJlc0J1ZzEodmlkZW8xLCB2aWRlbzIp
Ci17Ci0gICAgZGVidWcoIlRlc3RpbmcgdXBsb2FkaW5nIHNhbWUgdmlkZW8gdG8gdHdvIGRpZmZl
cmVudCB0ZXh0dXJlcyBkb2VzIG5vdCBza2lwIHRoZSBsYXR0ZXIgdXBsb2FkIikKLSAgICBjb25z
dCB0ZXh0dXJlcyA9IFtnbC5jcmVhdGVUZXh0dXJlKCksIGdsLmNyZWF0ZVRleHR1cmUoKV07Ci0g
ICAgLy8gSW5pdGlhbGl6ZSB0ZXh0dXJlWzBdIHRvIHNvbWUgc3BlY2lmaWMgY29udGVudCB0aGF0
IGZhaWxzIHRoZSB0ZXN0LgotICAgIC8vIEluaXRpYWxpemF0aW9uIGlzIGRvbmUgd2l0aCB2aWRl
byB0byBleGVyY2lzZSB0aGUgdmlkZW8gY29udGVudCBpZGVudGlmaWNhdGlvbgotICAgIC8vIGFs
Z29yaXRobS4KLSAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlc1swXSk7
Ci0gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCBnbC5SR0JBLCBn
bC5VTlNJR05FRF9CWVRFLCB2aWRlbzEpOwotCi0gICAgLy8gVHJ5IHRvIGZvb2wgdGhlIHZpZGVv
IGNvbnRlbnQgaWRlbnRpZmljYXRpb24gYWxnb3JpdGhtIGJ5IGZpcnN0IHVwbG9hZGluZwotICAg
IC8vIHRoZSBwYXNzaW5nIGNvbnRlbnQgdG8gc29tZSBvdGhlciwgdW50ZXN0ZWQgdGV4dHVyZS4K
LSAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlc1sxXSk7Ci0gICAgZ2wu
dGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05F
RF9CWVRFLCB2aWRlbzIpOwotCi0gICAgLy8gVXBkYXRlIHRleHR1cmVbMF0gdG8gc29tZSBjb250
ZW50IHRoYXQgcGFzc2VzIHRoZSB0ZXN0LgotICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVf
MkQsIHRleHR1cmVzWzBdKTsKLSAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGds
LlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHZpZGVvMik7Ci0KLSAgICAvLyBWZXJp
ZnkgdGhhdCB0aGUgdGV4dHVyZVswXSByZWNlaXZlZCB0aGUgbmV3IGNvbnRlbnQuCi0gICAgZ2wu
dGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGdsLkxJ
TkVBUik7Ci0gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01J
Tl9GSUxURVIsIGdsLkxJTkVBUik7Ci0gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJE
LCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2wudGV4UGFyYW1l
dGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7
Ci0KLSAgICB3dHUuY2xlYXJBbmREcmF3VW5pdFF1YWQoZ2wsIFsyNTUsIDAsIDAsIDI1NV0pOwot
ICAgIGNoZWNrRnJhbWVidWZmZXJIYXNWaWRlbzIoZ2wpOwotfQotCi1mdW5jdGlvbiBydW5UZXN0
KHZpZGVvMSwgdmlkZW8yKQotewotICAgIHRlc3RUd29UZXh0dXJlc0J1ZzEodmlkZW8xLCB2aWRl
bzIpOwotICAgIHd0dS5nbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAic2hvdWxkIGJl
IG5vIGVycm9ycyIpOwotICAgIGZpbmlzaFRlc3QoKTsKLX0KLTwvc2NyaXB0PgotPC9oZWFkPgot
PGJvZHkgb25sb2FkPSJpbml0KCkiPgotPGNhbnZhcyBpZD0iZXhhbXBsZSIgd2lkdGg9IjY0IiBo
ZWlnaHQ9IjQ4Ij48L2NhbnZhcz4KLTxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KLTxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgotPHZpZGVvIGlkPSJ2aWRlbzEiID4KLSAgPHNvdXJjZSBzcmM9
Ii4uLy4uLy4uLy4uLy4uLy4uL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL3Jlc291cmNlcy9y
ZWQtZ3JlZW4ubXA0IiAgdHlwZT0ndmlkZW8vbXA0OyBjb2RlY3M9ImF2YzEuNDJFMDFFIicgLz4K
LSAgPHNvdXJjZSBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL3Jlc291cmNlcy93ZWJnbF90ZXN0X2Zp
bGVzL3Jlc291cmNlcy9yZWQtZ3JlZW4ud2VibXZwOC53ZWJtIiB0eXBlPSd2aWRlby93ZWJtOyBj
b2RlY3M9InZwOCInIC8+Ci0gIDxzb3VyY2Ugc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9yZXNvdXJj
ZXMvd2ViZ2xfdGVzdF9maWxlcy9yZXNvdXJjZXMvcmVkLWdyZWVuLnRoZW9yYS5vZ3YiICB0eXBl
PSd2aWRlby9vZ2c7IGNvZGVjcz0idGhlb3JhIicgLz4KLTwvdmlkZW8+Ci08dmlkZW8gaWQ9InZp
ZGVvMiIgPgotICAgIDxzb3VyY2Ugc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9yZXNvdXJjZXMvd2Vi
Z2xfdGVzdF9maWxlcy9yZXNvdXJjZXMvdmlkZW8tcm90YXRpb24tMC5tcDQiICB0eXBlPSd2aWRl
by9tcDQ7IGNvZGVjcz0iYXZjMS40MkUwMUUiJyAvPgotICA8L3ZpZGVvPgotPC9ib2R5PgotPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2Vi
Z2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZTIvZ2xzbDMvZW1wdHktc2hhZGVyLXdpdGgtb3V0cHV0
Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2Zp
bGVzL2NvbmZvcm1hbmNlMi9nbHNsMy9lbXB0eS1zaGFkZXItd2l0aC1vdXRwdXQuaHRtbApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ5YjYwY2FkYmExNWIyZTRkNjhkMmUwNTk2ZWMy
NjI5NWQzMWYyOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2Nv
bmZvcm1hbmNlMi9nbHNsMy9lbXB0eS1zaGFkZXItd2l0aC1vdXRwdXQuaHRtbAorKysgL2Rldi9u
dWxsCkBAIC0xLDkzICswLDAgQEAKLTwhLS0KLUNvcHlyaWdodCAoYykgMjAyMSBUaGUgS2hyb25v
cyBHcm91cCBJbmMuCi1Vc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBN
SVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZp
bGUuCi0tLT4KLQotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgY2hhcnNl
dD0idXRmLTgiPgotPHRpdGxlPldlYkdMIEdMU0wgQ29uZm9ybWFuY2UgVGVzdHMgLSBFbXB0eSBT
aGFkZXIgYXMgT3V0cHV0PC90aXRsZT4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Ci08bGluayByZWw9InN0eWxlc2hlZXQi
IGhyZWY9Ii4uLy4uL3Jlc291cmNlcy9nbHNsLWZlYXR1cmUtdGVzdHMuY3NzIi8+Ci08c2NyaXB0
IHNyYz0iLi4vLi4vanMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4u
Ly4uL2pzL3dlYmdsLXRlc3QtdXRpbHMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uLy4u
L2pzL2dsc2wtY29uZm9ybWFuY2UtdGVzdC5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4K
LTxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KLTxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pgot
PCEtLQotVGVzdCB0aGF0IGFuIGVtcHR5IHZlcnRleCBzaGFkZXIgYW5kIGZyYWdtZW50IHNoYWRl
ciBjb21waWxlLgotLS0+Ci08c2NyaXB0IGlkPSJmczAiIHR5cGU9InRleHQvc29tZXRoaW5nLW5v
dC1qYXZhc2NyaXB0Ij4jdmVyc2lvbiAzMDAgZXMKLXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0Owot
b3V0IHZlYzQgb3V0Q29sb3IwOwotdm9pZCBtYWluKCkKLXsKLX0KLTwvc2NyaXB0PgotCi08c2Ny
aXB0IGlkPSJmczEiIHR5cGU9InRleHQvc29tZXRoaW5nLW5vdC1qYXZhc2NyaXB0Ij4jdmVyc2lv
biAzMDAgZXMKLXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0Owotdm9pZCBtYWluKCkKLXsKLX0KLTwv
c2NyaXB0PgotCi08c2NyaXB0IGlkPSJ2czIiIHR5cGU9InRleHQvc29tZXRoaW5nLW5vdC1qYXZh
c2NyaXB0Ij4jdmVyc2lvbiAzMDAgZXMKLXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0Owotdm9pZCBt
YWluKCkKLXsKLX0KLTwvc2NyaXB0PgotPHNjcmlwdCBpZD0iZnMyIiB0eXBlPSJ0ZXh0L3NvbWV0
aGluZy1ub3QtamF2YXNjcmlwdCI+I3ZlcnNpb24gMzAwIGVzCi1wcmVjaXNpb24gbWVkaXVtcCBm
bG9hdDsKLW91dCB2ZWM0IG91dENvbG9yMDsKLXZvaWQgbWFpbigpCi17Ci0gICAgb3V0Q29sb3Iw
ID0gdmVjNCgwLDI1NSwwLDI1NSk7Ci19Ci08L3NjcmlwdD4KLQotPHNjcmlwdD4KLSJ1c2Ugc3Ry
aWN0IjsKLQotZGVzY3JpcHRpb24oKTsKLQotdmFyIHRlc3RzID0gW107Ci12YXIgZnNyYyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJmczAiKS50ZXh0OwotdGVzdHMucHVzaCh7Ci0gICAgZlNo
YWRlclNvdXJjZTogZnNyYywKLSAgICBmU2hhZGVyU3VjY2VzczogdHJ1ZSwKLSAgICBsaW5rU3Vj
Y2VzczogdHJ1ZSwKLSAgICByZW5kZXJDb2xvcjogWzI1NSwgMjU1LCAyNTUsIDI1NV0sCi0gICAg
cGFzc01zZzpgRW1wdHkgZnJhZ21lbnQgc2hhZGVyIHdpdGggY29sb3JPdXQgd29ya3NgCi19KQot
Ci12YXIgZnNyYzEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnMxIikudGV4dDsKLXRlc3Rz
LnB1c2goewotICAgIGZTaGFkZXJTb3VyY2U6IGZzcmMxLAotICAgIGZTaGFkZXJTdWNjZXNzOiB0
cnVlLAotICAgIGxpbmtTdWNjZXNzOiB0cnVlLAotICAgIHJlbmRlckNvbG9yOiBbMjU1LCAyNTUs
IDI1NSwgMjU1XSwKLSAgICBwYXNzTXNnOiBgRW1wdHkgZnJhZ21lbnQgc2hhZGVyIHdpdGggbm8g
b3V0cHV0IHdvcmtzYAotfSkKLQotdmFyIHZzcmMyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InZzMiIpLnRleHQ7Ci12YXIgZnNyYzIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnMyIiku
dGV4dDsKLXRlc3RzLnB1c2goewotICAgIHZTaGFkZXJTb3VyY2U6IHZzcmMyLAotICAgIHZTaGFk
ZXJTdWNjZXNzOiB0cnVlLAotICAgIGZTaGFkZXJTb3VyY2U6IGZzcmMyLAotICAgIGZTaGFkZXJT
dWNjZXNzOiB0cnVlLAotICAgIGxpbmtTdWNjZXNzOiB0cnVlLAotICAgIHJlbmRlckNvbG9yOiBb
MjU1LCAyNTUsIDI1NSwgMjU1XSwKLSAgICBwYXNzTXNnOiBgRW1wdHkgVmVydGV4IHNoYWRlciB3
b3Jrc2AKLX0pCi0KLUdMU0xDb25mb3JtYW5jZVRlc3Rlci5ydW5SZW5kZXJUZXN0cyh0ZXN0cywg
Mik7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UyL2ds
c2wzL2Zsb2F0LWNvbnN0YW50LWV4cHJlc3Npb25zLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJnbC9w
ZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlMi9nbHNsMy9mbG9h
dC1jb25zdGFudC1leHByZXNzaW9ucy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAzODVhOWFlNDk2ZjdjMjk5Yzg5OTQ2NWE0MTQxZTI5M2JlNWQzZGEyLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdsL3BlbmRp
bmcvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UyL2dsc2wzL2Zsb2F0LWNv
bnN0YW50LWV4cHJlc3Npb25zLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAot
PCEtLQotQ29weXJpZ2h0IChjKSAyMDE5IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4KLVVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCi1mb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZS4KLS0tPgotCi08IURPQ1RZUEUg
aHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Ci08dGl0bGU+Rmxv
YXQgY29uc3RhbnQgZXhwcmVzc2lvbiBjb3JuZXIgY2FzZXM8L3RpdGxlPgotPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiBocmVmPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KLTxz
Y3JpcHQgc3JjPSIuLi8uLi9qcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNy
Yz0iLi4vLi4vanMvd2ViZ2wtdGVzdC11dGlscy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0i
Li4vLi4vanMvZ2xzbC1jb25mb3JtYW5jZS10ZXN0LmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxi
b2R5PgotPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgotPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+Ci08c2NyaXB0IGlkPSJmc2hhZGVyUG9zaXRpdmVEaXZpc2lvbkJ5WmVyb0lzSW5maW5pdGUi
IHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQiPiN2ZXJzaW9uIDMwMCBlcwotcHJlY2lzaW9uIGhp
Z2hwIGZsb2F0Owotb3V0IHZlYzQgbXlfRnJhZ0NvbG9yOwotdW5pZm9ybSBmbG9hdCB1OyAvLyBB
c3N1bWVkIHRvIGhhdmUgdGhlIGRlZmF1bHQgdmFsdWUgMC4wCi12b2lkIG1haW4oKQotewotICAg
IC8vIFBvc2l0aXZlIG5vbi16ZXJvIGRpdmlzaW9uIGJ5IHplcm8gc2hvdWxkIHByb2R1Y2UgaW5m
aW5pdHkuCi0gICAgLy8gR0xTTCBFUyAzLjAwLjYgNC41LjEgUmFuZ2UgYW5kIFByZWNpc2lvbgot
ICAgIC8vICJIb3dldmVyLCBkaXZpZGluZyBhIG5vbi16ZXJvIGJ5IDAgcmVzdWx0cyBpbiB0aGUg
YXBwcm9wcmlhdGVseSBzaWduZWQgSUVFRSBJbmY6Ci0gICAgLy8gSWYgYm90aCBwb3NpdGl2ZSBh
bmQgbmVnYXRpdmUgemVyb3MgYXJlIGltcGxlbWVudGVkLCB0aGUgY29ycmVjdGx5IHNpZ25lZCBJ
bmYgd2lsbCBiZQotICAgIC8vIGdlbmVyYXRlZCwgb3RoZXJ3aXNlIHBvc2l0aXZlIEluZiBpcyBn
ZW5lcmF0ZWQuIgotICAgIGZsb2F0IGYgPSAxLiAvIDAuOwotICAgIGYgPSB1ID09IDAuID8gZiA6
IDEuOwotICAgIGJvb2wgY29ycmVjdCA9IGlzaW5mKGYpICYmIHNpZ24oZikgPiAwLjsKLSAgICBt
eV9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgY29ycmVjdCA/IDEuIDogMC4sIDAuMCwgMS4wKTsKLX0K
LTwvc2NyaXB0PgotPHNjcmlwdCBpZD0iZnNoYWRlck5lZ2F0aXZlRGl2aXNpb25CeVplcm9Jc0lu
ZmluaXRlIiB0eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4jdmVyc2lvbiAzMDAgZXMKLXByZWNp
c2lvbiBoaWdocCBmbG9hdDsKLW91dCB2ZWM0IG15X0ZyYWdDb2xvcjsKLXVuaWZvcm0gZmxvYXQg
dTsgLy8gQXNzdW1lZCB0byBoYXZlIHRoZSBkZWZhdWx0IHZhbHVlIDAuMAotdm9pZCBtYWluKCkK
LXsKLSAgICAvLyBOZWdhdGl2ZSBub24temVybyBkaXZpc2lvbiBieSB6ZXJvIHNob3VsZCBwcm9k
dWNlIG5lZ2F0aXZlIGluZmluaXR5IGlmIHN1cHBvcnRlZCwKLSAgICAvLyBvdGhlcnZpZXMgaW5m
aW5pdHkuCi0gICAgLy8gR0xTTCBFUyAzLjAwLjYgNC41LjEgUmFuZ2UgYW5kIFByZWNpc2lvbgot
ICAgIC8vICJIb3dldmVyLCBkaXZpZGluZyBhIG5vbi16ZXJvIGJ5IDAgcmVzdWx0cyBpbiB0aGUg
YXBwcm9wcmlhdGVseSBzaWduZWQgSUVFRSBJbmY6Ci0gICAgLy8gSWYgYm90aCBwb3NpdGl2ZSBh
bmQgbmVnYXRpdmUgemVyb3MgYXJlIGltcGxlbWVudGVkLCB0aGUgY29ycmVjdGx5IHNpZ25lZCBJ
bmYgd2lsbCBiZQotICAgIC8vIGdlbmVyYXRlZCwgb3RoZXJ3aXNlIHBvc2l0aXZlIEluZiBpcyBn
ZW5lcmF0ZWQuIgotICAgIGZsb2F0IGYgPSAtMS4gLyAwLjsKLSAgICBmID0gdSA9PSAwLiA/IGYg
OiAxLjsKLSAgICBib29sIHN1cHBvcnRzTmVnYXRpdmVaZXJvcyA9IHNpZ24oLTAuKSA8IDAuOwot
ICAgIGJvb2wgY29ycmVjdCA9IGlzaW5mKGYpICYmIChzaWduKGYpIDwgMC4gfHwgIXN1cHBvcnRz
TmVnYXRpdmVaZXJvcyk7Ci0gICAgbXlfRnJhZ0NvbG9yID0gdmVjNCgwLiwgY29ycmVjdCA/IDEu
IDogMC4sIDAuLCAxLik7Ci19Ci08L3NjcmlwdD4KLQotPHNjcmlwdCBpZD0iZnNoYWRlclplcm9E
aXZpc2lvbkJ5WmVyb0lzTmFuIiB0eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4jdmVyc2lvbiAz
MDAgZXMKLXByZWNpc2lvbiBoaWdocCBmbG9hdDsKLW91dCB2ZWM0IG15X0ZyYWdDb2xvcjsKLXVu
aWZvcm0gZmxvYXQgdTsgLy8gQXNzdW1lZCB0byBoYXZlIHRoZSBkZWZhdWx0IHZhbHVlIDAuMAot
dm9pZCBtYWluKCkKLXsKLSAgICAvLyBOb24temVybyBkaXZpc2lvbiBieSB6ZXJvIHNob3VsZCBw
cm9kdWNlIGluZmluaXR5LgotICAgIC8vIEdMU0wgRVMgMy4wMC42IDQuNS4xIFJhbmdlIGFuZCBQ
cmVjaXNpb24KLSAgICAvLyAiTmFOcyBhcmUgbm90IHJlcXVpcmVkIHRvIGJlIGdlbmVyYXRlZC4g
U3VwcG9ydCBmb3Igc2lnbmFsaW5nIE5hTnMgaXMgbm90IHJlcXVpcmVkIGFuZAotICAgIC8vIGV4
Y2VwdGlvbnMgYXJlIG5ldmVyIHJhaXNlZC4gT3BlcmF0aW9ucyBhbmQgYnVpbHQtaW4gZnVuY3Rp
b25zIHRoYXQgb3BlcmF0ZSBvbiBhIE5hTiBhcmUgbm90Ci0gICAgLy8gcmVxdWlyZWQgdG8gcmV0
dXJuIGEgTmFOIGFzIHRoZSByZXN1bHQuIEhvd2V2ZXIgaWYgTmFOcyBhcmUgZ2VuZXJhdGVkLCBp
c25hbigpIHNob3VsZCByZXR1cm4KLSAgICAvLyB0aGUgY29ycmVjdCB2YWx1ZS4iCi0gICAgZmxv
YXQgZiA9IDAuIC8gMC47Ci0gICAgZiA9IHUgPT0gMC4gPyBmIDogMS47Ci0gICAgYm9vbCBuYW5X
YXNHZW5lcmF0ZWQgPSAhKGYgPD0gMC4gfHwgMC4gPD0gZik7Ci0gICAgYm9vbCBjb3JyZWN0ID0g
aXNuYW4oZikgfHwgIW5hbldhc0dlbmVyYXRlZDsKLSAgICBteV9GcmFnQ29sb3IgPSB2ZWM0KDAu
LCBjb3JyZWN0ID8gMS4gOiAwLiwgMC4sIDEuKTsKLX0KLTwvc2NyaXB0PgotCi08c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCI+Ci0idXNlIHN0cmljdCI7Ci1kZXNjcmlwdGlvbigpOwotCi1H
TFNMQ29uZm9ybWFuY2VUZXN0ZXIucnVuUmVuZGVyVGVzdHMoWwotewotICBmU2hhZGVySWQ6ICdm
c2hhZGVyUG9zaXRpdmVEaXZpc2lvbkJ5WmVyb0lzSW5maW5pdGUnLAotICBmU2hhZGVyU3VjY2Vz
czogdHJ1ZSwKLSAgbGlua1N1Y2Nlc3M6IHRydWUsCi0gIHBhc3NNc2c6ICJQb3NpdGl2ZSBmbG9h
dHMgZGl2aWRlZCBieSB6ZXJvIHNob3VsZCBwcm9kdWNlIGluZmluaXR5LiIKLX0sCi17Ci0gIGZT
aGFkZXJJZDogJ2ZzaGFkZXJOZWdhdGl2ZURpdmlzaW9uQnlaZXJvSXNJbmZpbml0ZScsCi0gIGZT
aGFkZXJTdWNjZXNzOiB0cnVlLAotICBsaW5rU3VjY2VzczogdHJ1ZSwKLSAgcGFzc01zZzogIk5l
Z2F0aXZlIGZsb2F0cyBkaXZpZGVkIGJ5IHplcm8gc2hvdWxkIHByb2R1Y2UgaW5maW5pdHkgb2Yg
Y29ycmVjdCBzaWduLiIKLX0sCi17Ci0gIGZTaGFkZXJJZDogJ2ZzaGFkZXJaZXJvRGl2aXNpb25C
eVplcm9Jc05hbicsCi0gIGZTaGFkZXJTdWNjZXNzOiB0cnVlLAotICBsaW5rU3VjY2VzczogdHJ1
ZSwKLSAgcGFzc01zZzogIkZsb2F0IHplcm8gZGl2aWRlZCBieSB6ZXJvIHNob3VsZCBtYXliZSBw
cm9kdWNlIE5hTi4iCi19Ci1dLCAyKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9m
aWxlcy9qcy9nbHNsLWNvbmZvcm1hbmNlLXRlc3QuanMgYi9MYXlvdXRUZXN0cy93ZWJnbC9wZW5k
aW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2pzL2dsc2wtY29uZm9ybWFuY2UtdGVzdC5q
cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ2ZWFhZDUwZjRiMWNhNzg3Y2Q1Y2Jh
YmY1MGYwOGM3YmI4ZmNlNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2Zp
bGVzL2pzL2dsc2wtY29uZm9ybWFuY2UtdGVzdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDQxOSAr
MCwwIEBACi0vKgotQ29weXJpZ2h0IChjKSAyMDE5IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4KLVVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi1mb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZS4KLSovCi1HTFNMQ29u
Zm9ybWFuY2VUZXN0ZXIgPSAoZnVuY3Rpb24oKXsKLQotdmFyIHd0dSA9IFdlYkdMVGVzdFV0aWxz
OwotdmFyIGRlZmF1bHRWZXJ0ZXhTaGFkZXIgPSBbCi0gICJhdHRyaWJ1dGUgdmVjNCB2UG9zaXRp
b247IiwKLSAgInZvaWQgbWFpbigpIiwKLSAgInsiLAotICAiICAgIGdsX1Bvc2l0aW9uID0gdlBv
c2l0aW9uOyIsCi0gICJ9IgotXS5qb2luKCdcbicpOwotCi12YXIgZGVmYXVsdEZyYWdtZW50U2hh
ZGVyID0gWwotICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IiwKLSAgInZvaWQgbWFpbigpIiwK
LSAgInsiLAotICAiICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wLDAuMCwwLjAsMS4wKTsiLAot
ICAifSIKLV0uam9pbignXG4nKTsKLQotdmFyIGRlZmF1bHRFU1NMM1ZlcnRleFNoYWRlciA9IFsK
LSAgIiN2ZXJzaW9uIDMwMCBlcyIsCi0gICJpbiB2ZWM0IHZQb3NpdGlvbjsiLAotICAidm9pZCBt
YWluKCkiLAotICAieyIsCi0gICIgICAgZ2xfUG9zaXRpb24gPSB2UG9zaXRpb247IiwKLSAgIn0i
Ci1dLmpvaW4oJ1xuJyk7Ci0KLXZhciBkZWZhdWx0RVNTTDNGcmFnbWVudFNoYWRlciA9IFsKLSAg
IiN2ZXJzaW9uIDMwMCBlcyIsCi0gICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsiLAotICAib3V0
IHZlYzQgbXlfRnJhZ0NvbG9yOyIsCi0gICJ2b2lkIG1haW4oKSIsCi0gICJ7IiwKLSAgIiAgICBt
eV9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwwLjAsMC4wLDEuMCk7IiwKLSAgIn0iCi1dLmpvaW4oJ1xu
Jyk7Ci0KLWZ1bmN0aW9uIGxvZyhtc2cpIHsKLSAgYnVmZmVyZWRMb2dUb0NvbnNvbGUobXNnKTsK
LX0KLQotdmFyIHZTaGFkZXJEQiA9IHt9OwotdmFyIGZTaGFkZXJEQiA9IHt9OwotCi0vKioKLSAq
IFRoZSBpbmZvIHBhcmFtZXRlciBzaG91bGQgY29udGFpbiB0aGUgZm9sbG93aW5nIGtleXMuIE5v
dGUgdGhhdCB5b3UgbWF5IGxlYXZlCi0gKiB0aGUgcGFyYW1ldGVycyBmb3Igb25lIHNoYWRlciBv
dXQsIGluIHdoaWNoIGNhc2UgdGhlIGRlZmF1bHQgc2hhZGVyIHdpbGwgYmUKLSAqIHVzZWQuCi0g
KiB2U2hhZGVyU291cmNlOiB0aGUgc291cmNlIGNvZGUgZm9yIHZlcnRleCBzaGFkZXIKLSAqIHZT
aGFkZXJJZDogaWQgb2YgYW4gZWxlbWVudCBjb250YWluaW5nIHZlcnRleCBzaGFkZXIgc291cmNl
IGNvZGUuIFVzZWQgaWYKLSAqICAgdlNoYWRlclNvdXJjZSBpcyBub3Qgc3BlY2lmaWVkLgotICog
dlNoYWRlclN1Y2Nlc3M6IHRydWUgaWYgdmVydGV4IHNoYWRlciBjb21waWxhdGlvbiBzaG91bGQK
LSAqICAgc3VjY2VlZC4KLSAqIGZTaGFkZXJTb3VyY2U6IHRoZSBzb3VyY2UgY29kZSBmb3IgZnJh
Z21lbnQgc2hhZGVyCi0gKiBmU2hhZGVySWQ6IGlkIG9mIGFuIGVsZW1lbnQgY29udGFpbmluZyBm
cmFnbWVudCBzaGFkZXIgc291cmNlIGNvZGUuIFVzZWQgaWYKLSAqICAgZlNoYWRlclNvdXJjZSBp
cyBub3Qgc3BlY2lmaWVkLgotICogZlNoYWRlclN1Y2Nlc3M6IHRydWUgaWYgZnJhZ21lbnQgc2hh
ZGVyIGNvbXBpbGF0aW9uIHNob3VsZAotICogICBzdWNjZWVkLgotICogbGlua1N1Y2Nlc3M6IHRy
dWUgaWYgbGluayBzaG91bGQgc3VjY2VlZAotICogcGFzc01zZzogbXNnIHRvIGRlc2NyaWJlIHN1
Y2Nlc3MgY29uZGl0aW9uLgotICogcmVuZGVyOiBpZiB0cnVlIHJlbmRlciB0byB1bml0IHF1YWQu
IEdyZWVuID0gc3VjY2VzcwotICogdW5pZm9ybXM6IGFuIGFycmF5IG9mIG9iamVjdHMgc3BlY2lm
eWluZyB1bmlmb3JtcyB0byBzZXQgcHJpb3IgdG8gcmVuZGVyaW5nLgotICogICBFYWNoIG9iamVj
dCBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIGtleXM6Ci0gKiAgICAgbmFtZTogdW5pZm9ybSB2
YXJpYWJsZSBuYW1lIGluIHRoZSBzaGFkZXIgc291cmNlLiBVbmlmb3JtIGxvY2F0aW9uIHdpbGwK
LSAqICAgICAgIGJlIHF1ZXJpZWQgYmFzZWQgb24gaXRzIG5hbWUuCi0gKiAgICAgZnVuY3Rpb25O
YW1lOiBuYW1lIG9mIHRoZSBmdW5jdGlvbiB1c2VkIHRvIHNldCB0aGUgdW5pZm9ybS4gRm9yIGV4
YW1wbGU6Ci0gKiAgICAgICAndW5pZm9ybTFpJwotICogICAgIHZhbHVlOiB2YWx1ZSBvZiB0aGUg
dW5pZm9ybSB0byBzZXQuCi0gKi8KLWZ1bmN0aW9uIHJ1bk9uZVRlc3QoZ2wsIGluZm8pIHsKLSAg
dmFyIHBhc3NNc2cgPSBpbmZvLnBhc3NNc2cKLSAgZGVidWcoIiIpOwotICBkZWJ1ZygidGVzdDog
IiArIHBhc3NNc2cpOwotCi0gIHZhciBjb25zb2xlRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNvbnNvbGUiKTsKLQotICB2YXIgdklzRGVmYXVsdCA9IGZhbHNlOwotICB2YXIgZklzRGVm
YXVsdCA9IGZhbHNlOwotCi0gIGlmIChpbmZvLnZTaGFkZXJTb3VyY2UgPT09IHVuZGVmaW5lZCkg
ewotICAgIGlmIChpbmZvLnZTaGFkZXJJZCkgewotICAgICAgaW5mby52U2hhZGVyU291cmNlID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5mby52U2hhZGVySWQpLnRleHQ7Ci0gICAgfSBlbHNl
IHsKLSAgICAgIHZJc0RlZmF1bHQgPSB0cnVlOwotICAgIH0KLSAgfQotICBpZiAoaW5mby5mU2hh
ZGVyU291cmNlID09PSB1bmRlZmluZWQpIHsKLSAgICBpZiAoaW5mby5mU2hhZGVySWQpIHsKLSAg
ICAgIGluZm8uZlNoYWRlclNvdXJjZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGluZm8uZlNo
YWRlcklkKS50ZXh0OwotICAgIH0gZWxzZSB7Ci0gICAgICBmSXNEZWZhdWx0ID0gdHJ1ZTsKLSAg
ICB9Ci0gIH0KLQotICB2YXIgdkxhYmVsID0gKHZJc0RlZmF1bHQgPyAiZGVmYXVsdCIgOiAidGVz
dCIpICsgIiB2ZXJ0ZXggc2hhZGVyIjsKLSAgdmFyIGZMYWJlbCA9IChmSXNEZWZhdWx0ID8gImRl
ZmF1bHQiIDogInRlc3QiKSArICIgZnJhZ21lbnQgc2hhZGVyIjsKLSAgaWYgKHZJc0RlZmF1bHQp
IHsKLSAgICBpbmZvLnZTaGFkZXJTb3VyY2UgPSBkZWZhdWx0VmVydGV4U2hhZGVyOwotICAgIGlu
Zm8udlNoYWRlclN1Y2Nlc3MgPSB0cnVlOwotICB9Ci0gIGlmIChmSXNEZWZhdWx0KSB7Ci0gICAg
aW5mby5mU2hhZGVyU291cmNlID0gZGVmYXVsdEZyYWdtZW50U2hhZGVyOwotICAgIGluZm8uZlNo
YWRlclN1Y2Nlc3MgPSB0cnVlOwotICB9Ci0KLSAgaWYgKHZJc0RlZmF1bHQgIT0gZklzRGVmYXVs
dCkgewotICAgIC8vIFRoZSBsYW5ndWFnZSB2ZXJzaW9uIG9mIHRoZSBkZWZhdWx0IHNoYWRlciBp
cyBjaG9zZW4KLSAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIGxhbmd1YWdlIHZlcnNpb24gb2YgdGhl
IG90aGVyIHNoYWRlci4KLSAgICAvLyBXZSByZWx5IG9uICIjdmVyc2lvbiAzMDAgZXMiIGJlaW5n
IGluIHRoaXMgdXN1YWwgZm9ybWF0LgotICAgIC8vIEl0IG11c3QgYmUgb24gdGhlIGZpcnN0IGxp
bmUgb2YgdGhlIHNoYWRlciBhY2NvcmRpbmcgdG8gdGhlIHNwZWMuCi0gICAgaWYgKGZJc0RlZmF1
bHQpIHsKLSAgICAgIC8vIElmIHdlJ3JlIHVzaW5nIHRoZSBkZWZhdWx0IGZyYWdtZW50IHNoYWRl
ciwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdAotICAgICAgLy8gaXQncyBsYW5ndWFnZSB2ZXJz
aW9uIG1hdGNoZXMgd2l0aCB0aGUgdmVydGV4IHNoYWRlci4KLSAgICAgIGlmIChpbmZvLnZTaGFk
ZXJTb3VyY2Uuc3BsaXQoJ1xuJylbMF0gPT0gJyN2ZXJzaW9uIDMwMCBlcycpIHsKLSAgICAgICAg
aW5mby5mU2hhZGVyU291cmNlID0gZGVmYXVsdEVTU0wzRnJhZ21lbnRTaGFkZXI7Ci0gICAgICB9
Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIElmIHdlJ3JlIHVzaW5nIHRoZSBkZWZhdWx0IHZlcnRl
eCBzaGFkZXIsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQKLSAgICAgIC8vIGl0J3MgbGFuZ3Vh
Z2UgdmVyc2lvbiBtYXRjaGVzIHdpdGggdGhlIGZyYWdtZW50IHNoYWRlci4KLSAgICAgIGlmIChp
bmZvLmZTaGFkZXJTb3VyY2Uuc3BsaXQoJ1xuJylbMF0gPT0gJyN2ZXJzaW9uIDMwMCBlcycpIHsK
LSAgICAgICAgaW5mby52U2hhZGVyU291cmNlID0gZGVmYXVsdEVTU0wzVmVydGV4U2hhZGVyOwot
ICAgICAgfQotICAgIH0KLSAgfQotCi0gIHZhciB2U291cmNlID0gaW5mby52U2hhZGVyUHJlcCA/
IGluZm8udlNoYWRlclByZXAoaW5mby52U2hhZGVyU291cmNlKSA6Ci0gICAgaW5mby52U2hhZGVy
U291cmNlOwotCi0gIGlmICghcXVpZXRNb2RlKCkpIHsKLSAgICB3dHUuYWRkU2hhZGVyU291cmNl
KGNvbnNvbGVEaXYsIHZMYWJlbCwgdlNvdXJjZSk7Ci0gIH0KLQotICAvLyBSZXVzZSBpZGVudGlj
YWwgc2hhZGVycyBzbyB3ZSB0ZXN0IHNoYXJlZCBzaGFkZXIuCi0gIHZhciB2U2hhZGVyID0gdlNo
YWRlckRCW3ZTb3VyY2VdOwotICBpZiAoIXZTaGFkZXIpIHsKLSAgICAvLyBsb2FkU2hhZGVyLCB3
aXRoIG9wdF9za2lwQ29tcGlsZVN0YXR1czogdHJ1ZS4KLSAgICB2U2hhZGVyID0gd3R1LmxvYWRT
aGFkZXIoZ2wsIHZTb3VyY2UsIGdsLlZFUlRFWF9TSEFERVIsIG51bGwsIG51bGwsIG51bGwsIG51
bGwsIHRydWUpOwotICAgIGxldCBjb21waWxlZFZTaGFkZXIgPSB2U2hhZGVyOwotICAgIGlmICh2
U2hhZGVyICYmICFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIodlNoYWRlciwgZ2wuQ09NUElMRV9TVEFU
VVMpKSB7Ci0gICAgICBjb21waWxlZFZTaGFkZXIgPSBudWxsOwotICAgIH0KLSAgICBpZiAoaW5m
by52U2hhZGVyVGVzdCkgewotICAgICAgaWYgKCFpbmZvLnZTaGFkZXJUZXN0KGNvbXBpbGVkVlNo
YWRlcikpIHsKLSAgICAgICAgdGVzdEZhaWxlZCgiW3ZlcnRleCBzaGFkZXIgdGVzdF0gIiArIHBh
c3NNc2cpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIEFzIHBlciBH
TFNMIDEuMC4xNyAxMC4yNyB3ZSBjYW4gb25seSBjaGVjayBmb3Igc3VjY2VzcyBvbgotICAgIC8v
IGNvbXBpbGVTaGFkZXIsIG5vdCBmYWlsdXJlLgotICAgIGlmICghaW5mby5pZ25vcmVSZXN1bHRz
ICYmIGluZm8udlNoYWRlclN1Y2Nlc3MgJiYgIWNvbXBpbGVkVlNoYWRlcikgewotICAgICAgdGVz
dEZhaWxlZCgiW3VuZXhwZWN0ZWQgdmVydGV4IHNoYWRlciBjb21waWxlIHN0YXR1c10gKGV4cGVj
dGVkOiAiICsKLSAgICAgICAgICAgICAgICAgaW5mby52U2hhZGVyU3VjY2VzcyArICIpICIgKyBw
YXNzTXNnKTsKLSAgICAgIGlmICghcXVpZXRNb2RlKCkgJiYgdlNoYWRlcikgewotICAgICAgICBj
b25zdCBpbmZvID0gZ2wuZ2V0U2hhZGVySW5mb0xvZyh2U2hhZGVyKTsKLSAgICAgICAgd3R1LmFk
ZFNoYWRlclNvdXJjZShjb25zb2xlRGl2LCB2TGFiZWwgKyAiIGluZm8gbG9nIiwgaW5mbyk7Ci0g
ICAgICB9Ci0gICAgfQotICAgIC8vIFNhdmUgdGhlIHNoYWRlcnMgc28gd2UgdGVzdCBzaGFyZWQg
c2hhZGVyLgotICAgIGlmIChjb21waWxlZFZTaGFkZXIpIHsKLSAgICAgIHZTaGFkZXJEQlt2U291
cmNlXSA9IGNvbXBpbGVkVlNoYWRlcjsKLSAgICB9IGVsc2UgewotICAgICAgdlNoYWRlciA9IG51
bGw7Ci0gICAgfQotICB9Ci0KLSAgdmFyIGRlYnVnU2hhZGVycyA9IGdsLmdldEV4dGVuc2lvbign
V0VCR0xfZGVidWdfc2hhZGVycycpOwotICBpZiAoZGVidWdTaGFkZXJzICYmIHZTaGFkZXIgJiYg
IXF1aWV0TW9kZSgpKSB7Ci0gICAgd3R1LmFkZFNoYWRlclNvdXJjZShjb25zb2xlRGl2LCB2TGFi
ZWwgKyAiIHRyYW5zbGF0ZWQgZm9yIGRyaXZlciIsCi0gICAgICAgICAgICAgICAgICAgICAgICBk
ZWJ1Z1NoYWRlcnMuZ2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZSh2U2hhZGVyKSk7Ci0gIH0KLQot
ICB2YXIgZlNvdXJjZSA9IGluZm8uZlNoYWRlclByZXAgPyBpbmZvLmZTaGFkZXJQcmVwKGluZm8u
ZlNoYWRlclNvdXJjZSkgOgotICAgIGluZm8uZlNoYWRlclNvdXJjZTsKLQotICBpZiAoIXF1aWV0
TW9kZSgpKSB7Ci0gICAgd3R1LmFkZFNoYWRlclNvdXJjZShjb25zb2xlRGl2LCBmTGFiZWwsIGZT
b3VyY2UpOwotICB9Ci0KLSAgLy8gUmV1c2UgaWRlbnRpY2FsIHNoYWRlcnMgc28gd2UgdGVzdCBz
aGFyZWQgc2hhZGVyLgotICB2YXIgZlNoYWRlciA9IGZTaGFkZXJEQltmU291cmNlXTsKLSAgaWYg
KCFmU2hhZGVyKSB7Ci0gICAgLy8gbG9hZFNoYWRlciwgd2l0aCBvcHRfc2tpcENvbXBpbGVTdGF0
dXM6IHRydWUuCi0gICAgZlNoYWRlciA9IHd0dS5sb2FkU2hhZGVyKGdsLCBmU291cmNlLCBnbC5G
UkFHTUVOVF9TSEFERVIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIHRydWUpOwotICAgIGxldCBj
b21waWxlZEZTaGFkZXIgPSBmU2hhZGVyOwotICAgIGlmIChmU2hhZGVyICYmICFnbC5nZXRTaGFk
ZXJQYXJhbWV0ZXIoZlNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKSB7Ci0gICAgICBjb21waWxl
ZEZTaGFkZXIgPSBudWxsOwotICAgIH0KLSAgICBpZiAoaW5mby5mU2hhZGVyVGVzdCkgewotICAg
ICAgaWYgKCFpbmZvLmZTaGFkZXJUZXN0KGNvbXBpbGVkRlNoYWRlcikpIHsKLSAgICAgICAgdGVz
dEZhaWxlZCgiW2ZyYWdtZW50IHNoYWRlciB0ZXN0XSAiICsgcGFzc01zZyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy9kZWJ1ZyhmU2hhZGVyID09IG51bGwgPyAiZmFp
bCIgOiAic3VjY2VlZCIpOwotICAgIC8vIEFzIHBlciBHTFNMIDEuMC4xNyAxMC4yNyB3ZSBjYW4g
b25seSBjaGVjayBmb3Igc3VjY2VzcyBvbgotICAgIC8vIGNvbXBpbGVTaGFkZXIsIG5vdCBmYWls
dXJlLgotICAgIGlmICghaW5mby5pZ25vcmVSZXN1bHRzICYmIGluZm8uZlNoYWRlclN1Y2Nlc3Mg
JiYgIWNvbXBpbGVkRlNoYWRlcikgewotICAgICAgdGVzdEZhaWxlZCgiW3VuZXhwZWN0ZWQgZnJh
Z21lbnQgc2hhZGVyIGNvbXBpbGUgc3RhdHVzXSAoZXhwZWN0ZWQ6ICIgKwotICAgICAgICAgICAg
ICAgIGluZm8uZlNoYWRlclN1Y2Nlc3MgKyAiKSAiICsgcGFzc01zZyk7Ci0gICAgICBpZiAoIXF1
aWV0TW9kZSgpICYmIGZTaGFkZXIpIHsKLSAgICAgICAgY29uc3QgaW5mbyA9IGdsLmdldFNoYWRl
ckluZm9Mb2coZlNoYWRlcik7Ci0gICAgICAgIHd0dS5hZGRTaGFkZXJTb3VyY2UoY29uc29sZURp
diwgZkxhYmVsICsgIiBpbmZvIGxvZyIsIGluZm8pOwotICAgICAgfQotICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIFNhZmUgdGhlIHNoYWRlcnMgc28gd2UgdGVzdCBzaGFyZWQgc2hhZGVy
LgotICAgIGlmIChjb21waWxlZEZTaGFkZXIpIHsKLSAgICAgIGZTaGFkZXJEQltmU291cmNlXSA9
IGNvbXBpbGVkRlNoYWRlcjsKLSAgICB9IGVsc2UgewotICAgICAgZlNoYWRlciA9IG51bGw7Ci0g
ICAgfQotICB9Ci0KLSAgaWYgKGRlYnVnU2hhZGVycyAmJiBmU2hhZGVyICYmICFxdWlldE1vZGUo
KSkgewotICAgIHd0dS5hZGRTaGFkZXJTb3VyY2UoY29uc29sZURpdiwgZkxhYmVsICsgIiB0cmFu
c2xhdGVkIGZvciBkcml2ZXIiLAotICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdTaGFkZXJz
LmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UoZlNoYWRlcikpOwotICB9Ci0KLSAgaWYgKHZTaGFk
ZXIgJiYgZlNoYWRlcikgewotICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOwot
ICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCB2U2hhZGVyKTsKLSAgICBnbC5hdHRhY2hTaGFk
ZXIocHJvZ3JhbSwgZlNoYWRlcik7Ci0KLSAgICBpZiAodlNvdXJjZS5pbmRleE9mKCJ2UG9zaXRp
b24iKSA+PSAwKSB7Ci0gICAgICBnbC5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgMCwgInZQ
b3NpdGlvbiIpOwotICAgIH0KLSAgICBpZiAodlNvdXJjZS5pbmRleE9mKCJ0ZXhDb29yZDAiKSA+
PSAwKSB7Ci0gICAgICBnbC5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgMSwgInRleENvb3Jk
MCIpOwotICAgIH0KLSAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTsKLSAgICB2YXIgbGlua2Vk
ID0gKGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpICE9IDAp
OwotICAgIGlmICghbGlua2VkKSB7Ci0gICAgICB2YXIgZXJyb3IgPSBnbC5nZXRQcm9ncmFtSW5m
b0xvZyhwcm9ncmFtKTsKLSAgICAgIGxvZygiKioqIEVycm9yIGxpbmtpbmcgcHJvZ3JhbSAnIitw
cm9ncmFtKyInOiIrZXJyb3IpOwotICAgIH0KLSAgICBpZiAoIWluZm8uaWdub3JlUmVzdWx0cyAm
JiBsaW5rZWQgIT0gaW5mby5saW5rU3VjY2VzcykgewotICAgICAgdGVzdEZhaWxlZCgiW3VuZXhw
ZWN0ZWQgbGluayBzdGF0dXNdIChleHBlY3RlZDogIiArCi0gICAgICAgICAgICAgICAgaW5mby5s
aW5rU3VjY2VzcyArICIpICIgKyBwYXNzTXNnKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gIH0g
ZWxzZSB7Ci0gICAgaWYgKCFpbmZvLmlnbm9yZVJlc3VsdHMgJiYgaW5mby5saW5rU3VjY2Vzcykg
ewotICAgICAgdGVzdEZhaWxlZCgiW2xpbmsgZmFpbGVkXSAiICsgcGFzc01zZyk7Ci0gICAgICBy
ZXR1cm47Ci0gICAgfQotICB9Ci0KLSAgaWYgKHBhcnNlSW50KHd0dS5nZXRVcmxPcHRpb25zKCku
ZHVtcFNoYWRlcnMpKSB7Ci0gICAgdmFyIHZJbmZvID0gewotICAgICAgc2hhZGVyOiB2U2hhZGVy
LAotICAgICAgc2hhZGVyU3VjY2VzczogaW5mby52U2hhZGVyU3VjY2VzcywKLSAgICAgIGxhYmVs
OiB2TGFiZWwsCi0gICAgICBzb3VyY2U6IHZTb3VyY2UKLSAgICB9OwotICAgIHZhciBmSW5mbyA9
IHsKLSAgICAgIHNoYWRlcjogZlNoYWRlciwKLSAgICAgIHNoYWRlclN1Y2Nlc3M6IGluZm8uZlNo
YWRlclN1Y2Nlc3MsCi0gICAgICBsYWJlbDogZkxhYmVsLAotICAgICAgc291cmNlOiBmU291cmNl
Ci0gICAgfTsKLSAgICB3dHUuZHVtcFNoYWRlcnNJbmZvKGdsLCB3aW5kb3cubG9jYXRpb24ucGF0
aG5hbWUsIHBhc3NNc2csIHZJbmZvLCBmSW5mbyk7Ci0gIH0KLQotICBpZiAoIWluZm8ucmVuZGVy
KSB7Ci0gICAgdGVzdFBhc3NlZChwYXNzTXNnKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBnbC51
c2VQcm9ncmFtKHByb2dyYW0pOwotCi0gIGlmIChpbmZvLnVuaWZvcm1zICE9PSB1bmRlZmluZWQp
IHsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluZm8udW5pZm9ybXMubGVuZ3RoOyArK2kpIHsK
LSAgICAgIHZhciB1bmlmb3JtTG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3Jh
bSwgaW5mby51bmlmb3Jtc1tpXS5uYW1lKTsKLSAgICAgIGlmICh1bmlmb3JtTG9jYXRpb24gIT09
IG51bGwpIHsKLSAgICAgICAgZ2xbaW5mby51bmlmb3Jtc1tpXS5mdW5jdGlvbk5hbWVdKHVuaWZv
cm1Mb2NhdGlvbiwgaW5mby51bmlmb3Jtc1tpXS52YWx1ZSk7Ci0gICAgICAgIGRlYnVnKGluZm8u
dW5pZm9ybXNbaV0ubmFtZSArICcgc2V0IHRvICcgKyBpbmZvLnVuaWZvcm1zW2ldLnZhbHVlKTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlYnVnKCd1bmlmb3JtICcgKyBpbmZvLnVuaWZvcm1z
W2ldLm5hbWUgKyAnIGhhZCBudWxsIGxvY2F0aW9uIGFuZCB3YXMgbm90IHNldCcpOwotICAgICAg
fQotICAgIH0KLSAgfQotCi0gIGlmIChpbmZvLnVuaWZvcm1CbG9ja3MgIT09IHVuZGVmaW5lZCkg
ewotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5mby51bmlmb3JtQmxvY2tzLmxlbmd0aDsgKytp
KSB7Ci0gICAgICB2YXIgdW5pZm9ybUJsb2NrSW5kZXggPSBnbC5nZXRVbmlmb3JtQmxvY2tJbmRl
eChwcm9ncmFtLCBpbmZvLnVuaWZvcm1CbG9ja3NbaV0ubmFtZSk7Ci0gICAgICBpZiAodW5pZm9y
bUJsb2NrSW5kZXggIT09IG51bGwpIHsKLSAgICAgICAgZ2wudW5pZm9ybUJsb2NrQmluZGluZyhw
cm9ncmFtLCB1bmlmb3JtQmxvY2tJbmRleCwgaSk7Ci0gICAgICAgIGRlYnVnKGluZm8udW5pZm9y
bUJsb2Nrc1tpXS5uYW1lICsgJyAoaW5kZXggJyArIHVuaWZvcm1CbG9ja0luZGV4ICsgJykgYm91
bmQgdG8gc2xvdCAnICsgaSk7Ci0KLSAgICAgICAgdmFyIHVib1ZhbHVlQnVmZmVyID0gZ2wuY3Jl
YXRlQnVmZmVyKCk7Ci0gICAgICAgIGdsLmJpbmRCdWZmZXJCYXNlKGdsLlVOSUZPUk1fQlVGRkVS
LCBpLCB1Ym9WYWx1ZUJ1ZmZlcik7Ci0gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuVU5JRk9STV9C
VUZGRVIsIGluZm8udW5pZm9ybUJsb2Nrc1tpXS52YWx1ZSwgaW5mby51bmlmb3JtQmxvY2tzW2ld
LnVzYWdlIHx8IGdsLlNUQVRJQ19EUkFXKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlYnVn
KCd1bmlmb3JtIGJsb2NrJyArIGluZm8udW5pZm9ybUJsb2Nrc1tpXS5uYW1lICsgJyBoYWQgbnVs
bCBibG9jayBpbmRleCBhbmQgd2FzIG5vdCBzZXQnKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQot
ICB3dHUuc2V0dXBVbml0UXVhZChnbCk7Ci0gIHd0dS5jbGVhckFuZERyYXdVbml0UXVhZChnbCk7
Ci0KLSAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICBkaXYuY2xh
c3NOYW1lID0gInRlc3RpbWFnZXMiOwotICB3dHUuaW5zZXJ0SW1hZ2UoZGl2LCAicmVzdWx0Iiwg
d3R1Lm1ha2VJbWFnZUZyb21DYW52YXMoZ2wuY2FudmFzKSk7Ci0gIGRpdi5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKLSAgY29uc29sZURpdi5hcHBlbmRDaGlsZChk
aXYpOwotCi0gIHZhciB0b2xlcmFuY2UgPSAwOwotICBpZiAoaW5mby5yZW5kZXJUb2xlcmFuY2Ug
IT09IHVuZGVmaW5lZCkgewotICAgIHRvbGVyYW5jZSA9IGluZm8ucmVuZGVyVG9sZXJhbmNlOwot
ICB9Ci0gIGlmIChpbmZvLnJlbmRlckNvbG9yICE9PSB1bmRlZmluZWQpIHsKLSAgICB3dHUuY2hl
Y2tDYW52YXMoZ2wsIGluZm8ucmVuZGVyQ29sb3IsICJzaG91bGQgYmUgZXhwZWN0ZWQgY29sb3Ig
IiArIGluZm8ucmVuZGVyQ29sb3IsIHRvbGVyYW5jZSk7Ci0gIH0gZWxzZSB7Ci0gICAgd3R1LmNo
ZWNrQ2FudmFzKGdsLCBbMCwgMjU1LCAwLCAyNTVdLCAic2hvdWxkIGJlIGdyZWVuIiwgdG9sZXJh
bmNlKTsKLSAgfQotfQotCi1mdW5jdGlvbiBydW5UZXN0cyhzaGFkZXJJbmZvcywgb3B0X2NvbnRl
eHRWZXJzaW9uKSB7Ci0gIHZhciB3dHUgPSBXZWJHTFRlc3RVdGlsczsKLSAgdmFyIGNhbnZhcyA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOwotICBjYW52YXMud2lkdGggPSAzMjsK
LSAgY2FudmFzLmhlaWdodCA9IDMyOwotICB2YXIgZ2wgPSB3dHUuY3JlYXRlM0RDb250ZXh0KGNh
bnZhcywgdW5kZWZpbmVkLCBvcHRfY29udGV4dFZlcnNpb24pOwotICBpZiAoIWdsKSB7Ci0gICAg
dGVzdEZhaWxlZCgiY29udGV4dCBkb2VzIG5vdCBleGlzdCIpOwotICAgIGZpbmlzaFRlc3QoKTsK
LSAgICByZXR1cm47Ci0gIH0KLQotICBmb3IgKHZhciBpID0gMDsgaSA8IHNoYWRlckluZm9zLmxl
bmd0aDsgaSsrKSB7Ci0gICAgcnVuT25lVGVzdChnbCwgc2hhZGVySW5mb3NbaV0pOwotICB9Ci0K
LSAgZmluaXNoVGVzdCgpOwotfTsKLQotZnVuY3Rpb24gZ2V0U291cmNlKGVsZW0pIHsKLSAgdmFy
IHN0ciA9IGVsZW0udGV4dDsKLSAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXHMqLywgJycpLnJlcGxh
Y2UoL1xzKiQvLCAnJyk7Ci19Ci0KLWZ1bmN0aW9uIGdldFBhc3NNZXNzYWdlKHNvdXJjZSkgewot
ICB2YXIgbGluZXMgPSBzb3VyY2Uuc3BsaXQoJ1xuJyk7Ci0gIHJldHVybiBsaW5lc1swXS5zdWJz
dHJpbmcoMyk7Ci19Ci0KLWZ1bmN0aW9uIGdldFN1Y2Nlc3MobXNnKSB7Ci0gIGlmIChtc2cuaW5k
ZXhPZigiZmFpbCIpID49IDApIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgaWYgKG1zZy5p
bmRleE9mKCJzdWNjZWVkIikgPj0gMCkgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIHRlc3RG
YWlsZWQoImJhZCB0ZXN0IGRlc2NyaXB0aW9uLiBNdXN0IGhhdmUgJ2ZhaWwnIG9yICdzdWNjZWVk
JyIpOwotfQotCi1mdW5jdGlvbiBzZXR1cFRlc3QoKSB7Ci0gIHZhciBpbmZvID0ge307Ci0KLSAg
dmFyIHZTaGFkZXJFbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZlcnRleFNoYWRlcicp
OwotICBpZiAodlNoYWRlckVsZW0pIHsKLSAgICBpbmZvLnZTaGFkZXJTb3VyY2UgPSBnZXRTb3Vy
Y2UodlNoYWRlckVsZW0pOwotICAgIGluZm8ucGFzc01zZyA9IGdldFBhc3NNZXNzYWdlKGluZm8u
dlNoYWRlclNvdXJjZSk7Ci0gICAgaW5mby52U2hhZGVyU3VjY2VzcyA9IGdldFN1Y2Nlc3MoaW5m
by5wYXNzTXNnKTsKLSAgfQotCi0gIHZhciBmU2hhZGVyRWxlbSA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdmcmFnbWVudFNoYWRlcicpOwotICBpZiAoZlNoYWRlckVsZW0pIHsKLSAgICBpbmZv
LmZTaGFkZXJTb3VyY2UgPSBnZXRTb3VyY2UoZlNoYWRlckVsZW0pOwotICAgIGluZm8ucGFzc01z
ZyA9IGdldFBhc3NNZXNzYWdlKGluZm8uZlNoYWRlclNvdXJjZSk7Ci0gICAgaW5mby5mU2hhZGVy
U3VjY2VzcyA9IGdldFN1Y2Nlc3MoaW5mby5wYXNzTXNnKTsKLSAgfQotCi0gIC8vIGxpbmtTdWNj
ZXNzIHNob3VsZCBiZSB0cnVlIGlmIHNoYWRlciBzdWNjZXNzIHZhbHVlIGlzIHVuZGVmaW5lZCBv
ciB0cnVlIGZvciBib3RoIHNoYWRlcnMuCi0gIGluZm8ubGlua1N1Y2Nlc3MgPSBpbmZvLnZTaGFk
ZXJTdWNjZXNzICE9PSBmYWxzZSAmJiBpbmZvLmZTaGFkZXJTdWNjZXNzICE9PSBmYWxzZTsKLQot
ICBpZiAoaW5mby5wYXNzTXNnID09PSB1bmRlZmluZWQpIHsKLSAgICB0ZXN0RmFpbGVkKCJubyB0
ZXN0IHNoYWRlciBmb3VuZC4iKTsKLSAgICBmaW5pc2hUZXN0KCk7Ci0gICAgcmV0dXJuOwotICB9
Ci0KLSAgcmV0dXJuIGluZm87Ci19Ci0KLWZ1bmN0aW9uIHJ1blRlc3QoKSB7Ci0gIHZhciBpbmZv
ID0gc2V0dXBUZXN0KCk7Ci0gIGRlc2NyaXB0aW9uKGluZm8ucGFzc01zZyk7Ci0gIHJ1blRlc3Rz
KFtpbmZvXSk7Ci19Ci0KLWZ1bmN0aW9uIHJ1blJlbmRlclRlc3RzKHRlc3RzLCBvcHRfY29udGV4
dFZlcnNpb24pIHsKLSAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHRlc3RzLmxlbmd0aDsgKytpaSkg
ewotICAgIHRlc3RzW2lpXS5yZW5kZXIgPSB0cnVlCi0gIH0KLSAgcnVuVGVzdHModGVzdHMsIG9w
dF9jb250ZXh0VmVyc2lvbik7Ci19Ci0KLWZ1bmN0aW9uIHJ1blJlbmRlclRlc3QoKSB7Ci0gIHZh
ciBpbmZvID0gc2V0dXBUZXN0KCk7Ci0gIGRlc2NyaXB0aW9uKGluZm8ucGFzc01zZyk7Ci0gIHJ1
blJlbmRlclRlc3RzKFtpbmZvXSk7Ci19Ci0KLXJldHVybiB7Ci0gIHJ1blRlc3Q6IHJ1blRlc3Qs
Ci0gIHJ1blRlc3RzOiBydW5UZXN0cywKLSAgcnVuUmVuZGVyVGVzdDogcnVuUmVuZGVyVGVzdCwK
LSAgcnVuUmVuZGVyVGVzdHM6IHJ1blJlbmRlclRlc3RzCi19OwotfSgpKTsKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvanMv
anMtdGVzdC1wb3N0LmpzIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2Vi
Z2xfdGVzdF9maWxlcy9qcy9qcy10ZXN0LXBvc3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGZmODllNTg2ZWJkYWZjZDE1Y2I0Njg1ZDA3MGRmZDI2ODU5MTY2NjUuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ2wv
cGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9qcy9qcy10ZXN0LXBvc3QuanMKKysr
IC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0vKgotQ29weXJpZ2h0IChjKSAyMDE5IFRoZSBL
aHJvbm9zIEdyb3VwIEluYy4KLVVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi1mb3VuZCBpbiB0aGUgTElDRU5TRS50
eHQgZmlsZS4KLSovCi0KLXNob3VsZEJlVHJ1ZSgic3VjY2Vzc2Z1bGx5UGFyc2VkIik7Ci1fYWRk
U3BhbignPGJyIC8+PHNwYW4gY2xhc3M9InBhc3MiPlRFU1QgQ09NUExFVEU8L3NwYW4+Jyk7Ci1p
ZiAoX2pzVGVzdFByZVZlcmJvc2VMb2dnaW5nKSB7Ci0gICAgX2J1ZmZlcmVkTG9nVG9Db25zb2xl
KCdURVNUIENPTVBMRVRFJyk7Ci19Ci1ub3RpZnlGaW5pc2hlZFRvSGFybmVzcygpCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVz
L2pzL2pzLXRlc3QtcHJlLmpzIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMv
d2ViZ2xfdGVzdF9maWxlcy9qcy9qcy10ZXN0LXByZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYTBkYTM0ODllN2UzZGU3NzhjMTJjOWJhMmI5ZjE1MTk3MjY4OGQwMC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJn
bC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2pzL2pzLXRlc3QtcHJlLmpzCisr
KyAvZGV2L251bGwKQEAgLTEsNzczICswLDAgQEAKLS8qCi1Db3B5cmlnaHQgKGMpIDIwMTkgVGhl
IEtocm9ub3MgR3JvdXAgSW5jLgotVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLWZvdW5kIGluIHRoZSBMSUNFTlNF
LnR4dCBmaWxlLgotKi8KLQotKGZ1bmN0aW9uKCkgewotICB2YXIgdGVzdEhhcm5lc3NJbml0aWFs
aXplZCA9IGZhbHNlOwotCi0gIHZhciBpbml0Tm9uS2hyb25vc0ZyYW1ld29yayA9IGZ1bmN0aW9u
KCkgewotICAgIGlmICh0ZXN0SGFybmVzc0luaXRpYWxpemVkKSB7Ci0gICAgICByZXR1cm47Ci0g
ICAgfQotICAgIHRlc3RIYXJuZXNzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgLyogLS0gcGxh
Zm9ybSBzcGVjaWZpYyBjb2RlIC0tICovCi0KLSAgICAvLyBXZWJLaXQgU3BlY2lmaWMgY29kZS4g
QWRkIHlvdXIgY29kZSBoZXJlLgotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lciAmJiAhd2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSB7Ci0gICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIgPSB3aW5kb3cudGVzdFJ1bm5lcjsKLSAgICB9Ci0KLSAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7Ci0gICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOwotICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUo
KTsKLSAgICB9Ci0gICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKLSAgICAgIC8vIFRoZSBXZWJL
aXQgdGVzdGluZyBzeXN0ZW0gY29tcGFyZXMgY29uc29sZSBvdXRwdXQuCi0gICAgICAvLyBCZWNh
dXNlIHRoZSBvdXRwdXQgb2YgdGhlIFdlYkdMIFRlc3RzIGlzIEdQVSBkZXBlbmRlbnQKLSAgICAg
IC8vIHdlIHR1cm4gb2ZmIGNvbnNvbGUgbWVzc2FnZXMuCi0gICAgICB3aW5kb3cuY29uc29sZS5s
b2cgPSBmdW5jdGlvbigpIHsgfTsKLSAgICAgIHdpbmRvdy5jb25zb2xlLmVycm9yID0gZnVuY3Rp
b24oKSB7IH07Ci0gICAgICB3aW5kb3cuaW50ZXJuYWxzLnNldHRpbmdzLnNldFdlYkdMRXJyb3Jz
VG9Db25zb2xlRW5hYmxlZChmYWxzZSk7Ci0gICAgfQotCi0gICAgLyogLS0gZW5kIHBsYXRmb3Jt
IHNwZWNpZmljIGNvZGUgLS0qLwotICB9Ci0KLSAgdGhpcy5pbml0VGVzdGluZ0hhcm5lc3MgPSBm
dW5jdGlvbigpIHsKLSAgICBpbml0Tm9uS2hyb25vc0ZyYW1ld29yaygpOwotICB9Ci19KCkpOwot
Ci12YXIgZ2V0VXJsT3B0aW9ucyA9IChmdW5jdGlvbigpIHsKLSAgdmFyIF91cmxPcHRpb25zUGFy
c2VkID0gZmFsc2U7Ci0gIHZhciBfdXJsT3B0aW9ucyA9IHt9OwotICByZXR1cm4gZnVuY3Rpb24o
KSB7Ci0gICAgaWYgKCFfdXJsT3B0aW9uc1BhcnNlZCkgewotICAgICAgdmFyIHMgPSB3aW5kb3cu
bG9jYXRpb24uaHJlZjsKLSAgICAgIHZhciBxID0gcy5pbmRleE9mKCI/Iik7Ci0gICAgICB2YXIg
ZSA9IHMuaW5kZXhPZigiIyIpOwotICAgICAgaWYgKGUgPCAwKSB7Ci0gICAgICAgIGUgPSBzLmxl
bmd0aDsKLSAgICAgIH0KLSAgICAgIHZhciBxdWVyeSA9IHMuc3Vic3RyaW5nKHEgKyAxLCBlKTsK
LSAgICAgIHZhciBwYWlycyA9IHF1ZXJ5LnNwbGl0KCImIik7Ci0gICAgICBmb3IgKHZhciBpaSA9
IDA7IGlpIDwgcGFpcnMubGVuZ3RoOyArK2lpKSB7Ci0gICAgICAgIHZhciBrZXlWYWx1ZSA9IHBh
aXJzW2lpXS5zcGxpdCgiPSIpOwotICAgICAgICB2YXIga2V5ID0ga2V5VmFsdWVbMF07Ci0gICAg
ICAgIHZhciB2YWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXlWYWx1ZVsxXSk7Ci0gICAgICAg
IF91cmxPcHRpb25zW2tleV0gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICAgIF91cmxPcHRpb25zUGFy
c2VkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gX3VybE9wdGlvbnM7Ci0gIH0KLX0pKCk7
Ci0KLWlmICh0eXBlb2YgcXVpZXRNb2RlID09ICd1bmRlZmluZWQnKSB7Ci0gIHZhciBxdWlldE1v
ZGUgPSAoZnVuY3Rpb24oKSB7Ci0gICAgdmFyIF9xdWlldE1vZGVDaGVja2VkID0gZmFsc2U7Ci0g
ICAgdmFyIF9pc1F1aWV0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAg
aWYgKCFfcXVpZXRNb2RlQ2hlY2tlZCkgewotICAgICAgICBfaXNRdWlldCA9IChnZXRVcmxPcHRp
b25zKCkucXVpZXQgPT0gMSk7Ci0gICAgICAgIF9xdWlldE1vZGVDaGVja2VkID0gdHJ1ZTsKLSAg
ICAgIH0KLSAgICAgIHJldHVybiBfaXNRdWlldDsKLSAgICB9Ci0gIH0pKCk7Ci19Ci0KLWZ1bmN0
aW9uIG5vbktocm9ub3NGcmFtZXdvcmtOb3RpZnlEb25lKCkgewotICAvLyBXZWJLaXQgU3BlY2lm
aWMgY29kZS4gQWRkIHlvdXIgY29kZSBoZXJlLgotICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7Ci0gICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
LSAgfQotfQotCi1mdW5jdGlvbiByZXBvcnRUZXN0UmVzdWx0c1RvSGFybmVzcyhzdWNjZXNzLCBt
c2cpIHsKLSAgaWYgKHdpbmRvdy5wYXJlbnQud2ViZ2xUZXN0SGFybmVzcykgewotICAgIHdpbmRv
dy5wYXJlbnQud2ViZ2xUZXN0SGFybmVzcy5yZXBvcnRSZXN1bHRzKHdpbmRvdy5sb2NhdGlvbi5w
YXRobmFtZSwgc3VjY2VzcywgbXNnKTsKLSAgfQotfQotCi1mdW5jdGlvbiByZXBvcnRTa2lwcGVk
VGVzdFJlc3VsdHNUb0hhcm5lc3Moc3VjY2VzcywgbXNnKSB7Ci0gIGlmICh3aW5kb3cucGFyZW50
LndlYmdsVGVzdEhhcm5lc3MpIHsKLSAgICB3aW5kb3cucGFyZW50LndlYmdsVGVzdEhhcm5lc3Mu
cmVwb3J0UmVzdWx0cyh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsIHN1Y2Nlc3MsIG1zZywgdHJ1
ZSk7Ci0gIH0KLX0KLQotZnVuY3Rpb24gbm90aWZ5RmluaXNoZWRUb0hhcm5lc3MoKSB7Ci0gIGlm
ICh3aW5kb3cucGFyZW50LndlYmdsVGVzdEhhcm5lc3MpIHsKLSAgICB3aW5kb3cucGFyZW50Lndl
YmdsVGVzdEhhcm5lc3Mubm90aWZ5RmluaXNoZWQod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKTsK
LSAgfQotICBpZiAod2luZG93Lm5vbktocm9ub3NGcmFtZXdvcmtOb3RpZnlEb25lKSB7Ci0gICAg
d2luZG93Lm5vbktocm9ub3NGcmFtZXdvcmtOb3RpZnlEb25lKCk7Ci0gIH0KLX0KLQotdmFyIF9i
dWZmZXJlZENvbnNvbGVMb2dzID0gW107Ci0KLWZ1bmN0aW9uIF9idWZmZXJlZExvZ1RvQ29uc29s
ZShtc2cpCi17Ci0gIGlmIChfYnVmZmVyZWRDb25zb2xlTG9ncykgewotICAgIF9idWZmZXJlZENv
bnNvbGVMb2dzLnB1c2gobXNnKTsKLSAgfSBlbHNlIGlmICh3aW5kb3cuY29uc29sZSkgewotICAg
IHdpbmRvdy5jb25zb2xlLmxvZyhtc2cpOwotICB9Ci19Ci0KLS8vIFB1YmxpYyBlbnRyeSBwb2lu
dCBleHBvc2VkIHRvIG1hbnkgb3RoZXIgZmlsZXMuCi1mdW5jdGlvbiBidWZmZXJlZExvZ1RvQ29u
c29sZShtc2cpCi17Ci0gIF9idWZmZXJlZExvZ1RvQ29uc29sZShtc2cpOwotfQotCi0vLyBDYWxs
ZWQgaW1wbGljaXRseSBieSB0ZXN0RmFpbGVkKCkuCi1mdW5jdGlvbiBfZmx1c2hCdWZmZXJlZExv
Z3NUb0NvbnNvbGUoKQotewotICBpZiAoX2J1ZmZlcmVkQ29uc29sZUxvZ3MpIHsKLSAgICBpZiAo
d2luZG93LmNvbnNvbGUpIHsKLSAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBfYnVmZmVyZWRD
b25zb2xlTG9ncy5sZW5ndGg7ICsraWkpIHsKLSAgICAgICAgd2luZG93LmNvbnNvbGUubG9nKF9i
dWZmZXJlZENvbnNvbGVMb2dzW2lpXSk7Ci0gICAgICB9Ci0gICAgfQotICAgIF9idWZmZXJlZENv
bnNvbGVMb2dzID0gbnVsbDsKLSAgfQotfQotCi12YXIgX2pzVGVzdFByZVZlcmJvc2VMb2dnaW5n
ID0gZmFsc2U7Ci0KLWZ1bmN0aW9uIGVuYWJsZUpTVGVzdFByZVZlcmJvc2VMb2dnaW5nKCkKLXsK
LSAgICBfanNUZXN0UHJlVmVyYm9zZUxvZ2dpbmcgPSB0cnVlOwotfQotCi1mdW5jdGlvbiBkZXNj
cmlwdGlvbihtc2cpCi17Ci0gICAgaW5pdFRlc3RpbmdIYXJuZXNzKCk7Ci0gICAgaWYgKG1zZyA9
PT0gdW5kZWZpbmVkKSB7Ci0gICAgICBtc2cgPSBkb2N1bWVudC50aXRsZTsKLSAgICB9Ci0gICAg
Ly8gRm9yIE1TSUUgNiBjb21wYXRpYmlsaXR5Ci0gICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJzcGFuIik7Ci0gICAgc3Bhbi5pbm5lckhUTUwgPSAnPHA+JyArIG1zZyArICc8
L3A+PHA+T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICI8c3BhbiBjbGFzcz0i
cGFzcyI+UEFTUzwvc3Bhbj4iIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiPHNwYW4gY2xhc3M9InBh
c3MiPlRFU1QgQ09NUExFVEU8L3NwYW4+Ii48L3A+JzsKLSAgICB2YXIgZGVzY3JpcHRpb24gPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGVzY3JpcHRpb24iKTsKLSAgICBpZiAoZGVzY3JpcHRp
b24uZmlyc3RDaGlsZCkKLSAgICAgICAgZGVzY3JpcHRpb24ucmVwbGFjZUNoaWxkKHNwYW4sIGRl
c2NyaXB0aW9uLmZpcnN0Q2hpbGQpOwotICAgIGVsc2UKLSAgICAgICAgZGVzY3JpcHRpb24uYXBw
ZW5kQ2hpbGQoc3Bhbik7Ci0gICAgaWYgKF9qc1Rlc3RQcmVWZXJib3NlTG9nZ2luZykgewotICAg
ICAgICBfYnVmZmVyZWRMb2dUb0NvbnNvbGUobXNnKTsKLSAgICB9Ci19Ci0KLWZ1bmN0aW9uIF9h
ZGRTcGFuKGNvbnRlbnRzKQotewotICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgic3BhbiIpOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5k
Q2hpbGQoc3Bhbik7IC8vIGluc2VydCBpdCBmaXJzdCBzbyBYSFRNTCBrbm93cyB0aGUgbmFtZXNw
YWNlCi0gICAgc3Bhbi5pbm5lckhUTUwgPSBjb250ZW50cyArICc8YnIgLz4nOwotfQotCi1mdW5j
dGlvbiBkZWJ1Zyhtc2cpCi17Ci0gICAgaWYgKCFxdWlldE1vZGUoKSkKLSAgICAgIF9hZGRTcGFu
KG1zZyk7Ci0gICAgaWYgKF9qc1Rlc3RQcmVWZXJib3NlTG9nZ2luZykgewotICAgICAgICBfYnVm
ZmVyZWRMb2dUb0NvbnNvbGUobXNnKTsKLSAgICB9Ci19Ci0KLWZ1bmN0aW9uIGVzY2FwZUhUTUwo
dGV4dCkKLXsKLSAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC8mL2csICImYW1wOyIpLnJlcGxhY2Uo
LzwvZywgIiZsdDsiKTsKLX0KLS8qKgotICogRGVmaW5lcyB0aGUgZXhjZXB0aW9uIHR5cGUgZm9y
IGEgdGVzdCBmYWlsdXJlLgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge3N0cmluZ30gbWVz
c2FnZSBUaGUgZXJyb3IgbWVzc2FnZS4KLSAqLwotdmFyIFRlc3RGYWlsZWRFeGNlcHRpb24gPSBm
dW5jdGlvbiAobWVzc2FnZSkgewotICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKLSAgIHRoaXMu
bmFtZSA9ICJUZXN0RmFpbGVkRXhjZXB0aW9uIjsKLX07Ci0KLS8qKgotICogQHBhcmFtICB7c3Ry
aW5nPX0gbXNnCi0gKi8KLWZ1bmN0aW9uIHRlc3RQYXNzZWQobXNnKSB7Ci0gICAgbXNnID0gbXNn
IHx8ICdQYXNzZWQnOwotICAgIGlmIChfY3VycmVudFRlc3ROYW1lKQotICAgICAgbXNnID0gX2N1
cnJlbnRUZXN0TmFtZSArICc6ICcgKyBtc2c7Ci0KLSAgICByZXBvcnRUZXN0UmVzdWx0c1RvSGFy
bmVzcyh0cnVlLCBtc2cpOwotCi0gICAgaWYgKCFxdWlldE1vZGUoKSkKLSAgICAgIF9hZGRTcGFu
KCc8c3Bhbj48c3BhbiBjbGFzcz0icGFzcyI+UEFTUzwvc3Bhbj4gJyArIGVzY2FwZUhUTUwobXNn
KSArICc8L3NwYW4+Jyk7Ci0gICAgaWYgKF9qc1Rlc3RQcmVWZXJib3NlTG9nZ2luZykgewotICAg
ICAgICBfYnVmZmVyZWRMb2dUb0NvbnNvbGUoJ1BBU1MgJyArIG1zZyk7Ci0gICAgfQotfQotCi0v
KioKLSAqIEBwYXJhbSAge3N0cmluZz19IG1zZwotICovCi1mdW5jdGlvbiB0ZXN0RmFpbGVkKG1z
ZykgewotICAgIG1zZyA9IG1zZyB8fCAnRmFpbGVkJzsKLSAgICBpZiAoX2N1cnJlbnRUZXN0TmFt
ZSkKLSAgICAgIG1zZyA9IF9jdXJyZW50VGVzdE5hbWUgKyAnOiAnICsgbXNnOwotCi0gICAgcmVw
b3J0VGVzdFJlc3VsdHNUb0hhcm5lc3MoZmFsc2UsIG1zZyk7Ci0gICAgX2FkZFNwYW4oJzxzcGFu
PjxzcGFuIGNsYXNzPSJmYWlsIj5GQUlMPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwv
c3Bhbj4nKTsKLSAgICBfYnVmZmVyZWRMb2dUb0NvbnNvbGUoJ0ZBSUwgJyArIG1zZyk7Ci0gICAg
X2ZsdXNoQnVmZmVyZWRMb2dzVG9Db25zb2xlKCk7Ci19Ci0KLXZhciBfY3VycmVudFRlc3ROYW1l
OwotCi0vKioKLSAqIFNldHMgdGhlIGN1cnJlbnQgdGVzdCBuYW1lIGZvciB1c2FnZSB3aXRoaW4g
dGVzdFBhc3NlZE9wdGlvbnMvdGVzdEZhaWxlZE9wdGlvbnMuCi0gKiBAcGFyYW0ge3N0cmluZz19
IG5hbWUgVGhlIG5hbWUgdG8gc2V0IGFzIHRoZSBjdXJyZW50IHRlc3QgbmFtZS4KLSAqLwotZnVu
Y3Rpb24gc2V0Q3VycmVudFRlc3ROYW1lKG5hbWUpCi17Ci0gICAgX2N1cnJlbnRUZXN0TmFtZSA9
IG5hbWU7Ci19Ci0KLS8qKgotICogR2V0cyB0aGUgY3VycmVudCB0ZXN0IG5hbWUgaW4gdXNlIHdp
dGhpbiB0ZXN0UGFzc2VkT3B0aW9ucy90ZXN0RmFpbGVkT3B0aW9ucy4KLSAqIEByZXR1cm4ge3N0
cmluZ30gVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgdGVzdC4KLSAqLwotZnVuY3Rpb24gZ2V0Q3Vy
cmVudFRlc3ROYW1lKCkKLXsKLSAgICByZXR1cm4gX2N1cnJlbnRUZXN0TmFtZTsKLX0KLQotLyoq
Ci0gKiBWYXJpYXRpb24gb2YgdGhlIHRlc3RQYXNzZWQgZnVuY3Rpb24sIHdpdGggdGhlIG9wdGlv
biB0byBub3Qgc2hvdyAoYW5kIHRodXMgbm90IGNvdW50KSB0aGUgdGVzdCdzIHBhc3MgcmVzdWx0
LgotICogQHBhcmFtIHtzdHJpbmd9IG1zZyBUaGUgbWVzc2FnZSB0byBiZSBzaG93biBpbiB0aGUg
cGFzcyByZXN1bHQuCi0gKiBAcGFyYW0ge2Jvb2xlYW59IGFkZFNwYW4gSW5kaWNhdGVzIHdoZXRo
ZXIgdGhlIG1lc3NhZ2Ugd2lsbCBiZSB2aXNpYmxlICh0aHVzIGNvdW50ZWQgaW4gdGhlIHJlc3Vs
dHMpIG9yIG5vdC4KLSAqLwotZnVuY3Rpb24gdGVzdFBhc3NlZE9wdGlvbnMobXNnLCBhZGRTcGFu
KQotewotICAgIGlmIChhZGRTcGFuICYmICFxdWlldE1vZGUoKSkKLSAgICB7Ci0gICAgICAgIHJl
cG9ydFRlc3RSZXN1bHRzVG9IYXJuZXNzKHRydWUsIF9jdXJyZW50VGVzdE5hbWUgKyAiOiAiICsg
bXNnKTsKLSAgICAgICAgX2FkZFNwYW4oJzxzcGFuPjxzcGFuIGNsYXNzPSJwYXNzIj5QQVNTPC9z
cGFuPiAnICsgZXNjYXBlSFRNTChfY3VycmVudFRlc3ROYW1lKSArICI6ICIgKyBlc2NhcGVIVE1M
KG1zZykgKyAnPC9zcGFuPicpOwotICAgIH0KLSAgICBpZiAoX2pzVGVzdFByZVZlcmJvc2VMb2dn
aW5nKSB7Ci0gICAgICAgIF9idWZmZXJlZExvZ1RvQ29uc29sZSgnUEFTUyAnICsgbXNnKTsKLSAg
ICB9Ci19Ci0KLS8qKgotICogUmVwb3J0IHNraXBwZWQgdGVzdHMuCi0gKiBAcGFyYW0ge3N0cmlu
Z30gbXNnIFRoZSBtZXNzYWdlIHRvIGJlIHNob3duIGluIHRoZSBza2lwIHJlc3VsdC4KLSAqIEBw
YXJhbSB7Ym9vbGVhbn0gYWRkU3BhbiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgbWVzc2FnZSB3aWxs
IGJlIHZpc2libGUgKHRodXMgY291bnRlZCBpbiB0aGUgcmVzdWx0cykgb3Igbm90LgotICovCi1m
dW5jdGlvbiB0ZXN0U2tpcHBlZE9wdGlvbnMobXNnLCBhZGRTcGFuKQotewotICAgIGlmIChhZGRT
cGFuICYmICFxdWlldE1vZGUoKSkKLSAgICB7Ci0gICAgICAgIHJlcG9ydFNraXBwZWRUZXN0UmVz
dWx0c1RvSGFybmVzcyh0cnVlLCBfY3VycmVudFRlc3ROYW1lICsgIjogIiArIG1zZyk7Ci0gICAg
ICAgIF9hZGRTcGFuKCc8c3Bhbj48c3BhbiBjbGFzcz0id2FybiI+U0tJUDwvc3Bhbj4gJyArIGVz
Y2FwZUhUTUwoX2N1cnJlbnRUZXN0TmFtZSkgKyAiOiAiICsgZXNjYXBlSFRNTChtc2cpICsgJzwv
c3Bhbj4nKTsKLSAgICB9Ci0gICAgaWYgKF9qc1Rlc3RQcmVWZXJib3NlTG9nZ2luZykgewotICAg
ICAgICBfYnVmZmVyZWRMb2dUb0NvbnNvbGUoJ1NLSVAnICsgbXNnKTsKLSAgICB9Ci19Ci0KLS8q
KgotICogVmFyaWF0aW9uIG9mIHRoZSB0ZXN0RmFpbGVkIGZ1bmN0aW9uLCB3aXRoIHRoZSBvcHRp
b24gdG8gdGhyb3cgYW4gZXhjZXB0aW9uIG9yIG5vdC4KLSAqIEBwYXJhbSB7c3RyaW5nfSBtc2cg
VGhlIG1lc3NhZ2UgdG8gYmUgc2hvd24gaW4gdGhlIGZhaWwgcmVzdWx0LgotICogQHBhcmFtIHti
b29sZWFufSBleHRocm93IEluZGljYXRlcyB3aGV0aGVyIHRoZSBmdW5jdGlvbiB3aWxsIHRocm93
IGEgVGVzdEZhaWxlZEV4Y2VwdGlvbiBvciBub3QuCi0gKi8KLWZ1bmN0aW9uIHRlc3RGYWlsZWRP
cHRpb25zKG1zZywgZXh0aHJvdykKLXsKLSAgICByZXBvcnRUZXN0UmVzdWx0c1RvSGFybmVzcyhm
YWxzZSwgX2N1cnJlbnRUZXN0TmFtZSArICI6ICIgKyBtc2cpOwotICAgIF9hZGRTcGFuKCc8c3Bh
bj48c3BhbiBjbGFzcz0iZmFpbCI+RkFJTDwvc3Bhbj4gJyArIGVzY2FwZUhUTUwoX2N1cnJlbnRU
ZXN0TmFtZSkgKyAiOiAiICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKLSAgICBfYnVm
ZmVyZWRMb2dUb0NvbnNvbGUoJ0ZBSUwgJyArIG1zZyk7Ci0gICAgX2ZsdXNoQnVmZmVyZWRMb2dz
VG9Db25zb2xlKCk7Ci0gICAgaWYgKGV4dGhyb3cpIHsKLSAgICAgICAgX2N1cnJlbnRUZXN0TmFt
ZSA9ICIiOyAvL1JlbWVtYmVyaW5nIHRvIHNldCB0aGUgbmFtZSBvZiBjdXJyZW50IHRlc3RjYXNl
IHRvIGVtcHR5IHN0cmluZy4KLSAgICAgICAgdGhyb3cgbmV3IFRlc3RGYWlsZWRFeGNlcHRpb24o
bXNnKTsKLSAgICB9Ci19Ci0KLWZ1bmN0aW9uIGFyZUFycmF5c0VxdWFsKF9hLCBfYikKLXsKLSAg
ICB0cnkgewotICAgICAgICBpZiAoX2EubGVuZ3RoICE9PSBfYi5sZW5ndGgpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX2EubGVuZ3RoOyBp
KyspCi0gICAgICAgICAgICBpZiAoX2FbaV0gIT09IF9iW2ldKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9IGNhdGNoIChleCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1mdW5jdGlvbiBpc01pbnVzWmVybyhuKQotewot
ICAgIC8vIHRoZSBvbmx5IHdheSB0byB0ZWxsIDAgZnJvbSAtMCBpbiBKUyBpcyB0aGUgZmFjdCB0
aGF0IDEvLTAgaXMKLSAgICAvLyAtSW5maW5pdHkgaW5zdGVhZCBvZiBJbmZpbml0eQotICAgIHJl
dHVybiBuID09PSAwICYmIDEvbiA8IDA7Ci19Ci0KLWZ1bmN0aW9uIGlzUmVzdWx0Q29ycmVjdChf
YWN0dWFsLCBfZXhwZWN0ZWQpCi17Ci0gICAgaWYgKF9leHBlY3RlZCA9PT0gMCkKLSAgICAgICAg
cmV0dXJuIF9hY3R1YWwgPT09IF9leHBlY3RlZCAmJiAoMS9fYWN0dWFsKSA9PT0gKDEvX2V4cGVj
dGVkKTsKLSAgICBpZiAoX2FjdHVhbCA9PT0gX2V4cGVjdGVkKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBpZiAodHlwZW9mKF9leHBlY3RlZCkgPT0gIm51bWJlciIgJiYgaXNOYU4oX2V4cGVj
dGVkKSkKLSAgICAgICAgcmV0dXJuIHR5cGVvZihfYWN0dWFsKSA9PSAibnVtYmVyIiAmJiBpc05h
TihfYWN0dWFsKTsKLSAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKF9leHBl
Y3RlZCkgPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFtdKSkKLSAgICAgICAgcmV0
dXJuIGFyZUFycmF5c0VxdWFsKF9hY3R1YWwsIF9leHBlY3RlZCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1mdW5jdGlvbiBzdHJpbmdpZnkodikKLXsKLSAgICBpZiAodiA9PT0gMCAmJiAxL3Yg
PCAwKQotICAgICAgICByZXR1cm4gIi0wIjsKLSAgICBlbHNlIHJldHVybiAiIiArIHY7Ci19Ci0K
LWZ1bmN0aW9uIGV2YWxBbmRMb2coX2EpCi17Ci0gIGlmICh0eXBlb2YgX2EgIT0gInN0cmluZyIp
Ci0gICAgZGVidWcoIldBUk46IHRyeUFuZExvZygpIGV4cGVjdHMgYSBzdHJpbmcgYXJndW1lbnQi
KTsKLQotICAvLyBMb2cgZmlyc3QgaW4gY2FzZSB0aGluZ3MgZ28gaG9ycmlibHkgd3Jvbmcgb3Ig
dGhpcyBjYXVzZXMgYSBzeW5jIGV2ZW50LgotICBkZWJ1ZyhfYSk7Ci0KLSAgdmFyIF9hdjsKLSAg
dHJ5IHsKLSAgICAgX2F2ID0gZXZhbChfYSk7Ci0gIH0gY2F0Y2ggKGUpIHsKLSAgICB0ZXN0RmFp
bGVkKF9hICsgIiB0aHJldyBleGNlcHRpb24gIiArIGUpOwotICB9Ci0gIHJldHVybiBfYXY7Ci19
Ci0KLWZ1bmN0aW9uIHNob3VsZEJlU3RyaW5nKGV2YWxhYmxlLCBleHBlY3RlZCkgewotICAgIGNv
bnN0IHZhbCA9IGV2YWwoZXZhbGFibGUpOwotICAgIGNvbnN0IHRleHQgPSBldmFsYWJsZSArICIg
c2hvdWxkIGJlICIgKyBleHBlY3RlZCArICIuIjsKLSAgICBpZiAodmFsID09IGV4cGVjdGVkKSB7
Ci0gICAgICAgIHRlc3RQYXNzZWQodGV4dCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdGVzdEZh
aWxlZCh0ZXh0ICsgIiAod2FzICIgKyB2YWwgKyAiKSIpOwotICAgIH0KLX0KLQotZnVuY3Rpb24g
c2hvdWxkQmUoX2EsIF9iLCBxdWlldCkKLXsKLSAgICBpZiAodHlwZW9mIF9hICE9ICJzdHJpbmci
IHx8IHR5cGVvZiBfYiAhPSAic3RyaW5nIikKLSAgICAgICAgZGVidWcoIldBUk46IHNob3VsZEJl
KCkgZXhwZWN0cyBzdHJpbmcgYXJndW1lbnRzIik7Ci0gICAgdmFyIGV4Y2VwdGlvbjsKLSAgICB2
YXIgX2F2OwotICAgIHRyeSB7Ci0gICAgICAgIF9hdiA9IGV2YWwoX2EpOwotICAgIH0gY2F0Y2gg
KGUpIHsKLSAgICAgICAgZXhjZXB0aW9uID0gZTsKLSAgICB9Ci0gICAgdmFyIF9idiA9IGV2YWwo
X2IpOwotCi0gICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgdGVzdEZhaWxlZChfYSArICIgc2hv
dWxkIGJlICIgKyBfYnYgKyAiLiBUaHJldyBleGNlcHRpb24gIiArIGV4Y2VwdGlvbik7Ci0gICAg
ZWxzZSBpZiAoaXNSZXN1bHRDb3JyZWN0KF9hdiwgX2J2KSkgewotICAgICAgICBpZiAoIXF1aWV0
KSB7Ci0gICAgICAgICAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyAiICsgX2IpOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIGlmICh0eXBlb2YoX2F2KSA9PSB0eXBlb2YoX2J2KSkKLSAgICAgICAgdGVz
dEZhaWxlZChfYSArICIgc2hvdWxkIGJlICIgKyBfYnYgKyAiLiBXYXMgIiArIHN0cmluZ2lmeShf
YXYpICsgIi4iKTsKLSAgICBlbHNlCi0gICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBi
ZSAiICsgX2J2ICsgIiAob2YgdHlwZSAiICsgdHlwZW9mIF9idiArICIpLiBXYXMgIiArIF9hdiAr
ICIgKG9mIHR5cGUgIiArIHR5cGVvZiBfYXYgKyAiKS4iKTsKLX0KLQotZnVuY3Rpb24gc2hvdWxk
Tm90QmUoX2EsIF9iLCBxdWlldCkKLXsKLSAgICBpZiAodHlwZW9mIF9hICE9ICJzdHJpbmciIHx8
IHR5cGVvZiBfYiAhPSAic3RyaW5nIikKLSAgICAgICAgZGVidWcoIldBUk46IHNob3VsZE5vdEJl
KCkgZXhwZWN0cyBzdHJpbmcgYXJndW1lbnRzIik7Ci0gICAgdmFyIGV4Y2VwdGlvbjsKLSAgICB2
YXIgX2F2OwotICAgIHRyeSB7Ci0gICAgICAgIF9hdiA9IGV2YWwoX2EpOwotICAgIH0gY2F0Y2gg
KGUpIHsKLSAgICAgICAgZXhjZXB0aW9uID0gZTsKLSAgICB9Ci0gICAgdmFyIF9idiA9IGV2YWwo
X2IpOwotCi0gICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgdGVzdEZhaWxlZChfYSArICIgc2hv
dWxkIG5vdCBiZSAiICsgX2J2ICsgIi4gVGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24pOwot
ICAgIGVsc2UgaWYgKCFpc1Jlc3VsdENvcnJlY3QoX2F2LCBfYnYpKSB7Ci0gICAgICAgIGlmICgh
cXVpZXQpIHsKLSAgICAgICAgICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzIG5vdCAiICsgX2IpOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBu
b3QgYmUgIiArIF9idiArICIuIik7Ci19Ci0KLWZ1bmN0aW9uIHNob3VsZEJlVHJ1ZShfYSkgeyBz
aG91bGRCZShfYSwgInRydWUiKTsgfQotZnVuY3Rpb24gc2hvdWxkQmVGYWxzZShfYSkgeyBzaG91
bGRCZShfYSwgImZhbHNlIik7IH0KLWZ1bmN0aW9uIHNob3VsZEJlTmFOKF9hKSB7IHNob3VsZEJl
KF9hLCAiTmFOIik7IH0KLWZ1bmN0aW9uIHNob3VsZEJlTnVsbChfYSkgeyBzaG91bGRCZShfYSwg
Im51bGwiKTsgfQotCi1mdW5jdGlvbiBzaG91bGRCZUVxdWFsVG9TdHJpbmcoYSwgYikKLXsKLSAg
dmFyIHVuZXZhbGVkU3RyaW5nID0gJyInICsgYi5yZXBsYWNlKC8iL2csICJcIiIpICsgJyInOwot
ICBzaG91bGRCZShhLCB1bmV2YWxlZFN0cmluZyk7Ci19Ci0KLWZ1bmN0aW9uIHNob3VsZEV2YWx1
YXRlVG8oYWN0dWFsLCBleHBlY3RlZCkgewotICAvLyBBIGdlbmVyYWwtcHVycG9zZSBjb21wYXJh
dG9yLiAgJ2FjdHVhbCcgc2hvdWxkIGJlIGEgc3RyaW5nIHRvIGJlCi0gIC8vIGV2YWx1YXRlZCwg
YXMgZm9yIHNob3VsZEJlKCkuICdleHBlY3RlZCcgbWF5IGJlIGFueSB0eXBlIGFuZCB3aWxsIGJl
Ci0gIC8vIHVzZWQgd2l0aG91dCBiZWluZyBldmFsJ2VkLgotICBpZiAoZXhwZWN0ZWQgPT0gbnVs
bCkgewotICAgIC8vIERvIHRoaXMgYmVmb3JlIHRoZSBvYmplY3QgdGVzdCwgc2luY2UgbnVsbCBp
cyBvZiB0eXBlICdvYmplY3QnLgotICAgIHNob3VsZEJlTnVsbChhY3R1YWwpOwotICB9IGVsc2Ug
aWYgKHR5cGVvZiBleHBlY3RlZCA9PSAidW5kZWZpbmVkIikgewotICAgIHNob3VsZEJlVW5kZWZp
bmVkKGFjdHVhbCk7Ci0gIH0gZWxzZSBpZiAodHlwZW9mIGV4cGVjdGVkID09ICJmdW5jdGlvbiIp
IHsKLSAgICAvLyBBbGwgdGhpcyBmdXNzIGlzIHRvIGF2b2lkIHRoZSBzdHJpbmctYXJnIHdhcm5p
bmcgZnJvbSBzaG91bGRCZSgpLgotICAgIHRyeSB7Ci0gICAgICB2YXIgYWN0dWFsVmFsdWUgPSBl
dmFsKGFjdHVhbCk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgdGVzdEZhaWxlZCgiRXZhbHVh
dGluZyAiICsgYWN0dWFsICsgIjogVGhyZXcgZXhjZXB0aW9uICIgKyBlKTsKLSAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgc2hvdWxkQmUoIiciICsgYWN0dWFsVmFsdWUudG9TdHJpbmcoKS5yZXBs
YWNlKC9cbi9nLCAiIikgKyAiJyIsCi0gICAgICAgICAgICAgIiciICsgZXhwZWN0ZWQudG9TdHJp
bmcoKS5yZXBsYWNlKC9cbi9nLCAiIikgKyAiJyIpOwotICB9IGVsc2UgaWYgKHR5cGVvZiBleHBl
Y3RlZCA9PSAib2JqZWN0IikgewotICAgIHNob3VsZEJlVHJ1ZShhY3R1YWwgKyAiID09ICciICsg
ZXhwZWN0ZWQgKyAiJyIpOwotICB9IGVsc2UgaWYgKHR5cGVvZiBleHBlY3RlZCA9PSAic3RyaW5n
IikgewotICAgIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpOwotICB9IGVsc2UgaWYgKHR5cGVv
ZiBleHBlY3RlZCA9PSAiYm9vbGVhbiIpIHsKLSAgICBzaG91bGRCZSgidHlwZW9mICIgKyBhY3R1
YWwsICInYm9vbGVhbiciKTsKLSAgICBpZiAoZXhwZWN0ZWQpCi0gICAgICBzaG91bGRCZVRydWUo
YWN0dWFsKTsKLSAgICBlbHNlCi0gICAgICBzaG91bGRCZUZhbHNlKGFjdHVhbCk7Ci0gIH0gZWxz
ZSBpZiAodHlwZW9mIGV4cGVjdGVkID09ICJudW1iZXIiKSB7Ci0gICAgc2hvdWxkQmUoYWN0dWFs
LCBzdHJpbmdpZnkoZXhwZWN0ZWQpKTsKLSAgfSBlbHNlIHsKLSAgICBkZWJ1ZyhleHBlY3RlZCAr
ICIgaXMgdW5rbm93biB0eXBlICIgKyB0eXBlb2YgZXhwZWN0ZWQpOwotICAgIHNob3VsZEJlVHJ1
ZShhY3R1YWwsICInIiAgK2V4cGVjdGVkLnRvU3RyaW5nKCkgKyAiJyIpOwotICB9Ci19Ci0KLWZ1
bmN0aW9uIHNob3VsZEJlTm9uWmVybyhfYSkKLXsKLSAgdmFyIGV4Y2VwdGlvbjsKLSAgdmFyIF9h
djsKLSAgdHJ5IHsKLSAgICAgX2F2ID0gZXZhbChfYSk7Ci0gIH0gY2F0Y2ggKGUpIHsKLSAgICAg
ZXhjZXB0aW9uID0gZTsKLSAgfQotCi0gIGlmIChleGNlcHRpb24pCi0gICAgdGVzdEZhaWxlZChf
YSArICIgc2hvdWxkIGJlIG5vbi16ZXJvLiBUaHJldyBleGNlcHRpb24gIiArIGV4Y2VwdGlvbik7
Ci0gIGVsc2UgaWYgKF9hdiAhPSAwKQotICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzIG5vbi16ZXJv
LiIpOwotICBlbHNlCi0gICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlIG5vbi16ZXJvLiBX
YXMgIiArIF9hdik7Ci19Ci0KLWZ1bmN0aW9uIHNob3VsZEJlTm9uTnVsbChfYSkKLXsKLSAgdmFy
IGV4Y2VwdGlvbjsKLSAgdmFyIF9hdjsKLSAgdHJ5IHsKLSAgICAgX2F2ID0gZXZhbChfYSk7Ci0g
IH0gY2F0Y2ggKGUpIHsKLSAgICAgZXhjZXB0aW9uID0gZTsKLSAgfQotCi0gIGlmIChleGNlcHRp
b24pCi0gICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlIG5vbi1udWxsLiBUaHJldyBleGNl
cHRpb24gIiArIGV4Y2VwdGlvbik7Ci0gIGVsc2UgaWYgKF9hdiAhPSBudWxsKQotICAgIHRlc3RQ
YXNzZWQoX2EgKyAiIGlzIG5vbi1udWxsLiIpOwotICBlbHNlCi0gICAgdGVzdEZhaWxlZChfYSAr
ICIgc2hvdWxkIGJlIG5vbi1udWxsLiBXYXMgIiArIF9hdik7Ci19Ci0KLWZ1bmN0aW9uIHNob3Vs
ZEJlVW5kZWZpbmVkKF9hKQotewotICB2YXIgZXhjZXB0aW9uOwotICB2YXIgX2F2OwotICB0cnkg
ewotICAgICBfYXYgPSBldmFsKF9hKTsKLSAgfSBjYXRjaCAoZSkgewotICAgICBleGNlcHRpb24g
PSBlOwotICB9Ci0KLSAgaWYgKGV4Y2VwdGlvbikKLSAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91
bGQgYmUgdW5kZWZpbmVkLiBUaHJldyBleGNlcHRpb24gIiArIGV4Y2VwdGlvbik7Ci0gIGVsc2Ug
aWYgKHR5cGVvZiBfYXYgPT0gInVuZGVmaW5lZCIpCi0gICAgdGVzdFBhc3NlZChfYSArICIgaXMg
dW5kZWZpbmVkLiIpOwotICBlbHNlCi0gICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlIHVu
ZGVmaW5lZC4gV2FzICIgKyBfYXYpOwotfQotCi1mdW5jdGlvbiBzaG91bGRCZURlZmluZWQoX2Ep
Ci17Ci0gIHZhciBleGNlcHRpb247Ci0gIHZhciBfYXY7Ci0gIHRyeSB7Ci0gICAgIF9hdiA9IGV2
YWwoX2EpOwotICB9IGNhdGNoIChlKSB7Ci0gICAgIGV4Y2VwdGlvbiA9IGU7Ci0gIH0KLQotICBp
ZiAoZXhjZXB0aW9uKQotICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSBkZWZpbmVkLiBU
aHJldyBleGNlcHRpb24gIiArIGV4Y2VwdGlvbik7Ci0gIGVsc2UgaWYgKF9hdiAhPT0gdW5kZWZp
bmVkKQotICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzIGRlZmluZWQuIik7Ci0gIGVsc2UKLSAgICB0
ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgZGVmaW5lZC4gV2FzICIgKyBfYXYpOwotfQotCi1m
dW5jdGlvbiBzaG91bGRCZUxlc3NUaGFuT3JFcXVhbChfYSwgX2IpIHsKLSAgICBpZiAodHlwZW9m
IF9hICE9ICJzdHJpbmciIHx8IHR5cGVvZiBfYiAhPSAic3RyaW5nIikKLSAgICAgICAgZGVidWco
IldBUk46IHNob3VsZEJlTGVzc1RoYW5PckVxdWFsIGV4cGVjdHMgc3RyaW5nIGFyZ3VtZW50cyIp
OwotCi0gICAgdmFyIGV4Y2VwdGlvbjsKLSAgICB2YXIgX2F2OwotICAgIHRyeSB7Ci0gICAgICAg
IF9hdiA9IGV2YWwoX2EpOwotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgZXhjZXB0aW9uID0g
ZTsKLSAgICB9Ci0gICAgdmFyIF9idiA9IGV2YWwoX2IpOwotCi0gICAgaWYgKGV4Y2VwdGlvbikK
LSAgICAgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlIDw9ICIgKyBfYiArICIuIFRocmV3
IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9uKTsKLSAgICBlbHNlIGlmICh0eXBlb2YgX2F2ID09ICJ1
bmRlZmluZWQiIHx8IF9hdiA+IF9idikKLSAgICAgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxk
IGJlID49ICIgKyBfYiArICIuIFdhcyAiICsgX2F2ICsgIiAob2YgdHlwZSAiICsgdHlwZW9mIF9h
diArICIpLiIpOwotICAgIGVsc2UKLSAgICAgICAgdGVzdFBhc3NlZChfYSArICIgaXMgPD0gIiAr
IF9iKTsKLX0KLQotZnVuY3Rpb24gc2hvdWxkQmVHcmVhdGVyVGhhbk9yRXF1YWwoX2EsIF9iKSB7
Ci0gICAgaWYgKHR5cGVvZiBfYSAhPSAic3RyaW5nIiB8fCB0eXBlb2YgX2IgIT0gInN0cmluZyIp
Ci0gICAgICAgIGRlYnVnKCJXQVJOOiBzaG91bGRCZUdyZWF0ZXJUaGFuT3JFcXVhbCBleHBlY3Rz
IHN0cmluZyBhcmd1bWVudHMiKTsKLQotICAgIHZhciBleGNlcHRpb247Ci0gICAgdmFyIF9hdjsK
LSAgICB0cnkgewotICAgICAgICBfYXYgPSBldmFsKF9hKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0g
ICAgICAgIGV4Y2VwdGlvbiA9IGU7Ci0gICAgfQotICAgIHZhciBfYnYgPSBldmFsKF9iKTsKLQot
ICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSA+
PSAiICsgX2IgKyAiLiBUaHJldyBleGNlcHRpb24gIiArIGV4Y2VwdGlvbik7Ci0gICAgZWxzZSBp
ZiAodHlwZW9mIF9hdiA9PSAidW5kZWZpbmVkIiB8fCBfYXYgPCBfYnYpCi0gICAgICAgIHRlc3RG
YWlsZWQoX2EgKyAiIHNob3VsZCBiZSA+PSAiICsgX2IgKyAiLiBXYXMgIiArIF9hdiArICIgKG9m
IHR5cGUgIiArIHR5cGVvZiBfYXYgKyAiKS4iKTsKLSAgICBlbHNlCi0gICAgICAgIHRlc3RQYXNz
ZWQoX2EgKyAiIGlzID49ICIgKyBfYik7Ci19Ci0KLWZ1bmN0aW9uIGV4cGVjdFRydWUodiwgbXNn
KSB7Ci0gIGlmICh2KSB7Ci0gICAgdGVzdFBhc3NlZChtc2cpOwotICB9IGVsc2UgewotICAgIHRl
c3RGYWlsZWQobXNnKTsKLSAgfQotfQotCi1mdW5jdGlvbiBtYXhBcnJheURpZmYoYSwgYikgewot
ICAgIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBh
IGFuZCBiIGhhdmUgZGlmZmVyZW50IGxlbmd0aHM6ICR7YS5sZW5ndGh9IHZzICR7Yi5sZW5ndGh9
YCk7Ci0KLSAgICBsZXQgZGlmZiA9IDA7Ci0gICAgZm9yIChjb25zdCBpIGluIGEpIHsKLSAgICAg
ICAgZGlmZiA9IE1hdGgubWF4KGRpZmYsIE1hdGguYWJzKGFbaV0gLSBiW2ldKSk7Ci0gICAgfQot
ICAgIHJldHVybiBkaWZmOwotfQotCi1mdW5jdGlvbiBleHBlY3RBcnJheSh3YXMsIGV4cGVjdGVk
LCBtYXhEaWZmPTApIHsKLSAgICBjb25zdCBkaWZmID0gbWF4QXJyYXlEaWZmKGV4cGVjdGVkLCB3
YXMpOwotICAgIGxldCBzdHIgPSBgRXhwZWN0ZWQgWyR7ZXhwZWN0ZWQudG9TdHJpbmcoKX1dYDsK
LSAgICBsZXQgZm4gPSB0ZXN0UGFzc2VkOwotICAgIGlmIChtYXhEaWZmKSB7Ci0gICAgICAgIHN0
ciArPSAnICsvLSAnICsgbWF4RGlmZjsKLSAgICB9Ci0gICAgaWYgKGRpZmYgPiBtYXhEaWZmKSB7
Ci0gICAgICAgIGZuID0gdGVzdEZhaWxlZDsKLSAgICAgICAgc3RyICs9IGAsIHdhcyBbJHt3YXMu
dG9TdHJpbmcoKX1dYDsKLSAgICB9Ci0gICAgZm4oc3RyKTsKLX0KLQotZnVuY3Rpb24gc2hvdWxk
VGhyb3coX2EsIF9lKQotewotICB2YXIgZXhjZXB0aW9uOwotICB2YXIgX2F2OwotICB0cnkgewot
ICAgICBfYXYgPSBldmFsKF9hKTsKLSAgfSBjYXRjaCAoZSkgewotICAgICBleGNlcHRpb24gPSBl
OwotICB9Ci0KLSAgdmFyIF9ldjsKLSAgaWYgKF9lKQotICAgICAgX2V2ID0gIGV2YWwoX2UpOwot
Ci0gIGlmIChleGNlcHRpb24pIHsKLSAgICBpZiAodHlwZW9mIF9lID09ICJ1bmRlZmluZWQiIHx8
IGV4Y2VwdGlvbiA9PSBfZXYpCi0gICAgICB0ZXN0UGFzc2VkKF9hICsgIiB0aHJldyBleGNlcHRp
b24gIiArIGV4Y2VwdGlvbiArICIuIik7Ci0gICAgZWxzZQotICAgICAgdGVzdEZhaWxlZChfYSAr
ICIgc2hvdWxkIHRocm93ICIgKyAodHlwZW9mIF9lID09ICJ1bmRlZmluZWQiID8gImFuIGV4Y2Vw
dGlvbiIgOiBfZXYpICsgIi4gVGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24gKyAiLiIpOwot
ICB9IGVsc2UgaWYgKHR5cGVvZiBfYXYgPT0gInVuZGVmaW5lZCIpCi0gICAgdGVzdEZhaWxlZChf
YSArICIgc2hvdWxkIHRocm93ICIgKyAodHlwZW9mIF9lID09ICJ1bmRlZmluZWQiID8gImFuIGV4
Y2VwdGlvbiIgOiBfZXYpICsgIi4gV2FzIHVuZGVmaW5lZC4iKTsKLSAgZWxzZQotICAgIHRlc3RG
YWlsZWQoX2EgKyAiIHNob3VsZCB0aHJvdyAiICsgKHR5cGVvZiBfZSA9PSAidW5kZWZpbmVkIiA/
ICJhbiBleGNlcHRpb24iIDogX2V2KSArICIuIFdhcyAiICsgX2F2ICsgIi4iKTsKLX0KLQotZnVu
Y3Rpb24gc2hvdWxkTm90VGhyb3coZXZhbFN0ciwgZGVzYykgewotICBkZXNjID0gZGVzYyB8fCBg
XGAke2V2YWxTdHJ9XGBgOwotICB0cnkgewotICAgIGV2YWwoZXZhbFN0cik7Ci0gICAgdGVzdFBh
c3NlZChgJHtkZXNjfSBzaG91bGQgbm90IHRocm93LmApOwotICB9IGNhdGNoIChlKSB7Ci0gICAg
dGVzdEZhaWxlZChgJHtkZXNjfSBzaG91bGQgbm90IHRocm93LCBidXQgdGhyZXcgZXhjZXB0aW9u
ICR7ZX0uYCk7Ci0gIH0KLX0KLQotCi1mdW5jdGlvbiBzaG91bGRCZVR5cGUoX2EsIF90eXBlKSB7
Ci0gICAgdmFyIGV4Y2VwdGlvbjsKLSAgICB2YXIgX2F2OwotICAgIHRyeSB7Ci0gICAgICAgIF9h
diA9IGV2YWwoX2EpOwotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgZXhjZXB0aW9uID0gZTsK
LSAgICB9Ci0KLSAgICB2YXIgX3R5cGV2ID0gZXZhbChfdHlwZSk7Ci0KLSAgICBpZihfdHlwZXYg
PT09IE51bWJlcil7Ci0gICAgICAgIGlmKF9hdiBpbnN0YW5jZW9mIE51bWJlcil7Ci0gICAgICAg
ICAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyBhbiBpbnN0YW5jZSBvZiBOdW1iZXIiKTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlIGlmKHR5cGVvZihfYXYpID09PSAnbnVtYmVyJyl7Ci0gICAgICAg
ICAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyBhbiBpbnN0YW5jZSBvZiBOdW1iZXIiKTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlewotICAgICAgICAgICAgdGVzdEZhaWxlZChfYSArICIgaXMgbm90
IGFuIGluc3RhbmNlIG9mIE51bWJlciIpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYg
KF9hdiBpbnN0YW5jZW9mIF90eXBldikgewotICAgICAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyBh
biBpbnN0YW5jZSBvZiAiICsgX3R5cGUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRlc3RGYWls
ZWQoX2EgKyAiIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiAiICsgX3R5cGUpOwotICAgIH0KLX0KLQot
LyoqCi0gKiBTaG93cyBhIG1lc3NhZ2UgaW4gY2FzZSBleHByZXNzaW9uIHRlc3QgZmFpbHMuCi0g
KiBAcGFyYW0ge2Jvb2xlYW59IGV4cAotICogQHBhcmFtIHtzdHJhaW5nfSBtZXNzYWdlCi0gKi8K
LWZ1bmN0aW9uIGNoZWNrTWVzc2FnZShleHAsIG1lc3NhZ2UpIHsKLSAgICBpZiAoICFleHAgKQot
ICAgICAgICBfYWRkU3BhbignPHNwYW4+PHNwYW4gY2xhc3M9Indhcm4iPldBUk5JTkc8L3NwYW4+
ICcgKyBlc2NhcGVIVE1MKF9jdXJyZW50VGVzdE5hbWUpICsgIjogIiArIGVzY2FwZUhUTUwobWVz
c2FnZSkgKyAnPC9zcGFuPicpOwotfQotCi1mdW5jdGlvbiBhc3NlcnRNc2coYXNzZXJ0aW9uLCBt
c2cpIHsKLSAgICBpZiAoYXNzZXJ0aW9uKSB7Ci0gICAgICAgIHRlc3RQYXNzZWQobXNnKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICB0ZXN0RmFpbGVkKG1zZyk7Ci0gICAgfQotfQotCi0vKioKLSAq
IFZhcmlhdGlvbiBvZiB0aGUgYXNzZXJ0TXNnIGZ1bmN0aW9uLCB3aXRoIHRoZSBvcHRpb24gdG8g
bm90IHNob3cgKGFuZCB0aHVzIG5vdCBjb3VudCkgdGhlIHRlc3QncyBwYXNzIHJlc3VsdCwKLSAq
IGFuZCB0aHJvdyBvciBub3QgYSBUZXN0RmFpbGVkRXhjZXB0aW9uIGluIGNhc2Ugb2YgZmFpbHVy
ZS4KLSAqIEBwYXJhbSB7Ym9vbGVhbn0gYXNzZXJ0aW9uIElmIHRoaXMgaXMgdHJ1ZSwgbWVhbnMg
c3VjY2VzcywgZWxzZSBmYWlsdXJlLgotICogQHBhcmFtIHs/c3RyaW5nfSBtc2cgVGhlIG1lc3Nh
Z2UgdG8gYmUgc2hvd24gaW4gdGhlIHJlc3VsdC4KLSAqIEBwYXJhbSB7Ym9vbGVhbn0gdmVyYm9z
ZSBJbiBjYXNlIG9mIHN1Y2Nlc3MsIGRldGVybWluZXMgaWYgdGhlIHRlc3Qgd2lsbCBzaG93IGl0
J3MgcmVzdWx0IGFuZCBjb3VudCBpbiB0aGUgcmVzdWx0cy4KLSAqIEBwYXJhbSB7Ym9vbGVhbn0g
ZXh0aHJvdyBJbiBjYXNlIG9mIGZhaWx1cmUsIGRldGVybWluZXMgaWYgdGhlIGZ1bmN0aW9uIHdp
bGwgdGhyb3cgYSBUZXN0RmFpbGVkRXhjZXB0aW9uLgotICovCi1mdW5jdGlvbiBhc3NlcnRNc2dP
cHRpb25zKGFzc2VydGlvbiwgbXNnLCB2ZXJib3NlLCBleHRocm93KSB7Ci0gICAgaWYgKGFzc2Vy
dGlvbikgewotICAgICAgICB0ZXN0UGFzc2VkT3B0aW9ucyhtc2csIHZlcmJvc2UpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHRlc3RGYWlsZWRPcHRpb25zKG1zZywgZXh0aHJvdyk7Ci0gICAgfQot
fQotCi0KLWZ1bmN0aW9uIHdlYmdsSGFybmVzc0NvbGxlY3RHYXJiYWdlKCkgewotICAgIGlmICh3
aW5kb3cuR0NDb250cm9sbGVyKSB7Ci0gICAgICAgIHdpbmRvdy5HQ0NvbnRyb2xsZXIuY29sbGVj
dCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHdpbmRvdy5vcGVyYSAmJiB3
aW5kb3cub3BlcmEuY29sbGVjdCkgewotICAgICAgICB3aW5kb3cub3BlcmEuY29sbGVjdCgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgICAgd2luZG93LlF1ZXJ5
SW50ZXJmYWNlKENvbXBvbmVudHMuaW50ZXJmYWNlcy5uc0lJbnRlcmZhY2VSZXF1ZXN0b3IpCi0g
ICAgICAgICAgICAgIC5nZXRJbnRlcmZhY2UoQ29tcG9uZW50cy5pbnRlcmZhY2VzLm5zSURPTVdp
bmRvd1V0aWxzKQotICAgICAgICAgICAgICAuZ2FyYmFnZUNvbGxlY3QoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0gY2F0Y2goZSkge30KLQotICAgIGlmICh3aW5kb3cuZ2MpIHsKLSAgICAgICAg
d2luZG93LmdjKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAod2luZG93LkNv
bGxlY3RHYXJiYWdlKSB7Ci0gICAgICAgIENvbGxlY3RHYXJiYWdlKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBXZWJLaXQncyBNaW5pQnJvd3Nlci4KLSAgICBpZiAod2luZG93
LiR2bSkgewotICAgICAgICB3aW5kb3cuJHZtLmdjKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBmdW5jdGlvbiBnY1JlYyhuKSB7Ci0gICAgICAgIGlmIChuIDwgMSkKLSAgICAgICAg
ICAgIHJldHVybiB7fTsKLSAgICAgICAgdmFyIHRlbXAgPSB7aTogImFiIiArIGkgKyAoaSAvIDEw
MDAwMCl9OwotICAgICAgICB0ZW1wICs9ICJmb28iOwotICAgICAgICBnY1JlYyhuLTEpOwotICAg
IH0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7IGkrKykKLSAgICAgICAgZ2NSZWMoMTAp
OwotfQotCi1mdW5jdGlvbiBmaW5pc2hUZXN0KCkgewotICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0
cnVlOwotICB2YXIgZXBpbG9ndWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsK
LSAgdmFyIGJhc2VQYXRoID0gIiI7Ci0gIHZhciBleHBlY3RlZEJhc2UgPSAianMtdGVzdC1wcmUu
anMiOwotICB2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3Jp
cHQnKTsKLSAgZm9yICh2YXIgc2NyaXB0LCBpID0gMDsgc2NyaXB0ID0gc2NyaXB0c1tpXTsgaSsr
KSB7Ci0gICAgdmFyIHNyYyA9IHNjcmlwdC5zcmM7Ci0gICAgdmFyIGwgPSBzcmMubGVuZ3RoOwot
ICAgIGlmIChzcmMuc3Vic3RyKGwgLSBleHBlY3RlZEJhc2UubGVuZ3RoKSA9PSBleHBlY3RlZEJh
c2UpIHsKLSAgICAgIGJhc2VQYXRoID0gc3JjLnN1YnN0cigwLCBsIC0gZXhwZWN0ZWRCYXNlLmxl
bmd0aCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgZXBpbG9ndWUuc3JjID0gYmFzZVBh
dGggKyAianMtdGVzdC1wb3N0LmpzIjsKLSAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlcGls
b2d1ZSk7Ci19Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvcmVzb3Vy
Y2VzL3dlYmdsX3Rlc3RfZmlsZXMvanMvd2ViZ2wtdGVzdC11dGlscy5qcyBiL0xheW91dFRlc3Rz
L3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvanMvd2ViZ2wtdGVzdC11
dGlscy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM5MjgzOGZiODkzN2M3ZDEx
N2U4ZWIyYzdhMTg2MjVmZWM3ZGZjYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90
ZXN0X2ZpbGVzL2pzL3dlYmdsLXRlc3QtdXRpbHMuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzNTUw
ICswLDAgQEAKLS8qCi1Db3B5cmlnaHQgKGMpIDIwMTkgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgot
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLWZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlLgotKi8KLXZhciBX
ZWJHTFRlc3RVdGlscyA9IChmdW5jdGlvbigpIHsKLSJ1c2Ugc3RyaWN0IjsKLQotLyoqCi0gKiBX
cmFwcGVkIGxvZ2dpbmcgZnVuY3Rpb24uCi0gKiBAcGFyYW0ge3N0cmluZ30gbXNnIFRoZSBtZXNz
YWdlIHRvIGxvZy4KLSAqLwotdmFyIGxvZyA9IGZ1bmN0aW9uKG1zZykgewotICBidWZmZXJlZExv
Z1RvQ29uc29sZShtc2cpOwotfTsKLQotLyoqCi0gKiBXcmFwcGVkIGxvZ2dpbmcgZnVuY3Rpb24u
Ci0gKiBAcGFyYW0ge3N0cmluZ30gbXNnIFRoZSBtZXNzYWdlIHRvIGxvZy4KLSAqLwotdmFyIGVy
cm9yID0gZnVuY3Rpb24obXNnKSB7Ci0gIC8vIEZvciB0aGUgdGltZSBiZWluZywgZGl2ZXJ0aW5n
IHRoaXMgdG8gd2luZG93LmNvbnNvbGUubG9nIHJhdGhlcgotICAvLyB0aGFuIHdpbmRvdy5jb25z
b2xlLmVycm9yLiBJZiBhbnlvbmUgY2FyZXMgZW5vdWdoIHRoZXkgY2FuCi0gIC8vIGdlbmVyYWxp
emUgdGhlIG1lY2hhbmlzbSBpbiBqcy10ZXN0LXByZS5qcy4KLSAgbG9nKG1zZyk7Ci19OwotCi0v
KioKLSAqIFR1cm4gb2ZmIGFsbCBsb2dnaW5nLgotICovCi12YXIgbG9nZ2luZ09mZiA9IGZ1bmN0
aW9uKCkgewotICBsb2cgPSBmdW5jdGlvbigpIHt9OwotICBlcnJvciA9IGZ1bmN0aW9uKCkge307
Ci19OwotCi1jb25zdCBFTlVNX05BTUVfUkVHRVggPSBSZWdFeHAoJ1tBLVpdW0EtWjAtOV9dKicp
OwotY29uc3QgRU5VTV9OQU1FX0JZX1ZBTFVFID0ge307Ci1jb25zdCBFTlVNX05BTUVfUFJPVE9U
WVBFUyA9IG5ldyBNYXAoKTsKLQotLyoqCi0gKiBDb252ZXJ0cyBhIFdlYkdMIGVudW0gdG8gYSBz
dHJpbmcuCi0gKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJl
bmRlcmluZ0NvbnRleHQgdG8gdXNlLgotICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFRoZSBlbnVt
IHZhbHVlLgotICogQHJldHVybiB7c3RyaW5nfSBUaGUgZW51bSBhcyBhIHN0cmluZy4KLSAqLwot
dmFyIGdsRW51bVRvU3RyaW5nID0gZnVuY3Rpb24oZ2xPckV4dCwgdmFsdWUpIHsKLSAgaWYgKHZh
bHVlID09PSB1bmRlZmluZWQpCi0gICAgdGhyb3cgbmV3IEVycm9yKCdnbEVudW1Ub1N0cmluZzog
YHZhbHVlYCBtdXN0IG5vdCBiZSB1bmRlZmluZWQnKTsKLQotICBjb25zdCBwcm90byA9IGdsT3JF
eHQuX19wcm90b19fOwotICBpZiAoIUVOVU1fTkFNRV9QUk9UT1RZUEVTLmhhcyhwcm90bykpIHsK
LSAgICBFTlVNX05BTUVfUFJPVE9UWVBFUy5zZXQocHJvdG8sIHRydWUpOwotCi0gICAgZm9yIChj
b25zdCBrIGluIHByb3RvKSB7Ci0gICAgICBpZiAoIUVOVU1fTkFNRV9SRUdFWC50ZXN0KGspKSBj
b250aW51ZTsKLQotICAgICAgY29uc3QgdiA9IGdsT3JFeHRba107Ci0gICAgICBpZiAoRU5VTV9O
QU1FX0JZX1ZBTFVFW3ZdID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgRU5VTV9OQU1FX0JZX1ZB
TFVFW3ZdID0gazsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEVOVU1fTkFNRV9CWV9WQUxVRVt2
XSArPSAnLycgKyBrOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGNvbnN0IGtleSA9IEVOVU1f
TkFNRV9CWV9WQUxVRVt2YWx1ZV07Ci0gIGlmIChrZXkgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGtl
eTsKLQotICByZXR1cm4gIjB4IiArIE51bWJlcih2YWx1ZSkudG9TdHJpbmcoMTYpOwotfTsKLQot
dmFyIGxhc3RFcnJvciA9ICIiOwotCi0vKioKLSAqIFJldHVybnMgdGhlIGxhc3QgY29tcGlsZXIv
bGlua2VyIGVycm9yLgotICogQHJldHVybiB7c3RyaW5nfSBUaGUgbGFzdCBjb21waWxlci9saW5r
ZXIgZXJyb3IuCi0gKi8KLXZhciBnZXRMYXN0RXJyb3IgPSBmdW5jdGlvbigpIHsKLSAgcmV0dXJu
IGxhc3RFcnJvcjsKLX07Ci0KLS8qKgotICogV2hldGhlciBhIGhheXN0YWNrIGVuZHMgd2l0aCBh
IG5lZWRsZS4KLSAqIEBwYXJhbSB7c3RyaW5nfSBoYXlzdGFjayBTdHJpbmcgdG8gc2VhcmNoCi0g
KiBAcGFyYW0ge3N0cmluZ30gbmVlZGxlIFN0cmluZyB0byBzZWFyY2ggZm9yLgotICogQHBhcmFt
IHtib29sZWFufSBUcnVlIGlmIGhheXN0YWNrIGVuZHMgd2l0aCBuZWVkbGUuCi0gKi8KLXZhciBl
bmRzV2l0aCA9IGZ1bmN0aW9uKGhheXN0YWNrLCBuZWVkbGUpIHsKLSAgcmV0dXJuIGhheXN0YWNr
LnN1YnN0cihoYXlzdGFjay5sZW5ndGggLSBuZWVkbGUubGVuZ3RoKSA9PT0gbmVlZGxlOwotfTsK
LQotLyoqCi0gKiBXaGV0aGVyIGEgaGF5c3RhY2sgc3RhcnRzIHdpdGggYSBuZWVkbGUuCi0gKiBA
cGFyYW0ge3N0cmluZ30gaGF5c3RhY2sgU3RyaW5nIHRvIHNlYXJjaAotICogQHBhcmFtIHtzdHJp
bmd9IG5lZWRsZSBTdHJpbmcgdG8gc2VhcmNoIGZvci4KLSAqIEBwYXJhbSB7Ym9vbGVhbn0gVHJ1
ZSBpZiBoYXlzdGFjayBzdGFydHMgd2l0aCBuZWVkbGUuCi0gKi8KLXZhciBzdGFydHNXaXRoID0g
ZnVuY3Rpb24oaGF5c3RhY2ssIG5lZWRsZSkgewotICByZXR1cm4gaGF5c3RhY2suc3Vic3RyKDAs
IG5lZWRsZS5sZW5ndGgpID09PSBuZWVkbGU7Ci19OwotCi0vKioKLSAqIEEgdmVydGV4IHNoYWRl
ciBmb3IgYSBzaW5nbGUgdGV4dHVyZS4KLSAqIEB0eXBlIHtzdHJpbmd9Ci0gKi8KLXZhciBzaW1w
bGVUZXh0dXJlVmVydGV4U2hhZGVyID0gWwotICAnYXR0cmlidXRlIHZlYzQgdlBvc2l0aW9uOycs
Ci0gICdhdHRyaWJ1dGUgdmVjMiB0ZXhDb29yZDA7JywKLSAgJ3ZhcnlpbmcgdmVjMiB0ZXhDb29y
ZDsnLAotICAndm9pZCBtYWluKCkgeycsCi0gICcgICAgZ2xfUG9zaXRpb24gPSB2UG9zaXRpb247
JywKLSAgJyAgICB0ZXhDb29yZCA9IHRleENvb3JkMDsnLAotICAnfSddLmpvaW4oJ1xuJyk7Ci0K
LS8qKgotICogQSB2ZXJ0ZXggc2hhZGVyIGZvciBhIHNpbmdsZSB0ZXh0dXJlLgotICogQHR5cGUg
e3N0cmluZ30KLSAqLwotdmFyIHNpbXBsZVRleHR1cmVWZXJ0ZXhTaGFkZXJFU1NMMzAwID0gWwot
ICAnI3ZlcnNpb24gMzAwIGVzJywKLSAgJ2xheW91dChsb2NhdGlvbj0wKSBpbiB2ZWM0IHZQb3Np
dGlvbjsnLAotICAnbGF5b3V0KGxvY2F0aW9uPTEpIGluIHZlYzIgdGV4Q29vcmQwOycsCi0gICdv
dXQgdmVjMiB0ZXhDb29yZDsnLAotICAndm9pZCBtYWluKCkgeycsCi0gICcgICAgZ2xfUG9zaXRp
b24gPSB2UG9zaXRpb247JywKLSAgJyAgICB0ZXhDb29yZCA9IHRleENvb3JkMDsnLAotICAnfSdd
LmpvaW4oJ1xuJyk7Ci0KLS8qKgotICogQSBmcmFnbWVudCBzaGFkZXIgZm9yIGEgc2luZ2xlIHRl
eHR1cmUuCi0gKiBAdHlwZSB7c3RyaW5nfQotICovCi12YXIgc2ltcGxlVGV4dHVyZUZyYWdtZW50
U2hhZGVyID0gWwotICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JywKLSAgJ3VuaWZvcm0gc2Ft
cGxlcjJEIHRleDsnLAotICAndmFyeWluZyB2ZWMyIHRleENvb3JkOycsCi0gICd2b2lkIG1haW4o
KSB7JywKLSAgJyAgICBnbF9GcmFnRGF0YVswXSA9IHRleHR1cmUyRCh0ZXgsIHRleENvb3JkKTsn
LAotICAnfSddLmpvaW4oJ1xuJyk7Ci0KLS8qKgotICogQSBmcmFnbWVudCBzaGFkZXIgZm9yIGEg
c2luZ2xlIHRleHR1cmUuCi0gKiBAdHlwZSB7c3RyaW5nfQotICovCi12YXIgc2ltcGxlVGV4dHVy
ZUZyYWdtZW50U2hhZGVyRVNTTDMwMCA9IFsKLSAgJyN2ZXJzaW9uIDMwMCBlcycsCi0gICdwcmVj
aXNpb24gaGlnaHAgZmxvYXQ7JywKLSAgJ3VuaWZvcm0gaGlnaHAgc2FtcGxlcjJEIHRleDsnLAot
ICAnaW4gdmVjMiB0ZXhDb29yZDsnLAotICAnb3V0IHZlYzQgb3V0X2NvbG9yOycsCi0gICd2b2lk
IG1haW4oKSB7JywKLSAgJyAgICBvdXRfY29sb3IgPSB0ZXh0dXJlKHRleCwgdGV4Q29vcmQpOycs
Ci0gICd9J10uam9pbignXG4nKTsKLQotLyoqCi0gKiBBIGZyYWdtZW50IHNoYWRlciBmb3IgYSBz
aW5nbGUgdGV4dHVyZSB3aXRoIGhpZ2ggcHJlY2lzaW9uLgotICogQHR5cGUge3N0cmluZ30KLSAq
LwotdmFyIHNpbXBsZUhpZ2hQcmVjaXNpb25UZXh0dXJlRnJhZ21lbnRTaGFkZXIgPSBbCi0gICdw
cmVjaXNpb24gaGlnaHAgZmxvYXQ7JywKLSAgJ3VuaWZvcm0gaGlnaHAgc2FtcGxlcjJEIHRleDsn
LAotICAndmFyeWluZyB2ZWMyIHRleENvb3JkOycsCi0gICd2b2lkIG1haW4oKSB7JywKLSAgJyAg
ICBnbF9GcmFnRGF0YVswXSA9IHRleHR1cmUyRCh0ZXgsIHRleENvb3JkKTsnLAotICAnfSddLmpv
aW4oJ1xuJyk7Ci0KLS8qKgotICogQSBmcmFnbWVudCBzaGFkZXIgZm9yIGEgc2luZ2xlIGN1YmUg
bWFwIHRleHR1cmUuCi0gKiBAdHlwZSB7c3RyaW5nfQotICovCi12YXIgc2ltcGxlQ3ViZU1hcFRl
eHR1cmVGcmFnbWVudFNoYWRlciA9IFsKLSAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsCi0g
ICd1bmlmb3JtIHNhbXBsZXJDdWJlIHRleDsnLAotICAndW5pZm9ybSBoaWdocCBpbnQgZmFjZTsn
LAotICAndmFyeWluZyB2ZWMyIHRleENvb3JkOycsCi0gICd2b2lkIG1haW4oKSB7JywKLSAgLy8g
VHJhbnNmb3JtIFswLCAxXSAtPiBbLTEsIDFdCi0gICcgICAgdmVjMiB0ZXhDMiA9ICh0ZXhDb29y
ZCAqIDIuKSAtIDEuOycsCi0gIC8vIFRyYW5zZm9ybSAyZCB0ZXggY29vcmQuIHRvIGVhY2ggZmFj
ZSBvZiBURVhUVVJFX0NVQkVfTUFQIGNvb3JkLgotICAnICAgIHZlYzMgdGV4Q3ViZSA9IHZlYzMo
MC4sIDAuLCAwLik7JywKLSAgJyAgICBpZiAoZmFjZSA9PSAzNDA2OSkgeycsICAgICAgICAgLy8g
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YCi0gICcgICAgICAgIHRleEN1YmUgPSB2ZWMzKDEu
LCAtdGV4QzIueSwgLXRleEMyLngpOycsCi0gICcgICAgfSBlbHNlIGlmIChmYWNlID09IDM0MDcw
KSB7JywgIC8vIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWAotICAnICAgICAgICB0ZXhDdWJl
ID0gdmVjMygtMS4sIC10ZXhDMi55LCB0ZXhDMi54KTsnLAotICAnICAgIH0gZWxzZSBpZiAoZmFj
ZSA9PSAzNDA3MSkgeycsICAvLyBURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1kKLSAgJyAgICAg
ICAgdGV4Q3ViZSA9IHZlYzModGV4QzIueCwgMS4sIHRleEMyLnkpOycsCi0gICcgICAgfSBlbHNl
IGlmIChmYWNlID09IDM0MDcyKSB7JywgIC8vIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWQot
ICAnICAgICAgICB0ZXhDdWJlID0gdmVjMyh0ZXhDMi54LCAtMS4sIC10ZXhDMi55KTsnLAotICAn
ICAgIH0gZWxzZSBpZiAoZmFjZSA9PSAzNDA3MykgeycsICAvLyBURVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1oKLSAgJyAgICAgICAgdGV4Q3ViZSA9IHZlYzModGV4QzIueCwgLXRleEMyLnksIDEu
KTsnLAotICAnICAgIH0gZWxzZSBpZiAoZmFjZSA9PSAzNDA3NCkgeycsICAvLyBURVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1oKLSAgJyAgICAgICAgdGV4Q3ViZSA9IHZlYzMoLXRleEMyLngsIC10
ZXhDMi55LCAtMS4pOycsCi0gICcgICAgfScsCi0gICcgICAgZ2xfRnJhZ0RhdGFbMF0gPSB0ZXh0
dXJlQ3ViZSh0ZXgsIHRleEN1YmUpOycsCi0gICd9J10uam9pbignXG4nKTsKLQotLyoqCi0gKiBB
IHZlcnRleCBzaGFkZXIgZm9yIGEgc2luZ2xlIHRleHR1cmUuCi0gKiBAdHlwZSB7c3RyaW5nfQot
ICovCi12YXIgbm9UZXhDb29yZFRleHR1cmVWZXJ0ZXhTaGFkZXIgPSBbCi0gICdhdHRyaWJ1dGUg
dmVjNCB2UG9zaXRpb247JywKLSAgJ3ZhcnlpbmcgdmVjMiB0ZXhDb29yZDsnLAotICAndm9pZCBt
YWluKCkgeycsCi0gICcgICAgZ2xfUG9zaXRpb24gPSB2UG9zaXRpb247JywKLSAgJyAgICB0ZXhD
b29yZCA9IHZQb3NpdGlvbi54eSAqIDAuNSArIDAuNTsnLAotICAnfSddLmpvaW4oJ1xuJyk7Ci0K
LS8qKgotICogQSB2ZXJ0ZXggc2hhZGVyIGZvciBhIHVuaWZvcm0gY29sb3IuCi0gKiBAdHlwZSB7
c3RyaW5nfQotICovCi12YXIgc2ltcGxlVmVydGV4U2hhZGVyID0gWwotICAnYXR0cmlidXRlIHZl
YzQgdlBvc2l0aW9uOycsCi0gICd2b2lkIG1haW4oKSB7JywKLSAgJyAgICBnbF9Qb3NpdGlvbiA9
IHZQb3NpdGlvbjsnLAotICAnfSddLmpvaW4oJ1xuJyk7Ci0KLS8qKgotICogQSB2ZXJ0ZXggc2hh
ZGVyIGZvciBhIHVuaWZvcm0gY29sb3IuCi0gKiBAdHlwZSB7c3RyaW5nfQotICovCi12YXIgc2lt
cGxlVmVydGV4U2hhZGVyRVNTTDMwMCA9IFsKLSAgJyN2ZXJzaW9uIDMwMCBlcycsCi0gICdpbiB2
ZWM0IHZQb3NpdGlvbjsnLAotICAndm9pZCBtYWluKCkgeycsCi0gICcgICAgZ2xfUG9zaXRpb24g
PSB2UG9zaXRpb247JywKLSAgJ30nXS5qb2luKCdcbicpOwotCi0vKioKLSAqIEEgZnJhZ21lbnQg
c2hhZGVyIGZvciBhIHVuaWZvcm0gY29sb3IuCi0gKiBAdHlwZSB7c3RyaW5nfQotICovCi12YXIg
c2ltcGxlQ29sb3JGcmFnbWVudFNoYWRlciA9IFsKLSAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0
OycsCi0gICd1bmlmb3JtIHZlYzQgdV9jb2xvcjsnLAotICAndm9pZCBtYWluKCkgeycsCi0gICcg
ICAgZ2xfRnJhZ0RhdGFbMF0gPSB1X2NvbG9yOycsCi0gICd9J10uam9pbignXG4nKTsKLQotLyoq
Ci0gKiBBIGZyYWdtZW50IHNoYWRlciBmb3IgYSB1bmlmb3JtIGNvbG9yLgotICogQHR5cGUge3N0
cmluZ30KLSAqLwotdmFyIHNpbXBsZUNvbG9yRnJhZ21lbnRTaGFkZXJFU1NMMzAwID0gWwotICAn
I3ZlcnNpb24gMzAwIGVzJywKLSAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsCi0gICdvdXQg
dmVjNCBvdXRfY29sb3I7JywKLSAgJ3VuaWZvcm0gdmVjNCB1X2NvbG9yOycsCi0gICd2b2lkIG1h
aW4oKSB7JywKLSAgJyAgICBvdXRfY29sb3IgPSB1X2NvbG9yOycsCi0gICd9J10uam9pbignXG4n
KTsKLQotLyoqCi0gKiBBIHZlcnRleCBzaGFkZXIgZm9yIHZlcnRleCBjb2xvcnMuCi0gKiBAdHlw
ZSB7c3RyaW5nfQotICovCi12YXIgc2ltcGxlVmVydGV4Q29sb3JWZXJ0ZXhTaGFkZXIgPSBbCi0g
ICdhdHRyaWJ1dGUgdmVjNCB2UG9zaXRpb247JywKLSAgJ2F0dHJpYnV0ZSB2ZWM0IGFfY29sb3I7
JywKLSAgJ3ZhcnlpbmcgdmVjNCB2X2NvbG9yOycsCi0gICd2b2lkIG1haW4oKSB7JywKLSAgJyAg
ICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsnLAotICAnICAgIHZfY29sb3IgPSBhX2NvbG9yOycs
Ci0gICd9J10uam9pbignXG4nKTsKLQotLyoqCi0gKiBBIGZyYWdtZW50IHNoYWRlciBmb3IgdmVy
dGV4IGNvbG9ycy4KLSAqIEB0eXBlIHtzdHJpbmd9Ci0gKi8KLXZhciBzaW1wbGVWZXJ0ZXhDb2xv
ckZyYWdtZW50U2hhZGVyID0gWwotICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JywKLSAgJ3Zh
cnlpbmcgdmVjNCB2X2NvbG9yOycsCi0gICd2b2lkIG1haW4oKSB7JywKLSAgJyAgICBnbF9GcmFn
RGF0YVswXSA9IHZfY29sb3I7JywKLSAgJ30nXS5qb2luKCdcbicpOwotCi0vKioKLSAqIENyZWF0
ZXMgYSBwcm9ncmFtLCBhdHRhY2hlcyBzaGFkZXJzLCBiaW5kcyBhdHRyaWIgbG9jYXRpb25zLCBs
aW5rcyB0aGUKLSAqIHByb2dyYW0gYW5kIGNhbGxzIHVzZVByb2dyYW0uCi0gKiBAcGFyYW0geyFX
ZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNl
LgotICogQHBhcmFtIHshQXJyYXkuPCFXZWJHTFNoYWRlcnxzdHJpbmc+fSBzaGFkZXJzIFRoZSBz
aGFkZXJzIHRvCi0gKiAgICAgICAgYXR0YWNoLCBvciB0aGUgc291cmNlLCBvciB0aGUgaWQgb2Yg
YSBzY3JpcHQgdG8gZ2V0Ci0gKiAgICAgICAgdGhlIHNvdXJjZSBmcm9tLgotICogQHBhcmFtIHsh
QXJyYXkuPHN0cmluZz59IG9wdF9hdHRyaWJzIFRoZSBhdHRyaWJzIG5hbWVzLgotICogQHBhcmFt
IHshQXJyYXkuPG51bWJlcj59IG9wdF9sb2NhdGlvbnMgVGhlIGxvY2F0aW9ucyBmb3IgdGhlIGF0
dHJpYnMuCi0gKiBAcGFyYW0ge2Jvb2xlYW59IG9wdF9sb2dTaGFkZXJzIFdoZXRoZXIgdG8gbG9n
IHNoYWRlciBzb3VyY2UuCi0gKi8KLXZhciBzZXR1cFByb2dyYW0gPSBmdW5jdGlvbigKLSAgICBn
bCwgc2hhZGVycywgb3B0X2F0dHJpYnMsIG9wdF9sb2NhdGlvbnMsIG9wdF9sb2dTaGFkZXJzKSB7
Ci0gIHZhciByZWFsU2hhZGVycyA9IFtdOwotICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dy
YW0oKTsKLSAgdmFyIHNoYWRlckNvdW50ID0gMDsKLSAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHNo
YWRlcnMubGVuZ3RoOyArK2lpKSB7Ci0gICAgdmFyIHNoYWRlciA9IHNoYWRlcnNbaWldOwotICAg
IHZhciBzaGFkZXJUeXBlID0gdW5kZWZpbmVkOwotICAgIGlmICh0eXBlb2Ygc2hhZGVyID09ICdz
dHJpbmcnKSB7Ci0gICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNo
YWRlcik7Ci0gICAgICBpZiAoZWxlbWVudCkgewotICAgICAgICBpZiAoZWxlbWVudC50eXBlICE9
ICJ4LXNoYWRlci94LXZlcnRleCIgJiYgZWxlbWVudC50eXBlICE9ICJ4LXNoYWRlci94LWZyYWdt
ZW50IikKLSAgICAgICAgICBzaGFkZXJUeXBlID0gaWkgPyBnbC5GUkFHTUVOVF9TSEFERVIgOiBn
bC5WRVJURVhfU0hBREVSOwotICAgICAgICBzaGFkZXIgPSBsb2FkU2hhZGVyRnJvbVNjcmlwdChn
bCwgc2hhZGVyLCBzaGFkZXJUeXBlLCB1bmRlZmluZWQsIG9wdF9sb2dTaGFkZXJzKTsKLSAgICAg
IH0gZWxzZSBpZiAoZW5kc1dpdGgoc2hhZGVyLCAiLnZlcnQiKSkgewotICAgICAgICBzaGFkZXIg
PSBsb2FkU2hhZGVyRnJvbUZpbGUoZ2wsIHNoYWRlciwgZ2wuVkVSVEVYX1NIQURFUiwgdW5kZWZp
bmVkLCBvcHRfbG9nU2hhZGVycyk7Ci0gICAgICB9IGVsc2UgaWYgKGVuZHNXaXRoKHNoYWRlciwg
Ii5mcmFnIikpIHsKLSAgICAgICAgc2hhZGVyID0gbG9hZFNoYWRlckZyb21GaWxlKGdsLCBzaGFk
ZXIsIGdsLkZSQUdNRU5UX1NIQURFUiwgdW5kZWZpbmVkLCBvcHRfbG9nU2hhZGVycyk7Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICBzaGFkZXIgPSBsb2FkU2hhZGVyKGdsLCBzaGFkZXIsIGlpID8g
Z2wuRlJBR01FTlRfU0hBREVSIDogZ2wuVkVSVEVYX1NIQURFUiwgdW5kZWZpbmVkLCBvcHRfbG9n
U2hhZGVycyk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChvcHRfbG9nU2hhZGVycykgewotICAg
ICAgdGhyb3cgJ1NoYWRlciBzb3VyY2UgbG9nZ2luZyByZXF1ZXN0ZWQgYnV0IG5vIHNoYWRlciBz
b3VyY2UgcHJvdmlkZWQnOwotICAgIH0KLSAgICBpZiAoc2hhZGVyKSB7Ci0gICAgICArK3NoYWRl
ckNvdW50OwotICAgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Ci0gICAgfQot
ICB9Ci0gIGlmIChzaGFkZXJDb3VudCAhPSAyKSB7Ci0gICAgZXJyb3IoIkVycm9yIGluIGNvbXBp
bGluZyBzaGFkZXIiKTsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICBpZiAob3B0X2F0dHJpYnMp
IHsKLSAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgb3B0X2F0dHJpYnMubGVuZ3RoOyArK2lpKSB7
Ci0gICAgICBnbC5iaW5kQXR0cmliTG9jYXRpb24oCi0gICAgICAgICAgcHJvZ3JhbSwKLSAgICAg
ICAgICBvcHRfbG9jYXRpb25zID8gb3B0X2xvY2F0aW9uc1tpaV0gOiBpaSwKLSAgICAgICAgICBv
cHRfYXR0cmlic1tpaV0pOwotICAgIH0KLSAgfQotICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTsK
LQotICAvLyBDaGVjayB0aGUgbGluayBzdGF0dXMKLSAgdmFyIGxpbmtlZCA9IGdsLmdldFByb2dy
YW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpOwotICBpZiAoIWxpbmtlZCkgewot
ICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgbGluawotICAgICAgbGFzdEVy
cm9yID0gZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cgKHByb2dyYW0pOwotICAgICAgZXJyb3IoIkVycm9y
IGluIHByb2dyYW0gbGlua2luZzoiICsgbGFzdEVycm9yKTsKLQotICAgICAgZ2wuZGVsZXRlUHJv
Z3JhbShwcm9ncmFtKTsKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgZ2wudXNlUHJvZ3Jh
bShwcm9ncmFtKTsKLSAgcmV0dXJuIHByb2dyYW07Ci19OwotCi0vKioKLSAqIENyZWF0ZXMgYSBw
cm9ncmFtLCBhdHRhY2hlcyBzaGFkZXIsIHNldHMgdXAgdHJhc25mb3JtIGZlZWRiYWNrIHZhcnlp
bmdzLAotICogYmluZHMgYXR0cmliIGxvY2F0aW9ucywgbGlua3MgdGhlIHByb2dyYW0gYW5kIGNh
bGxzIHVzZVByb2dyYW0uCi0gKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRo
ZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgotICogQHBhcmFtIHshQXJyYXkuPCFXZWJH
TFNoYWRlcnxzdHJpbmc+fSBzaGFkZXJzIFRoZSBzaGFkZXJzIHRvCi0gKiAgICAgICAgYXR0YWNo
LCBvciB0aGUgc291cmNlLCBvciB0aGUgaWQgb2YgYSBzY3JpcHQgdG8gZ2V0Ci0gKiAgICAgICAg
dGhlIHNvdXJjZSBmcm9tLgotICogQHBhcmFtIHshQXJyYXkuPHN0cmluZz59IHZhcnlpbmdzIFRo
ZSB0cmFuc2Zvcm0gZmVlZGJhY2sgdmFyeWluZyBuYW1lcy4KLSAqIEBwYXJhbSB7bnVtYmVyfSBi
dWZmZXJNb2RlIFRoZSBtb2RlIHVzZWQgdG8gY2FwdHVyZSB0aGUgdmFyeWluZyB2YXJpYWJsZXMu
Ci0gKiBAcGFyYW0geyFBcnJheS48c3RyaW5nPn0gb3B0X2F0dHJpYnMgVGhlIGF0dHJpYnMgbmFt
ZXMuCi0gKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gb3B0X2xvY2F0aW9ucyBUaGUgbG9jYXRp
b25zIGZvciB0aGUgYXR0cmlicy4KLSAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0X2xvZ1NoYWRlcnMg
V2hldGhlciB0byBsb2cgc2hhZGVyIHNvdXJjZS4KLSAqLwotdmFyIHNldHVwVHJhbnNmb3JtRmVl
ZGJhY2tQcm9ncmFtID0gZnVuY3Rpb24oCi0gICAgZ2wsIHNoYWRlcnMsIHZhcnlpbmdzLCBidWZm
ZXJNb2RlLCBvcHRfYXR0cmlicywgb3B0X2xvY2F0aW9ucywgb3B0X2xvZ1NoYWRlcnMsIG9wdF9z
a2lwQ29tcGlsZVN0YXR1cykgewotICB2YXIgcmVhbFNoYWRlcnMgPSBbXTsKLSAgdmFyIHByb2dy
YW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7Ci0gIHZhciBzaGFkZXJDb3VudCA9IDA7Ci0gIGZvciAo
dmFyIGlpID0gMDsgaWkgPCBzaGFkZXJzLmxlbmd0aDsgKytpaSkgewotICAgIHZhciBzaGFkZXIg
PSBzaGFkZXJzW2lpXTsKLSAgICB2YXIgc2hhZGVyVHlwZSA9IHVuZGVmaW5lZDsKLSAgICBpZiAo
dHlwZW9mIHNoYWRlciA9PSAnc3RyaW5nJykgewotICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZChzaGFkZXIpOwotICAgICAgaWYgKGVsZW1lbnQpIHsKLSAgICAgICAg
aWYgKGVsZW1lbnQudHlwZSAhPSAieC1zaGFkZXIveC12ZXJ0ZXgiICYmIGVsZW1lbnQudHlwZSAh
PSAieC1zaGFkZXIveC1mcmFnbWVudCIpCi0gICAgICAgICAgc2hhZGVyVHlwZSA9IGlpID8gZ2wu
RlJBR01FTlRfU0hBREVSIDogZ2wuVkVSVEVYX1NIQURFUjsKLSAgICAgICAgc2hhZGVyID0gbG9h
ZFNoYWRlckZyb21TY3JpcHQoZ2wsIHNoYWRlciwgc2hhZGVyVHlwZSwgdW5kZWZpbmVkLCBvcHRf
bG9nU2hhZGVycywgb3B0X3NraXBDb21waWxlU3RhdHVzKTsKLSAgICAgIH0gZWxzZSBpZiAoZW5k
c1dpdGgoc2hhZGVyLCAiLnZlcnQiKSkgewotICAgICAgICBzaGFkZXIgPSBsb2FkU2hhZGVyRnJv
bUZpbGUoZ2wsIHNoYWRlciwgZ2wuVkVSVEVYX1NIQURFUiwgdW5kZWZpbmVkLCBvcHRfbG9nU2hh
ZGVycywgb3B0X3NraXBDb21waWxlU3RhdHVzKTsKLSAgICAgIH0gZWxzZSBpZiAoZW5kc1dpdGgo
c2hhZGVyLCAiLmZyYWciKSkgewotICAgICAgICBzaGFkZXIgPSBsb2FkU2hhZGVyRnJvbUZpbGUo
Z2wsIHNoYWRlciwgZ2wuRlJBR01FTlRfU0hBREVSLCB1bmRlZmluZWQsIG9wdF9sb2dTaGFkZXJz
LCBvcHRfc2tpcENvbXBpbGVTdGF0dXMpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgc2hhZGVy
ID0gbG9hZFNoYWRlcihnbCwgc2hhZGVyLCBpaSA/IGdsLkZSQUdNRU5UX1NIQURFUiA6IGdsLlZF
UlRFWF9TSEFERVIsIHVuZGVmaW5lZCwgb3B0X2xvZ1NoYWRlcnMsIHVuZGVmaW5lZCwgdW5kZWZp
bmVkLCBvcHRfc2tpcENvbXBpbGVTdGF0dXMpOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAob3B0
X2xvZ1NoYWRlcnMpIHsKLSAgICAgIHRocm93ICdTaGFkZXIgc291cmNlIGxvZ2dpbmcgcmVxdWVz
dGVkIGJ1dCBubyBzaGFkZXIgc291cmNlIHByb3ZpZGVkJzsKLSAgICB9Ci0gICAgaWYgKHNoYWRl
cikgewotICAgICAgKytzaGFkZXJDb3VudDsKLSAgICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFt
LCBzaGFkZXIpOwotICAgIH0KLSAgfQotICBpZiAoc2hhZGVyQ291bnQgIT0gMikgewotICAgIGVy
cm9yKCJFcnJvciBpbiBjb21waWxpbmcgc2hhZGVyIik7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0K
LQotICBpZiAob3B0X2F0dHJpYnMpIHsKLSAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgb3B0X2F0
dHJpYnMubGVuZ3RoOyArK2lpKSB7Ci0gICAgICBnbC5iaW5kQXR0cmliTG9jYXRpb24oCi0gICAg
ICAgICAgcHJvZ3JhbSwKLSAgICAgICAgICBvcHRfbG9jYXRpb25zID8gb3B0X2xvY2F0aW9uc1tp
aV0gOiBpaSwKLSAgICAgICAgICBvcHRfYXR0cmlic1tpaV0pOwotICAgIH0KLSAgfQotCi0gIGds
LnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MocHJvZ3JhbSwgdmFyeWluZ3MsIGJ1ZmZlck1vZGUp
OwotCi0gIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pOwotCi0gIC8vIENoZWNrIHRoZSBsaW5rIHN0
YXR1cwotICB2YXIgbGlua2VkID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5M
SU5LX1NUQVRVUyk7Ci0gIGlmICghbGlua2VkKSB7Ci0gICAgICAvLyBzb21ldGhpbmcgd2VudCB3
cm9uZyB3aXRoIHRoZSBsaW5rCi0gICAgICBsYXN0RXJyb3IgPSBnbC5nZXRQcm9ncmFtSW5mb0xv
ZyAocHJvZ3JhbSk7Ci0gICAgICBlcnJvcigiRXJyb3IgaW4gcHJvZ3JhbSBsaW5raW5nOiIgKyBs
YXN0RXJyb3IpOwotCi0gICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pOwotICAgICAgcmV0
dXJuIG51bGw7Ci0gIH0KLQotICBnbC51c2VQcm9ncmFtKHByb2dyYW0pOwotICByZXR1cm4gcHJv
Z3JhbTsKLX07Ci0KLS8qKgotICogQ3JlYXRlcyBhIHNpbXBsZSB0ZXh0dXJlIHByb2dyYW0uCi0g
KiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQgdG8gdXNlLgotICogQHJldHVybiB7V2ViR0xQcm9ncmFtfQotICovCi12YXIgc2V0dXBO
b1RleENvb3JkVGV4dHVyZVByb2dyYW0gPSBmdW5jdGlvbihnbCkgewotICByZXR1cm4gc2V0dXBQ
cm9ncmFtKGdsLAotICAgICAgICAgICAgICAgICAgICAgIFtub1RleENvb3JkVGV4dHVyZVZlcnRl
eFNoYWRlciwgc2ltcGxlVGV4dHVyZUZyYWdtZW50U2hhZGVyXSwKLSAgICAgICAgICAgICAgICAg
ICAgICBbJ3ZQb3NpdGlvbiddLAotICAgICAgICAgICAgICAgICAgICAgIFswXSk7Ci19OwotCi0v
KioKLSAqIENyZWF0ZXMgYSBzaW1wbGUgdGV4dHVyZSBwcm9ncmFtLgotICogQHBhcmFtIHshV2Vi
R0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4K
LSAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfcG9zaXRpb25Mb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0
aW9uIGZvciBwb3NpdGlvbi4KLSAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfdGV4Y29vcmRMb2NhdGlv
biBUaGUgYXR0cmliIGxvY2F0aW9uIGZvciB0ZXh0dXJlIGNvb3Jkcy4KLSAqIEBwYXJhbSB7c3Ry
aW5nfSBvcHRfZnJhZ21lbnRTaGFkZXJPdmVycmlkZSBUaGUgYWx0ZXJuYXRpdmUgZnJhZ21lbnQg
c2hhZGVyIHRvIHVzZS4KLSAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX0KLSAqLwotdmFyIHNldHVw
U2ltcGxlVGV4dHVyZVByb2dyYW0gPSBmdW5jdGlvbigKLSAgICBnbCwgb3B0X3Bvc2l0aW9uTG9j
YXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uLCBvcHRfZnJhZ21lbnRTaGFkZXJPdmVycmlkZSkg
ewotICBvcHRfcG9zaXRpb25Mb2NhdGlvbiA9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIHx8IDA7Ci0g
IG9wdF90ZXhjb29yZExvY2F0aW9uID0gb3B0X3RleGNvb3JkTG9jYXRpb24gfHwgMTsKLSAgb3B0
X2ZyYWdtZW50U2hhZGVyT3ZlcnJpZGUgPSBvcHRfZnJhZ21lbnRTaGFkZXJPdmVycmlkZSB8fCBz
aW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXI7Ci0gIHJldHVybiBzZXR1cFByb2dyYW0oZ2wsCi0g
ICAgICAgICAgICAgICAgICAgICAgW3NpbXBsZVRleHR1cmVWZXJ0ZXhTaGFkZXIsIG9wdF9mcmFn
bWVudFNoYWRlck92ZXJyaWRlXSwKLSAgICAgICAgICAgICAgICAgICAgICBbJ3ZQb3NpdGlvbics
ICd0ZXhDb29yZDAnXSwKLSAgICAgICAgICAgICAgICAgICAgICBbb3B0X3Bvc2l0aW9uTG9jYXRp
b24sIG9wdF90ZXhjb29yZExvY2F0aW9uXSk7Ci19OwotCi0vKioKLSAqIENyZWF0ZXMgYSBzaW1w
bGUgdGV4dHVyZSBwcm9ncmFtIHVzaW5nIGdsc2wgdmVyc2lvbiAzMDAuCi0gKiBAcGFyYW0geyFX
ZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNl
LgotICogQHBhcmFtIHtudW1iZXJ9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIFRoZSBhdHRyaWIgbG9j
YXRpb24gZm9yIHBvc2l0aW9uLgotICogQHBhcmFtIHtudW1iZXJ9IG9wdF90ZXhjb29yZExvY2F0
aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHRleHR1cmUgY29vcmRzLgotICogQHBhcmFtIHtz
dHJpbmd9IG9wdF9mcmFnbWVudFNoYWRlck92ZXJyaWRlIFRoZSBhbHRlcm5hdGl2ZSBmcmFnbWVu
dCBzaGFkZXIgdG8gdXNlLgotICogQHJldHVybiB7V2ViR0xQcm9ncmFtfQotICovCi12YXIgc2V0
dXBTaW1wbGVUZXh0dXJlUHJvZ3JhbUVTU0wzMDAgPSBmdW5jdGlvbigKLSAgICBnbCwgb3B0X3Bv
c2l0aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uLCBvcHRfZnJhZ21lbnRTaGFkZXJP
dmVycmlkZSkgewotICBvcHRfcG9zaXRpb25Mb2NhdGlvbiA9IG9wdF9wb3NpdGlvbkxvY2F0aW9u
IHx8IDA7Ci0gIG9wdF90ZXhjb29yZExvY2F0aW9uID0gb3B0X3RleGNvb3JkTG9jYXRpb24gfHwg
MTsKLSAgb3B0X2ZyYWdtZW50U2hhZGVyT3ZlcnJpZGUgPSBvcHRfZnJhZ21lbnRTaGFkZXJPdmVy
cmlkZSB8fCBzaW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXJFU1NMMzAwOwotICByZXR1cm4gc2V0
dXBQcm9ncmFtKGdsLAotICAgICAgICAgICAgICAgICAgICAgIFtzaW1wbGVUZXh0dXJlVmVydGV4
U2hhZGVyRVNTTDMwMCwgb3B0X2ZyYWdtZW50U2hhZGVyT3ZlcnJpZGVdLAotICAgICAgICAgICAg
ICAgICAgICAgIFsndlBvc2l0aW9uJywgJ3RleENvb3JkMCddLAotICAgICAgICAgICAgICAgICAg
ICAgIFtvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb25dKTsKLX07Ci0K
LS8qKgotICogQ3JlYXRlcyBhIHNpbXBsZSBjdWJlIG1hcCB0ZXh0dXJlIHByb2dyYW0uCi0gKiBA
cGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQgdG8gdXNlLgotICogQHBhcmFtIHtudW1iZXJ9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIFRoZSBh
dHRyaWIgbG9jYXRpb24gZm9yIHBvc2l0aW9uLgotICogQHBhcmFtIHtudW1iZXJ9IG9wdF90ZXhj
b29yZExvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHRleHR1cmUgY29vcmRzLgotICog
QHJldHVybiB7V2ViR0xQcm9ncmFtfQotICovCi12YXIgc2V0dXBTaW1wbGVDdWJlTWFwVGV4dHVy
ZVByb2dyYW0gPSBmdW5jdGlvbigKLSAgICBnbCwgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90
ZXhjb29yZExvY2F0aW9uKSB7Ci0gIG9wdF9wb3NpdGlvbkxvY2F0aW9uID0gb3B0X3Bvc2l0aW9u
TG9jYXRpb24gfHwgMDsKLSAgb3B0X3RleGNvb3JkTG9jYXRpb24gPSBvcHRfdGV4Y29vcmRMb2Nh
dGlvbiB8fCAxOwotICByZXR1cm4gc2V0dXBQcm9ncmFtKGdsLAotICAgICAgICAgICAgICAgICAg
ICAgIFtzaW1wbGVUZXh0dXJlVmVydGV4U2hhZGVyLCBzaW1wbGVDdWJlTWFwVGV4dHVyZUZyYWdt
ZW50U2hhZGVyXSwKLSAgICAgICAgICAgICAgICAgICAgICBbJ3ZQb3NpdGlvbicsICd0ZXhDb29y
ZDAnXSwKLSAgICAgICAgICAgICAgICAgICAgICBbb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90
ZXhjb29yZExvY2F0aW9uXSk7Ci19OwotCi0vKioKLSAqIENyZWF0ZXMgYSBzaW1wbGUgdmVydGV4
IGNvbG9yIHByb2dyYW0uCi0gKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRo
ZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgotICogQHBhcmFtIHtudW1iZXJ9IG9wdF9w
b3NpdGlvbkxvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHBvc2l0aW9uLgotICogQHBh
cmFtIHtudW1iZXJ9IG9wdF92ZXJ0ZXhDb2xvckxvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24K
LSAqICAgICAgICBmb3IgdmVydGV4IGNvbG9ycy4KLSAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX0K
LSAqLwotdmFyIHNldHVwU2ltcGxlVmVydGV4Q29sb3JQcm9ncmFtID0gZnVuY3Rpb24oCi0gICAg
Z2wsIG9wdF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRfdmVydGV4Q29sb3JMb2NhdGlvbikgewotICBv
cHRfcG9zaXRpb25Mb2NhdGlvbiA9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIHx8IDA7Ci0gIG9wdF92
ZXJ0ZXhDb2xvckxvY2F0aW9uID0gb3B0X3ZlcnRleENvbG9yTG9jYXRpb24gfHwgMTsKLSAgcmV0
dXJuIHNldHVwUHJvZ3JhbShnbCwKLSAgICAgICAgICAgICAgICAgICAgICBbc2ltcGxlVmVydGV4
Q29sb3JWZXJ0ZXhTaGFkZXIsIHNpbXBsZVZlcnRleENvbG9yRnJhZ21lbnRTaGFkZXJdLAotICAg
ICAgICAgICAgICAgICAgICAgIFsndlBvc2l0aW9uJywgJ2FfY29sb3InXSwKLSAgICAgICAgICAg
ICAgICAgICAgICBbb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF92ZXJ0ZXhDb2xvckxvY2F0aW9u
XSk7Ci19OwotCi0vKioKLSAqIENyZWF0ZXMgYSBzaW1wbGUgY29sb3IgcHJvZ3JhbS4KLSAqIEBw
YXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4
dCB0byB1c2UuCi0gKiBAcGFyYW0ge251bWJlcn0gb3B0X3Bvc2l0aW9uTG9jYXRpb24gVGhlIGF0
dHJpYiBsb2NhdGlvbiBmb3IgcG9zaXRpb24uCi0gKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19Ci0g
Ki8KLXZhciBzZXR1cFNpbXBsZUNvbG9yUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCBvcHRfcG9zaXRp
b25Mb2NhdGlvbikgewotICBvcHRfcG9zaXRpb25Mb2NhdGlvbiA9IG9wdF9wb3NpdGlvbkxvY2F0
aW9uIHx8IDA7Ci0gIHJldHVybiBzZXR1cFByb2dyYW0oZ2wsCi0gICAgICAgICAgICAgICAgICAg
ICAgW3NpbXBsZVZlcnRleFNoYWRlciwgc2ltcGxlQ29sb3JGcmFnbWVudFNoYWRlcl0sCi0gICAg
ICAgICAgICAgICAgICAgICAgWyd2UG9zaXRpb24nXSwKLSAgICAgICAgICAgICAgICAgICAgICBb
b3B0X3Bvc2l0aW9uTG9jYXRpb25dKTsKLX07Ci0KLS8qKgotICogQ3JlYXRlcyBidWZmZXJzIGZv
ciBhIHRleHR1cmVkIHVuaXQgcXVhZCBhbmQgYXR0YWNoZXMgdGhlbSB0byB2ZXJ0ZXggYXR0cmli
cy4KLSAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVy
aW5nQ29udGV4dCB0byB1c2UuCi0gKiBAcGFyYW0ge251bWJlcn0gb3B0X3Bvc2l0aW9uTG9jYXRp
b24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgcG9zaXRpb24uCi0gKiBAcGFyYW0ge251bWJlcn0g
b3B0X3RleGNvb3JkTG9jYXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgdGV4dHVyZSBjb29y
ZHMuCi0gKiBAcGFyYW0geyFPYmplY3R9IHZhcmlvdXMgb3B0aW9ucy4gU2VlIHNldHVwUXVhZCBm
b3IgZGV0YWlscy4KLSAqIEByZXR1cm4geyFBcnJheS48V2ViR0xCdWZmZXI+fSBUaGUgYnVmZmVy
IG9iamVjdHMgdGhhdCB3ZXJlCi0gKiAgICAgIGNyZWF0ZWQuCi0gKi8KLXZhciBzZXR1cFVuaXRR
dWFkID0gZnVuY3Rpb24oZ2wsIG9wdF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRfdGV4Y29vcmRMb2Nh
dGlvbiwgb3B0aW9ucykgewotICByZXR1cm4gc2V0dXBRdWFkV2l0aFRleENvb3JkcyhnbCwgWyAw
LjAsIDAuMCBdLCBbIDEuMCwgMS4wIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9wdF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRfdGV4Y29vcmRMb2NhdGlvbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyk7Ci19OwotCi0vKioKLSAqIENyZWF0ZXMgYnVm
ZmVycyBmb3IgYSB0ZXh0dXJlZCBxdWFkIHdpdGggc3BlY2lmaWVkIGxvd2VyIGxlZnQKLSAqIGFu
ZCB1cHBlciByaWdodCB0ZXh0dXJlIGNvb3JkaW5hdGVzLCBhbmQgYXR0YWNoZXMgdGhlbSB0byB2
ZXJ0ZXgKLSAqIGF0dHJpYnMuCi0gKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGds
IFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgotICogQHBhcmFtIHshQXJyYXkuPG51
bWJlcj59IGxvd2VyTGVmdFRleENvb3JkcyBUaGUgdGV4dHVyZSBjb29yZGluYXRlcyBmb3IgdGhl
IGxvd2VyIGxlZnQgY29ybmVyLgotICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IHVwcGVyUmln
aHRUZXhDb29yZHMgVGhlIHRleHR1cmUgY29vcmRpbmF0ZXMgZm9yIHRoZSB1cHBlciByaWdodCBj
b3JuZXIuCi0gKiBAcGFyYW0ge251bWJlcn0gb3B0X3Bvc2l0aW9uTG9jYXRpb24gVGhlIGF0dHJp
YiBsb2NhdGlvbiBmb3IgcG9zaXRpb24uCi0gKiBAcGFyYW0ge251bWJlcn0gb3B0X3RleGNvb3Jk
TG9jYXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgdGV4dHVyZSBjb29yZHMuCi0gKiBAcGFy
YW0geyFPYmplY3R9IHZhcmlvdXMgb3B0aW9ucy4gU2VlIHNldHVwUXVhZCBmb3IgZGV0YWlscy4K
LSAqIEByZXR1cm4geyFBcnJheS48V2ViR0xCdWZmZXI+fSBUaGUgYnVmZmVyIG9iamVjdHMgdGhh
dCB3ZXJlCi0gKiAgICAgIGNyZWF0ZWQuCi0gKi8KLXZhciBzZXR1cFF1YWRXaXRoVGV4Q29vcmRz
ID0gZnVuY3Rpb24oCi0gICAgZ2wsIGxvd2VyTGVmdFRleENvb3JkcywgdXBwZXJSaWdodFRleENv
b3JkcywKLSAgICBvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24sIG9w
dGlvbnMpIHsKLSAgdmFyIGRlZmF1bHRPcHRpb25zID0gewotICAgIHBvc2l0aW9uTG9jYXRpb246
IG9wdF9wb3NpdGlvbkxvY2F0aW9uIHx8IDAsCi0gICAgdGV4Y29vcmRMb2NhdGlvbjogb3B0X3Rl
eGNvb3JkTG9jYXRpb24gfHwgMSwKLSAgICBsb3dlckxlZnRUZXhDb29yZHM6IGxvd2VyTGVmdFRl
eENvb3JkcywKLSAgICB1cHBlclJpZ2h0VGV4Q29vcmRzOiB1cHBlclJpZ2h0VGV4Q29vcmRzCi0g
IH07Ci0gIGlmIChvcHRpb25zKSB7Ci0gICAgZm9yICh2YXIgcHJvcCBpbiBvcHRpb25zKSB7Ci0g
ICAgICBkZWZhdWx0T3B0aW9uc1twcm9wXSA9IG9wdGlvbnNbcHJvcF0KLSAgICB9Ci0gIH0KLSAg
cmV0dXJuIHNldHVwUXVhZChnbCwgZGVmYXVsdE9wdGlvbnMpOwotfTsKLQotLyoqCi0gKiBNYWtl
cyBhIHF1YWQgd2l0aCB2YXJpb3VzIG9wdGlvbnMuCi0gKiBAcGFyYW0geyFXZWJHTFJlbmRlcmlu
Z0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgotICogQHBhcmFt
IHshT2JqZWN0fSBvcHRpb25zCi0gKgotICogc2NhbGU6IHNjYWxlIHRvIG11bHRpcGx5IHVuaXQg
cXVhZCB2YWx1ZXMgYnkuIGRlZmF1bHQgMS4wLgotICogcG9zaXRpb25Mb2NhdGlvbjogYXR0cmli
dXRlIGxvY2F0aW9uIGZvciBwb3NpdGlvbi4KLSAqIHRleGNvb3JkTG9jYXRpb246IGF0dHJpYnV0
ZSBsb2NhdGlvbiBmb3IgdGV4Y29vcmRzLgotICogICAgIElmIHRoaXMgZG9lcyBub3QgZXhpc3Qg
bm8gdGV4dHVyZSBjb29yZHMgYXJlIGNyZWF0ZWQuCi0gKiBsb3dlckxlZnRUZXhDb29yZHM6IGFu
IGFycmF5IG9mIDIgdmFsdWVzIGZvciB0aGUKLSAqICAgICBsb3dlckxlZnRUZXhDb29yZHMuCi0g
KiB1cHBlclJpZ2h0VGV4Q29vcmRzOiBhbiBhcnJheSBvZiAyIHZhbHVlcyBmb3IgdGhlCi0gKiAg
ICAgdXBwZXJSaWdodFRleENvb3Jkcy4KLSAqLwotdmFyIHNldHVwUXVhZCA9IGZ1bmN0aW9uKGds
LCBvcHRpb25zKSB7Ci0gIHZhciBwb3NpdGlvbkxvY2F0aW9uID0gb3B0aW9ucy5wb3NpdGlvbkxv
Y2F0aW9uIHx8IDA7Ci0gIHZhciBzY2FsZSA9IG9wdGlvbnMuc2NhbGUgfHwgMTsKLQotICB2YXIg
b2JqZWN0cyA9IFtdOwotCi0gIHZhciB2ZXJ0ZXhPYmplY3QgPSBnbC5jcmVhdGVCdWZmZXIoKTsK
LSAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHZlcnRleE9iamVjdCk7Ci0gIGdsLmJ1
ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcgRmxvYXQzMkFycmF5KFsKLSAgICAgICAxLjAg
KiBzY2FsZSAsICAxLjAgKiBzY2FsZSwKLSAgICAgIC0xLjAgKiBzY2FsZSAsICAxLjAgKiBzY2Fs
ZSwKLSAgICAgIC0xLjAgKiBzY2FsZSAsIC0xLjAgKiBzY2FsZSwKLSAgICAgICAxLjAgKiBzY2Fs
ZSAsICAxLjAgKiBzY2FsZSwKLSAgICAgIC0xLjAgKiBzY2FsZSAsIC0xLjAgKiBzY2FsZSwKLSAg
ICAgICAxLjAgKiBzY2FsZSAsIC0xLjAgKiBzY2FsZV0pLCBnbC5TVEFUSUNfRFJBVyk7Ci0gIGds
LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHBvc2l0aW9uTG9jYXRpb24pOwotICBnbC52ZXJ0ZXhB
dHRyaWJQb2ludGVyKHBvc2l0aW9uTG9jYXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7
Ci0gIG9iamVjdHMucHVzaCh2ZXJ0ZXhPYmplY3QpOwotCi0gIGlmIChvcHRpb25zLnRleGNvb3Jk
TG9jYXRpb24gIT09IHVuZGVmaW5lZCkgewotICAgIHZhciBsbHggPSBvcHRpb25zLmxvd2VyTGVm
dFRleENvb3Jkc1swXTsKLSAgICB2YXIgbGx5ID0gb3B0aW9ucy5sb3dlckxlZnRUZXhDb29yZHNb
MV07Ci0gICAgdmFyIHVyeCA9IG9wdGlvbnMudXBwZXJSaWdodFRleENvb3Jkc1swXTsKLSAgICB2
YXIgdXJ5ID0gb3B0aW9ucy51cHBlclJpZ2h0VGV4Q29vcmRzWzFdOwotCi0gICAgdmVydGV4T2Jq
ZWN0ID0gZ2wuY3JlYXRlQnVmZmVyKCk7Ci0gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZG
RVIsIHZlcnRleE9iamVjdCk7Ci0gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG5l
dyBGbG9hdDMyQXJyYXkoWwotICAgICAgICB1cngsIHVyeSwKLSAgICAgICAgbGx4LCB1cnksCi0g
ICAgICAgIGxseCwgbGx5LAotICAgICAgICB1cngsIHVyeSwKLSAgICAgICAgbGx4LCBsbHksCi0g
ICAgICAgIHVyeCwgbGx5XSksIGdsLlNUQVRJQ19EUkFXKTsKLSAgICBnbC5lbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShvcHRpb25zLnRleGNvb3JkTG9jYXRpb24pOwotICAgIGdsLnZlcnRleEF0dHJp
YlBvaW50ZXIob3B0aW9ucy50ZXhjb29yZExvY2F0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAs
IDApOwotICAgIG9iamVjdHMucHVzaCh2ZXJ0ZXhPYmplY3QpOwotICB9Ci0KLSAgcmV0dXJuIG9i
amVjdHM7Ci19OwotCi0vKioKLSAqIENyZWF0ZXMgYSBwcm9ncmFtIGFuZCBidWZmZXJzIGZvciBy
ZW5kZXJpbmcgYSB0ZXh0dXJlZCBxdWFkLgotICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250
ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KLSAqIEBwYXJhbSB7bnVt
YmVyfSBvcHRfcG9zaXRpb25Mb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0aW9uIGZvcgotICogICAg
ICAgIHBvc2l0aW9uLiBEZWZhdWx0ID0gMC4KLSAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfdGV4Y29v
cmRMb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0aW9uIGZvcgotICogICAgICAgIHRleHR1cmUgY29v
cmRzLiBEZWZhdWx0ID0gMS4KLSAqIEBwYXJhbSB7IU9iamVjdH0gdmFyaW91cyBvcHRpb25zIGRl
ZmluZWQgYnkgc2V0dXBRdWFkLCBwbHVzIGFuIG9wdGlvbgotICAgICAgICAgIGZyYWdtZW50U2hh
ZGVyT3ZlcnJpZGUgdG8gc3BlY2lmeSBhIGN1c3RvbSBmcmFnbWVudCBzaGFkZXIuCi0gKiBAcmV0
dXJuIHshV2ViR0xQcm9ncmFtfQotICovCi12YXIgc2V0dXBUZXh0dXJlZFF1YWQgPSBmdW5jdGlv
bigKLSAgICBnbCwgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uLCBv
cHRpb25zKSB7Ci0gIHZhciBwcm9ncmFtID0gc2V0dXBTaW1wbGVUZXh0dXJlUHJvZ3JhbSgKLSAg
ICAgIGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24sIG9wdGlv
bnMgJiYgb3B0aW9ucy5mcmFnbWVudFNoYWRlck92ZXJyaWRlKTsKLSAgc2V0dXBVbml0UXVhZChn
bCwgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uLCBvcHRpb25zKTsK
LSAgcmV0dXJuIHByb2dyYW07Ci19OwotCi0vKioKLSAqIENyZWF0ZXMgYSBwcm9ncmFtIGFuZCBi
dWZmZXJzIGZvciByZW5kZXJpbmcgYSBjb2xvciBxdWFkLgotICogQHBhcmFtIHshV2ViR0xSZW5k
ZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KLSAqIEBw
YXJhbSB7bnVtYmVyfSBvcHRfcG9zaXRpb25Mb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0aW9uIGZv
ciBwb3NpdGlvbi4KLSAqIEBwYXJhbSB7IU9iamVjdH0gdmFyaW91cyBvcHRpb25zLiBTZWUgc2V0
dXBRdWFkIGZvciBkZXRhaWxzLgotICogQHJldHVybiB7IVdlYkdMUHJvZ3JhbX0KLSAqLwotdmFy
IHNldHVwQ29sb3JRdWFkID0gZnVuY3Rpb24oZ2wsIG9wdF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRp
b25zKSB7Ci0gIG9wdF9wb3NpdGlvbkxvY2F0aW9uID0gb3B0X3Bvc2l0aW9uTG9jYXRpb24gfHwg
MDsKLSAgdmFyIHByb2dyYW0gPSBzZXR1cFNpbXBsZUNvbG9yUHJvZ3JhbShnbCwgb3B0X3Bvc2l0
aW9uTG9jYXRpb24pOwotICBzZXR1cFVuaXRRdWFkKGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlvbiwg
MCwgb3B0aW9ucyk7Ci0gIHJldHVybiBwcm9ncmFtOwotfTsKLQotLyoqCi0gKiBDcmVhdGVzIGEg
cHJvZ3JhbSBhbmQgYnVmZmVycyBmb3IgcmVuZGVyaW5nIGEgdGV4dHVyZWQgcXVhZCB3aXRoCi0g
KiBzcGVjaWZpZWQgbG93ZXIgbGVmdCBhbmQgdXBwZXIgcmlnaHQgdGV4dHVyZSBjb29yZGluYXRl
cy4KLSAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVy
aW5nQ29udGV4dCB0byB1c2UuCi0gKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gbG93ZXJMZWZ0
VGV4Q29vcmRzIFRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzIGZvciB0aGUgbG93ZXIgbGVmdCBjb3Ju
ZXIuCi0gKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gdXBwZXJSaWdodFRleENvb3JkcyBUaGUg
dGV4dHVyZSBjb29yZGluYXRlcyBmb3IgdGhlIHVwcGVyIHJpZ2h0IGNvcm5lci4KLSAqIEBwYXJh
bSB7bnVtYmVyfSBvcHRfcG9zaXRpb25Mb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0aW9uIGZvciBw
b3NpdGlvbi4KLSAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfdGV4Y29vcmRMb2NhdGlvbiBUaGUgYXR0
cmliIGxvY2F0aW9uIGZvciB0ZXh0dXJlIGNvb3Jkcy4KLSAqIEByZXR1cm4geyFXZWJHTFByb2dy
YW19Ci0gKi8KLXZhciBzZXR1cFRleHR1cmVkUXVhZFdpdGhUZXhDb29yZHMgPSBmdW5jdGlvbigK
LSAgICBnbCwgbG93ZXJMZWZ0VGV4Q29vcmRzLCB1cHBlclJpZ2h0VGV4Q29vcmRzLAotICAgIG9w
dF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRfdGV4Y29vcmRMb2NhdGlvbikgewotICB2YXIgcHJvZ3Jh
bSA9IHNldHVwU2ltcGxlVGV4dHVyZVByb2dyYW0oCi0gICAgICBnbCwgb3B0X3Bvc2l0aW9uTG9j
YXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uKTsKLSAgc2V0dXBRdWFkV2l0aFRleENvb3Jkcyhn
bCwgbG93ZXJMZWZ0VGV4Q29vcmRzLCB1cHBlclJpZ2h0VGV4Q29vcmRzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIG9wdF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRfdGV4Y29vcmRMb2NhdGlvbik7
Ci0gIHJldHVybiBwcm9ncmFtOwotfTsKLQotLyoqCi0gKiBDcmVhdGVzIGEgcHJvZ3JhbSBhbmQg
YnVmZmVycyBmb3IgcmVuZGVyaW5nIGEgdGV4dHVyZWQgcXVhZCB3aXRoCi0gKiBhIGN1YmUgbWFw
IHRleHR1cmUuCi0gKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJH
TFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgotICogQHBhcmFtIHtudW1iZXJ9IG9wdF9wb3NpdGlv
bkxvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yCi0gKiAgICAgICAgcG9zaXRpb24uIERl
ZmF1bHQgPSAwLgotICogQHBhcmFtIHtudW1iZXJ9IG9wdF90ZXhjb29yZExvY2F0aW9uIFRoZSBh
dHRyaWIgbG9jYXRpb24gZm9yCi0gKiAgICAgICAgdGV4dHVyZSBjb29yZHMuIERlZmF1bHQgPSAx
LgotICogQHJldHVybiB7IVdlYkdMUHJvZ3JhbX0KLSAqLwotdmFyIHNldHVwVGV4dHVyZWRRdWFk
V2l0aEN1YmVNYXAgPSBmdW5jdGlvbigKLSAgICBnbCwgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9w
dF90ZXhjb29yZExvY2F0aW9uKSB7Ci0gIHZhciBwcm9ncmFtID0gc2V0dXBTaW1wbGVDdWJlTWFw
VGV4dHVyZVByb2dyYW0oCi0gICAgICBnbCwgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90ZXhj
b29yZExvY2F0aW9uKTsKLSAgc2V0dXBVbml0UXVhZChnbCwgb3B0X3Bvc2l0aW9uTG9jYXRpb24s
IG9wdF90ZXhjb29yZExvY2F0aW9uLCB1bmRlZmluZWQpOwotICByZXR1cm4gcHJvZ3JhbTsKLX07
Ci0KLS8qKgotICogQ3JlYXRlcyBhIHVuaXQgcXVhZCB3aXRoIG9ubHkgcG9zaXRpb25zIG9mIGEg
Z2l2ZW4gcmVzb2x1dGlvbi4KLSAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wg
VGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCi0gKiBAcGFyYW0ge251bWJlcn0gZ3Jp
ZFJlcyBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgbWVzaCBncmlkLAotICogICAgIGV4cHJlc3NlZCBp
biB0aGUgbnVtYmVyIG9mIHF1YWRzIGFjcm9zcyBhbmQgZG93bi4KLSAqIEBwYXJhbSB7bnVtYmVy
fSBvcHRfcG9zaXRpb25Mb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0aW9uIGZvciBwb3NpdGlvbi4K
LSAqLwotdmFyIHNldHVwSW5kZXhlZFF1YWQgPSBmdW5jdGlvbiAoCi0gICAgZ2wsIGdyaWRSZXMs
IG9wdF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRfZmxpcE9kZFRyaWFuZ2xlcykgewotICByZXR1cm4g
c2V0dXBJbmRleGVkUXVhZFdpdGhPcHRpb25zKGdsLAotICAgIHsgZ3JpZFJlczogZ3JpZFJlcywK
LSAgICAgIHBvc2l0aW9uTG9jYXRpb246IG9wdF9wb3NpdGlvbkxvY2F0aW9uLAotICAgICAgZmxp
cE9kZFRyaWFuZ2xlczogb3B0X2ZsaXBPZGRUcmlhbmdsZXMKLSAgICB9KTsKLX07Ci0KLS8qKgot
ICogQ3JlYXRlcyBhIHF1YWQgd2l0aCB2YXJpb3VzIG9wdGlvbnMuCi0gKiBAcGFyYW0geyFXZWJH
TFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgot
ICogQHBhcmFtIHshT2JqZWN0fSBvcHRpb25zIFRoZSBvcHRpb25zLiBTZWUgYmVsb3cuCi0gKiBA
cmV0dXJuIHshQXJyYXkuPFdlYkdMQnVmZmVyPn0gVGhlIGNyZWF0ZWQgYnVmZmVycy4KLSAqICAg
ICBbcG9zaXRpb25zLCA8Y29sb3JzPiwgaW5kaWNlc10KLSAqCi0gKiBPcHRpb25zOgotICogICBn
cmlkUmVzOiBudW1iZXIgb2YgcXVhZHMgYWNyb3NzIGFuZCBkb3duIGdyaWQuCi0gKiAgIHBvc2l0
aW9uTG9jYXRpb246IGF0dHJpYiBsb2NhdGlvbiBmb3IgcG9zaXRpb24KLSAqICAgZmxpcE9kZFRy
aWFuZ2xlczogcmV2ZXJzZSBvcmRlciBvZiB2ZXJ0aWNlcyBvZiBldmVyeSBvdGhlcgotICogICAg
ICAgdHJpYW5nbGUKLSAqICAgcG9zaXRpb25PZmZzZXQ6IG9mZnNldCBhZGRlZCB0byBlYWNoIHZl
cnRleAotICogICBwb3NpdGlvbk11bHQ6IG11bHRpcGllciBmb3IgZWFjaCB2ZXJ0ZXgKLSAqICAg
Y29sb3JMb2NhdGlvbjogYXR0cmliIGxvY2F0aW9uIGZvciB2ZXJ0ZXggY29sb3JzLiBJZgotICog
ICAgICB1bmRlZmluZWQgbm8gdmVydGV4IGNvbG9ycyB3aWxsIGJlIGNyZWF0ZWQuCi0gKi8KLXZh
ciBzZXR1cEluZGV4ZWRRdWFkV2l0aE9wdGlvbnMgPSBmdW5jdGlvbiAoZ2wsIG9wdGlvbnMpIHsK
LSAgdmFyIHBvc2l0aW9uTG9jYXRpb24gPSBvcHRpb25zLnBvc2l0aW9uTG9jYXRpb24gfHwgMDsK
LSAgdmFyIG9iamVjdHMgPSBbXTsKLQotICB2YXIgZ3JpZFJlcyA9IG9wdGlvbnMuZ3JpZFJlcyB8
fCAxOwotICB2YXIgcG9zaXRpb25PZmZzZXQgPSBvcHRpb25zLnBvc2l0aW9uT2Zmc2V0IHx8IDA7
Ci0gIHZhciBwb3NpdGlvbk11bHQgPSBvcHRpb25zLnBvc2l0aW9uTXVsdCB8fCAxOwotICB2YXIg
dmVydHNBY3Jvc3MgPSBncmlkUmVzICsgMTsKLSAgdmFyIG51bVZlcnRzID0gdmVydHNBY3Jvc3Mg
KiB2ZXJ0c0Fjcm9zczsKLSAgdmFyIHBvc2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJyYXkobnVtVmVy
dHMgKiAzKTsKLSAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoNiAqIGdyaWRSZXMgKiBn
cmlkUmVzKTsKLSAgdmFyIHBvZmZzZXQgPSAwOwotCi0gIGZvciAodmFyIHl5ID0gMDsgeXkgPD0g
Z3JpZFJlczsgKyt5eSkgewotICAgIGZvciAodmFyIHh4ID0gMDsgeHggPD0gZ3JpZFJlczsgKyt4
eCkgewotICAgICAgcG9zaXRpb25zW3BvZmZzZXQgKyAwXSA9ICgtMSArIDIgKiB4eCAvIGdyaWRS
ZXMpICogcG9zaXRpb25NdWx0ICsgcG9zaXRpb25PZmZzZXQ7Ci0gICAgICBwb3NpdGlvbnNbcG9m
ZnNldCArIDFdID0gKC0xICsgMiAqIHl5IC8gZ3JpZFJlcykgKiBwb3NpdGlvbk11bHQgKyBwb3Np
dGlvbk9mZnNldDsKLSAgICAgIHBvc2l0aW9uc1twb2Zmc2V0ICsgMl0gPSAwOwotCi0gICAgICBw
b2Zmc2V0ICs9IDM7Ci0gICAgfQotICB9Ci0KLSAgdmFyIGJ1ZiA9IGdsLmNyZWF0ZUJ1ZmZlcigp
OwotICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgYnVmKTsKLSAgZ2wuYnVmZmVyRGF0
YShnbC5BUlJBWV9CVUZGRVIsIHBvc2l0aW9ucywgZ2wuU1RBVElDX0RSQVcpOwotICBnbC5lbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShwb3NpdGlvbkxvY2F0aW9uKTsKLSAgZ2wudmVydGV4QXR0cmli
UG9pbnRlcihwb3NpdGlvbkxvY2F0aW9uLCAzLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOwotICBv
YmplY3RzLnB1c2goYnVmKTsKLQotICBpZiAob3B0aW9ucy5jb2xvckxvY2F0aW9uICE9PSB1bmRl
ZmluZWQpIHsKLSAgICB2YXIgY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShudW1WZXJ0cyAqIDQp
OwotICAgIHBvZmZzZXQgPSAwOwotICAgIGZvciAodmFyIHl5ID0gMDsgeXkgPD0gZ3JpZFJlczsg
Kyt5eSkgewotICAgICAgZm9yICh2YXIgeHggPSAwOyB4eCA8PSBncmlkUmVzOyArK3h4KSB7Ci0g
ICAgICAgIGlmIChvcHRpb25zLmNvbG9yICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICBjb2xv
cnNbcG9mZnNldCArIDBdID0gb3B0aW9ucy5jb2xvclswXTsKLSAgICAgICAgICBjb2xvcnNbcG9m
ZnNldCArIDFdID0gb3B0aW9ucy5jb2xvclsxXTsKLSAgICAgICAgICBjb2xvcnNbcG9mZnNldCAr
IDJdID0gb3B0aW9ucy5jb2xvclsyXTsKLSAgICAgICAgICBjb2xvcnNbcG9mZnNldCArIDNdID0g
b3B0aW9ucy5jb2xvclszXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBjb2xvcnNbcG9m
ZnNldCArIDBdID0geHggLyBncmlkUmVzOwotICAgICAgICAgIGNvbG9yc1twb2Zmc2V0ICsgMV0g
PSB5eSAvIGdyaWRSZXM7Ci0gICAgICAgICAgY29sb3JzW3BvZmZzZXQgKyAyXSA9ICh4eCAvIGdy
aWRSZXMpICogKHl5IC8gZ3JpZFJlcyk7Ci0gICAgICAgICAgY29sb3JzW3BvZmZzZXQgKyAzXSA9
ICh5eSAlIDIpICogMC41ICsgMC41OwotICAgICAgICB9Ci0gICAgICAgIHBvZmZzZXQgKz0gNDsK
LSAgICAgIH0KLSAgICB9Ci0KLSAgICBidWYgPSBnbC5jcmVhdGVCdWZmZXIoKTsKLSAgICBnbC5i
aW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgYnVmKTsKLSAgICBnbC5idWZmZXJEYXRhKGdsLkFS
UkFZX0JVRkZFUiwgY29sb3JzLCBnbC5TVEFUSUNfRFJBVyk7Ci0gICAgZ2wuZW5hYmxlVmVydGV4
QXR0cmliQXJyYXkob3B0aW9ucy5jb2xvckxvY2F0aW9uKTsKLSAgICBnbC52ZXJ0ZXhBdHRyaWJQ
b2ludGVyKG9wdGlvbnMuY29sb3JMb2NhdGlvbiwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsK
LSAgICBvYmplY3RzLnB1c2goYnVmKTsKLSAgfQotCi0gIHZhciB0YmFzZSA9IDA7Ci0gIGZvciAo
dmFyIHl5ID0gMDsgeXkgPCBncmlkUmVzOyArK3l5KSB7Ci0gICAgdmFyIGluZGV4ID0geXkgKiB2
ZXJ0c0Fjcm9zczsKLSAgICBmb3IgKHZhciB4eCA9IDA7IHh4IDwgZ3JpZFJlczsgKyt4eCkgewot
ICAgICAgaW5kaWNlc1t0YmFzZSArIDBdID0gaW5kZXggKyAwOwotICAgICAgaW5kaWNlc1t0YmFz
ZSArIDFdID0gaW5kZXggKyAxOwotICAgICAgaW5kaWNlc1t0YmFzZSArIDJdID0gaW5kZXggKyB2
ZXJ0c0Fjcm9zczsKLSAgICAgIGluZGljZXNbdGJhc2UgKyAzXSA9IGluZGV4ICsgdmVydHNBY3Jv
c3M7Ci0gICAgICBpbmRpY2VzW3RiYXNlICsgNF0gPSBpbmRleCArIDE7Ci0gICAgICBpbmRpY2Vz
W3RiYXNlICsgNV0gPSBpbmRleCArIHZlcnRzQWNyb3NzICsgMTsKLQotICAgICAgaWYgKG9wdGlv
bnMuZmxpcE9kZFRyaWFuZ2xlcykgewotICAgICAgICBpbmRpY2VzW3RiYXNlICsgNF0gPSBpbmRl
eCArIHZlcnRzQWNyb3NzICsgMTsKLSAgICAgICAgaW5kaWNlc1t0YmFzZSArIDVdID0gaW5kZXgg
KyAxOwotICAgICAgfQotCi0gICAgICBpbmRleCArPSAxOwotICAgICAgdGJhc2UgKz0gNjsKLSAg
ICB9Ci0gIH0KLQotICBidWYgPSBnbC5jcmVhdGVCdWZmZXIoKTsKLSAgZ2wuYmluZEJ1ZmZlcihn
bC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgYnVmKTsKLSAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5U
X0FSUkFZX0JVRkZFUiwgaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpOwotICBvYmplY3RzLnB1c2go
YnVmKTsKLQotICByZXR1cm4gb2JqZWN0czsKLX07Ci0KLS8qKgotICogUmV0dXJucyB0aGUgY29u
c3RydWN0b3IgZm9yIGEgdHlwZWQgYXJyYXkgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZ2l2ZW4K
LSAqIFdlYkdMIHR5cGUuCi0gKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIEEg
V2ViR0xSZW5kZXJpbmdDb250ZXh0LgotICogQHBhcmFtIHtudW1iZXJ9IHR5cGUgVGhlIFdlYkdM
IHR5cGUgKGVnLCBnbC5VTlNJR05FRF9CWVRFKQotICogQHJldHVybiB7IUNvbnN0cnVjdG9yfSBU
aGUgdHlwZWQgYXJyYXkgY29uc3RydWN0b3IgdGhhdAotICogICAgICBjb3JyZXNwb25kcyB0byB0
aGUgZ2l2ZW4gdHlwZS4KLSAqLwotdmFyIGdsVHlwZVRvVHlwZWRBcnJheVR5cGUgPSBmdW5jdGlv
bihnbCwgdHlwZSkgewotICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIGdsLkJZVEU6Ci0gICAg
ICByZXR1cm4gd2luZG93LkludDhBcnJheTsKLSAgICBjYXNlIGdsLlVOU0lHTkVEX0JZVEU6Ci0g
ICAgICByZXR1cm4gd2luZG93LlVpbnQ4QXJyYXk7Ci0gICAgY2FzZSBnbC5TSE9SVDoKLSAgICAg
IHJldHVybiB3aW5kb3cuSW50MTZBcnJheTsKLSAgICBjYXNlIGdsLlVOU0lHTkVEX1NIT1JUOgot
ICAgIGNhc2UgZ2wuVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgY2FzZSBnbC5VTlNJR05FRF9T
SE9SVF80XzRfNF80OgotICAgIGNhc2UgZ2wuVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAg
IHJldHVybiB3aW5kb3cuVWludDE2QXJyYXk7Ci0gICAgY2FzZSBnbC5JTlQ6Ci0gICAgICByZXR1
cm4gd2luZG93LkludDMyQXJyYXk7Ci0gICAgY2FzZSBnbC5VTlNJR05FRF9JTlQ6Ci0gICAgY2Fz
ZSBnbC5VTlNJR05FRF9JTlRfNV85XzlfOV9SRVY6Ci0gICAgY2FzZSBnbC5VTlNJR05FRF9JTlRf
MTBGXzExRl8xMUZfUkVWOgotICAgIGNhc2UgZ2wuVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVW
OgotICAgIGNhc2UgZ2wuVU5TSUdORURfSU5UXzI0Xzg6Ci0gICAgICByZXR1cm4gd2luZG93LlVp
bnQzMkFycmF5OwotICAgIGNhc2UgZ2wuSEFMRl9GTE9BVDoKLSAgICBjYXNlIDB4OEQ2MTogIC8v
IEhBTEZfRkxPQVRfT0VTCi0gICAgICByZXR1cm4gd2luZG93LlVpbnQxNkFycmF5OwotICAgIGNh
c2UgZ2wuRkxPQVQ6Ci0gICAgICByZXR1cm4gd2luZG93LkZsb2F0MzJBcnJheTsKLSAgICBkZWZh
dWx0OgotICAgICAgdGhyb3cgJ3Vua25vd24gZ2wgdHlwZSAnICsgZ2xFbnVtVG9TdHJpbmcoZ2ws
IHR5cGUpOwotICB9Ci19OwotCi0vKioKLSAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBw
ZXIgY29tcG9uZW50IGZvciBhIGdpdmVuIFdlYkdMIHR5cGUuCi0gKiBAcGFyYW0geyFXZWJHTFJl
bmRlcmluZ0NvbnRleHR9IGdsIEEgV2ViR0xSZW5kZXJpbmdDb250ZXh0LgotICogQHBhcmFtIHtH
TGVudW19IHR5cGUgVGhlIFdlYkdMIHR5cGUgKGVnLCBnbC5VTlNJR05FRF9CWVRFKQotICogQHJl
dHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGJ5dGVzIHBlciBjb21wb25lbnQuCi0gKi8KLXZh
ciBnZXRCeXRlc1BlckNvbXBvbmVudCA9IGZ1bmN0aW9uKGdsLCB0eXBlKSB7Ci0gIHN3aXRjaCAo
dHlwZSkgewotICAgIGNhc2UgZ2wuQllURToKLSAgICBjYXNlIGdsLlVOU0lHTkVEX0JZVEU6Ci0g
ICAgICByZXR1cm4gMTsKLSAgICBjYXNlIGdsLlNIT1JUOgotICAgIGNhc2UgZ2wuVU5TSUdORURf
U0hPUlQ6Ci0gICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICBjYXNlIGdsLlVO
U0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVF81XzVfNV8x
OgotICAgIGNhc2UgZ2wuSEFMRl9GTE9BVDoKLSAgICBjYXNlIDB4OEQ2MTogIC8vIEhBTEZfRkxP
QVRfT0VTCi0gICAgICByZXR1cm4gMjsKLSAgICBjYXNlIGdsLklOVDoKLSAgICBjYXNlIGdsLlVO
U0lHTkVEX0lOVDoKLSAgICBjYXNlIGdsLlVOU0lHTkVEX0lOVF81XzlfOV85X1JFVjoKLSAgICBj
YXNlIGdsLlVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVY6Ci0gICAgY2FzZSBnbC5VTlNJR05F
RF9JTlRfMl8xMF8xMF8xMF9SRVY6Ci0gICAgY2FzZSBnbC5VTlNJR05FRF9JTlRfMjRfODoKLSAg
ICBjYXNlIGdsLkZMT0FUOgotICAgICAgcmV0dXJuIDQ7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHRo
cm93ICd1bmtub3duIGdsIHR5cGUgJyArIGdsRW51bVRvU3RyaW5nKGdsLCB0eXBlKTsKLSAgfQot
fTsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdHlwZWQgYXJyYXkgZWxlbWVudHMg
cGVyIHBpeGVsIGZvciBhIGdpdmVuIFdlYkdMCi0gKiBmb3JtYXQvdHlwZSBjb21iaW5hdGlvbi4g
VGhlIGNvcnJlc3BvbmRpbmcgdHlwZWQgYXJyYXkgdHlwZSBjYW4gYmUgZGV0ZXJtaW5lZAotICog
YnkgY2FsbGluZyBnbFR5cGVUb1R5cGVkQXJyYXlUeXBlLgotICogQHBhcmFtIHshV2ViR0xSZW5k
ZXJpbmdDb250ZXh0fSBnbCBBIFdlYkdMUmVuZGVyaW5nQ29udGV4dC4KLSAqIEBwYXJhbSB7R0xl
bnVtfSBmb3JtYXQgVGhlIFdlYkdMIGZvcm1hdCAoZWcsIGdsLlJHQkEpCi0gKiBAcGFyYW0ge0dM
ZW51bX0gdHlwZSBUaGUgV2ViR0wgdHlwZSAoZWcsIGdsLlVOU0lHTkVEX0JZVEUpCi0gKiBAcmV0
dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgdHlwZWQgYXJyYXkgZWxlbWVudHMgcGVyIHBpeGVs
LgotICovCi12YXIgZ2V0VHlwZWRBcnJheUVsZW1lbnRzUGVyUGl4ZWwgPSBmdW5jdGlvbihnbCwg
Zm9ybWF0LCB0eXBlKSB7Ci0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgZ2wuVU5TSUdORURf
U0hPUlRfNV82XzU6Ci0gICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgIGNh
c2UgZ2wuVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgIHJldHVybiAxOwotICAgIGNhc2Ug
Z2wuVU5TSUdORURfQllURToKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICB0aHJv
dyAnbm90IGEgZ2wgdHlwZSBmb3IgY29sb3IgaW5mb3JtYXRpb24gJyArIGdsRW51bVRvU3RyaW5n
KGdsLCB0eXBlKTsKLSAgfQotCi0gIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBnbC5SR0JB
OgotICAgICAgcmV0dXJuIDQ7Ci0gICAgY2FzZSBnbC5SR0I6Ci0gICAgICByZXR1cm4gMzsKLSAg
ICBjYXNlIGdsLkxVTUlOQU5DRV9BTFBIQToKLSAgICAgIHJldHVybiAyOwotICAgIGNhc2UgZ2wu
TFVNSU5BTkNFOgotICAgIGNhc2UgZ2wuQUxQSEE6Ci0gICAgICByZXR1cm4gMTsKLSAgICBkZWZh
dWx0OgotICAgICAgdGhyb3cgJ3Vua25vd24gZ2wgZm9ybWF0ICcgKyBnbEVudW1Ub1N0cmluZyhn
bCwgZm9ybWF0KTsKLSAgfQotfTsKLQotLyoqCi0gKiBGaWxscyB0aGUgZ2l2ZW4gdGV4dHVyZSB3
aXRoIGEgc29saWQgY29sb3IuCi0gKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGds
IFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgotICogQHBhcmFtIHshV2ViR0xUZXh0
dXJlfSB0ZXggVGhlIHRleHR1cmUgdG8gZmlsbC4KLSAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCBU
aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgdG8gY3JlYXRlLgotICogQHBhcmFtIHtudW1iZXJ9IGhl
aWdodCBUaGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIHRvIGNyZWF0ZS4KLSAqIEBwYXJhbSB7IUFy
cmF5LjxudW1iZXI+fSBjb2xvciBUaGUgY29sb3IgdG8gZmlsbCB3aXRoLgotICogICAgICAgIHdo
ZXJlIGVhY2ggZWxlbWVudCBpcyBpbiB0aGUgcmFuZ2UgMCB0byAyNTUuCi0gKiBAcGFyYW0ge251
bWJlcn0gb3B0X2xldmVsIFRoZSBsZXZlbCBvZiB0aGUgdGV4dHVyZSB0byBmaWxsLiBEZWZhdWx0
ID0gMC4KLSAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfZm9ybWF0IFRoZSBmb3JtYXQgZm9yIHRoZSB0
ZXh0dXJlLgotICogQHBhcmFtIHtudW1iZXJ9IG9wdF9pbnRlcm5hbEZvcm1hdCBUaGUgaW50ZXJu
YWwgZm9ybWF0IGZvciB0aGUgdGV4dHVyZS4KLSAqLwotdmFyIGZpbGxUZXh0dXJlID0gZnVuY3Rp
b24oZ2wsIHRleCwgd2lkdGgsIGhlaWdodCwgY29sb3IsIG9wdF9sZXZlbCwgb3B0X2Zvcm1hdCwg
b3B0X3R5cGUsIG9wdF9pbnRlcm5hbEZvcm1hdCkgewotICBvcHRfbGV2ZWwgPSBvcHRfbGV2ZWwg
fHwgMDsKLSAgb3B0X2Zvcm1hdCA9IG9wdF9mb3JtYXQgfHwgZ2wuUkdCQTsKLSAgb3B0X3R5cGUg
PSBvcHRfdHlwZSB8fCBnbC5VTlNJR05FRF9CWVRFOwotICBvcHRfaW50ZXJuYWxGb3JtYXQgPSBv
cHRfaW50ZXJuYWxGb3JtYXQgfHwgb3B0X2Zvcm1hdDsKLSAgdmFyIHBhY2sgPSBnbC5nZXRQYXJh
bWV0ZXIoZ2wuVU5QQUNLX0FMSUdOTUVOVCk7Ci0gIHZhciBudW1Db21wb25lbnRzID0gY29sb3Iu
bGVuZ3RoOwotICB2YXIgYnl0ZXNQZXJDb21wb25lbnQgPSBnZXRCeXRlc1BlckNvbXBvbmVudChn
bCwgb3B0X3R5cGUpOwotICB2YXIgcm93U2l6ZSA9IG51bUNvbXBvbmVudHMgKiB3aWR0aCAqIGJ5
dGVzUGVyQ29tcG9uZW50OwotICAvLyBTZWUgZXF1YXRpb24gMy4xMCBpbiBFUyAyLjAgc3BlYyBh
bmQgZXF1YXRpb24gMy4xMyBpbiBFUyAzLjAgc3BlYyBmb3IgcGFkZGVkUm93TGVuZ3RoIGNhbGN1
bGF0aW9uLgotICAvLyBrIGlzIHBhZGRlZFJvd0xlbmd0aC4KLSAgLy8gbiBpcyBudW1Db21wb25l
bnRzLgotICAvLyBsIGlzIHdpZHRoLgotICAvLyBhIGlzIHBhY2suCi0gIC8vIHMgaXMgYnl0ZXNQ
ZXJDb21wb25lbnQuCi0gIHZhciBwYWRkZWRSb3dMZW5ndGg7Ci0gIGlmIChieXRlc1BlckNvbXBv
bmVudCA+PSBwYWNrKQotICAgIHBhZGRlZFJvd0xlbmd0aCA9IG51bUNvbXBvbmVudHMgKiB3aWR0
aDsKLSAgZWxzZQotICAgIHBhZGRlZFJvd0xlbmd0aCA9IE1hdGguZmxvb3IoKHJvd1NpemUgKyBw
YWNrIC0gMSkgLyBwYWNrKSAqIHBhY2sgLyBieXRlc1BlckNvbXBvbmVudDsKLSAgdmFyIHNpemUg
PSB3aWR0aCAqIG51bUNvbXBvbmVudHMgKyAoaGVpZ2h0IC0gMSkgKiBwYWRkZWRSb3dMZW5ndGg7
Ci0gIHZhciBidWYgPSBuZXcgKGdsVHlwZVRvVHlwZWRBcnJheVR5cGUoZ2wsIG9wdF90eXBlKSko
c2l6ZSk7Ci0gIGZvciAodmFyIHl5ID0gMDsgeXkgPCBoZWlnaHQ7ICsreXkpIHsKLSAgICB2YXIg
b2ZmID0geXkgKiBwYWRkZWRSb3dMZW5ndGg7Ci0gICAgZm9yICh2YXIgeHggPSAwOyB4eCA8IHdp
ZHRoOyArK3h4KSB7Ci0gICAgICBmb3IgKHZhciBqaiA9IDA7IGpqIDwgbnVtQ29tcG9uZW50czsg
KytqaikgewotICAgICAgICBidWZbb2ZmKytdID0gY29sb3JbampdOwotICAgICAgfQotICAgIH0K
LSAgfQotICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXgpOwotICBnbC50ZXhJbWFn
ZTJEKAotICAgICAgZ2wuVEVYVFVSRV8yRCwgb3B0X2xldmVsLCBvcHRfaW50ZXJuYWxGb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIDAsCi0gICAgICBvcHRfZm9ybWF0LCBvcHRfdHlwZSwgYnVmKTsKLX07
Ci0KLS8qKgotICogQ3JlYXRlcyBhIHRleHR1cmUgYW5kIGZpbGxzIGl0IHdpdGggYSBzb2xpZCBj
b2xvci4KLSAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCB0byB1c2UuCi0gKiBAcGFyYW0ge251bWJlcn0gd2lkdGggVGhlIHdpZHRo
IG9mIHRoZSB0ZXh0dXJlIHRvIGNyZWF0ZS4KLSAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgVGhl
IGhlaWdodCBvZiB0aGUgdGV4dHVyZSB0byBjcmVhdGUuCi0gKiBAcGFyYW0geyFBcnJheS48bnVt
YmVyPn0gY29sb3IgVGhlIGNvbG9yIHRvIGZpbGwgd2l0aC4gQSA0IGVsZW1lbnQgYXJyYXkKLSAq
ICAgICAgICB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlIHJhbmdlIDAgdG8gMjU1LgotICog
QHJldHVybiB7IVdlYkdMVGV4dHVyZX0KLSAqLwotdmFyIGNyZWF0ZUNvbG9yZWRUZXh0dXJlID0g
ZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGNvbG9yKSB7Ci0gIHZhciB0ZXggPSBnbC5jcmVh
dGVUZXh0dXJlKCk7Ci0gIGZpbGxUZXh0dXJlKGdsLCB0ZXgsIHdpZHRoLCBoZWlnaHQsIGNvbG9y
KTsKLSAgcmV0dXJuIHRleDsKLX07Ci0KLXZhciB1Ynl0ZVRvRmxvYXQgPSBmdW5jdGlvbihjKSB7
Ci0gIHJldHVybiBjIC8gMjU1OwotfTsKLQotdmFyIHVieXRlQ29sb3JUb0Zsb2F0Q29sb3IgPSBm
dW5jdGlvbihjb2xvcikgewotICB2YXIgZmxvYXRDb2xvciA9IFtdOwotICBmb3IgKHZhciBpaSA9
IDA7IGlpIDwgY29sb3IubGVuZ3RoOyArK2lpKSB7Ci0gICAgZmxvYXRDb2xvcltpaV0gPSB1Ynl0
ZVRvRmxvYXQoY29sb3JbaWldKTsKLSAgfQotICByZXR1cm4gZmxvYXRDb2xvcjsKLX07Ci0KLS8q
KgotICogU2V0cyB0aGUgInVfY29sb3IiIHVuaWZvcm0gb2YgdGhlIGN1cnJlbnQgcHJvZ3JhbSB0
byBjb2xvci4KLSAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdM
UmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCi0gKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gY29s
b3IgNCBlbGVtZW50IGFycmF5IG9mIDAtMSBjb2xvcgotICogICAgICBjb21wb25lbnRzLgotICov
Ci12YXIgc2V0RmxvYXREcmF3Q29sb3IgPSBmdW5jdGlvbihnbCwgY29sb3IpIHsKLSAgdmFyIHBy
b2dyYW0gPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuQ1VSUkVOVF9QUk9HUkFNKTsKLSAgdmFyIGNvbG9y
TG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgInVfY29sb3IiKTsKLSAg
Z2wudW5pZm9ybTRmdihjb2xvckxvY2F0aW9uLCBjb2xvcik7Ci19OwotCi0vKioKLSAqIFNldHMg
dGhlICJ1X2NvbG9yIiB1bmlmb3JtIG9mIHRoZSBjdXJyZW50IHByb2dyYW0gdG8gY29sb3IuCi0g
KiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQgdG8gdXNlLgotICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGNvbG9yIDQgZWxlbWVu
dCBhcnJheSBvZiAwLTI1NSBjb2xvcgotICogICAgICBjb21wb25lbnRzLgotICovCi12YXIgc2V0
VUJ5dGVEcmF3Q29sb3IgPSBmdW5jdGlvbihnbCwgY29sb3IpIHsKLSAgc2V0RmxvYXREcmF3Q29s
b3IoZ2wsIHVieXRlQ29sb3JUb0Zsb2F0Q29sb3IoY29sb3IpKTsKLX07Ci0KLS8qKgotICogRHJh
d3MgYSBwcmV2aW91c2x5IHNldHVwIHF1YWQgaW4gdGhlIGdpdmVuIGNvbG9yLgotICogQHBhcmFt
IHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRv
IHVzZS4KLSAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBjb2xvciBUaGUgY29sb3IgdG8gZHJh
dyB3aXRoLiBBIDQKLSAqICAgICAgICBlbGVtZW50IGFycmF5IHdoZXJlIGVhY2ggZWxlbWVudCBp
cyBpbiB0aGUgcmFuZ2UgMCB0bwotICogICAgICAgIDEuCi0gKi8KLXZhciBkcmF3RmxvYXRDb2xv
clF1YWQgPSBmdW5jdGlvbihnbCwgY29sb3IpIHsKLSAgdmFyIHByb2dyYW0gPSBnbC5nZXRQYXJh
bWV0ZXIoZ2wuQ1VSUkVOVF9QUk9HUkFNKTsKLSAgdmFyIGNvbG9yTG9jYXRpb24gPSBnbC5nZXRV
bmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgInVfY29sb3IiKTsKLSAgZ2wudW5pZm9ybTRmdihjb2xv
ckxvY2F0aW9uLCBjb2xvcik7Ci0gIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCA2KTsK
LX07Ci0KLQotLyoqCi0gKiBEcmF3cyBhIHByZXZpb3VzbHkgc2V0dXAgcXVhZCBpbiB0aGUgZ2l2
ZW4gY29sb3IuCi0gKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJH
TFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgotICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGNv
bG9yIFRoZSBjb2xvciB0byBkcmF3IHdpdGguIEEgNAotICogICAgICAgIGVsZW1lbnQgYXJyYXkg
d2hlcmUgZWFjaCBlbGVtZW50IGlzIGluIHRoZSByYW5nZSAwIHRvCi0gKiAgICAgICAgMjU1Lgot
ICovCi12YXIgZHJhd1VCeXRlQ29sb3JRdWFkID0gZnVuY3Rpb24oZ2wsIGNvbG9yKSB7Ci0gIGRy
YXdGbG9hdENvbG9yUXVhZChnbCwgdWJ5dGVDb2xvclRvRmxvYXRDb2xvcihjb2xvcikpOwotfTsK
LQotLyoqCi0gKiBEcmF3cyBhIHByZXZpb3VzbHkgc2V0dXBVbml0UXVhZC4KLSAqIEBwYXJhbSB7
IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1
c2UuCi0gKi8KLXZhciBkcmF3VW5pdFF1YWQgPSBmdW5jdGlvbihnbCkgewotICBnbC5kcmF3QXJy
YXlzKGdsLlRSSUFOR0xFUywgMCwgNik7Ci19OwotCi12YXIgZHVtbXlTZXRQcm9ncmFtQW5kRHJh
d05vdGhpbmcgPSBmdW5jdGlvbihnbCkgewotICBpZiAoIWdsLl93dHVEdW1teVByb2dyYW0pIHsK
LSAgICBnbC5fd3R1RHVtbXlQcm9ncmFtID0gc2V0dXBQcm9ncmFtKGdsLCBbCi0gICAgICAidm9p
ZCBtYWluKCkgeyBnbF9Qb3NpdGlvbiA9IHZlYzQoMC4wKTsgfSIsCi0gICAgICAidm9pZCBtYWlu
KCkgeyBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7IH0iCi0gICAgXSwgW10sIFtdKTsKLSAgfQot
ICBnbC51c2VQcm9ncmFtKGdsLl93dHVEdW1teVByb2dyYW0pOwotICBnbC5kcmF3QXJyYXlzKGds
LlRSSUFOR0xFUywgMCwgMyk7Ci19OwotCi0vKioKLSAqIENsZWFycyB0aGVuIERyYXdzIGEgcHJl
dmlvdXNseSBzZXR1cFVuaXRRdWFkLgotICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0
fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KLSAqIEBwYXJhbSB7IUFycmF5
LjxudW1iZXI+fSBvcHRfY29sb3IgVGhlIGNvbG9yIHRvIGZpbGwgY2xlYXIgd2l0aCBiZWZvcmUK
LSAqICAgICAgICBkcmF3aW5nLiBBIDQgZWxlbWVudCBhcnJheSB3aGVyZSBlYWNoIGVsZW1lbnQg
aXMgaW4gdGhlIHJhbmdlIDAgdG8KLSAqICAgICAgICAyNTUuIERlZmF1bHQgWzI1NSwgMjU1LCAy
NTUsIDI1NV0KLSAqLwotdmFyIGNsZWFyQW5kRHJhd1VuaXRRdWFkID0gZnVuY3Rpb24oZ2wsIG9w
dF9jb2xvcikgewotICBvcHRfY29sb3IgPSBvcHRfY29sb3IgfHwgWzI1NSwgMjU1LCAyNTUsIDI1
NV07Ci0gIGdsLmNsZWFyQ29sb3IoCi0gICAgICBvcHRfY29sb3JbMF0gLyAyNTUsCi0gICAgICBv
cHRfY29sb3JbMV0gLyAyNTUsCi0gICAgICBvcHRfY29sb3JbMl0gLyAyNTUsCi0gICAgICBvcHRf
Y29sb3JbM10gLyAyNTUpOwotICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQ
VEhfQlVGRkVSX0JJVCk7Ci0gIGRyYXdVbml0UXVhZChnbCk7Ci19OwotCi0vKioKLSAqIERyYXdz
IGEgcXVhZCBwcmV2aW91c2x5IHNldHVwIHdpdGggc2V0dXBJbmRleGVkUXVhZC4KLSAqIEBwYXJh
bSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0
byB1c2UuCi0gKiBAcGFyYW0ge251bWJlcn0gZ3JpZFJlcyBSZXNvbHV0aW9uIG9mIGdyaWQuCi0g
Ki8KLXZhciBkcmF3SW5kZXhlZFF1YWQgPSBmdW5jdGlvbihnbCwgZ3JpZFJlcykgewotICBnbC5k
cmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBncmlkUmVzICogZ3JpZFJlcyAqIDYsIGdsLlVOU0lH
TkVEX1NIT1JULCAwKTsKLX07Ci0KLS8qKgotICogRHJhd3MgYSBwcmV2aW91c2x5IHNldHVwSW5k
ZXhlZFF1YWQKLSAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdM
UmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCi0gKiBAcGFyYW0ge251bWJlcn0gZ3JpZFJlcyBSZXNv
bHV0aW9uIG9mIGdyaWQuCi0gKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gb3B0X2NvbG9yIFRo
ZSBjb2xvciB0byBmaWxsIGNsZWFyIHdpdGggYmVmb3JlCi0gKiAgICAgICAgZHJhd2luZy4gQSA0
IGVsZW1lbnQgYXJyYXkgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGluIHRoZSByYW5nZSAwIHRvCi0g
KiAgICAgICAgMjU1LiBEZWZhdWx0IFsyNTUsIDI1NSwgMjU1LCAyNTVdCi0gKi8KLXZhciBjbGVh
ckFuZERyYXdJbmRleGVkUXVhZCA9IGZ1bmN0aW9uKGdsLCBncmlkUmVzLCBvcHRfY29sb3IpIHsK
LSAgb3B0X2NvbG9yID0gb3B0X2NvbG9yIHx8IFsyNTUsIDI1NSwgMjU1LCAyNTVdOwotICBnbC5j
bGVhckNvbG9yKAotICAgICAgb3B0X2NvbG9yWzBdIC8gMjU1LAotICAgICAgb3B0X2NvbG9yWzFd
IC8gMjU1LAotICAgICAgb3B0X2NvbG9yWzJdIC8gMjU1LAotICAgICAgb3B0X2NvbG9yWzNdIC8g
MjU1KTsKLSAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZFUl9C
SVQpOwotICBkcmF3SW5kZXhlZFF1YWQoZ2wsIGdyaWRSZXMpOwotfTsKLQotLyoqCi0gKiBDbGlw
cyBhIHJhbmdlIHRvIG1pbiwgbWF4Ci0gKiAoRWcuIGNsaXBUb1JhbmdlKC01LDcsMCwyMCkgd291
bGQgcmV0dXJuIHt2YWx1ZTowLGV4dGVudDoyfQotICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIHN0
YXJ0IG9mIHJhbmdlCi0gKiBAcGFyYW0ge251bWJlcn0gZXh0ZW50IGV4dGVudCBvZiByYW5nZQot
ICogQHBhcmFtIHtudW1iZXJ9IG1pbiBtaW4uCi0gKiBAcGFyYW0ge251bWJlcn0gbWF4IG1heC4K
LSAqIEByZXR1cm4geyF7dmFsdWU6bnVtYmVyLGV4dGVudDpudW1iZXJ9fSBUaGUgY2xpcHBlZCB2
YWx1ZS4KLSAqLwotdmFyIGNsaXBUb1JhbmdlID0gZnVuY3Rpb24odmFsdWUsIGV4dGVudCwgbWlu
LCBtYXgpIHsKLSAgaWYgKHZhbHVlIDwgbWluKSB7Ci0gICAgZXh0ZW50IC09IG1pbiAtIHZhbHVl
OwotICAgIHZhbHVlID0gbWluOwotICB9Ci0gIHZhciBlbmQgPSB2YWx1ZSArIGV4dGVudDsKLSAg
aWYgKGVuZCA+IG1heCkgewotICAgIGV4dGVudCAtPSBlbmQgLSBtYXg7Ci0gIH0KLSAgaWYgKGV4
dGVudCA8IDApIHsKLSAgICB2YWx1ZSA9IG1heDsKLSAgICBleHRlbnQgPSAwOwotICB9Ci0gIHJl
dHVybiB7dmFsdWU6dmFsdWUsIGV4dGVudDogZXh0ZW50fTsKLX07Ci0KLS8qKgotICogRGV0ZXJt
aW5lcyBpZiB0aGUgcGFzc2VkIGNvbnRleHQgaXMgYW4gaW5zdGFuY2Ugb2YgYSBXZWJHTFJlbmRl
cmluZ0NvbnRleHQKLSAqIG9yIGxhdGVyIHZhcmlhbnQgKGxpa2UgV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dCkKLSAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dH0gY3R4IFRoZSBjb250ZXh0
IHRvIGNoZWNrLgotICovCi12YXIgaXNXZWJHTENvbnRleHQgPSBmdW5jdGlvbihjdHgpIHsKLSAg
aWYgKGN0eCBpbnN0YW5jZW9mIFdlYkdMUmVuZGVyaW5nQ29udGV4dCkKLSAgICByZXR1cm4gdHJ1
ZTsKLQotICBpZiAoJ1dlYkdMMlJlbmRlcmluZ0NvbnRleHQnIGluIHdpbmRvdyAmJiBjdHggaW5z
dGFuY2VvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KQotICAgIHJldHVybiB0cnVlOwotCi0gIHJl
dHVybiBmYWxzZTsKLX07Ci0KLS8qKgotICogQ3JlYXRlcyBhIGNoZWNrIHJlY3QgaXMgdXNlZCBi
eSBjaGVja0NhbnZhc1JlY3RzLgotICogQHBhcmFtIHtudW1iZXJ9IHggbGVmdCBjb3JuZXIgb2Yg
cmVnaW9uIHRvIGNoZWNrLgotICogQHBhcmFtIHtudW1iZXJ9IHkgYm90dG9tIGNvcm5lciBvZiBy
ZWdpb24gdG8gY2hlY2sgaW4gY2FzZSBvZiBjaGVja2luZyBmcm9tCi0gKiAgICAgICAgYSBHTCBj
b250ZXh0IG9yIHRvcCBjb3JuZXIgaW4gY2FzZSBvZiBjaGVja2luZyBmcm9tIGEgMkQgY29udGV4
dC4KLSAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCB3aWR0aCBvZiByZWdpb24gdG8gY2hlY2suCi0g
KiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IHdpZHRoIG9mIHJlZ2lvbiB0byBjaGVjay4KLSAqIEBw
YXJhbSB7IUFycmF5LjxudW1iZXI+fSBjb2xvciBUaGUgY29sb3IgZXhwZWN0ZWQuIEEgNCBlbGVt
ZW50IGFycmF5IHdoZXJlCi0gKiAgICAgICAgZWFjaCBlbGVtZW50IGlzIGluIHRoZSByYW5nZSAw
IHRvIDI1NS4KLSAqIEBwYXJhbSB7c3RyaW5nfSBvcHRfbXNnIE1lc3NhZ2UgdG8gYXNzb2NpYXRl
IHdpdGggc3VjY2Vzcy4gRWcKLSAqICAgICAgICAoInNob3VsZCBiZSByZWQiKS4KLSAqIEBwYXJh
bSB7bnVtYmVyfSBvcHRfZXJyb3JSYW5nZSBPcHRpb25hbC4gQWNjZXB0YWJsZSBlcnJvciBpbgot
ICogICAgICAgIGNvbG9yIGNoZWNraW5nLiAwIGJ5IGRlZmF1bHQuCi0gKi8KLXZhciBtYWtlQ2hl
Y2tSZWN0ID0gZnVuY3Rpb24oeCwgeSwgd2lkdGgsIGhlaWdodCwgY29sb3IsIG1zZywgZXJyb3JS
YW5nZSkgewotICB2YXIgcmVjdCA9IHsKLSAgICAneCc6IHgsICd5JzogeSwKLSAgICAnd2lkdGgn
OiB3aWR0aCwgJ2hlaWdodCc6IGhlaWdodCwKLSAgICAnY29sb3InOiBjb2xvciwgJ21zZyc6IG1z
ZywKLSAgICAnZXJyb3JSYW5nZSc6IGVycm9yUmFuZ2UsCi0KLSAgICAnY2hlY2tSZWN0JzogZnVu
Y3Rpb24gKGJ1ZiwgbCwgYiwgdykgewotICAgICAgZm9yICh2YXIgcHggPSAoeCAtIGwpIDsgcHgg
PCAoeCArIHdpZHRoIC0gbCkgOyArK3B4KSB7Ci0gICAgICAgIGZvciAodmFyIHB5ID0gKHkgLSBi
KSA7IHB5IDwgKHkgKyBoZWlnaHQgLSBiKSA7ICsrcHkpIHsKLSAgICAgICAgICB2YXIgb2Zmc2V0
ID0gKHB5ICogdyArIHB4KSAqIDQ7Ci0gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2xv
ci5sZW5ndGg7ICsraikgewotICAgICAgICAgICAgaWYgKE1hdGguYWJzKGJ1ZltvZmZzZXQgKyBq
XSAtIGNvbG9yW2pdKSA+IGVycm9yUmFuZ2UpIHsKLSAgICAgICAgICAgICAgdGVzdEZhaWxlZCht
c2cpOwotICAgICAgICAgICAgICB2YXIgd2FzID0gYnVmW29mZnNldCArIDBdLnRvU3RyaW5nKCk7
Ci0gICAgICAgICAgICAgIGZvciAoaiA9IDE7IGogPCBjb2xvci5sZW5ndGg7ICsraikgewotICAg
ICAgICAgICAgICAgIHdhcyArPSAiLCIgKyBidWZbb2Zmc2V0ICsgal07Ci0gICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgZGVidWcoJ2F0ICgnICsgcHggKyAnLCAnICsgcHkgKwotICAgICAg
ICAgICAgICAgICAgICAnKSBleHBlY3RlZDogJyArIGNvbG9yICsgJyB3YXMgJyArIHdhcyk7Ci0g
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICAgIHRlc3RQYXNzZWQobXNnKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJu
IHJlY3Q7Ci19OwotCi0vKioKLSAqIENoZWNrcyB0aGF0IGEgcG9ydGlvbnMgb2YgYSBjYW52YXMg
b3IgdGhlIGN1cnJlbnRseSBhdHRhY2hlZCBmcmFtZWJ1ZmZlciBpcyAxIGNvbG9yLgotICogQHBh
cmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gZ2wg
VGhlCi0gKiAgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCBvciAyRCBjb250ZXh0IHRvIHVz
ZS4KLSAqIEBwYXJhbSB7IUFycmF5LjxjaGVja1JlY3Q+fSBhcnJheSBvZiByZWN0cyB0byBjaGVj
ayBmb3IgbWF0Y2hpbmcgY29sb3IuCi0gKi8KLXZhciBjaGVja0NhbnZhc1JlY3RzID0gZnVuY3Rp
b24oZ2wsIHJlY3RzKSB7Ci0gIGlmIChyZWN0cy5sZW5ndGggPiAwKSB7Ci0gICAgdmFyIGxlZnQg
PSByZWN0c1swXS54OwotICAgIHZhciByaWdodCA9IHJlY3RzWzBdLnggKyByZWN0c1sxXS53aWR0
aDsKLSAgICB2YXIgYm90dG9tID0gcmVjdHNbMF0ueTsKLSAgICB2YXIgdG9wID0gcmVjdHNbMF0u
eSArIHJlY3RzWzBdLmhlaWdodDsKLSAgICBmb3IgKHZhciBpID0gMTsgaSA8IHJlY3RzLmxlbmd0
aDsgKytpKSB7Ci0gICAgICBsZWZ0ID0gTWF0aC5taW4obGVmdCwgcmVjdHNbaV0ueCk7Ci0gICAg
ICByaWdodCA9IE1hdGgubWF4KHJpZ2h0LCByZWN0c1tpXS54ICsgcmVjdHNbaV0ud2lkdGgpOwot
ICAgICAgYm90dG9tID0gTWF0aC5taW4oYm90dG9tLCByZWN0c1tpXS55KTsKLSAgICAgIHRvcCA9
IE1hdGgubWF4KHRvcCwgcmVjdHNbaV0ueSArIHJlY3RzW2ldLmhlaWdodCk7Ci0gICAgfQotICAg
IHZhciB3aWR0aCA9IHJpZ2h0IC0gbGVmdDsKLSAgICB2YXIgaGVpZ2h0ID0gdG9wIC0gYm90dG9t
OwotICAgIHZhciBidWYgPSBuZXcgVWludDhBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpOwotICAg
IGdsLnJlYWRQaXhlbHMobGVmdCwgYm90dG9tLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5V
TlNJR05FRF9CWVRFLCBidWYpOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVjdHMubGVuZ3Ro
OyArK2kpIHsKLSAgICAgIHJlY3RzW2ldLmNoZWNrUmVjdChidWYsIGxlZnQsIGJvdHRvbSwgd2lk
dGgpOwotICAgIH0KLSAgfQotfTsKLQotLyoqCi0gKiBDaGVja3MgdGhhdCBhIHBvcnRpb24gb2Yg
YSBjYW52YXMgb3IgdGhlIGN1cnJlbnRseSBhdHRhY2hlZCBmcmFtZWJ1ZmZlciBpcyAxIGNvbG9y
LgotICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRH0gZ2wgVGhlCi0gKiAgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCBvciAyRCBjb250
ZXh0IHRvIHVzZS4KLSAqIEBwYXJhbSB7bnVtYmVyfSB4IGxlZnQgY29ybmVyIG9mIHJlZ2lvbiB0
byBjaGVjay4KLSAqIEBwYXJhbSB7bnVtYmVyfSB5IGJvdHRvbSBjb3JuZXIgb2YgcmVnaW9uIHRv
IGNoZWNrIGluIGNhc2Ugb2YgY2hlY2tpbmcgZnJvbQotICogICAgICAgIGEgR0wgY29udGV4dCBv
ciB0b3AgY29ybmVyIGluIGNhc2Ugb2YgY2hlY2tpbmcgZnJvbSBhIDJEIGNvbnRleHQuCi0gKiBA
cGFyYW0ge251bWJlcn0gd2lkdGggd2lkdGggb2YgcmVnaW9uIHRvIGNoZWNrLgotICogQHBhcmFt
IHtudW1iZXJ9IGhlaWdodCB3aWR0aCBvZiByZWdpb24gdG8gY2hlY2suCi0gKiBAcGFyYW0geyFB
cnJheS48bnVtYmVyPn0gY29sb3IgVGhlIGNvbG9yIGV4cGVjdGVkLiBBIDQgZWxlbWVudCBhcnJh
eSB3aGVyZQotICogICAgICAgIGVhY2ggZWxlbWVudCBpcyBpbiB0aGUgcmFuZ2UgMCB0byAyNTUu
Ci0gKiBAcGFyYW0ge251bWJlcn0gb3B0X2Vycm9yUmFuZ2UgT3B0aW9uYWwuIEFjY2VwdGFibGUg
ZXJyb3IgaW4KLSAqICAgICAgICBjb2xvciBjaGVja2luZy4gMCBieSBkZWZhdWx0LgotICogQHBh
cmFtIHshZnVuY3Rpb24oKX0gc2FtZUZuIEZ1bmN0aW9uIHRvIGNhbGwgaWYgYWxsIHBpeGVscwot
ICogICAgICAgIGFyZSB0aGUgc2FtZSBhcyBjb2xvci4KLSAqIEBwYXJhbSB7IWZ1bmN0aW9uKCl9
IGRpZmZlcmVudEZuIEZ1bmN0aW9uIHRvIGNhbGwgaWYgYSBwaXhlbAotICogICAgICAgIGlzIGRp
ZmZlcmVudCB0aGFuIGNvbG9yCi0gKiBAcGFyYW0geyFmdW5jdGlvbigpfSBsb2dGbiBGdW5jdGlv
biB0byBjYWxsIGZvciBsb2dnaW5nLgotICogQHBhcmFtIHtUeXBlZEFycmF5fSBvcHRfcmVhZEJh
Y2tCdWYgb3B0aW9uYWwgYnVmZmVyIHRvIHJlYWQgYmFjayBpbnRvLgotICogICAgICAgIFR5cGlj
YWxseSBwYXNzZWQgdG8gZWl0aGVyIHJldXNlIGJ1ZmZlciwgb3Igc3VwcG9ydCByZWFkYmFja3Mg
ZnJvbQotICogICAgICAgIGZsb2F0aW5nLXBvaW50L25vcm0xNiBmcmFtZWJ1ZmZlcnMuCi0gKiBA
cGFyYW0ge0dMZW51bX0gb3B0X3JlYWRCYWNrVHlwZSBvcHRpb25hbCByZWFkIGJhY2sgdHlwZSwg
ZGVmYXVsdGluZyB0bwotICogICAgICAgIGdsLlVOU0lHTkVEX0JZVEUuIENhbiBiZSB1c2VkIHRv
IHN1cHBvcnQgcmVhZGJhY2sgZnJvbSBmbG9hdGluZy1wb2ludAotICogICAgICAgIC9ub3JtMTYg
ZnJhbWVidWZmZXJzLgotICogQHBhcmFtIHtHTGVudW19IG9wdF9yZWFkQmFja0Zvcm1hdCBvcHRp
b25hbCByZWFkIGJhY2sgZm9ybWF0LCBkZWZhdWx0aW5nIHRvCi0gKiAgICAgICAgZ2wuUkdCQS4g
Q2FuIGJlIHVzZWQgdG8gc3VwcG9ydCByZWFkYmFjayBmcm9tIG5vcm0xNgotICogICAgICAgIGZy
YW1lYnVmZmVycy4KLSAqLwotdmFyIGNoZWNrQ2FudmFzUmVjdENvbG9yID0gZnVuY3Rpb24oZ2ws
IHgsIHksIHdpZHRoLCBoZWlnaHQsIGNvbG9yLCBvcHRfZXJyb3JSYW5nZSwgc2FtZUZuLCBkaWZm
ZXJlbnRGbiwgbG9nRm4sIG9wdF9yZWFkQmFja0J1Ziwgb3B0X3JlYWRCYWNrVHlwZSwgb3B0X3Jl
YWRCYWNrRm9ybWF0KSB7Ci0gIGlmIChpc1dlYkdMQ29udGV4dChnbCkgJiYgIWdsLmdldFBhcmFt
ZXRlcihnbC5GUkFNRUJVRkZFUl9CSU5ESU5HKSkgewotICAgIC8vIFdlJ3JlIHJlYWRpbmcgdGhl
IGJhY2tidWZmZXIgc28gY2xpcC4KLSAgICB2YXIgeHIgPSBjbGlwVG9SYW5nZSh4LCB3aWR0aCwg
MCwgZ2wuY2FudmFzLndpZHRoKTsKLSAgICB2YXIgeXIgPSBjbGlwVG9SYW5nZSh5LCBoZWlnaHQs
IDAsIGdsLmNhbnZhcy5oZWlnaHQpOwotICAgIGlmICgheHIuZXh0ZW50IHx8ICF5ci5leHRlbnQp
IHsKLSAgICAgIGxvZ0ZuKCJjaGVja2luZyByZWN0OiBlZmZlY3RpdmUgd2lkdGggb3IgaGVpZ2h0
IGlzIHplcm8iKTsKLSAgICAgIHNhbWVGbigpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB4
ID0geHIudmFsdWU7Ci0gICAgeSA9IHlyLnZhbHVlOwotICAgIHdpZHRoID0geHIuZXh0ZW50Owot
ICAgIGhlaWdodCA9IHlyLmV4dGVudDsKLSAgfQotICB2YXIgZXJyb3JSYW5nZSA9IG9wdF9lcnJv
clJhbmdlIHx8IDA7Ci0gIGlmICghZXJyb3JSYW5nZS5sZW5ndGgpIHsKLSAgICBlcnJvclJhbmdl
ID0gW2Vycm9yUmFuZ2UsIGVycm9yUmFuZ2UsIGVycm9yUmFuZ2UsIGVycm9yUmFuZ2VdCi0gIH0K
LSAgdmFyIGJ1ZjsKLSAgaWYgKGlzV2ViR0xDb250ZXh0KGdsKSkgewotICAgIGJ1ZiA9IG9wdF9y
ZWFkQmFja0J1ZiA/IG9wdF9yZWFkQmFja0J1ZiA6IG5ldyBVaW50OEFycmF5KHdpZHRoICogaGVp
Z2h0ICogNCk7Ci0gICAgdmFyIHJlYWRCYWNrVHlwZSA9IG9wdF9yZWFkQmFja1R5cGUgPyBvcHRf
cmVhZEJhY2tUeXBlIDogZ2wuVU5TSUdORURfQllURTsKLSAgICB2YXIgcmVhZEJhY2tGb3JtYXQg
PSBvcHRfcmVhZEJhY2tGb3JtYXQgPyBvcHRfcmVhZEJhY2tGb3JtYXQgOiBnbC5SR0JBOwotICAg
IGdsLnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmVhZEJhY2tGb3JtYXQsIHJlYWRC
YWNrVHlwZSwgYnVmKTsKLSAgfSBlbHNlIHsKLSAgICBidWYgPSBnbC5nZXRJbWFnZURhdGEoeCwg
eSwgd2lkdGgsIGhlaWdodCkuZGF0YTsKLSAgfQotICBmb3IgKHZhciBpID0gMDsgaSA8IHdpZHRo
ICogaGVpZ2h0OyArK2kpIHsKLSAgICB2YXIgb2Zmc2V0ID0gaSAqIDQ7Ci0gICAgZm9yICh2YXIg
aiA9IDA7IGogPCBjb2xvci5sZW5ndGg7ICsraikgewotICAgICAgaWYgKE1hdGguYWJzKGJ1Zltv
ZmZzZXQgKyBqXSAtIGNvbG9yW2pdKSA+IGVycm9yUmFuZ2Vbal0pIHsKLSAgICAgICAgdmFyIHdh
cyA9IGJ1ZltvZmZzZXQgKyAwXS50b1N0cmluZygpOwotICAgICAgICBmb3IgKGogPSAxOyBqIDwg
Y29sb3IubGVuZ3RoOyArK2opIHsKLSAgICAgICAgICB3YXMgKz0gIiwiICsgYnVmW29mZnNldCAr
IGpdOwotICAgICAgICB9Ci0gICAgICAgIGRpZmZlcmVudEZuKCdhdCAoJyArICh4ICsgKGkgJSB3
aWR0aCkpICsgJywgJyArICh5ICsgTWF0aC5mbG9vcihpIC8gd2lkdGgpKSArCi0gICAgICAgICAg
ICAgICAgICAgICcpIGV4cGVjdGVkOiAnICsgY29sb3IgKyAnIHdhcyAnICsgd2FzLCBidWYpOwot
ICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHNhbWVGbigpOwotfTsKLQot
LyoqCi0gKiBDaGVja3MgdGhhdCBhIHBvcnRpb24gb2YgYSBjYW52YXMgb3IgdGhlIGN1cnJlbnRs
eSBhdHRhY2hlZCBmcmFtZWJ1ZmZlciBpcyAxIGNvbG9yLgotICogQHBhcmFtIHshV2ViR0xSZW5k
ZXJpbmdDb250ZXh0fENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gZ2wgVGhlCi0gKiAgICAgICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dCBvciAyRCBjb250ZXh0IHRvIHVzZS4KLSAqIEBwYXJhbSB7
bnVtYmVyfSB4IGxlZnQgY29ybmVyIG9mIHJlZ2lvbiB0byBjaGVjay4KLSAqIEBwYXJhbSB7bnVt
YmVyfSB5IGJvdHRvbSBjb3JuZXIgb2YgcmVnaW9uIHRvIGNoZWNrIGluIGNhc2Ugb2YgY2hlY2tp
bmcgZnJvbQotICogICAgICAgIGEgR0wgY29udGV4dCBvciB0b3AgY29ybmVyIGluIGNhc2Ugb2Yg
Y2hlY2tpbmcgZnJvbSBhIDJEIGNvbnRleHQuCi0gKiBAcGFyYW0ge251bWJlcn0gd2lkdGggd2lk
dGggb2YgcmVnaW9uIHRvIGNoZWNrLgotICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCB3aWR0aCBv
ZiByZWdpb24gdG8gY2hlY2suCi0gKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gY29sb3IgVGhl
IGNvbG9yIGV4cGVjdGVkLiBBIDQgZWxlbWVudCBhcnJheSB3aGVyZQotICogICAgICAgIGVhY2gg
ZWxlbWVudCBpcyBpbiB0aGUgcmFuZ2UgMCB0byAyNTUuCi0gKiBAcGFyYW0ge3N0cmluZ30gb3B0
X21zZyBNZXNzYWdlIHRvIGFzc29jaWF0ZSB3aXRoIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4gRWcKLSAq
ICAgICAgICAoInNob3VsZCBiZSByZWQiKS4KLSAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfZXJyb3JS
YW5nZSBPcHRpb25hbC4gQWNjZXB0YWJsZSBlcnJvciBpbgotICogICAgICAgIGNvbG9yIGNoZWNr
aW5nLiAwIGJ5IGRlZmF1bHQuCi0gKiBAcGFyYW0ge1R5cGVkQXJyYXl9IG9wdF9yZWFkQmFja0J1
ZiBvcHRpb25hbCBidWZmZXIgdG8gcmVhZCBiYWNrIGludG8uCi0gKiAgICAgICAgVHlwaWNhbGx5
IHBhc3NlZCB0byBlaXRoZXIgcmV1c2UgYnVmZmVyLCBvciBzdXBwb3J0IHJlYWRiYWNrcyBmcm9t
Ci0gKiAgICAgICAgZmxvYXRpbmctcG9pbnQvbm9ybTE2IGZyYW1lYnVmZmVycy4KLSAqIEBwYXJh
bSB7R0xlbnVtfSBvcHRfcmVhZEJhY2tUeXBlIG9wdGlvbmFsIHJlYWQgYmFjayB0eXBlLCBkZWZh
dWx0aW5nIHRvCi0gKiAgICAgICAgZ2wuVU5TSUdORURfQllURS4gQ2FuIGJlIHVzZWQgdG8gc3Vw
cG9ydCByZWFkYmFjayBmcm9tIGZsb2F0aW5nLXBvaW50Ci0gKiAgICAgICAgL25vcm0xNiBmcmFt
ZWJ1ZmZlcnMuCi0gKiBAcGFyYW0ge0dMZW51bX0gb3B0X3JlYWRCYWNrRm9ybWF0IG9wdGlvbmFs
IHJlYWQgYmFjayBmb3JtYXQsIGRlZmF1bHRpbmcgdG8KLSAqICAgICAgICBnbC5SR0JBLiBDYW4g
YmUgdXNlZCB0byBzdXBwb3J0IHJlYWRiYWNrIGZyb20gZmxvYXRpbmctcG9pbnQKLSAqICAgICAg
ICAvbm9ybTE2IGZyYW1lYnVmZmVycy4KLSAqLwotdmFyIGNoZWNrQ2FudmFzUmVjdCA9IGZ1bmN0
aW9uKGdsLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjb2xvciwgb3B0X21zZywgb3B0X2Vycm9yUmFu
Z2UsIG9wdF9yZWFkQmFja0J1Ziwgb3B0X3JlYWRCYWNrVHlwZSwgb3B0X3JlYWRCYWNrRm9ybWF0
KSB7Ci0gIGNoZWNrQ2FudmFzUmVjdENvbG9yKAotICAgICAgZ2wsIHgsIHksIHdpZHRoLCBoZWln
aHQsIGNvbG9yLCBvcHRfZXJyb3JSYW5nZSwKLSAgICAgIGZ1bmN0aW9uKCkgewotICAgICAgICB2
YXIgbXNnID0gb3B0X21zZzsKLSAgICAgICAgaWYgKG1zZyA9PT0gdW5kZWZpbmVkKQotICAgICAg
ICAgIG1zZyA9ICJzaG91bGQgYmUgIiArIGNvbG9yLnRvU3RyaW5nKCk7Ci0gICAgICAgIHRlc3RQ
YXNzZWQobXNnKTsKLSAgICAgIH0sCi0gICAgICBmdW5jdGlvbihkaWZmZXJlbnRNc2cpIHsKLSAg
ICAgICAgdmFyIG1zZyA9IG9wdF9tc2c7Ci0gICAgICAgIGlmIChtc2cgPT09IHVuZGVmaW5lZCkK
LSAgICAgICAgICBtc2cgPSAic2hvdWxkIGJlICIgKyBjb2xvci50b1N0cmluZygpOwotICAgICAg
ICB0ZXN0RmFpbGVkKG1zZyArICJcbiIgKyBkaWZmZXJlbnRNc2cpOwotICAgICAgfSwKLSAgICAg
IGRlYnVnLAotICAgICAgb3B0X3JlYWRCYWNrQnVmLAotICAgICAgb3B0X3JlYWRCYWNrVHlwZSwK
LSAgICAgIG9wdF9yZWFkQmFja0Zvcm1hdCk7Ci19OwotCi0vKioKLSAqIENoZWNrcyB0aGF0IGFu
IGVudGlyZSBjYW52YXMgb3IgdGhlIGN1cnJlbnRseSBhdHRhY2hlZCBmcmFtZWJ1ZmZlciBpcyAx
IGNvbG9yLgotICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRH0gZ2wgVGhlCi0gKiAgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCBvciAy
RCBjb250ZXh0IHRvIHVzZS4KLSAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBjb2xvciBUaGUg
Y29sb3IgZXhwZWN0ZWQuIEEgNCBlbGVtZW50IGFycmF5IHdoZXJlCi0gKiAgICAgICAgZWFjaCBl
bGVtZW50IGlzIGluIHRoZSByYW5nZSAwIHRvIDI1NS4KLSAqIEBwYXJhbSB7c3RyaW5nfSBtc2cg
TWVzc2FnZSB0byBhc3NvY2lhdGUgd2l0aCBzdWNjZXNzLiBFZyAoInNob3VsZCBiZSByZWQiKS4K
LSAqIEBwYXJhbSB7bnVtYmVyfSBlcnJvclJhbmdlIE9wdGlvbmFsLiBBY2NlcHRhYmxlIGVycm9y
IGluCi0gKiAgICAgICAgY29sb3IgY2hlY2tpbmcuIDAgYnkgZGVmYXVsdC4KLSAqLwotdmFyIGNo
ZWNrQ2FudmFzID0gZnVuY3Rpb24oZ2wsIGNvbG9yLCBtc2csIGVycm9yUmFuZ2UpIHsKLSAgY2hl
Y2tDYW52YXNSZWN0KGdsLCAwLCAwLCBnbC5jYW52YXMud2lkdGgsIGdsLmNhbnZhcy5oZWlnaHQs
IGNvbG9yLCBtc2csIGVycm9yUmFuZ2UpOwotfTsKLQotLyoqCi0gKiBDaGVja3MgYSByZWN0YW5n
dWxhciBhcmVhIGJvdGggaW5zaWRlIHRoZSBhcmVhIGFuZCBvdXRzaWRlCi0gKiB0aGUgYXJlYS4K
LSAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dHxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkR9IGdsIFRoZQotICogICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQgb3IgMkQgY29udGV4
dCB0byB1c2UuCi0gKiBAcGFyYW0ge251bWJlcn0geCBsZWZ0IGNvcm5lciBvZiByZWdpb24gdG8g
Y2hlY2suCi0gKiBAcGFyYW0ge251bWJlcn0geSBib3R0b20gY29ybmVyIG9mIHJlZ2lvbiB0byBj
aGVjayBpbiBjYXNlIG9mIGNoZWNraW5nIGZyb20KLSAqICAgICAgICBhIEdMIGNvbnRleHQgb3Ig
dG9wIGNvcm5lciBpbiBjYXNlIG9mIGNoZWNraW5nIGZyb20gYSAyRCBjb250ZXh0LgotICogQHBh
cmFtIHtudW1iZXJ9IHdpZHRoIHdpZHRoIG9mIHJlZ2lvbiB0byBjaGVjay4KLSAqIEBwYXJhbSB7
bnVtYmVyfSBoZWlnaHQgd2lkdGggb2YgcmVnaW9uIHRvIGNoZWNrLgotICogQHBhcmFtIHshQXJy
YXkuPG51bWJlcj59IGlubmVyQ29sb3IgVGhlIGNvbG9yIGV4cGVjdGVkIGluc2lkZQotICogICAg
IHRoZSBhcmVhLiBBIDQgZWxlbWVudCBhcnJheSB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgaW4gdGhl
Ci0gKiAgICAgcmFuZ2UgMCB0byAyNTUuCi0gKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gb3V0
ZXJDb2xvciBUaGUgY29sb3IgZXhwZWN0ZWQKLSAqICAgICBvdXRzaWRlLiBBIDQgZWxlbWVudCBh
cnJheSB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlCi0gKiAgICAgcmFuZ2UgMCB0byAyNTUu
Ci0gKiBAcGFyYW0geyFudW1iZXJ9IG9wdF9lZGdlU2l6ZTogVGhlIG51bWJlciBvZiBwaXhlbHMg
dG8gc2tpcAotICogICAgIGFyb3VuZCB0aGUgZWRnZXMgb2YgdGhlIGFyZWEuIERlZmF1dCAwLgot
ICogQHBhcmFtIHshe3dpZHRoOm51bWJlciwgaGVpZ2h0Om51bWJlcn19IG9wdF9vdXRlckRpbWVu
c2lvbnMKLSAqICAgICBUaGUgb3V0ZXIgZGltZW5zaW9ucy4gRGVmYXVsdCB0aGUgc2l6ZSBvZiBn
bC5jYW52YXMuCi0gKi8KLXZhciBjaGVja0FyZWFJbkFuZE91dCA9IGZ1bmN0aW9uKGdsLCB4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBpbm5lckNvbG9yLCBvdXRlckNvbG9yLCBvcHRfZWRnZVNpemUsIG9w
dF9vdXRlckRpbWVuc2lvbnMpIHsKLSAgdmFyIG91dGVyRGltZW5zaW9ucyA9IG9wdF9vdXRlckRp
bWVuc2lvbnMgfHwgeyB3aWR0aDogZ2wuY2FudmFzLndpZHRoLCBoZWlnaHQ6IGdsLmNhbnZhcy5o
ZWlnaHQgfTsKLSAgdmFyIGVkZ2VTaXplID0gb3B0X2VkZ2VTaXplIHx8IDA7Ci0gIGNoZWNrQ2Fu
dmFzUmVjdChnbCwgeCArIGVkZ2VTaXplLCB5ICsgZWRnZVNpemUsIHdpZHRoIC0gZWRnZVNpemUg
KiAyLCBoZWlnaHQgLSBlZGdlU2l6ZSAqIDIsIGlubmVyQ29sb3IpOwotICBjaGVja0NhbnZhc1Jl
Y3QoZ2wsIDAsIDAsIHggLSBlZGdlU2l6ZSwgb3V0ZXJEaW1lbnNpb25zLmhlaWdodCwgb3V0ZXJD
b2xvcik7Ci0gIGNoZWNrQ2FudmFzUmVjdChnbCwgeCArIHdpZHRoICsgZWRnZVNpemUsIDAsIG91
dGVyRGltZW5zaW9ucy53aWR0aCAtIHggLSB3aWR0aCAtIGVkZ2VTaXplLCBvdXRlckRpbWVuc2lv
bnMuaGVpZ2h0LCBvdXRlckNvbG9yKTsKLSAgY2hlY2tDYW52YXNSZWN0KGdsLCAwLCAwLCBvdXRl
ckRpbWVuc2lvbnMud2lkdGgsIHkgLSBlZGdlU2l6ZSwgb3V0ZXJDb2xvcik7Ci0gIGNoZWNrQ2Fu
dmFzUmVjdChnbCwgMCwgeSArIGhlaWdodCArIGVkZ2VTaXplLCBvdXRlckRpbWVuc2lvbnMud2lk
dGgsIG91dGVyRGltZW5zaW9ucy5oZWlnaHQgLSB5IC0gaGVpZ2h0IC0gZWRnZVNpemUsIG91dGVy
Q29sb3IpOwotfTsKLQotLyoqCi0gKiBDaGVja3MgdGhhdCBhbiBlbnRpcmUgYnVmZmVyIG1hdGNo
ZXMgdGhlIGZsb2F0aW5nIHBvaW50IHZhbHVlcyBwcm92aWRlZC4KLSAqIChXZWJHTCAyLjAgb25s
eSkKLSAqIEBwYXJhbSB7IVdlYkdMMlJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0IHRvIHVzZS4KLSAqIEBwYXJhbSB7bnVtYmVyfSB0YXJnZXQgVGhlIGJ1ZmZl
ciB0YXJnZXQgdG8gYmluZCB0by4KLSAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBleHBlY3Rl
ZCBUaGUgdmFsdWVzIGV4cGVjdGVkLgotICogQHBhcmFtIHtzdHJpbmd9IG9wdF9tc2cgT3B0aW9u
YWwuIE1lc3NhZ2UgdG8gYXNzb2NpYXRlIHdpdGggc3VjY2Vzcy4gRWcgKCJzaG91bGQgYmUgcmVk
IikuCi0gKiBAcGFyYW0ge251bWJlcn0gb3B0X2Vycm9yUmFuZ2UgT3B0aW9uYWwuIEFjY2VwdGFi
bGUgZXJyb3IgaW4gdmFsdWUgY2hlY2tpbmcuIDAuMDAxIGJ5IGRlZmF1bHQuCi0gKi8KLXZhciBj
aGVja0Zsb2F0QnVmZmVyID0gZnVuY3Rpb24oZ2wsIHRhcmdldCwgZXhwZWN0ZWQsIG9wdF9tc2cs
IG9wdF9lcnJvclJhbmdlKSB7Ci0gIGlmIChvcHRfbXNnID09PSB1bmRlZmluZWQpCi0gICAgb3B0
X21zZyA9ICJidWZmZXIgc2hvdWxkIG1hdGNoIGV4cGVjdGVkIHZhbHVlcyI7Ci0KLSAgaWYgKG9w
dF9lcnJvclJhbmdlID09PSB1bmRlZmluZWQpCi0gICAgb3B0X2Vycm9yUmFuZ2UgPSAwLjAwMTsK
LQotICB2YXIgZmxvYXRBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoZXhwZWN0ZWQubGVuZ3RoKTsK
LSAgZ2wuZ2V0QnVmZmVyU3ViRGF0YSh0YXJnZXQsIDAsIGZsb2F0QXJyYXkpOwotCi0gIGZvciAo
dmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWQubGVuZ3RoOyBpKyspIHsKLSAgICBpZiAoTWF0aC5hYnMo
ZmxvYXRBcnJheVtpXSAtIGV4cGVjdGVkW2ldKSA+IG9wdF9lcnJvclJhbmdlKSB7Ci0gICAgICB0
ZXN0RmFpbGVkKG9wdF9tc2cpOwotICAgICAgZGVidWcoJ2F0IFsnICsgaSArICddIGV4cGVjdGVk
OiAnICsgZXhwZWN0ZWRbaV0gKyAnIHdhcyAnICsgZmxvYXRBcnJheVtpXSk7Ci0gICAgICByZXR1
cm47Ci0gICAgfQotICB9Ci0gIHRlc3RQYXNzZWQob3B0X21zZyk7Ci19OwotCi0vKioKLSAqIExv
YWRzIGEgdGV4dHVyZSwgY2FsbHMgY2FsbGJhY2sgd2hlbiBmaW5pc2hlZC4KLSAqIEBwYXJhbSB7
IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1
c2UuCi0gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFVSTCBvZiBpbWFnZSB0byBsb2FkCi0gKiBAcGFy
YW0ge2Z1bmN0aW9uKCFJbWFnZSk6IHZvaWR9IGNhbGxiYWNrIEZ1bmN0aW9uIHRoYXQgZ2V0cyBj
YWxsZWQgYWZ0ZXIKLSAqICAgICAgICBpbWFnZSBoYXMgbG9hZGVkCi0gKiBAcmV0dXJuIHshV2Vi
R0xUZXh0dXJlfSBUaGUgY3JlYXRlZCB0ZXh0dXJlLgotICovCi12YXIgbG9hZFRleHR1cmUgPSBm
dW5jdGlvbihnbCwgdXJsLCBjYWxsYmFjaykgewotICAgIHZhciB0ZXh0dXJlID0gZ2wuY3JlYXRl
VGV4dHVyZSgpOwotICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpOwot
ICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVS
LCBnbC5ORUFSRVNUKTsKLSAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRF
WFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7Ci0gICAgdmFyIGltYWdlID0gbmV3IEltYWdl
KCk7Ci0gICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIGdsLmJpbmRUZXh0
dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpOwotICAgICAgICBnbC5waXhlbFN0b3JlaShnbC5V
TlBBQ0tfRkxJUF9ZX1dFQkdMLCB0cnVlKTsKLSAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhU
VVJFXzJELCAwLCBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBpbWFnZSk7Ci0g
ICAgICAgIGNhbGxiYWNrKGltYWdlKTsKLSAgICB9OwotICAgIGltYWdlLnNyYyA9IHVybDsKLSAg
ICByZXR1cm4gdGV4dHVyZTsKLX07Ci0KLS8qKgotICogQ2hlY2tzIHdoZXRoZXIgdGhlIGJvdW5k
IHRleHR1cmUgaGFzIGV4cGVjdGVkIGRpbWVuc2lvbnMuIE9uZSBjb3JuZXIgcGl4ZWwKLSAqIG9m
IHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2hhbmdlZCBhcyBhIHNpZGUgZWZmZWN0LgotICogQHBhcmFt
IHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRv
IHVzZS4KLSAqIEBwYXJhbSB7IVdlYkdMVGV4dHVyZX0gdGV4dHVyZSBUaGUgdGV4dHVyZSB0byBj
aGVjay4KLSAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCBFeHBlY3RlZCB3aWR0aC4KLSAqIEBwYXJh
bSB7bnVtYmVyfSBoZWlnaHQgRXhwZWN0ZWQgaGVpZ2h0LgotICogQHBhcmFtIHtHTGVudW19IG9w
dF9mb3JtYXQgVGhlIHRleHR1cmUncyBmb3JtYXQuIERlZmF1bHRzIHRvIFJHQkEuCi0gKiBAcGFy
YW0ge0dMZW51bX0gb3B0X3R5cGUgVGhlIHRleHR1cmUncyB0eXBlLiBEZWZhdWx0cyB0byBVTlNJ
R05FRF9CWVRFLgotICovCi12YXIgY2hlY2tUZXh0dXJlU2l6ZSA9IGZ1bmN0aW9uKGdsLCB3aWR0
aCwgaGVpZ2h0LCBvcHRfZm9ybWF0LCBvcHRfdHlwZSkgewotICBvcHRfZm9ybWF0ID0gb3B0X2Zv
cm1hdCB8fCBnbC5SR0JBOwotICBvcHRfdHlwZSA9IG9wdF90eXBlIHx8IGdsLlVOU0lHTkVEX0JZ
VEU7Ci0KLSAgdmFyIG51bUVsZW1lbnRzID0gZ2V0VHlwZWRBcnJheUVsZW1lbnRzUGVyUGl4ZWwo
Z2wsIG9wdF9mb3JtYXQsIG9wdF90eXBlKTsKLSAgdmFyIGJ1ZiA9IG5ldyAoZ2xUeXBlVG9UeXBl
ZEFycmF5VHlwZShnbCwgb3B0X3R5cGUpKShudW1FbGVtZW50cyk7Ci0KLSAgdmFyIGVycm9ycyA9
IDA7Ci0gIGdsLnRleFN1YkltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgd2lkdGggLSAxLCBoZWln
aHQgLSAxLCAxLCAxLCBvcHRfZm9ybWF0LCBvcHRfdHlwZSwgYnVmKTsKLSAgaWYgKGdsLmdldEVy
cm9yKCkgIT0gZ2wuTk9fRVJST1IpIHsKLSAgICB0ZXN0RmFpbGVkKCJUZXh0dXJlIHdhcyBzbWFs
bGVyIHRoYW4gdGhlIGV4cGVjdGVkIHNpemUgIiArIHdpZHRoICsgIngiICsgaGVpZ2h0KTsKLSAg
ICArK2Vycm9yczsKLSAgfQotICBnbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHdp
ZHRoIC0gMSwgaGVpZ2h0LCAxLCAxLCBvcHRfZm9ybWF0LCBvcHRfdHlwZSwgYnVmKTsKLSAgaWYg
KGdsLmdldEVycm9yKCkgPT0gZ2wuTk9fRVJST1IpIHsKLSAgICB0ZXN0RmFpbGVkKCJUZXh0dXJl
IHdhcyB0YWxsZXIgdGhhbiAiICsgaGVpZ2h0KTsKLSAgICArK2Vycm9yczsKLSAgfQotICBnbC50
ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHdpZHRoLCBoZWlnaHQgLSAxLCAxLCAxLCBv
cHRfZm9ybWF0LCBvcHRfdHlwZSwgYnVmKTsKLSAgaWYgKGdsLmdldEVycm9yKCkgPT0gZ2wuTk9f
RVJST1IpIHsKLSAgICB0ZXN0RmFpbGVkKCJUZXh0dXJlIHdhcyB3aWRlciB0aGFuICIgKyB3aWR0
aCk7Ci0gICAgKytlcnJvcnM7Ci0gIH0KLSAgaWYgKGVycm9ycyA9PSAwKSB7Ci0gICAgdGVzdFBh
c3NlZCgiVGV4dHVyZSBoYWQgdGhlIGV4cGVjdGVkIHNpemUgIiArIHdpZHRoICsgIngiICsgaGVp
Z2h0KTsKLSAgfQotfTsKLQotLyoqCi0gKiBNYWtlcyBhIHNoYWxsb3cgY29weSBvZiBhbiBvYmpl
Y3QuCi0gKiBAcGFyYW0geyFPYmplY3R9IHNyYyBPYmplY3QgdG8gY29weQotICogQHJldHVybiB7
IU9iamVjdH0gVGhlIGNvcHkgb2Ygc3JjLgotICovCi12YXIgc2hhbGxvd0NvcHlPYmplY3QgPSBm
dW5jdGlvbihzcmMpIHsKLSAgdmFyIGRzdCA9IHt9OwotICBmb3IgKHZhciBhdHRyIGluIHNyYykg
ewotICAgIGlmIChzcmMuaGFzT3duUHJvcGVydHkoYXR0cikpIHsKLSAgICAgIGRzdFthdHRyXSA9
IHNyY1thdHRyXTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIGRzdDsKLX07Ci0KLS8qKgotICogQ2hl
Y2tzIGlmIGFuIGF0dHJpYnV0ZSBleGlzdHMgb24gYW4gb2JqZWN0IGNhc2UgaW5zZW5zaXRpdmUu
Ci0gKiBAcGFyYW0geyFPYmplY3R9IG9iaiBPYmplY3QgdG8gY2hlY2sKLSAqIEBwYXJhbSB7c3Ry
aW5nfSBhdHRyIE5hbWUgb2YgYXR0cmlidXRlIHRvIGxvb2sgZm9yLgotICogQHJldHVybiB7c3Ry
aW5nP30gVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBpZiBpdCBleGlzdHMsCi0gKiAgICAgICAg
IHVuZGVmaW5lZCBpZiBub3QuCi0gKi8KLXZhciBoYXNBdHRyaWJ1dGVDYXNlSW5zZW5zaXRpdmUg
PSBmdW5jdGlvbihvYmosIGF0dHIpIHsKLSAgdmFyIGxvd2VyID0gYXR0ci50b0xvd2VyQ2FzZSgp
OwotICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7Ci0gICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShr
ZXkpICYmIGtleS50b0xvd2VyQ2FzZSgpID09IGxvd2VyKSB7Ci0gICAgICByZXR1cm4ga2V5Owot
ICAgIH0KLSAgfQotfTsKLQotLyoqCi0gKiBSZXR1cm5zIGEgbWFwIG9mIFVSTCBxdWVyeXN0cmlu
ZyBvcHRpb25zCi0gKiBAcmV0dXJuIHtPYmplY3Q/fSBPYmplY3QgY29udGFpbmluZyBhbGwgdGhl
IHZhbHVlcyBpbiB0aGUgVVJMIHF1ZXJ5c3RyaW5nCi0gKi8KLXZhciBnZXRVcmxPcHRpb25zID0g
KGZ1bmN0aW9uKCkgewotICB2YXIgX3VybE9wdGlvbnNQYXJzZWQgPSBmYWxzZTsKLSAgdmFyIF91
cmxPcHRpb25zID0ge307Ci0gIHJldHVybiBmdW5jdGlvbigpIHsKLSAgICBpZiAoIV91cmxPcHRp
b25zUGFyc2VkKSB7Ci0gICAgICB2YXIgcyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOwotICAgICAg
dmFyIHEgPSBzLmluZGV4T2YoIj8iKTsKLSAgICAgIHZhciBlID0gcy5pbmRleE9mKCIjIik7Ci0g
ICAgICBpZiAoZSA8IDApIHsKLSAgICAgICAgZSA9IHMubGVuZ3RoOwotICAgICAgfQotICAgICAg
dmFyIHF1ZXJ5ID0gcy5zdWJzdHJpbmcocSArIDEsIGUpOwotICAgICAgdmFyIHBhaXJzID0gcXVl
cnkuc3BsaXQoIiYiKTsKLSAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBwYWlycy5sZW5ndGg7
ICsraWkpIHsKLSAgICAgICAgdmFyIGtleVZhbHVlID0gcGFpcnNbaWldLnNwbGl0KCI9Iik7Ci0g
ICAgICAgIHZhciBrZXkgPSBrZXlWYWx1ZVswXTsKLSAgICAgICAgdmFyIHZhbHVlID0gZGVjb2Rl
VVJJQ29tcG9uZW50KGtleVZhbHVlWzFdKTsKLSAgICAgICAgX3VybE9wdGlvbnNba2V5XSA9IHZh
bHVlOwotICAgICAgfQotICAgICAgX3VybE9wdGlvbnNQYXJzZWQgPSB0cnVlOwotICAgIH0KLQot
ICAgIHJldHVybiBfdXJsT3B0aW9uczsKLSAgfQotfSkoKTsKLQotdmFyIGRlZmF1bHQzRENvbnRl
eHRWZXJzaW9uID0gMTsKLQotLyoqCi0gKiBTZXQgdGhlIGRlZmF1bHQgY29udGV4dCB2ZXJzaW9u
IGZvciBjcmVhdGUzRENvbnRleHQuCi0gKiBJbml0aWFsbHkgdGhlIGRlZmF1bHQgdmVyc2lvbiBp
cyAxLgotICogQHBhcmFtIHtudW1iZXJ9IERlZmF1bHQgdmVyc2lvbiBvZiBXZWJHTCBjb250ZXh0
cy4KLSAqLwotdmFyIHNldERlZmF1bHQzRENvbnRleHRWZXJzaW9uID0gZnVuY3Rpb24odmVyc2lv
bikgewotICAgIGRlZmF1bHQzRENvbnRleHRWZXJzaW9uID0gdmVyc2lvbjsKLX07Ci0KLS8qKgot
ICogR2V0IHRoZSBkZWZhdWx0IGNvbnRleCB2ZXJzaW9uIGZvciBjcmVhdGUzRENvbnRleHQuCi0g
KiBGaXJzdCBpdCBsb29rcyBhdCB0aGUgVVJJIG9wdGlvbiB8d2ViZ2xWZXJzaW9ufC4gSWYgaXQg
ZG9lcyBub3QgZXhpc3QsCi0gKiB0aGVuIGxvb2sgYXQgdGhlIGdsb2JhbCBkZWZhdWx0M0RDb250
ZXh0VmVyc2lvbiB2YXJpYWJsZS4KLSAqLwotdmFyIGdldERlZmF1bHQzRENvbnRleHRWZXJzaW9u
ID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHBhcnNlSW50KGdldFVybE9wdGlvbnMoKS53ZWJn
bFZlcnNpb24sIDEwKSB8fCBkZWZhdWx0M0RDb250ZXh0VmVyc2lvbjsKLX07Ci0KLS8qKgotICog
Q3JlYXRlcyBhIHdlYmdsIGNvbnRleHQuCi0gKiBAcGFyYW0geyFDYW52YXN8c3RyaW5nfSBvcHRf
Y2FudmFzIFRoZSBjYW52YXMgdGFnIHRvIGdldAotICogICAgIGNvbnRleHQgZnJvbS4gSWYgb25l
IGlzIG5vdCBwYXNzZWQgaW4gb25lIHdpbGwgYmUKLSAqICAgICBjcmVhdGVkLiBJZiBpdCdzIGEg
c3RyaW5nIGl0J3MgYXNzdW1lZCB0byBiZSB0aGUgaWQgb2YgYQotICogICAgIGNhbnZhcy4KLSAq
IEBwYXJhbSB7T2JqZWN0fSBvcHRfYXR0cmlidXRlcyBDb250ZXh0IGF0dHJpYnV0ZXMuCi0gKiBA
cGFyYW0geyFudW1iZXJ9IG9wdF92ZXJzaW9uIFZlcnNpb24gb2YgV2ViR0wgY29udGV4dCB0byBj
cmVhdGUuCi0gKiAgICAgVGhlIGRlZmF1bHQgdmVyc2lvbiBjYW4gYmUgc2V0IGJ5IGNhbGxpbmcg
c2V0RGVmYXVsdDNEQ29udGV4dFZlcnNpb24uCi0gKiBAcmV0dXJuIHshV2ViR0xSZW5kZXJpbmdD
b250ZXh0fSBUaGUgY3JlYXRlZCBjb250ZXh0LgotICovCi12YXIgY3JlYXRlM0RDb250ZXh0ID0g
ZnVuY3Rpb24ob3B0X2NhbnZhcywgb3B0X2F0dHJpYnV0ZXMsIG9wdF92ZXJzaW9uKSB7Ci0gIGlm
ICh3aW5kb3cuaW5pdFRlc3RpbmdIYXJuZXNzKSB7Ci0gICAgd2luZG93LmluaXRUZXN0aW5nSGFy
bmVzcygpOwotICB9Ci0gIHZhciBhdHRyaWJ1dGVzID0gc2hhbGxvd0NvcHlPYmplY3Qob3B0X2F0
dHJpYnV0ZXMgfHwge30pOwotICBpZiAoIWhhc0F0dHJpYnV0ZUNhc2VJbnNlbnNpdGl2ZShhdHRy
aWJ1dGVzLCAiYW50aWFsaWFzIikpIHsKLSAgICBhdHRyaWJ1dGVzLmFudGlhbGlhcyA9IGZhbHNl
OwotICB9Ci0gIGlmICghb3B0X3ZlcnNpb24pIHsKLSAgICBvcHRfdmVyc2lvbiA9IGdldERlZmF1
bHQzRENvbnRleHRWZXJzaW9uKCk7Ci0gIH0KLSAgb3B0X2NhbnZhcyA9IG9wdF9jYW52YXMgfHwg
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Ci0gIGlmICh0eXBlb2Ygb3B0X2NhbnZh
cyA9PSAnc3RyaW5nJykgewotICAgIG9wdF9jYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZChvcHRfY2FudmFzKTsKLSAgfQotICB2YXIgY29udGV4dCA9IG51bGw7Ci0KLSAgdmFyIG5hbWVz
OwotICBzd2l0Y2ggKG9wdF92ZXJzaW9uKSB7Ci0gICAgY2FzZSAyOgotICAgICAgbmFtZXMgPSBb
IndlYmdsMiJdOyBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgbmFtZXMgPSBbIndlYmdsIiwg
ImV4cGVyaW1lbnRhbC13ZWJnbCJdOyBicmVhazsKLSAgfQotCi0gIGZvciAodmFyIGkgPSAwOyBp
IDwgbmFtZXMubGVuZ3RoOyArK2kpIHsKLSAgICB0cnkgewotICAgICAgY29udGV4dCA9IG9wdF9j
YW52YXMuZ2V0Q29udGV4dChuYW1lc1tpXSwgYXR0cmlidXRlcyk7Ci0gICAgfSBjYXRjaCAoZSkg
ewotICAgIH0KLSAgICBpZiAoY29udGV4dCkgewotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0g
IGlmICghY29udGV4dCkgewotICAgIHRlc3RGYWlsZWQoIlVuYWJsZSB0byBmZXRjaCBXZWJHTCBy
ZW5kZXJpbmcgY29udGV4dCBmb3IgQ2FudmFzIik7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKCF3aW5k
b3cuX3d0dV9jb250ZXh0cykgewotICAgICAgd2luZG93Ll93dHVfY29udGV4dHMgPSBbXQotICAg
IH0KLSAgICB3aW5kb3cuX3d0dV9jb250ZXh0cy5wdXNoKGNvbnRleHQpOwotICB9Ci0gIHJldHVy
biBjb250ZXh0OwotfTsKLQotLyoqCi0gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZ2l2ZW4gY29u
dGV4dCBpcyBXZWJHTCAyLjAgb3IgZ3JlYXRlci4KLSAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5n
Q29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCi0gKiBAcmV0dXJu
IHtib29sZWFufSBUcnVlIGlmIHRoZSBnaXZlbiBjb250ZXh0IGlzIFdlYkdMIDIuMCBvciBncmVh
dGVyLgotICovCi12YXIgaXNXZWJHTDIgPSBmdW5jdGlvbihnbCkgewotICAvLyBEdWNrIHR5cGlu
ZyBpcyB1c2VkIHNvIHRoYXQgdGhlIGNvbmZvcm1hbmNlIHN1aXRlIGNhbiBiZSBydW4KLSAgLy8g
YWdhaW5zdCBsaWJyYXJpZXMgZW11bGF0aW5nIFdlYkdMIDEuMCBvbiB0b3Agb2YgV2ViR0wgMi4w
LgotICByZXR1cm4gISFnbC5kcmF3QXJyYXlzSW5zdGFuY2VkOwotfTsKLQotLyoqCi0gKiBEZWZp
bmVzIHRoZSBleGNlcHRpb24gdHlwZSBmb3IgYSBHTCBlcnJvci4KLSAqIEBjb25zdHJ1Y3Rvcgot
ICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuCi0gKiBAcGFyYW0g
e251bWJlcn0gZXJyb3IgR0wgZXJyb3IgY29kZQotICovCi1mdW5jdGlvbiBHTEVycm9yRXhjZXB0
aW9uIChtZXNzYWdlLCBlcnJvcikgewotICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKLSAgIHRo
aXMubmFtZSA9ICJHTEVycm9yRXhjZXB0aW9uIjsKLSAgIHRoaXMuZXJyb3IgPSBlcnJvcjsKLX07
Ci0KLS8qKgotICogV3JhcHMgYSBXZWJHTCBmdW5jdGlvbiB3aXRoIGEgZnVuY3Rpb24gdGhhdCB0
aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZXJlIGlzCi0gKiBhbiBlcnJvci4KLSAqIEBwYXJhbSB7
IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1
c2UuCi0gKiBAcGFyYW0ge3N0cmluZ30gZm5hbWUgTmFtZSBvZiBmdW5jdGlvbiB0byB3cmFwLgot
ICogQHJldHVybiB7ZnVuY3Rpb24oKX0gVGhlIHdyYXBwZWQgZnVuY3Rpb24uCi0gKi8KLXZhciBj
cmVhdGVHTEVycm9yV3JhcHBlciA9IGZ1bmN0aW9uKGNvbnRleHQsIGZuYW1lKSB7Ci0gIHJldHVy
biBmdW5jdGlvbigpIHsKLSAgICB2YXIgcnYgPSBjb250ZXh0W2ZuYW1lXS5hcHBseShjb250ZXh0
LCBhcmd1bWVudHMpOwotICAgIHZhciBlcnIgPSBjb250ZXh0LmdldEVycm9yKCk7Ci0gICAgaWYg
KGVyciAhPSBjb250ZXh0Lk5PX0VSUk9SKSB7Ci0gICAgICB2YXIgbXNnID0gIkdMIGVycm9yICIg
KyBnbEVudW1Ub1N0cmluZyhjb250ZXh0LCBlcnIpICsgIiBpbiAiICsgZm5hbWU7Ci0gICAgICB0
aHJvdyBuZXcgR0xFcnJvckV4Y2VwdGlvbihtc2csIGVycik7Ci0gICAgfQotICAgIHJldHVybiBy
djsKLSAgfTsKLX07Ci0KLS8qKgotICogQ3JlYXRlcyBhIFdlYkdMIGNvbnRleHQgd2hlcmUgYWxs
IGZ1bmN0aW9ucyBhcmUgd3JhcHBlZCB0byB0aHJvdyBhbiBleGNlcHRpb24KLSAqIGlmIHRoZXJl
IGlzIGFuIGVycm9yLgotICogQHBhcmFtIHshQ2FudmFzfSBjYW52YXMgVGhlIEhUTUwgY2FudmFz
IHRvIGdldCBhIGNvbnRleHQgZnJvbS4KLSAqIEBwYXJhbSB7T2JqZWN0fSBvcHRfYXR0cmlidXRl
cyBDb250ZXh0IGF0dHJpYnV0ZXMuCi0gKiBAcGFyYW0geyFudW1iZXJ9IG9wdF92ZXJzaW9uIFZl
cnNpb24gb2YgV2ViR0wgY29udGV4dCB0byBjcmVhdGUKLSAqIEByZXR1cm4geyFPYmplY3R9IFRo
ZSB3cmFwcGVkIGNvbnRleHQuCi0gKi8KLWZ1bmN0aW9uIGNyZWF0ZTNEQ29udGV4dFdpdGhXcmFw
cGVyVGhhdFRocm93c09uR0xFcnJvcihjYW52YXMsIG9wdF9hdHRyaWJ1dGVzLCBvcHRfdmVyc2lv
bikgewotICB2YXIgY29udGV4dCA9IGNyZWF0ZTNEQ29udGV4dChjYW52YXMsIG9wdF9hdHRyaWJ1
dGVzLCBvcHRfdmVyc2lvbik7Ci0gIHZhciB3cmFwID0ge307Ci0gIGZvciAodmFyIGkgaW4gY29u
dGV4dCkgewotICAgIHRyeSB7Ci0gICAgICBpZiAodHlwZW9mIGNvbnRleHRbaV0gPT0gJ2Z1bmN0
aW9uJykgewotICAgICAgICB3cmFwW2ldID0gY3JlYXRlR0xFcnJvcldyYXBwZXIoY29udGV4dCwg
aSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB3cmFwW2ldID0gY29udGV4dFtpXTsKLSAgICAg
IH0KLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICBlcnJvcigiY3JlYXRlQ29udGV4dFdyYXBwZXJU
aGF0VGhyb3dzT25HTEVycm9yOiBFcnJvciBhY2Nlc3NpbmcgIiArIGkpOwotICAgIH0KLSAgfQot
ICB3cmFwLmdldEVycm9yID0gZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gY29udGV4dC5nZXRF
cnJvcigpOwotICB9OwotICByZXR1cm4gd3JhcDsKLX07Ci0KLS8qKgotICogVGVzdHMgdGhhdCBh
biBldmFsdWF0ZWQgZXhwcmVzc2lvbiBnZW5lcmF0ZXMgYSBzcGVjaWZpYyBHTCBlcnJvci4KLSAq
IEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCB0byB1c2UuCi0gKiBAcGFyYW0ge251bWJlcnxBcnJheS48bnVtYmVyPn0gZ2xFcnJvcnMg
VGhlIGV4cGVjdGVkIGdsIGVycm9yIG9yIGFuIGFycmF5IG9mIGV4cGVjdGVkIGVycm9ycy4KLSAq
IEBwYXJhbSB7c3RyaW5nfSBldmFsU3RyIFRoZSBzdHJpbmcgdG8gZXZhbHVhdGUuCi0gKi8KLXZh
ciBzaG91bGRHZW5lcmF0ZUdMRXJyb3IgPSBmdW5jdGlvbihnbCwgZ2xFcnJvcnMsIGV2YWxTdHIs
IG9wdF9tc2cpIHsKLSAgdmFyIGV4Y2VwdGlvbjsKLSAgdHJ5IHsKLSAgICBldmFsKGV2YWxTdHIp
OwotICB9IGNhdGNoIChlKSB7Ci0gICAgZXhjZXB0aW9uID0gZTsKLSAgfQotICBpZiAoZXhjZXB0
aW9uKSB7Ci0gICAgdGVzdEZhaWxlZChldmFsU3RyICsgIiB0aHJldyBleGNlcHRpb24gIiArIGV4
Y2VwdGlvbik7Ci0gICAgcmV0dXJuIC0xOwotICB9IGVsc2UgewotICAgIGlmICghb3B0X21zZykg
ewotICAgICAgb3B0X21zZyA9ICJhZnRlciBldmFsdWF0aW5nOiAiICsgZXZhbFN0cjsKLSAgICB9
Ci0gICAgcmV0dXJuIGdsRXJyb3JTaG91bGRCZShnbCwgZ2xFcnJvcnMsIG9wdF9tc2cpOwotICB9
Ci19OwotCi0vKioKLSAqIFRlc3RzIHRoYXQgYW4gZXZhbHVhdGVkIGV4cHJlc3Npb24gZG9lcyBu
b3QgZ2VuZXJhdGUgYSBHTCBlcnJvci4KLSAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4
dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCi0gKiBAcGFyYW0ge3N0cmlu
Z30gZXZhbFN0ciBUaGUgc3RyaW5nIHRvIGV2YWx1YXRlLgotICovCi12YXIgZmFpbElmR0xFcnJv
ciA9IGZ1bmN0aW9uKGdsLCBldmFsU3RyKSB7Ci0gIHZhciBleGNlcHRpb247Ci0gIHRyeSB7Ci0g
ICAgZXZhbChldmFsU3RyKTsKLSAgfSBjYXRjaCAoZSkgewotICAgIGV4Y2VwdGlvbiA9IGU7Ci0g
IH0KLSAgaWYgKGV4Y2VwdGlvbikgewotICAgIHRlc3RGYWlsZWQoZXZhbFN0ciArICIgdGhyZXcg
ZXhjZXB0aW9uICIgKyBleGNlcHRpb24pOwotICB9IGVsc2UgewotICAgIGdsRXJyb3JTaG91bGRC
ZUltcGwoZ2wsIGdsLk5PX0VSUk9SLCBmYWxzZSwgImFmdGVyIGV2YWx1YXRpbmc6ICIgKyBldmFs
U3RyKTsKLSAgfQotfTsKLQotLyoqCi0gKiBUZXN0cyB0aGF0IHRoZSBmaXJzdCBlcnJvciBHTCBy
ZXR1cm5zIGlzIHRoZSBzcGVjaWZpZWQgZXJyb3IuCi0gKiBAcGFyYW0geyFXZWJHTFJlbmRlcmlu
Z0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgotICogQHBhcmFt
IHtudW1iZXJ8QXJyYXkuPG51bWJlcj59IGdsRXJyb3JzIFRoZSBleHBlY3RlZCBnbCBlcnJvciBv
ciBhbiBhcnJheSBvZiBleHBlY3RlZCBlcnJvcnMuCi0gKiBAcGFyYW0ge3N0cmluZ30gb3B0X21z
ZyBPcHRpb25hbCBhZGRpdGlvbmFsIG1lc3NhZ2UuCi0gKi8KLXZhciBnbEVycm9yU2hvdWxkQmUg
PSBmdW5jdGlvbihnbCwgZ2xFcnJvcnMsIG9wdF9tc2cpIHsKLSAgcmV0dXJuIGdsRXJyb3JTaG91
bGRCZUltcGwoZ2wsIGdsRXJyb3JzLCB0cnVlLCBvcHRfbXNnKTsKLX07Ci0KLS8qKgotICogVGVz
dHMgdGhhdCB0aGUgZ2l2ZW4gZnJhbWVidWZmZXIgaGFzIGEgc3BlY2lmaWMgc3RhdHVzCi0gKiBA
cGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQgdG8gdXNlLgotICogQHBhcmFtIHtudW1iZXJ8QXJyYXkuPG51bWJlcj59IGdsU3RhdHVzZXMg
VGhlIGV4cGVjdGVkIGdsCi0gKiAgICAgICAgc3RhdHVzIG9yIGFuIGFycmF5IG9mIGV4cGVjdGVk
IHN0YXR1c2VzLgotICogQHBhcmFtIHtzdHJpbmd9IG9wdF9tc2cgT3B0aW9uYWwgYWRkaXRpb25h
bCBtZXNzYWdlLgotICovCi12YXIgZnJhbWVidWZmZXJTdGF0dXNTaG91bGRCZSA9IGZ1bmN0aW9u
KGdsLCB0YXJnZXQsIGdsU3RhdHVzZXMsIG9wdF9tc2cpIHsKLSAgaWYgKCFnbFN0YXR1c2VzLmxl
bmd0aCkgewotICAgIGdsU3RhdHVzZXMgPSBbZ2xTdGF0dXNlc107Ci0gIH0KLSAgb3B0X21zZyA9
IG9wdF9tc2cgfHwgIiI7Ci0gIGNvbnN0IHN0YXR1cyA9IGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0
dXModGFyZ2V0KTsKLSAgY29uc3QgbmR4ID0gZ2xTdGF0dXNlcy5pbmRleE9mKHN0YXR1cyk7Ci0g
IGNvbnN0IGV4cGVjdGVkID0gZ2xTdGF0dXNlcy5tYXAoKHN0YXR1cykgPT4gewotICAgIHJldHVy
biBnbEVudW1Ub1N0cmluZyhnbCwgc3RhdHVzKTsKLSAgfSkuam9pbignIG9yICcpOwotICBpZiAo
bmR4IDwgMCkgewotICAgIGxldCBtc2cgPSAiY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyBleHBlY3Rl
ZCIgKyAoKGdsU3RhdHVzZXMubGVuZ3RoID4gMSkgPyAiIG9uZSBvZjogIiA6ICI6ICIpICsKLSAg
ICAgIGV4cGVjdGVkICsgICIuIFdhcyAiICsgZ2xFbnVtVG9TdHJpbmcoZ2wsIHN0YXR1cyk7Ci0g
ICAgaWYgKG9wdF9tc2cpIHsKLSAgICAgIG1zZyArPSAiOiAiICsgb3B0X21zZzsKLSAgICB9Ci0g
ICAgdGVzdEZhaWxlZChtc2cpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBsZXQgbXNnID0g
YGNoZWNrRnJhbWVidWZmZXJTdGF0dXMgd2FzICR7Z2xFbnVtVG9TdHJpbmcoZ2wsIHN0YXR1cyl9
YDsKLSAgaWYgKGdsU3RhdHVzZXMubGVuZ3RoID4gMSkgewotICAgIG1zZyArPSBgLCBvbmUgb2Y6
ICR7ZXhwZWN0ZWR9YDsKLSAgfQotICBpZiAob3B0X21zZykgewotICAgIG1zZyArPSAiOiAiICsg
b3B0X21zZzsKLSAgfQotICB0ZXN0UGFzc2VkKG1zZyk7Ci0gIHJldHVybiBbc3RhdHVzXTsKLX0K
LQotLyoqCi0gKiBUZXN0cyB0aGF0IHRoZSBmaXJzdCBlcnJvciBHTCByZXR1cm5zIGlzIHRoZSBz
cGVjaWZpZWQgZXJyb3IuIEFsbG93cyBzdXBwcmVzc2lvbiBvZiBzdWNjZXNzZXMuCi0gKiBAcGFy
YW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQg
dG8gdXNlLgotICogQHBhcmFtIHtudW1iZXJ8QXJyYXkuPG51bWJlcj59IGdsRXJyb3JzIFRoZSBl
eHBlY3RlZCBnbCBlcnJvciBvciBhbiBhcnJheSBvZiBleHBlY3RlZCBlcnJvcnMuCi0gKiBAcGFy
YW0ge2Jvb2xlYW59IHJlcG9ydFN1Y2Nlc3NlcyBXaGV0aGVyIHRvIHJlcG9ydCBzdWNjZXNzZXMg
YXMgcGFzc2VzLCBvciB0byBzaWxlbnRseSBwYXNzLgotICogQHBhcmFtIHtzdHJpbmd9IG9wdF9t
c2cgT3B0aW9uYWwgYWRkaXRpb25hbCBtZXNzYWdlLgotICovCi12YXIgZ2xFcnJvclNob3VsZEJl
SW1wbCA9IGZ1bmN0aW9uKGdsLCBnbEVycm9ycywgcmVwb3J0U3VjY2Vzc2VzLCBvcHRfbXNnKSB7
Ci0gIGlmICghZ2xFcnJvcnMubGVuZ3RoKSB7Ci0gICAgZ2xFcnJvcnMgPSBbZ2xFcnJvcnNdOwot
ICB9Ci0gIG9wdF9tc2cgPSBvcHRfbXNnIHx8ICIiOwotCi0gIGNvbnN0IGZuRXJyU3RyID0gZnVu
Y3Rpb24oZXJyVmFsKSB7Ci0gICAgaWYgKGVyclZhbCA9PSAwKSByZXR1cm4gIk5PX0VSUk9SIjsK
LSAgICByZXR1cm4gZ2xFbnVtVG9TdHJpbmcoZ2wsIGVyclZhbCk7Ci0gIH07Ci0KLSAgdmFyIGVy
ciA9IGdsLmdldEVycm9yKCk7Ci0gIHZhciBuZHggPSBnbEVycm9ycy5pbmRleE9mKGVycik7Ci0g
IHZhciBlcnJTdHJzID0gW107Ci0gIGZvciAodmFyIGlpID0gMDsgaWkgPCBnbEVycm9ycy5sZW5n
dGg7ICsraWkpIHsKLSAgICBlcnJTdHJzLnB1c2goZm5FcnJTdHIoZ2xFcnJvcnNbaWldKSk7Ci0g
IH0KLSAgdmFyIGV4cGVjdGVkID0gZXJyU3Rycy5qb2luKCIgb3IgIik7Ci0gIGlmIChuZHggPCAw
KSB7Ci0gICAgdmFyIG1zZyA9ICJnZXRFcnJvciBleHBlY3RlZCIgKyAoKGdsRXJyb3JzLmxlbmd0
aCA+IDEpID8gIiBvbmUgb2Y6ICIgOiAiOiAiKTsKLSAgICB0ZXN0RmFpbGVkKG1zZyArIGV4cGVj
dGVkICsgICIuIFdhcyAiICsgZm5FcnJTdHIoZXJyKSArICIgOiAiICsgb3B0X21zZyk7Ci0gIH0g
ZWxzZSBpZiAocmVwb3J0U3VjY2Vzc2VzKSB7Ci0gICAgdmFyIG1zZyA9ICJnZXRFcnJvciB3YXMg
IiArICgoZ2xFcnJvcnMubGVuZ3RoID4gMSkgPyAib25lIG9mOiAiIDogImV4cGVjdGVkIHZhbHVl
OiAiKTsKLSAgICB0ZXN0UGFzc2VkKG1zZyArIGV4cGVjdGVkICsgIiA6ICIgKyBvcHRfbXNnKTsK
LSAgfQotICByZXR1cm4gZXJyOwotfTsKLQotLyoqCi0gKiBUZXN0cyB0aGF0IGEgZnVuY3Rpb24g
dGhyb3dzIG9yIG5vdC4KLSAqIEBwYXJhbSB7IVdlYkdMQ29udGV4dH0gZ2wgVGhlIFdlYkdMQ29u
dGV4dCB0byB1c2UuCi0gKiBAcGFyYW0gdGhyb3dUeXBlIFR5cGUgb2YgdGhyb3duIGVycm9yIChl
LmcuIFR5cGVFcnJvciksIG9yIGZhbHNlLgotICogQHBhcmFtIHtzdHJpbmd9IGluZm8gSW5mbyBv
biB3aGF0J3MgYmVpbmcgdGVzdGVkCi0gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5j
IHRvIHRlc3QuCi0gKi8KLXZhciBzaG91bGRUaHJvdyA9IGZ1bmN0aW9uKGdsLCB0aHJvd1R5cGUs
IGluZm8sIGZ1bmMpIHsKLSAgd2hpbGUgKGdsLmdldEVycm9yKCkpIHt9Ci0KLSAgdmFyIHNob3Vs
ZFRocm93ID0gKHRocm93VHlwZSAhPSBmYWxzZSk7Ci0KLSAgdHJ5IHsKLSAgICBmdW5jKCk7Ci0K
LSAgICBpZiAoc2hvdWxkVGhyb3cpIHsKLSAgICAgIHRlc3RGYWlsZWQoIlNob3VsZCB0aHJvdyBh
ICIgKyB0aHJvd1R5cGUubmFtZSArICI6ICIgKyBpbmZvKTsKLSAgICB9IGVsc2UgewotICAgICAg
dGVzdFBhc3NlZCgiU2hvdWxkIG5vdCBoYXZlIHRocm93bjogIiArIGluZm8pOwotICAgIH0KLSAg
fSBjYXRjaCAoZSkgewotICAgIGlmIChzaG91bGRUaHJvdykgewotICAgICAgaWYgKGUgaW5zdGFu
Y2VvZiB0aHJvd1R5cGUpIHsKLSAgICAgICAgdGVzdFBhc3NlZCgiU2hvdWxkIHRocm93IGEgIiAr
IHRocm93VHlwZS5uYW1lICsgIjogIiArIGluZm8pOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAg
dGVzdEZhaWxlZCgiU2hvdWxkIHRocm93IGEgIiArIHRocm93VHlwZS5uYW1lICsgIiwgdGhyZXcg
IiArIGUubmFtZSArICI6ICIgKyBpbmZvKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg
dGVzdEZhaWxlZCgiU2hvdWxkIG5vdCBoYXZlIHRocm93bjogIiArIGluZm8pOwotICAgIH0KLQot
ICAgIGlmIChnbC5nZXRFcnJvcigpKSB7Ci0gICAgICB0ZXN0RmFpbGVkKCJTaG91bGQgbm90IGdl
bmVyYXRlIGFuIGVycm9yIHdoZW4gdGhyb3dpbmc6ICIgKyBpbmZvKTsKLSAgICB9Ci0gIH0KLQot
ICB3aGlsZSAoZ2wuZ2V0RXJyb3IoKSkge30KLX07Ci0KLS8qKgotICogTGlua3MgYSBXZWJHTCBw
cm9ncmFtLCB0aHJvd3MgaWYgdGhlcmUgYXJlIGVycm9ycy4KLSAqIEBwYXJhbSB7IVdlYkdMUmVu
ZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCi0gKiBA
cGFyYW0geyFXZWJHTFByb2dyYW19IHByb2dyYW0gVGhlIFdlYkdMUHJvZ3JhbSB0byBsaW5rLgot
ICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmcpOiB2b2lkfSBvcHRfZXJyb3JDYWxsYmFjayBjYWxs
YmFjayBmb3IgZXJyb3JzLgotICovCi12YXIgbGlua1Byb2dyYW0gPSBmdW5jdGlvbihnbCwgcHJv
Z3JhbSwgb3B0X2Vycm9yQ2FsbGJhY2spIHsKLSAgdmFyIGVyckZuID0gb3B0X2Vycm9yQ2FsbGJh
Y2sgfHwgdGVzdEZhaWxlZDsKLSAgLy8gTGluayB0aGUgcHJvZ3JhbQotICBnbC5saW5rUHJvZ3Jh
bShwcm9ncmFtKTsKLQotICAvLyBDaGVjayB0aGUgbGluayBzdGF0dXMKLSAgdmFyIGxpbmtlZCA9
IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpOwotICBpZiAo
IWxpbmtlZCkgewotICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIGxpbmsKLSAg
ICB2YXIgZXJyb3IgPSBnbC5nZXRQcm9ncmFtSW5mb0xvZyAocHJvZ3JhbSk7Ci0KLSAgICBlcnJG
bigiRXJyb3IgaW4gcHJvZ3JhbSBsaW5raW5nOiIgKyBlcnJvcik7Ci0KLSAgICBnbC5kZWxldGVQ
cm9ncmFtKHByb2dyYW0pOwotICB9Ci19OwotCi0vKioKLSAqIExvYWRzIHRleHQgZnJvbSBhbiBl
eHRlcm5hbCBmaWxlLiBUaGlzIGZ1bmN0aW9uIGlzIGFzeW5jaHJvbm91cy4KLSAqIEBwYXJhbSB7
c3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0aGUgZXh0ZXJuYWwgZmlsZS4KLSAqIEBwYXJhbSB7IWZ1
bmN0aW9uKGJvb2wsIHN0cmluZyk6IHZvaWR9IGNhbGxiYWNrIHRoYXQgaXMgc2VudCBhIGJvb2wg
Zm9yCi0gKiAgICAgc3VjY2VzcyBhbmQgdGhlIHN0cmluZy4KLSAqLwotdmFyIGxvYWRUZXh0Rmls
ZUFzeW5jID0gZnVuY3Rpb24odXJsLCBjYWxsYmFjaykgewotICBsb2cgKCJsb2FkaW5nOiAiICsg
dXJsKTsKLSAgdmFyIGVycm9yID0gJ2xvYWRUZXh0RmlsZUFzeW5jIGZhaWxlZCB0byBsb2FkIHVy
bCAiJyArIHVybCArICciJzsKLSAgdmFyIHJlcXVlc3Q7Ci0gIGlmICh3aW5kb3cuWE1MSHR0cFJl
cXVlc3QpIHsKLSAgICByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Ci0gICAgaWYgKHJl
cXVlc3Qub3ZlcnJpZGVNaW1lVHlwZSkgewotICAgICAgcmVxdWVzdC5vdmVycmlkZU1pbWVUeXBl
KCd0ZXh0L3BsYWluJyk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIHRocm93ICdYTUxIdHRwUmVx
dWVzdCBpcyBkaXNhYmxlZCc7Ci0gIH0KLSAgdHJ5IHsKLSAgICByZXF1ZXN0Lm9wZW4oJ0dFVCcs
IHVybCwgdHJ1ZSk7Ci0gICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigp
IHsKLSAgICAgIGlmIChyZXF1ZXN0LnJlYWR5U3RhdGUgPT0gNCkgewotICAgICAgICB2YXIgdGV4
dCA9ICcnOwotICAgICAgICAvLyBIVFRQIHJlcG9ydHMgc3VjY2VzcyB3aXRoIGEgMjAwIHN0YXR1
cy4gVGhlIGZpbGUgcHJvdG9jb2wgcmVwb3J0cwotICAgICAgICAvLyBzdWNjZXNzIHdpdGggemVy
by4gSFRUUCBkb2VzIG5vdCB1c2UgemVybyBhcyBhIHN0YXR1cyBjb2RlICh0aGV5Ci0gICAgICAg
IC8vIHN0YXJ0IGF0IDEwMCkuCi0gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEu
b3JnL0VuL1VzaW5nX1hNTEh0dHBSZXF1ZXN0Ci0gICAgICAgIHZhciBzdWNjZXNzID0gcmVxdWVz
dC5zdGF0dXMgPT0gMjAwIHx8IHJlcXVlc3Quc3RhdHVzID09IDA7Ci0gICAgICAgIGlmIChzdWNj
ZXNzKSB7Ci0gICAgICAgICAgdGV4dCA9IHJlcXVlc3QucmVzcG9uc2VUZXh0OwotICAgICAgICAg
IGxvZygiY29tcGxldGVkIGxvYWQgcmVxdWVzdDogIiArIHVybCk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgbG9nKCJsb2FkaW5nICIgKyB1cmwgKyAiIHJlc3VsdGVkIGluIHVuZXhwZWN0
ZWQgc3RhdHVzOiAiICsgcmVxdWVzdC5zdGF0dXMgKyAiICIgKyByZXF1ZXN0LnN0YXR1c1RleHQp
OwotICAgICAgICB9Ci0gICAgICAgIGNhbGxiYWNrKHN1Y2Nlc3MsIHRleHQpOwotICAgICAgfQot
ICAgIH07Ci0gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24oZXJyb3JFdmVudCkgewotICAg
ICAgbG9nKCJlcnJvciBvY2N1cnJlZCBsb2FkaW5nICIgKyB1cmwpOwotICAgICAgY2FsbGJhY2so
ZmFsc2UsICcnKTsKLSAgICB9OwotICAgIHJlcXVlc3Quc2VuZChudWxsKTsKLSAgfSBjYXRjaCAo
ZXJyKSB7Ci0gICAgbG9nKCJmYWlsZWQgdG8gbG9hZDogIiArIHVybCArICIgd2l0aCBleGNlcHRp
b24gIiArIGVyci5tZXNzYWdlKTsKLSAgICBjYWxsYmFjayhmYWxzZSwgJycpOwotICB9Ci19Owot
Ci0vKioKLSAqIFJlY3Vyc2l2ZWx5IGxvYWRzIGEgZmlsZSBhcyBhIGxpc3QuIEVhY2ggbGluZSBp
cyBwYXJzZWQgZm9yIGEgcmVsYXRpdmUKLSAqIHBhdGguIElmIHRoZSBmaWxlIGVuZHMgaW4gLnR4
dCB0aGUgY29udGVudHMgb2YgdGhhdCBmaWxlIGlzIGluc2VydGVkIGluCi0gKiB0aGUgbGlzdC4K
LSAqCi0gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSB1cmwgb2YgdGhlIGV4dGVybmFsIGZpbGUu
Ci0gKiBAcGFyYW0geyFmdW5jdGlvbihib29sLCBBcnJheTxzdHJpbmc+KTogdm9pZH0gY2FsbGJh
Y2sgdGhhdCBpcyBzZW50IGEgYm9vbAotICogICAgIGZvciBzdWNjZXNzIGFuZCB0aGUgYXJyYXkg
b2Ygc3RyaW5ncy4KLSAqLwotdmFyIGdldEZpbGVMaXN0QXN5bmMgPSBmdW5jdGlvbih1cmwsIGNh
bGxiYWNrKSB7Ci0gIHZhciBmaWxlcyA9IFtdOwotCi0gIHZhciBnZXRGaWxlTGlzdEltcGwgPSBm
dW5jdGlvbih1cmwsIGNhbGxiYWNrKSB7Ci0gICAgdmFyIGZpbGVzID0gW107Ci0gICAgaWYgKHVy
bC5zdWJzdHIodXJsLmxlbmd0aCAtIDQpID09ICcudHh0JykgewotICAgICAgbG9hZFRleHRGaWxl
QXN5bmModXJsLCBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN1Y2Nlc3Ms
IHRleHQpIHsKLSAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgICAgIGNhbGxiYWNr
KGZhbHNlLCAnJyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICAg
IHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xuJyk7Ci0gICAgICAgICAgdmFyIHByZWZpeCA9ICcn
OwotICAgICAgICAgIHZhciBsYXN0U2xhc2ggPSB1cmwubGFzdEluZGV4T2YoJy8nKTsKLSAgICAg
ICAgICBpZiAobGFzdFNsYXNoID49IDApIHsKLSAgICAgICAgICAgIHByZWZpeCA9IHVybC5zdWJz
dHIoMCwgbGFzdFNsYXNoICsgMSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHZhciBmYWlsID0g
ZmFsc2U7Ci0gICAgICAgICAgdmFyIGNvdW50ID0gMTsKLSAgICAgICAgICB2YXIgaW5kZXggPSAw
OwotICAgICAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBsaW5lcy5sZW5ndGg7ICsraWkpIHsK
LSAgICAgICAgICAgIHZhciBzdHIgPSBsaW5lc1tpaV0ucmVwbGFjZSgvXlxzXHMqLywgJycpLnJl
cGxhY2UoL1xzXHMqJC8sICcnKTsKLSAgICAgICAgICAgIGlmIChzdHIubGVuZ3RoID4gNCAmJgot
ICAgICAgICAgICAgICAgIHN0clswXSAhPSAnIycgJiYKLSAgICAgICAgICAgICAgICBzdHJbMF0g
IT0gIjsiICYmCi0gICAgICAgICAgICAgICAgc3RyLnN1YnN0cigwLCAyKSAhPSAiLy8iKSB7Ci0g
ICAgICAgICAgICAgIHZhciBuYW1lcyA9IHN0ci5zcGxpdCgvICsvKTsKLSAgICAgICAgICAgICAg
dmFyIG5ld191cmwgPSBwcmVmaXggKyBzdHI7Ci0gICAgICAgICAgICAgIGlmIChuYW1lcy5sZW5n
dGggPT0gMSkgewotICAgICAgICAgICAgICAgIG5ld191cmwgPSBwcmVmaXggKyBzdHI7Ci0gICAg
ICAgICAgICAgICAgKytjb3VudDsKLSAgICAgICAgICAgICAgICBnZXRGaWxlTGlzdEltcGwobmV3
X3VybCwgZnVuY3Rpb24oaW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlv
bihzdWNjZXNzLCBuZXdfZmlsZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgbG9nKCJnb3QgZmls
ZXM6ICIgKyBuZXdfZmlsZXMubGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nl
c3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICBmaWxlc1tpbmRleF0gPSBuZXdfZmlsZXM7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZmluaXNoKHN1Y2Nlc3Mp
OwotICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9KGluZGV4KyspKTsKLSAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YXIgcyA9ICIiOwotICAgICAg
ICAgICAgICAgIHZhciBwID0gIiI7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgamogPSAwOyBq
aiA8IG5hbWVzLmxlbmd0aDsgKytqaikgewotICAgICAgICAgICAgICAgICAgcyArPSBwICsgcHJl
Zml4ICsgbmFtZXNbampdOwotICAgICAgICAgICAgICAgICAgcCA9ICIgIjsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZmlsZXNbaW5kZXgrK10gPSBzOwotICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGZpbmlzaCh0cnVlKTsK
LQotICAgICAgICAgIGZ1bmN0aW9uIGZpbmlzaChzdWNjZXNzKSB7Ci0gICAgICAgICAgICBpZiAo
IXN1Y2Nlc3MpIHsKLSAgICAgICAgICAgICAgZmFpbCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAtLWNvdW50OwotICAgICAgICAgICAgbG9nKCJjb3VudDogIiArIGNvdW50KTsK
LSAgICAgICAgICAgIGlmICghY291bnQpIHsKLSAgICAgICAgICAgICAgY2FsbGJhY2soIWZhaWws
IGZpbGVzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0o
KSk7Ci0KLSAgICB9IGVsc2UgewotICAgICAgZmlsZXMucHVzaCh1cmwpOwotICAgICAgY2FsbGJh
Y2sodHJ1ZSwgZmlsZXMpOwotICAgIH0KLSAgfTsKLQotICBnZXRGaWxlTGlzdEltcGwodXJsLCBm
dW5jdGlvbihzdWNjZXNzLCBmaWxlcykgewotICAgIC8vIGZsYXR0ZW4KLSAgICB2YXIgZmxhdCA9
IFtdOwotICAgIGZsYXR0ZW4oZmlsZXMpOwotICAgIGZ1bmN0aW9uIGZsYXR0ZW4oZmlsZXMpIHsK
LSAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBmaWxlcy5sZW5ndGg7ICsraWkpIHsKLSAgICAg
ICAgdmFyIHZhbHVlID0gZmlsZXNbaWldOwotICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PSAi
c3RyaW5nIikgewotICAgICAgICAgIGZsYXQucHVzaCh2YWx1ZSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgZmxhdHRlbih2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0g
ICAgY2FsbGJhY2soc3VjY2VzcywgZmxhdCk7Ci0gIH0pOwotfTsKLQotLyoqCi0gKiBHZXRzIGEg
ZmlsZSBmcm9tIGEgZmlsZS9VUkwuCi0gKiBAcGFyYW0ge3N0cmluZ30gZmlsZSB0aGUgVVJMIG9m
IHRoZSBmaWxlIHRvIGdldC4KLSAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNvbnRlbnRzIG9mIHRo
ZSBmaWxlLgotICovCi12YXIgcmVhZEZpbGUgPSBmdW5jdGlvbihmaWxlKSB7Ci0gIHZhciB4aHIg
PSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKLSAgeGhyLm9wZW4oIkdFVCIsIGZpbGUsIGZhbHNlKTsK
LSAgeGhyLm92ZXJyaWRlTWltZVR5cGUoInRleHQvcGxhaW4iKTsKLSAgeGhyLnNlbmQoKTsKLSAg
cmV0dXJuIHhoci5yZXNwb25zZVRleHQucmVwbGFjZSgvXHIvZywgIiIpOwotfTsKLQotdmFyIHJl
YWRGaWxlTGlzdCA9IGZ1bmN0aW9uKHVybCkgewotICB2YXIgZmlsZXMgPSBbXTsKLSAgaWYgKHVy
bC5zdWJzdHIodXJsLmxlbmd0aCAtIDQpID09ICcudHh0JykgewotICAgIHZhciBsaW5lcyA9IHJl
YWRGaWxlKHVybCkuc3BsaXQoJ1xuJyk7Ci0gICAgdmFyIHByZWZpeCA9ICcnOwotICAgIHZhciBs
YXN0U2xhc2ggPSB1cmwubGFzdEluZGV4T2YoJy8nKTsKLSAgICBpZiAobGFzdFNsYXNoID49IDAp
IHsKLSAgICAgIHByZWZpeCA9IHVybC5zdWJzdHIoMCwgbGFzdFNsYXNoICsgMSk7Ci0gICAgfQot
ICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBsaW5lcy5sZW5ndGg7ICsraWkpIHsKLSAgICAgIHZh
ciBzdHIgPSBsaW5lc1tpaV0ucmVwbGFjZSgvXlxzXHMqLywgJycpLnJlcGxhY2UoL1xzXHMqJC8s
ICcnKTsKLSAgICAgIGlmIChzdHIubGVuZ3RoID4gNCAmJgotICAgICAgICAgIHN0clswXSAhPSAn
IycgJiYKLSAgICAgICAgICBzdHJbMF0gIT0gIjsiICYmCi0gICAgICAgICAgc3RyLnN1YnN0cigw
LCAyKSAhPSAiLy8iKSB7Ci0gICAgICAgIHZhciBuYW1lcyA9IHN0ci5zcGxpdCgvICsvKTsKLSAg
ICAgICAgaWYgKG5hbWVzLmxlbmd0aCA9PSAxKSB7Ci0gICAgICAgICAgdmFyIG5ld191cmwgPSBw
cmVmaXggKyBzdHI7Ci0gICAgICAgICAgZmlsZXMgPSBmaWxlcy5jb25jYXQocmVhZEZpbGVMaXN0
KG5ld191cmwpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB2YXIgcyA9ICIiOwotICAg
ICAgICAgIHZhciBwID0gIiI7Ci0gICAgICAgICAgZm9yICh2YXIgamogPSAwOyBqaiA8IG5hbWVz
Lmxlbmd0aDsgKytqaikgewotICAgICAgICAgICAgcyArPSBwICsgcHJlZml4ICsgbmFtZXNbampd
OwotICAgICAgICAgICAgcCA9ICIgIjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZmlsZXMucHVz
aChzKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBmaWxlcy5w
dXNoKHVybCk7Ci0gIH0KLSAgcmV0dXJuIGZpbGVzOwotfTsKLQotLyoqCi0gKiBMb2FkcyBhIHNo
YWRlci4KLSAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCB0byB1c2UuCi0gKiBAcGFyYW0ge3N0cmluZ30gc2hhZGVyU291cmNlIFRo
ZSBzaGFkZXIgc291cmNlLgotICogQHBhcmFtIHtudW1iZXJ9IHNoYWRlclR5cGUgVGhlIHR5cGUg
b2Ygc2hhZGVyLgotICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmcpOiB2b2lkfSBvcHRfZXJyb3JD
YWxsYmFjayBjYWxsYmFjayBmb3IgZXJyb3JzLgotICogQHBhcmFtIHtib29sZWFufSBvcHRfbG9n
U2hhZGVycyBXaGV0aGVyIHRvIGxvZyBzaGFkZXIgc291cmNlLgotICogQHBhcmFtIHtzdHJpbmd9
IG9wdF9zaGFkZXJMYWJlbCBMYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIHNoYWRlciBzb3VyY2Ug
aW4KLSAqICAgICB0aGUgbG9nLgotICogQHBhcmFtIHtzdHJpbmd9IG9wdF91cmwgVVJMIGZyb20g
d2hlcmUgdGhlIHNoYWRlciBzb3VyY2Ugd2FzIGxvYWRlZCBmcm9tLgotICogICAgIElmIG9wdF9s
b2dTaGFkZXJzIGlzIHNldCwgdGhlbiBhIGxpbmsgdG8gdGhlIHNvdXJjZSBmaWxlIHdpbGwgYWxz
byBiZQotICogICAgIGFkZGVkLgotICogQHBhcmFtIHtib29sZWFufSBTa2lwIGNvbXBpbGF0aW9u
IHN0YXR1cyBjaGVjay4gRGVmYXVsdCA9IGZhbHNlLgotICogQHJldHVybiB7IVdlYkdMU2hhZGVy
fSBUaGUgY3JlYXRlZCBzaGFkZXIuCi0gKi8KLXZhciBsb2FkU2hhZGVyID0gZnVuY3Rpb24oCi0g
ICAgZ2wsIHNoYWRlclNvdXJjZSwgc2hhZGVyVHlwZSwgb3B0X2Vycm9yQ2FsbGJhY2ssIG9wdF9s
b2dTaGFkZXJzLAotICAgIG9wdF9zaGFkZXJMYWJlbCwgb3B0X3VybCwgb3B0X3NraXBDb21waWxl
U3RhdHVzKSB7Ci0gIHZhciBlcnJGbiA9IG9wdF9lcnJvckNhbGxiYWNrIHx8IGVycm9yOwotICAv
LyBDcmVhdGUgdGhlIHNoYWRlciBvYmplY3QKLSAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRl
cihzaGFkZXJUeXBlKTsKLSAgaWYgKHNoYWRlciA9PSBudWxsKSB7Ci0gICAgZXJyRm4oIioqKiBF
cnJvcjogdW5hYmxlIHRvIGNyZWF0ZSBzaGFkZXIgJyIrc2hhZGVyU291cmNlKyInIik7Ci0gICAg
cmV0dXJuIG51bGw7Ci0gIH0KLQotICAvLyBMb2FkIHRoZSBzaGFkZXIgc291cmNlCi0gIGdsLnNo
YWRlclNvdXJjZShzaGFkZXIsIHNoYWRlclNvdXJjZSk7Ci0KLSAgLy8gQ29tcGlsZSB0aGUgc2hh
ZGVyCi0gIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTsKLQotICBpZiAob3B0X2xvZ1NoYWRlcnMp
IHsKLSAgICB2YXIgbGFiZWwgPSBzaGFkZXJUeXBlID09IGdsLlZFUlRFWF9TSEFERVIgPyAndmVy
dGV4IHNoYWRlcicgOiAnZnJhZ21lbnRfc2hhZGVyJzsKLSAgICBpZiAob3B0X3NoYWRlckxhYmVs
KSB7Ci0gICAgICBsYWJlbCA9IG9wdF9zaGFkZXJMYWJlbCArICcgJyArIGxhYmVsOwotICAgIH0K
LSAgICBhZGRTaGFkZXJTb3VyY2VzKAotICAgICAgICBnbCwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2NvbnNvbGUnKSwgbGFiZWwsIHNoYWRlciwgc2hhZGVyU291cmNlLCBvcHRfdXJsKTsKLSAg
fQotCi0gIC8vIENoZWNrIHRoZSBjb21waWxlIHN0YXR1cwotICBpZiAoIW9wdF9za2lwQ29tcGls
ZVN0YXR1cykgewotICAgIHZhciBjb21waWxlZCA9IGdsLmdldFNoYWRlclBhcmFtZXRlcihzaGFk
ZXIsIGdsLkNPTVBJTEVfU1RBVFVTKTsKLSAgICBpZiAoIWNvbXBpbGVkKSB7Ci0gICAgICAvLyBT
b21ldGhpbmcgd2VudCB3cm9uZyBkdXJpbmcgY29tcGlsYXRpb247IGdldCB0aGUgZXJyb3IKLSAg
ICAgIGxhc3RFcnJvciA9IGdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKTsKLSAgICAgIGVyckZu
KCIqKiogRXJyb3IgY29tcGlsaW5nICIgKyBnbEVudW1Ub1N0cmluZyhnbCwgc2hhZGVyVHlwZSkg
KyAiICciICsgc2hhZGVyICsgIic6IiArIGxhc3RFcnJvcik7Ci0gICAgICBnbC5kZWxldGVTaGFk
ZXIoc2hhZGVyKTsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBz
aGFkZXI7Ci19Ci0KLS8qKgotICogTG9hZHMgYSBzaGFkZXIgZnJvbSBhIFVSTC4KLSAqIEBwYXJh
bSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0
byB1c2UuCi0gKiBAcGFyYW0ge2ZpbGV9IGZpbGUgVGhlIFVSTCBvZiB0aGUgc2hhZGVyIHNvdXJj
ZS4KLSAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlIFRoZSB0eXBlIG9mIHNoYWRlci4KLSAqIEBwYXJh
bSB7ZnVuY3Rpb24oc3RyaW5nKTogdm9pZH0gb3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJhY2sgZm9y
IGVycm9ycy4KLSAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0X2xvZ1NoYWRlcnMgV2hldGhlciB0byBs
b2cgc2hhZGVyIHNvdXJjZS4KLSAqIEBwYXJhbSB7Ym9vbGVhbn0gU2tpcCBjb21waWxhdGlvbiBz
dGF0dXMgY2hlY2suIERlZmF1bHQgPSBmYWxzZS4KLSAqIEByZXR1cm4geyFXZWJHTFNoYWRlcn0g
VGhlIGNyZWF0ZWQgc2hhZGVyLgotICovCi12YXIgbG9hZFNoYWRlckZyb21GaWxlID0gZnVuY3Rp
b24oCi0gICAgZ2wsIGZpbGUsIHR5cGUsIG9wdF9lcnJvckNhbGxiYWNrLCBvcHRfbG9nU2hhZGVy
cywgb3B0X3NraXBDb21waWxlU3RhdHVzKSB7Ci0gIHZhciBzaGFkZXJTb3VyY2UgPSByZWFkRmls
ZShmaWxlKTsKLSAgcmV0dXJuIGxvYWRTaGFkZXIoZ2wsIHNoYWRlclNvdXJjZSwgdHlwZSwgb3B0
X2Vycm9yQ2FsbGJhY2ssCi0gICAgICBvcHRfbG9nU2hhZGVycywgdW5kZWZpbmVkLCBmaWxlLCBv
cHRfc2tpcENvbXBpbGVTdGF0dXMpOwotfTsKLQotdmFyIGxvYWRTaGFkZXJGcm9tRmlsZUFzeW5j
ID0gZnVuY3Rpb24oCi0gICAgZ2wsIGZpbGUsIHR5cGUsIG9wdF9lcnJvckNhbGxiYWNrLCBvcHRf
bG9nU2hhZGVycywgb3B0X3NraXBDb21waWxlU3RhdHVzLCBjYWxsYmFjaykgewotICBsb2FkVGV4
dEZpbGVBc3luYyhmaWxlLCBmdW5jdGlvbihnbCwgdHlwZSwgb3B0X2Vycm9yQ2FsbGJhY2ssIG9w
dF9sb2dTaGFkZXJzLCBmaWxlLCBvcHRfc2tpcENvbXBpbGVTdGF0dXMpewotICAgICAgcmV0dXJu
IGZ1bmN0aW9uKHN1Y2Nlc3MsIHNoYWRlclNvdXJjZSkgewotICAgICAgICBpZiAoc3VjY2Vzcykg
ewotICAgICAgICAgIHZhciBzaGFkZXIgPSBsb2FkU2hhZGVyKGdsLCBzaGFkZXJTb3VyY2UsIHR5
cGUsIG9wdF9lcnJvckNhbGxiYWNrLAotICAgICAgICAgICAgICBvcHRfbG9nU2hhZGVycywgdW5k
ZWZpbmVkLCBmaWxlLCBvcHRfc2tpcENvbXBpbGVTdGF0dXMpOwotICAgICAgICAgIGNhbGxiYWNr
KHRydWUsIHNoYWRlcik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgY2FsbGJhY2soZmFs
c2UsIG51bGwpOwotICAgICAgICB9Ci0gICAgICB9Ci0gIH0oZ2wsIHR5cGUsIG9wdF9lcnJvckNh
bGxiYWNrLCBvcHRfbG9nU2hhZGVycywgZmlsZSwgb3B0X3NraXBDb21waWxlU3RhdHVzKSk7Ci19
OwotCi0vKioKLSAqIEdldHMgdGhlIGNvbnRlbnQgb2Ygc2NyaXB0LgotICogQHBhcmFtIHtzdHJp
bmd9IHNjcmlwdElkIFRoZSBpZCBvZiB0aGUgc2NyaXB0IHRhZy4KLSAqIEByZXR1cm4ge3N0cmlu
Z30gVGhlIGNvbnRlbnQgb2YgdGhlIHNjcmlwdC4KLSAqLwotdmFyIGdldFNjcmlwdCA9IGZ1bmN0
aW9uKHNjcmlwdElkKSB7Ci0gIHZhciBzaGFkZXJTY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZChzY3JpcHRJZCk7Ci0gIGlmICghc2hhZGVyU2NyaXB0KSB7Ci0gICAgdGhyb3coIioqKiBF
cnJvcjogdW5rbm93biBzY3JpcHQgZWxlbWVudCAiICsgc2NyaXB0SWQpOwotICB9Ci0gIHJldHVy
biBzaGFkZXJTY3JpcHQudGV4dDsKLX07Ci0KLS8qKgotICogTG9hZHMgYSBzaGFkZXIgZnJvbSBh
IHNjcmlwdCB0YWcuCi0gKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgotICogQHBhcmFtIHtzdHJpbmd9IHNjcmlwdElk
IFRoZSBpZCBvZiB0aGUgc2NyaXB0IHRhZy4KLSAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfc2hhZGVy
VHlwZSBUaGUgdHlwZSBvZiBzaGFkZXIuIElmIG5vdCBwYXNzZWQgaW4gaXQgd2lsbAotICogICAg
IGJlIGRlcml2ZWQgZnJvbSB0aGUgdHlwZSBvZiB0aGUgc2NyaXB0IHRhZy4KLSAqIEBwYXJhbSB7
ZnVuY3Rpb24oc3RyaW5nKTogdm9pZH0gb3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJhY2sgZm9yIGVy
cm9ycy4KLSAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0X2xvZ1NoYWRlcnMgV2hldGhlciB0byBsb2cg
c2hhZGVyIHNvdXJjZS4KLSAqIEBwYXJhbSB7Ym9vbGVhbn0gU2tpcCBjb21waWxhdGlvbiBzdGF0
dXMgY2hlY2suIERlZmF1bHQgPSBmYWxzZS4KLSAqIEByZXR1cm4geyFXZWJHTFNoYWRlcn0gVGhl
IGNyZWF0ZWQgc2hhZGVyLgotICovCi12YXIgbG9hZFNoYWRlckZyb21TY3JpcHQgPSBmdW5jdGlv
bigKLSAgICBnbCwgc2NyaXB0SWQsIG9wdF9zaGFkZXJUeXBlLCBvcHRfZXJyb3JDYWxsYmFjaywg
b3B0X2xvZ1NoYWRlcnMsIG9wdF9za2lwQ29tcGlsZVN0YXR1cykgewotICB2YXIgc2hhZGVyU291
cmNlID0gIiI7Ci0gIHZhciBzaGFkZXJTY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChz
Y3JpcHRJZCk7Ci0gIGlmICghc2hhZGVyU2NyaXB0KSB7Ci0gICAgdGhyb3coIioqKiBFcnJvcjog
dW5rbm93biBzY3JpcHQgZWxlbWVudCAiICsgc2NyaXB0SWQpOwotICB9Ci0gIHNoYWRlclNvdXJj
ZSA9IHNoYWRlclNjcmlwdC50ZXh0LnRyaW0oKTsKLQotICBpZiAoIW9wdF9zaGFkZXJUeXBlKSB7
Ci0gICAgaWYgKHNoYWRlclNjcmlwdC50eXBlID09ICJ4LXNoYWRlci94LXZlcnRleCIpIHsKLSAg
ICAgIG9wdF9zaGFkZXJUeXBlID0gZ2wuVkVSVEVYX1NIQURFUjsKLSAgICB9IGVsc2UgaWYgKHNo
YWRlclNjcmlwdC50eXBlID09ICJ4LXNoYWRlci94LWZyYWdtZW50IikgewotICAgICAgb3B0X3No
YWRlclR5cGUgPSBnbC5GUkFHTUVOVF9TSEFERVI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRocm93
KCIqKiogRXJyb3I6IHVua25vd24gc2hhZGVyIHR5cGUiKTsKLSAgICAgIHJldHVybiBudWxsOwot
ICAgIH0KLSAgfQotCi0gIHJldHVybiBsb2FkU2hhZGVyKGdsLCBzaGFkZXJTb3VyY2UsIG9wdF9z
aGFkZXJUeXBlLCBvcHRfZXJyb3JDYWxsYmFjaywKLSAgICAgIG9wdF9sb2dTaGFkZXJzLCB1bmRl
ZmluZWQsIHVuZGVmaW5lZCwgb3B0X3NraXBDb21waWxlU3RhdHVzKTsKLX07Ci0KLXZhciBsb2Fk
U3RhbmRhcmRQcm9ncmFtID0gZnVuY3Rpb24oZ2wpIHsKLSAgdmFyIHByb2dyYW0gPSBnbC5jcmVh
dGVQcm9ncmFtKCk7Ci0gIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBsb2FkU3RhbmRhcmRWZXJ0
ZXhTaGFkZXIoZ2wpKTsKLSAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGxvYWRTdGFuZGFyZEZy
YWdtZW50U2hhZGVyKGdsKSk7Ci0gIGdsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAwLCAi
YV92ZXJ0ZXgiKTsKLSAgZ2wuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIDEsICJhX25vcm1h
bCIpOwotICBsaW5rUHJvZ3JhbShnbCwgcHJvZ3JhbSk7Ci0gIHJldHVybiBwcm9ncmFtOwotfTsK
LQotdmFyIGxvYWRTdGFuZGFyZFByb2dyYW1Bc3luYyA9IGZ1bmN0aW9uKGdsLCBjYWxsYmFjaykg
ewotICBsb2FkU3RhbmRhcmRWZXJ0ZXhTaGFkZXJBc3luYyhnbCwgZnVuY3Rpb24oZ2wpIHsKLSAg
ICByZXR1cm4gZnVuY3Rpb24oc3VjY2VzcywgdnMpIHsKLSAgICAgIGlmIChzdWNjZXNzKSB7Ci0g
ICAgICAgIGxvYWRTdGFuZGFyZEZyYWdtZW50U2hhZGVyQXN5bmMoZ2wsIGZ1bmN0aW9uKHZzKSB7
Ci0gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN1Y2Nlc3MsIGZzKSB7Ci0gICAgICAgICAgICBp
ZiAoc3VjY2VzcykgewotICAgICAgICAgICAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dy
YW0oKTsKLSAgICAgICAgICAgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHZzKTsKLSAgICAg
ICAgICAgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGZzKTsKLSAgICAgICAgICAgICAgZ2wu
YmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIDAsICJhX3ZlcnRleCIpOwotICAgICAgICAgICAg
ICBnbC5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgMSwgImFfbm9ybWFsIik7Ci0gICAgICAg
ICAgICAgIGxpbmtQcm9ncmFtKGdsLCBwcm9ncmFtKTsKLSAgICAgICAgICAgICAgY2FsbGJhY2so
dHJ1ZSwgcHJvZ3JhbSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBjYWxs
YmFjayhmYWxzZSwgbnVsbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfTsKLSAgICAgICAg
fSh2cykpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgY2FsbGJhY2soZmFsc2UsIG51bGwpOwot
ICAgICAgfQotICAgIH07Ci0gIH0oZ2wpKTsKLX07Ci0KLS8qKgotICogTG9hZHMgc2hhZGVycyBm
cm9tIGZpbGVzLCBjcmVhdGVzIGEgcHJvZ3JhbSwgYXR0YWNoZXMgdGhlIHNoYWRlcnMgYW5kIGxp
bmtzLgotICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0IHRvIHVzZS4KLSAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJ0ZXhTaGFkZXJQYXRo
IFRoZSBVUkwgb2YgdGhlIHZlcnRleCBzaGFkZXIuCi0gKiBAcGFyYW0ge3N0cmluZ30gZnJhZ21l
bnRTaGFkZXJQYXRoIFRoZSBVUkwgb2YgdGhlIGZyYWdtZW50IHNoYWRlci4KLSAqIEBwYXJhbSB7
ZnVuY3Rpb24oc3RyaW5nKTogdm9pZH0gb3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJhY2sgZm9yIGVy
cm9ycy4KLSAqIEByZXR1cm4geyFXZWJHTFByb2dyYW19IFRoZSBjcmVhdGVkIHByb2dyYW0uCi0g
Ki8KLXZhciBsb2FkUHJvZ3JhbUZyb21GaWxlID0gZnVuY3Rpb24oCi0gICAgZ2wsIHZlcnRleFNo
YWRlclBhdGgsIGZyYWdtZW50U2hhZGVyUGF0aCwgb3B0X2Vycm9yQ2FsbGJhY2spIHsKLSAgdmFy
IHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7Ci0gIHZhciB2cyA9IGxvYWRTaGFkZXJGcm9t
RmlsZSgKLSAgICAgIGdsLCB2ZXJ0ZXhTaGFkZXJQYXRoLCBnbC5WRVJURVhfU0hBREVSLCBvcHRf
ZXJyb3JDYWxsYmFjayk7Ci0gIHZhciBmcyA9IGxvYWRTaGFkZXJGcm9tRmlsZSgKLSAgICAgIGds
LCBmcmFnbWVudFNoYWRlclBhdGgsIGdsLkZSQUdNRU5UX1NIQURFUiwgb3B0X2Vycm9yQ2FsbGJh
Y2spOwotICBpZiAodnMgJiYgZnMpIHsKLSAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgdnMp
OwotICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBmcyk7Ci0gICAgbGlua1Byb2dyYW0oZ2ws
IHByb2dyYW0sIG9wdF9lcnJvckNhbGxiYWNrKTsKLSAgfQotICBpZiAodnMpIHsKLSAgICBnbC5k
ZWxldGVTaGFkZXIodnMpOwotICB9Ci0gIGlmIChmcykgewotICAgIGdsLmRlbGV0ZVNoYWRlcihm
cyk7Ci0gIH0KLSAgcmV0dXJuIHByb2dyYW07Ci19OwotCi0vKioKLSAqIExvYWRzIHNoYWRlcnMg
ZnJvbSBzY3JpcHQgdGFncywgY3JlYXRlcyBhIHByb2dyYW0sIGF0dGFjaGVzIHRoZSBzaGFkZXJz
IGFuZAotICogbGlua3MuCi0gKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRo
ZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgotICogQHBhcmFtIHtzdHJpbmd9IHZlcnRl
eFNjcmlwdElkIFRoZSBpZCBvZiB0aGUgc2NyaXB0IHRhZyB0aGF0IGNvbnRhaW5zIHRoZQotICog
ICAgICAgIHZlcnRleCBzaGFkZXIuCi0gKiBAcGFyYW0ge3N0cmluZ30gZnJhZ21lbnRTY3JpcHRJ
ZCBUaGUgaWQgb2YgdGhlIHNjcmlwdCB0YWcgdGhhdCBjb250YWlucyB0aGUKLSAqICAgICAgICBm
cmFnbWVudCBzaGFkZXIuCi0gKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZyk6IHZvaWR9IG9wdF9l
cnJvckNhbGxiYWNrIGNhbGxiYWNrIGZvciBlcnJvcnMuCi0gKiBAcmV0dXJuIHshV2ViR0xQcm9n
cmFtfSBUaGUgY3JlYXRlZCBwcm9ncmFtLgotICovCi12YXIgbG9hZFByb2dyYW1Gcm9tU2NyaXB0
ID0gZnVuY3Rpb24gbG9hZFByb2dyYW1Gcm9tU2NyaXB0KAotICAgIGdsLCB2ZXJ0ZXhTY3JpcHRJ
ZCwgZnJhZ21lbnRTY3JpcHRJZCwgb3B0X2Vycm9yQ2FsbGJhY2spIHsKLSAgdmFyIHByb2dyYW0g
PSBnbC5jcmVhdGVQcm9ncmFtKCk7Ci0gIGdsLmF0dGFjaFNoYWRlcigKLSAgICAgIHByb2dyYW0s
Ci0gICAgICBsb2FkU2hhZGVyRnJvbVNjcmlwdCgKLSAgICAgICAgICBnbCwgdmVydGV4U2NyaXB0
SWQsIGdsLlZFUlRFWF9TSEFERVIsIG9wdF9lcnJvckNhbGxiYWNrKSk7Ci0gIGdsLmF0dGFjaFNo
YWRlcigKLSAgICAgIHByb2dyYW0sCi0gICAgICBsb2FkU2hhZGVyRnJvbVNjcmlwdCgKLSAgICAg
ICAgICBnbCwgZnJhZ21lbnRTY3JpcHRJZCwgIGdsLkZSQUdNRU5UX1NIQURFUiwgb3B0X2Vycm9y
Q2FsbGJhY2spKTsKLSAgbGlua1Byb2dyYW0oZ2wsIHByb2dyYW0sIG9wdF9lcnJvckNhbGxiYWNr
KTsKLSAgcmV0dXJuIHByb2dyYW07Ci19OwotCi0vKioKLSAqIExvYWRzIHNoYWRlcnMgZnJvbSBz
b3VyY2UsIGNyZWF0ZXMgYSBwcm9ncmFtLCBhdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQKLSAqIGxp
bmtzLgotICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0IHRvIHVzZS4KLSAqIEBwYXJhbSB7IVdlYkdMU2hhZGVyfSB2ZXJ0ZXhTaGFk
ZXIgVGhlIHZlcnRleCBzaGFkZXIuCi0gKiBAcGFyYW0geyFXZWJHTFNoYWRlcn0gZnJhZ21lbnRT
aGFkZXIgVGhlIGZyYWdtZW50IHNoYWRlci4KLSAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nKTog
dm9pZH0gb3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJhY2sgZm9yIGVycm9ycy4KLSAqIEByZXR1cm4g
eyFXZWJHTFByb2dyYW19IFRoZSBjcmVhdGVkIHByb2dyYW0uCi0gKi8KLXZhciBjcmVhdGVQcm9n
cmFtID0gZnVuY3Rpb24oZ2wsIHZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIsIG9wdF9lcnJv
ckNhbGxiYWNrKSB7Ci0gIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOwotICBnbC5h
dHRhY2hTaGFkZXIocHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKLSAgZ2wuYXR0YWNoU2hhZGVyKHBy
b2dyYW0sIGZyYWdtZW50U2hhZGVyKTsKLSAgbGlua1Byb2dyYW0oZ2wsIHByb2dyYW0sIG9wdF9l
cnJvckNhbGxiYWNrKTsKLSAgcmV0dXJuIHByb2dyYW07Ci19OwotCi0vKioKLSAqIExvYWRzIHNo
YWRlcnMgZnJvbSBzb3VyY2UsIGNyZWF0ZXMgYSBwcm9ncmFtLCBhdHRhY2hlcyB0aGUgc2hhZGVy
cyBhbmQKLSAqIGxpbmtzLgotICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBU
aGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KLSAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJ0
ZXhTaGFkZXIgVGhlIHZlcnRleCBzaGFkZXIgc291cmNlLgotICogQHBhcmFtIHtzdHJpbmd9IGZy
YWdtZW50U2hhZGVyIFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlLgotICogQHBhcmFtIHtmdW5j
dGlvbihzdHJpbmcpOiB2b2lkfSBvcHRfZXJyb3JDYWxsYmFjayBjYWxsYmFjayBmb3IgZXJyb3Jz
LgotICogQHBhcmFtIHtib29sZWFufSBvcHRfbG9nU2hhZGVycyBXaGV0aGVyIHRvIGxvZyBzaGFk
ZXIgc291cmNlLgotICogQHJldHVybiB7IVdlYkdMUHJvZ3JhbX0gVGhlIGNyZWF0ZWQgcHJvZ3Jh
bS4KLSAqLwotdmFyIGxvYWRQcm9ncmFtID0gZnVuY3Rpb24oCi0gICAgZ2wsIHZlcnRleFNoYWRl
ciwgZnJhZ21lbnRTaGFkZXIsIG9wdF9lcnJvckNhbGxiYWNrLCBvcHRfbG9nU2hhZGVycykgewot
ICB2YXIgcHJvZ3JhbTsKLSAgdmFyIHZzID0gbG9hZFNoYWRlcigKLSAgICAgIGdsLCB2ZXJ0ZXhT
aGFkZXIsIGdsLlZFUlRFWF9TSEFERVIsIG9wdF9lcnJvckNhbGxiYWNrLCBvcHRfbG9nU2hhZGVy
cyk7Ci0gIHZhciBmcyA9IGxvYWRTaGFkZXIoCi0gICAgICBnbCwgZnJhZ21lbnRTaGFkZXIsIGds
LkZSQUdNRU5UX1NIQURFUiwgb3B0X2Vycm9yQ2FsbGJhY2ssIG9wdF9sb2dTaGFkZXJzKTsKLSAg
aWYgKHZzICYmIGZzKSB7Ci0gICAgcHJvZ3JhbSA9IGNyZWF0ZVByb2dyYW0oZ2wsIHZzLCBmcywg
b3B0X2Vycm9yQ2FsbGJhY2spCi0gIH0KLSAgaWYgKHZzKSB7Ci0gICAgZ2wuZGVsZXRlU2hhZGVy
KHZzKTsKLSAgfQotICBpZiAoZnMpIHsKLSAgICBnbC5kZWxldGVTaGFkZXIoZnMpOwotICB9Ci0g
IHJldHVybiBwcm9ncmFtOwotfTsKLQotLyoqCi0gKiBMb2FkcyBzaGFkZXJzIGZyb20gc291cmNl
LCBjcmVhdGVzIGEgcHJvZ3JhbSwgYXR0YWNoZXMgdGhlIHNoYWRlcnMgYW5kCi0gKiBsaW5rcyBi
dXQgZXhwZWN0cyBlcnJvci4KLSAqCi0gKiBHTFNMIDEuMC4xNyAxMC4yNyBlZmZlY3RpdmVseSBz
YXlzIHRoYXQgY29tcGlsZVNoYWRlciBjYW4KLSAqIGFsd2F5cyBzdWNjZWVkIGFzIGxvbmcgYXMg
bGlua1Byb2dyYW0gZmFpbHMgc28gd2UgY2FuJ3QKLSAqIHJlbHkgb24gY29tcGlsZVNoYWRlciBm
YWlsaW5nLiBUaGlzIGZ1bmN0aW9uIGV4cGVjdHMKLSAqIG9uZSBvZiB0aGUgc2hhZGVyIHRvIGZh
aWwgT1IgbGlua2luZyB0byBmYWlsLgotICoKLSAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29u
dGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCi0gKiBAcGFyYW0ge3N0
cmluZ30gdmVydGV4U2hhZGVyU2NyaXB0SWQgVGhlIHZlcnRleCBzaGFkZXIuCi0gKiBAcGFyYW0g
e3N0cmluZ30gZnJhZ21lbnRTaGFkZXJTY3JpcHRJZCBUaGUgZnJhZ21lbnQgc2hhZGVyLgotICog
QHJldHVybiB7V2ViR0xQcm9ncmFtfSBUaGUgY3JlYXRlZCBwcm9ncmFtLgotICovCi12YXIgbG9h
ZFByb2dyYW1Gcm9tU2NyaXB0RXhwZWN0RXJyb3IgPSBmdW5jdGlvbigKLSAgICBnbCwgdmVydGV4
U2hhZGVyU2NyaXB0SWQsIGZyYWdtZW50U2hhZGVyU2NyaXB0SWQpIHsKLSAgdmFyIHZlcnRleFNo
YWRlciA9IGxvYWRTaGFkZXJGcm9tU2NyaXB0KGdsLCB2ZXJ0ZXhTaGFkZXJTY3JpcHRJZCk7Ci0g
IGlmICghdmVydGV4U2hhZGVyKSB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgdmFyIGZyYWdt
ZW50U2hhZGVyID0gbG9hZFNoYWRlckZyb21TY3JpcHQoZ2wsIGZyYWdtZW50U2hhZGVyU2NyaXB0
SWQpOwotICBpZiAoIWZyYWdtZW50U2hhZGVyKSB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAg
dmFyIGxpbmtTdWNjZXNzID0gdHJ1ZTsKLSAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFt
KCk7Ci0gIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOwotICBnbC5hdHRh
Y2hTaGFkZXIocHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpOwotICBsaW5rU3VjY2VzcyA9IHRydWU7
Ci0gIGxpbmtQcm9ncmFtKGdsLCBwcm9ncmFtLCBmdW5jdGlvbigpIHsKLSAgICAgIGxpbmtTdWNj
ZXNzID0gZmFsc2U7Ci0gICAgfSk7Ci0gIHJldHVybiBsaW5rU3VjY2VzcyA/IHByb2dyYW0gOiBu
dWxsOwotfTsKLQotCi12YXIgZ2V0QWN0aXZlTWFwID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0sIHR5
cGVJbmZvKSB7Ci0gIHZhciBudW1WYXJpYWJsZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHBy
b2dyYW0sIGdsW3R5cGVJbmZvLnBhcmFtXSk7Ci0gIHZhciB2YXJpYWJsZXMgPSB7fTsKLSAgZm9y
ICh2YXIgaWkgPSAwOyBpaSA8IG51bVZhcmlhYmxlczsgKytpaSkgewotICAgIHZhciBpbmZvID0g
Z2xbdHlwZUluZm8uYWN0aXZlRm5dKHByb2dyYW0sIGlpKTsKLSAgICB2YXJpYWJsZXNbaW5mby5u
YW1lXSA9IHsKLSAgICAgIG5hbWU6IGluZm8ubmFtZSwKLSAgICAgIHNpemU6IGluZm8uc2l6ZSwK
LSAgICAgIHR5cGU6IGluZm8udHlwZSwKLSAgICAgIGxvY2F0aW9uOiBnbFt0eXBlSW5mby5sb2NG
bl0ocHJvZ3JhbSwgaW5mby5uYW1lKQotICAgIH07Ci0gIH0KLSAgcmV0dXJuIHZhcmlhYmxlczsK
LX07Ci0KLS8qKgotICogUmV0dXJucyBhIG1hcCBvZiBhdHRyaWIgbmFtZXMgdG8gaW5mbyBhYm91
dCB0aG9zZQotICogYXR0cmlicy4KLSAqCi0gKiBlZzoKLSAqICAgIHsgImF0dHJpYjFOYW1lIjoK
LSAqICAgICAgewotICogICAgICAgIG5hbWU6ICJhdHRyaWIxTmFtZSIsCi0gKiAgICAgICAgc2l6
ZTogMSwKLSAqICAgICAgICB0eXBlOiBnbC5GTE9BVF9NQVQyLAotICogICAgICAgIGxvY2F0aW9u
OiAwCi0gKiAgICAgIH0sCi0gKiAgICAgICJhdHRyaWIyTmFtZVswXSI6Ci0gKiAgICAgIHsKLSAq
ICAgICAgICAgbmFtZTogImF0dHJpYjJOYW1lWzBdIiwKLSAqICAgICAgICAgc2l6ZTogNCwKLSAq
ICAgICAgICAgdHlwZTogZ2wuRkxPQVQsCi0gKiAgICAgICAgIGxvY2F0aW9uOiAxCi0gKiAgICAg
IH0sCi0gKiAgICB9Ci0gKgotICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBU
aGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KLSAqIEBwYXJhbSB7V2ViR0xQcm9ncmFt
fSBUaGUgcHJvZ3JhbSB0byBxdWVyeSBmb3IgYXR0cmlicy4KLSAqIEByZXR1cm4gdGhlIG1hcC4K
LSAqLwotdmFyIGdldEF0dHJpYk1hcCA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKSB7Ci0gIHJldHVy
biBnZXRBY3RpdmVNYXAoZ2wsIHByb2dyYW0sIHsKLSAgICAgIHBhcmFtOiAiQUNUSVZFX0FUVFJJ
QlVURVMiLAotICAgICAgYWN0aXZlRm46ICJnZXRBY3RpdmVBdHRyaWIiLAotICAgICAgbG9jRm46
ICJnZXRBdHRyaWJMb2NhdGlvbiIKLSAgfSk7Ci19OwotCi0vKioKLSAqIFJldHVybnMgYSBtYXAg
b2YgdW5pZm9ybSBuYW1lcyB0byBpbmZvIGFib3V0IHRob3NlIHVuaWZvcm1zLgotICoKLSAqIGVn
OgotICogICAgeyAidW5pZm9ybTFOYW1lIjoKLSAqICAgICAgewotICogICAgICAgIG5hbWU6ICJ1
bmlmb3JtMU5hbWUiLAotICogICAgICAgIHNpemU6IDEsCi0gKiAgICAgICAgdHlwZTogZ2wuRkxP
QVRfTUFUMiwKLSAqICAgICAgICBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24KLSAqICAg
ICAgfSwKLSAqICAgICAgInVuaWZvcm0yTmFtZVswXSI6Ci0gKiAgICAgIHsKLSAqICAgICAgICAg
bmFtZTogInVuaWZvcm0yTmFtZVswXSIsCi0gKiAgICAgICAgIHNpemU6IDQsCi0gKiAgICAgICAg
IHR5cGU6IGdsLkZMT0FULAotICogICAgICAgICBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRp
b24KLSAqICAgICAgfSwKLSAqICAgIH0KLSAqCi0gKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0Nv
bnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgotICogQHBhcmFtIHtX
ZWJHTFByb2dyYW19IFRoZSBwcm9ncmFtIHRvIHF1ZXJ5IGZvciB1bmlmb3Jtcy4KLSAqIEByZXR1
cm4gdGhlIG1hcC4KLSAqLwotdmFyIGdldFVuaWZvcm1NYXAgPSBmdW5jdGlvbihnbCwgcHJvZ3Jh
bSkgewotICByZXR1cm4gZ2V0QWN0aXZlTWFwKGdsLCBwcm9ncmFtLCB7Ci0gICAgICBwYXJhbTog
IkFDVElWRV9VTklGT1JNUyIsCi0gICAgICBhY3RpdmVGbjogImdldEFjdGl2ZVVuaWZvcm0iLAot
ICAgICAgbG9jRm46ICJnZXRVbmlmb3JtTG9jYXRpb24iCi0gIH0pOwotfTsKLQotdmFyIGJhc2VQ
YXRoOwotdmFyIGdldFJlc291cmNlUGF0aCA9IGZ1bmN0aW9uKCkgewotICBpZiAoIWJhc2VQYXRo
KSB7Ci0gICAgdmFyIGV4cGVjdGVkQmFzZSA9ICJqcy93ZWJnbC10ZXN0LXV0aWxzLmpzIjsKLSAg
ICB2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTsK
LSAgICBmb3IgKHZhciBzY3JpcHQsIGkgPSAwOyBzY3JpcHQgPSBzY3JpcHRzW2ldOyBpKyspIHsK
LSAgICAgIHZhciBzcmMgPSBzY3JpcHQuc3JjOwotICAgICAgdmFyIGwgPSBzcmMubGVuZ3RoOwot
ICAgICAgaWYgKHNyYy5zdWJzdHIobCAtIGV4cGVjdGVkQmFzZS5sZW5ndGgpID09IGV4cGVjdGVk
QmFzZSkgewotICAgICAgICBiYXNlUGF0aCA9IHNyYy5zdWJzdHIoMCwgbCAtIGV4cGVjdGVkQmFz
ZS5sZW5ndGgpOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gYmFzZVBhdGggKyAicmVz
b3VyY2VzLyI7Ci19OwotCi12YXIgbG9hZFN0YW5kYXJkVmVydGV4U2hhZGVyID0gZnVuY3Rpb24o
Z2wpIHsKLSAgcmV0dXJuIGxvYWRTaGFkZXJGcm9tRmlsZSgKLSAgICAgIGdsLCBnZXRSZXNvdXJj
ZVBhdGgoKSArICJ2ZXJ0ZXhTaGFkZXIudmVydCIsIGdsLlZFUlRFWF9TSEFERVIpOwotfTsKLXZh
ciBsb2FkU3RhbmRhcmRWZXJ0ZXhTaGFkZXJBc3luYyA9IGZ1bmN0aW9uKGdsLCBjYWxsYmFjaykg
ewotICBsb2FkU2hhZGVyRnJvbUZpbGVBc3luYyhnbCwgZ2V0UmVzb3VyY2VQYXRoKCkgKyAidmVy
dGV4U2hhZGVyLnZlcnQiLCBnbC5WRVJURVhfU0hBREVSLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwg
dW5kZWZpbmVkLCBjYWxsYmFjayk7Ci19OwotCi12YXIgbG9hZFN0YW5kYXJkRnJhZ21lbnRTaGFk
ZXIgPSBmdW5jdGlvbihnbCkgewotICByZXR1cm4gbG9hZFNoYWRlckZyb21GaWxlKAotICAgICAg
Z2wsIGdldFJlc291cmNlUGF0aCgpICsgImZyYWdtZW50U2hhZGVyLmZyYWciLCBnbC5GUkFHTUVO
VF9TSEFERVIpOwotfTsKLXZhciBsb2FkU3RhbmRhcmRGcmFnbWVudFNoYWRlckFzeW5jID0gZnVu
Y3Rpb24oZ2wsIGNhbGxiYWNrKSB7Ci0gIGxvYWRTaGFkZXJGcm9tRmlsZUFzeW5jKGdsLCBnZXRS
ZXNvdXJjZVBhdGgoKSArICJmcmFnbWVudFNoYWRlci5mcmFnIiwgZ2wuRlJBR01FTlRfU0hBREVS
LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjYWxsYmFjayk7Ci19OwotCi12YXIg
bG9hZFVuaWZvcm1CbG9ja1Byb2dyYW0gPSBmdW5jdGlvbihnbCkgewotICB2YXIgcHJvZ3JhbSA9
IGdsLmNyZWF0ZVByb2dyYW0oKTsKLSAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGxvYWRVbmlm
b3JtQmxvY2tWZXJ0ZXhTaGFkZXIoZ2wpKTsKLSAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGxv
YWRVbmlmb3JtQmxvY2tGcmFnbWVudFNoYWRlcihnbCkpOwotICBnbC5iaW5kQXR0cmliTG9jYXRp
b24ocHJvZ3JhbSwgMCwgImFfdmVydGV4Iik7Ci0gIGdsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9n
cmFtLCAxLCAiYV9ub3JtYWwiKTsKLSAgbGlua1Byb2dyYW0oZ2wsIHByb2dyYW0pOwotICByZXR1
cm4gcHJvZ3JhbTsKLX07Ci0KLXZhciBsb2FkVW5pZm9ybUJsb2NrVmVydGV4U2hhZGVyID0gZnVu
Y3Rpb24oZ2wpIHsKLSAgcmV0dXJuIGxvYWRTaGFkZXJGcm9tRmlsZSgKLSAgICAgIGdsLCBnZXRS
ZXNvdXJjZVBhdGgoKSArICJ1bmlmb3JtQmxvY2tTaGFkZXIudmVydCIsIGdsLlZFUlRFWF9TSEFE
RVIpOwotfTsKLQotdmFyIGxvYWRVbmlmb3JtQmxvY2tGcmFnbWVudFNoYWRlciA9IGZ1bmN0aW9u
KGdsKSB7Ci0gIHJldHVybiBsb2FkU2hhZGVyRnJvbUZpbGUoCi0gICAgICBnbCwgZ2V0UmVzb3Vy
Y2VQYXRoKCkgKyAidW5pZm9ybUJsb2NrU2hhZGVyLmZyYWciLCBnbC5GUkFHTUVOVF9TSEFERVIp
OwotfTsKLQotLyoqCi0gKiBMb2FkcyBhbiBpbWFnZSBhc3luY2hyb25vdXNseS4KLSAqIEBwYXJh
bSB7c3RyaW5nfSB1cmwgVVJMIG9mIGltYWdlIHRvIGxvYWQuCi0gKiBAcGFyYW0geyFmdW5jdGlv
bighRWxlbWVudCk6IHZvaWR9IGNhbGxiYWNrIEZ1bmN0aW9uIHRvIGNhbGwKLSAqICAgICB3aXRo
IGxvYWRlZCBpbWFnZS4KLSAqLwotdmFyIGxvYWRJbWFnZUFzeW5jID0gZnVuY3Rpb24odXJsLCBj
YWxsYmFjaykgewotICB2YXIgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7Ci0g
IGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHsKLSAgICBjYWxsYmFjayhpbWcpOwotICB9OwotICBp
bWcuc3JjID0gdXJsOwotfTsKLQotLyoqCi0gKiBMb2FkcyBhbiBhcnJheSBvZiBpbWFnZXMuCi0g
KiBAcGFyYW0geyFBcnJheS48c3RyaW5nPn0gdXJscyBVUkxzIG9mIGltYWdlcyB0byBsb2FkLgot
ICogQHBhcmFtIHshZnVuY3Rpb24oIXtzdHJpbmcsIGltZ30pOiB2b2lkfSBjYWxsYmFjayBDYWxs
YmFjawotICogICAgIHRoYXQgZ2V0cyBwYXNzZWQgbWFwIG9mIHVybHMgdG8gaW1nIHRhZ3MuCi0g
Ki8KLXZhciBsb2FkSW1hZ2VzQXN5bmMgPSBmdW5jdGlvbih1cmxzLCBjYWxsYmFjaykgewotICB2
YXIgY291bnQgPSAxOwotICB2YXIgaW1hZ2VzID0geyB9OwotICBmdW5jdGlvbiBjb3VudERvd24o
KSB7Ci0gICAgLS1jb3VudDsKLSAgICBpZiAoY291bnQgPT0gMCkgewotICAgICAgbG9nKCJsb2Fk
SW1hZ2VzQXN5bmM6IGFsbCBpbWFnZXMgbG9hZGVkIik7Ci0gICAgICBjYWxsYmFjayhpbWFnZXMp
OwotICAgIH0KLSAgfQotICBmdW5jdGlvbiBpbWFnZUxvYWRlZCh1cmwpIHsKLSAgICByZXR1cm4g
ZnVuY3Rpb24oaW1nKSB7Ci0gICAgICBpbWFnZXNbdXJsXSA9IGltZzsKLSAgICAgIGxvZygibG9h
ZEltYWdlc0FzeW5jOiBsb2FkZWQgIiArIHVybCk7Ci0gICAgICBjb3VudERvd24oKTsKLSAgICB9
Ci0gIH0KLSAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHVybHMubGVuZ3RoOyArK2lpKSB7Ci0gICAg
Kytjb3VudDsKLSAgICBsb2FkSW1hZ2VBc3luYyh1cmxzW2lpXSwgaW1hZ2VMb2FkZWQodXJsc1tp
aV0pKTsKLSAgfQotICBjb3VudERvd24oKTsKLX07Ci0KLS8qKgotICogUmV0dXJucyBhIG1hcCBv
ZiBrZXk9dmFsdWUgdmFsdWVzIGZyb20gdXJsLgotICogQHJldHVybiB7IU9iamVjdC48c3RyaW5n
LCBudW1iZXI+fSBtYXAgb2Yga2V5cyB0byB2YWx1ZXMuCi0gKi8KLXZhciBnZXRVcmxBcmd1bWVu
dHMgPSBmdW5jdGlvbigpIHsKLSAgdmFyIGFyZ3MgPSB7fTsKLSAgdHJ5IHsKLSAgICB2YXIgcyA9
IHdpbmRvdy5sb2NhdGlvbi5ocmVmOwotICAgIHZhciBxID0gcy5pbmRleE9mKCI/Iik7Ci0gICAg
dmFyIGUgPSBzLmluZGV4T2YoIiMiKTsKLSAgICBpZiAoZSA8IDApIHsKLSAgICAgIGUgPSBzLmxl
bmd0aDsKLSAgICB9Ci0gICAgdmFyIHF1ZXJ5ID0gcy5zdWJzdHJpbmcocSArIDEsIGUpOwotICAg
IHZhciBwYWlycyA9IHF1ZXJ5LnNwbGl0KCImIik7Ci0gICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8
IHBhaXJzLmxlbmd0aDsgKytpaSkgewotICAgICAgdmFyIGtleVZhbHVlID0gcGFpcnNbaWldLnNw
bGl0KCI9Iik7Ci0gICAgICB2YXIga2V5ID0ga2V5VmFsdWVbMF07Ci0gICAgICB2YXIgdmFsdWUg
PSBkZWNvZGVVUklDb21wb25lbnQoa2V5VmFsdWVbMV0pOwotICAgICAgYXJnc1trZXldID0gdmFs
dWU7Ci0gICAgfQotICB9IGNhdGNoIChlKSB7Ci0gICAgdGhyb3cgImNvdWxkIG5vdCBwYXJzZSB1
cmwiOwotICB9Ci0gIHJldHVybiBhcmdzOwotfTsKLQotLyoqCi0gKiBNYWtlcyBhbiBpbWFnZSBm
cm9tIGEgc3JjLgotICogQHBhcmFtIHtzdHJpbmd9IHNyYyBJbWFnZSBzb3VyY2UgVVJMLgotICog
QHBhcmFtIHtmdW5jdGlvbigpfSBvbmxvYWQgQ2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBpbWFn
ZSBoYXMgZmluaXNlZCBsb2FkaW5nLgotICogQHBhcmFtIHtmdW5jdGlvbigpfSBvbmVycm9yIENh
bGxiYWNrIHRvIGNhbGwgd2hlbiBhbiBlcnJvciBvY2N1cnMuCi0gKiBAcmV0dXJuIHshSW1hZ2V9
IFRoZSBjcmVhdGVkIGltYWdlLgotICovCi12YXIgbWFrZUltYWdlID0gZnVuY3Rpb24oc3JjLCBv
bmxvYWQsIG9uZXJyb3IpIHsKLSAgdmFyIGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lt
ZycpOwotICBpZiAob25sb2FkKSB7Ci0gICAgaW1nLm9ubG9hZCA9IG9ubG9hZDsKLSAgfQotICBp
ZiAob25lcnJvcikgewotICAgIGltZy5vbmVycm9yID0gb25lcnJvcjsKLSAgfSBlbHNlIHsKLSAg
ICBpbWcub25lcnJvciA9IGZ1bmN0aW9uKCkgewotICAgICAgbG9nKCJXQVJOSU5HOiBjcmVhdGlu
ZyBpbWFnZSBmYWlsZWQ7IHNyYzogIiArIHRoaXMuc3JjKTsKLSAgICB9OwotICB9Ci0gIGlmIChz
cmMpIHsKLSAgICBpbWcuc3JjID0gc3JjOwotICB9Ci0gIHJldHVybiBpbWc7Ci19Ci0KLS8qKgot
ICogTWFrZXMgYW4gaW1hZ2UgZWxlbWVudCBmcm9tIGEgY2FudmFzLgotICogQHBhcmFtIHshSFRN
TENhbnZhc30gY2FudmFzIENhbnZhcyB0byBtYWtlIGltYWdlIGZyb20uCi0gKiBAcGFyYW0ge2Z1
bmN0aW9uKCl9IG9ubG9hZCBDYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIGltYWdlIGhhcyBmaW5p
c2VkIGxvYWRpbmcuCi0gKiBAcGFyYW0ge3N0cmluZ30gaW1hZ2VGb3JtYXQgSW1hZ2UgZm9ybWF0
IHRvIGJlIHBhc3NlZCB0byB0b0RhdGFVcmwoKS4KLSAqIEByZXR1cm4geyFJbWFnZX0gVGhlIGNy
ZWF0ZWQgaW1hZ2UuCi0gKi8KLXZhciBtYWtlSW1hZ2VGcm9tQ2FudmFzID0gZnVuY3Rpb24oY2Fu
dmFzLCBvbmxvYWQsIGltYWdlRm9ybWF0KSB7Ci0gIHJldHVybiBtYWtlSW1hZ2UoY2FudmFzLnRv
RGF0YVVSTChpbWFnZUZvcm1hdCksIG9ubG9hZCk7Ci19OwotCi0vKioKLSAqIE1ha2VzIGEgdmlk
ZW8gZWxlbWVudCBmcm9tIGEgc3JjLgotICogQHBhcmFtIHtzdHJpbmd9IHNyYyBWaWRlbyBzb3Vy
Y2UgVVJMLgotICogQHBhcmFtIHtmdW5jdGlvbigpfSBvbmVycm9yIENhbGxiYWNrIHRvIGNhbGwg
d2hlbiBhbiBlcnJvciBvY2N1cnMuCi0gKiBAcmV0dXJuIHshVmlkZW99IFRoZSBjcmVhdGVkIHZp
ZGVvLgotICovCi12YXIgbWFrZVZpZGVvID0gZnVuY3Rpb24oc3JjLCBvbmVycm9yKSB7Ci0gIHZh
ciB2aWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpOwotICB2aWQubXV0ZWQgPSB0
cnVlOwotICBpZiAob25lcnJvcikgewotICAgIHZpZC5vbmVycm9yID0gb25lcnJvcjsKLSAgfSBl
bHNlIHsKLSAgICB2aWQub25lcnJvciA9IGZ1bmN0aW9uKCkgewotICAgICAgbG9nKCJXQVJOSU5H
OiBjcmVhdGluZyB2aWRlbyBmYWlsZWQ7IHNyYzogIiArIHRoaXMuc3JjKTsKLSAgICB9OwotICB9
Ci0gIGlmIChzcmMpIHsKLSAgICB2aWQuc3JjID0gc3JjOwotICB9Ci0gIHJldHVybiB2aWQ7Ci19
Ci0KLS8qKgotICogSW5zZXJ0cyBhbiBpbWFnZSB3aXRoIGEgY2FwdGlvbiBpbnRvICdlbGVtZW50
Jy4KLSAqIEBwYXJhbSB7IUhUTUxFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdG8gYXBwZW5kIGlt
YWdlIHRvLgotICogQHBhcmFtIHtzdHJpbmd9IGNhcHRpb24gY2FwdGlvbiB0byBhc3NvY2lhdGUg
d2l0aCBpbWFnZS4KLSAqIEBwYXJhbSB7IUltYWdlfSBpbWcgaW1hZ2UgdG8gaW5zZXJ0LgotICov
Ci12YXIgaW5zZXJ0SW1hZ2UgPSBmdW5jdGlvbihlbGVtZW50LCBjYXB0aW9uLCBpbWcpIHsKLSAg
dmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICB2YXIgbGFiZWwgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgbGFiZWwuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUoY2FwdGlvbikpOwotICBkaXYuYXBwZW5kQ2hpbGQobGFiZWwpOwot
ICBkaXYuYXBwZW5kQ2hpbGQoaW1nKTsKLSAgZWxlbWVudC5hcHBlbmRDaGlsZChkaXYpOwotfTsK
LQotLyoqCi0gKiBJbnNlcnRzIGEgJ2xhYmVsJyB0aGF0IHdoZW4gY2xpY2tlZCBleHBhbmRzIHRv
IHRoZSBwcmUgZm9ybWF0dGVkIHRleHQKLSAqIHN1cHBsaWVkIGJ5ICdzb3VyY2UnLgotICogQHBh
cmFtIHshSFRNTEVsZW1lbnR9IGVsZW1lbnQgZWxlbWVudCB0byBhcHBlbmQgbGFiZWwgdG8uCi0g
KiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgbGFiZWwgZm9yIGFuY2hvci4KLSAqIEBwYXJhbSB7c3Ry
aW5nfSBzb3VyY2UgcHJlZm9ybWF0dGVkIHRleHQgdG8gZXhwYW5kIHRvLgotICogQHBhcmFtIHtz
dHJpbmd9IG9wdF91cmwgVVJMIG9mIHNvdXJjZS4gSWYgcHJvdmlkZWQgYSBsaW5rIHRvIHRoZSBz
b3VyY2UgZmlsZQotICogICAgIHdpbGwgYWxzbyBiZSBhZGRlZC4KLSAqLwotdmFyIGFkZFNoYWRl
clNvdXJjZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIGxhYmVsLCBzb3VyY2UsIG9wdF91cmwpIHsKLSAg
dmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICB2YXIgcyA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoInByZSIpOwotICBzLmNsYXNzTmFtZSA9ICJzaGFkZXItc291cmNl
IjsKLSAgcy5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICB2YXIgb2wgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJvbCIpOwotICAvL3MuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUoc291cmNlKSk7Ci0gIHZhciBsaW5lcyA9IHNvdXJjZS5zcGxpdCgiXG4iKTsKLSAgZm9yICh2
YXIgaWkgPSAwOyBpaSA8IGxpbmVzLmxlbmd0aDsgKytpaSkgewotICAgIHZhciBsaW5lID0gbGlu
ZXNbaWldOwotICAgIHZhciBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpIik7Ci0gICAg
bGkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobGluZSkpOwotICAgIG9sLmFw
cGVuZENoaWxkKGxpKTsKLSAgfQotICBzLmFwcGVuZENoaWxkKG9sKTsKLSAgdmFyIGwgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gIGwuaHJlZiA9ICJzaG93LXNoYWRlci1zb3VyY2Ui
OwotICBsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGxhYmVsKSk7Ci0gIGwu
YWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihldmVudCkgewotICAgICAgaWYgKGV2
ZW50LnByZXZlbnREZWZhdWx0KSB7Ci0gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0g
ICAgICB9Ci0gICAgICBzLnN0eWxlLmRpc3BsYXkgPSAocy5zdHlsZS5kaXNwbGF5ID09ICdub25l
JykgPyAnYmxvY2snIDogJ25vbmUnOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0sIGZhbHNl
KTsKLSAgZGl2LmFwcGVuZENoaWxkKGwpOwotICBpZiAob3B0X3VybCkgewotICAgIHZhciB1ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHUuaHJlZiA9IG9wdF91cmw7Ci0gICAg
ZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgIikpOwotICAgIHUuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIigiICsgb3B0X3VybCArICIpIikpOwot
ICAgIGRpdi5hcHBlbmRDaGlsZCh1KTsKLSAgfQotICBkaXYuYXBwZW5kQ2hpbGQocyk7Ci0gIGVs
ZW1lbnQuYXBwZW5kQ2hpbGQoZGl2KTsKLX07Ci0KLS8qKgotICogSW5zZXJ0cyBsYWJlbHMgdGhh
dCB3aGVuIGNsaWNrZWQgZXhwYW5kIHRvIHNob3cgdGhlIG9yaWdpbmFsIHNvdXJjZSBvZiB0aGUK
LSAqIHNoYWRlciBhbmQgYWxzbyB0cmFuc2xhdGVkIHNvdXJjZSBvZiB0aGUgc2hhZGVyLCBpZiB0
aGF0IGlzIGF2YWlsYWJsZS4KLSAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBU
aGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KLSAqIEBwYXJhbSB7IUhUTUxFbGVtZW50
fSBlbGVtZW50IGVsZW1lbnQgdG8gYXBwZW5kIGxhYmVsIHRvLgotICogQHBhcmFtIHtzdHJpbmd9
IGxhYmVsIGxhYmVsIGZvciBhbmNob3IuCi0gKiBAcGFyYW0ge1dlYkdMU2hhZGVyfSBzaGFkZXIg
U2hhZGVyIHRvIHNob3cgdGhlIHNvdXJjZXMgZm9yLgotICogQHBhcmFtIHtzdHJpbmd9IHNoYWRl
clNvdXJjZSBPcmlnaW5hbCBzaGFkZXIgc291cmNlLgotICogQHBhcmFtIHtzdHJpbmd9IG9wdF91
cmwgVVJMIG9mIHNvdXJjZS4gSWYgcHJvdmlkZWQgYSBsaW5rIHRvIHRoZSBzb3VyY2UgZmlsZQot
ICogICAgIHdpbGwgYWxzbyBiZSBhZGRlZC4KLSAqLwotdmFyIGFkZFNoYWRlclNvdXJjZXMgPSBm
dW5jdGlvbigKLSAgICBnbCwgZWxlbWVudCwgbGFiZWwsIHNoYWRlciwgc2hhZGVyU291cmNlLCBv
cHRfdXJsKSB7Ci0gIGFkZFNoYWRlclNvdXJjZShlbGVtZW50LCBsYWJlbCwgc2hhZGVyU291cmNl
LCBvcHRfdXJsKTsKLQotICB2YXIgZGVidWdTaGFkZXJzID0gZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJH
TF9kZWJ1Z19zaGFkZXJzJyk7Ci0gIGlmIChkZWJ1Z1NoYWRlcnMgJiYgc2hhZGVyKSB7Ci0gICAg
dmFyIHRyYW5zbGF0ZWRTb3VyY2UgPSBkZWJ1Z1NoYWRlcnMuZ2V0VHJhbnNsYXRlZFNoYWRlclNv
dXJjZShzaGFkZXIpOwotICAgIGlmICh0cmFuc2xhdGVkU291cmNlICE9ICcnKSB7Ci0gICAgICBh
ZGRTaGFkZXJTb3VyY2UoZWxlbWVudCwgbGFiZWwgKyAnIHRyYW5zbGF0ZWQgZm9yIGRyaXZlcics
IHRyYW5zbGF0ZWRTb3VyY2UpOwotICAgIH0KLSAgfQotfTsKLQotLyoqCi0gKiBTZW5kcyBzaGFk
ZXIgaW5mb3JtYXRpb24gdG8gdGhlIHNlcnZlciB0byBiZSBkdW1wZWQgaW50byB0ZXh0IGZpbGVz
Ci0gKiB3aGVuIHRlc3RzIGFyZSBydW4gZnJvbSB3aXRoaW4gdGhlIHRlc3QtcnVubmVyIGhhcm5l
c3MuCi0gKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVy
aW5nQ29udGV4dCB0byB1c2UuCi0gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFVSTCBvZiBjdXJyZW50
LgotICogQHBhcmFtIHtzdHJpbmd9IHBhc3NNc2cgVGVzdCBkZXNjcmlwdGlvbi4KLSAqIEBwYXJh
bSB7b2JqZWN0fSB2SW5mbyBPYmplY3QgY29udGFpbmluZyB2ZXJ0ZXggc2hhZGVyIGluZm9ybWF0
aW9uLgotICogQHBhcmFtIHtvYmplY3R9IGZJbmZvIE9iamVjdCBjb250YWluaW5nIGZyYWdtZW50
IHNoYWRlciBpbmZvcm1hdGlvbi4KLSAqLwotdmFyIGR1bXBTaGFkZXJzSW5mbyA9IGZ1bmN0aW9u
KGdsLCB1cmwsIHBhc3NNc2csIHZJbmZvLCBmSW5mbykgewotICB2YXIgc2hhZGVySW5mbyA9IHt9
OwotICBzaGFkZXJJbmZvLnVybCA9IHVybDsKLSAgc2hhZGVySW5mby50ZXN0RGVzY3JpcHRpb24g
PSBwYXNzTXNnOwotICBzaGFkZXJJbmZvLnZMYWJlbCA9IHZJbmZvLmxhYmVsOwotICBzaGFkZXJJ
bmZvLnZTaG91bGRDb21waWxlID0gdkluZm8uc2hhZGVyU3VjY2VzczsKLSAgc2hhZGVySW5mby52
U291cmNlID0gdkluZm8uc291cmNlOwotICBzaGFkZXJJbmZvLmZMYWJlbCA9IGZJbmZvLmxhYmVs
OwotICBzaGFkZXJJbmZvLmZTaG91bGRDb21waWxlID0gZkluZm8uc2hhZGVyU3VjY2VzczsKLSAg
c2hhZGVySW5mby5mU291cmNlID0gZkluZm8uc291cmNlOwotICBzaGFkZXJJbmZvLnZUcmFuc2xh
dGVkU291cmNlID0gbnVsbDsKLSAgc2hhZGVySW5mby5mVHJhbnNsYXRlZFNvdXJjZSA9IG51bGw7
Ci0gIHZhciBkZWJ1Z1NoYWRlcnMgPSBnbC5nZXRFeHRlbnNpb24oJ1dFQkdMX2RlYnVnX3NoYWRl
cnMnKTsKLSAgaWYgKGRlYnVnU2hhZGVycykgewotICAgIGlmICh2SW5mby5zaGFkZXIpCi0gICAg
ICBzaGFkZXJJbmZvLnZUcmFuc2xhdGVkU291cmNlID0gZGVidWdTaGFkZXJzLmdldFRyYW5zbGF0
ZWRTaGFkZXJTb3VyY2UodkluZm8uc2hhZGVyKTsKLSAgICBpZiAoZkluZm8uc2hhZGVyKQotICAg
ICAgc2hhZGVySW5mby5mVHJhbnNsYXRlZFNvdXJjZSA9IGRlYnVnU2hhZGVycy5nZXRUcmFuc2xh
dGVkU2hhZGVyU291cmNlKGZJbmZvLnNoYWRlcik7Ci0gIH0KLQotICB2YXIgZHVtcFNoYWRlcklu
Zm9SZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Ci0gIGR1bXBTaGFkZXJJbmZvUmVxdWVz
dC5vcGVuKCdQT1NUJywgIi9kdW1wU2hhZGVySW5mbyIsIHRydWUpOwotICBkdW1wU2hhZGVySW5m
b1JlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwgInRleHQvcGxhaW4iKTsK
LSAgZHVtcFNoYWRlckluZm9SZXF1ZXN0LnNlbmQoSlNPTi5zdHJpbmdpZnkoc2hhZGVySW5mbykp
OwotfTsKLQotLy8gQWRkIHlvdXIgcHJlZml4IGhlcmUuCi12YXIgYnJvd3NlclByZWZpeGVzID0g
WwotICAiIiwKLSAgIk1PWl8iLAotICAiT1BfIiwKLSAgIldFQktJVF8iCi1dOwotCi0vKioKLSAq
IEdpdmVuIGFuIGV4dGVuc2lvbiBuYW1lIGxpa2UgV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3Mz
dGMKLSAqIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHN1cHBvcnRlZCB2ZXJzaW9uIGV4dGVuc2lv
biwgbGlrZQotICogV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV0dXJlX3MzdGMKLSAqIEBwYXJh
bSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgZXh0ZW5zaW9uIHRvIGxvb2sgZm9yLgotICogQHJldHVy
biB7c3RyaW5nfSBuYW1lIG9mIGV4dGVuc2lvbiBmb3VuZCBvciB1bmRlZmluZWQgaWYgbm90Ci0g
KiAgICAgZm91bmQuCi0gKi8KLXZhciBnZXRTdXBwb3J0ZWRFeHRlbnNpb25XaXRoS25vd25QcmVm
aXhlcyA9IGZ1bmN0aW9uKGdsLCBuYW1lKSB7Ci0gIHZhciBzdXBwb3J0ZWQgPSBnbC5nZXRTdXBw
b3J0ZWRFeHRlbnNpb25zKCk7Ci0gIGZvciAodmFyIGlpID0gMDsgaWkgPCBicm93c2VyUHJlZml4
ZXMubGVuZ3RoOyArK2lpKSB7Ci0gICAgdmFyIHByZWZpeGVkTmFtZSA9IGJyb3dzZXJQcmVmaXhl
c1tpaV0gKyBuYW1lOwotICAgIGlmIChzdXBwb3J0ZWQuaW5kZXhPZihwcmVmaXhlZE5hbWUpID49
IDApIHsKLSAgICAgIHJldHVybiBwcmVmaXhlZE5hbWU7Ci0gICAgfQotICB9Ci19OwotCi0vKioK
LSAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdD
b250ZXh0IHRvIHVzZS4KLSAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgZXh0ZW5zaW9u
IHRvIGxvb2sgZm9yLgotICogQHBhcmFtIHtib29sZWFufSBleHRlbnNpb25FbmFibGVkIFRydWUg
aWYgdGhlIGV4dGVuc2lvbiB3YXMgZW5hYmxlZCBzdWNjZXNzZnVsbHkgdmlhIGdsLmdldEV4dGVu
c2lvbigpLgotICovCi12YXIgcnVuRXh0ZW5zaW9uU3VwcG9ydGVkVGVzdCA9IGZ1bmN0aW9uKGds
LCBuYW1lLCBleHRlbnNpb25FbmFibGVkKSB7Ci0gIHZhciBwcmVmaXhlZE5hbWUgPSBnZXRTdXBw
b3J0ZWRFeHRlbnNpb25XaXRoS25vd25QcmVmaXhlcyhnbCwgbmFtZSk7Ci0gIGlmIChwcmVmaXhl
ZE5hbWUgIT09IHVuZGVmaW5lZCkgewotICAgICAgaWYgKGV4dGVuc2lvbkVuYWJsZWQpIHsKLSAg
ICAgICAgICB0ZXN0UGFzc2VkKG5hbWUgKyAiIGxpc3RlZCBhcyBzdXBwb3J0ZWQgYW5kIGdldEV4
dGVuc2lvbiBzdWNjZWVkZWQiKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdGVzdEZhaWxl
ZChuYW1lICsgIiBsaXN0ZWQgYXMgc3VwcG9ydGVkIGJ1dCBnZXRFeHRlbnNpb24gZmFpbGVkIik7
Ci0gICAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgICBpZiAoZXh0ZW5zaW9uRW5hYmxlZCkgewotICAg
ICAgICAgIHRlc3RGYWlsZWQobmFtZSArICIgbm90IGxpc3RlZCBhcyBzdXBwb3J0ZWQgYnV0IGdl
dEV4dGVuc2lvbiBzdWNjZWVkZWQiKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdGVzdFBh
c3NlZChuYW1lICsgIiBub3QgbGlzdGVkIGFzIHN1cHBvcnRlZCBhbmQgZ2V0RXh0ZW5zaW9uIGZh
aWxlZCAtLSB0aGlzIGlzIGxlZ2FsIik7Ci0gICAgICB9Ci0gIH0KLX0KLQotLyoqCi0gKiBHaXZl
biBhbiBleHRlbnNpb24gbmFtZSBsaWtlIFdFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjCi0g
KiByZXR1cm5zIHRoZSBzdXBwb3J0ZWQgdmVyc2lvbiBleHRlbnNpb24sIGxpa2UKLSAqIFdFQktJ
VF9XRUJHTF9jb21wcmVzc2VkX3RldHVyZV9zM3RjCi0gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBO
YW1lIG9mIGV4dGVuc2lvbiB0byBsb29rIGZvci4KLSAqIEByZXR1cm4ge1dlYkdMRXh0ZW5zaW9u
fSBUaGUgZXh0ZW5zaW9uIG9yIHVuZGVmaW5lZCBpZiBub3QKLSAqICAgICBmb3VuZC4KLSAqLwot
dmFyIGdldEV4dGVuc2lvbldpdGhLbm93blByZWZpeGVzID0gZnVuY3Rpb24oZ2wsIG5hbWUpIHsK
LSAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGJyb3dzZXJQcmVmaXhlcy5sZW5ndGg7ICsraWkpIHsK
LSAgICB2YXIgcHJlZml4ZWROYW1lID0gYnJvd3NlclByZWZpeGVzW2lpXSArIG5hbWU7Ci0gICAg
dmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihwcmVmaXhlZE5hbWUpOwotICAgIGlmIChleHQpIHsK
LSAgICAgIHJldHVybiBleHQ7Ci0gICAgfQotICB9Ci19OwotCi0vKioKLSAqIFJldHVybnMgcG9z
c2libGUgcHJlZml4ZWQgdmVyc2lvbnMgb2YgYW4gZXh0ZW5zaW9uJ3MgbmFtZS4KLSAqIEBwYXJh
bSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgZXh0ZW5zaW9uLiBNYXkgYWxyZWFkeSBpbmNsdWRlIGEg
cHJlZml4LgotICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59IFZhcmlhdGlvbnMgb2YgdGhlIGV4
dGVuc2lvbiBuYW1lIHdpdGgga25vd24KLSAqICAgICBicm93c2VyIHByZWZpeGVzLgotICovCi12
YXIgZ2V0RXh0ZW5zaW9uUHJlZml4ZWROYW1lcyA9IGZ1bmN0aW9uKG5hbWUpIHsKLSAgdmFyIHVu
cHJlZml4ID0gZnVuY3Rpb24obmFtZSkgewotICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBicm93
c2VyUHJlZml4ZXMubGVuZ3RoOyArK2lpKSB7Ci0gICAgICBpZiAoYnJvd3NlclByZWZpeGVzW2lp
XS5sZW5ndGggPiAwICYmCi0gICAgICAgICAgbmFtZS5zdWJzdHJpbmcoMCwgYnJvd3NlclByZWZp
eGVzW2lpXS5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09Ci0gICAgICAgICAgYnJvd3NlclByZWZp
eGVzW2lpXS50b0xvd2VyQ2FzZSgpKSB7Ci0gICAgICAgIHJldHVybiBuYW1lLnN1YnN0cmluZyhi
cm93c2VyUHJlZml4ZXNbaWldLmxlbmd0aCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBu
YW1lOwotICB9Ci0KLSAgdmFyIHVucHJlZml4ZWQgPSB1bnByZWZpeChuYW1lKTsKLQotICB2YXIg
dmFyaWF0aW9ucyA9IFtdOwotICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgYnJvd3NlclByZWZpeGVz
Lmxlbmd0aDsgKytpaSkgewotICAgIHZhcmlhdGlvbnMucHVzaChicm93c2VyUHJlZml4ZXNbaWld
ICsgdW5wcmVmaXhlZCk7Ci0gIH0KLQotICByZXR1cm4gdmFyaWF0aW9uczsKLX07Ci0KLXZhciBy
ZXBsYWNlUkUgPSAvXCRcKChcdyspXCkvZzsKLQotLyoqCi0gKiBSZXBsYWNlcyBzdHJpbmdzIHdp
dGggcHJvcGVydHkgdmFsdWVzLgotICogR2l2ZW4gYSBzdHJpbmcgbGlrZSAiaGVsbG8gJChmaXJz
dCkgJChsYXN0KSIgYW5kIGFuIG9iamVjdAotICogbGlrZSB7Zmlyc3Q6IkpvaG4iLCBsYXN0OiJT
bWl0aCJ9IHdpbGwgcmV0dXJuCi0gKiAiaGVsbG8gSm9obiBTbWl0aCIuCi0gKiBAcGFyYW0ge3N0
cmluZ30gc3RyIFN0cmluZyB0byBkbyByZXBsYWNlbWVudHMgaW4uCi0gKiBAcGFyYW0gey4uLn0g
MSBvciBtb3JlIG9iamVjdHMgY29udGFpbmluZyBwcm9wZXJ0aWVzLgotICovCi12YXIgcmVwbGFj
ZVBhcmFtcyA9IGZ1bmN0aW9uKHN0cikgewotICB2YXIgYXJncyA9IGFyZ3VtZW50czsKLSAgcmV0
dXJuIHN0ci5yZXBsYWNlKHJlcGxhY2VSRSwgZnVuY3Rpb24oc3RyLCBwMSwgb2Zmc2V0LCBzKSB7
Ci0gICAgZm9yICh2YXIgaWkgPSAxOyBpaSA8IGFyZ3MubGVuZ3RoOyArK2lpKSB7Ci0gICAgICBp
ZiAoYXJnc1tpaV1bcDFdICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgcmV0dXJuIGFyZ3NbaWld
W3AxXTsKLSAgICAgIH0KLSAgICB9Ci0gICAgdGhyb3cgInVua25vd24gc3RyaW5nIHBhcmFtICci
ICsgcDEgKyAiJyI7Ci0gIH0pOwotfTsKLQotdmFyIHVwcGVyQ2FzZUZpcnN0TGV0dGVyID0gZnVu
Y3Rpb24oc3RyKSB7Ci0gIHJldHVybiBzdHIuc3Vic3RyaW5nKDAsIDEpLnRvVXBwZXJDYXNlKCkg
KyBzdHIuc3Vic3RyaW5nKDEpOwotfTsKLQotLyoqCi0gKiBHZXRzIGEgcHJlZml4ZWQgcHJvcGVy
dHkuIEZvciBleGFtcGxlLAotICoKLSAqICAgICB2YXIgZm4gPSBnZXRQcmVmaXhlZFByb3BlcnR5
KAotICogICAgICAgIHdpbmRvdywKLSAqICAgICAgICAicmVxdWVzdEFuaW1hdGlvbkZyYW1lIik7
Ci0gKgotICogV2lsbCByZXR1cm4gZWl0aGVyOgotICogICAgIndpbmRvdy5yZXF1ZXN0QW5pbWF0
aW9uRnJhbWUiLAotICogICAgIndpbmRvdy5vUmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwKLSAqICAg
ICJ3aW5kb3cubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLAotICogICAgIndpbmRvdy5tb3pSZXF1
ZXN0QW5pbWF0aW9uRnJhbWUiLAotICogICAgIndpbmRvdy53ZWJLaXRSZXF1ZXN0QW5pbWF0aW9u
RnJhbWUiLAotICogICAgdW5kZWZpbmVkCi0gKgotICogdGhlIG5vbi1wcmVmaXhlZCBmdW5jdGlv
biBpcyB0cmllZCBmaXJzdC4KLSAqLwotdmFyIHByb3BlcnR5UHJlZml4ZXMgPSBbIiIsICJtb3oi
LCAibXMiLCAibyIsICJ3ZWJraXQiXTsKLXZhciBnZXRQcmVmaXhlZFByb3BlcnR5ID0gZnVuY3Rp
b24ob2JqLCBwcm9wZXJ0eU5hbWUpIHsKLSAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHByb3BlcnR5
UHJlZml4ZXMubGVuZ3RoOyArK2lpKSB7Ci0gICAgdmFyIHByZWZpeCA9IHByb3BlcnR5UHJlZml4
ZXNbaWldOwotICAgIHZhciBuYW1lID0gcHJlZml4ICsgcHJvcGVydHlOYW1lOwotICAgIGxvZyhu
YW1lKTsKLSAgICB2YXIgcHJvcGVydHkgPSBvYmpbbmFtZV07Ci0gICAgaWYgKHByb3BlcnR5KSB7
Ci0gICAgICByZXR1cm4gcHJvcGVydHk7Ci0gICAgfQotICAgIGlmIChpaSA9PSAwKSB7Ci0gICAg
ICBwcm9wZXJ0eU5hbWUgPSB1cHBlckNhc2VGaXJzdExldHRlcihwcm9wZXJ0eU5hbWUpOwotICAg
IH0KLSAgfQotICByZXR1cm4gdW5kZWZpbmVkOwotfTsKLQotdmFyIF9yZXF1ZXN0QW5pbUZyYW1l
OwotCi0vKioKLSAqIFByb3ZpZGVzIHJlcXVlc3RBbmltYXRpb25GcmFtZSBpbiBhIGNyb3NzIGJy
b3dzZXIgd2F5LgotICovCi12YXIgcmVxdWVzdEFuaW1GcmFtZSA9IGZ1bmN0aW9uKGNhbGxiYWNr
KSB7Ci0gIGlmICghX3JlcXVlc3RBbmltRnJhbWUpIHsKLSAgICBfcmVxdWVzdEFuaW1GcmFtZSA9
IGdldFByZWZpeGVkUHJvcGVydHkod2luZG93LCAicmVxdWVzdEFuaW1hdGlvbkZyYW1lIikgfHwK
LSAgICAgIGZ1bmN0aW9uKGNhbGxiYWNrLCBlbGVtZW50KSB7Ci0gICAgICAgIHJldHVybiB3aW5k
b3cuc2V0VGltZW91dChjYWxsYmFjaywgMTAwMCAvIDcwKTsKLSAgICAgIH07Ci0gIH0KLSAgX3Jl
cXVlc3RBbmltRnJhbWUuY2FsbCh3aW5kb3csIGNhbGxiYWNrKTsKLX07Ci0KLS8qKgotICogUHJv
dmlkZXMgdmlkZW8ucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayBpbiBhIGNyb3NzIGJyb3dzZXIg
d2F5LgotICogUmV0dXJucyBhIHByb3BlcnR5LCBvciB1bmRlZmluZWQgaWYgdW5zdXBvcnRlZC4K
LSAqLwotdmFyIGdldFJlcXVlc3RWaWRGcmFtZUNhbGxiYWNrID0gZnVuY3Rpb24oKSB7Ci0gIHJl
dHVybiBIVE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZVsicmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFj
ayJdOwotfTsKLQotdmFyIF9jYW5jZWxBbmltRnJhbWU7Ci0KLS8qKgotICogUHJvdmlkZXMgY2Fu
Y2VsQW5pbWF0aW9uRnJhbWUgaW4gYSBjcm9zcyBicm93c2VyIHdheS4KLSAqLwotdmFyIGNhbmNl
bEFuaW1GcmFtZSA9IGZ1bmN0aW9uKHJlcXVlc3QpIHsKLSAgaWYgKCFfY2FuY2VsQW5pbUZyYW1l
KSB7Ci0gICAgX2NhbmNlbEFuaW1GcmFtZSA9IGdldFByZWZpeGVkUHJvcGVydHkod2luZG93LCAi
Y2FuY2VsQW5pbWF0aW9uRnJhbWUiKSB8fAotICAgICAgd2luZG93LmNsZWFyVGltZW91dDsKLSAg
fQotICBfY2FuY2VsQW5pbUZyYW1lLmNhbGwod2luZG93LCByZXF1ZXN0KTsKLX07Ci0KLS8qKgot
ICogUHJvdmlkZXMgcmVxdWVzdEZ1bGxTY3JlZW4gaW4gYSBjcm9zcyBicm93c2VyIHdheS4KLSAq
LwotdmFyIHJlcXVlc3RGdWxsU2NyZWVuID0gZnVuY3Rpb24oZWxlbWVudCkgewotICB2YXIgZm4g
PSBnZXRQcmVmaXhlZFByb3BlcnR5KGVsZW1lbnQsICJyZXF1ZXN0RnVsbFNjcmVlbiIpOwotICBp
ZiAoZm4pIHsKLSAgICBmbi5jYWxsKGVsZW1lbnQpOwotICB9Ci19OwotCi0vKioKLSAqIFByb3Zp
ZGVzIGNhbmNlbEZ1bGxTY3JlZW4gaW4gYSBjcm9zcyBicm93c2VyIHdheS4KLSAqLwotdmFyIGNh
bmNlbEZ1bGxTY3JlZW4gPSBmdW5jdGlvbigpIHsKLSAgdmFyIGZuID0gZ2V0UHJlZml4ZWRQcm9w
ZXJ0eShkb2N1bWVudCwgImNhbmNlbEZ1bGxTY3JlZW4iKTsKLSAgaWYgKGZuKSB7Ci0gICAgZm4u
Y2FsbChkb2N1bWVudCk7Ci0gIH0KLX07Ci0KLXZhciBmdWxsU2NyZWVuU3RhdGVOYW1lOwotKGZ1
bmN0aW9uKCkgewotICB2YXIgZnVsbFNjcmVlblN0YXRlTmFtZXMgPSBbCi0gICAgImlzRnVsbFNj
cmVlbiIsCi0gICAgImZ1bGxTY3JlZW4iCi0gIF07Ci0gIGZvciAodmFyIGlpID0gMDsgaWkgPCBm
dWxsU2NyZWVuU3RhdGVOYW1lcy5sZW5ndGg7ICsraWkpIHsKLSAgICB2YXIgcHJvcGVydHlOYW1l
ID0gZnVsbFNjcmVlblN0YXRlTmFtZXNbaWldOwotICAgIGZvciAodmFyIGpqID0gMDsgamogPCBw
cm9wZXJ0eVByZWZpeGVzLmxlbmd0aDsgKytqaikgewotICAgICAgdmFyIHByZWZpeCA9IHByb3Bl
cnR5UHJlZml4ZXNbampdOwotICAgICAgaWYgKHByZWZpeC5sZW5ndGgpIHsKLSAgICAgICAgcHJv
cGVydHlOYW1lID0gdXBwZXJDYXNlRmlyc3RMZXR0ZXIocHJvcGVydHlOYW1lKTsKLSAgICAgICAg
ZnVsbFNjcmVlblN0YXRlTmFtZSA9IHByZWZpeCArIHByb3BlcnR5TmFtZTsKLSAgICAgICAgaWYg
KGRvY3VtZW50W2Z1bGxTY3JlZW5TdGF0ZU5hbWVdICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZnVsbFNjcmVlblN0YXRl
TmFtZSA9IHVuZGVmaW5lZDsKLSAgfQotfSgpKTsKLQotLyoqCi0gKiBAcmV0dXJuIHtib29sZWFu
fSBUcnVlIGlmIGZ1bGxzY3JlZW4gbW9kZSBpcyBhY3RpdmUuCi0gKi8KLXZhciBnZXRGdWxsU2Ny
ZWVuU3RhdGUgPSBmdW5jdGlvbigpIHsKLSAgbG9nKCJmdWxsc2NyZWVuc3RhdGVuYW1lOiIgKyBm
dWxsU2NyZWVuU3RhdGVOYW1lKTsKLSAgbG9nKGRvY3VtZW50W2Z1bGxTY3JlZW5TdGF0ZU5hbWVd
KTsKLSAgcmV0dXJuIGRvY3VtZW50W2Z1bGxTY3JlZW5TdGF0ZU5hbWVdOwotfTsKLQotLyoqCi0g
KiBAcGFyYW0geyFIVE1MRWxlbWVudH0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBnbyBmdWxsc2Ny
ZWVuLgotICogQHBhcmFtIHshZnVuY3Rpb24oYm9vbGVhbil9IGNhbGxiYWNrIEEgZnVuY3Rpb24g
dGhhdCB3aWxsIGJlIGNhbGxlZAotICogICAgICAgIHdoZW4gZW50ZXJpbmcvZXhpdGluZyBmdWxs
c2NyZWVuLiBJdCBpcyBwYXNzZWQgdHJ1ZSBpZgotICogICAgICAgIGVudGVyaW5nIGZ1bGxzY3Jl
ZW4sIGZhbHNlIGlmIGV4aXRpbmcuCi0gKi8KLXZhciBvbkZ1bGxTY3JlZW5DaGFuZ2UgPSBmdW5j
dGlvbihlbGVtZW50LCBjYWxsYmFjaykgewotICBwcm9wZXJ0eVByZWZpeGVzLmZvckVhY2goZnVu
Y3Rpb24ocHJlZml4KSB7Ci0gICAgdmFyIGV2ZW50TmFtZSA9IHByZWZpeCArICJmdWxsc2NyZWVu
Y2hhbmdlIjsKLSAgICBsb2coImFkZGV2ZW50OiAiICsgZXZlbnROYW1lKTsKLSAgICBkb2N1bWVu
dC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgIGxv
ZygiZXZlbnQ6ICIgKyBldmVudE5hbWUpOwotICAgICAgY2FsbGJhY2soZ2V0RnVsbFNjcmVlblN0
YXRlKCkpOwotICAgIH0pOwotICB9KTsKLX07Ci0KLS8qKgotICogQHBhcmFtIHshc3RyaW5nfSBi
dXR0b25JZCBUaGUgaWQgb2YgdGhlIGJ1dHRvbiB0aGF0IHdpbGwgdG9nZ2xlIGZ1bGxzY3JlZW4K
LSAqICAgICAgICBtb2RlLgotICogQHBhcmFtIHshc3RyaW5nfSBmdWxsc2NyZWVuSWQgVGhlIGlk
IG9mIHRoZSBlbGVtZW50IHRvIGdvIGZ1bGxzY3JlZW4uCi0gKiBAcGFyYW0geyFmdW5jdGlvbihi
b29sZWFuKX0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkCi0gKiAgICAg
ICAgd2hlbiBlbnRlcmluZy9leGl0aW5nIGZ1bGxzY3JlZW4uIEl0IGlzIHBhc3NlZCB0cnVlIGlm
Ci0gKiAgICAgICAgZW50ZXJpbmcgZnVsbHNjcmVlbiwgZmFsc2UgaWYgZXhpdGluZy4KLSAqIEBy
ZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgZnVsbHNjcmVlbiBtb2RlIGlzIHN1cHBvcnRlZC4KLSAq
LwotdmFyIHNldHVwRnVsbHNjcmVlbiA9IGZ1bmN0aW9uKGJ1dHRvbklkLCBmdWxsc2NyZWVuSWQs
IGNhbGxiYWNrKSB7Ci0gIGlmICghZnVsbFNjcmVlblN0YXRlTmFtZSkgewotICAgIHJldHVybiBm
YWxzZTsKLSAgfQotCi0gIHZhciBmdWxsc2NyZWVuRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKGZ1bGxzY3JlZW5JZCk7Ci0gIG9uRnVsbFNjcmVlbkNoYW5nZShmdWxsc2NyZWVuRWxl
bWVudCwgY2FsbGJhY2spOwotCi0gIHZhciB0b2dnbGVGdWxsU2NyZWVuID0gZnVuY3Rpb24oZXZl
bnQpIHsKLSAgICBpZiAoZ2V0RnVsbFNjcmVlblN0YXRlKCkpIHsKLSAgICAgIGNhbmNlbEZ1bGxT
Y3JlZW4oZnVsbHNjcmVlbkVsZW1lbnQpOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXF1ZXN0RnVs
bFNjcmVlbihmdWxsc2NyZWVuRWxlbWVudCk7Ci0gICAgfQotICAgIGV2ZW50LnByZXZlbnREZWZh
dWx0KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9OwotCi0gIHZhciBidXR0b25FbGVtZW50ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYnV0dG9uSWQpOwotICBidXR0b25FbGVtZW50LmFkZEV2
ZW50TGlzdGVuZXIoJ2NsaWNrJywgdG9nZ2xlRnVsbFNjcmVlbik7Ci0KLSAgcmV0dXJuIHRydWU7
Ci19OwotCi0vKioKLSAqIFdhaXRzIGZvciB0aGUgYnJvd3NlciB0byBjb21wb3NpdGUgdGhlIHdl
YiBwYWdlLgotICogQHBhcmFtIHtmdW5jdGlvbigpfSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNh
bGwgYWZ0ZXIgY29tcG9zaXRpbmcgaGFzIHRha2VuCi0gKiAgICAgICAgcGxhY2UuCi0gKi8KLXZh
ciB3YWl0Rm9yQ29tcG9zaXRlID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKLSAgdmFyIGZyYW1lcyA9
IDU7Ci0gIHZhciBjb3VudERvd24gPSBmdW5jdGlvbigpIHsKLSAgICBpZiAoZnJhbWVzID09IDAp
IHsKLSAgICAgIC8vIFRPRE8oa2JyKTogdW5pZnkgd2l0aCBqcy10ZXN0LXByZS5qcyBhbmQgZW5h
YmxlIHRoZXNlIHdpdGgKLSAgICAgIC8vIHZlcmJvc2UgbG9nZ2luZy4KLSAgICAgIC8vIGxvZygi
d2FpdEZvckNvbXBvc2l0ZTogY2FsbGJhY2siKTsKLSAgICAgIGNhbGxiYWNrKCk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgIC8vIGxvZygid2FpdEZvckNvbXBvc2l0ZTogY291bnRkb3duKCIgKyBmcmFt
ZXMgKyAiKSIpOwotICAgICAgLS1mcmFtZXM7Ci0gICAgICByZXF1ZXN0QW5pbUZyYW1lLmNhbGwo
d2luZG93LCBjb3VudERvd24pOwotICAgIH0KLSAgfTsKLSAgY291bnREb3duKCk7Ci19OwotCi12
YXIgc2V0WmVyb1RpbWVvdXQgPSAoZnVuY3Rpb24oKSB7Ci0gIC8vIFNlZSBodHRwczovL2RiYXJv
bi5vcmcvbG9nLzIwMTAwMzA5LWZhc3Rlci10aW1lb3V0cwotCi0gIHZhciB0aW1lb3V0cyA9IFtd
OwotICB2YXIgbWVzc2FnZU5hbWUgPSAiemVyby10aW1lb3V0LW1lc3NhZ2UiOwotCi0gIC8vIExp
a2Ugc2V0VGltZW91dCwgYnV0IG9ubHkgdGFrZXMgYSBmdW5jdGlvbiBhcmd1bWVudC4gIFRoZXJl
J3MKLSAgLy8gbm8gdGltZSBhcmd1bWVudCAoYWx3YXlzIHplcm8pIGFuZCBubyBhcmd1bWVudHMg
KHlvdSBoYXZlIHRvCi0gIC8vIHVzZSBhIGNsb3N1cmUpLgotICBmdW5jdGlvbiBzZXRaZXJvVGlt
ZW91dChmbikgewotICAgICAgdGltZW91dHMucHVzaChmbik7Ci0gICAgICB3aW5kb3cucG9zdE1l
c3NhZ2UobWVzc2FnZU5hbWUsICIqIik7Ci0gIH0KLQotICBmdW5jdGlvbiBoYW5kbGVNZXNzYWdl
KGV2ZW50KSB7Ci0gICAgICBpZiAoZXZlbnQuc291cmNlID09IHdpbmRvdyAmJiBldmVudC5kYXRh
ID09IG1lc3NhZ2VOYW1lKSB7Ci0gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0g
ICAgICAgICAgaWYgKHRpbWVvdXRzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgdmFyIGZu
ID0gdGltZW91dHMuc2hpZnQoKTsKLSAgICAgICAgICAgICAgZm4oKTsKLSAgICAgICAgICB9Ci0g
ICAgICB9Ci0gIH0KLQotICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIGhhbmRs
ZU1lc3NhZ2UsIHRydWUpOwotCi0gIHJldHVybiBzZXRaZXJvVGltZW91dDsKLX0pKCk7Ci0KLWZ1
bmN0aW9uIGRpc3BhdGNoUHJvbWlzZShmbikgewotICByZXR1cm4gbmV3IFByb21pc2UoKGZuX3Jl
c29sdmUsIGZuX3JlamVjdCkgPT4gewotICAgIHNldFplcm9UaW1lb3V0KCgpID0+IHsKLSAgICAg
IGZuX3Jlc29sdmUoZm4oKSk7Ci0gICAgfSk7Ci0gIH0pOwotfQotCi0vKioKLSAqIFJ1bnMgYW4g
YXJyYXkgb2YgZnVuY3Rpb25zLCB5aWVsZGluZyB0byB0aGUgYnJvd3NlciBiZXR3ZWVuIGVhY2gg
c3RlcC4KLSAqIElmIHlvdSB3YW50IHRvIGtub3cgd2hlbiBhbGwgdGhlIHN0ZXBzIGFyZSBmaW5p
c2hlZCBhZGQgYSBsYXN0IHN0ZXAuCi0gKiBAcGFyYW0geyFBcnJheS48ZnVuY3Rpb24oKTogdm9p
ZD59IHN0ZXBzIEFycmF5IG9mIGZ1bmN0aW9ucy4KLSAqLwotdmFyIHJ1blN0ZXBzID0gZnVuY3Rp
b24oc3RlcHMpIHsKLSAgaWYgKCFzdGVwcy5sZW5ndGgpIHsKLSAgICByZXR1cm47Ci0gIH0KLQot
ICAvLyBjb3B5IHN0ZXBzIHNvIHRoZXkgY2FuJ3QgYmUgbW9kaWZlZC4KLSAgdmFyIHN0ZXBzVG9S
dW4gPSBzdGVwcy5zbGljZSgpOwotICB2YXIgY3VycmVudFN0ZXAgPSAwOwotICB2YXIgcnVuTmV4
dFN0ZXAgPSBmdW5jdGlvbigpIHsKLSAgICBzdGVwc1RvUnVuW2N1cnJlbnRTdGVwKytdKCk7Ci0g
ICAgaWYgKGN1cnJlbnRTdGVwIDwgc3RlcHNUb1J1bi5sZW5ndGgpIHsKLSAgICAgIHNldFRpbWVv
dXQocnVuTmV4dFN0ZXAsIDEpOwotICAgIH0KLSAgfTsKLSAgcnVuTmV4dFN0ZXAoKTsKLX07Ci0K
LS8qKgotICogU3RhcnRzIHBsYXlpbmcgYSB2aWRlbyBhbmQgd2FpdHMgZm9yIGl0IHRvIGJlIGNv
bnN1bWFibGUuCi0gKiBAcGFyYW0geyFIVE1MVmlkZW9FbGVtZW50fSB2aWRlbyBBbiBIVE1MNSBW
aWRlbyBlbGVtZW50LgotICogQHBhcmFtIHshZnVuY3Rpb24oIUhUTUxWaWRlb0VsZW1lbnQpOiB2
b2lkfSBjYWxsYmFjayBGdW5jdGlvbiB0byBjYWxsIHdoZW4KLSAqICAgICAgICB2aWRlbyBpcyBy
ZWFkeS4KLSAqLwotdmFyIHN0YXJ0UGxheWluZ0FuZFdhaXRGb3JWaWRlbyA9IGZ1bmN0aW9uKHZp
ZGVvLCBjYWxsYmFjaykgewotICB2YXIgcnZmYyA9IGdldFJlcXVlc3RWaWRGcmFtZUNhbGxiYWNr
KCk7Ci0gIGlmIChydmZjID09PSB1bmRlZmluZWQpIHsKLSAgICB2YXIgdGltZVdhdGNoZXIgPSBm
dW5jdGlvbigpIHsKLSAgICAgIGlmICh2aWRlby5jdXJyZW50VGltZSA+IDApIHsKLSAgICAgICAg
Y2FsbGJhY2sodmlkZW8pOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVxdWVzdEFuaW1GcmFt
ZS5jYWxsKHdpbmRvdywgdGltZVdhdGNoZXIpOwotICAgICAgfQotICAgIH07Ci0KLSAgICB0aW1l
V2F0Y2hlcigpOwotICB9IGVsc2UgewotICAgIC8vIENhbGxzIHZpZGVvLnJlcXVlc3RWaWRlb0Zy
YW1lQ2FsbGJhY2soXyA9PiB7IGNhbGxiYWNrKHZpZGVvKSB9KQotICAgIHJ2ZmMuY2FsbCh2aWRl
bywgXyA9PiB7IGNhbGxiYWNrKHZpZGVvKSB9KTsKLSAgfQotCi0gIHZpZGVvLmxvb3AgPSB0cnVl
OwotICB2aWRlby5tdXRlZCA9IHRydWU7Ci0gIC8vIFNlZSB3aGV0aGVyIHNldHRpbmcgdGhlIHBy
ZWxvYWQgZmxhZyBkZS1mbGFrZXMgdmlkZW8tcmVsYXRlZCB0ZXN0cy4KLSAgdmlkZW8ucHJlbG9h
ZCA9ICdhdXRvJzsKLSAgdmlkZW8ucGxheSgpOwotfTsKLQotdmFyIGdldEhvc3QgPSBmdW5jdGlv
bih1cmwpIHsKLSAgdXJsID0gdXJsLnJlcGxhY2UoIlxcIiwgIi8iKTsKLSAgdmFyIHBvcyA9IHVy
bC5pbmRleE9mKCI6Ly8iKTsKLSAgaWYgKHBvcyA+PSAwKSB7Ci0gICAgdXJsID0gdXJsLnN1YnN0
cihwb3MgKyAzKTsKLSAgfQotICB2YXIgcGFydHMgPSB1cmwuc3BsaXQoJy8nKTsKLSAgcmV0dXJu
IHBhcnRzWzBdOwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxhc3QgMiB3b3Jk
cyBvZiB0aGUgZG9tYWluIG9mIGEgVVJMCi0vLyBUaGlzIGlzIHByb2JhYmx5IG5vdCB0aGUgY29y
cmVjdCBjaGVjayBidXQgaXQgd2lsbCBkbyBmb3Igbm93LgotdmFyIGdldEJhc2VEb21haW4gPSBm
dW5jdGlvbihob3N0KSB7Ci0gIHZhciBwYXJ0cyA9IGhvc3Quc3BsaXQoIjoiKTsKLSAgdmFyIGhv
c3RuYW1lID0gcGFydHNbMF07Ci0gIHZhciBwb3J0ID0gcGFydHNbMV0gfHwgIjgwIjsKLSAgcGFy
dHMgPSBob3N0bmFtZS5zcGxpdCgiLiIpOwotICBpZihwYXJ0cy5sZW5ndGggPCAyKQotICAgIHJl
dHVybiBob3N0bmFtZSArICI6IiArIHBvcnQ7Ci0gIHZhciB0bGQgPSBwYXJ0c1twYXJ0cy5sZW5n
dGgtMV07Ci0gIHZhciBkb21haW4gPSBwYXJ0c1twYXJ0cy5sZW5ndGgtMl07Ci0gIHJldHVybiBk
b21haW4gKyAiLiIgKyB0bGQgKyAiOiIgKyBwb3J0OwotfQotCi12YXIgcnVubmluZ09uTG9jYWxo
b3N0ID0gZnVuY3Rpb24oKSB7Ci0gIGxldCBob3N0bmFtZSA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0
bmFtZTsKLSAgcmV0dXJuIGhvc3RuYW1lID09ICJsb2NhbGhvc3QiIHx8Ci0gICAgaG9zdG5hbWUg
PT0gIjEyNy4wLjAuMSIgfHwKLSAgICBob3N0bmFtZSA9PSAiOjoxIjsKLX0KLQotdmFyIGdldExv
Y2FsQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbigpIHsKLSAgdmFyIGRvbWFpbjsKLSAgaWYgKHdpbmRv
dy5sb2NhdGlvbi5ob3N0LmluZGV4T2YoImxvY2FsaG9zdCIpICE9IC0xKSB7Ci0gICAgLy8gVE9E
TyhrYnIpOiBmaWd1cmUgb3V0IHdoZXRoZXIgdG8gdXNlIGFuIElQdjYgbG9vcGJhY2sgYWRkcmVz
cy4KLSAgICBkb21haW4gPSAiMTI3LjAuMC4xIjsKLSAgfSBlbHNlIHsKLSAgICBkb21haW4gPSAi
bG9jYWxob3N0IjsKLSAgfQotCi0gIHZhciBwb3J0ID0gd2luZG93LmxvY2F0aW9uLnBvcnQgfHwg
IjgwIjsKLSAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICIvLyIgKyBkb21haW4g
KyAiOiIgKyBwb3J0Ci19Ci0KLXZhciBnZXRSZWxhdGl2ZVBhdGggPSBmdW5jdGlvbihwYXRoKSB7
Ci0gIHZhciByZWxwYXJ0cyA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zcGxpdCgiLyIpOwot
ICByZWxwYXJ0cy5wb3AoKTsgLy8gUG9wIG9mZiBmaWxlbmFtZQotICB2YXIgcGF0aHBhcnRzID0g
cGF0aC5zcGxpdCgiLyIpOwotCi0gIHZhciBpOwotICBmb3IgKGkgPSAwOyBpIDwgcGF0aHBhcnRz
Lmxlbmd0aDsgKytpKSB7Ci0gICAgc3dpdGNoIChwYXRocGFydHNbaV0pIHsKLSAgICAgIGNhc2Ug
IiI6IGJyZWFrOwotICAgICAgY2FzZSAiLiI6IGJyZWFrOwotICAgICAgY2FzZSAiLi4iOgotICAg
ICAgICByZWxwYXJ0cy5wb3AoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICByZWxwYXJ0cy5wdXNoKHBhdGhwYXJ0c1tpXSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgfQotCi0gIHJldHVybiByZWxwYXJ0cy5qb2luKCIvIik7Ci19Ci0KLWFzeW5jIGZ1bmN0aW9u
IGxvYWRDcm9zc09yaWdpbkltYWdlKGltZywgd2ViVXJsLCBsb2NhbFVybCkgewotICBpZiAocnVu
bmluZ09uTG9jYWxob3N0KCkpIHsKLSAgICBpbWcuc3JjID0gZ2V0TG9jYWxDcm9zc09yaWdpbigp
ICsgZ2V0UmVsYXRpdmVQYXRoKGxvY2FsVXJsKTsKLSAgICBjb25zb2xlLmxvZygnW2xvYWRDcm9z
c09yaWdpbkltYWdlXScsICcgIHRyeWluZycsIGltZy5zcmMpOwotICAgIGF3YWl0IGltZy5kZWNv
ZGUoKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICB0cnkgewotICAgIGltZy5zcmMgPSBnZXRVcmxP
cHRpb25zKCkuaW1nVXJsIHx8IHdlYlVybDsKLSAgICBjb25zb2xlLmxvZygnW2xvYWRDcm9zc09y
aWdpbkltYWdlXScsICd0cnlpbmcnLCBpbWcuc3JjKTsKLSAgICBhd2FpdCBpbWcuZGVjb2RlKCk7
Ci0gICAgcmV0dXJuOwotICB9IGNhdGNoIHt9Ci0KLSAgdGhyb3cgJ2NyZWF0ZUNyb3NzT3JpZ2lu
SW1hZ2UgZmFpbGVkJzsKLX0KLQotLyoqCi0gKiBDb252ZXJ0IHNSR0IgY29sb3IgdG8gbGluZWFy
IGNvbG9yLgotICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGNvbG9yIFRoZSBjb2xvciB0byBi
ZSBjb252ZXJ0ZWQuCi0gKiAgICAgICAgVGhlIGFycmF5IGhhcyA0IGVsZW1lbnRzLCBmb3IgZXhh
bXBsZSBbUiwgRywgQiwgQV0uCi0gKiAgICAgICAgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGluIHRo
ZSByYW5nZSAwIHRvIDI1NS4KLSAqIEByZXR1cm4geyFBcnJheS48bnVtYmVyPn0gY29sb3IgVGhl
IGNvbG9yIHRvIGJlIGNvbnZlcnRlZC4KLSAqICAgICAgICBUaGUgYXJyYXkgaGFzIDQgZWxlbWVu
dHMsIGZvciBleGFtcGxlIFtSLCBHLCBCLCBBXS4KLSAqICAgICAgICB3aGVyZSBlYWNoIGVsZW1l
bnQgaXMgaW4gdGhlIHJhbmdlIDAgdG8gMjU1LgotICovCi12YXIgc1JHQlRvTGluZWFyID0gZnVu
Y3Rpb24oY29sb3IpIHsKLSAgICByZXR1cm4gW3NSR0JDaGFubmVsVG9MaW5lYXIoY29sb3JbMF0p
LAotICAgICAgICAgICAgc1JHQkNoYW5uZWxUb0xpbmVhcihjb2xvclsxXSksCi0gICAgICAgICAg
ICBzUkdCQ2hhbm5lbFRvTGluZWFyKGNvbG9yWzJdKSwKLSAgICAgICAgICAgIGNvbG9yWzNdXQot
fQotCi0vKioKLSAqIENvbnZlcnQgbGluZWFyIGNvbG9yIHRvIHNSR0IgY29sb3IuCi0gKiBAcGFy
YW0geyFBcnJheS48bnVtYmVyPn0gY29sb3IgVGhlIGNvbG9yIHRvIGJlIGNvbnZlcnRlZC4KLSAq
ICAgICAgICBUaGUgYXJyYXkgaGFzIDQgZWxlbWVudHMsIGZvciBleGFtcGxlIFtSLCBHLCBCLCBB
XS4KLSAqICAgICAgICB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlIHJhbmdlIDAgdG8gMjU1
LgotICogQHJldHVybiB7IUFycmF5LjxudW1iZXI+fSBjb2xvciBUaGUgY29sb3IgdG8gYmUgY29u
dmVydGVkLgotICogICAgICAgIFRoZSBhcnJheSBoYXMgNCBlbGVtZW50cywgZm9yIGV4YW1wbGUg
W1IsIEcsIEIsIEFdLgotICogICAgICAgIHdoZXJlIGVhY2ggZWxlbWVudCBpcyBpbiB0aGUgcmFu
Z2UgMCB0byAyNTUuCi0gKi8KLXZhciBsaW5lYXJUb1NSR0IgPSBmdW5jdGlvbihjb2xvcikgewot
ICAgIHJldHVybiBbbGluZWFyQ2hhbm5lbFRvU1JHQihjb2xvclswXSksCi0gICAgICAgICAgICBs
aW5lYXJDaGFubmVsVG9TUkdCKGNvbG9yWzFdKSwKLSAgICAgICAgICAgIGxpbmVhckNoYW5uZWxU
b1NSR0IoY29sb3JbMl0pLAotICAgICAgICAgICAgY29sb3JbM11dCi19Ci0KLWZ1bmN0aW9uIHNS
R0JDaGFubmVsVG9MaW5lYXIodmFsdWUpIHsKLSAgICB2YWx1ZSA9IHZhbHVlIC8gMjU1OwotICAg
IGlmICh2YWx1ZSA8PSAwLjA0MDQ1KQotICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gMTIuOTI7Ci0g
ICAgZWxzZQotICAgICAgICB2YWx1ZSA9IE1hdGgucG93KCh2YWx1ZSArIDAuMDU1KSAvIDEuMDU1
LCAyLjQpOwotICAgIHJldHVybiBNYXRoLnRydW5jKHZhbHVlICogMjU1ICsgMC41KTsKLX0KLQot
ZnVuY3Rpb24gbGluZWFyQ2hhbm5lbFRvU1JHQih2YWx1ZSkgewotICAgIHZhbHVlID0gdmFsdWUg
LyAyNTU7Ci0gICAgaWYgKHZhbHVlIDw9IDAuMCkgewotICAgICAgICB2YWx1ZSA9IDAuMDsKLSAg
ICB9IGVsc2UgaWYgKHZhbHVlIDwgMC4wMDMxMzA4KSB7Ci0gICAgICAgIHZhbHVlID0gdmFsdWUg
KiAxMi45MjsKLSAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMSkgewotICAgICAgICB2YWx1ZSA9IE1h
dGgucG93KHZhbHVlLCAwLjQxNjY2KSAqIDEuMDU1IC0gMC4wNTU7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgdmFsdWUgPSAxLjA7Ci0gICAgfQotICAgIHJldHVybiBNYXRoLnRydW5jKHZhbHVlICog
MjU1ICsgMC41KTsKLX0KLQotZnVuY3Rpb24gY29tcGFyZVBpeGVscyhjbXAsIHJlZiwgdG9sZXJh
bmNlLCBkaWZmKSB7Ci0gICAgaWYgKGNtcC5sZW5ndGggIT0gcmVmLmxlbmd0aCkgewotICAgICAg
ICB0ZXN0RmFpbGVkKCJpbnZhbGlkIHBpeGVsIHNpemUuIik7Ci0gICAgfQotCi0gICAgdmFyIGNv
dW50ID0gMDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNtcC5sZW5ndGg7IGkrKykgewotICAg
ICAgICBpZiAoZGlmZikgewotICAgICAgICAgICAgZGlmZltpICogNF0gPSAwOwotICAgICAgICAg
ICAgZGlmZltpICogNCArIDFdID0gMjU1OwotICAgICAgICAgICAgZGlmZltpICogNCArIDJdID0g
MDsKLSAgICAgICAgICAgIGRpZmZbaSAqIDQgKyAzXSA9IDI1NTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoTWF0aC5hYnMoY21wW2kgKiA0XSAtIHJlZltpICogNF0pID4gdG9sZXJhbmNlIHx8Ci0g
ICAgICAgICAgICBNYXRoLmFicyhjbXBbaSAqIDQgKyAxXSAtIHJlZltpICogNCArIDFdKSA+IHRv
bGVyYW5jZSB8fAotICAgICAgICAgICAgTWF0aC5hYnMoY21wW2kgKiA0ICsgMl0gLSByZWZbaSAq
IDQgKyAyXSkgPiB0b2xlcmFuY2UgfHwKLSAgICAgICAgICAgIE1hdGguYWJzKGNtcFtpICogNCAr
IDNdIC0gcmVmW2kgKiA0ICsgM10pID4gdG9sZXJhbmNlKSB7Ci0gICAgICAgICAgICBpZiAoY291
bnQgPCAxMCkgewotICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIlBpeGVsICIgKyBpICsgIjog
ZXhwZWN0ZWQgKCIgKwotICAgICAgICAgICAgICAgIFtyZWZbaSAqIDRdLCByZWZbaSAqIDQgKyAx
XSwgcmVmW2kgKiA0ICsgMl0sIHJlZltpICogNCArIDNdXSArICIpLCBnb3QgKCIgKwotICAgICAg
ICAgICAgICAgIFtjbXBbaSAqIDRdLCBjbXBbaSAqIDQgKyAxXSwgY21wW2kgKiA0ICsgMl0sIGNt
cFtpICogNCArIDNdXSArICIpIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb3VudCsr
OwotICAgICAgICAgICAgaWYgKGRpZmYpIHsKLSAgICAgICAgICAgICAgICBkaWZmW2kgKiA0XSA9
IDI1NTsKLSAgICAgICAgICAgICAgICBkaWZmW2kgKiA0ICsgMV0gPSAwOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvdW50OwotfQotCi1mdW5jdGlvbiBk
ZXN0cm95Q29udGV4dChnbCkgewotICBnbC5jYW52YXMud2lkdGggPSAxOwotICBnbC5jYW52YXMu
aGVpZ2h0ID0gMTsKLSAgY29uc3QgZXh0ID0gZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJHTF9sb3NlX2Nv
bnRleHQnKTsKLSAgaWYgKGV4dCkgewotICAgIGV4dC5sb3NlQ29udGV4dCgpOwotICB9Ci19Ci0K
LWZ1bmN0aW9uIGRlc3Ryb3lBbGxDb250ZXh0cygpIHsKLSAgaWYgKCF3aW5kb3cuX3d0dV9jb250
ZXh0cykKLSAgICByZXR1cm47Ci0gIGZvciAoY29uc3QgeCBvZiB3aW5kb3cuX3d0dV9jb250ZXh0
cykgewotICAgIGRlc3Ryb3lDb250ZXh0KHgpOwotICB9Ci0gIHdpbmRvdy5fd3R1X2NvbnRleHRz
ID0gW107Ci19Ci0KLWZ1bmN0aW9uIGRpc3BsYXlJbWFnZURpZmYoY21wLCByZWYsIGRpZmYsIHdp
ZHRoLCBoZWlnaHQpIHsKLSAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7Ci0KLSAgICB2YXIgY21wSW1nID0gY3JlYXRlSW1hZ2VGcm9tUGl4ZWwoY21wLCB3aWR0aCwg
aGVpZ2h0KTsKLSAgICB2YXIgcmVmSW1nID0gY3JlYXRlSW1hZ2VGcm9tUGl4ZWwocmVmLCB3aWR0
aCwgaGVpZ2h0KTsKLSAgICB2YXIgZGlmZkltZyA9IGNyZWF0ZUltYWdlRnJvbVBpeGVsKGRpZmYs
IHdpZHRoLCBoZWlnaHQpOwotICAgIHd0dS5pbnNlcnRJbWFnZShkaXYsICJSZWZlcmVuY2UiLCBy
ZWZJbWcpOwotICAgIHd0dS5pbnNlcnRJbWFnZShkaXYsICJSZXN1bHQiLCBjbXBJbWcpOwotICAg
IHd0dS5pbnNlcnRJbWFnZShkaXYsICJEaWZmZXJlbmNlIiwgZGlmZkltZyk7Ci0KLSAgICB2YXIg
Y29uc29sZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIik7Ci0gICAgY29uc29s
ZS5hcHBlbmRDaGlsZChkaXYpOwotfQotCi1mdW5jdGlvbiBjcmVhdGVJbWFnZUZyb21QaXhlbChi
dWYsIHdpZHRoLCBoZWlnaHQpIHsKLSAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiY2FudmFzIik7Ci0gICAgY2FudmFzLndpZHRoID0gd2lkdGg7Ci0gICAgY2FudmFzLmhl
aWdodCA9IGhlaWdodDsKLSAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7Ci0g
ICAgdmFyIGltZ0RhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpOwot
Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspCi0gICAgICAgIGltZ0Rh
dGEuZGF0YVtpXSA9IGJ1ZltpXTsKLSAgICBjdHgucHV0SW1hZ2VEYXRhKGltZ0RhdGEsIDAsIDAp
OwotICAgIHZhciBpbWcgPSB3dHUubWFrZUltYWdlRnJvbUNhbnZhcyhjYW52YXMpOwotICAgIHJl
dHVybiBpbWc7Ci19Ci0KLWFzeW5jIGZ1bmN0aW9uIGF3YWl0VGltZW91dChtcykgewotICBhd2Fp
dCBuZXcgUHJvbWlzZShyZXMgPT4gewotICAgIHNldFRpbWVvdXQoKCkgPT4gewotICAgICAgcmVz
KCk7Ci0gICAgfSwgbXMpOwotICB9KTsKLX0KLQotYXN5bmMgZnVuY3Rpb24gYXdhaXRPclRpbWVv
dXQocHJvbWlzZSwgb3B0X3RpbWVvdXRfbXMpIHsKLSAgYXN5bmMgZnVuY3Rpb24gdGhyb3dPblRp
bWVvdXQobXMpIHsKLSAgICBhd2FpdCBhd2FpdFRpbWVvdXQobXMpOwotICAgIHRocm93ICd0aW1l
b3V0JzsKLSAgfQotCi0gIGxldCB0aW1lb3V0X21zID0gb3B0X3RpbWVvdXRfbXM7Ci0gIGlmICh0
aW1lb3V0X21zID09PSB1bmRlZmluZWQpCi0gICAgdGltZW91dF9tcyA9IDUwMDA7Ci0KLSAgYXdh
aXQgUHJvbWlzZS5yYWNlKFtwcm9taXNlLCB0aHJvd09uVGltZW91dCh0aW1lb3V0X21zKV0pOwot
fQotCi12YXIgQVBJID0gewotICBhZGRTaGFkZXJTb3VyY2U6IGFkZFNoYWRlclNvdXJjZSwKLSAg
YWRkU2hhZGVyU291cmNlczogYWRkU2hhZGVyU291cmNlcywKLSAgY2FuY2VsQW5pbUZyYW1lOiBj
YW5jZWxBbmltRnJhbWUsCi0gIGNyZWF0ZTNEQ29udGV4dDogY3JlYXRlM0RDb250ZXh0LAotICBH
TEVycm9yRXhjZXB0aW9uOiBHTEVycm9yRXhjZXB0aW9uLAotICBjcmVhdGUzRENvbnRleHRXaXRo
V3JhcHBlclRoYXRUaHJvd3NPbkdMRXJyb3I6IGNyZWF0ZTNEQ29udGV4dFdpdGhXcmFwcGVyVGhh
dFRocm93c09uR0xFcnJvciwKLSAgY2hlY2tBcmVhSW5BbmRPdXQ6IGNoZWNrQXJlYUluQW5kT3V0
LAotICBjaGVja0NhbnZhczogY2hlY2tDYW52YXMsCi0gIGNoZWNrQ2FudmFzUmVjdDogY2hlY2tD
YW52YXNSZWN0LAotICBjaGVja0NhbnZhc1JlY3RDb2xvcjogY2hlY2tDYW52YXNSZWN0Q29sb3Is
Ci0gIGNoZWNrQ2FudmFzUmVjdHM6IGNoZWNrQ2FudmFzUmVjdHMsCi0gIGNoZWNrRmxvYXRCdWZm
ZXI6IGNoZWNrRmxvYXRCdWZmZXIsCi0gIGNoZWNrVGV4dHVyZVNpemU6IGNoZWNrVGV4dHVyZVNp
emUsCi0gIGNsaXBUb1JhbmdlOiBjbGlwVG9SYW5nZSwKLSAgY3JlYXRlQ29sb3JlZFRleHR1cmU6
IGNyZWF0ZUNvbG9yZWRUZXh0dXJlLAotICBjcmVhdGVQcm9ncmFtOiBjcmVhdGVQcm9ncmFtLAot
ICBjbGVhckFuZERyYXdVbml0UXVhZDogY2xlYXJBbmREcmF3VW5pdFF1YWQsCi0gIGNsZWFyQW5k
RHJhd0luZGV4ZWRRdWFkOiBjbGVhckFuZERyYXdJbmRleGVkUXVhZCwKLSAgY29tcGFyZVBpeGVs
czogY29tcGFyZVBpeGVscywKLSAgZGVzdHJveUFsbENvbnRleHRzOiBkZXN0cm95QWxsQ29udGV4
dHMsCi0gIGRlc3Ryb3lDb250ZXh0OiBkZXN0cm95Q29udGV4dCwKLSAgZGlzcGF0Y2hQcm9taXNl
OiBkaXNwYXRjaFByb21pc2UsCi0gIGRpc3BsYXlJbWFnZURpZmY6IGRpc3BsYXlJbWFnZURpZmYs
Ci0gIGRyYXdVbml0UXVhZDogZHJhd1VuaXRRdWFkLAotICBkcmF3SW5kZXhlZFF1YWQ6IGRyYXdJ
bmRleGVkUXVhZCwKLSAgZHJhd1VCeXRlQ29sb3JRdWFkOiBkcmF3VUJ5dGVDb2xvclF1YWQsCi0g
IGRyYXdGbG9hdENvbG9yUXVhZDogZHJhd0Zsb2F0Q29sb3JRdWFkLAotICBkdW1teVNldFByb2dy
YW1BbmREcmF3Tm90aGluZzogZHVtbXlTZXRQcm9ncmFtQW5kRHJhd05vdGhpbmcsCi0gIGR1bXBT
aGFkZXJzSW5mbzogZHVtcFNoYWRlcnNJbmZvLAotICBlbmRzV2l0aDogZW5kc1dpdGgsCi0gIGZh
aWxJZkdMRXJyb3I6IGZhaWxJZkdMRXJyb3IsCi0gIGZpbGxUZXh0dXJlOiBmaWxsVGV4dHVyZSwK
LSAgZnJhbWVidWZmZXJTdGF0dXNTaG91bGRCZTogZnJhbWVidWZmZXJTdGF0dXNTaG91bGRCZSwK
LSAgZ2V0Qnl0ZXNQZXJDb21wb25lbnQ6IGdldEJ5dGVzUGVyQ29tcG9uZW50LAotICBnZXREZWZh
dWx0M0RDb250ZXh0VmVyc2lvbjogZ2V0RGVmYXVsdDNEQ29udGV4dFZlcnNpb24sCi0gIGdldEV4
dGVuc2lvblByZWZpeGVkTmFtZXM6IGdldEV4dGVuc2lvblByZWZpeGVkTmFtZXMsCi0gIGdldEV4
dGVuc2lvbldpdGhLbm93blByZWZpeGVzOiBnZXRFeHRlbnNpb25XaXRoS25vd25QcmVmaXhlcywK
LSAgZ2V0RmlsZUxpc3RBc3luYzogZ2V0RmlsZUxpc3RBc3luYywKLSAgZ2V0TGFzdEVycm9yOiBn
ZXRMYXN0RXJyb3IsCi0gIGdldFByZWZpeGVkUHJvcGVydHk6IGdldFByZWZpeGVkUHJvcGVydHks
Ci0gIGdldFNjcmlwdDogZ2V0U2NyaXB0LAotICBnZXRTdXBwb3J0ZWRFeHRlbnNpb25XaXRoS25v
d25QcmVmaXhlczogZ2V0U3VwcG9ydGVkRXh0ZW5zaW9uV2l0aEtub3duUHJlZml4ZXMsCi0gIGdl
dFR5cGVkQXJyYXlFbGVtZW50c1BlclBpeGVsOiBnZXRUeXBlZEFycmF5RWxlbWVudHNQZXJQaXhl
bCwKLSAgZ2V0VXJsQXJndW1lbnRzOiBnZXRVcmxBcmd1bWVudHMsCi0gIGdldFVybE9wdGlvbnM6
IGdldFVybE9wdGlvbnMsCi0gIGdldEF0dHJpYk1hcDogZ2V0QXR0cmliTWFwLAotICBnZXRVbmlm
b3JtTWFwOiBnZXRVbmlmb3JtTWFwLAotICBnbEVudW1Ub1N0cmluZzogZ2xFbnVtVG9TdHJpbmcs
Ci0gIGdsRXJyb3JTaG91bGRCZTogZ2xFcnJvclNob3VsZEJlLAotICBnbFR5cGVUb1R5cGVkQXJy
YXlUeXBlOiBnbFR5cGVUb1R5cGVkQXJyYXlUeXBlLAotICBoYXNBdHRyaWJ1dGVDYXNlSW5zZW5z
aXRpdmU6IGhhc0F0dHJpYnV0ZUNhc2VJbnNlbnNpdGl2ZSwKLSAgaW5zZXJ0SW1hZ2U6IGluc2Vy
dEltYWdlLAotICBpc1dlYkdMMjogaXNXZWJHTDIsCi0gIGxpbmtQcm9ncmFtOiBsaW5rUHJvZ3Jh
bSwKLSAgbG9hZENyb3NzT3JpZ2luSW1hZ2U6IGxvYWRDcm9zc09yaWdpbkltYWdlLAotICBsb2Fk
SW1hZ2VBc3luYzogbG9hZEltYWdlQXN5bmMsCi0gIGxvYWRJbWFnZXNBc3luYzogbG9hZEltYWdl
c0FzeW5jLAotICBsb2FkUHJvZ3JhbTogbG9hZFByb2dyYW0sCi0gIGxvYWRQcm9ncmFtRnJvbUZp
bGU6IGxvYWRQcm9ncmFtRnJvbUZpbGUsCi0gIGxvYWRQcm9ncmFtRnJvbVNjcmlwdDogbG9hZFBy
b2dyYW1Gcm9tU2NyaXB0LAotICBsb2FkUHJvZ3JhbUZyb21TY3JpcHRFeHBlY3RFcnJvcjogbG9h
ZFByb2dyYW1Gcm9tU2NyaXB0RXhwZWN0RXJyb3IsCi0gIGxvYWRTaGFkZXI6IGxvYWRTaGFkZXIs
Ci0gIGxvYWRTaGFkZXJGcm9tRmlsZTogbG9hZFNoYWRlckZyb21GaWxlLAotICBsb2FkU2hhZGVy
RnJvbVNjcmlwdDogbG9hZFNoYWRlckZyb21TY3JpcHQsCi0gIGxvYWRTdGFuZGFyZFByb2dyYW06
IGxvYWRTdGFuZGFyZFByb2dyYW0sCi0gIGxvYWRTdGFuZGFyZFByb2dyYW1Bc3luYzogbG9hZFN0
YW5kYXJkUHJvZ3JhbUFzeW5jLAotICBsb2FkU3RhbmRhcmRWZXJ0ZXhTaGFkZXI6IGxvYWRTdGFu
ZGFyZFZlcnRleFNoYWRlciwKLSAgbG9hZFN0YW5kYXJkVmVydGV4U2hhZGVyQXN5bmM6IGxvYWRT
dGFuZGFyZFZlcnRleFNoYWRlckFzeW5jLAotICBsb2FkU3RhbmRhcmRGcmFnbWVudFNoYWRlcjog
bG9hZFN0YW5kYXJkRnJhZ21lbnRTaGFkZXIsCi0gIGxvYWRTdGFuZGFyZEZyYWdtZW50U2hhZGVy
QXN5bmM6IGxvYWRTdGFuZGFyZEZyYWdtZW50U2hhZGVyQXN5bmMsCi0gIGxvYWRVbmlmb3JtQmxv
Y2tQcm9ncmFtOiBsb2FkVW5pZm9ybUJsb2NrUHJvZ3JhbSwKLSAgbG9hZFVuaWZvcm1CbG9ja1Zl
cnRleFNoYWRlcjogbG9hZFVuaWZvcm1CbG9ja1ZlcnRleFNoYWRlciwKLSAgbG9hZFVuaWZvcm1C
bG9ja0ZyYWdtZW50U2hhZGVyOiBsb2FkVW5pZm9ybUJsb2NrRnJhZ21lbnRTaGFkZXIsCi0gIGxv
YWRUZXh0RmlsZUFzeW5jOiBsb2FkVGV4dEZpbGVBc3luYywKLSAgbG9hZFRleHR1cmU6IGxvYWRU
ZXh0dXJlLAotICBsb2c6IGxvZywKLSAgbG9nZ2luZ09mZjogbG9nZ2luZ09mZiwKLSAgbWFrZUNo
ZWNrUmVjdDogbWFrZUNoZWNrUmVjdCwKLSAgbWFrZUltYWdlOiBtYWtlSW1hZ2UsCi0gIG1ha2VJ
bWFnZUZyb21DYW52YXM6IG1ha2VJbWFnZUZyb21DYW52YXMsCi0gIG1ha2VWaWRlbzogbWFrZVZp
ZGVvLAotICBlcnJvcjogZXJyb3IsCi0gIHJ1bkV4dGVuc2lvblN1cHBvcnRlZFRlc3Q6IHJ1bkV4
dGVuc2lvblN1cHBvcnRlZFRlc3QsCi0gIHNoYWxsb3dDb3B5T2JqZWN0OiBzaGFsbG93Q29weU9i
amVjdCwKLSAgc2V0RGVmYXVsdDNEQ29udGV4dFZlcnNpb246IHNldERlZmF1bHQzRENvbnRleHRW
ZXJzaW9uLAotICBzZXR1cENvbG9yUXVhZDogc2V0dXBDb2xvclF1YWQsCi0gIHNldHVwUHJvZ3Jh
bTogc2V0dXBQcm9ncmFtLAotICBzZXR1cFRyYW5zZm9ybUZlZWRiYWNrUHJvZ3JhbTogc2V0dXBU
cmFuc2Zvcm1GZWVkYmFja1Byb2dyYW0sCi0gIHNldHVwUXVhZDogc2V0dXBRdWFkLAotICBzZXR1
cFF1YWRXaXRoVGV4Q29vcmRzOiBzZXR1cFF1YWRXaXRoVGV4Q29vcmRzLAotICBzZXR1cEluZGV4
ZWRRdWFkOiBzZXR1cEluZGV4ZWRRdWFkLAotICBzZXR1cEluZGV4ZWRRdWFkV2l0aE9wdGlvbnM6
IHNldHVwSW5kZXhlZFF1YWRXaXRoT3B0aW9ucywKLSAgc2V0dXBTaW1wbGVDb2xvclByb2dyYW06
IHNldHVwU2ltcGxlQ29sb3JQcm9ncmFtLAotICBzZXR1cFNpbXBsZVRleHR1cmVQcm9ncmFtOiBz
ZXR1cFNpbXBsZVRleHR1cmVQcm9ncmFtLAotICBzZXR1cFNpbXBsZVRleHR1cmVQcm9ncmFtRVNT
TDMwMDogc2V0dXBTaW1wbGVUZXh0dXJlUHJvZ3JhbUVTU0wzMDAsCi0gIHNldHVwU2ltcGxlQ3Vi
ZU1hcFRleHR1cmVQcm9ncmFtOiBzZXR1cFNpbXBsZUN1YmVNYXBUZXh0dXJlUHJvZ3JhbSwKLSAg
c2V0dXBTaW1wbGVWZXJ0ZXhDb2xvclByb2dyYW06IHNldHVwU2ltcGxlVmVydGV4Q29sb3JQcm9n
cmFtLAotICBzZXR1cE5vVGV4Q29vcmRUZXh0dXJlUHJvZ3JhbTogc2V0dXBOb1RleENvb3JkVGV4
dHVyZVByb2dyYW0sCi0gIHNldHVwVGV4dHVyZWRRdWFkOiBzZXR1cFRleHR1cmVkUXVhZCwKLSAg
c2V0dXBUZXh0dXJlZFF1YWRXaXRoVGV4Q29vcmRzOiBzZXR1cFRleHR1cmVkUXVhZFdpdGhUZXhD
b29yZHMsCi0gIHNldHVwVGV4dHVyZWRRdWFkV2l0aEN1YmVNYXA6IHNldHVwVGV4dHVyZWRRdWFk
V2l0aEN1YmVNYXAsCi0gIHNldHVwVW5pdFF1YWQ6IHNldHVwVW5pdFF1YWQsCi0gIHNldEZsb2F0
RHJhd0NvbG9yOiBzZXRGbG9hdERyYXdDb2xvciwKLSAgc2V0VUJ5dGVEcmF3Q29sb3I6IHNldFVC
eXRlRHJhd0NvbG9yLAotICBzdGFydFBsYXlpbmdBbmRXYWl0Rm9yVmlkZW86IHN0YXJ0UGxheWlu
Z0FuZFdhaXRGb3JWaWRlbywKLSAgc3RhcnRzV2l0aDogc3RhcnRzV2l0aCwKLSAgc2hvdWxkR2Vu
ZXJhdGVHTEVycm9yOiBzaG91bGRHZW5lcmF0ZUdMRXJyb3IsCi0gIHNob3VsZFRocm93OiBzaG91
bGRUaHJvdywKLSAgcmVhZEZpbGU6IHJlYWRGaWxlLAotICByZWFkRmlsZUxpc3Q6IHJlYWRGaWxl
TGlzdCwKLSAgcmVwbGFjZVBhcmFtczogcmVwbGFjZVBhcmFtcywKLSAgcmVxdWVzdEFuaW1GcmFt
ZTogcmVxdWVzdEFuaW1GcmFtZSwKLSAgcnVuU3RlcHM6IHJ1blN0ZXBzLAotICB3YWl0Rm9yQ29t
cG9zaXRlOiB3YWl0Rm9yQ29tcG9zaXRlLAotCi0gIC8vIGZ1bGxzY3JlZW4gYXBpCi0gIHNldHVw
RnVsbHNjcmVlbjogc2V0dXBGdWxsc2NyZWVuLAotCi0gIC8vIHNSR0IgY29udmVydGVyIGFwaQot
ICBzUkdCVG9MaW5lYXI6IHNSR0JUb0xpbmVhciwKLSAgbGluZWFyVG9TUkdCOiBsaW5lYXJUb1NS
R0IsCi0KLSAgZ2V0SG9zdDogZ2V0SG9zdCwKLSAgZ2V0QmFzZURvbWFpbjogZ2V0QmFzZURvbWFp
biwKLSAgcnVubmluZ09uTG9jYWxob3N0OiBydW5uaW5nT25Mb2NhbGhvc3QsCi0gIGdldExvY2Fs
Q3Jvc3NPcmlnaW46IGdldExvY2FsQ3Jvc3NPcmlnaW4sCi0gIGdldFJlbGF0aXZlUGF0aDogZ2V0
UmVsYXRpdmVQYXRoLAotICBhd2FpdE9yVGltZW91dDogYXdhaXRPclRpbWVvdXQsCi0gIGF3YWl0
VGltZW91dDogYXdhaXRUaW1lb3V0LAotCi0gIG5vbmU6IGZhbHNlCi19OwotCi1PYmplY3QuZGVm
aW5lUHJvcGVydGllcyhBUEksIHsKLSAgbm9UZXhDb29yZFRleHR1cmVWZXJ0ZXhTaGFkZXI6IHsg
dmFsdWU6IG5vVGV4Q29vcmRUZXh0dXJlVmVydGV4U2hhZGVyLCB3cml0YWJsZTogZmFsc2UgfSwK
LSAgc2ltcGxlVGV4dHVyZVZlcnRleFNoYWRlcjogeyB2YWx1ZTogc2ltcGxlVGV4dHVyZVZlcnRl
eFNoYWRlciwgd3JpdGFibGU6IGZhbHNlIH0sCi0gIHNpbXBsZVRleHR1cmVWZXJ0ZXhTaGFkZXJF
U1NMMzAwOiB7IHZhbHVlOiBzaW1wbGVUZXh0dXJlVmVydGV4U2hhZGVyRVNTTDMwMCwgd3JpdGFi
bGU6IGZhbHNlIH0sCi0gIHNpbXBsZUNvbG9yRnJhZ21lbnRTaGFkZXI6IHsgdmFsdWU6IHNpbXBs
ZUNvbG9yRnJhZ21lbnRTaGFkZXIsIHdyaXRhYmxlOiBmYWxzZSB9LAotICBzaW1wbGVDb2xvckZy
YWdtZW50U2hhZGVyRVNTTDMwMDogeyB2YWx1ZTogc2ltcGxlQ29sb3JGcmFnbWVudFNoYWRlckVT
U0wzMDAsIHdyaXRhYmxlOiBmYWxzZSB9LAotICBzaW1wbGVWZXJ0ZXhTaGFkZXI6IHsgdmFsdWU6
IHNpbXBsZVZlcnRleFNoYWRlciwgd3JpdGFibGU6IGZhbHNlIH0sCi0gIHNpbXBsZVZlcnRleFNo
YWRlckVTU0wzMDA6IHsgdmFsdWU6IHNpbXBsZVZlcnRleFNoYWRlckVTU0wzMDAsIHdyaXRhYmxl
OiBmYWxzZSB9LAotICBzaW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXI6IHsgdmFsdWU6IHNpbXBs
ZVRleHR1cmVGcmFnbWVudFNoYWRlciwgd3JpdGFibGU6IGZhbHNlIH0sCi0gIHNpbXBsZVRleHR1
cmVGcmFnbWVudFNoYWRlckVTU0wzMDA6IHsgdmFsdWU6IHNpbXBsZVRleHR1cmVGcmFnbWVudFNo
YWRlckVTU0wzMDAsIHdyaXRhYmxlOiBmYWxzZSB9LAotICBzaW1wbGVIaWdoUHJlY2lzaW9uVGV4
dHVyZUZyYWdtZW50U2hhZGVyOiB7IHZhbHVlOiBzaW1wbGVIaWdoUHJlY2lzaW9uVGV4dHVyZUZy
YWdtZW50U2hhZGVyLCB3cml0YWJsZTogZmFsc2UgfSwKLSAgc2ltcGxlQ3ViZU1hcFRleHR1cmVG
cmFnbWVudFNoYWRlcjogeyB2YWx1ZTogc2ltcGxlQ3ViZU1hcFRleHR1cmVGcmFnbWVudFNoYWRl
ciwgd3JpdGFibGU6IGZhbHNlIH0sCi0gIHNpbXBsZVZlcnRleENvbG9yRnJhZ21lbnRTaGFkZXI6
IHsgdmFsdWU6IHNpbXBsZVZlcnRleENvbG9yRnJhZ21lbnRTaGFkZXIsIHdyaXRhYmxlOiBmYWxz
ZSB9LAotICBzaW1wbGVWZXJ0ZXhDb2xvclZlcnRleFNoYWRlcjogeyB2YWx1ZTogc2ltcGxlVmVy
dGV4Q29sb3JWZXJ0ZXhTaGFkZXIsIHdyaXRhYmxlOiBmYWxzZSB9Ci19KTsKLQotcmV0dXJuIEFQ
STsKLQotfSgpKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvcmVzb3Vy
Y2VzL3dlYmdsX3Rlc3RfZmlsZXMvcmVzb3VyY2VzL2dsc2wtZmVhdHVyZS10ZXN0cy5jc3MgYi9M
YXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL3Jlc291
cmNlcy9nbHNsLWZlYXR1cmUtdGVzdHMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjODA2M2Q5MmIyYTU5MWRmMzc5NDA5NDRjZTAzZjM5ZmVlZjhkYzUzLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdsL3BlbmRp
bmcvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvcmVzb3VyY2VzL2dsc2wtZmVhdHVyZS10ZXN0
cy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1jYW52YXMgewotICBiYWNrZ3Jv
dW5kLWNvbG9yOiB3aGl0ZTsKLSAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDAs
IHJnYmEoMjAwLCAyMDAsIDIwMCwgLjUpIDUwJSwgdHJhbnNwYXJlbnQgNTAlKSwgbGluZWFyLWdy
YWRpZW50KHJnYmEoMjAwLCAyMDAsIDIwMCwgLjUpIDUwJSwgdHJhbnNwYXJlbnQgNTAlKTsKLSAg
YmFja2dyb3VuZC1zaXplOiA4cHggOHB4OwotfQotCi0uc2hhZGVyLXNvdXJjZSB7Ci0gIGJvcmRl
cjogMXB4IGRhc2hlZCBibGFjazsKLSAgcGFkZGluZzogMWVtOwotfQotCi0uc2hhZGVyLXNvdXJj
ZSBsaTpudGgtY2hpbGQob2RkKSB7IGJhY2tncm91bmQ6ICNmOGY4Zjg7IH0KLS5zaGFkZXItc291
cmNlIGxpOm50aC1jaGlsZChldmVuKSB7IGJhY2tncm91bmQ6ICNmMGYwZjA7IH0KLQotLnRlc3Rp
bWFnZXMgewotfQotCi0udGVzdGltYWdlcyBiciB7Ci0gIGNsZWFyOiBib3RoOwotfQotCi0udGVz
dGltYWdlcyA+IGRpdiB7Ci0gIGZsb2F0OiBsZWZ0OwotICBtYXJnaW46IDFlbTsKLX0KLQotSU1H
IHsKLSAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7Ci19CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL3Jlc291cmNlcy9qcy10
ZXN0LXN0eWxlLmNzcyBiL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dlYmds
X3Rlc3RfZmlsZXMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA1ZjY4MzliNjIxNDc3M2IwYTAwYmM4YTJiM2I2MmFjZjY0ZGMxZGVlLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3Rz
L3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvcmVzb3VyY2VzL2pzLXRl
c3Qtc3R5bGUuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLnBhc3MgewotICAg
IGZvbnQtd2VpZ2h0OiBib2xkOwotICAgIGNvbG9yOiBncmVlbjsKLX0KLS5mYWlsIHsKLSAgICBm
b250LXdlaWdodDogYm9sZDsKLSAgICBjb2xvcjogcmVkOwotfQotLndhcm4gewotICAgIGZvbnQt
d2VpZ2h0OiBib2xkOwotICAgIGNvbG9yOiB5ZWxsb3c7Ci0gICAgdGV4dC1zaGFkb3c6IDFweCAx
cHggI2ZmMDAwMAotfQotI2NvbnNvbGUgewotICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKLSAg
ICBmb250LWZhbWlseTogbW9ub3NwYWNlOwotfQotYm9keSB7Ci0gICAgYmFja2dyb3VuZC1jb2xv
cjogI2ZmZmZmZjsKLX0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvcmVz
b3VyY2VzL3dlYmtpdC13ZWJnbC10ZXN0LWhhcm5lc3MuanMgYi9MYXlvdXRUZXN0cy93ZWJnbC9w
ZW5kaW5nL3Jlc291cmNlcy93ZWJraXQtd2ViZ2wtdGVzdC1oYXJuZXNzLmpzCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjODYxNWJlNTAwYWI3ZTk2ODlkMjNlZWZlZWMxY2ZjNmM0MDk0
MDJlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91
dFRlc3RzL3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dlYmtpdC13ZWJnbC10ZXN0LWhhcm5lc3Mu
anMKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0idXNlIHN0cmljdCI7Ci0oZnVuY3Rp
b24oKSB7Ci0gIHZhciBudW1GYWlsdXJlcyA9IDA7Ci0gIHZhciByZXN1bHRzTGlzdCA9IG51bGw7
Ci0gIHZhciByZXN1bHROdW0gPSAxOwotCi0gIGlmICh3aW5kb3cudGVzdFJ1bm5lciAmJiAhd2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Ci0gICAgd2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyID0gd2luZG93LnRlc3RSdW5uZXI7Ci0gIH0KLQotICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSB7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKLQotICAgIC8vIFR1cm4gb2Zm
IGNvbnNvbGUgbWVzc2FnZXMgYmVjYXVzZSBmb3IgdGhlIFdlYkdMIHRlc3RzIHRoZXkgYXJlCi0g
ICAgLy8gR1BVIGNhcGFiaWxpdHkgZGVwZW5kZW50LgotICAgIHdpbmRvdy5jb25zb2xlLmxvZyA9
IGZ1bmN0aW9uKCkgeyB9OwotICAgIHdpbmRvdy5jb25zb2xlLmVycm9yID0gZnVuY3Rpb24oKSB7
IH07Ci0gIH0KLQotCi0gIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7Ci0gICAgd2luZG93LmludGVy
bmFscy5zZXR0aW5ncy5zZXRXZWJHTEVycm9yc1RvQ29uc29sZUVuYWJsZWQoZmFsc2UpOwotICB9
Ci0KLSAgdmFyIGxpc3QgPSBmdW5jdGlvbihtc2csIGNvbG9yKSB7Ci0gICAgaWYgKCFyZXN1bHRz
TGlzdCkgewotICAgICAgcmVzdWx0c0xpc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ1bCIp
OwotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmFwcGVuZENoaWxkKHJl
c3VsdHNMaXN0KTsKLSAgICB9Ci0KLSAgICB2YXIgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImxpIik7Ci0gICAgaXRlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSht
c2cpKTsKLSAgICBpZiAoY29sb3IpIHsKLSAgICAgIGl0ZW0uc3R5bGUuY29sb3IgPSBjb2xvcjsK
LSAgICB9Ci0KLSAgICByZXN1bHRzTGlzdC5hcHBlbmRDaGlsZChpdGVtKTsKLSAgfQotCi0gIHZh
ciBsb2cgPSBmdW5jdGlvbihtc2csIGNvbG9yKSB7Ci0gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZShtc2cpKTsKLSAgICBpZiAoY29sb3IpIHsKLSAgICAgIGRpdi5zdHlsZS5jb2xvciA9
IGNvbG9yOwotICAgIH0KLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuYXBw
ZW5kQ2hpbGQoZGl2KTsKLSAgfTsKLQotICB3aW5kb3cud2ViZ2xUZXN0SGFybmVzcyA9IHsKLSAg
ICByZXBvcnRSZXN1bHRzOiBmdW5jdGlvbih1cmwsIHN1Y2Nlc3MsIG1zZykgewotICAgICAgaWYg
KHN1Y2Nlc3MpIHsKLSAgICAgICAgbGlzdChgWyAke3Jlc3VsdE51bX06IFBBU1MgXSAke21zZ31g
LCAiZ3JlZW4iKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGxpc3QoYFsgJHtyZXN1bHROdW19
OiBGQUlMIF0gJHttc2d9YCwgInJlZCIpOwotICAgICAgICArK251bUZhaWx1cmVzOwotICAgICAg
fQotCi0gICAgICArK3Jlc3VsdE51bTsKLSAgICB9LAotCi0gICAgbm90aWZ5RmluaXNoZWQ6IGZ1
bmN0aW9uKHVybCkgewotICAgICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJpZnJhbWUiKTsKLSAgICAgIGlmIChudW1GYWlsdXJlcyA+IDApIHsKLSAgICAgICAgbG9nKGBb
IEZBSUwgXSAke251bUZhaWx1cmVzfSBmYWlsdXJlcyByZXBvcnRlZGAsICJyZWQiKTsKLSAgICAg
IH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdHNMaXN0LmlubmVySFRNTCA9ICIiOwotICAgICAgICBp
ZnJhbWUuaW5uZXJIVE1MID0gIiI7Ci0gICAgICAgIGxvZygiWyBQQVNTIF0gQWxsIHRlc3RzIHBh
c3NlZCIsICJncmVlbiIpOwotICAgICAgfQotCi0gICAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSB7Ci0gICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
LSAgICAgIH0KLSAgICB9LAotICB9Ci19KCkpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z2wvcmVzb3VyY2VzL3BlbmRpbmdfd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9jb250ZXh0
L2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3BlbmRpbmdfd2ViZ2xfdGVzdF9maWxlcy9jb25m
b3JtYW5jZS9jb250ZXh0L2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFu
dGlhbGlhcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAyZGFmNTJhODA1NmQ3MzE1ODUwNDljNGVmNDI5N2E3
ODc4YzkwOGEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJjZXMv
cGVuZGluZ193ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2NvbnRleHQvY29udGV4dC1hdHRy
aWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFzLmh0bWwKQEAgLTAsMCArMSwzMzIg
QEAKKzwhLS0KK0NvcHlyaWdodCAoYykgMjAxOSBUaGUgS2hyb25vcyBHcm91cCBJbmMuCitVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUuCistLT4KKworPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0idXRmLTgiPgorPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi93ZWJnbF90ZXN0X2ZpbGVzL3Jlc291cmNl
cy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3dlYmdsX3Rlc3Rf
ZmlsZXMvanMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4u
L3dlYmdsX3Rlc3RfZmlsZXMvanMvd2ViZ2wtdGVzdC11dGlscy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IGlkPSJ2c2hhZGVyIiB0eXBlPSJ4LXNoYWRlci94LXZlcnRleCI+CithdHRyaWJ1dGUgdmVj
MyBwb3M7CithdHRyaWJ1dGUgdmVjNCBjb2xvckluOwordmFyeWluZyB2ZWM0IGNvbG9yOworCit2
b2lkIG1haW4oKQoreworICAgIGNvbG9yID0gY29sb3JJbjsKKyAgICBnbF9Qb3NpdGlvbiA9IHZl
YzQocG9zLnh5eiwgMS4wKTsKK30KKzwvc2NyaXB0PgorCis8c2NyaXB0IGlkPSJmc2hhZGVyIiB0
eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4KK3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OworCit2
YXJ5aW5nIHZlYzQgY29sb3I7CisKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfRnJhZ0NvbG9yID0g
Y29sb3I7Cit9Cis8L3NjcmlwdD4KKworPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKKworLy8gVGhl
c2UgZm91ciBkZWNsYXJhdGlvbnMgbmVlZCB0byBiZSBnbG9iYWwgZm9yICJzaG91bGRCZSIgdG8g
c2VlIHRoZW0KK3ZhciB3dHUgPSBXZWJHTFRlc3RVdGlsczsKK3ZhciBnbDsKK3ZhciBjb250ZXh0
QXR0cmlicyA9IG51bGw7Cit2YXIgcmVkQ2hhbm5lbHMgPSBbMCwgMCwgMF07Cit2YXIgY29ycmVj
dENvbG9yID0gbnVsbDsKK3ZhciBmcmFtZWJ1ZmZlcjsKK3ZhciBmYkhhc0NvbG9yOwordmFyIGZi
SGFzRGVwdGg7Cit2YXIgZmJIYXNTdGVuY2lsOworCitmdW5jdGlvbiBpbml0KCkKK3sKKyAgICBk
ZXNjcmlwdGlvbignVmVyaWZ5IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgYXJlIHdvcmtpbmcgYXMg
c3BlY2lmaWVkLCBpbmNsdWRpbmcgYWxwaGEsIGRlcHRoLCBzdGVuY2lsLCBhbnRpYWxpYXMsIGJ1
dCBub3QgcHJlbXVsdGlwbGllZEFscGhhJyk7CisKKyAgICBydW5UZXN0KCk7Cit9CisKK2Z1bmN0
aW9uIGdldFdlYkdMKGNhbnZhc1dpZHRoLCBjYW52YXNIZWlnaHQsIGNvbnRleHRBdHRyaWJzLCBj
bGVhckNvbG9yLCBjbGVhckRlcHRoLCBjbGVhclN0ZW5jaWwpCit7CisgICAgdmFyIGNhbnZhcyA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOworICAgIGlmICghY2FudmFzKQorICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICBjYW52YXMud2lkdGggPSBjYW52YXNXaWR0aDsKKyAgICBj
YW52YXMuaGVpZ2h0ID0gY2FudmFzSGVpZ2h0OworCisgICAgZ2wgPSB3dHUuY3JlYXRlM0RDb250
ZXh0KGNhbnZhcywgY29udGV4dEF0dHJpYnMpOworICAgIGlmICghZ2wpCisgICAgICAgIHJldHVy
biBudWxsOworCisgICAgdmFyIHByb2dyYW0gPSB3dHUuc2V0dXBQcm9ncmFtKGdsLCBbInZzaGFk
ZXIiLCAiZnNoYWRlciJdLCBbInBvcyIsICJjb2xvckluIl0pOworICAgIGlmICghcHJvZ3JhbSkK
KyAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICBnbC5lbmFibGUoZ2wuREVQVEhfVEVTVCk7Cisg
ICAgZ2wuZW5hYmxlKGdsLlNURU5DSUxfVEVTVCk7CisKKyAgICBnbC5jbGVhckNvbG9yKGNsZWFy
Q29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pOwor
ICAgIGdsLmNsZWFyRGVwdGgoY2xlYXJEZXB0aCk7CisgICAgZ2wuY2xlYXJTdGVuY2lsKGNsZWFy
U3RlbmNpbCk7CisgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JV
RkZFUl9CSVQgfCBnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpOworCisgICAgZnJhbWVidWZmZXIgPSBn
bC5jcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJV
RkZFUiwgZnJhbWVidWZmZXIpOworICAgIHZhciB0ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgp
OworICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpOworICAgIGdsLnRl
eEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgZ2wuY2FudmFzLndpZHRoLCBnbC5j
YW52YXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTsKKyAgICBn
bC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVO
VDAsIGdsLlRFWFRVUkVfMkQsIHRleHR1cmUsIDApOworICAgIGZiSGFzU3RlbmNpbCA9IGZhbHNl
OworICAgIGZiSGFzRGVwdGggPSBmYWxzZTsKKyAgICBmYkhhc0NvbG9yID0gZ2wuY2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgPT0gZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEU7
CisgICAgaWYgKGZiSGFzQ29sb3IpIHsKKyAgICAgIHZhciBkZXB0aFN0ZW5jaWwgPSBnbC5jcmVh
dGVSZW5kZXJidWZmZXIoKTsKKyAgICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVG
RkVSLCBkZXB0aFN0ZW5jaWwpOworICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5E
RVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsIGdsLmNhbnZhcy53aWR0aCwgZ2wuY2FudmFzLmhl
aWdodCk7CisgICAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwg
Z2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIGRlcHRoU3RlbmNp
bCk7CisgICAgICBmYkhhc0RlcHRoID0gZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFN
RUJVRkZFUikgPT0gZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEU7CisgICAgICBpZiAoIWZiSGFzRGVw
dGgpIHsKKyAgICAgICAgZ2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoZ2wuRlJBTUVCVUZGRVIs
IGdsLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCwgZ2wuUkVOREVSQlVGRkVSLCBudWxsKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ2dsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIp
JywgJ2dsLkZSQU1FQlVGRkVSX0NPTVBMRVRFJyk7CisgICAgICB9IGVsc2UgeworICAgICAgICBm
Ykhhc1N0ZW5jaWwgPSB0cnVlOworICAgICAgfQorICAgIH0KKyAgICBnbC5iaW5kRnJhbWVidWZm
ZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwpOworICAgIHd0dS5nbEVycm9yU2hvdWxkQmUoZ2wsIGds
Lk5PX0VSUk9SLCAic2hvdWxkIGJlIG5vIGVycm9ycyIpOworCisgICAgcmV0dXJuIGdsOworfQor
CitmdW5jdGlvbiBkcmF3QW5kUmVhZFBpeGVsKGdsLCB2ZXJ0aWNlcywgY29sb3JzKQoreworICAg
IHZhciBjb2xvck9mZnNldCA9IHZlcnRpY2VzLmJ5dGVMZW5ndGg7CisKKyAgICB2YXIgdmJvID0g
Z2wuY3JlYXRlQnVmZmVyKCk7CisgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHZi
byk7CisgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIGNvbG9yT2Zmc2V0ICsgY29s
b3JzLmJ5dGVMZW5ndGgsIGdsLlNUQVRJQ19EUkFXKTsKKyAgICBnbC5idWZmZXJTdWJEYXRhKGds
LkFSUkFZX0JVRkZFUiwgMCwgdmVydGljZXMpOworICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJS
QVlfQlVGRkVSLCBjb2xvck9mZnNldCwgY29sb3JzKTsKKworICAgIGdsLnZlcnRleEF0dHJpYlBv
aW50ZXIoMCwgMywgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBnbC5lbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheSgwKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDEsIDQsIGdsLlVOU0lH
TkVEX0JZVEUsIHRydWUsIDAsIGNvbG9yT2Zmc2V0KTsKKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheSgxKTsKKworICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCB2ZXJ0aWNl
cy5sZW5ndGggLyAzKTsKK30KKworZnVuY3Rpb24gdGVzdERlZmF1bHQoKQoreworICAgIGRlYnVn
KCJUZXN0aW5nIGRlZmF1bHQgYXR0cmlidXRlczogeyBzdGVuY2lsOmZhbHNlIH0iKTsKKyAgICBz
aG91bGRCZU5vbk51bGwoImdsID0gZ2V0V2ViR0woMSwgMSwgbnVsbCwgWyAwLCAwLCAwLCAwIF0s
IDEsIDApIik7CisgICAgc2hvdWxkQmVGYWxzZSgiZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5z
dGVuY2lsIik7CisgICAgc2hvdWxkQmVUcnVlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuU1RFTkNJTF9C
SVRTKSA9PSAwIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RBbHBoYShhbHBoYSkKK3sKKyAgICBkZWJ1
ZygiVGVzdGluZyBhbHBoYSA9ICIgKyBhbHBoYSk7CisgICAgaWYgKGFscGhhKSB7CisgICAgICAg
IHNob3VsZEJlTm9uTnVsbCgiZ2wgPSBnZXRXZWJHTCgxLCAxLCB7IGFscGhhOiB0cnVlLCBkZXB0
aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwg
MCBdLCAxLCAwKSIpOworICAgICAgICBzaG91bGRCZVRydWUoImdsLmdldFBhcmFtZXRlcihnbC5B
TFBIQV9CSVRTKSA+PSA4Iik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2hvdWxkQmVOb25OdWxs
KCJnbCA9IGdldFdlYkdMKDEsIDEsIHsgYWxwaGE6IGZhbHNlLCBkZXB0aDogZmFsc2UsIHN0ZW5j
aWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMCBdLCAxLCAwKSIpOwor
ICAgICAgICBzaG91bGRCZVRydWUoImdsLmdldFBhcmFtZXRlcihnbC5BTFBIQV9CSVRTKSA9PSAw
Iik7CisgICAgfQorICAgIHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLlJFRF9CSVRT
KSA+PSA4Iik7CisgICAgc2hvdWxkQmVUcnVlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuR1JFRU5fQklU
UykgPj0gOCIpOworICAgIHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLkJMVUVfQklU
UykgPj0gOCIpOworICAgIHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLkRFUFRIX0JJ
VFMpID09IDAiKTsKKyAgICBzaG91bGRCZVRydWUoImdsLmdldFBhcmFtZXRlcihnbC5TVEVOQ0lM
X0JJVFMpID09IDAiKTsKKworICAgIHNob3VsZEJlTm9uTnVsbCgiY29udGV4dEF0dHJpYnMgPSBn
bC5nZXRDb250ZXh0QXR0cmlidXRlcygpIik7CisgICAgc2hvdWxkQmVUcnVlKCJjb250ZXh0QXR0
cmlicy5hbHBoYSA9PSAiICsgYWxwaGEpOworCisgICAgdmFyIGNvcnJlY3RDb2xvciA9IChjb250
ZXh0QXR0cmlicy5hbHBoYSA/IFswLCAwLCAwLCAwXSA6IFswLCAwLCAwLCAyNTVdKTsKKyAgICB3
dHUuY2hlY2tDYW52YXNSZWN0KGdsLCAwLCAwLCAxLCAxLCBjb3JyZWN0Q29sb3IpOworCisgICAg
aWYgKGZiSGFzQ29sb3IpIHsKKyAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZF
UiwgZnJhbWVidWZmZXIpOworICAgICAgZ2wuY2xlYXJDb2xvcigwLjUsIDAuNSwgMC41LCAwLjUp
OworICAgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7CisgICAgICB3dHUuY2hlY2tD
YW52YXNSZWN0KGdsLCAwLCAwLCAxLCAxLCBbMTI3LCAxMjcsIDEyNywgMTI3XSwgdW5kZWZpbmVk
LCAxKTsKKyAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7Cisg
ICAgfQorfQorCitmdW5jdGlvbiB0ZXN0RGVwdGgoZGVwdGgpCit7CisgICAgZGVidWcoIlRlc3Rp
bmcgZGVwdGggPSAiICsgZGVwdGgpOworICAgIGlmIChkZXB0aCkgeworICAgICAgICBzaG91bGRC
ZU5vbk51bGwoImdsID0gZ2V0V2ViR0woMSwgMSwgeyBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFz
OiBmYWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkiKTsKKyAgICAgICAgc2hvdWxkQmVUcnVl
KCJnbC5nZXRQYXJhbWV0ZXIoZ2wuREVQVEhfQklUUykgPj0gMTYiKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBzaG91bGRCZU5vbk51bGwoImdsID0gZ2V0V2ViR0woMSwgMSwgeyBkZXB0aDogZmFs
c2UsIHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAx
LCAwKSIpOworICAgICAgICBzaG91bGRCZVRydWUoImdsLmdldFBhcmFtZXRlcihnbC5ERVBUSF9C
SVRTKSA9PSAwIik7CisgICAgfQorICAgIHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGds
LlJFRF9CSVRTKSA+PSA4Iik7CisgICAgc2hvdWxkQmVUcnVlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wu
R1JFRU5fQklUUykgPj0gOCIpOworICAgIHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGds
LkJMVUVfQklUUykgPj0gOCIpOworICAgIHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGds
LkFMUEhBX0JJVFMpID49IDgiKTsKKworICAgIHNob3VsZEJlTm9uTnVsbCgiY29udGV4dEF0dHJp
YnMgPSBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpIik7CisKKyAgICBnbC5kZXB0aEZ1bmMoZ2wu
TkVWRVIpOworCisgICAgdmFyIHZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbCisgICAgICAg
ICAxLjAsICAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgIDEuMCwgMC4wLAorICAgICAgICAtMS4w
LCAtMS4wLCAwLjAsCisgICAgICAgICAxLjAsICAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgLTEu
MCwgMC4wLAorICAgICAgICAgMS4wLCAtMS4wLCAwLjBdKTsKKyAgICB2YXIgY29sb3JzID0gbmV3
IFVpbnQ4QXJyYXkoWworICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAw
LCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwK
KyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1XSk7CisKKyAg
ICBkcmF3QW5kUmVhZFBpeGVsKGdsLCB2ZXJ0aWNlcywgY29sb3JzLCAwLCAwKTsKKyAgICBjb3Jy
ZWN0Q29sb3IgPSAoY29udGV4dEF0dHJpYnMuZGVwdGggPyBbMCwgMCwgMCwgMjU1XSA6IFsyNTUs
IDAsIDAsIDI1NV0pOworICAgIHd0dS5jaGVja0NhbnZhc1JlY3QoZ2wsIDAsIDAsIDEsIDEsIGNv
cnJlY3RDb2xvcik7CisKKyAgICBpZiAoZmJIYXNEZXB0aCkgeworICAgICAgZ2wuYmluZEZyYW1l
YnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBmcmFtZWJ1ZmZlcik7CisgICAgICBnbC5jbGVhcihnbC5D
T0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQVEhfQlVGRkVSX0JJVCk7CisgICAgICBkcmF3QW5kUmVh
ZFBpeGVsKGdsLCB2ZXJ0aWNlcywgY29sb3JzLCAwLCAwKTsKKyAgICAgIHd0dS5jaGVja0NhbnZh
c1JlY3QoZ2wsIDAsIDAsIDEsIDEsIFswLCAwLCAwLCAyNTVdKTsKKyAgICAgIGdsLmJpbmRGcmFt
ZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0
U3RlbmNpbEFuZERlcHRoKHN0ZW5jaWwsIGRlcHRoKQoreworICAgIGRlYnVnKCJUZXN0aW5nIHN0
ZW5jaWwgPSAiICsgc3RlbmNpbCArICIsIGRlcHRoID0gIiArIGRlcHRoKTsKKyAgICB2YXIgY3Jl
YXRpb25TdHJpbmcgPQorICAgICAgICAiZ2wgPSBnZXRXZWJHTCgxLCAxLCB7IGRlcHRoOiAiICsg
ZGVwdGggKyAiLCBzdGVuY2lsOiAiICsgc3RlbmNpbCArICIsIGFudGlhbGlhczogZmFsc2UgfSwg
WyAwLCAwLCAwLCAxIF0sIDEsIDApIjsKKyAgICBzaG91bGRCZU5vbk51bGwoY3JlYXRpb25TdHJp
bmcpOworCisgICAgc2hvdWxkQmVUcnVlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuUkVEX0JJVFMpID49
IDgiKTsKKyAgICBzaG91bGRCZVRydWUoImdsLmdldFBhcmFtZXRlcihnbC5HUkVFTl9CSVRTKSA+
PSA4Iik7CisgICAgc2hvdWxkQmVUcnVlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuQkxVRV9CSVRTKSA+
PSA4Iik7CisgICAgc2hvdWxkQmVUcnVlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuQUxQSEFfQklUUykg
Pj0gOCIpOworICAgIGlmIChkZXB0aCkKKyAgICAgICAgc2hvdWxkQmVUcnVlKCJnbC5nZXRQYXJh
bWV0ZXIoZ2wuREVQVEhfQklUUykgPj0gMTYiKTsKKyAgICBlbHNlCisgICAgICAgIHNob3VsZEJl
VHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLkRFUFRIX0JJVFMpID09IDAiKTsKKworICAgIGlmIChz
dGVuY2lsKQorICAgICAgICBzaG91bGRCZVRydWUoImdsLmdldFBhcmFtZXRlcihnbC5TVEVOQ0lM
X0JJVFMpID49IDgiKTsKKyAgICBlbHNlCisgICAgICAgIHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFy
YW1ldGVyKGdsLlNURU5DSUxfQklUUykgPT0gMCIpOworCisgICAgc2hvdWxkQmVOb25OdWxsKCJj
b250ZXh0QXR0cmlicyA9IGdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCkiKTsKKyAgICBpZiAoIWRl
cHRoICYmIGNvbnRleHRBdHRyaWJzLmRlcHRoKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIldlYkdM
IGltcGxlbWVudGF0aW9uIHByb3ZpZGVkIGEgZGVwdGggYnVmZmVyIHdoZW4gaXQgc2hvdWxkIG5v
dCBoYXZlIik7CisgICAgfQorICAgIGlmICghY29udGV4dEF0dHJpYnMuZGVwdGgpCisgICAgICAg
IGRlcHRoID0gZmFsc2U7CisgICAgaWYgKCFzdGVuY2lsICYmIGNvbnRleHRBdHRyaWJzLnN0ZW5j
aWwpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiV2ViR0wgaW1wbGVtZW50YXRpb24gcHJvdmlkZWQg
YSBzdGVuY2lsIGJ1ZmZlciB3aGVuIGl0IHNob3VsZCBub3QgaGF2ZSIpOworICAgIH0KKyAgICBp
ZiAoIWNvbnRleHRBdHRyaWJzLnN0ZW5jaWwpCisgICAgICAgIHN0ZW5jaWwgPSBmYWxzZTsKKwor
ICAgIGdsLmRlcHRoRnVuYyhnbC5BTFdBWVMpOworCisgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuTkVW
RVIsIDEsIDEpOworICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLCBnbC5LRUVQLCBnbC5LRUVQKTsK
KworICAgIHZhciB2ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoWworICAgICAgICAgMS4wLCAx
LjAsIDAuMCwKKyAgICAgICAgLTEuMCwgMS4wLCAwLjAsCisgICAgICAgIC0xLjAsIC0xLjAsIDAu
MCwKKyAgICAgICAgIDEuMCwgMS4wLCAwLjAsCisgICAgICAgIC0xLjAsIC0xLjAsIDAuMCwKKyAg
ICAgICAgIDEuMCwgLTEuMCwgMC4wXSk7CisgICAgdmFyIGNvbG9ycyA9IG5ldyBVaW50OEFycmF5
KFsKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAg
ICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1
NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NV0pOworCisgICAgZHJhd0FuZFJl
YWRQaXhlbChnbCwgdmVydGljZXMsIGNvbG9ycywgMCwgMCk7CisgICAgY29ycmVjdENvbG9yID0g
KHN0ZW5jaWwgPyBbMCwgMCwgMCwgMjU1XSA6IFsyNTUsIDAsIDAsIDI1NV0pOworICAgIHd0dS5j
aGVja0NhbnZhc1JlY3QoZ2wsIDAsIDAsIDEsIDEsIGNvcnJlY3RDb2xvcikKKworICAgIGlmIChm
Ykhhc1N0ZW5jaWwpIHsKKyAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwg
ZnJhbWVidWZmZXIpOworICAgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRF
UFRIX0JVRkZFUl9CSVQpOworICAgICAgZHJhd0FuZFJlYWRQaXhlbChnbCwgdmVydGljZXMsIGNv
bG9ycywgMCwgMCk7CisgICAgICB3dHUuY2hlY2tDYW52YXNSZWN0KGdsLCAwLCAwLCAxLCAxLCBb
MCwgMCwgMCwgMjU1XSk7CisgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIs
IG51bGwpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdEFudGlhbGlhcyhhbnRpYWxpYXMpCit7
CisgICAgZGVidWcoIlRlc3RpbmcgYW50aWFsaWFzID0gIiArIGFudGlhbGlhcyk7CisgICAgLy8g
Qm90aCB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiBjYW52YXMgYXJlIE4uCisgICAgdmFyIE4gPSAy
OworICAgIGlmIChhbnRpYWxpYXMpCisgICAgICAgIHNob3VsZEJlTm9uTnVsbCgiZ2wgPSBnZXRX
ZWJHTCgiICsgTiArICIsICIgKyBOICsgIiwgeyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNl
LCBhbHBoYTogZmFsc2UsIGFudGlhbGlhczogdHJ1ZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCki
KTsKKyAgICBlbHNlCisgICAgICAgIHNob3VsZEJlTm9uTnVsbCgiZ2wgPSBnZXRXZWJHTCgiICsg
TiArICIsICIgKyBOICsgIiwgeyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbHBoYTog
ZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIik7CisgICAg
c2hvdWxkQmVOb25OdWxsKCJjb250ZXh0QXR0cmlicyA9IGdsLmdldENvbnRleHRBdHRyaWJ1dGVz
KCkiKTsKKworICAgIHZhciB2ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoWworICAgICAgICAg
MS4wLCAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgMS4wLCAwLjAsCisgICAgICAgIC0xLjAsIC0x
LjAsIDAuMF0pOworICAgIHZhciBjb2xvcnMgPSBuZXcgVWludDhBcnJheShbCisgICAgICAgIDI1
NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAw
LCAyNTVdKTsKKyAgICBkcmF3QW5kUmVhZFBpeGVsKGdsLCB2ZXJ0aWNlcywgY29sb3JzLCAwLCAw
KTsKKyAgICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkoTiAqIE4gKiA0KTsKKyAgICBnbC5yZWFk
UGl4ZWxzKDAsIDAsIE4sIE4sIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJ1Zik7CisgICAg
cmVkQ2hhbm5lbHNbMF0gPSBidWZbNCAqIChOICsgMSldOyAvLyAoMSwgMSkKKyAgICByZWRDaGFu
bmVsc1sxXSA9IGJ1Zls0ICogTiAqIChOIC0gMSldOyAvLyBsZWZ0IHRvcAorICAgIHJlZENoYW5u
ZWxzWzJdID0gYnVmWzQgKiAoTiAtIDEpXTsgLy8gcmlnaHQgYm90dG9tCisgICAgc2hvdWxkQmVU
cnVlKCJyZWRDaGFubmVsc1sxXSA9PSAyNTUgJiYgcmVkQ2hhbm5lbHNbMl0gPT0gMCIpOworICAg
IHNob3VsZEJlKCJyZWRDaGFubmVsc1swXSAhPSAyNTUgJiYgcmVkQ2hhbm5lbHNbMF0gIT0gMCIs
ICJjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMiKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7
CisgICAgLy8gdGVzdERlZmF1bHQoKTsKKyAgICAvLyB0ZXN0QWxwaGEodHJ1ZSk7CisgICAgLy8g
dGVzdEFscGhhKGZhbHNlKTsKKyAgICAvLyB0ZXN0RGVwdGgodHJ1ZSk7CisgICAgLy8gdGVzdERl
cHRoKGZhbHNlKTsKKyAgICAvLyB0ZXN0U3RlbmNpbEFuZERlcHRoKHRydWUsIGZhbHNlKTsKKyAg
ICAvLyB0ZXN0U3RlbmNpbEFuZERlcHRoKGZhbHNlLCBmYWxzZSk7CisgICAgLy8gdGVzdFN0ZW5j
aWxBbmREZXB0aCh0cnVlLCB0cnVlKTsKKyAgICAvLyB0ZXN0U3RlbmNpbEFuZERlcHRoKGZhbHNl
LCB0cnVlKTsKKyAgICB0ZXN0QW50aWFsaWFzKHRydWUpOworICAgIC8vdGVzdEFudGlhbGlhcyhm
YWxzZSk7CisKKyAgICBmaW5pc2hUZXN0KCk7Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHkgb25sb2FkPSJpbml0KCkiPgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJnbC9yZXNvdXJjZXMvcGVuZGluZ193ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNl
L2dsc2wvbWlzYy9zaGFkZXItd2l0aC1yZXNlcnZlZC13b3Jkcy0yLmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJnbC9yZXNvdXJjZXMvcGVuZGluZ193ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2ds
c2wvbWlzYy9zaGFkZXItd2l0aC1yZXNlcnZlZC13b3Jkcy0yLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGM0
YmYxN2ZlZWUwZmYxYzkwMjEwYjNmNTgyZDZlZmYwNTkxODNmMAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmdsL3Jlc291cmNlcy9wZW5kaW5nX3dlYmdsX3Rlc3RfZmlsZXMvY29u
Zm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci13aXRoLXJlc2VydmVkLXdvcmRzLTIuaHRtbApAQCAt
MCwwICsxLDIyNiBAQAorPCEtLQorQ29weXJpZ2h0IChjKSAyMDIxIFRoZSBLaHJvbm9zIEdyb3Vw
IEluYy4KK1VzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCitmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZS4KKy0t
PgorCis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1dGYt
OCI+Cis8dGl0bGU+V2ViR0wgR0xTTCBDb25mb3JtYW5jZSBUZXN0cyAtIE5vbiBSZXNlcnZlZCBX
b3JkczwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uL3dl
YmdsX3Rlc3RfZmlsZXMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uL3dlYmdsX3Rlc3RfZmlsZXMvcmVzb3VyY2Vz
L2dsc2wtZmVhdHVyZS10ZXN0cy5jc3MiLz4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi93ZWJn
bF90ZXN0X2ZpbGVzL2pzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi8uLi8uLi93ZWJnbF90ZXN0X2ZpbGVzL2pzL3dlYmdsLXRlc3QtdXRpbHMuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgaWQ9InZlcnRleFNoYWRlcjAiIHR5cGU9InRl
eHQvc29tZXRoaW5nLW5vdC1qYXZhc2NyaXB0Ij4KK3N0cnVjdCAkcmVwbGFjZU1lIHsKKyAgdmVj
NCAkcmVwbGFjZU1lOworfTsKK3N0cnVjdCBGb28geworICAkcmVwbGFjZU1lICRyZXBsYWNlTWU7
Cit9OworYXR0cmlidXRlIHZlYzQgcG9zaXRpb247Cit2b2lkIG1haW4oKQoreworICAgIEZvbyBm
OworICAgIGYuJHJlcGxhY2VNZS4kcmVwbGFjZU1lID0gcG9zaXRpb247CisgICAgZ2xfUG9zaXRp
b24gPSBmLiRyZXBsYWNlTWUuJHJlcGxhY2VNZTsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCBpZD0i
ZnJhZ21lbnRTaGFkZXIwIiB0eXBlPSJ0ZXh0L3NvbWV0aGluZy1ub3QtamF2YXNjcmlwdCI+Citw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKK3ZlYzQgJHJlcGxhY2VNZSgpIHsKKyAgICByZXR1cm4g
dmVjNCgwLDEsMCwxKTsKK30KK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfRnJhZ0NvbG9yID0gJHJl
cGxhY2VNZSgpOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJ2ZXJ0ZXhTaGFkZXIxIiB0eXBl
PSJ0ZXh0L3NvbWV0aGluZy1ub3QtamF2YXNjcmlwdCI+CithdHRyaWJ1dGUgdmVjNCAkcmVwbGFj
ZU1lOwordm9pZCBtYWluKCkKK3sKKyAgICBnbF9Qb3NpdGlvbiA9ICRyZXBsYWNlTWU7Cit9Cis8
L3NjcmlwdD4KKzxzY3JpcHQgaWQ9ImZyYWdtZW50U2hhZGVyMSIgdHlwZT0idGV4dC9zb21ldGhp
bmctbm90LWphdmFzY3JpcHQiPgorcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cit2ZWM0IGZvbyh2
ZWM0ICRyZXBsYWNlTWUpIHsKKyAgcmV0dXJuICRyZXBsYWNlTWU7Cit9Cit2b2lkIG1haW4oKQor
eworICAgIGdsX0ZyYWdDb2xvciA9IGZvbyh2ZWM0KDEsMCwxLDEpKTsKK30KKzwvc2NyaXB0Pgor
PHNjcmlwdCBpZD0idmVydGV4U2hhZGVyMiIgdHlwZT0idGV4dC9zb21ldGhpbmctbm90LWphdmFz
Y3JpcHQiPgordmFyeWluZyB2ZWM0ICRyZXBsYWNlTWU7CithdHRyaWJ1dGUgdmVjNCBwb3NpdGlv
bjsKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfUG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAkcmVw
bGFjZU1lID0gcG9zaXRpb247Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQgaWQ9ImZyYWdtZW50U2hh
ZGVyMiIgdHlwZT0idGV4dC9zb21ldGhpbmctbm90LWphdmFzY3JpcHQiPgorcHJlY2lzaW9uIG1l
ZGl1bXAgZmxvYXQ7Cit2YXJ5aW5nIHZlYzQgJHJlcGxhY2VNZTsKK3ZvaWQgbWFpbigpCit7Cisg
ICAgZ2xfRnJhZ0NvbG9yID0gJHJlcGxhY2VNZTsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCBpZD0i
dmVydGV4U2hhZGVyMyIgdHlwZT0idGV4dC9zb21ldGhpbmctbm90LWphdmFzY3JpcHQiPgorYXR0
cmlidXRlIHZlYzQgcG9zaXRpb247Cit2b2lkIG1haW4oKQoreworICAgIGdsX1Bvc2l0aW9uID0g
cG9zaXRpb247Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQgaWQ9ImZyYWdtZW50U2hhZGVyMyIgdHlw
ZT0idGV4dC9zb21ldGhpbmctbm90LWphdmFzY3JpcHQiPgorcHJlY2lzaW9uIG1lZGl1bXAgZmxv
YXQ7Cit1bmlmb3JtIHZlYzQgJHJlcGxhY2VNZTsKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfRnJh
Z0NvbG9yID0gJHJlcGxhY2VNZTsKK30KKzwvc2NyaXB0PgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0
IjsKKwordmFyIE1ldGFsV29yZHMgPSBbCisgICJhbGlnbmFzIiwKKyAgImFsaWdub2YiLAorICAi
YXNfdHlwZSIsCisgICJhbmQiLAorICAiYXV0byIsCisgICJjYXRjaCIsCisgICJjaGFyIiwKKyAg
ImNvbnN0X2Nhc3QiLAorICAiY29uc3RhbnQiLAorICAiY29uc3RleHByIiwKKyAgImRlY2x0eXBl
IiwKKyAgImRlbGV0ZSIsCisgICJkZXZpY2UiLAorICAiZHluYW1pY19jYXN0IiwKKyAgImV4cGxp
Y2l0IiwKKyAgImV4cG9ydCIsCisgICJmcmFnbWVudCIsCisgICJmcmllbmQiLAorICAiaW50MTZf
dCIsCisgICJpbnQzMl90IiwKKyAgImludDY0X3QiLAorICAiaW50OF90IiwKKyAgImtlcm5lbCIs
CisgICJtYWluMCIsCisgICJtZXRhbCIsCisgICJtdXRhYmxlIiwKKyAgIm5ldyIsCisgICJub2V4
Y2VwdCIsCisgICJudWxscHRyX3QiLAorICAibnVsbHB0ciIsCisgICJvcGVyYXRvciIsCisgICJv
dmVycmlkZSIsCisgICJvciIsCisgICJwcml2YXRlIiwKKyAgInByb3RlY3RlZCIsCisgICJwdHJk
aWZmX3QiLAorICAicmF5X2RhdGEiLAorICAicmVnaXN0ZXIiLAorICAic2lnbmVkIiwKKyAgInNp
emVfdCIsCisgICJzdGFnZV9pbiIsCisgICJzdGF0aWNfYXNzZXJ0IiwKKyAgInN0YXRpY19jYXN0
IiwKKyAgInRocmVhZF9sb2NhbCIsCisgICJ0aHJlYWQiLAorICAidGhyZWFkZ3JvdXBfaW1hZ2Vi
bG9jayIsCisgICJ0aHJlYWRncm91cCIsCisgICJ0aHJvdyIsCisgICJ0cnkiLAorICAidHlwZWlk
IiwKKyAgInR5cGVuYW1lIiwKKyAgInVjaGFyIiwKKyAgInVpbnQxNl90IiwKKyAgInVpbnQzMl90
IiwKKyAgInVpbnQ2NF90IiwKKyAgInVpbnQ4X3QiLAorICAidXNob3J0IiwKKyAgInZlcnRleCIs
CisgICJ2aXJ0dWFsIiwKKyAgIndjaGFyX3QiLAorICAieG9yIiwKKyAgIk5BTiIsCisgICJJTkZJ
TklUWSIsCisgICJQcmFnbWEiLAorICAiX1ByYWdtYSIsCisgICJBTkdMRV8xIiwKKyAgIklOVF9N
QVgiLAorXTsKKworCitkZXNjcmlwdGlvbigpOworCit2YXIgd3R1ID0gV2ViR0xUZXN0VXRpbHM7
Cit2YXIgZ2wgPSB3dHUuY3JlYXRlM0RDb250ZXh0KCk7CisKK3ZhciBzb3VyY2VzID0gW107Citm
b3IgKHZhciBpaSA9IDA7IGlpIDwgNDsgKytpaSkgeworICB2YXIgdnNyYyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJ2ZXJ0ZXhTaGFkZXIiICsgaWkpLnRleHQ7CisgIHZhciBmc3JjID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZyYWdtZW50U2hhZGVyIiArIGlpKS50ZXh0OworICBzb3Vy
Y2VzLnB1c2goe3ZzcmM6IHZzcmMsIGZzcmM6IGZzcmN9KTsKK30KKwordmFyIGJhZFdvcmROZHgg
PSAwOwordmFyIGxpc3ROZHggPSAwOworCitmdW5jdGlvbiB0ZXN0TmV4dFdvcmQoKSB7CisgIHZh
ciBsaXN0ID0gTWV0YWxXb3JkczsKKyAgaWYgKGxpc3ROZHggPj0gbGlzdC5sZW5ndGgpIHsKKyAg
ICAgIGZpbmlzaFRlc3QoKTsKKyAgICAgIHJldHVybjsKKyAgfQorICB0ZXN0V29yZChsaXN0W2xp
c3ROZHhdKTsKKyAgKytsaXN0TmR4OworICBzZXRUaW1lb3V0KHRlc3ROZXh0V29yZCwgMCk7Cit9
Cit0ZXN0TmV4dFdvcmQoKTsKKworZnVuY3Rpb24gdGVzdFdvcmQod29yZCkgeworICBkZWJ1Zygi
Iik7CisgIGRlYnVnKCJ0ZXN0aW5nOiAiICsgd29yZCk7CisKKyAgc291cmNlcy5mb3JFYWNoKHNy
YyA9PiB7CisgICAgdmFyIHZzID0gc3JjLnZzcmMucmVwbGFjZSgvXCRyZXBsYWNlTWUvZywgd29y
ZCk7CisgICAgdmFyIGZzID0gc3JjLmZzcmMucmVwbGFjZSgvXCRyZXBsYWNlTWUvZywgd29yZCk7
CisKKyAgICB2YXIgc3VjY2VzcyA9IHRydWU7CisgICAgdmFyIHByb2dyYW0gPSB3dHUubG9hZFBy
b2dyYW0oZ2wsIHZzLCBmcywgZnVuY3Rpb24obXNnKSB7CisgICAgICBkZWJ1Zyhtc2cpOworICAg
ICAgc3VjY2VzcyA9IGZhbHNlOworICAgIH0sIHRydWUpOworICAgIGlmIChzdWNjZXNzKSB7Cisg
ICAgICB0ZXN0UGFzc2VkKCJzaGFkZXIgd2l0aDogJyIgKyB3b3JkICsgIicgY29tcGlsZWQiKTsK
KyAgICB9IGVsc2UgeworICAgICAgdGVzdEZhaWxlZCgic2hhZGVyIHdpdGg6ICciICsgd29yZCAr
ICInIGZhaWxlZCB0byBjb21waWxlIik7CisgICAgfQorICAgIGlmIChwcm9ncmFtKSB7CisgICAg
ICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pOworICAgIH0KKyAgICB3dHUuZ2xFcnJvclNob3Vs
ZEJlKGdsLCBnbC5OT19FUlJPUiwgInNob3VsZCBiZSBubyBHTCBlcnJvcnMiKTsKKyAgfSk7Cit9
CisKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KKworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJjZXMvcGVu
ZGluZ193ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zd2l6emxlLWFzLWx2
YWx1ZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3BlbmRpbmdfd2ViZ2xfdGVz
dF9maWxlcy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc3dpenpsZS1hcy1sdmFsdWUuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45ZTYzZTdjMGRmYzIzOWI3M2MyNTVjZjFjMDBmYTljNjQ1OTc0YTIxCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3BlbmRpbmdfd2ViZ2xfdGVz
dF9maWxlcy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc3dpenpsZS1hcy1sdmFsdWUuaHRtbApAQCAt
MCwwICsxLDE0NiBAQAorPCEtLQorQ29weXJpZ2h0IChjKSAyMDIxIFRoZSBLaHJvbm9zIEdyb3Vw
IEluYy4KK1VzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCitmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZS4KKy0t
PgorCis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1dGYt
OCI+Cis8dGl0bGU+V2ViR0wgR0xTTCBDb25mb3JtYW5jZSBUZXN0cyAtIFN3aXp6bGUgYXMgbHZh
bHVlPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vd2Vi
Z2xfdGVzdF9maWxlcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vd2ViZ2xfdGVzdF9maWxlcy9yZXNvdXJjZXMv
Z2xzbC1mZWF0dXJlLXRlc3RzLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL3dlYmds
X3Rlc3RfZmlsZXMvanMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uLy4uLy4uL3dlYmdsX3Rlc3RfZmlsZXMvanMvd2ViZ2wtdGVzdC11dGlscy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vd2ViZ2xfdGVzdF9maWxlcy9qcy9nbHNsLWNv
bmZvcm1hbmNlLXRlc3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJk
ZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzwhLS0KK1Rlc3Rz
IHN3aXp6bGUgbHZhbHVlcyB3aXRoIG91dCBhbmQgaW5vdXQgZnVuY3Rpb24gcGFyYW1ldGVycy4K
KzYuMS4xIEZ1bmN0aW9uIENhbGxpbmcgQ29udmVudGlvbnMKK0V2YWx1YXRpb24gb2YgYW4gaW5v
dXQgcGFyYW1ldGVyIHJlc3VsdHMgaW4gYm90aCBhIHZhbHVlIGFuZCBhbiBsLXZhbHVlOyB0aGUg
dmFsdWUgaXMgY29waWVkIHRvCit0aGUgZm9ybWFsIHBhcmFtZXRlciBhdCBjYWxsIHRpbWUgYW5k
IHRoZSBsLSB2YWx1ZSBpcyB1c2VkIHRvIGNvcHkgb3V0IGEgdmFsdWUgd2hlbiB0aGUgZnVuY3Rp
b24KK3JldHVybnMuCistLT4KKzxzY3JpcHQgaWQ9ImZzMCIgdHlwZT0idGV4dC9zb21ldGhpbmct
bm90LWphdmFzY3JpcHQiPgorcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cit2b2lkIGYob3V0ICRk
aW0gdikgeworICAgIHYgPSAkcmVmOworfQordm9pZCBtYWluKCkKK3sKKyAgICB2ZWM0IGkgPSB2
ZWM0KDEwLiwgMTEuLCAxMi4sIDEzLik7CisgICAgZihpLiRjb21wb25lbnRzKTsKKyAgICBib29s
IGNvcnJlY3QgPSBmYWxzZTsKKyAgICBpZiAoaSA9PSAkcmVzdWx0KQorICAgICAgICBjb3JyZWN0
ID0gdHJ1ZTsKKyAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAsIGNvcnJlY3QgPyAxLiA6IDAuLCAw
LiwgMS4pOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJmczEiIHR5cGU9InRleHQvc29tZXRo
aW5nLW5vdC1qYXZhc2NyaXB0Ij4KK3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0Owordm9pZCBmKGlu
b3V0ICRkaW0gdikgeworICAgIHYgKz0gJHJlZjsKK30KK3ZvaWQgbWFpbigpCit7CisgICAgdmVj
NCBpID0gdmVjNCgxMC4sIDExLiwgMTIuLCAxMy4pOworICAgIGYoaS4kY29tcG9uZW50cyk7Cisg
ICAgYm9vbCBjb3JyZWN0ID0gZmFsc2U7CisgICAgaWYgKGkgPT0gJHJlc3VsdEluT3V0KQorICAg
ICAgICBjb3JyZWN0ID0gdHJ1ZTsKKyAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAsIGNvcnJlY3Qg
PyAxLiA6IDAuLCAwLiwgMS4pOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0PgorInVzZSBzdHJpY3Qi
OworCitkZXNjcmlwdGlvbigpOworCisvLyBHTFNMIEVTIDMuMDAuNiA1LjUgVmVjdG9yIENvbXBv
bmVudHMKKy8vIFRvIGZvcm0gYW4gbC12YWx1ZSwgc3dpenpsaW5nIG11c3QgYmUgYXBwbGllZCB0
byBhbiBsLXZhbHVlIG9mIHZlY3RvciB0eXBlLCBjb250YWluIG5vIGR1cGxpY2F0ZQorLy8gY29t
cG9uZW50cywgYW5kIGl0IHJlc3VsdHMgaW4gYW4gbC12YWx1ZSBvZiBzY2FsYXIgb3IgdmVjdG9y
IHR5cGUsIGRlcGVuZGluZyBvbiBudW1iZXIgb2YKKy8vIGNvbXBvbmVudHMgc3BlY2lmaWVkLgor
ZnVuY3Rpb24gY29tcHV0ZUxWYWx1ZVN3aXp6bGVzKCkgeworICAgIGxldCByZXN1bHRzID0gW107
CisgICAgZnVuY3Rpb24gZihjb21wb25lbnRzLCBzd2l6emxlKSB7CisgICAgICAgIGZvciAobGV0
IGMgb2YgY29tcG9uZW50cykgeworICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHN3aXp6bGUuY29u
Y2F0KFtjXSkpOworICAgICAgICAgICAgbGV0IHJlc3QgPSBjb21wb25lbnRzLmZpbHRlcigoZSkg
PT4geyByZXR1cm4gZSAhPSBjOyB9KTsKKyAgICAgICAgICAgIGlmIChyZXN0KQorICAgICAgICAg
ICAgICAgIGYocmVzdCwgc3dpenpsZS5jb25jYXQoW2NdKSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZihbMCwgMSwgMiwgM10sIFtdKTsKKyAgICByZXR1cm4gcmVzdWx0czsKK30KKwordmFyIHN3
aXp6bGVzID0gY29tcHV0ZUxWYWx1ZVN3aXp6bGVzKCk7CisKKy8vIFNhbml0eSBjaGVjayB0aGF0
IGNvbXB1dGluZyB0aGUgc3dpenpsZXMgcHJvZHVjZXMgc29tZXRoaW5nIHRvIHRlc3QuCitzaG91
bGRCZSgic3dpenpsZXMubGVuZ3RoIiwgIjY0Iik7CitzaG91bGRCZSgiY29tcG9uZW50cyhzd2l6
emxlc1swXSkiLCAiJ3InIik7CitzaG91bGRCZSgiY29tcG9uZW50cyhzd2l6emxlc1tzd2l6emxl
cy5sZW5ndGggLSAxXSkiLCAiJ2FiZ3InIik7CisKK3ZhciByZWZWYWx1ZSA9IFsgIjEuIiwgIjIu
IiwgIjMuIiwgIjQuIiBdOworCit2YXIgaW5pdCA9IFsgIjEwLiIsICIxMS4iLCAiMTIuIiwgIjEz
LiIgXTsKKworZnVuY3Rpb24gZGltKHN3aXp6bGUpIHsKKyAgaWYgKHN3aXp6bGUubGVuZ3RoID09
IDEpCisgICAgcmV0dXJuICdmbG9hdCcKKyAgcmV0dXJuIGB2ZWMke3N3aXp6bGUubGVuZ3RofWA7
Cit9CisKK2Z1bmN0aW9uIHJlc3VsdChzd2l6emxlKSB7CisgIGxldCBhID0gaW5pdC5tYXAoKGUs
IGMpID0+IHsKKyAgICAgIGlmIChzd2l6emxlLmluY2x1ZGVzKGMpKQorICAgICAgICByZXR1cm4g
cmVmVmFsdWVbY107CisgICAgICByZXR1cm4gZTsKKyAgfSk7CisgIHJldHVybiBgdmVjNCgke2Eu
am9pbignLCAnKX0pYDsKK30KKworZnVuY3Rpb24gcmVzdWx0SW5PdXQoc3dpenpsZSkgeworICBs
ZXQgYSA9IGluaXQubWFwKChlLCBjKSA9PiB7CisgICAgICBpZiAoc3dpenpsZS5pbmNsdWRlcyhj
KSkKKyAgICAgICAgcmV0dXJuIGAke2V9ICsgJHtyZWZWYWx1ZVtjXX1gOworICAgICAgcmV0dXJu
IGU7CisgIH0pOworICByZXR1cm4gYHZlYzQoJHthLmpvaW4oJywgJyl9KWA7Cit9CisKK2Z1bmN0
aW9uIHJlZihzd2l6emxlKSB7CisgIGxldCBhID0gc3dpenpsZS5tYXAoKGMpID0+IHsgcmV0dXJu
IHJlZlZhbHVlW2NdOyB9KTsKKyAgcmV0dXJuIGAke2RpbShzd2l6emxlKX0oJHthLmpvaW4oJywg
Jyl9KWA7Cit9CisKK2Z1bmN0aW9uIGNvbXBvbmVudHMoc3dpenpsZSkgeworICByZXR1cm4gc3dp
enpsZS5tYXAoKGUpID0+IHsgcmV0dXJuICdyZ2JhJ1tlXTsgfSkuam9pbignJyk7Cit9CisKK3Zh
ciB0ZXN0cyA9IFtdOworZm9yICh2YXIgc3dpenpsZSBvZiBzd2l6emxlcykgeworICBmb3IgKHZh
ciBpaSA9IDA7IGlpIDwgMjsgKytpaSkgeworICAgIHZhciBmc3JjID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImZzIiArIGlpKS50ZXh0OworICAgIGZzcmMgPSBmc3JjLnJlcGxhY2UoL1wkZGlt
L2csIGRpbShzd2l6emxlKSkKKyAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cJHJlc3VsdEluT3V0
L2csIHJlc3VsdEluT3V0KHN3aXp6bGUpKQorICAgICAgICAgICAgICAgLnJlcGxhY2UoL1wkcmVz
dWx0L2csIHJlc3VsdChzd2l6emxlKSkKKyAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cJHJlZi9n
LCByZWYoc3dpenpsZSkpCisgICAgICAgICAgICAgICAucmVwbGFjZSgvXCRjb21wb25lbnRzL2cs
IGNvbXBvbmVudHMoc3dpenpsZSkpOworICAgIHRlc3RzLnB1c2goeworICAgICAgICBmU2hhZGVy
U291cmNlOiBmc3JjLAorICAgICAgICBmU2hhZGVyU3VjY2VzczogdHJ1ZSwKKyAgICAgICAgbGlu
a1N1Y2Nlc3M6IHRydWUsCisgICAgICAgIHBhc3NNc2c6IGBTd2l6emxlIGFzIGx2YWx1ZSB3b3Jr
cywgZnVuYzogJHtpaX0sIHN3aXp6bGU6ICR7Y29tcG9uZW50cyhzd2l6emxlKX1gCisgICAgfSk7
CisgIH0KK30KKworR0xTTENvbmZvcm1hbmNlVGVzdGVyLnJ1blJlbmRlclRlc3RzKHRlc3RzKTsK
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z2wvcmVzb3VyY2VzL3BlbmRpbmdfd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS90ZXh0dXJl
cy9taXNjL3RleC1pbWFnZS12aWRlby1yZXBlYXRlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ2wv
cmVzb3VyY2VzL3BlbmRpbmdfd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS90ZXh0dXJlcy9t
aXNjL3RleC1pbWFnZS12aWRlby1yZXBlYXRlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyYzE2NzZmZGQz
MThlOWY0MDgyMWU3ODcwYzQzYTU5YTY2MTVkNTkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJnbC9yZXNvdXJjZXMvcGVuZGluZ193ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNl
L3RleHR1cmVzL21pc2MvdGV4LWltYWdlLXZpZGVvLXJlcGVhdGVkLmh0bWwKQEAgLTAsMCArMSwx
MDggQEAKKzwhLS0KK0NvcHlyaWdodCAoYykgMjAyMiBUaGUgS2hyb25vcyBHcm91cCBJbmMuCitV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUuCistLT4KKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vd2ViZ2xfdGVzdF9maWxlcy9yZXNv
dXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi93ZWJn
bF90ZXN0X2ZpbGVzL2pzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi8uLi8uLi93ZWJnbF90ZXN0X2ZpbGVzL2pzL3dlYmdsLXRlc3QtdXRpbHMuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3ZhciB3dHUgPSBXZWJHTFRlc3RVdGlsczsK
K3ZhciBnbCA9IG51bGw7Cit2YXIgdGV4dHVyZUxvYyA9IG51bGw7Cit2YXIgc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gZmFsc2U7Cit2YXIgYmx1ZSA9IFswLCAwLCAyNDhdOwordmFyIHllbGxvdyA9IFsy
NTUsIDI1NSwgMF07Cit2YXIgYmxhY2sgPSBbMCwgMCwgMF07Citpbml0VGVzdGluZ0hhcm5lc3Mo
KTsKKworZnVuY3Rpb24gaW5pdCgpCit7CisgICAgZGVzY3JpcHRpb24oJ1ZlcmlmeSBvcHRpbWl6
YXRpb24gb2YgcmVwZWF0ZWQgdXBsb2FkcyBvZiBIVE1MVmlkZW9FbGVtZW50IHRvIGEgdGV4dHVy
ZScpOworCisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImV4YW1w
bGUiKTsKKyAgICBnbCA9IHd0dS5jcmVhdGUzRENvbnRleHQoY2FudmFzLCB7IGFudGlhbGlhczog
ZmFsc2UsIGRlcHRoOiBmYWxzZSB9KTsKKyAgICBjb25zdCBwcm9ncmFtID0gd3R1LnNldHVwVGV4
dHVyZWRRdWFkKGdsKTsKKyAgICBnbC5jbGVhckNvbG9yKDAsMCwwLDEpOworICAgIGdsLmNsZWFy
RGVwdGgoMSk7CisgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JV
RkZFUl9CSVQpOworICAgIGNvbnN0IHRleHR1cmVMb2MgPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24o
cHJvZ3JhbSwgInRleCIpOworICAgIGdsLnVuaWZvcm0xaSh0ZXh0dXJlTG9jLCAwKTsKKyAgICBn
bC52aWV3cG9ydCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpOworCisgICAgY29u
c3QgdmlkZW8xID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInZpZGVvMSIpOworICAgIGNvbnN0
IHZpZGVvMiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ2aWRlbzIiKTsKKyAgICB3dHUuc3Rh
cnRQbGF5aW5nQW5kV2FpdEZvclZpZGVvKHZpZGVvMSwgKHZpZGVvKSA9PiB7CisgICAgICAgIHd0
dS5zdGFydFBsYXlpbmdBbmRXYWl0Rm9yVmlkZW8odmlkZW8yLCAodmlkZW8pID0+IHsKKyAgICAg
ICAgICAgIHJ1blRlc3QodmlkZW8xLCB2aWRlbzIpOworICAgICAgICB9KTsKKyAgICB9KTsKK30K
KworZnVuY3Rpb24gY2hlY2tGcmFtZWJ1ZmZlckhhc1ZpZGVvMihnbCkKK3sKKyAgICBjb25zdCBs
ZWZ0Q29sb3IgPSBibHVlOworICAgIGNvbnN0IHJpZ2h0Q29sb3IgPSB5ZWxsb3c7CisgICAgY29u
c3QgdG9sZXJhbmNlID0gNTsKKyAgICBkZWJ1ZygiQ2hlY2tpbmcgbWlkIGxlZnQgYm9yZGVyIik7
CisgICAgd3R1LmNoZWNrQ2FudmFzUmVjdChnbCwgNCwgMjAsIDIsIDIsIGxlZnRDb2xvciwgInNo
b3VsZEJlICIgKyBsZWZ0Q29sb3IsIHRvbGVyYW5jZSk7CisgICAgZGVidWcoIkNoZWNraW5nIG1p
ZCByaWdodCBib3JkZXIiKTsKKyAgICB3dHUuY2hlY2tDYW52YXNSZWN0KGdsLCBnbC5jYW52YXMu
d2lkdGggLSA0LCBnbC5jYW52YXMuaGVpZ2h0IC0gMjAsIDIsIDIsIHJpZ2h0Q29sb3IsICJzaG91
bGRCZSAiICsgcmlnaHRDb2xvciwgdG9sZXJhbmNlKTsKK30KKworZnVuY3Rpb24gdGVzdFR3b1Rl
eHR1cmVzQnVnMSh2aWRlbzEsIHZpZGVvMikKK3sKKyAgICBkZWJ1ZygiVGVzdGluZyB1cGxvYWRp
bmcgc2FtZSB2aWRlbyB0byB0d28gZGlmZmVyZW50IHRleHR1cmVzIGRvZXMgbm90IHNraXAgdGhl
IGxhdHRlciB1cGxvYWQiKQorICAgIGNvbnN0IHRleHR1cmVzID0gW2dsLmNyZWF0ZVRleHR1cmUo
KSwgZ2wuY3JlYXRlVGV4dHVyZSgpXTsKKyAgICAvLyBJbml0aWFsaXplIHRleHR1cmVbMF0gdG8g
c29tZSBzcGVjaWZpYyBjb250ZW50IHRoYXQgZmFpbHMgdGhlIHRlc3QuCisgICAgLy8gSW5pdGlh
bGl6YXRpb24gaXMgZG9uZSB3aXRoIHZpZGVvIHRvIGV4ZXJjaXNlIHRoZSB2aWRlbyBjb250ZW50
IGlkZW50aWZpY2F0aW9uCisgICAgLy8gYWxnb3JpdGhtLgorICAgIGdsLmJpbmRUZXh0dXJlKGds
LlRFWFRVUkVfMkQsIHRleHR1cmVzWzBdKTsKKyAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVf
MkQsIDAsIGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHZpZGVvMSk7CisKKyAg
ICAvLyBUcnkgdG8gZm9vbCB0aGUgdmlkZW8gY29udGVudCBpZGVudGlmaWNhdGlvbiBhbGdvcml0
aG0gYnkgZmlyc3QgdXBsb2FkaW5nCisgICAgLy8gdGhlIHBhc3NpbmcgY29udGVudCB0byBzb21l
IG90aGVyLCB1bnRlc3RlZCB0ZXh0dXJlLgorICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVf
MkQsIHRleHR1cmVzWzFdKTsKKyAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGds
LlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHZpZGVvMik7CisKKyAgICAvLyBVcGRh
dGUgdGV4dHVyZVswXSB0byBzb21lIGNvbnRlbnQgdGhhdCBwYXNzZXMgdGhlIHRlc3QuCisgICAg
Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZXNbMF0pOworICAgIGdsLnRleElt
YWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllU
RSwgdmlkZW8yKTsKKworICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB0ZXh0dXJlWzBdIHJlY2VpdmVk
IHRoZSBuZXcgY29udGVudC4KKyAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGds
LlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTElORUFSKTsKKyAgICBnbC50ZXhQYXJhbWV0ZXJpKGds
LlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTElORUFSKTsKKyAgICBnbC50
ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5DTEFNUF9U
T19FREdFKTsKKyAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVf
V1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKTsKKworICAgIHd0dS5jbGVhckFuZERyYXdVbml0UXVh
ZChnbCwgWzI1NSwgMCwgMCwgMjU1XSk7CisgICAgY2hlY2tGcmFtZWJ1ZmZlckhhc1ZpZGVvMihn
bCk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QodmlkZW8xLCB2aWRlbzIpCit7CisgICAgdGVzdFR3
b1RleHR1cmVzQnVnMSh2aWRlbzEsIHZpZGVvMik7CisgICAgd3R1LmdsRXJyb3JTaG91bGRCZShn
bCwgZ2wuTk9fRVJST1IsICJzaG91bGQgYmUgbm8gZXJyb3JzIik7CisgICAgZmluaXNoVGVzdCgp
OworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImluaXQoKSI+Cis8Y2FudmFz
IGlkPSJleGFtcGxlIiB3aWR0aD0iNjQiIGhlaWdodD0iNDgiPjwvY2FudmFzPgorPGRpdiBpZD0i
ZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8dmlkZW8gaWQ9
InZpZGVvMSIgPgorICA8c291cmNlIHNyYz0iLi4vLi4vLi4vLi4vd2ViZ2xfdGVzdF9maWxlcy9y
ZXNvdXJjZXMvcmVkLWdyZWVuLm1wNCIgIHR5cGU9J3ZpZGVvL21wNDsgY29kZWNzPSJhdmMxLjQy
RTAxRSInIC8+CisgIDxzb3VyY2Ugc3JjPSIuLi8uLi8uLi8uLi93ZWJnbF90ZXN0X2ZpbGVzL3Jl
c291cmNlcy9yZWQtZ3JlZW4ud2VibXZwOC53ZWJtIiB0eXBlPSd2aWRlby93ZWJtOyBjb2RlY3M9
InZwOCInIC8+CisgIDxzb3VyY2Ugc3JjPSIuLi8uLi8uLi8uLi93ZWJnbF90ZXN0X2ZpbGVzL3Jl
c291cmNlcy9yZWQtZ3JlZW4udGhlb3JhLm9ndiIgIHR5cGU9J3ZpZGVvL29nZzsgY29kZWNzPSJ0
aGVvcmEiJyAvPgorPC92aWRlbz4KKzx2aWRlbyBpZD0idmlkZW8yIiA+CisgICAgPHNvdXJjZSBz
cmM9Ii4uLy4uLy4uLy4uL3dlYmdsX3Rlc3RfZmlsZXMvcmVzb3VyY2VzL3ZpZGVvLXJvdGF0aW9u
LTAubXA0IiAgdHlwZT0ndmlkZW8vbXA0OyBjb2RlY3M9ImF2YzEuNDJFMDFFIicgLz4KKyAgPC92
aWRlbz4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdsL3Jl
c291cmNlcy9wZW5kaW5nX3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UyL2dsc2wzL2VtcHR5
LXNoYWRlci13aXRoLW91dHB1dC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3Bl
bmRpbmdfd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZTIvZ2xzbDMvZW1wdHktc2hhZGVyLXdp
dGgtb3V0cHV0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjI4NTBkMWExNDg5NGQzNzdiNmIwMmEzYTA2YjBj
NmU1M2ExYzk1YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdsL3Jlc291cmNl
cy9wZW5kaW5nX3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UyL2dsc2wzL2VtcHR5LXNoYWRl
ci13aXRoLW91dHB1dC5odG1sCkBAIC0wLDAgKzEsOTMgQEAKKzwhLS0KK0NvcHlyaWdodCAoYykg
MjAyMSBUaGUgS2hyb25vcyBHcm91cCBJbmMuCitVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorZm91bmQgaW4gdGhl
IExJQ0VOU0UudHh0IGZpbGUuCistLT4KKworPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorPG1ldGEgY2hhcnNldD0idXRmLTgiPgorPHRpdGxlPldlYkdMIEdMU0wgQ29uZm9ybWFuY2Ug
VGVzdHMgLSBFbXB0eSBTaGFkZXIgYXMgT3V0cHV0PC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgaHJlZj0iLi4vLi4vLi4vd2ViZ2xfdGVzdF9maWxlcy9yZXNvdXJjZXMvanMtdGVzdC1z
dHlsZS5jc3MiLz4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vd2ViZ2xf
dGVzdF9maWxlcy9yZXNvdXJjZXMvZ2xzbC1mZWF0dXJlLXRlc3RzLmNzcyIvPgorPHNjcmlwdCBz
cmM9Ii4uLy4uLy4uL3dlYmdsX3Rlc3RfZmlsZXMvanMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3dlYmdsX3Rlc3RfZmlsZXMvanMvd2ViZ2wtdGVzdC11
dGlscy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vd2ViZ2xfdGVzdF9maWxl
cy9qcy9nbHNsLWNvbmZvcm1hbmNlLXRlc3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KzwhLS0KK1Rlc3QgdGhhdCBhbiBlbXB0eSB2ZXJ0ZXggc2hhZGVyIGFuZCBmcmFnbWVudCBzaGFk
ZXIgY29tcGlsZS4KKy0tPgorPHNjcmlwdCBpZD0iZnMwIiB0eXBlPSJ0ZXh0L3NvbWV0aGluZy1u
b3QtamF2YXNjcmlwdCI+I3ZlcnNpb24gMzAwIGVzCitwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsK
K291dCB2ZWM0IG91dENvbG9yMDsKK3ZvaWQgbWFpbigpCit7Cit9Cis8L3NjcmlwdD4KKworPHNj
cmlwdCBpZD0iZnMxIiB0eXBlPSJ0ZXh0L3NvbWV0aGluZy1ub3QtamF2YXNjcmlwdCI+I3ZlcnNp
b24gMzAwIGVzCitwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKK3ZvaWQgbWFpbigpCit7Cit9Cis8
L3NjcmlwdD4KKworPHNjcmlwdCBpZD0idnMyIiB0eXBlPSJ0ZXh0L3NvbWV0aGluZy1ub3QtamF2
YXNjcmlwdCI+I3ZlcnNpb24gMzAwIGVzCitwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKK3ZvaWQg
bWFpbigpCit7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQgaWQ9ImZzMiIgdHlwZT0idGV4dC9zb21l
dGhpbmctbm90LWphdmFzY3JpcHQiPiN2ZXJzaW9uIDMwMCBlcworcHJlY2lzaW9uIG1lZGl1bXAg
ZmxvYXQ7CitvdXQgdmVjNCBvdXRDb2xvcjA7Cit2b2lkIG1haW4oKQoreworICAgIG91dENvbG9y
MCA9IHZlYzQoMCwyNTUsMCwyNTUpOworfQorPC9zY3JpcHQ+CisKKzxzY3JpcHQ+CisidXNlIHN0
cmljdCI7CisKK2Rlc2NyaXB0aW9uKCk7CisKK3ZhciB0ZXN0cyA9IFtdOwordmFyIGZzcmMgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnMwIikudGV4dDsKK3Rlc3RzLnB1c2goeworICAgIGZT
aGFkZXJTb3VyY2U6IGZzcmMsCisgICAgZlNoYWRlclN1Y2Nlc3M6IHRydWUsCisgICAgbGlua1N1
Y2Nlc3M6IHRydWUsCisgICAgcmVuZGVyQ29sb3I6IFsyNTUsIDI1NSwgMjU1LCAyNTVdLAorICAg
IHBhc3NNc2c6YEVtcHR5IGZyYWdtZW50IHNoYWRlciB3aXRoIGNvbG9yT3V0IHdvcmtzYAorfSkK
KwordmFyIGZzcmMxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZzMSIpLnRleHQ7Cit0ZXN0
cy5wdXNoKHsKKyAgICBmU2hhZGVyU291cmNlOiBmc3JjMSwKKyAgICBmU2hhZGVyU3VjY2Vzczog
dHJ1ZSwKKyAgICBsaW5rU3VjY2VzczogdHJ1ZSwKKyAgICByZW5kZXJDb2xvcjogWzI1NSwgMjU1
LCAyNTUsIDI1NV0sCisgICAgcGFzc01zZzogYEVtcHR5IGZyYWdtZW50IHNoYWRlciB3aXRoIG5v
IG91dHB1dCB3b3Jrc2AKK30pCisKK3ZhciB2c3JjMiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJ2czIiKS50ZXh0OwordmFyIGZzcmMyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZzMiIp
LnRleHQ7Cit0ZXN0cy5wdXNoKHsKKyAgICB2U2hhZGVyU291cmNlOiB2c3JjMiwKKyAgICB2U2hh
ZGVyU3VjY2VzczogdHJ1ZSwKKyAgICBmU2hhZGVyU291cmNlOiBmc3JjMiwKKyAgICBmU2hhZGVy
U3VjY2VzczogdHJ1ZSwKKyAgICBsaW5rU3VjY2VzczogdHJ1ZSwKKyAgICByZW5kZXJDb2xvcjog
WzI1NSwgMjU1LCAyNTUsIDI1NV0sCisgICAgcGFzc01zZzogYEVtcHR5IFZlcnRleCBzaGFkZXIg
d29ya3NgCit9KQorCitHTFNMQ29uZm9ybWFuY2VUZXN0ZXIucnVuUmVuZGVyVGVzdHModGVzdHMs
IDIpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJnbC9yZXNvdXJjZXMvcGVuZGluZ193ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlMi9n
bHNsMy9mbG9hdC1jb25zdGFudC1leHByZXNzaW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ2wv
cmVzb3VyY2VzL3BlbmRpbmdfd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZTIvZ2xzbDMvZmxv
YXQtY29uc3RhbnQtZXhwcmVzc2lvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZmE4OGViOWRiN2FlZDdl
OGJjODNmMDlhZWU0NTQ1NGU3MDg1YWM0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViZ2wvcmVzb3VyY2VzL3BlbmRpbmdfd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZTIvZ2xz
bDMvZmxvYXQtY29uc3RhbnQtZXhwcmVzc2lvbnMuaHRtbApAQCAtMCwwICsxLDEwMyBAQAorPCEt
LQorQ29weXJpZ2h0IChjKSAyMDE5IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4KK1VzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCitmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZS4KKy0tPgorCis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8dGl0bGU+RmxvYXQg
Y29uc3RhbnQgZXhwcmVzc2lvbiBjb3JuZXIgY2FzZXM8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIuLi8uLi8uLi93ZWJnbF90ZXN0X2ZpbGVzL3Jlc291cmNlcy9qcy10ZXN0
LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3dlYmdsX3Rlc3RfZmlsZXMvanMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3dlYmdsX3Rl
c3RfZmlsZXMvanMvd2ViZ2wtdGVzdC11dGlscy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vLi4vd2ViZ2xfdGVzdF9maWxlcy9qcy9nbHNsLWNvbmZvcm1hbmNlLXRlc3QuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8
ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgaWQ9ImZzaGFkZXJQb3NpdGl2ZURpdmlz
aW9uQnlaZXJvSXNJbmZpbml0ZSIgdHlwZT0ieC1zaGFkZXIveC1mcmFnbWVudCI+I3ZlcnNpb24g
MzAwIGVzCitwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CitvdXQgdmVjNCBteV9GcmFnQ29sb3I7Cit1
bmlmb3JtIGZsb2F0IHU7IC8vIEFzc3VtZWQgdG8gaGF2ZSB0aGUgZGVmYXVsdCB2YWx1ZSAwLjAK
K3ZvaWQgbWFpbigpCit7CisgICAgLy8gUG9zaXRpdmUgbm9uLXplcm8gZGl2aXNpb24gYnkgemVy
byBzaG91bGQgcHJvZHVjZSBpbmZpbml0eS4KKyAgICAvLyBHTFNMIEVTIDMuMDAuNiA0LjUuMSBS
YW5nZSBhbmQgUHJlY2lzaW9uCisgICAgLy8gIkhvd2V2ZXIsIGRpdmlkaW5nIGEgbm9uLXplcm8g
YnkgMCByZXN1bHRzIGluIHRoZSBhcHByb3ByaWF0ZWx5IHNpZ25lZCBJRUVFIEluZjoKKyAgICAv
LyBJZiBib3RoIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB6ZXJvcyBhcmUgaW1wbGVtZW50ZWQsIHRo
ZSBjb3JyZWN0bHkgc2lnbmVkIEluZiB3aWxsIGJlCisgICAgLy8gZ2VuZXJhdGVkLCBvdGhlcndp
c2UgcG9zaXRpdmUgSW5mIGlzIGdlbmVyYXRlZC4iCisgICAgZmxvYXQgZiA9IDEuIC8gMC47Cisg
ICAgZiA9IHUgPT0gMC4gPyBmIDogMS47CisgICAgYm9vbCBjb3JyZWN0ID0gaXNpbmYoZikgJiYg
c2lnbihmKSA+IDAuOworICAgIG15X0ZyYWdDb2xvciA9IHZlYzQoMC4wLCBjb3JyZWN0ID8gMS4g
OiAwLiwgMC4wLCAxLjApOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJmc2hhZGVyTmVnYXRp
dmVEaXZpc2lvbkJ5WmVyb0lzSW5maW5pdGUiIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQiPiN2
ZXJzaW9uIDMwMCBlcworcHJlY2lzaW9uIGhpZ2hwIGZsb2F0Oworb3V0IHZlYzQgbXlfRnJhZ0Nv
bG9yOwordW5pZm9ybSBmbG9hdCB1OyAvLyBBc3N1bWVkIHRvIGhhdmUgdGhlIGRlZmF1bHQgdmFs
dWUgMC4wCit2b2lkIG1haW4oKQoreworICAgIC8vIE5lZ2F0aXZlIG5vbi16ZXJvIGRpdmlzaW9u
IGJ5IHplcm8gc2hvdWxkIHByb2R1Y2UgbmVnYXRpdmUgaW5maW5pdHkgaWYgc3VwcG9ydGVkLAor
ICAgIC8vIG90aGVydmllcyBpbmZpbml0eS4KKyAgICAvLyBHTFNMIEVTIDMuMDAuNiA0LjUuMSBS
YW5nZSBhbmQgUHJlY2lzaW9uCisgICAgLy8gIkhvd2V2ZXIsIGRpdmlkaW5nIGEgbm9uLXplcm8g
YnkgMCByZXN1bHRzIGluIHRoZSBhcHByb3ByaWF0ZWx5IHNpZ25lZCBJRUVFIEluZjoKKyAgICAv
LyBJZiBib3RoIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB6ZXJvcyBhcmUgaW1wbGVtZW50ZWQsIHRo
ZSBjb3JyZWN0bHkgc2lnbmVkIEluZiB3aWxsIGJlCisgICAgLy8gZ2VuZXJhdGVkLCBvdGhlcndp
c2UgcG9zaXRpdmUgSW5mIGlzIGdlbmVyYXRlZC4iCisgICAgZmxvYXQgZiA9IC0xLiAvIDAuOwor
ICAgIGYgPSB1ID09IDAuID8gZiA6IDEuOworICAgIGJvb2wgc3VwcG9ydHNOZWdhdGl2ZVplcm9z
ID0gc2lnbigtMC4pIDwgMC47CisgICAgYm9vbCBjb3JyZWN0ID0gaXNpbmYoZikgJiYgKHNpZ24o
ZikgPCAwLiB8fCAhc3VwcG9ydHNOZWdhdGl2ZVplcm9zKTsKKyAgICBteV9GcmFnQ29sb3IgPSB2
ZWM0KDAuLCBjb3JyZWN0ID8gMS4gOiAwLiwgMC4sIDEuKTsKK30KKzwvc2NyaXB0PgorCis8c2Ny
aXB0IGlkPSJmc2hhZGVyWmVyb0RpdmlzaW9uQnlaZXJvSXNOYW4iIHR5cGU9Ingtc2hhZGVyL3gt
ZnJhZ21lbnQiPiN2ZXJzaW9uIDMwMCBlcworcHJlY2lzaW9uIGhpZ2hwIGZsb2F0Oworb3V0IHZl
YzQgbXlfRnJhZ0NvbG9yOwordW5pZm9ybSBmbG9hdCB1OyAvLyBBc3N1bWVkIHRvIGhhdmUgdGhl
IGRlZmF1bHQgdmFsdWUgMC4wCit2b2lkIG1haW4oKQoreworICAgIC8vIE5vbi16ZXJvIGRpdmlz
aW9uIGJ5IHplcm8gc2hvdWxkIHByb2R1Y2UgaW5maW5pdHkuCisgICAgLy8gR0xTTCBFUyAzLjAw
LjYgNC41LjEgUmFuZ2UgYW5kIFByZWNpc2lvbgorICAgIC8vICJOYU5zIGFyZSBub3QgcmVxdWly
ZWQgdG8gYmUgZ2VuZXJhdGVkLiBTdXBwb3J0IGZvciBzaWduYWxpbmcgTmFOcyBpcyBub3QgcmVx
dWlyZWQgYW5kCisgICAgLy8gZXhjZXB0aW9ucyBhcmUgbmV2ZXIgcmFpc2VkLiBPcGVyYXRpb25z
IGFuZCBidWlsdC1pbiBmdW5jdGlvbnMgdGhhdCBvcGVyYXRlIG9uIGEgTmFOIGFyZSBub3QKKyAg
ICAvLyByZXF1aXJlZCB0byByZXR1cm4gYSBOYU4gYXMgdGhlIHJlc3VsdC4gSG93ZXZlciBpZiBO
YU5zIGFyZSBnZW5lcmF0ZWQsIGlzbmFuKCkgc2hvdWxkIHJldHVybgorICAgIC8vIHRoZSBjb3Jy
ZWN0IHZhbHVlLiIKKyAgICBmbG9hdCBmID0gMC4gLyAwLjsKKyAgICBmID0gdSA9PSAwLiA/IGYg
OiAxLjsKKyAgICBib29sIG5hbldhc0dlbmVyYXRlZCA9ICEoZiA8PSAwLiB8fCAwLiA8PSBmKTsK
KyAgICBib29sIGNvcnJlY3QgPSBpc25hbihmKSB8fCAhbmFuV2FzR2VuZXJhdGVkOworICAgIG15
X0ZyYWdDb2xvciA9IHZlYzQoMC4sIGNvcnJlY3QgPyAxLiA6IDAuLCAwLiwgMS4pOworfQorPC9z
Y3JpcHQ+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyJ1c2Ugc3RyaWN0IjsK
K2Rlc2NyaXB0aW9uKCk7CisKK0dMU0xDb25mb3JtYW5jZVRlc3Rlci5ydW5SZW5kZXJUZXN0cyhb
Cit7CisgIGZTaGFkZXJJZDogJ2ZzaGFkZXJQb3NpdGl2ZURpdmlzaW9uQnlaZXJvSXNJbmZpbml0
ZScsCisgIGZTaGFkZXJTdWNjZXNzOiB0cnVlLAorICBsaW5rU3VjY2VzczogdHJ1ZSwKKyAgcGFz
c01zZzogIlBvc2l0aXZlIGZsb2F0cyBkaXZpZGVkIGJ5IHplcm8gc2hvdWxkIHByb2R1Y2UgaW5m
aW5pdHkuIgorfSwKK3sKKyAgZlNoYWRlcklkOiAnZnNoYWRlck5lZ2F0aXZlRGl2aXNpb25CeVpl
cm9Jc0luZmluaXRlJywKKyAgZlNoYWRlclN1Y2Nlc3M6IHRydWUsCisgIGxpbmtTdWNjZXNzOiB0
cnVlLAorICBwYXNzTXNnOiAiTmVnYXRpdmUgZmxvYXRzIGRpdmlkZWQgYnkgemVybyBzaG91bGQg
cHJvZHVjZSBpbmZpbml0eSBvZiBjb3JyZWN0IHNpZ24uIgorfSwKK3sKKyAgZlNoYWRlcklkOiAn
ZnNoYWRlclplcm9EaXZpc2lvbkJ5WmVyb0lzTmFuJywKKyAgZlNoYWRlclN1Y2Nlc3M6IHRydWUs
CisgIGxpbmtTdWNjZXNzOiB0cnVlLAorICBwYXNzTXNnOiAiRmxvYXQgemVybyBkaXZpZGVkIGJ5
IHplcm8gc2hvdWxkIG1heWJlIHByb2R1Y2UgTmFOLiIKK30KK10sIDIpOworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>